[med-svn] [fw4spl] 02/11: New upstream version 0.11.0.2

Flavien Bridault fbridault-guest at moszumanska.debian.org
Thu Nov 24 07:49:57 UTC 2016


This is an automated email from the git hooks/post-receive script.

fbridault-guest pushed a commit to branch master
in repository fw4spl.

commit 735aaebbc36dc346f17118e7f62b48086c4d0026
Author: Flavien Bridault <fbridault at ircad.fr>
Date:   Thu Nov 17 14:33:12 2016 +0100

    New upstream version 0.11.0.2
---
 .hgignore                                          |    5 +
 .hgtags                                            |   26 +-
 .travis.yml                                        |   40 +
 Apps/Tuto01Basic/Properties.cmake                  |    7 -
 Apps/Tuto01Basic/bin/build.options                 |   13 -
 Apps/Tuto01Basic/rc/plugin.xml                     |   27 -
 Apps/Tuto01Basic/rc/profile.xml                    |   16 -
 Apps/Tuto02DataServiceBasic/COPYING                |  675 ---
 Apps/Tuto02DataServiceBasic/COPYING.LESSER         |  166 -
 Apps/Tuto02DataServiceBasic/Properties.cmake       |    7 -
 Apps/Tuto02DataServiceBasic/bin/build.options      |   19 -
 Apps/Tuto02DataServiceBasic/rc/plugin.xml          |   68 -
 Apps/Tuto02DataServiceBasic/rc/profile.xml         |   33 -
 Apps/Tuto02DataServiceBasicCtrl/COPYING            |  675 ---
 Apps/Tuto02DataServiceBasicCtrl/COPYING.LESSER     |  166 -
 Apps/Tuto02DataServiceBasicCtrl/Properties.cmake   |    7 -
 Apps/Tuto02DataServiceBasicCtrl/bin/build.options  |   22 -
 .../tuto02DataServiceBasicCtrl/Namespace.hpp       |   20 -
 .../include/tuto02DataServiceBasicCtrl/Plugin.hpp  |   58 -
 .../include/tuto02DataServiceBasicCtrl/config.hpp  |   39 -
 Apps/Tuto02DataServiceBasicCtrl/rc/plugin.xml      |    6 -
 Apps/Tuto02DataServiceBasicCtrl/rc/profile.xml     |   25 -
 .../src/tuto02DataServiceBasicCtrl/Plugin.cpp      |  100 -
 Apps/Tuto03DataService/COPYING                     |  675 ---
 Apps/Tuto03DataService/COPYING.LESSER              |  166 -
 Apps/Tuto03DataService/Properties.cmake            |    7 -
 Apps/Tuto03DataService/bin/build.options           |   18 -
 Apps/Tuto03DataService/rc/plugin.xml               |  100 -
 Apps/Tuto03DataService/rc/profile.xml              |   29 -
 Apps/Tuto03DataServiceBis/COPYING                  |  675 ---
 Apps/Tuto03DataServiceBis/COPYING.LESSER           |  166 -
 Apps/Tuto03DataServiceBis/Properties.cmake         |    7 -
 Apps/Tuto03DataServiceBis/bin/build.options        |   18 -
 Apps/Tuto03DataServiceBis/rc/plugin.xml            |  103 -
 Apps/Tuto03DataServiceBis/rc/profile.xml           |   30 -
 Apps/Tuto04ComChannel/COPYING                      |  675 ---
 Apps/Tuto04ComChannel/COPYING.LESSER               |  166 -
 Apps/Tuto04ComChannel/Properties.cmake             |    7 -
 Apps/Tuto04ComChannel/bin/build.options            |   18 -
 .../rc/configurations/config-connect.xml           |  108 -
 .../rc/configurations/config-proxy.xml             |  102 -
 Apps/Tuto04ComChannel/rc/plugin.xml                |    7 -
 Apps/Tuto04ComChannel/rc/profile.xml               |   31 -
 Apps/Tuto04ComChannel/rc/profileProxy.xml          |   31 -
 Apps/Tuto05Mesher/COPYING                          |  675 ---
 Apps/Tuto05Mesher/COPYING.LESSER                   |  166 -
 Apps/Tuto05Mesher/Properties.cmake                 |    7 -
 Apps/Tuto05Mesher/bin/build.options                |   21 -
 Apps/Tuto05Mesher/rc/plugin.xml                    |  193 -
 Apps/Tuto05Mesher/rc/profile.xml                   |   33 -
 Apps/Tuto05MesherB/COPYING                         |  675 ---
 Apps/Tuto05MesherB/COPYING.LESSER                  |  166 -
 Apps/Tuto05MesherB/Properties.cmake                |    7 -
 Apps/Tuto05MesherB/bin/build.options               |   21 -
 Apps/Tuto05MesherB/rc/plugin.xml                   |  194 -
 Apps/Tuto05MesherB/rc/profile.xml                  |   33 -
 Apps/Tuto05MesherC/COPYING                         |  675 ---
 Apps/Tuto05MesherC/COPYING.LESSER                  |  166 -
 Apps/Tuto05MesherC/Properties.cmake                |    7 -
 Apps/Tuto05MesherC/bin/build.options               |   21 -
 Apps/Tuto05MesherC/rc/plugin.xml                   |  221 -
 Apps/Tuto05MesherC/rc/profile.xml                  |   34 -
 Apps/Tuto06Filter/COPYING                          |  675 ---
 Apps/Tuto06Filter/COPYING.LESSER                   |  166 -
 Apps/Tuto06Filter/Properties.cmake                 |    7 -
 Apps/Tuto06Filter/bin/build.options                |   19 -
 Apps/Tuto06Filter/rc/plugin.xml                    |  113 -
 Apps/Tuto06Filter/rc/profile.xml                   |   31 -
 Apps/Tuto07LoaderForExternalData/COPYING           |  675 ---
 Apps/Tuto07LoaderForExternalData/COPYING.LESSER    |  166 -
 Apps/Tuto07LoaderForExternalData/Properties.cmake  |    7 -
 Apps/Tuto07LoaderForExternalData/bin/build.options |   20 -
 .../Tuto07LoaderForExternalData/rc/ExternalData.us |    5 -
 Apps/Tuto07LoaderForExternalData/rc/plugin.xml     |  286 --
 Apps/Tuto07LoaderForExternalData/rc/profile.xml    |   36 -
 .../rc/profileImageOnly.xml                        |   37 -
 Apps/Tuto08GenericScene/COPYING                    |  675 ---
 Apps/Tuto08GenericScene/COPYING.LESSER             |  166 -
 Apps/Tuto08GenericScene/Properties.cmake           |    7 -
 Apps/Tuto08GenericScene/bin/build.options          |   22 -
 Apps/Tuto08GenericScene/rc/plugin.xml              |  181 -
 Apps/Tuto08GenericScene/rc/profile.xml             |   31 -
 Apps/Tuto09MesherWithGenericScene/COPYING          |  675 ---
 Apps/Tuto09MesherWithGenericScene/COPYING.LESSER   |  166 -
 Apps/Tuto09MesherWithGenericScene/Properties.cmake |    7 -
 .../Tuto09MesherWithGenericScene/bin/build.options |   25 -
 Apps/Tuto09MesherWithGenericScene/rc/plugin.xml    |  236 -
 Apps/Tuto09MesherWithGenericScene/rc/profile.xml   |   40 -
 Apps/Tuto10MatrixTransformInGS/COPYING             |  675 ---
 Apps/Tuto10MatrixTransformInGS/COPYING.LESSER      |  166 -
 Apps/Tuto10MatrixTransformInGS/Properties.cmake    |    7 -
 Apps/Tuto10MatrixTransformInGS/bin/build.options   |   20 -
 Apps/Tuto10MatrixTransformInGS/rc/plugin.xml       |  231 -
 Apps/Tuto10MatrixTransformInGS/rc/profile.xml      |   34 -
 Apps/Tuto11LaunchBasicConfig/COPYING               |  675 ---
 Apps/Tuto11LaunchBasicConfig/COPYING.LESSER        |  166 -
 Apps/Tuto11LaunchBasicConfig/Properties.cmake      |    7 -
 Apps/Tuto11LaunchBasicConfig/bin/build.options     |   18 -
 .../rc/BasicFrameConfig.xml                        |   36 -
 Apps/Tuto11LaunchBasicConfig/rc/plugin.xml         |   83 -
 Apps/Tuto11LaunchBasicConfig/rc/profile.xml        |   30 -
 Apps/Tuto12Picker/COPYING                          |  675 ---
 Apps/Tuto12Picker/COPYING.LESSER                   |  166 -
 Apps/Tuto12Picker/Properties.cmake                 |    7 -
 Apps/Tuto12Picker/bin/build.options                |   22 -
 Apps/Tuto12Picker/rc/plugin.xml                    |  197 -
 Apps/Tuto12Picker/rc/profile.xml                   |   31 -
 Apps/Tuto13Scene2D/COPYING                         |  675 ---
 Apps/Tuto13Scene2D/COPYING.LESSER                  |  166 -
 Apps/Tuto13Scene2D/Properties.cmake                |    7 -
 Apps/Tuto13Scene2D/bin/build.options               |   16 -
 Apps/Tuto13Scene2D/rc/plugin.xml                   |  121 -
 Apps/Tuto13Scene2D/rc/profile.xml                  |   21 -
 Apps/Tuto14MeshGenerator/COPYING                   |  675 ---
 Apps/Tuto14MeshGenerator/COPYING.LESSER            |  166 -
 Apps/Tuto14MeshGenerator/Properties.cmake          |    7 -
 Apps/Tuto14MeshGenerator/bin/build.options         |   21 -
 Apps/Tuto14MeshGenerator/rc/plugin.xml             |  222 -
 Apps/Tuto14MeshGenerator/rc/profile.xml            |   31 -
 Apps/Tuto15Multithread/COPYING                     |  675 ---
 Apps/Tuto15Multithread/COPYING.LESSER              |  166 -
 Apps/Tuto15Multithread/Properties.cmake            |    7 -
 Apps/Tuto15Multithread/bin/build.options           |   18 -
 .../rc/configurations/config-dynamic.xml           |  156 -
 .../Tuto15Multithread/rc/configurations/config.xml |  136 -
 .../rc/configurations/mesh-visu.xml                |   38 -
 Apps/Tuto15Multithread/rc/plugin.xml               |   11 -
 Apps/Tuto15Multithread/rc/profile.xml              |   31 -
 Apps/Tuto15Multithread/rc/profileDynamic.xml       |   31 -
 Apps/Tuto15MultithreadCtrl/COPYING                 |  675 ---
 Apps/Tuto15MultithreadCtrl/COPYING.LESSER          |  166 -
 Apps/Tuto15MultithreadCtrl/Properties.cmake        |    7 -
 Apps/Tuto15MultithreadCtrl/bin/build.options       |   26 -
 .../include/Tuto15MultithreadCtrl/Namespace.hpp    |   20 -
 .../include/Tuto15MultithreadCtrl/Plugin.hpp       |   46 -
 .../Tuto15MultithreadCtrl/SIncrementArray.hpp      |   59 -
 .../include/Tuto15MultithreadCtrl/SReadArray.hpp   |   48 -
 .../include/Tuto15MultithreadCtrl/SShowArray.hpp   |   48 -
 .../include/Tuto15MultithreadCtrl/config.hpp       |   40 -
 Apps/Tuto15MultithreadCtrl/rc/plugin.xml           |   24 -
 Apps/Tuto15MultithreadCtrl/rc/profile.xml          |   10 -
 .../src/Tuto15MultithreadCtrl/Plugin.cpp           |  154 -
 .../src/Tuto15MultithreadCtrl/SIncrementArray.cpp  |   92 -
 .../src/Tuto15MultithreadCtrl/SReadArray.cpp       |   84 -
 .../src/Tuto15MultithreadCtrl/SShowArray.cpp       |   72 -
 Apps/TutoGui/COPYING                               |  675 ---
 Apps/TutoGui/COPYING.LESSER                        |  166 -
 Apps/TutoGui/Properties.cmake                      |    7 -
 Apps/TutoGui/bin/build.options                     |   18 -
 Apps/TutoGui/rc/plugin.xml                         |  235 -
 Apps/TutoGui/rc/profile.xml                        |   18 -
 Apps/TutoGui/rc/profileQt.xml                      |   18 -
 Apps/TutoGui/rc/tuto.ico                           |  Bin 9158 -> 0 bytes
 Apps/TutoPython/CMakeLists.txt                     |   11 -
 Apps/TutoPython/COPYING                            |  675 ---
 Apps/TutoPython/COPYING.LESSER                     |  166 -
 Apps/TutoPython/Properties.cmake                   |    7 -
 Apps/TutoPython/bin/build.options                  |   17 -
 Apps/TutoPython/rc/icons/cross.png                 |  Bin 1201 -> 0 bytes
 Apps/TutoPython/rc/icons/python.png                |  Bin 9930 -> 0 bytes
 Apps/TutoPython/rc/plugin.xml                      |  110 -
 Apps/TutoPython/rc/profile.xml                     |   28 -
 Apps/TutoPython/rc/tuto.ico                        |  Bin 9158 -> 0 bytes
 Apps/TutoTrianConverterCtrl/CMakeLists.txt         |    5 -
 Apps/TutoTrianConverterCtrl/COPYING                |  675 ---
 Apps/TutoTrianConverterCtrl/COPYING.LESSER         |  166 -
 Apps/TutoTrianConverterCtrl/Properties.cmake       |    7 -
 Apps/TutoTrianConverterCtrl/bin/build.options      |   14 -
 .../include/tutoTrianConverterCtrl/Namespace.hpp   |   21 -
 .../include/tutoTrianConverterCtrl/Plugin.hpp      |   51 -
 .../include/tutoTrianConverterCtrl/config.hpp      |   39 -
 Apps/TutoTrianConverterCtrl/rc/plugin.xml          |    6 -
 Apps/TutoTrianConverterCtrl/rc/profile.xml         |   13 -
 .../src/tutoTrianConverterCtrl/Plugin.cpp          |  130 -
 Apps/TutoVectorField/CMakeLists.txt                |    1 -
 Apps/TutoVectorField/COPYING                       |  675 ---
 Apps/TutoVectorField/COPYING.LESSER                |  166 -
 Apps/TutoVectorField/Properties.cmake              |    7 -
 Apps/TutoVectorField/bin/build.options             |   24 -
 Apps/TutoVectorField/rc/plugin.xml                 |  162 -
 Apps/TutoVectorField/rc/profile.xml                |   32 -
 Apps/VRRender/CMakeLists.txt                       |  106 +-
 Apps/VRRender/COPYING                              |  675 ---
 Apps/VRRender/COPYING.LESSER                       |  166 -
 Apps/VRRender/Properties.cmake                     |   47 +-
 Apps/VRRender/bin/build.options                    |   43 -
 Apps/VRRender/doc/Makefile                         |   88 +
 Apps/VRRender/doc/htmlhelpTowxHtmlHelp             |   22 +
 Apps/VRRender/doc/make.bat                         |  112 +
 Apps/VRRender/doc/makeall.sh                       |   43 +
 Apps/VRRender/doc/source/2D_Landmarks.rst          |   23 +
 Apps/VRRender/doc/source/2D_MPR.rst                |   42 +
 Apps/VRRender/doc/source/3D_Distances.rst          |   23 +
 Apps/VRRender/doc/source/3D_Medical_Image_Visu.rst |   32 +
 .../VRRender/doc/source/3D_Models_Manipulation.rst |   42 +
 Apps/VRRender/doc/source/3D_Models_Properties.rst  |   20 +
 Apps/VRRender/doc/source/3D_Resection.rst          |   53 +
 Apps/VRRender/doc/source/3D_Volume_Rendering.rst   |   37 +
 Apps/VRRender/doc/source/Acknowledgment.rst        |  136 +
 Apps/VRRender/doc/source/Basic_Image_Filtering.rst |   12 +
 Apps/VRRender/doc/source/Export_Data.rst           |    8 +
 Apps/VRRender/doc/source/Help_menu.rst             |   12 +
 Apps/VRRender/doc/source/Introduction.rst          |    9 +
 Apps/VRRender/doc/source/Licence.rst               |   23 +
 Apps/VRRender/doc/source/Minimal_config.rst        |   31 +
 Apps/VRRender/doc/source/Read_and_Select_Data.rst  |   26 +
 Apps/VRRender/doc/source/Shortcuts.rst             |  138 +
 Apps/VRRender/doc/source/Start_VR_Planning.rst     |   17 +
 Apps/VRRender/doc/source/Tool_bar.rst              |   11 +
 Apps/VRRender/doc/source/Transfert_function.rst    |   31 +
 .../doc/source/What_is_Volume_Rendering.rst        |   15 +
 Apps/VRRender/doc/source/Windows_Installation.rst  |   16 +
 .../doc/source/_static/3D-New-Resection.png        |  Bin 0 -> 219192 bytes
 .../doc/source/_static/3D-Planning-View-00.png     |  Bin 0 -> 207145 bytes
 .../doc/source/_static/3D-Resect-First.png         |  Bin 0 -> 252338 bytes
 .../source/_static/3D-Resect-cutting-planes.png    |  Bin 0 -> 284064 bytes
 .../doc/source/_static/3D-Resect-manage.png        |  Bin 0 -> 171825 bytes
 .../doc/source/_static/3D-Resect-plane-side.png    |  Bin 0 -> 263504 bytes
 .../doc/source/_static/3D-Resect-start.png         |  Bin 0 -> 189534 bytes
 .../doc/source/_static/3D-Resect-volume.png        |  Bin 0 -> 242396 bytes
 Apps/VRRender/doc/source/_static/3D-distance.png   |  Bin 0 -> 142029 bytes
 Apps/VRRender/doc/source/_static/3D-landmark.png   |  Bin 0 -> 163292 bytes
 Apps/VRRender/doc/source/_static/3D-rotate.png     |  Bin 0 -> 191571 bytes
 Apps/VRRender/doc/source/_static/3D-scan-1-3.png   |  Bin 0 -> 222456 bytes
 .../doc/source/_static/3D-scan-GL-value.png        |  Bin 0 -> 157133 bytes
 .../doc/source/_static/3D-scan-ax-front-sag.png    |  Bin 0 -> 190004 bytes
 .../doc/source/_static/3D-scan-contrast.png        |  Bin 0 -> 160927 bytes
 .../doc/source/_static/3D-show-hide-organs.png     |  Bin 0 -> 208376 bytes
 .../doc/source/_static/3D-show-hide-scan.png       |  Bin 0 -> 230334 bytes
 .../VRRender/doc/source/_static/3D-translation.png |  Bin 0 -> 79500 bytes
 .../doc/source/_static/3D-transparency.png         |  Bin 0 -> 188677 bytes
 Apps/VRRender/doc/source/_static/3D-turn.png       |  Bin 0 -> 152259 bytes
 Apps/VRRender/doc/source/_static/3D-zoom.png       |  Bin 0 -> 93864 bytes
 .../doc/source/_static/Add-Find-View-landmark.png  |  Bin 0 -> 5482 bytes
 Apps/VRRender/doc/source/_static/Add-landmark.png  |  Bin 0 -> 1577 bytes
 Apps/VRRender/doc/source/_static/Add-plan1.png     |  Bin 0 -> 2312 bytes
 Apps/VRRender/doc/source/_static/Add-plan2.png     |  Bin 0 -> 2846 bytes
 Apps/VRRender/doc/source/_static/AddTool.png       |  Bin 0 -> 1052 bytes
 Apps/VRRender/doc/source/_static/Find-landmark.png |  Bin 0 -> 2122 bytes
 Apps/VRRender/doc/source/_static/Mode-VR.png       |  Bin 0 -> 1981 bytes
 Apps/VRRender/doc/source/_static/Negato-01.png     |  Bin 0 -> 291839 bytes
 .../doc/source/_static/Negato-Distance.png         |  Bin 0 -> 223655 bytes
 Apps/VRRender/doc/source/_static/Negato-Zoom.png   |  Bin 0 -> 209461 bytes
 Apps/VRRender/doc/source/_static/Negato-axes.png   |  Bin 0 -> 298175 bytes
 .../doc/source/_static/Negato-contrast.png         |  Bin 0 -> 152816 bytes
 Apps/VRRender/doc/source/_static/Negato-filter.png |  Bin 0 -> 164233 bytes
 Apps/VRRender/doc/source/_static/Negato-info.png   |  Bin 0 -> 276129 bytes
 .../doc/source/_static/Negato-landmarks.png        |  Bin 0 -> 325920 bytes
 .../doc/source/_static/Negato-translate.png        |  Bin 0 -> 240307 bytes
 Apps/VRRender/doc/source/_static/Resection.png     |  Bin 0 -> 1439 bytes
 Apps/VRRender/doc/source/_static/Resection2.png    |  Bin 0 -> 2287 bytes
 .../doc/source/_static/Tool-bar-planning.png       |  Bin 0 -> 24281 bytes
 Apps/VRRender/doc/source/_static/VR-01.jpg         |  Bin 0 -> 79308 bytes
 Apps/VRRender/doc/source/_static/VR-DEF.jpg        |  Bin 0 -> 24294 bytes
 Apps/VRRender/doc/source/_static/VR-TF-01.jpg      |  Bin 0 -> 34932 bytes
 Apps/VRRender/doc/source/_static/VR-TF-02.jpg      |  Bin 0 -> 28750 bytes
 Apps/VRRender/doc/source/_static/VR-TF-AUTO-01.png |  Bin 0 -> 239456 bytes
 Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.jpg |  Bin 0 -> 34801 bytes
 Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.png |  Bin 0 -> 370325 bytes
 Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg     |  Bin 0 -> 56208 bytes
 Apps/VRRender/doc/source/_static/VR-TF-MPR-01.jpg  |  Bin 0 -> 99344 bytes
 Apps/VRRender/doc/source/_static/VR-TF-MPR-02.jpg  |  Bin 0 -> 101031 bytes
 Apps/VRRender/doc/source/_static/VR-cutting.jpg    |  Bin 0 -> 33487 bytes
 Apps/VRRender/doc/source/_static/VR-manip.jpg      |  Bin 0 -> 23377 bytes
 Apps/VRRender/doc/source/_static/VR.png            |  Bin 0 -> 49100 bytes
 Apps/VRRender/doc/source/_static/VRPlanning.png    |  Bin 0 -> 40972 bytes
 Apps/VRRender/doc/source/_static/VR_WLE_html.png   |  Bin 0 -> 20559 bytes
 Apps/VRRender/doc/source/_static/VR_html.png       |  Bin 0 -> 35500 bytes
 Apps/VRRender/doc/source/_static/View-INFO.png     |  Bin 0 -> 260 bytes
 Apps/VRRender/doc/source/_static/View-landmark.png |  Bin 0 -> 2538 bytes
 .../doc/source/_static/acknowledgment/apple.png    |  Bin 0 -> 65027 bytes
 .../doc/source/_static/acknowledgment/boost.png    |  Bin 0 -> 7192 bytes
 .../doc/source/_static/acknowledgment/bzip2.png    |  Bin 0 -> 6589 bytes
 .../doc/source/_static/acknowledgment/cfitsio.png  |  Bin 0 -> 7683 bytes
 .../doc/source/_static/acknowledgment/dcmtk.png    |  Bin 0 -> 6761 bytes
 .../doc/source/_static/acknowledgment/doxygen.png  |  Bin 0 -> 11988 bytes
 .../doc/source/_static/acknowledgment/eclipse.png  |  Bin 0 -> 13860 bytes
 .../doc/source/_static/acknowledgment/ehealth.png  |  Bin 0 -> 411007 bytes
 .../doc/source/_static/acknowledgment/fits2itk.png |  Bin 0 -> 7367 bytes
 .../doc/source/_static/acknowledgment/fsf.png      |  Bin 0 -> 6409 bytes
 .../doc/source/_static/acknowledgment/gcc.png      |  Bin 0 -> 28137 bytes
 .../doc/source/_static/acknowledgment/gdcm.png     |  Bin 0 -> 9736 bytes
 .../doc/source/_static/acknowledgment/itk.png      |  Bin 0 -> 9372 bytes
 .../doc/source/_static/acknowledgment/libjpeg.png  |  Bin 0 -> 2829 bytes
 .../doc/source/_static/acknowledgment/libpng.png   |  Bin 0 -> 2655 bytes
 .../doc/source/_static/acknowledgment/libtiff.png  |  Bin 0 -> 2118 bytes
 .../doc/source/_static/acknowledgment/libxml2.png  |  Bin 0 -> 7940 bytes
 .../doc/source/_static/acknowledgment/linux-64.png |  Bin 0 -> 29352 bytes
 .../doc/source/_static/acknowledgment/linux.png    |  Bin 0 -> 31211 bytes
 .../doc/source/_static/acknowledgment/log4cxx.png  |  Bin 0 -> 6161 bytes
 .../doc/source/_static/acknowledgment/ms.png       |  Bin 0 -> 13902 bytes
 .../doc/source/_static/acknowledgment/opengl.png   |  Bin 0 -> 7428 bytes
 .../doc/source/_static/acknowledgment/python.png   |  Bin 0 -> 2641 bytes
 .../doc/source/_static/acknowledgment/scons.png    |  Bin 0 -> 5926 bytes
 .../doc/source/_static/acknowledgment/sphinx.png   |  Bin 0 -> 4624 bytes
 .../doc/source/_static/acknowledgment/vim.png      |  Bin 0 -> 15549 bytes
 .../doc/source/_static/acknowledgment/visualc.png  |  Bin 0 -> 7902 bytes
 .../doc/source/_static/acknowledgment/vtk.png      |  Bin 0 -> 8157 bytes
 .../source/_static/acknowledgment/vtkinria3d.png   |  Bin 0 -> 10656 bytes
 .../doc/source/_static/acknowledgment/wix.png      |  Bin 0 -> 17600 bytes
 .../doc/source/_static/acknowledgment/wx.png       |  Bin 0 -> 9304 bytes
 .../doc/source/_static/acknowledgment/zlib.png     |  Bin 0 -> 9172 bytes
 Apps/VRRender/doc/source/_static/axial-view.jpg    |  Bin 0 -> 16033 bytes
 Apps/VRRender/doc/source/_static/basic.css         |  414 ++
 Apps/VRRender/doc/source/_static/camera-photo.png  |  Bin 0 -> 864 bytes
 Apps/VRRender/doc/source/_static/danger.png        |  Bin 0 -> 18201 bytes
 Apps/VRRender/doc/source/_static/default.css       |  201 +
 Apps/VRRender/doc/source/_static/distance.png      |  Bin 0 -> 763 bytes
 Apps/VRRender/doc/source/_static/doctools.js       |  232 +
 Apps/VRRender/doc/source/_static/ehealth.png       |  Bin 0 -> 411007 bytes
 Apps/VRRender/doc/source/_static/file.png          |  Bin 0 -> 392 bytes
 Apps/VRRender/doc/source/_static/frontal-view.jpg  |  Bin 0 -> 11859 bytes
 Apps/VRRender/doc/source/_static/icon-2D.png       |  Bin 0 -> 1383 bytes
 Apps/VRRender/doc/source/_static/icon-3D.png       |  Bin 0 -> 1796 bytes
 Apps/VRRender/doc/source/_static/icon-VR.png       |  Bin 0 -> 1487 bytes
 Apps/VRRender/doc/source/_static/icon-axial.png    |  Bin 0 -> 1556 bytes
 Apps/VRRender/doc/source/_static/icon-frontal.png  |  Bin 0 -> 1883 bytes
 Apps/VRRender/doc/source/_static/icon-sagittal.png |  Bin 0 -> 2000 bytes
 Apps/VRRender/doc/source/_static/icon-windows.jpg  |  Bin 0 -> 768 bytes
 Apps/VRRender/doc/source/_static/icone-F9.png      |  Bin 0 -> 1906 bytes
 Apps/VRRender/doc/source/_static/icone-VR-01.jpg   |  Bin 0 -> 947 bytes
 Apps/VRRender/doc/source/_static/icone-VR-02.jpg   |  Bin 0 -> 820 bytes
 Apps/VRRender/doc/source/_static/icone-VR-03.jpg   |  Bin 0 -> 904 bytes
 Apps/VRRender/doc/source/_static/icone-VR-04.jpg   |  Bin 0 -> 849 bytes
 Apps/VRRender/doc/source/_static/icone-VR-05.jpg   |  Bin 0 -> 898 bytes
 Apps/VRRender/doc/source/_static/icone-VR-06.jpg   |  Bin 0 -> 984 bytes
 Apps/VRRender/doc/source/_static/info-patient.png  |  Bin 0 -> 188609 bytes
 Apps/VRRender/doc/source/_static/jquery.js         |   32 +
 Apps/VRRender/doc/source/_static/minus.png         |  Bin 0 -> 199 bytes
 Apps/VRRender/doc/source/_static/openDicom.png     |  Bin 0 -> 1786 bytes
 .../doc/source/_static/openDicom_openFxz.png       |  Bin 0 -> 2880 bytes
 Apps/VRRender/doc/source/_static/openFxz.png       |  Bin 0 -> 1632 bytes
 Apps/VRRender/doc/source/_static/operation.png     |  Bin 0 -> 3316 bytes
 Apps/VRRender/doc/source/_static/plus.png          |  Bin 0 -> 199 bytes
 Apps/VRRender/doc/source/_static/pygments.css      |   61 +
 Apps/VRRender/doc/source/_static/sagittal-view.jpg |  Bin 0 -> 10483 bytes
 Apps/VRRender/doc/source/_static/searchtools.js    |  467 ++
 .../VRRender/doc/source/_static}/sliceHide.png     |  Bin
 .../VRRender/doc/source/_static}/sliceShow.png     |  Bin
 Apps/VRRender/doc/source/_static/video.png         |  Bin 0 -> 3717 bytes
 Apps/VRRender/doc/source/_static/view_frontal.png  |  Bin 0 -> 2048 bytes
 Apps/VRRender/doc/source/_static/view_profil.png   |  Bin 0 -> 2215 bytes
 Apps/VRRender/doc/source/conf.py                   |  208 +
 Apps/VRRender/doc/source/index.rst                 |   37 +
 Apps/VRRender/rc/about/about.html                  |    8 +-
 .../rc/configurations/MenuAndViewConfig.xml        |   43 -
 Apps/VRRender/rc/configurations/VRRenderBase.xml   |  274 +-
 Apps/VRRender/rc/configurations/sdb.xml            |  371 +-
 Apps/VRRender/rc/documentations/ack.html           |    2 +-
 Apps/VRRender/rc/plugin.xml                        |   99 +-
 Apps/VRRender/rc/profile.xml                       |   67 -
 Apps/VRRender/rc/vrrender.icns                     |  Bin 0 -> 63133 bytes
 .../2DVisualizationActivity/bin/build.options      |   14 -
 .../rc/configurations/2DNegato.xml                 |   46 +-
 .../rc/configurations/2DNegatoWithTF.xml           |   48 +-
 .../rc/configurations/2DSimpleConfig.xml           |   73 +
 .../rc/configurations/2DVisualization.xml          |   66 +-
 .../2DVisualizationActivity/rc/plugin.xml          |   12 +-
 .../2DVisualizationActivity2}/CMakeLists.txt       |    0
 .../2DVisualizationActivity2/Properties.cmake      |   17 +
 .../rc/configurations/2DNegato.xml                 |  126 +
 .../rc/configurations/2DNegatoWithTF.xml           |  130 +
 .../rc/configurations/2DSimpleConfig.xml           |   70 +
 .../rc/configurations/2DVisualization.xml          |  160 +
 .../2DVisualizationActivity2/rc/plugin.xml         |   37 +
 .../3DVisualizationActivity/Properties.cmake       |   16 +-
 .../3DVisualizationActivity/bin/build.options      |   16 -
 .../rc/configurations/3DNegatoWithAcq.xml          |   79 +-
 .../rc/configurations/3DSimpleConfig.xml           |   40 +
 .../rc/configurations/3DVisualization.xml          |  102 +-
 .../rc/configurations/ManageOrganWithSeries.xml    |   41 +-
 .../3DVisualizationActivity/rc/plugin.xml          |   12 +-
 .../3DVisualizationActivity2}/CMakeLists.txt       |    0
 .../3DVisualizationActivity2/Properties.cmake      |   20 +
 .../rc/configurations/3DNegatoWithAcq.xml          |  174 +
 .../rc/configurations/3DSimpleConfig.xml           |   36 +
 .../rc/configurations/3DVisualization.xml          |  260 +
 .../rc/configurations/ManageOrganWithSeries.xml    |   89 +
 .../3DVisualizationActivity2/rc/plugin.xml         |   38 +
 .../LeafActivity/blendActivity/bin/build.options   |   14 -
 .../blendActivity/rc/configurations/Blend.xml      |  184 +-
 .../blendActivity/rc/configurations/ImageMix.xml   |  390 +-
 .../rc/configurations/TransferFunctionEditor.xml   |  482 +-
 Bundles/LeafActivity/blendActivity/rc/plugin.xml   |   12 +-
 .../LeafActivity/dicomAppConfig}/CMakeLists.txt    |    0
 .../LeafActivity/dicomAppConfig/Properties.cmake   |   18 +
 .../rc/configurations/2DLocalPreviewConfig.xml     |   73 +
 Bundles/LeafActivity/dicomAppConfig/rc/plugin.xml  |   16 +
 .../dicomFilteringActivity}/CMakeLists.txt         |    0
 .../dicomFilteringActivity/Properties.cmake        |   25 +
 .../rc/configurations/DicomFiltering.xml           |  191 +
 .../rc/configurations/DicomPreview.xml             |   67 +
 .../dicomFilteringActivity/rc/plugin.xml           |   58 +
 .../dicomPacsReaderActivity}/CMakeLists.txt        |    0
 .../dicomPacsReaderActivity/Properties.cmake       |   21 +
 .../rc/configurations/2DPacsPreviewConfig.xml      |   76 +
 .../rc/configurations/DicomPacsReader.xml          |  202 +
 .../rc/configurations/PacsConfigurationManager.xml |   50 +
 .../dicomPacsReaderActivity/rc/plugin.xml          |   41 +
 .../dicomPacsWriterActivity}/CMakeLists.txt        |    0
 .../dicomPacsWriterActivity/Properties.cmake       |   22 +
 .../rc/configurations/DicomPacsWriter.xml          |  148 +
 .../dicomPacsWriterActivity/rc/plugin.xml          |   31 +
 Bundles/LeafActivity/ioActivity/CMakeLists.txt     |    3 +
 Bundles/LeafActivity/ioActivity/Properties.cmake   |   10 +
 Bundles/LeafActivity/ioActivity/rc/plugin.xml      |  162 +
 .../volumeRenderingActivity/bin/build.options      |   22 -
 .../rc/configurations/VolumeRendering.xml          |  113 +-
 .../volumeRenderingActivity/rc/plugin.xml          |    9 +-
 .../volumeRenderingActivity2/CMakeLists.txt        |    3 +
 .../volumeRenderingActivity2/Properties.cmake      |   22 +
 .../rc/configurations/VolumeRendering.xml          |  430 ++
 .../volumeRenderingActivity2/rc/plugin.xml         |   36 +
 .../LeafAtomFilter/filterVRRender/Properties.cmake |    2 +-
 .../filterVRRender/bin/build.options               |   11 -
 .../include/filterVRRender/MedicalDataV1.hpp       |    4 +-
 .../include/filterVRRender/MedicalDataV2.hpp       |    4 +-
 .../include/filterVRRender/Plugin.hpp              |    2 +-
 .../include/filterVRRender/config.hpp              |   41 -
 .../include/filterVRRender/namespace.hpp           |   20 +
 .../LeafAtomFilter/filterVRRender/rc/plugin.xml    |    2 +-
 .../src/filterVRRender/MedicalDataV1.cpp           |   10 +-
 .../src/filterVRRender/MedicalDataV2.cpp           |   27 +-
 .../filterVRRender/src/filterVRRender/Plugin.cpp   |   11 +-
 .../filterVRRender/test/CMakeLists.txt             |    7 +
 .../filterVRRender/test/Properties.cmake           |   16 +
 .../filterVRRender/test/cppunit.options            |   16 -
 .../test/tu/include/MedicalDataV1Test.hpp          |    8 +-
 .../test/tu/src/MedicalDataV1Test.cpp              |    2 +-
 Bundles/LeafCtrl/ctrlCamp/CMakeLists.txt           |   12 +
 Bundles/LeafCtrl/ctrlCamp/Properties.cmake         |   18 +
 .../LeafCtrl/ctrlCamp/include/ctrlCamp/ICamp.hpp   |   40 +
 .../LeafCtrl/ctrlCamp/include/ctrlCamp/Plugin.hpp  |   37 +
 .../LeafCtrl/ctrlCamp/include/ctrlCamp/SCopy.hpp   |  103 +
 .../include/ctrlCamp/SExtractMeshByType.hpp        |   99 +
 .../ctrlCamp/include/ctrlCamp/SExtractObj.hpp      |  105 +
 .../ctrlCamp/include/ctrlCamp/namespace.hpp        |   20 +
 Bundles/LeafCtrl/ctrlCamp/rc/plugin.xml            |   23 +
 Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/ICamp.cpp   |   28 +
 Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/Plugin.cpp  |   28 +
 Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp   |  246 +
 .../ctrlCamp/src/ctrlCamp/SExtractMeshByType.cpp   |  224 +
 .../LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractObj.cpp |  233 +
 Bundles/LeafCtrl/ctrlMemory/CMakeLists.txt         |    7 -
 Bundles/LeafCtrl/ctrlMemory/COPYING                |  675 ---
 Bundles/LeafCtrl/ctrlMemory/COPYING.LESSER         |  166 -
 Bundles/LeafCtrl/ctrlMemory/Properties.cmake       |    2 +-
 Bundles/LeafCtrl/ctrlMemory/bin/build.options      |    7 -
 .../ctrlMemory/include/ctrlMemory/LockDumpSrv.hpp  |   20 +-
 .../ctrlMemory/include/ctrlMemory/Plugin.hpp       |   10 +-
 .../ctrlMemory/include/ctrlMemory/config.hpp       |   40 -
 .../ctrlMemory/manager/LockDumpManagerSrv.hpp      |   53 +-
 .../ctrlMemory/include/ctrlMemory/namespace.hpp    |   54 +-
 Bundles/LeafCtrl/ctrlMemory/rc/plugin.xml          |    2 +-
 .../ctrlMemory/src/ctrlMemory/LockDumpSrv.cpp      |   29 +-
 .../LeafCtrl/ctrlMemory/src/ctrlMemory/Plugin.cpp  |   11 +-
 .../src/ctrlMemory/manager/LockDumpManagerSrv.cpp  |  122 +-
 Bundles/LeafCtrl/ctrlSelection/CMakeLists.txt      |   11 +-
 Bundles/LeafCtrl/ctrlSelection/COPYING             |  675 ---
 Bundles/LeafCtrl/ctrlSelection/COPYING.LESSER      |  166 -
 Bundles/LeafCtrl/ctrlSelection/Properties.cmake    |    2 +-
 Bundles/LeafCtrl/ctrlSelection/bin/build.options   |   14 -
 .../include/ctrlSelection/BookmarkSrv.hpp          |   26 +-
 .../include/ctrlSelection/IManagerSrv.hpp          |   72 +-
 .../include/ctrlSelection/IUpdaterSrv.hpp          |   22 +-
 .../include/ctrlSelection/IWrapperSrv.hpp          |   15 +-
 .../include/ctrlSelection/ImageUpdateAxis.hpp      |   57 +-
 .../include/ctrlSelection/MedicalImageSrv.hpp      |   45 +-
 .../include/ctrlSelection/Namespace.hpp            |   39 +-
 .../ctrlSelection/include/ctrlSelection/Plugin.hpp |   10 +-
 .../ctrlSelection/include/ctrlSelection/config.hpp |   40 -
 .../manager/MedicalImageManagerSrv.hpp             |   76 -
 .../include/ctrlSelection/manager/Namespace.hpp    |   18 +-
 .../include/ctrlSelection/manager/SField.hpp       |   96 +-
 .../include/ctrlSelection/manager/SwapperSrv.hpp   |  116 +-
 .../updater/DataInfoFromMsgUpdaterSrv.hpp          |   75 -
 .../include/ctrlSelection/updater/Namespace.hpp    |   25 -
 .../ctrlSelection/updater/ObjFromMsgUpdaterSrv.hpp |   75 -
 .../updater/ReconstructionFromResecUpdaterSrv.hpp  |   79 -
 .../include/ctrlSelection/updater/SDrop.hpp        |   22 +-
 .../include/ctrlSelection/updater/SObjFromSlot.hpp |  128 +
 .../include/ctrlSelection/updater/SObjFromUid.hpp  |  116 +
 .../SReconstructionFromModelSeriesUpdater.hpp      |   87 -
 .../include/ctrlSelection/updater/STranslate.hpp   |  112 +
 .../ctrlSelection/updater/TranslateUpdater.hpp     |   79 -
 .../ctrlSelection/wrapper/GraphWrapperSrv.hpp      |   72 -
 .../ctrlSelection/wrapper/ImageWrapperSrv.hpp      |   72 -
 .../ctrlSelection/wrapper/MsgForwarderSrv.hpp      |   89 -
 .../ctrlSelection/wrapper/MsgWrapperSrv.hpp        |   79 -
 .../include/ctrlSelection/wrapper/Namespace.hpp    |   24 -
 .../wrapper/ObjToCompositeMsgForwarderSrv.hpp      |   90 -
 .../wrapper/SImageSignalForwarder.hpp              |  126 +
 Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml       |   46 +-
 .../src/ctrlSelection/BookmarkSrv.cpp              |   38 +-
 .../src/ctrlSelection/IManagerSrv.cpp              |  188 +-
 .../src/ctrlSelection/IUpdaterSrv.cpp              |  123 +-
 .../src/ctrlSelection/IWrapperSrv.cpp              |    8 +-
 .../src/ctrlSelection/ImageUpdateAxis.cpp          |  106 +-
 .../src/ctrlSelection/MedicalImageSrv.cpp          |   78 +-
 .../ctrlSelection/src/ctrlSelection/Plugin.cpp     |    8 +-
 .../manager/MedicalImageManagerSrv.cpp             |  135 -
 .../src/ctrlSelection/manager/SField.cpp           |  202 +-
 .../src/ctrlSelection/manager/SwapperSrv.cpp       |  215 +-
 .../updater/DataInfoFromMsgUpdaterSrv.cpp          |  110 -
 .../ctrlSelection/updater/ObjFromMsgUpdaterSrv.cpp |  100 -
 .../updater/ReconstructionFromResecUpdaterSrv.cpp  |  124 -
 .../src/ctrlSelection/updater/SDrop.cpp            |  117 +-
 .../src/ctrlSelection/updater/SObjFromSlot.cpp     |  195 +
 .../src/ctrlSelection/updater/SObjFromUid.cpp      |  168 +
 .../SReconstructionFromModelSeriesUpdater.cpp      |  127 -
 .../src/ctrlSelection/updater/STranslate.cpp       |  219 +
 .../src/ctrlSelection/updater/TranslateUpdater.cpp |  175 -
 .../src/ctrlSelection/wrapper/GraphWrapperSrv.cpp  |   62 -
 .../src/ctrlSelection/wrapper/ImageWrapperSrv.cpp  |   63 -
 .../src/ctrlSelection/wrapper/MsgForwarderSrv.cpp  |  126 -
 .../src/ctrlSelection/wrapper/MsgWrapperSrv.cpp    |   93 -
 .../wrapper/ObjToCompositeMsgForwarderSrv.cpp      |  190 -
 .../wrapper/SImageSignalForwarder.cpp              |  458 ++
 Bundles/LeafCtrl/monitor/CMakeLists.txt            |   10 +-
 Bundles/LeafCtrl/monitor/Properties.cmake          |    2 +-
 Bundles/LeafCtrl/monitor/bin/build.options         |   19 -
 .../LeafCtrl/monitor/include/monitor/Plugin.hpp    |    2 +-
 .../include/monitor/action/MemoryConsumption.hpp   |   16 +-
 .../monitor/include/monitor/action/MemoryInfo.hpp  |   18 +-
 .../monitor/include/monitor/action/SDumpAll.hpp    |   10 +-
 .../monitor/include/monitor/action/fwMetrics.hpp   |   16 +-
 .../monitor/include/monitor/action/namespace.hpp   |    2 +-
 .../LeafCtrl/monitor/include/monitor/config.hpp    |   39 -
 .../include/monitor/installSIGSEVBacktrace.hpp     |    4 +-
 .../LeafCtrl/monitor/include/monitor/namespace.hpp |    8 +-
 Bundles/LeafCtrl/monitor/rc/plugin.xml             |    2 +-
 Bundles/LeafCtrl/monitor/src/monitor/Plugin.cpp    |   10 +-
 .../src/monitor/action/MemoryConsumption.cpp       |   36 +-
 .../monitor/src/monitor/action/MemoryInfo.cpp      |   34 +-
 .../monitor/src/monitor/action/SDumpAll.cpp        |   28 +-
 .../monitor/src/monitor/action/fwMetrics.cpp       |   15 +-
 .../monitor/src/monitor/installSIGSEVBacktrace.cpp |   73 +-
 Bundles/LeafIO/ioAtoms/CMakeLists.txt              |    7 -
 Bundles/LeafIO/ioAtoms/COPYING                     |  675 ---
 Bundles/LeafIO/ioAtoms/COPYING.LESSER              |  166 -
 Bundles/LeafIO/ioAtoms/Properties.cmake            |    8 +-
 Bundles/LeafIO/ioAtoms/bin/build.options           |   23 -
 Bundles/LeafIO/ioAtoms/include/ioAtoms/Plugin.hpp  |   22 +-
 Bundles/LeafIO/ioAtoms/include/ioAtoms/SReader.hpp |   39 +-
 Bundles/LeafIO/ioAtoms/include/ioAtoms/SWriter.hpp |   46 +-
 Bundles/LeafIO/ioAtoms/include/ioAtoms/config.hpp  |   41 -
 .../LeafIO/ioAtoms/include/ioAtoms/namespace.hpp   |    2 +-
 Bundles/LeafIO/ioAtoms/rc/plugin.xml               |    2 +-
 Bundles/LeafIO/ioAtoms/src/ioAtoms/Plugin.cpp      |   11 +-
 Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp     |  330 +-
 Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp     |  321 +-
 Bundles/LeafIO/ioAtoms/test/CMakeLists.txt         |    7 +-
 Bundles/LeafIO/ioAtoms/test/Properties.cmake       |   13 +-
 Bundles/LeafIO/ioAtoms/test/cppunit.options        |   18 -
 .../LeafIO/ioAtoms/test/tu/include/IoAtomsTest.hpp |   24 +-
 Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp |   63 +-
 Bundles/LeafIO/ioData/CMakeLists.txt               |   16 +-
 Bundles/LeafIO/ioData/COPYING                      |  675 ---
 Bundles/LeafIO/ioData/COPYING.LESSER               |  166 -
 Bundles/LeafIO/ioData/Properties.cmake             |    4 +-
 Bundles/LeafIO/ioData/bin/build.options            |   17 -
 .../ioData/include/ioData/CameraReaderService.hpp  |  126 -
 .../ioData/include/ioData/MeshReaderService.hpp    |   40 +-
 .../ioData/include/ioData/MeshWriterService.hpp    |   44 +-
 Bundles/LeafIO/ioData/include/ioData/Namespace.hpp |   10 +-
 Bundles/LeafIO/ioData/include/ioData/Plugin.hpp    |    8 +-
 .../ioData/include/ioData/SplineReaderService.hpp  |   80 +-
 .../ioData/TransformationMatrix3DReaderService.hpp |   30 +-
 .../ioData/TransformationMatrix3DWriterService.hpp |   30 +-
 .../include/ioData/TriangularMeshReaderService.hpp |  116 -
 .../include/ioData/TriangularMeshWriterService.hpp |  118 -
 .../ioData/include/ioData/action/SMeshModifier.hpp |   65 +-
 Bundles/LeafIO/ioData/include/ioData/export.hpp    |   41 -
 Bundles/LeafIO/ioData/rc/plugin.xml                |   22 +-
 .../ioData/src/ioData/CameraReaderService.cpp      |  122 -
 .../LeafIO/ioData/src/ioData/MeshReaderService.cpp |   64 +-
 .../LeafIO/ioData/src/ioData/MeshWriterService.cpp |   28 +-
 Bundles/LeafIO/ioData/src/ioData/Plugin.cpp        |   11 +-
 .../ioData/src/ioData/SplineReaderService.cpp      |   75 +-
 .../ioData/TransformationMatrix3DReaderService.cpp |   33 +-
 .../ioData/TransformationMatrix3DWriterService.cpp |   48 +-
 .../src/ioData/TriangularMeshReaderService.cpp     |  110 -
 .../src/ioData/TriangularMeshWriterService.cpp     |  106 -
 .../ioData/src/ioData/action/SMeshModifier.cpp     |   97 +-
 Bundles/LeafIO/ioDcmtk/CMakeLists.txt              |    4 +
 Bundles/LeafIO/ioDcmtk/Properties.cmake            |   20 +
 Bundles/LeafIO/ioDcmtk/include/ioDcmtk/Plugin.hpp  |   32 +
 .../include/ioDcmtk/SDicomSeriesDBReader.hpp       |   79 +
 .../include/ioDcmtk/SDicomTagSeriesDBReader.hpp    |   91 +
 .../ioDcmtk/include/ioDcmtk/SSeriesDBReader.hpp    |  128 +
 .../LeafIO/ioDcmtk/include/ioDcmtk/namespace.hpp   |   16 +
 Bundles/LeafIO/ioDcmtk/rc/plugin.xml               |   28 +
 Bundles/LeafIO/ioDcmtk/src/ioDcmtk/Plugin.cpp      |   30 +
 .../ioDcmtk/src/ioDcmtk/SDicomSeriesDBReader.cpp   |  196 +
 .../src/ioDcmtk/SDicomTagSeriesDBReader.cpp        |  213 +
 .../LeafIO/ioDcmtk/src/ioDcmtk/SSeriesDBReader.cpp |  299 ++
 Bundles/LeafIO/ioDicom/CMakeLists.txt              |   15 +
 Bundles/LeafIO/ioDicom/Properties.cmake            |   27 +
 Bundles/LeafIO/ioDicom/include/ioDicom/Plugin.hpp  |   32 +
 .../include/ioDicom/SFilterSelectionEditor.hpp     |  171 +
 .../include/ioDicom/SFilterSelectorDialog.hpp      |   90 +
 .../ioDicom/include/ioDicom/SSeriesDBMerger.hpp    |   69 +
 .../include/ioDicom/SSliceIndexDicomEditor.hpp     |  184 +
 .../LeafIO/ioDicom/include/ioDicom/namespace.hpp   |   16 +
 Bundles/LeafIO/ioDicom/rc/plugin.xml               |   35 +
 Bundles/LeafIO/ioDicom/src/ioDicom/Plugin.cpp      |   34 +
 .../ioDicom/src/ioDicom/SFilterSelectionEditor.cpp |  589 +++
 .../ioDicom/src/ioDicom/SFilterSelectorDialog.cpp  |  211 +
 .../LeafIO/ioDicom/src/ioDicom/SSeriesDBMerger.cpp |  128 +
 .../ioDicom/src/ioDicom/SSliceIndexDicomEditor.cpp |  405 ++
 Bundles/LeafIO/ioGdcm/CMakeLists.txt               |   16 +
 Bundles/LeafIO/ioGdcm/Properties.cmake             |   25 +
 Bundles/LeafIO/ioGdcm/include/ioGdcm/Plugin.hpp    |   32 +
 .../include/ioGdcm/SDicomSeriesAnonymizer.hpp      |   91 +
 .../include/ioGdcm/SDicomSeriesConverter.hpp       |   82 +
 .../ioGdcm/include/ioGdcm/SDicomSeriesDBReader.hpp |  144 +
 .../ioGdcm/include/ioGdcm/SDicomSeriesWriter.hpp   |   84 +
 .../ioGdcm/include/ioGdcm/SSeriesDBReader.hpp      |  147 +
 .../ioGdcm/include/ioGdcm/SSeriesDBWriter.hpp      |   82 +
 Bundles/LeafIO/ioGdcm/include/ioGdcm/namespace.hpp |   16 +
 Bundles/LeafIO/ioGdcm/rc/plugin.xml                |   51 +
 Bundles/LeafIO/ioGdcm/src/ioGdcm/Plugin.cpp        |   30 +
 .../ioGdcm/src/ioGdcm/SDicomSeriesAnonymizer.cpp   |  168 +
 .../ioGdcm/src/ioGdcm/SDicomSeriesConverter.cpp    |  147 +
 .../ioGdcm/src/ioGdcm/SDicomSeriesDBReader.cpp     |  406 ++
 .../ioGdcm/src/ioGdcm/SDicomSeriesWriter.cpp       |  177 +
 .../LeafIO/ioGdcm/src/ioGdcm/SSeriesDBReader.cpp   |  368 ++
 .../LeafIO/ioGdcm/src/ioGdcm/SSeriesDBWriter.cpp   |  242 +
 Bundles/LeafIO/ioITK/CMakeLists.txt                |   41 -
 Bundles/LeafIO/ioITK/Properties.cmake              |   14 +-
 Bundles/LeafIO/ioITK/bin/build.options             |   18 -
 .../ioITK/include/ioITK/InrImageReaderService.hpp  |   25 +-
 .../ioITK/include/ioITK/InrImageWriterService.hpp  |   13 +-
 .../ioITK/include/ioITK/JpgImageWriterService.hpp  |   19 +-
 Bundles/LeafIO/ioITK/include/ioITK/Plugin.hpp      |   10 +-
 .../ioITK/include/ioITK/SImageSeriesWriter.hpp     |   16 +-
 .../ioITK/include/ioITK/SInrSeriesDBReader.hpp     |   22 +-
 .../ioITK/include/ioITK/SJpgImageSeriesWriter.hpp  |   16 +-
 Bundles/LeafIO/ioITK/include/ioITK/export.hpp      |   40 -
 Bundles/LeafIO/ioITK/include/ioITK/namespace.hpp   |   18 +
 Bundles/LeafIO/ioITK/rc/plugin.xml                 |    2 +-
 .../ioITK/src/ioITK/InrImageReaderService.cpp      |   50 +-
 .../ioITK/src/ioITK/InrImageWriterService.cpp      |   30 +-
 .../ioITK/src/ioITK/JpgImageWriterService.cpp      |   22 +-
 Bundles/LeafIO/ioITK/src/ioITK/Plugin.cpp          |   10 +-
 .../LeafIO/ioITK/src/ioITK/SImageSeriesWriter.cpp  |   18 +-
 .../LeafIO/ioITK/src/ioITK/SInrSeriesDBReader.cpp  |   67 +-
 .../ioITK/src/ioITK/SJpgImageSeriesWriter.cpp      |   14 +-
 Bundles/LeafIO/ioITK/test/CMakeLists.txt           |   14 +-
 Bundles/LeafIO/ioITK/test/Properties.cmake         |   12 +-
 Bundles/LeafIO/ioITK/test/cppunit.options          |   18 -
 Bundles/LeafIO/ioITK/test/tu/include/IoItkTest.hpp |   42 +-
 Bundles/LeafIO/ioITK/test/tu/rc/profile.xml        |    3 +-
 Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp     |  109 +-
 Bundles/LeafIO/ioPacs/CMakeLists.txt               |   24 +
 Bundles/LeafIO/ioPacs/Properties.cmake             |   25 +
 Bundles/LeafIO/ioPacs/include/ioPacs/Plugin.hpp    |   32 +
 .../include/ioPacs/SPacsConfigurationEditor.hpp    |  141 +
 .../ioPacs/SPacsConfigurationInitializer.hpp       |  106 +
 .../include/ioPacs/SProgressBarController.hpp      |   94 +
 .../LeafIO/ioPacs/include/ioPacs/SQueryEditor.hpp  |  121 +
 .../LeafIO/ioPacs/include/ioPacs/SSeriesPuller.hpp |  214 +
 .../LeafIO/ioPacs/include/ioPacs/SSeriesPusher.hpp |  165 +
 .../ioPacs/SSliceIndexDicomPullerEditor.hpp        |  225 +
 Bundles/LeafIO/ioPacs/include/ioPacs/namespace.hpp |   16 +
 Bundles/LeafIO/ioPacs/rc/plugin.xml                |   57 +
 Bundles/LeafIO/ioPacs/src/ioPacs/Plugin.cpp        |   30 +
 .../ioPacs/src/ioPacs/SPacsConfigurationEditor.cpp |  312 ++
 .../src/ioPacs/SPacsConfigurationInitializer.cpp   |  249 +
 .../ioPacs/src/ioPacs/SProgressBarController.cpp   |  114 +
 Bundles/LeafIO/ioPacs/src/ioPacs/SQueryEditor.cpp  |  265 +
 Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPuller.cpp |  401 ++
 Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPusher.cpp |  324 ++
 .../src/ioPacs/SSliceIndexDicomPullerEditor.cpp    |  474 ++
 Bundles/LeafIO/ioPacs/test/CMakeLists.txt          |    6 +
 Bundles/LeafIO/ioPacs/test/Properties.cmake        |   17 +
 .../LeafIO/ioPacs/test/tu/include/IoPacsTest.hpp   |   37 +
 Bundles/LeafIO/ioPacs/test/tu/rc/profile.xml       |   13 +
 Bundles/LeafIO/ioPacs/test/tu/src/IoPacsTest.cpp   |   93 +
 Bundles/LeafIO/ioTuto/CMakeLists.txt               |   10 -
 Bundles/LeafIO/ioTuto/COPYING                      |  675 ---
 Bundles/LeafIO/ioTuto/COPYING.LESSER               |  166 -
 Bundles/LeafIO/ioTuto/Properties.cmake             |   11 +-
 Bundles/LeafIO/ioTuto/bin/build.options            |   20 -
 .../include/ioTuto/ExternalDataReaderService.hpp   |   47 +-
 Bundles/LeafIO/ioTuto/include/ioTuto/Plugin.hpp    |    8 +-
 Bundles/LeafIO/ioTuto/include/ioTuto/config.hpp    |   40 -
 Bundles/LeafIO/ioTuto/rc/plugin.xml                |    2 +-
 .../src/ioTuto/ExternalDataReaderService.cpp       |   55 +-
 Bundles/LeafIO/ioTuto/src/ioTuto/Plugin.cpp        |    8 +-
 Bundles/LeafIO/ioVTK/CMakeLists.txt                |   23 +-
 Bundles/LeafIO/ioVTK/COPYING                       |  675 ---
 Bundles/LeafIO/ioVTK/COPYING.LESSER                |  166 -
 Bundles/LeafIO/ioVTK/Properties.cmake              |   17 +-
 Bundles/LeafIO/ioVTK/bin/build.options             |   18 -
 .../ioVTK/include/ioVTK/ImageReaderService.hpp     |  103 -
 .../ioVTK/include/ioVTK/ImageWriterService.hpp     |  123 -
 .../ioVTK/include/ioVTK/MaxMeshReaderService.hpp   |  111 -
 .../ioVTK/include/ioVTK/MeshReaderService.hpp      |  130 -
 .../ioVTK/include/ioVTK/MeshWriterService.hpp      |  126 -
 Bundles/LeafIO/ioVTK/include/ioVTK/Namespace.hpp   |    8 +-
 Bundles/LeafIO/ioVTK/include/ioVTK/Plugin.hpp      |   28 +-
 .../LeafIO/ioVTK/include/ioVTK/SImageReader.hpp    |  105 +
 .../ioVTK/include/ioVTK/SImageSeriesWriter.hpp     |   49 +-
 .../LeafIO/ioVTK/include/ioVTK/SImageWriter.hpp    |  128 +
 Bundles/LeafIO/ioVTK/include/ioVTK/SMeshReader.hpp |  139 +
 Bundles/LeafIO/ioVTK/include/ioVTK/SMeshWriter.hpp |  117 +
 .../ioVTK/include/ioVTK/SModelSeriesObjWriter.hpp  |   51 +-
 .../ioVTK/include/ioVTK/SModelSeriesReader.hpp     |   36 +-
 .../ioVTK/include/ioVTK/SModelSeriesWriter.hpp     |   46 +-
 .../LeafIO/ioVTK/include/ioVTK/SSeriesDBReader.hpp |  119 +-
 .../include/ioVTK/TriangularMeshReaderService.hpp  |  131 -
 .../include/ioVTK/TriangularMeshWriterService.hpp  |  124 -
 .../ioVTK/include/ioVTK/VtkModelReaderService.hpp  |  142 -
 Bundles/LeafIO/ioVTK/include/ioVTK/export.hpp      |   41 -
 Bundles/LeafIO/ioVTK/rc/plugin.xml                 |   38 +-
 .../LeafIO/ioVTK/src/ioVTK/ImageReaderService.cpp  |  236 -
 .../LeafIO/ioVTK/src/ioVTK/ImageWriterService.cpp  |  198 -
 .../ioVTK/src/ioVTK/MaxMeshReaderService.cpp       |  179 -
 .../LeafIO/ioVTK/src/ioVTK/MeshReaderService.cpp   |  173 -
 .../LeafIO/ioVTK/src/ioVTK/MeshWriterService.cpp   |  149 -
 Bundles/LeafIO/ioVTK/src/ioVTK/Plugin.cpp          |   11 +-
 Bundles/LeafIO/ioVTK/src/ioVTK/SImageReader.cpp    |  244 +
 .../LeafIO/ioVTK/src/ioVTK/SImageSeriesWriter.cpp  |   37 +-
 Bundles/LeafIO/ioVTK/src/ioVTK/SImageWriter.cpp    |  208 +
 Bundles/LeafIO/ioVTK/src/ioVTK/SMeshReader.cpp     |  184 +
 Bundles/LeafIO/ioVTK/src/ioVTK/SMeshWriter.cpp     |  151 +
 .../ioVTK/src/ioVTK/SModelSeriesObjWriter.cpp      |   45 +-
 .../LeafIO/ioVTK/src/ioVTK/SModelSeriesReader.cpp  |   80 +-
 .../LeafIO/ioVTK/src/ioVTK/SModelSeriesWriter.cpp  |   77 +-
 Bundles/LeafIO/ioVTK/src/ioVTK/SSeriesDBReader.cpp |   79 +-
 .../src/ioVTK/TriangularMeshReaderService.cpp      |  175 -
 .../src/ioVTK/TriangularMeshWriterService.cpp      |  151 -
 .../ioVTK/src/ioVTK/VtkModelReaderService.cpp      |  188 -
 Bundles/LeafIO/ioVTK/test/CMakeLists.txt           |    7 +-
 Bundles/LeafIO/ioVTK/test/Properties.cmake         |   13 +-
 Bundles/LeafIO/ioVTK/test/cppunit.options          |   22 -
 .../test/tu/include/ImageReaderWriterTest.hpp      |   44 +-
 .../test/tu/include/ModelSeriesWriterTest.hpp      |   16 +-
 .../ioVTK/test/tu/include/SeriesDBReaderTest.hpp   |   18 +-
 .../ioVTK/test/tu/src/ImageReaderWriterTest.cpp    |  226 +-
 .../ioVTK/test/tu/src/ModelSeriesWriterTest.cpp    |   88 +-
 .../ioVTK/test/tu/src/SeriesDBReaderTest.cpp       |   67 +-
 Bundles/LeafIO/ioVtkGdcm/CMakeLists.txt            |    8 -
 Bundles/LeafIO/ioVtkGdcm/Properties.cmake          |   15 +-
 Bundles/LeafIO/ioVtkGdcm/bin/build.options         |   18 -
 .../LeafIO/ioVtkGdcm/include/ioVtkGdcm/Plugin.hpp  |    4 +-
 .../include/ioVtkGdcm/SImageSeriesWriter.hpp       |   25 +-
 .../include/ioVtkGdcm/SSeriesDBLazyReader.hpp      |   35 +-
 .../include/ioVtkGdcm/SSeriesDBReader.hpp          |   36 +-
 .../LeafIO/ioVtkGdcm/include/ioVtkGdcm/config.hpp  |   41 -
 .../ioVtkGdcm/include/ioVtkGdcm/namespace.hpp      |    2 +-
 Bundles/LeafIO/ioVtkGdcm/rc/plugin.xml             |    2 +-
 Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/Plugin.cpp  |   11 +-
 .../ioVtkGdcm/src/ioVtkGdcm/SImageSeriesWriter.cpp |   55 +-
 .../src/ioVtkGdcm/SSeriesDBLazyReader.cpp          |   79 +-
 .../ioVtkGdcm/src/ioVtkGdcm/SSeriesDBReader.cpp    |   99 +-
 Bundles/LeafIO/ioVtkGdcm/test/CMakeLists.txt       |    7 +-
 Bundles/LeafIO/ioVtkGdcm/test/Properties.cmake     |   18 +-
 Bundles/LeafIO/ioVtkGdcm/test/cppunit.options      |   12 -
 .../ioVtkGdcm/test/tu/include/IoVtkGdcmTest.hpp    |   18 +-
 .../LeafIO/ioVtkGdcm/test/tu/src/IoVtkGdcmTest.cpp |  123 +-
 Bundles/LeafOp/opImageFilter/CMakeLists.txt        |    9 -
 Bundles/LeafOp/opImageFilter/COPYING               |  675 ---
 Bundles/LeafOp/opImageFilter/COPYING.LESSER        |  166 -
 Bundles/LeafOp/opImageFilter/Properties.cmake      |   11 +-
 Bundles/LeafOp/opImageFilter/bin/build.options     |   17 -
 .../include/opImageFilter/Namespace.hpp            |   10 +-
 .../opImageFilter/include/opImageFilter/Plugin.hpp |    8 +-
 .../include/opImageFilter/action/ImageFilter.hpp   |   57 -
 .../include/opImageFilter/action/Namespace.hpp     |   10 +-
 .../include/opImageFilter/action/SThreshold.hpp    |   71 +
 .../opImageFilter/include/opImageFilter/config.hpp |   40 -
 Bundles/LeafOp/opImageFilter/rc/plugin.xml         |    4 +-
 .../opImageFilter/src/opImageFilter/Plugin.cpp     |   11 +-
 .../src/opImageFilter/action/ImageFilter.cpp       |  146 -
 .../src/opImageFilter/action/SThreshold.cpp        |  168 +
 Bundles/LeafOp/opSofa/CMakeLists.txt               |   62 -
 Bundles/LeafOp/opSofa/Properties.cmake             |   23 -
 Bundles/LeafOp/opVTKMesh/CMakeLists.txt            |   17 +-
 Bundles/LeafOp/opVTKMesh/COPYING                   |  675 ---
 Bundles/LeafOp/opVTKMesh/COPYING.LESSER            |  166 -
 Bundles/LeafOp/opVTKMesh/Properties.cmake          |   12 +-
 Bundles/LeafOp/opVTKMesh/bin/build.options         |   18 -
 .../LeafOp/opVTKMesh/include/opVTKMesh/IMesher.hpp |   23 +-
 .../opVTKMesh/include/opVTKMesh/Namespace.hpp      |   23 +-
 .../LeafOp/opVTKMesh/include/opVTKMesh/Plugin.hpp  |    8 +-
 .../opVTKMesh/include/opVTKMesh/SVTKMesher.hpp     |   36 +-
 .../include/opVTKMesh/action/Namespace.hpp         |   24 -
 .../include/opVTKMesh/action/SMeshCreation.hpp     |   72 +
 .../include/opVTKMesh/action/VTKMeshCreation.hpp   |   57 -
 .../LeafOp/opVTKMesh/include/opVTKMesh/config.hpp  |   40 -
 Bundles/LeafOp/opVTKMesh/rc/plugin.xml             |    4 +-
 Bundles/LeafOp/opVTKMesh/src/opVTKMesh/IMesher.cpp |    8 +-
 Bundles/LeafOp/opVTKMesh/src/opVTKMesh/Plugin.cpp  |   11 +-
 .../LeafOp/opVTKMesh/src/opVTKMesh/SVTKMesher.cpp  |  112 +-
 .../src/opVTKMesh/action/SMeshCreation.cpp         |  181 +
 .../src/opVTKMesh/action/VTKMeshCreation.cpp       |  181 -
 Bundles/LeafPatch/patchMedicalData/CMakeLists.txt  |    8 +-
 Bundles/LeafPatch/patchMedicalData/COPYING         |  675 ---
 Bundles/LeafPatch/patchMedicalData/COPYING.LESSER  |  166 -
 .../LeafPatch/patchMedicalData/Properties.cmake    |    7 +-
 .../LeafPatch/patchMedicalData/bin/build.options   |    3 -
 .../include/patchMedicalData/Plugin.hpp            |    8 +-
 .../include/patchMedicalData/config.hpp            |   39 -
 .../include/patchMedicalData/namespace.hpp         |    2 +-
 Bundles/LeafPatch/patchMedicalData/rc/plugin.xml   |    2 +-
 .../src/patchMedicalData/Plugin.cpp                |    8 +-
 .../LeafPatch/patchMedicalData/test/CMakeLists.txt |    7 +-
 .../patchMedicalData/test/Properties.cmake         |   12 +-
 .../patchMedicalData/test/cppunit.options          |   21 -
 .../patchMedicalData/test/tu/include/PatchTest.hpp |   26 +-
 .../patchMedicalData/test/tu/src/PatchTest.cpp     |   58 +-
 .../basicRegistration/CMakeLists.txt               |   26 +
 .../basicRegistration/Properties.cmake             |   12 +
 .../include/basicRegistration/Plugin.hpp           |   39 +
 .../include/basicRegistration/SImagesSubstract.hpp |   70 +
 .../basicRegistration/SPointListRegistration.hpp   |   78 +
 .../include/basicRegistration/STransformMesh.hpp   |   53 +
 .../include/basicRegistration/namespace.hpp        |   21 +
 .../basicRegistration/rc/plugin.xml                |   23 +
 .../src/basicRegistration/Plugin.cpp               |   38 +
 .../src/basicRegistration/SImagesSubstract.cpp     |  178 +
 .../basicRegistration/SPointListRegistration.cpp   |  181 +
 .../src/basicRegistration/STransformMesh.cpp       |  100 +
 Bundles/LeafUI/guiQt/CMakeLists.txt                |   30 +-
 Bundles/LeafUI/guiQt/COPYING                       |  675 ---
 Bundles/LeafUI/guiQt/COPYING.LESSER                |  166 -
 Bundles/LeafUI/guiQt/Properties.cmake              |   22 +-
 Bundles/LeafUI/guiQt/bin/build.options             |   19 -
 Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp   |   10 +-
 Bundles/LeafUI/guiQt/include/guiQt/Plugin.hpp      |   17 +-
 Bundles/LeafUI/guiQt/include/guiQt/config.hpp      |   40 -
 Bundles/LeafUI/guiQt/include/guiQt/editor/Code.hpp |   56 +-
 .../guiQt/include/guiQt/editor/DummyEditor.hpp     |   28 +-
 .../guiQt/include/guiQt/editor/DynamicView.hpp     |  131 +-
 .../guiQt/include/guiQt/editor/Namespace.hpp       |   10 +-
 .../guiQt/include/guiQt/editor/SDynamicView.hpp    |  238 +
 .../guiQt/include/guiQt/editor/SParameters.hpp     |  170 +
 .../include/guiQt/editor/SSelectionMenuButton.hpp  |  160 +
 .../guiQt/include/guiQt/editor/SSignalButton.hpp   |  155 +
 .../LeafUI/guiQt/include/guiQt/editor/SSlider.hpp  |  171 +
 Bundles/LeafUI/guiQt/rc/plugin.xml                 |   32 +-
 Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp          |   46 +-
 Bundles/LeafUI/guiQt/src/guiQt/editor/Code.cpp     |   57 +-
 .../LeafUI/guiQt/src/guiQt/editor/DummyEditor.cpp  |   27 +-
 .../LeafUI/guiQt/src/guiQt/editor/DynamicView.cpp  |  157 +-
 .../LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp |  577 +++
 .../LeafUI/guiQt/src/guiQt/editor/SParameters.cpp  |  687 +++
 .../src/guiQt/editor/SSelectionMenuButton.cpp      |  220 +
 .../guiQt/src/guiQt/editor/SSignalButton.cpp       |  252 +
 Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp  |  353 ++
 Bundles/LeafUI/guiQt/test/CMakeLists.txt           |   21 +-
 Bundles/LeafUI/guiQt/test/Properties.cmake         |    4 +-
 Bundles/LeafUI/guiQt/test/cppunit.options          |   26 -
 Bundles/LeafUI/guiQt/test/tu/include/GuiQtTest.hpp |   22 +-
 Bundles/LeafUI/guiQt/test/tu/rc/profile.xml        |   10 +-
 Bundles/LeafUI/guiQt/test/tu/src/GuiQtTest.cpp     |   39 +-
 Bundles/LeafUI/guiWx/CMakeLists.txt                |   21 -
 Bundles/LeafUI/guiWx/COPYING                       |  675 ---
 Bundles/LeafUI/guiWx/COPYING.LESSER                |  166 -
 Bundles/LeafUI/guiWx/Properties.cmake              |    7 -
 Bundles/LeafUI/guiWx/bin/build.options             |   17 -
 Bundles/LeafUI/guiWx/include/guiWx/Namespace.hpp   |   21 -
 Bundles/LeafUI/guiWx/include/guiWx/Plugin.hpp      |   49 -
 Bundles/LeafUI/guiWx/include/guiWx/config.hpp      |   40 -
 .../guiWx/include/guiWx/editor/DummyEditor.hpp     |   98 -
 .../guiWx/include/guiWx/editor/Namespace.hpp       |   24 -
 Bundles/LeafUI/guiWx/rc/plugin.xml                 |   14 -
 Bundles/LeafUI/guiWx/src/guiWx/Plugin.cpp          |   70 -
 .../LeafUI/guiWx/src/guiWx/editor/DummyEditor.cpp  |  120 -
 Bundles/LeafUI/monitorQt/CMakeLists.txt            |   27 +-
 Bundles/LeafUI/monitorQt/bin/build.options         |   18 -
 .../monitorQt/include/monitorQt/DumpEditor.hpp     |   23 +-
 .../LeafUI/monitorQt/include/monitorQt/Plugin.hpp  |    2 +-
 .../monitorQt/action/ClassFactoryRegistryInfo.hpp  |   16 +-
 .../include/monitorQt/action/ComponentsTree.hpp    |   16 +-
 .../LeafUI/monitorQt/include/monitorQt/config.hpp  |   39 -
 Bundles/LeafUI/monitorQt/rc/DumpFrameConfig.xml    |  114 +-
 Bundles/LeafUI/monitorQt/rc/plugin.xml             |    2 +-
 .../LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp  |  398 +-
 Bundles/LeafUI/monitorQt/src/monitorQt/Plugin.cpp  |   11 +-
 .../monitorQt/action/ClassFactoryRegistryInfo.cpp  |   26 +-
 .../src/monitorQt/action/ComponentsTree.cpp        |   23 +-
 Bundles/LeafUI/uiGenericQt/CMakeLists.txt          |   28 +-
 Bundles/LeafUI/uiGenericQt/COPYING                 |  675 ---
 Bundles/LeafUI/uiGenericQt/COPYING.LESSER          |  166 -
 Bundles/LeafUI/uiGenericQt/bin/build.options       |   19 -
 .../uiGenericQt/include/uiGenericQt/Namespace.hpp  |   10 +-
 .../uiGenericQt/include/uiGenericQt/Plugin.hpp     |   10 +-
 .../action/LaunchBrowserActionService.hpp          |   31 +-
 .../include/uiGenericQt/action/SShowAbout.hpp      |   28 +-
 .../uiGenericQt/action/ShowAcknowledgments.hpp     |   85 -
 .../uiGenericQt/action/ShowHelpContents.hpp        |   49 +-
 .../include/uiGenericQt/action/ShowRevInfo.hpp     |   34 +-
 .../uiGenericQt/include/uiGenericQt/config.hpp     |   40 -
 Bundles/LeafUI/uiGenericQt/rc/plugin.xml           |    8 +-
 .../LeafUI/uiGenericQt/src/uiGenericQt/Plugin.cpp  |   11 +-
 .../action/LaunchBrowserActionService.cpp          |   15 +-
 .../src/uiGenericQt/action/SShowAbout.cpp          |   41 +-
 .../src/uiGenericQt/action/ShowAcknowledgments.cpp |  141 -
 .../src/uiGenericQt/action/ShowHelpContents.cpp    |   38 +-
 .../src/uiGenericQt/action/ShowRevInfo.cpp         |  100 +-
 Bundles/LeafUI/uiIO/CMakeLists.txt                 |    6 -
 Bundles/LeafUI/uiIO/COPYING                        |  675 ---
 Bundles/LeafUI/uiIO/COPYING.LESSER                 |  166 -
 Bundles/LeafUI/uiIO/Properties.cmake               |   23 +-
 Bundles/LeafUI/uiIO/bin/build.options              |   13 -
 Bundles/LeafUI/uiIO/include/uiIO/Namespace.hpp     |   28 +-
 Bundles/LeafUI/uiIO/include/uiIO/Plugin.hpp        |   14 +-
 .../include/uiIO/action/SExportWithSeriesDB.hpp    |  117 +
 .../uiIO/include/uiIO/action/SSeriesDBMerger.hpp   |   67 +-
 Bundles/LeafUI/uiIO/include/uiIO/config.hpp        |   40 -
 .../uiIO/include/uiIO/editor/IOSelectorService.hpp |  127 -
 .../LeafUI/uiIO/include/uiIO/editor/Namespace.hpp  |   24 -
 .../uiIO/include/uiIO/editor/SIOSelector.hpp       |  137 +
 Bundles/LeafUI/uiIO/rc/plugin.xml                  |   16 +-
 Bundles/LeafUI/uiIO/src/uiIO/Plugin.cpp            |   11 +-
 .../uiIO/src/uiIO/action/SExportWithSeriesDB.cpp   |  140 +
 .../uiIO/src/uiIO/action/SSeriesDBMerger.cpp       |   84 +-
 .../uiIO/src/uiIO/editor/IOSelectorService.cpp     |  369 --
 .../LeafUI/uiIO/src/uiIO/editor/SIOSelector.cpp    |  446 ++
 Bundles/LeafUI/uiImageQt/CMakeLists.txt            |   28 +-
 Bundles/LeafUI/uiImageQt/COPYING                   |  675 ---
 Bundles/LeafUI/uiImageQt/COPYING.LESSER            |  166 -
 Bundles/LeafUI/uiImageQt/Properties.cmake          |   13 +-
 Bundles/LeafUI/uiImageQt/bin/build.options         |   19 -
 .../uiImageQt/include/uiImageQt/ImageInfo.hpp      |   46 +-
 .../include/uiImageQt/ImageTransparency.hpp        |   39 +-
 .../uiImageQt/include/uiImageQt/Namespace.hpp      |   10 +-
 .../LeafUI/uiImageQt/include/uiImageQt/Plugin.hpp  |   10 +-
 .../uiImageQt/include/uiImageQt/ShowScanEditor.hpp |  106 -
 .../include/uiImageQt/SliceIndexPositionEditor.hpp |   92 +-
 .../include/uiImageQt/SliceListEditor.hpp          |  108 -
 .../include/uiImageQt/SliceListEditor2.hpp         |  109 -
 .../uiImageQt/include/uiImageQt/WindowLevel.hpp    |  112 +-
 .../LeafUI/uiImageQt/include/uiImageQt/config.hpp  |   40 -
 Bundles/LeafUI/uiImageQt/rc/plugin.xml             |   21 +-
 .../LeafUI/uiImageQt/src/uiImageQt/ImageInfo.cpp   |   71 +-
 .../uiImageQt/src/uiImageQt/ImageTransparency.cpp  |   96 +-
 Bundles/LeafUI/uiImageQt/src/uiImageQt/Plugin.cpp  |    8 +-
 .../uiImageQt/src/uiImageQt/ShowScanEditor.cpp     |  172 -
 .../src/uiImageQt/SliceIndexPositionEditor.cpp     |  210 +-
 .../uiImageQt/src/uiImageQt/SliceListEditor.cpp    |  220 -
 .../uiImageQt/src/uiImageQt/SliceListEditor2.cpp   |  231 -
 .../LeafUI/uiImageQt/src/uiImageQt/WindowLevel.cpp |  369 +-
 Bundles/LeafUI/uiMeasurement/CMakeLists.txt        |   11 -
 Bundles/LeafUI/uiMeasurement/COPYING               |  675 ---
 Bundles/LeafUI/uiMeasurement/COPYING.LESSER        |  166 -
 Bundles/LeafUI/uiMeasurement/Properties.cmake      |   11 +-
 Bundles/LeafUI/uiMeasurement/bin/build.options     |   15 -
 .../include/uiMeasurement/Namespace.hpp            |   10 +-
 .../uiMeasurement/include/uiMeasurement/Plugin.hpp |   10 +-
 .../include/uiMeasurement/action/AddDistance.hpp   |   20 +-
 .../include/uiMeasurement/action/AddLandmark.hpp   |   32 +-
 .../include/uiMeasurement/action/FocusLandmark.hpp |   20 +-
 .../include/uiMeasurement/action/LoadLandmark.hpp  |   21 +-
 .../uiMeasurement/action/RemoveDistance.hpp        |   29 +-
 .../uiMeasurement/action/RemoveLandmark.hpp        |   23 +-
 .../uiMeasurement/action/SAddLabeledPoint.hpp      |   20 +-
 .../include/uiMeasurement/action/SaveLandmark.hpp  |   21 +-
 .../include/uiMeasurement/action/ShowDistance.hpp  |   49 +-
 .../include/uiMeasurement/action/ShowLandmark.hpp  |   55 +-
 .../uiMeasurement/include/uiMeasurement/config.hpp |   40 -
 Bundles/LeafUI/uiMeasurement/rc/plugin.xml         |    4 +-
 .../uiMeasurement/src/uiMeasurement/Plugin.cpp     |   11 +-
 .../src/uiMeasurement/action/AddDistance.cpp       |   67 +-
 .../src/uiMeasurement/action/AddLandmark.cpp       |   93 +-
 .../src/uiMeasurement/action/FocusLandmark.cpp     |  101 +-
 .../src/uiMeasurement/action/LoadLandmark.cpp      |   90 +-
 .../src/uiMeasurement/action/RemoveDistance.cpp    |   88 +-
 .../src/uiMeasurement/action/RemoveLandmark.cpp    |   78 +-
 .../src/uiMeasurement/action/SAddLabeledPoint.cpp  |   58 +-
 .../src/uiMeasurement/action/SaveLandmark.cpp      |   83 +-
 .../src/uiMeasurement/action/ShowDistance.cpp      |   90 +-
 .../src/uiMeasurement/action/ShowLandmark.cpp      |   84 +-
 Bundles/LeafUI/uiMeasurementQt/CMakeLists.txt      |   25 +-
 Bundles/LeafUI/uiMeasurementQt/COPYING             |  675 ---
 Bundles/LeafUI/uiMeasurementQt/COPYING.LESSER      |  166 -
 Bundles/LeafUI/uiMeasurementQt/Properties.cmake    |   12 +-
 Bundles/LeafUI/uiMeasurementQt/bin/build.options   |   15 -
 .../include/uiMeasurementQt/Plugin.hpp             |   10 +-
 .../include/uiMeasurementQt/config.hpp             |   40 -
 .../include/uiMeasurementQt/editor/Distance.hpp    |   81 +-
 .../include/uiMeasurementQt/editor/Namespace.hpp   |   25 -
 .../include/uiMeasurementQt/editor/namespace.hpp   |   29 +
 Bundles/LeafUI/uiMeasurementQt/rc/plugin.xml       |    2 +-
 .../uiMeasurementQt/src/uiMeasurementQt/Plugin.cpp |   11 +-
 .../src/uiMeasurementQt/editor/Distance.cpp        |   69 +-
 Bundles/LeafUI/uiMedDataQt/CMakeLists.txt          |   37 +-
 Bundles/LeafUI/uiMedDataQt/COPYING                 |  675 ---
 Bundles/LeafUI/uiMedDataQt/COPYING.LESSER          |  166 -
 Bundles/LeafUI/uiMedDataQt/Properties.cmake        |    8 +-
 Bundles/LeafUI/uiMedDataQt/bin/build.options       |   22 -
 .../include/uiMedDataQt/InsertSeries.hpp           |    8 +-
 .../uiMedDataQt/include/uiMedDataQt/Plugin.hpp     |    4 +-
 .../include/uiMedDataQt/SSeriesViewer.hpp          |   47 +-
 .../include/uiMedDataQt/action/SExportSeries.hpp   |   84 +-
 .../include/uiMedDataQt/action/SInitNewSeries.hpp  |   21 +-
 .../uiMedDataQt/include/uiMedDataQt/config.hpp     |   40 -
 .../uiMedDataQt/include/uiMedDataQt/constants.hpp  |   28 +-
 .../include/uiMedDataQt/editor/SActivityWizard.hpp |  205 +
 .../uiMedDataQt/editor/SModelSeriesList.hpp        |  132 +-
 .../uiMedDataQt/editor/SOrganTransformation.hpp    |   55 +-
 .../include/uiMedDataQt/editor/SSelector.hpp       |  136 +-
 .../include/uiMedDataQt/editor/SSeries.hpp         |   52 +-
 .../uiMedDataQt/include/uiMedDataQt/namespace.hpp  |   34 +-
 .../uiMedDataQt/widget/ActivityDataView.hpp        |  149 +
 .../include/uiMedDataQt/widget/EquipmentEditor.hpp |   10 +-
 .../include/uiMedDataQt/widget/PatientEditor.hpp   |   10 +-
 .../include/uiMedDataQt/widget/Selector.hpp        |   15 +-
 .../include/uiMedDataQt/widget/SelectorModel.hpp   |   21 +-
 .../include/uiMedDataQt/widget/SeriesEditor.hpp    |   21 +-
 .../include/uiMedDataQt/widget/StudyEditor.hpp     |   10 +-
 Bundles/LeafUI/uiMedDataQt/rc/SeriesExportCfg.xml  |   16 +-
 Bundles/LeafUI/uiMedDataQt/rc/plugin.xml           |  131 +-
 .../uiMedDataQt/src/uiMedDataQt/InsertSeries.cpp   |   15 +-
 .../LeafUI/uiMedDataQt/src/uiMedDataQt/Plugin.cpp  |   11 +-
 .../uiMedDataQt/src/uiMedDataQt/SSeriesViewer.cpp  |   83 +-
 .../src/uiMedDataQt/action/SExportSeries.cpp       |  160 +-
 .../src/uiMedDataQt/action/SInitNewSeries.cpp      |   53 +-
 .../src/uiMedDataQt/editor/SActivityWizard.cpp     |  509 ++
 .../src/uiMedDataQt/editor/SModelSeriesList.cpp    |  389 +-
 .../uiMedDataQt/editor/SOrganTransformation.cpp    |  190 +-
 .../src/uiMedDataQt/editor/SSelector.cpp           |  217 +-
 .../uiMedDataQt/src/uiMedDataQt/editor/SSeries.cpp |   97 +-
 .../src/uiMedDataQt/widget/ActivityDataView.cpp    |  913 ++++
 .../src/uiMedDataQt/widget/EquipmentEditor.cpp     |    4 +-
 .../src/uiMedDataQt/widget/PatientEditor.cpp       |   21 +-
 .../src/uiMedDataQt/widget/Selector.cpp            |   84 +-
 .../src/uiMedDataQt/widget/SelectorModel.cpp       |  107 +-
 .../src/uiMedDataQt/widget/SeriesEditor.cpp        |   43 +-
 .../src/uiMedDataQt/widget/StudyEditor.cpp         |   39 +-
 Bundles/LeafUI/uiPreferences/CMakeLists.txt        |   16 +
 Bundles/LeafUI/uiPreferences/Properties.cmake      |   12 +
 .../uiPreferences/include/uiPreferences/Plugin.hpp |   36 +
 .../action/SPreferencesConfiguration.hpp           |  144 +
 .../include/uiPreferences/namespace.hpp            |   22 +
 Bundles/LeafUI/uiPreferences/rc/plugin.xml         |   13 +
 .../uiPreferences/src/uiPreferences/Plugin.cpp     |   16 +
 .../action/SPreferencesConfiguration.cpp           |  272 +
 Bundles/LeafUI/uiPython/CMakeLists.txt             |   11 -
 Bundles/LeafUI/uiPython/COPYING                    |  675 ---
 Bundles/LeafUI/uiPython/COPYING.LESSER             |  166 -
 Bundles/LeafUI/uiPython/Properties.cmake           |    7 -
 Bundles/LeafUI/uiPython/bin/build.options          |    7 -
 .../LeafUI/uiPython/include/uiPython/Namespace.hpp |   21 -
 .../LeafUI/uiPython/include/uiPython/Plugin.hpp    |   51 -
 .../uiPython/include/uiPython/action/Namespace.hpp |   24 -
 .../uiPython/include/uiPython/action/StringRun.hpp |   79 -
 .../uiPython/include/uiPython/action/Test.hpp      |   79 -
 .../LeafUI/uiPython/include/uiPython/config.hpp    |   41 -
 Bundles/LeafUI/uiPython/rc/plugin.xml              |   24 -
 Bundles/LeafUI/uiPython/src/uiPython/Plugin.cpp    |   30 -
 .../uiPython/src/uiPython/action/StringRun.cpp     |   85 -
 .../LeafUI/uiPython/src/uiPython/action/Test.cpp   |   82 -
 Bundles/LeafUI/uiReconstructionQt/CMakeLists.txt   |   27 +-
 Bundles/LeafUI/uiReconstructionQt/COPYING          |  675 ---
 Bundles/LeafUI/uiReconstructionQt/COPYING.LESSER   |  166 -
 Bundles/LeafUI/uiReconstructionQt/Properties.cmake |   12 +-
 .../LeafUI/uiReconstructionQt/bin/build.options    |   16 -
 .../include/uiReconstructionQt/Namespace.hpp       |   10 +-
 .../uiReconstructionQt/OrganMaterialEditor.hpp     |   32 +-
 .../include/uiReconstructionQt/Plugin.hpp          |   10 +-
 .../uiReconstructionQt/RepresentationEditor.hpp    |   63 +-
 .../include/uiReconstructionQt/config.hpp          |   40 -
 Bundles/LeafUI/uiReconstructionQt/rc/plugin.xml    |    2 +-
 .../src/uiReconstructionQt/OrganMaterialEditor.cpp |   85 +-
 .../src/uiReconstructionQt/Plugin.cpp              |    8 +-
 .../uiReconstructionQt/RepresentationEditor.cpp    |  285 +-
 Bundles/LeafUI/uiTF/CMakeLists.txt                 |   27 +-
 Bundles/LeafUI/uiTF/Properties.cmake               |    2 +-
 Bundles/LeafUI/uiTF/bin/build.options              |    6 -
 Bundles/LeafUI/uiTF/include/uiTF/Plugin.hpp        |   14 +-
 .../uiTF/include/uiTF/TransferFunctionEditor.hpp   |   82 +-
 Bundles/LeafUI/uiTF/include/uiTF/export.hpp        |   41 -
 Bundles/LeafUI/uiTF/include/uiTF/namespace.hpp     |   18 +
 Bundles/LeafUI/uiTF/rc/plugin.xml                  |    2 +-
 Bundles/LeafUI/uiTF/src/uiTF/Plugin.cpp            |   11 +-
 .../uiTF/src/uiTF/TransferFunctionEditor.cpp       |  300 +-
 Bundles/LeafUI/uiVisu/CMakeLists.txt               |   12 -
 Bundles/LeafUI/uiVisu/COPYING                      |  675 ---
 Bundles/LeafUI/uiVisu/COPYING.LESSER               |  166 -
 Bundles/LeafUI/uiVisu/Properties.cmake             |   10 +-
 Bundles/LeafUI/uiVisu/bin/build.options            |   17 -
 Bundles/LeafUI/uiVisu/include/uiVisu/Namespace.hpp |   10 +-
 Bundles/LeafUI/uiVisu/include/uiVisu/Plugin.hpp    |   10 +-
 .../uiVisu/action/CameraOrientationAction.hpp      |   83 -
 .../include/uiVisu/action/CrossTypeAction.hpp      |   46 +-
 .../uiVisu/include/uiVisu/action/SSnapshot.hpp     |   60 +-
 Bundles/LeafUI/uiVisu/include/uiVisu/config.hpp    |   40 -
 Bundles/LeafUI/uiVisu/rc/plugin.xml                |    8 +-
 Bundles/LeafUI/uiVisu/src/uiVisu/Plugin.cpp        |    8 +-
 .../src/uiVisu/action/CameraOrientationAction.cpp  |  125 -
 .../uiVisu/src/uiVisu/action/CrossTypeAction.cpp   |   55 +-
 .../LeafUI/uiVisu/src/uiVisu/action/SSnapshot.cpp  |   73 +-
 Bundles/LeafUI/uiVisuQt/CMakeLists.txt             |   26 +-
 Bundles/LeafUI/uiVisuQt/COPYING                    |  675 ---
 Bundles/LeafUI/uiVisuQt/COPYING.LESSER             |  166 -
 Bundles/LeafUI/uiVisuQt/Properties.cmake           |   13 +-
 Bundles/LeafUI/uiVisuQt/bin/build.options          |   18 -
 .../uiVisuQt/include/uiVisuQt/BasicFloatEditor.hpp |   28 +-
 .../LeafUI/uiVisuQt/include/uiVisuQt/Namespace.hpp |   10 +-
 .../LeafUI/uiVisuQt/include/uiVisuQt/Plugin.hpp    |   10 +-
 .../uiVisuQt/include/uiVisuQt/PointEditor.hpp      |   46 +-
 .../uiVisuQt/include/uiVisuQt/SnapshotEditor.hpp   |   65 +-
 .../uiVisuQt/TransformationMatrixEditor.hpp        |   28 +-
 .../LeafUI/uiVisuQt/include/uiVisuQt/config.hpp    |   40 -
 Bundles/LeafUI/uiVisuQt/rc/plugin.xml              |    2 +-
 .../uiVisuQt/src/uiVisuQt/BasicFloatEditor.cpp     |   62 +-
 Bundles/LeafUI/uiVisuQt/src/uiVisuQt/Plugin.cpp    |    8 +-
 .../LeafUI/uiVisuQt/src/uiVisuQt/PointEditor.cpp   |  193 +-
 .../uiVisuQt/src/uiVisuQt/SnapshotEditor.cpp       |  112 +-
 .../src/uiVisuQt/TransformationMatrixEditor.cpp    |   46 +-
 Bundles/LeafVisu/scene2D/CMakeLists.txt            |   24 +-
 Bundles/LeafVisu/scene2D/COPYING                   |  675 ---
 Bundles/LeafVisu/scene2D/COPYING.LESSER            |  166 -
 Bundles/LeafVisu/scene2D/Properties.cmake          |   14 +-
 Bundles/LeafVisu/scene2D/bin/build.options         |   14 -
 .../LeafVisu/scene2D/include/scene2D/Plugin.hpp    |   17 +-
 .../LeafVisu/scene2D/include/scene2D/Render.hpp    |  284 +-
 .../include/scene2D/Scene2DGraphicsView.hpp        |   23 +-
 .../scene2D/include/scene2D/adaptor/Axis.hpp       |   17 +-
 .../include/scene2D/adaptor/CurvedHistogram.hpp    |  143 +-
 .../scene2D/include/scene2D/adaptor/Grid2D.hpp     |  105 +-
 .../include/scene2D/adaptor/GridFromFloat.hpp      |  100 +-
 .../scene2D/include/scene2D/adaptor/Histogram.hpp  |   97 +-
 .../include/scene2D/adaptor/HistogramCursor.hpp    |   16 +-
 .../include/scene2D/adaptor/HistogramValue.hpp     |   15 +-
 .../scene2D/include/scene2D/adaptor/IAdaptor.hpp   |   78 +-
 .../scene2D/include/scene2D/adaptor/Line.hpp       |   76 +-
 .../scene2D/include/scene2D/adaptor/Negato.hpp     |   76 +-
 .../include/scene2D/adaptor/ScaleValues.hpp        |   98 +-
 .../scene2D/include/scene2D/adaptor/Sin.hpp        |   14 +-
 .../scene2D/include/scene2D/adaptor/Square.hpp     |   21 +-
 .../include/scene2D/adaptor/TransferFunction.hpp   |   93 +-
 .../include/scene2D/adaptor/ViewportInteractor.hpp |   14 +-
 .../scene2D/adaptor/ViewportRangeSelector.hpp      |   33 +-
 .../include/scene2D/adaptor/ViewportUpdater.hpp    |   17 +-
 .../scene2D/include/scene2D/adaptor/namespace.hpp  |   18 +-
 Bundles/LeafVisu/scene2D/include/scene2D/bspline.h |  122 +-
 .../LeafVisu/scene2D/include/scene2D/config.hpp    |   40 -
 .../LeafVisu/scene2D/include/scene2D/data/Axis.hpp |   47 +-
 .../scene2D/include/scene2D/data/Coord.hpp         |   49 +-
 .../scene2D/include/scene2D/data/Event.hpp         |  195 +-
 .../scene2D/include/scene2D/data/InitQtPen.hpp     |   11 +-
 .../LeafVisu/scene2D/include/scene2D/data/Size.hpp |   49 +-
 .../scene2D/include/scene2D/data/Viewport.hpp      |   27 +-
 .../scene2D/include/scene2D/data/ViewportMsg.hpp   |   53 -
 .../scene2D/include/scene2D/data/namespace.hpp     |   18 +-
 .../LeafVisu/scene2D/include/scene2D/namespace.hpp |   18 +-
 .../scene2D/processing/ComputeHistogramFunctor.hxx |   30 +-
 .../scene2D/processing/SComputeHistogram.hpp       |   49 +-
 Bundles/LeafVisu/scene2D/rc/plugin.xml             |    2 +-
 Bundles/LeafVisu/scene2D/src/scene2D/Plugin.cpp    |   13 +-
 Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp    |  466 +-
 .../scene2D/src/scene2D/Scene2DGraphicsView.cpp    |   28 +-
 .../LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp  |   75 +-
 .../src/scene2D/adaptor/CurvedHistogram.cpp        |  179 +-
 .../scene2D/src/scene2D/adaptor/Grid2D.cpp         |   46 +-
 .../scene2D/src/scene2D/adaptor/GridFromFloat.cpp  |  110 +-
 .../scene2D/src/scene2D/adaptor/Histogram.cpp      |   52 +-
 .../src/scene2D/adaptor/HistogramCursor.cpp        |   84 +-
 .../scene2D/src/scene2D/adaptor/HistogramValue.cpp |   83 +-
 .../scene2D/src/scene2D/adaptor/IAdaptor.cpp       |   85 +-
 .../LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp  |   46 +-
 .../scene2D/src/scene2D/adaptor/Negato.cpp         |  411 +-
 .../scene2D/src/scene2D/adaptor/ScaleValues.cpp    |  117 +-
 .../LeafVisu/scene2D/src/scene2D/adaptor/Sin.cpp   |   38 +-
 .../scene2D/src/scene2D/adaptor/Square.cpp         |   35 +-
 .../src/scene2D/adaptor/TransferFunction.cpp       |  303 +-
 .../src/scene2D/adaptor/ViewportInteractor.cpp     |   72 +-
 .../src/scene2D/adaptor/ViewportRangeSelector.cpp  |  102 +-
 .../src/scene2D/adaptor/ViewportUpdater.cpp        |   34 +-
 Bundles/LeafVisu/scene2D/src/scene2D/data/Axis.cpp |   45 +-
 .../LeafVisu/scene2D/src/scene2D/data/Event.cpp    |   39 +-
 .../scene2D/src/scene2D/data/InitQtPen.cpp         |    6 +-
 .../LeafVisu/scene2D/src/scene2D/data/Viewport.cpp |   46 +-
 .../scene2D/src/scene2D/data/ViewportMsg.cpp       |   35 -
 .../src/scene2D/processing/SComputeHistogram.cpp   |  106 +-
 Bundles/LeafVisu/scene2D/test/CMakeLists.txt       |   20 +-
 Bundles/LeafVisu/scene2D/test/Properties.cmake     |    2 +-
 Bundles/LeafVisu/scene2D/test/cppunit.options      |   13 -
 .../scene2D/test/tu/include/ProcessingTest.hpp     |   11 +-
 .../scene2D/test/tu/src/ProcessingTest.cpp         |   46 +-
 Bundles/LeafVisu/visuVTK/CMakeLists.txt            |    7 -
 Bundles/LeafVisu/visuVTK/COPYING                   |  675 ---
 Bundles/LeafVisu/visuVTK/COPYING.LESSER            |  166 -
 Bundles/LeafVisu/visuVTK/Properties.cmake          |   11 +-
 Bundles/LeafVisu/visuVTK/bin/build.options         |   15 -
 .../LeafVisu/visuVTK/include/visuVTK/Namespace.hpp |   10 +-
 .../LeafVisu/visuVTK/include/visuVTK/Plugin.hpp    |   16 +-
 .../LeafVisu/visuVTK/include/visuVTK/config.hpp    |   40 -
 Bundles/LeafVisu/visuVTK/rc/plugin.xml             |    8 +-
 Bundles/LeafVisu/visuVTK/rc/visuVTKCfg.xsd         |   25 -
 Bundles/LeafVisu/visuVTK/src/visuVTK/Plugin.cpp    |   10 +-
 Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt     |   62 +-
 Bundles/LeafVisu/visuVTKAdaptor/COPYING            |  675 ---
 Bundles/LeafVisu/visuVTKAdaptor/COPYING.LESSER     |  166 -
 Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake   |   22 +-
 Bundles/LeafVisu/visuVTKAdaptor/bin/build.options  |   25 -
 .../visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp |   55 +-
 .../include/visuVTKAdaptor/BoxWidget.hpp           |   20 +-
 .../include/visuVTKAdaptor/Camera.hpp              |   55 -
 .../include/visuVTKAdaptor/Camera2.hpp             |   22 +-
 .../visuVTKAdaptor/include/visuVTKAdaptor/Cube.hpp |   30 +-
 .../include/visuVTKAdaptor/Distance.hpp            |   33 +-
 .../include/visuVTKAdaptor/Image.hpp               |   92 +-
 .../include/visuVTKAdaptor/Image3DCursor.hpp       |   48 +-
 .../include/visuVTKAdaptor/ImageLandmarks.hpp      |   38 +-
 .../include/visuVTKAdaptor/ImageMultiDistances.hpp |   50 +-
 .../visuVTKAdaptor/ImagePickerInteractor.hpp       |  109 +-
 .../include/visuVTKAdaptor/ImageSeries.hpp         |   35 +-
 .../include/visuVTKAdaptor/ImageSlice.hpp          |  131 +-
 .../visuVTKAdaptor/ImageSliceOrientationText.hpp   |  109 +
 .../include/visuVTKAdaptor/ImageText.hpp           |   54 +-
 .../include/visuVTKAdaptor/ImagesBlend.hpp         |   60 +-
 .../include/visuVTKAdaptor/ImagesProbeCursor.hpp   |   47 +-
 .../include/visuVTKAdaptor/InteractorStyle.hpp     |   26 +-
 .../include/visuVTKAdaptor/LabeledPointList.hpp    |   40 +-
 .../include/visuVTKAdaptor/Material.hpp            |   42 +-
 .../include/visuVTKAdaptor/Medical3DCamera.hpp     |   85 +-
 .../visuVTKAdaptor/include/visuVTKAdaptor/Mesh.hpp |  213 +-
 .../include/visuVTKAdaptor/MeshFactory.hpp         |   31 +-
 .../include/visuVTKAdaptor/MeshNormals.hpp         |  117 +-
 .../include/visuVTKAdaptor/MeshesBoxWidget.hpp     |   62 +-
 .../include/visuVTKAdaptor/Model.hpp               |   49 -
 .../include/visuVTKAdaptor/ModelSeries.hpp         |   84 +-
 .../include/visuVTKAdaptor/Namespace.hpp           |   10 +-
 .../include/visuVTKAdaptor/NegatoMPR.hpp           |  124 +-
 .../include/visuVTKAdaptor/NegatoOneSlice.hpp      |   99 +-
 .../visuVTKAdaptor/NegatoSlicingInteractor.hpp     |   77 +-
 .../visuVTKAdaptor/NegatoWindowingInteractor.hpp   |   36 +-
 .../include/visuVTKAdaptor/Normals.hpp             |   65 -
 .../include/visuVTKAdaptor/OrientationMarker.hpp   |   64 +
 .../include/visuVTKAdaptor/PickerInteractor.hpp    |   86 +-
 .../include/visuVTKAdaptor/Plane.hpp               |   73 +-
 .../include/visuVTKAdaptor/PlaneInteractor.hpp     |   30 +-
 .../include/visuVTKAdaptor/PlaneList.hpp           |   60 +-
 .../visuVTKAdaptor/PlaneSelectionNotifier.hpp      |   94 +-
 .../include/visuVTKAdaptor/PlaneSelector.hpp       |   27 +-
 .../include/visuVTKAdaptor/Plugin.hpp              |   21 +-
 .../include/visuVTKAdaptor/Point.hpp               |   51 +-
 .../include/visuVTKAdaptor/PointLabel.hpp          |   34 +-
 .../include/visuVTKAdaptor/PointList.hpp           |   58 +-
 .../include/visuVTKAdaptor/PointListInteractor.hpp |   26 +-
 .../include/visuVTKAdaptor/ProbeCursor.hpp         |   64 +-
 .../include/visuVTKAdaptor/Reconstruction.hpp      |  120 +-
 .../include/visuVTKAdaptor/Render.hpp              |   50 -
 .../include/visuVTKAdaptor/Resection.hpp           |   47 +-
 .../include/visuVTKAdaptor/ResectionDB.hpp         |   48 +-
 .../include/visuVTKAdaptor/ResetCamera.hpp         |   52 -
 .../include/visuVTKAdaptor/SliceFollowerCamera.hpp |   60 +-
 .../include/visuVTKAdaptor/SlicesCursor.hpp        |   86 +-
 .../include/visuVTKAdaptor/Snapshot.hpp            |   35 +-
 .../visuVTKAdaptor/include/visuVTKAdaptor/Text.hpp |   51 +-
 .../include/visuVTKAdaptor/Texture.hpp             |  112 +
 .../include/visuVTKAdaptor/Transform.hpp           |   63 +-
 .../include/visuVTKAdaptor/TriangularMesh.hpp      |  143 -
 .../include/visuVTKAdaptor/VectorField.hpp         |   45 +-
 .../include/visuVTKAdaptor/Video.hpp               |   62 -
 .../include/visuVTKAdaptor/config.hpp              |   40 -
 Bundles/LeafVisu/visuVTKAdaptor/rc/fp.glsl         |   11 +
 Bundles/LeafVisu/visuVTKAdaptor/rc/human.vtk       | 5227 ++++++++++++++++++++
 Bundles/LeafVisu/visuVTKAdaptor/rc/plugin.xml      |   60 +-
 Bundles/LeafVisu/visuVTKAdaptor/rc/video.xml       |   35 -
 Bundles/LeafVisu/visuVTKAdaptor/rc/vp.glsl         |   10 +
 .../visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp     |   84 +-
 .../src/visuVTKAdaptor/BoxWidget.cpp               |   90 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Camera.cpp   |  202 -
 .../visuVTKAdaptor/src/visuVTKAdaptor/Camera2.cpp  |  169 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Cube.cpp     |   18 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Distance.cpp |   81 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Image.cpp    |  184 +-
 .../src/visuVTKAdaptor/Image3DCursor.cpp           |  112 +-
 .../src/visuVTKAdaptor/ImageLandmarks.cpp          |  170 +-
 .../src/visuVTKAdaptor/ImageMultiDistances.cpp     |  235 +-
 .../src/visuVTKAdaptor/ImagePickerInteractor.cpp   |  351 +-
 .../src/visuVTKAdaptor/ImageSeries.cpp             |   54 +-
 .../src/visuVTKAdaptor/ImageSlice.cpp              |  310 +-
 .../visuVTKAdaptor/ImageSliceOrientationText.cpp   |  284 ++
 .../src/visuVTKAdaptor/ImageText.cpp               |  111 +-
 .../src/visuVTKAdaptor/ImagesBlend.cpp             |  224 +-
 .../src/visuVTKAdaptor/ImagesProbeCursor.cpp       |  159 +-
 .../src/visuVTKAdaptor/InteractorStyle.cpp         |   57 +-
 .../src/visuVTKAdaptor/LabeledPointList.cpp        |  163 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Material.cpp |  126 +-
 .../src/visuVTKAdaptor/Medical3DCamera.cpp         |  104 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Mesh.cpp     |  687 ++-
 .../src/visuVTKAdaptor/MeshFactory.cpp             |  101 +-
 .../src/visuVTKAdaptor/MeshNormals.cpp             |  232 +-
 .../src/visuVTKAdaptor/MeshesBoxWidget.cpp         |  237 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Model.cpp    |  126 -
 .../src/visuVTKAdaptor/ModelSeries.cpp             |  172 +-
 .../src/visuVTKAdaptor/NegatoMPR.cpp               |  351 +-
 .../src/visuVTKAdaptor/NegatoOneSlice.cpp          |  266 +-
 .../src/visuVTKAdaptor/NegatoSlicingInteractor.cpp |  369 +-
 .../visuVTKAdaptor/NegatoWindowingInteractor.cpp   |  168 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Normals.cpp  |  204 -
 .../src/visuVTKAdaptor/OrientationMarker.cpp       |   95 +
 .../src/visuVTKAdaptor/PickerInteractor.cpp        |  306 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Plane.cpp    |  201 +-
 .../src/visuVTKAdaptor/PlaneInteractor.cpp         |  100 +-
 .../src/visuVTKAdaptor/PlaneList.cpp               |  176 +-
 .../src/visuVTKAdaptor/PlaneSelectionNotifier.cpp  |  224 +-
 .../src/visuVTKAdaptor/PlaneSelector.cpp           |   60 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Plugin.cpp   |   20 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Point.cpp    |  148 +-
 .../src/visuVTKAdaptor/PointLabel.cpp              |   40 +-
 .../src/visuVTKAdaptor/PointList.cpp               |  104 +-
 .../src/visuVTKAdaptor/PointListInteractor.cpp     |   95 +-
 .../src/visuVTKAdaptor/ProbeCursor.cpp             |  194 +-
 .../src/visuVTKAdaptor/Reconstruction.cpp          |  151 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Render.cpp   |  104 -
 .../src/visuVTKAdaptor/Resection.cpp               |   68 +-
 .../src/visuVTKAdaptor/ResectionDB.cpp             |   67 +-
 .../src/visuVTKAdaptor/ResetCamera.cpp             |  106 -
 .../src/visuVTKAdaptor/SliceFollowerCamera.cpp     |  160 +-
 .../src/visuVTKAdaptor/SlicesCursor.cpp            |  255 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp |   82 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Text.cpp     |   94 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Texture.cpp  |  188 +
 .../src/visuVTKAdaptor/Transform.cpp               |  176 +-
 .../src/visuVTKAdaptor/TriangularMesh.cpp          |  994 ----
 .../src/visuVTKAdaptor/VectorField.cpp             |   81 +-
 .../visuVTKAdaptor/src/visuVTKAdaptor/Video.cpp    |  163 -
 Bundles/LeafVisu/visuVTKQt/CMakeLists.txt          |   35 +-
 Bundles/LeafVisu/visuVTKQt/COPYING                 |  675 ---
 Bundles/LeafVisu/visuVTKQt/COPYING.LESSER          |  166 -
 Bundles/LeafVisu/visuVTKQt/Properties.cmake        |   17 +-
 Bundles/LeafVisu/visuVTKQt/bin/build.options       |   20 -
 .../visuVTKQt/include/visuVTKQt/Namespace.hpp      |   10 +-
 .../visuVTKQt/include/visuVTKQt/Plugin.hpp         |   10 +-
 .../visuVTKQt/VtkRenderWindowInteractorManager.hpp |   17 +-
 .../visuVTKQt/include/visuVTKQt/config.hpp         |   40 -
 Bundles/LeafVisu/visuVTKQt/rc/plugin.xml           |    8 +-
 .../LeafVisu/visuVTKQt/src/visuVTKQt/Plugin.cpp    |    9 +-
 .../visuVTKQt/VtkRenderWindowInteractorManager.cpp |  325 +-
 Bundles/LeafVisu/visuVTKVRAdaptor/CMakeLists.txt   |   46 +-
 Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake |    2 +-
 .../LeafVisu/visuVTKVRAdaptor/bin/build.options    |   20 -
 .../include/visuVTKVRAdaptor/Plugin.hpp            |   16 +-
 .../include/visuVTKVRAdaptor/Volume.hpp            |  151 +-
 .../include/visuVTKVRAdaptor/config.hpp            |   40 -
 .../include/visuVTKVRAdaptor/namespace.hpp         |   19 +
 Bundles/LeafVisu/visuVTKVRAdaptor/rc/plugin.xml    |    3 +-
 .../src/visuVTKVRAdaptor/Plugin.cpp                |   11 +-
 .../src/visuVTKVRAdaptor/Volume.cpp                |  411 +-
 Bundles/LeafVisu/vtkCompositeMesh/CMakeLists.txt   |   18 +-
 Bundles/LeafVisu/vtkCompositeMesh/COPYING          |  675 ---
 Bundles/LeafVisu/vtkCompositeMesh/COPYING.LESSER   |  166 -
 Bundles/LeafVisu/vtkCompositeMesh/Properties.cmake |    2 +-
 .../LeafVisu/vtkCompositeMesh/bin/build.options    |   16 -
 .../include/vtkCompositeMesh/Namespace.hpp         |   10 +-
 .../include/vtkCompositeMesh/Plugin.hpp            |   32 +-
 .../include/vtkCompositeMesh/RendererService.hpp   |  137 +-
 .../include/vtkCompositeMesh/config.hpp            |   40 -
 Bundles/LeafVisu/vtkCompositeMesh/rc/plugin.xml    |    2 +-
 .../src/vtkCompositeMesh/Plugin.cpp                |   11 +-
 .../src/vtkCompositeMesh/RendererService.cpp       |  142 +-
 Bundles/LeafVisu/vtkSimpleMesh/CMakeLists.txt      |   41 +-
 Bundles/LeafVisu/vtkSimpleMesh/COPYING             |  675 ---
 Bundles/LeafVisu/vtkSimpleMesh/COPYING.LESSER      |  166 -
 Bundles/LeafVisu/vtkSimpleMesh/Properties.cmake    |   14 +-
 Bundles/LeafVisu/vtkSimpleMesh/bin/build.options   |   16 -
 .../include/vtkSimpleMesh/Namespace.hpp            |   13 +-
 .../vtkSimpleMesh/include/vtkSimpleMesh/Plugin.hpp |   32 +-
 .../include/vtkSimpleMesh/RendererService.hpp      |  163 -
 .../include/vtkSimpleMesh/SRenderer.hpp            |  184 +
 .../vtkSimpleMesh/SSimpleMeshDeformation.hpp       |   42 +-
 .../vtkSimpleMesh/include/vtkSimpleMesh/config.hpp |   40 -
 Bundles/LeafVisu/vtkSimpleMesh/rc/plugin.xml       |    4 +-
 .../vtkSimpleMesh/src/vtkSimpleMesh/Plugin.cpp     |   11 +-
 .../src/vtkSimpleMesh/RendererService.cpp          |  298 --
 .../vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp  |  306 ++
 .../src/vtkSimpleMesh/SSimpleMeshDeformation.cpp   |  242 +-
 Bundles/LeafVisu/vtkSimpleNegato/CMakeLists.txt    |   16 +-
 Bundles/LeafVisu/vtkSimpleNegato/COPYING           |  675 ---
 Bundles/LeafVisu/vtkSimpleNegato/COPYING.LESSER    |  166 -
 Bundles/LeafVisu/vtkSimpleNegato/Properties.cmake  |    2 +-
 Bundles/LeafVisu/vtkSimpleNegato/bin/build.options |   16 -
 .../include/vtkSimpleNegato/Namespace.hpp          |   11 +-
 .../include/vtkSimpleNegato/Plugin.hpp             |   32 +-
 .../include/vtkSimpleNegato/RendererService.hpp    |  136 -
 .../include/vtkSimpleNegato/SRenderer.hpp          |  132 +
 .../include/vtkSimpleNegato/config.hpp             |   40 -
 Bundles/LeafVisu/vtkSimpleNegato/rc/plugin.xml     |    4 +-
 .../vtkSimpleNegato/src/vtkSimpleNegato/Plugin.cpp |   11 +-
 .../src/vtkSimpleNegato/RendererService.cpp        |  244 -
 .../src/vtkSimpleNegato/SRenderer.cpp              |  247 +
 Bundles/core/activities/CMakeLists.txt             |   28 +-
 Bundles/core/activities/Properties.cmake           |   15 +-
 Bundles/core/activities/bin/build.options          |   11 -
 .../core/activities/include/activities/Plugin.hpp  |   14 +-
 .../include/activities/SSeriesSignal.hpp           |  124 +
 .../activities/action/SActivityLauncher.hpp        |  191 +-
 .../include/activities/action/SCreateActivity.hpp  |  140 +
 .../core/activities/include/activities/config.hpp  |   33 -
 .../include/activities/editor/SCreateActivity.hpp  |  137 +
 .../include/activities/helper/Activity.hpp         |   37 -
 .../activities/include/activities/namespace.hpp    |   24 +
 Bundles/core/activities/rc/activities.xsd          |   17 +-
 Bundles/core/activities/rc/plugin.xml              |   14 +-
 Bundles/core/activities/src/activities/Plugin.cpp  |    6 +
 .../activities/src/activities/SSeriesSignal.cpp    |  128 +
 .../src/activities/action/SActivityLauncher.cpp    |  334 +-
 .../src/activities/action/SCreateActivity.cpp      |  269 +
 .../src/activities/editor/SCreateActivity.cpp      |  274 +
 .../activities/src/activities/helper/Activity.cpp  |  154 -
 Bundles/core/appXml/CMakeLists.txt                 |    7 -
 Bundles/core/appXml/COPYING                        |  675 ---
 Bundles/core/appXml/COPYING.LESSER                 |  166 -
 Bundles/core/appXml/Properties.cmake               |    7 +-
 Bundles/core/appXml/bin/build.options              |    5 -
 Bundles/core/appXml/include/appXml/Namespace.hpp   |   10 +-
 Bundles/core/appXml/include/appXml/Plugin.hpp      |    9 +-
 Bundles/core/appXml/include/appXml/config.hpp      |   39 -
 Bundles/core/appXml/rc/plugin.xml                  |    2 +-
 Bundles/core/appXml/src/appXml/Plugin.cpp          |   34 +-
 .../core/appXml2}/CMakeLists.txt                   |    0
 Bundles/core/appXml2/Properties.cmake              |   12 +
 Bundles/core/appXml2/include/appXml2/Namespace.hpp |   17 +
 Bundles/core/appXml2/include/appXml2/Plugin.hpp    |   48 +
 Bundles/core/appXml2/rc/plugin.xml                 |    7 +
 Bundles/core/appXml2/src/appXml2/Plugin.cpp        |   83 +
 Bundles/core/binding/CMakeLists.txt                |    4 -
 Bundles/core/binding/COPYING                       |  675 ---
 Bundles/core/binding/COPYING.LESSER                |  166 -
 Bundles/core/binding/Properties.cmake              |    7 -
 Bundles/core/binding/bin/build.options             |    6 -
 Bundles/core/binding/include/binding/Plugin.hpp    |   43 -
 Bundles/core/binding/include/binding/config.hpp    |   41 -
 Bundles/core/binding/include/binding/namespace.hpp |   17 -
 Bundles/core/binding/rc/plugin.xml                 |    5 -
 Bundles/core/binding/src/binding/Plugin.cpp        |   60 -
 Bundles/core/dataReg/CMakeLists.txt                |   11 +-
 Bundles/core/dataReg/COPYING                       |  675 ---
 Bundles/core/dataReg/COPYING.LESSER                |  166 -
 Bundles/core/dataReg/Properties.cmake              |    8 +-
 Bundles/core/dataReg/bin/build.options             |    4 -
 Bundles/core/dataReg/include/dataReg/Namespace.hpp |    8 +-
 Bundles/core/dataReg/include/dataReg/Plugin.hpp    |    8 +-
 Bundles/core/dataReg/include/dataReg/config.hpp    |   39 -
 .../dataReg/include/dataReg/parser/Composite.hpp   |   79 +
 .../include/dataReg/parser/GenericField.hpp        |   99 +
 .../core/dataReg/include/dataReg/parser/List.hpp   |   79 +
 .../core/dataReg/include/dataReg/parser/Object.hpp |   55 +
 .../include/dataReg/parser/TransferFunction.hpp    |   77 +
 .../dataReg/parser/TransformationMatrix3D.hpp      |   60 +
 Bundles/core/dataReg/rc/plugin.xml                 |    2 +-
 Bundles/core/dataReg/src/dataReg/Plugin.cpp        |    8 +-
 .../core/dataReg/src/dataReg/parser/Composite.cpp  |  168 +
 .../dataReg/src/dataReg/parser/GenericField.cpp    |   61 +
 Bundles/core/dataReg/src/dataReg/parser/List.cpp   |  158 +
 Bundles/core/dataReg/src/dataReg/parser/Object.cpp |  178 +
 .../src/dataReg/parser/TransferFunction.cpp        |   68 +
 .../src/dataReg/parser/TransformationMatrix3D.cpp  |   56 +
 Bundles/core/gui/CMakeLists.txt                    |   16 +-
 Bundles/core/gui/COPYING                           |  675 ---
 Bundles/core/gui/COPYING.LESSER                    |  166 -
 Bundles/core/gui/Properties.cmake                  |   13 +-
 Bundles/core/gui/bin/build.options                 |   15 -
 Bundles/core/gui/include/gui/Namespace.hpp         |   55 +-
 Bundles/core/gui/include/gui/Plugin.hpp            |   16 +-
 .../gui/include/gui/action/ActionNotifyService.hpp |   81 -
 .../gui/include/gui/action/ConfigActionSrv.hpp     |  176 -
 .../include/gui/action/ConfigActionSrvWithKey.hpp  |  128 -
 .../include/gui/action/ModifyLayoutActionSrv.hpp   |  121 -
 Bundles/core/gui/include/gui/action/Namespace.hpp  |   26 -
 .../gui/include/gui/action/NothingActionSrv.hpp    |   82 -
 .../core/gui/include/gui/action/PushObjectSrv.hpp  |   92 -
 Bundles/core/gui/include/gui/action/QuitAction.hpp |   76 -
 .../gui/include/gui/action/SBooleanSlotCaller.hpp  |   66 +
 .../gui/include/gui/action/SConfigLauncher.hpp     |   66 +-
 Bundles/core/gui/include/gui/action/SDoNothing.hpp |   75 +
 .../core/gui/include/gui/action/SModifyLayout.hpp  |  127 +
 Bundles/core/gui/include/gui/action/SPushField.hpp |   89 +
 .../core/gui/include/gui/action/SPushObject.hpp    |  112 +
 Bundles/core/gui/include/gui/action/SQuit.hpp      |   70 +
 Bundles/core/gui/include/gui/action/SSignal.hpp    |   49 +-
 .../core/gui/include/gui/action/SSlotCaller.hpp    |   71 +-
 Bundles/core/gui/include/gui/action/SStarter.hpp   |  141 +
 .../include/gui/action/StarterActionService.hpp    |  144 -
 .../gui/include/gui/aspect/DefaultMenuBarSrv.hpp   |   98 -
 .../core/gui/include/gui/aspect/DefaultMenuSrv.hpp |   99 -
 .../gui/include/gui/aspect/DefaultToolBarSrv.hpp   |  127 -
 Bundles/core/gui/include/gui/aspect/Namespace.hpp  |   26 -
 .../core/gui/include/gui/aspect/SDefaultMenu.hpp   |   95 +
 .../gui/include/gui/aspect/SDefaultMenuBar.hpp     |   95 +
 .../gui/include/gui/aspect/SDefaultToolBar.hpp     |  122 +
 .../core/gui/include/gui/editor/IDialogEditor.hpp  |   31 +-
 Bundles/core/gui/include/gui/editor/IEditor.hpp    |   30 +-
 Bundles/core/gui/include/gui/editor/Namespace.hpp  |   26 -
 Bundles/core/gui/include/gui/editor/SJobBar.hpp    |  104 +
 Bundles/core/gui/include/gui/export.hpp            |   41 -
 .../core/gui/include/gui/frame/DefaultFrame.hpp    |   84 -
 Bundles/core/gui/include/gui/frame/Namespace.hpp   |   26 -
 .../core/gui/include/gui/frame/SDefaultFrame.hpp   |   79 +
 Bundles/core/gui/include/gui/view/DefaultView.hpp  |   88 -
 Bundles/core/gui/include/gui/view/IView.hpp        |   25 +-
 Bundles/core/gui/include/gui/view/Namespace.hpp    |   26 -
 Bundles/core/gui/include/gui/view/SDefaultView.hpp |   79 +
 Bundles/core/gui/rc/plugin.xml                     |   48 +-
 Bundles/core/gui/src/gui/Plugin.cpp                |   11 +-
 .../gui/src/gui/action/ActionNotifyService.cpp     |  114 -
 .../core/gui/src/gui/action/ConfigActionSrv.cpp    |  203 -
 .../gui/src/gui/action/ConfigActionSrvWithKey.cpp  |  238 -
 .../gui/src/gui/action/ModifyLayoutActionSrv.cpp   |  199 -
 .../core/gui/src/gui/action/NothingActionSrv.cpp   |   78 -
 Bundles/core/gui/src/gui/action/PushObjectSrv.cpp  |  186 -
 Bundles/core/gui/src/gui/action/QuitAction.cpp     |   84 -
 .../core/gui/src/gui/action/SBooleanSlotCaller.cpp |   72 +
 .../core/gui/src/gui/action/SConfigLauncher.cpp    |  150 +-
 Bundles/core/gui/src/gui/action/SDoNothing.cpp     |   71 +
 Bundles/core/gui/src/gui/action/SModifyLayout.cpp  |  229 +
 Bundles/core/gui/src/gui/action/SPushField.cpp     |  124 +
 Bundles/core/gui/src/gui/action/SPushObject.cpp    |  237 +
 Bundles/core/gui/src/gui/action/SQuit.cpp          |   79 +
 Bundles/core/gui/src/gui/action/SSignal.cpp        |   51 +-
 Bundles/core/gui/src/gui/action/SSlotCaller.cpp    |   50 +-
 Bundles/core/gui/src/gui/action/SStarter.cpp       |  231 +
 .../gui/src/gui/action/StarterActionService.cpp    |  221 -
 .../core/gui/src/gui/aspect/DefaultMenuBarSrv.cpp  |   81 -
 Bundles/core/gui/src/gui/aspect/DefaultMenuSrv.cpp |   76 -
 .../core/gui/src/gui/aspect/DefaultToolBarSrv.cpp  |   75 -
 Bundles/core/gui/src/gui/aspect/SDefaultMenu.cpp   |   69 +
 .../core/gui/src/gui/aspect/SDefaultMenuBar.cpp    |   72 +
 .../core/gui/src/gui/aspect/SDefaultToolBar.cpp    |   72 +
 Bundles/core/gui/src/gui/editor/IDialogEditor.cpp  |   11 +-
 Bundles/core/gui/src/gui/editor/IEditor.cpp        |   11 +-
 Bundles/core/gui/src/gui/editor/SJobBar.cpp        |  128 +
 Bundles/core/gui/src/gui/frame/DefaultFrame.cpp    |   80 -
 Bundles/core/gui/src/gui/frame/SDefaultFrame.cpp   |   75 +
 Bundles/core/gui/src/gui/view/DefaultView.cpp      |   79 -
 Bundles/core/gui/src/gui/view/IView.cpp            |    8 +-
 Bundles/core/gui/src/gui/view/SDefaultView.cpp     |   75 +
 Bundles/core/io/CMakeLists.txt                     |    9 -
 Bundles/core/io/COPYING                            |  675 ---
 Bundles/core/io/COPYING.LESSER                     |  166 -
 Bundles/core/io/Properties.cmake                   |    3 +-
 Bundles/core/io/bin/build.options                  |    5 -
 Bundles/core/io/include/io/IReader.hpp             |   49 +-
 Bundles/core/io/include/io/IWriter.hpp             |   42 +-
 Bundles/core/io/include/io/Namespace.hpp           |   10 +-
 Bundles/core/io/include/io/Plugin.hpp              |    8 +-
 Bundles/core/io/include/io/config.hpp              |   40 -
 Bundles/core/io/include/io/ioTypes.hpp             |   35 +-
 Bundles/core/io/rc/locale/en/LC_MESSAGES/io.po     |  102 -
 .../core/io/rc/locale/fr/LC_MESSAGES/io-Final.po   |  126 -
 Bundles/core/io/rc/locale/fr/LC_MESSAGES/io.po     |   73 -
 Bundles/core/io/rc/plugin.xml                      |    2 +-
 Bundles/core/io/src/io/IReader.cpp                 |   86 +-
 Bundles/core/io/src/io/IWriter.cpp                 |   48 +-
 Bundles/core/io/src/io/Plugin.cpp                  |   11 +-
 Bundles/core/io/src/io/ioTypes.cpp                 |   14 +
 Bundles/core/memory/CMakeLists.txt                 |   10 -
 Bundles/core/memory/COPYING                        |  675 ---
 Bundles/core/memory/COPYING.LESSER                 |  166 -
 Bundles/core/memory/Properties.cmake               |   10 +-
 Bundles/core/memory/bin/build.options              |   11 -
 Bundles/core/memory/include/memory/Namespace.hpp   |   10 +-
 Bundles/core/memory/include/memory/Plugin.hpp      |    8 +-
 Bundles/core/memory/include/memory/SDumpPolicy.hpp |   17 +-
 Bundles/core/memory/include/memory/config.hpp      |   40 -
 Bundles/core/memory/rc/plugin.xml                  |    2 +-
 Bundles/core/memory/src/memory/Plugin.cpp          |    5 +-
 Bundles/core/memory/src/memory/SDumpPolicy.cpp     |   27 +-
 Bundles/core/preferences/CMakeLists.txt            |    2 +
 Bundles/core/preferences/Properties.cmake          |   18 +
 .../include/preferences/IPreferencesService.hpp    |   42 +
 .../preferences/include/preferences/Plugin.hpp     |   41 +
 .../include/preferences/SPreferences.hpp           |   63 +
 Bundles/core/preferences/rc/plugin.xml             |   11 +
 .../core/preferences/src/preferences/Plugin.cpp    |  102 +
 .../preferences/src/preferences/SPreferences.cpp   |  125 +
 Bundles/core/servicesReg/CMakeLists.txt            |   12 +-
 Bundles/core/servicesReg/COPYING                   |  675 ---
 Bundles/core/servicesReg/COPYING.LESSER            |  166 -
 Bundles/core/servicesReg/Properties.cmake          |    5 +-
 Bundles/core/servicesReg/bin/build.options         |    8 -
 .../servicesReg/include/servicesReg/Namespace.hpp  |   12 +-
 .../servicesReg/include/servicesReg/Plugin.hpp     |   15 +-
 .../servicesReg/include/servicesReg/config.hpp     |   39 -
 Bundles/core/servicesReg/rc/appConfig.xsd          |   24 +-
 Bundles/core/servicesReg/rc/appConfig2.xsd         |  147 +
 Bundles/core/servicesReg/rc/plugin.xml             |   25 +-
 .../core/servicesReg/src/servicesReg/Plugin.cpp    |   29 +-
 Bundles/core/visu/CMakeLists.txt                   |    9 -
 Bundles/core/visu/COPYING                          |  675 ---
 Bundles/core/visu/COPYING.LESSER                   |  166 -
 Bundles/core/visu/Properties.cmake                 |    7 -
 Bundles/core/visu/bin/build.options                |    7 -
 Bundles/core/visu/include/visu/Namespace.hpp       |   21 -
 Bundles/core/visu/include/visu/Plugin.hpp          |   36 -
 Bundles/core/visu/include/visu/config.hpp          |   40 -
 Bundles/core/visu/rc/chest.xml                     |   46 -
 .../visu/rc/locale/en/LC_MESSAGES/visualization.po |   59 -
 .../locale/fr/LC_MESSAGES/visualization-Final.po   |   46 -
 .../visu/rc/locale/fr/LC_MESSAGES/visualization.po |   59 -
 .../rc/locale/fr/LC_MESSAGES/visualization.pot     |   29 -
 Bundles/core/visu/rc/plugin.xml                    |   10 -
 Bundles/core/visu/rc/visuCfg.xsd                   |   25 -
 Bundles/core/visu/src/visu/Plugin.cpp              |   25 -
 Bundles/media/CMakeLists.txt                       |    2 +-
 Bundles/media/bin/build.options                    |    3 -
 Bundles/media/rc/icons/Apply.svg                   |  115 +
 Bundles/media/rc/icons/Composite.svg               |  142 +
 Bundles/media/rc/icons/CreateActivity.svg          |  695 +++
 Bundles/media/rc/icons/Custom.svg                  |  107 +
 Bundles/media/rc/icons/DicomSeries.svg             |  115 +
 Bundles/media/rc/icons/LoadActivity.svg            |  272 +
 Bundles/media/rc/icons/Minus.svg                   |  109 +
 Bundles/media/rc/icons/Modifier.svg                |  131 +
 Bundles/media/rc/icons/Plus.svg                    |  107 +
 Bundles/media/rc/icons/Preview.svg                 |  147 +
 Bundles/media/rc/icons/Pull.svg                    |  122 +
 Bundles/media/rc/icons/Push.svg                    |  122 +
 Bundles/media/rc/icons/Settings.svg                |  130 +
 Bundles/media/rc/icons/Sorter.svg                  |  246 +
 Bundles/media/rc/icons/Split.svg                   |  150 +
 Bundles/media/rc/icons/Splitter.svg                |  241 +
 Bundles/media/rc/icons/icon-Anonymization.svg      |  118 +
 Bundles/media/rc/icons/icon-DICOM-Filtering.svg    |  107 +
 Bundles/media/rc/icons/sending.svg                 |  217 +
 .../uiImageQt/rc => media/rc/icons}/sliceHide.png  |  Bin
 .../uiImageQt/rc => media/rc/icons}/sliceShow.png  |  Bin
 Bundles/media/rc/plugin.xml                        |    2 +-
 CHANGELOG.txt                                      |   99 +-
 CMake/Modules/FindCAMP.cmake                       |   48 -
 CMake/Modules/FindCppUnit.cmake                    |   46 -
 CMake/Modules/FindHDF5.cmake                       |   62 -
 CMake/Modules/FindIconv.cmake                      |   10 -
 CMake/Modules/fw-ITK.cmake                         |   33 -
 CMake/Modules/fw-Qt4.cmake                         |    5 -
 CMake/Modules/fw-VTK.cmake                         |    2 -
 CMake/Modules/fw-VXL.cmake                         |    1 -
 CMake/Modules/fw-boost.cmake                       |   33 -
 CMake/Modules/fw-python.cmake                      |    4 -
 CMake/Wix/WIX.template.in                          |   80 -
 .../build/Bundle/CMakeLists.txt.in                 |    0
 CMake/build/Bundle/Properties.cmake.in             |   11 +
 CMake/build/Bundle/include/Plugin.hpp.in           |   31 +
 CMake/build/Bundle/include/namespace.hpp.in        |   12 +
 CMake/build/Bundle/rc/plugin.xml.in                |    8 +
 CMake/build/Bundle/src/Plugin.cpp.in               |   29 +
 CMake/build/Service/include/newService.hpp.in      |   54 +
 CMake/build/Service/rc/extensionService.txt        |    8 +
 CMake/build/Service/src/newService.cpp.in          |   47 +
 CMake/build/argsBundle.cmake                       |    2 +
 CMake/build/argsService.cmake                      |   11 +
 CMake/build/cmake_newBundle.cmake                  |   64 +
 CMake/build/cmake_newService.cmake                 |   84 +
 CMake/build/config.hpp.in                          |   29 +
 CMake/build/plugin.xml.in                          |    5 +
 CMake/build/plugin_config.cmake                    |   81 +
 CMake/build/profile.xml.in                         |    6 +
 CMake/build/profile_config.cmake                   |   93 +
 CMake/build/project.vcxproj.user.in                |   10 +
 CMake/cppunit/cppunit_main.cpp                     |   61 +-
 CMake/doxygen/Doxyfile.in                          | 1507 +-----
 CMake/doxygen/MainPage.dox                         |    7 -
 CMake/doxygen/doxygen_generator.cmake              |   30 +
 CMake/eclipse/.cproject.in                         |  104 +
 CMake/eclipse/.project.in                          |   84 +
 CMake/eclipse/eclipse_generator.cmake              |   63 +
 CMake/install/generic_install.cmake                |   29 +
 CMake/install/helper.cmake                         |   30 +
 CMake/install/linux/linux_fixup.cmake.in           |   40 +
 CMake/install/linux/template.sh.in                 |   48 +
 CMake/install/linux_install.cmake                  |   66 +
 CMake/install/osx_install.cmake                    |   95 +
 CMake/install/win_install.cmake                    |   86 +
 .../windows/NSIS/NSIS.InstallOptions.ini.in        |   46 +
 CMake/install/windows/NSIS/NSIS.template.in        | 1160 +++++
 .../install/windows/NSIS/rc/app.ico                |  Bin
 CMake/install/windows/NSIS/rc/banner_nsis.bmp      |  Bin 0 -> 25818 bytes
 CMake/install/windows/NSIS/rc/dialog_nsis.bmp      |  Bin 0 -> 154542 bytes
 CMake/install/windows/NSIS/rc/license.rtf          |  154 +
 CMake/install/windows/Wix/WIX.template.in          |   80 +
 CMake/install/windows/windows_fixup.cmake.in       |   30 +
 CMake/modules/FindCAMP.cmake                       |   48 +
 CMake/modules/FindCppUnit.cmake                    |   46 +
 CMake/modules/FindCryptoPP.cmake                   |   65 +
 CMake/modules/FindGLM.cmake                        |   63 +
 CMake/modules/FindIconv.cmake                      |   10 +
 CMake/modules/FindTetgen.cmake                     |   48 +
 CMake/modules/fw-Qt5.cmake                         |    3 +
 CMake/modules/fw-boost.cmake                       |    7 +
 CMakeLists.txt                                     |  669 ++-
 {Apps/Tuto01Basic => LICENSE}/COPYING              |    0
 {Apps/Tuto01Basic => LICENSE}/COPYING.LESSER       |    0
 README.md                                          |   39 +
 .../Examples/Ex01VolumeRendering}/CMakeLists.txt   |    0
 .../Examples/Ex01VolumeRendering/Properties.cmake  |   32 +
 Samples/Examples/Ex01VolumeRendering/rc/plugin.xml |  480 ++
 .../Examples/Ex01VolumeRendering}/rc/tuto.ico      |  Bin
 .../Examples/Ex02ImageMix}/CMakeLists.txt          |    0
 Samples/Examples/Ex02ImageMix/Properties.cmake     |   26 +
 Samples/Examples/Ex02ImageMix/rc/plugin.xml        |  376 ++
 .../Examples/Ex02ImageMix}/rc/tuto.ico             |  Bin
 .../Examples/Ex03Registration}/CMakeLists.txt      |    0
 Samples/Examples/Ex03Registration/Properties.cmake |   33 +
 .../Ex03Registration/rc/icons/Add-landmark.png     |  Bin 0 -> 1577 bytes
 .../Ex03Registration/rc/icons/Fusion-tmp.png       |  Bin 0 -> 2595 bytes
 .../Ex03Registration/rc/icons/View-landmark.png    |  Bin 0 -> 2538 bytes
 .../Ex03Registration/rc/icons/distance.png         |  Bin 0 -> 3352 bytes
 .../Ex03Registration/rc/icons/icon-load1.png       |  Bin 0 -> 2008 bytes
 .../Ex03Registration/rc/icons/icon-load2.png       |  Bin 0 -> 2076 bytes
 .../Ex03Registration}/rc/icons/unreadable.png      |  Bin
 Samples/Examples/Ex03Registration/rc/plugin.xml    |  382 ++
 .../Ex04ImagesRegistration}/CMakeLists.txt         |    0
 .../Ex04ImagesRegistration/Properties.cmake        |   28 +
 .../Ex04ImagesRegistration/rc/icons/icon-load1.png |  Bin 0 -> 2008 bytes
 .../Ex04ImagesRegistration/rc/icons/icon-load2.png |  Bin 0 -> 2076 bytes
 .../Ex04ImagesRegistration/rc/icons/save.png       |  Bin 0 -> 1187 bytes
 .../rc/icons/unreadable.png                        |  Bin
 .../Examples/Ex04ImagesRegistration/rc/plugin.xml  |  410 ++
 Samples/Tutorials/Tuto01Basic/CMakeLists.txt       |    3 +
 Samples/Tutorials/Tuto01Basic/Properties.cmake     |   15 +
 Samples/Tutorials/Tuto01Basic/rc/plugin.xml        |   30 +
 .../Tutorials/Tuto01Basic}/rc/tuto.ico             |  Bin
 .../Tuto02DataServiceBasic}/CMakeLists.txt         |    0
 .../Tuto02DataServiceBasic/Properties.cmake        |   20 +
 .../Tutorials/Tuto02DataServiceBasic/rc/plugin.xml |   74 +
 .../Tutorials/Tuto02DataServiceBasic}/rc/tuto.ico  |  Bin
 .../Tuto02DataServiceBasicCtrl/CMakeLists.txt      |   11 +
 .../Tuto02DataServiceBasicCtrl/Properties.cmake    |   24 +
 .../include/Tuto02DataServiceBasicCtrl/Plugin.hpp  |   55 +
 .../Tuto02DataServiceBasicCtrl/rc/plugin.xml       |    9 +
 .../Tuto02DataServiceBasicCtrl}/rc/tuto.ico        |  Bin
 .../src/Tuto02DataServiceBasicCtrl/Plugin.cpp      |  104 +
 .../Tutorials/Tuto03DataService}/CMakeLists.txt    |    0
 .../Tutorials/Tuto03DataService/Properties.cmake   |   21 +
 Samples/Tutorials/Tuto03DataService/rc/plugin.xml  |  127 +
 .../Tutorials/Tuto03DataService}/rc/tuto.ico       |  Bin
 .../Tutorials/Tuto04SignalSlot}/CMakeLists.txt     |    0
 .../Tutorials/Tuto04SignalSlot/Properties.cmake    |   21 +
 Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml   |  131 +
 .../Tutorials/Tuto04SignalSlot}/rc/tuto.ico        |  Bin
 .../Tutorials/Tuto05Mesher}/CMakeLists.txt         |    0
 Samples/Tutorials/Tuto05Mesher/Properties.cmake    |   23 +
 Samples/Tutorials/Tuto05Mesher/rc/plugin.xml       |  180 +
 .../Tutorials/Tuto05Mesher}/rc/tuto.ico            |  Bin
 .../Tutorials/Tuto06Filter}/CMakeLists.txt         |    0
 Samples/Tutorials/Tuto06Filter/Properties.cmake    |   22 +
 Samples/Tutorials/Tuto06Filter/rc/plugin.xml       |  130 +
 .../Tutorials}/Tuto06Filter/rc/tuto.ico            |  Bin
 .../Tutorials/Tuto08GenericScene}/CMakeLists.txt   |    0
 .../Tutorials/Tuto08GenericScene/Properties.cmake  |   25 +
 Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml |  290 ++
 .../Tutorials/Tuto08GenericScene}/rc/tuto.ico      |  Bin
 .../Tuto09MesherWithGenericScene}/CMakeLists.txt   |    0
 .../Tuto09MesherWithGenericScene/Properties.cmake  |   26 +
 .../Tuto09MesherWithGenericScene/rc/plugin.xml     |  294 ++
 .../Tuto09MesherWithGenericScene}/rc/tuto.ico      |  Bin
 .../Tuto10MatrixTransformInGS}/CMakeLists.txt      |    0
 .../Tuto10MatrixTransformInGS/Properties.cmake     |   23 +
 .../Tuto10MatrixTransformInGS/rc/cube.trian        |    0
 .../Tuto10MatrixTransformInGS/rc/plugin.xml        |  246 +
 .../Tuto10MatrixTransformInGS}/rc/tuto.ico         |  Bin
 .../Tuto11LaunchBasicConfig}/CMakeLists.txt        |    0
 .../Tuto11LaunchBasicConfig/Properties.cmake       |   22 +
 .../rc/BasicFrameConfig.xml                        |   45 +
 .../Tuto11LaunchBasicConfig/rc/plugin.xml          |   90 +
 .../Tutorials/Tuto11LaunchBasicConfig}/rc/tuto.ico |  Bin
 .../Tutorials/Tuto12Picker}/CMakeLists.txt         |    0
 Samples/Tutorials/Tuto12Picker/Properties.cmake    |   26 +
 Samples/Tutorials/Tuto12Picker/rc/plugin.xml       |  202 +
 .../Tutorials/Tuto12Picker}/rc/tuto.ico            |  Bin
 .../Tutorials/Tuto13Scene2D}/CMakeLists.txt        |    0
 Samples/Tutorials/Tuto13Scene2D/Properties.cmake   |   18 +
 Samples/Tutorials/Tuto13Scene2D/rc/plugin.xml      |   78 +
 .../Tutorials/Tuto13Scene2D}/rc/tuto.ico           |  Bin
 .../Tutorials/Tuto14MeshGenerator}/CMakeLists.txt  |    0
 .../Tutorials/Tuto14MeshGenerator/Properties.cmake |   25 +
 .../Tutorials/Tuto14MeshGenerator/rc/plugin.xml    |  229 +
 .../Tutorials/Tuto14MeshGenerator}/rc/tuto.ico     |  Bin
 .../Tutorials/Tuto15Multithread}/CMakeLists.txt    |    0
 .../Tutorials/Tuto15Multithread/Properties.cmake   |   22 +
 .../Tuto15Multithread/rc/configurations/config.xml |  135 +
 Samples/Tutorials/Tuto15Multithread/rc/plugin.xml  |   10 +
 .../Tutorials/Tuto15Multithread}/rc/tuto.ico       |  Bin
 .../Tutorials/Tuto15MultithreadCtrl/CMakeLists.txt |    8 +
 .../Tuto15MultithreadCtrl/Properties.cmake         |   20 +
 .../include/Tuto15MultithreadCtrl/Namespace.hpp    |   18 +
 .../include/Tuto15MultithreadCtrl/Plugin.hpp       |   45 +
 .../Tuto15MultithreadCtrl/SIncrementArray.hpp      |   68 +
 .../include/Tuto15MultithreadCtrl/SReadArray.hpp   |   48 +
 .../include/Tuto15MultithreadCtrl/SShowArray.hpp   |   50 +
 .../Tutorials/Tuto15MultithreadCtrl/rc/plugin.xml  |   26 +
 .../src/Tuto15MultithreadCtrl/Plugin.cpp           |  160 +
 .../src/Tuto15MultithreadCtrl/SIncrementArray.cpp  |  102 +
 .../src/Tuto15MultithreadCtrl/SReadArray.cpp       |   70 +
 .../src/Tuto15MultithreadCtrl/SShowArray.cpp       |   59 +
 .../Tutorials/TutoGui}/CMakeLists.txt              |    0
 Samples/Tutorials/TutoGui/Properties.cmake         |   16 +
 .../Tutorials}/TutoGui/rc/icons/important.png      |  Bin
 .../Tutorials}/TutoGui/rc/icons/monkey.png         |  Bin
 Samples/Tutorials/TutoGui/rc/icons/pause.svg       |  259 +
 Samples/Tutorials/TutoGui/rc/icons/start.svg       |  251 +
 Samples/Tutorials/TutoGui/rc/icons/stop.svg        |  248 +
 .../Tutorials}/TutoGui/rc/icons/system.png         |  Bin
 .../Tutorials}/TutoGui/rc/icons/unreadable.png     |  Bin
 Samples/Tutorials/TutoGui/rc/plugin.xml            |  285 ++
 .../Tutorials/TutoGui}/rc/tuto.ico                 |  Bin
 .../TutoTrianConverterCtrl/CMakeLists.txt          |    5 +
 .../TutoTrianConverterCtrl/Properties.cmake        |   19 +
 .../include/TutoTrianConverterCtrl/Namespace.hpp   |   17 +
 .../include/TutoTrianConverterCtrl/Plugin.hpp      |   50 +
 .../Tutorials/TutoTrianConverterCtrl/rc/plugin.xml |    8 +
 .../src/TutoTrianConverterCtrl/Plugin.cpp          |  135 +
 .../Tutorials/TutoVectorField}/CMakeLists.txt      |    0
 Samples/Tutorials/TutoVectorField/Properties.cmake |   26 +
 Samples/Tutorials/TutoVectorField/rc/plugin.xml    |  188 +
 SrcLib/ARLcore/CMakeLists.txt                      |   48 -
 SrcLib/ARLcore/CMakeLists.txt.old                  |   60 -
 SrcLib/ARLcore/Properties.cmake                    |    7 -
 SrcLib/ARLcore/bin/build.options                   |    4 -
 SrcLib/ARLcore/include/arlcore/Calibration.h       |  191 -
 SrcLib/ARLcore/include/arlcore/Camera.h            |  281 --
 SrcLib/ARLcore/include/arlcore/CameraList.h        |   67 -
 SrcLib/ARLcore/include/arlcore/Colour.h            |   66 -
 SrcLib/ARLcore/include/arlcore/Command.h           |   53 -
 SrcLib/ARLcore/include/arlcore/Common.h            |   79 -
 SrcLib/ARLcore/include/arlcore/FieldCorrection.h   |   90 -
 SrcLib/ARLcore/include/arlcore/File.h              |  148 -
 SrcLib/ARLcore/include/arlcore/ICP.h               |  126 -
 SrcLib/ARLcore/include/arlcore/MatrixR.h           |  390 --
 SrcLib/ARLcore/include/arlcore/Mesh.h              |  129 -
 SrcLib/ARLcore/include/arlcore/Misc.h              |  389 --
 SrcLib/ARLcore/include/arlcore/Object.h            |  223 -
 SrcLib/ARLcore/include/arlcore/Optimization.h      | 1088 ----
 SrcLib/ARLcore/include/arlcore/Parameters.h        |  154 -
 SrcLib/ARLcore/include/arlcore/Particle.h          |   60 -
 SrcLib/ARLcore/include/arlcore/PlaneSystem.h       |  316 --
 SrcLib/ARLcore/include/arlcore/Player.h            |   68 -
 SrcLib/ARLcore/include/arlcore/Point.h             |  364 --
 SrcLib/ARLcore/include/arlcore/PointsList.h        |  343 --
 SrcLib/ARLcore/include/arlcore/Reconst3D.h         |  256 -
 SrcLib/ARLcore/include/arlcore/Recorder.h          |   69 -
 SrcLib/ARLcore/include/arlcore/Scene.h             |  137 -
 SrcLib/ARLcore/include/arlcore/Scenes.h            |  191 -
 SrcLib/ARLcore/include/arlcore/SmartPointsList.h   |  221 -
 SrcLib/ARLcore/include/arlcore/Tag.h               |  117 -
 SrcLib/ARLcore/include/arlcore/Tags.h              |   70 -
 SrcLib/ARLcore/include/arlcore/Tracker.h           |   35 -
 SrcLib/ARLcore/include/arlcore/Type.h              |  129 -
 SrcLib/ARLcore/include/arlcore/UncertaintyPropag.h |   68 -
 SrcLib/ARLcore/include/arlcore/UnitTestArlCore.h   |   93 -
 .../include/arlcore/vnl_covariance_matrix.h        |   49 -
 SrcLib/ARLcore/include/arlcore/vnl_rigid_vector.h  |   73 -
 .../include/arlcore/vnl_rotation3d_matrix.h        |   78 -
 .../include/arlcore/vnl_rotation3d_vector.h        |   78 -
 SrcLib/ARLcore/src/arlcore/Calibration.cpp         |  625 ---
 SrcLib/ARLcore/src/arlcore/Camera.cpp              | 1137 -----
 SrcLib/ARLcore/src/arlcore/CameraList.cpp          |   75 -
 SrcLib/ARLcore/src/arlcore/Colour.cpp              |   91 -
 SrcLib/ARLcore/src/arlcore/Command.cpp             |   52 -
 SrcLib/ARLcore/src/arlcore/FieldCorrection.cpp     |  172 -
 SrcLib/ARLcore/src/arlcore/File.cpp                |  195 -
 SrcLib/ARLcore/src/arlcore/ICP.cpp                 |  533 --
 SrcLib/ARLcore/src/arlcore/MatrixR.cpp             | 1889 -------
 SrcLib/ARLcore/src/arlcore/Mesh.cpp                |  754 ---
 SrcLib/ARLcore/src/arlcore/Misc.cpp                | 1383 ------
 SrcLib/ARLcore/src/arlcore/Object.cpp              |  383 --
 SrcLib/ARLcore/src/arlcore/Optimization.cpp        | 2069 --------
 SrcLib/ARLcore/src/arlcore/Parameters.cpp          |  261 -
 SrcLib/ARLcore/src/arlcore/Particle.cpp            |   54 -
 SrcLib/ARLcore/src/arlcore/PlaneSystem.cpp         |  786 ---
 SrcLib/ARLcore/src/arlcore/Player.cpp              |   83 -
 SrcLib/ARLcore/src/arlcore/Point.cpp               | 1082 ----
 SrcLib/ARLcore/src/arlcore/PointsList.cpp          | 1477 ------
 SrcLib/ARLcore/src/arlcore/Reconst3D.cpp           | 1194 -----
 SrcLib/ARLcore/src/arlcore/Recorder.cpp            |   62 -
 SrcLib/ARLcore/src/arlcore/Scene.cpp               |  282 --
 SrcLib/ARLcore/src/arlcore/Scenes.cpp              |  512 --
 SrcLib/ARLcore/src/arlcore/SmartPointsList.cpp     |  526 --
 SrcLib/ARLcore/src/arlcore/Tag.cpp                 |  167 -
 SrcLib/ARLcore/src/arlcore/Tags.cpp                |  162 -
 SrcLib/ARLcore/src/arlcore/Tracker.cpp             |   21 -
 SrcLib/ARLcore/src/arlcore/UncertaintyPropag.cpp   |  643 ---
 SrcLib/ARLcore/src/arlcore/UnitTestArlCore.cpp     | 1948 --------
 .../ARLcore/src/arlcore/vnl_covariance_matrix.cpp  |   60 -
 SrcLib/ARLcore/src/arlcore/vnl_rigid_vector.cpp    |  108 -
 .../ARLcore/src/arlcore/vnl_rotation3d_matrix.cpp  |  267 -
 .../ARLcore/src/arlcore/vnl_rotation3d_vector.cpp  |  163 -
 SrcLib/ARLcore/test/CMakeLists.txt                 |   10 -
 SrcLib/ARLcore/test/Properties.cmake               |    7 -
 SrcLib/ARLcore/test/cppunit.options                |   10 -
 SrcLib/ARLcore/test/tu/include/CalibrationTest.hpp |   42 -
 SrcLib/ARLcore/test/tu/include/GeometryTest.hpp    |   44 -
 .../ARLcore/test/tu/include/RegistrationTest.hpp   |   47 -
 SrcLib/ARLcore/test/tu/src/CalibrationTest.cpp     |   67 -
 SrcLib/ARLcore/test/tu/src/GeometryTest.cpp        |   64 -
 SrcLib/ARLcore/test/tu/src/RegistrationTest.cpp    |   77 -
 SrcLib/core/fwActivities/CMakeLists.txt            |   14 +-
 SrcLib/core/fwActivities/COPYING                   |  675 ---
 SrcLib/core/fwActivities/COPYING.LESSER            |  166 -
 SrcLib/core/fwActivities/Properties.cmake          |    3 +-
 SrcLib/core/fwActivities/bin/build.options         |   11 -
 .../include/fwActivities/IActivityValidator.hpp    |   84 +
 .../fwActivities/include/fwActivities/IBuilder.hpp |   12 +-
 .../include/fwActivities/IObjectValidator.hpp      |   60 +
 .../include/fwActivities/IValidator.hpp            |   21 +-
 .../fwActivities/builder/ActivitySeries.hpp        |   12 +-
 .../builder/ActivitySeriesInitData.hpp             |    6 +-
 .../include/fwActivities/builder/factory/new.hpp   |   13 +-
 .../fwActivities/builder/registry/detail.hpp       |    4 +-
 .../fwActivities/builder/registry/macros.hpp       |    8 +-
 .../fwActivities/include/fwActivities/config.hpp   |   41 -
 .../include/fwActivities/namespace.hpp             |  167 +-
 .../include/fwActivities/registry/Activities.hpp   |  117 +-
 .../include/fwActivities/registry/ActivityMsg.hpp  |  114 +
 .../fwActivities/validator/DefaultActivity.hpp     |   48 +
 .../fwActivities/validator/ImageProperties.hpp     |   25 +-
 .../fwActivities/validator/RelatedStudy.hpp        |    6 +-
 .../include/fwActivities/validator/factory/new.hpp |   16 +-
 .../fwActivities/validator/registry/detail.hpp     |    4 +-
 .../fwActivities/validator/registry/macros.hpp     |    8 +-
 .../src/fwActivities/IActivityValidator.cpp        |  275 +
 .../fwActivities/src/fwActivities/IBuilder.cpp     |    6 +-
 .../src/fwActivities/builder/ActivitySeries.cpp    |   49 +-
 .../builder/ActivitySeriesInitData.cpp             |   18 +-
 .../src/fwActivities/builder/factory/new.cpp       |    2 +-
 .../src/fwActivities/builder/registry/detail.cpp   |    4 +-
 .../src/fwActivities/registry/Activities.cpp       |  113 +-
 .../src/fwActivities/registry/ActivityMsg.cpp      |  122 +
 .../src/fwActivities/validator/DefaultActivity.cpp |   57 +
 .../src/fwActivities/validator/ImageProperties.cpp |  147 +-
 .../src/fwActivities/validator/RelatedStudy.cpp    |   30 +-
 .../src/fwActivities/validator/factory/new.cpp     |    2 +-
 .../src/fwActivities/validator/registry/detail.cpp |    4 +-
 SrcLib/core/fwActivities/test/CMakeLists.txt       |    5 +-
 SrcLib/core/fwActivities/test/Properties.cmake     |    4 +-
 SrcLib/core/fwActivities/test/cppunit.options      |    9 -
 .../include/builder/ActivitySeriesBuilderTest.hpp  |    8 +-
 .../tu/include/registry/ActivityRegistryTest.hpp   |   19 +-
 .../tu/include/validator/DefaultActivityTest.hpp   |   55 +
 .../tu/include/validator/ImagePropertiesTest.hpp   |   39 +
 .../fwActivities/test/tu/rc/tu_builder/plugin.xml  |    2 +-
 .../fwActivities/test/tu/rc/tu_registry/plugin.xml |    2 +-
 .../test/tu/rc/tu_validator/plugin.xml             |   99 +
 .../tu/src/builder/ActivitySeriesBuilderTest.cpp   |   17 +-
 .../test/tu/src/registry/ActivityRegistryTest.cpp  |   53 +-
 .../test/tu/src/validator/DefaultActivityTest.cpp  |  501 ++
 .../test/tu/src/validator/ImagePropertiesTest.cpp  |  116 +
 SrcLib/core/fwAtomConversion/CMakeLists.txt        |   13 -
 SrcLib/core/fwAtomConversion/bin/build.options     |    4 -
 .../fwAtomConversion/AtomToDataMappingVisitor.hpp  |   16 +-
 .../include/fwAtomConversion/AtomVisitor.hpp       |   19 +-
 .../include/fwAtomConversion/DataVisitor.hpp       |    8 +-
 .../include/fwAtomConversion/camp/ValueMapper.hpp  |   10 +-
 .../include/fwAtomConversion/config.hpp            |   41 -
 .../include/fwAtomConversion/convert.hpp           |  126 +-
 .../exception/ClassnameMismatch.hpp                |    6 +-
 .../exception/ConversionNotManaged.hpp             |    6 +-
 .../exception/DataFactoryNotFound.hpp              |    6 +-
 .../exception/DuplicatedDataUUID.hpp               |    6 +-
 .../fwAtomConversion/exception/NullPointer.hpp     |    3 +-
 .../fwAtomConversion/exception/ObjectNotFound.hpp  |    3 +-
 .../include/fwAtomConversion/mapper/Base.hpp       |   16 +-
 .../include/fwAtomConversion/mapper/Graph.hpp      |    6 +-
 .../fwAtomConversion/mapper/factory/new.hpp        |    7 +-
 .../fwAtomConversion/mapper/registry/detail.hpp    |    4 +-
 .../fwAtomConversion/mapper/registry/macros.hpp    |    8 +-
 .../include/fwAtomConversion/namespace.hpp         |    2 +-
 .../fwAtomConversion/AtomToDataMappingVisitor.cpp  |  329 +-
 .../src/fwAtomConversion/AtomVisitor.cpp           |   56 +-
 .../src/fwAtomConversion/DataVisitor.cpp           |   33 +-
 .../src/fwAtomConversion/convert.cpp               |    2 +-
 .../src/fwAtomConversion/exception/NullPointer.cpp |    4 +-
 .../fwAtomConversion/exception/ObjectNotFound.cpp  |    4 +-
 .../src/fwAtomConversion/mapper/Graph.cpp          |   26 +-
 .../src/fwAtomConversion/mapper/factory/new.cpp    |    2 +-
 .../fwAtomConversion/mapper/registry/detail.cpp    |    4 +-
 SrcLib/core/fwAtomConversion/test/CMakeLists.txt   |    5 +-
 SrcLib/core/fwAtomConversion/test/Properties.cmake |    2 +-
 SrcLib/core/fwAtomConversion/test/cppunit.options  |   12 -
 .../test/tu/include/ConversionTest.hpp             |   40 +-
 .../test/tu/src/ConversionTest.cpp                 |  371 +-
 SrcLib/core/fwAtoms/CMakeLists.txt                 |   11 -
 SrcLib/core/fwAtoms/COPYING                        |  675 ---
 SrcLib/core/fwAtoms/COPYING.LESSER                 |  166 -
 SrcLib/core/fwAtoms/bin/build.options              |    5 -
 SrcLib/core/fwAtoms/include/fwAtoms/Base.hpp       |   61 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Blob.hpp       |   21 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Boolean.hpp    |   26 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Exception.hpp  |    8 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Map.hpp        |   79 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hpp    |   36 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hxx    |   70 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Object.hpp     |   29 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Object.hxx     |    4 +-
 SrcLib/core/fwAtoms/include/fwAtoms/Sequence.hpp   |   76 +-
 SrcLib/core/fwAtoms/include/fwAtoms/String.hpp     |   36 +-
 SrcLib/core/fwAtoms/include/fwAtoms/config.hpp     |   41 -
 .../fwAtoms/include/fwAtoms/factory/namespace.hpp  |    2 +-
 .../core/fwAtoms/include/fwAtoms/factory/new.hpp   |   13 +-
 SrcLib/core/fwAtoms/include/fwAtoms/namespace.hpp  |    8 +-
 .../fwAtoms/include/fwAtoms/registry/detail.hpp    |    4 +-
 .../fwAtoms/include/fwAtoms/registry/macros.hpp    |   10 +-
 .../fwAtoms/include/fwAtoms/registry/namespace.hpp |    2 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Base.cpp           |    2 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Blob.cpp           |    2 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Boolean.cpp        |    2 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Exception.cpp      |   10 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Map.cpp            |    8 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Numeric.cpp        |    4 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Object.cpp         |   12 +-
 SrcLib/core/fwAtoms/src/fwAtoms/Sequence.cpp       |   12 +-
 SrcLib/core/fwAtoms/src/fwAtoms/String.cpp         |    2 +-
 SrcLib/core/fwAtoms/src/fwAtoms/factory/new.cpp    |    2 +-
 .../core/fwAtoms/src/fwAtoms/registry/detail.cpp   |    4 +-
 SrcLib/core/fwAtoms/test/CMakeLists.txt            |    5 +-
 SrcLib/core/fwAtoms/test/Properties.cmake          |    2 +-
 SrcLib/core/fwAtoms/test/cppunit.options           |   10 -
 SrcLib/core/fwAtoms/test/tu/include/AtomTest.hpp   |   14 +-
 .../core/fwAtoms/test/tu/include/BooleanTest.hpp   |    8 +-
 .../core/fwAtoms/test/tu/include/NumericTest.hpp   |   20 +-
 SrcLib/core/fwAtoms/test/tu/include/StringTest.hpp |    8 +-
 SrcLib/core/fwAtoms/test/tu/src/AtomTest.cpp       |   20 +-
 SrcLib/core/fwAtoms/test/tu/src/BooleanTest.cpp    |   11 +-
 SrcLib/core/fwAtoms/test/tu/src/NumericTest.cpp    |   26 +-
 SrcLib/core/fwAtoms/test/tu/src/StringTest.cpp     |   11 +-
 SrcLib/core/fwAtomsFilter/CMakeLists.txt           |   11 -
 SrcLib/core/fwAtomsFilter/Properties.cmake         |    4 +-
 SrcLib/core/fwAtomsFilter/bin/build.options        |   10 -
 .../include/fwAtomsFilter/IFilter.hpp              |    6 +-
 .../fwAtomsFilter/include/fwAtomsFilter/config.hpp |   40 -
 .../include/fwAtomsFilter/factory/new.hpp          |   15 +-
 .../include/fwAtomsFilter/functions.hpp            |   12 +-
 .../include/fwAtomsFilter/namespace.hpp            |    8 +-
 .../include/fwAtomsFilter/registry/detail.hpp      |    4 +-
 .../include/fwAtomsFilter/registry/macros.hpp      |   10 +-
 .../fwAtomsFilter/src/fwAtomsFilter/IFilter.cpp    |    2 +-
 .../src/fwAtomsFilter/factory/new.cpp              |    2 +-
 .../fwAtomsFilter/src/fwAtomsFilter/functions.cpp  |   18 +-
 .../src/fwAtomsFilter/registry/detail.cpp          |    4 +-
 SrcLib/core/fwAtomsPatch/CMakeLists.txt            |   29 +-
 SrcLib/core/fwAtomsPatch/COPYING                   |  675 ---
 SrcLib/core/fwAtomsPatch/COPYING.LESSER            |  166 -
 SrcLib/core/fwAtomsPatch/Properties.cmake          |    2 +-
 SrcLib/core/fwAtomsPatch/bin/build.options         |    9 -
 .../fwAtomsPatch/include/fwAtomsPatch/IPatch.hpp   |    6 +-
 .../include/fwAtomsPatch/ISemanticPatch.hpp        |   27 +-
 .../include/fwAtomsPatch/IStructuralCreator.hpp    |    2 +-
 .../include/fwAtomsPatch/IStructuralPatch.hpp      |    2 +-
 .../include/fwAtomsPatch/LinkDescriptor.hpp        |   39 +-
 .../include/fwAtomsPatch/PatchingManager.hpp       |    6 +-
 .../include/fwAtomsPatch/SemanticPatchDB.hpp       |   46 +-
 .../include/fwAtomsPatch/StructuralCreatorDB.hpp   |   31 +-
 .../include/fwAtomsPatch/StructuralPatchDB.hpp     |   33 +-
 .../include/fwAtomsPatch/VersionDescriptor.hpp     |   20 +-
 .../include/fwAtomsPatch/VersionsGraph.hpp         |    8 +-
 .../include/fwAtomsPatch/VersionsManager.hpp       |   18 +-
 .../include/fwAtomsPatch/conditions/Abstract.hpp   |   12 +-
 .../fwAtomsPatch/conditions/NumericOverflow.hpp    |    6 +-
 .../fwAtomsPatch/include/fwAtomsPatch/config.hpp   |   40 -
 .../fwAtomsPatch/exceptions/BadExtension.hpp       |    8 +-
 .../include/fwAtomsPatch/exceptions/Base.hpp       |    8 +-
 .../exceptions/ImpossibleConversion.hpp            |    8 +-
 .../fwAtomsPatch/exceptions/MissingInformation.hpp |    8 +-
 .../fwAtomsPatch/exceptions/UnknownVersion.hpp     |    8 +-
 .../include/fwAtomsPatch/helper/Object.hpp         |   20 +-
 .../include/fwAtomsPatch/helper/functions.hpp      |   38 +-
 .../include/fwAtomsPatch/infos/Logger.hpp          |    7 +-
 .../include/fwAtomsPatch/infos/log.hpp             |   18 +-
 .../include/fwAtomsPatch/namespace.hpp             |  104 +-
 .../fwAtomsPatch/patcher/DefaultPatcher.hpp        |   16 +-
 .../include/fwAtomsPatch/patcher/IPatcher.hpp      |   10 +-
 .../fwAtomsPatch/patcher/factory/namespace.hpp     |   10 +-
 .../include/fwAtomsPatch/patcher/factory/new.hpp   |   21 +-
 .../fwAtomsPatch/patcher/registry/detail.hpp       |   10 +-
 .../fwAtomsPatch/patcher/registry/macros.hpp       |   10 +-
 .../fwAtomsPatch/patcher/registry/namespace.hpp    |   10 +-
 .../fwAtomsPatch/include/fwAtomsPatch/types.hpp    |   14 +-
 .../core/fwAtomsPatch/src/fwAtomsPatch/IPatch.cpp  |    6 +-
 .../src/fwAtomsPatch/ISemanticPatch.cpp            |   22 +-
 .../src/fwAtomsPatch/IStructuralCreator.cpp        |    6 +-
 .../src/fwAtomsPatch/IStructuralPatch.cpp          |   26 +-
 .../src/fwAtomsPatch/LinkDescriptor.cpp            |    8 +-
 .../src/fwAtomsPatch/PatchingManager.cpp           |   43 +-
 .../src/fwAtomsPatch/SemanticPatchDB.cpp           |   24 +-
 .../src/fwAtomsPatch/StructuralCreatorDB.cpp       |    7 +-
 .../src/fwAtomsPatch/StructuralPatchDB.cpp         |   15 +-
 .../src/fwAtomsPatch/VersionDescriptor.cpp         |    8 +-
 .../src/fwAtomsPatch/VersionsGraph.cpp             |   43 +-
 .../src/fwAtomsPatch/VersionsManager.cpp           |   55 +-
 .../src/fwAtomsPatch/conditions/Abstract.cpp       |    6 +-
 .../fwAtomsPatch/conditions/NumericOverflow.cpp    |    6 +-
 .../src/fwAtomsPatch/exceptions/BadExtension.cpp   |    2 +-
 .../src/fwAtomsPatch/exceptions/Base.cpp           |    2 +-
 .../exceptions/ImpossibleConversion.cpp            |    2 +-
 .../fwAtomsPatch/exceptions/MissingInformation.cpp |    2 +-
 .../src/fwAtomsPatch/exceptions/UnknownVersion.cpp |    2 +-
 .../src/fwAtomsPatch/helper/Object.cpp             |   48 +-
 .../src/fwAtomsPatch/helper/functions.cpp          |  116 +-
 .../fwAtomsPatch/src/fwAtomsPatch/infos/Logger.cpp |  139 +-
 .../src/fwAtomsPatch/patcher/DefaultPatcher.cpp    |  154 +-
 .../src/fwAtomsPatch/patcher/IPatcher.cpp          |    2 +-
 .../src/fwAtomsPatch/patcher/factory/new.cpp       |    2 +-
 .../src/fwAtomsPatch/patcher/registry/detail.cpp   |    4 +-
 SrcLib/core/fwCamp/CMakeLists.txt                  |   13 +-
 SrcLib/core/fwCamp/bin/build.options               |    7 -
 .../fwCamp/include/fwCamp/Mapper/ArrayMapper.hpp   |    6 +-
 .../fwCamp/include/fwCamp/Mapper/ValueMapper.hpp   |   68 +-
 SrcLib/core/fwCamp/include/fwCamp/UserObject.hpp   |    5 +-
 .../include/fwCamp/camp/ExtendedClassVisitor.hpp   |   40 +-
 .../core/fwCamp/include/fwCamp/camp/MapMapper.hpp  |   48 +-
 .../fwCamp/include/fwCamp/camp/MapProperty.hpp     |    2 +-
 .../fwCamp/include/fwCamp/camp/MapValueMapper.hpp  |    2 +-
 .../core/fwCamp/include/fwCamp/camp/customtype.hpp |    8 +-
 .../include/fwCamp/camp/detail/MapPropertyImpl.hpp |    8 +-
 .../include/fwCamp/camp/detail/MapPropertyImpl.hxx |   16 +-
 SrcLib/core/fwCamp/include/fwCamp/camp/traits.hpp  |    8 +-
 SrcLib/core/fwCamp/include/fwCamp/config.hpp       |   40 -
 .../fwCamp/include/fwCamp/factory/namespace.hpp    |    4 +-
 SrcLib/core/fwCamp/include/fwCamp/factory/new.hpp  |    5 +-
 SrcLib/core/fwCamp/include/fwCamp/macros.hpp       |  133 +-
 SrcLib/core/fwCamp/include/fwCamp/namespace.hpp    |    9 +-
 .../core/fwCamp/include/fwCamp/registry/detail.hpp |   12 +-
 .../fwCamp/include/fwCamp/registry/namespace.hpp   |    4 +-
 SrcLib/core/fwCamp/src/fwCamp/camp/MapProperty.cpp |   11 +-
 SrcLib/core/fwCamp/src/fwCamp/factory/new.cpp      |    2 +-
 SrcLib/core/fwCamp/src/fwCamp/registry/detail.cpp  |    4 +-
 SrcLib/core/fwCom/CMakeLists.txt                   |   10 -
 SrcLib/core/fwCom/COPYING                          |  675 ---
 SrcLib/core/fwCom/COPYING.LESSER                   |  166 -
 SrcLib/core/fwCom/Properties.cmake                 |    2 +-
 SrcLib/core/fwCom/bin/build.options                |   10 -
 SrcLib/core/fwCom/include/fwCom/Connection.hpp     |   42 +-
 SrcLib/core/fwCom/include/fwCom/HasSignals.hpp     |   31 +-
 SrcLib/core/fwCom/include/fwCom/HasSlots.hpp       |   22 +-
 SrcLib/core/fwCom/include/fwCom/Signal.hpp         |  666 +--
 SrcLib/core/fwCom/include/fwCom/Signal.hpp.vrdc    |  138 -
 SrcLib/core/fwCom/include/fwCom/Signal.hxx         | 1434 +-----
 SrcLib/core/fwCom/include/fwCom/Signal.hxx.vrdc    |  222 -
 SrcLib/core/fwCom/include/fwCom/SignalBase.hpp     |   63 +-
 SrcLib/core/fwCom/include/fwCom/Signals.hpp        |    9 +-
 SrcLib/core/fwCom/include/fwCom/Slot.hpp           |  554 +--
 SrcLib/core/fwCom/include/fwCom/Slot.hpp.vrdc      |  105 -
 SrcLib/core/fwCom/include/fwCom/Slot.hxx           |  673 +--
 SrcLib/core/fwCom/include/fwCom/Slot.hxx.vrdc      |  112 -
 SrcLib/core/fwCom/include/fwCom/SlotBase.hpp       |  202 +-
 SrcLib/core/fwCom/include/fwCom/SlotBase.hpp.vrdc  |  233 -
 SrcLib/core/fwCom/include/fwCom/SlotBase.hxx       |   42 +-
 SrcLib/core/fwCom/include/fwCom/SlotBase.hxx.vrdc  |  265 -
 SrcLib/core/fwCom/include/fwCom/SlotCall.hpp       |  389 +-
 SrcLib/core/fwCom/include/fwCom/SlotCall.hpp.vrdc  |   85 -
 SrcLib/core/fwCom/include/fwCom/SlotCall.hxx       |  627 +--
 SrcLib/core/fwCom/include/fwCom/SlotCall.hxx.vrdc  |  115 -
 SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp |  674 +--
 .../fwCom/include/fwCom/SlotConnection.hpp.vrdc    |  128 -
 SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx | 1586 +-----
 .../fwCom/include/fwCom/SlotConnection.hxx.vrdc    |  217 -
 .../fwCom/include/fwCom/SlotConnectionBase.hpp     |   50 +-
 SrcLib/core/fwCom/include/fwCom/SlotRun.hpp        |  376 +-
 SrcLib/core/fwCom/include/fwCom/SlotRun.hpp.vrdc   |   88 -
 SrcLib/core/fwCom/include/fwCom/SlotRun.hxx        |  532 +-
 SrcLib/core/fwCom/include/fwCom/SlotRun.hxx.vrdc   |  106 -
 SrcLib/core/fwCom/include/fwCom/Slots.hpp          |  109 +-
 SrcLib/core/fwCom/include/fwCom/Slots.hpp.vrdc     |   86 -
 SrcLib/core/fwCom/include/fwCom/Slots.hxx          |  162 +-
 SrcLib/core/fwCom/include/fwCom/Slots.hxx.vrdc     |   42 -
 SrcLib/core/fwCom/include/fwCom/config.hpp         |   41 -
 .../include/fwCom/exception/AlreadyConnected.hpp   |    4 +-
 .../core/fwCom/include/fwCom/exception/BadCall.hpp |    4 +-
 .../core/fwCom/include/fwCom/exception/BadRun.hpp  |    4 +-
 .../core/fwCom/include/fwCom/exception/BadSlot.hpp |    4 +-
 .../fwCom/include/fwCom/exception/NoWorker.hpp     |   10 +-
 .../include/fwCom/exception/WorkerChanged.hpp      |   32 +
 .../include/fwCom/helper/SigSlotConnection.hpp     |   68 +
 SrcLib/core/fwCom/include/fwCom/namespace.hpp      |   17 +-
 SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp  |  295 +-
 .../fwCom/include/fwCom/util/AutoBind.hpp.vrdc     |  168 -
 SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx  |  815 +--
 .../fwCom/include/fwCom/util/AutoBind.hxx.vrdc     |  120 -
 SrcLib/core/fwCom/include/fwCom/util/WeakCall.hpp  |   91 +-
 .../include/fwCom/util/convert_function_type.hpp   |   96 +-
 .../fwCom/util/convert_function_type.hpp.vrdc      |   58 -
 SrcLib/core/fwCom/include/fwCom/util/log.hpp       |   38 -
 .../fwCom/include/fwCom/util/remove_last_arg.hpp   |   46 +-
 SrcLib/core/fwCom/scripts/test/unpacked.cpp        | 2123 --------
 SrcLib/core/fwCom/scripts/test/variadic.cpp        |  848 ----
 SrcLib/core/fwCom/scripts/variadic_parser.py       |  452 --
 SrcLib/core/fwCom/src/fwCom/SignalBase.cpp         |    7 +-
 SrcLib/core/fwCom/src/fwCom/Signals.cpp            |   37 +-
 SrcLib/core/fwCom/src/fwCom/SlotBase.cpp           |   13 +-
 SrcLib/core/fwCom/src/fwCom/Slots.cpp              |   47 +-
 .../fwCom/src/fwCom/exception/AlreadyConnected.cpp |    5 +-
 SrcLib/core/fwCom/src/fwCom/exception/BadCall.cpp  |    5 +-
 SrcLib/core/fwCom/src/fwCom/exception/BadRun.cpp   |    5 +-
 SrcLib/core/fwCom/src/fwCom/exception/BadSlot.cpp  |    5 +-
 SrcLib/core/fwCom/src/fwCom/exception/NoWorker.cpp |    5 +-
 .../fwCom/src/fwCom/exception/WorkerChanged.cpp    |   26 +
 .../fwCom/src/fwCom/helper/SigSlotConnection.cpp   |  125 +
 SrcLib/core/fwCom/test/CMakeLists.txt              |   12 +-
 SrcLib/core/fwCom/test/cppunit.options             |   21 -
 SrcLib/core/fwCom/test/tu/include/SignalTest.hpp   |   26 +-
 SrcLib/core/fwCom/test/tu/include/SignalsTest.hpp  |    5 +-
 SrcLib/core/fwCom/test/tu/include/SlotTest.hpp     |   20 +-
 SrcLib/core/fwCom/test/tu/include/SlotsTest.hpp    |   12 +-
 SrcLib/core/fwCom/test/tu/include/UtilTest.hpp     |   12 +-
 SrcLib/core/fwCom/test/tu/src/SignalTest.cpp       |   80 +-
 SrcLib/core/fwCom/test/tu/src/SignalsTest.cpp      |   83 +-
 SrcLib/core/fwCom/test/tu/src/SlotTest.cpp         |  134 +-
 SrcLib/core/fwCom/test/tu/src/SlotsTest.cpp        |   75 +-
 SrcLib/core/fwCom/test/tu/src/UtilTest.cpp         |   18 +-
 SrcLib/core/fwComEd/CMakeLists.txt                 |   20 -
 SrcLib/core/fwComEd/COPYING                        |  675 ---
 SrcLib/core/fwComEd/COPYING.LESSER                 |  166 -
 SrcLib/core/fwComEd/Properties.cmake               |    7 -
 SrcLib/core/fwComEd/bin/build.options              |   13 -
 SrcLib/core/fwComEd/include/fwComEd/BooleanMsg.hpp |   54 -
 SrcLib/core/fwComEd/include/fwComEd/CameraMsg.hpp  |  125 -
 SrcLib/core/fwComEd/include/fwComEd/ColorMsg.hpp   |   53 -
 .../core/fwComEd/include/fwComEd/CompositeMsg.hpp  |  108 -
 SrcLib/core/fwComEd/include/fwComEd/Dictionary.hpp |   64 -
 .../fwComEd/include/fwComEd/DictionaryOrganMsg.hpp |   55 -
 SrcLib/core/fwComEd/include/fwComEd/FloatMsg.hpp   |   52 -
 SrcLib/core/fwComEd/include/fwComEd/GraphMsg.hpp   |  111 -
 .../core/fwComEd/include/fwComEd/HistogramMsg.hpp  |   52 -
 SrcLib/core/fwComEd/include/fwComEd/ImageMsg.hpp   |  123 -
 SrcLib/core/fwComEd/include/fwComEd/IntegerMsg.hpp |   52 -
 .../fwComEd/include/fwComEd/InteractionMsg.hpp     |  138 -
 .../core/fwComEd/include/fwComEd/LocationMsg.hpp   |   52 -
 .../core/fwComEd/include/fwComEd/MaterialMsg.hpp   |   54 -
 SrcLib/core/fwComEd/include/fwComEd/MeshMsg.hpp    |   54 -
 SrcLib/core/fwComEd/include/fwComEd/ModelMsg.hpp   |   51 -
 .../fwComEd/include/fwComEd/ModelSeriesMsg.hpp     |   59 -
 SrcLib/core/fwComEd/include/fwComEd/Namespace.hpp  |   20 -
 .../core/fwComEd/include/fwComEd/PlaneListMsg.hpp  |   61 -
 SrcLib/core/fwComEd/include/fwComEd/PlaneMsg.hpp   |   62 -
 .../core/fwComEd/include/fwComEd/PointListMsg.hpp  |   59 -
 SrcLib/core/fwComEd/include/fwComEd/PointMsg.hpp   |   59 -
 .../fwComEd/include/fwComEd/ReconstructionMsg.hpp  |   56 -
 .../fwComEd/include/fwComEd/ResectionDBMsg.hpp     |   65 -
 .../core/fwComEd/include/fwComEd/ResectionMsg.hpp  |   58 -
 .../core/fwComEd/include/fwComEd/SeriesDBMsg.hpp   |   89 -
 SrcLib/core/fwComEd/include/fwComEd/SplineMsg.hpp  |   52 -
 SrcLib/core/fwComEd/include/fwComEd/StringMsg.hpp  |   50 -
 SrcLib/core/fwComEd/include/fwComEd/TagMsg.hpp     |   52 -
 .../include/fwComEd/TransferFunctionMsg.hpp        |   86 -
 .../include/fwComEd/TransformationMatrix3DMsg.hpp  |   53 -
 .../fwComEd/include/fwComEd/TriangularMeshMsg.hpp  |   51 -
 SrcLib/core/fwComEd/include/fwComEd/VectorMsg.hpp  |   87 -
 SrcLib/core/fwComEd/include/fwComEd/VideoMsg.hpp   |   59 -
 SrcLib/core/fwComEd/include/fwComEd/export.hpp     |   41 -
 .../fwComEd/fieldHelper/MedicalImageHelpers.hpp    |  399 --
 .../include/fwComEd/fieldHelper/Namespace.hpp      |   24 -
 .../core/fwComEd/include/fwComEd/helper/Array.hpp  |  183 -
 .../fwComEd/include/fwComEd/helper/Composite.hpp   |   85 -
 .../core/fwComEd/include/fwComEd/helper/Field.hpp  |  100 -
 .../core/fwComEd/include/fwComEd/helper/Image.hpp  |  109 -
 .../fwComEd/include/fwComEd/helper/ImageGetter.hpp |   43 -
 .../fwComEd/include/fwComEd/helper/ImageGetter.hxx |   31 -
 .../include/fwComEd/helper/MedicalImageAdaptor.hpp |  345 --
 .../core/fwComEd/include/fwComEd/helper/Mesh.hpp   |  229 -
 .../fwComEd/include/fwComEd/helper/MsgHelper.hpp   |   51 -
 .../fwComEd/include/fwComEd/helper/Namespace.hpp   |   24 -
 .../fwComEd/include/fwComEd/helper/SeriesDB.hpp    |   82 -
 .../core/fwComEd/include/fwComEd/helper/Vector.hpp |   76 -
 .../fwComEd/include/fwComEd/parser/Composite.hpp   |   79 -
 .../include/fwComEd/parser/GenericField.hpp        |   78 -
 .../core/fwComEd/include/fwComEd/parser/List.hpp   |   80 -
 .../core/fwComEd/include/fwComEd/parser/Object.hpp |   53 -
 .../fwComEd/parser/TransformationMatrix3D.hpp      |   61 -
 SrcLib/core/fwComEd/src/fwComEd/BooleanMsg.cpp     |   34 -
 SrcLib/core/fwComEd/src/fwComEd/CameraMsg.cpp      |  103 -
 SrcLib/core/fwComEd/src/fwComEd/ColorMsg.cpp       |   33 -
 SrcLib/core/fwComEd/src/fwComEd/CompositeMsg.cpp   |  115 -
 SrcLib/core/fwComEd/src/fwComEd/Dictionary.cpp     |   38 -
 .../fwComEd/src/fwComEd/DictionaryOrganMsg.cpp     |   36 -
 SrcLib/core/fwComEd/src/fwComEd/FloatMsg.cpp       |   33 -
 SrcLib/core/fwComEd/src/fwComEd/GraphMsg.cpp       |  151 -
 SrcLib/core/fwComEd/src/fwComEd/HistorgramMsg.cpp  |   33 -
 SrcLib/core/fwComEd/src/fwComEd/ImageMsg.cpp       |   70 -
 SrcLib/core/fwComEd/src/fwComEd/IntegerMsg.cpp     |   33 -
 SrcLib/core/fwComEd/src/fwComEd/InteractionMsg.cpp |  103 -
 SrcLib/core/fwComEd/src/fwComEd/LocationMsg.cpp    |   33 -
 SrcLib/core/fwComEd/src/fwComEd/MaterialMsg.cpp    |   32 -
 SrcLib/core/fwComEd/src/fwComEd/MeshMsg.cpp        |   39 -
 SrcLib/core/fwComEd/src/fwComEd/ModelMsg.cpp       |   33 -
 SrcLib/core/fwComEd/src/fwComEd/ModelSeriesMsg.cpp |   39 -
 SrcLib/core/fwComEd/src/fwComEd/PlaneListMsg.cpp   |   37 -
 SrcLib/core/fwComEd/src/fwComEd/PlaneMsg.cpp       |   38 -
 SrcLib/core/fwComEd/src/fwComEd/PointListMsg.cpp   |   35 -
 SrcLib/core/fwComEd/src/fwComEd/PointMsg.cpp       |   35 -
 .../core/fwComEd/src/fwComEd/ReconstructionMsg.cpp |   32 -
 SrcLib/core/fwComEd/src/fwComEd/ResectionDBMsg.cpp |   40 -
 SrcLib/core/fwComEd/src/fwComEd/ResectionMsg.cpp   |   37 -
 SrcLib/core/fwComEd/src/fwComEd/SeriesDBMsg.cpp    |   81 -
 SrcLib/core/fwComEd/src/fwComEd/SplineMsg.cpp      |   33 -
 SrcLib/core/fwComEd/src/fwComEd/StringMsg.cpp      |   33 -
 SrcLib/core/fwComEd/src/fwComEd/TagMsg.cpp         |   33 -
 .../fwComEd/src/fwComEd/TransferFunctionMsg.cpp    |   59 -
 .../src/fwComEd/TransformationMatrix3DMsg.cpp      |   33 -
 .../core/fwComEd/src/fwComEd/TriangularMeshMsg.cpp |   34 -
 SrcLib/core/fwComEd/src/fwComEd/VectorMsg.cpp      |   85 -
 SrcLib/core/fwComEd/src/fwComEd/VideoMsg.cpp       |   34 -
 .../fwComEd/fieldHelper/MedicalImageHelpers.cpp    |  203 -
 SrcLib/core/fwComEd/src/fwComEd/helper/Array.cpp   |  185 -
 .../core/fwComEd/src/fwComEd/helper/Composite.cpp  |  117 -
 SrcLib/core/fwComEd/src/fwComEd/helper/Field.cpp   |  168 -
 SrcLib/core/fwComEd/src/fwComEd/helper/Image.cpp   |  237 -
 .../src/fwComEd/helper/MedicalImageAdaptor.cpp     |  520 --
 SrcLib/core/fwComEd/src/fwComEd/helper/Mesh.cpp    |  359 --
 .../core/fwComEd/src/fwComEd/helper/MsgHelper.cpp  |   59 -
 .../core/fwComEd/src/fwComEd/helper/SeriesDB.cpp   |  103 -
 SrcLib/core/fwComEd/src/fwComEd/helper/Vector.cpp  |   92 -
 .../core/fwComEd/src/fwComEd/parser/Composite.cpp  |  151 -
 .../fwComEd/src/fwComEd/parser/GenericField.cpp    |   62 -
 SrcLib/core/fwComEd/src/fwComEd/parser/List.cpp    |  146 -
 SrcLib/core/fwComEd/src/fwComEd/parser/Object.cpp  |  159 -
 .../src/fwComEd/parser/TransformationMatrix3D.cpp  |   59 -
 SrcLib/core/fwComEd/test/CMakeLists.txt            |   10 -
 SrcLib/core/fwComEd/test/Properties.cmake          |    7 -
 SrcLib/core/fwComEd/test/cppunit.options           |   22 -
 .../test/tu/include/CompositeMessageTest.hpp       |   53 -
 .../fwComEd/test/tu/include/ConfigParserTest.hpp   |  173 -
 .../fwComEd/test/tu/include/FieldHelperTest.hpp    |   49 -
 .../core/fwComEd/test/tu/include/MessagesTest.hpp  |   49 -
 .../fwComEd/test/tu/include/SeriesDBMsgTest.hpp    |   64 -
 .../core/fwComEd/test/tu/include/VectorMsgTest.hpp |   62 -
 .../fwComEd/test/tu/src/CompositeMessageTest.cpp   |  225 -
 .../core/fwComEd/test/tu/src/ConfigParserTest.cpp  |  238 -
 .../core/fwComEd/test/tu/src/FieldHelperTest.cpp   |   99 -
 SrcLib/core/fwComEd/test/tu/src/MessagesTest.cpp   |   93 -
 .../core/fwComEd/test/tu/src/SeriesDBMsgTest.cpp   |  202 -
 SrcLib/core/fwComEd/test/tu/src/VectorMsgTest.cpp  |  174 -
 SrcLib/core/fwCommand/CMakeLists.txt               |   15 +-
 SrcLib/core/fwCommand/COPYING                      |  675 ---
 SrcLib/core/fwCommand/COPYING.LESSER               |  166 -
 SrcLib/core/fwCommand/Properties.cmake             |    9 +-
 SrcLib/core/fwCommand/bin/build.options            |    5 -
 SrcLib/core/fwCommand/include/fwCommand/Empty.hpp  |   11 +-
 .../core/fwCommand/include/fwCommand/ICommand.hpp  |   28 +-
 .../core/fwCommand/include/fwCommand/Manager.hpp   |   41 +-
 .../fwCommand/include/fwCommand/PaintCommand.hpp   |   41 +-
 .../include/fwCommand/UndoRedoManager.hpp          |   24 +-
 SrcLib/core/fwCommand/include/fwCommand/config.hpp |   41 -
 .../core/fwCommand/include/fwCommand/namespace.hpp |   20 +
 SrcLib/core/fwCommand/src/fwCommand/Empty.cpp      |   10 +-
 SrcLib/core/fwCommand/src/fwCommand/Manager.cpp    |   27 +-
 .../core/fwCommand/src/fwCommand/PaintCommand.cpp  |   79 +-
 .../fwCommand/src/fwCommand/UndoRedoManager.cpp    |    8 +-
 SrcLib/core/fwCore/CMakeLists.txt                  |   31 +-
 SrcLib/core/fwCore/COPYING                         |  675 ---
 SrcLib/core/fwCore/COPYING.LESSER                  |  166 -
 SrcLib/core/fwCore/bin/build.options               |    4 -
 SrcLib/core/fwCore/include/fwCore/BaseObject.hpp   |   25 +-
 SrcLib/core/fwCore/include/fwCore/Demangler.hpp    |   73 +-
 SrcLib/core/fwCore/include/fwCore/Exception.hpp    |    8 +-
 SrcLib/core/fwCore/include/fwCore/HiResClock.hpp   |    8 +-
 SrcLib/core/fwCore/include/fwCore/HiResTimer.hpp   |   14 +-
 SrcLib/core/fwCore/include/fwCore/LogicStamp.hpp   |   18 +-
 SrcLib/core/fwCore/include/fwCore/Namespace.hpp    |    4 +-
 SrcLib/core/fwCore/include/fwCore/Profiling.hpp    |  213 +
 SrcLib/core/fwCore/include/fwCore/TimeStamp.hpp    |   24 +-
 SrcLib/core/fwCore/include/fwCore/base.hpp         |   12 +-
 .../core/fwCore/include/fwCore/concept_checks.hpp  |   42 +-
 SrcLib/core/fwCore/include/fwCore/config.hpp       |   43 -
 .../core/fwCore/include/fwCore/exceptionmacros.hpp |   18 +-
 .../core/fwCore/include/fwCore/log/Namespace.hpp   |    4 +-
 .../fwCore/include/fwCore/log/ScopedMessage.hpp    |   24 +-
 .../core/fwCore/include/fwCore/log/SpyLogger.hpp   |   20 +-
 SrcLib/core/fwCore/include/fwCore/macros.hpp       |  315 +-
 SrcLib/core/fwCore/include/fwCore/mt/Namespace.hpp |    4 +-
 SrcLib/core/fwCore/include/fwCore/mt/types.hpp     |    2 +-
 SrcLib/core/fwCore/include/fwCore/spyLog.hpp       |  106 +-
 .../fwCore/include/fwCore/util/FactoryRegistry.hpp |   57 +-
 .../include/fwCore/util/LazyInstantiator.hpp       |   10 +-
 .../core/fwCore/include/fwCore/util/Namespace.hpp  |    4 +-
 SrcLib/core/fwCore/src/fwCore/Demangler.cpp        |   65 +-
 SrcLib/core/fwCore/src/fwCore/Exception.cpp        |    2 +-
 SrcLib/core/fwCore/src/fwCore/HiResClock.cpp       |    2 +-
 SrcLib/core/fwCore/src/fwCore/HiResTimer.cpp       |    7 +-
 SrcLib/core/fwCore/src/fwCore/LogicStamp.cpp       |    2 +-
 SrcLib/core/fwCore/src/fwCore/TimeStamp.cpp        |    2 +-
 .../core/fwCore/src/fwCore/log/ScopedMessage.cpp   |    5 +-
 SrcLib/core/fwCore/src/fwCore/log/SpyLogger.cpp    |  139 +-
 SrcLib/core/fwCore/test/CMakeLists.txt             |   21 +-
 SrcLib/core/fwCore/test/cppunit.options            |    4 -
 .../fwCore/test/tu/include/FactoryRegistryTest.hpp |   20 +-
 .../test/tu/include/LazyInstantiatorTest.hpp       |   10 +-
 SrcLib/core/fwCore/test/tu/include/SpyLogTest.hpp  |   10 +-
 .../fwCore/test/tu/src/FactoryRegistryTest.cpp     |  136 +-
 .../fwCore/test/tu/src/LazyInstantiatorTest.cpp    |   42 +-
 SrcLib/core/fwCore/test/tu/src/SpyLogTest.cpp      |  113 +-
 SrcLib/core/fwData/CMakeLists.txt                  |   16 -
 SrcLib/core/fwData/COPYING                         |  675 ---
 SrcLib/core/fwData/COPYING.LESSER                  |  166 -
 SrcLib/core/fwData/Properties.cmake                |    2 +-
 SrcLib/core/fwData/bin/build.options               |    6 -
 SrcLib/core/fwData/include/fwData/Array.hpp        |   63 +-
 SrcLib/core/fwData/include/fwData/Boolean.hpp      |   20 +-
 SrcLib/core/fwData/include/fwData/Camera.hpp       |  160 -
 SrcLib/core/fwData/include/fwData/Color.hpp        |   91 +-
 SrcLib/core/fwData/include/fwData/Composite.hpp    |  319 +-
 SrcLib/core/fwData/include/fwData/Edge.hpp         |   28 +-
 SrcLib/core/fwData/include/fwData/Exception.hpp    |   25 +-
 SrcLib/core/fwData/include/fwData/Float.hpp        |   17 +-
 SrcLib/core/fwData/include/fwData/GenericField.hpp |   76 +-
 .../fwData/include/fwData/GenericFieldBase.hpp     |   26 +-
 SrcLib/core/fwData/include/fwData/Graph.hpp        |   47 +-
 SrcLib/core/fwData/include/fwData/Histogram.hpp    |  188 +-
 SrcLib/core/fwData/include/fwData/Image.hpp        |  189 +-
 SrcLib/core/fwData/include/fwData/Integer.hpp      |   19 +-
 SrcLib/core/fwData/include/fwData/Line.hpp         |  111 +-
 SrcLib/core/fwData/include/fwData/List.hpp         |  181 +-
 SrcLib/core/fwData/include/fwData/Material.hpp     |  315 +-
 SrcLib/core/fwData/include/fwData/Mesh.hpp         |  195 +-
 SrcLib/core/fwData/include/fwData/Model.hpp        |   81 -
 SrcLib/core/fwData/include/fwData/Namespace.hpp    |   20 -
 SrcLib/core/fwData/include/fwData/Node.hpp         |   37 +-
 SrcLib/core/fwData/include/fwData/Object.hpp       |  115 +-
 SrcLib/core/fwData/include/fwData/ObjectLock.hpp   |   25 +-
 SrcLib/core/fwData/include/fwData/Plane.hpp        |  143 +-
 SrcLib/core/fwData/include/fwData/PlaneList.hpp    |   87 +-
 SrcLib/core/fwData/include/fwData/Point.hpp        |   82 +-
 SrcLib/core/fwData/include/fwData/PointList.hpp    |   93 +-
 SrcLib/core/fwData/include/fwData/Port.hpp         |  122 +-
 .../core/fwData/include/fwData/ProcessObject.hpp   |  112 +-
 SrcLib/core/fwData/include/fwData/ROITraits.hpp    |  100 +-
 .../core/fwData/include/fwData/Reconstruction.hpp  |  248 +-
 .../fwData/include/fwData/ReconstructionTraits.hpp |   61 +-
 SrcLib/core/fwData/include/fwData/Resection.hpp    |  318 +-
 SrcLib/core/fwData/include/fwData/ResectionDB.hpp  |  115 +-
 SrcLib/core/fwData/include/fwData/Spline.hpp       |  190 +-
 SrcLib/core/fwData/include/fwData/String.hpp       |   23 +-
 .../core/fwData/include/fwData/StructureTraits.hpp |  471 +-
 .../include/fwData/StructureTraitsDictionary.hpp   |   11 +-
 .../include/fwData/StructureTraitsHelper.hpp       |   18 +-
 SrcLib/core/fwData/include/fwData/Tag.hpp          |  161 +-
 .../fwData/include/fwData/TransferFunction.hpp     |  197 +-
 .../include/fwData/TransformationMatrix3D.hpp      |   89 +-
 .../core/fwData/include/fwData/TriangularMesh.hpp  |  133 -
 SrcLib/core/fwData/include/fwData/Vector.hpp       |  276 +-
 SrcLib/core/fwData/include/fwData/Video.hpp        |  108 -
 SrcLib/core/fwData/include/fwData/camp/mapper.hpp  |   39 +-
 SrcLib/core/fwData/include/fwData/config.hpp       |   44 -
 .../fwData/include/fwData/factory/namespace.hpp    |   27 -
 SrcLib/core/fwData/include/fwData/factory/new.hpp  |   20 +-
 .../core/fwData/include/fwData/location/Folder.hpp |   41 +-
 .../fwData/include/fwData/location/ILocation.hpp   |   14 +-
 .../fwData/include/fwData/location/MultiFiles.hpp  |   31 +-
 .../fwData/include/fwData/location/Namespace.hpp   |   23 -
 .../fwData/include/fwData/location/SingleFile.hpp  |   37 +-
 SrcLib/core/fwData/include/fwData/macros.hpp       |  237 -
 SrcLib/core/fwData/include/fwData/mt/Namespace.hpp |   25 -
 .../fwData/include/fwData/mt/ObjectReadLock.hpp    |   22 +-
 .../include/fwData/mt/ObjectReadToWriteLock.hpp    |   22 +-
 .../fwData/include/fwData/mt/ObjectWriteLock.hpp   |   22 +-
 SrcLib/core/fwData/include/fwData/namespace.hpp    |   55 +
 .../core/fwData/include/fwData/registry/detail.hpp |    8 +-
 .../core/fwData/include/fwData/registry/macros.hpp |   11 +-
 .../fwData/include/fwData/registry/namespace.hpp   |   27 -
 SrcLib/core/fwData/src/fwData/Array.cpp            |  101 +-
 SrcLib/core/fwData/src/fwData/Boolean.cpp          |   19 +-
 SrcLib/core/fwData/src/fwData/Camera.cpp           |   70 -
 SrcLib/core/fwData/src/fwData/Color.cpp            |   64 +-
 SrcLib/core/fwData/src/fwData/Composite.cpp        |   40 +-
 SrcLib/core/fwData/src/fwData/Edge.cpp             |   36 +-
 SrcLib/core/fwData/src/fwData/Exception.cpp        |   13 +-
 SrcLib/core/fwData/src/fwData/Float.cpp            |   21 +-
 SrcLib/core/fwData/src/fwData/GenericFieldBase.cpp |    6 +-
 SrcLib/core/fwData/src/fwData/Graph.cpp            |  102 +-
 SrcLib/core/fwData/src/fwData/Histogram.cpp        |   36 +-
 SrcLib/core/fwData/src/fwData/Image.cpp            |  162 +-
 SrcLib/core/fwData/src/fwData/Integer.cpp          |   16 +-
 SrcLib/core/fwData/src/fwData/Line.cpp             |   25 +-
 SrcLib/core/fwData/src/fwData/List.cpp             |   21 +-
 SrcLib/core/fwData/src/fwData/Material.cpp         |   83 +-
 SrcLib/core/fwData/src/fwData/Mesh.cpp             |  264 +-
 SrcLib/core/fwData/src/fwData/Model.cpp            |   78 -
 SrcLib/core/fwData/src/fwData/Node.cpp             |   55 +-
 SrcLib/core/fwData/src/fwData/Object.cpp           |   52 +-
 SrcLib/core/fwData/src/fwData/ObjectLock.cpp       |   44 +-
 SrcLib/core/fwData/src/fwData/Plane.cpp            |   51 +-
 SrcLib/core/fwData/src/fwData/PlaneList.cpp        |   53 +-
 SrcLib/core/fwData/src/fwData/Point.cpp            |   37 +-
 SrcLib/core/fwData/src/fwData/PointList.cpp        |   32 +-
 SrcLib/core/fwData/src/fwData/Port.cpp             |   24 +-
 SrcLib/core/fwData/src/fwData/ProcessObject.cpp    |   58 +-
 SrcLib/core/fwData/src/fwData/ROITraits.cpp        |   20 +-
 SrcLib/core/fwData/src/fwData/Reconstruction.cpp   |   63 +-
 .../fwData/src/fwData/ReconstructionTraits.cpp     |   27 +-
 SrcLib/core/fwData/src/fwData/Resection.cpp        |   62 +-
 SrcLib/core/fwData/src/fwData/ResectionDB.cpp      |   37 +-
 SrcLib/core/fwData/src/fwData/Spline.cpp           |   10 +-
 SrcLib/core/fwData/src/fwData/String.cpp           |   16 +-
 SrcLib/core/fwData/src/fwData/StructureTraits.cpp  |   15 +-
 .../src/fwData/StructureTraitsDictionary.cpp       |   58 +-
 .../fwData/src/fwData/StructureTraitsHelper.cpp    |   45 +-
 SrcLib/core/fwData/src/fwData/Tag.cpp              |   26 +-
 SrcLib/core/fwData/src/fwData/TransferFunction.cpp |  187 +-
 .../fwData/src/fwData/TransformationMatrix3D.cpp   |   49 +-
 SrcLib/core/fwData/src/fwData/TriangularMesh.cpp   |  163 -
 SrcLib/core/fwData/src/fwData/Vector.cpp           |   34 +-
 SrcLib/core/fwData/src/fwData/Video.cpp            |   69 -
 SrcLib/core/fwData/src/fwData/factory/new.cpp      |    2 +-
 SrcLib/core/fwData/src/fwData/location/Folder.cpp  |   16 +-
 .../core/fwData/src/fwData/location/ILocation.cpp  |    8 +-
 .../core/fwData/src/fwData/location/MultiFiles.cpp |   12 +-
 .../core/fwData/src/fwData/location/SingleFile.cpp |   16 +-
 .../core/fwData/src/fwData/mt/ObjectReadLock.cpp   |   11 +-
 .../fwData/src/fwData/mt/ObjectReadToWriteLock.cpp |   12 +-
 .../core/fwData/src/fwData/mt/ObjectWriteLock.cpp  |    9 +-
 SrcLib/core/fwData/src/fwData/registry/detail.cpp  |    7 +-
 SrcLib/core/fwData/test/CMakeLists.txt             |   12 +-
 SrcLib/core/fwData/test/Properties.cmake           |    2 +-
 SrcLib/core/fwData/test/cppunit.options            |   34 -
 SrcLib/core/fwData/test/tu/include/ArrayTest.hpp   |    3 +-
 SrcLib/core/fwData/test/tu/include/BooleanTest.hpp |    3 +-
 SrcLib/core/fwData/test/tu/include/CameraTest.hpp  |   33 -
 SrcLib/core/fwData/test/tu/include/ColorTest.hpp   |   10 +-
 .../core/fwData/test/tu/include/CompositeTest.hpp  |    3 +-
 SrcLib/core/fwData/test/tu/include/CopyTest.hpp    |  101 +-
 SrcLib/core/fwData/test/tu/include/EdgeTest.hpp    |    3 +-
 SrcLib/core/fwData/test/tu/include/FloatTest.hpp   |    3 +-
 SrcLib/core/fwData/test/tu/include/GraphTest.hpp   |    6 +-
 SrcLib/core/fwData/test/tu/include/ImageTest.hpp   |    3 +-
 SrcLib/core/fwData/test/tu/include/IntegerTest.hpp |    3 +-
 .../core/fwData/test/tu/include/IsTypeOfTest.hpp   |    3 +-
 SrcLib/core/fwData/test/tu/include/MTLockTest.hpp  |    3 +-
 SrcLib/core/fwData/test/tu/include/MacrosTest.hpp  |   33 -
 .../core/fwData/test/tu/include/MaterialTest.hpp   |    3 +-
 SrcLib/core/fwData/test/tu/include/MeshTest.hpp    |    5 +-
 SrcLib/core/fwData/test/tu/include/ModelTest.hpp   |   32 -
 SrcLib/core/fwData/test/tu/include/ObjectTest.hpp  |    3 +-
 .../core/fwData/test/tu/include/PointListTest.hpp  |   43 +
 .../fwData/test/tu/include/ProcessObjectTest.hpp   |   11 +-
 .../core/fwData/test/tu/include/ROITraitsTest.hpp  |    3 +-
 .../fwData/test/tu/include/ReconstructionTest.hpp  |    3 +-
 .../test/tu/include/ReconstructionTraitsTest.hpp   |    3 +-
 SrcLib/core/fwData/test/tu/include/StringTest.hpp  |    3 +-
 .../tu/include/StructureTraitsDictionaryTest.hpp   |    3 +-
 .../test/tu/include/TransferFunctionTest.hpp       |    3 +-
 .../test/tu/include/TransformationMatrix3DTest.hpp |   18 +-
 SrcLib/core/fwData/test/tu/include/VideoTest.hpp   |   33 -
 SrcLib/core/fwData/test/tu/src/ArrayTest.cpp       |  304 +-
 SrcLib/core/fwData/test/tu/src/BooleanTest.cpp     |   10 +-
 SrcLib/core/fwData/test/tu/src/CameraTest.cpp      |   58 -
 SrcLib/core/fwData/test/tu/src/ColorTest.cpp       |    4 +-
 SrcLib/core/fwData/test/tu/src/CompositeTest.cpp   |   28 +-
 SrcLib/core/fwData/test/tu/src/CopyTest.cpp        |   43 +-
 SrcLib/core/fwData/test/tu/src/EdgeTest.cpp        |    2 +-
 SrcLib/core/fwData/test/tu/src/FloatTest.cpp       |   22 +-
 SrcLib/core/fwData/test/tu/src/GraphTest.cpp       |   28 +-
 SrcLib/core/fwData/test/tu/src/ImageTest.cpp       |   95 +-
 SrcLib/core/fwData/test/tu/src/IntegerTest.cpp     |   19 +-
 SrcLib/core/fwData/test/tu/src/IsTypeOfTest.cpp    |   85 +-
 SrcLib/core/fwData/test/tu/src/MTLockTest.cpp      |   17 +-
 SrcLib/core/fwData/test/tu/src/MacrosTest.cpp      |   97 -
 SrcLib/core/fwData/test/tu/src/MaterialTest.cpp    |    2 +-
 SrcLib/core/fwData/test/tu/src/MeshTest.cpp        |  265 +-
 SrcLib/core/fwData/test/tu/src/ModelTest.cpp       |   53 -
 SrcLib/core/fwData/test/tu/src/ObjectTest.cpp      |    6 +-
 SrcLib/core/fwData/test/tu/src/PointListTest.cpp   |  137 +
 .../core/fwData/test/tu/src/ProcessObjectTest.cpp  |    6 +-
 SrcLib/core/fwData/test/tu/src/ROITraitsTest.cpp   |    4 +-
 .../core/fwData/test/tu/src/ReconstructionTest.cpp |   36 +-
 .../test/tu/src/ReconstructionTraitsTest.cpp       |    4 +-
 SrcLib/core/fwData/test/tu/src/StringTest.cpp      |   18 +-
 .../test/tu/src/StructureTraitsDictionaryTest.cpp  |    4 +-
 .../fwData/test/tu/src/TransferFunctionTest.cpp    |   93 +-
 .../test/tu/src/TransformationMatrix3DTest.cpp     |  100 +-
 SrcLib/core/fwData/test/tu/src/VideoTest.cpp       |   47 -
 SrcLib/core/fwDataCamp/CMakeLists.txt              |   10 -
 SrcLib/core/fwDataCamp/Properties.cmake            |    2 +-
 SrcLib/core/fwDataCamp/bin/build.options           |    3 -
 .../core/fwDataCamp/include/fwDataCamp/Array.hpp   |    2 +-
 .../core/fwDataCamp/include/fwDataCamp/Camera.hpp  |   17 -
 .../core/fwDataCamp/include/fwDataCamp/Image.hpp   |    2 +-
 SrcLib/core/fwDataCamp/include/fwDataCamp/Line.hpp |    2 +-
 .../fwDataCamp/include/fwDataCamp/Material.hpp     |   11 +-
 SrcLib/core/fwDataCamp/include/fwDataCamp/Mesh.hpp |    2 +-
 SrcLib/core/fwDataCamp/include/fwDataCamp/Node.hpp |    2 +-
 .../fwDataCamp/include/fwDataCamp/ROITraits.hpp    |    2 +-
 .../include/fwDataCamp/Reconstruction.hpp          |    2 +-
 .../include/fwDataCamp/ReconstructionTraits.hpp    |    2 +-
 .../fwDataCamp/include/fwDataCamp/Resection.hpp    |    2 +-
 .../fwDataCamp/include/fwDataCamp/ResectionDB.hpp  |    2 +-
 .../include/fwDataCamp/StructureTraits.hpp         |    2 +-
 SrcLib/core/fwDataCamp/include/fwDataCamp/Tag.hpp  |    2 +-
 .../include/fwDataCamp/TransferFunction.hpp        |    2 +-
 .../core/fwDataCamp/include/fwDataCamp/Version.hpp |    2 +-
 .../core/fwDataCamp/include/fwDataCamp/Video.hpp   |   17 -
 .../fwDataCamp/include/fwDataCamp/autoload.hpp     |   16 +-
 .../core/fwDataCamp/include/fwDataCamp/config.hpp  |   45 -
 .../include/fwDataCamp/exception/NullPointer.hpp   |    4 +-
 .../fwDataCamp/exception/ObjectNotFound.hpp        |    4 +-
 .../fwDataCamp/include/fwDataCamp/getObject.hpp    |   19 +-
 .../fwDataCamp/include/fwDataCamp/namespace.hpp    |    4 +-
 .../include/fwDataCamp/visitor/CompareObjects.hpp  |   39 +-
 .../include/fwDataCamp/visitor/GetObject.hpp       |   29 +-
 .../include/fwDataCamp/visitor/RecursiveLock.hpp   |   18 +-
 .../include/fwMedDataCamp/ActivitySeries.hpp       |    2 +-
 .../include/fwMedDataCamp/DicomSeries.hpp          |   23 +
 .../include/fwMedDataCamp/ImageSeries.hpp          |    2 +-
 .../fwDataCamp/include/fwMedDataCamp/Series.hpp    |    2 +-
 .../fwDataCamp/include/fwMedDataCamp/autoload.hpp  |   10 +-
 .../fwDataCamp/include/fwMedDataCamp/namespace.hpp |   20 +
 SrcLib/core/fwDataCamp/src/autoload.cpp            |    2 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Array.cpp    |   20 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Boolean.cpp  |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Camera.cpp   |   22 -
 SrcLib/core/fwDataCamp/src/fwDataCamp/Color.cpp    |   12 +-
 .../core/fwDataCamp/src/fwDataCamp/Composite.cpp   |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Edge.cpp     |   16 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Float.cpp    |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Graph.cpp    |   10 +-
 .../core/fwDataCamp/src/fwDataCamp/Histogram.cpp   |   16 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Image.cpp    |   23 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Integer.cpp  |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Line.cpp     |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/List.cpp     |   10 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Material.cpp |   69 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Mesh.cpp     |   35 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Model.cpp    |   18 -
 SrcLib/core/fwDataCamp/src/fwDataCamp/Node.cpp     |   16 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Object.cpp   |   10 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Plane.cpp    |   15 +-
 .../core/fwDataCamp/src/fwDataCamp/PlaneList.cpp   |   10 +-
 .../core/fwDataCamp/src/fwDataCamp/PointList.cpp   |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Points.cpp   |    6 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Port.cpp     |   14 +-
 .../fwDataCamp/src/fwDataCamp/ProcessObject.cpp    |   14 +-
 .../core/fwDataCamp/src/fwDataCamp/ROITraits.cpp   |   18 +-
 .../fwDataCamp/src/fwDataCamp/Reconstruction.cpp   |   23 +-
 .../src/fwDataCamp/ReconstructionTraits.cpp        |   18 +-
 .../core/fwDataCamp/src/fwDataCamp/Resection.cpp   |   24 +-
 .../core/fwDataCamp/src/fwDataCamp/ResectionDB.cpp |   14 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/String.cpp   |   12 +-
 .../fwDataCamp/src/fwDataCamp/StructureTraits.cpp  |   68 +-
 .../src/fwDataCamp/StructureTraitsDictionary.cpp   |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Tag.cpp      |   16 +-
 .../fwDataCamp/src/fwDataCamp/TransferFunction.cpp |   30 +-
 .../src/fwDataCamp/TransformationMatrix3D.cpp      |   12 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Vector.cpp   |   10 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Version.cpp  |    4 +-
 SrcLib/core/fwDataCamp/src/fwDataCamp/Video.cpp    |   20 -
 .../src/fwDataCamp/exception/NullPointer.cpp       |    5 +-
 .../src/fwDataCamp/exception/ObjectNotFound.cpp    |    5 +-
 .../core/fwDataCamp/src/fwDataCamp/getObject.cpp   |   14 +-
 .../fwDataCamp/src/fwDataCamp/location/Folder.cpp  |   14 +-
 .../src/fwDataCamp/location/SingleFile.cpp         |   10 +-
 .../src/fwDataCamp/visitor/CompareObjects.cpp      |   65 +-
 .../src/fwDataCamp/visitor/GetObject.cpp           |   63 +-
 .../src/fwDataCamp/visitor/RecursiveLock.cpp       |   59 +-
 .../src/fwMedDataCamp/ActivitySeries.cpp           |   14 +-
 .../fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp   |   39 +
 .../fwDataCamp/src/fwMedDataCamp/Equipment.cpp     |   12 +-
 .../fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp   |   12 +-
 .../fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp   |   12 +-
 .../core/fwDataCamp/src/fwMedDataCamp/Patient.cpp  |   18 +-
 .../core/fwDataCamp/src/fwMedDataCamp/Series.cpp   |   28 +-
 .../core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp |   12 +-
 SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp |   22 +-
 SrcLib/core/fwDataCamp/test/CMakeLists.txt         |   17 +-
 SrcLib/core/fwDataCamp/test/Properties.cmake       |    2 +-
 SrcLib/core/fwDataCamp/test/cppunit.options        |   15 -
 .../test/tu/include/CompareObjectsTest.hpp         |   18 +-
 .../fwDataCamp/test/tu/include/DataCampHelper.hpp  |   24 +-
 .../fwDataCamp/test/tu/include/GetObjectTest.hpp   |   10 +-
 .../core/fwDataCamp/test/tu/include/ObjectTest.hpp |    8 +-
 .../test/tu/include/RecursiveLockTest.hpp          |    3 +-
 .../include/fwMedDataCamp/ActivitySeriesTest.hpp   |   14 +-
 .../include/fwMedDataCamp/DicomSeriesCampTest.hpp  |   35 +
 .../tu/include/fwMedDataCamp/EquipmentTest.hpp     |   14 +-
 .../tu/include/fwMedDataCamp/ImageSeriesTest.hpp   |   14 +-
 .../tu/include/fwMedDataCamp/ModelSeriesTest.hpp   |   14 +-
 .../test/tu/include/fwMedDataCamp/PatientTest.hpp  |   14 +-
 .../test/tu/include/fwMedDataCamp/SeriesDBTest.hpp |   14 +-
 .../test/tu/include/fwMedDataCamp/StudyTest.hpp    |   14 +-
 .../fwDataCamp/test/tu/src/CompareObjectsTest.cpp  |   21 +-
 .../core/fwDataCamp/test/tu/src/DataCampHelper.cpp |    6 +-
 .../core/fwDataCamp/test/tu/src/GetObjectTest.cpp  |  126 +-
 SrcLib/core/fwDataCamp/test/tu/src/ObjectTest.cpp  |    5 +-
 .../fwDataCamp/test/tu/src/RecursiveLockTest.cpp   |   15 +-
 .../tu/src/fwMedDataCamp/ActivitySeriesTest.cpp    |   24 +-
 .../tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp   |  145 +
 .../test/tu/src/fwMedDataCamp/EquipmentTest.cpp    |   11 +-
 .../test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp  |   34 +-
 .../test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp  |   32 +-
 .../test/tu/src/fwMedDataCamp/PatientTest.cpp      |   18 +-
 .../test/tu/src/fwMedDataCamp/SeriesDBTest.cpp     |    9 +-
 .../test/tu/src/fwMedDataCamp/StudyTest.cpp        |   26 +-
 SrcLib/core/fwDataIO/CMakeLists.txt                |   16 +-
 SrcLib/core/fwDataIO/COPYING                       |  675 ---
 SrcLib/core/fwDataIO/COPYING.LESSER                |  166 -
 SrcLib/core/fwDataIO/Properties.cmake              |    8 +-
 SrcLib/core/fwDataIO/bin/build.options             |   15 -
 .../core/fwDataIO/include/fwDataIO/Namespace.hpp   |   10 +-
 SrcLib/core/fwDataIO/include/fwDataIO/config.hpp   |   48 -
 .../include/fwDataIO/reader/ArrayReader.hpp        |   15 +-
 .../include/fwDataIO/reader/DictionaryReader.hpp   |   33 +-
 .../fwDataIO/reader/GenericObjectReader.hpp        |   34 +-
 .../include/fwDataIO/reader/GzArrayReader.hpp      |   15 +-
 .../fwDataIO/reader/GzBufferImageReader.hpp        |   13 +-
 .../include/fwDataIO/reader/IObjectReader.hpp      |   44 +-
 .../include/fwDataIO/reader/MeshReader.hpp         |   18 +-
 .../fwDataIO/include/fwDataIO/reader/Namespace.hpp |   10 +-
 .../fwDataIO/include/fwDataIO/reader/TagReader.hpp |   20 +-
 .../reader/TransformationMatrix3DReader.hpp        |   20 +-
 .../fwDataIO/reader/TriangularMeshReader.hpp       |   70 -
 .../include/fwDataIO/reader/factory/namespace.hpp  |    6 +-
 .../include/fwDataIO/reader/factory/new.hpp        |   13 +-
 .../include/fwDataIO/reader/registry/detail.hpp    |    4 +-
 .../include/fwDataIO/reader/registry/macros.hpp    |   10 +-
 .../include/fwDataIO/reader/registry/namespace.hpp |    4 +-
 .../include/fwDataIO/writer/ArrayWriter.hpp        |   15 +-
 .../fwDataIO/writer/GenericObjectWriter.hpp        |   29 +-
 .../include/fwDataIO/writer/GzArrayWriter.hpp      |   15 +-
 .../fwDataIO/writer/GzBufferImageWriter.hpp        |   16 +-
 .../include/fwDataIO/writer/IObjectWriter.hpp      |   43 +-
 .../include/fwDataIO/writer/MeshWriter.hpp         |   13 +-
 .../fwDataIO/include/fwDataIO/writer/Namespace.hpp |   10 +-
 .../writer/TransformationMatrix3DWriter.hpp        |   22 +-
 .../fwDataIO/writer/TriangularMeshWriter.hpp       |   70 -
 .../include/fwDataIO/writer/factory/namespace.hpp  |    4 +-
 .../include/fwDataIO/writer/factory/new.hpp        |   13 +-
 .../include/fwDataIO/writer/registry/detail.hpp    |    4 +-
 .../include/fwDataIO/writer/registry/macros.hpp    |   10 +-
 .../include/fwDataIO/writer/registry/namespace.hpp |    4 +-
 .../fwDataIO/src/fwDataIO/reader/ArrayReader.cpp   |   32 +-
 .../src/fwDataIO/reader/DictionaryReader.cpp       |  176 +-
 .../fwDataIO/src/fwDataIO/reader/GzArrayReader.cpp |   30 +-
 .../src/fwDataIO/reader/GzBufferImageReader.cpp    |   38 +-
 .../fwDataIO/src/fwDataIO/reader/IObjectReader.cpp |   25 +-
 .../fwDataIO/src/fwDataIO/reader/MeshReader.cpp    |  225 +-
 .../fwDataIO/src/fwDataIO/reader/TagReader.cpp     |   30 +-
 .../reader/TransformationMatrix3DReader.cpp        |   23 +-
 .../src/fwDataIO/reader/TriangularMeshReader.cpp   |  170 -
 .../fwDataIO/src/fwDataIO/reader/factory/new.cpp   |    2 +-
 .../src/fwDataIO/reader/registry/detail.cpp        |    4 +-
 .../fwDataIO/src/fwDataIO/writer/ArrayWriter.cpp   |   29 +-
 .../fwDataIO/src/fwDataIO/writer/GzArrayWriter.cpp |   32 +-
 .../src/fwDataIO/writer/GzBufferImageWriter.cpp    |   41 +-
 .../fwDataIO/src/fwDataIO/writer/IObjectWriter.cpp |   26 +-
 .../fwDataIO/src/fwDataIO/writer/MeshWriter.cpp    |   75 +-
 .../writer/TransformationMatrix3DWriter.cpp        |   27 +-
 .../src/fwDataIO/writer/TriangularMeshWriter.cpp   |   87 -
 .../fwDataIO/src/fwDataIO/writer/factory/new.cpp   |    2 +-
 .../src/fwDataIO/writer/registry/detail.cpp        |    4 +-
 SrcLib/core/fwDataIO/test/CMakeLists.txt           |   10 +-
 SrcLib/core/fwDataIO/test/Properties.cmake         |    2 +-
 SrcLib/core/fwDataIO/test/cppunit.options          |    8 -
 .../test/tu/include/DictionaryReaderTest.hpp       |   22 +-
 .../fwDataIO/test/tu/include/FileNameParser.hpp    |   17 +-
 .../fwDataIO/test/tu/include/MeshTrianTest.hpp     |   22 +-
 SrcLib/core/fwDataIO/test/tu/include/TrianTest.hpp |   18 +-
 .../fwDataIO/test/tu/src/DictionaryReaderTest.cpp  |    4 +-
 SrcLib/core/fwDataIO/test/tu/src/MeshTrianTest.cpp |   62 +-
 SrcLib/core/fwDataIO/test/tu/src/TrianTest.cpp     |  196 -
 SrcLib/core/fwDataTools/CMakeLists.txt             |   15 +-
 SrcLib/core/fwDataTools/Properties.cmake           |    2 +-
 SrcLib/core/fwDataTools/bin/build.options          |    9 -
 .../include/fwDataTools/AlgoMeshDeformation.hpp    |   27 +-
 .../core/fwDataTools/include/fwDataTools/Color.hpp |   36 +
 .../core/fwDataTools/include/fwDataTools/Image.hpp |   40 +-
 .../core/fwDataTools/include/fwDataTools/Mesh.hpp  |   37 +-
 .../fwDataTools/include/fwDataTools/Namespace.hpp  |   14 +-
 .../include/fwDataTools/PickingInfo.hpp            |   65 +
 .../include/fwDataTools/TransferFunction.hpp       |   12 +-
 .../include/fwDataTools/TransformationMatrix3D.hpp |   92 +-
 .../fwDataTools/include/fwDataTools/Vector.hxx     |   64 +-
 .../fwDataTools/include/fwDataTools/export.hpp     |   41 -
 .../include/fwDataTools/fieldHelper/Image.hpp      |   65 +
 .../fieldHelper/MedicalImageHelpers.hpp            |  404 ++
 .../include/fwDataTools/fieldHelper/Namespace.hpp  |   20 +
 .../include/fwDataTools/helper/Array.hpp           |  184 +
 .../include/fwDataTools/helper/ArrayGetter.hpp     |  132 +
 .../include/fwDataTools/helper/Composite.hpp       |   90 +
 .../include/fwDataTools/helper/Field.hpp           |  102 +
 .../include/fwDataTools/helper/Image.hpp           |  104 +
 .../include/fwDataTools/helper/ImageGetter.hpp     |   65 +
 .../fwDataTools/helper/MedicalImageAdaptor.hpp     |  406 ++
 .../include/fwDataTools/helper/Mesh.hpp            |  257 +
 .../include/fwDataTools/helper/MeshGetter.hpp      |   87 +
 .../include/fwDataTools/helper/Namespace.hpp       |   20 +
 .../include/fwDataTools/helper/Vector.hpp          |   69 +
 .../include/fwDataTools/thread/RegionThreader.hpp  |   42 +-
 .../src/fwDataTools/AlgoMeshDeformation.cpp        |   73 +-
 SrcLib/core/fwDataTools/src/fwDataTools/Color.cpp  |   60 +
 SrcLib/core/fwDataTools/src/fwDataTools/Image.cpp  |   82 +-
 SrcLib/core/fwDataTools/src/fwDataTools/Mesh.cpp   |  361 +-
 .../fwDataTools/src/fwDataTools/PickingInfo.cpp    |   21 +
 .../src/fwDataTools/TransferFunction.cpp           |  523 +-
 .../src/fwDataTools/TransformationMatrix3D.cpp     |  105 +-
 .../src/fwDataTools/fieldHelper/Image.cpp          |   43 +
 .../fieldHelper/MedicalImageHelpers.cpp            |  208 +
 .../fwDataTools/src/fwDataTools/helper/Array.cpp   |  185 +
 .../src/fwDataTools/helper/ArrayGetter.cpp         |   99 +
 .../src/fwDataTools/helper/Composite.cpp           |  142 +
 .../fwDataTools/src/fwDataTools/helper/Field.cpp   |  187 +
 .../fwDataTools/src/fwDataTools/helper/Image.cpp   |  251 +
 .../src/fwDataTools/helper/ImageGetter.cpp         |   77 +
 .../src/fwDataTools/helper/MedicalImageAdaptor.cpp |  556 +++
 .../fwDataTools/src/fwDataTools/helper/Mesh.cpp    |  408 ++
 .../src/fwDataTools/helper/MeshGetter.cpp          |  213 +
 .../fwDataTools/src/fwDataTools/helper/Vector.cpp  |  100 +
 SrcLib/core/fwDataTools/test/CMakeLists.txt        |    7 +-
 SrcLib/core/fwDataTools/test/Properties.cmake      |    2 +-
 SrcLib/core/fwDataTools/test/cppunit.options       |   17 -
 .../core/fwDataTools/test/tu/include/ColorTest.hpp |   34 +
 .../test/tu/include/FieldHelperTest.hpp            |   45 +
 .../core/fwDataTools/test/tu/include/ImageTest.hpp |   14 +-
 .../core/fwDataTools/test/tu/include/MeshTest.hpp  |   42 -
 .../test/tu/include/TransformationMatrix3DTest.hpp |   18 +-
 SrcLib/core/fwDataTools/test/tu/src/ColorTest.cpp  |   62 +
 .../fwDataTools/test/tu/src/FieldHelperTest.cpp    |   92 +
 SrcLib/core/fwDataTools/test/tu/src/ImageTest.cpp  |   65 +-
 SrcLib/core/fwDataTools/test/tu/src/MeshTest.cpp   |   73 -
 .../test/tu/src/TransformationMatrix3DTest.cpp     |  172 +-
 .../core/fwDicomTools}/CMakeLists.txt              |    0
 SrcLib/core/fwDicomTools/Properties.cmake          |    6 +
 .../fwDicomTools/include/fwDicomTools/Image.hpp    |   85 +
 .../fwDicomTools/include/fwDicomTools/Series.hpp   |   54 +
 .../include/fwDicomTools/namespace.hpp             |   16 +
 .../core/fwDicomTools/src/fwDicomTools/Image.cpp   |  153 +
 .../core/fwDicomTools/src/fwDicomTools/Series.cpp  |   52 +
 SrcLib/core/fwGui/CMakeLists.txt                   |   11 -
 SrcLib/core/fwGui/COPYING                          |  675 ---
 SrcLib/core/fwGui/COPYING.LESSER                   |  166 -
 SrcLib/core/fwGui/Properties.cmake                 |    2 +-
 SrcLib/core/fwGui/bin/build.options                |    4 -
 .../fwGui/include/fwGui/ActionCallbackBase.hpp     |   16 +-
 SrcLib/core/fwGui/include/fwGui/Application.hpp    |   18 +-
 SrcLib/core/fwGui/include/fwGui/Cursor.hpp         |   10 +-
 SrcLib/core/fwGui/include/fwGui/GuiBaseObject.hpp  |   17 +-
 SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp    |   46 +-
 SrcLib/core/fwGui/include/fwGui/IActionSrv.hpp     |  111 +-
 SrcLib/core/fwGui/include/fwGui/IApplication.hpp   |   19 +-
 SrcLib/core/fwGui/include/fwGui/ICursor.hpp        |   13 +-
 SrcLib/core/fwGui/include/fwGui/IFrameSrv.hpp      |  141 +-
 .../core/fwGui/include/fwGui/IGuiContainerSrv.hpp  |  183 +-
 SrcLib/core/fwGui/include/fwGui/IMenuBarSrv.hpp    |   30 +-
 .../core/fwGui/include/fwGui/IMenuItemCallback.hpp |   16 +-
 SrcLib/core/fwGui/include/fwGui/IMenuSrv.hpp       |   35 +-
 SrcLib/core/fwGui/include/fwGui/IToolBarSrv.hpp    |   55 +-
 SrcLib/core/fwGui/include/fwGui/Namespace.hpp      |   10 +-
 SrcLib/core/fwGui/include/fwGui/backend.hpp        |   21 +
 .../include/fwGui/builder/IContainerBuilder.hpp    |   10 +-
 .../include/fwGui/builder/IMenuBarBuilder.hpp      |   10 +-
 .../include/fwGui/builder/ISlideViewBuilder.hpp    |   98 +
 .../include/fwGui/builder/IToolBarBuilder.hpp      |   14 +-
 .../core/fwGui/include/fwGui/builder/Namespace.hpp |   10 +-
 SrcLib/core/fwGui/include/fwGui/config.hpp         |   43 -
 .../fwGui/include/fwGui/container/Namespace.hpp    |   10 +-
 .../fwGui/include/fwGui/container/fwContainer.hpp  |   17 +-
 .../core/fwGui/include/fwGui/container/fwMenu.hpp  |   14 +-
 .../fwGui/include/fwGui/container/fwMenuBar.hpp    |   14 +-
 .../fwGui/include/fwGui/container/fwMenuItem.hpp   |   14 +-
 .../fwGui/include/fwGui/container/fwToolBar.hpp    |   14 +-
 .../fwGui/include/fwGui/dialog/IInputDialog.hpp    |   10 +-
 .../fwGui/include/fwGui/dialog/ILocationDialog.hpp |   33 +-
 .../fwGui/include/fwGui/dialog/ILoggerDialog.hpp   |   73 +
 .../fwGui/include/fwGui/dialog/IMessageDialog.hpp  |   28 +-
 .../include/fwGui/dialog/IMultiSelectorDialog.hpp  |   12 +-
 .../fwGui/include/fwGui/dialog/IProgressDialog.hpp |   43 +-
 .../include/fwGui/dialog/IPulseProgressDialog.hpp  |   10 +-
 .../fwGui/include/fwGui/dialog/ISelectorDialog.hpp |   12 +-
 .../fwGui/include/fwGui/dialog/InputDialog.hpp     |   41 +-
 .../fwGui/include/fwGui/dialog/LocationDialog.hpp  |   19 +-
 .../fwGui/include/fwGui/dialog/LoggerDialog.hpp    |   91 +
 .../fwGui/include/fwGui/dialog/MessageDialog.hpp   |   19 +-
 .../include/fwGui/dialog/MultiSelectorDialog.hpp   |   17 +-
 .../core/fwGui/include/fwGui/dialog/Namespace.hpp  |   10 +-
 .../fwGui/include/fwGui/dialog/ProgressDialog.hpp  |   20 +-
 .../include/fwGui/dialog/PulseProgressDialog.hpp   |   27 +-
 .../fwGui/include/fwGui/dialog/SelectorDialog.hpp  |   27 +-
 .../core/fwGui/include/fwGui/factory/namespace.hpp |    4 +-
 SrcLib/core/fwGui/include/fwGui/factory/new.hpp    |   13 +-
 .../layoutManager/CardinalLayoutManagerBase.hpp    |  108 +-
 .../fwGui/layoutManager/IFrameLayoutManager.hpp    |  152 +-
 .../fwGui/layoutManager/IMenuBarLayoutManager.hpp  |   20 +-
 .../fwGui/layoutManager/IMenuLayoutManager.hpp     |   47 +-
 .../fwGui/layoutManager/IToolBarLayoutManager.hpp  |   56 +-
 .../fwGui/layoutManager/IViewLayoutManager.hpp     |   12 +-
 .../fwGui/layoutManager/LineLayoutManagerBase.hpp  |   81 +-
 .../include/fwGui/layoutManager/Namespace.hpp      |   10 +-
 .../fwGui/layoutManager/TabLayoutManagerBase.hpp   |   50 +-
 .../layoutManager/ToolboxLayoutManagerBase.hpp     |   88 +-
 .../include/fwGui/registrar/ActionRegistrar.hpp    |   16 +-
 .../include/fwGui/registrar/MenuBarRegistrar.hpp   |   24 +-
 .../include/fwGui/registrar/MenuRegistrar.hpp      |   27 +-
 .../fwGui/include/fwGui/registrar/Namespace.hpp    |   10 +-
 .../include/fwGui/registrar/ToolBarRegistrar.hpp   |   58 +-
 .../include/fwGui/registrar/ViewRegistrar.hpp      |   19 +-
 .../core/fwGui/include/fwGui/registry/detail.hpp   |    4 +-
 .../core/fwGui/include/fwGui/registry/macros.hpp   |    8 +-
 .../fwGui/include/fwGui/registry/namespace.hpp     |    4 +-
 .../core/fwGui/include/fwGui/registry/worker.hpp   |   38 +
 SrcLib/core/fwGui/src/fwGui/ActionCallbackBase.cpp |   20 +-
 SrcLib/core/fwGui/src/fwGui/Application.cpp        |    2 +-
 SrcLib/core/fwGui/src/fwGui/Cursor.cpp             |    7 +-
 SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp        |  189 +-
 SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp         |  163 +-
 SrcLib/core/fwGui/src/fwGui/IApplication.cpp       |   12 +-
 SrcLib/core/fwGui/src/fwGui/ICursor.cpp            |   10 +-
 SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp          |  157 +-
 SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp   |  227 +-
 SrcLib/core/fwGui/src/fwGui/IMenuBarSrv.cpp        |   98 +-
 SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp           |  109 +-
 SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp        |  110 +-
 SrcLib/core/fwGui/src/fwGui/backend.cpp            |   23 +
 .../fwGui/src/fwGui/builder/IContainerBuilder.cpp  |   15 +-
 .../fwGui/src/fwGui/builder/IMenuBarBuilder.cpp    |   12 +-
 .../fwGui/src/fwGui/builder/ISlideViewBuilder.cpp  |   98 +
 .../fwGui/src/fwGui/builder/IToolBarBuilder.cpp    |   24 +-
 .../core/fwGui/src/fwGui/container/fwContainer.cpp |    2 +-
 SrcLib/core/fwGui/src/fwGui/container/fwMenu.cpp   |    2 +-
 .../core/fwGui/src/fwGui/container/fwMenuBar.cpp   |    2 +-
 .../core/fwGui/src/fwGui/container/fwMenuItem.cpp  |    2 +-
 .../core/fwGui/src/fwGui/container/fwToolBar.cpp   |    2 +-
 .../core/fwGui/src/fwGui/dialog/IInputDialog.cpp   |   10 +-
 .../fwGui/src/fwGui/dialog/ILocationDialog.cpp     |   30 +-
 .../core/fwGui/src/fwGui/dialog/ILoggerDialog.cpp  |   33 +
 .../core/fwGui/src/fwGui/dialog/IMessageDialog.cpp |   10 +-
 .../src/fwGui/dialog/IMultiSelectorDialog.cpp      |   11 +-
 .../fwGui/src/fwGui/dialog/IProgressDialog.cpp     |   18 +-
 .../src/fwGui/dialog/IPulseProgressDialog.cpp      |   11 +-
 .../fwGui/src/fwGui/dialog/ISelectorDialog.cpp     |   10 +-
 SrcLib/core/fwGui/src/fwGui/dialog/InputDialog.cpp |   49 +-
 .../core/fwGui/src/fwGui/dialog/LocationDialog.cpp |   31 +-
 .../core/fwGui/src/fwGui/dialog/LoggerDialog.cpp   |   95 +
 .../core/fwGui/src/fwGui/dialog/MessageDialog.cpp  |  109 +-
 .../fwGui/src/fwGui/dialog/MultiSelectorDialog.cpp |   32 +-
 .../core/fwGui/src/fwGui/dialog/ProgressDialog.cpp |   81 +-
 .../fwGui/src/fwGui/dialog/PulseProgressDialog.cpp |   45 +-
 .../core/fwGui/src/fwGui/dialog/SelectorDialog.cpp |   61 +-
 SrcLib/core/fwGui/src/fwGui/factory/new.cpp        |    2 +-
 .../layoutManager/CardinalLayoutManagerBase.cpp    |   70 +-
 .../fwGui/layoutManager/IFrameLayoutManager.cpp    |   86 +-
 .../fwGui/layoutManager/IMenuBarLayoutManager.cpp  |   18 +-
 .../src/fwGui/layoutManager/IMenuLayoutManager.cpp |   44 +-
 .../fwGui/layoutManager/IToolBarLayoutManager.cpp  |   55 +-
 .../src/fwGui/layoutManager/IViewLayoutManager.cpp |   12 +-
 .../fwGui/layoutManager/LineLayoutManagerBase.cpp  |   57 +-
 .../fwGui/layoutManager/TabLayoutManagerBase.cpp   |   35 +-
 .../layoutManager/ToolboxLayoutManagerBase.cpp     |   55 +-
 .../fwGui/src/fwGui/registrar/ActionRegistrar.cpp  |   19 +-
 .../fwGui/src/fwGui/registrar/MenuBarRegistrar.cpp |   39 +-
 .../fwGui/src/fwGui/registrar/MenuRegistrar.cpp    |   69 +-
 .../fwGui/src/fwGui/registrar/ToolBarRegistrar.cpp |  106 +-
 .../fwGui/src/fwGui/registrar/ViewRegistrar.cpp    |   77 +-
 SrcLib/core/fwGui/src/fwGui/registry/detail.cpp    |    4 +-
 SrcLib/core/fwGui/src/fwGui/registry/worker.cpp    |   57 +
 SrcLib/core/fwGuiQt/CMakeLists.txt                 |   33 +-
 SrcLib/core/fwGuiQt/COPYING                        |  675 ---
 SrcLib/core/fwGuiQt/COPYING.LESSER                 |  166 -
 SrcLib/core/fwGuiQt/bin/build.options              |   19 -
 .../fwGuiQt/include/fwGuiQt/ActionCallback.hpp     |   21 +-
 SrcLib/core/fwGuiQt/include/fwGuiQt/App.hpp        |   29 +-
 .../core/fwGuiQt/include/fwGuiQt/Application.hpp   |   18 +-
 SrcLib/core/fwGuiQt/include/fwGuiQt/Cursor.hpp     |   10 +-
 SrcLib/core/fwGuiQt/include/fwGuiQt/Namespace.hpp  |   10 +-
 .../core/fwGuiQt/include/fwGuiQt/QtMainFrame.hpp   |   12 +-
 .../core/fwGuiQt/include/fwGuiQt/SliceSelector.hpp |   15 +-
 SrcLib/core/fwGuiQt/include/fwGuiQt/WorkerQt.hpp   |   18 +-
 .../include/fwGuiQt/builder/ContainerBuilder.hpp   |   11 +-
 .../include/fwGuiQt/builder/MenuBarBuilder.hpp     |   12 +-
 .../fwGuiQt/include/fwGuiQt/builder/Namespace.hpp  |   10 +-
 .../include/fwGuiQt/builder/SlideViewBuilder.hpp   |   56 +
 .../include/fwGuiQt/builder/ToolBarBuilder.hpp     |   11 +-
 SrcLib/core/fwGuiQt/include/fwGuiQt/config.hpp     |   43 -
 .../include/fwGuiQt/container/Namespace.hpp        |   10 +-
 .../include/fwGuiQt/container/QtContainer.hpp      |   17 +-
 .../fwGuiQt/container/QtMenuBarContainer.hpp       |   16 +-
 .../include/fwGuiQt/container/QtMenuContainer.hpp  |   16 +-
 .../fwGuiQt/container/QtMenuItemContainer.hpp      |   16 +-
 .../fwGuiQt/container/QtToolBarContainer.hpp       |   16 +-
 .../fwGuiQt/include/fwGuiQt/dialog/InputDialog.hpp |   26 +-
 .../include/fwGuiQt/dialog/LocationDialog.hpp      |   16 +-
 .../include/fwGuiQt/dialog/LoggerDialog.hpp        |  100 +
 .../include/fwGuiQt/dialog/MessageDialog.hpp       |   40 +-
 .../include/fwGuiQt/dialog/MultiSelectorDialog.hpp |   17 +-
 .../fwGuiQt/include/fwGuiQt/dialog/Namespace.hpp   |   10 +-
 .../include/fwGuiQt/dialog/ProgressDialog.hpp      |   21 +-
 .../include/fwGuiQt/dialog/PulseProgressDialog.hpp |   12 +-
 .../include/fwGuiQt/dialog/SelectorDialog.hpp      |   26 +-
 .../include/fwGuiQt/highlighter/CppHighlighter.hpp |   10 +-
 .../fwGuiQt/highlighter/PythonHighlighter.hpp      |   13 +-
 .../layoutManager/CardinalLayoutManager.hpp        |   10 +-
 .../fwGuiQt/layoutManager/FrameLayoutManager.hpp   |   15 +-
 .../fwGuiQt/layoutManager/LineLayoutManager.hpp    |   10 +-
 .../fwGuiQt/layoutManager/MenuBarLayoutManager.hpp |   10 +-
 .../fwGuiQt/layoutManager/MenuLayoutManager.hpp    |   10 +-
 .../include/fwGuiQt/layoutManager/Namespace.hpp    |   14 +-
 .../fwGuiQt/layoutManager/TabLayoutManager.hpp     |   10 +-
 .../fwGuiQt/layoutManager/ToolBarLayoutManager.hpp |   10 +-
 .../fwGuiQt/layoutManager/ToolboxLayoutManager.hpp |    8 +-
 .../core/fwGuiQt/include/fwGuiQt/util/FuncSlot.hpp |   10 +-
 .../include/fwGuiQt/widget/QRangeSlider.hpp        |   31 +-
 .../fwGuiQt/include/fwGuiQt/widget/QfwToolbox.hpp  |   42 +-
 .../fwGuiQt/include/fwGuiQt/widget/SlideBar.hpp    |   96 +
 SrcLib/core/fwGuiQt/src/fwGuiQt/ActionCallback.cpp |    8 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp            |   26 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/Application.cpp    |   25 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/Cursor.cpp         |    8 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/QtMainFrame.cpp    |   13 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/SliceSelector.cpp  |   31 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/WorkerQt.cpp       |  180 +-
 .../src/fwGuiQt/builder/ContainerBuilder.cpp       |   36 +-
 .../fwGuiQt/src/fwGuiQt/builder/MenuBarBuilder.cpp |   41 +-
 .../src/fwGuiQt/builder/SlideViewBuilder.cpp       |   92 +
 .../fwGuiQt/src/fwGuiQt/builder/ToolBarBuilder.cpp |   92 +-
 .../fwGuiQt/src/fwGuiQt/container/QtContainer.cpp  |   41 +-
 .../src/fwGuiQt/container/QtMenuBarContainer.cpp   |   12 +-
 .../src/fwGuiQt/container/QtMenuContainer.cpp      |   12 +-
 .../src/fwGuiQt/container/QtMenuItemContainer.cpp  |   12 +-
 .../src/fwGuiQt/container/QtToolBarContainer.cpp   |   12 +-
 .../fwGuiQt/src/fwGuiQt/dialog/InputDialog.cpp     |   25 +-
 .../fwGuiQt/src/fwGuiQt/dialog/LocationDialog.cpp  |  125 +-
 .../fwGuiQt/src/fwGuiQt/dialog/LoggerDialog.cpp    |  225 +
 .../fwGuiQt/src/fwGuiQt/dialog/MessageDialog.cpp   |   73 +-
 .../src/fwGuiQt/dialog/MultiSelectorDialog.cpp     |   39 +-
 .../fwGuiQt/src/fwGuiQt/dialog/ProgressDialog.cpp  |   14 +-
 .../src/fwGuiQt/dialog/PulseProgressDialog.cpp     |    3 +-
 .../fwGuiQt/src/fwGuiQt/dialog/SelectorDialog.cpp  |   34 +-
 .../src/fwGuiQt/highlighter/CppHighlighter.cpp     |   26 +-
 .../src/fwGuiQt/highlighter/PythonHighlighter.cpp  |   61 +-
 .../layoutManager/CardinalLayoutManager.cpp        |   52 +-
 .../fwGuiQt/layoutManager/FrameLayoutManager.cpp   |   61 +-
 .../fwGuiQt/layoutManager/LineLayoutManager.cpp    |   27 +-
 .../fwGuiQt/layoutManager/MenuBarLayoutManager.cpp |   18 +-
 .../fwGuiQt/layoutManager/MenuLayoutManager.cpp    |   40 +-
 .../src/fwGuiQt/layoutManager/TabLayoutManager.cpp |   12 +-
 .../fwGuiQt/layoutManager/ToolBarLayoutManager.cpp |   53 +-
 .../fwGuiQt/layoutManager/ToolboxLayoutManager.cpp |   24 +-
 SrcLib/core/fwGuiQt/src/fwGuiQt/util/FuncSlot.cpp  |    9 +-
 .../fwGuiQt/src/fwGuiQt/widget/QRangeSlider.cpp    |  103 +-
 .../core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp |  105 +-
 .../core/fwGuiQt/src/fwGuiQt/widget/SlideBar.cpp   |  224 +
 SrcLib/core/fwGuiQt/test/CMakeLists.txt            |   18 +-
 SrcLib/core/fwGuiQt/test/Properties.cmake          |    8 +-
 SrcLib/core/fwGuiQt/test/cppunit.options           |   18 -
 .../core/fwGuiQt/test/tu/include/WorkerQtTest.hpp  |    7 +-
 SrcLib/core/fwGuiQt/test/tu/src/WorkerQtTest.cpp   |  133 +-
 SrcLib/core/fwGuiWx/CMakeLists.txt                 |   19 -
 SrcLib/core/fwGuiWx/COPYING                        |  675 ---
 SrcLib/core/fwGuiWx/COPYING.LESSER                 |  166 -
 SrcLib/core/fwGuiWx/Properties.cmake               |    7 -
 SrcLib/core/fwGuiWx/bin/build.options              |   10 -
 .../fwGuiWx/include/fwGuiWx/ActionCallback.hpp     |   50 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/App.hpp        |   86 -
 .../core/fwGuiWx/include/fwGuiWx/Application.hpp   |   44 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/Cursor.hpp     |   53 -
 .../fwGuiWx/include/fwGuiWx/LoggerInitializer.hpp  |   28 -
 .../core/fwGuiWx/include/fwGuiWx/MessageEvent.hpp  |   42 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/Namespace.hpp  |   21 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/Shortcut.hpp   |  184 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/WorkerWx.hpp   |   27 -
 .../include/fwGuiWx/builder/ContainerBuilder.hpp   |   65 -
 .../include/fwGuiWx/builder/MenuBarBuilder.hpp     |   64 -
 .../fwGuiWx/include/fwGuiWx/builder/Namespace.hpp  |   25 -
 .../include/fwGuiWx/builder/ToolBarBuilder.hpp     |   64 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/config.hpp     |   43 -
 .../include/fwGuiWx/container/Namespace.hpp        |   25 -
 .../include/fwGuiWx/container/WxContainer.hpp      |   64 -
 .../fwGuiWx/container/WxMenuBarContainer.hpp       |   61 -
 .../include/fwGuiWx/container/WxMenuContainer.hpp  |   61 -
 .../fwGuiWx/container/WxMenuItemContainer.hpp      |   66 -
 .../fwGuiWx/container/WxToolBarContainer.hpp       |   61 -
 SrcLib/core/fwGuiWx/include/fwGuiWx/convert.hpp    |   32 -
 .../fwGuiWx/include/fwGuiWx/dialog/InputDialog.hpp |   80 -
 .../include/fwGuiWx/dialog/LocationDialog.hpp      |   66 -
 .../include/fwGuiWx/dialog/MessageDialog.hpp       |   76 -
 .../include/fwGuiWx/dialog/MultiSelectorDialog.hpp |   69 -
 .../fwGuiWx/include/fwGuiWx/dialog/Namespace.hpp   |   24 -
 .../include/fwGuiWx/dialog/ProgressDialog.hpp      |   63 -
 .../include/fwGuiWx/dialog/PulseProgressDialog.hpp |   93 -
 .../include/fwGuiWx/dialog/SelectorDialog.hpp      |   69 -
 .../layoutManager/CardinalLayoutManager.hpp        |   67 -
 .../fwGuiWx/layoutManager/FrameLayoutManager.hpp   |   68 -
 .../fwGuiWx/layoutManager/LineLayoutManager.hpp    |   61 -
 .../fwGuiWx/layoutManager/MenuBarLayoutManager.hpp |   80 -
 .../fwGuiWx/layoutManager/MenuLayoutManager.hpp    |   87 -
 .../include/fwGuiWx/layoutManager/Namespace.hpp    |   24 -
 .../fwGuiWx/layoutManager/TabLayoutManager.hpp     |   67 -
 .../fwGuiWx/layoutManager/ToolBarLayoutManager.hpp |   83 -
 .../include/fwGuiWx/widgets/ImageURLPanel.hpp      |   48 -
 .../fwGuiWx/include/fwGuiWx/widgets/Namespace.hpp  |   24 -
 .../include/fwGuiWx/widgets/colourpicker.hpp       |  162 -
 .../include/fwGuiWx/widgets/fwProgressDialog.hpp   |  177 -
 SrcLib/core/fwGuiWx/src/fwGuiWx/ActionCallback.cpp |   37 -
 SrcLib/core/fwGuiWx/src/fwGuiWx/App.cpp            |  315 --
 SrcLib/core/fwGuiWx/src/fwGuiWx/Application.cpp    |   31 -
 SrcLib/core/fwGuiWx/src/fwGuiWx/Cursor.cpp         |   65 -
 .../core/fwGuiWx/src/fwGuiWx/LoggerInitializer.cpp |  128 -
 SrcLib/core/fwGuiWx/src/fwGuiWx/Shortcut.cpp       |  358 --
 SrcLib/core/fwGuiWx/src/fwGuiWx/WorkerWx.cpp       |  370 --
 .../src/fwGuiWx/builder/ContainerBuilder.cpp       |  113 -
 .../fwGuiWx/src/fwGuiWx/builder/MenuBarBuilder.cpp |   74 -
 .../fwGuiWx/src/fwGuiWx/builder/ToolBarBuilder.cpp |   88 -
 .../fwGuiWx/src/fwGuiWx/container/WxContainer.cpp  |  109 -
 .../src/fwGuiWx/container/WxMenuBarContainer.cpp   |   64 -
 .../src/fwGuiWx/container/WxMenuContainer.cpp      |   59 -
 .../src/fwGuiWx/container/WxMenuItemContainer.cpp  |   69 -
 .../src/fwGuiWx/container/WxToolBarContainer.cpp   |   59 -
 SrcLib/core/fwGuiWx/src/fwGuiWx/convert.cpp        |   23 -
 .../fwGuiWx/src/fwGuiWx/dialog/InputDialog.cpp     |   59 -
 .../fwGuiWx/src/fwGuiWx/dialog/LocationDialog.cpp  |  177 -
 .../fwGuiWx/src/fwGuiWx/dialog/MessageDialog.cpp   |  122 -
 .../src/fwGuiWx/dialog/MultiSelectorDialog.cpp     |  129 -
 .../fwGuiWx/src/fwGuiWx/dialog/ProgressDialog.cpp  |   73 -
 .../src/fwGuiWx/dialog/PulseProgressDialog.cpp     |  201 -
 .../fwGuiWx/src/fwGuiWx/dialog/SelectorDialog.cpp  |  118 -
 .../layoutManager/CardinalLayoutManager.cpp        |  107 -
 .../fwGuiWx/layoutManager/FrameLayoutManager.cpp   |  185 -
 .../fwGuiWx/layoutManager/LineLayoutManager.cpp    |  100 -
 .../fwGuiWx/layoutManager/MenuBarLayoutManager.cpp |  106 -
 .../fwGuiWx/layoutManager/MenuLayoutManager.cpp    |  183 -
 .../src/fwGuiWx/layoutManager/TabLayoutManager.cpp |   89 -
 .../fwGuiWx/layoutManager/ToolBarLayoutManager.cpp |  155 -
 .../fwGuiWx/src/fwGuiWx/widgets/ImageURLPanel.cpp  |   67 -
 .../fwGuiWx/src/fwGuiWx/widgets/colourpicker.cpp   |  432 --
 .../src/fwGuiWx/widgets/fwProgressDialog.cpp       |  696 ---
 SrcLib/core/fwGuiWx/test/CMakeLists.txt            |   12 -
 SrcLib/core/fwGuiWx/test/Properties.cmake          |    7 -
 SrcLib/core/fwGuiWx/test/cppunit.options           |   17 -
 .../core/fwGuiWx/test/tu/include/WorkerWxTest.hpp  |   59 -
 SrcLib/core/fwGuiWx/test/tu/src/WorkerWxTest.cpp   |  298 --
 SrcLib/core/fwJobs/CMakeLists.txt                  |    3 +
 SrcLib/core/fwJobs/Properties.cmake                |    7 +
 SrcLib/core/fwJobs/include/fwJobs/Aggregator.hpp   |  144 +
 SrcLib/core/fwJobs/include/fwJobs/IJob.hpp         |  421 ++
 SrcLib/core/fwJobs/include/fwJobs/Job.hpp          |  108 +
 SrcLib/core/fwJobs/include/fwJobs/Observer.hpp     |   95 +
 .../fwJobs/include/fwJobs/exception/Waiting.hpp    |   32 +
 SrcLib/core/fwJobs/include/fwJobs/namespace.hpp    |  280 ++
 SrcLib/core/fwJobs/src/fwJobs/Aggregator.cpp       |  188 +
 SrcLib/core/fwJobs/src/fwJobs/IJob.cpp             |  482 ++
 SrcLib/core/fwJobs/src/fwJobs/Job.cpp              |  111 +
 SrcLib/core/fwJobs/src/fwJobs/Observer.cpp         |   66 +
 .../core/fwJobs/src/fwJobs/exception/Waiting.cpp   |   26 +
 SrcLib/core/fwJobs/test/CMakeLists.txt             |   12 +
 SrcLib/core/fwJobs/test/Properties.cmake           |    7 +
 SrcLib/core/fwJobs/test/tu/include/JobTest.hpp     |   42 +
 SrcLib/core/fwJobs/test/tu/src/JobTest.cpp         |  812 +++
 SrcLib/core/fwLog/CMakeLists.txt                   |    6 +
 SrcLib/core/fwLog/Properties.cmake                 |   11 +
 SrcLib/core/fwLog/include/fwLog/Log.hpp            |   77 +
 SrcLib/core/fwLog/include/fwLog/Logger.hpp         |  142 +
 SrcLib/core/fwLog/include/fwLog/namespace.hpp      |   17 +
 SrcLib/core/fwLog/src/fwLog/Log.cpp                |   26 +
 SrcLib/core/fwLog/src/fwLog/Logger.cpp             |  106 +
 SrcLib/core/fwLog/test/CMakeLists.txt              |    7 +
 SrcLib/core/fwLog/test/Properties.cmake            |   12 +
 SrcLib/core/fwLog/test/tu/include/LoggerTest.hpp   |   35 +
 SrcLib/core/fwLog/test/tu/src/LoggerTest.cpp       |  119 +
 SrcLib/core/fwMath/CMakeLists.txt                  |    8 +-
 SrcLib/core/fwMath/bin/build.options               |    6 -
 SrcLib/core/fwMath/include/fwMath/Compare.hpp      |    3 +-
 .../core/fwMath/include/fwMath/IntrasecTypes.hpp   |   15 +-
 .../core/fwMath/include/fwMath/LineFunctions.hpp   |   90 +-
 .../core/fwMath/include/fwMath/MatrixFunctions.hpp |   39 +-
 .../core/fwMath/include/fwMath/MeshFunctions.hpp   |   68 +-
 SrcLib/core/fwMath/include/fwMath/Namespace.hpp    |   11 +-
 .../core/fwMath/include/fwMath/PlaneFunctions.hpp  |   29 +-
 .../core/fwMath/include/fwMath/VectorFunctions.hpp |   55 +-
 SrcLib/core/fwMath/include/fwMath/export.hpp       |   41 -
 SrcLib/core/fwMath/src/fwMath/LineFunctions.cpp    |  144 +-
 SrcLib/core/fwMath/src/fwMath/MatrixFunctions.cpp  |  134 +-
 SrcLib/core/fwMath/src/fwMath/MeshFunctions.cpp    |  202 +-
 SrcLib/core/fwMath/src/fwMath/PlaneFunctions.cpp   |  223 +-
 SrcLib/core/fwMath/src/fwMath/VectorFunctions.cpp  |  182 +-
 SrcLib/core/fwMath/test/CMakeLists.txt             |    7 +-
 SrcLib/core/fwMath/test/Properties.cmake           |    2 +-
 SrcLib/core/fwMath/test/cppunit.options            |   12 -
 SrcLib/core/fwMath/test/tu/include/CompareTest.hpp |   10 +-
 .../fwMath/test/tu/include/LineFunctionsTest.hpp   |   43 +
 .../fwMath/test/tu/include/MatrixFunctionsTest.hpp |   16 +-
 .../fwMath/test/tu/include/PlaneFunctionsTest.hpp  |   23 +-
 .../fwMath/test/tu/include/VectorFunctionsTest.hpp |   23 +-
 SrcLib/core/fwMath/test/tu/src/CompareTest.cpp     |   14 +-
 .../core/fwMath/test/tu/src/LineFunctionsTest.cpp  |  247 +
 .../fwMath/test/tu/src/MatrixFunctionsTest.cpp     |  166 +-
 .../core/fwMath/test/tu/src/PlaneFunctionsTest.cpp |  323 +-
 .../fwMath/test/tu/src/VectorFunctionsTest.cpp     |  284 +-
 SrcLib/core/fwMedData/CMakeLists.txt               |    9 -
 SrcLib/core/fwMedData/COPYING                      |  675 ---
 SrcLib/core/fwMedData/COPYING.LESSER               |  166 -
 SrcLib/core/fwMedData/bin/build.options            |    4 -
 .../fwMedData/include/fwMedData/ActivitySeries.hpp |   59 +-
 .../fwMedData/include/fwMedData/DicomSeries.hpp    |  236 +
 .../core/fwMedData/include/fwMedData/Equipment.hpp |   39 +-
 .../fwMedData/include/fwMedData/ImageSeries.hpp    |   43 +-
 .../fwMedData/include/fwMedData/ModelSeries.hpp    |   87 +-
 .../core/fwMedData/include/fwMedData/Patient.hpp   |   97 +-
 SrcLib/core/fwMedData/include/fwMedData/Series.hpp |  188 +-
 .../core/fwMedData/include/fwMedData/SeriesDB.hpp  |  212 +-
 SrcLib/core/fwMedData/include/fwMedData/Study.hpp  |  138 +-
 SrcLib/core/fwMedData/include/fwMedData/config.hpp |   41 -
 .../core/fwMedData/include/fwMedData/namespace.hpp |    2 +-
 SrcLib/core/fwMedData/include/fwMedData/types.hpp  |    6 +-
 .../fwMedData/src/fwMedData/ActivitySeries.cpp     |   33 +-
 .../core/fwMedData/src/fwMedData/DicomSeries.cpp   |  142 +
 SrcLib/core/fwMedData/src/fwMedData/Equipment.cpp  |   22 +-
 .../core/fwMedData/src/fwMedData/ImageSeries.cpp   |   24 +-
 .../core/fwMedData/src/fwMedData/ModelSeries.cpp   |   42 +-
 SrcLib/core/fwMedData/src/fwMedData/Patient.cpp    |   34 +-
 SrcLib/core/fwMedData/src/fwMedData/Series.cpp     |   65 +-
 SrcLib/core/fwMedData/src/fwMedData/SeriesDB.cpp   |   42 +-
 SrcLib/core/fwMedData/src/fwMedData/Study.cpp      |   43 +-
 SrcLib/core/fwMedData/test/CMakeLists.txt          |    7 +-
 SrcLib/core/fwMedData/test/Properties.cmake        |    2 +-
 SrcLib/core/fwMedData/test/cppunit.options         |   20 -
 .../test/tu/include/ActivitySeriesTest.hpp         |   12 +-
 .../fwMedData/test/tu/include/DicomSeriesTest.hpp  |   40 +
 .../fwMedData/test/tu/include/EquipmentTest.hpp    |   11 +-
 .../fwMedData/test/tu/include/ImageSeriesTest.hpp  |    8 +-
 .../fwMedData/test/tu/include/ModelSeriesTest.hpp  |   12 +-
 .../core/fwMedData/test/tu/include/PatientTest.hpp |   14 +-
 .../fwMedData/test/tu/include/SeriesDBTest.hpp     |   11 +-
 .../core/fwMedData/test/tu/include/SeriesTest.hpp  |   33 +-
 .../core/fwMedData/test/tu/include/StudyTest.hpp   |   18 +-
 .../fwMedData/test/tu/src/ActivitySeriesTest.cpp   |    8 +-
 .../core/fwMedData/test/tu/src/DicomSeriesTest.cpp |   79 +
 .../core/fwMedData/test/tu/src/EquipmentTest.cpp   |    5 +-
 .../core/fwMedData/test/tu/src/ImageSeriesTest.cpp |    7 +-
 .../core/fwMedData/test/tu/src/ModelSeriesTest.cpp |   66 +-
 SrcLib/core/fwMedData/test/tu/src/PatientTest.cpp  |    4 +-
 SrcLib/core/fwMedData/test/tu/src/SeriesDBTest.cpp |    3 +-
 SrcLib/core/fwMedData/test/tu/src/SeriesTest.cpp   |   28 +-
 SrcLib/core/fwMedData/test/tu/src/StudyTest.cpp    |    4 +-
 SrcLib/core/fwMedDataTools/CMakeLists.txt          |   14 +-
 SrcLib/core/fwMedDataTools/Properties.cmake        |    8 +-
 SrcLib/core/fwMedDataTools/bin/build.options       |    6 -
 .../include/fwMedDataTools/ModelSeries.hpp         |   79 +
 .../include/fwMedDataTools/config.hpp              |   40 -
 .../include/fwMedDataTools/functions.hpp           |   37 +-
 .../include/fwMedDataTools/helper/SeriesDB.hpp     |   77 +
 .../include/fwMedDataTools/namespace.hpp           |    7 +-
 .../src/fwMedDataTools/ModelSeries.cpp             |   79 +
 .../src/fwMedDataTools/functions.cpp               |   16 +-
 .../src/fwMedDataTools/helper/SeriesDB.cpp         |  114 +
 SrcLib/core/fwMedDataTools/test/CMakeLists.txt     |    6 +
 SrcLib/core/fwMedDataTools/test/Properties.cmake   |    6 +
 SrcLib/core/fwMedDataTools/test/cppunit.options    |    9 -
 .../test/tu/include/FunctionsTest.hpp              |   18 +-
 .../test/tu/include/ModelSeriesTest.hpp            |   42 +
 .../fwMedDataTools/test/tu/src/FunctionsTest.cpp   |    2 +-
 .../fwMedDataTools/test/tu/src/ModelSeriesTest.cpp |  180 +
 SrcLib/core/fwMemory/CMakeLists.txt                |   12 +-
 SrcLib/core/fwMemory/COPYING                       |  675 ---
 SrcLib/core/fwMemory/COPYING.LESSER                |  166 -
 SrcLib/core/fwMemory/Properties.cmake              |    3 +-
 SrcLib/core/fwMemory/bin/build.options             |   22 -
 .../include/fwMemory/BufferAllocationPolicy.hpp    |   36 +-
 .../core/fwMemory/include/fwMemory/BufferInfo.hpp  |   13 +-
 .../fwMemory/include/fwMemory/BufferManager.hpp    |   87 +-
 .../fwMemory/include/fwMemory/BufferObject.hpp     |   89 +-
 SrcLib/core/fwMemory/include/fwMemory/ByteSize.hpp |   26 +-
 .../core/fwMemory/include/fwMemory/FileFormat.hpp  |   11 +-
 .../core/fwMemory/include/fwMemory/FileHolder.hpp  |    8 +-
 SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp  |   35 +-
 .../core/fwMemory/include/fwMemory/Namespace.hpp   |   10 +-
 .../fwMemory/include/fwMemory/camp/declare.hpp     |    2 +-
 .../core/fwMemory/include/fwMemory/camp/mapper.hpp |   32 +-
 SrcLib/core/fwMemory/include/fwMemory/config.hpp   |   39 -
 .../include/fwMemory/exception/BadCast.hpp         |    6 +-
 .../fwMemory/include/fwMemory/exception/Memory.hpp |   12 +-
 .../include/fwMemory/policy/AlwaysDump.hpp         |   22 +-
 .../include/fwMemory/policy/BarrierDump.hpp        |   24 +-
 .../fwMemory/include/fwMemory/policy/NeverDump.hpp |   24 +-
 .../fwMemory/include/fwMemory/policy/ValveDump.hpp |   30 +-
 .../include/fwMemory/policy/factory/new.hpp        |    5 +-
 .../include/fwMemory/policy/registry/detail.hpp    |    4 +-
 .../include/fwMemory/policy/registry/macros.hpp    |    4 +-
 .../fwMemory/include/fwMemory/stream/in/Buffer.hpp |    4 +-
 .../include/fwMemory/stream/in/IFactory.hpp        |   10 +-
 .../fwMemory/include/fwMemory/stream/in/Raw.hpp    |   12 +-
 .../fwMemory/include/fwMemory/stream/in/RawZ.hpp   |    7 +-
 .../fwMemory/tools/DarwinMemoryMonitorTools.hpp    |    8 +-
 .../include/fwMemory/tools/MemoryMonitorTools.hpp  |   12 +-
 .../fwMemory/tools/PosixMemoryMonitorTools.hpp     |   48 +-
 .../fwMemory/tools/Win32MemoryMonitorTools.hpp     |   12 +-
 .../src/fwMemory/BufferAllocationPolicy.cpp        |   20 +-
 SrcLib/core/fwMemory/src/fwMemory/BufferInfo.cpp   |    6 +-
 .../core/fwMemory/src/fwMemory/BufferManager.cpp   |  226 +-
 SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp |   26 +-
 SrcLib/core/fwMemory/src/fwMemory/ByteSize.cpp     |   88 +-
 SrcLib/core/fwMemory/src/fwMemory/FileHolder.cpp   |   10 +-
 SrcLib/core/fwMemory/src/fwMemory/camp/declare.cpp |    2 +-
 .../fwMemory/src/fwMemory/policy/AlwaysDump.cpp    |   18 +-
 .../fwMemory/src/fwMemory/policy/BarrierDump.cpp   |   32 +-
 .../fwMemory/src/fwMemory/policy/NeverDump.cpp     |   11 +-
 .../fwMemory/src/fwMemory/policy/ValveDump.cpp     |   40 +-
 .../fwMemory/src/fwMemory/policy/factory/new.cpp   |    2 +-
 .../src/fwMemory/policy/registry/detail.cpp        |    4 +-
 .../fwMemory/src/fwMemory/stream/in/Buffer.cpp     |    5 +-
 .../core/fwMemory/src/fwMemory/stream/in/Raw.cpp   |    5 +-
 .../core/fwMemory/src/fwMemory/stream/in/RawZ.cpp  |   19 +-
 .../fwMemory/tools/DarwinMemoryMonitorTools.cpp    |   42 +-
 .../src/fwMemory/tools/MemoryMonitorTools.cpp      |    8 +-
 .../src/fwMemory/tools/PosixMemoryMonitorTools.cpp |  127 +-
 .../src/fwMemory/tools/Win32MemoryMonitorTools.cpp |   30 +-
 SrcLib/core/fwMemory/test/cppunit.options          |   10 -
 .../fwMemory/test/tu/include/BufferManagerTest.hpp |   16 +-
 .../fwMemory/test/tu/include/BufferObjectTest.hpp  |   18 +-
 .../core/fwMemory/test/tu/include/ByteSizeTest.hpp |   14 +-
 .../fwMemory/test/tu/src/BufferManagerTest.cpp     |    2 +-
 .../core/fwMemory/test/tu/src/BufferObjectTest.cpp |   32 +-
 SrcLib/core/fwMemory/test/tu/src/ByteSizeTest.cpp  |   10 +-
 SrcLib/core/fwPython/CMakeLists.txt                |   28 -
 SrcLib/core/fwPython/Properties.cmake              |    7 -
 SrcLib/core/fwPython/bin/build.options             |    5 -
 .../core/fwPython/include/fwPython/Interpreter.hpp |   69 -
 .../fwPython/include/fwPython/bindings/Image.hpp   |   18 -
 .../include/fwPython/bindings/STLContainers.hpp    |   24 -
 .../include/fwPython/bindings/STLContainers.hxx    |   32 -
 .../fwPython/include/fwPython/bindings/base.hpp    |   26 -
 .../include/fwPython/bindings/namespace.hpp        |   26 -
 SrcLib/core/fwPython/include/fwPython/config.hpp   |   39 -
 .../core/fwPython/include/fwPython/namespace.hpp   |   20 -
 SrcLib/core/fwPython/include/fwPython/python.hpp   |   32 -
 SrcLib/core/fwPython/src/fwPython/Interpreter.cpp  |  147 -
 .../core/fwPython/src/fwPython/bindings/Image.cpp  |  157 -
 .../src/fwPython/bindings/STLContainers.cpp        |   89 -
 .../core/fwPython/src/fwPython/bindings/base.cpp   |  142 -
 SrcLib/core/fwPython/src/fwPython/python.cpp       |  111 -
 SrcLib/core/fwPython/test/CMakeLists.txt           |   10 -
 SrcLib/core/fwPython/test/Properties.cmake         |    7 -
 SrcLib/core/fwPython/test/cppunit.options          |    8 -
 .../fwPython/test/tu/include/InterpreterTest.hpp   |   47 -
 .../core/fwPython/test/tu/src/InterpreterTest.cpp  |  170 -
 SrcLib/core/fwRender/CMakeLists.txt                |    5 -
 SrcLib/core/fwRender/COPYING                       |  675 ---
 SrcLib/core/fwRender/COPYING.LESSER                |  166 -
 SrcLib/core/fwRender/bin/build.options             |    7 -
 SrcLib/core/fwRender/include/fwRender/IRender.hpp  |   22 +-
 .../core/fwRender/include/fwRender/Namespace.hpp   |   10 +-
 SrcLib/core/fwRender/include/fwRender/config.hpp   |   39 -
 SrcLib/core/fwRender/src/fwRender/IRender.cpp      |   10 +-
 SrcLib/core/fwRuntime/CHANGES                      |  102 -
 SrcLib/core/fwRuntime/CMakeLists.txt               |   11 +-
 SrcLib/core/fwRuntime/COPYING                      |  675 ---
 SrcLib/core/fwRuntime/COPYING.LESSER               |  166 -
 SrcLib/core/fwRuntime/bin/build.options            |   10 -
 SrcLib/core/fwRuntime/doc/doxygen/doxyfile         |  214 -
 SrcLib/core/fwRuntime/header.txt                   |    3 -
 SrcLib/core/fwRuntime/include/fwRuntime/Bundle.hpp |  203 +-
 .../fwRuntime/include/fwRuntime/BundleElement.hpp  |   60 +-
 .../include/fwRuntime/ConfigurationElement.hpp     |  185 +-
 .../fwRuntime/ConfigurationElementContainer.hpp    |   49 +-
 .../core/fwRuntime/include/fwRuntime/Convert.hpp   |   25 +-
 .../include/fwRuntime/EConfigurationElement.hpp    |   76 +-
 .../fwRuntime/include/fwRuntime/EmptyPlugin.hpp    |   14 +-
 .../fwRuntime/include/fwRuntime/Executable.hpp     |   42 +-
 .../include/fwRuntime/ExecutableFactory.hpp        |   16 +-
 .../fwRuntime/ExecutableFactoryRegistrar.hpp       |   15 +-
 .../core/fwRuntime/include/fwRuntime/Extension.hpp |   75 +-
 .../fwRuntime/include/fwRuntime/ExtensionPoint.hpp |   89 +-
 .../fwRuntime/include/fwRuntime/IExecutable.hpp    |   31 +-
 .../core/fwRuntime/include/fwRuntime/IPlugin.hpp   |   10 +-
 .../core/fwRuntime/include/fwRuntime/Namespace.hpp |   10 +-
 SrcLib/core/fwRuntime/include/fwRuntime/Plugin.hpp |   31 +-
 .../core/fwRuntime/include/fwRuntime/Runtime.hpp   |  108 +-
 .../include/fwRuntime/RuntimeException.hpp         |   10 +-
 .../core/fwRuntime/include/fwRuntime/Version.hpp   |   24 +-
 SrcLib/core/fwRuntime/include/fwRuntime/config.hpp |   42 -
 .../core/fwRuntime/include/fwRuntime/dl/Darwin.hpp |  110 -
 .../core/fwRuntime/include/fwRuntime/dl/Darwin.hxx |   31 -
 .../include/fwRuntime/dl/DarwinNameDecorator.hpp   |   53 -
 .../include/fwRuntime/dl/INameDecorator.hpp        |   53 -
 .../fwRuntime/include/fwRuntime/dl/Library.hpp     |   64 +-
 .../include/fwRuntime/dl/NameDecorator.hpp         |   81 -
 .../fwRuntime/include/fwRuntime/dl/Namespace.hpp   |   10 +-
 .../core/fwRuntime/include/fwRuntime/dl/Native.hpp |   68 +-
 .../core/fwRuntime/include/fwRuntime/dl/Posix.hpp  |   25 +-
 .../include/fwRuntime/dl/PosixNameDecorator.hpp    |   53 -
 .../core/fwRuntime/include/fwRuntime/dl/Win32.hpp  |   24 +-
 .../include/fwRuntime/dl/Win32NameDecorator.hpp    |   53 -
 SrcLib/core/fwRuntime/include/fwRuntime/helper.hpp |   43 +-
 .../fwRuntime/io/BundleDescriptorReader.hpp        |  186 +-
 .../fwRuntime/include/fwRuntime/io/Namespace.hpp   |   10 +-
 .../include/fwRuntime/io/ProfileReader.hpp         |  167 +-
 .../fwRuntime/include/fwRuntime/io/Validator.hpp   |   33 +-
 .../fwRuntime/include/fwRuntime/operations.hpp     |   93 +-
 .../fwRuntime/include/fwRuntime/predicates.hpp     |   45 -
 .../include/fwRuntime/profile/Activater.hpp        |   20 +-
 .../include/fwRuntime/profile/Initializer.hpp      |   12 +-
 .../include/fwRuntime/profile/Namespace.hpp        |   10 +-
 .../include/fwRuntime/profile/Profile.hpp          |  125 +-
 .../include/fwRuntime/profile/Starter.hpp          |   12 +-
 .../include/fwRuntime/profile/Stopper.hpp          |   15 +-
 .../include/fwRuntime/profile/Uninitializer.hpp    |   12 +-
 .../fwRuntime/utils/GenericExecutableFactory.hpp   |   38 +-
 .../utils/GenericExecutableFactoryRegistrar.hpp    |   15 +-
 .../include/fwRuntime/utils/Namespace.hpp          |   10 +-
 .../fwRuntime/rc/locale/en/LC_MESSAGES/runtime.po  |   17 -
 .../fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.po  |   17 -
 .../fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.pot |    0
 SrcLib/core/fwRuntime/src/Bundle.cpp               |  217 +-
 SrcLib/core/fwRuntime/src/BundleElement.cpp        |   16 +-
 SrcLib/core/fwRuntime/src/ConfigurationElement.cpp |   56 +-
 .../src/ConfigurationElementContainer.cpp          |   43 +-
 SrcLib/core/fwRuntime/src/Convert.cpp              |  180 +-
 .../core/fwRuntime/src/EConfigurationElement.cpp   |   16 +-
 SrcLib/core/fwRuntime/src/EmptyPlugin.cpp          |    8 +-
 SrcLib/core/fwRuntime/src/Executable.cpp           |    6 +-
 SrcLib/core/fwRuntime/src/ExecutableFactory.cpp    |   10 +-
 .../fwRuntime/src/ExecutableFactoryRegistrar.cpp   |    6 +-
 SrcLib/core/fwRuntime/src/Extension.cpp            |   35 +-
 SrcLib/core/fwRuntime/src/ExtensionPoint.cpp       |   21 +-
 SrcLib/core/fwRuntime/src/IExecutable.cpp          |    5 +-
 SrcLib/core/fwRuntime/src/IPlugin.cpp              |    5 +-
 SrcLib/core/fwRuntime/src/Plugin.cpp               |    9 +-
 SrcLib/core/fwRuntime/src/Runtime.cpp              |  171 +-
 SrcLib/core/fwRuntime/src/RuntimeException.cpp     |    9 +-
 SrcLib/core/fwRuntime/src/Version.cpp              |   62 +-
 SrcLib/core/fwRuntime/src/dl/Darwin.cpp            |  115 -
 .../core/fwRuntime/src/dl/DarwinNameDecoration.cpp |   35 -
 SrcLib/core/fwRuntime/src/dl/INameDecorator.cpp    |   26 -
 SrcLib/core/fwRuntime/src/dl/NameDecorator.cpp     |   51 -
 SrcLib/core/fwRuntime/src/dl/Native.cpp            |  108 +-
 SrcLib/core/fwRuntime/src/dl/Posix.cpp             |   32 +-
 .../core/fwRuntime/src/dl/PosixNameDecorator.cpp   |   35 -
 SrcLib/core/fwRuntime/src/dl/Win32.cpp             |   24 +-
 .../core/fwRuntime/src/dl/Win32NameDecorator.cpp   |   28 -
 SrcLib/core/fwRuntime/src/helper.cpp               |  113 +-
 .../fwRuntime/src/io/BundleDescriptorReader.cpp    |  136 +-
 SrcLib/core/fwRuntime/src/io/ProfileReader.cpp     |   54 +-
 SrcLib/core/fwRuntime/src/io/Validator.cpp         |   30 +-
 SrcLib/core/fwRuntime/src/operations.cpp           |   49 +-
 SrcLib/core/fwRuntime/src/profile/Activater.cpp    |   31 +-
 SrcLib/core/fwRuntime/src/profile/Initializer.cpp  |    7 +-
 SrcLib/core/fwRuntime/src/profile/Profile.cpp      |   95 +-
 SrcLib/core/fwRuntime/src/profile/Starter.cpp      |   18 +-
 SrcLib/core/fwRuntime/src/profile/Stopper.cpp      |    9 +-
 .../core/fwRuntime/src/profile/Uninitializer.cpp   |    9 +-
 SrcLib/core/fwRuntime/test/CMakeLists.txt          |    7 +-
 SrcLib/core/fwRuntime/test/Properties.cmake        |    4 +-
 SrcLib/core/fwRuntime/test/cppunit.options         |    9 -
 .../test/tu/include/EConfigurationElementTest.hpp  |   14 +-
 .../core/fwRuntime/test/tu/include/RuntimeTest.hpp |    8 +-
 .../test/tu/src/EConfigurationElementTest.cpp      |   19 +-
 SrcLib/core/fwRuntime/test/tu/src/RuntimeTest.cpp  |   58 +-
 SrcLib/core/fwServices/CMakeLists.txt              |   15 +-
 SrcLib/core/fwServices/COPYING                     |  675 ---
 SrcLib/core/fwServices/COPYING.LESSER              |  166 -
 SrcLib/core/fwServices/Properties.cmake            |    2 +-
 SrcLib/core/fwServices/bin/build.options           |   14 -
 .../include/fwServices/AppConfigManager.hpp        |  147 +-
 .../include/fwServices/AppConfigManager.hxx        |   32 -
 .../include/fwServices/AppConfigManager2.hpp       |  196 +
 SrcLib/core/fwServices/include/fwServices/Base.hpp |   25 -
 .../include/fwServices/IAppConfigManager.hpp       |  159 +
 .../fwServices/include/fwServices/IController.hpp  |   12 +-
 .../include/fwServices/IEditionService.hpp         |   88 -
 .../include/fwServices/IParametersService.hpp      |   87 +
 .../fwServices/include/fwServices/IService.hpp     |  455 +-
 .../fwServices/include/fwServices/IService.hxx     |  141 +-
 .../fwServices/include/fwServices/IXMLParser.hpp   |   36 +-
 .../fwServices/include/fwServices/Namespace.hpp    |  427 +-
 .../fwServices/include/fwServices/ObjectMsg.hpp    |  267 -
 .../include/fwServices/SConfigController.hpp       |   32 +-
 .../include/fwServices/ServiceFactoryRegistrar.hpp |    7 +-
 .../core/fwServices/include/fwServices/config.hpp  |   46 -
 .../fwServices/factory/message/namespace.hpp       |   31 -
 .../include/fwServices/factory/message/new.hpp     |   62 -
 .../include/fwServices/factory/namespace.hpp       |    4 +-
 .../fwServices/include/fwServices/factory/new.hpp  |   11 +-
 .../include/fwServices/helper/Config.hpp           |  131 +
 .../include/fwServices/helper/ConfigLauncher.hpp   |   51 +-
 .../include/fwServices/helper/ProxyConnections.hpp |   74 +
 .../fwServices/helper/SigSlotConnection.hpp        |   77 -
 .../core/fwServices/include/fwServices/macros.hpp  |   46 +-
 .../core/fwServices/include/fwServices/op/Add.hpp  |   16 +-
 .../core/fwServices/include/fwServices/op/Add.hxx  |   20 +-
 .../core/fwServices/include/fwServices/op/Get.hpp  |   16 +-
 .../core/fwServices/include/fwServices/op/Get.hxx  |   14 +-
 .../fwServices/include/fwServices/op/Namespace.hpp |   10 +-
 .../include/fwServices/registry/ActiveWorkers.hpp  |   14 +-
 .../include/fwServices/registry/AppConfig.hpp      |   92 +-
 .../include/fwServices/registry/AppConfig2.hpp     |  178 +
 .../fwServices/registry/AppConfigParameters.hpp    |   19 +-
 .../include/fwServices/registry/AppInfo.hpp        |   57 +
 .../include/fwServices/registry/Namespace.hpp      |   10 +-
 .../include/fwServices/registry/ObjectService.hpp  |  227 +-
 .../include/fwServices/registry/ObjectService.hxx  |   53 +-
 .../include/fwServices/registry/Proxy.hpp          |   17 +-
 .../include/fwServices/registry/ServiceConfig.hpp  |   40 +-
 .../include/fwServices/registry/ServiceFactory.hpp |   80 +-
 .../include/fwServices/registry/message/detail.hpp |   42 -
 .../include/fwServices/registry/message/macros.hpp |   26 -
 .../fwServices/registry/message/namespace.hpp      |   30 -
 .../fwServices/src/fwServices/AppConfigManager.cpp |  287 +-
 .../src/fwServices/AppConfigManager2.cpp           | 1064 ++++
 .../src/fwServices/IAppConfigManager.cpp           |   33 +
 .../core/fwServices/src/fwServices/IController.cpp |   10 +-
 .../fwServices/src/fwServices/IEditionService.cpp  |   75 -
 .../src/fwServices/IParametersService.cpp          |  104 +
 SrcLib/core/fwServices/src/fwServices/IService.cpp |  510 +-
 .../core/fwServices/src/fwServices/IXMLParser.cpp  |   38 +-
 .../core/fwServices/src/fwServices/ObjectMsg.cpp   |  254 -
 .../src/fwServices/SConfigController.cpp           |   87 +-
 .../src/fwServices/factory/message/new.cpp         |   33 -
 .../fwServices/src/fwServices/helper/Config.cpp    |  449 ++
 .../src/fwServices/helper/ConfigLauncher.cpp       |   46 +-
 .../src/fwServices/helper/SigSlotConnection.cpp    |   56 -
 SrcLib/core/fwServices/src/fwServices/op/Add.cpp   |   12 +-
 SrcLib/core/fwServices/src/fwServices/op/Get.cpp   |   11 +-
 .../src/fwServices/registry/ActiveWorkers.cpp      |   10 +-
 .../src/fwServices/registry/AppConfig.cpp          |  123 +-
 .../src/fwServices/registry/AppConfig2.cpp         |  363 ++
 .../fwServices/registry/AppConfigParameters.cpp    |   39 +-
 .../src/fwServices/registry/ObjectService.cpp      |  369 +-
 .../fwServices/src/fwServices/registry/Proxy.cpp   |   33 +-
 .../src/fwServices/registry/ServiceConfig.cpp      |   41 +-
 .../src/fwServices/registry/ServiceFactory.cpp     |  150 +-
 .../src/fwServices/registry/message/detail.cpp     |   37 -
 SrcLib/core/fwServices/test/CMakeLists.txt         |   15 +-
 SrcLib/core/fwServices/test/Properties.cmake       |    6 +-
 SrcLib/core/fwServices/test/cppunit.options        |   18 -
 .../test/tu/include/ActiveWorkersTest.hpp          |   14 +-
 .../fwServices/test/tu/include/AppConfig2Test.hpp  |   68 +
 .../test/tu/include/AppConfigParametersTest.hpp    |   16 +-
 .../fwServices/test/tu/include/AppConfigTest.hpp   |   16 +-
 .../test/tu/include/ConfigParserTest.hpp           |   58 +
 .../fwServices/test/tu/include/ObjectMsgTest.hpp   |   41 -
 .../test/tu/include/ObjectServiceTest.hpp          |   37 +-
 .../core/fwServices/test/tu/include/ProxyTest.hpp  |   14 +-
 .../test/tu/include/ServiceConfigTest.hpp          |   16 +-
 .../fwServices/test/tu/include/ServiceTest.hpp     |   89 +-
 .../test/tu/include/SigSlotConnectionTest.hpp      |   14 +-
 .../test/tu/include/SlotsSignalsStuff.hpp          |  144 +-
 .../test/tu/include/SlotsSignalsTest.hpp           |   11 +-
 .../fwServices/test/tu/include/TestService.hpp     |  284 ++
 .../fwServices/test/tu/include/TestServices.hpp    |  130 +
 .../test/tu/rc/AppConfigParametersTest/plugin.xml  |    2 +-
 .../fwServices/test/tu/src/ActiveWorkersTest.cpp   |   10 +-
 .../core/fwServices/test/tu/src/AppConfig2Test.cpp | 1711 +++++++
 .../test/tu/src/AppConfigParametersTest.cpp        |   48 +-
 .../core/fwServices/test/tu/src/AppConfigTest.cpp  |   74 +-
 .../fwServices/test/tu/src/ConfigParserTest.cpp    |  235 +
 .../core/fwServices/test/tu/src/ObjectMsgTest.cpp  |   64 -
 .../fwServices/test/tu/src/ObjectServiceTest.cpp   |  321 +-
 SrcLib/core/fwServices/test/tu/src/ProxyTest.cpp   |   13 +-
 .../fwServices/test/tu/src/ServiceConfigTest.cpp   |   30 +-
 SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp |  267 +-
 .../test/tu/src/SigSlotConnectionTest.cpp          |   28 +-
 .../fwServices/test/tu/src/SlotsSignalsStuff.cpp   |   86 +-
 .../fwServices/test/tu/src/SlotsSignalsTest.cpp    |   35 +-
 SrcLib/core/fwServices/test/tu/src/TestService.cpp |   31 +
 .../core/fwServices/test/tu/src/TestServices.cpp   |   19 +
 SrcLib/core/fwThread/CMakeLists.txt                |    7 -
 SrcLib/core/fwThread/COPYING                       |  675 ---
 SrcLib/core/fwThread/COPYING.LESSER                |  166 -
 SrcLib/core/fwThread/bin/build.options             |   10 -
 .../core/fwThread/include/fwThread/Namespace.hpp   |    4 +-
 SrcLib/core/fwThread/include/fwThread/Pool.hpp     |  109 +
 .../core/fwThread/include/fwThread/TaskHandler.hpp |   18 +-
 .../core/fwThread/include/fwThread/TaskHandler.hxx |   11 +-
 SrcLib/core/fwThread/include/fwThread/Timer.hpp    |   19 +-
 SrcLib/core/fwThread/include/fwThread/Worker.hpp   |   16 +-
 SrcLib/core/fwThread/include/fwThread/Worker.hxx   |    2 +-
 SrcLib/core/fwThread/include/fwThread/config.hpp   |   43 -
 SrcLib/core/fwThread/src/fwThread/Pool.cpp         |  101 +
 SrcLib/core/fwThread/src/fwThread/Timer.cpp        |    2 +-
 SrcLib/core/fwThread/src/fwThread/Worker.cpp       |    4 +-
 SrcLib/core/fwThread/src/fwThread/WorkerAsio.cpp   |   25 +-
 SrcLib/core/fwThread/test/CMakeLists.txt           |   15 +-
 SrcLib/core/fwThread/test/cppunit.options          |    4 -
 SrcLib/core/fwThread/test/tu/include/PoolTest.hpp  |   36 +
 .../fwThread/test/tu/include/TaskHandlerTest.hpp   |   10 +-
 .../core/fwThread/test/tu/include/WorkerTest.hpp   |   10 +-
 SrcLib/core/fwThread/test/tu/src/PoolTest.cpp      |  119 +
 .../core/fwThread/test/tu/src/TaskHandlerTest.cpp  |   10 +-
 SrcLib/core/fwThread/test/tu/src/WorkerTest.cpp    |   12 +-
 SrcLib/core/fwTools/CMakeLists.txt                 |    7 +-
 SrcLib/core/fwTools/COPYING                        |  675 ---
 SrcLib/core/fwTools/COPYING.LESSER                 |  166 -
 SrcLib/core/fwTools/Properties.cmake               |    9 +-
 SrcLib/core/fwTools/bin/build.options              |    5 -
 SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp  |   20 +-
 .../core/fwTools/include/fwTools/Combinatory.hpp   |   48 +-
 SrcLib/core/fwTools/include/fwTools/Dispatcher.hpp |  181 +-
 .../fwTools/include/fwTools/DynamicAttributes.hxx  |   47 +-
 .../core/fwTools/include/fwTools/DynamicType.hpp   |   28 +-
 .../core/fwTools/include/fwTools/DynamicType.hxx   |   60 +-
 .../include/fwTools/DynamicTypeKeyTypeMapping.hpp  |    2 +-
 SrcLib/core/fwTools/include/fwTools/Exception.hpp  |   10 +-
 SrcLib/core/fwTools/include/fwTools/Failed.hpp     |   10 +-
 .../core/fwTools/include/fwTools/IntegerTypes.hpp  |   12 +-
 .../fwTools/include/fwTools/IntrinsicTypes.hpp     |    2 +-
 SrcLib/core/fwTools/include/fwTools/Namespace.hpp  |   10 +-
 .../fwTools/include/fwTools/NumericRoundCast.hxx   |    8 +-
 SrcLib/core/fwTools/include/fwTools/Object.hpp     |   66 +-
 SrcLib/core/fwTools/include/fwTools/Os.hpp         |   24 +-
 .../fwTools/include/fwTools/ProgressAdviser.hpp    |   25 +-
 .../fwTools/include/fwTools/ProgressToLogger.hpp   |   14 +-
 .../include/fwTools/StringKeyTypeMapping.hpp       |    4 +-
 SrcLib/core/fwTools/include/fwTools/Stringizer.hpp |   14 +-
 SrcLib/core/fwTools/include/fwTools/System.hpp     |   14 +-
 SrcLib/core/fwTools/include/fwTools/Type.hpp       |   55 +-
 SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp   |    4 +-
 .../include/fwTools/TypeInfoKeyTypeMapping.hpp     |    8 +-
 .../core/fwTools/include/fwTools/TypeMapping.hpp   |   63 +-
 SrcLib/core/fwTools/include/fwTools/UUID.hpp       |   23 +-
 SrcLib/core/fwTools/include/fwTools/config.hpp     |   53 -
 .../core/fwTools/include/fwTools/dateAndTime.hpp   |   11 +-
 .../include/fwTools/fromIsoExtendedString.hpp      |    4 +-
 SrcLib/core/fwTools/include/fwTools/fwID.hpp       |  100 +-
 SrcLib/core/fwTools/include/fwTools/macros.hpp     |   52 +-
 .../fwTools/include/fwTools/pathDifference.hpp     |    8 +-
 .../fwTools/include/fwTools/random/Generator.hpp   |   11 +-
 SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp      |   29 +-
 SrcLib/core/fwTools/src/fwTools/DynamicType.cpp    |   36 +-
 .../src/fwTools/DynamicTypeKeyTypeMapping.cpp      |    5 +-
 SrcLib/core/fwTools/src/fwTools/Exception.cpp      |   10 +-
 SrcLib/core/fwTools/src/fwTools/Failed.cpp         |   12 +-
 SrcLib/core/fwTools/src/fwTools/Object.cpp         |    9 +-
 SrcLib/core/fwTools/src/fwTools/Os.cpp             |   16 +-
 .../core/fwTools/src/fwTools/ProgressAdviser.cpp   |   15 +-
 .../core/fwTools/src/fwTools/ProgressToLogger.cpp  |   16 +-
 .../fwTools/src/fwTools/StringKeyTypeMapping.cpp   |    5 +-
 SrcLib/core/fwTools/src/fwTools/Stringizer.cpp     |    4 +-
 SrcLib/core/fwTools/src/fwTools/System.cpp         |   52 +-
 SrcLib/core/fwTools/src/fwTools/Type.cpp           |   98 +-
 SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp       |   18 +-
 .../fwTools/src/fwTools/TypeInfoKeyTypeMapping.cpp |    5 +-
 SrcLib/core/fwTools/src/fwTools/UUID.cpp           |    5 +-
 SrcLib/core/fwTools/src/fwTools/dateAndTime.cpp    |   26 +-
 .../fwTools/src/fwTools/fromIsoExtendedString.cpp  |   18 +-
 SrcLib/core/fwTools/src/fwTools/fwID.cpp           |   31 +-
 SrcLib/core/fwTools/src/fwTools/pathDifference.cpp |   12 +-
 SrcLib/core/fwTools/test/CMakeLists.txt            |   15 +-
 SrcLib/core/fwTools/test/cppunit.options           |   17 -
 .../fwTools/test/tu/include/DynamicTypeTest.hpp    |    8 +-
 SrcLib/core/fwTools/test/tu/include/FwIDTest.hpp   |   14 +-
 SrcLib/core/fwTools/test/tu/include/MacrosTest.hpp |    8 +-
 .../test/tu/include/NumericRoundCastTest.hpp       |   16 +-
 SrcLib/core/fwTools/test/tu/include/ObjectTest.hpp |    8 +-
 SrcLib/core/fwTools/test/tu/include/RandomTest.hpp |   12 +-
 .../fwTools/test/tu/include/StringizerTest.hpp     |    8 +-
 SrcLib/core/fwTools/test/tu/include/TypeTest.hpp   |    8 +-
 SrcLib/core/fwTools/test/tu/include/UUIDTest.hpp   |   14 +-
 .../core/fwTools/test/tu/src/DynamicTypeTest.cpp   |    2 +-
 SrcLib/core/fwTools/test/tu/src/FwIDTest.cpp       |   43 +-
 SrcLib/core/fwTools/test/tu/src/MacrosTest.cpp     |   23 +-
 .../fwTools/test/tu/src/NumericRoundCastTest.cpp   |   32 +-
 SrcLib/core/fwTools/test/tu/src/ObjectTest.cpp     |    7 +-
 SrcLib/core/fwTools/test/tu/src/RandomTest.cpp     |   14 +-
 SrcLib/core/fwTools/test/tu/src/StringizerTest.cpp |    4 +-
 SrcLib/core/fwTools/test/tu/src/TypeTest.cpp       |   32 +-
 SrcLib/core/fwTools/test/tu/src/UUIDTest.cpp       |   36 +-
 SrcLib/core/fwZip/CMakeLists.txt                   |    8 +-
 SrcLib/core/fwZip/COPYING                          |  675 ---
 SrcLib/core/fwZip/COPYING.LESSER                   |  166 -
 SrcLib/core/fwZip/bin/build.options                |    7 -
 SrcLib/core/fwZip/include/Namespace.hpp            |   10 +-
 SrcLib/core/fwZip/include/fwZip/IReadArchive.hpp   |   14 +-
 SrcLib/core/fwZip/include/fwZip/IWriteArchive.hpp  |   12 +-
 SrcLib/core/fwZip/include/fwZip/ReadDirArchive.hpp |   10 +-
 SrcLib/core/fwZip/include/fwZip/ReadZipArchive.hpp |   12 +-
 .../core/fwZip/include/fwZip/WriteDirArchive.hpp   |   12 +-
 .../core/fwZip/include/fwZip/WriteZipArchive.hpp   |   19 +-
 SrcLib/core/fwZip/include/fwZip/config.hpp         |   43 -
 SrcLib/core/fwZip/include/fwZip/exception/Read.hpp |    4 +-
 .../core/fwZip/include/fwZip/exception/Write.hpp   |    4 +-
 SrcLib/core/fwZip/include/minizip/crypt.h          |   34 +-
 SrcLib/core/fwZip/include/minizip/export.h         |   12 +-
 SrcLib/core/fwZip/include/minizip/ioapi.h          |  113 +-
 SrcLib/core/fwZip/include/minizip/iowin32.h        |   13 +-
 SrcLib/core/fwZip/include/minizip/mztools.h        |   30 +-
 SrcLib/core/fwZip/include/minizip/unzip.h          |  258 +-
 SrcLib/core/fwZip/include/minizip/zip.h            |  348 +-
 SrcLib/core/fwZip/src/fwZip/ReadDirArchive.cpp     |   20 +-
 SrcLib/core/fwZip/src/fwZip/ReadZipArchive.cpp     |   82 +-
 SrcLib/core/fwZip/src/fwZip/WriteDirArchive.cpp    |   41 +-
 SrcLib/core/fwZip/src/fwZip/WriteZipArchive.cpp    |  100 +-
 SrcLib/core/fwZip/src/fwZip/exception/Read.cpp     |    5 +-
 SrcLib/core/fwZip/src/fwZip/exception/Write.cpp    |    5 +-
 SrcLib/core/fwZip/src/minizip/ioapi.c              |  160 +-
 SrcLib/core/fwZip/src/minizip/iowin32.c            |  226 +-
 SrcLib/core/fwZip/src/minizip/mztools.c            |  532 +-
 SrcLib/core/fwZip/src/minizip/unzip.c              | 1513 ++++--
 SrcLib/core/fwZip/src/minizip/zip.c                | 2262 +++++----
 SrcLib/core/fwZip/test/CMakeLists.txt              |    8 +
 SrcLib/core/fwZip/test/Properties.cmake            |    7 +
 SrcLib/core/fwZip/test/tu/include/DirTest.hpp      |   38 +
 SrcLib/core/fwZip/test/tu/include/ZipTest.hpp      |   34 +
 SrcLib/core/fwZip/test/tu/src/DirTest.cpp          |   93 +
 SrcLib/core/fwZip/test/tu/src/ZipTest.cpp          |   65 +
 SrcLib/io/fwAtomsBoostIO/CMakeLists.txt            |    3 -
 SrcLib/io/fwAtomsBoostIO/COPYING                   |  675 ---
 SrcLib/io/fwAtomsBoostIO/COPYING.LESSER            |  166 -
 SrcLib/io/fwAtomsBoostIO/Properties.cmake          |    8 +-
 SrcLib/io/fwAtomsBoostIO/bin/build.options         |    8 -
 .../include/fwAtomsBoostIO/Reader.hpp              |   17 +-
 .../include/fwAtomsBoostIO/Writer.hpp              |   21 +-
 .../include/fwAtomsBoostIO/config.hpp              |   41 -
 .../include/fwAtomsBoostIO/namespace.hpp           |   20 +
 .../include/fwAtomsBoostIO/types.hpp               |    8 +-
 .../fwAtomsBoostIO/src/fwAtomsBoostIO/Reader.cpp   |  456 +-
 .../fwAtomsBoostIO/src/fwAtomsBoostIO/Writer.cpp   |  419 +-
 SrcLib/io/fwAtomsBoostIO/test/CMakeLists.txt       |    4 +-
 SrcLib/io/fwAtomsBoostIO/test/Properties.cmake     |    2 +-
 SrcLib/io/fwAtomsBoostIO/test/cppunit.options      |   13 -
 .../fwAtomsBoostIO/test/tu/include/BoostIOTest.hpp |   18 +-
 .../io/fwAtomsBoostIO/test/tu/src/BoostIOTest.cpp  |   79 +-
 SrcLib/io/fwAtomsHdf5IO/CMakeLists.txt             |   20 -
 SrcLib/io/fwAtomsHdf5IO/COPYING                    |  675 ---
 SrcLib/io/fwAtomsHdf5IO/COPYING.LESSER             |  166 -
 SrcLib/io/fwAtomsHdf5IO/Properties.cmake           |    7 -
 SrcLib/io/fwAtomsHdf5IO/bin/build.options          |    4 -
 .../fwAtomsHdf5IO/include/fwAtomsHdf5IO/Reader.hpp |   54 -
 .../fwAtomsHdf5IO/include/fwAtomsHdf5IO/Writer.hpp |   69 -
 .../fwAtomsHdf5IO/include/fwAtomsHdf5IO/config.hpp |   41 -
 .../io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Reader.cpp  |  360 --
 .../io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Writer.cpp  |  253 -
 SrcLib/io/fwAtomsHdf5IO/test/CMakeLists.txt        |    7 -
 SrcLib/io/fwAtomsHdf5IO/test/Properties.cmake      |    7 -
 SrcLib/io/fwAtomsHdf5IO/test/cppunit.options       |    7 -
 .../fwAtomsHdf5IO/test/tu/include/Hdf5IOTest.hpp   |   46 -
 SrcLib/io/fwAtomsHdf5IO/test/tu/src/Hdf5IOTest.cpp |  263 -
 SrcLib/io/fwDcmtkIO/CMakeLists.txt                 |   12 +
 SrcLib/io/fwDcmtkIO/Properties.cmake               |   22 +
 .../include/fwDcmtkIO/DicomSeriesDBReader.hpp      |  196 +
 .../fwDcmtkIO/include/fwDcmtkIO/SeriesDBReader.hpp |  193 +
 .../fwDcmtkIO/include/fwDcmtkIO/helper/Codec.hpp   |   36 +
 .../include/fwDcmtkIO/helper/DicomDir.hpp          |   43 +
 .../include/fwDcmtkIO/helper/DicomSearch.hpp       |   46 +
 .../io/fwDcmtkIO/include/fwDcmtkIO/namespace.hpp   |   38 +
 .../include/fwDcmtkIO/reader/IObjectReader.hpp     |   43 +
 .../fwDcmtkIO/reader/ImageStorageReader.hpp        |  116 +
 .../include/fwDcmtkIO/reader/ImageTagReader.hpp    |   47 +
 .../include/fwDcmtkIO/reader/MPPSReader.hpp        |   46 +
 .../fwDcmtkIO/reader/main/ImageLazyReader.hpp      |  247 +
 .../fwDcmtkIO/reader/main/ImageLazyStream.hpp      |  140 +
 .../include/fwDcmtkIO/reader/main/ImageReader.hpp  |  284 ++
 .../reader/rgblookup/ImageRGBLookupLazyReader.hpp  |  146 +
 .../reader/rgblookup/ImageRGBLookupLazyStream.hpp  |  146 +
 .../reader/rgblookup/ImageRGBLookupReader.hpp      |   96 +
 .../rc/test/DicomMetadataJsonGenerator.sh          |  113 +
 .../src/fwDcmtkIO/DicomSeriesDBReader.cpp          |  474 ++
 .../io/fwDcmtkIO/src/fwDcmtkIO/SeriesDBReader.cpp  |  446 ++
 SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/Codec.cpp |   40 +
 .../io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomDir.cpp |  184 +
 .../fwDcmtkIO/src/fwDcmtkIO/helper/DicomSearch.cpp |   76 +
 .../src/fwDcmtkIO/reader/IObjectReader.cpp         |   25 +
 .../src/fwDcmtkIO/reader/ImageStorageReader.cpp    |  405 ++
 .../src/fwDcmtkIO/reader/ImageTagReader.cpp        |  144 +
 .../fwDcmtkIO/src/fwDcmtkIO/reader/MPPSReader.cpp  |  129 +
 .../src/fwDcmtkIO/reader/main/ImageLazyStream.cpp  |  159 +
 .../reader/rgblookup/ImageRGBLookupLazyStream.cpp  |  219 +
 SrcLib/io/fwDcmtkIO/test/CMakeLists.txt            |   10 +
 SrcLib/io/fwDcmtkIO/test/Properties.cmake          |   15 +
 SrcLib/io/fwDcmtkIO/test/cppunit.options           |   22 +
 .../io/fwDcmtkIO/test/tu/include/DicomDirTest.hpp  |   40 +
 .../test/tu/include/DicomSeriesDBReaderTest.hpp    |   38 +
 .../test/tu/include/SeriesDBReaderTest.hpp         |   91 +
 SrcLib/io/fwDcmtkIO/test/tu/src/DicomDirTest.cpp   |   72 +
 .../test/tu/src/DicomSeriesDBReaderTest.cpp        |   61 +
 .../fwDcmtkIO/test/tu/src/SeriesDBReaderTest.cpp   |  611 +++
 SrcLib/io/fwDcmtkTools/CMakeLists.txt              |    8 +
 SrcLib/io/fwDcmtkTools/Properties.cmake            |    6 +
 .../include/fwDcmtkTools/Dictionary.hpp            |   33 +
 .../include/fwDcmtkTools/namespace.hpp             |   16 +
 SrcLib/io/fwDcmtkTools/rc/dicom.dic                | 3908 +++++++++++++++
 .../fwDcmtkTools/src/fwDcmtkTools/Dictionary.cpp   |   37 +
 SrcLib/io/fwDicomIOFilter/CMakeLists.txt           |    5 +
 SrcLib/io/fwDicomIOFilter/Properties.cmake         |   11 +
 .../include/fwDicomIOFilter/IFilter.hpp            |  103 +
 .../include/fwDicomIOFilter/Plugin.hpp             |   31 +
 .../composite/CTImageStorageDefaultComposite.hpp   |   54 +
 .../fwDicomIOFilter/composite/IComposite.hpp       |   73 +
 .../fwDicomIOFilter/custom/DefaultDicomFilter.hpp  |   59 +
 .../include/fwDicomIOFilter/custom/ICustom.hpp     |   44 +
 .../include/fwDicomIOFilter/custom/NoFilter.hpp    |   58 +
 .../fwDicomIOFilter/exceptions/FilterFailure.hpp   |   40 +
 .../include/fwDicomIOFilter/factory/new.hpp        |   64 +
 .../include/fwDicomIOFilter/helper/Filter.hpp      |   44 +
 .../include/fwDicomIOFilter/modifier/IModifier.hpp |   44 +
 .../modifier/SliceThicknessModifier.hpp            |   72 +
 .../include/fwDicomIOFilter/namespace.hpp          |   82 +
 .../include/fwDicomIOFilter/registry/detail.hpp    |   37 +
 .../include/fwDicomIOFilter/registry/macros.hpp    |   23 +
 .../include/fwDicomIOFilter/sorter/ISorter.hpp     |   44 +
 .../sorter/ImagePositionPatientSorter.hpp          |   60 +
 .../sorter/InstanceNumberSorter.hpp                |   57 +
 .../fwDicomIOFilter/sorter/TagValueSorter.hpp      |   88 +
 .../splitter/AcquisitionNumberSplitter.hpp         |   57 +
 .../include/fwDicomIOFilter/splitter/ISplitter.hpp |   43 +
 .../splitter/ImageDimensionsSplitter.hpp           |   59 +
 .../splitter/ImageOrientationSplitter.hpp          |   55 +
 .../splitter/ImagePositionPatientSplitter.hpp      |   60 +
 .../fwDicomIOFilter/splitter/ImageTypeSplitter.hpp |   55 +
 .../splitter/SOPClassUIDSplitter.hpp               |   62 +
 .../splitter/TagValueInstanceRemoveSplitter.hpp    |  112 +
 .../fwDicomIOFilter/splitter/TagValueSplitter.hpp  |   91 +
 .../splitter/TemporalPositionSplitter.hpp          |   55 +
 .../src/fwDicomIOFilter/IFilter.cpp                |   43 +
 .../fwDicomIOFilter/src/fwDicomIOFilter/Plugin.cpp |   22 +
 .../composite/CTImageStorageDefaultComposite.cpp   |   76 +
 .../src/fwDicomIOFilter/composite/IComposite.cpp   |  112 +
 .../fwDicomIOFilter/custom/DefaultDicomFilter.cpp  |  119 +
 .../src/fwDicomIOFilter/custom/ICustom.cpp         |   32 +
 .../src/fwDicomIOFilter/custom/NoFilter.cpp        |   59 +
 .../fwDicomIOFilter/exceptions/FilterFailure.cpp   |   25 +
 .../src/fwDicomIOFilter/factory/new.cpp            |   26 +
 .../src/fwDicomIOFilter/helper/Filter.cpp          |   66 +
 .../src/fwDicomIOFilter/modifier/IModifier.cpp     |   32 +
 .../modifier/SliceThicknessModifier.cpp            |  160 +
 .../src/fwDicomIOFilter/registry/detail.cpp        |   29 +
 .../src/fwDicomIOFilter/sorter/ISorter.cpp         |   32 +
 .../sorter/ImagePositionPatientSorter.cpp          |  137 +
 .../sorter/InstanceNumberSorter.cpp                |   64 +
 .../src/fwDicomIOFilter/sorter/TagValueSorter.cpp  |  124 +
 .../splitter/AcquisitionNumberSplitter.cpp         |   62 +
 .../src/fwDicomIOFilter/splitter/ISplitter.cpp     |   32 +
 .../splitter/ImageDimensionsSplitter.cpp           |   80 +
 .../splitter/ImageOrientationSplitter.cpp          |   62 +
 .../splitter/ImagePositionPatientSplitter.cpp      |  151 +
 .../fwDicomIOFilter/splitter/ImageTypeSplitter.cpp |   62 +
 .../splitter/SOPClassUIDSplitter.cpp               |  106 +
 .../splitter/TagValueInstanceRemoveSplitter.cpp    |  124 +
 .../fwDicomIOFilter/splitter/TagValueSplitter.cpp  |  137 +
 .../splitter/TemporalPositionSplitter.cpp          |   60 +
 SrcLib/io/fwDicomIOFilter/test/CMakeLists.txt      |   21 +
 SrcLib/io/fwDicomIOFilter/test/Properties.cmake    |   18 +
 .../tu/include/AcquisitionNumberSplitterTest.hpp   |   42 +
 .../include/CTImageStorageDefaultCompositeTest.hpp |   42 +
 .../tu/include/DefaultDicomFilterCustomTest.hpp    |   42 +
 .../tu/include/ImagePositionPatientSorterTest.hpp  |   46 +
 .../include/ImagePositionPatientSplitterTest.hpp   |   46 +
 .../test/tu/include/InstanceNumberSorterTest.hpp   |   42 +
 .../test/tu/include/NoFilterCustomTest.hpp         |   42 +
 .../test/tu/include/SOPClassUIDSplitterTest.hpp    |   42 +
 .../test/tu/include/SliceThicknessModifierTest.hpp |   46 +
 .../include/TagValueInstanceRemoveSplitterTest.hpp |   42 +
 .../test/tu/src/AcquisitionNumberSplitterTest.cpp  |   84 +
 .../tu/src/CTImageStorageDefaultCompositeTest.cpp  |  113 +
 .../test/tu/src/DefaultDicomFilterCustomTest.cpp   |  124 +
 .../test/tu/src/ImagePositionPatientSorterTest.cpp |  186 +
 .../tu/src/ImagePositionPatientSplitterTest.cpp    |  130 +
 .../test/tu/src/InstanceNumberSorterTest.cpp       |  116 +
 .../test/tu/src/NoFilterCustomTest.cpp             |   97 +
 .../test/tu/src/SOPClassUIDSplitterTest.cpp        |   84 +
 .../test/tu/src/SliceThicknessModifierTest.cpp     |  123 +
 .../tu/src/TagValueInstanceRemoveSplitterTest.cpp  |   88 +
 SrcLib/io/fwGdcmIO/CMakeLists.txt                  |   11 +
 SrcLib/io/fwGdcmIO/Properties.cmake                |   24 +
 .../fwGdcmIO/container/DicomCodedAttribute.hpp     |  113 +
 .../include/fwGdcmIO/container/DicomInstance.hpp   |  168 +
 .../include/fwGdcmIO/container/DicomSurface.hpp    |  142 +
 .../fwGdcmIO/container/sr/DicomSRCodeNode.hpp      |   73 +
 .../fwGdcmIO/container/sr/DicomSRContainerNode.hpp |   52 +
 .../fwGdcmIO/container/sr/DicomSRImageNode.hpp     |  110 +
 .../include/fwGdcmIO/container/sr/DicomSRNode.hpp  |  149 +
 .../fwGdcmIO/container/sr/DicomSRNumNode.hpp       |   98 +
 .../fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp  |  106 +
 .../fwGdcmIO/container/sr/DicomSRSCoordNode.hpp    |   90 +
 .../fwGdcmIO/container/sr/DicomSRTextNode.hpp      |   73 +
 .../fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp    |   72 +
 .../fwGdcmIO/include/fwGdcmIO/exception/Failed.hpp |   33 +
 .../include/fwGdcmIO/helper/DicomAnonymizer.hpp    |  187 +
 .../fwGdcmIO/include/fwGdcmIO/helper/DicomData.hpp |  306 ++
 .../fwGdcmIO/include/fwGdcmIO/helper/DicomDir.hpp  |   66 +
 .../include/fwGdcmIO/helper/DicomSearch.hpp        |   63 +
 .../include/fwGdcmIO/helper/DicomSeries.hpp        |  152 +
 .../fwGdcmIO/helper/DicomSeriesAnonymizer.hpp      |   66 +
 .../fwGdcmIO/helper/DicomSeriesDBWriter.hpp        |   94 +
 .../include/fwGdcmIO/helper/DicomSeriesWriter.hpp  |  119 +
 .../include/fwGdcmIO/helper/DictionarySegment.hpp  |   59 +
 .../fwGdcmIO/include/fwGdcmIO/helper/Fiducial.hpp  |   56 +
 .../include/fwGdcmIO/helper/FileWriter.hpp         |   40 +
 .../include/fwGdcmIO/helper/StructuredReport.hpp   |  117 +
 SrcLib/io/fwGdcmIO/include/fwGdcmIO/namespace.hpp  |   20 +
 .../io/fwGdcmIO/include/fwGdcmIO/reader/Series.hpp |   99 +
 .../fwGdcmIO/include/fwGdcmIO/reader/SeriesDB.hpp  |  196 +
 .../include/fwGdcmIO/reader/ie/Document.hpp        |   71 +
 .../include/fwGdcmIO/reader/ie/Equipment.hpp       |   62 +
 .../fwGdcmIO/include/fwGdcmIO/reader/ie/Image.hpp  |  116 +
 .../fwGdcmIO/reader/ie/InformationEntity.hpp       |  116 +
 .../include/fwGdcmIO/reader/ie/Patient.hpp         |   60 +
 .../fwGdcmIO/include/fwGdcmIO/reader/ie/Series.hpp |   61 +
 .../fwGdcmIO/reader/ie/SpatialFiducials.hpp        |   66 +
 .../fwGdcmIO/include/fwGdcmIO/reader/ie/Study.hpp  |   67 +
 .../include/fwGdcmIO/reader/ie/Surface.hpp         |   80 +
 .../include/fwGdcmIO/reader/iod/CTMRImageIOD.hpp   |   63 +
 .../fwGdcmIO/reader/iod/ComprehensiveSRIOD.hpp     |   52 +
 .../reader/iod/InformationObjectDefinition.hpp     |   82 +
 .../fwGdcmIO/reader/iod/SpatialFiducialsIOD.hpp    |   54 +
 .../fwGdcmIO/reader/iod/SurfaceSegmentationIOD.hpp |   67 +
 .../include/fwGdcmIO/reader/tid/Fiducial.hpp       |   71 +
 .../include/fwGdcmIO/reader/tid/Measurement.hpp    |   74 +
 .../fwGdcmIO/reader/tid/MeasurementReport.hpp      |   60 +
 .../include/fwGdcmIO/reader/tid/TemplateID.hpp     |   96 +
 .../io/fwGdcmIO/include/fwGdcmIO/writer/Series.hpp |  107 +
 .../fwGdcmIO/include/fwGdcmIO/writer/SeriesDB.hpp  |   85 +
 .../include/fwGdcmIO/writer/ie/Document.hpp        |   77 +
 .../include/fwGdcmIO/writer/ie/Equipment.hpp       |   60 +
 .../fwGdcmIO/writer/ie/FrameOfReference.hpp        |   52 +
 .../fwGdcmIO/include/fwGdcmIO/writer/ie/Image.hpp  |  118 +
 .../fwGdcmIO/writer/ie/InformationEntity.hpp       |   82 +
 .../include/fwGdcmIO/writer/ie/Patient.hpp         |   52 +
 .../fwGdcmIO/include/fwGdcmIO/writer/ie/Series.hpp |   71 +
 .../fwGdcmIO/writer/ie/SpatialFiducials.hpp        |   87 +
 .../fwGdcmIO/include/fwGdcmIO/writer/ie/Study.hpp  |   59 +
 .../include/fwGdcmIO/writer/ie/Surface.hpp         |   81 +
 .../include/fwGdcmIO/writer/iod/CTMRImageIOD.hpp   |   46 +
 .../fwGdcmIO/writer/iod/ComprehensiveSRIOD.hpp     |   51 +
 .../writer/iod/InformationObjectDefinition.hpp     |   58 +
 .../fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp    |   47 +
 .../fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp |   52 +
 .../include/fwGdcmIO/writer/tid/Fiducial.hpp       |   75 +
 .../include/fwGdcmIO/writer/tid/Measurement.hpp    |   75 +
 .../fwGdcmIO/writer/tid/MeasurementReport.hpp      |   56 +
 .../include/fwGdcmIO/writer/tid/TemplateID.hpp     |   81 +
 .../src/fwGdcmIO/container/DicomCodedAttribute.cpp |   45 +
 .../src/fwGdcmIO/container/DicomInstance.cpp       |  142 +
 .../src/fwGdcmIO/container/DicomSurface.cpp        |  315 ++
 .../src/fwGdcmIO/container/sr/DicomSRCodeNode.cpp  |   60 +
 .../fwGdcmIO/container/sr/DicomSRContainerNode.cpp |   49 +
 .../src/fwGdcmIO/container/sr/DicomSRImageNode.cpp |   82 +
 .../src/fwGdcmIO/container/sr/DicomSRNode.cpp      |  141 +
 .../src/fwGdcmIO/container/sr/DicomSRNumNode.cpp   |   81 +
 .../fwGdcmIO/container/sr/DicomSRSCoord3DNode.cpp  |   78 +
 .../fwGdcmIO/container/sr/DicomSRSCoordNode.cpp    |   71 +
 .../src/fwGdcmIO/container/sr/DicomSRTextNode.cpp  |   57 +
 .../fwGdcmIO/container/sr/DicomSRUIDRefNode.cpp    |   57 +
 .../src/fwGdcmIO/helper/DicomAnonymizer.cpp        |  844 ++++
 .../io/fwGdcmIO/src/fwGdcmIO/helper/DicomData.cpp  |  256 +
 .../io/fwGdcmIO/src/fwGdcmIO/helper/DicomDir.cpp   |  224 +
 .../fwGdcmIO/src/fwGdcmIO/helper/DicomSearch.cpp   |  132 +
 .../fwGdcmIO/src/fwGdcmIO/helper/DicomSeries.cpp   |  484 ++
 .../src/fwGdcmIO/helper/DicomSeriesAnonymizer.cpp  |  122 +
 .../src/fwGdcmIO/helper/DicomSeriesDBWriter.cpp    |  175 +
 .../src/fwGdcmIO/helper/DicomSeriesWriter.cpp      |  377 ++
 .../src/fwGdcmIO/helper/DictionarySegment.cpp      |  388 ++
 .../io/fwGdcmIO/src/fwGdcmIO/helper/Fiducial.cpp   |  124 +
 .../io/fwGdcmIO/src/fwGdcmIO/helper/FileWriter.cpp |   42 +
 .../src/fwGdcmIO/helper/StructuredReport.cpp       |  281 ++
 SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/Series.cpp  |  335 ++
 .../io/fwGdcmIO/src/fwGdcmIO/reader/SeriesDB.cpp   |  454 ++
 .../fwGdcmIO/src/fwGdcmIO/reader/ie/Document.cpp   |   67 +
 .../fwGdcmIO/src/fwGdcmIO/reader/ie/Equipment.cpp  |   70 +
 .../io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp   |  664 +++
 .../io/fwGdcmIO/src/fwGdcmIO/reader/ie/Patient.cpp |   67 +
 .../io/fwGdcmIO/src/fwGdcmIO/reader/ie/Series.cpp  |   97 +
 .../src/fwGdcmIO/reader/ie/SpatialFiducials.cpp    |  106 +
 .../io/fwGdcmIO/src/fwGdcmIO/reader/ie/Study.cpp   |   91 +
 .../io/fwGdcmIO/src/fwGdcmIO/reader/ie/Surface.cpp |  241 +
 .../src/fwGdcmIO/reader/iod/CTMRImageIOD.cpp       |  136 +
 .../src/fwGdcmIO/reader/iod/ComprehensiveSRIOD.cpp |   77 +
 .../reader/iod/InformationObjectDefinition.cpp     |   40 +
 .../fwGdcmIO/reader/iod/SpatialFiducialsIOD.cpp    |  123 +
 .../fwGdcmIO/reader/iod/SurfaceSegmentationIOD.cpp |  151 +
 .../fwGdcmIO/src/fwGdcmIO/reader/tid/Fiducial.cpp  |  149 +
 .../src/fwGdcmIO/reader/tid/Measurement.cpp        |  129 +
 .../src/fwGdcmIO/reader/tid/MeasurementReport.cpp  |   72 +
 SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/Series.cpp  |  147 +
 .../io/fwGdcmIO/src/fwGdcmIO/writer/SeriesDB.cpp   |   96 +
 .../fwGdcmIO/src/fwGdcmIO/writer/ie/Document.cpp   |  188 +
 .../fwGdcmIO/src/fwGdcmIO/writer/ie/Equipment.cpp  |   76 +
 .../src/fwGdcmIO/writer/ie/FrameOfReference.cpp    |   55 +
 .../io/fwGdcmIO/src/fwGdcmIO/writer/ie/Image.cpp   |  277 ++
 .../io/fwGdcmIO/src/fwGdcmIO/writer/ie/Patient.cpp |   56 +
 .../io/fwGdcmIO/src/fwGdcmIO/writer/ie/Series.cpp  |  150 +
 .../src/fwGdcmIO/writer/ie/SpatialFiducials.cpp    |  304 ++
 .../io/fwGdcmIO/src/fwGdcmIO/writer/ie/Study.cpp   |   78 +
 .../io/fwGdcmIO/src/fwGdcmIO/writer/ie/Surface.cpp |  503 ++
 .../src/fwGdcmIO/writer/iod/CTMRImageIOD.cpp       |  151 +
 .../src/fwGdcmIO/writer/iod/ComprehensiveSRIOD.cpp |  101 +
 .../writer/iod/InformationObjectDefinition.cpp     |   35 +
 .../fwGdcmIO/writer/iod/SpatialFiducialsIOD.cpp    |  114 +
 .../fwGdcmIO/writer/iod/SurfaceSegmentationIOD.cpp |  142 +
 .../fwGdcmIO/src/fwGdcmIO/writer/tid/Fiducial.cpp  |  151 +
 .../src/fwGdcmIO/writer/tid/Measurement.cpp        |  161 +
 .../src/fwGdcmIO/writer/tid/MeasurementReport.cpp  |  148 +
 SrcLib/io/fwGdcmIO/test/CMakeLists.txt             |   14 +
 SrcLib/io/fwGdcmIO/test/Properties.cmake           |   19 +
 .../test/tu/include/DicomAnonymizerTest.hpp        |   52 +
 .../io/fwGdcmIO/test/tu/include/DicomDirTest.hpp   |   40 +
 .../test/tu/include/DicomSeriesWriterTest.hpp      |   61 +
 .../test/tu/include/SeriesDBReaderTest.hpp         |  135 +
 .../fwGdcmIO/test/tu/include/WriterReaderTest.hpp  |   50 +
 .../fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp   |  690 +++
 SrcLib/io/fwGdcmIO/test/tu/src/DicomDirTest.cpp    |   78 +
 .../fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp |  164 +
 .../io/fwGdcmIO/test/tu/src/SeriesDBReaderTest.cpp |  982 ++++
 .../io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp   |  224 +
 SrcLib/io/fwItkIO/CMakeLists.txt                   |   50 +-
 SrcLib/io/fwItkIO/Properties.cmake                 |    2 +-
 SrcLib/io/fwItkIO/bin/build.options                |   11 -
 .../include/fwItkIO/ImageIOFactoryRegistrar.hxx    |   11 +-
 SrcLib/io/fwItkIO/include/fwItkIO/ImageReader.hpp  |   16 +-
 SrcLib/io/fwItkIO/include/fwItkIO/ImageWriter.hpp  |   16 +-
 .../io/fwItkIO/include/fwItkIO/JpgImageWriter.hpp  |   12 +-
 SrcLib/io/fwItkIO/include/fwItkIO/config.hpp       |   39 -
 .../include/fwItkIO/helper/ProgressItkToFw.hpp     |   25 +-
 .../include/fwItkIO/helper/ProgressItkToFw.hxx     |   32 +-
 SrcLib/io/fwItkIO/include/fwItkIO/itk.hpp          |   14 +-
 SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx          |   77 +-
 SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hpp        |   37 -
 SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx        |   28 +-
 SrcLib/io/fwItkIO/include/fwItkIO/namespace.hpp    |   20 +
 SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.h  |   83 -
 .../io/fwItkIO/include/inr2itk/itkInrImageIO.hpp   |   83 +
 .../fwItkIO/include/inr2itk/itkInrImageIOFactory.h |   60 -
 .../include/inr2itk/itkInrImageIOFactory.hpp       |   59 +
 SrcLib/io/fwItkIO/src/fwItkIO/ImageReader.cpp      |   39 +-
 SrcLib/io/fwItkIO/src/fwItkIO/ImageWriter.cpp      |   32 +-
 SrcLib/io/fwItkIO/src/fwItkIO/JpgImageWriter.cpp   |   75 +-
 SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cpp    |  818 +++
 SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cxx    |  804 ---
 .../fwItkIO/src/inr2itk/itkInrImageIOFactory.cpp   |   60 +
 .../fwItkIO/src/inr2itk/itkInrImageIOFactory.cxx   |   58 -
 SrcLib/io/fwItkIO/test/CMakeLists.txt              |    9 +-
 SrcLib/io/fwItkIO/test/Properties.cmake            |    2 +-
 SrcLib/io/fwItkIO/test/cppunit.options             |   17 -
 .../test/tu/include/ImageConversionTest.hpp        |   18 +-
 .../test/tu/include/ImageConversionTest.hxx        |   13 +-
 .../test/tu/include/ImageReaderWriterJPGTest.hpp   |   16 +-
 .../test/tu/include/ImageReaderWriterTest.hpp      |   22 +-
 SrcLib/io/fwItkIO/test/tu/include/helper.hpp       |    8 +-
 .../io/fwItkIO/test/tu/src/ImageConversionTest.cpp |   17 +-
 .../test/tu/src/ImageReaderWriterJPGTest.cpp       |   27 +-
 .../fwItkIO/test/tu/src/ImageReaderWriterTest.cpp  |   16 +-
 SrcLib/io/fwItkIO/test/tu/src/helper.cpp           |    2 +-
 SrcLib/io/fwPacsIO/CMakeLists.txt                  |   10 +
 SrcLib/io/fwPacsIO/Properties.cmake                |   14 +
 .../fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp   |  205 +
 .../fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp  |   88 +
 .../include/fwPacsIO/data/PacsConfiguration.hpp    |  198 +
 .../fwPacsIO/include/fwPacsIO/exceptions/Base.hpp  |   40 +
 .../exceptions/NegociateAssociationFailure.hpp     |   39 +
 .../exceptions/NetworkInitializationFailure.hpp    |   39 +
 .../exceptions/PresentationContextMissing.hpp      |   39 +
 .../include/fwPacsIO/exceptions/RequestFailure.hpp |   39 +
 .../include/fwPacsIO/exceptions/TagMissing.hpp     |   39 +
 .../io/fwPacsIO/include/fwPacsIO/helper/Series.hpp |   76 +
 SrcLib/io/fwPacsIO/include/fwPacsIO/namespace.hpp  |   32 +
 SrcLib/io/fwPacsIO/rc/storescp.cfg                 |  210 +
 SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesEnquirer.cpp |  648 +++
 .../io/fwPacsIO/src/fwPacsIO/SeriesRetriever.cpp   |  184 +
 .../src/fwPacsIO/data/PacsConfiguration.cpp        |   77 +
 .../io/fwPacsIO/src/fwPacsIO/exceptions/Base.cpp   |   25 +
 .../exceptions/NegociateAssociationFailure.cpp     |   26 +
 .../exceptions/NetworkInitializationFailure.cpp    |   26 +
 .../exceptions/PresentationContextMissing.cpp      |   26 +
 .../src/fwPacsIO/exceptions/RequestFailure.cpp     |   26 +
 .../src/fwPacsIO/exceptions/TagMissing.cpp         |   26 +
 SrcLib/io/fwPacsIO/src/fwPacsIO/helper/Series.cpp  |  198 +
 SrcLib/io/fwPacsIO/test/CMakeLists.txt             |   12 +
 SrcLib/io/fwPacsIO/test/Properties.cmake           |   16 +
 .../test/tu/include/SeriesEnquirerTest.hpp         |   76 +
 .../io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp |  252 +
 SrcLib/io/fwVtkIO/CMakeLists.txt                   |   42 +-
 SrcLib/io/fwVtkIO/COPYING                          |  675 ---
 SrcLib/io/fwVtkIO/COPYING.LESSER                   |  166 -
 SrcLib/io/fwVtkIO/Properties.cmake                 |   11 +-
 SrcLib/io/fwVtkIO/bin/build.options                |   17 -
 SrcLib/io/fwVtkIO/include/fwVtkIO/ImageReader.hpp  |   43 +-
 SrcLib/io/fwVtkIO/include/fwVtkIO/ImageWriter.hpp  |   47 +-
 SrcLib/io/fwVtkIO/include/fwVtkIO/MeshReader.hpp   |   44 +-
 SrcLib/io/fwVtkIO/include/fwVtkIO/MeshWriter.hpp   |   45 +-
 .../io/fwVtkIO/include/fwVtkIO/MetaImageReader.hpp |   51 +-
 .../io/fwVtkIO/include/fwVtkIO/MetaImageWriter.hpp |   47 +-
 .../include/fwVtkIO/ModelSeriesObjWriter.hpp       |   54 +-
 SrcLib/io/fwVtkIO/include/fwVtkIO/Namespace.hpp    |   12 +-
 .../io/fwVtkIO/include/fwVtkIO/SeriesDBReader.hpp  |   53 +-
 .../include/fwVtkIO/TriangularMeshReader.hpp       |   59 -
 .../include/fwVtkIO/TriangularMeshWriter.hpp       |   59 -
 .../io/fwVtkIO/include/fwVtkIO/VtiImageReader.hpp  |   51 +-
 .../io/fwVtkIO/include/fwVtkIO/VtiImageWriter.hpp  |   50 +-
 SrcLib/io/fwVtkIO/include/fwVtkIO/config.hpp       |   53 -
 SrcLib/io/fwVtkIO/include/fwVtkIO/helper/Mesh.hpp  |   66 +-
 .../include/fwVtkIO/helper/ProgressVtkToFw.hpp     |   68 -
 .../include/fwVtkIO/helper/ProgressVtkToFw.hxx     |   73 -
 .../include/fwVtkIO/helper/TransferFunction.hpp    |   32 +-
 .../include/fwVtkIO/helper/vtkLambdaCommand.hpp    |   70 +
 SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp          |   73 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/ImageReader.cpp      |   61 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/ImageWriter.cpp      |   54 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/MeshReader.cpp       |   53 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/MeshWriter.cpp       |   59 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageReader.cpp  |   58 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageWriter.cpp  |   53 +-
 .../fwVtkIO/src/fwVtkIO/ModelSeriesObjWriter.cpp   |   78 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/SeriesDBReader.cpp   |  204 +-
 .../fwVtkIO/src/fwVtkIO/TriangularMeshReader.cpp   |   78 -
 .../fwVtkIO/src/fwVtkIO/TriangularMeshWriter.cpp   |   68 -
 SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageReader.cpp   |   58 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageWriter.cpp   |   58 +-
 SrcLib/io/fwVtkIO/src/fwVtkIO/helper/Mesh.cpp      |  578 ++-
 .../src/fwVtkIO/helper/TransferFunction.cpp        |   27 +-
 .../src/fwVtkIO/helper/vtkLambdaCommand.cpp        |   26 +
 SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp              |  388 +-
 SrcLib/io/fwVtkIO/test/CMakeLists.txt              |   21 +-
 SrcLib/io/fwVtkIO/test/Properties.cmake            |    2 +-
 SrcLib/io/fwVtkIO/test/cppunit.options             |   18 -
 SrcLib/io/fwVtkIO/test/tu/include/ImageTest.hpp    |   28 +-
 SrcLib/io/fwVtkIO/test/tu/include/MeshTest.hpp     |   20 +-
 SrcLib/io/fwVtkIO/test/tu/include/SeriesDBTest.hpp |   16 +-
 .../test/tu/include/TransferFunctionTest.hpp       |   18 +-
 SrcLib/io/fwVtkIO/test/tu/include/TrianTest.hpp    |   41 -
 SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp        |  311 +-
 SrcLib/io/fwVtkIO/test/tu/src/MeshTest.cpp         |   74 +-
 SrcLib/io/fwVtkIO/test/tu/src/SeriesDBTest.cpp     |    8 +-
 .../fwVtkIO/test/tu/src/TransferFunctionTest.cpp   |   58 +-
 SrcLib/io/fwVtkIO/test/tu/src/TrianTest.cpp        |   85 -
 SrcLib/io/vtkGdcmIO/CMakeLists.txt                 |   25 +-
 SrcLib/io/vtkGdcmIO/Properties.cmake               |   11 +-
 SrcLib/io/vtkGdcmIO/bin/build.options              |   13 -
 .../include/vtkGdcmIO/ImageSeriesWriter.hpp        |   49 +-
 .../include/vtkGdcmIO/SeriesDBLazyReader.hpp       |   36 +-
 .../vtkGdcmIO/include/vtkGdcmIO/SeriesDBReader.hpp |   35 +-
 SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/config.hpp   |   50 -
 .../include/vtkGdcmIO/helper/GdcmHelper.hpp        |   13 +-
 .../include/vtkGdcmIO/helper/ImageDicomStream.hpp  |   10 +-
 .../io/vtkGdcmIO/include/vtkGdcmIO/namespace.hpp   |   20 +
 .../vtkGdcmIO/src/vtkGdcmIO/ImageSeriesWriter.cpp  |   88 +-
 .../vtkGdcmIO/src/vtkGdcmIO/SeriesDBLazyReader.cpp |  186 +-
 .../io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBReader.cpp  |  146 +-
 .../vtkGdcmIO/src/vtkGdcmIO/helper/GdcmHelper.cpp  |   24 +-
 .../src/vtkGdcmIO/helper/ImageDicomStream.cpp      |   28 +-
 SrcLib/io/vtkGdcmIO/test/CMakeLists.txt            |    7 +-
 SrcLib/io/vtkGdcmIO/test/Properties.cmake          |   12 +-
 SrcLib/io/vtkGdcmIO/test/cppunit.options           |   17 -
 .../test/tu/include/ImageSeriesWriterTest.hpp      |   15 +-
 .../test/tu/include/SeriesDBLazyReaderTest.hpp     |   23 +-
 .../test/tu/include/SeriesDBReaderTest.hpp         |   23 +-
 .../test/tu/src/ImageSeriesWriterTest.cpp          |    8 +-
 .../test/tu/src/SeriesDBLazyReaderTest.cpp         |   17 +-
 .../vtkGdcmIO/test/tu/src/SeriesDBReaderTest.cpp   |    9 +-
 SrcLib/patch/fwMDSemanticPatch/CMakeLists.txt      |    5 -
 SrcLib/patch/fwMDSemanticPatch/COPYING             |  675 ---
 SrcLib/patch/fwMDSemanticPatch/COPYING.LESSER      |  166 -
 SrcLib/patch/fwMDSemanticPatch/Properties.cmake    |    2 +-
 SrcLib/patch/fwMDSemanticPatch/bin/build.options   |    9 -
 .../include/fwMDSemanticPatch/PatchLoader.hpp      |    5 +-
 .../V1/V2/MedicalWorkspacePatcher.hpp              |   18 +-
 .../fwMDSemanticPatch/V1/V2/fwData/Acquisition.hpp |   12 +-
 .../fwMDSemanticPatch/V1/V2/fwData/Composite.hpp   |   12 +-
 .../fwMDSemanticPatch/V1/V2/fwData/Patient.hpp     |   10 +-
 .../fwMDSemanticPatch/V1/V2/fwData/Study.hpp       |   10 +-
 .../fwMDSemanticPatch/V2/V03AGO/fwData/Image.hpp   |   57 +
 .../include/fwMDSemanticPatch/config.hpp           |   44 -
 .../include/fwMDSemanticPatch/namespace.hpp        |   40 +-
 SrcLib/patch/fwMDSemanticPatch/rc/V03AGO.versions  |   53 +
 .../fwMDSemanticPatch/rc/V03ToV04AGO.graphlink     |   12 +
 SrcLib/patch/fwMDSemanticPatch/rc/V04AFG.versions  |   53 +
 .../fwMDSemanticPatch/rc/V04AFGToV05AFG.graphlink  |   12 +
 SrcLib/patch/fwMDSemanticPatch/rc/V04AGO.versions  |   52 +
 .../fwMDSemanticPatch/rc/V04AGOToV06AGO.graphlink  |    7 +
 SrcLib/patch/fwMDSemanticPatch/rc/V05AFG.versions  |   53 +
 .../fwMDSemanticPatch/rc/V05AFGToV06AGO.graphlink  |   12 +
 SrcLib/patch/fwMDSemanticPatch/rc/V06AGO.versions  |   51 +
 .../fwMDSemanticPatch/rc/V06AGOToV07ALA.graphlink  |   12 +
 SrcLib/patch/fwMDSemanticPatch/rc/V07ALA.versions  |   51 +
 .../fwMDSemanticPatch/rc/V07ALAToV08ALA.graphlink  |   12 +
 SrcLib/patch/fwMDSemanticPatch/rc/V08ALA.versions  |   49 +
 .../fwMDSemanticPatch/rc/V08ALAToV09ALA.graphlink  |   12 +
 SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions  |   50 +
 .../fwMDSemanticPatch/rc/V09ALAToV08ALA.graphlink  |   12 +
 .../fwMDSemanticPatch/rc/V2ToV03AGO.graphlink      |    7 +
 .../fwMDSemanticPatch/rc/V2ToV04AFG.graphlink      |   12 +
 .../src/fwMDSemanticPatch/PatchLoader.cpp          |   18 +-
 .../V1/V2/MedicalWorkspacePatcher.cpp              |   18 +-
 .../fwMDSemanticPatch/V1/V2/fwData/Acquisition.cpp |   20 +-
 .../fwMDSemanticPatch/V1/V2/fwData/Composite.cpp   |  345 +-
 .../src/fwMDSemanticPatch/V1/V2/fwData/Patient.cpp |   16 +-
 .../src/fwMDSemanticPatch/V1/V2/fwData/Study.cpp   |   16 +-
 .../fwMDSemanticPatch/V1/V2/fwData/autoload.cpp    |    2 +-
 .../fwMDSemanticPatch/V2/V03AGO/fwData/Image.cpp   |   69 +
 .../V2/V03AGO/fwData/autoload.cpp                  |   38 +
 SrcLib/patch/fwStructuralPatch/CMakeLists.txt      |    3 -
 SrcLib/patch/fwStructuralPatch/COPYING             |  675 ---
 SrcLib/patch/fwStructuralPatch/COPYING.LESSER      |  166 -
 SrcLib/patch/fwStructuralPatch/Properties.cmake    |    2 +-
 SrcLib/patch/fwStructuralPatch/bin/build.options   |   11 -
 .../include/fwStructuralPatch/PatchLoader.hpp      |    2 +-
 .../include/fwStructuralPatch/config.hpp           |   44 -
 .../creator/fwMedData/ActivitySeries1.hpp          |    4 +-
 .../creator/fwMedData/Equipment1.hpp               |    4 +-
 .../creator/fwMedData/ImageSeries1.hpp             |    4 +-
 .../creator/fwMedData/ModelSeries1.hpp             |    4 +-
 .../creator/fwMedData/Patient1.hpp                 |   10 +-
 .../creator/fwMedData/Series1.hpp                  |    4 +-
 .../fwStructuralPatch/creator/fwMedData/Study1.hpp |    4 +-
 .../Acquisition/V1ToFwMedDataImageSeriesV1.hpp     |   14 +-
 .../fwStructuralPatch/fwData/Image/V1ToV2.hpp      |   59 +
 .../fwStructuralPatch/fwData/Material/V1ToV2.hpp   |   59 +
 .../fwStructuralPatch/fwData/Material/V2ToV3.hpp   |   62 +
 .../fwStructuralPatch/fwData/Material/V3ToV4.hpp   |   58 +
 .../fwStructuralPatch/fwData/Material/V4ToV3.hpp   |   59 +
 .../fwStructuralPatch/fwData/Mesh/V1ToV2.hpp       |   60 +
 .../fwStructuralPatch/fwData/Mesh/V1ToV3.hpp       |   60 +
 .../fwStructuralPatch/fwData/Mesh/V2ToV3.hpp       |   60 +
 .../fwData/Patient/V1ToFwMedDataPatientV1.hpp      |   14 +-
 .../fwData/Reconstruction/V1ToV2.hpp               |   10 +-
 .../fwData/Reconstruction/V2ToV3.hpp               |   59 +
 .../fwData/Study/V1ToFwMedDataStudyV1.hpp          |   18 +-
 .../fwData/TransformationMatrix3D/V1ToV2.hpp       |   60 +
 .../include/fwStructuralPatch/namespace.hpp        |   80 +-
 .../src/fwStructuralPatch/PatchLoader.cpp          |    2 +-
 .../src/fwStructuralPatch/autoload.cpp             |   24 +-
 .../src/fwStructuralPatch/creator/autoload.cpp     |    2 +-
 .../creator/fwMedData/ActivitySeries1.cpp          |    4 +-
 .../creator/fwMedData/Equipment1.cpp               |   12 +-
 .../creator/fwMedData/ImageSeries1.cpp             |   16 +-
 .../creator/fwMedData/ModelSeries1.cpp             |   10 +-
 .../creator/fwMedData/Patient1.cpp                 |   12 +-
 .../creator/fwMedData/Series1.cpp                  |   18 +-
 .../fwStructuralPatch/creator/fwMedData/Study1.cpp |   16 +-
 .../Acquisition/V1ToFwMedDataImageSeriesV1.cpp     |   15 +-
 .../src/fwStructuralPatch/fwData/Image/V1ToV2.cpp  |   68 +
 .../fwStructuralPatch/fwData/Material/V1ToV2.cpp   |   65 +
 .../fwStructuralPatch/fwData/Material/V2ToV3.cpp   |   64 +
 .../fwStructuralPatch/fwData/Material/V3ToV4.cpp   |   96 +
 .../fwStructuralPatch/fwData/Material/V4ToV3.cpp   |   96 +
 .../src/fwStructuralPatch/fwData/Mesh/V1ToV2.cpp   |   63 +
 .../src/fwStructuralPatch/fwData/Mesh/V1ToV3.cpp   |   65 +
 .../src/fwStructuralPatch/fwData/Mesh/V2ToV3.cpp   |   70 +
 .../fwData/Patient/V1ToFwMedDataPatientV1.cpp      |   20 +-
 .../fwData/Reconstruction/V1ToV2.cpp               |   12 +-
 .../fwData/Reconstruction/V2ToV3.cpp               |   67 +
 .../fwData/Study/V1ToFwMedDataStudyV1.cpp          |   10 +-
 .../fwData/TransformationMatrix3D/V1ToV2.cpp       |   76 +
 SrcLib/patch/fwStructuralPatch/test/CMakeLists.txt |    7 +-
 .../patch/fwStructuralPatch/test/Properties.cmake  |    2 +-
 .../patch/fwStructuralPatch/test/cppunit.options   |   25 -
 .../creator/fwMedData/ActivitySeries1Test.hpp      |   10 +-
 .../include/creator/fwMedData/Equipment1Test.hpp   |   10 +-
 .../include/creator/fwMedData/ImageSeries1Test.hpp |   10 +-
 .../include/creator/fwMedData/ModelSeries1Test.hpp |   10 +-
 .../tu/include/creator/fwMedData/Patient1Test.hpp  |   10 +-
 .../tu/include/creator/fwMedData/Series1Test.hpp   |   10 +-
 .../tu/include/creator/fwMedData/Study1Test.hpp    |   10 +-
 .../Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp |   14 +-
 .../test/tu/include/fwData/Material/V1ToV2Test.hpp |   44 +
 .../test/tu/include/fwData/Material/V2ToV3Test.hpp |   44 +
 .../test/tu/include/fwData/Material/V3ToV4Test.hpp |   44 +
 .../test/tu/include/fwData/Material/V4ToV3Test.hpp |   44 +
 .../fwData/Patient/V1ToFwMedDataPatientV1Test.hpp  |   14 +-
 .../include/fwData/Reconstruction/V1ToV2Test.hpp   |   14 +-
 .../fwData/Study/V1ToFwMedDataStudyV1Test.hpp      |   14 +-
 .../src/creator/fwMedData/ActivitySeries1Test.cpp  |   24 +-
 .../tu/src/creator/fwMedData/Equipment1Test.cpp    |   25 +-
 .../tu/src/creator/fwMedData/ImageSeries1Test.cpp  |   27 +-
 .../tu/src/creator/fwMedData/ModelSeries1Test.cpp  |   25 +-
 .../test/tu/src/creator/fwMedData/Patient1Test.cpp |   24 +-
 .../test/tu/src/creator/fwMedData/Series1Test.cpp  |   24 +-
 .../test/tu/src/creator/fwMedData/Study1Test.cpp   |   24 +-
 .../Acquisition/V1ToFwMedDataImageSeriesV1Test.cpp |   10 +-
 .../test/tu/src/fwData/Material/V1ToV2Test.cpp     |   88 +
 .../test/tu/src/fwData/Material/V2ToV3Test.cpp     |   89 +
 .../test/tu/src/fwData/Material/V3toV4Test.cpp     |  159 +
 .../test/tu/src/fwData/Material/V4toV3Test.cpp     |  170 +
 .../fwData/Patient/V1ToFwMedDataPatientV1Test.cpp  |   11 +-
 .../tu/src/fwData/Reconstruction/V1ToV2Test.cpp    |   10 +-
 .../src/fwData/Study/V1ToFwMedDataStudyV1Test.cpp  |   10 +-
 SrcLib/tests/fwTest/CMakeLists.txt                 |   22 +-
 SrcLib/tests/fwTest/COPYING                        |  675 ---
 SrcLib/tests/fwTest/COPYING.LESSER                 |  166 -
 SrcLib/tests/fwTest/Properties.cmake               |   10 +-
 SrcLib/tests/fwTest/bin/build.options              |   11 -
 SrcLib/tests/fwTest/include/fwTest/Data.hpp        |   12 +-
 .../fwTest/include/fwTest/DicomReaderTest.hpp      |   22 +-
 SrcLib/tests/fwTest/include/fwTest/Exception.hpp   |   12 +-
 SrcLib/tests/fwTest/include/fwTest/File.hpp        |   15 +-
 SrcLib/tests/fwTest/include/fwTest/config.hpp      |   41 -
 .../fwTest/include/fwTest/generator/Image.hpp      |   24 +-
 .../tests/fwTest/include/fwTest/generator/Mesh.hpp |   15 +-
 .../fwTest/include/fwTest/generator/Object.hpp     |    5 +-
 .../fwTest/include/fwTest/generator/SeriesDB.hpp   |   35 +-
 .../tests/fwTest/include/fwTest/helper/Thread.hpp  |   30 +-
 .../tests/fwTest/include/fwTest/helper/compare.hpp |   27 +-
 SrcLib/tests/fwTest/src/fwTest/Data.cpp            |   13 +-
 SrcLib/tests/fwTest/src/fwTest/DicomReaderTest.cpp |  261 +-
 SrcLib/tests/fwTest/src/fwTest/Exception.cpp       |    5 +-
 SrcLib/tests/fwTest/src/fwTest/File.cpp            |    9 +-
 SrcLib/tests/fwTest/src/fwTest/generator/Image.cpp |   22 +-
 SrcLib/tests/fwTest/src/fwTest/generator/Mesh.cpp  |   59 +-
 .../tests/fwTest/src/fwTest/generator/Object.cpp   |   63 +-
 .../tests/fwTest/src/fwTest/generator/SeriesDB.cpp |   56 +-
 SrcLib/tests/fwTest/src/fwTest/helper/Thread.cpp   |   33 +-
 SrcLib/tests/fwTest/src/fwTest/helper/compare.cpp  |   39 +-
 SrcLib/tests/fwTest/src/fwTest/initialisation.cpp  |   12 +-
 SrcLib/tests/fwTest/test/CMakeLists.txt            |    7 +-
 SrcLib/tests/fwTest/test/Properties.cmake          |    2 +-
 SrcLib/tests/fwTest/test/cppunit.options           |   15 -
 SrcLib/tests/fwTest/test/tu/include/ImageTest.hpp  |   20 +-
 .../tests/fwTest/test/tu/include/SeriesDBTest.hpp  |   14 +-
 SrcLib/tests/fwTest/test/tu/src/ImageTest.cpp      |   26 +-
 SrcLib/tests/fwTest/test/tu/src/SeriesDBTest.cpp   |   48 +-
 SrcLib/ui/fwDicomIOFilterQt/CMakeLists.txt         |   19 +
 SrcLib/ui/fwDicomIOFilterQt/Properties.cmake       |   15 +
 .../include/fwDicomIOFilterQt/Plugin.hpp           |   31 +
 .../include/fwDicomIOFilterQt/namespace.hpp        |   40 +
 .../sorter/TagValueConfigurableSorter.hpp          |   63 +
 .../splitter/TagValueConfigurableSplitter.hpp      |   64 +
 .../TagValueInstanceRemoveConfigurableSplitter.hpp |   66 +
 .../fwDicomIOFilterQt/widget/QHexSpinBox.hpp       |   52 +
 .../widget/QTagSelectorWidget.hpp                  |   67 +
 .../src/fwDicomIOFilterQt/Plugin.cpp               |   22 +
 .../sorter/TagValueConfigurableSorter.cpp          |  108 +
 .../splitter/TagValueConfigurableSplitter.cpp      |  108 +
 .../TagValueInstanceRemoveConfigurableSplitter.cpp |  123 +
 .../src/fwDicomIOFilterQt/widget/QHexSpinBox.cpp   |   51 +
 .../widget/QTagSelectorWidget.cpp                  |   99 +
 SrcLib/visu/fwRenderVTK/CMakeLists.txt             |   57 +-
 SrcLib/visu/fwRenderVTK/COPYING                    |  675 ---
 SrcLib/visu/fwRenderVTK/COPYING.LESSER             |  166 -
 SrcLib/visu/fwRenderVTK/Properties.cmake           |   14 +-
 SrcLib/visu/fwRenderVTK/bin/build.options          |   20 -
 .../include/fwRenderVTK/IInteractorStyle.hpp       |   73 +
 .../include/fwRenderVTK/IVtkAdaptorService.hpp     |  171 +-
 .../IVtkRenderWindowInteractorManager.hpp          |   16 +-
 .../fwRenderVTK/include/fwRenderVTK/Namespace.hpp  |   10 +-
 .../fwRenderVTK/OffScreenInteractorManager.hpp     |   61 +
 .../fwRenderVTK/include/fwRenderVTK/SRender.hpp    |  354 ++
 .../include/fwRenderVTK/VtkRenderService.hpp       |  198 -
 .../fwRenderVTK/include/fwRenderVTK/config.hpp     |   41 -
 .../include/fwRenderVTK/factory/namespace.hpp      |    4 +-
 .../include/fwRenderVTK/factory/new.hpp            |   15 +-
 .../include/fwRenderVTK/registry/detail.hpp        |    2 +-
 .../include/fwRenderVTK/registry/macros.hpp        |    8 +-
 .../include/fwRenderVTK/registry/namespace.hpp     |    4 +-
 .../include/fwRenderVTK/vtk/Helpers.hpp            |   53 +-
 .../include/fwRenderVTK/vtk/Instantiator.hpp       |   14 +-
 .../fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp |   15 +-
 .../fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp |   15 +-
 .../vtk/MarkedSphereHandleRepresentation.hpp       |   99 +-
 .../include/fwRenderVTK/vtk/Namespace.hpp          |   11 +-
 .../include/fwRenderVTK/vtk/fwVtkAxesActor.hpp     |   52 +
 .../fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp     |   80 +-
 .../include/fwRenderVTK/vtk/fwVtkCellPicker.hpp    |   88 +-
 .../include/fwRenderVTK/vtk/fwVtkPicker.hpp        |   76 +-
 .../vtk/fwVtkWindowLevelLookupTable.hpp            |  159 +-
 .../src/fwRenderVTK/IVtkAdaptorService.cpp         |  158 +-
 .../IVtkRenderWindowInteractorManager.cpp          |   15 +-
 .../src/fwRenderVTK/OffScreenInteractorManager.cpp |  104 +
 .../visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp   | 1001 ++++
 .../src/fwRenderVTK/VtkRenderService.cpp           |  554 ---
 .../fwRenderVTK/src/fwRenderVTK/factory/new.cpp    |    2 +-
 .../src/fwRenderVTK/registry/detail.cpp            |    4 +-
 .../fwRenderVTK/src/fwRenderVTK/vtk/Helpers.cpp    |  206 +-
 .../src/fwRenderVTK/vtk/Instantiator.cpp           |   32 +-
 .../fwRenderVTK/vtk/InteractorStyle2DForNegato.cpp |   87 +-
 .../fwRenderVTK/vtk/InteractorStyle3DForNegato.cpp |  208 +-
 .../vtk/MarkedSphereHandleRepresentation.cpp       |   85 +-
 .../src/fwRenderVTK/vtk/fwVtkAxesActor.cpp         |  120 +
 .../src/fwRenderVTK/vtk/fwVtkBoxRepresentation.cpp |  135 +-
 .../src/fwRenderVTK/vtk/fwVtkCellPicker.cpp        |   93 +-
 .../src/fwRenderVTK/vtk/fwVtkPicker.cpp            | 1079 ++--
 .../vtk/fwVtkWindowLevelLookupTable.cpp            |  228 +-
 .../fwRenderVTK/src/fwRenderVTK/vtklogging.cpp     |   35 +-
 Utilities/DicomAnonymizer/CMakeLists.txt           |    7 +
 Utilities/DicomAnonymizer/Properties.cmake         |   10 +
 Utilities/DicomAnonymizer/src/main.cpp             |   89 +
 .../DicomMetadataJsonGenerator/CMakeLists.txt      |   10 +
 .../DicomMetadataJsonGenerator/Properties.cmake    |   14 +
 Utilities/DicomMetadataJsonGenerator/src/main.cpp  |  125 +
 Utilities/VersionGenerator/CMakeLists.txt          |   13 +
 Utilities/VersionGenerator/Properties.cmake        |   10 +
 Utilities/VersionGenerator/bin/build.options       |   11 -
 Utilities/VersionGenerator/src/main.cpp            |   20 +-
 fwlauncher/CMakeLists.txt                          |    5 +
 fwlauncher/Properties.cmake                        |    7 +
 fwlauncher/src/ProfileRunner.cpp                   |  330 ++
 launcher/CMakeLists.txt                            |    6 -
 launcher/COPYING                                   |  675 ---
 launcher/COPYING.LESSER                            |  166 -
 launcher/Properties.cmake                          |    7 -
 launcher/bin/build.options                         |    7 -
 launcher/bin/vc/fw4spl.ico                         |  Bin 136606 -> 0 bytes
 launcher/bin/vc/launcher.rc                        |    3 -
 launcher/src/ProfileRunner.cpp                     |  340 --
 4374 files changed, 174551 insertions(+), 212987 deletions(-)

diff --git a/.hgignore b/.hgignore
index a3c6248..85e4e5e 100644
--- a/.hgignore
+++ b/.hgignore
@@ -7,3 +7,8 @@ syntax: glob
 *.project
 *.pyc
 *.pyo
+# qt creator
+*.user
+# reject and backup file
+*.rej
+*.orig
diff --git a/.hgtags b/.hgtags
index 350ed82..1352b46 100644
--- a/.hgtags
+++ b/.hgtags
@@ -92,8 +92,32 @@ cb23e8679d949f9c2ccd7982bfc954ba831ad219 fw4spl_0.8.2.3
 d465b66e24b7cb16b7cb5768923d9fac86fe8791 fw4spl_0.8.3.2
 efeff33fc51015bd0c4d67297b1fed95e84ffaa5 fw4spl_0.8.3.3
 51dbe3c236ba4872f3e5bf96d0be8347c923de32 fw4spl_0.8.3.4
+d9af0ca9f36318f171eb14a37fdafbda004f6f38 fw4spl_0.8.3.5
+4ad2f51919edefdd1c29ea7f1ac6ffb86d6d9212 fw4spl_0.8.3.6
+763792dc39524bc3e3176c8e5f9274f32ec15aed fw4spl_0.9.0.0
+f77e935bf8671ff0b640f5bb54b4f17b0feb735f fw4spl_0.9.0.1
+ea74370f192cc30174825919b9fb56622aa196e6 fw4spl_0.9.0.2
+aeda84c6e8dee47d2b565b00555556258db09df2 fw4spl_0.9.0.3
+8d7bb282b6aff640d86a655eabc8eb146de9388a fw4spl_0.9.1.0
+80cd238bf0b128e89cce1d54edbaf0eb16e54481 fw4spl_0.9.1.1
 800d983e47e99282769fd4aaab07cc8f01b265a8 fw4spl_0.9.1.2
 31603bebba81901fb97a03cdfcd0ddc59b23e9e2 fw4spl_0.9.1.3
 703c9bb53338123eee50bab5b04338789d9c2170 fw4spl_0.9.1.4
+f825bebbb87aee1359828367c3cd1ad62d146c1f fw4spl_0.9.2.0
 8bb2e274c775054c05da99ef0c7ef7b16d21dcc9 fw4spl_0.9.2.1
-5e86a1491c1c2f060c9a33a1bdd850515c3eecaf fw4spl_0.9.2.2
\ No newline at end of file
+5e86a1491c1c2f060c9a33a1bdd850515c3eecaf fw4spl_0.9.2.2
+d9b8287c5b8887b0d4eef905120257e598b0bbe1 fw4spl_0.9.2.3
+96b2b2f909378758a79e31b9a4a189bd93f7d5be fw4spl_0.10.0.1
+e16301bb61e283c798dadeb38983585d24a41c6e fw4spl_0.10.0.2
+e65964a071d30f1a7d2c23eb25f0a81ee5c66b6f fw4spl_0.10.0.3
+a5f08d0fc019f918e5f162298e1ea592d07d0df6 fw4spl_0.10.0.4
+3114d8dddb46e3022cdeb11decc09daeceb81921 fw4spl_0.10.0.5
+feb9c2cde4e221c3ae74d83411342eaef200ffc1 fw4spl_0.10.0.6
+e6bc1fc3cfd6579a5c971b17036057c9e8882693 fw4spl_0.9.2.4
+ef171b6be026e27ad7d67abe0f696856bd878c18 fw4spl_0.10.1.0
+8faf89940da49d79a8024c92bb3abec0aabaf9a2 fw4spl_0.10.0.7
+5c5622207db3057750d17add25031ae02da27bd4 fw4spl_0.10.1.1
+16a8a7298b6ea7bc3f4a28f960df6671ea3fb92e fw4spl_0.10.2.1
+51b154b40b05dae489c3a3a0ed6bd09f5cf5afb3 fw4spl_0.10.2.2
+dcee64c4097d1a0eaea7df6214b2d725d900b0bb fw4spl_0.10.2.3
+1d6ff2abce566ef77e03de930b2dd00642cc0717 fw4spl_0.11.0.1
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..99ede51
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,40 @@
+language: cpp
+sudo: false
+addons:
+  apt:
+    packages:
+    - build-essential
+    - ninja-build
+    - python2.7
+    - git
+    - wget
+    - graphviz
+    - gnuplot
+branches:
+    only:
+        - fw4spl_0.11.0
+compiler:
+    - gcc
+before_script:
+    - wget -q --no-check-certificate https://cmake.org/files/v3.4/cmake-3.4.1-Linux-x86_64.tar.gz
+    - tar xzf cmake-3.4.1-Linux-x86_64.tar.gz > /dev/null
+    - wget -q --no-check-certificate http://ftp.stack.nl/pub/users/dimitri/doxygen-1.8.11.linux.bin.tar.gz
+    - tar xzf doxygen-1.8.11.linux.bin.tar.gz > /dev/null
+    - export CMAKE_BIN=$TRAVIS_BUILD_DIR/cmake-3.4.1-Linux-x86_64/bin/cmake
+    - export DOXYGEN_BIN=$TRAVIS_BUILD_DIR/doxygen-1.8.11/bin/doxygen
+    - mkdir -p build/Documentation/Doxygen/html
+    - cd build/Documentation/Doxygen/html
+    - git clone https://github.com/fw4spl-org/fw4spl-dox.git .
+    - git checkout --quiet --orphan $TRAVIS_BRANCH
+    - git reset --hard
+    - git clean -f -d
+    - cd $TRAVIS_BUILD_DIR/build
+    - $CMAKE_BIN -DCMAKE_INSTALL_PREFIX:PATH=/tmp $TRAVIS_BUILD_DIR/ -DBUILD_DOCUMENTATION:BOOL=ON -DBUILD_TESTS:BOOL=OFF -DDOXYGEN_EXECUTABLE:FILEPATH=$DOXYGEN_BIN
+script: make doc
+after_success:
+    - git config --global user.name 'travis'
+    - git config --global user.email 'travis'
+    - cd $TRAVIS_BUILD_DIR/build/Documentation/Doxygen/html
+    - git add --all .
+    - git commit -m "Auto-updating Doxygen developer documentation"
+    - git push https://$GITHUB_API_KEY@github.com/fw4spl-org/fw4spl-dox.git $TRAVIS_BRANCH --quiet --force > /dev/null 2>&1
diff --git a/Apps/Tuto01Basic/Properties.cmake b/Apps/Tuto01Basic/Properties.cmake
deleted file mode 100644
index 8432fdf..0000000
--- a/Apps/Tuto01Basic/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto01Basic )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io appXml gui guiQt dataReg servicesReg launcher )
-
diff --git a/Apps/Tuto01Basic/bin/build.options b/Apps/Tuto01Basic/bin/build.options
deleted file mode 100644
index 07fc144..0000000
--- a/Apps/Tuto01Basic/bin/build.options
+++ /dev/null
@@ -1,13 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = [ 
-    'io_0-1'                ,
-    'appXml_0-1'            ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'launcher_0-1'          ,
- ]
-
-
diff --git a/Apps/Tuto01Basic/rc/plugin.xml b/Apps/Tuto01Basic/rc/plugin.xml
deleted file mode 100644
index ecef865..0000000
--- a/Apps/Tuto01Basic/rc/plugin.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-
-<plugin id="Tuto01Basic">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoBasicConfig</id>
-        <type>parameters</type>
-        <config>
-            <object type="::fwData::Image">
-
-                <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                    <gui>
-                        <frame>
-                            <name>tutoBasicApplicationName</name>
-                            <icon>Bundles/Tuto01Basic_0-1/tuto.ico</icon>
-                            <minSize width="800" height="600" />
-                        </frame>
-                    </gui>
-                </service>
-
-                <start uid="myFrame" />
-
-            </object>
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto01Basic/rc/profile.xml b/Apps/Tuto01Basic/rc/profile.xml
deleted file mode 100644
index bdf3702..0000000
--- a/Apps/Tuto01Basic/rc/profile.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<profile name="tutoBasicName" version="0.1">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="gui" version="0-1" />
-    <activate id="Tuto01Basic" />
-    <activate id="guiQt" version="0-1" />
-    
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoBasicConfig" />
-    </activate>
-
-    <start id="appXml" />
-    <start id="guiQt" />
-    
-</profile>
diff --git a/Apps/Tuto02DataServiceBasic/COPYING b/Apps/Tuto02DataServiceBasic/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto02DataServiceBasic/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto02DataServiceBasic/COPYING.LESSER b/Apps/Tuto02DataServiceBasic/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto02DataServiceBasic/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto02DataServiceBasic/Properties.cmake b/Apps/Tuto02DataServiceBasic/Properties.cmake
deleted file mode 100644
index b18e8c0..0000000
--- a/Apps/Tuto02DataServiceBasic/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto02DataServiceBasic )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io appXml gui guiQt dataReg servicesReg launcher visu visuVTKQt ioData ioVTK vtkSimpleNegato )
-
diff --git a/Apps/Tuto02DataServiceBasic/bin/build.options b/Apps/Tuto02DataServiceBasic/bin/build.options
deleted file mode 100755
index 6f21e04..0000000
--- a/Apps/Tuto02DataServiceBasic/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'appXml_0-1'            ,
- ]
-
-
diff --git a/Apps/Tuto02DataServiceBasic/rc/plugin.xml b/Apps/Tuto02DataServiceBasic/rc/plugin.xml
deleted file mode 100644
index b9cdadf..0000000
--- a/Apps/Tuto02DataServiceBasic/rc/plugin.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<plugin id="Tuto02DataServiceBasic">
-
-<requirement id="servicesReg" />
-
-<extension implements="::fwServices::registry::AppConfig">
-        <id>tutoDataServiceBasicConfig</id>
-        <type>parameters</type>
-        <config>
-        
-
-    <!-- In tutoDataServiceBasic, the central data  object is a ::fwData::Image type.-->
-    <object type="::fwData::Image">
-
-        <!-- Reading service. Here, the service unique identifier (uid) is set to the myReaderPathFile value.
-        In this tutorial, this service does not need to receive information about its linked data. Therefore the autoConnect is set to no.
-        We are going to see in detail the use of communications in the tutoComChannel tutorial.
-        Furthermore, in the filename tag, an attribut (id) allows also to clarify the location of the 3D medical image file. 
-        In our case, the image must be stored in the MyInstallDir directory, in a sub-directory named TutoData.
---> 
-        <service impl="::ioVTK::ImageReaderService" type="::io::IReader" uid="myReaderPathFile" autoConnect="no" >
-            <file>./TutoData/patient1.vtk</file>
-        </service>
-     
-        <!-- Visualization service of a 3D medical image.
-        Here, the value of the service unique identifier (uid) is myRenderingTuto.
-        In our tutorial, this service needs to receive information about its linked data,
-        indeed, it has to receive a message when the image is effectively loaded. Therefore, the autoConnect value is fixed to yes.
-        Furthermore, a guiContainerId attribut is also associated to the service.-->
-        <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="myRenderingTuto" autoConnect="yes" />
-        
-        <!-- Description service of the HMI.
-        Here, the container will be used by the 3D visualization service previously described. 
-        The ::gui::frame::MainFrame service automaticly positions the different containers in the application main window.
-        In our tutorial, this service does not need to receive information about its linked data. Therefore the autoConnect is set to no.
-        Remember we will see in details the use of communications in the tutoComChannel tutorial.-->
-        <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-            <gui>
-                <frame>
-                    <name>tutoDataServiceBasic</name>
-                    <icon>Bundles/Tuto02DataServiceBasic_0-1/tuto.ico</icon>
-                    <minSize width="800" height="600" />
-                </frame>
-            </gui>
-            <registry>
-                <view sid="myRenderingTuto" start="yes" />
-            </registry>
-        </service>
-        
-        <!-- Definition of the starting and closing order of the different services.
-        Here, the three services ::fwGui::IFrameSrv, and myReaderPathFile are started,
-        nevertheless, only the myReaderPathFile service is updated after the launching.
-        Indeed, as the image location is known (contained in the configuration file),
-        the image can be loaded since the application starting. It corresponds to the update flag for myReaderPathFile.
-        The HMI service must be started first, then the rendering service, and finaly the reading service.
-        The stopping of the services is done in the reverse order compared to the starting one.
--->
-        
-        <start uid="myFrame" />
-        <start uid="myReaderPathFile"/>
-
-        <update uid="myReaderPathFile"/>
-
-    </object>
-
-        </config>
-    </extension>
-
-</plugin>
diff --git a/Apps/Tuto02DataServiceBasic/rc/profile.xml b/Apps/Tuto02DataServiceBasic/rc/profile.xml
deleted file mode 100644
index 683b633..0000000
--- a/Apps/Tuto02DataServiceBasic/rc/profile.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<profile name="tutoDataServiceBasic" version="0.1">
-    <!-- List of the basic bundles having to be loaded to launch the application. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <!-- The visu bundle (visualization) is needed to use the vtkSimpleNegato bundle. -->
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto02DataServiceBasic" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoDataServiceBasicConfig" />
-    </activate>
-
-
-    <!-- List of the specific bundles that need to be loaded in this application context. -->
-    <!-- The ioVTK bundle (input output VTK) is a set of writing and reading services using the VTK library. -->
-    <activate id="ioVTK" version="0-1" />
-    <!-- The vtkSimpleNegato bundle contains the visualization service of medical images using the VTK library. -->
-    <activate id="vtkSimpleNegato" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-
-</profile>
diff --git a/Apps/Tuto02DataServiceBasicCtrl/COPYING b/Apps/Tuto02DataServiceBasicCtrl/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto02DataServiceBasicCtrl/COPYING.LESSER b/Apps/Tuto02DataServiceBasicCtrl/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto02DataServiceBasicCtrl/Properties.cmake b/Apps/Tuto02DataServiceBasicCtrl/Properties.cmake
deleted file mode 100644
index da27396..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto02DataServiceBasicCtrl )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwData fwServices fwCom fwRuntime )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt ioData ioVTK vtkSimpleNegato launcher )
-
diff --git a/Apps/Tuto02DataServiceBasicCtrl/bin/build.options b/Apps/Tuto02DataServiceBasicCtrl/bin/build.options
deleted file mode 100644
index 666f513..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/bin/build.options
+++ /dev/null
@@ -1,22 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [ 
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
- ]
-
-LIB = [
-    'fwData_0-1'        ,
-    'fwServices_0-1'    ,
-    'fwCom_0-1'         ,
-    'fwRuntime_0-3'     ,
- ]
diff --git a/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/Namespace.hpp b/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/Namespace.hpp
deleted file mode 100644
index 13ebce2..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/Namespace.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __TUTO02DATASERVICEBASICCTRL_NAMESPACE_HPP__
-#define __TUTO02DATASERVICEBASICCTRL_NAMESPACE_HPP__
-
-/**
- * @brief      The namespace tuto02DataServiceBasicCtrl.
- * @namespace  tuto02DataServiceBasicCtrl
- * 
- * @date       2009-2010.
- */
-namespace tuto02DataServiceBasicCtrl
-{
-
-}
-#endif /* __TUTO02DATASERVICEBASICCTRL_NAMESPACE_HPP__ */
diff --git a/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/Plugin.hpp b/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/Plugin.hpp
deleted file mode 100644
index b4b2f22..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/Plugin.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTO02DATASERVICEBASICCTRL_PLUGIN_HPP_
-#define _TUTO02DATASERVICEBASICCTRL_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
-
-#include <fwCom/Connection.hpp>
-
-#include <fwData/Image.hpp>
-
-#include <fwServices/IService.hpp>
-
-#include "tuto02DataServiceBasicCtrl/config.hpp"
-
-namespace tuto02DataServiceBasicCtrl
-{
-
-/**
- * @brief   This class is started when the bundles is loaded.
- * @class   Plugin
- */
-class TUTO02DATASERVICEBASICCTRL_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-public:
-    /// Constructor.
-    TUTO02DATASERVICEBASICCTRL_API Plugin() throw();
-
-    /// Destructor. Do nothing.
-    TUTO02DATASERVICEBASICCTRL_API ~Plugin() throw();
-
-    /// Overrides start method. .
-    TUTO02DATASERVICEBASICCTRL_API void start() throw(::fwRuntime::RuntimeException);
-
-    /// Overrides stop method. Do nothing
-    TUTO02DATASERVICEBASICCTRL_API void stop() throw();
-
-    TUTO02DATASERVICEBASICCTRL_API void initialize() throw( ::fwRuntime::RuntimeException );
-
-    TUTO02DATASERVICEBASICCTRL_API void uninitialize() throw();
-
-private:
-    ::fwData::Image::sptr m_image;
-
-    ::fwCom::Connection m_connection;
-
-    ::fwServices::IService::sptr m_frameSrv;
-    ::fwServices::IService::sptr m_renderSrv;
-    ::fwServices::IService::sptr m_readerSrv;
-};
-
-} // namespace tuto02DataServiceBasicCtrl
-
-#endif // _TUTO02DATASERVICEBASICCTRL_PLUGIN_HPP_
diff --git a/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/config.hpp b/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/config.hpp
deleted file mode 100644
index b499724..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/include/tuto02DataServiceBasicCtrl/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTO02DATASERVICEBASICCTRL_CONFIG_HPP_
-#define _TUTO02DATASERVICEBASICCTRL_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef TUTO02DATASERVICEBASICCTRL_EXPORTS
-    #define TUTO02DATASERVICEBASICCTRL_API __declspec(dllexport)
-    #else
-    #define TUTO02DATASERVICEBASICCTRL_API __declspec(dllimport)
-    #endif
-
-    #define TUTO02DATASERVICEBASICCTRL_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef TUTO02DATASERVICEBASICCTRL_EXPORTS
-    #define TUTO02DATASERVICEBASICCTRL_API __attribute__ ((visibility("default")))
-    #define TUTO02DATASERVICEBASICCTRL_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define TUTO02DATASERVICEBASICCTRL_API __attribute__ ((visibility("hidden")))
-    #define TUTO02DATASERVICEBASICCTRL_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define TUTO02DATASERVICEBASICCTRL_API
-    #define TUTO02DATASERVICEBASICCTRL_CLASS_API
-
-#endif
-
-#endif // _TUTO02DATASERVICEBASICCTRL_CONFIG_HPP_
diff --git a/Apps/Tuto02DataServiceBasicCtrl/rc/plugin.xml b/Apps/Tuto02DataServiceBasicCtrl/rc/plugin.xml
deleted file mode 100644
index ae76972..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/rc/plugin.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<plugin id="Tuto02DataServiceBasicCtrl" class="::tuto02DataServiceBasicCtrl::Plugin" >
-
-    <requirement id="servicesReg" />
-    <library name="Tuto02DataServiceBasicCtrl" />
-
-</plugin>
diff --git a/Apps/Tuto02DataServiceBasicCtrl/rc/profile.xml b/Apps/Tuto02DataServiceBasicCtrl/rc/profile.xml
deleted file mode 100644
index 7e553f4..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/rc/profile.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<profile name="tuto02DataServiceBasicCtrl" version="0.1">
-    <!-- List of the basic bundles having to be loaded to launch the application. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="Tuto02DataServiceBasicCtrl" version="0-1" />
-    <!-- The visu bundle (visualization) is needed to use the vtkSimpleNegato bundle. -->
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <!-- List of the specific bundles that need to be loaded in this application context. -->
-    <!-- The ioVTK bundle (input output VTK) is a set of writing and reading services using the VTK library. -->
-    <activate id="ioVTK" version="0-1" />
-    <!-- The vtkSimpleNegato bundle contains the visualization service of medical images using the VTK library. -->
-    <activate id="vtkSimpleNegato" version="0-1" />
-
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="Tuto02DataServiceBasicCtrl" />
-</profile>
diff --git a/Apps/Tuto02DataServiceBasicCtrl/src/tuto02DataServiceBasicCtrl/Plugin.cpp b/Apps/Tuto02DataServiceBasicCtrl/src/tuto02DataServiceBasicCtrl/Plugin.cpp
deleted file mode 100644
index 277a238..0000000
--- a/Apps/Tuto02DataServiceBasicCtrl/src/tuto02DataServiceBasicCtrl/Plugin.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <fwServices/op/Add.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include "tuto02DataServiceBasicCtrl/Plugin.hpp"
-
-
-namespace tuto02DataServiceBasicCtrl
-{
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::tuto02DataServiceBasicCtrl::Plugin");
-
-//------------------------------------------------------------------------------
-
-Plugin::Plugin() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-Plugin::~Plugin() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void Plugin::start() throw( ::fwRuntime::RuntimeException )
-{}
-
-//------------------------------------------------------------------------------
-
-void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
-{
-    m_image = ::fwData::Image::New();
-
-    // Reader service
-    m_readerSrv = ::fwServices::add(m_image, "::io::IReader", "::ioVTK::ImageReaderService");
-    ::fwServices::IService::ConfigType readerCfg;
-    readerCfg.put("service.file", "./TutoData/patient1.vtk");
-    m_readerSrv->setConfiguration( readerCfg ) ;
-    m_readerSrv->configure();
-
-    // Render service
-    m_renderSrv = ::fwServices::add(m_image, "::fwRender::IRender", "::vtkSimpleNegato::RendererService", "myRenderingTuto");
-    m_renderSrv->configure();
-
-    m_connection = m_image->signal( ::fwData::Object::s_OBJECT_MODIFIED_SIG)
-        ->connect(m_renderSrv->slot( ::fwServices::IService::s_RECEIVE_SLOT));
-
-    // Frame service
-    m_frameSrv = ::fwServices::add(m_image, "::fwGui::IFrameSrv", "::gui::frame::DefaultFrame");
-
-    ::fwServices::IService::ConfigType frameConfig;
-
-    frameConfig.put("service.gui.frame.name", "tutoDataServiceBasic");
-    frameConfig.put("service.gui.frame.icon", SHAREPATH+"Bundles/Tuto02DataServiceBasicCtrl_0-1/tuto.ico");
-    frameConfig.put("service.gui.frame.minSize.<xmlattr>.width" , "800");
-    frameConfig.put("service.gui.frame.minSize.<xmlattr>.height", "600");
-
-    frameConfig.put("service.registry.view.<xmlattr>.sid"  , "myRenderingTuto");
-    frameConfig.put("service.registry.view.<xmlattr>.start", "yes");
-
-    m_frameSrv->setConfiguration( frameConfig ) ;
-    m_frameSrv->configure();
-
-    // Start app
-    m_readerSrv->start();
-    m_frameSrv->start();
-
-    m_readerSrv->update();
-}
-
-//------------------------------------------------------------------------------
-
-void Plugin::stop() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void Plugin::uninitialize() throw()
-{
-    m_connection.disconnect();
-    m_readerSrv->stop();
-    m_frameSrv->stop();
-    ::fwServices::OSR::unregisterService( m_readerSrv ) ;
-    ::fwServices::OSR::unregisterService( m_frameSrv ) ;
-    ::fwServices::OSR::unregisterService( m_renderSrv ) ;
-    m_image.reset();
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace tuto02DataServiceBasicCtrl
diff --git a/Apps/Tuto03DataService/COPYING b/Apps/Tuto03DataService/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto03DataService/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto03DataService/COPYING.LESSER b/Apps/Tuto03DataService/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto03DataService/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto03DataService/Properties.cmake b/Apps/Tuto03DataService/Properties.cmake
deleted file mode 100644
index a17d3b8..0000000
--- a/Apps/Tuto03DataService/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto03DataService )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleNegato uiIO appXml )
-
diff --git a/Apps/Tuto03DataService/bin/build.options b/Apps/Tuto03DataService/bin/build.options
deleted file mode 100755
index 0ebc2ea..0000000
--- a/Apps/Tuto03DataService/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'uiIO_0-1'              ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto03DataService/rc/plugin.xml b/Apps/Tuto03DataService/rc/plugin.xml
deleted file mode 100644
index 9a0724e..0000000
--- a/Apps/Tuto03DataService/rc/plugin.xml
+++ /dev/null
@@ -1,100 +0,0 @@
-
-<plugin id="Tuto03DataService">
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoDataServiceConfig</id>
-        <type>parameters</type>
-        <config>
-
-
-        <!-- The root data object in tutoDataService is a ::fwData::Image. -->
-        <object type="::fwData::Image">
-
-
-                <!-- Graphical user interface manager.
-        In the tag <menus> we specify the identifiers of different services for the different menus.
-        In this tutorial, only one service (::gui::aspect::IMenu type) is created,
-        since the application's only one menu. The unique identifier (uid) of this service is "menu_file",
-        it's an FW4SPL identifier. -->
-        <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-            <gui>
-                <frame>
-                    <name>tutoDataService</name>
-                    <icon>Bundles/Tuto03DataService_0-1/tuto.ico</icon>
-                    <minSize width="800" height="600" />
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="myRenderingTuto" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="myMenu" start="yes" />
-            </registry>
-        </service>
-
-        <!-- The ::gui::aspect::DefaultMenuSrv service manage the menu creates the menu "File". This menu contains two menuItems (with a separator).
-        The actions associated with these two menuItem are identified with the uid "action_openFile" and "action_quit".
-        -->
-        <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open file" shortcut="Ctrl+O" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openFile" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <!-- The first service (::gui::action::StarterActionService) is a generic action. In the configuration of this service,
-        we specify the id of the services to be started and updated (start and update methods) when user click on the menuItem "OpenFile".
-        In this tutorial, ::gui::action::StarterActionService service starts and updates the service with the uid "myReaderPathFile". -->
-        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no" >
-            <start uid="myReaderPathFile"/>
-        </service>
-        <!-- The second service (::gui::action::QuitAction) is a generic action that will close the application
-        when the user click on the menuItem "Quit".
-        It's possible to associate with this kind of service (::gui::action::IAction) specific attributes to configure their style, shortcut... 
-        (Note:
-               In this tutorial, there is an attribute specialAction with the value "QUIT". On MS Windows, there's no impact.
-               But on Mac OS, this value installs the menuItem in the system menu bar,
-               and on Linux this value installs the default 'Quit' system icon in the menuItem.)    
-               The attribute "shortcut" is set with the value "Ctrl+Q" to close the application with this specific shortcut. -->
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-        <!-- The service ::uiIO::editor::IOSelectorService is started (start and update methods) by the service ::gui::action::StarterActionService. 
-        Indeed, the uid of the service ::uiIO::editor::IOSelectorService is the same as the uid 
-        defined in the service configuration ::gui::action::StarterActionService ( "myReaderPathFile").
-        This service lists all services available to read a data image and
-        it displays a dialog box to select the appropriate service.
-        (Note: 
-              if there is only one reading service, it's directly selected without dialog box.)
-        When the service was chosen, it is started by the ::uiIO::editor::IOSelectorService service. -->
-        <service uid="myReaderPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor"  autoConnect="no" />
-
-        <!-- This service (::vtkSimpleNegato::RendererService) is a 3D visualization service of medical images. -->
-        <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="myRenderingTuto" autoConnect="yes" />
-
-        <start uid="myFrame" />
-
-    </object>
-
-
-</config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto03DataService/rc/profile.xml b/Apps/Tuto03DataService/rc/profile.xml
deleted file mode 100644
index 5682409..0000000
--- a/Apps/Tuto03DataService/rc/profile.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<profile name="tutoDataService" version="0.1">
-
-    <!-- List of basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoDataServiceConfig" />
-    </activate>
-
-    <!-- List of specific bundles. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-
-    <activate id="Tuto03DataService" />
-
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-</profile>
diff --git a/Apps/Tuto03DataServiceBis/COPYING b/Apps/Tuto03DataServiceBis/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto03DataServiceBis/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto03DataServiceBis/COPYING.LESSER b/Apps/Tuto03DataServiceBis/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto03DataServiceBis/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto03DataServiceBis/Properties.cmake b/Apps/Tuto03DataServiceBis/Properties.cmake
deleted file mode 100644
index f3a4c4a..0000000
--- a/Apps/Tuto03DataServiceBis/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto03DataServiceBis )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleMesh uiIO appXml )
-
diff --git a/Apps/Tuto03DataServiceBis/bin/build.options b/Apps/Tuto03DataServiceBis/bin/build.options
deleted file mode 100755
index 2877574..0000000
--- a/Apps/Tuto03DataServiceBis/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleMesh_0-1'     ,
-    'uiIO_0-1'              ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto03DataServiceBis/rc/plugin.xml b/Apps/Tuto03DataServiceBis/rc/plugin.xml
deleted file mode 100644
index 504d863..0000000
--- a/Apps/Tuto03DataServiceBis/rc/plugin.xml
+++ /dev/null
@@ -1,103 +0,0 @@
-<plugin id="Tuto03DataServiceBis">
-
-<requirement id="servicesReg" />
-    
-<extension implements="::fwServices::registry::AppConfig">
-        <id>tutoDataServiceConfig</id>
-        <type>parameters</type>
-        <config>
-        
-
-    <!-- The root data object in tutoDataService is a ::fwData::Mesh. -->
-    <object type="::fwData::Mesh">
-
-
-        <!-- Graphical user interface manager.
-        In the tag <menus> we specify the identifiers of different services for the different menus.
-        In this tutorial, only one service (::gui::aspect::IMenu type) is created,
-        since the application's only one menu. The unique identifier (uid) of this service is "menu_file",
-        it's an FW4SPL identifier. -->
-        <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-            <gui>
-                <frame>
-                    <name>tutoDataService bis</name>
-                    <icon>Bundles/Tuto03DataServiceBis_0-1/tuto.ico</icon>
-                    <minSize width="800" height="600" />
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="myRenderingTuto" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                     <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menu_File" start="yes" />
-            </registry>
-        </service>
-        
-        <!-- The ::gui::aspect::DefaultMenu service creates the menu "File". This menu contains two menuItems (with a separator).
-        The actions associated with these two menuItem are identified with the uid "action_openFile" and "action_quit". -->
-        <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open file" shortcut="Ctrl+O" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openFile" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <!-- The first service (::gui::action::StarterActionService) is a generic action. In the configuration of this service,
-        we specify the id of the services to be started and updated (start and update methods) when user click on the menuItem "OpenFile".
-        In this tutorial, ::gui::action::StarterActionService service starts and updates the service with the uid "myReaderPathFile". -->
-        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no" >
-            <start uid="myReaderPathFile"/>
-        </service>
-        <!-- The second service (::gui::action::QuitAction) is a generic action that will close the application
-        when the user click on the menuItem "Quit".
-        It's possible to associate with this kind of service (::gui::action::IAction) specific attributes to configure their style, shortcut... 
-        (Note:
-               In this tutorial, there is an attribute specialAction with the value "QUIT". On MS Windows, there's no impact.
-               But on Mac OS, this value installs the menuItem in the system menu bar,
-               and on Linux this value installs the default 'Quit' system icon in the menuItem.)    
-               The attribute "shortcut" is set with the value "Ctrl+Q" to close the application with this specific shortcut. -->
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-        <!-- The service ::uiIO::editor::IOSelectorService is started (start and update methods) by the service ::gui::action::StarterActionService. 
-        Indeed, the uid of the service ::uiIO::editor::IOSelectorService is the same as the uid 
-        defined in the service configuration ::gui::action::StarterActionService ( "myReaderPathFile").
-        This service lists all services available to read a data Mesh and
-        it displays a dialog box to select the appropriate service.
-        (Note: 
-              if there is only one reading service, it's directly selected without dialog box.)
-        When the service was chosen, it is started by the ::uiIO::editor::IOSelectorService service. -->
-        <service uid="myReaderPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor"  autoConnect="no" />
-
-        <!-- This service (::vtkSimpleMesh::RendererService) is a 3D visualization service of medical meshes. -->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto" autoConnect="yes" >
-            <!--<win guiContainerId="900"/>-->
-        </service>
-
-        <start uid="myFrame" />
-
-        
-
-    </object>
-
-
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto03DataServiceBis/rc/profile.xml b/Apps/Tuto03DataServiceBis/rc/profile.xml
deleted file mode 100644
index c14835b..0000000
--- a/Apps/Tuto03DataServiceBis/rc/profile.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<profile name="tutoDataService" version="0.1">
-
-    <!-- List of basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto03DataServiceBis" version="0-1" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoDataServiceConfig" />
-    </activate>
-
-    <!-- List of specific bundles. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto04ComChannel/COPYING b/Apps/Tuto04ComChannel/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto04ComChannel/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto04ComChannel/COPYING.LESSER b/Apps/Tuto04ComChannel/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto04ComChannel/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto04ComChannel/Properties.cmake b/Apps/Tuto04ComChannel/Properties.cmake
deleted file mode 100644
index d512d10..0000000
--- a/Apps/Tuto04ComChannel/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto04ComChannel )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleMesh uiIO appXml )
-
diff --git a/Apps/Tuto04ComChannel/bin/build.options b/Apps/Tuto04ComChannel/bin/build.options
deleted file mode 100755
index 2877574..0000000
--- a/Apps/Tuto04ComChannel/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleMesh_0-1'     ,
-    'uiIO_0-1'              ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto04ComChannel/rc/configurations/config-connect.xml b/Apps/Tuto04ComChannel/rc/configurations/config-connect.xml
deleted file mode 100644
index c796832..0000000
--- a/Apps/Tuto04ComChannel/rc/configurations/config-connect.xml
+++ /dev/null
@@ -1,108 +0,0 @@
-<extension implements="::fwServices::registry::AppConfig">
-    <id>tutoComChannelConnectConfig</id>
-    <type>parameters</type>
-    <config>
-    
-    <!-- In tutoComChannel, the main data object type is ::fwData::Mesh.-->
-    <object type="::fwData::Mesh">
-
-        <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no" >
-            <gui>
-                <frame>
-                    <name>tutoComChannel</name>
-                    <icon>Bundles/Tuto04ComChannel_0-1/tuto.ico</icon>
-                    <minSize width="720" height="600"/>
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="myDefaultView" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-             <gui>
-                <layout>
-                     <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menu_File" start="yes" />
-            </registry>
-        </service>
-        
-        <!-- The application contains three different views. The different views are characterized by their associated service uid.
-                 Furthermore, a minimum window height and a width are given to the last two views.-->
-         <service uid="myDefaultView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::CardinalLayoutManager" >
-                    <view caption="Rendering 1" align="center" />
-                    <view caption="Rendering 2" align="right" minWidth="400" minHeight="100" />
-                    <view caption="Rendering 3" align="right" minWidth="400" minHeight="100" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="myRenderingTuto1" start="yes" />
-                <view sid="myRenderingTuto2" start="yes" />
-                <view sid="myRenderingTuto3" start="yes" />
-            </registry>
-        </service>
-        
-        <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open file" shortcut="Ctrl+O" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openFile" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no" >
-            <start uid="myReaderPathFile"/>
-        </service>
-
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-        <service uid="myReaderPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no" >
-            <type mode="reader"/>
-        </service>
-
-        <!-- Visualization service for the first window.-->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto1" autoConnect="yes" />
-        
-        <!-- Visualization service for the second window-->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto2" autoConnect="yes" />
-
-        <!-- Visualization service for the third window-->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto3" autoConnect="yes" />
-        
-        <!-- Connect the signal slot of the service to receive the updating of camera position -->
-        <connect>
-            <signal>myRenderingTuto1/camUpdated</signal>
-            <slot>myRenderingTuto2/updateCamPosition</slot>
-            <slot>myRenderingTuto3/updateCamPosition</slot>
-        </connect>
-        
-         <connect>
-            <signal>myRenderingTuto2/camUpdated</signal>
-            <slot>myRenderingTuto1/updateCamPosition</slot>
-            <slot>myRenderingTuto3/updateCamPosition</slot>
-        </connect>
-        
-        <connect>
-            <signal>myRenderingTuto3/camUpdated</signal>
-            <slot>myRenderingTuto2/updateCamPosition</slot>
-            <slot>myRenderingTuto1/updateCamPosition</slot>
-        </connect>
-        
-        <start uid="myFrame" />
-    </object>
-
-    </config>
-</extension>
diff --git a/Apps/Tuto04ComChannel/rc/configurations/config-proxy.xml b/Apps/Tuto04ComChannel/rc/configurations/config-proxy.xml
deleted file mode 100644
index 4d5ea3e..0000000
--- a/Apps/Tuto04ComChannel/rc/configurations/config-proxy.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<extension implements="::fwServices::registry::AppConfig">
-    <id>tutoComChannelProxyConfig</id>
-    <type>parameters</type>
-    <config>
-    
-    <!-- In tutoComChannel, the main data object type is ::fwData::Mesh.-->
-    <object type="::fwData::Mesh">
-
-        <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no" >
-            <gui>
-                <frame>
-                    <name>tutoComChannel</name>
-                    <icon>Bundles/Tuto04ComChannel_0-1/tuto.ico</icon>
-                    <minSize width="720" height="600"/>
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="myDefaultView" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-             <gui>
-                <layout>
-                     <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menu_File" start="yes" />
-            </registry>
-        </service>
-        
-        <!-- The application contains three different views. The different views are characterized by their associated service uid.
-                 Furthermore, a minimum window height and a width are given to the last two views.-->
-         <service uid="myDefaultView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::CardinalLayoutManager" >
-                    <view caption="Rendering 1" align="center" />
-                    <view caption="Rendering 2" align="right" minWidth="400" minHeight="100" />
-                    <view caption="Rendering 3" align="right" minWidth="400" minHeight="100" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="myRenderingTuto1" start="yes" />
-                <view sid="myRenderingTuto2" start="yes" />
-                <view sid="myRenderingTuto3" start="yes" />
-            </registry>
-        </service>
-        
-        <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open file" shortcut="Ctrl+O" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openFile" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no" >
-            <start uid="myReaderPathFile"/>
-        </service>
-
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-        <service uid="myReaderPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no" >
-            <type mode="reader"/>
-        </service>
-
-        <!-- Visualization service for the first window.-->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto1" autoConnect="yes" />
-
-        
-        <!-- Visualization service for the second window-->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto2" autoConnect="yes" />
-
-
-        <!-- Visualization service for the third window-->
-        <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="myRenderingTuto3" autoConnect="yes" />
-        
-        <!-- Connect the signal slot of the service to receive the updating of camera position -->
-        <proxy channel="Camera" >
-            <signal>myRenderingTuto1/camUpdated</signal>
-            <signal>myRenderingTuto2/camUpdated</signal>
-            <signal>myRenderingTuto3/camUpdated</signal>
-            
-            <slot>myRenderingTuto1/updateCamPosition</slot>
-            <slot>myRenderingTuto2/updateCamPosition</slot>
-            <slot>myRenderingTuto3/updateCamPosition</slot>
-        </proxy>
-        
-        <start uid="myFrame" />
-    </object>
-
-    </config>
-</extension>
diff --git a/Apps/Tuto04ComChannel/rc/plugin.xml b/Apps/Tuto04ComChannel/rc/plugin.xml
deleted file mode 100644
index 3c8d366..0000000
--- a/Apps/Tuto04ComChannel/rc/plugin.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<plugin id="Tuto04ComChannel">
-    
-    <requirement id="servicesReg" />
-    <xi:include href="configurations/config-connect.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
-    <xi:include href="configurations/config-proxy.xml"   xmlns:xi="http://www.w3.org/2003/XInclude" />
-    
-</plugin>
diff --git a/Apps/Tuto04ComChannel/rc/profile.xml b/Apps/Tuto04ComChannel/rc/profile.xml
deleted file mode 100644
index f07effc..0000000
--- a/Apps/Tuto04ComChannel/rc/profile.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="tutoComChannel" version="0.1">
-
-    <!-- Basic bundles list. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto04ComChannel" version="0-1" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoComChannelConnectConfig" />
-    </activate>
-
-    <!-- Specific bundles list. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-        
-</profile>
diff --git a/Apps/Tuto04ComChannel/rc/profileProxy.xml b/Apps/Tuto04ComChannel/rc/profileProxy.xml
deleted file mode 100644
index abd69fa..0000000
--- a/Apps/Tuto04ComChannel/rc/profileProxy.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="tutoComChannel" version="0.1">
-
-    <!-- Basic bundles list. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto04ComChannel" version="0-1" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoComChannelProxyConfig" />
-    </activate>
-
-    <!-- Specific bundles list. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-        
-</profile>
diff --git a/Apps/Tuto05Mesher/COPYING b/Apps/Tuto05Mesher/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto05Mesher/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto05Mesher/COPYING.LESSER b/Apps/Tuto05Mesher/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto05Mesher/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto05Mesher/Properties.cmake b/Apps/Tuto05Mesher/Properties.cmake
deleted file mode 100644
index a318c64..0000000
--- a/Apps/Tuto05Mesher/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto05Mesher )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleNegato vtkSimpleMesh vtkCompositeMesh uiIO opVTKMesh opImageFilter appXml )
-
diff --git a/Apps/Tuto05Mesher/bin/build.options b/Apps/Tuto05Mesher/bin/build.options
deleted file mode 100755
index d7130cc..0000000
--- a/Apps/Tuto05Mesher/bin/build.options
+++ /dev/null
@@ -1,21 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'vtkSimpleMesh_0-1'     ,
-    'vtkCompositeMesh_0-1'  ,
-    'uiIO_0-1'              ,
-    'opVTKMesh_0-1'         ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto05Mesher/rc/plugin.xml b/Apps/Tuto05Mesher/rc/plugin.xml
deleted file mode 100644
index c54f0a5..0000000
--- a/Apps/Tuto05Mesher/rc/plugin.xml
+++ /dev/null
@@ -1,193 +0,0 @@
-
-<plugin id="Tuto05Mesher">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>MesherConfig</id>
-        <type>parameters</type>
-        <config>
-        
-
-        <!--  Composite data creation. -->
-        <object type="::fwData::Composite">
-
-            <!-- Frame & View -->
-
-            <!--
-                Service associated to the Composite data :
-                main window creation.
-            -->
-            <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                <gui>
-                    <frame>
-                        <name>Mesher</name>
-                        <icon>Bundles/Tuto05Mesher_0-1/tuto.ico</icon>
-                        <minSize width="800" height="600" />
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="myMenuBar" start="yes" />
-                    <view sid="myDefaultView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="myDefaultView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="horizontal" />
-                        <view caption="Image view" />
-                        <view caption="Mesh view" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="RenderingImage" start="yes" />
-                    <view sid="RenderingMesh" start="yes" />
-                </registry>
-            </service>
-
-
-            <!-- Menu Bar, Menus & Actions -->
-
-
-            <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="Mesher" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="menuFile" start="yes" />
-                    <menu sid="menuMesher" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="menuFile" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Open image file" shortcut="Ctrl+O" />
-                        <menuItem name="Save image" />
-                        <separator />
-                        <menuItem name="Open mesh file" shortcut="Ctrl+M" />
-                        <menuItem name="Save mesh" />
-                        <separator />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="actionOpenImageFile" start="yes" />
-                    <menuItem sid="actionSaveImageFile" start="yes" />
-                    <menuItem sid="actionOpenMeshFile" start="yes" />
-                    <menuItem sid="actionSaveMeshFile" start="yes" />
-                    <menuItem sid="actionQuit" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="menuMesher" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Compute Mesh (VTK)" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="actionCreateVTKMesh" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-
-            <!--
-                Service associated to the Composite data :
-                menu services creation.
-                Actions in relationship with images and meshe
-            -->
-            <service uid="actionOpenImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="readerPathImageFile" />
-            </service>
-
-            <service uid="actionSaveImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="writerImageFile" />
-            </service>
-
-            <service uid="actionOpenMeshFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="readerPathMeshFile" />
-            </service>
-
-            <service uid="actionSaveMeshFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="writerMeshFile" />
-            </service>
-
-            <service uid="actionCreateVTKMesh" type="::fwGui::IActionSrv" impl="::opVTKMesh::action::VTKMeshCreation" autoConnect="no">
-                <image uid="myImage" />
-                <mesh uid="myMesh" />
-                <percentReduction value="0" />
-            </service>
-
-
-            <!--
-                Image object creation Services contained between the tags <object> and </object>
-                are associated to the Image data.
-            -->
-            <item key="myImage">
-                <object uid="myImage" type="::fwData::Image">
-
-                    <!--
-                    Services associated to the Image data :
-                    Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="RenderingImage" autoConnect="yes" />
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="readerPathImageFile" autoConnect="no">
-                        <type mode="reader" />
-                    </service>
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="writerImageFile" autoConnect="no">
-                        <type mode="writer" />
-                    </service>
-
-                </object>
-            </item>
-
-            <!--
-                Mesh object creation. Services contained between the tags <object> and </object> are
-                associated to the Mesh data.
-             -->
-            <item key="myMesh">
-                <object uid="myMesh" type="::fwData::Mesh">
-
-                    <!--
-                        Services associated to the Mesh data :
-                        Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="RenderingMesh" autoConnect="yes"/>
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="readerPathMeshFile" autoConnect="no">
-                        <type mode="reader" />
-                    </service>
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="writerMeshFile" autoConnect="no">
-                        <type mode="writer" />
-                    </service>
-
-                </object>
-            </item>
-
-            <!--
-                In order to start the different services, it does not need to follow the objects creation order. Note that the services associated to the Image and Mesh data are not started
-                between the tags corresponding to these two data definitions but, before the end of the Composite data definition.
-            -->
-            <start uid="myFrame" />
-
-            
-
-        </object>
-    
-        </config>
-    </extension>
-</plugin>    
diff --git a/Apps/Tuto05Mesher/rc/profile.xml b/Apps/Tuto05Mesher/rc/profile.xml
deleted file mode 100644
index fe84f45..0000000
--- a/Apps/Tuto05Mesher/rc/profile.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<profile name="Mesher" version="0.1">
-
-    <!-- List of the basic bundles. -->
-    <activate id="dataReg" version="0-1"/>
-    <activate id="servicesReg" version="0-1"/>
-    <activate id="io" version="0-1"/>
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto05Mesher" version="0-1" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="MesherConfig" />
-    </activate>
-
-    <!-- List of the specific bundles. -->
-    <activate id="ioData" version="0-1"/>
-    <activate id="vtkSimpleMesh" version="0-1"/>
-    <activate id="vtkSimpleNegato" version="0-1"/>
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="opVTKMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto05MesherB/COPYING b/Apps/Tuto05MesherB/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto05MesherB/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto05MesherB/COPYING.LESSER b/Apps/Tuto05MesherB/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto05MesherB/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto05MesherB/Properties.cmake b/Apps/Tuto05MesherB/Properties.cmake
deleted file mode 100644
index 9c20ef1..0000000
--- a/Apps/Tuto05MesherB/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto05MesherB )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleNegato vtkSimpleMesh vtkCompositeMesh uiIO opVTKMesh opImageFilter appXml )
-
diff --git a/Apps/Tuto05MesherB/bin/build.options b/Apps/Tuto05MesherB/bin/build.options
deleted file mode 100755
index d7130cc..0000000
--- a/Apps/Tuto05MesherB/bin/build.options
+++ /dev/null
@@ -1,21 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'vtkSimpleMesh_0-1'     ,
-    'vtkCompositeMesh_0-1'  ,
-    'uiIO_0-1'              ,
-    'opVTKMesh_0-1'         ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto05MesherB/rc/plugin.xml b/Apps/Tuto05MesherB/rc/plugin.xml
deleted file mode 100644
index 7a87f79..0000000
--- a/Apps/Tuto05MesherB/rc/plugin.xml
+++ /dev/null
@@ -1,194 +0,0 @@
-<plugin id="Tuto05MesherB">
-
-    <requirement id="servicesReg" />
-    
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>MesherV2Config</id>
-        <type>parameters</type>
-        <config>
-
-
-        <!--  Composite data creation. -->
-        <object type="::fwData::Composite">
-
-            <!-- Frame & View -->
-
-            <!--
-                Service associated to the Composite data :
-                main window creation.
-            -->
-            <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                <gui>
-                    <frame>
-                        <name>Mesher</name>
-                        <icon>Bundles/Tuto05MesherB_0-1/tuto.ico</icon>
-                        <minSize width="800" height="600" />
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="myMenuBar" start="yes" />
-                    <view sid="myDefaultView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="myDefaultView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager">
-                        <view caption="Image view" align="center" />
-                        <view caption="Mesh 1 view" align="right" minWidth="500" minHeight="100" />
-                        <view caption="Mesh 2 view" align="right" minWidth="500" minHeight="100" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="RenderingImage" start="yes" />
-                    <view sid="RenderingMesh1" start="yes" />
-                    <view sid="RenderingMesh2" start="yes" />
-                </registry>
-            </service>
-
-
-            <!-- Menu Bar, Menus & Actions -->
-
-
-            <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="Mesher" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="menuFile" start="yes" />
-                    <menu sid="menuMesher" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="menuFile" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Open image file" shortcut="Ctrl+O" />
-                        <menuItem name="Save image" />
-                        <separator />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="actionOpenImageFile" start="yes" />
-                    <menuItem sid="actionSaveImageFile" start="yes" />
-                    <menuItem sid="actionQuit" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="menuMesher" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Compute Mesh 1 (VTK)" />
-                        <menuItem name="Compute Mesh 2 (VTK)" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="actionCreateVTKMesh1" start="yes" />
-                    <menuItem sid="actionCreateVTKMesh2" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-
-            <!--
-                Service associated to the Composite data :
-                menu services creation.
-                Actions in relationship with images and meshe
-            -->
-            <service uid="actionOpenImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="readerPathImageFile" />
-            </service>
-
-            <service uid="actionSaveImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="writerImageFile" />
-            </service>
-
-            <service uid="actionCreateVTKMesh1" type="::fwGui::IActionSrv" impl="::opVTKMesh::action::VTKMeshCreation" autoConnect="no">
-                <image uid="myImage" />
-                <mesh uid="myMesh1" />
-                <percentReduction value="0" />
-            </service>
-
-            <service uid="actionCreateVTKMesh2" type="::fwGui::IActionSrv" impl="::opVTKMesh::action::VTKMeshCreation" autoConnect="no">
-                <image uid="myImage" />
-                <mesh uid="myMesh2" />
-                <percentReduction value="30" />
-            </service>
-
-
-            <!--
-                Image object creation Services contained between the tags <object> and </object>
-                are associated to the Image data.
-            -->
-            <item key="myImage">
-                <object uid="myImage" type="::fwData::Image">
-
-                    <!--
-                    Services associated to the Image data :
-                    Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="RenderingImage" autoConnect="yes" />
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="readerPathImageFile" autoConnect="no">
-                        <type mode="reader" />
-                    </service>
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="writerImageFile" autoConnect="no">
-                        <type mode="writer" />
-                    </service>
-
-                </object>
-            </item>
-
-            <!--
-                Mesh objet creation. Services contained between the tags <object> and </object> are
-                associa ted to the Mesh data.
-             -->
-            <item key="myMesh1">
-                <object uid="myMesh1" type="::fwData::Mesh">
-
-                    <!--
-                        Services associated to the Mesh data :
-                        Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="RenderingMesh1" autoConnect="yes"/>
-
-                </object>
-            </item>
-
-            <!--
-                Mesh objet creation. Services contained between the tags <object> and </object> are
-                associa ted to the Mesh data.
-             -->
-            <item key="myMesh2">
-                <object uid="myMesh2" type="::fwData::Mesh">
-
-                    <!--
-                        Services associated to the Mesh data :
-                        Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="RenderingMesh2" autoConnect="yes"/>
-
-                </object>
-            </item>
-
-            <!--
-                In order to start the different services, it does not need to follow the objects creation order. Note that the services associated to the Image and Mesh data are not started
-                between the tags corresponding to these two data definitions but, before the end of the Composite data definition.
-            -->
-            <start uid="myFrame" />
-
-        </object>
-
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto05MesherB/rc/profile.xml b/Apps/Tuto05MesherB/rc/profile.xml
deleted file mode 100644
index e51155f..0000000
--- a/Apps/Tuto05MesherB/rc/profile.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<profile name="MyApp" version="0.1">
-
-    <!-- List of the basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto05MesherB" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="MesherV2Config" />
-    </activate>
-
-    <!-- List of the specific bundles. -->
-    <activate id="ioData" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="opVTKMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto05MesherC/COPYING b/Apps/Tuto05MesherC/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto05MesherC/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto05MesherC/COPYING.LESSER b/Apps/Tuto05MesherC/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto05MesherC/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto05MesherC/Properties.cmake b/Apps/Tuto05MesherC/Properties.cmake
deleted file mode 100644
index 150f21d..0000000
--- a/Apps/Tuto05MesherC/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto05MesherC )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleNegato vtkSimpleMesh vtkCompositeMesh uiIO opVTKMesh opImageFilter appXml )
-
diff --git a/Apps/Tuto05MesherC/bin/build.options b/Apps/Tuto05MesherC/bin/build.options
deleted file mode 100755
index d7130cc..0000000
--- a/Apps/Tuto05MesherC/bin/build.options
+++ /dev/null
@@ -1,21 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'vtkSimpleMesh_0-1'     ,
-    'vtkCompositeMesh_0-1'  ,
-    'uiIO_0-1'              ,
-    'opVTKMesh_0-1'         ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto05MesherC/rc/plugin.xml b/Apps/Tuto05MesherC/rc/plugin.xml
deleted file mode 100644
index 8817b2e..0000000
--- a/Apps/Tuto05MesherC/rc/plugin.xml
+++ /dev/null
@@ -1,221 +0,0 @@
-<plugin id="Tuto05MesherC">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>MesherV3Config</id>
-        <type>parameters</type>
-        <config>
-
-
-        <!--  Composite data creation. -->
-        <object type="::fwData::Composite">
-
-            <!-- Frame & View -->
-
-            <!--
-                Service associated to the Composite data :
-                main window creation.
-            -->
-            <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                <gui>
-                    <frame>
-                        <name>Mesher</name>
-                        <icon>Bundles/Tuto05MesherC_0-1/tuto.ico</icon>
-                        <minSize width="800" height="600" />
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="myMenuBar" start="yes" />
-                    <view sid="myDefaultView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="myDefaultView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager">
-                        <view caption="Image view" align="center" />
-                        <view caption="Mesh 1 view" align="right" minWidth="500" minHeight="100" />
-                        <view caption="Meshes view" align="right" minWidth="500" minHeight="100" />
-                        <view caption="Mesh 2 view" align="right" minWidth="500" minHeight="100" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="RenderingImage" start="yes" />
-                    <view sid="RenderingMesh1" start="yes" />
-                    <view sid="RenderingMesh" start="yes" />
-                    <view sid="RenderingMesh2" start="yes" />
-                </registry>
-            </service>
-
-
-            <!-- Menu Bar, Menus & Actions -->
-
-
-            <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="Mesher" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="menuFile" start="yes" />
-                    <menu sid="menuMesher" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="menuFile" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Open image file" shortcut="Ctrl+O" />
-                        <menuItem name="Save image" />
-                        <separator />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="actionOpenImageFile" start="yes" />
-                    <menuItem sid="actionSaveImageFile" start="yes" />
-                    <menuItem sid="actionQuit" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="menuMesher" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Compute Mesh 1 (VTK)" />
-                        <menuItem name="Compute Mesh 2 (VTK)" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="actionCreateVTKMesh1" start="yes" />
-                    <menuItem sid="actionCreateVTKMesh2" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-
-            <!--
-                Service associated to the Composite data :
-                menu services creation.
-                Actions in relationship with images and meshe
-            -->
-            <service uid="actionOpenImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="readerPathImageFile" />
-            </service>
-
-            <service uid="actionSaveImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="writerImageFile" />
-            </service>
-
-            <service uid="actionCreateVTKMesh1" type="::fwGui::IActionSrv" impl="::opVTKMesh::action::VTKMeshCreation" autoConnect="no">
-                <image uid="myImage" />
-                <mesh uid="myMesh1" />
-                <percentReduction value="0" />
-            </service>
-
-            <service uid="actionCreateVTKMesh2" type="::fwGui::IActionSrv" impl="::opVTKMesh::action::VTKMeshCreation" autoConnect="no">
-                <image uid="myImage" />
-                <mesh uid="myMesh2" />
-                <percentReduction value="30" />
-            </service>
-
-
-
-            <service impl="::vtkCompositeMesh::RendererService" type="::fwRender::IRender" uid="RenderingMesh" autoConnect="yes" />
-
-            <!--
-                Image object creation Services contained between the tags <object> and </object>
-                are associated to the Image data.
-            -->
-            <item key="myImage">
-                <object uid="myImage" type="::fwData::Image">
-
-                    <!--
-                    Services associated to the Image data :
-                    Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="RenderingImage" autoConnect="yes" />
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="readerPathImageFile" autoConnect="no">
-                        <type mode="reader" />
-                    </service>
-
-                    <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="writerImageFile" autoConnect="no">
-                        <type mode="writer" />
-                    </service>
-
-                </object>
-            </item>
-
-            <!--
-                Mesh object creation. Services contained between the tags <object> and </object> are
-                associated to the Mesh data.
-             -->
-            <item key="myMesh1">
-                <object uid="myMesh1" type="::fwData::Mesh">
-
-                    <!--
-                        Services associated to the Mesh data :
-                        Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="RenderingMesh1" autoConnect="yes"/>
-
-                </object>
-            </item>
-
-            <!--
-                Mesh object creation. Services contained between the tags <object> and </object> are
-                associated to the Mesh data.
-             -->
-            <item key="myMesh2">
-                <object uid="myMesh2" type="::fwData::Mesh">
-
-                    <!--
-                        Services associated to the Mesh data :
-                        Visualization, reading and writing service creation.
-                    -->
-                    <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" uid="RenderingMesh2" autoConnect="yes"/>
-
-                </object>
-            </item>
-
-            <!-- Connect RenderingMesh 'updateCamPosition' slot to receive 'camUpdated' signal from RenderingMesh1 and RenderingMesh2 -->
-            <connect>
-                <signal>RenderingMesh1/camUpdated</signal>
-                <slot>RenderingMesh/updateCamPosition</slot>
-            </connect>
-
-            <connect>
-                <signal>RenderingMesh2/camUpdated</signal>
-                <slot>RenderingMesh/updateCamPosition</slot>
-            </connect>
-
-            <!-- Connect RenderingMesh 'receive' slot to receive 'objectModified' signal from myMesh1 and myMesh2 -->
-            <connect>
-                <signal>myMesh1/objectModified</signal>
-                <slot>RenderingMesh/receive</slot>
-            </connect>
-
-            <connect>
-                <signal>myMesh2/objectModified</signal>
-                <slot>RenderingMesh/receive</slot>
-            </connect>
-
-            <!--
-                In order to start the different services, it does not need to follow the objects creation order. Note that the services associated to the Image and Mesh data are not started
-                between the tags corresponding to these two data definitions but, before the end of the Composite data definition.
-            -->
-            <start uid="myFrame" />
-
-        </object>
-
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto05MesherC/rc/profile.xml b/Apps/Tuto05MesherC/rc/profile.xml
deleted file mode 100644
index a2d41a6..0000000
--- a/Apps/Tuto05MesherC/rc/profile.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<profile name="MyApp" version="0.1">
-
-    <!-- List of the basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto05MesherC" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="MesherV3Config" />
-    </activate>
-
-    <!-- List of the specific bundles. -->
-    <activate id="ioData" version="0-1" />
-    <activate id="vtkCompositeMesh" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="opVTKMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-    
-</profile>
diff --git a/Apps/Tuto06Filter/COPYING b/Apps/Tuto06Filter/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto06Filter/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto06Filter/COPYING.LESSER b/Apps/Tuto06Filter/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto06Filter/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto06Filter/Properties.cmake b/Apps/Tuto06Filter/Properties.cmake
deleted file mode 100644
index db79c7b..0000000
--- a/Apps/Tuto06Filter/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto06Filter )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleNegato uiIO opImageFilter appXml )
-
diff --git a/Apps/Tuto06Filter/bin/build.options b/Apps/Tuto06Filter/bin/build.options
deleted file mode 100755
index d084622..0000000
--- a/Apps/Tuto06Filter/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'uiIO_0-1'              ,
-    'opImageFilter_0-1'     ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto06Filter/rc/plugin.xml b/Apps/Tuto06Filter/rc/plugin.xml
deleted file mode 100644
index 1431e4a..0000000
--- a/Apps/Tuto06Filter/rc/plugin.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<plugin id="Tuto06Filter">
-
-<requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>FilterConfig</id>
-        <type>parameters</type>
-        <config>
-        
-    <!-- Root object -->
-    <object type="::fwData::Composite">
-        <!-- Windows & Main Menu -->
-        <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no" >
-            <gui>
-                <frame>
-                    <name>Filter</name>
-                    <icon>Bundles/Tuto06Filter_0-1/tuto.ico</icon>
-                    <minSize width="720" height="600"/>
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="myDefaultView" start="yes" />
-            </registry>
-        </service>
-        
-       <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                     <menu name="File" />
-                     <menu name="Filter" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menuFile" start="yes" />
-                <menu sid="menuFilter" start="yes" />
-            </registry>
-        </service>
-        
-        <service uid="myDefaultView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::CardinalLayoutManager" >
-                    <view align="center" />
-                    <view align="right" minWidth="500" minHeight="100" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="RenderingImage1" start="yes" />
-                <view sid="RenderingImage2" start="yes" />
-            </registry>
-        </service> 
-        
-        <!-- Menus -->
-        <service uid="menuFile" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open image file" shortcut="Ctrl+O" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="actionOpenImageFile" start="yes" />
-                <menuItem sid="actionQuit" start="yes" />
-            </registry>
-        </service>
-        <service uid="menuFilter" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Compute Image Filter" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="actionImageFilter" start="yes" />
-            </registry>
-        </service>
-        
-        <!-- Actions on Menus -->         
-        <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-        <service uid="actionOpenImageFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no" >
-            <start uid="readerPathImageFile"/>
-        </service>
-        <service uid="actionImageFilter" type="::fwGui::IActionSrv" impl="::opImageFilter::action::ImageFilter" autoConnect="no" >
-            <imageIn  uid="myImage1"/>
-            <imageOut uid="myImage2"/>
-        </service>
-        <!-- Services on objects -->
-        <!-- 1st Object of the composite -->
-        <item key="myImage1">
-            <object uid="myImage1" type="::fwData::Image">
-                <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="RenderingImage1" autoConnect="yes" />
-                <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="readerPathImageFile" autoConnect="no" >
-                    <type mode="reader"/>
-                </service>
-            </object>
-        </item>
-        <!-- 2nd Object of the composite -->       
-        <item key="myImage2">
-            <object uid="myImage2" type="::fwData::Image">
-                <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="RenderingImage2" autoConnect="yes" />
-            </object> 
-        </item>
-    
-    <!-- Starting order of services -->
-    <start uid="myFrame" />
-
-    
-  </object>
-  
-        </config>
-    </extension>
-</plugin>    
diff --git a/Apps/Tuto06Filter/rc/profile.xml b/Apps/Tuto06Filter/rc/profile.xml
deleted file mode 100644
index 6eca689..0000000
--- a/Apps/Tuto06Filter/rc/profile.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="Filter" version="0.1">
-
-    <!-- List of the basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto06Filter" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="FilterConfig" />
-    </activate>
-
-    <!-- List of the specific bundles. -->
-    <activate id="ioData" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="opImageFilter" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto07LoaderForExternalData/COPYING b/Apps/Tuto07LoaderForExternalData/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto07LoaderForExternalData/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto07LoaderForExternalData/COPYING.LESSER b/Apps/Tuto07LoaderForExternalData/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto07LoaderForExternalData/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto07LoaderForExternalData/Properties.cmake b/Apps/Tuto07LoaderForExternalData/Properties.cmake
deleted file mode 100644
index 19f4fbb..0000000
--- a/Apps/Tuto07LoaderForExternalData/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto07LoaderForExternalData )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioAtoms ioTuto vtkSimpleNegato uiIO ctrlSelection appXml )
-
diff --git a/Apps/Tuto07LoaderForExternalData/bin/build.options b/Apps/Tuto07LoaderForExternalData/bin/build.options
deleted file mode 100644
index 614b61d..0000000
--- a/Apps/Tuto07LoaderForExternalData/bin/build.options
+++ /dev/null
@@ -1,20 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioAtoms_0-1'           ,
-    'ioTuto_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'uiIO_0-1'              ,
-    'ctrlSelection_0-1'     ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto07LoaderForExternalData/rc/ExternalData.us b/Apps/Tuto07LoaderForExternalData/rc/ExternalData.us
deleted file mode 100644
index f417067..0000000
--- a/Apps/Tuto07LoaderForExternalData/rc/ExternalData.us
+++ /dev/null
@@ -1,5 +0,0 @@
-image1
-1.1 2.1 3.1 4.1 5.1 6.1 7.1 8.1 9.1 10.1 11.1 12.1 13.1 14.1 15.1 16.1
-11.1 12.1 13.1 14.1 15.1 16.1 17.1 18.1 19.1 20.1 21.1 22.1 23.1 24.1 25.1 26.1
-1.01 2.01 3.01 4.01 5.01 6.01 7.01 8.01 9.01 10.01 11.01 12.01 13.01 14.01 15.01 16.01
-11.001 12.001 13.001 14.001 15.001 16.001 17.001 18.001 19.001 20.001 21.001 22.001 23.001 24.001 25.001 26.001
\ No newline at end of file
diff --git a/Apps/Tuto07LoaderForExternalData/rc/plugin.xml b/Apps/Tuto07LoaderForExternalData/rc/plugin.xml
deleted file mode 100644
index 64b24d1..0000000
--- a/Apps/Tuto07LoaderForExternalData/rc/plugin.xml
+++ /dev/null
@@ -1,286 +0,0 @@
-<plugin id="Tuto07LoaderForExternalData">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoLoaderExternalDataConfig</id>
-        <type>parameters</type>
-        <config>
-
-
-            <!-- The root data object in TutoConfigurations is a ::fwData::Composite. because it has to manage several objects-->
-            <object type="::fwData::Composite">
-
-                <!--
-                    Graphical user interface manager. The identifier (id) of the container is 900, it's a wxWidgets id. In the tag <menus> we specify the identifiers of different services for the
-                    different menus. In this tutorial, only one service (::gui::aspect::IMenu type) is created. This application have 2 menu one to open/save image and one to load/save extra data.
-                    There are FW4SPL identifiers.
-                -->
-                <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                    <gui>
-                        <frame>
-                            <name>Tuto07LoaderForExternalData</name>
-                            <icon>Bundles/Tuto07LoaderForExternalData_0-1/tuto.ico</icon>
-                        </frame>
-                        <menuBar />
-                    </gui>
-                    <registry>
-                        <menuBar sid="myMenuBar" start="yes" />
-                        <view sid="myRenderingTuto" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menu name="File" />
-                            <menu name="External data" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menu sid="menu_File" start="yes" />
-                        <menu sid="menu_ExternalData" start="yes" />
-                    </registry>
-                </service>
-
-                <!-- This service define the file menu -->
-                <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menuItem name="Open image" shortcut="Ctrl+O" />
-                            <menuItem name="Save image" shortcut="Ctrl+S" />
-                            <separator />
-                            <menuItem name="Save all data (External data + image)" />
-                            <separator />
-                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menuItem sid="action_openFile" start="yes" />
-                        <menuItem sid="action_SaveFile" start="yes" />
-                        <menuItem sid="action_SaveAll" start="yes" />
-                        <menuItem sid="action_quit" start="yes" />
-                    </registry>
-                </service>
-
-                <!-- This service define the External menu -->
-                <service uid="menu_ExternalData" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menuItem name="Import External data (*.us file)" />
-                            <menuItem name="Load External data" />
-                            <menuItem name="Save External data" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menuItem sid="ActionLoadExternalData" start="yes" />
-                        <menuItem sid="ActionLoadExternalDataNative" start="yes" />
-                        <menuItem sid="ActionSaveExternalData" start="yes" />
-                    </registry>
-                </service>
-
-                <!--
-                    This service (::gui::action::QuitAction) is a generic action that will close the application when the user click on the menuItem "Quit". It's possible to associate with this kind
-                    of service (::fwGui::IActionSrv) specific attributes to configure their style, shortcut... (Note: In this tutorial, there is an attribute specialAction with the value "QUIT". On MS
-                    Windows, there's no impact. But on Mac OS, this value installs the menuItem in the system menu bar, and on Linux this value installs the default 'Quit' system icon in the
-                    menuItem.) The attribute "shortcut" is set with the value "Ctrl+Q" to close the application with this specific shortcut.
-                -->
-                <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-                <service uid="action_SaveAll" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                    <start uid="saveAllData" />
-                </service>
-
-                <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="saveAllData" autoConnect="no">
-                    <type mode="writer" />
-                    <selection mode="include" />
-                    <addSelection service="::ioAtoms::SWriter" />
-                </service>
-
-                <!--  a ::fwData::Image. -->
-                <item key="tutoLoaderExternalDataImage">
-                    <object type="::fwData::Image">
-                        <!--
-                            The first service (::gui::action::StarterActionService) is a generic action. In the configuration of this service, we specify the id of the services to be started and
-                            updated (start and update methods) when user click on the menuItem "Open image". In this tutorial, ::gui::action::StarterActionService service starts and updates the
-                            service with the uid "myReaderPathFile".
-                        -->
-                        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="myReaderPathFile" />
-                        </service>
-                        <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="myReaderPathFile" autoConnect="no">
-                            <type mode="reader" />
-                        </service>
-
-                        <!--
-                            The other service (::gui::action::StarterActionService) is a generic action. In the configuration of this service, we specify the id of the services to be started and
-                            updated (start and update methods) when user click on the menuItem "save image". In this tutorial, ::gui::action::StarterActionService service starts and updates the
-                            service with the uid "myWriterPathFile".
-                        -->
-                        <service uid="action_SaveFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="myWriterPathFile" />
-                        </service>
-                        <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="myWriterPathFile" autoConnect="no">
-                            <type mode="writer" />
-                        </service>
-
-                        <!-- This service (::vtkSimpleNegato::RendererService) is a 3D visualization service of medical images.-->
-                        <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="myRenderingTuto" autoConnect="yes" />
-
-                    </object>
-                </item>
-
-                <!--  a ::fwData::Composite uses to store extra information. -->
-                <item key="ExternalData">
-                    <object type="::fwData::Composite">
-                        <service impl="::ioTuto::ExternalDataReaderService" type="::io::IReader" uid="loadExternalData" autoConnect="no">
-                        </service>
-                        <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="loadExternalDataNative" autoConnect="no">
-                            <type mode="reader" />
-                            <selection mode="include" />
-                            <addSelection service="::ioAtoms::SReader" />
-                        </service>
-                        <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="saveExternalData" autoConnect="no">
-                            <type mode="writer" />
-                            <selection mode="include" />
-                            <addSelection service="::ioAtoms::SWriter" />
-                        </service>
-
-                        <service uid="ActionLoadExternalData" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="loadExternalData" />
-                        </service>
-
-                        <service uid="ActionSaveExternalData" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="saveExternalData" />
-                        </service>
-                        <service uid="ActionLoadExternalDataNative" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="loadExternalDataNative" />
-                        </service>
-                    </object>
-                </item>
-
-                <!-- Definition of the starting and closing order of the different services.-->
-                <start uid="myFrame" />
-
-            </object>
-
-        </config>
-    </extension>
-
-
-
-
-
-
-
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoLoaderExternalDataImageOnlyConfig</id>
-        <type>parameters</type>
-        <config>
-
-
-            <!-- The root data object in TutoConfigurations is a ::fwData::Composite. because it has to manage several objects -->
-            <object type="::fwData::Composite">
-            
-                <!--
-                    Graphical user interface manager. The identifier (id) of the container is 900, it's a wxWidgets id. In the tag <menus> we specify the identifiers of different services for the
-                    different menus. In this tutorial, only one service (::gui::aspect::IMenu type) is created. This application have 2 menu one to open/save image and one to load/save extra data.
-                    There are FW4SPL identifiers.
-                -->
-
-                <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                    <gui>
-                        <frame>
-                            <name>Tuto07LoaderForExternalData</name>
-                            <icon>Bundles/Tuto07LoaderForExternalData_0-1/tuto.ico</icon>
-                        </frame>
-                        <menuBar />
-                    </gui>
-                    <registry>
-                        <menuBar sid="myMenuBar" start="yes" />
-                        <view sid="myRenderingTuto" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menu name="File" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menu sid="menu_File" start="yes" />
-                    </registry>
-                </service>
-
-                <!-- This service define the file menu -->
-                <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menuItem name="Open image" shortcut="Ctrl+O" />
-                            <menuItem name="Save image" shortcut="Ctrl+S" />
-                            <separator />
-                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menuItem sid="action_openFile" start="yes" />
-                        <menuItem sid="action_SaveFile" start="yes" />
-                        <menuItem sid="action_quit" start="yes" />
-                    </registry>
-                </service>
-
-
-                <!--
-                    This service (::gui::action::QuitAction) is a generic action that will close the application when the user click on the menuItem "Quit". It's possible to associate with this kind
-                    of service (::fwGui::IActionSrv) specific attributes to configure their style, shortcut... (Note: In this tutorial, there is an attribute specialAction with the value "QUIT". On MS
-                    Windows, there's no impact. But on Mac OS, this value installs the menuItem in the system menu bar, and on Linux this value installs the default 'Quit' system icon in the
-                    menuItem.) The attribute "shortcut" is set with the value "Ctrl+Q" to close the application with this specific shortcut.
-                -->
-                <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-                <!--  a ::fwData::Image. -->
-                <item key="tutoLoaderExternalDataImage">
-                    <object type="::fwData::Image">
-                        <!--
-                            The first service (::gui::action::StarterActionService) is a generic action. In the configuration of this service, we specify the id of the services to be started and
-                            updated (start and update methods) when user click on the menuItem "Open image". In this tutorial, ::gui::action::StarterActionService service starts and updates the
-                            service with the uid "myReaderPathFile".
-                        -->
-                        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="myReaderPathFile" />
-                        </service>
-                        <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="myReaderPathFile" autoConnect="no">
-                            <type mode="reader" />
-                        </service>
-                        <service impl="::ctrlSelection::wrapper::ImageWrapperSrv" type="::ctrlSelection::IWrapperSrv" uid="newOBject2newImage" autoConnect="yes" />
-
-                        <!--
-                            The other service (::gui::action::StarterActionService) is a generic action. In the configuration of this service, we specify the id of the services to be started and
-                            updated (start and update methods) when user click on the menuItem "save image". In this tutorial, ::gui::action::StarterActionService service starts and updates the
-                            service with the uid "myWriterPathFile".
-                        -->
-                        <service uid="action_SaveFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="myWriterPathFile" />
-                        </service>
-                        <service impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" uid="myWriterPathFile" autoConnect="no">
-                            <type mode="writer" />
-                        </service>
-
-                        <!-- This service (::vtkSimpleNegato::RendererService) is a 3D visualization service of medical images. -->
-                        <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="myRenderingTuto" autoConnect="yes" />
-
-                    </object>
-                </item>
-
-                <!-- Definition of the starting and closing order of the different services. -->
-                <start uid="myFrame" />
-                <start uid="newOBject2newImage" />
-
-            </object>
-
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto07LoaderForExternalData/rc/profile.xml b/Apps/Tuto07LoaderForExternalData/rc/profile.xml
deleted file mode 100644
index 405d5ce..0000000
--- a/Apps/Tuto07LoaderForExternalData/rc/profile.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<profile name="tutoLoaderExternalData" version="0.1">
-
-    <!-- List of basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto07LoaderForExternalData" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="tutoLoaderExternalDataConfig" />
-    </activate>
-
-    <!-- List of specific bundles. -->
-    <activate id="ioAtoms" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1"/>
-    <activate id="ioTuto" version="0-1"/>    
-    <activate id="uiIO" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-    
-    <!-- List of the specific bundles that need to be loaded in this application context. -->
-    <start id="dataReg" />
-    <start id="ioData"/>
-    <start id="ioTuto"/>
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-    
-</profile>
diff --git a/Apps/Tuto07LoaderForExternalData/rc/profileImageOnly.xml b/Apps/Tuto07LoaderForExternalData/rc/profileImageOnly.xml
deleted file mode 100644
index e53a3a8..0000000
--- a/Apps/Tuto07LoaderForExternalData/rc/profileImageOnly.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<profile name="tutoLoaderExternalData" version="0.1">
-
-    <!-- List of basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto07LoaderForExternalData" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="tutoLoaderExternalDataImageOnlyConfig" />
-    </activate>
-
-    <!-- List of specific bundles. -->
-    <activate id="ioAtoms" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1"/>
-    <activate id="ioTuto" version="0-1"/>
-    <activate id="uiIO" version="0-1" />
-    <activate id="ctrlSelection" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-
-    <!-- List of the specific bundles that need to be loaded in this application context. -->
-    <start id="dataReg" />
-    <start id="ioData"/>
-    <start id="ioTuto"/>
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto08GenericScene/COPYING b/Apps/Tuto08GenericScene/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto08GenericScene/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto08GenericScene/COPYING.LESSER b/Apps/Tuto08GenericScene/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto08GenericScene/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto08GenericScene/Properties.cmake b/Apps/Tuto08GenericScene/Properties.cmake
deleted file mode 100644
index b32abd7..0000000
--- a/Apps/Tuto08GenericScene/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto08GenericScene )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS dataReg ctrlSelection gui guiQt ioData ioVTK io servicesReg uiVisuQt uiImageQt uiIO visuVTK visuVTKQt visuVTKAdaptor visu launcher appXml )
-
diff --git a/Apps/Tuto08GenericScene/bin/build.options b/Apps/Tuto08GenericScene/bin/build.options
deleted file mode 100644
index 3211db7..0000000
--- a/Apps/Tuto08GenericScene/bin/build.options
+++ /dev/null
@@ -1,22 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'dataReg_0-1'       ,
-    'ctrlSelection_0-1' ,
-    'gui_0-1'           ,
-    'guiQt_0-1'         ,
-    'ioData_0-1'        ,
-    'ioVTK_0-1'         ,
-    'io_0-1'            ,
-    'servicesReg_0-1'   ,
-    'uiVisuQt_0-1'      ,
-    'uiImageQt_0-1'     ,
-    'uiIO_0-1'          ,
-    'visuVTK_0-1'       ,
-    'visuVTKQt_0-1'     ,
-    'visuVTKAdaptor_0-1',
-    'visu_0-1'          ,
-    'launcher_0-1'      ,
-    'appXml_0-1'        ,
- ]
diff --git a/Apps/Tuto08GenericScene/rc/plugin.xml b/Apps/Tuto08GenericScene/rc/plugin.xml
deleted file mode 100644
index 5b9212e..0000000
--- a/Apps/Tuto08GenericScene/rc/plugin.xml
+++ /dev/null
@@ -1,181 +0,0 @@
-<plugin id="Tuto08GenericScene">
-
-<requirement id="servicesReg" />
-
-<extension implements="::fwServices::registry::AppConfig">
-        <id>Tuto08GenericScene</id>
-        <type>parameters</type>
-        <config>
-
-
-    <object type="::fwData::Composite">
-        <service uid="MyIHM" impl="::gui::frame::DefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
-            <gui>
-                <frame>
-                    <name>Tuto08GenericScene</name>
-                    <icon>Bundles/Tuto08GenericScene_0-1/tuto.ico</icon>
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="multiView_scene1" start="yes" />
-            </registry>
-        </service>
-        <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menu_File" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open image" shortcut="Ctrl+I" />
-                    <menuItem name="Open mesh" shortcut="Ctrl+M" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openImage" start="yes" />
-                <menuItem sid="action_openMesh" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="action_openImage" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-            <start uid="imageReader" />
-        </service>
-        <service uid="action_openMesh" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-            <start uid="meshReader" />
-        </service>
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-        <service uid="multiView_scene1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::CardinalLayoutManager" >
-                    <view align="center" />
-                    <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="genericScene" start="yes" />
-                <view sid="multiView_scene1_bottom" start="yes" />
-            </registry>
-        </service>
-
-
-        <service uid="multiView_scene1_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-            <gui>
-                <layout type="::fwGui::LineLayoutManager" >
-                    <orientation value="horizontal" />
-                    <view proportion="0" minWidth="30" />
-                    <view proportion="0" minWidth="50" />
-                    <view proportion="1" />
-                    <view proportion="0" minWidth="30" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="sliceListEditor" start="no" />
-                <view sid="showScanEditor" start="no" />
-                <view sid="sliderIndexEditor" start="no" />
-                <view sid="snapshotScene1Editor" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="snapshotScene1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-            <snap>
-                <scene uid="genericScene" />
-            </snap>
-        </service>
-        
-        <item key="mesh">
-            <object uid="meshUID" type="::fwData::Mesh">
-                <service uid="meshReader" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                    <type mode="reader" />
-                </service>
-            </object>
-        </item>
-        <item key="image">
-            <object uid="imageUID"  type="::fwData::Image">
-                <service uid="imageReader" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                    <type mode="reader" />
-                </service>
-            </object>
-        </item>
-        
-        <!-- CompositeVisu description -->
-        <item key="myCompositeVisu">
-            <object uid="myCompositeVisu" type="::fwData::Composite">
-
-                <service uid="updaterUID" impl="::ctrlSelection::updater::ObjFromMsgUpdaterSrv" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-                    <update compositeKey="image" onEvent="NEW_IMAGE" fromUID="imageUID" actionType="ADD_OR_SWAP"/>
-                    <update compositeKey="mesh" onEvent="NEW_MESH" fromUID="meshUID" actionType="ADD_OR_SWAP"/>
-                </service>
-                
-                <service uid="genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                    <scene>
-                        <picker id="myPicker" vtkclass="fwVtkCellPicker" />
-                        
-                        <renderer id="default" background="0.0" />
-
-                        <adaptor id="meshAdaptor" class="::visuVTKAdaptor::Mesh" objectId="mesh">
-                            <config renderer="default" picker="" />
-                        </adaptor>
-
-                        <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
-                            <config renderer="default" picker="myPicker" mode="3d" slices="3" sliceIndex="axial" />
-                        </adaptor>
-                            
-                        <adaptor id="snapshot1" class="::visuVTKAdaptor::Snapshot" objectId="self" >
-                            <config renderer="default" />
-                        </adaptor>
-                        
-                    </scene>
-                </service>
-                
-                <service uid="manager" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes"  >
-                    <mode type="stop" />
-                    <config>
-                        <object id="image" type="::fwData::Image">
-                            <!-- This service convert a simple fwData::Image to medical Image -->
-                            <service uid="medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController"  autoConnect="yes" />
-                            <service uid="sliceListEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor" autoConnect="yes">
-                                <negatoAdaptor uid="MPRNegatoScene3D" slices="3" />
-                            </service>
-                            <service uid="showScanEditor" type="::gui::editor::IEditor" impl="::uiImage::ShowScanEditor" autoConnect="no">
-                                <negatoAdaptor uid="MPRNegatoScene3D" />
-                            </service>
-                            <service uid="sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes" >
-                                <sliceIndex>axial</sliceIndex>
-                            </service>
-                        </object>
-                    </config>
-                </service>
-                
-                <proxy channel="UPDATER_CHANNEL" >
-                    <signal>imageUID/objectModified</signal>
-                    <signal>meshUID/objectModified</signal>
-                    <slot>updaterUID/receive</slot>
-                </proxy>
-
-            </object>
-        </item>
-
-        <start uid="MyIHM" />
-        <start uid="updaterUID" />
-        <start uid="manager" />
-
-    </object>
-
-
-        </config>
-    </extension>
-
-</plugin>
diff --git a/Apps/Tuto08GenericScene/rc/profile.xml b/Apps/Tuto08GenericScene/rc/profile.xml
deleted file mode 100644
index c28bce8..0000000
--- a/Apps/Tuto08GenericScene/rc/profile.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="Tuto08GenericScene" version="0.1" check-single-instance="true">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto08GenericScene" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="Tuto08GenericScene" />
-    </activate>
-
-    <activate id="ctrlSelection" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
-    <activate id="uiImageQt" version="0-1" />
-
-    <start id="visuVTK" />
-    <start id="visuVTKAdaptor" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto09MesherWithGenericScene/COPYING b/Apps/Tuto09MesherWithGenericScene/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto09MesherWithGenericScene/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto09MesherWithGenericScene/COPYING.LESSER b/Apps/Tuto09MesherWithGenericScene/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto09MesherWithGenericScene/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto09MesherWithGenericScene/Properties.cmake b/Apps/Tuto09MesherWithGenericScene/Properties.cmake
deleted file mode 100644
index ab362df..0000000
--- a/Apps/Tuto09MesherWithGenericScene/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto09MesherWithGenericScene )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS launcher dataReg servicesReg gui guiQt io visu ioData ioVTK uiVisuQt uiImageQt uiReconstructionQt uiMedDataQt uiIO visuVTK visuVTKQt visuVTKAdaptor opVTKMesh ctrlSelection appXml )
-
diff --git a/Apps/Tuto09MesherWithGenericScene/bin/build.options b/Apps/Tuto09MesherWithGenericScene/bin/build.options
deleted file mode 100644
index 026d68b..0000000
--- a/Apps/Tuto09MesherWithGenericScene/bin/build.options
+++ /dev/null
@@ -1,25 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'launcher_0-1'           ,
-    'dataReg_0-1'            ,
-    'servicesReg_0-1'        ,
-    'gui_0-1'                ,
-    'guiQt_0-1'              ,
-    'io_0-1'                 ,
-    'visu_0-1'               ,
-    'ioData_0-1'             ,
-    'ioVTK_0-1'              ,
-    'uiVisuQt_0-1'           ,
-    'uiImageQt_0-1'          ,
-    'uiReconstructionQt_0-1' ,
-    'uiMedDataQt_0-1'        ,
-    'uiIO_0-1'               ,
-    'visuVTK_0-1'            ,
-    'visuVTKQt_0-1'          ,
-    'visuVTKAdaptor_0-1'     ,
-    'opVTKMesh_0-1'          ,
-    'ctrlSelection_0-1'      ,
-    'appXml_0-1'             ,
-]
diff --git a/Apps/Tuto09MesherWithGenericScene/rc/plugin.xml b/Apps/Tuto09MesherWithGenericScene/rc/plugin.xml
deleted file mode 100644
index 25b644f..0000000
--- a/Apps/Tuto09MesherWithGenericScene/rc/plugin.xml
+++ /dev/null
@@ -1,236 +0,0 @@
-<plugin id="Tuto09MesherWithGenericScene">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>Tuto09MesherWithGenericScene</id>
-        <type>parameters</type>
-        <config>
-
-            <object type="::fwData::Composite">
-
-                <service uid="MyIHM" impl="::gui::frame::DefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
-                    <gui>
-                        <frame>
-                            <name>Tuto09MesherWithGenericScene</name>
-                            <icon>Bundles/Tuto09MesherWithGenericScene_0-1/tuto.ico</icon>
-                        </frame>
-                        <menuBar />
-                    </gui>
-                    <registry>
-                        <menuBar sid="myMenuBar" start="yes" />
-                        <view sid="multiView_scene1" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menu name="File" />
-                            <menu name="Mesher" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menu sid="menu_File" start="yes" />
-                        <menu sid="menu_Mesher" start="yes" />
-                    </registry>
-                </service>
-
-
-                <service uid="multiView_scene1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                    <gui>
-                        <layout type="::fwGui::CardinalLayoutManager">
-                            <view align="center" minWidth="200" />
-                            <view align="right" minWidth="200" minHeight="200" position="0" />
-                            <view align="right" minWidth="200" minHeight="80" position="1" />
-                            <view align="right" minWidth="200" minHeight="200" position="2" />
-                            <view align="bottom" minHeight="30" resizable="no" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <view sid="genericScene" start="yes" />
-                        <view sid="listOrganEditor" start="yes" />
-                        <view sid="organMaterialEditor" />
-                        <view sid="representationEditor" />
-                        <view sid="multiView_scene1_bottom" start="yes" />
-                    </registry>
-                </service>
-                <service uid="multiView_scene1_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                    <gui>
-                        <layout type="::fwGui::LineLayoutManager">
-                            <orientation value="horizontal" />
-                            <view proportion="0" minWidth="30" />
-                            <view proportion="0" minWidth="50" />
-                            <view proportion="1" />
-                            <view proportion="0" minWidth="30" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <view sid="sliceListEditor" />
-                        <view sid="showScanEditor" />
-                        <view sid="sliderIndexEditor" />
-                        <view sid="snapshotScene1Editor" start="yes" />
-                    </registry>
-                </service>
-
-
-                <service uid="snapshotScene1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-                    <snap>
-                        <scene uid="genericScene" />
-                    </snap>
-                </service>
-
-                <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menuItem name="Open image" shortcut="Ctrl+O" />
-                            <menuItem name="Save meshes" shortcut="Ctrl+S" />
-                            <separator />
-                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menuItem sid="action_openImage" start="yes" />
-                        <menuItem sid="action_saveModelSeries" start="yes" />
-                        <menuItem sid="action_quit" start="yes" />
-                    </registry>
-                </service>
-                <service uid="menu_Mesher" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menuItem name="Create Mesh 50" />
-                            <menuItem name="Create Mesh 80" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menuItem sid="action_createMesh50" start="no" />
-                        <menuItem sid="action_createMesh80" start="no" />
-                    </registry>
-                </service>
-
-                <service uid="action_openImage" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                    <start uid="imageReader" />
-                </service>
-                <service uid="action_saveModelSeries" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                    <start uid="modelSeriesWriter" />
-                </service>
-                <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-                
-                <item key="image">
-                    <object uid="imageUID"  type="::fwData::Image">
-                        <service uid="imageReader" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                            <type mode="reader" />
-                        </service>
-                    </object>
-                </item>
-        
-                <!-- CompositeVisu description -->
-                <item key="myCompositeVisu">
-                    <object uid="myCompositeVisu" type="::fwData::Composite">
-                       
-                       <service uid="updaterImageUID" impl="::ctrlSelection::updater::ObjFromMsgUpdaterSrv" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-                            <update compositeKey="image" onEvent="NEW_IMAGE" fromUID="imageUID" actionType="ADD_OR_SWAP"/>
-                        </service>
-                
-                        <service uid="mesher50ServiceUID" impl="::opVTKMesh::SVTKMesher" type="::opVTKMesh::IMesher" autoConnect="no">
-                            <config>
-                                <percentReduction>50</percentReduction>
-                                <image>image</image>
-                                <modelSeries>modelSeries</modelSeries>
-                            </config>
-                        </service>
-                        
-                        <service uid="mesher80ServiceUID" impl="::opVTKMesh::SVTKMesher" type="::opVTKMesh::IMesher" autoConnect="no">
-                            <config>
-                                <percentReduction>80</percentReduction>
-                                <image>image</image>
-                                <modelSeries>modelSeries</modelSeries>
-                            </config>
-                        </service>
-
-                        <service uid="updaterReconstUID" impl="::ctrlSelection::updater::SReconstructionFromModelSeriesUpdater" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-                            <update compositeKey="reconstruction" onEvent="NEW_RECONSTRUCTION_SELECTED" fromUID="*" actionType="ADD_OR_SWAP" />
-                        </service>
-
-                        <service uid="managerUID" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
-                            <mode type="stop" />
-                            <config>
-
-                                <object id="image" type="::fwData::Image">
-                                    <!-- This service convert a simple fwData::Image to medical Image -->
-                                    <service impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController"  autoConnect="yes" />
-                                    <service uid="action_createMesh50" impl="::gui::action::StarterActionService" type="::fwGui::IActionSrv" autoConnect="no">
-                                        <start_if_exists uid="mesher50ServiceUID" />
-                                    </service>
-                                    <service uid="action_createMesh80" impl="::gui::action::StarterActionService" type="::fwGui::IActionSrv" autoConnect="no">
-                                        <start_if_exists uid="mesher80ServiceUID" />
-                                    </service>
-                                    <service uid="sliceListEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor" autoConnect="yes">
-                                        <negatoAdaptor uid="MPRNegatoScene3D" slices="3" />
-                                    </service>
-                                    <service uid="showScanEditor" type="::gui::editor::IEditor" impl="::uiImage::ShowScanEditor" autoConnect="no">
-                                        <negatoAdaptor uid="MPRNegatoScene3D" />
-                                    </service>
-                                    <service uid="sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
-                                        <sliceIndex>axial</sliceIndex>
-                                    </service>
-                                </object>
-                                
-                                <object id="reconstruction" type="::fwData::Reconstruction">
-                                    <service uid="organMaterialEditor" impl="::uiReconstruction::OrganMaterialEditor" type="::gui::editor::IEditor" autoConnect="no" />
-                                    <service uid="representationEditor" impl="::uiReconstruction::RepresentationEditor" type="::gui::editor::IEditor" autoConnect="no" />
-                                </object>
-                                
-                            </config>
-                        </service>
-
-                        <service uid="genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                            <scene>
-
-                                <picker id="myPicker" vtkclass="fwVtkCellPicker" />
-                                <renderer id="default" background="0.0" />
-                                <adaptor id="modelSeriesAdaptor" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
-                                    <config renderer="default" picker="" />
-                                </adaptor>
-                                <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
-                                    <config renderer="default" picker="myPicker" mode="3D" slices="3" sliceIndex="axial" />
-                                </adaptor>
-                                <adaptor id="snapshot1" class="::visuVTKAdaptor::Snapshot" objectId="self">
-                                    <config renderer="default" />
-                                </adaptor>
-
-                            </scene>
-                        </service>
-                        
-                        <item key="modelSeries">
-                            <object uid="modelSeriesUID" type="::fwMedData::ModelSeries">
-                                <service uid="listOrganEditor" impl="::uiMedData::editor::SModelSeriesList" type="::gui::editor::IEditor" autoConnect="yes" />
-                                <service uid="modelSeriesWriter" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                                    <type mode="writer" />
-                                </service>
-                            </object>
-                        </item>
-                        
-                        <connect>
-                            <signal>modelSeriesUID/objectModified</signal>
-                            <slot>updaterReconstUID/receive</slot>
-                        </connect>
-                        <connect>
-                            <signal>imageUID/objectModified</signal>
-                            <slot>updaterImageUID/receive</slot>
-                        </connect>
-                    </object>
-                    
-                </item>
-
-                <start uid="MyIHM" />
-                <start uid="updaterReconstUID" />
-                <start uid="updaterImageUID" />
-                <start uid="managerUID" />
-
-            </object>
-
-        </config>
-    </extension>
-
-</plugin>
diff --git a/Apps/Tuto09MesherWithGenericScene/rc/profile.xml b/Apps/Tuto09MesherWithGenericScene/rc/profile.xml
deleted file mode 100644
index 4dea5ad..0000000
--- a/Apps/Tuto09MesherWithGenericScene/rc/profile.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<profile name="Tuto09MesherWithGenericScene" version="0.1" check-single-instance="true"> 
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" /> 
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto09MesherWithGenericScene" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="Tuto09MesherWithGenericScene" />
-    </activate>
-    
-    <activate id="io" version="0-1" />
-    <activate id="visu" version="0-1" />
-
-    <activate id="ctrlSelection" version="0-1" />
-    
-    <activate id="ioVTK" version="0-1" />
-    
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    
-    <activate id="uiIO" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
-    <activate id="uiImageQt" version="0-1" />
-    <activate id="uiReconstructionQt" version="0-1" />
-    <activate id="uiMedDataQt" version="0-1" />
-    
-    <activate id="opVTKMesh" version="0-1" />
-    
-    <!-- Start components -->
-    <start id="visuVTK" />
-    <start id="visuVTKQt" />
-    <start id="visuVTKAdaptor" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto10MatrixTransformInGS/COPYING b/Apps/Tuto10MatrixTransformInGS/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto10MatrixTransformInGS/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto10MatrixTransformInGS/COPYING.LESSER b/Apps/Tuto10MatrixTransformInGS/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto10MatrixTransformInGS/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto10MatrixTransformInGS/Properties.cmake b/Apps/Tuto10MatrixTransformInGS/Properties.cmake
deleted file mode 100644
index 0fda023..0000000
--- a/Apps/Tuto10MatrixTransformInGS/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto10MatrixTransformInGS )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu launcher ioVTK ioData uiIO uiVisuQt visuVTK visuVTKQt visuVTKAdaptor appXml )
-
diff --git a/Apps/Tuto10MatrixTransformInGS/bin/build.options b/Apps/Tuto10MatrixTransformInGS/bin/build.options
deleted file mode 100755
index 43521b5..0000000
--- a/Apps/Tuto10MatrixTransformInGS/bin/build.options
+++ /dev/null
@@ -1,20 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'uiIO_0-1'              ,
-    'uiVisuQt_0-1'          ,
-    'visuVTK_0-1'           ,
-    'visuVTKQt_0-1'         ,
-    'visuVTKAdaptor_0-1'    ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto10MatrixTransformInGS/rc/plugin.xml b/Apps/Tuto10MatrixTransformInGS/rc/plugin.xml
deleted file mode 100644
index d938516..0000000
--- a/Apps/Tuto10MatrixTransformInGS/rc/plugin.xml
+++ /dev/null
@@ -1,231 +0,0 @@
-<plugin id="Tuto10MatrixTransformInGS">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tuto</id>
-        <type>parameters</type>
-        <config>
-        
-
-        <object type="::fwData::Composite" >
-        
-            <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no" >
-                <gui>
-                    <frame>
-                        <name>Tuto10MatrixTransformInGS</name>
-                        <icon>Bundles/Tuto10MatrixTransformInGS_0-1/tuto.ico</icon>
-                        <minSize width="800" height="600"/>
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="myMenuBar" start="yes" />
-                    <view sid="multiView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menu name="File"/>
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="menu_File" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="OpenFile" shortcut="Ctrl+O" />
-                        <separator />
-                        <menuItem name="Quit" shortcut="Ctrl+Q" specialAction="QUIT" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="action_openFile" start="yes" />
-                    <menuItem sid="action_quit" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="myReaderPathFile" />
-            </service>
-
-            <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-            <service uid="multiView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager" >
-                        <view align="center" />
-                        <view align="bottom" minHeight="40" position="0" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="genericScene" start="yes" />
-                    <view sid="matrixEditor" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                <scene>
-
-                    <renderer id="default" background="0.0" />
-
-                    <picker id="myPicker" vtkclass="fwVtkCellPicker" />
-
-                    <vtkObject id="mat1" class="vtkTransform" />
-                    <vtkObject id="mat2" class="vtkTransform" />
-                    <vtkObject id="mat3" class="vtkTransform" />
-                    <vtkObject id="mat4" class="vtkTransform" />
-                    <vtkObject id="mat5" class="vtkTransform" />
-                    
-                    <!-- mat5 = mat5 x mat1 x mat4 -->
-                    <vtkObject id="mat6" class="vtkTransform" >
-                        <vtkTransform>
-                            <concatenate>mat5</concatenate>
-                            <concatenate>mat1</concatenate>
-                            <concatenate>mat4</concatenate>
-                        </vtkTransform>
-                    </vtkObject>
-                    
-                    <!-- mat6 = mat5 x mat2 x mat5 x mat5 x mat5 x mat4 x mat4 -->
-                    <vtkObject id="mat7" class="vtkTransform" >
-                        <vtkTransform>
-                            <concatenate inverse="yes">mat5</concatenate>
-                            <concatenate>mat2</concatenate>
-                            <concatenate>mat5</concatenate>
-                            <concatenate>mat5</concatenate>
-                            <concatenate>mat5</concatenate>
-                            <concatenate>mat4</concatenate>
-                            <concatenate>mat4</concatenate>
-                        </vtkTransform>
-                    </vtkObject>
-                    
-                    <!-- mat7 = mat3 x mat5 x mat4 x mat4 x mat4 -->
-                    <vtkObject id="mat8" class="vtkTransform" >
-                        <vtkTransform>
-                            <concatenate>mat3</concatenate>
-                            <concatenate>mat5</concatenate>
-                            <concatenate>mat4</concatenate>
-                            <concatenate>mat4</concatenate>
-                            <concatenate>mat4</concatenate>
-                        </vtkTransform>
-                    </vtkObject>
-                    
-                    
-
-                    <adaptor id="MatrixAdatorA" class="::visuVTKAdaptor::Transform" objectId="matrixA">
-                        <config renderer="default" picker="" transform="mat1" />
-                    </adaptor>
-
-                    <adaptor id="MatrixAdatorB" class="::visuVTKAdaptor::Transform" objectId="matrixB">
-                        <config renderer="default" picker="" transform="mat2" />
-                    </adaptor>
-                    
-                    <adaptor id="MatrixAdatorC" class="::visuVTKAdaptor::Transform" objectId="matrixC">
-                        <config renderer="default" picker="" transform="mat3" />
-                    </adaptor>
-                    
-                    <adaptor id="MatrixAdatorD" class="::visuVTKAdaptor::Transform" objectId="matrixD">
-                        <config renderer="default" picker="" transform="mat4" />
-                    </adaptor>
-                    
-                    <adaptor id="MatrixAdatorE" class="::visuVTKAdaptor::Transform" objectId="matrixE">
-                        <config renderer="default" picker="" transform="mat5" />
-                    </adaptor>
-                    
-                    
-                    
-                    <adaptor id="Renderer" class="::visuVTKAdaptor::Render" objectId="self">
-                        <config renderer="default" picker="" />
-                    </adaptor>
-
-                    <adaptor id="TMAdaptor1" class="::visuVTKAdaptor::Mesh" objectId="mesh">
-                        <config renderer="default" picker="" />
-                    </adaptor>
-
-                    <adaptor id="TMAdaptor2" class="::visuVTKAdaptor::Mesh" objectId="mesh">
-                        <config renderer="default" picker="" transform="mat6" />
-                    </adaptor>
-                    
-                    <adaptor id="TMAdaptor3" class="::visuVTKAdaptor::Mesh" objectId="mesh">
-                        <config renderer="default" picker="" transform="mat7" />
-                    </adaptor>
-                    
-                    <adaptor id="TMAdaptor4" class="::visuVTKAdaptor::Mesh" objectId="mesh">
-                        <config renderer="default" picker="" transform="mat8" />
-                    </adaptor>
-
-                </scene>
-            </service>
-            
-            <item key="matrixA">
-                <object uid="matrixA" type="::fwData::TransformationMatrix3D">
-                    <matrix>
-                        1 0 0 2
-                        0 1 0 0
-                        0 0 1 0
-                        0 0 0 1 
-                    </matrix>
-                </object>
-            </item>
-            
-            <item key="matrixB">
-                <object uid="matrixB" type="::fwData::TransformationMatrix3D">
-                    <matrix>
-                        1 0 0 4
-                        0 1 0 0
-                        0 0 1 0
-                        0 0 0 1 
-                    </matrix>
-                </object>
-            </item>
-            
-            <item key="matrixC">
-                <object uid="matrixC" type="::fwData::TransformationMatrix3D">
-                    <matrix>
-                        1 0 0 0
-                        0 1 0 0
-                        0 0 1 2
-                        0 0 0 1 
-                    </matrix>
-                </object>
-            </item>
-            
-            <item key="matrixD">
-                <object uid="matrixD" type="::fwData::TransformationMatrix3D">
-                    <matrix>
-                        0.75 0 0 0
-                        0 0.75 0 0
-                        0 0 0.75 0
-                        0 0 0 1 
-                    </matrix>
-                </object>
-            </item>
-            
-            <item key="matrixE">
-                <object uid="matrixE" type="::fwData::TransformationMatrix3D">
-                    <service uid="matrixEditor" impl="::uiVisu::TransformationMatrixEditor" type="::gui::editor::IEditor" autoConnect="yes" />
-                </object>
-            </item>
-
-            <item key="mesh">
-                <object uid="mesh" type="::fwData::Mesh">
-                    <service uid="myReaderPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no" />
-                </object>
-            </item>
-            
-            <start uid="myFrame" />
-            
-            
-
-        </object>
-
-    
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto10MatrixTransformInGS/rc/profile.xml b/Apps/Tuto10MatrixTransformInGS/rc/profile.xml
deleted file mode 100644
index b5ef100..0000000
--- a/Apps/Tuto10MatrixTransformInGS/rc/profile.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<profile name="tutoDataService" version="0.1">
-
-    <!-- List of basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    <activate id="gui" version="0-1" />
-    <activate id="visu" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto10MatrixTransformInGS" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="tuto" />
-    </activate>
-    
-    <!-- List of specific bundles. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    
-    <start id="dataReg" />
-    <start id="visuVTK" />
-    <start id="visuVTKQt" />
-    <start id="visuVTKAdaptor" />
-    <start id="guiQt" />
-    <start id="appXml" />
-    
-</profile>
diff --git a/Apps/Tuto11LaunchBasicConfig/COPYING b/Apps/Tuto11LaunchBasicConfig/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto11LaunchBasicConfig/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto11LaunchBasicConfig/COPYING.LESSER b/Apps/Tuto11LaunchBasicConfig/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto11LaunchBasicConfig/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto11LaunchBasicConfig/Properties.cmake b/Apps/Tuto11LaunchBasicConfig/Properties.cmake
deleted file mode 100644
index ed1c31b..0000000
--- a/Apps/Tuto11LaunchBasicConfig/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto11LaunchBasicConfig )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt launcher ioVTK ioData vtkSimpleNegato uiIO appXml )
-
diff --git a/Apps/Tuto11LaunchBasicConfig/bin/build.options b/Apps/Tuto11LaunchBasicConfig/bin/build.options
deleted file mode 100644
index 0ebc2ea..0000000
--- a/Apps/Tuto11LaunchBasicConfig/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleNegato_0-1'   ,
-    'uiIO_0-1'              ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto11LaunchBasicConfig/rc/BasicFrameConfig.xml b/Apps/Tuto11LaunchBasicConfig/rc/BasicFrameConfig.xml
deleted file mode 100644
index 7cd2e08..0000000
--- a/Apps/Tuto11LaunchBasicConfig/rc/BasicFrameConfig.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<extension implements="::fwServices::registry::AppConfig">
-    <id>BasicFrameConfig</id>
-    <type>parameters</type>
-    <parameters>
-        <param name="GENERIC_UID" />
-        <param name="imageUid" />
-    </parameters>
-    <config>
-
-        <object uid="${imageUid}" src="ref" type="::fwData::Image">
-
-            <service uid="${GENERIC_UID}_BasicViewerFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                <window onclose="notify" />
-                <gui>
-                    <frame>
-                        <name>Basic frame config</name>
-                        <minSize width="900" height="600" />
-                    </frame>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_SecondView" start="no" />
-                </registry>
-            </service>
-
-            <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="${GENERIC_UID}_SecondView" autoConnect="yes">
-            </service>
-
-            <start uid="${GENERIC_UID}_BasicViewerFrame" />
-            <start uid="${GENERIC_UID}_SecondView" />
-
-            <update uid="${GENERIC_UID}_SecondView" />
-
-        </object>
-
-    </config>
-</extension>
diff --git a/Apps/Tuto11LaunchBasicConfig/rc/plugin.xml b/Apps/Tuto11LaunchBasicConfig/rc/plugin.xml
deleted file mode 100644
index fd317c2..0000000
--- a/Apps/Tuto11LaunchBasicConfig/rc/plugin.xml
+++ /dev/null
@@ -1,83 +0,0 @@
-<plugin id="Tuto11LaunchBasicConfig">
-
-    <requirement id="servicesReg" />
-
-    <xi:include href="BasicFrameConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
-    
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>TutoLaunchBasicConfig</id>
-        <type>parameters</type>
-        <config>
-            <object uid="myImage" type="::fwData::Image">
-
-                <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                    <gui>
-                        <frame>
-                            <name>Tuto 11 : Launch basic config</name>
-                            <icon>Bundles/Tuto11LaunchBasicConfig_0-1/tuto.ico</icon>
-                            <minSize width="800" height="600" />
-                        </frame>
-                        <menuBar />
-                    </gui>
-                    <registry>
-                        <menuBar sid="mainMenuBar" start="yes" />
-                        <view sid="mainView" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="mainMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menu name="File" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menu sid="menuFile" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="menuFile" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                    <gui>
-                        <layout>
-                            <menuItem name="Open file" shortcut="Ctrl+O" />
-                            <separator />
-                            <menuItem name="Launch Config" style="check" />
-                            <separator />
-                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <menuItem sid="actionOpenFile" start="yes" />
-                        <menuItem sid="actionLaunchConfig" start="yes" />
-                        <menuItem sid="actionQuit" start="yes" />
-                    </registry>
-                </service>
-
-
-                <service uid="actionOpenFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                    <start uid="myReaderPathFile" />
-                </service>
-
-                <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-                <service uid="myReaderPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no" />
-
-                <service uid="actionLaunchConfig" type="::fwGui::IActionSrv" impl="::gui::action::SConfigLauncher" autoConnect="no">
-                    <config>
-                        <appConfig id="BasicFrameConfig" >
-                            <parameters>
-                                <parameter replace="imageUid" by="myImage" />
-                            </parameters>
-                        </appConfig>
-                    </config>
-                </service>
-
-                <service impl="::vtkSimpleNegato::RendererService" type="::fwRender::IRender" uid="mainView" autoConnect="yes">
-                </service>
-
-                <start uid="myFrame" />
-
-            </object>
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto11LaunchBasicConfig/rc/profile.xml b/Apps/Tuto11LaunchBasicConfig/rc/profile.xml
deleted file mode 100644
index 73fe549..0000000
--- a/Apps/Tuto11LaunchBasicConfig/rc/profile.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<profile name="Tuto11LaunchBasicConfig" version="0.1">
-
-    <!-- List of basic bundles. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto11LaunchBasicConfig" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="TutoLaunchBasicConfig" />
-    </activate>
-
-    <!-- List of specific bundles. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleNegato" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto12Picker/COPYING b/Apps/Tuto12Picker/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto12Picker/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto12Picker/COPYING.LESSER b/Apps/Tuto12Picker/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto12Picker/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto12Picker/Properties.cmake b/Apps/Tuto12Picker/Properties.cmake
deleted file mode 100644
index e747d18..0000000
--- a/Apps/Tuto12Picker/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto12Picker )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS dataReg ctrlSelection gui guiQt ioData ioVTK io servicesReg uiVisuQt uiImageQt uiIO visuVTK visuVTKQt visuVTKAdaptor visu launcher appXml )
-
diff --git a/Apps/Tuto12Picker/bin/build.options b/Apps/Tuto12Picker/bin/build.options
deleted file mode 100644
index 3211db7..0000000
--- a/Apps/Tuto12Picker/bin/build.options
+++ /dev/null
@@ -1,22 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'dataReg_0-1'       ,
-    'ctrlSelection_0-1' ,
-    'gui_0-1'           ,
-    'guiQt_0-1'         ,
-    'ioData_0-1'        ,
-    'ioVTK_0-1'         ,
-    'io_0-1'            ,
-    'servicesReg_0-1'   ,
-    'uiVisuQt_0-1'      ,
-    'uiImageQt_0-1'     ,
-    'uiIO_0-1'          ,
-    'visuVTK_0-1'       ,
-    'visuVTKQt_0-1'     ,
-    'visuVTKAdaptor_0-1',
-    'visu_0-1'          ,
-    'launcher_0-1'      ,
-    'appXml_0-1'        ,
- ]
diff --git a/Apps/Tuto12Picker/rc/plugin.xml b/Apps/Tuto12Picker/rc/plugin.xml
deleted file mode 100644
index 6488999..0000000
--- a/Apps/Tuto12Picker/rc/plugin.xml
+++ /dev/null
@@ -1,197 +0,0 @@
-<plugin id="Tuto12Picker">
-
-<requirement id="servicesReg" />
-
-<extension implements="::fwServices::registry::AppConfig">
-        <id>Tuto12Picker</id>
-        <type>parameters</type>
-        <config>
-
-    <object type="::fwData::Composite">
-        <service uid="MyIHM" impl="::gui::frame::DefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
-            <gui>
-                <frame>
-                    <name>Tuto12Picker</name>
-                    <icon>Bundles/Tuto12Picker_0-1/tuto.ico</icon>
-                    <minSize width="800" height="600"/>
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="myMenuBar" start="yes" />
-                <view sid="mainView" start="yes" />
-            </registry>
-        </service>
-        <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menu_File" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open image" shortcut="Ctrl+I" />
-                    <menuItem name="Open mesh" shortcut="Ctrl+M" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openImage" start="yes" />
-                <menuItem sid="action_openMesh" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="action_openImage" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-            <start uid="imageReader" />
-        </service>
-        <service uid="action_openMesh" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-            <start uid="meshReader" />
-        </service>
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-        <service uid="mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::LineLayoutManager" >
-                    <orientation value="vertical" />
-                    <view caption="Picker world coordinate." proportion="0" />
-                    <view caption="Generic scene" border="11" proportion="1" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="pointView" start="yes" />
-                <view sid="multiViewScene" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="multiViewScene" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::CardinalLayoutManager" >
-                    <view align="center" />
-                    <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="genericScene" start="yes" />
-                <view sid="multiViewScene_bottom" start="yes" />
-            </registry>
-        </service>
-
-
-        <service uid="multiViewScene_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-            <gui>
-                <layout type="::fwGui::LineLayoutManager" >
-                    <orientation value="horizontal" />
-                    <view proportion="0" minWidth="30" />
-                    <view proportion="0" minWidth="50" />
-                    <view proportion="1" />
-                    <view proportion="0" minWidth="30" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="sliceListEditor" start="no" />
-                <view sid="showScanEditor" start="no" />
-                <view sid="sliderIndexEditor" start="no" />
-                <view sid="snapshotScene1Editor" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="snapshotScene1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-            <snap>
-                <scene uid="genericScene" />
-            </snap>
-        </service>
-
-        <item key="mesh">
-            <object uid="meshUID" type="::fwData::Mesh">
-                <service uid="meshReader" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                    <type mode="reader" />
-                </service>
-            </object>
-        </item>
-        <item key="image">
-            <object uid="imageUID"  type="::fwData::Image">
-                <service uid="imageReader" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                    <type mode="reader" />
-                </service>
-            </object>
-        </item>
-        
-        <!-- CompositeVisu description -->
-        <item key="myCompositeVisu">
-            <object uid="myCompositeVisu" type="::fwData::Composite">                
-                
-                <service uid="updaterUID" impl="::ctrlSelection::updater::ObjFromMsgUpdaterSrv" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-                    <update compositeKey="image" onEvent="NEW_IMAGE" fromUID="imageUID" actionType="ADD_OR_SWAP"/>
-                    <update compositeKey="mesh" onEvent="NEW_MESH" fromUID="meshUID" actionType="ADD_OR_SWAP"/>
-                </service>
-                
-                <service uid="pointView" impl="::uiVisu::PointEditor" type="::gui::editor::IEditor" autoConnect="yes"/>
-                
-                <service uid="genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                    <scene>
-                        <picker id="myPicker" vtkclass="fwVtkCellPicker" />
-
-                        <renderer id="default" background="0.0" />
-
-                        <adaptor id="meshAdaptor" class="::visuVTKAdaptor::Mesh" objectId="mesh">
-                            <config renderer="default" picker="" />
-                        </adaptor>
-
-                        <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
-                            <config renderer="default" picker="myPicker" mode="3D" slices="3" sliceIndex="axial" />
-                        </adaptor>
-                        <adaptor id="snapshot1" class="::visuVTKAdaptor::Snapshot" objectId="self" >
-                            <config renderer="default" />
-                        </adaptor>
-
-                        <adaptor id="pickerInteractor" class="::visuVTKAdaptor::PickerInteractor" objectId="self" >
-                            <config renderer="default" picker="myPicker" />
-                        </adaptor>
-                    </scene>
-                </service>
-                
-                <service uid="manager" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes"  >
-                    <mode type="stop" />
-                    <config>
-                        <object id="image" type="::fwData::Image">
-                            <!-- This service convert a simple fwData::Image to medical Image -->
-                            <service uid="medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController"  autoConnect="yes" />
-                            <service uid="sliceListEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor" autoConnect="yes">
-                                <negatoAdaptor uid="MPRNegatoScene3D" slices="3" />
-                            </service>
-                            <service uid="showScanEditor" type="::gui::editor::IEditor" impl="::uiImage::ShowScanEditor" autoConnect="no">
-                                <negatoAdaptor uid="MPRNegatoScene3D" />
-                            </service>
-                            <service uid="sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes" >
-                                <sliceIndex>axial</sliceIndex>
-                            </service>
-                        </object>
-                    </config>
-                </service>
-                
-                <proxy channel="UPDATER_CHANNEL" >
-                    <signal>imageUID/objectModified</signal>
-                    <signal>meshUID/objectModified</signal>
-                    <slot>updaterUID/receive</slot>
-                </proxy>
-                
-            </object>
-        </item>
-
-        <start uid="MyIHM" />
-        <start uid="updaterUID" />
-        <start uid="manager" />
-
-    </object>
-    </config>
-</extension>
-
-</plugin>
diff --git a/Apps/Tuto12Picker/rc/profile.xml b/Apps/Tuto12Picker/rc/profile.xml
deleted file mode 100644
index 98e630e..0000000
--- a/Apps/Tuto12Picker/rc/profile.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="Tuto12Picker" version="0.1" check-single-instance="true">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto12Picker" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="Tuto12Picker" />
-    </activate>
-    <activate id="ctrlSelection" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-
-    <activate id="uiVisuQt" version="0-1" />
-    <activate id="uiImageQt" version="0-1" />
-
-    <start id="visuVTK" />
-    <start id="visuVTKAdaptor" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto13Scene2D/COPYING b/Apps/Tuto13Scene2D/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto13Scene2D/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto13Scene2D/COPYING.LESSER b/Apps/Tuto13Scene2D/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto13Scene2D/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto13Scene2D/Properties.cmake b/Apps/Tuto13Scene2D/Properties.cmake
deleted file mode 100644
index 9a39629..0000000
--- a/Apps/Tuto13Scene2D/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto13Scene2D )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io appXml gui guiQt dataReg servicesReg launcher scene2D uiVisu uiVisuQt )
-
diff --git a/Apps/Tuto13Scene2D/bin/build.options b/Apps/Tuto13Scene2D/bin/build.options
deleted file mode 100644
index 55ada3e..0000000
--- a/Apps/Tuto13Scene2D/bin/build.options
+++ /dev/null
@@ -1,16 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = [ 
-    'io_0-1'                ,
-    'appXml_0-1'            ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'launcher_0-1'          ,
-    'scene2D_0-1'           ,
-    'uiVisu_0-1'            ,
-    'uiVisuQt_0-1'
- ]
-
-
diff --git a/Apps/Tuto13Scene2D/rc/plugin.xml b/Apps/Tuto13Scene2D/rc/plugin.xml
deleted file mode 100644
index f0a6e27..0000000
--- a/Apps/Tuto13Scene2D/rc/plugin.xml
+++ /dev/null
@@ -1,121 +0,0 @@
-
-<plugin id="Tuto13Scene2D">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoScene2DConfig</id>
-        <type>parameters</type>
-        <config>
-            <object type="::fwData::Image">
-
-                <service uid="mainFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                    <gui>
-                        <frame>
-                            <name>TutoScene132D</name>
-                            <icon>Bundles/Tuto13Scene2D_0-1/tuto.ico</icon>
-                            <minSize width="800" height="600" />
-                        </frame>
-                    </gui>
-                    <registry>
-                        <view sid="GENERIC_UID_GlobalView" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="GENERIC_UID_GlobalView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                    <gui>
-                        <layout type="::fwGui::LineLayoutManager" >
-                            <orientation value="vertical" />
-                            <view caption="Scene2D" />
-                            <view caption="FloatEditor" proportion="0" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <view sid="GENERIC_UID_Scene2D" start="no" />
-                        <view sid="GENERIC_UID_FloatEditor" start="no" />
-                    </registry>
-                </service>
-                
-                <item key="compositeVisu">
-
-                    <object uid="compositeVisu" type="::fwData::Composite">
-                        
-                        <service uid="GENERIC_UID_Scene2D" impl="::scene2D::Render" type="::fwRender::IRender" autoConnect="yes">
-
-                            <scene>
-
-                                <viewport id="view1" x="-100" y="-100" width="200" height="200" />
-
-                                <axis id="axe1" origin="0.0" scale="1.0" scaleType="LINEAR" />
-                                <!-- <axis id="axe1-5" origin="-5.0" scale="1.0" scaleType="LINEAR" />
-                                <axis id="axe1y" origin="5.0" scale="10.0" scaleType="LINEAR" />
-                                <axis id="axe2" origin="0.0" scale="50.0" scaleType="LOG" /> -->
-                                
-                                <!--
-                                <adaptor id="sin" class="::scene2D::adaptor::Sin" objectId="self">
-                                    <config xMin="-50" xMax="50" />
-                                </adaptor> 
-
-                                <adaptor id="grid1" class="::scene2D::adaptor::Grid2D" objectId="self">
-                                    <config xMin="-500" xMax="500" yMin="-500" yMax="500" xSpacing="10" ySpacing="10" color="green" xAxis="axe1" yAxis="axe1y"/>
-                                </adaptor>
-
-                                <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
-                                    <config x1="-1000" x2="1000" y1="0" y2="0" color="red" zValue="1" />
-                                </adaptor>
-
-                                <adaptor id="ordinate" class="::scene2D::adaptor::Line" objectId="self">
-                                    <config x1="0" x2="0" y1="-1000" y2="1000" color="red" zValue="1" />
-                                </adaptor>
-
-                                <adaptor id="grid2" class="::scene2D::adaptor::Grid2D" objectId="self">
-                                    <config xMin="-300" xMax="300" yMin="-300" yMax="300" xSpacing="10" ySpacing="10" color="blue" xAxis="axe1" yAxis="axe2" />
-                                </adaptor> -->
-                              
-                                <adaptor id="gridFromFloat" class="::scene2D::adaptor::GridFromFloat" objectId="data">
-                                    <config xMin="-150" xMax="150" yMin="-150" yMax="150" xSpacing="10" ySpacing="10" color="green" zValue="2" xAxis="axe1" yAxis="axe1" />
-                                </adaptor>
-                              
-                                <adaptor id="square1" class="::scene2D::adaptor::Square" objectId="self">
-                                    <config x="0" y="0" size="15" color="red" zValue="4" />
-                                </adaptor>
-                                
-                                <adaptor id="square2" class="::scene2D::adaptor::Square" objectId="self">
-                                    <config x="20" y="20" size="30" color="blue" zValue="3" />
-                                </adaptor>
-                                
-                                <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
-                                    <config x1="-100" x2="100" y1="0" y2="0" color="red" zValue="5" />
-                                </adaptor>
-
-                                <adaptor id="ordinate" class="::scene2D::adaptor::Line" objectId="self">
-                                    <config x1="0" x2="0" y1="-100" y2="100" color="red" zValue="6" />
-                                </adaptor>
-                                
-                            </scene>
-
-                        </service>
-                      
-                        <item key="data">
-
-                            <object uid="GENERIC_UID_Float" type="::fwData::Float">
-
-                                <service uid="GENERIC_UID_FloatEditor" impl="::uiVisu::BasicFloatEditor" type="::gui::editor::IEditor" autoConnect="yes"/>
-                              
-                            </object>
-
-                        </item>
-
-
-                    </object>
-
-                </item>
-
-                <start uid="mainFrame" />
-                <start uid="GENERIC_UID_Scene2D" />
-                <start uid="GENERIC_UID_FloatEditor" />
-              
-            </object>
-        </config>
-    </extension>
-</plugin>
diff --git a/Apps/Tuto13Scene2D/rc/profile.xml b/Apps/Tuto13Scene2D/rc/profile.xml
deleted file mode 100644
index c5c5342..0000000
--- a/Apps/Tuto13Scene2D/rc/profile.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<profile name="tutoScene2DName" version="0.1">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="gui" version="0-1" />
-    <activate id="Tuto13Scene2D" />
-    <activate id="guiQt" version="0-1" />
-    <activate id="scene2D" version="0-1" />
-    
-    <activate id="uiVisu" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
-    
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoScene2DConfig" />
-    </activate>
-
-    <start id="scene2D" />
-    <start id="appXml" />
-    <start id="guiQt" />
-    
-</profile>
diff --git a/Apps/Tuto14MeshGenerator/COPYING b/Apps/Tuto14MeshGenerator/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto14MeshGenerator/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto14MeshGenerator/COPYING.LESSER b/Apps/Tuto14MeshGenerator/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto14MeshGenerator/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto14MeshGenerator/Properties.cmake b/Apps/Tuto14MeshGenerator/Properties.cmake
deleted file mode 100644
index 8be7153..0000000
--- a/Apps/Tuto14MeshGenerator/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto14MeshGenerator )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS dataReg ctrlSelection gui guiQt ioData ioVTK io servicesReg uiVisuQt uiIO visuVTK visuVTKQt visuVTKAdaptor visu launcher appXml )
-
diff --git a/Apps/Tuto14MeshGenerator/bin/build.options b/Apps/Tuto14MeshGenerator/bin/build.options
deleted file mode 100644
index 9462342..0000000
--- a/Apps/Tuto14MeshGenerator/bin/build.options
+++ /dev/null
@@ -1,21 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'dataReg_0-1'       ,
-    'ctrlSelection_0-1' ,
-    'gui_0-1'           ,
-    'guiQt_0-1'         ,
-    'ioData_0-1'        ,
-    'ioVTK_0-1'         ,
-    'io_0-1'            ,
-    'servicesReg_0-1'   ,
-    'uiVisuQt_0-1'      ,
-    'uiIO_0-1'          ,
-    'visuVTK_0-1'       ,
-    'visuVTKQt_0-1'     ,
-    'visuVTKAdaptor_0-1',
-    'visu_0-1'          ,
-    'launcher_0-1'      ,
-    'appXml_0-1'        ,
- ]
diff --git a/Apps/Tuto14MeshGenerator/rc/plugin.xml b/Apps/Tuto14MeshGenerator/rc/plugin.xml
deleted file mode 100644
index 9490626..0000000
--- a/Apps/Tuto14MeshGenerator/rc/plugin.xml
+++ /dev/null
@@ -1,222 +0,0 @@
-<plugin id="Tuto14MeshGenerator">
-
-<requirement id="servicesReg" />
-
-<extension implements="::fwServices::registry::AppConfig">
-    <id>Tuto14MeshGenerator</id>
-    <type>parameters</type>
-    <config>
-
-        <object type="::fwData::Composite">
-            <service uid="MyIHM" impl="::gui::frame::DefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
-                <gui>
-                    <frame>
-                        <name>Tuto14MeshGenerator</name>
-                        <icon>Bundles/Tuto14MeshGenerator_0-1/tuto.ico</icon>
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="myMenuBar" start="yes" />
-                    <view sid="multiView_scene1" start="yes" />
-                </registry>
-            </service>
-            
-            <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="Modify" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="menu_File" start="yes" />
-                    <menu sid="menu_Modifier" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="Open file" shortcut="Ctrl+O" />
-                        <menuItem name="Save file" shortcut="Ctrl+S" />
-                        <separator />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="action_openFile" start="yes" />
-                    <menuItem sid="action_saveFile" start="yes" />
-                    <menuItem sid="action_quit" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menu_Modifier" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="Shake mesh point" shortcut="Q" />
-                        <separator />
-                        <menuItem name="Colorize mesh point" shortcut="U" />
-                        <menuItem name="Colorize mesh cells" shortcut="I" />
-                        <separator />
-                        <menuItem name="Compute point normals" shortcut="O" />
-                        <menuItem name="Compute cell normals" shortcut="P" />
-                        <separator />
-                        <menuItem name="Shake point normals" shortcut="L" />
-                        <menuItem name="Shake cell normals" shortcut="M" />
-                        <separator />
-                        <menuItem name="Show point normals" style="radio" shortcut="2" />
-                        <menuItem name="Show cell normals" style="radio" shortcut="1" />
-                        <menuItem name="Hide normals" style="radio" shortcut="0" />
-                        <separator />
-                        <menuItem name="Show point colors" style="radio" shortcut="4" />
-                        <menuItem name="Show cell colors" style="radio" shortcut="5" />
-                        <menuItem name="Hide colors" style="radio" shortcut="6" />
-                        <separator />
-                        <menuItem name="mesh deformation" shortcut="D"/>
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="action_shakeMeshPoint" start="yes" />
-                    <menuItem sid="action_colorizeMeshPoints" start="yes" />
-                    <menuItem sid="action_colorizeMeshCells" start="yes" />
-                    <menuItem sid="action_computePointNormals" start="yes" />
-                    <menuItem sid="action_computeCellNormals" start="yes" />
-                    <menuItem sid="action_shakePointNormals" start="yes" />
-                    <menuItem sid="action_shakeCellNormals" start="yes" />
-
-                    <menuItem sid="action_showPointNormals" start="yes" />                    
-                    <menuItem sid="action_showCellNormals" start="yes" />                    
-                    <menuItem sid="action_hideNormals" start="yes" />
-                    
-                    <menuItem sid="action_showPointColors" start="yes" />                    
-                    <menuItem sid="action_showCellColors" start="yes" />                    
-                    <menuItem sid="action_hideColors" start="yes" />
-                    
-                    <menuItem sid="action_meshDeformation" start="yes" />
-                                        
-                </registry>
-            </service>
-            
-            <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="myReaderMesh" />
-            </service>
-            <service uid="action_saveFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="myWriterMesh" />
-            </service>
-            <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-            <service uid="multiView_scene1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager" >
-                        <view align="center" />
-                        <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="genericScene" start="yes" />
-                </registry>
-            </service>
-
-            <!-- CompositeVisu description -->
-            <item key="myCompositeVisu">
-                <object uid="myCompositeVisu" type="::fwData::Composite">
-
-                    <service uid="genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                        <scene>
-                            <picker id="myPicker" vtkclass="fwVtkCellPicker" />
-
-                            <renderer id="default" background="0.0" />
-                            <adaptor id="myRenderAdaptor" class="::visuVTKAdaptor::Render" objectId="self">
-                                <config renderer="default" picker="" />
-                            </adaptor>
-                            <adaptor id="myTrianAdaptor" class="::visuVTKAdaptor::TriangularMesh" objectId="myTrianMesh">
-                                <config renderer="default" picker="" />
-                            </adaptor>
-                            <adaptor id="myMeshAdaptor" class="::visuVTKAdaptor::Mesh" objectId="myMesh">
-                                <config renderer="default" picker="" />
-                            </adaptor>
-                            <adaptor id="myMeshNormalsAdaptor" class="::visuVTKAdaptor::MeshNormals" objectId="myMesh">
-                                <config renderer="default" picker="" normal="CELL" />
-                            </adaptor>
-                        </scene>
-                    </service>
-
-                    <item key="myMesh">
-                        <object type="::fwData::Mesh">
-                            <service uid="myReaderMesh" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                                <type mode="reader" />
-                            </service>
-                            <service uid="myWriterMesh" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                                <type mode="writer" />
-                            </service>
-                            <service uid="action_shakeMeshPoint" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ShakeMeshPoint" />
-                            </service>
-                            <service uid="action_colorizeMeshPoints" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ColorizeMeshPoints" />
-                            </service>
-                            <service uid="action_colorizeMeshCells" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ColorizeMeshCells" />
-                            </service>
-                            <service uid="action_computePointNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ComputePointNormals" />
-                            </service>
-                            <service uid="action_computeCellNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ComputeCellNormals" />
-                            </service>
-                            <service uid="action_shakePointNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ShakePointNormals" />
-                            </service>
-                            <service uid="action_shakeCellNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="ShakeCellNormals" />
-                            </service>
-                            <service uid="action_showCellNormals" impl="::gui::action::ActionNotifyService" type="::fwGui::IActionSrv" autoConnect="no" >
-                                <state active="true" />
-                                <notify type="::fwComEd::MeshMsg" event="SHOW_CELL_NORMALS" />
-                            </service>
-                            <service uid="action_showPointNormals" impl="::gui::action::ActionNotifyService" type="::fwGui::IActionSrv" autoConnect="no">
-                                <notify type="::fwComEd::MeshMsg" event="SHOW_POINT_NORMALS" />
-                            </service>
-                            <service uid="action_hideNormals" impl="::gui::action::ActionNotifyService" type="::fwGui::IActionSrv" autoConnect="no">
-                                <notify type="::fwComEd::MeshMsg" event="HIDE_NORMALS" />
-                            </service>
-                            
-                            <service uid="action_meshDeformation" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
-                                <config functor="MeshDeformation" />
-                            </service>
-                            
-                            <service uid="action_showPointColors" impl="::gui::action::ActionNotifyService" type="::fwGui::IActionSrv" autoConnect="no">
-                                <notify type="::fwComEd::MeshMsg" event="SHOW_POINT_COLORS" />
-                            </service>
-                            <service uid="action_showCellColors" impl="::gui::action::ActionNotifyService" type="::fwGui::IActionSrv" autoConnect="no">
-                                <notify type="::fwComEd::MeshMsg" event="SHOW_CELL_COLORS" />
-                            </service>
-                            <service uid="action_hideColors" impl="::gui::action::ActionNotifyService" type="::fwGui::IActionSrv" autoConnect="no">
-                                <notify type="::fwComEd::MeshMsg" event="HIDE_COLORS" />
-                            </service>
-                                                        
-                            <service uid="msgWrapper" impl="::ctrlSelection::wrapper::MsgWrapperSrv" type="::ctrlSelection::IWrapperSrv" autoConnect="yes">
-                                <wrapper onEvent="ObjectMsg::UPDATED_OBJECT" toEvent="NEW_MESH" toMsgType="::fwComEd::MeshMsg" />
-                            </service>
-                            
-                        </object>
-                    </item>
-                    
-                    <item key="myTrianMesh">
-                        <object type="::fwData::TriangularMesh">
-                            
-                        </object>
-                    </item>
-                </object>
-            </item>
-
-            <start uid="MyIHM" />
-            <start uid="msgWrapper" />
-            
-        </object>
-        
-    </config>
-</extension>
-
-</plugin>
diff --git a/Apps/Tuto14MeshGenerator/rc/profile.xml b/Apps/Tuto14MeshGenerator/rc/profile.xml
deleted file mode 100644
index 039bfb2..0000000
--- a/Apps/Tuto14MeshGenerator/rc/profile.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="Tuto14MeshGenerator" version="0.1" check-single-instance="true"> 
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" /> 
-    <activate id="io" version="0-1" />
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto14MeshGenerator" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="Tuto14MeshGenerator" />
-    </activate>
-
-    <activate id="ctrlSelection" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
- 
-    <start id="visuVTK" />
-    <start id="visuVTKAdaptor" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/Tuto15Multithread/COPYING b/Apps/Tuto15Multithread/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto15Multithread/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto15Multithread/COPYING.LESSER b/Apps/Tuto15Multithread/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto15Multithread/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto15Multithread/Properties.cmake b/Apps/Tuto15Multithread/Properties.cmake
deleted file mode 100644
index 7588575..0000000
--- a/Apps/Tuto15Multithread/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto15Multithread )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io gui guiQt dataReg servicesReg visu visuVTKQt ioVTK ioData vtkSimpleMesh uiIO appXml launcher )
-
diff --git a/Apps/Tuto15Multithread/bin/build.options b/Apps/Tuto15Multithread/bin/build.options
deleted file mode 100644
index 2877574..0000000
--- a/Apps/Tuto15Multithread/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'visu_0-1'              ,
-    'visuVTKQt_0-1'         ,
-    'launcher_0-1'          ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
-    'vtkSimpleMesh_0-1'     ,
-    'uiIO_0-1'              ,
-    'appXml_0-1'            ,
- ]
diff --git a/Apps/Tuto15Multithread/rc/configurations/config-dynamic.xml b/Apps/Tuto15Multithread/rc/configurations/config-dynamic.xml
deleted file mode 100644
index 5926beb..0000000
--- a/Apps/Tuto15Multithread/rc/configurations/config-dynamic.xml
+++ /dev/null
@@ -1,156 +0,0 @@
-<extension implements="::fwServices::registry::AppConfig">
-    <id>tuto15MultithreadDynamicConfig</id>
-    <type>parameters</type>
-    <parameters>
-        <param name="GENERIC_UID" default="g"/>
-    </parameters>
-    <config>
-
-
-        <!-- In tutoComChannel, the main data object type is ::fwData::Mesh. -->
-        <object type="::fwData::Mesh">
-
-            <service uid="${GENERIC_UID}_frame" impl="::gui::frame::DefaultFrame" >
-                <gui>
-                    <frame>
-                        <name>Tuto15Multithread (dynamic version)</name>
-                        <icon>Bundles/Tuto15Multithread_0-1/tuto.ico</icon>
-                        <minSize width="720" height="600" />
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="${GENERIC_UID}_menuBar" start="yes" />
-                    <view sid="${GENERIC_UID}_view" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_menuBar" impl="::gui::aspect::DefaultMenuBarSrv" >
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="View" />
-                        <menu name="Deformation" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="${GENERIC_UID}_fileMenu" start="yes" />
-                    <menu sid="${GENERIC_UID}_viewMenu" start="yes" />
-                    <menu sid="${GENERIC_UID}_deformationMenu" start="yes" />
-                </registry>
-            </service>
-
-            <!-- The application contains three different views. The different views are characterized by their 
-            associated service uid. Furthermore, a minimum window height and a width are given to the last two views.-->
-            <service uid="${GENERIC_UID}_view" impl="::gui::view::DefaultView" >
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="horizontal" />
-                        <view proportion="1" />
-                        <view proportion="1" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view wid="${GENERIC_UID}_rendering1View" />
-                    <view wid="${GENERIC_UID}_rendering2View" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_fileMenu" impl="::gui::aspect::DefaultMenuSrv" >
-                <gui>
-                    <layout>
-                        <menuItem name="Open file" shortcut="Ctrl+O" />
-                        <separator />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="${GENERIC_UID}_openFileAction" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_quitAction" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_deformationMenu" impl="::gui::aspect::DefaultMenuSrv" >
-                <gui>
-                    <layout>
-                        <menuItem name="Start deformation" shortcut="Ctrl+D" />
-                        <menuItem name="Stop deformation" shortcut="Ctrl+F" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="${GENERIC_UID}_startDeformationAction" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_stopDeformationAction" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_viewMenu" impl="::gui::aspect::DefaultMenuSrv" >
-                <gui>
-                    <layout>
-                        <menuItem name="Render A" style="check" />
-                        <menuItem name="Render B" style="check" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="${GENERIC_UID}_rendering1Action" start="no" />
-                    <menuItem sid="${GENERIC_UID}_rendering2Action" start="no" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_openFileAction" impl="::gui::action::StarterActionService" >
-                <start uid="${GENERIC_UID}_reader" />
-            </service>
-
-            <service uid="${GENERIC_UID}_quitAction" impl="::gui::action::QuitAction"  />
-
-            <service uid="${GENERIC_UID}_startDeformationAction" impl="::gui::action::SSlotCaller" >
-                <slots>
-                    <slot>${GENERIC_UID}_meshDeformation/startDeformation</slot>
-                </slots>
-            </service>
-
-            <service uid="${GENERIC_UID}_stopDeformationAction" impl="::gui::action::SSlotCaller" >
-                <slots>
-                    <slot>${GENERIC_UID}_meshDeformation/stopDeformation</slot>
-                </slots>
-            </service>
-
-            <service uid="${GENERIC_UID}_reader" impl="::uiIO::editor::IOSelectorService" >
-                <type mode="reader" />
-            </service>
-
-            <!-- Mesh deformation service. -->
-            <service uid="${GENERIC_UID}_meshDeformation" impl="::vtkSimpleMesh::SSimpleMeshDeformation"  worker="DEFORMATION_WORKER" />
-
-            <service uid="${GENERIC_UID}_rendering1Action" impl="::gui::action::SConfigLauncher" autoConnect="yes">
-                <config>
-                    <appConfig id="tuto15MultithreadMeshViewConfig" >
-                        <parameters>
-                            <parameter replace="meshUid" by="self" />
-                            <parameter replace="parentViewId" by="${GENERIC_UID}_rendering1View" />
-                            <parameter replace="channelId" by="camera" />
-                        </parameters>
-                    </appConfig>
-                </config>
-            </service>
-
-            <service uid="${GENERIC_UID}_rendering2Action" impl="::gui::action::SConfigLauncher" autoConnect="yes">
-                <config>
-                    <appConfig id="tuto15MultithreadMeshViewConfig" >
-                        <parameters>
-                            <parameter replace="meshUid" by="self" />
-                            <parameter replace="parentViewId" by="${GENERIC_UID}_rendering2View" />
-                            <parameter replace="channelId" by="camera" />
-                        </parameters>
-                    </appConfig>
-                </config>
-            </service>
-            
-            <start uid="${GENERIC_UID}_frame" />
-            <start uid="${GENERIC_UID}_meshDeformation" />
-            <start uid="${GENERIC_UID}_rendering1Action" />
-            <start uid="${GENERIC_UID}_rendering2Action" />
-
-        </object>
-
-    </config>
-</extension>
\ No newline at end of file
diff --git a/Apps/Tuto15Multithread/rc/configurations/config.xml b/Apps/Tuto15Multithread/rc/configurations/config.xml
deleted file mode 100644
index a0098f3..0000000
--- a/Apps/Tuto15Multithread/rc/configurations/config.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-<extension implements="::fwServices::registry::AppConfig">
-    <id>tuto15MultithreadConfig</id>
-    <type>parameters</type>
-    <parameters>
-        <param name="GENERIC_UID" default="g"/>
-    </parameters>
-    <config>
-
-
-        <!-- In tutoComChannel, the main data object type is ::fwData::Mesh. -->
-        <object type="::fwData::Mesh">
-
-            <service uid="${GENERIC_UID}_frame" impl="::gui::frame::DefaultFrame" >
-                <gui>
-                    <frame>
-                        <name>Tuto15Multithread</name>
-                        <icon>Bundles/Tuto15Multithread_0-1/tuto.ico</icon>
-                        <minSize width="720" height="600" />
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="${GENERIC_UID}_menuBar" start="yes" />
-                    <view sid="${GENERIC_UID}_view" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_menuBar" impl="::gui::aspect::DefaultMenuBarSrv" >
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="Deformation" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="${GENERIC_UID}_fileMenu" start="yes" />
-                    <menu sid="${GENERIC_UID}_deformationMenu" start="yes" />
-                </registry>
-            </service>
-
-            <!-- The application contains three different views. The different views are characterized by their 
-            associated service uid. Furthermore, a minimum window height and a width are given to the last two views.-->
-            <service uid="${GENERIC_UID}_view" impl="::gui::view::DefaultView" >
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="horizontal" />
-                        <view proportion="1" />
-                        <view proportion="1" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_rendering1" start="yes" />
-                    <view sid="${GENERIC_UID}_rendering2" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_fileMenu" impl="::gui::aspect::DefaultMenuSrv" >
-                <gui>
-                    <layout>
-                        <menuItem name="Open file" shortcut="Ctrl+O" />
-                        <separator />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="${GENERIC_UID}_openFileAction" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_quitAction" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_deformationMenu" impl="::gui::aspect::DefaultMenuSrv" >
-                <gui>
-                    <layout>
-                        <menuItem name="Start deformation" shortcut="Ctrl+D" />
-                        <menuItem name="Stop deformation" shortcut="Ctrl+F" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="${GENERIC_UID}_startDeformationAction" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_stopDeformationAction" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="${GENERIC_UID}_openFileAction" impl="::gui::action::StarterActionService" >
-                <start uid="${GENERIC_UID}_reader" />
-            </service>
-
-            <service uid="${GENERIC_UID}_quitAction" impl="::gui::action::QuitAction"  />
-
-            <service uid="${GENERIC_UID}_startDeformationAction" impl="::gui::action::SSlotCaller" >
-                <slots>
-                    <slot>${GENERIC_UID}_meshDeformation/startDeformation</slot>
-                </slots>
-            </service>
-
-            <service uid="${GENERIC_UID}_stopDeformationAction" impl="::gui::action::SSlotCaller" >
-                <slots>
-                    <slot>${GENERIC_UID}_meshDeformation/stopDeformation</slot>
-                </slots>
-            </service>
-
-            <service uid="${GENERIC_UID}_reader" impl="::uiIO::editor::IOSelectorService" >
-                <type mode="reader" />
-            </service>
-
-            <!-- Visualization service for the first window. -->
-            <service uid="${GENERIC_UID}_rendering1" impl="::vtkSimpleMesh::RendererService" autoConnect="yes" />
-
-
-            <!-- Visualization service for the second window -->
-            <service uid="${GENERIC_UID}_rendering2" impl="::vtkSimpleMesh::RendererService" autoConnect="yes" />
-
-            <!-- Mesh deformation service. -->
-            <service uid="${GENERIC_UID}_meshDeformation" impl="::vtkSimpleMesh::SSimpleMeshDeformation"  worker="DEFORMATION_WORKER" />
-
-
-            <!-- Connect the signal slot of the service to receive the updating of camera position -->
-            <connect>
-                <signal>${GENERIC_UID}_rendering1/camUpdated</signal>
-                <slot>${GENERIC_UID}_rendering2/updateCamPosition</slot>
-            </connect>
-
-            <connect>
-                <signal>${GENERIC_UID}_rendering2/camUpdated</signal>
-                <slot>${GENERIC_UID}_rendering1/updateCamPosition</slot>
-            </connect>
-
-
-            <start uid="${GENERIC_UID}_frame" />
-            <start uid="${GENERIC_UID}_meshDeformation" />
-
-        </object>
-
-    </config>
-</extension>
\ No newline at end of file
diff --git a/Apps/Tuto15Multithread/rc/configurations/mesh-visu.xml b/Apps/Tuto15Multithread/rc/configurations/mesh-visu.xml
deleted file mode 100644
index 85e1161..0000000
--- a/Apps/Tuto15Multithread/rc/configurations/mesh-visu.xml
+++ /dev/null
@@ -1,38 +0,0 @@
-<extension implements="::fwServices::registry::AppConfig">
-    <id>tuto15MultithreadMeshViewConfig</id>
-    <type>parameters</type>
-    <parameters>
-        <param name="GENERIC_UID" />
-        <param name="meshUid" />
-        <param name="parentViewId" />
-        <param name="channelId" />
-    </parameters>
-    <config>
-
-        <object type="::fwData::Composite" >
-            
-            <item key="mesh">
-                <object uid="${meshUid}" type="::fwData::Mesh" src="ref">
-
-                    <!-- Visualization service for the first window. -->
-                    <service uid="${GENERIC_UID}_rendering" impl="::vtkSimpleMesh::RendererService" autoConnect="yes">
-                        <registry>
-                            <parent wid="${parentViewId}" />
-                        </registry>
-                    </service>
-        
-                </object>
-            </item>
-            
-            <!-- Connect the signal slot of the service to receive the updating of camera position -->
-            <proxy channel="${channelId}" >
-                <signal>${GENERIC_UID}_rendering/camUpdated</signal>
-                <slot>${GENERIC_UID}_rendering/updateCamPosition</slot>
-            </proxy>
-        
-            <start uid="${GENERIC_UID}_rendering" />
-            
-        </object>
-        
-    </config>
-</extension>
\ No newline at end of file
diff --git a/Apps/Tuto15Multithread/rc/plugin.xml b/Apps/Tuto15Multithread/rc/plugin.xml
deleted file mode 100644
index 71a203c..0000000
--- a/Apps/Tuto15Multithread/rc/plugin.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<plugin id="Tuto15Multithread">
-
-    <requirement id="servicesReg" />
-
-    <xi:include href="configurations/config.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
-    
-    <xi:include href="configurations/mesh-visu.xml"   xmlns:xi="http://www.w3.org/2003/XInclude" />
-    
-    <xi:include href="configurations/config-dynamic.xml"   xmlns:xi="http://www.w3.org/2003/XInclude" />
-    
-</plugin>
diff --git a/Apps/Tuto15Multithread/rc/profile.xml b/Apps/Tuto15Multithread/rc/profile.xml
deleted file mode 100644
index bf1179a..0000000
--- a/Apps/Tuto15Multithread/rc/profile.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="tuto15Multithread" version="0.1">
-
-    <!-- Basic bundles list. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto15Multithread" version="0-1" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tuto15MultithreadConfig" />
-    </activate>
-
-    <!-- Specific bundles list. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-        
-</profile>
diff --git a/Apps/Tuto15Multithread/rc/profileDynamic.xml b/Apps/Tuto15Multithread/rc/profileDynamic.xml
deleted file mode 100644
index 694f177..0000000
--- a/Apps/Tuto15Multithread/rc/profileDynamic.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<profile name="tuto15Multithread" version="0.1">
-
-    <!-- Basic bundles list. -->
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="Tuto15Multithread" version="0-1" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tuto15MultithreadDynamicConfig" />
-    </activate>
-
-    <!-- Specific bundles list. -->
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="vtkSimpleMesh" version="0-1" />
-
-    <start id="dataReg" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-        
-</profile>
diff --git a/Apps/Tuto15MultithreadCtrl/COPYING b/Apps/Tuto15MultithreadCtrl/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/Tuto15MultithreadCtrl/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/Tuto15MultithreadCtrl/COPYING.LESSER b/Apps/Tuto15MultithreadCtrl/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/Tuto15MultithreadCtrl/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/Tuto15MultithreadCtrl/Properties.cmake b/Apps/Tuto15MultithreadCtrl/Properties.cmake
deleted file mode 100644
index 782181e..0000000
--- a/Apps/Tuto15MultithreadCtrl/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME Tuto15MultithreadCtrl )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwData fwServices fwCom fwThread fwComEd )
-set( REQUIREMENTS dataReg servicesReg launcher )
-
diff --git a/Apps/Tuto15MultithreadCtrl/bin/build.options b/Apps/Tuto15MultithreadCtrl/bin/build.options
deleted file mode 100755
index 7774a1b..0000000
--- a/Apps/Tuto15MultithreadCtrl/bin/build.options
+++ /dev/null
@@ -1,26 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-REQUIREMENTS = ['launcher_0-1' ]
-
-BUNDLES = [
-    # 'io_0-1'                ,
-    # 'gui_0-1'               ,
-    # 'guiQt_0-1'             ,
-    'dataReg_0-1'             ,
-    'servicesReg_0-1'         ,
-    # 'visu_0-1'              ,
-    # 'visuVTKQt_0-1'         ,
-    # 'ioVTK_0-1'             ,
-    # 'vtkSimpleMesh_0-1'     ,
-    # 'uiIO_0-1'              ,
-    # 'appXml_0-1'            ,
- ]
-
-LIB = [
-    'fwData_0-1'        ,
-    'fwServices_0-1'    ,
-    'fwCom_0-1'         ,
-    'fwThread_0-1'      ,
-    'fwComEd_0-1'       ,
- ]
-
diff --git a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Namespace.hpp b/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Namespace.hpp
deleted file mode 100644
index 5af73b5..0000000
--- a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Namespace.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTO15MULTITHREADCTRL_NAMESPACE_HPP_
-#define _TUTO15MULTITHREADCTRL_NAMESPACE_HPP_
-
-/**
- * @brief       The namespace Tuto15MultithreadCtrl contains a few multithread example.
- * @namespace   Tuto15MultithreadCtrl
- * 
- * @date        2012.
- */
-namespace Tuto15MultithreadCtrl
-{
-
-}
-#endif // _TUTO15MULTITHREADCTRL_NAMESPACE_HPP_
diff --git a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Plugin.hpp b/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Plugin.hpp
deleted file mode 100644
index 3615e7b..0000000
--- a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Plugin.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTO15MULTITHREADCTRL_PLUGIN_HPP_
-#define _TUTO15MULTITHREADCTRL_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
-
-#include "Tuto15MultithreadCtrl/config.hpp"
-
-namespace Tuto15MultithreadCtrl
-{
-
-/**
- * @brief Class call when bundle is started/stopped
- * 
- * @date    2012
- */
-class TUTO15MULTITHREADCTRL_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-
-public :
-
-    /// PLugin destructor
-    TUTO15MULTITHREADCTRL_API ~Plugin() throw();
-
-    /// This method is used by runtime to initialize the bundle.
-    TUTO15MULTITHREADCTRL_API void start() throw( ::fwRuntime::RuntimeException );
-
-    /// This method is used by runtime to stop the bundle.
-    TUTO15MULTITHREADCTRL_API void stop() throw();
-
-    TUTO15MULTITHREADCTRL_API void initialize() throw( ::fwRuntime::RuntimeException );
-
-    TUTO15MULTITHREADCTRL_API void uninitialize() throw();
-
-    TUTO15MULTITHREADCTRL_API int run() throw();
-
-};
-
-} // namespace Tuto15MultithreadCtrl
-
-#endif //_TUTO15MULTITHREADCTRL_PLUGIN_HPP_
diff --git a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SIncrementArray.hpp b/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SIncrementArray.hpp
deleted file mode 100644
index bfc6685..0000000
--- a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SIncrementArray.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __TUTO15MULTITHREADCTRL_SINCREMENTARRAY_HPP__
-#define __TUTO15MULTITHREADCTRL_SINCREMENTARRAY_HPP__
-
-#include <fwServices/IService.hpp>
-
-
-#include "Tuto15MultithreadCtrl/config.hpp"
-
-fwCorePredeclare((fwThread)(Timer));
-
-namespace Tuto15MultithreadCtrl
-{
-
-class TUTO15MULTITHREADCTRL_CLASS_API SIncrementArray : public ::fwServices::IService
-{
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (SIncrementArray)(::fwServices::IService) ) ;
-
-    TUTO15MULTITHREADCTRL_API SIncrementArray() throw();
-    TUTO15MULTITHREADCTRL_API virtual ~SIncrementArray() throw();
-
-    void setPeriod( unsigned int period )
-    {
-        m_periodInMillisec = period ;
-    }
-
-protected:
-
-    virtual void starting() throw(::fwTools::Failed);
-
-    virtual void stopping() throw(::fwTools::Failed);
-
-    virtual void swapping() throw ( ::fwTools::Failed );
-
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    virtual void updating() throw(::fwTools::Failed);
-
-    virtual void configuring() throw(fwTools::Failed);
-
-    //virtual void info( std::ostream &_sstream ) ;
-
-    SPTR( fwThread::Timer ) m_timer;
-
-    unsigned int m_periodInMillisec;
-
-};
-
-}  // namespace Tuto15MultithreadCtrl
-
-#endif  // __TUTO15MULTITHREADCTRL_SINCREMENTARRAY_HPP__
-
diff --git a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SReadArray.hpp b/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SReadArray.hpp
deleted file mode 100644
index 0185a09..0000000
--- a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SReadArray.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __TUTO15MULTITHREADCTRL_SREADARRAY_HPP__
-#define __TUTO15MULTITHREADCTRL_SREADARRAY_HPP__
-
-#include <fwServices/IService.hpp>
-
-#include "Tuto15MultithreadCtrl/config.hpp"
-
-namespace Tuto15MultithreadCtrl
-{
-
-class TUTO15MULTITHREADCTRL_CLASS_API SReadArray : public ::fwServices::IService
-{
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (SReadArray)(::fwServices::IService) ) ;
-
-    TUTO15MULTITHREADCTRL_API SReadArray() throw();
-    TUTO15MULTITHREADCTRL_API virtual ~SReadArray() throw();
-
-protected:
-
-    virtual void starting() throw(::fwTools::Failed);
-
-    virtual void stopping() throw(::fwTools::Failed);
-
-    virtual void swapping() throw ( ::fwTools::Failed );
-
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    virtual void updating() throw(::fwTools::Failed);
-
-    virtual void configuring() throw(fwTools::Failed);
-
-    //virtual void info( std::ostream &_sstream ) ;
-
-
-};
-
-}  // namespace Tuto15MultithreadCtrl
-
-#endif  // __TUTO15MULTITHREADCTRL_SREADARRAY_HPP__
-
diff --git a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SShowArray.hpp b/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SShowArray.hpp
deleted file mode 100644
index 9bf9556..0000000
--- a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SShowArray.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __TUTO15MULTITHREADCTRL_SSHOWARRAY_HPP__
-#define __TUTO15MULTITHREADCTRL_SSHOWARRAY_HPP__
-
-#include <fwServices/IService.hpp>
-
-#include "Tuto15MultithreadCtrl/config.hpp"
-
-namespace Tuto15MultithreadCtrl
-{
-
-class TUTO15MULTITHREADCTRL_CLASS_API SShowArray : public ::fwServices::IService
-{
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (SShowArray)(::fwServices::IService) ) ;
-
-    TUTO15MULTITHREADCTRL_API SShowArray() throw();
-    TUTO15MULTITHREADCTRL_API virtual ~SShowArray() throw();
-
-protected:
-
-    virtual void starting() throw(::fwTools::Failed);
-
-    virtual void stopping() throw(::fwTools::Failed);
-
-    virtual void swapping() throw ( ::fwTools::Failed );
-
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    virtual void updating() throw(::fwTools::Failed);
-
-    virtual void configuring() throw(fwTools::Failed);
-
-    //virtual void info( std::ostream &_sstream ) ;
-
-
-};
-
-}  // namespace Tuto15MultithShowCtrl
-
-#endif  // __TUTO15MULTITHREADCTRL_SSHOWARRAY_HPP__
-
diff --git a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/config.hpp b/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/config.hpp
deleted file mode 100644
index 64eb748..0000000
--- a/Apps/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTO15MULTITHREADCTRL_CONFIG_HPP_
-#define _TUTO15MULTITHREADCTRL_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef TUTO15MULTITHREADCTRL_EXPORTS
-    #define TUTO15MULTITHREADCTRL_API __declspec(dllexport)
-    #else
-    #define TUTO15MULTITHREADCTRL_API __declspec(dllimport)
-    #endif
-
-    #define TUTO15MULTITHREADCTRL_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef TUTO15MULTITHREADCTRL_EXPORTS
-    #define TUTO15MULTITHREADCTRL_API __attribute__ ((visibility("default")))
-    #define TUTO15MULTITHREADCTRL_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define TUTO15MULTITHREADCTRL_API __attribute__ ((visibility("hidden")))
-    #define TUTO15MULTITHREADCTRL_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define TUTO15MULTITHREADCTRL_API
-    #define TUTO15MULTITHREADCTRL_CLASS_API
-
-#endif
-
-#endif //_TUTO15MULTITHREADCTRL_CONFIG_HPP_
diff --git a/Apps/Tuto15MultithreadCtrl/rc/plugin.xml b/Apps/Tuto15MultithreadCtrl/rc/plugin.xml
deleted file mode 100644
index c36643b..0000000
--- a/Apps/Tuto15MultithreadCtrl/rc/plugin.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<plugin id="Tuto15MultithreadCtrl" class="::Tuto15MultithreadCtrl::Plugin">
-
-    <requirement id="servicesReg" />
-    <library name="Tuto15MultithreadCtrl" />
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwServices::IService</type>
-        <service>::Tuto15MultithreadCtrl::SReadArray</service>
-        <object>::fwData::Array</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwServices::IService</type>
-        <service>::Tuto15MultithreadCtrl::SShowArray</service>
-        <object>::fwData::Array</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwServices::IService</type>
-        <service>::Tuto15MultithreadCtrl::SIncrementArray</service>
-        <object>::fwData::Array</object>
-    </extension>
-
-</plugin>
diff --git a/Apps/Tuto15MultithreadCtrl/rc/profile.xml b/Apps/Tuto15MultithreadCtrl/rc/profile.xml
deleted file mode 100644
index 25a19d3..0000000
--- a/Apps/Tuto15MultithreadCtrl/rc/profile.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<profile name="Tuto15MultithreadCtrl" version="0.1">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    
-    <activate id="Tuto15MultithreadCtrl" version="0-1" />
-
-    <start id="Tuto15MultithreadCtrl" />
-
-</profile>
\ No newline at end of file
diff --git a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp b/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
deleted file mode 100644
index 9559c3a..0000000
--- a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#include <cmath>
-
-#include <fwRuntime/profile/Profile.hpp>
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-
-#include <fwCore/spyLog.hpp>
-
-#include <fwData/Array.hpp>
-#include <fwData/Object.hpp>
-
-#include <fwServices/registry/ServiceFactory.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include <fwThread/Worker.hpp>
-
-#include "Tuto15MultithreadCtrl/Plugin.hpp"
-#include "Tuto15MultithreadCtrl/SReadArray.hpp"
-
-namespace Tuto15MultithreadCtrl
-{
-
-//-----------------------------------------------------------------------------
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::Tuto15MultithreadCtrl::Plugin");
-
-//-----------------------------------------------------------------------------
-
-Plugin::~Plugin() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::start() throw(::fwRuntime::RuntimeException)
-{
-    SLM_TRACE_FUNC();
-
-    ::fwRuntime::profile::getCurrentProfile()->setRunCallback(::boost::bind(&Plugin::run, this));
-}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::stop() throw()
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void Plugin::uninitialize() throw()
-{
-    SLM_TRACE_FUNC();
-}
-
-int Plugin::run() throw()
-{
-
-    ::fwData::Array::sptr array = ::fwData::Array::New();
-
-    ::fwServices::IService::sptr srvRead =
-        ::fwServices::registry::ServiceFactory::getDefault()
-        ->create("::fwServices::IService", "::Tuto15MultithreadCtrl::SReadArray");
-    ::fwServices::IService::sptr srvShow =
-        ::fwServices::registry::ServiceFactory::getDefault()
-        ->create("::fwServices::IService", "::Tuto15MultithreadCtrl::SShowArray");
-    ::fwServices::IService::sptr srvIncrement =
-        ::fwServices::registry::ServiceFactory::getDefault()
-        ->create("::fwServices::IService", "::Tuto15MultithreadCtrl::SIncrementArray");
-
-    ::fwServices::OSR::registerService(array, srvRead);
-    ::fwServices::OSR::registerService(array, srvShow);
-    ::fwServices::OSR::registerService(array, srvIncrement);
-
-    SLM_ASSERT("Failed to create service", srvRead);
-    SLM_ASSERT("Failed to create service", srvShow);
-    SLM_ASSERT("Failed to create service", srvIncrement);
-
-    ::fwThread::Worker::sptr worker1 = ::fwThread::Worker::New();
-    ::fwThread::Worker::sptr worker2 = ::fwThread::Worker::New();
-    ::fwThread::Worker::sptr worker3 = ::fwThread::Worker::New();
-
-    // ::fwServices::registry::ActiveWorkers::sptr workers = ::fwServices::registry::ActiveWorkers::getDefault();
-    // workers->addWorker("worker1", worker1);
-    // workers->addWorker("worker2", worker2);
-    // workers->addWorker("worker3", worker3);
-
-    srvRead->setWorker(worker1);
-    srvShow->setWorker(worker2);
-    srvIncrement->setWorker(worker3);
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig
-        = array->signal< ::fwData::Object::ObjectModifiedSignalType>( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-    ::fwCom::Connection showConnection = sig->connect(srvShow->slot( ::fwServices::IService::s_RECEIVE_SLOT) );
-    ::fwCom::Connection incrementConnection = sig->connect(srvIncrement->slot( ::fwServices::IService::s_RECEIVE_SLOT) );
-
-
-    srvRead->start().wait();
-    srvShow->start().wait();
-    srvIncrement->start().wait();
-
-    srvRead->update().wait();
-
-    unsigned long long count = 1<<30 ;
-    double d = 4<<2;
-
-    OSLM_INFO("Computing " << count << " square roots.");
-
-    for (unsigned long long i = 0; i < count ; ++i)
-    {
-        d = std::sqrt(d);
-    }
-
-    OSLM_INFO("Done computing " << count << " square roots : " << d);
-
-    // ::boost::this_thread::sleep_for( ::boost::chrono::seconds(10));
-
-    showConnection.disconnect();
-    incrementConnection.disconnect();
-
-    srvRead->stop().wait();
-    srvShow->stop().wait();
-    srvIncrement->stop().wait();
-
-
-    ::fwServices::OSR::unregisterService(srvRead);
-    ::fwServices::OSR::unregisterService(srvShow);
-    ::fwServices::OSR::unregisterService(srvIncrement);
-
-    srvRead.reset();
-    srvShow.reset();
-    srvIncrement.reset();
-
-    worker1->stop();
-    worker2->stop();
-    worker3->stop();
-
-    return 0;
-}
-
-
-} // namespace Tuto15MultithreadCtrl
diff --git a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SIncrementArray.cpp b/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SIncrementArray.cpp
deleted file mode 100644
index dfc62eb..0000000
--- a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SIncrementArray.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/bind.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-#include <fwComEd/helper/Array.hpp>
-
-#include <fwThread/Timer.hpp>
-
-#include <fwData/Array.hpp>
-#include <fwData/mt/ObjectWriteLock.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include "Tuto15MultithreadCtrl/SIncrementArray.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IService , ::Tuto15MultithreadCtrl::SIncrementArray , ::fwData::Array ) ;
-
-namespace Tuto15MultithreadCtrl
-{
-
-SIncrementArray::SIncrementArray() throw() :
-    m_periodInMillisec(500)
-{
-}
-
-SIncrementArray::~SIncrementArray() throw()
-{
-}
-
-void SIncrementArray::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    m_timer = m_associatedWorker->createTimer();
-    m_timer->setFunction( ::boost::bind(&SIncrementArray::updating, this) );
-    m_timer->setDuration( ::boost::chrono::milliseconds(m_periodInMillisec) );
-}
-
-void SIncrementArray::stopping() throw( ::fwTools::Failed )
-{
-    m_timer.reset();
-}
-
-void SIncrementArray::updating() throw( ::fwTools::Failed )
-{
-    ::fwData::Array::sptr array = this->getObject< ::fwData::Array >();
-    ::fwData::mt::ObjectWriteLock writeLock(array);
-
-    SLM_ASSERT("No array.", array);
-    SLM_ASSERT("Array : bad number of dimensions.", array->getNumberOfDimensions() == 1 );
-
-    const int arraySize = array->getSize()[0];
-
-    ::fwComEd::helper::Array arrayHelper(array);
-
-    unsigned int *buffer = static_cast< unsigned int* >( arrayHelper.getBuffer() );
-
-    for (int i = 0 ; i < arraySize; i++)
-    {
-        ++buffer[i];
-    }
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig
-        = array->signal< ::fwData::Object::ObjectModifiedSignalType>( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-
-    ::fwServices::ObjectMsg::sptr msg = ::fwServices::ObjectMsg::New();
-    msg->addEvent("MODIFIED_EVENT");
-    fwServicesBlockAndNotifyMsgMacro(this->getLightID(), sig, msg, m_slotReceive);
-}
-
-void SIncrementArray::configuring() throw( ::fwTools::Failed )
-{
-
-}
-
-void SIncrementArray::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    m_timer->start();
-}
-
-void SIncrementArray::swapping( ) throw( ::fwTools::Failed )
-{
-
-}
-
-} // namespace Tuto15MultithreadCtrl
diff --git a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SReadArray.cpp b/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SReadArray.cpp
deleted file mode 100644
index 84c9f29..0000000
--- a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SReadArray.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Array.hpp>
-#include <fwData/mt/ObjectWriteLock.hpp>
-
-#include <fwComEd/helper/Array.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include "Tuto15MultithreadCtrl/SReadArray.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IService , ::Tuto15MultithreadCtrl::SReadArray , ::fwData::Array ) ;
-
-namespace Tuto15MultithreadCtrl
-{
-
-SReadArray::SReadArray() throw()
-{
-}
-
-SReadArray::~SReadArray() throw()
-{
-}
-
-void SReadArray::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-void SReadArray::stopping() throw( ::fwTools::Failed )
-{
-
-}
-
-void SReadArray::updating() throw( ::fwTools::Failed )
-{
-    ::fwData::Array::sptr array = this->getObject< ::fwData::Array >();
-    ::fwData::mt::ObjectWriteLock writeLock(array);
-    SLM_ASSERT("No array.", array);
-
-    const int arraySize = 10;
-
-    ::fwData::Array::SizeType size(1, arraySize);
-
-    array->resize("uint32", size, 1, true);
-
-    ::fwComEd::helper::Array arrayHelper(array);
-
-    unsigned int *buffer = static_cast< unsigned int* >( arrayHelper.getBuffer() );
-
-    for (int i = 0 ; i < arraySize; i++)
-    {
-        buffer[i] = i;
-    }
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig
-        = array->signal< ::fwData::Object::ObjectModifiedSignalType>( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-    ::fwServices::ObjectMsg::sptr msg = ::fwServices::ObjectMsg::New();
-    msg->addEvent("MODIFIED_EVENT");
-    sig->asyncEmit(msg);
-}
-
-void SReadArray::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-
-}
-
-void SReadArray::swapping( ) throw( ::fwTools::Failed )
-{
-
-}
-
-void SReadArray::configuring() throw( ::fwTools::Failed )
-{
-
-}
-
-} // namespace Tuto15MultithreadCtrl
diff --git a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SShowArray.cpp b/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SShowArray.cpp
deleted file mode 100644
index 9598f8e..0000000
--- a/Apps/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SShowArray.cpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iterator>
-#include <iostream>
-
-#include <fwData/Array.hpp>
-#include <fwData/mt/ObjectReadLock.hpp>
-
-#include <fwComEd/helper/Array.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include "Tuto15MultithreadCtrl/SShowArray.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IService , ::Tuto15MultithreadCtrl::SShowArray , ::fwData::Array ) ;
-
-namespace Tuto15MultithreadCtrl
-{
-
-SShowArray::SShowArray() throw()
-{
-}
-
-SShowArray::~SShowArray() throw()
-{
-}
-
-void SShowArray::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-void SShowArray::stopping() throw( ::fwTools::Failed )
-{
-
-}
-
-void SShowArray::updating() throw( ::fwTools::Failed )
-{
-
-}
-
-void SShowArray::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    ::fwData::Array::sptr array = this->getObject< ::fwData::Array >();
-    ::fwData::mt::ObjectReadLock readLock(array);
-    SLM_ASSERT("No array.", array);
-
-    ::fwComEd::helper::Array arrayHelper(array);
-    unsigned int *buffer = static_cast< unsigned int* >( arrayHelper.getBuffer() );
-
-    std::cout << "Buffer : ";
-    std::ostream_iterator<unsigned int> coutIter (std::cout,", ");
-    std::copy(buffer, buffer+10, coutIter );
-    std::cout << std::endl;
-}
-
-void SShowArray::swapping( ) throw( ::fwTools::Failed )
-{
-
-}
-
-void SShowArray::configuring() throw( ::fwTools::Failed )
-{
-
-}
-
-} // namespace Tuto15MultithreadCtrl
diff --git a/Apps/TutoGui/COPYING b/Apps/TutoGui/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/TutoGui/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/TutoGui/COPYING.LESSER b/Apps/TutoGui/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/TutoGui/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/TutoGui/Properties.cmake b/Apps/TutoGui/Properties.cmake
deleted file mode 100644
index a004cd7..0000000
--- a/Apps/TutoGui/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME TutoGui )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS io appXml gui guiQt guiWx dataReg servicesReg launcher )
-
diff --git a/Apps/TutoGui/bin/build.options b/Apps/TutoGui/bin/build.options
deleted file mode 100644
index afbddae..0000000
--- a/Apps/TutoGui/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'guiQt_0-1'             ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'launcher_0-1'          ,
-    'appXml_0-1'            ,
- ]
-
-
-if not (PLATFORM, ARCH) == ('osx', '64'):
-    BUNDLES += [
-            'guiWx_0-1'    ,
-            ]
-
diff --git a/Apps/TutoGui/rc/plugin.xml b/Apps/TutoGui/rc/plugin.xml
deleted file mode 100644
index 21d244c..0000000
--- a/Apps/TutoGui/rc/plugin.xml
+++ /dev/null
@@ -1,235 +0,0 @@
-<plugin id="TutoGui">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoGuiConfig</id>
-        <type>parameters</type>
-        <config>
-
-        <object type="::fwData::Image">
-           <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no" >
-                <gui>
-                    <frame>
-                        <name>TutoGui</name>
-                        <icon>Bundles/TutoGui_0-1/tuto.ico</icon>
-                        <minSize width="800" height="600"/>
-                    </frame>
-                    <menuBar />
-                    <toolBar >
-                        <toolBitmapSize height= "32" width="32" />
-                    </toolBar>
-                </gui>
-                <registry>
-                    <menuBar sid="menuBar" start="yes" />
-                    <toolBar sid="toolBar" start="yes" />
-                    <view sid="view" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menu name="My Menu"/>
-                        <menu name="My Menu 2"/>
-                        <menu name="My Menu 3"/>
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="myMenu" start="yes" />
-                    <menu sid="myMenu2" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="My item 1" style="check" icon="Bundles/TutoGui_0-1/icons/important.png" />
-                        <separator />
-                        <menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                        <menuItem name="My item 3" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                        <separator />
-                        <menuItem name="My item A" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                        <menuItem name="My item B" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                        <separator />
-                        <menuItem name="start 2-3 / stop A-B" style="radio" icon="Bundles/TutoGui_0-1/icons/important.png" />
-                        <menuItem name="start A-B / stop 2-3" style="radio" icon="Bundles/TutoGui_0-1/icons/important.png" />
-                        <menuItem name="Quit" icon="Bundles/TutoGui_0-1/icons/unreadable.png"/>
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="item1" start="yes" />
-                    <menuItem sid="item2" start="no" />
-                    <menuItem sid="item3" start="no" />
-                    <menuItem sid="item4" start="no" />
-                    <menuItem sid="item5" start="no" />
-                    <menuItem sid="item16" start="yes" />
-                    <menuItem sid="item17" start="yes" />
-                    <menuItem sid="actionQuit" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="My item 1" shortcut="1" style="check" />
-                        <separator />
-                        <menuItem name="My item 2" shortcut="2" style="radio" />
-                        <menuItem name="My item 3" shortcut="3" style="radio" />
-                        <separator />
-                        <menuItem name="My item A" shortcut="A" style="radio" />
-                        <menuItem name="My item B" shortcut="B" style="radio" />
-                        <separator />
-                        <menuItem name="Quit" shortcut="Ctrl+Q" specialAction="QUIT" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="item1" start="no" />
-                    <menuItem sid="item2" start="no" />
-                    <menuItem sid="item3" start="no" />
-                    <menuItem sid="item4" start="no" />
-                    <menuItem sid="item5" start="no" />
-                    <menuItem sid="actionQuit" start="no" />
-                </registry>
-            </service>
-
-            <service uid="myMenu2" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="My item 1" style="check" />
-                        <separator />
-                        <menuItem name="start 2-3 / stop A-B" style="radio" />
-                        <menuItem name="start A-B / stop 2-3" style="radio" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="item1" start="no" />
-                    <menuItem sid="item16" start="no" />
-                    <menuItem sid="item17" start="no" />
-                </registry>
-            </service>
-
-            <service uid="item1" type="::fwGui::IActionSrv" impl="::gui::action::NothingActionSrv" autoConnect="no">
-                <state active="true" />
-            </service>
-            <service uid="item2" type="::fwGui::IActionSrv" impl="::gui::action::NothingActionSrv" autoConnect="no" >
-                <state active="true" />
-            </service>
-            <service uid="item3" type="::fwGui::IActionSrv" impl="::gui::action::NothingActionSrv" autoConnect="no" />
-            <service uid="item4" type="::fwGui::IActionSrv" impl="::gui::action::NothingActionSrv" autoConnect="no" >
-                <state active="false" />
-            </service>
-            <service uid="item5" type="::fwGui::IActionSrv" impl="::gui::action::NothingActionSrv" autoConnect="no" >
-                <state active="true" />
-            </service>
-
-            <service uid="item16" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <state active="true" />
-                <start uid="item2" />
-                <start uid="item3" />
-                <stop uid="item4" />
-                <stop uid="item5" />
-            </service>
-            <service uid="item17" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <stop uid="item2" />
-                <stop uid="item3" />
-                <start uid="item4" />
-                <start uid="item5" />
-            </service>
-
-            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-
-            <service uid="view" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager" >
-                        <orientation value="vertical" />
-                        <view caption="view1" />
-                        <view caption="view2" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view wid="myView" />
-                    <view sid="subView2" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="subView1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager" >
-                        <orientation value="horizontal" />
-                        <view caption="view3" />
-                        <view caption="view4" />
-                        <view caption="view5" />
-                    </layout>
-                </gui>
-                <registry>
-                    <parent wid="myView" />
-                    <view sid="subView3" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="subView2" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager" >
-                        <view caption="CardinalView1" align="center" />
-                        <view caption="CardinalView2" align="right" minWidth="400" />
-                        <view caption="CardinalView3" align="right" minWidth="400" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="view12" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="subView3" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::TabLayoutManager" >
-                        <view caption="TabView1"  />
-                        <view caption="TabView2" selected="yes" />
-                        <view caption="TabView3" />
-                    </layout>
-                </gui>
-                <registry/>
-            </service>
-
-            <service uid="view12" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager" >
-                        <orientation value="vertical" />
-                    </layout>
-                    <toolBar />
-                </gui>
-                <registry>
-                    <toolBar sid="toolbar2" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                        <menuItem name="My item 3" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                        <separator />
-                        <menuItem name="My item A" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                        <menuItem name="My item B" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="item2" />
-                    <menuItem sid="item3" />
-                    <menuItem sid="item4" />
-                    <menuItem sid="item5" />
-                </registry>
-            </service>
-
-            <start uid="myFrame" />
-            <start uid="subView1" />
-
-        </object>
-
-        </config>
-    </extension>
-
-</plugin>
diff --git a/Apps/TutoGui/rc/profile.xml b/Apps/TutoGui/rc/profile.xml
deleted file mode 100644
index 01146d4..0000000
--- a/Apps/TutoGui/rc/profile.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<profile name="tutoGui" version="0.1">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="gui" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiWx" version="0-1" />
-
-    <activate id="TutoGui" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="tutoGuiConfig" />
-    </activate>
-    
-    <start id="guiWx" />
-    <start id="appXml" />
-      
-</profile>
diff --git a/Apps/TutoGui/rc/profileQt.xml b/Apps/TutoGui/rc/profileQt.xml
deleted file mode 100644
index 51b35c2..0000000
--- a/Apps/TutoGui/rc/profileQt.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<profile name="tutoGui" version="0.1">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="gui" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="TutoGui" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="tutoGuiConfig" />
-    </activate>
-
-    <start id="guiQt" />
-    <start id="appXml" />
-    
-</profile>
diff --git a/Apps/TutoGui/rc/tuto.ico b/Apps/TutoGui/rc/tuto.ico
deleted file mode 100644
index 64f45cf..0000000
Binary files a/Apps/TutoGui/rc/tuto.ico and /dev/null differ
diff --git a/Apps/TutoPython/CMakeLists.txt b/Apps/TutoPython/CMakeLists.txt
deleted file mode 100644
index 7f9b9c5..0000000
--- a/Apps/TutoPython/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-fwLoadProperties()
-
-
-if(NOT EXISTS "${EXTERNAL_LIBRARIES}/lib/site-packages/")
-    message(SEND_ERROR "numpy is required for TutoPython and it is not found in : ${EXTERNAL_LIBRARIES}/lib/site-packages/ ")
-else()
-    file(COPY "${EXTERNAL_LIBRARIES}/lib/site-packages/" DESTINATION "${CMAKE_BINARY_DIR}/Python/")
-    if(${NAME}_INSTALL)
-        install(DIRECTORY "${EXTERNAL_LIBRARIES}/lib/site-packages/" DESTINATION share/${FWPROJECT_NAME}_${DASH_VERSION} COMPONENT Python)
-    endif()
-endif()
diff --git a/Apps/TutoPython/COPYING b/Apps/TutoPython/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/TutoPython/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/TutoPython/COPYING.LESSER b/Apps/TutoPython/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/TutoPython/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/TutoPython/Properties.cmake b/Apps/TutoPython/Properties.cmake
deleted file mode 100644
index 3cdf816..0000000
--- a/Apps/TutoPython/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME TutoPython )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwPython )
-set( REQUIREMENTS io ioVTK uiIO guiQt binding uiPython dataReg servicesReg appXml launcher )
-
diff --git a/Apps/TutoPython/bin/build.options b/Apps/TutoPython/bin/build.options
deleted file mode 100644
index 9e834f1..0000000
--- a/Apps/TutoPython/bin/build.options
+++ /dev/null
@@ -1,17 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE = ['numpy']
-BUNDLES = [
-        'io',
-        'ioVTK',
-        'uiIO',
-        'guiQt',
-        'binding',
-        'uiPython',
-        'dataReg',
-        'servicesReg',
-        'appXml_0-1',
-        'launcher_0-1',
- ]
-
-
diff --git a/Apps/TutoPython/rc/icons/cross.png b/Apps/TutoPython/rc/icons/cross.png
deleted file mode 100644
index b94fc97..0000000
Binary files a/Apps/TutoPython/rc/icons/cross.png and /dev/null differ
diff --git a/Apps/TutoPython/rc/icons/python.png b/Apps/TutoPython/rc/icons/python.png
deleted file mode 100644
index e81120e..0000000
Binary files a/Apps/TutoPython/rc/icons/python.png and /dev/null differ
diff --git a/Apps/TutoPython/rc/plugin.xml b/Apps/TutoPython/rc/plugin.xml
deleted file mode 100644
index aedb82b..0000000
--- a/Apps/TutoPython/rc/plugin.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<plugin id="TutoPython">
-
-    <requirement id="servicesReg" />
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>tutoPythonConfig</id>
-        <type>parameters</type>
-        <config>
-            <object type="::fwData::Composite">
-                <item key="PythonString">
-                    <object type="::fwData::String">
-
-                        <service uid="mainFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                            <gui>
-                                <frame>
-                                    <name>TutoPython</name>
-                                    <icon>Bundles/TutoPython_0-1/tuto.ico</icon>
-                                    <minSize width="800" height="600" />
-                                </frame>
-                                <toolBar>
-                                    <toolBitmapSize height="32" width="32" />
-                                </toolBar>
-                            </gui>
-                            <registry>
-                                <toolBar sid="toolBar" start="yes" />
-                                <view sid="codeEditor" start="yes" />
-                            </registry>
-                        </service>
-
-                        <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
-                            <gui>
-                                <layout>
-                                    <menuItem name="Test" icon="Bundles/TutoPython_0-1/icons/python.png" />
-                                    <menuItem name="Open" />
-                                    <menuItem name="Quit" icon="Bundles/TutoPython_0-1/icons/cross.png" />
-                                </layout>
-                            </gui>
-                            <registry>
-                                <menuItem sid="PyTest" start="yes" />
-                                <menuItem sid="action_openFile" start="yes" />
-                                <menuItem sid="actionQuit" start="yes" />
-                            </registry>
-                        </service>
-
-
-                        <service uid="PyTest" type="::fwGui::IActionSrv" impl="::uiPython::action::StringRun" autoConnect="no">
-                            <state active="true" />
-                            <!--<pyobjects> -->
-                            <!--<item name="" id="" /> -->
-                            <!--</pyobjects> -->
-                        </service>
-
-                        <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-                        <service uid="codeEditor" type="::gui::editor::IEditor" impl="::guiQt::editor::Code" autoConnect="yes" />
-
-                        <value>
-<![CDATA[
-import fwData
-import numpy
-
-#use 'open' to load an image, then you can use the 'test' button
-
-image = fwData.getObject("anImage")
-
-print "Image informations : "
-for attr in ['origin', 'spacing', 'type', 'size' ]:
-    print " - ", attr, ':', getattr(image, attr)
-
-#get view on fwData::Image buffer
-if image.buffer is not None:
-    data = numpy.asarray(image.buffer)
-
-    #work on data ...
-    data[ (0 < data) & (data > 10) ] = 5
-
-    #this will retrieve the <anImageWriter> described in the configuration,
-    #start, update and stop it. this will show a file dialog box requesting a
-    #filename to save the image to.
-    writer = fwData.getSrv("anImageWriter")
-    writer.start()
-    writer.update()
-    writer.stop()
-]]>
-                    </value>
-
-                    </object>
-                </item>
-
-                <item key="Image">
-                    <object uid="anImage" type="::fwData::Image">
-                        <service uid="anImageReader" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no" />
-                        <service uid="anImageWriter" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no">
-                            <type mode="writer" />
-                        </service>
-
-                        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                            <start uid="anImageReader" />
-                        </service>
-
-
-                    </object>
-                </item>
-
-                <start uid="mainFrame" />
-            </object>
-        </config>
-    </extension>
-
-</plugin>
diff --git a/Apps/TutoPython/rc/profile.xml b/Apps/TutoPython/rc/profile.xml
deleted file mode 100644
index 51c8782..0000000
--- a/Apps/TutoPython/rc/profile.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<profile name="tutoPython" version="0.1">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    
-    <activate id="io" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
- 
-   
-    <activate id="binding" version="0-1" >
-        <param id="pythonhome" value="./PythonHome" />
-        <param id="pythonpath" value="./Python" />
-    </activate>
-    <activate id="uiPython" version="0-1" />
-
-    <activate id="TutoPython" version="0-1"/>
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="tutoPythonConfig" />
-    </activate>
-
-    <start id="appXml" />
-    <start id="binding" />  
-    <start id="guiQt" />  
-</profile>
diff --git a/Apps/TutoPython/rc/tuto.ico b/Apps/TutoPython/rc/tuto.ico
deleted file mode 100644
index 64f45cf..0000000
Binary files a/Apps/TutoPython/rc/tuto.ico and /dev/null differ
diff --git a/Apps/TutoTrianConverterCtrl/CMakeLists.txt b/Apps/TutoTrianConverterCtrl/CMakeLists.txt
deleted file mode 100644
index 6bfec0b..0000000
--- a/Apps/TutoTrianConverterCtrl/CMakeLists.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-fwLoadProperties()
-
-find_package (Boost COMPONENTS filesystem program_options REQUIRED)
-fwInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
\ No newline at end of file
diff --git a/Apps/TutoTrianConverterCtrl/COPYING b/Apps/TutoTrianConverterCtrl/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/TutoTrianConverterCtrl/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/TutoTrianConverterCtrl/COPYING.LESSER b/Apps/TutoTrianConverterCtrl/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/TutoTrianConverterCtrl/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/TutoTrianConverterCtrl/Properties.cmake b/Apps/TutoTrianConverterCtrl/Properties.cmake
deleted file mode 100644
index 9989976..0000000
--- a/Apps/TutoTrianConverterCtrl/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME TutoTrianConverterCtrl )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwRuntime fwServices fwData )
-set( REQUIREMENTS io gui dataReg servicesReg ioVTK ioData )
-
diff --git a/Apps/TutoTrianConverterCtrl/bin/build.options b/Apps/TutoTrianConverterCtrl/bin/build.options
deleted file mode 100644
index a397546..0000000
--- a/Apps/TutoTrianConverterCtrl/bin/build.options
+++ /dev/null
@@ -1,14 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'io_0-1'                ,
-    'gui_0-1'               ,
-    'dataReg_0-1'           ,
-    'servicesReg_0-1'       ,
-    'ioVTK_0-1'             ,
-    'ioData_0-1'            ,
- ]
-
-USE= ['boostProgramOptions']
-
diff --git a/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/Namespace.hpp b/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/Namespace.hpp
deleted file mode 100644
index ed9abcf..0000000
--- a/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/Namespace.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef TUTOTRIANCONVERTERCTRLNAMESPACE_HPP_
-#define TUTOTRIANCONVERTERCTRLNAMESPACE_HPP_
-
-/**
- * @brief      The namespace tutoTrianConverterCtrl.
- * @namespace  tutoTrianConverterCtrl
- * 
- * @date       2009-2010.
- *
- */
-namespace tutoTrianConverterCtrl
-{
-
-}
-#endif /* TUTOTRIANCONVERTERCTRLNAMESPACE_HPP_ */
diff --git a/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/Plugin.hpp b/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/Plugin.hpp
deleted file mode 100644
index 13e3d1c..0000000
--- a/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/Plugin.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTOTRIANCONVERTERCTRL_PLUGIN_HPP_
-#define _TUTOTRIANCONVERTERCTRL_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
-
-#include <fwData/Mesh.hpp>
-#include <fwServices/IService.hpp>
-
-#include "tutoTrianConverterCtrl/config.hpp"
-
-namespace tutoTrianConverterCtrl
-{
-
-/**
- * @brief   This class is started when the bundles is loaded.
- * @class   Plugin
- */
-class TUTOTRIANCONVERTERCTRL_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-public:
-    /// Constructor.
-    TUTOTRIANCONVERTERCTRL_API Plugin() throw();
-
-    /// Destructor. Do nothing.
-    TUTOTRIANCONVERTERCTRL_API ~Plugin() throw();
-
-    /// Overrides start method. .
-    TUTOTRIANCONVERTERCTRL_API void start() throw(::fwRuntime::RuntimeException);
-
-    /// Overrides stop method. Do nothing
-    TUTOTRIANCONVERTERCTRL_API void stop() throw();
-
-    TUTOTRIANCONVERTERCTRL_API void initialize() throw( ::fwRuntime::RuntimeException );
-
-    TUTOTRIANCONVERTERCTRL_API void uninitialize() throw();
-
-private:
-    ::fwData::Mesh::sptr m_mesh;
-    ::fwServices::IService::sptr m_writerSrv;
-    ::fwServices::IService::sptr m_readerSrv;
-};
-
-} // namespace tutoTrianConverterCtrl
-
-#endif // _TUTOTRIANCONVERTERCTRL_PLUGIN_HPP_
diff --git a/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/config.hpp b/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/config.hpp
deleted file mode 100644
index b82282a..0000000
--- a/Apps/TutoTrianConverterCtrl/include/tutoTrianConverterCtrl/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _TUTOTRIANCONVERTERCTRL_CONFIG_HPP_
-#define _TUTOTRIANCONVERTERCTRL_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef TUTOTRIANCONVERTERCTRL_EXPORTS
-    #define TUTOTRIANCONVERTERCTRL_API __declspec(dllexport)
-    #else
-    #define TUTOTRIANCONVERTERCTRL_API __declspec(dllimport)
-    #endif
-
-    #define TUTOTRIANCONVERTERCTRL_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef TUTOTRIANCONVERTERCTRL_EXPORTS
-    #define TUTOTRIANCONVERTERCTRL_API __attribute__ ((visibility("default")))
-    #define TUTOTRIANCONVERTERCTRL_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define TUTOTRIANCONVERTERCTRL_API __attribute__ ((visibility("hidden")))
-    #define TUTOTRIANCONVERTERCTRL_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define TUTOTRIANCONVERTERCTRL_API
-    #define TUTOTRIANCONVERTERCTRL_CLASS_API
-
-#endif
-
-#endif // _TUTOTRIANCONVERTERCTRL_CONFIG_HPP_
diff --git a/Apps/TutoTrianConverterCtrl/rc/plugin.xml b/Apps/TutoTrianConverterCtrl/rc/plugin.xml
deleted file mode 100644
index 5a447cd..0000000
--- a/Apps/TutoTrianConverterCtrl/rc/plugin.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<plugin id="TutoTrianConverterCtrl" class="::tutoTrianConverterCtrl::Plugin" >
-
-    <requirement id="servicesReg" />
-    <library name="TutoTrianConverterCtrl" />
-
-</plugin>
diff --git a/Apps/TutoTrianConverterCtrl/rc/profile.xml b/Apps/TutoTrianConverterCtrl/rc/profile.xml
deleted file mode 100644
index a3c4f33..0000000
--- a/Apps/TutoTrianConverterCtrl/rc/profile.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<profile name="TutoTrianConverterCtrl" version="0.1">
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    
-    <activate id="TutoTrianConverterCtrl" version="0-1" />
-    <activate id="gui" version="0-1" />
-
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioData" version="0-1" />
-
-    <start id="TutoTrianConverterCtrl" />
-</profile>
diff --git a/Apps/TutoTrianConverterCtrl/src/tutoTrianConverterCtrl/Plugin.cpp b/Apps/TutoTrianConverterCtrl/src/tutoTrianConverterCtrl/Plugin.cpp
deleted file mode 100644
index 0424b90..0000000
--- a/Apps/TutoTrianConverterCtrl/src/tutoTrianConverterCtrl/Plugin.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/program_options/options_description.hpp>
-#include <boost/program_options/parsers.hpp>
-#include <boost/program_options/positional_options.hpp>
-#include <boost/program_options/variables_map.hpp>
-
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <fwRuntime/profile/Profile.hpp>
-
-#include <fwServices/op/Add.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include "tutoTrianConverterCtrl/Plugin.hpp"
-
-namespace tutoTrianConverterCtrl
-{
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::tutoTrianConverterCtrl::Plugin");
-
-//------------------------------------------------------------------------------
-
-Plugin::Plugin() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-Plugin::~Plugin() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void Plugin::start() throw( ::fwRuntime::RuntimeException )
-{}
-
-//------------------------------------------------------------------------------
-
-void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
-{
-    namespace po = boost::program_options;
-
-    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
-    SLM_ASSERT("Profile is not initialized", profile);
-    ::fwRuntime::profile::Profile::ParamsContainer params = profile->getParams();
-
-    std::string trianMeshPath;
-    std::string vtkMeshPath;
-
-    po::options_description cmdline_options("TutoTrianConverterCtrl options");
-    cmdline_options.add_options()
-                                ("trian", po::value(&trianMeshPath)->required(), "Path of trian mesh file to convert")
-                                ("vtk", po::value(&vtkMeshPath)->required(), "Path of created vtk mesh file")
-                                ;
-
-    po::positional_options_description p;
-    p.add("trian", 1)
-                 .add("vtk", 2);
-
-    po::variables_map vm;
-
-    try
-    {
-        po::store(po::command_line_parser(params)
-        .options(cmdline_options)
-        .positional(p)
-        .run(),
-        vm);
-        po::notify(vm);
-    }
-    catch(po::error& e)
-    {
-        std::cerr << cmdline_options << std::endl << e.what() << std::endl;
-        return;
-    }
-
-    m_mesh = ::fwData::Mesh::New();
-    m_readerSrv = ::fwServices::add(m_mesh, "::io::IReader", "::ioData::MeshReaderService");
-    ::fwRuntime::EConfigurationElement::sptr readerCfg = ::fwRuntime::EConfigurationElement::New( "service" );
-    ::fwRuntime::EConfigurationElement::sptr readerFilenameCfg = ::fwRuntime::EConfigurationElement::New( "file" );
-    readerFilenameCfg->setValue(trianMeshPath);
-    readerCfg->addConfigurationElement(readerFilenameCfg);
-    m_readerSrv->setConfiguration( readerCfg ) ;
-    m_readerSrv->configure();
-
-    m_writerSrv = ::fwServices::add(m_mesh, "::io::IWriter", "::ioVTK::MeshWriterService");
-    ::fwRuntime::EConfigurationElement::sptr writerCfg = ::fwRuntime::EConfigurationElement::New( "service" );
-    ::fwRuntime::EConfigurationElement::sptr writerFilenameCfg = ::fwRuntime::EConfigurationElement::New( "file" );
-    writerFilenameCfg->setValue(vtkMeshPath);
-    writerCfg->addConfigurationElement(writerFilenameCfg);
-    m_writerSrv->setConfiguration( writerCfg ) ;
-    m_writerSrv->configure();
-
-    m_readerSrv->start();
-    m_writerSrv->start();
-    m_readerSrv->update();
-    m_writerSrv->update();
-}
-
-//------------------------------------------------------------------------------
-
-void Plugin::stop() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void Plugin::uninitialize() throw()
-{
-    if (m_writerSrv)
-    {
-        m_writerSrv->stop();
-        ::fwServices::OSR::unregisterService( m_writerSrv ) ;
-    }
-    if(m_readerSrv)
-    {
-        m_readerSrv->stop();
-        ::fwServices::OSR::unregisterService( m_readerSrv ) ;
-    }
-    m_mesh.reset();
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace tutoTrianConverterCtrl
diff --git a/Apps/TutoVectorField/CMakeLists.txt b/Apps/TutoVectorField/CMakeLists.txt
deleted file mode 100644
index 0effb20..0000000
--- a/Apps/TutoVectorField/CMakeLists.txt
+++ /dev/null
@@ -1 +0,0 @@
-fwLoadProperties()
\ No newline at end of file
diff --git a/Apps/TutoVectorField/COPYING b/Apps/TutoVectorField/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/TutoVectorField/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/TutoVectorField/COPYING.LESSER b/Apps/TutoVectorField/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/TutoVectorField/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/TutoVectorField/Properties.cmake b/Apps/TutoVectorField/Properties.cmake
deleted file mode 100644
index 12b7d6b..0000000
--- a/Apps/TutoVectorField/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME TutoVectorField )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES  )
-set( REQUIREMENTS dataReg ctrlSelection gui guiQt ioData ioVTK io servicesReg uiVisuQt uiImageQt uiIO visuVTK visuVTKQt visuVTKAdaptor visu launcher appXml )
-
diff --git a/Apps/TutoVectorField/bin/build.options b/Apps/TutoVectorField/bin/build.options
deleted file mode 100644
index 827016a..0000000
--- a/Apps/TutoVectorField/bin/build.options
+++ /dev/null
@@ -1,24 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-BUNDLES = [
-    'dataReg_0-1'       ,
-    'ctrlSelection_0-1' ,
-    'gui_0-1'           ,
-    'guiQt_0-1'         ,
-    'ioData_0-1'        ,
-    'ioVTK_0-1'         ,
-    'io_0-1'            ,
-    'servicesReg_0-1'   ,
-    'uiVisuQt_0-1'      ,
-    'uiImageQt_0-1'     ,
-    'uiIO_0-1'          ,
-    'visuVTK_0-1'       ,
-    'visuVTKQt_0-1'     ,
-    'visuVTKAdaptor_0-1',
-    'visu_0-1'          ,
-    'launcher_0-1'      ,
-    'appXml_0-1'        ,
- ]
-
-
diff --git a/Apps/TutoVectorField/rc/plugin.xml b/Apps/TutoVectorField/rc/plugin.xml
deleted file mode 100644
index 5225c3d..0000000
--- a/Apps/TutoVectorField/rc/plugin.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<plugin id="TutoVectorField">
-
-<requirement id="servicesReg" />
-
-<extension implements="::fwServices::registry::AppConfig">
-        <id>TutoVectorField</id>
-        <type>parameters</type>
-        <config>
-
-
-    <object type="::fwData::Composite">
-        <service uid="IHM" impl="::gui::frame::DefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
-            <gui>
-                <frame>
-                    <name>TutoVectorField</name>
-                </frame>
-                <menuBar />
-            </gui>
-            <registry>
-                <menuBar sid="menuBar" start="yes" />
-                <view sid="multiView_scene1" start="yes" />
-            </registry>
-        </service>
-        <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menu name="File" />
-                </layout>
-            </gui>
-            <registry>
-                <menu sid="menu_File" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-            <gui>
-                <layout>
-                    <menuItem name="Open file" shortcut="Ctrl+O" />
-                    <menuItem name="Save file" shortcut="Ctrl+S" />
-                    <separator />
-                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="action_openFile" start="yes" />
-                <menuItem sid="action_saveFile" start="yes" />
-                <menuItem sid="action_quit" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-            <start uid="readerPathFile" />
-        </service>
-        <service uid="action_saveFile" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-            <start uid="writerPathFile" />
-        </service>
-        <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-        <service uid="multiView_scene1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::CardinalLayoutManager" >
-                    <view align="center" />
-                    <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="genericScene" start="yes" />
-                <view sid="multiView_scene1_bottom" start="yes" />
-            </registry>
-        </service>
-
-
-        <service uid="multiView_scene1_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-            <gui>
-                <layout type="::fwGui::LineLayoutManager" >
-                    <orientation value="horizontal" />
-                    <view proportion="0" minWidth="30" />
-                    <view proportion="0" minWidth="50" />
-                    <view proportion="1" />
-                    <view proportion="0" minWidth="30" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="sliceListEditor" start="yes" />
-                <view sid="showScanEditor" start="yes" />
-                <view sid="sliderIndexEditor" start="yes" />
-                <view sid="snapshotScene1Editor" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="snapshotScene1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-            <snap>
-                <scene uid="genericScene" />
-            </snap>
-        </service>
-
-        <!-- CompositeVisu description -->
-        <item key="compositeVisu">
-            <object uid="compositeVisu" type="::fwData::Composite">
-
-
-                <service uid="genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                    <scene>
-                        <picker id="picker" vtkclass="fwVtkCellPicker" />
-
-                        <renderer id="default" background="0.5" />
-                        <adaptor id="renderAdaptor" class="::visuVTKAdaptor::Render" objectId="self">
-                            <config renderer="default" picker="" />
-                        </adaptor>
-
-                        <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
-                            <config renderer="default" picker="picker" mode="3D" slices="3" sliceIndex="axial" />
-                        </adaptor>
-
-                        <adaptor uid="vectorFieldAdatpor" id="vectorFieldAdatporId" class="::visuVTKAdaptor::VectorField" objectId="image">
-                            <config renderer="default" />
-                        </adaptor>
-
-                        <adaptor id="snapshot1" class="::visuVTKAdaptor::Snapshot" objectId="self" >
-                            <config renderer="default" />
-                        </adaptor>
-                    </scene>
-                </service>
-
-                <item key="image">
-
-                    <object uid="image" type="::fwData::Image">
-
-                        <service uid="readerPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no"> 
-                            <type mode="reader"/>
-                        </service>
-
-                        <service uid="writerPathFile" impl="::uiIO::editor::IOSelectorService" type="::gui::editor::IDialogEditor" autoConnect="no"> 
-                            <type mode="writer"/>
-                        </service>
-
-                        <!-- This service convert a simple fwData::Image to medical Image -->
-                        <service uid="medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController"  autoConnect="no" />
-
-                        <service uid="sliceListEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor" autoConnect="yes">
-                            <negatoAdaptor uid="MPRNegatoScene3D" slices="3" />
-                        </service>
-                        <service uid="showScanEditor" type="::gui::editor::IEditor" impl="::uiImage::ShowScanEditor" autoConnect="no">
-                            <negatoAdaptor uid="MPRNegatoScene3D" />
-                        </service>
-                        <service uid="sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes" >
-                            <sliceIndex>axial</sliceIndex>
-                        </service>
-                    </object>
-                </item>
-            </object>
-        </item>
-
-        <start uid="IHM" />
-
-    </object>
-
-
-        </config>
-    </extension>
-
-</plugin>
diff --git a/Apps/TutoVectorField/rc/profile.xml b/Apps/TutoVectorField/rc/profile.xml
deleted file mode 100644
index ce74dd0..0000000
--- a/Apps/TutoVectorField/rc/profile.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<profile name="TutoVectorField" version="0.1" check-single-instance="true">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-    <activate id="io" version="0-1" />
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="TutoVectorField" version="0-1" />
-    <activate id="appXml" version="0-1">
-        <param id="config" value="TutoVectorField" />
-    </activate>
-
-    <activate id="ctrlSelection" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
-    <activate id="uiImageQt" version="0-1" />
-
-    <start id="visuVTK" />
-    <start id="visuVTKAdaptor" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/VRRender/CMakeLists.txt b/Apps/VRRender/CMakeLists.txt
index 2a4834e..2c4dde1 100644
--- a/Apps/VRRender/CMakeLists.txt
+++ b/Apps/VRRender/CMakeLists.txt
@@ -1,108 +1,4 @@
 fwLoadProperties()
 
-
-if(VRRender_INSTALL)
-    if(APPLE)
-        set(FWPROJECT_NAME VRRender)
-
-        set(VRRENDER_BUNDLE_ICON_FILE vrrender.icns) 
-        set_source_files_properties(rc/${VRRENDER_BUNDLE_ICON_FILE} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
-
-
-        add_executable(
-            VRRender.app MACOSX_BUNDLE
-            ${launcher_HEADERS} ${launcher_SOURCES} 
-            rc/${VRRENDER_BUNDLE_ICON_FILE}
-            )
-
-
-        set_target_properties( VRRender.app PROPERTIES OUTPUT_NAME ${FWPROJECT_NAME})
-
-        add_definitions(-DDEFAULT_PROFILE=Bundles/${FWPROJECT_NAME}_${${FWPROJECT_NAME}_DASH_VERSION}/profile.xml)
-
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_ICON_FILE ${VRRENDER_BUNDLE_ICON_FILE})
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_INFO_STRING "${FWPROJECT_NAME}")
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_SHORT_VERSION_STRING "${${FWPROJECT_NAME}_VERSION}")
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_LONG_VERSION_STRING "${${FWPROJECT_NAME}_VERSION}")
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${FWPROJECT_NAME}")
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_COPYRIGHT "Copyright 2012-2013 IRCAD")
-        set_target_properties( VRRender.app PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "com.ircad.vrrender")
-
-        find_package (Boost COMPONENTS filesystem program_options REQUIRED)
-
-        target_include_directories(VRRender.app PRIVATE ${Boost_INCLUDE_DIRS})
-        target_link_libraries(VRRender.app fwCore fwRuntime ${Boost_LIBRARIES})
-
-        set(APP_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/VRRender.app")
-
-        configure_file("${fwGuiQt_SOURCE_DIR}/bin/qt.conf" "${APP_PATH}/Contents/Resources/qt.conf")
-        INSTALL(CODE " file(WRITE \"${APP_PATH}/Contents/Resources/qt.conf\" \"\") " COMPONENT ApplicationBundle)
-
-        install(
-            TARGETS VRRender.app 
-            BUNDLE DESTINATION . COMPONENT ApplicationBundle
-            )
-
-        set(APP_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/VRRender.app")
-
-        install(DIRECTORY "${CMAKE_INSTALL_PREFIX}/share" DESTINATION "VRRender.app/Contents/" COMPONENT ApplicationBundle)
-        install(DIRECTORY "${CMAKE_INSTALL_PREFIX}/Bundles" DESTINATION "VRRender.app/Contents/" COMPONENT ApplicationBundle)
-        install(DIRECTORY "${CMAKE_INSTALL_PREFIX}/qtplugins/plugins" DESTINATION "VRRender.app/Contents/" COMPONENT ApplicationBundle)
-
-        INSTALL(CODE "
-        file(GLOB_RECURSE QTPLUGINS \"${APP_INSTALL_PATH}/Contents/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
-        file(GLOB_RECURSE BUNDLES \"${APP_INSTALL_PATH}/Contents/Bundles/*/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
-        include(BundleUtilities)
-        fixup_bundle(\"${APP_INSTALL_PATH}\" \"\${BUNDLES};\${QTPLUGINS}\" \"${CMAKE_INSTALL_PREFIX}/${LIBRARY_OUTPUT_DIR}\")
-        execute_process(
-            COMMAND sh -c \"find . -type f -exec stat --format='%s' {} \\; |sort -rn | uniq -d | xargs -I{} -n1 find . -type f -size {}c -print0 | xargs -0 stat --format='%20s %n' | sort | uniq -w20 --all-repeated=separate |cut -c22- | paste - - - -d' ' | sed 's/^/ln -s -f /' | sh \" 
-            WORKING_DIRECTORY ${APP_INSTALL_PATH}/Contents/MacOS
-            )
-
-        execute_process(
-            COMMAND sh -c \"python ${CMAKE_SOURCE_DIR}/CMake/OSXTools/osx_install_name_tool.py -e MacOS/ $(find Bundles -iname '*.dylib') -f \"
-            WORKING_DIRECTORY ${APP_INSTALL_PATH}/Contents
-            )
-
-        " COMPONENT ApplicationBundle)
-         
-    elseif(WIN32)
-        
-        set(FWPROJECT_NAME VRRender)
-        set(VRRENDER_BUNDLE_ICON_FILE ${CMAKE_CURRENT_SOURCE_DIR}/rc/vrrender.ico) 
-        set(LAUNCHER_PATH "bin/launcher.exe")
-        set(PROFILE_PATH "Bundles/${FWPROJECT_NAME}_${${FWPROJECT_NAME}_DASH_VERSION}/profile.xml")
-        
-       #configure the wix template 
-       configure_file(${FWCMAKE_RESOURCE_PATH}Wix/WIX.template.in ${PROJECT_BINARY_DIR}WIX.template [@ONLY] )
-             
-               
-        install(CODE "
-                      file(GLOB_RECURSE LIBS
-                        \"\${CMAKE_INSTALL_PREFIX}/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
-                      include(BundleUtilities)
-                      fixup_bundle(\"${CMAKE_INSTALL_PREFIX}/bin/launcher.exe\" \"\${LIBS}\" \"${EXTERNAL_LIBRARIES}/bin\")
-                     " COMPONENT Runtime)
-                     
-        set(CPACK_PACKAGE_NAME "${FWPROJECT_NAME}")
-        set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_INSTALL_PREFIX};.") #look inside install dir for packaging
-        set(CPACK_PACKAGE_VENDOR "IRCAD")
-        set(CPACK_PACKAGE_ICON ${VRRENDER_BUNDLE_ICON_FILE})
-        set(CPACK_PACKAGE_VERSION "${VERSION}")
-                 
-        if(CPACK_BINARY_WIX)
-       
-            set(CPACK_WIX_TEMPLATE "${PROJECT_BINARY_DIR}WIX.template")
-            set(CPACK_WIX_PROGRAM_MENU_FOLDER "IRCAD" )
-            set(CPACK_WIX_PRODUCT_ICON ${VRRENDER_BUNDLE_ICON_FILE})
-            set(CPACK_RESOURCE_FILE_LICENSE ${FWCMAKE_RESOURCE_PATH}Wix/LICENSE.rtf)
-            
-        endif(CPACK_BINARY_WIX)
-        
-        include(CPack)
-
-    endif()
-endif()
-
-
+generic_install()
 
diff --git a/Apps/VRRender/COPYING b/Apps/VRRender/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Apps/VRRender/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Apps/VRRender/COPYING.LESSER b/Apps/VRRender/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Apps/VRRender/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Apps/VRRender/Properties.cmake b/Apps/VRRender/Properties.cmake
index a99b306..704a15e 100644
--- a/Apps/VRRender/Properties.cmake
+++ b/Apps/VRRender/Properties.cmake
@@ -1,40 +1,49 @@
 
 set( NAME VRRender )
 set( VERSION 0.9 )
-set( TYPE BUNDLE )
+set( TYPE APP )
 set( DEPENDENCIES  )
 set( REQUIREMENTS
     servicesReg
     dataReg
-    visu
-    visuVTK
-    visuVTKQt
-    visuVTKAdaptor
+
     gui
     guiQt
+
+    activities
+    appXml2
     memory
-    monitor
-    monitorQt
     ctrlMemory
-    launcher
+    fwlauncher
+
+    io
+    ioAtoms
+    ioITK
     ioVTK
     ioVtkGdcm
+    ioData
+
     uiIO
     uiGenericQt
     uiMedDataQt
-    uiImageQt
-    appXml
-    activities
-    ctrlSelection
-    uiReconstructionQt
-    2DVisualizationActivity
-    3DVisualizationActivity
+
+    2DVisualizationActivity2
+    3DVisualizationActivity2
+    volumeRenderingActivity2
     blendActivity
-    volumeRenderingActivity
+    ioActivity
+
+    dicomFilteringActivity
+    dicomPacsReaderActivity
+    dicomPacsWriterActivity
+
     media
-    ioAtoms
+
     patchMedicalData
-    ioITK
+
     filterVRRender
-    )
 
+    preferences
+)
+
+bundleParam(appXml2 PARAM_LIST config parameters PARAM_VALUES VRRenderBase VRRenderAppBase)
diff --git a/Apps/VRRender/bin/build.options b/Apps/VRRender/bin/build.options
deleted file mode 100755
index 93be3a0..0000000
--- a/Apps/VRRender/bin/build.options
+++ /dev/null
@@ -1,43 +0,0 @@
-TYPE = 'bundle'
-VERSION = '0-9'
-BUNDLES = [
-    'servicesReg_0-1',
-    'dataReg_0-1',
-    'visu_0-1',
-    'visuVTK_0-1',
-    'visuVTKQt_0-1',
-    'visuVTKAdaptor_0-1',
-    'visuVTKVRAdaptor_0-1',
-    'scene2D_0-1',
-    'gui_0-1',
-    'guiQt_0-1',
-    'uiTF_0-1',
-    'uiVisu_0-1',
-    'uiVisuQt_0-1',
-    'memory_0-1',
-    'monitor_0-1',
-    'monitorQt_0-1',
-    'ctrlMemory_0-1',
-    'launcher_0-1',
-    'ioITK_0-1',
-    'ioVTK_0-1',
-    'ioVtkGdcm_0-1',
-    'uiIO_0-1',
-    'uiGenericQt_0-1',
-    'uiMedDataQt_0-1',
-    'uiImageQt_0-1',
-    'uiMeasurement_0-1',
-    'uiMeasurementQt_0-1',
-    'appXml_0-1',
-    'activities_0-1',
-    'ctrlSelection_0-1',
-    'uiReconstructionQt_0-1',
-    '2DVisualizationActivity_0-1',
-    '3DVisualizationActivity_0-1',
-    'blendActivity_0-1',
-    'volumeRenderingActivity_0-1',
-    'media_0-1',
-    'ioAtoms_0-1',
-    'patchMedicalData_0-1',
-    'filterVRRender_0-1',
-] 
diff --git a/Apps/VRRender/doc/Makefile b/Apps/VRRender/doc/Makefile
new file mode 100644
index 0000000..d746c38
--- /dev/null
+++ b/Apps/VRRender/doc/Makefile
@@ -0,0 +1,88 @@
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d build/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source
+
+.PHONY: help clean html dirhtml pickle json htmlhelp qthelp latex changes linkcheck doctest
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html      to make standalone HTML files"
+	@echo "  dirhtml   to make HTML files named index.html in directories"
+	@echo "  pickle    to make pickle files"
+	@echo "  json      to make JSON files"
+	@echo "  htmlhelp  to make HTML files and a HTML help project"
+	@echo "  qthelp    to make HTML files and a qthelp project"
+	@echo "  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  changes   to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck to check all external links for integrity"
+	@echo "  doctest   to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf build/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) build/html
+	@echo
+	@echo "Build finished. The HTML pages are in build/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) build/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in build/dirhtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) build/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) build/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) build/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in build/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) build/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in build/qthelp, like this:"
+	@echo "# qcollectiongenerator build/qthelp/VRRenderDoc.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile build/qthelp/VRRenderDoc.qhc"
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) build/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in build/latex."
+	@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
+	      "run these through (pdf)latex."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) build/changes
+	@echo
+	@echo "The overview file is in build/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) build/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in build/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) build/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in build/doctest/output.txt."
diff --git a/Apps/VRRender/doc/htmlhelpTowxHtmlHelp b/Apps/VRRender/doc/htmlhelpTowxHtmlHelp
new file mode 100755
index 0000000..9d02306
--- /dev/null
+++ b/Apps/VRRender/doc/htmlhelpTowxHtmlHelp
@@ -0,0 +1,22 @@
+#!/bin/bash
+
+test ! -d $1 && echo "$1 is not a dir" && exit 1 
+
+for i in $1/*html
+do
+    echo -n $i '... '
+    sed -i 's,<div \+class="[^"]\+" \+id=\("[^"]\+"\) *>,<a name=\1 />&,' $i
+    sed -i 's,<[a-z]\+ \+id=\("[^"]\+"\) *>,<a name=\1 />&,' $i
+    echo ok
+done
+
+sed -i  "s/Keyword/Name/g" $1/*hhk
+
+
+# images html theme defautl
+# mogrify -resize "850>" *.jpg
+
+# ipmages htmlhelp
+# mogrify -resize "1024>" *.jpg
+
+echo Done.
diff --git a/Apps/VRRender/doc/make.bat b/Apps/VRRender/doc/make.bat
new file mode 100644
index 0000000..0eb72e0
--- /dev/null
+++ b/Apps/VRRender/doc/make.bat
@@ -0,0 +1,112 @@
+ at ECHO OFF
+
+REM Command file for Sphinx documentation
+
+set SPHINXBUILD=sphinx-build
+set ALLSPHINXOPTS=-d build/doctrees %SPHINXOPTS% source
+if NOT "%PAPER%" == "" (
+    set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
+)
+
+if "%1" == "" goto help
+
+if "%1" == "help" (
+    :help
+    echo.Please use `make ^<target^>` where ^<target^> is one of
+    echo.  html      to make standalone HTML files
+    echo.  dirhtml   to make HTML files named index.html in directories
+    echo.  pickle    to make pickle files
+    echo.  json      to make JSON files
+    echo.  htmlhelp  to make HTML files and a HTML help project
+    echo.  qthelp    to make HTML files and a qthelp project
+    echo.  latex     to make LaTeX files, you can set PAPER=a4 or PAPER=letter
+    echo.  changes   to make an overview over all changed/added/deprecated items
+    echo.  linkcheck to check all external links for integrity
+    echo.  doctest   to run all doctests embedded in the documentation if enabled
+    goto end
+)
+
+if "%1" == "clean" (
+    for /d %%i in (build\*) do rmdir /q /s %%i
+    del /q /s build\*
+    goto end
+)
+
+if "%1" == "html" (
+    %SPHINXBUILD% -b html %ALLSPHINXOPTS% build/html
+    echo.
+    echo.Build finished. The HTML pages are in build/html.
+    goto end
+)
+
+if "%1" == "dirhtml" (
+    %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% build/dirhtml
+    echo.
+    echo.Build finished. The HTML pages are in build/dirhtml.
+    goto end
+)
+
+if "%1" == "pickle" (
+    %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% build/pickle
+    echo.
+    echo.Build finished; now you can process the pickle files.
+    goto end
+)
+
+if "%1" == "json" (
+    %SPHINXBUILD% -b json %ALLSPHINXOPTS% build/json
+    echo.
+    echo.Build finished; now you can process the JSON files.
+    goto end
+)
+
+if "%1" == "htmlhelp" (
+    %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% build/htmlhelp
+    echo.
+    echo.Build finished; now you can run HTML Help Workshop with the ^
+.hhp project file in build/htmlhelp.
+    goto end
+)
+
+if "%1" == "qthelp" (
+    %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% build/qthelp
+    echo.
+    echo.Build finished; now you can run "qcollectiongenerator" with the ^
+.qhcp project file in build/qthelp, like this:
+    echo.^> qcollectiongenerator build\qthelp\VRRenderDoc.qhcp
+    echo.To view the help file:
+    echo.^> assistant -collectionFile build\qthelp\VRRenderDoc.ghc
+    goto end
+)
+
+if "%1" == "latex" (
+    %SPHINXBUILD% -b latex %ALLSPHINXOPTS% build/latex
+    echo.
+    echo.Build finished; the LaTeX files are in build/latex.
+    goto end
+)
+
+if "%1" == "changes" (
+    %SPHINXBUILD% -b changes %ALLSPHINXOPTS% build/changes
+    echo.
+    echo.The overview file is in build/changes.
+    goto end
+)
+
+if "%1" == "linkcheck" (
+    %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% build/linkcheck
+    echo.
+    echo.Link check complete; look for any errors in the above output ^
+or in build/linkcheck/output.txt.
+    goto end
+)
+
+if "%1" == "doctest" (
+    %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% build/doctest
+    echo.
+    echo.Testing of doctests in the sources finished, look at the ^
+results in build/doctest/output.txt.
+    goto end
+)
+
+:end
diff --git a/Apps/VRRender/doc/makeall.sh b/Apps/VRRender/doc/makeall.sh
new file mode 100755
index 0000000..fe934ce
--- /dev/null
+++ b/Apps/VRRender/doc/makeall.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+# -*- coding: UTF8 -*-
+PROJ=VRRender
+
+test  $(basename $(dirname $PWD)) = "$PROJ" && (
+
+
+make html htmlhelp latex && (
+
+(
+cd build
+#patch -p1 < ../patch.cedil
+)
+
+(
+cd build/latex
+make all-pdf
+)
+
+find build/ -type d -name .svn|xargs rm -rf
+
+./htmlhelpTowxHtmlHelp build/htmlhelp
+
+(
+cd build/htmlhelp/_images
+mogrify -resize "1024>" *.jpg *.png
+)
+
+
+(
+cd build/html/_images
+mogrify -resize "850>" *.jpg
+)
+
+(
+rm ../rc/doc.zip
+cd build/htmlhelp/
+zip -r ../../../rc/doc.zip ./
+)
+
+) || echo Error
+
+) || echo "Erreur: A executer dans $PROJ/doc"
diff --git a/Apps/VRRender/doc/source/2D_Landmarks.rst b/Apps/VRRender/doc/source/2D_Landmarks.rst
new file mode 100755
index 0000000..54ca553
--- /dev/null
+++ b/Apps/VRRender/doc/source/2D_Landmarks.rst
@@ -0,0 +1,23 @@
+2D MPR Landmarks and Distance Measurement 
+=========================================
+
+.. index:: 2D landmark, 2D distance
+
+VR-Planning integrates a 3D landmarks positioning system in order to label a wanted 3D position of a voxel in the medical image. As described in the 3D medical image visualization, the management of these landmarks will be performed thanks to the following  three buttons of the tool bar  :
+
+.. image:: _static/Add-Find-View-landmark.png
+   :align: center
+
+Thus, a 3D landmark can be positioned at the last selected voxel position by clicking on the ''Add landmark'' button of the tools bar. This action also open a small window allowing to name the landmark. The landmark then appears and can be moved in (an only in) the selected Negato view by simply selecting it through a mouse left button press, and by moving it in the view by keeping the left button pressed and releasing it in the wanted location. 
+
+.. image:: _static/Negato-landmarks.png
+   :align: center
+
+All 3D landmark position being recorded, it is possible to automatically reach a landmark position by clicking on the ''Find landmark'' button of the tools bar. The selection of the wanted landmark will then allow to automatically position the three Negatos (axial, frontal and sagittal views) on the 3D position of the landmark. Landmarks taking an important place on the selected view, it is also possible to hide or show all landmarks by using the ''Hide/Show landmarks'' button of the too [...]
+
+Distance computation is activated by using the button located in the bottom right part of each Negato. A single click adds a colorized distance segment in the Negato view. Each new click adds such a distance segment with each time a new color. Distances are computed between two 3D spheres that can be moved in the Negato by simply selecting it by pressing on the mouse left button, and by moving it in the view by keeping the left button pressed and releasing it in the wanted location. Dist [...]
+
+.. image:: _static/Negato-Distance.png
+   :align: center
+
+
diff --git a/Apps/VRRender/doc/source/2D_MPR.rst b/Apps/VRRender/doc/source/2D_MPR.rst
new file mode 100755
index 0000000..3569345
--- /dev/null
+++ b/Apps/VRRender/doc/source/2D_MPR.rst
@@ -0,0 +1,42 @@
+2D Medical Image Multi-Planar Rendering (MPR)
+=============================================
+
+.. index:: 2D MPR, Multi Planar Rendering 
+
+The 2D medical image visualization is selected by using the F2 shortcut or the forth icon of the tool bar :
+
+.. image:: _static/icon-2D.png
+   :align: center
+
+The Multi-Planar Rendering (MPR) corresponds to the most standard visualization techniques developed and used on professional medical imaging workstations : three different views of the medical image in Axial, Frontal and Sagittal views. Each window is called Negato. VR-Planning provides such a 2D medical image view in one big left window (Negato1) and two smaller right windows (Negato2 and Negato 3).
+
+.. image:: _static/Negato-01.png
+   :align: center
+
+It is easy to change the visualized axis of the Negato by using the axis selection menu at the left bottom part of each Negato. The visualized axes are automatically synchronized in order to keep the three Axial, Frontal and Sagittal views in three different windows. 
+
+.. image:: _static/Negato-axes.png
+   :align: center
+
+Each Negato indicates the minimum and maximum screened density [min,max], the standard density windowing size W and the middle density of the windowing L. As in the 3D medical image visualization, it is possible to improve the visualized grey-level by modifying the screened windowing. The parameterization of the visualized grey level window is done via the same technique as developed in all existing radiological software tools. When pressing the right mouse button in the image, it is pos [...]
+
+.. image:: _static/Negato-contrast.png
+   :align: center
+
+Each Negato indicates the last selected voxel (voxel = volumic pixel), the coordinates (x,y,z) and the density of this voxel being indicated on the last line. Such a selection is performed by a simple left click in the image. Pressing (or clicking) the middle button provides the same information but adds an automatic synchronization of all views. When pressing the button, a full red cross centered on the selected voxel appears on all views while pressing the button.
+
+.. image:: _static/Negato-info.png
+   :align: center
+
+It is also possible to zoom and to translate the image on each Negato in order to focus the attention on a part of the image. After a left click in the selected Negato, you can zoom with the mouse wheel or by using the combination of the ``Shift`` key and pressing the right button of the mouse. A movement from bottom to top increases the zoom, and a movement from top to bottom decreases the zoom. 
+
+.. image:: _static/Negato-Zoom.png
+   :align: center
+
+The translation is performed by using the combination of the ``shift`` key and pressing the left button of the mouse. In this case, a movement in any direction creates a translation in the same direction. The reset of translations and zooms is performed with the ``R`` key.
+
+.. image:: _static/Negato-translate.png
+   :align: center
+
+The snapshot tool located at the left bottom part of each Negato allows to save the 2D-Slicer view in jpeg format. The snapshot is activated by a simple left button click on the picture icon localized at the bottom part of the window.
+
diff --git a/Apps/VRRender/doc/source/3D_Distances.rst b/Apps/VRRender/doc/source/3D_Distances.rst
new file mode 100755
index 0000000..ed00eb7
--- /dev/null
+++ b/Apps/VRRender/doc/source/3D_Distances.rst
@@ -0,0 +1,23 @@
+3D Landmarks and Distance Measurement
+=====================================
+
+.. index:: 3D landmarks, 3D distance
+
+In order to label a wanted 3D position of a voxel in the medical image, VR-Planning integrates a 3D landmarks positioning system. The management of these landmarks will be performed thanks to the following three buttons of the tool bar corresponding respectively to ``Add landmark``, ``Find landmark`` and ``Hide/Show landmarks`` :
+
+.. image:: _static/Add-Find-View-landmark.png
+   :align: center
+
+A 3D landmark can be positioned at the last selected voxel position by clicking on the ``Add landmark`` button of the tools bar. This action also open a small window allowing to name the landmark. The landmark then appears and can be moved in the Negato view by simply selecting it through a mouse left button press, and by moving it in the view by keeping the left button pressed and releasing it in the wanted location.
+
+.. image:: _static/3D-landmark.png
+   :align: center
+
+All 3D landmark position being recorded, it is possible to automatically reach a landmark position by clicking on the ``Find landmark`` button of the tools bar. The selection of the wanted landmark will then allow to automatically position the three axial, frontal and sagittal planes on the 3D position of the landmark. 3D landmark taking an important place on the view, it is also possible to hide or show all landmarks by using the ``Hide/Show landmarks`` button of the tools bar. Finally, [...]
+   
+VR-Planning also offers the possibility to compute distances in 3D view. Distance computation is activated by using the distance button located in the bottom right part of the view. A single click adds a colorized distance segment in the medical image view. Each new click adds such a distance segment with each time a new color. Distances are computed between two 3D spheres that can be moved in the medical image view by simply selecting it through a mouse left button press, and by moving  [...]
+
+.. image:: _static/3D-distance.png
+   :align: center
+
+
diff --git a/Apps/VRRender/doc/source/3D_Medical_Image_Visu.rst b/Apps/VRRender/doc/source/3D_Medical_Image_Visu.rst
new file mode 100755
index 0000000..1c20592
--- /dev/null
+++ b/Apps/VRRender/doc/source/3D_Medical_Image_Visu.rst
@@ -0,0 +1,32 @@
+3D Medical Image Visualization (including oblique plane)
+========================================================
+
+.. index:: 3D medical image, oblique plane 
+
+VR-Planning allows to visualize the medical image in a 3D rendering of slices. This rendering is automatically activated when the patient is loaded. However, it is possible to hide this medical image visualization by a simple click on the ``Scan`` button located on the left bottom of the 3D window. A new click on the ``No scan`` button allows to show again the medical image. 
+
+.. image:: _static/3D-show-hide-scan.png
+   :align: center
+
+When the medical image is visible, two different modes of visualization are available. The default one slice view can thus be replaced by using the ``>`` button located in the bottom left part of the 3D window. The user can select and display three planes corresponding to the axial, frontal and sagittal view. 
+
+.. image:: _static/3D-scan-1-3.png
+   :align: center
+
+The default one slice view is an axial view. The bottom view selector allows to replace this axial view by a frontal or a sagittal view. The slice selection is then performed thanks to the slider located to the bottom part of the visualization window. 
+
+.. image:: _static/3D-scan-ax-front-sag.png
+   :align: center
+
+Finally in all mode, the medical image visualization can be modified by using the same interaction than in the 2D visualization. First of all, it is possible to select a voxel of the image and to obtain its coordinates (x,y,z) and its density through a simple left click (or press) in the medical image. These information are printed in the top left part of the window. The same information are obtained with a middle click that automatically synchronizes axial, frontal and sagittal view on  [...]
+  
+.. image:: _static/3D-scan-GL-value.png
+   :align: center
+
+The parameterization of the visualized grey level window is done via the same technique as developed in all existing radiological software tools. When pressing the right mouse button in the image, it is possible to decrease or increase the middle value of the grey level window with up (increase) or down (decrease) movements of the mouse and the grey level window size with left (decrease) or right (increase) movements of the mouse. 
+  
+.. image:: _static/3D-scan-contrast.png
+   :align: center
+
+   
+   
diff --git a/Apps/VRRender/doc/source/3D_Models_Manipulation.rst b/Apps/VRRender/doc/source/3D_Models_Manipulation.rst
new file mode 100755
index 0000000..b596570
--- /dev/null
+++ b/Apps/VRRender/doc/source/3D_Models_Manipulation.rst
@@ -0,0 +1,42 @@
+3D Models Manipulation
+======================
+
+.. index:: 3D Models, 3D Visualisation
+
+The 3D model manipulations mode is automatically selected when you start VR-Planning. It is also possible to select this mode by using the F1 shortcut or the third icon of the tool bar  :
+
+.. image:: _static/icon-3D.png
+   :align: center
+
+The tool bar contains three recorded 3D views : axial, frontal and sagittal. These three views are activated by selecting the ``Axial view``, ``Frontal view`` and ``Sagittal view`` options in the  ``3D Model`` menu, or by a simple click on the three last buttons of the tool bar : 
+
+================================= =================================== ==================================== 
+.. image:: _static/icon-axial.png .. image:: _static/icon-frontal.png .. image:: _static/icon-sagittal.png
+================================= =================================== ==================================== 
+.. image:: _static/axial-view.jpg .. image:: _static/frontal-view.jpg .. image:: _static/sagittal-view.jpg
+================================= =================================== ==================================== 
+
+The 3D modeled patient can be moved through different interactions on the 3D image. Here is the list of these interactions :
+
+- Rotation around the center of the 3D view by a left mouse button press and a mouse dragging in direction of the rotation. 
+
+.. image:: _static/3D-rotate.png
+   :align: center
+
+- Translation by a shift + left mouse button press and a mouse dragging in direction of the translation. The translation can be reset by pressing the ``R`` key on the computer keyboard (reinitialisation of the point of view)
+
+.. image:: _static/3D-translation.png
+   :align: center
+
+- Zoom by a Shift + right mouse button press and a mouse dragging up (zoom in) or down (zoom out). The same result is obtained only with the right button press (out of the 3D Scan), or by using Ctrl + right mouse button. The Zoom can be reset by pressing the ``R`` key on the computer keyboard (reinitialisation of the point of view).
+
+.. image:: _static/3D-zoom.png
+   :align: center
+
+- Rotation around the central axe of the 3D view by a Ctrl + left mouse button press and a mouse dragging in direction of the rotation.
+
+.. image:: _static/3D-turn.png
+   :align: center
+
+At any time, the user can take a jpeg picture of the 3D view by clicking on the picture icons at the bottom part of the windows.
+
diff --git a/Apps/VRRender/doc/source/3D_Models_Properties.rst b/Apps/VRRender/doc/source/3D_Models_Properties.rst
new file mode 100755
index 0000000..8d167b7
--- /dev/null
+++ b/Apps/VRRender/doc/source/3D_Models_Properties.rst
@@ -0,0 +1,20 @@
+3D Models Properties (show/hide organs)
+=======================================
+
+.. index:: Models Properties, Show organs, Hide organs
+
+The list of 3D modeled organs is available in the ``Organ Manager`` window that appears by selecting the ``Manage organs colors`` option in the ``3D Model`` menu, or by pressing F9 on the keyboard, or by clicking on the following button of the tool bar  :
+
+.. image:: _static/icone-F9.png
+   :align: center
+
+The ``Organ Manager`` window allows to display or hide any organ by using the check box. The ``Hide all organs`` check box allows to hide all organs.
+
+.. image:: _static/3D-show-hide-organs.png
+   :align: center
+
+It also allows to modify its opacity thanks to a slider located at the bottom part of the property window.
+
+.. image:: _static/3D-transparency.png
+   :align: center
+
diff --git a/Apps/VRRender/doc/source/3D_Resection.rst b/Apps/VRRender/doc/source/3D_Resection.rst
new file mode 100755
index 0000000..e58e68a
--- /dev/null
+++ b/Apps/VRRender/doc/source/3D_Resection.rst
@@ -0,0 +1,53 @@
+VR-Planning Resection
+=====================
+
+.. index:: Resection, cutting plane
+
+VR-Planning allows to virtually resect any anatomical or pathological 3D modelled structure and to obtain the resulting volume and linked percentage of resection. VR-Planning not only gives the opportunity to perform several resections but also to plan several surgeries. The first step will thus consist in defining the operation by clicking on the ``New Resection`` button of the tool bar. 
+
+.. image:: _static/operation.png
+   :align: center 
+
+Clicking on the ``New Resection`` button opens a window that proposes to create a new operation if no operation has been planned before. By clicking on OK, you can give an operation name (Operation_n by default). The validation with a click on the OK button then opens a new window containing the list of organs that will be possible to cut. By default, all visible organs are selected. After the selection of organs, a click on the OK button validates the operation definition and only organ [...]
+
+.. image:: _static/3D-Resect-start.png
+   :align: center
+
+At this stage of the operation definition it is possible to add a cutting plane by using the ``Take plane points`` button.
+
+.. image:: _static/Add-plan2.png
+   :align: center 
+   
+At any time, it is also possible to see the operation parameterisation by opening the ``Organ Manager`` window by a click on the organ manager button of the tool bar and by selecting the ``Operations`` tab in the window. The Organ Manager window offers the opportunity to modify selected organ properties. As we will see, it will also allow to modify cutting plane parameterization.
+
+.. image:: _static/3D-Resect-manage.png 
+   :align: center 
+   
+The resection requires the definition of one or several cutting planes. A cutting plane can be added by using the ``Take plane points`` button on the tool bar. After a click on this button, a cutting planes appears in the 3D view. The blue part will be the resecting part and the normal coloured part will be the safe part. Any cutting plane can be moved by selecting the three red control points (red square box). All control points can be selected and moved by a left button hold and mouse  [...]
+
+.. image:: _static/3D-Resect-cutting-planes.png 
+   :align: center 
+ 
+Any cutting plane separates the space into two areas: the resecting area and the safe area. It is possible to switch both areas by using the Organ Manager window. You must first select the wanted plane and then click on the ``change side`` tab to switch the resected area with the safe area as shown on the following image.
+
+.. image:: _static/3D-Resect-plane-side.png 
+   :align: center 
+ 
+VR-Planning allows to add several cutting planes for each operation. At any time a simple click on the ``Take plane points`` button of the tool bar is sufficient to add and then displace the new cutting plane that will appear in the Organ Manager window in the ``Plane`` area of the ``Operation`` tab. A resection is then finalized by a simple click on the ``Resection`` button of the tool bar.
+
+.. image:: _static/3D-Resect-First.png 
+   :align: center 
+ 
+After each resection, the ``Operation`` tab of the Organ Manager window indicates the resected part and the safe part list of organs. It is possible to change the rendering properties (colour and transparency) of each resected or safe part of organs. It is also possible to obtain the volume and percentage of both the safe and the resected part by selecting the wanted organs. Information appears then in the dedicated volume and ratio area of this window after a click on the ``Compute`` button.
+
+.. image:: _static/3D-Resect-volume.png 
+   :align: center 
+   
+One of the great improvements of VR-Planning in comparison with 3D VSP, which had been developed by IRCAD in 2001, is the opportunity to realize several resections on a same organ. It allows for instance to realize several segmentectomies on a same liver. To add a new resection, the user has to click on the ``New Resection`` button. It will then propose to choose between adding a new operation or adding a new resection. By selecting and validating a ``new resection``, a new window will a [...]
+
+.. image:: _static/3D-New-Resection.png 
+   :align: center 
+   
+The user can also choose to do a new operation, replacing the previously performed operation. To add a new resection, the user has to click on the ``New Resection`` button. It will then propose to choose between adding a new operation or adding a new resection. By selecting and validating a ``new operation``, a new window will appear allowing to change the name of the operation (by default operation_N). All interactions are then the same as for the first operation.
+
+Finally, you can change a resection or an operation by using the ``Operation`` tab of the ``Organ Manager`` window. The user has first to select the requested operation in the operation list. He/She will then be able to change a resection by adding or removing cutting planes. He/She must thus select the wanted resection in the same list and click on the ``Modify resection`` button. He/She will then be able to modify the cutting plane position, to add a cutting plane with the ``Take plane [...]
diff --git a/Apps/VRRender/doc/source/3D_Volume_Rendering.rst b/Apps/VRRender/doc/source/3D_Volume_Rendering.rst
new file mode 100755
index 0000000..f8a3c93
--- /dev/null
+++ b/Apps/VRRender/doc/source/3D_Volume_Rendering.rst
@@ -0,0 +1,37 @@
+3D Volume Rendering
+===================
+
+.. index:: 3D Volume Rendering
+
+The VR-Planning visualization mode is started by pressing the F3 shortcut. It is also possible to select this mode by clicking on the VR icon of the tool bar : 
+
+.. image:: _static/VR-01.jpg
+   :align: center
+
+VR-Planning has been developed in order to be used in a fast way. Automated transfer functions (TF) have therefore been included in the software allowing users to save time by only selecting these transfer functions. This selection is performed in the TF selector box of the ``Transfer function editor``.  
+
+.. image:: _static/VR-TF-AUTO-01.png
+   :align: center
+
+As shown for medical use, the current software includes several pre-computed CT-scan transfer functions allowing to visualize bones, kidneys, liver, lungs, muscles, skin and vessels. More automated transfer functions provide standard transfer functions currently used in other applications. It is important to notice that in VR-Planning the color table of the transfer functions is applied on the Negato1 view. It can be highly useful to have a better medical image reading. 
+
+.. image:: _static/VR-TF-AUTO-02.jpg
+   :align: center
+
+It is possible to manipulate the Volume Rendering view with the same command than with the 2D MPR view, which means by using the mouse wheel or by using the combination of the ``Shift`` key and pressing the Right button for the zoom, by pressing the Left button and moving the mouse for the rotation, and by combining the ``Shift`` key and pressing the Left button for translation. In this case, a movement in any direction creates a translation in the same direction. The reset of translatio [...]
+
+.. image:: _static/VR-manip.jpg
+   :align: center
+
+It is also possible to go directly to axial, frontal, and sagittal views by using the shortcut ``1``, ``2`` and ``3`` on the keyboard or the ``Volume Rendering`` menu by selecting ``Axial view``, ``Frontal view`` and ``Sagittal view`` options. In this same menu, the ``Snapshot rendering view`` option allows to take a picture of the Volume rendering view.
+
+Another important interest of VR-Planning is the ability to visualize only a part of the image by applying a cutting plane on the global image. Two major kinds of cutting planes are proposed. The first one is the standard axial, sagittal and frontal cutting plane. The second one is a mobile 3D cutting plane that can be placed anywhere in the volume. The selection of cutting planes (and unselection) is done with the ``Volume Rendering`` menu or via shortcuts : ``O`` for the ``View clippin [...]
+
+The clipping box provides 6 cutting planes: two axial, two frontal and two sagittal ones. The displacement of a cutting plane is then performed by pressing the left mouse button on the corresponding center sphere of this plane. When selected, the plane changes color and the sphere turns red. Displacement is then realized by moving the mouse. It is possible to remove the clipping box planes by selecting the ``Reset clipping box`` option in the ``Volume Rendering`` menu or by using the sho [...]
+
+.. image:: _static/VR-cutting.jpg
+   :align: center
+
+This cutting box can also be reduced through a kind of in and out zoom by selecting the central volume sphere by a right button pressing, and then by adding a ``Shift`` pressing and an up (zoom out) and down (zoom in) movement of the mouse. In the same way, the cutting box can be translated by selecting the central volume sphere by pressing the left button, and then by adding a ``Shift`` pressing and a movement of the mouse.
+
+Furthermore, the clipping plane provides one cutting plane that can be moved thanks to the displacement and orientation of a vector that is normal in this cutting plane. The displacement is then performed by pressing the left mouse button on one of the two extremities of the vector. When selected, the vector turns red. Displacement is then realized by moving the mouse. When the cutting plane cuts the box, a red intersection appears. It is then possible to directly move the plane into the [...]
diff --git a/Apps/VRRender/doc/source/Acknowledgment.rst b/Apps/VRRender/doc/source/Acknowledgment.rst
new file mode 100755
index 0000000..89a1ae1
--- /dev/null
+++ b/Apps/VRRender/doc/source/Acknowledgment.rst
@@ -0,0 +1,136 @@
+
+.. _acknowledgment:
+
+Acknowledgment
+==============
+
+.. index:: Acknowledgment, open source, European, ICT, ehealth
+
+.. |EQC| replace:: European Commission
+.. _EQC: http://ec.europa.eu/information_society/activities/health
+
+.. _PASSPORT: http://www.passport-liver.eu/
+
+
+
+
+.. |boost|      image:: _static/acknowledgment/boost.png
+                :align: middle
+.. |cfitsio|    image:: _static/acknowledgment/cfitsio.png
+                :align: middle
+.. |dcmtk|      image:: _static/acknowledgment/dcmtk.png
+                :align: middle
+.. |fits2itk|   image:: _static/acknowledgment/fits2itk.png
+                :align: middle
+.. |itk|        image:: _static/acknowledgment/itk.png
+                :align: middle
+.. |vtk|        image:: _static/acknowledgment/vtk.png
+                :align: middle
+.. |libjpeg|    image:: _static/acknowledgment/libjpeg.png
+                :align: middle
+.. |libpng|     image:: _static/acknowledgment/libpng.png
+                :align: middle
+.. |libtiff|    image:: _static/acknowledgment/libtiff.png
+                :align: middle
+.. |libxml2|    image:: _static/acknowledgment/libxml2.png
+                :align: middle
+.. |log4cxx|    image:: _static/acknowledgment/log4cxx.png
+                :align: middle
+.. |opengl|     image:: _static/acknowledgment/opengl.png
+                :align: middle
+.. |vtkinria3d| image:: _static/acknowledgment/vtkinria3d.png
+                :align: middle
+.. |python|     image:: _static/acknowledgment/python.png
+                :align: middle
+.. |sphinx|     image:: _static/acknowledgment/sphinx.png
+                :align: middle
+.. |wx|         image:: _static/acknowledgment/wx.png
+                :align: middle
+.. |zlib|       image:: _static/acknowledgment/zlib.png
+                :align: middle
+.. |bzip2|      image:: _static/acknowledgment/bzip2.png
+                :align: middle
+.. |gdcm|       image:: _static/acknowledgment/gdcm.png
+                :align: middle
+
+
+.. |doxygen|    image:: _static/acknowledgment/doxygen.png
+                :align: middle
+.. |eclipse|    image:: _static/acknowledgment/eclipse.png
+                :align: middle
+.. |vim|        image:: _static/acknowledgment/vim.png
+                :align: middle
+.. |fsf|        image:: _static/acknowledgment/fsf.png
+                :align: middle
+.. |gcc|        image:: _static/acknowledgment/gcc.png
+                :align: middle
+.. |scons|      image:: _static/acknowledgment/scons.png
+                :align: middle
+.. |visualc|    image:: _static/acknowledgment/visualc.png
+                :align: middle
+.. |wix|        image:: _static/acknowledgment/wix.png
+                :align: middle
+
+
+
+
+
+
+First of all, VR-Planning has partly been funded by the |EQC|_ within the ICT-2007.5.3 research project PASSPORT_.
+
+
+
+
+.. image:: _static/ehealth.png
+   :align: center
+
+VR-Planning  has been developed by Vincent Agnus, Arnaud Charnoz, Emilie Harquel, Alexandre Hostettler, Pascal Monnier, Johan Moreau, Nicolas Philipps and Julien Waechter, the project being managed by Prof. Luc Soler. Illustrations and logos have been realized by Juan Hernandez. Documentation and translation has been realized by Pamela Lhote and Luc Soler.
+
+The test and validation session has been performed by Mourad Bouhadjar, Anne-Blandine Osswald, and Prof. Luc Soler. 3D gallery and patient modeling have been realized by Mourad Bouhadjar, Anne-Blandine Osswald and Prof. Luc Soler.
+
+The website development has been supervised by the Websurg team under the management of Thomas Parent.
+
+This sofware has been tested at the University Hospital of Strasbourg. We would like to thank for their help the medical staff: 
+- Endocrine and Digestive Surgical team : Prof. Jacques Marescaux, Prof. Didier Mutter, Prof. Bernard Dallemagne, Prof. Luc Soler, Dr. Michel Vix,
+
+VR-Planning has been built on the following projects :
+
+.. list-table::
+
+   * - |boost|
+     - |cfitsio|
+     - |dcmtk|
+     - |fits2itk|
+     - |itk|
+     - |vtk|
+     - |vtkinria3d|
+   * - |libjpeg|
+     - |libpng|
+     - |libtiff|
+     - |libxml2|
+     - |log4cxx|
+     - |opengl|
+     - |wx|
+   * -
+     - |python|
+     - |sphinx|
+     - |zlib|
+     - |bzip2|
+     - |gdcm|
+     -
+
+
+VR-Planning has been developed with the following software :
+
+.. list-table::
+
+   * - |doxygen|
+     - |eclipse|
+     - |vim|
+     - |fsf|
+   * - |gcc|
+     - |scons|
+     - |wix|
+     - |visualc|
+
+
diff --git a/Apps/VRRender/doc/source/Basic_Image_Filtering.rst b/Apps/VRRender/doc/source/Basic_Image_Filtering.rst
new file mode 100755
index 0000000..0e98072
--- /dev/null
+++ b/Apps/VRRender/doc/source/Basic_Image_Filtering.rst
@@ -0,0 +1,12 @@
+VR-Planning basic image filtering
+===================================
+
+.. index:: filtering
+
+Several filters have been added in VR-Planning allowing to basically modify a selected image. When a filter is applied, a copy of the selected image is created and added in the ``series selector``. To distinguish the resulting image from the native image, the selector indicates a set of information allowing to precisely know the origin of the image and the parameter of the filter that has been used. This information is located in the comment area and is presented as follows: In : Operato [...]
+
+.. image:: _static/Negato-filter.png
+   :align: center
+
+In VR-Planning, we have decided to limit the set of filters to three basic operators: Image Rotation (that allows a +/- 90 degrees rotation in axial, saggital or frontal axe), Improve image 2D (a 1 pixel radius 2D median filter), and Improve image 3D (a 1 voxel radius 3D median filter).
+
diff --git a/Apps/VRRender/doc/source/Export_Data.rst b/Apps/VRRender/doc/source/Export_Data.rst
new file mode 100755
index 0000000..084020d
--- /dev/null
+++ b/Apps/VRRender/doc/source/Export_Data.rst
@@ -0,0 +1,8 @@
+Export and Close data
+=====================
+
+.. index:: Export Data
+
+The file menu contains two useful export options. The first ``export selected patient`` option allows to record a selected patient in a VR-Planning format. It will include the distance measurement, the landmark positioning, the transfer function of the direct volume rendering, and the planned operation integratin the cutting planes position. The second ``export slices (jpg)`` option allows to record, in a selected folder, all DICOM slices of the selected image in a jpeg format.
+
+The file menu also contains two options allowing to close opened patient data. The ``Close all patients`` option will close all patients data and the ``Close selected image`` will only close the image seleted in the ``series selector`` window.
diff --git a/Apps/VRRender/doc/source/Help_menu.rst b/Apps/VRRender/doc/source/Help_menu.rst
new file mode 100755
index 0000000..ca8ee7b
--- /dev/null
+++ b/Apps/VRRender/doc/source/Help_menu.rst
@@ -0,0 +1,12 @@
+Help Menu
+=========
+
+.. index:: Help
+
+VR-Planning include a ``Help`` menu including the VR-Planning documentation in an interactive window. All information contained in this document is thus available in this interactive help menu. Among this information, the list of shortcuts is an important help.
+
+Moreover, the ``Help`` menu contain several other useful options. The ``Edit Auto Update`` option, opens a window allowing to select (unselect) an automatic check of the VR-Planning software update. It also allows to select (unselect) the software statistic computation that will allow us to improve VR-Planning. In opposite, the ``Check update`` option allows to manually check the VR-Planning software update. 
+
+*For any support request do not hesitate to contact : rd-support-vrplanning at ircad.fr*
+
+However, do not forget that VR-Planning can be used under a specific user license agreement. By using the VR-Planning, you accept the terms and conditions described in the :ref:`licence` chapter. VR-Planning *NOT* being FDA approved and having *NO* CE Mark, it comes with absolutely *NO Warranty*.  
diff --git a/Apps/VRRender/doc/source/Introduction.rst b/Apps/VRRender/doc/source/Introduction.rst
new file mode 100755
index 0000000..065bd3e
--- /dev/null
+++ b/Apps/VRRender/doc/source/Introduction.rst
@@ -0,0 +1,9 @@
+Introduction
+============
+
+.. index:: IRCAD, Image Viewer, VR-Render
+
+
+VR-Planning is an IRCAD Surgical Planning Software working on Windows, Linux and MacOS. It allows to visualize 3D models of patients reconstucted from their DICOM Image by IRCAD R&D team, and also to virtually cut these models by providing an automatic volume and pourcentage computation. Three kinds of visualization are possible : 3D model visualization, 2D Dicom visualization and 3D Dicom direct volume rendering. You can also use VR-Planning to visualize your own DICOM medical images of [...]
+
+
diff --git a/Apps/VRRender/doc/source/Licence.rst b/Apps/VRRender/doc/source/Licence.rst
new file mode 100755
index 0000000..aa08f46
--- /dev/null
+++ b/Apps/VRRender/doc/source/Licence.rst
@@ -0,0 +1,23 @@
+
+.. _licence:
+
+Licence
+=======
+
+.. index:: Licence
+
+By using the VR-Planning software, you accept the terms and conditions described hereinafter. If you do not accept them, you can not use this software. IRCAD grants you a non-exclusive license to use this software. 
+
+EXCLUSION OF GUARANTEES : YOU ACKNOWLEDGE THAT IRCAD HAS NOT GIVEN YOU ANY EXPLICIT OR IMPLICIT GUARANTEE REGARDING THE VR-Planning SOFTWARE, ITS DATA MEDIUM AND ALL THE INCLUDED DOCUMENTS AND INFORMATION. YOU FURTHER ACKNOWLEDGE THAT THE SOFTWARE HAS BEEN PROVIDED  **IN ITS PRESENT STATE** WITHOUT ANY GUARANTEE OF WHATEVER KIND. IRCAD GIVES NO GUARANTEE, EXPLICIT OR TACIT, SPECIFICALLY REGARDING THE COMPLIANCE WITH A NEED OF A PARTICULAR USE, MERCHANTABLE STATE OR QUALITY OR NON-VIOLATI [...]
+
+LIABILITY LIMITATION : UNDER NO CIRCUMSTANCES IRCAD WILL BE HELD LIABLE FOR THE DAMAGES THAT MIGHT BE CAUSED THROUGH THE USE OF THE VR-Planning SOFTWARE, LOSS OF USAGE OR INTERRUPTION OF ACTIVITY OR FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSECUTIVE DAMAGE OF ANY KIND, SPECIFICALLY ANY LOSS OF BENEFIT OR LOSS OF PROFIT, NO MATTER WHAT KIND OF ACTION UNDERTAKEN, I.E. CONTRACTUAL, WRONGFUL (INCULDING IN CASE OF NEGLIGENCE), UNDER THE STRICT LIABILITY OF THE PRODUCT OR OTHER, REGARDLESS IF IR [...]
+
+VR-Planning uses a set of Open-Source libraries delivered with it   :ref:`acknowledgment`.
+
+.. |danger| image:: _static/danger.png
+            :align: middle
+
+.. warning::
+
+   |danger| This software is *NOT FDA* approved and has *NO CE mark*
+
diff --git a/Apps/VRRender/doc/source/Minimal_config.rst b/Apps/VRRender/doc/source/Minimal_config.rst
new file mode 100755
index 0000000..95a896e
--- /dev/null
+++ b/Apps/VRRender/doc/source/Minimal_config.rst
@@ -0,0 +1,31 @@
+Minimal Configuration
+=====================
+
+.. index:: Minimal Configuration, OS
+
+VR-Planning supports the following operating systems :
+
+
+
+.. |ms|         image:: _static/acknowledgment/ms.png
+                :align: middle
+.. |apple|      image:: _static/acknowledgment/apple.png
+                :align: middle
+.. |linux|      image:: _static/acknowledgment/linux.png
+                :align: middle
+.. |linux-64|   image:: _static/acknowledgment/linux-64.png
+                :align: middle
+
+
+.. list-table::
+
+   * - |ms|        
+..   - |apple|     
+..   - |linux|     
+..   - |linux-64|  
+
+
+.. To works, VR-Planning requires a minimum of 2 Go (Mac OS, Linux, windows NT) or 3 Go (Vista/7) of RAM. The 3D rendering requires a 3D graphics card working under OpenGL.
+
+To works, VR-Planning requires a minimum of 2 Go (windows XP) or 3 Go (Vista/7) of RAM. The 3D rendering requires a 3D graphics card supporting OpenGL.
+
diff --git a/Apps/VRRender/doc/source/Read_and_Select_Data.rst b/Apps/VRRender/doc/source/Read_and_Select_Data.rst
new file mode 100755
index 0000000..1191f37
--- /dev/null
+++ b/Apps/VRRender/doc/source/Read_and_Select_Data.rst
@@ -0,0 +1,26 @@
+Read and select data 
+====================
+
+.. index:: Read Data, Select Data
+
+
+
+It is possible to load recorded patient by using the ``Import`` functions in the ``File`` menu. Three formats are available for reading : DICOM, MFO (VR-Anat IRCAD Format) and FXZ (VR-Planning IRCAD Format). The Dicom format is available through the first button of the tool bar, the two IRCAD formats being available from the second button :
+
+.. image:: _static/openDicom_openFxz.png
+   :align: center
+
+
+A left click on the first icon, or a selection of the ``import DICOM`` option of the ``File`` menu allows to start the selection of a folder containing all DICOM slices of one or several medical images of the patient. The DICOM reader is the latest ITK version developed by Kitware and used by a large set of medical software applications.
+
+A left click on this icon, or a selection of the ``import data`` option of the ``File`` menu allows to load 3D modeled patient or exported DICOM images in two IRCAD format. The MFO format, as DICOM format, is a folder containing the 3D modelled patient data resulting of the VR-Anat software use. The Fxz is the specific VR-Planning format allowing to include in only one file one or several medical images and linked 3D models of one or several patients (see export data). This format will b [...]
+
+When a patient is loaded, it is possible to visualize (or hide) the ``series selector`` windows containing the parameters of the medical image or the patient information by clicking on the ``info`` button on the tool bar :
+
+.. image:: _static/View-INFO.png
+   :align: center
+
+The ``series selector`` window contains the name of the patient, the kind of modality (Ct-scan, MRI, etc…), the acquisition date, the image size, the voxel size and the comments. By clicking on the up left window icon, the ``property`` window is opened (or closed). It contains the patient’s birthdate, his gender and the hospital name. When data are anonymous, real patient information are erased and replaced by generic data. 
+
+.. image:: _static/info-patient.png
+   :align: center
diff --git a/Apps/VRRender/doc/source/Shortcuts.rst b/Apps/VRRender/doc/source/Shortcuts.rst
new file mode 100755
index 0000000..95c4a3e
--- /dev/null
+++ b/Apps/VRRender/doc/source/Shortcuts.rst
@@ -0,0 +1,138 @@
+Shortcuts
+=========
+
+.. index:: Shortcut, Shortcuts
+
+
+Global shortcuts
+----------------
+
+========== ================================
+ Shortcut   Action
+========== ================================
+ Suppr      Erase selected image
+ F1         3D Model view
+ F2         2D Medical Image view
+ F3         3D Volume rendering view
+ F9         Manage organs colors
+ F12        HShow/Hide patient information
+========== ================================
+
+
+Global 3D manipulation (in 3D and Volume Rendering view only)
+-------------------------------------------------------------
+
+=== ===============
+ 1    axial view
+ 2   frontal view
+ 3   sagittal view
+=== ===============
+
+
+
+
+Global 3D-2D manipulation
+-------------------------
+
+MD = Mouse drag which mean move the mouse by letting the selected button pressed.
+
+.. list-table::
+
+   * - shift + left mouse button + MD
+
+       shift + middle mouse button + MD
+
+       ctrl + middle mouse button + MD
+     - Translation
+   * - mouse wheel (up or down)
+
+       shift + Right mouse button + MD
+
+       ctrl + Right mouse button + MD
+     - Zoom
+   * - R
+     - Reset camera
+
+
+
+
+
+Specific manipulation for medical image (2D or 3D)
+--------------------------------------------------
+
+.. list-table::
+
+   * - left/right key
+
+       shift + mouse wheel
+     - modify current slice  (after any click in selected slice)
+   * - T/Y
+     - modify axial slice
+   * - G/H
+     - modify frontal slice
+   * - B/N
+     - modify sagittal slice
+   * - shift + R
+     - reset window/level
+   * - left mouse button
+     - show pixel values
+   * - middle mouse button
+     - synchronize all views
+   * - right mouse button
+     - modify level and window
+   * - ctrl + L
+     - add a landmark on the last selected voxel
+   * - ctrl + F
+     - synchronize all views on selected landmark
+   * - ctrl + V
+     - hide/show landmarks
+   * - right mouse click
+     - remove distance/landmark
+
+
+
+Specific manipulation of the oblique plane
+------------------------------------------
+
+======================================================= ========================================================
+ middle mouse button                                     in center of plane : plane translation from his normal
+
+                                                         in corner : rotation in the plane
+
+                                                         in border : rotation of the plane around his normal
+
+ ctrl + middle mouse button                              in center of plane : plane translation from his normal
+
+                                                         in corner : translation of the edge around the corner
+
+                                                         in border : translation of the edge
+
+ shift + middle mouse button                             reslice plane (increase/decrease plane size)
+======================================================= ========================================================
+
+
+Specific manipulation of Volume rendering clipping box
+------------------------------------------------------
+
+
+========== ===================================
+ O          show/hide clipping box
+ Ctrl + O   reset clipping box
+ T/Y        clipping box axial translation
+ G/H        clipping box frontal translation
+ B/N        clipping box sagittal translation
+ P          show/hide clipping plane
+ Ctrl + P   reset clipping plane
+========== ===================================
+
+
+Specific manipulation of Transfer function editor
+-------------------------------------------------
+
+========================= ==================
+ left mouse button         select points
+ Ctrl + left mouse click   new point
+ double left mouse click   edit point color
+ right mouse click         remove point
+========================= ==================
+
diff --git a/Apps/VRRender/doc/source/Start_VR_Planning.rst b/Apps/VRRender/doc/source/Start_VR_Planning.rst
new file mode 100755
index 0000000..32c072f
--- /dev/null
+++ b/Apps/VRRender/doc/source/Start_VR_Planning.rst
@@ -0,0 +1,17 @@
+Start VR-Planning
+===================
+
+.. index:: Start
+
+
+
+VR-Planning has been optimized for surgeon use. After installation, it will thus automatically recognize the IRCAD file format. By selecting the 3D clinical case (some 3D cases are freely available on www.websurg.com), VR-Planning will automatically start. However, you can also start VR-Planning for your own DICOM data or to select several IRCAD 3D modeled patients. IRCAD 3D modeled data are recognized and appear with the following VR-Planning icon :
+
+.. image:: _static/VRPlanning.png
+   :align: center
+
+When VR-Planning is started by selecting a patient, the 3D model visualization window appears as shown on the following example.
+
+.. image:: _static/3D-Planning-View-00.png
+   :align: center
+
diff --git a/Apps/VRRender/doc/source/Tool_bar.rst b/Apps/VRRender/doc/source/Tool_bar.rst
new file mode 100755
index 0000000..f2194dc
--- /dev/null
+++ b/Apps/VRRender/doc/source/Tool_bar.rst
@@ -0,0 +1,11 @@
+Tool Bar
+========
+
+.. index:: Tool Bar
+
+
+
+The easiest way to start VR-Planning is to use its tool bar. It contains respectively the following most used functions : Read Dicom image, read 3D modeled patient, 3D view, 2D scanner view, Direct volume rendering view, show/hide data information, add a 3D landmark, find a 3D landmark, hide/show 3D landmarks, show 3D organs list and properties, Axial view, Frontal view and Sagittal view, New operation, Add cutting plane, Compute Resection. All these functions will be explained in the fo [...]
+
+.. image:: _static/Tool-bar-planning.png
+   :align: center
diff --git a/Apps/VRRender/doc/source/Transfert_function.rst b/Apps/VRRender/doc/source/Transfert_function.rst
new file mode 100755
index 0000000..67af1e7
--- /dev/null
+++ b/Apps/VRRender/doc/source/Transfert_function.rst
@@ -0,0 +1,31 @@
+Transfer Function Editor
+========================
+
+.. index:: Transfer Function, TF Editor
+
+VR-Planning has been developed in order to edit transfer functions. Seven buttons are thus available :
+- The ``Delete`` button (red cross) removes a selected transfer function in the list,
+- The ``New`` button (white paper) defines a new transfer function in the list,
+- The ``Reinitialize`` button (green arrow) reinitializes the native transfer functions,
+- The ``Rename`` button (A) allows to change the name of a selected transfer function. 
+- The ``load`` (folder) and ``save`` (bleu arrow) buttons allow to load or save a transfer function in a selected location on the hard drive or on the network. 
+
+When a new function is created, this function is set by default with the same parameter as the last selected one. It is possible and easy to change any transfer function (new or old) by using the transfer function editor. All TF are set by control points that can be removed by a simple right button click on the selected control point in the transfer function.
+
+.. image:: _static/VR-TF-01.jpg
+   :align: center
+
+Addition of a new control point is done by pressing the control keyboard button and by clicking on the left mouse button on the transfer function. It is also possible to change the color of any control point by a double left button click on it. It then opens a color tab allowing to select the new requested color. The transparency and grey level of each control point can be modified by moving it by pressing the left mouse button and displacing it. These values can also be modified more pr [...]
+
+.. image:: _static/VR-TF-02.jpg
+   :align: center
+
+It is finally possible to easily modify the transfert function by using the windowing parameterization techniques. This method allow to fastly adapt the pre-computed CT-scan transfer functions to the specificity of the selected image. It is thus possible to make a translation of the Transfert function in order to reduce the grey level value (Mouse Right button Pression and displacement from up to down), or in opposite in order to increase the grey level value (Mouse Right button Pression [...]
+
+.. image:: _static/VR-TF-MPR-01.jpg
+   :align: center
+
+It is also possible to make a resizing of the Transfert function in order to reduce the grey level window (Mouse Right button Pression and displacement from right to left), or in opposite in order to increase the grey level window (Mouse Right button Pression and displacement from left to right) (see next image).
+
+.. image:: _static/VR-TF-MPR-02.jpg
+   :align: center
diff --git a/Apps/VRRender/doc/source/What_is_Volume_Rendering.rst b/Apps/VRRender/doc/source/What_is_Volume_Rendering.rst
new file mode 100755
index 0000000..8c20e45
--- /dev/null
+++ b/Apps/VRRender/doc/source/What_is_Volume_Rendering.rst
@@ -0,0 +1,15 @@
+What is direct Volume Rendering ? 
+=================================
+
+.. index:: Volume Rendering 
+
+Volume Rendering (VR) is a well known visualization method for the 3D visualization of medical images. It is based on transparency and coloration of voxels. Indeed, a medical image is composed of a set of voxels, each voxel having a grey level that represents a physical property of the tissue (absorption of X ray in case of CT for instance). A voxel being a pixel in 3D, it is a square if slice thickness = pixel size or a rectangular box if slice thickness is different from the pixel size [...]
+
+.. image:: _static/VR-DEF.jpg
+   :align: center
+
+The remaining problem is thus to select voxels that we want to see, and voxels that have to be put in transparency. Such a selection, called ``segmentation`` in computer sciences and consisting in delineating anatomical or pathological structures, is complex and time consuming. Another solution is to automatically replace all grey levels by colors, and add for each grey level an associated transparency level. This transformation is summarized in a transfer function that gives for each gr [...]
+
+.. image:: _static/VR-TF-DEF.jpg
+   :align: center
+
diff --git a/Apps/VRRender/doc/source/Windows_Installation.rst b/Apps/VRRender/doc/source/Windows_Installation.rst
new file mode 100755
index 0000000..858f252
--- /dev/null
+++ b/Apps/VRRender/doc/source/Windows_Installation.rst
@@ -0,0 +1,16 @@
+Windows Installation
+====================
+
+.. index:: Installation
+
+
+Installing VR-Planning is easy. Under Windows, the automatic install file
+``VR-Planning_n.msi`` starts with a double click on its icon. It starts a 5 step
+process where you will have to ``accept the terms in the license agreement``.
+It will further be possible to select the folder where the software will be
+installed. Indeed, the default folder can be avoid if you do not have the
+access right. In such a case, select a personal folder to install VR-Planning.
+After the final validation window, the setup software then installs VR-Planning
+on your computer and its icons on your desktop and it asks you for a last click
+on the finish button. The installation is completed.
+
diff --git a/Apps/VRRender/doc/source/_static/3D-New-Resection.png b/Apps/VRRender/doc/source/_static/3D-New-Resection.png
new file mode 100755
index 0000000..e510c23
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-New-Resection.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Planning-View-00.png b/Apps/VRRender/doc/source/_static/3D-Planning-View-00.png
new file mode 100755
index 0000000..f67ebed
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Planning-View-00.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-First.png b/Apps/VRRender/doc/source/_static/3D-Resect-First.png
new file mode 100755
index 0000000..69dd59e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Resect-First.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-cutting-planes.png b/Apps/VRRender/doc/source/_static/3D-Resect-cutting-planes.png
new file mode 100755
index 0000000..633649e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Resect-cutting-planes.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-manage.png b/Apps/VRRender/doc/source/_static/3D-Resect-manage.png
new file mode 100755
index 0000000..475a409
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Resect-manage.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-plane-side.png b/Apps/VRRender/doc/source/_static/3D-Resect-plane-side.png
new file mode 100755
index 0000000..3f19da4
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Resect-plane-side.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-start.png b/Apps/VRRender/doc/source/_static/3D-Resect-start.png
new file mode 100755
index 0000000..322ccb7
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Resect-start.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-Resect-volume.png b/Apps/VRRender/doc/source/_static/3D-Resect-volume.png
new file mode 100755
index 0000000..fecb5e5
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-Resect-volume.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-distance.png b/Apps/VRRender/doc/source/_static/3D-distance.png
new file mode 100755
index 0000000..815bf3c
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-distance.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-landmark.png b/Apps/VRRender/doc/source/_static/3D-landmark.png
new file mode 100755
index 0000000..635fa12
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-landmark.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-rotate.png b/Apps/VRRender/doc/source/_static/3D-rotate.png
new file mode 100755
index 0000000..f628507
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-rotate.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-scan-1-3.png b/Apps/VRRender/doc/source/_static/3D-scan-1-3.png
new file mode 100755
index 0000000..3e68e07
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-scan-1-3.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-scan-GL-value.png b/Apps/VRRender/doc/source/_static/3D-scan-GL-value.png
new file mode 100755
index 0000000..4624ef5
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-scan-GL-value.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-scan-ax-front-sag.png b/Apps/VRRender/doc/source/_static/3D-scan-ax-front-sag.png
new file mode 100755
index 0000000..eccdea6
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-scan-ax-front-sag.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-scan-contrast.png b/Apps/VRRender/doc/source/_static/3D-scan-contrast.png
new file mode 100755
index 0000000..09897bd
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-scan-contrast.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-show-hide-organs.png b/Apps/VRRender/doc/source/_static/3D-show-hide-organs.png
new file mode 100755
index 0000000..6e2a27d
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-show-hide-organs.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-show-hide-scan.png b/Apps/VRRender/doc/source/_static/3D-show-hide-scan.png
new file mode 100755
index 0000000..5aa38c1
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-show-hide-scan.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-translation.png b/Apps/VRRender/doc/source/_static/3D-translation.png
new file mode 100755
index 0000000..ddae1ef
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-translation.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-transparency.png b/Apps/VRRender/doc/source/_static/3D-transparency.png
new file mode 100755
index 0000000..20054ce
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-transparency.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-turn.png b/Apps/VRRender/doc/source/_static/3D-turn.png
new file mode 100755
index 0000000..6af3a15
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-turn.png differ
diff --git a/Apps/VRRender/doc/source/_static/3D-zoom.png b/Apps/VRRender/doc/source/_static/3D-zoom.png
new file mode 100755
index 0000000..b1543c1
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/3D-zoom.png differ
diff --git a/Apps/VRRender/doc/source/_static/Add-Find-View-landmark.png b/Apps/VRRender/doc/source/_static/Add-Find-View-landmark.png
new file mode 100755
index 0000000..194b1b1
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Add-Find-View-landmark.png differ
diff --git a/Apps/VRRender/doc/source/_static/Add-landmark.png b/Apps/VRRender/doc/source/_static/Add-landmark.png
new file mode 100755
index 0000000..33a4b2f
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Add-landmark.png differ
diff --git a/Apps/VRRender/doc/source/_static/Add-plan1.png b/Apps/VRRender/doc/source/_static/Add-plan1.png
new file mode 100755
index 0000000..d78bbae
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Add-plan1.png differ
diff --git a/Apps/VRRender/doc/source/_static/Add-plan2.png b/Apps/VRRender/doc/source/_static/Add-plan2.png
new file mode 100755
index 0000000..b9d130b
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Add-plan2.png differ
diff --git a/Apps/VRRender/doc/source/_static/AddTool.png b/Apps/VRRender/doc/source/_static/AddTool.png
new file mode 100755
index 0000000..5e4bbc2
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/AddTool.png differ
diff --git a/Apps/VRRender/doc/source/_static/Find-landmark.png b/Apps/VRRender/doc/source/_static/Find-landmark.png
new file mode 100755
index 0000000..4071446
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Find-landmark.png differ
diff --git a/Apps/VRRender/doc/source/_static/Mode-VR.png b/Apps/VRRender/doc/source/_static/Mode-VR.png
new file mode 100755
index 0000000..5263d21
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Mode-VR.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-01.png b/Apps/VRRender/doc/source/_static/Negato-01.png
new file mode 100755
index 0000000..00444e1
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-01.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-Distance.png b/Apps/VRRender/doc/source/_static/Negato-Distance.png
new file mode 100755
index 0000000..f7dcd28
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-Distance.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-Zoom.png b/Apps/VRRender/doc/source/_static/Negato-Zoom.png
new file mode 100755
index 0000000..8e6514f
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-Zoom.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-axes.png b/Apps/VRRender/doc/source/_static/Negato-axes.png
new file mode 100755
index 0000000..ab032fc
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-axes.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-contrast.png b/Apps/VRRender/doc/source/_static/Negato-contrast.png
new file mode 100755
index 0000000..3726356
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-contrast.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-filter.png b/Apps/VRRender/doc/source/_static/Negato-filter.png
new file mode 100755
index 0000000..f89c687
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-filter.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-info.png b/Apps/VRRender/doc/source/_static/Negato-info.png
new file mode 100755
index 0000000..1e1440c
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-info.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-landmarks.png b/Apps/VRRender/doc/source/_static/Negato-landmarks.png
new file mode 100755
index 0000000..0bd0219
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-landmarks.png differ
diff --git a/Apps/VRRender/doc/source/_static/Negato-translate.png b/Apps/VRRender/doc/source/_static/Negato-translate.png
new file mode 100755
index 0000000..abaf0a2
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Negato-translate.png differ
diff --git a/Apps/VRRender/doc/source/_static/Resection.png b/Apps/VRRender/doc/source/_static/Resection.png
new file mode 100755
index 0000000..8e2fd63
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Resection.png differ
diff --git a/Apps/VRRender/doc/source/_static/Resection2.png b/Apps/VRRender/doc/source/_static/Resection2.png
new file mode 100755
index 0000000..e6a1249
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Resection2.png differ
diff --git a/Apps/VRRender/doc/source/_static/Tool-bar-planning.png b/Apps/VRRender/doc/source/_static/Tool-bar-planning.png
new file mode 100755
index 0000000..267fe1f
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/Tool-bar-planning.png differ
diff --git a/Apps/VRRender/doc/source/_static/VR-01.jpg b/Apps/VRRender/doc/source/_static/VR-01.jpg
new file mode 100755
index 0000000..8f94f80
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-01.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-DEF.jpg b/Apps/VRRender/doc/source/_static/VR-DEF.jpg
new file mode 100755
index 0000000..7147434
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-DEF.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-01.jpg b/Apps/VRRender/doc/source/_static/VR-TF-01.jpg
new file mode 100755
index 0000000..03f94e6
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-01.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-02.jpg b/Apps/VRRender/doc/source/_static/VR-TF-02.jpg
new file mode 100755
index 0000000..1090a38
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-02.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-AUTO-01.png b/Apps/VRRender/doc/source/_static/VR-TF-AUTO-01.png
new file mode 100755
index 0000000..79ccb40
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-AUTO-01.png differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.jpg b/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.jpg
new file mode 100755
index 0000000..12cc9f3
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.png b/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.png
new file mode 100755
index 0000000..53363bc
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-AUTO-02.png differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg b/Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg
new file mode 100755
index 0000000..949a2e9
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-DEF.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-MPR-01.jpg b/Apps/VRRender/doc/source/_static/VR-TF-MPR-01.jpg
new file mode 100755
index 0000000..aed00c9
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-MPR-01.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-TF-MPR-02.jpg b/Apps/VRRender/doc/source/_static/VR-TF-MPR-02.jpg
new file mode 100755
index 0000000..552421b
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-TF-MPR-02.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-cutting.jpg b/Apps/VRRender/doc/source/_static/VR-cutting.jpg
new file mode 100755
index 0000000..805ed33
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-cutting.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR-manip.jpg b/Apps/VRRender/doc/source/_static/VR-manip.jpg
new file mode 100755
index 0000000..f450e5c
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR-manip.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/VR.png b/Apps/VRRender/doc/source/_static/VR.png
new file mode 100755
index 0000000..cdb175d
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR.png differ
diff --git a/Apps/VRRender/doc/source/_static/VRPlanning.png b/Apps/VRRender/doc/source/_static/VRPlanning.png
new file mode 100755
index 0000000..39e87cb
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VRPlanning.png differ
diff --git a/Apps/VRRender/doc/source/_static/VR_WLE_html.png b/Apps/VRRender/doc/source/_static/VR_WLE_html.png
new file mode 100755
index 0000000..243ea53
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR_WLE_html.png differ
diff --git a/Apps/VRRender/doc/source/_static/VR_html.png b/Apps/VRRender/doc/source/_static/VR_html.png
new file mode 100755
index 0000000..947a0ab
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/VR_html.png differ
diff --git a/Apps/VRRender/doc/source/_static/View-INFO.png b/Apps/VRRender/doc/source/_static/View-INFO.png
new file mode 100755
index 0000000..058c290
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/View-INFO.png differ
diff --git a/Apps/VRRender/doc/source/_static/View-landmark.png b/Apps/VRRender/doc/source/_static/View-landmark.png
new file mode 100755
index 0000000..1951d6f
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/View-landmark.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/apple.png b/Apps/VRRender/doc/source/_static/acknowledgment/apple.png
new file mode 100755
index 0000000..b27ea73
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/apple.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/boost.png b/Apps/VRRender/doc/source/_static/acknowledgment/boost.png
new file mode 100755
index 0000000..9105c39
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/boost.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/bzip2.png b/Apps/VRRender/doc/source/_static/acknowledgment/bzip2.png
new file mode 100755
index 0000000..de77173
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/bzip2.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/cfitsio.png b/Apps/VRRender/doc/source/_static/acknowledgment/cfitsio.png
new file mode 100755
index 0000000..035502d
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/cfitsio.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/dcmtk.png b/Apps/VRRender/doc/source/_static/acknowledgment/dcmtk.png
new file mode 100755
index 0000000..cf317a8
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/dcmtk.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/doxygen.png b/Apps/VRRender/doc/source/_static/acknowledgment/doxygen.png
new file mode 100755
index 0000000..98d9a50
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/doxygen.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/eclipse.png b/Apps/VRRender/doc/source/_static/acknowledgment/eclipse.png
new file mode 100755
index 0000000..6208433
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/eclipse.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/ehealth.png b/Apps/VRRender/doc/source/_static/acknowledgment/ehealth.png
new file mode 100755
index 0000000..aba2767
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/ehealth.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/fits2itk.png b/Apps/VRRender/doc/source/_static/acknowledgment/fits2itk.png
new file mode 100755
index 0000000..479bd0d
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/fits2itk.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/fsf.png b/Apps/VRRender/doc/source/_static/acknowledgment/fsf.png
new file mode 100755
index 0000000..5fa3a86
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/fsf.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/gcc.png b/Apps/VRRender/doc/source/_static/acknowledgment/gcc.png
new file mode 100755
index 0000000..897baf7
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/gcc.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/gdcm.png b/Apps/VRRender/doc/source/_static/acknowledgment/gdcm.png
new file mode 100755
index 0000000..a066e94
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/gdcm.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/itk.png b/Apps/VRRender/doc/source/_static/acknowledgment/itk.png
new file mode 100755
index 0000000..726110a
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/itk.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libjpeg.png b/Apps/VRRender/doc/source/_static/acknowledgment/libjpeg.png
new file mode 100755
index 0000000..4449d61
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/libjpeg.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libpng.png b/Apps/VRRender/doc/source/_static/acknowledgment/libpng.png
new file mode 100755
index 0000000..9f197cc
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/libpng.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libtiff.png b/Apps/VRRender/doc/source/_static/acknowledgment/libtiff.png
new file mode 100755
index 0000000..e0c0451
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/libtiff.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/libxml2.png b/Apps/VRRender/doc/source/_static/acknowledgment/libxml2.png
new file mode 100755
index 0000000..9f2073b
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/libxml2.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/linux-64.png b/Apps/VRRender/doc/source/_static/acknowledgment/linux-64.png
new file mode 100755
index 0000000..1a2bfbc
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/linux-64.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/linux.png b/Apps/VRRender/doc/source/_static/acknowledgment/linux.png
new file mode 100755
index 0000000..49bf66a
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/linux.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/log4cxx.png b/Apps/VRRender/doc/source/_static/acknowledgment/log4cxx.png
new file mode 100755
index 0000000..c4bc479
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/log4cxx.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/ms.png b/Apps/VRRender/doc/source/_static/acknowledgment/ms.png
new file mode 100755
index 0000000..2483141
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/ms.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/opengl.png b/Apps/VRRender/doc/source/_static/acknowledgment/opengl.png
new file mode 100755
index 0000000..a4d2b17
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/opengl.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/python.png b/Apps/VRRender/doc/source/_static/acknowledgment/python.png
new file mode 100755
index 0000000..de80d7d
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/python.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/scons.png b/Apps/VRRender/doc/source/_static/acknowledgment/scons.png
new file mode 100755
index 0000000..ef89121
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/scons.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/sphinx.png b/Apps/VRRender/doc/source/_static/acknowledgment/sphinx.png
new file mode 100755
index 0000000..3206d4e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/sphinx.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/vim.png b/Apps/VRRender/doc/source/_static/acknowledgment/vim.png
new file mode 100755
index 0000000..69c1d59
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/vim.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/visualc.png b/Apps/VRRender/doc/source/_static/acknowledgment/visualc.png
new file mode 100755
index 0000000..5513663
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/visualc.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/vtk.png b/Apps/VRRender/doc/source/_static/acknowledgment/vtk.png
new file mode 100755
index 0000000..e559920
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/vtk.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/vtkinria3d.png b/Apps/VRRender/doc/source/_static/acknowledgment/vtkinria3d.png
new file mode 100755
index 0000000..1013778
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/vtkinria3d.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/wix.png b/Apps/VRRender/doc/source/_static/acknowledgment/wix.png
new file mode 100755
index 0000000..55196d9
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/wix.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/wx.png b/Apps/VRRender/doc/source/_static/acknowledgment/wx.png
new file mode 100755
index 0000000..562b129
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/wx.png differ
diff --git a/Apps/VRRender/doc/source/_static/acknowledgment/zlib.png b/Apps/VRRender/doc/source/_static/acknowledgment/zlib.png
new file mode 100755
index 0000000..8576eed
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/acknowledgment/zlib.png differ
diff --git a/Apps/VRRender/doc/source/_static/axial-view.jpg b/Apps/VRRender/doc/source/_static/axial-view.jpg
new file mode 100755
index 0000000..8604c62
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/axial-view.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/basic.css b/Apps/VRRender/doc/source/_static/basic.css
new file mode 100755
index 0000000..ed737d3
--- /dev/null
+++ b/Apps/VRRender/doc/source/_static/basic.css
@@ -0,0 +1,414 @@
+/**
+ * Sphinx stylesheet -- basic theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+/* -- main layout ----------------------------------------------------------- */
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 230px;
+}
+
+div.clearer {
+    clear: both;
+}
+
+/* -- relbar ---------------------------------------------------------------- */
+
+div.related {
+    width: 100%;
+    font-size: 90%;
+}
+
+div.related h3 {
+    display: none;
+}
+
+div.related ul {
+    margin: 0;
+    padding: 0 0 0 10px;
+    list-style: none;
+}
+
+div.related li {
+    display: inline;
+}
+
+div.related li.right {
+    float: right;
+    margin-right: 5px;
+}
+
+/* -- sidebar --------------------------------------------------------------- */
+
+div.sphinxsidebarwrapper {
+    padding: 10px 5px 0 10px;
+}
+
+div.sphinxsidebar {
+    float: left;
+    width: 230px;
+    margin-left: -100%;
+    font-size: 90%;
+}
+
+div.sphinxsidebar ul {
+    list-style: none;
+}
+
+div.sphinxsidebar ul ul,
+div.sphinxsidebar ul.want-points {
+    margin-left: 20px;
+    list-style: square;
+}
+
+div.sphinxsidebar ul ul {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+div.sphinxsidebar form {
+    margin-top: 10px;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+img {
+    border: 0;
+}
+
+/* -- search page ----------------------------------------------------------- */
+
+ul.search {
+    margin: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+ul.search li a {
+    font-weight: bold;
+}
+
+ul.search li div.context {
+    color: #888;
+    margin: 2px 0 0 30px;
+    text-align: left;
+}
+
+ul.keywordmatches li.goodmatch a {
+    font-weight: bold;
+}
+
+/* -- index page ------------------------------------------------------------ */
+
+table.contentstable {
+    width: 90%;
+}
+
+table.contentstable p.biglink {
+    line-height: 150%;
+}
+
+a.biglink {
+    font-size: 1.3em;
+}
+
+span.linkdescr {
+    font-style: italic;
+    padding-top: 5px;
+    font-size: 90%;
+}
+
+/* -- general index --------------------------------------------------------- */
+
+table.indextable td {
+    text-align: left;
+    vertical-align: top;
+}
+
+table.indextable dl, table.indextable dd {
+    margin-top: 0;
+    margin-bottom: 0;
+}
+
+table.indextable tr.pcap {
+    height: 10px;
+}
+
+table.indextable tr.cap {
+    margin-top: 10px;
+    background-color: #f2f2f2;
+}
+
+img.toggler {
+    margin-right: 3px;
+    margin-top: 3px;
+    cursor: pointer;
+}
+
+/* -- general body styles --------------------------------------------------- */
+
+a.headerlink {
+    visibility: hidden;
+}
+
+h1:hover > a.headerlink,
+h2:hover > a.headerlink,
+h3:hover > a.headerlink,
+h4:hover > a.headerlink,
+h5:hover > a.headerlink,
+h6:hover > a.headerlink,
+dt:hover > a.headerlink {
+    visibility: visible;
+}
+
+div.body p.caption {
+    text-align: inherit;
+}
+
+div.body td {
+    text-align: left;
+}
+
+.field-list ul {
+    padding-left: 1em;
+}
+
+.first {
+    margin-top: 0 !important;
+}
+
+p.rubric {
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+/* -- sidebars -------------------------------------------------------------- */
+
+div.sidebar {
+    margin: 0 0 0.5em 1em;
+    border: 1px solid #ddb;
+    padding: 7px 7px 0 7px;
+    background-color: #ffe;
+    width: 40%;
+    float: right;
+}
+
+p.sidebar-title {
+    font-weight: bold;
+}
+
+/* -- topics ---------------------------------------------------------------- */
+
+div.topic {
+    border: 1px solid #ccc;
+    padding: 7px 7px 0 7px;
+    margin: 10px 0 10px 0;
+}
+
+p.topic-title {
+    font-size: 1.1em;
+    font-weight: bold;
+    margin-top: 10px;
+}
+
+/* -- admonitions ----------------------------------------------------------- */
+
+div.admonition {
+    margin-top: 10px;
+    margin-bottom: 10px;
+    padding: 7px;
+}
+
+div.admonition dt {
+    font-weight: bold;
+}
+
+div.admonition dl {
+    margin-bottom: 0;
+}
+
+p.admonition-title {
+    margin: 0px 10px 5px 0px;
+    font-weight: bold;
+}
+
+div.body p.centered {
+    text-align: center;
+    margin-top: 25px;
+}
+
+/* -- tables ---------------------------------------------------------------- */
+
+table.docutils {
+    border: 0;
+    border-collapse: collapse;
+}
+
+table.docutils td, table.docutils th {
+    padding: 1px 8px 1px 0;
+    border-top: 0;
+    border-left: 0;
+    border-right: 0;
+    border-bottom: 1px solid #aaa;
+}
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+table.footnote td, table.footnote th {
+    border: 0 !important;
+}
+
+th {
+    text-align: left;
+    padding-right: 5px;
+}
+
+/* -- other body styles ----------------------------------------------------- */
+
+dl {
+    margin-bottom: 15px;
+}
+
+dd p {
+    margin-top: 0px;
+}
+
+dd ul, dd table {
+    margin-bottom: 10px;
+}
+
+dd {
+    margin-top: 3px;
+    margin-bottom: 10px;
+    margin-left: 30px;
+}
+
+dt:target, .highlight {
+    background-color: #fbe54e;
+}
+
+dl.glossary dt {
+    font-weight: bold;
+    font-size: 1.1em;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.refcount {
+    color: #060;
+}
+
+.optional {
+    font-size: 1.3em;
+}
+
+.versionmodified {
+    font-style: italic;
+}
+
+.system-message {
+    background-color: #fda;
+    padding: 5px;
+    border: 3px solid red;
+}
+
+.footnote:target  {
+    background-color: #ffa
+}
+
+/* -- code displays --------------------------------------------------------- */
+
+pre {
+    overflow: auto;
+}
+
+td.linenos pre {
+    padding: 5px 0px;
+    border: 0;
+    background-color: transparent;
+    color: #aaa;
+}
+
+table.highlighttable {
+    margin-left: 0.5em;
+}
+
+table.highlighttable td {
+    padding: 0 0.5em 0 0.5em;
+}
+
+tt.descname {
+    background-color: transparent;
+    font-weight: bold;
+    font-size: 1.2em;
+}
+
+tt.descclassname {
+    background-color: transparent;
+}
+
+tt.xref, a tt {
+    background-color: transparent;
+    font-weight: bold;
+}
+
+h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+    background-color: transparent;
+}
+
+/* -- math display ---------------------------------------------------------- */
+
+img.math {
+    vertical-align: middle;
+}
+
+div.math p {
+    text-align: center;
+}
+
+span.eqno {
+    float: right;
+}
+
+/* -- printout stylesheet --------------------------------------------------- */
+
+ at media print {
+    div.document,
+    div.documentwrapper,
+    div.bodywrapper {
+        margin: 0;
+        width: 100%;
+    }
+
+    div.sphinxsidebar,
+    div.related,
+    div.footer,
+    #top-link {
+        display: none;
+    }
+}
diff --git a/Apps/VRRender/doc/source/_static/camera-photo.png b/Apps/VRRender/doc/source/_static/camera-photo.png
new file mode 100755
index 0000000..1e8e886
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/camera-photo.png differ
diff --git a/Apps/VRRender/doc/source/_static/danger.png b/Apps/VRRender/doc/source/_static/danger.png
new file mode 100755
index 0000000..5fc8c7c
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/danger.png differ
diff --git a/Apps/VRRender/doc/source/_static/default.css b/Apps/VRRender/doc/source/_static/default.css
new file mode 100755
index 0000000..c13ed68
--- /dev/null
+++ b/Apps/VRRender/doc/source/_static/default.css
@@ -0,0 +1,201 @@
+/**
+ * Sphinx stylesheet -- default theme
+ * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ */
+
+ at import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: sans-serif;
+    font-size: 100%;
+    background-color: #11303d;
+    color: #000;
+    margin: 0;
+    padding: 0;
+}
+
+div.document {
+    background-color: #1c4e63;
+}
+
+div.body {
+    background-color: #ffffff;
+    color: #000000;
+    padding: 0 20px 30px 20px;
+}
+
+div.footer {
+    color: #ffffff;
+    width: 100%;
+    padding: 9px 0 9px 0;
+    text-align: center;
+    font-size: 75%;
+}
+
+div.footer a {
+    color: #ffffff;
+    text-decoration: underline;
+}
+
+div.related {
+    background-color: #133f52;
+    line-height: 30px;
+    color: #ffffff;
+}
+
+div.related a {
+    color: #ffffff;
+}
+
+div.sphinxsidebar {
+}
+
+div.sphinxsidebar h3 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: #ffffff;
+    font-size: 1.4em;
+    font-weight: normal;
+    margin: 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h3 a {
+    color: #ffffff;
+}
+
+div.sphinxsidebar h4 {
+    font-family: 'Trebuchet MS', sans-serif;
+    color: #ffffff;
+    font-size: 1.3em;
+    font-weight: normal;
+    margin: 5px 0 0 0;
+    padding: 0;
+}
+
+div.sphinxsidebar p {
+    color: #ffffff;
+}
+
+div.sphinxsidebar p.topless {
+    margin: 5px 10px 10px 10px;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px;
+    padding: 0;
+    color: #ffffff;
+}
+
+div.sphinxsidebar a {
+    color: #98dbcc;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #98dbcc;
+    font-family: sans-serif;
+    font-size: 1em;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+    color: #355f7c;
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: underline;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: justify;
+    line-height: 130%;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+    font-family: 'Trebuchet MS', sans-serif;
+    background-color: #f2f2f2;
+    font-weight: normal;
+    color: #20435c;
+    border-bottom: 1px solid #ccc;
+    margin: 20px -20px 10px -20px;
+    padding: 3px 0 3px 10px;
+}
+
+div.body h1 { margin-top: 0; font-size: 200%; }
+div.body h2 { font-size: 160%; }
+div.body h3 { font-size: 140%; }
+div.body h4 { font-size: 120%; }
+div.body h5 { font-size: 110%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+    color: #c60f0f;
+    font-size: 0.8em;
+    padding: 0 4px 0 4px;
+    text-decoration: none;
+}
+
+a.headerlink:hover {
+    background-color: #c60f0f;
+    color: white;
+}
+
+div.body p, div.body dd, div.body li {
+    text-align: justify;
+    line-height: 130%;
+}
+
+div.admonition p.admonition-title + p {
+    display: inline;
+}
+
+div.note {
+    background-color: #eee;
+    border: 1px solid #ccc;
+}
+
+div.seealso {
+    background-color: #ffc;
+    border: 1px solid #ff6;
+}
+
+div.topic {
+    background-color: #eee;
+}
+
+div.warning {
+    background-color: #ffe4e4;
+    border: 1px solid #f66;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre {
+    padding: 5px;
+    background-color: #eeffcc;
+    color: #333333;
+    line-height: 120%;
+    border: 1px solid #ac9;
+    border-left: none;
+    border-right: none;
+}
+
+tt {
+    background-color: #ecf0f3;
+    padding: 0 1px 0 1px;
+    font-size: 0.95em;
+}
\ No newline at end of file
diff --git a/Apps/VRRender/doc/source/_static/distance.png b/Apps/VRRender/doc/source/_static/distance.png
new file mode 100755
index 0000000..7c00070
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/distance.png differ
diff --git a/Apps/VRRender/doc/source/_static/doctools.js b/Apps/VRRender/doc/source/_static/doctools.js
new file mode 100755
index 0000000..9447678
--- /dev/null
+++ b/Apps/VRRender/doc/source/_static/doctools.js
@@ -0,0 +1,232 @@
+/// XXX: make it cross browser
+
+/**
+ * make the code below compatible with browsers without
+ * an installed firebug like debugger
+ */
+if (!window.console || !console.firebug) {
+  var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
+      "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
+  window.console = {};
+  for (var i = 0; i < names.length; ++i)
+    window.console[names[i]] = function() {}
+}
+
+/**
+ * small helper function to urldecode strings
+ */
+jQuery.urldecode = function(x) {
+  return decodeURIComponent(x).replace(/\+/g, ' ');
+}
+
+/**
+ * small helper function to urlencode strings
+ */
+jQuery.urlencode = encodeURIComponent;
+
+/**
+ * This function returns the parsed url parameters of the
+ * current request. Multiple values per key are supported,
+ * it will always return arrays of strings for the value parts.
+ */
+jQuery.getQueryParameters = function(s) {
+  if (typeof s == 'undefined')
+    s = document.location.search;
+  var parts = s.substr(s.indexOf('?') + 1).split('&');
+  var result = {};
+  for (var i = 0; i < parts.length; i++) {
+    var tmp = parts[i].split('=', 2);
+    var key = jQuery.urldecode(tmp[0]);
+    var value = jQuery.urldecode(tmp[1]);
+    if (key in result)
+      result[key].push(value);
+    else
+      result[key] = [value];
+  }
+  return result;
+}
+
+/**
+ * small function to check if an array contains
+ * a given item.
+ */
+jQuery.contains = function(arr, item) {
+  for (var i = 0; i < arr.length; i++) {
+    if (arr[i] == item)
+      return true;
+  }
+  return false;
+}
+
+/**
+ * highlight a given string on a jquery object by wrapping it in
+ * span elements with the given class name.
+ */
+jQuery.fn.highlightText = function(text, className) {
+  function highlight(node) {
+    if (node.nodeType == 3) {
+      var val = node.nodeValue;
+      var pos = val.toLowerCase().indexOf(text);
+      if (pos >= 0 && !jQuery.className.has(node.parentNode, className)) {
+        var span = document.createElement("span");
+        span.className = className;
+        span.appendChild(document.createTextNode(val.substr(pos, text.length)));
+        node.parentNode.insertBefore(span, node.parentNode.insertBefore(
+          document.createTextNode(val.substr(pos + text.length)),
+          node.nextSibling));
+        node.nodeValue = val.substr(0, pos);
+      }
+    }
+    else if (!jQuery(node).is("button, select, textarea")) {
+      jQuery.each(node.childNodes, function() {
+        highlight(this)
+      });
+    }
+  }
+  return this.each(function() {
+    highlight(this);
+  });
+}
+
+/**
+ * Small JavaScript module for the documentation.
+ */
+var Documentation = {
+
+  init : function() {
+    this.fixFirefoxAnchorBug();
+    this.highlightSearchWords();
+    this.initModIndex();
+  },
+
+  /**
+   * i18n support
+   */
+  TRANSLATIONS : {},
+  PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; },
+  LOCALE : 'unknown',
+
+  // gettext and ngettext don't access this so that the functions
+  // can savely bound to a different name (_ = Documentation.gettext)
+  gettext : function(string) {
+    var translated = Documentation.TRANSLATIONS[string];
+    if (typeof translated == 'undefined')
+      return string;
+    return (typeof translated == 'string') ? translated : translated[0];
+  },
+
+  ngettext : function(singular, plural, n) {
+    var translated = Documentation.TRANSLATIONS[singular];
+    if (typeof translated == 'undefined')
+      return (n == 1) ? singular : plural;
+    return translated[Documentation.PLURALEXPR(n)];
+  },
+
+  addTranslations : function(catalog) {
+    for (var key in catalog.messages)
+      this.TRANSLATIONS[key] = catalog.messages[key];
+    this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
+    this.LOCALE = catalog.locale;
+  },
+
+  /**
+   * add context elements like header anchor links
+   */
+  addContextElements : function() {
+    $('div[id] > :header:first').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this headline')).
+      appendTo(this);
+    });
+    $('dt[id]').each(function() {
+      $('<a class="headerlink">\u00B6</a>').
+      attr('href', '#' + this.id).
+      attr('title', _('Permalink to this definition')).
+      appendTo(this);
+    });
+  },
+
+  /**
+   * workaround a firefox stupidity
+   */
+  fixFirefoxAnchorBug : function() {
+    if (document.location.hash && $.browser.mozilla)
+      window.setTimeout(function() {
+        document.location.href += '';
+      }, 10);
+  },
+
+  /**
+   * highlight the search words provided in the url in the text
+   */
+  highlightSearchWords : function() {
+    var params = $.getQueryParameters();
+    var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
+    if (terms.length) {
+      var body = $('div.body');
+      window.setTimeout(function() {
+        $.each(terms, function() {
+          body.highlightText(this.toLowerCase(), 'highlight');
+        });
+      }, 10);
+      $('<li class="highlight-link"><a href="javascript:Documentation.' +
+        'hideSearchWords()">' + _('Hide Search Matches') + '</a></li>')
+          .appendTo($('.sidebar .this-page-menu'));
+    }
+  },
+
+  /**
+   * init the modindex toggle buttons
+   */
+  initModIndex : function() {
+    var togglers = $('img.toggler').click(function() {
+      var src = $(this).attr('src');
+      var idnum = $(this).attr('id').substr(7);
+      console.log($('tr.cg-' + idnum).toggle());
+      if (src.substr(-9) == 'minus.png')
+        $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
+      else
+        $(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
+    }).css('display', '');
+    if (DOCUMENTATION_OPTIONS.COLLAPSE_MODINDEX) {
+        togglers.click();
+    }
+  },
+
+  /**
+   * helper function to hide the search marks again
+   */
+  hideSearchWords : function() {
+    $('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
+    $('span.highlight').removeClass('highlight');
+  },
+
+  /**
+   * make the url absolute
+   */
+  makeURL : function(relativeURL) {
+    return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
+  },
+
+  /**
+   * get the current relative url
+   */
+  getCurrentURL : function() {
+    var path = document.location.pathname;
+    var parts = path.split(/\//);
+    $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
+      if (this == '..')
+        parts.pop();
+    });
+    var url = parts.join('/');
+    return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  }
+};
+
+// quick alias for translations
+_ = Documentation.gettext;
+
+$(document).ready(function() {
+  Documentation.init();
+});
diff --git a/Apps/VRRender/doc/source/_static/ehealth.png b/Apps/VRRender/doc/source/_static/ehealth.png
new file mode 100755
index 0000000..aba2767
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/ehealth.png differ
diff --git a/Apps/VRRender/doc/source/_static/file.png b/Apps/VRRender/doc/source/_static/file.png
new file mode 100755
index 0000000..d18082e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/file.png differ
diff --git a/Apps/VRRender/doc/source/_static/frontal-view.jpg b/Apps/VRRender/doc/source/_static/frontal-view.jpg
new file mode 100755
index 0000000..987e9d3
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/frontal-view.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icon-2D.png b/Apps/VRRender/doc/source/_static/icon-2D.png
new file mode 100755
index 0000000..c802c3f
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-2D.png differ
diff --git a/Apps/VRRender/doc/source/_static/icon-3D.png b/Apps/VRRender/doc/source/_static/icon-3D.png
new file mode 100755
index 0000000..950234a
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-3D.png differ
diff --git a/Apps/VRRender/doc/source/_static/icon-VR.png b/Apps/VRRender/doc/source/_static/icon-VR.png
new file mode 100755
index 0000000..787163e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-VR.png differ
diff --git a/Apps/VRRender/doc/source/_static/icon-axial.png b/Apps/VRRender/doc/source/_static/icon-axial.png
new file mode 100755
index 0000000..ba1b7de
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-axial.png differ
diff --git a/Apps/VRRender/doc/source/_static/icon-frontal.png b/Apps/VRRender/doc/source/_static/icon-frontal.png
new file mode 100755
index 0000000..3622453
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-frontal.png differ
diff --git a/Apps/VRRender/doc/source/_static/icon-sagittal.png b/Apps/VRRender/doc/source/_static/icon-sagittal.png
new file mode 100755
index 0000000..36e9989
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-sagittal.png differ
diff --git a/Apps/VRRender/doc/source/_static/icon-windows.jpg b/Apps/VRRender/doc/source/_static/icon-windows.jpg
new file mode 100755
index 0000000..50569cb
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icon-windows.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icone-F9.png b/Apps/VRRender/doc/source/_static/icone-F9.png
new file mode 100755
index 0000000..8cc739a
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-F9.png differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-01.jpg b/Apps/VRRender/doc/source/_static/icone-VR-01.jpg
new file mode 100755
index 0000000..85fdc80
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-VR-01.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-02.jpg b/Apps/VRRender/doc/source/_static/icone-VR-02.jpg
new file mode 100755
index 0000000..56d33d1
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-VR-02.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-03.jpg b/Apps/VRRender/doc/source/_static/icone-VR-03.jpg
new file mode 100755
index 0000000..05c0bf5
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-VR-03.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-04.jpg b/Apps/VRRender/doc/source/_static/icone-VR-04.jpg
new file mode 100755
index 0000000..4b9056e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-VR-04.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-05.jpg b/Apps/VRRender/doc/source/_static/icone-VR-05.jpg
new file mode 100755
index 0000000..7c76565
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-VR-05.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/icone-VR-06.jpg b/Apps/VRRender/doc/source/_static/icone-VR-06.jpg
new file mode 100755
index 0000000..da21b0e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/icone-VR-06.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/info-patient.png b/Apps/VRRender/doc/source/_static/info-patient.png
new file mode 100755
index 0000000..f4c6919
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/info-patient.png differ
diff --git a/Apps/VRRender/doc/source/_static/jquery.js b/Apps/VRRender/doc/source/_static/jquery.js
new file mode 100755
index 0000000..82b98e1
--- /dev/null
+++ b/Apps/VRRender/doc/source/_static/jquery.js
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
+ * $Rev: 5685 $
+ */
+(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){ [...]
+return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);retur [...]
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.g [...]
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:fun [...]
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this. [...]
+this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);} [...]
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByT [...]
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for( [...]
+script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData: [...]
+for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.c [...]
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid [...]
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode) [...]
+while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
+while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<lengt [...]
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuer [...]
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DO [...]
+xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false; [...]
+jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.compl [...]
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style. [...]
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timer [...]
\ No newline at end of file
diff --git a/Apps/VRRender/doc/source/_static/minus.png b/Apps/VRRender/doc/source/_static/minus.png
new file mode 100755
index 0000000..da1c562
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/minus.png differ
diff --git a/Apps/VRRender/doc/source/_static/openDicom.png b/Apps/VRRender/doc/source/_static/openDicom.png
new file mode 100755
index 0000000..3db1a30
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/openDicom.png differ
diff --git a/Apps/VRRender/doc/source/_static/openDicom_openFxz.png b/Apps/VRRender/doc/source/_static/openDicom_openFxz.png
new file mode 100755
index 0000000..14bef5d
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/openDicom_openFxz.png differ
diff --git a/Apps/VRRender/doc/source/_static/openFxz.png b/Apps/VRRender/doc/source/_static/openFxz.png
new file mode 100755
index 0000000..c63c40e
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/openFxz.png differ
diff --git a/Apps/VRRender/doc/source/_static/operation.png b/Apps/VRRender/doc/source/_static/operation.png
new file mode 100755
index 0000000..14d826c
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/operation.png differ
diff --git a/Apps/VRRender/doc/source/_static/plus.png b/Apps/VRRender/doc/source/_static/plus.png
new file mode 100755
index 0000000..b3cb374
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/plus.png differ
diff --git a/Apps/VRRender/doc/source/_static/pygments.css b/Apps/VRRender/doc/source/_static/pygments.css
new file mode 100755
index 0000000..1f2d2b6
--- /dev/null
+++ b/Apps/VRRender/doc/source/_static/pygments.css
@@ -0,0 +1,61 @@
+.hll { background-color: #ffffcc }
+.c { color: #408090; font-style: italic } /* Comment */
+.err { border: 1px solid #FF0000 } /* Error */
+.k { color: #007020; font-weight: bold } /* Keyword */
+.o { color: #666666 } /* Operator */
+.cm { color: #408090; font-style: italic } /* Comment.Multiline */
+.cp { color: #007020 } /* Comment.Preproc */
+.c1 { color: #408090; font-style: italic } /* Comment.Single */
+.cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */
+.gd { color: #A00000 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gr { color: #FF0000 } /* Generic.Error */
+.gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.gi { color: #00A000 } /* Generic.Inserted */
+.go { color: #303030 } /* Generic.Output */
+.gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.gt { color: #0040D0 } /* Generic.Traceback */
+.kc { color: #007020; font-weight: bold } /* Keyword.Constant */
+.kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
+.kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
+.kp { color: #007020 } /* Keyword.Pseudo */
+.kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
+.kt { color: #902000 } /* Keyword.Type */
+.m { color: #208050 } /* Literal.Number */
+.s { color: #4070a0 } /* Literal.String */
+.na { color: #4070a0 } /* Name.Attribute */
+.nb { color: #007020 } /* Name.Builtin */
+.nc { color: #0e84b5; font-weight: bold } /* Name.Class */
+.no { color: #60add5 } /* Name.Constant */
+.nd { color: #555555; font-weight: bold } /* Name.Decorator */
+.ni { color: #d55537; font-weight: bold } /* Name.Entity */
+.ne { color: #007020 } /* Name.Exception */
+.nf { color: #06287e } /* Name.Function */
+.nl { color: #002070; font-weight: bold } /* Name.Label */
+.nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */
+.nt { color: #062873; font-weight: bold } /* Name.Tag */
+.nv { color: #bb60d5 } /* Name.Variable */
+.ow { color: #007020; font-weight: bold } /* Operator.Word */
+.w { color: #bbbbbb } /* Text.Whitespace */
+.mf { color: #208050 } /* Literal.Number.Float */
+.mh { color: #208050 } /* Literal.Number.Hex */
+.mi { color: #208050 } /* Literal.Number.Integer */
+.mo { color: #208050 } /* Literal.Number.Oct */
+.sb { color: #4070a0 } /* Literal.String.Backtick */
+.sc { color: #4070a0 } /* Literal.String.Char */
+.sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
+.s2 { color: #4070a0 } /* Literal.String.Double */
+.se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
+.sh { color: #4070a0 } /* Literal.String.Heredoc */
+.si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */
+.sx { color: #c65d09 } /* Literal.String.Other */
+.sr { color: #235388 } /* Literal.String.Regex */
+.s1 { color: #4070a0 } /* Literal.String.Single */
+.ss { color: #517918 } /* Literal.String.Symbol */
+.bp { color: #007020 } /* Name.Builtin.Pseudo */
+.vc { color: #bb60d5 } /* Name.Variable.Class */
+.vg { color: #bb60d5 } /* Name.Variable.Global */
+.vi { color: #bb60d5 } /* Name.Variable.Instance */
+.il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/Apps/VRRender/doc/source/_static/sagittal-view.jpg b/Apps/VRRender/doc/source/_static/sagittal-view.jpg
new file mode 100755
index 0000000..ed91eea
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/sagittal-view.jpg differ
diff --git a/Apps/VRRender/doc/source/_static/searchtools.js b/Apps/VRRender/doc/source/_static/searchtools.js
new file mode 100755
index 0000000..a243b15
--- /dev/null
+++ b/Apps/VRRender/doc/source/_static/searchtools.js
@@ -0,0 +1,467 @@
+/**
+ * helper function to return a node containing the
+ * search summary for a given text. keywords is a list
+ * of stemmed words, hlwords is the list of normal, unstemmed
+ * words. the first one is used to find the occurance, the
+ * latter for highlighting it.
+ */
+
+jQuery.makeSearchSummary = function(text, keywords, hlwords) {
+  var textLower = text.toLowerCase();
+  var start = 0;
+  $.each(keywords, function() {
+    var i = textLower.indexOf(this.toLowerCase());
+    if (i > -1)
+      start = i;
+  });
+  start = Math.max(start - 120, 0);
+  var excerpt = ((start > 0) ? '...' : '') +
+  $.trim(text.substr(start, 240)) +
+  ((start + 240 - text.length) ? '...' : '');
+  var rv = $('<div class="context"></div>').text(excerpt);
+  $.each(hlwords, function() {
+    rv = rv.highlightText(this, 'highlight');
+  });
+  return rv;
+}
+
+/**
+ * Porter Stemmer
+ */
+var PorterStemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
+
+/**
+ * Search Module
+ */
+var Search = {
+
+  _index : null,
+  _queued_query : null,
+  _pulse_status : -1,
+
+  init : function() {
+      var params = $.getQueryParameters();
+      if (params.q) {
+          var query = params.q[0];
+          $('input[name="q"]')[0].value = query;
+          this.performSearch(query);
+      }
+  },
+
+  /**
+   * Sets the index
+   */
+  setIndex : function(index) {
+    var q;
+    this._index = index;
+    if ((q = this._queued_query) !== null) {
+      this._queued_query = null;
+      Search.query(q);
+    }
+  },
+
+  hasIndex : function() {
+      return this._index !== null;
+  },
+
+  deferQuery : function(query) {
+      this._queued_query = query;
+  },
+
+  stopPulse : function() {
+      this._pulse_status = 0;
+  },
+
+  startPulse : function() {
+    if (this._pulse_status >= 0)
+        return;
+    function pulse() {
+      Search._pulse_status = (Search._pulse_status + 1) % 4;
+      var dotString = '';
+      for (var i = 0; i < Search._pulse_status; i++)
+        dotString += '.';
+      Search.dots.text(dotString);
+      if (Search._pulse_status > -1)
+        window.setTimeout(pulse, 500);
+    };
+    pulse();
+  },
+
+  /**
+   * perform a search for something
+   */
+  performSearch : function(query) {
+    // create the required interface elements
+    this.out = $('#search-results');
+    this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
+    this.dots = $('<span></span>').appendTo(this.title);
+    this.status = $('<p style="display: none"></p>').appendTo(this.out);
+    this.output = $('<ul class="search"/>').appendTo(this.out);
+
+    $('#search-progress').text(_('Preparing search...'));
+    this.startPulse();
+
+    // index already loaded, the browser was quick!
+    if (this.hasIndex())
+      this.query(query);
+    else
+      this.deferQuery(query);
+  },
+
+  query : function(query) {
+    // stem the searchterms and add them to the
+    // correct list
+    var stemmer = new PorterStemmer();
+    var searchterms = [];
+    var excluded = [];
+    var hlterms = [];
+    var tmp = query.split(/\s+/);
+    var object = (tmp.length == 1) ? tmp[0].toLowerCase() : null;
+    for (var i = 0; i < tmp.length; i++) {
+      // stem the word
+      var word = stemmer.stemWord(tmp[i]).toLowerCase();
+      // select the correct list
+      if (word[0] == '-') {
+        var toAppend = excluded;
+        word = word.substr(1);
+      }
+      else {
+        var toAppend = searchterms;
+        hlterms.push(tmp[i].toLowerCase());
+      }
+      // only add if not already in the list
+      if (!$.contains(toAppend, word))
+        toAppend.push(word);
+    };
+    var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
+
+    console.debug('SEARCH: searching for:');
+    console.info('required: ', searchterms);
+    console.info('excluded: ', excluded);
+
+    // prepare search
+    var filenames = this._index.filenames;
+    var titles = this._index.titles;
+    var terms = this._index.terms;
+    var descrefs = this._index.descrefs;
+    var modules = this._index.modules;
+    var desctypes = this._index.desctypes;
+    var fileMap = {};
+    var files = null;
+    var objectResults = [];
+    var regularResults = [];
+    $('#search-progress').empty();
+
+    // lookup as object
+    if (object != null) {
+      for (var module in modules) {
+        if (module.indexOf(object) > -1) {
+          fn = modules[module];
+          descr = _('module, in ') + titles[fn];
+          objectResults.push([filenames[fn], module, '#module-'+module, descr]);
+        }
+      }
+      for (var prefix in descrefs) {
+        for (var name in descrefs[prefix]) {
+          if (name.toLowerCase().indexOf(object) > -1) {
+            match = descrefs[prefix][name];
+            fullname = (prefix ? prefix + '.' : '') + name;
+            descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
+            objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]);
+          }
+        }
+      }
+    }
+
+    // sort results descending
+    objectResults.sort(function(a, b) {
+      return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
+    });
+
+
+    // perform the search on the required terms
+    for (var i = 0; i < searchterms.length; i++) {
+      var word = searchterms[i];
+      // no match but word was a required one
+      if ((files = terms[word]) == null)
+        break;
+      if (files.length == undefined) {
+        files = [files];
+      }
+      // create the mapping
+      for (var j = 0; j < files.length; j++) {
+        var file = files[j];
+        if (file in fileMap)
+          fileMap[file].push(word);
+        else
+          fileMap[file] = [word];
+      }
+    }
+
+    // now check if the files don't contain excluded terms
+    for (var file in fileMap) {
+      var valid = true;
+
+      // check if all requirements are matched
+      if (fileMap[file].length != searchterms.length)
+        continue;
+
+      // ensure that none of the excluded terms is in the
+      // search result.
+      for (var i = 0; i < excluded.length; i++) {
+        if (terms[excluded[i]] == file ||
+            $.contains(terms[excluded[i]] || [], file)) {
+          valid = false;
+          break;
+        }
+      }
+
+      // if we have still a valid result we can add it
+      // to the result list
+      if (valid)
+        regularResults.push([filenames[file], titles[file], '', null]);
+    }
+
+    // delete unused variables in order to not waste
+    // memory until list is retrieved completely
+    delete filenames, titles, terms;
+
+    // now sort the regular results descending by title
+    regularResults.sort(function(a, b) {
+      var left = a[1].toLowerCase();
+      var right = b[1].toLowerCase();
+      return (left > right) ? -1 : ((left < right) ? 1 : 0);
+    });
+
+    // combine both
+    var results = regularResults.concat(objectResults);
+
+    // print the results
+    var resultCount = results.length;
+    function displayNextItem() {
+      // results left, load the summary and display it
+      if (results.length) {
+        var item = results.pop();
+        var listItem = $('<li style="display:none"></li>');
+        listItem.append($('<a/>').attr(
+          'href',
+          item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX +
+          highlightstring + item[2]).html(item[1]));
+        if (item[3]) {
+          listItem.append($('<span> (' + item[3] + ')</span>'));
+          Search.output.append(listItem);
+          listItem.slideDown(5, function() {
+            displayNextItem();
+          });
+        } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
+          $.get('_sources/' + item[0] + '.txt', function(data) {
+            listItem.append($.makeSearchSummary(data, searchterms, hlterms));
+            Search.output.append(listItem);
+            listItem.slideDown(5, function() {
+              displayNextItem();
+            });
+          });
+        } else {
+          // no source available, just display title
+          Search.output.append(listItem);
+          listItem.slideDown(5, function() {
+            displayNextItem();
+          });
+        }
+      }
+      // search finished, update title and status message
+      else {
+        Search.stopPulse();
+        Search.title.text(_('Search Results'));
+        if (!resultCount)
+          Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
+        else
+            Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
+        Search.status.fadeIn(500);
+      }
+    }
+    displayNextItem();
+  }
+}
+
+$(document).ready(function() {
+  Search.init();
+});
diff --git a/Bundles/LeafUI/uiImageQt/rc/sliceHide.png b/Apps/VRRender/doc/source/_static/sliceHide.png
old mode 100644
new mode 100755
similarity index 100%
copy from Bundles/LeafUI/uiImageQt/rc/sliceHide.png
copy to Apps/VRRender/doc/source/_static/sliceHide.png
diff --git a/Bundles/LeafUI/uiImageQt/rc/sliceShow.png b/Apps/VRRender/doc/source/_static/sliceShow.png
old mode 100644
new mode 100755
similarity index 100%
copy from Bundles/LeafUI/uiImageQt/rc/sliceShow.png
copy to Apps/VRRender/doc/source/_static/sliceShow.png
diff --git a/Apps/VRRender/doc/source/_static/video.png b/Apps/VRRender/doc/source/_static/video.png
new file mode 100755
index 0000000..ff4bca2
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/video.png differ
diff --git a/Apps/VRRender/doc/source/_static/view_frontal.png b/Apps/VRRender/doc/source/_static/view_frontal.png
new file mode 100755
index 0000000..f1bc533
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/view_frontal.png differ
diff --git a/Apps/VRRender/doc/source/_static/view_profil.png b/Apps/VRRender/doc/source/_static/view_profil.png
new file mode 100755
index 0000000..40fd8a4
Binary files /dev/null and b/Apps/VRRender/doc/source/_static/view_profil.png differ
diff --git a/Apps/VRRender/doc/source/conf.py b/Apps/VRRender/doc/source/conf.py
new file mode 100644
index 0000000..f160cc5
--- /dev/null
+++ b/Apps/VRRender/doc/source/conf.py
@@ -0,0 +1,208 @@
+# ***** BEGIN LICENSE BLOCK *****
+# FW4SPL - Copyright (C) IRCAD, 2009-2012.
+# Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+# published by the Free Software Foundation.
+# ****** END LICENSE BLOCK ******
+
+# -*- coding: utf-8 -*-
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys, os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.append(os.path.abspath('.'))
+
+# -- General configuration -----------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = []
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+source_encoding = 'utf-8'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+projectname = u'VR-Planning'
+project = projectname.replace('-','').replace(' ','')
+copyright = u'2010, IRCAD'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+version = '0.8'
+# The full version, including alpha/beta/rc tags.
+release = '0.8'
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+language = 'en'
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+today_fmt = '%Y'
+
+# List of documents that shouldn't be included in the build.
+#unused_docs = []
+
+# List of directories, relative to source directory, that shouldn't be searched
+# for source files.
+exclude_trees = []
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  Major themes that come with
+# Sphinx are currently 'default' and 'sphinxdoc'.
+html_theme = 'default'
+#html_theme = 'sphinxdoc'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+#html_theme_path = []
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+html_logo = "_static/VR_html.png"
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+#html_last_updated_fmt = '%Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+html_use_modindex = False
+
+# If false, no index is generated.
+html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+html_show_sphinx = False
+html_show_sourcelink = False
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = ''
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'VR-Render Websurg Limited Edition'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+
+latex_elements = {
+        'papersize' : 'a4',
+        'pointsize' : '12pt',
+        }
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', project+'.tex', projectname+u' Documentation',
+   u'IRCAD', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+latex_logo = "_static/"+project+".png"
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+latex_use_parts = False
+#latex_use_parts = True
+
+# Additional stuff for the LaTeX preamble.
+#latex_preamble = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
+latex_use_modindex = False
+
diff --git a/Apps/VRRender/doc/source/index.rst b/Apps/VRRender/doc/source/index.rst
new file mode 100755
index 0000000..95bcc24
--- /dev/null
+++ b/Apps/VRRender/doc/source/index.rst
@@ -0,0 +1,37 @@
+.. VRPlanningDoc documentation master file, created by
+   Luc SOLER on Fri Mar 12 12:00:00 2010.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+Welcome to VR-Planning 0.2
+==========================
+
+Contents:
+
+
+.. toctree::
+   :maxdepth: 2
+   
+   Introduction
+   Windows_Installation
+   Start_VR_Planning
+   Tool_bar
+   Read_and_Select_Data
+   Export_Data
+   3D_Models_Manipulation
+   3D_Models_Properties
+   3D_Medical_Image_Visu
+   3D_Distances
+   3D_Resection
+   2D_MPR
+   2D_Landmarks
+   Basic_Image_Filtering
+   What_is_Volume_Rendering
+   3D_Volume_Rendering
+   Transfert_function
+   Help_menu
+   Shortcuts
+   Acknowledgment
+   Minimal_config
+   Licence
+
diff --git a/Apps/VRRender/rc/about/about.html b/Apps/VRRender/rc/about/about.html
index 8c6bfe7..2b06b2b 100644
--- a/Apps/VRRender/rc/about/about.html
+++ b/Apps/VRRender/rc/about/about.html
@@ -8,11 +8,11 @@
 
 <p align="center">
 <img src="vrrender_128.png">
-<br><b>VR-Render</b> 
-<br><b>Version :</b> 0.9.6 
+<br><b>VR-Render</b>
+<br><b>Version :</b> 0.9.7
 <br><b>Contact Us :</b> <a href="mailto:fw4spl at gmail.com">fw4spl at gmail.com</a>
-<br><b>Web Home :</b> <a href="http://code.google.com/p/fw4spl" target="_blank">fw4spl project</a>
-<br><b>Team :</b> <a href="http://code.google.com/p/fw4spl/wiki/ContributorsAndLibraries" target="_blank">see contributors</a>
+<br><b>Web Home :</b> <a href="https://github.com/fw4spl-org/" target="_blank">fw4spl project</a>
+<br><b>Team :</b> <a href="https://github.com/orgs/fw4spl-org/teams" target="_blank">see contributors</a>
 </p>
 
 <hr>
diff --git a/Apps/VRRender/rc/configurations/MenuAndViewConfig.xml b/Apps/VRRender/rc/configurations/MenuAndViewConfig.xml
deleted file mode 100644
index 2b2f58d..0000000
--- a/Apps/VRRender/rc/configurations/MenuAndViewConfig.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<serviceList>
-
-    <service uid="${GENERIC_UID}_mainview" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="yes">
-        <gui>
-            <layout type="::fwGui::CardinalLayoutManager">
-                <view caption="Information" align="center" minWidth="200" />
-                <view caption="Preview" align="bottom" minHeight="200" />
-            </layout>
-            <toolBar />
-        </gui>
-        <registry>
-            <parent wid="${WID_PARENT}" />
-            <toolBar sid="toolBar" start="yes" />
-            <view sid="${GENERIC_UID}_selector" start="yes" />
-            <view wid="${GENERIC_UID}_preview" />
-        </registry>
-    </service>
-
-    <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
-        <gui>
-            <layout>
-                <menuItem name="Import" icon="Bundles/media_0-1/icons/Import.svg" />
-                <menuItem name="Export" icon="Bundles/media_0-1/icons/Export.svg" />
-                <menuItem name="Launch activity" icon="Bundles/media_0-1/icons/Launch_activity.svg" />
-                <separator />
-                <menuItem name="2D visualization" icon="Bundles/media_0-1/icons/icon-2D.png" />
-                <menuItem name="3D visualization" icon="Bundles/media_0-1/icons/icon-3D.png" />
-                <menuItem name="Volume rendering" icon="Bundles/media_0-1/icons/icon-VR.png" />
-            </layout>
-        </gui>
-        <registry>
-            <menuItem sid="${GENERIC_UID}_action_import" start="yes" />
-            <menuItem sid="${GENERIC_UID}_action_exportSeries" start="yes" />
-            <menuItem sid="${GENERIC_UID}_action_newActivity" start="yes" />
-
-            <menuItem sid="${GENERIC_UID}_action_2DVisualization" start="yes" />
-            <menuItem sid="${GENERIC_UID}_action_3DVisualization" start="yes" />
-            <menuItem sid="${GENERIC_UID}_action_volumeRendering" start="yes" />
-        </registry>
-    </service>
-
-</serviceList>
-
diff --git a/Apps/VRRender/rc/configurations/VRRenderBase.xml b/Apps/VRRender/rc/configurations/VRRenderBase.xml
index 7549097..a24343b 100644
--- a/Apps/VRRender/rc/configurations/VRRenderBase.xml
+++ b/Apps/VRRender/rc/configurations/VRRenderBase.xml
@@ -1,166 +1,126 @@
-<extension implements="::fwServices::registry::AppConfig">
+<extension implements="::fwServices::registry::AppConfig2">
     <id>VRRenderBase</id>
-    <type>parameters</type>
     <parameters>
         <param name="appName" />
         <param name="appIconPath" />
+        <param name="appVersion" />
     </parameters>
     <config>
-        <object uid="seriesDB" type="::fwMedData::SeriesDB">
-
-            <service uid="action_open" type="::fwGui::IActionSrv" impl="::uiIO::action::SSeriesDBMerger" autoConnect="no">
-                <IOSelectorSrvConfig name="SDBOpenIOSelectorConfig" />
-            </service>
-            <service uid="action_save" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-                <start uid="SDBWriter" />
-            </service>
-            <service uid="SDBWriter" type="::gui::editor::IDialogEditor" impl="::uiIO::editor::IOSelectorService" autoConnect="no">
-                <type mode="writer" />
-                <selection mode="include" />
-                <addSelection service="::ioAtoms::SWriter" />
-                <config id="MDAtomsConfig" service="::ioAtoms::SWriter" />
-            </service>
-
-
-            <service uid="mainFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-                <gui>
-                    <frame>
-                        <name>${appName}</name>
-                        <icon>${appIconPath}</icon>
-                        <minSize width="800" height="600" />
-                    </frame>
-                    <menuBar />
-                </gui>
-                <registry>
-                    <menuBar sid="menuBar" start="yes" />
-                    <view sid="dynamicView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menu name="File" />
-                        <menu name="Monitor" />
-                        <menu name="Help" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menu sid="menu_file" start="yes" />
-                    <menu sid="menu_monitor" start="yes" />
-                    <menu sid="menu_help" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menu_file" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Open" shortcut="Ctrl+O" />
-                        <menuItem name="Save" shortcut="Ctrl+S" />
-                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="action_open" start="yes" />
-                    <menuItem sid="action_save" start="yes" />
-                    <menuItem sid="action_quit" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="menu_monitor" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
-                <gui>
-                    <layout>
-                        <menuItem name="ClassFactoryRegistry information"/>
-                        <menuItem name="Framework related object metrics"/>
-                        <separator />
-                        <menuItem name="Show contributions tree"/>
-                        <separator />
-                        <menuItem name="Memory"/>
-                        <menuItem name="Change dump status" style="check" />
-                        <menuItem name="Dump all" />
-                        <menuItem name="Increase memory consumption"/>
-                        <menuItem name="Decrease memory consumption"/>
-                    </layout>
-                </gui>
-                    <registry>
-                       <menuItem sid="action_ClassFactoryRegistryInfo" start="yes" />
-                       <menuItem sid="action_fwMetrics" start="yes" />
-                       <menuItem sid="action_ComponentsTree" start="yes" />
-                       <menuItem sid="action_MemInfo" start="yes" />
-                       <menuItem sid="action_ChangeDumpStatus" start="yes" />
-                       <menuItem sid="dumpAll" start="yes" />
-                       <menuItem sid="action_incMemConsum" start="yes" />
-                       <menuItem sid="action_decMemConsum" start="yes" />
-                 </registry>
-            </service>
-
-            <service uid="menu_help" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="About" specialAction="ABOUT" />
-                        <menuItem name="Acknowledgments" />
-                        <separator />
-                        <menuItem name="VR-Render Website" />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="action_about" start="yes" />
-                    <menuItem sid="action_acknowledgments" start="yes" />
-                    <menuItem sid="action_openBrowser" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::QuitAction" autoConnect="no" />
-
-            <service uid="action_about" type="::fwGui::IActionSrv" impl="::uiGeneric::action::SShowAbout" autoConnect="no">
-                <filename id="Bundles/VRRender_0-9/about/about.html" />
-            </service>
-
-            <service uid="action_acknowledgments" type="::fwGui::IActionSrv" impl="::uiGeneric::action::ShowAcknowledgments" autoConnect="no">
-                <filename id="Bundles/VRRender_0-9/documentations/ack.html" />
-            </service>
-
-            <service uid="action_openBrowser" type="::fwGui::IActionSrv" impl="::uiGeneric::action::LaunchBrowserActionService" autoConnect="no">
-                <url>http://www.ircad.fr/softwares/vr-render/Software.php</url>
-            </service>
-
-            <service uid="dynamicView" type="::gui::view::IView" impl="::guiQt::editor::DynamicView" autoConnect="yes">
-                <config>
-                    <appConfig id="SDBVRRender" title="SDB" closable="false">
-                        <parameters>
-                            <parameter replace="SERIESDB" by="seriesDB" />
-                            <parameter replace="ICON_PATH" by="${appIconPath}" />
-                            <parameter replace="DYNAMICVIEW_CHANNEL" by="dynamicView" />
-                        </parameters>
-                    </appConfig>
-                </config>
-            </service>
-
-
-            <service uid="action_fwMetrics" type="::fwGui::IActionSrv" impl="::monitor::action::fwMetrics" autoConnect="no" />
-            <service uid="action_MemInfo" type="::fwGui::IActionSrv" impl="::monitor::action::MemoryInfo" autoConnect="no" />
-            <service uid="action_incMemConsum" type="::fwGui::IActionSrv" impl="::monitor::action::MemoryConsumption" autoConnect="no">
-                <config mode="increase" value="256" />
-            </service>
-            <service uid="action_decMemConsum" type="::fwGui::IActionSrv" impl="::monitor::action::MemoryConsumption" autoConnect="no">
-                <config mode="decrease" />
-            </service>
-
-            <service uid="action_ClassFactoryRegistryInfo" type="::fwGui::IActionSrv" impl="::monitor::action::ClassFactoryRegistryInfo" autoConnect="no" />
-            <service uid="action_ComponentsTree" type="::fwGui::IActionSrv" impl="::monitor::action::ComponentsTree" autoConnect="no" />
-            <service uid="action_ChangeDumpStatus" type="::fwGui::IActionSrv" impl="::gui::action::SConfigLauncher" autoConnect="no">
-                <config>
-                    <appConfig id="DumpFrameConfig" />
-                </config>
-            </service>
-            <service uid="dumpAll" impl="::monitor::action::SDumpAll" type="::fwGui::IActionSrv" autoConnect="no" />
-
-            <proxy channel="dynamicView">
-                <slot>dynamicView/receive</slot>
-            </proxy>
-
-            <start uid="mainFrame" />
-        </object>
+        <object uid="seriesDB" type="::fwMedData::SeriesDB" />
+
+        <service uid="action_open" type="::uiIO::action::SSeriesDBMerger">
+            <inout key="seriesDB" uid="seriesDB" />
+            <IOSelectorSrvConfig name="SDBAtomsReaderIOSelectorConfig" />
+        </service>
+        <service uid="action_save" type="::gui::action::SStarter">
+            <start uid="SDBWriter" />
+        </service>
+        <service uid="SDBWriter" type="::uiIO::editor::SIOSelector">
+            <in key="seriesDB" uid="seriesDB" />
+            <type mode="writer" />
+            <selection mode="include" />
+            <addSelection service="::ioAtoms::SWriter" />
+            <config id="MDAtomsConfig" service="::ioAtoms::SWriter" />
+        </service>
+
+        <service uid="mainFrame" type="::gui::frame::SDefaultFrame">
+            <gui>
+                <frame>
+                    <name>${appName}</name>
+                    <icon>${appIconPath}</icon>
+                    <minSize width="800" height="600" />
+                </frame>
+                <menuBar />
+            </gui>
+            <registry>
+                <menuBar sid="menuBar" start="yes" />
+                <view sid="dynamicView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="menuBar" type="::gui::aspect::SDefaultMenuBar">
+            <gui>
+                <layout>
+                    <menu name="File" />
+                    <menu name="Help" />
+                </layout>
+            </gui>
+            <registry>
+                <menu sid="menu_file" start="yes" />
+                <menu sid="menu_help" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="menu_file" type="::gui::aspect::SDefaultMenu">
+            <gui>
+                <layout>
+                    <menuItem name="Open" shortcut="Ctrl+O" />
+                    <menuItem name="Save" shortcut="Ctrl+S" />
+                    <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_open" start="yes" />
+                <menuItem sid="action_save" start="yes" />
+                <menuItem sid="action_quit" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="menu_help" type="::gui::aspect::SDefaultMenu">
+            <gui>
+                <layout>
+                    <menuItem name="About" specialAction="ABOUT" />
+                    <menuItem name="Acknowledgments" />
+                    <separator />
+                    <menuItem name="VR-Render Website" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_about" start="yes" />
+                <menuItem sid="action_acknowledgments" start="yes" />
+                <menuItem sid="action_openBrowser" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="action_quit" type="::gui::action::SQuit" />
+
+        <service uid="action_about" type="::uiGeneric::action::SShowAbout">
+            <filename id="@BUNDLE_PREFIX@/VRRender_${appVersion}/about/about.html" />
+        </service>
+
+        <service uid="action_acknowledgments" type="::uiGeneric::action::SShowAbout">
+            <filename id="@BUNDLE_PREFIX@/VRRender_${appVersion}/documentations/ack.html"/>
+            <title>Acknowledgments</title>
+            <size width="500" height="600" />
+        </service>
+
+        <service uid="action_openBrowser" type="::uiGeneric::action::LaunchBrowserActionService">
+            <url>http://www.ircad.fr/softwares/vr-render/Software.php</url>
+        </service>
+
+        <service uid="dynamicView" type="::guiQt::editor::SDynamicView" autoConnect="yes">
+            <mainActivity id="SDBVRRender" closable="false" />
+            <parameters>
+                <parameter replace="SERIESDB" uid="seriesDB" />
+                <parameter replace="ICON_PATH" by="${appIconPath}" />
+                <parameter replace="DYNAMICVIEW_CHANNEL" uid="dynamicViewChannel" />
+                <parameter replace="PROGRESS_CHANNEL" uid="progressStatus" />
+            </parameters>
+        </service>
+
+        <service uid="progress_statusbar" type="::gui::editor::SJobBar" />
+
+        <connect channel="progressStatus">
+            <signal>SDBWriter/jobCreated</signal>
+            <slot>progress_statusbar/showJob</slot>
+        </connect>
+
+        <connect channel="dynamicViewChannel">
+            <slot>dynamicView/createTab</slot>
+        </connect>
+
+        <start uid="mainFrame" />
+        <start uid="progress_statusbar" />
 
     </config>
 </extension>
diff --git a/Apps/VRRender/rc/configurations/sdb.xml b/Apps/VRRender/rc/configurations/sdb.xml
index ba7f1c3..b69de14 100644
--- a/Apps/VRRender/rc/configurations/sdb.xml
+++ b/Apps/VRRender/rc/configurations/sdb.xml
@@ -1,127 +1,270 @@
 
-<extension implements="::fwServices::registry::AppConfig">
+<extension implements="::fwServices::registry::AppConfig2">
     <id>SDBVRRender</id>
-    <type>parameters</type>
     <parameters>
-        <param name="GENERIC_UID" />
         <param name="SERIESDB" />
         <param name="WID_PARENT" />
         <param name="DYNAMICVIEW_CHANNEL" default="channel" />
+        <param name="PROGRESS_CHANNEL" default="progressChannel" />
         <param name="ICON_PATH" />
     </parameters>
     <config>
 
-        <object type="::fwData::Composite">
-
-            <xi:include href="MenuAndViewConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
-
-            <item key="seriesDB">
-                <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" >
-                    <service uid="${GENERIC_UID}_action_import" type="::fwGui::IActionSrv" impl="::uiIO::action::SSeriesDBMerger" autoConnect="no">
-                        <IOSelectorSrvConfig name="IOSelectorServiceConfigVRRenderSeriesDBReader" />
-                    </service>
-                    <service uid="${GENERIC_UID}_selector" impl="::uiMedData::editor::SSelector" autoConnect="yes">
-                        <selectionId>${GENERIC_UID}_selections</selectionId>
-                    </service>
-                </object>
-            </item>
-
-            <item key="selections">
-                <object uid="${GENERIC_UID}_selections" type="::fwData::Vector">
-                    <service uid="${GENERIC_UID}_seriesViewer" type="::fwServices::IController" impl="::uiMedData::SSeriesViewer" autoConnect="yes">
-                        <parentView>${GENERIC_UID}_preview</parentView>
-                        <configs>
-                            <config id="2DSimpleConfig" type="::fwMedData::ImageSeries">
-                                <extract path="@image" pattern="imageID" />
-                            </config>
-                            <config id="3DSimpleConfig" type="::fwMedData::ModelSeries" />
-                        </configs>
-                    </service>
-                    <service uid="${GENERIC_UID}_action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
-                        <config>
-                            <parameters>
-                                <parameter replace="SERIESDB" by="seriesDB"  />
-                                <parameter replace="ICON_PATH" by="${ICON_PATH}" />
-                            </parameters>
-                            <filter>
-                                <mode>exclude</mode>
-                                <id>ImageSeriesExport</id>
-                                <id>ModelSeriesExport</id>
-                            </filter>
-                        </config>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_action_2DVisualization" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
-                        <config>
-                            <parameters>
-                                <parameter replace="SERIESDB" by="seriesDB"  />
-                                <parameter replace="ICON_PATH" by="${ICON_PATH}" />
-                            </parameters>
-                            <filter>
-                                <mode>include</mode>
-                                <id>2DVisualization</id>
-                            </filter>
-                        </config>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_action_3DVisualization" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
-                        <config>
-                            <parameters>
-                                <parameter replace="SERIESDB" by="seriesDB"  />
-                                <parameter replace="ICON_PATH" by="${ICON_PATH}" />
-                            </parameters>
-                            <filter>
-                                <mode>include</mode>
-                                <id>3DVisualization</id>
-                            </filter>
-                        </config>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_action_volumeRendering" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
-                        <config>
-                            <parameters>
-                                <parameter replace="SERIESDB" by="seriesDB"  />
-                                <parameter replace="ICON_PATH" by="${ICON_PATH}" />
-                            </parameters>
-                            <filter>
-                                <mode>include</mode>
-                                <id>VolumeRendering</id>
-                            </filter>
-                        </config>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_action_exportSeries" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
-                        <config>
-                            <mode>immediate</mode>
-                            <parameters>
-                            </parameters>
-                            <filter>
-                                <mode>include</mode>
-                                <id>ImageSeriesExport</id>
-                                <id>ModelSeriesExport</id>
-                            </filter>
-                        </config>
-                    </service>
-
-                </object>
-            </item>
-
-            <connect>
-                <signal>${GENERIC_UID}_selector/seriesDoubleClicked</signal>
-                <slot>${GENERIC_UID}_action_newActivity/launchSeries</slot>
-            </connect>
-
-            <proxy channel="${DYNAMICVIEW_CHANNEL}">
-                <signal>${GENERIC_UID}_action_newActivity/activityLaunched</signal>
-                <signal>${GENERIC_UID}_action_2DVisualization/activityLaunched</signal>
-                <signal>${GENERIC_UID}_action_3DVisualization/activityLaunched</signal>
-                <signal>${GENERIC_UID}_action_volumeRendering/activityLaunched</signal>
-            </proxy>
-
-            <start uid="${GENERIC_UID}_mainview" />
-            <start uid="${GENERIC_UID}_seriesViewer" />
-        </object>
+        <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+        <object uid="selections" type="::fwData::Vector" />
+
+        <service uid="mainview" type="::gui::view::SDefaultView" autoConnect="yes">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view caption="Information" align="center" minWidth="200" />
+                    <view caption="Preview" align="bottom" minHeight="200" />
+                    <view caption="Activity creator" align="bottom" minHeight="400" visible="no" />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view sid="selector" start="yes" />
+                <view wid="preview" />
+                <view sid="activityCreator" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar">
+            <gui>
+                <layout>
+                    <menuItem name="Import" icon="@BUNDLE_PREFIX@/media_0-1/icons/Import.svg" />
+                    <menuItem name="Export" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
+                    <menuItem name="Launch activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Launch_activity.svg" />
+                    <menuItem name="Create a new activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/CreateActivity.svg" />
+                    <separator />
+                    <menuItem name="2D visualization" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-2D.png" />
+                    <menuItem name="3D visualization" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png" />
+                    <menuItem name="Volume rendering" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-VR.png" />
+                    <separator />
+                    <menuItem name="DICOM PACS Reader" icon="@BUNDLE_PREFIX@/media_0-1/icons/Pull.svg" />
+                    <menuItem name="DICOM PACS Writer" icon="@BUNDLE_PREFIX@/media_0-1/icons/Push.svg" />
+                    <menuItem name="DICOM Filtering" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-DICOM-Filtering.svg" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_import" start="yes" />
+                <menuItem sid="action_exportSeries" start="yes" />
+                <menuItem sid="action_newActivity" start="yes" />
+                <menuItem sid="action_createActivity" start="yes" />
+                <menuItem sid="action_2DVisualization" start="yes" />
+                <menuItem sid="action_3DVisualization" start="yes" />
+                <menuItem sid="action_volumeRendering" start="yes" />
+                <menuItem sid="action_dicomPacsReader" start="yes" />
+                <menuItem sid="action_dicomPacsWriter" start="yes" />
+                <menuItem sid="action_dicomFiltering" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="action_import" type="::uiIO::action::SSeriesDBMerger">
+            <in key="seriesDB" uid="${SERIESDB}" />
+            <IOSelectorSrvConfig name="SDBReaderIOSelectorConfig" />
+        </service>
+        <service uid="selector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="seriesDB" uid="${SERIESDB}" />
+            <inout key="selection" uid="selections" />
+        </service>
+
+        <service uid="activityCreator" type="::uiMedData::editor::SActivityWizard">
+            <inout key="seriesDB" uid="${SERIESDB}" />
+            <ioSelectorConfig>FullSDBReaderIOSelectorConfig</ioSelectorConfig>
+            <icons>
+                <icon type="::fwMedData::ImageSeries" icon="@BUNDLE_PREFIX@/media_0-1/icons/ImageSeries.svg" />
+                <icon type="::fwMedData::ModelSeries" icon="@BUNDLE_PREFIX@/media_0-1/icons/ModelSeries.svg" />
+            </icons>
+        </service>
+
+        <service uid="seriesViewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <parentView wid="preview" />
+            <configs>
+                <config id="2DSimpleConfig2" type="::fwMedData::ImageSeries">
+                    <extract path="@image" pattern="imageID" />
+                </config>
+                <config id="3DSimpleConfig2" type="::fwMedData::ModelSeries" />
+                <config id="ActivityCreatorConfig" type="::fwMedData::ActivitySeries">
+                    <parameter replace="SERIESDB" uid="${SERIESDB}" />
+                </config>
+            </configs>
+        </service>
+        <service uid="action_newActivity" type="::activities::action::SActivityLauncher" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="SERIESDB" uid="${SERIESDB}" />
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                </parameters>
+                <filter>
+                    <mode>exclude</mode>
+                    <id>ImageSeriesExport2</id>
+                    <id>ModelSeriesExport2</id>
+                    <id>SDBVRRender</id>
+                </filter>
+            </config>
+        </service>
+
+        <service uid="action_2DVisualization" type="::activities::action::SActivityLauncher" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="SERIESDB" uid="${SERIESDB}" />
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>2DVisualization</id>
+                </filter>
+            </config>
+        </service>
+
+
+        <service uid="action_3DVisualization" type="::activities::action::SActivityLauncher" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="SERIESDB" uid="${SERIESDB}" />
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>3DVisualization</id>
+                </filter>
+            </config>
+        </service>
+
+        <service uid="action_volumeRendering" type="::activities::action::SActivityLauncher" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="SERIESDB" uid="${SERIESDB}" />
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>VolumeRendering</id>
+                </filter>
+            </config>
+        </service>
+
+        <service uid="action_dicomPacsReader" type="::activities::action::SActivityLauncher">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="SERIESDB" by="${SERIESDB}"  />
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                    <parameter replace="APP_NAME" by="VRRender" />
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>DicomPacsReader</id>
+                </filter>
+            </config>
+        </service>
+
+        <service uid="action_dicomPacsWriter" type="::activities::action::SActivityLauncher">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                    <parameter replace="APP_NAME" by="VRRender" />
+                    <parameter replace="PROGRESS_CHANNEL" uid="progressStatus" />
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>DicomPacsWriter</id>
+                </filter>
+            </config>
+        </service>
+
+        <service uid="action_dicomFiltering" type="::activities::action::SActivityLauncher">
+            <in key="series" uid="selections" />
+            <config>
+                <parameters>
+                    <parameter replace="SERIESDB" by="${SERIESDB}"  />
+                    <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                    <parameter replace="PROGRESS_CHANNEL" uid="progressStatus" />
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>DicomFiltering</id>
+                </filter>
+            </config>
+        </service>
+
+        <service uid="action_createActivity" type="::activities::action::SCreateActivity">
+            <in key="series" uid="selections" />
+            <filter>
+                <mode>exclude</mode>
+                <id>ImageSeriesExport2</id>
+                <id>ModelSeriesExport2</id>
+                <id>SDBVRRender</id>
+            </filter>
+        </service>
+
+        <service uid="action_exportSeries" type="::activities::action::SActivityLauncher" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <config>
+                <mode>immediate</mode>
+                <parameters>
+                </parameters>
+                <filter>
+                    <mode>include</mode>
+                    <id>ImageSeriesExport2</id>
+                    <id>ModelSeriesExport2</id>
+                </filter>
+            </config>
+        </service>
+
+        <connect>
+            <signal>selector/seriesDoubleClicked</signal>
+            <slot>action_newActivity/launchSeries</slot>
+        </connect>
+
+        <connect channel="hide_activity_creator_channel">
+            <signal>activityCreator/activityCreated</signal>
+            <signal>activityCreator/activityUpdated</signal>
+            <slot>activityCreator/hide</slot>
+        </connect>
+
+        <connect channel="create_activity_channel">
+            <signal>action_createActivity/activityIDSelected</signal>
+            <slot>activityCreator/show</slot>
+            <slot>activityCreator/createActivity</slot>
+        </connect>
+
+        <connect channel="update_activity_channel">
+            <signal>action_createActivity/activitySelected</signal>
+            <slot>activityCreator/show</slot>
+            <slot>activityCreator/updateActivity</slot>
+        </connect>
+
+        <connect channel="${PROGRESS_CHANNEL}">
+            <signal>action_import/jobCreated</signal>
+        </connect>
+
+        <connect channel="${DYNAMICVIEW_CHANNEL}">
+            <signal>action_newActivity/activityLaunched</signal>
+            <signal>action_2DVisualization/activityLaunched</signal>
+            <signal>action_3DVisualization/activityLaunched</signal>
+            <signal>action_volumeRendering/activityLaunched</signal>
+            <signal>action_dicomPacsReader/activityLaunched</signal>
+            <signal>action_dicomPacsWriter/activityLaunched</signal>
+            <signal>action_dicomFiltering/activityLaunched</signal>
+        </connect>
+
+        <connect>
+            <signal>activityCreator/canceled</signal>
+            <slot>activityCreator/hide</slot>
+        </connect>
+
+        <start uid="mainview" />
+        <start uid="seriesViewer" />
 
     </config>
 </extension>
-
diff --git a/Apps/VRRender/rc/documentations/ack.html b/Apps/VRRender/rc/documentations/ack.html
index c94cc18..f625978 100644
--- a/Apps/VRRender/rc/documentations/ack.html
+++ b/Apps/VRRender/rc/documentations/ack.html
@@ -64,7 +64,7 @@ Operating system supported  (32 and 64 bits):
 
 <br/><i>fw4spl Team and special thanks to</i>
 <br/><img src="ircad_150.png" />
-<br/><a href="http://code.google.com/p/fw4spl" target="_blank" >Web Home : fw4spl and VR-Render</a> 
+<br/><a href="https://github.com/fw4spl-org" target="_blank" >Web Home : fw4spl and VR-Render</a>
 
 </p>
 
diff --git a/Apps/VRRender/rc/plugin.xml b/Apps/VRRender/rc/plugin.xml
index 6bbdb7d..1b6bb3c 100644
--- a/Apps/VRRender/rc/plugin.xml
+++ b/Apps/VRRender/rc/plugin.xml
@@ -1,6 +1,11 @@
-<plugin id="VRRender">
+<plugin id="VRRender" version="@DASH_VERSION@">
 
     <requirement id="servicesReg" />
+    <requirement id="dataReg" />
+    <requirement id="patchMedicalData" />
+    <requirement id="filterVRRender" />
+    <requirement id="activities" />
+    <requirement id="preferences" />
 
     <xi:include href="configurations/VRRenderBase.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
     <xi:include href="configurations/sdb.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
@@ -8,95 +13,21 @@
     <extension implements="::fwServices::registry::AppConfigParameters">
         <id>VRRenderAppBase</id>
         <parameters>
-            <param name="appName" value="VRRender 0.9.6" />
-            <param name="appIconPath" value="Bundles/VRRender_0-9/vrrender.ico" />
+            <param name="appName" value="VRRender 0.9.7" />
+            <param name="appIconPath" value="@BUNDLE_PREFIX@/VRRender_0-9/vrrender.ico" />
+            <param name="appVersion" value="0-9" />
         </parameters>
     </extension>
 
-    <extension implements="::fwServices::registry::ServiceConfig">
-        <id>IOSelectorServiceConfigVRRenderSeriesDBReader</id>
-        <service>::uiIO::editor::IOSelectorService</service>
-        <desc>IOSelectorService config for VRRender SeriesDB reader</desc>
-        <config>
-            <type mode="reader" />
-            <selection mode="exclude" />
-            <addSelection service="::ioAtoms::SReader" />
-        </config>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceConfig">
-        <id>SDBOpenIOSelectorConfig</id>
-        <service>::uiIO::editor::IOSelectorService</service>
-        <desc>"Open" action's IOSelector config</desc>
-        <config>
-            <type mode="reader" />
-            <selection mode="include" />
-            <addSelection service="::ioAtoms::SReader" />
-            <config id="MDAtomsConfig" service="::ioAtoms::SReader" />
-        </config>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceConfig">
-        <id>MDAtomsConfig</id>
-        <desc>reader/writer config to read/write an atom representing a medical data</desc>
-        <config>
-            <patcher context="MedicalData" version="V2" />
-            <filter>VRRenderMedicalDataV2</filter>
-         </config>
-     </extension>
-
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>ExportSelection</id>
-        <type>parameters</type>
-        <parameters>
-            <param name="GENERIC_UID" />
-            <param name="selection" />
-        </parameters>
-        <config>
-            <!-- <object uid="${selection}" type="::fwData::Vector" src="ref"> -->
-            <object uid="${selection}" src="ref">
-                <service uid="${GENERIC_UID}_export_selection" impl="::uiIO::editor::IOSelectorService" autoConnect="yes">
-                    <type mode="writer" />
-                    <!-- <selection mode="include" /> -->
-                    <!-- <addSelection service="::ioAtoms::SReader" /> -->
-                </service>
-                <start uid="${GENERIC_UID}_export_selection" />
-                <update uid="${GENERIC_UID}_export_selection" />
-            </object>
-        </config>
-    </extension>
-
     <extension implements="::fwActivities::registry::Activities">
-        <id>ImageSeriesExport</id>
-        <title>ImageSeries Export</title>
-        <desc>ImageSeries Export</desc>
+        <id>SDBVRRender</id>
+        <title>SDB</title>
+        <desc>Series Selector</desc>
         <icon>NONE</icon>
-        <requirements>
-            <requirement name="series" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1" />
-        </requirements>
-        <builder>::fwActivities::builder::ActivitySeries</builder>
-        <appConfig id="ExportSelection">
-            <parameters>
-                <parameter replace="selection" by="@values.series" />
-            </parameters>
+        <requirements />
+        <appConfig id="SDBVRRender">
+            <parameters />
         </appConfig>
     </extension>
 
-    <extension implements="::fwActivities::registry::Activities">
-        <id>ModelSeriesExport</id>
-        <title>ModelSeries Export</title>
-        <desc>ModelSeries Export</desc>
-        <icon>NONE</icon>
-        <requirements>
-            <requirement name="series" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1" />
-        </requirements>
-        <builder>::fwActivities::builder::ActivitySeries</builder>
-        <appConfig id="ExportSelection">
-            <parameters>
-                <parameter replace="selection" by="@values.series" />
-            </parameters>
-        </appConfig>
-    </extension>
-
-
 </plugin>
diff --git a/Apps/VRRender/rc/profile.xml b/Apps/VRRender/rc/profile.xml
deleted file mode 100644
index 1886a3e..0000000
--- a/Apps/VRRender/rc/profile.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<profile name="VRRender" version="0.9.0">
-
-    <activate id="dataReg" version="0-1" />
-    <activate id="servicesReg" version="0-1" />
-
-    <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
-
-    <activate id="io" version="0-1" />
-    <activate id="ioAtoms" version="0-1" />
-    <activate id="patchMedicalData" version="0-1" />
-    
-    <activate id="ioITK" version="0-1" />
-    <activate id="ioVTK" version="0-1" />
-    <activate id="ioVtkGdcm" version="0-1" />
-    <activate id="uiIO" version="0-1" />
-    <activate id="uiGenericQt" version="0-1" />
-    <activate id="uiMedDataQt" version="0-1" />
-    <activate id="uiImageQt" version="0-1" />
-    <activate id="uiReconstructionQt" version="0-1" />
-    <activate id="uiMeasurement" version="0-1" />
-    <activate id="uiMeasurementQt" version="0-1" />
-    <activate id="uiVisu" version="0-1" />
-    <activate id="uiVisuQt" version="0-1" />
-    <activate id="uiTF" version="0-1" />
-
-    <activate id="ctrlMemory" version="0-1" />
-    <activate id="monitor" version="0-1" />
-    <activate id="memory" version="0-1" />
-    <activate id="monitorQt" version="0-1" />
-
-
-    <activate id="scene2D" version="0-1" />
-
-    <activate id="visu" version="0-1" />
-    <activate id="visuVTK" version="0-1" />
-    <activate id="visuVTKQt" version="0-1" />
-    <activate id="visuVTKAdaptor" version="0-1" />
-    <activate id="visuVTKVRAdaptor" version="0-1" />
-
-    <activate id="activities" version="0-1" />
-    <activate id="ctrlSelection" version="0-1" />
-
-    <activate id="VRRender" />
-    <activate id="appXml" version="0-1" >
-        <param id="config" value="VRRenderBase" />
-        <param id="parameters" value="VRRenderAppBase" />
-    </activate>
-
-    <activate id="2DVisualizationActivity" version="0-1" />
-    <activate id="3DVisualizationActivity" version="0-1" />
-    <activate id="blendActivity"           version="0-1" />
-    <activate id="volumeRenderingActivity" version="0-1" />
-    
-    <activate id="filterVRRender" version="0-1" />
-
-    <start id="filterVRRender" />
-    <start id="memory" />
-    <start id="patchMedicalData"/>
-    <start id="scene2D" />
-    <start id="visuVTK" />
-    <start id="visuVTKQt" />
-    <start id="guiQt" />
-    <start id="activities" />
-    <start id="appXml" />
-
-</profile>
diff --git a/Apps/VRRender/rc/vrrender.icns b/Apps/VRRender/rc/vrrender.icns
new file mode 100644
index 0000000..68e75c5
Binary files /dev/null and b/Apps/VRRender/rc/vrrender.icns differ
diff --git a/Bundles/LeafActivity/2DVisualizationActivity/bin/build.options b/Bundles/LeafActivity/2DVisualizationActivity/bin/build.options
deleted file mode 100755
index 3d6284f..0000000
--- a/Bundles/LeafActivity/2DVisualizationActivity/bin/build.options
+++ /dev/null
@@ -1,14 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = [
-    'gui_0-1'            ,
-    'guiQt_0-1'          ,
-    'uiMeasurement_0-1'  ,
-    'uiMeasurementQt_0-1',
-    'ctrlSelection_0-1'  ,
-    'uiImageQt_0-1'      ,
-    'uiVisu_0-1'         ,
-    'uiVisuQt_0-1'       ,
-    'visuVTKAdaptor_0-1' ,
-    'media_0-1'          ,
-]
diff --git a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegato.xml b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegato.xml
index b347032..ffd64fa 100644
--- a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegato.xml
+++ b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegato.xml
@@ -1,18 +1,19 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>2DNegato</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
         <param name="imageUid" />
         <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
         <param name="patient_name" default="" />
+        <param name="IMAGE_LOCATIONS" default="" />
+        <param name="CrossTypeChannel"   default="crossTypeChannel" />
     </parameters>
     <config>
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -27,7 +28,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_multiView_negato_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_multiView_negato_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="horizontal" />
@@ -43,29 +44,21 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_snapshotNegatoEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-                <snap>
-                    <scene uid="${GENERIC_UID}_negato" />
-                </snap>
-            </service>
+            <service uid="${GENERIC_UID}_snapshotNegatoEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
 
             <!-- GENERIC SCENE DEFINITION -->
             <item key="visuConfig">
                 <object uid="${GENERIC_UID}_VisuComposite" type="::fwData::Composite">
 
                     <!-- Generic Scene Negato -->
-                    <service uid="${GENERIC_UID}_negato" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
+                    <service uid="${GENERIC_UID}_negato" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
                         <scene>
 
                             <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
 
                             <renderer id="default" background="0.0" />
 
-                            <adaptor id="renderNegato" class="::visuVTKAdaptor::Render" objectId="self">
-                                <config renderer="default" />
-                            </adaptor>
-
-                            <adaptor id="snapshot" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                            <adaptor id="snapshot" uid="${GENERIC_UID}_snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
                                 <config renderer="default" />
                             </adaptor>
 
@@ -73,7 +66,7 @@
                                 <config renderer="default" style="InteractorStyle2DForNegato" />
                             </adaptor>
 
-                            <adaptor id="MPRNegato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
+                            <adaptor id="MPRNegato" uid="${GENERIC_UID}_MPRNegato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
                                 <config renderer="default" picker="negatodefault" mode="2d" slices="1" sliceIndex="${orientation}" />
                             </adaptor>
 
@@ -81,7 +74,14 @@
                                 <config renderer="default" picker="negatodefault" text="" />
                             </adaptor>
 
-                            <adaptor id="multiDistances" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
+                            <adaptor id="imageSliceOrientationText" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="imageKey">
+                                <config renderer="default">
+                                    <locations>${IMAGE_LOCATIONS}</locations>
+                                    <initialOrientation>${orientation}</initialOrientation>
+                                </config>
+                            </adaptor>
+
+                            <adaptor id="multiDistances" uid="${GENERIC_UID}_multiDistancesUID" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
                                 <config filter="true" renderer="default" picker="negatodefault" />
                             </adaptor>
 
@@ -92,6 +92,20 @@
                             <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageKey">
                                 <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
                             </adaptor>
+
+                            <connect>
+                                <signal>${GENERIC_UID}_snapshotNegatoEditor/snapped</signal>
+                                <slot>${GENERIC_UID}_snapshotUID/snap</slot>
+                            </connect>
+                            
+                            <connect waitForKey="imageKey">
+                                <signal>${GENERIC_UID}_distanceNegatoEditor/distanceRequested</signal>
+                                <slot>${GENERIC_UID}_multiDistancesUID/createDistance</slot>
+                            </connect>
+                            
+                            <proxy channel="${CrossTypeChannel}" waitForKey="imageKey">
+                                <slot>${GENERIC_UID}_MPRNegato/setCrossScale</slot>
+                            </proxy>
                         </scene>
                     </service>
 
diff --git a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegatoWithTF.xml b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegatoWithTF.xml
index 51b898c..e5bf769 100644
--- a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegatoWithTF.xml
+++ b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DNegatoWithTF.xml
@@ -1,6 +1,5 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>2DNegatoWithTF</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
@@ -9,12 +8,13 @@
         <param name="TFSelectionsUid" />
         <param name="patient_name" default="" />
         <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+        <param name="CrossTypeChannel" default="crossTypeChannel"/>
     </parameters>
     <config>
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -29,7 +29,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_multiView_negato_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_multiView_negato_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="horizontal" />
@@ -45,29 +45,21 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_snapshotNegatoEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-                <snap>
-                    <scene uid="${GENERIC_UID}_negato" />
-                </snap>
-            </service>
+            <service uid="${GENERIC_UID}_snapshotNegatoEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
 
             <!-- GENERIC SCENE DEFINITION -->
             <item key="visuConfig">
                 <object uid="${GENERIC_UID}_VisuComposite" type="::fwData::Composite">
 
                     <!-- Generic Scene Negato -->
-                    <service uid="${GENERIC_UID}_negato" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
+                    <service uid="${GENERIC_UID}_negato" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
                         <scene>
 
                             <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
 
                             <renderer id="default" background="0.0" />
 
-                            <adaptor id="renderNegato" class="::visuVTKAdaptor::Render" objectId="self">
-                                <config renderer="default" />
-                            </adaptor>
-
-                            <adaptor id="snapshot" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                            <adaptor id="snapshot" uid="${GENERIC_UID}_snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
                                 <config renderer="default" />
                             </adaptor>
 
@@ -75,15 +67,15 @@
                                 <config renderer="default" style="InteractorStyle2DForNegato" />
                             </adaptor>
 
-                            <adaptor id="MPRNegato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
-                                <config renderer="default" picker="negatodefault" mode="2d" slices="1" sliceIndex="${orientation}" selectedTFKey="${selectedTFKey}" tfSelectionFwID="${TFSelectionsUid}"/>
+                            <adaptor id="MPRNegato" uid="${GENERIC_UID}_negatoMPRUID" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
+                                <config renderer="default" picker="negatodefault" mode="2d" slices="1" sliceIndex="${orientation}" selectedTFKey="${selectedTFKey}" tfSelectionFwID="${TFSelectionsUid}" />
                             </adaptor>
 
                             <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="imageKey">
-                                <config renderer="default" picker="negatodefault" text="" selectedTFKey="${selectedTFKey}" tfSelectionFwID="${TFSelectionsUid}"/>
+                                <config renderer="default" picker="negatodefault" text="" selectedTFKey="${selectedTFKey}" tfSelectionFwID="${TFSelectionsUid}" />
                             </adaptor>
 
-                            <adaptor id="multiDistances" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
+                            <adaptor id="multiDistances"  uid="${GENERIC_UID}_multiDistancesUID" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
                                 <config filter="true" renderer="default" picker="negatodefault" />
                             </adaptor>
 
@@ -95,6 +87,26 @@
                                 <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
                             </adaptor>
 
+                            <adaptor id="imageSliceOrientationText" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="imageKey">
+                                <config renderer="default">
+                                    <locations>default</locations>
+                                    <initialOrientation>${orientation}</initialOrientation>
+                                </config>
+                            </adaptor>
+
+                            <connect>
+                                <signal>${GENERIC_UID}_snapshotNegatoEditor/snapped</signal>
+                                <slot>${GENERIC_UID}_snapshotUID/snap</slot>
+                            </connect>
+                            
+                            <connect waitForKey="imageKey">
+                                <signal>${GENERIC_UID}_distanceNegatoEditor/distanceRequested</signal>
+                                <slot>${GENERIC_UID}_multiDistancesUID/createDistance</slot>
+                            </connect>
+                            
+                            <proxy channel="${CrossTypeChannel}" waitForKey="imageKey">
+                                <slot>${GENERIC_UID}_negatoMPRUID/setCrossScale</slot>
+                            </proxy>
                         </scene>
                     </service>
 
diff --git a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DSimpleConfig.xml b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DSimpleConfig.xml
new file mode 100644
index 0000000..6fcf5d3
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DSimpleConfig.xml
@@ -0,0 +1,73 @@
+<extension implements="::fwServices::registry::AppConfig">
+    <id>2DSimpleConfig</id>
+    <parameters>
+        <param name="GENERIC_UID" />
+        <param name="WID_PARENT" />
+        <param name="objectID" />
+        <param name="imageID" />
+        <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+    </parameters>
+    <config>
+        <object type="::fwData::Composite">
+
+            <service uid="${GENERIC_UID}_mainview" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                <gui>
+                    <layout type="::fwGui::CardinalLayoutManager">
+                        <view align="center" />
+                        <view align="bottom" minWidth="200" minHeight="30" resizable="no" />
+                    </layout>
+                </gui>
+                <registry>
+                    <parent wid="${WID_PARENT}" />
+                    <view sid="${GENERIC_UID}_gs" start="yes" />
+                    <view sid="${GENERIC_UID}_sliderIndexEditor" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_gs" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                <scene>
+                    <picker id="picker" vtkclass="fwVtkCellPicker" />
+                    <renderer id="default" background="0.0" />
+                    <adaptor id="interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                        <config renderer="default" style="InteractorStyle2DForNegato" />
+                    </adaptor>
+                    <adaptor id="imageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                        <config renderer="default" picker="picker" text="" color="#FFFFFF" />
+                    </adaptor>
+                    <adaptor id="seriesAdaptor" class="::visuVTKAdaptor::ImageSeries" objectId="imageSeries">
+                        <config renderer="default" picker="picker" autoresetcamera="yes" mode="2D" slices="1" sliceIndex="${orientation}" />
+                    </adaptor>
+                    <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageSeries">
+                        <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
+                    </adaptor>
+                    <adaptor id="imageSliceOrientationText" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="image">
+                        <config renderer="default">
+                            <locations>default</locations>
+                            <initialOrientation>${orientation}</initialOrientation>
+                        </config>
+                    </adaptor>
+                </scene>
+            </service>
+
+            <item key="imageSeries">
+                <object type="::fwMedData::ImageSeries" uid="${objectID}" src="ref">
+                </object>
+            </item>
+
+            <item key="image">
+                <object type="::fwData::Image" uid="${imageID}" src="ref">
+                    <service uid="${GENERIC_UID}_imageDumpLocker" impl="::ctrlMemory::LockDumpSrv" type="::fwServices::IController" autoConnect="no" />
+                    <service uid="${GENERIC_UID}_medicalImgConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
+                    <service uid="${GENERIC_UID}_sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                        <sliceIndex>${orientation}</sliceIndex>
+                    </service>
+                </object>
+            </item>
+
+            <start uid="${GENERIC_UID}_imageDumpLocker" />
+            <start uid="${GENERIC_UID}_medicalImgConverter" />
+            <start uid="${GENERIC_UID}_mainview" />
+        </object>
+    </config>
+</extension>
+
diff --git a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DVisualization.xml b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DVisualization.xml
index bac596a..6a350e5 100644
--- a/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DVisualization.xml
+++ b/Bundles/LeafActivity/2DVisualizationActivity/rc/configurations/2DVisualization.xml
@@ -1,6 +1,5 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>2DVisualization</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
@@ -12,7 +11,7 @@
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::CardinalLayoutManager">
                         <view caption="Negato1" align="center" />
@@ -30,25 +29,25 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
+            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
                 <gui>
                     <layout>
-                        <menuItem name="New landmark" icon="Bundles/media_0-1/icons/Add-landmark.png" />
-                        <menuItem name="Remove landmark" icon="Bundles/media_0-1/icons/Remove-landmark.png" />
-                        <menuItem name="Load landmark" icon="Bundles/media_0-1/icons/Load-landmark.png" />
-                        <menuItem name="Save landmark" icon="Bundles/media_0-1/icons/Save-landmark.png" />
-                        <menuItem name="Focus landmark" icon="Bundles/media_0-1/icons/Find-landmark.png" />
-                        <menuItem name="Hide/Show landmark" icon="Bundles/media_0-1/icons/View-landmark.png" />
+                        <menuItem name="New landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Add-landmark.png" />
+                        <menuItem name="Remove landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Remove-landmark.png" />
+                        <menuItem name="Load landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Load-landmark.png" />
+                        <menuItem name="Save landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Save-landmark.png" />
+                        <menuItem name="Focus landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Find-landmark.png" />
+                        <menuItem name="Hide/Show landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/View-landmark.png" />
                         <separator />
-                        <menuItem name="Add distance" icon="Bundles/media_0-1/icons/distance.png" />
-                        <menuItem name="Remove distance" icon="Bundles/media_0-1/icons/RemoveDistance.png" />
-                        <menuItem name="Hide distance" icon="Bundles/media_0-1/icons/HideDistance.png" style="check" />
+                        <menuItem name="Add distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/distance.png" />
+                        <menuItem name="Remove distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/RemoveDistance.png" />
+                        <menuItem name="Hide distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideDistance.png" style="check" />
                         <separator />
-                        <menuItem name="Hide cross" icon="Bundles/media_0-1/icons/HideCross.png" style="radio" />
-                        <menuItem name="Show normal cross" icon="Bundles/media_0-1/icons/NormalCross.png" style="radio" />
-                        <menuItem name="Show full cross" icon="Bundles/media_0-1/icons/FullCross.png" style="radio" />
+                        <menuItem name="Hide cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideCross.png" style="radio" />
+                        <menuItem name="Show normal cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/NormalCross.png" style="radio" />
+                        <menuItem name="Show full cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/FullCross.png" style="radio" />
                         <separator />
-                        <menuItem name="Export Activity" icon="Bundles/media_0-1/icons/Export.svg"  />
+                        <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
                     </layout>
                 </gui>
                 <registry>
@@ -75,7 +74,7 @@
                     </service>
                 </object>
             </item>
-            
+
             <item key="activitySeries">
                 <object uid="${AS_UID}" src="ref" type="::fwMedData::ActivitySeries" />
             </item>
@@ -86,11 +85,12 @@
 
                     <service uid="${GENERIC_UID}_cfgNegato1" impl="::fwServices::SConfigController" autoConnect="no">
                         <config>
-                            <appConfig id="2DNegato" >
+                            <appConfig id="2DNegato">
                                 <parameters>
-                                    <parameter replace="imageUid" by="self"  />
-                                    <parameter replace="orientation" by="axial"  />
-                                    <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato1"  />
+                                    <parameter replace="imageUid" by="self" />
+                                    <parameter replace="orientation" by="axial" />
+                                    <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato1" />
+                                    <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                                 </parameters>
                             </appConfig>
                         </config>
@@ -98,11 +98,12 @@
 
                     <service uid="${GENERIC_UID}_cfgNegato2" impl="::fwServices::SConfigController" autoConnect="no">
                         <config>
-                            <appConfig id="2DNegato" >
+                            <appConfig id="2DNegato">
                                 <parameters>
-                                    <parameter replace="imageUid" by="self"  />
-                                    <parameter replace="orientation" by="frontal"  />
-                                    <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato2"  />
+                                    <parameter replace="imageUid" by="self" />
+                                    <parameter replace="orientation" by="frontal" />
+                                    <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato2" />
+                                    <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                                 </parameters>
                             </appConfig>
                         </config>
@@ -110,11 +111,12 @@
 
                     <service uid="${GENERIC_UID}_cfgNegato3" impl="::fwServices::SConfigController" autoConnect="no">
                         <config>
-                            <appConfig id="2DNegato" >
+                            <appConfig id="2DNegato">
                                 <parameters>
-                                    <parameter replace="imageUid" by="self"  />
-                                    <parameter replace="orientation" by="sagittal"  />
-                                    <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato3"  />
+                                    <parameter replace="imageUid" by="self" />
+                                    <parameter replace="orientation" by="sagittal" />
+                                    <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato3" />
+                                    <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                                 </parameters>
                             </appConfig>
                         </config>
@@ -143,6 +145,12 @@
                 </object>
             </item>
 
+            <proxy channel="crossTypeChannel">
+                <signal>${GENERIC_UID}_ActionHideCross/crossTypeModified</signal>
+                <signal>${GENERIC_UID}_ActionShowNormalCross/crossTypeModified</signal>
+                <signal>${GENERIC_UID}_ActionShowFullCross/crossTypeModified</signal>
+            </proxy>
+
 
             <!-- START AND STOP SERVICES -->
             <start uid="${GENERIC_UID}_mainView" />
diff --git a/Bundles/LeafActivity/2DVisualizationActivity/rc/plugin.xml b/Bundles/LeafActivity/2DVisualizationActivity/rc/plugin.xml
index cfaa708..ce0ad56 100644
--- a/Bundles/LeafActivity/2DVisualizationActivity/rc/plugin.xml
+++ b/Bundles/LeafActivity/2DVisualizationActivity/rc/plugin.xml
@@ -1,8 +1,7 @@
-<plugin id="2DVisualizationActivity">
+<plugin id="2DVisualizationActivity" version="@DASH_VERSION@" >
 
     <requirement id="servicesReg" />
     <requirement id="gui" />
-    <requirement id="guiQt" />
     <requirement id="uiMeasurement" />
     <requirement id="uiMeasurementQt" />
     <requirement id="ctrlSelection" />
@@ -15,14 +14,17 @@
     <xi:include href="configurations/2DVisualization.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
     <xi:include href="configurations/2DNegato.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
     <xi:include href="configurations/2DNegatoWithTF.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/2DSimpleConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
 
     <extension implements="::fwActivities::registry::Activities">
         <id>2DVisualization</id>
         <title>2D Visu</title>
-        <desc>2D visualization activity</desc>
-        <icon>Bundles/media_0-1/icons/icon-2D.png</icon>
+        <desc>Activity to display an image in 2D.</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-2D.png</icon>
         <requirements>
-            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1" />
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1">
+                <desc>Image to display.</desc>
+            </requirement>
         </requirements>
         <builder>::fwActivities::builder::ActivitySeries</builder>
         <appConfig id="2DVisualization">
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Bundles/LeafActivity/2DVisualizationActivity2/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Bundles/LeafActivity/2DVisualizationActivity2/CMakeLists.txt
diff --git a/Bundles/LeafActivity/2DVisualizationActivity2/Properties.cmake b/Bundles/LeafActivity/2DVisualizationActivity2/Properties.cmake
new file mode 100644
index 0000000..dc9a22c
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/Properties.cmake
@@ -0,0 +1,17 @@
+
+set( NAME 2DVisualizationActivity2 )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    gui
+    guiQt
+    uiMeasurement
+    uiMeasurementQt
+    ctrlSelection
+    uiImageQt
+    uiVisu
+    uiVisuQt
+    visuVTKAdaptor
+    visuVTKQt
+    media )
diff --git a/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DNegato.xml b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DNegato.xml
new file mode 100644
index 0000000..51af1ba
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DNegato.xml
@@ -0,0 +1,126 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>2DNegato</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="image" />
+        <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+        <param name="patient_name" default="" />
+        <param name="IMAGE_LOCATIONS" default="" />
+        <param name="CrossTypeChannel"   default="crossTypeChannel" />
+    </parameters>
+    <config>
+
+        <object uid="${image}" type="::fwData::Image" src="ref" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="1" />
+                    <view proportion="0" minHeight="30" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="negato" start="yes" />
+                <view sid="multiView_negato_bottom" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="multiView_negato_bottom" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view proportion="0" minWidth="30" />
+                    <view proportion="1" />
+                    <view proportion="0" minWidth="30" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="snapshotNegatoEditor" start="yes" />
+                <view sid="slider_negato" start="yes" />
+                <view sid="distanceNegatoEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="snapshotNegatoEditor" type="::uiVisu::SnapshotEditor" />
+
+        <!-- Generic Scene Negato -->
+        <service uid="negato" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="imageKey" uid="${image}" />
+            <scene>
+                <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
+
+                <renderer id="default" background="0.0" />
+
+                <adaptor id="snapshot" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+
+                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+
+                <adaptor id="MPRNegato" uid="MPRNegato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" mode="2d" slices="1" sliceIndex="${orientation}" />
+                </adaptor>
+
+                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" text="" />
+                </adaptor>
+
+                <adaptor id="imageSliceOrientationText" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="imageKey">
+                    <config renderer="default">
+                        <locations>${IMAGE_LOCATIONS}</locations>
+                        <initialOrientation>${orientation}</initialOrientation>
+                    </config>
+                </adaptor>
+
+                <adaptor id="multiDistances" uid="multiDistancesUID" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
+                    <config filter="true" renderer="default" picker="negatodefault" />
+                </adaptor>
+
+                <adaptor id="landmarksNegato" class="::visuVTKAdaptor::ImageLandmarks" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" />
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageKey">
+                    <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+
+                <connect>
+                    <signal>snapshotNegatoEditor/snapped</signal>
+                    <slot>snapshotUID/snap</slot>
+                </connect>
+
+                <connect waitForKey="imageKey">
+                    <signal>distanceNegatoEditor/distanceRequested</signal>
+                    <slot>multiDistancesUID/createDistance</slot>
+                </connect>
+
+                <proxy channel="${CrossTypeChannel}" waitForKey="imageKey">
+                    <slot>MPRNegato/setCrossScale</slot>
+                </proxy>
+            </scene>
+        </service>
+
+        <service uid="LockImageSrv" type="::ctrlMemory::LockDumpSrv" >
+            <inout key="image" uid="${image}" />
+        </service>
+
+        <service uid="slider_negato" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes" >
+            <inout key="image" uid="${image}" />
+            <sliceIndex>${orientation}</sliceIndex>
+        </service>
+
+        <service uid="distanceNegatoEditor" type="::uiMeasurement::editor::Distance">
+            <inout key="image" uid="${image}" />
+            <placeInScene uid="negato" />
+        </service>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="LockImageSrv" />
+        <start uid="mainView" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DNegatoWithTF.xml b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DNegatoWithTF.xml
new file mode 100644
index 0000000..8c9a58a
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DNegatoWithTF.xml
@@ -0,0 +1,130 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>2DNegatoWithTF</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="image" />
+        <param name="selectedTFKey" />
+        <param name="TFSelections" />
+        <param name="patient_name" default="" />
+        <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+        <param name="CrossTypeChannel" default="crossTypeChannel"/>
+    </parameters>
+    <config>
+
+        <object uid="${image}" type="::fwData::Image" src="ref" />
+        <object uid="${TFSelections}" type="::fwData::Composite" src="ref" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="1" />
+                    <view proportion="0" minHeight="30" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="negato" start="yes" />
+                <view sid="multiView_negato_bottom" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="multiView_negato_bottom" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view proportion="0" minWidth="30" />
+                    <view proportion="1" />
+                    <view proportion="0" minWidth="30" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="snapshotNegatoEditor" start="yes" />
+                <view sid="slider_negato" start="yes" />
+                <view sid="distanceNegatoEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="snapshotNegatoEditor" type="::uiVisu::SnapshotEditor" />
+
+        <!-- Generic Scene Negato -->
+        <service uid="negato" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="imageKey" uid="${image}" />
+            <inout key="TFSelections" uid="${TFSelections}" />
+            <scene>
+
+                <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
+
+                <renderer id="default" background="0.0" />
+
+                <adaptor id="snapshot" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+
+                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+
+                <adaptor id="MPRNegato" uid="negatoMPRUID" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" mode="2d" slices="1" sliceIndex="${orientation}" selectedTFKey="${selectedTFKey}" tfSelectionFwID="TFSelections" />
+                </adaptor>
+
+                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" text="" selectedTFKey="${selectedTFKey}" tfSelectionFwID="TFSelections" />
+                </adaptor>
+
+                <adaptor id="multiDistances"  uid="multiDistancesUID" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
+                    <config filter="true" renderer="default" picker="negatodefault" />
+                </adaptor>
+
+                <adaptor id="landmarksNegato" class="::visuVTKAdaptor::ImageLandmarks" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" />
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageKey">
+                    <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+
+                <adaptor id="imageSliceOrientationText" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="imageKey">
+                    <config renderer="default">
+                        <locations>default</locations>
+                        <initialOrientation>${orientation}</initialOrientation>
+                    </config>
+                </adaptor>
+
+                <connect>
+                    <signal>snapshotNegatoEditor/snapped</signal>
+                    <slot>snapshotUID/snap</slot>
+                </connect>
+
+                <connect waitForKey="imageKey">
+                    <signal>distanceNegatoEditor/distanceRequested</signal>
+                    <slot>multiDistancesUID/createDistance</slot>
+                </connect>
+
+                <proxy channel="${CrossTypeChannel}" waitForKey="imageKey">
+                    <slot>negatoMPRUID/setCrossScale</slot>
+                </proxy>
+            </scene>
+        </service>
+
+        <service uid="LockImageSrv" type="::ctrlMemory::LockDumpSrv" >
+            <in key="image" uid="${image}" />
+        </service>
+
+        <service uid="slider_negato" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+            <in key="image" uid="${image}" />
+            <sliceIndex>${orientation}</sliceIndex>
+        </service>
+
+        <service uid="distanceNegatoEditor" type="::uiMeasurement::editor::Distance">
+            <in key="image" uid="${image}" />
+            <placeInScene uid="negato" />
+        </service>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="LockImageSrv" />
+        <start uid="mainView" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DSimpleConfig.xml b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DSimpleConfig.xml
new file mode 100644
index 0000000..f11ebb4
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DSimpleConfig.xml
@@ -0,0 +1,70 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>2DSimpleConfig2</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="objectID" />
+        <param name="imageID" />
+        <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+    </parameters>
+    <config>
+        <object uid="${objectID}" type="::fwMedData::ImageSeries" src="ref" />
+        <object uid="${imageID}" type="::fwData::Image" src="ref" />
+
+        <service uid="mainview" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="center" />
+                    <view align="bottom" minWidth="200" minHeight="30" resizable="no" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="gs" start="yes" />
+                <view sid="sliderIndexEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="gs" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="imageSeries" uid="${objectID}" />
+            <in key="image" uid="${imageID}" />
+            <scene>
+                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                <renderer id="default" background="0.0" />
+                <adaptor id="interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+                <adaptor id="imageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                    <config renderer="default" picker="picker" text="" color="#FFFFFF" />
+                </adaptor>
+                <adaptor id="seriesAdaptor" class="::visuVTKAdaptor::ImageSeries" objectId="imageSeries">
+                    <config renderer="default" picker="picker" autoresetcamera="yes" mode="2D" slices="1" sliceIndex="${orientation}" />
+                </adaptor>
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageSeries">
+                    <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+                <adaptor id="imageSliceOrientationText" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="image">
+                    <config renderer="default">
+                        <locations>default</locations>
+                        <initialOrientation>${orientation}</initialOrientation>
+                    </config>
+                </adaptor>
+            </scene>
+        </service>
+
+        <service uid="imageDumpLocker" type="::ctrlMemory::LockDumpSrv">
+            <in key="image" uid="${imageID}" />
+        </service>
+        <service uid="medicalImgConverter" type="::ctrlSelection::MedicalImageSrv">
+            <inout key="image" uid="${imageID}" />
+        </service>
+        <service uid="sliderIndexEditor" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+            <in key="image" uid="${imageID}" />
+            <sliceIndex>${orientation}</sliceIndex>
+        </service>
+
+        <start uid="imageDumpLocker" />
+        <start uid="medicalImgConverter" />
+        <start uid="mainview" />
+    </config>
+</extension>
+
diff --git a/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml
new file mode 100644
index 0000000..769414c
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/rc/configurations/2DVisualization.xml
@@ -0,0 +1,160 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>2DVisualization</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="SERIESDB" />
+        <param name="AS_UID" />
+        <param name="image" />
+    </parameters>
+    <config>
+        <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+        <object uid="${AS_UID}" type="::fwMedData::ActivitySeries" src="ref" />
+        <object uid="${image}" type="::fwData::Image" src="ref" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view caption="Negato1" align="center" />
+                    <view caption="Negato2" align="right" />
+                    <view caption="Negato3" align="right" />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view wid="view_negato1" />
+                <view wid="view_negato2" />
+                <view wid="view_negato3" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar">
+            <gui>
+                <layout>
+                    <menuItem name="New landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Add-landmark.png" />
+                    <menuItem name="Remove landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Remove-landmark.png" />
+                    <menuItem name="Load landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Load-landmark.png" />
+                    <menuItem name="Save landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Save-landmark.png" />
+                    <menuItem name="Focus landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Find-landmark.png" />
+                    <menuItem name="Hide/Show landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/View-landmark.png" />
+                    <separator />
+                    <menuItem name="Add distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/distance.png" />
+                    <menuItem name="Remove distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/RemoveDistance.png" />
+                    <menuItem name="Hide distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideDistance.png" style="check" />
+                    <separator />
+                    <menuItem name="Hide cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideCross.png" style="radio" />
+                    <menuItem name="Show normal cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/NormalCross.png" style="radio" />
+                    <menuItem name="Show full cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/FullCross.png" style="radio" />
+                    <separator />
+                    <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="ActionNewLandmark" start="yes" />
+                <menuItem sid="ActionRemoveLandmark" start="yes" />
+                <menuItem sid="ActionLoadLandmark" start="yes" />
+                <menuItem sid="ActionSaveLandmark" start="yes" />
+                <menuItem sid="ActionFocusLandmark" start="yes" />
+                <menuItem sid="ActionHideLandmark" start="yes" />
+                <menuItem sid="ActionAddDistance" start="yes" />
+                <menuItem sid="ActionRemoveDistance" start="yes" />
+                <menuItem sid="ActionHideDistance" start="yes" />
+                <menuItem sid="ActionHideCross" start="yes" />
+                <menuItem sid="ActionShowNormalCross" start="yes" />
+                <menuItem sid="ActionShowFullCross" start="yes" />
+                <menuItem sid="ActionExportActivity" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="cfgNegato1" type="::fwServices::SConfigController">
+            <appConfig id="2DNegato" />
+            <inout key="image" uid="${image}" />
+            <parameter replace="WID_PARENT" uid="view_negato1" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+            <parameter replace="orientation" by="axial" />
+        </service>
+
+        <service uid="cfgNegato2" type="::fwServices::SConfigController">
+            <appConfig id="2DNegato" />
+            <inout key="image" uid="${image}" />
+            <parameter replace="WID_PARENT" uid="view_negato2" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+            <parameter replace="orientation" by="frontal" />
+        </service>
+
+        <service uid="cfgNegato3" type="::fwServices::SConfigController">
+            <appConfig id="2DNegato" />
+            <inout key="image" uid="${image}" />
+            <parameter replace="WID_PARENT" uid="view_negato3" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+            <parameter replace="orientation" by="sagittal" />
+        </service>
+
+        <service uid="ActionExportActivity" type="::uiMedData::action::SExportSeries" autoConnect="yes">
+            <inout key="seriesDB" uid="${SERIESDB}" />
+            <inout key="series" uid="${AS_UID}" />
+        </service>
+
+        <service uid="MedicalImageSrv" type="::ctrlSelection::MedicalImageSrv" autoConnect="yes">
+            <inout key="image" uid="${image}" />
+        </service>
+
+        <service uid="ActionFocusLandmark" type="::uiMeasurement::action::FocusLandmark" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionNewLandmark" type="::uiMeasurement::action::AddLandmark" >
+            <inout key="image" uid="${image}" />
+        </service>
+        <service uid="ActionRemoveLandmark" type="::uiMeasurement::action::RemoveLandmark" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionLoadLandmark" type="::uiMeasurement::action::LoadLandmark" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionSaveLandmark" type="::uiMeasurement::action::SaveLandmark" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionHideLandmark" type="::uiMeasurement::action::ShowLandmark" autoConnect="yes" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionAddDistance" type="::uiMeasurement::action::AddDistance" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionRemoveDistance" type="::uiMeasurement::action::RemoveDistance" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionHideDistance" type="::uiMeasurement::action::ShowDistance" autoConnect="yes" >
+            <in key="image" uid="${image}" />
+        </service>
+        <service uid="ActionHideCross" type="::uiVisu::action::CrossTypeAction">
+            <in key="image" uid="${image}" />
+            <crossType>hide</crossType>
+        </service>
+        <service uid="ActionShowNormalCross" type="::uiVisu::action::CrossTypeAction">
+            <in key="image" uid="${image}" />
+            <crossType>half</crossType>
+            <state active="true" />
+        </service>
+        <service uid="ActionShowFullCross" type="::uiVisu::action::CrossTypeAction">
+            <in key="image" uid="${image}" />
+            <crossType>full</crossType>
+        </service>
+
+        <connect channel="crossTypeChannel">
+            <signal>ActionHideCross/crossTypeModified</signal>
+            <signal>ActionShowNormalCross/crossTypeModified</signal>
+            <signal>ActionShowFullCross/crossTypeModified</signal>
+        </connect>
+
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="MedicalImageSrv" />
+
+        <start uid="cfgNegato1" />
+        <start uid="cfgNegato2" />
+        <start uid="cfgNegato3" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/2DVisualizationActivity2/rc/plugin.xml b/Bundles/LeafActivity/2DVisualizationActivity2/rc/plugin.xml
new file mode 100644
index 0000000..fc2fbf7
--- /dev/null
+++ b/Bundles/LeafActivity/2DVisualizationActivity2/rc/plugin.xml
@@ -0,0 +1,37 @@
+<plugin id="2DVisualizationActivity2" version="@DASH_VERSION@" >
+
+    <requirement id="servicesReg" />
+    <requirement id="gui" />
+    <requirement id="uiMeasurement" />
+    <requirement id="uiMeasurementQt" />
+    <requirement id="ctrlSelection" />
+    <requirement id="uiImageQt" />
+    <requirement id="uiVisu" />
+    <requirement id="uiVisuQt" />
+    <requirement id="visuVTKAdaptor" />
+    <requirement id="visuVTKQt" />
+    <requirement id="media" />
+
+    <xi:include href="configurations/2DVisualization.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/2DNegato.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/2DNegatoWithTF.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/2DSimpleConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>2DVisualization</id>
+        <title>2D visualization</title>
+        <desc>Display a medical image in 2D.</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-2D.png</icon>
+        <requirements>
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1">
+                <desc>Image to display.</desc>
+            </requirement>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="2DVisualization">
+            <parameters>
+                <parameter replace="image" uid="@values.imageSeries.image" />
+            </parameters>
+        </appConfig>
+    </extension>
+</plugin>
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/Properties.cmake b/Bundles/LeafActivity/3DVisualizationActivity/Properties.cmake
index de1ca76..03a6ea5 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity/Properties.cmake
+++ b/Bundles/LeafActivity/3DVisualizationActivity/Properties.cmake
@@ -3,5 +3,17 @@ set( NAME 3DVisualizationActivity )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
 set( DEPENDENCIES  )
-set( REQUIREMENTS gui guiQt ctrlSelection uiVisu uiVisuQt visuVTKAdaptor uiImageQt uiMeasurement uiMeasurementQt uiReconstructionQt media )
-
+set( REQUIREMENTS
+    gui
+    guiQt
+    ctrlSelection
+    uiVisu
+    uiVisuQt
+    visuVTKAdaptor
+    uiImageQt
+    uiMeasurement
+    uiMeasurementQt
+    uiReconstructionQt
+    media
+    2DVisualizationActivity
+)
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/bin/build.options b/Bundles/LeafActivity/3DVisualizationActivity/bin/build.options
deleted file mode 100755
index f838ee2..0000000
--- a/Bundles/LeafActivity/3DVisualizationActivity/bin/build.options
+++ /dev/null
@@ -1,16 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = [
-    'gui_0-1'                ,
-    'guiQt_0-1'              ,
-    'ctrlSelection_0-1'      ,
-    'uiVisu_0-1'             ,
-    'uiVisuQt_0-1'           ,
-    'visuVTKAdaptor_0-1'     ,
-    'uiImageQt_0-1'          ,
-    'uiMeasurement_0-1'      ,
-    'uiMeasurementQt_0-1'    ,
-    'uiReconstructionQt_0-1' ,
-    'media_0-1'              ,
-]
-
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DNegatoWithAcq.xml b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DNegatoWithAcq.xml
index 1843851..6a94155 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DNegatoWithAcq.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DNegatoWithAcq.xml
@@ -1,19 +1,22 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>3DNegatoWithAcq</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
         <param name="InputImageCompositeUID" />
         <param name="modelSeriesUid" />
-        <param name="patient_name"  default="" />
+        <param name="patient_name" default="" />
         <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+        <param name="ModelRepresentationChannel" />
+        <param name="ModelDisplayChannel" />
+        <param name="CrossTypeChannel" default="crossTypeChannel" />
+        <param name="Medical3DCameraUID" />
     </parameters>
     <config>
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -28,7 +31,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_multiView_negato_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_multiView_negato_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="horizontal" />
@@ -46,57 +49,54 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_snapshotNegatoEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-                <snap>
-                    <scene uid="${GENERIC_UID}_negato" />
-                </snap>
-            </service>
+            <service uid="${GENERIC_UID}_snapshotNegatoEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
 
             <!-- GENERIC SCENE DEFINITION -->
             <item key="visuConfig">
                 <object uid="${GENERIC_UID}_VisuComposite" type="::fwData::Composite">
 
-                    <service uid="${GENERIC_UID}_VisuCompositeUpdater" impl="::ctrlSelection::updater::TranslateUpdater" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-                        <translate fromUID="${InputImageCompositeUID}" fromKey="OptionalInputImageKey" toKey="imageKey" />
+                    <service uid="${GENERIC_UID}_VisuCompositeUpdater" impl="::ctrlSelection::updater::STranslate" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
+                        <source>${InputImageCompositeUID}</source>
+                        <translate fromKey="OptionalInputImageKey" toKey="imageKey" />
                     </service>
 
                     <!-- Generic Scene Negato -->
-                    <service uid="${GENERIC_UID}_negato" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
+                    <service uid="${GENERIC_UID}_negato" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
                         <scene>
 
                             <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
 
                             <renderer id="default" background="0.0" />
 
-                            <adaptor id="renderNegato" class="::visuVTKAdaptor::Render" objectId="self">
+                            <adaptor id="snapshot" uid="${GENERIC_UID}_snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
                                 <config renderer="default" />
                             </adaptor>
 
-                            <adaptor id="snapshot" class="::visuVTKAdaptor::Snapshot" objectId="self">
-                                <config renderer="default" />
+                            <adaptor id="orientationMarker" class="::visuVTKAdaptor::OrientationMarker" objectId="self">
+                                <config renderer="default" hAlign="right" />
                             </adaptor>
 
                             <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
                                 <config renderer="default" style="InteractorStyle3DForNegato" />
                             </adaptor>
 
-                            <adaptor id="medicalCamera" class="::visuVTKAdaptor::Medical3DCamera" objectId="imageKey">
-                                <config renderer="default" sliceIndex="${orientation}" />
+                            <adaptor id="medicalCamera" uid="${Medical3DCameraUID}" class="::visuVTKAdaptor::Medical3DCamera" objectId="self">
+                                <config renderer="default" sliceIndex="${orientation}" resetAtStart="yes" />
                             </adaptor>
 
                             <adaptor uid="${GENERIC_UID}_MPRNegato" id="MPRNegato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
                                 <config renderer="default" picker="negatodefault" slices="3" sliceIndex="${orientation}" />
                             </adaptor>
 
-                            <adaptor id="modelSeries" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeriesKey">
-                                <config renderer="default" picker="negatodefault" autoresetcamera="no" />
+                            <adaptor id="modelSeries" uid="${GENERIC_UID}_modelSeriesUid" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeriesKey">
+                                <config renderer="default" picker="negatodefault" autoresetcamera="yes" />
                             </adaptor>
 
                             <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="imageKey">
                                 <config renderer="default" picker="negatodefault" text="" />
                             </adaptor>
 
-                            <adaptor id="multiDistances" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
+                            <adaptor id="multiDistances" uid="${GENERIC_UID}_multiDistancesUID" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
                                 <config filter="true" renderer="default" picker="negatodefault" />
                             </adaptor>
 
@@ -108,6 +108,30 @@
                                 <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
                             </adaptor>
 
+                            <proxy channel="${ModelRepresentationChannel}" waitForKey="modelSeriesKey">
+                                <slot>${GENERIC_UID}_modelSeriesUid/updateNormalMode</slot>
+                            </proxy>
+                            <proxy channel="${ModelDisplayChannel}" waitForKey="modelSeriesKey">
+                                <slot>${GENERIC_UID}_modelSeriesUid/showReconstructions</slot>
+                            </proxy>
+
+                            <connect>
+                                <signal>${GENERIC_UID}_snapshotNegatoEditor/snapped</signal>
+                                <slot>${GENERIC_UID}_snapshotUID/snap</slot>
+                            </connect>
+
+                            <connect waitForKey="imageKey">
+                                <signal>${GENERIC_UID}_distanceNegatoEditor/distanceRequested</signal>
+                                <slot>${GENERIC_UID}_multiDistancesUID/createDistance</slot>
+                            </connect>
+
+                            <proxy channel="${GENERIC_UID}_slice_mode" waitForKey="imageKey">
+                                <slot>${GENERIC_UID}_MPRNegato/updateSliceMode</slot>
+                            </proxy>
+
+                            <proxy channel="${CrossTypeChannel}" waitForKey="imageKey">
+                                <slot>${GENERIC_UID}_MPRNegato/setCrossScale</slot>
+                            </proxy>
 
                         </scene>
                     </service>
@@ -130,11 +154,19 @@
                                             <placeInScene uid="${GENERIC_UID}_negato" />
                                         </service>
 
-                                        <service uid="${GENERIC_UID}_sliceListNegatoEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor2" autoConnect="yes">
-                                            <negatoAdaptor uid="${GENERIC_UID}_MPRNegato" slices="3" />
+                                        <service uid="${GENERIC_UID}_sliceListNegatoEditor" type="::gui::editor::IEditor" impl="::guiQt::editor::SSelectionMenuButton" autoConnect="no">
+                                            <toolTip>Manage slice visibility</toolTip>
+                                            <selected>3</selected>
+                                            <items>
+                                                <item text="No slice" value="0" />
+                                                <item text="One slice" value="1" />
+                                                <item text="three slices" value="3" />
+                                            </items>
                                         </service>
 
-
+                                        <proxy channel="${GENERIC_UID}_slice_mode">
+                                            <signal>${GENERIC_UID}_sliceListNegatoEditor/selected</signal>
+                                        </proxy>
 
                                     </object>
                                 </config>
@@ -160,3 +192,4 @@
         </object>
     </config>
 </extension>
+
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DSimpleConfig.xml b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DSimpleConfig.xml
new file mode 100644
index 0000000..1cd9007
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DSimpleConfig.xml
@@ -0,0 +1,40 @@
+<extension implements="::fwServices::registry::AppConfig">
+    <id>3DSimpleConfig</id>
+    <parameters>
+        <param name="GENERIC_UID" />
+        <param name="WID_PARENT" />
+        <param name="objectID" />
+    </parameters>
+    <config>
+        <object type="::fwData::Composite">
+            <service uid="${GENERIC_UID}_gs" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                <registry>
+                    <parent wid="${WID_PARENT}" />
+                </registry>
+                <scene>
+                    <picker id="picker" vtkclass="fwVtkCellPicker" />
+                    <renderer id="default" background="0.0" />
+
+                    <adaptor id="modelAdaptor" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
+                        <config renderer="default" picker="picker" autoresetcamera="yes" />
+                    </adaptor>
+
+                    <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="modelSeries">
+                        <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
+                    </adaptor>
+                    <adaptor id="orientationMarker" class="::visuVTKAdaptor::OrientationMarker" objectId="self">
+                        <config renderer="default" />
+                    </adaptor>
+                </scene>
+            </service>
+
+            <item key="modelSeries">
+                <object type="::fwMedData::ModelSeries" uid="${objectID}" src="ref">
+                </object>
+            </item>
+
+            <start uid="${GENERIC_UID}_gs" />
+        </object>
+    </config>
+</extension>
+
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DVisualization.xml b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DVisualization.xml
index b987645..bb492ed 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DVisualization.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/3DVisualization.xml
@@ -1,6 +1,5 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>3DVisualization</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
@@ -15,7 +14,7 @@
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::CardinalLayoutManager">
                         <view caption="Negato1" align="center" />
@@ -33,31 +32,31 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
+            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
                 <gui>
                     <layout>
-                        <menuItem name="3D MPR Axial view" icon="Bundles/media_0-1/icons/icon-axial.png" />
-                        <menuItem name="3D MPR Frontal view" icon="Bundles/media_0-1/icons/icon-frontal.png" />
-                        <menuItem name="3D MPR Sagittal view" icon="Bundles/media_0-1/icons/icon-sagittal.png" />
+                        <menuItem name="3D MPR Axial view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-axial.png" />
+                        <menuItem name="3D MPR Frontal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-frontal.png" />
+                        <menuItem name="3D MPR Sagittal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-sagittal.png" />
                         <separator />
-                        <menuItem name="New landmark" icon="Bundles/media_0-1/icons/Add-landmark.png" />
-                        <menuItem name="Remove landmark" icon="Bundles/media_0-1/icons/Remove-landmark.png" />
-                        <menuItem name="Load landmark" icon="Bundles/media_0-1/icons/Load-landmark.png" />
-                        <menuItem name="Save landmark" icon="Bundles/media_0-1/icons/Save-landmark.png" />
-                        <menuItem name="Focus landmark" icon="Bundles/media_0-1/icons/Find-landmark.png" />
-                        <menuItem name="Hide/Show landmark" icon="Bundles/media_0-1/icons/View-landmark.png" />
+                        <menuItem name="New landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Add-landmark.png" />
+                        <menuItem name="Remove landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Remove-landmark.png" />
+                        <menuItem name="Load landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Load-landmark.png" />
+                        <menuItem name="Save landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Save-landmark.png" />
+                        <menuItem name="Focus landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Find-landmark.png" />
+                        <menuItem name="Hide/Show landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/View-landmark.png" />
                         <separator />
-                        <menuItem name="Add distance" icon="Bundles/media_0-1/icons/distance.png" />
-                        <menuItem name="Remove distance" icon="Bundles/media_0-1/icons/RemoveDistance.png" />
-                        <menuItem name="Hide distance" icon="Bundles/media_0-1/icons/HideDistance.png" style="check" />
+                        <menuItem name="Add distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/distance.png" />
+                        <menuItem name="Remove distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/RemoveDistance.png" />
+                        <menuItem name="Hide distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideDistance.png" style="check" />
                         <separator />
-                        <menuItem name="Hide cross" icon="Bundles/media_0-1/icons/HideCross.png" style="radio" />
-                        <menuItem name="Show normal cross" icon="Bundles/media_0-1/icons/NormalCross.png" style="radio" />
-                        <menuItem name="Show full cross" icon="Bundles/media_0-1/icons/FullCross.png" style="radio" />
+                        <menuItem name="Hide cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideCross.png" style="radio" />
+                        <menuItem name="Show normal cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/NormalCross.png" style="radio" />
+                        <menuItem name="Show full cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/FullCross.png" style="radio" />
                         <separator />
-                        <menuItem name="Manage organs color" icon="Bundles/media_0-1/icons/ManageOrgan.png" style="check" />
+                        <menuItem name="Manage organs color" icon="@BUNDLE_PREFIX@/media_0-1/icons/ManageOrgan.png" style="check" />
                         <separator />
-                        <menuItem name="Export Activity" icon="Bundles/media_0-1/icons/Export.svg" />
+                        <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
                         <spacer />
                         <menu name="Visu 3D" />
                     </layout>
@@ -85,21 +84,21 @@
             </service>
 
 
-            <service uid="${GENERIC_UID}_menu" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no">
+            <service uid="${GENERIC_UID}_menu" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no">
                 <gui>
                     <layout>
-                        <menuItem name="Manage organs colors" style="check" shortcut="F9" icon="Bundles/media_0-1/icons/ManageOrgan.png" />
+                        <menuItem name="Manage organs colors" style="check" shortcut="F9" icon="@BUNDLE_PREFIX@/media_0-1/icons/ManageOrgan.png" />
                         <separator />
-                        <menuItem name="Axial view" icon="Bundles/media_0-1/icons/icon-axial.png" />
-                        <menuItem name="Frontal view" icon="Bundles/media_0-1/icons/icon-frontal.png" />
-                        <menuItem name="Sagittal view" icon="Bundles/media_0-1/icons/icon-sagittal.png" />
+                        <menuItem name="Axial view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-axial.png" />
+                        <menuItem name="Frontal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-frontal.png" />
+                        <menuItem name="Sagittal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-sagittal.png" />
                     </layout>
                 </gui>
                 <registry>
                     <menuItem sid="${GENERIC_UID}_action_organManager" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_action_AxialViewMPR3D" start="no" />
-                    <menuItem sid="${GENERIC_UID}_action_FrontalViewMPR3D" start="no" />
-                    <menuItem sid="${GENERIC_UID}_action_SagittalViewMPR3D" start="no" />
+                    <menuItem sid="${GENERIC_UID}_action_AxialViewMPR3D" start="yes" />
+                    <menuItem sid="${GENERIC_UID}_action_FrontalViewMPR3D" start="yes" />
+                    <menuItem sid="${GENERIC_UID}_action_SagittalViewMPR3D" start="yes" />
                 </registry>
             </service>
 
@@ -109,6 +108,8 @@
                         <parameters>
                             <parameter replace="ORGAN_MANAGER_MODELSERIES" by="${modelSeriesUid}" />
                             <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                            <parameter replace="ModelRepresentationChannel" by="ModelRepresentationChannel" />
+                            <parameter replace="ModelDisplayChannel" by="ModelDisplayChannel" />
                         </parameters>
                     </appConfig>
                 </config>
@@ -123,11 +124,33 @@
                             <parameter replace="orientation" by="axial" />
                             <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato1" />
                             <parameter replace="patient_name" by="${patient_name}" />
+                            <parameter replace="ModelRepresentationChannel" by="ModelRepresentationChannel" />
+                            <parameter replace="ModelDisplayChannel" by="ModelDisplayChannel" />
+                            <parameter replace="Medical3DCameraUID" by="${GENERIC_UID}_Medical3DCameraUID" />
+                            <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                         </parameters>
                     </appConfig>
                 </config>
             </service>
+            
+            
+            <service uid="${GENERIC_UID}_action_SagittalViewMPR3D" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                <slots>
+                    <slot>${GENERIC_UID}_Medical3DCameraUID/setSagittal</slot>
+                </slots>
+            </service>
 
+            <service uid="${GENERIC_UID}_action_FrontalViewMPR3D" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                <slots>
+                    <slot>${GENERIC_UID}_Medical3DCameraUID/setFrontal</slot>
+                </slots>
+            </service>
+
+            <service uid="${GENERIC_UID}_action_AxialViewMPR3D" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                <slots>
+                    <slot>${GENERIC_UID}_Medical3DCameraUID/setAxial</slot>
+                </slots>
+            </service>
 
 
             <item key="OptionalInputImageCompositeKey">
@@ -148,6 +171,7 @@
                                                 <parameter replace="orientation" by="frontal" />
                                                 <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato2" />
                                                 <parameter replace="patient_name" by="${patient_name}" />
+                                                <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                                             </parameters>
                                         </appConfig>
                                     </config>
@@ -161,6 +185,7 @@
                                                 <parameter replace="orientation" by="sagittal" />
                                                 <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato3" />
                                                 <parameter replace="patient_name" by="${patient_name}" />
+                                                <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                                             </parameters>
                                         </appConfig>
                                     </config>
@@ -190,20 +215,13 @@
                                     <crossType>full</crossType>
                                 </service>
 
-                                <service uid="${GENERIC_UID}_action_SagittalViewMPR3D" type="::fwGui::IActionSrv" impl="::uiVisu::action::CameraOrientationAction" autoConnect="no">
-                                    <orientation>sagittal</orientation>
-                                </service>
-
-                                <service uid="${GENERIC_UID}_action_FrontalViewMPR3D" type="::fwGui::IActionSrv" impl="::uiVisu::action::CameraOrientationAction" autoConnect="no">
-                                    <orientation>frontal</orientation>
-                                </service>
-
-                                <service uid="${GENERIC_UID}_action_AxialViewMPR3D" type="::fwGui::IActionSrv" impl="::uiVisu::action::CameraOrientationAction" autoConnect="no">
-                                    <orientation>axial</orientation>
-                                </service>
-
                                 <service uid="${GENERIC_UID}_MedicalImageSrv" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
-
+                                
+                                <proxy channel="crossTypeChannel">
+                                    <signal>${GENERIC_UID}_ActionHideCross/crossTypeModified</signal>
+                                    <signal>${GENERIC_UID}_ActionShowNormalCross/crossTypeModified</signal>
+                                    <signal>${GENERIC_UID}_ActionShowFullCross/crossTypeModified</signal>
+                                </proxy>
 
                             </object>
                         </config>
@@ -215,7 +233,7 @@
                         <config>
                             <object id="OptionalInputImageKey" type="::fwData::Image">
 
-                                <service uid="${GENERIC_UID}_ModifyLayout" type="::fwGui::IActionSrv" impl="::gui::action::ModifyLayoutActionSrv" autoConnect="no">
+                                <service uid="${GENERIC_UID}_ModifyLayout" type="::fwGui::IActionSrv" impl="::gui::action::SModifyLayout" autoConnect="no">
                                     <config>
                                         <show wid="${GENERIC_UID}_view_negato2" />
                                         <show wid="${GENERIC_UID}_view_negato3" />
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/ManageOrganWithSeries.xml b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/ManageOrganWithSeries.xml
index cda6800..30ef1a9 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/ManageOrganWithSeries.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity/rc/configurations/ManageOrganWithSeries.xml
@@ -1,10 +1,12 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>OrganManagerWithSeries</id>
-    <type>parameters</type>
     <parameters>
         <param name="GENERIC_UID" />
         <param name="ORGAN_MANAGER_MODELSERIES" />
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" /><!--  defined by SConfigLauncher -->
         <param name="ICON_PATH" />
+        <param name="ModelRepresentationChannel" />
+        <param name="ModelDisplayChannel" />
     </parameters>
     <config>
 
@@ -12,13 +14,12 @@
         <object type="::fwData::Composite">
 
             <!-- MAIN FRAME -->
-            <service uid="${GENERIC_UID}_organManagerFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
+            <service uid="${GENERIC_UID}_organManagerFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::SDefaultFrame" autoConnect="no">
                 <window onclose="notify" />
                 <gui>
                     <frame>
                         <name>Organs Manager</name>
                         <icon>${ICON_PATH}</icon>
-                        <!-- <minSize width="400" height="750" /> -->
                         <style mode="STAY_ON_TOP" />
                     </frame>
                 </gui>
@@ -27,9 +28,10 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_multiViewOrgans" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_multiViewOrgans" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
-                    <layout type="::fwGui::ToolboxLayoutManager" >
+                    <layout type="::fwGui::ToolboxLayoutManager">
+                        <orientation value="vertical" />
                         <view caption="Organs" expanded="true" />
                         <view caption="Material" expanded="true" />
                         <view caption="Representation" />
@@ -45,9 +47,8 @@
             <item key="selection">
                 <object type="::fwData::Composite">
 
-                    <service uid="${GENERIC_UID}_myUpdaterReconst" impl="::ctrlSelection::updater::SReconstructionFromModelSeriesUpdater" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-                        <update compositeKey="reconstruction" onEvent="NEW_RECONSTRUCTION_SELECTED" fromUID="*" actionType="ADD_OR_SWAP" />
-                        <update compositeKey="reconstruction" onEvent="REMOVED_RECONSTRUCTIONS" fromUID="*" actionType="REMOVE_IF_PRESENT" />
+                    <service uid="${GENERIC_UID}_myUpdaterReconst" impl="::ctrlSelection::updater::SObjFromSlot" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
+                        <compositeKey>reconstruction</compositeKey>
                     </service>
 
                     <service uid="${GENERIC_UID}_myManagerForOrgansFrame" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
@@ -57,6 +58,10 @@
                             <object id="reconstruction" type="::fwData::Reconstruction">
                                 <service uid="${GENERIC_UID}_organMaterialEditor" impl="::uiReconstruction::OrganMaterialEditor" type="::gui::editor::IEditor" autoConnect="no" />
                                 <service uid="${GENERIC_UID}_representationEditor" impl="::uiReconstruction::RepresentationEditor" type="::gui::editor::IEditor" autoConnect="no" />
+
+                                <proxy channel="${ModelRepresentationChannel}">
+                                    <signal>${GENERIC_UID}_representationEditor/normalsModeModified</signal>
+                                </proxy>
                             </object>
 
                         </config>
@@ -67,14 +72,28 @@
 
             <item key="modelSeries">
                 <object uid="${ORGAN_MANAGER_MODELSERIES}" src="ref" type="::fwMedData::ModelSeries">
-                    <service uid="${GENERIC_UID}_listOrganEditor" impl="::uiMedData::editor::SModelSeriesList" type="::gui::editor::IEditor" autoConnect="yes" />
+                    <service uid="${GENERIC_UID}_listOrganEditor" impl="::uiMedData::editor::SModelSeriesList" type="::gui::editor::IEditor" autoConnect="yes">
+                        <columns>
+                            <organ_name>@organ_name</organ_name>
+                            <volume_cc view="positive">@volume</volume_cc>
+                        </columns>
+                    </service>
                 </object>
             </item>
 
             <connect>
-                <signal>${ORGAN_MANAGER_MODELSERIES}/objectModified</signal>
-                <slot>${GENERIC_UID}_myUpdaterReconst/receive</slot>
+                <signal>${GENERIC_UID}_listOrganEditor/reconstructionSelected</signal>
+                <slot>${GENERIC_UID}_myUpdaterReconst/addOrSwap</slot>
             </connect>
+            
+            <proxy channel="${CLOSE_CONFIG_CHANNEL}">
+                <signal>${GENERIC_UID}_organManagerFrame/closed</signal>
+            </proxy>
+
+            <proxy channel="${ModelDisplayChannel}">
+                <signal>${GENERIC_UID}_listOrganEditor/recDisplayModified</signal>
+                <slot>${GENERIC_UID}_listOrganEditor/showReconstructions</slot>
+            </proxy>
 
             <!-- START AND STOP SERVICES -->
             <start uid="${GENERIC_UID}_organManagerFrame" />
diff --git a/Bundles/LeafActivity/3DVisualizationActivity/rc/plugin.xml b/Bundles/LeafActivity/3DVisualizationActivity/rc/plugin.xml
index a64ea15..3a67575 100644
--- a/Bundles/LeafActivity/3DVisualizationActivity/rc/plugin.xml
+++ b/Bundles/LeafActivity/3DVisualizationActivity/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="3DVisualizationActivity">
+<plugin id="3DVisualizationActivity" version="@DASH_VERSION@" >
 
     <requirement id="servicesReg" />
     <requirement id="2DVisualizationActivity" />
@@ -8,17 +8,21 @@
     <xi:include href="configurations/3DVisualization.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
     <xi:include href="configurations/ManageOrganWithSeries.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
     <xi:include href="configurations/3DNegatoWithAcq.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/3DSimpleConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
 
     <extension implements="::fwActivities::registry::Activities">
         <id>3DVisualization</id>
         <title>3D Visu</title>
-        <desc>3D visualization activity</desc>
-        <icon>Bundles/media_0-1/icons/icon-3D.png</icon>
+        <desc>Activity to display a 3D model (and eventually its associated image)</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png</icon>
         <requirements>
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1">
+                <desc>3D model.</desc>
+            </requirement>
             <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="0" maxOccurs="1" >
+                <desc>Image associated to the model.</desc>
                 <key path="@image" >OptionalInputImageKey</key>
             </requirement>
-            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1" />
         </requirements>
         <builder>::fwActivities::builder::ActivitySeries</builder>
         <appConfig id="3DVisualization">
diff --git a/Apps/Tuto09MesherWithGenericScene/CMakeLists.txt b/Bundles/LeafActivity/3DVisualizationActivity2/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto09MesherWithGenericScene/CMakeLists.txt
rename to Bundles/LeafActivity/3DVisualizationActivity2/CMakeLists.txt
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/Properties.cmake b/Bundles/LeafActivity/3DVisualizationActivity2/Properties.cmake
new file mode 100644
index 0000000..b556a1a
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/Properties.cmake
@@ -0,0 +1,20 @@
+
+set( NAME 3DVisualizationActivity2 )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    gui
+    guiQt
+    ctrlSelection
+    uiVisu
+    uiVisuQt
+    visuVTKQt
+    visuVTKAdaptor
+    uiImageQt
+    uiMeasurement
+    uiMeasurementQt
+    uiReconstructionQt
+    media
+    2DVisualizationActivity2
+)
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml
new file mode 100644
index 0000000..93570e3
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DNegatoWithAcq.xml
@@ -0,0 +1,174 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>3DNegatoWithAcq</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="imageComposite" />
+        <param name="modelSeries" />
+        <param name="patient_name" default="" />
+        <param name="orientation" default="axial" /> <!-- axial, frontal, sagittal -->
+        <param name="ModelRepresentationChannel" />
+        <param name="ModelDisplayChannel" />
+        <param name="CrossTypeChannel" default="crossTypeChannel" />
+        <param name="Medical3DCamera" />
+    </parameters>
+    <config>
+        <object uid="${modelSeries}" type="::fwMedData::ModelSeries" src="ref" />
+        <object uid="${imageComposite}" type="::fwData::Composite" src="ref" />
+        <object uid="optionalInputImage" type="::fwData::Image" src="deferred" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="1" />
+                    <view proportion="0" minHeight="30" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="negato" start="yes" />
+                <view sid="multiView_negato_bottom" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="multiView_negato_bottom" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view proportion="0" minWidth="30" />
+                    <view proportion="0" minWidth="30" />
+                    <view proportion="1" />
+                    <view proportion="0" minWidth="30" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="sliceListNegatoEditor" start="no" />
+                <view sid="snapshotNegatoEditor" start="yes" />
+                <view sid="slider_negato" start="no" />
+                <view sid="distanceNegatoEditor" start="no" />
+            </registry>
+        </service>
+
+        <service uid="snapshotNegatoEditor" type="::uiVisu::SnapshotEditor" />
+
+        <service uid="extractImage" type="::gui::action::SPushObject" >
+            <inout key="source" uid="${imageComposite}" />
+            <out key="destination" uid="optionalInputImage" />
+            <push srcKey="OptionalInputImageKey" />
+        </service>
+
+        <service uid="LockImageSrv" type="::ctrlMemory::LockDumpSrv">
+            <inout key="imageKey" uid="optionalInputImage" />
+        </service>
+
+        <service uid="slider_negato" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+            <inout key="imageKey" uid="optionalInputImage" />
+            <sliceIndex>${orientation}</sliceIndex>
+        </service>
+
+        <service uid="distanceNegatoEditor" type="::uiMeasurement::editor::Distance">
+            <in key="imageKey" uid="optionalInputImage" />
+            <placeInScene uid="negato" />
+        </service>
+
+        <!-- Generic Scene Negato -->
+        <service uid="negato" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="modelSeriesKey" uid="${modelSeries}" />
+            <in key="imageKey" uid="optionalInputImage" optional="yes" />
+            <scene>
+
+                <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
+
+                <renderer id="default" background="0.0" />
+
+                <adaptor id="snapshot" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+
+                <adaptor id="orientationMarker" class="::visuVTKAdaptor::OrientationMarker" objectId="self">
+                    <config renderer="default" hAlign="right" />
+                </adaptor>
+
+                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle3DForNegato" />
+                </adaptor>
+
+                <adaptor id="medicalCamera" uid="${Medical3DCamera}" class="::visuVTKAdaptor::Medical3DCamera" objectId="self">
+                    <config renderer="default" sliceIndex="${orientation}" resetAtStart="yes" />
+                </adaptor>
+
+                <adaptor uid="MPRNegato" id="MPRNegato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" slices="3" sliceIndex="${orientation}" />
+                </adaptor>
+
+                <adaptor id="modelSeries" uid="modelSeries" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeriesKey">
+                    <config renderer="default" picker="negatodefault" autoresetcamera="yes" />
+                </adaptor>
+
+                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" text="" />
+                </adaptor>
+
+                <adaptor id="multiDistances" uid="multiDistancesUID" class="::visuVTKAdaptor::ImageMultiDistances" objectId="imageKey">
+                    <config filter="true" renderer="default" picker="negatodefault" />
+                </adaptor>
+
+                <adaptor id="landmarksNegato" class="::visuVTKAdaptor::ImageLandmarks" objectId="imageKey">
+                    <config renderer="default" picker="negatodefault" />
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="modelSeriesKey">
+                    <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+
+                <proxy channel="${ModelRepresentationChannel}" waitForKey="modelSeriesKey">
+                    <slot>modelSeries/updateNormalMode</slot>
+                </proxy>
+                <proxy channel="${ModelDisplayChannel}" waitForKey="modelSeriesKey">
+                    <slot>modelSeries/showReconstructions</slot>
+                </proxy>
+
+                <connect>
+                    <signal>snapshotNegatoEditor/snapped</signal>
+                    <slot>snapshotUID/snap</slot>
+                </connect>
+
+                <connect waitForKey="imageKey">
+                    <signal>distanceNegatoEditor/distanceRequested</signal>
+                    <slot>multiDistancesUID/createDistance</slot>
+                </connect>
+
+                <proxy channel="slice_mode" waitForKey="imageKey">
+                    <slot>MPRNegato/updateSliceMode</slot>
+                </proxy>
+
+                <proxy channel="${CrossTypeChannel}" waitForKey="imageKey">
+                    <slot>MPRNegato/setCrossScale</slot>
+                </proxy>
+
+            </scene>
+        </service>
+
+        <service uid="sliceListNegatoEditor" type="::guiQt::editor::SSelectionMenuButton">
+            <toolTip>Manage slice visibility</toolTip>
+            <selected>3</selected>
+            <items>
+                <item text="No slice" value="0" />
+                <item text="One slice" value="1" />
+                <item text="three slices" value="3" />
+            </items>
+        </service>
+
+        <connect channel="slice_mode">
+            <signal>sliceListNegatoEditor/selected</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="extractImage" />
+
+        <update uid="extractImage" />
+
+    </config>
+</extension>
+
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DSimpleConfig.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DSimpleConfig.xml
new file mode 100644
index 0000000..eb28f0e
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DSimpleConfig.xml
@@ -0,0 +1,36 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>3DSimpleConfig2</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="objectID" />
+    </parameters>
+    <config>
+
+        <object uid="${objectID}" type="::fwMedData::ModelSeries" src="ref" />
+
+        <service uid="gs" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="modelSeries" uid="${objectID}" />
+            <registry>
+                <parent wid="${WID_PARENT}" />
+            </registry>
+            <scene>
+                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                <renderer id="default" background="0.0" />
+
+                <adaptor id="modelAdaptor" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
+                    <config renderer="default" picker="picker" autoresetcamera="yes" />
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="modelSeries">
+                    <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+                <adaptor id="orientationMarker" class="::visuVTKAdaptor::OrientationMarker" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+            </scene>
+        </service>
+
+        <start uid="gs" />
+    </config>
+</extension>
+
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml
new file mode 100644
index 0000000..c53fcc9
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/3DVisualization.xml
@@ -0,0 +1,260 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>3DVisualization</id>
+    <parameters>
+
+        <!-- activity parameters -->
+        <param name="WID_PARENT" />
+        <param name="ICON_PATH" />
+        <param name="SERIESDB" />
+        <param name="AS_UID" />
+
+        <!-- data -->
+        <param name="modelSeries" />
+        <param name="imageComposite" />
+        <param name="patient_name"  default="" />
+
+    </parameters>
+    <config>
+
+        <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+        <object uid="${AS_UID}" type="::fwMedData::ActivitySeries" src="ref" />
+        <object uid="${modelSeries}" type="::fwMedData::ModelSeries" src="ref" />
+        <object uid="${imageComposite}" type="::fwData::Composite" src="ref" />
+        <object uid="optionalInputImage" type="::fwData::Image" src="deferred" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view align="center" />
+                    <view align="right"  />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view wid="view_negato1" start="yes" />
+                <view sid="view_negato2_and_3" start="no" />
+            </registry>
+        </service>
+
+        <service uid="view_negato2_and_3" type="::gui::view::SDefaultView">
+            <in key="image" uid="optionalInputImage" />
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" />
+                    <view proportion="0" />
+                </layout>
+            </gui>
+            <registry>
+                <view wid="view_negato2" />
+                <view wid="view_negato3" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar">
+            <gui>
+                <layout>
+                    <menuItem name="3D MPR Axial view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-axial.png" />
+                    <menuItem name="3D MPR Frontal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-frontal.png" />
+                    <menuItem name="3D MPR Sagittal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-sagittal.png" />
+                    <separator />
+                    <menuItem name="New landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Add-landmark.png" />
+                    <menuItem name="Remove landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Remove-landmark.png" />
+                    <menuItem name="Load landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Load-landmark.png" />
+                    <menuItem name="Save landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Save-landmark.png" />
+                    <menuItem name="Focus landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/Find-landmark.png" />
+                    <menuItem name="Hide/Show landmark" icon="@BUNDLE_PREFIX@/media_0-1/icons/View-landmark.png" />
+                    <separator />
+                    <menuItem name="Add distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/distance.png" />
+                    <menuItem name="Remove distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/RemoveDistance.png" />
+                    <menuItem name="Hide distance" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideDistance.png" style="check" />
+                    <separator />
+                    <menuItem name="Hide cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideCross.png" style="radio" />
+                    <menuItem name="Show normal cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/NormalCross.png" style="radio" />
+                    <menuItem name="Show full cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/FullCross.png" style="radio" />
+                    <separator />
+                    <menuItem name="Manage organs color" icon="@BUNDLE_PREFIX@/media_0-1/icons/ManageOrgan.png" style="check" />
+                    <separator />
+                    <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
+                    <spacer />
+                    <menu name="Visu 3D" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_AxialViewMPR3D" start="no" />
+                <menuItem sid="action_FrontalViewMPR3D" start="no" />
+                <menuItem sid="action_SagittalViewMPR3D" start="no" />
+                <menuItem sid="ActionNewLandmark" start="no" />
+                <menuItem sid="ActionRemoveLandmark" start="no" />
+                <menuItem sid="ActionLoadLandmark" start="no" />
+                <menuItem sid="ActionSaveLandmark" start="no" />
+                <menuItem sid="ActionFocusLandmark" start="no" />
+                <menuItem sid="ActionHideLandmark" start="no" />
+                <menuItem sid="ActionAddDistance" start="no" />
+                <menuItem sid="ActionRemoveDistance" start="no" />
+                <menuItem sid="ActionHideDistance" start="no" />
+                <menuItem sid="ActionHideCross" start="no" />
+                <menuItem sid="ActionShowNormalCross" start="no" />
+                <menuItem sid="ActionShowFullCross" start="no" />
+                <menuItem sid="action_organManager" start="no" />
+                <menuItem sid="ActionExportActivity" start="yes" />
+                <menu sid="menu" start="yes" />
+            </registry>
+        </service>
+
+
+        <service uid="menu" type="::gui::aspect::SDefaultMenu">
+            <gui>
+                <layout>
+                    <menuItem name="Manage organs colors" style="check" shortcut="F9" icon="@BUNDLE_PREFIX@/media_0-1/icons/ManageOrgan.png" />
+                    <separator />
+                    <menuItem name="Axial view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-axial.png" />
+                    <menuItem name="Frontal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-frontal.png" />
+                    <menuItem name="Sagittal view" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-sagittal.png" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_organManager" start="yes" />
+                <menuItem sid="action_AxialViewMPR3D" start="yes" />
+                <menuItem sid="action_FrontalViewMPR3D" start="yes" />
+                <menuItem sid="action_SagittalViewMPR3D" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="action_organManager" type="::gui::action::SConfigLauncher">
+            <appConfig id="OrganManagerWithSeries" />
+            <inout key="ORGAN_MANAGER_MODELSERIES" uid="${modelSeries}" />
+            <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+            <parameter replace="ModelRepresentationChannel" uid="ModelRepresentationChannel" />
+            <parameter replace="ModelDisplayChannel" uid="ModelDisplayChannel" />
+        </service>
+
+        <service uid="cfgNegato1" type="::fwServices::SConfigController">
+            <appConfig id="3DNegatoWithAcq" />
+            <inout key="imageComposite" uid="${imageComposite}" />
+            <inout key="modelSeries" uid="${modelSeries}" />
+            <parameter replace="orientation" by="axial" />
+            <parameter replace="WID_PARENT" uid="view_negato1" />
+            <parameter replace="patient_name" by="${patient_name}" />
+            <parameter replace="ModelRepresentationChannel" uid="ModelRepresentationChannel" />
+            <parameter replace="ModelDisplayChannel" uid="ModelDisplayChannel" />
+            <parameter replace="Medical3DCamera" uid="Medical3DCamera" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+        </service>
+
+        <service uid="action_SagittalViewMPR3D" type="::gui::action::SSlotCaller">
+            <slots>
+                <slot>Medical3DCamera/setSagittal</slot>
+            </slots>
+        </service>
+
+        <service uid="action_FrontalViewMPR3D" type="::gui::action::SSlotCaller">
+            <slots>
+                <slot>Medical3DCamera/setFrontal</slot>
+            </slots>
+        </service>
+
+        <service uid="action_AxialViewMPR3D" type="::gui::action::SSlotCaller">
+            <slots>
+                <slot>Medical3DCamera/setAxial</slot>
+            </slots>
+        </service>
+
+        <!-- Negato -->
+
+        <!-- This service extracts the image if it exists from the optional image parameter. -->
+        <service uid="extractImage" type="::gui::action::SPushObject" >
+            <inout key="source" uid="${imageComposite}" />
+            <out key="destination" uid="optionalInputImage" />
+            <push srcKey="OptionalInputImageKey" />
+        </service>
+
+        <service uid="LockImageSrv" type="::ctrlMemory::LockDumpSrv" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+
+        <service uid="cfgNegato2" type="::fwServices::SConfigController">
+            <appConfig id="2DNegato" />
+            <inout key="image" uid="optionalInputImage" />
+            <parameter replace="WID_PARENT" uid="view_negato2" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+            <parameter replace="orientation" by="frontal" />
+            <parameter replace="patient_name" by="${patient_name}" />
+        </service>
+
+        <service uid="cfgNegato3" type="::fwServices::SConfigController">
+            <appConfig id="2DNegato" />
+            <inout key="image" uid="optionalInputImage" />
+            <parameter replace="WID_PARENT" uid="view_negato3" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+            <parameter replace="orientation" by="sagittal" />
+            <parameter replace="patient_name" by="${patient_name}" />
+        </service>
+
+        <service uid="ActionFocusLandmark" type="::uiMeasurement::action::FocusLandmark" >
+            <in key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionNewLandmark" type="::uiMeasurement::action::AddLandmark" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionRemoveLandmark" type="::uiMeasurement::action::RemoveLandmark" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionLoadLandmark" type="::uiMeasurement::action::LoadLandmark" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionSaveLandmark" type="::uiMeasurement::action::SaveLandmark" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionHideLandmark" type="::uiMeasurement::action::ShowLandmark" autoConnect="yes" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionAddDistance" type="::uiMeasurement::action::AddDistance">
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionRemoveDistance" type="::uiMeasurement::action::RemoveDistance" >
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionHideDistance" type="::uiMeasurement::action::ShowDistance" autoConnect="yes">
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+        <service uid="ActionHideCross" type="::uiVisu::action::CrossTypeAction">
+        <inout key="image" uid="optionalInputImage" />
+            <crossType>hide</crossType>
+        </service>
+        <service uid="ActionShowNormalCross" type="::uiVisu::action::CrossTypeAction">
+            <inout key="image" uid="optionalInputImage" />
+            <crossType>half</crossType>
+            <state active="true" />
+        </service>
+        <service uid="ActionShowFullCross" type="::uiVisu::action::CrossTypeAction">
+            <inout key="image" uid="optionalInputImage" />
+            <crossType>full</crossType>
+        </service>
+        <service uid="MedicalImageSrv" type="::ctrlSelection::MedicalImageSrv">
+            <inout key="image" uid="optionalInputImage" />
+        </service>
+
+        <service uid="ActionExportActivity" type="::uiMedData::action::SExportSeries" autoConnect="yes">
+            <inout key="seriesDB" uid="${SERIESDB}" />
+            <inout key="series" uid="${AS_UID}" />
+        </service>
+
+        <connect channel="crossTypeChannel">
+            <signal>ActionHideCross/crossTypeModified</signal>
+            <signal>ActionShowNormalCross/crossTypeModified</signal>
+            <signal>ActionShowFullCross/crossTypeModified</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="extractImage" />
+        <start uid="cfgNegato1" />
+
+        <update uid="extractImage" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml
new file mode 100644
index 0000000..bad6a68
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/configurations/ManageOrganWithSeries.xml
@@ -0,0 +1,89 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>OrganManagerWithSeries</id>
+    <parameters>
+        <param name="ORGAN_MANAGER_MODELSERIES" />
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" /><!--  defined by SConfigLauncher -->
+        <param name="ICON_PATH" />
+        <param name="ModelRepresentationChannel" />
+        <param name="ModelDisplayChannel" />
+    </parameters>
+    <config>
+
+        <object uid="${ORGAN_MANAGER_MODELSERIES}" type="::fwMedData::ModelSeries" src="ref" />
+        <object uid="reconstruction" type="::fwData::Reconstruction" src="deferred" />
+
+        <!-- MAIN FRAME -->
+        <service uid="organManagerFrame" type="::gui::frame::SDefaultFrame">
+            <window onclose="notify" />
+            <gui>
+                <frame>
+                    <name>Organs Manager</name>
+                    <icon>${ICON_PATH}</icon>
+                    <style mode="STAY_ON_TOP" />
+                </frame>
+            </gui>
+            <registry>
+                <view sid="multiViewOrgans" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="multiViewOrgans" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::ToolboxLayoutManager">
+                    <orientation value="vertical" />
+                    <view caption="Organs" expanded="true" />
+                    <view caption="Material" expanded="true" />
+                    <view caption="Representation" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="listOrganEditor" start="yes" />
+                <view sid="organMaterialEditor" start="no" />
+                <view sid="representationEditor" start="no" />
+            </registry>
+        </service>
+
+        <service uid="myUpdaterReconst" type="::ctrlSelection::updater::SObjFromSlot">
+            <out key="object" uid="reconstruction" />
+        </service>
+
+        <service uid="organMaterialEditor" type="::uiReconstruction::OrganMaterialEditor" autoConnect="yes">
+            <inout key="reconstruction" uid="reconstruction" />
+        </service>
+
+        <service uid="representationEditor" type="::uiReconstruction::RepresentationEditor" autoConnect="yes">
+            <inout key="reconstruction" uid="reconstruction" />
+        </service>
+
+        <service uid="listOrganEditor" type="::uiMedData::editor::SModelSeriesList" autoConnect="yes">
+            <inout key="modelSeries" uid="${ORGAN_MANAGER_MODELSERIES}" />
+            <columns>
+                <organ_name>@organ_name</organ_name>
+                <volume_cc view="positive">@volume</volume_cc>
+            </columns>
+        </service>
+
+        <connect>
+            <signal>listOrganEditor/reconstructionSelected</signal>
+            <slot>myUpdaterReconst/addOrSwap</slot>
+        </connect>
+
+        <connect channel="${CLOSE_CONFIG_CHANNEL}">
+            <signal>organManagerFrame/closed</signal>
+        </connect>
+
+        <connect channel="${ModelDisplayChannel}">
+            <signal>listOrganEditor/recDisplayModified</signal>
+            <slot>listOrganEditor/showReconstructions</slot>
+        </connect>
+
+        <connect channel="${ModelRepresentationChannel}">
+            <signal>representationEditor/normalsModeModified</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="organManagerFrame" />
+        <start uid="myUpdaterReconst" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/3DVisualizationActivity2/rc/plugin.xml b/Bundles/LeafActivity/3DVisualizationActivity2/rc/plugin.xml
new file mode 100644
index 0000000..f009b3f
--- /dev/null
+++ b/Bundles/LeafActivity/3DVisualizationActivity2/rc/plugin.xml
@@ -0,0 +1,38 @@
+<plugin id="3DVisualizationActivity2" version="@DASH_VERSION@" >
+
+    <requirement id="servicesReg" />
+    <requirement id="2DVisualizationActivity2" />
+    <requirement id="uiReconstructionQt" />
+    <requirement id="media" />
+    <requirement id="visuVTKQt" />
+
+    <xi:include href="configurations/3DVisualization.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/ManageOrganWithSeries.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/3DNegatoWithAcq.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/3DSimpleConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>3DVisualization</id>
+        <title>3D visualization</title>
+        <desc>Activity to display a 3D model, and optionally its associated image.</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png</icon>
+        <requirements>
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1">
+                <desc>3D model.</desc>
+            </requirement>
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="0" maxOccurs="1" >
+                <desc>Image associated to the model.</desc>
+                <key path="@image" >OptionalInputImageKey</key>
+            </requirement>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="3DVisualization">
+            <parameters>
+                <parameter replace="imageComposite" uid="@values.imageSeries" />
+                <parameter replace="modelSeries" uid="@values.modelSeries" />
+                <parameter replace="orientation" by="frontal" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafActivity/blendActivity/bin/build.options b/Bundles/LeafActivity/blendActivity/bin/build.options
deleted file mode 100755
index aa967d6..0000000
--- a/Bundles/LeafActivity/blendActivity/bin/build.options
+++ /dev/null
@@ -1,14 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = [
-    'gui_0-1'                ,
-    'guiQt_0-1'              ,
-    'ctrlSelection_0-1'      ,
-    'uiVisu_0-1'             ,
-    'uiVisuQt_0-1'           ,
-    'visuVTKAdaptor_0-1'     ,
-    'uiImageQt_0-1'          ,
-    'scene2D_0-1'            ,
-    'uiTF_0-1'               ,
-    'media_0-1'              ,
-]
diff --git a/Bundles/LeafActivity/blendActivity/rc/configurations/Blend.xml b/Bundles/LeafActivity/blendActivity/rc/configurations/Blend.xml
index fb6c43e..04063c2 100644
--- a/Bundles/LeafActivity/blendActivity/rc/configurations/Blend.xml
+++ b/Bundles/LeafActivity/blendActivity/rc/configurations/Blend.xml
@@ -1,6 +1,5 @@
-<extension implements="::fwServices::registry::AppConfig">
+<extension implements="::fwServices::registry::AppConfig2">
     <id>Blend</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
@@ -12,118 +11,95 @@
 
     <config>
 
-        <object type="::fwData::Composite">
+        <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+        <object uid="${AS_UID}" type="::fwMedData::ActivitySeries" src="ref" />
+        <object uid="${backgroundImageUid}" type="::fwData::Image" src="ref" />
+        <object uid="${frontImageUid}" type="::fwData::Image" src="ref" />
+        <object uid="myBlendSelectionComposite" type="::fwData::Composite" />
+        <object uid="TFComposite" type="::fwData::Composite" />
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager">
-                        <view align="center" />
-                    </layout>
-                    <toolBar />
-                </gui>
-                <registry>
-                    <parent wid="${WID_PARENT}" />
-                    <toolBar sid="${GENERIC_UID}_toolBar" start="yes" />
-                    <view wid="${GENERIC_UID}_WID_VIEW" start="no" />
-                </registry>
-            </service>
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="center" />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view wid="subView" />
+            </registry>
+        </service>
 
-            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
-                <gui>
-                    <layout>
-                        <menuItem name="Blend view" style="radio" icon="Bundles/media_0-1/icons/icon-2D.png" />
-                        <menuItem name="Edit background Image TF" style="radio" icon="Bundles/media_0-1/icons/icon-tf1.svg" />
-                        <menuItem name="Edit front Image TF" style="radio" icon="Bundles/media_0-1/icons/icon-tf2.svg" />
-                        <menuItem name="Export Activity" icon="Bundles/media_0-1/icons/Export.svg"  />
-                    </layout>
-                </gui>
-                <registry>
-                    <menuItem sid="${GENERIC_UID}_action_blendView" start="no" />
-                    <menuItem sid="${GENERIC_UID}_action_bgTFView" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_action_frontTFView" start="yes" />
-                    <menuItem sid="${GENERIC_UID}_ActionExportActivity" start="yes" />
-                </registry>
-            </service>
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar">
+            <gui>
+                <layout>
+                    <menuItem name="Blend view" style="radio" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-2D.png" />
+                    <menuItem name="Edit background Image TF" style="radio" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-tf1.svg" />
+                    <menuItem name="Edit front Image TF" style="radio" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-tf2.svg" />
+                    <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_blendView" start="no" />
+                <menuItem sid="action_bgTFView" start="yes" />
+                <menuItem sid="action_frontTFView" start="yes" />
+                <menuItem sid="ActionExportActivity" start="yes" />
+            </registry>
+        </service>
 
-            <item key="seriesDB">
-                <object uid="${SERIESDB}" src="ref" type="::fwMedData::SeriesDB">
-                    <service uid="${GENERIC_UID}_ActionExportActivity" type="::fwGui::IActionSrv" impl="::uiMedData::action::SExportSeries" autoConnect="yes">
-                        <seriesId>${AS_UID}</seriesId>
-                    </service>
-                </object>
-            </item>
-            
-            <item key="activitySeries">
-                <object uid="${AS_UID}" src="ref" type="::fwMedData::ActivitySeries" />
-            </item>
+        <service uid="ActionExportActivity" type="::uiMedData::action::SExportSeries">
+            <inout key="seriesDB" uid="${SERIESDB}" />
+            <inout key="series" uid="${AS_UID}" />
+        </service>
 
-            <item key="TFSelectionsKey">
-                <object uid="${GENERIC_UID}_TFComposite" type="::fwData::Composite" />
-            </item>
+        <service uid="myManagerLockDump" type="::ctrlMemory::manager::LockDumpManagerSrv" autoConnect="yes">
+            <in key="composite" uid="myBlendSelectionComposite" />
+        </service>
 
-            <item key="myBlendSelectionComposite">
-                <object uid="${GENERIC_UID}_myBlendSelectionComposite" type="::fwData::Composite">
-                
-                    <service uid="${GENERIC_UID}_myManagerLockDump" impl="::ctrlMemory::manager::LockDumpManagerSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes" />
+        <service uid="medicalImageFrontSrv" type="::ctrlSelection::MedicalImageSrv">
+            <inout key="image" uid="${frontImageUid}" />
+        </service>
 
-                    <service uid="${GENERIC_UID}_action_blendView" type="::fwGui::IActionSrv" impl="::gui::action::SConfigLauncher" autoConnect="yes">
-                        <state active="true" />
-                        <config>
-                            <appConfig id="ImageMix" >
-                               <parameters>
-                                    <parameter replace="SELECTED_myBlendSelectionComposite" by="${GENERIC_UID}_myBlendSelectionComposite"  />
-                                    <parameter replace="WID_VIEW" by="${GENERIC_UID}_WID_VIEW"  />
-                                    <parameter replace="TF_COMPOSITE_ID" by="${GENERIC_UID}_TFComposite"  />
-                                    <parameter replace="SELECTED_TF_KEYA" by="tfBackgroundImage"  />
-                                    <parameter replace="SELECTED_TF_KEYB" by="tfFrontImage"  />
-                               </parameters>
-                            </appConfig>
-                        </config>
-                    </service>
+        <service uid="medicalImageBgSrv" type="::ctrlSelection::MedicalImageSrv">
+            <inout key="image" uid="${backgroundImageUid}" />
+        </service>
 
-                    <service uid="${GENERIC_UID}_action_bgTFView" type="::fwGui::IActionSrv" impl="::gui::action::SConfigLauncher" autoConnect="yes">
-                        <config>
-                            <appConfig id="TransferFunctionEditor" >
-                                <parameters>
-                                    <parameter replace="SELECTED_UID_myImage" by="${backgroundImageUid}"  />
-                                    <parameter replace="WID_VIEW" by="${GENERIC_UID}_WID_VIEW"  />
-                                    <parameter replace="TF_COMPOSITE_ID" by="${GENERIC_UID}_TFComposite"  />
-                                    <parameter replace="SELECTED_TF_KEY" by="tfBackgroundImage"  />
-                                </parameters>
-                            </appConfig>
-                        </config>
-                    </service>
+        <service uid="action_blendView" type="::gui::action::SConfigLauncher">
+            <state active="true" />
+            <inout key="myBlendSelectionComposite" uid="myBlendSelectionComposite" />
+            <inout key="TF_COMPOSITE_ID" uid="TFComposite" />
+            <inout key="backgroundImageUid" uid="${backgroundImageUid}" />
+            <inout key="frontImageUid" uid="${frontImageUid}" />
+            <appConfig id="ImageMix" />
+            <parameter replace="WID_PARENT" uid="subView" />
+            <parameter replace="SELECTED_TF_KEYA" by="tfBackgroundImage" />
+            <parameter replace="SELECTED_TF_KEYB" by="tfFrontImage" />
+        </service>
 
-                    <service uid="${GENERIC_UID}_action_frontTFView" type="::fwGui::IActionSrv" impl="::gui::action::SConfigLauncher" autoConnect="yes">
-                        <config>
-                            <appConfig id="TransferFunctionEditor" >
-                                <parameters>
-                                    <parameter replace="SELECTED_UID_myImage" by="${frontImageUid}"  />
-                                    <parameter replace="WID_VIEW" by="${GENERIC_UID}_WID_VIEW"  />
-                                    <parameter replace="TF_COMPOSITE_ID" by="${GENERIC_UID}_TFComposite"  />
-                                    <parameter replace="SELECTED_TF_KEY" by="tfFrontImage"  />
-                                </parameters>
-                            </appConfig>
-                        </config>
-                    </service>
-                    
-                    <item key="backgroundImage">
-                        <object uid="${backgroundImageUid}" type="::fwData::Image" src="ref" />
-                    </item>
-                    
-                    <item key="frontImage">
-                        <object uid="${frontImageUid}" type="::fwData::Image" src="ref" />
-                    </item>
-                </object>
-            </item>
+        <service uid="action_bgTFView" type="::gui::action::SConfigLauncher">
+            <inout key="myImage" uid="${backgroundImageUid}" />
+            <inout key="TF_COMPOSITE_ID" uid="TFComposite" />
+            <appConfig id="TransferFunctionEditor" />
+            <parameter replace="WID_PARENT" uid="subView" />
+            <parameter replace="SELECTED_TF_KEY" by="tfBackgroundImage" />
+        </service>
 
-            <!-- START AND STOP SERVICES -->
-            <start uid="${GENERIC_UID}_mainView" />
-            <start uid="${GENERIC_UID}_action_blendView" />
-            <start uid="${GENERIC_UID}_myManagerLockDump" />
-
-        </object>
+        <service uid="action_frontTFView" type="::gui::action::SConfigLauncher">
+            <inout key="TF_COMPOSITE_ID" uid="TFComposite" />
+            <inout key="myImage" uid="${backgroundImageUid}" />
+            <appConfig id="TransferFunctionEditor" />
+            <parameter replace="WID_PARENT" uid="subView" />
+            <parameter replace="SELECTED_TF_KEY" by="tfFrontImage" />
+        </service>
 
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="myManagerLockDump" />
+        <start uid="medicalImageFrontSrv" />
+        <start uid="medicalImageBgSrv" />
+        <start uid="action_blendView" />
 
     </config>
 </extension>
diff --git a/Bundles/LeafActivity/blendActivity/rc/configurations/ImageMix.xml b/Bundles/LeafActivity/blendActivity/rc/configurations/ImageMix.xml
index 4a28e17..a00a0e1 100644
--- a/Bundles/LeafActivity/blendActivity/rc/configurations/ImageMix.xml
+++ b/Bundles/LeafActivity/blendActivity/rc/configurations/ImageMix.xml
@@ -1,212 +1,204 @@
-<extension implements="::fwServices::registry::AppConfig">
+<extension implements="::fwServices::registry::AppConfig2">
     <id>ImageMix</id>
-    <type>parameters</type>
     <parameters>
-        <param name="WID_VIEW" />
+        <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
-        <param name="SELECTED_myBlendSelectionComposite" />
+        <param name="myBlendSelectionComposite" />
         <param name="TF_COMPOSITE_ID" />
         <param name="SELECTED_TF_KEYA" />
         <param name="SELECTED_TF_KEYB" />
-        <param name="patient_name"  default="" />
+        <param name="backgroundImageUid" />
+        <param name="frontImageUid" />
+        <param name="patient_name" default="" />
     </parameters>
 
     <config>
 
-        <object type="::fwData::Composite">
-
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager">
-                        <view caption="Blend" align="center" />
-                        <view align="bottom" />
-                    </layout>
-                </gui>
-                <registry>
-                    <parent wid="${WID_VIEW}" />
-                    <view sid="${GENERIC_UID}_blendGenericScene" start="yes" />
-                    <view sid="${GENERIC_UID}_bottomView" start="yes" />
-                </registry>
-            </service>
-
-
-            <service uid="${GENERIC_UID}_bottomView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="vertical" />
-                        <view proportion="0" />
-                        <view proportion="0" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_sliderView" start="yes" />
-                    <view sid="${GENERIC_UID}_editorsView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_sliderView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="horizontal" />
-                        <view proportion="1" />
-                        <view proportion="0" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_slider" start="no" />
-                    <view sid="${GENERIC_UID}_snapshot" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_editorsView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="horizontal" />
-                        <view caption="Background image" proportion="1" />
-                        <view caption="Front image" proportion="1" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_bgBottomView" start="yes" />
-                    <view sid="${GENERIC_UID}_frontBottomView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_bgBottomView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="vertical" />
-                        <view proportion="0" />
-                        <spacer />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_bg_windowLevel" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_frontBottomView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="vertical" />
-                        <view proportion="0" />
-                        <view proportion="0" />
-                        <spacer />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_front_windowLevel" />
-                    <view sid="${GENERIC_UID}_front_imageTransparency" />
-                </registry>
-            </service>
-
-            <item key="TFSelectionsKey">
-                <object uid="${TF_COMPOSITE_ID}" src="ref" type="::fwData::Composite" />
-            </item>
-
-            <item key="myBlendSelectionComposite">
-                <object uid="${SELECTED_myBlendSelectionComposite}" src="ref" type="::fwData::Composite">
-
-                    <service uid="${GENERIC_UID}_snapshot" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-                        <snap>
-                            <scene uid="${GENERIC_UID}_blendGenericScene" />
-                        </snap>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_myManagerVisu" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes"> <!-- priority="0.6" -->
-                        <mode type="stop" />
-                        <config>
-                            <object id="backgroundImage" type="::fwData::Image">
-                                <service impl="::ctrlMemory::LockDumpSrv" type="::fwServices::IController" autoConnect="no" />
-                                <!-- This service convert a simple fwData::Image to medical Image -->
-                                <service uid="${GENERIC_UID}_bg_medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="yes"/> <!-- priority="0.6" -->
-                                <service uid="${GENERIC_UID}_slider" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
-                                    <sliceIndex>axial</sliceIndex>
-                                </service>
-                                <service uid="${GENERIC_UID}_bg_windowLevel" type="::gui::editor::IEditor" impl="::uiImage::WindowLevel" autoConnect="yes">
-                                    <config selectedTFKey="${SELECTED_TF_KEYA}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                                </service>
-
-                            </object>
-
-                            <object id="frontImage" type="::fwData::Image">
-                                <service impl="::ctrlMemory::LockDumpSrv" type="::fwServices::IController" autoConnect="no" />
-                                <!-- This service convert a simple fwData::Image to medical Image -->
-                                <service impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="yes"/> <!-- priority="0.6" -->
-
-                                <service uid="${GENERIC_UID}_front_imageTransparency" type="::gui::editor::IEditor" impl="::uiImage::ImageTransparency" autoConnect="yes">
-                                    <shortcut value="V" />
-                                </service>
-
-                                <service uid="${GENERIC_UID}_front_windowLevel" type="::gui::editor::IEditor" impl="::uiImage::WindowLevel" autoConnect="yes">
-                                    <config selectedTFKey="${SELECTED_TF_KEYB}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                                </service>
-
-                            </object>
-                        </config>
-                    </service>
-
-                    <!-- Generic scene to show merging of backgroung and front images -->
-                    <service uid="${GENERIC_UID}_blendGenericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                        <scene>
-                            <picker id="myPicker" vtkclass="fwVtkCellPicker" />
-                            <vtkObject id="imageBlend" class="vtkImageBlend" />
-                            <renderer id="default" background="0.0" />
-
-                            <adaptor id="myRenderAdaptor" class="::visuVTKAdaptor::Render" objectId="self">
-                                <config renderer="default" picker="" />
-                            </adaptor>
-                            <adaptor uid="${GENERIC_UID}_MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="backgroundImage">
-                                <config renderer="default" picker="myPicker" mode="2D" slices="1" sliceIndex="axial" vtkimagesource="imageBlend"
-                                    selectedTFKey="${SELECTED_TF_KEYA}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                            </adaptor>
-                            <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
-                                <config renderer="default" style="InteractorStyle2DForNegato" />
-                            </adaptor>
-                            <adaptor id="bgImagePicker" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="backgroundImage">
-                                <config renderer="default" picker="myPicker" />
-                            </adaptor>
-                            <adaptor id="frontImagePicker" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="frontImage">
-                                <config renderer="default" picker="myPicker" />
-                            </adaptor>
-                            <adaptor id="snapshot" class="::visuVTKAdaptor::Snapshot" objectId="self">
-                                <config renderer="default" />
-                            </adaptor>
-
-                            <!-- Adaptor to show background and front image merge in the same view. -->
-                            <adaptor id="myImagesBlendAdaptor" class="::visuVTKAdaptor::ImagesBlend" objectId="self">
-                                <config vtkimageregister="imageBlend">
-                                    <image objectId="backgroundImage" tfalpha="no"
-                                        selectedTFKey="${SELECTED_TF_KEYA}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                                    <image objectId="frontImage" tfalpha="yes"
-                                        selectedTFKey="${SELECTED_TF_KEYB}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                                </config>
-                            </adaptor>
-
-                            <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="self">
-                                <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
-                            </adaptor>
-
-                            <!-- Adaptor to show the red cross and images pixel values informations in scene top left. -->
-                            <adaptor id="myImagesProbeCursor" class="::visuVTKAdaptor::ImagesProbeCursor" objectId="self">
-                                <config renderer="default" picker="myPicker">
-                                    <image objectId="backgroundImage" name="background" />
-                                    <image objectId="frontImage" name="front" />
-                                </config>
-                            </adaptor>
-                        </scene>
-                    </service>
-
-                </object>
-            </item>
-
-
-            <!-- START AND STOP SERVICES -->
-            <start uid="${GENERIC_UID}_mainView" />
-            <start uid="${GENERIC_UID}_myManagerVisu" />
-
-        </object>
-
+        <object uid="${TF_COMPOSITE_ID}" type="::fwData::Composite" src="ref" />
+        <object uid="${myBlendSelectionComposite}" type="::fwData::Composite" src="ref" />
+        <object uid="${backgroundImageUid}" type="::fwData::Image" src="ref" />
+        <object uid="${frontImageUid}" type="::fwData::Image" src="ref" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView" autoConnect="no">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view caption="Blend" align="center" />
+                    <view align="bottom" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="blendGenericScene" start="yes" />
+                <view sid="bottomView" start="yes" />
+            </registry>
+        </service>
+
+
+        <service uid="bottomView" type="::gui::view::SDefaultView" autoConnect="no">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" />
+                    <view proportion="0" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="sliderView" start="yes" />
+                <view sid="editorsView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="sliderView" type="::gui::view::SDefaultView" autoConnect="no">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view proportion="1" />
+                    <view proportion="0" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="slider" start="yes" />
+                <view sid="snapshot" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="editorsView" type="::gui::view::SDefaultView" autoConnect="no">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="Background image" proportion="1" />
+                    <view caption="Front image" proportion="1" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="bgBottomView" start="yes" />
+                <view sid="frontBottomView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="bgBottomView" type="::gui::view::SDefaultView" autoConnect="no">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" />
+                    <spacer />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="bg_windowLevel" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="frontBottomView" type="::gui::view::SDefaultView" autoConnect="no">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" />
+                    <view proportion="0" />
+                    <spacer />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="front_windowLevel" start="yes" />
+                <view sid="front_imageTransparency" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="snapshot" type="::uiVisu::SnapshotEditor" autoConnect="no">
+            <in key="object" uid="${myBlendSelectionComposite}" />
+        </service>
+        <service type="::ctrlMemory::LockDumpSrv" autoConnect="no">
+            <in key="image" uid="${backgroundImageUid}" />
+        </service>
+        <!-- This service convert a stypee fwData::Image to medical Image -->
+        <service uid="bg_medicalImageConverter" type="::ctrlSelection::MedicalImageSrv" autoConnect="yes">
+            <inout key="image" uid="${backgroundImageUid}" />
+        </service>
+        <service uid="slider" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+            <inout key="image" uid="${backgroundImageUid}" />
+            <sliceIndex>axial</sliceIndex>
+        </service>
+        <service uid="bg_windowLevel" type="::uiImage::WindowLevel">
+            <inout key="image" uid="${backgroundImageUid}" autoConnect="yes" />
+            <inout key="TFSelections" uid="${TF_COMPOSITE_ID}" />
+            <config selectedTFKey="${SELECTED_TF_KEYA}" />
+        </service>
+
+        <service type="::ctrlMemory::LockDumpSrv" autoConnect="no">
+            <in key="image" uid="${frontImageUid}" />
+        </service>
+        <!-- This service convert a stypee fwData::Image to medical Image -->
+        <service type="::ctrlSelection::MedicalImageSrv" autoConnect="yes">
+            <inout key="image" uid="${frontImageUid}" />
+        </service>
+
+        <service uid="front_imageTransparency" type="::uiImage::ImageTransparency" autoConnect="yes">
+            <inout key="image" uid="${frontImageUid}" />
+            <shortcut value="V" />
+        </service>
+
+        <service uid="front_windowLevel" type="::uiImage::WindowLevel">
+            <inout key="image" uid="${frontImageUid}" autoConnect="yes" />
+            <inout key="TFSelections" uid="${TF_COMPOSITE_ID}" />
+            <config selectedTFKey="${SELECTED_TF_KEYB}" />
+        </service>
+
+
+        <!-- Generic scene to show merging of backgroung and front images -->
+        <service uid="blendGenericScene" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="backgroundImage" uid="${backgroundImageUid}" />
+            <in key="frontImage" uid="${frontImageUid}" />
+            <inout key="TFSelections" uid="${TF_COMPOSITE_ID}" />
+            <scene>
+                <picker id="myPicker" vtkclass="fwVtkCellPicker" />
+                <vtkObject id="imageBlend" class="vtkImageBlend" />
+                <renderer id="default" background="0.0" />
+
+                <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="backgroundImage">
+                    <config renderer="default" picker="myPicker" mode="2D" slices="1" sliceIndex="axial" vtkimagesource="imageBlend" />
+                </adaptor>
+                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+                <adaptor id="bgImagePicker" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="backgroundImage">
+                    <config renderer="default" picker="myPicker" />
+                </adaptor>
+                <adaptor id="frontImagePicker" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="frontImage">
+                    <config renderer="default" picker="myPicker" />
+                </adaptor>
+                <adaptor id="snapshot" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+
+                <!-- Adaptor to show background and front image merge in the same view. -->
+                <adaptor id="myImagesBlendAdaptor" class="::visuVTKAdaptor::ImagesBlend" objectId="self">
+                    <config vtkimageregister="imageBlend">
+                        <image objectId="backgroundImage" tfalpha="no" selectedTFKey="${SELECTED_TF_KEYA}" tfSelectionFwID="TFSelections" />
+                        <image objectId="frontImage" tfalpha="yes" selectedTFKey="${SELECTED_TF_KEYB}" tfSelectionFwID="TFSelections" />
+                    </config>
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="self">
+                    <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+
+                <!-- Adaptor to show the red cross and images pixel values informations in scene top left. -->
+                <adaptor id="myImagesProbeCursor" class="::visuVTKAdaptor::ImagesProbeCursor" objectId="self">
+                    <config renderer="default" picker="myPicker">
+                        <image objectId="backgroundImage" name="background" />
+                        <image objectId="frontImage" name="front" />
+                    </config>
+                </adaptor>
+
+                <connect>
+                    <signal>snapshot/snapped</signal>
+                    <slot>snapshotUID/snap</slot>
+                </connect>
+            </scene>
+        </service>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
 
     </config>
 </extension>
diff --git a/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml b/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml
index 3b878e4..84b7271 100644
--- a/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml
+++ b/Bundles/LeafActivity/blendActivity/rc/configurations/TransferFunctionEditor.xml
@@ -1,277 +1,263 @@
-<extension implements="::fwServices::registry::AppConfig">
+<extension implements="::fwServices::registry::AppConfig2">
     <id>TransferFunctionEditor</id>
-    <type>parameters</type>
     <parameters>
-        <param name="WID_VIEW" />
+        <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
         <param name="TF_COMPOSITE_ID" />
         <param name="SELECTED_TF_KEY" />
-        <param name="SELECTED_UID_myImage" />
-        <param name="patient_name"  default="" />
+        <param name="myImage" />
+        <param name="patient_name" default="" />
     </parameters>
 
 
     <config>
 
-        <object type="::fwData::Composite" uid="${GENERIC_UID}_myComposite">
-
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::CardinalLayoutManager">
-                        <view caption="Negato" align="center" />
-                        <view caption="TF selection" align="right" minWidth="450" />
-                    </layout>
-                </gui>
-                <registry>
-                    <parent wid="${WID_VIEW}" />
-                    <view sid="${GENERIC_UID}_sceneView" start="yes" />
-                    <view sid="${GENERIC_UID}_tfView" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_sceneView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="vertical" />
-                        <view proportion="1" />
-                        <view proportion="0" minHeight="30" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_genericScene" start="yes" />
-                    <view sid="${GENERIC_UID}_sceneView_bottom" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_sceneView_bottom" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="horizontal" />
-                        <view proportion="0" minWidth="30" />
-                        <view proportion="1" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_snapshotEditor" start="yes" />
-                    <view sid="${GENERIC_UID}_slider" start="no" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_snapshotEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-                <snap>
-                    <scene uid="${GENERIC_UID}_genericScene" />
-                </snap>
-            </service>
-
-
-
-            <service uid="${GENERIC_UID}_tfView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                <gui>
-                    <layout type="::fwGui::LineLayoutManager">
-                        <orientation value="vertical" />
-                        <view proportion="0" />
-                        <view proportion="0" minHeight="100" />
-                        <view proportion="1" />
-                    </layout>
-                </gui>
-                <registry>
-                    <view sid="${GENERIC_UID}_tfSelector" start="no" />
-                    <view sid="${GENERIC_UID}_Scene2D_Shutter" start="yes" />
-                    <view sid="${GENERIC_UID}_Scene2D" start="yes" />
-                </registry>
-            </service>
-
-            <service uid="${GENERIC_UID}_genericScene" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                <scene>
-                    <picker id="negato2default" vtkclass="fwVtkCellPicker" />
-                    <renderer id="default" background="0.0" />
-                    <adaptor id="renderNegato2" class="::visuVTKAdaptor::Render" objectId="self">
-                        <config renderer="default" />
-                    </adaptor>
-                    <adaptor id="snapshot1" class="::visuVTKAdaptor::Snapshot" objectId="self">
-                        <config renderer="default" />
-                    </adaptor>
-                    <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
-                        <config renderer="default" style="InteractorStyle2DForNegato" />
-                    </adaptor>
-                    <adaptor id="MPRNegato2" class="::visuVTKAdaptor::NegatoMPR" objectId="displayed_image">
-                        <config renderer="default" picker="negato2default" mode="2d" slices="1" sliceIndex="axial" selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                    </adaptor>
-                    <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="displayed_image">
-                        <config renderer="default" picker="negato2default" text="" selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                    </adaptor>
-                    <adaptor id="multiDistances" class="::visuVTKAdaptor::ImageMultiDistances" objectId="displayed_image">
-                        <config filter="true" renderer="default" picker="negato2default" />
-                    </adaptor>
-                    <adaptor id="landmarksNegato2" class="::visuVTKAdaptor::ImageLandmarks" objectId="displayed_image">
-                        <config renderer="default" picker="negato2default" />
-                    </adaptor>
-
-                    <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="displayed_image">
-                        <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
-                    </adaptor>
-
-                </scene>
-            </service>
-
-            <service uid="${GENERIC_UID}_Scene2D" impl="::scene2D::Render" type="::fwRender::IRender" autoConnect="yes">
-
-                <scene>
-
-                    <scene x="-1100" y="-1.1" width="2400" height="1.2" antialiasing="true" />
-
-                    <viewport id="view1" x="-500" y="-1.1" width="500" height="1.2" />
-
-                    <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
-                    <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
-
-                    <axis id="axeHistogramY" origin="0.0" scale="-0.000001" scaleType="LINEAR" />
-
-                    <adaptor id="grid" class="::scene2D::adaptor::Grid2D" objectId="self">
-                        <config xMin="-1200" xMax="1500" yMin="0.0" yMax="1.0" xSpacing="100" ySpacing="0.1" opacity="0.25"
-                            viewportUID="${GENERIC_UID}_Viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="1" />
-                    </adaptor>
-
-                    <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
-                        <config x1="-1200" x2="1500" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
-                    </adaptor>
-
-                    <adaptor id="ordinate" class="::scene2D::adaptor::Line" objectId="self">
-                        <config x1="0" x2="0" y1="-0.1" y2="1.2" color="white" xAxis="xAxis" yAxis="yAxis" zValue="3" />
-                    </adaptor>
-
-                    <adaptor id="maxOpacity" class="::scene2D::adaptor::Line" objectId="self">
-                        <config x1="-1200" x2="1500" y1="1" y2="1" color="red" xAxis="xAxis" yAxis="yAxis" zValue="4" />
-                    </adaptor>
-
-                    <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="displayed_image">
-                        <config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="7"
-                            viewportUID="${GENERIC_UID}_Viewport"
-                            selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                    </adaptor>
-
-                    <adaptor id="viewportRangeUpdater" class="::scene2D::adaptor::ViewportUpdater" objectId="myViewport">
-                        <config xAxis="xAxis" yAxis="yAxis" zValue="9" />
-                    </adaptor>
-
-                    <adaptor id="scaleValuesLeft" class="::scene2D::adaptor::ScaleValues" objectId="self">
-                        <config min="0.0" max="1.0" interval="0.1" fontSize="7" align="left" unit="%" viewportUID="${GENERIC_UID}_Viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
-                    </adaptor>
-
-                    <adaptor id="axisLeft" class="::scene2D::adaptor::Axis" objectId="self">
-                        <config min="0.0" max="1.0" interval="0.1" align="left" tickSize="5" viewportUID="${GENERIC_UID}_Viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
-                    </adaptor>
-
-                    <adaptor id="scaleValuesBottom" class="::scene2D::adaptor::ScaleValues" objectId="self">
-                        <config min="-1024" max="1024" interval="200" fontSize="7" align="bottom" viewportUID="${GENERIC_UID}_Viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
-                    </adaptor>
-
-                    <adaptor id="axisBottom" class="::scene2D::adaptor::Axis" objectId="self">
-                        <config min="-1024" max="1024" interval="100" align="bottom" tickSize="5" viewportUID="${GENERIC_UID}_Viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
-                    </adaptor>
-
-                    <adaptor id="curvedHistogram" class="::scene2D::adaptor::CurvedHistogram" objectId="myHistogram">
-                        <config xAxis="xAxis" yAxis="axeHistogramY" borderColor="lightGray" innerColor="gray"
-                            opacity="0.25" zValue="6" borderWidth="2.0" />
-                    </adaptor>
+        <object uid="myComposite" type="::fwData::Composite" />
+        <object uid="viewport" type="::scene2D::data::Viewport" />
+        <object uid="Histogram" type="::fwData::Histogram" />
+        <object uid="${myImage}" type="::fwData::Image" src="ref" />
+        <object uid="${TF_COMPOSITE_ID}" type="::fwData::Composite" src="ref" />
+        <object uid="TFSet" type="::fwData::Composite" src="deferred" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view caption="Negato" align="center" />
+                    <view caption="TF selection" align="right" minWidth="450" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="sceneView" start="yes" />
+                <view sid="tfView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="sceneView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="1" />
+                    <view proportion="0" minHeight="30" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="genericScene" start="no" />
+                <view sid="sceneView_bottom" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="sceneView_bottom" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="horizontal" />
+                    <view proportion="0" minWidth="30" />
+                    <view proportion="1" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="snapshotEditor" start="yes" />
+                <view sid="slider" start="no" />
+            </registry>
+        </service>
+
+        <service uid="snapshotEditor" type="::uiVisu::SnapshotEditor" />
+
+
+
+        <service uid="tfView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" />
+                    <view proportion="0" minHeight="100" />
+                    <view proportion="1" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="tfSelector" start="no" />
+                <view sid="Scene2D_Shutter" start="yes" />
+                <view sid="Scene2D" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="genericScene" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="image" uid="${myImage}" />
+            <inout key="TFSelections" uid="${TF_COMPOSITE_ID}" />
+            <scene>
+                <picker id="negato2default" vtkclass="fwVtkCellPicker" />
+                <renderer id="default" background="0.0" />
+                <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+                <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+                <adaptor id="MPRNegato2" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                    <config renderer="default" picker="negato2default" mode="2d" slices="1" sliceIndex="axial" selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="TFSelections" />
+                </adaptor>
+                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="image">
+                    <config renderer="default" picker="negato2default" text="" selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="TFSelections" />
+                </adaptor>
+                <adaptor id="multiDistances" class="::visuVTKAdaptor::ImageMultiDistances" objectId="image">
+                    <config filter="true" renderer="default" picker="negato2default" />
+                </adaptor>
+                <adaptor id="landmarksNegato2" class="::visuVTKAdaptor::ImageLandmarks" objectId="image">
+                    <config renderer="default" picker="negato2default" />
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="image">
+                    <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+
+                <connect>
+                    <signal>snapshotEditor/snapped</signal>
+                    <slot>snapshotUID/snap</slot>
+                </connect>
+
+            </scene>
+        </service>
+
+        <service uid="Scene2D" type="::scene2D::Render" autoConnect="yes">
+            <in key="image" uid="${myImage}" />
+            <inout key="viewport" uid="viewport" />
+            <in key="myHistogram" uid="Histogram" />
+            <inout key="TFSelections" uid="${TF_COMPOSITE_ID}" />
+            <scene>
+
+                <scene x="-1100" y="-1.1" width="2400" height="1.2" antialiasing="true" />
+
+                <viewport id="view1" x="-500" y="-1.1" width="500" height="1.2" />
+
+                <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
+
+                <axis id="axeHistogramY" origin="0.0" scale="-0.000001" scaleType="LINEAR" />
+
+                <adaptor id="grid" class="::scene2D::adaptor::Grid2D" objectId="self">
+                    <config xMin="-1200" xMax="1500" yMin="0.0" yMax="1.0" xSpacing="100" ySpacing="0.1" opacity="0.25" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="1" />
+                </adaptor>
+
+                <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="-1200" x2="1500" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
+                </adaptor>
+
+                <adaptor id="ordinate" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="0" x2="0" y1="-0.1" y2="1.2" color="white" xAxis="xAxis" yAxis="yAxis" zValue="3" />
+                </adaptor>
+
+                <adaptor id="maxOpacity" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="-1200" x2="1500" y1="1" y2="1" color="red" xAxis="xAxis" yAxis="yAxis" zValue="4" />
+                </adaptor>
+
+                <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="image">
+                    <config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="7" viewportUID="viewport" selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="TFSelections" />
+                </adaptor>
+
+                <adaptor id="viewportRangeUpdater" class="::scene2D::adaptor::ViewportUpdater" objectId="viewport">
+                    <config xAxis="xAxis" yAxis="yAxis" zValue="9" />
+                </adaptor>
+
+                <adaptor id="scaleValuesLeft" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                    <config min="0.0" max="1.0" interval="0.1" fontSize="7" align="left" unit="%" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="axisLeft" class="::scene2D::adaptor::Axis" objectId="self">
+                    <config min="0.0" max="1.0" interval="0.1" align="left" tickSize="5" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="scaleValuesBottom" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                    <config min="-1024" max="1024" interval="200" fontSize="7" align="bottom" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="axisBottom" class="::scene2D::adaptor::Axis" objectId="self">
+                    <config min="-1024" max="1024" interval="100" align="bottom" tickSize="5" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="curvedHistogram" class="::scene2D::adaptor::CurvedHistogram" objectId="myHistogram">
+                    <config xAxis="xAxis" yAxis="axeHistogramY" borderColor="lightGray" innerColor="gray" opacity="0.25" zValue="6" borderWidth="2.0" />
+                </adaptor>
+
+            </scene>
+
+        </service>
+
+        <service uid="Scene2D_Shutter" type="::scene2D::Render" autoConnect="yes">
+            <inout key="viewport" uid="viewport" />
+            <in key="myHistogram" uid="Histogram" />
+            <scene>
+
+                <scene x="-1100" y="-1.1" width="2400" height="1.2" />
+
+                <viewport id="view1" x="-1100" y="-1.1" width="2400" height="1.2" />
+
+                <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
 
-                </scene>
+                <axis id="axeHistogramY" origin="0.0" scale="-0.000001" scaleType="LINEAR" />
 
-            </service>
+                <adaptor id="shutterGrid" class="::scene2D::adaptor::Grid2D" objectId="self">
+                    <config xMin="-1200" xMax="1400" yMin="-0.7" yMax="1.7" xSpacing="200" ySpacing="0.2" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="1" />
+                </adaptor>
 
-            <service uid="${GENERIC_UID}_Scene2D_Shutter" impl="::scene2D::Render" type="::fwRender::IRender" autoConnect="yes">
+                <adaptor id="shutterAbscissa" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="-1200" x2="1400" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
+                </adaptor>
 
-                <scene>
+                <adaptor id="shutterOrdinate" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="0" x2="0" y1="-0.1" y2="1.2" color="white" xAxis="xAxis" yAxis="yAxis" zValue="3" />
+                </adaptor>
 
-                    <scene x="-1100" y="-1.1" width="2400" height="1.2" />
+                <adaptor id="viewportRangeSelector" class="::scene2D::adaptor::ViewportRangeSelector" objectId="viewport">
+                    <config xAxis="xAxis" yAxis="yAxis" zValue="5" initialWidth="1200" initialPos="-700" />
+                </adaptor>
 
-                    <viewport id="view1" x="-1100" y="-1.1" width="2400" height="1.2" />
+                <adaptor id="shutterHistogram" class="::scene2D::adaptor::Histogram" objectId="myHistogram">
+                    <config color="green" xAxis="xAxis" yAxis="axeHistogramY" zValue="4" />
+                </adaptor>
 
-                    <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
-                    <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
+            </scene>
 
-                    <axis id="axeHistogramY" origin="0.0" scale="-0.000001" scaleType="LINEAR" />
+        </service>
 
-                    <adaptor id="shutterGrid" class="::scene2D::adaptor::Grid2D" objectId="self">
-                        <config xMin="-1200" xMax="1400" yMin="-0.7" yMax="1.7" xSpacing="200" ySpacing="0.2"
-                            viewportUID="${GENERIC_UID}_Viewport" color="darkGray" xAxis="xAxis"
-                            yAxis="yAxis" zValue="1" />
-                    </adaptor>
+        <service uid="LockImageSrv" type="::ctrlMemory::LockDumpSrv">
+            <in key="image" uid="${myImage}" />
+        </service>
 
-                    <adaptor id="shutterAbscissa" class="::scene2D::adaptor::Line" objectId="self">
-                        <config x1="-1200" x2="1400" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
-                    </adaptor>
+        <service uid="fieldMgr" type="::gui::action::SPushField">
+            <inout key="source" uid="${myImage}" />
+            <out key="destination" uid="TFSet" />
+            <push field="m_transferFunctionCompositeId" />
+        </service>
 
-                    <adaptor id="shutterOrdinate" class="::scene2D::adaptor::Line" objectId="self">
-                        <config x1="0" x2="0" y1="-0.1" y2="1.2" color="white" xAxis="xAxis" yAxis="yAxis" zValue="3" />
-                    </adaptor>
+        <service uid="tfSelector" type="::uiTF::TransferFunctionEditor" autoConnect="yes">
+            <inout key="transferFunctions" uid="TFSet" />
+            <inout key="TFSelections" uid="${TF_COMPOSITE_ID}" />
+            <config selectedTFKey="${SELECTED_TF_KEY}" />
+        </service>
 
-                    <adaptor id="viewportRangeSelector" class="::scene2D::adaptor::ViewportRangeSelector" objectId="myViewport">
-                        <config xAxis="xAxis" yAxis="yAxis" zValue="5" initialWidth="1200" initialPos="-700" />
-                    </adaptor>
+        <!-- Editors for Negato2 -->
+        <service uid="slider" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+            <inout key="image" uid="${myImage}" />
+            <sliceIndex>axial</sliceIndex>
+        </service>
 
-                    <adaptor id="shutterHistogram" class="::scene2D::adaptor::Histogram" objectId="myHistogram">
-                        <config color="green" xAxis="xAxis" yAxis="axeHistogramY" zValue="4" />
-                    </adaptor>
+        <service uid="computeHistogram" type="::scene2D::processing::SComputeHistogram" autoConnect="yes" worker="COMPUTING_THREAD">
+            <inout key="image" uid="${myImage}" />
+            <inout key="histogram" uid="Histogram" />
+            <binsWidth>5.0</binsWidth>
+        </service>
 
-                </scene>
 
-            </service>
-
-            <item key="myViewport">
-                <object uid="${GENERIC_UID}_Viewport" type="::scene2D::data::Viewport" />
-            </item>
-
-            <item key="myHistogram">
-                <object uid="${GENERIC_UID}_Histogram" type="::fwData::Histogram" />
-            </item>
-
-            <item key="displayed_image">
-                <object uid="${SELECTED_UID_myImage}" src="ref" type="::fwData::Image">
-
-                    <service uid="${GENERIC_UID}_LockImageSrv" impl="::ctrlMemory::LockDumpSrv" type="::fwServices::IController" autoConnect="no" />
-
-                    <service uid="${GENERIC_UID}_myManager" impl="::ctrlSelection::manager::SField" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
-                        <mode type="stop" />
-                        <config>
-                            <field id="m_transferFunctionCompositeId" type="::fwData::Composite">
-                                <service uid="${GENERIC_UID}_tfSelector" type="::gui::editor::IEditor" impl="::uiTF::TransferFunctionEditor" autoConnect="yes">
-                                    <config selectedTFKey="${SELECTED_TF_KEY}" tfSelectionFwID="${TF_COMPOSITE_ID}" />
-                                </service>
-                            </field>
-                        </config>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_MedicalImageSrv" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
-
-                    <!-- Editors for Negato2 -->
-                    <service uid="${GENERIC_UID}_slider" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
-                        <sliceIndex>axial</sliceIndex>
-                    </service>
-
-                    <service uid="${GENERIC_UID}_computeHistogram" type="::fwServices::IController" impl="::scene2D::processing::SComputeHistogram" autoConnect="yes" worker="COMPUTING_THREAD" >
-                        <histogramId>${GENERIC_UID}_Histogram</histogramId>
-                        <binsWidth>5.0</binsWidth>
-                    </service>
-                </object>
-            </item>
-
-
-            <item key="TFSelectionsKey">
-                <object uid="${TF_COMPOSITE_ID}" src="ref" type="::fwData::Composite" />
-            </item>
-
-            <!-- START AND STOP SERVICES -->
-            <start uid="${GENERIC_UID}_LockImageSrv" />
-            <start uid="${GENERIC_UID}_computeHistogram" />
-            <start uid="${GENERIC_UID}_mainView" />
-            <start uid="${GENERIC_UID}_myManager" />
-            <start uid="${GENERIC_UID}_slider" />
-            <start uid="${GENERIC_UID}_MedicalImageSrv" />
-
-
-        </object>
+        <!-- START AND STOP SERVICES -->
+        <start uid="LockImageSrv" />
+        <start uid="computeHistogram" />
+        <start uid="mainView" />
+        <start uid="fieldMgr" />
+        <start uid="slider" />
+        <start uid="genericScene" />
 
+        <update uid="fieldMgr" />
 
     </config>
 </extension>
diff --git a/Bundles/LeafActivity/blendActivity/rc/plugin.xml b/Bundles/LeafActivity/blendActivity/rc/plugin.xml
index 8fa03da..d4e6693 100644
--- a/Bundles/LeafActivity/blendActivity/rc/plugin.xml
+++ b/Bundles/LeafActivity/blendActivity/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="blendActivity">
+<plugin id="blendActivity" version="@DASH_VERSION@" >
 
     <requirement id="servicesReg" />
     <requirement id="gui" />
@@ -19,12 +19,14 @@
     <extension implements="::fwActivities::registry::Activities">
         <id>Blend</id>
         <title>Blend</title>
-        <desc>Blend activity</desc>
-        <icon>Bundles/media_0-1/icons/icon-blend.png</icon>
+        <desc>Activity to superimpose two images.</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-blend.png</icon>
         <requirements>
             <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="2" maxOccurs="2" >
-              <key>FrontImage</key>
-              <key>BackImage</key>
+                <desc>Images series to superimpose. They must have the same size, spacing and origin.</desc>
+                <validator>::fwActivities::validator::ImageProperties</validator>
+                <key>FrontImage</key>
+                <key>BackImage</key>
             </requirement>
         </requirements>
         <builder>::fwActivities::builder::ActivitySeries</builder>
diff --git a/Apps/Tuto10MatrixTransformInGS/CMakeLists.txt b/Bundles/LeafActivity/dicomAppConfig/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto10MatrixTransformInGS/CMakeLists.txt
rename to Bundles/LeafActivity/dicomAppConfig/CMakeLists.txt
diff --git a/Bundles/LeafActivity/dicomAppConfig/Properties.cmake b/Bundles/LeafActivity/dicomAppConfig/Properties.cmake
new file mode 100644
index 0000000..6012189
--- /dev/null
+++ b/Bundles/LeafActivity/dicomAppConfig/Properties.cmake
@@ -0,0 +1,18 @@
+
+set( NAME dicomAppConfig )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES )
+set( REQUIREMENTS
+    ctrlMemory
+    ctrlSelection
+    dataReg
+    gui
+    guiQt
+    ioDicom
+    ioGdcm
+    servicesReg
+    visuVTK
+    visuVTKAdaptor
+    visuVTKQt
+    )
diff --git a/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml b/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml
new file mode 100644
index 0000000..3f9c5a9
--- /dev/null
+++ b/Bundles/LeafActivity/dicomAppConfig/rc/configurations/2DLocalPreviewConfig.xml
@@ -0,0 +1,73 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>2DLocalPreviewConfig</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="objectID" />
+        <param name="FILE_CACHE" default="none" />
+    </parameters>
+    <config>
+
+        <object uid="${objectID}" type="::fwMedData::DicomSeries" src="ref" />
+        <object uid="image" type="::fwData::Image" src="deferred" />
+
+        <service uid="mainview" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="center" />
+                    <view align="bottom" minWidth="200" minHeight="40" resizable="no" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="gs" start="yes" />
+                <view sid="sliderIndexDicomPullerEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="gs" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="image" uid="image" optional="yes"/>
+            <in key="dicomSeries" uid="${objectID}" />
+            <scene>
+                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                <renderer id="default" background="0.0" />
+                <adaptor id="interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+                <adaptor id="imageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                    <config renderer="default" picker="picker" text="" color="#FFFFFF" />
+                </adaptor>
+                <adaptor id="seriesAdaptor" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                    <config renderer="default" picker="picker" mode="2D" slices="1" sliceIndex="axial" />
+                </adaptor>
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="dicomSeries">
+                    <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+            </scene>
+        </service>
+
+        <service uid="imageDumpLocker" type="::ctrlMemory::LockDumpSrv" >
+            <in key="image" uid="image" />
+        </service>
+
+        <service uid="medicalImgConverter" type="::ctrlSelection::MedicalImageSrv" >
+            <inout key="image" uid="image" />
+        </service>
+
+        <service uid="sliderIndexDicomPullerEditor" type="::ioDicom::SSliceIndexDicomEditor" autoConnect="yes">
+            <in key="series" uid="${objectID}" />
+            <out key="image" uid="image" />
+            <config dicomReader="::ioGdcm::SSeriesDBReader" delay="200" cacheUID="${FILE_CACHE}">
+                <dicomReaderConfig>
+                    <config>
+                        <showLogDialog>no</showLogDialog>
+                        <enableBufferRotation>no</enableBufferRotation>
+                        <dicomdirSupport>never</dicomdirSupport>
+                    </config>
+                </dicomReaderConfig>
+            </config>
+        </service>
+
+        <start uid="mainview" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomAppConfig/rc/plugin.xml b/Bundles/LeafActivity/dicomAppConfig/rc/plugin.xml
new file mode 100644
index 0000000..7129dc3
--- /dev/null
+++ b/Bundles/LeafActivity/dicomAppConfig/rc/plugin.xml
@@ -0,0 +1,16 @@
+<plugin id="dicomAppConfig" version="@DASH_VERSION@" >
+
+    <requirement id="ctrlMemory" />
+    <requirement id="ctrlSelection" />
+    <requirement id="dataReg" />
+    <requirement id="gui" />
+    <requirement id="guiQt" />
+    <requirement id="ioDicom" />
+    <requirement id="ioGdcm" />
+    <requirement id="visuVTK" />
+    <requirement id="visuVTKAdaptor" />
+    <requirement id="visuVTKQt" />
+
+    <xi:include href="configurations/2DLocalPreviewConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+</plugin>
diff --git a/Apps/Tuto11LaunchBasicConfig/CMakeLists.txt b/Bundles/LeafActivity/dicomFilteringActivity/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto11LaunchBasicConfig/CMakeLists.txt
rename to Bundles/LeafActivity/dicomFilteringActivity/CMakeLists.txt
diff --git a/Bundles/LeafActivity/dicomFilteringActivity/Properties.cmake b/Bundles/LeafActivity/dicomFilteringActivity/Properties.cmake
new file mode 100644
index 0000000..e61b4a5
--- /dev/null
+++ b/Bundles/LeafActivity/dicomFilteringActivity/Properties.cmake
@@ -0,0 +1,25 @@
+
+set( NAME dicomFilteringActivity )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES )
+set( REQUIREMENTS
+    2DVisualizationActivity2
+    activities
+    ctrlMemory
+    ctrlSelection
+    dataReg
+    dicomAppConfig
+    gui
+    guiQt
+    ioDicom
+    ioGdcm
+    media
+    servicesReg
+    uiGenericQt
+    uiIO
+    uiMedDataQt
+    visuVTK
+    visuVTKAdaptor
+    visuVTKQt
+    )
diff --git a/Bundles/LeafActivity/dicomFilteringActivity/rc/configurations/DicomFiltering.xml b/Bundles/LeafActivity/dicomFilteringActivity/rc/configurations/DicomFiltering.xml
new file mode 100644
index 0000000..28e4e17
--- /dev/null
+++ b/Bundles/LeafActivity/dicomFilteringActivity/rc/configurations/DicomFiltering.xml
@@ -0,0 +1,191 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>DicomFiltering</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="SERIESDB" />
+        <param name="AS_UID" />
+        <param name="PROGRESS_CHANNEL" />
+    </parameters>
+    <config>
+
+        <object type="::fwMedData::SeriesDB" uid="${SERIESDB}" src="ref" />
+        <object type="::fwMedData::SeriesDB" uid="readingSeriesDB" />
+        <object type="::fwMedData::SeriesDB" uid="loadedSeriesDB" />
+        <object type="::fwMedData::SeriesDB" uid="filteredSeriesDB" />
+        <object type="::fwData::Vector" uid="readingSelection" />
+        <object type="::fwData::Vector" uid="loadedSelection" />
+
+        <!-- ******************************* UI declaration *********************************** -->
+
+        <service uid="mainView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="center" minWidth="200" />
+                    <view align="bottom"/>
+                    <view align="right" minWidth="350" />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view sid="centerView" start="yes" />
+                <view sid="bottomView" start="yes" />
+                <view sid="rightView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar" >
+            <gui>
+                <layout>
+                    <menuItem name="Read DICOM files" icon="@BUNDLE_PREFIX@/media_0-1/icons/Import.svg" />
+                    <menuItem name="Preview filtered DICOM series" icon="@BUNDLE_PREFIX@/media_0-1/icons/Preview.svg" style="check" />
+                    <menuItem name="Read filtered DICOM series" icon="@BUNDLE_PREFIX@/media_0-1/icons/Apply.svg" />
+                    <menuItem name="Push selected series to the main SeriesDB" icon="@BUNDLE_PREFIX@/media_0-1/icons/Push.svg" />
+
+                    <spacer />
+
+                    <menu name="Help"/>
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_readDicomSeries" start="yes" />
+                <menuItem sid="action_previewFilteredDicomSeries" start="yes" />
+                <menuItem sid="action_convertSeries" start="yes" />
+                <menuItem sid="action_pushSeries" start="yes" />
+
+                <menu sid="menuHelp" start="yes" />
+            </registry>
+        </service>
+
+
+        <service uid="centerView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="DICOM Information" align="center" minWidth="200" />
+                    <view caption="DICOM Preview" align="right" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="readingSelector" start="yes" />
+                <view wid="readingPreview" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="bottomView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="Loaded Series" align="center" minWidth="200" />
+                    <view caption="Loaded Preview" align="right" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="loadedSelector" start="yes" />
+                <view wid="loadedPreview" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="rightView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="Filters" align="center" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="filterSelectionEditor" start="yes" />
+            </registry>
+        </service>
+
+        <!--HELP -->
+        <service uid="menuHelp" type="::gui::aspect::SDefaultMenu" >
+            <gui>
+                <layout>
+                    <menuItem name="Activity help" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="activityHelp" start="yes" />
+            </registry>
+        </service>
+
+        <!-- ******************************* Actions ****************************************** -->
+
+        <service uid="activityHelp" type="::uiGeneric::action::LaunchBrowserActionService" >
+            <url>@BUNDLE_PREFIX@/dicomFilteringActivity_0-1/quickstart.pdf</url>
+        </service>
+
+        <!-- READING SELECTION -->
+        <service uid="action_readDicomSeries" type="::uiIO::action::SSeriesDBMerger" >
+            <inout key="seriesDB" uid="readingSeriesDB" />
+            <IOSelectorSrvConfig name="IOSelectorServiceConfigVRRenderExtDicomSeriesDBReader" />
+        </service>
+
+        <service uid="readingSelector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="selection" uid="readingSelection" />
+            <inout key="seriesDB" uid="readingSeriesDB" />
+        </service>
+
+        <service uid="readingViewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="readingSelection" />
+            <parentView wid="readingPreview" />
+            <configs>
+                <config id="2DLocalPreviewConfig" type="::fwMedData::DicomSeries" />
+            </configs>
+        </service>
+
+        <service uid="filterSelectionEditor" type="::ioDicom::SFilterSelectionEditor" autoConnect="yes">
+            <in key="selection" uid="readingSelection" />
+            <inout key="target" uid="filteredSeriesDB" />
+        </service>
+
+        <!-- FILTERED SELECTION -->
+        <service uid="action_previewFilteredDicomSeries" type="::gui::action::SConfigLauncher">
+            <appConfig id="DicomPreview" />
+            <inout key="SERIESDB" uid="filteredSeriesDB" />
+            <parameter replace="ICON_PATH" by="@BUNDLE_PREFIX@/media_0-1/icons/Preview.svg" />
+        </service>
+
+        <service uid="action_convertSeries" type="::ioGdcm::SDicomSeriesConverter">
+            <in key="source" uid="filteredSeriesDB" />
+            <inout key="target" uid="loadedSeriesDB" />
+        </service>
+
+        <!-- LOADED SELECTION -->
+        <service uid="loadedSelector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="selection" uid="loadedSelection" />
+            <inout key="seriesDB" uid="loadedSeriesDB" />
+        </service>
+
+        <service uid="loadedViewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="loadedSelection" />
+            <parentView wid="loadedPreview" />
+            <configs>
+                <config id="2DSimpleConfig2" type="::fwMedData::ImageSeries">
+                    <extract path="@image" pattern="imageID" />
+                </config>
+            </configs>
+        </service>
+
+        <service uid="action_pushSeries" type="::ioDicom::SSeriesDBMerger">
+            <in key="selectedSeries" uid="loadedSelection" />
+            <inout key="seriesDB" uid="${SERIESDB}" />
+        </service>
+
+        <connect channel="${PROGRESS_CHANNEL}">
+            <signal>action_readDicomSeries/jobCreated</signal>
+        </connect>
+
+        <connect channel="${PROGRESS_CHANNEL}">
+            <signal>action_convertSeries/jobCreated</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="readingViewer" />
+        <start uid="loadedViewer" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomFilteringActivity/rc/configurations/DicomPreview.xml b/Bundles/LeafActivity/dicomFilteringActivity/rc/configurations/DicomPreview.xml
new file mode 100644
index 0000000..927129e
--- /dev/null
+++ b/Bundles/LeafActivity/dicomFilteringActivity/rc/configurations/DicomPreview.xml
@@ -0,0 +1,67 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>DicomPreview</id>
+    <parameters>
+        <param name="ICON_PATH" />
+        <param name="SERIESDB" />
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" /><!-- defined by SConfigLauncher -->
+    </parameters>
+    <config>
+
+        <object type="::fwMedData::SeriesDB" uid="${SERIESDB}" src="ref" />
+        <object type="::fwData::Vector" uid="dicomSelection" />
+
+        <!-- ******************************* UI declaration *********************************** -->
+
+        <service uid="dicomPreviewFrame" type="::gui::frame::SDefaultFrame" >
+            <window onclose="notify" />
+            <gui>
+                <frame>
+                    <name>DICOM Preview</name>
+                    <icon>${ICON_PATH}</icon>
+                     <!--<minSize width="400" height="750" />-->
+                </frame>
+            </gui>
+            <registry>
+                <view sid="mainView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="mainView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager" >
+                    <view caption="DICOM Information" align="center" minWidth="200" />
+                    <view caption="DICOM Preview" align="right" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="dicomSelector" start="yes" />
+                <view wid="dicomPreview" start="yes" />
+            </registry>
+        </service>
+
+        <!-- DICOM SELECTION -->
+        <service uid="dicomSelector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="selection" uid="dicomSelection" />
+            <inout key="seriesDB" uid="${SERIESDB}" />
+        </service>
+
+        <service uid="dicomViewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="dicomSelection" />
+            <parentView wid="dicomPreview" />
+            <configs>
+                <config id="2DLocalPreviewConfig" type="::fwMedData::DicomSeries" />
+            </configs>
+        </service>
+
+        <connect channel="${CLOSE_CONFIG_CHANNEL}">
+            <signal>dicomPreviewFrame/closed</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="dicomPreviewFrame" />
+        <start uid="dicomViewer" />
+
+        <update uid="dicomSelector" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomFilteringActivity/rc/plugin.xml b/Bundles/LeafActivity/dicomFilteringActivity/rc/plugin.xml
new file mode 100644
index 0000000..dfd23d7
--- /dev/null
+++ b/Bundles/LeafActivity/dicomFilteringActivity/rc/plugin.xml
@@ -0,0 +1,58 @@
+<plugin id="dicomFilteringActivity" version="@DASH_VERSION@" >
+
+    <requirement id="activities" />
+    <requirement id="ctrlMemory" />
+    <requirement id="ctrlSelection" />
+    <requirement id="dataReg" />
+    <requirement id="dicomAppConfig" />
+    <requirement id="gui" />
+    <requirement id="guiQt" />
+    <requirement id="ioDicom" />
+    <requirement id="ioGdcm" />
+    <requirement id="media" />
+    <requirement id="uiGenericQt" />
+    <requirement id="uiIO" />
+    <requirement id="uiMedDataQt" />
+    <requirement id="visuVTK" />
+    <requirement id="visuVTKAdaptor" />
+    <requirement id="visuVTKQt" />
+
+    <xi:include href="configurations/DicomFiltering.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/DicomPreview.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>DicomFiltering</id>
+        <title>DICOM Filtering</title>
+        <desc>DICOM Filtering activity</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-DICOM-Filtering.svg</icon>
+        <requirements>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="DicomFiltering">
+        </appConfig>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>IOSelectorServiceConfigVRRenderExtDicomSeriesDBReader</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>IOSelectorService config for DICOM Filtering Activity</desc>
+        <config>
+            <type mode="reader" />
+            <selection mode="include" />
+            <!-- <addSelection service="::ioDcmtk::SDicomSeriesDBReader" /> -->
+            <addSelection service="::ioGdcm::SDicomSeriesDBReader" />
+            <config id="DicomReaderConfig" service="::ioGdcm::SDicomSeriesDBReader" />
+        </config>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceConfig">
+         <id>DicomReaderConfig</id>
+         <desc>DICOM Reader Config</desc>
+         <config>
+            <dicomdirSupport>user_selection</dicomdirSupport>
+            <mode>direct</mode>
+         </config>
+     </extension>
+
+
+</plugin>
diff --git a/Apps/Tuto12Picker/CMakeLists.txt b/Bundles/LeafActivity/dicomPacsReaderActivity/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto12Picker/CMakeLists.txt
rename to Bundles/LeafActivity/dicomPacsReaderActivity/CMakeLists.txt
diff --git a/Bundles/LeafActivity/dicomPacsReaderActivity/Properties.cmake b/Bundles/LeafActivity/dicomPacsReaderActivity/Properties.cmake
new file mode 100644
index 0000000..51687e6
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsReaderActivity/Properties.cmake
@@ -0,0 +1,21 @@
+
+set( NAME dicomPacsReaderActivity )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES)
+set( REQUIREMENTS
+    2DVisualizationActivity2
+    activities
+    ctrlMemory
+    ctrlSelection
+    dataReg
+    gui
+    guiQt
+    ioGdcm
+    ioPacs
+    media
+    servicesReg
+    visuVTK
+    visuVTKAdaptor
+    visuVTKQt
+    )
diff --git a/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml
new file mode 100644
index 0000000..ad40c6f
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/2DPacsPreviewConfig.xml
@@ -0,0 +1,76 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>2DPacsPreviewConfig</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="objectID" />
+        <param name="PACS_CONFIGURATION" />
+    </parameters>
+    <config>
+
+        <object uid="${objectID}" type="::fwMedData::DicomSeries" src="ref" />
+        <object uid="image" type="::fwData::Image" src="deferred" />
+        <object uid="${PACS_CONFIGURATION}" type="::fwPacsIO::data::PacsConfiguration" src="ref" />
+
+        <service uid="mainview" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="center" />
+                    <view align="bottom" minWidth="200" minHeight="40" resizable="no" />
+                </layout>
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <view sid="gs" start="yes" />
+                <view sid="sliderIndexDicomPullerEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="gs" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="image" uid="image" optional="yes"/>
+            <in key="dicomSeries" uid="${objectID}" />
+            <scene>
+                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                <vtkObject id="imageBlend" class="vtkImageBlend" />
+                <renderer id="default" background="0.0" />
+                <adaptor id="interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                </adaptor>
+                <adaptor id="imageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                    <config renderer="default" picker="picker" text="" color="#FFFFFF" />
+                </adaptor>
+                <adaptor id="seriesAdaptor" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                    <config renderer="default" picker="picker" mode="2D" slices="1" sliceIndex="axial" />
+                </adaptor>
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="dicomSeries">
+                    <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+            </scene>
+        </service>
+
+        <service uid="imageDumpLocker" type="::ctrlMemory::LockDumpSrv" >
+            <in key="image" uid="image" />
+        </service>
+
+        <service uid="medicalImgConverter" type="::ctrlSelection::MedicalImageSrv" >
+            <inout key="image" uid="image" />
+        </service>
+
+        <service uid="sliderIndexDicomPullerEditor" type="::ioPacs::SSliceIndexDicomPullerEditor" autoConnect="yes">
+            <in key="pacsConfig" uid="${PACS_CONFIGURATION}" />
+            <inout key="series" uid="${objectID}" />
+            <out key="image" uid="image" />
+            <config dicomReader="::ioGdcm::SSeriesDBReader">
+                <dicomReaderConfig>
+                    <config>
+                        <showLogDialog>no</showLogDialog>
+                        <enableBufferRotation>no</enableBufferRotation>
+                        <dicomdirSupport>never</dicomdirSupport>
+                    </config>
+                </dicomReaderConfig>
+            </config>
+        </service>
+
+        <start uid="mainview" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/DicomPacsReader.xml b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/DicomPacsReader.xml
new file mode 100644
index 0000000..64087cc
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/DicomPacsReader.xml
@@ -0,0 +1,202 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>DicomPacsReader</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="SERIESDB" />
+        <param name="AS_UID" />
+        <param name="APP_NAME" />
+    </parameters>
+    <config>
+
+        <!-- ******************************* UI declaration *********************************** -->
+
+        <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+        <object uid="previewSeriesDB" type="::fwMedData::SeriesDB" />
+        <object uid="pacsConfiguration" type="::fwPacsIO::data::PacsConfiguration" />
+        <object uid="previewSelections" type="::fwData::Vector" />
+
+        <object uid="localSeriesDB" type="::fwMedData::SeriesDB" />
+        <object uid="localSelections" type="::fwData::Vector" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="top"/>
+                    <view align="center" minWidth="200" />
+                    <view align="bottom"/>
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view sid="topView" start="yes" />
+                <view sid="centerView" start="yes" />
+                <view sid="bottomView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar" >
+            <gui>
+                <layout>
+                    <menuItem name="Edit pacs configuration" icon="@BUNDLE_PREFIX@/media_0-1/icons/Settings.svg" style="check" />
+                    <menuItem name="Pull selected series from Pacs" icon="@BUNDLE_PREFIX@/media_0-1/icons/Pull.svg" />
+                    <menuItem name="Push selected series to the main SeriesDB" icon="@BUNDLE_PREFIX@/media_0-1/icons/Push.svg" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_editPacsConfiguration" start="yes" />
+                <menuItem sid="action_pullSeries" start="yes" />
+                <menuItem sid="action_pushSeries" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="topView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="DICOM Query" align="center" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="queryEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="centerView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="Pacs Information" align="center" minWidth="200" />
+                    <view caption="Pacs Preview" align="right" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="previewSelector" start="yes" />
+                <view wid="pacsPreview" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="bottomView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <orientation value="horizontal" />
+                    <view caption="Local Series" align="center" minWidth="200" />
+                    <view caption="Local Preview" align="right" minWidth="200" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="localSelector" start="yes" />
+                <view wid="localPreview" start="yes" />
+            </registry>
+        </service>
+
+        <!-- ******************************* Actions ****************************************** -->
+
+        <service uid="action_editPacsConfiguration" type="::gui::action::SConfigLauncher">
+            <appConfig id="PacsConfigurationManager" />
+            <inout key="PACS_CONFIGURATION" uid="pacsConfiguration"  />
+            <parameter replace="ICON_PATH" by="@BUNDLE_PREFIX@/media_0-1/icons/Settings.svg"  />
+        </service>
+
+        <service uid="action_pullSeries" type="::gui::action::SSlotCaller" >
+            <slots>
+                <slot>pullSeriesController/update</slot>
+            </slots>
+        </service>
+
+        <service uid="action_pushSeries" type="::ioDicom::SSeriesDBMerger">
+            <in key="selectedSeries" uid="localSelections" />
+            <inout key="seriesDB" uid="${SERIESDB}" />
+        </service>
+
+        <!-- ******************************* Services ***************************************** -->
+
+        <service uid="progressBarController" type="::ioPacs::SProgressBarController"  worker="progress" />
+
+        <!-- PACS CONFIGURATION -->
+        <service uid="pacsConfigurationInitializer" type="::ioPacs::SPacsConfigurationInitializer" autoConnect="yes">
+            <inout key="config" uid="pacsConfiguration" />
+            <config
+                localApplicationTitle="${APP_NAME}"
+                pacsHostName="mypacs.mycompany.com"
+                pacsApplicationTitle="PACSNAME"
+                pacsApplicationPort="11112"
+                moveApplicationTitle="MoveApplicationTitle"
+                moveApplicationPort="11110"
+                retrieveMethod="GET"
+                preferenceKey="PACS_CONFIGURATION"
+                />
+        </service>
+
+        <!-- PREVIEW -->
+        <service uid="previewSelector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="selection" uid="previewSelections" />
+            <inout key="seriesDB" uid="previewSeriesDB" />
+        </service>
+
+        <service uid="queryEditor" type="::ioPacs::SQueryEditor" autoConnect="yes">
+            <in key="pacsConfig" uid="pacsConfiguration" />
+            <inout key="seriesDB" uid="previewSeriesDB" />
+        </service>
+
+        <service uid="pullSeriesController" type="::ioPacs::SSeriesPuller">
+            <in key="pacsConfig" uid="pacsConfiguration" />
+            <in key="selectedSeries" uid="previewSelections" />
+            <inout key="seriesDB" uid="localSeriesDB" />
+            <config dicomReader="::ioGdcm::SSeriesDBReader" dicomReaderConfig="DicomPacsReaderConfig" />
+        </service>
+
+        <service uid="pacsViewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="previewSelections" />
+            <parentView wid="pacsPreview" />
+            <configs>
+                <config id="2DPacsPreviewConfig" type="::fwMedData::DicomSeries" >
+                    <parameter replace="PACS_CONFIGURATION" uid="pacsConfiguration" />
+                </config>
+            </configs>
+        </service>
+
+        <!-- LOCAL -->
+        <service uid="localSelector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="seriesDB" uid="localSeriesDB" />
+            <inout key="selection" uid="localSelections" />
+        </service>
+
+        <service uid="localViewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="localSelections" />
+            <parentView wid="localPreview" />
+            <configs>
+                <config id="2DSimpleConfig2" type="::fwMedData::ImageSeries">
+                    <extract path="@image" pattern="imageID" />
+                </config>
+            </configs>
+        </service>
+
+        <!-- ******************************* Connections ************************************** -->
+
+        <connect>
+            <signal>pullSeriesController/progressed</signal>
+            <slot>progressBarController/updateProgress</slot>
+        </connect>
+        <connect>
+            <signal>pullSeriesController/startedProgress</signal>
+            <slot>progressBarController/startProgress</slot>
+        </connect>
+        <connect>
+            <signal>pullSeriesController/stoppedProgress</signal>
+            <slot>progressBarController/stopProgress</slot>
+         </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="pullSeriesController" />
+        <start uid="localViewer" />
+        <start uid="pacsViewer" />
+        <start uid="progressBarController" />
+        <start uid="pacsConfigurationInitializer" />
+
+        <update uid="pacsConfigurationInitializer" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/PacsConfigurationManager.xml b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/PacsConfigurationManager.xml
new file mode 100644
index 0000000..a6c270e
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/configurations/PacsConfigurationManager.xml
@@ -0,0 +1,50 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>PacsConfigurationManager</id>
+    <parameters>
+        <param name="PACS_CONFIGURATION" />
+        <param name="ICON_PATH" />
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" /><!-- defined by SConfigLauncher -->
+    </parameters>
+    <config>
+        <object uid="${PACS_CONFIGURATION}" type="::fwPacsIO::data::PacsConfiguration" src="ref" />
+
+        <!-- MAIN FRAME -->
+        <service uid="pacsConfigurationManagerFrame" type="::gui::frame::SDefaultFrame" >
+            <window onclose="notify" />
+            <gui>
+                <frame>
+                    <name>Pacs Configuration Manager</name>
+                    <icon>${ICON_PATH}</icon>
+                    <!--<minSize width="400" height="750" /> -->
+                    <style mode="STAY_ON_TOP" />
+                </frame>
+            </gui>
+            <registry>
+                <view sid="mainView" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="mainView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view align="center" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="pacsConfigurationEditor" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="pacsConfigurationEditor" type="::ioPacs::SPacsConfigurationEditor" autoConnect="yes">
+            <inout key="config" uid="${PACS_CONFIGURATION}" />
+        </service>
+
+        <connect channel="${CLOSE_CONFIG_CHANNEL}">
+            <signal>pacsConfigurationManagerFrame/closed</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="pacsConfigurationManagerFrame" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomPacsReaderActivity/rc/plugin.xml b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/plugin.xml
new file mode 100644
index 0000000..8357d97
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsReaderActivity/rc/plugin.xml
@@ -0,0 +1,41 @@
+<plugin id="dicomPacsReaderActivity" version="@DASH_VERSION@" >
+
+    <requirement id="activities" />
+    <requirement id="ctrlMemory" />
+    <requirement id="ctrlSelection" />
+    <requirement id="dataReg" />
+    <requirement id="gui" />
+    <requirement id="guiQt" />
+    <requirement id="ioGdcm" />
+    <requirement id="media" />
+    <requirement id="uiMedDataQt" />
+    <requirement id="visuVTK" />
+    <requirement id="visuVTKAdaptor" />
+    <requirement id="visuVTKQt" />
+    <requirement id="ioPacs" />
+
+    <xi:include href="configurations/DicomPacsReader.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/PacsConfigurationManager.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    <xi:include href="configurations/2DPacsPreviewConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>DicomPacsReader</id>
+        <title>Dicom PACS Reader</title>
+        <desc>Dicom PACS Reader activity</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/Pull.svg</icon>
+        <requirements>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="DicomPacsReader">
+        </appConfig>
+        </extension>
+
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>DicomPacsReaderConfig</id>
+        <desc>Reader configuration to convert retrieved DicomSeries to ImageSeries</desc>
+        <config>
+            <config filterType="::fwDicomIOFilter::custom::DefaultDicomFilter" />
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto13Scene2D/CMakeLists.txt b/Bundles/LeafActivity/dicomPacsWriterActivity/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto13Scene2D/CMakeLists.txt
rename to Bundles/LeafActivity/dicomPacsWriterActivity/CMakeLists.txt
diff --git a/Bundles/LeafActivity/dicomPacsWriterActivity/Properties.cmake b/Bundles/LeafActivity/dicomPacsWriterActivity/Properties.cmake
new file mode 100644
index 0000000..4ca9001
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsWriterActivity/Properties.cmake
@@ -0,0 +1,22 @@
+
+set( NAME dicomPacsWriterActivity )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES)
+set( REQUIREMENTS
+    activities
+    dicomAppConfig
+    ctrlMemory
+    ctrlSelection
+    dataReg
+    dicomPacsReaderActivity
+    gui
+    guiQt
+    ioGdcm
+    ioPacs
+    media
+    servicesReg
+    visuVTK
+    visuVTKAdaptor
+    visuVTKQt
+    )
diff --git a/Bundles/LeafActivity/dicomPacsWriterActivity/rc/configurations/DicomPacsWriter.xml b/Bundles/LeafActivity/dicomPacsWriterActivity/rc/configurations/DicomPacsWriter.xml
new file mode 100644
index 0000000..0adf985
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsWriterActivity/rc/configurations/DicomPacsWriter.xml
@@ -0,0 +1,148 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>DicomPacsWriter</id>
+    <parameters>
+        <param name="WID_PARENT" />
+        <param name="AS_UID" />
+        <param name="APP_NAME" />
+        <param name="PROGRESS_CHANNEL" />
+    </parameters>
+    <config>
+        <object uid="seriesDB" type="::fwMedData::SeriesDB" />
+        <object uid="selections" type="::fwData::Vector" />
+        <object uid="pacsConfiguration" type="::fwPacsIO::data::PacsConfiguration" />
+
+        <!-- ******************************* UI declaration *********************************** -->
+
+        <service uid="mainView" type="::gui::view::SDefaultView" >
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view caption="Information" align="center" minWidth="200" />
+                    <view caption="Preview" align="bottom" minHeight="200" />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view sid="selector" start="yes" />
+                <view wid="preview" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar" >
+            <gui>
+                <layout>
+                    <menuItem name="Import" icon="@BUNDLE_PREFIX@/media_0-1/icons/Import.svg" />
+                    <menuItem name="Edit pacs configuration" icon="@BUNDLE_PREFIX@/media_0-1/icons/Settings.svg" style="check" />
+                    <menuItem name="Anonymize selected series" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-Anonymization.svg" />
+                    <menuItem name="Push selected series to Pacs" icon="@BUNDLE_PREFIX@/media_0-1/icons/Push.svg" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="action_import" start="yes" />
+                <menuItem sid="action_editPacsConfiguration" start="yes" />
+                <menuItem sid="action_anonymize" start="yes" />
+                <menuItem sid="action_pushSeriesToPacs" start="yes" />
+            </registry>
+        </service>
+
+        <!-- ******************************* Actions ****************************************** -->
+
+        <service uid="action_import" type="::uiIO::action::SSeriesDBMerger" >
+            <in key="seriesDB" uid="seriesDB" />
+            <IOSelectorSrvConfig name="IOSelectorServiceConfigVRRenderExtDicomSeriesDBReader" />
+        </service>
+
+        <service uid="action_editPacsConfiguration" type="::gui::action::SConfigLauncher">
+            <appConfig id="PacsConfigurationManager" />
+            <inout key="PACS_CONFIGURATION" uid="pacsConfiguration"  />
+            <parameter replace="ICON_PATH" by="@BUNDLE_PREFIX@/media_0-1/icons/Settings.svg"  />
+        </service>
+
+        <!-- Dicom Anonymization -->
+        <service uid="action_anonymize" type="::gui::action::SSlotCaller" >
+            <slots>
+                <slot>anonymizeController/update</slot>
+            </slots>
+        </service>
+
+        <!-- Push series -->
+        <service uid="action_pushSeriesToPacs" type="::gui::action::SSlotCaller" >
+            <slots>
+                <slot>pushSeriesController/update</slot>
+            </slots>
+        </service>
+
+        <!-- ******************************* Services ***************************************** -->
+
+        <service uid="progressBarController" type="::ioPacs::SProgressBarController"  />
+
+        <service uid="selector" type="::uiMedData::editor::SSelector" autoConnect="yes">
+            <inout key="seriesDB" uid="seriesDB" />
+            <inout key="selection" uid="selections" />
+        </service>
+
+        <service uid="pacsConfigurationInitializer" type="::ioPacs::SPacsConfigurationInitializer" autoConnect="yes">
+            <inout key="config" uid="pacsConfiguration" />
+            <config
+                localApplicationTitle="${APP_NAME}"
+                pacsHostName="mypacs.mycompany.com"
+                pacsApplicationTitle="PACSNAME"
+                pacsApplicationPort="11112"
+                moveApplicationTitle="MoveApplicationTitle"
+                moveApplicationPort="11110"
+                retrieveMethod="GET"
+                preferenceKey="PACS_CONFIGURATION"
+                />
+        </service>
+
+        <!-- Preview -->
+        <service uid="viewer" type="::uiMedData::SSeriesViewer" autoConnect="yes">
+            <in key="series" uid="selections" />
+            <parentView wid="preview" />
+            <configs>
+                <config id="2DLocalPreviewConfig" type="::fwMedData::DicomSeries" />
+            </configs>
+        </service>
+
+        <service uid="anonymizeController" type="::ioGdcm::SDicomSeriesAnonymizer">
+            <inout key="seriesDB" uid="seriesDB" />
+            <inout key="selectedSeries" uid="selections" />
+        </service>
+
+        <service uid="pushSeriesController" type="::ioPacs::SSeriesPusher">
+            <in key="pacsConfig" uid="pacsConfiguration" />
+            <in key="selectedSeries" uid="selections" />
+        </service>
+
+        <!-- ******************************* Connections ************************************** -->
+
+        <connect>
+            <signal>pushSeriesController/progressed</signal>
+            <slot>progressBarController/updateProgress</slot>
+        </connect>
+        <connect>
+            <signal>pushSeriesController/startedProgress</signal>
+            <slot>progressBarController/startProgress</slot>
+        </connect>
+        <connect>
+            <signal>pushSeriesController/stoppedProgress</signal>
+            <slot>progressBarController/stopProgress</slot>
+         </connect>
+
+        <connect channel="${PROGRESS_CHANNEL}">
+            <signal>anonymizeController/jobCreated</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="mainView" />
+        <start uid="viewer" />
+        <start uid="anonymizeController" />
+        <start uid="pushSeriesController" />
+        <start uid="progressBarController" />
+        <start uid="pacsConfigurationInitializer" />
+
+        <update uid="pacsConfigurationInitializer" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/dicomPacsWriterActivity/rc/plugin.xml b/Bundles/LeafActivity/dicomPacsWriterActivity/rc/plugin.xml
new file mode 100644
index 0000000..ebb69c4
--- /dev/null
+++ b/Bundles/LeafActivity/dicomPacsWriterActivity/rc/plugin.xml
@@ -0,0 +1,31 @@
+<plugin id="dicomPacsWriterActivity" version="@DASH_VERSION@" >
+
+    <requirement id="activities" />
+    <requirement id="ctrlMemory" />
+    <requirement id="ctrlSelection" />
+    <requirement id="dataReg" />
+    <requirement id="dicomAppConfig" />
+    <requirement id="gui" />
+    <requirement id="guiQt" />
+    <requirement id="ioGdcm" />
+    <requirement id="media" />
+    <requirement id="uiMedDataQt" />
+    <requirement id="visuVTK" />
+    <requirement id="visuVTKAdaptor" />
+    <requirement id="visuVTKQt" />
+    <requirement id="ioPacs" />
+
+    <xi:include href="configurations/DicomPacsWriter.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>DicomPacsWriter</id>
+        <title>Dicom PACS Writer</title>
+        <desc>Dicom Pacs Writer activity</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/Push.svg</icon>
+        <requirements>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="DicomPacsWriter">
+        </appConfig>
+    </extension>
+</plugin>
diff --git a/Bundles/LeafActivity/ioActivity/CMakeLists.txt b/Bundles/LeafActivity/ioActivity/CMakeLists.txt
new file mode 100644
index 0000000..28184c6
--- /dev/null
+++ b/Bundles/LeafActivity/ioActivity/CMakeLists.txt
@@ -0,0 +1,3 @@
+
+fwLoadProperties()
+
diff --git a/Bundles/LeafActivity/ioActivity/Properties.cmake b/Bundles/LeafActivity/ioActivity/Properties.cmake
new file mode 100644
index 0000000..8ba70f3
--- /dev/null
+++ b/Bundles/LeafActivity/ioActivity/Properties.cmake
@@ -0,0 +1,10 @@
+set( NAME ioActivity )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+        io
+        uiIO
+        media
+        filterVRRender
+    )
diff --git a/Bundles/LeafActivity/ioActivity/rc/plugin.xml b/Bundles/LeafActivity/ioActivity/rc/plugin.xml
new file mode 100644
index 0000000..0e2bfc9
--- /dev/null
+++ b/Bundles/LeafActivity/ioActivity/rc/plugin.xml
@@ -0,0 +1,162 @@
+<plugin id="ioActivity" version="@DASH_VERSION@">
+
+    <requirement id="io" />
+    <requirement id="uiIO" />
+    <requirement id="media" />
+    <requirement id="filterVRRender" />
+
+    <!-- Activity used to export an image series. -->
+    <extension implements="::fwActivities::registry::Activities">
+        <id>ImageSeriesExport</id>
+        <title>ImageSeries Export</title>
+        <desc>Activity to export the selected ImageSeries.</desc>
+        <icon>NONE</icon>
+        <requirements>
+            <requirement name="series" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1" />
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="ExportSelection">
+            <parameters>
+                <parameter replace="selection" by="@values.series" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+    <!-- Activity used to export a model series. -->
+    <extension implements="::fwActivities::registry::Activities">
+        <id>ModelSeriesExport</id>
+        <title>ModelSeries Export</title>
+        <desc>Activity to export the selected ModelSeries.</desc>
+        <icon>NONE</icon>
+        <requirements>
+            <requirement name="series" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1" />
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="ExportSelection">
+            <parameters>
+                <parameter replace="selection" by="@values.series" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+    <!-- Activity used to export an image series. -->
+    <extension implements="::fwActivities::registry::Activities">
+        <id>ImageSeriesExport2</id>
+        <title>ImageSeries Export</title>
+        <desc>Activity to export the selected ImageSeries.</desc>
+        <icon>NONE</icon>
+        <requirements>
+            <requirement name="series" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1" />
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="ExportSelection2">
+            <parameters>
+                <parameter replace="selection" by="@values.series" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+    <!-- Activity used to export a model series. -->
+    <extension implements="::fwActivities::registry::Activities">
+        <id>ModelSeriesExport2</id>
+        <title>ModelSeries Export</title>
+        <desc>Activity to export the selected ModelSeries.</desc>
+        <icon>NONE</icon>
+        <requirements>
+            <requirement name="series" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1" />
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="ExportSelection2">
+            <parameters>
+                <parameter replace="selection" by="@values.series" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+    <!-- App config used to export the selected series. -->
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>ExportSelection</id>
+        <parameters>
+            <param name="GENERIC_UID" />
+            <param name="selection" />
+        </parameters>
+        <config>
+            <object uid="${selection}" src="ref">
+                <service uid="${GENERIC_UID}_export_selection" impl="::uiIO::editor::SIOSelector" autoConnect="yes">
+                    <type mode="writer" />
+                    <selection mode="exclude" />
+                    <addSelection service="::ioAtoms::SWriter" />
+                </service>
+                <start uid="${GENERIC_UID}_export_selection" />
+                <update uid="${GENERIC_UID}_export_selection" />
+            </object>
+        </config>
+    </extension>
+
+    <!-- App config used to export the selected series. -->
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>ExportSelection2</id>
+        <parameters>
+            <param name="selection" />
+        </parameters>
+        <config>
+            <object uid="${selection}" src="ref" />
+            <service uid="export_selection" type="::uiIO::editor::SIOSelector" autoConnect="yes">
+                <in key="selection" uid="${selection}" />
+                <type mode="writer" />
+                <selection mode="exclude" />
+                <addSelection service="::ioAtoms::SWriter" />
+            </service>
+            <start uid="export_selection" />
+            <update uid="export_selection" />
+        </config>
+    </extension>
+
+    <!-- Service config used to read SeriesDB without using ioAtoms. -->
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>SDBReaderIOSelectorConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>IOSelectorService config for SeriesDB reader</desc>
+        <config>
+            <type mode="reader" />
+            <selection mode="exclude" />
+            <addSelection service="::ioAtoms::SReader" />
+        </config>
+    </extension>
+
+    <!-- Service config used to read seriesDB using ioAtoms. -->
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>SDBAtomsReaderIOSelectorConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>Atoms seriesDB reader.</desc>
+        <config>
+            <type mode="reader" />
+            <selection mode="include" />
+            <addSelection service="::ioAtoms::SReader" />
+            <config id="MDAtomsConfig" service="::ioAtoms::SReader" />
+        </config>
+    </extension>
+
+    <!-- Service config used to read SeriesDB with all the available reader for SeriesDB. -->
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>FullSDBReaderIOSelectorConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>IOSelectorService config for SeriesDB reader</desc>
+        <config>
+            <type mode="reader" />
+            <selection mode="exclude" />
+            <config id="MDAtomsConfig" service="::ioAtoms::SReader" />
+        </config>
+    </extension>
+
+    <!-- Service config used for ioAtoms reader and writer. Defines the Data version and filter to use. -->
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>MDAtomsConfig</id>
+        <desc>Reader/Writer for atoms representing a medical data</desc>
+        <config>
+            <patcher context="MedicalData" version="V09ALA" />
+            <filter>VRRenderMedicalDataV2</filter>
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafActivity/volumeRenderingActivity/bin/build.options b/Bundles/LeafActivity/volumeRenderingActivity/bin/build.options
deleted file mode 100755
index f0b42b8..0000000
--- a/Bundles/LeafActivity/volumeRenderingActivity/bin/build.options
+++ /dev/null
@@ -1,22 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-
-REQUIREMENTS = [
-    '2DVisualizationActivity_0-1',
-    '3DVisualizationActivity_0-1',
-]
-
-BUNDLES = [
-    'gui_0-1'                ,
-    'guiQt_0-1'              ,
-    'ctrlSelection_0-1'      ,
-    'uiVisu_0-1'             ,
-    'uiVisuQt_0-1'           ,
-    'visuVTKAdaptor_0-1'     ,
-    'visuVTKVRAdaptor_0-1'   ,
-    'uiImageQt_0-1'          ,
-    'scene2D_0-1'            ,
-    'uiTF_0-1'               ,
-    'uiIO_0-1'               ,
-    'media_0-1'              ,
-]
diff --git a/Bundles/LeafActivity/volumeRenderingActivity/rc/configurations/VolumeRendering.xml b/Bundles/LeafActivity/volumeRenderingActivity/rc/configurations/VolumeRendering.xml
index 872d6f8..0173189 100644
--- a/Bundles/LeafActivity/volumeRenderingActivity/rc/configurations/VolumeRendering.xml
+++ b/Bundles/LeafActivity/volumeRenderingActivity/rc/configurations/VolumeRendering.xml
@@ -1,6 +1,5 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>VolumeRendering</id>
-    <type>parameters</type>
     <parameters>
         <param name="WID_PARENT" />
         <param name="GENERIC_UID" />
@@ -8,14 +7,14 @@
         <param name="AS_UID" />
         <param name="ICON_PATH" />
         <param name="imageUid" />
-        <param name="patient_name"  default="" />
+        <param name="patient_name" default="" />
         <param name="optionalModelSeriesCompositeUid" />
     </parameters>
     <config>
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::CardinalLayoutManager">
                         <view caption="VR" align="center" />
@@ -31,7 +30,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_tf" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_tf" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -45,7 +44,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_tfmTab" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_tfmTab" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::TabLayoutManager">
                         <view caption="TF-Negato" />
@@ -58,23 +57,23 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
+            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
                 <gui>
                     <layout>
-                        <menuItem name="Hide cross" icon="Bundles/media_0-1/icons/HideCross.png" style="radio" />
-                        <menuItem name="Show normal cross" icon="Bundles/media_0-1/icons/NormalCross.png" style="radio" />
-                        <menuItem name="Show full cross" icon="Bundles/media_0-1/icons/FullCross.png" style="radio" />
+                        <menuItem name="Hide cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideCross.png" style="radio" />
+                        <menuItem name="Show normal cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/NormalCross.png" style="radio" />
+                        <menuItem name="Show full cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/FullCross.png" style="radio" />
                         <separator />
-                        <menuItem name="Show 3d slice cursor" icon="Bundles/media_0-1/icons/icon-landmark.png" style="check" />
-                        <menuItem name="Show mesh" icon="Bundles/media_0-1/icons/icon-3D.png" style="check" />
-                        <menuItem name="Manage organs color" icon="Bundles/media_0-1/icons/ManageOrgan.png" style="check" />
+                        <menuItem name="Show 3d slice cursor" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-landmark.png" style="check" />
+                        <menuItem name="Show mesh" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png" style="check" />
+                        <menuItem name="Manage organs color" icon="@BUNDLE_PREFIX@/media_0-1/icons/ManageOrgan.png" style="check" />
                         <separator />
-                        <menuItem name="Show/hide box cropping" icon="Bundles/media_0-1/icons/icon-box.png" />
-                        <menuItem name="Reset box cropping" icon="Bundles/media_0-1/icons/icon-box-reset.png" />
+                        <menuItem name="Show/hide box cropping" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-box.png" style="check" />
+                        <menuItem name="Reset box cropping" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-box-reset.png" />
                         <separator />
-                        <menuItem name="Snapshot VR" icon="Bundles/media_0-1/icons/camera-photo.png" />
+                        <menuItem name="Snapshot VR" icon="@BUNDLE_PREFIX@/media_0-1/icons/camera-photo.png" />
                         <separator />
-                        <menuItem name="Export Activity" icon="Bundles/media_0-1/icons/Export.svg"  />
+                        <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
                     </layout>
                 </gui>
                 <registry>
@@ -95,7 +94,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_TFScene2D" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_TFScene2D" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -127,25 +126,27 @@
             <item key="visuConfig">
                 <object uid="${GENERIC_UID}_VisuComposite" type="::fwData::Composite">
 
-                    <service uid="${GENERIC_UID}_ActionShowSliceCursor" impl="::gui::action::PushObjectSrv" type="::fwGui::IActionSrv" autoConnect="no">
+                    <service uid="${GENERIC_UID}_ActionShowSliceCursor" impl="::gui::action::SPushObject" type="::fwGui::IActionSrv" autoConnect="no">
                         <push src="${GENERIC_UID}_VisuComposite[imageKey]" key="imageKeyCursor" />
                     </service>
 
-                    <service uid="${GENERIC_UID}_ActionShowMesh" impl="::gui::action::PushObjectSrv" type="::fwGui::IActionSrv" autoConnect="no">
+                    <service uid="${GENERIC_UID}_ActionShowMesh" impl="::gui::action::SPushObject" type="::fwGui::IActionSrv" autoConnect="no">
                         <push src="${optionalModelSeriesCompositeUid}[optionalModelSeriesKey]" key="modelSeries" />
                     </service>
 
-                    <service uid="${GENERIC_UID}_managerModelSeries" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes" >
+                    <service uid="${GENERIC_UID}_managerModelSeries" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
                         <mode type="stop" />
                         <config>
 
                             <object id="modelSeries" type="::fwMedData::ModelSeries">
                                 <service uid="${GENERIC_UID}_action_organManager" type="::fwGui::IActionSrv" impl="::gui::action::SConfigLauncher" autoConnect="yes">
                                     <config>
-                                        <appConfig id="OrganManagerWithSeries" >
+                                        <appConfig id="OrganManagerWithSeries">
                                             <parameters>
-                                                <parameter replace="ORGAN_MANAGER_MODELSERIES" by="self"  />
-                                                <parameter replace="ICON_PATH" by="${ICON_PATH}"  />
+                                                <parameter replace="ORGAN_MANAGER_MODELSERIES" by="self" />
+                                                <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+                                                <parameter replace="ModelRepresentationChannel" by="ModelRepresentationChannel" />
+                                                <parameter replace="ModelDisplayChannel" by="ModelDisplayChannel" />
                                             </parameters>
                                         </appConfig>
                                     </config>
@@ -154,25 +155,17 @@
                         </config>
                     </service>
 
-                    <service uid="${GENERIC_UID}_ActionSnapshotVR" impl="::uiVisu::action::SSnapshot" type="::fwGui::IActionSrv" autoConnect="no">
-                        <snap>
-                            <scene uid="${GENERIC_UID}_vr" />
-                        </snap>
-                    </service>
+                    <service uid="${GENERIC_UID}_ActionSnapshotVR" impl="::uiVisu::action::SSnapshot" type="::fwGui::IActionSrv" autoConnect="no" />
 
                     <!-- Generic Scene VR -->
-                    <service uid="${GENERIC_UID}_vr" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
+                    <service uid="${GENERIC_UID}_vr" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
                         <scene>
 
                             <picker id="negato1default" vtkclass="fwVtkCellPicker" />
 
                             <renderer id="default" background="0.0" />
 
-                            <adaptor id="renderNegato1" class="::visuVTKAdaptor::Render" objectId="self">
-                                <config renderer="default" />
-                            </adaptor>
-
-                            <adaptor id="snapshot1" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                            <adaptor id="snapshot1" uid="${GENERIC_UID}_snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
                                 <config renderer="default" />
                             </adaptor>
 
@@ -184,17 +177,31 @@
                                 <config renderer="default" />
                             </adaptor>
 
-                            <adaptor id="modelSeriesAdaptor" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
+                            <adaptor id="modelSeriesAdaptor" uid="${GENERIC_UID}_modelSeriesAdaptorUid" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
                                 <config renderer="default" picker="negato1default" autoresetcamera="no" />
                             </adaptor>
 
-                            <adaptor id="VolumeScene3DA" class="::visuVTKVRAdaptor::Volume" objectId="imageKey">
+                            <adaptor id="VolumeScene3DA" uid="${GENERIC_UID}_VolumeScene3DA" class="::visuVTKVRAdaptor::Volume" objectId="imageKey">
                                 <config renderer="default" selectedTFKey="SelectedTF" tfSelectionFwID="${GENERIC_UID}_TFSelections" />
                             </adaptor>
 
                             <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageKey">
                                 <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
                             </adaptor>
+
+                            <proxy channel="ModelRepresentationChannel" waitForKey="modelSeries">
+                                <slot>${GENERIC_UID}_modelSeriesAdaptorUid/updateNormalMode</slot>
+                            </proxy>
+
+                            <proxy channel="ModelDisplayChannel" waitForKey="modelSeries">
+                                <slot>${GENERIC_UID}_modelSeriesAdaptorUid/showReconstructions</slot>
+                            </proxy>
+
+                            <connect>
+                                <signal>${GENERIC_UID}_ActionSnapshotVR/snapped</signal>
+                                <slot>${GENERIC_UID}_snapshotUID/snap</slot>
+                            </connect>
+
                         </scene>
                     </service>
 
@@ -324,13 +331,14 @@
 
                             <service uid="${GENERIC_UID}_cfgNegato" impl="::fwServices::SConfigController" autoConnect="no">
                                 <config>
-                                    <appConfig id="2DNegatoWithTF" >
+                                    <appConfig id="2DNegatoWithTF">
                                         <parameters>
-                                            <parameter replace="imageUid" by="self"  />
-                                            <parameter replace="TFSelectionsUid" by="${GENERIC_UID}_TFSelections"  />
-                                            <parameter replace="selectedTFKey" by="SelectedTF"  />
+                                            <parameter replace="imageUid" by="self" />
+                                            <parameter replace="TFSelectionsUid" by="${GENERIC_UID}_TFSelections" />
+                                            <parameter replace="selectedTFKey" by="SelectedTF" />
                                             <parameter replace="patient_name" by="${patient_name}" />
-                                            <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato"  />
+                                            <parameter replace="WID_PARENT" by="${GENERIC_UID}_view_negato" />
+                                            <parameter replace="CrossTypeChannel" by="crossTypeChannel" />
                                         </parameters>
                                     </appConfig>
                                 </config>
@@ -349,12 +357,17 @@
                                 <crossType>full</crossType>
                             </service>
 
-                            <service uid="${GENERIC_UID}_ActionShowHideBoxWidget" type="::fwGui::IActionSrv" impl="::gui::action::ActionNotifyService" autoConnect="no">
-                                <notify type="::fwServices::ObjectMsg" event="SHOWHIDE_BOX_WIDGET" />
+                            <service uid="${GENERIC_UID}_ActionShowHideBoxWidget" type="::fwGui::IActionSrv" impl="::gui::action::SBooleanSlotCaller" autoConnect="no">
+                                <slots>
+                                    <slot>${GENERIC_UID}_VolumeScene3DA/activateBoxClipping</slot>
+                                </slots>
+                                <state active="true" />
                             </service>
 
-                            <service uid="${GENERIC_UID}_ActionResetBoxWidget" type="::fwGui::IActionSrv" impl="::gui::action::ActionNotifyService" autoConnect="no">
-                                <notify type="::fwServices::ObjectMsg" event="RESET_BOX_WIDGET" />
+                            <service uid="${GENERIC_UID}_ActionResetBoxWidget" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                                <slots>
+                                    <slot>${GENERIC_UID}_VolumeScene3DA/resetBoxWidget</slot>
+                                </slots>
                             </service>
 
                             <service uid="${GENERIC_UID}_FieldManager" impl="::ctrlSelection::manager::SField" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
@@ -368,11 +381,17 @@
                                 </config>
                             </service>
 
-                            <service uid="${GENERIC_UID}_computeHistogram" type="::fwServices::IController" impl="::scene2D::processing::SComputeHistogram" autoConnect="yes" worker="COMPUTING_THREAD" >
+                            <service uid="${GENERIC_UID}_computeHistogram" type="::fwServices::IController" impl="::scene2D::processing::SComputeHistogram" autoConnect="yes" worker="COMPUTING_THREAD">
                                 <histogramId>${GENERIC_UID}_Histogram</histogramId>
                                 <binsWidth>5.0</binsWidth>
                             </service>
 
+                            <proxy channel="crossTypeChannel">
+                                <signal>${GENERIC_UID}_ActionHideCross/crossTypeModified</signal>
+                                <signal>${GENERIC_UID}_ActionShowNormalCross/crossTypeModified</signal>
+                                <signal>${GENERIC_UID}_ActionShowFullCross/crossTypeModified</signal>
+                            </proxy>
+
                         </object>
                     </item>
 
@@ -415,10 +434,10 @@
             <start uid="${GENERIC_UID}_Scene2D_Shutter" />
             <start uid="${GENERIC_UID}_Scene2D" />
             <start uid="${GENERIC_UID}_computeHistogram" />
+            <start uid="${GENERIC_UID}_FieldManager" />
             <start uid="${GENERIC_UID}_MedicalImageSrv" />
             <start uid="${GENERIC_UID}_LightSwapper" />
             <start uid="${GENERIC_UID}_vr" />
-            <start uid="${GENERIC_UID}_FieldManager" />
             <start uid="${GENERIC_UID}_cfgNegato" />
             <start uid="${GENERIC_UID}_managerModelSeries" />
 
diff --git a/Bundles/LeafActivity/volumeRenderingActivity/rc/plugin.xml b/Bundles/LeafActivity/volumeRenderingActivity/rc/plugin.xml
index 4981ce1..a1918d4 100644
--- a/Bundles/LeafActivity/volumeRenderingActivity/rc/plugin.xml
+++ b/Bundles/LeafActivity/volumeRenderingActivity/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="volumeRenderingActivity">
+<plugin id="volumeRenderingActivity" version="@DASH_VERSION@" >
 
     <requirement id="servicesReg" />
     <requirement id="2DVisualizationActivity" />
@@ -15,10 +15,13 @@
         <id>VolumeRendering</id>
         <title>Volume rendering</title>
         <desc>Volume rendering activity</desc>
-        <icon>Bundles/media_0-1/icons/icon-VR.png</icon>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-VR.png</icon>
         <requirements>
-            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1" />
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1">
+                <desc>Image to displayed in volumic rendering.</desc>
+            </requirement>
             <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="0" maxOccurs="1" >
+                <desc>Optional model to superimpose with the volumic image.</desc>
                 <key>optionalModelSeriesKey</key>
             </requirement>
         </requirements>
diff --git a/Bundles/LeafActivity/volumeRenderingActivity2/CMakeLists.txt b/Bundles/LeafActivity/volumeRenderingActivity2/CMakeLists.txt
new file mode 100644
index 0000000..28184c6
--- /dev/null
+++ b/Bundles/LeafActivity/volumeRenderingActivity2/CMakeLists.txt
@@ -0,0 +1,3 @@
+
+fwLoadProperties()
+
diff --git a/Bundles/LeafActivity/volumeRenderingActivity2/Properties.cmake b/Bundles/LeafActivity/volumeRenderingActivity2/Properties.cmake
new file mode 100644
index 0000000..3a3271a
--- /dev/null
+++ b/Bundles/LeafActivity/volumeRenderingActivity2/Properties.cmake
@@ -0,0 +1,22 @@
+
+set( NAME volumeRenderingActivity2 )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    2DVisualizationActivity2
+    3DVisualizationActivity2
+    gui
+    guiQt
+    ctrlSelection
+    uiVisu
+    uiVisuQt
+    visuVTKAdaptor
+    visuVTKVRAdaptor
+    uiImageQt
+    scene2D
+    uiTF
+    uiIO
+    media
+)
+
diff --git a/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml b/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml
new file mode 100644
index 0000000..24b9193
--- /dev/null
+++ b/Bundles/LeafActivity/volumeRenderingActivity2/rc/configurations/VolumeRendering.xml
@@ -0,0 +1,430 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>VolumeRendering</id>
+    <parameters>
+        <!-- activity parameters -->
+        <param name="WID_PARENT" />
+        <param name="SERIESDB" />
+        <param name="AS_UID" />
+        <param name="ICON_PATH" />
+
+        <!-- data -->
+        <param name="image" />
+        <param name="patient_name" default="" />
+        <param name="optionalModelSeriesComposite" />
+    </parameters>
+
+        <!-- input image -->
+    <config>
+        <!-- activity -->
+        <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+        <object uid="${AS_UID}" type="::fwMedData::ActivitySeries" src="ref" />
+
+        <!-- input image -->
+        <object uid="${image}" type="::fwData::Image" src="ref" />
+
+        <!-- Transfer function -->
+        <object uid="TFSet" type="::fwData::Composite" src="deferred" />
+        <object uid="TFSelections" type="::fwData::Composite" />
+
+        <!-- optional model series -->
+        <object uid="${optionalModelSeriesComposite}" type="::fwData::Composite" src="ref" />
+        <object uid="optionalModelSeries" type="::fwData::Image" src="deferred" />
+
+        <!-- scene 2D -->
+        <object uid="Viewport" type="::scene2D::data::Viewport" />
+        <object uid="Histogram" type="::fwData::Histogram" />
+        <object uid="HistogramPoint" type="::fwData::Point" />
+
+        <service uid="mainView" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::CardinalLayoutManager">
+                    <view caption="VR" align="center" />
+                    <view align="right" minWidth="450" />
+                </layout>
+                <toolBar />
+            </gui>
+            <registry>
+                <parent wid="${WID_PARENT}" />
+                <toolBar sid="toolBar" start="yes" />
+                <view sid="vr" start="no" />
+                <view sid="tf" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="tf" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" minHeight="30" />
+                    <view proportion="1" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="tfm" start="no" />
+                <view sid="tfmTab" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="tfmTab" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::TabLayoutManager">
+                    <view caption="TF-Negato" />
+                    <view caption="TF-Scene2D" />
+                </layout>
+            </gui>
+            <registry>
+                <view wid="view_negato" />
+                <view sid="TFScene2D" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="toolBar" type="::gui::aspect::SDefaultToolBar">
+            <gui>
+                <layout>
+                    <menuItem name="Hide cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/HideCross.png" style="radio" />
+                    <menuItem name="Show normal cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/NormalCross.png" style="radio" />
+                    <menuItem name="Show full cross" icon="@BUNDLE_PREFIX@/media_0-1/icons/FullCross.png" style="radio" />
+                    <separator />
+                    <menuItem name="Show 3d slice cursor" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-landmark.png" style="check" />
+                    <menuItem name="Show mesh" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png" style="check" />
+                    <menuItem name="Manage organs color" icon="@BUNDLE_PREFIX@/media_0-1/icons/ManageOrgan.png" style="check" />
+                    <separator />
+                    <menuItem name="Show/hide box cropping" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-box.png" style="check" />
+                    <menuItem name="Reset box cropping" icon="@BUNDLE_PREFIX@/media_0-1/icons/icon-box-reset.png" />
+                    <separator />
+                    <menuItem name="Snapshot VR" icon="@BUNDLE_PREFIX@/media_0-1/icons/camera-photo.png" />
+                    <separator />
+                    <menuItem name="Export Activity" icon="@BUNDLE_PREFIX@/media_0-1/icons/Export.svg" />
+                </layout>
+            </gui>
+            <registry>
+                <menuItem sid="ActionHideCross" start="yes" />
+                <menuItem sid="ActionShowNormalCross" start="yes" />
+                <menuItem sid="ActionShowFullCross" start="yes" />
+
+                <menuItem sid="ActionShowSliceCursor" start="no" />
+                <menuItem sid="ActionShowMesh" start="yes" />
+                <menuItem sid="action_organManager" start="no" />
+
+                <menuItem sid="ActionShowHideBoxWidget" start="yes" />
+                <menuItem sid="ActionResetBoxWidget" start="yes" />
+
+                <menuItem sid="ActionSnapshotVR" start="yes" />
+
+                <menuItem sid="ActionExportActivity" start="yes" />
+            </registry>
+        </service>
+
+        <service uid="TFScene2D" type="::gui::view::SDefaultView">
+            <gui>
+                <layout type="::fwGui::LineLayoutManager">
+                    <orientation value="vertical" />
+                    <view proportion="0" minHeight="100" />
+                    <view proportion="1" />
+                    <view proportion="0" minHeight="30" />
+                </layout>
+            </gui>
+            <registry>
+                <view sid="Scene2D_Shutter" start="no" />
+                <view sid="Scene2D" start="no" />
+                <view sid="FloatEditor" start="no" />
+            </registry>
+        </service>
+
+        <service uid="ActionExportActivity" type="::uiMedData::action::SExportSeries" autoConnect="yes">
+            <inout key="seriesDB" uid="${SERIESDB}" />
+            <inout key="series" uid="${AS_UID}" />
+        </service>
+
+        <!-- GENERIC SCENE DEFINITION -->
+
+<!--        <service uid="ActionShowSliceCursor" type="::gui::action::SPushObject" type="::fwGui::IActionSrv">
+            <push src="VisuComposite[imageKey]" key="imageKeyCursor" />
+        </service>-->
+
+        <service uid="ActionShowMesh" type="::gui::action::SPushObject">
+            <inout key="source" uid="${optionalModelSeriesComposite}" />
+            <out key="destination" uid="optionalModelSeries" />
+            <push srcKey="optionalModelSeriesKey" />
+        </service>
+
+        <service uid="action_organManager" type="::gui::action::SConfigLauncher" >
+            <appConfig id="OrganManagerWithSeries" />
+            <inout key="ORGAN_MANAGER_MODELSERIES" uid="optionalModelSeries"/>
+            <parameter replace="ICON_PATH" by="${ICON_PATH}" />
+            <parameter replace="ModelRepresentationChannel" uid="ModelRepresentationChannel" />
+            <parameter replace="ModelDisplayChannel" uid="ModelDisplayChannel" />
+        </service>
+
+        <service uid="ActionSnapshotVR" type="::uiVisu::action::SSnapshot" />
+
+        <!-- Generic Scene VR -->
+        <service uid="vr" type="::fwRenderVTK::SRender" autoConnect="yes">
+            <in key="imageKey" uid="${image}" />
+            <in key="modelSeries" uid="optionalModelSeries" optional="yes"/>
+            <inout key="TFSelections" uid="TFSelections" />
+            <scene>
+
+                <picker id="negato1default" vtkclass="fwVtkCellPicker" />
+
+                <renderer id="default" background="0.0" />
+
+                <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                    <config renderer="default" />
+                </adaptor>
+
+                <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                    <config renderer="default" style="InteractorStyle3DForNegato" />
+                </adaptor>
+
+                <adaptor id="Image3DCursor" class="::visuVTKAdaptor::Image3DCursor" objectId="imageKeyCursor">
+                    <config renderer="default" />
+                </adaptor>
+
+                <adaptor id="modelSeriesAdaptor" uid="modelSeriesAdaptorUid" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
+                    <config renderer="default" picker="negato1default" autoresetcamera="no" />
+                </adaptor>
+
+                <adaptor id="VolumeScene3DA" uid="VolumeScene3DA" class="::visuVTKVRAdaptor::Volume" objectId="imageKey">
+                    <config renderer="default" selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                </adaptor>
+
+                <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageKey">
+                    <config renderer="default" text="${patient_name}" fontSize="15" hAlign="right" vAlign="top" />
+                </adaptor>
+
+                <proxy channel="ModelRepresentationChannel" waitForKey="modelSeries">
+                    <slot>modelSeriesAdaptorUid/updateNormalMode</slot>
+                </proxy>
+
+                <proxy channel="ModelDisplayChannel" waitForKey="modelSeries">
+                    <slot>modelSeriesAdaptorUid/showReconstructions</slot>
+                </proxy>
+
+                <connect>
+                    <signal>ActionSnapshotVR/snapped</signal>
+                    <slot>snapshotUID/snap</slot>
+                </connect>
+
+            </scene>
+        </service>
+
+        <service uid="Scene2D" type="::scene2D::Render" autoConnect="yes">
+
+            <in key="imageKey" uid="${image}" />
+            <in key="histogram" uid="Histogram" />
+            <inout key="histogramPoint" uid="HistogramPoint" />
+            <inout key="viewport" uid="Viewport" />
+            <inout key="TFSelections" uid="TFSelections" />
+
+            <scene>
+
+                <scene x="-1100" y="-1.1" width="2400" height="1.2" antialiasing="true" />
+
+                <viewport id="view1" x="-500" y="-1.1" width="500" height="1.2" />
+
+                <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
+
+                <axis id="axeHistogramY" origin="0.0" scale="-0.000001" scaleType="LINEAR" />
+
+                <adaptor id="grid" class="::scene2D::adaptor::Grid2D" objectId="self">
+                    <config xMin="-1200" xMax="1500" yMin="0.0" yMax="1.0" xSpacing="100" ySpacing="0.1" opacity="0.25" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="1" />
+                </adaptor>
+
+                <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="-1200" x2="1500" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
+                </adaptor>
+
+                <adaptor id="ordinate" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="0" x2="0" y1="-0.1" y2="1.2" color="white" xAxis="xAxis" yAxis="yAxis" zValue="3" />
+                </adaptor>
+
+                <adaptor id="maxOpacity" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="-1200" x2="1500" y1="1" y2="1" color="red" xAxis="xAxis" yAxis="yAxis" zValue="4" />
+                </adaptor>
+
+                <adaptor id="curvedHistogram" class="::scene2D::adaptor::CurvedHistogram" objectId="histogram">
+                    <config xAxis="xAxis" yAxis="axeHistogramY" borderColor="lightGray" innerColor="gray" opacity="0.25" zValue="6" histogramPointUID="histogramPoint" borderWidth="2.0" />
+                </adaptor>
+
+                <!-- A graphic cursor that follow histogram's shape according to mouse's cursor -->
+                <adaptor id="histogramCursor" class="::scene2D::adaptor::HistogramCursor" objectId="histogram">
+                    <config xAxis="xAxis" yAxis="axeHistogramY" color="blue" borderColor="gray" zValue="9" pointSize="16" viewportUID="viewport" histogramPointUID="histogramPoint" />
+                </adaptor>
+
+                <adaptor id="histogramValue" class="::scene2D::adaptor::HistogramValue" objectId="histogram">
+                    <config xAxis="xAxis" yAxis="axeHistogramY" zValue="12" fontSize="6" viewportUID="viewport" histogramPointUID="histogramPoint" />
+                </adaptor>
+
+                <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="imageKey">
+                    <config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="7" viewportUID="viewport" selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                </adaptor>
+
+                <adaptor id="viewportRangeUpdater" class="::scene2D::adaptor::ViewportUpdater" objectId="viewport">
+                    <config xAxis="xAxis" yAxis="yAxis" zValue="9" />
+                </adaptor>
+
+                <adaptor id="scaleValuesLeft" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                    <config min="0.0" max="1.0" interval="0.1" fontSize="7" align="left" unit="%" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="axisLeft" class="::scene2D::adaptor::Axis" objectId="self">
+                    <config min="0.0" max="1.0" interval="0.1" align="left" tickSize="5" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="scaleValuesBottom" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                    <config min="-1024" max="1024" interval="200" fontSize="7" align="bottom" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+                <adaptor id="axisBottom" class="::scene2D::adaptor::Axis" objectId="self">
+                    <config min="-1024" max="1024" interval="100" align="bottom" tickSize="5" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="11" />
+                </adaptor>
+
+            </scene>
+
+        </service>
+
+        <service uid="Scene2D_Shutter" type="::scene2D::Render" autoConnect="yes">
+            <in key="histogram" uid="Histogram" />
+            <inout key="viewport" uid="Viewport" />
+
+            <scene>
+
+                <scene x="-1100" y="-1.1" width="2400" height="1.2" />
+
+                <viewport id="view1" x="-1100" y="-1.1" width="2400" height="1.2" />
+
+                <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
+
+                <axis id="axeHistogramY" origin="0.0" scale="-0.000001" scaleType="LINEAR" />
+
+                <adaptor id="shutterGrid" class="::scene2D::adaptor::Grid2D" objectId="self">
+                    <config xMin="-1200" xMax="1400" yMin="-0.7" yMax="1.7" xSpacing="200" ySpacing="0.2" viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="1" />
+                </adaptor>
+
+                <adaptor id="shutterAbscissa" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="-1200" x2="1400" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
+                </adaptor>
+
+                <adaptor id="shutterOrdinate" class="::scene2D::adaptor::Line" objectId="self">
+                    <config x1="0" x2="0" y1="-0.1" y2="1.2" color="white" xAxis="xAxis" yAxis="yAxis" zValue="3" />
+                </adaptor>
+
+                <adaptor id="shutterHistogram" class="::scene2D::adaptor::Histogram" objectId="histogram">
+                    <config color="green" xAxis="xAxis" yAxis="axeHistogramY" zValue="4" />
+                </adaptor>
+
+                <adaptor id="viewportRangeSelector" class="::scene2D::adaptor::ViewportRangeSelector" objectId="viewport">
+                    <config xAxis="xAxis" yAxis="yAxis" zValue="5" initialWidth="1200" initialPos="-700" />
+                </adaptor>
+
+            </scene>
+
+        </service>
+
+        <!-- Services working on input image -->
+        <service uid="LockImageSrv" type="::ctrlMemory::LockDumpSrv" >
+            <in key="image" uid="${image}" />
+        </service>
+
+        <service uid="MedicalImageSrv" type="::ctrlSelection::MedicalImageSrv" >
+            <inout key="image" uid="${image}" />
+        </service>
+
+        <service uid="cfgNegato" type="::fwServices::SConfigController">
+            <appConfig id="2DNegatoWithTF" />
+            <inout key="image" uid="${image}" />
+            <inout key="TFSelections" uid="TFSelections" />
+            <parameter replace="selectedTFKey" by="SelectedTF" />
+            <parameter replace="patient_name" by="${patient_name}" />
+            <parameter replace="WID_PARENT" uid="view_negato" />
+            <parameter replace="CrossTypeChannel" uid="crossTypeChannel" />
+        </service>
+
+        <service uid="ActionHideCross" type="::uiVisu::action::CrossTypeAction">
+            <in key="image" uid="${image}" />
+            <crossType>hide</crossType>
+        </service>
+
+        <service uid="ActionShowNormalCross" type="::uiVisu::action::CrossTypeAction">
+            <in key="image" uid="${image}" />
+            <crossType>half</crossType>
+            <state active="true" />
+        </service>
+
+        <service uid="ActionShowFullCross" type="::uiVisu::action::CrossTypeAction">
+            <in key="image" uid="${image}" />
+            <crossType>full</crossType>
+        </service>
+
+        <service uid="ActionShowHideBoxWidget" type="::gui::action::SBooleanSlotCaller">
+            <slots>
+                <slot>VolumeScene3DA/activateBoxClipping</slot>
+            </slots>
+            <state active="true" />
+        </service>
+
+        <service uid="ActionResetBoxWidget" type="::gui::action::SSlotCaller">
+            <slots>
+                <slot>VolumeScene3DA/resetBoxWidget</slot>
+            </slots>
+        </service>
+
+        <!-- Services working on TF -->
+
+        <!-- This manager adds/removes a field (m_transferFunctionCompositeId) on Image (image) -->
+        <service uid="fieldMgr" type="::gui::action::SPushField" >
+            <inout key="source" uid="${image}" />
+            <out key="destination" uid="TFSet" />
+            <push field="m_transferFunctionCompositeId" />
+        </service>
+
+        <service uid="tfm" type="::uiTF::TransferFunctionEditor" >
+            <inout key="transferFunctions" uid="TFSet" />
+            <inout key="TFSelections" uid="TFSelections" />
+            <config selectedTFKey="SelectedTF" />
+        </service>
+
+        <service uid="computeHistogram" type="::scene2D::processing::SComputeHistogram" autoConnect="yes" worker="COMPUTING_THREAD">
+            <in key="image" uid="${image}" />
+            <inout key="histogram" uid="Histogram" />
+            <binsWidth>5.0</binsWidth>
+        </service>
+<!--
+        <item key="LightSelection">
+            <object uid="LightSelection" type="::fwData::Composite">
+
+                <service uid="LightSwapper" type="::ctrlSelection::manager::SwapperSrv" autoConnect="yes">
+                    <mode type="stop" />
+                    <config>
+                        <object uid="selectedLight" type="::fwData::Composite">
+                        </object>
+                    </config>
+                </service>
+
+            </object>
+        </item>-->
+
+        <connect channel="crossTypeChannel">
+            <signal>ActionHideCross/crossTypeModified</signal>
+            <signal>ActionShowNormalCross/crossTypeModified</signal>
+            <signal>ActionShowFullCross/crossTypeModified</signal>
+        </connect>
+
+        <!-- START AND STOP SERVICES -->
+        <start uid="computeHistogram" />
+        <start uid="LockImageSrv" />
+        <start uid="MedicalImageSrv" />
+        <start uid="mainView" />
+        <start uid="Scene2D_Shutter" />
+        <start uid="Scene2D" />
+        <start uid="vr" />
+        <start uid="cfgNegato" />
+        <start uid="fieldMgr" />
+
+        <update uid="fieldMgr" />
+
+    </config>
+</extension>
diff --git a/Bundles/LeafActivity/volumeRenderingActivity2/rc/plugin.xml b/Bundles/LeafActivity/volumeRenderingActivity2/rc/plugin.xml
new file mode 100644
index 0000000..e17b52f
--- /dev/null
+++ b/Bundles/LeafActivity/volumeRenderingActivity2/rc/plugin.xml
@@ -0,0 +1,36 @@
+<plugin id="volumeRenderingActivity2" version="@DASH_VERSION@" >
+
+    <requirement id="servicesReg" />
+    <requirement id="2DVisualizationActivity2" />
+    <requirement id="3DVisualizationActivity2" />
+    <requirement id="visuVTKVRAdaptor" />
+    <requirement id="scene2D" />
+    <requirement id="uiTF" />
+    <requirement id="uiIO" />
+    <requirement id="media" />
+
+    <xi:include href="configurations/VolumeRendering.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>VolumeRendering</id>
+        <title>Volume rendering</title>
+        <desc>Volume rendering activity</desc>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-VR.png</icon>
+        <requirements>
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1">
+                <desc>Image to displayed in volumic rendering.</desc>
+            </requirement>
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="0" maxOccurs="1" >
+                <desc>Optional model to superimpose with the volumic image.</desc>
+                <key>optionalModelSeriesKey</key>
+            </requirement>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="VolumeRendering">
+            <parameters>
+                <parameter replace="image" uid="@values.imageSeries.image" />
+                <parameter replace="optionalModelSeriesComposite" uid="@values.modelSeries" />
+            </parameters>
+        </appConfig>
+    </extension>
+</plugin>
diff --git a/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake b/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake
index 48b33d9..fafcf51 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake
+++ b/Bundles/LeafAtomFilter/filterVRRender/Properties.cmake
@@ -3,7 +3,7 @@
 set( NAME filterVRRender )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES 
+set( DEPENDENCIES
     fwCore
     fwAtoms
     fwAtomsFilter
diff --git a/Bundles/LeafAtomFilter/filterVRRender/bin/build.options b/Bundles/LeafAtomFilter/filterVRRender/bin/build.options
deleted file mode 100644
index ea4584b..0000000
--- a/Bundles/LeafAtomFilter/filterVRRender/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE = 'bundle'
-VERSION = '0-1'
-USE = []
-LIB = [
-    'fwCore_0-1',
-    'fwAtoms_0-1',
-    'fwAtomsFilter_0-1',
-    'fwAtomsPatch_0-1',
-    'fwRuntime_0-3',
-    'fwActivities_0-1',
-    ]
diff --git a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV1.hpp b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV1.hpp
index 30f06e8..ee037d1 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV1.hpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace filterVRRender
diff --git a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV2.hpp b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV2.hpp
index 5719e8d..f59b3bd 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV2.hpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/MedicalDataV2.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace filterVRRender
diff --git a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/Plugin.hpp b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/Plugin.hpp
index 1ac4f83..caa31a5 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/Plugin.hpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/Plugin.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/config.hpp b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/config.hpp
deleted file mode 100644
index c9f8dbe..0000000
--- a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FILTERVRRENDER_CONFIG_HPP_
-#define _FILTERVRRENDER_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FILTERVRRENDER_EXPORTS
-    #define FILTERVRRENDER_API __declspec(dllexport)
-    #else
-    #define FILTERVRRENDER_API __declspec(dllimport)
-    #endif
-
-    #define FILTERVRRENDER_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FILTERVRRENDER_EXPORTS
-    #define FILTERVRRENDER_API __attribute__ ((visibility("default")))
-    #define FILTERVRRENDER_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define FILTERVRRENDER_API __attribute__ ((visibility("hidden")))
-    #define FILTERVRRENDER_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define FILTERVRRENDER_API
-    #define FILTERVRRENDER_CLASS_API
-
-#endif
-
-#endif //_FILTERVRRENDER_CONFIG_HPP_
-
diff --git a/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp
new file mode 100644
index 0000000..c21a3e6
--- /dev/null
+++ b/Bundles/LeafAtomFilter/filterVRRender/include/filterVRRender/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FILTERVRRENDER_NAMESPACE_HPP__
+#define __FILTERVRRENDER_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace filterVRRender contains filters for atoms.
+ * @namespace filterVRRender
+ **/
+
+namespace filterVRRender
+{
+
+} // namespace filterVRRender
+
+#endif // __FILTERVRRENDER_NAMESPACE_HPP__
diff --git a/Bundles/LeafAtomFilter/filterVRRender/rc/plugin.xml b/Bundles/LeafAtomFilter/filterVRRender/rc/plugin.xml
index f41d57e..6ddc917 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/rc/plugin.xml
+++ b/Bundles/LeafAtomFilter/filterVRRender/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="filterVRRender" class="::filterVRRender::Plugin" >
+<plugin id="filterVRRender" class="::filterVRRender::Plugin"  version="@DASH_VERSION@" >
 
     <library name="filterVRRender" />
 
diff --git a/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV1.cpp b/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV1.cpp
index d481abc..045ecb7 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV1.cpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,10 +21,12 @@ namespace filterVRRender
 fwAtomsFilterRegisterMacro( ::filterVRRender::MedicalDataV1, "VRRenderMedicalDataV1" );
 
 MedicalDataV1::MedicalDataV1(::fwAtomsFilter::IFilter::Key key)
-{}
+{
+}
 
 MedicalDataV1::~MedicalDataV1()
-{}
+{
+}
 
 void clearMapAttribute(const std::string& key, const ::fwAtoms::Map::sptr& values)
 {
@@ -47,7 +49,7 @@ void MedicalDataV1::apply(const SPTR(::fwAtoms::Object)& atom)
 
     const std::string& classname = ::fwAtomsPatch::helper::getClassname(atom);
     FW_RAISE_IF("Unable to filter atom of class '" << classname << "'. Expected class is '::fwData::Composite'",
-            classname != "::fwData::Composite");
+                classname != "::fwData::Composite");
 
     ::fwAtoms::Map::sptr values = atom->getAttribute< ::fwAtoms::Map >("values");
     SLM_ASSERT("Failed to retrieve 'values' attribute as ::fwAtoms::Map", values);
diff --git a/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV2.cpp b/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV2.cpp
index 0371469..b669d6b 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV2.cpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/MedicalDataV2.cpp
@@ -1,22 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
 
+#include "filterVRRender/MedicalDataV2.hpp"
+
+#include <fwAtoms/Base.hpp>
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
-#include <fwAtoms/Base.hpp>
 #include <fwAtoms/Sequence.hpp>
-
-#include <fwAtomsPatch/helper/functions.hpp>
+#include <fwAtomsFilter/functions.hpp>
 
 #include <fwAtomsFilter/registry/macros.hpp>
-#include <fwAtomsFilter/functions.hpp>
 
-#include "filterVRRender/MedicalDataV2.hpp"
+#include <fwAtomsPatch/helper/functions.hpp>
 
 namespace filterVRRender
 {
@@ -24,10 +23,12 @@ namespace filterVRRender
 fwAtomsFilterRegisterMacro( ::filterVRRender::MedicalDataV2, "VRRenderMedicalDataV2" );
 
 MedicalDataV2::MedicalDataV2(::fwAtomsFilter::IFilter::Key key)
-{}
+{
+}
 
 MedicalDataV2::~MedicalDataV2()
-{}
+{
+}
 
 void MedicalDataV2::apply(const SPTR(::fwAtoms::Object)& atom)
 {
@@ -35,16 +36,16 @@ void MedicalDataV2::apply(const SPTR(::fwAtoms::Object)& atom)
 
     SLM_ASSERT("Unable to filter atom : invalid object", atom);
 
-    const std::string expName = "::fwMedData::SeriesDB";    // expected classname 
+    const std::string expName    = "::fwMedData::SeriesDB"; // expected classname
     const std::string& classname = ::fwAtomsPatch::helper::getClassname(atom);
     FW_RAISE_IF("Unable to filter atom of class '" << classname << "'. Expected class is '" + expName + "'",
-            classname != expName);
+                classname != expName);
 
     ::fwAtoms::Sequence::sptr series = atom->getAttribute< ::fwAtoms::Sequence >("values");
     SLM_ASSERT("Failed to retrieve 'values' attribute as ::fwAtoms::Sequence", series);
 
     ::fwAtoms::Sequence::sptr knownSeries = ::fwAtoms::Sequence::New();
-    BOOST_FOREACH(::fwAtoms::Base::sptr serie, series->getValue())
+    for(::fwAtoms::Base::sptr serie :  series->getValue())
     {
         ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::dynamicCast(serie);
         SLM_ASSERT("Failed to cast sequence element as ::fwAtoms::Object", obj);
@@ -56,7 +57,7 @@ void MedicalDataV2::apply(const SPTR(::fwAtoms::Object)& atom)
     }
 
     series->clear();
-    BOOST_FOREACH(::fwAtoms::Base::sptr serie, knownSeries->getValue())
+    for(::fwAtoms::Base::sptr serie :  knownSeries->getValue())
     {
         series->push_back(serie);
     }
diff --git a/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/Plugin.cpp b/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/Plugin.cpp
index d4371bf..bc5be4f 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/Plugin.cpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/src/filterVRRender/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,13 +14,16 @@ namespace filterVRRender
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::filterVRRender::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace filterVRRender
 
diff --git a/Bundles/LeafAtomFilter/filterVRRender/test/CMakeLists.txt b/Bundles/LeafAtomFilter/filterVRRender/test/CMakeLists.txt
new file mode 100644
index 0000000..3881996
--- /dev/null
+++ b/Bundles/LeafAtomFilter/filterVRRender/test/CMakeLists.txt
@@ -0,0 +1,7 @@
+fwLoadProperties()
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
+
+
+
diff --git a/Bundles/LeafAtomFilter/filterVRRender/test/Properties.cmake b/Bundles/LeafAtomFilter/filterVRRender/test/Properties.cmake
new file mode 100644
index 0000000..ea67deb
--- /dev/null
+++ b/Bundles/LeafAtomFilter/filterVRRender/test/Properties.cmake
@@ -0,0 +1,16 @@
+
+set( NAME filterVRRenderTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES 
+    fwAtoms
+    fwAtomsFilter
+    fwAtomsPatch
+    fwTools
+    fwCore
+    fwRuntime
+    fwTest
+    )
+set( REQUIREMENTS filterVRRender dataReg servicesReg)
+
+set(CPPUNITTEST_OPTIONS BUNDLE filterVRRender WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafAtomFilter/filterVRRender/test/cppunit.options b/Bundles/LeafAtomFilter/filterVRRender/test/cppunit.options
deleted file mode 100644
index a46a55c..0000000
--- a/Bundles/LeafAtomFilter/filterVRRender/test/cppunit.options
+++ /dev/null
@@ -1,16 +0,0 @@
-CLASSTEST=[
-          'MedicalDataV1Test',
-          ]
-
-USE = ['boost']
-LIB = [
-       'fwAtomsFilter_0-1',
-       'fwAtomsPatch_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwTest_0-1',
-       ]
-
-BUNDLES = []
-REQUIREMENTS = ['filterVRRender_0-1', 'dataReg_0-1', 'servicesReg_0-1']
-CONSOLE = 'yes'
diff --git a/Bundles/LeafAtomFilter/filterVRRender/test/tu/include/MedicalDataV1Test.hpp b/Bundles/LeafAtomFilter/filterVRRender/test/tu/include/MedicalDataV1Test.hpp
index d2db152..5d4072f 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/test/tu/include/MedicalDataV1Test.hpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/test/tu/include/MedicalDataV1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,9 +21,9 @@ namespace ut
  */
 class MedicalDataV1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( MedicalDataV1Test );
-    CPPUNIT_TEST( applyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( MedicalDataV1Test );
+CPPUNIT_TEST( applyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
diff --git a/Bundles/LeafAtomFilter/filterVRRender/test/tu/src/MedicalDataV1Test.cpp b/Bundles/LeafAtomFilter/filterVRRender/test/tu/src/MedicalDataV1Test.cpp
index c63fd04..e933cf7 100644
--- a/Bundles/LeafAtomFilter/filterVRRender/test/tu/src/MedicalDataV1Test.cpp
+++ b/Bundles/LeafAtomFilter/filterVRRender/test/tu/src/MedicalDataV1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafCtrl/ctrlCamp/CMakeLists.txt b/Bundles/LeafCtrl/ctrlCamp/CMakeLists.txt
new file mode 100644
index 0000000..2042e7a
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/CMakeLists.txt
@@ -0,0 +1,12 @@
+fwLoadProperties()
+
+find_package (Boost COMPONENTS regex REQUIRED)
+
+
+fwForwardInclude(
+    ${Boost_INCLUDE_DIRS}
+)
+
+fwForwardLink(
+    ${Boost_REGEX_LIBRARY}
+)
diff --git a/Bundles/LeafCtrl/ctrlCamp/Properties.cmake b/Bundles/LeafCtrl/ctrlCamp/Properties.cmake
new file mode 100644
index 0000000..c9a9b59
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/Properties.cmake
@@ -0,0 +1,18 @@
+
+
+set( NAME ctrlCamp )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwDataCamp
+    fwDataTools
+    fwMedData
+    fwRuntime
+    fwServices
+    fwTools
+)
+
+set( REQUIREMENTS  )
diff --git a/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/ICamp.hpp b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/ICamp.hpp
new file mode 100644
index 0000000..162359d
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/ICamp.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLCAMP_ICAMP_HPP__
+#define __CTRLCAMP_ICAMP_HPP__
+
+#include "ctrlCamp/config.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/IService.hpp>
+
+
+
+namespace ctrlCamp
+{
+/**
+ * @brief This interface defines service API. It can be considered as a default type for services using fwCamp.
+ */
+class CTRLCAMP_CLASS_API ICamp : public ::fwServices::IService
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (ICamp)(::fwServices::IService) );
+
+    /// Constructor
+    CTRLCAMP_API ICamp();
+
+    /// Destructor
+    CTRLCAMP_API ~ICamp();
+
+};
+
+}// namespace ctrlCamp
+
+
+#endif /* __CTRLCAMP_ICAMP_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/Plugin.hpp b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/Plugin.hpp
new file mode 100644
index 0000000..725bf0d
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/Plugin.hpp
@@ -0,0 +1,37 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLCAMP_PLUGIN_HPP__
+#define __CTRLCAMP_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+#include "ctrlCamp/config.hpp"
+
+namespace ctrlCamp
+{
+
+/**
+ * @brief   This class is started when the bundles is loaded.
+ */
+struct CTRLCAMP_CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+    /// Destructor. Do nothing.
+    CTRLCAMP_API ~Plugin() throw();
+
+    /**
+     * @brief Overrides start method. Object declarations.
+     */
+    CTRLCAMP_API void start() throw( ::fwRuntime::RuntimeException );
+
+    /// Overrides stop method. Do nothing
+    CTRLCAMP_API void stop() throw();
+
+};
+
+} // namespace ctrlCamp
+
+#endif //__CTRLCAMP_PLUGIN_HPP__
diff --git a/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SCopy.hpp b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SCopy.hpp
new file mode 100644
index 0000000..7216609
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SCopy.hpp
@@ -0,0 +1,103 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLCAMP_SCOPY_HPP__
+#define __CTRLCAMP_SCOPY_HPP__
+
+#include "ctrlCamp/config.hpp"
+#include "ctrlCamp/ICamp.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/IService.hpp>
+
+namespace ctrlCamp
+{
+
+/**
+ * @brief This service copies an object and updates its own object or the defined target.
+ * It can either copy the data when starting or when updating (default).
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+       <service uid="..." type="::ctrlCamp::SCopy" >
+           <in key="source" uid="sourceObject">
+             <extract from="@path.to.data.0" />
+           </in>
+           <inout key="target" uid="targetObject" />
+           <mode>copyOnStart</mode>
+       </service>
+      @endcode
+ * @subsection Input Input
+ * - \b source [::fwData::Object]: define the source object to copy.
+ *    - \b extract (optional): define the camp path used to retrieve the object to copy.
+ *
+ * @subsection In-Out In-Out
+ * - \b target [::fwData::Object]: define the target object to update.
+ *
+ * @subsection Configuration Configuration
+ * - \b mode (optional) : The service can copy the data either when starting ("copyOnStart") or when
+ * updating ("copyOnUpdate" - default).
+ */
+class CTRLCAMP_CLASS_API SCopy : public ::ctrlCamp::ICamp
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SCopy)(::ctrlCamp::ICamp) );
+
+    /// Constructor
+    CTRLCAMP_API SCopy();
+
+    /// Destructor
+    CTRLCAMP_API ~SCopy();
+
+protected:
+
+    enum class ModeType : std::int8_t
+    {
+        START,
+        UPDATE,
+    };
+
+    /// Does nothing
+    CTRLCAMP_API virtual void starting() throw( ::fwTools::Failed );
+
+    //// Configure the service
+    CTRLCAMP_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /// Does nothing
+    CTRLCAMP_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /// Does nothing
+    CTRLCAMP_API virtual void updating() throw( ::fwTools::Failed );
+
+private:
+
+    /// Copy method
+    void copy();
+
+    /// source object uid or sesh@ path
+    std::string m_source;
+
+    /// sesh@ path for appXml2
+    std::string m_path;
+
+    /// boolean to know if the object to copy is a sesh@ path or an object
+    bool m_hasExtractTag;
+
+    /// target sesh@ path
+    std::string m_target;
+
+    /// Determine when the data is copied (start or update)
+    ModeType m_mode;
+};
+
+} // namespace ctrlCamp
+
+
+#endif /* __CTRLCAMP_SCOPY_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SExtractMeshByType.hpp b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SExtractMeshByType.hpp
new file mode 100644
index 0000000..5897ce8
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SExtractMeshByType.hpp
@@ -0,0 +1,99 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLCAMP_SEXTRACTMESHBYTYPE_HPP__
+#define __CTRLCAMP_SEXTRACTMESHBYTYPE_HPP__
+
+
+#include "ctrlCamp/config.hpp"
+#include "ctrlCamp/ICamp.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/IService.hpp>
+
+
+namespace ctrlCamp
+{
+/**
+ * @brief This service extract meshes of a specific structure type from ::fwMedData::ModelSeries.
+ * If the model series have some meshes with the same structure type, it will extract the first found.
+ * Additionnaly, it can also match the organ name with a regular expression.
+ *
+ * The output objects must be marked as "deferred" in the XML configuration.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service uid="..." type="::ctrlCamp::SExtractMeshByType" >
+           <inout key="source" uid="...">
+               <extract type="organ1" />
+               <extract type="organ2" matching="(.*)surface(.*)"/>
+           </inout>
+           <out group="target">
+               <key uid="..."/>
+               <key uid="..."/>
+           </out>
+        </service>
+       @endcode
+
+ * @subsection In-Out In-Out
+ * - \b source [::fwMedData::ModelSeries]: define the source models where meshes are extracted from.
+ *
+ * @subsection Output Output
+ * - \b target [::fwData::Mesh]: define the target meshes. The number of \b target keys must match
+ * the number of \b from tags.
+ *
+ * @subsection Configuration Configuration
+ * - \b type (mandatory) : structure type of the mesh to extract from the source model. The number of \b from tags must
+ * match the number of \b target keys.
+ * - \b matching (optional) : regex to match the organ name, that can be used for instance when you have several
+ * organs with the same structure type.
+ */
+class CTRLCAMP_CLASS_API SExtractMeshByType : public ::ctrlCamp::ICamp
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SExtractMeshByType)(::ctrlCamp::ICamp) );
+
+    typedef std::map<std::string, std::tuple< std::string, std::string, std::string > > ExtractMapType;
+    typedef std::vector<std::pair< std::string, std::string > > ExtractVectorType;
+
+    /// Constructor
+    CTRLCAMP_API SExtractMeshByType();
+
+    /// Destructor
+    CTRLCAMP_API ~SExtractMeshByType();
+
+protected:
+
+    /// Does nothing
+    CTRLCAMP_API virtual void starting() throw( ::fwTools::Failed );
+
+    /// Configure the service
+    CTRLCAMP_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /// Does nothing
+    CTRLCAMP_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /// Does nothing
+    CTRLCAMP_API virtual void updating() throw( ::fwTools::Failed );
+
+private:
+
+    /// Map to associate \<from, to\> for object extraction
+    /// @deprecated
+    ExtractMapType m_extractOld;
+
+    /// Vector to associate \<from, to\> for object extraction
+    ExtractVectorType m_extract;
+};
+
+}// namespace ctrlCamp
+
+
+#endif /* __CTRLCAMP_SEXTRACTMESHBYTYPE_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SExtractObj.hpp b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SExtractObj.hpp
new file mode 100644
index 0000000..4df435d
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/SExtractObj.hpp
@@ -0,0 +1,105 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLCAMP_SEXTRACTOBJ_HPP__
+#define __CTRLCAMP_SEXTRACTOBJ_HPP__
+
+#include "ctrlCamp/config.hpp"
+#include "ctrlCamp/ICamp.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/IService.hpp>
+
+
+
+namespace ctrlCamp
+{
+/**
+ * @brief This service get objects from a source object and expose them as new objects.
+ *
+ * The output objects must be marked as "deferred" in the XML configuration.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service uid="..." type="::ctrlCamp::SExtractObj" >
+           <inout key="source" uid="...">
+               <extract from="@values.myobject1" />
+               <extract from="@values.myobject2" />
+           </inout>
+           <out group="target">
+               <key uid="..."/>
+               <key uid="..."/>
+           </out>
+        </service>
+       @endcode
+ * @subsection In-Out In-Out
+ * - \b source [::fwData::Object]: define the source object where objects are extracted from.
+ *
+ * @subsection Output Output
+ * - \b target [::fwData::Object]: define the target objects. The number of \b target keys must match
+ * the number of \b from tags.
+ *
+ * @subsection Configuration Configuration
+ * - \b from (mandatory) : key to extract from the source object. The number of \b from tags must match
+ * the number of \b target keys.
+ */
+class CTRLCAMP_CLASS_API SExtractObj : public ::ctrlCamp::ICamp
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SExtractObj)(::ctrlCamp::ICamp) );
+
+    typedef std::map<std::string, std::string> ExtractMapType;
+
+    /// Constructor
+    CTRLCAMP_API SExtractObj();
+
+    /// Destructor
+    CTRLCAMP_API ~SExtractObj();
+
+protected:
+
+    enum class ModeType : std::int8_t
+    {
+        START,
+        UPDATE,
+    };
+
+    /// Does nothing
+    CTRLCAMP_API virtual void starting() throw( ::fwTools::Failed );
+
+    /// Configure the service
+    CTRLCAMP_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /// Does nothing
+    CTRLCAMP_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /// Does nothing
+    CTRLCAMP_API virtual void updating() throw( ::fwTools::Failed );
+
+private:
+
+    /// Extract method
+    void extract();
+
+    /// Map to associate \<from, to\> for object extraction
+    ExtractMapType m_extract;
+
+    /// Vector to associate source paths
+    std::vector<std::string> m_sourcePaths;
+
+    /// Determine when the data is copied (start or update)
+    /// @deprecated no longer needed with appXml2
+    ModeType m_mode;
+};
+
+} // namespace ctrlCamp
+
+
+#endif /* __CTRLCAMP_SEXTRACTOBJ_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/namespace.hpp b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/namespace.hpp
new file mode 100644
index 0000000..8c028c5
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/include/ctrlCamp/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLCAMP_NAMESPACE_HPP__
+#define __CTRLCAMP_NAMESPACE_HPP__
+
+/**
+ * @brief       The namespace ctrlCamp contains services using camp.
+ * @namespace   ctrlCamp
+ */
+namespace ctrlCamp
+{
+
+} // namespace ctrlCamp
+
+
+#endif /* __CTRLCAMP_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlCamp/rc/plugin.xml b/Bundles/LeafCtrl/ctrlCamp/rc/plugin.xml
new file mode 100644
index 0000000..11fa661
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/rc/plugin.xml
@@ -0,0 +1,23 @@
+<plugin id="ctrlCamp" class="::ctrlCamp::Plugin" version="@DASH_VERSION@" >
+    
+    <library name="ctrlCamp" />
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::ctrlCamp::ICamp</type>
+        <service>::ctrlCamp::SExtractObj</service>
+        <object>::fwData::Composite</object>
+    </extension>
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::ctrlCamp::ICamp</type>
+        <service>::ctrlCamp::SExtractMeshByType</service>
+        <object>::fwData::Composite</object>
+    </extension>
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::ctrlCamp::ICamp</type>
+        <service>::ctrlCamp::SCopy</service>
+        <object>::fwData::Object</object>
+    </extension>
+    
+</plugin>
diff --git a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/ICamp.cpp b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/ICamp.cpp
new file mode 100644
index 0000000..cfdbc56
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/ICamp.cpp
@@ -0,0 +1,28 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlCamp/ICamp.hpp"
+
+namespace ctrlCamp
+{
+
+//-----------------------------------------------------------------------------
+
+ICamp::ICamp()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+ICamp::~ICamp()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+
+}// namespace ctrlCamp
diff --git a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/Plugin.cpp b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/Plugin.cpp
new file mode 100644
index 0000000..bdd0aa1
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/Plugin.cpp
@@ -0,0 +1,28 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlCamp/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+
+namespace ctrlCamp
+{
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::ctrlCamp::Plugin");
+
+Plugin::~Plugin() throw()
+{
+}
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+void Plugin::stop() throw()
+{
+}
+
+} // namespace ctrlCamp
diff --git a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp
new file mode 100644
index 0000000..fc8e05f
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SCopy.cpp
@@ -0,0 +1,246 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlCamp/SCopy.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/mt/ObjectWriteLock.hpp>
+#include <fwData/Object.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+#include <fwDataCamp/exception/ObjectNotFound.hpp>
+
+
+namespace ctrlCamp
+{
+
+fwServicesRegisterMacro(::ctrlCamp::ICamp, ::ctrlCamp::SCopy, ::fwData::Object);
+
+const ::fwServices::IService::KeyType s_SOURCE_INPUT = "source";
+const ::fwServices::IService::KeyType s_TARGET_INOUT = "target";
+
+//-----------------------------------------------------------------------------
+
+SCopy::SCopy() :
+    m_mode(ModeType::UPDATE)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+SCopy::~SCopy()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SCopy::configuring() throw( ::fwTools::Failed )
+{
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+
+    m_hasExtractTag = false;
+    if(!this->isVersion2())
+    {
+        const ConfigurationType srcConfig = m_configuration->findConfigurationElement("source");
+        SLM_ASSERT("element 'source' is missing.", srcConfig);
+        m_source = srcConfig->getValue();
+        SLM_ASSERT("Missing source.", srcConfig->getValue() != "");
+
+        const ConfigurationType tgtConfig = m_configuration->findConfigurationElement("target");
+        if (tgtConfig)
+        {
+            m_target = tgtConfig->getValue();
+
+        }
+    }
+    else
+    {
+        const ConfigurationType inCfg = m_configuration->findConfigurationElement("in");
+        SLM_ASSERT("One 'in' tag is required.", inCfg);
+
+        const std::vector< ConfigurationType > inoutCfg = m_configuration->find("inout");
+        const std::vector< ConfigurationType > outCfg   = m_configuration->find("out");
+        SLM_ASSERT("One 'inout' or one 'out' tag is required.", inoutCfg.size() +  outCfg.size() == 1);
+
+        const std::vector< ConfigurationType > extractCfg = inCfg->find("extract");
+        SLM_ASSERT("Only one 'extract' tag is authorized.", extractCfg.size() <= 1);
+        if (extractCfg.size() == 1)
+        {
+            ConfigurationType cfg = extractCfg[0];
+            SLM_ASSERT("Missing attribute 'from'.", cfg->hasAttribute("from"));
+            m_path          = cfg->getAttributeValue("from");
+            m_hasExtractTag = true;
+        }
+
+    }
+
+    const ConfigurationType modeConfig = m_configuration->findConfigurationElement("mode");
+    if (modeConfig)
+    {
+        auto mode = modeConfig->getValue();
+        if(mode == "copyOnStart")
+        {
+            m_mode = ModeType::START;
+        }
+        else if(mode == "copyOnUpdate")
+        {
+            m_mode = ModeType::UPDATE;
+        }
+        else
+        {
+            SLM_ERROR("Mode " + mode + " unknown. It should be either 'copyOnStart' or 'copyOnUpdate'");
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SCopy::starting() throw( ::fwTools::Failed )
+{
+    if(m_mode == ModeType::START)
+    {
+        this->copy();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SCopy::updating() throw( ::fwTools::Failed )
+{
+    if(m_mode == ModeType::UPDATE)
+    {
+        this->copy();
+    }
+    else
+    {
+        SLM_ERROR("Object copy was request but the mode is to 'copyOnStart'");
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SCopy::stopping() throw( ::fwTools::Failed )
+{
+    // Unregister output
+    this->setOutput(s_TARGET_INOUT, nullptr);
+}
+
+//-----------------------------------------------------------------------------
+
+void SCopy::copy()
+{
+    bool create = false;
+    ::fwData::Object::sptr target;
+    ::fwData::Object::csptr source;
+    if (m_target.empty())
+    {
+        if(this->isVersion2())
+        {
+            target = this->getInOut< ::fwData::Object >(s_TARGET_INOUT);
+            if(!target)
+            {
+                create = true;
+            }
+        }
+        else
+        {
+            target = this->getObject< ::fwData::Object >();
+        }
+    }
+    else
+    {
+        if (m_target.substr(0,1) == "@")
+        {
+            target = ::fwDataCamp::getObject(this->getObject(), m_target);
+            SLM_ASSERT("Invalid seshat path : '" + m_target + "'", target);
+        }
+        else
+        {
+            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_target);
+            SLM_ASSERT("Object '" + m_target + "' is not found", obj);
+            target = ::fwData::Object::dynamicCast(obj);
+            SLM_ASSERT("Object '" + m_target + "' is not a fwData::Object (" + obj->getClassname() + ")", target);
+        }
+    }
+    if (m_source.substr(0,1) == "@")
+    {
+        source = ::fwDataCamp::getObject(this->getObject(), m_source);
+        SLM_ERROR_IF("Invalid seshat path '" + m_source + "' or object does not exist", !source);
+    }
+    else
+    {
+        if(this->isVersion2())
+        {
+            ::fwData::Object::csptr sourceObject = this->getInput< ::fwData::Object >(s_SOURCE_INPUT);
+            if (m_hasExtractTag)
+            {
+                ::fwData::Object::sptr object;
+                try
+                {
+                    object = ::fwDataCamp::getObject( sourceObject, m_path, true );
+                }
+                catch(::fwDataCamp::exception::ObjectNotFound& nf)
+                {
+                    SLM_WARN("Object from '"+ m_path +"' not found");
+                }
+                catch(std::exception& e)
+                {
+                    OSLM_FATAL("Unhandled exception: " << e.what());
+                }
+
+                SLM_WARN_IF("Object from '"+ m_path +"' not found", !object);
+                if(object)
+                {
+                    source = object;
+                }
+            }
+            else
+            {
+                source = sourceObject;
+            }
+        }
+        else
+        {
+            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_source);
+            SLM_ASSERT("Object '" + m_source + "' is not found", obj);
+            source = ::fwData::Object::dynamicCast(obj);
+            SLM_ERROR_IF(
+                "Object '" + m_source + "' is not a valid fwData::Object (" + obj->getClassname() + ") or does not exist",
+                !source);
+        }
+    }
+
+    if(source)
+    {
+        if(create)
+        {
+            target = ::fwData::Object::copy(source);
+            this->setOutput(s_TARGET_INOUT, target);
+        }
+        else
+        {
+            ::fwData::mt::ObjectWriteLock lock(target);
+
+            // copy the object
+            target->deepCopy(source);
+
+            auto sig = target->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            {
+                ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+                sig->asyncEmit();
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+
+} // namespace ctrlCamp
diff --git a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractMeshByType.cpp b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractMeshByType.cpp
new file mode 100644
index 0000000..0657aca
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractMeshByType.cpp
@@ -0,0 +1,224 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlCamp/SExtractMeshByType.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/regex.hpp>
+
+namespace ctrlCamp
+{
+
+fwServicesRegisterMacro(::ctrlCamp::ICamp, ::ctrlCamp::SExtractMeshByType, ::fwData::Composite);
+
+
+//-----------------------------------------------------------------------------
+
+SExtractMeshByType::SExtractMeshByType()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SExtractMeshByType::~SExtractMeshByType()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractMeshByType::configuring() throw( ::fwTools::Failed )
+{
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+
+    if(this->isVersion2())
+    {
+        const ConfigType inoutCfg = m_configuration->findConfigurationElement("inout");
+        SLM_ASSERT("At one 'inout' tag is required.", inoutCfg);
+
+        const std::vector< ConfigType > extractCfg = inoutCfg->find("extract");
+        SLM_ASSERT("At least one 'extract' tag is required.", !extractCfg.empty());
+
+        bool ok = false;
+
+        const std::vector< ConfigType > outCfg = m_configuration->find("out");
+        for (const auto& cfg : outCfg)
+        {
+            if(cfg->hasAttribute("group"))
+            {
+                if(cfg->getAttributeValue("group") == "target")
+                {
+                    const std::vector< ConfigType > keyCfg = cfg->find("key");
+                    OSLM_ASSERT(
+                        "You must have as many 'extract' tags as 'out' keys." << extractCfg.size() << " " <<  keyCfg.size(),
+                        extractCfg.size() == keyCfg.size());
+                    ok = true;
+                }
+            }
+        }
+        SLM_ASSERT("Missing 'target' output keys", ok);
+
+        for(ConfigType cfg : extractCfg)
+        {
+            std::string type  = cfg->getAttributeValue("type");
+            std::string regex = cfg->getAttributeValue("matching");
+
+            m_extract.push_back(std::make_pair(type, regex));
+        }
+    }
+    else
+    {
+        /// Old way
+        std::vector< ConfigType > extractCfg = m_configuration->find("extract");
+        SLM_ASSERT("At least one 'extract' tag is required.", !extractCfg.empty());
+
+        for(ConfigType cfg : extractCfg)
+        {
+            SLM_ASSERT("Missing attribute 'from'.", cfg->hasAttribute("from"));
+            SLM_ASSERT("Missing attribute 'to'.", cfg->hasAttribute("to"));
+
+            std::string from  = cfg->getAttributeValue("from");
+            std::string to    = cfg->getAttributeValue("to");
+            std::string type  = cfg->getAttributeValue("type");
+            std::string regex = cfg->getAttributeValue("matching");
+
+            SLM_ASSERT("'from' attribute must begin with '@'", from.substr(0,1) == "@");
+
+            m_extractOld[from] = std::make_tuple(to, type, regex);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractMeshByType::starting() throw( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractMeshByType::updating() throw( ::fwTools::Failed )
+{
+    if(this->isVersion2())
+    {
+        ::fwMedData::ModelSeries::sptr modelSeries = this->getInOut< ::fwMedData::ModelSeries>("source");
+        OSLM_ASSERT("ModelSeries not found", modelSeries);
+
+        size_t index = 0;
+        for(const auto& elt : m_extract)
+        {
+            std::string type  = elt.first;
+            std::string regex = elt.second;
+
+            bool found = false;
+            ::fwMedData::ModelSeries::ReconstructionVectorType recs = modelSeries->getReconstructionDB();
+            for(::fwData::Reconstruction::sptr element : recs)
+            {
+                if(element->getCRefStructureType() == type)
+                {
+                    ::boost::regex regSurface(regex);
+                    ::boost::smatch match;
+                    std::string name = element->getOrganName();
+
+                    if(regex.empty() || ::boost::regex_match(name, match, regSurface))
+                    {
+                        ::fwData::Mesh::sptr obj = element->getMesh();
+
+                        this->setOutput("target", obj, index);
+                        found = true;
+                        ++index;
+
+                        break;
+                    }
+                }
+            }
+            OSLM_ERROR_IF(
+                "Mesh with organ name matching '" << regex << "' and structure type'" << type << "' didn't find",
+                !found);
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwData::mt::ObjectWriteLock lock(composite);
+        ::fwDataTools::helper::Composite compHelper(composite);
+
+        for(ExtractMapType::value_type elt : m_extractOld)
+        {
+            std::string from  = elt.first;
+            std::string to    = std::get<0>(elt.second);
+            std::string type  = std::get<1>(elt.second);
+            std::string regex = std::get<2>(elt.second);
+
+            ::fwData::Object::sptr object = ::fwDataCamp::getObject( composite, from );
+            OSLM_ASSERT("Object from '"<< from <<"' not found", object);
+
+            ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::dynamicCast(object);
+            OSLM_ASSERT("Object from '"<< from <<"' is not a model series", modelSeries);
+
+            ::fwMedData::ModelSeries::ReconstructionVectorType recs = modelSeries->getReconstructionDB();
+            for(::fwData::Reconstruction::sptr element : recs)
+            {
+                if(element->getCRefStructureType() == type)
+                {
+                    ::boost::regex regSurface(regex);
+                    ::boost::smatch match;
+                    std::string name = element->getOrganName();
+
+                    if(regex.empty() || ::boost::regex_match(name, match, regSurface))
+                    {
+                        ::fwData::Mesh::sptr obj = element->getMesh();
+                        if (composite->find(to) == composite->end())
+                        {
+                            compHelper.add(to, obj);
+                        }
+                        else
+                        {
+                            OSLM_INFO("A key named '"<< to <<
+                                      "' already exists in the composite. object doesn't added.");
+                        }
+
+                        break;
+                    }
+                }
+            }
+            OSLM_INFO_IF(
+                "Mesh with organ name matching '" << regex << "' and structure type'" << type << "' didn't find",
+                composite->find(to) == composite->end());
+        }
+        compHelper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractMeshByType::stopping() throw( ::fwTools::Failed )
+{
+    // Unregister outputs
+    for (size_t i = 0; i<this->getKeyGroupSize("target"); ++i)
+    {
+        this->setOutput("target", nullptr, i);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+
+} // namespace ctrlCamp
diff --git a/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractObj.cpp b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractObj.cpp
new file mode 100644
index 0000000..40ebf1d
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlCamp/src/ctrlCamp/SExtractObj.cpp
@@ -0,0 +1,233 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlCamp/SExtractObj.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataCamp/exception/NullPointer.hpp>
+#include <fwDataCamp/exception/ObjectNotFound.hpp>
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/registry/ObjectService.hpp>
+
+
+namespace ctrlCamp
+{
+
+fwServicesRegisterMacro(::ctrlCamp::ICamp, ::ctrlCamp::SExtractObj, ::fwData::Composite);
+
+
+//-----------------------------------------------------------------------------
+
+SExtractObj::SExtractObj() :
+    m_mode(ModeType::UPDATE)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+SExtractObj::~SExtractObj()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractObj::configuring() throw( ::fwTools::Failed )
+{
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+
+    if(this->isVersion2())
+    {
+        const ConfigurationType inoutCfg = m_configuration->findConfigurationElement("inout");
+        SLM_ASSERT("At one 'inout' tag is required.", inoutCfg);
+
+        const std::vector< ConfigurationType > extractCfg = inoutCfg->find("extract");
+        SLM_ASSERT("At least one 'extract' tag is required.", !extractCfg.empty());
+
+        const ConfigurationType outCfg = m_configuration->findConfigurationElement("out");
+
+        const std::vector< ConfigurationType > outKeyCfg = outCfg->find("key");
+        SLM_ASSERT("You must have as many 'from' tags as 'out' keys.", extractCfg.size() == outKeyCfg.size());
+
+        for(ConfigurationType cfg : extractCfg)
+        {
+            SLM_ASSERT("Missing attribute 'from'.", cfg->hasAttribute("from"));
+            const std::string from = cfg->getAttributeValue("from");
+
+            m_sourcePaths.push_back(from);
+        }
+    }
+    else
+    {
+        std::vector< ConfigurationType > extractCfg = m_configuration->find("extract");
+        SLM_ASSERT("At least one 'extract' tag is required.", !extractCfg.empty());
+
+        for(ConfigurationType cfg : extractCfg)
+        {
+            SLM_ASSERT("Missing attribute 'from'.", cfg->hasAttribute("from"));
+            SLM_ASSERT("Missing attribute 'to'.", cfg->hasAttribute("to"));
+
+            std::string from = cfg->getAttributeValue("from");
+            std::string to   = cfg->getAttributeValue("to");
+
+            SLM_ASSERT("'from' attribute must begin with '@'", from.substr(0,1) == "@");
+
+            m_extract[from] = to;
+        }
+
+        const ConfigurationType modeConfig = m_configuration->findConfigurationElement("mode");
+        if (modeConfig)
+        {
+            auto mode = modeConfig->getValue();
+            if(mode == "extractOnStart")
+            {
+                m_mode = ModeType::START;
+            }
+            else if(mode == "extractOnUpdate")
+            {
+                m_mode = ModeType::UPDATE;
+            }
+            else
+            {
+                SLM_ERROR("Mode " + mode + " unknown. It should be either 'extractOnStart' or 'extractOnUpdate'");
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractObj::starting() throw( ::fwTools::Failed )
+{
+    if(m_mode == ModeType::START)
+    {
+        this->extract();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractObj::updating() throw( ::fwTools::Failed )
+{
+    if(m_mode == ModeType::UPDATE)
+    {
+        this->extract();
+    }
+    else
+    {
+        SLM_ERROR("Object copy was request but the mode is to 'extractOnStart'");
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractObj::stopping() throw( ::fwTools::Failed )
+{
+    // Unregister outputs
+    for (size_t i = 0; i<this->getKeyGroupSize("target"); ++i)
+    {
+        this->setOutput("target", nullptr, i);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SExtractObj::extract()
+{
+    if(this->isVersion2())
+    {
+        auto sourceObject = this->getInOut< ::fwData::Object >("source");
+
+        size_t index = 0;
+        for(auto path : m_sourcePaths)
+        {
+            const std::string from = path;
+
+            ::fwData::Object::sptr object;
+            try
+            {
+                object = ::fwDataCamp::getObject( sourceObject, from, true );
+            }
+            catch(::fwDataCamp::exception::NullPointer& np)
+            {
+                this->setOutput("target", nullptr, index);
+            }
+            catch(::fwDataCamp::exception::ObjectNotFound& nf)
+            {
+                SLM_WARN("Object from '"+ from +"' not found");
+            }
+            catch(std::exception& e)
+            {
+                OSLM_FATAL("Unhandled exception: " << e.what());
+            }
+
+            SLM_WARN_IF("Object from '"+ from +"' not found", !object);
+            if(object)
+            {
+                this->setOutput("target", object, index);
+            }
+            ++index;
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+
+        ::fwData::mt::ObjectWriteLock lock(composite);
+        ::fwDataTools::helper::Composite compHelper(composite);
+
+        for(ExtractMapType::value_type elt : m_extract)
+        {
+            std::string from = elt.first;
+            std::string to   = elt.second;
+
+            try
+            {
+                ::fwData::Object::sptr object = ::fwDataCamp::getObject( composite, from, true );
+
+                SLM_WARN_IF("Object from '"+ from +"' not found", !object);
+                if(object)
+                {
+                    if (composite->find(to) == composite->end())
+                    {
+                        compHelper.add(to, object);
+                    }
+                    else
+                    {
+                        compHelper.swap(to, object);
+                    }
+                }
+            }
+            catch(::fwDataCamp::exception::NullPointer& np)
+            {
+                if (composite->find(to) != composite->end())
+                {
+                    compHelper.remove(to);
+                }
+
+            }
+            catch(::fwDataCamp::exception::ObjectNotFound& nf)
+            {
+                SLM_WARN("Object from '"+ from +"' not found");
+            }
+            catch(std::exception& e)
+            {
+                OSLM_FATAL("Unhandled exception: " << e.what());
+            }
+        }
+        compHelper.notify();
+    }
+}
+//-----------------------------------------------------------------------------
+
+} // namespace ctrlCamp
diff --git a/Bundles/LeafCtrl/ctrlMemory/CMakeLists.txt b/Bundles/LeafCtrl/ctrlMemory/CMakeLists.txt
index 839fa76..1169074 100644
--- a/Bundles/LeafCtrl/ctrlMemory/CMakeLists.txt
+++ b/Bundles/LeafCtrl/ctrlMemory/CMakeLists.txt
@@ -1,10 +1,3 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwRuntime
-    fwServices
-
-    ctrlSelection
-)
 
 
diff --git a/Bundles/LeafCtrl/ctrlMemory/COPYING b/Bundles/LeafCtrl/ctrlMemory/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafCtrl/ctrlMemory/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafCtrl/ctrlMemory/COPYING.LESSER b/Bundles/LeafCtrl/ctrlMemory/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafCtrl/ctrlMemory/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafCtrl/ctrlMemory/Properties.cmake b/Bundles/LeafCtrl/ctrlMemory/Properties.cmake
index 6c19e42..f5c6032 100644
--- a/Bundles/LeafCtrl/ctrlMemory/Properties.cmake
+++ b/Bundles/LeafCtrl/ctrlMemory/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME ctrlMemory )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwRuntime fwServices ctrlSelection )
+set( DEPENDENCIES fwCom fwCore fwTools fwData fwRuntime fwServices ctrlSelection )
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafCtrl/ctrlMemory/bin/build.options b/Bundles/LeafCtrl/ctrlMemory/bin/build.options
deleted file mode 100644
index 82b9df5..0000000
--- a/Bundles/LeafCtrl/ctrlMemory/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = ['fwData_0-1','fwServices_0-1','fwComEd_0-1','fwRuntime_0-3','fwCore_0-1','fwMemory_0-1','fwTools_0-1']
-BUNDLES = ['ctrlSelection_0-1']
-
-
-
diff --git a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/LockDumpSrv.hpp b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/LockDumpSrv.hpp
index cf55725..dd3e469 100644
--- a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/LockDumpSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/LockDumpSrv.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,11 +13,6 @@
 
 #include "ctrlMemory/config.hpp"
 
-namespace fwServices
-{
-    class ObjectMsg;
-}
-
 namespace ctrlMemory
 {
 
@@ -28,15 +23,15 @@ namespace ctrlMemory
 class CTRLMEMORY_CLASS_API LockDumpSrv : public ::fwServices::IController
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (LockDumpSrv)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (LockDumpSrv)(::fwServices::IController) );
 
     /// Constructor. Does nothing
-    CTRLMEMORY_API LockDumpSrv() throw() ;
+    CTRLMEMORY_API LockDumpSrv() throw();
 
     /// Destructor. Does nothing
-    CTRLMEMORY_API virtual ~LockDumpSrv() throw() ;
+    CTRLMEMORY_API virtual ~LockDumpSrv() throw();
 
 protected:
 
@@ -58,10 +53,7 @@ protected:
     /// Does nothing
     CTRLMEMORY_API virtual void configuring()  throw ( ::fwTools::Failed );
 
-    /// Does nothing
-    CTRLMEMORY_API virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw ( ::fwTools::Failed );
-
-private :
+private:
 
     ::fwData::ObjectLock m_objLock;
 
diff --git a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/Plugin.hpp b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/Plugin.hpp
index 2b9470d..5594b84 100644
--- a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/Plugin.hpp
+++ b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLMEMORY_PLUGIN_HPP_
-#define _CTRLMEMORY_PLUGIN_HPP_
+#ifndef __CTRLMEMORY_PLUGIN_HPP__
+#define __CTRLMEMORY_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -16,7 +16,7 @@ namespace ctrlMemory
 class Plugin : public ::fwRuntime::Plugin
 {
 
-public :
+public:
 
     /// PLugin destructor
     ~Plugin() throw();
@@ -31,4 +31,4 @@ public :
 
 } // namespace ctrlMemory
 
-#endif // _CTRLMEMORY_PLUGIN_HPP_
+#endif // __CTRLMEMORY_PLUGIN_HPP__
diff --git a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/config.hpp b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/config.hpp
deleted file mode 100644
index 4955121..0000000
--- a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLMEMORY_CONFIG_HPP_
-#define _CTRLMEMORY_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef CTRLMEMORY_EXPORTS
-    #define CTRLMEMORY_API __declspec(dllexport)
-    #else
-    #define CTRLMEMORY_API __declspec(dllimport)
-    #endif
-
-    #define CTRLMEMORY_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef CTRLMEMORY_EXPORTS
-    #define CTRLMEMORY_API __attribute__ ((visibility("default")))
-    #define CTRLMEMORY_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define CTRLMEMORY_API __attribute__ ((visibility("hidden")))
-    #define CTRLMEMORY_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define CTRLMEMORY_API
-    #define CTRLMEMORY_CLASS_API
-
-#endif
-
-#endif // _CTRLMEMORY_CONFIG_HPP_
diff --git a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/manager/LockDumpManagerSrv.hpp b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/manager/LockDumpManagerSrv.hpp
index dfaa183..e8d6a0e 100644
--- a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/manager/LockDumpManagerSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/manager/LockDumpManagerSrv.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,23 +7,20 @@
 #ifndef __CTRLMEMORY_MANAGER_LOCKDUMPMANAGERSRV_HPP__
 #define __CTRLMEMORY_MANAGER_LOCKDUMPMANAGERSRV_HPP__
 
+#include "ctrlMemory/config.hpp"
+
+#include <ctrlSelection/IManagerSrv.hpp>
+
+#include <fwData/Composite.hpp>
+
 #include <map>
 #include <vector>
 #include <string>
 
-#include <ctrlSelection/IManagerSrv.hpp>
-
-#include "ctrlMemory/config.hpp"
 
 namespace fwData
 {
-    class ObjectLock;
-    class Composite;
-}
-
-namespace fwServices
-{
-    class ObjectMsg;
+class ObjectLock;
 }
 
 namespace ctrlMemory
@@ -39,17 +36,27 @@ namespace manager
 class CTRLMEMORY_CLASS_API LockDumpManagerSrv : public ::ctrlSelection::IManagerSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (LockDumpManagerSrv)(::ctrlSelection::IManagerSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (LockDumpManagerSrv)(::ctrlSelection::IManagerSrv) );
 
     /// Constructor.  Does nothing.
-    CTRLMEMORY_API LockDumpManagerSrv() throw() ;
+    CTRLMEMORY_API LockDumpManagerSrv() throw();
 
     /// Destructor. Does nothing.
-    CTRLMEMORY_API virtual ~LockDumpManagerSrv() throw() ;
+    CTRLMEMORY_API virtual ~LockDumpManagerSrv() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_ADD_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_CHANGE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_REMOVE_OBJECTS_SLOT
+     */
+    CTRLMEMORY_API virtual KeyConnectionsType getObjSrvConnections() const;
 
-protected :
+protected:
 
     /// Dump lock composite objects
     CTRLMEMORY_API virtual void starting()  throw ( ::fwTools::Failed );
@@ -73,17 +80,23 @@ protected :
      */
     CTRLMEMORY_API virtual void configuring()  throw ( ::fwTools::Failed );
 
-    /// Updates dump locks when object are pushed removed or swaped in composite
-    CTRLMEMORY_API virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw ( ::fwTools::Failed );
+private:
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects, ::fwData::Composite::ContainerType oldObjects);
 
-private :
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
 
     typedef std::string CompositeKeyType;
 
     typedef std::map< CompositeKeyType, ::fwData::ObjectLock > LockMapType;
 
     /// Add or remove lock ( _isLocked parameter ) on composite objects
-    void setDumpLockOnImages(LockMapType &lockMap, SPTR(::fwData::Composite) _composite, bool _isLocked );
+    void setDumpLockOnImages(LockMapType &lockMap, ::fwData::Composite::ContainerType objects, bool _isLocked );
 
     /// Composite keys managed by this service
     std::vector< std::string > m_managedKeys;
diff --git a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/namespace.hpp b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/namespace.hpp
index e35d27f..9c6e7b1 100644
--- a/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/namespace.hpp
+++ b/Bundles/LeafCtrl/ctrlMemory/include/ctrlMemory/namespace.hpp
@@ -1,27 +1,27 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __CTRLMEMORY_MANAGER_NAMESPACE_HPP__
-#define __CTRLMEMORY_MANAGER_NAMESPACE_HPP__
-
-
-/**
- * @brief   The namespace ctrlMemory contains services to lock objects to prevent dump.
- * @namespace   ctrlMemory
- */
-namespace ctrlMemory
-{
-/**
- * @brief       The namespace ctrlMemory::manager contains a lock dump manager for image.
- * @namespace   ctrlMemory::manager
- *
- */
-namespace manager
-{
-}
-
-#endif // __CTRLMEMORY_MANAGER_NAMESPACE_HPP__
-
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLMEMORY_NAMESPACE_HPP__
+#define __CTRLMEMORY_NAMESPACE_HPP__
+
+
+/**
+ * @brief   The namespace ctrlMemory contains services to lock objects to prevent dump.
+ * @namespace   ctrlMemory
+ */
+namespace ctrlMemory
+{
+/**
+ * @brief       The namespace ctrlMemory::manager contains a lock dump manager for image.
+ * @namespace   ctrlMemory::manager
+ *
+ */
+namespace manager
+{
+}
+
+#endif // __CTRLMEMORY_NAMESPACE_HPP__
+
diff --git a/Bundles/LeafCtrl/ctrlMemory/rc/plugin.xml b/Bundles/LeafCtrl/ctrlMemory/rc/plugin.xml
index 731f052..ba3c892 100644
--- a/Bundles/LeafCtrl/ctrlMemory/rc/plugin.xml
+++ b/Bundles/LeafCtrl/ctrlMemory/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ctrlMemory" class="::ctrlMemory::Plugin" >
+<plugin id="ctrlMemory" class="::ctrlMemory::Plugin"  version="@DASH_VERSION@" >
     
     <library name="ctrlMemory" />
 
diff --git a/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/LockDumpSrv.cpp b/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/LockDumpSrv.cpp
index 5bb3c6e..2efe537 100644
--- a/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/LockDumpSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/LockDumpSrv.cpp
@@ -1,10 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include "ctrlMemory/LockDumpSrv.hpp"
 
@@ -18,23 +18,20 @@ fwServicesRegisterMacro( ::fwServices::IController, ::ctrlMemory::LockDumpSrv, :
 //-----------------------------------------------------------------------------
 
 LockDumpSrv::LockDumpSrv() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 LockDumpSrv::~LockDumpSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void LockDumpSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LockDumpSrv::starting()  throw ( ::fwTools::Failed )
 {
-   m_objLock = ::fwData::ObjectLock( this->getObject() );
+    m_objLock = ::fwData::ObjectLock( this->getObject() );
 }
 
 //-----------------------------------------------------------------------------
@@ -47,22 +44,26 @@ void LockDumpSrv::stopping()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void LockDumpSrv::configuring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LockDumpSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LockDumpSrv::updating() throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LockDumpSrv::info( std::ostream &_sstream )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/Plugin.cpp b/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/Plugin.cpp
index 4a3372f..04e6450 100644
--- a/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/Plugin.cpp
+++ b/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,17 +20,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/manager/LockDumpManagerSrv.cpp b/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/manager/LockDumpManagerSrv.cpp
index fb528d6..cd57b39 100644
--- a/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/manager/LockDumpManagerSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlMemory/src/ctrlMemory/manager/LockDumpManagerSrv.cpp
@@ -1,20 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "ctrlMemory/manager/LockDumpManagerSrv.hpp"
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Composite.hpp>
 #include <fwData/ObjectLock.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
+#include <fwServices/macros.hpp>
 
-#include "ctrlMemory/manager/LockDumpManagerSrv.hpp"
 
 namespace ctrlMemory
 {
@@ -22,69 +23,38 @@ namespace ctrlMemory
 namespace manager
 {
 
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT    = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects";
+
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlMemory::manager::LockDumpManagerSrv, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlMemory::manager::LockDumpManagerSrv, ::fwData::Composite );
 
 //-----------------------------------------------------------------------------
 
 LockDumpManagerSrv::LockDumpManagerSrv() throw()
 {
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::ADDED_KEYS );
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS );
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS );
+    newSlot(s_ADD_OBJECTS_SLOT, &LockDumpManagerSrv::addObjects, this);
+    newSlot(s_CHANGE_OBJECTS_SLOT, &LockDumpManagerSrv::changeObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &LockDumpManagerSrv::removeObjects, this);
 }
 
 //-----------------------------------------------------------------------------
 
 LockDumpManagerSrv::~LockDumpManagerSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void LockDumpManagerSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(message);
-    if(compositeMsg)
-    {
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getAddedKeys();
-            this->setDumpLockOnImages(m_lockedObjects, fields,true);
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields;
-            LockMapType newLocks = m_lockedObjects;
-
-            fields = compositeMsg->getOldChangedKeys();
-            this->setDumpLockOnImages(newLocks, fields,false);
-
-            fields = compositeMsg->getNewChangedKeys();
-            this->setDumpLockOnImages(newLocks, fields,true);
-
-            m_lockedObjects = newLocks;
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getRemovedKeys();
-            this->setDumpLockOnImages(m_lockedObjects, fields,false);
-        }
-    }
 }
 
 //-----------------------------------------------------------------------------
 
-void LockDumpManagerSrv::setDumpLockOnImages( LockMapType &lockMap, ::fwData::Composite::sptr _composite, bool _isLocked )
+void LockDumpManagerSrv::setDumpLockOnImages( LockMapType &lockMap, ::fwData::Composite::ContainerType objects,
+                                              bool _isLocked )
 {
-    BOOST_FOREACH( ::fwData::Composite::value_type objectId, *_composite )
+    for( ::fwData::Composite::value_type objectId :  objects )
     {
         if ( m_managedKeys.empty()
-                || std::find(m_managedKeys.begin(), m_managedKeys.end(), objectId.first) != m_managedKeys.end() )
+             || std::find(m_managedKeys.begin(), m_managedKeys.end(), objectId.first) != m_managedKeys.end() )
         {
             if (_isLocked)
             {
@@ -105,7 +75,7 @@ void LockDumpManagerSrv::setDumpLockOnImages( LockMapType &lockMap, ::fwData::Co
 void LockDumpManagerSrv::starting()  throw ( ::fwTools::Failed )
 {
     ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    this->setDumpLockOnImages(m_lockedObjects, composite, true);
+    this->setDumpLockOnImages(m_lockedObjects, composite->getContainer(), true);
 }
 
 //-----------------------------------------------------------------------------
@@ -127,8 +97,8 @@ void LockDumpManagerSrv::configuring()  throw ( ::fwTools::Failed )
             item != updaters.end();
             ++item )
     {
-        SLM_FATAL_IF( "Sorry, attribute \"key\" is missing", !(*item)->hasAttribute("key") );
-        std::string key =  (*item)->getExistingAttributeValue("key");
+        SLM_FATAL_IF( "The attribute \"key\" is missing", !(*item)->hasAttribute("key") );
+        std::string key = (*item)->getExistingAttributeValue("key");
         m_managedKeys.push_back(key);
     }
 }
@@ -136,17 +106,59 @@ void LockDumpManagerSrv::configuring()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void LockDumpManagerSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LockDumpManagerSrv::updating() throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LockDumpManagerSrv::info( std::ostream &_sstream )
-{}
+{
+}
+
+//------------------------------------------------------------------------------
+
+void LockDumpManagerSrv::addObjects(::fwData::Composite::ContainerType objects)
+{
+    this->setDumpLockOnImages(m_lockedObjects, objects, true);
+}
+
+//------------------------------------------------------------------------------
+
+void LockDumpManagerSrv::changeObjects(::fwData::Composite::ContainerType newObjects,
+                                       ::fwData::Composite::ContainerType oldObjects)
+{
+    LockMapType newLocks = m_lockedObjects;
+
+    this->setDumpLockOnImages(newLocks, oldObjects, false);
+    this->setDumpLockOnImages(newLocks, newObjects, true);
+
+    m_lockedObjects = newLocks;
+}
+
+//------------------------------------------------------------------------------
+
+void LockDumpManagerSrv::removeObjects(::fwData::Composite::ContainerType objects)
+{
+    this->setDumpLockOnImages(m_lockedObjects, objects, false);
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType LockDumpManagerSrv::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT ) );
+
+    return connections;
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/CMakeLists.txt b/Bundles/LeafCtrl/ctrlSelection/CMakeLists.txt
index 234dea5..21f641e 100644
--- a/Bundles/LeafCtrl/ctrlSelection/CMakeLists.txt
+++ b/Bundles/LeafCtrl/ctrlSelection/CMakeLists.txt
@@ -1,11 +1,4 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwData
-    fwRuntime
-    fwServices
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
 
+find_package (Boost COMPONENTS regex REQUIRED)
+fwLink(${Boost_REGEX_LIBRARY})
diff --git a/Bundles/LeafCtrl/ctrlSelection/COPYING b/Bundles/LeafCtrl/ctrlSelection/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafCtrl/ctrlSelection/COPYING.LESSER b/Bundles/LeafCtrl/ctrlSelection/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafCtrl/ctrlSelection/Properties.cmake b/Bundles/LeafCtrl/ctrlSelection/Properties.cmake
index 998ec1e..ab45e28 100644
--- a/Bundles/LeafCtrl/ctrlSelection/Properties.cmake
+++ b/Bundles/LeafCtrl/ctrlSelection/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME ctrlSelection )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCom fwComEd fwCore fwData fwRuntime fwServices fwTools )
+set( DEPENDENCIES fwCom fwCore fwData fwDataTools fwRuntime fwServices fwTools fwThread )
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/bin/build.options b/Bundles/LeafCtrl/ctrlSelection/bin/build.options
deleted file mode 100644
index 9c64cf4..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/bin/build.options
+++ /dev/null
@@ -1,14 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwComEd_0-1',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwServices_0-1'
-          ]
-BUNDLE  = []
-USE = [
-    'boost',
-    ]
\ No newline at end of file
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/BookmarkSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/BookmarkSrv.hpp
index 494606d..9bd2db6 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/BookmarkSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/BookmarkSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_BOOKMARKSRV_HPP_
-#define _CTRLSELECTION_BOOKMARKSRV_HPP_
+#ifndef __CTRLSELECTION_BOOKMARKSRV_HPP__
+#define __CTRLSELECTION_BOOKMARKSRV_HPP__
 
 #include <fwServices/IService.hpp>
 #include <fwServices/IController.hpp>
@@ -19,20 +19,17 @@ namespace ctrlSelection
 /**
  * @class  BookmarkSrv
  * @brief  This service bookmark its object with the name given in configuration.
- * 
-
- * @date   2011.
  */
 class CTRLSELECTION_CLASS_API BookmarkSrv : public ::fwServices::IController
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (BookmarkSrv)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (BookmarkSrv)(::fwServices::IController) );
 
-    CTRLSELECTION_API BookmarkSrv() throw() ;
+    CTRLSELECTION_API BookmarkSrv() throw();
 
-    CTRLSELECTION_API virtual ~BookmarkSrv() throw() ;
+    CTRLSELECTION_API virtual ~BookmarkSrv() throw();
 
 protected:
 
@@ -46,11 +43,11 @@ protected:
     CTRLSELECTION_API virtual void swapping()  throw ( ::fwTools::Failed );
 
     /**
-     * @verbatim
+     * @code{.xml}
        <service impl="::ctrlSelection::BookmarkSrv" type="::fwServices::IController" autoConnect="no">
            <bookmark fromString="..." name="..." />
        </service>
-       @endverbatim
+       @endcode
      * - \b fromString : prefix of the bookmark key
      * - \b name : name of the bookmark
      * The prefix and the name are concatenated as 'prefix_name'.
@@ -65,13 +62,10 @@ protected:
 
     CTRLSELECTION_API virtual void info( std::ostream &_sstream );
 
-    /// Do nothing
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
 private:
     std::string m_bookmarkName;
 };
 
 } // ctrlSelection
 
-#endif // _CTRLSELECTION_BOOKMARKSRV_HPP_
+#endif // __CTRLSELECTION_BOOKMARKSRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IManagerSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IManagerSrv.hpp
index d943ae1..0e7a973 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IManagerSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IManagerSrv.hpp
@@ -1,26 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_IMANAGERSRV_HPP_
-#define _CTRLSELECTION_IMANAGERSRV_HPP_
-
-#include <fwServices/IService.hpp>
+#ifndef __CTRLSELECTION_IMANAGERSRV_HPP__
+#define __CTRLSELECTION_IMANAGERSRV_HPP__
 
 #include "ctrlSelection/config.hpp"
 
+#include <fwServices/IService.hpp>
+#include <fwServices/helper/Config.hpp>
 
 namespace ctrlSelection
 {
 
 /**
- * @class   IManagerSrv
  * @brief   Base class for manager.
  * A manager starts, stops or swaps services on object contained in a composite when it receives specific message.
- * 
- * @date    2007-2009.
  */
 class CTRLSELECTION_CLASS_API IManagerSrv : public ::fwServices::IService
 {
@@ -30,7 +27,7 @@ public:
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
     typedef std::string ObjectIdType;
 
-    fwCoreServiceClassDefinitionsMacro ( (IManagerSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IManagerSrv)(::fwServices::IService) );
 
     ///@brief IManagerSrv constructor. Do nothing.
     CTRLSELECTION_API IManagerSrv();
@@ -45,39 +42,7 @@ protected:
      */
     CTRLSELECTION_API virtual void swapping() throw ( ::fwTools::Failed );
 
-    typedef std::map< ObjectIdType, ::fwServices::helper::SigSlotConnection::sptr > ObjectConnectionsMapType;
-
-
-
-    /// Used to register proxy connection in order to properly disconnect it.
-    struct ProxyConnections
-    {
-        typedef std::string UIDType;
-        typedef std::string KeyType;
-        typedef std::pair<UIDType, KeyType> ProxyEltType;
-        typedef std::vector<ProxyEltType> ProxyEltVectType;
-
-        std::string m_channel;
-        ProxyEltVectType m_slots;
-        ProxyEltVectType m_signals;
-
-        ProxyConnections(const std::string& channel) : m_channel(channel)
-        {}
-
-        ~ProxyConnections()
-        {}
-
-        void addSlotConnection(UIDType uid, KeyType key)
-        {
-            m_slots.push_back(std::make_pair(uid, key));
-        }
-        void addSignalConnection(UIDType uid, KeyType key)
-        {
-            m_signals.push_back(std::make_pair(uid, key));
-        }
-    };
-    typedef std::vector<ProxyConnections> ProxyConnectionsVectType;
-    typedef std::map< ObjectIdType, ProxyConnectionsVectType > ProxyConnectionsMapType;
+    typedef std::map< ObjectIdType, ::fwCom::helper::SigSlotConnection > ObjectConnectionsMapType;
 
     /**
      * @brief Manages all connections define in config associated to object.
@@ -87,7 +52,7 @@ protected:
      * @param object Object associated with the id
      * @param config configuration for this object
      */
-    void manageConnections(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config);
+    void manageConnections(const std::string& objectId, ::fwData::Object::sptr object, ConfigurationType config);
 
     /**
      * @brief Manages a connection define in config associated to object.
@@ -96,10 +61,10 @@ protected:
      * @param object Object associated with the id
      * @param config configuration for a \<connect\> tag associated this object
      */
-    void manageConnection(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config);
+    void manageConnection(const std::string& objectId, ::fwData::Object::sptr object, ConfigurationType config);
 
     /// Disconnects all registred connection for objectId.
-    void removeConnections(const std::string &objectId);
+    void removeConnections(const std::string& objectId);
 
     /**
      * @brief Manages all proxies connections define in config associated to object
@@ -109,29 +74,20 @@ protected:
      * @param object Object associated with the id
      * @param config configuration for this object
      */
-    void manageProxies(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config);
-
-    /**
-     * @brief Manages proxy connections define in config associated to object
-     *
-     * @param objectId Id of the object
-     * @param object Object associated with the id
-     * @param config configuration for a \<proxy\> tag associated this object
-     */
-    void manageProxy(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config);
+    void manageProxies(const std::string& objectId, ::fwData::Object::sptr object, ConfigurationType config);
 
     /// Disconnects all proxies associated to objectId;
-    void disconnectProxies(const std::string &objectId);
+    void disconnectProxies(const std::string& objectId);
 
     /// Registers connection associated to an object. Connections are connected/disconnected when the object is added/removed.
     ObjectConnectionsMapType m_objectConnections;
 
     /// Proxy connection information map : used to properly disconnect proxies
-    ProxyConnectionsMapType m_proxyCtns;
+    ::fwServices::helper::Config::ProxyConnectionsMapType m_proxyCtns;
 
 
 };
 
 }
 
-#endif // _CTRLSELECTION_IMANAGERSRV_HPP_
+#endif // __CTRLSELECTION_IMANAGERSRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IUpdaterSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IUpdaterSrv.hpp
index 453433a..847e557 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IUpdaterSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IUpdaterSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_IUPDATERSRV_HPP_
-#define _CTRLSELECTION_IUPDATERSRV_HPP_
+#ifndef __CTRLSELECTION_IUPDATERSRV_HPP__
+#define __CTRLSELECTION_IUPDATERSRV_HPP__
 
 #include <boost/tuple/tuple.hpp>
 
@@ -24,7 +24,7 @@ namespace ctrlSelection
  * @brief   An updater is attached on a composite. It is use to add, swap and remove object in the composite when it
  * receives specific message (declared in configuration) and sends corresponding message message.
  * It work mainly with a IManager.
- * 
+ *
  * @date    2007-2009.
  */
 class CTRLSELECTION_CLASS_API IUpdaterSrv : public ::fwServices::IService
@@ -33,7 +33,8 @@ class CTRLSELECTION_CLASS_API IUpdaterSrv : public ::fwServices::IService
 public:
 
     /// Action to do on object in the composite
-    enum ActionType {
+    enum ActionType
+    {
         ADD,
         SWAP,
         REMOVE,
@@ -42,7 +43,7 @@ public:
         ADD_OR_SWAP
     };
 
-    fwCoreServiceClassDefinitionsMacro ( (IUpdaterSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IUpdaterSrv)(::fwServices::IService) );
 
     ///@brief IUpdaterSrv constructor. Do nothing.
     CTRLSELECTION_API IUpdaterSrv();
@@ -60,7 +61,8 @@ protected:
      * @param _action action to do with the object
      * @note the _obj can be null if the action is REMOVE, REMOVE_IF_PRESENT or DO_NOTHING
      */
-    void updateComposite( ::fwData::Composite::sptr composite, ::fwData::Object::sptr _obj, std::string _compositeKey, ActionType _action );
+    void updateComposite( ::fwData::Composite::sptr composite, ::fwData::Object::sptr _obj, std::string _compositeKey,
+                          ActionType _action );
 
     /**
      * @brief Configure the event to manage and its corresponding action
@@ -68,10 +70,10 @@ protected:
      *
      * Sample of declaration configuration :
      *
-     * @verbatim
+     * @code{.xml}
          <update compositeKey="reconstructionKey" onEvent="NEW_RECONSTRUCTION" fromUID="modelSeriesUid" actionType="ADD_OR_SWAP" />
          <update compositeKey="reconstructionKey" onEvent="CLEAR" fromUID="modelSeriesUid" actionType="REMOVE" />
-       @endverbatim
+       @endcode
      * Here, when the updater receives a message with the NEW_RECONSTRUCTION event from the object "modelSeriesUid" the object reconstructionKey is added or swapped in the composite.
      * When the updater receives a message with the CLEAR event from the object "modelSeriesUid" the object reconstructionKey is removed from the composite
      *
@@ -87,4 +89,4 @@ protected:
 
 }
 
-#endif // _CTRLSELECTION_IUPDATERSRV_HPP_
+#endif // __CTRLSELECTION_IUPDATERSRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IWrapperSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IWrapperSrv.hpp
index d3d1cdc..2a7e63c 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IWrapperSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/IWrapperSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_IWRAPPERSRV_HPP_
-#define _CTRLSELECTION_IWRAPPERSRV_HPP_
+#ifndef __CTRLSELECTION_IWRAPPERSRV_HPP__
+#define __CTRLSELECTION_IWRAPPERSRV_HPP__
 
 #include <fwServices/IService.hpp>
 
@@ -17,12 +17,7 @@ namespace ctrlSelection
 
 /**
  * @class   IWrapperSrv
- * 
- * @date    2007-2009.
  * @brief The purpose of this service is to wrap messages incoming to the object to new messages.
- *
- * Typically when a generic message as ::fwServices::ObjectMsg::UPDATED_OBJECT is received by the object then a
- * specific service can translate it to "NEW_BUFFER" for fwData::Image, "CAMERA_MOVING" for camera ....
  */
 
 
@@ -31,7 +26,7 @@ class CTRLSELECTION_CLASS_API IWrapperSrv : public ::fwServices::IService
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IWrapperSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IWrapperSrv)(::fwServices::IService) );
 
     ///@brief IWrapperSrv constructor. Do nothing.
     CTRLSELECTION_API IWrapperSrv();
@@ -43,4 +38,4 @@ public:
 
 }
 
-#endif // _CTRLSELECTION_IWRAPPERSRV_HPP_
+#endif // __CTRLSELECTION_IWRAPPERSRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/ImageUpdateAxis.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/ImageUpdateAxis.hpp
index 2dd8ee2..d12d3d6 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/ImageUpdateAxis.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/ImageUpdateAxis.hpp
@@ -1,40 +1,44 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_IMAGEUPDATEAXIS_HPP_
-#define _CTRLSELECTION_IMAGEUPDATEAXIS_HPP_
+#ifndef __CTRLSELECTION_IMAGEUPDATEAXIS_HPP__
+#define __CTRLSELECTION_IMAGEUPDATEAXIS_HPP__
 
-#include <fwServices/IService.hpp>
-#include <fwServices/IController.hpp>
+#include "ctrlSelection/config.hpp"
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include "ctrlSelection/config.hpp"
+#include <fwServices/IController.hpp>
+#include <fwServices/IService.hpp>
 
 namespace ctrlSelection
 {
 
 
 /**
- * @class  ImageUpdateAxis
  * @brief  This service updates a fwData::Float given in configuration with the image axis.
- * 
-
- * @date   2011.
  */
 class CTRLSELECTION_CLASS_API ImageUpdateAxis : public ::fwServices::IController
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageUpdateAxis)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageUpdateAxis)(::fwServices::IController) );
 
-    CTRLSELECTION_API ImageUpdateAxis() throw() ;
+    CTRLSELECTION_API ImageUpdateAxis() throw();
 
-    CTRLSELECTION_API virtual ~ImageUpdateAxis() throw() ;
+    CTRLSELECTION_API virtual ~ImageUpdateAxis() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     */
+    CTRLSELECTION_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -50,11 +54,11 @@ protected:
     /**
      * @brief Configures the service.
      *
-     * @verbatim
+     * @code{.xml}
        <service type="::fwServices::IController" impl="::ctrlSelection::ImageUpdateAxis" autoConnect="yes">
            <axis uid="imageAxis" orientation="axial" />
        </service>
-       @endverbatim
+       @endcode
      * - \b uid : fwID of the ::fwData::Float to update
      * - \b orientation : image orientation (axial, frontal or sagittal)
      */
@@ -67,20 +71,27 @@ protected:
     CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
 
     /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    /// Receives image event to change axis orientation.
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
 
 private:
 
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+    /**
+     * @}
+     */
+
     /// fwID of the float to update.
     std::string m_floatID;
 
     /// Orientation of the image axis.
-    ::fwComEd::helper::MedicalImageAdaptor::Orientation m_orientation;
+    ::fwDataTools::helper::MedicalImageAdaptor::Orientation m_orientation;
 };
 
 } // ctrlSelection
 
-#endif // _CTRLSELECTION_IMAGEUPDATEAXIS_HPP_
+#endif // __CTRLSELECTION_IMAGEUPDATEAXIS_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/MedicalImageSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/MedicalImageSrv.hpp
index 2cd97de..3711d7f 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/MedicalImageSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/MedicalImageSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_MEDICALIMAGESRV_HPP_
-#define _CTRLSELECTION_MEDICALIMAGESRV_HPP_
+#ifndef __CTRLSELECTION_MEDICALIMAGESRV_HPP__
+#define __CTRLSELECTION_MEDICALIMAGESRV_HPP__
 
 #include <fwServices/IService.hpp>
 #include <fwServices/IController.hpp>
@@ -17,23 +17,38 @@ namespace ctrlSelection
 
 
 /**
- * @class  MedicalImageSrv
  * @brief  This service convert its attached image to a medical image by adding specific fields.
- * 
-
- * @date   2010.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+       <service type="::ctrlSelection::MedicalImageSrv">
+           <inout key="image" uid="..."/>
+       </service>
+   @endcode
+ * @subsection In-Out In-Out
+ * - \b image [::fwData::Image]: image to be converted into a medical image.
  */
 class CTRLSELECTION_CLASS_API MedicalImageSrv : public ::fwServices::IController
 {
 
-public :
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (MedicalImageSrv)(::fwServices::IController) );
 
-    fwCoreServiceClassDefinitionsMacro ( (MedicalImageSrv)(::fwServices::IController) ) ;
 
+    CTRLSELECTION_API MedicalImageSrv() throw();
 
-    CTRLSELECTION_API MedicalImageSrv() throw() ;
+    CTRLSELECTION_API virtual ~MedicalImageSrv() throw();
 
-    CTRLSELECTION_API virtual ~MedicalImageSrv() throw() ;
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    CTRLSELECTION_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -56,11 +71,9 @@ protected:
     CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
 
     /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
 
-private :
+private:
 
     void convertImage();
 
@@ -69,4 +82,4 @@ private :
 
 } // ctrlSelection
 
-#endif // _CTRLSELECTION_MEDICALIMAGESRV_HPP_
+#endif // __CTRLSELECTION_MEDICALIMAGESRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Namespace.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Namespace.hpp
index c95f609..90f3a4f 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Namespace.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Namespace.hpp
@@ -1,21 +1,48 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef CTRLSELECTIONNAMESPACE_HPP_
-#define CTRLSELECTIONNAMESPACE_HPP_
+#ifndef __CTRLSELECTION_NAMESPACE_HPP__
+#define __CTRLSELECTION_NAMESPACE_HPP__
 
 /**
  * @brief      The namespace ctrlSelection contains several interfaces for manager, updater and wrapper.
  * @namespace  ctrlSelection
- * 
- * @date       2009-2010.
  *
  */
 namespace ctrlSelection
 {
 
+/**
+ * @brief      The namespace ctrlSelection::manager contains the manager services.
+ * @namespace  ctrlSelection::manager
+ *
+ */
+namespace manager
+{
+
+}
+
+/**
+ * @brief      The namespace ctrlSelection::updater contains the updater services.
+ * @namespace  ctrlSelection::updater
+ *
+ */
+namespace updater
+{
+
+}
+
+/**
+ * @brief      The namespace ctrlSelection::wrapper contains the wrapper services.
+ * @namespace  ctrlSelection::wrapper
+ *
+ */
+namespace wrapper
+{
+
+}
 }
-#endif /* CTRLSELECTIONNAMESPACE_HPP_ */
+#endif /* __CTRLSELECTION_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Plugin.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Plugin.hpp
index e7ef949..5865d6e 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Plugin.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_PLUGIN_HPP_
-#define _CTRLSELECTION_PLUGIN_HPP_
+#ifndef __CTRLSELECTION_PLUGIN_HPP__
+#define __CTRLSELECTION_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -15,7 +15,7 @@ namespace ctrlSelection
 class Plugin : public ::fwRuntime::Plugin
 {
 
-public :
+public:
 
     /// PLugin destructor
     ~Plugin() throw();
@@ -30,4 +30,4 @@ public :
 
 } // namespace ctrlSelection
 
-#endif // _CTRLSELECTION_PLUGIN_HPP_
+#endif // __CTRLSELECTION_PLUGIN_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/config.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/config.hpp
deleted file mode 100644
index 448daba..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_CONFIG_HPP_
-#define _CTRLSELECTION_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef CTRLSELECTION_EXPORTS
-    #define CTRLSELECTION_API __declspec(dllexport)
-    #else
-    #define CTRLSELECTION_API __declspec(dllimport)
-    #endif
-
-    #define CTRLSELECTION_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef CTRLSELECTION_EXPORTS
-    #define CTRLSELECTION_API __attribute__ ((visibility("default")))
-    #define CTRLSELECTION_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define CTRLSELECTION_API __attribute__ ((visibility("hidden")))
-    #define CTRLSELECTION_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define CTRLSELECTION_API
-    #define CTRLSELECTION_CLASS_API
-
-#endif
-
-#endif // _CTRLSELECTION_CONFIG_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/MedicalImageManagerSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/MedicalImageManagerSrv.hpp
deleted file mode 100644
index 49cb2df..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/MedicalImageManagerSrv.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_MANAGER_MEDICALIMAGEMANAGERSRV_HPP_
-#define _CTRLSELECTION_MANAGER_MEDICALIMAGEMANAGERSRV_HPP_
-
-#include <fwServices/IService.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IManagerSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace manager
-{
-
-/**
- * @brief  This manager converts the images specified by key to medical image (with landmarks, transfer function fields)
- * @class  MedicalImageManagerSrv
- */
-class CTRLSELECTION_CLASS_API MedicalImageManagerSrv : public ::ctrlSelection::IManagerSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (MedicalImageManagerSrv)(::ctrlSelection::IManagerSrv) ) ;
-
-    /// Constructor.  Do nothing.
-    CTRLSELECTION_API MedicalImageManagerSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~MedicalImageManagerSrv() throw() ;
-
-    /// Implements starting method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configure the service.
-     * @verbatim
-     <service uid="medicalImageManager" impl="::ctrlSelection::manager::MedicalImageManagerSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
-         <update imageCompositeKey="image" />
-     </service>
-      @endverbatim
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-private :
-
-    /// Converts the images specified by key to medical image (with landmarks, transfer function fields).
-    void convertImages( ::fwData::Composite::sptr _composite );
-
-    std::vector< std::string > m_imageCompositeKeys;
-};
-
-} // manager
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_MANAGER_MEDICALIMAGEMANAGERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/Namespace.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/Namespace.hpp
index f2ad25c..1af927c 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/Namespace.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/Namespace.hpp
@@ -1,24 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef CTRLSELECTIONMANAGERNAMESPACE_HPP_
-#define CTRLSELECTIONMANAGERNAMESPACE_HPP_
+#ifndef __CTRLSELECTION_MANAGER_NAMESPACE_HPP__
+#define __CTRLSELECTION_MANAGER_NAMESPACE_HPP__
 
 namespace ctrlSelection
 {
-/**
- * @brief      The namespace ctrlSelection::manager contains the manager services.
- * @namespace  ctrlSelection::manager
- * 
- * @date       2009-2010.
- *
- */
-namespace manager
-{
 
 }
-}
-#endif /* CTRLSELECTIONMANAGERNAMESPACE_HPP_ */
+#endif /* __CTRLSELECTION_MANAGER_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp
index cb5dd8b..aef7af5 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SField.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_MANAGER_SFIELD_HPP_
-#define _CTRLSELECTION_MANAGER_SFIELD_HPP_
+#ifndef __CTRLSELECTION_MANAGER_SFIELD_HPP__
+#define __CTRLSELECTION_MANAGER_SFIELD_HPP__
+
+#include "ctrlSelection/IManagerSrv.hpp"
+#include "ctrlSelection/config.hpp"
 
 #include <fwData/Object.hpp>
+
 #include <fwRuntime/ConfigurationElement.hpp>
 
 #include <fwServices/IService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IManagerSrv.hpp"
 
 namespace ctrlSelection
 {
@@ -22,22 +22,31 @@ namespace manager
 {
 
 /**
- * @class  SField
  * @brief  This services is a manager which starts, stops or swaps services on field contained in a composite when
  * it receive specific message (mainly sent by updater).
  */
 class CTRLSELECTION_CLASS_API SField : public ::ctrlSelection::IManagerSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SField)(::ctrlSelection::IManagerSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SField)(::ctrlSelection::IManagerSrv) );
 
     /// Constructor.  Do nothing.
-    CTRLSELECTION_API SField() throw() ;
+    CTRLSELECTION_API SField() throw();
 
     /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~SField() throw() ;
+    CTRLSELECTION_API virtual ~SField() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Object::s_ADDED_FIELDS_SIG to this::s_ADD_FIELDS_SLOT
+     * Connect Object::s_CHANGED_FIELDS_SIG to this::s_CHANGE_FIELDS_SLOT
+     * Connect Object::s_REMOVED_FIELDS_SIG to this::s_REMOVE_FIELDS_SLOT
+     */
+    CTRLSELECTION_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -49,11 +58,11 @@ protected:
     CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
 
     /**
-    * @brief Implements configuring method derived from IService. .
-    *
-    * Sample of declaration configuration for a simple swapper service
-    *
-    * @verbatim
+     * @brief Implements configuring method derived from IService. .
+     *
+     * Sample of declaration configuration for a simple swapper service
+     *
+     * @code{.xml}
         <service uid="FieldManager" impl="::ctrlSelection::manager::SField" type="::ctrlSelection::IManagerSrv" autoConnect="yes" >
             <mode type="dummy" />
             <config>
@@ -65,7 +74,7 @@ protected:
                     </connect>
                 </field>
                 <field id="AxialSliceIndex" type="::fwData::Integer" >
-                    <service uid="Services2" impl="..." type="..." autoConnect="yes" />
+                    <service uid="Services2" impl="..." type="..." autoConnect="yes" worker="myThread" />
                     <proxy channel="...">
                         <signal>...</signal>
                         <signal>.../...</signal>
@@ -75,11 +84,13 @@ protected:
                 </field>
             </config>
         </service>
-    @endverbatim
-    * With:
-    * @li mode : must be "stop" or "dummy". The dummy mode doesn't stop the services when its attached field is deleted but swap it on a dummy field.
-    * @li the fields, services, connect and proxy tags are defined as same as the configuration of fields and services.
-    */
+       @endcode
+     * With:
+     * @li mode : must be "stop" or "dummy". The dummy mode doesn't stop the services when its attached field is deleted but swap it on a dummy field.
+     * @li the fields, services, connect and proxy tags are defined as same as the configuration of fields and services.
+     * @li autoConnect: optional (default value = false), if true allows to listen signals from the associated object.
+     * @li worker: optional, allows to manage the service in another thread.
+     */
     CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
 
     /// Implements reconfiguring method derived from IService. Do nothing.
@@ -89,55 +100,58 @@ protected:
     CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
 
     /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    /// Reacts on specifics event (ADDED_FIELDS, REMOVED_FIELDS and SWAPPED_FIELDS) and start, stop or swap the managed services
-    /// on the fields defined in the message or dummy fields
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
     typedef ::fwData::Object::FieldNameType FieldNameType;
-    typedef ::fwServices::ObjectMsg::ModifiedFieldsContainerType ModifiedFieldsContainerType;
 
     class SubService
     {
     public:
 
-        SubService()
+        SubService() : m_hasAutoConnection(false)
         {
-            m_hasAutoConnection = false;
         }
 
         ~SubService()
-        { }
+        {
+        }
 
         SPTR (::fwServices::IService) getService()
-                    { return m_service.lock(); }
+        {
+            return m_service.lock();
+        }
 
         ::fwData::Object::sptr m_dummy;
         ConfigurationType m_config;
         WPTR(::fwServices::IService) m_service;
-        ::fwServices::helper::SigSlotConnection::sptr m_connections;
+        ::fwCom::helper::SigSlotConnection m_connections;
         bool m_hasAutoConnection;
     };
 
     typedef std::vector< SPTR(SubService) > SubServicesVecType;
-    typedef std::map< FieldNameType, SubServicesVecType > SubServicesMapType ;
+    typedef std::map< FieldNameType, SubServicesVecType > SubServicesMapType;
 
 
     void initOnDummyObject( const FieldNameType& fieldName );
-    void addFields( const ModifiedFieldsContainerType& fields );
     void addField( const FieldNameType& fieldName, ::fwData::Object::sptr field );
-    void swapFields( const ModifiedFieldsContainerType& fields );
     void swapField(const FieldNameType& fieldName, ::fwData::Object::sptr field);
-    void removeFields( const ModifiedFieldsContainerType& fields );
     void removeField( const FieldNameType& fieldName );
+    /// Slot: add objects
+    void addFields(::fwData::Object::FieldsContainerType fields);
 
-    ::fwServices::IService::sptr add( ::fwData::Object::sptr obj , ::fwRuntime::ConfigurationElement::sptr _elt );
+    /// Slot: change objects
+    void changeFields(::fwData::Object::FieldsContainerType newFields, ::fwData::Object::FieldsContainerType oldFields);
+
+    /// Slot: remove objects
+    void removeFields(::fwData::Object::FieldsContainerType fields);
+
+    ::fwServices::IService::sptr add( ::fwData::Object::sptr obj, ::fwRuntime::ConfigurationElement::sptr _elt );
 
 private:
 
+
+
     std::string m_mode;
     bool m_dummyStopMode;
     ConfigurationType m_managerConfiguration;
@@ -147,4 +161,4 @@ private:
 } // manager
 } // ctrlSelection
 
-#endif // _CTRLSELECTION_MANAGER_SFIELD_HPP_
+#endif // __CTRLSELECTION_MANAGER_SFIELD_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SwapperSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SwapperSrv.hpp
index 10a6579..8295085 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SwapperSrv.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/manager/SwapperSrv.hpp
@@ -1,19 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_MANAGER_SWAPPER_HPP_
-#define _CTRLSELECTION_MANAGER_SWAPPER_HPP_
+#ifndef __CTRLSELECTION_MANAGER_SWAPPERSRV_HPP__
+#define __CTRLSELECTION_MANAGER_SWAPPERSRV_HPP__
+
+#include "ctrlSelection/IManagerSrv.hpp"
+#include "ctrlSelection/config.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <fwData/Composite.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
 #include <fwServices/IService.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
 
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IManagerSrv.hpp"
 
 namespace ctrlSelection
 {
@@ -21,22 +25,31 @@ namespace manager
 {
 
 /**
- * @class  SwapperSrv
  * @brief  This services is a manager which starts, stops or swaps services on object contained in a composite when
  * it receive specific message (mainly sent by updater).
  */
 class CTRLSELECTION_CLASS_API SwapperSrv : public ::ctrlSelection::IManagerSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SwapperSrv)(::ctrlSelection::IManagerSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SwapperSrv)(::ctrlSelection::IManagerSrv) );
 
     /// Constructor.  Do nothing.
-    CTRLSELECTION_API SwapperSrv() throw() ;
+    CTRLSELECTION_API SwapperSrv() throw();
 
     /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~SwapperSrv() throw() ;
+    CTRLSELECTION_API virtual ~SwapperSrv() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_ADD_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_CHANGE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_REMOVE_OBJECTS_SLOT
+     */
+    CTRLSELECTION_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -48,11 +61,11 @@ protected:
     CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
 
     /**
-    * @brief Implements configuring method derived from IService. .
-    *
-    * Sample of declaration configuration for a simple swapper service
-    *
-    * @verbatim
+     * @brief Implements configuring method derived from IService. .
+     *
+     * Sample of declaration configuration for a simple swapper service
+     *
+     * @code{.xml}
         <service uid="myManager" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes" >
             <mode type="dummy" />
             <config>
@@ -61,16 +74,16 @@ protected:
                     <service uid="myServices" impl="..." type="..." autoConnect="yes" />
 
                     <connect>
-                        <signal>key</signal>
+                        <signal>key</signal><!-- Signal of object "myImage" -->
                         <slot>uid/key</slot>
                     </connect>
 
                 </object>
                 <object id="myAcquisition" type="::fwData::Acquisition" >
-                    <service uid="myServices2" impl="..." type="..." autoConnect="yes" />
+                    <service uid="myServices2" impl="..." type="..." autoConnect="yes" worker="myThread" />
 
                     <proxy channel="...">
-                        <signal>...</signal>
+                        <signal>...</signal><!-- Signal of object "myAcquisition" -->
                         <signal>.../...</signal>
                         <slot>.../...</slot>
                         <slot>.../...</slot>
@@ -78,11 +91,23 @@ protected:
                 </object>
             </config>
         </service>
-    @endverbatim
-    * With:
-    * @li mode : must be "stop" or "dummy". The dummy mode doesn't stop the services when its attached object is deleted but swap it on a dummy object.
-    * @li the objects and services tags are defined as same as the configuration of objects and services.
-    */
+       @endcode
+     * With:
+     * @li \b mode : must be "stop", "dummy" or "startAndUpdate".
+     *     - The mode "stop", used by default, starts the services when their attached object is added in the compsite
+     *       and stop and unregister the services when the object is deleted.
+     *     - The mode "dummy" doesn't stop the services when its attached object is deleted but swap it on a dummy
+     *       object.
+     *     - The mode "startAndUpdate" start and update the services when its attached object is added in the composite.
+     * @li the objects and services tags are defined as same as the configuration of objects and services.
+     * @li \b autoConnect: optional (default value = false), if true allows to listen signals from the associated object.
+     * @li \b worker: optional, allows to manage the service in another thread.
+     * @li \b connect : not mandatory, connects signal to slot
+     *   - \b signal : mandatory, must be signal holder UID, followed by '/', followed by signal name. To use the
+     *        object signal, you don't have to write object uid, only the signal name.
+     *   - \b slot : mandatory, must be slot holder UID, followed by '/', followed by slot name
+     * @li \b proxy : not mandatory, connects the signals/slots in a proxy
+     */
     CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
 
     /// Implements reconfiguring method derived from IService. Do nothing.
@@ -92,12 +117,7 @@ protected:
     CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
 
     /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    /// Reacts on specifics event (ADDED_KEYS, REMOVED_KEYS and CHANGED_KEYS) and start, stop or swap the managed services
-    /// on the objects defined in the message or dummy objects
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
     typedef std::string ObjectIdType;
@@ -108,33 +128,43 @@ protected:
     public:
 
         SubService() : m_hasAutoConnection(false)
-        {}
+        {
+        }
 
         ~SubService()
-        {}
+        {
+        }
 
         SPTR (::fwServices::IService) getService()
-                    { return m_service.lock(); }
+        {
+            return m_service.lock();
+        }
 
         ::fwData::Object::sptr m_dummy;
         ConfigurationType m_config;
         WPTR(::fwServices::IService) m_service;
-        ::fwServices::helper::SigSlotConnection::sptr m_connections;
+        ::fwCom::helper::SigSlotConnection m_connections;
         bool m_hasAutoConnection;
     };
 
     typedef std::vector< SPTR(SubService) > SubServicesVecType;
-    typedef std::map< ObjectIdType, SubServicesVecType > SubServicesMapType ;
+    typedef std::map< ObjectIdType, SubServicesVecType > SubServicesMapType;
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects, ::fwData::Composite::ContainerType oldObjects);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
 
     void initOnDummyObject( std::string objectId );
-    void addObjects( ::fwData::Composite::sptr _composite );
-    void addObject( const std::string &objectId, ::fwData::Object::sptr object );
-    void swapObjects( ::fwData::Composite::sptr _composite );
-    void swapObject(const std::string &objectId, ::fwData::Object::sptr object);
-    void removeObjects( ::fwData::Composite::sptr _composite );
-    void removeObject( const std::string &objectId );
+    void addObject( const std::string& objectId, ::fwData::Object::sptr object );
+    void changeObject(const std::string& objectId, ::fwData::Object::sptr object);
+    void removeObject( const std::string& objectId );
 
-    ::fwServices::IService::sptr add( ::fwData::Object::sptr obj , ::fwRuntime::ConfigurationElement::sptr _elt );
+    ::fwServices::IService::sptr add( ::fwData::Object::sptr obj, ::fwRuntime::ConfigurationElement::sptr _elt );
 
 private:
 
@@ -148,4 +178,4 @@ private:
 } // manager
 } // ctrlSelection
 
-#endif // _CTRLSELECTION_MANAGER_SWAPPER_HPP_
+#endif // __CTRLSELECTION_MANAGER_SWAPPERSRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.hpp
deleted file mode 100644
index 59dd7f7..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_DATAINFOFROMMSGUPDATERSRV_HPP_
-#define _CTRLSELECTION_DATAINFOFROMMSGUPDATERSRV_HPP_
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-/**
- * @class   DataInfoFromMsgUpdaterSrv
- * @brief   Updates the composite related to this service according to the data stored (dataInfo) in the event :
- * @warning datainfo MUST be always provided (but can be null), dataInfo MUST have the same type
- * 
-
- * @date    2009-2010.
- */
-class CTRLSELECTION_CLASS_API DataInfoFromMsgUpdaterSrv : public ::ctrlSelection::IUpdaterSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (DataInfoFromMsgUpdaterSrv)(::ctrlSelection::IUpdaterSrv) ) ;
-
-    /// Constructor.  Do nothing.
-    CTRLSELECTION_API DataInfoFromMsgUpdaterSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~DataInfoFromMsgUpdaterSrv() throw() ;
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configure the services : declare the event to react.
-     * @verbatim
-         <service uid="myUpdater" impl="::ctrlSelection::updater::DataInfoFromMsgUpdaterSrv" type="::ctrlSelection::IUpdaterSrv" autoConnect="no"  >
-            <update compositeKey="myObject" onEvent="NEW_OBJECT" fromUID="myPatient" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="myObject" onEvent="CLEAR_OBJECT" fromUID="myPatient" actionType="REMOVE"/>
-        </service>
-      @endverbatim
-     * @see IUpdaterSrv::configureManagedEvents(::fwRuntime::ConfigurationElement::sptr configuration);
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-};
-
-} // updater
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_DATAINFOFROMMSGUPDATERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/Namespace.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/Namespace.hpp
deleted file mode 100644
index 2d2b543..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/Namespace.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef CTRLSELECTIONUPDATERNAMESPACE_HPP_
-#define CTRLSELECTIONUPDATERNAMESPACE_HPP_
-
-
-namespace ctrlSelection
-{
-/**
- * @brief      The namespace ctrlSelection::updater contains the updater services.
- * @namespace  ctrlSelection::updater
- * 
- * @date       2009-2010.
- *
- */
-namespace updater
-{
-
-}
-}
-#endif /* CTRLSELECTIONUPDATERNAMESPACE_HPP_ */
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/ObjFromMsgUpdaterSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/ObjFromMsgUpdaterSrv.hpp
deleted file mode 100644
index 6edcb40..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/ObjFromMsgUpdaterSrv.hpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_OBJFROMMSGUPDATERSRV_HPP_
-#define _CTRLSELECTION_OBJFROMMSGUPDATERSRV_HPP_
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-/**
- * @class  ObjFromMsgUpdaterSrv
- * @brief  Update the composite with the object which send the message.
- * 
-
- * @date    2009-2010.
- */
-class CTRLSELECTION_CLASS_API ObjFromMsgUpdaterSrv : public ::ctrlSelection::IUpdaterSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ObjFromMsgUpdaterSrv)(::ctrlSelection::IUpdaterSrv) ) ;
-
-    /// Constructor.  Do nothing.
-    CTRLSELECTION_API ObjFromMsgUpdaterSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~ObjFromMsgUpdaterSrv() throw() ;
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configure the services : declare the event to react.
-     * @verbatim
-         <service uid="myUpdater" impl="::ctrlSelection::updater::ObjFromMsgUpdaterSrv" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-            <update compositeKey="myImage" onEvent="NEW_IMAGE_SELECTED" fromUID="myImage" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="myObject" onEvent="NEW_OBJECT" fromUID="myObject" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="myObject" onEvent="REMOVE_OBJECT" fromUID="myObject" actionType="REMOVE"/>
-        </service>
-      @endverbatim
-     * @see IUpdaterSrv::configureManagedEvents(::fwRuntime::ConfigurationElement::sptr configuration);
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-};
-
-} // updater
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_OBJFROMMSGUPDATERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.hpp
deleted file mode 100644
index 9e1bca3..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_RECONSTRUCTIONFROMRESECUPDATERSRV_HPP_
-#define _CTRLSELECTION_RECONSTRUCTIONFROMRESECUPDATERSRV_HPP_
-
-#include <fwData/Reconstruction.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-/**
- * @class  ReconstructionFromResecUpdaterSrv
- * @brief  Specific updater to update PlaneList from a resection.
- */
-class CTRLSELECTION_CLASS_API ReconstructionFromResecUpdaterSrv : public ::ctrlSelection::IUpdaterSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ReconstructionFromResecUpdaterSrv)(::ctrlSelection::IUpdaterSrv) ) ;
-
-    /// Constructor.  Do nothing.
-    CTRLSELECTION_API ReconstructionFromResecUpdaterSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~ReconstructionFromResecUpdaterSrv() throw() ;
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configure the services : declare the event to react.
-     * @verbatim
-         <service uid="myUpdater" impl="::ctrlSelection::updater::ReconstructionFromResecUpdaterSrv" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-            <update compositeKey="myReconstruction" onEvent="NEW_RECONSTRUCTION" fromUID="myResection" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="myReconstruction" onEvent="NEW_RECONSTRUCTION" fromUID="*" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="myReconstruction" onEvent="CLEAR" fromUID="myResection" actionType="REMOVE"/>
-        </service>
-      @endverbatim
-     * The '*' value for "fromUID" means that the message could be received from every objects
-     * @see IUpdaterSrv::configureManagedEvents(::fwRuntime::ConfigurationElement::sptr configuration);
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-private:
-
-    ::fwData::Reconstruction::sptr getReconstruction(::fwServices::ObjectMsg::csptr _msg);
-};
-
-} // updater
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_RECONSTRUCTIONFROMRESECUPDATERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SDrop.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SDrop.hpp
index 873a167..9b5e47e 100644
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SDrop.hpp
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SDrop.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _CTRLSELECTION_SDROP_HPP_
-#define _CTRLSELECTION_SDROP_HPP_
+#ifndef __CTRLSELECTION_UPDATER_SDROP_HPP__
+#define __CTRLSELECTION_UPDATER_SDROP_HPP__
 
 #include "ctrlSelection/config.hpp"
 #include "ctrlSelection/IUpdaterSrv.hpp"
@@ -19,20 +19,20 @@ namespace updater
 /**
  * @class  SDrop
  * @brief  Drop received object to associated ::fwData::Composite.
- * 
+ *
  */
 class CTRLSELECTION_CLASS_API SDrop : public ::ctrlSelection::IUpdaterSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SDrop)(::ctrlSelection::IUpdaterSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SDrop)(::ctrlSelection::IUpdaterSrv) );
 
     /// Constructor.  Do nothing.
-    CTRLSELECTION_API SDrop() throw() ;
+    CTRLSELECTION_API SDrop() throw();
 
     /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~SDrop() throw() ;
+    CTRLSELECTION_API virtual ~SDrop() throw();
 
 protected:
 
@@ -54,13 +54,13 @@ protected:
     /// Implements info method derived from IService. Print classname.
     CTRLSELECTION_API virtual void info( std::ostream &_sstream );
 
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
 private:
 
+    /// Slot: add the object defined by uid
+    void addObject(std::string uid);
 };
 
 } // updater
 } // ctrlSelection
 
-#endif // _CTRLSELECTION_SDROP_HPP_
+#endif // __CTRLSELECTION_UPDATER_SDROP_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp
new file mode 100644
index 0000000..80ae510
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromSlot.hpp
@@ -0,0 +1,128 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLSELECTION_UPDATER_SOBJFROMSLOT_HPP__
+#define __CTRLSELECTION_UPDATER_SOBJFROMSLOT_HPP__
+
+#include "ctrlSelection/config.hpp"
+#include "ctrlSelection/IUpdaterSrv.hpp"
+
+#include <fwData/Object.hpp>
+
+namespace ctrlSelection
+{
+
+namespace updater
+{
+
+/**
+ * @brief  Registers/unregisters the object given by the slots.
+ *
+ * @section Slots Slots
+ * - \b add(::fwData::Object::sptr) : Registers the given object in the OSR
+ * - \b remove(::fwData::Object::sptr) : Unregisters the object in the OSR
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+     <service type="::ctrlSelection::updater::SObjFromSlot">
+         <out key="object" uid="..." />
+     </service>
+     @endcode
+ * @subsection Output Output
+ * - \b object [::fwData::Object]: Object used to register/unregister the object given by the slots.
+ *
+ * @deprecated The slots 'addOrSwap', 'swapObj' and 'removeIfPresent' should be replaced by 'add' or 'remove'.
+ */
+class CTRLSELECTION_CLASS_API SObjFromSlot : public ::ctrlSelection::IUpdaterSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SObjFromSlot)(::ctrlSelection::IUpdaterSrv) );
+
+    /// Constructor.  Do nothing.
+    CTRLSELECTION_API SObjFromSlot() throw();
+
+    /// Destructor. Do nothing.
+    CTRLSELECTION_API virtual ~SObjFromSlot() throw();
+
+    /**
+     * @name Slots
+     * @{
+     */
+    static const ::fwCom::Slots::SlotKeyType s_ADD_OR_SWAP_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_ADD_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_SWAP_OBJ_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_REMOVE_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_REMOVE_IF_PRESENT_SLOT;
+    /**
+     * @}
+     */
+
+protected:
+
+    /**
+     * @brief Configures the service.
+     *
+     * @code{.xml}
+       <service impl="::ctrlSelection::updater::SObjFromSlot">
+           <compositeKey>key</compositeKey>
+       </service>
+       @endcode
+     * - \b compositeKey key of the object to manage into the composite (add/swap/remove)
+     */
+    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
+
+    /// Implements starting method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
+
+    /// Implements stopping method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
+
+    /// Implements updating method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Implements info method derived from IService. Print classname.
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Adds the object into the composite with the key given by config.
+    void add(::fwData::Object::sptr obj);
+
+    /**
+     * @brief Adds or swap the object into the composite with the key given by config.
+     *
+     * Adds the object if it is not present in the composite, else swaps it.
+     */
+    void addOrSwap(::fwData::Object::sptr obj);
+
+    /// Swaps the object into the composite with the key given by config.
+    void swap(::fwData::Object::sptr obj);
+
+    /// Adds the object from the composite with the key given by config.
+    void remove();
+
+    /// Adds the object into the composite with the key given by config if it is present.
+    void removeIfPresent();
+    /**
+     * @}
+     */
+
+private:
+
+    std::string m_compositeKey; ///< key of the object to manage in the composite
+
+    std::string m_objectUid; ///< Uid of the object to output
+};
+
+} // updater
+} // ctrlSelection
+
+#endif // __CTRLSELECTION_UPDATER_SOBJFROMSLOT_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromUid.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromUid.hpp
new file mode 100644
index 0000000..00df383
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SObjFromUid.hpp
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLSELECTION_UPDATER_SOBJFROMUID_HPP__
+#define __CTRLSELECTION_UPDATER_SOBJFROMUID_HPP__
+
+#include "ctrlSelection/config.hpp"
+#include "ctrlSelection/IUpdaterSrv.hpp"
+
+#include <fwData/Object.hpp>
+
+namespace ctrlSelection
+{
+
+namespace updater
+{
+
+/**
+ * @class  SObjFromUid
+ * @brief  Updates the composite from object given by uid. The objects is added/swapped/removed from composite when the
+ * respective slot is called.
+ *
+ */
+class CTRLSELECTION_CLASS_API SObjFromUid : public ::ctrlSelection::IUpdaterSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SObjFromUid)(::ctrlSelection::IUpdaterSrv) );
+
+    /// Constructor.  Do nothing.
+    CTRLSELECTION_API SObjFromUid() throw();
+
+    /// Destructor. Do nothing.
+    CTRLSELECTION_API virtual ~SObjFromUid() throw();
+
+    /**
+     * @name Slots
+     * @{
+     */
+    static const ::fwCom::Slots::SlotKeyType s_ADD_OR_SWAP_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_ADD_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_SWAP_OBJ_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_REMOVE_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_REMOVE_IF_PRESENT_SLOT;
+    /**
+     * @}
+     */
+
+protected:
+
+    /**
+     * @brief Configures the service.
+     *
+     * @code{.xml}
+       <service impl="::ctrlSelection::updater::SObjFromUid">
+           <uid>objecUid</uid>
+           <compositeKey>key</compositeKey>
+       </service>
+       @endcode
+     * - \b compositeKey key of the object to manage into the composite (add/swap/remove)
+     */
+    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
+
+    /// Implements starting method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
+
+    /// Implements stopping method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
+
+    /// Implements updating method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Implements info method derived from IService. Print classname.
+    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Adds the object into the composite with the key given by config.
+    void add();
+
+    /**
+     * @brief Adds or swap the object into the composite with the key given by config.
+     *
+     * Adds the object if it is not present in the composite, else swaps it.
+     */
+    void addOrSwap();
+
+    /// Swaps the object into the composite with the key given by config.
+    void swap();
+
+    /// Adds the object from the composite with the key given by config.
+    void remove();
+
+    /// Adds the object into the composite with the key given by config if it is present.
+    void removeIfPresent();
+    /**
+     * @}
+     */
+
+private:
+
+    std::string m_objectUid; ///< uid of the object
+    std::string m_compositeKey; ///< key of the object to manage in the composite
+
+};
+
+} // updater
+} // ctrlSelection
+
+#endif // __CTRLSELECTION_UPDATER_SOBJFROMUID_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.hpp
deleted file mode 100644
index ecacd09..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __CTRLSELECTION_RECONSTRUCTIONFROMMODELSERIESUPDATERSRV_HPP__
-#define __CTRLSELECTION_RECONSTRUCTIONFROMMODELSERIESUPDATERSRV_HPP__
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IUpdaterSrv.hpp"
-
-namespace fwData
-{
-    class Reconstruction;
-}
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-/**
- * @class  SReconstructionFromModelSeriesUpdater
-
- * @date   2013
- */
-class CTRLSELECTION_CLASS_API SReconstructionFromModelSeriesUpdater : public ::ctrlSelection::IUpdaterSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (SReconstructionFromModelSeriesUpdater)(::ctrlSelection::IUpdaterSrv) ) ;
-
-    /// Constructor.  Do nothing.
-    CTRLSELECTION_API SReconstructionFromModelSeriesUpdater() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~SReconstructionFromModelSeriesUpdater() throw() ;
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configure the services : declare the event to react.
-     * @verbatim
-         <service uid="myUpdater" impl="::ctrlSelection::updater::SReconstructionFromModelSeriesUpdater" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
-            <update compositeKey="reconstructionKey" onEvent="NEW_RECONSTRUCTION" fromUID="modelSeriesUid" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="reconstructionKey" onEvent="NEW_RECONSTRUCTION" fromUID="*" actionType="ADD_OR_SWAP"/>
-            <update compositeKey="reconstructionKey" onEvent="CLEAR" fromUID="modelSeries" actionType="REMOVE"/>
-        </service>
-      @endverbatim
-     * The '*' value for "fromUID" mean that the message could be received from every objects
-     * @see IUpdaterSrv::configureManagedEvents(::fwRuntime::ConfigurationElement::sptr configuration);
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-private:
-
-    /**
-     * @brief Retrieves the reconstruction object attached to the given message.
-     * @note The message must be of class ::fwComEd::ModelSeriesMsg.
-     */
-    SPTR(::fwData::Reconstruction) getReconstruction(::fwServices::ObjectMsg::csptr _msg);
-};
-
-} // updater
-} // ctrlSelection
-
-#endif // __CTRLSELECTION_RECONSTRUCTIONFROMMODELSERIESUPDATERSRV_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/STranslate.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/STranslate.hpp
new file mode 100644
index 0000000..0d7d7fd
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/STranslate.hpp
@@ -0,0 +1,112 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLSELECTION_UPDATER_STRANSLATE_HPP__
+#define __CTRLSELECTION_UPDATER_STRANSLATE_HPP__
+
+#include "ctrlSelection/IUpdaterSrv.hpp"
+#include "ctrlSelection/config.hpp"
+
+#include <fwData/Composite.hpp>
+
+namespace ctrlSelection
+{
+
+namespace updater
+{
+
+/**
+ * @brief   Update the composite related to this service according to the receiving composite signals and translate the
+ * composite keys.
+ */
+class CTRLSELECTION_CLASS_API STranslate : public ::ctrlSelection::IUpdaterSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (STranslate)(::ctrlSelection::IUpdaterSrv) );
+
+    /// Constructor.  Do nothing.
+    CTRLSELECTION_API STranslate() throw();
+
+    /// Destructor. Do nothing.
+    CTRLSELECTION_API virtual ~STranslate() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_ADD_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_CHANGE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_REMOVE_OBJECTS_SLOT
+     */
+    CTRLSELECTION_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
+
+    /// Implements starting method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
+
+    /// Implements stopping method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
+
+    /**
+     * @brief Configure the services : declare the events to react.
+     * @code{.xml}
+         <service uid="myUpdater" impl="::ctrlSelection::updater::STranslate" type="::ctrlSelection::IUpdaterSrv" autoConnect="no"  >
+            <source>compositeSrcUid</source>
+            <translate fromKey="myObject1Key1" toKey="myObject1Key2" />
+            <translate fromKey="myObject2Key1" toKey="myObject2Key2" />
+        </service>
+       @endcode
+     * - \b source (optional): composite used to translate objects. If it is defined, the service's slot saddObjects,
+     *      changeObjects, removeObjects are connected to composite signal,  and the objects are translated on start if
+     *      they are present.
+     * - \b translate: objects to translate from source composite to current composite
+     *   - \b fromKey: key of the object in the source composite
+     *   - \b toKey: key of the object in the current composite
+     */
+    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
+
+    /// Implements reconfiguring method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
+
+    /// Implements updating method derived from IService. Do nothing.
+    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Implements info method derived from IService. Print classname.
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
+
+private:
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects, ::fwData::Composite::ContainerType oldObjects);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
+
+    /// Managed translation : fromUID, fromKey, toKey
+    typedef std::map <std::string, std::string > ManagedTranslations;
+    /// List of the managed translations
+    ManagedTranslations m_managedTranslations;
+
+    /// FwID of the source composite.
+    std::string m_sourceCompositeID;
+
+    /// Source composite (can be current composite)
+    ::fwData::Composite::wptr m_source;
+
+    /// Connection to source
+    ::fwCom::helper::SigSlotConnection m_connections;
+};
+
+} // updater
+} // ctrlSelection
+
+#endif // __CTRLSELECTION_UPDATER_STRANSLATE_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/TranslateUpdater.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/TranslateUpdater.hpp
deleted file mode 100644
index 4308c5f..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/updater/TranslateUpdater.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_TRANSLATEUPDATER_HPP_
-#define _CTRLSELECTION_TRANSLATEUPDATER_HPP_
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-/**
- * @class   TranslateUpdater
- * @brief   Update the composite related to this service according to the receiving composite message and translate the composite keys.
- * 
- * @date    2011.
- */
-class CTRLSELECTION_CLASS_API TranslateUpdater : public ::ctrlSelection::IUpdaterSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (TranslateUpdater)(::ctrlSelection::IUpdaterSrv) ) ;
-
-    /// Constructor.  Do nothing.
-    CTRLSELECTION_API TranslateUpdater() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~TranslateUpdater() throw() ;
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configure the services : declare the events to react.
-     * @verbatim
-         <service uid="myUpdater" impl="::ctrlSelection::updater::TranslateUpdater" type="::ctrlSelection::IUpdaterSrv" autoConnect="no"  >
-            <translate fromKey="myObject1Key1" toKey="myObject1Key2" fromUID="myComposite" />
-            <translate fromKey="myObject2Key1" toKey="myObject2Key2" fromUID="myComposite" />
-        </service>
-      @endverbatim
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void reconfiguring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Do nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-private:
-
-    /// Managed translation : fromUID, fromKey, toKey
-    typedef std::vector < ::boost::tuple< std::string, std::string, std::string > > ManagedTranslations;
-    /// List of the managed translations
-    ManagedTranslations m_managedTranslations;
-};
-
-} // updater
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_TRANSLATEUPDATER_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/GraphWrapperSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/GraphWrapperSrv.hpp
deleted file mode 100644
index 918b153..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/GraphWrapperSrv.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_MANAGER_GRAPHWRAPPERSRV_HPP_
-#define _CTRLSELECTION_MANAGER_GRAPHWRAPPERSRV_HPP_
-
-#include <fwServices/IService.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IWrapperSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-
-/**
- * @class  GraphWrapperSrv
- * @brief  Convert generic message by specific message from Graph
- * 
-
- * @date   2007-2009.
- */
-class CTRLSELECTION_CLASS_API GraphWrapperSrv : public ::ctrlSelection::IWrapperSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (GraphWrapperSrv)(::ctrlSelection::IWrapperSrv) ) ;
-
-//    /// Constructor.  Do nothing.
-    CTRLSELECTION_API GraphWrapperSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~GraphWrapperSrv() throw();
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-   virtual void starting()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements stopping method derived from IService. Do nothing.
-    virtual void stopping()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements configuring method derived from IService. Do nothing.
-    virtual void configuring()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    virtual void reconfiguring()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements updating method derived from IService. Do nothing.
-    virtual void updating() throw ( ::fwTools::Failed ) {};
-
-    /// Implements info method derived from IService. Print classname.
-    virtual void info( std::ostream &_sstream ) {};
-
-    /**
-     * @brief Convert the Object message with "UPDATED_OBJECT" event sent on Graph by GraphMsg with "NEW_GRAPH" event
-     */
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-
-};
-
-} // wrapper
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_MANAGER_MEDICALIMAGEMANAGERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/ImageWrapperSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/ImageWrapperSrv.hpp
deleted file mode 100644
index 304e895..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/ImageWrapperSrv.hpp
+++ /dev/null
@@ -1,72 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_MANAGER_GRAPHWRAPPERSRV_HPP_
-#define _CTRLSELECTION_MANAGER_GRAPHWRAPPERSRV_HPP_
-
-#include <fwServices/IService.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IWrapperSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-
-/**
- * @class  ImageWrapperSrv
- * @brief  Convert generic message by specific message from Image
- * 
-
- * @date   2007-2009.
- */
-class CTRLSELECTION_CLASS_API ImageWrapperSrv : public ::ctrlSelection::IWrapperSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ImageWrapperSrv)(::ctrlSelection::IWrapperSrv) ) ;
-
-//    /// Constructor.  Do nothing.
-    CTRLSELECTION_API ImageWrapperSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~ImageWrapperSrv() throw();
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-   virtual void starting()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements stopping method derived from IService. Do nothing.
-    virtual void stopping()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements configuring method derived from IService. Do nothing.
-    virtual void configuring()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    virtual void reconfiguring()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements updating method derived from IService. Do nothing.
-    virtual void updating() throw ( ::fwTools::Failed ) {};
-
-    /// Implements info method derived from IService. Print classname.
-    virtual void info( std::ostream &_sstream ) {};
-
-    /**
-     * @brief Convert the Object message with "UPDATED_OBJECT" event sent on Graph by GraphMsg with "NEW_GRAPH" event
-     */
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-
-};
-
-} // wrapper
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_MANAGER_MEDICALIMAGEMANAGERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/MsgForwarderSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/MsgForwarderSrv.hpp
deleted file mode 100644
index 39ea92d..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/MsgForwarderSrv.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_MSGFORWARDERSRV_HPP_
-#define _CTRLSELECTION_MSGFORWARDERSRV_HPP_
-
-#include <boost/tuple/tuple.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/IController.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IWrapperSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-/**
- * @class  MsgForwarderSrv
- * @brief  This service forwards an event from specific object to object specified with key in in composite.
- * 
-
- * @date   2011.
- */
-class CTRLSELECTION_CLASS_API MsgForwarderSrv : public ::ctrlSelection::IWrapperSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (MsgForwarderSrv)(::ctrlSelection::IWrapperSrv) ) ;
-
-    CTRLSELECTION_API MsgForwarderSrv() throw() ;
-
-    CTRLSELECTION_API virtual ~MsgForwarderSrv() throw() ;
-
-protected:
-
-    /// Implements starting method derived from IService. Does nothing.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Implements stopping method derived from IService. Does nothing.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /// Implements swapping method derived from IService. Convert the image.
-    CTRLSELECTION_API virtual void swapping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configures the service.
-     *
-     * @verbatim
-       <service uid="forwarderMsg" impl="::ctrlSelection::wrapper::MsgForwarderSrv" type="::ctrlSelection::IWrapperSrv" autoConnect="no">
-           <forward compositeKey="frontImage" onEvent="SLICE_INDEX" fromUID="*" msgType="::fwComEd::ImageMsg" />
-           <forward compositeKey="frontImage" onEvent="CHANGE_SLICE_TYPE" fromUID="*" msgType="::fwComEd::ImageMsg" />
-       </service>
-       @endverbatim
-     * With :
-     * - \b compositeKey : key of the object in the composite,
-     * - \b onEvent : event of the message to receive,
-     * - \b fromUID : uid of the object which sent the message. If "*" the message can be received from any object,
-     * - \b msgType : type of the message to receive.
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements updating method derived from IService. Does nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-private :
-
-    typedef ::boost::tuple< std::string, std::string, std::string, std::string > EventType;
-    typedef std::vector < EventType > ManagedEventsType;
-
-    /// List of the managed event
-    ManagedEventsType m_managedEvents;
-};
-
-} // wrapper
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_MSGFORWARDERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/MsgWrapperSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/MsgWrapperSrv.hpp
deleted file mode 100644
index eaf0886..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/MsgWrapperSrv.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_MANAGER_MSGWRAPPERSRV_HPP_
-#define _CTRLSELECTION_MANAGER_MSGWRAPPERSRV_HPP_
-
-#include <fwServices/IService.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IWrapperSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-
-/**
- * @class  MsgWrapperSrv
- * @brief  Convert generic message by specific message
- * 
-
- * @date   2007-2009.
- */
-class CTRLSELECTION_CLASS_API MsgWrapperSrv : public ::ctrlSelection::IWrapperSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (MsgWrapperSrv)(::ctrlSelection::IWrapperSrv) ) ;
-
-//    /// Constructor.  Do nothing.
-    CTRLSELECTION_API MsgWrapperSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    CTRLSELECTION_API virtual ~MsgWrapperSrv() throw();
-
-protected:
-
-    /// Implements starting method derived from IService. Do nothing.
-   virtual void starting()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements stopping method derived from IService. Do nothing.
-    virtual void stopping()  throw ( ::fwTools::Failed ) {};
-
-    /**
-     * Convert message with event by a specific message with another event and type.
-     *
-     * @verbatim
-     <wrapper onEvent="UPDATED_OBJECT" toEvent="NEW_IMAGE" toMsgType="::fwComEd::ImageMsg" />
-     @endverbatim
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Implements reconfiguring method derived from IService. Do nothing.
-    virtual void reconfiguring()  throw ( ::fwTools::Failed ) {};
-
-    /// Implements updating method derived from IService. Do nothing.
-    virtual void updating() throw ( ::fwTools::Failed ) {};
-
-    /// Implements info method derived from IService. Print classname.
-    virtual void info( std::ostream &_sstream ) {};
-
-    /// Convert message with event by a specific message with another event and type.
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    // < onEvent, toEvent, msgType >
-    typedef ::boost::tuple< std::string, std::string, std::string > EventType;
-    typedef std::vector < EventType > ManagedEventsType;
-    ManagedEventsType m_managedEvents;
-};
-
-} // wrapper
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_MANAGER_MSGWRAPPERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/Namespace.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/Namespace.hpp
deleted file mode 100644
index 955d9fd..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef CTRLSELECTIONWRAPPERNAMESPACE_HPP_
-#define CTRLSELECTIONWRAPPERNAMESPACE_HPP_
-
-namespace ctrlSelection
-{
-/**
- * @brief      The namespace ctrlSelection::wrapper contains the wrapper services.
- * @namespace  ctrlSelection::wrapper
- * 
- * @date       2009-2010.
- *
- */
-namespace wrapper
-{
-
-}
-}
-#endif /* CTRLSELECTIONWRAPPERNAMESPACE_HPP_ */
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.hpp
deleted file mode 100644
index a329741..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.hpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _CTRLSELECTION_COMPOSITEMSGFORWARDERSRV_HPP_
-#define _CTRLSELECTION_COMPOSITEMSGFORWARDERSRV_HPP_
-
-#include <boost/tuple/tuple.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/IController.hpp>
-
-#include "ctrlSelection/config.hpp"
-#include "ctrlSelection/IWrapperSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-/**
- * @class  ObjToCompositeMsgForwarderSrv
- * @brief  This service forwards an event from all objects of composite to the composite .
- * 
-
- * @date   2011.
- */
-class CTRLSELECTION_CLASS_API ObjToCompositeMsgForwarderSrv : public ::ctrlSelection::IWrapperSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ObjToCompositeMsgForwarderSrv)(::ctrlSelection::IWrapperSrv) ) ;
-
-
-    CTRLSELECTION_API ObjToCompositeMsgForwarderSrv() throw() ;
-
-    CTRLSELECTION_API virtual ~ObjToCompositeMsgForwarderSrv() throw() ;
-
-protected:
-
-    /// Creates connections to receives signals from all the objects of the composite.
-    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
-
-    /// Removes all the object connections.
-    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
-
-    /// Does nothing.
-    CTRLSELECTION_API virtual void swapping()  throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Configures the service.
-     *
-     * @verbatim
-     <forward fromKey="objKey" onEvent="UPDATED_OBJECT" msgType="::fwComEd::ImageMsg" />
-     @endverbatim
-     * With this configuration : message with event "UPDATED_OBJECT" received from oject with key objKey" are
-     * forwarded to the composite. New message of type ::fwComEd::ImageMsg will be created and sent to the composite.
-     *
-     * @note fromKey attibute can be "*", so the message can be received from any object.
-     */
-    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
-
-    /// Does nothing.
-    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
-
-    /// Implements info method derived from IService. Print classname.
-    CTRLSELECTION_API virtual void info( std::ostream &_sstream );
-
-    CTRLSELECTION_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-private :
-
-    // < fromKey, onEvent, msgType >
-    typedef ::boost::tuple< std::string, std::string, std::string > EventType;
-    typedef std::vector < EventType > ManagedEventsType;
-
-    typedef std::map< std::string, ::fwCom::Connection > ObjConnectionMap;
-    /// Map to register objects connections
-    ObjConnectionMap m_objConnections;
-    /// List of the managed event
-    ManagedEventsType m_managedEvents;
-};
-
-} // wrapper
-} // ctrlSelection
-
-#endif // _CTRLSELECTION_COMPOSITEMSGFORWARDERSRV_HPP_
diff --git a/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/SImageSignalForwarder.hpp b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/SImageSignalForwarder.hpp
new file mode 100644
index 0000000..a116d08
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/include/ctrlSelection/wrapper/SImageSignalForwarder.hpp
@@ -0,0 +1,126 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __CTRLSELECTION_WRAPPER_SIMAGESIGNALFORWARDER_HPP__
+#define __CTRLSELECTION_WRAPPER_SIMAGESIGNALFORWARDER_HPP__
+
+#include "ctrlSelection/IWrapperSrv.hpp"
+#include "ctrlSelection/config.hpp"
+
+#include <fwData/Object.hpp>
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+
+#include <fwServices/IService.hpp>
+
+
+namespace ctrlSelection
+{
+
+namespace wrapper
+{
+/**
+ * @brief  This service forwards signals from an image ti another.
+ *
+ * @section Slots Slots
+ * - \b forwardModified() : emit the signal 'modified' on the target image
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <service type="::ctrlSelection::wrapper::SImageSignalForwarder">
+       <in key="target" uid="..." />
+       <in key="source" uid="..." />
+       <forward>modified</forward>
+       <forward>bufferModified</forward>
+   </service>
+   @endcode
+ * @subsection Input Input
+ * - \b target [::fwData::Image]: image to forward signal.
+ * - \b source [::fwData::Image]: the source image signals are forwarded to the target image.
+ * @subsection Configuration Configuration
+ * - \b forward : key of the image signal to forward
+ */
+class CTRLSELECTION_CLASS_API SImageSignalForwarder : public ::ctrlSelection::IWrapperSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SImageSignalForwarder)(::ctrlSelection::IWrapperSrv) );
+
+    CTRLSELECTION_API SImageSignalForwarder() throw();
+
+    CTRLSELECTION_API virtual ~SImageSignalForwarder() throw();
+
+protected:
+
+    /// Implements starting method derived from IService. Does nothing.
+    CTRLSELECTION_API virtual void starting()  throw ( ::fwTools::Failed );
+
+    /// Implements stopping method derived from IService. Does nothing.
+    CTRLSELECTION_API virtual void stopping()  throw ( ::fwTools::Failed );
+
+    /// Implements swapping method derived from IService. Convert the image.
+    CTRLSELECTION_API virtual void swapping()  throw ( ::fwTools::Failed );
+
+    /**
+     * @brief Configures the service.
+     */
+    CTRLSELECTION_API virtual void configuring()  throw ( ::fwTools::Failed );
+
+    /// Implements updating method derived from IService. Does nothing.
+    CTRLSELECTION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Implements info method derived from IService. Print classname.
+    CTRLSELECTION_API virtual void info( std::ostream& _sstream );
+
+private:
+
+    /**
+     * @name Slots
+     * The slots are automatically connected to the source image on the respective signal.
+     * The corresponding signal is emitted on the current image when the slot is called.
+     * @{
+     */
+    void forwardModified();
+    void forwardBufferModified();
+    void forwardLandmarkAdded(SPTR(::fwData::Point) point);
+    void forwardLandmarkRemoved(SPTR(::fwData::Point) point);
+    void forwardLandmarkDisplayed(bool display);
+    void forwardDistanceAdded(SPTR(::fwData::PointList) pointList);
+    void forwardDistanceRemoved(SPTR(::fwData::PointList) pointList);
+    void forwardDistanceDisplayed(bool display);
+    void forwardSliceIndexModified(int axial, int frontal, int sagittal);
+    void forwardSliceTypeModified(int from, int to);
+    void forwardVisibilityModified(bool visibility);
+    void forwardTransparencyModified();
+    void forwardAddedFields(::fwData::Object::FieldsContainerType objects);
+    void forwardChangedFields(::fwData::Object::FieldsContainerType newObjects,
+                              ::fwData::Object::FieldsContainerType oldObjects);
+    void forwardRemovedFields(::fwData::Object::FieldsContainerType objects);
+    /**
+     * @}
+     */
+
+    /// store connection from source image to this service.
+    ::fwCom::helper::SigSlotConnection m_connections;
+
+    std::string m_sourceImageUid; ///< fwID of the source image;
+    std::string m_sourceCompoUid; ///< fwID of the composite containing the source image
+    std::string m_sourceImageKey; ///< Key of the source image
+
+
+    typedef std::vector<std::string> SignalKeysType;
+    SignalKeysType m_managedSignals; ///< contains  the key of the signals to manage
+
+    typedef std::map< std::string, std::string > AvailableConnectionMapType;
+    static AvailableConnectionMapType m_availableConnection; ///< store the available connection from source image.
+};
+
+} // wrapper
+} // ctrlSelection
+
+#endif // __CTRLSELECTION_WRAPPER_SIMAGESIGNALFORWARDER_HPP__
diff --git a/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml b/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml
index 8dfc09f..a690151 100644
--- a/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml
+++ b/Bundles/LeafCtrl/ctrlSelection/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ctrlSelection" class="::ctrlSelection::Plugin" >
+<plugin id="ctrlSelection" class="::ctrlSelection::Plugin"  version="@DASH_VERSION@" >
 
     <library name="ctrlSelection" />
 
@@ -7,31 +7,13 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::ctrlSelection::IUpdaterSrv</type>
-        <service>::ctrlSelection::updater::SReconstructionFromModelSeriesUpdater</service>
-        <object>::fwData::Composite</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IUpdaterSrv</type>
-        <service>::ctrlSelection::updater::ReconstructionFromResecUpdaterSrv</service>
-        <object>::fwData::Composite</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IUpdaterSrv</type>
         <service>::ctrlSelection::updater::ObjFromMsgUpdaterSrv</service>
         <object>::fwData::Composite</object>
     </extension>
 
-   <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IUpdaterSrv</type>
-        <service>::ctrlSelection::updater::DataInfoFromMsgUpdaterSrv</service>
-        <object>::fwData::Composite</object>
-    </extension>
-
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::ctrlSelection::IUpdaterSrv</type>
-        <service>::ctrlSelection::updater::TranslateUpdater</service>
+        <service>::ctrlSelection::updater::STranslate</service>
         <object>::fwData::Composite</object>
     </extension>
 
@@ -73,37 +55,25 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::ctrlSelection::IWrapperSrv</type>
-        <service>::ctrlSelection::wrapper::GraphWrapperSrv</service>
-        <object>::fwData::Graph</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IWrapperSrv</type>
-        <service>::ctrlSelection::wrapper::ImageWrapperSrv</service>
+        <service>::ctrlSelection::wrapper::SImageSignalForwarder</service>
         <object>::fwData::Image</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IWrapperSrv</type>
-        <service>::ctrlSelection::wrapper::MsgForwarderSrv</service>
+        <type>::ctrlSelection::IUpdaterSrv</type>
+        <service>::ctrlSelection::updater::SDrop</service>
         <object>::fwData::Composite</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IWrapperSrv</type>
-        <service>::ctrlSelection::wrapper::ObjToCompositeMsgForwarderSrv</service>
+        <type>::ctrlSelection::IUpdaterSrv</type>
+        <service>::ctrlSelection::updater::SObjFromSlot</service>
         <object>::fwData::Composite</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::ctrlSelection::IWrapperSrv</type>
-        <service>::ctrlSelection::wrapper::MsgWrapperSrv</service>
-        <object>::fwData::Object</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
         <type>::ctrlSelection::IUpdaterSrv</type>
-        <service>::ctrlSelection::updater::SDrop</service>
+        <service>::ctrlSelection::updater::SObjFromUid</service>
         <object>::fwData::Composite</object>
     </extension>
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/BookmarkSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/BookmarkSrv.cpp
index 1562532..c890a4e 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/BookmarkSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/BookmarkSrv.cpp
@@ -1,26 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwTools/Bookmarks.hpp>
+#include "ctrlSelection/BookmarkSrv.hpp"
 
 #include <fwData/String.hpp>
-
 #include <fwServices/macros.hpp>
-
-#include "ctrlSelection/BookmarkSrv.hpp"
-
+#include <fwTools/Bookmarks.hpp>
 
 namespace ctrlSelection
 {
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::BookmarkSrv, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::BookmarkSrv, ::fwData::Object );
 
 //-----------------------------------------------------------------------------
 
@@ -32,14 +27,16 @@ BookmarkSrv::BookmarkSrv() throw()
 //-----------------------------------------------------------------------------
 
 BookmarkSrv::~BookmarkSrv() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void BookmarkSrv::configuring()  throw ( ::fwTools::Failed )
 {
     ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("bookmark");
-    SLM_ASSERT("Problem with configuration for BookmarkSrv type, one element \"bookmark\" must be present", m_configuration->findAllConfigurationElement("bookmark").size() == 1 );
+    SLM_ASSERT("Problem with configuration for BookmarkSrv type, one element \"bookmark\" must be present", m_configuration->findAllConfigurationElement(
+                   "bookmark").size() == 1 );
 
     m_bookmarkName = "";
 
@@ -65,7 +62,7 @@ void BookmarkSrv::configuring()  throw ( ::fwTools::Failed )
 
 void BookmarkSrv::starting()  throw ( ::fwTools::Failed )
 {
-    ::fwTools::Bookmarks::add( m_bookmarkName , this->getObject());
+    ::fwTools::Bookmarks::add( m_bookmarkName, this->getObject());
 }
 
 //-----------------------------------------------------------------------------
@@ -82,27 +79,26 @@ void BookmarkSrv::stopping()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void BookmarkSrv::swapping()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void BookmarkSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void BookmarkSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void BookmarkSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void BookmarkSrv::info( std::ostream &_sstream )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IManagerSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IManagerSrv.cpp
index c541c9d..cd7a5eb 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IManagerSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IManagerSrv.cpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/regex.hpp>
+#include "ctrlSelection/IManagerSrv.hpp"
 
+#include <fwServices/helper/Config.hpp>
 #include <fwServices/registry/Proxy.hpp>
 
-#include "ctrlSelection/IManagerSrv.hpp"
+#include <boost/regex.hpp>
 
 namespace ctrlSelection
 {
@@ -16,12 +17,14 @@ namespace ctrlSelection
 //-----------------------------------------------------------------------------
 
 IManagerSrv::IManagerSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IManagerSrv::~IManagerSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -33,9 +36,10 @@ void IManagerSrv::swapping() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void IManagerSrv::manageConnections(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config)
+void IManagerSrv::manageConnections(const std::string& objectId, ::fwData::Object::sptr object,
+                                    ConfigurationType config)
 {
-    BOOST_FOREACH(ConfigurationType connectCfg, config->find("connect"))
+    for(ConfigurationType connectCfg :  config->find("connect"))
     {
         this->manageConnection(objectId, object, connectCfg);
     }
@@ -43,189 +47,39 @@ void IManagerSrv::manageConnections(const std::string &objectId, ::fwData::Objec
 
 //-----------------------------------------------------------------------------
 
-void IManagerSrv::manageConnection(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config)
+void IManagerSrv::manageConnection(const std::string& objectId, ::fwData::Object::sptr object, ConfigurationType config)
 {
-    typedef std::pair< std::string, ::fwCom::Signals::SignalKeyType > SignalInfoType;
-    typedef std::pair< std::string, ::fwCom::Slots::SlotKeyType > SlotInfoType;
-    typedef std::vector< SlotInfoType > SlotInfoContainerType;
-
-    SignalInfoType signalInfo;
-    SlotInfoContainerType slotInfos;
-
-    ::boost::regex re("(.*)/(.*)");
-    ::boost::smatch match;
-    std::string src, uid, key;
-
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem,  config->getElements())
-    {
-        SLM_ASSERT("Bad tag '" <<elem->getName() << "', only <signal> or <slot> are allowed.",
-                   elem->getName() == "signal" || elem->getName() == "slot");
-
-        src = elem->getValue();
-        if( ::boost::regex_match(src, match, re) )
-        {
-            OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
-            uid.assign(match[1].first, match[1].second);
-            key.assign(match[2].first, match[2].second);
-
-            OSLM_ASSERT(src << " configuration is not correct for "<< elem->getName() ,
-                        !uid.empty() && !key.empty());
-
-            if (elem->getName() == "signal")
-            {
-                SLM_ASSERT("There must be only one signal by connection",
-                           signalInfo.first.empty() && signalInfo.second.empty());
-                signalInfo = std::make_pair(uid, key);
-            }
-            else if (elem->getName() == "slot")
-            {
-                slotInfos.push_back( std::make_pair(uid, key) );
-            }
-        }
-        else
-        {
-            uid = object->getID();
-            key = src;
-            SLM_ASSERT("Element must be a signal or must be written as <fwID/Key>", elem->getName() == "signal");
-            SLM_ASSERT("There must be only one signal by connection",
-                       signalInfo.first.empty() && signalInfo.second.empty());
-            signalInfo = std::make_pair(uid, key);
-        }
-    }
-
-    ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(signalInfo.first);
-    ::fwCom::HasSignals::sptr hasSignals = ::boost::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
-
-    ::fwServices::helper::SigSlotConnection::sptr connection;
-    ObjectConnectionsMapType::iterator iter = m_objectConnections.find(objectId);
-    if (iter != m_objectConnections.end())
-    {
-        connection = iter->second;
-    }
-    else
-    {
-        connection = ::fwServices::helper::SigSlotConnection::New();
-        m_objectConnections[objectId] = connection;
-    }
-
-    BOOST_FOREACH(SlotInfoType slotInfo,  slotInfos)
-    {
-        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(slotInfo.first);
-        ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
-
-        connection->connect(hasSignals, signalInfo.second, hasSlots, slotInfo.second);
-    }
+    ::fwServices::helper::Config::createConnections(config, m_objectConnections[objectId], object);
 }
 
 //-----------------------------------------------------------------------------
 
-void IManagerSrv::removeConnections(const std::string &objectId)
+void IManagerSrv::removeConnections(const std::string& objectId)
 {
     ObjectConnectionsMapType::iterator iter = m_objectConnections.find(objectId);
     if (iter != m_objectConnections.end())
     {
-        ::fwServices::helper::SigSlotConnection::sptr connection = iter->second;
-        connection->disconnect();
+        ::fwCom::helper::SigSlotConnection& connection = iter->second;
+        connection.disconnect();
     }
     m_objectConnections.erase(objectId);
 }
 
 //-----------------------------------------------------------------------------
 
-void IManagerSrv::manageProxies(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config)
-{
-    BOOST_FOREACH(ConfigurationType proxyCfg, config->find("proxy"))
-    {
-        this->manageProxy(objectId, object, proxyCfg);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void IManagerSrv::manageProxy(const std::string &objectId, ::fwData::Object::sptr object, ConfigurationType config)
+void IManagerSrv::manageProxies(const std::string& objectId, ::fwData::Object::sptr object, ConfigurationType config)
 {
-    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
-
-    SLM_ASSERT("Missing 'channel' attribute", config->hasAttribute("channel"));
-    const std::string channel = config->getExistingAttributeValue("channel");
-    ProxyConnections proxyCnt(channel);
-
-    ::boost::regex re("(.*)/(.*)");
-    ::boost::smatch match;
-    std::string src, uid, key;
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem,  config->getElements())
+    for(ConfigurationType proxyCfg :  config->find("proxy"))
     {
-        src = elem->getValue();
-        if( ::boost::regex_match(src, match, re) )
-        {
-            OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
-            uid.assign(match[1].first, match[1].second);
-            key.assign(match[2].first, match[2].second);
-
-            OSLM_ASSERT(src << " configuration is not correct for "<< elem->getName() ,
-                        !uid.empty() && !key.empty());
-
-            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(uid);
-
-            if (elem->getName() == "signal")
-            {
-                ::fwCom::HasSignals::sptr hasSignals = ::boost::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
-                ::fwCom::SignalBase::sptr sig = hasSignals->signal(key);
-                proxy->connect(channel, sig);
-                proxyCnt.addSignalConnection(uid, key);
-            }
-            else if (elem->getName() == "slot")
-            {
-                ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
-                ::fwCom::SlotBase::sptr slot = hasSlots->slot(key);
-                proxy->connect(channel, slot);
-                proxyCnt.addSlotConnection(uid, key);
-            }
-        }
-        else
-        {
-            uid = object->getID();
-            key = src;
-            SLM_ASSERT("Element must be a signal or must be written as <fwID/Key>", elem->getName() == "signal");
-            ::fwCom::SignalBase::sptr sig = object->signal(key);
-            proxy->connect(channel, sig);
-            proxyCnt.addSignalConnection(uid, key);
-        }
+        ::fwServices::helper::Config::createProxy(objectId, proxyCfg, m_proxyCtns, object);
     }
-    m_proxyCtns[objectId].push_back(proxyCnt);
 }
 
 //-----------------------------------------------------------------------------
 
-void IManagerSrv::disconnectProxies(const std::string &objectId)
+void IManagerSrv::disconnectProxies(const std::string& objectId)
 {
-    ProxyConnectionsMapType::iterator iter = m_proxyCtns.find(objectId);
-    if (iter != m_proxyCtns.end())
-    {
-        ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
-
-        ProxyConnectionsVectType vectProxyConnections = iter->second;
-
-        BOOST_FOREACH(ProxyConnectionsVectType::value_type proxyConnections,  vectProxyConnections)
-        {
-            BOOST_FOREACH(ProxyConnections::ProxyEltType signalElt, proxyConnections.m_signals)
-            {
-                ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(signalElt.first);
-                ::fwCom::HasSignals::sptr hasSignals = ::boost::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
-                ::fwCom::SignalBase::sptr sig = hasSignals->signal(signalElt.second);
-                proxy->disconnect(proxyConnections.m_channel, sig);
-            }
-            BOOST_FOREACH(ProxyConnections::ProxyEltType slotElt, proxyConnections.m_slots)
-            {
-                ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(slotElt.first);
-                ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
-                ::fwCom::SlotBase::sptr slot = hasSlots->slot(slotElt.second);
-                proxy->disconnect(proxyConnections.m_channel, slot);
-            }
-        }
-        vectProxyConnections.clear();
-    }
-    m_proxyCtns.erase(objectId);
+    ::fwServices::helper::Config::disconnectProxies(objectId, m_proxyCtns);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IUpdaterSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IUpdaterSrv.cpp
index 992cc44..4cda7f7 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IUpdaterSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IUpdaterSrv.cpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwTools/fwID.hpp>
+#include "ctrlSelection/IUpdaterSrv.hpp"
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/helper/Composite.hpp>
+#include <fwDataTools/helper/Composite.hpp>
 
-#include "ctrlSelection/IUpdaterSrv.hpp"
+#include <fwTools/fwID.hpp>
 
 namespace ctrlSelection
 {
@@ -17,12 +16,14 @@ namespace ctrlSelection
 //-----------------------------------------------------------------------------
 
 IUpdaterSrv::IUpdaterSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IUpdaterSrv::~IUpdaterSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -32,39 +33,63 @@ void IUpdaterSrv::configureManagedEvents(::fwRuntime::ConfigurationElement::sptr
 
     ::fwRuntime::ConfigurationElementContainer handleEvents = configuration->findAllConfigurationElement("update");
 
-    SLM_ASSERT("Problem with configuration for ObjFromMsgUpdaterSrv type, missing element \"update\"", handleEvents.size() != 0 );
+    SLM_ASSERT("Problem with configuration for ObjFromMsgUpdaterSrv type, missing element \"update\"",
+               handleEvents.size() != 0 );
     OSLM_DEBUG( "handleEvents.size() = " << handleEvents.size() );
     m_managedEvents.clear();
     for(    ::fwRuntime::ConfigurationElementContainer::Iterator item = handleEvents.begin();
             item != handleEvents.end();
             ++item )
     {
-        SLM_FATAL_IF( "Sorry, attribute \"compositeKey\" is missing", !(*item)->hasAttribute("compositeKey") );
-        std::string compositeKey =  (*item)->getExistingAttributeValue("compositeKey");
+        SLM_FATAL_IF( "The attribute \"compositeKey\" is missing", !(*item)->hasAttribute("compositeKey") );
+        std::string compositeKey = (*item)->getExistingAttributeValue("compositeKey");
 
-        SLM_FATAL_IF( "Sorry, attribute \"onEvent\" is missing", !(*item)->hasAttribute("onEvent") );
-        std::string onEvent =  (*item)->getExistingAttributeValue("onEvent");
+        SLM_FATAL_IF( "The attribute \"onEvent\" is missing", !(*item)->hasAttribute("onEvent") );
+        std::string onEvent = (*item)->getExistingAttributeValue("onEvent");
 
-        SLM_FATAL_IF( "Sorry, attribute \"fromUID\" is missing", !(*item)->hasAttribute("fromUID") );
-        std::string fromUID =  (*item)->getExistingAttributeValue("fromUID");
+        SLM_FATAL_IF( "The attribute \"fromUID\" is missing", !(*item)->hasAttribute("fromUID") );
+        std::string fromUID = (*item)->getExistingAttributeValue("fromUID");
 
-        SLM_FATAL_IF( "Sorry, attribute \"actionType\" is missing", !(*item)->hasAttribute("actionType") );
-        std::string actionType =  (*item)->getExistingAttributeValue("actionType");
+        SLM_FATAL_IF( "The attribute \"actionType\" is missing, the actionType must be ADD, ADD_OR_SWAP, SWAP, REMOVE,"
+                      "REMOVE_IF_PRESENT or DO_NOTHING", !(*item)->hasAttribute("actionType") );
+        std::string actionType = (*item)->getExistingAttributeValue("actionType");
 
         ActionType action;
-        if ( actionType == "ADD" )                    { action = ADD; }
-        else if ( actionType == "SWAP" )              { action = SWAP; }
-        else if ( actionType == "REMOVE" )            { action = REMOVE; }
-        else if ( actionType == "ADD_OR_SWAP" )       { action = ADD_OR_SWAP; }
-        else if ( actionType == "REMOVE_IF_PRESENT" ) { action = REMOVE_IF_PRESENT; }
-        else if ( actionType == "DO_NOTHING" )        { action = DO_NOTHING; }
+        if ( actionType == "ADD" )
+        {
+            action = ADD;
+        }
+        else if ( actionType == "SWAP" )
+        {
+            action = SWAP;
+        }
+        else if ( actionType == "REMOVE" )
+        {
+            action = REMOVE;
+        }
+        else if ( actionType == "ADD_OR_SWAP" )
+        {
+            action = ADD_OR_SWAP;
+        }
+        else if ( actionType == "REMOVE_IF_PRESENT" )
+        {
+            action = REMOVE_IF_PRESENT;
+        }
+        else if ( actionType == "DO_NOTHING" )
+        {
+            action = DO_NOTHING;
+        }
         else
         {
-            SLM_FATAL("Sorry this type of \"actionType\" is not managed by ObjFromMsgUpdaterSrv type");
+            SLM_FATAL("This type of \"actionType\" is not managed by ObjFromMsgUpdaterSrv type, The actionType"
+                      "should be  ADD, ADD_OR_SWAP, SWAP, REMOVE, REMOVE_IF_PRESENT and DO_NOTHING");
         }
 
-        OSLM_INFO( "Manage event "<< onEvent <<" from this object "<< fromUID <<" and "<< actionType << " "<< compositeKey <<" in my composite.");
-        ::boost::tuple< std::string, std::string, std::string, ActionType > managedEvent (onEvent, fromUID, compositeKey, action);
+        OSLM_INFO(
+            "Manage event "<< onEvent <<" from this object "<< fromUID <<" and "<< actionType << " "<< compositeKey <<
+            " in my composite.");
+        ::boost::tuple< std::string, std::string, std::string, ActionType > managedEvent (onEvent, fromUID,
+                                                                                          compositeKey, action);
         m_managedEvents.push_back( managedEvent );
         //addNewHandledEvent( onEvent );
     }
@@ -72,7 +97,8 @@ void IUpdaterSrv::configureManagedEvents(::fwRuntime::ConfigurationElement::sptr
 
 //-----------------------------------------------------------------------------
 
-void IUpdaterSrv::updateComposite(::fwData::Composite::sptr pComposite, ::fwData::Object::sptr _obj, std::string _compositeKey, ActionType _action )
+void IUpdaterSrv::updateComposite(::fwData::Composite::sptr pComposite, ::fwData::Object::sptr _obj,
+                                  std::string _compositeKey, ActionType _action )
 {
 
     // Manage special action
@@ -100,36 +126,37 @@ void IUpdaterSrv::updateComposite(::fwData::Composite::sptr pComposite, ::fwData
     }
 
     // Use helper on composite
-    ::boost::shared_ptr< ::fwComEd::helper::Composite > pCompositeHelper ( new ::fwComEd::helper::Composite( pComposite ) );
+    std::shared_ptr< ::fwDataTools::helper::Composite > pCompositeHelper ( new ::fwDataTools::helper::Composite(
+                                                                               pComposite ) );
 
     if(_action != DO_NOTHING)
     {
         switch ( _action )
         {
-        case REMOVE :
-        {
-            pCompositeHelper->remove(_compositeKey);
-            break;
-        }
-        case SWAP :
-        {
-            pCompositeHelper->swap(_compositeKey,_obj);
-            break;
-        }
-        case ADD :
-        {
-            pCompositeHelper->add(_compositeKey,_obj);
-            break;
-        }
-        default :
-        {
-            SLM_FATAL("Sorry, this action type is not managed");
-            break;
-        }
+            case REMOVE:
+            {
+                pCompositeHelper->remove(_compositeKey);
+                break;
+            }
+            case SWAP:
+            {
+                pCompositeHelper->swap(_compositeKey,_obj);
+                break;
+            }
+            case ADD:
+            {
+                pCompositeHelper->add(_compositeKey,_obj);
+                break;
+            }
+            default:
+            {
+                SLM_FATAL("This action type is not managed");
+                break;
+            }
         }
 
         // Notification of message
-        pCompositeHelper->notify( this->getSptr() );
+        pCompositeHelper->notify();
     }
     else
     {
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IWrapperSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IWrapperSrv.cpp
index a779e6a..bff48ba 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IWrapperSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/IWrapperSrv.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,12 +12,14 @@ namespace ctrlSelection
 //-----------------------------------------------------------------------------
 
 IWrapperSrv::IWrapperSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IWrapperSrv::~IWrapperSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/ImageUpdateAxis.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/ImageUpdateAxis.cpp
index 035abb4..e8187bb 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/ImageUpdateAxis.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/ImageUpdateAxis.cpp
@@ -1,70 +1,57 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/algorithm/string/trim.hpp>
-#include <boost/algorithm/string/case_conv.hpp>
+#include "ctrlSelection/ImageUpdateAxis.hpp"
 
-#include <fwServices/macros.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwData/Image.hpp>
 #include <fwData/Float.hpp>
+#include <fwData/Image.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/FloatMsg.hpp>
-
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
-#include "ctrlSelection/ImageUpdateAxis.hpp"
+#include <boost/algorithm/string/case_conv.hpp>
+#include <boost/algorithm/string/trim.hpp>
 
 namespace ctrlSelection
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT = "updateSliceType";
+
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::ImageUpdateAxis, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::ImageUpdateAxis, ::fwData::Image );
 
 //-----------------------------------------------------------------------------
 
 ImageUpdateAxis::ImageUpdateAxis() throw()
 {
-    //handlingEventOff ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
 }
 
 //-----------------------------------------------------------------------------
 
 ImageUpdateAxis::~ImageUpdateAxis() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void ImageUpdateAxis::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
+void ImageUpdateAxis::updateSliceType(int from, int to)
 {
-    SLM_TRACE_FUNC();
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast(message);
-    if (imageMsg && imageMsg->hasEvent(::fwComEd::ImageMsg::CHANGE_SLICE_TYPE))
+    if( to == static_cast< int > ( m_orientation ) )
+    {
+        m_orientation =
+            static_cast< ::fwDataTools::helper::MedicalImageAdaptor::Orientation > ( from );
+    }
+    else if(from == static_cast<int>(m_orientation))
     {
-        ::fwData::Object::csptr cObjInfo = imageMsg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-        ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-        ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-        ::fwData::Integer::sptr fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] );
-        ::fwData::Integer::sptr toSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] );
-
-        if( toSliceType->value() == static_cast< int > ( m_orientation ) )
-        {
-            m_orientation = static_cast< ::fwComEd::helper::MedicalImageAdaptor::Orientation > ( fromSliceType->value() );
-        }
-        else if(fromSliceType->value() == static_cast<int>(m_orientation))
-        {
-            m_orientation = static_cast< ::fwComEd::helper::MedicalImageAdaptor::Orientation >( toSliceType->value() );
-        }
-
-        this->updating();
+        m_orientation = static_cast< ::fwDataTools::helper::MedicalImageAdaptor::Orientation >( to );
     }
+    this->updating();
 }
 
 //-----------------------------------------------------------------------------
@@ -77,39 +64,44 @@ void ImageUpdateAxis::starting()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void ImageUpdateAxis::stopping()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ImageUpdateAxis::swapping()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ImageUpdateAxis::configuring()  throw ( ::fwTools::Failed )
 {
     ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("axis");
-    SLM_ASSERT("Problem with configuration for ImageUpdateAxis type, one element \"axis\" must be present", m_configuration->findAllConfigurationElement("axis").size() == 1 );
+    SLM_ASSERT("Problem with configuration for ImageUpdateAxis type, one element \"axis\" must be present", m_configuration->findAllConfigurationElement(
+                   "axis").size() == 1 );
 
-    SLM_FATAL_IF( "Sorry, attribute \"uid\" is missing", !config->hasAttribute("uid") );
-    m_floatID =  config->getExistingAttributeValue("uid");
+    SLM_FATAL_IF( "The attribute \"uid\" is missing, it represents the fwID of the ::fwData::Float to update",
+                  !config->hasAttribute("uid") );
+    m_floatID = config->getExistingAttributeValue("uid");
 
-    SLM_FATAL_IF( "Sorry, attribute \"orientation\" is missing", !config->hasAttribute("orientation") );
-    std::string  orientation = config->getExistingAttributeValue("orientation");
+    SLM_FATAL_IF( "The attribute \"orientation\" is missing, it represents the image orientation "
+                  "(axial, frontal or sagittal)", !config->hasAttribute("orientation") );
+    std::string orientation = config->getExistingAttributeValue("orientation");
     ::boost::algorithm::trim(orientation);
     ::boost::algorithm::to_lower(orientation);
 
     if(orientation == "axial" )
     {
-        m_orientation = ::fwComEd::helper::MedicalImageAdaptor::Z_AXIS;
+        m_orientation = ::fwDataTools::helper::MedicalImageAdaptor::Z_AXIS;
     }
     else if(orientation == "frontal" )
     {
-        m_orientation = ::fwComEd::helper::MedicalImageAdaptor::Y_AXIS;
+        m_orientation = ::fwDataTools::helper::MedicalImageAdaptor::Y_AXIS;
     }
     else if(orientation == "sagittal" )
     {
-        m_orientation = ::fwComEd::helper::MedicalImageAdaptor::X_AXIS;
+        m_orientation = ::fwDataTools::helper::MedicalImageAdaptor::X_AXIS;
     }
     else
     {
@@ -120,7 +112,8 @@ void ImageUpdateAxis::configuring()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void ImageUpdateAxis::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -132,15 +125,26 @@ void ImageUpdateAxis::updating() throw ( ::fwTools::Failed )
 
     dataFloat->value() = (float) m_orientation;
     OSLM_TRACE(dataFloat->getID() << " new value : " << *dataFloat);
-    ::fwComEd::FloatMsg::sptr msg = ::fwComEd::FloatMsg::New();
-    msg->addEvent( ::fwComEd::FloatMsg::VALUE_IS_MODIFIED );
-    ::fwServices::IEditionService::notify(this->getSptr(), dataFloat, msg);
+
+    auto sig = dataFloat->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
 }
 
 //-----------------------------------------------------------------------------
 
-void ImageUpdateAxis::info( std::ostream &_sstream )
-{}
+void ImageUpdateAxis::info( std::ostream& _sstream )
+{
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageUpdateAxis::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+
+    return connections;
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/MedicalImageSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/MedicalImageSrv.cpp
index b5087e4..6e8797c 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/MedicalImageSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/MedicalImageSrv.cpp
@@ -1,63 +1,66 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "ctrlSelection/MedicalImageSrv.hpp"
 
-#include <fwServices/macros.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Image.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/helper/Image.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwServices/macros.hpp>
 
-#include "ctrlSelection/MedicalImageSrv.hpp"
 
 namespace ctrlSelection
 {
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::MedicalImageSrv, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwServices::IController, ::ctrlSelection::MedicalImageSrv, ::fwData::Image );
 
 //-----------------------------------------------------------------------------
 
 MedicalImageSrv::MedicalImageSrv() throw()
 {
-    //addNewHandledEvent(::fwComEd::ImageMsg::BUFFER );
 }
 
 //-----------------------------------------------------------------------------
 
 MedicalImageSrv::~MedicalImageSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-    if(message->hasEvent(::fwComEd::ImageMsg::BUFFER))
-    {
-        this->convertImage();
-    }
 }
 
 //-----------------------------------------------------------------------------
 
 void MedicalImageSrv::convertImage()
 {
-    ::fwData::Image::sptr pImg = this->getObject< ::fwData::Image >();
-    if(::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(pImg))
+    ::fwData::Image::sptr pImg;
+
+    if (this->isVersion2())
+    {
+        pImg = this->getInOut< ::fwData::Image >("image");
+    }
+    else
+    {
+        pImg = this->getObject< ::fwData::Image >();
+    }
+    if(::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(pImg))
     {
-        ::fwComEd::helper::Image helper ( pImg );
+        ::fwDataTools::helper::Image helper ( pImg );
 
         helper.createLandmarks();
-        helper.createTransferFunctionPool(this->getSptr());
+        helper.createTransferFunctionPool();
         helper.createImageSliceIndex();
+
+        auto sig = pImg->signal< ::fwData::Object::ModifiedSignalType >( ::fwData::Object::s_MODIFIED_SIG );
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        helper.notify();
     }
 }
 
@@ -71,7 +74,8 @@ void MedicalImageSrv::starting()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void MedicalImageSrv::stopping()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -83,22 +87,38 @@ void MedicalImageSrv::swapping()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void MedicalImageSrv::configuring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void MedicalImageSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void MedicalImageSrv::updating() throw ( ::fwTools::Failed )
-{}
+{
+    this->convertImage();
+}
 
 //-----------------------------------------------------------------------------
 
-void MedicalImageSrv::info( std::ostream &_sstream )
-{}
+void MedicalImageSrv::info( std::ostream& _sstream )
+{
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType MedicalImageSrv::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/Plugin.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/Plugin.cpp
index 4ddb764..86267da 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/Plugin.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,8 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -32,7 +33,8 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/MedicalImageManagerSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/MedicalImageManagerSrv.cpp
deleted file mode 100644
index 2445ac7..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/MedicalImageManagerSrv.cpp
+++ /dev/null
@@ -1,135 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include <fwData/Composite.hpp>
-#include <fwData/Image.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/helper/Image.hpp>
-
-#include "ctrlSelection/manager/MedicalImageManagerSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace manager
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlSelection::manager::MedicalImageManagerSrv, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-MedicalImageManagerSrv::MedicalImageManagerSrv() throw()
-{
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::ADDED_KEYS );
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS );
-}
-
-//-----------------------------------------------------------------------------
-
-MedicalImageManagerSrv::~MedicalImageManagerSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(message);
-    if (compositeMsg)
-    {
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getAddedKeys();
-            convertImages( fields );
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getNewChangedKeys();
-            convertImages( fields );
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::convertImages( ::fwData::Composite::sptr _composite )
-{
-    for(    ::fwData::Composite::IteratorType  objectId = _composite->begin();
-            objectId != _composite->end();
-            ++objectId )
-    {
-        BOOST_FOREACH( std::string key, m_imageCompositeKeys )
-        {
-            if( objectId->first == key )
-            {
-                ::fwData::Image::sptr pImg = ::fwData::Image::dynamicCast( objectId->second );
-
-                ::fwComEd::helper::Image helper ( pImg );
-                helper.createLandmarks();
-                helper.createTransferFunctionPool(this->getSptr());
-                helper.createImageSliceIndex();
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::starting()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    ::fwRuntime::ConfigurationElementContainer updaters = m_configuration->findAllConfigurationElement("update");
-
-    SLM_ASSERT("Problem with configuration for MedicalImageManagerSrv type, missing element \"update\"", updaters.size() != 0 );
-    OSLM_DEBUG( "updaters.size() = " << updaters.size() );
-    m_imageCompositeKeys.clear();
-    for(    ::fwRuntime::ConfigurationElementContainer::Iterator item = updaters.begin();
-            item != updaters.end();
-            ++item )
-    {
-        SLM_FATAL_IF( "Sorry, attribute \"imageCompositeKey\" is missing", !(*item)->hasAttribute("imageCompositeKey") );
-        std::string imageCompositeKey =  (*item)->getExistingAttributeValue("imageCompositeKey");
-        m_imageCompositeKeys.push_back(imageCompositeKey);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MedicalImageManagerSrv::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // manager
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SField.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SField.cpp
index 9bf0214..249edeb 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SField.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SField.cpp
@@ -1,20 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
+#include "ctrlSelection/manager/SField.hpp"
 
-#include <fwTools/fwID.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
 #include <fwServices/registry/ServiceConfig.hpp>
 
-#include "ctrlSelection/manager/SField.hpp"
+#include <fwTools/fwID.hpp>
+
+#include <boost/foreach.hpp>
+#include <boost/lexical_cast.hpp>
+
 
 namespace ctrlSelection
 {
@@ -22,53 +28,34 @@ namespace ctrlSelection
 namespace manager
 {
 
+static const ::fwCom::Slots::SlotKeyType s_ADD_FIELDS_SLOT    = "addFields";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_FIELDS_SLOT = "changeFields";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_FIELDS_SLOT = "removeFields";
+
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlSelection::manager::SField, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlSelection::manager::SField, ::fwData::Object );
 
 //-----------------------------------------------------------------------------
 
 SField::SField() throw() : m_dummyStopMode(false)
 {
-    //this->addNewHandledEvent( ::fwServices::ObjectMsg::ADDED_FIELDS );
-    //this->addNewHandledEvent( ::fwServices::ObjectMsg::REMOVED_FIELDS );
-    //this->addNewHandledEvent( ::fwServices::ObjectMsg::CHANGED_FIELDS );
+    newSlot(s_ADD_FIELDS_SLOT, &SField::addFields, this);
+    newSlot(s_CHANGE_FIELDS_SLOT, &SField::changeFields, this);
+    newSlot(s_REMOVE_FIELDS_SLOT, &SField::removeFields, this);
 }
 
 //-----------------------------------------------------------------------------
 
 SField::~SField() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void SField::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-
-    ::fwServices::ObjectMsg::csptr fieldMsg = ::fwServices::ObjectMsg::dynamicConstCast(message);
-    SLM_FATAL_IF("Received message must be fieldMsg", fieldMsg == 0 );
-
-    if ( fieldMsg->hasEvent( ::fwServices::ObjectMsg::ADDED_FIELDS ) )
-    {
-        this->addFields( fieldMsg->getAddedFields() );
-    }
-
-    if ( fieldMsg->hasEvent( ::fwServices::ObjectMsg::REMOVED_FIELDS ) )
-    {
-        this->removeFields( fieldMsg->getRemovedFields() );
-    }
-
-    if ( fieldMsg->hasEvent( ::fwServices::ObjectMsg::CHANGED_FIELDS ) )
-    {
-        this->swapFields( fieldMsg->getNewChangedFields() );
-    }
 }
 
 //-----------------------------------------------------------------------------
 
 void SField::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -80,8 +67,9 @@ void SField::updating() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SField::info( std::ostream &_sstream )
-{}
+void SField::info( std::ostream& _sstream )
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -89,7 +77,7 @@ void SField::stopping()  throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 
-    BOOST_FOREACH(SubServicesMapType::value_type elt, m_fieldsSubServices)
+    for(SubServicesMapType::value_type elt :  m_fieldsSubServices)
     {
         SubServicesVecType subServices = elt.second;
         BOOST_REVERSE_FOREACH( SPTR(SubService) subSrv, subServices )
@@ -98,9 +86,9 @@ void SField::stopping()  throw ( ::fwTools::Failed )
 
             if( subSrv->m_hasAutoConnection )
             {
-                subSrv->m_connections->disconnect();
+                subSrv->m_connections.disconnect();
             }
-            subSrv->getService()->stop();
+            subSrv->getService()->stop().wait();
             ::fwServices::OSR::unregisterService(subSrv->getService());
             subSrv->m_service.reset();
         }
@@ -133,7 +121,7 @@ void SField::configuring()  throw ( ::fwTools::Failed )
         std::string mode = modeConfiguration->getAttributeValue("type");
         SLM_ASSERT("Wrong mode type", (mode == "dummy" ) || (mode == "stop" ) || mode=="startAndUpdate");
         m_dummyStopMode = (mode == "dummy" );
-        m_mode = mode;
+        m_mode          = mode;
     }
 
     std::vector < ConfigurationType > vectConfig = m_configuration->find("config");
@@ -147,10 +135,10 @@ void SField::starting()  throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 
-    ::fwData::Object::sptr object = this->getObject() ;
+    ::fwData::Object::sptr object = this->getObject();
     const ::fwData::Object::FieldMapType& fieldsMap = object->getFields();
     ::fwRuntime::ConfigurationElementContainer::Iterator iter;
-    for (iter = m_managerConfiguration->begin() ; iter != m_managerConfiguration->end() ; ++iter)
+    for (iter = m_managerConfiguration->begin(); iter != m_managerConfiguration->end(); ++iter)
     {
         if ((*iter)->getName() == "field")
         {
@@ -171,9 +159,9 @@ void SField::starting()  throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SField::addFields( const ModifiedFieldsContainerType& fields )
+void SField::addFields( ::fwData::Object::FieldsContainerType fields )
 {
-    BOOST_FOREACH( ModifiedFieldsContainerType::value_type addedObjectId, fields)
+    for( auto addedObjectId :  fields)
     {
         if(m_fieldsSubServices.find(addedObjectId.first) != m_fieldsSubServices.end())
         {
@@ -189,42 +177,46 @@ void SField::addFields( const ModifiedFieldsContainerType& fields )
 
 //-----------------------------------------------------------------------------
 
-::fwServices::IService::sptr SField::add( ::fwData::Object::sptr obj , ::fwRuntime::ConfigurationElement::sptr _elt )
+::fwServices::IService::sptr SField::add( ::fwData::Object::sptr obj, ::fwRuntime::ConfigurationElement::sptr _elt )
 {
-    OSLM_ASSERT("ConfigurationElement node name must be \"service\" not "<<_elt->getName(), _elt->getName() == "service" ) ;
-    SLM_ASSERT("Attribute \"type\" is missing", _elt->hasAttribute("type") ) ;
-    SLM_ASSERT("Attribute \"impl\" is missing", _elt->hasAttribute("impl") ) ;
+    OSLM_ASSERT("ConfigurationElement node name must be \"service\" not "<<_elt->getName(),
+                _elt->getName() == "service" );
+    SLM_ASSERT("Attribute \"type\" is missing", _elt->hasAttribute("type") );
+    SLM_ASSERT("Attribute \"impl\" is missing", _elt->hasAttribute("impl") );
 
-    ::fwServices::IService::sptr service ;
+    ::fwServices::IService::sptr service;
 
-    std::string serviceType = _elt->getExistingAttributeValue("type") ;
+    std::string serviceType        = _elt->getExistingAttributeValue("type");
     std::string implementationType = _elt->getExistingAttributeValue("impl");
 
     // Add service with possible id
     if( _elt->hasAttribute("uid")  )
     {
-        service = ::fwServices::add( obj , serviceType , implementationType , _elt->getExistingAttributeValue("uid") );
+        service = ::fwServices::add( obj, serviceType, implementationType, _elt->getExistingAttributeValue("uid") );
     }
     else
     {
-        service =  ::fwServices::add( obj , serviceType , implementationType )  ;
+        service = ::fwServices::add( obj, serviceType, implementationType );
     }
 
     // Search for configuration : inline or offline
     ::fwRuntime::ConfigurationElement::sptr cfg = _elt;
     if( _elt->hasAttribute("config"))
     {
-        cfg = ::fwRuntime::ConfigurationElement::constCast( ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig( _elt->getExistingAttributeValue("config") , implementationType ) );
+        cfg = ::fwRuntime::ConfigurationElement::constCast(
+            ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig( _elt->
+                                                                                   getExistingAttributeValue("config"),
+                                                                                   implementationType ) );
     }
 
     // Set configuration
-    service->setConfiguration( cfg ) ;
+    service->setConfiguration( cfg );
 
     // Configure
     service->configure();
 
     // Return
-    return service ;
+    return service;
 }
 
 //-----------------------------------------------------------------------------
@@ -233,34 +225,44 @@ void SField::addField( const FieldNameType& fieldName, ::fwData::Object::sptr fi
 {
     if(!m_managerConfiguration->find("field", "id", fieldName).empty())
     {
-        ConfigurationType conf = m_managerConfiguration->find("field", "id", fieldName).at(0);
-        const std::string fieldType   = conf->getAttributeValue("type");
+        ConfigurationType conf      = m_managerConfiguration->find("field", "id", fieldName).at(0);
+        const std::string fieldType = conf->getAttributeValue("type");
 
         OSLM_ASSERT("FieldType "<<fieldType<<" does not match ObjectType in Object "<<field->getClassname(),
-                fieldType == field->getClassname());
+                    fieldType == field->getClassname());
         SubServicesVecType subVecSrv;
         std::vector< ConfigurationType > services = conf->find("service");
-        BOOST_FOREACH( ConfigurationType cfg, services)
+        for( ConfigurationType cfg :  services)
         {
             ::fwServices::IService::sptr srv = this->add( field, cfg );
             OSLM_ASSERT("Instantiation Service failed on field "<<fieldName, srv);
             srv->configure();
-            SPTR(SubService) subSrv =  SPTR(SubService)( new SubService());
-            subSrv->m_config = cfg;
-            subSrv->m_service = srv;
+            SPTR(SubService) subSrv = SPTR(SubService)( new SubService());
+            subSrv->m_config        = cfg;
+            subSrv->m_service       = srv;
 
             // Standard communication management
-            SLM_ASSERT("autoConnect attribute missing in service "<< srv->getClassname(),
-                       cfg->hasAttribute("autoConnect"));
-
-            if ( cfg->getExistingAttributeValue("autoConnect") == "yes" )
+            if ( cfg->getAttributeValue("autoConnect") == "yes" )
             {
                 subSrv->m_hasAutoConnection = true;
-                if (!subSrv->m_connections)
+                subSrv->m_connections.connect( field, srv, srv->getObjSrvConnections() );
+            }
+
+
+            std::string workerKey = cfg->getAttributeValue("worker");
+
+            if (!workerKey.empty())
+            {
+                ::fwServices::registry::ActiveWorkers::sptr activeWorkers =
+                    ::fwServices::registry::ActiveWorkers::getDefault();
+                ::fwThread::Worker::sptr worker;
+                worker = activeWorkers->getWorker(workerKey);
+                if (!worker)
                 {
-                    subSrv->m_connections = ::fwServices::helper::SigSlotConnection::New();
+                    worker = ::fwThread::Worker::New();
+                    activeWorkers->addWorker(workerKey, worker);
                 }
-                subSrv->m_connections->connect( field, srv, srv->getObjSrvConnections() );
+                srv->setWorker(worker);
             }
 
             subVecSrv.push_back(subSrv);
@@ -282,9 +284,10 @@ void SField::addField( const FieldNameType& fieldName, ::fwData::Object::sptr fi
 }
 //-----------------------------------------------------------------------------
 
-void SField::swapFields( const ModifiedFieldsContainerType& fields )
+void SField::changeFields( ::fwData::Object::FieldsContainerType newfields,
+                           ::fwData::Object::FieldsContainerType oldFields )
 {
-    BOOST_FOREACH( ModifiedFieldsContainerType::value_type swappedObjectId, fields)
+    for( auto swappedObjectId :  newfields)
     {
         this->swapField(swappedObjectId.first, swappedObjectId.second);
     }
@@ -295,10 +298,10 @@ void SField::swapFields( const ModifiedFieldsContainerType& fields )
 void SField::swapField(const FieldNameType& fieldName, ::fwData::Object::sptr field)
 {
     std::vector< ConfigurationType > fields = m_managerConfiguration->find("field", "id", fieldName);
-    BOOST_FOREACH( ConfigurationType cfg, fields)
+    for( ConfigurationType cfg :  fields)
     {
         SubServicesVecType subServices = m_fieldsSubServices[fieldName];
-        BOOST_FOREACH( SPTR(SubService) subSrv, subServices )
+        for( SPTR(SubService) subSrv :  subServices )
         {
             OSLM_ASSERT("SubService on " << fieldName <<" expired !", subSrv->getService() );
             OSLM_ASSERT( subSrv->getService()->getID() <<  " is not started ", subSrv->getService()->isStarted());
@@ -311,9 +314,9 @@ void SField::swapField(const FieldNameType& fieldName, ::fwData::Object::sptr fi
 
                 if (subSrv->m_hasAutoConnection)
                 {
-                    subSrv->m_connections->disconnect();
-                    subSrv->m_connections->connect( field, subSrv->getService(),
-                                                    subSrv->getService()->getObjSrvConnections() );
+                    subSrv->m_connections.disconnect();
+                    subSrv->m_connections.connect( field, subSrv->getService(),
+                                                   subSrv->getService()->getObjSrvConnections() );
                 }
             }
             else
@@ -331,9 +334,9 @@ void SField::swapField(const FieldNameType& fieldName, ::fwData::Object::sptr fi
 
 //-----------------------------------------------------------------------------
 
-void SField::removeFields( const ModifiedFieldsContainerType& fields )
+void SField::removeFields( ::fwData::Object::FieldsContainerType fields )
 {
-    BOOST_FOREACH( ModifiedFieldsContainerType::value_type swappedObjectId, fields)
+    for( auto swappedObjectId :  fields)
     {
         this->removeField(swappedObjectId.first);
     }
@@ -345,8 +348,8 @@ void SField::removeField( const FieldNameType& fieldName )
 {
     if(!m_managerConfiguration->find("field", "id", fieldName).empty())
     {
-        ConfigurationType conf = m_managerConfiguration->find("field", "id", fieldName).at(0);
-        const std::string fieldType   = conf->getAttributeValue("type");
+        ConfigurationType conf      = m_managerConfiguration->find("field", "id", fieldName).at(0);
+        const std::string fieldType = conf->getAttributeValue("type");
 
         this->removeConnections(fieldName);
         this->disconnectProxies(fieldName);
@@ -354,7 +357,7 @@ void SField::removeField( const FieldNameType& fieldName )
         SubServicesVecType subServices = m_fieldsSubServices[fieldName];
         ::fwData::Object::sptr dummyObj;
         dummyObj = ::fwData::factory::New(fieldType);
-        BOOST_FOREACH( SPTR(SubService) subSrv, subServices )
+        for( SPTR(SubService) subSrv :  subServices )
         {
             OSLM_ASSERT("SubService on " << fieldName <<" expired !", subSrv->getService() );
             OSLM_ASSERT( subSrv->getService()->getID() <<  " is not started ", subSrv->getService()->isStarted());
@@ -367,7 +370,7 @@ void SField::removeField( const FieldNameType& fieldName )
             {
                 if( subSrv->m_hasAutoConnection )
                 {
-                    subSrv->m_connections->disconnect();
+                    subSrv->m_connections.disconnect();
                 }
 
                 subSrv->getService()->stop();
@@ -397,13 +400,13 @@ void SField::initOnDummyObject( const FieldNameType& fieldName )
 {
     SLM_ASSERT( "'fieldName' required attribute missing or empty", !fieldName.empty() );
 
-    ::fwData::Object::sptr object = this->getObject() ;
+    ::fwData::Object::sptr object = this->getObject();
 
     OSLM_ASSERT(fieldName << " not found in object.",
-            object->getFields().find(fieldName) == object->getFields().end());
+                object->getFields().find(fieldName) == object->getFields().end());
 
-    ConfigurationType conf = m_managerConfiguration->find("field", "id", fieldName).at(0);
-    const std::string fieldType    = conf->getAttributeValue("type");
+    ConfigurationType conf      = m_managerConfiguration->find("field", "id", fieldName).at(0);
+    const std::string fieldType = conf->getAttributeValue("type");
     SLM_ASSERT( "'type' required attribute missing or empty", !fieldType.empty() );
 
     // Any subServices have been registered with field.
@@ -415,28 +418,39 @@ void SField::initOnDummyObject( const FieldNameType& fieldName )
         dummyObj = ::fwData::factory::New(fieldType);
         SubServicesVecType subVecSrv;
         std::vector< ConfigurationType > services = conf->find("service");
-        BOOST_FOREACH( ConfigurationType cfg, services)
+        for( ConfigurationType cfg :  services)
         {
             ::fwServices::IService::sptr srv = this->add( dummyObj, cfg );
             OSLM_ASSERT("Instantiation Service failed ofieldct "<<fieldName, srv);
             srv->configure();
-            SPTR(SubService) subSrv =  SPTR(SubService)( new SubService());
-            subSrv->m_config = cfg;
-            subSrv->m_service = srv;
-            subSrv->m_dummy = dummyObj;
+            SPTR(SubService) subSrv = SPTR(SubService)( new SubService());
+            subSrv->m_config        = cfg;
+            subSrv->m_service       = srv;
+            subSrv->m_dummy         = dummyObj;
             subVecSrv.push_back(subSrv);
             subSrv->getService()->start();
 
-            if ( cfg->getExistingAttributeValue("autoConnect") == "yes" )
+            if ( cfg->getAttributeValue("autoConnect") == "yes" )
             {
                 subSrv->m_hasAutoConnection = true;
-                subSrv->m_connections = ::fwServices::helper::SigSlotConnection::New();
             }
         }
         m_fieldsSubServices[fieldName] = subVecSrv;
     }
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SField::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_ADDED_FIELDS_SIG, s_ADD_FIELDS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Object::s_CHANGED_FIELDS_SIG, s_CHANGE_FIELDS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Object::s_REMOVED_FIELDS_SIG, s_REMOVE_FIELDS_SLOT ) );
+
+    return connections;
+}
+
 //-----------------------------------------------------------------------------
 
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SwapperSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SwapperSrv.cpp
index f06433c..374e2c1 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SwapperSrv.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/manager/SwapperSrv.cpp
@@ -1,25 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "ctrlSelection/manager/SwapperSrv.hpp"
 
 #include <fwCom/HasSignals.hpp>
 #include <fwCom/HasSlots.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
 #include <fwServices/registry/ServiceConfig.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
+#include <fwTools/fwID.hpp>
+
 #include <fwData/Composite.hpp>
 
-#include "ctrlSelection/manager/SwapperSrv.hpp"
+#include <boost/foreach.hpp>
 
 namespace ctrlSelection
 {
@@ -27,57 +30,34 @@ namespace ctrlSelection
 namespace manager
 {
 
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT    = "addObjects";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT = "changeObjects";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects";
+
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlSelection::manager::SwapperSrv, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::ctrlSelection::IManagerSrv, ::ctrlSelection::manager::SwapperSrv, ::fwData::Composite );
 
 //-----------------------------------------------------------------------------
 
 SwapperSrv::SwapperSrv() throw() : m_dummyStopMode(false)
 {
-    //handlingEventOff ::fwComEd::CompositeMsg::ADDED_KEYS );
-    //handlingEventOff ::fwComEd::CompositeMsg::REMOVED_KEYS );
-    //handlingEventOff ::fwComEd::CompositeMsg::CHANGED_KEYS );
+    newSlot(s_ADD_OBJECTS_SLOT, &SwapperSrv::addObjects, this);
+    newSlot(s_CHANGE_OBJECTS_SLOT, &SwapperSrv::changeObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &SwapperSrv::removeObjects, this);
 }
 
 //-----------------------------------------------------------------------------
 
 SwapperSrv::~SwapperSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void SwapperSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(message);
-    if (compositeMsg)
-    {
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getAddedKeys();
-            this->addObjects( fields );
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getRemovedKeys();
-            this->removeObjects( fields );
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getNewChangedKeys();
-            this->swapObjects( fields );
-        }
-    }
 }
 
 //-----------------------------------------------------------------------------
 
 void SwapperSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -89,8 +69,9 @@ void SwapperSrv::updating() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SwapperSrv::info( std::ostream &_sstream )
-{}
+void SwapperSrv::info( std::ostream& _sstream )
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -111,7 +92,7 @@ void SwapperSrv::stopping()  throw ( ::fwTools::Failed )
     SLM_ASSERT("Proxy connections must be empty", m_proxyCtns.empty());
 
 
-    BOOST_FOREACH(SubServicesMapType::value_type elt, m_objectsSubServices)
+    for(SubServicesMapType::value_type elt :  m_objectsSubServices)
     {
         SubServicesVecType subServices = elt.second;
         BOOST_REVERSE_FOREACH( SPTR(SubService) subSrv, subServices )
@@ -120,9 +101,9 @@ void SwapperSrv::stopping()  throw ( ::fwTools::Failed )
 
             if( subSrv->m_hasAutoConnection )
             {
-                subSrv->m_connections->disconnect();
+                subSrv->m_connections.disconnect();
             }
-            subSrv->getService()->stop();
+            subSrv->getService()->stop().wait();
             ::fwServices::OSR::unregisterService(subSrv->getService());
             subSrv->m_service.reset();
         }
@@ -143,7 +124,7 @@ void SwapperSrv::configuring()  throw ( ::fwTools::Failed )
         std::string mode = modeConfiguration->getAttributeValue("type");
         SLM_ASSERT("Wrong type mode", (mode == "dummy" ) || (mode == "stop" ) || mode=="startAndUpdate");
         m_dummyStopMode = (mode == "dummy" );
-        m_mode = mode;
+        m_mode          = mode;
     }
 
     std::vector < ConfigurationType > vectConfig = m_configuration->find("config");
@@ -157,13 +138,13 @@ void SwapperSrv::starting()  throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >() ;
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
     ::fwRuntime::ConfigurationElementContainer::Iterator iter;
-    for (iter = m_managerConfiguration->begin() ; iter != m_managerConfiguration->end() ; ++iter)
+    for (iter = m_managerConfiguration->begin(); iter != m_managerConfiguration->end(); ++iter)
     {
         if ((*iter)->getName() == "object")
         {
-            const std::string objectId      = (*iter)->getAttributeValue("id");
+            const std::string objectId = (*iter)->getAttributeValue("id");
 
             if (composite->find(objectId) != composite->end())
             {
@@ -178,16 +159,16 @@ void SwapperSrv::starting()  throw ( ::fwTools::Failed )
     }
 }
 
-//-----------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-void SwapperSrv::addObjects( ::fwData::Composite::sptr _composite )
+void SwapperSrv::addObjects(::fwData::Composite::ContainerType objects)
 {
-    BOOST_FOREACH( ::fwData::Composite::ValueType addedObjectId, _composite->getContainer())
+    for( ::fwData::Composite::ValueType addedObjectId :  objects)
     {
         if(m_objectsSubServices.find(addedObjectId.first) != m_objectsSubServices.end())
         {
             // Services are on dummyObject
-            this->swapObject(addedObjectId.first, addedObjectId.second);
+            this->changeObject(addedObjectId.first, addedObjectId.second);
         }
         else
         {
@@ -198,25 +179,26 @@ void SwapperSrv::addObjects( ::fwData::Composite::sptr _composite )
 
 //-----------------------------------------------------------------------------
 
-::fwServices::IService::sptr SwapperSrv::add( ::fwData::Object::sptr obj , ::fwRuntime::ConfigurationElement::sptr _elt )
+::fwServices::IService::sptr SwapperSrv::add( ::fwData::Object::sptr obj, ::fwRuntime::ConfigurationElement::sptr _elt )
 {
-    OSLM_ASSERT("ConfigurationElement node name must be \"service\" not "<<_elt->getName(), _elt->getName() == "service" ) ;
-    SLM_ASSERT("Attribute \"type\" is missing", _elt->hasAttribute("type") ) ;
-    SLM_ASSERT("Attribute \"impl\" is missing", _elt->hasAttribute("impl") ) ;
+    OSLM_ASSERT("ConfigurationElement node name must be \"service\" not "<<_elt->getName(),
+                _elt->getName() == "service" );
+    SLM_ASSERT("Attribute \"type\" is missing", _elt->hasAttribute("type") );
+    SLM_ASSERT("Attribute \"impl\" is missing", _elt->hasAttribute("impl") );
 
-    ::fwServices::IService::sptr service ;
+    ::fwServices::IService::sptr service;
 
-    std::string serviceType = _elt->getExistingAttributeValue("type") ;
+    std::string serviceType        = _elt->getExistingAttributeValue("type");
     std::string implementationType = _elt->getExistingAttributeValue("impl");
 
     // Add service with possible id
     if( _elt->hasAttribute("uid")  )
     {
-        service = ::fwServices::add( obj , serviceType , implementationType , _elt->getExistingAttributeValue("uid") );
+        service = ::fwServices::add( obj, serviceType, implementationType, _elt->getExistingAttributeValue("uid") );
     }
     else
     {
-        service =  ::fwServices::add( obj , serviceType , implementationType )  ;
+        service = ::fwServices::add( obj, serviceType, implementationType );
     }
 
     // Search for configuration : inline or offline
@@ -224,54 +206,63 @@ void SwapperSrv::addObjects( ::fwData::Composite::sptr _composite )
     if( _elt->hasAttribute("config"))
     {
         cfg = ::fwRuntime::ConfigurationElement::constCast(
-                ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(
-                        _elt->getExistingAttributeValue("config") , implementationType ) );
+            ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(
+                _elt->getExistingAttributeValue("config"), implementationType ) );
     }
 
     // Set configuration
-    service->setConfiguration( cfg ) ;
+    service->setConfiguration( cfg );
 
     // Configure
     service->configure();
 
     // Return
-    return service ;
+    return service;
 }
 
 //-----------------------------------------------------------------------------
 
-void SwapperSrv::addObject( const std::string &objectId, ::fwData::Object::sptr object )
+void SwapperSrv::addObject( const std::string& objectId, ::fwData::Object::sptr object )
 {
     if(!m_managerConfiguration->find("object", "id", objectId).empty())
     {
-        ConfigurationType conf = m_managerConfiguration->find("object", "id", objectId).at(0);
-        const std::string objectType   = conf->getAttributeValue("type");
+        ConfigurationType conf       = m_managerConfiguration->find("object", "id", objectId).at(0);
+        const std::string objectType = conf->getAttributeValue("type");
 
         OSLM_ASSERT("ObjectType "<<objectType<<" does not match ObjectType in Composite "<<object->getClassname(),
-                objectType == object->getClassname());
+                    objectType == object->getClassname());
         SubServicesVecType subVecSrv;
         std::vector< ConfigurationType > confVec = conf->find("service");
-        BOOST_FOREACH( ConfigurationType cfg, confVec )
+        for( ConfigurationType cfg :  confVec )
         {
             ::fwServices::IService::sptr srv = this->add( object, cfg );
             OSLM_ASSERT("Instantiation Service failed on object "<<objectId, srv);
 
-            SPTR(SubService) subSrv =  SPTR(SubService)( new SubService());
-            subSrv->m_config = cfg;
-            subSrv->m_service = srv;
+            SPTR(SubService) subSrv = SPTR(SubService)( new SubService());
+            subSrv->m_config        = cfg;
+            subSrv->m_service       = srv;
 
             // Standard communication management
-            SLM_ASSERT("autoConnect attribute missing in service "<< srv->getClassname(),
-                       cfg->hasAttribute("autoConnect"));
-
-            if ( cfg->getExistingAttributeValue("autoConnect") == "yes" )
+            if ( cfg->getAttributeValue("autoConnect") == "yes" )
             {
                 subSrv->m_hasAutoConnection = true;
-                if (!subSrv->m_connections)
+                subSrv->m_connections.connect( object, srv, srv->getObjSrvConnections() );
+            }
+
+            std::string workerKey = cfg->getAttributeValue("worker");
+
+            if (!workerKey.empty())
+            {
+                ::fwServices::registry::ActiveWorkers::sptr activeWorkers =
+                    ::fwServices::registry::ActiveWorkers::getDefault();
+                ::fwThread::Worker::sptr worker;
+                worker = activeWorkers->getWorker(workerKey);
+                if (!worker)
                 {
-                    subSrv->m_connections = ::fwServices::helper::SigSlotConnection::New();
+                    worker = ::fwThread::Worker::New();
+                    activeWorkers->addWorker(workerKey, worker);
                 }
-                subSrv->m_connections->connect( object, srv, srv->getObjSrvConnections() );
+                srv->setWorker(worker);
             }
 
             subVecSrv.push_back(subSrv);
@@ -294,26 +285,27 @@ void SwapperSrv::addObject( const std::string &objectId, ::fwData::Object::sptr
 }
 //-----------------------------------------------------------------------------
 
-void SwapperSrv::swapObjects( ::fwData::Composite::sptr _composite )
+void SwapperSrv::changeObjects(::fwData::Composite::ContainerType newObjects,
+                               ::fwData::Composite::ContainerType oldObjects)
 {
-    BOOST_FOREACH( ::fwData::Composite::ValueType swappedObjectId, _composite->getContainer())
+    for( ::fwData::Composite::ValueType swappedObjectId : newObjects)
     {
-        this->swapObject(swappedObjectId.first, swappedObjectId.second);
+        this->changeObject(swappedObjectId.first, swappedObjectId.second);
     }
 }
 
 //-----------------------------------------------------------------------------
 
-void SwapperSrv::swapObject(const std::string &objectId, ::fwData::Object::sptr object)
+void SwapperSrv::changeObject(const std::string& objectId, ::fwData::Object::sptr object)
 {
     std::vector< ConfigurationType > confVec = m_managerConfiguration->find("object", "id", objectId);
-    BOOST_FOREACH( ConfigurationType cfg, confVec )
+    for( ConfigurationType cfg :  confVec )
     {
         this->removeConnections(objectId);
         this->disconnectProxies(objectId);
 
         SubServicesVecType subServices = m_objectsSubServices[objectId];
-        BOOST_FOREACH( SPTR(SubService) subSrv, subServices )
+        for( SPTR(SubService) subSrv :  subServices )
         {
             OSLM_ASSERT("SubService on " << objectId <<" expired !", subSrv->getService() );
             OSLM_ASSERT( subSrv->getService()->getID() <<  " is not started ", subSrv->getService()->isStarted());
@@ -326,9 +318,9 @@ void SwapperSrv::swapObject(const std::string &objectId, ::fwData::Object::sptr
 
                 if (subSrv->m_hasAutoConnection)
                 {
-                    subSrv->m_connections->disconnect();
-                    subSrv->m_connections->connect( object, subSrv->getService(),
-                                                    subSrv->getService()->getObjSrvConnections() );
+                    subSrv->m_connections.disconnect();
+                    subSrv->m_connections.connect( object, subSrv->getService(),
+                                                   subSrv->getService()->getObjSrvConnections() );
                 }
             }
             else
@@ -347,9 +339,9 @@ void SwapperSrv::swapObject(const std::string &objectId, ::fwData::Object::sptr
 
 //-----------------------------------------------------------------------------
 
-void SwapperSrv::removeObjects( ::fwData::Composite::sptr _composite )
+void SwapperSrv::removeObjects( ::fwData::Composite::ContainerType objects )
 {
-    BOOST_FOREACH( ::fwData::Composite::ValueType swappedObjectId, _composite->getContainer())
+    for( ::fwData::Composite::ValueType swappedObjectId : objects)
     {
         this->removeObject(swappedObjectId.first);
     }
@@ -357,12 +349,12 @@ void SwapperSrv::removeObjects( ::fwData::Composite::sptr _composite )
 
 //-----------------------------------------------------------------------------
 
-void SwapperSrv::removeObject( const std::string &objectId )
+void SwapperSrv::removeObject( const std::string& objectId )
 {
     if(!m_managerConfiguration->find("object", "id", objectId).empty())
     {
-        ConfigurationType conf = m_managerConfiguration->find("object", "id", objectId).at(0);
-        const std::string objectType   = conf->getAttributeValue("type");
+        ConfigurationType conf       = m_managerConfiguration->find("object", "id", objectId).at(0);
+        const std::string objectType = conf->getAttributeValue("type");
 
         this->removeConnections(objectId);
         this->disconnectProxies(objectId);
@@ -370,14 +362,14 @@ void SwapperSrv::removeObject( const std::string &objectId )
         SubServicesVecType subServices = m_objectsSubServices[objectId];
         ::fwData::Object::sptr dummyObj;
         dummyObj = ::fwData::factory::New(objectType);
-        BOOST_FOREACH( SPTR(SubService) subSrv, subServices )
+        for( SPTR(SubService) subSrv :  subServices )
         {
             OSLM_ASSERT("SubService on " << objectId <<" expired !", subSrv->getService() );
             OSLM_ASSERT( subSrv->getService()->getID() <<  " is not started ", subSrv->getService()->isStarted());
 
             if (subSrv->m_hasAutoConnection)
             {
-                subSrv->m_connections->disconnect();
+                subSrv->m_connections.disconnect();
             }
             if(m_dummyStopMode)
             {
@@ -412,12 +404,12 @@ void SwapperSrv::initOnDummyObject( std::string objectId )
 {
     SLM_ASSERT( "'objectId' required attribute missing or empty", !objectId.empty() );
 
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >() ;
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
 
     OSLM_ASSERT(objectId << " not found in composite.", composite->find(objectId) == composite->end());
 
-    ConfigurationType conf = m_managerConfiguration->find("object", "id", objectId).at(0);
-    const std::string objectType    = conf->getAttributeValue("type");
+    ConfigurationType conf       = m_managerConfiguration->find("object", "id", objectId).at(0);
+    const std::string objectType = conf->getAttributeValue("type");
     SLM_ASSERT( "'type' required attribute missing or empty", !objectType.empty() );
 
     // Any subServices have been registered with object.
@@ -429,20 +421,19 @@ void SwapperSrv::initOnDummyObject( std::string objectId )
         dummyObj = ::fwData::factory::New(objectType);
         SubServicesVecType subVecSrv;
         std::vector < ConfigurationType > confVec = conf->find("service");
-        BOOST_FOREACH( ConfigurationType cfg, confVec )
+        for( ConfigurationType cfg :  confVec )
         {
             ::fwServices::IService::sptr srv = this->add( dummyObj, cfg );
             OSLM_ASSERT("Instantiation Service failed on object "<<objectId, srv);
 
-            SPTR(SubService) subSrv =  SPTR(SubService)( new SubService());
-            subSrv->m_config = cfg;
-            subSrv->m_service = srv;
-            subSrv->m_dummy = dummyObj;
+            SPTR(SubService) subSrv = SPTR(SubService)( new SubService());
+            subSrv->m_config        = cfg;
+            subSrv->m_service       = srv;
+            subSrv->m_dummy         = dummyObj;
 
-            if ( cfg->getExistingAttributeValue("autoConnect") == "yes" )
+            if ( cfg->getAttributeValue("autoConnect") == "yes" )
             {
                 subSrv->m_hasAutoConnection = true;
-                subSrv->m_connections = ::fwServices::helper::SigSlotConnection::New();
             }
 
             subVecSrv.push_back(subSrv);
@@ -452,6 +443,18 @@ void SwapperSrv::initOnDummyObject( std::string objectId )
     }
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SwapperSrv::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT ) );
+
+    return connections;
+}
+
 //-----------------------------------------------------------------------------
 
 } // manager
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.cpp
deleted file mode 100644
index 739dd6d..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/spyLog.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include "ctrlSelection/updater/DataInfoFromMsgUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::DataInfoFromMsgUpdaterSrv, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-DataInfoFromMsgUpdaterSrv::DataInfoFromMsgUpdaterSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-DataInfoFromMsgUpdaterSrv::~DataInfoFromMsgUpdaterSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    for (   ManagedEvents::iterator it = m_managedEvents.begin();
-            it != m_managedEvents.end();
-            ++it )
-    {
-        std::string event         = it->get<0>();
-        std::string uuid          = it->get<1>();
-        std::string compositeKey  = it->get<2>();
-        ctrlSelection::IUpdaterSrv::ActionType action        = it->get<3>();
-
-        //  test if message correspond to a defined event
-        if( _msg->hasEvent( event ) )
-        {
-            ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast( _msg->getSubject().lock() );
-            SLM_ASSERT("Sorry, the subject of message is not a ::fwData::Object", obj);
-
-            // Test if we manage this event from this object message uid
-            if( obj->getID() == uuid || uuid == "*")
-            {
-                ::fwData::Object::sptr dataInfo = ::boost::const_pointer_cast< ::fwData::Object >(_msg->getDataInfo(  event ));
-                SLM_ASSERT("no dataInfo set!!!" ,  dataInfo
-                        ||  action== ctrlSelection::IUpdaterSrv::REMOVE
-                        ||  action== ctrlSelection::IUpdaterSrv::REMOVE_IF_PRESENT
-                );
-                // Udpate the composite object referenced by the composite key
-                this->updateComposite(composite, dataInfo , compositeKey , action );
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::starting()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->configureManagedEvents(m_configuration);
-}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void DataInfoFromMsgUpdaterSrv::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // updater
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/ObjFromMsgUpdaterSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/ObjFromMsgUpdaterSrv.cpp
deleted file mode 100644
index c9c01c8..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/ObjFromMsgUpdaterSrv.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/spyLog.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include "ctrlSelection/updater/ObjFromMsgUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::ObjFromMsgUpdaterSrv, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-ObjFromMsgUpdaterSrv::ObjFromMsgUpdaterSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-ObjFromMsgUpdaterSrv::~ObjFromMsgUpdaterSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    for (   ManagedEvents::iterator it = m_managedEvents.begin();
-            it != m_managedEvents.end();
-            ++it )
-    {
-        // First element of tuple ( it->get<0>() ) is the event, test if message correspond to a defined event
-        if( _msg->hasEvent( it->get<0>() ) )
-        {
-            ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast( _msg->getSubject().lock() );
-            SLM_ASSERT(obj,"Sorry, the subject of message is not a ::fwData::Object");
-
-            // Test if we manage this event from this object message uid ( it->get<1>() )
-            if( it->get<1>() == "*" || obj->getID() == it->get<1>() )
-            {
-                // Udapte the composite object referenced by the composite key ( it->get<2>() )
-                this->updateComposite(composite, obj, it->get<2>(), it->get<3>() );
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::starting()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->configureManagedEvents(m_configuration);
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjFromMsgUpdaterSrv::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // updater
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.cpp
deleted file mode 100644
index 1f5a1ec..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.cpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwComEd/ResectionMsg.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include "ctrlSelection/updater/ReconstructionFromResecUpdaterSrv.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::ReconstructionFromResecUpdaterSrv, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-ReconstructionFromResecUpdaterSrv::ReconstructionFromResecUpdaterSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-ReconstructionFromResecUpdaterSrv::~ReconstructionFromResecUpdaterSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    for (   ManagedEvents::iterator it = m_managedEvents.begin();
-            it != m_managedEvents.end();
-            ++it )
-    {
-        // First element of tuple ( it->get<0>() ) is the event, test if message correspond to a defined event
-        if( _msg->hasEvent( it->get<0>() ) )
-        {
-            ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast( _msg->getSubject().lock() );
-            SLM_ASSERT(obj,"Sorry, the subject of message is not a ::fwData::Object");
-
-            // Test if we manage this event from this object message uid ( it->get<1>() )
-            if( it->get<1>() == "*" || obj->getID() == it->get<1>() )
-            {
-                ::fwData::Reconstruction::sptr reconst;
-                ActionType action = it->get<3>();
-                if( action != REMOVE && action != REMOVE_IF_PRESENT && action != DO_NOTHING)
-                {
-                    reconst = this->getReconstruction(_msg);
-                }
-                // Udapte the composite object referenced by the composite key ( it->get<2>() )
-                this->updateComposite(composite, reconst, it->get<2>(), it->get<3>() );
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Reconstruction::sptr ReconstructionFromResecUpdaterSrv::getReconstruction(::fwServices::ObjectMsg::csptr msg)
-{
-    ::fwData::Reconstruction::sptr reconst;
-    ::fwComEd::ResectionMsg::csptr pResectionMsg = ::fwComEd::ResectionMsg::dynamicConstCast( msg );
-    SLM_FATAL_IF("Sorry, it's not an ResectionMsg", !pResectionMsg);
-
-    SLM_ASSERT("Sorry, there's not NEW_RECONSTRUCTION_SELECTED in ResectionMsg", pResectionMsg->hasEvent( ::fwComEd::ResectionMsg::NEW_RECONSTRUCTION_SELECTED ));
-    ::fwData::Object::csptr dataInfo = pResectionMsg->getDataInfo(::fwComEd::ResectionMsg::NEW_RECONSTRUCTION_SELECTED);
-    SLM_ASSERT("Sorry, there is no dataInfo", dataInfo);
-    ::fwData::String::csptr reconstructionSelectedUID = ::fwData::String::dynamicConstCast( dataInfo ) ;
-    SLM_ASSERT("Sorry,  there is no reconstruction selected", reconstructionSelectedUID);
-    reconst =  ::fwData::Reconstruction::dynamicCast(  ::fwTools::fwID::getObject( reconstructionSelectedUID->value()) );
-
-    return reconst;
-}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::starting()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->configureManagedEvents(m_configuration);
-}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::reconfiguring()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ReconstructionFromResecUpdaterSrv::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // updater
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SDrop.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SDrop.cpp
index a8ec821..57af989 100644
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SDrop.cpp
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SDrop.cpp
@@ -1,19 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "ctrlSelection/updater/SDrop.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
 #include <fwData/Composite.hpp>
 #include <fwData/String.hpp>
 
-#include <fwComEd/helper/Composite.hpp>
-
-#include <fwTools/UUID.hpp>
+#include <fwDataTools/helper/Composite.hpp>
 
 #include <fwServices/macros.hpp>
 
-#include "ctrlSelection/updater/SDrop.hpp"
+#include <fwTools/UUID.hpp>
+
 
 namespace ctrlSelection
 {
@@ -21,75 +27,68 @@ namespace ctrlSelection
 namespace updater
 {
 
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECT_SLOT = "addObject";
+
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::SDrop, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::SDrop, ::fwData::Composite );
 
 //-----------------------------------------------------------------------------
 
 SDrop::SDrop() throw()
 {
-    //this->addNewHandledEvent("DROPPED_UUID");
+    newSlot(s_ADD_OBJECT_SLOT, &SDrop::addObject, this);
 }
 
 //-----------------------------------------------------------------------------
 
 SDrop::~SDrop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void SDrop::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
+void SDrop::addObject( std::string uid )
 {
-    if (_msg->hasEvent("DROPPED_UUID"))
-    {
-        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-        ::fwData::Object::csptr msgObject = _msg->getDataInfo("DROPPED_UUID");
-
-        ::fwData::String::csptr id = ::fwData::String::dynamicConstCast(msgObject);
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
 
-        ::fwData::Object::sptr object = ::fwData::Object::dynamicCast(::fwTools::UUID::get(id->getValue()));
-        if(object)
+    ::fwData::Object::sptr object = ::fwData::Object::dynamicCast(::fwTools::UUID::get(uid));
+    if(object)
+    {
+        ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+        helper.clear();
+        if(object->isA("::fwData::Image"))
         {
-
-            ::fwComEd::helper::Composite helper( this->getObject< ::fwData::Composite >() );
-            helper.clear();
-            if(object->isA("::fwData::Image"))
-            {
-                helper.add("image", object);
-            }
-            else if(object->isA("::fwData::Mesh"))
-            {
-                helper.add("mesh", object);
-            }
-            else if(object->isA("::fwData::Reconstruction"))
-            {
-                helper.add("reconstruction", object);
-            }
-            else if(object->isA("::fwData::Resection"))
-            {
-                helper.add("resection", object);
-            }
-            else if(object->isA("::fwData::ResectionDB"))
-            {
-                helper.add("resectionDB", object);
-            }
-            else if(object->isA("::fwData::Plane"))
-            {
-                helper.add("plane", object);
-            }
-            else if(object->isA("::fwData::PlaneList"))
-            {
-                helper.add("planeList", object);
-            }
-            helper.notify(this->getSptr());
+            helper.add("image", object);
+        }
+        else if(object->isA("::fwData::Mesh"))
+        {
+            helper.add("mesh", object);
+        }
+        else if(object->isA("::fwData::Reconstruction"))
+        {
+            helper.add("reconstruction", object);
         }
+        else if(object->isA("::fwData::Resection"))
+        {
+            helper.add("resection", object);
+        }
+        else if(object->isA("::fwData::ResectionDB"))
+        {
+            helper.add("resectionDB", object);
+        }
+        else if(object->isA("::fwData::Plane"))
+        {
+            helper.add("plane", object);
+        }
+        else if(object->isA("::fwData::PlaneList"))
+        {
+            helper.add("planeList", object);
+        }
+        helper.notify();
     }
 }
 
-
-//-----------------------------------------------------------------------------
-
 //-----------------------------------------------------------------------------
 
 void SDrop::starting()  throw ( ::fwTools::Failed )
@@ -100,7 +99,8 @@ void SDrop::starting()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void SDrop::stopping()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -112,17 +112,20 @@ void SDrop::configuring()  throw ( ::fwTools::Failed )
 //-----------------------------------------------------------------------------
 
 void SDrop::reconfiguring()  throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void SDrop::updating() throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void SDrop::info( std::ostream &_sstream )
-{}
+void SDrop::info( std::ostream& _sstream )
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromSlot.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromSlot.cpp
new file mode 100644
index 0000000..ed1aa75
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromSlot.cpp
@@ -0,0 +1,195 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlSelection/updater/SObjFromSlot.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+namespace ctrlSelection
+{
+
+namespace updater
+{
+
+const ::fwCom::Slots::SlotKeyType SObjFromSlot::s_ADD_OR_SWAP_SLOT       = "addOrSwap";
+const ::fwCom::Slots::SlotKeyType SObjFromSlot::s_ADD_SLOT               = "add";
+const ::fwCom::Slots::SlotKeyType SObjFromSlot::s_SWAP_OBJ_SLOT          = "swapObj";
+const ::fwCom::Slots::SlotKeyType SObjFromSlot::s_REMOVE_SLOT            = "remove";
+const ::fwCom::Slots::SlotKeyType SObjFromSlot::s_REMOVE_IF_PRESENT_SLOT = "removeIfPresent";
+
+static const std::string s_OBJECT = "object";
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::SObjFromSlot, ::fwData::Composite );
+
+//-----------------------------------------------------------------------------
+
+SObjFromSlot::SObjFromSlot() throw()
+{
+    m_slots(s_ADD_OR_SWAP_SLOT, &SObjFromSlot::addOrSwap, this)
+        (s_ADD_SLOT, &SObjFromSlot::add, this)
+        (s_SWAP_OBJ_SLOT, &SObjFromSlot::swap, this)
+        (s_REMOVE_SLOT, &SObjFromSlot::remove, this)
+        (s_REMOVE_IF_PRESENT_SLOT, &SObjFromSlot::removeIfPresent, this);
+
+    m_slots.setWorker(m_associatedWorker);
+}
+
+//-----------------------------------------------------------------------------
+
+SObjFromSlot::~SObjFromSlot() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::configuring()  throw ( ::fwTools::Failed )
+{
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+
+    if(!this->isVersion2())
+    {
+        ConfigType cfg = m_configuration->findConfigurationElement("compositeKey");
+        SLM_ASSERT("Missing element 'compositeKey'", cfg );
+
+        m_compositeKey = cfg->getValue();
+        SLM_ASSERT("Missing 'compositeKey' value", !m_compositeKey.empty());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::starting()  throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::stopping()  throw ( ::fwTools::Failed )
+{
+}
+
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::updating() throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::info( std::ostream& _sstream )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::add(::fwData::Object::sptr obj)
+{
+    if(this->isVersion2())
+    {
+        this->setOutput(s_OBJECT, obj);
+    }
+    else
+    {
+        ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+        helper.add(m_compositeKey, obj);
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::addOrSwap(::fwData::Object::sptr obj)
+{
+    if(this->isVersion2())
+    {
+        this->setOutput(s_OBJECT, obj);
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwDataTools::helper::Composite helper(composite);
+        if (composite->find(m_compositeKey) == composite->end())
+        {
+            helper.add(m_compositeKey, obj);
+        }
+        else
+        {
+            helper.swap(m_compositeKey, obj);
+        }
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::swap(::fwData::Object::sptr obj)
+{
+    if(this->isVersion2())
+    {
+        this->setOutput(s_OBJECT, obj);
+    }
+    else
+    {
+        ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+        helper.swap(m_compositeKey, obj);
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::remove()
+{
+    if(this->isVersion2())
+    {
+        this->setOutput(s_OBJECT, nullptr);
+    }
+    else
+    {
+        ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+        helper.remove(m_compositeKey);
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromSlot::removeIfPresent()
+{
+    if(this->isVersion2())
+    {
+        this->setOutput(s_OBJECT, nullptr);
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        ::fwDataTools::helper::Composite helper(composite);
+        if (composite->find(m_compositeKey) != composite->end())
+        {
+            helper.remove(m_compositeKey);
+        }
+        helper.notify();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+
+} // updater
+} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromUid.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromUid.cpp
new file mode 100644
index 0000000..70ec9eb
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SObjFromUid.cpp
@@ -0,0 +1,168 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlSelection/updater/SObjFromUid.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwServices/macros.hpp>
+
+
+namespace ctrlSelection
+{
+
+namespace updater
+{
+
+const ::fwCom::Slots::SlotKeyType SObjFromUid::s_ADD_OR_SWAP_SLOT       = "addOrSwap";
+const ::fwCom::Slots::SlotKeyType SObjFromUid::s_ADD_SLOT               = "add";
+const ::fwCom::Slots::SlotKeyType SObjFromUid::s_SWAP_OBJ_SLOT          = "swapObj";
+const ::fwCom::Slots::SlotKeyType SObjFromUid::s_REMOVE_SLOT            = "remove";
+const ::fwCom::Slots::SlotKeyType SObjFromUid::s_REMOVE_IF_PRESENT_SLOT = "removeIfPresent";
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::SObjFromUid, ::fwData::Composite );
+
+//-----------------------------------------------------------------------------
+
+SObjFromUid::SObjFromUid() throw()
+{
+    m_slots(s_ADD_OR_SWAP_SLOT, &SObjFromUid::addOrSwap, this)
+        (s_ADD_SLOT, &SObjFromUid::add, this)
+        (s_SWAP_OBJ_SLOT, &SObjFromUid::swap, this)
+        (s_REMOVE_SLOT, &SObjFromUid::remove, this)
+        (s_REMOVE_IF_PRESENT_SLOT, &SObjFromUid::removeIfPresent, this);
+
+    m_slots.setWorker(m_associatedWorker);
+}
+
+//-----------------------------------------------------------------------------
+
+SObjFromUid::~SObjFromUid() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::configuring()  throw ( ::fwTools::Failed )
+{
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+
+    ConfigType objCfg = m_configuration->findConfigurationElement("uid");
+    SLM_ASSERT("Missing element 'uid'", objCfg );
+
+    m_objectUid = objCfg->getValue();
+
+    SLM_ASSERT("Missing 'uid' value", !m_objectUid.empty());
+
+
+    ConfigType cfg = m_configuration->findConfigurationElement("compositeKey");
+
+    SLM_ASSERT("Missing element 'compositeKey'", cfg );
+
+    m_compositeKey = cfg->getValue();
+
+    SLM_ASSERT("Missing 'compositeKey' value", !m_compositeKey.empty());
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::starting()  throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::stopping()  throw ( ::fwTools::Failed )
+{
+}
+
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::updating() throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::info( std::ostream& _sstream )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::add()
+{
+    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(m_objectUid));
+    ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+    helper.add(m_compositeKey, obj);
+    helper.notify();
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::addOrSwap()
+{
+    ::fwData::Object::sptr obj          = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(m_objectUid));
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    ::fwDataTools::helper::Composite helper(composite);
+    if (composite->find(m_compositeKey) == composite->end())
+    {
+        helper.add(m_compositeKey, obj);
+    }
+    else
+    {
+        helper.swap(m_compositeKey, obj);
+    }
+    helper.notify();
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::swap()
+{
+    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(m_objectUid));
+    ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+    helper.swap(m_compositeKey, obj);
+    helper.notify();
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::remove()
+{
+    ::fwDataTools::helper::Composite helper( this->getObject< ::fwData::Composite >() );
+    helper.remove(m_compositeKey);
+    helper.notify();
+}
+
+//-----------------------------------------------------------------------------
+
+void SObjFromUid::removeIfPresent()
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    ::fwDataTools::helper::Composite helper(composite);
+    if (composite->find(m_compositeKey) != composite->end())
+    {
+        helper.remove(m_compositeKey);
+    }
+    helper.notify();
+}
+
+//-----------------------------------------------------------------------------
+
+
+} // updater
+} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.cpp
deleted file mode 100644
index 5c545b5..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.cpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwComEd/ModelSeriesMsg.hpp>
-
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include "ctrlSelection/updater/SReconstructionFromModelSeriesUpdater.hpp"
-
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::SReconstructionFromModelSeriesUpdater, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-SReconstructionFromModelSeriesUpdater::SReconstructionFromModelSeriesUpdater() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-SReconstructionFromModelSeriesUpdater::~SReconstructionFromModelSeriesUpdater() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    for (   ManagedEvents::iterator it = m_managedEvents.begin();
-            it != m_managedEvents.end();
-            ++it )
-    {
-        // First element of tuple ( it->get<0>() ) is the event, test if message correspond to a defined event
-        if( _msg->hasEvent( it->get<0>() ) )
-        {
-            ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast( _msg->getSubject().lock() );
-            SLM_ASSERT(obj,"Sorry, the subject of message is not a ::fwData::Object");
-
-            // Test if we manage this event from this object message uid ( it->get<1>() )
-            if( it->get<1>() == "*" || obj->getID() == it->get<1>() )
-            {
-                ::fwData::Reconstruction::sptr reconst;
-                ActionType action = it->get<3>();
-                if( action != REMOVE && action != REMOVE_IF_PRESENT && action != DO_NOTHING)
-                {
-                    reconst = this->getReconstruction(_msg);
-                }
-                // Udapte the composite object referenced by the composite key ( it->get<2>() )
-                this->updateComposite(composite, reconst, it->get<2>(), it->get<3>() );
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Reconstruction::sptr SReconstructionFromModelSeriesUpdater::getReconstruction(::fwServices::ObjectMsg::csptr msg)
-{
-    ::fwData::Reconstruction::sptr reconst;
-    ::fwComEd::ModelSeriesMsg::csptr pModelSeriesMsg = ::fwComEd::ModelSeriesMsg::dynamicConstCast( msg );
-    SLM_FATAL_IF("Received message isn't a ModelSeriesMsg", !pModelSeriesMsg);
-
-    SLM_ASSERT("Sorry, there's not NEW_RECONSTRUCTION_SELECTED in ModelSeriesMsg", pModelSeriesMsg->hasEvent( ::fwComEd::ModelSeriesMsg::NEW_RECONSTRUCTION_SELECTED ));
-    ::fwData::Object::csptr dataInfo = pModelSeriesMsg->getDataInfo(::fwComEd::ModelSeriesMsg::NEW_RECONSTRUCTION_SELECTED);
-    SLM_ASSERT("Sorry, there is no dataInfo", dataInfo);
-    ::fwData::String::csptr reconstructionSelectedUID = ::fwData::String::dynamicConstCast( dataInfo ) ;
-    SLM_ASSERT("Sorry,  there is no reconstruction selected", reconstructionSelectedUID);
-    reconst =  ::fwData::Reconstruction::dynamicCast( ::fwTools::fwID::getObject(reconstructionSelectedUID->value() ));
-
-    return reconst;
-}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::starting()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->configureManagedEvents(m_configuration);
-}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::reconfiguring()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void SReconstructionFromModelSeriesUpdater::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace updater
-} // namespace ctrlSelection
-
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/STranslate.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/STranslate.cpp
new file mode 100644
index 0000000..1fcd8a5
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/STranslate.cpp
@@ -0,0 +1,219 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlSelection/updater/STranslate.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <fwServices/macros.hpp>
+
+
+#include <boost/property_tree/xml_parser.hpp>
+#include <boost/foreach.hpp>
+
+namespace ctrlSelection
+{
+
+namespace updater
+{
+
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT    = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects";
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::STranslate,
+                         ::fwData::Composite );
+
+//-----------------------------------------------------------------------------
+
+STranslate::STranslate() throw()
+{
+    newSlot(s_ADD_OBJECTS_SLOT, &STranslate::addObjects, this);
+    newSlot(s_CHANGE_OBJECTS_SLOT, &STranslate::changeObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &STranslate::removeObjects, this);
+}
+
+//-----------------------------------------------------------------------------
+
+STranslate::~STranslate() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void STranslate::starting()  throw ( ::fwTools::Failed )
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+
+    if (!m_sourceCompositeID.empty())
+    {
+        ::fwData::Composite::sptr source;
+        source = ::fwData::Composite::dynamicCast(::fwTools::fwID::getObject(m_sourceCompositeID));
+        SLM_ASSERT("Source composite is missing '" + m_sourceCompositeID + "'", source);
+
+        m_connections.connect(source, this->getSptr(), this->getObjSrvConnections() );
+
+        for( const ManagedTranslations::value_type& trans :  m_managedTranslations )
+        {
+            const std::string& fromKey = trans.first;
+            const std::string& toKey   = trans.second;
+
+            ::fwData::Composite::const_iterator iter = source->find(fromKey);
+            if (iter != source->end())
+            {
+                this->updateComposite(composite, iter->second, toKey, ADD_OR_SWAP );
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void STranslate::stopping()  throw ( ::fwTools::Failed )
+{
+    m_connections.disconnect();
+}
+
+//-----------------------------------------------------------------------------
+
+void STranslate::configuring()  throw ( ::fwTools::Failed )
+{
+    const ::fwServices::IService::ConfigType conf = this->getConfigTree().get_child("service");
+
+    if (conf.count("source"))
+    {
+        const ::fwServices::IService::ConfigType& sourceCfg = conf.get_child("source");
+        m_sourceCompositeID = sourceCfg.get_value<std::string>();
+        SLM_ASSERT("Source composite is not defined", !m_sourceCompositeID.empty());
+    }
+
+    SLM_ASSERT("Problem with configuration for STranslate type, missing element \"translate\"",
+               conf.count("translate") > 0);
+
+    OSLM_DEBUG( "nb of translations = " << conf.count("translate") );
+    m_managedTranslations.clear();
+    BOOST_FOREACH( const ::fwServices::IService::ConfigType::value_type &v,  conf.equal_range("translate") )
+    {
+        const ::fwServices::IService::ConfigType& translate = v.second;
+        const ::fwServices::IService::ConfigType xmlattr    = translate.get_child("<xmlattr>");
+
+        SLM_FATAL_IF( "The attribute \"fromKey\" is missing, it represents the key of the object in the source "
+                      "composite that will be translated", xmlattr.count("fromKey") != 1 );
+        SLM_FATAL_IF("The attribute \"toKey\" is missing, it represents the the key of the object in the current"
+                     "composite that will contain the translation", xmlattr.count("toKey") != 1);
+
+        std::string fromKey = xmlattr.get<std::string>("fromKey");
+        std::string toKey   = xmlattr.get<std::string>("toKey");
+
+        OSLM_INFO(
+            "Manage translation from "<< fromKey << " to "<< toKey <<
+            " in my composite.");
+        m_managedTranslations[fromKey] = toKey;
+    }
+
+}
+
+//-----------------------------------------------------------------------------
+
+void STranslate::reconfiguring()  throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void STranslate::updating() throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void STranslate::info( std::ostream& _sstream )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void STranslate::addObjects(::fwData::Composite::ContainerType objects)
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    for ( ManagedTranslations::value_type elt : m_managedTranslations )
+    {
+        const std::string& fromKey = elt.first;
+        const std::string& toKey   = elt.second;
+
+        ::fwData::Composite::ContainerType::iterator iter = objects.find(fromKey);
+        if (iter != objects.end())
+        {
+            // Udpate the composite object referenced by the composite key
+            this->updateComposite(composite, iter->second, toKey, ADD );
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void STranslate::changeObjects(::fwData::Composite::ContainerType newObjects,
+                               ::fwData::Composite::ContainerType oldObjects)
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    for ( ManagedTranslations::value_type elt : m_managedTranslations )
+    {
+        const std::string& fromKey = elt.first;
+        const std::string& toKey   = elt.second;
+
+        ::fwData::Composite::ContainerType::iterator iter = newObjects.find(fromKey);
+        if (iter != newObjects.end())
+        {
+            // Udpate the composite object referenced by the composite key
+            this->updateComposite(composite, iter->second, toKey, SWAP );
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void STranslate::removeObjects(::fwData::Composite::ContainerType objects)
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    for ( ManagedTranslations::value_type elt : m_managedTranslations )
+    {
+        const std::string& fromKey = elt.first;
+        const std::string& toKey   = elt.second;
+
+        ::fwData::Composite::ContainerType::iterator iter = objects.find(fromKey);
+        if (iter != objects.end())
+        {
+            // Udpate the composite object referenced by the composite key
+            this->updateComposite(composite, iter->second, toKey, REMOVE );
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType STranslate::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT ) );
+
+    return connections;
+}
+
+//-----------------------------------------------------------------------------
+
+} // updater
+} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/TranslateUpdater.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/TranslateUpdater.cpp
deleted file mode 100644
index e789b7f..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/updater/TranslateUpdater.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Composite.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-
-#include "ctrlSelection/updater/TranslateUpdater.hpp"
-
-#include <boost/property_tree/xml_parser.hpp>
-namespace ctrlSelection
-{
-
-namespace updater
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IUpdaterSrv, ::ctrlSelection::updater::TranslateUpdater, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-TranslateUpdater::TranslateUpdater() throw()
-{
-    //handlingEventOff::fwComEd::CompositeMsg::ADDED_KEYS);
-    //handlingEventOff::fwComEd::CompositeMsg::CHANGED_KEYS);
-    //handlingEventOff::fwComEd::CompositeMsg::REMOVED_KEYS);
-}
-
-//-----------------------------------------------------------------------------
-
-TranslateUpdater::~TranslateUpdater() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(_msg);
-    SLM_ASSERT("Sorry, this service only manage compositeMsg", compositeMsg);
-
-    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast( _msg->getSubject().lock() );
-    SLM_ASSERT(obj,"Sorry, the subject of message is not a ::fwData::Object");
-
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    for (   ManagedTranslations::const_iterator it = m_managedTranslations.begin();
-            it != m_managedTranslations.end();
-            ++it )
-    {
-        const std::string &fwid     = it->get<0>();
-        const std::string &fromKey  = it->get<1>();
-        const std::string &toKey    = it->get<2>();
-
-        // Test if we manage this event from this object message uid
-        if( obj->getID() == fwid)
-        {
-            //  test if message correspond to a defined event
-            if( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) )
-            {
-                ::fwData::Composite::sptr addedFields = compositeMsg->getAddedKeys();
-                if (addedFields->find(fromKey) != addedFields->end())
-                {
-                    // Udpate the composite object referenced by the composite key
-                    this->updateComposite(composite, (*addedFields)[fromKey] , toKey , ADD );
-                }
-            }
-            else if (compositeMsg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS ))
-            {
-                ::fwData::Composite::sptr swappedFields = compositeMsg->getNewChangedKeys();
-                if (swappedFields->find(fromKey) != swappedFields->end())
-                {
-                    // Udpate the composite object referenced by the composite key
-                    this->updateComposite(composite, (*swappedFields)[fromKey] , toKey , SWAP );
-                }
-            }
-            else if( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS ))
-            {
-                ::fwData::Composite::sptr removedFields = compositeMsg->getRemovedKeys();
-                if (removedFields->find(fromKey) != removedFields->end())
-                {
-                    // Udpate the composite object referenced by the composite key
-                    this->updateComposite(composite, ::fwData::Object::sptr() , toKey , REMOVE );
-                }
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::starting()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-
-    BOOST_FOREACH( const ManagedTranslations::value_type & trans, m_managedTranslations )
-    {
-        const std::string &fwid     = trans.get<0>();
-        const std::string &fromKey  = trans.get<1>();
-        const std::string &toKey    = trans.get<2>();
-
-        ::fwData::Composite::sptr compositeFrom = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject(fwid) );
-        if (compositeFrom)
-        {
-            ::fwData::Composite::const_iterator iter = compositeFrom->find(fromKey);
-            if (iter != compositeFrom->end())
-            {
-                this->updateComposite(composite, iter->second , toKey , ADD_OR_SWAP );
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::configuring()  throw ( ::fwTools::Failed )
-{
-    const ::fwServices::IService::ConfigType conf = this->getConfigTree().get_child("service");
-
-    SLM_ASSERT("Problem with configuration for ObjFromMsgUpdaterSrv type, missing element \"translate\"",
-               conf.count("translate") > 0);
-
-    OSLM_DEBUG( "nb of translations = " << conf.count("translate") );
-    m_managedTranslations.clear();
-    BOOST_FOREACH( const ::fwServices::IService::ConfigType::value_type &v, conf.equal_range("translate") )
-    {
-        const ::fwServices::IService::ConfigType &translate = v.second;
-        const ::fwServices::IService::ConfigType xmlattr = translate.get_child("<xmlattr>");
-
-        SLM_FATAL_IF( "Sorry, attribute \"fromKey\" is missing", xmlattr.count("fromKey") != 1 );
-        SLM_FATAL_IF( "Sorry, attribute \"toKey\" is missing", xmlattr.count("toKey") != 1 );
-        SLM_FATAL_IF( "Sorry, attribute \"fromUID\" is missing", xmlattr.count("fromUID") != 1 );
-
-        std::string fromKey = xmlattr.get<std::string>("fromKey");
-        std::string toKey   = xmlattr.get<std::string>("toKey");
-        std::string fromUID = xmlattr.get<std::string>("fromUID");
-
-        OSLM_INFO( "Manage translation from this object "<< fromUID <<", from "<< fromKey << " to "<< toKey <<" in my composite.");
-        ::boost::tuple< std::string, std::string, std::string > managedTranslation (fromUID, fromKey, toKey);
-        m_managedTranslations.push_back( managedTranslation );
-    }
-
-}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::reconfiguring()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void TranslateUpdater::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // updater
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/GraphWrapperSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/GraphWrapperSrv.cpp
deleted file mode 100644
index e484ca6..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/GraphWrapperSrv.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwData/Graph.hpp>
-
-#include <fwComEd/GraphMsg.hpp>
-
-
-#include "ctrlSelection/wrapper/GraphWrapperSrv.hpp"
-#include <fwServices/IEditionService.hpp>
-
-
-fwServicesRegisterMacro( ::ctrlSelection::IWrapperSrv, ::ctrlSelection::wrapper::GraphWrapperSrv, ::fwData::Graph ) ;
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-
-//-----------------------------------------------------------------------------
-
-GraphWrapperSrv::GraphWrapperSrv() throw()
-{
-    //TODO addNewHandledEvent( ::fwServices:: ObjectMsg::NEW_OBJECT );
-    //handlingEventOff ::fwServices::ObjectMsg::UPDATED_OBJECT );
-    //TODO addNewHandledEvent( ::fwServices:: ObjectMsg::DELETE_OBJECT );
-}
-
-//-----------------------------------------------------------------------------
-
-GraphWrapperSrv::~GraphWrapperSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void GraphWrapperSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    if ( message->hasEvent( ::fwServices::ObjectMsg::UPDATED_OBJECT ) )
-    {
-        assert( message->getDataInfo( ::fwServices::ObjectMsg::UPDATED_OBJECT   ) == this->getObject() );
-        fwComEd::GraphMsg::sptr msg = fwComEd::GraphMsg::New();
-        msg->addEvent( fwComEd::GraphMsg::NEW_GRAPH , this->getObject() );
-        ::fwServices::IEditionService::notify(this->getSptr(), this->getObject(), msg);
-    }
-    //TODO other event
-}
-
-//-----------------------------------------------------------------------------
-
-} // wrapper
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/ImageWrapperSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/ImageWrapperSrv.cpp
deleted file mode 100644
index d66cba2..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/ImageWrapperSrv.cpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwData/Image.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-
-
-#include "ctrlSelection/wrapper/ImageWrapperSrv.hpp"
-#include <fwServices/IEditionService.hpp>
-
-
-fwServicesRegisterMacro( ::ctrlSelection::IWrapperSrv, ::ctrlSelection::wrapper::ImageWrapperSrv, ::fwData::Image ) ;
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-
-//-----------------------------------------------------------------------------
-
-ImageWrapperSrv::ImageWrapperSrv() throw()
-{
-    //TODO addNewHandledEvent( ::fwServices:: ObjectMsg::NEW_OBJECT );
-    //handlingEventOff ::fwServices::ObjectMsg::UPDATED_OBJECT );
-    //TODO addNewHandledEvent( ::fwServices:: ObjectMsg::DELETE_OBJECT );
-}
-
-//-----------------------------------------------------------------------------
-
-ImageWrapperSrv::~ImageWrapperSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ImageWrapperSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    if ( message->hasEvent( ::fwServices:: ObjectMsg::UPDATED_OBJECT ) )
-    {
-        assert( message->getDataInfo( ::fwServices:: ObjectMsg::UPDATED_OBJECT   ) == this->getObject() );
-        fwComEd::ImageMsg::sptr msg = fwComEd::ImageMsg::New();
-        msg->addEvent( fwComEd::ImageMsg::NEW_IMAGE , this->getObject() );
-        msg->addEvent( fwComEd::ImageMsg::BUFFER , this->getObject() );
-        ::fwServices::IEditionService::notify(this->getSptr(), this->getObject(), msg);
-    }
-    //TODO other event
-}
-
-//-----------------------------------------------------------------------------
-
-} // wrapper
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/MsgForwarderSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/MsgForwarderSrv.cpp
deleted file mode 100644
index 00326d1..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/MsgForwarderSrv.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include "ctrlSelection/wrapper/MsgForwarderSrv.hpp"
-
-namespace ctrlSelection
-{
-namespace wrapper
-{
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IWrapperSrv, ::ctrlSelection::wrapper::MsgForwarderSrv, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-MsgForwarderSrv::MsgForwarderSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-MsgForwarderSrv::~MsgForwarderSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-
-    BOOST_FOREACH( EventType item, m_managedEvents)
-    {
-        std::string compositeKey = item.get<0>();
-        std::string event        = item.get<1>();
-        std::string fromUID      = item.get<2>();
-        std::string msgType      = item.get<3>();
-        // First element of tuple ( it->get<0>() ) is the event, test if message correspond to a defined event
-        if(  message->isA(msgType))
-        {
-            if(composite->find(compositeKey) != composite->end())
-            {
-                ::fwData::Object::sptr object = (*composite)[compositeKey];
-                ::fwData::Object::sptr objMsg = message->getSubject().lock();
-                // Test if we manage this event from this object message uid ( it->get<1>() )
-                if( objMsg->getID() == fromUID || fromUID == "*")
-                {
-                    if(event == "*" || message->hasEvent( event ) )
-                    {
-                        ::fwServices::IEditionService::notify( this->getSptr(), object, ::fwServices::ObjectMsg::constCast(message) );
-                    }
-                }
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::starting()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::stopping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::swapping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    ::fwRuntime::ConfigurationElementContainer handleEvents = m_configuration->findAllConfigurationElement("forward");
-
-    SLM_ASSERT("Problem with configuration for MsgForwarderSrv type, missing element \"forward\"", handleEvents.size() != 0 );
-    m_managedEvents.clear();
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElementContainer::Container::value_type item ,handleEvents.getElements())
-    {
-        SLM_FATAL_IF( "Sorry, attribute \"compositeKey\" is missing", !item->hasAttribute("compositeKey") );
-        std::string compositeKey =  item->getExistingAttributeValue("compositeKey");
-
-        SLM_FATAL_IF( "Sorry, attribute \"onEvent\" is missing", !item->hasAttribute("onEvent") );
-        std::string onEvent =  item->getExistingAttributeValue("onEvent");
-
-        SLM_FATAL_IF( "Sorry, attribute \"fromUID\" is missing", !item->hasAttribute("fromUID") );
-        std::string fromUID =  item->getExistingAttributeValue("fromUID");
-
-        SLM_FATAL_IF( "Sorry, attribute \"typeMsg\" is missing", !item->hasAttribute("msgType") );
-        std::string msgType =  item->getExistingAttributeValue("msgType");
-
-        OSLM_INFO( "Manage event "<< onEvent <<" from this object "<< fromUID <<".");
-        EventType managedEvent (compositeKey, onEvent, fromUID, msgType);
-        m_managedEvents.push_back( managedEvent );
-        //addNewHandledEvent( onEvent );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void MsgForwarderSrv::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // wrapper
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/MsgWrapperSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/MsgWrapperSrv.cpp
deleted file mode 100644
index 5c225a8..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/MsgWrapperSrv.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwComEd/GraphMsg.hpp>
-
-
-#include "ctrlSelection/wrapper/MsgWrapperSrv.hpp"
-#include <fwServices/IEditionService.hpp>
-
-
-fwServicesRegisterMacro( ::ctrlSelection::IWrapperSrv, ::ctrlSelection::wrapper::MsgWrapperSrv, ::fwData::Object ) ;
-
-namespace ctrlSelection
-{
-
-namespace wrapper
-{
-
-//-----------------------------------------------------------------------------
-
-MsgWrapperSrv::MsgWrapperSrv() throw()
-{
-    //TODO addNewHandledEvent( ::fwServices:: ObjectMsg::NEW_OBJECT );
-    //handlingEventOff ::fwServices::ObjectMsg::UPDATED_OBJECT );
-    //TODO addNewHandledEvent( ::fwServices:: ObjectMsg::DELETE_OBJECT );
-}
-
-//-----------------------------------------------------------------------------
-
-MsgWrapperSrv::~MsgWrapperSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MsgWrapperSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    ::fwRuntime::ConfigurationElementContainer handleEvents = m_configuration->findAllConfigurationElement("wrapper");
-
-    SLM_ASSERT("Problem with configuration for ObjToCompositeMsgForwarderSrv type, missing element \"wrapper\"", handleEvents.size() != 0 );
-    m_managedEvents.clear();
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElementContainer::Container::value_type item ,handleEvents.getElements())
-    {
-        SLM_FATAL_IF( "Sorry, attribute \"onEvent\" is missing", !item->hasAttribute("onEvent") );
-        std::string onEvent =  item->getExistingAttributeValue("onEvent");
-
-        SLM_FATAL_IF( "Sorry, attribute \"toEvent\" is missing", !item->hasAttribute("toEvent") );
-        std::string toEvent =  item->getExistingAttributeValue("toEvent");
-
-        SLM_FATAL_IF( "Sorry, attribute \"toMsgType\" is missing", !item->hasAttribute("toMsgType") );
-        std::string msgType =  item->getExistingAttributeValue("toMsgType");
-
-        OSLM_INFO( "Manage event "<< onEvent <<" to " << toEvent << ".");
-        EventType managedEvent ( onEvent, toEvent, msgType);
-        m_managedEvents.push_back( managedEvent );
-        //addNewHandledEvent( onEvent );
-    }
-}
-//-----------------------------------------------------------------------------
-
-void MsgWrapperSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    BOOST_FOREACH( EventType item, m_managedEvents)
-    {
-        std::string onEvent      = item.get<0>();
-        std::string toEvent      = item.get<1>();
-        std::string msgType      = item.get<2>();
-
-        if(message->hasEvent( onEvent ))
-        {
-            ::fwServices::ObjectMsg::sptr wrappedMsg = ::fwServices::factory::message::New(msgType);
-            OSLM_ASSERT(msgType << " creation failed", wrappedMsg);
-            wrappedMsg->addEvent(toEvent, message->getDataInfo(onEvent));
-            ::fwServices::IEditionService::notify( this->getSptr(), this->getObject(), wrappedMsg);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-} // wrapper
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.cpp
deleted file mode 100644
index a8bdfe9..0000000
--- a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwData/Composite.hpp>
-
-
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-
-#include "ctrlSelection/wrapper/ObjToCompositeMsgForwarderSrv.hpp"
-
-namespace ctrlSelection
-{
-namespace wrapper
-{
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::ctrlSelection::IWrapperSrv, ::ctrlSelection::wrapper::ObjToCompositeMsgForwarderSrv, ::fwData::Composite ) ;
-
-//-----------------------------------------------------------------------------
-
-ObjToCompositeMsgForwarderSrv::ObjToCompositeMsgForwarderSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-ObjToCompositeMsgForwarderSrv::~ObjToCompositeMsgForwarderSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::receiving( ::fwServices::ObjectMsg::csptr message ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(message);
-    if (compositeMsg)
-    {
-        if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::ADDED_KEYS))
-        {
-            BOOST_FOREACH(::fwData::Composite::value_type elt, *compositeMsg->getAddedKeys())
-            {
-                std::string key = elt.first;
-                ::fwData::Object::sptr obj = elt.second;
-
-                ::fwCom::Connection connection;
-                connection = obj->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                     this->slot(::fwServices::IService::s_RECEIVE_SLOT));
-                m_objConnections[key] = connection;
-            }
-        }
-        else if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::CHANGED_KEYS))
-        {
-            BOOST_FOREACH(::fwData::Composite::value_type elt, *compositeMsg->getNewChangedKeys())
-            {
-                std::string key = elt.first;
-                ::fwData::Object::sptr obj = elt.second;
-
-                m_objConnections[key].disconnect();
-                ::fwCom::Connection connection;
-                connection = obj->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                    this->slot(::fwServices::IService::s_RECEIVE_SLOT));
-                m_objConnections[key] = connection;
-            }
-        }
-        else if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::REMOVED_KEYS))
-        {
-            BOOST_FOREACH(::fwData::Composite::value_type elt, *compositeMsg->getRemovedKeys())
-            {
-                std::string key = elt.first;
-
-                m_objConnections[key].disconnect();
-                m_objConnections.erase(key);
-            }
-        }
-    }
-    else
-    {
-        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-
-        BOOST_FOREACH( EventType item, m_managedEvents)
-        {
-            std::string fromKey      = item.get<0>();
-            std::string event        = item.get<1>();
-            std::string msgType      = item.get<2>();
-
-            if(  message->isA(msgType))
-            {
-                if(fromKey == "*" || (composite->find(fromKey) != composite->end() && (*composite)[fromKey] == message->getSubject().lock()))
-                {
-                    if(event == "*"  )
-                    {
-                        ::fwServices::IEditionService::notify( this->getSptr(), composite, ::fwServices::ObjectMsg::constCast(message) );
-                    }
-                    else if(message->hasEvent( event ))
-                    {
-
-                        ::fwServices::ObjectMsg::sptr forwardMsg = ::fwServices::factory::message::New(msgType);
-                        OSLM_ASSERT(msgType << " creation failed", forwardMsg);
-                        forwardMsg->addEvent(event, message->getDataInfo(event));
-                        ::fwServices::IEditionService::notify( this->getSptr(), composite, forwardMsg);
-                    }
-                }
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::starting()  throw ( ::fwTools::Failed )
-{
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-
-    BOOST_FOREACH(::fwData::Composite::value_type elt, *composite)
-    {
-        std::string key = elt.first;
-        ::fwData::Object::sptr obj = elt.second;
-
-        ::fwCom::Connection connection;
-        connection = obj->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                             this->slot(::fwServices::IService::s_RECEIVE_SLOT));
-        m_objConnections[key] = connection;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::stopping()  throw ( ::fwTools::Failed )
-{
-    BOOST_FOREACH(ObjConnectionMap::value_type elt, m_objConnections)
-    {
-        m_objConnections[elt.first].disconnect();
-    }
-    m_objConnections.clear();
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::swapping()  throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    ::fwRuntime::ConfigurationElementContainer handleEvents = m_configuration->findAllConfigurationElement("forward");
-
-    SLM_ASSERT("Problem with configuration for ObjToCompositeMsgForwarderSrv type, missing element \"forward\"", handleEvents.size() != 0 );
-    m_managedEvents.clear();
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElementContainer::Container::value_type item ,handleEvents.getElements())
-    {
-        SLM_FATAL_IF( "Sorry, attribute \"fromKey\" is missing", !item->hasAttribute("fromKey") );
-        std::string fromKey =  item->getExistingAttributeValue("fromKey");
-
-        SLM_FATAL_IF( "Sorry, attribute \"onEvent\" is missing", !item->hasAttribute("onEvent") );
-        std::string onEvent =  item->getExistingAttributeValue("onEvent");
-
-        SLM_FATAL_IF( "Sorry, attribute \"typeMsg\" is missing", !item->hasAttribute("msgType") );
-        std::string msgType =  item->getExistingAttributeValue("msgType");
-
-        OSLM_INFO( "Manage event "<< onEvent <<" from object " << fromKey << ".");
-        EventType managedEvent ( fromKey, onEvent, msgType);
-        m_managedEvents.push_back( managedEvent );
-        //addNewHandledEvent( onEvent );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::updating() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ObjToCompositeMsgForwarderSrv::info( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // wrapper
-} // ctrlSelection
diff --git a/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/SImageSignalForwarder.cpp b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/SImageSignalForwarder.cpp
new file mode 100644
index 0000000..4a09237
--- /dev/null
+++ b/Bundles/LeafCtrl/ctrlSelection/src/ctrlSelection/wrapper/SImageSignalForwarder.cpp
@@ -0,0 +1,458 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ctrlSelection/wrapper/SImageSignalForwarder.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Image.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/regex.hpp>
+#include <fwData/Composite.hpp>
+
+namespace ctrlSelection
+{
+namespace wrapper
+{
+
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_MODIFIED_SLOT              = "forwardModified";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_BUFFER_MODIFIED_SLOT       = "forwardBufferModified";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_LANDMARK_ADDED_SLOT        = "forwardLandmarkAdded";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_LANDMARK_REMOVED_SLOT      = "forwardLandmarkRemoved";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_LANDMARK_DISPLAYED_SLOT    = "forwardLandmarkDisplayed";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_DISTANCE_ADDED_SLOT        = "forwardDistanceAdded";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_DISTANCE_REMOVED_SLOT      = "forwardDistanceRemoved";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_DISTANCE_DISPLAYED_SLOT    = "forwardDistanceDisplayed";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_SLICE_INDEX_MODIFIED_SLOT  = "forwardSliceIndexModified";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_SLICE_TYPE_MODIFIED_SLOT   = "forwardSliceTypeModified";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_VISIBILITY_MODIFIED_SLOT   = "forwardVisibilityModified";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_TRANSPARENCY_MODIFIED_SLOT = "forwardTransparencyModified";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_ADDED_FIELDS_SLOT          = "forwardAddedFields";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_CHANGED_FIELDS_SLOT        = "forwardChangedFields";
+static const ::fwCom::Slots::SlotKeyType s_FORWARD_REMOVED_FIELDS_SLOT        = "forwardRemovedFields";
+
+static const ::fwServices::IService::KeyType s_SOURCE_INPUT = "source";
+static const ::fwServices::IService::KeyType s_TARGET_INPUT = "target";
+
+SImageSignalForwarder::AvailableConnectionMapType SImageSignalForwarder::m_availableConnection;
+
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::ctrlSelection::IWrapperSrv, ::ctrlSelection::wrapper::SImageSignalForwarder,
+                         ::fwData::Image );
+
+//-----------------------------------------------------------------------------
+
+SImageSignalForwarder::SImageSignalForwarder() throw()
+{
+    m_availableConnection[::fwData::Image::s_MODIFIED_SIG]              = s_FORWARD_MODIFIED_SLOT;
+    m_availableConnection[::fwData::Image::s_BUFFER_MODIFIED_SIG]       = s_FORWARD_BUFFER_MODIFIED_SLOT;
+    m_availableConnection[::fwData::Image::s_LANDMARK_ADDED_SIG]        = s_FORWARD_LANDMARK_ADDED_SLOT;
+    m_availableConnection[::fwData::Image::s_LANDMARK_REMOVED_SIG]      = s_FORWARD_LANDMARK_REMOVED_SLOT;
+    m_availableConnection[::fwData::Image::s_LANDMARK_DISPLAYED_SIG]    = s_FORWARD_LANDMARK_DISPLAYED_SLOT;
+    m_availableConnection[::fwData::Image::s_DISTANCE_ADDED_SIG]        = s_FORWARD_DISTANCE_ADDED_SLOT;
+    m_availableConnection[::fwData::Image::s_DISTANCE_REMOVED_SIG]      = s_FORWARD_DISTANCE_REMOVED_SLOT;
+    m_availableConnection[::fwData::Image::s_DISTANCE_DISPLAYED_SIG]    = s_FORWARD_DISTANCE_DISPLAYED_SLOT;
+    m_availableConnection[::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG]  = s_FORWARD_SLICE_INDEX_MODIFIED_SLOT;
+    m_availableConnection[::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG]   = s_FORWARD_SLICE_TYPE_MODIFIED_SLOT;
+    m_availableConnection[::fwData::Image::s_VISIBILITY_MODIFIED_SIG]   = s_FORWARD_VISIBILITY_MODIFIED_SLOT;
+    m_availableConnection[::fwData::Image::s_TRANSPARENCY_MODIFIED_SIG] = s_FORWARD_TRANSPARENCY_MODIFIED_SLOT;
+    m_availableConnection[::fwData::Object::s_ADDED_FIELDS_SIG]         = s_FORWARD_ADDED_FIELDS_SLOT;
+    m_availableConnection[::fwData::Object::s_CHANGED_FIELDS_SIG]       = s_FORWARD_CHANGED_FIELDS_SLOT;
+    m_availableConnection[::fwData::Object::s_REMOVED_FIELDS_SIG]       = s_FORWARD_REMOVED_FIELDS_SLOT;
+
+    newSlot(s_FORWARD_MODIFIED_SLOT, &SImageSignalForwarder::forwardModified, this);
+    newSlot(s_FORWARD_BUFFER_MODIFIED_SLOT, &SImageSignalForwarder::forwardBufferModified, this);
+    newSlot(s_FORWARD_LANDMARK_ADDED_SLOT, &SImageSignalForwarder::forwardLandmarkAdded, this);
+    newSlot(s_FORWARD_LANDMARK_REMOVED_SLOT, &SImageSignalForwarder::forwardLandmarkRemoved, this);
+    newSlot(s_FORWARD_LANDMARK_DISPLAYED_SLOT, &SImageSignalForwarder::forwardLandmarkDisplayed, this);
+    newSlot(s_FORWARD_DISTANCE_ADDED_SLOT, &SImageSignalForwarder::forwardDistanceAdded, this);
+    newSlot(s_FORWARD_DISTANCE_REMOVED_SLOT, &SImageSignalForwarder::forwardDistanceRemoved, this);
+    newSlot(s_FORWARD_DISTANCE_DISPLAYED_SLOT, &SImageSignalForwarder::forwardDistanceDisplayed, this);
+    newSlot(s_FORWARD_SLICE_INDEX_MODIFIED_SLOT, &SImageSignalForwarder::forwardSliceIndexModified, this);
+    newSlot(s_FORWARD_SLICE_TYPE_MODIFIED_SLOT, &SImageSignalForwarder::forwardSliceTypeModified, this);
+    newSlot(s_FORWARD_VISIBILITY_MODIFIED_SLOT, &SImageSignalForwarder::forwardVisibilityModified, this);
+    newSlot(s_FORWARD_TRANSPARENCY_MODIFIED_SLOT, &SImageSignalForwarder::forwardTransparencyModified, this);
+    newSlot(s_FORWARD_ADDED_FIELDS_SLOT, &SImageSignalForwarder::forwardAddedFields, this);
+    newSlot(s_FORWARD_CHANGED_FIELDS_SLOT, &SImageSignalForwarder::forwardChangedFields, this);
+    newSlot(s_FORWARD_REMOVED_FIELDS_SLOT, &SImageSignalForwarder::forwardRemovedFields, this);
+}
+
+//-----------------------------------------------------------------------------
+
+SImageSignalForwarder::~SImageSignalForwarder() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::configuring()  throw ( ::fwTools::Failed )
+{
+    if (!this->isVersion2())
+    {
+        ::fwRuntime::ConfigurationElement::sptr fromUidCfg = m_configuration->findConfigurationElement("fromUid");
+        if (fromUidCfg)
+        {
+            m_sourceImageUid = fromUidCfg->getValue();
+        }
+        ::fwRuntime::ConfigurationElement::sptr fromKeyCfg = m_configuration->findConfigurationElement("fromKey");
+        if (fromKeyCfg)
+        {
+            std::string src = fromKeyCfg->getValue();
+            ::boost::regex re("(.*)\\[(.*)\\]");
+            ::boost::smatch match;
+            std::string uid, key;
+
+            if( ::boost::regex_match(src, match, re) )
+            {
+                OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
+                uid.assign(match[1].first, match[1].second);
+                key.assign(match[2].first, match[2].second);
+            }
+            m_sourceCompoUid = uid;
+            m_sourceImageKey = key;
+        }
+
+        SLM_ASSERT("only one tag 'fromUid' or 'fromKey' must be defined.",
+                   (!m_sourceImageUid.empty() && m_sourceCompoUid.empty() && m_sourceImageKey.empty()) ||
+                   (m_sourceImageUid.empty() && !m_sourceCompoUid.empty() && !m_sourceImageKey.empty()));
+    }
+
+    std::vector< ::fwRuntime::ConfigurationElement::sptr > configs = m_configuration->find("forward");
+
+    for (auto cfg : configs)
+    {
+        std::string signal = cfg->getValue();
+        SLM_ASSERT("Signal '" + signal + "' is unknown.",
+                   m_availableConnection.find(signal) != m_availableConnection.end());
+        m_managedSignals.push_back(signal);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::starting()  throw ( ::fwTools::Failed )
+{
+    ::fwData::Image::csptr src;
+
+    if (!this->isVersion2())
+    {
+        if (!m_sourceImageUid.empty())
+        {
+            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_sourceImageUid);
+            src                         = ::fwData::Image::dynamicCast(obj);
+            SLM_ASSERT("Source image '" + m_sourceImageUid + "' is not found", src);
+        }
+        else
+        {
+            ::fwTools::Object::sptr obj     = ::fwTools::fwID::getObject(m_sourceCompoUid);
+            ::fwData::Composite::sptr compo = ::fwData::Composite::dynamicCast(obj);
+            src                             = compo->at< ::fwData::Image >(m_sourceImageKey);
+        }
+    }
+    else
+    {
+        src = this->getInput< ::fwData::Image >(s_SOURCE_INPUT);
+    }
+
+    for (auto signalKey: m_managedSignals)
+    {
+        m_connections.connect(src, signalKey, this->getSptr(), m_availableConnection[signalKey]);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::stopping()  throw ( ::fwTools::Failed )
+{
+    m_connections.disconnect();
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::swapping()  throw ( ::fwTools::Failed )
+{
+    this->stopping();
+    this->starting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::updating() throw ( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::info( std::ostream& _sstream )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardModified()
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }
+    auto sig = image->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardBufferModified()
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }
+    auto sig = image->signal< ::fwData::Image::BufferModifiedSignalType >(::fwData::Image::s_BUFFER_MODIFIED_SIG);
+    sig->asyncEmit();
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardLandmarkAdded(SPTR(::fwData::Point)point)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }
+    auto sig = image->signal< ::fwData::Image::LandmarkAddedSignalType >(::fwData::Image::s_LANDMARK_ADDED_SIG);
+    sig->asyncEmit(point);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardLandmarkRemoved(SPTR(::fwData::Point)point)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }
+    auto sig = image->signal< ::fwData::Image::LandmarkRemovedSignalType >(::fwData::Image::s_LANDMARK_REMOVED_SIG);
+    sig->asyncEmit(point);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardLandmarkDisplayed(bool display)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Image::LandmarkDisplayedSignalType >(
+        ::fwData::Image::s_LANDMARK_DISPLAYED_SIG);
+    sig->asyncEmit(display);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardDistanceAdded(SPTR(::fwData::PointList)pointList)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Image::DistanceAddedSignalType >(::fwData::Image::s_DISTANCE_ADDED_SIG);
+    sig->asyncEmit(pointList);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardDistanceRemoved(SPTR(::fwData::PointList)pointList)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig =
+        image->signal< ::fwData::Image::DistanceRemovedSignalType >(::fwData::Image::s_DISTANCE_REMOVED_SIG);
+    sig->asyncEmit(pointList);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardDistanceDisplayed(bool display)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Image::DistanceDisplayedSignalType >(
+        ::fwData::Image::s_DISTANCE_DISPLAYED_SIG);
+    sig->asyncEmit(display);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardSliceIndexModified(int axial, int frontal, int sagittal)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+        ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+    sig->asyncEmit(axial, frontal, sagittal);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardSliceTypeModified(int from, int to)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig =
+        image->signal< ::fwData::Image::SliceTypeModifiedSignalType >(::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG);
+    sig->asyncEmit(from, to);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardVisibilityModified(bool visibility)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig =
+        image->signal< ::fwData::Image::VisibilityModifiedSignalType >(::fwData::Image::s_VISIBILITY_MODIFIED_SIG);
+    sig->asyncEmit(visibility);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardTransparencyModified()
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Image::TransparencyModifiedSignalType >(
+        ::fwData::Image::s_TRANSPARENCY_MODIFIED_SIG);
+    sig->asyncEmit();
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardAddedFields(::fwData::Object::FieldsContainerType objects)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Object::AddedFieldsSignalType >(::fwData::Object::s_ADDED_FIELDS_SIG);
+    sig->asyncEmit(objects);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardChangedFields(::fwData::Object::FieldsContainerType newObjects,
+                                                 ::fwData::Object::FieldsContainerType oldObjects)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Object::ChangedFieldsSignalType >(::fwData::Object::s_CHANGED_FIELDS_SIG);
+    sig->asyncEmit(newObjects, oldObjects);
+}
+
+//-----------------------------------------------------------------------------
+
+void SImageSignalForwarder::forwardRemovedFields(::fwData::Object::FieldsContainerType objects)
+{
+    ::fwData::Image::csptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInput< ::fwData::Image >(s_TARGET_INPUT);
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }    auto sig = image->signal< ::fwData::Object::RemovedFieldsSignalType >(::fwData::Object::s_REMOVED_FIELDS_SIG);
+    sig->asyncEmit(objects);
+}
+
+//-----------------------------------------------------------------------------
+
+} // wrapper
+} // ctrlSelection
diff --git a/Bundles/LeafCtrl/monitor/CMakeLists.txt b/Bundles/LeafCtrl/monitor/CMakeLists.txt
index 5948e36..e76b06e 100644
--- a/Bundles/LeafCtrl/monitor/CMakeLists.txt
+++ b/Bundles/LeafCtrl/monitor/CMakeLists.txt
@@ -1,15 +1,7 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwRuntime
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
 
 if(CMAKE_SYSTEM_NAME MATCHES "Windows")
     #TODO write FindDbgHelp ...
-    target_link_libraries(${FWPROJECT_NAME} dbghelp)
+    fwLink(dbghelp)
 endif()
 
diff --git a/Bundles/LeafCtrl/monitor/Properties.cmake b/Bundles/LeafCtrl/monitor/Properties.cmake
index c189828..f2e9db6 100644
--- a/Bundles/LeafCtrl/monitor/Properties.cmake
+++ b/Bundles/LeafCtrl/monitor/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME monitor )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCore fwData fwGui fwMemory fwRuntime fwServices )
+set( DEPENDENCIES fwCore fwTools fwData fwGui fwMemory fwRuntime fwServices )
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafCtrl/monitor/bin/build.options b/Bundles/LeafCtrl/monitor/bin/build.options
deleted file mode 100644
index 90dc3a7..0000000
--- a/Bundles/LeafCtrl/monitor/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-TYPE     = 'bundle'
-VERSION  = '0-1'
-USE      = ['boost','libxml2']
-
-LIB      = [
-           'fwTools_0-1',
-           'fwCore_0-1',
-           'fwRuntime_0-3',
-           'fwData_0-1',
-           'fwServices_0-1',
-           'fwMemory_0-1',
-           'fwGui_0-1',
-           ]
-BUNDLES  = [ 'gui_0-1' ]
-
-if racy.renv.system() == 'windows':
-    USE += ['dbghelp']
-
-
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/Plugin.hpp b/Bundles/LeafCtrl/monitor/include/monitor/Plugin.hpp
index 63b59f4..1f92af8 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/Plugin.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/Plugin.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryConsumption.hpp b/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryConsumption.hpp
index 6a9776f..7e2270f 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryConsumption.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryConsumption.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,29 +20,29 @@ namespace action
 class MONITOR_CLASS_API MemoryConsumption : public  ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (MemoryConsumption)(  ::fwGui::IActionSrv ) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (MemoryConsumption)(  ::fwGui::IActionSrv ) );
 
     /// Does nothing
-    MONITOR_API MemoryConsumption() throw() ;
+    MONITOR_API MemoryConsumption() throw();
 
     /// Does nothing
-    MONITOR_API virtual ~MemoryConsumption() throw() ;
+    MONITOR_API virtual ~MemoryConsumption() throw();
 
-protected :
+protected:
 
     /**
      * @brief Implements configuring method derived from IService. .
      *
      * Sample of declaration configuration :
      *
-     * @verbatim
+     * @code{.xml}
          <service uid="myIncMemConsum"  type="::fwGui::IActionSrv"
             implementation="::monitor::action::MemoryConsumption" autoComChannel="no" >
             <config mode="increase" value="256" />
         </service>
-     @endverbatim
+       @endcode
      * With:
      * @li mode : increase or decrease.
      * @li value : optional, consuming memory size in Mo (in "increase" mode).
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryInfo.hpp b/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryInfo.hpp
index 746d961..145b4a7 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryInfo.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/action/MemoryInfo.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __MONITOR_MEMORYINFO_HPP__
-#define __MONITOR_MEMORYINFO_HPP__
+#ifndef __MONITOR_ACTION_MEMORYINFO_HPP__
+#define __MONITOR_ACTION_MEMORYINFO_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -20,17 +20,17 @@ namespace action
 class MONITOR_CLASS_API MemoryInfo : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (MemoryInfo)( ::fwGui::IActionSrv ) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (MemoryInfo)( ::fwGui::IActionSrv ) );
 
     /// Does nothing
-    MONITOR_API MemoryInfo() throw() ;
+    MONITOR_API MemoryInfo() throw();
 
     /// Does nothing
-    MONITOR_API virtual ~MemoryInfo() throw() ;
+    MONITOR_API virtual ~MemoryInfo() throw();
 
-protected :
+protected:
 
     /// Calls classic IAction methods to configure
     void configuring() throw (::fwTools::Failed);
@@ -49,5 +49,5 @@ protected :
 } // namespace action
 } // namespace monitor
 
-#endif // __MONITOR_MEMORYINFO_HPP__
+#endif // __MONITOR_ACTION_MEMORYINFO_HPP__
 
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/action/SDumpAll.hpp b/Bundles/LeafCtrl/monitor/include/monitor/action/SDumpAll.hpp
index c37fe4f..4eff296 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/action/SDumpAll.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/action/SDumpAll.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,15 +24,15 @@ class MONITOR_CLASS_API SDumpAll : public ::fwGui::IActionSrv
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SDumpAll)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SDumpAll)(::fwGui::IActionSrv) );
 
     /// Does nothing
-    MONITOR_API SDumpAll() throw() ;
+    MONITOR_API SDumpAll() throw();
 
     /// Does nothing
-    MONITOR_API virtual ~SDumpAll() throw() ;
+    MONITOR_API virtual ~SDumpAll() throw();
 
-protected :
+protected:
 
     /// Calls classic IAction methods to configure
     void configuring() throw (::fwTools::Failed);
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/action/fwMetrics.hpp b/Bundles/LeafCtrl/monitor/include/monitor/action/fwMetrics.hpp
index 6c27128..728dd48 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/action/fwMetrics.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/action/fwMetrics.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __MONITOR_FWMETRICS_HPP__
-#define __MONITOR_FWMETRICS_HPP__
+#ifndef __MONITOR_ACTION_FWMETRICS_HPP__
+#define __MONITOR_ACTION_FWMETRICS_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -22,15 +22,15 @@ class MONITOR_CLASS_API fwMetrics : public ::fwGui::IActionSrv
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (fwMetrics)( ::fwGui::IActionSrv ) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (fwMetrics)( ::fwGui::IActionSrv ) );
 
     /// Does nothing
-    MONITOR_API fwMetrics() throw() ;
+    MONITOR_API fwMetrics() throw();
 
     /// Does nothing
-    MONITOR_API virtual ~fwMetrics() throw() ;
+    MONITOR_API virtual ~fwMetrics() throw();
 
-protected :
+protected:
 
     /// Calls classic IAction methods to configure
     void configuring() throw (::fwTools::Failed);
@@ -49,5 +49,5 @@ protected :
 
 } // namespace monitor
 
-#endif //__MONITOR_FWMETRICS_HPP__
+#endif //__MONITOR_ACTION_FWMETRICS_HPP__
 
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/action/namespace.hpp b/Bundles/LeafCtrl/monitor/include/monitor/action/namespace.hpp
index 9e9e209..5cb4de7 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/action/namespace.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/action/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/config.hpp b/Bundles/LeafCtrl/monitor/include/monitor/config.hpp
deleted file mode 100644
index ed65fac..0000000
--- a/Bundles/LeafCtrl/monitor/include/monitor/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _MONITOR_CONFIG_HPP_
-#define _MONITOR_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef MONITOR_EXPORTS
-    #define MONITOR_API __declspec(dllexport)
-    #else
-    #define MONITOR_API __declspec(dllimport)
-    #endif
-
-    #define MONITOR_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef MONITOR_EXPORTS
-    #define MONITOR_API __attribute__ ((visibility("default")))
-    #define MONITOR_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define MONITOR_API __attribute__ ((visibility("hidden")))
-    #define MONITOR_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define MONITOR_API
-    #define MONITOR_CLASS_API
-
-#endif
-
-#endif // _MONITOR_CONFIG_HPP_
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/installSIGSEVBacktrace.hpp b/Bundles/LeafCtrl/monitor/include/monitor/installSIGSEVBacktrace.hpp
index cc6943f..bb81c4a 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/installSIGSEVBacktrace.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/installSIGSEVBacktrace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace monitor
 
 /**
  * @brief Function installing  a callback which print the backtrace on a SIGSEV and SIGUSR1 signal
- *for posix only intern use only for this bundle.
+ * for posix only intern use only for this bundle.
  */
 MONITOR_API void installSIGSEVBacktrace();
 
diff --git a/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp b/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp
index 79f99e1..e86fdad 100644
--- a/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp
+++ b/Bundles/LeafCtrl/monitor/include/monitor/namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __MONITORNAMESPACE_HPP__
-#define __MONITORNAMESPACE_HPP__
+#ifndef __MONITOR_NAMESPACE_HPP__
+#define __MONITOR_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace monitor contains tools for monitoring an application built with FW4SPL.
@@ -16,5 +16,5 @@ namespace monitor
 
 }
 
-#endif // __MONITORNAMESPACE_HPP__
+#endif // __MONITOR_NAMESPACE_HPP__
 
diff --git a/Bundles/LeafCtrl/monitor/rc/plugin.xml b/Bundles/LeafCtrl/monitor/rc/plugin.xml
index a8be2f5..1434533 100644
--- a/Bundles/LeafCtrl/monitor/rc/plugin.xml
+++ b/Bundles/LeafCtrl/monitor/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="monitor" class="::monitor::Plugin">
+<plugin id="monitor" class="::monitor::Plugin" version="@DASH_VERSION@" >
     <library name="monitor" />
     <requirement id="gui" />
 
diff --git a/Bundles/LeafCtrl/monitor/src/monitor/Plugin.cpp b/Bundles/LeafCtrl/monitor/src/monitor/Plugin.cpp
index baf0c4c..24494e5 100644
--- a/Bundles/LeafCtrl/monitor/src/monitor/Plugin.cpp
+++ b/Bundles/LeafCtrl/monitor/src/monitor/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,13 +17,14 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //------------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
-    SLM_TRACE_FUNC() ;
+    SLM_TRACE_FUNC();
 
     installSIGSEVBacktrace();
 }
@@ -31,7 +32,8 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
 //------------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryConsumption.cpp b/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryConsumption.cpp
index d946dc5..781eba8 100644
--- a/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryConsumption.cpp
+++ b/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryConsumption.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,11 +22,11 @@ namespace action
 {
 
 /// Static variable shared by both actions
-static std::vector< ::fwData::Array::sptr > memoryConsumer ;
+static std::vector< ::fwData::Array::sptr > memoryConsumer;
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::monitor::action::MemoryConsumption , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::MemoryConsumption, ::fwData::Object );
 
 //-----------------------------------------------------------------------------
 
@@ -38,31 +38,33 @@ void MemoryConsumption::pushNewArray(size_t memorySizeInBytes)
         ::fwData::Array::SizeType size(1, memorySizeInBytes);
         buffer->resize(::fwTools::Type::s_UINT8_TYPENAME, size, 1, true);
 
-        OSLM_INFO("Creating a fwData::array consuming "<< memorySizeInBytes/(1024*1024) << " Mo ") ;
+        OSLM_INFO("Creating a fwData::array consuming "<< memorySizeInBytes/(1024*1024) << " Mo ");
 
-        memoryConsumer.push_back( buffer ) ;
+        memoryConsumer.push_back( buffer );
     }
     catch( std::exception &e )
     {
-        std::stringstream msg ;
-        msg << "Cannot allocate buffer (256 Mo) :\n" << e.what() << std::endl ;
+        std::stringstream msg;
+        msg << "Cannot allocate buffer (256 Mo) :\n" << e.what() << std::endl;
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                            "Action increase memory",
-                            msg.str(),
-                            ::fwGui::dialog::IMessageDialog::CRITICAL);
+            "Action increase memory",
+            msg.str(),
+            ::fwGui::dialog::IMessageDialog::CRITICAL);
     }
 }
 
 //------------------------------------------------------------------------------
 
 MemoryConsumption::MemoryConsumption( ) throw() :
-        m_isIncreaseMode(true), m_memorySizeInBytes(1024*1024*256) // 256 Mo
-{}
+    m_isIncreaseMode(true), m_memorySizeInBytes(1024*1024*256)     // 256 Mo
+{
+}
 
 //------------------------------------------------------------------------------
 
 MemoryConsumption::~MemoryConsumption() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -70,14 +72,14 @@ void MemoryConsumption::updating() throw(::fwTools::Failed)
 {
     if(m_isIncreaseMode)
     {
-        this->pushNewArray(m_memorySizeInBytes) ;
+        this->pushNewArray(m_memorySizeInBytes);
     }
     else
     {
         if( !memoryConsumer.empty() )
         {
-            SLM_INFO("Removing one fwData::Array") ;
-            memoryConsumer.pop_back() ;
+            SLM_INFO("Removing one fwData::Array");
+            memoryConsumer.pop_back();
         }
     }
 }
@@ -100,7 +102,7 @@ void MemoryConsumption::configuring() throw (::fwTools::Failed)
     if(m_isIncreaseMode && consumptionCfg->hasAttribute("value"))
     {
         std::string value = consumptionCfg->getAttributeValue("value");
-        size_t sizeInMo = ::boost::lexical_cast<size_t>(value);
+        size_t sizeInMo   = ::boost::lexical_cast<size_t>(value);
         m_memorySizeInBytes = sizeInMo * 1024 * 1024;
     }
 }
diff --git a/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryInfo.cpp b/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryInfo.cpp
index 3ab366c..17af170 100644
--- a/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryInfo.cpp
+++ b/Bundles/LeafCtrl/monitor/src/monitor/action/MemoryInfo.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,17 +20,19 @@ namespace monitor
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::monitor::action::MemoryInfo , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::MemoryInfo, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
 MemoryInfo::MemoryInfo( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 MemoryInfo::~MemoryInfo() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -38,20 +40,20 @@ MemoryInfo::~MemoryInfo() throw()
 void MemoryInfo::updating( ) throw(::fwTools::Failed)
 {
     // Memory information
-    ::boost::uint64_t mo = 1024*1024;
-    ::boost::uint64_t totalSystemMemory     = ::fwMemory::tools::MemoryMonitorTools::getTotalSystemMemory();
-    ::boost::uint64_t freeSystemMemory      = ::fwMemory::tools::MemoryMonitorTools::getFreeSystemMemory();
-    ::boost::uint64_t usedProcessMemory     = ::fwMemory::tools::MemoryMonitorTools::getUsedProcessMemory();
-    ::boost::uint64_t estimateFreeMem       = ::fwMemory::tools::MemoryMonitorTools::estimateFreeMem();
+    ::boost::uint64_t mo                = 1024*1024;
+    ::boost::uint64_t totalSystemMemory = ::fwMemory::tools::MemoryMonitorTools::getTotalSystemMemory();
+    ::boost::uint64_t freeSystemMemory  = ::fwMemory::tools::MemoryMonitorTools::getFreeSystemMemory();
+    ::boost::uint64_t usedProcessMemory = ::fwMemory::tools::MemoryMonitorTools::getUsedProcessMemory();
+    ::boost::uint64_t estimateFreeMem   = ::fwMemory::tools::MemoryMonitorTools::estimateFreeMem();
 
     ::fwMemory::BufferManager::SizeType managedBufferSize = 0;
-    ::fwMemory::BufferManager::SizeType dumpedBufferSize = 0;
-    ::fwMemory::BufferManager::sptr manager = ::fwMemory::BufferManager::getDefault();
+    ::fwMemory::BufferManager::SizeType dumpedBufferSize  = 0;
+    ::fwMemory::BufferManager::sptr manager               = ::fwMemory::BufferManager::getDefault();
     if( manager )
     {
         ::fwMemory::BufferManager::BufferStats stats = manager->getBufferStats().get();
-        managedBufferSize = stats.totalManaged;
-        dumpedBufferSize  = stats.totalDumped;
+        managedBufferSize                            = stats.totalManaged;
+        dumpedBufferSize                             = stats.totalDumped;
     }
     std::stringstream stream;
     stream << "Total system memory = "  << totalSystemMemory/mo << " Mo" << std::endl;
@@ -63,9 +65,9 @@ void MemoryInfo::updating( ) throw(::fwTools::Failed)
 
     // Information message box
     ::fwGui::dialog::MessageDialog::showMessageDialog(
-            "MemoryInfo",
-            stream.str(),
-            ::fwGui::dialog::IMessageDialog::INFO);
+        "MemoryInfo",
+        stream.str(),
+        ::fwGui::dialog::IMessageDialog::INFO);
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafCtrl/monitor/src/monitor/action/SDumpAll.cpp b/Bundles/LeafCtrl/monitor/src/monitor/action/SDumpAll.cpp
index 4a2bc1a..5c5788e 100644
--- a/Bundles/LeafCtrl/monitor/src/monitor/action/SDumpAll.cpp
+++ b/Bundles/LeafCtrl/monitor/src/monitor/action/SDumpAll.cpp
@@ -1,38 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "monitor/action/SDumpAll.hpp"
 
 #include <fwCore/base.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
 
 #include <fwMemory/BufferManager.hpp>
 #include <fwMemory/BufferInfo.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
-
-#include "monitor/action/SDumpAll.hpp"
+#include <fwServices/macros.hpp>
 
 namespace monitor
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::monitor::action::SDumpAll , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::SDumpAll, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
 SDumpAll::SDumpAll( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SDumpAll::~SDumpAll() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -45,7 +45,7 @@ void SDumpAll::updating( ) throw(::fwTools::Failed)
     {
         buffInfoMap = buffManager->getBufferInfos().get();
     }
-    BOOST_FOREACH(::fwMemory::BufferManager::BufferInfoMapType::value_type elt, buffInfoMap)
+    for(::fwMemory::BufferManager::BufferInfoMapType::value_type elt :  buffInfoMap)
     {
         ::fwMemory::BufferInfo dumpBuffInfo = elt.second;
         bool loaded = dumpBuffInfo.loaded;
@@ -62,9 +62,9 @@ void SDumpAll::updating( ) throw(::fwTools::Failed)
     std::stringstream stream;
     stream << nbBuffDumped << " buffer dumped (" << nbBuffDumped <<"/"<<buffInfoMap.size()<<").";
     ::fwGui::dialog::MessageDialog::showMessageDialog(
-                        "Dump all",
-                        stream.str(),
-                        ::fwGui::dialog::IMessageDialog::INFO);
+        "Dump all",
+        stream.str(),
+        ::fwGui::dialog::IMessageDialog::INFO);
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafCtrl/monitor/src/monitor/action/fwMetrics.cpp b/Bundles/LeafCtrl/monitor/src/monitor/action/fwMetrics.cpp
index 039ff57..c42f482 100644
--- a/Bundles/LeafCtrl/monitor/src/monitor/action/fwMetrics.cpp
+++ b/Bundles/LeafCtrl/monitor/src/monitor/action/fwMetrics.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,7 +11,6 @@
 #include <fwData/registry/detail.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/message/detail.hpp>
 #include <fwServices/registry/ServiceFactory.hpp>
 
 #include <fwGui/dialog/MessageDialog.hpp>
@@ -23,17 +22,19 @@ namespace monitor
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::fwMetrics, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::fwMetrics, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
 fwMetrics::fwMetrics( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 fwMetrics::~fwMetrics() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -48,10 +49,6 @@ void fwMetrics::updating() throw(::fwTools::Failed)
     stream << ::fwData::registry::get()->getFactoryKeys().size();
     stream << std::endl;
 
-    stream << "ObjectMsg: ";
-    stream << ::fwServices::registry::message::get()->getFactoryKeys().size();
-    stream << std::endl;
-
     stream << "IService: ";
     stream << ::fwServices::registry::ServiceFactory::getDefault()->getFactoryKeys().size();
 
diff --git a/Bundles/LeafCtrl/monitor/src/monitor/installSIGSEVBacktrace.cpp b/Bundles/LeafCtrl/monitor/src/monitor/installSIGSEVBacktrace.cpp
index f265b66..ac1a73d 100644
--- a/Bundles/LeafCtrl/monitor/src/monitor/installSIGSEVBacktrace.cpp
+++ b/Bundles/LeafCtrl/monitor/src/monitor/installSIGSEVBacktrace.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -61,7 +61,7 @@ void generateSIGSEV()
 #ifndef WIN32
 std::string demangle( std::string mangled )
 {
-    char * c_demangled = abi::__cxa_demangle( mangled.c_str() , 0, 0, 0);
+    char * c_demangled = abi::__cxa_demangle( mangled.c_str(), 0, 0, 0);
     if (c_demangled)
     {
         std::string res(c_demangled);
@@ -85,14 +85,15 @@ std::string decode( char *message)
         std::string::size_type plus = msg.find('+');
         res = std::string(message,popen+1) + " ";
         std::string mangled( message, popen+1, plus -popen -1 );
-        res +=  demangle(mangled) + " ";
+        res += demangle(mangled) + " ";
         res += std::string( message + plus, message + strlen(message) );
     }
     return res;
 }
 
 void bt_sighandler(int sig, siginfo_t *info,
-        void *secret) {
+                   void *secret)
+{
 
     void *trace[16];
     char **messages = (char **)NULL;
@@ -121,7 +122,7 @@ void bt_sighandler(int sig, siginfo_t *info,
     messages = backtrace_symbols(trace, trace_size);
     /* skip first stack frame (points here) */
     ss <<  "    [bt] Execution path:" << std::endl;
-    for (i=1; i<trace_size; ++i)
+    for (i = 1; i<trace_size; ++i)
     {
         ss <<  "    [bt] " <<  decode(messages[i]) << std::endl;
     }
@@ -167,7 +168,8 @@ BOOL CALLBACK EnumerateLoadedModules(LPSTR ModuleName, DWORD64 ModuleBase, ULONG
 /**
  * Dumps the backtrace on a stream
  */
-void printDump(std::list<std::string> &loadedModules, std::list<std::string> &callStack, std::list<std::string> &fileStack)
+void printDump(std::list<std::string> &loadedModules, std::list<std::string> &callStack,
+               std::list<std::string> &fileStack)
 {
     std::stringstream stream;
 
@@ -181,7 +183,8 @@ void printDump(std::list<std::string> &loadedModules, std::list<std::string> &ca
     stream << "-----------------------------------------" << std::endl;
     // Dumps the call stack on the stream
     stream << "\nCallStack\n";
-    for(std::list<std::string>::const_iterator it = callStack.begin(), it2 = fileStack.begin(); it != callStack.end() && it2 != fileStack.end(); ++it, ++it2)
+    for(std::list<std::string>::const_iterator it = callStack.begin(), it2 = fileStack.begin();
+        it != callStack.end() && it2 != fileStack.end(); ++it, ++it2)
     {
         stream << "> " << *it << std::endl;
         stream << "   " << *it2 << std::endl;
@@ -195,7 +198,8 @@ void printDump(std::list<std::string> &loadedModules, std::list<std::string> &ca
  * Loads the elements of the call stack in a list
  * @param exceptionInfos are useful information on the exception
  */
-void LoadCallStack(EXCEPTION_POINTERS* exceptionInfos, HANDLE &hProcess, std::list<std::string> &callStack, std::list<std::string> &fileStack)
+void LoadCallStack(EXCEPTION_POINTERS* exceptionInfos, HANDLE &hProcess, std::list<std::string> &callStack,
+                   std::list<std::string> &fileStack)
 {
     STACKFRAME64 tempStackFrame;
     CONTEXT context = *(exceptionInfos->ContextRecord);
@@ -203,31 +207,31 @@ void LoadCallStack(EXCEPTION_POINTERS* exceptionInfos, HANDLE &hProcess, std::li
     DWORD machineType;
 
 #ifdef _M_IX86
-    machineType = IMAGE_FILE_MACHINE_I386;
-    tempStackFrame.AddrPC.Offset       = context.Eip;
-    tempStackFrame.AddrPC.Mode         = AddrModeFlat;
-    tempStackFrame.AddrStack.Offset    = context.Esp;
-    tempStackFrame.AddrStack.Mode      = AddrModeFlat;
-    tempStackFrame.AddrFrame.Offset    = context.Ebp;
-    tempStackFrame.AddrFrame.Mode      = AddrModeFlat;
+    machineType                     = IMAGE_FILE_MACHINE_I386;
+    tempStackFrame.AddrPC.Offset    = context.Eip;
+    tempStackFrame.AddrPC.Mode      = AddrModeFlat;
+    tempStackFrame.AddrStack.Offset = context.Esp;
+    tempStackFrame.AddrStack.Mode   = AddrModeFlat;
+    tempStackFrame.AddrFrame.Offset = context.Ebp;
+    tempStackFrame.AddrFrame.Mode   = AddrModeFlat;
 #elif _M_X64
-    machineType = IMAGE_FILE_MACHINE_AMD64;
-    tempStackFrame.AddrPC.Offset = context.Rip;
-    tempStackFrame.AddrPC.Mode = AddrModeFlat;
+    machineType                     = IMAGE_FILE_MACHINE_AMD64;
+    tempStackFrame.AddrPC.Offset    = context.Rip;
+    tempStackFrame.AddrPC.Mode      = AddrModeFlat;
     tempStackFrame.AddrFrame.Offset = context.Rsp;
-    tempStackFrame.AddrFrame.Mode = AddrModeFlat;
+    tempStackFrame.AddrFrame.Mode   = AddrModeFlat;
     tempStackFrame.AddrStack.Offset = context.Rsp;
-    tempStackFrame.AddrStack.Mode = AddrModeFlat;
+    tempStackFrame.AddrStack.Mode   = AddrModeFlat;
 #elif _M_IA64
-    machineType = IMAGE_FILE_MACHINE_IA64;
-    tempStackFrame.AddrPC.Offset = context.StIIP;
-    tempStackFrame.AddrPC.Mode = AddrModeFlat;
-    tempStackFrame.AddrFrame.Offset = context.IntSp;
-    tempStackFrame.AddrFrame.Mode = AddrModeFlat;
+    machineType                      = IMAGE_FILE_MACHINE_IA64;
+    tempStackFrame.AddrPC.Offset     = context.StIIP;
+    tempStackFrame.AddrPC.Mode       = AddrModeFlat;
+    tempStackFrame.AddrFrame.Offset  = context.IntSp;
+    tempStackFrame.AddrFrame.Mode    = AddrModeFlat;
     tempStackFrame.AddrBStore.Offset = context.RsBSP;
-    tempStackFrame.AddrBStore.Mode = AddrModeFlat;
-    tempStackFrame.AddrStack.Offset = context.IntSp;
-    tempStackFrame.AddrStack.Mode = AddrModeFlat;
+    tempStackFrame.AddrBStore.Mode   = AddrModeFlat;
+    tempStackFrame.AddrStack.Offset  = context.IntSp;
+    tempStackFrame.AddrStack.Mode    = AddrModeFlat;
 #else
 #error "Platform not supported!"
 #endif
@@ -237,26 +241,31 @@ void LoadCallStack(EXCEPTION_POINTERS* exceptionInfos, HANDLE &hProcess, std::li
     PSTR undecoratedName = (PSTR)malloc(sizeof(TCHAR) * nbChar);
 
     pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
-    pSymbol->MaxNameLen = nbChar;
+    pSymbol->MaxNameLen   = nbChar;
     DWORD lineDisplacement;
     IMAGEHLP_LINE64 lineInfo = { sizeof(IMAGEHLP_LINE64) };
 
-    while(StackWalk64(machineType, hProcess, GetCurrentThread(), &tempStackFrame, &context, NULL, SymFunctionTableAccess64, SymGetModuleBase64, NULL))
+    while(StackWalk64(machineType, hProcess, GetCurrentThread(), &tempStackFrame, &context, NULL,
+                      SymFunctionTableAccess64, SymGetModuleBase64, NULL))
     {
         // Sanity stack check
         if(tempStackFrame.AddrPC.Offset == 0)
+        {
             break;
+        }
 
         DWORD64 symDisplacement = 0;
         // Try to get the symbol name
         if(SymFromAddr(hProcess, tempStackFrame.AddrPC.Offset, &symDisplacement, pSymbol))
         {
             UnDecorateSymbolName(pSymbol->Name, undecoratedName, MAX_SYM_NAME, UNDNAME_COMPLETE);
-            callStack.push_back(std::string((char*)undecoratedName) + "+" + ::boost::lexical_cast<std::string>(symDisplacement));
+            callStack.push_back(std::string((char*)undecoratedName) + "+" +
+                                ::boost::lexical_cast<std::string>(symDisplacement));
 
             if(SymGetLineFromAddr64(hProcess, tempStackFrame.AddrPC.Offset, &lineDisplacement, &lineInfo))
             {
-                fileStack.push_back(std::string(lineInfo.FileName) + "\tl:" + ::boost::lexical_cast<std::string>(lineInfo.LineNumber));
+                fileStack.push_back(std::string(lineInfo.FileName) + "\tl:" +
+                                    ::boost::lexical_cast<std::string>(lineInfo.LineNumber));
             }
             else
             {
diff --git a/Bundles/LeafIO/ioAtoms/CMakeLists.txt b/Bundles/LeafIO/ioAtoms/CMakeLists.txt
index d0b8b52..ebba826 100644
--- a/Bundles/LeafIO/ioAtoms/CMakeLists.txt
+++ b/Bundles/LeafIO/ioAtoms/CMakeLists.txt
@@ -1,11 +1,4 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwAtomsBoostIO
-    fwRuntime
 
-    io
-)
 
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
 
diff --git a/Bundles/LeafIO/ioAtoms/COPYING b/Bundles/LeafIO/ioAtoms/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafIO/ioAtoms/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafIO/ioAtoms/COPYING.LESSER b/Bundles/LeafIO/ioAtoms/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafIO/ioAtoms/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafIO/ioAtoms/Properties.cmake b/Bundles/LeafIO/ioAtoms/Properties.cmake
index b5e9ae1..d6fdfcc 100644
--- a/Bundles/LeafIO/ioAtoms/Properties.cmake
+++ b/Bundles/LeafIO/ioAtoms/Properties.cmake
@@ -4,18 +4,22 @@ set( VERSION 0.1 )
 set( TYPE BUNDLE )
 set( DEPENDENCIES
     fwAtomConversion
+    fwAtoms
     fwAtomsBoostIO
-    fwAtomsHdf5IO
     fwAtomsPatch
     fwAtomsFilter
-    fwComEd
+    fwTools
+    fwCore
     fwData
     fwDataCamp
+    fwDataTools
     fwGui
+    fwJobs
     fwMemory
     fwRuntime
     fwServices
     fwZip
+    fwCom
     io
     )
 set( REQUIREMENTS  )
diff --git a/Bundles/LeafIO/ioAtoms/bin/build.options b/Bundles/LeafIO/ioAtoms/bin/build.options
deleted file mode 100644
index ce4ec48..0000000
--- a/Bundles/LeafIO/ioAtoms/bin/build.options
+++ /dev/null
@@ -1,23 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwAtomsBoostIO_0-1',
-          'fwAtomsHdf5IO_0-1',
-          'fwAtomConversion_0-1',
-          'fwAtomsFilter_0-1',
-          'fwAtomsPatch_0-1',
-          'fwCore_0-1',
-          'fwData_0-1',
-          'fwComEd_0-1',
-          'fwGui_0-1',
-          'fwRuntime_0-3',
-          'fwServices_0-1',
-          'fwTools_0-1',
-          'fwMemory_0-1',
-          'fwZip_0-1',
-          'fwAtomsPatch_0-1'
-          ]
-BUNDLES  = ['io_0-1']
-USE = [
-    'boost',
-    ]
diff --git a/Bundles/LeafIO/ioAtoms/include/ioAtoms/Plugin.hpp b/Bundles/LeafIO/ioAtoms/include/ioAtoms/Plugin.hpp
index e2e30b3..70a1258 100644
--- a/Bundles/LeafIO/ioAtoms/include/ioAtoms/Plugin.hpp
+++ b/Bundles/LeafIO/ioAtoms/include/ioAtoms/Plugin.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,19 +19,19 @@ public:
     ~Plugin() throw();
 
     /**
-    * @brief Start method.
-    *
-    * This method is used by runtime in order to initialize the bundle.
-    *
-    * @exception ::fwRuntime::RuntimeException
-    */
+     * @brief Start method.
+     *
+     * This method is used by runtime in order to initialize the bundle.
+     *
+     * @exception ::fwRuntime::RuntimeException
+     */
     void start() throw(::fwRuntime::RuntimeException);
 
     /**
-    * @brief Stop method.
-    *
-    * This method is used by runtime in order to close the bundle.
-    */
+     * @brief Stop method.
+     *
+     * This method is used by runtime in order to close the bundle.
+     */
     void stop() throw();
 
 };
diff --git a/Bundles/LeafIO/ioAtoms/include/ioAtoms/SReader.hpp b/Bundles/LeafIO/ioAtoms/include/ioAtoms/SReader.hpp
index 6457679..17decce 100644
--- a/Bundles/LeafIO/ioAtoms/include/ioAtoms/SReader.hpp
+++ b/Bundles/LeafIO/ioAtoms/include/ioAtoms/SReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,11 +12,15 @@
 
 #include <io/IReader.hpp>
 
+#include <fwCom/Signal.hpp>
+
+#include <fwJobs/IJob.hpp>
+
 #include "ioAtoms/config.hpp"
 
 namespace fwMemory
 {
-    class IPolicy;
+class IPolicy;
 }
 
 namespace ioAtoms
@@ -32,13 +36,18 @@ class IOATOMS_CLASS_API SReader : public ::io::IReader
 
 public:
 
+    /// Signal type for job creation.
+    typedef ::fwCom::Signal< void ( ::fwJobs::IJob::sptr ) > JobCreatedSignalType;
+
     fwCoreServiceClassDefinitionsMacro( (SReader)(::io::IReader) );
 
     /// Does nothing
     SReader();
 
     /// Does nothing
-    virtual ~SReader() throw() {};
+    virtual ~SReader() throw()
+    {
+    }
 
     /// Propose to choose a medical data file (*.json,*.jsonz,*.xml or *.xmlz)
     IOATOMS_API void configureWithIHM();
@@ -59,25 +68,20 @@ protected:
 
     /**
      * @brief Configures the reader.
-     * @verbatim
-     <config>
+     * @code{.xml}
+       <config>
         <inject>ReadData</inject>
         <uuidPolicy>Strict|Change|Reuse</uuidPolicy>
         <patcher context="..." version="..." />
 
         <archive backend="json">
             <extension>.j</extension>
-        </archive> 
+        </archive>
 
         <archive backend="jsonz">
             <extension>.vpz</extension>
         </archive>
 
-        <archive backend="hdf5">
-            <extension>.f4s</extension>
-            <extension>.mw</extension>
-        </archive> 
-
         <extensions>
             <extension label="XML">.xml</extension>
             <extension label="Zipped XML>.xmlz</extension>
@@ -87,16 +91,16 @@ protected:
             <extension>.vpz</extension>
         </extensions>
 
-     </config>
-     @endverbatim
+       </config>
+       @endcode
      *
      * archive : defines custom file extensions. The file to be read with an extension given in 'archive' tag will be
-     * processed with the given backend in archive tag (the 'backend' attribute is mandatory). Extensions must begin 
+     * processed with the given backend in archive tag (the 'backend' attribute is mandatory). Extensions must begin
      * with '.'.
-     * Available 'backend' values are json, xml, jsonz, xmlz, and hdf5.
+     * Available 'backend' values are json, xml, jsonz and xmlz.
      *
      * extensions : defines available extensions displayed in dialog to read file. If the 'extensions' is empty or not
-     * specified, all the extensions (.json, .xml, .jsonz, .xmlz, .hdf5 extensions and custom extensions) are available.
+     * specified, all the extensions (.json, .xml, .jsonz, .xmlz extensions and custom extensions) are available.
      * The attribute label (not mandatory) allows to display a label in front of extension when the file dialog is
      * shown.
      *
@@ -148,6 +152,9 @@ private:
 
     /// Labels shown in file dialog for each allowed extension
     FileExtension2NameType m_allowedExtLabels;
+
+    /// Signal emitted when job created.
+    JobCreatedSignalType::sptr m_sigJobCreated;
 };
 
 } // namespace ioAtoms
diff --git a/Bundles/LeafIO/ioAtoms/include/ioAtoms/SWriter.hpp b/Bundles/LeafIO/ioAtoms/include/ioAtoms/SWriter.hpp
index d975856..35fb815 100644
--- a/Bundles/LeafIO/ioAtoms/include/ioAtoms/SWriter.hpp
+++ b/Bundles/LeafIO/ioAtoms/include/ioAtoms/SWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,13 +7,18 @@
 #ifndef __IOATOMS_SWRITER_HPP__
 #define __IOATOMS_SWRITER_HPP__
 
-#include <set>
+#include "ioAtoms/config.hpp"
 
 #include <io/IWriter.hpp>
 
+#include <fwCom/Signal.hpp>
+
+#include <fwJobs/IJob.hpp>
+
 #include <fwAtomsBoostIO/Writer.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
 
-#include "ioAtoms/config.hpp"
+#include <set>
 
 namespace ioAtoms
 {
@@ -30,11 +35,16 @@ public:
 
     fwCoreServiceClassDefinitionsMacro( (SWriter)(::io::IWriter) );
 
+    /// Signal type for job creation.
+    typedef ::fwCom::Signal< void ( ::fwJobs::IJob::sptr ) > JobCreatedSignalType;
+
     /// Does nothing
     IOATOMS_API SWriter();
 
     /// Does nothing
-    IOATOMS_API  virtual ~SWriter() throw() {};
+    IOATOMS_API virtual ~SWriter() throw()
+    {
+    }
 
     /// Propose to create a medical data file
     IOATOMS_API void configureWithIHM();
@@ -46,23 +56,18 @@ protected:
 
     /**
      * @brief Configures the writer
-     @verbatim
-     <config>
+       @code{.xml}
+       <config>
         <patcher context="..." version="..." />
 
         <archive backend="json">
             <extension>.j</extension>
-        </archive> 
+        </archive>
 
         <archive backend="jsonz">
             <extension>.vpz</extension>
         </archive>
 
-        <archive backend="hdf5">
-            <extension>.f4s</extension>
-            <extension>.mw</extension>
-        </archive> 
-
         <extensions>
             <extension label="XML">.xml</extension>
             <extension label="Zipped XML>.xmlz</extension>
@@ -72,16 +77,16 @@ protected:
             <extension>.vpz</extension>
         </extensions>
 
-     </config>
-     @endverbatim
+       </config>
+       @endcode
      *
      * archive : defines custom file extensions. The file to be saved with an extension given in 'archive' tag will be
      * written with the given backend in archive tag (the 'backend' attribute is mandatory). Extensions must begin with
      * '.'.
-     * Available 'backend' values are json, xml, jsonz, xmlz, and hdf5.
+     * Available 'backend' values are json, xml, jsonz and xmlz.
      *
      * extensions : defines available extensions displayed in dialog to save file. If the 'extensions' is empty or not
-     * specified, all the extensions (.json, .xml, .jsonz, .xmlz, .hdf5 extensions and custom extensions) are available.
+     * specified, all the extensions (.json, .xml, .jsonz, .xmlz extensions and custom extensions) are available.
      * The attribute label (not mandatory) allows to display a label in front of extension when the file dialog is
      * shown.
      *
@@ -117,7 +122,8 @@ protected:
     /// Current version of format
     std::string m_version;
 
-    /// Proposes a gui to select available exports (set m_exportedVersion). Returns false if user cancel the selection
+    /// Proposes a gui to select available exports (set m_exportedVersion).
+    /// Returns false if user cancel the selection.
     bool versionSelection();
 
     /// Allowed file extensions
@@ -128,6 +134,12 @@ protected:
 
     /// Labels shown in file dialog for each allowed extension
     FileExtension2NameType m_allowedExtLabels;
+
+    /// Signal emitted when job created.
+    JobCreatedSignalType::sptr m_sigJobCreated;
+
+    /// Extension selected in file dialog
+    std::string m_selectedExtension;
 };
 
 } // namespace ioAtoms
diff --git a/Bundles/LeafIO/ioAtoms/include/ioAtoms/config.hpp b/Bundles/LeafIO/ioAtoms/include/ioAtoms/config.hpp
deleted file mode 100644
index a862d6f..0000000
--- a/Bundles/LeafIO/ioAtoms/include/ioAtoms/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOATOMS_CONFIG_HPP_
-#define _IOATOMS_CONFIG_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef IOATOMS_EXPORTS
-    #define IOATOMS_API __declspec(dllexport)
-    #else
-    #define IOATOMS_API __declspec(dllimport)
-    #endif
-
-    #define IOATOMS_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IOATOMS_EXPORTS
-    #define IOATOMS_API __attribute__ ((visibility("default")))
-    #define IOATOMS_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IOATOMS_API __attribute__ ((visibility("hidden")))
-    #define IOATOMS_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IOATOMS_API
-    #define IOATOMS_CLASS_API
-
-#endif
-
-#endif // #ifndef _IOATOMS_CONFIG_HPP_
diff --git a/Bundles/LeafIO/ioAtoms/include/ioAtoms/namespace.hpp b/Bundles/LeafIO/ioAtoms/include/ioAtoms/namespace.hpp
index d9d31d6..067bfbd 100644
--- a/Bundles/LeafIO/ioAtoms/include/ioAtoms/namespace.hpp
+++ b/Bundles/LeafIO/ioAtoms/include/ioAtoms/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafIO/ioAtoms/rc/plugin.xml b/Bundles/LeafIO/ioAtoms/rc/plugin.xml
index 8237270..68d9421 100644
--- a/Bundles/LeafIO/ioAtoms/rc/plugin.xml
+++ b/Bundles/LeafIO/ioAtoms/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ioAtoms" class="::ioAtoms::Plugin" >
+<plugin id="ioAtoms" class="::ioAtoms::Plugin" version="@DASH_VERSION@" >
 
     <library name="ioAtoms" />
 
diff --git a/Bundles/LeafIO/ioAtoms/src/ioAtoms/Plugin.cpp b/Bundles/LeafIO/ioAtoms/src/ioAtoms/Plugin.cpp
index b87cb8a..2d00c1a 100644
--- a/Bundles/LeafIO/ioAtoms/src/ioAtoms/Plugin.cpp
+++ b/Bundles/LeafIO/ioAtoms/src/ioAtoms/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,13 +14,16 @@ namespace ioAtoms
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::ioAtoms::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace ioAtoms
 
diff --git a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp
index 5f61e98..37a71e1 100644
--- a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp
+++ b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SReader.cpp
@@ -1,72 +1,76 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/path.hpp>
-#include <boost/assign/list_of.hpp>
-#include <boost/algorithm/string/join.hpp>
+#include "ioAtoms/SReader.hpp"
+
+#include <fwAtomConversion/convert.hpp>
 
 #include <fwAtomsBoostIO/Reader.hpp>
 #include <fwAtomsBoostIO/types.hpp>
 
-#include <fwAtomsHdf5IO/Reader.hpp>
-
-#include <fwAtomConversion/convert.hpp>
-
 #include <fwAtomsFilter/IFilter.hpp>
 #include <fwAtomsFilter/factory/new.hpp>
 
+#include <fwAtomsPatch/PatchingManager.hpp>
+
+#include <fwCom/Signal.hxx>
 
-#include <fwData/Object.hpp>
 #include <fwData/Composite.hpp>
-#include <fwData/location/SingleFile.hpp>
+#include <fwData/Object.hpp>
 #include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/helper/Composite.hpp>
+#include <fwDataTools/helper/Composite.hpp>
 
 #include <fwGui/Cursor.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwZip/ReadDirArchive.hpp>
-#include <fwZip/ReadZipArchive.hpp>
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/Job.hpp>
 
-#include <fwMemory/IPolicy.hpp>
 #include <fwMemory/BufferManager.hpp>
+#include <fwMemory/IPolicy.hpp>
 #include <fwMemory/policy/BarrierDump.hpp>
 #include <fwMemory/policy/NeverDump.hpp>
 #include <fwMemory/tools/MemoryMonitorTools.hpp>
 
-#include <fwAtomsPatch/PatchingManager.hpp>
+#include <fwServices/macros.hpp>
 
-#include "ioAtoms/SReader.hpp"
+#include <fwZip/ReadDirArchive.hpp>
+#include <fwZip/ReadZipArchive.hpp>
+
+#include <boost/algorithm/string/join.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/filesystem/path.hpp>
 
 namespace ioAtoms
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioAtoms::SReader , ::fwData::Object );
+fwServicesRegisterMacro( ::io::IReader, ::ioAtoms::SReader, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
 
 const SReader::FileExtension2NameType SReader::s_EXTENSIONS
     = ::boost::assign::map_list_of(".xml", "XML")
-        (".xmlz", "Zipped XML")
-        (".json", "JSON")
-        (".jsonz", "Zipped JSON")
-        (".hdf5", "HDF5");
+          (".xmlz", "Zipped XML")
+          (".json", "JSON")
+          (".jsonz", "Zipped JSON");
 
 //-----------------------------------------------------------------------------
 
 SReader::SReader() :
-        m_useAtomsPatcher(false),
-        m_context ("Undefined"),
-        m_version ("Undefined"),
-        m_filter  ("")
+    m_useAtomsPatcher(false),
+    m_context ("Undefined"),
+    m_version ("Undefined"),
+    m_filter  ("")
 {
-    BOOST_FOREACH(SReader::FileExtension2NameType::value_type ext, s_EXTENSIONS)
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+
+    for(SReader::FileExtension2NameType::value_type ext :  s_EXTENSIONS)
     {
         m_allowedExts.insert(m_allowedExts.end(), ext.first);
     }
@@ -75,12 +79,14 @@ SReader::SReader() :
 //-----------------------------------------------------------------------------
 
 void SReader::starting() throw(::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void SReader::stopping() throw(::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -90,27 +96,27 @@ void SReader::configuring() throw(::fwTools::Failed)
 
     ::io::IReader::configuring();
 
-    typedef SPTR(::fwRuntime::ConfigurationElement) ConfigurationElement;
+    typedef SPTR (::fwRuntime::ConfigurationElement) ConfigurationElement;
     typedef std::vector < ConfigurationElement >    ConfigurationElementContainer;
 
     m_customExts.clear();
     m_allowedExtLabels.clear();
 
     ConfigurationElementContainer customExtsList = m_configuration->find("archive");
-    BOOST_FOREACH(ConfigurationElement archive, customExtsList)
+    for(ConfigurationElement archive :  customExtsList)
     {
         const std::string& backend = archive->getAttributeValue("backend");
         SLM_ASSERT("No backend attribute given in archive tag", backend != "");
         SLM_ASSERT("Unsupported backend '" + backend + "'", s_EXTENSIONS.find("." + backend) != s_EXTENSIONS.end());
 
         ConfigurationElementContainer exts = archive->find("extension");
-        BOOST_FOREACH(ConfigurationElement ext, exts)
+        for(ConfigurationElement ext :  exts)
         {
             const std::string& extension = ext->getValue();
             SLM_ASSERT("No extension given for backend '" + backend + "'", !extension.empty());
             SLM_ASSERT("Extension must begin with '.'", extension[0] == '.');
 
-            m_customExts[extension] = backend;
+            m_customExts[extension]       = backend;
             m_allowedExtLabels[extension] = ext->getAttributeValue("label");
         }
     }
@@ -123,12 +129,12 @@ void SReader::configuring() throw(::fwTools::Failed)
         m_allowedExts.clear();
 
         ConfigurationElementContainer extensions = extensionsList.at(0)->find("extension");
-        BOOST_FOREACH(ConfigurationElement extension, extensions)
+        for(ConfigurationElement extension :  extensions)
         {
             const std::string& ext = extension->getValue();
 
             // The extension must be found either in custom extensions list or in known extensions
-            FileExtension2NameType::const_iterator itKnown = s_EXTENSIONS.find(ext);
+            FileExtension2NameType::const_iterator itKnown  = s_EXTENSIONS.find(ext);
             FileExtension2NameType::const_iterator itCustom = m_customExts.find(ext);
 
             const bool extIsKnown = (itKnown != SReader::s_EXTENSIONS.end() || itCustom != m_customExts.end());
@@ -145,12 +151,12 @@ void SReader::configuring() throw(::fwTools::Failed)
     {
         m_allowedExts.clear();
 
-        BOOST_FOREACH(FileExtension2NameType::value_type ext, m_customExts)
+        for(FileExtension2NameType::value_type ext :  m_customExts)
         {
             m_allowedExts.insert(m_allowedExts.end(), ext.first);
         }
 
-        BOOST_FOREACH(SReader::FileExtension2NameType::value_type ext, SReader::s_EXTENSIONS)
+        for(SReader::FileExtension2NameType::value_type ext :  SReader::s_EXTENSIONS)
         {
             m_allowedExts.insert(m_allowedExts.end(), ext.first);
             m_allowedExtLabels[ext.first] = ext.second;
@@ -183,15 +189,15 @@ void SReader::configuring() throw(::fwTools::Failed)
 
         SLM_ASSERT("'Reuse' policy is available only with inject mode",
                    ("Reuse" == m_uuidPolicy && !m_inject.empty()) || "Reuse" != m_uuidPolicy
-                  );
+                   );
     }
 
     ConfigurationElementContainer patcher = m_configuration->find("patcher");
     SLM_ASSERT("The <patcher> element can be set at most once.", patcher.size() <= 1 );
     if (patcher.size() == 1)
     {
-        m_context = patcher.at(0)->getExistingAttributeValue("context");
-        m_version = patcher.at(0)->getExistingAttributeValue("version");
+        m_context         = patcher.at(0)->getExistingAttributeValue("context");
+        m_version         = patcher.at(0)->getExistingAttributeValue("version");
         m_useAtomsPatcher = true;
     }
 
@@ -212,10 +218,12 @@ struct SetDumpPolicy
             if( ::fwMemory::policy::NeverDump::dynamicCast(policy) )
             {
                 ::fwMemory::policy::BarrierDump::sptr newDumpPolicy = ::fwMemory::policy::BarrierDump::New();
-                ::fwMemory::BufferManager::BufferStats stats = manager->getBufferStats().get();
+                ::fwMemory::BufferManager::BufferStats stats        = manager->getBufferStats().get();
+
                 size_t aliveMemory = stats.totalManaged - stats.totalDumped;
-                size_t freeMemory = ::fwMemory::tools::MemoryMonitorTools::estimateFreeMem() / 2;
-                size_t barrier = std::max( aliveMemory, std::max( freeMemory, static_cast<size_t>(500L * 1024 * 1024) ) );
+                size_t freeMemory  = ::fwMemory::tools::MemoryMonitorTools::estimateFreeMem() / 2;
+                size_t barrier     =
+                    std::max( aliveMemory, std::max( freeMemory, static_cast<size_t>(500L * 1024 * 1024) ) );
 
                 newDumpPolicy->setBarrier( barrier );
                 manager->setDumpPolicy( newDumpPolicy );
@@ -245,9 +253,10 @@ struct SetDumpPolicy
     ::fwCore::mt::WriteLock m_lock;
 };
 
+//-----------------------------------------------------------------------------
+
 void SReader::updating() throw(::fwTools::Failed)
 {
-
     if(this->hasLocationDefined())
     {
         SetDumpPolicy policy;
@@ -259,10 +268,10 @@ void SReader::updating() throw(::fwTools::Failed)
 
         try
         {
-            const ::boost::filesystem::path& filePath = this->getFile();
+            const ::boost::filesystem::path& filePath  = this->getFile();
             const ::boost::filesystem::path folderPath = filePath.parent_path();
-            const ::boost::filesystem::path filename = filePath.filename();
-            std::string extension = ::boost::filesystem::extension(filePath);
+            const ::boost::filesystem::path filename   = filePath.filename();
+            std::string extension                      = ::boost::filesystem::extension(filePath);
 
             FW_RAISE_IF( "Unable to guess file format (missing extension)", extension.empty() );
 
@@ -273,95 +282,142 @@ void SReader::updating() throw(::fwTools::Failed)
             }
 
             ::fwAtoms::Object::sptr atom;
-            if ( extension == ".hdf5" )
-            {
-                ::fwAtomsHdf5IO::Reader reader;
-                atom = ::fwAtoms::Object::dynamicCast( reader.read( filePath ) );
-            }
-            else
-            {
-                // Read atom
-                ::fwZip::IReadArchive::sptr readArchive;
-                ::boost::filesystem::path archiveRootName;
-                ::fwAtomsBoostIO::FormatType format = ::fwAtomsBoostIO::UNSPECIFIED;
 
-                if ( extension == ".json" )
-                {
-                    readArchive = ::fwZip::ReadDirArchive::New(folderPath.string());
-                    archiveRootName = filename;
-                    format = ::fwAtomsBoostIO::JSON;
-                }
-                else if ( extension == ".jsonz" )
-                {
-                    readArchive = ::fwZip::ReadZipArchive::New(filePath.string());
-                    archiveRootName = "root.json";
-                    format = ::fwAtomsBoostIO::JSON;
-                }
-                else if ( extension == ".xml" )
+            const unsigned int progressBarOffset = 10;
+
+            // Reading file : job 1
+            ::fwJobs::Job::sptr fileReadingJob = ::fwJobs::Job::New("Reading " + extension + " file",
+                                                                    [ =, &atom](::fwJobs::Job& runningJob)
                 {
-                    readArchive = ::fwZip::ReadDirArchive::New(folderPath.string());
-                    archiveRootName = filename;
-                    format = ::fwAtomsBoostIO::XML;
-                }
-                else if ( extension == ".xmlz" )
+                    runningJob.doneWork(progressBarOffset);
+
+                    // Read atom
+                    ::fwZip::IReadArchive::sptr readArchive;
+                    ::boost::filesystem::path archiveRootName;
+                    ::fwAtomsBoostIO::FormatType format = ::fwAtomsBoostIO::UNSPECIFIED;
+
+                    if ( extension == ".json" )
+                    {
+                        readArchive = ::fwZip::ReadDirArchive::New(folderPath.string());
+                        archiveRootName = filename;
+                        format = ::fwAtomsBoostIO::JSON;
+                    }
+                    else if ( extension == ".jsonz" )
+                    {
+                        readArchive = ::fwZip::ReadZipArchive::New(filePath.string());
+                        archiveRootName = "root.json";
+                        format = ::fwAtomsBoostIO::JSON;
+                    }
+                    else if ( extension == ".xml" )
+                    {
+                        readArchive = ::fwZip::ReadDirArchive::New(folderPath.string());
+                        archiveRootName = filename;
+                        format = ::fwAtomsBoostIO::XML;
+                    }
+                    else if ( extension == ".xmlz" )
+                    {
+                        readArchive = ::fwZip::ReadZipArchive::New(filePath.string());
+                        archiveRootName = "root.xml";
+                        format = ::fwAtomsBoostIO::XML;
+                    }
+                    else
+                    {
+                        FW_RAISE( "This file extension '" << extension << "' is not managed" );
+                    }
+
+                    ::fwAtomsBoostIO::Reader reader;
+                    atom = ::fwAtoms::Object::dynamicCast( reader.read( readArchive, archiveRootName, format ) );
+
+                    FW_RAISE_IF( "Invalid atoms file :'" << filePath << "'", !atom );
+
+                    runningJob.doneWork(progressBarOffset);
+
+                    runningJob.done();
+
+                }, m_associatedWorker);
+
+
+            // patching atom : job 2
+            ::fwJobs::Job::sptr patchingJob = ::fwJobs::Job::New("Reading " + extension + " file",
+                                                                 [ =, &atom](::fwJobs::Job& runningJob)
                 {
-                    readArchive = ::fwZip::ReadZipArchive::New(filePath.string());
-                    archiveRootName = "root.xml";
-                    format = ::fwAtomsBoostIO::XML;
-                }
-                else
+                    if(runningJob.cancelRequested())
+                    {
+                        return;
+                    }
+
+                    runningJob.doneWork(progressBarOffset);
+
+                    /// patch atom
+                    if ( m_useAtomsPatcher )
+                    {
+                        FW_RAISE_IF( "Unable to load data, found '" << atom->getMetaInfo("context")
+                                                                    << "' context, but '" << m_context <<
+                                     "' was excepted.",
+                                     atom->getMetaInfo("context") != m_context);
+
+                        ::fwAtomsPatch::PatchingManager globalPatcher(atom);
+                        atom = globalPatcher.transformTo( m_version );
+                    }
+
+                    if(!m_filter.empty())
+                    {
+                        ::fwAtomsFilter::IFilter::sptr filter = ::fwAtomsFilter::factory::New(m_filter);
+                        OSLM_ASSERT("Failed to create IFilter implementation '" << m_filter << "'", filter);
+                        filter->apply(atom);
+                    }
+                    runningJob.done();
+                }, m_associatedWorker);
+
+            ::fwData::Object::sptr newData;
+
+            // convert to fwData : job 3
+            ::fwJobs::Job::sptr atomToDataJob = ::fwJobs::Job::New("Reading " + extension + " file",
+                                                                   [ =, &newData, &atom](::fwJobs::Job& runningJob)
                 {
-                    FW_RAISE( "This file extension '" << extension << "' is not managed" );
-                }
-
-                ::fwAtomsBoostIO::Reader reader;
-                atom = ::fwAtoms::Object::dynamicCast( reader.read( readArchive, archiveRootName, format ) );
-            }
-
-            FW_RAISE_IF( "Invalid atoms file :'" << filePath << "'", ! atom );
-
-            /// patch atom
-            if ( m_useAtomsPatcher )
+                    runningJob.doneWork(progressBarOffset);
+                    if(runningJob.cancelRequested())
+                    {
+                        return;
+                    }
+                    if("Strict" == m_uuidPolicy)
+                    {
+                        newData = ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::StrictPolicy());
+                    }
+                    else if("Reuse" == m_uuidPolicy)
+                    {
+                        newData = ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ReusePolicy());
+                    }
+                    else
+                    {
+                        newData = ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ChangePolicy());
+                    }
+
+                    runningJob.done();
+                }, m_associatedWorker);
+
+            ::fwJobs::Aggregator::sptr jobs = ::fwJobs::Aggregator::New(extension + " reader");
+            jobs->add(fileReadingJob);
+            jobs->add(patchingJob);
+            jobs->add(atomToDataJob);
+
+            m_sigJobCreated->emit(jobs);
+
+            jobs->run().get();
+
+            if(jobs->getState() == ::fwJobs::IJob::CANCELED)
             {
-                FW_RAISE_IF( "Unable to load data, found '" << atom->getMetaInfo("context")
-                             << "' context, but '" << m_context << "' was excepted.",
-                             atom->getMetaInfo("context") != m_context);
-
-                ::fwAtomsPatch::PatchingManager globalPatcher(atom);
-                atom = globalPatcher.transformTo( m_version );
-            }
-
-            if(!m_filter.empty())
-            {
-                ::fwAtomsFilter::IFilter::sptr filter = ::fwAtomsFilter::factory::New(m_filter);
-                OSLM_ASSERT("Failed to create IFilter implementation '" << m_filter << "'", filter);
-                filter->apply(atom);
-            }
-
-
-            ::fwData::Object::sptr newData ;
-
-            if("Strict" == m_uuidPolicy)
-            {
-                newData = ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::StrictPolicy());
-            }
-            else if("Reuse" == m_uuidPolicy)
-            {
-                newData = ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ReusePolicy());
-            }
-            else
-            {
-                newData = ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ChangePolicy());
+                return;
             }
 
-            FW_RAISE_IF( "Unable to load '" << filePath << "' : invalid data.", ! newData );
+            FW_RAISE_IF( "Unable to load '" << filePath << "' : invalid data.", !newData );
 
             if(m_inject.empty())
             {
                 FW_RAISE_IF( "Unable to load '" << filePath
-                        << "' : trying to load a '" << newData->getClassname()
-                        << "' where a '" << data->getClassname() << "' was expected",
-                        newData->getClassname() != data->getClassname() );
+                                                << "' : trying to load a '" << newData->getClassname()
+                                                << "' where a '" << data->getClassname() << "' was expected",
+                             newData->getClassname() != data->getClassname() );
 
                 data->shallowCopy(newData);
             }
@@ -370,23 +426,23 @@ void SReader::updating() throw(::fwTools::Failed)
                 ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast(data);
                 SLM_ASSERT("Inject mode works only on a Composite object", composite );
 
-                ::fwComEd::helper::Composite helper(composite);
+                ::fwDataTools::helper::Composite helper(composite);
                 helper.add(m_inject, newData);
-                helper.notify(this->getSptr());
+                helper.notify();
             }
 
             this->notificationOfUpdate();
         }
-        catch( std::exception & e )
+        catch( std::exception& e )
         {
             OSLM_ERROR( e.what() );
             ::fwGui::dialog::MessageDialog::showMessageDialog("Atoms reader failed", e.what(),
-                    ::fwGui::dialog::MessageDialog::CRITICAL);
+                                                              ::fwGui::dialog::MessageDialog::CRITICAL);
         }
         catch( ... )
         {
             ::fwGui::dialog::MessageDialog::showMessageDialog("Atoms reader failed", "Aborting operation.",
-                    ::fwGui::dialog::MessageDialog::CRITICAL);
+                                                              ::fwGui::dialog::MessageDialog::CRITICAL);
         }
 
         cursor.setDefaultCursor();
@@ -406,9 +462,11 @@ void SReader::updating() throw(::fwTools::Failed)
 void SReader::notificationOfUpdate()
 {
     ::fwData::Object::sptr object = this->getObject();
-    ::fwServices::ObjectMsg::sptr msg = ::fwServices::ObjectMsg::New();
-    msg->addEvent( ::fwServices::ObjectMsg::UPDATED_OBJECT , object );
-    ::fwServices::IEditionService::notify( this->getSptr(),  object, msg );
+    auto sig = object->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -426,7 +484,7 @@ void SReader::configureWithIHM()
 
     dialogFile.addFilter("Medical data", "*" + ::boost::algorithm::join(m_allowedExts, " *"));
 
-    BOOST_FOREACH(const std::string& ext, m_allowedExts)
+    for(const std::string& ext :  m_allowedExts)
     {
         dialogFile.addFilter(m_allowedExtLabels[ext], "*" + ext);
     }
diff --git a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp
index 74318ff..9e05379 100644
--- a/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp
+++ b/Bundles/LeafIO/ioAtoms/src/ioAtoms/SWriter.cpp
@@ -1,27 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/path.hpp>
-#include <boost/algorithm/string/join.hpp>
+#include "ioAtoms/SReader.hpp"
+#include "ioAtoms/SWriter.hpp"
 
 #include <fwAtomsBoostIO/types.hpp>
 #include <fwAtomsBoostIO/Writer.hpp>
 
-#include <fwAtomsHdf5IO/Writer.hpp>
-
 #include <fwAtomConversion/convert.hpp>
 
+#include <fwCom/Signal.hxx>
+
 #include <fwData/Composite.hpp>
 #include <fwData/location/SingleFile.hpp>
 #include <fwData/location/Folder.hpp>
 
 #include <fwGui/Cursor.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/SelectorDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/Job.hpp>
 
 #include <fwServices/macros.hpp>
 
@@ -34,25 +37,30 @@
 #include <fwAtomsPatch/VersionsGraph.hpp>
 #include <fwAtomsPatch/PatchingManager.hpp>
 
-#include "ioAtoms/SReader.hpp"
-#include "ioAtoms/SWriter.hpp"
+#include <boost/filesystem/path.hpp>
+#include <boost/algorithm/string/join.hpp>
+
 
 namespace ioAtoms
 {
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioAtoms::SWriter , ::fwData::Object );
+fwServicesRegisterMacro( ::io::IWriter, ::ioAtoms::SWriter, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
 
 //-----------------------------------------------------------------------------
 
 SWriter::SWriter() :
-        m_useAtomsPatcher(false),
-        m_exportedVersion ("Undefined"),
-        m_context ("Undefined"),
-        m_version ("Undefined")
+    m_useAtomsPatcher(false),
+    m_exportedVersion ("Undefined"),
+    m_context ("Undefined"),
+    m_version ("Undefined")
 {
-    BOOST_FOREACH(SReader::FileExtension2NameType::value_type ext, SReader::s_EXTENSIONS)
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+
+    for(SReader::FileExtension2NameType::value_type ext :  SReader::s_EXTENSIONS)
     {
         m_allowedExts.insert(m_allowedExts.end(), ext.first);
     }
@@ -61,12 +69,14 @@ SWriter::SWriter() :
 //-----------------------------------------------------------------------------
 
 void SWriter::starting() throw(::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void SWriter::stopping() throw(::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -74,28 +84,28 @@ void SWriter::configuring() throw(::fwTools::Failed)
 {
     ::io::IWriter::configuring();
 
-    typedef SPTR(::fwRuntime::ConfigurationElement) ConfigurationElement;
+    typedef SPTR (::fwRuntime::ConfigurationElement) ConfigurationElement;
     typedef std::vector < ConfigurationElement >    ConfigurationElementContainer;
 
     m_customExts.clear();
     m_allowedExtLabels.clear();
 
     ConfigurationElementContainer customExtsList = m_configuration->find("archive");
-    BOOST_FOREACH(ConfigurationElement archive, customExtsList)
+    for(ConfigurationElement archive :  customExtsList)
     {
         const std::string& backend = archive->getAttributeValue("backend");
         SLM_ASSERT("No backend attribute given in archive tag", backend != "");
         SLM_ASSERT("Unsupported backend '" + backend + "'",
-                SReader::s_EXTENSIONS.find("." + backend) != SReader::s_EXTENSIONS.end());
+                   SReader::s_EXTENSIONS.find("." + backend) != SReader::s_EXTENSIONS.end());
 
         ConfigurationElementContainer exts = archive->find("extension");
-        BOOST_FOREACH(ConfigurationElement ext, exts)
+        for(ConfigurationElement ext :  exts)
         {
             const std::string& extension = ext->getValue();
             SLM_ASSERT("No extension given for backend '" + backend + "'", !extension.empty());
             SLM_ASSERT("Extension must begin with '.'", extension[0] == '.');
 
-            m_customExts[extension] = backend;
+            m_customExts[extension]       = backend;
             m_allowedExtLabels[extension] = ext->getAttributeValue("label");
         }
     }
@@ -108,12 +118,12 @@ void SWriter::configuring() throw(::fwTools::Failed)
         m_allowedExts.clear();
 
         ConfigurationElementContainer extensions = extensionsList.at(0)->find("extension");
-        BOOST_FOREACH(ConfigurationElement extension, extensions)
+        for(ConfigurationElement extension :  extensions)
         {
             const std::string& ext = extension->getValue();
 
             // The extension must be found either in custom extensions list or in known extensions
-            FileExtension2NameType::const_iterator itKnown = SReader::s_EXTENSIONS.find(ext);
+            FileExtension2NameType::const_iterator itKnown  = SReader::s_EXTENSIONS.find(ext);
             FileExtension2NameType::const_iterator itCustom = m_customExts.find(ext);
 
             const bool extIsKnown = (itKnown != SReader::s_EXTENSIONS.end() || itCustom != m_customExts.end());
@@ -130,12 +140,12 @@ void SWriter::configuring() throw(::fwTools::Failed)
     {
         m_allowedExts.clear();
 
-        BOOST_FOREACH(FileExtension2NameType::value_type ext, m_customExts)
+        for(FileExtension2NameType::value_type ext :  m_customExts)
         {
             m_allowedExts.insert(m_allowedExts.end(), ext.first);
         }
 
-        BOOST_FOREACH(SReader::FileExtension2NameType::value_type ext, SReader::s_EXTENSIONS)
+        for(SReader::FileExtension2NameType::value_type ext :  SReader::s_EXTENSIONS)
         {
             m_allowedExts.insert(m_allowedExts.end(), ext.first);
             m_allowedExtLabels[ext.first] = ext.second;
@@ -146,8 +156,8 @@ void SWriter::configuring() throw(::fwTools::Failed)
     SLM_ASSERT("The <patcher> element can be set at most once.", patcher.size() <= 1 );
     if (patcher.size() == 1)
     {
-        m_context = patcher.at(0)->getExistingAttributeValue("context");
-        m_version = patcher.at(0)->getExistingAttributeValue("version");
+        m_context         = patcher.at(0)->getExistingAttributeValue("context");
+        m_version         = patcher.at(0)->getExistingAttributeValue("version");
         m_exportedVersion = m_version;
         m_useAtomsPatcher = true;
     }
@@ -180,11 +190,11 @@ bool SWriter::versionSelection()
 
             dialogVersion.setSelections(versions);
             std::string result = dialogVersion.show();
-            if ( ! result.empty() )
+            if ( !result.empty() )
             {
                 m_exportedVersion = result;
             }
-            return ! result.empty();
+            return !result.empty();
         }
     }
     else
@@ -198,128 +208,192 @@ bool SWriter::versionSelection()
 
 void SWriter::updating() throw(::fwTools::Failed)
 {
-    if( this->hasLocationDefined() )
+    if(!this->hasLocationDefined())
     {
-        ::fwData::Object::sptr obj = this->getObject< ::fwData::Object >();
+        return;
+    }
 
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-        try
-        {
-            const ::boost::filesystem::path& requestedFilePath = this->getFile();
-            ::boost::filesystem::path filePath = requestedFilePath;
+    ::fwData::Object::sptr obj = this->getObject< ::fwData::Object >();
 
-            if( ::boost::filesystem::exists( requestedFilePath ) )
-            {
-                FW_RAISE_IF( "can't write to : " << requestedFilePath << ", it is a directory.",
-                             ::boost::filesystem::is_directory(requestedFilePath)
-                             );
+    ::fwGui::Cursor cursor;
+    cursor.setCursor(::fwGui::ICursor::BUSY);
 
-                filePath.replace_extension("%%%%%%" + filePath.extension().string() );
-                filePath = ::boost::filesystem::unique_path(filePath);
-            }
+    // Get the selected extension
+    const ::boost::filesystem::path& requestedFilePath = this->getFile();
+    std::string requestedExtension                     = requestedFilePath.extension().string();
+
+    if ( !m_selectedExtension.empty()
+         && !requestedExtension.empty()
+         && m_selectedExtension.compare(requestedExtension))
+    {
+        std::string errorMessage("File extension '" + requestedExtension +
+                                 "' is different from the selected extension '" + m_selectedExtension + "'");
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Medical data writer failed",
+                                                          errorMessage,
+                                                          ::fwGui::dialog::IMessageDialog::CRITICAL);
+        return;
+    }
+
+    ::boost::filesystem::path filePath = requestedFilePath;
+    if( ::boost::filesystem::exists( requestedFilePath ) )
+    {
+        FW_RAISE_IF( "can't write to : " << requestedFilePath << ", it is a directory.",
+                     ::boost::filesystem::is_directory(requestedFilePath)
+                     );
+        filePath = ::boost::filesystem::unique_path(filePath);
+    }
+
+    const ::boost::filesystem::path folderPath = filePath.parent_path();
+    ::boost::filesystem::path filename = filePath.filename();
+    std::string extension = filePath.extension().string();
+
+    // Check if the extension of the filename is set. If not, assign it to the selected extension.
+    if (extension.empty())
+    {
+        extension = m_selectedExtension;
+    }
+
+    // Check if the extension set is allowed. If not, assigns to the first allowed extension.
+    if (m_allowedExts.find(extension) == m_allowedExts.end())
+    {
+        std::set< std::string >::const_iterator begin = m_allowedExts.begin();
+        std::string firstAllowedExt                   = *begin;
+
+        extension = firstAllowedExt;
+    }
+    FW_RAISE_IF( "Extension is empty", extension.empty() );
+    FW_RAISE_IF("The file extension '" << extension << "' is not managed",
+                m_allowedExts.find(extension) == m_allowedExts.end());
 
+    // Find in custom extensions if our extension exists.
+    if (m_customExts.find(extension) != m_customExts.end())
+    {
+        extension = "." + m_customExts[extension];
+    }
 
-            const ::boost::filesystem::path folderPath = filePath.parent_path();
-            const ::boost::filesystem::path filename = filePath.filename();
-            std::string extension = ::boost::filesystem::extension(filePath);
+    // Mutex data lock
+    ::fwDataCamp::visitor::RecursiveLock recursiveLock (obj);
 
-            FW_RAISE_IF( "Extension is empty", extension.empty() );
+    ::fwAtoms::Object::sptr atom;
+    const unsigned int progressBarOffset = 10;
 
-            // Mutex data lock
-            ::fwDataCamp::visitor::RecursiveLock recursiveLock (obj);
+    // Convert data to atom : job 1
+    ::fwJobs::Job::sptr convertJob = ::fwJobs::Job::New("Writing " + extension + " file",
+                                                        [ =, &atom](::fwJobs::Job& runningJob)
+        {
+            runningJob.doneWork(progressBarOffset);
 
-            // Convert data to atom
-            ::fwAtoms::Object::sptr atom = ::fwAtomConversion::convert(obj);
+            atom = ::fwAtomConversion::convert(obj);
+            runningJob.done();
+        }, m_associatedWorker );
+
+    // Path atom : job 2
+    ::fwJobs::Job::sptr patchingJob = ::fwJobs::Job::New("Writing " + extension + " file",
+                                                         [ =, &atom](::fwJobs::Job& runningJob)
+        {
 
-            // Path atom
             atom->setMetaInfo("context", m_context);
             atom->setMetaInfo("version_name", m_version);
-            if( m_useAtomsPatcher )
+
+            if(runningJob.cancelRequested())
             {
-                ::fwAtomsPatch::PatchingManager globalPatcher( atom );
-                atom = globalPatcher.transformTo( m_exportedVersion );
+                return;
             }
 
-            FW_RAISE_IF("The file extension '" << extension << "' is not managed",
-                    m_allowedExts.find(extension) == m_allowedExts.end());
+            runningJob.doneWork(progressBarOffset);
 
-            if(m_customExts.find(extension) != m_customExts.end())
+            if( m_useAtomsPatcher )
             {
-                extension = "." + m_customExts[extension];
+                ::fwAtomsPatch::PatchingManager globalPatcher( atom );
+                atom = globalPatcher.transformTo( m_exportedVersion );
             }
 
-            if (extension == ".hdf5")
+            runningJob.done();
+        },
+                                                         m_associatedWorker
+                                                         );
+
+    // Writing file : job 3
+    ::fwJobs::Job::sptr writeJob = ::fwJobs::Job::New("Writing " + extension + " file",
+                                                      [ =, &atom](::fwJobs::Job& runningJob)
+        {
+            runningJob.doneWork(progressBarOffset);
+            // Write atom
+            ::fwZip::IWriteArchive::sptr writeArchive;
+            ::fwAtomsBoostIO::FormatType format;
+            ::boost::filesystem::path archiveRootName;
+            if ( extension == ".json" )
             {
-                ::fwAtomsHdf5IO::Writer(atom).write( filePath );
+                writeArchive = ::fwZip::WriteDirArchive::New(folderPath.string());
+                archiveRootName = filename;
+                format = ::fwAtomsBoostIO::JSON;
             }
-            else
+            else if ( extension == ".jsonz" )
             {
-                // Write atom
-                ::fwZip::IWriteArchive::sptr writeArchive;
-                ::fwAtomsBoostIO::FormatType format;
-                ::boost::filesystem::path archiveRootName;
-                if ( extension == ".json" )
+                if ( ::boost::filesystem::exists( filePath ) )
                 {
-                    writeArchive = ::fwZip::WriteDirArchive::New(folderPath.string());
-                    archiveRootName = filename;
-                    format = ::fwAtomsBoostIO::JSON;
+                    ::boost::filesystem::remove( filePath );
                 }
-                else if ( extension == ".jsonz" )
-                {
-                    if ( ::boost::filesystem::exists( filePath ) )
-                    {
-                        ::boost::filesystem::remove( filePath );
-                    }
-                    writeArchive = ::fwZip::WriteZipArchive::New(filePath.string());
-                    archiveRootName = "root.json";
-                    format = ::fwAtomsBoostIO::JSON;
-                }
-                else if ( extension == ".xml" )
-                {
-                    writeArchive = ::fwZip::WriteDirArchive::New(folderPath.string());
-                    archiveRootName = filename;
-                    format = ::fwAtomsBoostIO::XML;
-                }
-                else if ( extension == ".xmlz" )
-                {
-                    if ( ::boost::filesystem::exists( filePath ) )
-                    {
-                        ::boost::filesystem::remove( filePath );
-                    }
-                    writeArchive = ::fwZip::WriteZipArchive::New(filePath.string());
-                    archiveRootName = "root.xml";
-                    format = ::fwAtomsBoostIO::XML;
-                }
-                else
+                writeArchive = ::fwZip::WriteZipArchive::New(filePath.string());
+                archiveRootName = "root.json";
+                format = ::fwAtomsBoostIO::JSON;
+            }
+            else if ( extension == ".xml" )
+            {
+                writeArchive = ::fwZip::WriteDirArchive::New(folderPath.string());
+                archiveRootName = filename;
+                format = ::fwAtomsBoostIO::XML;
+            }
+            else if ( extension == ".xmlz" )
+            {
+                if ( ::boost::filesystem::exists( filePath ) )
                 {
-                    FW_RAISE( "This file extension '" << extension << "' is not managed" );
+                    ::boost::filesystem::remove( filePath );
                 }
-
-                ::fwAtomsBoostIO::Writer(atom).write( writeArchive, archiveRootName, format );
-                writeArchive.reset();
+                writeArchive = ::fwZip::WriteZipArchive::New(filePath.string());
+                archiveRootName = "root.xml";
+                format = ::fwAtomsBoostIO::XML;
             }
-
-            if (filePath != requestedFilePath)
+            else
             {
-                ::boost::filesystem::rename(filePath, requestedFilePath);
+                FW_RAISE( "This file extension '" << extension << "' is not managed" );
             }
-        }
-        catch( std::exception & e )
-        {
-            OSLM_ERROR( e.what() );
-            ::fwGui::dialog::MessageDialog::showMessageDialog("Medical data writer failed",
-                    e.what(),
-                    ::fwGui::dialog::MessageDialog::CRITICAL);
-        }
-        catch( ... )
-        {
-            ::fwGui::dialog::MessageDialog::showMessageDialog("Medical data writer failed",
-                    "Writing process aborted",
-                    ::fwGui::dialog::MessageDialog::CRITICAL);
-        }
-        cursor.setDefaultCursor();
+
+            ::fwAtomsBoostIO::Writer(atom).write( writeArchive, archiveRootName, format );
+            writeArchive.reset();
+
+            runningJob.done();
+        }, m_associatedWorker );
+
+
+
+    ::fwJobs::Aggregator::sptr jobs = ::fwJobs::Aggregator::New(extension + " writer");
+    jobs->add(convertJob);
+    jobs->add(patchingJob);
+    jobs->add(writeJob);
+    jobs->setCancelable(false);
+
+    m_sigJobCreated->emit(jobs);
+
+    try
+    {
+        jobs->run().get();
     }
+    catch( std::exception & e )
+    {
+        OSLM_ERROR( e.what() );
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Medical data writer failed",
+                                                          e.what(),
+                                                          ::fwGui::dialog::IMessageDialog::CRITICAL);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Medical data writer failed",
+                                                          "Writing process aborted",
+                                                          ::fwGui::dialog::IMessageDialog::CRITICAL);
+    }
+
+    cursor.setDefaultCursor();
 }
 
 //-----------------------------------------------------------------------------
@@ -335,7 +409,7 @@ void SWriter::configureWithIHM()
 {
     static ::boost::filesystem::path _sDefaultPath;
 
-    if( ! m_useAtomsPatcher || versionSelection() )
+    if( !m_useAtomsPatcher || versionSelection() )
     {
         ::fwGui::dialog::LocationDialog dialogFile;
         dialogFile.setTitle("Enter file name");
@@ -345,7 +419,7 @@ void SWriter::configureWithIHM()
 
         dialogFile.addFilter("Medical data", "*" + ::boost::algorithm::join(m_allowedExts, " *"));
 
-        BOOST_FOREACH(const std::string& ext, m_allowedExts)
+        for(const std::string& ext :  m_allowedExts)
         {
             dialogFile.addFilter(m_allowedExtLabels[ext], "*" + ext);
         }
@@ -358,6 +432,7 @@ void SWriter::configureWithIHM()
             _sDefaultPath = result->getPath();
             this->setFile( _sDefaultPath );
             dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath.parent_path()) );
+            m_selectedExtension = dialogFile.getCurrentSelection();
         }
         else
         {
diff --git a/Bundles/LeafIO/ioAtoms/test/CMakeLists.txt b/Bundles/LeafIO/ioAtoms/test/CMakeLists.txt
index c7bb8af..3881996 100644
--- a/Bundles/LeafIO/ioAtoms/test/CMakeLists.txt
+++ b/Bundles/LeafIO/ioAtoms/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/Bundles/LeafIO/ioAtoms/test/Properties.cmake b/Bundles/LeafIO/ioAtoms/test/Properties.cmake
index 29fc7fe..9595517 100644
--- a/Bundles/LeafIO/ioAtoms/test/Properties.cmake
+++ b/Bundles/LeafIO/ioAtoms/test/Properties.cmake
@@ -2,7 +2,18 @@
 set( NAME ioAtomsTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataTools fwDataCamp fwAtomConversion)
+set( DEPENDENCIES
+    fwCore 
+    fwTest
+    fwTools
+    fwData
+    fwDataCamp
+    fwServices
+    fwRuntime
+    fwMedData
+    fwGui
+    fwThread
+)
 set( REQUIREMENTS ioAtoms)
 
 set(CPPUNITTEST_OPTIONS BUNDLE ioAtoms WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafIO/ioAtoms/test/cppunit.options b/Bundles/LeafIO/ioAtoms/test/cppunit.options
deleted file mode 100644
index b7dae09..0000000
--- a/Bundles/LeafIO/ioAtoms/test/cppunit.options
+++ /dev/null
@@ -1,18 +0,0 @@
-CLASSTEST=[
-          'IoAtomsTest',
-          ]
-
-USE = ['boost']
-LIB = ['fwData_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwDataTools_0-1',
-       'fwDataCamp_0-1',
-       'fwTest_0-1',
-      ]
-
-BUNDLES = []
-REQUIREMENTS = ['dataReg_0-1','servicesReg_0-1','ioAtoms_0-1','gui_0-1']
-
-CONSOLE = 'yes'
-
diff --git a/Bundles/LeafIO/ioAtoms/test/tu/include/IoAtomsTest.hpp b/Bundles/LeafIO/ioAtoms/test/tu/include/IoAtomsTest.hpp
index c3f3aa8..1dcb13b 100644
--- a/Bundles/LeafIO/ioAtoms/test/tu/include/IoAtomsTest.hpp
+++ b/Bundles/LeafIO/ioAtoms/test/tu/include/IoAtomsTest.hpp
@@ -1,3 +1,8 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #ifndef __IOATOMS_UT_IOATOMSTEST_HPP__
 #define __IOATOMS_UT_IOATOMSTEST_HPP__
@@ -14,13 +19,12 @@ namespace ut
  */
 class IoAtomsTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( IoAtomsTest );
-    CPPUNIT_TEST( JSONTest );
-    CPPUNIT_TEST( JSONZTest );
-    CPPUNIT_TEST( XMLTest );
-    CPPUNIT_TEST( XMLZTest );
-    CPPUNIT_TEST( HDF5Test );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( IoAtomsTest );
+CPPUNIT_TEST( JSONTest );
+CPPUNIT_TEST( JSONZTest );
+CPPUNIT_TEST( XMLTest );
+CPPUNIT_TEST( XMLZTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
@@ -32,13 +36,9 @@ public:
     void JSONZTest();
     void XMLTest();
     void XMLZTest();
-    void HDF5Test();
-
-
-
 };
 
 } // namespace ut
 } // namespace ioAtoms
 
-#endif //__IOBASIC_UT_IOBASICTEST_HPP__
+#endif // __IOATOMS_UT_IOATOMSTEST_HPP__
diff --git a/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp b/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp
index cb8c59a..45f3ba6 100644
--- a/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp
+++ b/Bundles/LeafIO/ioAtoms/test/tu/src/IoAtomsTest.cpp
@@ -1,25 +1,32 @@
-#include <boost/filesystem.hpp>
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
-#include <fwAtomConversion/exception/DuplicatedDataUUID.hpp>
-
-#include <fwTools/System.hpp>
+#include "IoAtomsTest.hpp"
 
-#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwData/Composite.hpp>
 
 #include <fwData/Object.hpp>
-#include <fwData/Composite.hpp>
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
+#include <fwGui/registry/worker.hpp>
 
 #include <fwMedData/SeriesDB.hpp>
 
-#include <fwServices/registry/ServiceFactory.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
 #include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/registry/ServiceFactory.hpp>
 
 #include <fwTest/Exception.hpp>
 #include <fwTest/generator/SeriesDB.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#include <fwTools/System.hpp>
 
-#include "IoAtomsTest.hpp"
+#include <boost/filesystem/operations.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::ioAtoms::ut::IoAtomsTest );
@@ -36,6 +43,8 @@ static ::fwTest::Exception fwTestException(""); // force link with fwTest
 void IoAtomsTest::setUp()
 {
     // Set up context before running a test.
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    ::fwGui::registry::worker::init(worker);
 }
 
 //------------------------------------------------------------------------------
@@ -43,6 +52,7 @@ void IoAtomsTest::setUp()
 void IoAtomsTest::tearDown()
 {
     // Clean up after the test run.
+    ::fwGui::registry::worker::reset();
 }
 
 //------------------------------------------------------------------------------
@@ -51,7 +61,7 @@ template <typename T>
 void compareLog(T &comparator)
 {
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = comparator.getDifferences();
-    BOOST_FOREACH(::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for(::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " != " << prop.second );
     }
@@ -67,7 +77,7 @@ void write(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const SPTR(T)
     ::fwServices::IService::sptr writerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( writer );
     CPPUNIT_ASSERT(writerSrv);
 
-    ::fwServices::OSR::registerService( obj , writerSrv );
+    ::fwServices::OSR::registerService( obj, writerSrv );
     writerSrv->setConfiguration(srvCfg);
     writerSrv->configure();
     writerSrv->start();
@@ -81,11 +91,11 @@ template <typename T>
 SPTR(T) read(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const std::string &reader)
 {
 
-    typename T::sptr readObj = T::New();
+    typename T::sptr readObj               = T::New();
     ::fwServices::IService::sptr readerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( reader );
     CPPUNIT_ASSERT(readerSrv);
 
-    ::fwServices::OSR::registerService( readObj , readerSrv );
+    ::fwServices::OSR::registerService( readObj, readerSrv );
     readerSrv->setConfiguration(srvCfg);
     readerSrv->configure();
     readerSrv->start();
@@ -105,29 +115,29 @@ void writeReadFile(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const
 
     SPTR(T) readObj = read<T>(srvCfg, reader);
 
-        // Compare
+    // Compare
     using namespace ::fwDataCamp::visitor;
     CompareObjects visitor;
 
     visitor.compare(readObj, obj);
     compareLog(visitor);
 
-    CPPUNIT_ASSERT_MESSAGE("Objects not equal" , visitor.getDifferences()->empty() );
+    CPPUNIT_ASSERT_MESSAGE("Objects not equal", visitor.getDifferences()->empty() );
 }
 
 //------------------------------------------------------------------------------
 
 void atomTest(const ::boost::filesystem::path & filePath)
 {
-    ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr srvCfg  = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr fileCfg = ::fwRuntime::EConfigurationElement::New("file");
     fileCfg->setValue(filePath.string());
     srvCfg->addConfigurationElement(fileCfg);
 
-    ::fwMedData::SeriesDB::sptr seriesDB = ::fwTest::generator::SeriesDB::createSeriesDB(2,2,2);
-    ::fwData::Composite::sptr workspace = ::fwData::Composite::New();
+    ::fwMedData::SeriesDB::sptr seriesDB      = ::fwTest::generator::SeriesDB::createSeriesDB(2,2,2);
+    ::fwData::Composite::sptr workspace       = ::fwData::Composite::New();
     workspace->getContainer()["processingDB"] = ::fwData::Composite::New();
-    workspace->getContainer()["planningDB"] = ::fwData::Composite::New();
+    workspace->getContainer()["planningDB"]   = ::fwData::Composite::New();
 
     ::boost::filesystem::create_directories( filePath.parent_path() );
     writeReadFile< ::fwData::Composite>( srvCfg, workspace, "::ioAtoms::SWriter",  "::ioAtoms::SReader" );
@@ -142,7 +152,7 @@ void atomTest(const ::boost::filesystem::path & filePath)
         ::fwDataCamp::visitor::CompareObjects visitor;
         visitor.compare(readSeriesDB, seriesDB);
         compareLog(visitor);
-        CPPUNIT_ASSERT_MESSAGE("Objects not equal" , visitor.getDifferences()->empty() );
+        CPPUNIT_ASSERT_MESSAGE("Objects not equal", visitor.getDifferences()->empty() );
     }
 
 
@@ -158,7 +168,7 @@ void atomTest(const ::boost::filesystem::path & filePath)
         ::fwDataCamp::visitor::CompareObjects visitor;
         visitor.compare(readSeriesDB, seriesDB);
         compareLog(visitor);
-        CPPUNIT_ASSERT_MESSAGE("Objects not equal" , visitor.getDifferences()->empty() );
+        CPPUNIT_ASSERT_MESSAGE("Objects not equal", visitor.getDifferences()->empty() );
     }
 
 
@@ -187,7 +197,7 @@ void atomTest(const ::boost::filesystem::path & filePath)
         ::fwDataCamp::visitor::CompareObjects visitor;
         visitor.compare(workspace, composite);
         compareLog(visitor);
-        CPPUNIT_ASSERT_MESSAGE("Objects should  be different" , !visitor.getDifferences()->empty() );
+        CPPUNIT_ASSERT_MESSAGE("Objects should  be different", !visitor.getDifferences()->empty() );
         CPPUNIT_ASSERT(composite->find("seriesDB") != composite->end());
 
         {
@@ -197,7 +207,7 @@ void atomTest(const ::boost::filesystem::path & filePath)
             ::fwDataCamp::visitor::CompareObjects visitor;
             visitor.compare(seriesDB, newSeriesDB);
             compareLog(visitor);
-            CPPUNIT_ASSERT_MESSAGE("Objects not equal" , visitor.getDifferences()->empty() );
+            CPPUNIT_ASSERT_MESSAGE("Objects not equal", visitor.getDifferences()->empty() );
         }
     }
 }
@@ -232,13 +242,6 @@ void IoAtomsTest::XMLZTest()
 
 //------------------------------------------------------------------------------
 
-void IoAtomsTest::HDF5Test()
-{
-    atomTest(::fwTools::System::getTemporaryFolder() / "HDF5Test" / "ioAtomsTest.hdf5");
-}
-
-//------------------------------------------------------------------------------
-
 } // namespace ut
 } // namespace ioAtoms
 
diff --git a/Bundles/LeafIO/ioData/CMakeLists.txt b/Bundles/LeafIO/ioData/CMakeLists.txt
index 5c4b5a0..17c76be 100644
--- a/Bundles/LeafIO/ioData/CMakeLists.txt
+++ b/Bundles/LeafIO/ioData/CMakeLists.txt
@@ -1,18 +1,6 @@
 fwLoadProperties()
 
-fwUseForwardInclude(
-    fwData
-    fwDataTools
-    fwGui
-    fwRuntime
-    fwServices
-
-    io
-)
-
-
-find_package (Boost COMPONENTS system regex filesystem date_time chrono thread log log_setup REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
 
+find_package (Boost COMPONENTS regex REQUIRED)
+fwLink(${Boost_REGEX_LIBRARY})
 
diff --git a/Bundles/LeafIO/ioData/COPYING b/Bundles/LeafIO/ioData/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafIO/ioData/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafIO/ioData/COPYING.LESSER b/Bundles/LeafIO/ioData/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafIO/ioData/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafIO/ioData/Properties.cmake b/Bundles/LeafIO/ioData/Properties.cmake
index 6b61753..75f37f3 100644
--- a/Bundles/LeafIO/ioData/Properties.cmake
+++ b/Bundles/LeafIO/ioData/Properties.cmake
@@ -3,11 +3,13 @@ set( NAME ioData )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
 set( DEPENDENCIES
-    fwComEd
+    fwCom
     fwCore
+    fwTools
     fwData
     fwDataIO
     fwDataTools
+    fwMedDataTools
     fwGui
     fwRuntime
     fwServices
diff --git a/Bundles/LeafIO/ioData/bin/build.options b/Bundles/LeafIO/ioData/bin/build.options
deleted file mode 100644
index 58e3d58..0000000
--- a/Bundles/LeafIO/ioData/bin/build.options
+++ /dev/null
@@ -1,17 +0,0 @@
-TYPE    = 'bundle'
-VERSION  = '0-1'
-USE     = ['boost', 'boostFilesystem']
-LIB     = [
-          'fwTools_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwDataTools_0-1',
-          'fwDataIO_0-2',
-          'fwServices_0-1',
-          'fwCore_0-1',
-          'fwComEd_0-1',
-          'fwGui_0-1',
-          ]
-BUNDLES = ['io_0-1']
-
-
diff --git a/Bundles/LeafIO/ioData/include/ioData/CameraReaderService.hpp b/Bundles/LeafIO/ioData/include/ioData/CameraReaderService.hpp
deleted file mode 100644
index 654d23d..0000000
--- a/Bundles/LeafIO/ioData/include/ioData/CameraReaderService.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IODATA_CAMERAREADER_HPP_
-#define _IODATA_CAMERAREADER_HPP_
-
-#include <io/IReader.hpp>
-#include <boost/filesystem/path.hpp>
-#include <fwData/Camera.hpp>
-
-#include "ioData/export.hpp"
-
-
-namespace ioData
-{
-/**
- * @brief   Camera calibration file reader service.
- * @class   CameraReaderService
- * 
- * @date    2009.
- *
- * Service reading camera calibration file and create a camera object.
- * @li This service has no specified start and stop method.
- * @li Use setConfiguration(cfg) and configure() methods to configure the filename.
- * @li Use update() to load the file, create the camera object and notify reading to observers.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioData::CameraReaderService , ::fwData::Camera )
- */
-class IODATA_CLASS_API CameraReaderService : public ::io::IReader
-{
-public:
-    fwCoreServiceClassDefinitionsMacro ( (CameraReaderService)( ::io::IReader) ) ;
-    /// Super class of reader services
-    typedef ::io::IReader   SuperClass;
-
-    /**
-     * @brief Configure the path : default does nothing.
-     *
-     * This method is used to find
-     * the file path  using a file selector.
-     */
-    virtual void configureWithIHM(){};
-
-
-protected:
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-    * @brief Starting method : default does nothing.
-    *
-    * This method is used to initialize the service.
-    */
-    virtual void starting() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Stopping method : default does nothing.
-     *
-     * The stopping method is empty for this service.
-     */
-    virtual void stopping() throw(::fwTools::Failed){};
-
-    /**
-    * @brief Updating method. This method is called by update() from base service ( ::fwServices::IService )
-    *
-    * This method is used to update the service.
-    * Call this method after configuring() to load calibration file.
-    * Notify reading.
-    */
-    IODATA_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-     * @brief Info method.
-     *
-     * This method is used to give
-     * informations about the service.
-     *
-     * @param[out] _sstream output stream
-     */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
-    /// @}
-
-    /** @name Specified reader service methods ( override from ::io::IReader )
-     * @{
-    */
-
-    /**
-     * @brief   returns  (filename) extension
-     */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
-    /// @}
-
-    /// Return path type managed by the service, here FILE
-    IODATA_API virtual ::io::IOPathType getIOPathType() const;
-
-private:
-    /**
-     * @brief Load calibration file
-     *
-     * This method is called by updating method to load the file and create camera object.
-     *
-     * @param[in] fileName calibration filename
-     * @param[out] cam camera created with readed calibration file
-     */
-    bool loadCalibration( const std::string &fileName, ::boost::shared_ptr< ::fwData::Camera > cam );
-
-};
-
-}
-
-#endif /*_IODATA_CAMERAREADER_HPP_*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/MeshReaderService.hpp b/Bundles/LeafIO/ioData/include/ioData/MeshReaderService.hpp
index 7da71b2..1d7c223 100644
--- a/Bundles/LeafIO/ioData/include/ioData/MeshReaderService.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/MeshReaderService.hpp
@@ -1,23 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_MESHREADERSERVICE_HPP_
-#define _IODATA_MESHREADERSERVICE_HPP_
+#ifndef __IODATA_MESHREADERSERVICE_HPP__
+#define __IODATA_MESHREADERSERVICE_HPP__
 
 #include <io/IReader.hpp>
 #include <boost/filesystem/path.hpp>
 
-#include "ioData/export.hpp"
+#include "ioData/config.hpp"
 
 namespace ioData
 {
 /**
  * @brief   Mesh reader service.
  * @class   MeshReaderService
- * 
+ *
  * @date    2009.
  *
  * Service reading a trian file into a fwData::Mesh object.
@@ -33,10 +33,10 @@ class IODATA_CLASS_API MeshReaderService : public ::io::IReader
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (MeshReaderService)(::io::IReader) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (MeshReaderService)(::io::IReader) );
 
-     /// Super class of reader services
-    typedef ::io::IReader   SuperClass;
+    /// Super class of reader services
+    typedef ::io::IReader SuperClass;
 
 
     /** @name Specified reader service methods ( override from ::io::IReader )
@@ -46,7 +46,7 @@ public:
     /**
      * @brief   returns  (filename) extension
      */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IODATA_API virtual std::vector< std::string > getSupportedExtensions();
 
     /**
      * @brief Configure the mesh path.
@@ -71,14 +71,18 @@ protected:
      *
      * This method is used to initialize the service.
      */
-    virtual void starting() throw(::fwTools::Failed){};
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
 
     /**
      * @brief Stopping method : default does nothing.
      *
      * The stopping method is empty for this service.
      */
-    virtual void stopping() throw(::fwTools::Failed){};
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
 
 
     /**
@@ -91,16 +95,6 @@ protected:
     IODATA_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
@@ -108,11 +102,11 @@ protected:
      *
      * @param[out] _sstream output stream
      */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
+    IODATA_API virtual void info(std::ostream &_sstream );
     /// @}
 
 };
 
 }
 
-#endif /*_IODATA_MESHREADERSERVICE_HPP_*/
+#endif /*__IODATA_MESHREADERSERVICE_HPP__*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/MeshWriterService.hpp b/Bundles/LeafIO/ioData/include/ioData/MeshWriterService.hpp
index 456dca4..615bbd5 100644
--- a/Bundles/LeafIO/ioData/include/ioData/MeshWriterService.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/MeshWriterService.hpp
@@ -1,23 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_MESHWRITERSERVICE_HPP_
-#define _IODATA_MESHWRITERSERVICE_HPP_
+#ifndef __IODATA_MESHWRITERSERVICE_HPP__
+#define __IODATA_MESHWRITERSERVICE_HPP__
 
 #include <io/IWriter.hpp>
 #include <boost/filesystem/path.hpp>
 
-#include "ioData/export.hpp"
+#include "ioData/config.hpp"
 
 namespace ioData
 {
 /**
  * @brief   Mesh writer service.
  * @class   MeshWriterService
- * 
+ *
  * @date    2011.
  *
  * Service writing a mesh object.
@@ -34,20 +34,20 @@ class IODATA_CLASS_API MeshWriterService : public ::io::IWriter
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (MeshWriterService)(::io::IWriter) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (MeshWriterService)(::io::IWriter) );
 
-     /// Super class of writer services
-    typedef ::io::IWriter   SuperClass;
+    /// Super class of writer services
+    typedef ::io::IWriter SuperClass;
 
     /**
      * @brief   Constructor : does nothing
      */
-    IODATA_API MeshWriterService() ;
+    IODATA_API MeshWriterService();
 
     /**
      * @brief   destructor
      */
-    IODATA_API ~MeshWriterService() throw() ;
+    IODATA_API ~MeshWriterService() throw();
 
     /** @name Specified writer service methods ( override from ::io::IWriter )
      * @{
@@ -56,7 +56,7 @@ public:
     /**
      * @brief   returns  (filename) extension
      */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IODATA_API virtual std::vector< std::string > getSupportedExtensions();
 
     /**
      * @brief Configure the mesh path.
@@ -81,14 +81,18 @@ protected:
      *
      * This method is used to initialize the service.
      */
-    virtual void starting() throw(::fwTools::Failed){};
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
 
     /**
      * @brief Stopping method : default does nothing.
      *
      * The stopping method is empty for this service.
      */
-    virtual void stopping() throw(::fwTools::Failed){};
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
 
     /**
      * @brief Updating method. This method is called by update() from base service ( ::fwServices::IService )
@@ -100,16 +104,6 @@ protected:
     IODATA_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
@@ -117,11 +111,11 @@ protected:
      *
      * @param[out] _sstream output stream
      */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
+    IODATA_API virtual void info(std::ostream &_sstream );
     /// @}
 
 };
 
 }
 
-#endif /*_IODATA_MESHWRITERSERVICE_HPP_*/
+#endif /*__IODATA_MESHWRITERSERVICE_HPP__*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/Namespace.hpp b/Bundles/LeafIO/ioData/include/ioData/Namespace.hpp
index d53edd7..867e4c1 100644
--- a/Bundles/LeafIO/ioData/include/ioData/Namespace.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef IODATANAMESPACE_HPP_
-#define IODATANAMESPACE_HPP_
+#ifndef __IODATA_NAMESPACE_HPP__
+#define __IODATA_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace ioData contains reader and writer services for basic ::fwData::Object which doesn't need external library.
  * @namespace   ioData
- * 
+ *
  * @date        2009.
  *
  */
@@ -18,4 +18,4 @@ namespace ioData
 {
 
 }
-#endif /* IODATANAMESPACE_HPP_ */
+#endif /* __IODATA_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafIO/ioData/include/ioData/Plugin.hpp b/Bundles/LeafIO/ioData/include/ioData/Plugin.hpp
index 29c61b7..37134e1 100644
--- a/Bundles/LeafIO/ioData/include/ioData/Plugin.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_PLUGIN_HPP_
-#define _IODATA_PLUGIN_HPP_
+#ifndef __IODATA_PLUGIN_HPP__
+#define __IODATA_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -38,4 +38,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace ioData
 
-#endif //_IODATA_PLUGIN_HPP_
+#endif //__IODATA_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioData/include/ioData/SplineReaderService.hpp b/Bundles/LeafIO/ioData/include/ioData/SplineReaderService.hpp
index fa8f828..e1e7386 100644
--- a/Bundles/LeafIO/ioData/include/ioData/SplineReaderService.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/SplineReaderService.hpp
@@ -1,27 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_SPLINEREADER_HPP_
-#define _IODATA_SPLINEREADER_HPP_
+#ifndef __IODATA_SPLINEREADERSERVICE_HPP__
+#define __IODATA_SPLINEREADERSERVICE_HPP__
+
+#include "ioData/config.hpp"
+
+#include <fwData/Spline.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
 
 #include <io/IReader.hpp>
+
 #include <boost/filesystem/path.hpp>
-#include <fwData/TransformationMatrix3D.hpp>
-#include <boost/weak_ptr.hpp>
-#include <boost/shared_ptr.hpp>
 
-#include "ioData/export.hpp"
 
 namespace ioData
 {
 /**
  * @brief   Spline reader service.
- * @class   SplineReaderService
- * 
- * @date    2009.
  *
  * Service reading a spline object.
  * @li This service has no specified start and stop method.
@@ -35,18 +34,18 @@ class IODATA_CLASS_API SplineReaderService : public ::io::IReader
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SplineReaderService)( ::io::IReader) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SplineReaderService)( ::io::IReader) );
     /// Super class of reader services
-    typedef ::io::IReader   SuperClass;
+    typedef ::io::IReader SuperClass;
     /**
      * @brief   Constructor
      */
-    IODATA_API SplineReaderService() ;
+    IODATA_API SplineReaderService();
 
     /**
      * @brief   Destructor
      */
-    IODATA_API ~SplineReaderService() throw() ;
+    IODATA_API ~SplineReaderService() throw();
 
     /** @name Specified reader service methods ( override from ::io::IReader )
      * @{
@@ -57,12 +56,14 @@ public:
      * This method is used to find
      * the file path  using a file selector.
      */
-    virtual void configureWithIHM(){};
+    virtual void configureWithIHM()
+    {
+    }
 
     /**
      * @brief   returns  (filename) extension
      */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IODATA_API virtual std::vector< std::string > getSupportedExtensions();
 
     /// @}
 
@@ -77,32 +78,36 @@ protected:
      *
      * This method is used to initialize the service.
      */
-    virtual void starting() throw(::fwTools::Failed){};
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
 
     /**
      * @brief Stopping method : default does nothing.
      *
      * The stopping method is empty for this service.
      */
-    virtual void stopping() throw(::fwTools::Failed){};
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
 
 
     /**
      * @brief Configure service. This method is called by configure() from base service ( ::fwServices::IService )
      *
      * XML configuration sample:
-     * @verbatim
-     <service uid="tubeReader" type="::io::IReader" impl="::ioData::SplineReaderService">
+     * @code{.xml}
+       <service uid="tubeReader" type="::io::IReader" impl="::ioData::SplineReaderService">
        <spline id="0" matrix="../matrix.trf" nbSides="10" radius="10">
         <point id="0"/>
         <point id="4"/>
         <point id="1"/>
         <point id="5"/>
-      </spline>
-    </service>
-      @endverbatim
+       </spline>
+       </service>
+       @endcode
      */
-    IODATA_API virtual void configuring( ) throw(::fwTools::Failed) ;
+    IODATA_API virtual void configuring( ) throw(::fwTools::Failed);
 
     /**
      * @brief Updating method. This method is called by update() from base service ( ::fwServices::IService )
@@ -113,15 +118,6 @@ protected:
     IODATA_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
@@ -129,7 +125,7 @@ protected:
      *
      * @param[out] _sstream output stream
      */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
+    IODATA_API virtual void info(std::ostream& _sstream );
     /// @}
 
 private:
@@ -139,23 +135,23 @@ private:
      * @param m_file fichier contenat la matrice de transformation.
      * @return TransformationMatrix3D
      */
-     ::boost::shared_ptr< ::fwData::TransformationMatrix3D > loadObjectTransformationMatrix3D(std::string m_file);
+    std::shared_ptr< ::fwData::TransformationMatrix3D > loadObjectTransformationMatrix3D(std::string m_file);
 
     /**
      * @brief   matrice 4X4 permettant de positionner l'objet
      */
-     ::boost::shared_ptr< ::fwData::TransformationMatrix3D> objectMatrix;
+    std::shared_ptr< ::fwData::TransformationMatrix3D> objectMatrix;
     /**
      * @brief   true s'il existe matrice 4X4 permettant de positionner l'objet
      */
     bool isTransfo;
-    typedef std::vector< ::fwData::Spline::point > Points ;
-    Points      m_points;
-    double      m_radius;
-    int         m_nbSides;
-    int         m_idSpline;
+    typedef std::vector< ::fwData::Spline::point > Points;
+    Points m_points;
+    double m_radius;
+    int m_nbSides;
+    int m_idSpline;
 };
 
 }
 
-#endif /*_IODATA_SPLINEREADER_HPP_*/
+#endif /*__IODATA_SPLINEREADERSERVICE_HPP__*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DReaderService.hpp b/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DReaderService.hpp
index d44267a..16b0ab3 100644
--- a/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DReaderService.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DReaderService.hpp
@@ -1,24 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_TRANSFORMATIONMATRIX3DREADER_HPP_
-#define _IODATA_TRANSFORMATIONMATRIX3DREADER_HPP_
+#ifndef __IODATA_TRANSFORMATIONMATRIX3DREADERSERVICE_HPP__
+#define __IODATA_TRANSFORMATIONMATRIX3DREADERSERVICE_HPP__
 
 #include <boost/filesystem/path.hpp>
 
 #include <io/IReader.hpp>
 
-#include "ioData/export.hpp"
+#include "ioData/config.hpp"
 
 namespace ioData
 {
 /**
  * @brief   Transformation matrix 3D reader service.
  * @class   TransformationMatrix3DReaderService
- * 
+ *
  * @date    2009.
  *
  * Service reading a TransformationMatrix3D object.
@@ -34,10 +34,10 @@ class IODATA_CLASS_API TransformationMatrix3DReaderService : public ::io::IReade
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrix3DReaderService)(::io::IReader) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrix3DReaderService)(::io::IReader) );
 
     /// Super class of reader services
-    typedef ::io::IReader   SuperClass;
+    typedef ::io::IReader SuperClass;
 
     /** @name Specified reader service methods ( override from ::io::IReader )
      * @{
@@ -54,7 +54,7 @@ public:
     /**
      * @brief   returns  (filename) extension
      */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IODATA_API virtual std::vector< std::string > getSupportedExtensions();
     /// @}
 
     /// Return path type managed by the service, here FILE
@@ -90,16 +90,6 @@ protected:
     IODATA_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
@@ -107,11 +97,11 @@ protected:
      *
      * @param[out] _sstream output stream
      */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
+    IODATA_API virtual void info(std::ostream &_sstream );
     /// @}
 
 };
 
 } // namespace ioData
 
-#endif // _IODATA_TRANSFORMATIONMATRIX3DREADER_HPP_
+#endif // __IODATA_TRANSFORMATIONMATRIX3DREADERSERVICE_HPP__
diff --git a/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DWriterService.hpp b/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DWriterService.hpp
index ab32e4c..da0b7ed 100644
--- a/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DWriterService.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/TransformationMatrix3DWriterService.hpp
@@ -1,24 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_TRANSFORMATIONMATRIX3DWRITER_HPP_
-#define _IODATA_TRANSFORMATIONMATRIX3DWRITER_HPP_
+#ifndef __IODATA_TRANSFORMATIONMATRIX3DWRITERSERVICE_HPP__
+#define __IODATA_TRANSFORMATIONMATRIX3DWRITERSERVICE_HPP__
 
 #include <boost/filesystem/path.hpp>
 
 #include <io/IWriter.hpp>
 
-#include "ioData/export.hpp"
+#include "ioData/config.hpp"
 
 namespace ioData
 {
 /**
  * @brief   Transformation matrix 3D writer service.
  * @class   TransformationMatrix3DWriterService
- * 
+ *
  * @date    2009.
  *
  * Service writing a TransformationMatrix3D object
@@ -35,10 +35,10 @@ class IODATA_CLASS_API TransformationMatrix3DWriterService : public ::io::IWrite
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrix3DWriterService)(::io::IWriter) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrix3DWriterService)(::io::IWriter) );
 
     /// Super class of writer services
-    typedef ::io::IWriter   SuperClass;
+    typedef ::io::IWriter SuperClass;
 
 
     /** @name Specified writer service methods ( override from ::io::IWriter )
@@ -56,7 +56,7 @@ public:
     /**
      * @brief   returns  (filename) extension
      */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IODATA_API virtual std::vector< std::string > getSupportedExtensions();
     ///@}
 
     /// Return path type managed by the service, here FILE
@@ -92,16 +92,6 @@ protected:
     IODATA_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
@@ -109,11 +99,11 @@ protected:
      *
      * @param[out] _sstream output stream
      */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
+    IODATA_API virtual void info(std::ostream &_sstream );
     /// @}
 
 };
 
 } // namespace ioData
 
-#endif // _IODATA_TRANSFORMATIONMATRIX3DWRITER_HPP_
+#endif // __IODATA_TRANSFORMATIONMATRIX3DWRITERSERVICE_HPP__
diff --git a/Bundles/LeafIO/ioData/include/ioData/TriangularMeshReaderService.hpp b/Bundles/LeafIO/ioData/include/ioData/TriangularMeshReaderService.hpp
deleted file mode 100644
index 8617a59..0000000
--- a/Bundles/LeafIO/ioData/include/ioData/TriangularMeshReaderService.hpp
+++ /dev/null
@@ -1,116 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IODATA_TRIANGULARMESHREADERSERVICE_HPP_
-#define _IODATA_TRIANGULARMESHREADERSERVICE_HPP_
-
-#include <io/IReader.hpp>
-#include <boost/filesystem/path.hpp>
-
-#include "ioData/export.hpp"
-
-namespace ioData
-{
-/**
- * @brief   Triangular mesh reader service.
- * @class   TriangularMeshReaderService
- * 
- * @date    2009.
- *
- * Service reading a mesh object.
- * @li This service has no specified start and stop method.
- * @li Use setConfiguration(cfg) and configure() methods to configure the mesh filename.
- * @li Use update() to read the mesh and notify observers.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioData::TriangularMeshReaderService , ::fwData::TriangularMesh )
- */
-class IODATA_CLASS_API TriangularMeshReaderService : public ::io::IReader
-{
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (TriangularMeshReaderService)(::io::IReader) ) ;
-
-     /// Super class of reader services
-    typedef ::io::IReader   SuperClass;
-
-    /** @name Specified reader service methods ( override from ::io::IReader )
-     * @{
-     */
-
-    /**
-     * @brief   returns  (filename) extension
-     */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
-
-    /**
-     * @brief Configure the mesh path.
-     *
-     * This method is used to find
-     * the file path  using a file selector.
-     */
-    IODATA_API void configureWithIHM();
-    /// @}
-
-    /// Return path type managed by the service, here FILE
-    IODATA_API virtual ::io::IOPathType getIOPathType() const;
-
-protected:
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief Starting method : default does nothing.
-     *
-     * This method is used to initialize the service.
-     */
-    virtual void starting() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Stopping method : default does nothing.
-     *
-     * The stopping method is empty for this service.
-     */
-    virtual void stopping() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Updating method. This method is called by update() from base service ( ::fwServices::IService )
-     *
-     * This method is used to update the service.
-     * The mesh is read with the reader ::fwDataIO::reader::TriangularMeshReader.
-     * Notify reading.
-     */
-    IODATA_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-
-    /**
-     * @brief Info method.
-     *
-     * This method is used to give
-     * informations about the service.
-     *
-     * @param[out] _sstream output stream
-     */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
-    /// @}
-
-};
-
-}
-
-#endif /*_IODATA_TRIANGULARMESHREADERSERVICE_HPP_*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/TriangularMeshWriterService.hpp b/Bundles/LeafIO/ioData/include/ioData/TriangularMeshWriterService.hpp
deleted file mode 100644
index 03afa8e..0000000
--- a/Bundles/LeafIO/ioData/include/ioData/TriangularMeshWriterService.hpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IODATA_TRIANGULARMESHWRITER_HPP_
-#define _IODATA_TRIANGULARMESHWRITER_HPP_
-
-#include <io/IWriter.hpp>
-#include <boost/filesystem/path.hpp>
-
-#include "ioData/export.hpp"
-
-namespace ioData
-{
-/**
- * @brief   Triangular mesh writer service.
- * @class   TriangularMeshWriterService
- * 
- * @date    2009.
- *
- * Service writing a mesh object.
- * @li This service has no specified start and stop method.
- * @li Use setConfiguration(cfg) and configure() methods to configure the mesh filename.
- * @li Use update() to write the mesh and notify observers.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IWriter , ::ioData::TriangularMeshWriterService , ::fwData::TriangularMesh )
- */
-class IODATA_CLASS_API TriangularMeshWriterService : public ::io::IWriter
-{
-
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (TriangularMeshWriterService)(::io::IWriter) ) ;
-
-     /// Super class of writer services
-    typedef ::io::IWriter   SuperClass;
-
-
-    /** @name Specified writer service methods ( override ::io::IWriter )
-     * @{
-     */
-
-    /**
-     * @brief   returns  (filename) extension
-     */
-    IODATA_API virtual std::vector< std::string > getSupportedExtensions() ;
-
-    /**
-     * @brief Configure the mesh path.
-     *
-     * This method is used to find
-     * the file path  using a file selector.
-     */
-    IODATA_API void configureWithIHM();
-    /// @}
-
-    /// Return path type managed by the service, here FILE
-    IODATA_API virtual ::io::IOPathType getIOPathType() const;
-
-protected:
-
-    /** @name Service methods ( override ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief Starting method : default does nothing.
-     *
-     * This method is used to initialize the service.
-     */
-    virtual void starting() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Stopping method : default does nothing.
-     *
-     * The stopping method is empty for this service.
-     */
-    virtual void stopping() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Updating method. This method is called by update() from base service ( ::fwServices::IService )
-     *
-     * This method is used to update the service.
-     * The mesh is written with the writer ::fwDataIO::writer::TriangularMeshWriter.
-     * Notify writing.
-     */
-    IODATA_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automaticaly called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-
-    /**
-     * @brief Info method.
-     *
-     * This method is used to give
-     * informations about the service.
-     *
-     * @param[out] _sstream output stream
-     */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
-    /// @}
-
-};
-
-}
-
-#endif /*_IODATA_TRIANGULARMESHWRITER_HPP_*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/action/SMeshModifier.hpp b/Bundles/LeafIO/ioData/include/ioData/action/SMeshModifier.hpp
index a0666ba..42e0512 100644
--- a/Bundles/LeafIO/ioData/include/ioData/action/SMeshModifier.hpp
+++ b/Bundles/LeafIO/ioData/include/ioData/action/SMeshModifier.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IODATA_ACTION_SMESHMODIFIER_HPP_
-#define _IODATA_ACTION_SMESHMODIFIER_HPP_
+#ifndef __IODATA_ACTION_SMESHMODIFIER_HPP__
+#define __IODATA_ACTION_SMESHMODIFIER_HPP__
 
 #include <fwServices/IService.hpp>
 
 #include <fwGui/IActionSrv.hpp>
 #include <fwDataTools/AlgoMeshDeformation.hpp>
 
-#include "ioData/export.hpp"
+#include "ioData/config.hpp"
 
 namespace ioData
 {
@@ -27,19 +27,19 @@ namespace action
 class IODATA_CLASS_API SMeshModifier : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SMeshModifier)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SMeshModifier)(::fwGui::IActionSrv) );
 
     /**
-    * @brief Constructor. Do nothing.
-    */
-    IODATA_API SMeshModifier() throw() ;
+     * @brief Constructor. Do nothing.
+     */
+    IODATA_API SMeshModifier() throw();
 
     /**
-    * @brief Destructor. Do nothing.
-    */
-    IODATA_API virtual ~SMeshModifier() throw() ;
+     * @brief Destructor. Do nothing.
+     */
+    IODATA_API virtual ~SMeshModifier() throw();
 
 protected:
 
@@ -48,36 +48,31 @@ protected:
      */
 
     /**
-      * @brief Configure the functor used to generate the mesh.
-      *
-      * Example of configuration :
-      * @verbatim
+     * @brief Configure the functor used to generate the mesh.
+     *
+     * Example of configuration :
+     * @code{.xml}
          <service ... >
              <config functor="ShakeMeshPoint" />
          </service>
-        @endverbatim
-      * Functor available :
-      *  - ShakeMeshPoint
-      *  - ColorizeMeshPoints
-      *  - ColorizeMeshCells
-      *  - ComputePointNormals
-      *  - ComputeCellNormals
-      *  - ShakePointNormals
-      *  - ShakeCellNormals
-      *  - MeshDeformation
-      */
-    IODATA_API virtual void configuring() throw( ::fwTools::Failed ) ;
+        @endcode
+     * Functor available :
+     *  - ShakeMeshPoint
+     *  - ColorizeMeshPoints
+     *  - ColorizeMeshCells
+     *  - ComputePointNormals
+     *  - ComputeCellNormals
+     *  - ShakePointNormals
+     *  - ShakeCellNormals
+     *  - MeshDeformation
+     */
+    IODATA_API virtual void configuring() throw( ::fwTools::Failed );
 
     IODATA_API virtual void starting() throw(::fwTools::Failed);
 
     IODATA_API virtual void stopping() throw(::fwTools::Failed);
 
     /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    IODATA_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
      * @brief Process the action: modifies the mesh using the selected functor.
      */
     IODATA_API virtual void updating() throw(::fwTools::Failed);
@@ -85,7 +80,7 @@ protected:
     /**
      * @brief This method gives information about the class.
      */
-    IODATA_API virtual void info(std::ostream &_sstream ) ;
+    IODATA_API virtual void info(std::ostream &_sstream );
 
     ///@}
 
@@ -103,4 +98,4 @@ private:
 } // namespace ioData
 
 
-#endif /*_IODATA_ACTION_SMESHMODIFIER_HPP_*/
+#endif /*__IODATA_ACTION_SMESHMODIFIER_HPP__*/
diff --git a/Bundles/LeafIO/ioData/include/ioData/export.hpp b/Bundles/LeafIO/ioData/include/ioData/export.hpp
deleted file mode 100644
index 68bf951..0000000
--- a/Bundles/LeafIO/ioData/include/ioData/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IODATA_CONFIG_HPP_
-#define _IODATA_CONFIG_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef IODATA_EXPORTS
-    #define IODATA_API __declspec(dllexport)
-    #else
-    #define IODATA_API __declspec(dllimport)
-    #endif
-
-    #define IODATA_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IODATA_EXPORTS
-    #define IODATA_API __attribute__ ((visibility("default")))
-    #define IODATA_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IODATA_API __attribute__ ((visibility("hidden")))
-    #define IODATA_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IODATA_API
-    #define IODATA_CLASS_API
-
-#endif
-
-#endif // #ifndef _IODATA_CONFIG_HPP_
diff --git a/Bundles/LeafIO/ioData/rc/plugin.xml b/Bundles/LeafIO/ioData/rc/plugin.xml
index ec5af1b..bf1198a 100644
--- a/Bundles/LeafIO/ioData/rc/plugin.xml
+++ b/Bundles/LeafIO/ioData/rc/plugin.xml
@@ -1,16 +1,10 @@
-<plugin id="ioData" class="::ioData::Plugin" >
+<plugin id="ioData" class="::ioData::Plugin"  version="@DASH_VERSION@" >
     <library name="ioData" />
 
     <requirement id="io" />
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IReader</type>
-        <service>::ioData::CameraReaderService</service>
-        <object>::fwData::Camera</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IReader</type>
         <service>::ioData::SplineReaderService</service>
         <object>::fwData::Spline</object>
     </extension>
@@ -24,13 +18,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IReader</type>
-        <service>::ioData::TriangularMeshReaderService</service>
-        <object>::fwData::TriangularMesh</object>
-        <desc>Trian file reader</desc>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IReader</type>
         <service>::ioData::TransformationMatrix3DReaderService</service>
         <object>::fwData::TransformationMatrix3D</object>
         <desc>TransformationMatrix3D Reader</desc>
@@ -42,13 +29,6 @@
         <object>::fwData::TransformationMatrix3D</object>
         <desc>TransformationMatrix3D Writer</desc>
     </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IWriter</type>
-        <service>::ioData::TriangularMeshWriterService</service>
-        <object>::fwData::TriangularMesh</object>
-        <desc>Trian file writer</desc>
-    </extension>
     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IWriter</type>
diff --git a/Bundles/LeafIO/ioData/src/ioData/CameraReaderService.cpp b/Bundles/LeafIO/ioData/src/ioData/CameraReaderService.cpp
deleted file mode 100644
index 2fde41d..0000000
--- a/Bundles/LeafIO/ioData/src/ioData/CameraReaderService.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Camera.hpp>
-#include <fwCore/base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwComEd/CameraMsg.hpp>
-
-#include "ioData/CameraReaderService.hpp"
-
-fwServicesRegisterMacro( ::io::IReader , ::ioData::CameraReaderService , ::fwData::Camera ) ;
-
-namespace ioData
-{
-
-//-----------------------------------------------------------------------------
-
-void CameraReaderService::info(std::ostream &_sstream )
-{
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << " camera calibration file reader" ;
-}
-
-//-----------------------------------------------------------------------------
-
-std::vector< std::string > CameraReaderService::getSupportedExtensions()
-{
-    std::vector< std::string > extensions ;
-    extensions.push_back(".cal");
-    return extensions ;
-}
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType CameraReaderService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//-----------------------------------------------------------------------------
-
-void CameraReaderService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve object
-        ::fwData::Camera::sptr cam = this->getObject< ::fwData::Camera>( );
-        SLM_ASSERT("cam not instanced", cam);
-
-        OSLM_INFO("path: " << this->getFile().string());
-        this->loadCalibration(this->getFile().string(), cam);
-
-        // Notify reading
-        ::fwComEd::CameraMsg::sptr msg = ::fwComEd::CameraMsg::New();
-        msg->addEvent( ::fwComEd::CameraMsg::NEW_CAMERA ) ;
-
-        ::fwServices::IEditionService::notify(this->getSptr(), cam, msg);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-bool CameraReaderService::loadCalibration( const std::string &fileName, ::fwData::Camera::sptr cam )
-{
-    std::ifstream f;
-    f.open (fileName.c_str(), std::fstream::in);
-    if (!f.is_open())
-        return false;
-    double M[5];
-    unsigned int i, j;
-    ::fwData::TransformationMatrix3D::sptr m_extrinsicMatrix = ::fwData::TransformationMatrix3D::New();
-    for( i=0 ; i<4 ; ++i )
-    {
-        for( j=0; j<4; ++j )
-        {
-            f>>M[j];
-            m_extrinsicMatrix->setCoefficient(i,j,M[j]);
-        }
-    }
-    cam->setExtrinsicCameraTransformation(m_extrinsicMatrix);
-    // alpha values : Focale en X ; Focale en Y
-    for( i=0; i<5; ++i )
-    {
-        f>>M[i];
-    }
-
-    cam->setFx(M[0]); // AlphaU
-    cam->setFy(M[1]); // AlphaV
-    // Principal point : Position du centre optique u0 ; v0
-    cam->setCx(M[2]); // u0
-    cam->setCy(M[3]); // v0
-    /*
-    //TODO
-    // ajouter coeff de distortion et skew � ::fwData::Video
-    cam->setAlphaC(M[4]); // skew (Orthogonalit� de la plaque CCD)
-    // Radial 1er ordre ; 2�me ordre ; Tangentiel 1er ordre ; 2�me ordre ; Radial 3�me ordre
-    for( i=0 ; i<5 ; ++i )
-    {
-        f>>M[i];
-        setkc(i,M[i]);
-    }
-    */
-    f.close();
-
-    return true;
-}
-
-//-----------------------------------------------------------------------------
-
-}
diff --git a/Bundles/LeafIO/ioData/src/ioData/MeshReaderService.cpp b/Bundles/LeafIO/ioData/src/ioData/MeshReaderService.cpp
index c185ece..13c14db 100644
--- a/Bundles/LeafIO/ioData/src/ioData/MeshReaderService.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/MeshReaderService.cpp
@@ -1,35 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <fstream>
-
-#include <boost/filesystem/operations.hpp>
+#include "ioData/MeshReaderService.hpp"
 
 #include <io/IReader.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwData/Mesh.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
+
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
+#include <fwData/Mesh.hpp>
+
+#include <fwDataIO/reader/MeshReader.hpp>
 
 #include <fwGui/dialog/LocationDialog.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
 
-#include <fwCore/base.hpp>
 #include <fwServices/macros.hpp>
 
-#include <fwDataIO/reader/MeshReader.hpp>
-
-#include <fwComEd/MeshMsg.hpp>
+#include <boost/filesystem/operations.hpp>
 
-#include "ioData/MeshReaderService.hpp"
+#include <iostream>
+#include <fstream>
 
-fwServicesRegisterMacro( ::io::IReader , ::ioData::MeshReaderService , ::fwData::Mesh ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioData::MeshReaderService, ::fwData::Mesh );
 
 namespace ioData
 {
@@ -38,17 +39,17 @@ namespace ioData
 
 void MeshReaderService::info(std::ostream &_sstream )
 {
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << "Trian file reader" ;
+    this->SuperClass::info( _sstream );
+    _sstream << std::endl << "Trian file reader";
 }
 
 //-----------------------------------------------------------------------------
 
 std::vector< std::string > MeshReaderService::getSupportedExtensions()
 {
-    std::vector< std::string > extensions ;
+    std::vector< std::string > extensions;
     extensions.push_back(".trian");
-    return extensions ;
+    return extensions;
 }
 
 //------------------------------------------------------------------------------
@@ -71,8 +72,8 @@ void MeshReaderService::configureWithIHM()
     dialogFile.addFilter("Trian file","*.trian");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
@@ -105,9 +106,12 @@ void MeshReaderService::updating() throw(::fwTools::Failed)
             // Launch reading process
             reader->read();
             // Notify reading
-            ::fwComEd::MeshMsg::sptr msg = ::fwComEd::MeshMsg::New();
-            msg->addEvent( ::fwComEd::MeshMsg::NEW_MESH );
-            ::fwServices::IEditionService::notify(this->getSptr(), mesh, msg);
+            ::fwData::Object::ModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            {
+                ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+                sig->asyncEmit();
+            }
         }
         catch (const std::exception & e)
         {
@@ -115,16 +119,16 @@ void MeshReaderService::updating() throw(::fwTools::Failed)
             ss << "Warning during loading : " << e.what();
 
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Warning",
-                    ss.str(),
-                    ::fwGui::dialog::IMessageDialog::WARNING);
+                "Warning",
+                ss.str(),
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
         catch( ... )
         {
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Warning",
-                    "Warning during loading.",
-                    ::fwGui::dialog::IMessageDialog::WARNING);
+                "Warning",
+                "Warning during loading.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
     }
 }
diff --git a/Bundles/LeafIO/ioData/src/ioData/MeshWriterService.cpp b/Bundles/LeafIO/ioData/src/ioData/MeshWriterService.cpp
index e2ad240..d15f12a 100644
--- a/Bundles/LeafIO/ioData/src/ioData/MeshWriterService.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/MeshWriterService.cpp
@@ -1,14 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <boost/filesystem/operations.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
 #include <fwServices/macros.hpp>
 
 #include <fwData/Mesh.hpp>
@@ -22,7 +19,7 @@
 
 #include "ioData/MeshWriterService.hpp"
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioData::MeshWriterService , ::fwData::Mesh ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioData::MeshWriterService, ::fwData::Mesh );
 
 namespace ioData
 {
@@ -35,23 +32,24 @@ MeshWriterService::MeshWriterService()
 
 void MeshWriterService::info(std::ostream &_sstream )
 {
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << " Mesh writer" ;
+    this->SuperClass::info( _sstream );
+    _sstream << std::endl << " Mesh writer";
 }
 
 //-----------------------------------------------------------------------------
 
 std::vector< std::string > MeshWriterService::getSupportedExtensions()
 {
-    std::vector< std::string > extensions ;
+    std::vector< std::string > extensions;
     extensions.push_back(".trian");
-    return extensions ;
+    return extensions;
 }
 
 //-----------------------------------------------------------------------------
 
 MeshWriterService::~MeshWriterService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -73,8 +71,8 @@ void MeshWriterService::configureWithIHM()
     dialogFile.addFilter("TrianMesh","*.trian");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
@@ -112,9 +110,9 @@ void MeshWriterService::updating() throw(::fwTools::Failed)
             ss << "Warning during writing Mesh : " << e.what();
 
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Warning",
-                    ss.str(),
-                    ::fwGui::dialog::IMessageDialog::WARNING);
+                "Warning",
+                ss.str(),
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
 
     }
diff --git a/Bundles/LeafIO/ioData/src/ioData/Plugin.cpp b/Bundles/LeafIO/ioData/src/ioData/Plugin.cpp
index f452f0f..aa608be 100644
--- a/Bundles/LeafIO/ioData/src/ioData/Plugin.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace ioData
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::ioData::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace ioData
diff --git a/Bundles/LeafIO/ioData/src/ioData/SplineReaderService.cpp b/Bundles/LeafIO/ioData/src/ioData/SplineReaderService.cpp
index b7d57c8..b389d59 100644
--- a/Bundles/LeafIO/ioData/src/ioData/SplineReaderService.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/SplineReaderService.cpp
@@ -1,28 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <io/IReader.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
+#include "ioData/SplineReaderService.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
 #include <fwRuntime/ConfigurationElement.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/SplineMsg.hpp>
+#include <fwServices/macros.hpp>
+
+#include <io/IReader.hpp>
 
-#include <fwData/Spline.hpp>
-#include <fstream>
-#include <fwCore/base.hpp>
-#include <iostream>
 #include <boost/lexical_cast.hpp>
-#include <fwServices/macros.hpp>
 
-#include "ioData/SplineReaderService.hpp"
+#include <fstream>
+#include <iostream>
 
-fwServicesRegisterMacro( ::io::IReader , ::ioData::SplineReaderService , ::fwData::Spline ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioData::SplineReaderService, ::fwData::Spline );
 
 namespace ioData
 {
@@ -34,19 +33,19 @@ SplineReaderService::SplineReaderService()
 
 //-----------------------------------------------------------------------------
 
-void SplineReaderService::info(std::ostream &_sstream )
+void SplineReaderService::info(std::ostream& _sstream )
 {
-    this->SuperClass::info( _sstream ) ;
-    _sstream  << " spline reader" << std::endl;
+    this->SuperClass::info( _sstream );
+    _sstream << " spline reader" << std::endl;
 }
 
 //-----------------------------------------------------------------------------
 
 std::vector< std::string > SplineReaderService::getSupportedExtensions()
 {
-    std::vector< std::string > extensions ;
+    std::vector< std::string > extensions;
     extensions.push_back(".spline");
-    return extensions ;
+    return extensions;
 }
 
 //-----------------------------------------------------------------------------
@@ -62,7 +61,8 @@ void SplineReaderService::configuring( ) throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
 
     ::fwRuntime::ConfigurationElementContainer::Iterator iter;
-    for (iter = m_configuration->begin() ; iter != m_configuration->end() ; ++iter) {
+    for (iter = m_configuration->begin(); iter != m_configuration->end(); ++iter)
+    {
         SLM_INFO((*iter)->getName());
         if ((*iter)->getName() == "spline")
         {
@@ -84,13 +84,14 @@ void SplineReaderService::configuring( ) throw(::fwTools::Failed)
             if((*iter)->hasAttribute("matrix"))
             {
                 objectMatrix = loadObjectTransformationMatrix3D((*iter)->getExistingAttributeValue("matrix"));
-                isTransfo = true;
+                isTransfo    = true;
                 OSLM_INFO("spline matrix: " << (*iter)->getExistingAttributeValue("matrix"));
             }
 
             ::fwRuntime::ConfigurationElementContainer::Iterator iter2;
-            ::fwRuntime::ConfigurationElement::sptr m_configuration2 = m_configuration->findConfigurationElement("spline");
-            for (iter2 = m_configuration2->begin() ; iter2 != m_configuration2->end() ; ++iter2)
+            ::fwRuntime::ConfigurationElement::sptr m_configuration2 = m_configuration->findConfigurationElement(
+                "spline");
+            for (iter2 = m_configuration2->begin(); iter2 != m_configuration2->end(); ++iter2)
             {
                 if ((*iter2)->getName() == "point"
                     && (*iter2)->hasAttribute("id"))
@@ -98,11 +99,11 @@ void SplineReaderService::configuring( ) throw(::fwTools::Failed)
                     ::fwData::Spline::point pt;
                     pt.id = boost::lexical_cast<int >((*iter2)->getExistingAttributeValue("id").c_str());
                     SLM_INFO((*iter2)->getExistingAttributeValue("id"));
-                    pt.p[0] = pt.id * 100.0;
-                    pt.p[1] = 0.0;
-                    pt.p[2] = 0.0;
+                    pt.p[0]      = pt.id * 100.0;
+                    pt.p[1]      = 0.0;
+                    pt.p[2]      = 0.0;
                     pt.isVisible = false;
-                    m_points.push_back( pt ) ;
+                    m_points.push_back( pt );
                 }
             }
         }
@@ -117,21 +118,23 @@ void SplineReaderService::updating() throw(::fwTools::Failed)
     // Retrieve object
     ::fwData::Spline::sptr spline = this->getObject< ::fwData::Spline >( );
 
-    spline->points() = m_points ;
+    spline->points() = m_points;
     spline->setRadius(m_radius);
     spline->setNbSides(m_nbSides);
     spline->setIdSpline(m_idSpline);
 
     // Notify reading
-    ::fwComEd::SplineMsg::sptr msg = ::fwComEd::SplineMsg::New();
-    msg->addEvent( ::fwComEd::SplineMsg::NEW_SPLINE ) ;
 
     if(isTransfo)
     {
-        spline->setField( ::fwComEd::Dictionary::position, objectMatrix ) ;
-        msg->addEvent( ::fwComEd::Dictionary::position ) ;
+        spline->setField( ::fwDataTools::fieldHelper::Image::position, objectMatrix );
+    }
+
+    auto sig = spline->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
     }
-    ::fwServices::IEditionService::notify(this->getSptr(), spline, msg);
 }
 
 //-----------------------------------------------------------------------------
@@ -139,7 +142,7 @@ void SplineReaderService::updating() throw(::fwTools::Failed)
 ::fwData::TransformationMatrix3D::sptr SplineReaderService::loadObjectTransformationMatrix3D(std::string m_file)
 {
     ::fwData::TransformationMatrix3D::sptr matrix = ::fwData::TransformationMatrix3D::New();
-    ::boost::filesystem::path location(m_file) ;
+    ::boost::filesystem::path location(m_file);
 
     std::fstream file;
     file.open(location.string().c_str(), std::fstream::in);
@@ -149,9 +152,9 @@ void SplineReaderService::updating() throw(::fwTools::Failed)
         return matrix;
     }
     double val;
-    for( int l=0 ; l < 4 ; l++ )
+    for( int l = 0; l < 4; l++ )
     {
-        for( int c=0 ; c < 4 ; c++ )
+        for( int c = 0; c < 4; c++ )
         {
             file >> val;
             matrix->setCoefficient(l, c, val);
diff --git a/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DReaderService.cpp b/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DReaderService.cpp
index cff8680..fc24e8b 100644
--- a/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DReaderService.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DReaderService.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,11 +11,7 @@
 #include <fwDataIO/reader/TransformationMatrix3DReader.hpp>
 #include <io/IReader.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
 
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/location/Folder.hpp>
@@ -23,8 +19,6 @@
 
 #include <fwGui/dialog/LocationDialog.hpp>
 
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
-
 #include <fwCore/base.hpp>
 
 
@@ -35,7 +29,8 @@ namespace ioData
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::io::IReader , ::ioData::TransformationMatrix3DReaderService , ::fwData::TransformationMatrix3D ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioData::TransformationMatrix3DReaderService,
+                         ::fwData::TransformationMatrix3D );
 
 //------------------------------------------------------------------------------
 
@@ -48,17 +43,17 @@ fwServicesRegisterMacro( ::io::IReader , ::ioData::TransformationMatrix3DReaderS
 
 void TransformationMatrix3DReaderService::info(std::ostream &_sstream )
 {
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << " TransformationMatrix3D object reader" ;
+    this->SuperClass::info( _sstream );
+    _sstream << std::endl << " TransformationMatrix3D object reader";
 }
 
 //-----------------------------------------------------------------------------
 
 std::vector< std::string > TransformationMatrix3DReaderService::getSupportedExtensions()
 {
-    std::vector< std::string > extensions ;
+    std::vector< std::string > extensions;
     extensions.push_back(".trf");
-    return extensions ;
+    return extensions;
 }
 
 //-----------------------------------------------------------------------------
@@ -81,7 +76,7 @@ void TransformationMatrix3DReaderService::configureWithIHM()
     dialogFile.addFilter("TRF files","*.trf");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
 
-    ::fwData::location::SingleFile::sptr  result;
+    ::fwData::location::SingleFile::sptr result;
     result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
@@ -113,15 +108,19 @@ void TransformationMatrix3DReaderService::updating() throw(::fwTools::Failed)
         ::fwData::TransformationMatrix3D::sptr matrix = this->getObject< ::fwData::TransformationMatrix3D >( );
         SLM_ASSERT("matrix not instanced", matrix);
 
-        ::fwDataIO::reader::TransformationMatrix3DReader::sptr reader = ::fwDataIO::reader::TransformationMatrix3DReader::New();
+        ::fwDataIO::reader::TransformationMatrix3DReader::sptr reader =
+            ::fwDataIO::reader::TransformationMatrix3DReader::New();
         reader->setObject( matrix );
         reader->setFile(this->getFile());
         reader->read();
 
         // Notify reading
-        ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-        msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED );
-        ::fwServices::IEditionService::notify(this->getSptr(), this->getObject(), msg);
+        auto sig = this->getObject()->signal< ::fwData::Object::ModifiedSignalType >(
+            ::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
     }
 }
 
diff --git a/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DWriterService.cpp b/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DWriterService.cpp
index f45f5ad..be4a415 100644
--- a/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DWriterService.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/TransformationMatrix3DWriterService.cpp
@@ -1,13 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fstream>
-#include <iostream>
-
-#include <boost/filesystem/operations.hpp>
+#include "ioData/TransformationMatrix3DWriterService.hpp"
 
 #include <fwCore/base.hpp>
 
@@ -17,39 +14,42 @@
 
 #include <fwGui/dialog/LocationDialog.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwDataIO/writer/TransformationMatrix3DWriter.hpp>
 
-#include "ioData/TransformationMatrix3DWriterService.hpp"
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fstream>
+#include <iostream>
+
+#include <boost/filesystem/operations.hpp>
 
 namespace ioData
 {
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioData::TransformationMatrix3DWriterService , ::fwData::TransformationMatrix3D ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioData::TransformationMatrix3DWriterService,
+                         ::fwData::TransformationMatrix3D );
 
 
 //-----------------------------------------------------------------------------
 
 void TransformationMatrix3DWriterService::info(std::ostream &_sstream )
 {
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << " TransformationMatrix3D object writer" ;
+    this->SuperClass::info( _sstream );
+    _sstream << std::endl << " TransformationMatrix3D object writer";
 }
 
 //-----------------------------------------------------------------------------
 
 std::vector< std::string > TransformationMatrix3DWriterService::getSupportedExtensions()
 {
-    std::vector< std::string > extensions ;
+    std::vector< std::string > extensions;
     extensions.push_back(".trf");
-    return extensions ;
+    return extensions;
 }
 
 //-----------------------------------------------------------------------------
@@ -80,8 +80,8 @@ void TransformationMatrix3DWriterService::configureWithIHM()
     dialogFile.addFilter("TRF files","*.trf");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
@@ -113,15 +113,19 @@ void TransformationMatrix3DWriterService::updating() throw(::fwTools::Failed)
         ::fwData::TransformationMatrix3D::sptr matrix = this->getObject< ::fwData::TransformationMatrix3D >( );
         SLM_ASSERT("matrix not instanced", matrix);
 
-        ::fwDataIO::writer::TransformationMatrix3DWriter::sptr writer = ::fwDataIO::writer::TransformationMatrix3DWriter::New();
+        ::fwDataIO::writer::TransformationMatrix3DWriter::sptr writer =
+            ::fwDataIO::writer::TransformationMatrix3DWriter::New();
         writer->setObject( matrix );
         writer->setFile(this->getFile());
         writer->write();
 
         // Notify writing
-        ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-        msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED );
-        ::fwServices::IEditionService::notify(this->getSptr(), this->getObject(), msg);
+        auto sig = this->getObject()->signal< ::fwData::Object::ModifiedSignalType >(
+            ::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
     }
 }
 
diff --git a/Bundles/LeafIO/ioData/src/ioData/TriangularMeshReaderService.cpp b/Bundles/LeafIO/ioData/src/ioData/TriangularMeshReaderService.cpp
deleted file mode 100644
index 756884b..0000000
--- a/Bundles/LeafIO/ioData/src/ioData/TriangularMeshReaderService.cpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/filesystem/operations.hpp>
-
-#include <io/IReader.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/LocationDialog.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwServices/macros.hpp>
-
-#include <fwDataIO/reader/TriangularMeshReader.hpp>
-
-#include <fwComEd/TriangularMeshMsg.hpp>
-
-#include "ioData/TriangularMeshReaderService.hpp"
-
-fwServicesRegisterMacro( ::io::IReader , ::ioData::TriangularMeshReaderService , ::fwData::TriangularMesh ) ;
-
-namespace ioData
-{
-
-//-----------------------------------------------------------------------------
-
-void TriangularMeshReaderService::info(std::ostream &_sstream )
-{
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << " Triangular Mesh reader" ;
-}
-
-//-----------------------------------------------------------------------------
-
-std::vector< std::string > TriangularMeshReaderService::getSupportedExtensions()
-{
-    std::vector< std::string > extensions ;
-    extensions.push_back(".trian");
-    return extensions ;
-}
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType TriangularMeshReaderService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath;
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose an triangular mesh file");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("TrianMesh","*.trian");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    if(this->hasLocationDefined())
-    {
-        // Retrieve object
-        ::fwData::TriangularMesh::sptr mesh = this->getObject< ::fwData::TriangularMesh >( );
-        SLM_ASSERT("mesh not instanced", mesh);
-
-        ::fwDataIO::reader::TriangularMeshReader::sptr reader = ::fwDataIO::reader::TriangularMeshReader::New();
-        reader->setObject( mesh );
-        reader->setFile(this->getFile());
-        reader->read();
-
-        // Notify reading
-        ::fwComEd::TriangularMeshMsg::sptr msg = ::fwComEd::TriangularMeshMsg::New();
-        msg->addEvent( ::fwComEd::TriangularMeshMsg::NEW_MESH );
-        ::fwServices::IEditionService::notify(this->getSptr(), mesh, msg);
-    }
-}
-
-}
diff --git a/Bundles/LeafIO/ioData/src/ioData/TriangularMeshWriterService.cpp b/Bundles/LeafIO/ioData/src/ioData/TriangularMeshWriterService.cpp
deleted file mode 100644
index c6025da..0000000
--- a/Bundles/LeafIO/ioData/src/ioData/TriangularMeshWriterService.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/filesystem/operations.hpp>
-
-#include <io/IReader.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/LocationDialog.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwServices/macros.hpp>
-
-#include <fwDataIO/writer/TriangularMeshWriter.hpp>
-
-#include "ioData/TriangularMeshWriterService.hpp"
-
-fwServicesRegisterMacro( ::io::IWriter , ::ioData::TriangularMeshWriterService , ::fwData::TriangularMesh ) ;
-
-namespace ioData
-{
-
-//-----------------------------------------------------------------------------
-
-void TriangularMeshWriterService::info(std::ostream &_sstream )
-{
-    this->SuperClass::info( _sstream ) ;
-    _sstream << std::endl << " Triangular Mesh writer" ;
-}
-
-//-----------------------------------------------------------------------------
-
-std::vector< std::string > TriangularMeshWriterService::getSupportedExtensions()
-{
-    std::vector< std::string > extensions ;
-    extensions.push_back(".trian");
-    return extensions ;
-}
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType TriangularMeshWriterService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose a TrianMesh file");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("TrianMesh","*.trian");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve object
-        ::fwData::TriangularMesh::sptr mesh = this->getObject< ::fwData::TriangularMesh >( );
-        SLM_ASSERT("mesh not instanced", mesh);
-
-        ::fwDataIO::writer::TriangularMeshWriter::sptr writer = ::fwDataIO::writer::TriangularMeshWriter::New();
-        writer->setObject( mesh );
-        writer->setFile(this->getFile());
-        writer->write();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-}
diff --git a/Bundles/LeafIO/ioData/src/ioData/action/SMeshModifier.cpp b/Bundles/LeafIO/ioData/src/ioData/action/SMeshModifier.cpp
index b45e4ac..e313e20 100644
--- a/Bundles/LeafIO/ioData/src/ioData/action/SMeshModifier.cpp
+++ b/Bundles/LeafIO/ioData/src/ioData/action/SMeshModifier.cpp
@@ -1,16 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwCore/base.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/MeshMsg.hpp>
 
 #include <fwData/Mesh.hpp>
 
@@ -25,7 +21,7 @@ namespace ioData
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::ioData::action::SMeshModifier , ::fwData::Mesh ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::ioData::action::SMeshModifier, ::fwData::Mesh );
 
 //-----------------------------------------------------------------------------
 
@@ -47,21 +43,22 @@ void SMeshModifier::configuring() throw( ::fwTools::Failed )
 
     std::vector < ConfigurationType > vectConfig = m_configuration->find("config");
 
-    SLM_ASSERT("Sorry you must have one (and only one) <config functor=... /> element.", vectConfig.size() == 1 );
+    SLM_ASSERT("There must be one (and only one) <config functor=... /> element.", vectConfig.size() == 1 );
     ::fwRuntime::ConfigurationElement::sptr configElement = vectConfig.at(0);
 
-    SLM_ASSERT( "Sorry, missing attribute functor in <config> xml element.", configElement->hasAttribute("functor") );
+    SLM_ASSERT( "There must be a functor attribute in the <config> xml element.",
+                configElement->hasAttribute("functor") );
     m_functor = configElement->getExistingAttributeValue("functor");
     OSLM_ASSERT("Wrong functor name "<<m_functor << " (required GenTriangle, GenQuad or GenTriangleQuad)",
-                       m_functor == "ShakeMeshPoint"
-                    || m_functor == "ColorizeMeshPoints"
-                    || m_functor == "ColorizeMeshCells"
-                    || m_functor == "ComputePointNormals"
-                    || m_functor == "ComputeCellNormals"
-                    || m_functor == "ShakePointNormals"
-                    || m_functor == "ShakeCellNormals"
-                    || m_functor == "MeshDeformation"
-                    );
+                m_functor == "ShakeMeshPoint"
+                || m_functor == "ColorizeMeshPoints"
+                || m_functor == "ColorizeMeshCells"
+                || m_functor == "ComputePointNormals"
+                || m_functor == "ComputeCellNormals"
+                || m_functor == "ShakePointNormals"
+                || m_functor == "ShakeCellNormals"
+                || m_functor == "MeshDeformation"
+                );
 
 }
 
@@ -84,61 +81,85 @@ void SMeshModifier::stopping() throw( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SMeshModifier::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
 void SMeshModifier::updating() throw( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
     ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
     SLM_ASSERT("Mesh dynamicCast failed", mesh);
-    ::fwComEd::MeshMsg::sptr msg = ::fwComEd::MeshMsg::New();
     try
     {
         if(m_functor == "ShakeMeshPoint")
         {
             ::fwDataTools::Mesh::shakePoint(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::VERTEX_MODIFIED );
+
+            ::fwData::Mesh::VertexModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::VertexModifiedSignalType >(::fwData::Mesh::s_VERTEX_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "ColorizeMeshCells")
         {
             ::fwDataTools::Mesh::colorizeMeshCells(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::CELL_COLORS_MODIFIED );
+
+            ::fwData::Mesh::CellColorsModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::CellColorsModifiedSignalType >(
+                ::fwData::Mesh::s_CELL_COLORS_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "ColorizeMeshPoints")
         {
             ::fwDataTools::Mesh::colorizeMeshPoints(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::POINT_COLORS_MODIFIED );
+
+            ::fwData::Mesh::PointColorsModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::PointColorsModifiedSignalType >(
+                ::fwData::Mesh::s_POINT_COLORS_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "ComputeCellNormals")
         {
             ::fwDataTools::Mesh::generateCellNormals(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::CELL_NORMALS_MODIFIED );
+
+            ::fwData::Mesh::CellNormalsModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::CellNormalsModifiedSignalType >(
+                ::fwData::Mesh::s_CELL_NORMALS_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "ComputePointNormals")
         {
             ::fwDataTools::Mesh::generatePointNormals(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::POINT_NORMALS_MODIFIED );
+
+            ::fwData::Mesh::PointNormalsModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::PointNormalsModifiedSignalType >(
+                ::fwData::Mesh::s_POINT_NORMALS_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "ShakeCellNormals")
         {
             ::fwDataTools::Mesh::shakeCellNormals(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::CELL_NORMALS_MODIFIED );
+
+
+            ::fwData::Mesh::CellNormalsModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::CellNormalsModifiedSignalType >(
+                ::fwData::Mesh::s_CELL_NORMALS_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "ShakePointNormals")
         {
             ::fwDataTools::Mesh::shakePointNormals(mesh);
-            msg->addEvent( ::fwComEd::MeshMsg::POINT_NORMALS_MODIFIED );
+
+            ::fwData::Mesh::PointNormalsModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Mesh::PointNormalsModifiedSignalType >(
+                ::fwData::Mesh::s_POINT_NORMALS_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         else if(m_functor == "MeshDeformation")
         {
             m_animator.computeDeformation( mesh, 100, 50 );
-            msg->addEvent( ::fwComEd::MeshMsg::VERTEX_MODIFIED );
-            msg->addEvent( ::fwComEd::MeshMsg::POINT_COLORS_MODIFIED );
+            ::fwData::Object::ModifiedSignalType::sptr sig;
+            sig = mesh->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            {
+                ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+                sig->asyncEmit();
+            }
         }
     }
     catch (const std::exception & e)
@@ -147,12 +168,10 @@ void SMeshModifier::updating() throw( ::fwTools::Failed )
         ss << "Warning during generating : " << e.what();
 
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning",
+            ss.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
     }
-
-    ::fwServices::IEditionService::notify(this->getSptr(), mesh, msg);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafIO/ioDcmtk/CMakeLists.txt b/Bundles/LeafIO/ioDcmtk/CMakeLists.txt
new file mode 100644
index 0000000..79b31ae
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/CMakeLists.txt
@@ -0,0 +1,4 @@
+fwLoadProperties()
+
+find_package(Boost COMPONENTS filesystem REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
diff --git a/Bundles/LeafIO/ioDcmtk/Properties.cmake b/Bundles/LeafIO/ioDcmtk/Properties.cmake
new file mode 100644
index 0000000..57bdf11
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/Properties.cmake
@@ -0,0 +1,20 @@
+
+set( NAME ioDcmtk )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+    fwCom
+    fwDcmtkIO
+    fwGui
+    fwCore
+    fwData
+    fwRuntime
+    fwTools
+    fwMedData
+    fwServices
+    io
+    )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    )
diff --git a/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/Plugin.hpp b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/Plugin.hpp
new file mode 100644
index 0000000..c216fbd
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/Plugin.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODCMTK_PLUGIN_HPP__
+#define __IODCMTK_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+namespace ioDcmtk
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    ~Plugin() throw();
+
+    // Overrides
+    void start() throw(::fwRuntime::RuntimeException);
+
+    // Overrides
+    void stop() throw();
+
+};
+
+} // namespace ioDcmtk
+
+#endif //__IODCMTK_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SDicomSeriesDBReader.hpp b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SDicomSeriesDBReader.hpp
new file mode 100644
index 0000000..83eadb2
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SDicomSeriesDBReader.hpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODCMTK_SDICOMSERIESDBREADER_HPP__
+#define __IODCMTK_SDICOMSERIESDBREADER_HPP__
+
+#include "ioDcmtk/config.hpp"
+
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwMedData
+{
+class SeriesDB;
+class Patient;
+}
+
+namespace ioDcmtk
+{
+
+/**
+ * @brief Read DICOM Series from a DICOM with DCMTK
+ */
+class IODCMTK_CLASS_API SDicomSeriesDBReader : public ::io::IReader
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SDicomSeriesDBReader)( ::io::IReader) );
+    /**
+     * @brief   constructor
+     *
+     */
+    IODCMTK_API SDicomSeriesDBReader() throw();
+
+    /**
+     * @brief   destructor
+     */
+    IODCMTK_API virtual ~SDicomSeriesDBReader() throw();
+
+protected:
+
+    /// Override
+    IODCMTK_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API void info(std::ostream& _sstream );
+
+    /// Override
+    IODCMTK_API virtual std::string getSelectorDialogTitle();
+
+    /// Override
+    IODCMTK_API virtual void configureWithIHM();
+
+    /// Return path type managed by the service, here FOLDER
+    IODCMTK_API ::io::IOPathType getIOPathType() const;
+
+private:
+
+    void notificationOfDBUpdate();
+
+    SPTR(::fwMedData::SeriesDB) createSeriesDB(const ::boost::filesystem::path& dicomDir);
+
+};
+
+} // namespace ioDcmtk
+
+#endif //__IODCMTK_SDICOMSERIESDBREADER_HPP__
diff --git a/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SDicomTagSeriesDBReader.hpp b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SDicomTagSeriesDBReader.hpp
new file mode 100644
index 0000000..960a476
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SDicomTagSeriesDBReader.hpp
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODCMTK_SDICOMTAGSERIESDBREADER_HPP__
+#define __IODCMTK_SDICOMTAGSERIESDBREADER_HPP__
+
+#include "ioDcmtk/config.hpp"
+
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwMedData
+{
+class SeriesDB;
+class Patient;
+}
+
+namespace ioDcmtk
+{
+/**
+ * @brief   SDicomTagSeriesDBReader reads a folder that has DICOM images.
+ *
+ * @section XML Configuration
+ * @code{.xml}
+    <service uid="..." type="::ioDcmtk::SDicomTagSeriesDBReader" >
+        <inout key="data" uid="..."/>
+    </service>
+ * @endcode
+ *
+ * @subsection In-Out In-Out
+ * - \b data [::fwMedData::SeriesDB]: SeriesDB
+ */
+class IODCMTK_CLASS_API SDicomTagSeriesDBReader : public ::io::IReader
+{
+
+public:
+    typedef std::string ExtensionType;
+    typedef std::vector< ExtensionType > ExtensionsType;
+
+    fwCoreServiceClassDefinitionsMacro ( (SDicomTagSeriesDBReader)( ::io::IReader) );
+    /**
+     * @brief   constructor
+     *
+     */
+    IODCMTK_API SDicomTagSeriesDBReader() throw();
+
+    /**
+     * @brief   destructor
+     */
+    IODCMTK_API virtual ~SDicomTagSeriesDBReader() throw();
+
+protected:
+
+    /// Override
+    IODCMTK_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API void info(std::ostream& _sstream );
+
+    /// Override
+    IODCMTK_API virtual std::string getSelectorDialogTitle();
+
+    /// Override
+    IODCMTK_API virtual void configureWithIHM();
+
+    /// Return path type managed by the service, here FOLDER
+    IODCMTK_API ::io::IOPathType getIOPathType() const;
+
+private:
+
+    void notificationOfDBUpdate();
+
+    SPTR(::fwMedData::SeriesDB) createSeriesDB(const ::boost::filesystem::path& dicomDir);
+
+};
+
+} // namespace ioDcmtk
+
+#endif //__IODCMTK_SDICOMTAGSERIESDBREADER_HPP__
diff --git a/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SSeriesDBReader.hpp b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SSeriesDBReader.hpp
new file mode 100644
index 0000000..750dc2a
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/SSeriesDBReader.hpp
@@ -0,0 +1,128 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODCMTK_SSERIESDBREADER_HPP__
+#define __IODCMTK_SSERIESDBREADER_HPP__
+
+#include "ioDcmtk/config.hpp"
+
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwMedData
+{
+class SeriesDB;
+class Patient;
+}
+
+namespace ioDcmtk
+{
+
+/**
+ * @brief  Read ImageSeries from DICOM with dcmtk
+ *
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+    <service uid="..." type="::ioDcmtk::SSeriesDBReader" autoConnect="no" worker="readerDicom">
+        <inout key="data" uid="..."/>
+    </service>
+   @endcode
+ *
+ * @subsection In-Out In-Out
+ * - \b data [::fwMedData::SeriesDB]: dicom seriesDB to read.
+ */
+class IODCMTK_CLASS_API SSeriesDBReader : public ::io::IReader
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBReader)( ::io::IReader) );
+    /**
+     * @brief   constructor
+     *
+     */
+    IODCMTK_API SSeriesDBReader() throw();
+
+    /**
+     * @brief   destructor
+     */
+    IODCMTK_API virtual ~SSeriesDBReader() throw();
+
+protected:
+
+    typedef std::vector< std::string > SupportedSOPClassContainerType;
+
+    /**
+     * The reader can be configured as a regular reader.
+     * You can select the SOP Classes that can be read using this reader.
+     * It is also possible to define a filter that must be applied prior the reading process.
+     * @code{.xml}
+       <config filterType="::fwDicomIOFilter::custom::NoFilter" />
+       <SOPClassSelection>
+           <SOPClass name="CT Image Storage" uid="1.2.840.10008.5.1.4.1.1.2" />
+       </SOPClassSelection>
+       @endcode
+     * On the other hand, you can specify a service configuration using the FilterSelectorSrvConfig element:
+     * @code{.xml}
+        <extension implements="::fwServices::registry::ServiceConfig">
+            <id>FilterSelectorConfig</id>
+            <service>::ioDicom::SFilterSelectorDialog</service>
+            <desc>"Open" action's filter selector config</desc>
+            <config>
+                <selection mode="include" />
+                <addSelection filter="::fwDicomIOFilter::custom::DefaultDicomFilter" />
+                <addSelection filter="::fwDicomIOFilter::custom::NoFilter" />
+            </config>
+        </extension>
+       @endcode
+     */
+    IODCMTK_API virtual void configuring() throw (fwTools::Failed);
+
+    /// Override
+    IODCMTK_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IODCMTK_API void info(std::ostream& _sstream );
+
+    /// Override
+    IODCMTK_API virtual std::string getSelectorDialogTitle();
+
+    /// Override
+    IODCMTK_API virtual void configureWithIHM();
+
+    /// Return path type managed by the service, here FOLDER
+    IODCMTK_API ::io::IOPathType getIOPathType() const;
+
+private:
+
+    void notificationOfDBUpdate();
+
+    SPTR(::fwMedData::SeriesDB) createSeriesDB(const ::boost::filesystem::path& dicomDir);
+
+    /// Selector config used to select a filter to apply
+    std::string m_filterSelectorSrvConfig;
+
+    /// Selected filter key
+    std::string m_filterType;
+
+    /// Supported SOP Class selection
+    SupportedSOPClassContainerType m_supportedSOPClassSelection;
+
+};
+
+} // namespace ioDcmtk
+
+#endif //__IODCMTK_SSERIESDBREADER_HPP__
diff --git a/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/namespace.hpp b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/namespace.hpp
new file mode 100644
index 0000000..baf2e9b
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/include/ioDcmtk/namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODCMTK_NAMESPACE_HPP__
+#define __IODCMTK_NAMESPACE_HPP__
+
+/**
+ * @brief ioDcmtk contains services use to deal with DICOM using the GDCM library.
+ */
+namespace ioDcmtk
+{
+}
+#endif /* __IODCMTK_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafIO/ioDcmtk/rc/plugin.xml b/Bundles/LeafIO/ioDcmtk/rc/plugin.xml
new file mode 100644
index 0000000..83f7e8d
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/rc/plugin.xml
@@ -0,0 +1,28 @@
+<plugin id="ioDcmtk" class="ioDcmtk::Plugin"  version="@DASH_VERSION@" >
+    <library name="ioDcmtk" />
+
+    <requirement id="dataReg"/>
+    <requirement id="io" />
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IReader</type>
+        <service>::ioDcmtk::SSeriesDBReader</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Series DB Reader (DCMTK)</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IReader</type>
+        <service>::ioDcmtk::SDicomSeriesDBReader</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Dicom Series DB Reader (DCMTK)</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IReader</type>
+        <service>::ioDcmtk::SDicomTagSeriesDBReader</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Dicom Tag Series DB Reader (DCMTK)</desc>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/Plugin.cpp b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/Plugin.cpp
new file mode 100644
index 0000000..a30f99c
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/Plugin.cpp
@@ -0,0 +1,30 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDcmtk/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/macros.hpp>
+
+namespace ioDcmtk
+{
+
+using namespace ::fwRuntime::utils;
+static GenericExecutableFactoryRegistrar<Plugin> registrar("ioDcmtk::Plugin");
+
+Plugin::~Plugin() throw()
+{
+}
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+void Plugin::stop() throw()
+{
+}
+
+} // namespace ioDcmtk
diff --git a/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SDicomSeriesDBReader.cpp b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SDicomSeriesDBReader.cpp
new file mode 100644
index 0000000..598fec6
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SDicomSeriesDBReader.cpp
@@ -0,0 +1,196 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDcmtk/SDicomSeriesDBReader.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCore/base.hpp>
+#include <fwDcmtkIO/SeriesDBReader.hpp>
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwServices/macros.hpp>
+#include <fwTools/ProgressToLogger.hpp>
+#include <io/IReader.hpp>
+
+#include <boost/bind.hpp>
+
+namespace ioDcmtk
+{
+
+fwServicesRegisterMacro( ::io::IReader, ::ioDcmtk::SDicomSeriesDBReader, ::fwMedData::SeriesDB );
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesDBReader::SDicomSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesDBReader::~SDicomSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle(this->getSelectorDialogTitle());
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( result->getFolder() );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::info(std::ostream& _sstream )
+{
+    _sstream << "SDicomSeriesDBReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+std::string SDicomSeriesDBReader::getSelectorDialogTitle()
+{
+    return "Choose a directory with DICOM images";
+}
+
+
+//------------------------------------------------------------------------------
+
+::fwMedData::SeriesDB::sptr SDicomSeriesDBReader::createSeriesDB(const ::boost::filesystem::path& dicomDir)
+{
+    SLM_TRACE_FUNC();
+    ::fwDcmtkIO::SeriesDBReader::sptr myLoader = ::fwDcmtkIO::SeriesDBReader::New();
+    ::fwMedData::SeriesDB::sptr dummy          = ::fwMedData::SeriesDB::New();
+    myLoader->setObject(dummy);
+    myLoader->setFolder(dicomDir);
+
+    if(myLoader->isDicomDirAvailable())
+    {
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Dicomdir file");
+        messageBox.setMessage( "There is a dicomdir file in the root folder. "
+                               "Would you like to use it for the reading process ?" );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::YES_NO);
+        ::fwGui::dialog::IMessageDialog::Buttons button = messageBox.show();
+
+        myLoader->setDicomdirActivated(button == ::fwGui::dialog::IMessageDialog::YES);
+    }
+
+    try
+    {
+        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Dicom Image");
+        myLoader->addHandler( progressMeterGUI );
+        myLoader->readDicomSeries();
+    }
+    catch (const std::exception& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+
+    return myLoader->getConcreteObject();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    if( this->hasLocationDefined() )
+    {
+        ::fwMedData::SeriesDB::sptr seriesDB = createSeriesDB( this->getFolder() );
+
+        if( seriesDB->size() > 0 )
+        {
+            // Retrieve dataStruct associated with this service
+            ::fwMedData::SeriesDB::sptr associatedSeriesDB = this->getObject< ::fwMedData::SeriesDB >();
+            SLM_ASSERT("associated SeriesDB not instanced", associatedSeriesDB);
+            associatedSeriesDB->shallowCopy( seriesDB );
+
+            ::fwGui::Cursor cursor;
+            cursor.setCursor(::fwGui::ICursor::BUSY);
+            this->notificationOfDBUpdate();
+            cursor.setDefaultCursor();
+        }
+        else
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Image Reader","This file can not be read. Retry with another file reader.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::notificationOfDBUpdate()
+{
+    SLM_TRACE_FUNC();
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    SLM_ASSERT("Unable to get seriesDB", seriesDB);
+
+    ::fwMedData::SeriesDB::ContainerType addedSeries;
+    for( ::fwMedData::Series::sptr s: seriesDB->getContainer() )
+    {
+        addedSeries.push_back(s);
+    }
+
+    auto sig = seriesDB->signal< ::fwMedData::SeriesDB::AddedSeriesSignalType >(
+        ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG);
+    sig->asyncEmit(addedSeries);
+}
+
+//-----------------------------------------------------------------------------
+
+::io::IOPathType SDicomSeriesDBReader::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDcmtk
diff --git a/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SDicomTagSeriesDBReader.cpp b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SDicomTagSeriesDBReader.cpp
new file mode 100644
index 0000000..2ce9dbf
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SDicomTagSeriesDBReader.cpp
@@ -0,0 +1,213 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDcmtk/SDicomTagSeriesDBReader.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwDcmtkIO/DicomSeriesDBReader.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/ProgressToLogger.hpp>
+
+#include <io/IReader.hpp>
+
+
+namespace ioDcmtk
+{
+
+fwServicesRegisterMacro( ::io::IReader, ::ioDcmtk::SDicomTagSeriesDBReader, ::fwMedData::SeriesDB );
+
+//------------------------------------------------------------------------------
+
+SDicomTagSeriesDBReader::SDicomTagSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+SDicomTagSeriesDBReader::~SDicomTagSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomTagSeriesDBReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle(this->getSelectorDialogTitle());
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setType(::fwGui::dialog::ILocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( result->getFolder() );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomTagSeriesDBReader::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomTagSeriesDBReader::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomTagSeriesDBReader::info(std::ostream& _sstream )
+{
+    _sstream << "SDicomTagSeriesDBReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+std::string SDicomTagSeriesDBReader::getSelectorDialogTitle()
+{
+    return "Choose a directory with DICOM images";
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::SeriesDB::sptr SDicomTagSeriesDBReader::createSeriesDB(const ::boost::filesystem::path& dicomDir)
+{
+    SLM_TRACE_FUNC();
+    ::fwDcmtkIO::DicomSeriesDBReader::sptr myLoader = ::fwDcmtkIO::DicomSeriesDBReader::New();
+
+    ::fwMedData::SeriesDB::sptr dummy = ::fwMedData::SeriesDB::New();
+    myLoader->setObject(dummy);
+    myLoader->setFolder(dicomDir);
+
+    if(myLoader->isDicomDirAvailable())
+    {
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Dicomdir file");
+        messageBox.setMessage( "There is a dicomdir file in the root folder. "
+                               "Would you like to use it for the reading process ?" );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::YES_NO);
+        ::fwGui::dialog::IMessageDialog::Buttons button = messageBox.show();
+
+        myLoader->setDicomdirActivated(button == ::fwGui::dialog::IMessageDialog::YES);
+    }
+
+    try
+    {
+        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Dicom");
+        myLoader->addHandler( progressMeterGUI );
+        myLoader->read();
+    }
+    catch (const std::runtime_error& e)
+    {
+        throw e;
+    }
+
+    return myLoader->getConcreteObject();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomTagSeriesDBReader::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    if( this->hasLocationDefined() )
+    {
+        try
+        {
+            ::fwMedData::SeriesDB::sptr seriesDB = createSeriesDB( this->getFolder() );
+            if( seriesDB->size() > 0 )
+            {
+                // Retrieve dataStruct associated with this service
+                ::fwMedData::SeriesDB::sptr associatedSeriesDB;
+                if(this->isVersion2())
+                {
+                    associatedSeriesDB = this->getInOut< ::fwMedData::SeriesDB >(::io::s_DATA_KEY);
+                }
+                else
+                {
+                    associatedSeriesDB = this->getObject< ::fwMedData::SeriesDB >();
+                }
+                associatedSeriesDB->shallowCopy( seriesDB );
+
+                ::fwGui::Cursor cursor;
+                cursor.setCursor(::fwGui::ICursor::BUSY);
+                this->notificationOfDBUpdate();
+                cursor.setDefaultCursor();
+            }
+            else
+            {
+                throw std::runtime_error("An uncaught exception occurred while reading file.");
+            }
+        }
+        catch (const std::exception& e)
+        {
+            std::stringstream ss;
+            ss << "Warning during loading : " << e.what();
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomTagSeriesDBReader::notificationOfDBUpdate()
+{
+    SLM_TRACE_FUNC();
+    ::fwMedData::SeriesDB::csptr seriesDB;
+    if(this->isVersion2())
+    {
+        seriesDB = this->getInOut< ::fwMedData::SeriesDB >(::io::s_DATA_KEY);
+    }
+    else
+    {
+        seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    }
+
+    SLM_ASSERT("Unable to get seriesDB", seriesDB);
+
+    ::fwMedData::SeriesDB::ContainerType addedSeries;
+    for( ::fwMedData::Series::sptr s :  seriesDB->getContainer() )
+    {
+        addedSeries.push_back(s);
+    }
+
+    auto sig = seriesDB->signal< ::fwMedData::SeriesDB::AddedSeriesSignalType >(
+        ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG);
+    sig->asyncEmit(addedSeries);
+}
+
+//-----------------------------------------------------------------------------
+
+::io::IOPathType SDicomTagSeriesDBReader::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDcmtk
diff --git a/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SSeriesDBReader.cpp b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SSeriesDBReader.cpp
new file mode 100644
index 0000000..be9d25a
--- /dev/null
+++ b/Bundles/LeafIO/ioDcmtk/src/ioDcmtk/SSeriesDBReader.cpp
@@ -0,0 +1,299 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDcmtk/SSeriesDBReader.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/String.hpp>
+
+#include <fwDcmtkIO/SeriesDBReader.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+#include <fwTools/ProgressToLogger.hpp>
+
+#include <io/IReader.hpp>
+
+#include <boost/bind.hpp>
+
+namespace ioDcmtk
+{
+
+fwServicesRegisterMacro( ::io::IReader, ::ioDcmtk::SSeriesDBReader, ::fwMedData::SeriesDB );
+
+//------------------------------------------------------------------------------
+
+SSeriesDBReader::SSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+SSeriesDBReader::~SSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle(this->getSelectorDialogTitle());
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( result->getFolder() );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+
+    // Select filter
+    if(!m_filterSelectorSrvConfig.empty())
+    {
+        // Get the config
+        ::fwRuntime::ConfigurationElement::csptr filterSelectorConfig;
+        filterSelectorConfig = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(
+            m_filterSelectorSrvConfig, "::ioDicom::SFilterSelectorDialog");
+
+        SLM_ASSERT("There is no service configuration "
+                   + m_filterSelectorSrvConfig
+                   + " for ::ioDicom::SFilterSelectorDialog", filterSelectorConfig);
+
+        // Init and execute the service
+        ::fwServices::IService::sptr filterSelectorSrv;
+        ::fwData::String::sptr key = ::fwData::String::New();
+        filterSelectorSrv          = ::fwServices::add(key,
+                                                       "::gui::editor::IDialogEditor",
+                                                       "::ioDicom::SFilterSelectorDialog");
+        filterSelectorSrv->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(filterSelectorConfig) );
+        filterSelectorSrv->configure();
+        filterSelectorSrv->start();
+        filterSelectorSrv->update();
+        filterSelectorSrv->stop();
+        ::fwServices::OSR::unregisterService( filterSelectorSrv );
+
+        m_filterType = key->getValue();
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::configuring() throw (fwTools::Failed)
+{
+    ::io::IReader::configuring();
+
+    // Use filter selector
+    ::fwRuntime::ConfigurationElement::sptr selectorConfig =
+        m_configuration->findConfigurationElement("FilterSelectorSrvConfig");
+    if(selectorConfig)
+    {
+        SLM_ASSERT("Missing 'name' attribute", selectorConfig->hasAttribute("name"));
+        m_filterSelectorSrvConfig = selectorConfig->getAttributeValue("name");
+    }
+
+    // Get SOP Class selection
+    const ::fwRuntime::ConfigurationElement::sptr sopClassSelection =
+        m_configuration->findConfigurationElement("SOPClassSelection");
+    if(sopClassSelection)
+    {
+        ::fwRuntime::ConfigurationElementContainer sopClassElements =
+            sopClassSelection->findAllConfigurationElement("SOPClass");
+
+        for(::fwRuntime::ConfigurationElementContainer::Iterator it = sopClassElements.begin();
+            it != sopClassElements.end(); ++it)
+        {
+            const ::fwRuntime::ConfigurationElement::AttributePair attributePair = (*it)->getSafeAttributeValue("uid");
+            if(attributePair.first)
+            {
+                SLM_TRACE("New SOP class supported : " + attributePair.second);
+                m_supportedSOPClassSelection.push_back(attributePair.second);
+            }
+        }
+    }
+
+    // Set filter
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    if(config)
+    {
+        m_filterType = config->getAttributeValue("filterType");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::info(std::ostream& _sstream )
+{
+    _sstream << "SSeriesDBReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+std::string SSeriesDBReader::getSelectorDialogTitle()
+{
+    return "Choose a directory with DICOM images";
+}
+
+
+//------------------------------------------------------------------------------
+
+::fwMedData::SeriesDB::sptr SSeriesDBReader::createSeriesDB(const ::boost::filesystem::path& dicomDir)
+{
+    SLM_TRACE_FUNC();
+    ::fwDcmtkIO::SeriesDBReader::sptr myLoader = ::fwDcmtkIO::SeriesDBReader::New();
+    ::fwMedData::SeriesDB::sptr dummy          = ::fwMedData::SeriesDB::New();
+    myLoader->setObject(dummy);
+    myLoader->setFolder(dicomDir);
+    myLoader->setDicomFilterType(m_filterType);
+    myLoader->setSupportedSOPClassContainer(m_supportedSOPClassSelection);
+
+    if(myLoader->isDicomDirAvailable())
+    {
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Dicomdir file");
+        messageBox.setMessage( "There is a dicomdir file in the root folder. "
+                               "Would you like to use it for the reading process ?" );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::YES_NO);
+        ::fwGui::dialog::IMessageDialog::Buttons button = messageBox.show();
+
+        myLoader->setDicomdirActivated(button == ::fwGui::dialog::IMessageDialog::YES);
+    }
+
+    try
+    {
+        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Dicom Image");
+        myLoader->addHandler( progressMeterGUI );
+        myLoader->read();
+    }
+    catch (const std::exception& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+
+    return myLoader->getConcreteObject();
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    if( this->hasLocationDefined() )
+    {
+        ::fwMedData::SeriesDB::sptr seriesDB = createSeriesDB( this->getFolder() );
+
+        if( seriesDB->size() > 0 )
+        {
+            // Retrieve dataStruct associated with this service
+            ::fwMedData::SeriesDB::sptr associatedSeriesDB;
+            if (this->isVersion2())
+            {
+                associatedSeriesDB = this->getInOut< ::fwMedData::SeriesDB >(::io::s_DATA_KEY);
+            }
+            else
+            {
+                associatedSeriesDB = this->getObject< ::fwMedData::SeriesDB >();
+            }
+            SLM_ASSERT("associated SeriesDB not instanced", associatedSeriesDB);
+            associatedSeriesDB->shallowCopy( seriesDB );
+
+            ::fwGui::Cursor cursor;
+            cursor.setCursor(::fwGui::ICursor::BUSY);
+            this->notificationOfDBUpdate();
+            cursor.setDefaultCursor();
+        }
+        else
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Image Reader","This file can not be read. Retry with another file reader.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::notificationOfDBUpdate()
+{
+    SLM_TRACE_FUNC();
+    ::fwMedData::SeriesDB::sptr seriesDB;
+    if (this->isVersion2())
+    {
+        seriesDB = this->getInOut< ::fwMedData::SeriesDB >(::io::s_DATA_KEY);
+    }
+    else
+    {
+        seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    }
+
+    SLM_ASSERT("Unable to get seriesDB", seriesDB);
+
+
+    ::fwMedData::SeriesDB::ContainerType addedSeries;
+    for(const ::fwMedData::Series::sptr& s :  seriesDB->getContainer() )
+    {
+        addedSeries.push_back(s);
+    }
+
+    auto sig = seriesDB->signal< ::fwMedData::SeriesDB::AddedSeriesSignalType >(
+        ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG);
+    sig->asyncEmit(addedSeries);
+}
+
+//-----------------------------------------------------------------------------
+
+::io::IOPathType SSeriesDBReader::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDcmtk
diff --git a/Bundles/LeafIO/ioDicom/CMakeLists.txt b/Bundles/LeafIO/ioDicom/CMakeLists.txt
new file mode 100644
index 0000000..253f83a
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/CMakeLists.txt
@@ -0,0 +1,15 @@
+fwLoadProperties()
+
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
+fwInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/LeafIO/ioDicom/Properties.cmake b/Bundles/LeafIO/ioDicom/Properties.cmake
new file mode 100644
index 0000000..8794238
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/Properties.cmake
@@ -0,0 +1,27 @@
+
+set( NAME ioDicom )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwDicomIOFilter
+    fwDicomIOFilterQt
+    fwGui
+    fwGuiQt
+    fwJobs
+    fwLog
+    fwRuntime
+    fwServices
+    fwTools
+    gui
+    io
+    fwData
+    fwMedData
+    fwMedDataTools
+    fwThread
+    )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    )
diff --git a/Bundles/LeafIO/ioDicom/include/ioDicom/Plugin.hpp b/Bundles/LeafIO/ioDicom/include/ioDicom/Plugin.hpp
new file mode 100644
index 0000000..abec7c7
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/include/ioDicom/Plugin.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODICOM_PLUGIN_HPP__
+#define __IODICOM_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+namespace ioDicom
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    ~Plugin() throw();
+
+    // Overrides
+    void start() throw(::fwRuntime::RuntimeException);
+
+    // Overrides
+    void stop() throw();
+
+};
+
+} // namespace ioDicom
+
+#endif //__IODICOM_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioDicom/include/ioDicom/SFilterSelectionEditor.hpp b/Bundles/LeafIO/ioDicom/include/ioDicom/SFilterSelectionEditor.hpp
new file mode 100644
index 0000000..08e04d2
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/include/ioDicom/SFilterSelectionEditor.hpp
@@ -0,0 +1,171 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODICOM_SFILTERSELECTIONEDITOR_HPP__
+#define __IODICOM_SFILTERSELECTIONEDITOR_HPP__
+
+#include "ioDicom/config.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <gui/editor/IEditor.hpp>
+
+#include <QCheckBox>
+#include <QComboBox>
+#include <QListWidget>
+#include <QObject>
+#include <QPointer>
+#include <QPushButton>
+#include <QShortcut>
+#include <QWidget>
+
+namespace ioDicom
+{
+
+/**
+ * @brief   This editor service is used to select and apply filters to Dicom series.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioDicom::SFilterSelectionEditor">
+            <in key="selection" uid="..." />
+            <inout key="target" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b selection [::fwData::Vector]: selection.
+ * @subsection In-Out In-Out:
+ * - \b target [::fwMedData::SeriesDB]: seriesDB where to put the selection.
+ */
+
+class IODICOM_CLASS_API SFilterSelectionEditor : public QObject,
+                                                 public ::gui::editor::IEditor
+{
+Q_OBJECT;
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SFilterSelectionEditor)( ::gui::editor::IEditor ) );
+
+    typedef std::map< std::string, ::fwDicomIOFilter::IFilter::sptr > FilterMapType;
+
+    /**
+     * @brief Constructor
+     */
+    IODICOM_API SFilterSelectionEditor() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IODICOM_API virtual ~SFilterSelectionEditor() throw();
+
+private Q_SLOTS:
+    /// Slot called when a new filter type is selected in the context menu
+    IODICOM_API void addFilter(int filterTypeIndex);
+
+    /// Slot called when the add filter button is pressed
+    IODICOM_API void addFilterAtTheEnd();
+
+    /// Slot called when the remove filter button is pressed
+    IODICOM_API void removeFilter();
+
+    /// Slot called when a new filter is selected
+    IODICOM_API void updateButtonStatus(int filterIndex);
+
+    /// Slot called when the configure filter button is pressed
+    IODICOM_API void configureFilter();
+
+    /// Slot called when the split filter button is pressed
+    IODICOM_API void splitFilter();
+
+    /// Slot called when the apply filters button is pressed
+    IODICOM_API void applyFilters();
+
+    /// Slot used to display the context menu on a filter
+    IODICOM_API void showContextMenuForSelectedFilter(const QPoint& pos);
+
+    /// Slot used to display a warning when ignore errors checkbox is checked
+    IODICOM_API void onForceChecked(int state);
+protected:
+
+    /// Do nothing.
+    IODICOM_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API void info(std::ostream& _sstream );
+
+    /// Fill the combobox with the list of available filters
+    IODICOM_API void fillAvailableFilters();
+
+    /**
+     * @brief Create and add a filter in a specific position
+     * @param[in] filterTypeIndex Filter type index in the combobox
+     * @param[in] position Position in the list
+     */
+    IODICOM_API void addFilter(int filterTypeIndex, int position);
+
+    /**
+     * @brief Sort filters
+     * @param[in] a First filter
+     * @param[in] b Second filter
+     */
+    static bool sortFilters(const ::fwDicomIOFilter::IFilter::sptr& a, const ::fwDicomIOFilter::IFilter::sptr& b);
+
+    static QIcon getFilterIcon(::fwDicomIOFilter::IFilter::sptr filter);
+
+    static std::string getFilterDescription(::fwDicomIOFilter::IFilter::sptr filter);
+
+    /// Combo box displaying the available filters
+    QPointer< QComboBox > m_availableFilterListWidget;
+
+    /// Selected filters list widget
+    QPointer< QListWidget > m_selectedFilterListWidget;
+
+    /// Button used to add a filter in the list
+    QPointer< QPushButton > m_addFilterButton;
+
+    /// Button used to remove a filter in the list
+    QPointer< QPushButton > m_removeFilterButton;
+
+    /// Button used to configure a filter in the list
+    QPointer< QPushButton > m_configureFilterButton;
+
+    /// Button used to apply filters of the list
+    QPointer< QPushButton > m_applyFiltersButton;
+
+    /// Button used to split a composite filter
+    QPointer< QPushButton > m_splitFilterButton;
+
+    /// Delete key shortcut
+    QPointer< QShortcut > m_deleteShortcut;
+
+    /// Forced apply check box
+    QPointer< QCheckBox > m_forcedApplyCheckBox;
+
+    /// Map used to store filters and their keys
+    FilterMapType m_filtersMap;
+
+    /// Destination SeriesDB ID
+    std::string m_destinationSeriesDBID;
+
+    /// Destination SeriesDB
+    ::fwMedData::SeriesDB::sptr m_destinationSeriesDB;
+
+};
+
+} // namespace ioDicom
+
+#endif // __IODICOM_SFILTERSELECTIONEDITOR_HPP__
diff --git a/Bundles/LeafIO/ioDicom/include/ioDicom/SFilterSelectorDialog.hpp b/Bundles/LeafIO/ioDicom/include/ioDicom/SFilterSelectorDialog.hpp
new file mode 100644
index 0000000..ae0b17b
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/include/ioDicom/SFilterSelectorDialog.hpp
@@ -0,0 +1,90 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODICOM_SFILTERSELECTORDIALOG_HPP__
+#define __IODICOM_SFILTERSELECTORDIALOG_HPP__
+
+#include "ioDicom/config.hpp"
+
+#include <gui/editor/IDialogEditor.hpp>
+
+namespace ioDicom
+{
+
+/**
+ * @brief   Defines the service interface managing the editor service for object.
+ */
+class IODICOM_CLASS_API SFilterSelectorDialog : public ::gui::editor::IDialogEditor
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SFilterSelectorDialog)( ::gui::editor::IDialogEditor) );
+
+    /**
+     * @brief   Constructor. Do nothing (Just initialize parameters).
+     *
+     * By default, the SFilterSelectorDialog::m_filtersAreExcluded is set to true.
+     */
+    IODICOM_API SFilterSelectorDialog();
+
+    /// Destructor. Do nothing.
+    IODICOM_API virtual ~SFilterSelectorDialog() throw();
+
+protected:
+
+    ///Starts the service. Do nothing.
+    IODICOM_API void starting() throw( ::fwTools::Failed );
+
+    /// Stops the service. Do nothing.
+    IODICOM_API void stopping() throw( ::fwTools::Failed );
+
+    /**
+     * @brief   This method initializes class member parameters from configuration elements.
+     *
+     * The method verifies if the configuration is well written and retrieves user parameter values.
+     * Thanks to this method, SFilterSelectorDialog::m_selectedFilters value is up to date (cleared before reconfiguring).
+     *
+     * Sample of configuration :
+     * @code{.xml}
+          <service uid="GENERIC_UID_filter" type="::gui::editor::IDialogEditor" impl="::ioDicom::dcmtk::editor::SFilterSelectorDialog" autoConnect="no">
+              <selection mode="include" />
+              <addSelection filter="::fwDicomIOFilter::custom::NoFilter" />
+          </service>
+     * @endcode
+     * With :
+     * None of these parameters are mandatory.
+     *  - \b selection
+     *      - \b mode (mandatory) : must be include (to add the selection to selector list ) or exclude (to exclude the selection of the selector list).
+     *  - \b addSelection
+     *      - \b filter (mandatory) : Name of the filter to include/exclude to the choice list of the selector.
+     **/
+    IODICOM_API void configuring() throw( ::fwTools::Failed );
+
+    /// Create a dialog box to provide the user different available filters for the FilterSelector associated objects.
+    /// Then, the selected filter is applied.
+    IODICOM_API void updating() throw( ::fwTools::Failed );
+
+    /// Gives the name of the class. Do nothing.
+    IODICOM_API void info( std::ostream& _sstream );
+
+private:
+
+    /// Configure if selected filters are included or excluded.
+    bool m_filtersAreExcluded;
+
+    /**
+     * @brief List of filters to be included or excluded.
+     *
+     * @see SFilterSelectorDialog::m_filtersAreExcluded.
+     */
+    std::vector< std::string > m_selectedFilters;
+};
+
+} // namespace ioDicom
+
+#endif // __IODICOM_SFILTERSELECTORDIALOG_HPP__
+
diff --git a/Bundles/LeafIO/ioDicom/include/ioDicom/SSeriesDBMerger.hpp b/Bundles/LeafIO/ioDicom/include/ioDicom/SSeriesDBMerger.hpp
new file mode 100644
index 0000000..fd82c7b
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/include/ioDicom/SSeriesDBMerger.hpp
@@ -0,0 +1,69 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODICOM_SSERIESDBMERGER_HPP__
+#define __IODICOM_SSERIESDBMERGER_HPP__
+
+#include "ioDicom/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+namespace ioDicom
+{
+
+/**
+ * @brief   This service is used to merge selected series with a SeriesDB.
+ *          All the series in the vector are pushed in the destination SeriesDB.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioDicom::SSeriesDBMerger">
+            <in key="selectedSeries" uid="..." />
+            <inout key="seriesDB" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b selectedSeries [::fwData::Vector]: Vector containing the selected series to merge.
+ * @subsection In-Out In-Out:
+ * - \b seriesDB [::fwMedData::SeriesDB]: SeriesDB where to put the series.
+ */
+class IODICOM_CLASS_API SSeriesDBMerger : public ::fwGui::IActionSrv
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBMerger)( ::fwGui::IActionSrv ) );
+
+    /// Constructor
+    IODICOM_API SSeriesDBMerger() throw();
+
+    /// Destructor
+    IODICOM_API virtual ~SSeriesDBMerger() throw();
+
+protected:
+
+    /// Do nothing.
+    IODICOM_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API void info(std::ostream& _sstream );
+};
+
+} // namespace ioDicom
+
+#endif // __IODICOM_SSERIESDBMERGER_HPP__
diff --git a/Bundles/LeafIO/ioDicom/include/ioDicom/SSliceIndexDicomEditor.hpp b/Bundles/LeafIO/ioDicom/include/ioDicom/SSliceIndexDicomEditor.hpp
new file mode 100644
index 0000000..c1862cb
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/include/ioDicom/SSliceIndexDicomEditor.hpp
@@ -0,0 +1,184 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODICOM_SSLICEINDEXDICOMEDITOR_HPP__
+#define __IODICOM_SSLICEINDEXDICOMEDITOR_HPP__
+
+#include "ioDicom/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <gui/editor/IEditor.hpp>
+#include <io/IReader.hpp>
+
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+#include <QSlider>
+#include <QWidget>
+
+#include <boost/asio/deadline_timer.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/filesystem/path.hpp>
+
+namespace fwData
+{
+class Composite;
+class Integer;
+}
+
+namespace fwThread
+{
+class Timer;
+}
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace fwRuntime
+{
+struct ConfigurationElement;
+}
+
+namespace ioDicom
+{
+
+/**
+ * @brief   This editor service is used to select a slice index and read the corresponding image on the local computer.
+ * *
+ * @section Slots Slots
+ * - \b readImage(size_t) : Read the given slice.
+ * - \b displayErrorMessage(size_t) : display an error message.
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioDicom::SSliceIndexDicomEditor">
+           <in key="series" uid="..." />
+           <out key="image" uid="..." />
+           <config dicomReader="::ioGdcm::SSeriesDBReader" delay="500">
+               <dicomReaderConfig> <!-- optional -->
+                   <!-- here goes the configuration for the dicom reader implementation -->
+               </dicomReaderConfig>
+           </config>
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b series [::fwMedData::DicomSeries]: Dicom Series where to extract the images.
+ * @subsection Output Output:
+ * - \b image [::fwData::Image]: Downloaded image.
+ * @subsection Configuration Configuration:
+ * - \b dicomReader Reader type to use.
+ * - \b dicomReaderConfig Optional configuration for the DICOM Reader.
+ */
+class IODICOM_CLASS_API SSliceIndexDicomEditor : public QObject,
+                                                 public ::gui::editor::IEditor
+{
+Q_OBJECT;
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSliceIndexDicomEditor)( ::gui::editor::IEditor ) );
+
+    IODICOM_API static const ::fwCom::Slots::SlotKeyType s_READ_IMAGE_SLOT;
+    typedef ::fwCom::Slot<void (std::size_t)> ReadImageSlotType;
+
+    IODICOM_API static const ::fwCom::Slots::SlotKeyType s_DISPLAY_MESSAGE_SLOT;
+    typedef ::fwCom::Slot<void (const std::string&)> DisplayMessageSlotType;
+
+    /**
+     * @brief Constructor
+     */
+    IODICOM_API SSliceIndexDicomEditor() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IODICOM_API virtual ~SSliceIndexDicomEditor() throw();
+
+protected:
+
+    /// Configuring method. This method is used to configure the service.
+    IODICOM_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IODICOM_API void info(std::ostream& _sstream );
+
+    /// Function called when a new slice must be displayed
+    IODICOM_API void triggerNewSlice();
+
+    /**
+     * @brief Read the selected image
+     * @param[in] selectedSliceIndex Selected slice of the image that must be read
+     */
+    IODICOM_API void readImage(std::size_t selectedSliceIndex);
+
+    /**
+     * @brief Display error message
+     * @param[in] message Message that must be displayed
+     */
+    IODICOM_API void displayErrorMessage(const std::string& message) const;
+
+private Q_SLOTS:
+    /**
+     * @brief Slot called when the slider is moved
+     * @param[in] value Slider value
+     */
+    IODICOM_API void changeSliceIndex(int value);
+
+private:
+
+    /// Slot to call readLocalSeries method
+    ReadImageSlotType::sptr m_slotReadImage;
+
+    /// Slice index slider
+    QPointer< QSlider > m_sliceIndexSlider;
+
+    /// Slice index line edit
+    QPointer< QLineEdit > m_sliceIndexLineEdit;
+
+    /// Number of instances
+    std::size_t m_numberOfSlices;
+
+    /// IODICOM Reader
+    std::string m_dicomReaderType;
+
+    /// Reader
+    ::io::IReader::wptr m_dicomReader;
+
+    /// Temporary SeriesDB
+    SPTR(::fwMedData::SeriesDB) m_tempSeriesDB;
+
+    /// Axial slice index
+    SPTR(fwData::Integer) m_axialIndex;
+    /// Frontal slice index
+    SPTR(::fwData::Integer) m_frontalIndex;
+    /// Sagittal slice index
+    SPTR(::fwData::Integer) m_sagittalIndex;
+
+    /// Timer used to generate the new slice selection delay
+    SPTR(::fwThread::Timer) m_delayTimer2;
+
+    /// Delay
+    std::size_t m_delay;
+
+    /// Optional configuration to set to reader implementation
+    SPTR(::fwRuntime::ConfigurationElement) m_readerConfig;
+};
+
+} // namespace ioDicom
+
+#endif // __IODICOM_SSLICEINDEXDICOMEDITOR_HPP__
diff --git a/Bundles/LeafIO/ioDicom/include/ioDicom/namespace.hpp b/Bundles/LeafIO/ioDicom/include/ioDicom/namespace.hpp
new file mode 100644
index 0000000..32d9cf8
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/include/ioDicom/namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IODICOM_NAMESPACE_HPP__
+#define __IODICOM_NAMESPACE_HPP__
+
+/**
+ * @brief ioDicom contains services used to deal with the DICOM standard.
+ */
+namespace ioDicom
+{
+}
+#endif /* __IODICOM_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafIO/ioDicom/rc/plugin.xml b/Bundles/LeafIO/ioDicom/rc/plugin.xml
new file mode 100644
index 0000000..1bc51d7
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/rc/plugin.xml
@@ -0,0 +1,35 @@
+<plugin id="ioDicom" class="ioDicom::Plugin"  version="@DASH_VERSION@" >
+    <library name="ioDicom" />
+
+    <requirement id="dataReg"/>
+    <requirement id="gui" />
+    <requirement id="io" />
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::ioDicom::SFilterSelectionEditor</service>
+        <object>::fwData::Vector</object>
+        <desc>Filter Selection Editor</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IDialogEditor</type>
+        <service>::ioDicom::SFilterSelectorDialog</service>
+        <object>::fwData::String</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwGui::IActionSrv</type>
+        <service>::ioDicom::SSeriesDBMerger</service>
+        <object>::fwData::Vector</object>
+        <desc>Push Series to SeriesDB</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::ioDicom::SSliceIndexDicomEditor</service>
+        <object>::fwMedData::DicomSeries</object>
+        <desc>Slice Index Dicom Editor</desc>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafIO/ioDicom/src/ioDicom/Plugin.cpp b/Bundles/LeafIO/ioDicom/src/ioDicom/Plugin.cpp
new file mode 100644
index 0000000..277234f
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/src/ioDicom/Plugin.cpp
@@ -0,0 +1,34 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDicom/Plugin.hpp"
+
+#include <fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/macros.hpp>
+
+namespace ioDicom
+{
+
+using namespace ::fwRuntime::utils;
+static GenericExecutableFactoryRegistrar<Plugin> registrar("ioDicom::Plugin");
+
+Plugin::~Plugin() throw()
+{
+    // Hack to force link with Qt filters
+    ::fwDicomIOFilterQt::sorter::TagValueConfigurableSorter::sptr t =
+        ::fwDicomIOFilterQt::sorter::TagValueConfigurableSorter::New();
+}
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+void Plugin::stop() throw()
+{
+}
+
+} // namespace ioDicom
diff --git a/Bundles/LeafIO/ioDicom/src/ioDicom/SFilterSelectionEditor.cpp b/Bundles/LeafIO/ioDicom/src/ioDicom/SFilterSelectionEditor.cpp
new file mode 100644
index 0000000..182e3a8
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/src/ioDicom/SFilterSelectionEditor.cpp
@@ -0,0 +1,589 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDicom/SFilterSelectionEditor.hpp"
+
+#include <fwData/Vector.hpp>
+
+#include <fwDicomIOFilter/composite/IComposite.hpp>
+#include <fwDicomIOFilter/exceptions/FilterFailure.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+#include <fwDicomIOFilter/registry/detail.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QMenu>
+#include <QSignalMapper>
+#include <QVBoxLayout>
+
+#include <boost/foreach.hpp>
+
+namespace ioDicom
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::ioDicom::SFilterSelectionEditor, ::fwData::Vector );
+
+//------------------------------------------------------------------------------
+
+SFilterSelectionEditor::SFilterSelectionEditor() throw()
+{
+}
+//------------------------------------------------------------------------------
+
+SFilterSelectionEditor::~SFilterSelectionEditor() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::info(std::ostream& _sstream )
+{
+    _sstream << "SFilterSelectionEditor::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::configuring() throw(::fwTools::Failed)
+{
+    ::fwGui::IGuiContainerSrv::initialize();
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    // Get Destination SeriesDB
+    m_destinationSeriesDB = this->getInOut< ::fwMedData::SeriesDB>("target");
+    SLM_ASSERT("The SeriesDB \"" + m_destinationSeriesDBID + "\" doesn't exist.", m_destinationSeriesDB);
+
+    ::fwData::Vector::csptr dataVector = this->getInput< ::fwData::Vector >("selection");
+    SLM_ASSERT("Vector object should not be null.", dataVector);
+
+    ::fwGui::IGuiContainerSrv::create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+    QVBoxLayout* mainLayout  = new QVBoxLayout();
+    mainLayout->setAlignment(Qt::AlignTop);
+    container->setLayout(mainLayout);
+
+    // Size policy
+    QSizePolicy policy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+
+    // Top widget
+    QHBoxLayout* topLayout = new QHBoxLayout();
+    QWidget* topWidget     = new QWidget();
+    topWidget->setLayout(topLayout);
+    topLayout->setContentsMargins(QMargins(0,0,0,0));
+    mainLayout->addWidget(topWidget);
+
+    // Available filter list
+    m_availableFilterListWidget = new QComboBox();
+    this->fillAvailableFilters();
+    topLayout->addWidget(m_availableFilterListWidget);
+
+    // Add filter button
+    m_addFilterButton = new QPushButton(QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Plus.svg"), "Add");
+    m_addFilterButton->setSizePolicy(policy);
+    topLayout->addWidget(m_addFilterButton);
+
+    // Add selected filters
+    m_selectedFilterListWidget = new QListWidget();
+    mainLayout->addWidget(m_selectedFilterListWidget);
+    m_selectedFilterListWidget->setSelectionMode(QAbstractItemView::SingleSelection);
+    m_selectedFilterListWidget->setDragEnabled(true);
+    m_selectedFilterListWidget->viewport()->setAcceptDrops(true);
+    m_selectedFilterListWidget->setDropIndicatorShown(true);
+    m_selectedFilterListWidget->setDragDropMode(QAbstractItemView::InternalMove);
+    m_selectedFilterListWidget->setContextMenuPolicy(Qt::CustomContextMenu);
+
+    // Add forced apply checkbox
+    QHBoxLayout* applyLayout = new QHBoxLayout();
+    QWidget* applyWidget     = new QWidget();
+    applyWidget->setLayout(applyLayout);
+    applyWidget->setSizePolicy(policy);
+    applyLayout->setContentsMargins(QMargins(0,0,0,0));
+    m_forcedApplyCheckBox = new QCheckBox("Ignore errors");
+    applyLayout->addWidget(m_forcedApplyCheckBox);
+    mainLayout->addWidget(applyWidget, 0, Qt::AlignRight);
+
+    // Bottom widget
+    QHBoxLayout* bottomLayout = new QHBoxLayout();
+    QWidget* bottomWidget     = new QWidget();
+    bottomWidget->setLayout(bottomLayout);
+    bottomLayout->setContentsMargins(QMargins(0,0,0,0));
+    mainLayout->addWidget(bottomWidget);
+
+    QHBoxLayout* buttonLayout = new QHBoxLayout();
+    QWidget* buttonWidget     = new QWidget();
+    buttonWidget->setLayout(buttonLayout);
+    buttonWidget->setSizePolicy(policy);
+    buttonLayout->setContentsMargins(QMargins(0,0,0,0));
+
+    // Apply filters button
+    m_applyFiltersButton = new QPushButton(QIcon(QString(BUNDLE_PREFIX) +"/media_0-1/icons/Apply.svg"),
+                                           "Apply");
+    m_applyFiltersButton->setSizePolicy(policy);
+    buttonLayout->addWidget(m_applyFiltersButton);
+
+    // Configure filter button
+    m_configureFilterButton = new QPushButton(QIcon(QString(BUNDLE_PREFIX) +"/media_0-1/icons/Settings.svg"),
+                                              "Configure");
+    m_configureFilterButton->setSizePolicy(policy);
+    m_configureFilterButton->setEnabled(false);
+    buttonLayout->addWidget(m_configureFilterButton);
+
+    // Split filter button
+    m_splitFilterButton = new QPushButton(QIcon(QString(BUNDLE_PREFIX) +"/media_0-1/icons/Split.svg"), "Split");
+    m_splitFilterButton->setSizePolicy(policy);
+    m_splitFilterButton->setEnabled(false);
+    buttonLayout->addWidget(m_splitFilterButton);
+
+    // Remove filter button
+    m_removeFilterButton = new QPushButton(QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Minus.svg"),
+                                           "Remove");
+    m_removeFilterButton->setSizePolicy(policy);
+    m_removeFilterButton->setEnabled(false);
+    buttonLayout->addWidget(m_removeFilterButton);
+
+    bottomLayout->addWidget(buttonWidget, 0, Qt::AlignRight);
+
+    // Create shortcut
+    m_deleteShortcut =
+        new QShortcut(QKeySequence(Qt::Key_Delete), m_selectedFilterListWidget, 0, 0, Qt::WidgetShortcut);
+
+    // Connect the signals
+    QObject::connect(m_selectedFilterListWidget, SIGNAL(currentRowChanged(int)), this, SLOT(updateButtonStatus(int)));
+    QObject::connect(m_addFilterButton, SIGNAL(clicked(void)), this, SLOT(addFilterAtTheEnd(void)));
+    QObject::connect(m_removeFilterButton, SIGNAL(clicked(void)), this, SLOT(removeFilter(void)));
+    QObject::connect(m_configureFilterButton, SIGNAL(clicked(void)), this, SLOT(configureFilter(void)));
+    QObject::connect(m_splitFilterButton, SIGNAL(clicked(void)), this, SLOT(splitFilter(void)));
+    QObject::connect(m_applyFiltersButton, SIGNAL(clicked(void)), this, SLOT(applyFilters(void)));
+    QObject::connect(m_deleteShortcut, SIGNAL(activated()), this, SLOT(removeFilter(void)));
+    QObject::connect(m_selectedFilterListWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this,
+                     SLOT(showContextMenuForSelectedFilter(const QPoint &)));
+    QObject::connect(m_forcedApplyCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onForceChecked(int)));
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::onForceChecked(int state)
+{
+    if(state == Qt::Checked)
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Be careful",
+            "You asked to ignore reading errors, there are high risks of issues for resulting image.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::fillAvailableFilters()
+{
+    unsigned int index = 0;
+
+
+    std::vector< ::fwDicomIOFilter::IFilter::sptr > sortedFilters;
+    for(const std::string& key: ::fwDicomIOFilter::registry::get()->getFactoryKeys())
+    {
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(key);
+        sortedFilters.push_back(filter);
+    }
+
+    std::sort(sortedFilters.begin(), sortedFilters.end(), SFilterSelectionEditor::sortFilters);
+
+    for(const ::fwDicomIOFilter::IFilter::sptr& filter: sortedFilters)
+    {
+        // If the filter doesn't have a configuration or if it is configurable using GUI
+        if(!filter->isConfigurationRequired() || filter->isConfigurableWithGUI())
+        {
+            // Create filter
+            m_availableFilterListWidget->addItem(filter->getName().c_str(), filter->getClassname().c_str());
+
+            // Set icon
+            m_availableFilterListWidget->setItemIcon(index, SFilterSelectionEditor::getFilterIcon(filter));
+
+            // Set description
+            m_availableFilterListWidget->setItemData(index,
+                                                     SFilterSelectionEditor::getFilterDescription(
+                                                         filter).c_str(), Qt::ToolTipRole);
+
+            ++index;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    // Disconnect the signals
+    QObject::disconnect(m_selectedFilterListWidget, SIGNAL(currentRowChanged(int)), this,
+                        SLOT(updateButtonStatus(int)));
+    QObject::disconnect(m_addFilterButton, SIGNAL(clicked(void)), this, SLOT(addFilterAtTheEnd(void)));
+    QObject::disconnect(m_removeFilterButton, SIGNAL(clicked(void)), this, SLOT(removeFilter(void)));
+    QObject::disconnect(m_configureFilterButton, SIGNAL(clicked(void)), this, SLOT(configureFilter(void)));
+    QObject::disconnect(m_splitFilterButton, SIGNAL(clicked(void)), this, SLOT(splitFilter(void)));
+    QObject::disconnect(m_applyFiltersButton, SIGNAL(clicked(void)), this, SLOT(applyFilters(void)));
+    QObject::disconnect(m_deleteShortcut, SIGNAL(activated()), this, SLOT(removeFilter(void)));
+    QObject::disconnect(m_selectedFilterListWidget, SIGNAL(customContextMenuRequested(const QPoint &)), this,
+                        SLOT(showContextMenuForSelectedFilter(const QPoint &)));
+
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::addFilter(int filterTypeIndex)
+{
+    int index = m_selectedFilterListWidget->currentRow()+1;
+    this->addFilter(filterTypeIndex, index);
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::addFilterAtTheEnd()
+{
+    this->addFilter(m_availableFilterListWidget->currentIndex(), m_selectedFilterListWidget->count());
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::addFilter(int filterTypeIndex, int position)
+{
+    // Get information from selected filter
+    QIcon icon          = m_availableFilterListWidget->itemIcon(filterTypeIndex);
+    QString name        = m_availableFilterListWidget->itemText(filterTypeIndex);
+    QString description = m_availableFilterListWidget->itemData(filterTypeIndex, Qt::ToolTipRole).toString();
+    std::string key     = m_availableFilterListWidget->itemData(filterTypeIndex).toString().toStdString();
+
+    // Create filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(key);
+    std::string id = filter->getID();
+    m_filtersMap[id] = filter;
+
+    // Add a the filter in the list
+    m_selectedFilterListWidget->insertItem(position, name);
+    m_selectedFilterListWidget->item(position)->setIcon(icon);
+    m_selectedFilterListWidget->item(position)->setToolTip(description);
+    m_selectedFilterListWidget->item(position)->setData(Qt::UserRole, id.c_str());
+    m_selectedFilterListWidget->setCurrentRow(position);
+
+    // Update apply button
+    m_applyFiltersButton->setEnabled(m_selectedFilterListWidget->count()>0);
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::removeFilter()
+{
+    int currentIndex = m_selectedFilterListWidget->currentRow();
+    if(currentIndex >= 0)
+    {
+        // Remove selected filter from map
+        std::string id = m_selectedFilterListWidget->item(currentIndex)->data(Qt::UserRole).toString().toStdString();
+        m_filtersMap.erase(id);
+
+        // Remove selected filter from widget
+        m_selectedFilterListWidget->takeItem(currentIndex);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::configureFilter()
+{
+    int selectedFilterIndex = m_selectedFilterListWidget->currentRow();
+    std::string id          =
+        m_selectedFilterListWidget->item(selectedFilterIndex)->data(Qt::UserRole).toString().toStdString();
+    m_filtersMap[id]->configureWithGUI();
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::splitFilter()
+{
+    int currentIndex        = m_selectedFilterListWidget->currentRow();
+    std::string compositeId =
+        m_selectedFilterListWidget->item(currentIndex)->data(Qt::UserRole).toString().toStdString();
+    ::fwDicomIOFilter::composite::IComposite::sptr composite =
+        ::fwDicomIOFilter::composite::IComposite::dynamicCast(m_filtersMap[compositeId]);
+
+    // Remove composite filter
+    this->removeFilter();
+
+    // Add filters
+    int position = currentIndex;
+    for(const ::fwDicomIOFilter::IFilter::sptr& filter: composite->getChildren())
+    {
+        std::string id = filter->getID();
+        m_filtersMap[id] = filter;
+        m_selectedFilterListWidget->insertItem(position, filter->getName().c_str());
+        m_selectedFilterListWidget->item(position)->setIcon(SFilterSelectionEditor::getFilterIcon(filter));
+        m_selectedFilterListWidget->item(position)->setToolTip(
+            SFilterSelectionEditor::getFilterDescription(filter).c_str());
+        m_selectedFilterListWidget->item(position)->setData(Qt::UserRole, id.c_str());
+        ++position;
+    }
+    m_selectedFilterListWidget->setCurrentRow(currentIndex);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::updateButtonStatus(int filterIndex)
+{
+    bool hasFilter = (filterIndex != -1);
+    m_removeFilterButton->setEnabled(hasFilter);
+    if(hasFilter)
+    {
+        std::string id = m_selectedFilterListWidget->item(filterIndex)->data(Qt::UserRole).toString().toStdString();
+
+        // Configure filter button
+        m_configureFilterButton->setEnabled(m_filtersMap[id]->isConfigurableWithGUI());
+
+        // Split filter button
+        m_splitFilterButton->setEnabled(m_filtersMap[id]->getFilterType() == ::fwDicomIOFilter::IFilter::COMPOSITE);
+    }
+    else
+    {
+        m_configureFilterButton->setEnabled(false);
+        m_splitFilterButton->setEnabled(false);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::applyFilters()
+{
+    typedef std::vector< ::fwMedData::DicomSeries::sptr > DicomSeriesContainertype;
+    typedef std::vector< ::fwDicomIOFilter::IFilter::sptr > FilterContainertype;
+
+    // Get selected DicomSeries
+    ::fwData::Vector::sptr vector = this->getObject< ::fwData::Vector >();
+
+    // Display the informations
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.setTitle("Filters information");
+
+    // Clear destination SeriesDB
+    ::fwMedDataTools::helper::SeriesDB sDBhelper(m_destinationSeriesDB);
+    sDBhelper.clear();
+
+    // Be sure series are selected
+    if(vector->empty())
+    {
+        messageBox.setMessage("You must select series on which you want to apply your filters.");
+    }
+    else if(m_selectedFilterListWidget->count() == 0)
+    {
+        messageBox.setMessage("You must select the filters that you want to apply on your series.");
+    }
+    else
+    {
+        // Create containers
+        DicomSeriesContainertype dicomSeriesContainer;
+        FilterContainertype filterContainer;
+
+        // Copy selected DicomSeries
+        for(const ::fwData::Object::sptr& obj: vector->getContainer())
+        {
+            ::fwMedData::DicomSeries::sptr srcDicomSeries = ::fwMedData::DicomSeries::dynamicCast(obj);
+            SLM_ASSERT("The series should be a DicomSeries.", srcDicomSeries);
+
+            ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::New();
+            dicomSeries->deepCopy(srcDicomSeries);
+            dicomSeriesContainer.push_back(dicomSeries);
+        }
+
+        // Create filter vector
+        for(int i = 0; i < m_selectedFilterListWidget->count(); ++i)
+        {
+            std::string id = m_selectedFilterListWidget->item(i)->data(Qt::UserRole).toString().toStdString();
+            filterContainer.push_back(m_filtersMap[id]);
+        }
+
+        std::stringstream ssFilters;
+        std::stringstream ssInfos;
+        bool forcedApply = m_forcedApplyCheckBox->isChecked();
+
+        ssFilters << "<b>Filters :</b><br />";
+        // Let's apply all the filters
+        for(const ::fwDicomIOFilter::IFilter::sptr& filter: filterContainer)
+        {
+            ssFilters << "- " << filter->getName() << " -> ";
+            try
+            {
+                ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, forcedApply);
+                ssFilters << "<font color=\"Green\">OK</font><br />";
+            }
+            catch(::fwDicomIOFilter::exceptions::FilterFailure& e)
+            {
+                ssFilters << "<font color=\"Red\">ERROR</font><br />";
+                ssInfos << "- " << e.what() << "<br />";
+                if(!forcedApply)
+                {
+                    break;
+                }
+            }
+        }
+
+        // Push series
+        if(forcedApply || ssInfos.str().empty())
+        {
+            // Add filtered series to SeriesDB
+            for(const ::fwMedData::DicomSeries::sptr& series: dicomSeriesContainer)
+            {
+                sDBhelper.add(series);
+            }
+        }
+
+        // If there is no error
+        if(ssInfos.str().empty())
+        {
+            ssInfos << "All filters have been correctly applied.";
+        }
+
+        std::string msg = ssFilters.str() + "<br /><br /><b>Informations :</b><br />" + ssInfos.str();
+        messageBox.setMessage(msg);
+    }
+
+    // Diplay message
+    messageBox.show();
+
+    // Notify
+    sDBhelper.notify();
+
+
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectionEditor::showContextMenuForSelectedFilter(const QPoint& pos)
+{
+    // Create context menu
+    QMenu contextMenu("Context menu", m_selectedFilterListWidget);
+
+    // Add menu
+    QMenu* addMenu = contextMenu.addMenu("Add");
+
+    // Use a mapper to retrieve index of the selected filter type
+    QPointer< QSignalMapper > mapper = new QSignalMapper();
+
+    // Fill the menu with the available filters
+    for(int i = 0; i < m_availableFilterListWidget->count(); ++i)
+    {
+        QString text               = m_availableFilterListWidget->itemText(i);
+        QIcon icon                 = m_availableFilterListWidget->itemIcon(i);
+        QPointer< QAction > action = new QAction(icon, text, m_selectedFilterListWidget);
+        action->setIconVisibleInMenu(true);
+        addMenu->addAction(action);
+
+        mapper->setMapping(action, i);
+        QObject::connect(action, SIGNAL(triggered()), mapper, SLOT(map()));
+    }
+
+    // Connect mapper
+    QObject::connect(mapper, SIGNAL(mapped(int)), this, SLOT(addFilter(int)));
+
+    // Check id the menu is requested from a filter
+    QListWidgetItem* filterItem = m_selectedFilterListWidget->itemAt(pos);
+    if(filterItem)
+    {
+        // Get filter
+        std::string id = filterItem->data(Qt::UserRole).toString().toStdString();
+        ::fwDicomIOFilter::IFilter::sptr filter = m_filtersMap[id];
+
+        // Remove action
+        QPointer< QAction > removeAction = new QAction("Remove", m_selectedFilterListWidget);
+        QObject::connect(removeAction, SIGNAL(triggered()), this, SLOT(removeFilter()));
+        contextMenu.addAction(removeAction);
+
+        // Configure action
+        QPointer< QAction > configureAction = new QAction("Configure", m_selectedFilterListWidget);
+        configureAction->setEnabled(filter->isConfigurableWithGUI());
+        QObject::connect(configureAction, SIGNAL(triggered()), this, SLOT(configureFilter()));
+        contextMenu.addAction(configureAction);
+
+        // Split action
+        QPointer< QAction > splitAction = new QAction("Split", m_selectedFilterListWidget);
+        splitAction->setEnabled(filter->getFilterType() == ::fwDicomIOFilter::IFilter::COMPOSITE);
+        QObject::connect(splitAction, SIGNAL(triggered()), this, SLOT(splitFilter()));
+        contextMenu.addAction(splitAction);
+
+    }
+
+    // Display menu
+    contextMenu.exec(m_selectedFilterListWidget->mapToGlobal(pos));
+
+}
+
+//------------------------------------------------------------------------------
+
+bool SFilterSelectionEditor::sortFilters(const ::fwDicomIOFilter::IFilter::sptr& a,
+                                         const ::fwDicomIOFilter::IFilter::sptr& b)
+{
+    if(a->getFilterType() == b->getFilterType())
+    {
+        return a->getName() < b->getName();
+    }
+    return a->getFilterType() > b->getFilterType();
+}
+
+//------------------------------------------------------------------------------
+
+QIcon SFilterSelectionEditor::getFilterIcon(::fwDicomIOFilter::IFilter::sptr filter)
+{
+    QIcon icons[] = {
+        QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Modifier.svg"),
+        QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Sorter.svg"),
+        QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Splitter.svg"),
+        QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Composite.svg"),
+        QIcon(QString(BUNDLE_PREFIX) + "/media_0-1/icons/Custom.svg")
+    };
+    return icons[filter->getFilterType()];
+}
+
+//------------------------------------------------------------------------------
+
+std::string SFilterSelectionEditor::getFilterDescription(::fwDicomIOFilter::IFilter::sptr filter)
+{
+    std::string types[]     = { "Modifier", "Sorter", "Splitter", "Composite", "Custom" };
+    std::string description =
+        "<b>Name :</b> "+filter->getName()+"<br />"
+        "<b>Type :</b> "+types[filter->getFilterType()]+"<br />"
+        "<b>Configurable :</b> "+((filter->isConfigurableWithGUI()) ? "Yes" : "No")+"<br />"
+        "<b>Informations :</b><br />"+filter->getDescription();
+    return description;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDicom
diff --git a/Bundles/LeafIO/ioDicom/src/ioDicom/SFilterSelectorDialog.cpp b/Bundles/LeafIO/ioDicom/src/ioDicom/SFilterSelectorDialog.cpp
new file mode 100644
index 0000000..bef1bf6
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/src/ioDicom/SFilterSelectorDialog.cpp
@@ -0,0 +1,211 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDicom/SFilterSelectorDialog.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwDicomIOFilter/IFilter.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <sstream>
+#include <string>
+
+namespace ioDicom
+{
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::gui::editor::IDialogEditor, ::ioDicom::SFilterSelectorDialog, ::fwData::String );
+
+//------------------------------------------------------------------------------
+
+SFilterSelectorDialog::SFilterSelectorDialog() :
+    m_filtersAreExcluded   ( true )
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+SFilterSelectorDialog::~SFilterSelectorDialog()  throw()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectorDialog::configuring() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    m_selectedFilters.clear();
+
+    //  Config Elem
+    //  <selection mode="exclude">
+    //  <addSelection filter="::fwDicomIOFilter::composite::CTImageStorageDefaultComposite" />
+    //  <addSelection filter="::fwDicomIOFilter::composite::CTImageStorageDefaultComposite" />
+
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter = this->m_configuration->begin();
+    for(; iter != this->m_configuration->end(); ++iter )
+    {
+        SLM_INFO( "SFilterSelectorDialog "  + (*iter)->getName());
+
+        if( (*iter)->getName() == "selection" )
+        {
+            SLM_ASSERT( "The xml element <selection> must have the attribute 'mode'.", (*iter)->hasAttribute("mode"));
+            const std::string mode = (*iter)->getExistingAttributeValue("mode");
+            m_filtersAreExcluded = ( mode == "exclude" );
+            SLM_ASSERT( "The xml attribute <mode> must be either 'exclude' or 'include'.", mode == "exclude" ||
+                        mode == "include" );
+            SLM_DEBUG( "mode => " + mode );
+        }
+
+        if( (*iter)->getName() == "addSelection" )
+        {
+            SLM_ASSERT( "The xml element <addSelection> must have the attribute 'filter'.",
+                        (*iter)->hasAttribute("filter"));
+            m_selectedFilters.push_back( (*iter)->getExistingAttributeValue("filter") );
+            SLM_DEBUG( "add selection => " + (*iter)->getExistingAttributeValue("filter") );
+        }
+
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectorDialog::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectorDialog::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectorDialog::updating() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    // Retrieve available filters
+    std::vector< ::fwDicomIOFilter::IFilter::sptr > registredFilters;
+    for(std::string key: ::fwDicomIOFilter::registry::get()->getFactoryKeys())
+    {
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(key);
+        registredFilters.push_back(filter);
+    }
+
+    // Filter available extensions and replace id by service description
+    std::map< std::string, ::fwDicomIOFilter::IFilter::sptr > availableFiltersMap;
+    std::vector< std::string > availableFilterNames;
+
+    for( ::fwDicomIOFilter::IFilter::sptr filter: registredFilters )
+    {
+        const bool filterIsSelectedByUser = std::find( m_selectedFilters.begin(), m_selectedFilters.end(),
+                                                       filter->getClassname() ) != m_selectedFilters.end();
+
+        // Test if the filter is considered here as available by users
+        // excluded mode => add filters that are not selected by users
+        // included mode => add filters selected by users
+        if( (m_filtersAreExcluded && !filterIsSelectedByUser) ||
+            (!m_filtersAreExcluded && filterIsSelectedByUser) )
+        {
+            // Add this filter
+            std::string filterName = filter->getName();
+            filterName                      = (filterName.empty()) ? filter->getClassname() : filterName;
+            availableFiltersMap[filterName] = filter;
+            availableFilterNames.push_back( filterName );
+        }
+    }
+
+    // Sort available services (lexical string sort)
+    std::sort( availableFilterNames.begin(), availableFilterNames.end() );
+
+    // Test if we have an extension
+    if ( !availableFilterNames.empty() )
+    {
+        std::string filterName         = *availableFilterNames.begin();
+        bool filterSelectionIsCanceled = false;
+
+        // Selection of extension when availableFilterNames.size() > 1
+        if ( availableFilterNames.size() > 1 )
+        {
+            ::fwGui::dialog::SelectorDialog::sptr selector = ::fwGui::dialog::SelectorDialog::New();
+
+            selector->setTitle("Filter to use");
+            selector->setSelections(availableFilterNames);
+            filterName                = selector->show();
+            filterSelectionIsCanceled = filterName.empty();
+
+            SLM_ASSERT("Unable to find the selected filter name in the filter map.",
+                       filterSelectionIsCanceled || availableFiltersMap.find(filterName) != availableFiltersMap.end() );
+        }
+
+        if ( !filterSelectionIsCanceled )
+        {
+
+            ::fwDicomIOFilter::IFilter::sptr filter = availableFiltersMap[filterName];
+
+            ::fwData::String::sptr obj = this->getObject< ::fwData::String >();
+            SLM_ASSERT("The filter selector service must work on a ::fwData::String object.", obj);
+            obj->setValue(filter->getClassname());
+
+            auto sig
+                = obj->signal< ::fwData::Object::ModifiedSignalType>( ::fwData::Object::s_MODIFIED_SIG );
+            {
+                ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+                sig->asyncEmit();
+            }
+        }
+    }
+    else
+    {
+        SLM_WARN("SFilterSelectorDialog::load : availableFilters is empty.");
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Filter not found");
+        messageBox.setMessage( "There is no available filter for this reader." );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+        messageBox.show();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SFilterSelectorDialog::info( std::ostream& _sstream )
+{
+    // Update message
+    _sstream << "SFilterSelectorDialog";
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDicom
diff --git a/Bundles/LeafIO/ioDicom/src/ioDicom/SSeriesDBMerger.cpp b/Bundles/LeafIO/ioDicom/src/ioDicom/SSeriesDBMerger.cpp
new file mode 100644
index 0000000..e941765
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/src/ioDicom/SSeriesDBMerger.cpp
@@ -0,0 +1,128 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDicom/SSeriesDBMerger.hpp"
+
+#include <fwData/Vector.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace ioDicom
+{
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::ioDicom::SSeriesDBMerger, ::fwData::Vector );
+
+//------------------------------------------------------------------------------
+
+SSeriesDBMerger::SSeriesDBMerger() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+SSeriesDBMerger::~SSeriesDBMerger() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBMerger::info(std::ostream& _sstream )
+{
+    _sstream << "SSeriesDBMerger::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBMerger::starting() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBMerger::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBMerger::configuring() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBMerger::updating() throw(::fwTools::Failed)
+{
+    auto destinationSeriesDB = this->getInOut< ::fwMedData::SeriesDB>("seriesDB");
+    SLM_ASSERT("'seriesDB' key is not found.", destinationSeriesDB);
+
+    ::fwMedDataTools::helper::SeriesDB sDBhelper(destinationSeriesDB);
+    ::fwMedData::SeriesDB::ContainerType container = destinationSeriesDB->getContainer();
+    ::fwData::Vector::csptr selectedSeries         = this->getInput< ::fwData::Vector >("selectedSeries");
+
+    // Save added series in this container in order to display information on the push
+    std::vector< ::fwMedData::Series::sptr > addedSeries;
+
+    // Loop through all selected series
+    for(const ::fwData::Object::sptr& obj: selectedSeries->getContainer())
+    {
+        ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
+
+        if(series && std::find(container.begin(),container.end(), series) == container.end())
+        {
+            sDBhelper.add(series);
+            addedSeries.push_back(series);
+        }
+    }
+    sDBhelper.notify();
+
+    // Display the informations
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.setTitle("Push Series");
+
+    if(selectedSeries->empty())
+    {
+        messageBox.setMessage( "Unable to push series, there is no series selected." );
+    }
+    else if(addedSeries.empty())
+    {
+        messageBox.setMessage( "Unable to push series, the series are already present in the database." );
+    }
+    else
+    {
+        std::stringstream ss;
+        if(addedSeries.size()==1)
+        {
+            ss << addedSeries.size() << " series has been correctly pushed in the database:\n";
+        }
+        else
+        {
+            ss << addedSeries.size() << " series have been correctly pushed in the database:\n";
+        }
+
+        for(const ::fwMedData::Series::sptr& series: addedSeries)
+        {
+            std::string description = series->getDescription();
+            description = (description.empty()) ? "[No description]" : description;
+            ss << "- " << description << std::endl;
+        }
+        messageBox.setMessage( ss.str() );
+    }
+
+    messageBox.show();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDicom
diff --git a/Bundles/LeafIO/ioDicom/src/ioDicom/SSliceIndexDicomEditor.cpp b/Bundles/LeafIO/ioDicom/src/ioDicom/SSliceIndexDicomEditor.cpp
new file mode 100644
index 0000000..a385ff7
--- /dev/null
+++ b/Bundles/LeafIO/ioDicom/src/ioDicom/SSliceIndexDicomEditor.cpp
@@ -0,0 +1,405 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioDicom/SSliceIndexDicomEditor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Array.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwThread/Timer.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <QApplication>
+#include <QComboBox>
+#include <QHBoxLayout>
+#include <QMouseEvent>
+
+#include <boost/asio/placeholders.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/foreach.hpp>
+
+#include <iterator>
+
+namespace ioDicom
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::ioDicom::SSliceIndexDicomEditor, ::fwMedData::DicomSeries );
+
+const ::fwCom::Slots::SlotKeyType SSliceIndexDicomEditor::s_READ_IMAGE_SLOT      = "readImage";
+const ::fwCom::Slots::SlotKeyType SSliceIndexDicomEditor::s_DISPLAY_MESSAGE_SLOT = "displayErrorMessage";
+
+//------------------------------------------------------------------------------
+
+SSliceIndexDicomEditor::SSliceIndexDicomEditor() throw() :
+    m_delay(500)
+{
+    m_slotReadImage = newSlot(s_READ_IMAGE_SLOT, &SSliceIndexDicomEditor::readImage, this);
+    newSlot(s_DISPLAY_MESSAGE_SLOT, &SSliceIndexDicomEditor::displayErrorMessage, this);
+}
+//------------------------------------------------------------------------------
+
+SSliceIndexDicomEditor::~SSliceIndexDicomEditor() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::configuring() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    ::fwGui::IGuiContainerSrv::initialize();
+
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    SLM_ASSERT("The service ::ioDicom::SSliceIndexDicomEditor must have "
+               "a \"config\" element.",config);
+
+    bool success;
+
+    // Reader
+    ::boost::tie(success, m_dicomReaderType) = config->getSafeAttributeValue("dicomReader");
+    SLM_ASSERT("It should be a \"dicomReader\" tag in the ::ioDicom::SSliceIndexDicomEditor "
+               "config element.", success);
+
+    // Reader configuration
+    ::fwRuntime::ConfigurationElement::sptr readerConfig = config->findConfigurationElement("dicomReaderConfig");
+    m_readerConfig                                       =
+        (readerConfig && readerConfig->size() == 1) ? readerConfig->getElements()[0] : nullptr;
+
+    // Delay
+    std::string delayStr;
+    ::boost::tie(success, delayStr) = config->getSafeAttributeValue("delay");
+    if(success)
+    {
+        m_delay = ::boost::lexical_cast< std::size_t >(delayStr);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::starting() throw(::fwTools::Failed)
+{
+    m_delayTimer2 = m_associatedWorker->createTimer();
+
+    ::fwGui::IGuiContainerSrv::create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+    QHBoxLayout* layout      = new QHBoxLayout();
+    container->setLayout(layout);
+
+    ::fwMedData::DicomSeries::csptr dicomSeries = this->getInput< ::fwMedData::DicomSeries >("series");
+    SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+    m_numberOfSlices = dicomSeries->getNumberOfInstances();
+
+    // Slider
+    m_sliceIndexSlider = new QSlider(Qt::Horizontal);
+    layout->addWidget(m_sliceIndexSlider,1);
+    m_sliceIndexSlider->setRange(0, static_cast<int>(m_numberOfSlices-1));
+    m_sliceIndexSlider->setValue(static_cast<int>(m_numberOfSlices/2));
+
+    // Line Edit
+    m_sliceIndexLineEdit = new QLineEdit();
+    layout->addWidget(m_sliceIndexLineEdit,0);
+    m_sliceIndexLineEdit->setReadOnly(true);
+    m_sliceIndexLineEdit->setMaximumWidth(80);
+
+    std::stringstream ss;
+    ss << m_sliceIndexSlider->value() << " / " << (m_numberOfSlices-1);
+    m_sliceIndexLineEdit->setText(std::string(ss.str()).c_str());
+
+
+    // Connect the signals
+    QObject::connect(m_sliceIndexSlider, SIGNAL(valueChanged(int)), this, SLOT(changeSliceIndex(int)));
+
+    // Create temporary SeriesDB
+    m_tempSeriesDB = ::fwMedData::SeriesDB::New();
+
+    // Create reader
+    ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
+
+
+    ::io::IReader::sptr dicomReader;
+    dicomReader = ::io::IReader::dynamicCast(srvFactory->create(m_dicomReaderType));
+    SLM_ASSERT("Unable to create a reader of type: \"" + m_dicomReaderType + "\" in "
+               "::ioDicom::SSliceIndexDicomEditor.", dicomReader);
+    ::fwServices::OSR::registerService(m_tempSeriesDB, dicomReader);
+
+    if(m_readerConfig)
+    {
+        dicomReader->setConfiguration(m_readerConfig);
+    }
+
+    dicomReader->configure();
+    dicomReader->start();
+
+    m_dicomReader = dicomReader;
+
+    // Image Indecies
+    m_axialIndex    = ::fwData::Integer::New(0);
+    m_frontalIndex  = ::fwData::Integer::New(0);
+    m_sagittalIndex = ::fwData::Integer::New(0);
+
+    // Load a slice
+    ::boost::chrono::milliseconds duration = ::boost::chrono::milliseconds(m_delay);
+    m_delayTimer2->setFunction(  [ = ]()
+        {
+            this->triggerNewSlice();
+        }  );
+    m_delayTimer2->setDuration(duration);
+    m_delayTimer2->setOneShot(true);
+
+    this->triggerNewSlice();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    // Stop dicom reader
+    if(!m_dicomReader.expired())
+    {
+        m_dicomReader.lock()->stop();
+        ::fwServices::OSR::unregisterService(m_dicomReader.lock());
+    }
+
+    // Disconnect the signals
+    QObject::disconnect(m_sliceIndexSlider, SIGNAL(valueChanged(int)), this, SLOT(changeSliceIndex(int)));
+
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::info(std::ostream& _sstream )
+{
+    _sstream << "SSliceIndexDicomEditor::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::changeSliceIndex(int value)
+{
+    // Update text
+    std::stringstream ss;
+    ss << m_sliceIndexSlider->value() << " / " << (m_numberOfSlices-1);
+    m_sliceIndexLineEdit->setText(std::string(ss.str()).c_str());
+
+    // Get the new slice if there is no change for m_delay milliseconds
+    m_delayTimer2->start();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::triggerNewSlice()
+{
+    // DicomSeries
+    ::fwMedData::DicomSeries::csptr dicomSeries = this->getInput< ::fwMedData::DicomSeries >("series");
+    SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+
+    // Compute slice index
+    size_t selectedSliceIndex = static_cast<size_t>(m_sliceIndexSlider->value()) +
+                                dicomSeries->getFirstInstanceNumber();
+    OSLM_TRACE("triggered new slice : " << selectedSliceIndex);
+
+    SLM_ERROR_IF("There is no instance available for selected slice index.",
+                 !dicomSeries->isInstanceAvailable(selectedSliceIndex));
+
+    if(dicomSeries->isInstanceAvailable(selectedSliceIndex))
+    {
+        m_slotReadImage->asyncRun(selectedSliceIndex);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::readImage(std::size_t selectedSliceIndex)
+{
+    // DicomSeries
+    ::fwMedData::DicomSeries::csptr dicomSeries = this->getInput< ::fwMedData::DicomSeries >("series");
+    SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+
+    auto isModalitySupported = [](const ::fwMedData::Series::csptr& series )
+                               {
+                                   return series->getModality() == "CT" ||
+                                          series->getModality() == "MR" ||
+                                          series->getModality() == "XA";
+                               };
+
+    if( !isModalitySupported(dicomSeries) )
+    {
+        return;
+    }
+
+    // Clear temporary seriesDB
+    ::fwMedDataTools::helper::SeriesDB sDBTempohelper(m_tempSeriesDB);
+    sDBTempohelper.clear();
+
+    // Creates unique temporary folder, no need to check if exists before (see ::fwTools::System::getTemporaryFolder)
+    ::boost::filesystem::path path    = ::fwTools::System::getTemporaryFolder("dicom");
+    ::boost::filesystem::path tmpPath = path / "tmp";
+
+    SLM_INFO("Create " + tmpPath.string());
+    ::boost::filesystem::create_directories(tmpPath);
+
+
+    SLM_ASSERT("Dicom data shall be available before reading them.",
+               dicomSeries->getDicomAvailability() != ::fwMedData::DicomSeries::NONE
+               || dicomSeries->isInstanceAvailable(selectedSliceIndex));
+
+    if(dicomSeries->getDicomAvailability() != ::fwMedData::DicomSeries::BINARIES )
+    {
+        ::fwMedData::DicomSeries::DicomPathContainerType paths = dicomSeries->getLocalDicomPaths();
+        ::boost::filesystem::path& src                         = paths[selectedSliceIndex];
+
+        const ::boost::filesystem::path& dest = tmpPath / src.filename();
+
+        ::boost::system::error_code err;
+        ::boost::filesystem::create_hard_link(src, dest, err);
+
+        // If the hard-link fails (different mount volumes for instance) then copy the file
+        if (err.value() != 0)
+        {
+            SLM_INFO("Copying " + src.string() + " to " + dest.string());
+
+            // Use stream instead of boost::copy_file (Unix c++11 issue)
+            ::boost::filesystem::ifstream inStream(src, std::ios::binary);
+            OSLM_ERROR_IF("Unable to read file :" << src.string(), !inStream.good());
+            ::boost::filesystem::ofstream outStream(dest, std::ios::binary);
+            OSLM_ERROR_IF("Unable to write file :" << dest.string(), !outStream.good());
+
+            outStream << inStream.rdbuf();
+
+            inStream.close();
+            outStream.close();
+
+            ::boost::system::error_code errPerm;
+            ::boost::filesystem::permissions(dest, ::boost::filesystem::owner_all, errPerm);
+            SLM_ERROR_IF("set permission error : " + errPerm.message(), errPerm.value());
+        }
+    }
+    else if(dicomSeries->getDicomAvailability() == ::fwMedData::DicomSeries::BINARIES)
+    {
+
+        const ::fwMedData::DicomSeries::DicomBinaryContainerType& binaries = dicomSeries->getDicomBinaries();
+        ::fwMedData::DicomSeries::DicomBinaryContainerType::const_iterator binary = binaries.begin();
+        std::advance(binary, selectedSliceIndex);
+
+        ::fwData::Array::sptr array = binary->second;
+        ::fwDataTools::helper::Array arrayHelper(array);
+        char* buffer = static_cast<char*>(arrayHelper.getBuffer());
+        size_t size  = array->getSizeInBytes();
+
+        const ::boost::filesystem::path dest = tmpPath / binary->first;
+        ::boost::filesystem::ofstream fs(dest, std::ios::binary|std::ios::trunc);
+        FW_RAISE_IF("Can't open '" << tmpPath << "' for write.", !fs.good());
+
+        fs.write(buffer, static_cast<long>(size));
+        fs.close();
+    }
+
+    // Read image
+    m_dicomReader.lock()->setFolder(tmpPath);
+    if(!m_dicomReader.expired())
+    {
+        m_dicomReader.lock()->update();
+
+        if(m_dicomReader.expired() || m_dicomReader.lock()->isStopped())
+        {
+            return;
+        }
+    }
+    else
+    {
+        return;
+    }
+
+    //Copy image
+    ::fwMedData::ImageSeries::sptr imageSeries;
+
+    if(m_tempSeriesDB->getContainer().size() > 0)
+    {
+        auto series = *(m_tempSeriesDB->getContainer().begin());
+        if( isModalitySupported(series) )
+        {
+            imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+        }
+    }
+
+    if(imageSeries)
+    {
+        ::fwData::Image::sptr newImage    = imageSeries->getImage();
+        ::fwData::Image::SizeType newSize = newImage->getSize();
+
+        newImage->setField(::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, m_axialIndex);
+        m_frontalIndex->setValue(static_cast< int >(newSize[0]/2));
+        newImage->setField(::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, m_frontalIndex);
+        m_sagittalIndex->setValue(static_cast< int >(newSize[1]/2));
+        newImage->setField(::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, m_sagittalIndex);
+
+        this->setOutput("image", newImage);
+    }
+
+    ::boost::system::error_code ec;
+    ::boost::filesystem::remove_all(path, ec);
+    SLM_ERROR_IF("remove_all error for path " + path.string() + ": " + ec.message(), ec.value());
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomEditor::displayErrorMessage(const std::string& message) const
+{
+    SLM_WARN("Error: " + message);
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setTitle("Error");
+    messageBox.setMessage( message );
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::CRITICAL);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.show();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioDicom
diff --git a/Bundles/LeafIO/ioGdcm/CMakeLists.txt b/Bundles/LeafIO/ioGdcm/CMakeLists.txt
new file mode 100644
index 0000000..430c999
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/CMakeLists.txt
@@ -0,0 +1,16 @@
+fwLoadProperties()
+
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
+fwInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/LeafIO/ioGdcm/Properties.cmake b/Bundles/LeafIO/ioGdcm/Properties.cmake
new file mode 100644
index 0000000..247c471
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/Properties.cmake
@@ -0,0 +1,25 @@
+
+set( NAME ioGdcm )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwTools
+    fwRuntime
+    fwMedData
+    fwDataIO
+    fwGdcmIO
+    fwGui
+    fwGuiQt
+    fwLog
+    fwJobs
+    fwCom
+    fwServices
+    io
+    )
+set( REQUIREMENTS
+    dataReg
+    ioDicom
+    servicesReg
+    )
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/Plugin.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/Plugin.hpp
new file mode 100644
index 0000000..d79ed8c
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/Plugin.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_PLUGIN_HPP__
+#define __IOGDCM_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+namespace ioGdcm
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    ~Plugin() throw();
+
+    // Overrides
+    void start() throw(::fwRuntime::RuntimeException);
+
+    // Overrides
+    void stop() throw();
+
+};
+
+} // namespace ioGdcm
+
+#endif //__IOGDCM_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesAnonymizer.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesAnonymizer.hpp
new file mode 100644
index 0000000..aef65ce
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesAnonymizer.hpp
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_SDICOMSERIESANONYMIZER_HPP__
+#define __IOGDCM_SDICOMSERIESANONYMIZER_HPP__
+
+#include "ioGdcm/config.hpp"
+
+#include <fwServices/IController.hpp>
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace ioGdcm
+{
+
+/**
+ * @brief   Service to anonymize a DicomSeries.
+ *
+ * @section Signals Signals
+ * - \b jobCreated( SPTR(::fwJobs::IJob) ) : Emitted when a job is created.
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioGdcm::SDicomSeriesAnonymizer">
+            <in key="seriesDB" uid="..." />
+            <inout key="selectedSeries" uid="..." />
+       </service>
+   @endcode
+ * @subsection In-Out In-Out:
+ * - \b seriesDB [::fwMedData::SeriesDB]: SeriesDB where the dicom series comes from.
+ * - \b selectedSeries [::fwData::Vector]: List of DICOM series to be anonymized.
+ */
+class IOGDCM_CLASS_API SDicomSeriesAnonymizer : public ::fwServices::IController
+{
+
+public:
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignal;
+
+    fwCoreServiceClassDefinitionsMacro ( (SDicomSeriesAnonymizer)( ::fwServices::IController) );
+
+    /// Constructor
+    IOGDCM_API SDicomSeriesAnonymizer() throw();
+
+    /// Destructor
+    IOGDCM_API virtual ~SDicomSeriesAnonymizer() throw();
+
+protected:
+
+    /// Do nothing.
+    IOGDCM_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void info(std::ostream& _sstream );
+
+    /// Override
+    IOGDCM_API void anonymize();
+
+    /// SeriesDB of the Series
+    SPTR(::fwMedData::SeriesDB) m_seriesDB;
+
+    /// Signal emitted when a job is created
+    SPTR(JobCreatedSignal) m_sigJobCreated;
+
+    /// Cancel information for jobs
+    bool m_cancelled;
+};
+
+} // namespace ioGdcm
+
+#endif //__IOGDCM_SDICOMSERIESANONYMIZER_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesConverter.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesConverter.hpp
new file mode 100644
index 0000000..8a0acf5
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesConverter.hpp
@@ -0,0 +1,82 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_SDICOMSERIESCONVERTER_HPP__
+#define __IOGDCM_SDICOMSERIESCONVERTER_HPP__
+
+#include "ioGdcm/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwGui/IActionSrv.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace ioGdcm
+{
+
+/**
+ * @brief   This service is used to read and push DicomSeries to a SeriesDB
+ */
+class IOGDCM_CLASS_API SDicomSeriesConverter : public ::fwGui::IActionSrv
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDicomSeriesConverter)( ::fwGui::IActionSrv ) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignal;
+
+    /**
+     * @brief Constructor
+     */
+    IOGDCM_API SDicomSeriesConverter() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOGDCM_API virtual ~SDicomSeriesConverter() throw();
+
+protected:
+
+    /**
+     * @brief Configuring method. This method is used to configure the service.
+     *
+     * XML configuration sample:
+       @code{.xml}
+       <service uid="actionConvertSeries" impl="::ioGdcm::SDicomSeriesConverter">
+         <config destinationSeriesDBID="mySeriesDB" />
+       </service>
+       @endcode
+     */
+    IOGDCM_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void info(std::ostream& _sstream );
+
+protected:
+
+    /// Destination SeriesDB
+    ::fwMedData::SeriesDB::sptr m_destinationSeriesDB;
+
+    /// Signal emitted when a job is created
+    SPTR(JobCreatedSignal) m_sigJobCreated;
+};
+
+} // namespace ioGdcm
+
+#endif // __IOGDCM_SDICOMSERIESCONVERTER_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesDBReader.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesDBReader.hpp
new file mode 100644
index 0000000..9861a10
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesDBReader.hpp
@@ -0,0 +1,144 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_SDICOMSERIESDBREADER_HPP__
+#define __IOGDCM_SDICOMSERIESDBREADER_HPP__
+
+#include "ioGdcm/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace fwMedData
+{
+class SeriesDB;
+class Patient;
+}
+
+namespace ioGdcm
+{
+
+/**
+ * @brief Read DicomSeries from DICOM with gdcm reader
+ **/
+class IOGDCM_CLASS_API SDicomSeriesDBReader : public ::io::IReader
+{
+
+public:
+    typedef std::string ExtensionType;
+    typedef std::vector< ExtensionType > ExtensionsType;
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignal;
+
+    typedef ::boost::filesystem::path PathType;
+    typedef ::fwCom::Signal< void ( bool, std::vector< PathType > ) > FilesAddedSignal;
+
+    fwCoreServiceClassDefinitionsMacro ( (SDicomSeriesDBReader)( ::io::IReader) );
+    /**
+     * @brief   constructor
+     *
+     */
+    IOGDCM_API SDicomSeriesDBReader() throw();
+
+    /**
+     * @brief   destructor
+     */
+    IOGDCM_API virtual ~SDicomSeriesDBReader() throw();
+
+protected:
+
+    /// Enum for DicomDir support mode
+    enum DicomDirSupport
+    {
+        ALWAYS = 0,     /*! Always use the DicomDir if present */
+        NEVER,          /*! Never use the DicomDir */
+        USER_SELECTION  /*! Let the user decide whether using the DicomDir or not */
+    };
+
+    /// Enum for reading mode
+    enum ReaderMode
+    {
+        DIRECT = 0,         /*! Read directly from the source folder */
+        COPY,               /*! Read after a copy of the source files */
+        USER_SELECTION_MODE /*! Let the user decide whether read directly or copy before reading */
+    };
+
+
+    /// Override
+    IOGDCM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void info(std::ostream& _sstream );
+
+    /// Override
+    IOGDCM_API virtual std::string getSelectorDialogTitle();
+
+    /**
+     * The reader can be configured as a regular reader.
+     * You can also specify how dicomdir support is handled
+     * @code{.xml}
+       <config>
+       <dicomdirSupport>always|never|user_selection</dicomdirSupport> <!-- optional, default set to user_selection -->
+       <mode>direct|copy|user_selection</mode> <!-- optional, default set to user_selection -->
+       </config>
+       @endcode
+     */
+    IOGDCM_API virtual void configuring() throw (fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void configureWithIHM();
+
+    /// Return path type managed by the service, here FOLDER
+    IOGDCM_API ::io::IOPathType getIOPathType() const;
+
+private:
+
+    /**
+     * @brief Create a seriesDB and fill it using the data of the DICOM files
+     * @param[in] checkIsDicom If set to true, file must be checked for DICOM information
+     * @param[in] dicomDir DICOM folder
+     */
+    SPTR(::fwMedData::SeriesDB) createSeriesDB(bool checkIsDicom, const ::boost::filesystem::path& dicomDir);
+
+    /// Signal emitted when a job is created
+    SPTR(JobCreatedSignal) m_sigJobCreated;
+
+    /// Signal emitted when files have been added in the read DicomSeries
+    SPTR(FilesAddedSignal) m_sigFilesAdded;
+
+    /// Cancel information for jobs
+    bool m_cancelled;
+
+    /// Show log dialog
+    bool m_showLogDialog;
+
+    /// Specify how to use dicomdir files
+    DicomDirSupport m_dicomDirSupport;
+
+    /// Specify how to handle reading
+    ReaderMode m_readerMode;
+
+
+};
+
+} // namespace ioGdcm
+
+#endif //__IOGDCM_SDICOMSERIESDBREADER_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesWriter.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesWriter.hpp
new file mode 100644
index 0000000..6e5f2b2
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SDicomSeriesWriter.hpp
@@ -0,0 +1,84 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_SDICOMSERIESWRITER_HPP__
+#define __IOGDCM_SDICOMSERIESWRITER_HPP__
+
+#include "ioGdcm/config.hpp"
+
+#include <io/IWriter.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+
+namespace ioGdcm
+{
+
+/**
+ * @brief Services to write an DicomSeries in DICOM format.
+ */
+class IOGDCM_CLASS_API SDicomSeriesWriter : public ::io::IWriter
+{
+
+public:
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignal;
+
+    fwCoreServiceClassDefinitionsMacro ( (SDicomSeriesWriter)( ::io::IWriter) );
+
+    /**
+     * @brief   constructor
+     */
+    IOGDCM_API SDicomSeriesWriter() throw();
+
+    /**
+     * @brief   destructor
+     */
+    IOGDCM_API virtual ~SDicomSeriesWriter() throw();
+
+    /// Propose select a directory where to save the DICOM files.
+    IOGDCM_API virtual void configureWithIHM();
+
+
+protected:
+
+    /// Does nothing
+    IOGDCM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Does nothing
+    IOGDCM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Write the DicomSeries in DICOM format.
+    IOGDCM_API void updating() throw(::fwTools::Failed);
+
+    /// Return path type managed by the service, here FOLDER
+    IOGDCM_API ::io::IOPathType getIOPathType() const;
+
+private:
+    /// Save the selected Dicom series
+    void saveDicomSeries( const ::boost::filesystem::path folder, SPTR(::fwMedData::DicomSeries) series ) const;
+
+    /// Signal emitted when a job is created
+    SPTR(JobCreatedSignal) m_sigJobCreated;
+
+    /// Cancel information for jobs
+    bool m_cancelled;
+};
+
+} // namespace ioGdcm
+
+#endif //__IOGDCM_SDICOMSERIESWRITER_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/SSeriesDBReader.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SSeriesDBReader.hpp
new file mode 100644
index 0000000..bfc0d42
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SSeriesDBReader.hpp
@@ -0,0 +1,147 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_SSERIESDBREADER_HPP__
+#define __IOGDCM_SSERIESDBREADER_HPP__
+
+#include "ioGdcm/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <io/IReader.hpp>
+#include <string>
+#include <vector>
+
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace ioGdcm
+{
+/**
+ * @brief Read  ImageSeries from DICOM with gdcm reader
+ **/
+class IOGDCM_CLASS_API SSeriesDBReader : public ::io::IReader
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBReader)( ::io::IReader) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignal;
+
+    /**
+     * @brief   constructor
+     *
+     */
+    IOGDCM_API SSeriesDBReader() throw();
+
+    /**
+     * @brief   destructor
+     */
+    IOGDCM_API virtual ~SSeriesDBReader() throw();
+
+protected:
+
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+    typedef std::vector< std::string > SupportedSOPClassContainerType;
+
+    enum DicomDirSupport
+    {
+        ALWAYS = 0,
+        NEVER,
+        USER_SELECTION
+    };
+
+    /**
+     * The reader can be configured as a regular reader.
+     * You can select the SOP Classes that can be read using this reader.
+     * It is also possible to define a filter that must be applied prior to the reading process.
+     * @code{.xml}
+       <config filterType="::fwDicomIOFilter::custom::NoFilter" />
+       <enableBufferRotation>yes|no</enableBufferRotation> <!-- optional, default set to yes -->
+       <showLogDialog>yes|no</showLogDialog> <!-- optional, default set to yes -->
+       <dicomdirSupport>always|never|user_selection</dicomdirSupport> <!-- optional, default set to user_selection -->
+       <SOPClassSelection>
+           <SOPClass name="CT Image Storage" uid="1.2.840.10008.5.1.4.1.1.2" />
+       </SOPClassSelection>
+       @endcode
+     * On the other hand, you can specify a service configuration using the FilterSelectorSrvConfig element:
+     * @code{.xml}
+        <extension implements="::fwServices::registry::ServiceConfig">
+            <id>FilterSelectorConfig</id>
+            <service>::ioDicom::SFilterSelectorDialog</service>
+            <desc>"Open" action's filter selector config</desc>
+            <config>
+                <selection mode="include" />
+                <addSelection filter="::fwDicomIOFilter::custom::DefaultDicomFilter" />
+                <addSelection filter="::fwDicomIOFilter::custom::NoFilter" />
+            </config>
+        </extension>
+       @endcode
+     */
+    IOGDCM_API virtual void configuring() throw (fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOGDCM_API void info(std::ostream& _sstream );
+
+    /// Override
+    IOGDCM_API virtual std::string getSelectorDialogTitle();
+
+    /// Override
+    IOGDCM_API virtual void configureWithIHM();
+
+    /// Return managed file type, here FOLDER
+    IOGDCM_API ::io::IOPathType getIOPathType() const;
+
+private:
+
+    /**
+     * @brief Create a seriesDB and fill it using the data of the DICOM files
+     * @param[in] dicomDir DICOM folder
+     */
+    SPTR(::fwMedData::SeriesDB) createSeriesDB(const ::boost::filesystem::path & dicomDir);
+
+    /// Selector config used to select a filter to apply
+    std::string m_filterSelectorSrvConfig;
+
+    /// Selected filter key
+    std::string m_filterType;
+
+    /// Supported SOP Class selection
+    SupportedSOPClassContainerType m_supportedSOPClassSelection;
+
+    /// Signal emitted when a job is created
+    SPTR(JobCreatedSignal) m_sigJobCreated;
+
+    /// Show log dialog
+    bool m_showLogDialog;
+
+    /// Enable buffer rotation
+    bool m_enableBufferRotation;
+
+    /// Specify how to use dicomdir files
+    DicomDirSupport m_dicomDirSupport;
+};
+
+} // namespace ioGdcm
+
+#endif //__IOGDCM_SSERIESDBREADER_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/SSeriesDBWriter.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SSeriesDBWriter.hpp
new file mode 100644
index 0000000..d2049c2
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/SSeriesDBWriter.hpp
@@ -0,0 +1,82 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_SSERIESDBWRITER_HPP__
+#define __IOGDCM_SSERIESDBWRITER_HPP__
+
+#include "ioGdcm/config.hpp"
+
+#include <fwGdcmIO/writer/Series.hpp>
+#include <io/IWriter.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace ioGdcm
+{
+
+/**
+ * @brief Services to write several series in DICOM format.
+ */
+class IOGDCM_CLASS_API SSeriesDBWriter : public ::io::IWriter
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBWriter)( ::io::IWriter) );
+
+    /**
+     * @brief Constructor
+     */
+    IOGDCM_API SSeriesDBWriter() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOGDCM_API virtual ~SSeriesDBWriter() throw();
+
+    /// Propose a directory selection where to save the DICOM files.
+    IOGDCM_API virtual void configureWithIHM();
+
+protected:
+
+    /// Does nothing
+    IOGDCM_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Does nothing
+    IOGDCM_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Write the ImageSeries in DICOM format.
+    IOGDCM_API void updating() throw(::fwTools::Failed);
+
+    /// Return path type managed by the service, here FOLDER
+    IOGDCM_API ::io::IOPathType getIOPathType() const;
+
+private:
+
+    /**
+     * @brief Write a SeriesDB to a folder in DICOM format
+     * @param[in] folder DICOM folder
+     * @param[in] seriesDB SeriesDB that must be writen
+     */
+    void saveSeriesDB( const ::boost::filesystem::path folder, SPTR(::fwMedData::SeriesDB) seriesDB );
+
+    /// Select Fiducial Export Mode using a dialog
+    bool selectFiducialsExportMode();
+
+    /// Fiducial Export Mode
+    ::fwGdcmIO::writer::Series::FiducialsExportMode m_fiducialsExportMode;
+
+};
+
+} // namespace ioGdcm
+
+#endif //__IOGDCM_SSERIESDBWRITER_HPP__
diff --git a/Bundles/LeafIO/ioGdcm/include/ioGdcm/namespace.hpp b/Bundles/LeafIO/ioGdcm/include/ioGdcm/namespace.hpp
new file mode 100644
index 0000000..52b56fd
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/include/ioGdcm/namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOGDCM_NAMESPACE_HPP__
+#define __IOGDCM_NAMESPACE_HPP__
+
+/**
+ * @brief ioGdcm contains services use to deal with DICOM using the GDCM library.
+ */
+namespace ioGdcm
+{
+}
+#endif /* __IOGDCM_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafIO/ioGdcm/rc/plugin.xml b/Bundles/LeafIO/ioGdcm/rc/plugin.xml
new file mode 100644
index 0000000..03a6104
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/rc/plugin.xml
@@ -0,0 +1,51 @@
+<plugin id="ioGdcm" class="ioGdcm::Plugin"  version="@DASH_VERSION@" >
+    <library name="ioGdcm" />
+
+    <requirement id="dataReg"/>
+    <requirement id="io" />
+    <requirement id="ioDicom" />
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::ioGdcm::SDicomSeriesAnonymizer</service>
+        <object>::fwData::Object</object>
+        <desc>Dicom Series Anonymizer</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwGui::IActionSrv</type>
+        <service>::ioGdcm::SDicomSeriesConverter</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Read and push DicomSeries to a SeriesDB</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IReader</type>
+        <service>::ioGdcm::SDicomSeriesDBReader</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Dicom Series DB Reader (GDCM)</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IWriter</type>
+        <service>::ioGdcm::SDicomSeriesWriter</service>
+        <object>::fwMedData::DicomSeries</object>
+        <desc>Dicom Writer (Copy files)</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IReader</type>
+        <service>::ioGdcm::SSeriesDBReader</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Dicom Reader (GDCM)</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::io::IWriter</type>
+        <service>::ioGdcm::SSeriesDBWriter</service>
+        <object>::fwData::Vector</object>
+        <desc>Dicom Writer (GDCM)</desc>
+    </extension>
+
+
+</plugin>
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/Plugin.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/Plugin.cpp
new file mode 100644
index 0000000..8eb54ab
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/Plugin.cpp
@@ -0,0 +1,30 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioGdcm/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/macros.hpp>
+
+namespace ioGdcm
+{
+
+using namespace ::fwRuntime::utils;
+static GenericExecutableFactoryRegistrar<Plugin> registrar("ioGdcm::Plugin");
+
+Plugin::~Plugin() throw()
+{
+}
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+void Plugin::stop() throw()
+{
+}
+
+} // namespace ioGdcm
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesAnonymizer.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesAnonymizer.cpp
new file mode 100644
index 0000000..8b6f516
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesAnonymizer.cpp
@@ -0,0 +1,168 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#include "ioGdcm/SDicomSeriesAnonymizer.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Vector.hpp>
+
+#include <fwGdcmIO/helper/DicomSeriesAnonymizer.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/IJob.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <vector>
+
+namespace ioGdcm
+{
+
+fwServicesRegisterMacro( ::fwServices::IController, ::ioGdcm::SDicomSeriesAnonymizer, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesAnonymizer::SDicomSeriesAnonymizer() throw() :
+    m_cancelled(false)
+{
+    m_sigJobCreated = newSignal<JobCreatedSignal>(JOB_CREATED_SIGNAL);
+}
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesAnonymizer::~SDicomSeriesAnonymizer() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesAnonymizer::configuring() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesAnonymizer::starting() throw(::fwTools::Failed)
+{
+    m_seriesDB = this->getInOut< ::fwMedData::SeriesDB>("seriesDB");
+    SLM_ASSERT("The SeriesDB key doesn't exist.", m_seriesDB);
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesAnonymizer::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesAnonymizer::updating() throw(::fwTools::Failed)
+{
+    ::fwData::Vector::sptr vector = this->getInOut< ::fwData::Vector >("selectedSeries");
+
+    ::fwGui::dialog::MessageDialog dialog;
+    dialog.setTitle("Series anonymization");
+
+    // If the selection is not empty
+    if(!vector->empty())
+    {
+        dialog.setMessage( "Are you sure you want to anonymize the selected series ?" );
+        dialog.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        dialog.addButton(::fwGui::dialog::IMessageDialog::YES);
+        dialog.addButton(::fwGui::dialog::IMessageDialog::CANCEL);
+        ::fwGui::dialog::IMessageDialog::Buttons answer = dialog.show();
+
+        if ( answer == ::fwGui::dialog::IMessageDialog::YES )
+        {
+            ::fwGui::Cursor cursor;
+            cursor.setCursor(::fwGui::ICursor::BUSY);
+            this->anonymize();
+            cursor.setDefaultCursor();
+        }
+    }
+    // If the selection is empty
+    else
+    {
+        dialog.setMessage( "Please select which series you want to anonymize." );
+        dialog.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+        dialog.addButton(::fwGui::dialog::IMessageDialog::OK);
+        dialog.show();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesAnonymizer::info(std::ostream& _sstream )
+{
+    _sstream << "SDicomSeriesAnonymizer::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesAnonymizer::anonymize()
+{
+    ::fwData::Vector::sptr vector = this->getInOut< ::fwData::Vector >("selectedSeries");
+    ::fwMedDataTools::helper::SeriesDB sDBhelper(m_seriesDB);
+
+    ::fwGdcmIO::helper::DicomSeriesAnonymizer::sptr anonymizer =
+        ::fwGdcmIO::helper::DicomSeriesAnonymizer::New();
+    m_sigJobCreated->emit(anonymizer->getJob());
+
+    std::vector< ::fwMedData::DicomSeries::sptr > anonymizedDicomSeriesVector;
+
+    for(::fwData::Vector::ContainerType::value_type value: vector->getContainer())
+    {
+        ::fwMedData::DicomSeries::sptr dicomSeries           = ::fwMedData::DicomSeries::dynamicCast(value);
+        ::fwMedData::DicomSeries::sptr anonymizedDicomSeries = ::fwMedData::DicomSeries::New();
+        anonymizer->anonymize(dicomSeries, anonymizedDicomSeries);
+        anonymizedDicomSeriesVector.push_back(anonymizedDicomSeries);
+
+        m_cancelled = anonymizer->getJob()->cancelRequested();
+        if(m_cancelled)
+        {
+            break;
+        }
+    }
+
+    if(!m_cancelled)
+    {
+        for(::fwData::Vector::ContainerType::value_type value: vector->getContainer())
+        {
+            ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(value);
+            sDBhelper.remove(dicomSeries);
+        }
+
+        for(auto anonymizedDicomSeries: anonymizedDicomSeriesVector)
+        {
+            sDBhelper.add(anonymizedDicomSeries);
+        }
+    }
+
+    // Notify SeriesDB
+    sDBhelper.notify();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioGdcm
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesConverter.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesConverter.cpp
new file mode 100644
index 0000000..7d4dd9e
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesConverter.cpp
@@ -0,0 +1,147 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioGdcm/SDicomSeriesConverter.hpp"
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwGui/dialog/LoggerDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace ioGdcm
+{
+
+fwServicesRegisterMacro(::fwGui::IActionSrv, ::ioGdcm::SDicomSeriesConverter, ::fwMedData::SeriesDB);
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesConverter::SDicomSeriesConverter() throw()
+{
+    m_sigJobCreated = newSignal<JobCreatedSignal>( JOB_CREATED_SIGNAL );
+}
+//------------------------------------------------------------------------------
+
+SDicomSeriesConverter::~SDicomSeriesConverter() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesConverter::info(std::ostream& _sstream )
+{
+    _sstream << "SDicomSeriesConverter::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesConverter::starting() throw(::fwTools::Failed)
+{
+    // Get Destination SeriesDB
+    m_destinationSeriesDB = this->getInOut< ::fwMedData::SeriesDB>("target");
+    SLM_ASSERT("The 'target' key doesn't exist.", m_destinationSeriesDB);
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesConverter::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesConverter::configuring() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesConverter::updating() throw(::fwTools::Failed)
+{
+    ::fwMedData::SeriesDB::csptr dicomSeriesDB = this->getInput< ::fwMedData::SeriesDB >("source");
+    ::fwMedData::SeriesDB::sptr dummy          = ::fwMedData::SeriesDB::New();
+
+    if(dicomSeriesDB->empty())
+    {
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+        messageBox.setTitle("Read DICOM series");
+        messageBox.setMessage( "There is no DICOM series that can be read." );
+        messageBox.show();
+    }
+    else
+    {
+        ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+        reader->setObject(dummy);
+        auto job = reader->getJob();
+        m_sigJobCreated->emit(job);
+
+        try
+        {
+            reader->readFromDicomSeriesDB(dicomSeriesDB, this->getSptr());
+
+            ::fwLog::Logger::sptr logger = reader->getLogger();
+            logger->sort();
+
+            std::stringstream ss;
+            ss << "The reading process is over : <b>" << dummy->size() << " series</b> "
+               << ((dummy->size() > 1) ? "have" : "has") << " been found. "
+               << "<br>Please verify the log report to be informed of the potential errors.";
+
+            bool result = false;
+            if(!job->cancelRequested())
+            {
+                result = ::fwGui::dialog::LoggerDialog::showLoggerDialog("Reading process over", ss.str(), logger);
+            }
+
+            // If the user cancel the reading process we delete the loaded series
+            if(!result || job->cancelRequested())
+            {
+                ::fwMedDataTools::helper::SeriesDB sDBhelper(dummy);
+                sDBhelper.clear();
+            }
+            else
+            {
+                ::fwMedDataTools::helper::SeriesDB sDBhelper(m_destinationSeriesDB);
+                sDBhelper.merge(dummy);
+                sDBhelper.notify();
+            }
+        }
+        catch (const std::exception& e)
+        {
+            std::stringstream ss;
+            ss << "Warning during loading : " << e.what();
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+        catch( ... )
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioGdcm
+
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesDBReader.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesDBReader.cpp
new file mode 100644
index 0000000..e5e6dd1
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesDBReader.cpp
@@ -0,0 +1,406 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioGdcm/SDicomSeriesDBReader.hpp"
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/LoggerDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/dialog/MessageDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <io/IReader.hpp>
+
+#include <QPointer>
+#include <QPushButton>
+
+#include <boost/bind.hpp>
+#include <boost/foreach.hpp>
+
+#include <string>
+#include <vector>
+
+
+namespace ioGdcm
+{
+
+fwServicesRegisterMacro( ::io::IReader, ::ioGdcm::SDicomSeriesDBReader, ::fwMedData::SeriesDB );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+static const ::fwCom::Signals::SignalKeyType FILES_ADDED_SIGNAL = "filesAdded";
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesDBReader::SDicomSeriesDBReader() throw() :
+    m_sigJobCreated(JobCreatedSignal::New()),
+    m_sigFilesAdded(FilesAddedSignal::New()),
+    m_cancelled(false),
+    m_showLogDialog(true),
+    m_dicomDirSupport(USER_SELECTION),
+    m_readerMode(USER_SELECTION_MODE)
+{
+    ::fwCom::HasSignals::m_signals
+        ( JOB_CREATED_SIGNAL, m_sigJobCreated )
+        ( FILES_ADDED_SIGNAL, m_sigFilesAdded );
+}
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesDBReader::~SDicomSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::configuring() throw (fwTools::Failed)
+{
+    ::io::IReader::configuring();
+
+    // Show log dialog
+    ::fwRuntime::ConfigurationElement::sptr logDialog = m_configuration->findConfigurationElement("showLogDialog");
+    if(logDialog)
+    {
+        std::string logDialogStr = logDialog->getValue();
+        SLM_ASSERT("<showLogDialog> value must be 'yes' or 'no'", logDialogStr == "yes" || logDialogStr == "no");
+        m_showLogDialog = (logDialogStr == "yes");
+    }
+
+    // Enable dicomdir
+    ::fwRuntime::ConfigurationElement::sptr dicomDir = m_configuration->findConfigurationElement("dicomdirSupport");
+    if(dicomDir)
+    {
+        std::string dicomDirStr = dicomDir->getValue();
+        SLM_ASSERT("<dicomdirSupport> value must be 'always' or 'never' or 'user_selection'",
+                   dicomDirStr == "always" || dicomDirStr == "never" || dicomDirStr == "user_selection");
+
+        if(dicomDirStr == "always")
+        {
+            m_dicomDirSupport = ALWAYS;
+        }
+        else if(dicomDirStr == "never")
+        {
+            m_dicomDirSupport = NEVER;
+        }
+        else if(dicomDirStr == "user_selection")
+        {
+            m_dicomDirSupport = USER_SELECTION;
+        }
+    }
+
+    // Reader mode
+    ::fwRuntime::ConfigurationElement::sptr mode = m_configuration->findConfigurationElement("mode");
+    if(mode)
+    {
+        const std::string modeStr = mode->getValue();
+        SLM_ASSERT("<mode> value must be 'direct' or 'copy' or 'user_selection'",
+                   modeStr == "direct" || modeStr == "copy" || modeStr == "user_selection");
+
+        if(modeStr == "direct")
+        {
+            m_readerMode = DIRECT;
+        }
+        else if(modeStr == "copy")
+        {
+            m_readerMode = COPY;
+        }
+        else if(modeStr == "user_selection")
+        {
+            m_readerMode = USER_SELECTION_MODE;
+        }
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle(this->getSelectorDialogTitle());
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( result->getFolder() );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::info(std::ostream& _sstream )
+{
+    _sstream << "SDicomSeriesDBReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+std::string SDicomSeriesDBReader::getSelectorDialogTitle()
+{
+    return "Choose a directory with DICOM images";
+}
+
+//------------------------------------------------------------------------------
+
+
+
+::fwMedData::SeriesDB::sptr SDicomSeriesDBReader::createSeriesDB(bool checkIsDicom,
+                                                                 const ::boost::filesystem::path& dicomDir)
+{
+    SLM_TRACE_FUNC();
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    ::fwMedData::SeriesDB::sptr dummy         = ::fwMedData::SeriesDB::New();
+    reader->setObject(dummy);
+    reader->setFolder(dicomDir);
+
+    auto job = reader->getJob();
+    m_sigJobCreated->emit(job);
+
+    if(m_dicomDirSupport == USER_SELECTION && reader->isDicomDirAvailable())
+    {
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Dicomdir file");
+        messageBox.setMessage( "There is a dicomdir file in the root folder. "
+                               "Would you like to use it for the reading process ?" );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::YES_NO);
+        ::fwGui::dialog::IMessageDialog::Buttons button = messageBox.show();
+
+        reader->setDicomdirActivated(button == ::fwGui::dialog::IMessageDialog::YES);
+    }
+    else if(m_dicomDirSupport == ALWAYS)
+    {
+        reader->setDicomdirActivated(true);
+    }
+    else //m_dicomDirSupport == NEVER
+    {
+        reader->setDicomdirActivated(false);
+    }
+
+    try
+    {
+        reader->readDicomSeries(checkIsDicom);
+
+        // Retrieve logger
+        ::fwLog::Logger::sptr logger = reader->getLogger();
+        logger->sort();
+
+        // Display logger dialog if enabled
+        if(m_showLogDialog && !logger->empty())
+        {
+
+            std::stringstream ss;
+            if(dummy->size() > 1)
+            {
+                ss << "The reading process is over : <b>" << dummy->size() << " series</b> have been found. "
+                    "<br>Please verify the log report to be informed of the potential errors.";
+            }
+            else
+            {
+                ss << "The reading process is over : <b>" << dummy->size() << " series</b> has been found. "
+                    "<br>Please verify the log report to be informed of the potential errors.";
+            }
+
+            bool result = false;
+            if(!reader->getJob()->cancelRequested())
+            {
+                result = ::fwGui::dialog::LoggerDialog::showLoggerDialog("Reading process over", ss.str(), logger);
+            }
+
+            // If the user cancel the reading process we delete the loaded series
+            if(!result || reader->getJob()->cancelRequested())
+            {
+                ::fwMedDataTools::helper::SeriesDB sDBhelper(dummy);
+                sDBhelper.clear();
+            }
+        }
+    }
+    catch (const std::exception& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+
+    m_cancelled = job->cancelRequested();
+
+    return dummy;
+}
+
+//------------------------------------------------------------------------------
+
+bool mustCopyDialog()
+{
+    ::fwGuiQt::dialog::MessageDialog::sptr dialog = ::fwGuiQt::dialog::MessageDialog::New();
+
+    QPointer<QPushButton> copyButton   = new QPushButton("Copy");
+    QPointer<QPushButton> directButton = new QPushButton("Direct read");
+    dialog->addCustomButton(copyButton.data());
+    dialog->addCustomButton(directButton.data());
+
+    const std::string message = "Do you want to copy files before the reading process ?<br />"
+                                "<b>Warning :</b> reading files directly may be slow on external media (DVD, USB key, etc.).";
+    dialog->setMessage(message);
+
+    bool copy = false;
+    QObject::connect(copyButton.data(), &QPushButton::clicked, [dialog, &copy]()
+        {
+            copy = true;
+        });
+    QObject::connect(directButton.data(), &QPushButton::clicked, [dialog, &copy]()
+        {
+            copy = false;
+        });
+
+    dialog->show();
+
+    return copy;
+
+}
+
+//------------------------------------------------------------------------------
+
+bool hasEnoughSpaceToCopy(const std::vector< ::boost::filesystem::path >& files, unsigned int safetyCoefficient = 1)
+{
+    std::size_t size = 0;
+    for(auto file: files)
+    {
+        size += ::boost::filesystem::file_size(file);
+    }
+
+    ::boost::filesystem::path destinationFolder = ::fwTools::System::getTemporaryFolder();
+    auto available = ::boost::filesystem::space(destinationFolder).available;
+
+    OSLM_TRACE("Copying file - Size : " << size << " Available : " << available);
+
+    return (safetyCoefficient * size) < available;
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesDBReader::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    if( this->hasLocationDefined() )
+    {
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+
+        bool mustCopy = (m_readerMode == COPY);
+        if(m_readerMode == USER_SELECTION_MODE)
+        {
+            mustCopy = mustCopyDialog();
+        }
+
+        ::fwMedData::SeriesDB::sptr seriesDB = createSeriesDB(!mustCopy, this->getFolder() );
+
+        if( seriesDB->size() > 0 && !m_cancelled)
+        {
+            // Retrieve dataStruct associated with this service
+            ::fwMedData::SeriesDB::sptr associatedSeriesDB = this->getObject< ::fwMedData::SeriesDB >();
+            SLM_ASSERT("associated SeriesDB not instanced", associatedSeriesDB);
+
+            // Retrieve added files
+            std::vector< ::boost::filesystem::path > files;
+            for(auto series: seriesDB->getContainer())
+            {
+                ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(series);
+                SLM_ASSERT("The reader should retrieve only DicomSeries.", dicomSeries);
+                for(auto entry: dicomSeries->getLocalDicomPaths())
+                {
+                    files.push_back(entry.second);
+                }
+            }
+
+            // If we must copy, check that we have enough space to copy and
+            // to anonymize files
+            if(!mustCopy || hasEnoughSpaceToCopy(files, 2))
+            {
+                // Add series to SeriesDB
+                ::fwMedDataTools::helper::SeriesDB sDBhelper(associatedSeriesDB);
+                ::fwData::mt::ObjectWriteLock lock(associatedSeriesDB);
+                sDBhelper.merge(seriesDB);
+
+                // Notify SeriesDB
+                sDBhelper.notify();
+
+
+                // Notify added files
+                m_sigFilesAdded->asyncEmit(mustCopy,files);
+            }
+            else
+            {
+                ::fwGui::dialog::MessageDialog::showMessageDialog(
+                    "Copy error", "There is not enough space on your main hard drive to copy those files.",
+                    ::fwGui::dialog::IMessageDialog::CRITICAL);
+            }
+
+        }
+
+        cursor.setDefaultCursor();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::io::IOPathType SDicomSeriesDBReader::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+
+} // namespace ioGdcm
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesWriter.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesWriter.cpp
new file mode 100644
index 0000000..d7551bd
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SDicomSeriesWriter.cpp
@@ -0,0 +1,177 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioGdcm/SDicomSeriesWriter.hpp"
+
+#include <io/IWriter.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCore/base.hpp>
+#include <fwData/location/Folder.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwGdcmIO/helper/DicomSeriesWriter.hpp>
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+#include <fwServices/macros.hpp>
+#include <fwTools/ProgressToLogger.hpp>
+
+namespace ioGdcm
+{
+
+fwServicesRegisterMacro( ::io::IWriter, ::ioGdcm::SDicomSeriesWriter, ::fwMedData::DicomSeries );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesWriter::SDicomSeriesWriter() throw() :
+    m_sigJobCreated(JobCreatedSignal::New()),
+    m_cancelled(false)
+{
+    ::fwCom::HasSignals::m_signals
+        ( JOB_CREATED_SIGNAL, m_sigJobCreated );
+}
+
+//------------------------------------------------------------------------------
+
+SDicomSeriesWriter::~SDicomSeriesWriter() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesWriter::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose a directory for DICOM images");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
+    dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( result->getFolder() );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+    else
+    {
+        this->clearLocations();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesWriter::starting() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesWriter::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesWriter::updating() throw(::fwTools::Failed)
+{
+    if( this->hasLocationDefined() )
+    {
+        // Retrieve dataStruct associated with this service
+        ::fwMedData::DicomSeries::sptr series = this->getObject< ::fwMedData::DicomSeries >();
+        const ::boost::filesystem::path& folder = this->getFolder();
+        if(!::boost::filesystem::is_empty(folder))
+        {
+            ::fwGui::dialog::MessageDialog dialog;
+            dialog.setMessage("Folder '"+folder.string()+"' isn't empty, files can be overwritten."
+                              "\nDo you want to continue ?");
+            dialog.setTitle("Folder not empty.");
+            dialog.setIcon(::fwGui::dialog::MessageDialog::QUESTION);
+            dialog.addButton( ::fwGui::dialog::MessageDialog::YES_NO );
+            ::fwGui::dialog::MessageDialog::Buttons button = dialog.show();
+
+            if(button == ::fwGui::dialog::MessageDialog::NO)
+            {
+                return;
+            }
+        }
+
+        if (series->getModality() == "OT")
+        {
+            ::fwGui::dialog::MessageDialog dialog;
+            dialog.setMessage("Series modality is '" + series->getModality() + "' some information can be lost."
+                              "\nDo you want to continue ?");
+            dialog.setTitle("Series modality.");
+            dialog.setIcon(::fwGui::dialog::MessageDialog::QUESTION);
+            dialog.addButton( ::fwGui::dialog::MessageDialog::YES_NO );
+            ::fwGui::dialog::MessageDialog::Buttons button = dialog.show();
+
+            if(button == ::fwGui::dialog::MessageDialog::NO)
+            {
+                return;
+            }
+        }
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+        this->saveDicomSeries(folder, series);
+        cursor.setDefaultCursor();
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
+void SDicomSeriesWriter::saveDicomSeries( const ::boost::filesystem::path folder,
+                                          ::fwMedData::DicomSeries::sptr series ) const
+{
+    ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer = ::fwGdcmIO::helper::DicomSeriesWriter::New();
+
+    writer->setObject(series);
+    ::fwData::location::Folder::sptr loc = ::fwData::location::Folder::New();
+    loc->setFolder(folder);
+    writer->setLocation(loc);
+    m_sigJobCreated->emit(writer->getJob());
+
+    try
+    {
+        ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving series ");
+        writer->write();
+    }
+    catch (const std::exception& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during saving : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", "Warning during saving", ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::io::IOPathType SDicomSeriesWriter::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioGdcm
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/SSeriesDBReader.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SSeriesDBReader.cpp
new file mode 100644
index 0000000..f9e75af
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SSeriesDBReader.cpp
@@ -0,0 +1,368 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioGdcm/SSeriesDBReader.hpp"
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/String.hpp>
+#include <fwData/location/Folder.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/LoggerDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+#include <fwGui/dialog/PulseProgressDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwLog/Logger.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+#include <fwTools/ProgressToLogger.hpp>
+
+#include <io/IReader.hpp>
+
+#include <boost/bind.hpp>
+
+namespace ioGdcm
+{
+
+fwServicesRegisterMacro( ::io::IReader, ::ioGdcm::SSeriesDBReader, ::fwMedData::SeriesDB );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SSeriesDBReader::SSeriesDBReader() throw() :
+    m_filterSelectorSrvConfig(""),
+    m_filterType(""),
+    m_sigJobCreated(JobCreatedSignal::New()),
+    m_showLogDialog(true),
+    m_enableBufferRotation(true),
+    m_dicomDirSupport(USER_SELECTION)
+{
+    ::fwCom::HasSignals::m_signals
+        ( JOB_CREATED_SIGNAL, m_sigJobCreated );
+}
+
+//------------------------------------------------------------------------------
+
+SSeriesDBReader::~SSeriesDBReader() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SSeriesDBReader::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle(this->getSelectorDialogTitle());
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( _sDefaultPath );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+    else
+    {
+        this->clearLocations();
+    }
+
+    // Select filter
+    if(!m_filterSelectorSrvConfig.empty())
+    {
+        // Get the config
+        ::fwRuntime::ConfigurationElement::csptr filterSelectorConfig;
+        filterSelectorConfig = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(
+            m_filterSelectorSrvConfig, "::ioDicom::SFilterSelectorDialog");
+
+        SLM_ASSERT("Sorry, there is no service configuration "
+                   << m_filterSelectorSrvConfig
+                   << " for ::ioDicom::SFilterSelectorDialog", filterSelectorConfig);
+
+        // Init and execute the service
+        ::fwServices::IService::sptr filterSelectorSrv;
+        ::fwData::String::sptr key = ::fwData::String::New();
+        filterSelectorSrv          = ::fwServices::add(key,
+                                                       "::gui::editor::IDialogEditor",
+                                                       "::ioDicom::SFilterSelectorDialog");
+        filterSelectorSrv->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(filterSelectorConfig) );
+        filterSelectorSrv->configure();
+        filterSelectorSrv->start();
+        filterSelectorSrv->update();
+        filterSelectorSrv->stop();
+        ::fwServices::OSR::unregisterService( filterSelectorSrv );
+
+        m_filterType = key->getValue();
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::configuring() throw (fwTools::Failed)
+{
+    ::io::IReader::configuring();
+
+    // Use filter selector
+    ::fwRuntime::ConfigurationElement::sptr selectorConfig =
+        m_configuration->findConfigurationElement("FilterSelectorSrvConfig");
+    if(selectorConfig)
+    {
+        SLM_ASSERT("Missing 'name' attribute", selectorConfig->hasAttribute("name"));
+        m_filterSelectorSrvConfig = selectorConfig->getAttributeValue("name");
+    }
+
+    // Get SOP Class selection
+    const ::fwRuntime::ConfigurationElement::sptr sopClassSelection =
+        m_configuration->findConfigurationElement("SOPClassSelection");
+    if(sopClassSelection)
+    {
+        ::fwRuntime::ConfigurationElementContainer sopClassElements =
+            sopClassSelection->findAllConfigurationElement("SOPClass");
+
+        for(::fwRuntime::ConfigurationElementContainer::Iterator it = sopClassElements.begin();
+            it != sopClassElements.end(); ++it)
+        {
+            const ::fwRuntime::ConfigurationElement::AttributePair attributePair = (*it)->getSafeAttributeValue("uid");
+            if(attributePair.first)
+            {
+                SLM_TRACE("New SOP class supported : " + attributePair.second);
+                m_supportedSOPClassSelection.push_back(attributePair.second);
+            }
+        }
+    }
+
+    // Set filter
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    if(config)
+    {
+        m_filterType = config->getAttributeValue("filterType");
+    }
+
+    // Show log dialog
+    ::fwRuntime::ConfigurationElement::sptr logDialog = m_configuration->findConfigurationElement("showLogDialog");
+    if(logDialog)
+    {
+        std::string logDialogStr = logDialog->getValue();
+        SLM_ASSERT("<showLogDialog> value must be 'yes' or 'no'", logDialogStr == "yes" || logDialogStr == "no");
+        m_showLogDialog = (logDialogStr == "yes");
+    }
+
+    // Enable buffer rotation
+    ::fwRuntime::ConfigurationElement::sptr bufRot = m_configuration->findConfigurationElement("enableBufferRotation");
+    if(bufRot)
+    {
+        std::string bufRotStr = bufRot->getValue();
+        SLM_ASSERT("<enableBufferRotation> value must be 'yes' or 'no'", bufRotStr == "yes" || bufRotStr == "no");
+        m_enableBufferRotation = (bufRotStr == "yes");
+    }
+
+    // Enable dicomdir
+    ::fwRuntime::ConfigurationElement::sptr dicomDir = m_configuration->findConfigurationElement("dicomdirSupport");
+    if(dicomDir)
+    {
+        std::string dicomDirStr = dicomDir->getValue();
+        SLM_ASSERT("<dicomdirSupport> value must be 'always' or 'never' or 'user_selection'",
+                   dicomDirStr == "always" || dicomDirStr == "never" || dicomDirStr == "user_selection");
+
+        if(dicomDirStr == "always")
+        {
+            m_dicomDirSupport = ALWAYS;
+        }
+        else if(dicomDirStr == "never")
+        {
+            m_dicomDirSupport = NEVER;
+        }
+        else if(dicomDirStr == "user_selection")
+        {
+            m_dicomDirSupport = USER_SELECTION;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::info(std::ostream& _sstream )
+{
+    _sstream << "SSeriesDBReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+std::string SSeriesDBReader::getSelectorDialogTitle()
+{
+    return "Choose a directory with DICOM images";
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::SeriesDB::sptr SSeriesDBReader::createSeriesDB( const ::boost::filesystem::path& dicomDir)
+{
+    SLM_TRACE_FUNC();
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    ::fwMedData::SeriesDB::sptr dummy         = ::fwMedData::SeriesDB::New();
+    reader->setObject(dummy);
+    reader->setFolder(dicomDir);
+    reader->setDicomFilterType(m_filterType);
+    reader->setBufferRotationEnabled(m_enableBufferRotation);
+    reader->setSupportedSOPClassContainer(m_supportedSOPClassSelection);
+    auto job = reader->getJob();
+    m_sigJobCreated->emit(job);
+
+    if(m_dicomDirSupport == USER_SELECTION && reader->isDicomDirAvailable())
+    {
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Dicomdir file");
+        messageBox.setMessage( "There is a dicomdir file in the root folder. "
+                               "Would you like to use it for the reading process ?" );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::YES_NO);
+        ::fwGui::dialog::IMessageDialog::Buttons button = messageBox.show();
+
+        reader->setDicomdirActivated(button == ::fwGui::dialog::IMessageDialog::YES);
+    }
+    else if(m_dicomDirSupport == ALWAYS)
+    {
+        reader->setDicomdirActivated(true);
+    }
+    else //m_dicomDirSupport == NEVER
+    {
+        reader->setDicomdirActivated(false);
+    }
+
+    try
+    {
+        reader->read();
+
+        // Retrieve logger
+        ::fwLog::Logger::sptr logger = reader->getLogger();
+        logger->sort();
+
+        // Set default cursor
+        ::fwGui::Cursor cursor;
+        cursor.setDefaultCursor();
+
+        // Display logger dialog if enabled
+        if(m_showLogDialog && !logger->empty())
+        {
+
+            std::stringstream ss;
+            if(dummy->size() > 1)
+            {
+                ss << "The reading process is over : <b>" << dummy->size() << " series</b> have been found. "
+                    "<br>Please verify the log report to be informed of the potential errors.";
+            }
+            else
+            {
+                ss << "The reading process is over : <b>" << dummy->size() << " series</b> has been found. "
+                    "<br>Please verify the log report to be informed of the potential errors.";
+            }
+
+            bool result = false;
+            if(!job->cancelRequested())
+            {
+                result = ::fwGui::dialog::LoggerDialog::showLoggerDialog("Reading process over", ss.str(), logger);
+            }
+
+            // If the user cancel the reading process we delete the loaded series
+            if(!result || job->cancelRequested())
+            {
+                ::fwMedDataTools::helper::SeriesDB sDBhelper(dummy);
+                sDBhelper.clear();
+            }
+        }
+    }
+    catch (const std::exception& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+
+    return dummy;
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBReader::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    if( this->hasLocationDefined() )
+    {
+        ::fwMedData::SeriesDB::sptr localSeriesDB = this->createSeriesDB(this->getFolder());
+
+        if( !localSeriesDB->empty() )
+        {
+            // Retrieve dataStruct associated with this service
+            ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+            // seriesDB->shallowCopy( localSeriesDB ) ;
+
+            ::fwMedDataTools::helper::SeriesDB sDBhelper(seriesDB);
+
+            ::fwData::mt::ObjectWriteLock lock(seriesDB);
+            sDBhelper.merge(localSeriesDB);
+            sDBhelper.notify();
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+
+} // namespace ioGdcm
diff --git a/Bundles/LeafIO/ioGdcm/src/ioGdcm/SSeriesDBWriter.cpp b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SSeriesDBWriter.cpp
new file mode 100644
index 0000000..5acfcec
--- /dev/null
+++ b/Bundles/LeafIO/ioGdcm/src/ioGdcm/SSeriesDBWriter.cpp
@@ -0,0 +1,242 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioGdcm/SSeriesDBWriter.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Vector.hpp>
+#include <fwData/location/Folder.hpp>
+
+#include <fwGdcmIO/helper/Fiducial.hpp>
+#include <fwGdcmIO/writer/SeriesDB.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/ProgressToLogger.hpp>
+
+#include <io/IWriter.hpp>
+
+
+namespace ioGdcm
+{
+
+fwServicesRegisterMacro( ::io::IWriter, ::ioGdcm::SSeriesDBWriter, ::fwData::Vector );
+
+//------------------------------------------------------------------------------
+
+SSeriesDBWriter::SSeriesDBWriter() throw() :
+    m_fiducialsExportMode(::fwGdcmIO::writer::Series::COMPREHENSIVE_3D_SR)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SSeriesDBWriter::~SSeriesDBWriter() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBWriter::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose a directory for DICOM images");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
+    dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result && this->selectFiducialsExportMode())
+    {
+        _sDefaultPath = result->getFolder();
+        this->setFolder( result->getFolder() );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+    else
+    {
+        this->clearLocations();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBWriter::starting() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBWriter::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBWriter::updating() throw(::fwTools::Failed)
+{
+    if( this->hasLocationDefined() )
+    {
+        const ::boost::filesystem::path& folder = this->getFolder();
+        if(!::boost::filesystem::is_empty(folder))
+        {
+            ::fwGui::dialog::MessageDialog dialog;
+            dialog.setMessage("Folder '"+folder.string()+"' isn't empty, files can be overwritten."
+                              "\nDo you want to continue ?");
+            dialog.setTitle("Folder not empty.");
+            dialog.setIcon(::fwGui::dialog::MessageDialog::QUESTION);
+            dialog.addButton( ::fwGui::dialog::MessageDialog::YES_NO );
+            ::fwGui::dialog::MessageDialog::Buttons button = dialog.show();
+
+            if(button == ::fwGui::dialog::MessageDialog::NO)
+            {
+                return;
+            }
+        }
+
+        // Retrieve dataStruct associated with this service
+        ::fwData::Vector::sptr vector = this->getObject< ::fwData::Vector >();
+
+        // Create SeriesDB
+        ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+        ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+
+        for(::fwData::Object::sptr object: vector->getContainer())
+        {
+            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(object);
+            SLM_ASSERT("The container should only contain series.", series);
+            seriesDBHelper.add(series);
+        }
+
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+        this->saveSeriesDB(folder, seriesDB);
+        cursor.setDefaultCursor();
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
+void SSeriesDBWriter::saveSeriesDB( const ::boost::filesystem::path folder, ::fwMedData::SeriesDB::sptr seriesDB )
+{
+    ::fwGdcmIO::writer::SeriesDB::sptr writer = ::fwGdcmIO::writer::SeriesDB::New();
+    writer->setObject(seriesDB);
+    writer->setFiducialsExportMode(m_fiducialsExportMode);
+    ::fwData::location::Folder::sptr loc = ::fwData::location::Folder::New();
+    loc->setFolder(folder);
+    writer->setLocation(loc);
+
+    try
+    {
+        ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving series ");
+        writer->addHandler( progressMeterGUI );
+        writer->write();
+    }
+    catch (const std::exception& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during saving : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning", "Warning during saving", ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::io::IOPathType SSeriesDBWriter::getIOPathType() const
+{
+    return ::io::FOLDER;
+}
+
+//------------------------------------------------------------------------------
+
+bool SSeriesDBWriter::selectFiducialsExportMode()
+{
+    // Retrieve dataStruct associated with this service
+    ::fwData::Vector::sptr vector = this->getObject< ::fwData::Vector >();
+
+    // Create SeriesDB
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+
+    for(::fwData::Object::sptr object: vector->getContainer())
+    {
+        ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(object);
+        SLM_ASSERT("The container should only contain series.", series);
+        seriesDBHelper.add(series);
+    }
+
+    const bool containsLandmarks   = ::fwGdcmIO::helper::Fiducial::containsLandmarks(seriesDB);
+    const bool containsDistances   = ::fwGdcmIO::helper::Fiducial::containsDistances(seriesDB);
+    const bool contains3DDistances = ::fwGdcmIO::helper::Fiducial::contains3DDistances(seriesDB);
+
+    if(containsLandmarks || containsDistances)
+    {
+        static const std::string fiducialIOD          = "Spatial Fiducials";
+        static const std::string comprehensiveSRIOD   = "Comprehensive SR";
+        static const std::string comprehensive3DSRIOD = "Comprehensive 3D SR";
+
+        std::vector< std::string > exportModes;
+        if(!containsDistances)
+        {
+            exportModes.push_back(fiducialIOD);
+        }
+        if(!contains3DDistances)
+        {
+            exportModes.push_back(comprehensiveSRIOD);
+        }
+        exportModes.push_back(comprehensive3DSRIOD);
+
+        // Create selector
+        ::fwGui::dialog::SelectorDialog::sptr selector = ::fwGui::dialog::SelectorDialog::New();
+
+        selector->setTitle("Fiducials export mode");
+        selector->setSelections(exportModes);
+        const std::string mode             = selector->show();
+        const bool modeSelectionIsCanceled = mode.empty();
+
+        if(mode == fiducialIOD)
+        {
+            m_fiducialsExportMode = ::fwGdcmIO::writer::Series::SPATIAL_FIDUCIALS;
+        }
+        else if(mode == comprehensiveSRIOD)
+        {
+            m_fiducialsExportMode = ::fwGdcmIO::writer::Series::COMPREHENSIVE_SR;
+        }
+        else
+        {
+            m_fiducialsExportMode = ::fwGdcmIO::writer::Series::COMPREHENSIVE_3D_SR;
+        }
+
+
+        return !modeSelectionIsCanceled;
+    }
+
+    return true;
+
+}
+
+} // namespace ioGdcm
diff --git a/Bundles/LeafIO/ioITK/CMakeLists.txt b/Bundles/LeafIO/ioITK/CMakeLists.txt
index 28f5b7d..1169074 100644
--- a/Bundles/LeafIO/ioITK/CMakeLists.txt
+++ b/Bundles/LeafIO/ioITK/CMakeLists.txt
@@ -1,44 +1,3 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwRuntime
 
-    io
-)
-
-
-find_package(Boost REQUIRED)
-find_package(ITK REQUIRED)
-
-find_library(VNL_ALGO_LIBRARY   vnl_algo )
-find_library(VNL_LIBRARY        vnl )
-find_library(VCL_LIBRARY        vcl )
-find_library(V3P_NETLIB_LIBRARY v3p_netlib )
-find_library(NETLIB_LIBRARY     netlib )
-find_path( VNL_INCLUDE_PATH  vxl/core/vnl/vnl_alloc.h)
-
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwInclude(
-    ${ITK_INCLUDE_DIRS}
-    ${VNL_INCLUDE_PATH}
-    )
-fwLink(
-    ITKCommon
-    ITKDICOMParser
-    ITKEXPAT
-    ITKIO
-    ITKMetaIO
-    ITKNrrdIO
-    ITKSpatialObject
-    ITKniftiio
-    ITKznz
-    itkjpeg8
-    itksys
-
-    ${VNL_ALGO_LIBRARY}
-    ${VNL_LIBRARY}
-    ${VCL_LIBRARY}
-    ${V3P_NETLIB_LIBRARY}
-    ${NETLIB_LIBRARY}
-    )
 
diff --git a/Bundles/LeafIO/ioITK/Properties.cmake b/Bundles/LeafIO/ioITK/Properties.cmake
index 7c1d281..c03600e 100644
--- a/Bundles/LeafIO/ioITK/Properties.cmake
+++ b/Bundles/LeafIO/ioITK/Properties.cmake
@@ -2,6 +2,18 @@
 set( NAME ioITK )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwItkIO fwMedData fwRuntime fwServices fwTools io )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwItkIO
+    fwMedData
+    fwMedDataTools
+    fwRuntime
+    fwServices
+    fwTools
+    io
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafIO/ioITK/bin/build.options b/Bundles/LeafIO/ioITK/bin/build.options
deleted file mode 100644
index 31e909c..0000000
--- a/Bundles/LeafIO/ioITK/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE = 'bundle'
-VERSION  = '0-1'
-USE = ['boost','itkCommon']
-LIB = [
-    'fwTools_0-1',
-    'fwRuntime_0-3',
-    'fwData_0-1',
-    'fwDataIO_0-2',
-    'fwServices_0-1',
-    'fwCore_0-1',
-    'fwComEd_0-1',
-    'fwItkIO_0-1',
-    'fwGui_0-1',
-    ]
-
-BUNDLES = ['io_0-1','gui_0-1']
-
-
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/InrImageReaderService.hpp b/Bundles/LeafIO/ioITK/include/ioITK/InrImageReaderService.hpp
index a583411..05c427b 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/InrImageReaderService.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/InrImageReaderService.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,7 +13,7 @@
 
 #include <io/IReader.hpp>
 
-#include "ioITK/export.hpp"
+#include "ioITK/config.hpp"
 
 namespace fwData
 {
@@ -26,8 +26,8 @@ namespace ioITK
 class IOITK_CLASS_API InrImageReaderService : public ::io::IReader
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (InrImageReaderService)( ::io::IReader) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (InrImageReaderService)( ::io::IReader) );
 
     IOITK_API InrImageReaderService() throw();
 
@@ -36,18 +36,19 @@ public :
 protected:
 
     /// Override
-    virtual void starting() throw(::fwTools::Failed){};
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
 
     /// Override
-    virtual void stopping() throw(::fwTools::Failed){};
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
 
-    IOITK_API virtual void updating() throw(::fwTools::Failed) ;
+    IOITK_API virtual void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) {} ;
-
-    /// Override
-    IOITK_API void info(std::ostream &_sstream ) ;
+    IOITK_API void info(std::ostream &_sstream );
 
     /// Override
     IOITK_API virtual void configureWithIHM();
@@ -55,7 +56,7 @@ protected:
     /// Return managed file type, here FILE
     IOITK_API ::io::IOPathType getIOPathType() const;
 
-private :
+private:
 
     void notificationOfDBUpdate();
 
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/InrImageWriterService.hpp b/Bundles/LeafIO/ioITK/include/ioITK/InrImageWriterService.hpp
index 05717d4..b542d97 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/InrImageWriterService.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/InrImageWriterService.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,7 +11,7 @@
 
 #include <io/IWriter.hpp>
 
-#include "ioITK/export.hpp"
+#include "ioITK/config.hpp"
 
 namespace fwData
 {
@@ -24,8 +24,8 @@ namespace ioITK
 class IOITK_CLASS_API InrImageWriterService : public ::io::IWriter
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (InrImageWriterService)( ::io::IWriter) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (InrImageWriterService)( ::io::IWriter) );
 
     IOITK_API InrImageWriterService() throw();
 
@@ -45,10 +45,7 @@ protected:
     IOITK_API void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) {} ;
-
-    /// Override
-    IOITK_API void info(std::ostream &_sstream ) ;
+    IOITK_API void info(std::ostream &_sstream );
 
     /// Override
     IOITK_API virtual void configureWithIHM();
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/JpgImageWriterService.hpp b/Bundles/LeafIO/ioITK/include/ioITK/JpgImageWriterService.hpp
index 6712977..3d63ecc 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/JpgImageWriterService.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/JpgImageWriterService.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,11 +12,11 @@
 
 #include <io/IWriter.hpp>
 
-#include "ioITK/export.hpp"
+#include "ioITK/config.hpp"
 
 namespace fwData
 {
-    class Image;
+class Image;
 }
 
 namespace ioITK
@@ -25,16 +25,16 @@ namespace ioITK
 class IOITK_CLASS_API JpgImageWriterService : public ::io::IWriter
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (JpgImageWriterService)( ::io::IWriter) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (JpgImageWriterService)( ::io::IWriter) );
 
     IOITK_API JpgImageWriterService() throw();
 
     IOITK_API virtual ~JpgImageWriterService() throw();
 
     IOITK_API static void saveImage(
-            const ::boost::filesystem::path& imgPath,
-            const SPTR(::fwData::Image)& img);
+        const ::boost::filesystem::path& imgPath,
+        const SPTR(::fwData::Image)& img);
 
 protected:
 
@@ -48,10 +48,7 @@ protected:
     IOITK_API void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) {} ;
-
-    /// Override
-    IOITK_API void info(std::ostream &_sstream ) ;
+    IOITK_API void info(std::ostream &_sstream );
 
     /// Override
     IOITK_API virtual void configureWithIHM();
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/Plugin.hpp b/Bundles/LeafIO/ioITK/include/ioITK/Plugin.hpp
index 1054e0f..3cea362 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/Plugin.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IOITK_PLUGIN_HPP_
-#define _IOITK_PLUGIN_HPP_
+#ifndef __IOITK_PLUGIN_HPP__
+#define __IOITK_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -15,8 +15,6 @@ namespace ioITK
 /**
  * @brief   This class is started when the bundles is loaded.
  * @class   Plugin
- * 
- * @date    2009-2011
  */
 struct Plugin : public ::fwRuntime::Plugin
 {
@@ -35,4 +33,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace ioITK
 
-#endif //_IOITK_PLUGIN_HPP_
+#endif //__IOITK_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/SImageSeriesWriter.hpp b/Bundles/LeafIO/ioITK/include/ioITK/SImageSeriesWriter.hpp
index 16b7dcc..7e4bc13 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/SImageSeriesWriter.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/SImageSeriesWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,16 +12,19 @@
 
 #include <io/IWriter.hpp>
 
-#include "ioITK/export.hpp"
+#include "ioITK/config.hpp"
 
 namespace ioITK
 {
 
+/**
+ * @brief Write an image to inr format
+ **/
 class IOITK_CLASS_API SImageSeriesWriter : public ::io::IWriter
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SImageSeriesWriter)( ::io::IWriter) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SImageSeriesWriter)( ::io::IWriter) );
 
     IOITK_API SImageSeriesWriter() throw();
 
@@ -39,10 +42,7 @@ protected:
     IOITK_API void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) {} ;
-
-    /// Override
-    IOITK_API void info(std::ostream &_sstream ) ;
+    IOITK_API void info(std::ostream &_sstream );
 
     /// Override
     IOITK_API virtual void configureWithIHM();
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/SInrSeriesDBReader.hpp b/Bundles/LeafIO/ioITK/include/ioITK/SInrSeriesDBReader.hpp
index 5602077..06b7152 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/SInrSeriesDBReader.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/SInrSeriesDBReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@
 
 #include <io/IReader.hpp>
 
-#include "ioITK/export.hpp"
+#include "ioITK/config.hpp"
 
 namespace fwData
 {
@@ -37,8 +37,8 @@ namespace ioITK
 class IOITK_CLASS_API SInrSeriesDBReader : public ::io::IReader
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SInrSeriesDBReader)( ::io::IReader) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SInrSeriesDBReader)( ::io::IReader) );
 
     IOITK_API SInrSeriesDBReader() throw();
 
@@ -47,13 +47,17 @@ public :
 protected:
 
     /// Does nothing.
-    virtual void starting() throw(::fwTools::Failed){};
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
 
     /// Does nothing.
-    virtual void stopping() throw(::fwTools::Failed){};
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
 
     /// Reads inr files specified by user (configure or configureWithIHM) and pushes them into SeriesDB.
-    IOITK_API virtual void updating() throw(::fwTools::Failed) ;
+    IOITK_API virtual void updating() throw(::fwTools::Failed);
 
     /**
      * @brief Configure the inr files path.
@@ -65,10 +69,10 @@ protected:
     /// Returns managed file type, here FILES
     IOITK_API ::io::IOPathType getIOPathType() const;
 
-private :
+private:
 
     /// Initializes Series with dummy values and Study with specified instanceUID.
-    void  initSeries(SPTR(::fwMedData::Series) series, const std::string& instanceUID);
+    void initSeries(SPTR(::fwMedData::Series) series, const std::string& instanceUID);
 
     /// Reads specified inr file in image.
     bool createImage( const ::boost::filesystem::path inrFile, SPTR(::fwData::Image) image );
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/SJpgImageSeriesWriter.hpp b/Bundles/LeafIO/ioITK/include/ioITK/SJpgImageSeriesWriter.hpp
index d272d52..c326de7 100644
--- a/Bundles/LeafIO/ioITK/include/ioITK/SJpgImageSeriesWriter.hpp
+++ b/Bundles/LeafIO/ioITK/include/ioITK/SJpgImageSeriesWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,16 +12,19 @@
 
 #include <io/IWriter.hpp>
 
-#include "ioITK/export.hpp"
+#include "ioITK/config.hpp"
 
 namespace ioITK
 {
 
+/**
+ * @brief Write an image to jpg format
+ **/
 class IOITK_CLASS_API SJpgImageSeriesWriter : public ::io::IWriter
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SJpgImageSeriesWriter)( ::io::IWriter) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SJpgImageSeriesWriter)( ::io::IWriter) );
 
     IOITK_API SJpgImageSeriesWriter() throw();
 
@@ -39,10 +42,7 @@ protected:
     IOITK_API void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) {} ;
-
-    /// Override
-    IOITK_API void info(std::ostream &_sstream ) ;
+    IOITK_API void info(std::ostream &_sstream );
 
     /// Override
     IOITK_API virtual void configureWithIHM();
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/export.hpp b/Bundles/LeafIO/ioITK/include/ioITK/export.hpp
deleted file mode 100644
index 8e5ecd0..0000000
--- a/Bundles/LeafIO/ioITK/include/ioITK/export.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOITK_CONFIG_HPP_
-#define _IOITK_CONFIG_HPP_
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef IOITK_EXPORTS
-    #define IOITK_API __declspec(dllexport)
-    #else
-    #define IOITK_API __declspec(dllimport)
-    #endif
-
-    #define IOITK_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IOITK_EXPORTS
-    #define IOITK_API __attribute__ ((visibility("default")))
-    #define IOITK_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IOITK_API __attribute__ ((visibility("hidden")))
-    #define IOITK_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IOITK_API
-    #define IOITK_CLASS_API
-
-#endif
-
-#endif // #ifndef _IOITK_CONFIG_HPP_
diff --git a/Bundles/LeafIO/ioITK/include/ioITK/namespace.hpp b/Bundles/LeafIO/ioITK/include/ioITK/namespace.hpp
new file mode 100644
index 0000000..b0df3a2
--- /dev/null
+++ b/Bundles/LeafIO/ioITK/include/ioITK/namespace.hpp
@@ -0,0 +1,18 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOITK_NAMESPACE_HPP__
+#define __IOITK_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace ioITK contains services for reader, writer and helper for itk image.
+ **/
+namespace ioITK
+{
+
+} // namespace ioITK
+
+#endif // __IOITK_NAMESPACE_HPP__
diff --git a/Bundles/LeafIO/ioITK/rc/plugin.xml b/Bundles/LeafIO/ioITK/rc/plugin.xml
index 2154c6f..01ac082 100644
--- a/Bundles/LeafIO/ioITK/rc/plugin.xml
+++ b/Bundles/LeafIO/ioITK/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ioITK" class="ioITK::Plugin">
+<plugin id="ioITK" class="ioITK::Plugin" version="@DASH_VERSION@" >
     <library name="ioITK" />
 
     <requirement id="io" />
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/InrImageReaderService.cpp b/Bundles/LeafIO/ioITK/src/ioITK/InrImageReaderService.cpp
index 182d3ea..5bc2797 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/InrImageReaderService.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/InrImageReaderService.cpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "ioITK/InrImageReaderService.hpp"
+
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwComEd/ImageMsg.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <io/IReader.hpp>
 
@@ -25,23 +26,22 @@
 
 #include <fwItkIO/ImageReader.hpp>
 
-#include "ioITK/InrImageReaderService.hpp"
-
-
 namespace ioITK
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioITK::InrImageReaderService , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioITK::InrImageReaderService, ::fwData::Image );
 
 //------------------------------------------------------------------------------
 
 InrImageReaderService::InrImageReaderService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 InrImageReaderService::~InrImageReaderService() throw()
-{}
+{
+}
 
 
 //------------------------------------------------------------------------------
@@ -65,8 +65,8 @@ void InrImageReaderService::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
@@ -88,7 +88,8 @@ void InrImageReaderService::info(std::ostream &_sstream )
 
 //------------------------------------------------------------------------------
 
-bool InrImageReaderService::createImage( const ::boost::filesystem::path &inrFileDir, const ::fwData::Image::sptr &_pImg )
+bool InrImageReaderService::createImage( const ::boost::filesystem::path &inrFileDir,
+                                         const ::fwData::Image::sptr &_pImg )
 {
     SLM_TRACE_FUNC();
     ::fwItkIO::ImageReader::sptr myLoader = ::fwItkIO::ImageReader::New();
@@ -108,15 +109,15 @@ bool InrImageReaderService::createImage( const ::boost::filesystem::path &inrFil
         std::stringstream ss;
         ss << "Warning during loading : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          ss.str(),
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
         ok = false;
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                "Warning during loading",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          "Warning during loading",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
         ok = false;
     }
     return ok;
@@ -148,14 +149,11 @@ void InrImageReaderService::notificationOfDBUpdate()
     ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >();
     SLM_ASSERT("pImage not instanced", pImage);
 
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::NEW_IMAGE ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::BUFFER ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::REGION ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::SPACING ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::PIXELTYPE ) ;
-
-    ::fwServices::IEditionService::notify(this->getSptr(), pImage, msg);
+    auto sig = pImage->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/InrImageWriterService.cpp b/Bundles/LeafIO/ioITK/src/ioITK/InrImageWriterService.cpp
index 5594f15..d0fe7c7 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/InrImageWriterService.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/InrImageWriterService.cpp
@@ -1,15 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwServices/macros.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwComEd/ImageMsg.hpp>
 
 #include <io/IWriter.hpp>
 
@@ -32,17 +28,19 @@
 namespace ioITK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioITK::InrImageWriterService , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioITK::InrImageWriterService, ::fwData::Image );
 
 //------------------------------------------------------------------------------
 
 InrImageWriterService::InrImageWriterService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 InrImageWriterService::~InrImageWriterService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -64,8 +62,8 @@ void InrImageWriterService::configureWithIHM()
     dialogFile.addFilter("Inrimage","*.inr.gz");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
@@ -119,16 +117,16 @@ void InrImageWriterService::saveImage( const ::boost::filesystem::path &inrFile,
     catch (const std::exception & e)
     {
         std::stringstream ss;
-               ss << "Warning during saving : " << e.what();
-               ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                                                                  ss.str(),
-                                                                  ::fwGui::dialog::IMessageDialog::WARNING);
+        ss << "Warning during saving : " << e.what();
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
+                                                          ss.str(),
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                                    "Warning during saving",
-                                    ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          "Warning during saving",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
     }
 }
 
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/JpgImageWriterService.cpp b/Bundles/LeafIO/ioITK/src/ioITK/JpgImageWriterService.cpp
index be9b72d..598da97 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/JpgImageWriterService.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/JpgImageWriterService.cpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwServices/macros.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 
 #include <io/IWriter.hpp>
 
@@ -29,17 +27,19 @@
 namespace ioITK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioITK::JpgImageWriterService , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioITK::JpgImageWriterService, ::fwData::Image );
 
 //------------------------------------------------------------------------------
 
 JpgImageWriterService::JpgImageWriterService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 JpgImageWriterService::~JpgImageWriterService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -61,7 +61,7 @@ void JpgImageWriterService::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
     dialogFile.setType(::fwGui::dialog::ILocationDialog::FOLDER);
 
-    ::fwData::location::Folder::sptr  result;
+    ::fwData::location::Folder::sptr result;
     result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
     if (result)
     {
@@ -120,14 +120,14 @@ void JpgImageWriterService::saveImage(const ::boost::filesystem::path& imgPath,
         std::stringstream ss;
         ss << "Warning during saving : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          ss.str(),
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                                "Warning during saving",
-                                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          "Warning during saving",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
     }
 }
 
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/Plugin.cpp b/Bundles/LeafIO/ioITK/src/ioITK/Plugin.cpp
index d77dacc..c229f41 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/Plugin.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,7 +7,7 @@
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 #include <fwServices/macros.hpp>
 
-#include <inr2itk/itkInrImageIO.h>
+#include <inr2itk/itkInrImageIO.hpp>
 
 #include "ioITK/Plugin.hpp"
 
@@ -19,7 +19,8 @@ namespace ioITK
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("ioITK::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
@@ -28,6 +29,7 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace ioITK
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/SImageSeriesWriter.cpp b/Bundles/LeafIO/ioITK/src/ioITK/SImageSeriesWriter.cpp
index f589c0d..ba8a81e 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/SImageSeriesWriter.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/SImageSeriesWriter.cpp
@@ -1,15 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwServices/macros.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwComEd/ImageMsg.hpp>
 
 #include <io/IWriter.hpp>
 
@@ -35,17 +31,19 @@
 namespace ioITK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioITK::SImageSeriesWriter , ::fwMedData::ImageSeries ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioITK::SImageSeriesWriter, ::fwMedData::ImageSeries );
 
 //------------------------------------------------------------------------------
 
 SImageSeriesWriter::SImageSeriesWriter() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SImageSeriesWriter::~SImageSeriesWriter() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -67,8 +65,8 @@ void SImageSeriesWriter::configureWithIHM()
     dialogFile.addFilter("Inrimage","*.inr.gz");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/SInrSeriesDBReader.cpp b/Bundles/LeafIO/ioITK/src/ioITK/SInrSeriesDBReader.cpp
index 2649b20..2279ef5 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/SInrSeriesDBReader.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/SInrSeriesDBReader.cpp
@@ -1,18 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-#include <fwTools/UUID.hpp>
-#include <fwTools/dateAndTime.hpp>
-
-#include <fwServices/Base.hpp>
-
-#include <io/IReader.hpp>
+#include "ioITK/SInrSeriesDBReader.hpp"
 
 #include <fwCore/base.hpp>
 
@@ -21,37 +13,46 @@
 #include <fwData/location/MultiFiles.hpp>
 #include <fwData/mt/ObjectWriteLock.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwItkIO/ImageReader.hpp>
+
+#include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
-#include <fwMedData/Equipment.hpp>
 
-#include <fwComEd/helper/SeriesDB.hpp>
+#include <fwMedDataTools/helper/SeriesDB.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/Cursor.hpp>
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwItkIO/ImageReader.hpp>
+#include <fwTools/UUID.hpp>
+#include <fwTools/dateAndTime.hpp>
 
-#include "ioITK/SInrSeriesDBReader.hpp"
+#include <io/IReader.hpp>
+
+#include <boost/date_time/posix_time/posix_time.hpp>
 
 namespace ioITK
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioITK::SInrSeriesDBReader , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioITK::SInrSeriesDBReader, ::fwMedData::SeriesDB );
 
 //------------------------------------------------------------------------------
 
 SInrSeriesDBReader::SInrSeriesDBReader() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SInrSeriesDBReader::~SInrSeriesDBReader() throw()
-{}
+{
+}
 
 
 //------------------------------------------------------------------------------
@@ -76,7 +77,7 @@ void SInrSeriesDBReader::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
 
-    ::fwData::location::MultiFiles::sptr  result;
+    ::fwData::location::MultiFiles::sptr result;
     result = ::fwData::location::MultiFiles::dynamicCast( dialogFile.show() );
     if (result)
     {
@@ -111,20 +112,20 @@ bool SInrSeriesDBReader::createImage( const ::boost::filesystem::path inrFile, :
         myLoader->addHandler( progressMeterGUI );
         myLoader->read();
     }
-    catch (const std::exception & e)
+    catch (const std::exception& e)
     {
         std::stringstream ss;
         ss << "Warning during loading : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          ss.str(),
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
         ok = false;
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
-                "Warning during loading",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          "Warning during loading",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
         ok = false;
     }
     return ok;
@@ -139,7 +140,7 @@ void SInrSeriesDBReader::updating() throw(::fwTools::Failed)
     if( this->hasLocationDefined() )
     {
         // Retrieve dataStruct associated with this service
-        ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >() ;
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
         SLM_ASSERT("SeriesDB not instanced", seriesDB);
 
         ::fwMedData::SeriesDB::sptr localSeriesDB = ::fwMedData::SeriesDB::New();
@@ -149,7 +150,7 @@ void SInrSeriesDBReader::updating() throw(::fwTools::Failed)
 
         const std::string instanceUID = ::fwTools::UUID::generateUUID();
 
-        BOOST_FOREACH(const ::boost::filesystem::path &path, this->getFiles())
+        for(const ::boost::filesystem::path& path :  this->getFiles())
         {
             ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::New();
             this->initSeries(imgSeries, instanceUID);
@@ -161,11 +162,11 @@ void SInrSeriesDBReader::updating() throw(::fwTools::Failed)
             localSeriesDB->getContainer().push_back(imgSeries);
         }
 
-        ::fwComEd::helper::SeriesDB sDBhelper(seriesDB);
+        ::fwMedDataTools::helper::SeriesDB sDBhelper(seriesDB);
 
         ::fwData::mt::ObjectWriteLock lock(seriesDB);
         sDBhelper.merge(localSeriesDB);
-        sDBhelper.notify(this->getSptr());
+        sDBhelper.notify();
 
         cursor.setDefaultCursor();
     }
@@ -173,7 +174,7 @@ void SInrSeriesDBReader::updating() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void  SInrSeriesDBReader::initSeries(::fwMedData::Series::sptr series, const std::string& instanceUID)
+void SInrSeriesDBReader::initSeries(::fwMedData::Series::sptr series, const std::string& instanceUID)
 {
     const std::string unknown = "unknown";
     series->setModality("OT");
diff --git a/Bundles/LeafIO/ioITK/src/ioITK/SJpgImageSeriesWriter.cpp b/Bundles/LeafIO/ioITK/src/ioITK/SJpgImageSeriesWriter.cpp
index f3b60f6..ae2cf4b 100644
--- a/Bundles/LeafIO/ioITK/src/ioITK/SJpgImageSeriesWriter.cpp
+++ b/Bundles/LeafIO/ioITK/src/ioITK/SJpgImageSeriesWriter.cpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwServices/macros.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 
 #include <io/IWriter.hpp>
 
@@ -30,17 +28,19 @@
 namespace ioITK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioITK::SJpgImageSeriesWriter , ::fwMedData::ImageSeries ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioITK::SJpgImageSeriesWriter, ::fwMedData::ImageSeries );
 
 //------------------------------------------------------------------------------
 
 SJpgImageSeriesWriter::SJpgImageSeriesWriter() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SJpgImageSeriesWriter::~SJpgImageSeriesWriter() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -62,7 +62,7 @@ void SJpgImageSeriesWriter::configureWithIHM()
     dialog.setOption(::fwGui::dialog::ILocationDialog::WRITE);
     dialog.setType(::fwGui::dialog::ILocationDialog::FOLDER);
 
-    ::fwData::location::Folder::sptr  result;
+    ::fwData::location::Folder::sptr result;
 
     while (result = ::fwData::location::Folder::dynamicCast( dialog.show() ))
     {
diff --git a/Bundles/LeafIO/ioITK/test/CMakeLists.txt b/Bundles/LeafIO/ioITK/test/CMakeLists.txt
index 384db7d..fb56413 100644
--- a/Bundles/LeafIO/ioITK/test/CMakeLists.txt
+++ b/Bundles/LeafIO/ioITK/test/CMakeLists.txt
@@ -1,10 +1,18 @@
 
 fwLoadProperties()
 
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+find_package(Boost COMPONENTS system filesystem REQUIRED)
+
+fwInclude(
+    ${Boost_INCLUDE_DIRS}
+    ${CPPUNIT_INCLUDE_DIR}
+)
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+)
 
 
 
diff --git a/Bundles/LeafIO/ioITK/test/Properties.cmake b/Bundles/LeafIO/ioITK/test/Properties.cmake
index d864d30..d4f1059 100644
--- a/Bundles/LeafIO/ioITK/test/Properties.cmake
+++ b/Bundles/LeafIO/ioITK/test/Properties.cmake
@@ -2,7 +2,17 @@
 set( NAME ioITKTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataTools fwItkIO )
+set( DEPENDENCIES
+    fwCore
+    fwTest
+    fwTools
+    fwRuntime
+    fwData
+    fwMedData
+    fwServices
+    fwGui
+    fwThread
+)
 set( REQUIREMENTS ioITK )
 
 set(CPPUNITTEST_OPTIONS BUNDLE ioITK WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafIO/ioITK/test/cppunit.options b/Bundles/LeafIO/ioITK/test/cppunit.options
deleted file mode 100644
index 3c18989..0000000
--- a/Bundles/LeafIO/ioITK/test/cppunit.options
+++ /dev/null
@@ -1,18 +0,0 @@
-CLASSTEST=[
-          'IoItkTest',
-          ]
-
-USE = ['boost']
-LIB = ['fwData_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwDataTools_0-1',
-       'fwTest_0-1',
-       'fwItkIO_0-1',]
-
-BUNDLES = []
-REQUIREMENTS = ['ioITK_0-1']
-
-CONSOLE = 'yes'
-
-LOGLEVEL='trace'
diff --git a/Bundles/LeafIO/ioITK/test/tu/include/IoItkTest.hpp b/Bundles/LeafIO/ioITK/test/tu/include/IoItkTest.hpp
index f5b0845..679e0f3 100644
--- a/Bundles/LeafIO/ioITK/test/tu/include/IoItkTest.hpp
+++ b/Bundles/LeafIO/ioITK/test/tu/include/IoItkTest.hpp
@@ -1,27 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#ifndef __IOITK_TEST_TU_IOITKTEST_HPP__
-#define __IOITK_TEST_TU_IOITKTEST_HPP__
+#ifndef __IOITK_UT_IOITKTEST_HPP__
+#define __IOITK_UT_IOITKTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
-#include <fwRuntime/EConfigurationElement.hpp>
-
-namespace fwData
-{
-    class Object;
-}
-
-namespace fwRuntime
-{
-    class EConfigurationElement;
-}
-
 namespace ioITK
 {
 namespace ut
@@ -32,13 +20,13 @@ namespace ut
  */
 class IoItkTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( IoItkTest );
-    CPPUNIT_TEST( testImageWriterJPG );
-    CPPUNIT_TEST( testImageSeriesWriterJPG );
-    CPPUNIT_TEST( testSaveLoadInr );
-    CPPUNIT_TEST( ImageSeriesInrTest );
-    CPPUNIT_TEST( SeriesDBInrTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( IoItkTest );
+CPPUNIT_TEST( testImageWriterJPG );
+CPPUNIT_TEST( testImageSeriesWriterJPG );
+CPPUNIT_TEST( testSaveLoadInr );
+CPPUNIT_TEST( ImageSeriesInrTest );
+CPPUNIT_TEST( SeriesDBInrTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
@@ -52,18 +40,10 @@ public:
     void ImageSeriesInrTest();
     void SeriesDBInrTest();
 
-private :
-
-    void executeService(
-            const SPTR(::fwData::Object)& obj,
-            const std::string& srvType,
-            const std::string& srvImpl,
-            const SPTR(::fwRuntime::EConfigurationElement)& cfg);
-
 };
 
 } //namespace ut
 } //namespace ioITK
 
-#endif //__IOITK_TEST_TU_IOITKTEST_HPP__
+#endif //__IOITK_UT_IOITKTEST_HPP__
 
diff --git a/Bundles/LeafIO/ioITK/test/tu/rc/profile.xml b/Bundles/LeafIO/ioITK/test/tu/rc/profile.xml
index 24ab135..bf7dffd 100644
--- a/Bundles/LeafIO/ioITK/test/tu/rc/profile.xml
+++ b/Bundles/LeafIO/ioITK/test/tu/rc/profile.xml
@@ -1,10 +1,9 @@
-<profile name="IoMfoTest" version="0.1">
+<profile name="ioITKTest" version="0.1">
 
     <activate id="dataReg" version="0-1" />
     <activate id="servicesReg" version="0-1" />
 
     <activate id="gui" version="0-1" />
-    <activate id="guiQt" version="0-1" />
 
     <activate id="io" version="0-1" />
     <activate id="ioITK" version="0-1" />
diff --git a/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp b/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp
index b7c3b2f..d408bec 100644
--- a/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp
+++ b/Bundles/LeafIO/ioITK/test/tu/src/IoItkTest.cpp
@@ -1,34 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
-#include <boost/filesystem.hpp>
-
-#include <fwTools/dateAndTime.hpp>
-#include <fwTools/System.hpp>
+#include "IoItkTest.hpp"
 
-#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwData/Object.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#include <fwDataTools/Image.hpp>
 
-#include <fwData/Object.hpp>
+#include <fwGui/registry/worker.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/registry/ServiceFactory.hpp>
 
 #include <fwTest/Data.hpp>
 #include <fwTest/generator/Image.hpp>
+#include <fwTest/helper/compare.hpp>
 
-#include <fwDataTools/Image.hpp>
+#include <fwThread/Worker.hpp>
 
-#include <fwServices/registry/ServiceFactory.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwTools/System.hpp>
+#include <fwTools/dateAndTime.hpp>
 
+#include <boost/assign/list_of.hpp>
+#include <boost/filesystem/operations.hpp>
 
-#include "IoItkTest.hpp"
 
 using namespace ::boost::assign;
 
@@ -43,25 +46,13 @@ namespace ut
 
 static const double EPSILON = 0.00001;
 
-//-----------------------------------------------------------------------------
-
-void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
-{
-    ::fwDataCamp::visitor::CompareObjects visitor;
-    visitor.compare(objRef, objComp);
-    SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
-    {
-        OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
-    }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
-}
-
 //------------------------------------------------------------------------------
 
 void IoItkTest::setUp()
 {
     // Set up context before running a test.
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    ::fwGui::registry::worker::init(worker);
 }
 
 //------------------------------------------------------------------------------
@@ -69,21 +60,22 @@ void IoItkTest::setUp()
 void IoItkTest::tearDown()
 {
     // Clean up after the test run.
+    ::fwGui::registry::worker::reset();
 }
 
 //------------------------------------------------------------------------------
 
-void IoItkTest::executeService(
-        const SPTR(::fwData::Object)& obj,
-        const std::string& srvType,
-        const std::string& srvImpl,
-        const SPTR(::fwRuntime::EConfigurationElement)& cfg )
+void executeService(
+    const SPTR(::fwData::Object)& obj,
+    const std::string& srvType,
+    const std::string& srvImpl,
+    const SPTR(::fwRuntime::EConfigurationElement)& cfg )
 {
     ::fwServices::IService::sptr srv
         = ::fwServices::registry::ServiceFactory::getDefault()->create(srvType, srvImpl);
 
     CPPUNIT_ASSERT(srv);
-    ::fwServices::OSR::registerService( obj , srv );
+    ::fwServices::OSR::registerService( obj, srv );
     srv->setConfiguration(cfg);
     CPPUNIT_ASSERT_NO_THROW(srv->configure());
     CPPUNIT_ASSERT_NO_THROW(srv->start());
@@ -108,13 +100,13 @@ void IoItkTest::testImageSeriesWriterJPG()
     ::boost::filesystem::create_directories(path);
 
     // Create Config
-    ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr srvCfg    = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr folderCfg = ::fwRuntime::EConfigurationElement::New("folder");
     folderCfg->setValue(path.string());
     srvCfg->addConfigurationElement(folderCfg);
 
     // Create and execute service
-    this->executeService(imageSeries, "::io::IWriter", "::ioITK::SJpgImageSeriesWriter", srvCfg);
+    executeService(imageSeries, "::io::IWriter", "::ioITK::SJpgImageSeriesWriter", srvCfg);
 
     // Remove path
     ::boost::filesystem::remove_all( path.string() );
@@ -134,13 +126,13 @@ void IoItkTest::testImageWriterJPG()
     ::boost::filesystem::create_directories( path );
 
     // Create Config
-    ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr srvCfg    = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr folderCfg = ::fwRuntime::EConfigurationElement::New("folder");
     folderCfg->setValue(path.string());
     srvCfg->addConfigurationElement(folderCfg);
 
     // Create and execute service
-    this->executeService( image, "::io::IWriter", "::ioITK::JpgImageWriterService", srvCfg );
+    executeService( image, "::io::IWriter", "::ioITK::JpgImageWriterService", srvCfg );
 
     // Remove path
     ::boost::filesystem::remove_all( path.string() );
@@ -167,17 +159,17 @@ void IoItkTest::testSaveLoadInr()
     ::boost::filesystem::create_directories( PATH.parent_path() );
 
     // Create Config
-    ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr srvCfg  = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr fileCfg = ::fwRuntime::EConfigurationElement::New("file");
     fileCfg->setValue(PATH.string());
     srvCfg->addConfigurationElement(fileCfg);
 
     // Create and execute service
-    this->executeService( image, "::io::IWriter", "::ioITK::InrImageWriterService", srvCfg );
+    executeService( image, "::io::IWriter", "::ioITK::InrImageWriterService", srvCfg );
 
     // load Image
     ::fwData::Image::sptr image2 = ::fwData::Image::New();
-    this->executeService( image2, "::io::IReader", "::ioITK::InrImageReaderService", srvCfg );
+    executeService( image2, "::io::IReader", "::ioITK::InrImageReaderService", srvCfg );
 
     ::boost::filesystem::remove_all( PATH.parent_path().string() );
 
@@ -186,14 +178,18 @@ void IoItkTest::testSaveLoadInr()
     image2->setSpacing(spacing);
 
     // check Image
-    compare(image, image2);
+    ::fwTest::helper::ExcludeSetType exclude;
+    exclude.insert("window_center");
+    exclude.insert("window_width");
+
+    CPPUNIT_ASSERT(::fwTest::helper::compare(image, image2, exclude));
 }
 
 //------------------------------------------------------------------------------
 
 void IoItkTest::ImageSeriesInrTest()
 {
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    ::fwData::Image::sptr image                = ::fwData::Image::New();
     ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::New();
     ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type::create("int16"));
 
@@ -208,17 +204,17 @@ void IoItkTest::ImageSeriesInrTest()
     ::boost::filesystem::create_directories( PATH.parent_path() );
 
     // Create Config
-    ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr srvCfg  = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr fileCfg = ::fwRuntime::EConfigurationElement::New("file");
     fileCfg->setValue(PATH.string());
     srvCfg->addConfigurationElement(fileCfg);
 
     // Create and execute service
-    this->executeService( imageSeries, "::io::IWriter", "::ioITK::SImageSeriesWriter", srvCfg );
+    executeService( imageSeries, "::io::IWriter", "::ioITK::SImageSeriesWriter", srvCfg );
 
     // load Image
     ::fwData::Image::sptr image2 = ::fwData::Image::New();
-    this->executeService( image2, "::io::IReader", "::ioITK::InrImageReaderService", srvCfg );
+    executeService( image2, "::io::IReader", "::ioITK::InrImageReaderService", srvCfg );
 
     ::boost::filesystem::remove_all( PATH.parent_path().string() );
 
@@ -227,7 +223,11 @@ void IoItkTest::ImageSeriesInrTest()
     image2->setSpacing(spacing);
 
     // check Image
-    compare(image, image2);
+    ::fwTest::helper::ExcludeSetType exclude;
+    exclude.insert("window_center");
+    exclude.insert("window_width");
+
+    CPPUNIT_ASSERT(::fwTest::helper::compare(image, image2, exclude));
 }
 
 //------------------------------------------------------------------------------
@@ -239,9 +239,16 @@ void IoItkTest::SeriesDBInrTest()
      * - skin.inr.gz : mask skin, type uint8, size: 512x512x134, spacing 0.781:0.781:1.6
      */
     const ::boost::filesystem::path imageFile = ::fwTest::Data::dir() / "fw4spl/image/inr/image.inr.gz";
-    const ::boost::filesystem::path skinFile = ::fwTest::Data::dir() / "fw4spl/image/inr/skin.inr.gz";
+    const ::boost::filesystem::path skinFile  = ::fwTest::Data::dir() / "fw4spl/image/inr/skin.inr.gz";
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imageFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(imageFile));
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + skinFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(skinFile));
+
     // Create Config
-    ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr srvCfg       = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr fileImageCfg = ::fwRuntime::EConfigurationElement::New("file");
     fileImageCfg->setValue(imageFile.string());
     srvCfg->addConfigurationElement(fileImageCfg);
@@ -252,10 +259,10 @@ void IoItkTest::SeriesDBInrTest()
 
     // load SeriesDB
     ::fwMedData::SeriesDB::sptr sdb = ::fwMedData::SeriesDB::New();
-    this->executeService( sdb, "::io::IReader", "::ioITK::SInrSeriesDBReader", srvCfg );
+    executeService( sdb, "::io::IReader", "::ioITK::SInrSeriesDBReader", srvCfg );
 
     ::fwData::Image::SpacingType spacing = list_of(0.781)(0.781)(1.6);
-    ::fwData::Image::SizeType size = list_of(512)(512)(134);
+    ::fwData::Image::SizeType size       = list_of(512)(512)(134);
 
     CPPUNIT_ASSERT_EQUAL(size_t(2), sdb->getContainer().size());
     ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::dynamicCast(sdb->getContainer()[0]);
diff --git a/Bundles/LeafIO/ioPacs/CMakeLists.txt b/Bundles/LeafIO/ioPacs/CMakeLists.txt
new file mode 100644
index 0000000..b5cedfd
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/CMakeLists.txt
@@ -0,0 +1,24 @@
+fwLoadProperties()
+
+
+find_package(Boost COMPONENTS filesystem REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+find_package(DCMTK REQUIRED)
+fwInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
+
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+fwForwardInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
+
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/LeafIO/ioPacs/Properties.cmake b/Bundles/LeafIO/ioPacs/Properties.cmake
new file mode 100644
index 0000000..6760550
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/Properties.cmake
@@ -0,0 +1,25 @@
+
+set( NAME ioPacs )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( PRIORITY 1 )
+set( DEPENDENCIES
+    fwCore
+    fwThread
+    fwCom
+    fwGui
+    fwGuiQt
+    fwPacsIO
+    fwRuntime
+    fwTools
+    fwData
+    fwMedData
+    fwMedDataTools
+    fwServices
+    gui
+    io
+    )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    )
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/Plugin.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/Plugin.hpp
new file mode 100644
index 0000000..2a80d20
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/Plugin.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_PLUGIN_HPP__
+#define __IOPACS_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+namespace ioPacs
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    ~Plugin() throw();
+
+    // Overrides
+    void start() throw(::fwRuntime::RuntimeException);
+
+    // Overrides
+    void stop() throw();
+
+};
+
+} // namespace ioPacs
+
+#endif //__IOPACS_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SPacsConfigurationEditor.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SPacsConfigurationEditor.hpp
new file mode 100644
index 0000000..f539f37
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SPacsConfigurationEditor.hpp
@@ -0,0 +1,141 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SPACSCONFIGURATIONEDITOR_HPP__
+#define __IOPACS_SPACSCONFIGURATIONEDITOR_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+#include <fwPacsIO/SeriesEnquirer.hpp>
+#include <gui/editor/IEditor.hpp>
+
+#include <QComboBox>
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+#include <QPushButton>
+#include <QSpinBox>
+#include <QWidget>
+
+#include <boost/filesystem/path.hpp>
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This editor service is used to edit a pacs configuration
+ */
+class IOPACS_CLASS_API SPacsConfigurationEditor : public QObject,
+                                                  public ::gui::editor::IEditor
+{
+Q_OBJECT;
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SPacsConfigurationEditor)( ::gui::editor::IEditor ) );
+    /**
+     * @brief Constructor
+     */
+    IOPACS_API SPacsConfigurationEditor() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOPACS_API virtual ~SPacsConfigurationEditor() throw();
+
+private:
+    IOPACS_API void modifiedNotify(::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration);
+
+private Q_SLOTS:
+    /// Slot called for pinging the pacs
+    IOPACS_API void pingPacs();
+
+    /// Slot called for changing the local application title
+    IOPACS_API void localApplicationTitleChanged();
+
+    /// Slot called for changing the pacs host name
+    IOPACS_API void pacsHostNameChanged();
+
+    /// Slot called for changing the pacs application title
+    IOPACS_API void pacsApplicationTitleChanged();
+
+    /**
+     * @brief Slot called for changing the pacs application port
+     * @param[in] value Pacs application port
+     */
+    IOPACS_API void pacsApplicationPortChanged(int value);
+
+    /// Slot called for changing the move application title
+    IOPACS_API void moveApplicationTitleChanged();
+
+    /**
+     * @brief Slot called for changing the move application port
+     * @param[in] value Move application port
+     */
+    IOPACS_API void moveApplicationPortChanged(int value);
+
+    /**
+     * @brief Slot called for changing the retrieve method
+     * @param[in] index Retrieve method index
+     */
+    IOPACS_API void retrieveMethodChanged(int index);
+
+protected:
+
+    /**
+     * @brief Configuring method. This method is used to configure the service.
+     *
+     * XML configuration sample:
+       @code{.xml}
+       <service uid="pacsConfigurationEditor" impl="::ioPacs::SPacsConfigurationEditor"
+         autoConnect="yes">
+       </service>
+       @endcode
+     */
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream );
+
+    /// Local application title
+    QPointer< QLineEdit > m_localApplicationTitleWidget;
+
+    /// Pacs host name
+    QPointer< QLineEdit > m_pacsHostNameWidget;
+
+    /// Pacs application title
+    QPointer< QLineEdit > m_pacsApplicationTitleWidget;
+
+    /// Pacs application port
+    QPointer< QSpinBox > m_pacsApplicationPortWidget;
+
+    /// Move application title
+    QPointer< QLineEdit > m_moveApplicationTitleWidget;
+
+    /// Move application port
+    QPointer< QSpinBox > m_moveApplicationPortWidget;
+
+    /// Retrieve method
+    QPointer< QComboBox > m_retrieveMethodWidget;
+
+    /// Test button
+    QPointer< QPushButton > m_pingPacsButtonWidget;
+
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SPACSCONFIGURATIONEDITOR_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SPacsConfigurationInitializer.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SPacsConfigurationInitializer.hpp
new file mode 100644
index 0000000..81c08a8
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SPacsConfigurationInitializer.hpp
@@ -0,0 +1,106 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SPACSCONFIGURATIONINITIALIZER_HPP__
+#define __IOPACS_SPACSCONFIGURATIONINITIALIZER_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+#include <fwServices/IController.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This service is used to initialize a Pacs Configuration data.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioPacs::SPacsConfigurationInitializer">
+            <inout key="config" uid="..." />
+             <config
+                 localApplicationTitle="VRRender"
+                 pacsHostName="mypacs.mycompany.com"
+                 pacsApplicationTitle="PACSNAME"
+                 pacsApplicationPort="11112"
+                 moveApplicationTitle="MoveApplicationTitle"
+                 moveApplicationPort="11110"
+                 retrieveMethod="GET"
+                 preferenceKey="PACS_CONFIGURATION"
+             />
+       </service>
+   @endcode
+ * @subsection In-Out In-Out:
+ * - \b config [::fwPacsIO::data::PacsConfiguration]: PACS configuration data.
+ */
+
+class IOPACS_CLASS_API SPacsConfigurationInitializer : public ::fwServices::IController
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SPacsConfigurationInitializer)( ::fwServices::IController ) );
+
+    /**
+     * @brief Constructor
+     */
+    IOPACS_API SPacsConfigurationInitializer() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOPACS_API virtual ~SPacsConfigurationInitializer() throw();
+
+protected:
+
+    /// Configuring method. This method is used to configure the service.
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream );
+
+protected:
+    /// Local application title
+    std::string m_localApplicationTitle;
+
+    /// Pacs host name
+    std::string m_pacsHostName;
+
+    /// Pacs application title
+    std::string m_pacsApplicationTitle;
+
+    /// Pacs port
+    unsigned short m_pacsApplicationPort;
+
+    /// Move application title
+    std::string m_moveApplicationTitle;
+
+    /// Move application port
+    unsigned short m_moveApplicationPort;
+
+    /// Request mode
+    ::fwPacsIO::data::PacsConfiguration::RETRIEVE_METHOD m_retrieveMethod;
+
+    /// The key to save/load the preferences
+    std::string m_preferenceKey;
+
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SPACSCONFIGURATIONINITIALIZER_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SProgressBarController.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SProgressBarController.hpp
new file mode 100644
index 0000000..10178b3
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SProgressBarController.hpp
@@ -0,0 +1,94 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SPROGRESSBARCONTROLLER_HPP__
+#define __IOPACS_SPROGRESSBARCONTROLLER_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+#include <fwServices/IController.hpp>
+
+#include <fwCore/mt/types.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This editor service is used to display a progress bar
+ */
+class IOPACS_CLASS_API SProgressBarController : public ::fwServices::IController
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SProgressBarController)( ::fwServices::IController ) );
+
+    /// Type of progress bar container
+    typedef std::map< std::string, ::fwGui::dialog::ProgressDialog::sptr > ProgressDialogContainerType;
+
+    /**
+     * @brief constructor
+     */
+    IOPACS_API SProgressBarController() throw();
+
+    /**
+     * @brief destructor
+     */
+    IOPACS_API virtual ~SProgressBarController() throw();
+
+protected:
+
+    /**
+     * @brief Configuring method. This method is used to configure the service.
+     *
+     * XML configuration sample:
+       @code{.xml}
+       <service uid="progressBarController" impl="::ioPacs::SProgressBarController"
+         autoConnect="no">
+       </service>
+       @endcode
+     */
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream );
+
+    /**
+     * @name Slots
+     * @{
+     */
+    void startProgress(std::string id);
+
+    void updateProgress(std::string id, float percentage, std::string message);
+
+    void stopProgress(std::string id);
+    /**
+     * @}
+     */
+
+    /// Progress Dialog
+    ProgressDialogContainerType m_progressDialogs;
+
+    ::fwCore::mt::Mutex m_mutex; ///< mutex for progress dialog access
+
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SPROGRESSBARCONTROLLER_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SQueryEditor.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SQueryEditor.hpp
new file mode 100644
index 0000000..9918d64
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SQueryEditor.hpp
@@ -0,0 +1,121 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SQUERYEDITOR_HPP__
+#define __IOPACS_SQUERYEDITOR_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+#include <fwPacsIO/SeriesEnquirer.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <gui/editor/IEditor.hpp>
+
+#include <QDateEdit>
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+#include <QPushButton>
+#include <QWidget>
+
+#include <boost/filesystem/path.hpp>
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This editor service is used to perform a IOPACS query on a pacs.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioPacs::SQueryEditor">
+            <in key="pacsConfig" uid="..." />
+            <inout key="seriesDB" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b pacsConfig [::fwPacsIO::data::PacsConfiguration]: PACS configuration data.
+ * @subsection In-Out In-Out:
+ * - \b seriesDB [::fwData::Object]: seriesDB where to push the queried data.
+ */
+class IOPACS_CLASS_API SQueryEditor : public QObject,
+                                      public ::gui::editor::IEditor
+{
+Q_OBJECT;
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SQueryEditor)( ::gui::editor::IEditor ) );
+
+    /// Constructor
+    IOPACS_API SQueryEditor() throw();
+
+    /// Destructor
+    IOPACS_API virtual ~SQueryEditor() throw();
+
+protected:
+
+    /// Configuring method. This method is used to configure the service.
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream );
+
+    /**
+     * @brief Display an error message
+     * @param[in] message Error message to display
+     */
+    IOPACS_API void displayErrorMessage(const std::string& message) const;
+
+private Q_SLOTS:
+    /// Slot called when querying on patient name
+    IOPACS_API void queryPatientName();
+
+    /// Slot called when querying on study date
+    IOPACS_API void queryStudyDate();
+
+    /**
+     * @brief Update the seriesDB with the series retrieved from the pacs
+     * @param[in] series Series which must be added to the SeriesDB
+     */
+    IOPACS_API void updateSeriesDB(::fwMedData::SeriesDB::ContainerType series);
+
+protected:
+    /// Patient Name Field
+    QPointer< QLineEdit > m_patientNameLineEdit;
+
+    /// Patient Name Query Button
+    QPointer< QPushButton > m_patientNameQueryButton;
+
+    /// Begin study date widget
+    QPointer< QDateEdit > m_beginStudyDateEdit;
+
+    /// End study date widget
+    QPointer< QDateEdit > m_endStudyDateEdit;
+
+    /// Study Date Query Button
+    QPointer< QPushButton > m_studyDateQueryButton;
+
+    /// Series enquirer
+    ::fwPacsIO::SeriesEnquirer::sptr m_seriesEnquirer;
+
+    /// Pacs Configuration object
+    ::fwPacsIO::data::PacsConfiguration::csptr m_pacsConfiguration;
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SQUERYEDITOR_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SSeriesPuller.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SSeriesPuller.hpp
new file mode 100644
index 0000000..c5acc14
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SSeriesPuller.hpp
@@ -0,0 +1,214 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SSERIESPULLER_HPP__
+#define __IOPACS_SSERIESPULLER_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+#include <fwPacsIO/SeriesEnquirer.hpp>
+#include <fwPacsIO/SeriesRetriever.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwServices/IController.hpp>
+#include <fwThread/Worker.hpp>
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <vector>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This service is used to pull series from a PACS.
+ *
+ * @section Signals Signals
+ * - \b progressed(std::string) : Signal to start the progress (bar id).
+ * - \b startedProgress(std::string, float, std::string) :  Signal to update the progress (bar id, percentage, message).
+ * - \b stoppedProgress(std::string) : Signal to stop the progress (bar id).
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::namespace::classname">
+            <in key="pacsConfig" uid="..." />
+            <in key="selectedSeries" uid="..." />
+            <inout key="seriesDB" uid="..." />
+            <config dicomReader="::ioGdcm::SSeriesDBReader" dicomReaderConfig="config" />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b pacsConfig [::fwPacsIO::data::PacsConfiguration]: PACS configuration data.
+ * - \b selectedSeries [::fwData::Vector]: List of DICOM series to pull from the PACS..
+ * @subsection In-Out In-Out:
+ * - \b seriesDB [::fwMedData::SeriesDB]: SeriesDB where to put the retrieved dicom series.
+ * @subsection Configuration Configuration:
+ * - \b dicomReader Reader type to use.
+ * - \b dicomReaderConfig Optional configuration for the DICOM Reader.
+ */
+
+class IOPACS_CLASS_API SSeriesPuller : public ::fwServices::IController
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesPuller)( ::fwServices::IController ) );
+
+    typedef ::fwMedData::SeriesDB::ContainerType DicomSeriesContainerType;
+    typedef std::vector< std::string > InstanceUIDContainerType;
+    typedef std::map < std::string, unsigned int > InstanceCountMapType;
+    typedef std::map < std::string, WPTR(::fwMedData::DicomSeries) > DicomSeriesMapType;
+
+    IOPACS_API static const ::fwCom::Slots::SlotKeyType s_READ_SLOT;
+    typedef ::fwCom::Slot<void (DicomSeriesContainerType)> ReadDicomSlotType;
+
+    IOPACS_API static const ::fwCom::Slots::SlotKeyType s_DISPLAY_SLOT;
+    typedef ::fwCom::Slot<void (const std::string&)> DisplayMessageSlotType;
+
+    /// Signal to start the progress (bar id)
+    typedef ::fwCom::Signal< void ( std::string ) > StartedProgressSignalType;
+    /// Signal to update the progress (bar id, percentage, message)
+    typedef ::fwCom::Signal< void ( std::string, float, std::string ) > ProgressedSignalType;
+    /// Signal to stop the progress (bar id)
+    typedef ::fwCom::Signal< void ( std::string ) > StoppedProgressSignalType;
+
+    /// Key in m_signals map of signal m_sigProgressed
+    static const ::fwCom::Signals::SignalKeyType s_PROGRESSED_SIG;
+    static const ::fwCom::Signals::SignalKeyType s_STARTED_PROGRESS_SIG;
+    static const ::fwCom::Signals::SignalKeyType s_STOPPED_PROGRESS_SIG;
+
+    /**
+     * @brief Constructor
+     */
+    IOPACS_API SSeriesPuller() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOPACS_API virtual ~SSeriesPuller() throw();
+
+protected:
+
+    /// Configuring method. This method is used to configure the service.
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream );
+
+protected:
+
+    /// Pull Series
+    IOPACS_API void pullSeries();
+
+    /**
+     * @brief Read local series
+     * @param[in] selectedSeries Dicom Series that must be read
+     */
+    IOPACS_API void readLocalSeries(DicomSeriesContainerType selectedSeries);
+
+    /**
+     * @brief Display an error message
+     * @param[in] message Error message to display
+     */
+    IOPACS_API void displayErrorMessage(const std::string& message) const;
+
+    /**
+     * @brief Store instance callback
+     * @param[in] seriesInstanceUID Series instance UID
+     * @param[in] instanceNumber Instance number
+     * @param[in] filePath File path
+     */
+    IOPACS_API void storeInstanceCallback(const std::string& seriesInstanceUID, unsigned int instanceNumber,
+                                          const std::string& filePath);
+
+
+
+    /// Slot to call readLocalSeries method
+    ReadDicomSlotType::sptr m_slotReadLocalSeries;
+
+    /// Slot to call displayErrorMessage method;
+    DisplayMessageSlotType::sptr m_slotDisplayMessage;
+
+    /// Slot to call storeInstanceCallback method using C-MOVE Requests
+    ::fwPacsIO::SeriesRetriever::ProgressCallbackSlotType::sptr m_slotStoreInstanceCallbackUsingMoveRequests;
+
+    /// Slot to call storeInstanceCallback method using C-GET Requests
+    ::fwPacsIO::SeriesEnquirer::ProgressCallbackSlotType::sptr m_slotStoreInstanceCallbackUsingGetRequests;
+
+    /// Signal emitted when the bar is progressing
+    ProgressedSignalType::sptr m_sigProgressed;
+
+    /// Signal emitted when the bar is starting
+    StartedProgressSignalType::sptr m_sigStartedProgress;
+
+    /// Signal emitted when the bar is stopping
+    StoppedProgressSignalType::sptr m_sigStoppedProgress;
+
+    /// Series enquirer
+    ::fwPacsIO::SeriesEnquirer::sptr m_seriesEnquirer;
+
+    /// Pacs Configuration object
+    ::fwPacsIO::data::PacsConfiguration::csptr m_pacsConfiguration;
+
+    /// Reader
+    ::io::IReader::sptr m_dicomReader;
+
+    /// Reader Config
+    std::string m_dicomReaderSrvConfig;
+
+    /// IOPACS Reader
+    std::string m_dicomReaderType;
+
+    /// Temporary SeriesDB
+    ::fwMedData::SeriesDB::sptr m_tempSeriesDB;
+
+    /// Destination SeriesDB
+    ::fwMedData::SeriesDB::sptr m_destinationSeriesDB;
+
+    /// Pull Worker
+    ::fwThread::Worker::sptr m_pullSeriesWorker;
+
+    /// Local Series
+    InstanceUIDContainerType m_localSeries;
+
+    /// Is pulling is set to true when we are pulling series
+    bool m_isPulling;
+
+    /// Progress Bar ID
+    std::string m_progressbarId;
+
+    /// Total number of downloaded series
+    long unsigned int m_seriesCount;
+
+    /// Index of the series being downloaded
+    unsigned int m_seriesIndex;
+
+    /// Total number of instances that must be downloaded
+    std::size_t m_instanceCount;
+
+    /// Map of Dicom series being pulled
+    DicomSeriesMapType m_pullingDicomSeriesMap;
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SSERIESPULLER_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SSeriesPusher.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SSeriesPusher.hpp
new file mode 100644
index 0000000..d0f9cd6
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SSeriesPusher.hpp
@@ -0,0 +1,165 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SSERIESPUSHER_HPP__
+#define __IOPACS_SSERIESPUSHER_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+#include <fwPacsIO/SeriesEnquirer.hpp>
+#include <fwServices/IController.hpp>
+#include <fwThread/Worker.hpp>
+
+#include <vector>
+
+namespace fwMedData
+{
+class Series;
+}
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This service is used to push a DICOM series to a PACS.
+ *
+ * @section Signals Signals
+ * - \b progressed(std::string) : Signal to start the progress (bar id).
+ * - \b startedProgress(std::string, float, std::string) :  Signal to update the progress (bar id, percentage, message).
+ * - \b stoppedProgress(std::string) : Signal to stop the progress (bar id).
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioPacs::SSeriesPusher">
+            <in key="pacsConfig" uid="..." />
+            <in key="selectedSeries" uid="..." />
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b pacsConfig [::fwPacsIO::data::PacsConfiguration]: PACS configuration data.
+ * - \b selectedSeries [::fwData::Vector]: List of DICOM series to push to the PACS.
+ */
+class IOPACS_CLASS_API SSeriesPusher : public ::fwServices::IController
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesPusher)( ::fwServices::IController ) );
+
+    typedef std::vector< CSPTR(::fwMedData::Series) > DicomSeriesContainerType;
+    typedef std::vector< ::boost::filesystem::path > DicomFileContainer;
+
+    IOPACS_API static const ::fwCom::Slots::SlotKeyType s_DISPLAY_SLOT;
+    typedef ::fwCom::Slot<void (const std::string&, bool)> DisplayMessageSlotType;
+
+    /// Signal to start the progress (bar id)
+    typedef ::fwCom::Signal< void ( std::string ) > StartedProgressSignalType;
+    /// Signal to update the progress (bar id, percentage, message)
+    typedef ::fwCom::Signal< void ( std::string, float, std::string ) > ProgressedSignalType;
+    /// Signal to stop the progress (bar id)
+    typedef ::fwCom::Signal< void ( std::string ) > StoppedProgressSignalType;
+
+    /// Key in m_signals map of signal m_sigProgressed
+    static const ::fwCom::Signals::SignalKeyType s_PROGRESSED_SIG;
+    static const ::fwCom::Signals::SignalKeyType s_STARTED_PROGRESS_SIG;
+    static const ::fwCom::Signals::SignalKeyType s_STOPPED_PROGRESS_SIG;
+
+    /**
+     * @brief Constructor
+     */
+    IOPACS_API SSeriesPusher() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOPACS_API virtual ~SSeriesPusher() throw();
+
+protected:
+
+    /// Does nothing.
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream);
+
+protected:
+
+    /**
+     * @brief Check whether some series are already on the PACS
+     * @return True if the series must be pushed
+     */
+    IOPACS_API bool checkSeriesOnPACS();
+
+    /// Pull Series
+    IOPACS_API void pushSeries();
+
+    /**
+     * @brief Display a message
+     * @param[in] message Message to display
+     * @param[in] error True if the message is an error messsage
+     */
+    IOPACS_API void displayMessage(const std::string& message, bool error) const;
+
+    /**
+     * @brief Progress callback
+     * @param[in] seriesInstanceUID Series instance UID
+     * @param[in] instanceNumber Instance number
+     * @param[in] filePath File path
+     */
+    IOPACS_API void progressCallback(const std::string& seriesInstanceUID, unsigned int instanceNumber,
+                                     const std::string& filePath);
+
+
+    /// Slot to call displayMessage method;
+    DisplayMessageSlotType::sptr m_slotDisplayMessage;
+
+    /// Slot to call progressCallback method
+    ::fwPacsIO::SeriesEnquirer::ProgressCallbackSlotType::sptr m_slotProgressCallback;
+
+    /// Signal emitted when the bar is progressing
+    ProgressedSignalType::sptr m_sigProgressed;
+
+    /// Signal emitted when the bar is starting
+    StartedProgressSignalType::sptr m_sigStartedProgress;
+
+    /// Signal emitted when the bar is stopping
+    StoppedProgressSignalType::sptr m_sigStoppedProgress;
+
+    /// Progress Bar ID
+    std::string m_progressbarId;
+
+    /// Series enquirer
+    ::fwPacsIO::SeriesEnquirer::sptr m_seriesEnquirer;
+
+    /// Pacs Configuration object
+    ::fwPacsIO::data::PacsConfiguration::csptr m_pacsConfiguration;
+
+    /// Push Worker
+    ::fwThread::Worker::sptr m_pushSeriesWorker;
+
+    /// Is pushing is set to true when we are puishing series
+    bool m_isPushing;
+
+    /// Total number of instances that must be uploaded
+    long unsigned int m_instanceCount;
+
+
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SSERIESPUSHER_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/SSliceIndexDicomPullerEditor.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/SSliceIndexDicomPullerEditor.hpp
new file mode 100644
index 0000000..3f83b69
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/SSliceIndexDicomPullerEditor.hpp
@@ -0,0 +1,225 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_SSLICEINDEXDICOMPULLEREDITOR_HPP__
+#define __IOPACS_SSLICEINDEXDICOMPULLEREDITOR_HPP__
+
+#include "ioPacs/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+#include <fwPacsIO/SeriesEnquirer.hpp>
+#include <fwThread/Worker.hpp>
+
+#include <gui/editor/IEditor.hpp>
+#include <io/IReader.hpp>
+
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+#include <QSlider>
+#include <QWidget>
+
+#include <boost/asio/deadline_timer.hpp>
+#include <boost/asio/io_service.hpp>
+#include <boost/filesystem/path.hpp>
+
+namespace fwData
+{
+class Composite;
+class Integer;
+}
+
+namespace fwThread
+{
+class Timer;
+}
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace fwRuntime
+{
+struct ConfigurationElement;
+}
+
+namespace ioPacs
+{
+
+/**
+ * @brief   This editor service is used to select a slice index and pull the image from the pacs if it is not
+ *          available on the local computer.
+ * *
+ * @section Slots Slots
+ * - \b readImage(size_t) : Read the given slice.
+ * - \b displayErrorMessage(size_t) : display an error message.
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::ioDicom::SSliceIndexDicomPullerEditor">
+           <in key="pacsConfig" uid="..." />
+           <inout key="series" uid="..." />
+           <out key="image" uid="..." />
+           <config dicomReader="::ioGdcm::SSeriesDBReader" delay="500">
+               <dicomReaderConfig> <!-- optional -->
+                   <!-- here goes the configuration for the dicom reader implementation -->
+               </dicomReaderConfig>
+           </config>
+       </service>
+   @endcode
+ * @subsection Input Input:
+ * - \b pacsConfig [::fwPacsIO::data::PacsConfiguration]: PACS configuration data.
+ * @subsection In-Out In-Out:
+ * - \b series [::fwMedData::DicomSeries]: Dicom Series where to extract the images.
+ * @subsection Output Output:
+ * - \b image [::fwData::Image]: Downloaded image.
+ * @subsection Configuration Configuration:
+ * - \b dicomReader Reader type to use.
+ * - \b dicomReaderConfig Optional configuration for the DICOM Reader.
+ */
+class IOPACS_CLASS_API SSliceIndexDicomPullerEditor : public QObject,
+                                                      public ::gui::editor::IEditor
+{
+Q_OBJECT;
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSliceIndexDicomPullerEditor)( ::gui::editor::IEditor ) );
+
+    IOPACS_API static const ::fwCom::Slots::SlotKeyType s_READ_IMAGE_SLOT;
+    typedef ::fwCom::Slot<void (std::size_t)> ReadImageSlotType;
+
+    IOPACS_API static const ::fwCom::Slots::SlotKeyType s_DISPLAY_MESSAGE_SLOT;
+    typedef ::fwCom::Slot<void (const std::string&)> DisplayMessageSlotType;
+
+    /**
+     * @brief Constructor
+     */
+    IOPACS_API SSliceIndexDicomPullerEditor() throw();
+
+    /**
+     * @brief Destructor
+     */
+    IOPACS_API virtual ~SSliceIndexDicomPullerEditor() throw();
+
+private Q_SLOTS:
+    /**
+     * @brief Slot called when the slider is moved
+     * @param[in] value Slider value
+     */
+    IOPACS_API void changeSliceIndex(int value);
+
+protected:
+
+    /// Configuring method. This method is used to configure the service.
+    IOPACS_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void starting() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API virtual void stopping() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void updating() throw(::fwTools::Failed);
+
+    /// Override
+    IOPACS_API void info(std::ostream& _sstream );
+
+    /// Function called when a new slice must be displayed
+    IOPACS_API void triggerNewSlice();
+
+    /**
+     * @brief Read the selected image
+     * @param[in] selectedSliceIndex Selected slice of the image that must be read
+     */
+    IOPACS_API void readImage(std::size_t selectedSliceIndex);
+
+    /// Pull the selected slice from the pacs
+    IOPACS_API void pullInstance();
+
+    /**
+     * @brief Displays a dialog box with the error message
+     */
+    IOPACS_API void displayErrorMessage(const std::string& message) const;
+
+    /**
+     * @brief Store instance callback
+     * @param[in] seriesInstanceUID Series instance UID
+     * @param[in] instanceNumber Instance number
+     * @param[in] filePath File path
+     */
+    IOPACS_API void storeInstanceCallback(
+        const std::string& seriesInstanceUID, unsigned int instanceNumber, const std::string& filePath);
+
+    /// Slot to call readLocalSeries method
+    ReadImageSlotType::sptr m_slotReadImage;
+
+    /// Slot to call displayErrorMessage method;
+    DisplayMessageSlotType::sptr m_slotDisplayMessage;
+
+    /// Slice index slider
+    QPointer< QSlider > m_sliceIndexSlider;
+
+    /// Slice index line edit
+    QPointer< QLineEdit > m_sliceIndexLineEdit;
+
+    /// Number of instances
+    std::size_t m_numberOfSlices;
+
+    /// Pacs Configuration UID
+    std::string m_pacsConfigurationUID;
+
+    /// Pacs Configuration object
+    ::fwPacsIO::data::PacsConfiguration::csptr m_pacsConfiguration;
+
+    /// IOPACS Reader
+    std::string m_dicomReaderType;
+
+    /// Reader
+    ::io::IReader::wptr m_dicomReader;
+
+    /// Image Key
+    std::string m_imageKey;
+
+    /// Composite UID
+    std::string m_compositeUID;
+
+    /// Composite
+    SPTR(::fwData::Composite) m_composite;
+
+    /// Temporary SeriesDB
+    SPTR(::fwMedData::SeriesDB) m_tempSeriesDB;
+
+    /// Axial slice index
+    SPTR(fwData::Integer) m_axialIndex;
+    /// Frontal slice index
+    SPTR(::fwData::Integer) m_frontalIndex;
+    /// Sagittal slice index
+    SPTR(::fwData::Integer) m_sagittalIndex;
+
+    /// Pull Worker
+    ::fwThread::Worker::sptr m_pullSeriesWorker;
+
+    /// Series enquirer
+    ::fwPacsIO::SeriesEnquirer::sptr m_seriesEnquirer;
+
+    /// Timer used to generate the new slice selection delay
+    SPTR(::fwThread::Timer) m_delayTimer2;
+
+    /// Delay
+    unsigned int m_delay;
+
+    /// Optional configuration to set to reader implementation
+    SPTR(::fwRuntime::ConfigurationElement) m_readerConfig;
+};
+
+} // namespace ioPacs
+
+#endif // __IOPACS_SSLICEINDEXDICOMPULLEREDITOR_HPP__
diff --git a/Bundles/LeafIO/ioPacs/include/ioPacs/namespace.hpp b/Bundles/LeafIO/ioPacs/include/ioPacs/namespace.hpp
new file mode 100644
index 0000000..6cd5cc5
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/include/ioPacs/namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_NAMESPACE_HPP__
+#define __IOPACS_NAMESPACE_HPP__
+
+/**
+ * @brief ioPacs contains services use to deal with PACS using DCMTK library.
+ */
+namespace ioPacs
+{
+}
+#endif /* __IOPACS_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafIO/ioPacs/rc/plugin.xml b/Bundles/LeafIO/ioPacs/rc/plugin.xml
new file mode 100644
index 0000000..1ac011e
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/rc/plugin.xml
@@ -0,0 +1,57 @@
+<plugin id="ioPacs" class="ioPacs::Plugin"  version="@DASH_VERSION@" >
+    <library name="ioPacs" />
+
+    <requirement id="dataReg"/>
+    <requirement id="gui" />
+    <requirement id="io" />
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::ioPacs::SPacsConfigurationEditor</service>
+        <object>::fwPacsIO::data::PacsConfiguration</object>
+        <desc>Pacs Configuration Editor</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::ioPacs::SPacsConfigurationInitializer</service>
+        <object>::fwPacsIO::data::PacsConfiguration</object>
+        <desc>Pacs Configuration Initializer</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::ioPacs::SProgressBarController</service>
+        <object>::fwData::Composite</object>
+        <desc>Progress Bar Controller</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::ioPacs::SQueryEditor</service>
+        <object>::fwMedData::SeriesDB</object>
+        <desc>Query Editor</desc>
+        </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::ioPacs::SSeriesPuller</service>
+        <object>::fwData::Vector</object>
+        <desc>Pull Series Controller</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::ioPacs::SSeriesPusher</service>
+        <object>::fwData::Object</object>
+        <desc>Push Series Controller</desc>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::ioPacs::SSliceIndexDicomPullerEditor</service>
+        <object>::fwMedData::DicomSeries</object>
+        <desc>Slice Index Dicom Puller Editor</desc>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/Plugin.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/Plugin.cpp
new file mode 100644
index 0000000..afafb3d
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/Plugin.cpp
@@ -0,0 +1,30 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/macros.hpp>
+
+namespace ioPacs
+{
+
+using namespace ::fwRuntime::utils;
+static GenericExecutableFactoryRegistrar<Plugin> registrar("ioPacs::Plugin");
+
+Plugin::~Plugin() throw()
+{
+}
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+void Plugin::stop() throw()
+{
+}
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationEditor.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationEditor.cpp
new file mode 100644
index 0000000..4e0aef1
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationEditor.cpp
@@ -0,0 +1,312 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SPacsConfigurationEditor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwPacsIO/exceptions/Base.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwServices/macros.hpp>
+
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QVBoxLayout>
+
+#include <boost/foreach.hpp>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::ioPacs::SPacsConfigurationEditor,
+                         ::fwPacsIO::data::PacsConfiguration );
+
+//------------------------------------------------------------------------------
+
+SPacsConfigurationEditor::SPacsConfigurationEditor() throw()
+{
+}
+//------------------------------------------------------------------------------
+
+SPacsConfigurationEditor::~SPacsConfigurationEditor() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::info(std::ostream& _sstream )
+{
+    _sstream << "SPacsConfigurationEditor::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    SLM_ASSERT("Pacs configuration object should not be null.", pacsConfiguration);
+
+
+    ::fwGui::IGuiContainerSrv::create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+    QGridLayout* gridLayout  = new QGridLayout();
+    container->setLayout(gridLayout);
+
+    // Local application title
+    m_localApplicationTitleWidget = new QLineEdit();
+    m_localApplicationTitleWidget->setText(pacsConfiguration->getLocalApplicationTitle().c_str());
+    gridLayout->addWidget(new QLabel("Local application title:"),0, 0);
+    gridLayout->addWidget(m_localApplicationTitleWidget,0, 1);
+
+    // Pacs host name
+    m_pacsHostNameWidget = new QLineEdit();
+    m_pacsHostNameWidget->setText(pacsConfiguration->getPacsHostName().c_str());
+    gridLayout->addWidget(new QLabel("Pacs host name:"),2, 0);
+    gridLayout->addWidget(m_pacsHostNameWidget,2, 1);
+
+    // Pacs application title
+    m_pacsApplicationTitleWidget = new QLineEdit();
+    m_pacsApplicationTitleWidget->setText(pacsConfiguration->getPacsApplicationTitle().c_str());
+    gridLayout->addWidget(new QLabel("Pacs application title:"),3, 0);
+    gridLayout->addWidget(m_pacsApplicationTitleWidget,3, 1);
+
+    // Pacs application port
+    m_pacsApplicationPortWidget = new QSpinBox();
+    m_pacsApplicationPortWidget->setRange(0,65535);
+    m_pacsApplicationPortWidget->setValue(pacsConfiguration->getPacsApplicationPort());
+    gridLayout->addWidget(new QLabel("Pacs application port:"),4, 0);
+    gridLayout->addWidget(m_pacsApplicationPortWidget,4, 1);
+
+    // Move application title
+    m_moveApplicationTitleWidget = new QLineEdit();
+    m_moveApplicationTitleWidget->setText(pacsConfiguration->getMoveApplicationTitle().c_str());
+    gridLayout->addWidget(new QLabel("Move application title:"),5, 0);
+    gridLayout->addWidget(m_moveApplicationTitleWidget,5, 1);
+
+    // Move application port
+    m_moveApplicationPortWidget = new QSpinBox();
+    m_moveApplicationPortWidget->setRange(0,65535);
+    m_moveApplicationPortWidget->setValue(pacsConfiguration->getMoveApplicationPort());
+    gridLayout->addWidget(new QLabel("Move application port:"),6, 0);
+    gridLayout->addWidget(m_moveApplicationPortWidget,6, 1);
+
+    // Retrieve method
+    m_retrieveMethodWidget = new QComboBox();
+    m_retrieveMethodWidget->addItem("Move");
+    m_retrieveMethodWidget->addItem("Get");
+    m_retrieveMethodWidget->setCurrentIndex(
+        (pacsConfiguration->getRetrieveMethod() == ::fwPacsIO::data::PacsConfiguration::MOVE_RETRIEVE_METHOD) ? 0 : 1);
+    gridLayout->addWidget(new QLabel("Retrieve method:"),7, 0);
+    gridLayout->addWidget(m_retrieveMethodWidget,7, 1);
+
+    // Test button
+    m_pingPacsButtonWidget = new QPushButton("Ping Pacs");
+    gridLayout->addWidget(m_pingPacsButtonWidget, 8,0,1,2);
+
+    // Connect the signals
+    QObject::connect(m_pingPacsButtonWidget, SIGNAL(clicked()), this, SLOT(pingPacs()));
+    QObject::connect(m_localApplicationTitleWidget, SIGNAL(editingFinished()), this, SLOT(
+                         localApplicationTitleChanged()));
+    QObject::connect(m_pacsHostNameWidget, SIGNAL(editingFinished()), this, SLOT(pacsHostNameChanged()));
+    QObject::connect(m_pacsApplicationTitleWidget, SIGNAL(editingFinished()), this,
+                     SLOT(pacsApplicationTitleChanged()));
+    QObject::connect(m_pacsApplicationPortWidget, SIGNAL(valueChanged(int)), this,
+                     SLOT(pacsApplicationPortChanged(int)));
+    QObject::connect(m_moveApplicationTitleWidget, SIGNAL(editingFinished()), this,
+                     SLOT(moveApplicationTitleChanged()));
+    QObject::connect(m_moveApplicationPortWidget, SIGNAL(valueChanged(int)), this,
+                     SLOT(moveApplicationPortChanged(int)));
+    QObject::connect(m_retrieveMethodWidget, SIGNAL(currentIndexChanged(int)), this, SLOT(retrieveMethodChanged(int)));
+
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    // Disconnect the signals
+    QObject::disconnect(m_pingPacsButtonWidget, SIGNAL(clicked()), this, SLOT(pingPacs()));
+    QObject::disconnect(m_localApplicationTitleWidget, SIGNAL(editingFinished()), this,
+                        SLOT(localApplicationTitleChanged()));
+    QObject::disconnect(m_pacsHostNameWidget, SIGNAL(editingFinished()), this, SLOT(pacsHostNameChanged()));
+    QObject::disconnect(m_pacsApplicationTitleWidget, SIGNAL(editingFinished()), this,
+                        SLOT(pacsApplicationTitleChanged()));
+    QObject::disconnect(m_pacsApplicationPortWidget, SIGNAL(valueChanged(int)), this,
+                        SLOT(pacsApplicationPortChanged(int)));
+    QObject::disconnect(m_moveApplicationTitleWidget, SIGNAL(editingFinished()), this,
+                        SLOT(moveApplicationTitleChanged()));
+    QObject::disconnect(m_moveApplicationPortWidget, SIGNAL(valueChanged(int)), this,
+                        SLOT(moveApplicationPortChanged(int)));
+    QObject::disconnect(m_retrieveMethodWidget, SIGNAL(currentIndexChanged(int)), this,
+                        SLOT(retrieveMethodChanged(int)));
+
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::configuring() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    ::fwGui::IGuiContainerSrv::initialize();
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::pingPacs()
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration
+        = this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+
+    ::fwPacsIO::SeriesEnquirer::sptr seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+
+    bool success = false;
+    try
+    {
+        seriesEnquirer->initialize(
+            pacsConfiguration->getLocalApplicationTitle(),
+            pacsConfiguration->getPacsHostName(),
+            pacsConfiguration->getPacsApplicationPort(),
+            pacsConfiguration->getPacsApplicationTitle(),
+            pacsConfiguration->getMoveApplicationTitle());
+        seriesEnquirer->connect();
+        success = seriesEnquirer->pingPacs();
+        seriesEnquirer->disconnect();
+    }
+    catch (::fwPacsIO::exceptions::Base& exception)
+    {
+        SLM_TRACE(exception.what());
+        success = false;
+    }
+
+    // Display a message with the ping result.
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setTitle("Ping Pacs");
+    if(success)
+    {
+        messageBox.setMessage( "Ping succeed !" );
+    }
+    else
+    {
+        messageBox.setMessage( "Ping failed !" );
+    }
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.show();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::modifiedNotify(::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration)
+{
+    auto sig = pacsConfiguration->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::localApplicationTitleChanged()
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setLocalApplicationTitle(m_localApplicationTitleWidget->text().toStdString());
+
+    modifiedNotify(pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::pacsHostNameChanged()
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setPacsHostName(m_pacsHostNameWidget->text().toStdString());
+
+    modifiedNotify(pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::pacsApplicationTitleChanged()
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setPacsApplicationTitle(m_pacsApplicationTitleWidget->text().toStdString());
+
+    modifiedNotify(pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::pacsApplicationPortChanged(int value)
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setPacsApplicationPort(static_cast<unsigned short>(value));
+
+    modifiedNotify(pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::moveApplicationTitleChanged()
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setMoveApplicationTitle(m_moveApplicationTitleWidget->text().toStdString());
+
+    modifiedNotify(pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+
+void SPacsConfigurationEditor::moveApplicationPortChanged(int value)
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setMoveApplicationPort(static_cast<unsigned short>(value));
+
+    modifiedNotify(pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationEditor::retrieveMethodChanged(int index)
+{
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+    pacsConfiguration->setRetrieveMethod(
+        (index==
+         0) ? (::fwPacsIO::data::PacsConfiguration::MOVE_RETRIEVE_METHOD): (::fwPacsIO::data::PacsConfiguration::
+                                                                            GET_RETRIEVE_METHOD));
+
+    modifiedNotify(pacsConfiguration);
+}
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp
new file mode 100644
index 0000000..8c2b142
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SPacsConfigurationInitializer.cpp
@@ -0,0 +1,249 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SPacsConfigurationInitializer.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <utility>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::fwServices::IController, ::ioPacs::SPacsConfigurationInitializer,
+                         ::fwPacsIO::data::PacsConfiguration );
+
+//------------------------------------------------------------------------------
+
+SPacsConfigurationInitializer::SPacsConfigurationInitializer() throw()
+{
+}
+//------------------------------------------------------------------------------
+
+SPacsConfigurationInitializer::~SPacsConfigurationInitializer() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationInitializer::info(std::ostream& _sstream )
+{
+    _sstream << "SPacsConfigurationInitializer::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationInitializer::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationInitializer::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+template<typename T, typename CAST_T = T>
+struct SetFromConfig
+{
+    void operator()(::fwData::Composite::sptr config, std::string const& confName, T& attribute)
+    {
+        if(config)
+        {
+            ::fwData::Composite::iterator it = config->find(confName);
+            if(it != config->end())
+            {
+                ::fwData::String::sptr obj = ::fwData::String::dynamicCast(it->second);
+                attribute = T(::boost::lexical_cast<CAST_T>(obj->value()));
+            }
+        }
+    }
+};
+
+//------------------------------------------------------------------------------
+
+std::pair< ::fwServices::IService::sptr, ::fwData::Composite::sptr> getPreferences()
+{
+    ::fwData::Composite::sptr prefs;
+
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+
+    ::fwServices::IService::sptr prefService;
+    if(!preferencesServicesList.empty())
+    {
+        prefService = *preferencesServicesList.begin();
+    }
+
+    if(prefService)
+    {
+        prefs = prefService->getObject< ::fwData::Composite>();
+    }
+
+    return std::make_pair(prefService, prefs);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationInitializer::configuring() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    SLM_ASSERT("The service ::ioPacs::SPacsConfigurationInitializer must have a \"config\" element.",
+               config);
+
+    bool success;
+
+    /// Local application title
+    ::boost::tie(success, m_localApplicationTitle) = config->getSafeAttributeValue("localApplicationTitle");
+    SLM_ASSERT("It should be a \"localApplicationTitle\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+
+    /// Pacs host name
+    ::boost::tie(success, m_pacsHostName) = config->getSafeAttributeValue("pacsHostName");
+    SLM_ASSERT("It should be a \"pacsHostName\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+
+    /// Pacs application title
+    ::boost::tie(success, m_pacsApplicationTitle) = config->getSafeAttributeValue("pacsApplicationTitle");
+    SLM_ASSERT("It should be a \"pacsApplicationTitle\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+
+    /// Pacs port
+    std::string pacsApplicationPort;
+    ::boost::tie(success, pacsApplicationPort) = config->getSafeAttributeValue("pacsApplicationPort");
+    SLM_ASSERT("It should be a \"pacsApplicationPort\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+    m_pacsApplicationPort = ::boost::lexical_cast< unsigned short >(pacsApplicationPort.c_str());
+
+    /// Move application title
+    ::boost::tie(success, m_moveApplicationTitle) = config->getSafeAttributeValue("moveApplicationTitle");
+    SLM_ASSERT("It should be a \"moveApplicationTitle\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+
+    /// Move application port
+    std::string moveApplicationPort;
+    ::boost::tie(success, moveApplicationPort) = config->getSafeAttributeValue("moveApplicationPort");
+    SLM_ASSERT("It should be a \"moveApplicationPort\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+    m_moveApplicationPort = ::boost::lexical_cast< unsigned short >(moveApplicationPort.c_str());
+
+    /// Retrieve Method
+    std::string retrieveMethod;
+    ::boost::tie(success, retrieveMethod) = config->getSafeAttributeValue("retrieveMethod");
+    SLM_ASSERT("It should be a \"retrieveMethod\" tag in the "
+               "::ioPacs::SPacsConfigurationInitializer config element.", success);
+    m_retrieveMethod = (retrieveMethod == "GET") ?
+                       (::fwPacsIO::data::PacsConfiguration::GET_RETRIEVE_METHOD):
+                       (::fwPacsIO::data::PacsConfiguration::MOVE_RETRIEVE_METHOD);
+
+    /// Preference Key
+    m_preferenceKey = config->getAttributeValue("preferenceKey");
+
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+
+    // Set information from xml and update PacsConfiguration
+    if(!m_preferenceKey.empty())
+    {
+        ::fwData::Composite::sptr prefs = getPreferences().second;
+        if(prefs)
+        {
+            ::fwData::Composite::sptr config = ::fwData::Composite::dynamicCast((*prefs)[m_preferenceKey]);
+
+            SetFromConfig< std::string > setFromConfig;
+            SetFromConfig< unsigned short > setFromConfigShort;
+            SetFromConfig< ::fwPacsIO::data::PacsConfiguration::RETRIEVE_METHOD, int > setFromConfigEnum;
+
+            setFromConfig(config, "LocalApplicationTitle", m_localApplicationTitle);
+            setFromConfig(config, "PacsHostName", m_pacsHostName);
+            setFromConfig(config, "PacsApplicationTitle", m_pacsApplicationTitle);
+            setFromConfigShort(config, "PacsApplicationPort", m_pacsApplicationPort);
+            setFromConfig(config, "MoveApplicationTitle", m_moveApplicationTitle);
+            setFromConfigShort(config, "MoveApplicationPort", m_moveApplicationPort);
+            setFromConfigEnum(config, "RetrieveMethod", m_retrieveMethod);
+        }
+    }
+
+    pacsConfiguration->setLocalApplicationTitle(m_localApplicationTitle);
+    pacsConfiguration->setPacsHostName(m_pacsHostName);
+    pacsConfiguration->setPacsApplicationTitle(m_pacsApplicationTitle);
+    pacsConfiguration->setPacsApplicationPort(m_pacsApplicationPort);
+    pacsConfiguration->setMoveApplicationTitle(m_moveApplicationTitle);
+    pacsConfiguration->setMoveApplicationPort(m_moveApplicationPort);
+    pacsConfiguration->setRetrieveMethod(m_retrieveMethod);
+}
+
+//------------------------------------------------------------------------------
+
+void SPacsConfigurationInitializer::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration =
+        this->getObject< ::fwPacsIO::data::PacsConfiguration >();
+
+    // Check if the user has changed the Pacs configuration and update the local var
+    if(pacsConfiguration->getLocalApplicationTitle   () != m_localApplicationTitle
+       || pacsConfiguration->getPacsHostName            () != m_pacsHostName
+       || pacsConfiguration->getPacsApplicationTitle    () != m_pacsApplicationTitle
+       || pacsConfiguration->getPacsApplicationPort     () != m_pacsApplicationPort
+       || pacsConfiguration->getMoveApplicationTitle    () != m_moveApplicationTitle
+       || pacsConfiguration->getMoveApplicationPort     () != m_moveApplicationPort
+       || pacsConfiguration->getRetrieveMethod          () != m_retrieveMethod
+       )
+    {
+        m_localApplicationTitle = pacsConfiguration->getLocalApplicationTitle   ();
+        m_pacsHostName          = pacsConfiguration->getPacsHostName            ();
+        m_pacsApplicationTitle  = pacsConfiguration->getPacsApplicationTitle    ();
+        m_pacsApplicationPort   = pacsConfiguration->getPacsApplicationPort     ();
+        m_moveApplicationTitle  = pacsConfiguration->getMoveApplicationTitle    ();
+        m_moveApplicationPort   = pacsConfiguration->getMoveApplicationPort     ();
+        m_retrieveMethod        = pacsConfiguration->getRetrieveMethod          ();
+    }
+
+    // If a preference key is set, save the local var to the preferences
+    if(!m_preferenceKey.empty())
+    {
+        std::pair< ::fwServices::IService::sptr, ::fwData::Composite::sptr>  prefs_pair = getPreferences();
+        ::fwServices::IService::sptr prefService = prefs_pair.first;
+        ::fwData::Composite::sptr prefs          = prefs_pair.second;
+        if(prefs && (prefs->find(m_preferenceKey) == prefs->end() || !(*prefs)[m_preferenceKey]))
+        {
+            (*prefs)[m_preferenceKey] = ::fwData::Composite::New();
+        }
+        if(prefs)
+        {
+            ::fwData::Composite::sptr config   = ::fwData::Composite::dynamicCast((*prefs)[m_preferenceKey]);
+            (*config)["LocalApplicationTitle"] = ::fwData::String::New(m_localApplicationTitle);
+            (*config)["PacsHostName"         ] = ::fwData::String::New(m_pacsHostName);
+            (*config)["PacsApplicationTitle" ] = ::fwData::String::New(m_pacsApplicationTitle);
+            (*config)["PacsApplicationPort"  ] =
+                ::fwData::String::New(::boost::lexical_cast<std::string>(m_pacsApplicationPort));
+            (*config)["MoveApplicationTitle" ] = ::fwData::String::New(m_moveApplicationTitle);
+            (*config)["MoveApplicationPort"  ] =
+                ::fwData::String::New(::boost::lexical_cast<std::string>(m_moveApplicationPort));
+            (*config)["RetrieveMethod"       ] =
+                ::fwData::String::New(::boost::lexical_cast<std::string>(m_retrieveMethod));
+        }
+        if(prefService)
+        {
+            prefService->update();
+        }
+    }
+}
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SProgressBarController.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SProgressBarController.cpp
new file mode 100644
index 0000000..3740a9f
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SProgressBarController.cpp
@@ -0,0 +1,114 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SProgressBarController.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+#include <fwData/Composite.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwGuiQt/dialog/ProgressDialog.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::fwServices::IController, ::ioPacs::SProgressBarController, ::fwData::Composite );
+
+static const ::fwCom::Slots::SlotKeyType s_START_PROGRESS_SLOT  = "startProgress";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_PROGRESS_SLOT = "updateProgress";
+static const ::fwCom::Slots::SlotKeyType s_STOP_PROGRESS_SLOT   = "stopProgress";
+
+//------------------------------------------------------------------------------
+
+SProgressBarController::SProgressBarController() throw()
+{
+    newSlot(s_START_PROGRESS_SLOT, &SProgressBarController::startProgress, this);
+    newSlot(s_UPDATE_PROGRESS_SLOT, &SProgressBarController::updateProgress, this);
+    newSlot(s_STOP_PROGRESS_SLOT, &SProgressBarController::stopProgress, this);
+}
+//------------------------------------------------------------------------------
+
+SProgressBarController::~SProgressBarController() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::info(std::ostream& _sstream )
+{
+    _sstream << "SProgressBarController::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::configuring() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::startProgress(std::string id)
+{
+    ::fwCore::mt::ScopedLock lock(m_mutex);
+    m_progressDialogs[id] = ::fwGui::dialog::ProgressDialog::New();
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::updateProgress(std::string id, float percentage, std::string message)
+{
+    ::fwCore::mt::ScopedLock lock(m_mutex);
+    if(m_progressDialogs.find(id) != m_progressDialogs.end())
+    {
+        (*m_progressDialogs[id])(percentage, message);
+        m_progressDialogs[id]->setMessage(message);
+    }
+    else
+    {
+        SLM_WARN("Trying to update a progress bar which is not started !");
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SProgressBarController::stopProgress(std::string id)
+{
+    ::fwCore::mt::ScopedLock lock(m_mutex);
+    m_progressDialogs.erase(id);
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SQueryEditor.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SQueryEditor.cpp
new file mode 100644
index 0000000..cd05892
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SQueryEditor.cpp
@@ -0,0 +1,265 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SQueryEditor.hpp"
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwPacsIO/exceptions/Base.hpp>
+#include <fwPacsIO/helper/Series.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/foreach.hpp>
+
+#include <dcmtk/dcmnet/scu.h>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::ioPacs::SQueryEditor, ::fwMedData::SeriesDB );
+
+//------------------------------------------------------------------------------
+
+SQueryEditor::SQueryEditor() throw()
+{
+}
+//------------------------------------------------------------------------------
+
+SQueryEditor::~SQueryEditor() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::info(std::ostream& _sstream )
+{
+    _sstream << "SQueryEditor::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::configuring() throw(::fwTools::Failed)
+{
+    ::fwGui::IGuiContainerSrv::initialize();
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    ::fwGui::IGuiContainerSrv::create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+
+    // Main Widget
+    QGridLayout* layout = new QGridLayout();
+    container->setLayout(layout);
+
+    m_patientNameLineEdit    = new QLineEdit();
+    m_patientNameQueryButton = new QPushButton("Send");
+    layout->addWidget(new QLabel("Patient name:"),0, 0);
+    layout->addWidget(m_patientNameLineEdit,0, 1);
+    layout->addWidget(m_patientNameQueryButton,0, 2);
+
+    m_beginStudyDateEdit = new QDateEdit();
+    m_beginStudyDateEdit->setDate(QDate::currentDate());
+    m_beginStudyDateEdit->setDisplayFormat("dd.MM.yyyy");
+    m_endStudyDateEdit = new QDateEdit();
+    m_endStudyDateEdit->setDate(QDate::currentDate());
+    m_endStudyDateEdit->setDisplayFormat("dd.MM.yyyy");
+    m_studyDateQueryButton = new QPushButton("Send");
+    QHBoxLayout* dateLayout = new QHBoxLayout();
+    layout->addWidget(new QLabel("Study date:"),1, 0);
+    layout->addLayout(dateLayout,1, 1);
+    layout->addWidget(m_studyDateQueryButton,1, 2);
+    dateLayout->addWidget(m_beginStudyDateEdit);
+    dateLayout->addWidget(m_endStudyDateEdit);
+    //Set layout
+    container->setLayout(layout);
+
+    // Connect the signals
+    QObject::connect(m_patientNameLineEdit, SIGNAL(returnPressed()), this, SLOT(queryPatientName()));
+    QObject::connect(m_patientNameQueryButton, SIGNAL(clicked()), this, SLOT(queryPatientName()));
+    QObject::connect(m_studyDateQueryButton, SIGNAL(clicked()), this, SLOT(queryStudyDate()));
+    QObject::connect(m_beginStudyDateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(queryStudyDate()));
+    QObject::connect(m_endStudyDateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(queryStudyDate()));
+
+    // Create enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+
+    // Get pacs configuration
+    m_pacsConfiguration = this->getInput< ::fwPacsIO::data::PacsConfiguration>("pacsConfig");
+    SLM_ASSERT("The pacs configuration object sould not be null.", m_pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    // Disconnect the signals
+    QObject::disconnect(m_patientNameLineEdit, SIGNAL(returnPressed()), this, SLOT(queryPatientName()));
+    QObject::disconnect(m_patientNameQueryButton, SIGNAL(clicked()), this, SLOT(queryPatientName()));
+    QObject::disconnect(m_studyDateQueryButton, SIGNAL(clicked()), this, SLOT(queryStudyDate()));
+    QObject::disconnect(m_beginStudyDateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(queryStudyDate()));
+    QObject::disconnect(m_endStudyDateEdit, SIGNAL(dateChanged(QDate)), this, SLOT(queryStudyDate()));
+
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::queryPatientName()
+{
+    try
+    {
+        // Initialize connection
+        m_seriesEnquirer->initialize(
+            m_pacsConfiguration->getLocalApplicationTitle(),
+            m_pacsConfiguration->getPacsHostName(),
+            m_pacsConfiguration->getPacsApplicationPort(),
+            m_pacsConfiguration->getPacsApplicationTitle());
+        m_seriesEnquirer->connect();
+        OFList< QRResponse* > responses;
+
+        // Find series according to patient's name
+        responses = m_seriesEnquirer->findSeriesByPatientName(m_patientNameLineEdit->text().toStdString());
+
+        // Convert response to DicomSeries
+        ::fwMedData::SeriesDB::ContainerType series =
+            ::fwPacsIO::helper::Series::toFwMedData(responses);
+        ::fwPacsIO::helper::Series::releaseResponses(responses);
+
+        // Check whether the instance number start at 1 or 0
+        for(::fwMedData::Series::sptr s: series)
+        {
+            ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(s);
+            SLM_ASSERT("The PACS response should contain only DicomSeries", dicomSeries);
+            const std::string instanceUID = m_seriesEnquirer->findSOPInstanceUID(dicomSeries->getInstanceUID(), 0);
+            dicomSeries->setFirstInstanceNumber((instanceUID.empty() ? 1 : 0));
+        }
+
+        m_seriesEnquirer->disconnect();
+
+        this->updateSeriesDB(series);
+    }
+    catch (::fwPacsIO::exceptions::Base& exception)
+    {
+        this->displayErrorMessage(exception.what());
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::queryStudyDate()
+{
+    try
+    {
+        m_seriesEnquirer->initialize(
+            m_pacsConfiguration->getLocalApplicationTitle(),
+            m_pacsConfiguration->getPacsHostName(),
+            m_pacsConfiguration->getPacsApplicationPort(),
+            m_pacsConfiguration->getPacsApplicationTitle());
+        m_seriesEnquirer->connect();
+        OFList< QRResponse* > responses;
+
+        // Find series according to study's date
+        responses = m_seriesEnquirer->findSeriesByDate(
+            m_beginStudyDateEdit->date().toString("yyyyMMdd").toStdString(),
+            m_endStudyDateEdit->date().toString("yyyyMMdd").toStdString());
+
+        // Convert response to DicomSeries
+        ::fwMedData::SeriesDB::ContainerType series =
+            ::fwPacsIO::helper::Series::toFwMedData(responses);
+        ::fwPacsIO::helper::Series::releaseResponses(responses);
+
+        // Check whether the instance number start at 1 or 0
+        for(::fwMedData::Series::sptr s: series)
+        {
+            ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(s);
+            SLM_ASSERT("The PACS response should contain only DicomSeries", dicomSeries);
+            const std::string instanceUID = m_seriesEnquirer->findSOPInstanceUID(dicomSeries->getInstanceUID(), 0);
+            dicomSeries->setFirstInstanceNumber((instanceUID.empty() ? 1 : 0));
+        }
+
+        m_seriesEnquirer->disconnect();
+
+        this->updateSeriesDB(series);
+    }
+    catch (::fwPacsIO::exceptions::Base& exception)
+    {
+        this->displayErrorMessage(exception.what());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::updateSeriesDB(::fwMedData::SeriesDB::ContainerType series)
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getInOut< ::fwMedData::SeriesDB >("seriesDB");
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+
+    // Delete old series from the SeriesDB
+    seriesDBHelper.clear();
+
+    // Push new series in the SeriesDB
+    for(const ::fwMedData::Series::sptr& s: series)
+    {
+        ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(s);
+        seriesDBHelper.add(dicomSeries);
+    }
+
+    // Notify th SeriesDB
+    seriesDBHelper.notify();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SQueryEditor::displayErrorMessage(const std::string& message) const
+{
+    std::stringstream ss;
+    ss << "Unable to connect to the pacs. Please check your configuration: \n"
+       << "Pacs host name: " << m_pacsConfiguration->getPacsHostName() << "\n"
+       << "Pacs application title: " << m_pacsConfiguration->getPacsApplicationTitle() << "\n"
+       << "Pacs port: " << m_pacsConfiguration->getPacsApplicationPort() << "\n";
+
+    SLM_WARN("Error: " + message);
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setTitle("Error");
+    messageBox.setMessage( ss.str() );
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::CRITICAL);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.show();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPuller.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPuller.cpp
new file mode 100644
index 0000000..a1fd10b
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPuller.cpp
@@ -0,0 +1,401 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SSeriesPuller.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwPacsIO/exceptions/Base.hpp>
+#include <fwPacsIO/helper/Series.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/foreach.hpp>
+
+#include <sstream>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::fwServices::IController, ::ioPacs::SSeriesPuller, ::fwData::Vector );
+
+//------------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType SSeriesPuller::s_READ_SLOT    = "readDicom";
+const ::fwCom::Slots::SlotKeyType SSeriesPuller::s_DISPLAY_SLOT = "displayMessage";
+
+const ::fwCom::Signals::SignalKeyType SSeriesPuller::s_PROGRESSED_SIG       = "progressed";
+const ::fwCom::Signals::SignalKeyType SSeriesPuller::s_STARTED_PROGRESS_SIG = "startedProgress";
+const ::fwCom::Signals::SignalKeyType SSeriesPuller::s_STOPPED_PROGRESS_SIG = "stoppedProgress";
+
+SSeriesPuller::SSeriesPuller() throw() :
+    m_isPulling(false),
+    m_progressbarId("pullDicomProgressBar"),
+    m_seriesCount(0),
+    m_seriesIndex(0)
+{
+    // Internal slots
+    m_slotReadLocalSeries = newSlot(s_READ_SLOT, &SSeriesPuller::readLocalSeries, this);
+    m_slotDisplayMessage  = newSlot(s_DISPLAY_SLOT, &SSeriesPuller::displayErrorMessage, this);
+
+    m_slotStoreInstanceCallbackUsingMoveRequests = newSlot(::fwPacsIO::SeriesRetriever::s_PROGRESS_CALLBACK_SLOT,
+                                                           &SSeriesPuller::storeInstanceCallback, this);
+    m_slotStoreInstanceCallbackUsingGetRequests = newSlot(::fwPacsIO::SeriesEnquirer::s_PROGRESS_CALLBACK_SLOT,
+                                                          &SSeriesPuller::storeInstanceCallback, this);
+
+    m_sigProgressed      = newSignal<ProgressedSignalType>(s_PROGRESSED_SIG);
+    m_sigStartedProgress = newSignal<StartedProgressSignalType>(s_STARTED_PROGRESS_SIG);
+    m_sigStoppedProgress = newSignal<StoppedProgressSignalType>(s_STOPPED_PROGRESS_SIG);
+
+}
+//------------------------------------------------------------------------------
+
+SSeriesPuller::~SSeriesPuller() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::info(std::ostream& _sstream )
+{
+    _sstream << "SSeriesPuller::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::configuring() throw(::fwTools::Failed)
+{
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    SLM_ASSERT("The service ::ioPacs::SSeriesPuller must have a \"config\" element.",config);
+
+    bool success;
+
+    // Dicom Reader
+    ::boost::tie(success, m_dicomReaderType) = config->getSafeAttributeValue("dicomReader");
+    SLM_ASSERT("It should be a \"dicomReader\" in the ::ioPacs::SSeriesPuller config element.", success);
+
+    // Dicom Reader Config
+    ::boost::tie(success, m_dicomReaderSrvConfig) = config->getSafeAttributeValue("dicomReaderConfig");
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::starting() throw(::fwTools::Failed)
+{
+    // Create enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+
+    // Get Destination SeriesDB
+    m_destinationSeriesDB = this->getInOut< ::fwMedData::SeriesDB>("seriesDB");
+    SLM_ASSERT("The 'seriesDB' key doesn't exist.", m_destinationSeriesDB);
+
+    // Create temporary SeriesDB
+    m_tempSeriesDB = ::fwMedData::SeriesDB::New();
+
+    // Create reader
+    ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
+    m_dicomReader                                           =
+        ::io::IReader::dynamicCast(srvFactory->create(m_dicomReaderType));
+    SLM_ASSERT("Unable to create a reader of type: \"" + m_dicomReaderType + "\" in ::ioPacs::SSeriesPuller.",
+               m_dicomReader);
+    ::fwServices::OSR::registerService(m_tempSeriesDB, m_dicomReader);
+
+    if(!m_dicomReaderSrvConfig.empty())
+    {
+        // Get the config
+        ::fwRuntime::ConfigurationElement::csptr readerConfig =
+            ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(
+                m_dicomReaderSrvConfig, "::io::IReader");
+
+        SLM_ASSERT("Sorry, there is no service configuration "
+                   << m_dicomReaderSrvConfig
+                   << " for ::io::IReader", readerConfig);
+
+        m_dicomReader->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(readerConfig) );
+
+    }
+
+
+    m_dicomReader->configure();
+    m_dicomReader->start();
+
+    // Worker
+    m_pullSeriesWorker = ::fwThread::Worker::New();
+
+    // Get pacs configuration
+    m_pacsConfiguration = this->getInput< ::fwPacsIO::data::PacsConfiguration>("pacsConfig");
+    SLM_ASSERT("The pacs configuration object should not be null.", m_pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::stopping() throw(::fwTools::Failed)
+{
+    // Stop reader service
+    m_dicomReader->stop();
+    ::fwServices::OSR::unregisterService(m_dicomReader);
+
+    // Worker
+    m_pullSeriesWorker.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::updating() throw(::fwTools::Failed)
+{
+    ::fwData::Vector::csptr selectedSeries = this->getInput< ::fwData::Vector >("selectedSeries");
+
+    if(m_isPulling)
+    {
+        // Display a message to inform the user that the service is already pulling data.
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Pulling Series");
+        messageBox.setMessage( "The service is already pulling data. Please wait until the pulling is done "
+                               "before sending a new pull request." );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+        messageBox.show();
+    }
+    else if(selectedSeries->empty())
+    {
+        // Display a message to inform the user that there is no series selected.
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Pulling Series");
+        messageBox.setMessage( "Unable to pull series, there is no series selected." );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+        messageBox.show();
+    }
+    else
+    {
+        m_pullSeriesWorker->post(::boost::bind(&::ioPacs::SSeriesPuller::pullSeries, this));
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::pullSeries()
+{
+    // Catch any errors
+    try
+    {
+        // Clear map of Dicom series being pulled
+        m_pullingDicomSeriesMap.clear();
+
+        // Set pulling boolean to true
+        m_isPulling = true;
+
+        // Reset Counters
+        m_seriesIndex   = 0;
+        m_instanceCount = 0;
+
+        ::fwData::Vector::csptr selectedSeries = this->getInput< ::fwData::Vector >("selectedSeries");
+
+        // Find which selected series must be pulled
+        DicomSeriesContainerType pullSeriesVector;
+        DicomSeriesContainerType selectedSeriesVector;
+
+        ::fwData::Vector::ConstIteratorType it = selectedSeries->begin();
+        for(; it != selectedSeries->end(); ++it)
+        {
+            ::fwMedData::DicomSeries::sptr series = ::fwMedData::DicomSeries::dynamicCast(*it);
+
+            // Check if the series must be pulled
+            if(series &&
+               std::find(m_localSeries.begin(), m_localSeries.end(), series->getInstanceUID()) == m_localSeries.end())
+            {
+                // Add series in the pulling series map
+                m_pullingDicomSeriesMap[series->getInstanceUID()] = series;
+
+                pullSeriesVector.push_back(series);
+                m_instanceCount += series->getNumberOfInstances();
+            }
+            selectedSeriesVector.push_back(series);
+        }
+
+        m_seriesCount = pullSeriesVector.size();
+
+        if(m_seriesCount > 0)
+        {
+            //Notify Progress Dialog
+            m_sigStartedProgress->asyncEmit(m_progressbarId);
+        }
+
+        // Pull series
+        if(!pullSeriesVector.empty())
+        {
+            m_seriesEnquirer->initialize(
+                m_pacsConfiguration->getLocalApplicationTitle(),
+                m_pacsConfiguration->getPacsHostName(),
+                m_pacsConfiguration->getPacsApplicationPort(),
+                m_pacsConfiguration->getPacsApplicationTitle(),
+                m_pacsConfiguration->getMoveApplicationTitle(),
+                m_slotStoreInstanceCallbackUsingGetRequests);
+
+            // Use C-GET Requests
+            if(m_pacsConfiguration->getRetrieveMethod() == ::fwPacsIO::data::PacsConfiguration::GET_RETRIEVE_METHOD)
+            {
+                // Pull Selected Series
+                m_seriesEnquirer->connect();
+                m_seriesEnquirer->pullSeriesUsingGetRetrieveMethod(::fwPacsIO::helper::Series::toSeriesInstanceUIDContainer(
+                                                                       pullSeriesVector));
+                m_seriesEnquirer->disconnect();
+            }
+            // Use C-MOVE Requests
+            else
+            {
+                ::fwPacsIO::SeriesRetriever::sptr seriesRetriever = ::fwPacsIO::SeriesRetriever::New();
+                seriesRetriever->initialize(
+                    m_pacsConfiguration->getMoveApplicationTitle(),
+                    m_pacsConfiguration->getMoveApplicationPort(),
+                    1,
+                    m_slotStoreInstanceCallbackUsingMoveRequests);
+
+                // Start Series Retriever
+                ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+                worker->post(::boost::bind(&::fwPacsIO::SeriesRetriever::start, seriesRetriever));
+
+                // Pull Selected Series
+                m_seriesEnquirer->connect();
+                m_seriesEnquirer->pullSeriesUsingMoveRetrieveMethod(::fwPacsIO::helper::Series::toSeriesInstanceUIDContainer(
+                                                                        pullSeriesVector));
+                m_seriesEnquirer->disconnect();
+
+                worker.reset();
+            }
+
+            // Notify Progress Dialog
+            m_sigStoppedProgress->asyncEmit(m_progressbarId);
+        }
+
+        // Read series if there is no error
+        if(m_isPulling)
+        {
+            m_slotReadLocalSeries->asyncRun(selectedSeriesVector);
+        }
+
+        // Set pulling boolean to false
+        m_isPulling = false;
+
+    }
+    catch (::fwPacsIO::exceptions::Base& exception)
+    {
+        ::std::stringstream ss;
+        ss << "Unable to connect to the pacs. Please check your configuration: \n"
+           << "Pacs host name: " << m_pacsConfiguration->getPacsHostName() << "\n"
+           << "Pacs application title: " << m_pacsConfiguration->getPacsApplicationTitle() << "\n"
+           << "Pacs port: " << m_pacsConfiguration->getPacsApplicationPort() << "\n";
+        m_slotDisplayMessage->asyncRun(ss.str());
+        SLM_WARN(exception.what());
+        //Notify Progress Dialog
+        m_sigStoppedProgress->asyncEmit(m_progressbarId);
+        m_isPulling = false;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::readLocalSeries(DicomSeriesContainerType selectedSeries)
+{
+    // Read only series that are not in the SeriesDB
+    InstanceUIDContainerType alreadyLoadedSeries =
+        ::fwPacsIO::helper::Series::toSeriesInstanceUIDContainer(m_destinationSeriesDB->getContainer());
+
+    // Create temporary series helper
+    ::fwMedDataTools::helper::SeriesDB tempSDBhelper(m_tempSeriesDB);
+
+    for(const ::fwMedData::Series::sptr& series: selectedSeries)
+    {
+        ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(series);
+        dicomSeries->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+
+        ::std::string selectedSeriesUID = series->getInstanceUID();
+
+        // Add the series to the local series vector
+        if(::std::find(m_localSeries.begin(), m_localSeries.end(), selectedSeriesUID) == m_localSeries.end())
+        {
+            m_localSeries.push_back(selectedSeriesUID);
+        }
+
+        // Check if the series is loaded
+        if(::std::find(alreadyLoadedSeries.begin(), alreadyLoadedSeries.end(),
+                       selectedSeriesUID) == alreadyLoadedSeries.end())
+        {
+            // Clear temporary series
+            tempSDBhelper.clear();
+
+            ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "dicom/";
+            m_dicomReader->setFolder(path.string() + selectedSeriesUID + "/");
+            m_dicomReader->update();
+
+            // Merge series
+            ::fwMedDataTools::helper::SeriesDB sDBhelper(m_destinationSeriesDB);
+            sDBhelper.merge(m_tempSeriesDB);
+            sDBhelper.notify();
+        }
+
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::storeInstanceCallback(const ::std::string& seriesInstanceUID, unsigned int instanceNumber,
+                                          const ::std::string& filePath)
+{
+    //Add path in the Dicom series
+    if(!m_pullingDicomSeriesMap[seriesInstanceUID].expired())
+    {
+        ::fwMedData::DicomSeries::sptr series = m_pullingDicomSeriesMap[seriesInstanceUID].lock();
+        series->addDicomPath(instanceNumber, filePath);
+    }
+    else
+    {
+        SLM_WARN("The Dicom Series " + seriesInstanceUID + " has expired.");
+    }
+
+    //Notify Progress Dialog
+    ::std::stringstream ss;
+    ss << "Downloading file " << instanceNumber << "/" << m_instanceCount;
+    float percentage = static_cast<float>(instanceNumber)/static_cast<float>(m_instanceCount);
+    m_sigProgressed->asyncEmit(m_progressbarId, percentage, ss.str());
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPuller::displayErrorMessage(const ::std::string& message) const
+{
+    SLM_WARN("Error: " + message);
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setTitle("Error");
+    messageBox.setMessage( message );
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::CRITICAL);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.show();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPusher.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPusher.cpp
new file mode 100644
index 0000000..2f0dc14
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SSeriesPusher.cpp
@@ -0,0 +1,324 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SSeriesPusher.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwData/Vector.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwPacsIO/helper/Series.hpp>
+#include <fwPacsIO/exceptions/Base.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::fwServices::IController, ::ioPacs::SSeriesPusher, ::fwData::Object );
+
+//------------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType SSeriesPusher::s_DISPLAY_SLOT = "displayMessage";
+
+const ::fwCom::Signals::SignalKeyType SSeriesPusher::s_PROGRESSED_SIG       = "progressed";
+const ::fwCom::Signals::SignalKeyType SSeriesPusher::s_STARTED_PROGRESS_SIG = "startedProgress";
+const ::fwCom::Signals::SignalKeyType SSeriesPusher::s_STOPPED_PROGRESS_SIG = "stoppedProgress";
+
+//------------------------------------------------------------------------------
+
+SSeriesPusher::SSeriesPusher() throw() :
+    m_progressbarId("pushDicomProgressBar"),
+    m_isPushing(false)
+{
+    // Internal slots
+    m_slotDisplayMessage   = newSlot(s_DISPLAY_SLOT, &SSeriesPusher::displayMessage, this);
+    m_slotProgressCallback = newSlot(::fwPacsIO::SeriesEnquirer::s_PROGRESS_CALLBACK_SLOT,
+                                     &SSeriesPusher::progressCallback, this);
+
+    // Public signals
+    m_sigProgressed      = newSignal<ProgressedSignalType>(s_PROGRESSED_SIG);
+    m_sigStartedProgress = newSignal<StartedProgressSignalType>(s_STARTED_PROGRESS_SIG);
+    m_sigStoppedProgress = newSignal<StoppedProgressSignalType>(s_STOPPED_PROGRESS_SIG);
+}
+//------------------------------------------------------------------------------
+
+SSeriesPusher::~SSeriesPusher() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::info(std::ostream& _sstream )
+{
+    _sstream << "SSeriesPusher::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::configuring() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    // Create enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+
+    // Worker
+    m_pushSeriesWorker = ::fwThread::Worker::New();
+
+    // Get pacs configuration
+    m_pacsConfiguration = this->getInput< ::fwPacsIO::data::PacsConfiguration>("pacsConfig");
+    SLM_ASSERT("The pacs configuration object should not be null.", m_pacsConfiguration);
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::updating() throw(::fwTools::Failed)
+{
+    ::fwData::Vector::csptr selectedSeries = this->getInput< ::fwData::Vector >("selectedSeries");
+
+    if(m_isPushing)
+    {
+        // Display a message to inform the user that the service is already pushing data.
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Pushing Series");
+        messageBox.setMessage( "The service is already pushing data. Please wait until the pushing is done "
+                               "before sending a new push request." );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+        messageBox.show();
+    }
+    else if(selectedSeries->empty())
+    {
+        // Display a message to inform the user that there is no series selected.
+        ::fwGui::dialog::MessageDialog messageBox;
+        messageBox.setTitle("Pushing Series");
+        messageBox.setMessage( "Unable to push series, there is no series selected." );
+        messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+        messageBox.show();
+    }
+    else
+    {
+        // Initialize enquirer
+        m_seriesEnquirer->initialize(
+            m_pacsConfiguration->getLocalApplicationTitle(),
+            m_pacsConfiguration->getPacsHostName(),
+            m_pacsConfiguration->getPacsApplicationPort(),
+            m_pacsConfiguration->getPacsApplicationTitle(),
+            m_pacsConfiguration->getMoveApplicationTitle(),
+            m_slotProgressCallback);
+
+
+        // Set pushing boolean to true
+        m_isPushing = true;
+
+        // Check whether some selected series are already on the PACS or not
+        bool pushOK = this->checkSeriesOnPACS();
+        if(pushOK)
+        {
+            // Push series to the PACS
+            m_pushSeriesWorker->post(::boost::bind(&::ioPacs::SSeriesPusher::pushSeries, this));
+        }
+
+    }
+
+}
+
+//------------------------------------------------------------------------------
+bool SSeriesPusher::checkSeriesOnPACS()
+{
+    // Return true if the push operation must be performed
+    bool result = true;
+
+    ::fwData::Vector::csptr seriesVector = this->getInput< ::fwData::Vector >("selectedSeries");
+
+    // Catch any errors
+    try
+    {
+        // Find which selected series must be pushed
+        DicomSeriesContainerType duplicateSeriesVector;
+
+        // Connect to PACS
+        m_seriesEnquirer->connect();
+
+        ::fwData::Vector::ConstIteratorType it = seriesVector->begin();
+        for(; it != seriesVector->end(); ++it)
+        {
+            ::fwMedData::DicomSeries::csptr series = ::fwMedData::DicomSeries::dynamicCast(*it);
+            SLM_ASSERT("The SeriesDB should contain only DicomSeries.", series);
+
+            // Try to find series on PACS
+            OFList< QRResponse* > responses;
+            responses = m_seriesEnquirer->findSeriesByUID(series->getInstanceUID());
+
+            // If the series has been found on the PACS
+            if(responses.size() > 1)
+            {
+                duplicateSeriesVector.push_back(series);
+            }
+
+            ::fwPacsIO::helper::Series::releaseResponses(responses);
+        }
+
+        // Disconnect from PACS
+        m_seriesEnquirer->disconnect();
+
+        // Inform the user that some series are already on the PACS
+        if(!duplicateSeriesVector.empty())
+        {
+            ::std::stringstream ss;
+            ss << "Those series are already on the PACS: \n";
+
+            // Display duplicated Series
+            for(const ::fwMedData::Series::csptr& series: duplicateSeriesVector)
+            {
+                std::string description = series->getDescription();
+                description = (description.empty()) ? "[No description]" : description;
+                ss << "- " << description << std::endl;
+            }
+
+            ss << std::endl << "Would you like to perform the operation anyway ?" << std::endl
+               << "(This will result in a merge operation)";
+
+            ::fwGui::dialog::MessageDialog messageBox;
+            messageBox.setTitle("Duplicate series");
+            messageBox.setMessage( ss.str() );
+            messageBox.setIcon(::fwGui::dialog::IMessageDialog::INFO);
+            messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+            messageBox.addButton(::fwGui::dialog::IMessageDialog::CANCEL);
+            ::fwGui::dialog::IMessageDialog::Buttons answer = messageBox.show();
+
+            result = (answer == ::fwGui::dialog::IMessageDialog::OK);
+
+        }
+    }
+    catch (::fwPacsIO::exceptions::Base& exception)
+    {
+        ::std::stringstream ss;
+        ss << "Unable to connect to the pacs. Please check your configuration: \n"
+           << "Pacs host name: " << m_pacsConfiguration->getPacsHostName() << "\n"
+           << "Pacs application title: " << m_pacsConfiguration->getPacsApplicationTitle() << "\n"
+           << "Pacs port: " << m_pacsConfiguration->getPacsApplicationPort() << "\n";
+        m_slotDisplayMessage->asyncRun(ss.str(), true);
+        SLM_WARN(exception.what());
+        result = false;
+
+        // Set pushing boolean to false
+        m_isPushing = false;
+
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::pushSeries()
+{
+    ::fwData::Vector::csptr seriesVector = this->getInput< ::fwData::Vector >("selectedSeries");
+
+    // Catch any errors
+    try
+    {
+        // List of files that must be pushed
+        DicomFileContainer dicomFilesContainer;
+
+        // Connect to PACS
+        ::fwData::Vector::ConstIteratorType it = seriesVector->begin();
+        for(; it != seriesVector->end(); ++it)
+        {
+            ::fwMedData::DicomSeries::csptr series = ::fwMedData::DicomSeries::dynamicCast(*it);
+            SLM_ASSERT("The SeriesDB should contain only DicomSeries.", series);
+
+            BOOST_FOREACH(::fwMedData::DicomSeries::DicomPathContainerType::value_type value,
+                          series->getLocalDicomPaths())
+            {
+                dicomFilesContainer.push_back(value.second);
+            }
+        }
+
+        // Number of instances that must be uploaded
+        m_instanceCount = dicomFilesContainer.size();
+
+        // Connect from PACS
+        m_seriesEnquirer->connect();
+        m_sigStartedProgress->asyncEmit(m_progressbarId);
+
+        // Push series
+        m_seriesEnquirer->pushSeries(dicomFilesContainer);
+
+        // Disconnect from PACS
+        m_seriesEnquirer->disconnect();
+
+    }
+    catch (::fwPacsIO::exceptions::Base& exception)
+    {
+        ::std::stringstream ss;
+        ss << "Unable to connect to the pacs. Please check your configuration: \n"
+           << "Pacs host name: " << m_pacsConfiguration->getPacsHostName() << "\n"
+           << "Pacs application title: " << m_pacsConfiguration->getPacsApplicationTitle() << "\n"
+           << "Pacs port: " << m_pacsConfiguration->getPacsApplicationPort() << "\n";
+        m_slotDisplayMessage->asyncRun(ss.str(), true);
+        SLM_WARN(exception.what());
+    }
+
+    // Set pushing boolean to false
+    m_isPushing = false;
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::progressCallback(const std::string& seriesInstanceUID, unsigned int instanceNumber,
+                                     const std::string& filePath)
+{
+    if(instanceNumber < (m_instanceCount-1))
+    {
+        float percentage = static_cast<float>(instanceNumber)/static_cast<float>(m_instanceCount);
+        m_sigProgressed->asyncEmit(m_progressbarId, percentage, "Pushing series...");
+    }
+    else
+    {
+        m_sigStoppedProgress->asyncEmit(m_progressbarId);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesPusher::displayMessage(const ::std::string& message, bool error) const
+{
+    SLM_WARN_IF("Error: " + message, error);
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setTitle((error ? "Error" : "Information"));
+    messageBox.setMessage( message );
+    messageBox.setIcon(error ? (::fwGui::dialog::IMessageDialog::CRITICAL): (::fwGui::dialog::IMessageDialog::INFO));
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.show();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/src/ioPacs/SSliceIndexDicomPullerEditor.cpp b/Bundles/LeafIO/ioPacs/src/ioPacs/SSliceIndexDicomPullerEditor.cpp
new file mode 100644
index 0000000..0614bf9
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/src/ioPacs/SSliceIndexDicomPullerEditor.cpp
@@ -0,0 +1,474 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioPacs/SSliceIndexDicomPullerEditor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Array.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwPacsIO/exceptions/Base.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwThread/Timer.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <QApplication>
+#include <QComboBox>
+#include <QHBoxLayout>
+#include <QMouseEvent>
+
+#include <boost/asio/placeholders.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/foreach.hpp>
+
+#include <iterator>
+
+namespace ioPacs
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::ioPacs::SSliceIndexDicomPullerEditor,
+                         ::fwMedData::DicomSeries );
+
+const ::fwCom::Slots::SlotKeyType SSliceIndexDicomPullerEditor::s_READ_IMAGE_SLOT      = "readImage";
+const ::fwCom::Slots::SlotKeyType SSliceIndexDicomPullerEditor::s_DISPLAY_MESSAGE_SLOT = "displayErrorMessage";
+
+//------------------------------------------------------------------------------
+
+SSliceIndexDicomPullerEditor::SSliceIndexDicomPullerEditor() throw() :
+    m_delay(500)
+{
+    m_slotReadImage = ::fwCom::newSlot(&SSliceIndexDicomPullerEditor::readImage, this);
+    ::fwCom::HasSlots::m_slots(s_READ_IMAGE_SLOT, m_slotReadImage);
+
+    m_slotDisplayMessage = ::fwCom::newSlot(&SSliceIndexDicomPullerEditor::displayErrorMessage, this);
+    ::fwCom::HasSlots::m_slots(s_DISPLAY_MESSAGE_SLOT, m_slotDisplayMessage);
+
+    ::fwCom::HasSlots::m_slots.setWorker( m_associatedWorker );
+}
+//------------------------------------------------------------------------------
+
+SSliceIndexDicomPullerEditor::~SSliceIndexDicomPullerEditor() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::info(std::ostream& _sstream )
+{
+    _sstream << "SSliceIndexDicomPullerEditor::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::configuring() throw(::fwTools::Failed)
+{
+    ::fwGui::IGuiContainerSrv::initialize();
+
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    SLM_ASSERT("The service ::ioPacs::SPacsConfigurationInitializer must have "
+               "a \"config\" element.",config);
+
+    bool success;
+
+    // Reader
+    ::boost::tie(success, m_dicomReaderType) = config->getSafeAttributeValue("dicomReader");
+    SLM_ASSERT("It should be a \"dicomReader\" tag in the ::ioPacs::SSliceIndexDicomPullerEditor "
+               "config element.", success);
+
+    // Reader configuration
+    ::fwRuntime::ConfigurationElement::sptr readerConfig = config->findConfigurationElement("dicomReaderConfig");
+    m_readerConfig                                       =
+        (readerConfig && readerConfig->size() == 1) ? readerConfig->getElements()[0] : nullptr;
+
+    // Delay
+    std::string delayStr;
+    ::boost::tie(success, delayStr) = config->getSafeAttributeValue("delay");
+    if(success)
+    {
+        m_delay = ::boost::lexical_cast< unsigned int >(delayStr);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::starting() throw(::fwTools::Failed)
+{
+    m_delayTimer2 = m_associatedWorker->createTimer();
+
+    // Get pacs configuration
+    m_pacsConfiguration = this->getInput< ::fwPacsIO::data::PacsConfiguration>("pacsConfig");
+
+    ::fwGui::IGuiContainerSrv::create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+    QHBoxLayout* layout      = new QHBoxLayout();
+    container->setLayout(layout);
+
+    ::fwMedData::DicomSeries::csptr dicomSeries = this->getInOut< ::fwMedData::DicomSeries >("series");
+    SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+    m_numberOfSlices = dicomSeries->getNumberOfInstances();
+
+    // Slider
+    m_sliceIndexSlider = new QSlider(Qt::Horizontal);
+    layout->addWidget(m_sliceIndexSlider,1);
+    m_sliceIndexSlider->setRange(0, static_cast<unsigned int>(m_numberOfSlices-1));
+    m_sliceIndexSlider->setValue(static_cast<unsigned int>(m_numberOfSlices/2));
+
+    // Line Edit
+    m_sliceIndexLineEdit = new QLineEdit();
+    layout->addWidget(m_sliceIndexLineEdit,0);
+    m_sliceIndexLineEdit->setReadOnly(true);
+    m_sliceIndexLineEdit->setMaximumWidth(80);
+
+    std::stringstream ss;
+    ss << m_sliceIndexSlider->value() << " / " << (m_numberOfSlices-1);
+    m_sliceIndexLineEdit->setText(std::string(ss.str()).c_str());
+
+
+    // Connect the signals
+    QObject::connect(m_sliceIndexSlider, SIGNAL(valueChanged(int)), this, SLOT(changeSliceIndex(int)));
+
+    // Create temporary SeriesDB
+    m_tempSeriesDB = ::fwMedData::SeriesDB::New();
+
+    // Create reader
+    ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
+
+
+    ::io::IReader::sptr dicomReader;
+    dicomReader = ::io::IReader::dynamicCast(srvFactory->create(m_dicomReaderType));
+    SLM_ASSERT("Unable to create a reader of type: \"" + m_dicomReaderType + "\" in "
+               "::ioPacs::SSliceIndexDicomPullerEditor.", dicomReader);
+    ::fwServices::OSR::registerService(m_tempSeriesDB, dicomReader);
+
+    if(m_readerConfig)
+    {
+        dicomReader->setConfiguration(m_readerConfig);
+    }
+
+    dicomReader->configure();
+    dicomReader->start();
+
+    m_dicomReader = dicomReader;
+
+    // Image Indecies
+    m_axialIndex    = ::fwData::Integer::New(0);
+    m_frontalIndex  = ::fwData::Integer::New(0);
+    m_sagittalIndex = ::fwData::Integer::New(0);
+
+    // Worker
+    m_pullSeriesWorker = ::fwThread::Worker::New();
+
+    // Create enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+
+    // Load a slice
+    ::boost::chrono::milliseconds duration = ::boost::chrono::milliseconds(m_delay);
+    m_delayTimer2->setFunction(  [ = ]()
+        {
+            this->triggerNewSlice();
+        }  );
+    m_delayTimer2->setDuration(duration);
+    m_delayTimer2->setOneShot(true);
+
+    this->triggerNewSlice();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::stopping() throw(::fwTools::Failed)
+{
+    // Worker
+    m_pullSeriesWorker->stop();
+    m_pullSeriesWorker.reset();
+
+    // Stop dicom reader
+    if(!m_dicomReader.expired())
+    {
+        m_dicomReader.lock()->stop();
+        ::fwServices::OSR::unregisterService(m_dicomReader.lock());
+    }
+
+    // Disconnect the signals
+    QObject::disconnect(m_sliceIndexSlider, SIGNAL(valueChanged(int)), this, SLOT(changeSliceIndex(int)));
+
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::changeSliceIndex(int value)
+{
+    // Update text
+    std::stringstream ss;
+    ss << m_sliceIndexSlider->value() << " / " << (m_numberOfSlices-1);
+    m_sliceIndexLineEdit->setText(std::string(ss.str()).c_str());
+
+    // Get the new slice if there is no change for m_delay milliseconds
+    m_delayTimer2->start();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::triggerNewSlice()
+{
+    // DicomSeries
+    ::fwMedData::DicomSeries::csptr dicomSeries = this->getInOut< ::fwMedData::DicomSeries >("series");
+    SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+
+    // Compute slice index
+    std::size_t selectedSliceIndex = m_sliceIndexSlider->value() + dicomSeries->getFirstInstanceNumber();
+    OSLM_TRACE("triggered new slice : " << selectedSliceIndex);
+    if(!dicomSeries->isInstanceAvailable(selectedSliceIndex))
+    {
+        if(m_pacsConfiguration)
+        {
+            m_pullSeriesWorker->post(::boost::bind(&::ioPacs::SSliceIndexDicomPullerEditor::pullInstance, this));
+        }
+        else
+        {
+            SLM_ERROR("There is no instance available for selected slice index.");
+        }
+    }
+    else
+    {
+        m_slotReadImage->asyncRun(selectedSliceIndex);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::readImage(std::size_t selectedSliceIndex)
+{
+    // DicomSeries
+    ::fwMedData::DicomSeries::csptr dicomSeries = this->getInOut< ::fwMedData::DicomSeries >("series");
+    SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+    if( dicomSeries->getModality() != "CT" && dicomSeries->getModality() != "MR" && dicomSeries->getModality() != "XA")
+    {
+        return;
+    }
+
+    // Clear temporary seriesDB
+    ::fwMedDataTools::helper::SeriesDB sDBTempohelper(m_tempSeriesDB);
+    sDBTempohelper.clear();
+
+    // Creates unique temporary folder, no need to check if exists before (see ::fwTools::System::getTemporaryFolder)
+    ::boost::filesystem::path path    = ::fwTools::System::getTemporaryFolder("dicom");
+    ::boost::filesystem::path tmpPath = path / "tmp";
+
+    SLM_INFO("Create " + tmpPath.string());
+    ::boost::filesystem::create_directories(tmpPath);
+
+
+    SLM_ASSERT("Dicom data shall be available before reading them.",
+               dicomSeries->getDicomAvailability() != ::fwMedData::DicomSeries::NONE
+               || dicomSeries->isInstanceAvailable(selectedSliceIndex));
+
+    if(dicomSeries->getDicomAvailability() != ::fwMedData::DicomSeries::BINARIES )
+    {
+        ::fwMedData::DicomSeries::DicomPathContainerType paths = dicomSeries->getLocalDicomPaths();
+        ::boost::filesystem::path src                          = paths[selectedSliceIndex];
+        ::boost::filesystem::path dest                         = tmpPath / src.filename();
+
+        ::boost::system::error_code err;
+        ::boost::filesystem::create_hard_link( src, dest, err );
+        if (err.value() != 0)
+        {
+            SLM_INFO("Copying " + src.string() + " to " + dest.string());
+            ::boost::filesystem::copy( src, dest );
+
+            ::boost::system::error_code errPerm;
+            ::boost::filesystem::permissions(dest, ::boost::filesystem::owner_all, errPerm);
+            SLM_ERROR_IF("set permission error : " + errPerm.message(), errPerm.value());
+        }
+    }
+    else if(dicomSeries->getDicomAvailability() == ::fwMedData::DicomSeries::BINARIES)
+    {
+
+        const ::fwMedData::DicomSeries::DicomBinaryContainerType& binaries = dicomSeries->getDicomBinaries();
+        ::fwMedData::DicomSeries::DicomBinaryContainerType::const_iterator binary = binaries.begin();
+        std::advance(binary, selectedSliceIndex);
+
+        ::fwData::Array::sptr array = binary->second;
+        ::fwDataTools::helper::Array arrayHelper(array);
+        char* buffer = static_cast<char*>(arrayHelper.getBuffer());
+        size_t size  = array->getSizeInBytes();
+
+        ::boost::filesystem::path dest = tmpPath / binary->first;
+        ::boost::filesystem::ofstream fs(dest, std::ios::binary|std::ios::trunc);
+        FW_RAISE_IF("Can't open '" << tmpPath << "' for write.", !fs.good());
+
+        fs.write(buffer, size);
+        fs.close();
+    }
+
+    // Read image
+
+    m_dicomReader.lock()->setFolder(tmpPath);
+    if(!m_dicomReader.expired())
+    {
+        m_dicomReader.lock()->update();
+
+        if(m_dicomReader.expired() || m_dicomReader.lock()->isStopped())
+        {
+            return;
+        }
+    }
+    else
+    {
+        return;
+    }
+
+    //Copy image
+    ::fwMedData::ImageSeries::sptr imageSeries;
+
+    if(m_tempSeriesDB->getContainer().size() > 0)
+    {
+        imageSeries = ::fwMedData::ImageSeries::dynamicCast(*(m_tempSeriesDB->getContainer().begin()));
+    }
+
+    if(imageSeries)
+    {
+        ::fwData::Image::sptr newImage    = imageSeries->getImage();
+        ::fwData::Image::SizeType newSize = newImage->getSize();
+
+        newImage->setField(::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, m_axialIndex);
+        m_frontalIndex->setValue(static_cast<int>(newSize[0]/2));
+        newImage->setField(::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, m_frontalIndex);
+        m_sagittalIndex->setValue(static_cast<int>(newSize[1]/2));
+        newImage->setField(::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, m_sagittalIndex);
+
+        this->setOutput("image", newImage);
+    }
+
+    ::boost::system::error_code ec;
+    ::boost::filesystem::remove_all(path, ec);
+    SLM_ERROR_IF("remove_all error for path " + path.string() + ": " + ec.message(), ec.value());
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::pullInstance()
+{
+    SLM_ASSERT("Pacs not configured.", m_pacsConfiguration);
+
+    if( m_pacsConfiguration )
+    {
+        // Catch any errors
+        try
+        {
+            // DicomSeries
+            ::fwMedData::DicomSeries::sptr dicomSeries = this->getInOut< ::fwMedData::DicomSeries >("series");
+            SLM_ASSERT("DicomSeries should not be null !", dicomSeries);
+
+            // Get selected slice
+            std::size_t selectedSliceIndex = m_sliceIndexSlider->value() + dicomSeries->getFirstInstanceNumber();
+
+            m_seriesEnquirer->initialize(m_pacsConfiguration->getLocalApplicationTitle(),
+                                         m_pacsConfiguration->getPacsHostName(),
+                                         m_pacsConfiguration->getPacsApplicationPort(),
+                                         m_pacsConfiguration->getPacsApplicationTitle(),
+                                         m_pacsConfiguration->getMoveApplicationTitle());
+
+            m_seriesEnquirer->connect();
+            std::string seriesInstanceUID = dicomSeries->getInstanceUID();
+            std::string sopInstanceUID    =
+                m_seriesEnquirer->findSOPInstanceUID(seriesInstanceUID, static_cast<unsigned int>(selectedSliceIndex));
+
+            // Check if an instance with the selected Instance Number is found on the PACS
+            if(!sopInstanceUID.empty())
+            {
+                // Pull Selected Series using C-GET Requests
+                m_seriesEnquirer->pullInstanceUsingGetRetrieveMethod(seriesInstanceUID, sopInstanceUID);
+
+                // Add path and trigger reading
+                ::boost::filesystem::path path     = ::fwTools::System::getTemporaryFolder() / "dicom/";
+                ::boost::filesystem::path filePath = path.string() + seriesInstanceUID + "/" + sopInstanceUID;
+                dicomSeries->addDicomPath(selectedSliceIndex, filePath);
+                m_slotReadImage->asyncRun(selectedSliceIndex);
+            }
+            else
+            {
+                std::stringstream ss;
+                ss << "The selected series does not have an instance matching the selected instance number (" <<
+                    selectedSliceIndex << ").";
+                m_slotDisplayMessage->asyncRun(ss.str());
+            }
+
+            // Close connection
+            m_seriesEnquirer->disconnect();
+
+        }
+        catch (::fwPacsIO::exceptions::Base& exception)
+        {
+            std::stringstream ss;
+            ss << "Unable to connect to the pacs. Please check your configuration: \n"
+               << "Pacs host name: " << m_pacsConfiguration->getPacsHostName() << "\n"
+               << "Pacs application title: " << m_pacsConfiguration->getPacsApplicationTitle() << "\n"
+               << "Pacs port: " << m_pacsConfiguration->getPacsApplicationPort() << "\n";
+            m_slotDisplayMessage->asyncRun(ss.str());
+            SLM_WARN(exception.what());
+        }
+
+    }
+    else
+    {
+        SLM_ERROR("Pacs pull aborted : no pacs configuration found.");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSliceIndexDicomPullerEditor::displayErrorMessage(const std::string& message) const
+{
+    SLM_WARN("Error: " + message);
+    ::fwGui::dialog::MessageDialog messageBox;
+    messageBox.setTitle("Error");
+    messageBox.setMessage( message );
+    messageBox.setIcon(::fwGui::dialog::IMessageDialog::CRITICAL);
+    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+    messageBox.show();
+}
+
+} // namespace ioPacs
diff --git a/Bundles/LeafIO/ioPacs/test/CMakeLists.txt b/Bundles/LeafIO/ioPacs/test/CMakeLists.txt
new file mode 100644
index 0000000..8f1dce6
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/test/CMakeLists.txt
@@ -0,0 +1,6 @@
+fwLoadProperties()
+
+
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
diff --git a/Bundles/LeafIO/ioPacs/test/Properties.cmake b/Bundles/LeafIO/ioPacs/test/Properties.cmake
new file mode 100644
index 0000000..9fcc74b
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/test/Properties.cmake
@@ -0,0 +1,17 @@
+set( NAME ioPacsTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwCore
+    fwRuntime
+    fwServices
+    fwPacsIO
+    )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    io
+    ioPacs
+    )
+
+set(CPPUNITTEST_OPTIONS BUNDLE ioPacs WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafIO/ioPacs/test/tu/include/IoPacsTest.hpp b/Bundles/LeafIO/ioPacs/test/tu/include/IoPacsTest.hpp
new file mode 100644
index 0000000..c520638
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/test/tu/include/IoPacsTest.hpp
@@ -0,0 +1,37 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOPACS_UT_IOPACSTEST_HPP__
+#define __IOPACS_UT_IOPACSTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace ioPacs
+{
+namespace ut
+{
+
+/**
+ * @brief Test PacsConfigurationInitializer controller
+ */
+class IoPacsTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( IoPacsTest );
+CPPUNIT_TEST( pacsConfigurationInitializer );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void pacsConfigurationInitializer();
+};
+
+} //namespace ut
+} //namespace ioPacs
+
+#endif //__IOPACS_UT_IOPACSTEST_HPP__
diff --git a/Bundles/LeafIO/ioPacs/test/tu/rc/profile.xml b/Bundles/LeafIO/ioPacs/test/tu/rc/profile.xml
new file mode 100644
index 0000000..72c7472
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/test/tu/rc/profile.xml
@@ -0,0 +1,13 @@
+<profile name="IoPacsTest" version="0.1">
+
+    <activate id="dataReg" version="0-1" />
+    <activate id="servicesReg" version="0-1" />
+
+    <activate id="gui" version="0-1" />
+
+    <activate id="io" version="0-1" />
+    <activate id="ioPacs" version="0-1" />
+
+    <start id="ioPacs" />
+
+</profile>
diff --git a/Bundles/LeafIO/ioPacs/test/tu/src/IoPacsTest.cpp b/Bundles/LeafIO/ioPacs/test/tu/src/IoPacsTest.cpp
new file mode 100644
index 0000000..9c85386
--- /dev/null
+++ b/Bundles/LeafIO/ioPacs/test/tu/src/IoPacsTest.cpp
@@ -0,0 +1,93 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/AppConfigManager.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwPacsIO/data/PacsConfiguration.hpp>
+
+#include "IoPacsTest.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::ioPacs::ut::IoPacsTest );
+
+
+namespace ioPacs
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void IoPacsTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void IoPacsTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void IoPacsTest::pacsConfigurationInitializer()
+{
+    // Pacs Conifguration
+    ::fwPacsIO::data::PacsConfiguration::sptr pacsConfiguration = ::fwPacsIO::data::PacsConfiguration::New();
+
+    // Create service
+    ::fwServices::IService::sptr srv =
+        ::fwServices::registry::ServiceFactory::getDefault()->create( "::fwServices::IController",
+                                                                      "::ioPacs::SPacsConfigurationInitializer" );
+    CPPUNIT_ASSERT(srv);
+
+    // Create service configuration
+    ::fwRuntime::EConfigurationElement::sptr srvElement    = ::fwRuntime::EConfigurationElement::New("service");
+    ::fwRuntime::EConfigurationElement::sptr configElement = ::fwRuntime::EConfigurationElement::New("config");
+    srvElement->addConfigurationElement(configElement);
+    configElement->setAttributeValue("localApplicationTitle", "VRRender");
+    configElement->setAttributeValue("pacsHostName", "mypacs.mycompany.com");
+    configElement->setAttributeValue("pacsApplicationTitle", "PACSNAME");
+    configElement->setAttributeValue("pacsApplicationPort", "11112");
+    configElement->setAttributeValue("moveApplicationTitle", "MoveApplicationTitle");
+    configElement->setAttributeValue("moveApplicationPort", "11110");
+    configElement->setAttributeValue("retrieveMethod", "GET");
+
+    // Use the service
+    ::fwServices::OSR::registerService( pacsConfiguration, srv );
+    srv->setConfiguration( srvElement );
+    srv->configure();
+    srv->start();
+    srv->update();
+    srv->stop();
+    ::fwServices::OSR::unregisterService( srv );
+
+    unsigned short pacsApplicationPort = 11112u;
+    unsigned short moveApplicationPort = 11110u;
+    CPPUNIT_ASSERT_EQUAL(std::string("VRRender"), pacsConfiguration->getLocalApplicationTitle());
+    CPPUNIT_ASSERT_EQUAL(std::string("mypacs.mycompany.com"), pacsConfiguration->getPacsHostName());
+    CPPUNIT_ASSERT_EQUAL(std::string("PACSNAME"), pacsConfiguration->getPacsApplicationTitle());
+    CPPUNIT_ASSERT_EQUAL(pacsApplicationPort, pacsConfiguration->getPacsApplicationPort());
+    CPPUNIT_ASSERT_EQUAL(std::string("MoveApplicationTitle"), pacsConfiguration->getMoveApplicationTitle());
+    CPPUNIT_ASSERT_EQUAL(moveApplicationPort, pacsConfiguration->getMoveApplicationPort());
+    CPPUNIT_ASSERT_EQUAL(::fwPacsIO::data::PacsConfiguration::GET_RETRIEVE_METHOD,
+                         pacsConfiguration->getRetrieveMethod());
+
+}
+
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace ioPacs
diff --git a/Bundles/LeafIO/ioTuto/CMakeLists.txt b/Bundles/LeafIO/ioTuto/CMakeLists.txt
index 42eddae..1169074 100644
--- a/Bundles/LeafIO/ioTuto/CMakeLists.txt
+++ b/Bundles/LeafIO/ioTuto/CMakeLists.txt
@@ -1,13 +1,3 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-
-    io
-)
-
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
 
 
diff --git a/Bundles/LeafIO/ioTuto/COPYING b/Bundles/LeafIO/ioTuto/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafIO/ioTuto/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafIO/ioTuto/COPYING.LESSER b/Bundles/LeafIO/ioTuto/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafIO/ioTuto/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafIO/ioTuto/Properties.cmake b/Bundles/LeafIO/ioTuto/Properties.cmake
index 24c95fe..f4c706f 100644
--- a/Bundles/LeafIO/ioTuto/Properties.cmake
+++ b/Bundles/LeafIO/ioTuto/Properties.cmake
@@ -2,6 +2,15 @@
 set( NAME ioTuto )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwData fwGui fwRuntime fwServices io )
+set( DEPENDENCIES
+    fwData
+    fwDataTools
+    fwGui
+    fwRuntime
+    fwServices
+    io
+
+    fwTools
+    fwCore )
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafIO/ioTuto/bin/build.options b/Bundles/LeafIO/ioTuto/bin/build.options
deleted file mode 100644
index 0b78427..0000000
--- a/Bundles/LeafIO/ioTuto/bin/build.options
+++ /dev/null
@@ -1,20 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['boost', 'boostFilesystem']
-LIB = [
-      'fwTools_0-1',
-      'fwRuntime_0-3',
-      'fwData_0-1',
-      'fwDataIO_0-2',
-      'fwServices_0-1',
-      'fwCore_0-1',
-      'fwGui_0-1',
-      'fwAtomConversion_0-1',
-      'fwZip_0-1',
-      'fwAtomsBoostIO_0-1',
-      ]
-BUNDLES = ['io_0-1']
-
-
-
-
diff --git a/Bundles/LeafIO/ioTuto/include/ioTuto/ExternalDataReaderService.hpp b/Bundles/LeafIO/ioTuto/include/ioTuto/ExternalDataReaderService.hpp
index c3a8a92..f47f10b 100644
--- a/Bundles/LeafIO/ioTuto/include/ioTuto/ExternalDataReaderService.hpp
+++ b/Bundles/LeafIO/ioTuto/include/ioTuto/ExternalDataReaderService.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IOTUTO_EXTERNALDATAREADER_HPP_
-#define _IOTUTO_EXTERNALDATAREADER_HPP_
+#ifndef __IOTUTO_EXTERNALDATAREADERSERVICE_HPP__
+#define __IOTUTO_EXTERNALDATAREADERSERVICE_HPP__
 
 #include <io/IReader.hpp>
 #include <boost/filesystem/path.hpp>
@@ -19,21 +19,21 @@ class IOTUTO_CLASS_API ExternalDataReaderService : public ::io::IReader
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ExternalDataReaderService)( ::io::IReader) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ExternalDataReaderService)( ::io::IReader) );
     /**
      * @brief Constructor : does nothing
-    */
-    IOTUTO_API ExternalDataReaderService() ;
+     */
+    IOTUTO_API ExternalDataReaderService();
 
     /**
      * @brief Destructor
      */
-        IOTUTO_API ~ExternalDataReaderService() throw() ;
+    IOTUTO_API ~ExternalDataReaderService() throw();
 
     /**
      * @brief   returns  (filename) extension
      */
-    IOTUTO_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IOTUTO_API virtual std::vector< std::string > getSupportedExtensions();
 
 protected:
 
@@ -46,28 +46,32 @@ protected:
      *
      * This method is used to initialize the service.
      */
-    IOTUTO_API virtual void starting() throw(::fwTools::Failed){};
+    IOTUTO_API virtual void starting() throw(::fwTools::Failed)
+    {
+    }
 
     /**
      * @brief Stopping method : default does nothing.
      *
      * The stopping method is empty for this service.
      */
-    IOTUTO_API virtual void stopping() throw(::fwTools::Failed){};
+    IOTUTO_API virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
 
 
     /**
      * @brief Configure service. This method is called by configure() from base service ( ::fwServices::IService )
      *
      * XML configuration sample:
-     * @verbatim
-    <service type="::ioTuto::ExternalDataReaderService">
-    </service>
-     @endverbatim
+     * @code{.xml}
+       <service type="::ioTuto::ExternalDataReaderService">
+       </service>
+       @endcode
      *
      * Configure External data info filename.
      */
-IOTUTO_API virtual void configuring( ) throw(::fwTools::Failed);
+    IOTUTO_API virtual void configuring( ) throw(::fwTools::Failed);
 
     /**
      * @brief Configure the image path.
@@ -85,15 +89,6 @@ IOTUTO_API virtual void configuring( ) throw(::fwTools::Failed);
     IOTUTO_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
@@ -101,11 +96,11 @@ IOTUTO_API virtual void configuring( ) throw(::fwTools::Failed);
      *
      * @param[out] _sstream output stream
      */
-    IOTUTO_API virtual void info(std::ostream &_sstream ) ;
+    IOTUTO_API virtual void info(std::ostream &_sstream );
     /// @}
 
     /// Returns managed path type, here service manages only single file
     IOTUTO_API ::io::IOPathType getIOPathType() const;
 };
 }
-#endif /*_IOTUTO_EXTERNALDATAREADER_HPP_*/
+#endif /*__IOTUTO_EXTERNALDATAREADERSERVICE_HPP__*/
diff --git a/Bundles/LeafIO/ioTuto/include/ioTuto/Plugin.hpp b/Bundles/LeafIO/ioTuto/include/ioTuto/Plugin.hpp
index 0fecabc..b1b4e5b 100644
--- a/Bundles/LeafIO/ioTuto/include/ioTuto/Plugin.hpp
+++ b/Bundles/LeafIO/ioTuto/include/ioTuto/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IOTUTO_PLUGIN_HPP_
-#define _IOTUTO_PLUGIN_HPP_
+#ifndef __IOTUTO_PLUGIN_HPP__
+#define __IOTUTO_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -29,4 +29,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace ioTuto
 
-#endif //_IOTUTO_PLUGIN_HPP_
+#endif //__IOTUTO_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioTuto/include/ioTuto/config.hpp b/Bundles/LeafIO/ioTuto/include/ioTuto/config.hpp
deleted file mode 100644
index 8c7c15f..0000000
--- a/Bundles/LeafIO/ioTuto/include/ioTuto/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef IOTUTO_CONFIG_HPP_
-#define IOTUTO_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef IOTUTO_EXPORTS
-    #define IOTUTO_API __declspec(dllexport)
-    #else
-    #define IOTUTO_API __declspec(dllimport)
-    #endif
-
-    #define IOTUTO_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IOTUTO_EXPORTS
-    #define IOTUTO_API __attribute__ ((visibility("default")))
-    #define IOTUTO_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IOTUTO_API __attribute__ ((visibility("hidden")))
-    #define IOTUTO_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IOTUTO_API
-    #define IOTUTO_CLASS_API
-
-#endif
-
-#endif //IOTUTO_CONFIG_HPP_
diff --git a/Bundles/LeafIO/ioTuto/rc/plugin.xml b/Bundles/LeafIO/ioTuto/rc/plugin.xml
index 77db1fc..554b648 100644
--- a/Bundles/LeafIO/ioTuto/rc/plugin.xml
+++ b/Bundles/LeafIO/ioTuto/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ioTuto" class="ioTuto::Plugin">
+<plugin id="ioTuto" class="ioTuto::Plugin" version="@DASH_VERSION@" >
 
     <library name="ioTuto" />
 
diff --git a/Bundles/LeafIO/ioTuto/src/ioTuto/ExternalDataReaderService.cpp b/Bundles/LeafIO/ioTuto/src/ioTuto/ExternalDataReaderService.cpp
index bf940fa..e7ffae0 100644
--- a/Bundles/LeafIO/ioTuto/src/ioTuto/ExternalDataReaderService.cpp
+++ b/Bundles/LeafIO/ioTuto/src/ioTuto/ExternalDataReaderService.cpp
@@ -1,16 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <fstream>
-
-#include <boost/filesystem/operations.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
+#include "ioTuto/ExternalDataReaderService.hpp"
 
 #include <fwData/Composite.hpp>
 #include <fwData/String.hpp>
@@ -18,14 +12,19 @@
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/helper/Composite.hpp>
+#include <fwDataTools/helper/Composite.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include "ioTuto/ExternalDataReaderService.hpp"
+#include <fwServices/macros.hpp>
+
+#include <boost/filesystem/operations.hpp>
+
+#include <fstream>
+#include <iostream>
 
-fwServicesRegisterMacro( ::io::IReader , ::ioTuto::ExternalDataReaderService , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioTuto::ExternalDataReaderService, ::fwData::Composite );
 
 namespace ioTuto
 {
@@ -33,29 +32,31 @@ namespace ioTuto
 //-----------------------------------------------------------------------------
 
 ExternalDataReaderService::ExternalDataReaderService()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void ExternalDataReaderService::info(std::ostream &_sstream )
+void ExternalDataReaderService::info(std::ostream& _sstream )
 {
-    this->::io::IReader::info( _sstream ) ;
-    _sstream << std::endl << " External data file reader" ;
+    this->::io::IReader::info( _sstream );
+    _sstream << std::endl << " External data file reader";
 }
 
 //-----------------------------------------------------------------------------
 
 std::vector< std::string > ExternalDataReaderService::getSupportedExtensions()
 {
-    std::vector< std::string > extensions ;
+    std::vector< std::string > extensions;
     extensions.push_back(".us");
-    return extensions ;
+    return extensions;
 }
 
 //-----------------------------------------------------------------------------
 
 ExternalDataReaderService::~ExternalDataReaderService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -63,7 +64,7 @@ void ExternalDataReaderService::configuring( ) throw(::fwTools::Failed)
 {
     if( m_configuration->findConfigurationElement("filename") )
     {
-        std::string filename = m_configuration->findConfigurationElement("filename")->getValue() ;
+        std::string filename = m_configuration->findConfigurationElement("filename")->getValue();
         OSLM_INFO( "ExternalDataReaderService::configure filename: " << filename );
         this->setFile(filename);
     }
@@ -82,8 +83,8 @@ void ExternalDataReaderService::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath();
@@ -103,7 +104,7 @@ void ExternalDataReaderService::updating() throw(::fwTools::Failed)
 
     std::string imageName;
     ::fwData::Composite::sptr dataComposite = this->getObject< ::fwData::Composite >();
-    ::fwComEd::helper::Composite compositeHelper(dataComposite);
+    ::fwDataTools::helper::Composite compositeHelper(dataComposite);
     SLM_ASSERT("dataComposite not instanced", dataComposite);
     try
     {
@@ -116,7 +117,7 @@ void ExternalDataReaderService::updating() throw(::fwTools::Failed)
             {
                 OSLM_ERROR( "External data file loading error for " << this->getFile());
                 std::string str = "Unable to open ";
-                str+= this->getFile().string();
+                str += this->getFile().string();
                 throw std::ios_base::failure(str);
             }
             file >> imageName;
@@ -132,11 +133,11 @@ void ExternalDataReaderService::updating() throw(::fwTools::Failed)
                     file >> value;
                     if  (readedValue<16)
                     {
-                        transformation1->getRefCoefficients().push_back( value );
+                        transformation1->getRefCoefficients()[readedValue] = value;
                     }
                     else
                     {
-                        transformation2->getRefCoefficients().push_back( value );
+                        transformation2->getRefCoefficients()[readedValue] = value;
                     }
                     readedValue++;
                 }
@@ -172,7 +173,7 @@ void ExternalDataReaderService::updating() throw(::fwTools::Failed)
             SLM_ASSERT("Unable to open '"+this->getFile().string()+"'.", readedValue == 32 );
         }
     }
-    catch(std::ios_base::failure &exception)
+    catch(std::ios_base::failure& exception)
     {
         OSLM_ERROR( "External data file loading error for " << exception.what());
     }
diff --git a/Bundles/LeafIO/ioTuto/src/ioTuto/Plugin.cpp b/Bundles/LeafIO/ioTuto/src/ioTuto/Plugin.cpp
index 8e51c38..917c01a 100644
--- a/Bundles/LeafIO/ioTuto/src/ioTuto/Plugin.cpp
+++ b/Bundles/LeafIO/ioTuto/src/ioTuto/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,14 +14,16 @@ using namespace ::fwRuntime::utils;
 static GenericExecutableFactoryRegistrar<Plugin> registrar("ioTuto::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 }
 
diff --git a/Bundles/LeafIO/ioVTK/CMakeLists.txt b/Bundles/LeafIO/ioVTK/CMakeLists.txt
index 11851e4..3e0a1ff 100644
--- a/Bundles/LeafIO/ioVTK/CMakeLists.txt
+++ b/Bundles/LeafIO/ioVTK/CMakeLists.txt
@@ -1,22 +1,13 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwRuntime
-    fwServices
-
-    io
-)
 
-
-find_package(Boost REQUIRED)
-find_package(VTK REQUIRED)
+if(NOT ANDROID)
+    find_package(VTK COMPONENTS vtkIOImport REQUIRED NO_MODULE)
+endif()
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS}
-    )
-fwLink(
-    ${Boost_LIBRARIES} 
-    vtkHybrid
-    )
+)
 
+fwLink(
+    ${VTK_LIBRARIES}
+)
diff --git a/Bundles/LeafIO/ioVTK/COPYING b/Bundles/LeafIO/ioVTK/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafIO/ioVTK/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafIO/ioVTK/COPYING.LESSER b/Bundles/LeafIO/ioVTK/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafIO/ioVTK/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafIO/ioVTK/Properties.cmake b/Bundles/LeafIO/ioVTK/Properties.cmake
index a9a1198..e7f88f3 100644
--- a/Bundles/LeafIO/ioVTK/Properties.cmake
+++ b/Bundles/LeafIO/ioVTK/Properties.cmake
@@ -2,6 +2,21 @@
 set( NAME ioVTK )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwDataIO fwGui fwMedData fwRuntime fwServices fwTools fwVtkIO io )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwDataIO
+    fwGui
+    fwMedData
+    fwMedDataTools
+    fwRuntime
+    fwServices
+    fwTools
+    fwVtkIO
+    fwCom
+    fwThread
+    fwJobs
+    io
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafIO/ioVTK/bin/build.options b/Bundles/LeafIO/ioVTK/bin/build.options
deleted file mode 100644
index a1ffcd6..0000000
--- a/Bundles/LeafIO/ioVTK/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['boost', 'boostFilesystem','vtkHybrid']
-LIB     = [
-          'fwTools_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwMedData_0-1',
-          'fwDataIO_0-2',
-          'fwServices_0-1',
-          'fwCore_0-1',
-          'fwComEd_0-1',
-          'fwVtkIO_0-1',
-          'fwGui_0-1',
-          ]
-BUNDLES = ['io_0-1']
-
-
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/ImageReaderService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/ImageReaderService.hpp
deleted file mode 100644
index 65934d4..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/ImageReaderService.hpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_IMAGEREADERSERVICE_HPP_
-#define _IOVTK_IMAGEREADERSERVICE_HPP_
-
-#include <boost/filesystem/path.hpp> // Used to save the file system path of loaded image
-
-#include <io/IReader.hpp> // Definition of abstract reader class
-
-#include "ioVTK/export.hpp"  // Declaration of class and function export
-
-// Pre-definition of ::fwData::Image to avoid inclusion file
-namespace fwData
-{
-    class Image;
-}
-
-
-namespace ioVTK
-{
-
-/**
- * @brief   Image reader service.
- * @class   ImageReaderService
- *
- * Service reading a VTK Image using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioVTK::ImageReaderService , ::fwData::Image )
- */
-class IOVTK_CLASS_API ImageReaderService : public ::io::IReader
-{
-
-public :
-    ~ImageReaderService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (ImageReaderService)( ::io::IReader) ) ;
-
-    /**
-     * @brief Configure the image path with an wxWidget dialogBox.
-     *
-     * This method is used to find the file path using a file selector.
-     */
-    IOVTK_API virtual void configureWithIHM();
-//    IOVTK_API virtual void setFile(const ::boost::filesystem::path &file);
-
-
-protected:
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-    /// Method called when the service is started, does nothing.
-    IOVTK_API virtual void starting() throw ( ::fwTools::Failed );
-
-    /// Method called when the service is stopped, does nothing.
-    IOVTK_API virtual void stopping() throw ( ::fwTools::Failed );
-
-    /**
-     * @brief Updating method execute the read process.
-     *
-     * This method is used to update the service.
-     * The image is read.
-     */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : here, this method does nothing.
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     * @param[in] _msg information message for modification
-     */
-    IOVTK_API void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw ( ::fwTools::Failed );
-
-    /// Info method gives some informations on service.
-    IOVTK_API void info(std::ostream &_sstream ) ;
-
-private :
-
-    /**
-    * @brief This method is used to load an vtk image using a file path.
-    * @param[in] _vtkFile file system path of vtk image
-    * @param[out] _pImage new empty image that will contain image loaded, if reading process is a success.
-    * @return bool  \b true if the image loading is a success and \b false if it fails
-    */
-    bool loadImage( const ::boost::filesystem::path _vtkFile, ::boost::shared_ptr< ::fwData::Image > _pImage );
-
-    /// This method notifies other image services that a new image has been loaded.
-    void notificationOfDBUpdate();
-
-    /// This value is \b true if the path image is known.
-    bool m_bServiceIsConfigured;
-
-    /// Image path, location of image on filesystem.
-    ::boost::filesystem::path m_fsImgPath;
-
-};
-
-} // namespace ioVTK
-
-#endif //_IOVTK_IMAGEREADERSERVICE_HPP_
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/ImageWriterService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/ImageWriterService.hpp
deleted file mode 100644
index ed10a5d..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/ImageWriterService.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_IMAGEWRITERSERVICE_HPP_
-#define _IOVTK_IMAGEWRITERSERVICE_HPP_
-
-#include <string>
-#include <boost/filesystem/path.hpp>
-
-#include <io/IWriter.hpp>
-
-
-#include "ioVTK/export.hpp"
-
-namespace fwData
-{
-    class Image;
-}
-
-
-namespace ioVTK
-{
-
-/**
- * @brief   VTK image writer service.
- * @class   ImageWriterService
- *
- * Service writing a VTK Image using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::ImageWriterService , ::fwData::Image )
- */
-class IOVTK_CLASS_API ImageWriterService : public ::io::IWriter
-{
-
-public :
-    ~ImageWriterService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (ImageWriterService)( ::io::IWriter) ) ;
-
-    /**
-     * @brief Configure the image path.
-     *
-     * This method is used to find
-     * the file path  using a file selector.
-     */
-    IOVTK_API virtual void configureWithIHM();
-
-    /**
-    * @brief Save a VTK image.
-    * @param[in] imgFile ::boost::filesystem::path.
-    * @param[out] image ::boost::shared_ptr< ::fwData::Image >.
-    * @return bool.
-    *
-    * This method is used to save an image using the file path.
-    * Returns \b true if the image saving is a success and \b false if it fails
-    */
-    IOVTK_API static bool saveImage( const ::boost::filesystem::path& imgFile, const SPTR(::fwData::Image)& image );
-
-
-protected:
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    */
-    IOVTK_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief Stopping method.
-     *
-     * The stopping method is empty for this service.
-     */
-    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief Updating method.
-     *
-     * This method is used to update the service.
-     * The image is read.
-     */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-     * @brief Info method.
-     *
-     * This method is used to give
-     * informations about the service.
-     */
-    IOVTK_API void info(std::ostream &_sstream ) ;
-
-private :
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the image path is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    /**
-    * @brief Image path.
-    */
-    ::boost::filesystem::path m_fsImgPath;
-
-};
-
-} // namespace ioVTK
-
-#endif //_IOVTK_IMAGEWRITERSERVICE_HPP_
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/MaxMeshReaderService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/MaxMeshReaderService.hpp
deleted file mode 100644
index 6fd64d1..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/MaxMeshReaderService.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _MAX_MESHREADER_SERVICE_HPP_
-#define _MAX_MESHREADER_SERVICE_HPP_
-
-#include <io/IReader.hpp>
-#include <boost/filesystem/path.hpp>
-
-#include "ioVTK/export.hpp"
-
-
-namespace ioVTK
-{
-
-/**
- * @brief   3ds Max reader service.
- * @class   MaxMeshReaderService
- *
- * Service reading a 3ds Max file using the fwVtkIO lib
- * (for .3ds at this time).
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioVTK::MaxMeshReaderService , ::fwData::Model )
- */
-class IOVTK_CLASS_API MaxMeshReaderService : public ::io::IReader
-{
-public:
-    ~MaxMeshReaderService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (MaxMeshReaderService)( ::io::IReader) ) ;
-
-    /**
-     * @brief Configure the mesh path.
-     *
-     * This method is used to find
-     * the file path  using a file selector.
-     */
-    IOVTK_API virtual void configureWithIHM();
-
-    /*!
-    * @brief Get the supported extensions.
-    *
-    * @return std::vector< std::string >.
-    *
-    * Return a std::vector< std::string > that contains the supported extensions.
-    */
-    IOVTK_API virtual std::vector< std::string > getSupportedExtensions();
-
-
-protected:
-
-    /**
-    * @brief Starting method : default does nothing.
-    *
-    * This method is used to initialize the service.
-    */
-    virtual void starting() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Stopping method : default does nothing.
-     *
-     * The stopping method is empty for this service.
-     */
-    virtual void stopping() throw(::fwTools::Failed){};
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API virtual void info(std::ostream &_sstream );
-
-
-private:
-
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the path image is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    ::boost::filesystem::path m_fsMeshPath;
-};
-
-}
-
-#endif /*_MAX_MESHREADER_SERVICE_HPP_*/
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/MeshReaderService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/MeshReaderService.hpp
deleted file mode 100644
index e174563..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/MeshReaderService.hpp
+++ /dev/null
@@ -1,130 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_MESHREADERSERVICE_HPP_
-#define _IOVTK_MESHREADERSERVICE_HPP_
-
-#include <string>
-#include <boost/filesystem/path.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-#include <fwData/Mesh.hpp>
-
-#include <io/IReader.hpp>
-
-
-#include "ioVTK/export.hpp"
-
-
-namespace ioVTK
-{
-
-/**
- * @brief   Mesh reader service.
- * @class   MeshReaderService
- *
- * Service reading a VTK mesh using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioVTK::MeshReaderService , ::fwData::Mesh )
- */
-class IOVTK_CLASS_API MeshReaderService : public ::io::IReader
-{
-
-public :
-    ~MeshReaderService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (MeshReaderService)( ::io::IReader) ) ;
-
-    /**
-    * @brief Configure the image path.
-    *
-    * This method is used to find
-    * the file path  using a file selector.
-    */
-    IOVTK_API virtual void configureWithIHM();
-
-
-protected:
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    */
-    IOVTK_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-    * @brief Stopping method.
-    *
-    * The stopping method is empty for this service.
-    */
-    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * The image is read.
-    */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API void info(std::ostream &_sstream ) ;
-
-
-private :
-
-    /**
-    * @brief Load a VTK mesh.
-    * @param[in] _vtkFile ::boost::filesystem::path.
-    * @param[out] _pMesh ::boost::shared_ptr< ::fwData::Mesh >.
-    * @return bool.
-    *
-    * This method is used to load a mesh using the file path.
-    */
-    void loadMesh( const ::boost::filesystem::path _vtkFile, ::fwData::Mesh::sptr _pMesh );
-
-    /**
-     * @brief Notification method.
-     *
-     * This method is used to notify
-     * the mesh services.
-     */
-    void notificationOfUpdate();
-
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the mesh path is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    /**
-    * @brief Mesh path.
-    */
-    ::boost::filesystem::path m_fsMeshPath;
-
-};
-
-} // namespace ioVTK
-
-#endif //_IOVTK_MESHREADERSERVICE_HPP_
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/MeshWriterService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/MeshWriterService.hpp
deleted file mode 100644
index 67395c9..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/MeshWriterService.hpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_MESHWRITERSERVICE_HPP_
-#define _IOVTK_MESHWRITERSERVICE_HPP_
-
-#include <boost/filesystem/path.hpp>
-
-#include <io/IWriter.hpp>
-
-#include "ioVTK/export.hpp"
-
-namespace fwData
-{
-    class Mesh;
-}
-
-namespace fwServices
-{
-    class ObjectMsg;
-}
-
-namespace ioVTK
-{
-
-/**
- * @brief   VTK mesh writer service.
- * @class   MeshWriterService
- *
- * Service writing a VTK Mesh using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::MeshWriterService , ::fwData::Mesh )
- */
-class IOVTK_CLASS_API MeshWriterService : public ::io::IWriter
-{
-
-public :
-    ~MeshWriterService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (MeshWriterService)( ::io::IWriter) ) ;
-
-    /**
-    * @brief Configure the mesh path.
-    *
-    * This method is used to find
-    * the file path  using a file selector.
-    */
-    IOVTK_API virtual void configureWithIHM();
-
-    /**
-     * @brief Save a VTK mesh.
-     * @param[in] meshFile \b const ::boost::filesystem::path.
-     * @param[out] mesh ::boost::shared_ptr< ::fwData::Mesh >.
-     *
-     * This method is used to save a mesh using the file path.
-     */
-    IOVTK_API static void saveMesh( const ::boost::filesystem::path& meshFile, const SPTR(::fwData::Mesh)& mesh );
-
-
-
-protected:
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    */
-    IOVTK_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-    * @brief Stopping method.
-    *
-    * The stopping method is empty for this service.
-    */
-    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * The mesh is read.
-    */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-     * @brief Info method.
-     *
-     * This method is used to give
-     * informations about the service.
-     */
-    IOVTK_API void info(std::ostream &_sstream ) ;
-
-private :
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the image path is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    /**
-    * @brief Mesh path .
-    */
-    ::boost::filesystem::path m_fsMeshPath;
-
-};
-
-} // namespace ioVTK
-
-#endif //_IOVTK_MESHWRITERSERVICE_HPP_
-
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/Namespace.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/Namespace.hpp
index 6ddd637..c08f22f 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/Namespace.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/Namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef IOVTKNAMESPACE_HPP_
-#define IOVTKNAMESPACE_HPP_
+#ifndef __IOVTK_NAMESPACE_HPP__
+#define __IOVTK_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace ioVTK contains reader, writer and helper using the fwVtkIO lib for output and input actions between data and the frameWork.
@@ -16,4 +16,4 @@ namespace ioVTK
 {
 
 }
-#endif /* IOVTKNAMESPACE_HPP_ */
+#endif /* __IOVTK_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/Plugin.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/Plugin.hpp
index e11d7a7..b18e86f 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/Plugin.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _ioVTK_PLUGIN_HPP_
-#define _ioVTK_PLUGIN_HPP_
+#ifndef __IOVTK_PLUGIN_HPP__
+#define __IOVTK_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -19,23 +19,23 @@ public:
     ~Plugin() throw();
 
     /**
-    * @brief Start method.
-    *
-    * This method is used by runtime in order to initialize the bundle.
-    *
-    * @exception ::fwRuntime::RuntimeException
-    */
+     * @brief Start method.
+     *
+     * This method is used by runtime in order to initialize the bundle.
+     *
+     * @exception ::fwRuntime::RuntimeException
+     */
     void start() throw(::fwRuntime::RuntimeException);
 
     /**
-    * @brief Stop method.
-    *
-    * This method is used by runtime in order to close the bundle.
-    */
+     * @brief Stop method.
+     *
+     * This method is used by runtime in order to close the bundle.
+     */
     void stop() throw();
 
 };
 
 } // namespace ioVTK
 
-#endif //_ioVTK_PLUGIN_HPP_
+#endif //__IOVTK_PLUGIN_HPP__
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SImageReader.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SImageReader.hpp
new file mode 100644
index 0000000..6072f14
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SImageReader.hpp
@@ -0,0 +1,105 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOVTK_SIMAGEREADER_HPP__
+#define __IOVTK_SIMAGEREADER_HPP__
+
+#include "ioVTK/config.hpp"  // Declaration of class and function export
+
+#include <io/IReader.hpp> // Definition of abstract reader class
+
+#include <boost/filesystem/path.hpp> // Used to save the file system path of loaded image
+
+// Pre-definition of ::fwData::Image to avoid inclusion file
+namespace fwData
+{
+class Image;
+}
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace ioVTK
+{
+
+/**
+ * @brief VTK Image Reader
+ *
+ * Service reading a VTK Image using the fwVtkIO lib.
+ */
+class IOVTK_CLASS_API SImageReader : public ::io::IReader
+{
+
+public:
+    ~SImageReader() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SImageReader)( ::io::IReader) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+    /**
+     * @brief Configure the image path with a dialogBox.
+     *
+     * This method is used to find the file path using a file selector.
+     */
+    IOVTK_API virtual void configureWithIHM();
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SImageReader() throw();
+
+protected:
+
+    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
+
+    /// Method called when the service is started, does nothing.
+    IOVTK_API virtual void starting() throw ( ::fwTools::Failed );
+
+    /// Method called when the service is stopped, does nothing.
+    IOVTK_API virtual void stopping() throw ( ::fwTools::Failed );
+
+    /**
+     * @brief Updating method execute the read process.
+     *
+     * This method is used to update the service.
+     * The image is read.
+     */
+    IOVTK_API void updating() throw(::fwTools::Failed);
+
+    /// Info method gives some informations on service.
+    IOVTK_API void info(std::ostream &_sstream );
+
+private:
+
+    /**
+     * @brief This method is used to load an vtk image using a file path.
+     * @param[in] _vtkFile file system path of vtk image
+     * @param[out] _pImage new empty image that will contain image loaded, if reading process is a success.
+     * @return bool  \b true if the image loading is a success and \b false if it fails
+     */
+    bool loadImage( const ::boost::filesystem::path _vtkFile, std::shared_ptr< ::fwData::Image > _pImage );
+
+    /// This method notifies other image services that a new image has been loaded.
+    void notificationOfDBUpdate();
+
+    /// This value is \b true if the path image is known.
+    bool m_bServiceIsConfigured;
+
+    /// Image path, location of image on filesystem.
+    ::boost::filesystem::path m_fsImgPath;
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
+};
+
+} // namespace ioVTK
+
+#endif // __IOVTK_SIMAGEREADER_HPP__
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SImageSeriesWriter.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SImageSeriesWriter.hpp
index 0376b58..9d45051 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/SImageSeriesWriter.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SImageSeriesWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,17 +7,22 @@
 #ifndef __IOVTK_SIMAGESERIESWRITER_HPP__
 #define __IOVTK_SIMAGESERIESWRITER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
+#include "ioVTK/config.hpp"
 
 #include <io/IWriter.hpp>
 
+#include <boost/filesystem/path.hpp>
+#include <string>
 
-#include "ioVTK/export.hpp"
 
 namespace fwData
 {
-    class Image;
+class Image;
+}
+
+namespace fwJobs
+{
+class IJob;
 }
 
 
@@ -25,18 +30,27 @@ namespace ioVTK
 {
 
 /**
- * @brief   Image series writer service.
- * @class   SImageSeriesWriter
+ * @brief   VTK Image Writer.
  *
  * Service writing an image series using the fwVtkIO lib.
  */
 class IOVTK_CLASS_API SImageSeriesWriter : public ::io::IWriter
 {
 
-public :
-    ~SImageSeriesWriter() throw() {}
+public:
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SImageSeriesWriter() throw();
+
+    ~SImageSeriesWriter() throw()
+    {
+    }
 
-    fwCoreServiceClassDefinitionsMacro ( (SImageSeriesWriter)( ::io::IWriter) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SImageSeriesWriter)( ::io::IWriter) );
 
     /**
      * @brief Configure the image path.
@@ -70,23 +84,14 @@ protected:
     IOVTK_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed) {};
-
-    /**
      * @brief Info method.
      *
      * This method is used to give informations about the service.
      */
-    IOVTK_API void info(std::ostream &_sstream ) ;
+    IOVTK_API void info(std::ostream &_sstream );
 
 
-private :
+private:
 
     /**
      * @brief the m_bServiceIsConfigured value is \b true
@@ -99,6 +104,8 @@ private :
      */
     ::boost::filesystem::path m_fsImgPath;
 
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
 };
 
 } // namespace ioVTK
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SImageWriter.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SImageWriter.hpp
new file mode 100644
index 0000000..f16ebf3
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SImageWriter.hpp
@@ -0,0 +1,128 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOVTK_SIMAGEWRITER_HPP__
+#define __IOVTK_SIMAGEWRITER_HPP__
+
+#include "ioVTK/config.hpp"
+
+#include <io/IWriter.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <string>
+
+namespace fwData
+{
+class Image;
+}
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace ioVTK
+{
+
+/**
+ * @brief   VTK Image Writer
+ *
+ * Service writing a VTK Image using the fwVtkIO lib.
+ */
+class IOVTK_CLASS_API SImageWriter : public ::io::IWriter
+{
+
+public:
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SImageWriter() throw();
+
+    ~SImageWriter() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SImageWriter)( ::io::IWriter) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+    /**
+     * @brief Configure the image path.
+     *
+     * This method is used to find
+     * the file path  using a file selector.
+     */
+    IOVTK_API virtual void configureWithIHM();
+
+    /**
+     * @brief Save a VTK image.
+     * @param[in] imgFile ::boost::filesystem::path.
+     * @param[in] image std::shared_ptr< ::fwData::Image >.
+     * @param[in] sigJobCreated signal emitted when the image is saved.
+     * @return bool.
+     *
+     * This method is used to save an image using the file path.
+     * Returns \b true if the image saving is a success and \b false if it fails
+     */
+    IOVTK_API static bool saveImage( const ::boost::filesystem::path& imgFile,
+                                     const SPTR(::fwData::Image)& image,
+                                     const SPTR(JobCreatedSignalType)& sigJobCreated);
+
+
+protected:
+
+    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
+
+    /**
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     */
+    IOVTK_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Stopping method.
+     *
+     * The stopping method is empty for this service.
+     */
+    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * The image is read.
+     */
+    IOVTK_API void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Info method.
+     *
+     * This method is used to give
+     * informations about the service.
+     */
+    IOVTK_API void info(std::ostream &_sstream );
+
+private:
+    /**
+     * @brief the m_bServiceIsConfigured value is \b true
+     * if the image path is known.
+     */
+    bool m_bServiceIsConfigured;
+
+    /**
+     * @brief Image path.
+     */
+    ::boost::filesystem::path m_fsImgPath;
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+};
+
+} // namespace ioVTK
+
+#endif //__IOVTK_SIMAGEWRITER_HPP__
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SMeshReader.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SMeshReader.hpp
new file mode 100644
index 0000000..86d8736
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SMeshReader.hpp
@@ -0,0 +1,139 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOVTK_SMESHREADER_HPP__
+#define __IOVTK_SMESHREADER_HPP__
+
+#include "ioVTK/config.hpp"
+
+#include <fwData/Mesh.hpp>
+
+#include <io/IReader.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <string>
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace ioVTK
+{
+
+/**
+ * @brief   VTK Mesh Reader.
+ *
+ * Service reading a VTK mesh using the fwVtkIO lib.
+ * @section XML Configuration
+ * @code{.xml}
+    <service uid="..." type="::ioVTK::SMeshReader">
+        <inout key="output" uid="mesh" />
+        <file>@path/to/file</file>
+    </service>
+ * @endcode
+ *
+ * @subsection In-Out In-Out
+ * - \b seriesDB [::fwMedData::SeriesDB]: SeriesDB
+ *
+ */
+class IOVTK_CLASS_API SMeshReader : public ::io::IReader
+{
+
+public:
+    virtual ~SMeshReader() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SMeshReader)( ::io::IReader) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+    /// Constructor
+    IOVTK_API SMeshReader() throw();
+
+    /**
+     * @brief Configure the image path.
+     *
+     * This method is used to find
+     * the file path  using a file selector.
+     */
+    IOVTK_API virtual void configureWithIHM();
+
+
+protected:
+
+    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
+
+    /**
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     */
+    IOVTK_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Stopping method.
+     *
+     * The stopping method is empty for this service.
+     */
+    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * The image is read.
+     */
+    IOVTK_API void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Info method.
+     *
+     * This method is used to give
+     * informations about the service.
+     */
+    IOVTK_API void info(std::ostream& _sstream );
+
+
+private:
+
+    /**
+     * @brief Load a VTK mesh.
+     * @param[in] _vtkFile ::boost::filesystem::path.
+     * @param[out] _pMesh std::shared_ptr< ::fwData::Mesh >.
+     * @return bool.
+     *
+     * This method is used to load a mesh using the file path.
+     */
+    void loadMesh( const ::boost::filesystem::path _vtkFile, ::fwData::Mesh::sptr _pMesh );
+
+    /**
+     * @brief Notification method.
+     *
+     * This method is used to notify
+     * the mesh services.
+     */
+    void notificationOfUpdate();
+
+    /**
+     * @brief the m_bServiceIsConfigured value is \b true
+     * if the mesh path is known.
+     */
+    bool m_bServiceIsConfigured;
+
+    /**
+     * @brief Mesh path.
+     */
+    ::boost::filesystem::path m_fsMeshPath;
+
+    /// Signal triggered when job created
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+};
+
+} // namespace ioVTK
+
+#endif //__IOVTK_SMESHREADER_HPP__
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SMeshWriter.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SMeshWriter.hpp
new file mode 100644
index 0000000..9acf1ad
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SMeshWriter.hpp
@@ -0,0 +1,117 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __IOVTK_SMESHWRITER_HPP__
+#define __IOVTK_SMESHWRITER_HPP__
+
+#include "ioVTK/config.hpp"
+
+#include <fwCom/Signal.hpp>
+
+#include <io/IWriter.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+namespace fwData
+{
+class Mesh;
+}
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace ioVTK
+{
+
+/**
+ * @brief  VTK Mesh Writer.
+ *
+ * Service writing a VTK Mesh using the fwVtkIO lib.
+ */
+class IOVTK_CLASS_API SMeshWriter : public ::io::IWriter
+{
+
+public:
+    ~SMeshWriter() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SMeshWriter)( ::io::IWriter) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SMeshWriter() throw();
+
+    /**
+     * @brief Configure the mesh path.
+     *
+     * This method is used to find
+     * the file path  using a file selector.
+     */
+    IOVTK_API virtual void configureWithIHM();
+
+protected:
+
+    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
+
+
+    /**
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     */
+    IOVTK_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Stopping method.
+     *
+     * The stopping method is empty for this service.
+     */
+    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * The mesh is read.
+     */
+    IOVTK_API void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Info method.
+     *
+     * This method is used to give
+     * informations about the service.
+     */
+    IOVTK_API void info(std::ostream &_sstream );
+
+private:
+    /**
+     * @brief the m_bServiceIsConfigured value is \b true
+     * if the image path is known.
+     */
+    bool m_bServiceIsConfigured;
+
+    /**
+     * @brief Mesh path .
+     */
+    ::boost::filesystem::path m_fsMeshPath;
+
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
+};
+
+} // namespace ioVTK
+
+#endif //__IOVTK_SMESHWRITER_HPP__
+
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesObjWriter.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesObjWriter.hpp
index 5914d9d..0cb85fb 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesObjWriter.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesObjWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,37 +7,52 @@
 #ifndef __IOVTK_SMODELSERIESOBJWRITER_HPP__
 #define __IOVTK_SMODELSERIESOBJWRITER_HPP__
 
+#ifndef ANDROID
+
 #include <string>
 #include <boost/filesystem/path.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
 #include <fwData/Mesh.hpp>
 
 #include <io/IWriter.hpp>
 
-#include "ioVTK/export.hpp"
+#include "ioVTK/config.hpp"
 
 namespace fwData
 {
-    class Mesh;
+class Mesh;
+}
+
+namespace fwJobs
+{
+class IJob;
 }
 
 namespace ioVTK
 {
 
 /**
- * @brief   Model series .obj writer service.
- * @class   SModelSeriesObjWriter
+ * @brief   Wavefront OBJ files.
  *
  * Service writing a model series as .obj files using the fwVtkIO lib.
  */
 class IOVTK_CLASS_API SModelSeriesObjWriter : public ::io::IWriter
 {
 
-public :
-    ~SModelSeriesObjWriter() throw() {}
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesObjWriter)( ::io::IWriter) ) ;
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SModelSeriesObjWriter() throw();
+
+    ~SModelSeriesObjWriter() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesObjWriter)( ::io::IWriter) );
 
     /**
      * @brief Configure the mesh path.
@@ -74,24 +89,15 @@ protected:
     IOVTK_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
      * informations about the service.
      */
-    IOVTK_API void info(std::ostream &_sstream ) ;
+    IOVTK_API void info(std::ostream &_sstream );
 
 
-private :
+private:
 
     /**
      * @brief the m_bServiceIsConfigured value is \b true
@@ -104,9 +110,12 @@ private :
      */
     ::boost::filesystem::path m_fsMeshPath;
 
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
 };
 
 } // namespace ioVTK
 
-#endif //__IOVTK_SMODELSERIESOBJWRITER_HPP__
+#endif //ANDROID
 
+#endif // __IOVTK_SMODELSERIESOBJWRITER_HPP__
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesReader.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesReader.hpp
index eb6f465..2404d55 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesReader.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,20 +7,25 @@
 #ifndef __IOVTK_SMODELSERIESREADER_HPP__
 #define __IOVTK_SMODELSERIESREADER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
+#include "ioVTK/config.hpp"
 
-#include <fwServices/ObjectMsg.hpp>
+#include <fwData/Mesh.hpp>
 
 #include <io/IReader.hpp>
 
-#include "ioVTK/export.hpp"
+#include <boost/filesystem/path.hpp>
+#include <string>
+
+namespace fwJobs
+{
+class IJob;
+}
 
 namespace ioVTK
 {
 
 /**
- * @brief   Model series reader service.
+ * @brief   VTK Model series reader.
  * @class   SModelSeriesReader
  *
  * Service reading a model series as .vtk files using the fwVtkIO lib.
@@ -28,10 +33,19 @@ namespace ioVTK
 class IOVTK_CLASS_API SModelSeriesReader : public ::io::IReader
 {
 
-public :
-    ~SModelSeriesReader() throw() {}
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesReader)( ::io::IReader) );
 
-    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesReader)( ::io::IReader) ) ;
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SModelSeriesReader() throw();
+
+    ~SModelSeriesReader() throw()
+    {
+    }
 
     /**
      * @brief Configure the mesh path.
@@ -73,12 +87,14 @@ protected:
      * This method is used to give
      * informations about the service.
      */
-    IOVTK_API void info(std::ostream &_sstream ) ;
+    IOVTK_API void info(std::ostream &_sstream );
 
 private:
 
     IOVTK_API void loadMesh( const ::boost::filesystem::path file, ::fwData::Mesh::sptr mesh );
 
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
 };
 
 } // namespace ioVTK
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesWriter.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesWriter.hpp
index 2972178..c22f0b3 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesWriter.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SModelSeriesWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,26 +7,32 @@
 #ifndef __IOVTK_SMODELSERIESWRITER_HPP__
 #define __IOVTK_SMODELSERIESWRITER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
+#include "ioVTK/config.hpp"
+
+#include <fwCom/Signal.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
 #include <fwData/Mesh.hpp>
 
 #include <io/IWriter.hpp>
 
-#include "ioVTK/export.hpp"
+#include <boost/filesystem/path.hpp>
+#include <string>
 
 namespace fwData
 {
-    class Mesh;
+class Mesh;
+}
+
+namespace fwJobs
+{
+class IJob;
 }
 
 namespace ioVTK
 {
 
 /**
- * @brief   Model series writer service.
+ * @brief   VTK Model series writer.
  * @class   SModelSeriesWriter
  *
  * Service writing a model series as .vtk files using the fwVtkIO lib.
@@ -34,10 +40,17 @@ namespace ioVTK
 class IOVTK_CLASS_API SModelSeriesWriter : public ::io::IWriter
 {
 
-public :
-    ~SModelSeriesWriter() throw() {}
+public:
+
+    SModelSeriesWriter() throw();
 
-    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesWriter)( ::io::IWriter) ) ;
+    ~SModelSeriesWriter() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesWriter)( ::io::IWriter) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
 
     /**
      * @brief Configure the mesh path.
@@ -74,21 +87,14 @@ protected:
     IOVTK_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
      * @brief Info method.
      *
      * This method is used to give
      * informations about the service.
      */
-    IOVTK_API void info(std::ostream &_sstream ) ;
+    IOVTK_API void info(std::ostream &_sstream );
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
 
 };
 
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/SSeriesDBReader.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/SSeriesDBReader.hpp
index 716b83a..1b8b739 100644
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/SSeriesDBReader.hpp
+++ b/Bundles/LeafIO/ioVTK/include/ioVTK/SSeriesDBReader.hpp
@@ -1,51 +1,63 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IOVTK_SSERIESDBREADER_HPP_
-#define _IOVTK_SSERIESDBREADER_HPP_
+#ifndef __IOVTK_SSERIESDBREADER_HPP__
+#define __IOVTK_SSERIESDBREADER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
+#include "ioVTK/config.hpp"
 
-#include <fwServices/ObjectMsg.hpp>
 #include <fwData/Mesh.hpp>
+#include <fwData/location/ILocation.hpp>
 
 #include <io/IReader.hpp>
 
+#include <boost/filesystem/path.hpp>
+#include <string>
 
-#include "ioVTK/export.hpp"
+namespace fwMedData
+{
+class SeriesDB;
+}
 
+namespace fwJobs
+{
+class IJob;
+}
 
 namespace ioVTK
 {
 
 /**
- * @brief   SeriesDB reader service.
- * @class   SSeriesDBReader
- * @date    2013.
+ * @brief   VTK File Reader.
  *
  * Service reading a VTK file (mesh or image) using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioVTK::SSeriesDBReader , ::fwMedData::SeriesDB )
  */
 class IOVTK_CLASS_API SSeriesDBReader : public ::io::IReader
 {
 
-public :
-    ~SSeriesDBReader() throw() {}
+public:
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
 
-    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBReader)( ::io::IReader) ) ;
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    IOVTK_API SSeriesDBReader() throw();
+
+    ~SSeriesDBReader() throw()
+    {
+    }
+
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBReader)( ::io::IReader) );
 
     /**
-    * @brief Configure the vtk file path.
-    *
-    * This method is used to find
-    * the file path  using a file selector.
-    */
+     * @brief Configure the vtk file path.
+     *
+     * This method is used to find
+     * the file path  using a file selector.
+     */
     IOVTK_API virtual void configureWithIHM();
 
 
@@ -54,60 +66,53 @@ protected:
     IOVTK_API virtual ::io::IOPathType getIOPathType() const;
 
     /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    */
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     */
     IOVTK_API virtual void starting() throw(::fwTools::Failed);
 
     /**
-    * @brief Stopping method.
-    *
-    * The stopping method is empty for this service.
-    */
+     * @brief Stopping method.
+     *
+     * The stopping method is empty for this service.
+     */
     IOVTK_API virtual void stopping() throw(::fwTools::Failed);
 
     /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * The image is read.
-    */
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * The image is read.
+     */
     IOVTK_API void updating() throw(::fwTools::Failed);
 
     /**
-     * @brief React on modifications : default does nothing.
+     * @brief Info method.
      *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
+     * This method is used to give
+     * informations about the service.
      */
-    IOVTK_API void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API void info(std::ostream &_sstream ) ;
+    IOVTK_API void info(std::ostream &_sstream );
 
 
-private :
+private:
 
     /**
-    * @brief Load VTK mesh or image and push it into SeriesDB.
-    * @param[in] vtkFiles vector of boost::filesystem::path.
-    * @param[out] seriesDB ::boost::shared_ptr< ::fwMedData::SeriesDB >.
-    * @return bool.
-    *
-    * This method is used to load a mesh using the file path.
-    */
+     * @brief Load VTK mesh or image and push it into SeriesDB.
+     * @param[in] vtkFiles vector of boost::filesystem::path.
+     * @param[out] seriesDB std::shared_ptr< ::fwMedData::SeriesDB >.
+     * @return bool.
+     *
+     * This method is used to load a mesh using the file path.
+     */
     void loadSeriesDB( const ::fwData::location::ILocation::VectPathType& vtkFiles,
-                       ::fwMedData::SeriesDB::sptr seriesDB );
+                       const SPTR(::fwMedData::SeriesDB)& seriesDB );
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
 
 };
 
 } // namespace ioVTK
 
-#endif //_IOVTK_SSERIESDBREADER_HPP_
+#endif //__IOVTK_SSERIESDBREADER_HPP__
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/TriangularMeshReaderService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/TriangularMeshReaderService.hpp
deleted file mode 100644
index 1949c54..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/TriangularMeshReaderService.hpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_TRIANGULARMESHREADERSERVICE_HPP_
-#define _IOVTK_TRIANGULARMESHREADERSERVICE_HPP_
-
-#include <string>
-#include <boost/filesystem/path.hpp>
-
-#include <io/IReader.hpp>
-
-
-#include "ioVTK/export.hpp"
-
-namespace fwData
-{
-    class TriangularMesh;
-}
-
-namespace ioVTK
-{
-
-/**
- * @brief   Mesh reader service.
- * @class   TriangularMeshReaderService
- *
- * Service reading a VTK mesh using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioVTK::TriangularMeshReaderService , ::fwData::TriangularMesh )
- */
-class IOVTK_CLASS_API TriangularMeshReaderService : public ::io::IReader
-{
-
-public :
-    ~TriangularMeshReaderService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (TriangularMeshReaderService)( ::io::IReader) ) ;
-
-    /**
-    * @brief Configure the image path.
-    *
-    * This method is used to find
-    * the file path  using a file selector.
-    */
-    IOVTK_API virtual void configureWithIHM();
-
-
-protected:
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    */
-    IOVTK_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-    * @brief Stopping method.
-    *
-    * The stopping method is empty for this service.
-    */
-    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * The image is read.
-    */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API void info(std::ostream &_sstream ) ;
-
-
-private :
-
-    /**
-    * @brief Load a VTK mesh.
-    * @param[in] _vtkFile ::boost::filesystem::path.
-    * @param[out] _pTriangularMesh ::boost::shared_ptr< ::fwData::TriangularMesh >.
-    * @return bool.
-    *
-    * This method is used to load a mesh using the file path.
-    */
-    void loadMesh( const ::boost::filesystem::path _vtkFile, ::boost::shared_ptr< ::fwData::TriangularMesh > _pTriangularMesh );
-
-    /**
-     * @brief Notification method.
-     *
-     * This method is used to notify
-     * the mesh services.
-     */
-    void notificationOfUpdate();
-
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the mesh path is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    /**
-    * @brief Mesh path.
-    */
-    ::boost::filesystem::path m_fsMeshPath;
-
-};
-
-} // namespace ioVTK
-
-#endif //_IOVTK_TRIANGULARMESHREADERSERVICE_HPP_
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/TriangularMeshWriterService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/TriangularMeshWriterService.hpp
deleted file mode 100644
index 3a95ad8..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/TriangularMeshWriterService.hpp
+++ /dev/null
@@ -1,124 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_TRIANGULARMESHWRITERSERVICE_HPP_
-#define _IOVTK_TRIANGULARMESHWRITERSERVICE_HPP_
-
-#include <string>
-#include <boost/filesystem/path.hpp>
-
-#include <io/IWriter.hpp>
-
-
-#include "ioVTK/export.hpp"
-
-namespace fwData
-{
-    class TringularMesh;
-}
-
-
-namespace ioVTK
-{
-
-/**
- * @brief   VTK mesh writer service.
- * @class   TriangularMeshWriterService
- *
- * Service writing a VTK Mesh using the fwVtkIO lib.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::TriangularMeshWriterService , ::fwData::TriangularMesh )
- */
-class IOVTK_CLASS_API TriangularMeshWriterService : public ::io::IWriter
-{
-
-public :
-    ~TriangularMeshWriterService() throw() {}
-
-    fwCoreServiceClassDefinitionsMacro ( (TriangularMeshWriterService)( ::io::IWriter) ) ;
-
-    /**
-    * @brief Configure the mesh path.
-    *
-    * This method is used to find
-    * the file path  using a file selector.
-    */
-    IOVTK_API virtual void configureWithIHM();
-
-
-protected:
-
-    IOVTK_API virtual ::io::IOPathType getIOPathType() const;
-
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    */
-    IOVTK_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-    * @brief Stopping method.
-    *
-    * The stopping method is empty for this service.
-    */
-    IOVTK_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * The mesh is read.
-    */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API void info(std::ostream &_sstream ) ;
-
-
-private :
-
-    /**
-    * @brief Save a VTK image.
-    * @param[in] _vtkFile \b const ::boost::filesystem::path.
-    * @param[out] _pTriangularMesh ::boost::shared_ptr< ::fwData::TriangularMesh >.
-    *
-    * This method is used to save an image using the file path.
-    */
-    void saveMesh( const ::boost::filesystem::path _vtkFile, ::boost::shared_ptr< ::fwData::TriangularMesh > _pTriangularMesh );
-
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the image path is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    /**
-    * @brief Mesh path .
-    */
-    ::boost::filesystem::path m_fsMeshPath;
-
-};
-
-} // namespace ioVTK
-
-#endif //_IOVTK_TRIANGULARMESHWRITERSERVICE_HPP_
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/VtkModelReaderService.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/VtkModelReaderService.hpp
deleted file mode 100644
index f5718c3..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/VtkModelReaderService.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_VTKMODELREADERSERVICE_HPP_
-#define _IOVTK_VTKMODELREADERSERVICE_HPP_
-
-#include <string>
-#include <boost/filesystem/path.hpp>
-
-#include <fwData/Color.hpp>
-#include <io/IReader.hpp>
-
-#include "ioVTK/export.hpp"
-
-
-namespace ioVTK
-{
-
-/**
- * @brief   vtk reader service.
- * @class   VtkModelReaderService
- *
- * Service reading a vtk file using the fwVtkIO lib
- * (for .vtk at this time).
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::io::IReader , ::ioVTK::VtkModelReaderService , ::fwData::Model )
- */
-class IOVTK_CLASS_API VtkModelReaderService : public ::io::IReader
-{
-public:
-    ~VtkModelReaderService() throw() {}
-
-
-    fwCoreServiceClassDefinitionsMacro ( (VtkModelReaderService)( ::io::IReader) ) ;
-
-    /**
-     * @brief Configure the mesh path.
-     *
-     * This method is used to find
-     * the file path  using a file selector.
-     */
-    IOVTK_API virtual void configureWithIHM();
-
-    /*!
-    * @brief Get the supported extensions.
-    *
-    * @return std::vector< std::string >.
-    *
-    * Return a std::vector< std::string > that contains the supported extensions.
-    */
-    IOVTK_API virtual std::vector< std::string > getSupportedExtensions();
-
-    /**
-     * @brief   Constructor
-     */
-    IOVTK_API VtkModelReaderService() throw() ;
-
-protected:
-
-    /**
-    * @brief Starting method : default does nothing.
-    *
-    * This method is used to initialize the service.
-    */
-    virtual void starting() throw(::fwTools::Failed){};
-
-    /**
-     * @brief Stopping method : default does nothing.
-     *
-     * The stopping method is empty for this service.
-     */
-    virtual void stopping() throw(::fwTools::Failed){};
-
-    /**
-    * @brief Configuring method.
-    *
-    * XML configuration sample:
-    * @verbatim
-    <service impl="::ioVTK::ImageReaderService" type="::io::IReader">
-        <filename id=".../imageTest.vtk"/>
-    </service>
-    @endverbatim
-    * This method is used to configure the service.
-    */
-    IOVTK_API virtual void configuring( ) throw(::fwTools::Failed);
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief React on modifications : default does nothing.
-     *
-     * @note This method is automatically called by update( msg ) method from base service ( ::fwServices::IService ).
-     *
-     * @param[in] _msg information message for modification
-     */
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
-
-    /**
-    * @brief Info method.
-    *
-    * This method is used to give
-    * informations about the service.
-    */
-    IOVTK_API virtual void info(std::ostream &_sstream );
-
-
-private:
-
-    /**
-    * @brief Load a VTK mesh.
-    * @param[in] _vtkFile ::boost::filesystem::path.
-    * @param[out] _pTriangularMesh ::boost::shared_ptr< ::fwData::TriangularMesh >.
-    * @return bool.
-    *
-    * This method is used to load a mesh using the file path.
-    */
-    void loadMesh( const ::boost::filesystem::path _vtkFile, ::boost::shared_ptr< ::fwData::TriangularMesh > _pTriangularMesh );
-
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the path image is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    ::fwData::Color::sptr m_color;
-
-    ::boost::filesystem::path m_fsMeshPath;
-};
-
-}
-
-#endif // _IOVTK_VTKMODELREADERSERVICE_HPP_
-
diff --git a/Bundles/LeafIO/ioVTK/include/ioVTK/export.hpp b/Bundles/LeafIO/ioVTK/include/ioVTK/export.hpp
deleted file mode 100644
index ae432a5..0000000
--- a/Bundles/LeafIO/ioVTK/include/ioVTK/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IOVTK_CONFIG_HPP_
-#define _IOVTK_CONFIG_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef IOVTK_EXPORTS
-    #define IOVTK_API __declspec(dllexport)
-    #else
-    #define IOVTK_API __declspec(dllimport)
-    #endif
-
-    #define IOVTK_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IOVTK_EXPORTS
-    #define IOVTK_API __attribute__ ((visibility("default")))
-    #define IOVTK_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IOVTK_API __attribute__ ((visibility("hidden")))
-    #define IOVTK_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IOVTK_API
-    #define IOVTK_CLASS_API
-
-#endif
-
-#endif // #ifndef _IOVTK_CONFIG_HPP_
diff --git a/Bundles/LeafIO/ioVTK/rc/plugin.xml b/Bundles/LeafIO/ioVTK/rc/plugin.xml
index 180d23b..93d495e 100644
--- a/Bundles/LeafIO/ioVTK/rc/plugin.xml
+++ b/Bundles/LeafIO/ioVTK/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ioVTK" class="::ioVTK::Plugin" >
+<plugin id="ioVTK" class="::ioVTK::Plugin" version="@DASH_VERSION@" >
     <library name="ioVTK" />
 
     <requirement id="dataReg" />
@@ -7,15 +7,8 @@
     <requirement id="io" />
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IReader</type>
-        <service>::ioVTK::MaxMeshReaderService</service>
-        <object>::fwData::Model</object>
-        <desc>3ds Reader (VTK)</desc>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IWriter</type>
-        <service>::ioVTK::ImageWriterService</service>
+        <service>::ioVTK::SImageWriter</service>
         <object>::fwData::Image</object>
         <desc>VTK Image Writer (VTK)</desc>
     </extension>
@@ -29,35 +22,21 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IReader</type>
-        <service>::ioVTK::ImageReaderService</service>
+        <service>::ioVTK::SImageReader</service>
         <object>::fwData::Image</object>
         <desc>VTK Image Reader (VTK)</desc>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IReader</type>
-        <service>::ioVTK::TriangularMeshReaderService</service>
-        <object>::fwData::TriangularMesh</object>
-        <desc>VTK triangle mesh Reader (VTK)</desc>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IWriter</type>
-        <service>::ioVTK::TriangularMeshWriterService</service>
-        <object>::fwData::TriangularMesh</object>
-        <desc>VTK triangle mesh Writer (VTK)</desc>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IReader</type>
-        <service>::ioVTK::MeshReaderService</service>
+        <service>::ioVTK::SMeshReader</service>
         <object>::fwData::Mesh</object>
         <desc>VTK Mesh Reader (VTK)</desc>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IWriter</type>
-        <service>::ioVTK::MeshWriterService</service>
+        <service>::ioVTK::SMeshWriter</service>
         <object>::fwData::Mesh</object>
         <desc>VTK Mesh Writer (VTK)</desc>
     </extension>
@@ -85,13 +64,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::io::IReader</type>
-        <service>::ioVTK::VtkModelReaderService</service>
-        <object>::fwData::Model</object>
-        <desc>Model Reader (VTK)</desc>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::io::IReader</type>
         <service>::ioVTK::SSeriesDBReader</service>
         <object>::fwMedData::SeriesDB</object>
         <desc>VTK File Reader (VTK)</desc>
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/ImageReaderService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/ImageReaderService.cpp
deleted file mode 100644
index ef9a031..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/ImageReaderService.cpp
+++ /dev/null
@@ -1,236 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/algorithm/string.hpp>
-#include <boost/filesystem/operations.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/location/Folder.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-
-#include <io/IReader.hpp>
-
-#include <fwDataIO/reader/IObjectReader.hpp>
-#include <fwVtkIO/ImageReader.hpp>
-#include <fwVtkIO/MetaImageReader.hpp>
-#include <fwVtkIO/VtiImageReader.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include "ioVTK/ImageReaderService.hpp"
-
-namespace ioVTK
-{
-
-//------------------------------------------------------------------------------
-
-// Register a new reader of ::fwData::Image
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::ImageReaderService , ::fwData::Image );
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType ImageReaderService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath;
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose a file to load an image");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.addFilter("Vti","*.vti");
-    dialogFile.addFilter("MetaImage","*.mhd");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::starting() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    // This method does nothing
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::stopping() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    // This method does nothing
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::info( std::ostream &_sstream )
-{
-    _sstream << "ImageReaderService::info";
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::updating() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve dataStruct associated with this service
-        ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >() ;
-        SLM_ASSERT("pImage not instanced", pImage);
-
-        // Read new image path and update image. If the reading process is a success, we notify all listeners that image has been modified.
-
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-        try
-        {
-            if ( this->loadImage( this->getFile(), pImage ) )
-            {
-                notificationOfDBUpdate();
-            }
-        }
-        catch(::fwTools::Failed& e)
-        {
-            OSLM_TRACE("Error : " << e.what());
-            FW_RAISE_EXCEPTION(e);
-        }
-
-        cursor.setDefaultCursor();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-bool ImageReaderService::loadImage( const ::boost::filesystem::path imgFile, ::fwData::Image::sptr _pImg )
-{
-    SLM_TRACE_FUNC();
-    bool ok = true;
-
-    // Use a reader of fwVtkIO library to read an image
-    ::fwDataIO::reader::IObjectReader::sptr myReader;
-    // Create a progress bar and attach it to reader
-    ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Image ");
-    std::string ext = ::boost::filesystem::extension(imgFile);
-    ::boost::algorithm::to_lower(ext);
-
-    if(ext == ".vtk")
-    {
-        ::fwVtkIO::ImageReader::sptr vtkReader = ::fwVtkIO::ImageReader::New();
-        vtkReader->addHandler( progressMeterGUI );
-        // Set the file system path
-        vtkReader->setFile(imgFile);
-        myReader = vtkReader;
-    }
-    else if(ext == ".vti")
-    {
-        ::fwVtkIO::VtiImageReader::sptr vtiReader = ::fwVtkIO::VtiImageReader::New();
-        vtiReader->addHandler( progressMeterGUI );
-        vtiReader->setFile(imgFile);
-        myReader = vtiReader;
-    }
-    else if(ext == ".mhd")
-    {
-        ::fwVtkIO::MetaImageReader::sptr mhdReader = ::fwVtkIO::MetaImageReader::New();
-        mhdReader->addHandler( progressMeterGUI );
-        mhdReader->setFile(imgFile);
-        myReader = mhdReader;
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION(::fwTools::Failed("Only .vtk, .vti and .mhd are supported."));
-    }
-
-    // Set the image (already created, but empty) that will be modified
-    myReader->setObject(_pImg);
-
-    try
-    {
-        // Launch reading process
-        myReader->read();
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during loading : " << e.what();
-
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
-        ok = false;
-    }
-    catch( ... )
-    {
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                        "Warning",
-                        "Warning during loading.",
-                        ::fwGui::dialog::IMessageDialog::WARNING);
-        ok = false;
-    }
-
-    return ok;
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    // This method does nothing
-}
-
-//------------------------------------------------------------------------------
-
-void ImageReaderService::notificationOfDBUpdate()
-{
-    SLM_TRACE_FUNC();
-    ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >();
-    SLM_ASSERT("pImage not instanced", pImage);
-
-    // Creation of an image message to say that image is an new image ( or all fields are modified (old version of msg ) )
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::NEW_IMAGE ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::BUFFER ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::REGION ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::SPACING ) ;
-    msg->addEvent( ::fwComEd::ImageMsg::PIXELTYPE ) ;
-
-    // Notify message to all service listeners
-    ::fwServices::IEditionService::notify(this->getSptr(), pImage, msg);
-}
-
-} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/ImageWriterService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/ImageWriterService.cpp
deleted file mode 100644
index 8a9ab39..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/ImageWriterService.cpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/algorithm/string.hpp>
-
-#include <fwTools/Failed.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <io/IWriter.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-
-#include <fwDataIO/reader/IObjectReader.hpp>
-#include <fwVtkIO/ImageWriter.hpp>
-#include <fwVtkIO/MetaImageWriter.hpp>
-#include <fwVtkIO/VtiImageWriter.hpp>
-
-#include "ioVTK/ImageWriterService.hpp"
-
-namespace ioVTK
-{
-
-fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::ImageWriterService , ::fwData::Image ) ;
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType ImageWriterService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void ImageWriterService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose an file to save an image");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.addFilter("Vti","*.vti");
-    dialogFile.addFilter("MetaImage","*.mhd");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void ImageWriterService::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void ImageWriterService::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void ImageWriterService::info(std::ostream &_sstream )
-{
-    _sstream << "ImageWriterService::info";
-}
-
-//------------------------------------------------------------------------------
-
-bool ImageWriterService::saveImage( const ::boost::filesystem::path& imgFile, const SPTR(::fwData::Image)& image )
-{
-    SLM_TRACE_FUNC();
-    bool bValue = true;
-
-    ::fwDataIO::writer::IObjectWriter::sptr myWriter;
-    fwGui::dialog::ProgressDialog progressMeterGUI("Saving images... ");
-    std::string ext = ::boost::filesystem::extension(imgFile);
-    ::boost::algorithm::to_lower(ext);
-
-    if(ext == ".vtk")
-    {
-        ::fwVtkIO::ImageWriter::sptr vtkWriter = ::fwVtkIO::ImageWriter::New();
-        vtkWriter->addHandler( progressMeterGUI );
-        // Set the file system path
-        vtkWriter->setFile(imgFile);
-        myWriter = vtkWriter;
-    }
-    else if(ext == ".vti")
-    {
-        ::fwVtkIO::VtiImageWriter::sptr vtiWriter = ::fwVtkIO::VtiImageWriter::New();
-        vtiWriter->addHandler( progressMeterGUI );
-        vtiWriter->setFile(imgFile);
-        myWriter = vtiWriter;
-    }
-    else if(ext == ".mhd")
-    {
-        ::fwVtkIO::MetaImageWriter::sptr mhdWriter = ::fwVtkIO::MetaImageWriter::New();
-        mhdWriter->addHandler( progressMeterGUI );
-        mhdWriter->setFile(imgFile);
-        myWriter = mhdWriter;
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION(::fwTools::Failed("Only .vtk, .vti and .mhd are supported."));
-    }
-
-    myWriter->setObject(image);
-
-    try
-    {
-        // Launch writing process
-        myWriter->write();
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during saving : " << e.what();
-
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                        "Warning",
-                        ss.str(),
-                        ::fwGui::dialog::IMessageDialog::WARNING);
-        bValue = false;
-    }
-    catch( ... )
-    {
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                                "Warning",
-                                "Warning during saving.",
-                                ::fwGui::dialog::IMessageDialog::WARNING);
-        bValue = false;
-    }
-    return bValue;
-}
-
-//------------------------------------------------------------------------------
-
-void ImageWriterService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve dataStruct associated with this service
-        ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >() ;
-        SLM_ASSERT("Image not instanced", pImage);
-
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-
-        try
-        {
-            this->saveImage(this->getFile() ,pImage);
-        }
-        catch(::fwTools::Failed& e)
-        {
-            OSLM_TRACE("Error : " << e.what());
-            FW_RAISE_EXCEPTION(e);
-        }
-        cursor.setDefaultCursor();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/MaxMeshReaderService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/MaxMeshReaderService.cpp
deleted file mode 100644
index 3139b23..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/MaxMeshReaderService.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/filesystem/operations.hpp>
-
-#include <vtk3DSImporter.h>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/macros.hpp>
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Model.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/LocationDialog.hpp>
-
-
-#include <fwCore/base.hpp>
-
-#include <fwComEd/ModelMsg.hpp>
-
-#include "ioVTK/MaxMeshReaderService.hpp"
-
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::MaxMeshReaderService , ::fwData::Model );
-
-//------------------------------------------------------------------------------
-
-/* Find the node with the specified name */
-static void *list_find (vtk3DSList **root, const char *name)
-{
-    OSLM_DEBUG("list_find: " << name);
-    vtk3DSList *p;
-    int i = 0;
-    for (p = *root; p != (vtk3DSList *) NULL; p = (vtk3DSList *) p->next) {
-        OSLM_DEBUG("List_find - " << i << " name: " << p->name);
-        ++i;
-        if (strcmp(p->name, name) == 0) {
-            break;
-        }
-    }
-    return (void *) p;
-}
-
-namespace ioVTK
-{
-
-//------------------------------------------------------------------------------
-
-void MaxMeshReaderService::info(std::ostream &_sstream )
-{
-    this->BaseClass::info( _sstream ) ;
-    _sstream << std::endl << " 3ds file reader" ;
-}
-
-//------------------------------------------------------------------------------
-
-std::vector< std::string > MaxMeshReaderService::getSupportedExtensions()
-{
-    std::vector< std::string > extensions ;
-    extensions.push_back(".3ds");
-    return extensions ;
-}
-
-//------------------------------------------------------------------------------
-
-void MaxMeshReaderService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose an 3ds file");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("3DS","*.3ds");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-
-::io::IOPathType MaxMeshReaderService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void MaxMeshReaderService::updating() throw(::fwTools::Failed)
-{
-    if( this->hasLocationDefined() )
-    {
-        /// Retrieve object
-        ::fwData::Model::sptr model = this->getObject< ::fwData::Model >( );
-        SLM_ASSERT("model not instanced", model);
-        ::fwData::Model::sptr backupModel = ::fwData::Model::New();
-        backupModel->shallowCopy(model);
-        model->getRefMap().clear();
-
-        vtk3DSImporter *importer1 = vtk3DSImporter::New();
-        importer1->SetFileName(this->getFile().string().c_str());
-        importer1->ComputeNormalsOn();
-        importer1->Read();
-
-        vtk3DSMesh * MeshList = importer1->MeshList;
-        vtk3DSMesh *mesh3ds;
-        // walk the list of meshes, creating actors
-        for (mesh3ds = MeshList; mesh3ds != (vtk3DSMesh *) NULL; mesh3ds = (vtk3DSMesh *) mesh3ds->next)
-        {
-            OSLM_DEBUG("read : " << mesh3ds->name);
-            ::fwData::TriangularMesh::sptr mesh = ::fwData::TriangularMesh::New();
-            vtk3DSFace *face;
-            face = mesh3ds->face;
-            OSLM_DEBUG("mesh->faces : " << mesh3ds->faces);
-            for (int i = 0; i < mesh3ds->faces; i++, face++)
-            {
-                std::vector< int > cell(3) ;
-                cell[0] = face->a;
-                cell[1] = face->b;
-                cell[2] = face->c;
-                mesh->cells().push_back( cell ) ;
-            }
-
-            OSLM_DEBUG("mesh->vertices : " << mesh3ds->vertices);
-            for (int i = 0; i < mesh3ds->vertices; i++)
-            {
-                float *p = mesh3ds->vertex[i];
-                std::vector< float > point(3) ;
-                point[0] = p[0];
-                point[1] = p[1];
-                point[2] = p[2];
-                mesh->points().push_back( point) ;
-            }
-            vtk3DSMatProp *vtkMmat;
-            vtkMmat = (vtk3DSMatProp *)list_find((vtk3DSList **)&importer1->MatPropList, mesh3ds->mtl[0]->name);
-            ::fwData::Color::ColorArray  m_vRGBA;
-            m_vRGBA[0] = vtkMmat->ambient.red;
-            m_vRGBA[1] = vtkMmat->ambient.green;
-            m_vRGBA[2] = vtkMmat->ambient.blue;
-            m_vRGBA[3] = 1.0;
-            ::fwData::Material::sptr dataMat = ::fwData::Material::New();
-            dataMat->ambient()->setCRefRGBA(m_vRGBA);
-            model->getRefMap().insert (
-                    std::pair< ::fwData::TriangularMesh::sptr , ::fwData::Material::sptr >(mesh, dataMat));
-
-        }
-        /// Notify reading
-        ::fwComEd::ModelMsg::sptr msg = ::fwComEd::ModelMsg::New();;
-        msg->addEvent( ::fwComEd::ModelMsg::NEW_MODEL, backupModel ) ;
-        ::fwServices::IEditionService::notify(this->getSptr(), model, msg);
-        importer1->Delete();
-    }
-}
-
-}
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/MeshReaderService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/MeshReaderService.cpp
deleted file mode 100644
index c7126ea..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/MeshReaderService.cpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/filesystem/operations.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/MeshMsg.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/mt/ObjectWriteLock.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwVtkIO/MeshReader.hpp>
-
-#include "ioVTK/MeshReaderService.hpp"
-
-
-namespace ioVTK
-{
-
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::MeshReaderService , ::fwData::Mesh ) ;
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType MeshReaderService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose a vtk file to load Mesh");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::info(std::ostream &_sstream )
-{
-    _sstream << "MeshReaderService::info";
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::loadMesh( const ::boost::filesystem::path vtkFile, ::fwData::Mesh::sptr _pMesh )
-{
-    SLM_TRACE_FUNC();
-    ::fwVtkIO::MeshReader::sptr myReader = ::fwVtkIO::MeshReader::New();
-
-    myReader->setObject(_pMesh);
-    myReader->setFile(vtkFile);
-
-    try
-    {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Mesh");
-        myReader->addHandler( progressMeterGUI );
-        ::fwData::mt::ObjectWriteLock lock(_pMesh);
-        myReader->read();
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during loading : " << e.what();
-
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-    catch( ... )
-    {
-        std::stringstream ss;
-        ss << "Warning during loading. ";
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                "Warning during loading.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve dataStruct associated with this service
-        ::fwData::Mesh::sptr pMesh = this->getObject< ::fwData::Mesh >() ;
-        SLM_ASSERT("pMesh not instanced", pMesh);
-
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-
-        this->loadMesh(this->getFile(), pMesh);
-        this->notificationOfUpdate();
-
-        cursor.setDefaultCursor();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MeshReaderService::notificationOfUpdate()
-{
-    SLM_TRACE_FUNC();
-    ::fwData::Mesh::sptr pMesh = this->getObject< ::fwData::Mesh >();
-    SLM_ASSERT("pMesh not instanced", pMesh);
-
-    ::fwComEd::MeshMsg::sptr msg = ::fwComEd::MeshMsg::New();;
-    msg->addEvent( ::fwComEd::MeshMsg::NEW_MESH ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), pMesh, msg);
-}
-
-//------------------------------------------------------------------------------
-
-
-} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/MeshWriterService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/MeshWriterService.cpp
deleted file mode 100644
index ea5d018..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/MeshWriterService.cpp
+++ /dev/null
@@ -1,149 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/Mesh.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwVtkIO/MeshWriter.hpp>
-
-#include "ioVTK/MeshWriterService.hpp"
-
-
-namespace ioVTK
-{
-
-fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::MeshWriterService , ::fwData::Mesh ) ;
-
-//------------------------------------------------------------------------------
-
-::io::IOPathType MeshWriterService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void MeshWriterService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose a vtk file to save Mesh");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-
-    }
-    else
-    {
-        this->clearLocations();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MeshWriterService::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void MeshWriterService::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void MeshWriterService::info(std::ostream &_sstream )
-{
-    _sstream << "MeshWriterService::info";
-}
-
-//------------------------------------------------------------------------------
-
-void MeshWriterService::saveMesh(const ::boost::filesystem::path& meshFile, const SPTR( ::fwData::Mesh)& mesh)
-{
-    SLM_TRACE_FUNC();
-    ::fwVtkIO::MeshWriter::sptr writer = ::fwVtkIO::MeshWriter::New();
-
-    writer->setObject(mesh);
-    writer->setFile(meshFile);
-
-    try
-    {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving mesh...");
-        writer->addHandler( progressMeterGUI );
-        writer->write();
-
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during saving : " << e.what();
-
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-    catch( ... )
-    {
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                "Warning during saving",
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MeshWriterService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if(  this->hasLocationDefined() )
-    {
-        // Retrieve dataStruct associated with this service
-        ::fwData::Mesh::sptr pMesh = this->getObject< ::fwData::Mesh >() ;
-        SLM_ASSERT("pMesh not instanced", pMesh);
-
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-
-        this->saveMesh(this->getFile(),pMesh);
-
-        cursor.setDefaultCursor();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/Plugin.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/Plugin.cpp
index 563317f..fe98730 100644
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/Plugin.cpp
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace ioVTK
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::ioVTK::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace ioVTK
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SImageReader.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SImageReader.cpp
new file mode 100644
index 0000000..944c417
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SImageReader.cpp
@@ -0,0 +1,244 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioVTK/SImageReader.hpp"
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Image.hpp>
+#include <fwData/location/Folder.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataIO/reader/IObjectReader.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/registry/worker.hpp>
+
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwVtkIO/ImageReader.hpp>
+#include <fwVtkIO/MetaImageReader.hpp>
+#include <fwVtkIO/VtiImageReader.hpp>
+
+#include <io/IReader.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/filesystem/operations.hpp>
+
+#include <chrono>
+#include <cstdint>
+#include <thread>
+
+namespace ioVTK
+{
+
+//------------------------------------------------------------------------------
+
+// Register a new reader of ::fwData::Image
+fwServicesRegisterMacro( ::io::IReader, ::ioVTK::SImageReader, ::fwData::Image );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SImageReader::getIOPathType() const
+{
+    return ::io::FILE;
+}
+
+//------------------------------------------------------------------------------
+
+void SImageReader::configureWithIHM()
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose a file to load an image");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.addFilter("Vtk","*.vtk");
+    dialogFile.addFilter("Vti","*.vti");
+    dialogFile.addFilter("MetaImage","*.mhd");
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
+
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getPath().parent_path();
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+        this->setFile(result->getPath());
+    }
+    else
+    {
+        this->clearLocations();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+SImageReader::SImageReader() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
+
+//------------------------------------------------------------------------------
+
+void SImageReader::starting() throw ( ::fwTools::Failed )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SImageReader::stopping() throw ( ::fwTools::Failed )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SImageReader::info( std::ostream &_sstream )
+{
+    _sstream << "SImageReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SImageReader::updating() throw ( ::fwTools::Failed )
+{
+    if( this->hasLocationDefined() )
+    {
+        // Retrieve dataStruct associated with this service
+        ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >();
+        SLM_ASSERT("pImage not instanced", pImage);
+
+        // Read new image path and update image. If the reading process is a success, we notify all listeners that image has been modified.
+
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+        try
+        {
+            if ( this->loadImage( this->getFile(), pImage ) )
+            {
+                this->notificationOfDBUpdate();
+            }
+        }
+        catch(::fwTools::Failed& e)
+        {
+            OSLM_TRACE("Error : " << e.what());
+            FW_RAISE_EXCEPTION(e);
+        }
+
+        cursor.setDefaultCursor();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+template< typename READER > typename READER::sptr configureReader(const ::boost::filesystem::path &imgFile )
+{
+    typename READER::sptr reader = READER::New();
+    reader->setFile(imgFile);
+    return reader;
+}
+
+//------------------------------------------------------------------------------
+
+bool SImageReader::loadImage( const ::boost::filesystem::path imgFile, ::fwData::Image::sptr _pImg )
+{
+    bool ok = true;
+
+    std::string ext = ::boost::filesystem::extension(imgFile);
+    ::boost::algorithm::to_lower(ext);
+
+    ::fwDataIO::reader::IObjectReader::sptr imageReader;
+    if(ext == ".vtk")
+    {
+        imageReader = configureReader< ::fwVtkIO::ImageReader >( imgFile );
+    }
+    else if(ext == ".vti")
+    {
+        imageReader = configureReader< ::fwVtkIO::VtiImageReader >( imgFile );
+    }
+    else if(ext == ".mhd")
+    {
+        imageReader = configureReader< ::fwVtkIO::MetaImageReader >( imgFile );
+    }
+    else
+    {
+        FW_RAISE_EXCEPTION(::fwTools::Failed("Only .vtk, .vti and .mhd are supported."));
+    }
+
+    // Set the image (already created, but empty) that will be modified
+    ::fwData::mt::ObjectWriteLock lock(_pImg);
+    imageReader->setObject(_pImg);
+
+    m_sigJobCreated->emit(imageReader->getJob());
+
+    try
+    {
+        imageReader->read();
+    }
+    catch(::fwTools::Failed& e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            ss.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
+        ok = false;
+        // Raise exception  for superior level
+        FW_RAISE_EXCEPTION(e);
+    }
+    catch (const std::exception & e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            ss.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
+        ok = false;
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            "Warning during loading.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
+        ok = false;
+    }
+
+    return ok;
+}
+
+//------------------------------------------------------------------------------
+
+void SImageReader::notificationOfDBUpdate()
+{
+    ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >();
+    SLM_ASSERT("pImage not instanced", pImage);
+
+    auto sig = pImage->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+}
+
+} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SImageSeriesWriter.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SImageSeriesWriter.cpp
index e8e1163..4d801ea 100644
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/SImageSeriesWriter.cpp
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SImageSeriesWriter.cpp
@@ -1,22 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/algorithm/string.hpp>
+#include "ioVTK/SImageWriter.hpp"
+#include "ioVTK/SImageSeriesWriter.hpp"
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
 
 #include <fwTools/Failed.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
 
 #include <io/IWriter.hpp>
 
 #include <fwCore/base.hpp>
 
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
 #include <fwData/Image.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -34,13 +39,21 @@
 #include <fwVtkIO/MetaImageWriter.hpp>
 #include <fwVtkIO/VtiImageWriter.hpp>
 
-#include "ioVTK/ImageWriterService.hpp"
-#include "ioVTK/SImageSeriesWriter.hpp"
+#include <boost/algorithm/string.hpp>
 
 namespace ioVTK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::SImageSeriesWriter , ::fwMedData::ImageSeries ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioVTK::SImageSeriesWriter, ::fwMedData::ImageSeries );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SImageSeriesWriter::SImageSeriesWriter() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
@@ -64,8 +77,8 @@ void SImageSeriesWriter::configureWithIHM()
     dialogFile.addFilter("MetaImage","*.mhd");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getPath().parent_path();
@@ -109,7 +122,7 @@ void SImageSeriesWriter::updating() throw(::fwTools::Failed)
     if( this->hasLocationDefined() )
     {
         // Retrieve dataStruct associated with this service
-        ::fwMedData::ImageSeries::sptr imageSeries = this->getObject< ::fwMedData::ImageSeries >() ;
+        ::fwMedData::ImageSeries::sptr imageSeries = this->getObject< ::fwMedData::ImageSeries >();
         SLM_ASSERT("ImageSeries is not instanced", imageSeries);
         SLM_ASSERT("Image from ImageSeries is not instanced", imageSeries->getImage());
 
@@ -118,7 +131,7 @@ void SImageSeriesWriter::updating() throw(::fwTools::Failed)
 
         try
         {
-            ImageWriterService::saveImage(this->getFile(), imageSeries->getImage());
+            SImageWriter::saveImage(this->getFile(), imageSeries->getImage(), m_sigJobCreated);
         }
         catch(::fwTools::Failed& e)
         {
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SImageWriter.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SImageWriter.cpp
new file mode 100644
index 0000000..ad087c4
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SImageWriter.cpp
@@ -0,0 +1,208 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioVTK/SImageWriter.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Image.hpp>
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+
+#include <fwDataIO/reader/IObjectReader.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/Failed.hpp>
+
+#include <fwVtkIO/ImageWriter.hpp>
+#include <fwVtkIO/MetaImageWriter.hpp>
+#include <fwVtkIO/VtiImageWriter.hpp>
+
+#include <io/IWriter.hpp>
+
+#include <boost/algorithm/string.hpp>
+
+namespace ioVTK
+{
+
+fwServicesRegisterMacro( ::io::IWriter, ::ioVTK::SImageWriter, ::fwData::Image );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SImageWriter::SImageWriter() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SImageWriter::getIOPathType() const
+{
+    return ::io::FILE;
+}
+
+//------------------------------------------------------------------------------
+
+void SImageWriter::configureWithIHM()
+{
+    SLM_TRACE_FUNC();
+    static ::boost::filesystem::path _sDefaultPath("");
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose an file to save an image");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.addFilter("Vtk","*.vtk");
+    dialogFile.addFilter("Vti","*.vti");
+    dialogFile.addFilter("MetaImage","*.mhd");
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
+
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getPath().parent_path();
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+        this->setFile(result->getPath());
+    }
+    else
+    {
+        this->clearLocations();
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SImageWriter::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SImageWriter::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SImageWriter::info(std::ostream &_sstream )
+{
+    _sstream << "SImageWriter::info";
+}
+
+//------------------------------------------------------------------------------
+
+bool SImageWriter::saveImage( const ::boost::filesystem::path& imgFile,
+                              const SPTR(::fwData::Image)& image,
+                              const SPTR(JobCreatedSignalType)& sigJobCreated )
+{
+    SLM_TRACE_FUNC();
+    bool bValue = true;
+
+    ::fwDataIO::writer::IObjectWriter::sptr myWriter;
+    fwGui::dialog::ProgressDialog progressMeterGUI("Saving images... ");
+    std::string ext = ::boost::filesystem::extension(imgFile);
+    ::boost::algorithm::to_lower(ext);
+
+    if(ext == ".vtk")
+    {
+        ::fwVtkIO::ImageWriter::sptr vtkWriter = ::fwVtkIO::ImageWriter::New();
+        // Set the file system path
+        vtkWriter->setFile(imgFile);
+        myWriter = vtkWriter;
+    }
+    else if(ext == ".vti")
+    {
+        ::fwVtkIO::VtiImageWriter::sptr vtiWriter = ::fwVtkIO::VtiImageWriter::New();
+        vtiWriter->setFile(imgFile);
+        myWriter = vtiWriter;
+    }
+    else if(ext == ".mhd")
+    {
+        ::fwVtkIO::MetaImageWriter::sptr mhdWriter = ::fwVtkIO::MetaImageWriter::New();
+        mhdWriter->setFile(imgFile);
+        myWriter = mhdWriter;
+    }
+    else
+    {
+        FW_RAISE_EXCEPTION(::fwTools::Failed("Only .vtk, .vti and .mhd are supported."));
+    }
+
+    myWriter->setObject(image);
+
+    sigJobCreated->emit(myWriter->getJob());
+
+    try
+    {
+        // Launch writing process
+        myWriter->write();
+    }
+    catch (const std::exception & e)
+    {
+        std::stringstream ss;
+        ss << "Warning during saving : " << e.what();
+
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            ss.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
+        bValue = false;
+    }
+    catch( ... )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            "Warning during saving.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
+        bValue = false;
+    }
+    return bValue;
+}
+
+//------------------------------------------------------------------------------
+
+void SImageWriter::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    if( this->hasLocationDefined() )
+    {
+        // Retrieve dataStruct associated with this service
+        ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >();
+        SLM_ASSERT("Image not instanced", pImage);
+
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+
+        try
+        {
+            this->saveImage(this->getFile(), pImage, m_sigJobCreated);
+        }
+        catch(::fwTools::Failed& e)
+        {
+            OSLM_TRACE("Error : " << e.what());
+            FW_RAISE_EXCEPTION(e);
+        }
+        cursor.setDefaultCursor();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SMeshReader.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SMeshReader.cpp
new file mode 100644
index 0000000..371efd3
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SMeshReader.cpp
@@ -0,0 +1,184 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioVTK/SMeshReader.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwVtkIO/MeshReader.hpp>
+
+#include <boost/filesystem/operations.hpp>
+
+namespace ioVTK
+{
+
+fwServicesRegisterMacro( ::io::IReader, ::ioVTK::SMeshReader, ::fwData::Mesh );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SMeshReader::getIOPathType() const
+{
+    return ::io::FILE;
+}
+
+//------------------------------------------------------------------------------
+
+SMeshReader::SMeshReader() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >(JOB_CREATED_SIGNAL);
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::configureWithIHM()
+{
+    SLM_TRACE_FUNC();
+
+    static ::boost::filesystem::path _sDefaultPath("");
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose a vtk file to load Mesh");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.addFilter("Vtk","*.vtk");
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
+
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getPath().parent_path();
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+        this->setFile(result->getPath());
+    }
+    else
+    {
+        this->clearLocations();
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::info(std::ostream &_sstream )
+{
+    _sstream << "SMeshReader::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::loadMesh( const ::boost::filesystem::path vtkFile, ::fwData::Mesh::sptr _pMesh )
+{
+    SLM_TRACE_FUNC();
+
+    ::fwVtkIO::MeshReader::sptr reader = ::fwVtkIO::MeshReader::New();
+
+    m_sigJobCreated->emit(reader->getJob());
+
+    reader->setObject(_pMesh);
+    reader->setFile(vtkFile);
+
+    ::fwData::mt::ObjectWriteLock lock(_pMesh);
+
+    try
+    {
+        reader->read();
+    }
+    catch (const std::exception & e)
+    {
+        std::stringstream ss;
+        ss << "Warning during loading : " << e.what();
+
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            ss.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+    catch( ... )
+    {
+        std::stringstream ss;
+        ss << "Warning during loading. ";
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Warning",
+            "Warning during loading.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    if( this->hasLocationDefined() )
+    {
+        // Retrieve dataStruct associated with this service
+        ::fwData::Mesh::sptr pMesh = this->getObject< ::fwData::Mesh >();
+        SLM_ASSERT("pMesh not instanced", pMesh);
+
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+
+        this->loadMesh(this->getFile(), pMesh);
+        this->notificationOfUpdate();
+
+        cursor.setDefaultCursor();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshReader::notificationOfUpdate()
+{
+    SLM_TRACE_FUNC();
+    ::fwData::Mesh::sptr pMesh = this->getObject< ::fwData::Mesh >();
+    SLM_ASSERT("pMesh not instanced", pMesh);
+
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = pMesh->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+
+} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SMeshWriter.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SMeshWriter.cpp
new file mode 100644
index 0000000..222353c
--- /dev/null
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SMeshWriter.cpp
@@ -0,0 +1,151 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ioVTK/SMeshWriter.hpp"
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+#include <fwData/Mesh.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwVtkIO/MeshWriter.hpp>
+
+
+namespace ioVTK
+{
+
+fwServicesRegisterMacro( ::io::IWriter, ::ioVTK::SMeshWriter, ::fwData::Mesh );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SMeshWriter::SMeshWriter() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
+
+//------------------------------------------------------------------------------
+
+::io::IOPathType SMeshWriter::getIOPathType() const
+{
+    return ::io::FILE;
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshWriter::configureWithIHM()
+{
+    SLM_TRACE_FUNC();
+    static ::boost::filesystem::path _sDefaultPath("");
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Choose a vtk file to save Mesh");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.addFilter("Vtk","*.vtk");
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
+
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getPath().parent_path();
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+        this->setFile(result->getPath());
+
+    }
+    else
+    {
+        this->clearLocations();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshWriter::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshWriter::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshWriter::info(std::ostream &_sstream )
+{
+    _sstream << "SMeshWriter::info";
+}
+
+//------------------------------------------------------------------------------
+
+void SMeshWriter::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    if(  this->hasLocationDefined() )
+    {
+        // Retrieve dataStruct associated with this service
+        ::fwData::Mesh::sptr pMesh = this->getObject< ::fwData::Mesh >();
+        SLM_ASSERT("pMesh not instanced", pMesh);
+
+        ::fwGui::Cursor cursor;
+        cursor.setCursor(::fwGui::ICursor::BUSY);
+
+        ::fwVtkIO::MeshWriter::sptr writer = ::fwVtkIO::MeshWriter::New();
+
+        m_sigJobCreated->emit(writer->getJob());
+
+        writer->setObject(pMesh);
+        writer->setFile(this->getFile());
+
+        try
+        {
+            writer->write();
+        }
+        catch (const std::exception & e)
+        {
+            std::stringstream ss;
+            ss << "Warning during saving : " << e.what();
+
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Warning",
+                ss.str(),
+                ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+        catch( ... )
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Warning",
+                "Warning during saving",
+                ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+
+        cursor.setDefaultCursor();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesObjWriter.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesObjWriter.cpp
index 6429dbe..a4df347 100644
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesObjWriter.cpp
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesObjWriter.cpp
@@ -1,45 +1,49 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/operations.hpp>
+#ifndef ANDROID
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include "ioVTK/SMeshWriter.hpp"
+#include "ioVTK/SModelSeriesObjWriter.hpp"
 
 #include <fwCore/base.hpp>
 
+#include <fwData/location/Folder.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
-#include <fwData/location/Folder.hpp>
-
-#include <fwMedData/ModelSeries.hpp>
 
 #include <fwGui/Cursor.hpp>
 #include <fwGui/dialog/ILocationDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/ProgressDialog.hpp>
 
-#include <fwTools/UUID.hpp>
+#include <fwMedData/ModelSeries.hpp>
 
-#include <fwVtkIO/ModelSeriesObjWriter.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwVtkIO/ModelSeriesObjWriter.hpp>
+#include <fwTools/UUID.hpp>
 
-#include "ioVTK/MeshWriterService.hpp"
-#include "ioVTK/SModelSeriesObjWriter.hpp"
+#include <fwVtkIO/ModelSeriesObjWriter.hpp>
 
+#include <boost/filesystem/operations.hpp>
 
 namespace ioVTK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::SModelSeriesObjWriter , ::fwMedData::ModelSeries ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioVTK::SModelSeriesObjWriter, ::fwMedData::ModelSeries );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SModelSeriesObjWriter::SModelSeriesObjWriter() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
@@ -124,7 +128,7 @@ void SModelSeriesObjWriter::updating() throw(::fwTools::Failed)
     if(  this->hasLocationDefined() )
     {
         // Retrieve dataStruct associated with this service
-        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >() ;
+        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
         SLM_ASSERT("ModelSeries is not instanced", modelSeries);
 
         ::fwVtkIO::ModelSeriesObjWriter::sptr writer = ::fwVtkIO::ModelSeriesObjWriter::New();
@@ -136,10 +140,8 @@ void SModelSeriesObjWriter::updating() throw(::fwTools::Failed)
 
         try
         {
-            ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving reconstructions...");
-            writer->addHandler( progressMeterGUI );
+            m_sigJobCreated->emit(writer->getJob());
             writer->write();
-
         }
         catch (const std::exception & e)
         {
@@ -174,3 +176,4 @@ void SModelSeriesObjWriter::updating() throw(::fwTools::Failed)
 
 } // namespace ioVtk
 
+#endif // ANDROID
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesReader.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesReader.cpp
index 80316ec..b2993ef 100644
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesReader.cpp
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesReader.cpp
@@ -1,47 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/operations.hpp>
+#include "ioVTK/SMeshWriter.hpp"
+#include "ioVTK/SModelSeriesReader.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
 #include <fwCore/base.hpp>
 
-#include <fwData/mt/ObjectWriteLock.hpp>
-#include <fwData/Mesh.hpp>
-#include <fwData/Reconstruction.hpp>
 #include <fwData/location/Folder.hpp>
-#include <fwData/location/MultiFiles.hpp>
 #include <fwData/location/ILocation.hpp>
-
-#include <fwMedData/ModelSeries.hpp>
-
-#include <fwComEd/ModelSeriesMsg.hpp>
+#include <fwData/location/MultiFiles.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+#include <fwData/Reconstruction.hpp>
 
 #include <fwGui/Cursor.hpp>
 #include <fwGui/dialog/ILocationDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/ProgressDialog.hpp>
 
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+
+#include <fwServices/macros.hpp>
+
 #include <fwTools/UUID.hpp>
 
 #include <fwVtkIO/MeshReader.hpp>
 
-#include "ioVTK/MeshWriterService.hpp"
-#include "ioVTK/SModelSeriesReader.hpp"
+#include <boost/filesystem/operations.hpp>
 
 
 namespace ioVTK
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::SModelSeriesReader , ::fwMedData::ModelSeries ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioVTK::SModelSeriesReader, ::fwMedData::ModelSeries );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SModelSeriesReader::SModelSeriesReader() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
@@ -64,7 +75,7 @@ void SModelSeriesReader::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
 
-    ::fwData::location::MultiFiles::sptr  result;
+    ::fwData::location::MultiFiles::sptr result;
     result = ::fwData::location::MultiFiles::dynamicCast( dialogFile.show() );
     if (result)
     {
@@ -110,13 +121,14 @@ void SModelSeriesReader::updating() throw(::fwTools::Failed)
     if(  this->hasLocationDefined() )
     {
         // Retrieve dataStruct associated with this service
-        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >() ;
+        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
 
         ::fwGui::Cursor cursor;
         cursor.setCursor(::fwGui::ICursor::BUSY);
 
         ::fwMedData::ModelSeries::ReconstructionVectorType recDB = modelSeries->getReconstructionDB();
-        BOOST_FOREACH(const ::fwData::location::ILocation::PathType& file, this->getFiles())
+        ::fwMedData::ModelSeries::ReconstructionVectorType addedRecs;
+        for(const ::fwData::location::ILocation::PathType& file :  this->getFiles())
         {
             ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
             this->loadMesh(file, mesh);
@@ -126,13 +138,17 @@ void SModelSeriesReader::updating() throw(::fwTools::Failed)
             rec->setIsVisible(true);
             rec->setOrganName(file.stem().string());
             recDB.push_back(rec);
+            addedRecs.push_back(rec);
         }
         cursor.setDefaultCursor();
         modelSeries->setReconstructionDB(recDB);
 
-        ::fwComEd::ModelSeriesMsg::sptr msg = ::fwComEd::ModelSeriesMsg::New();
-        msg->addEvent( ::fwComEd::ModelSeriesMsg::ADD_RECONSTRUCTION ) ;
-        ::fwServices::IEditionService::notify(this->getSptr(), modelSeries, msg);
+        auto sig = modelSeries->signal< ::fwMedData::ModelSeries::ReconstructionsAddedSignalType >(
+            ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit(addedRecs);
+        }
     }
 }
 
@@ -145,10 +161,10 @@ void SModelSeriesReader::loadMesh( const ::boost::filesystem::path file, ::fwDat
     reader->setObject(mesh);
     reader->setFile(file);
 
+    m_sigJobCreated->emit(reader->getJob());
+
     try
     {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Mesh");
-        reader->addHandler( progressMeterGUI );
         ::fwData::mt::ObjectWriteLock lock(mesh);
         reader->read();
     }
@@ -157,16 +173,16 @@ void SModelSeriesReader::loadMesh( const ::boost::filesystem::path file, ::fwDat
         std::stringstream stream;
         stream << "Warning during loading : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                stream.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning",
+            stream.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                "Warning during loading.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning",
+            "Warning during loading.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
     }
 }
 
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesWriter.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesWriter.cpp
index 66bf3c5..a3530a6 100644
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesWriter.cpp
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SModelSeriesWriter.cpp
@@ -1,42 +1,54 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/operations.hpp>
+#include "ioVTK/SMeshWriter.hpp"
+#include "ioVTK/SModelSeriesWriter.hpp"
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwCore/base.hpp>
-
+#include <fwData/location/Folder.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
-#include <fwData/location/Folder.hpp>
-
-#include <fwMedData/ModelSeries.hpp>
 
 #include <fwGui/Cursor.hpp>
 #include <fwGui/dialog/ILocationDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwJobs/IJob.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+
+#include <fwServices/macros.hpp>
 
 #include <fwTools/UUID.hpp>
 
 #include <fwVtkIO/MeshWriter.hpp>
 
-#include "ioVTK/MeshWriterService.hpp"
-#include "ioVTK/SModelSeriesWriter.hpp"
+#include <boost/filesystem/operations.hpp>
 
 
 namespace ioVTK
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::SModelSeriesWriter , ::fwMedData::ModelSeries ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioVTK::SModelSeriesWriter, ::fwMedData::ModelSeries );
+
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+
+//------------------------------------------------------------------------------
+
+SModelSeriesWriter::SModelSeriesWriter() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
@@ -121,21 +133,46 @@ void SModelSeriesWriter::updating() throw(::fwTools::Failed)
     if(  this->hasLocationDefined() )
     {
         // Retrieve dataStruct associated with this service
-        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >() ;
+        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
         SLM_ASSERT("ModelSeries is not instanced", modelSeries);
 
         ::fwGui::Cursor cursor;
         cursor.setCursor(::fwGui::ICursor::BUSY);
 
         const ::fwMedData::ModelSeries::ReconstructionVectorType& recs = modelSeries->getReconstructionDB();
-        BOOST_FOREACH(const SPTR(::fwData::Reconstruction)& rec, recs)
+        for(const SPTR(::fwData::Reconstruction)& rec :  recs)
         {
             SLM_ASSERT("Reconstruction from model series is not instanced", rec);
             ::fwData::Mesh::sptr mesh = rec->getMesh();
             SLM_ASSERT("Mesh from reconstruction is not instanced", mesh);
-            MeshWriterService::saveMesh(
-                    this->getFolder() / (rec->getOrganName() + "_" + ::fwTools::UUID::get(mesh) + ".vtk"),
-                    mesh);
+
+            ::fwVtkIO::MeshWriter::sptr writer = ::fwVtkIO::MeshWriter::New();
+            m_sigJobCreated->emit(writer->getJob());
+
+            writer->setObject(mesh);
+            writer->setFile(this->getFolder() / (rec->getOrganName() + "_" + ::fwTools::UUID::get(mesh) + ".vtk"));
+
+            try
+            {
+                writer->write();
+            }
+            catch (const std::exception & e)
+            {
+                std::stringstream ss;
+                ss << "Warning during saving : " << e.what();
+
+                ::fwGui::dialog::MessageDialog::showMessageDialog(
+                    "Warning",
+                    ss.str(),
+                    ::fwGui::dialog::IMessageDialog::WARNING);
+            }
+            catch( ... )
+            {
+                ::fwGui::dialog::MessageDialog::showMessageDialog(
+                    "Warning",
+                    "Warning during saving",
+                    ::fwGui::dialog::IMessageDialog::WARNING);
+            }
         }
 
         cursor.setDefaultCursor();
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/SSeriesDBReader.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/SSeriesDBReader.cpp
index a7f94f4..e87f05e 100644
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/SSeriesDBReader.cpp
+++ b/Bundles/LeafIO/ioVTK/src/ioVTK/SSeriesDBReader.cpp
@@ -1,39 +1,49 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/operations.hpp>
+#include "ioVTK/SSeriesDBReader.hpp"
 
-#include <fwMedData/SeriesDB.hpp>
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwData/location/Folder.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/ProgressDialog.hpp>
 
-#include <fwData/mt/ObjectWriteLock.hpp>
-#include <fwData/location/Folder.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
 
-#include <fwComEd/helper/SeriesDB.hpp>
+#include <fwMedData/SeriesDB.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
+#include <fwMedDataTools/helper/SeriesDB.hpp>
 
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwVtkIO/SeriesDBReader.hpp>
+#include <fwServices/macros.hpp>
 
-#include "ioVTK/SSeriesDBReader.hpp"
+#include <fwVtkIO/SeriesDBReader.hpp>
 
+#include <boost/filesystem/operations.hpp>
 
 namespace ioVTK
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::SSeriesDBReader , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioVTK::SSeriesDBReader, ::fwMedData::SeriesDB );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+
+//------------------------------------------------------------------------------
+
+SSeriesDBReader::SSeriesDBReader() throw()
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
@@ -52,14 +62,15 @@ void SSeriesDBReader::configureWithIHM()
     dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
     dialogFile.setType(::fwGui::dialog::ILocationDialog::MULTI_FILES);
     dialogFile.setTitle("Choose vtk files to load Series");
-    dialogFile.addFilter("Vtk","*.vtk *.vti *.mhd");
+    dialogFile.addFilter("Vtk","*.vtk *.vti *.mhd *.vtu");
     dialogFile.addFilter("Vtk files","*.vtk");
     dialogFile.addFilter("Vti files","*.vti");
+    dialogFile.addFilter("Vtu files","*.vtu");
     dialogFile.addFilter("MetaImage files","*.mhd");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
 
-    ::fwData::location::MultiFiles::sptr  result;
+    ::fwData::location::MultiFiles::sptr result;
     result = ::fwData::location::MultiFiles::dynamicCast( dialogFile.show() );
     if (result)
     {
@@ -93,7 +104,7 @@ void SSeriesDBReader::stopping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SSeriesDBReader::info(std::ostream &_sstream )
+void SSeriesDBReader::info(std::ostream& _sstream )
 {
     _sstream << "SSeriesDBReader::info";
 }
@@ -101,36 +112,36 @@ void SSeriesDBReader::info(std::ostream &_sstream )
 //------------------------------------------------------------------------------
 
 void SSeriesDBReader::loadSeriesDB( const ::fwData::location::ILocation::VectPathType& vtkFiles,
-                                    ::fwMedData::SeriesDB::sptr seriesDB )
+                                    const ::fwMedData::SeriesDB::sptr& seriesDB )
 {
     ::fwVtkIO::SeriesDBReader::sptr reader = ::fwVtkIO::SeriesDBReader::New();
     reader->setObject(seriesDB);
     reader->setFiles(vtkFiles);
 
+    m_sigJobCreated->emit(reader->getJob());
+
     try
     {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading SeriesDB");
-        reader->addHandler( progressMeterGUI );
         reader->read();
     }
-    catch (const std::exception & e)
+    catch (const std::exception& e)
     {
         std::stringstream ss;
         ss << "Warning during loading : " << e.what();
 
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning",
+            ss.str(),
+            ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         std::stringstream ss;
         ss << "Warning during loading. ";
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                "Warning during loading.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning",
+            "Warning during loading.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
     }
 }
 
@@ -141,7 +152,7 @@ void SSeriesDBReader::updating() throw(::fwTools::Failed)
     if( this->hasLocationDefined() )
     {
         // Retrieve dataStruct associated with this service
-        ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >() ;
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
         SLM_ASSERT("SeriesDB not instanced", seriesDB);
 
         ::fwMedData::SeriesDB::sptr localSeriesDB = ::fwMedData::SeriesDB::New();
@@ -151,11 +162,11 @@ void SSeriesDBReader::updating() throw(::fwTools::Failed)
 
         this->loadSeriesDB(this->getFiles(), localSeriesDB);
 
-        ::fwComEd::helper::SeriesDB sDBhelper(seriesDB);
+        ::fwMedDataTools::helper::SeriesDB sDBhelper(seriesDB);
 
         ::fwData::mt::ObjectWriteLock lock(seriesDB);
         sDBhelper.merge(localSeriesDB);
-        sDBhelper.notify(this->getSptr());
+        sDBhelper.notify();
 
         cursor.setDefaultCursor();
     }
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/TriangularMeshReaderService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/TriangularMeshReaderService.cpp
deleted file mode 100644
index bf9fa85..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/TriangularMeshReaderService.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/filesystem/operations.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/TriangularMeshMsg.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include <io/IReader.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwVtkIO/TriangularMeshReader.hpp>
-
-#include "ioVTK/TriangularMeshReaderService.hpp"
-
-
-namespace ioVTK
-{
-
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::TriangularMeshReaderService , ::fwData::TriangularMesh ) ;
-
-//------------------------------------------------------------------------------
-
-
-::io::IOPathType TriangularMeshReaderService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose a vtk file to load triangle mesh");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::info(std::ostream &_sstream )
-{
-    _sstream << "TriangularMeshReaderService::info";
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::loadMesh( const ::boost::filesystem::path vtkFile, ::fwData::TriangularMesh::sptr _pTriangularMesh )
-{
-    SLM_TRACE_FUNC();
-    ::fwVtkIO::TriangularMeshReader::sptr myReader = ::fwVtkIO::TriangularMeshReader::New();
-
-    myReader->setObject(_pTriangularMesh);
-    myReader->setFile(vtkFile);
-
-    try
-    {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Mesh");
-        myReader->addHandler( progressMeterGUI );
-        myReader->read();
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during loading : " << e.what();
-
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-    catch( ... )
-    {
-        std::stringstream ss;
-        ss << "Warning during loading. ";
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                "Warning during loading.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve dataStruct associated with this service
-        ::fwData::TriangularMesh::sptr pTriangularMesh = this->getObject< ::fwData::TriangularMesh >() ;
-        SLM_ASSERT("pTriangularMesh not instanced", pTriangularMesh);
-
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-
-        loadMesh( this->getFile(), pTriangularMesh);
-        notificationOfUpdate();
-
-        cursor.setDefaultCursor();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReaderService::notificationOfUpdate()
-{
-    SLM_TRACE_FUNC();
-    ::fwData::TriangularMesh::sptr pTriangularMesh = this->getObject< ::fwData::TriangularMesh >();
-    SLM_ASSERT("pTriangularMesh not instanced", pTriangularMesh);
-
-    ::fwComEd::TriangularMeshMsg::sptr msg = ::fwComEd::TriangularMeshMsg::New();;
-    msg->addEvent( ::fwComEd::TriangularMeshMsg::NEW_MESH ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), pTriangularMesh, msg);
-}
-
-//------------------------------------------------------------------------------
-
-
-} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/TriangularMeshWriterService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/TriangularMeshWriterService.cpp
deleted file mode 100644
index 1b9608d..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/TriangularMeshWriterService.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <io/IWriter.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwVtkIO/TriangularMeshWriter.hpp>
-
-#include "ioVTK/TriangularMeshWriterService.hpp"
-
-
-namespace ioVTK
-{
-
-fwServicesRegisterMacro( ::io::IWriter , ::ioVTK::TriangularMeshWriterService , ::fwData::TriangularMesh ) ;
-
-//------------------------------------------------------------------------------
-
-
-::io::IOPathType TriangularMeshWriterService::getIOPathType() const
-{
-    return ::io::FILE;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath("");
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose a vtk file to save triangle mesh");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        this->setFile(result->getPath());
-    }
-    else
-    {
-        this->clearLocations();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::info(std::ostream &_sstream )
-{
-    _sstream << "TriangularMeshWriterService::info";
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::saveMesh( const ::boost::filesystem::path vtkFile, ::fwData::TriangularMesh::sptr _pMesh )
-{
-    SLM_TRACE_FUNC();
-    ::fwVtkIO::TriangularMeshWriter::sptr myWriter = ::fwVtkIO::TriangularMeshWriter::New();
-
-    myWriter->setObject(_pMesh);
-    myWriter->setFile(vtkFile);
-
-    try
-    {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving Mesh");
-        myWriter->addHandler( progressMeterGUI );
-        myWriter->write();
-
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during saving : " << e.what();
-
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                ss.str(),
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-    catch( ... )
-    {
-        ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning",
-                "Warning during saving",
-                ::fwGui::dialog::IMessageDialog::WARNING);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriterService::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if( this->hasLocationDefined() )
-    {
-        // Retrieve dataStruct associated with this service
-        ::fwData::TriangularMesh::sptr pTriangularMesh = this->getObject< ::fwData::TriangularMesh >() ;
-        SLM_ASSERT("pTriangularMesh not instanced", pTriangularMesh);
-
-        ::fwGui::Cursor cursor;
-        cursor.setCursor(::fwGui::ICursor::BUSY);
-
-        saveMesh( this->getFile(), pTriangularMesh);
-
-        cursor.setDefaultCursor();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace ioVtk
diff --git a/Bundles/LeafIO/ioVTK/src/ioVTK/VtkModelReaderService.cpp b/Bundles/LeafIO/ioVTK/src/ioVTK/VtkModelReaderService.cpp
deleted file mode 100644
index 631e39d..0000000
--- a/Bundles/LeafIO/ioVTK/src/ioVTK/VtkModelReaderService.cpp
+++ /dev/null
@@ -1,188 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/filesystem/operations.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/macros.hpp>
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Model.hpp>
-#include <fwData/location/Folder.hpp>
-
-#include <fwComEd/ModelMsg.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-
-#include <fwVtkIO/TriangularMeshReader.hpp>
-
-#include "ioVTK/VtkModelReaderService.hpp"
-
-//------------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::io::IReader , ::ioVTK::VtkModelReaderService , ::fwData::Model );
-
-//------------------------------------------------------------------------------
-
-namespace ioVTK
-{
-
-VtkModelReaderService::VtkModelReaderService() throw():
-    m_bServiceIsConfigured(false)
-{
-    SLM_TRACE_FUNC();
-    m_color = ::fwData::Color::New();
-    m_color->setRGBA( 0.5, 0.5, 0.5, 1.0 );
-}
-
-//------------------------------------------------------------------------------
-
-void VtkModelReaderService::info(std::ostream &_sstream )
-{
-    this->BaseClass::info( _sstream ) ;
-    _sstream << std::endl << " vtk file reader" ;
-}
-
-//------------------------------------------------------------------------------
-
-std::vector< std::string > VtkModelReaderService::getSupportedExtensions()
-{
-    std::vector< std::string > extensions ;
-    extensions.push_back(".vtk");
-    return extensions ;
-}
-
-
-//------------------------------------------------------------------------------
-
-void VtkModelReaderService::configureWithIHM()
-{
-    SLM_TRACE_FUNC();
-    static ::boost::filesystem::path _sDefaultPath;
-
-    ::fwGui::dialog::LocationDialog dialogFile;
-    dialogFile.setTitle("Choose an vtk file to load a model");
-    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-    dialogFile.addFilter("Vtk","*.vtk");
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
-    dialogFile.setOption(::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
-
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
-    if (result)
-    {
-        _sDefaultPath = result->getPath().parent_path();
-        m_fsMeshPath = result->getPath();
-        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
-        m_bServiceIsConfigured = true;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void VtkModelReaderService::configuring( ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    if( m_configuration->findConfigurationElement("filename") )
-    {
-        std::string filename = m_configuration->findConfigurationElement("filename")->getExistingAttributeValue("id") ;
-        OSLM_ASSERT( "vtk file doesn't exist: " << filename, ::boost::filesystem::exists(filename) );
-        m_fsMeshPath = ::boost::filesystem::path( filename ) ;
-        m_bServiceIsConfigured = ::boost::filesystem::exists(filename);
-    }
-    if( m_configuration->findConfigurationElement("color") )
-    {
-        ::std::string hexColor = m_configuration->findConfigurationElement("color")->getExistingAttributeValue("id") ;
-        m_color->setRGBA( hexColor );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void VtkModelReaderService::updating() throw(::fwTools::Failed)
-{
-    if( ! m_bServiceIsConfigured )
-    {
-        configureWithIHM();
-    }
-
-    ::fwData::Model::sptr model = this->getObject< ::fwData::Model >( );
-    SLM_ASSERT("model not instanced", model);
-
-    ::fwData::Model::sptr backupModel = ::fwData::Model::New();
-    backupModel->shallowCopy(model);
-
-    model->getRefMap().clear();
-
-    /// Create a empty triangularMesh
-    ::fwData::TriangularMesh::sptr mesh = ::fwData::TriangularMesh::New();
-    this->loadMesh( m_fsMeshPath, mesh );
-
-    ::fwData::Material::sptr dataMat = ::fwData::Material::New();
-    dataMat->ambient()->setCRefRGBA(m_color->getCRefRGBA());
-    model->getRefMap()[ mesh ] = dataMat ;
-
-    ::fwComEd::ModelMsg::sptr msg = ::fwComEd::ModelMsg::New();;
-    msg->addEvent( ::fwComEd::ModelMsg::NEW_MODEL, backupModel ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), model, msg);
-}
-
-//------------------------------------------------------------------------------
-
-void VtkModelReaderService::loadMesh( const ::boost::filesystem::path vtkFile, ::fwData::TriangularMesh::sptr _pTriangularMesh )
-{
-    SLM_TRACE_FUNC();
-
-    ::fwVtkIO::TriangularMeshReader::sptr myReader = ::fwVtkIO::TriangularMeshReader::New();
-    myReader->setObject(_pTriangularMesh);
-    myReader->setFile(vtkFile);
-
-    try
-    {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Mesh");
-        myReader->addHandler( progressMeterGUI );
-        myReader->read();
-    }
-    catch (const std::exception & e)
-    {
-        std::stringstream ss;
-        ss << "Warning during loading : " << e.what();
-
-        ::fwGui::dialog::MessageDialog messageBox;
-        messageBox.setTitle("Warning");
-        messageBox.setMessage( ss.str() );
-        messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
-        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
-        messageBox.show();
-    }
-    catch( ... )
-    {
-        std::stringstream ss;
-        ss << "Warning during loading.";
-
-        ::fwGui::dialog::MessageDialog messageBox;
-        messageBox.setTitle("Warning");
-        messageBox.setMessage( ss.str() );
-        messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
-        messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
-        messageBox.show();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-
-}
-
diff --git a/Bundles/LeafIO/ioVTK/test/CMakeLists.txt b/Bundles/LeafIO/ioVTK/test/CMakeLists.txt
index c7bb8af..3881996 100644
--- a/Bundles/LeafIO/ioVTK/test/CMakeLists.txt
+++ b/Bundles/LeafIO/ioVTK/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/Bundles/LeafIO/ioVTK/test/Properties.cmake b/Bundles/LeafIO/ioVTK/test/Properties.cmake
index 3ade144..10f574c 100644
--- a/Bundles/LeafIO/ioVTK/test/Properties.cmake
+++ b/Bundles/LeafIO/ioVTK/test/Properties.cmake
@@ -2,7 +2,18 @@
 set( NAME ioVTKTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataTools fwMedData fwDataCamp fwVtkIO )
+set( DEPENDENCIES
+    fwCore
+    fwTest
+    fwTools
+    fwData
+    fwMedData
+    fwDataCamp
+    fwServices
+    fwRuntime
+    fwThread
+    fwGui
+)
 set( REQUIREMENTS ioVTK )
 
 set(CPPUNITTEST_OPTIONS BUNDLE ioVTK WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafIO/ioVTK/test/cppunit.options b/Bundles/LeafIO/ioVTK/test/cppunit.options
deleted file mode 100644
index 895767b..0000000
--- a/Bundles/LeafIO/ioVTK/test/cppunit.options
+++ /dev/null
@@ -1,22 +0,0 @@
-CLASSTEST=[
-          'ImageReaderWriterTest',
-          'SeriesDBReaderTest',
-          'ModelSeriesWriterTest',
-          ]
-USE = []
-LIB = [
-      'fwVtkIO_0-1',
-      'fwTest_0-1',
-      'fwData_0-1',
-      'fwDataCamp_0-1',
-      'fwMedData_0-1',
-      'fwTools_0-1',
-      'fwDataTools_0-1',
-      'fwDataCamp_0-1',
-      ]
-
-REQUIREMENTS = ['dataReg_0-1', 'servicesReg_0-1', 'io_0-1', 'ioVTK_0-1']
-
-CONSOLE = 'yes'
-
-LOGLEVEL='trace'
diff --git a/Bundles/LeafIO/ioVTK/test/tu/include/ImageReaderWriterTest.hpp b/Bundles/LeafIO/ioVTK/test/tu/include/ImageReaderWriterTest.hpp
index 3e23693..1f74645 100644
--- a/Bundles/LeafIO/ioVTK/test/tu/include/ImageReaderWriterTest.hpp
+++ b/Bundles/LeafIO/ioVTK/test/tu/include/ImageReaderWriterTest.hpp
@@ -1,19 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __IOVTK_TEST_TU_IMAGEREADERWRITERTEST_HPP__
-#define __IOVTK_TEST_TU_IMAGEREADERWRITERTEST_HPP__
+#ifndef __IOVTK_UT_IMAGEREADERWRITERTEST_HPP__
+#define __IOVTK_UT_IMAGEREADERWRITERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
-namespace fwData
-{
-    class Image;
-}
-
 namespace ioVTK
 {
 namespace ut
@@ -24,17 +19,17 @@ namespace ut
  */
 class ImageReaderWriterTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageReaderWriterTest );
-    CPPUNIT_TEST( testVtkImageReader );
-    CPPUNIT_TEST( testVtiImageReader );
-    CPPUNIT_TEST( testMhdImageReader );
-    CPPUNIT_TEST( testImageReaderExtension);
-    CPPUNIT_TEST( testVtkImageWriter );
-    CPPUNIT_TEST( testVtkImageSeriesWriter );
-    CPPUNIT_TEST( testVtiImageWriter );
-    CPPUNIT_TEST( testMhdImageWriter );
-    CPPUNIT_TEST( testImageWriterExtension );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageReaderWriterTest );
+CPPUNIT_TEST( testVtkImageReader );
+CPPUNIT_TEST( testVtiImageReader );
+CPPUNIT_TEST( testMhdImageReader );
+CPPUNIT_TEST( testImageReaderExtension);
+CPPUNIT_TEST( testVtkImageWriter );
+CPPUNIT_TEST( testVtkImageSeriesWriter );
+CPPUNIT_TEST( testVtiImageWriter );
+CPPUNIT_TEST( testMhdImageWriter );
+CPPUNIT_TEST( testImageWriterExtension );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -51,19 +46,10 @@ public:
     void testMhdImageWriter();
     void testImageWriterExtension();
 
-
-private :
-    void runImageSrv(
-            const std::string &srvtype,
-            const std::string &srv,
-            const SPTR(::fwRuntime::EConfigurationElement)& cfg,
-            const SPTR(::fwData::Object)& image);
-
-
 };
 
 } //namespace ut
 } //namespace ioVTK
 
-#endif //__IOVTK_TEST_TU_IMAGEREADERWRITERTEST_HPP__
+#endif //__IOVTK_UT_IMAGEREADERWRITERTEST_HPP__
 
diff --git a/Bundles/LeafIO/ioVTK/test/tu/include/ModelSeriesWriterTest.hpp b/Bundles/LeafIO/ioVTK/test/tu/include/ModelSeriesWriterTest.hpp
index 45366c1..a077be9 100644
--- a/Bundles/LeafIO/ioVTK/test/tu/include/ModelSeriesWriterTest.hpp
+++ b/Bundles/LeafIO/ioVTK/test/tu/include/ModelSeriesWriterTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __IOVTK_TEST_TU_MODELSERIESWRITERTEST_HPP__
-#define __IOVTK_TEST_TU_MODELSERIESWRITERTEST_HPP__
+#ifndef __IOVTK_UT_MODELSERIESWRITERTEST_HPP__
+#define __IOVTK_UT_MODELSERIESWRITERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -19,10 +19,10 @@ namespace ut
  */
 class ModelSeriesWriterTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ModelSeriesWriterTest );
-    CPPUNIT_TEST( testWriteMeshes );
-    CPPUNIT_TEST( testWriteReconstructions );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ModelSeriesWriterTest );
+CPPUNIT_TEST( testWriteMeshes );
+CPPUNIT_TEST( testWriteReconstructions );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -36,5 +36,5 @@ public:
 } //namespace ut
 } //namespace ioVTK
 
-#endif //__IOVTK_TEST_TU_MODELSERIESWRITERTEST_HPP__
+#endif //__IOVTK_UT_MODELSERIESWRITERTEST_HPP__
 
diff --git a/Bundles/LeafIO/ioVTK/test/tu/include/SeriesDBReaderTest.hpp b/Bundles/LeafIO/ioVTK/test/tu/include/SeriesDBReaderTest.hpp
index 29048e2..f96ff3b 100644
--- a/Bundles/LeafIO/ioVTK/test/tu/include/SeriesDBReaderTest.hpp
+++ b/Bundles/LeafIO/ioVTK/test/tu/include/SeriesDBReaderTest.hpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IOVTK_TEST_TU_SERIESDBREADERTEST_HPP_
-#define _IOVTK_TEST_TU_SERIESDBREADERTEST_HPP_
-
-#include <fwMedData/SeriesDB.hpp>
+#ifndef __IOVTK_UT_SERIESDBREADERTEST_HPP__
+#define __IOVTK_UT_SERIESDBREADERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -21,10 +19,10 @@ namespace ut
  */
 class SeriesDBReaderTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBReaderTest );
-    CPPUNIT_TEST( testSeriesDBReader );
-    CPPUNIT_TEST( testMergeSeriesDBReader );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesDBReaderTest );
+CPPUNIT_TEST( testSeriesDBReader );
+CPPUNIT_TEST( testMergeSeriesDBReader );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -38,4 +36,4 @@ public:
 } //namespace ut
 } //namespace ioVTK
 
-#endif //_IOVTK_TEST_TU_SERIESDBREADERTEST_HPP_
+#endif //__IOVTK_UT_SERIESDBREADERTEST_HPP__
diff --git a/Bundles/LeafIO/ioVTK/test/tu/src/ImageReaderWriterTest.cpp b/Bundles/LeafIO/ioVTK/test/tu/src/ImageReaderWriterTest.cpp
index 8184977..a9dcfc2 100644
--- a/Bundles/LeafIO/ioVTK/test/tu/src/ImageReaderWriterTest.cpp
+++ b/Bundles/LeafIO/ioVTK/test/tu/src/ImageReaderWriterTest.cpp
@@ -1,38 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fstream>
+#include "ImageReaderWriterTest.hpp"
 
-#include <boost/filesystem.hpp>
+#include <fwData/Image.hpp>
 
-#include <fwRuntime/EConfigurationElement.hpp>
-#include <fwRuntime/profile/Profile.hpp>
+#include <fwDataCamp/visitor/CompareObjects.hpp>
 
-#include <fwTools/System.hpp>
-#include <fwTools/Type.hpp>
+#include <fwDataTools/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/registry/AppConfig.hpp>
+#include <fwGui/registry/worker.hpp>
 
-#include <fwData/Image.hpp>
+#include <fwMedData/ImageSeries.hpp>
 
-#include <fwTest/generator/Image.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
 
-#include <fwDataTools/Image.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#include <fwTest/Data.hpp>
+#include <fwTest/generator/Image.hpp>
+#include <fwTest/helper/compare.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwThread/Worker.hpp>
 
-#include <fwMedData/ImageSeries.hpp>
+#include <fwTools/System.hpp>
 
-#include <fwTest/Data.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
 
-#include "ImageReaderWriterTest.hpp"
+#include <fstream>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::ioVTK::ut::ImageReaderWriterTest );
@@ -46,9 +47,35 @@ namespace ut
 
 //------------------------------------------------------------------------------
 
+void runImageSrv(
+    const std::string& srvtype,
+    const std::string& srvname,
+    const SPTR(::fwRuntime::EConfigurationElement)& cfg,
+    const SPTR(::fwData::Object)& image)
+{
+
+    ::fwServices::IService::sptr srv;
+    srv = ::fwServices::registry::ServiceFactory::getDefault()->create( srvtype, srvname );
+
+    CPPUNIT_ASSERT_MESSAGE(std::string("Failed to create service ") + srvname, srv);
+
+    ::fwServices::OSR::registerService( image, srv );
+
+    CPPUNIT_ASSERT_NO_THROW( srv->setConfiguration(cfg) );
+    CPPUNIT_ASSERT_NO_THROW( srv->configure() );
+    CPPUNIT_ASSERT_NO_THROW( srv->start() );
+    CPPUNIT_ASSERT_NO_THROW( srv->update() );
+    CPPUNIT_ASSERT_NO_THROW( srv->stop() );
+    ::fwServices::OSR::unregisterService( srv );
+}
+
+//------------------------------------------------------------------------------
+
 void ImageReaderWriterTest::setUp()
 {
     // Set up context before running a test.
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    ::fwGui::registry::worker::init(worker);
 }
 
 //------------------------------------------------------------------------------
@@ -56,13 +83,15 @@ void ImageReaderWriterTest::setUp()
 void ImageReaderWriterTest::tearDown()
 {
     // Clean up after the test run.
+    ::fwGui::registry::worker::reset();
 }
 
+//------------------------------------------------------------------------------
 
-::fwRuntime::EConfigurationElement::sptr getIOConfiguration(const ::boost::filesystem::path &file)
+::fwRuntime::EConfigurationElement::sptr getIOConfiguration(const ::boost::filesystem::path& file)
 {
     ::fwRuntime::EConfigurationElement::sptr readerSrvCfg = ::fwRuntime::EConfigurationElement::New("service");
-    ::fwRuntime::EConfigurationElement::sptr readerCfg = ::fwRuntime::EConfigurationElement::New("file");
+    ::fwRuntime::EConfigurationElement::sptr readerCfg    = ::fwRuntime::EConfigurationElement::New("file");
     readerCfg->setValue(file.string());
     readerSrvCfg->addConfigurationElement(readerCfg);
 
@@ -76,6 +105,9 @@ void ImageReaderWriterTest::testVtkImageReader()
 
     const ::boost::filesystem::path file = ::fwTest::Data::dir() / "fw4spl/image/vtk/img.vtk";
 
+    CPPUNIT_ASSERT_MESSAGE("The file '" + file.string() + "' does not exist",
+                           ::boost::filesystem::exists(file));
+
     ::fwData::Image::sptr image = ::fwData::Image::New();
 
     // Data expected
@@ -95,12 +127,12 @@ void ImageReaderWriterTest::testVtkImageReader()
     sizeExpected[1] = 170;
     sizeExpected[2] = 58;
 
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService",getIOConfiguration(file), image);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader",getIOConfiguration(file), image);
 
     // Data read.
     ::fwData::Image::SpacingType spacingRead = image->getSpacing();
-    ::fwData::Image::SpacingType originRead = image->getOrigin();
-    ::fwData::Image::SizeType sizeRead = image->getSize();
+    ::fwData::Image::SpacingType originRead  = image->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = image->getSize();
 
     CPPUNIT_ASSERT_EQUAL(spacingExpected.size(), spacingRead.size() );
     CPPUNIT_ASSERT_EQUAL(originExpected.size(), originRead.size() );
@@ -114,9 +146,9 @@ void ImageReaderWriterTest::testVtkImageReader()
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on y", originExpected[1], originRead[1], epsilon);
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on z", originExpected[2], originRead[2], epsilon);
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2], epsilon);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2]);
 
 }
 
@@ -126,8 +158,11 @@ void ImageReaderWriterTest::testVtiImageReader()
 {
     const ::boost::filesystem::path file = ::fwTest::Data::dir() /"fw4spl/image/vti/BostonTeapot.vti";
 
+    CPPUNIT_ASSERT_MESSAGE("The file '" + file.string() + "' does not exist",
+                           ::boost::filesystem::exists(file));
+
     ::fwData::Image::sptr image = ::fwData::Image::New();
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService",getIOConfiguration(file), image);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader",getIOConfiguration(file), image);
 
     // Data expected
     const size_t dim = 3;
@@ -150,8 +185,8 @@ void ImageReaderWriterTest::testVtiImageReader()
 
     // Data read.
     ::fwData::Image::SpacingType spacingRead = image->getSpacing();
-    ::fwData::Image::SpacingType originRead = image->getOrigin();
-    ::fwData::Image::SizeType sizeRead = image->getSize();
+    ::fwData::Image::SpacingType originRead  = image->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = image->getSize();
 
 
     CPPUNIT_ASSERT_EQUAL(spacingExpected.size(), spacingRead.size() );
@@ -166,9 +201,9 @@ void ImageReaderWriterTest::testVtiImageReader()
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on y", originExpected[1], originRead[1], epsilon);
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on z", originExpected[2], originRead[2], epsilon);
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2], epsilon);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2]);
 
     CPPUNIT_ASSERT_EQUAL( expectedType, image->getType());
 }
@@ -179,8 +214,11 @@ void ImageReaderWriterTest::testMhdImageReader()
 
     const ::boost::filesystem::path file = ::fwTest::Data::dir() / "fw4spl/image/mhd/BostonTeapot.mhd";
 
+    CPPUNIT_ASSERT_MESSAGE("The file '" + file.string() + "' does not exist",
+                           ::boost::filesystem::exists(file));
+
     ::fwData::Image::sptr image = ::fwData::Image::New();
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService",getIOConfiguration(file), image);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader",getIOConfiguration(file), image);
 
     // Data expected
     const size_t dim = 3;
@@ -203,8 +241,8 @@ void ImageReaderWriterTest::testMhdImageReader()
 
     // Data read.
     ::fwData::Image::SpacingType spacingRead = image->getSpacing();
-    ::fwData::Image::SpacingType originRead = image->getOrigin();
-    ::fwData::Image::SizeType sizeRead = image->getSize();
+    ::fwData::Image::SpacingType originRead  = image->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = image->getSize();
 
 
 
@@ -220,9 +258,9 @@ void ImageReaderWriterTest::testMhdImageReader()
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on y", originExpected[1], originRead[1], epsilon);
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on z", originExpected[2], originRead[2], epsilon);
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2], epsilon);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2]);
 
     CPPUNIT_ASSERT_EQUAL( expectedType, image->getType());
 
@@ -241,7 +279,7 @@ void ImageReaderWriterTest::testImageReaderExtension()
 
     {
         const std::string srvtype("::io::IReader");
-        const std::string srvname("::ioVTK::ImageReaderService");
+        const std::string srvname("::ioVTK::SImageReader");
 
 
         ::fwServices::IService::sptr srv;
@@ -249,7 +287,7 @@ void ImageReaderWriterTest::testImageReaderExtension()
 
         CPPUNIT_ASSERT_MESSAGE(std::string("Failed to create service ") + srvname, srv);
 
-        ::fwServices::OSR::registerService( image , srv );
+        ::fwServices::OSR::registerService( image, srv );
 
         CPPUNIT_ASSERT_NO_THROW( srv->setConfiguration(getIOConfiguration(file)) );
         CPPUNIT_ASSERT_NO_THROW( srv->configure() );
@@ -287,19 +325,19 @@ void ImageReaderWriterTest::testVtkImageWriter()
     // Write to vtk image.
     const ::boost::filesystem::path file = ::fwTools::System::getTemporaryFolder() / "temporaryFile.vtk";
 
-    this->runImageSrv("::io::IWriter","::ioVTK::ImageWriterService",getIOConfiguration(file), image);
+    runImageSrv("::io::IWriter","::ioVTK::SImageWriter",getIOConfiguration(file), image);
 
 
     // Read image from disk
     ::fwData::Image::sptr imageFromDisk = ::fwData::Image::New();
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService",getIOConfiguration(file), imageFromDisk);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader",getIOConfiguration(file), imageFromDisk);
 
     ::boost::filesystem::remove(file);
 
     // Data read
     ::fwData::Image::SpacingType spacingRead = imageFromDisk->getSpacing();
-    ::fwData::Image::SpacingType originRead = imageFromDisk->getOrigin();
-    ::fwData::Image::SizeType sizeRead = imageFromDisk->getSize();
+    ::fwData::Image::SpacingType originRead  = imageFromDisk->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = imageFromDisk->getSize();
 
 
     CPPUNIT_ASSERT_EQUAL(spacingExpected.size(), spacingRead.size() );
@@ -314,15 +352,15 @@ void ImageReaderWriterTest::testVtkImageWriter()
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on y", originExpected[1], originRead[1], epsilon);
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on z", originExpected[2], originRead[2], epsilon);
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2], epsilon);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2]);
 
-    ::fwComEd::helper::Image imageHelper(image);
-    ::fwComEd::helper::Image imageFromDiskHelper(imageFromDisk);
+    ::fwDataTools::helper::Image imageHelper(image);
+    ::fwDataTools::helper::Image imageFromDiskHelper(imageFromDisk);
 
-    char *ptrOnGeneratedImage = static_cast<char*>(imageHelper.getBuffer());
-    char *ptrOnReadImage = static_cast<char*>(imageFromDiskHelper.getBuffer());
+    char* ptrOnGeneratedImage = static_cast<char*>(imageHelper.getBuffer());
+    char* ptrOnReadImage      = static_cast<char*>(imageFromDiskHelper.getBuffer());
 
     CPPUNIT_ASSERT_EQUAL( image->getType(), imageFromDisk->getType() );
     CPPUNIT_ASSERT( std::equal(ptrOnGeneratedImage, ptrOnGeneratedImage + image->getSizeInBytes(), ptrOnReadImage) );
@@ -333,7 +371,7 @@ void ImageReaderWriterTest::testVtkImageWriter()
 
 void ImageReaderWriterTest::testVtkImageSeriesWriter()
 {
-    ::fwTools::Type type = ::fwTools::Type::create< float >();
+    ::fwTools::Type type        = ::fwTools::Type::create< float >();
     ::fwData::Image::sptr image = ::fwData::Image::New();
     ::fwTest::generator::Image::generateRandomImage(image, type);
 
@@ -343,15 +381,17 @@ void ImageReaderWriterTest::testVtkImageSeriesWriter()
     const ::boost::filesystem::path file = ::fwTools::System::getTemporaryFolder() / "imageSeries.vtk";
 
     // Write image series
-    this->runImageSrv("::io::IWriter", "::ioVTK::SImageSeriesWriter", getIOConfiguration(file), imageSeries);
+    runImageSrv("::io::IWriter", "::ioVTK::SImageSeriesWriter", getIOConfiguration(file), imageSeries);
 
     // Read image series
     ::fwData::Image::sptr newImage = ::fwData::Image::New();
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService", getIOConfiguration(file), newImage);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader", getIOConfiguration(file), newImage);
 
-    ::fwDataCamp::visitor::CompareObjects visitor;
-    visitor.compare(image, newImage);
-    CPPUNIT_ASSERT_EQUAL(visitor.getDifferences()->size(), (size_t)0);
+    ::fwTest::helper::ExcludeSetType exclude;
+    exclude.insert("window_center");
+    exclude.insert("window_width");
+
+    CPPUNIT_ASSERT(::fwTest::helper::compare(image, newImage, exclude));
 }
 
 //------------------------------------------------------------------------------
@@ -380,17 +420,17 @@ void ImageReaderWriterTest::testVtiImageWriter()
     // Write to vtk image.
     const ::boost::filesystem::path file = ::fwTools::System::getTemporaryFolder() / "temporaryFile.vti";
 
-    this->runImageSrv("::io::IWriter","::ioVTK::ImageWriterService",getIOConfiguration(file), image);
+    runImageSrv("::io::IWriter","::ioVTK::SImageWriter",getIOConfiguration(file), image);
 
 
     // Read image from disk
     ::fwData::Image::sptr imageFromDisk = ::fwData::Image::New();
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService",getIOConfiguration(file), imageFromDisk);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader",getIOConfiguration(file), imageFromDisk);
 
     // Data read
     ::fwData::Image::SpacingType spacingRead = imageFromDisk->getSpacing();
-    ::fwData::Image::SpacingType originRead = imageFromDisk->getOrigin();
-    ::fwData::Image::SizeType sizeRead = imageFromDisk->getSize();
+    ::fwData::Image::SpacingType originRead  = imageFromDisk->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = imageFromDisk->getSize();
 
 
     CPPUNIT_ASSERT_EQUAL(spacingExpected.size(), spacingRead.size() );
@@ -405,14 +445,14 @@ void ImageReaderWriterTest::testVtiImageWriter()
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on y", originExpected[1], originRead[1], epsilon);
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on z", originExpected[2], originRead[2], epsilon);
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2], epsilon);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2]);
 
-    ::fwComEd::helper::Image imageHelper(image);
-    ::fwComEd::helper::Image imageFromDiskHelper(imageFromDisk);
-    char *ptrOnGeneratedImage = static_cast<char*>(imageHelper.getBuffer());
-    char *ptrOnReadImage = static_cast<char*>(imageFromDiskHelper.getBuffer());
+    ::fwDataTools::helper::Image imageHelper(image);
+    ::fwDataTools::helper::Image imageFromDiskHelper(imageFromDisk);
+    char* ptrOnGeneratedImage = static_cast<char*>(imageHelper.getBuffer());
+    char* ptrOnReadImage      = static_cast<char*>(imageFromDiskHelper.getBuffer());
 
     CPPUNIT_ASSERT_EQUAL( image->getType(), imageFromDisk->getType());
     CPPUNIT_ASSERT( std::equal(ptrOnGeneratedImage, ptrOnGeneratedImage + image->getSizeInBytes(), ptrOnReadImage) );
@@ -446,16 +486,16 @@ void ImageReaderWriterTest::testMhdImageWriter()
     // Write to vtk image.
     const ::boost::filesystem::path file = ::fwTools::System::getTemporaryFolder()/ "temporaryFile.mhd";
 
-    this->runImageSrv("::io::IWriter","::ioVTK::ImageWriterService",getIOConfiguration(file), image);
+    runImageSrv("::io::IWriter","::ioVTK::SImageWriter",getIOConfiguration(file), image);
 
     // Read image from disk
     ::fwData::Image::sptr imageFromDisk = ::fwData::Image::New();
-    this->runImageSrv("::io::IReader","::ioVTK::ImageReaderService",getIOConfiguration(file), imageFromDisk);
+    runImageSrv("::io::IReader","::ioVTK::SImageReader",getIOConfiguration(file), imageFromDisk);
 
     // Data read
     ::fwData::Image::SpacingType spacingRead = imageFromDisk->getSpacing();
-    ::fwData::Image::SpacingType originRead = imageFromDisk->getOrigin();
-    ::fwData::Image::SizeType sizeRead = imageFromDisk->getSize();
+    ::fwData::Image::SpacingType originRead  = imageFromDisk->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = imageFromDisk->getSize();
 
 
     CPPUNIT_ASSERT_EQUAL(spacingExpected.size(), spacingRead.size() );
@@ -470,15 +510,15 @@ void ImageReaderWriterTest::testMhdImageWriter()
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on y", originExpected[1], originRead[1], epsilon);
     CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect origin on z", originExpected[2], originRead[2], epsilon);
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1], epsilon);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2], epsilon);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on x", sizeExpected[0], sizeRead[0]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on y", sizeExpected[1], sizeRead[1]);
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Incorrect size on z", sizeExpected[2], sizeRead[2]);
 
 
-    ::fwComEd::helper::Image imageHelper(image);
-    ::fwComEd::helper::Image imageFromDiskHelper(imageFromDisk);
-    char *ptrOnGeneratedImage = static_cast<char*>(imageHelper.getBuffer());
-    char *ptrOnReadImage = static_cast<char*>(imageFromDiskHelper.getBuffer());
+    ::fwDataTools::helper::Image imageHelper(image);
+    ::fwDataTools::helper::Image imageFromDiskHelper(imageFromDisk);
+    char* ptrOnGeneratedImage = static_cast<char*>(imageHelper.getBuffer());
+    char* ptrOnReadImage      = static_cast<char*>(imageFromDiskHelper.getBuffer());
 
     CPPUNIT_ASSERT_EQUAL( image->getType(), imageFromDisk->getType());
     CPPUNIT_ASSERT( std::equal(ptrOnGeneratedImage, ptrOnGeneratedImage + image->getSizeInBytes(), ptrOnReadImage) );
@@ -514,7 +554,7 @@ void ImageReaderWriterTest::testImageWriterExtension()
 
     {
         const std::string srvtype("::io::IWriter");
-        const std::string srvname("::ioVTK::ImageWriterService");
+        const std::string srvname("::ioVTK::SImageWriter");
 
 
         ::fwServices::IService::sptr srv;
@@ -522,7 +562,7 @@ void ImageReaderWriterTest::testImageWriterExtension()
 
         CPPUNIT_ASSERT_MESSAGE(std::string("Failed to create service ") + srvname, srv);
 
-        ::fwServices::OSR::registerService( image , srv );
+        ::fwServices::OSR::registerService( image, srv );
 
         CPPUNIT_ASSERT_NO_THROW( srv->setConfiguration(getIOConfiguration(file)) );
         CPPUNIT_ASSERT_NO_THROW( srv->configure() );
@@ -535,30 +575,6 @@ void ImageReaderWriterTest::testImageWriterExtension()
 
 //------------------------------------------------------------------------------
 
-void ImageReaderWriterTest::runImageSrv(
-        const std::string &srvtype,
-        const std::string &srvname,
-        const SPTR(::fwRuntime::EConfigurationElement)& cfg,
-        const SPTR(::fwData::Object)& image)
-{
-
-    ::fwServices::IService::sptr srv;
-    srv = ::fwServices::registry::ServiceFactory::getDefault()->create( srvtype, srvname );
-
-    CPPUNIT_ASSERT_MESSAGE(std::string("Failed to create service ") + srvname, srv);
-
-    ::fwServices::OSR::registerService( image , srv );
-
-    CPPUNIT_ASSERT_NO_THROW( srv->setConfiguration(cfg) );
-    CPPUNIT_ASSERT_NO_THROW( srv->configure() );
-    CPPUNIT_ASSERT_NO_THROW( srv->start() );
-    CPPUNIT_ASSERT_NO_THROW( srv->update() );
-    CPPUNIT_ASSERT_NO_THROW( srv->stop() );
-    ::fwServices::OSR::unregisterService( srv );
-}
-
-//------------------------------------------------------------------------------
-
 } //namespace ut
 } //namespace ioVTK
 
diff --git a/Bundles/LeafIO/ioVTK/test/tu/src/ModelSeriesWriterTest.cpp b/Bundles/LeafIO/ioVTK/test/tu/src/ModelSeriesWriterTest.cpp
index 1f542e5..2f80b9e 100644
--- a/Bundles/LeafIO/ioVTK/test/tu/src/ModelSeriesWriterTest.cpp
+++ b/Bundles/LeafIO/ioVTK/test/tu/src/ModelSeriesWriterTest.cpp
@@ -1,36 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vector>
-#include <string>
-#include <set>
-
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/functional/hash.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
+#include "ModelSeriesWriterTest.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/registry/AppConfig.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Array.hpp>
 
 #include <fwMedData/ModelSeries.hpp>
 #include <fwMedData/SeriesDB.hpp>
 
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Mesh.hpp>
-#include <fwData/Array.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
 
-#include <fwMemory/BufferObject.hpp>
-#include <fwTools/System.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
 #include <fwTest/generator/SeriesDB.hpp>
 
-#include "ModelSeriesWriterTest.hpp"
+#include <fwTools/System.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/functional/hash.hpp>
+
+#include <vector>
+#include <string>
+#include <set>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::ioVTK::ut::ModelSeriesWriterTest );
@@ -60,11 +58,11 @@ void ModelSeriesWriterTest::tearDown()
 //------------------------------------------------------------------------------
 
 void runModelSeriesSrv(
-        const std::string& impl,
-        const SPTR(::fwRuntime::EConfigurationElement)& cfg,
-        const SPTR(::fwData::Object)& obj)
+    const std::string& impl,
+    const SPTR(::fwRuntime::EConfigurationElement)& cfg,
+    const SPTR(::fwData::Object)& obj)
 {
-   ::fwServices::IService::sptr srv = ::fwServices::registry::ServiceFactory::getDefault()->create(impl);
+    ::fwServices::IService::sptr srv = ::fwServices::registry::ServiceFactory::getDefault()->create(impl);
 
     CPPUNIT_ASSERT_MESSAGE(std::string("Failed to create service ") + impl, srv);
 
@@ -83,7 +81,7 @@ void runModelSeriesSrv(
 ::fwRuntime::EConfigurationElement::sptr getIOCfgFromFolder(const fs::path& file)
 {
     ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
-    ::fwRuntime::EConfigurationElement::sptr cfg = ::fwRuntime::EConfigurationElement::New("folder");
+    ::fwRuntime::EConfigurationElement::sptr cfg    = ::fwRuntime::EConfigurationElement::New("folder");
     cfg->setValue(file.string());
     srvCfg->addConfigurationElement(cfg);
 
@@ -96,7 +94,7 @@ void runModelSeriesSrv(
 {
     ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
 
-    BOOST_FOREACH(std::string file, files)
+    for(std::string file :  files)
     {
         ::fwRuntime::EConfigurationElement::sptr cfg = ::fwRuntime::EConfigurationElement::New("file");
         cfg->setValue(file);
@@ -112,9 +110,9 @@ size_t recHash(const ::fwData::Reconstruction::sptr &rec)
 {
     ::fwData::Mesh::sptr mesh = rec->getMesh();
 
-    ::fwData::Array::sptr points = mesh->getPointsArray();
-    ::fwData::Array::sptr cellTypes = mesh->getCellTypesArray();
-    ::fwData::Array::sptr cellData = mesh->getCellDataArray();
+    ::fwData::Array::sptr points          = mesh->getPointsArray();
+    ::fwData::Array::sptr cellTypes       = mesh->getCellTypesArray();
+    ::fwData::Array::sptr cellData        = mesh->getCellDataArray();
     ::fwData::Array::sptr cellDataOffsets = mesh->getCellDataOffsetsArray();
 
     std::string buf;
@@ -122,19 +120,19 @@ size_t recHash(const ::fwData::Reconstruction::sptr &rec)
     ::fwMemory::BufferObject::sptr bo;
     ::fwMemory::BufferObject::Lock lock;
 
-    bo = points->getBufferObject();
+    bo   = points->getBufferObject();
     lock = (bo->lock());
     buf.append(static_cast< char * >(lock.getBuffer()), bo->getSize());
 
-    bo = cellTypes->getBufferObject();
+    bo   = cellTypes->getBufferObject();
     lock = (bo->lock());
     buf.append(static_cast< char * >(lock.getBuffer()), bo->getSize());
 
-    bo = cellData->getBufferObject();
+    bo   = cellData->getBufferObject();
     lock = (bo->lock());
     buf.append(static_cast< char * >(lock.getBuffer()), bo->getSize());
 
-    bo = cellDataOffsets->getBufferObject();
+    bo   = cellDataOffsets->getBufferObject();
     lock = (bo->lock());
     buf.append(static_cast< char * >(lock.getBuffer()), bo->getSize());
 
@@ -153,7 +151,7 @@ void ModelSeriesWriterTest::testWriteMeshes()
     if( fs::exists(dir) )
     {
         CPPUNIT_ASSERT_MESSAGE(std::string("Directory ") + dir.string() + " must be empty",
-                fs::is_empty(dir));
+                               fs::is_empty(dir));
     }
     else
     {
@@ -161,9 +159,9 @@ void ModelSeriesWriterTest::testWriteMeshes()
     }
 
     runModelSeriesSrv(
-            "::ioVTK::SModelSeriesWriter",
-            getIOCfgFromFolder(dir),
-            modelSeries);
+        "::ioVTK::SModelSeriesWriter",
+        getIOCfgFromFolder(dir),
+        modelSeries);
 
     ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
 
@@ -176,9 +174,9 @@ void ModelSeriesWriterTest::testWriteMeshes()
     CPPUNIT_ASSERT_EQUAL(modelSeries->getReconstructionDB().size(), files.size());
 
     runModelSeriesSrv(
-            "::ioVTK::SSeriesDBReader",
-            getIOCfgFromFiles(files),
-            seriesDB);
+        "::ioVTK::SSeriesDBReader",
+        getIOCfgFromFiles(files),
+        seriesDB);
 
     const ::fwMedData::SeriesDB::ContainerType& series = seriesDB->getContainer();
     CPPUNIT_ASSERT_EQUAL((size_t)1, series.size());
@@ -193,8 +191,8 @@ void ModelSeriesWriterTest::testWriteMeshes()
     std::set< size_t > refHashes;
     std::set< size_t > readHashes;
 
-    const RecVecType& refRecs = modelSeries->getReconstructionDB();
-    RecVecType::const_iterator itRef = refRecs.begin();
+    const RecVecType& refRecs         = modelSeries->getReconstructionDB();
+    RecVecType::const_iterator itRef  = refRecs.begin();
     RecVecType::const_iterator itRead = readRecs.begin();
 
     for(; itRef != refRecs.end(); ++itRef, ++itRead)
@@ -219,7 +217,7 @@ void ModelSeriesWriterTest::testWriteReconstructions()
     if( fs::exists(dir) )
     {
         CPPUNIT_ASSERT_MESSAGE(std::string("Directory ") + dir.string() + " must be empty",
-                fs::is_empty(dir));
+                               fs::is_empty(dir));
     }
     else
     {
@@ -227,9 +225,9 @@ void ModelSeriesWriterTest::testWriteReconstructions()
     }
 
     runModelSeriesSrv(
-            "::ioVTK::SModelSeriesObjWriter",
-            getIOCfgFromFolder(dir),
-            modelSeries);
+        "::ioVTK::SModelSeriesObjWriter",
+        getIOCfgFromFolder(dir),
+        modelSeries);
 
     ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
 
diff --git a/Bundles/LeafIO/ioVTK/test/tu/src/SeriesDBReaderTest.cpp b/Bundles/LeafIO/ioVTK/test/tu/src/SeriesDBReaderTest.cpp
index 2151e31..a0da745 100644
--- a/Bundles/LeafIO/ioVTK/test/tu/src/SeriesDBReaderTest.cpp
+++ b/Bundles/LeafIO/ioVTK/test/tu/src/SeriesDBReaderTest.cpp
@@ -1,37 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fstream>
-#include <fwRuntime/EConfigurationElement.hpp>
-#include <fwRuntime/profile/Profile.hpp>
-
-#include <fwTools/System.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include <fwData/location/ILocation.hpp>
+#include "SeriesDBReaderTest.hpp"
 
 #include <fwData/Image.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
-#include <fwMedData/ImageSeries.hpp>
-#include <fwMedData/ModelSeries.hpp>
-#include <fwMedData/Series.hpp>
+#include <fwData/location/ILocation.hpp>
 
 #include <fwDataCamp/visitor/CompareObjects.hpp>
 
 #include <fwDataTools/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
 #include <fwTest/Data.hpp>
 
-#include "SeriesDBReaderTest.hpp"
+#include <fwTools/System.hpp>
+
+#include <boost/filesystem/operations.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::ioVTK::ut::SeriesDBReaderTest );
@@ -50,11 +49,11 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(objRef, objComp);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
     }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
+    CPPUNIT_ASSERT_MESSAGE("Object Not equal", props->size() == 0 );
 }
 
 //------------------------------------------------------------------------------
@@ -76,11 +75,18 @@ void SeriesDBReaderTest::tearDown()
 void SeriesDBReaderTest::testSeriesDBReader()
 {
     const ::boost::filesystem::path imageFile = ::fwTest::Data::dir() / "fw4spl/image/vtk/img.vtk";
-    const ::boost::filesystem::path meshFile = ::fwTest::Data::dir() / "fw4spl/mesh/vtk/sphere.vtk";
+    const ::boost::filesystem::path meshFile  = ::fwTest::Data::dir() / "fw4spl/mesh/vtk/sphere.vtk";
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imageFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(imageFile));
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + meshFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(meshFile));
+
 
     ::fwRuntime::EConfigurationElement::sptr readerSrvCfg = ::fwRuntime::EConfigurationElement::New("service");
-    ::fwRuntime::EConfigurationElement::sptr file1Cfg = ::fwRuntime::EConfigurationElement::New("file");
-    ::fwRuntime::EConfigurationElement::sptr file2Cfg = ::fwRuntime::EConfigurationElement::New("file");
+    ::fwRuntime::EConfigurationElement::sptr file1Cfg     = ::fwRuntime::EConfigurationElement::New("file");
+    ::fwRuntime::EConfigurationElement::sptr file2Cfg     = ::fwRuntime::EConfigurationElement::New("file");
     file1Cfg->setValue(imageFile.string());
     readerSrvCfg->addConfigurationElement(file1Cfg);
     file2Cfg->setValue(meshFile.string());
@@ -128,10 +134,10 @@ void SeriesDBReaderTest::testSeriesDBReader()
     CPPUNIT_ASSERT_MESSAGE("ModelSeries dynamicCast failed", modelSeries);
 
     // Data read.
-    ::fwData::Image::sptr image = imageSeries->getImage();
+    ::fwData::Image::sptr image              = imageSeries->getImage();
     ::fwData::Image::SpacingType spacingRead = image->getSpacing();
-    ::fwData::Image::SpacingType originRead = image->getOrigin();
-    ::fwData::Image::SizeType sizeRead = image->getSize();
+    ::fwData::Image::SpacingType originRead  = image->getOrigin();
+    ::fwData::Image::SizeType sizeRead       = image->getSize();
 
     CPPUNIT_ASSERT_EQUAL(spacingExpected.size(), spacingRead.size() );
     CPPUNIT_ASSERT_EQUAL(originExpected.size(), originRead.size() );
@@ -153,8 +159,8 @@ void SeriesDBReaderTest::testSeriesDBReader()
 
     ::fwData::Reconstruction::sptr rec1 = modelSeries->getReconstructionDB()[0];
     ::fwData::Reconstruction::sptr rec2 = modelSeries->getReconstructionDB()[1];
-    ::fwData::Mesh::sptr mesh1 = rec1->getMesh();
-    ::fwData::Mesh::sptr mesh2 = rec2->getMesh();
+    ::fwData::Mesh::sptr mesh1          = rec1->getMesh();
+    ::fwData::Mesh::sptr mesh2          = rec2->getMesh();
 
     CPPUNIT_ASSERT_EQUAL((::fwData::Mesh::Id)720, mesh1->getNumberOfCells());
     CPPUNIT_ASSERT_EQUAL((::fwData::Mesh::Id)362, mesh1->getNumberOfPoints());
@@ -168,13 +174,16 @@ void SeriesDBReaderTest::testMergeSeriesDBReader()
 {
     const ::boost::filesystem::path imageFile = ::fwTest::Data::dir() / "fw4spl/image/vtk/img.vtk";
 
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imageFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(imageFile));
+
     ::fwRuntime::EConfigurationElement::sptr readerSrvCfg = ::fwRuntime::EConfigurationElement::New("service");
-    ::fwRuntime::EConfigurationElement::sptr fileCfg = ::fwRuntime::EConfigurationElement::New("file");
+    ::fwRuntime::EConfigurationElement::sptr fileCfg      = ::fwRuntime::EConfigurationElement::New("file");
     fileCfg->setValue(imageFile.string());
     readerSrvCfg->addConfigurationElement(fileCfg);
 
     ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::New();
-    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+    ::fwMedData::SeriesDB::sptr seriesDB       = ::fwMedData::SeriesDB::New();
     seriesDB->getContainer().push_back(imageSeries);
 
     ::fwServices::IService::sptr srv;
diff --git a/Bundles/LeafIO/ioVtkGdcm/CMakeLists.txt b/Bundles/LeafIO/ioVtkGdcm/CMakeLists.txt
index f113a37..1c29206 100644
--- a/Bundles/LeafIO/ioVtkGdcm/CMakeLists.txt
+++ b/Bundles/LeafIO/ioVtkGdcm/CMakeLists.txt
@@ -1,10 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-
-    io
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
 
diff --git a/Bundles/LeafIO/ioVtkGdcm/Properties.cmake b/Bundles/LeafIO/ioVtkGdcm/Properties.cmake
index 9857fe5..43bb074 100644
--- a/Bundles/LeafIO/ioVtkGdcm/Properties.cmake
+++ b/Bundles/LeafIO/ioVtkGdcm/Properties.cmake
@@ -2,6 +2,17 @@
 set( NAME ioVtkGdcm )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwMedData fwRuntime fwServices fwTools vtkGdcmIO io )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwMedData
+    fwRuntime
+    fwServices
+    fwTools
+    vtkGdcmIO
+    io
+    fwDataIO
+)
 set( REQUIREMENTS  )
-
diff --git a/Bundles/LeafIO/ioVtkGdcm/bin/build.options b/Bundles/LeafIO/ioVtkGdcm/bin/build.options
deleted file mode 100644
index 3c65665..0000000
--- a/Bundles/LeafIO/ioVtkGdcm/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['boost']
-LIB     = [
-          'fwTools_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwMedData_0-1',
-          'fwDataIO_0-2',
-          'fwServices_0-1',
-          'fwCore_0-1',
-          'fwComEd_0-1',
-          'vtkGdcmIO_0-1',
-          'fwGui_0-1'
-          ]
-BUNDLES = ['io_0-1']
-
-
diff --git a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/Plugin.hpp b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/Plugin.hpp
index ec6ce71..d916a88 100644
--- a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/Plugin.hpp
+++ b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/Plugin.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@ namespace ioVtkGdcm
 /**
  * @brief   This class is started when the bundles is loaded.
  * @class   Plugin
- * 
+ *
  * @date    2009-2011
  */
 struct Plugin : public ::fwRuntime::Plugin
diff --git a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SImageSeriesWriter.hpp b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SImageSeriesWriter.hpp
index dbd5ade..2f77cb9 100644
--- a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SImageSeriesWriter.hpp
+++ b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SImageSeriesWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,18 +7,21 @@
 #ifndef __IOVTKGDCM_SIMAGESERIESWRITER_HPP__
 #define __IOVTKGDCM_SIMAGESERIESWRITER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
-
+#include "ioVtkGdcm/config.hpp"
 #include <io/IWriter.hpp>
 
-#include "ioVtkGdcm/config.hpp"
+#include <boost/filesystem/path.hpp>
+#include <string>
 
 namespace fwMedData
 {
-    class ImageSeries;
+class ImageSeries;
 }
 
+namespace fwJobs
+{
+class IJob;
+}
 
 namespace ioVtkGdcm
 {
@@ -30,8 +33,10 @@ namespace ioVtkGdcm
 class IOVTKGDCM_CLASS_API SImageSeriesWriter : public ::io::IWriter
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SImageSeriesWriter)( ::io::IWriter) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SImageSeriesWriter)( ::io::IWriter) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
 
     /**
      * @brief   constructor
@@ -61,9 +66,11 @@ protected:
     /// Return path type managed by the service, here FOLDER
     IOVTKGDCM_API ::io::IOPathType getIOPathType() const;
 
-private :
+private:
 
     void saveImageSeries( const ::boost::filesystem::path folder, SPTR(::fwMedData::ImageSeries) series );
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
 };
 
 } // namespace ioVtkGdcm
diff --git a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBLazyReader.hpp b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBLazyReader.hpp
index 4d1802e..002ed52 100644
--- a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBLazyReader.hpp
+++ b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBLazyReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,17 +7,22 @@
 #ifndef __IOVTKGDCM_SSERIESDBLAZYREADER_HPP__
 #define __IOVTKGDCM_SSERIESDBLAZYREADER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
+#include "ioVtkGdcm/config.hpp"
 
 #include <io/IReader.hpp>
 
-#include "ioVtkGdcm/config.hpp"
+#include <string>
+#include <boost/filesystem/path.hpp>
 
 namespace fwMedData
 {
-    class SeriesDB;
-    class Patient;
+class SeriesDB;
+class Patient;
+}
+
+namespace fwJobs
+{
+class IJob;
 }
 
 namespace ioVtkGdcm
@@ -27,11 +32,12 @@ namespace ioVtkGdcm
 class IOVTKGDCM_CLASS_API SSeriesDBLazyReader : public ::io::IReader
 {
 
-public :
-    typedef std::string                  ExtensionType;
+public:
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+    typedef std::string ExtensionType;
     typedef std::vector< ExtensionType > ExtensionsType;
 
-    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBLazyReader)( ::io::IReader) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBLazyReader)( ::io::IReader) );
 
     /// constructor
     IOVTKGDCM_API SSeriesDBLazyReader() throw();
@@ -51,13 +57,10 @@ protected:
     IOVTKGDCM_API void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
+    IOVTKGDCM_API void info(std::ostream &_sstream );
 
     /// Override
-    IOVTKGDCM_API void info(std::ostream &_sstream ) ;
-
-    /// Override
-    IOVTKGDCM_API virtual ExtensionsType getSupportedExtensions() ;
+    IOVTKGDCM_API virtual ExtensionsType getSupportedExtensions();
 
     /// Override
     IOVTKGDCM_API virtual std::string getSelectorDialogTitle();
@@ -68,7 +71,7 @@ protected:
     /// Return path type managed by the service, here FOLDER
     IOVTKGDCM_API ::io::IOPathType getIOPathType() const;
 
-private :
+private:
 
     /// Notifies seriesDB that few series are added
     void notificationOfDBUpdate();
@@ -76,6 +79,8 @@ private :
     /// Creates ::fwMedData::SeriesDB from a path
     SPTR(::fwMedData::SeriesDB) createSeriesDB(const ::boost::filesystem::path& dicomDir);
 
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
 };
 
 } // namespace ioVtkGdcm
diff --git a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBReader.hpp b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBReader.hpp
index f18d6f2..76630fa 100644
--- a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBReader.hpp
+++ b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/SSeriesDBReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,17 +7,23 @@
 #ifndef __IOVTKGDCM_SSERIESDBREADER_HPP__
 #define __IOVTKGDCM_SSERIESDBREADER_HPP__
 
-#include <string>
-#include <boost/filesystem/path.hpp>
+#include "ioVtkGdcm/config.hpp"
 
 #include <io/IReader.hpp>
 
-#include "ioVtkGdcm/config.hpp"
+#include <boost/filesystem/path.hpp>
+#include <string>
+
 
 namespace fwMedData
 {
-    class SeriesDB;
-    class Patient;
+class SeriesDB;
+class Patient;
+}
+
+namespace fwJobs
+{
+class IJob;
 }
 
 
@@ -27,11 +33,12 @@ namespace ioVtkGdcm
 class IOVTKGDCM_CLASS_API SSeriesDBReader : public ::io::IReader
 {
 
-public :
-    typedef std::string                  ExtensionType;
+public:
+    typedef std::string ExtensionType;
     typedef std::vector< ExtensionType > ExtensionsType;
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
 
-    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBReader)( ::io::IReader) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBReader)( ::io::IReader) );
     /**
      * @brief   constructor
      *
@@ -55,13 +62,10 @@ protected:
     IOVTKGDCM_API void updating() throw(::fwTools::Failed);
 
     /// Override
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed){};
+    IOVTKGDCM_API void info(std::ostream &_sstream );
 
     /// Override
-    IOVTKGDCM_API void info(std::ostream &_sstream ) ;
-
-    /// Override
-    IOVTKGDCM_API virtual ExtensionsType getSupportedExtensions() ;
+    IOVTKGDCM_API virtual ExtensionsType getSupportedExtensions();
 
     /// Override
     IOVTKGDCM_API virtual std::string getSelectorDialogTitle();
@@ -72,12 +76,14 @@ protected:
     /// Return path type managed by the service, here FOLDER
     IOVTKGDCM_API ::io::IOPathType getIOPathType() const;
 
-private :
+private:
 
     void notificationOfDBUpdate();
 
     SPTR(::fwMedData::SeriesDB) createSeriesDB(const ::boost::filesystem::path& dicomDir);
 
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+
 };
 
 } // namespace ioVtkGdcm
diff --git a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/config.hpp b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/config.hpp
deleted file mode 100644
index 5df4f00..0000000
--- a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __IOVTKGDCM_CONFIG_HPP__
-#define __IOVTKGDCM_CONFIG_HPP__
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef IOVTKGDCM_EXPORTS
-    #define IOVTKGDCM_API __declspec(dllexport)
-    #else
-    #define IOVTKGDCM_API __declspec(dllimport)
-    #endif
-
-    #define IOVTKGDCM_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IOVTKGDCM_EXPORTS
-    #define IOVTKGDCM_API __attribute__ ((visibility("default")))
-    #define IOVTKGDCM_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IOVTKGDCM_API __attribute__ ((visibility("hidden")))
-    #define IOVTKGDCM_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IOVTKGDCM_API
-    #define IOVTKGDCM_CLASS_API
-
-#endif
-
-#endif // #ifndef __IOVTKGDCM_CONFIG_HPP__
diff --git a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/namespace.hpp b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/namespace.hpp
index fec92ea..f729717 100644
--- a/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/namespace.hpp
+++ b/Bundles/LeafIO/ioVtkGdcm/include/ioVtkGdcm/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C), 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafIO/ioVtkGdcm/rc/plugin.xml b/Bundles/LeafIO/ioVtkGdcm/rc/plugin.xml
index decbe02..0379797 100644
--- a/Bundles/LeafIO/ioVtkGdcm/rc/plugin.xml
+++ b/Bundles/LeafIO/ioVtkGdcm/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="ioVtkGdcm" class="ioVtkGdcm::Plugin" >
+<plugin id="ioVtkGdcm" class="ioVtkGdcm::Plugin"  version="@DASH_VERSION@" >
     <library name="ioVtkGdcm" />
 
     <requirement id="io" />
diff --git a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/Plugin.cpp b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/Plugin.cpp
index c45531b..c204e2b 100644
--- a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/Plugin.cpp
+++ b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,12 +15,15 @@ namespace ioVtkGdcm
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("ioVtkGdcm::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace ioVtkGdcm
diff --git a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SImageSeriesWriter.cpp b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SImageSeriesWriter.cpp
index be9ba52..a9af111 100644
--- a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SImageSeriesWriter.cpp
+++ b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SImageSeriesWriter.cpp
@@ -1,22 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "ioVtkGdcm/SImageSeriesWriter.hpp"
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+
 #include <fwCore/base.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwTools/ProgressToLogger.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwGui/dialog/ProgressDialog.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
 #include <fwGui/Cursor.hpp>
+#include <fwGui/backend.hpp>
 
 #include <io/IWriter.hpp>
 
@@ -25,23 +29,25 @@
 
 #include <vtkGdcmIO/ImageSeriesWriter.hpp>
 
-#include "ioVtkGdcm/SImageSeriesWriter.hpp"
-
-
 namespace ioVtkGdcm
 {
 
-fwServicesRegisterMacro( ::io::IWriter , ::ioVtkGdcm::SImageSeriesWriter , ::fwMedData::ImageSeries ) ;
+fwServicesRegisterMacro( ::io::IWriter, ::ioVtkGdcm::SImageSeriesWriter, ::fwMedData::ImageSeries );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
 
 //------------------------------------------------------------------------------
 
 SImageSeriesWriter::SImageSeriesWriter() throw()
-{}
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
 SImageSeriesWriter::~SImageSeriesWriter() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -55,8 +61,8 @@ void SImageSeriesWriter::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
     dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
 
-    ::fwData::location::Folder::sptr  result;
-    result= ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getFolder();
@@ -72,12 +78,14 @@ void SImageSeriesWriter::configureWithIHM()
 //------------------------------------------------------------------------------
 
 void SImageSeriesWriter::starting() throw(::fwTools::Failed)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void SImageSeriesWriter::stopping() throw(::fwTools::Failed)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -92,7 +100,7 @@ void SImageSeriesWriter::updating() throw(::fwTools::Failed)
         {
             ::fwGui::dialog::MessageDialog dialog;
             dialog.setMessage("Folder '"+folder.string()+"' isn't empty, files can be overwritten."
-                    "\nDo you want to continue ?");
+                              "\nDo you want to continue ?");
             dialog.setTitle("Folder not empty.");
             dialog.setIcon(::fwGui::dialog::MessageDialog::QUESTION);
             dialog.addButton( ::fwGui::dialog::MessageDialog::YES_NO );
@@ -126,11 +134,10 @@ void SImageSeriesWriter::updating() throw(::fwTools::Failed)
     }
 }
 
-
 //------------------------------------------------------------------------------
 
 void SImageSeriesWriter::saveImageSeries( const ::boost::filesystem::path folder,
-        ::fwMedData::ImageSeries::sptr series )
+                                          ::fwMedData::ImageSeries::sptr series )
 {
     ::vtkGdcmIO::ImageSeriesWriter::sptr writer = ::vtkGdcmIO::ImageSeriesWriter::New();
 
@@ -139,10 +146,10 @@ void SImageSeriesWriter::saveImageSeries( const ::boost::filesystem::path folder
     loc->setFolder(folder);
     writer->setLocation(loc);
 
+    m_sigJobCreated->emit(writer->getJob());
+
     try
     {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Saving series ");
-        writer->addHandler( progressMeterGUI );
         writer->write();
     }
     catch (const std::exception & e)
@@ -150,12 +157,12 @@ void SImageSeriesWriter::saveImageSeries( const ::boost::filesystem::path folder
         std::stringstream ss;
         ss << "Warning during saving : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning", "Warning during saving", ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning", "Warning during saving", ::fwGui::dialog::IMessageDialog::WARNING);
     }
 }
 
diff --git a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBLazyReader.cpp b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBLazyReader.cpp
index 6e75251..f562471 100644
--- a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBLazyReader.cpp
+++ b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBLazyReader.cpp
@@ -1,50 +1,54 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/bind.hpp>
+#include "ioVtkGdcm/SSeriesDBLazyReader.hpp"
 
-#include <fwCore/base.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwTools/ProgressToLogger.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
 #include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include <io/IReader.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Series.hpp>
 
-#include <fwComEd/SeriesDBMsg.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
+#include <fwTools/ProgressToLogger.hpp>
 
-#include <vtkGdcmIO/SeriesDBLazyReader.hpp>
+#include <io/IReader.hpp>
 
-#include "ioVtkGdcm/SSeriesDBLazyReader.hpp"
+#include <vtkGdcmIO/SeriesDBLazyReader.hpp>
 
+#include <boost/bind.hpp>
 
 namespace ioVtkGdcm
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioVtkGdcm::SSeriesDBLazyReader , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioVtkGdcm::SSeriesDBLazyReader, ::fwMedData::SeriesDB );
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
 
 //------------------------------------------------------------------------------
 
 SSeriesDBLazyReader::SSeriesDBLazyReader() throw()
-{}
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
 SSeriesDBLazyReader::~SSeriesDBLazyReader() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -58,8 +62,8 @@ void SSeriesDBLazyReader::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
 
-    ::fwData::location::Folder::sptr  result;
-    result= ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getFolder();
@@ -86,15 +90,15 @@ void SSeriesDBLazyReader::stopping() throw(::fwTools::Failed)
 
 void SSeriesDBLazyReader::info(std::ostream &_sstream )
 {
-    _sstream << "SSeriesDBLazyReader::info" ;
+    _sstream << "SSeriesDBLazyReader::info";
 }
 
 //------------------------------------------------------------------------------
 
 SSeriesDBLazyReader::ExtensionsType SSeriesDBLazyReader::getSupportedExtensions()
 {
-    ExtensionsType extensions ;
-    return extensions ;
+    ExtensionsType extensions;
+    return extensions;
 }
 
 //------------------------------------------------------------------------------
@@ -111,14 +115,14 @@ std::string SSeriesDBLazyReader::getSelectorDialogTitle()
 {
     SLM_TRACE_FUNC();
     ::vtkGdcmIO::SeriesDBLazyReader::sptr myLoader = ::vtkGdcmIO::SeriesDBLazyReader::New();
-    ::fwMedData::SeriesDB::sptr dummy = ::fwMedData::SeriesDB::New();
+    ::fwMedData::SeriesDB::sptr dummy              = ::fwMedData::SeriesDB::New();
     myLoader->setObject(dummy);
     myLoader->setFolder(dicomDir);
 
+    m_sigJobCreated->emit(myLoader->getJob());
+
     try
     {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Dicom Image");
-        myLoader->addHandler( progressMeterGUI );
         myLoader->read();
     }
     catch (const std::exception & e)
@@ -126,12 +130,12 @@ std::string SSeriesDBLazyReader::getSelectorDialogTitle()
         std::stringstream ss;
         ss << "Warning during loading : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
     }
 
     return myLoader->getConcreteObject();
@@ -151,7 +155,7 @@ void SSeriesDBLazyReader::updating() throw(::fwTools::Failed)
             // Retrieve dataStruct associated with this service
             ::fwMedData::SeriesDB::sptr associatedSeriesDB = this->getObject< ::fwMedData::SeriesDB >();
             SLM_ASSERT("associated SeriesDB not instanced", associatedSeriesDB);
-            associatedSeriesDB->shallowCopy( seriesDB ) ;
+            associatedSeriesDB->shallowCopy( seriesDB );
 
             ::fwGui::Cursor cursor;
             cursor.setCursor(::fwGui::ICursor::BUSY);
@@ -161,7 +165,8 @@ void SSeriesDBLazyReader::updating() throw(::fwTools::Failed)
         else
         {
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Image Reader","This file can not be read. Retry with another file reader.", ::fwGui::dialog::IMessageDialog::WARNING);
+                "Image Reader","This file can not be read. Retry with another file reader.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
     }
 }
@@ -171,16 +176,18 @@ void SSeriesDBLazyReader::updating() throw(::fwTools::Failed)
 void SSeriesDBLazyReader::notificationOfDBUpdate()
 {
     SLM_TRACE_FUNC();
-    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >() ;
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
     SLM_ASSERT("Unable to get seriesDB", seriesDB);
 
-    ::fwComEd::SeriesDBMsg::sptr msg = ::fwComEd::SeriesDBMsg::New();
-    BOOST_FOREACH( ::fwMedData::Series::sptr s, seriesDB->getContainer() )
+    ::fwMedData::SeriesDB::ContainerType addedSeries;
+    for( ::fwMedData::Series::sptr s :  seriesDB->getContainer() )
     {
-        msg->appendAddedSeries(s);
+        addedSeries.push_back(s);
     }
 
-    ::fwServices::IEditionService::notify(this->getSptr(),  seriesDB, msg);
+    auto sig = seriesDB->signal< ::fwMedData::SeriesDB::AddedSeriesSignalType >(
+        ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG);
+    sig->asyncEmit(addedSeries);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBReader.cpp b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBReader.cpp
index 37f1be2..3067798 100644
--- a/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBReader.cpp
+++ b/Bundles/LeafIO/ioVtkGdcm/src/ioVtkGdcm/SSeriesDBReader.cpp
@@ -1,50 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/bind.hpp>
+#include "ioVtkGdcm/SSeriesDBReader.hpp"
 
-#include <fwCore/base.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwTools/ProgressToLogger.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwGui/dialog/ProgressDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/backend.hpp>
 #include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include <io/IReader.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Series.hpp>
 
-#include <fwComEd/SeriesDBMsg.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
+#include <fwTools/ProgressToLogger.hpp>
+
+#include <io/IReader.hpp>
 
 #include <vtkGdcmIO/SeriesDBReader.hpp>
 
-#include "ioVtkGdcm/SSeriesDBReader.hpp"
+#include <boost/bind.hpp>
 
 
 namespace ioVtkGdcm
 {
 
-fwServicesRegisterMacro( ::io::IReader , ::ioVtkGdcm::SSeriesDBReader , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::io::IReader, ::ioVtkGdcm::SSeriesDBReader, ::fwMedData::SeriesDB );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
 
 //------------------------------------------------------------------------------
 
 SSeriesDBReader::SSeriesDBReader() throw()
-{}
+{
+    m_sigJobCreated = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+}
 
 //------------------------------------------------------------------------------
 
 SSeriesDBReader::~SSeriesDBReader() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -58,8 +66,8 @@ void SSeriesDBReader::configureWithIHM()
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
     dialogFile.setType(::fwGui::dialog::LocationDialog::FOLDER);
 
-    ::fwData::location::Folder::sptr  result;
-    result= ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
     if (result)
     {
         _sDefaultPath = result->getFolder();
@@ -86,15 +94,15 @@ void SSeriesDBReader::stopping() throw(::fwTools::Failed)
 
 void SSeriesDBReader::info(std::ostream &_sstream )
 {
-    _sstream << "SSeriesDBReader::info" ;
+    _sstream << "SSeriesDBReader::info";
 }
 
 //------------------------------------------------------------------------------
 
 SSeriesDBReader::ExtensionsType SSeriesDBReader::getSupportedExtensions()
 {
-    ExtensionsType extensions ;
-    return extensions ;
+    ExtensionsType extensions;
+    return extensions;
 }
 
 //------------------------------------------------------------------------------
@@ -110,31 +118,31 @@ std::string SSeriesDBReader::getSelectorDialogTitle()
 ::fwMedData::SeriesDB::sptr SSeriesDBReader::createSeriesDB(const ::boost::filesystem::path& dicomDir)
 {
     SLM_TRACE_FUNC();
-    ::vtkGdcmIO::SeriesDBReader::sptr myLoader = ::vtkGdcmIO::SeriesDBReader::New();
-    ::fwMedData::SeriesDB::sptr dummy = ::fwMedData::SeriesDB::New();
-    myLoader->setObject(dummy);
-    myLoader->setFolder(dicomDir);
+    ::vtkGdcmIO::SeriesDBReader::sptr reader = ::vtkGdcmIO::SeriesDBReader::New();
+    ::fwMedData::SeriesDB::sptr dummy        = ::fwMedData::SeriesDB::New();
+    reader->setObject(dummy);
+    reader->setFolder(dicomDir);
+
+    m_sigJobCreated->emit(reader->getJob());
 
     try
     {
-        ::fwGui::dialog::ProgressDialog progressMeterGUI("Loading Dicom Image");
-        myLoader->addHandler( progressMeterGUI );
-        myLoader->read();
+        reader->read();
     }
     catch (const std::exception & e)
     {
         std::stringstream ss;
         ss << "Warning during loading : " << e.what();
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning", ss.str(), ::fwGui::dialog::IMessageDialog::WARNING);
     }
     catch( ... )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
+            "Warning", "Warning during loading", ::fwGui::dialog::IMessageDialog::WARNING);
     }
 
-    return myLoader->getConcreteObject();
+    return reader->getConcreteObject();
 }
 
 //------------------------------------------------------------------------------
@@ -145,13 +153,17 @@ void SSeriesDBReader::updating() throw(::fwTools::Failed)
     if( this->hasLocationDefined() )
     {
         ::fwMedData::SeriesDB::sptr seriesDB = createSeriesDB( this->getFolder() );
-
-        if( seriesDB->size() > 0 )
+        if( seriesDB->size() > 0  )
         {
+            if(this->isStopped()) // FIXME service might be stopped while updating in a worker
+            {
+                return;
+            }
+
             // Retrieve dataStruct associated with this service
             ::fwMedData::SeriesDB::sptr associatedSeriesDB = this->getObject< ::fwMedData::SeriesDB >();
             SLM_ASSERT("associated SeriesDB not instanced", associatedSeriesDB);
-            associatedSeriesDB->shallowCopy( seriesDB ) ;
+            associatedSeriesDB->shallowCopy( seriesDB );
 
             ::fwGui::Cursor cursor;
             cursor.setCursor(::fwGui::ICursor::BUSY);
@@ -161,7 +173,8 @@ void SSeriesDBReader::updating() throw(::fwTools::Failed)
         else
         {
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Image Reader","This file can not be read. Retry with another file reader.", ::fwGui::dialog::IMessageDialog::WARNING);
+                "Image Reader","This file can not be read. Retry with another file reader.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
     }
 }
@@ -171,16 +184,18 @@ void SSeriesDBReader::updating() throw(::fwTools::Failed)
 void SSeriesDBReader::notificationOfDBUpdate()
 {
     SLM_TRACE_FUNC();
-    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >() ;
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
     SLM_ASSERT("Unable to get seriesDB", seriesDB);
 
-    ::fwComEd::SeriesDBMsg::sptr msg = ::fwComEd::SeriesDBMsg::New();
-    BOOST_FOREACH( ::fwMedData::Series::sptr s, seriesDB->getContainer() )
+    ::fwMedData::SeriesDB::ContainerType addedSeries;
+    for( ::fwMedData::Series::sptr s :  seriesDB->getContainer() )
     {
-        msg->appendAddedSeries(s);
+        addedSeries.push_back(s);
     }
 
-    ::fwServices::IEditionService::notify(this->getSptr(),  seriesDB, msg);
+    auto sig = seriesDB->signal< ::fwMedData::SeriesDB::AddedSeriesSignalType >(
+        ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG);
+    sig->asyncEmit(addedSeries);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafIO/ioVtkGdcm/test/CMakeLists.txt b/Bundles/LeafIO/ioVtkGdcm/test/CMakeLists.txt
index c7bb8af..3881996 100644
--- a/Bundles/LeafIO/ioVtkGdcm/test/CMakeLists.txt
+++ b/Bundles/LeafIO/ioVtkGdcm/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/Bundles/LeafIO/ioVtkGdcm/test/Properties.cmake b/Bundles/LeafIO/ioVtkGdcm/test/Properties.cmake
index 22f89ad..f0030cd 100644
--- a/Bundles/LeafIO/ioVtkGdcm/test/Properties.cmake
+++ b/Bundles/LeafIO/ioVtkGdcm/test/Properties.cmake
@@ -2,7 +2,21 @@
 set( NAME ioVtkGdcmTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwTest vtkGdcmIO )
-set( REQUIREMENTS io ioVtkGdcm )
+set( DEPENDENCIES
+    fwCore
+    fwTest
+    fwTools
+    fwData
+    fwMedData
+    fwDataCamp
+    fwServices
+    fwRuntime
+    fwThread
+    fwGui
+)
+set( REQUIREMENTS
+    io
+    ioVtkGdcm
+)
 
 set(CPPUNITTEST_OPTIONS BUNDLE ioVtkGdcm WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafIO/ioVtkGdcm/test/cppunit.options b/Bundles/LeafIO/ioVtkGdcm/test/cppunit.options
deleted file mode 100644
index 40eecc2..0000000
--- a/Bundles/LeafIO/ioVtkGdcm/test/cppunit.options
+++ /dev/null
@@ -1,12 +0,0 @@
-CLASSTEST=[
-          'IoVtkGdcmTest',
-          ]
-
-USE = []
-LIB = ['vtkGdcmIO_0-1', 'fwTest_0-1' ]
-
-REQUIREMENTS = ['io_0-1', 'ioVtkGdcm_0-1']
-
-CONSOLE = 'yes'
-
-LOGLEVEL='trace'
diff --git a/Bundles/LeafIO/ioVtkGdcm/test/tu/include/IoVtkGdcmTest.hpp b/Bundles/LeafIO/ioVtkGdcm/test/tu/include/IoVtkGdcmTest.hpp
index 538f5d1..83d1708 100644
--- a/Bundles/LeafIO/ioVtkGdcm/test/tu/include/IoVtkGdcmTest.hpp
+++ b/Bundles/LeafIO/ioVtkGdcm/test/tu/include/IoVtkGdcmTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __IOVTKGDCM_TEST_TU_IOVTKGDCMTEST_HPP__
-#define __IOVTKGDCM_TEST_TU_IOVTKGDCMTEST_HPP__
+#ifndef __IOVTKGDCM_UT_IOVTKGDCMTEST_HPP__
+#define __IOVTKGDCM_UT_IOVTKGDCMTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -19,11 +19,11 @@ namespace ut
  */
 class IoVtkGdcmTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( IoVtkGdcmTest );
-    CPPUNIT_TEST( seriesDBReaderTest );
-    CPPUNIT_TEST( seriesDBLazyReaderTest );
-    CPPUNIT_TEST( imageSeriesWriterTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( IoVtkGdcmTest );
+CPPUNIT_TEST( seriesDBReaderTest );
+CPPUNIT_TEST( seriesDBLazyReaderTest );
+CPPUNIT_TEST( imageSeriesWriterTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -40,4 +40,4 @@ public:
 } //namespace ut
 } //namespace ioVtkGdcm
 
-#endif //__IOVTKGDCM_TEST_TU_IOVTKGDCMTEST_HPP__
+#endif //__IOVTKGDCM_UT_IOVTKGDCMTEST_HPP__
diff --git a/Bundles/LeafIO/ioVtkGdcm/test/tu/src/IoVtkGdcmTest.cpp b/Bundles/LeafIO/ioVtkGdcm/test/tu/src/IoVtkGdcmTest.cpp
index cc4baa2..48e3de1 100644
--- a/Bundles/LeafIO/ioVtkGdcm/test/tu/src/IoVtkGdcmTest.cpp
+++ b/Bundles/LeafIO/ioVtkGdcm/test/tu/src/IoVtkGdcmTest.cpp
@@ -1,36 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem.hpp>
-#include <boost/algorithm/string/trim.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
-#include <fwRuntime/profile/Profile.hpp>
-
-#include <fwTools/dateAndTime.hpp>
-#include <fwTools/System.hpp>
-
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#include "IoVtkGdcmTest.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/registry/AppConfig.hpp>
+#include <fwGui/registry/worker.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
 
-#include <fwTest/generator/SeriesDB.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwTest/Data.hpp>
 #include <fwTest/generator/Image.hpp>
+#include <fwTest/generator/SeriesDB.hpp>
 #include <fwTest/helper/compare.hpp>
-#include <fwTest/Data.hpp>
 
-#include "IoVtkGdcmTest.hpp"
+#include <fwThread/Worker.hpp>
+
+#include <fwTools/System.hpp>
+#include <fwTools/dateAndTime.hpp>
+
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::ioVtkGdcm::ut::IoVtkGdcmTest );
@@ -46,6 +47,8 @@ namespace ut
 void IoVtkGdcmTest::setUp()
 {
     // Set up context before running a test.
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    ::fwGui::registry::worker::init(worker);
 }
 
 //------------------------------------------------------------------------------
@@ -53,6 +56,7 @@ void IoVtkGdcmTest::setUp()
 void IoVtkGdcmTest::tearDown()
 {
     // Clean up after the test run.
+    ::fwGui::registry::worker::reset();
 }
 
 //-----------------------------------------------------------------------------
@@ -61,14 +65,17 @@ void IoVtkGdcmTest::readerDicomTest( std::string srvImpl )
 {
     ::boost::filesystem::path dicomDataPath(::fwTest::Data::dir() / "fw4spl/Patient/Dicom/image_281433");
 
-    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + dicomDataPath.string() + "' does not exist",
+                           ::boost::filesystem::exists(dicomDataPath));
+
+    ::fwMedData::SeriesDB::sptr seriesDB               = ::fwMedData::SeriesDB::New();
     ::fwRuntime::EConfigurationElement::sptr readerCfg = ::fwRuntime::EConfigurationElement::New("service");
     ::fwRuntime::EConfigurationElement::sptr folderCfg = ::fwRuntime::EConfigurationElement::New("folder");
     folderCfg->setValue(dicomDataPath.string());
     readerCfg->addConfigurationElement(folderCfg);
 
     ::fwServices::IService::sptr srv =
-            ::fwServices::registry::ServiceFactory::getDefault()->create( "::io::IReader", srvImpl );
+        ::fwServices::registry::ServiceFactory::getDefault()->create( "::io::IReader", srvImpl );
     CPPUNIT_ASSERT(srv);
 
     ::fwServices::OSR::registerService( seriesDB, srv );
@@ -85,20 +92,20 @@ void IoVtkGdcmTest::readerDicomTest( std::string srvImpl )
     const std::string sexExpected("F");
 
     //Info image expected.
-    const size_t imgDimensionExpected   = 3;
-    double imgSpacingX = 0.667969;
-    double imgSpacingY = 0.667969;
-    double imgSpacingZ = 1.5;
+    const size_t imgDimensionExpected = 3;
+    double imgSpacingX                = 0.667969;
+    double imgSpacingY                = 0.667969;
+    double imgSpacingZ                = 1.5;
 
     ::fwData::Image::OriginType imgOriginExpected (3,0);
 
-    size_t imgSizeX_Expected =  512;
-    size_t imgSizeY_Expected =  512;
-    size_t imgSizeZ_Expected =  166;
+    size_t imgSizeX_Expected = 512;
+    size_t imgSizeY_Expected = 512;
+    size_t imgSizeZ_Expected = 166;
     // int imgSize = imgSizeX_Expected*imgSizeY_Expected*imgSizeZ_Expected;
 
     const double imgWindowCenter = 50;
-    const double imgWindowWidth = 500;
+    const double imgWindowWidth  = 500;
     ::fwTools::Type imgPixelType = ::fwTools::Type::create<signed int>();
 
     CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->getContainer().size());
@@ -106,7 +113,7 @@ void IoVtkGdcmTest::readerDicomTest( std::string srvImpl )
     ::fwMedData::Series::sptr series = seriesDB->getContainer()[0];
 
     ::fwMedData::Patient::sptr patient = series->getPatient();
-    ::fwMedData::Study::sptr study = series->getStudy();
+    ::fwMedData::Study::sptr study     = series->getStudy();
 
     CPPUNIT_ASSERT_EQUAL(nameExpected, patient->getName());
     CPPUNIT_ASSERT_EQUAL(sexExpected, patient->getSex());
@@ -116,41 +123,41 @@ void IoVtkGdcmTest::readerDicomTest( std::string srvImpl )
     ::fwData::Image::csptr fisrtImage = imgSeries->getImage();
 
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on image dimension.",
-            fisrtImage->getNumberOfDimensions(),
-            imgDimensionExpected);
+                                 fisrtImage->getNumberOfDimensions(),
+                                 imgDimensionExpected);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on origin on X ",
-            static_cast< ::fwData::Image::OriginType::value_type > (fisrtImage->getOrigin()[0]),
-            imgOriginExpected[0]);
+                                 static_cast< ::fwData::Image::OriginType::value_type > (fisrtImage->getOrigin()[0]),
+                                 imgOriginExpected[0]);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on origin on Y ",
-            static_cast< ::fwData::Image::OriginType::value_type > (fisrtImage->getOrigin()[1]),
-            imgOriginExpected[1]);
+                                 static_cast< ::fwData::Image::OriginType::value_type > (fisrtImage->getOrigin()[1]),
+                                 imgOriginExpected[1]);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on origin on Z ",
-            static_cast< ::fwData::Image::OriginType::value_type > (fisrtImage->getOrigin()[2]),
-            imgOriginExpected[2]);
+                                 static_cast< ::fwData::Image::OriginType::value_type > (fisrtImage->getOrigin()[2]),
+                                 imgOriginExpected[2]);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on window center ",
-            fisrtImage->getWindowCenter(),
-            imgWindowCenter);
+                                 fisrtImage->getWindowCenter(),
+                                 imgWindowCenter);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on window width ",
-            fisrtImage->getWindowWidth(),
-            imgWindowWidth);
+                                 fisrtImage->getWindowWidth(),
+                                 imgWindowWidth);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on size x ",
-            static_cast< ::fwData::Image::SizeType::value_type > (fisrtImage->getSize()[0]),
-            static_cast< ::fwData::Image::SizeType::value_type > (imgSizeX_Expected));
+                                 static_cast< ::fwData::Image::SizeType::value_type > (fisrtImage->getSize()[0]),
+                                 static_cast< ::fwData::Image::SizeType::value_type > (imgSizeX_Expected));
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on size y ",
-            static_cast< ::fwData::Image::SizeType::value_type > (fisrtImage->getSize()[1]),
-            static_cast< ::fwData::Image::SizeType::value_type > (imgSizeY_Expected));
+                                 static_cast< ::fwData::Image::SizeType::value_type > (fisrtImage->getSize()[1]),
+                                 static_cast< ::fwData::Image::SizeType::value_type > (imgSizeY_Expected));
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on size z ",
-            static_cast< ::fwData::Image::SizeType::value_type > (fisrtImage->getSize()[2]),
-            static_cast< ::fwData::Image::SizeType::value_type > (imgSizeZ_Expected));
+                                 static_cast< ::fwData::Image::SizeType::value_type > (fisrtImage->getSize()[2]),
+                                 static_cast< ::fwData::Image::SizeType::value_type > (imgSizeZ_Expected));
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on spacing x ",
-            static_cast< ::fwData::Image::SpacingType::value_type > (fisrtImage->getSpacing()[0]),
-            imgSpacingX);
+                                 static_cast< ::fwData::Image::SpacingType::value_type > (fisrtImage->getSpacing()[0]),
+                                 imgSpacingX);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on spacing y ",
-            static_cast< ::fwData::Image::SpacingType::value_type > (fisrtImage->getSpacing()[1]),
-            imgSpacingY);
+                                 static_cast< ::fwData::Image::SpacingType::value_type > (fisrtImage->getSpacing()[1]),
+                                 imgSpacingY);
     CPPUNIT_ASSERT_EQUAL_MESSAGE("Failed on spacing z ",
-            static_cast< ::fwData::Image::SpacingType::value_type > (fisrtImage->getSpacing()[2]),
-            imgSpacingZ);
+                                 static_cast< ::fwData::Image::SpacingType::value_type > (fisrtImage->getSpacing()[2]),
+                                 imgSpacingZ);
 }
 
 //------------------------------------------------------------------------------
@@ -184,7 +191,8 @@ void IoVtkGdcmTest::imageSeriesWriterTest()
     ::fwMedData::ImageSeries::sptr imgSeries;
     imgSeries = ::fwTest::generator::SeriesDB::createImageSeries();
 
-    ::fwServices::IService::sptr writerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( "::io::IWriter", "::ioVtkGdcm::SImageSeriesWriter" );
+    ::fwServices::IService::sptr writerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create(
+        "::io::IWriter", "::ioVtkGdcm::SImageSeriesWriter" );
     CPPUNIT_ASSERT(writerSrv);
 
     ::fwServices::OSR::registerService( imgSeries, writerSrv );
@@ -200,10 +208,11 @@ void IoVtkGdcmTest::imageSeriesWriterTest()
     // Load Dicom from disk
     ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
 
-    ::fwServices::IService::sptr readerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( "::io::IReader", "::ioVtkGdcm::SSeriesDBReader" );
+    ::fwServices::IService::sptr readerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create(
+        "::io::IReader", "::ioVtkGdcm::SSeriesDBReader" );
     CPPUNIT_ASSERT(readerSrv);
 
-    ::fwServices::OSR::registerService( seriesDB , readerSrv );
+    ::fwServices::OSR::registerService( seriesDB, readerSrv );
 
     readerSrv->setConfiguration( srvConfig ); // use same config as writer
     readerSrv->configure();
diff --git a/Bundles/LeafOp/opImageFilter/CMakeLists.txt b/Bundles/LeafOp/opImageFilter/CMakeLists.txt
index d89c961..15cd4c1 100644
--- a/Bundles/LeafOp/opImageFilter/CMakeLists.txt
+++ b/Bundles/LeafOp/opImageFilter/CMakeLists.txt
@@ -1,10 +1 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwRuntime
-)
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
-
diff --git a/Bundles/LeafOp/opImageFilter/COPYING b/Bundles/LeafOp/opImageFilter/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafOp/opImageFilter/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafOp/opImageFilter/COPYING.LESSER b/Bundles/LeafOp/opImageFilter/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafOp/opImageFilter/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafOp/opImageFilter/Properties.cmake b/Bundles/LeafOp/opImageFilter/Properties.cmake
index 9943b38..d5dddd7 100644
--- a/Bundles/LeafOp/opImageFilter/Properties.cmake
+++ b/Bundles/LeafOp/opImageFilter/Properties.cmake
@@ -2,6 +2,15 @@
 set( NAME opImageFilter )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwData fwGui fwRuntime fwServices fwTools )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwDataTools
+    fwGui
+    fwRuntime
+    fwServices
+    fwTools
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafOp/opImageFilter/bin/build.options b/Bundles/LeafOp/opImageFilter/bin/build.options
deleted file mode 100644
index bc1416a..0000000
--- a/Bundles/LeafOp/opImageFilter/bin/build.options
+++ /dev/null
@@ -1,17 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['boost']
-LIB     = [
-          'fwTools_0-1',
-          'fwCore_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwGui_0-1',
-          ]
-BUNDLES = ['gui_0-1']
-
-
-
-
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/Namespace.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/Namespace.hpp
index 506f982..803d850 100644
--- a/Bundles/LeafOp/opImageFilter/include/opImageFilter/Namespace.hpp
+++ b/Bundles/LeafOp/opImageFilter/include/opImageFilter/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef OPIMAGEFILTERNAMESPACE_HPP_
-#define OPIMAGEFILTERNAMESPACE_HPP_
+#ifndef __OPIMAGEFILTER_NAMESPACE_HPP__
+#define __OPIMAGEFILTER_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace opImageFilter contains several operators on image.
  * @namespace   opImageFilter
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace opImageFilter
 {
 
 }
-#endif /* OPIMAGEFILTERNAMESPACE_HPP_ */
+#endif /* __OPIMAGEFILTER_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/Plugin.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/Plugin.hpp
index 2956e47..8f05bf3 100644
--- a/Bundles/LeafOp/opImageFilter/include/opImageFilter/Plugin.hpp
+++ b/Bundles/LeafOp/opImageFilter/include/opImageFilter/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _OPIMAGEFILTER_PLUGIN_HPP_
-#define _OPIMAGEFILTER_PLUGIN_HPP_
+#ifndef __OPIMAGEFILTER_PLUGIN_HPP__
+#define __OPIMAGEFILTER_PLUGIN_HPP__
 
 
 #include <fwRuntime/Plugin.hpp>
@@ -38,4 +38,4 @@ struct Plugin : public ::fwRuntime::Plugin
 } // namespace opImageFilter
 
 
-#endif //_OPIMAGEFILTER_PLUGIN_HPP_
+#endif //__OPIMAGEFILTER_PLUGIN_HPP__
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/ImageFilter.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/ImageFilter.hpp
deleted file mode 100644
index 964cf58..0000000
--- a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/ImageFilter.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _OPIMAGEFILTER_ACTION_IMAGEFILTER_HPP_
-#define _OPIMAGEFILTER_ACTION_IMAGEFILTER_HPP_
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "opImageFilter/config.hpp"
-
-namespace opImageFilter
-{
-
-namespace action
-{
-
-class OPIMAGEFILTER_CLASS_API ImageFilter : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ImageFilter)(::fwGui::IActionSrv) ) ;
-
-    OPIMAGEFILTER_API ImageFilter() throw() ;
-
-    OPIMAGEFILTER_API virtual ~ImageFilter() throw() ;
-
-protected:
-
-    OPIMAGEFILTER_API void starting() throw ( ::fwTools::Failed );
-
-    OPIMAGEFILTER_API void stopping() throw ( ::fwTools::Failed );
-
-    OPIMAGEFILTER_API void receiving( ::fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed );
-
-    OPIMAGEFILTER_API void configuring() throw ( ::fwTools::Failed );
-
-    OPIMAGEFILTER_API void updating() throw ( ::fwTools::Failed );
-
-    OPIMAGEFILTER_API void info ( std::ostream &_sstream ) ;
-
-private :
-
-    std::string m_image1UID;
-    std::string m_image2UID;
-
-};
-
-
-} // namespace action
-} // namespace opImageFilter
-
-
-#endif // _OPIMAGEFILTER_ACTION_IMAGEFILTER_HPP_
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/Namespace.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/Namespace.hpp
index 9cc2ca5..fc133e9 100644
--- a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/Namespace.hpp
+++ b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef OPIMAGEFILTERACTIONNAMESPACE_HPP_
-#define OPIMAGEFILTERACTIONNAMESPACE_HPP_
+#ifndef __OPIMAGEFILTER_ACTION_NAMESPACE_HPP__
+#define __OPIMAGEFILTER_ACTION_NAMESPACE_HPP__
 
 namespace opImageFilter
 {
 /**
  * @brief       The namespace opImageFilter::action contains several operators on image .
  * @namespace   opImageFilter::action
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace action
 
 }
 }
-#endif /* OPIMAGEFILTERACTIONNAMESPACE_HPP_ */
+#endif /* __OPIMAGEFILTER_ACTION_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp
new file mode 100644
index 0000000..42d7f55
--- /dev/null
+++ b/Bundles/LeafOp/opImageFilter/include/opImageFilter/action/SThreshold.hpp
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __OPIMAGEFILTER_ACTION_STHRESHOLD_HPP__
+#define __OPIMAGEFILTER_ACTION_STHRESHOLD_HPP__
+
+#include <fwGui/IActionSrv.hpp>
+
+#include "opImageFilter/config.hpp"
+
+namespace opImageFilter
+{
+
+namespace action
+{
+
+/**
+ * @brief Applies a threshold on an image.
+ *
+ * This Service needs two image: the source and the target image.
+ */
+class OPIMAGEFILTER_CLASS_API SThreshold : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SThreshold)(::fwGui::IActionSrv) );
+
+    OPIMAGEFILTER_API SThreshold() throw();
+
+    OPIMAGEFILTER_API virtual ~SThreshold() throw();
+
+protected:
+
+    OPIMAGEFILTER_API void starting() throw ( ::fwTools::Failed );
+
+    OPIMAGEFILTER_API void stopping() throw ( ::fwTools::Failed );
+
+    /**
+     * @brief Configure the service:
+     *
+     * @code{.xml}
+        <service uid="actionImageFilter" impl="::opImageFilter::action::ImageFilter">
+            <imageIn uid="myImage1" />
+            <imageOut uid="myImage2" />
+        </service>
+       @endcode
+     * - \b imageIn: uid of the source image
+     * - \b imageOut: uid of the target image (ie the filtered image)
+     */
+    OPIMAGEFILTER_API void configuring() throw ( ::fwTools::Failed );
+
+    /// Applies the threshold
+    OPIMAGEFILTER_API void updating() throw ( ::fwTools::Failed );
+
+private:
+
+    std::string m_imageSrcUID;
+    std::string m_imageTgtUID;
+
+};
+
+
+} // namespace action
+} // namespace opImageFilter
+
+
+#endif // __OPIMAGEFILTER_ACTION_STHRESHOLD_HPP__
diff --git a/Bundles/LeafOp/opImageFilter/include/opImageFilter/config.hpp b/Bundles/LeafOp/opImageFilter/include/opImageFilter/config.hpp
deleted file mode 100644
index 6c70496..0000000
--- a/Bundles/LeafOp/opImageFilter/include/opImageFilter/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _OPIMAGEFILTER_CONFIG_HPP_
-#define _OPIMAGEFILTER_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef OPIMAGEFILTER_EXPORTS
-    #define OPIMAGEFILTER_API __declspec(dllexport)
-    #else
-    #define OPIMAGEFILTER_API __declspec(dllimport)
-    #endif
-
-    #define OPIMAGEFILTER_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef OPIMAGEFILTER_EXPORTS
-    #define OPIMAGEFILTER_API __attribute__ ((visibility("default")))
-    #define OPIMAGEFILTER_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define OPIMAGEFILTER_API __attribute__ ((visibility("hidden")))
-    #define OPIMAGEFILTER_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define OPIMAGEFILTER_API
-    #define OPIMAGEFILTER_CLASS_API
-
-#endif
-
-#endif //_OPIMAGEFILTER_CONFIG_HPP_
diff --git a/Bundles/LeafOp/opImageFilter/rc/plugin.xml b/Bundles/LeafOp/opImageFilter/rc/plugin.xml
index 8df4bc0..f618e74 100644
--- a/Bundles/LeafOp/opImageFilter/rc/plugin.xml
+++ b/Bundles/LeafOp/opImageFilter/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="opImageFilter" class="::opImageFilter::Plugin">
+<plugin id="opImageFilter" class="::opImageFilter::Plugin" version="@DASH_VERSION@" >
     
     <library name="opImageFilter" />
 
@@ -7,7 +7,7 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::opImageFilter::action::ImageFilter</service>
+        <service>::opImageFilter::action::SThreshold</service>
         <object>::fwData::Object</object>
     </extension>
     
diff --git a/Bundles/LeafOp/opImageFilter/src/opImageFilter/Plugin.cpp b/Bundles/LeafOp/opImageFilter/src/opImageFilter/Plugin.cpp
index 32cea8d..4b0c4ce 100644
--- a/Bundles/LeafOp/opImageFilter/src/opImageFilter/Plugin.cpp
+++ b/Bundles/LeafOp/opImageFilter/src/opImageFilter/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,17 +18,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw( ::fwRuntime::RuntimeException )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/ImageFilter.cpp b/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/ImageFilter.cpp
deleted file mode 100644
index 317fc43..0000000
--- a/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/ImageFilter.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwTools/fwID.hpp>
-#include <fwTools/IntrinsicTypes.hpp>
-#include <fwTools/Dispatcher.hpp>
-#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
-
-#include <fwData/Image.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/helper/Image.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include "opImageFilter/action/ImageFilter.hpp"
-
-namespace opImageFilter
-{
-
-namespace action
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro(  ::fwGui::IActionSrv, ::opImageFilter::action::ImageFilter, ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-ImageFilter::ImageFilter() throw() :
-    m_image1UID(""),
-    m_image2UID("")
-{}
-
-//-----------------------------------------------------------------------------
-
-ImageFilter::~ImageFilter() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ImageFilter::starting() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void ImageFilter::stopping() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void ImageFilter::receiving( ::fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void ImageFilter::configuring() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-
-    m_image1UID = m_configuration->findConfigurationElement("imageIn")->getExistingAttributeValue("uid");
-    m_image2UID = m_configuration->findConfigurationElement("imageOut")->getExistingAttributeValue("uid");
-
-    OSLM_INFO( "ImageIn UID = " << m_image1UID);
-    OSLM_INFO( "ImageOut UID = " << m_image2UID);
-}
-
-//-----------------------------------------------------------------------------
-
-struct ThresholdFilter
-{
-    struct Parameter
-    {
-        double thresholdValue;
-        ::fwData::Image::sptr  imageIn;
-        ::fwData::Image::sptr  imageOut;
-    };
-
-    template<class PIXELTYPE>
-    void operator()(Parameter &param)
-    {
-        ::fwData::Image::sptr imageIn = param.imageIn;
-        ::fwData::Image::sptr imageOut = param.imageOut;
-        SLM_ASSERT("Sorry, image must be 3D", imageIn->getNumberOfDimensions() == 3 );
-        imageOut->copyInformation(imageIn);
-        imageOut->allocate();
-
-        ::fwComEd::helper::Image imageInHelper(imageIn);
-        ::fwComEd::helper::Image imageOutHelper(imageOut);
-        PIXELTYPE *buffer1 = (PIXELTYPE *)imageInHelper.getBuffer();
-        PIXELTYPE *buffer2 = (PIXELTYPE *)imageOutHelper.getBuffer();
-        const unsigned int NbPixels = imageIn->getSize()[0] * imageIn->getSize()[1] * imageIn->getSize()[2];
-        const PIXELTYPE ThresholdValue = ( PIXELTYPE )param.thresholdValue;
-        unsigned int i;
-        for( i=0 ; i<NbPixels ; ++i , ++buffer1, ++buffer2 )
-        {
-            *buffer2 = ( *buffer1 < ThresholdValue ) ? 0 : std::numeric_limits<PIXELTYPE>::max();
-        }
-    }
-};
-
-//-----------------------------------------------------------------------------
-
-void ImageFilter::updating() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    const double Threshold = 50.0;
-
-    ThresholdFilter::Parameter param;
-    OSLM_ASSERT("Image 1 not found. UID : " << m_image1UID, ::fwTools::fwID::exist(m_image1UID)) ;
-    param.imageIn = ::fwData::Image::dynamicCast( ::fwTools::fwID::getObject(m_image1UID) ) ;
-    OSLM_ASSERT("Image 2 not found. UID : " << m_image2UID, ::fwTools::fwID::exist(m_image2UID)) ;
-    param.imageOut = ::fwData::Image::dynamicCast( ::fwTools::fwID::getObject(m_image2UID) ) ;
-    param.thresholdValue = Threshold;
-
-    ::fwTools::DynamicType type = param.imageIn->getPixelType();
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , ThresholdFilter >::invoke( type , param );
-
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::NEW_IMAGE ) ;
-//  msg->addEvent( ::fwComEd::ImageMsg::BUFFER ) ;
-
-    // Notify message to all service listeners
-    ::fwServices::IEditionService::notify(this->getSptr(), param.imageOut, msg);
-}
-
-//-----------------------------------------------------------------------------
-
-void ImageFilter::info ( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace action
-} // namespace opImageFilter
diff --git a/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp b/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp
new file mode 100644
index 0000000..0f40ffa
--- /dev/null
+++ b/Bundles/LeafOp/opImageFilter/src/opImageFilter/action/SThreshold.cpp
@@ -0,0 +1,168 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "opImageFilter/action/SThreshold.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwData/Image.hpp>
+
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/Dispatcher.hpp>
+#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
+#include <fwTools/IntrinsicTypes.hpp>
+#include <fwTools/fwID.hpp>
+
+namespace opImageFilter
+{
+
+namespace action
+{
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro(  ::fwGui::IActionSrv, ::opImageFilter::action::SThreshold, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SThreshold::SThreshold() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SThreshold::~SThreshold() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SThreshold::starting() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStarting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SThreshold::stopping() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStopping();
+}
+
+//-----------------------------------------------------------------------------
+
+void SThreshold::configuring() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+
+    m_imageSrcUID = m_configuration->findConfigurationElement("imageIn")->getExistingAttributeValue("uid");
+    m_imageTgtUID = m_configuration->findConfigurationElement("imageOut")->getExistingAttributeValue("uid");
+
+    OSLM_INFO( "ImageIn UID = " << m_imageSrcUID);
+    OSLM_INFO( "ImageOut UID = " << m_imageTgtUID);
+}
+
+//-----------------------------------------------------------------------------
+
+/**
+ * Functor to apply a threshold filter.
+ *
+ * The pixel with the value less than the threshold value will be set to 0, else the value is set to the maximum
+ * value of the image pixel type.
+ *
+ * The functor provides a template method operator(param) to apply the filter
+ */
+struct ThresholdFilter
+{
+    struct Parameter
+    {
+        double thresholdValue; ///< threshold value.
+        ::fwData::Image::sptr imageIn; ///< image source
+        ::fwData::Image::sptr imageOut; ///< image target: contains the result of the filter
+    };
+
+    /**
+     * @brief Applies the filter
+     * @tparam PIXELTYPE image pixel type (uint8, uint16, int8, int16, float, double, ....)
+     */
+    template<class PIXELTYPE>
+    void operator()(Parameter& param)
+    {
+        const PIXELTYPE thresholdValue = static_cast<PIXELTYPE>(param.thresholdValue);
+        ::fwData::Image::sptr imageIn  = param.imageIn;
+        ::fwData::Image::sptr imageOut = param.imageOut;
+        SLM_ASSERT("Sorry, image must be 3D", imageIn->getNumberOfDimensions() == 3 );
+        imageOut->copyInformation(imageIn); // Copy image size, type... without copying the buffer
+        imageOut->allocate(); // Allocate the image buffer
+
+        ::fwDataTools::helper::Image imageInHelper(imageIn); // helper used to access the image source buffer
+        ::fwDataTools::helper::Image imageOutHelper(imageOut); // helper used to access the image target buffer
+
+        // Get image buffers
+        PIXELTYPE* buffer1 = (PIXELTYPE*)imageInHelper.getBuffer();
+        PIXELTYPE* buffer2 = (PIXELTYPE*)imageOutHelper.getBuffer();
+
+        // Get number of pixels
+        const size_t NbPixels = imageIn->getSize()[0] * imageIn->getSize()[1] * imageIn->getSize()[2];
+
+        // Fill the target buffer considering the thresholding
+        for( size_t i = 0; i<NbPixels; ++i, ++buffer1, ++buffer2 )
+        {
+            * buffer2 = ( *buffer1 < thresholdValue ) ? 0 : std::numeric_limits<PIXELTYPE>::max();
+        }
+    }
+};
+
+//-----------------------------------------------------------------------------
+
+void SThreshold::updating() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    // threshold value: the pixel with the value less than 50 will be set to 0, else the value is set to the maximum
+    // value of the image pixel type.
+    const double threshold = 50.0;
+
+    ThresholdFilter::Parameter param; // filter parameters: threshold value, image source, image target
+
+    // Get source image
+    OSLM_ASSERT("Image 1 not found. UID : " << m_imageSrcUID, ::fwTools::fwID::exist(m_imageSrcUID));
+    param.imageIn = ::fwData::Image::dynamicCast( ::fwTools::fwID::getObject(m_imageSrcUID) );
+
+    // Get target image
+    OSLM_ASSERT("Image 2 not found. UID : " << m_imageTgtUID, ::fwTools::fwID::exist(m_imageTgtUID));
+    param.imageOut = ::fwData::Image::dynamicCast( ::fwTools::fwID::getObject(m_imageTgtUID) );
+
+    param.thresholdValue = threshold;
+
+    /*
+     * The dispatcher allows to apply the filter on any type of image.
+     * It invokes the template functor ThresholdFilter using the image type.
+     */
+    ::fwTools::DynamicType type = param.imageIn->getPixelType(); // image type
+
+    // Invoke filter functor
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, ThresholdFilter >::invoke( type, param );
+
+    // Notify that the image target is modified
+    auto sig = param.imageOut->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace action
+} // namespace opImageFilter
diff --git a/Bundles/LeafOp/opSofa/CMakeLists.txt b/Bundles/LeafOp/opSofa/CMakeLists.txt
deleted file mode 100644
index 1c9b661..0000000
--- a/Bundles/LeafOp/opSofa/CMakeLists.txt
+++ /dev/null
@@ -1,62 +0,0 @@
-if(CLASSIC_INSTALL)
-find_package (SOFA)
-if(SOFA_FOUND)
-    fwBundle(opSofa 0.1)
-
-    fwUse(
-        fwComEd
-        fwCore
-        fwData
-        fwDataIO
-        fwGui
-        fwGuiQt
-        fwMedData
-        fwRenderVTK
-        fwRuntime
-        fwServices
-        fwTools
-        fwVtkIO
-
-        visuVTKAdaptor
-        gui
-        io
-    )
-    fwUseForwardInclude(
-        fwComEd
-        fwData
-        fwGui
-        fwRenderVTK
-        fwRuntime
-        fwServices
-        fwTools
-
-        gui
-        io
-    )
-
-    add_definitions('-DSOFA_HAVE_GLEW -DSOFA_HAVE_ZLIB -DSOFA_HAVE_PNG')
-
-    find_package (Boost COMPONENTS filesystem REQUIRED)
-    find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-    include(${QT_USE_FILE})
-
-    find_package(OpenGL)
-
-    fwForwardInclude(
-        ${Boost_INCLUDE_DIRS} 
-        ${QT_INCLUDE_DIR}
-        ${SOFA_INCLUDE_DIRS}
-        ${OPENGL_INCLUDE_DIR}
-        )
-    fwLink(
-        ${QT_LIBRARIES}
-        ${Boost_LIBRARIES}
-        ${SOFA_LIBRARIES}
-        ${OPENGL_LIBRARIES}
-        )
-
-    set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
-else(SOFA_FOUND)
-    message(WARNING "Required package Sofa not found, bundle 'opSofa' disabled.")
-endif(SOFA_FOUND)
-endif()
diff --git a/Bundles/LeafOp/opSofa/Properties.cmake b/Bundles/LeafOp/opSofa/Properties.cmake
deleted file mode 100644
index 3e90f50..0000000
--- a/Bundles/LeafOp/opSofa/Properties.cmake
+++ /dev/null
@@ -1,23 +0,0 @@
-
-set( NAME opSofa )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES
-    fwComEd
-    fwCore
-    fwData
-    fwDataIO
-    fwGui
-    fwGuiQt
-    fwMedData
-    fwRenderVTK
-    fwRuntime
-    fwServices
-    fwTools
-    fwVtkIO
-    visuVTKAdaptor
-    gui
-    io
-    )
-set( REQUIREMENTS )
-
diff --git a/Bundles/LeafOp/opVTKMesh/CMakeLists.txt b/Bundles/LeafOp/opVTKMesh/CMakeLists.txt
index 9483b1e..6443030 100644
--- a/Bundles/LeafOp/opVTKMesh/CMakeLists.txt
+++ b/Bundles/LeafOp/opVTKMesh/CMakeLists.txt
@@ -1,20 +1,11 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwRuntime
-    fwServices
-)
-
 
-find_package(Boost REQUIRED)
-find_package(VTK REQUIRED)
+find_package(VTK COMPONENTS vtkInteractionWidgets NO_MODULE)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS}
-    )
+)
 fwLink(
-    ${Boost_LIBRARIES} 
-    vtkWidgets
-    )
+    ${VTK_LIBRARIES}
+)
 
diff --git a/Bundles/LeafOp/opVTKMesh/COPYING b/Bundles/LeafOp/opVTKMesh/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafOp/opVTKMesh/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafOp/opVTKMesh/COPYING.LESSER b/Bundles/LeafOp/opVTKMesh/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafOp/opVTKMesh/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafOp/opVTKMesh/Properties.cmake b/Bundles/LeafOp/opVTKMesh/Properties.cmake
index f48ba9e..acd2ac9 100644
--- a/Bundles/LeafOp/opVTKMesh/Properties.cmake
+++ b/Bundles/LeafOp/opVTKMesh/Properties.cmake
@@ -2,6 +2,16 @@
 set( NAME opVTKMesh )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwData fwGui fwMedData fwRuntime fwServices fwTools fwVtkIO )
+set( DEPENDENCIES 
+    fwMedData
+    fwCom
+    fwData
+    fwGui
+    fwRuntime
+    fwServices
+    fwTools
+    fwVtkIO
+    fwCore
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafOp/opVTKMesh/bin/build.options b/Bundles/LeafOp/opVTKMesh/bin/build.options
deleted file mode 100644
index a29b3de..0000000
--- a/Bundles/LeafOp/opVTKMesh/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['vtkWidgets','boost']
-LIB     = [
-          'fwTools_0-1',
-          'fwCore_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwVtkIO_0-1',
-          'fwGui_0-1',
-          ]
-BUNDLES = ['gui_0-1']
-
-
-
-
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/IMesher.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/IMesher.hpp
index 49e2277..d183c56 100644
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/IMesher.hpp
+++ b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/IMesher.hpp
@@ -1,42 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef OPVTKMESH_IMESHER_HPP_
-#define OPVTKMESH_IMESHER_HPP_
-
-#include <fwServices/IService.hpp>
+#ifndef __OPVTKMESH_IMESHER_HPP__
+#define __OPVTKMESH_IMESHER_HPP__
 
 #include "opVTKMesh/config.hpp"
 
+#include <fwServices/IService.hpp>
+
 namespace opVTKMesh
 {
 
 /**
  * @brief   This interface defines mesher service API.
- * Does nothing particularly, to be implemented by mesher services.
  *
- * @class  IMesher
- * 
- * @date   2009-2010.
+ * Does nothing particularly, it should to be implemented by mesher services.
  */
 class OPVTKMESH_CLASS_API IMesher : public ::fwServices::IService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IMesher)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IMesher)(::fwServices::IService) );
 
-    ///@brief IMesher constructor. Do nothing.
+    /// IMesher constructor. Do nothing.
     OPVTKMESH_API IMesher();
 
-    ///@brief IMesher destructor. Do nothing.
+    /// IMesher destructor. Do nothing.
     OPVTKMESH_API virtual ~IMesher();
 
 };
 
 }
 
-#endif // OPVTKMESH_IMESHER_HPP_
+#endif // __OPVTKMESH_IMESHER_HPP__
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Namespace.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Namespace.hpp
index 44c9266..1bca393 100644
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Namespace.hpp
+++ b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Namespace.hpp
@@ -1,21 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef OPVTKMESHNAMESPACE_HPP_
-#define OPVTKMESHNAMESPACE_HPP_
+#ifndef __OPVTKMESH_NAMESPACE_HPP__
+#define __OPVTKMESH_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace opVTKMesh contains interface class for mesh and an implementation of a VTK mesher.
- * @namespace   opVTKMesh
- * 
- * @date        2009-2010.
- *
  */
 namespace opVTKMesh
 {
 
-}
-#endif /* OPVTKMESHNAMESPACE_HPP_ */
+/**
+ * @brief       The namespace opVTKMesh::action contains operator to create mesh with VTK .
+ */
+namespace action
+{
+
+} // namespace action
+
+} // namespace opVTKMesh
+
+#endif /* __OPVTKMESH_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Plugin.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Plugin.hpp
index 47d2e92..d31f589 100644
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Plugin.hpp
+++ b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _OPVTKMESH_PLUGIN_HPP_
-#define _OPVTKMESH_PLUGIN_HPP_
+#ifndef __OPVTKMESH_PLUGIN_HPP__
+#define __OPVTKMESH_PLUGIN_HPP__
 
 
 #include <fwRuntime/Plugin.hpp>
@@ -38,4 +38,4 @@ struct Plugin : public ::fwRuntime::Plugin
 } // namespace opVTKMesh
 
 
-#endif //_OPVTKMESH_PLUGIN_HPP_
+#endif //__OPVTKMESH_PLUGIN_HPP__
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/SVTKMesher.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/SVTKMesher.hpp
index 21452e8..29f0545 100644
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/SVTKMesher.hpp
+++ b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/SVTKMesher.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _OPVTKMESH_SVTKMESHER_HPP_
-#define _OPVTKMESH_SVTKMESHER_HPP_
+#ifndef __OPVTKMESH_SVTKMESHER_HPP__
+#define __OPVTKMESH_SVTKMESHER_HPP__
 
 #include <string>
 
@@ -15,16 +15,22 @@
 namespace opVTKMesh
 {
 
+/**
+ * @brief This service generates meshes from an image using VTK library.
+ *
+ * This service works on a composite containing a ::fwData::Image and a ::fwMedData::ModelSeries.
+ * The generated meshes are stored in the given ModelSeries.
+ */
 class OPVTKMESH_CLASS_API SVTKMesher : public ::opVTKMesh::IMesher
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SVTKMesher)(::opVTKMesh::IMesher) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SVTKMesher)(::opVTKMesh::IMesher) );
 
-    OPVTKMESH_API SVTKMesher() throw() ;
+    OPVTKMESH_API SVTKMesher() throw();
 
-    OPVTKMESH_API virtual ~SVTKMesher() throw() ;
+    OPVTKMESH_API virtual ~SVTKMesher() throw();
 
 protected:
 
@@ -32,13 +38,11 @@ protected:
 
     OPVTKMESH_API virtual void stopping() throw ( ::fwTools::Failed );
 
-    OPVTKMESH_API virtual void receiving( ::fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed );
-
     /**
      * @brief Declare the configuration to define percent of reduction, image source and ModelSeries destination.
      *
      * Example of this service configuration
-     * @verbatim
+     * @code{.xml}
        <service impl="::opVTKMesh::SVTKMesher" type="::opVTKMesh::IMesher">
            <config>
                 <percentReduction>80</percentReduction>
@@ -46,15 +50,17 @@ protected:
                 <modelSeries>MODELSERIES_KEY</modelSeries>
             </config>
        </service>
-        @endverbatim
+        @endcode
+     * - \b percentReduction: Specify the desired reduction in the total number of polygons (e.g., if
+     *      TargetReduction is set to 90, this filter will try to reduce the data set to 10% of its original size)
+     * - \b image: key of the source image into the composite
+     * - \b modelSeries: key of the target ModelSeries into the composite
      */
     OPVTKMESH_API virtual void configuring() throw ( ::fwTools::Failed );
 
     OPVTKMESH_API virtual void updating() throw ( ::fwTools::Failed );
 
-    OPVTKMESH_API virtual  void info ( std::ostream &_sstream ) ;
-
-private :
+private:
 
     unsigned int m_reduction;
     std::string m_imageKey;
@@ -65,4 +71,4 @@ private :
 } // namespace opVTKMesh
 
 
-#endif // _OPVTKMESH_SVTKMESHER_HPP_
+#endif // __OPVTKMESH_SVTKMESHER_HPP__
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/Namespace.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/Namespace.hpp
deleted file mode 100644
index c69d9f3..0000000
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef OPVTKMESHACTIONNAMESPACE_HPP_
-#define OPVTKMESHACTIONNAMESPACE_HPP_
-
-namespace opVTKMesh
-{
-/**
- * @brief       The namespace opVTKMesh::action contains operator to create mesh with VTK .
- * @namespace   opVTKMesh::action
- * 
- * @date        2009-2010.
- *
- */
-namespace action
-{
-
-}
-}
-#endif /* OPVTKMESHACTIONNAMESPACE_HPP_ */
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp
new file mode 100644
index 0000000..c1f592a
--- /dev/null
+++ b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/SMeshCreation.hpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __OPVTKMESH_ACTION_SMESHCREATION_HPP__
+#define __OPVTKMESH_ACTION_SMESHCREATION_HPP__
+
+#include "opVTKMesh/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+namespace opVTKMesh
+{
+
+namespace action
+{
+
+/**
+ * @brief Action to create a mesh from an image using VTK library
+ **/
+class OPVTKMESH_CLASS_API SMeshCreation : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SMeshCreation)(::fwGui::IActionSrv) );
+
+    OPVTKMESH_API SMeshCreation() throw();
+
+    OPVTKMESH_API virtual ~SMeshCreation() throw();
+
+protected:
+
+    OPVTKMESH_API void starting() throw ( ::fwTools::Failed );
+
+    OPVTKMESH_API void stopping() throw ( ::fwTools::Failed );
+
+    /**
+     * @brief Configure the service:
+     *
+     * @code{.xml}
+        <service uid="actionCreateMesh" type="::fwGui::IActionSrv" impl="::opVTKMesh::action::SMeshCreation">
+            <image uid="myImage" />
+            <mesh uid="myMesh" />
+            <percentReduction value="0" />
+        </service>
+       @endcode
+     * - \b image: uid of the source image
+     * - \b mesh: uid of the target mesh
+     * - \b percentReduction: Specify the desired reduction in the total number of polygons (e.g., if
+     *      TargetReduction is set to 90, this filter will try to reduce the data set to 10% of its original size).
+     */
+    OPVTKMESH_API void configuring() throw ( ::fwTools::Failed );
+
+    /// Process the mesh creation from the image.
+    OPVTKMESH_API void updating() throw ( ::fwTools::Failed );
+
+private:
+
+    std::string m_imageUID;
+    std::string m_meshUID;
+    unsigned int m_reduction;
+};
+
+
+} // namespace action
+} // namespace opVTKMesh
+
+
+#endif // __OPVTKMESH_ACTION_SMESHCREATION_HPP__
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/VTKMeshCreation.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/VTKMeshCreation.hpp
deleted file mode 100644
index b59ab3c..0000000
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/action/VTKMeshCreation.hpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _OPVTKMESH_ACTION_VTKMESHCREATION_HPP_
-#define _OPVTKMESH_ACTION_VTKMESHCREATION_HPP_
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "opVTKMesh/config.hpp"
-
-namespace opVTKMesh
-{
-
-namespace action
-{
-
-class OPVTKMESH_CLASS_API VTKMeshCreation : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (VTKMeshCreation)(::fwGui::IActionSrv) ) ;
-
-    OPVTKMESH_API VTKMeshCreation() throw() ;
-
-    OPVTKMESH_API virtual ~VTKMeshCreation() throw() ;
-
-protected:
-
-    OPVTKMESH_API void starting() throw ( ::fwTools::Failed );
-
-    OPVTKMESH_API void stopping() throw ( ::fwTools::Failed );
-
-    OPVTKMESH_API void receiving( ::fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed );
-
-    OPVTKMESH_API void configuring() throw ( ::fwTools::Failed );
-
-    OPVTKMESH_API void updating() throw ( ::fwTools::Failed );
-
-    OPVTKMESH_API void info ( std::ostream &_sstream ) ;
-
-private :
-
-    std::string m_imageUID;
-    std::string m_meshUID;
-    unsigned int m_reduction;
-};
-
-
-} // namespace action
-} // namespace opVTKMesh
-
-
-#endif // _OPVTKMESH_ACTION_VTKMESHCREATION_HPP_
diff --git a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/config.hpp b/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/config.hpp
deleted file mode 100644
index 2c9ac38..0000000
--- a/Bundles/LeafOp/opVTKMesh/include/opVTKMesh/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _OPVTKMESH_CONFIG_HPP_
-#define _OPVTKMESH_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef OPVTKMESH_EXPORTS
-    #define OPVTKMESH_API __declspec(dllexport)
-    #else
-    #define OPVTKMESH_API __declspec(dllimport)
-    #endif
-
-    #define OPVTKMESH_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef OPVTKMESH_EXPORTS
-    #define OPVTKMESH_API __attribute__ ((visibility("default")))
-    #define OPVTKMESH_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define OPVTKMESH_API __attribute__ ((visibility("hidden")))
-    #define OPVTKMESH_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define OPVTKMESH_API
-    #define OPVTKMESH_CLASS_API
-
-#endif
-
-#endif //_OPVTKMESH_CONFIG_HPP_
diff --git a/Bundles/LeafOp/opVTKMesh/rc/plugin.xml b/Bundles/LeafOp/opVTKMesh/rc/plugin.xml
index 06f9929..cd12983 100644
--- a/Bundles/LeafOp/opVTKMesh/rc/plugin.xml
+++ b/Bundles/LeafOp/opVTKMesh/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="opVTKMesh" class="::opVTKMesh::Plugin">
+<plugin id="opVTKMesh" class="::opVTKMesh::Plugin" version="@DASH_VERSION@" >
 
     <library name="opVTKMesh" />
 
@@ -7,7 +7,7 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::opVTKMesh::action::VTKMeshCreation</service>
+        <service>::opVTKMesh::action::SMeshCreation</service>
         <object>::fwData::Object</object>
     </extension>
 
diff --git a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/IMesher.cpp b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/IMesher.cpp
index b94bc91..6765b60 100644
--- a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/IMesher.cpp
+++ b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/IMesher.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,12 +12,14 @@ namespace opVTKMesh
 //-----------------------------------------------------------------------------
 
 IMesher::IMesher()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IMesher::~IMesher()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/Plugin.cpp b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/Plugin.cpp
index 0f18ede..c2d9582 100644
--- a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/Plugin.cpp
+++ b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,17 +18,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw( ::fwRuntime::RuntimeException )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/SVTKMesher.cpp b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/SVTKMesher.cpp
index 2eaaeca..9b42e35 100644
--- a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/SVTKMesher.cpp
+++ b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/SVTKMesher.cpp
@@ -1,13 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/lexical_cast.hpp>
+#include "opVTKMesh/SVTKMesher.hpp"
 
-#include <fwTools/fwID.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
+#include <fwData/Composite.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
@@ -15,10 +18,8 @@
 #include <fwMedData/ModelSeries.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/ModelSeriesMsg.hpp>
+#include <fwTools/fwID.hpp>
 
 #include <fwVtkIO/helper/Mesh.hpp>
 #include <fwVtkIO/vtk.hpp>
@@ -30,40 +31,38 @@
 #include <vtkSmartPointer.h>
 #include <vtkImageData.h>
 
-#include "opVTKMesh/SVTKMesher.hpp"
 
 namespace opVTKMesh
 {
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::opVTKMesh::IMesher , ::opVTKMesh::SVTKMesher , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::opVTKMesh::IMesher, ::opVTKMesh::SVTKMesher, ::fwData::Composite );
 
 //-----------------------------------------------------------------------------
 
 SVTKMesher::SVTKMesher() throw() :
     m_reduction(0)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 SVTKMesher::~SVTKMesher() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void SVTKMesher::starting() throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void SVTKMesher::stopping() throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void SVTKMesher::receiving( ::fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -76,34 +75,47 @@ void SVTKMesher::configuring() throw ( ::fwTools::Failed )
     const ::fwServices::IService::ConfigType& config = srvConfig.get_child("service.config");
 
     SLM_ASSERT("You must have one <percentReduction/> element.", config.count("percentReduction") == 1);
-    SLM_ASSERT("You must have one <image/> element.", config.count("image") == 1);
-    SLM_ASSERT("You must have one <modelSeries/> element.", config.count("modelSeries") == 1);
-
     const ::fwServices::IService::ConfigType& reductionCfg = config.get_child("percentReduction");
-    const ::fwServices::IService::ConfigType& imageCfg = config.get_child("image");
-    const ::fwServices::IService::ConfigType& modelSeriesCfg = config.get_child("modelSeries");
-
     m_reduction = reductionCfg.get_value<unsigned int>();
-    m_imageKey = imageCfg.get_value<std::string>();
-    m_modelSeriesKey = modelSeriesCfg.get_value<std::string>();
+
+    if(!this->isVersion2())
+    {
+        SLM_ASSERT("You must have one <image/> element.", config.count("image") == 1);
+        SLM_ASSERT("You must have one <modelSeries/> element.", config.count("modelSeries") == 1);
+        const ::fwServices::IService::ConfigType& imageCfg       = config.get_child("image");
+        const ::fwServices::IService::ConfigType& modelSeriesCfg = config.get_child("modelSeries");
+        m_imageKey       = imageCfg.get_value<std::string>();
+        m_modelSeriesKey = modelSeriesCfg.get_value<std::string>();
+    }
 }
 
 //-----------------------------------------------------------------------------
 
 void SVTKMesher::updating() throw ( ::fwTools::Failed )
 {
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    ::fwData::Composite::iterator iterImg = composite->find(m_imageKey);
-    ::fwData::Composite::iterator iterModelSeries = composite->find(m_modelSeriesKey);
+    ::fwData::Image::csptr image;
+    ::fwMedData::ModelSeries::sptr modelSeries;
 
-    SLM_ASSERT("Key '"+m_imageKey+"' not found in composite.", iterImg != composite->end());
-    SLM_ASSERT("Key '"+m_modelSeriesKey+"' not found in composite.", iterModelSeries != composite->end());
+    if(this->isVersion2())
+    {
+        image       = this->getInput< ::fwData::Image >("image");
+        modelSeries = this->getInOut< ::fwMedData::ModelSeries >("modelSeries");
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite           = this->getObject< ::fwData::Composite >();
+        ::fwData::Composite::iterator iterImg         = composite->find(m_imageKey);
+        ::fwData::Composite::iterator iterModelSeries = composite->find(m_modelSeriesKey);
 
-    ::fwData::Image::sptr image = ::fwData::Image::dynamicCast(iterImg->second);
-    SLM_ASSERT("Image '"+m_imageKey+"' is not valid.", image);
+        SLM_ASSERT("Key '"+m_imageKey+"' not found in composite.", iterImg != composite->end());
+        SLM_ASSERT("Key '"+m_modelSeriesKey+"' not found in composite.", iterModelSeries != composite->end());
 
-    ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::dynamicCast(iterModelSeries->second);
-    SLM_ASSERT("ModelSeries '"+m_modelSeriesKey+"' is not valid.", modelSeries);
+        image = ::fwData::Image::dynamicCast(iterImg->second);
+        SLM_ASSERT("Image '"+m_imageKey+"' is not valid.", image);
+
+        modelSeries = ::fwMedData::ModelSeries::dynamicCast(iterModelSeries->second);
+        SLM_ASSERT("ModelSeries '"+m_modelSeriesKey+"' is not valid.", modelSeries);
+    }
 
     ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
 
@@ -113,15 +125,16 @@ void SVTKMesher::updating() throw ( ::fwTools::Failed )
 
     // contour filter
     vtkSmartPointer< vtkDiscreteMarchingCubes > contourFilter = vtkSmartPointer< vtkDiscreteMarchingCubes >::New();
-    contourFilter->SetInput(vtkImage);
+    contourFilter->SetInputData(vtkImage);
     contourFilter->SetValue(0, 255);
     contourFilter->ComputeScalarsOn();
     contourFilter->ComputeNormalsOn();
     contourFilter->Update();
 
     // smooth filter
-    vtkSmartPointer< vtkWindowedSincPolyDataFilter > smoothFilter = vtkSmartPointer< vtkWindowedSincPolyDataFilter >::New();
-    smoothFilter->SetInput(contourFilter->GetOutput());
+    vtkSmartPointer< vtkWindowedSincPolyDataFilter > smoothFilter =
+        vtkSmartPointer< vtkWindowedSincPolyDataFilter >::New();
+    smoothFilter->SetInputConnection(contourFilter->GetOutputPort());
     smoothFilter->SetNumberOfIterations( 50 );
     smoothFilter->BoundarySmoothingOn();
     smoothFilter->SetPassBand ( 0.1 );
@@ -139,7 +152,7 @@ void SVTKMesher::updating() throw ( ::fwTools::Failed )
     if( reduction > 0 )
     {
         vtkSmartPointer< vtkDecimatePro > decimate = vtkSmartPointer< vtkDecimatePro >::New();
-        decimate->SetInput( smoothFilter->GetOutput() );
+        decimate->SetInputConnection( smoothFilter->GetOutputPort() );
         decimate->SetTargetReduction( reduction/100.0 );
         decimate->PreserveTopologyOff();
         decimate->SplittingOn();
@@ -157,33 +170,28 @@ void SVTKMesher::updating() throw ( ::fwTools::Failed )
         ::fwVtkIO::helper::Mesh::fromVTKMesh( polyData, mesh);
     }
 
-
-
     ::fwData::Reconstruction::sptr reconstruction = ::fwData::Reconstruction::New();
 
     static unsigned int organNumber = 0;
     ++organNumber;
-    reconstruction->setCRefOrganName("OrganMesher_VTK_" + ::boost::lexical_cast<std::string>(organNumber));
-    reconstruction->setCRefStructureType("OrganType");
+    reconstruction->setOrganName("OrganMesher_VTK_" + std::to_string(organNumber));
+    reconstruction->setStructureType("OrganType");
     reconstruction->setIsVisible(true);
-    // Set Triangular Mesh
+    // Set Mesh
     reconstruction->setMesh(mesh);
 
     ::fwMedData::ModelSeries::ReconstructionVectorType recs = modelSeries->getReconstructionDB();
     recs.push_back(reconstruction);
     modelSeries->setReconstructionDB(recs);
 
-    /// Notification
-    ::fwComEd::ModelSeriesMsg::sptr msg = ::fwComEd::ModelSeriesMsg::New();
-    msg->addEvent( ::fwComEd::ModelSeriesMsg::ADD_RECONSTRUCTION ) ;
-    ::fwServices::IEditionService::notify( this->getSptr(), modelSeries, msg );
+    // Notification
+    ::fwMedData::ModelSeries::ReconstructionVectorType addedRecs;
+    addedRecs.push_back(reconstruction);
+    auto sig = modelSeries->signal< ::fwMedData::ModelSeries::ReconstructionsAddedSignalType >(
+        ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG);
+    sig->asyncEmit(addedRecs);
 }
 
 //-----------------------------------------------------------------------------
 
-void SVTKMesher::info ( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
 }
diff --git a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp
new file mode 100644
index 0000000..2ca048f
--- /dev/null
+++ b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/SMeshCreation.cpp
@@ -0,0 +1,181 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "opVTKMesh/action/SMeshCreation.hpp"
+
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Image.hpp>
+#include <fwData/Mesh.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <fwVtkIO/helper/Mesh.hpp>
+#include <fwVtkIO/vtk.hpp>
+
+#include <vtkDiscreteMarchingCubes.h>
+#include <vtkWindowedSincPolyDataFilter.h>
+#include <vtkThreshold.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkDecimatePro.h>
+#include <vtkGeometryFilter.h>
+#include <vtkSmartPointer.h>
+#include <vtkImageData.h>
+
+
+namespace opVTKMesh
+{
+
+namespace action
+{
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::opVTKMesh::action::SMeshCreation, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SMeshCreation::SMeshCreation() throw() :
+    m_imageUID(""),
+    m_meshUID(""),
+    m_reduction(0)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SMeshCreation::~SMeshCreation() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SMeshCreation::starting() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStarting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SMeshCreation::stopping() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStopping();
+}
+
+//-----------------------------------------------------------------------------
+
+void SMeshCreation::configuring() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+
+    SLM_ASSERT( "Mesh UID andImage UID must be defined in the service configuration",  m_configuration->findConfigurationElement(
+                    "image") && m_configuration->findConfigurationElement("mesh") );
+
+
+    m_imageUID = m_configuration->findConfigurationElement("image")->getExistingAttributeValue("uid");
+
+    m_meshUID = m_configuration->findConfigurationElement("mesh")->getExistingAttributeValue("uid");
+
+    if (m_configuration->findConfigurationElement("percentReduction") &&
+        m_configuration->findConfigurationElement("percentReduction")->hasAttribute("value"))
+    {
+        std::string reduce = m_configuration->findConfigurationElement("percentReduction")->getExistingAttributeValue(
+            "value");
+        m_reduction = boost::lexical_cast<unsigned int>(reduce);
+    }
+
+    OSLM_INFO( "Image UID = " << m_imageUID);
+    OSLM_INFO( "Mesh UID = " << m_meshUID);
+    OSLM_INFO( "Reduction value = " << m_reduction);
+}
+
+//-----------------------------------------------------------------------------
+
+void SMeshCreation::updating() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    /// Retreive object
+    OSLM_ASSERT("Not found the image defined by uid : " << m_imageUID, ::fwTools::fwID::exist(m_imageUID));
+    ::fwData::Image::sptr pImage = ::fwData::Image::dynamicCast( ::fwTools::fwID::getObject(m_imageUID) );
+    OSLM_ASSERT("Not found the mesh defined by uid : " << m_meshUID, ::fwTools::fwID::exist(m_meshUID));
+    ::fwData::Mesh::sptr pMesh = ::fwData::Mesh::dynamicCast( ::fwTools::fwID::getObject(m_meshUID) );
+
+    ///VTK Mesher
+
+    // vtk img
+    vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
+    ::fwVtkIO::toVTKImage( pImage, vtkImage );
+
+    // contour filter
+    vtkSmartPointer< vtkDiscreteMarchingCubes > contourFilter = vtkSmartPointer< vtkDiscreteMarchingCubes >::New();
+    contourFilter->SetInputData(vtkImage);
+    contourFilter->SetValue(0, 255);
+    contourFilter->ComputeScalarsOn();
+    contourFilter->ComputeNormalsOn();
+    contourFilter->Update();
+
+    // smooth filter
+    vtkSmartPointer< vtkWindowedSincPolyDataFilter > smoothFilter =
+        vtkSmartPointer< vtkWindowedSincPolyDataFilter >::New();
+    smoothFilter->SetInputConnection(contourFilter->GetOutputPort());
+    smoothFilter->SetNumberOfIterations( 50 );
+    smoothFilter->BoundarySmoothingOn();
+    smoothFilter->SetPassBand ( 0.1 );
+    smoothFilter->SetFeatureAngle(120.0);
+    smoothFilter->SetEdgeAngle(90);
+    smoothFilter->FeatureEdgeSmoothingOn();
+    smoothFilter->Update();
+
+
+    // Get polyData
+    vtkSmartPointer< vtkPolyData > polyData;
+
+    // decimate filter
+    unsigned int reduction = m_reduction;
+    if( reduction > 0 )
+    {
+        vtkSmartPointer< vtkDecimatePro > decimate = vtkSmartPointer< vtkDecimatePro >::New();
+        decimate->SetInputConnection( smoothFilter->GetOutputPort() );
+        decimate->SetTargetReduction( reduction/100.0 );
+        decimate->PreserveTopologyOff();
+        decimate->SplittingOn();
+        decimate->BoundaryVertexDeletionOn();
+        decimate->SetSplitAngle( 120 );
+        decimate->Update();
+        polyData = decimate->GetOutput();
+        OSLM_TRACE("final GetNumberOfCells = " << polyData->GetNumberOfCells());
+        ::fwVtkIO::helper::Mesh::fromVTKMesh( polyData, pMesh);
+    }
+    else
+    {
+        polyData = smoothFilter->GetOutput();
+        OSLM_TRACE("final GetNumberOfCells = " << polyData->GetNumberOfCells());
+        ::fwVtkIO::helper::Mesh::fromVTKMesh( polyData, pMesh);
+    }
+
+    /// Notification
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = pMesh->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace action
+} // namespace opVTKMesh
+
diff --git a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/VTKMeshCreation.cpp b/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/VTKMeshCreation.cpp
deleted file mode 100644
index 80fc228..0000000
--- a/Bundles/LeafOp/opVTKMesh/src/opVTKMesh/action/VTKMeshCreation.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwTools/fwID.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/Mesh.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/MeshMsg.hpp>
-
-#include <fwVtkIO/helper/Mesh.hpp>
-#include <fwVtkIO/vtk.hpp>
-
-#include <vtkDiscreteMarchingCubes.h>
-#include <vtkWindowedSincPolyDataFilter.h>
-#include <vtkThreshold.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkDecimatePro.h>
-#include <vtkGeometryFilter.h>
-#include <vtkSmartPointer.h>
-#include <vtkImageData.h>
-
-#include "opVTKMesh/action/VTKMeshCreation.hpp"
-
-namespace opVTKMesh
-{
-
-namespace action
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::opVTKMesh::action::VTKMeshCreation , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-VTKMeshCreation::VTKMeshCreation() throw() :
-    m_imageUID(""),
-    m_meshUID(""),
-    m_reduction(0)
-{}
-
-//-----------------------------------------------------------------------------
-
-VTKMeshCreation::~VTKMeshCreation() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void VTKMeshCreation::starting() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void VTKMeshCreation::stopping() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void VTKMeshCreation::receiving( ::fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed )
-{}
-
-//-----------------------------------------------------------------------------
-
-void VTKMeshCreation::configuring() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-
-    SLM_ASSERT( "Mesh UID andImage UID must be defined in the service configuration",  m_configuration->findConfigurationElement("image") && m_configuration->findConfigurationElement("mesh") );
-
-
-    m_imageUID = m_configuration->findConfigurationElement("image")->getExistingAttributeValue("uid");
-
-    m_meshUID = m_configuration->findConfigurationElement("mesh")->getExistingAttributeValue("uid");
-
-    if (m_configuration->findConfigurationElement("percentReduction") && m_configuration->findConfigurationElement("percentReduction")->hasAttribute("value"))
-    {
-        std::string reduce = m_configuration->findConfigurationElement("percentReduction")->getExistingAttributeValue("value");
-        m_reduction = boost::lexical_cast<unsigned int>(reduce);
-    }
-
-    OSLM_INFO( "Image UID = " << m_imageUID);
-    OSLM_INFO( "Mesh UID = " << m_meshUID);
-    OSLM_INFO( "Reduction value = " << m_reduction);
-}
-
-//-----------------------------------------------------------------------------
-
-void VTKMeshCreation::updating() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    /// Retreive object
-    OSLM_ASSERT("Not found the image defined by uid : " << m_imageUID, ::fwTools::fwID::exist(m_imageUID)) ;
-    ::fwData::Image::sptr pImage = ::fwData::Image::dynamicCast( ::fwTools::fwID::getObject(m_imageUID) ) ;
-    OSLM_ASSERT("Not found the mesh defined by uid : " << m_meshUID, ::fwTools::fwID::exist(m_meshUID)) ;
-    ::fwData::Mesh::sptr pMesh = ::fwData::Mesh::dynamicCast( ::fwTools::fwID::getObject(m_meshUID) ) ;
-
-    ///VTK Mesher
-
-    // vtk img
-    vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
-    ::fwVtkIO::toVTKImage( pImage, vtkImage );
-
-    // contour filter
-    vtkSmartPointer< vtkDiscreteMarchingCubes > contourFilter = vtkSmartPointer< vtkDiscreteMarchingCubes >::New();
-    contourFilter->SetInput(vtkImage);
-    contourFilter->SetValue(0, 255);
-    contourFilter->ComputeScalarsOn();
-    contourFilter->ComputeNormalsOn();
-    contourFilter->Update();
-
-    // smooth filter
-    vtkSmartPointer< vtkWindowedSincPolyDataFilter > smoothFilter = vtkSmartPointer< vtkWindowedSincPolyDataFilter >::New();
-    smoothFilter->SetInput(contourFilter->GetOutput());
-    smoothFilter->SetNumberOfIterations( 50 );
-    smoothFilter->BoundarySmoothingOn();
-    smoothFilter->SetPassBand ( 0.1 );
-    smoothFilter->SetFeatureAngle(120.0);
-    smoothFilter->SetEdgeAngle(90);
-    smoothFilter->FeatureEdgeSmoothingOn();
-    smoothFilter->Update();
-
-
-    // Get polyData
-    vtkSmartPointer< vtkPolyData > polyData;
-
-    // decimate filter
-    unsigned int reduction = m_reduction;
-    if( reduction > 0 )
-    {
-        vtkSmartPointer< vtkDecimatePro > decimate = vtkSmartPointer< vtkDecimatePro >::New();
-        decimate->SetInput( smoothFilter->GetOutput() );
-        decimate->SetTargetReduction( reduction/100.0 );
-        decimate->PreserveTopologyOff();
-        decimate->SplittingOn();
-        decimate->BoundaryVertexDeletionOn();
-        decimate->SetSplitAngle( 120 );
-        decimate->Update();
-        polyData = decimate->GetOutput();
-        OSLM_TRACE("final GetNumberOfCells = " << polyData->GetNumberOfCells());
-        ::fwVtkIO::helper::Mesh::fromVTKMesh( polyData, pMesh);
-    }
-    else
-    {
-        polyData = smoothFilter->GetOutput();
-        OSLM_TRACE("final GetNumberOfCells = " << polyData->GetNumberOfCells());
-        ::fwVtkIO::helper::Mesh::fromVTKMesh( polyData, pMesh);
-    }
-
-
-//    OSLM_TRACE("final GetNumberOfCells = " << polyData->GetNumberOfCells());
-//    bool res = ::fwVtkIO::fromVTKMesh( polyData, pMesh);
-
-    /// Notification
-    ::fwComEd::MeshMsg::sptr msg = ::fwComEd::MeshMsg::New();;
-    msg->addEvent( ::fwComEd::MeshMsg::NEW_MESH ) ;
-    ::fwServices::IEditionService::notify( this->getSptr(), pMesh, msg );
-}
-
-//-----------------------------------------------------------------------------
-
-void VTKMeshCreation::info ( std::ostream &_sstream )
-{}
-
-//-----------------------------------------------------------------------------
-
-} }
diff --git a/Bundles/LeafPatch/patchMedicalData/CMakeLists.txt b/Bundles/LeafPatch/patchMedicalData/CMakeLists.txt
index 91baede..606b195 100644
--- a/Bundles/LeafPatch/patchMedicalData/CMakeLists.txt
+++ b/Bundles/LeafPatch/patchMedicalData/CMakeLists.txt
@@ -1,4 +1,8 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
+
+find_package(Boost COMPONENTS system REQUIRED)
+
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+fwLink(
+    ${Boost_SYSTEM_LIBRARY}
 )
diff --git a/Bundles/LeafPatch/patchMedicalData/COPYING b/Bundles/LeafPatch/patchMedicalData/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafPatch/patchMedicalData/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafPatch/patchMedicalData/COPYING.LESSER b/Bundles/LeafPatch/patchMedicalData/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafPatch/patchMedicalData/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafPatch/patchMedicalData/Properties.cmake b/Bundles/LeafPatch/patchMedicalData/Properties.cmake
index 2e0e20f..8fe8b59 100644
--- a/Bundles/LeafPatch/patchMedicalData/Properties.cmake
+++ b/Bundles/LeafPatch/patchMedicalData/Properties.cmake
@@ -2,6 +2,11 @@
 set( NAME patchMedicalData )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwMDSemanticPatch fwRuntime fwStructuralPatch )
+set( DEPENDENCIES
+    fwMDSemanticPatch
+    fwRuntime
+    fwStructuralPatch
+    fwAtoms
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafPatch/patchMedicalData/bin/build.options b/Bundles/LeafPatch/patchMedicalData/bin/build.options
deleted file mode 100644
index 13c0676..0000000
--- a/Bundles/LeafPatch/patchMedicalData/bin/build.options
+++ /dev/null
@@ -1,3 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = ['fwRuntime_0-3','fwStructuralPatch_0-1','fwMDSemanticPatch_0-1']
diff --git a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/Plugin.hpp b/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/Plugin.hpp
index 2799e70..0157501 100644
--- a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/Plugin.hpp
+++ b/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _PATCHMEDICALDATA_PLUGIN_HPP_
-#define _PATCHMEDICALDATA_PLUGIN_HPP_
+#ifndef __PATCHMEDICALDATA_PLUGIN_HPP__
+#define __PATCHMEDICALDATA_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -36,4 +36,4 @@ struct PATCHMEDICALDATA_CLASS_API Plugin : public ::fwRuntime::Plugin
 
 } // namespace patchMedicalData
 
-#endif //_PATCHMEDICALDATA_PLUGIN_HPP_
+#endif //__PATCHMEDICALDATA_PLUGIN_HPP__
diff --git a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/config.hpp b/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/config.hpp
deleted file mode 100644
index fb6cf90..0000000
--- a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _PATCHMEDICALDATA_CONFIG_HPP_
-#define _PATCHMEDICALDATA_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef PATCHMEDICALDATA_EXPORTS
-    #define PATCHMEDICALDATA_API __declspec(dllexport)
-    #else
-    #define PATCHMEDICALDATA_API __declspec(dllimport)
-    #endif
-
-    #define PATCHMEDICALDATA_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef PATCHMEDICALDATA_EXPORTS
-    #define PATCHMEDICALDATA_API __attribute__ ((visibility("default")))
-    #define PATCHMEDICALDATA_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define PATCHMEDICALDATA_API __attribute__ ((visibility("hidden")))
-    #define PATCHMEDICALDATA_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define PATCHMEDICALDATA_API
-    #define PATCHMEDICALDATA_CLASS_API
-
-#endif
-
-#endif //PATCHMEDICALDATA_API
diff --git a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/namespace.hpp b/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/namespace.hpp
index 67a3e65..1bc28ef 100644
--- a/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/namespace.hpp
+++ b/Bundles/LeafPatch/patchMedicalData/include/patchMedicalData/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafPatch/patchMedicalData/rc/plugin.xml b/Bundles/LeafPatch/patchMedicalData/rc/plugin.xml
index 1cce200..d896d4c 100644
--- a/Bundles/LeafPatch/patchMedicalData/rc/plugin.xml
+++ b/Bundles/LeafPatch/patchMedicalData/rc/plugin.xml
@@ -1,3 +1,3 @@
-<plugin id="patchMedicalData" class="::patchMedicalData::Plugin" >
+<plugin id="patchMedicalData" class="::patchMedicalData::Plugin"  version="@DASH_VERSION@" >
     <library name="patchMedicalData" />
 </plugin>
diff --git a/Bundles/LeafPatch/patchMedicalData/src/patchMedicalData/Plugin.cpp b/Bundles/LeafPatch/patchMedicalData/src/patchMedicalData/Plugin.cpp
index 90f87c8..2e2b92f 100644
--- a/Bundles/LeafPatch/patchMedicalData/src/patchMedicalData/Plugin.cpp
+++ b/Bundles/LeafPatch/patchMedicalData/src/patchMedicalData/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,7 +18,8 @@ namespace patchMedicalData
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::patchMedicalData::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
@@ -32,6 +33,7 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace patchMedicalData
diff --git a/Bundles/LeafPatch/patchMedicalData/test/CMakeLists.txt b/Bundles/LeafPatch/patchMedicalData/test/CMakeLists.txt
index b23b5b0..a1a1144 100644
--- a/Bundles/LeafPatch/patchMedicalData/test/CMakeLists.txt
+++ b/Bundles/LeafPatch/patchMedicalData/test/CMakeLists.txt
@@ -1,8 +1,5 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
diff --git a/Bundles/LeafPatch/patchMedicalData/test/Properties.cmake b/Bundles/LeafPatch/patchMedicalData/test/Properties.cmake
index 9fd0224..631dd77 100644
--- a/Bundles/LeafPatch/patchMedicalData/test/Properties.cmake
+++ b/Bundles/LeafPatch/patchMedicalData/test/Properties.cmake
@@ -2,7 +2,17 @@
 set( NAME patchMedicalDataTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwTest fwCore fwTools fwData fwDataTools fwStructuralPatch fwMDSemanticPatch )
+set( DEPENDENCIES
+    fwTest
+    fwCore
+    fwData
+    fwServices
+    fwRuntime
+    fwMedData
+    fwThread
+    fwGui
+    fwMDSemanticPatch
+)
 set( REQUIREMENTS dataReg servicesReg ioAtoms gui patchMedicalData )
 
 set(CPPUNITTEST_OPTIONS BUNDLE patchMedicalData WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafPatch/patchMedicalData/test/cppunit.options b/Bundles/LeafPatch/patchMedicalData/test/cppunit.options
deleted file mode 100644
index 886cb95..0000000
--- a/Bundles/LeafPatch/patchMedicalData/test/cppunit.options
+++ /dev/null
@@ -1,21 +0,0 @@
-CLASSTEST=[
-          'PatchTest',
-          ]
-
-CONSOLE = 'yes'
-LOGLEVEL='trace'
-
-USE = ['boost']
-
-LIB = ['fwData_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwDataTools_0-1',
-       'fwTest_0-1',
-       'fwStructuralPatch_0-1',
-       'fwMDSemanticPatch_0-1']
-
-BUNDLES = []
-
-REQUIREMENTS = ['dataReg_0-1','servicesReg_0-1','ioAtoms_0-1','gui_0-1']
-
diff --git a/Bundles/LeafPatch/patchMedicalData/test/tu/include/PatchTest.hpp b/Bundles/LeafPatch/patchMedicalData/test/tu/include/PatchTest.hpp
index b7ff4ca..8830290 100644
--- a/Bundles/LeafPatch/patchMedicalData/test/tu/include/PatchTest.hpp
+++ b/Bundles/LeafPatch/patchMedicalData/test/tu/include/PatchTest.hpp
@@ -1,26 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __PATCHMEDICALDATA_TEST_TU_PATCHTEST_HPP__
-#define __PATCHMEDICALDATA_TEST_TU_PATCHTEST_HPP__
+#ifndef __PATCHMEDICALDATA_UT_PATCHTEST_HPP__
+#define __PATCHMEDICALDATA_UT_PATCHTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
-#include <fwRuntime/EConfigurationElement.hpp>
-
-namespace fwData
-{
-    class Object;
-}
-
-namespace fwRuntime
-{
-    class EConfigurationElement;
-}
-
 namespace patchMedicalData
 {
 namespace ut
@@ -28,9 +16,9 @@ namespace ut
 
 class PatchTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( PatchTest );
-    CPPUNIT_TEST( patchMedicalDataTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( PatchTest );
+CPPUNIT_TEST( patchMedicalDataTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
@@ -43,5 +31,5 @@ public:
 } //namespace ut
 } //namespace patchMedicalData
 
-#endif //__PATCHMEDICALDATA_TEST_TU_PATCHTEST_HPP__
+#endif //__PATCHMEDICALDATA_UT_PATCHTEST_HPP__
 
diff --git a/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp b/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp
index a857e1f..f465a8a 100644
--- a/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp
+++ b/Bundles/LeafPatch/patchMedicalData/test/tu/src/PatchTest.cpp
@@ -1,37 +1,41 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
 
-#include <fwTools/dateAndTime.hpp>
-#include <fwTools/System.hpp>
+#include "PatchTest.hpp"
 
-#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwData/Object.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#include <fwDataTools/Image.hpp>
 
-#include <fwData/Object.hpp>
+#include <fwGui/registry/worker.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
-#include <fwMedData/Patient.hpp>
+#include <fwMDSemanticPatch/PatchLoader.hpp>
+
+#include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
-#include <fwMedData/Equipment.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/registry/ServiceFactory.hpp>
 
 #include <fwTest/Data.hpp>
 #include <fwTest/generator/Image.hpp>
 
-#include <fwDataTools/Image.hpp>
+#include <fwThread/Worker.hpp>
 
-#include <fwServices/registry/ServiceFactory.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwTools/System.hpp>
+#include <fwTools/dateAndTime.hpp>
 
+#include <boost/filesystem/operations.hpp>
 
-#include "PatchTest.hpp"
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::patchMedicalData::ut::PatchTest );
@@ -46,6 +50,8 @@ namespace ut
 void PatchTest::setUp()
 {
     // Set up context before running a test.
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    ::fwGui::registry::worker::init(worker);
 }
 
 //------------------------------------------------------------------------------
@@ -53,6 +59,7 @@ void PatchTest::setUp()
 void PatchTest::tearDown()
 {
     // Clean up after the test run.
+    ::fwGui::registry::worker::reset();
 }
 
 //------------------------------------------------------------------------------
@@ -61,11 +68,11 @@ template <typename T>
 SPTR(T) read(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const std::string &reader)
 {
 
-    typename T::sptr readObj = T::New();
+    typename T::sptr readObj               = T::New();
     ::fwServices::IService::sptr readerSrv = ::fwServices::registry::ServiceFactory::getDefault()->create( reader );
     CPPUNIT_ASSERT(readerSrv);
 
-    ::fwServices::OSR::registerService( readObj , readerSrv );
+    ::fwServices::OSR::registerService( readObj, readerSrv );
     readerSrv->setConfiguration(srvCfg);
     readerSrv->configure();
     readerSrv->start();
@@ -78,9 +85,9 @@ SPTR(T) read(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const std::
 
 //------------------------------------------------------------------------------
 
-::fwMedData::Series::sptr getACHSeries( const ::fwMedData::SeriesDB::sptr & sdb )
+::fwMedData::Series::sptr getACHSeries( const ::fwMedData::SeriesDB::sptr& sdb )
 {
-    BOOST_FOREACH( ::fwMedData::Series::sptr series, sdb->getContainer() )
+    for( ::fwMedData::Series::sptr series :  sdb->getContainer() )
     {
         if ( series->getPatient()->getName() == "CHARNOZ ARNAUD" )
         {
@@ -93,10 +100,10 @@ SPTR(T) read(const ::fwRuntime::EConfigurationElement::sptr &srvCfg, const std::
 
 //------------------------------------------------------------------------------
 
-std::vector< ::fwMedData::Series::sptr > getOtherSeries( const ::fwMedData::SeriesDB::sptr & sdb )
+std::vector< ::fwMedData::Series::sptr > getOtherSeries( const ::fwMedData::SeriesDB::sptr& sdb )
 {
     std::vector< ::fwMedData::Series::sptr > otherSeries;
-    BOOST_FOREACH( ::fwMedData::Series::sptr series, sdb->getContainer() )
+    for( ::fwMedData::Series::sptr series :  sdb->getContainer() )
     {
         if ( series->getPatient()->getName() != "CHARNOZ ARNAUD" )
         {
@@ -113,6 +120,9 @@ void PatchTest::patchMedicalDataTest()
 {
     const ::boost::filesystem::path file = ::fwTest::Data::dir() /"fw4spl/patch/md_1.jsonz";
 
+    CPPUNIT_ASSERT_MESSAGE("The file '" + file.string() + "' does not exist",
+                           ::boost::filesystem::exists(file));
+
     ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
 
     ::fwRuntime::EConfigurationElement::sptr fileCfg = ::fwRuntime::EConfigurationElement::New("file");
@@ -122,7 +132,7 @@ void PatchTest::patchMedicalDataTest()
     //<patcher context="..." version="..." />
     ::fwRuntime::EConfigurationElement::sptr patcherCfg = ::fwRuntime::EConfigurationElement::New("patcher");
     patcherCfg->setAttributeValue("context","MedicalData");
-    patcherCfg->setAttributeValue("version","V2");
+    patcherCfg->setAttributeValue("version", ::fwMDSemanticPatch::PatchLoader::getCurrentVersion());
     srvCfg->addConfigurationElement(patcherCfg);
 
     ::fwMedData::SeriesDB::sptr sdb = read< ::fwMedData::SeriesDB >(srvCfg, "::ioAtoms::SReader" );
@@ -135,7 +145,7 @@ void PatchTest::patchMedicalDataTest()
     CPPUNIT_ASSERT( series );
     CPPUNIT_ASSERT( ::fwMedData::ImageSeries::dynamicCast(series) );
     CPPUNIT_ASSERT_EQUAL(std::string("1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855"),
-            series->getInstanceUID());
+                         series->getInstanceUID());
     CPPUNIT_ASSERT_EQUAL(std::string("20081028"), series->getDate());
     CPPUNIT_ASSERT_EQUAL(std::string("174446"), series->getTime());
     CPPUNIT_ASSERT_EQUAL(std::string("Original image"),series->getDescription());
@@ -152,7 +162,7 @@ void PatchTest::patchMedicalDataTest()
     ::fwMedData::Study::sptr study = series->getStudy();
     CPPUNIT_ASSERT( study );
     CPPUNIT_ASSERT_EQUAL(std::string("1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775"),
-            study->getInstanceUID());
+                         study->getInstanceUID());
     CPPUNIT_ASSERT_EQUAL(std::string("20081028"), study->getDate());
     CPPUNIT_ASSERT_EQUAL(std::string("174446"), study->getTime());
     CPPUNIT_ASSERT_EQUAL(std::string(""), study->getReferringPhysicianName());
diff --git a/Bundles/LeafRegistration/basicRegistration/CMakeLists.txt b/Bundles/LeafRegistration/basicRegistration/CMakeLists.txt
new file mode 100644
index 0000000..b389def
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/CMakeLists.txt
@@ -0,0 +1,26 @@
+
+fwLoadProperties()
+
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+find_package(ITK REQUIRED)
+find_package(VTK COMPONENTS vtkCommonDataModel NO_MODULE REQUIRED)
+
+fwForwardInclude(
+    ${ITK_INCLUDE_DIRS}
+    ${VTK_INCLUDE_DIRS}
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+
+    ITKCommon
+
+    ${VTK_LIBRARIES}
+)
+
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/LeafRegistration/basicRegistration/Properties.cmake b/Bundles/LeafRegistration/basicRegistration/Properties.cmake
new file mode 100644
index 0000000..8e7830c
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/Properties.cmake
@@ -0,0 +1,12 @@
+
+set( NAME basicRegistration )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+    fwDataTools
+    fwGuiQt
+    fwItkIO
+
+    gui
+)
+set( REQUIREMENTS  )
diff --git a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/Plugin.hpp b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/Plugin.hpp
new file mode 100644
index 0000000..f23277f
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/Plugin.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#ifndef __BASICREGISTRATION_PLUGIN_HPP__
+#define __BASICREGISTRATION_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+#include "basicRegistration/config.hpp"
+
+namespace basicRegistration
+{
+
+/**
+ * @brief   This class is started when the bundle is loaded.
+ */
+struct BASICREGISTRATION_CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+
+    /// Destructor
+    BASICREGISTRATION_API ~Plugin() throw();
+
+    /// Overrides
+    BASICREGISTRATION_API void start() throw(::fwRuntime::RuntimeException);
+
+    /// Overrides
+    BASICREGISTRATION_API void stop() throw();
+
+};
+
+
+} // namespace basicRegistration
+
+
+#endif //__BASICREGISTRATION_PLUGIN_HPP__
diff --git a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/SImagesSubstract.hpp b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/SImagesSubstract.hpp
new file mode 100644
index 0000000..213ace0
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/SImagesSubstract.hpp
@@ -0,0 +1,70 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __BASICREGISTRATION_SIMAGESSUBSTRACT_HPP__
+#define __BASICREGISTRATION_SIMAGESSUBSTRACT_HPP__
+
+#include <QObject>
+#include <QPointer>
+
+#include <gui/editor/IEditor.hpp>
+
+#include "basicRegistration/config.hpp"
+
+class QPushButton;
+
+namespace basicRegistration
+{
+
+class BASICREGISTRATION_CLASS_API SImagesSubstract : public QObject,
+                                                     public ::gui::editor::IEditor
+{
+Q_OBJECT
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SImagesSubstract)(::gui::editor::IEditor) );
+
+    BASICREGISTRATION_API SImagesSubstract() throw();
+
+    BASICREGISTRATION_API virtual ~SImagesSubstract() throw();
+
+protected:
+
+    BASICREGISTRATION_API virtual void configuring() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void starting() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void stopping() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void swapping() throw ( ::fwTools::Failed );
+
+
+
+
+private Q_SLOTS:
+
+    /// Compute the subtraction between two images.
+    void OnCompute();
+
+private:
+    QPointer< QPushButton > mpComputeButton;
+
+
+};
+
+
+
+} // namespace basicRegistration
+
+#endif /*__BASICREGISTRATION_SIMAGESSUBSTRACT_HPP__*/
+
diff --git a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/SPointListRegistration.hpp b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/SPointListRegistration.hpp
new file mode 100644
index 0000000..c268a9c
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/SPointListRegistration.hpp
@@ -0,0 +1,78 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __BASICREGISTRATION_SPOINTLISTREGISTRATION_HPP__
+#define __BASICREGISTRATION_SPOINTLISTREGISTRATION_HPP__
+
+#include <fwServices/IController.hpp>
+
+#include "basicRegistration/config.hpp"
+
+namespace basicRegistration
+{
+
+/**
+ * @brief   Register a point list against a reference point list. Each point in the list to register is matched
+ *          with a point in the reference list according to its label.
+ *          The output is a transformation matrix.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+       <service uid="..." type="::basicRegistration::SPointListRegistration">
+           <inout key="registeredPL" uid="..." />
+           <inout key="referencePL" uid="..." />
+           <inout key="output" uid="..." />
+       </service>
+   @endcode
+ * @subsection In-Out In-Out
+ * - \b registeredPL [::fwData::PointList]: List containing the points to register.
+ * - \b referencePL [::fwData::PointList]: List containing the reference points to match with the points to register.
+ * - \b output [::fwData::TransformationMatrix3D]: Transformation matrix between the source and target points.
+ *
+ */
+class BASICREGISTRATION_CLASS_API SPointListRegistration : public ::fwServices::IController
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SPointListRegistration)(::fwServices::IController) );
+
+    BASICREGISTRATION_API SPointListRegistration();
+
+    BASICREGISTRATION_API virtual ~SPointListRegistration();
+
+protected:
+
+    /// Configures the service
+    BASICREGISTRATION_API virtual void configuring() throw ( ::fwTools::Failed );
+
+    /// Do nothing
+    BASICREGISTRATION_API virtual void starting() throw ( ::fwTools::Failed );
+
+    /// Do nothing
+    BASICREGISTRATION_API virtual void stopping() throw ( ::fwTools::Failed );
+
+    /// Perform the registration
+    BASICREGISTRATION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Do nothing
+    BASICREGISTRATION_API virtual void swapping() throw ( ::fwTools::Failed );
+
+    /// Key source point list
+    std::string m_registeredPointsKey;
+
+    /// Key dest point list
+    std::string m_referencePointsKey;
+
+    /// Key for computed registration matrix
+    std::string m_matrixKey;
+};
+
+
+
+} // namespace basicRegistration
+
+#endif /*__BASICREGISTRATION_SPOINTLISTREGISTRATION_HPP__*/
diff --git a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/STransformMesh.hpp b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/STransformMesh.hpp
new file mode 100644
index 0000000..fe0984b
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/STransformMesh.hpp
@@ -0,0 +1,53 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __BASICREGISTRATION_STRANSFORMMESH_HPP__
+#define __BASICREGISTRATION_STRANSFORMMESH_HPP__
+
+#include <fwServices/IController.hpp>
+
+#include "basicRegistration/config.hpp"
+
+namespace basicRegistration
+{
+
+class BASICREGISTRATION_CLASS_API STransformMesh : public ::fwServices::IController
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (STransformMesh)(::fwServices::IController) );
+
+
+    BASICREGISTRATION_API STransformMesh();
+
+    BASICREGISTRATION_API virtual ~STransformMesh();
+
+protected:
+
+    BASICREGISTRATION_API virtual void configuring() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void starting() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void stopping() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void updating() throw ( ::fwTools::Failed );
+
+    /// Overrides
+    BASICREGISTRATION_API virtual void swapping() throw ( ::fwTools::Failed );
+
+
+};
+
+
+
+} // namespace basicRegistration
+
+#endif /*__BASICREGISTRATION_STRANSFORMMESH_HPP__*/
+
diff --git a/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/namespace.hpp b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/namespace.hpp
new file mode 100644
index 0000000..9a40b20
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/include/basicRegistration/namespace.hpp
@@ -0,0 +1,21 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __BASICREGISTRATION_NAMESPACE_HPP__
+#define __BASICREGISTRATION_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace basicRegistration contains services to perfom a basic registration between images and meshes.
+ * @namespace basicRegistration
+ **/
+
+namespace basicRegistration
+{
+
+} // namespace basicRegistration
+
+#endif //__BASICREGISTRATION_NAMESPACE_HPP__
+
diff --git a/Bundles/LeafRegistration/basicRegistration/rc/plugin.xml b/Bundles/LeafRegistration/basicRegistration/rc/plugin.xml
new file mode 100644
index 0000000..2769a3c
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/rc/plugin.xml
@@ -0,0 +1,23 @@
+<plugin id="basicRegistration" class="::basicRegistration::Plugin" version="@DASH_VERSION@" >
+    
+    <library name="basicRegistration" />
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::basicRegistration::SPointListRegistration</service>
+        <object>::fwData::Composite</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::basicRegistration::STransformMesh</service>
+        <object>::fwData::Composite</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::basicRegistration::SImagesSubstract</service>
+        <object>::fwData::Composite</object>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/Plugin.cpp b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/Plugin.cpp
new file mode 100644
index 0000000..50e1522
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/Plugin.cpp
@@ -0,0 +1,38 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+
+#include "basicRegistration/Plugin.hpp"
+
+namespace basicRegistration
+{
+
+//-----------------------------------------------------------------------------
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::basicRegistration::Plugin");
+
+//-----------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::start() throw( ::fwRuntime::RuntimeException )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace basicRegistration
diff --git a/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/SImagesSubstract.cpp b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/SImagesSubstract.cpp
new file mode 100644
index 0000000..bd4016f
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/SImagesSubstract.cpp
@@ -0,0 +1,178 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <QVBoxLayout>
+#include <QPushButton>
+
+#include <fwItkIO/itk.hpp>
+
+#include <fwCore/spyLog.hpp>
+
+// Service associated data
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Image.hpp>
+
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/helper/Composite.hpp>
+
+
+#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+// Services tools
+#include <fwServices/macros.hpp>
+
+#include "basicRegistration/SImagesSubstract.hpp"
+
+#include <itkSubtractImageFilter.h>
+
+#ifndef M_PI
+#define M_PI           3.14159265358979323846
+#endif
+
+using fwTools::fwID;
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::basicRegistration::SImagesSubstract, ::fwData::Composite );
+
+
+namespace basicRegistration
+{
+
+SImagesSubstract::SImagesSubstract() throw()
+    : ::gui::editor::IEditor(),
+      mpComputeButton(0)
+{
+
+}
+
+SImagesSubstract::~SImagesSubstract() throw()
+{
+}
+
+void SImagesSubstract::configuring() throw ( ::fwTools::Failed )
+{
+    this->initialize();
+}
+
+void SImagesSubstract::starting() throw ( ::fwTools::Failed )
+{
+    this->create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
+
+    QVBoxLayout* layout = new QVBoxLayout(container);
+    mpComputeButton = new QPushButton(tr("Compute"), container );
+    QObject::connect(mpComputeButton, SIGNAL(clicked( )), this, SLOT(OnCompute()));
+
+    layout->addWidget(mpComputeButton, 0);
+    container->setLayout( layout );
+}
+
+void SImagesSubstract::stopping() throw ( ::fwTools::Failed )
+{
+    QObject::disconnect(mpComputeButton, SIGNAL(clicked( )), this, SLOT(OnCompute()));
+    this->getContainer()->clean();
+    this->destroy();
+
+}
+
+void SImagesSubstract::updating() throw ( ::fwTools::Failed )
+{
+    ::fwTools::Type REQUESTED_TYPE = ::fwTools::Type::create("int16");
+
+    const std::string image1Name("image1");
+    const std::string image2Name("image2");
+    const std::string imageResultName("imageResult");
+
+    ::fwData::Composite::sptr compositeVisu = this->getObject< ::fwData::Composite >();
+    ::fwData::Image::sptr image1            = ::fwData::Image::dynamicCast(::fwTools::fwID::getObject(image1Name));
+    ::fwData::Image::sptr image2            = ::fwData::Image::dynamicCast(::fwTools::fwID::getObject(image2Name));
+    ::fwData::Image::sptr imageResult       = ::fwData::Image::New();
+
+    OSLM_ASSERT("The object " << image1Name << " is not an image", image1);
+    OSLM_ASSERT("The object " << image2Name << " is not an image", image2);
+
+    // Test if the both images have the same type and it is signed short.
+    bool isSameType =
+        ( ((image1->getDataArray())->getType() == (image1->getDataArray())->getType())&&
+          ((image1->getDataArray())->getType() == REQUESTED_TYPE));
+
+    if(isSameType)
+    {
+        // test if the both images have the same size.
+        bool isSameSize = (image1->getSize() == image2->getSize());
+        if(isSameSize)
+        {
+            typedef itk::Image< ::boost::int16_t, 3 > ImageType;
+
+            ImageType::Pointer itkImage1 = ::fwItkIO::itkImageFactory< ImageType >( image1 );
+            SLM_ASSERT("Unable to convert fwData::Image to itkImage", itkImage1);
+
+            ImageType::Pointer itkImage2 = ::fwItkIO::itkImageFactory< ImageType >( image2 );
+            SLM_ASSERT("Unable to convert fwData::Image to itkImage", itkImage2);
+
+            ImageType::Pointer output;
+
+            //Create filter
+            typedef ::itk::SubtractImageFilter< ImageType, ImageType, ImageType > SubtractImageFilterType;
+            SubtractImageFilterType::Pointer filter;
+            filter = SubtractImageFilterType::New();
+            assert(filter);
+
+            filter->SetInput1( itkImage1 );
+            filter->SetInput2( itkImage2 );
+            filter->Update();
+            output = filter->GetOutput();
+            assert(output->GetSource());
+            ::fwItkIO::dataImageFactory< ImageType >( output, imageResult, true );
+
+            ::fwDataTools::helper::Composite compositeHelper(compositeVisu);
+            if ( compositeVisu->find(imageResultName) != compositeVisu->end() )
+            {
+                compositeHelper.swap(imageResultName, imageResult);
+            }
+            else
+            {
+                compositeHelper.add(imageResultName, imageResult);
+            }
+            compositeHelper.notify();
+        }
+        else
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
+                                                              "Both images must have the same size.",
+                                                              ::fwGui::dialog::IMessageDialog::WARNING);
+        }
+    }
+    else
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Warning",
+                                                          "Both Images must have signed short as type.",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+}
+
+void SImagesSubstract::swapping() throw ( ::fwTools::Failed )
+{
+    // Classic default approach to update service when oject change
+//    this->stopping();
+//    this->starting();
+    this->updating();
+
+}
+
+void SImagesSubstract::OnCompute()
+{
+    this->updating();
+}
+
+} // namespace basicRegistration
+
+
diff --git a/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/SPointListRegistration.cpp b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/SPointListRegistration.cpp
new file mode 100644
index 0000000..6ae329b
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/SPointListRegistration.cpp
@@ -0,0 +1,181 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "basicRegistration/SPointListRegistration.hpp"
+
+#include <fwCom/Signal.hxx>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <vtkLandmarkTransform.h>
+#include <vtkMatrix4x4.h>
+#include <vtkPoints.h>
+#include <vtkSmartPointer.h>
+
+
+fwServicesRegisterMacro( ::fwServices::IController, ::basicRegistration::SPointListRegistration, ::fwData::Composite );
+
+
+namespace basicRegistration
+{
+
+SPointListRegistration::SPointListRegistration()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+SPointListRegistration::~SPointListRegistration()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void SPointListRegistration::configuring() throw ( ::fwTools::Failed )
+{
+    if(!this->isVersion2())
+    {
+        m_registeredPointsKey = m_configuration->findConfigurationElement("registeredPoints")->getAttributeValue(
+            "compositeKey");
+        m_referencePointsKey = m_configuration->findConfigurationElement("referencePoints")->getAttributeValue(
+            "compositeKey");
+        m_matrixKey = m_configuration->findConfigurationElement("matrix")->getAttributeValue("compositeKey");
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+void SPointListRegistration::starting() throw ( ::fwTools::Failed )
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void SPointListRegistration::stopping() throw ( ::fwTools::Failed )
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void SPointListRegistration::updating() throw ( ::fwTools::Failed )
+{
+    ::fwData::PointList::sptr registeredPL;
+    ::fwData::PointList::sptr referencePL;
+    ::fwData::TransformationMatrix3D::sptr matrix;
+
+    // Get fw4spl data
+    if(this->isVersion2())
+    {
+        registeredPL = this->getInOut< ::fwData::PointList >("registeredPL");
+        referencePL  = this->getInOut< ::fwData::PointList >("referencePL");
+        matrix       = this->getInOut< ::fwData::TransformationMatrix3D >("output");
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        registeredPL                        = ::fwData::PointList::dynamicCast( (*composite)[ m_registeredPointsKey ] );
+        referencePL                         = ::fwData::PointList::dynamicCast( (*composite)[ m_referencePointsKey ] );
+        matrix                              =
+            ::fwData::TransformationMatrix3D::dynamicCast( (*composite)[ m_matrixKey ] );
+    }
+
+
+    if( registeredPL->getPoints().size() >= 3 &&
+        registeredPL->getPoints().size() == referencePL->getPoints().size() )
+    {
+        vtkSmartPointer<vtkLandmarkTransform> landmarkTransform = vtkSmartPointer<vtkLandmarkTransform>::New();
+
+        vtkPoints* sourcePts = vtkPoints::New();
+        vtkPoints* targetPts = vtkPoints::New();
+
+        // Match each point in both list according to the label
+        for( ::fwData::Point::sptr pointRef : referencePL->getPoints() )
+        {
+            const std::string& labelRef =
+                pointRef->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId )->value();
+
+            for( ::fwData::Point::sptr pointReg : registeredPL->getPoints() )
+            {
+                const std::string& labelReg =
+                    pointReg->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId )->value();
+
+                if(labelRef == labelReg)
+                {
+                    auto coord = pointRef->getRefCoord();
+                    sourcePts->InsertNextPoint(coord[0], coord[1], coord[2]);
+
+                    OSLM_ERROR("referencePL : " << pointRef->getField< ::fwData::String >(
+                                   ::fwDataTools::fieldHelper::Image::m_labelId )->value() );
+                    OSLM_ERROR(
+                        "referencePL : " << pointRef->getCoord()[0] << " " << pointRef->getCoord()[1] << " " <<
+                        pointRef->getCoord()[2] );
+
+                    coord = pointReg->getRefCoord();
+                    targetPts->InsertNextPoint(coord[0], coord[1], coord[2]);
+                    OSLM_ERROR("registeredPL : " << pointReg->getField< ::fwData::String >(
+                                   ::fwDataTools::fieldHelper::Image::m_labelId )->value() );
+                    OSLM_ERROR(
+                        "registeredPL : " << pointReg->getCoord()[0] << " " << pointReg->getCoord()[1] << " " <<
+                        pointReg->getCoord()[2] );
+                }
+            }
+        }
+
+        landmarkTransform->SetSourceLandmarks(sourcePts);
+        landmarkTransform->SetTargetLandmarks(targetPts);
+        landmarkTransform->SetModeToRigidBody();
+        landmarkTransform->Update();
+
+        // Get the resulting transformation matrix (this matrix takes the source points to the target points)
+        vtkSmartPointer<vtkMatrix4x4> m = landmarkTransform->GetMatrix();
+        m->Invert();
+        for(size_t l = 0; l < 4; ++l)
+        {
+            for(size_t c = 0; c < 4; ++c)
+            {
+                matrix->setCoefficient(l, c, m->GetElement(l,c));
+            }
+        }
+
+        // Notify Matrix modified
+        auto sig = matrix->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
+    }
+    else
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Error",
+                                                          "You must enter 2 or more points for the registration to work.",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+void SPointListRegistration::swapping() throw ( ::fwTools::Failed )
+{
+    // Classic default approach to update service when object change
+    this->stopping();
+    this->starting();
+}
+
+// ----------------------------------------------------------------------------
+
+} // namespace basicRegistration
+
+
diff --git a/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/STransformMesh.cpp b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/STransformMesh.cpp
new file mode 100644
index 0000000..b625307
--- /dev/null
+++ b/Bundles/LeafRegistration/basicRegistration/src/basicRegistration/STransformMesh.cpp
@@ -0,0 +1,100 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "basicRegistration/STransformMesh.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/spyLog.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+
+#include <fwDataTools/Mesh.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwServices/macros.hpp>
+
+#ifndef M_PI
+#define M_PI           3.14159265358979323846
+#endif
+
+using fwTools::fwID;
+
+fwServicesRegisterMacro( ::fwServices::IController, ::basicRegistration::STransformMesh, ::fwData::Composite );
+
+
+namespace basicRegistration
+{
+
+STransformMesh::STransformMesh()
+{
+}
+
+STransformMesh::~STransformMesh()
+{
+}
+
+void STransformMesh::configuring() throw ( ::fwTools::Failed )
+{
+}
+
+void STransformMesh::starting() throw ( ::fwTools::Failed )
+{
+}
+
+void STransformMesh::stopping() throw ( ::fwTools::Failed )
+{
+}
+
+void STransformMesh::updating() throw ( ::fwTools::Failed )
+{
+    // Get fw4spl data
+    ::fwData::TransformationMatrix3D::sptr transform = ::fwData::TransformationMatrix3D::New();
+
+    double angle    = 10;
+    double angleRad = angle*M_PI/180.0;
+
+    double cosAngle = cos(angleRad);
+    double sinAngle = sin(angleRad);
+
+    transform->setCoefficient(0,0, cosAngle); transform->setCoefficient(0,1, -sinAngle); transform->setCoefficient(0,2,
+                                                                                                                   0);
+    transform->setCoefficient(0,3, 0);
+    transform->setCoefficient(1,0, sinAngle); transform->setCoefficient(1,1, cosAngle);  transform->setCoefficient(1,2,
+                                                                                                                   0);
+    transform->setCoefficient(1,2, 0);
+    transform->setCoefficient(2,0, 0);        transform->setCoefficient(2,1, 0);         transform->setCoefficient(2,2,
+                                                                                                                   1);
+    transform->setCoefficient(2,3, 10);
+    transform->setCoefficient(3,0, 0);        transform->setCoefficient(3,1, 0);         transform->setCoefficient(3,2,
+                                                                                                                   0);
+    transform->setCoefficient(3,3, 1);
+
+    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast( ::fwTools::fwID::getObject("myToolMesh") );
+    ::fwDataTools::Mesh::transform( mesh, transform );
+
+    // Notify reading
+    ::fwData::Mesh::VertexModifiedSignalType::sptr sig;
+    sig = mesh->signal< ::fwData::Mesh::VertexModifiedSignalType >(::fwData::Mesh::s_VERTEX_MODIFIED_SIG);
+    sig->asyncEmit();
+}
+
+void STransformMesh::swapping() throw ( ::fwTools::Failed )
+{
+    // Classic default approach to update service when oject change
+    this->stopping();
+    this->starting();
+}
+
+} // namespace basicRegistration
+
+
diff --git a/Bundles/LeafUI/guiQt/CMakeLists.txt b/Bundles/LeafUI/guiQt/CMakeLists.txt
index 623c136..2a8b9d4 100644
--- a/Bundles/LeafUI/guiQt/CMakeLists.txt
+++ b/Bundles/LeafUI/guiQt/CMakeLists.txt
@@ -1,24 +1,22 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwActivities
-    fwGuiQt
-    fwRuntime
-    fwServices
-    fwTools
 
-    gui
-)
-
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Boost COMPONENTS Regex REQUIRED)
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
-fwLink(${QT_LIBRARIES})
+    ${Boost_REGEX_INCLUDE_DIRS}
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+       ${Boost_REGEX_LIBRARY}
+       ${Qt5Core_LIBRARIES}
+       ${Qt5Gui_LIBRARIES}
+       ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/guiQt/COPYING b/Bundles/LeafUI/guiQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/guiQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/guiQt/COPYING.LESSER b/Bundles/LeafUI/guiQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/guiQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/guiQt/Properties.cmake b/Bundles/LeafUI/guiQt/Properties.cmake
index 19dda25..8c669a6 100644
--- a/Bundles/LeafUI/guiQt/Properties.cmake
+++ b/Bundles/LeafUI/guiQt/Properties.cmake
@@ -2,6 +2,24 @@
 set( NAME guiQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwActivities fwComEd fwCore fwData fwDataCamp fwGui fwGuiQt fwRuntime fwServices fwTools gui )
+set( START ON )
+set( DEPENDENCIES
+    fwActivities
+    fwCom
+    fwCore
+    fwData
+    fwDataCamp
+    fwDataTools
+    fwMedData
+    fwGui
+    fwGuiQt
+    fwRuntime
+    fwServices
+    fwTools
+    gui
+)
 set( REQUIREMENTS  )
-
+set( PLUGINS
+    platforms
+    imageformats
+)
diff --git a/Bundles/LeafUI/guiQt/bin/build.options b/Bundles/LeafUI/guiQt/bin/build.options
deleted file mode 100644
index b62da35..0000000
--- a/Bundles/LeafUI/guiQt/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwActivities_0-1',
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          'fwGuiQt_0-1',
-          'fwDataCamp_0-1',
-          ]
-USE     = ['qtCore','boost']
-BUNDLES = ['gui_0-1']
-
-
-
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp b/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp
index 95f70d6..13727e4 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef GUIQTNAMESPACE_HPP_
-#define GUIQTNAMESPACE_HPP_
+#ifndef __GUIQT_NAMESPACE_HPP__
+#define __GUIQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace guiQt contains the basic services to build the application IHM with Qt.
  * @namespace   guiQt
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace guiQt
 {
 
 }
-#endif /* GUIQTNAMESPACE_HPP_ */
+#endif /* __GUIQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/Plugin.hpp b/Bundles/LeafUI/guiQt/include/guiQt/Plugin.hpp
index b25edfe..940016d 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/Plugin.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/Plugin.hpp
@@ -1,27 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUIQT_PLUGIN_HPP_
-#define _GUIQT_PLUGIN_HPP_
+#ifndef __GUIQT_PLUGIN_HPP__
+#define __GUIQT_PLUGIN_HPP__
+
+#include "guiQt/config.hpp"
 
 #include <fwRuntime/Plugin.hpp>
 
-#include "guiQt/config.hpp"
 
 namespace fwThread
 {
-    class Worker;
+class Worker;
 } //namespace fwThread
 
 
 namespace guiQt
 {
 /**
- * 
- * @date    2009-2010.
+ * @brief   This class is called when the guiQt bundle is loaded.
+ * @class   Plugin
  */
 class GUIQT_CLASS_API Plugin : public ::fwRuntime::Plugin
 {
@@ -54,4 +55,4 @@ private:
 
 } // namespace guiQt
 
-#endif //_GUIQT_PLUGIN_HPP_
+#endif //__GUIQT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/config.hpp b/Bundles/LeafUI/guiQt/include/guiQt/config.hpp
deleted file mode 100644
index 3debe16..0000000
--- a/Bundles/LeafUI/guiQt/include/guiQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUIQT_CONFIG_HPP_
-#define _GUIQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef GUIQT_EXPORTS
-    #define GUIQT_API __declspec(dllexport)
-    #else
-    #define GUIQT_API __declspec(dllimport)
-    #endif
-
-    #define GUIQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef GUIQT_EXPORTS
-    #define GUIQT_API __attribute__ ((visibility("default")))
-    #define GUIQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define GUIQT_API __attribute__ ((visibility("hidden")))
-    #define GUIQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define GUIQT_API
-    #define GUIQT_CLASS_API
-
-#endif
-
-#endif //_GUIQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/Code.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/Code.hpp
index 05b89ef..bcf97c2 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/editor/Code.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/Code.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUIQT_EDITOR_CODE_HPP_
-#define _GUIQT_EDITOR_CODE_HPP_
+#ifndef __GUIQT_EDITOR_CODE_HPP__
+#define __GUIQT_EDITOR_CODE_HPP__
 
 #include <QPointer>
 #include <QObject>
@@ -27,22 +27,41 @@ namespace editor
 
 /**
  * @class   Code
- * @brief   Code Editor working on a ::fwData::String
- * 
- * @date    2010.
+ * @brief   This service displays a code editor and works on a ::fwData::String.
+ *
+ * It provides highlighting for python and C++.
+ *
+ * XML Configuration
+ *  @code{.xml}
+    <service uid="codeEditor" type="::gui::editor::IEditor" impl="::guiQt::editor::Code" autoConnect="yes">
+        <config>
+            <language name="Python" />
+        </config>
+    </service>
+    @endcode
+ * - \b language name can be "Python" or "Cpp"
  */
-class GUIQT_CLASS_API Code : public QObject,public ::gui::editor::IEditor
+class GUIQT_CLASS_API Code : public QObject,
+                             public ::gui::editor::IEditor
 {
-    Q_OBJECT
-public :
+Q_OBJECT
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Code)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Code)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    GUIQT_API Code() throw() ;
+    GUIQT_API Code() throw();
 
     /// Destructor. Do nothing.
-    GUIQT_API virtual ~Code() throw() ;
+    GUIQT_API virtual ~Code() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Object::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    GUIQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -53,20 +72,17 @@ protected:
     /// Destroy the layout
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Management of observations ( overrides ). Update the value from the String object.
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
     /// Update the value from the String object.
     virtual void updating() throw(::fwTools::Failed);
 
     /// Update the value from the String object.
     virtual void swapping() throw(::fwTools::Failed);
 
-    /// Do nothing.
+    /// Parses the configuration
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 protected:
     static const std::string PYTHON;
@@ -81,7 +97,7 @@ protected Q_SLOTS:
     void onModifyValue();
 
 private:
-    std::string                    m_language;
+    std::string m_language;
     QPointer< QTextEdit >          m_valueCtrl;
     QPointer< QSyntaxHighlighter > m_highlighter;
 };
@@ -90,6 +106,4 @@ private:
 
 } // namespace guiQt
 
-#endif /*_GUIQT_EDITOR_CODE_HPP_*/
-
-
+#endif /*__GUIQT_EDITOR_CODE_HPP__*/
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/DummyEditor.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/DummyEditor.hpp
index 0200d2a..20238ee 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/editor/DummyEditor.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/DummyEditor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUIQT_EDITOR_DUMMYIEDITOR_HPP_
-#define _GUIQT_EDITOR_DUMMYIEDITOR_HPP_
+#ifndef __GUIQT_EDITOR_DUMMYEDITOR_HPP__
+#define __GUIQT_EDITOR_DUMMYEDITOR_HPP__
 
 #include <QPointer>
 #include <QLabel>
@@ -26,25 +26,22 @@ namespace editor
 /**
  * @brief   Defines the service interface managing the basic editor service for object. Do nothing.
  * @class   DummyEditor
- * 
-
- * @date    2009.
  *
  * @todo ACH: This class has been created in order to build test application. Do we remove it now ??
  */
 class GUIQT_CLASS_API DummyEditor : public ::gui::editor::IEditor
 {
 
-public :
+public:
 
 
-    fwCoreServiceClassDefinitionsMacro ( (DummyEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (DummyEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    GUIQT_API DummyEditor() throw() ;
+    GUIQT_API DummyEditor() throw();
 
     /// Destructor. Do nothing.
-    GUIQT_API virtual ~DummyEditor() throw() ;
+    GUIQT_API virtual ~DummyEditor() throw();
 
 protected:
 
@@ -54,7 +51,7 @@ protected:
     /**
      * @brief This method launches the IEditor::starting method.
      */
-    GUIQT_API virtual void starting() throw( ::fwTools::Failed ) ;
+    GUIQT_API virtual void starting() throw( ::fwTools::Failed );
 
     /**
      * @brief This method launches the IEditor::stopping method.
@@ -62,18 +59,13 @@ protected:
     GUIQT_API virtual void stopping() throw( ::fwTools::Failed );
 
     /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUIQT_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) ;
-
-    /**
      * @brief This method is used to update services. Do nothing.
      */
     GUIQT_API virtual void updating() throw(::fwTools::Failed);
 
     /**
      * @brief This method is used to configure the class parameters. Do nothing.
-    */
+     */
     GUIQT_API virtual void configuring() throw( ::fwTools::Failed );
 
     /**
@@ -95,6 +87,6 @@ private:
 }
 }
 
-#endif /*_GUIQT_EDITOR_DUMMYIEDITOR_HPP_*/
+#endif /*__GUIQT_EDITOR_DUMMYEDITOR_HPP__*/
 
 
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/DynamicView.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/DynamicView.hpp
index fbd2285..66f8121 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/editor/DynamicView.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/DynamicView.hpp
@@ -1,28 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUIQT_EDITOR_DYNAMICVIEW_HPP_
-#define _GUIQT_EDITOR_DYNAMICVIEW_HPP_
+#ifndef __GUIQT_EDITOR_DYNAMICVIEW_HPP__
+#define __GUIQT_EDITOR_DYNAMICVIEW_HPP__
 
-#include <map>
-#include <set>
+#include "guiQt/config.hpp"
 
-#include <QObject>
-#include <QPointer>
+#include <fwActivities/registry/Activities.hpp>
+#include <fwActivities/registry/ActivityMsg.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwServices/IAppConfigManager.hpp>
 
 #include <fwTools/Failed.hpp>
 
 #include <gui/view/IView.hpp>
 
-#include <fwServices/AppConfigManager.hpp>
-#include <fwGuiQt/container/QtContainer.hpp>
-
-#include <fwActivities/registry/Activities.hpp>
+#include <QObject>
+#include <QPointer>
 
-#include "guiQt/config.hpp"
+#include <map>
+#include <set>
 
 
 class QTabWidget;
@@ -42,7 +44,9 @@ struct AppConfig
     typedef ::fwActivities::registry::ActivityAppConfigParam ParameterType;
     typedef std::vector< ParameterType > ParametersType;
 
-    AppConfig(){};
+    AppConfig()
+    {
+    }
     AppConfig(const ConfigType &config);
 
     std::string id;
@@ -54,26 +58,64 @@ struct AppConfig
 
 
 /**
- * @class   DynamicView
- * @brief   This editor manages tabs. It receive message with NEW_CONFIGURATION_HELPER event containing the view config id.
+ * @brief   This editor manages tabs containing sub-configurations.
+ *
+ * It receives signals with ::fwActivities::registry::ActivityMsg containing the view information (config Id,
+ * parameters, ...).
+ *
+ * It is usually used with the ::activities::action::SActivityLauncher action. This action sends the signals containing
+ * the view information.
+ *
+ * In our applications, we mostly use the Series selector as main configuration. The main configuration is launched in
+ * the first tab and is not closable.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+   <service type="::gui::view::IView" impl="::guiQt::editor::DynamicView" autoConnect="yes" >
+       <config dynamicConfigStartStop="false">
+           <appConfig id="Visu2DID" title="Visu2D" >
+               <parameters>
+                   <parameter replace="SERIESDB" by="medicalData"  />
+                   <parameter replace="IMAGE" by="@values.image"  />
+               </parameters>
+           </appConfig>
+       </config>
+   </service>
+   @endcode
+ * - \b appConfig: information needed to launch the main sub-configuration. This configuration is launched in the
+ *      first tab, it can not be closed by the user.
+ *   - \b id: config identifier
+ *   - \b title: title of the created tab
+ *   - \b parameters: list of the parameters needed to launch the configuration.
+ *     - \b replace: name of the parameter as defined in the AppConfig
+ *     - \b by: defines the string that will replace the parameter name. It should be a simple string (ex. frontal)
+ *       or define a sesh@ path (ex. \@values.myImage). The root object of the sesh@ path is this service object.
+ *
+ * @section Slot Slot
+ * - \b createTab( ::fwActivities::registry::ActivityMsg ): This slot allows to create a tab with the given activity
+ *   information.
  *
- * @date    2010.
+ * @deprecated
+ * This service will be replaced by the ::guiQt::editor::SDynamicView.
+ * The usage is similar, the main difference is that the SDinamicView service only manage Activities.
+ * In the configuration, you must replace the 'appConfig' tag by a 'mainActivity' tag, and create a simple Activity that
+ * launchs your appConfig.
  *
- * @note The ::activities::action::SActivityLauncher action sends message to be receive by the editor.
  */
-class GUIQT_CLASS_API DynamicView : public QObject, public ::gui::view::IView
+class GUIQT_CLASS_API DynamicView : public QObject,
+                                    public ::gui::view::IView
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (DynamicView)(::gui::view::IView) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (DynamicView)(::gui::view::IView) );
 
     /// Constructor. Do nothing.
-    GUIQT_API DynamicView() throw() ;
+    GUIQT_API DynamicView() throw();
 
     /// Destructor. Do nothing.
-    GUIQT_API virtual ~DynamicView() throw() ;
+    GUIQT_API virtual ~DynamicView() throw();
 
 protected:
 
@@ -88,12 +130,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /**
-     * @brief Analyses received message with NEW_CONFIGURATION_HELPER helper.
-     * Creates the view defines by the config given in message.
-     */
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
-    /**
      * @brief Update
      *
      */
@@ -107,31 +143,19 @@ protected:
     virtual void swapping() throw(::fwTools::Failed);
 
     /**
-    * @brief Configure the view
-    * @see fwGui::IGuiContainerSrv::initialize()
-    *
-    * @verbatim
-    <service type="::gui::view::IView" impl="::guiQt::editor::DynamicView" autoConnect="yes" >
-        <config dynamicConfigStartStop="false">
-            <appConfig id="Visu2DID" title="Visu2D" >
-                <parameters>
-                    <parameter replace="SERIESDB" by="medicalData"  />
-                    <parameter replace="IMAGE" by="@values.image"  />
-                </parameters>
-            </appConfig>
-        </config>
-    </service>
-    @endverbatim
-    */
+     * @brief Configure the view
+     * @see fwGui::IGuiContainerSrv::initialize()
+     */
     virtual void configuring() throw(fwTools::Failed);
 
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 
+    typedef std::map< std::string, std::string> ReplaceMapType;
     struct DynamicViewInfo
     {
-        ::fwGuiQt::container::QtContainer::sptr   container;
-        ::fwServices::AppConfigManager::sptr helper;
+        ::fwGuiQt::container::QtContainer::sptr container;
+        ::fwServices::IAppConfigManager::sptr helper;
         std::string wid;
         std::string title;
         bool closable;
@@ -139,16 +163,19 @@ protected:
         std::string tooltip;
         std::string tabID;
         std::string viewConfigID;
-        SPTR(::fwData::Composite) replaceMap;
+        ReplaceMapType replaceMap;
     };
 
-    typedef std::map< QWidget* , DynamicViewInfo > DynamicViewInfoMapType;
+    typedef std::map< QWidget*, DynamicViewInfo > DynamicViewInfoMapType;
 
     /**
      * @brief Launch tab
      */
     void launchTab(DynamicViewInfo& info);
 
+    /// Slot: launch a new tab according to the receiving msg
+    void createTab(::fwActivities::registry::ActivityMsg info);
+
     /**
      * @brief Build a DynamicViewInfo from an AppConfig
      */
@@ -178,6 +205,4 @@ protected Q_SLOTS:
 }//namespace editor
 } // guiQt
 
-#endif /*_GUIQT_EDITOR_DYNAMICVIEW_HPP_*/
-
-
+#endif /*__GUIQT_EDITOR_DYNAMICVIEW_HPP__*/
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/Namespace.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/Namespace.hpp
index d5604c0..f4153ce 100644
--- a/Bundles/LeafUI/guiQt/include/guiQt/editor/Namespace.hpp
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef GUIQT_EDITOR_NAMESPACE_HPP_
-#define GUIQT_EDITOR_NAMESPACE_HPP_
+#ifndef __GUIQT_EDITOR_NAMESPACE_HPP__
+#define __GUIQT_EDITOR_NAMESPACE_HPP__
 
 namespace guiQt
 {
 /**
  * @brief       The namespace guiQt::editor contains a basic editor written with Qt.
  * @namespace   guiQt::editor
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace editor
 
 }
 }
-#endif /* GUIQT_EDITOR_NAMESPACE_HPP_ */
+#endif /* __GUIQT_EDITOR_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/SDynamicView.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/SDynamicView.hpp
new file mode 100644
index 0000000..e58e8f1
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/SDynamicView.hpp
@@ -0,0 +1,238 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUIQT_EDITOR_SDYNAMICVIEW_HPP__
+#define __GUIQT_EDITOR_SDYNAMICVIEW_HPP__
+
+#include "guiQt/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwActivities/registry/Activities.hpp>
+#include <fwActivities/registry/ActivityMsg.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+#include <fwServices/IAppConfigManager.hpp>
+
+#include <fwTools/Failed.hpp>
+
+#include <gui/view/IView.hpp>
+
+#include <QObject>
+#include <QPointer>
+
+#include <map>
+#include <set>
+
+
+class QTabWidget;
+namespace fwData
+{
+class Composite;
+}
+namespace guiQt
+{
+namespace editor
+{
+
+
+/**
+ * @brief   This editor manages tabs containing activities.
+ *
+ * This service should received signals containing ActivitySeries connected to the slot \b launchActivity. It will
+ * launch the activity in a new tab.
+ *
+ * @note The same activitySeries cannot be launch in two different tabs.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+   <service type="::gui::view::IView" impl="::guiQt::editor::SDynamicView" autoConnect="yes" >
+     <mainActivity id="SDBActivity" closable="false" />
+     <parameters>
+         <parameter replace="SERIESDB" by="medicalData"  />
+         <parameter replace="ICON_PATH" by="@BUNDLE_PREFIX@/media_0-1/icons/app.ico"  />
+     </parameters>
+   </service>
+   @endcode
+ * - \b mainActivity (optional): information about the main activity (first tab). The activity series will be generated.
+ *   This activity must not have requirement.
+ *   - \b id : identifier of the activity
+ *   - \b closable (optional, default 'no') : defines if the user can close this tab.
+ * - \b parameters (optional) : additional parameters used to launch the activities
+ *    - \b parameter: defines a parameter
+ *        - \b replace: name of the parameter as defined in the AppConfig
+ *        - \b by: defines the string that will replace the parameter name. It should be a simple string (ex.
+ *          frontal) or define a camp path (ex. \@values.myImage). The root object of the sesh@ path if the
+ *          composite contained in the ActivitySeries.
+ *
+ * @section Slots Slots
+ * - \b launchActivity( ::fwMedData::ActivitySeries::sptr ): This slot allows to create a tab with the given activity
+ *   series.
+ * - \b launchActivitySeries( ::fwMedData::Series::sptr ): This slot allows to create a tab with the given activity
+ *   series.
+ * - \b createTab( ::fwActivities::registry::ActivityMsg ): This slot allows to create a tab with the given activity
+ *   information.
+ *
+ * @section Signal Signal
+ * - \b activitySelected( ::fwData::object::sptr ): this signal is emitted when the current tab selection
+ *   changed, it contains the associated ActivitySeries. The activity series is send as a ::fwData::Object in order to
+ *   connect this signal to slots receiving a ::fwData::Object.
+ */
+class GUIQT_CLASS_API SDynamicView : public QObject,
+                                     public ::gui::view::IView
+{
+Q_OBJECT
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDynamicView)(::gui::view::IView) );
+
+    /// Constructor. Do nothing.
+    GUIQT_API SDynamicView() throw();
+
+    /// Destructor. Do nothing.
+
+    GUIQT_API virtual ~SDynamicView() throw();
+
+    typedef ::fwCom::Signal< void ( ::fwData::Object::sptr ) > ActivitySelectedSignalType;
+    GUIQT_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_SELECTED_SIG;
+    typedef ::fwCom::Signal< void () > NothingSelectedSignalType;
+    GUIQT_API static const ::fwCom::Signals::SignalKeyType s_NOTHING_SELECTED_SIG;
+protected:
+
+    /**
+     * @brief Install the container.
+     */
+    virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Destroy the container.
+     */
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Update
+     *
+     */
+    virtual void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Swap
+     *
+     * Update the editors.
+     */
+    virtual void swapping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Configure the view
+     * @see fwGui::IGuiContainerSrv::initialize()
+     */
+    virtual void configuring() throw(fwTools::Failed);
+
+    virtual void info( std::ostream &_sstream );
+
+private:
+
+
+    typedef std::set< std::string > ActivityIdType;
+    typedef ::fwActivities::registry::ActivityAppConfig::ActivityAppConfigParamsType ParametersType;
+    typedef ::fwActivities::registry::ActivityAppConfigParam ParameterType;
+    typedef std::map< std::string, std::string> ReplaceMapType;
+
+    struct SDynamicViewInfo
+    {
+        ::fwGuiQt::container::QtContainer::sptr container;
+        ::fwServices::IAppConfigManager::sptr helper;
+        std::string wid;
+        std::string title;
+        bool closable;
+        std::string icon;
+        std::string tooltip;
+        std::string tabID;
+        std::string viewConfigID;
+        ReplaceMapType replaceMap;
+        ::fwMedData::ActivitySeries::sptr activitySeries;
+    };
+
+    typedef std::map< QWidget*, SDynamicViewInfo > SDynamicViewInfoMapType;
+
+    /**
+     * @brief Launch tab
+     */
+    void launchTab(SDynamicViewInfo& info);
+
+    /**
+     * @brief Slot: Launch the given activity in a new tab.
+     * @note The same activity series cannot be launch in two different tabs.
+     */
+    void launchActivity(::fwMedData::ActivitySeries::sptr activitySeries);
+
+    /**
+     * @brief Slot: Launch the given activity in a new tab.
+     * @note The same activity series cannot be launch in two different tabs.
+     */
+    void launchActivitySeries(::fwMedData::Series::sptr series);
+
+    /**
+     * @brief Translate parameters from source object.
+     *
+     * Replace camp path (ex. at values.myParam.image) by the uid of the corresponding object.
+     *
+     * @param[in] sourceObj source object used to find sub-object form camp path
+     * @param[in] parameters list of parameters to translate
+     * @param[out] replaceMap map containing the translated parameter
+     */
+    void translateParameters( ::fwData::Object::sptr sourceObj, const ParametersType& parameters,
+                              ReplaceMapType & replaceMap );
+
+    /// launch a new tab according to the receiving msg
+    void createTab(::fwActivities::registry::ActivityMsg info);
+
+    /// Create the main activitySeries and launch the activity
+    void buildMainActivity();
+
+    /// Create view info from activitySeries
+    SDynamicViewInfo createViewInfo(::fwMedData::ActivitySeries::sptr activitySeries);
+
+
+    std::map< std::string, unsigned int > m_titleToCount;
+    std::set< std::string > m_tabIDList;
+
+    ActivityIdType m_activityIds;
+
+    SDynamicViewInfoMapType m_dynamicInfoMap;
+    bool m_dynamicConfigStartStop;
+
+    ParametersType m_parameters;
+    QPointer<QTabWidget> m_tabWidget;
+    QPointer<QWidget> m_currentWidget;
+
+    ActivitySelectedSignalType::sptr m_sigActivitySelected;
+    NothingSelectedSignalType::sptr m_sigNothingSelected;
+
+    typedef std::pair< std::string, bool > MainActivityInfo;
+    MainActivityInfo m_mainActivityInfo; ///< Store main activityInformation <id, isClosable>
+
+protected Q_SLOTS:
+
+    void closeTab( int index, bool forceClose );
+
+    void closeTabSignal(int index);
+
+    void changedTab(int index);
+
+};
+
+} //namespace editor
+} // guiQt
+
+#endif /*__GUIQT_EDITOR_SDYNAMICVIEW_HPP__*/
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/SParameters.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/SParameters.hpp
new file mode 100644
index 0000000..3f0adac
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/SParameters.hpp
@@ -0,0 +1,170 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUIQT_EDITOR_SPARAMETERS_HPP__
+#define __GUIQT_EDITOR_SPARAMETERS_HPP__
+
+#include "guiQt/config.hpp"
+
+#include <gui/editor/IEditor.hpp>
+
+#include <cstdint>
+
+#include <QGridLayout>
+#include <QObject>
+#include <QPointer>
+#include <QPushButton>
+#include <QSignalMapper>
+
+namespace guiQt
+{
+
+namespace editor
+{
+
+/**
+ * @brief Generic editor to interact with parameters.
+ *
+ * It allows to setup an editor with several parameters.
+ * Once the user validates the parameters, a signal is sent containing the key and the value.
+ * It supports booleans, doubles or integer at the moment.
+ *
+ * @note This service doesn't need any data.
+ *
+ * @section Signals Signals
+ * - \b boolChanged(bool, std::string): Emitted when an boolean parameter changes.
+ * - \b colorChanged(std::array<std::uint8_t, 4>, std::string): Emitted when a color parameter changes.
+ * - \b doubleChanged(double, std::string): Emitted when a real parameter changes.
+ * - \b double2Changed(double, double, std::string): Emitted when two real parameters change.
+ * - \b double3Changed(double, double, double, std::string): Emitted when three real parameters change.
+ * - \b intChanged(int, std::string): Emitted when an integer parameter changes.
+ * - \b int2Changed(int, int, std::string): Emitted when two integer parameters change.
+ * - \b int3Changed(int, int, int, std::string): Emitted when three integer parameters change.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+       <service uid="..." type="::guiQt::editor::SParameters" >
+        <parameters>
+            <param type="bool" name="boolean parameter" key="boolParam" defaultValue="false" />
+            <param type="double" name="real parameter" key="doubleParam" defaultValue="" min="1.5" max="42.42" />
+            <param type="int" name="integer parameter" key="intParam" defaultValue="1" min="0" max="255" />
+        </parameters>
+       </service>
+   @endcode
+ *
+ * @subsection Configuration Configuration:
+ * - \b type: bool, color, double, double2, double3, int, int2, int3.
+ * - \b name: label to display.
+ * - \b key: name used in the signal to identify the parameter.
+ * - \b defaultValue: value used to initialize the parameter.
+ * - \b min: minimum value, if relevant for the data type.
+ * - \b max: maximum value, if relevant for the data type.
+ * - \b widget: choose the type of the widget, if relevant for the data type. Currently the only type that provides
+ * a choice is 'int' : you can choose either "spin" or "slider".
+ */
+class GUIQT_CLASS_API SParameters : public QObject,
+                                    public ::gui::editor::IEditor
+{
+Q_OBJECT
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SParameters)(::gui::editor::IEditor) );
+
+    /// Boolean changed signal type
+    typedef ::fwCom::Signal< void (bool, std::string) > BooleanChangedSignalType;
+
+    /// Color changed signal type
+    typedef ::fwCom::Signal< void (std::array<std::uint8_t, 4>, std::string) > ColorChangedSignalType;
+
+    /// Double changed signal type
+    typedef ::fwCom::Signal< void (double, std::string) > DoubleChangedSignalType;
+    typedef ::fwCom::Signal< void (double, double, std::string) > Double2ChangedSignalType;
+    typedef ::fwCom::Signal< void (double, double, double, std::string) > Double3ChangedSignalType;
+
+    /// Integer changed signal type
+    typedef ::fwCom::Signal< void (int, std::string) > IntegerChangedSignalType;
+    typedef ::fwCom::Signal< void (int, int, std::string) > Integer2ChangedSignalType;
+    typedef ::fwCom::Signal< void (int, int, int, std::string) > Integer3ChangedSignalType;
+
+    /// Constructor. Initializes signals
+    GUIQT_API SParameters() throw ();
+
+    /// Destructor. Does nothing
+    GUIQT_API virtual ~SParameters() throw ();
+
+    /// Configure the editor.
+    GUIQT_API void configuring() throw (::fwTools::Failed);
+
+    /// Initializes Qt input widgets for parameters according to xml configuration
+    GUIQT_API void starting() throw (::fwTools::Failed);
+
+    /// This method launches the IEditor::stopping method
+    GUIQT_API void stopping() throw (::fwTools::Failed);
+
+    /// This method is used to update services. Does nothing
+    GUIQT_API void updating() throw (::fwTools::Failed);
+
+private Q_SLOTS:
+
+    /// This method is called when a boolean value changes
+    void onChangeBoolean(int value);
+
+    /// This method is called when a color button is clicked
+    void onColorButton();
+
+    /// This method is called when an integer value changes
+    void onChangeInteger(int value);
+
+    /// This method is called when an integer value changes
+    void onChangeDouble(double value);
+
+    /// This method is called to connect sliders and their labels
+    void onSliderMapped(QWidget* widget);
+
+    /// This method is called to connect reset buttons and checkboxes
+    void onResetBooleanMapped(QWidget* widget);
+
+    /// This method is called to connect reset buttons and color widgets
+    void onResetColorMapped(QWidget* widget);
+
+    /// This method is called to connect reset buttons and sliders
+    void onResetIntegerMapped(QWidget* widget);
+
+    /// This method is called to connect reset buttons and sliders
+    void onResetDoubleMapped(QWidget* widget);
+
+private:
+
+    /// Snippet to create the reset button
+    QPushButton* createResetButton();
+
+    /// Create the widget associated with a boolean type
+    void createBoolWidget(QGridLayout& layout, int row, const std::string& key, const std::string& defaultValue);
+
+    /// Create the widget associated with a color type
+    void createColorWidget(QGridLayout& layout, int row, const std::string& key, const std::string& defaultValue);
+
+    /// Create the widget associated with a double type
+    void createDoubleWidget(QGridLayout& layout, int row, const std::string& key, double defaultValue,
+                            double min, double max, int count);
+
+    /// Create the slider widget associated with an integer type
+    void createIntegerSliderWidget(QGridLayout& layout, int row, const std::string& key,
+                                   int defaultValue, int min, int max);
+
+    /// Create the spin widget associated with an integer type
+    void createIntegerSpinWidget(QGridLayout& layout, int row, const std::string& key,
+                                 int defaultValue, int min, int max, int count);
+
+    /// Allows to connect sliders and their labels
+    QPointer< QSignalMapper> m_signalMapper;
+    QPointer< QSignalMapper> m_resetMapper;
+};
+
+}   //namespace guiQt
+}   //namespace editor
+
+#endif /* __GUIQT_EDITOR_SPARAMETERS_HPP__ */
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/SSelectionMenuButton.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSelectionMenuButton.hpp
new file mode 100644
index 0000000..08caecf
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSelectionMenuButton.hpp
@@ -0,0 +1,160 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUIQT_EDITOR_SSELECTIONMENUBUTTON_HPP__
+#define __GUIQT_EDITOR_SSELECTIONMENUBUTTON_HPP__
+
+#include "guiQt/config.hpp"
+
+#include <fwTools/Failed.hpp>
+#include <gui/editor/IEditor.hpp>
+#include <QAction>
+
+#include <QObject>
+#include <QPointer>
+
+class QMenu;
+class QActionGroup;
+class QPushButton;
+
+
+namespace guiQt
+{
+
+namespace editor
+{
+
+/**
+ * @brief   This service show a menu button. The user can select one item in the menu.
+ *
+ * When the user select an item, the signal \c selected(int selection) is emitted: it sends the value of the selected
+ * item.
+ *
+ * @note This service doesn’t modify its associated object, so it can work on any type of object.
+ *
+ * @section XML Example of configuration
+ * @code{.xml}
+    <service uid="sliceListNegato3DEditor" type="::gui::editor::IEditor" impl="::uiImage::SSelectionMenuButton">
+        <text>...</text>
+        <toolTip>...</toolTip>
+        <items>
+            <item text="One" value="1" />
+            <item text="Two" value="2" />
+            <item text="Six" value="6" />
+        </items>
+        <selected>2</selected>
+    </service>
+   @endcode
+ *
+ * - \b text (optional, default “>”): text displayed on the button
+ * - \b toolTip (optional): button tool tip
+ * - \b items: list of the menu items
+ * - \b item: one item
+ *    - \b text: the text displayed in the menu
+ *    - \b value: the value emitted when the item is selected
+ * - \b selected: the value of the item selected by default
+ *
+ * @section Signal Signal
+ * - \b selected(int): This signal is emitted when the user select an item. Sends the item value.
+ *
+ * @section Slots Slots
+ * - \b setEnabled(bool): This slots allows to enable/disable the button
+ * - \b enable(): This slot allows to enable the button
+ * - \b disable(): This slots allows to disable the button
+ */
+class GUIQT_CLASS_API SSelectionMenuButton : public QObject,
+                                             public ::gui::editor::IEditor
+{
+
+Q_OBJECT
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSelectionMenuButton)(::gui::editor::IEditor) );
+
+    /// Constructor. Do nothing.
+    GUIQT_API SSelectionMenuButton() throw();
+
+    /// Destructor. Do nothing.
+    GUIQT_API virtual ~SSelectionMenuButton() throw();
+
+protected:
+
+    typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
+
+    /**
+     * @brief Install the layout.
+     */
+    virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Destroy the layout.
+     */
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void swapping() throw(::fwTools::Failed);
+
+    /// Configure the editor.
+    virtual void configuring() throw(fwTools::Failed);
+
+    /// Overrides
+    virtual void info( std::ostream &_sstream );
+
+protected Q_SLOTS:
+    /// This method is called when the popup menu is clicked. Notify the selection changed.
+    void onSelection(QAction* action);
+
+private:
+
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Signal emitted when an item is selected
+    typedef ::fwCom::Signal< void (int) > SelectedSignalType;
+    SelectedSignalType::sptr m_sigSelected;
+    /**
+     * @}
+     */
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: enable/disable the button
+    void setEnabled(bool enabled);
+
+    /// Slot: enable the button
+    void enable();
+
+    /// Slot: disable the button
+    void disable();
+    /**
+     * @}
+     */
+
+    std::string m_text; ///< Text displayed on the button
+    std::string m_toolTip; ///< Tool tip displayed on the button
+    typedef std::pair <int, std::string> ItemType;
+    typedef std::vector<ItemType> ItemContainerType;
+    ItemContainerType m_items;
+
+    QPointer < QMenu > m_pDropDownMenu;
+    QPointer < QPushButton > m_dropDownButton;
+    QPointer < QActionGroup > m_actionGroup;
+
+    int m_selection;
+
+};
+
+} // namespace editor
+} // namespace guiQt
+
+#endif /*__GUIQT_EDITOR_SSELECTIONMENUBUTTON_HPP__*/
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp
new file mode 100644
index 0000000..a238d8c
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSignalButton.hpp
@@ -0,0 +1,155 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUIQT_EDITOR_SSIGNALBUTTON_HPP__
+#define __GUIQT_EDITOR_SSIGNALBUTTON_HPP__
+
+#include "guiQt/config.hpp"
+
+#include <fwTools/Failed.hpp>
+
+#include <gui/editor/IEditor.hpp>
+
+#include <QPointer>
+#include <QPushButton>
+
+namespace guiQt
+{
+
+namespace editor
+{
+
+
+/**
+ * @brief   This editor shows a button and send a signal when it is clicked.
+ *
+ * If the mode is "checkable", it sends a signal with a boolean in parameter representing the "check" state.
+ *
+ * @note This service doesn’t modify its associated object, so it can work on any type of object.
+ *
+ * @section XML XML configuration
+ * @code{.xml}
+   <service uid="..." impl="::guiQt::editor::SSignalButton" >
+       <config>
+          <checkable>true|false</checkable>
+          <text>...</text>
+          <icon>...</icon>
+          <text2>...</text2>
+          <icon2>...</icon2>
+          <checked>true|false</checked>
+          <iconWidth>...</iconWidth>
+          <iconHeight>...</iconHeight>
+       </config>
+   </service>
+   @endcode
+ * - \b text (optional): text displayed on the button
+ * - \b icon (optional): icon displayed on the button
+ * - \b checkable (optional, default: false): if true, the button is checkable
+ * - \b text2 (optional): text displayed if the button is checked
+ * - \b icon2 (optional): icon displayed if the button is checked
+ * - \b checked (optional, default: false): if true, the button is checked at start
+ * - \b iconWidth (optional): icon width
+ * - \b iconHeight (optional): icon height
+ *
+ * @section Signals Signals
+ * - \b clicked(): This signal is emitted when the button is clicked
+ * - \b toggled(bool):  This signal is emitted when the button is checked
+ *
+ * @section Slot Slot
+ * - \b setChecked(bool): This slot allows to check/uncheck the button
+ */
+class GUIQT_CLASS_API SSignalButton : public QObject,
+                                      public ::gui::editor::IEditor
+{
+Q_OBJECT
+public:
+
+
+    fwCoreServiceClassDefinitionsMacro ( (SSignalButton)(::gui::editor::IEditor) );
+
+    /// Constructor. Do nothing.
+    GUIQT_API SSignalButton() throw();
+
+    /// Destructor. Do nothing.
+    GUIQT_API virtual ~SSignalButton() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+    /**
+     * @brief This method launches the IEditor::starting method.
+     */
+    GUIQT_API virtual void starting() throw( ::fwTools::Failed );
+
+    /**
+     * @brief This method launches the IEditor::stopping method.
+     */
+    GUIQT_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /**
+     * @brief This method is used to update services. Do nothing.
+     */
+    GUIQT_API virtual void updating() throw(::fwTools::Failed);
+
+    /// This method is used to configure the class parameters.
+    GUIQT_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /**
+     * @brief This method is used to give information about the service. Do nothing.
+     */
+    GUIQT_API virtual void info(std::ostream &_sstream );
+
+    ///@}
+
+private Q_SLOTS:
+    void onClicked();
+    void onToggled(bool);
+
+private:
+
+    /**
+     * @name Signal
+     * @{
+     */
+    /// Signal emitted when button is clicked
+    typedef ::fwCom::Signal< void () > ClickedSignalType;
+    ClickedSignalType::sptr m_sigClicked;
+
+    /// Signal emitted when button is checked/unchecked
+    typedef ::fwCom::Signal< void (bool) > ToggledSignalType;
+    ToggledSignalType::sptr m_sigToggled;
+    /**
+     * @}
+     */
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: check/uncheck the button
+    void setChecked(bool checked);
+    /**
+     * @}
+     */
+
+    QPointer <QPushButton> m_button; /// button
+
+    std::string m_text; /// Button's text
+    std::string m_text2; /// Button's text when it is checked
+    ::boost::filesystem::path m_icon; /// Path of the button's icon
+    ::boost::filesystem::path m_icon2; /// Path of the button's icon displayed when it is checked
+    bool m_checkable; /// If true, the button is checkable
+    bool m_checkAtStart; /// If true, the button is checked at start
+    unsigned int m_iconWidth; /// icon width
+    unsigned int m_iconHeight; /// icon height
+};
+
+}
+}
+
+#endif /*__GUIQT_EDITOR_SSIGNALBUTTON_HPP__*/
diff --git a/Bundles/LeafUI/guiQt/include/guiQt/editor/SSlider.hpp b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSlider.hpp
new file mode 100644
index 0000000..746d419
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/include/guiQt/editor/SSlider.hpp
@@ -0,0 +1,171 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUIQT_EDITOR_SSLIDER_HPP__
+#define __GUIQT_EDITOR_SSLIDER_HPP__
+
+#include "guiQt/config.hpp"
+
+#include <QPushButton>
+#include <QObject>
+#include <QSlider>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPointer>
+
+#include <fwTools/Failed.hpp>
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <gui/editor/IEditor.hpp>
+
+namespace guiQt
+{
+
+namespace editor
+{
+
+
+/**
+ * @brief   This editor allows to draw a slider with an integer data.
+ *
+ * Default slider params : value 0, range 0-100, no text, no reset button and edit box.
+ * @note value, defaultValue, min and max must be integers.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+    <service uid="..." type="::gui::editor::IEditor" impl="::guiQt::editor::SSlider" autoConnect="no"/>
+        <editBox>false</editBox>
+        <resetButton>false</resetButton>
+        <defaultValue>200</defaultValue>
+        <updateOnRelease>false</updateOnRelease>
+        <value>200</value>
+        <text>opacity value</text>
+        <range>
+            <min>1</min>
+            <max>600</max>
+        </range>
+    </service>
+   @endcode
+ *
+ * @section Signals Signals
+ * - \b valueChanged(int): This editor emits the signal "valueChanged" with the changed slider value.
+ *
+ * @section Slots Slots
+ * - \b setValue(int, bool): This slot allows to update the slider value.
+ * - \b setMinValue(int): This slot allows to set minimum value.
+ * - \b setMaxValue(int): This slot allows to set maximum value.
+ */
+class GUIQT_CLASS_API SSlider : public QObject,
+                                public ::gui::editor::IEditor
+{
+Q_OBJECT
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSlider)(::gui::editor::IEditor) );
+
+    /// Constructor. Do nothing.
+    GUIQT_API SSlider() throw();
+
+    /// Destructor. Do nothing.
+    GUIQT_API virtual ~SSlider() throw();
+
+    /**@name Signals API
+     * @{
+     */
+
+    GUIQT_API static const ::fwCom::Signals::SignalKeyType s_VALUE_CHANGED_SIG;
+    typedef ::fwCom::Signal<void (int)> ValueChangedSignalType;
+
+    /** @} */
+
+    /**
+     * @name Slots API
+     * @{
+     */
+
+    GUIQT_API static const ::fwCom::Slots::SlotKeyType s_SET_VALUE_SLIDER_SLOT;
+    GUIQT_API static const ::fwCom::Slots::SlotKeyType s_SET_MIN_VALUE_SLIDER_SLOT;
+    GUIQT_API static const ::fwCom::Slots::SlotKeyType s_SET_MAX_VALUE_SLIDER_SLOT;
+
+    ///@}
+
+protected:
+
+
+    typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
+
+    /// Installs the layout
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Destroys the layout
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Does nothing
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Does nothing
+    virtual void swapping() throw(::fwTools::Failed);
+
+    /// Configure the service
+    virtual void configuring() throw(fwTools::Failed);
+
+    /// Signal when the position os the slider changed
+    ValueChangedSignalType::sptr m_sigValueChanged;
+
+
+protected Q_SLOTS:
+
+    /// SLOT : Called to set the value.
+    void setValue( int value, bool _bForced = false );
+
+    /// SLOT : Called to set the min range
+    void setMinValue(int value);
+
+    /// SLOT : Called to set the max range
+    void setMaxValue(int value);
+
+
+    /// Internal slot. Called when the cursor starts to move.
+    void sliderPressed();
+
+    /// Internal slot. Reset the value - and the slider position - to default
+    void resetValue();
+
+    /// Internal slot. Called when the cursor is moved.
+    void changeValue();
+
+    /// Internal slot. Called when Return is pressed on the edit box
+    void editValue();
+
+private:
+
+    QPointer<QSlider>       m_valueSlider;          ///< User draggable slider.
+    QPointer<QLabel>        m_valueLabel;           ///< The current value. Visible only when there is no edit box.
+    QPointer<QLabel>        m_minValueLabel;        ///< Minimum value of the slider displayed on the left side.
+    QPointer<QLabel>        m_maxValueLabel;        ///< Maximum value of the slider displayed on the right side.
+    QPointer<QLabel>        m_textLabel;            ///< Text displayed on the left.
+    QPointer<QPushButton>   m_resetButton;          ///< Button to reset the slider to default value.
+    QPointer<QLineEdit>     m_valueEdit;            ///< Edit box, allowing the user to change the slider value precisely.
+
+    int m_value;                                    ///< Current value.
+    int m_minValue;                                 ///< Minimum value.
+    int m_maxValue;                                 ///< Maximum value.
+    int m_defaultValue;                             ///< Default value, used when button reset is pressed.
+    QString m_text;                                 ///< Description, displayed via m_textLabel.
+    bool m_isUpdatedOnRelease;                      ///< If true, the value actually updated only on slider release.
+    bool m_hasResetButton;                          ///< If true, the reset button is available.
+    bool m_hasEditBox;                              ///< If true, the edit box is available, and the value label is off.
+    bool m_sliderPressed;                           ///< Set to true when the slider is pressed.
+};
+
+
+}
+}
+
+#endif /*__GUIQT_EDITOR_SSLIDER_HPP__*/
diff --git a/Bundles/LeafUI/guiQt/rc/plugin.xml b/Bundles/LeafUI/guiQt/rc/plugin.xml
index e287c1f..2243d5b 100644
--- a/Bundles/LeafUI/guiQt/rc/plugin.xml
+++ b/Bundles/LeafUI/guiQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="guiQt" class="::guiQt::Plugin">
+<plugin id="guiQt" class="::guiQt::Plugin" version="@DASH_VERSION@" >
     <library name="guiQt" />
 
     <requirement id="dataReg" />
@@ -24,4 +24,34 @@
         <object>::fwData::Object</object>
     </extension>
 
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::view::IView</type>
+        <service>::guiQt::editor::SDynamicView</service>
+        <object>::fwData::Object</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::guiQt::editor::SSlider</service>
+        <object>::fwData::Object</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::guiQt::editor::SSignalButton</service>
+        <object>::fwData::Object</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::guiQt::editor::SSelectionMenuButton</service>
+        <object>::fwData::Object</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+       <type>::gui::editor::IEditor</type>
+        <service>::guiQt::editor::SParameters</service>
+        <object>::fwData::Object</object>
+    </extension>
+
 </plugin>
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp b/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp
index 610b038..83b6581 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/Plugin.cpp
@@ -1,16 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QDir>
-#include <QStringList>
-#include <QFile>
-#include <QString>
-#include <QTextStream>
-
-#include <boost/bind.hpp>
+#include "guiQt/Plugin.hpp"
 
 #include <fwCore/base.hpp>
 
@@ -18,41 +12,45 @@
 #include <fwRuntime/profile/Profile.hpp>
 
 #include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
 
+#include <fwGui/registry/worker.hpp>
 #include <fwGuiQt/App.hpp>
 #include <fwGuiQt/WorkerQt.hpp>
 
-#include "guiQt/Plugin.hpp"
+#include <QFile>
+#include <QString>
+#include <QTextStream>
+
+#include <functional>
 
 namespace guiQt
 {
 //-----------------------------------------------------------------------------
 
-
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::guiQt::Plugin");
 
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
-    SLM_TRACE_FUNC();
-
     ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
     SLM_ASSERT("Profile is not initialized", profile);
-    int &argc = profile->getRawArgCount();
+    int &argc   = profile->getRawArgCount();
     char** argv = profile->getRawParams();
 
     m_workerQt = ::fwGuiQt::getQtWorker(argc, argv);
+    ::fwGui::registry::worker::init(m_workerQt);
 
+    m_workerQt->post( std::bind( &Plugin::loadStyleSheet, this ) );
 
-    m_workerQt->post( ::boost::bind( &Plugin::loadStyleSheet, this ) );
-
-    ::fwRuntime::profile::getCurrentProfile()->setRunCallback(::boost::bind(&Plugin::run, this));
+    ::fwRuntime::profile::getCurrentProfile()->setRunCallback(std::bind(&Plugin::run, this));
 }
 
 //-----------------------------------------------------------------------------
@@ -68,16 +66,20 @@ void setup()
     ::fwRuntime::profile::getCurrentProfile()->setup();
 }
 
+//-----------------------------------------------------------------------------
+
 int Plugin::run() throw()
 {
-    m_workerQt->post( ::boost::bind( &setup ) );
+    m_workerQt->post( std::bind( &setup ) );
     m_workerQt->getFuture().wait(); // This is required to start WorkerQt loop
 
     ::fwRuntime::profile::getCurrentProfile()->cleanup();
     int result = ::boost::any_cast<int>(m_workerQt->getFuture().get());
-#ifdef _WIN32
+
+    ::fwServices::registry::ActiveWorkers::getDefault()->clearRegistry();
+    ::fwGui::registry::worker::reset();
     m_workerQt.reset();
-#endif
+
     return result;
 }
 
@@ -87,7 +89,7 @@ void Plugin::loadStyleSheet()
 {
     if( this->getBundle()->hasParameter("style") )
     {
-        std::string styleFile = this->getBundle()->getParameterValue("style") ;
+        std::string styleFile = this->getBundle()->getParameterValue("style");
 
         QFile data(QString::fromStdString(styleFile));
         QString style;
@@ -101,4 +103,6 @@ void Plugin::loadStyleSheet()
     }
 }
 
+//-----------------------------------------------------------------------------
+
 } // namespace guiQt
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/Code.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/Code.cpp
index bb686fb..199e2f3 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/editor/Code.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/Code.cpp
@@ -1,26 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QHBoxLayout>
+#include "guiQt/editor/Code.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwData/String.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwComEd/StringMsg.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 #include <fwGuiQt/highlighter/CppHighlighter.hpp>
 #include <fwGuiQt/highlighter/PythonHighlighter.hpp>
 
-#include "guiQt/editor/Code.hpp"
+#include <QHBoxLayout>
 
 namespace guiQt
 {
@@ -28,7 +27,7 @@ namespace guiQt
 namespace editor
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::guiQt::editor::Code , ::fwData::String ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::guiQt::editor::Code, ::fwData::String );
 
 //------------------------------------------------------------------------------
 
@@ -39,13 +38,13 @@ const std::string Code::CPP    = "Cpp";
 
 Code::Code() throw() : m_language(PYTHON)
 {
-    //addNewHandledEvent(::fwComEd::StringMsg::VALUE_IS_MODIFIED);
 }
 
 //------------------------------------------------------------------------------
 
 Code::~Code() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -54,7 +53,8 @@ void Code::starting() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -119,7 +119,7 @@ void Code::configuring() throw(fwTools::Failed)
 void Code::updating() throw(::fwTools::Failed)
 {
     ::fwData::String::sptr stringObj = this->getObject< ::fwData::String >();
-    SLM_ASSERT("Sorry, the object is null", stringObj);
+    SLM_ASSERT("The given string object is null", stringObj);
 
     m_valueCtrl->setText(QString::fromStdString(stringObj->value()));
     OSLM_TRACE(stringObj->getID() << " updated value : " << stringObj->value());
@@ -131,17 +131,6 @@ void Code::swapping() throw(::fwTools::Failed)
 {
     this->updating();
 }
-//------------------------------------------------------------------------------
-
-void Code::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::StringMsg::csptr stringMsg = ::fwComEd::StringMsg::dynamicConstCast(_msg);
-
-    if (stringMsg && stringMsg->hasEvent(::fwComEd::StringMsg::VALUE_IS_MODIFIED))
-    {
-        this->updating();
-    }
-}
 
 //------------------------------------------------------------------------------
 
@@ -165,14 +154,28 @@ void Code::onModifyValue()
     if ( oldValue->value() != stringObj->value() )
     {
         OSLM_TRACE( stringObj->getID() << " modified");
-        ::fwComEd::StringMsg::sptr msg = ::fwComEd::StringMsg::New();
-        msg->addEvent( ::fwComEd::StringMsg::VALUE_IS_MODIFIED );
-        ::fwServices::IEditionService::notify(this->getSptr(), stringObj, msg);
+
+        auto sig = stringObj->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
     }
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Code::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } // namespace editor
 
 } // namespace guiQt
-
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/DummyEditor.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/DummyEditor.cpp
index 4c59b68..1a60eb5 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/editor/DummyEditor.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/DummyEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,9 +13,7 @@
 
 #include <fwCore/base.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwTools/fwID.hpp>
 
 #include <fwGuiQt/container/QtContainer.hpp>
@@ -27,17 +25,19 @@ namespace gui
 namespace editor
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::gui::editor::DummyEditor , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::gui::editor::DummyEditor, ::fwData::Object );
 
 //-----------------------------------------------------------------------------
 
 DummyEditor::DummyEditor() throw() : m_text("")
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 DummyEditor::~DummyEditor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -46,12 +46,13 @@ void DummyEditor::starting() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     this->create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     QVBoxLayout* layout = new QVBoxLayout();
-    std::string text = m_text.empty() ? this->getID() : m_text;
+    std::string text    = m_text.empty() ? this->getID() : m_text;
     m_staticText = new QLabel( QString::fromStdString(text), container);
     layout->addWidget( m_staticText );
     container->setLayout( layout );
@@ -67,7 +68,8 @@ void DummyEditor::starting() throw(::fwTools::Failed)
 void DummyEditor::stopping() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     SLM_ASSERT("container not instanced", qtContainer->getQtContainer());
 
     // deletes contained widgets
@@ -103,13 +105,6 @@ void DummyEditor::updating() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void DummyEditor::receiving(::fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
 void DummyEditor::info( std::ostream &_sstream )
 {
     SLM_TRACE_FUNC();
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/DynamicView.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/DynamicView.cpp
index a9b9a5d..a2de7be 100644
--- a/Bundles/LeafUI/guiQt/src/guiQt/editor/DynamicView.cpp
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/DynamicView.cpp
@@ -1,42 +1,49 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QtGui>
+#include "guiQt/editor/DynamicView.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
 
-#include <boost/foreach.hpp>
+#include <fwData/Boolean.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
 
-#include <fwTools/fwID.hpp>
+#include <fwDataCamp/getObject.hpp>
 
-#include <fwData/String.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/Boolean.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/GuiRegistry.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 #include <fwServices/registry/AppConfig.hpp>
 
-#include <fwGui/GuiRegistry.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
-
-#include <fwDataCamp/getObject.hpp>
+#include <QtGui>
+#include <QTabWidget>
+#include <QBoxLayout>
 
-#include "guiQt/editor/DynamicView.hpp"
+#include <boost/foreach.hpp>
 
 namespace guiQt
 {
 namespace editor
 {
 
-fwServicesRegisterMacro( ::gui::view::IView , ::guiQt::editor::DynamicView , ::fwData::Object ) ;
+static const ::fwCom::Slots::SlotKeyType s_CREATE_TAB_SLOT = "createTab";
 
-AppConfig::AppConfig(const DynamicView::ConfigType& config) :
+fwServicesRegisterMacro( ::gui::view::IView, ::guiQt::editor::DynamicView, ::fwData::Object );
+
+AppConfig::AppConfig(const ConfigType& config) :
     id(config.get<std::string>("<xmlattr>.id")),
     title(config.get<std::string>("<xmlattr>.title"))
 {
@@ -49,7 +56,7 @@ AppConfig::AppConfig(const DynamicView::ConfigType& config) :
     if(config.count("parameters") == 1 )
     {
         const ConfigType &configParameters = config.get_child("parameters");
-        BOOST_FOREACH( const ConfigType::value_type &v, configParameters.equal_range("parameter") )
+        BOOST_FOREACH( const ConfigType::value_type &v,  configParameters.equal_range("parameter") )
         {
             ParameterType parameter( v.second );
             parameters.push_back( parameter );
@@ -63,13 +70,15 @@ AppConfig::AppConfig(const DynamicView::ConfigType& config) :
 DynamicView::DynamicView() throw()
 {
     m_dynamicConfigStartStop = false;
-    //addNewHandledEvent( "NEW_CONFIGURATION_HELPER" );
+
+    newSlot(s_CREATE_TAB_SLOT, &DynamicView::createTab, this);
 }
 
 //------------------------------------------------------------------------------
 
 DynamicView::~DynamicView() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -79,7 +88,7 @@ void DynamicView::starting() throw(::fwTools::Failed)
 
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr parentContainer ;
+    ::fwGuiQt::container::QtContainer::sptr parentContainer;
     parentContainer = ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
 
     QWidget* qtContainer = parentContainer->getQtContainer();
@@ -119,7 +128,7 @@ void DynamicView::stopping() throw(::fwTools::Failed)
         this->closeTab(0,true);
     }
     m_tabWidget->clear();
-    ::fwGuiQt::container::QtContainer::sptr parentContainer ;
+    ::fwGuiQt::container::QtContainer::sptr parentContainer;
     parentContainer = ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
     parentContainer->clean();
     this->::fwGui::IGuiContainerSrv::destroy();
@@ -134,13 +143,13 @@ void DynamicView::configuring() throw(fwTools::Failed)
 
     if(this->getConfigTree().get_child("service").count("config") > 0)
     {
-        SLM_ASSERT("Sorry you must have one (and only one) <config/> element.",
-                this->getConfigTree().get_child("service").count("config") == 1 );
+        SLM_ASSERT("There must be one (and only one) <config/> element.",
+                   this->getConfigTree().get_child("service").count("config") == 1 );
         const ::fwServices::IService::ConfigType srvconfig = this->getConfigTree().get_child("service");
-        const ::fwServices::IService::ConfigType &config = srvconfig.get_child("config");
+        const ::fwServices::IService::ConfigType &config   = srvconfig.get_child("config");
 
         const std::string dynamicConfig =
-                config.get_optional<std::string>("<xmlattr>.dynamicConfigStartStop").get_value_or("false");
+            config.get_optional<std::string>("<xmlattr>.dynamicConfigStartStop").get_value_or("false");
         m_dynamicConfigStartStop = (dynamicConfig == "true");
 
         if(config.count("appConfig") == 1 )
@@ -168,15 +177,15 @@ DynamicView::DynamicViewInfo DynamicView::buildDynamicViewInfo(const AppConfig&
         info.title = appConfig.tabInfo;
     }
     info.viewConfigID = appConfig.id;
-    info.closable = appConfig.closable;
+    info.closable     = appConfig.closable;
 
     ::fwData::Object::sptr currentObj = this->getObject();
-    ::fwData::Composite::sptr replaceMap = ::fwData::Composite::New();
-    BOOST_FOREACH(const AppConfig::ParametersType::value_type& param, appConfig.parameters)
+    ReplaceMapType replaceMap;
+    for(const AppConfig::ParametersType::value_type& param :  appConfig.parameters)
     {
         if(!param.isSeshat())
         {
-            (*replaceMap)[param.replace] = ::fwData::String::New(param.by);
+            replaceMap[param.replace] = param.by;
         }
         else
         {
@@ -197,11 +206,9 @@ DynamicView::DynamicViewInfo DynamicView::buildDynamicViewInfo(const AppConfig&
             {
                 parameterValue = stringParameter->getValue();
             }
-            (*replaceMap)[param.replace] = ::fwData::String::New(parameterValue);
+            replaceMap[param.replace] = parameterValue;
         }
     }
-    std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier(appConfig.id);
-    (*replaceMap)["GENERIC_UID"] = ::fwData::String::New(genericUidAdaptor);
     info.replaceMap = replaceMap;
     return info;
 }
@@ -209,44 +216,29 @@ DynamicView::DynamicViewInfo DynamicView::buildDynamicViewInfo(const AppConfig&
 //------------------------------------------------------------------------------
 
 void DynamicView::updating() throw(::fwTools::Failed)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void DynamicView::swapping() throw(::fwTools::Failed)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void DynamicView::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void DynamicView::createTab( ::fwActivities::registry::ActivityMsg info )
 {
-    if (msg->hasEvent("NEW_CONFIGURATION_HELPER"))
-    {
-        DynamicViewInfo info;
-        ::fwData::String::csptr titleData = ::fwData::String::dynamicConstCast(msg->getDataInfo( "NEW_CONFIGURATION_HELPER" ) );
-
-        const std::string eventID              = "NEW_CONFIGURATION_HELPER";
-        const std::string fieldID              = "APPCONFIG";
-        const std::string viewConfigFieldID    = "VIEWCONFIGID";
-        const std::string closableFieldID      = "CLOSABLE";
-        const std::string iconFieldID          = "ICON";
-        const std::string tooltipFieldID       = "TOOLTIP";
-        const std::string tabIDFieldID         = "TABID";
-        const std::string asFieldID            = "ACTIVITYSERIES";
-        const std::string tabInfo              = "TABINFO";
-
-        SLM_ASSERT("Missing field 'tabID' in message", titleData->getField(tabIDFieldID));
-        info.title         = titleData->getField< ::fwData::String >("TABINFO")->value();
-        info.tabID         = titleData->getField< ::fwData::String >(tabIDFieldID)->value();
-        info.closable      = titleData->getField(closableFieldID, ::fwData::Boolean::New(true))->value();
-        info.icon          = titleData->getField(iconFieldID, ::fwData::String::New(""))->value();
-        info.tooltip       = titleData->getField(tooltipFieldID, ::fwData::String::New(""))->value();
-        info.viewConfigID  = titleData->getField(viewConfigFieldID, ::fwData::String::New(""))->value();
-        info.replaceMap    = titleData->getField(fieldID, ::fwData::Composite::New());
-
-
-        this->launchTab(info);
-    }
+    DynamicViewInfo viewInfo;
+    viewInfo.title        = info.getTitle();
+    viewInfo.tabID        = info.getTabID();
+    viewInfo.closable     = info.isClosable();
+    viewInfo.icon         = info.getIconPath();
+    viewInfo.tooltip      = info.getToolTip();
+    viewInfo.viewConfigID = info.getAppConfigID();
+    viewInfo.replaceMap   = info.getReplaceMap();
+
+    this->launchTab(viewInfo);
 }
 
 //------------------------------------------------------------------------------
@@ -257,14 +249,14 @@ void DynamicView::launchTab(DynamicViewInfo& info)
     if(m_tabIDList.find(info.tabID) != m_tabIDList.end() )
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog("New tab",
-                "Sorry, the tab " + info.title + " cannot be opened twice.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+                                                          "The tab " + info.title + " cannot be opened twice.",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
         return;
     }
 
     if ( m_titleToCount.find( info.title ) !=  m_titleToCount.end() )
     {
-        m_titleToCount[ info.title ] ++;
+        m_titleToCount[ info.title ]++;
     }
     else
     {
@@ -279,22 +271,30 @@ void DynamicView::launchTab(DynamicViewInfo& info)
     subContainer->setQtContainer(widget);
     ::fwGui::GuiRegistry::registerWIDContainer(info.wid, subContainer);
 
-    (*(info.replaceMap))[ "WID_PARENT" ] = fwData::String::New( info.wid );
+    info.replaceMap[ "WID_PARENT" ] = info.wid;
+    std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier(info.viewConfigID);
+    info.replaceMap["GENERIC_UID"] = genericUidAdaptor;
 
+    ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+    helper->setConfig( info.viewConfigID, info.replaceMap );
 
-    ::fwRuntime::ConfigurationElement::csptr config =
-            ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( info.viewConfigID, info.replaceMap);
-
-    ::fwServices::AppConfigManager::sptr helper = ::fwServices::AppConfigManager::New();
-    helper->setConfig( config );
-
-    if (!m_dynamicConfigStartStop)
+    try
     {
-        helper->launch();
+        if (!m_dynamicConfigStartStop)
+        {
+            helper->launch();
+        }
+        else
+        {
+            helper->create();
+        }
     }
-    else
+    catch( std::exception & e )
     {
-        helper->create();
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Activity launch failed",
+                                                          e.what(),
+                                                          ::fwGui::dialog::IMessageDialog::CRITICAL);
+        OSLM_ERROR(e.what());
     }
 
     info.container = subContainer;
@@ -319,7 +319,8 @@ void DynamicView::launchTab(DynamicViewInfo& info)
 //------------------------------------------------------------------------------
 
 void DynamicView::info( std::ostream &_sstream )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -367,8 +368,8 @@ void DynamicView::closeTab( int index, bool forceClose )
     else
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog("Close tab",
-                "Sorry, the tab " + info.title + " can not be closed.",
-                ::fwGui::dialog::IMessageDialog::INFO);
+                                                          "The tab " + info.title + " can not be closed.",
+                                                          ::fwGui::dialog::IMessageDialog::INFO);
     }
 }
 
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp
new file mode 100644
index 0000000..f5aa0cd
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SDynamicView.cpp
@@ -0,0 +1,577 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "guiQt/editor/SDynamicView.hpp"
+
+#include <fwActivities/IActivityValidator.hpp>
+#include <fwActivities/IValidator.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/GuiRegistry.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+#include <fwTools/UUID.hpp>
+
+#include <QtGui>
+#include <QTabWidget>
+#include <QBoxLayout>
+
+#include <boost/foreach.hpp>
+
+namespace guiQt
+{
+namespace editor
+{
+
+static const ::fwCom::Slots::SlotKeyType s_LAUNCH_ACTIVITY_SLOT        = "launchActivity";
+static const ::fwCom::Slots::SlotKeyType s_LAUNCH_ACTIVITY_SERIES_SLOT = "launchActivitySeries";
+static const ::fwCom::Slots::SlotKeyType s_CREATE_TAB_SLOT             = "createTab";
+
+static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_SELECTED_SLOT = "activitySelected";
+static const ::fwCom::Signals::SignalKeyType s_NOTHING_SELECTED_SLOT  = "nothingSelected";
+
+fwServicesRegisterMacro( ::gui::view::IView, ::guiQt::editor::SDynamicView, ::fwData::Object );
+
+//------------------------------------------------------------------------------
+
+SDynamicView::SDynamicView() throw()
+{
+    m_dynamicConfigStartStop = false;
+
+    newSlot(s_LAUNCH_ACTIVITY_SLOT, &SDynamicView::launchActivity, this);
+    newSlot(s_LAUNCH_ACTIVITY_SERIES_SLOT, &SDynamicView::launchActivitySeries, this);
+    newSlot(s_CREATE_TAB_SLOT, &SDynamicView::createTab, this);
+
+    m_sigActivitySelected = newSignal< ActivitySelectedSignalType >(s_ACTIVITY_SELECTED_SLOT);
+    m_sigNothingSelected  = newSignal< NothingSelectedSignalType >(s_NOTHING_SELECTED_SLOT);
+}
+
+//------------------------------------------------------------------------------
+
+SDynamicView::~SDynamicView() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::configuring() throw(fwTools::Failed)
+{
+    this->::fwGui::IGuiContainerSrv::initialize();
+
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+
+    ConfigType activityConfig = m_configuration->findConfigurationElement("mainActivity");
+    if (activityConfig)
+    {
+        std::string id = activityConfig->getAttributeValue("id");
+        SLM_ASSERT("main activity 'id' must be defined", !id.empty());
+
+        std::string closableStr = activityConfig->getAttributeValue("closable");
+        SLM_ASSERT("main activity 'closable' attribute value must be 'yes', 'true', 'no' or 'false'",
+                   closableStr == "yes" || closableStr == "true" ||
+                   closableStr == "no" || closableStr == "false");
+        bool closable = (closableStr == "yes" || closableStr == "true");
+        m_mainActivityInfo = std::make_pair(id, closable);
+    }
+
+    ConfigType config = m_configuration->findConfigurationElement("parameters");
+    if (config)
+    {
+        std::vector <ConfigType> params = config->find("parameter");
+        for (ConfigType cfg : params)
+        {
+            std::string replace = cfg->getAttributeValue("replace");
+            std::string by      = cfg->getAttributeValue("by");
+            if(by.empty())
+            {
+                by = cfg->getAttributeValue("uid");
+            }
+            SLM_ASSERT("'parameter' tag must contain valid 'replace' and 'by' attributes.",
+                       !replace.empty() && !by.empty());
+            ParameterType param;
+            param.replace = replace;
+            param.by      = by;
+            m_parameters.push_back(param);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::starting() throw(::fwTools::Failed)
+{
+    this->::fwGui::IGuiContainerSrv::create();
+
+    ::fwGuiQt::container::QtContainer::sptr parentContainer;
+    parentContainer = ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+
+    QWidget* qtContainer = parentContainer->getQtContainer();
+    m_tabWidget = new QTabWidget(qtContainer);
+    m_tabWidget->setTabsClosable ( true );
+    m_tabWidget->setDocumentMode( true );
+    m_tabWidget->setMovable( true );
+
+    QObject::connect(m_tabWidget, SIGNAL(tabCloseRequested( int )), this, SLOT( closeTabSignal( int )));
+    QObject::connect(m_tabWidget, SIGNAL(currentChanged( int )), this, SLOT(changedTab( int )));
+
+    QBoxLayout* layout = new QBoxLayout(QBoxLayout::TopToBottom);
+    if (qtContainer->layout())
+    {
+        QWidget().setLayout(qtContainer->layout());
+    }
+    qtContainer->setLayout(layout);
+
+    layout->addWidget( m_tabWidget );
+    m_currentWidget = 0;
+
+    if (!m_mainActivityInfo.first.empty())
+    {
+        this->buildMainActivity();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    while(m_tabWidget->count())
+    {
+        this->closeTab(0,true);
+    }
+    m_tabWidget->clear();
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+    m_tabWidget = 0;
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::swapping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::launchActivity(::fwMedData::ActivitySeries::sptr activitySeries)
+{
+    // Applies validator on activity series to check the data
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(activitySeries->getActivityConfigId());
+
+    // load activity bundle
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = ::fwRuntime::findBundle(info.bundleId, info.bundleVersion);
+    if (!bundle->isStarted())
+    {
+        bundle->start();
+    }
+
+    if (!info.validatorsImpl.empty())
+    {
+        for (std::string validatorImpl : info.validatorsImpl)
+        {
+            /// Process activity validator
+            ::fwActivities::IValidator::sptr validator = ::fwActivities::validator::factory::New(validatorImpl);
+
+            ::fwActivities::IActivityValidator::sptr activityValidator =
+                ::fwActivities::IActivityValidator::dynamicCast(validator);
+            SLM_ASSERT("Validator '" + validatorImpl + "' instantiation failed", activityValidator);
+
+            ::fwActivities::IValidator::ValidationType validation = activityValidator->validate(activitySeries);
+            if(!validation.first)
+            {
+                std::string message = "The activity '" + info.title + "' can not be launched:\n" + validation.second;
+                ::fwGui::dialog::MessageDialog::showMessageDialog("Activity launch",
+                                                                  message,
+                                                                  ::fwGui::dialog::IMessageDialog::CRITICAL);
+                return;
+            }
+        }
+    }
+
+
+    SDynamicViewInfo viewInfo = this->createViewInfo(activitySeries);
+    viewInfo.closable = true;
+
+    this->launchTab(viewInfo);
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::launchActivitySeries(::fwMedData::Series::sptr series)
+{
+    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::dynamicCast(series);
+    if (activitySeries)
+    {
+        this->launchActivity(activitySeries);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::createTab( ::fwActivities::registry::ActivityMsg info )
+{
+    SDynamicViewInfo viewInfo;
+    viewInfo.title          = info.getTitle();
+    viewInfo.tabID          = info.getTabID();
+    viewInfo.closable       = info.isClosable();
+    viewInfo.icon           = info.getIconPath();
+    viewInfo.tooltip        = info.getToolTip();
+    viewInfo.viewConfigID   = info.getAppConfigID();
+    viewInfo.replaceMap     = info.getReplaceMap();
+    viewInfo.activitySeries = info.getActivitySeries();
+
+    this->launchTab(viewInfo);
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::launchTab(SDynamicViewInfo& info)
+{
+    static int count              = 0;
+    ActivityIdType::iterator iter = std::find(m_activityIds.begin(), m_activityIds.end(), info.activitySeries->getID());
+
+    if (iter != m_activityIds.end())
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Launch Activity",
+                                                          "The current activity is already launched. \n"
+                                                          "It cannot be launched twice.",
+                                                          ::fwGui::dialog::IMessageDialog::WARNING);
+        return;
+    }
+
+    if ( m_titleToCount.find( info.title ) !=  m_titleToCount.end() )
+    {
+        m_titleToCount[ info.title ]++;
+    }
+    else
+    {
+        m_titleToCount[ info.title ] = 1;
+    }
+
+    QString finalTitle = QString("%1 %2").arg( info.title.c_str(),"(%1)" ).arg( m_titleToCount[ info.title ] );
+    info.wid = QString("SDynamicView-%1").arg(count++).toStdString();
+
+    ::fwGuiQt::container::QtContainer::sptr subContainer = ::fwGuiQt::container::QtContainer::New();
+    QWidget* widget = new QWidget();
+    subContainer->setQtContainer(widget);
+    ::fwGui::GuiRegistry::registerWIDContainer(info.wid, subContainer);
+
+    info.replaceMap[ "WID_PARENT" ] = info.wid;
+    std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier(info.viewConfigID);
+    info.replaceMap["GENERIC_UID"] = genericUidAdaptor;
+
+    ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+
+    try
+    {
+        helper->setConfig( info.viewConfigID, info.replaceMap );
+        if (!m_dynamicConfigStartStop)
+        {
+            helper->launch();
+        }
+        else
+        {
+            helper->create();
+        }
+    }
+    catch( std::exception& e )
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Activity launch failed",
+                                                          e.what(),
+                                                          ::fwGui::dialog::IMessageDialog::CRITICAL);
+        OSLM_ERROR(e.what());
+        return;
+    }
+
+    info.container = subContainer;
+    info.helper    = helper;
+    m_activityIds.insert(info.activitySeries->getID());
+
+    m_dynamicInfoMap[widget] = info;
+    m_tabIDList.insert(info.tabID);
+
+    int index = m_tabWidget->addTab(widget, finalTitle );
+    if(!info.tooltip.empty())
+    {
+        m_tabWidget->setTabToolTip(index, QString::fromStdString(info.tooltip));
+    }
+    if(!info.icon.empty())
+    {
+        m_tabWidget->setTabIcon(index, QIcon(QString::fromStdString(info.icon)) );
+    }
+    m_tabWidget->setCurrentWidget(widget);
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::info( std::ostream& _sstream )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::closeTabSignal( int index )
+{
+    closeTab( index, false );
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::closeTab( int index, bool forceClose )
+{
+    QWidget* widget = m_tabWidget->widget(index);
+
+    SLM_ASSERT("Widget is not in dynamicInfoMap", m_dynamicInfoMap.find(widget) != m_dynamicInfoMap.end());
+    SDynamicViewInfo info = m_dynamicInfoMap[widget];
+    if ( info.closable || forceClose )
+    {
+        m_tabIDList.erase(info.tabID);
+        if (!m_dynamicConfigStartStop)
+        {
+            info.helper->stopAndDestroy();
+        }
+        else
+        {
+            if (info.helper->isStarted())
+            {
+                info.helper->stop();
+            }
+            info.helper->destroy();
+        }
+        info.helper.reset();
+
+        //Remove tab first, to avoid tab beeing removed by container->destroy
+        m_currentWidget = 0;
+        m_tabWidget->removeTab(index);
+
+        ::fwGui::GuiRegistry::unregisterWIDContainer(info.wid);
+
+        info.container->clean();
+        info.container->destroyContainer();
+        info.container.reset();
+        m_dynamicInfoMap.erase(widget);
+        m_activityIds.erase(info.activitySeries->getID());
+    }
+    else
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog("Close tab",
+                                                          "The tab " + info.title + " can not be closed.",
+                                                          ::fwGui::dialog::IMessageDialog::INFO);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::changedTab( int index )
+{
+    QWidget* widget = m_tabWidget->widget(index);
+
+    if (m_dynamicConfigStartStop && widget != m_currentWidget)
+    {
+        if (m_currentWidget)
+        {
+            SDynamicViewInfo oldinfo = m_dynamicInfoMap[m_currentWidget];
+            oldinfo.helper->stop();
+        }
+
+        if (widget)
+        {
+            SDynamicViewInfo newinfo = m_dynamicInfoMap[widget];
+            if (!newinfo.helper->isStarted())
+            {
+                newinfo.helper->start();
+                newinfo.helper->update();
+            }
+        }
+    }
+    m_currentWidget = widget;
+
+    if (index >= 0)
+    {
+        SDynamicViewInfo info = m_dynamicInfoMap[widget];
+        m_sigActivitySelected->asyncEmit(info.activitySeries);
+    }
+    else
+    {
+        m_sigNothingSelected->asyncEmit();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::buildMainActivity()
+{
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(m_mainActivityInfo.first);
+
+    ::fwMedData::ActivitySeries::sptr actSeries = ::fwMedData::ActivitySeries::New();
+    if (info.requirements.size() > 0)
+    {
+        ::fwData::Composite::sptr data = actSeries->getData();
+        for (::fwActivities::registry::ActivityRequirement req : info.requirements)
+        {
+            if ((req.minOccurs == 0 && req.maxOccurs == 0) || req.create)
+            {
+                (*data)[req.name] = ::fwData::factory::New(req.type);
+            }
+            else
+            {
+                ::fwGui::dialog::MessageDialog::showMessageDialog(
+                    "Main activity",
+                    "The main activity " + m_mainActivityInfo.first + " can not be launched. \n"
+                    "This activity needs parameters that cannot be defined",
+                    ::fwGui::dialog::IMessageDialog::INFO);
+                return;
+            }
+        }
+    }
+
+    actSeries->setModality("OT");
+    actSeries->setInstanceUID("fwActivities." + ::fwTools::UUID::generateUUID() );
+
+    ::boost::posix_time::ptime now = ::boost::posix_time::second_clock::local_time();
+    actSeries->setDate(::fwTools::getDate(now));
+    actSeries->setTime(::fwTools::getTime(now));
+    actSeries->setActivityConfigId(info.id);
+
+    SDynamicViewInfo viewInfo;
+    viewInfo          = this->createViewInfo(actSeries);
+    viewInfo.closable = m_mainActivityInfo.second;
+
+    this->launchTab(viewInfo);
+}
+
+//------------------------------------------------------------------------------
+
+SDynamicView::SDynamicViewInfo SDynamicView::createViewInfo(::fwMedData::ActivitySeries::sptr activitySeries)
+{
+    ReplaceMapType replaceMap;
+    this->translateParameters(this->getObject(), m_parameters, replaceMap);
+
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(activitySeries->getActivityConfigId());
+
+    std::string tabInfo;
+    if(info.tabInfo.empty())
+    {
+        tabInfo = info.title;
+    }
+    else
+    {
+        std::string newTabInfo = info.tabInfo;
+        ::boost::regex e("(!(([[:word:]]+\\.?)+[[:word:]]))");
+        ::boost::smatch what;
+        if(boost::regex_search(newTabInfo, what, e))
+        {
+            std::string submatch(what[1].first, what[1].second);
+
+            submatch.replace(0, 1, "@");
+
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(activitySeries->getData(), submatch);
+            OSLM_ASSERT("Invalid seshat path : '" << submatch <<"'", obj);
+
+            ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
+
+            std::string tabInfoSeshat;
+
+            if(stringParameter)
+            {
+                tabInfoSeshat = stringParameter->getValue();
+            }
+            else
+            {
+                OSLM_WARN("Seshat path '" << submatch << "' doesn't reference an fwData::String");
+            }
+
+            submatch.replace(0, 1, "!");
+            ::boost::algorithm::replace_all(newTabInfo, submatch, tabInfoSeshat);
+
+        }
+        tabInfo = newTabInfo;
+    }
+
+    this->translateParameters(activitySeries->getData(), info.appConfig.parameters, replaceMap);
+    replaceMap["AS_UID"] = activitySeries->getID();
+
+    SDynamicViewInfo viewInfo;
+    viewInfo.title          = info.title;
+    viewInfo.icon           = info.icon;
+    viewInfo.tooltip        = tabInfo;
+    viewInfo.viewConfigID   = info.appConfig.id;
+    viewInfo.activitySeries = activitySeries;
+    viewInfo.replaceMap     = replaceMap;
+
+    return viewInfo;
+}
+
+//------------------------------------------------------------------------------
+
+void SDynamicView::translateParameters( ::fwData::Object::sptr sourceObj, const ParametersType& parameters,
+                                        ReplaceMapType& replaceMap )
+{
+    for(const ParametersType::value_type& param :  parameters)
+    {
+        if(!param.isSeshat())
+        {
+            replaceMap[param.replace] = param.by;
+        }
+        else
+        {
+            std::string parameterToReplace = param.by;
+            if (parameterToReplace.substr(0,1) == "!")
+            {
+                parameterToReplace.replace(0, 1, "@");
+            }
+
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(sourceObj, parameterToReplace);
+            SLM_ASSERT("Invalid seshat path : '" + param.by + "'", obj);
+
+            ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
+
+            std::string parameterValue = obj->getID();
+
+            if(stringParameter && param.by.substr(0,1) == "!")
+            {
+                parameterValue = stringParameter->getValue();
+            }
+            replaceMap[param.replace] = parameterValue;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+}// namespace editor
+}// namespace guiQt
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp
new file mode 100644
index 0000000..450dbfc
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SParameters.cpp
@@ -0,0 +1,687 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "guiQt/editor/SParameters.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwDataTools/Color.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwTools/Object.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <QCheckBox>
+#include <QColorDialog>
+#include <QFormLayout>
+#include <QLabel>
+#include <QString>
+#include <QSlider>
+#include <QSpinBox>
+#include <QStyle>
+
+#include <boost/foreach.hpp>
+
+namespace guiQt
+{
+
+namespace editor
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::guiQt::editor::SParameters, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType BOOLEAN_CHANGED_SIG  = "boolChanged";
+static const ::fwCom::Signals::SignalKeyType COLOR_CHANGED_SIG    = "colorChanged";
+static const ::fwCom::Signals::SignalKeyType DOUBLE_CHANGED_SIG   = "doubleChanged";
+static const ::fwCom::Signals::SignalKeyType DOUBLE2_CHANGED_SIG  = "double2Changed";
+static const ::fwCom::Signals::SignalKeyType DOUBLE3_CHANGED_SIG  = "double3Changed";
+static const ::fwCom::Signals::SignalKeyType INTEGER_CHANGED_SIG  = "intChanged";
+static const ::fwCom::Signals::SignalKeyType INTEGER2_CHANGED_SIG = "int2Changed";
+static const ::fwCom::Signals::SignalKeyType INTEGER3_CHANGED_SIG = "int3Changed";
+
+//-----------------------------------------------------------------------------
+
+SParameters::SParameters() throw ()
+{
+    newSignal< BooleanChangedSignalType>(BOOLEAN_CHANGED_SIG);
+    newSignal< ColorChangedSignalType>(COLOR_CHANGED_SIG);
+    newSignal< DoubleChangedSignalType>(DOUBLE_CHANGED_SIG);
+    newSignal< Double2ChangedSignalType>(DOUBLE2_CHANGED_SIG);
+    newSignal< Double3ChangedSignalType>(DOUBLE3_CHANGED_SIG);
+    newSignal< IntegerChangedSignalType>(INTEGER_CHANGED_SIG);
+    newSignal< Integer2ChangedSignalType>(INTEGER2_CHANGED_SIG);
+    newSignal< Integer3ChangedSignalType>(INTEGER3_CHANGED_SIG);
+
+    m_signalMapper = new QSignalMapper(this);
+    m_resetMapper  = new QSignalMapper(this);
+}
+
+//-----------------------------------------------------------------------------
+
+SParameters::~SParameters() throw ()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::configuring() throw (::fwTools::Failed)
+{
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::starting() throw (::fwTools::Failed)
+{
+    this->create();
+
+    auto qtContainer   = ::fwGuiQt::container::QtContainer::dynamicCast(this->getContainer());
+    QWidget* container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
+
+    QGridLayout* layout = new QGridLayout(container);
+    SLM_ASSERT("Layout is NULL", layout);
+    container->setLayout(layout);
+
+    ::fwServices::IService::ConfigType config = this->getConfigTree();
+    const ::fwServices::IService::ConfigType& parametersCfg = config.get_child("service.parameters");
+
+    int row = 0;
+
+    // Create widgets
+    BOOST_FOREACH( const auto& param, parametersCfg.equal_range("param") )
+    {
+        const ::fwServices::IService::ConfigType& cfg = param.second;
+
+        std::string name         = cfg.get< std::string >("<xmlattr>.name");
+        std::string key          = cfg.get< std::string >("<xmlattr>.key");
+        std::string type         = cfg.get< std::string >("<xmlattr>.type");
+        std::string defaultValue = cfg.get< std::string >("<xmlattr>.defaultValue");
+        std::string widget       = cfg.get< std::string >("<xmlattr>.widget", "slider");
+
+        layout->addWidget(new QLabel(QString(name.c_str())), row, 0);
+
+        if(type=="bool")
+        {
+            this->createBoolWidget(*layout, row, key, defaultValue);
+        }
+        else if(type=="color")
+        {
+            this->createColorWidget(*layout, row, key, defaultValue);
+        }
+        else if(type=="double" || type=="double2" || type=="double3")
+        {
+            const double min          = cfg.get<double>("<xmlattr>.min", 0.);
+            const double max          = cfg.get<double>("<xmlattr>.max", 1.);
+            const double defaultValue = cfg.get<double>("<xmlattr>.defaultValue", 0.5);
+
+            const int count = (type == "double3") ? 3 : (type == "double2" ? 2 : 1);
+
+            this->createDoubleWidget(*layout, row, key, defaultValue, min, max, count);
+        }
+        else if(type=="int" || type=="int2" || type=="int3")
+        {
+            const int min          = cfg.get<int>("<xmlattr>.min", 0);
+            const int max          = cfg.get<int>("<xmlattr>.max", 100);
+            const int defaultValue = cfg.get<int>("<xmlattr>.defaultValue", 50);
+
+            const int count = (type == "int3") ? 3 : (type == "int2" ? 2 : 1);
+
+            if(widget == "spin")
+            {
+                this->createIntegerSpinWidget(*layout, row, key, defaultValue, min, max, count);
+            }
+            else
+            {
+                // We don't support multiple sliders because we will not have the room in a single row
+                SLM_ASSERT("Count > 1 is not supported with sliders", count == 1);
+
+                this->createIntegerSliderWidget(*layout, row, key, defaultValue, min, max);
+            }
+        }
+        ++row;
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::updating() throw (::fwTools::Failed)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::stopping() throw (::fwTools::Failed)
+{
+    this->getContainer()->clean();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onChangeBoolean(int value)
+{
+    const QObject* sender = this->sender();
+    const QString key     = sender->property("key").toString();
+    const bool checked    = value == Qt::Checked;
+
+    this->signal<BooleanChangedSignalType>(BOOLEAN_CHANGED_SIG)->asyncEmit(checked, key.toStdString());
+}
+
+//------------------------------------------------------------------------------
+
+void SParameters::onColorButton()
+{
+    QObject* sender = this->sender();
+
+    // Create Color choice dialog.
+    auto qtContainer         = ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
+
+    const QColor oldColor = sender->property("color").value<QColor>();
+    const QColor colorQt  = QColorDialog::getColor(oldColor, container);
+    if(colorQt.isValid())
+    {
+        const QString key = sender->property("key").toString();
+
+        QPushButton* colourButton = dynamic_cast<QPushButton*>(sender);
+        colourButton->setProperty("color", colorQt);
+
+        int iconSize = colourButton->style()->pixelMetric(QStyle::PM_LargeIconSize);
+        QPixmap pix(iconSize, iconSize);
+        pix.fill(colorQt);
+
+        colourButton->setIcon(QIcon(pix));
+
+        const std::array<std::uint8_t, 4> newColor = {{ static_cast<std::uint8_t>(colorQt.red()),
+                                                        static_cast<std::uint8_t>(colorQt.green()),
+                                                        static_cast<std::uint8_t>(colorQt.blue()),
+                                                        static_cast<std::uint8_t>(colorQt.alpha()) }};
+        this->signal<ColorChangedSignalType>(COLOR_CHANGED_SIG)->asyncEmit(newColor, key.toStdString());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onChangeInteger(int value)
+{
+    const QObject* sender = this->sender();
+    const QString key     = sender->property("key").toString();
+    const int count       = sender->property("count").toInt();
+
+    SLM_ASSERT("Invalid widgets count, must be <= 3", count <= 3);
+
+    const QSpinBox* spinbox = dynamic_cast<const QSpinBox*>(sender);
+    const QSlider* slider   = dynamic_cast<const QSlider*>(sender);
+    SLM_ASSERT("Wrong widget type", spinbox || slider);
+
+    if(count == 1)
+    {
+        this->signal<IntegerChangedSignalType>(INTEGER_CHANGED_SIG)->asyncEmit(value, key.toStdString());
+    }
+    else
+    {
+        int value1;
+        int value2;
+
+        if(spinbox)
+        {
+            const QSpinBox* spin1 = sender->property("widget#0").value< QSpinBox*>();
+            const QSpinBox* spin2 = sender->property("widget#1").value< QSpinBox*>();
+
+            value1 = spin1->value();
+            value2 = spin2->value();
+        }
+        else
+        {
+            const QSlider* spin1 = sender->property("widget#0").value< QSlider*>();
+            const QSlider* spin2 = sender->property("widget#1").value< QSlider*>();
+
+            value1 = spin1->value();
+            value2 = spin2->value();
+
+        }
+        if(count == 2)
+        {
+            this->signal<Integer2ChangedSignalType>(INTEGER2_CHANGED_SIG)->asyncEmit(value1, value2, key.toStdString());
+        }
+        else
+        {
+            int value3;
+            if(spinbox)
+            {
+                const QSpinBox* spin3 = sender->property("widget#2").value< QSpinBox*>();
+                value3 = spin3->value();
+            }
+            else
+            {
+                const QSlider* spin3 = sender->property("widget#2").value< QSlider*>();
+                value3 = spin3->value();
+            }
+
+            this->signal<Integer3ChangedSignalType>(INTEGER3_CHANGED_SIG)->asyncEmit(value1, value2, value3,
+                                                                                     key.toStdString());
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onChangeDouble(double value)
+{
+    const QObject* sender = this->sender();
+    const QString key     = sender->property("key").toString();
+    const int count       = sender->property("count").toInt();
+
+    SLM_ASSERT("Invalid widgets count, must be <= 3", count <= 3);
+
+    if(count == 1)
+    {
+        this->signal<DoubleChangedSignalType>(DOUBLE_CHANGED_SIG)->asyncEmit(value, key.toStdString());
+    }
+    else
+    {
+        const QDoubleSpinBox* spin1 = sender->property("widget#0").value< QDoubleSpinBox*>();
+        const QDoubleSpinBox* spin2 = sender->property("widget#1").value< QDoubleSpinBox*>();
+
+        const double value1 = spin1->value();
+        const double value2 = spin2->value();
+
+        if(count == 2)
+        {
+            this->signal<Double2ChangedSignalType>(DOUBLE2_CHANGED_SIG)->asyncEmit(value1, value2, key.toStdString());
+        }
+        else
+        {
+            const QDoubleSpinBox* spin3 = sender->property("widget#2").value< QDoubleSpinBox*>();
+            const double value3         = spin3->value();
+
+            this->signal<Double3ChangedSignalType>(DOUBLE3_CHANGED_SIG)->asyncEmit(value1, value2, value3,
+                                                                                   key.toStdString());
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onSliderMapped(QWidget* widget)
+{
+    const QSlider* slider = qobject_cast<QSlider*>(m_signalMapper->mapping(widget));
+    QLabel* label         = qobject_cast<QLabel*>(widget);
+    if (label && slider)
+    {
+        label->setText(QString::number(slider->value()));
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onResetBooleanMapped(QWidget* widget)
+{
+    const QPushButton* button = qobject_cast<QPushButton*>(m_resetMapper->mapping(widget));
+    QCheckBox* checkbox       = qobject_cast<QCheckBox*>(widget);
+    if (button && checkbox)
+    {
+        int value = checkbox->property("defaultValue").toInt();
+        checkbox->setCheckState(::Qt::CheckState(value));
+
+        const QString key = checkbox->property("key").toString();
+        this->signal<BooleanChangedSignalType>(BOOLEAN_CHANGED_SIG)->asyncEmit(value, key.toStdString());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onResetColorMapped(QWidget* widget)
+{
+    const QPushButton* button = qobject_cast<QPushButton*>(m_resetMapper->mapping(widget));
+    QPushButton* colourButton = qobject_cast<QPushButton*>(widget);
+    if (button && colourButton)
+    {
+        const QColor color = colourButton->property("defaultValue").value<QColor>();
+        const QString key  = colourButton->property("key").toString();
+
+        int iconSize = colourButton->style()->pixelMetric(QStyle::PM_LargeIconSize);
+        QPixmap pix(iconSize, iconSize);
+        pix.fill(color);
+
+        colourButton->setIcon(QIcon(pix));
+        colourButton->setProperty("color", color);
+
+        const std::array<std::uint8_t, 4> newColor = {{ static_cast<std::uint8_t>(color.red()),
+                                                        static_cast<std::uint8_t>(color.green()),
+                                                        static_cast<std::uint8_t>(color.blue()),
+                                                        static_cast<std::uint8_t>(color.alpha()) }};
+        this->signal<ColorChangedSignalType>(COLOR_CHANGED_SIG)->asyncEmit(newColor, key.toStdString());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onResetIntegerMapped(QWidget* widget)
+{
+    const QPushButton* button = qobject_cast<QPushButton*>(m_resetMapper->mapping(widget));
+    QSlider* slider           = dynamic_cast<QSlider*>(widget);
+    QSpinBox* spinbox         = dynamic_cast<QSpinBox*>(widget);
+    if (button && slider)
+    {
+        int value = slider->property("defaultValue").toInt();
+        slider->setValue(value);
+    }
+    else if (button && spinbox)
+    {
+        int value = spinbox->property("defaultValue").toInt();
+        spinbox->setValue(value);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::onResetDoubleMapped(QWidget* widget)
+{
+    const QPushButton* button = qobject_cast<QPushButton*>(m_resetMapper->mapping(widget));
+    QDoubleSpinBox* spinbox   = qobject_cast<QDoubleSpinBox*>(widget);
+
+    if (button && spinbox)
+    {
+        const QString key  = spinbox->property("key").toString();
+        const double value = spinbox->property("defaultValue").toDouble();
+        const int count    = spinbox->property("count").toInt();
+        SLM_ASSERT("Invalid widgets count, must be <= 3", count <= 3);
+
+        if(count == 1)
+        {
+            QDoubleSpinBox* spin1 = spinbox->property("widget#0").value< QDoubleSpinBox*>();
+            spin1->setValue(value);
+
+            this->signal<DoubleChangedSignalType>(DOUBLE_CHANGED_SIG)->asyncEmit(value, key.toStdString());
+        }
+        else
+        {
+            QDoubleSpinBox* spin2 = spinbox->property("widget#1").value< QDoubleSpinBox*>();
+            spin2->setValue(value);
+
+            if(count == 2)
+            {
+                this->signal<Double2ChangedSignalType>(DOUBLE2_CHANGED_SIG)->asyncEmit(value, value, key.toStdString());
+            }
+            else
+            {
+                QDoubleSpinBox* spin3 = spinbox->property("widget#2").value< QDoubleSpinBox*>();
+                spin3->setValue(value);
+
+                this->signal<Double3ChangedSignalType>(DOUBLE3_CHANGED_SIG)->asyncEmit(value, value, value,
+                                                                                       key.toStdString());
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+QPushButton* SParameters::createResetButton()
+{
+    QPushButton* resetButton = new QPushButton( "R" );
+    resetButton->setFocusPolicy(Qt::NoFocus);
+    resetButton->setToolTip("Reset to the default value.");
+    resetButton->setMaximumWidth(20);
+
+    // Connect reset button to the slider
+    QObject::connect(resetButton, SIGNAL(clicked()), m_resetMapper, SLOT(map()));
+
+    return resetButton;
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::createBoolWidget(QGridLayout& layout, int row,
+                                   const std::string& key,
+                                   const std::string& defaultValue)
+{
+    QCheckBox* checkbox = new QCheckBox();
+    checkbox->setTristate(false);
+
+    if(defaultValue == "true")
+    {
+        checkbox->setCheckState(Qt::Checked);
+
+        this->signal<BooleanChangedSignalType>(BOOLEAN_CHANGED_SIG)->asyncEmit(true, key);
+    }
+    else
+    {
+        this->signal<BooleanChangedSignalType>(BOOLEAN_CHANGED_SIG)->asyncEmit(false, key);
+    }
+
+    checkbox->setProperty("key", QString(key.c_str()));
+    checkbox->setProperty("defaultValue", checkbox->checkState());
+
+    // Reset button
+    QPushButton* resetButton = this->createResetButton();
+
+    layout.addWidget(checkbox, row, 2);
+    layout.addWidget(resetButton, row, 5);
+
+    QObject::connect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(onChangeBoolean(int)));
+
+    // Connect reset button to the slider
+    m_resetMapper->setMapping(resetButton, checkbox);
+    connect(m_resetMapper, SIGNAL(mapped(QWidget*)), this, SLOT(onResetBooleanMapped(QWidget*)));
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::createColorWidget(QGridLayout& layout, int row, const std::string& key,
+                                    const std::string& defaultValue)
+{
+    // Reset button
+    QPushButton* resetButton = this->createResetButton();
+
+    QPushButton* colourButton = new QPushButton("Color");
+    colourButton->setToolTip(tr("Selected color"));
+    colourButton->setMinimumSize (120,35);
+
+    std::string colorStr = "#ffffffff";
+    if(!defaultValue.empty())
+    {
+        std::uint8_t color[4];
+
+        ::fwDataTools::Color::hexaStringToRGBA(defaultValue, color);
+
+        const std::array<std::uint8_t, 4> newColor = {{ color[0], color[1], color[2], color[3] }};
+        this->signal<ColorChangedSignalType>(COLOR_CHANGED_SIG)->asyncEmit(newColor, key);
+        colorStr = defaultValue;
+    }
+
+    std::uint8_t color[4];
+    ::fwDataTools::Color::hexaStringToRGBA(colorStr, color);
+
+    const int iconSize = colourButton->style()->pixelMetric(QStyle::PM_LargeIconSize);
+    QPixmap pix(iconSize, iconSize);
+
+    QColor colorQt(color[0], color[1], color[2], color[3]);
+    pix.fill(colorQt);
+
+    colourButton->setIcon(QIcon(pix));
+
+    colourButton->setProperty("key", QString(key.c_str()));
+//    colourButton->setProperty("defaultValue", QVariant::fromValue< QColor>(colorQt));
+    colourButton->setProperty("defaultValue", colorQt);
+    colourButton->setProperty("color", colorQt);
+
+    layout.addWidget(colourButton, row, 2);
+    layout.addWidget(resetButton, row, 5);
+
+    QObject::connect(colourButton, SIGNAL(clicked ()), this, SLOT(onColorButton( )));
+
+    // Connect reset button to the button
+    m_resetMapper->setMapping(resetButton, colourButton);
+    connect(m_resetMapper, SIGNAL(mapped(QWidget*)), this, SLOT(onResetColorMapped(QWidget*)));
+}
+
+//-----------------------------------------------------------------------------
+
+void SParameters::createDoubleWidget(QGridLayout& layout, int row, const std::string& key,
+                                     double defaultValue, double min, double max, int count)
+{
+    // Reset button
+    QPushButton* resetButton = this->createResetButton();
+
+    layout.addWidget(resetButton, row, 5);
+
+    // Connect reset button to the slider
+    connect(m_resetMapper, SIGNAL(mapped(QWidget*)), this, SLOT(onResetDoubleMapped(QWidget*)));
+
+    QDoubleSpinBox* spinboxes[3];
+
+    // Spinboxes
+    for(int i = 0; i < count; ++i)
+    {
+        QDoubleSpinBox* spinbox = new QDoubleSpinBox();
+        spinboxes[i] = spinbox;
+
+        spinbox->setValue(defaultValue);
+        this->signal<DoubleChangedSignalType>(DOUBLE_CHANGED_SIG)->asyncEmit(defaultValue, key);
+
+        spinbox->setMinimum(min);
+        spinbox->setMaximum(max);
+
+        spinbox->setSingleStep((spinbox->maximum() - spinbox->minimum()) / 100.);
+
+        spinbox->setProperty("key", QString(key.c_str()));
+        spinbox->setProperty("count", count);
+        spinbox->setProperty("defaultValue", spinbox->value());
+
+        layout.addWidget(spinbox, row, 2 + i);
+
+        QObject::connect(spinbox, SIGNAL(valueChanged(double)), this, SLOT(onChangeDouble(double)));
+        m_resetMapper->setMapping(resetButton, spinbox);
+    }
+
+    // Set a property with a pointer on each member of the group
+    for(int i = 0; i < count; ++i)
+    {
+        for(int j = 0; j < count; ++j)
+        {
+            const std::string propName = std::string("widget#") + std::to_string(j);
+            spinboxes[i]->setProperty(propName.c_str(), QVariant::fromValue< QDoubleSpinBox*>(spinboxes[j]));
+        }
+    }
+}
+
+
+//-----------------------------------------------------------------------------
+
+void SParameters::createIntegerSliderWidget(QGridLayout& layout, int row, const std::string& key,
+                                            int defaultValue, int min, int max)
+{
+    // Reset button
+    QPushButton* resetButton = this->createResetButton();
+
+    QSlider* slider = new QSlider(Qt::Horizontal);
+    slider->setMinimum(min);
+    slider->setMaximum(max);
+    slider->setValue(defaultValue);
+
+    this->signal<IntegerChangedSignalType>(INTEGER_CHANGED_SIG)->asyncEmit(defaultValue, key);
+
+    QFont font;
+    font.setPointSize(7);
+    font.setItalic(true);
+
+    QLabel* minValueLabel = new QLabel();
+    minValueLabel->setFont(font);
+    minValueLabel->setText(QString::number(slider->minimum()));
+    minValueLabel->setToolTip("Minimum value.");
+
+    QLabel* maxValueLabel = new QLabel();
+    maxValueLabel->setFont(font);
+    maxValueLabel->setText(QString::number(slider->maximum()));
+    maxValueLabel->setToolTip("Maximum value.");
+
+    QLabel* valueLabel = new QLabel();
+    valueLabel->setStyleSheet("QLabel { font: bold; }");
+    valueLabel->setText(QString("%1").arg(slider->value()));
+    valueLabel->setToolTip("Current value.");
+
+    layout.addWidget( minValueLabel, row, 1 );
+    layout.addWidget( slider, row, 2 );
+    layout.addWidget( maxValueLabel, row, 3 );
+    layout.addWidget( valueLabel, row, 4);
+    layout.addWidget( resetButton, row, 5);
+
+    slider->setProperty("key", QString(key.c_str()));
+    slider->setProperty("count", 1);
+    slider->setProperty("defaultValue", slider->value());
+
+    // Connect slider value with our editor
+    QObject::connect(slider, SIGNAL(valueChanged(int)), this, SLOT(onChangeInteger(int)));
+
+    // Connect slider value to the label
+    QObject::connect(slider, SIGNAL(valueChanged(int)), m_signalMapper, SLOT(map()));
+    m_signalMapper->setMapping(slider, valueLabel);
+    connect(m_signalMapper, SIGNAL(mapped(QWidget*)), this, SLOT(onSliderMapped(QWidget*)));
+
+    m_resetMapper->setMapping(resetButton, slider);
+    connect(m_resetMapper, SIGNAL(mapped(QWidget*)), this, SLOT(onResetIntegerMapped(QWidget*)));
+
+    const std::string propName = std::string("widget#0");
+    slider->setProperty(propName.c_str(), QVariant::fromValue< QSlider*>(slider));
+}
+
+
+//-----------------------------------------------------------------------------
+
+void SParameters::createIntegerSpinWidget(QGridLayout& layout, int row, const std::string& key,
+                                          int defaultValue, int min, int max, int count)
+{
+    // Reset button
+    QPushButton* resetButton = this->createResetButton();
+
+    layout.addWidget(resetButton, row, 5);
+
+    QSpinBox* spinboxes[3];
+
+    // Spinboxes
+    for(int i = 0; i < count; ++i)
+    {
+        QSpinBox* spinbox = new QSpinBox();
+        spinboxes[i] = spinbox;
+
+        spinbox->setMinimum(min);
+        spinbox->setMaximum(max);
+        spinbox->setValue(defaultValue);
+
+        this->signal<IntegerChangedSignalType>(INTEGER_CHANGED_SIG)->asyncEmit(defaultValue, key);
+
+        spinbox->setProperty("key", QString(key.c_str()));
+        spinbox->setProperty("count", count);
+        spinbox->setProperty("defaultValue", spinbox->value());
+
+        layout.addWidget(spinbox, row, i + 2);
+
+        // Connect spinbox value with our editor
+        QObject::connect(spinbox, SIGNAL(valueChanged(int)), this, SLOT(onChangeInteger(int)));
+
+        m_resetMapper->setMapping(resetButton, spinbox);
+        connect(m_resetMapper, SIGNAL(mapped(QWidget*)), this, SLOT(onResetIntegerMapped(QWidget*)));
+    }
+
+    // Set a property with a pointer on each member of the group
+    for(int i = 0; i < count; ++i)
+    {
+        for(int j = 0; j < count; ++j)
+        {
+            const std::string propName = std::string("widget#") + std::to_string(j);
+            spinboxes[i]->setProperty(propName.c_str(), QVariant::fromValue< QSpinBox*>(spinboxes[j]));
+        }
+    }
+}
+//-----------------------------------------------------------------------------
+
+}   //namespace editor
+}   //namespace guiQt
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SSelectionMenuButton.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSelectionMenuButton.cpp
new file mode 100644
index 0000000..39f1ffc
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSelectionMenuButton.cpp
@@ -0,0 +1,220 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "guiQt/editor/SSelectionMenuButton.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <QAction>
+#include <QMenu>
+#include <QPushButton>
+#include <QString>
+#include <QVBoxLayout>
+#include <QWidget>
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/convenience.hpp>
+
+namespace guiQt
+{
+namespace editor
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::guiQt::editor::SSelectionMenuButton, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType s_SELECTED_SIG = "selected";
+
+static const ::fwCom::Slots::SlotKeyType s_SET_ENABLED_SIG = "setEnabled";
+static const ::fwCom::Slots::SlotKeyType s_SENABLE_SIG     = "enable";
+static const ::fwCom::Slots::SlotKeyType s_DISABLE_SIG     = "disable";
+
+SSelectionMenuButton::SSelectionMenuButton() throw() :
+    m_text(">"),
+    m_selection(0)
+{
+    m_sigSelected = newSignal < SelectedSignalType >(s_SELECTED_SIG);
+
+    newSlot(s_SET_ENABLED_SIG, &SSelectionMenuButton::setEnabled, this);
+    newSlot(s_SENABLE_SIG, &SSelectionMenuButton::enable, this);
+    newSlot(s_DISABLE_SIG, &SSelectionMenuButton::disable, this);
+}
+
+//------------------------------------------------------------------------------
+
+SSelectionMenuButton::~SSelectionMenuButton() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::configuring() throw(fwTools::Failed)
+{
+    this->initialize();
+
+    Configuration txtCfg = m_configuration->findConfigurationElement("text");
+    if(txtCfg)
+    {
+        m_text = txtCfg->getValue();
+    }
+    Configuration toolTipCfg = m_configuration->findConfigurationElement("toolTip");
+    if(toolTipCfg)
+    {
+        m_toolTip = toolTipCfg->getValue();
+    }
+
+    Configuration selectedCfg = m_configuration->findConfigurationElement("selected");
+    if(selectedCfg)
+    {
+        m_selection = std::stoi(selectedCfg->getValue());
+    }
+
+    Configuration itemsCfg = m_configuration->findConfigurationElement("items");
+    SLM_ASSERT("Missing 'items' config", itemsCfg);
+
+    std::vector < Configuration > itemCfgs = itemsCfg->find("item");
+    SLM_ASSERT("At least two items must be defined", itemCfgs.size() >= 2);
+    for (auto itemCfg : itemCfgs)
+    {
+        SLM_ASSERT("Missing 'text' attribute", itemCfg->hasAttribute("text"));
+        SLM_ASSERT("Missing 'value' attribute", itemCfg->hasAttribute("value"));
+        std::string txt = itemCfg->getExistingAttributeValue("text");
+        std::string val = itemCfg->getExistingAttributeValue("value");
+        int value       = std::stoi(val);
+        m_items.push_back(std::make_pair(value, txt));
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::starting() throw(::fwTools::Failed)
+{
+    this->create();
+
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
+
+    m_dropDownButton = new QPushButton( QString::fromStdString(m_text), container );
+    m_dropDownButton->setToolTip( QString::fromStdString(m_toolTip));
+//    m_dropDownButton->setMaximumWidth(40);
+
+    m_pDropDownMenu = new QMenu(container);
+    m_actionGroup   = new QActionGroup(m_pDropDownMenu);
+
+    for (auto item : m_items)
+    {
+        QAction* action = new QAction(QString::fromStdString(item.second), m_pDropDownMenu);
+        action->setCheckable(true);
+        action->setData(QVariant(item.first));
+        m_actionGroup->addAction(action);
+        m_pDropDownMenu->addAction(action);
+
+        if (item.first == m_selection)
+        {
+            action->setChecked(true);
+        }
+    }
+    QObject::connect(m_actionGroup, SIGNAL(triggered(QAction*)), this, SLOT(onSelection(QAction*)));
+    m_dropDownButton->setMenu(m_pDropDownMenu);
+
+    QVBoxLayout* vLayout = new QVBoxLayout(container);
+    vLayout->addWidget( m_dropDownButton);
+    vLayout->setContentsMargins(0,0,0,0);
+
+    container->setLayout( vLayout );
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::stopping() throw(::fwTools::Failed)
+{
+    QObject::connect(m_actionGroup, SIGNAL(triggered(QAction*)), this, SLOT(onSelection(QAction*)));
+    for (QAction* action : m_actionGroup->actions())
+    {
+        m_actionGroup->removeAction(action);
+    }
+
+    this->getContainer()->clean();
+    this->destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::swapping() throw(::fwTools::Failed)
+{
+
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::info( std::ostream& _sstream )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::onSelection(QAction* action)
+{
+    if (action->isChecked())
+    {
+        int value = action->data().toInt();
+        m_sigSelected->asyncEmit(value);
+        return;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::setEnabled(bool enabled)
+{
+    m_dropDownButton->setEnabled(enabled);
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::enable()
+{
+    this->setEnabled(true);
+}
+
+//------------------------------------------------------------------------------
+
+void SSelectionMenuButton::disable()
+{
+    this->setEnabled(false);
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace editor
+} // namespace guiQt
+
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SSignalButton.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSignalButton.cpp
new file mode 100644
index 0000000..1517aa5
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSignalButton.cpp
@@ -0,0 +1,252 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "guiQt/editor/SSignalButton.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <QVBoxLayout>
+
+#include <string>
+
+
+namespace guiQt
+{
+namespace editor
+{
+
+static const ::fwCom::Signals::SignalKeyType s_CLICKED_SIG = "clicked";
+static const ::fwCom::Signals::SignalKeyType s_TOGGLED_SIG = "toggled";
+
+static const ::fwCom::Slots::SlotKeyType s_SET_CHECKED_SLOT = "setChecked";
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::guiQt::editor::SSignalButton, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SSignalButton::SSignalButton() throw() :
+    m_checkable(false),
+    m_checkAtStart(false),
+    m_iconWidth(0),
+    m_iconHeight(0)
+{
+    m_sigClicked = newSignal< ClickedSignalType >(s_CLICKED_SIG);
+    m_sigToggled = newSignal< ToggledSignalType >(s_TOGGLED_SIG);
+
+    newSlot(s_SET_CHECKED_SLOT, &SSignalButton::setChecked, this);
+}
+
+//-----------------------------------------------------------------------------
+
+SSignalButton::~SSignalButton() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::starting() throw(::fwTools::Failed)
+{
+    this->create();
+
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
+
+    QVBoxLayout* layout = new QVBoxLayout();
+    m_button = new QPushButton(QString::fromStdString(m_text));
+    layout->addWidget(m_button);
+    container->setLayout(layout);
+
+    if (!m_icon.empty())
+    {
+        m_button->setIcon(QIcon(QString::fromStdString(m_icon.string())));
+    }
+    if (m_iconWidth > 0 && m_iconHeight > 0)
+    {
+        m_button->setIconSize(QSize(m_iconWidth, m_iconHeight));
+    }
+
+    if (m_checkable)
+    {
+        m_button->setCheckable(true);
+
+        if (m_checkAtStart)
+        {
+            m_button->setChecked(true);
+            if (!m_text2.empty())
+            {
+                m_button->setText(QString::fromStdString(m_text2));
+            }
+            if (!m_icon2.empty())
+            {
+                m_button->setIcon(QIcon(QString::fromStdString(m_icon2.string())));
+            }
+        }
+    }
+
+    QObject::connect(m_button.data(), &QPushButton::clicked, this, &SSignalButton::onClicked );
+    QObject::connect(m_button.data(), &QPushButton::toggled, this, &SSignalButton::onToggled );
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::stopping() throw(::fwTools::Failed)
+{
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    SLM_ASSERT("container not instanced", qtContainer->getQtContainer());
+
+    // deletes contained widgets
+    qtContainer->clean();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::configuring()  throw ( ::fwTools::Failed )
+{
+    this->initialize();
+
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("config");
+    SLM_ASSERT("'config' tag is missing", config);
+
+    ::fwRuntime::ConfigurationElement::sptr checkableCfg = config->findConfigurationElement("checkable");
+    if (checkableCfg)
+    {
+        SLM_ASSERT("'checkable' value must be 'true' or 'false'",
+                   checkableCfg->getValue() == "true" || checkableCfg->getValue() == "false");
+        m_checkable = (checkableCfg->getValue() == "true");
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr txtCfg = config->findConfigurationElement("text");
+    if (txtCfg)
+    {
+        m_text = txtCfg->getValue();
+    }
+    ::fwRuntime::ConfigurationElement::sptr iconCfg = config->findConfigurationElement("icon");
+    if (iconCfg)
+    {
+        m_icon = ::boost::filesystem::path(iconCfg->getValue());
+    }
+
+
+    ::fwRuntime::ConfigurationElement::sptr txt2Cfg = config->findConfigurationElement("text2");
+    if (txt2Cfg)
+    {
+        SLM_ASSERT("Button must be 'checkable' in order to defined 'text2'", m_checkable);
+        SLM_ASSERT("'text' tag must be defined in order to specify 'text2'", !m_text.empty());
+        m_text2 = txt2Cfg->getValue();
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr icon2Cfg = config->findConfigurationElement("icon2");
+    if (icon2Cfg)
+    {
+        SLM_ASSERT("Button must be 'checkable' in order to defined 'icon2'", m_checkable);
+        SLM_ASSERT("'icon' tag must be defined in order to specify 'icon2'", iconCfg);
+        m_icon2 = ::boost::filesystem::path(icon2Cfg->getValue());
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr checkedCfg = config->findConfigurationElement("checked");
+    if (checkedCfg)
+    {
+        SLM_ASSERT("Button must be 'checkable' in order to defined 'checked'", m_checkable);
+        SLM_ASSERT("'checked' value must be 'true' or 'false'",
+                   checkedCfg->getValue() == "true" || checkedCfg->getValue() == "false");
+        m_checkAtStart = (checkedCfg->getValue() == "true");
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr widthCfg = config->findConfigurationElement("iconWidth");
+    if (widthCfg)
+    {
+        m_iconWidth = std::stoi(widthCfg->getValue());
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr heightCfg = config->findConfigurationElement("iconHeight");
+    if (heightCfg)
+    {
+        m_iconHeight = std::stoi(heightCfg->getValue());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::onClicked()
+{
+    m_sigClicked->asyncEmit();
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::onToggled(bool toogled)
+{
+    this->setChecked(toogled);
+    m_sigToggled->asyncEmit(toogled);
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::setChecked(bool checked)
+{
+    if (checked)
+    {
+        if (!m_text2.empty())
+        {
+            m_button->setText(QString::fromStdString(m_text2));
+        }
+        if (!m_icon2.empty())
+        {
+            m_button->setIcon(QIcon(QString::fromStdString(m_icon2.string())));
+        }
+    }
+    else
+    {
+        if (!m_text.empty())
+        {
+            m_button->setText(QString::fromStdString(m_text));
+        }
+        if (!m_icon.empty())
+        {
+            m_button->setIcon(QIcon(QString::fromStdString(m_icon.string())));
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::updating() throw ( ::fwTools::Failed )
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void SSignalButton::info( std::ostream &_sstream )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace editor
+} // namespace gui
+
diff --git a/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp
new file mode 100644
index 0000000..2ce78fe
--- /dev/null
+++ b/Bundles/LeafUI/guiQt/src/guiQt/editor/SSlider.cpp
@@ -0,0 +1,353 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "guiQt/editor/SSlider.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Object.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <QHBoxLayout>
+#include <QIntValidator>
+#include <QString>
+#include <QTime>
+
+#include <chrono>
+
+namespace guiQt
+{
+namespace editor
+{
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::guiQt::editor::SSlider, ::fwData::Object );
+
+
+const ::fwCom::Signals::SignalKeyType SSlider::s_VALUE_CHANGED_SIG = "valueChanged";
+
+const ::fwCom::Slots::SlotKeyType SSlider::s_SET_VALUE_SLIDER_SLOT     = "setValue";
+const ::fwCom::Slots::SlotKeyType SSlider::s_SET_MIN_VALUE_SLIDER_SLOT = "setMinValue";
+const ::fwCom::Slots::SlotKeyType SSlider::s_SET_MAX_VALUE_SLIDER_SLOT = "setMaxValue";
+
+//------------------------------------------------------------------------------
+
+SSlider::SSlider() throw()
+    : m_value(0),
+      m_minValue(0),
+      m_maxValue(100),
+      m_defaultValue(0),
+      m_text(""),
+      m_isUpdatedOnRelease(false),
+      m_hasResetButton(false),
+      m_hasEditBox(false),
+      m_sliderPressed(false)
+{
+    newSlot(s_SET_VALUE_SLIDER_SLOT, &SSlider::setValue, this);
+    newSlot(s_SET_MIN_VALUE_SLIDER_SLOT, &SSlider::setMinValue, this);
+    newSlot(s_SET_MAX_VALUE_SLIDER_SLOT, &SSlider::setMaxValue, this);
+
+    m_sigValueChanged = newSignal<ValueChangedSignalType>(s_VALUE_CHANGED_SIG);
+}
+
+//------------------------------------------------------------------------------
+
+SSlider::~SSlider() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+void SSlider::configuring() throw(fwTools::Failed)
+{
+    this->initialize();
+
+    // VALUE
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("value");
+        if(config)
+        {
+            m_value = ::boost::lexical_cast<int>(config->getValue());
+        }
+    }
+
+    // DEFAULT VALUE
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("defaultValue");
+        if(config)
+        {
+            m_defaultValue = ::boost::lexical_cast<int>(config->getValue());
+        }
+    }
+
+    // RESET BUTTON
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("resetButton");
+        if(config)
+        {
+            m_hasResetButton = (config->getValue() == "true");
+        }
+    }
+
+
+    // UPDATE ON RELEASE
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("updateOnRelease");
+        if(config)
+        {
+            m_isUpdatedOnRelease = (config->getValue() == "true");
+        }
+    }
+
+    // EDIT BOX
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("editBox");
+        if(config)
+        {
+            m_hasEditBox = (config->getValue() == "true");
+        }
+    }
+
+    // TEXT
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("text");
+        if(config)
+        {
+            m_text = QString(config->getValue().c_str());
+        }
+    }
+
+    // RANGE
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("range");
+        if(config)
+        {
+            ::fwRuntime::ConfigurationElement::sptr minCfg = config->findConfigurationElement("min");
+            ::fwRuntime::ConfigurationElement::sptr maxCfg = config->findConfigurationElement("max");
+            SLM_ASSERT("Missing min and max configuration", minCfg && maxCfg);
+
+            m_minValue = ::boost::lexical_cast<int>(minCfg->getValue());
+            m_maxValue = ::boost::lexical_cast<int>(maxCfg->getValue());
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+void SSlider::starting() throw(::fwTools::Failed)
+{
+    this->create();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer =
+        ::fwGuiQt::container::QtContainer::dynamicCast(this->getContainer());
+    QWidget* const container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
+
+    QPointer<QHBoxLayout> layout = new QHBoxLayout();
+    m_valueSlider = new QSlider(Qt::Horizontal);
+    m_valueSlider->setRange(m_minValue, m_maxValue);
+    m_valueSlider->setValue(m_value);
+
+    QMetaObject::Connection isConnected;
+    isConnected = QObject::connect(m_valueSlider, SIGNAL(sliderPressed()), this, SLOT(sliderPressed()));
+    SLM_ASSERT("sliderPressed Signal failed to connect to sliderPressed Slot.", isConnected);
+
+    isConnected = QObject::connect(m_valueSlider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
+    SLM_ASSERT("valueChanged Signal failed to connect to setValue Slot.", isConnected);
+
+    isConnected = QObject::connect(m_valueSlider, SIGNAL(sliderReleased()), this, SLOT(changeValue()));
+    SLM_ASSERT("sliderReleased Signal failed to connect to changeValue Slot.", isConnected);
+
+    m_textLabel = new QLabel();
+    m_textLabel->setText(m_text);
+
+    if( !m_hasEditBox )
+    {
+        m_valueLabel = new QLabel();
+        m_valueLabel->setText(QString::number(m_value));
+    }
+
+    m_minValueLabel = new QLabel();
+    m_minValueLabel->setText(QString::number(m_minValue));
+
+    m_maxValueLabel = new QLabel();
+    m_maxValueLabel->setText(QString::number(m_maxValue));
+
+    layout->addWidget( m_textLabel );
+
+    if( !m_hasEditBox )
+    {
+        layout->addWidget( m_valueLabel );
+    }
+    layout->addWidget( m_minValueLabel );
+    layout->addWidget( m_valueSlider );
+    layout->addWidget( m_maxValueLabel );
+
+    if( m_hasEditBox )
+    {
+        m_valueEdit = new QLineEdit("");
+        m_valueEdit->setMaximumWidth( 70 );
+        m_valueEdit->setInputMask("#0000");
+
+        isConnected = QObject::connect( m_valueEdit, SIGNAL( returnPressed()), this, SLOT(editValue()) );
+        SLM_ASSERT("editingFinished Signal failed to connect to onTextChanged Slot.", isConnected);
+
+        layout->addWidget( m_valueEdit );
+    }
+
+    if( m_hasResetButton )
+    {
+        m_resetButton = new QPushButton("R");  // "R" is codename for Reset !
+
+        isConnected = QObject::connect(m_resetButton, SIGNAL(clicked()), this, SLOT(resetValue()));
+        SLM_ASSERT("clicked Signal failed to connect to resetValue Slot.", isConnected);
+
+        layout->addWidget( m_resetButton );
+
+    }
+
+    container->setLayout(layout);
+
+    this->resetValue();
+}
+
+
+//------------------------------------------------------------------------------
+
+void SSlider::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    QObject::disconnect(m_valueSlider, SIGNAL(valueChanged(int)), this, SLOT(setValue(int)));
+
+    this->getContainer()->clean();
+    this->destroy();
+}
+//------------------------------------------------------------------------------
+
+void SSlider::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSlider::swapping() throw(::fwTools::Failed)
+{
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+void SSlider::sliderPressed()
+{
+    m_sliderPressed = true;
+}
+
+//------------------------------------------------------------------------------
+void SSlider::resetValue()
+{
+    setValue( m_defaultValue, true );
+}
+
+//------------------------------------------------------------------------------
+void SSlider::changeValue()
+{
+    SLM_ASSERT( "m_valueSlider must not be null",        nullptr != m_valueSlider );
+    SLM_ASSERT( "m_sigValueChanged must not be null",    nullptr != m_sigValueChanged );
+
+    int value = m_valueSlider->sliderPosition();
+    m_valueSlider->setSliderPosition(value);
+
+    // we use either an edit box or a label to display the current value
+    if( !m_hasEditBox )
+    {
+        SLM_ASSERT("m_valueLabel must not be null", nullptr != m_valueLabel);
+
+        m_valueLabel->setText(QString::number(value));
+    }
+    else
+    {
+        SLM_ASSERT("m_valueEdit must not be null", nullptr != m_valueEdit);
+
+        m_valueEdit->setText(QString::number(value));
+    }
+
+    // Notify the new position
+    m_sigValueChanged->asyncEmit(value);
+
+    m_sliderPressed = false;
+}
+
+//------------------------------------------------------------------------------
+
+void SSlider::editValue()
+{
+    SLM_ASSERT("m_valueEdit must not be null", false );// && nullptr != m_valueEdit);
+
+    QString strValue = m_valueEdit->text();
+
+    setValue( strValue.toInt(), true );
+}
+
+//------------------------------------------------------------------------------
+
+void SSlider::setValue( int value, bool _bForced )
+{
+    SLM_ASSERT("m_valueSlider must not be null", nullptr != m_valueSlider);
+
+    // we use either an edit box or a label to display the current value
+    if( !m_hasEditBox )
+    {
+        SLM_ASSERT("m_valueLabel must not be null", nullptr != m_valueLabel);
+
+        m_valueLabel->setText(QString::number(value));
+    }
+    else
+    {
+        SLM_ASSERT("m_valueEdit must not be null", nullptr != m_valueEdit);
+
+        m_valueEdit->setText(QString::number(value));
+    }
+
+    if( !m_sliderPressed || !m_isUpdatedOnRelease || _bForced )
+    {
+        m_value = value;
+        m_valueSlider->setValue(value);
+
+        // Notify the new position
+        m_sigValueChanged->asyncEmit(value);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSlider::setMinValue(int value)
+{
+    SLM_ASSERT("m_valueSlider must not be null", nullptr != m_valueSlider);
+    SLM_ASSERT("m_valueSlider must not be null", nullptr != m_valueSlider);
+
+    m_minValue = value;
+    m_valueSlider->setMinimum( value );
+    m_minValueLabel->setText( QString::number(value));
+}
+
+//------------------------------------------------------------------------------
+
+void SSlider::setMaxValue(int value)
+{
+    SLM_ASSERT("m_valueSlider must not be null", nullptr != m_valueSlider);
+    SLM_ASSERT("m_maxValueLabel must not be null", nullptr != m_maxValueLabel);
+
+    m_maxValue = value;
+    m_valueSlider->setMaximum( value );
+    m_maxValueLabel->setText( QString::number(value));
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace editor
+} //namespace guiQt
diff --git a/Bundles/LeafUI/guiQt/test/CMakeLists.txt b/Bundles/LeafUI/guiQt/test/CMakeLists.txt
index b259bca..76b1ae6 100644
--- a/Bundles/LeafUI/guiQt/test/CMakeLists.txt
+++ b/Bundles/LeafUI/guiQt/test/CMakeLists.txt
@@ -1,10 +1,21 @@
 
 fwLoadProperties()
 
-find_package (Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+
+fwInclude(
+    ${CPPUNIT_INCLUDE_DIR}
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
+
 
diff --git a/Bundles/LeafUI/guiQt/test/Properties.cmake b/Bundles/LeafUI/guiQt/test/Properties.cmake
index 98841ca..3b6a122 100644
--- a/Bundles/LeafUI/guiQt/test/Properties.cmake
+++ b/Bundles/LeafUI/guiQt/test/Properties.cmake
@@ -2,7 +2,7 @@
 set( NAME guiQtTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwTest fwCore fwTools fwData fwGuiQt )
-set( REQUIREMENTS dataReg servicesReg gui guiQt io ioVTK visu visuVTKQt vtkSimpleNegato Tuto01Basic Tuto02DataServiceBasic )
+set( DEPENDENCIES fwTest fwCore fwData fwRuntime fwServices)
+set( REQUIREMENTS dataReg servicesReg gui guiQt io ioVTK visuVTKQt vtkSimpleNegato Tuto01Basic Tuto02DataServiceBasic appXml )
 
 set(CPPUNITTEST_OPTIONS BUNDLE guiQt WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafUI/guiQt/test/cppunit.options b/Bundles/LeafUI/guiQt/test/cppunit.options
deleted file mode 100644
index f4c0ab4..0000000
--- a/Bundles/LeafUI/guiQt/test/cppunit.options
+++ /dev/null
@@ -1,26 +0,0 @@
-CLASSTEST=[
-          'GuiQtTest',
-          ]
-
-USE = ['qtCore']
-LIB = ['fwData_0-1','fwTools_0-1','fwCore_0-1','fwGuiQt_0-1', 'fwTest_0-1']
-
-BUNDLES = []
-
-REQUIREMENTS = [
-                'dataReg_0-1',
-                'servicesReg_0-1',
-                'gui_0-1',
-                'guiQt_0-1',
-                'io_0-1',
-                'ioVTK_0-1',
-                'visu_0-1',
-                'visuVTKQt_0-1',
-                'vtkSimpleNegato_0-1',
-                'Tuto01Basic_0-1',
-                'Tuto02DataServiceBasic_0-1',
-                ] 
-
-CONSOLE = 'yes'
-
-LOGLEVEL='trace'
diff --git a/Bundles/LeafUI/guiQt/test/tu/include/GuiQtTest.hpp b/Bundles/LeafUI/guiQt/test/tu/include/GuiQtTest.hpp
index 9dd2caa..ea52c78 100644
--- a/Bundles/LeafUI/guiQt/test/tu/include/GuiQtTest.hpp
+++ b/Bundles/LeafUI/guiQt/test/tu/include/GuiQtTest.hpp
@@ -1,18 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_TEST_TU_MESHGENERATORTEST_HPP_
-#define _FWDATATOOLS_TEST_TU_MESHGENERATORTEST_HPP_
+#ifndef __GUIQT_UT_GUIQTTEST_HPP__
+#define __GUIQT_UT_GUIQTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
-#include <fwData/Mesh.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Array.hpp>
-
 namespace guiQt
 {
 namespace ut
@@ -23,11 +19,11 @@ namespace ut
  */
 class GuiQtTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( GuiQtTest );
-    CPPUNIT_TEST( testDefaultFrame );
-    CPPUNIT_TEST( testTuto01 );
-    CPPUNIT_TEST( testTuto02 );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( GuiQtTest );
+CPPUNIT_TEST( testDefaultFrame );
+CPPUNIT_TEST( testTuto01 );
+CPPUNIT_TEST( testTuto02 );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -43,4 +39,4 @@ public:
 } //namespace ut
 } //namespace guiQt
 
-#endif //_FWDATATOOLS_TEST_TU_MESHGENERATORTEST_HPP_
+#endif //__GUIQT_UT_GUIQTTEST_HPP__
diff --git a/Bundles/LeafUI/guiQt/test/tu/rc/profile.xml b/Bundles/LeafUI/guiQt/test/tu/rc/profile.xml
index 426d497..be39cc8 100644
--- a/Bundles/LeafUI/guiQt/test/tu/rc/profile.xml
+++ b/Bundles/LeafUI/guiQt/test/tu/rc/profile.xml
@@ -8,16 +8,14 @@
 
     <activate id="io" version="0-1" />
     <activate id="ioVTK" version="0-1" />
-    
-    <activate id="visu" version="0-1" />
+
     <activate id="visuVTK" version="0-1" />
     <activate id="visuVTKQt" version="0-1" />
     <activate id="vtkSimpleNegato" version="0-1" />
-    
+
     <activate id="Tuto01Basic" />
     <activate id="Tuto02DataServiceBasic" />
 
-    <start id="visuVTKQt" />
-    <start id="guiQt" />  
-    
+    <start id="guiQt" />
+
 </profile>
diff --git a/Bundles/LeafUI/guiQt/test/tu/src/GuiQtTest.cpp b/Bundles/LeafUI/guiQt/test/tu/src/GuiQtTest.cpp
index 63115b9..c67501e 100644
--- a/Bundles/LeafUI/guiQt/test/tu/src/GuiQtTest.cpp
+++ b/Bundles/LeafUI/guiQt/test/tu/src/GuiQtTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,12 +12,10 @@
 #include <fwRuntime/EConfigurationElement.hpp>
 #include <fwRuntime/profile/Profile.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include <fwGuiQt/App.hpp>
-
+#include <fwServices/macros.hpp>
+#include <fwServices/AppConfigManager2.hpp>
+#include <fwServices/registry/AppConfig2.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
 #include "GuiQtTest.hpp"
 
@@ -56,16 +54,17 @@ void GuiQtTest::testDefaultFrame()
     frameConfig.put("service.gui.frame.minSize.<xmlattr>.height", "600");
 
     ::fwServices::IService::sptr srv;
-    srv = ::fwServices::registry::ServiceFactory::getDefault()->create(  "::fwGui::IFrameSrv", "::gui::frame::DefaultFrame" );
+    srv = ::fwServices::registry::ServiceFactory::getDefault()->create(  "::fwGui::IFrameSrv",
+                                                                         "::gui::frame::SDefaultFrame" );
     CPPUNIT_ASSERT(srv);
 
-    ::fwServices::OSR::registerService( object , srv );
+    ::fwServices::OSR::registerService( object, srv );
 
-    srv->setConfiguration( frameConfig ) ;
+    srv->setConfiguration( frameConfig );
     srv->configure();
     srv->start();
 
-    QMainWindow *window = qobject_cast<QMainWindow *>(qApp->activeWindow());
+    QMainWindow* window = qobject_cast<QMainWindow*>(qApp->activeWindow());
 
     CPPUNIT_ASSERT(qApp);
     CPPUNIT_ASSERT(qApp->activeWindow());
@@ -80,9 +79,12 @@ void GuiQtTest::testDefaultFrame()
 
 void GuiQtTest::testTuto01()
 {
-    ::fwServices::AppConfigManager::sptr appConfigMng = ::fwServices::AppConfigManager::New();
-    ::fwRuntime::ConfigurationElement::csptr config = ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( "tutoBasicConfig" );
-    appConfigMng->setConfig( ::fwRuntime::ConfigurationElement::constCast( config ) );
+    std::vector<std::string> cfgs = ::fwServices::registry::AppConfig2::getDefault()->getAllConfigs();
+    CPPUNIT_ASSERT_MESSAGE("Missing available configuration", !cfgs.empty());
+
+    ::fwServices::AppConfigManager2::sptr appConfigMng = ::fwServices::AppConfigManager2::New();
+    appConfigMng->setConfig( "tutoBasicConfig" );
+
     appConfigMng->launch();
     appConfigMng->stopAndDestroy();
 }
@@ -91,9 +93,12 @@ void GuiQtTest::testTuto01()
 
 void GuiQtTest::testTuto02()
 {
-    ::fwServices::AppConfigManager::sptr appConfigMng = ::fwServices::AppConfigManager::New();
-    ::fwRuntime::ConfigurationElement::csptr config = ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( "tutoDataServiceBasicConfig" );
-    appConfigMng->setConfig( ::fwRuntime::ConfigurationElement::constCast( config ) );
+    std::vector<std::string> cfgs = ::fwServices::registry::AppConfig2::getDefault()->getAllConfigs();
+    CPPUNIT_ASSERT_MESSAGE("Missing available configuration", !cfgs.empty());
+
+    ::fwServices::AppConfigManager2::sptr appConfigMng = ::fwServices::AppConfigManager2::New();
+    appConfigMng->setConfig( "tutoDataServiceBasicConfig" );
+
     appConfigMng->launch();
     appConfigMng->stopAndDestroy();
 }
diff --git a/Bundles/LeafUI/guiWx/CMakeLists.txt b/Bundles/LeafUI/guiWx/CMakeLists.txt
deleted file mode 100644
index 20826ee..0000000
--- a/Bundles/LeafUI/guiWx/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-find_package(wxWidgets COMPONENTS core)
-if(wxWidgets_FOUND)
-    fwLoadProperties()
-    
-    fwUseForwardInclude(
-          fwActivities
-          fwGuiWx
-          fwRuntime
-          fwServices
-          fwTools
-          gui
-    )
-
-    find_package(Boost REQUIRED)
-    include(${wxWidgets_USE_FILE})
-
-    fwForwardInclude(${Boost_INCLUDE_DIRS} ${wxWidgets_INCLUDE_DIRS})
-    fwLink(${wxWidgets_LIBRARIES})
-else(wxWidgets_FOUND)
-    message(WARNING "Required package wxWidgets not found, bundle 'guiWx' disabled.")
-endif(wxWidgets_FOUND)
diff --git a/Bundles/LeafUI/guiWx/COPYING b/Bundles/LeafUI/guiWx/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/guiWx/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/guiWx/COPYING.LESSER b/Bundles/LeafUI/guiWx/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/guiWx/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/guiWx/Properties.cmake b/Bundles/LeafUI/guiWx/Properties.cmake
deleted file mode 100644
index 7fc0b51..0000000
--- a/Bundles/LeafUI/guiWx/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME guiWx )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwActivities fwComEd fwCore fwData fwDataCamp fwGui fwGuiWx fwRuntime fwServices fwTools gui )
-set( REQUIREMENTS  )
-
diff --git a/Bundles/LeafUI/guiWx/bin/build.options b/Bundles/LeafUI/guiWx/bin/build.options
deleted file mode 100644
index 99b65c5..0000000
--- a/Bundles/LeafUI/guiWx/bin/build.options
+++ /dev/null
@@ -1,17 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          'fwGuiWx_0-1',
-          ]
-USE     = ['wxCore','boost']
-BUNDLES = ['gui_0-1']
-
-
-
diff --git a/Bundles/LeafUI/guiWx/include/guiWx/Namespace.hpp b/Bundles/LeafUI/guiWx/include/guiWx/Namespace.hpp
deleted file mode 100644
index 19ba8a8..0000000
--- a/Bundles/LeafUI/guiWx/include/guiWx/Namespace.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIWXNAMESPACE_HPP_
-#define GUIWXNAMESPACE_HPP_
-
-/**
- * @brief       The namespace guiWx contains the basic services to build the application IHM with WxWidgets.
- * @namespace   guiWx
- * 
- * @date        2009-2010.
- *
- */
-namespace guiWx
-{
-
-}
-#endif /* GUIWXNAMESPACE_HPP_ */
diff --git a/Bundles/LeafUI/guiWx/include/guiWx/Plugin.hpp b/Bundles/LeafUI/guiWx/include/guiWx/Plugin.hpp
deleted file mode 100644
index 540b159..0000000
--- a/Bundles/LeafUI/guiWx/include/guiWx/Plugin.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUIWX_PLUGIN_HPP_
-#define _GUIWX_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
-
-#include "guiWx/config.hpp"
-
-namespace fwThread
-{
-    class Worker;
-} //namespace fwThread
-
-namespace guiWx
-{
-/**
- * 
- * @date    2009-2010.
- */
-class GUIWX_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-
-public:
-
-    /**
-     * @brief   destructor
-     */
-    GUIWX_API ~Plugin() throw();
-
-    // Overrides
-    GUIWX_API void start() throw(::fwRuntime::RuntimeException);
-
-    // Overrides
-    GUIWX_API void stop() throw();
-
-    GUIWX_API int run() throw();
-
-private:
-    SPTR(::fwThread::Worker) m_workerWx;
-};
-
-} // namespace guiWx
-
-#endif //_GUIWX_PLUGIN_HPP_
diff --git a/Bundles/LeafUI/guiWx/include/guiWx/config.hpp b/Bundles/LeafUI/guiWx/include/guiWx/config.hpp
deleted file mode 100644
index a6fd0b1..0000000
--- a/Bundles/LeafUI/guiWx/include/guiWx/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUIWX_CONFIG_HPP_
-#define _GUIWX_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef GUIWX_EXPORTS
-    #define GUIWX_API __declspec(dllexport)
-    #else
-    #define GUIWX_API __declspec(dllimport)
-    #endif
-
-    #define GUIWX_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef GUIWX_EXPORTS
-    #define GUIWX_API __attribute__ ((visibility("default")))
-    #define GUIWX_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define GUIWX_API __attribute__ ((visibility("hidden")))
-    #define GUIWX_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define GUIWX_API
-    #define GUIWX_CLASS_API
-
-#endif
-
-#endif //_GUIWX_CONFIG_HPP_
diff --git a/Bundles/LeafUI/guiWx/include/guiWx/editor/DummyEditor.hpp b/Bundles/LeafUI/guiWx/include/guiWx/editor/DummyEditor.hpp
deleted file mode 100644
index bdc2c4c..0000000
--- a/Bundles/LeafUI/guiWx/include/guiWx/editor/DummyEditor.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUIWX_EDITOR_DUMMYIEDITOR_HPP_
-#define _GUIWX_EDITOR_DUMMYIEDITOR_HPP_
-
-#include <wx/stattext.h>
-
-#include <fwTools/Failed.hpp>
-
-#include <gui/editor/IEditor.hpp>
-
-#include "guiWx/config.hpp"
-
-namespace gui
-{
-
-namespace editor
-{
-
-
-/**
- * @brief   Defines the service interface managing the basic editor service for object. Do nothing.
- * @class   DummyEditor
- * 
-
- * @date    2009.
- *
- * @todo ACH: This class has been created in order to build test application. Do we remove it now ??
- */
-class GUIWX_CLASS_API DummyEditor : public ::gui::editor::IEditor
-{
-
-public :
-
-
-    fwCoreServiceClassDefinitionsMacro ( (DummyEditor)(::gui::editor::IEditor) ) ;
-
-    /// Constructor. Do nothing.
-    GUIWX_API DummyEditor() throw() ;
-
-    /// Destructor. Do nothing.
-    GUIWX_API virtual ~DummyEditor() throw() ;
-
-protected:
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-    /**
-     * @brief This method launches the IEditor::starting method.
-     */
-    GUIWX_API virtual void starting() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief This method launches the IEditor::stopping method.
-     */
-    GUIWX_API virtual void stopping() throw( ::fwTools::Failed );
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUIWX_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) ;
-
-    /**
-     * @brief This method is used to update services. Do nothing.
-     */
-    GUIWX_API virtual void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the class parameters. Do nothing.
-    */
-    GUIWX_API virtual void configuring() throw( ::fwTools::Failed );
-
-    /**
-     * @brief This method is used to give information about the service. Do nothing.
-     */
-    GUIWX_API virtual void info(std::ostream &_sstream );
-
-    ///@}
-
-private:
-    /**
-     * @brief optional text
-     */
-    std::string m_text;
-    wxStaticText*  m_staticText;
-};
-
-}
-}
-
-#endif /*_GUIWX_EDITOR_DUMMYIEDITOR_HPP_*/
-
-
diff --git a/Bundles/LeafUI/guiWx/include/guiWx/editor/Namespace.hpp b/Bundles/LeafUI/guiWx/include/guiWx/editor/Namespace.hpp
deleted file mode 100644
index 9282467..0000000
--- a/Bundles/LeafUI/guiWx/include/guiWx/editor/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIWX_EDITOR_NAMESPACE_HPP_
-#define GUIWX_EDITOR_NAMESPACE_HPP_
-
-namespace gui
-{
-/**
- * @brief       The namespace gui::editor contains a basic editor written with Wx.
- * @namespace   gui::editor
- * 
- * @date        2009-2010.
- *
- */
-namespace editor
-{
-
-}
-}
-#endif /* GUIWX_EDITOR_NAMESPACE_HPP_ */
diff --git a/Bundles/LeafUI/guiWx/rc/plugin.xml b/Bundles/LeafUI/guiWx/rc/plugin.xml
deleted file mode 100644
index 945dfbe..0000000
--- a/Bundles/LeafUI/guiWx/rc/plugin.xml
+++ /dev/null
@@ -1,14 +0,0 @@
-<plugin id="guiWx" class="::guiWx::Plugin">
-    <library name="guiWx"/>
-    
-    <requirement id="dataReg"/>
-    <requirement id="servicesReg"/>
-    <requirement id="gui"/>
-    
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::gui::editor::IEditor</type>
-        <service>::gui::editor::DummyEditor</service>
-        <object>::fwData::Object</object>
-    </extension>
-        
-</plugin>
diff --git a/Bundles/LeafUI/guiWx/src/guiWx/Plugin.cpp b/Bundles/LeafUI/guiWx/src/guiWx/Plugin.cpp
deleted file mode 100644
index 738bc34..0000000
--- a/Bundles/LeafUI/guiWx/src/guiWx/Plugin.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/bind.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-#include <fwRuntime/profile/Profile.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include <fwGuiWx/WorkerWx.hpp>
-
-#include "guiWx/Plugin.hpp"
-
-namespace guiWx
-{
-
-//-----------------------------------------------------------------------------
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::guiWx::Plugin");
-
-//-----------------------------------------------------------------------------
-
-Plugin::~Plugin() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::start() throw(::fwRuntime::RuntimeException)
-{
-    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
-    SLM_ASSERT("Profile is not initialized", profile);
-    int &argc = profile->getRawArgCount();
-    char** argv = profile->getRawParams();
-
-    m_workerWx = ::fwGuiWx::getWxWorker(argc, argv);
-
-    ::fwRuntime::profile::getCurrentProfile()->setRunCallback(::boost::bind(&Plugin::run, this));
-}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::stop() throw()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-void setup()
-{
-    ::fwRuntime::profile::getCurrentProfile()->setup();
-}
-
-//-----------------------------------------------------------------------------
-
-int Plugin::run() throw()
-{
-    m_workerWx->post( ::boost::bind( &setup ) );
-    m_workerWx->getFuture().wait(); // This is required to start WorkerWx loop
-
-    ::fwRuntime::profile::getCurrentProfile()->cleanup();
-    return ::boost::any_cast<int>(m_workerWx->getFuture().get());
-}
-
-} // namespace guiWx
diff --git a/Bundles/LeafUI/guiWx/src/guiWx/editor/DummyEditor.cpp b/Bundles/LeafUI/guiWx/src/guiWx/editor/DummyEditor.cpp
deleted file mode 100644
index 4519f11..0000000
--- a/Bundles/LeafUI/guiWx/src/guiWx/editor/DummyEditor.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <string>
-
-#include <wx/wx.h>
-#include <wx/window.h>
-#include <wx/colour.h>
-
-#include <wx/sizer.h>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/operations.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwData/Object.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwTools/fwID.hpp>
-
-#include <fwGuiWx/convert.hpp>
-#include <fwGuiWx/container/WxContainer.hpp>
-
-#include "guiWx/editor/DummyEditor.hpp"
-
-namespace gui
-{
-namespace editor
-{
-
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::gui::editor::DummyEditor , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-DummyEditor::DummyEditor() throw() : m_text("")
-{}
-
-//-----------------------------------------------------------------------------
-
-DummyEditor::~DummyEditor() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DummyEditor::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->create();
-
-    ::fwGuiWx::container::WxContainer::sptr wxContainer =  ::fwGuiWx::container::WxContainer::dynamicCast( this->getContainer() );
-    wxWindow* const container = wxContainer->getWxContainer();
-    SLM_ASSERT("container not instanced", container);
-
-    wxBoxSizer* bSizer;
-    bSizer = new wxBoxSizer( wxVERTICAL );
-    std::string text = m_text.empty() ? this->getID() : m_text;
-    m_staticText = new wxStaticText( container, wxID_ANY, ::fwGuiWx::std2wx(text), wxDefaultPosition, wxDefaultSize, 0 );
-    m_staticText->SetBackgroundColour(wxColour(rand()%256, rand()%256, rand()%256));
-    bSizer->Add( m_staticText, 1, wxALL|wxEXPAND, 5 );
-
-    container->SetSizer( bSizer );
-    container->Refresh();
-    container->Layout();
-}
-
-//-----------------------------------------------------------------------------
-
-void DummyEditor::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->getContainer()->clean();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void DummyEditor::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->initialize();
-
-    ::fwRuntime::ConfigurationElement::sptr viewsCfgElt = m_configuration->findConfigurationElement("text");
-    if(viewsCfgElt)
-    {
-        m_text = viewsCfgElt->getValue();
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void DummyEditor::updating() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    m_staticText->SetBackgroundColour(wxColour(rand()%256, rand()%256, rand()%256));
-}
-
-//-----------------------------------------------------------------------------
-
-void DummyEditor::receiving(::fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DummyEditor::info( std::ostream &_sstream )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace editor
-} // namespace gui
-
diff --git a/Bundles/LeafUI/monitorQt/CMakeLists.txt b/Bundles/LeafUI/monitorQt/CMakeLists.txt
index 16db738..662a689 100644
--- a/Bundles/LeafUI/monitorQt/CMakeLists.txt
+++ b/Bundles/LeafUI/monitorQt/CMakeLists.txt
@@ -1,29 +1,20 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCom
-    fwGui
-    fwMemory
-    fwRuntime
-    fwTools
 
-    gui
-)
-
-
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 find_package (LibXml2)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
     ${LIBXML2_INCLUDE_DIR}
-    )
+)
 fwLink(
-    ${QT_LIBRARIES}
+    ${Qt5Core_LIBRARIES} 
+    ${Qt5Gui_LIBRARIES} 
+    ${Qt5Widgets_LIBRARIES}
     ${LIBXML2_LIBRARIES} 
-    )
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/monitorQt/bin/build.options b/Bundles/LeafUI/monitorQt/bin/build.options
deleted file mode 100644
index 3660cc7..0000000
--- a/Bundles/LeafUI/monitorQt/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE     = 'bundle'
-VERSION  = '0-1'
-USE      = ['qtCore','qtGui','boost','libxml2']
-
-LIB      = [
-           'fwTools_0-1',
-           'fwCore_0-1',
-           'fwRuntime_0-3',
-           'fwData_0-1',
-           'fwServices_0-1',
-           'fwMemory_0-1',
-           'fwGui_0-1',
-           'fwGuiQt_0-1',
-           ]
-BUNDLES  = [ 'gui_0-1', 'monitor_0-1' ]
-
-
-
diff --git a/Bundles/LeafUI/monitorQt/include/monitorQt/DumpEditor.hpp b/Bundles/LeafUI/monitorQt/include/monitorQt/DumpEditor.hpp
index 48537d7..e1e056b 100644
--- a/Bundles/LeafUI/monitorQt/include/monitorQt/DumpEditor.hpp
+++ b/Bundles/LeafUI/monitorQt/include/monitorQt/DumpEditor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,8 +9,6 @@
 
 #include <vector>
 
-#include <boost/signals/connection.hpp>
-
 #include <QPointer>
 #include <QPushButton>
 #include <QSignalMapper>
@@ -32,7 +30,7 @@ namespace fwCom
 {
 template< typename F >
 struct Slot;
-};
+}
 
 namespace monitor
 {
@@ -42,19 +40,20 @@ namespace monitor
  * @brief   Editor to dump or restore selected buffer.
  * @date    2010-2013
  */
-class MONITORQT_CLASS_API DumpEditor : public QObject, public ::gui::editor::IEditor
+class MONITORQT_CLASS_API DumpEditor : public QObject,
+                                       public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (DumpEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (DumpEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Does nothing.
-    MONITORQT_API DumpEditor() throw() ;
+    MONITORQT_API DumpEditor() throw();
 
     /// Destructor. Does nothing.
-    MONITORQT_API virtual ~DumpEditor() throw() ;
+    MONITORQT_API virtual ~DumpEditor() throw();
 
 protected:
 
@@ -77,7 +76,7 @@ protected:
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides. Does nothing.
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
     /// Start m_updateTimer, call on buffManager signal emit ( see m_refreshSignal )
     void onUpdate();
@@ -94,7 +93,7 @@ protected Q_SLOTS:
 
 private:
 
-    typedef ::fwCom::Slot<void()> UpdateSlotType;
+    typedef ::fwCom::Slot<void ()> UpdateSlotType;
 
     QFutureWatcher< ::fwMemory::BufferManager::BufferInfoMapType > m_watcher;
 
diff --git a/Bundles/LeafUI/monitorQt/include/monitorQt/Plugin.hpp b/Bundles/LeafUI/monitorQt/include/monitorQt/Plugin.hpp
index 51839f1..f4f7b42 100644
--- a/Bundles/LeafUI/monitorQt/include/monitorQt/Plugin.hpp
+++ b/Bundles/LeafUI/monitorQt/include/monitorQt/Plugin.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/Bundles/LeafUI/monitorQt/include/monitorQt/action/ClassFactoryRegistryInfo.hpp b/Bundles/LeafUI/monitorQt/include/monitorQt/action/ClassFactoryRegistryInfo.hpp
index 0d1e2a9..663264c 100644
--- a/Bundles/LeafUI/monitorQt/include/monitorQt/action/ClassFactoryRegistryInfo.hpp
+++ b/Bundles/LeafUI/monitorQt/include/monitorQt/action/ClassFactoryRegistryInfo.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __MONITORQT_CLASSFACTORYREGISTRYINFO_HPP__
-#define __MONITORQT_CLASSFACTORYREGISTRYINFO_HPP__
+#ifndef __MONITORQT_ACTION_CLASSFACTORYREGISTRYINFO_HPP__
+#define __MONITORQT_ACTION_CLASSFACTORYREGISTRYINFO_HPP__
 
 #include <QApplication>
 #include <QDialog>
@@ -27,15 +27,15 @@ class MONITORQT_CLASS_API ClassFactoryRegistryInfo : public ::fwGui::IActionSrv
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ClassFactoryRegistryInfo)( ::fwGui::IActionSrv ) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ClassFactoryRegistryInfo)( ::fwGui::IActionSrv ) );
 
     /// Does nothing
-    MONITORQT_API ClassFactoryRegistryInfo() throw() ;
+    MONITORQT_API ClassFactoryRegistryInfo() throw();
 
     /// Does nothing
-    MONITORQT_API virtual ~ClassFactoryRegistryInfo() throw() ;
+    MONITORQT_API virtual ~ClassFactoryRegistryInfo() throw();
 
-protected :
+protected:
 
     /// Calls classic IAction methods to configure
     void configuring() throw (::fwTools::Failed);
@@ -62,5 +62,5 @@ private:
 } // namespace action
 } // namespace monitor
 
-#endif // __MONITORQT_CLASSFACTORYREGISTRYINFO_HPP__
+#endif // __MONITORQT_ACTION_CLASSFACTORYREGISTRYINFO_HPP__
 
diff --git a/Bundles/LeafUI/monitorQt/include/monitorQt/action/ComponentsTree.hpp b/Bundles/LeafUI/monitorQt/include/monitorQt/action/ComponentsTree.hpp
index 0f8a101..e7ab01a 100644
--- a/Bundles/LeafUI/monitorQt/include/monitorQt/action/ComponentsTree.hpp
+++ b/Bundles/LeafUI/monitorQt/include/monitorQt/action/ComponentsTree.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __MONITORQT_UI_ACTION_COMPONENTSTREE_HPP__
-#define __MONITORQT_UI_ACTION_COMPONENTSTREE_HPP__
+#ifndef __MONITORQT_ACTION_COMPONENTSTREE_HPP__
+#define __MONITORQT_ACTION_COMPONENTSTREE_HPP__
 
 #include <QDialog>
 #include <QPointer>
@@ -29,15 +29,15 @@ class MONITORQT_CLASS_API ComponentsTree : public ::fwGui::IActionSrv
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ComponentsTree)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ComponentsTree)(::fwGui::IActionSrv) );
 
     /// Does nothing
-    MONITORQT_API ComponentsTree() throw() ;
+    MONITORQT_API ComponentsTree() throw();
 
     /// Does nothing
-    MONITORQT_API virtual ~ComponentsTree() throw() ;
+    MONITORQT_API virtual ~ComponentsTree() throw();
 
-protected :
+protected:
 
     /// Calls classic IAction methods to configure
     void configuring() throw (::fwTools::Failed);
@@ -64,5 +64,5 @@ private:
 } // namespace action
 } // namespace monitor
 
-#endif //__MONITORQT_UI_ACTION_COMPONENTSTREE_HPP__
+#endif //__MONITORQT_ACTION_COMPONENTSTREE_HPP__
 
diff --git a/Bundles/LeafUI/monitorQt/include/monitorQt/config.hpp b/Bundles/LeafUI/monitorQt/include/monitorQt/config.hpp
deleted file mode 100644
index f252a3d..0000000
--- a/Bundles/LeafUI/monitorQt/include/monitorQt/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _MONITORQT_CONFIG_HPP_
-#define _MONITORQT_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef MONITORQT_EXPORTS
-    #define MONITORQT_API __declspec(dllexport)
-    #else
-    #define MONITORQT_API __declspec(dllimport)
-    #endif
-
-    #define MONITORQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef MONITORQT_EXPORTS
-    #define MONITORQT_API __attribute__ ((visibility("default")))
-    #define MONITORQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define MONITORQT_API __attribute__ ((visibility("hidden")))
-    #define MONITORQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define MONITORQT_API
-    #define MONITORQT_CLASS_API
-
-#endif
-
-#endif // _MONITORQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/monitorQt/rc/DumpFrameConfig.xml b/Bundles/LeafUI/monitorQt/rc/DumpFrameConfig.xml
index f43512c..887ac2f 100644
--- a/Bundles/LeafUI/monitorQt/rc/DumpFrameConfig.xml
+++ b/Bundles/LeafUI/monitorQt/rc/DumpFrameConfig.xml
@@ -1,56 +1,62 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>DumpFrameConfig</id>
-    <type>parameters</type>
-    <parameters/>
-        <config>
-        
-    <object type="::fwData::Composite">
-        <!-- MAIN FRAME -->
-        <service uid="GENERIC_UID_dumpFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-            <window onclose="notify" />
-            <gui>
-                <frame>
-                    <name>Dump editor</name>
-                    <minSize width="600" height="400" />
-                </frame>
-                <toolBar align="left" />
-            </gui>
-            <registry>
-                <toolBar sid="GENERIC_UID_toolBar" start="yes" />
-                <view sid="GENERIC_UID_dumpView_Frame" start="yes" />
-            </registry>
-        </service>
-
-        <service uid="GENERIC_UID_dumpView_Frame" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-            <gui>
-                <layout type="::fwGui::LineLayoutManager">
-                    <orientation value="vertical" />
-                    <view proportion="1" />
-                </layout>
-            </gui>
-            <registry>
-                <view sid="GENERIC_UID_dumpEditor" start="yes" />
-            </registry>
-        </service>
-        
-        <service uid="GENERIC_UID_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no">
-            <gui>
-                <layout>
-                    <menuItem name="Dump all" icon="Bundles/monitorQt_0-1/icon-dump.svg" />
-                </layout>
-            </gui>
-            <registry>
-                <menuItem sid="GENERIC_UID_dumpAll" start="yes" />
-            </registry>
-        </service>
-    
-        <service uid="GENERIC_UID_dumpEditor" impl="::monitor::DumpEditor" type="::gui::editor::IEditor" autoConnect="no" />
-        <service uid="GENERIC_UID_dumpAll" impl="::monitor::action::SDumpAll" type="::fwGui::IActionSrv" autoConnect="no" />
-        
-        
-        <start uid="GENERIC_UID_dumpFrame" />
-        
-    </object>
-
-        </config>
-    </extension>
+    <parameters>
+        <param name="GENERIC_UID" />
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" /><!-- defined by SConfigLauncher -->
+    </parameters>
+    <config>
+
+        <object type="::fwData::Composite">
+            <!-- MAIN FRAME -->
+            <service uid="${GENERIC_UID}_dumpFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::SDefaultFrame" autoConnect="no">
+                <window onclose="notify" />
+                <gui>
+                    <frame>
+                        <name>Dump editor</name>
+                        <minSize width="600" height="400" />
+                    </frame>
+                    <toolBar align="left" />
+                </gui>
+                <registry>
+                    <toolBar sid="${GENERIC_UID}_toolBar" start="yes" />
+                    <view sid="${GENERIC_UID}_dumpView_Frame" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_dumpView_Frame" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager">
+                        <orientation value="vertical" />
+                        <view proportion="1" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="${GENERIC_UID}_dumpEditor" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
+                <gui>
+                    <layout>
+                        <menuItem name="Dump all" icon="@BUNDLE_PREFIX@/monitorQt_0-1/icon-dump.svg" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="${GENERIC_UID}_dumpAll" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_dumpEditor" impl="::monitor::DumpEditor" type="::gui::editor::IEditor" autoConnect="no" />
+            <service uid="${GENERIC_UID}_dumpAll" impl="::monitor::action::SDumpAll" type="::fwGui::IActionSrv" autoConnect="no" />
+
+
+            <proxy channel="${CLOSE_CONFIG_CHANNEL}">
+                <signal>${GENERIC_UID}_dumpFrame/closed</signal>
+            </proxy>
+
+            <start uid="${GENERIC_UID}_dumpFrame" />
+
+        </object>
+
+    </config>
+</extension>
diff --git a/Bundles/LeafUI/monitorQt/rc/plugin.xml b/Bundles/LeafUI/monitorQt/rc/plugin.xml
index 04bca69..3d7a25e 100644
--- a/Bundles/LeafUI/monitorQt/rc/plugin.xml
+++ b/Bundles/LeafUI/monitorQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="monitorQt" class="::monitorQt::Plugin">
+<plugin id="monitorQt" class="::monitorQt::Plugin" version="@DASH_VERSION@" >
 
     <library name="monitorQt" />
     <requirement id="monitor" />
diff --git a/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp b/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp
index 13313b5..4dd76f6 100644
--- a/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp
+++ b/Bundles/LeafUI/monitorQt/src/monitorQt/DumpEditor.cpp
@@ -1,55 +1,53 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/lexical_cast.hpp>
-#include <boost/foreach.hpp>
-#include <boost/bind.hpp>
-
-#include <QComboBox>
-#include <QHeaderView>
-#include <QItemDelegate>
-#include <QStringList>
-#include <QTableWidgetItem>
-#include <QTimer>
-#include <QVBoxLayout>
-#include <QFuture>
-#include <QtConcurrentRun>
+#include "monitorQt/DumpEditor.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
 #include <fwCore/base.hpp>
 
-#include <fwTools/fwID.hpp>
-#include <fwTools/Stringizer.hpp>
+#include <fwData/Object.hpp>
 
-#include <fwCom/Slot.hpp>
-#include <fwCom/Slot.hxx>
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/IMessageDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwMemory/BufferManager.hpp>
-#include <fwMemory/ByteSize.hpp>
-#include <fwMemory/tools/MemoryMonitorTools.hpp>
 #include <fwMemory/BufferManager.hpp>
+#include <fwMemory/ByteSize.hpp>
 #include <fwMemory/IPolicy.hpp>
+#include <fwMemory/tools/MemoryMonitorTools.hpp>
 
-#include <fwData/Object.hpp>
-
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/ActiveWorkers.hpp>
 
-#include <fwGui/Cursor.hpp>
-#include <fwGui/dialog/IMessageDialog.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwTools/fwID.hpp>
+#include <fwTools/Stringizer.hpp>
 
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <boost/bind.hpp>
+#include <boost/lexical_cast.hpp>
+
+#include <QComboBox>
+#include <QFuture>
+#include <QHeaderView>
+#include <QItemDelegate>
+#include <QStringList>
+#include <QTableWidgetItem>
+#include <QtConcurrentRun>
+#include <QTimer>
+#include <QVBoxLayout>
 
-#include "monitorQt/DumpEditor.hpp"
 
 namespace monitor
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::monitor::DumpEditor , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::monitor::DumpEditor, ::fwData::Object );
 
 ::fwMemory::BufferManager::BufferInfoMapType m_bufferInfos;
 ::fwMemory::BufferManager::BufferStats m_bufferStats = {0,0};
@@ -66,7 +64,9 @@ class PolicyComboBoxDelegate : public QItemDelegate
 {
 
 public:
-    PolicyComboBoxDelegate(QObject *parent = 0) : QItemDelegate(parent){}
+    PolicyComboBoxDelegate(QObject *parent = 0) : QItemDelegate(parent)
+    {
+    }
 
     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const;
 
@@ -86,9 +86,9 @@ QWidget *PolicyComboBoxDelegate::createEditor(QWidget *parent,
     const std::string value = index.model()->data(index, Qt::DisplayRole).toString().toStdString();
 
     const ::fwMemory::policy::registry::Type::KeyVectorType &factories =
-            ::fwMemory::policy::registry::get()->getFactoryKeys();
+        ::fwMemory::policy::registry::get()->getFactoryKeys();
 
-    BOOST_FOREACH( const ::fwMemory::policy::registry::KeyType &policy, factories)
+    for( const ::fwMemory::policy::registry::KeyType &policy :  factories)
     {
         policyComboBox->addItem(QString::fromStdString(policy));
         if(value == policy)
@@ -115,7 +115,7 @@ void PolicyComboBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &i
 void PolicyComboBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
 {
     QComboBox *policyComboBox = static_cast<QComboBox*>(editor);
-    QString value = policyComboBox->currentText();
+    QString value             = policyComboBox->currentText();
 
     model->setData(index, value, Qt::EditRole);
 }
@@ -135,14 +135,14 @@ class PolicyTableModel : public QAbstractTableModel
 {
 
 public:
-    PolicyTableModel(QObject *parent=0);
+    PolicyTableModel(QObject *parent = 0);
 
     int rowCount(const QModelIndex &parent) const;
     int columnCount(const QModelIndex &parent) const;
     QVariant data(const QModelIndex &index, int role) const;
     QVariant headerData(int section, Qt::Orientation orientation, int role) const;
     Qt::ItemFlags flags(const QModelIndex &index) const;
-    bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole);
+    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
 
     static const int s_EXTRA_INFO_NB;
 private:
@@ -166,7 +166,7 @@ int PolicyTableModel::rowCount(const QModelIndex &parent) const
     {
         ::fwCore::mt::ReadLock lock( m_buffManager->getMutex() );
         ::fwMemory::IPolicy::sptr currentPolicy = m_buffManager->getDumpPolicy();
-        nbParam = currentPolicy->getParamNames().size();
+        nbParam                                 = currentPolicy->getParamNames().size();
     }
 
     return static_cast<int>(nbParam + s_EXTRA_INFO_NB);
@@ -241,49 +241,52 @@ QVariant PolicyTableModel::headerData(int section, Qt::Orientation orientation,
 }
 
 
- bool PolicyTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
- {
-     if (m_buffManager && index.isValid() && role == Qt::EditRole)
-     {
-         int row = index.row();
-         int col = index.column();
-         const std::string strvalue = value.toString().toStdString();
-
-         ::fwCore::mt::ReadLock lock( m_buffManager->getMutex() );
-         ::fwMemory::IPolicy::sptr currentPolicy = m_buffManager->getDumpPolicy();
-         const ::fwMemory::IPolicy::ParamNamesType &names = currentPolicy->getParamNames();
-
-         if (col == 0 && (unsigned int)row <= names.size() )
-         {
-             ::fwMemory::IPolicy::sptr dumpPolicy;
-             switch (row)
-             {
-             case 0 :
-                 if(strvalue != currentPolicy->getLeafClassname())
-                 {
-                     dumpPolicy = ::fwMemory::policy::registry::get()->create(strvalue);
-                     if(dumpPolicy)
-                     {
-                         ::fwCore::mt::ReadToWriteLock lock( m_buffManager->getMutex() );
-                         m_buffManager->setDumpPolicy(dumpPolicy);
-                     }
-                     this->reset();
-                 }
-                 break;
-             default:
-                 const ::fwMemory::IPolicy::ParamNamesType::value_type &name = names.at(row - 1);
-                 currentPolicy->setParam(name, strvalue);
-                 return true;
-             }
-         }
-     }
-     return false;
- }
+bool PolicyTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
+{
+    if (m_buffManager && index.isValid() && role == Qt::EditRole)
+    {
+        int row                    = index.row();
+        int col                    = index.column();
+        const std::string strvalue = value.toString().toStdString();
+
+        ::fwCore::mt::ReadLock lock( m_buffManager->getMutex() );
+        ::fwMemory::IPolicy::sptr currentPolicy = m_buffManager->getDumpPolicy();
+        const ::fwMemory::IPolicy::ParamNamesType &names = currentPolicy->getParamNames();
+
+        if (col == 0 && (unsigned int)row <= names.size() )
+        {
+            ::fwMemory::IPolicy::sptr dumpPolicy;
+            switch (row)
+            {
+                case 0:
+                    if(strvalue != currentPolicy->getLeafClassname())
+                    {
+                        dumpPolicy = ::fwMemory::policy::registry::get()->create(strvalue);
+                        if(dumpPolicy)
+                        {
+                            ::fwCore::mt::ReadToWriteLock lock( m_buffManager->getMutex() );
+                            m_buffManager->setDumpPolicy(dumpPolicy);
+                        }
+                        this->beginResetModel();
+                        this->endResetModel();
+                    }
+                    break;
+                default:
+                    const ::fwMemory::IPolicy::ParamNamesType::value_type &name = names.at(row - 1);
+                    currentPolicy->setParam(name, strvalue);
+                    return true;
+            }
+        }
+    }
+    return false;
+}
 
 Qt::ItemFlags PolicyTableModel::flags(const QModelIndex &index) const
 {
     if (!index.isValid())
+    {
         return Qt::ItemIsEnabled;
+    }
 
     return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
 }
@@ -296,7 +299,7 @@ class InfoTableModel : public QAbstractTableModel
 {
 
 public:
-    InfoTableModel(QObject *parent=0);
+    InfoTableModel(QObject *parent = 0);
 
     int rowCount(const QModelIndex &parent) const;
     int columnCount(const QModelIndex &parent) const;
@@ -330,7 +333,7 @@ int InfoTableModel::columnCount(const QModelIndex &parent) const
 
 QVariant InfoTableModel::data(const QModelIndex &index, int role) const
 {
-    if (! m_buffManager || !index.isValid())
+    if (!m_buffManager || !index.isValid())
     {
         return QVariant();
     }
@@ -348,22 +351,22 @@ QVariant InfoTableModel::data(const QModelIndex &index, int role) const
             ::fwMemory::BufferManager::SizeType bufferManagerMem;
             switch (index.row())
             {
-            case 0 :
-                sysMem = ::fwMemory::tools::MemoryMonitorTools::getTotalSystemMemory();
-                return QString(getHumanReadableSize(sysMem));
-                break;
-            case 1 :
-                sysMem = ::fwMemory::tools::MemoryMonitorTools::getFreeSystemMemory();
-                return QString(getHumanReadableSize(sysMem));
-                break;
-            case 2 :
-                bufferManagerMem = m_bufferStats.totalManaged;
-                return QString(getHumanReadableSize(bufferManagerMem));
-                break;
-            case 3 :
-                bufferManagerMem = m_bufferStats.totalDumped;
-                return QString(getHumanReadableSize(bufferManagerMem));
-                break;
+                case 0:
+                    sysMem = ::fwMemory::tools::MemoryMonitorTools::getTotalSystemMemory();
+                    return QString(getHumanReadableSize(sysMem));
+                    break;
+                case 1:
+                    sysMem = ::fwMemory::tools::MemoryMonitorTools::getFreeSystemMemory();
+                    return QString(getHumanReadableSize(sysMem));
+                    break;
+                case 2:
+                    bufferManagerMem = m_bufferStats.totalManaged;
+                    return QString(getHumanReadableSize(bufferManagerMem));
+                    break;
+                case 3:
+                    bufferManagerMem = m_bufferStats.totalDumped;
+                    return QString(getHumanReadableSize(bufferManagerMem));
+                    break;
             }
         }
     }
@@ -377,16 +380,16 @@ QVariant InfoTableModel::headerData(int section, Qt::Orientation orientation, in
     {
         switch (section)
         {
-            case 0 :
+            case 0:
                 return QString("Total System Memory");
                 break;
-            case 1 :
+            case 1:
                 return QString("Free System Memory");
                 break;
-            case 2 :
+            case 2:
                 return QString("Managed");
                 break;
-            case 3 :
+            case 3:
                 return QString("Dumped");
                 break;
         }
@@ -400,12 +403,14 @@ QVariant InfoTableModel::headerData(int section, Qt::Orientation orientation, in
 
 
 DumpEditor::DumpEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 DumpEditor::~DumpEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -413,7 +418,8 @@ void DumpEditor::starting() throw(::fwTools::Failed)
 {
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -421,7 +427,7 @@ void DumpEditor::starting() throw(::fwTools::Failed)
     m_updateTimer->setInterval(300);
     m_updateTimer->setSingleShot(true);
 
-    m_list = new QTableWidget(container);
+    m_list   = new QTableWidget(container);
     m_mapper = new QSignalMapper();
 
     m_list->setColumnCount(5);
@@ -450,7 +456,7 @@ void DumpEditor::starting() throw(::fwTools::Failed)
     container->setLayout( sizer );
 
     PolicyComboBoxDelegate *policyComboBoxDelegate = new PolicyComboBoxDelegate(container);
-    PolicyTableModel *policyTableModel = new PolicyTableModel(container);
+    PolicyTableModel *policyTableModel             = new PolicyTableModel(container);
     m_policyEditor = new QTableView(container);
     m_policyEditor->setModel(policyTableModel);
     m_policyEditor->setItemDelegateForRow(0, policyComboBoxDelegate);
@@ -479,7 +485,7 @@ void DumpEditor::starting() throw(::fwTools::Failed)
     ::fwMemory::BufferManager::sptr buffManager = ::fwMemory::BufferManager::getDefault();
     if (buffManager)
     {
-        m_updateSlot = ::fwCom::newSlot( &DumpEditor::onUpdate, this ) ;
+        m_updateSlot                                        = ::fwCom::newSlot( &DumpEditor::onUpdate, this );
         ::fwServices::registry::ActiveWorkers::sptr workers = ::fwServices::registry::ActiveWorkers::getDefault();
         m_updateSlot->setWorker( workers->getWorker( ::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER ));
         m_connection = buffManager->getUpdatedSignal()->connect( m_updateSlot );
@@ -516,7 +522,9 @@ class SizeTableWidgetItem : public QTableWidgetItem
 {
 public:
 
-    SizeTableWidgetItem(const QString &text) : QTableWidgetItem(text) {}
+    SizeTableWidgetItem(const QString &text) : QTableWidgetItem(text)
+    {
+    }
 
     virtual bool operator< ( const QTableWidgetItem & other ) const
     {
@@ -560,92 +568,92 @@ void DumpEditor::onBufferInfo()
     m_bufferStats = ::fwMemory::BufferManager::computeBufferStats(m_bufferInfos);
 
     m_mapper->blockSignals(true);
-   ::fwCom::Connection::Blocker block(m_connection);
-
-   for(int row = 0; row < m_list->rowCount(); row++)
-   {
-       m_mapper->removeMappings( m_list->cellWidget(row, 4) );
-   }
-   m_list->clearContents();
-   m_objectsUID.clear();
-
-
-   int itemCount = 0;
-   m_list->setSortingEnabled(false);
-   m_list->setRowCount(static_cast<int>(m_bufferInfos.size()));
-   m_list->setColumnCount(5);
-   QColor backColor;
-   BOOST_FOREACH(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt, m_bufferInfos)
-   {
-       m_objectsUID.push_back(elt.first);
-
-       std::string status      = "?";
-       std::string date        = "?";
-       std::string lockStatus  = "?";
-
-
-       const ::fwMemory::BufferInfo &dumpBuffInfo = elt.second;
-       bool loaded = dumpBuffInfo.loaded;
-       if(!loaded)
-       {
-           backColor = Qt::darkYellow;
-           status = "Dumped";
-       }
-       else
-       {
-           backColor = Qt::white;
-           status = "-";
-       }
-
-       bool isLock = dumpBuffInfo.lockCount() > 0;
-       if ( isLock )
-       {
-           lockStatus = "locked(" +  ::fwTools::getString(dumpBuffInfo.lockCount()) +")";
-       }
-       else
-       {
-           lockStatus = "unlocked";
-       }
-
-
-       date = ::fwTools::getString(dumpBuffInfo.lastAccess.getLogicStamp());
-
-       QTableWidgetItem* currentSizeItem = new SizeTableWidgetItem( getHumanReadableSize(dumpBuffInfo.size) );
-       currentSizeItem->setData(Qt::UserRole, (qulonglong)dumpBuffInfo.size );
-       currentSizeItem->setFlags(Qt::ItemIsEnabled);
-       currentSizeItem->setBackgroundColor(backColor);
-       m_list->setItem(itemCount, 0, currentSizeItem );
-
-       QTableWidgetItem* statusItem = new QTableWidgetItem( QString::fromStdString(status));
-       statusItem->setFlags(Qt::ItemIsEnabled);
-       statusItem->setBackgroundColor(backColor);
-       m_list->setItem(itemCount, 1, statusItem );
-
-       QTableWidgetItem* dateItem = new QTableWidgetItem( QString::fromStdString(date));
-       dateItem->setFlags(Qt::ItemIsEnabled);
-       dateItem->setBackgroundColor(backColor);
-       m_list->setItem(itemCount, 2, dateItem );
-
-       QTableWidgetItem* lockStatusItem = new QTableWidgetItem( QString::fromStdString(lockStatus));
-       lockStatusItem->setFlags(Qt::ItemIsEnabled);
-       lockStatusItem->setBackgroundColor(backColor);
-       m_list->setItem(itemCount, 3, lockStatusItem );
-
-
-       QPushButton* actionItem = new QPushButton(QString::fromStdString((loaded)?"Dump":"Restore"), m_list);
-       actionItem->setEnabled(!isLock && (dumpBuffInfo.size > 0) );
-       m_list->setCellWidget(itemCount, 4, actionItem );
-       QObject::connect(actionItem, SIGNAL(pressed()), m_mapper, SLOT(map()));
-       m_mapper->setMapping(actionItem, itemCount);
-
-       ++itemCount;
-   }
-   m_list->setSortingEnabled(true);
-
-   m_mapper->blockSignals(false);
-
-   m_infoEditor->reset();
-   m_infoEditor->resizeColumnsToContents();
+    ::fwCom::Connection::Blocker block(m_connection);
+
+    for(int row = 0; row < m_list->rowCount(); row++)
+    {
+        m_mapper->removeMappings( m_list->cellWidget(row, 4) );
+    }
+    m_list->clearContents();
+    m_objectsUID.clear();
+
+
+    int itemCount = 0;
+    m_list->setSortingEnabled(false);
+    m_list->setRowCount(static_cast<int>(m_bufferInfos.size()));
+    m_list->setColumnCount(5);
+    QColor backColor;
+    for(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt :  m_bufferInfos)
+    {
+        m_objectsUID.push_back(elt.first);
+
+        std::string status     = "?";
+        std::string date       = "?";
+        std::string lockStatus = "?";
+
+
+        const ::fwMemory::BufferInfo &dumpBuffInfo = elt.second;
+        bool loaded                                = dumpBuffInfo.loaded;
+        if(!loaded)
+        {
+            backColor = Qt::darkYellow;
+            status    = "Dumped";
+        }
+        else
+        {
+            backColor = Qt::white;
+            status    = "-";
+        }
+
+        bool isLock = dumpBuffInfo.lockCount() > 0;
+        if ( isLock )
+        {
+            lockStatus = "locked(" +  ::fwTools::getString(dumpBuffInfo.lockCount()) +")";
+        }
+        else
+        {
+            lockStatus = "unlocked";
+        }
+
+
+        date = ::fwTools::getString(dumpBuffInfo.lastAccess.getLogicStamp());
+
+        QTableWidgetItem* currentSizeItem = new SizeTableWidgetItem( getHumanReadableSize(dumpBuffInfo.size) );
+        currentSizeItem->setData(Qt::UserRole, (qulonglong)dumpBuffInfo.size );
+        currentSizeItem->setFlags(Qt::ItemIsEnabled);
+        currentSizeItem->setBackgroundColor(backColor);
+        m_list->setItem(itemCount, 0, currentSizeItem );
+
+        QTableWidgetItem* statusItem = new QTableWidgetItem( QString::fromStdString(status));
+        statusItem->setFlags(Qt::ItemIsEnabled);
+        statusItem->setBackgroundColor(backColor);
+        m_list->setItem(itemCount, 1, statusItem );
+
+        QTableWidgetItem* dateItem = new QTableWidgetItem( QString::fromStdString(date));
+        dateItem->setFlags(Qt::ItemIsEnabled);
+        dateItem->setBackgroundColor(backColor);
+        m_list->setItem(itemCount, 2, dateItem );
+
+        QTableWidgetItem* lockStatusItem = new QTableWidgetItem( QString::fromStdString(lockStatus));
+        lockStatusItem->setFlags(Qt::ItemIsEnabled);
+        lockStatusItem->setBackgroundColor(backColor);
+        m_list->setItem(itemCount, 3, lockStatusItem );
+
+
+        QPushButton* actionItem = new QPushButton(QString::fromStdString((loaded) ? "Dump" : "Restore"), m_list);
+        actionItem->setEnabled(!isLock && (dumpBuffInfo.size > 0) );
+        m_list->setCellWidget(itemCount, 4, actionItem );
+        QObject::connect(actionItem, SIGNAL(pressed()), m_mapper, SLOT(map()));
+        m_mapper->setMapping(actionItem, itemCount);
+
+        ++itemCount;
+    }
+    m_list->setSortingEnabled(true);
+
+    m_mapper->blockSignals(false);
+
+    m_infoEditor->reset();
+    m_infoEditor->resizeColumnsToContents();
 }
 
 //------------------------------------------------------------------------------
@@ -709,9 +717,9 @@ void DumpEditor::changeStatus( int index )
             else
             {
                 ::fwGui::dialog::MessageDialog::showMessageDialog(
-                        "Dump process information",
-                        "Dump process is locked. It is impossible to dump or restore this object.",
-                        ::fwGui::dialog::IMessageDialog::WARNING);
+                    "Dump process information",
+                    "Dump process is locked. It is impossible to dump or restore this object.",
+                    ::fwGui::dialog::IMessageDialog::WARNING);
             }
 
             cursor.setDefaultCursor();
@@ -723,9 +731,9 @@ void DumpEditor::changeStatus( int index )
             std::stringstream stream;
             stream << "Object " << selectedBuffer << " not found, please refresh the grid.";
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Dump process information",
-                    stream.str(),
-                    ::fwGui::dialog::IMessageDialog::WARNING);
+                "Dump process information",
+                stream.str(),
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
     }
 }
diff --git a/Bundles/LeafUI/monitorQt/src/monitorQt/Plugin.cpp b/Bundles/LeafUI/monitorQt/src/monitorQt/Plugin.cpp
index fa35468..474c8e1 100644
--- a/Bundles/LeafUI/monitorQt/src/monitorQt/Plugin.cpp
+++ b/Bundles/LeafUI/monitorQt/src/monitorQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,17 +18,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //------------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/Bundles/LeafUI/monitorQt/src/monitorQt/action/ClassFactoryRegistryInfo.cpp b/Bundles/LeafUI/monitorQt/src/monitorQt/action/ClassFactoryRegistryInfo.cpp
index 70b47c3..df19190 100644
--- a/Bundles/LeafUI/monitorQt/src/monitorQt/action/ClassFactoryRegistryInfo.cpp
+++ b/Bundles/LeafUI/monitorQt/src/monitorQt/action/ClassFactoryRegistryInfo.cpp
@@ -1,35 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QHBoxLayout>
-
-#include <boost/foreach.hpp>
+#include "monitorQt/action/ClassFactoryRegistryInfo.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwServices/macros.hpp>
 #include <fwServices/registry/ServiceFactory.hpp>
 
-#include "monitorQt/action/ClassFactoryRegistryInfo.hpp"
+#include <QHBoxLayout>
 
 namespace monitor
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::ClassFactoryRegistryInfo , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::ClassFactoryRegistryInfo, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
 ClassFactoryRegistryInfo::ClassFactoryRegistryInfo( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ClassFactoryRegistryInfo::~ClassFactoryRegistryInfo() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -41,10 +41,10 @@ void ClassFactoryRegistryInfo::updating( ) throw(::fwTools::Failed)
     typedef ::fwServices::registry::ServiceFactory ServiceRegistry;
     const ServiceRegistry::KeyVectorType& factoryKeys = ServiceRegistry::getDefault()->getFactoryKeys();
 
-    BOOST_FOREACH( ServiceRegistry::KeyVectorType::value_type key, factoryKeys )
+    for( ServiceRegistry::KeyVectorType::value_type key :  factoryKeys )
     {
         const std::string objImpl = ServiceRegistry::getDefault()->getObjectImplementation(key);
-        QTreeWidgetItem* srvItem = new QTreeWidgetItem();
+        QTreeWidgetItem* srvItem  = new QTreeWidgetItem();
         srvItem->setText(0, QString::fromStdString(key));
         srvItem->setText(1, QString::fromStdString(objImpl));
         m_tree->addTopLevelItem( srvItem );
@@ -70,7 +70,7 @@ void ClassFactoryRegistryInfo::starting() throw (::fwTools::Failed)
     m_dialog->setWindowTitle("ServiceFactoryRegistry");
     m_dialog->setMinimumSize(800, 600);
 
-    QHBoxLayout* sizer  = new QHBoxLayout();
+    QHBoxLayout* sizer = new QHBoxLayout();
     m_tree = new QTreeWidget( m_dialog );
     QStringList headerList = (QStringList() << "Service" << "Object");
     m_tree->setColumnCount(2);
@@ -80,8 +80,8 @@ void ClassFactoryRegistryInfo::starting() throw (::fwTools::Failed)
     m_tree->setSelectionMode(QAbstractItemView::SingleSelection);
     m_tree->setAlternatingRowColors( true );
 
-    sizer->addWidget( m_tree ) ;
-    m_dialog->setLayout( sizer ) ;
+    sizer->addWidget( m_tree );
+    m_dialog->setLayout( sizer );
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/monitorQt/src/monitorQt/action/ComponentsTree.cpp b/Bundles/LeafUI/monitorQt/src/monitorQt/action/ComponentsTree.cpp
index 1d77999..b9d5d57 100644
--- a/Bundles/LeafUI/monitorQt/src/monitorQt/action/ComponentsTree.cpp
+++ b/Bundles/LeafUI/monitorQt/src/monitorQt/action/ComponentsTree.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,7 +13,6 @@
 #include <fwRuntime/Extension.hpp>
 
 #include <fwCore/base.hpp>
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 
 #include "monitorQt/action/ComponentsTree.hpp"
@@ -23,17 +22,19 @@ namespace monitor
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::monitor::action::ComponentsTree , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::monitor::action::ComponentsTree, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
 ComponentsTree::ComponentsTree( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ComponentsTree::~ComponentsTree() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -42,13 +43,13 @@ void ComponentsTree::updating( ) throw(::fwTools::Failed)
     m_treeContainer->clearSelection();
     m_treeContainer->clear();
 
-    ::fwRuntime::Runtime * defaultRuntime = ::fwRuntime::Runtime::getDefault() ;
-    ::fwRuntime::Runtime::BundleIterator iter_bundles = defaultRuntime->bundlesBegin() ;
+    ::fwRuntime::Runtime * defaultRuntime             = ::fwRuntime::Runtime::getDefault();
+    ::fwRuntime::Runtime::BundleIterator iter_bundles = defaultRuntime->bundlesBegin();
     while (iter_bundles != defaultRuntime->bundlesEnd())
     {
         const std::string bundleName = (*iter_bundles)->getIdentifier();
-        bool isBundleEnable = (*iter_bundles)->isEnable();
-        QTreeWidgetItem* bundleItem = new QTreeWidgetItem();
+        bool isBundleEnable          = (*iter_bundles)->isEnable();
+        QTreeWidgetItem* bundleItem  = new QTreeWidgetItem();
         if(!isBundleEnable)
         {
             bundleItem->setBackground(0, QBrush(QColor(155,155,155)));
@@ -63,9 +64,9 @@ void ComponentsTree::updating( ) throw(::fwTools::Failed)
         ::fwRuntime::Bundle::ExtensionConstIterator iter_extension = (*iter_bundles)->extensionsBegin();
         while (iter_extension != (*iter_bundles)->extensionsEnd())
         {
-            std::string point = (*iter_extension)->getPoint() ;
+            std::string point      = (*iter_extension)->getPoint();
             bool isExtensionEnable = (*iter_extension)->isEnable();
-            QTreeWidgetItem* item = new QTreeWidgetItem();
+            QTreeWidgetItem* item  = new QTreeWidgetItem();
             if(!isExtensionEnable)
             {
                 item->setBackground(0, QBrush(QColor(155,155,155)));
diff --git a/Bundles/LeafUI/uiGenericQt/CMakeLists.txt b/Bundles/LeafUI/uiGenericQt/CMakeLists.txt
index 15e59fe..e7b839f 100644
--- a/Bundles/LeafUI/uiGenericQt/CMakeLists.txt
+++ b/Bundles/LeafUI/uiGenericQt/CMakeLists.txt
@@ -1,22 +1,20 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwRuntime
-    fwTools
-)
-
-
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui QtHelp REQUIRED)
-find_package(Qt4 COMPONENTS QtWebKit)
-include(${QT_USE_FILE})
 
+find_package(Qt5 COMPONENTS Core Gui Help Widgets REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
-fwLink(${QT_LIBRARIES})
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Help_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Help_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiGenericQt/COPYING b/Bundles/LeafUI/uiGenericQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiGenericQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiGenericQt/COPYING.LESSER b/Bundles/LeafUI/uiGenericQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiGenericQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiGenericQt/bin/build.options b/Bundles/LeafUI/uiGenericQt/bin/build.options
deleted file mode 100644
index 5b48ebd..0000000
--- a/Bundles/LeafUI/uiGenericQt/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwDataIO_0-2',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwRender_0-1',
-          'fwGui_0-1',
-          'fwGuiQt_0-1',
-          ]
-USE     = ['qtCore','qtWebKit','qtSqldriversPlugins','qtHelp','boost']
-BUNDLES = ['gui_0-1']
-
-
-
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Namespace.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Namespace.hpp
index f9eb2ff..9deafd0 100644
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Namespace.hpp
+++ b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIGENERICQT_NAMESPACE_HPP_
-#define UIGENERICQT_NAMESPACE_HPP_
+#ifndef __UIGENERICQT_NAMESPACE_HPP__
+#define __UIGENERICQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiGeneric contains actions to show help, acknowledgments and about frame.
  * @namespace   uiGeneric
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace uiGeneric
 {
 
 }
-#endif /* UIGENERICQT_NAMESPACE_HPP_ */
+#endif /* __UIGENERICQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Plugin.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Plugin.hpp
index 0bf7b6f..ae85ca4 100644
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Plugin.hpp
+++ b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIGENERICQT_PLUGIN_HPP_
-#define _UIGENERICQT_PLUGIN_HPP_
+#ifndef __UIGENERICQT_PLUGIN_HPP__
+#define __UIGENERICQT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -13,7 +13,7 @@ namespace uiGeneric
 {
 
 /**
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -33,4 +33,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiGeneric
 
-#endif //_UIGENERICQT_PLUGIN_HPP_
+#endif //__UIGENERICQT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/LaunchBrowserActionService.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/LaunchBrowserActionService.hpp
index e383e22..a491df5 100644
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/LaunchBrowserActionService.hpp
+++ b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/LaunchBrowserActionService.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIGENERICQT_ACTION_OPENURLACTIONSERVICE_HPP_
-#define _UIGENERICQT_ACTION_OPENURLACTIONSERVICE_HPP_
+#ifndef __UIGENERICQT_ACTION_LAUNCHBROWSERACTIONSERVICE_HPP__
+#define __UIGENERICQT_ACTION_LAUNCHBROWSERACTIONSERVICE_HPP__
 
 #include <fwTools/Failed.hpp>
 
@@ -22,48 +22,43 @@ namespace action
 /**
  * @brief   This action launch a browser on the url given in configuration.
  * @class   LaunchBrowserActionService
- * 
- * @date    2010.
  */
 class UIGENERICQT_CLASS_API LaunchBrowserActionService : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (LaunchBrowserActionService)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (LaunchBrowserActionService)(::fwGui::IActionSrv) );
 
     /// Constructor. Do nothing.
-    UIGENERICQT_API LaunchBrowserActionService() throw() ;
+    UIGENERICQT_API LaunchBrowserActionService() throw();
 
     /// Destructor. Do nothing.
-    UIGENERICQT_API virtual ~LaunchBrowserActionService() throw() ;
+    UIGENERICQT_API virtual ~LaunchBrowserActionService() throw();
 
 protected:
 
 
     /**
      * @brief configure the action.
-     * @verbatim
-    <service type="::fwGui::IActionSrv" impl="::uiGeneric::action::LaunchBrowserActionService" autoConnect="no">
+     * @code{.xml}
+       <service type="::fwGui::IActionSrv" impl="::uiGeneric::action::LaunchBrowserActionService" autoConnect="no">
         <url>http://www.ircad.fr</url>
-    </service>
-       @endverbatim
+       </service>
+       @endcode
      */
     void configuring() throw( ::fwTools::Failed );
 
     /// Starts action
     void starting() throw (::fwTools::Failed);
 
-    /// Does nothing
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     /// Launch a browser on the url given in the configuration
     void updating() throw(::fwTools::Failed);
 
     /// Stops action
     void stopping() throw (::fwTools::Failed);
 
-    void info( std::ostream &_sstream ) ;
+    void info( std::ostream &_sstream );
 
     typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
 
@@ -77,6 +72,6 @@ private:
 
 } // uiGeneric
 
-#endif /*_UIGENERICQT_ACTION_OPENURLACTIONSERVICE_HPP_*/
+#endif /*__UIGENERICQT_ACTION_LAUNCHBROWSERACTIONSERVICE_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/SShowAbout.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/SShowAbout.hpp
index 2e2e7c8..8a9f821 100644
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/SShowAbout.hpp
+++ b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/SShowAbout.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -27,18 +27,19 @@ namespace action
  * @brief   This action show the about frame.
  * @class   SShowAbout
  */
-class UIGENERICQT_CLASS_API SShowAbout : public QObject, public ::fwGui::IActionSrv
+class UIGENERICQT_CLASS_API SShowAbout : public QObject,
+                                         public ::fwGui::IActionSrv
 {
 
-    Q_OBJECT
+Q_OBJECT
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SShowAbout)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SShowAbout)( ::fwGui::IActionSrv) );
 
     /**
      * @name Constructor/Destructor
      * @{ */
-    UIGENERICQT_API SShowAbout() throw() ;
-    UIGENERICQT_API virtual ~SShowAbout() throw() ;
+    UIGENERICQT_API SShowAbout() throw();
+    UIGENERICQT_API virtual ~SShowAbout() throw();
     /**  @} */
 
 protected:
@@ -46,23 +47,20 @@ protected:
      * @brief Configuring method.
      *
      * XML configuration sample:
-     @verbatim
-     <service impl="::uiGeneric::action::SShowAbout" type="::fwGui::IActionSrv">
+       @code{.xml}
+       <service impl="::uiGeneric::action::SShowAbout" type="::fwGui::IActionSrv">
          <filename id=".../aboutFile.html"/>
          <title>title</title>
          <size width="200" height="200" />
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * This method is used to configure the service.
      */
-    void configuring() throw( ::fwTools::Failed ) ;
+    void configuring() throw( ::fwTools::Failed );
 
     /// Starts action
     void starting() throw (::fwTools::Failed);
 
-    /// Does nothing
-    void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     /// Shows the frame
     void updating() throw(::fwTools::Failed);
 
@@ -70,7 +68,7 @@ protected:
     void stopping() throw (::fwTools::Failed);
 
     /// Prints service info
-    void info(std::ostream &_sstream) ;
+    void info(std::ostream &_sstream);
 
 protected Q_SLOTS:
 
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowAcknowledgments.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowAcknowledgments.hpp
deleted file mode 100644
index 80cf76d..0000000
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowAcknowledgments.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIGENERICQT_UI_ACTION_SHOWACK_HPP_
-#define _UIGENERICQT_UI_ACTION_SHOWACK_HPP_
-
-#include <QObject>
-#include <QUrl>
-#include <boost/filesystem/path.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "uiGenericQt/config.hpp"
-
-namespace uiGeneric
-{
-
-namespace action
-{
-
-/**
- * @brief   This action show the acknowlegments frame.
- * @class   ShowAcknowledgments
- * 
- * @date    2010.
- */
-class UIGENERICQT_CLASS_API ShowAcknowledgments : public QObject, public ::fwGui::IActionSrv
-{
-    Q_OBJECT
-public:
-    fwCoreServiceClassDefinitionsMacro ( (ShowAcknowledgments)( ::fwGui::IActionSrv) ) ;
-    UIGENERICQT_API ShowAcknowledgments() throw() ;
-
-    UIGENERICQT_API virtual ~ShowAcknowledgments() throw() ;
-
-protected:
-
-    /**
-     * @brief configure the action.
-     * @verbatim
-    <service type="::fwGui::IActionSrv" impl="::uiGeneric::action::ShowAcknowledgments" autoConnect="no">
-        <filename id=".../ack.html" />
-    </service>
-       @endverbatim
-     */
-    UIGENERICQT_API void configuring() throw( ::fwTools::Failed ) ;
-
-    /// Starts action
-    void starting() throw (::fwTools::Failed);
-
-    /// Show the frame
-    void updating() throw (::fwTools::Failed);
-
-    /// Does nothing
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
-    /// Stops action
-    void stopping() throw (::fwTools::Failed);
-
-    UIGENERICQT_API void info(std::ostream &_sstream ) ;
-
-protected Q_SLOTS:
-
-    void onUrlClicked(const QUrl & url );
-
-private:
-    /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the help files path is known.
-    */
-    bool m_bServiceIsConfigured;
-
-    /**
-    * @brief acknowledge file path.
-    */
-    ::boost::filesystem::path m_fsAckPath;
-};
-
-} // namespace action
-} // namespace uiGeneric
-
-#endif /*_UIGENERICQT_ACTION_SHOWACK_HPP_*/
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowHelpContents.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowHelpContents.hpp
index 8bb2861..74129ba 100644
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowHelpContents.hpp
+++ b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowHelpContents.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIGENERICQT_UI_ACTION_SHOWHELPCONTENTS_HPP_
-#define _UIGENERICQT_UI_ACTION_SHOWHELPCONTENTS_HPP_
+#ifndef __UIGENERICQT_ACTION_SHOWHELPCONTENTS_HPP__
+#define __UIGENERICQT_ACTION_SHOWHELPCONTENTS_HPP__
 
 #include <boost/filesystem/path.hpp>
 
@@ -21,56 +21,51 @@ namespace action
 /**
  * @brief   This action show the help contents.
  * @class   ShowHelpContents
- * 
- * @date    2010.
  */
 class UIGENERICQT_CLASS_API ShowHelpContents : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ShowHelpContents)( ::fwGui::IActionSrv) ) ;
-    UIGENERICQT_API ShowHelpContents() throw() ;
+    fwCoreServiceClassDefinitionsMacro ( (ShowHelpContents)( ::fwGui::IActionSrv) );
+    UIGENERICQT_API ShowHelpContents() throw();
 
-    UIGENERICQT_API virtual ~ShowHelpContents() throw() ;
+    UIGENERICQT_API virtual ~ShowHelpContents() throw();
 
 protected:
 
     /**
-    * @brief Configuring method.
-    *
-    * XML configuration sample:
-    * @verbatim
-    <service impl="::uiGeneric::ui::action::ShowHelpContents" type="::fwGui::IActionSrv">
+     * @brief Configuring method.
+     *
+     * XML configuration sample:
+     * @code{.xml}
+       <service impl="::uiGeneric::ui::action::ShowHelpContents" type="::fwGui::IActionSrv">
         <filename id=".../doc.qhc"/>
-    </service>
-    @endverbatim
-    * This method is used to configure the service.
-    */
+       </service>
+       @endcode
+     * This method is used to configure the service.
+     */
     void configuring() throw (::fwTools::Failed);
 
     /// Starts action
     void starting() throw (::fwTools::Failed);
 
-    /// Does nothing
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
     /// Show the frame
     void updating() throw(::fwTools::Failed);
 
     /// Stops action
     void stopping() throw (::fwTools::Failed);
 
-    UIGENERICQT_API void info(std::ostream &_sstream ) ;
+    UIGENERICQT_API void info(std::ostream &_sstream );
 
 private:
     /**
-    * @brief the m_bServiceIsConfigured value is \b true
-    * if the help files path is known.
-    */
+     * @brief the m_bServiceIsConfigured value is \b true
+     * if the help files path is known.
+     */
     bool m_bServiceIsConfigured;
 
     /**
-    * @brief help files path.
-    */
+     * @brief help files path.
+     */
     ::boost::filesystem::path m_fsHelpPath;
 };
 
@@ -78,4 +73,4 @@ private:
 
 } // namespace uiGeneric
 
-#endif /*_UIGENERICQT_ACTION_SHOWHELPCONTENTS_HPP_*/
+#endif /*__UIGENERICQT_ACTION_SHOWHELPCONTENTS_HPP__*/
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowRevInfo.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowRevInfo.hpp
index e55aaa8..bb436f4 100644
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowRevInfo.hpp
+++ b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/action/ShowRevInfo.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIGENERICQT_UI_ACTION_SHOWREVINFO_HPP_
-#define _UIGENERICQT_UI_ACTION_SHOWREVINFO_HPP_
+#ifndef __UIGENERICQT_ACTION_SHOWREVINFO_HPP__
+#define __UIGENERICQT_ACTION_SHOWREVINFO_HPP__
 
 #include <map>
 #include <set>
@@ -28,12 +28,11 @@ namespace action
 /**
  * @brief   This action show the revision info for bundle and lib.
  * @class   ShowRevInfo
- * 
- * @date    2011.
  */
-class UIGENERICQT_CLASS_API ShowRevInfo : public QObject, public ::fwGui::IActionSrv
+class UIGENERICQT_CLASS_API ShowRevInfo : public QObject,
+                                          public ::fwGui::IActionSrv
 {
-    Q_OBJECT
+Q_OBJECT
 public:
 
     typedef std::map<std::string, ::boost::filesystem::path> FindMapType;
@@ -42,21 +41,21 @@ public:
     typedef std::pair<BundleNameSet, LibNameSet> BundleLibPairType;
     typedef std::map<std::string, BundleLibPairType> RevMapType;
 
-    fwCoreServiceClassDefinitionsMacro ( (ShowRevInfo)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ShowRevInfo)( ::fwGui::IActionSrv) );
 
-    UIGENERICQT_API ShowRevInfo() throw() ;
+    UIGENERICQT_API ShowRevInfo() throw();
 
-    UIGENERICQT_API virtual ~ShowRevInfo() throw() ;
+    UIGENERICQT_API virtual ~ShowRevInfo() throw();
 
 protected:
 
     /**
      * @brief configure the action.
-     * @verbatim
-    <service type="::fwGui::IActionSrv" impl="::uiGeneric::action::ShowRevInfo" autoConnect="no" />
-       @endverbatim
+     * @code{.xml}
+       <service type="::fwGui::IActionSrv" impl="::uiGeneric::action::ShowRevInfo" autoConnect="no" />
+       @endcode
      */
-    UIGENERICQT_API void configuring() throw( ::fwTools::Failed ) ;
+    UIGENERICQT_API void configuring() throw( ::fwTools::Failed );
 
     /// Starts action
     UIGENERICQT_API void starting() throw (::fwTools::Failed);
@@ -64,13 +63,10 @@ protected:
     /// Show the frame
     UIGENERICQT_API void updating() throw (::fwTools::Failed);
 
-    /// Does nothing
-    UIGENERICQT_API void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     /// Stops action
     UIGENERICQT_API void stopping() throw (::fwTools::Failed);
 
-    UIGENERICQT_API void info(std::ostream &_sstream ) ;
+    UIGENERICQT_API void info(std::ostream &_sstream );
 
 private:
 
@@ -88,4 +84,4 @@ protected Q_SLOTS:
 } // namespace action
 } // namespace uiGeneric
 
-#endif /*_UIGENERICQT_UI_ACTION_SHOWREVINFO_HPP_*/
+#endif /*__UIGENERICQT_ACTION_SHOWREVINFO_HPP__*/
diff --git a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/config.hpp b/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/config.hpp
deleted file mode 100644
index eaa3bfe..0000000
--- a/Bundles/LeafUI/uiGenericQt/include/uiGenericQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIGENERICQT_CONFIG_HPP_
-#define _UIGENERICQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIGENERICQT_EXPORTS
-    #define UIGENERICQT_API __declspec(dllexport)
-    #else
-    #define UIGENERICQT_API __declspec(dllimport)
-    #endif
-
-    #define UIGENERICQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIGENERICQT_EXPORTS
-    #define UIGENERICQT_API __attribute__ ((visibility("default")))
-    #define UIGENERICQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIGENERICQT_API __attribute__ ((visibility("hidden")))
-    #define UIGENERICQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIGENERICQT_API
-    #define UIGENERICQT_CLASS_API
-
-#endif
-
-#endif //_UIGENERICQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiGenericQt/rc/plugin.xml b/Bundles/LeafUI/uiGenericQt/rc/plugin.xml
index 84ea4d0..db2f179 100644
--- a/Bundles/LeafUI/uiGenericQt/rc/plugin.xml
+++ b/Bundles/LeafUI/uiGenericQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiGenericQt" class="::uiGenericQt::Plugin">
+<plugin id="uiGenericQt" class="::uiGenericQt::Plugin" version="@DASH_VERSION@" >
     <library name="uiGenericQt"/>
 
     <requirement id="dataReg"/>
@@ -20,12 +20,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::uiGeneric::action::ShowAcknowledgments</service>
-        <object>::fwData::Object</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IActionSrv</type>
         <service>::uiGeneric::action::ShowHelpContents</service>
         <object>::fwData::Object</object>
     </extension>
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/Plugin.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/Plugin.cpp
index e1df96c..e33c06b 100644
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/Plugin.cpp
+++ b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,12 +15,15 @@ namespace uiGeneric
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiGenericQt::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiGeneric
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp
index e73f0b5..8587afd 100644
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp
+++ b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/LaunchBrowserActionService.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,6 @@
 #include <fwCore/base.hpp>
 #include <fwData/Object.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 
 #include "uiGenericQt/action/LaunchBrowserActionService.hpp"
@@ -27,7 +26,7 @@ namespace action
 
 //------------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiGeneric::action::LaunchBrowserActionService , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiGeneric::action::LaunchBrowserActionService, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
@@ -39,7 +38,8 @@ LaunchBrowserActionService::LaunchBrowserActionService( ) throw()
 //------------------------------------------------------------------------------
 
 LaunchBrowserActionService::~LaunchBrowserActionService() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -74,7 +74,7 @@ void LaunchBrowserActionService::updating() throw( ::fwTools::Failed )
     if(url.isRelative()) // no scheme
     {
         ::boost::filesystem::path path(QCoreApplication::applicationDirPath().toStdString());
-        path = path.parent_path(); // install folder path
+        path  = path.parent_path(); // install folder path
         path /= url.path().toStdString();
 
         QString urlStr = QString::fromStdString("file:///" + path.string());
@@ -87,11 +87,6 @@ void LaunchBrowserActionService::updating() throw( ::fwTools::Failed )
 
 //------------------------------------------------------------------------------
 
-void LaunchBrowserActionService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void LaunchBrowserActionService::starting() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStarting();
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/SShowAbout.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/SShowAbout.cpp
index 2466823..8b82ee9 100644
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/SShowAbout.cpp
+++ b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/SShowAbout.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,7 +21,6 @@
 #include <boost/filesystem/operations.hpp>
 #include <fwCore/base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/macros.hpp>
 
 #include "uiGenericQt/action/SShowAbout.hpp"
 
@@ -30,25 +29,27 @@ namespace uiGeneric
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiGeneric::action::SShowAbout , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiGeneric::action::SShowAbout, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
-SShowAbout::SShowAbout( ) throw():
+SShowAbout::SShowAbout( ) throw() :
     m_bServiceIsConfigured(false),
     m_fsAboutPath(""),
     m_title("About"),
     m_size(500, 300)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SShowAbout::~SShowAbout() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void SShowAbout::info(std::ostream &_sstream )
+void SShowAbout::info(std::ostream& _sstream )
 {
     _sstream << "SShowAbout" << std::endl;
 }
@@ -59,17 +60,17 @@ void SShowAbout::configuring() throw(::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::initialize();
 
-    typedef SPTR(::fwRuntime::ConfigurationElement) ConfigurationElement;
+    typedef SPTR (::fwRuntime::ConfigurationElement) ConfigurationElement;
 
     ConfigurationElement cfgFilename = m_configuration->findConfigurationElement("filename");
-    ConfigurationElement cfgTitle = m_configuration->findConfigurationElement("title");
-    ConfigurationElement cfgSize = m_configuration->findConfigurationElement("size");
+    ConfigurationElement cfgTitle    = m_configuration->findConfigurationElement("title");
+    ConfigurationElement cfgSize     = m_configuration->findConfigurationElement("size");
 
     if(cfgFilename)
     {
         const std::string& filename = cfgFilename->getExistingAttributeValue("id");
 
-        m_fsAboutPath = ::boost::filesystem::path(std::string(SHAREPATH) + filename);
+        m_fsAboutPath          = ::boost::filesystem::path(filename);
         m_bServiceIsConfigured = ::boost::filesystem::exists(m_fsAboutPath);
         SLM_WARN_IF("About file " + filename + " doesn't exist", !m_bServiceIsConfigured);
         SLM_TRACE("Filename found '" + filename + "'");
@@ -98,7 +99,7 @@ void SShowAbout::configuring() throw(::fwTools::Failed)
 void SShowAbout::updating( ) throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    SLM_ASSERT("The about service isn't configured properly.", m_bServiceIsConfigured );
+    SLM_ASSERT("The service 'SShowAbout' isn't configured properly.", m_bServiceIsConfigured );
 
     QDialog* dialog = new QDialog(qApp->activeWindow());
     dialog->setWindowTitle(QString::fromStdString(m_title));
@@ -107,15 +108,18 @@ void SShowAbout::updating( ) throw(::fwTools::Failed)
     QWebView* htmlView = new QWebView(dialog);
     htmlView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
     htmlView->load( url );
-    QObject::connect( htmlView, SIGNAL(linkClicked(const QUrl&)),this, SLOT(onUrlClicked(const QUrl&)));
+    QObject::connect( htmlView, SIGNAL(linkClicked(const QUrl &)),this, SLOT(onUrlClicked(const QUrl &)));
 #else
-    QTextBrowser * htmlView = new QTextBrowser(dialog);
+    QTextBrowser* htmlView = new QTextBrowser(dialog);
     htmlView->setSource(url);
     htmlView->setOpenExternalLinks(true);
     htmlView->setMinimumSize(m_size);
+    QStringList searchPaths;
+    searchPaths.append(QString::fromStdString(m_fsAboutPath.parent_path().string()));
+    htmlView->setSearchPaths(searchPaths);
 #endif
     QPushButton* okButton = new QPushButton(QObject::tr("Ok"));
-    QHBoxLayout *hLayout = new QHBoxLayout();
+    QHBoxLayout* hLayout  = new QHBoxLayout();
     hLayout->addStretch();
     hLayout->addWidget(okButton);
     hLayout->setContentsMargins(5, 5, 5, 5);
@@ -147,11 +151,6 @@ void SShowAbout::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SShowAbout::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void SShowAbout::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
@@ -159,7 +158,7 @@ void SShowAbout::stopping() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SShowAbout::onUrlClicked(const QUrl & url )
+void SShowAbout::onUrlClicked(const QUrl& url )
 {
     QDesktopServices::openUrl(url);
 }
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowAcknowledgments.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowAcknowledgments.cpp
deleted file mode 100644
index 9901905..0000000
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowAcknowledgments.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <QApplication>
-#if defined(QT_WEBKIT)
-#include <QWebView>
-#include <QWebPage>
-#else
-#include <QTextBrowser>
-#endif
-#include <QDialog>
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-#include <QPushButton>
-#include <QFrame>
-#include <QDesktopServices>
-
-#include <boost/filesystem/operations.hpp>
-#include <fwCore/base.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/macros.hpp>
-
-#include "uiGenericQt/action/ShowAcknowledgments.hpp"
-
-namespace uiGeneric
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiGeneric::action::ShowAcknowledgments , ::fwData::Object ) ;
-
-//------------------------------------------------------------------------------
-
-ShowAcknowledgments::ShowAcknowledgments( ) throw():
-m_bServiceIsConfigured(false),
-m_fsAckPath("")
-{}
-
-//------------------------------------------------------------------------------
-
-ShowAcknowledgments::~ShowAcknowledgments() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void ShowAcknowledgments::info(std::ostream &_sstream )
-{
-    _sstream << "ShowAcknowledgments" << std::endl;
-}
-
-//------------------------------------------------------------------------------
-void ShowAcknowledgments::configuring() throw(::fwTools::Failed)
-{
-    this->::fwGui::IActionSrv::initialize();
-    if( m_configuration->findConfigurationElement("filename") )
-    {
-        std::string filename = m_configuration->findConfigurationElement("filename")->getExistingAttributeValue("id") ;
-        m_fsAckPath = ::boost::filesystem::path(std::string(SHAREPATH) + filename);
-        m_bServiceIsConfigured = ::boost::filesystem::exists(m_fsAckPath);
-        OSLM_WARN_IF("Acknowledgments file " <<filename<< " doesn't exist", !m_bServiceIsConfigured);
-        OSLM_TRACE("Filename found " << filename ) ;
-    }
-}
-
-//------------------------------------------------------------------------------
-void ShowAcknowledgments::updating( ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    SLM_ASSERT("The Acknowledgments service isn't configured properly.", m_bServiceIsConfigured);
-
-    QDialog* dialog = new QDialog(qApp->activeWindow());
-    dialog->setWindowTitle(QString("Acknowledgments"));
-    QUrl url(QString::fromStdString(m_fsAckPath.string()));
-#if defined(QT_WEBKIT)
-    QWebView* htmlView = new QWebView(dialog);
-    htmlView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
-    htmlView->load( url );
-    QObject::connect( htmlView, SIGNAL(linkClicked(const QUrl&)),this, SLOT(onUrlClicked(const QUrl&)));
-#else
-    QTextBrowser * htmlView = new QTextBrowser (dialog);
-    htmlView->setSource(url);
-    htmlView->setOpenExternalLinks(true);
-    htmlView->setMinimumSize(500, 400);
-#endif
-    QPushButton* okButton = new QPushButton(QObject::tr("Ok"));
-    QHBoxLayout *hLayout = new QHBoxLayout();
-    hLayout->addStretch();
-    hLayout->addWidget(okButton);
-    hLayout->setContentsMargins(5,5,5,5);
-
-    QFrame* line = new QFrame(dialog);
-    line->setFrameShape(QFrame::HLine);
-    line->setFrameShadow(QFrame::Sunken);
-
-    QVBoxLayout* layout = new QVBoxLayout();
-    layout->addWidget(htmlView, 0);
-    layout->addWidget(line, 0);
-    layout->addLayout(hLayout, 0);
-    layout->setContentsMargins(0,0,0,0);
-    layout->setSpacing(0);
-    dialog->setLayout( layout );
-
-    QObject::connect(okButton, SIGNAL(clicked()), dialog, SLOT(accept()));
-    dialog->exec();
-}
-
-//------------------------------------------------------------------------------
-
-void ShowAcknowledgments::starting() throw (::fwTools::Failed)
-{
-    this->::fwGui::IActionSrv::actionServiceStarting();
-}
-
-//------------------------------------------------------------------------------
-
-void ShowAcknowledgments::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
-void ShowAcknowledgments::stopping() throw (::fwTools::Failed)
-{
-    this->::fwGui::IActionSrv::actionServiceStopping();
-}
-
-//------------------------------------------------------------------------------
-
-void ShowAcknowledgments::onUrlClicked(const QUrl & url )
-{
-    QDesktopServices::openUrl(url);
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace action
-
-} // namespace uiGeneric
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowHelpContents.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowHelpContents.cpp
index 66372e5..439a4bd 100644
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowHelpContents.cpp
+++ b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowHelpContents.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -40,9 +40,13 @@ public:
     QVariant loadResource(int type, const QUrl &url)
     {
         if (url.scheme() == "qthelp")
+        {
             return QVariant(helpEngine->fileData(url));
+        }
         else
+        {
             return QTextBrowser::loadResource(type, url);
+        }
     }
 
 private:
@@ -51,19 +55,21 @@ private:
 //------------------------------------------------------------------------------
 
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiGeneric::action::ShowHelpContents , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiGeneric::action::ShowHelpContents, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
-ShowHelpContents::ShowHelpContents( ) throw():
+ShowHelpContents::ShowHelpContents( ) throw() :
     m_bServiceIsConfigured(false),
     m_fsHelpPath("")
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ShowHelpContents::~ShowHelpContents() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -81,15 +87,15 @@ void ShowHelpContents::configuring() throw(::fwTools::Failed)
      *                             an index of items in the documentation, and a file manifest.
      * .qhcp/.qhc (source/binary): Contains information that is used to customize
      *                             the appearance and available features of Qt Assistant.
-    */
+     */
     this->::fwGui::IActionSrv::initialize();
     if( m_configuration->findConfigurationElement("filename") )
     {
-        std::string filename = m_configuration->findConfigurationElement("filename")->getExistingAttributeValue("id") ;
-        m_fsHelpPath = ::boost::filesystem::path( filename ) ;
+        std::string filename = m_configuration->findConfigurationElement("filename")->getExistingAttributeValue("id");
+        m_fsHelpPath           = ::boost::filesystem::path( filename );
         m_bServiceIsConfigured = ::boost::filesystem::exists(m_fsHelpPath);
         OSLM_WARN_IF("Help file " <<filename<< " doesn't exist", !m_bServiceIsConfigured);
-        OSLM_TRACE("Filename found " << filename ) ;
+        OSLM_TRACE("Filename found " << filename );
     }
 }
 
@@ -112,12 +118,12 @@ void ShowHelpContents::updating() throw(::fwTools::Failed)
         messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
         messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
         messageBox.show();
-       // Setup help engine information failed.
-       // qhc (Qt Help Collection) or qch (Qt Compressed Help) file is not correct.
+        // Setup help engine information failed.
+        // qhc (Qt Help Collection) or qch (Qt Compressed Help) file is not correct.
     }
     else
     {
-        QSplitter *helpPanel = new QSplitter(Qt::Horizontal);
+        QSplitter *helpPanel     = new QSplitter(Qt::Horizontal);
         HelpBrowser *helpBrowser = new HelpBrowser(helpEngine, dialog);
         helpPanel->insertWidget(0, helpEngine->contentWidget());
         helpPanel->insertWidget(1, helpBrowser);
@@ -126,7 +132,8 @@ void ShowHelpContents::updating() throw(::fwTools::Failed)
         QHBoxLayout *hLayout = new QHBoxLayout();
         hLayout->addWidget(helpPanel);
         dialog->setLayout( hLayout );
-        QObject::connect(helpEngine->contentWidget(), SIGNAL(linkActivated(const QUrl &)), helpBrowser, SLOT(setSource(const QUrl &)));
+        QObject::connect(helpEngine->contentWidget(), SIGNAL(linkActivated(const QUrl &)), helpBrowser,
+                         SLOT(setSource(const QUrl &)));
 
         dialog->exec();
     }
@@ -141,11 +148,6 @@ void ShowHelpContents::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ShowHelpContents::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void ShowHelpContents::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
diff --git a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowRevInfo.cpp b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowRevInfo.cpp
index 22feed5..2bbb02f 100644
--- a/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowRevInfo.cpp
+++ b/Bundles/LeafUI/uiGenericQt/src/uiGenericQt/action/ShowRevInfo.cpp
@@ -1,63 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
+#include "uiGenericQt/action/ShowRevInfo.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwServices/macros.hpp>
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/operations.hpp>
 #include <fstream>
+#include <iostream>
 
 #include <QApplication>
-#include <QTextBrowser>
 #include <QDialog>
-#include <QVBoxLayout>
+#include <QFrame>
 #include <QHBoxLayout>
 #include <QPushButton>
-#include <QFrame>
-
-#include <QTextDocumentWriter>
 #include <QTextBlockFormat>
+#include <QTextBrowser>
 #include <QTextCharFormat>
 #include <QTextCursor>
+#include <QTextDocumentWriter>
 #include <QTextTableFormat>
-
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/location/SingleFile.hpp>
-#include <fwData/location/Folder.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/macros.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
-
-#include "uiGenericQt/action/ShowRevInfo.hpp"
+#include <QVBoxLayout>
 
 namespace uiGeneric
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiGeneric::action::ShowRevInfo , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiGeneric::action::ShowRevInfo, ::fwData::Object );
 
 //------------------------------------------------------------------------------
 
 ShowRevInfo::ShowRevInfo( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ShowRevInfo::~ShowRevInfo() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void ShowRevInfo::info(std::ostream &_sstream )
+void ShowRevInfo::info(std::ostream& _sstream )
 {
     _sstream << "ShowRevInfo" << std::endl;
 }
@@ -76,14 +71,14 @@ void ShowRevInfo::updating( ) throw(::fwTools::Failed)
     QDialog* dialog = new QDialog(qApp->activeWindow());
     dialog->setWindowTitle(QString("Revision info"));
 
-    QTextBrowser * htmlView = new QTextBrowser (dialog);
+    QTextBrowser* htmlView = new QTextBrowser (dialog);
     htmlView->setDocument(this->generateReport());
     htmlView->setOpenExternalLinks(true);
     htmlView->setMinimumSize(800, 600);
 
-    QPushButton* okButton = new QPushButton(QObject::tr("Ok"));
+    QPushButton* okButton  = new QPushButton(QObject::tr("Ok"));
     QPushButton* genButton = new QPushButton(QObject::tr("Save report"));
-    QHBoxLayout *hLayout = new QHBoxLayout();
+    QHBoxLayout* hLayout   = new QHBoxLayout();
     hLayout->addStretch();
     hLayout->addWidget(genButton);
     hLayout->addWidget(okButton);
@@ -115,11 +110,6 @@ void ShowRevInfo::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ShowRevInfo::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void ShowRevInfo::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
@@ -163,15 +153,11 @@ QTextDocument* ShowRevInfo::generateReport()
     tableFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Solid);
     tableFormat.setWidth(QTextLength(QTextLength::PercentageLength, 100));
 
-#ifdef SPECIALINSTALL
-    ::boost::filesystem::path bundlePath = BUNDLEPATH;
-    ::boost::filesystem::path libPath    = SHAREPATH;
-#else
-    ::boost::filesystem::path bundlePath = ::boost::filesystem::current_path() / "Bundles";
-    ::boost::filesystem::path libPath    = ::boost::filesystem::current_path() / "share";
-#endif
+    ::boost::filesystem::path bundlePath = ::boost::filesystem::current_path() /
+                                           ::boost::filesystem::path(BUNDLE_PREFIX);
+    ::boost::filesystem::path libPath = ::boost::filesystem::current_path() / "share";
     const FindMapType& bundleMap = this->findRevInfo(bundlePath);
-    const FindMapType& libMap =  this->findRevInfo(libPath);
+    const FindMapType& libMap    = this->findRevInfo(libPath);
 
     RevMapType revMap;
     this->getRevMap(bundleMap, revMap, true);
@@ -195,19 +181,19 @@ QTextDocument* ShowRevInfo::generateReport()
     cursor.insertText(tr("Lib"), boldFormat);
     cursor.movePosition(QTextCursor::NextCell);
 
-    BOOST_FOREACH(RevMapType::value_type val, revMap)
+    for(RevMapType::value_type val :  revMap)
     {
         cursor.insertHtml(QString::fromStdString(val.first).replace("\n","<br/>"));
         cursor.movePosition(QTextCursor::NextCell);
         cursor.setBlockFormat(centerFormat);
-        BOOST_FOREACH(std::string name, val.second.first)
+        for(std::string name :  val.second.first)
         {
             cursor.insertHtml(QString::fromStdString("<br/>" + name));
         }
 
         cursor.movePosition(QTextCursor::NextCell);
         cursor.setBlockFormat(centerFormat);
-        BOOST_FOREACH(std::string name, val.second.second)
+        for(std::string name :  val.second.second)
         {
             cursor.insertHtml(QString::fromStdString("<br/>" + name));
         }
@@ -226,19 +212,11 @@ const ShowRevInfo::FindMapType ShowRevInfo::findRevInfo(const ::boost::filesyste
     std::string findname;
     for (::boost::filesystem::recursive_directory_iterator iter(findPath), end; iter != end; ++iter)
     {
-#if BOOST_FILESYSTEM_VERSION > 2
         filename = iter->path().filename().string();
-#else
-        filename =  iter->path().leaf();
-#endif
         if(filename == "rev.info")
         {
-#if BOOST_FILESYSTEM_VERSION > 2
-            findname = iter->path().parent_path().filename().string();
-#else
-            findname = iter->path().leaf();
-#endif
-            findname = iter->path().parent_path().filename().string();
+            findname          = iter->path().parent_path().filename().string();
+            findname          = iter->path().parent_path().filename().string();
             findMap[findname] = iter->path();
         }
     }
@@ -250,7 +228,7 @@ const ShowRevInfo::FindMapType ShowRevInfo::findRevInfo(const ::boost::filesyste
 
 void ShowRevInfo::getRevMap(const ShowRevInfo::FindMapType& findMap, ShowRevInfo::RevMapType& revMap, bool isBundle)
 {
-    BOOST_FOREACH(FindMapType::value_type val, findMap)
+    for(FindMapType::value_type val :  findMap)
     {
         size_t length;
         std::string buf;
@@ -267,7 +245,7 @@ void ShowRevInfo::getRevMap(const ShowRevInfo::FindMapType& findMap, ShowRevInfo
         length = file.tellg();
         file.seekg (0, std::ios::beg);
         buf.resize(length);
-        char *buffer = &buf[0];
+        char* buffer = &buf[0];
 
         file.read (buffer, length);
         file.close();
@@ -295,12 +273,12 @@ void ShowRevInfo::saveReport()
     dialogFile.addFilter("HTML","*.html");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
 
     if( result )
     {
         ::boost::filesystem::path filename = result->getPath();
-        _sDefaultPath = filename.parent_path();
+        _sDefaultPath                      = filename.parent_path();
         dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
 
         QTextDocument* document = this->generateReport();
diff --git a/Bundles/LeafUI/uiIO/CMakeLists.txt b/Bundles/LeafUI/uiIO/CMakeLists.txt
index be0b3cd..1c29206 100644
--- a/Bundles/LeafUI/uiIO/CMakeLists.txt
+++ b/Bundles/LeafUI/uiIO/CMakeLists.txt
@@ -1,8 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwMedData
-    fwRuntime
 
-    gui
-)
diff --git a/Bundles/LeafUI/uiIO/COPYING b/Bundles/LeafUI/uiIO/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiIO/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiIO/COPYING.LESSER b/Bundles/LeafUI/uiIO/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiIO/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiIO/Properties.cmake b/Bundles/LeafUI/uiIO/Properties.cmake
index f05cc38..3796573 100644
--- a/Bundles/LeafUI/uiIO/Properties.cmake
+++ b/Bundles/LeafUI/uiIO/Properties.cmake
@@ -2,6 +2,25 @@
 set( NAME uiIO )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwMedData fwRuntime fwServices gui io )
-set( REQUIREMENTS  )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwTools
+    fwJobs
+    fwMedData
+    fwMedDataTools
+    fwRuntime
+    fwServices
+
+    gui
+    io
+)
+
+set( REQUIREMENTS
+    gui
+    dataReg
+    servicesReg
+)
 
diff --git a/Bundles/LeafUI/uiIO/bin/build.options b/Bundles/LeafUI/uiIO/bin/build.options
deleted file mode 100644
index 42ae638..0000000
--- a/Bundles/LeafUI/uiIO/bin/build.options
+++ /dev/null
@@ -1,13 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwCore_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwMedData_0-1',
-          'fwServices_0-1',
-          'fwTools_0-1',
-          'fwComEd_0-1',
-          'fwGui_0-1'
-          ]
-BUNDLES = ['gui_0-1','io_0-1']
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/Namespace.hpp b/Bundles/LeafUI/uiIO/include/uiIO/Namespace.hpp
index b7e68a5..046dde8 100644
--- a/Bundles/LeafUI/uiIO/include/uiIO/Namespace.hpp
+++ b/Bundles/LeafUI/uiIO/include/uiIO/Namespace.hpp
@@ -1,21 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIIONAMESPACE_HPP_
-#define UIIONAMESPACE_HPP_
+#ifndef __UIIO_NAMESPACE_HPP__
+#define __UIIO_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiIO contains a simple service to manipulate IO with IHM..
- * @namespace   uiIO
- * 
- * @date        2009-2010.
- *
  */
 namespace uiIO
 {
 
+/**
+ * @brief       The namespace uiIO::editor contains a simple IO selector service.
+ */
+namespace editor
+{
+
+}
+
+/**
+ * @brief       The namespace uiIO::action contains action to manipulate Reader/Writer.
+ */
+namespace editor
+{
+
+}
+
 }
-#endif /* UIIONAMESPACE_HPP_ */
+#endif /* __UIIO_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/Plugin.hpp b/Bundles/LeafUI/uiIO/include/uiIO/Plugin.hpp
index 8202c0e..e5c941c 100644
--- a/Bundles/LeafUI/uiIO/include/uiIO/Plugin.hpp
+++ b/Bundles/LeafUI/uiIO/include/uiIO/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIO_PLUGIN_HPP_
-#define _UIIO_PLUGIN_HPP_
+#ifndef __UIIO_PLUGIN_HPP__
+#define __UIIO_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -16,19 +16,19 @@ namespace uiIO
 class Plugin : public ::fwRuntime::Plugin
 {
 
-public :
+public:
 
     /// PLugin destructor
     ~Plugin() throw();
-    
+
     /// This method is used by runtime to initialize the bundle.
     void start() throw( ::fwRuntime::RuntimeException );
 
     /// This method is used by runtime to stop the bundle.
     void stop() throw();
-    
+
 };
 
 } // namespace uiIO
 
-#endif //_UIIO_PLUGIN_HPP_
+#endif //__UIIO_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/action/SExportWithSeriesDB.hpp b/Bundles/LeafUI/uiIO/include/uiIO/action/SExportWithSeriesDB.hpp
new file mode 100644
index 0000000..9c6d25a
--- /dev/null
+++ b/Bundles/LeafUI/uiIO/include/uiIO/action/SExportWithSeriesDB.hpp
@@ -0,0 +1,117 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __UIIO_ACTION_SEXPORTWITHSERIESDB_HPP__
+#define __UIIO_ACTION_SEXPORTWITHSERIESDB_HPP__
+
+#include "uiIO/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Slot.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
+
+namespace fwJobs
+{
+class IJob;
+}
+
+namespace uiIO
+{
+namespace action
+{
+
+/**
+ * @brief   This action allows to export the current series using a temporary seriesDB.
+ *
+ * This service must work on a series.
+ * It creates a new SeriesDB containing this series, and then launchs an ::uiIO::editor::SIOSelector service on the
+ * created SeriesDB with the given configuration.
+ *
+ * @section XML XML Configuration
+ *
+ * The available reader can be configured
+ * @code{.xml}
+    <service uid="action_seriesExporter" impl="::uiIO::action::SExportWithSeriesDB">
+        <IOSelectorSrvConfig name="seriesDBImporterConfig" />
+    </service>
+   @endcode
+ * With :
+ *  - \b IOSelectorSrvConfig : the id of a configuration for SIOSelector
+ *  for example
+ *  @code{.xml}
+    <extension implements="::fwServices::registry::ServiceConfig">
+        <id>seriesDBExporterConfig</id>
+        <service>::uiIO::editor::SIOSelector</service>
+        <desc>IOSelector config to export SeriesDB</desc>
+        <config>
+            <type mode="writer" />
+            <selection mode="include" />
+            <addSelection service="::ioAtoms::SWriter" />
+        </config>
+    </extension>
+    @endcode
+ *
+ * @section Slot Slot
+ * - \b forwardJob(SPTR(::fwJobs::IJob)) : This slot allows to forward job process between SIOSelector service
+ *   and other services. It is connected to SIOSelector 'jobCreated' signal.
+ *
+ * @section Signal Signal
+ * - \b jobCreated(SPTR(::fwJobs::IJob)) : This signal is emitted by the slot 'forwardJob' to forward job process
+ *   between SIOSelector service (jobCreated signal) and other services.
+ */
+class UIIO_CLASS_API SExportWithSeriesDB : public ::fwGui::IActionSrv
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SExportWithSeriesDB)( ::fwGui::IActionSrv) );
+
+    /**
+     * @name Signal/Slot typedefs
+     * @{
+     */
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+    typedef ::fwCom::Slot< void ( SPTR(::fwJobs::IJob) ) > ForwardJobSlotType;
+    /// @}
+
+    UIIO_API SExportWithSeriesDB() throw();
+
+    UIIO_API virtual ~SExportWithSeriesDB() throw();
+
+protected:
+
+    /**
+     * @brief Configure action. Retrieves the IOSelector config.
+     */
+    void configuring() throw( ::fwTools::Failed );
+
+    /// Start action.
+    void starting() throw (::fwTools::Failed);
+
+    /// Show the SeriesDB reader selector, load the new SeriesDB and merge it the the current SeriesDB
+    void updating() throw (::fwTools::Failed);
+
+    /// Stop action.
+    void stopping() throw (::fwTools::Failed);
+
+    void info(std::ostream &_sstream );
+
+private:
+
+    /// SLOT: Allows to forward job process between io selector service and other services.
+    void forwardJob(SPTR(::fwJobs::IJob) iJob);
+
+    std::string m_ioSelectorSrvConfig; ///< Configuration used for launched SIOSelector service
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated; ///< signal emitted to forward SIOSelector job process
+    SPTR(ForwardJobSlotType) m_slotForwardJob; ///< slot used to forward SIOSelector job process
+
+};
+
+} // namespace action
+} // namespace uiIO
+
+#endif // __UIIO_ACTION_SEXPORTWITHSERIESDB_HPP__
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/action/SSeriesDBMerger.hpp b/Bundles/LeafUI/uiIO/include/uiIO/action/SSeriesDBMerger.hpp
index 5810b5a..add7398 100644
--- a/Bundles/LeafUI/uiIO/include/uiIO/action/SSeriesDBMerger.hpp
+++ b/Bundles/LeafUI/uiIO/include/uiIO/action/SSeriesDBMerger.hpp
@@ -1,17 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIO_ACTION_SSERIESDBMERGER_HPP_
-#define _UIIO_ACTION_SSERIESDBMERGER_HPP_
+#ifndef __UIIO_ACTION_SSERIESDBMERGER_HPP__
+#define __UIIO_ACTION_SSERIESDBMERGER_HPP__
 
-#include <fwMedData/SeriesDB.hpp>
+#include "uiIO/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Slot.hpp>
 
 #include <fwGui/IActionSrv.hpp>
 
-#include "uiIO/config.hpp"
+#include <fwMedData/SeriesDB.hpp>
+
+
+namespace fwJobs
+{
+class IJob;
+}
 
 namespace uiIO
 {
@@ -20,22 +29,20 @@ namespace action
 
 /**
  * @brief   This action allows to load a new SeriesDB and merge it with the current SeriesDB
- * @class   SSeriesDBMerger
- * @date    2013.
  *
  * The available reader can be configured
- * @verbatim
+ * @code{.xml}
     <service uid="action_seriesDBMerger" type="::fwGui::IActionSrv" impl="::uiIO::action::SSeriesDBMerger" autoConnect="no">
         <IOSelectorSrvConfig name="seriesDBImporterConfig" />
     </service>
-   @endverbatim
+   @endcode
  * With :
- *  - \b seriesDBImporterConfig : the id of a configuration for IOSelectorService
+ *  - \b seriesDBImporterConfig : the id of a configuration for SIOSelector
  *  for example
- *  @verbatim
+ *  @code{.xml}
     <extension implements="::fwServices::registry::ServiceConfig">
         <id>seriesDBImporterConfig</id>
-        <service>::uiIO::editor::IOSelectorService</service>
+        <service>::uiIO::editor::SIOSelector</service>
         <desc>IOSelector config to import SeriesDB</desc>
         <config>
             <type mode="reader" />
@@ -43,21 +50,33 @@ namespace action
             <addSelection service="::ioAtoms::SReader" />
         </config>
     </extension>
-    @endverbatim
+    @endcode
  */
 class UIIO_CLASS_API SSeriesDBMerger : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBMerger)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBMerger)( ::fwGui::IActionSrv) );
+
+    typedef ::fwCom::Signal< void ( SPTR(::fwJobs::IJob) ) > JobCreatedSignalType;
+    typedef ::fwCom::Slot< void ( SPTR(::fwJobs::IJob) ) > ForwardJobSlotType;
 
-    UIIO_API SSeriesDBMerger() throw() ;
+    UIIO_API SSeriesDBMerger() throw();
 
-    UIIO_API virtual ~SSeriesDBMerger() throw() ;
+    UIIO_API virtual ~SSeriesDBMerger() throw();
 
 protected:
 
-    /// Configure action. Retrieves the IOSelector config
-    void configuring() throw( ::fwTools::Failed ) ;
+    /**
+     * @brief Configure action. Retrieves the IOSelector config.
+     *
+     * @code{.xml}
+        <service impl="::uiIO::action::SSeriesDBMerger" autoConnect="no">
+            <IOSelectorSrvConfig name="myConfig" />
+        </service>
+       @endcode
+     * - \b IOSelectorSrvConfig: identifier of the ServiceConfig used for SIOSelector
+     */
+    void configuring() throw( ::fwTools::Failed );
 
     /// Start action.
     void starting() throw (::fwTools::Failed);
@@ -65,19 +84,21 @@ protected:
     /// Show the SeriesDB reader selector, load the new SeriesDB and merge it the the current SeriesDB
     void updating() throw (::fwTools::Failed);
 
-    /// Does nothing
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     /// Stop action.
     void stopping() throw (::fwTools::Failed);
-    void info(std::ostream &_sstream ) ;
+    void info(std::ostream &_sstream );
 
 private:
+    void forwardJob(SPTR(::fwJobs::IJob) iJob);
+
     std::string m_ioSelectorSrvConfig;
 
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+    SPTR(ForwardJobSlotType) m_slotForwardJob;
+
 };
 
 } // namespace action
 } // namespace uiIO
 
-#endif // _UIIO_ACTION_SSERIESDBMERGER_HPP_
+#endif // __UIIO_ACTION_SSERIESDBMERGER_HPP__
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/config.hpp b/Bundles/LeafUI/uiIO/include/uiIO/config.hpp
deleted file mode 100644
index 4c209a4..0000000
--- a/Bundles/LeafUI/uiIO/include/uiIO/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIIO_CONFIG_HPP_
-#define _UIIO_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIIO_EXPORTS
-    #define UIIO_API __declspec(dllexport)
-    #else
-    #define UIIO_API __declspec(dllimport)
-    #endif
-
-    #define UIIO_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIIO_EXPORTS
-    #define UIIO_API __attribute__ ((visibility("default")))
-    #define UIIO_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIIO_API __attribute__ ((visibility("hidden")))
-    #define UIIO_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIIO_API
-    #define UIIO_CLASS_API
-
-#endif
-
-#endif //_UIIO_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/editor/IOSelectorService.hpp b/Bundles/LeafUI/uiIO/include/uiIO/editor/IOSelectorService.hpp
deleted file mode 100644
index 3e6ccea..0000000
--- a/Bundles/LeafUI/uiIO/include/uiIO/editor/IOSelectorService.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIIO_EDITOR_IOSELECTORSERVICE_HPP_
-#define _UIIO_EDITOR_IOSELECTORSERVICE_HPP_
-
-#include <gui/editor/IDialogEditor.hpp>
-
-#include "uiIO/config.hpp"
-
-namespace uiIO
-{
-namespace editor
-{
-
-/**
- * @brief   Defines the service interface managing the editor service for object.
- * @class   IOSelectorService
- * 
- * @date    2009.
- */
-class UIIO_CLASS_API IOSelectorService : public ::gui::editor::IDialogEditor
-{
-
-public :
-
-    /// IOMode enum definition
-    typedef enum {
-        READER_MODE, /**< this mode allows to configure the service as a reader */
-        WRITER_MODE  /**< this mode allows to configure the service as a writer */
-    } IOMode;
-
-    fwCoreServiceClassDefinitionsMacro ( (IOSelectorService)( ::gui::editor::IDialogEditor) ) ;
-
-    /**
-     * @brief   Constructor. Do nothing (Just initialize parameters).
-     *
-     * By default, the IOSelectorService::m_mode is defined as READER_MODE, and IOSelectorService::m_servicesAreExcluded as true.
-     */
-    UIIO_API IOSelectorService();
-
-    /// Destructor. Do nothing.
-    UIIO_API virtual ~IOSelectorService() throw() ;
-
-    /**
-     * @brief This method allows to configure the service in reader or writer mode (set IOSelectorService::m_mode).
-     *
-     *@param[in] _mode the value can be IOSelectorService::READER_MODE or IOSelectorService::WRITER_MODE.
-     */
-    UIIO_API void setIOMode( IOMode _mode ) ;
-
-protected:
-
-    ///Starts the service. Do nothing.
-    UIIO_API void starting() throw( ::fwTools::Failed ) ;
-
-    /// Stops the service. Do nothing.
-    UIIO_API void stopping() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief   This method initializes class member parameters from configuration elements.
-     *
-     * The method verifies if the configuration is well written and retrieves user parameter values.
-     * Thanks to this method, IOSelectorService::m_selectedServices value is up to date (cleared before reconfiguring).
-     *
-     * Sample of configuration :
-     * @verbatim
-          <service uid="GENERIC_UID_writer" type="::gui::editor::IDialogEditor" impl="::uiIO::editor::IOSelectorService" autoConnect="no">
-              <type mode="writer" />
-              <selection mode="include" />
-              <addSelection service="::ioAtoms::SWriter" />
-              <config id="ioAtomsConfig" service="::ioAtoms::SWriter" />
-          </service>
-     * @endverbatim
-     * With :
-     * None of these parameters are mandatory.
-     *  - \b type
-     *      - \b mode (mandatory) : selector type must be "reader" (to open file) or "writer" (to write a new file).
-     *  - \b selection
-     *      - \b mode (mandatory) : must be include (to add the selection to selector list ) or exclude (to exclude the selection of the selector list).
-     *  - \b addSelection
-     *      - \b service (mandatory) : Name of the service to include/exclude to the choice list of the selector.
-     *  - \b config
-     *      - \b id (mandatory) : the id of the configuration to use.
-     *      - \b service (mandatory) :  the name of the service.
-    **/
-    UIIO_API void configuring() throw( ::fwTools::Failed ) ;
-
-    /// Create a dialogue box to provide the user different available readers (writer) for the IOSelector associated objects. Then, the selected reader (writer) is executed.
-    UIIO_API void updating() throw( ::fwTools::Failed ) ;
-
-    /// SLM_FATAL require an implementation gui::editor::IEditor::updating(msg)
-    UIIO_API void receiving( ::fwServices::ObjectMsg::csptr ) throw( ::fwTools::Failed );
-
-    /// Gives the name of the class. Do nothing.
-    UIIO_API void info( std::ostream &_sstream ) ;
-
-private :
-
-    /// Configure the service as writer or reader.
-    IOMode m_mode;
-
-    /// Configure if selected services are included or excluded.
-    bool m_servicesAreExcluded;
-
-    /**
-    * @brief List of services to be included or excluded.
-    *
-    * @see IOSelectorService::m_servicesAreExcluded.
-    */
-    std::vector< std::string > m_selectedServices;
-
-    /// Map that specifies a configuration extension for a service
-    std::map< std::string, std::string > m_serviceToConfig;
-
-    std::string m_inject;
-};
-
-} // namespace editor
-
-} // namespace uiIO
-
-#endif // _UIIO_EDITOR_IOSELECTORSERVICE_HPP_
-
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/editor/Namespace.hpp b/Bundles/LeafUI/uiIO/include/uiIO/editor/Namespace.hpp
deleted file mode 100644
index f47618f..0000000
--- a/Bundles/LeafUI/uiIO/include/uiIO/editor/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef UIIOEDITORNAMESPACE_HPP_
-#define UIIOEDITORNAMESPACE_HPP_
-
-namespace uiIO
-{
-/**
- * @brief       The namespace uiIO::editor contains a simple IO selector service.
- * @namespace   uiIO::editor
- * 
- * @date        2009-2010.
- *
- */
-namespace editor
-{
-
-}
-}
-#endif /* UIIOEDITORNAMESPACE_HPP_ */
diff --git a/Bundles/LeafUI/uiIO/include/uiIO/editor/SIOSelector.hpp b/Bundles/LeafUI/uiIO/include/uiIO/editor/SIOSelector.hpp
new file mode 100644
index 0000000..0f4d0b0
--- /dev/null
+++ b/Bundles/LeafUI/uiIO/include/uiIO/editor/SIOSelector.hpp
@@ -0,0 +1,137 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __UIIO_EDITOR_SIOSELECTOR_HPP__
+#define __UIIO_EDITOR_SIOSELECTOR_HPP__
+
+#include "uiIO/config.hpp"
+
+#include <gui/editor/IDialogEditor.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Slot.hpp>
+
+#include <fwJobs/IJob.hpp>
+
+
+namespace uiIO
+{
+namespace editor
+{
+
+/**
+ * @brief   Defines the service interface managing the editor service for object.
+ */
+class UIIO_CLASS_API SIOSelector : public ::gui::editor::IDialogEditor
+{
+
+public:
+
+    /// IOMode enum definition
+    typedef enum
+    {
+        READER_MODE, /**< this mode allows to configure the service as a reader */
+        WRITER_MODE  /**< this mode allows to configure the service as a writer */
+    } IOMode;
+
+    fwCoreServiceClassDefinitionsMacro ( (SIOSelector)( ::gui::editor::IDialogEditor) );
+
+    typedef ::fwCom::Signal< void ( ::fwJobs::IJob::sptr ) > JobCreatedSignalType;
+    typedef ::fwCom::Slot< void ( ::fwJobs::IJob::sptr ) > ForwardJobSlotType;
+
+    /**
+     * @brief   Constructor. Do nothing (Just initialize parameters).
+     *
+     * By default, the SIOSelector::m_mode is defined as READER_MODE, and SIOSelector::m_servicesAreExcluded as true.
+     */
+    UIIO_API SIOSelector();
+
+    /// Destructor. Do nothing.
+    UIIO_API virtual ~SIOSelector() throw();
+
+    /**
+     * @brief This method allows to configure the service in reader or writer mode (set SIOSelector::m_mode).
+     *
+     *@param[in] _mode the value can be SIOSelector::READER_MODE or SIOSelector::WRITER_MODE.
+     */
+    UIIO_API void setIOMode( IOMode _mode );
+
+protected:
+
+    ///Starts the service. Do nothing.
+    UIIO_API void starting() throw( ::fwTools::Failed );
+
+    /// Stops the service. Do nothing.
+    UIIO_API void stopping() throw( ::fwTools::Failed );
+
+    /**
+     * @brief   This method initializes class member parameters from configuration elements.
+     *
+     * The method verifies if the configuration is well written and retrieves user parameter values.
+     * Thanks to this method, SIOSelector::m_selectedServices value is up to date (cleared before reconfiguring).
+     *
+     * Sample of configuration :
+     * @code{.xml}
+          <service uid="GENERIC_UID_writer" type="::gui::editor::IDialogEditor" impl="::uiIO::editor::SIOSelector" autoConnect="no">
+              <type mode="writer" />
+              <selection mode="include" />
+              <addSelection service="::ioAtoms::SWriter" />
+              <config id="ioAtomsConfig" service="::ioAtoms::SWriter" />
+          </service>
+     * @endcode
+     * With :
+     * None of these parameters are mandatory.
+     *  - \b type
+     *      - \b mode (mandatory) : selector type must be "reader" (to open file) or "writer" (to write a new file).
+     *  - \b selection
+     *      - \b mode (mandatory) : must be include (to add the selection to selector list ) or exclude (to exclude the selection of the selector list).
+     *  - \b addSelection
+     *      - \b service (mandatory) : Name of the service to include/exclude to the choice list of the selector.
+     *  - \b config
+     *      - \b id (mandatory) : the id of the configuration to use.
+     *      - \b service (mandatory) :  the name of the service.
+     **/
+    UIIO_API void configuring() throw( ::fwTools::Failed );
+
+    /// Create a dialogue box to provide the user different available readers (writer) for the IOSelector associated objects. Then, the selected reader (writer) is executed.
+    UIIO_API void updating() throw( ::fwTools::Failed );
+
+    /// Gives the name of the class. Do nothing.
+    UIIO_API void info( std::ostream &_sstream );
+
+private:
+
+    void forwardJob(::fwJobs::IJob::sptr iJob);
+
+    /// Configure the service as writer or reader.
+    IOMode m_mode;
+
+    /// Configure if selected services are included or excluded.
+    bool m_servicesAreExcluded;
+
+    /**
+     * @brief List of services to be included or excluded.
+     *
+     * @see SIOSelector::m_servicesAreExcluded.
+     */
+    std::vector< std::string > m_selectedServices;
+
+    /// Map that specifies a configuration extension for a service
+    std::map< std::string, std::string > m_serviceToConfig;
+
+    std::string m_inject;
+
+    SPTR(JobCreatedSignalType) m_sigJobCreated;
+    SPTR(ForwardJobSlotType) m_slotForwardJob;
+
+};
+
+} // namespace editor
+
+} // namespace uiIO
+
+#endif // __UIIO_EDITOR_SIOSELECTOR_HPP__
+
diff --git a/Bundles/LeafUI/uiIO/rc/plugin.xml b/Bundles/LeafUI/uiIO/rc/plugin.xml
index b6f3a93..974d2fd 100644
--- a/Bundles/LeafUI/uiIO/rc/plugin.xml
+++ b/Bundles/LeafUI/uiIO/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiIO" class="::uiIO::Plugin" >
+<plugin id="uiIO" class="::uiIO::Plugin"  version="@DASH_VERSION@" >
 
     <library name="uiIO" />
 
@@ -8,18 +8,22 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::gui::editor::IDialogEditor</type>
-        <service>::uiIO::editor::IOSelectorService</service>
+        <service>::uiIO::editor::SIOSelector</service>
         <object>::fwData::Object</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
         <service>::uiIO::action::SSeriesDBMerger</service>
         <object>::fwMedData::SeriesDB</object>
         <desc>Merge SeriesDB</desc>
     </extension>
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwGui::IActionSrv</type>
+        <service>::uiIO::action::SExportWithSeriesDB</service>
+        <object>::fwData::Object</object>
+        <desc>Export the series using a SeriesDB</desc>
+    </extension>
 
 </plugin>
-
-
-
diff --git a/Bundles/LeafUI/uiIO/src/uiIO/Plugin.cpp b/Bundles/LeafUI/uiIO/src/uiIO/Plugin.cpp
index b7ddc45..90a3a69 100644
--- a/Bundles/LeafUI/uiIO/src/uiIO/Plugin.cpp
+++ b/Bundles/LeafUI/uiIO/src/uiIO/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,17 +18,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafUI/uiIO/src/uiIO/action/SExportWithSeriesDB.cpp b/Bundles/LeafUI/uiIO/src/uiIO/action/SExportWithSeriesDB.cpp
new file mode 100644
index 0000000..dd906f0
--- /dev/null
+++ b/Bundles/LeafUI/uiIO/src/uiIO/action/SExportWithSeriesDB.cpp
@@ -0,0 +1,140 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "uiIO/action/SExportWithSeriesDB.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwGui/Cursor.hpp>
+
+#include <fwJobs/IJob.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+namespace uiIO
+{
+namespace action
+{
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiIO::action::SExportWithSeriesDB, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+static const ::fwCom::Slots::SlotKeyType FORWARD_JOB_SLOT       = "forwardJob";
+
+//------------------------------------------------------------------------------
+
+SExportWithSeriesDB::SExportWithSeriesDB( ) throw() :
+    m_ioSelectorSrvConfig ("IOSelectorServiceConfigVRRenderReader")
+{
+    m_sigJobCreated  = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+    m_slotForwardJob = newSlot( FORWARD_JOB_SLOT, &SExportWithSeriesDB::forwardJob, this );
+}
+
+//------------------------------------------------------------------------------
+
+SExportWithSeriesDB::~SExportWithSeriesDB() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SExportWithSeriesDB::info(std::ostream &_sstream )
+{
+    _sstream << "Action for add SeriesDB" << std::endl;
+}
+
+//------------------------------------------------------------------------------
+
+void SExportWithSeriesDB::configuring() throw( ::fwTools::Failed )
+{
+    this->::fwGui::IActionSrv::initialize();
+    std::vector < ConfigurationType > vectConfig = m_configuration->find("IOSelectorSrvConfig");
+    if(!vectConfig.empty())
+    {
+        ConfigurationType selectorConfig = vectConfig.at(0);
+        SLM_ASSERT("Missing 'name' attribute", selectorConfig->hasAttribute("name"));
+        m_ioSelectorSrvConfig = selectorConfig->getAttributeValue("name");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SExportWithSeriesDB::updating( ) throw(::fwTools::Failed)
+{
+    ::fwGui::LockAction lock(this->getSptr());
+    ::fwMedData::Series::sptr series = this->getObject< ::fwMedData::Series >();
+    // Create a new SeriesDB
+    ::fwMedData::SeriesDB::sptr localSeriesDB = ::fwMedData::SeriesDB::New();
+    localSeriesDB->getContainer().push_back(series);
+
+    /// Create IOSelectorService on the new SeriesDB and execute it.
+
+    // Get the config
+    ::fwRuntime::ConfigurationElement::csptr ioCfg;
+    ioCfg = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(m_ioSelectorSrvConfig,
+                                                                                  "::uiIO::editor::SIOSelector");
+    SLM_ASSERT("There is no service configuration "
+               << m_ioSelectorSrvConfig
+               << " for ::uiIO::editor::SIOSelector", ioCfg);
+
+    // Init and execute the service
+    ::fwServices::IService::sptr ioSelectorSrv;
+    ioSelectorSrv = ::fwServices::add(localSeriesDB,
+                                      "::gui::editor::IDialogEditor",
+                                      "::uiIO::editor::SIOSelector");
+
+    ioSelectorSrv->setWorker(m_associatedWorker);
+
+    auto jobCreatedSignal = ioSelectorSrv->signal("jobCreated");
+    if(jobCreatedSignal)
+    {
+        jobCreatedSignal->connect(m_slotForwardJob);
+    }
+
+    ioSelectorSrv->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(ioCfg) );
+    ioSelectorSrv->configure();
+    ioSelectorSrv->start();
+    ioSelectorSrv->update();
+    ioSelectorSrv->stop();
+    ::fwServices::OSR::unregisterService( ioSelectorSrv );
+}
+
+//------------------------------------------------------------------------------
+
+void SExportWithSeriesDB::starting() throw (::fwTools::Failed)
+{
+    this->::fwGui::IActionSrv::actionServiceStarting();
+
+    SLM_FATAL_IF(
+        "The associated object must be a ::fwMedData::Series (Here: " + this->getObject()->getClassname() + ").",
+        !this->getObject< ::fwMedData::Series >());
+}
+
+//------------------------------------------------------------------------------
+
+void SExportWithSeriesDB::stopping() throw (::fwTools::Failed)
+{
+    this->::fwGui::IActionSrv::actionServiceStopping();
+}
+
+//------------------------------------------------------------------------------
+
+void SExportWithSeriesDB::forwardJob(::fwJobs::IJob::sptr iJob)
+{
+    m_sigJobCreated->emit(iJob);
+}
+
+//------------------------------------------------------------------------------
+//
+} // namespace action
+} // namespace uiIO
diff --git a/Bundles/LeafUI/uiIO/src/uiIO/action/SSeriesDBMerger.cpp b/Bundles/LeafUI/uiIO/src/uiIO/action/SSeriesDBMerger.cpp
index 4ef0e2b..4193b8f 100644
--- a/Bundles/LeafUI/uiIO/src/uiIO/action/SSeriesDBMerger.cpp
+++ b/Bundles/LeafUI/uiIO/src/uiIO/action/SSeriesDBMerger.cpp
@@ -1,44 +1,55 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwMedData/Series.hpp>
+#include "uiIO/action/SSeriesDBMerger.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/registry/ServiceConfig.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwGui/Cursor.hpp>
 
-#include <fwComEd/helper/SeriesDB.hpp>
+#include <fwJobs/IJob.hpp>
 
-#include "uiIO/action/SSeriesDBMerger.hpp"
+#include <fwMedData/Series.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
 
 namespace uiIO
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiIO::action::SSeriesDBMerger , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiIO::action::SSeriesDBMerger, ::fwMedData::SeriesDB );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+static const ::fwCom::Slots::SlotKeyType FORWARD_JOB_SLOT       = "forwardJob";
 
 //------------------------------------------------------------------------------
 
-SSeriesDBMerger::SSeriesDBMerger( ) throw() : m_ioSelectorSrvConfig ("IOSelectorServiceConfigVRRenderReader")
-{}
+SSeriesDBMerger::SSeriesDBMerger( ) throw() :
+    m_ioSelectorSrvConfig ("IOSelectorServiceConfigVRRenderReader")
+{
+    m_sigJobCreated  = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+    m_slotForwardJob = newSlot( FORWARD_JOB_SLOT, &SSeriesDBMerger::forwardJob, this );
+}
 
 //------------------------------------------------------------------------------
 
 SSeriesDBMerger::~SSeriesDBMerger() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void SSeriesDBMerger::info(std::ostream &_sstream )
+void SSeriesDBMerger::info(std::ostream& _sstream )
 {
     _sstream << "Action for add SeriesDB" << std::endl;
 }
@@ -54,8 +65,8 @@ void SSeriesDBMerger::configuring() throw( ::fwTools::Failed )
     if(!vectConfig.empty())
     {
         ConfigurationType selectorConfig = vectConfig.at(0);
-        SLM_ASSERT("Missing 'name' attribute", selectorConfig->hasAttribute("name")) ;
-        m_ioSelectorSrvConfig = selectorConfig->getAttributeValue("name") ;
+        SLM_ASSERT("Missing 'name' attribute", selectorConfig->hasAttribute("name"));
+        m_ioSelectorSrvConfig = selectorConfig->getAttributeValue("name");
     }
 }
 
@@ -75,27 +86,36 @@ void SSeriesDBMerger::updating( ) throw(::fwTools::Failed)
 
     // Get the config
     ::fwRuntime::ConfigurationElement::csptr ioCfg;
-    ioCfg = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(m_ioSelectorSrvConfig ,
-                                                                                  "::uiIO::editor::IOSelectorService");
-    SLM_ASSERT("Sorry, there is not service configuration "
+    ioCfg = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(m_ioSelectorSrvConfig,
+                                                                                  "::uiIO::editor::SIOSelector");
+    SLM_ASSERT("There is no service configuration "
                << m_ioSelectorSrvConfig
-               << " for ::uiIO::editor::IOSelectorService", ioCfg) ;
+               << " for ::uiIO::editor::SIOSelector", ioCfg);
 
     // Init and execute the service
     ::fwServices::IService::sptr ioSelectorSrv;
     ioSelectorSrv = ::fwServices::add(localSeriesDB,
                                       "::gui::editor::IDialogEditor",
-                                      "::uiIO::editor::IOSelectorService");
-    ioSelectorSrv->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(ioCfg) ) ;
-    ioSelectorSrv->configure() ;
+                                      "::uiIO::editor::SIOSelector");
+
+    ioSelectorSrv->setWorker(m_associatedWorker);
+
+    auto jobCreatedSignal = ioSelectorSrv->signal("jobCreated");
+    if(jobCreatedSignal)
+    {
+        jobCreatedSignal->connect(m_slotForwardJob);
+    }
+
+    ioSelectorSrv->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(ioCfg) );
+    ioSelectorSrv->configure();
     ioSelectorSrv->start();
     ioSelectorSrv->update();
     ioSelectorSrv->stop();
     ::fwServices::OSR::unregisterService( ioSelectorSrv );
 
-    ::fwComEd::helper::SeriesDB sDBhelper(seriesDB);
+    ::fwMedDataTools::helper::SeriesDB sDBhelper(seriesDB);
     sDBhelper.merge(localSeriesDB);
-    sDBhelper.notify(this->getSptr());
+    sDBhelper.notify();
 }
 
 //------------------------------------------------------------------------------
@@ -107,11 +127,6 @@ void SSeriesDBMerger::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SSeriesDBMerger::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void SSeriesDBMerger::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
@@ -119,5 +134,12 @@ void SSeriesDBMerger::stopping() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+void SSeriesDBMerger::forwardJob(::fwJobs::IJob::sptr iJob)
+{
+    m_sigJobCreated->emit(iJob);
+}
+
+//------------------------------------------------------------------------------
+//
 } // namespace action
 } // namespace uiIO
diff --git a/Bundles/LeafUI/uiIO/src/uiIO/editor/IOSelectorService.cpp b/Bundles/LeafUI/uiIO/src/uiIO/editor/IOSelectorService.cpp
deleted file mode 100644
index bc7cb11..0000000
--- a/Bundles/LeafUI/uiIO/src/uiIO/editor/IOSelectorService.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <string>
-#include <sstream>
-
-#include <boost/foreach.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/helper.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwData/Composite.hpp>
-#include <fwComEd/helper/Composite.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ServiceFactory.hpp>
-#include <fwServices/registry/ServiceConfig.hpp>
-#include <fwServices/macros.hpp>
-
-#include <fwGui/dialog/SelectorDialog.hpp>
-#include <fwGui/Cursor.hpp>
-#include <fwGui/dialog/MessageDialog.hpp>
-
-#include <io/IReader.hpp>
-#include <io/IWriter.hpp>
-
-#include "uiIO/editor/IOSelectorService.hpp"
-
-namespace uiIO
-{
-
-namespace editor
-{
-
-//------------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::gui::editor::IDialogEditor , ::uiIO::editor::IOSelectorService , ::fwData::Object );
-
-//------------------------------------------------------------------------------
-
-IOSelectorService::IOSelectorService() :
-    m_mode                  ( READER_MODE ),
-    m_servicesAreExcluded   ( true ),
-    m_selectedServices      ( std::vector< std::string >() )
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-IOSelectorService::~IOSelectorService()  throw()
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::configuring() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    bool vectorIsAlreadyCleared = false;
-
-    //  Config Elem
-    //  <selection mode="include" />
-    //  <addSelection service="::ioAtoms::SWriter" />
-
-    ::fwRuntime::ConfigurationElementContainer::Iterator iter = this->m_configuration->begin() ;
-    for( ; iter != this->m_configuration->end() ; ++iter )
-    {
-        OSLM_INFO( "IOSelectorService "  << (*iter)->getName());
-
-        if( (*iter)->getName() == "selection" )
-        {
-            SLM_ASSERT( "Sorry, xml elemenet <selection> must have attribute 'mode'.", (*iter)->hasAttribute("mode")) ;
-            std::string mode = (*iter)->getExistingAttributeValue("mode") ;
-            m_servicesAreExcluded = ( mode == "exclude" );
-            SLM_ASSERT( "Sorry, xml attribut <mode> must be 'exclude' or 'include'.", mode == "exclude" || mode == "include" );
-            OSLM_DEBUG( "mode => " << mode );
-        }
-
-        if( (*iter)->getName() == "addSelection" )
-        {
-            if( ! vectorIsAlreadyCleared )
-            {
-                vectorIsAlreadyCleared = true;
-                m_selectedServices.clear();
-            }
-            SLM_ASSERT( "Sorry, xml elemenet <addSelection> must have attribute 'service'.", (*iter)->hasAttribute("service")) ;
-            m_selectedServices.push_back( (*iter)->getExistingAttributeValue("service") ) ;
-            OSLM_DEBUG( "add selection => " << (*iter)->getExistingAttributeValue("service") );
-        }
-
-        if( (*iter)->getName() == "type" )
-        {
-            SLM_ASSERT( "Sorry, xml elemenet <type> must have attribute 'mode'.", (*iter)->hasAttribute("mode")) ;
-            std::string mode = (*iter)->getExistingAttributeValue("mode") ;
-            SLM_ASSERT( "Sorry, xml attribut <mode> must be 'writer' or 'reader'.",  mode == "writer" || mode == "reader" );
-            m_mode = ( mode == "writer" ) ? WRITER_MODE : READER_MODE;
-            OSLM_DEBUG( "mode => " << mode );
-        }
-
-        if( (*iter)->getName() == "config" )
-        {
-            SLM_ASSERT( "Sorry, xml elemenet <config> must have attribute 'id'.", (*iter)->hasAttribute("id")) ;
-            SLM_ASSERT( "Sorry, xml elemenet <config> must have attribute 'service'.", (*iter)->hasAttribute("service")) ;
-            std::string configId = (*iter)->getExistingAttributeValue("id") ;
-            std::string configSrv = (*iter)->getExistingAttributeValue("service") ;
-            m_serviceToConfig[ configSrv ] = configId;
-        }
-
-    }
-
-    typedef std::vector < SPTR(::fwRuntime::ConfigurationElement) >  ConfigurationElementContainer;
-    ConfigurationElementContainer inject = m_configuration->find("inject");
-
-    if(!inject.empty())
-    {
-        m_inject = inject.at(0)->getValue();
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::updating() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    // Retrieve implementation of type ::io::IReader for this object
-    std::vector< std::string > availableExtensionsId;
-    if ( m_mode == READER_MODE )
-    {
-        availableExtensionsId = ::fwServices::registry::ServiceFactory::getDefault()->getImplementationIdFromObjectAndType(this->getObject()->getClassname(),"::io::IReader") ;
-    }
-    else // m_mode == WRITER_MODE
-    {
-        availableExtensionsId = ::fwServices::registry::ServiceFactory::getDefault()->getImplementationIdFromObjectAndType(this->getObject()->getClassname(),"::io::IWriter") ;
-    }
-
-    // Filter available extensions and replace id by service description
-    std::vector< std::pair < std::string, std::string > > availableExtensionsMap;
-    std::vector< std::string > availableExtensionsSelector;
-
-    BOOST_FOREACH( const std::string &serviceId, availableExtensionsId )
-    {
-        bool serviceIsSelectedByUser = std::find( m_selectedServices.begin(), m_selectedServices.end(), serviceId ) != m_selectedServices.end();
-
-        // Test if the service is considered here as available by users, if yes push in availableExtensionsSelector
-        // excluded mode => add services that are not selected by users
-        // included mode => add services selected by users
-        if( (m_servicesAreExcluded && ! serviceIsSelectedByUser) ||
-            (! m_servicesAreExcluded && serviceIsSelectedByUser) )
-        {
-            // Add this service
-            std::string infoUser = ::fwServices::registry::ServiceFactory::getDefault()->getServiceDescription(serviceId);
-
-            std::map< std::string, std::string >::const_iterator iter = m_serviceToConfig.find( serviceId );
-            if ( iter != m_serviceToConfig.end() )
-            {
-                infoUser = ::fwServices::registry::ServiceConfig::getDefault()->getConfigDesc(iter->second);
-            }
-
-            if (infoUser != "")
-            {
-                availableExtensionsMap.push_back( std::pair < std::string, std::string > (serviceId, infoUser) );
-                availableExtensionsSelector.push_back( infoUser );
-            }
-            else
-            {
-                availableExtensionsMap.push_back( std::pair < std::string, std::string > (serviceId, serviceId) );
-                availableExtensionsSelector.push_back( serviceId );
-            }
-        }
-    }
-
-    // Sort available services (lexical string sort)
-    std::sort( availableExtensionsSelector.begin(), availableExtensionsSelector.end() );
-
-    // Test if we have an extension
-    if ( ! availableExtensionsMap.empty() )
-    {
-        std::string extensionId = availableExtensionsMap[0].first ;
-        bool extensionSelectionIsCanceled = false;
-
-        // Selection of extension when availableExtensions.size() > 1
-        if ( availableExtensionsSelector.size() > 1 )
-        {
-            ::fwGui::dialog::SelectorDialog::sptr selector = ::fwGui::dialog::SelectorDialog::New();
-
-            if ( m_mode != READER_MODE )
-            {
-                selector->setTitle("Writer to use");
-            }
-            else
-            {
-                selector->setTitle("Reader to use");
-            }
-            selector->setSelections(availableExtensionsSelector);
-            std::string selection = selector->show();
-            if( !selection.empty() )
-            {
-                bool extensionIdFound = false;
-
-                typedef std::pair < std::string, std::string > PairType;
-                BOOST_FOREACH(PairType pair, availableExtensionsMap)
-                {
-                    if (pair.second == selection )
-                    {
-                        extensionId = pair.first ;
-                        extensionIdFound = true;
-                    }
-                }
-                OSLM_ASSERT("Problem to find the selected string.", extensionIdFound );
-            }
-            else
-            {
-                extensionSelectionIsCanceled = true;
-            }
-        }
-
-        if ( ! extensionSelectionIsCanceled )
-        {
-
-            // Get Config
-            bool hasConfigForService = false;
-            ::fwRuntime::ConfigurationElement::csptr srvCfg;
-            if ( m_serviceToConfig.find( extensionId ) != m_serviceToConfig.end() )
-            {
-                hasConfigForService = true;
-                srvCfg = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(  m_serviceToConfig[extensionId] , extensionId ) ;
-                SLM_ASSERT("Sorry, there is not service configuration of type ::fwServices::registry::ServiceConfig found", srvCfg ) ;
-            }
-
-            // Configure and start service
-            if ( m_mode == READER_MODE )
-            {
-                ::fwData::Object::sptr object;
-                if(m_inject.empty() ||  this->getObject()->getClassname().compare("::fwData::Composite") )
-                {
-                    object = this->getObject< ::fwData::Object >();
-                }
-                else
-                {
-                    ::fwServices::registry::ServiceFactory::sptr services = ::fwServices::registry::ServiceFactory::getDefault();
-                    std::string objType = services->getObjectImplementation(extensionId);
-                    if(!objType.compare("::fwData::Object"))
-                    {
-                        object = this->getObject< ::fwData::Composite>();
-                    }
-                    else
-                    {
-                        object = ::fwData::factory::New(objType);
-                        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite>();
-                        ::fwComEd::helper::Composite helper(composite);
-                        helper.add(m_inject, object);
-
-                        helper.notify(this->getSptr());
-                    }
-                }
-
-                ::io::IReader::sptr reader = ::fwServices::add< ::io::IReader >( object , extensionId ) ;
-                if ( hasConfigForService )
-                {
-                    reader->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(srvCfg) );
-                    reader->configure();
-                }
-                reader->start();
-                reader->configureWithIHM();
-
-                ::fwGui::Cursor cursor;
-                cursor.setCursor(::fwGui::ICursor::BUSY);
-                reader->update();
-                cursor.setDefaultCursor();
-
-                reader->stop();
-                ::fwServices::OSR::unregisterService(reader);
-            }
-            else
-            {
-                ::io::IWriter::sptr writer = ::fwServices::add< ::io::IWriter >( this->getObject() , extensionId ) ;
-                if ( hasConfigForService )
-                {
-                    writer->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(srvCfg) );
-                    writer->configure();
-                }
-                writer->start();
-                writer->configureWithIHM();
-
-                ::fwGui::Cursor cursor;
-                cursor.setCursor(::fwGui::ICursor::BUSY);
-                writer->update();
-                cursor.setDefaultCursor();
-
-                writer->stop();
-                ::fwServices::OSR::unregisterService(writer);
-            }
-        }
-    }
-    else
-    {
-        SLM_WARN("IOSelectorService::load : availableExtensions is empty.");
-        if ( m_mode == READER_MODE )
-        {
-            ::fwGui::dialog::MessageDialog messageBox;
-            messageBox.setTitle("Reader not found");
-            messageBox.setMessage( "Sorry, there are not available readers for this data type." );
-            messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
-            messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
-            messageBox.show();
-        }
-        else // m_mode == WRITER_MODE
-        {
-            ::fwGui::dialog::MessageDialog messageBox;
-            messageBox.setTitle("Writer not found");
-            messageBox.setMessage( "Sorry, there are not available writers for this data type." );
-            messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
-            messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
-            messageBox.show();
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::receiving( ::fwServices::ObjectMsg::csptr ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::info( std::ostream &_sstream )
-{
-    // Update message
-    _sstream << "IOSelectorService";
-}
-
-//------------------------------------------------------------------------------
-
-void IOSelectorService::setIOMode( IOMode _mode )
-{
-    m_mode = _mode;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace editor
-
-} // namespace gui
diff --git a/Bundles/LeafUI/uiIO/src/uiIO/editor/SIOSelector.cpp b/Bundles/LeafUI/uiIO/src/uiIO/editor/SIOSelector.cpp
new file mode 100644
index 0000000..a19f0eb
--- /dev/null
+++ b/Bundles/LeafUI/uiIO/src/uiIO/editor/SIOSelector.cpp
@@ -0,0 +1,446 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "uiIO/editor/SIOSelector.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Composite.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwGui/Cursor.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+#include <fwServices/registry/ServiceFactory.hpp>
+
+#include <io/IReader.hpp>
+#include <io/IWriter.hpp>
+
+#include <sstream>
+#include <string>
+
+namespace uiIO
+{
+
+namespace editor
+{
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::gui::editor::IDialogEditor, ::uiIO::editor::SIOSelector, ::fwData::Object );
+
+static const ::fwCom::Signals::SignalKeyType JOB_CREATED_SIGNAL = "jobCreated";
+static const ::fwCom::Slots::SlotKeyType FORWARD_JOB_SLOT       = "forwardJob";
+
+//------------------------------------------------------------------------------
+
+SIOSelector::SIOSelector() :
+    m_mode                  ( READER_MODE ),
+    m_servicesAreExcluded   ( true )
+{
+    m_sigJobCreated  = newSignal< JobCreatedSignalType >( JOB_CREATED_SIGNAL );
+    m_slotForwardJob = newSlot( FORWARD_JOB_SLOT, &SIOSelector::forwardJob, this );
+}
+
+//------------------------------------------------------------------------------
+
+SIOSelector::~SIOSelector()  throw()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::configuring() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    bool vectorIsAlreadyCleared = false;
+
+    //  Config Elem
+    //  <selection mode="include" />
+    //  <addSelection service="::ioAtoms::SWriter" />
+
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter = this->m_configuration->begin();
+    for(; iter != this->m_configuration->end(); ++iter )
+    {
+        OSLM_INFO( "SIOSelector " << (*iter)->getName());
+
+        if( (*iter)->getName() == "selection" )
+        {
+            SLM_ASSERT( "The xml element <selection> must have the attribute 'mode'.", (*iter)->hasAttribute("mode"));
+            std::string mode = (*iter)->getExistingAttributeValue("mode");
+            m_servicesAreExcluded = ( mode == "exclude" );
+            SLM_ASSERT( "The xml attribute <mode> must be 'include' (to add the selection to selector list ) or "
+                        "'exclude' (to exclude the selection of the selector list).",
+                        mode == "exclude" || mode == "include" );
+            OSLM_DEBUG( "mode => " << mode );
+        }
+
+        if( (*iter)->getName() == "addSelection" )
+        {
+            if( !vectorIsAlreadyCleared )
+            {
+                vectorIsAlreadyCleared = true;
+                m_selectedServices.clear();
+            }
+            SLM_ASSERT( "The xml elemenet <addSelection> must have the attribute 'service'.",
+                        (*iter)->hasAttribute("service"));
+            m_selectedServices.push_back( (*iter)->getExistingAttributeValue("service") );
+            OSLM_DEBUG( "add selection => " << (*iter)->getExistingAttributeValue("service") );
+        }
+
+        if( (*iter)->getName() == "type" )
+        {
+            SLM_ASSERT( "The xml elemenet <type> must have the attribute 'mode'.", (*iter)->hasAttribute("mode"));
+            std::string mode = (*iter)->getExistingAttributeValue("mode");
+            SLM_ASSERT("The xml attribute <mode> must be 'reader' (to open file) or 'writer' (to write a new file).",
+                       mode == "writer" || mode == "reader" );
+            m_mode = ( mode == "writer" ) ? WRITER_MODE : READER_MODE;
+            OSLM_DEBUG( "mode => " << mode );
+        }
+
+        if( (*iter)->getName() == "config" )
+        {
+            SLM_ASSERT( "The xml element <config> must have the attribute 'id'.", (*iter)->hasAttribute("id"));
+            SLM_ASSERT( "The xml element <config> must have the attribute 'service'.",
+                        (*iter)->hasAttribute("service"));
+            std::string configId  = (*iter)->getExistingAttributeValue("id");
+            std::string configSrv = (*iter)->getExistingAttributeValue("service");
+            m_serviceToConfig[ configSrv ] = configId;
+        }
+
+    }
+
+    typedef std::vector < SPTR(::fwRuntime::ConfigurationElement) >  ConfigurationElementContainer;
+    ConfigurationElementContainer inject = m_configuration->find("inject");
+
+    if(!inject.empty())
+    {
+        m_inject = inject.at(0)->getValue();
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::updating() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    // Retrieve implementation of type ::io::IReader for this object
+    std::vector< std::string > availableExtensionsId;
+    if ( m_mode == READER_MODE )
+    {
+        availableExtensionsId =
+            ::fwServices::registry::ServiceFactory::getDefault()->getImplementationIdFromObjectAndType(
+                this->getObject()->getClassname(),"::io::IReader");
+    }
+    else // m_mode == WRITER_MODE
+    {
+        availableExtensionsId =
+            ::fwServices::registry::ServiceFactory::getDefault()->getImplementationIdFromObjectAndType(
+                this->getObject()->getClassname(),"::io::IWriter");
+    }
+
+    // Filter available extensions and replace id by service description
+    std::vector< std::pair < std::string, std::string > > availableExtensionsMap;
+    std::vector< std::string > availableExtensionsSelector;
+
+    for( const std::string& serviceId :  availableExtensionsId )
+    {
+        bool serviceIsSelectedByUser =
+            std::find( m_selectedServices.begin(), m_selectedServices.end(),
+                       serviceId ) != m_selectedServices.end();
+
+        // Test if the service is considered here as available by users, if yes push in availableExtensionsSelector
+        // excluded mode => add services that are not selected by users
+        // included mode => add services selected by users
+        if( (m_servicesAreExcluded && !serviceIsSelectedByUser) ||
+            (!m_servicesAreExcluded && serviceIsSelectedByUser) )
+        {
+            // Add this service
+            std::string infoUser =
+                ::fwServices::registry::ServiceFactory::getDefault()->getServiceDescription(serviceId);
+
+            std::map< std::string, std::string >::const_iterator iter = m_serviceToConfig.find( serviceId );
+            if ( iter != m_serviceToConfig.end() )
+            {
+                infoUser = ::fwServices::registry::ServiceConfig::getDefault()->getConfigDesc(iter->second);
+            }
+
+            if (infoUser != "")
+            {
+                availableExtensionsMap.push_back( std::pair < std::string, std::string > (serviceId, infoUser) );
+                availableExtensionsSelector.push_back( infoUser );
+            }
+            else
+            {
+                availableExtensionsMap.push_back( std::pair < std::string, std::string > (serviceId, serviceId) );
+                availableExtensionsSelector.push_back( serviceId );
+            }
+        }
+    }
+
+    // Sort available services (lexical string sort)
+    std::sort( availableExtensionsSelector.begin(), availableExtensionsSelector.end() );
+
+    // Test if we have an extension
+    if ( !availableExtensionsMap.empty() )
+    {
+        std::string extensionId           = availableExtensionsMap[0].first;
+        bool extensionSelectionIsCanceled = false;
+
+        // Selection of extension when availableExtensions.size() > 1
+        if ( availableExtensionsSelector.size() > 1 )
+        {
+            ::fwGui::dialog::SelectorDialog::sptr selector = ::fwGui::dialog::SelectorDialog::New();
+
+            if ( m_mode != READER_MODE )
+            {
+                selector->setTitle("Writer to use");
+            }
+            else
+            {
+                selector->setTitle("Reader to use");
+            }
+            selector->setSelections(availableExtensionsSelector);
+            std::string selection = selector->show();
+            if( !selection.empty() )
+            {
+                bool extensionIdFound = false;
+
+                typedef std::pair < std::string, std::string > PairType;
+                for(PairType pair :  availableExtensionsMap)
+                {
+                    if (pair.second == selection )
+                    {
+                        extensionId      = pair.first;
+                        extensionIdFound = true;
+                    }
+                }
+                OSLM_ASSERT("Problem to find the selected string.", extensionIdFound );
+            }
+            else
+            {
+                extensionSelectionIsCanceled = true;
+            }
+        }
+
+        if ( !extensionSelectionIsCanceled )
+        {
+
+            // Get Config
+            bool hasConfigForService = false;
+            ::fwRuntime::ConfigurationElement::csptr srvCfg;
+            if ( m_serviceToConfig.find( extensionId ) != m_serviceToConfig.end() )
+            {
+                hasConfigForService = true;
+                srvCfg              = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(
+                    m_serviceToConfig[extensionId], extensionId );
+                SLM_ASSERT(
+                    "No service configuration of type ::fwServices::registry::ServiceConfig was found",
+                    srvCfg );
+            }
+
+            // Configure and start service
+            if ( m_mode == READER_MODE )
+            {
+                ::fwData::Object::sptr object;
+                if(m_inject.empty() ||  this->getObject()->getClassname().compare("::fwData::Composite") )
+                {
+                    object = this->getObject< ::fwData::Object >();
+                }
+                else
+                {
+                    ::fwServices::registry::ServiceFactory::sptr services =
+                        ::fwServices::registry::ServiceFactory::getDefault();
+                    std::string objType = services->getObjectImplementation(extensionId);
+                    if(!objType.compare("::fwData::Object"))
+                    {
+                        object = this->getObject< ::fwData::Composite>();
+                    }
+                    else
+                    {
+                        object                              = ::fwData::factory::New(objType);
+                        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite>();
+                        ::fwDataTools::helper::Composite helper(composite);
+                        helper.add(m_inject, object);
+
+                        helper.notify();
+                    }
+                }
+
+                ::io::IReader::sptr reader;
+                if (this->isVersion2())
+                {
+                    auto factory = ::fwServices::registry::ServiceFactory::getDefault();
+                    reader = ::io::IReader::dynamicCast(factory->create( "::io::IReader", extensionId ));
+                    ::fwServices::OSR::registerService(object, ::io::s_DATA_KEY,
+                                                       ::fwServices::IService::AccessType::INOUT, reader);
+                }
+                else
+                {
+                    reader = ::fwServices::add< ::io::IReader >( object, extensionId );
+                }
+                reader->setWorker(m_associatedWorker);
+
+                if ( hasConfigForService )
+                {
+                    reader->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(srvCfg) );
+                    reader->configure();
+                }
+
+                auto jobCreatedSignal = reader->signal("jobCreated");
+                if(jobCreatedSignal)
+                {
+                    jobCreatedSignal->connect(m_slotForwardJob);
+                }
+
+                try
+                {
+                    reader->start();
+                    reader->configureWithIHM();
+
+                    ::fwGui::Cursor cursor;
+                    cursor.setCursor(::fwGui::ICursor::BUSY);
+                    reader->update();
+                    cursor.setDefaultCursor();
+
+                    reader->stop();
+                    ::fwServices::OSR::unregisterService(reader);
+                }
+                catch (std::exception& e)
+                {
+                    std::string msg = "Failed to read : \n" + std::string(e.what());
+                    ::fwGui::dialog::MessageDialog::showMessageDialog("Reader Error", msg);
+                }
+            }
+            else
+            {
+                ::io::IWriter::sptr writer;
+                if (this->isVersion2())
+                {
+                    auto factory = ::fwServices::registry::ServiceFactory::getDefault();
+                    writer = ::io::IWriter::dynamicCast(factory->create( "::io::IWriter", extensionId ));
+                    ::fwServices::OSR::registerService(this->getObject(), ::io::s_DATA_KEY,
+                                                       ::fwServices::IService::AccessType::INPUT, writer);
+                }
+                else
+                {
+                    writer = ::fwServices::add< ::io::IWriter >( this->getObject(), extensionId );
+                }
+                writer->setWorker(m_associatedWorker);
+
+                if ( hasConfigForService )
+                {
+                    writer->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(srvCfg) );
+                    writer->configure();
+                }
+
+                auto jobCreatedSignal = writer->signal("jobCreated");
+                if(jobCreatedSignal)
+                {
+                    jobCreatedSignal->connect(m_slotForwardJob);
+                }
+
+                try
+                {
+                    writer->start();
+                    writer->configureWithIHM();
+
+                    ::fwGui::Cursor cursor;
+                    cursor.setCursor(::fwGui::ICursor::BUSY);
+                    writer->update();
+                    cursor.setDefaultCursor();
+
+                    writer->stop();
+                    ::fwServices::OSR::unregisterService(writer);
+                }
+                catch (std::exception& e)
+                {
+                    std::string msg = "Failed to write : \n" +  std::string(e.what());
+                    ::fwGui::dialog::MessageDialog::showMessageDialog("Writer Error", msg);
+                }
+            }
+        }
+    }
+    else
+    {
+        SLM_WARN("SIOSelector::load : availableExtensions is empty.");
+        if ( m_mode == READER_MODE )
+        {
+            ::fwGui::dialog::MessageDialog messageBox;
+            messageBox.setTitle("Reader not found");
+            messageBox.setMessage( "There are no available readers for this data type." );
+            messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
+            messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+            messageBox.show();
+        }
+        else // m_mode == WRITER_MODE
+        {
+            ::fwGui::dialog::MessageDialog messageBox;
+            messageBox.setTitle("Writer not found");
+            messageBox.setMessage( "There are no available writers for this data type." );
+            messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
+            messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
+            messageBox.show();
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::info( std::ostream& _sstream )
+{
+    // Update message
+    _sstream << "SIOSelector";
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::setIOMode( IOMode _mode )
+{
+    m_mode = _mode;
+}
+
+//------------------------------------------------------------------------------
+
+void SIOSelector::forwardJob(::fwJobs::IJob::sptr iJob)
+{
+    m_sigJobCreated->emit(iJob);
+}
+
+//------------------------------------------------------------------------------
+} // namespace editor
+
+} // namespace gui
diff --git a/Bundles/LeafUI/uiImageQt/CMakeLists.txt b/Bundles/LeafUI/uiImageQt/CMakeLists.txt
index d8bc7c7..b41dadd 100644
--- a/Bundles/LeafUI/uiImageQt/CMakeLists.txt
+++ b/Bundles/LeafUI/uiImageQt/CMakeLists.txt
@@ -1,26 +1,18 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwData
-    fwGuiQt
-    fwRuntime
-    fwTools
-    gui
-)
-
-find_package(Boost COMPONENTS filesystem REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui QtHelp REQUIRED)
-include(${QT_USE_FILE})
 
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
 fwLink(
-    ${QT_LIBRARIES}
-    ${Boost_LIBRARIES}
-    )
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiImageQt/COPYING b/Bundles/LeafUI/uiImageQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiImageQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiImageQt/COPYING.LESSER b/Bundles/LeafUI/uiImageQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiImageQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiImageQt/Properties.cmake b/Bundles/LeafUI/uiImageQt/Properties.cmake
index 70abe6a..8ccfefe 100644
--- a/Bundles/LeafUI/uiImageQt/Properties.cmake
+++ b/Bundles/LeafUI/uiImageQt/Properties.cmake
@@ -2,6 +2,17 @@
 set( NAME uiImageQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGuiQt fwMath fwRuntime fwServices fwTools gui )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwGuiQt
+    fwMath
+    fwRuntime
+    fwServices
+    fwTools
+    gui
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiImageQt/bin/build.options b/Bundles/LeafUI/uiImageQt/bin/build.options
deleted file mode 100644
index 4f5d70d..0000000
--- a/Bundles/LeafUI/uiImageQt/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          'fwGuiQt_0-1',
-          ]
-USE     = ['qtCore','boost', 'boostFilesystem']
-BUNDLES = [
-    'gui_0-1',
-    ]
-
-
-
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageInfo.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageInfo.hpp
index 869695f..26ea9f8 100644
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageInfo.hpp
+++ b/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageInfo.hpp
@@ -1,45 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIMAGEQT_IMAGEINFO_HPP
-#define _UIIMAGEQT_IMAGEINFO_HPP
+#ifndef __UIIMAGEQT_IMAGEINFO_HPP__
+#define __UIIMAGEQT_IMAGEINFO_HPP__
 
+#include "uiImageQt/config.hpp"
 
-#include <QObject>
-#include <QLineEdit>
-#include <QPointer>
+#include <fwData/Point.hpp>
 
-#include <fwTools/Failed.hpp>
+#include <fwDataTools/PickingInfo.hpp>
 
-#include <fwData/Point.hpp>
+#include <fwTools/Failed.hpp>
 
 #include <gui/editor/IEditor.hpp>
 
-#include "uiImageQt/config.hpp"
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+
 
 namespace uiImage
 {
 
 /**
  * @brief   ImageInfo service allows to display image pixel information.
- * @class   ImageInfo
- * 
- * @date    2010.
  */
-class UIIMAGEQT_CLASS_API ImageInfo : public QObject, public ::gui::editor::IEditor
+class UIIMAGEQT_CLASS_API ImageInfo : public QObject,
+                                      public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageInfo)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageInfo)(::gui::editor::IEditor) );
 
-    UIIMAGEQT_API ImageInfo() throw() ;
+    UIIMAGEQT_API ImageInfo() throw();
 
-    UIIMAGEQT_API virtual ~ImageInfo() throw() ;
+    UIIMAGEQT_API virtual ~ImageInfo() throw();
 
 protected:
 
@@ -49,24 +49,24 @@ protected:
     /// Stops editor.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Receive InteractionMsg and updates text informations
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
     virtual void updating() throw(::fwTools::Failed);
 
     virtual void swapping() throw(::fwTools::Failed);
 
     virtual void configuring() throw( ::fwTools::Failed);
 
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream& _sstream );
 
 
 private:
 
+    /// Slot: get the picking information
+    void getInteraction(::fwDataTools::PickingInfo info);
+
     QPointer< QLineEdit >   m_valueText;
 
 };
 
 } // uiImage
 
-#endif /*_UIIMAGEQT_IMAGEINFO_HPP*/
+#endif /*__UIIMAGEQT_IMAGEINFO_HPP__*/
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageTransparency.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageTransparency.hpp
index 99e2948..c4e8e0d 100644
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageTransparency.hpp
+++ b/Bundles/LeafUI/uiImageQt/include/uiImageQt/ImageTransparency.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIMAGEQT_IMAGETRANSPARENCY_HPP
-#define _UIIMAGEQT_IMAGETRANSPARENCY_HPP
+#ifndef __UIIMAGEQT_IMAGETRANSPARENCY_HPP__
+#define __UIIMAGEQT_IMAGETRANSPARENCY_HPP__
 
 
 #include <QObject>
@@ -28,20 +28,30 @@ namespace uiImage
 /**
  * @brief   ImageTransparency service allows to change image transparency.
  * @class   ImageTransparency
- * 
- * @date    2011.
  */
-class UIIMAGEQT_CLASS_API ImageTransparency : public QObject, public ::gui::editor::IEditor
+class UIIMAGEQT_CLASS_API ImageTransparency : public QObject,
+                                              public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageTransparency)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageTransparency)(::gui::editor::IEditor) );
 
-    UIIMAGEQT_API ImageTransparency() throw() ;
+    UIIMAGEQT_API ImageTransparency() throw();
 
-    UIIMAGEQT_API virtual ~ImageTransparency() throw() ;
+    UIIMAGEQT_API virtual ~ImageTransparency() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_VISIBILITY_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_TRANSPARENCY_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    UIIMAGEQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
     /// Starts editor.
@@ -50,16 +60,13 @@ protected:
     /// Stops editor.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Receive InteractionMsg and updates text informations
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
     virtual void updating() throw(::fwTools::Failed);
 
     virtual void swapping() throw(::fwTools::Failed);
 
     virtual void configuring() throw( ::fwTools::Failed);
 
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 protected Q_SLOTS:
 
@@ -92,4 +99,4 @@ private:
 
 } // uiImage
 
-#endif /*_UIIMAGEQT_IMAGETRANSPARENCY_HPP*/
+#endif /*__UIIMAGEQT_IMAGETRANSPARENCY_HPP__*/
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/Namespace.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/Namespace.hpp
index 63d430a..7563f4e 100644
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/Namespace.hpp
+++ b/Bundles/LeafUI/uiImageQt/include/uiImageQt/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIIMAGEQTNAMESPACE_HPP_
-#define UIIMAGEQTNAMESPACE_HPP_
+#ifndef __UIIMAGEQT_NAMESPACE_HPP__
+#define __UIIMAGEQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiImage contains several editors on image written with Qt. This namespace is included in uiImageQt bundle.
  * @namespace   uiImage
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace uiImage
 {
 
 }
-#endif /* UIIMAGEQTNAMESPACE_HPP_ */
+#endif /* __UIIMAGEQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/Plugin.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/Plugin.hpp
index 17ad940..ed9e890 100644
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/Plugin.hpp
+++ b/Bundles/LeafUI/uiImageQt/include/uiImageQt/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIMAGEQT_PLUGIN_HPP_
-#define _UIIMAGEQT_PLUGIN_HPP_
+#ifndef __UIIMAGEQT_PLUGIN_HPP__
+#define __UIIMAGEQT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -14,7 +14,7 @@ namespace uiImage
 /**
  * @namespace uiImage
  * @brief   Contains editors attached to image.
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -34,4 +34,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiImage
 
-#endif //_UIIMAGEQT_PLUGIN_HPP_
+#endif //__UIIMAGEQT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/ShowScanEditor.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/ShowScanEditor.hpp
deleted file mode 100644
index 93dd7fb..0000000
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/ShowScanEditor.hpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIIMAGEQT_SHOW_SCAN_EDITOR_HPP_
-#define _UIIMAGEQT_SHOW_SCAN_EDITOR_HPP_
-
-#include <QObject>
-#include <QPointer>
-#include <QIcon>
-
-#include <fwTools/Failed.hpp>
-#include <gui/editor/IEditor.hpp>
-
-#include "uiImageQt/config.hpp"
-
-class QPushButton;
-
-namespace uiImage
-{
-
-/**
- * @brief   This editor service represent a button to show/hide scan in a generic scene.
- * @class   ShowScanEditor
- * 
- * @date    2010.
- */
-class UIIMAGEQT_CLASS_API ShowScanEditor : public QObject, public ::gui::editor::IEditor
-{
-
-    Q_OBJECT
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ShowScanEditor)(::gui::editor::IEditor) ) ;
-
-    /// Constructor. Do nothing.
-    UIIMAGEQT_API ShowScanEditor() throw() ;
-
-    /// Destructor. Do nothing.
-    UIIMAGEQT_API virtual ~ShowScanEditor() throw() ;
-
-protected:
-
-    typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
-
-    /**
-     * @brief Install the layout.
-     */
-    virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief Destroy the layout.
-     */
-    virtual void stopping() throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void updating() throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void swapping() throw(::fwTools::Failed);
-
-    /**
-     * @brief Configure the editor.
-     *
-     * Example of configuration
-     * @verbatim
-     <service uid="showScanNegato3DEditor" type="::gui::editor::IEditor" impl="::uiImage::ShowScanEditor" autoConnect="no">
-         <negatoAdaptor uid="myNegatoMPR" />
-     </service>
-       @endverbatim
-       \b myNegatoMPR is the uid of the ::visuVTKAdaptor::NegatoMPR service where the scan will be show/hide.
-     */
-    virtual void configuring() throw(fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-
-protected Q_SLOTS:
-    /**
-     * @brief This method is called when the scan button is clicked.
-     *
-     * This service notifies the modification.
-     */
-    void onChangeScanMode();
-
-private:
-
-    std::string m_adaptorUID;
-
-    QIcon m_imageShowScan;
-    QIcon m_imageHideScan;
-    bool m_scanAreShown;
-    QPointer< QPushButton > m_showScanButton;
-
-};
-
-} // uiImage
-
-#endif /*_UIIMAGEQT_SHOW_SCAN_EDITOR_HPP_*/
-
-
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceIndexPositionEditor.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceIndexPositionEditor.hpp
index b30ee6a..3d70afc 100644
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceIndexPositionEditor.hpp
+++ b/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceIndexPositionEditor.hpp
@@ -1,51 +1,76 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIMAGEQT_SLICEINDEXPOSITIONEDITOR_HPP_
-#define _UIIMAGEQT_SLICEINDEXPOSITIONEDITOR_HPP_
+#ifndef __UIIMAGEQT_SLICEINDEXPOSITIONEDITOR_HPP__
+#define __UIIMAGEQT_SLICEINDEXPOSITIONEDITOR_HPP__
 
-#include <fwTools/Failed.hpp>
-#include <gui/editor/IEditor.hpp>
+#include "uiImageQt/config.hpp"
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 #include <fwGuiQt/SliceSelector.hpp>
 
-#include "uiImageQt/config.hpp"
+#include <fwTools/Failed.hpp>
+
+#include <gui/editor/IEditor.hpp>
 
 namespace uiImage
 {
 
 /**
  * @brief   SliceIndexPositionEditor service allows to change the slice index of an image.
- * @class   SliceIndexPositionEditor
- * 
- * @date    2010.
  *
  * This is represented by
  *  - a slider to select the slice index
  *  - a choice list to select the slice orientation (axial, frontal, sagittal)
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <service uid="..." type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+      <inout key="image" uid="..."/>
+      <sliceIndex>${orientationValue}</sliceIndex>
+   </service>
+   @endcode
+ * @subsection In-Out In-Out
+ * - \b image [::fwData::Image]: image on which the slice index will be changed
+ *
+ * @subsection Configuration Configuration
+ * - \b sliceIndex : Axis on which the index will be changed, must be "axial", "frontal" or "sagittal".
  */
-class UIIMAGEQT_CLASS_API SliceIndexPositionEditor : public ::gui::editor::IEditor, public ::fwComEd::helper::MedicalImageAdaptor
+class UIIMAGEQT_CLASS_API SliceIndexPositionEditor : public ::gui::editor::IEditor,
+                                                     public ::fwDataTools::helper::MedicalImageAdaptor
 {
 
-public :
+public:
 
 
-    fwCoreServiceClassDefinitionsMacro ( (SliceIndexPositionEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SliceIndexPositionEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIIMAGEQT_API SliceIndexPositionEditor() throw() ;
+    UIIMAGEQT_API SliceIndexPositionEditor() throw();
 
     /// Destructor. Do nothing.
-    UIIMAGEQT_API virtual ~SliceIndexPositionEditor() throw() ;
+    UIIMAGEQT_API virtual ~SliceIndexPositionEditor() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_BUFFER_SLOT
+     */
+    UIIMAGEQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
     /// @brief The slice type: axial, frontal, sagittal.
-    using ::fwComEd::helper::MedicalImageAdaptor::Orientation ;
+    using ::fwDataTools::helper::MedicalImageAdaptor::Orientation;
 
     /**
      * @brief Install the layout.
@@ -57,9 +82,6 @@ protected:
      */
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Management of observations : update editor according to the received message
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
     /// Update editor information from the image
     virtual void updating() throw(::fwTools::Failed);
 
@@ -70,23 +92,23 @@ protected:
      * @brief Configure the editor.
      *
      * Example of configuration
-     * @verbatim
-     <service uid="slider_negato1" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
+     * @code{.xml}
+       <service uid="slider_negato1" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
         <sliceIndex>axial</sliceIndex>
-     </service>
-       @endverbatim
+       </service>
+       @endcode
        \b sliceIndex must be "axial", "frontal" or "sagittal".
      */
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    UIIMAGEQT_API virtual void info( std::ostream &_sstream ) ;
+    UIIMAGEQT_API virtual void info( std::ostream& _sstream );
 
     /// Update the editor slider from the image slice index.
-    UIIMAGEQT_API void updateSliceIndex();
+    UIIMAGEQT_API void updateSliceIndexFromImg();
 
     /// Update the editor slice type choice from the image slice type.
-    UIIMAGEQT_API void updateSliceType(Orientation type );
+    UIIMAGEQT_API void updateSliceTypeFromImg(Orientation type );
 
     /// This method is called when the slider is move. Notify the slice index is modified.
     UIIMAGEQT_API void sliceIndexNotification(unsigned int index);
@@ -96,6 +118,22 @@ protected:
 
 private:
 
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+
+    /// Slot: update image buffer
+    void updateBuffer();
+    /**
+     * @}
+     */
+
     /// @brief The field IDs for the slice index.
     static const std::string* SLICE_INDEX_FIELDID[ 3 ];
 
@@ -105,6 +143,6 @@ private:
 
 } // uiImage
 
-#endif /*_UIIMAGEQT_SLICEINDEXPOSITIONEDITOR_HPP_*/
+#endif /*__UIIMAGEQT_SLICEINDEXPOSITIONEDITOR_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceListEditor.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceListEditor.hpp
deleted file mode 100644
index 30f45fb..0000000
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceListEditor.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIIMAGEQT_SLICE_LIST_EDITOR_HPP_
-#define _UIIMAGEQT_SLICE_LIST_EDITOR_HPP_
-
-#include <QObject>
-#include <QPointer>
-
-#include <fwTools/Failed.hpp>
-#include <gui/editor/IEditor.hpp>
-
-#include "uiImageQt/config.hpp"
-
-class QMenu;
-class QAction;
-class QPushButton;
-
-
-namespace uiImage
-{
-
-/**
- * @brief   SliceListEditor service allows to change the number of slice to show.
- * @class   SliceListEditor
- * 
- * @date    2010.
- */
-class UIIMAGEQT_CLASS_API SliceListEditor : public QObject, public ::gui::editor::IEditor
-{
-
-    Q_OBJECT
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (SliceListEditor)(::gui::editor::IEditor) ) ;
-
-    /// Constructor. Do nothing.
-    UIIMAGEQT_API SliceListEditor() throw() ;
-
-    /// Destructor. Do nothing.
-    UIIMAGEQT_API virtual ~SliceListEditor() throw() ;
-
-protected:
-
-    typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
-
-    /**
-     * @brief Install the layout.
-     */
-    virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief Destroy the layout.
-     */
-    virtual void stopping() throw(::fwTools::Failed);
-
-    /// Management of observations : update editor according to the received message
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void updating() throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void swapping() throw(::fwTools::Failed);
-
-    /**
-     * @brief Configure the editor.
-     *
-     * Example of configuration
-     * @verbatim
-     <service uid="sliceListNegato3DEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor" autoConnect="yes">
-         <negatoAdaptor uid="myNegatoMPR" slices="1"/>
-     </service>
-       @endverbatim
-        - \b uid is the uid of the ::visuVTKAdaptor::NegatoMPR service where the scan will be show/hide.
-        - \b slices is the number of slide to show
-     */
-    virtual void configuring() throw(fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-
-protected Q_SLOTS:
-    /// This method is called when the popup menu is clicked. Notify the slice mode changed.
-    void onChangeSliceMode(bool checked = false);
-
-private:
-
-    std::string m_adaptorUID;
-
-    QPointer < QMenu > m_pDropDownMenu;
-    QPointer < QPushButton > m_dropDownButton;
-    QPointer < QAction > m_oneSliceItem;
-    QPointer < QAction > m_threeSlicesItem;
-    QPointer < QAction > m_obliqueSliceItem;
-    int m_nbSlice;
-
-};
-
-} // uiImageQt
-
-#endif /*_UIIMAGEQT_SLICE_LIST_EDITOR_HPP_*/
-
-
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceListEditor2.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceListEditor2.hpp
deleted file mode 100644
index 540347d..0000000
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/SliceListEditor2.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIIMAGEQT_SLICELISTEDITOR2_HPP_
-#define _UIIMAGEQT_SLICELISTEDITOR2_HPP_
-
-#include <QObject>
-#include <QPointer>
-
-#include <fwTools/Failed.hpp>
-#include <gui/editor/IEditor.hpp>
-
-#include "uiImageQt/config.hpp"
-
-class QMenu;
-class QAction;
-class QPushButton;
-
-
-namespace uiImage
-{
-
-/**
- * @brief   SliceListEditor2 service allows to change the number of slice to show.
- * @class   SliceListEditor2
- * 
- * @date    2010.
- */
-class UIIMAGEQT_CLASS_API SliceListEditor2 : public QObject, public ::gui::editor::IEditor
-{
-
-    Q_OBJECT
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (SliceListEditor2)(::gui::editor::IEditor) ) ;
-
-    /// Constructor. Do nothing.
-    UIIMAGEQT_API SliceListEditor2() throw() ;
-
-    /// Destructor. Do nothing.
-    UIIMAGEQT_API virtual ~SliceListEditor2() throw() ;
-
-protected:
-
-    typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
-
-    /**
-     * @brief Install the layout.
-     */
-    virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief Destroy the layout.
-     */
-    virtual void stopping() throw(::fwTools::Failed);
-
-    /// Management of observations : update editor according to the received message
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void updating() throw(::fwTools::Failed);
-
-    /// Do nothing
-    virtual void swapping() throw(::fwTools::Failed);
-
-    /**
-     * @brief Configure the editor.
-     *
-     * Example of configuration
-     * @verbatim
-     <service uid="sliceListNegato3DEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceListEditor2" autoConnect="yes">
-         <negatoAdaptor uid="myNegatoMPR" slices="1"/>
-     </service>
-       @endverbatim
-        - \b uid is the uid of the ::visuVTKAdaptor::NegatoMPR service where the scan will be show/hide.
-        - \b slices is the number of slide to show
-     */
-    virtual void configuring() throw(fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-
-protected Q_SLOTS:
-    /// This method is called when the popup menu is clicked. Notify the slice mode changed.
-    void onChangeSliceMode(bool checked = false);
-
-private:
-
-    std::string m_adaptorUID;
-
-    QPointer < QMenu > m_pDropDownMenu;
-    QPointer < QPushButton > m_dropDownButton;
-    QPointer < QAction > m_noSliceItem;
-    QPointer < QAction > m_oneSliceItem;
-    QPointer < QAction > m_threeSlicesItem;
-    QPointer < QAction > m_obliqueSliceItem;
-    int m_nbSlice;
-
-};
-
-} // uiImageQt
-
-#endif /*_UIIMAGEQT_SLICELISTEDITOR2_HPP_*/
-
-
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/WindowLevel.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/WindowLevel.hpp
index 0ca1706..04d9cd1 100644
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/WindowLevel.hpp
+++ b/Bundles/LeafUI/uiImageQt/include/uiImageQt/WindowLevel.hpp
@@ -1,22 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIIMAGEQT_WINDOWLEVEL_HPP_
-#define _UIIMAGEQT_WINDOWLEVEL_HPP_
+#ifndef __UIIMAGEQT_WINDOWLEVEL_HPP__
+#define __UIIMAGEQT_WINDOWLEVEL_HPP__
 
-#include <QObject>
-#include <QPointer>
+#include "uiImageQt/config.hpp"
 
-#include <fwTools/Failed.hpp>
 #include <fwData/Integer.hpp>
-#include <gui/editor/IEditor.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include "uiImageQt/config.hpp"
+#include <fwTools/Failed.hpp>
+
+#include <gui/editor/IEditor.hpp>
+
+#include <QObject>
+#include <QPointer>
 
 class QAction;
 class QComboBox;
@@ -28,35 +30,75 @@ class QToolButton;
 class QSignalMapper;
 
 fwCorePredeclare( (fwGuiQt)(widget)(QRangeSlider) );
+namespace fwGuiQt
+{
+namespace widget
+{
+class QRangeSlider;
+}
+}
 
 namespace uiImage
 {
 
 /**
  * @brief   WindowLevel service allows to change the min / max value of windowing.
- * @class   WindowLevel
- * 
- * @date    2010-2011.
  *
- * This is represented by
- *  - two sliders to modify the min, max value of windowing
+ * This is represented by two sliders to modify the min and max values of windowing
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+    <service uid="..." type="::uiImage::WindowLevel" autoConnect="yes">
+        <inout key="image" uid="..."/>
+        <config autoWindowing="yes" selectedTFKey="mySelectedTF" tfSelectionFwID="myTFSelection" useImageGreyLevelTF="yes" />
+    </service>
+   @endcode
+ *
+ * @subsection In-Out In-Out
+ * - \b image [::fwData::Image]: image on which the windowing will be changed
+ *
+ * @subsection Configuration Configuration
+ *  - \b autoWindowing : if 'yes', image windowing will be automatically compute from image pixel min/max
+ *  intensity when this service receive BUFFER event
+ *  - \b tfSelection : configure the identifier of the field containing the specific TF selection. By default, it use default selection field.
+ *  - \b useImageGreyLevelTF : if 'yes' and if tfSelection is configured, then we use the grey level tf of image
+ *
  */
-class UIIMAGEQT_CLASS_API WindowLevel : public QObject, public ::fwComEd::helper::MedicalImageAdaptor, public ::gui::editor::IEditor
+class UIIMAGEQT_CLASS_API WindowLevel : public QObject,
+                                        public ::fwDataTools::helper::MedicalImageAdaptor,
+                                        public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
 
-    fwCoreServiceClassDefinitionsMacro ( (WindowLevel)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (WindowLevel)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIIMAGEQT_API WindowLevel() throw() ;
+    UIIMAGEQT_API WindowLevel() throw();
 
     /// Destructor. Do nothing.
-    UIIMAGEQT_API virtual ~WindowLevel() throw() ;
+    UIIMAGEQT_API virtual ~WindowLevel() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    UIIMAGEQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
-    UIIMAGEQT_API void notifyWindowLevelCallback();
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    UIIMAGEQT_API virtual KeyConnectionsMap getAutoConnections() const;
 
 protected:
 
@@ -70,9 +112,6 @@ protected:
      */
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Management of observations : update editor according to the received message
-    virtual void receiving( ::boost::shared_ptr< const fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed);
-
     /// Update editor information from the image
     virtual void updating() throw(::fwTools::Failed);
 
@@ -83,11 +122,11 @@ protected:
      * @brief Configure the editor.
      *
      * Example of configuration
-     * @verbatim
+     * @code{.xml}
          <service uid="windowLevel" impl="::uiImage::WindowLevel" type="::gui::editor::IEditor" autoConnect="yes">
              <config autoWindowing="yes" selectedTFKey="mySelectedTF" tfSelectionFwID="myTFSelection" useImageGreyLevelTF="yes" />
          </service>
-       @endverbatim
+       @endcode
      * With :
      *  - \b autoWindowing : if 'yes', image windowing will be automatically compute from image pixel min/max
      *  intensity when this service receive BUFFER event
@@ -97,11 +136,18 @@ protected:
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    UIIMAGEQT_API virtual void info( std::ostream &_sstream ) ;
+    UIIMAGEQT_API virtual void info( std::ostream& _sstream );
 
     virtual void setEnabled(bool enable);
 
 
+    /// Called when transfer function points are modified.
+    UIIMAGEQT_API virtual void updatingTFPoints();
+
+    /// Called when transfer function windowing is modified.
+    UIIMAGEQT_API virtual void updatingTFWindowing(double window, double level);
+
+
 protected Q_SLOTS:
 
     void onTextEditingFinished();
@@ -109,7 +155,7 @@ protected Q_SLOTS:
     void onToggleAutoWL(bool autoWL);
 
     void onWindowLevelWidgetChanged(double _min, double _max);
-    void onDynamicRangeSelectionChanged(QAction *action);
+    void onDynamicRangeSelectionChanged(QAction* action);
 
 protected:
     typedef ::fwData::TransferFunction::TFValuePairType WindowLevelMinMaxType;
@@ -120,14 +166,13 @@ protected:
     WindowLevelMinMaxType getImageWindowMinMax();
 
     void onImageWindowLevelChanged(double _imageMin, double _imageMax);
-    void notifyWindowLevel(double _imageMin, double _imageMax);
 
     void updateWidgetMinMax(double _imageMin, double _imageMax);
     void updateImageWindowLevel(double _imageMin, double _imageMax);
     void updateTextWindowLevel(double _imageMin, double _imageMax);
 
     void setWidgetDynamicRange(double min, double max);
-    bool getWidgetDoubleValue(QLineEdit *widget, double &val);
+    bool getWidgetDoubleValue(QLineEdit* widget, double& val);
 
     /// Returns the current grey level tf of image
     ::fwData::TransferFunction::sptr getImageGreyLevelTF();
@@ -149,11 +194,8 @@ private:
 
     double m_widgetDynamicRangeMin;
     double m_widgetDynamicRangeWidth;
-    double m_imageMin;
-    double m_imageMax;
     double m_notifiedImageMin;
     double m_notifiedImageMax;
-    bool m_isNotifying;
     bool m_autoWindowing;
     bool m_useImageGreyLevelTF;
 
@@ -165,6 +207,4 @@ private:
 
 } // uiImage
 
-#endif /*_UIIMAGEQT_WINDOWLEVEL_HPP_*/
-
-
+#endif /*__UIIMAGEQT_WINDOWLEVEL_HPP__*/
diff --git a/Bundles/LeafUI/uiImageQt/include/uiImageQt/config.hpp b/Bundles/LeafUI/uiImageQt/include/uiImageQt/config.hpp
deleted file mode 100644
index 4c6febe..0000000
--- a/Bundles/LeafUI/uiImageQt/include/uiImageQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIIMAGEQT_CONFIG_HPP_
-#define _UIIMAGEQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIIMAGEQT_EXPORTS
-    #define UIIMAGEQT_API __declspec(dllexport)
-    #else
-    #define UIIMAGEQT_API __declspec(dllimport)
-    #endif
-
-    #define UIIMAGEQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIIMAGEQT_EXPORTS
-    #define UIIMAGEQT_API __attribute__ ((visibility("default")))
-    #define UIIMAGEQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIIMAGEQT_API __attribute__ ((visibility("hidden")))
-    #define UIIMAGEQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIIMAGEQT_API
-    #define UIIMAGEQT_CLASS_API
-
-#endif
-
-#endif //_UIIMAGEQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiImageQt/rc/plugin.xml b/Bundles/LeafUI/uiImageQt/rc/plugin.xml
index cbf4a62..a384da2 100644
--- a/Bundles/LeafUI/uiImageQt/rc/plugin.xml
+++ b/Bundles/LeafUI/uiImageQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiImageQt" class="::uiImage::Plugin">
+<plugin id="uiImageQt" class="::uiImage::Plugin" version="@DASH_VERSION@" >
     <library name="uiImageQt"/>
 
     <requirement id="dataReg"/>
@@ -13,25 +13,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::gui::editor::IEditor</type>
-        <service>::uiImage::SliceListEditor</service>
-        <object>::fwData::Image</object>
-    </extension>
-    
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::gui::editor::IEditor</type>
-        <service>::uiImage::SliceListEditor2</service>
-        <object>::fwData::Image</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::gui::editor::IEditor</type>
-        <service>::uiImage::ShowScanEditor</service>
-        <object>::fwData::Image</object>
-    </extension>
-
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::gui::editor::IEditor</type>
         <service>::uiImage::ImageInfo</service>
         <object>::fwData::Image</object>
     </extension>
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageInfo.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageInfo.cpp
index 40fa9f2..c094968 100644
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageInfo.cpp
+++ b/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageInfo.cpp
@@ -1,49 +1,51 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "uiImageQt/ImageInfo.hpp"
 
-#include <QHBoxLayout>
-#include <QWidget>
-#include <QLabel>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
 
 #include <fwData/Image.hpp>
 
-#include <fwMath/IntrasecTypes.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-
-#include <fwComEd/InteractionMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 
-#include "uiImageQt/ImageInfo.hpp"
+#include <fwMath/IntrasecTypes.hpp>
 
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
+
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QWidget>
 
 namespace uiImage
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::ImageInfo , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiImage::ImageInfo, ::fwData::Image );
 
+static const ::fwCom::Slots::SlotKeyType s_GET_INTERACTION_SLOT = "getInteraction";
 
 ImageInfo::ImageInfo() throw()
 {
-//    addNewHandledEvent(::fwComEd::InteractionMsg::MOUSE_MOVE);
+    newSlot(s_GET_INTERACTION_SLOT, &ImageInfo::getInteraction, this);
 }
 
 //------------------------------------------------------------------------------
 
 ImageInfo::~ImageInfo() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -53,7 +55,8 @@ void ImageInfo::starting() throw(::fwTools::Failed)
     this->::fwGui::IGuiContainerSrv::create();
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -90,48 +93,44 @@ void ImageInfo::configuring() throw(fwTools::Failed)
 //------------------------------------------------------------------------------
 
 void ImageInfo::updating() throw(::fwTools::Failed)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void ImageInfo::swapping() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
     m_valueText->setEnabled(imageIsValid);
 }
 
 //------------------------------------------------------------------------------
 
-void ImageInfo::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+void ImageInfo::getInteraction(::fwDataTools::PickingInfo info)
 {
     SLM_TRACE_FUNC();
-    ::fwComEd::InteractionMsg::csptr interactionMsg = ::fwComEd::InteractionMsg::dynamicConstCast(_msg);
 
-    if (interactionMsg && _msg->hasEvent(::fwComEd::InteractionMsg::MOUSE_MOVE))
+    if (info.m_eventId == ::fwDataTools::PickingInfo::Event::MOUSE_MOVE)
     {
         ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-        bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+        bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
         m_valueText->setEnabled(imageIsValid);
         if (imageIsValid)
         {
-            ::fwData::Point::csptr point = interactionMsg->getEventPoint();
-            SLM_ASSERT("Sorry, the object is null", point);
-            if(point)
-            {
-                fwVec3d  pointCoord = point->getCoord();
-                ::fwComEd::helper::Image imageHelper(image);
-
-                std::string intensity = imageHelper.getPixelAsString(pointCoord[0], pointCoord[1], pointCoord[2] );;
-                m_valueText->setText(QString::fromStdString(intensity));
-            }
+            double* point = info.m_worldPos;
+
+            ::fwDataTools::helper::Image imageHelper(image);
+
+            std::string intensity = imageHelper.getPixelAsString(point[0], point[1], point[2] );
+            m_valueText->setText(QString::fromStdString(intensity));
         }
     }
 }
 
 //------------------------------------------------------------------------------
 
-void ImageInfo::info( std::ostream &_sstream )
+void ImageInfo::info( std::ostream& _sstream )
 {
     _sstream << "Image Info Editor";
 }
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageTransparency.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageTransparency.cpp
index 93e6f62..0a42d23 100644
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageTransparency.cpp
+++ b/Bundles/LeafUI/uiImageQt/src/uiImageQt/ImageTransparency.cpp
@@ -1,51 +1,48 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "uiImageQt/ImageTransparency.hpp"
 
-#include <QHBoxLayout>
-#include <QLabel>
-#include <QWidget>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
 #include <fwCore/base.hpp>
 
-#include <fwData/Image.hpp>
 #include <fwData/Boolean.hpp>
+#include <fwData/Image.hpp>
 
-#include <fwMath/IntrasecTypes.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/IService.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwMath/IntrasecTypes.hpp>
 
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
 
-#include "uiImageQt/ImageTransparency.hpp"
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QWidget>
 
 namespace uiImage
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::ImageTransparency , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiImage::ImageTransparency, ::fwData::Image );
 
 
 ImageTransparency::ImageTransparency() throw()
 {
-//    addNewHandledEvent(::fwComEd::ImageMsg::TRANSPARENCY);
-//    addNewHandledEvent(::fwComEd::ImageMsg::VISIBILITY);
-//    addNewHandledEvent(::fwComEd::ImageMsg::BUFFER);
 }
 
 //------------------------------------------------------------------------------
 
 ImageTransparency::~ImageTransparency() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -55,7 +52,8 @@ void ImageTransparency::starting() throw(::fwTools::Failed)
     this->::fwGui::IGuiContainerSrv::create();
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -70,7 +68,7 @@ void ImageTransparency::starting() throw(::fwTools::Failed)
     m_valueSlider->setMinimumWidth(100);
 
     m_valueCheckBox = new QCheckBox( QObject::tr("visible"), container);
-    m_action = new QAction(container);
+    m_action        = new QAction(container);
     m_action->setCheckable(true);
     if (!m_shortcut.empty())
     {
@@ -124,7 +122,7 @@ void ImageTransparency::updating() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
 
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
     m_valueSlider->setEnabled(imageIsValid);
     m_valueCheckBox->setEnabled(imageIsValid);
     if (imageIsValid)
@@ -170,24 +168,7 @@ void ImageTransparency::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImageTransparency::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast(_msg);
-    if(imageMsg)
-    {
-        if ( imageMsg->hasEvent( ::fwComEd::ImageMsg::TRANSPARENCY ) ||
-             imageMsg->hasEvent( ::fwComEd::ImageMsg::VISIBILITY )   ||
-             imageMsg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) )
-        {
-            this->updating();
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ImageTransparency::info( std::ostream &_sstream )
+void ImageTransparency::info( std::ostream& _sstream )
 {
     _sstream << "Image Features Editor";
 }
@@ -199,9 +180,13 @@ void ImageTransparency::onModifyTransparency(int value)
     SLM_TRACE_FUNC();
     ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
     img->setField( "TRANSPARENCY",  ::fwData::Integer::New(value) );
-    ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-    imageMsg->addEvent( "TRANSPARENCY" );
-    ::fwServices::IEditionService::notify(this->getSptr(), img, imageMsg);
+
+    auto sig = img->signal< ::fwData::Image::TransparencyModifiedSignalType >(
+        ::fwData::Image::s_TRANSPARENCY_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -229,9 +214,26 @@ void ImageTransparency::notifyVisibility(bool isVisible)
 {
     ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
     img->setField( "VISIBILITY",  ::fwData::Boolean::New(isVisible) );
-    ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-    imageMsg->addEvent( "VISIBILITY" );
-    ::fwServices::IEditionService::notify(this->getSptr(), img, imageMsg);
+
+    auto sig = img->signal< ::fwData::Image::VisibilityModifiedSignalType >(::fwData::Image::s_VISIBILITY_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit(isVisible);
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageTransparency::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_VISIBILITY_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_TRANSPARENCY_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/Plugin.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/Plugin.cpp
index d8d0a2e..be1a02c 100644
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/Plugin.cpp
+++ b/Bundles/LeafUI/uiImageQt/src/uiImageQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,13 +15,15 @@ namespace uiImage
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiImage::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiImage
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/ShowScanEditor.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/ShowScanEditor.cpp
deleted file mode 100644
index 4735f51..0000000
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/ShowScanEditor.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <QString>
-#include <QVBoxLayout>
-#include <QPushButton>
-
-#include <fwCore/base.hpp>
-
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/convenience.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/Boolean.hpp>
-#include <fwData/String.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/operations.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/op/Get.hpp>
-
-#include <fwGuiQt/container/QtContainer.hpp>
-
-#include "uiImageQt/ShowScanEditor.hpp"
-
-namespace uiImage
-{
-
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::ShowScanEditor , ::fwData::Image ) ;
-
-
-ShowScanEditor::ShowScanEditor() throw(): m_scanAreShown(true)
-{
-    //handlingEventOff();
-}
-
-//------------------------------------------------------------------------------
-
-ShowScanEditor::~ShowScanEditor() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->create();
-
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-    QWidget* const container = qtContainer->getQtContainer();
-    SLM_ASSERT("container not instanced", container);
-
-    ::boost::filesystem::path pathImageScan (std::string(SHAREPATH) + "Bundles/uiImageQt_" + std::string(UIIMAGEQT_VER) + "/sliceShow.png");
-    OSLM_ASSERT("Image "<< pathImageScan << "is missing", ::boost::filesystem::exists(pathImageScan));
-    m_imageShowScan = QIcon(QString::fromStdString(pathImageScan.string()));
-
-    pathImageScan  = std::string(SHAREPATH) + "Bundles/uiImageQt_" + std::string(UIIMAGEQT_VER) + "/sliceHide.png";
-    OSLM_ASSERT("Image "<< pathImageScan << "is missing", ::boost::filesystem::exists(pathImageScan));
-    m_imageHideScan = QIcon(QString::fromStdString(pathImageScan.string()));
-
-
-    m_showScanButton = new QPushButton( m_imageShowScan, "", container) ;
-    m_showScanButton->setToolTip(QObject::tr("Show/Hide Scan"));
-    m_showScanButton->setIconSize( QSize( 40, 16 ) );
-
-    QVBoxLayout* layout = new QVBoxLayout( container );
-    layout->addWidget( m_showScanButton );
-    layout->setContentsMargins(0,0,0,0);
-
-    QObject::connect(m_showScanButton, SIGNAL(clicked()), this, SLOT(onChangeScanMode()));
-
-    container->setLayout( layout );
-}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    QObject::disconnect(m_showScanButton, SIGNAL(clicked()), this, SLOT(onChangeScanMode()));
-
-    this->getContainer()->clean();
-    this->destroy();
-}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->initialize();
-
-    std::vector < Configuration > placeInSceneConfig = m_configuration->find("negatoAdaptor");
-    SLM_ASSERT("Tag negatoAdaptor required!", !placeInSceneConfig.empty());
-    SLM_ASSERT("UID attribute is missing", placeInSceneConfig.at(0)->hasAttribute("uid"));
-    m_adaptorUID = placeInSceneConfig.at(0)->getAttributeValue("uid");
-}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::updating() throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::swapping() throw(::fwTools::Failed)
-{
-}
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::info( std::ostream &_sstream )
-{
-}
-
-//------------------------------------------------------------------------------
-
-void ShowScanEditor::onChangeScanMode()
-{
-    if(::fwTools::fwID::exist(m_adaptorUID))
-    {
-        m_scanAreShown = !m_scanAreShown;
-
-        if (!m_scanAreShown)
-        {
-            m_showScanButton->setIcon(m_imageHideScan);
-        }
-        else
-        {
-            m_showScanButton->setIcon(m_imageShowScan);
-        }
-
-        ::fwServices::IService::sptr service = ::fwServices::get(m_adaptorUID);
-        ::fwData::Image::sptr image = service->getObject< ::fwData::Image >();
-        SLM_ASSERT("ShowScanEditor adaptorUID " << m_adaptorUID <<" isn't an Adaptor on an Image?" , image);
-
-        ::fwData::Boolean::sptr dataInfo = ::fwData::Boolean::New();
-        dataInfo->value() = m_scanAreShown;
-
-        dataInfo->setField(::fwComEd::Dictionary::m_relatedServiceId ,  ::fwData::String::New( m_adaptorUID ) );
-        ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-        imageMsg->addEvent( "SCAN_SHOW", dataInfo );
-        ::fwServices::IEditionService::notify(this->getSptr(), image, imageMsg);
-    }
-    else
-    {
-        OSLM_TRACE("Service "<< m_adaptorUID << " is not yet present.");
-    }
-}
-
-}
-
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp
index 8e90bee..d8c79df 100644
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp
+++ b/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceIndexPositionEditor.cpp
@@ -1,65 +1,71 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QWidget>
-#include <QVBoxLayout>
+#include "uiImageQt/SliceIndexPositionEditor.hpp"
 
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/algorithm/string/trim.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
 
+#include <fwData/Composite.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Integer.hpp>
-#include <fwData/Composite.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwCore/base.hpp>
-
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
 
+#include <QVBoxLayout>
+#include <QWidget>
 
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/lexical_cast.hpp>
 
-#include "uiImageQt/SliceIndexPositionEditor.hpp"
+#include <functional>
 
 namespace uiImage
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::SliceIndexPositionEditor , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiImage::SliceIndexPositionEditor, ::fwData::Image );
 
 const std::string* SliceIndexPositionEditor::SLICE_INDEX_FIELDID[ 3 ] =
 {
-    &fwComEd::Dictionary::m_sagittalSliceIndexId,
-    &fwComEd::Dictionary::m_frontalSliceIndexId,
-    &fwComEd::Dictionary::m_axialSliceIndexId
+    &fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId,
+    &fwDataTools::fieldHelper::Image::m_frontalSliceIndexId,
+    &fwDataTools::fieldHelper::Image::m_axialSliceIndexId
 };
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
+
 //------------------------------------------------------------------------------
 
 SliceIndexPositionEditor::SliceIndexPositionEditor() throw()
 {
-//    addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-//    addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
-//    addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &SliceIndexPositionEditor::updateSliceIndex, this);
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &SliceIndexPositionEditor::updateSliceType, this);
 }
 
 //------------------------------------------------------------------------------
 
 SliceIndexPositionEditor::~SliceIndexPositionEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -67,8 +73,9 @@ void SliceIndexPositionEditor::starting() throw(::fwTools::Failed)
 {
     this->create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-    QWidget * const container = qtContainer->getQtContainer();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     QVBoxLayout* layout = new QVBoxLayout( container );
@@ -77,18 +84,20 @@ void SliceIndexPositionEditor::starting() throw(::fwTools::Failed)
     m_sliceSelectorPanel->setEnable(false);
 
     ::fwGuiQt::SliceSelector::ChangeIndexCallback changeIndexCallback;
-    changeIndexCallback = ::boost::bind( &::uiImage::SliceIndexPositionEditor::sliceIndexNotification, this, _1);
+    changeIndexCallback = std::bind( &::uiImage::SliceIndexPositionEditor::sliceIndexNotification, this,
+                                     std::placeholders::_1);
     m_sliceSelectorPanel->setChangeIndexCallback(changeIndexCallback);
 
     ::fwGuiQt::SliceSelector::ChangeIndexCallback changeTypeCallback;
-    changeTypeCallback = ::boost::bind( &::uiImage::SliceIndexPositionEditor::sliceTypeNotification, this, _1);
+    changeTypeCallback = std::bind( &::uiImage::SliceIndexPositionEditor::sliceTypeNotification, this,
+                                    std::placeholders::_1);
     m_sliceSelectorPanel->setChangeTypeCallback(changeTypeCallback);
     layout->addWidget( m_sliceSelectorPanel );
     layout->setContentsMargins(0,0,0,0);
 
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
-    this->updateSliceType(m_orientation);
+    this->updateSliceTypeFromImg(m_orientation);
 
     container->setLayout( layout );
 
@@ -117,10 +126,10 @@ void SliceIndexPositionEditor::configuring() throw(fwTools::Failed)
 
     if( this->m_configuration->size() > 0 )
     {
-        ::fwRuntime::ConfigurationElementContainer::Iterator iter = this->m_configuration->begin() ;
-        SLM_ASSERT("Sorry, only one xml element \"sliceIndex\" is accepted.", this->m_configuration->size() == 1 && (*iter)->getName() == "sliceIndex" );
-        SLM_ASSERT("Sorry, xml element \"sliceIndex\" is empty.", ! (*iter)->getValue().empty() );
-        std::string  orientation = (*iter)->getValue();
+        std::vector< ::fwRuntime::ConfigurationElement::sptr > slideIndexCfg = m_configuration->find("sliceIndex");
+        SLM_ASSERT("Only one xml element \"sliceIndex\" is accepted.", slideIndexCfg.size() == 1 );
+        SLM_ASSERT("The xml element \"sliceIndex\" is empty.", !(*slideIndexCfg.begin())->getValue().empty() );
+        std::string orientation = (*slideIndexCfg.begin())->getValue();
         ::boost::algorithm::trim(orientation);
         ::boost::algorithm::to_lower(orientation);
 
@@ -148,10 +157,10 @@ void SliceIndexPositionEditor::configuring() throw(fwTools::Failed)
 void SliceIndexPositionEditor::updating() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
     m_sliceSelectorPanel->setEnable(imageIsValid);
     this->updateImageInfos(image);
-    this->updateSliceIndex();
+    this->updateSliceIndexFromImg();
 }
 
 //------------------------------------------------------------------------------
@@ -160,61 +169,51 @@ void SliceIndexPositionEditor::swapping() throw(::fwTools::Failed)
 {
     this->updating();
 }
-//------------------------------------------------------------------------------
 
-void SliceIndexPositionEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+//-----------------------------------------------------------------------------
+
+void SliceIndexPositionEditor::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    ::fwComEd::ImageMsg::csptr imageMessage = fwComEd::ImageMsg::dynamicConstCast( _msg );
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
 
-    if ( imageMessage )
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+
+    image->setField( fwDataTools::fieldHelper::Image::m_axialSliceIndexId, m_axialIndex);
+    image->setField( fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, m_frontalIndex);
+    image->setField( fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, m_sagittalIndex);
+    this->updateSliceIndexFromImg();
+}
+
+//-----------------------------------------------------------------------------
+
+void SliceIndexPositionEditor::updateSliceType(int from, int to)
+{
+    if( to == static_cast< int > ( m_orientation ) )
     {
-        if ( imageMessage->hasEvent( fwComEd::ImageMsg::BUFFER ) )
-        {
-            this->updating();
-        }
-        if ( imageMessage->hasEvent( fwComEd::ImageMsg::SLICE_INDEX ) )
-        {
-            imageMessage->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
-            ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-            image->setField( fwComEd::Dictionary::m_axialSliceIndexId  , m_axialIndex);
-            image->setField( fwComEd::Dictionary::m_frontalSliceIndexId , m_frontalIndex);
-            image->setField( fwComEd::Dictionary::m_sagittalSliceIndexId, m_sagittalIndex);
-            this->updateSliceIndex();
-        }
-        if ( imageMessage->hasEvent( fwComEd::ImageMsg::CHANGE_SLICE_TYPE ) )
-        {
-            ::fwData::Object::csptr cObjInfo = imageMessage->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-            ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-            ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-            ::fwData::Integer::sptr fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] );
-            ::fwData::Integer::sptr toSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] );
-
-            if( toSliceType->value() == static_cast< int > ( m_orientation ) )
-            {
-                m_orientation = static_cast< Orientation > ( fromSliceType->value() );
-            }
-            else if(fromSliceType->value() == static_cast<int>(m_orientation))
-            {
-                m_orientation = static_cast< Orientation >( toSliceType->value() );
-            }
-            this->updateSliceType(m_orientation);
-        }
+        m_orientation = static_cast< Orientation > ( from );
+    }
+    else if(from == static_cast<int>(m_orientation))
+    {
+        m_orientation = static_cast< Orientation >( to );
     }
+    this->updateSliceTypeFromImg(m_orientation);
 }
 
 //------------------------------------------------------------------------------
 
-void SliceIndexPositionEditor::info( std::ostream &_sstream )
-{}
+void SliceIndexPositionEditor::info( std::ostream& _sstream )
+{
+}
 
 //------------------------------------------------------------------------------
 
-void SliceIndexPositionEditor::updateSliceIndex()
+void SliceIndexPositionEditor::updateSliceIndexFromImg()
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-    if (::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    if (::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
     {
         // Get Index
         std::string fieldID = *SLICE_INDEX_FIELDID[m_orientation];
@@ -234,29 +233,29 @@ void SliceIndexPositionEditor::updateSliceIndex()
 
 //------------------------------------------------------------------------------
 
-void SliceIndexPositionEditor::updateSliceType(Orientation type )
+void SliceIndexPositionEditor::updateSliceTypeFromImg(Orientation type )
 {
     // Update Type Choice
     m_sliceSelectorPanel->setTypeSelection( static_cast< int >( type ) );
 
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    this->updateSliceIndex();
+    this->updateSliceIndexFromImg();
 }
 
 //------------------------------------------------------------------------------
 
 void SliceIndexPositionEditor::sliceIndexNotification( unsigned int index)
 {
-    // Fire the message
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->setSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     std::string fieldID = *SLICE_INDEX_FIELDID[m_orientation];
     OSLM_ASSERT("Field "<<fieldID<<" is missing", image->getField( fieldID ));
     image->getField< ::fwData::Integer >( fieldID )->value() = index;
 
-    ::fwServices::IEditionService::notify(this->getSptr(),  image, msg);
+    auto sig = image->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+        ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+    ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_UPDATE_SLICE_INDEX_SLOT)));
+    sig->asyncEmit(m_axialIndex->value(), m_frontalIndex->value(), m_sagittalIndex->value());
 }
 
 //------------------------------------------------------------------------------
@@ -265,27 +264,38 @@ void SliceIndexPositionEditor::sliceTypeNotification( int _type )
 {
     Orientation type = static_cast< Orientation >( _type );
     OSLM_ASSERT("Bad slice type "<<type, type == X_AXIS ||
-            type == Y_AXIS ||
-            type == Z_AXIS );
-
-    // Change data info
-    ::fwData::Composite::sptr info = ::fwData::Composite::New();
-    ::fwData::Integer::sptr fromSliceType = ::fwData::Integer::New();
-    ::fwData::Integer::sptr toSliceType = ::fwData::Integer::New();
-    fromSliceType->value() = static_cast< int > ( m_orientation ) ;
-    toSliceType->value() = static_cast< int > ( type ) ;
-    info->getContainer()["fromSliceType"] = fromSliceType;
-    info->getContainer()["toSliceType"] = toSliceType;
+                type == Y_AXIS ||
+                type == Z_AXIS );
 
+    int oldType = static_cast< int > ( m_orientation );
     // Change slice type
     m_orientation = type;
 
-    // Fire the message
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE, info ) ;
+    // Fire the signal
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    ::fwServices::IEditionService::notify(this->getSptr(),  image, msg);
-    this->updateSliceIndex();
+    auto sig = image->signal< ::fwData::Image::SliceTypeModifiedSignalType >(
+        ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_UPDATE_SLICE_TYPE_SLOT)));
+        sig->asyncEmit(oldType, _type);
+    }
+    this->updateSliceIndexFromImg();
 }
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SliceIndexPositionEditor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 }
 
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceListEditor.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceListEditor.cpp
deleted file mode 100644
index 96c90d1..0000000
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceListEditor.cpp
+++ /dev/null
@@ -1,220 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <QWidget>
-#include <QString>
-#include <QMenu>
-#include <QAction>
-#include <QPushButton>
-#include <QVBoxLayout>
-
-#include <fwCore/base.hpp>
-
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/convenience.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/String.hpp>
-#include <fwData/Boolean.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/operations.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-#include <fwServices/op/Get.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwGuiQt/container/QtContainer.hpp>
-
-#include "uiImageQt/SliceListEditor.hpp"
-
-namespace uiImage
-{
-
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::SliceListEditor , ::fwData::Image ) ;
-
-
-SliceListEditor::SliceListEditor() throw()
-{
-    m_nbSlice = 1;
-//    addNewHandledEvent( "SCAN_SHOW" );
-}
-
-//------------------------------------------------------------------------------
-
-SliceListEditor::~SliceListEditor() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->create();
-
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-    QWidget* const container = qtContainer->getQtContainer();
-    SLM_ASSERT("container not instanced", container);
-
-    m_dropDownButton = new QPushButton( QObject::tr(">"), container );
-    m_dropDownButton->setToolTip( QObject::tr("Manage slice visibility"));
-    m_dropDownButton->setMaximumWidth(40);
-
-    m_pDropDownMenu = new QMenu(container);
-    QActionGroup * actionGroup = new QActionGroup(m_pDropDownMenu);
-
-    m_oneSliceItem = new QAction(QObject::tr("One slice"), m_pDropDownMenu);
-    m_threeSlicesItem = new QAction(QObject::tr("three slices"), m_pDropDownMenu);
-//  m_obliqueSliceItem = new QAction(QObject::tr("Oblique slice"), m_pDropDownMenu);
-    m_oneSliceItem->setCheckable(true);
-    m_threeSlicesItem->setCheckable(true);
-
-    actionGroup->addAction(m_oneSliceItem);
-    actionGroup->addAction(m_threeSlicesItem);
-
-    m_pDropDownMenu->addAction(m_oneSliceItem);
-    m_pDropDownMenu->addAction(m_threeSlicesItem);
-//    m_pDropDownMenu->addAction(m_obliqueSliceItem);
-    m_dropDownButton->setMenu(m_pDropDownMenu);
-
-    QObject::connect(m_oneSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-    QObject::connect(m_threeSlicesItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-//    QObject::connect(m_obliqueSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-
-    QVBoxLayout * vLayout = new QVBoxLayout(container);
-    vLayout->addWidget( m_dropDownButton);
-    vLayout->setContentsMargins(0,0,0,0);
-
-    m_oneSliceItem->setChecked(m_nbSlice == 1);
-    m_threeSlicesItem->setChecked(m_nbSlice == 3);
-//  m_obliqueSliceItem->setChecked(m_nbSlice == -1);
-
-    container->setLayout( vLayout );
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    QObject::disconnect(m_oneSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-    QObject::disconnect(m_threeSlicesItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-
-    this->getContainer()->clean();
-    this->destroy();
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    this->initialize();
-
-    std::vector < Configuration > placeInSceneConfig = m_configuration->find("negatoAdaptor");
-    SLM_ASSERT("Tag negatoAdaptor required!", !placeInSceneConfig.empty());
-    SLM_ASSERT("UID attribute is missing", placeInSceneConfig.at(0)->hasAttribute("uid"));
-    m_adaptorUID = placeInSceneConfig.at(0)->getAttributeValue("uid");
-
-    if (placeInSceneConfig.at(0)->hasAttribute("slices"))
-    {
-        std::string value(placeInSceneConfig.at(0)->getAttributeValue("slices"));
-        m_nbSlice = ::boost::lexical_cast<int >(value.c_str());
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::updating() throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::swapping() throw(::fwTools::Failed)
-{
-
-}
-//------------------------------------------------------------------------------
-
-void SliceListEditor::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    if( imageMsg && imageMsg->hasEvent( "SCAN_SHOW"))
-    {
-        ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo("SCAN_SHOW");
-        SLM_ASSERT("dataInfo is missing", dataInfo);
-        SLM_ASSERT("m_relatedServiceId is missing", dataInfo->getField( ::fwComEd::Dictionary::m_relatedServiceId ) );
-        std::string servId = dataInfo->getField< ::fwData::String >(::fwComEd::Dictionary::m_relatedServiceId)->value();
-        if( servId ==  m_adaptorUID )
-        {
-            ::fwData::Boolean::csptr isShowScan = ::fwData::Boolean::dynamicConstCast(dataInfo);
-            m_dropDownButton->setEnabled(isShowScan->value());
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::info( std::ostream &_sstream )
-{
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor::onChangeSliceMode( bool checked )
-{
-    if(::fwTools::fwID::exist(m_adaptorUID))
-    {
-        ::fwServices::IService::sptr service = ::fwServices::get(m_adaptorUID);
-        ::fwData::Image::sptr image = service->getObject< ::fwData::Image >();
-        SLM_ASSERT("SliceListEditor adaptorUID " << m_adaptorUID <<" isn't an Adaptor on an Image?" , image);
-
-        ::fwData::Integer::sptr dataInfo = ::fwData::Integer::New();
-
-        if(m_oneSliceItem->isChecked())
-        {
-            dataInfo->value() = 1;
-            m_nbSlice = 1;
-        }
-        else if(m_threeSlicesItem->isChecked())
-        {
-            dataInfo->value() = 3;
-            m_nbSlice = 3;
-        }
-        else if(m_obliqueSliceItem->isChecked())
-        {
-            dataInfo->value() = -1;
-            m_nbSlice = -1;
-        }
-        else
-        {
-            OSLM_FATAL("Unknown slice mode");
-        }
-        dataInfo->setField(::fwComEd::Dictionary::m_relatedServiceId ,  ::fwData::String::New( m_adaptorUID ) );
-        ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-        imageMsg->addEvent( "SLICE_MODE", dataInfo );
-        ::fwServices::IEditionService::notify(this->getSptr(), image, imageMsg);
-    }
-    else
-    {
-        OSLM_TRACE("Service "<< m_adaptorUID << " is not yet present.");
-    }
-}
-
-}
-
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceListEditor2.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceListEditor2.cpp
deleted file mode 100644
index 76e0860..0000000
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/SliceListEditor2.cpp
+++ /dev/null
@@ -1,231 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <QWidget>
-#include <QString>
-#include <QMenu>
-#include <QAction>
-#include <QPushButton>
-#include <QVBoxLayout>
-
-#include <fwCore/base.hpp>
-
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/convenience.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/String.hpp>
-#include <fwData/Boolean.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/operations.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwGuiQt/container/QtContainer.hpp>
-
-#include "uiImageQt/SliceListEditor2.hpp"
-
-namespace uiImage
-{
-
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::SliceListEditor2 , ::fwData::Image ) ;
-
-
-SliceListEditor2::SliceListEditor2() throw()
-{
-    m_nbSlice = 1;
-//    addNewHandledEvent( "SCAN_SHOW" );
-}
-
-//------------------------------------------------------------------------------
-
-SliceListEditor2::~SliceListEditor2() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->create();
-
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-    QWidget* const container = qtContainer->getQtContainer();
-    SLM_ASSERT("container not instanced", container);
-
-    m_dropDownButton = new QPushButton( QObject::tr(">"), container );
-    m_dropDownButton->setToolTip( QObject::tr("Manage slice visibility"));
-    m_dropDownButton->setMaximumWidth(40);
-
-    m_pDropDownMenu = new QMenu(container);
-    QActionGroup * actionGroup = new QActionGroup(m_pDropDownMenu);
-
-    m_noSliceItem = new QAction(QObject::tr("No slices"), m_pDropDownMenu);
-    m_oneSliceItem = new QAction(QObject::tr("One slice"), m_pDropDownMenu);
-    m_threeSlicesItem = new QAction(QObject::tr("Three slices"), m_pDropDownMenu);
-//  m_obliqueSliceItem = new QAction(QObject::tr("Oblique slice"), m_pDropDownMenu);
-    m_noSliceItem->setCheckable(true);
-    m_oneSliceItem->setCheckable(true);
-    m_threeSlicesItem->setCheckable(true);
-
-    actionGroup->addAction(m_noSliceItem);
-    actionGroup->addAction(m_oneSliceItem);
-    actionGroup->addAction(m_threeSlicesItem);
-
-    m_pDropDownMenu->addAction(m_noSliceItem);
-    m_pDropDownMenu->addAction(m_oneSliceItem);
-    m_pDropDownMenu->addAction(m_threeSlicesItem);
-//    m_pDropDownMenu->addAction(m_obliqueSliceItem);
-    m_dropDownButton->setMenu(m_pDropDownMenu);
-
-    QObject::connect(m_noSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-    QObject::connect(m_oneSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-    QObject::connect(m_threeSlicesItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-//    QObject::connect(m_obliqueSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-
-    QVBoxLayout * vLayout = new QVBoxLayout(container);
-    vLayout->addWidget( m_dropDownButton);
-    vLayout->setContentsMargins(0,0,0,0);
-
-    m_noSliceItem->setChecked(m_nbSlice == 0);
-    m_oneSliceItem->setChecked(m_nbSlice == 1);
-    m_threeSlicesItem->setChecked(m_nbSlice == 3);
-//  m_obliqueSliceItem->setChecked(m_nbSlice == -1);
-
-    container->setLayout( vLayout );
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    QObject::disconnect(m_noSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-    QObject::disconnect(m_oneSliceItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-    QObject::disconnect(m_threeSlicesItem, SIGNAL(triggered(bool)), this, SLOT(onChangeSliceMode(bool)));
-
-    this->getContainer()->clean();
-    this->destroy();
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    this->initialize();
-
-    std::vector < Configuration > placeInSceneConfig = m_configuration->find("negatoAdaptor");
-    SLM_ASSERT("Tag negatoAdaptor required!", !placeInSceneConfig.empty());
-    SLM_ASSERT("UID attribute is missing", placeInSceneConfig.at(0)->hasAttribute("uid"));
-    m_adaptorUID = placeInSceneConfig.at(0)->getAttributeValue("uid");
-
-    if (placeInSceneConfig.at(0)->hasAttribute("slices"))
-    {
-        std::string value(placeInSceneConfig.at(0)->getAttributeValue("slices"));
-        m_nbSlice = ::boost::lexical_cast<int >(value.c_str());
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::updating() throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::swapping() throw(::fwTools::Failed)
-{
-
-}
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    if( imageMsg && imageMsg->hasEvent( "SCAN_SHOW"))
-    {
-        ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo("SCAN_SHOW");
-        SLM_ASSERT("dataInfo is missing", dataInfo);
-        SLM_ASSERT("m_relatedServiceId is missing", dataInfo->getField( ::fwComEd::Dictionary::m_relatedServiceId ) );
-        std::string servId = dataInfo->getField< ::fwData::String >(::fwComEd::Dictionary::m_relatedServiceId)->value();
-        if( servId ==  m_adaptorUID )
-        {
-            ::fwData::Boolean::csptr isShowScan = ::fwData::Boolean::dynamicConstCast(dataInfo);
-            m_noSliceItem->setChecked(!isShowScan->value());
-            m_oneSliceItem->setChecked(isShowScan->value() && m_nbSlice == 1);
-            m_threeSlicesItem->setChecked(isShowScan->value() && m_nbSlice == 3);
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::info( std::ostream &_sstream )
-{
-}
-
-//------------------------------------------------------------------------------
-
-void SliceListEditor2::onChangeSliceMode( bool checked )
-{
-    if(::fwTools::fwID::exist(m_adaptorUID))
-    {
-        ::fwServices::IService::sptr service = ::fwServices::get(m_adaptorUID);
-        ::fwData::Image::sptr image = service->getObject< ::fwData::Image >();
-        SLM_ASSERT("SliceListEditor2 adaptorUID " << m_adaptorUID <<" isn't an Adaptor on an Image?" , image);
-
-        ::fwData::Integer::sptr dataInfo = ::fwData::Integer::New();
-
-        if(m_noSliceItem->isChecked())
-        {
-            dataInfo->value() = 0;
-        }
-        else if(m_oneSliceItem->isChecked())
-        {
-            dataInfo->value() = 1;
-            m_nbSlice = 1;
-        }
-        else if(m_threeSlicesItem->isChecked())
-        {
-            dataInfo->value() = 3;
-            m_nbSlice = 3;
-        }
-//        else if(m_obliqueSliceItem->isChecked())
-//        {
-//            dataInfo->value() = -1;
-//            m_nbSlice = -1;
-//        }
-        else
-        {
-            OSLM_FATAL("Unknown slice mode");
-        }
-        dataInfo->setField(::fwComEd::Dictionary::m_relatedServiceId ,  ::fwData::String::New( m_adaptorUID ) );
-        ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-        imageMsg->addEvent( "SLICE_MODE", dataInfo );
-        ::fwServices::IEditionService::notify(this->getSptr(), image, imageMsg);
-    }
-    else
-    {
-        OSLM_TRACE("Service "<< m_adaptorUID << " is not yet present.");
-    }
-}
-
-}
-
diff --git a/Bundles/LeafUI/uiImageQt/src/uiImageQt/WindowLevel.cpp b/Bundles/LeafUI/uiImageQt/src/uiImageQt/WindowLevel.cpp
index c402880..0b37382 100644
--- a/Bundles/LeafUI/uiImageQt/src/uiImageQt/WindowLevel.cpp
+++ b/Bundles/LeafUI/uiImageQt/src/uiImageQt/WindowLevel.cpp
@@ -1,13 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "uiImageQt/WindowLevel.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/TransferFunction.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwGuiQt/widget/QRangeSlider.hpp>
+
+#include <fwServices/macros.hpp>
+
 #include <QApplication>
 #include <QComboBox>
-#include <QGridLayout>
 #include <QDoubleValidator>
+#include <QGridLayout>
 #include <QLabel>
 #include <QLineEdit>
 #include <QMenu>
@@ -17,57 +38,30 @@
 
 #include <boost/math/special_functions/fpclassify.hpp>
 
-#include <fwData/Image.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/TransferFunction.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-#include <fwComEd/helper/Composite.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-
-#include <fwGuiQt/container/QtContainer.hpp>
-#include <fwGuiQt/widget/QRangeSlider.hpp>
-
-
-#include "uiImageQt/WindowLevel.hpp"
+#include <functional>
 
 namespace uiImage
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiImage::WindowLevel , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiImage::WindowLevel, ::fwData::Image );
 
 //------------------------------------------------------------------------------
 
 WindowLevel::WindowLevel() throw()
 {
     m_widgetDynamicRangeMin   = -1024.;
-    m_widgetDynamicRangeWidth =  4000.;
-    m_autoWindowing = false;
-    m_imageMin = -200;
-    m_imageMax = 300;
-    m_isNotifying = false;
-    m_useImageGreyLevelTF = false;
-
-    //this->installTFSelectionEventHandler(this);
-    //this->addNewHandledEvent(::fwComEd::ImageMsg::BUFFER);
-    //this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::WINDOWING );
+    m_widgetDynamicRangeWidth = 4000.;
+    m_autoWindowing           = false;
+    m_useImageGreyLevelTF     = false;
+
+    this->installTFSlots(this);
 }
 
 //------------------------------------------------------------------------------
 
 WindowLevel::~WindowLevel() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -76,14 +70,15 @@ void WindowLevel::starting() throw(::fwTools::Failed)
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     this->create();
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-    QWidget * const container = qtContainer->getQtContainer();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     QGridLayout* layout = new QGridLayout();
 
     m_valueTextMin = new QLineEdit( container );
-    QDoubleValidator *minValidator = new QDoubleValidator(m_valueTextMin);
+    QDoubleValidator* minValidator = new QDoubleValidator(m_valueTextMin);
     m_valueTextMin->setValidator(minValidator);
 
     m_valueTextMax = new QLineEdit( container );
@@ -94,8 +89,8 @@ void WindowLevel::starting() throw(::fwTools::Failed)
 
     m_toggleTFButton = new QToolButton(container);
     QIcon ico;
-    QString squareIcon(SHAREPATH "Bundles/uiImageQt_" UIIMAGEQT_VER "/square.png");
-    QString rampIcon(SHAREPATH "Bundles/uiImageQt_" UIIMAGEQT_VER "/ramp.png");
+    QString squareIcon(BUNDLE_PREFIX "/uiImageQt_" UIIMAGEQT_VER "/square.png");
+    QString rampIcon(BUNDLE_PREFIX "/uiImageQt_" UIIMAGEQT_VER "/ramp.png");
     ico.addPixmap(QPixmap(squareIcon), QIcon::Normal,QIcon::On);
     ico.addPixmap(QPixmap(rampIcon), QIcon::Normal,QIcon::Off);
     m_toggleTFButton->setIcon(ico);
@@ -103,9 +98,9 @@ void WindowLevel::starting() throw(::fwTools::Failed)
 
     m_toggleAutoButton = new QToolButton(container);
     QIcon icon;
-    QString windo(SHAREPATH "Bundles/uiImageQt_" UIIMAGEQT_VER "/windowing.svg");
+    QString windo(BUNDLE_PREFIX "/uiImageQt_" UIIMAGEQT_VER "/windowing.svg");
     icon.addFile(windo, QSize(), QIcon::Normal,QIcon::On);
-    QString nowindo(SHAREPATH "Bundles/uiImageQt_" UIIMAGEQT_VER "/nowindowing.svg");
+    QString nowindo(BUNDLE_PREFIX "/uiImageQt_" UIIMAGEQT_VER "/nowindowing.svg");
     icon.addFile(nowindo, QSize(), QIcon::Normal,QIcon::Off);
     m_toggleAutoButton->setIcon(icon);
     m_toggleAutoButton->setToolTip("Automatic Windowing");
@@ -116,10 +111,10 @@ void WindowLevel::starting() throw(::fwTools::Failed)
     m_dynamicRangeSelection->setPopupMode(QToolButton::InstantPopup);
 
     m_dynamicRangeMenu = new QMenu(m_dynamicRangeSelection);
-    QAction *action1 = m_dynamicRangeMenu->addAction( "-1024; 1023" );
-    QAction *action2 = m_dynamicRangeMenu->addAction( "-100; 300" );
-    QAction *action3 = m_dynamicRangeMenu->addAction( "Fit W/L" );
-    QAction *action4 = m_dynamicRangeMenu->addAction( "Fit Data" ); // TODO
+    QAction* action1 = m_dynamicRangeMenu->addAction( "-1024; 1023" );
+    QAction* action2 = m_dynamicRangeMenu->addAction( "-100; 300" );
+    QAction* action3 = m_dynamicRangeMenu->addAction( "Fit W/L" );
+    QAction* action4 = m_dynamicRangeMenu->addAction( "Fit Data" ); // TODO
     //QAction *action5 = m_dynamicRangeMenu->addAction( "Custom ..." ); // TODO
     m_dynamicRangeSelection->setMenu(m_dynamicRangeMenu);
 
@@ -145,26 +140,33 @@ void WindowLevel::starting() throw(::fwTools::Failed)
 
     QObject::connect(m_valueTextMin, SIGNAL(editingFinished()), this, SLOT(onTextEditingFinished()));
     QObject::connect(m_valueTextMax, SIGNAL(editingFinished()), this, SLOT(onTextEditingFinished()));
-    QObject::connect(m_rangeSlider, SIGNAL(sliderRangeEdited( double, double )) , this, SLOT(onWindowLevelWidgetChanged( double, double )));
+    QObject::connect(m_rangeSlider, SIGNAL(sliderRangeEdited( double, double )), this,
+                     SLOT(onWindowLevelWidgetChanged( double, double )));
     QObject::connect(m_toggleTFButton, SIGNAL(toggled( bool )), this, SLOT(onToggleTF( bool )));
     QObject::connect(m_toggleAutoButton, SIGNAL(toggled( bool )), this, SLOT(onToggleAutoWL( bool )));
-    QObject::connect(m_dynamicRangeSelection, SIGNAL(triggered( QAction * )), this, SLOT(onDynamicRangeSelectionChanged( QAction * )));
+    QObject::connect(m_dynamicRangeSelection, SIGNAL(triggered( QAction* )), this,
+                     SLOT(onDynamicRangeSelectionChanged( QAction* )));
 
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //------------------------------------------------------------------------------
 
 void WindowLevel::stopping() throw(::fwTools::Failed)
 {
-    this->removeTFObserver();
-    QObject::disconnect(m_dynamicRangeSelection, SIGNAL(triggered( QAction * )), this, SLOT(onDynamicRangeSelectionChanged( QAction * )));
+    this->removeTFConnections();
+    QObject::disconnect(m_dynamicRangeSelection, SIGNAL(triggered( QAction* )), this,
+                        SLOT(onDynamicRangeSelectionChanged( QAction* )));
     QObject::disconnect(m_toggleTFButton, SIGNAL(toggled( bool )), this, SLOT(onToggleTF( bool )));
-    QObject::disconnect(m_rangeSlider, SIGNAL(sliderRangeEdited( double, double )), this, SLOT(onWindowLevelWidgetChanged( double, double )));
-    QObject::disconnect(m_valueTextMin, SIGNAL(editingFinished( QString )), this, SLOT(onTextEditingFinished( QString )));
-    QObject::disconnect(m_valueTextMax, SIGNAL(editingFinished( QString )), this, SLOT(onTextEditingFinished( QString )));
+    QObject::disconnect(m_rangeSlider, SIGNAL(sliderRangeEdited( double, double )), this,
+                        SLOT(onWindowLevelWidgetChanged( double, double )));
+    QObject::disconnect(m_valueTextMin, SIGNAL(editingFinished( )), this,
+                        SLOT(onTextEditingFinished( )));
+    QObject::disconnect(m_valueTextMax, SIGNAL(editingFinished( )), this,
+                        SLOT(onTextEditingFinished( )));
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
 
     // deletes contained widgets
     this->getContainer()->clean();
@@ -186,14 +188,16 @@ void WindowLevel::configuring() throw(fwTools::Failed)
     if (config->hasAttribute("autoWindowing"))
     {
         std::string autoWindowing = config->getExistingAttributeValue("autoWindowing");
-        SLM_ASSERT("Bad value for 'autoWindowing' attribute. It must be 'yes' or 'no'!", autoWindowing == "yes" || autoWindowing == "no");
+        SLM_ASSERT("Bad value for 'autoWindowing' attribute. It must be 'yes' or 'no'!",
+                   autoWindowing == "yes" || autoWindowing == "no");
         m_autoWindowing = (autoWindowing == "yes");
     }
 
     if ( config->hasAttribute("useImageGreyLevelTF") )
     {
         std::string useImageGreyLevelTF = config->getExistingAttributeValue("useImageGreyLevelTF");
-        SLM_ASSERT("Bad value for 'useImageGreyLevelTF' attribute. It must be 'yes' or 'no'!", useImageGreyLevelTF == "yes" || useImageGreyLevelTF == "no");
+        SLM_ASSERT("Bad value for 'useImageGreyLevelTF' attribute. It must be 'yes' or 'no'!",
+                   useImageGreyLevelTF == "yes" || useImageGreyLevelTF == "no");
         m_useImageGreyLevelTF = (useImageGreyLevelTF == "yes");
     }
 
@@ -207,17 +211,28 @@ void WindowLevel::updating() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
     this->setEnabled(imageIsValid);
 
-    this->updateTransferFunction(image, this->getSptr());
+    ::fwData::Composite::sptr tfSelection;
+    if( ::fwServices::IService::isVersion2() )
+    {
+        tfSelection = this->getInOut< ::fwData::Composite>("TFSelections");
+        this->setTFSelectionFwID(tfSelection->getID());
+    }
+    else
+    {
+        tfSelection = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject(this->getTFSelectionFwID()) );
+    }
+    this->setTransferFunctionSelection(tfSelection);
+
+    this->updateTransferFunction(image);
     if(imageIsValid)
     {
         this->updateImageInfos(image);
 
         // test if service must use image grey level tf ( when another tf pool is defined )
-        if( m_useImageGreyLevelTF &&
-            ! this->getTFSelectionFwID().empty() )
+        if( m_useImageGreyLevelTF && !this->getTFSelectionFwID().empty() )
         {
             ::fwData::TransferFunction::sptr newTF = this->getImageGreyLevelTF();
             this->swapCurrentTFAndNotify( newTF );
@@ -227,7 +242,7 @@ void WindowLevel::updating() throw(::fwTools::Failed)
         if(m_autoWindowing)
         {
             double min, max;
-            ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
+            ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
             this->updateImageWindowLevel(min, max);
         }
 
@@ -242,62 +257,37 @@ void WindowLevel::updating() throw(::fwTools::Failed)
 
 void WindowLevel::swapping() throw(::fwTools::Failed)
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->updating();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
+
 //------------------------------------------------------------------------------
 
-void WindowLevel::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void WindowLevel::updatingTFPoints()
 {
-    SLM_TRACE_FUNC();
-
-    this->upadteTFObserver(msg, this->getSptr());
-
-    if (msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ))
-    {
-        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-
-        bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-        if (imageIsValid)
-        {
-            this->updateImageInfos(image);
-            this->updateTransferFunction(image, this->getSptr());
-
-
-            if(m_autoWindowing)
-            {
-                double min, max;
-                ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
-                this->updateImageWindowLevel(min, max);
-            }
+    this->updating();
+}
 
-            ::fwData::TransferFunction::sptr pTF = this->getTransferFunction();
-            SLM_ASSERT("TransferFunction null pointer", pTF);
-            ::fwData::TransferFunction::TFValuePairType minMax = pTF->getWLMinMax();
-            this->onImageWindowLevelChanged( minMax.first, minMax.second );
-        }
-        this->setEnabled(imageIsValid);
+//------------------------------------------------------------------------------
 
-    }
-    if (msg->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING ))
-    {
-        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+void WindowLevel::updatingTFWindowing(double window, double level)
+{
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-        bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-        SLM_ASSERT("Image is not valid",imageIsValid);
-        this->updateTransferFunction(image, this->getSptr());
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    SLM_ASSERT("Image is not valid",imageIsValid);
+    this->updateTransferFunction(image);
 
-        ::fwData::TransferFunction::sptr pTF = this->getTransferFunction();
-        SLM_ASSERT("TransferFunction null pointer", pTF);
-        ::fwData::TransferFunction::TFValuePairType minMax = pTF->getWLMinMax();
-        this->onImageWindowLevelChanged( minMax.first, minMax.second );
-    }
+    ::fwData::TransferFunction::sptr pTF = this->getTransferFunction();
+    SLM_ASSERT("TransferFunction null pointer", pTF);
+    ::fwData::TransferFunction::TFValuePairType minMax = pTF->getWLMinMax();
+    this->onImageWindowLevelChanged( minMax.first, minMax.second );
 }
 
 //------------------------------------------------------------------------------
 
-void WindowLevel::info( std::ostream & _sstream )
+void WindowLevel::info( std::ostream& _sstream )
 {
     _sstream << "Window level editor";
 }
@@ -346,20 +336,22 @@ double WindowLevel::toWindowLevel(double _val)
 
 //------------------------------------------------------------------------------
 
-void  WindowLevel::updateImageWindowLevel(double _imageMin, double _imageMax)
+void WindowLevel::updateImageWindowLevel(double _imageMin, double _imageMax)
 {
-    m_imageMin = _imageMin;
-    m_imageMax = _imageMax;
+    ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
 
-    if (!m_isNotifying)
+    this->getTransferFunction()->setWLMinMax( ::fwData::TransferFunction::TFValuePairType(_imageMin, _imageMax) );
+    auto sig = tf->signal< ::fwData::TransferFunction::WindowingModifiedSignalType >(
+        ::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG);
     {
-        this->notifyWindowLevel(_imageMin, _imageMax);
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdateTFWindowing));
+        sig->asyncEmit( tf->getWindow(), tf->getLevel());
     }
 }
 
 //------------------------------------------------------------------------------
 
-void  WindowLevel::onWindowLevelWidgetChanged(double _min, double _max)
+void WindowLevel::onWindowLevelWidgetChanged(double _min, double _max)
 {
     double imageMin = this->toWindowLevel(_min);
     double imageMax = this->toWindowLevel(_max);
@@ -369,12 +361,12 @@ void  WindowLevel::onWindowLevelWidgetChanged(double _min, double _max)
 
 //------------------------------------------------------------------------------
 
-void WindowLevel::onDynamicRangeSelectionChanged(QAction *action)
+void WindowLevel::onDynamicRangeSelectionChanged(QAction* action)
 {
     WindowLevelMinMaxType wl = this->getImageWindowMinMax();
-    double min = m_widgetDynamicRangeMin;
-    double max = m_widgetDynamicRangeWidth + min;
-    int index = action->data().toInt();
+    double min               = m_widgetDynamicRangeMin;
+    double max               = m_widgetDynamicRangeWidth + min;
+    int index                = action->data().toInt();
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     switch (index)
@@ -383,18 +375,18 @@ void WindowLevel::onDynamicRangeSelectionChanged(QAction *action)
             break;
         case 1: // -1024; 1023
             min = -1024;
-            max =  1023;
+            max = 1023;
             break;
         case 2: // -100; 300
             min = -100;
-            max =  300;
+            max = 300;
             break;
         case 3: // Fit Window/Level
             min = std::min(wl.first, wl.second);
             max = std::max(wl.first, wl.second);
             break;
         case 4: // Fit Image Range
-            ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
+            ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
             break;
         case 5: // Custom : TODO
             break;
@@ -408,7 +400,7 @@ void WindowLevel::onDynamicRangeSelectionChanged(QAction *action)
 
 //------------------------------------------------------------------------------
 
-void  WindowLevel::onImageWindowLevelChanged(double _imageMin, double _imageMax)
+void WindowLevel::onImageWindowLevelChanged(double _imageMin, double _imageMax)
 {
     this->updateWidgetMinMax( _imageMin, _imageMax );
     this->updateTextWindowLevel( _imageMin, _imageMax );
@@ -416,54 +408,7 @@ void  WindowLevel::onImageWindowLevelChanged(double _imageMin, double _imageMax)
 
 //------------------------------------------------------------------------------
 
-// Check if service that registered the callback is still alive
-struct WLCallback
-{
-    typedef void result_type;
-
-    WLCallback(WindowLevel::sptr wl)
-    {
-        m_wl = wl;
-    }
-
-    void operator()()
-    {
-        if ( !m_wl.expired() )
-        {
-            m_wl.lock()->notifyWindowLevelCallback();
-        }
-    }
-
-    WindowLevel::wptr m_wl;
-};
-
-void  WindowLevel::notifyWindowLevel(double _imageMin, double _imageMax)
-{
-    m_notifiedImageMin = _imageMin;
-    m_notifiedImageMax = _imageMax;
-
-    this->setWindowLevel(m_imageMin, m_imageMax);
-    ::fwComEd::TransferFunctionMsg::sptr msg = this->notifyTFWindowing(this->getSptr());
-    msg->setMessageCallback(::boost::bind( WLCallback(WindowLevel::dynamicCast(this->getSptr())) ));
-
-    m_isNotifying = true;
-}
-
-//------------------------------------------------------------------------------
-
-void  WindowLevel::notifyWindowLevelCallback()
-{
-    m_isNotifying = false;
-
-    if (m_notifiedImageMin != m_imageMin || m_notifiedImageMax != m_imageMax)
-    {
-        this->updateImageWindowLevel(m_imageMin, m_imageMax);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void  WindowLevel::updateTextWindowLevel(double _imageMin, double _imageMax)
+void WindowLevel::updateTextWindowLevel(double _imageMin, double _imageMax)
 {
     m_valueTextMin->setText(QString("%1").arg(_imageMin));
     m_valueTextMax->setText(QString("%1").arg(_imageMax));
@@ -471,7 +416,7 @@ void  WindowLevel::updateTextWindowLevel(double _imageMin, double _imageMax)
 
 //------------------------------------------------------------------------------
 
-void  WindowLevel::onToggleTF(bool squareTF)
+void WindowLevel::onToggleTF(bool squareTF)
 {
     bool usedGreyLevelTF = false;
 
@@ -490,10 +435,9 @@ void  WindowLevel::onToggleTF(bool squareTF)
     else
     {
         // test if service must use image grey level tf ( when another tf pool is defined )
-        if(     m_useImageGreyLevelTF &&
-                ! this->getTFSelectionFwID().empty() )
+        if( m_useImageGreyLevelTF && !this->getTFSelectionFwID().empty() )
         {
-            newTF = this->getImageGreyLevelTF();
+            newTF           = this->getImageGreyLevelTF();
             usedGreyLevelTF = true;
         }
         else
@@ -509,29 +453,35 @@ void  WindowLevel::onToggleTF(bool squareTF)
 
     if ( usedGreyLevelTF )
     {
-        this->notifyTFWindowing( this->getSptr() );
+        // Send signal
+        auto sig = newTF->signal< ::fwData::TransferFunction::WindowingModifiedSignalType >(
+            ::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdateTFWindowing));
+            sig->asyncEmit( newTF->getWindow(), newTF->getLevel());
+        }
     }
 }
 
 //------------------------------------------------------------------------------
 
-void  WindowLevel::onToggleAutoWL(bool autoWL)
+void WindowLevel::onToggleAutoWL(bool autoWL)
 {
-     m_autoWindowing = autoWL;
-
-     if (m_autoWindowing)
-     {
-         ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-         double min, max;
-         ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
-         this->updateImageWindowLevel(min, max);
-         this->onImageWindowLevelChanged(min, max);
-     }
+    m_autoWindowing = autoWL;
+
+    if (m_autoWindowing)
+    {
+        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+        double min, max;
+        ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
+        this->updateImageWindowLevel(min, max);
+        this->onImageWindowLevelChanged(min, max);
+    }
 }
 
 //------------------------------------------------------------------------------
 
-void  WindowLevel::onTextEditingFinished()
+void WindowLevel::onTextEditingFinished()
 {
     double min, max;
     if(this->getWidgetDoubleValue(m_valueTextMin, min) && this->getWidgetDoubleValue(m_valueTextMax, max))
@@ -543,9 +493,9 @@ void  WindowLevel::onTextEditingFinished()
 
 //------------------------------------------------------------------------------
 
-bool WindowLevel::getWidgetDoubleValue(QLineEdit *widget, double &val)
+bool WindowLevel::getWidgetDoubleValue(QLineEdit* widget, double& val)
 {
-    bool ok=false;
+    bool ok = false;
     val = widget->text().toDouble(&ok);
 
     QPalette palette;
@@ -565,8 +515,9 @@ bool WindowLevel::getWidgetDoubleValue(QLineEdit *widget, double &val)
 
 void WindowLevel::setEnabled(bool enable)
 {
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-    QWidget * const container = qtContainer->getQtContainer();
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
     container->setEnabled(enable);
 }
@@ -579,7 +530,7 @@ void WindowLevel::setWidgetDynamicRange(double min, double max)
     {
         max = min + 1.e-05;
     }
-    m_widgetDynamicRangeMin = min;
+    m_widgetDynamicRangeMin   = min;
     m_widgetDynamicRangeWidth = max - min;
 
     m_dynamicRangeSelection->setText(QString("%1, %2 ").arg(min).arg(max));
@@ -594,11 +545,11 @@ void WindowLevel::setWidgetDynamicRange(double min, double max)
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     // Create pool
-    ::fwComEd::helper::Image helper(image);
-    helper.createTransferFunctionPool( this->getSptr() ); // do nothing if image tf pool already exist
+    ::fwDataTools::helper::Image helper(image);
+    helper.createTransferFunctionPool(); // do nothing if image tf pool already exist
 
     // Get pool
-    const std::string poolFieldName = ::fwComEd::Dictionary::m_transferFunctionCompositeId;
+    const std::string poolFieldName = ::fwDataTools::fieldHelper::Image::m_transferFunctionCompositeId;
     ::fwData::Composite::sptr pool = image->getField< ::fwData::Composite >(poolFieldName);
 
     // Get image default image tf
@@ -615,12 +566,34 @@ void WindowLevel::swapCurrentTFAndNotify( ::fwData::TransferFunction::sptr newTF
     // Change TF
     std::string tfSelectionFwID = this->getTFSelectionFwID();
     ::fwData::Composite::sptr pool = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject( tfSelectionFwID ) );
-    OSLM_ASSERT( "Sorry, object with fwID " << tfSelectionFwID << " doesn't exist.", pool );
-    ::fwComEd::helper::Composite compositeHelper( pool );
+    OSLM_ASSERT( "The object with the fwID " << tfSelectionFwID << " doesn't exist.", pool );
+    ::fwDataTools::helper::Composite compositeHelper( pool );
     compositeHelper.swap( this->getSelectedTFKey(), newTF );
 
     // Notify change
-    compositeHelper.notify( this->getSptr() );
+    compositeHelper.notify();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType WindowLevel::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap WindowLevel::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( "image", ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT );
+    connections.push( "image", ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMeasurement/CMakeLists.txt b/Bundles/LeafUI/uiMeasurement/CMakeLists.txt
index 2605701..1169074 100644
--- a/Bundles/LeafUI/uiMeasurement/CMakeLists.txt
+++ b/Bundles/LeafUI/uiMeasurement/CMakeLists.txt
@@ -1,14 +1,3 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwGui
-    fwRuntime
-)
 
 
-find_package(Boost REQUIRED)
-
-fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    )
-
diff --git a/Bundles/LeafUI/uiMeasurement/COPYING b/Bundles/LeafUI/uiMeasurement/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiMeasurement/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiMeasurement/COPYING.LESSER b/Bundles/LeafUI/uiMeasurement/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiMeasurement/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiMeasurement/Properties.cmake b/Bundles/LeafUI/uiMeasurement/Properties.cmake
index 659d19e..1c9efe2 100644
--- a/Bundles/LeafUI/uiMeasurement/Properties.cmake
+++ b/Bundles/LeafUI/uiMeasurement/Properties.cmake
@@ -2,6 +2,15 @@
 set( NAME uiMeasurement )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwRuntime fwServices )
+set( DEPENDENCIES
+    fwCom
+    fwTools
+    fwCore
+    fwData
+    fwDataTools
+    fwGui
+    fwRuntime
+    fwServices
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiMeasurement/bin/build.options b/Bundles/LeafUI/uiMeasurement/bin/build.options
deleted file mode 100644
index 1adb0be..0000000
--- a/Bundles/LeafUI/uiMeasurement/bin/build.options
+++ /dev/null
@@ -1,15 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwDataIO_0-2',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          ]
-USE     = ['boost']
-BUNDLES = ['gui_0-1',]
-REQUIREMENTS = ['ioAtoms_0-1']
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Namespace.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Namespace.hpp
index cdc3712..bc3a7ae 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Namespace.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIMEASUREMENT_NAMESPACE_HPP_
-#define UIMEASUREMENT_NAMESPACE_HPP_
+#ifndef __UIMEASUREMENT_NAMESPACE_HPP__
+#define __UIMEASUREMENT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiMeasurement contains actions to add/show/remove distances and landmarks.
  * @namespace   uiMeasurement
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace uiMeasurement
 {
 
 }
-#endif /* UIMEASUREMENT_NAMESPACE_HPP_ */
+#endif /* __UIMEASUREMENT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Plugin.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Plugin.hpp
index e87786b..06e65be 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Plugin.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_PLUGIN_HPP_
-#define _UIMEASUREMENT_PLUGIN_HPP_
+#ifndef __UIMEASUREMENT_PLUGIN_HPP__
+#define __UIMEASUREMENT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -13,7 +13,7 @@ namespace uiMeasurement
 {
 
 /**
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -33,4 +33,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiMeasurement
 
-#endif //_UIMEASUREMENT_PLUGIN_HPP_
+#endif //__UIMEASUREMENT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddDistance.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddDistance.hpp
index cb3406d..0705d11 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddDistance.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddDistance.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_ADDISTANCE_HPP_
-#define _UIMEASUREMENT_ACTION_ADDISTANCE_HPP_
+#ifndef __UIMEASUREMENT_ACTION_ADDDISTANCE_HPP__
+#define __UIMEASUREMENT_ACTION_ADDDISTANCE_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -19,17 +19,15 @@ namespace action
 /**
  * @brief   This action adds distance on image.
  * @class   AddDistance
- * 
- * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API AddDistance : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (AddDistance)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (AddDistance)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API AddDistance() throw() ;
+    UIMEASUREMENT_API AddDistance() throw();
 
-    UIMEASUREMENT_API virtual ~AddDistance() throw() ;
+    UIMEASUREMENT_API virtual ~AddDistance() throw();
 
 protected:
 
@@ -39,11 +37,9 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void info(std::ostream &_sstream ) ;
+    UIMEASUREMENT_API void info(std::ostream &_sstream );
 
 private:
     int m_actionCheckId;
@@ -53,4 +49,4 @@ private:
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_ADDISTANCE_HPP_
+#endif // __UIMEASUREMENT_ACTION_ADDDISTANCE_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddLandmark.hpp
index 48a1057..6a080b7 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/AddLandmark.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_ADDLANDMARK_HPP_
-#define _UIMEASUREMENT_ACTION_ADDLANDMARK_HPP_
+#ifndef __UIMEASUREMENT_ACTION_ADDLANDMARK_HPP__
+#define __UIMEASUREMENT_ACTION_ADDLANDMARK_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -18,18 +18,26 @@ namespace action
 
 /**
  * @brief   This action adds landmaks on image.
- * @class   AddLandmark
- * 
- * @date    2010.
+ *
+ * @section XML XML configuration
+ * @code{.xml}
+    <service uid="..." type="::uiMeasurement::action::AddLandmark" >
+       <inout key="image" uid="..."/>
+    </service>
+   @endcode
+ *
+ *  * @subsection In-Out In-Out
+ * - \b image [::fwData::Image]: image to which the landmarks are added.
+ *
  */
 class UIMEASUREMENT_CLASS_API AddLandmark : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (AddLandmark)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (AddLandmark)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API AddLandmark() throw() ;
+    UIMEASUREMENT_API AddLandmark() throw();
 
-    UIMEASUREMENT_API virtual ~AddLandmark() throw() ;
+    UIMEASUREMENT_API virtual ~AddLandmark() throw();
 
 protected:
 
@@ -39,11 +47,9 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void info(std::ostream &_sstream ) ;
+    UIMEASUREMENT_API void info(std::ostream& _sstream );
 
 private:
     int m_actionCheckId;
@@ -52,4 +58,4 @@ private:
 } // namespace action
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_ADDLANDMARK_HPP_
+#endif // __UIMEASUREMENT_ACTION_ADDLANDMARK_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/FocusLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/FocusLandmark.hpp
index 04d67ed..93d8606 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/FocusLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/FocusLandmark.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_FOCUSLANDMARK_HPP_
-#define _UIMEASUREMENT_ACTION_FOCUSLANDMARK_HPP_
+#ifndef __UIMEASUREMENT_ACTION_FOCUSLANDMARK_HPP__
+#define __UIMEASUREMENT_ACTION_FOCUSLANDMARK_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -19,18 +19,16 @@ namespace action
 /**
  * @brief   This action moves the image slice on chosen landmark.
  * @class   FocusLandmark
- * 
- * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API FocusLandmark : public ::fwGui::IActionSrv
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (FocusLandmark)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (FocusLandmark)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API FocusLandmark() throw() ;
+    UIMEASUREMENT_API FocusLandmark() throw();
 
-    UIMEASUREMENT_API virtual ~FocusLandmark() throw() ;
+    UIMEASUREMENT_API virtual ~FocusLandmark() throw();
 
 protected:
 
@@ -38,17 +36,15 @@ protected:
 
     UIMEASUREMENT_API void stopping() throw ( ::fwTools::Failed );
 
-    UIMEASUREMENT_API void receiving( fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed );
-
     UIMEASUREMENT_API void configuring() throw ( ::fwTools::Failed );
 
     UIMEASUREMENT_API void updating() throw ( ::fwTools::Failed );
 
-    UIMEASUREMENT_API void info ( std::ostream &_sstream ) ;
+    UIMEASUREMENT_API void info ( std::ostream &_sstream );
 
 };
 
 } // namespace action
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_FOCUSLANDMARK_HPP_
+#endif // __UIMEASUREMENT_ACTION_FOCUSLANDMARK_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp
index a422999..eabbffc 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/LoadLandmark.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_UI_ACTION_SAVELANDMARK_HPP_
-#define _UIMEASUREMENT_UI_ACTION_SAVELANDMARK_HPP_
+#ifndef __UIMEASUREMENT_ACTION_LOADLANDMARK_HPP__
+#define __UIMEASUREMENT_ACTION_LOADLANDMARK_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -16,14 +16,17 @@ namespace uiMeasurement
 namespace action
 {
 
+/**
+ * @brief Load landmark from a file
+ */
 class UIMEASUREMENT_CLASS_API LoadLandmark : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (LoadLandmark)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (LoadLandmark)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API LoadLandmark() throw() ;
+    UIMEASUREMENT_API LoadLandmark() throw();
 
-    UIMEASUREMENT_API virtual ~LoadLandmark() throw() ;
+    UIMEASUREMENT_API virtual ~LoadLandmark() throw();
 
 protected:
 
@@ -33,11 +36,9 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    void info(std::ostream &_sstream ) ;
+    void info(std::ostream &_sstream );
 
     void load(const ::boost::filesystem::path& path);
 };
@@ -46,4 +47,4 @@ protected:
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_UI_ACTION_SAVELANDMARK_HPP_
+#endif // __UIMEASUREMENT_ACTION_LOADLANDMARK_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveDistance.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveDistance.hpp
index 55ca1f8..d242c92 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveDistance.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveDistance.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_REMOVEDISTANCE_HPP_
-#define _UIMEASUREMENT_ACTION_REMOVEDISTANCE_HPP_
+#ifndef __UIMEASUREMENT_ACTION_REMOVEDISTANCE_HPP__
+#define __UIMEASUREMENT_ACTION_REMOVEDISTANCE_HPP__
+
+#include "uiMeasurement/config.hpp"
 
 #include <fwData/Image.hpp>
+#include <fwData/PointList.hpp>
 
 #include <fwGui/IActionSrv.hpp>
 
-#include "uiMeasurement/config.hpp"
-
 
 namespace uiMeasurement
 {
@@ -23,17 +24,15 @@ namespace action
 /**
  * @brief   This action removes distances.
  * @class   RemoveDistance
- * 
- * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API RemoveDistance : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (RemoveDistance)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (RemoveDistance)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API RemoveDistance() throw() ;
+    UIMEASUREMENT_API RemoveDistance() throw();
 
-    UIMEASUREMENT_API virtual ~RemoveDistance() throw() ;
+    UIMEASUREMENT_API virtual ~RemoveDistance() throw();
 
 protected:
 
@@ -43,20 +42,18 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void info(std::ostream &_sstream ) ;
+    UIMEASUREMENT_API void info(std::ostream &_sstream );
 
 private:
-    void notifyNewDistance(::fwData::Image::sptr image, ::fwData::Object::sptr backup);
+    void notifyNewDistance(::fwData::Image::sptr image, ::fwData::PointList::sptr distance);
 
-    void notifyDeleteDistance(::fwData::Image::sptr image, ::fwData::Object::sptr distance);
+    void notifyDeleteDistance(::fwData::Image::sptr image, ::fwData::PointList::sptr distance);
 };
 
 } // namespace action
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_REMOVEDISTANCE_HPP_
+#endif // __UIMEASUREMENT_ACTION_REMOVEDISTANCE_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveLandmark.hpp
index 9514896..4de5270 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/RemoveLandmark.hpp
@@ -1,13 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_REMOVELANDMARK_HPP_
-#define _UIMEASUREMENT_ACTION_REMOVELANDMARK_HPP_
+#ifndef __UIMEASUREMENT_ACTION_REMOVELANDMARK_HPP__
+#define __UIMEASUREMENT_ACTION_REMOVELANDMARK_HPP__
 
 #include <fwData/Image.hpp>
+#include <fwData/Point.hpp>
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -23,17 +24,17 @@ namespace action
 /**
  * @brief   This action removes landmarks.
  * @class   RemoveLandmark
- * 
+ *
  * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API RemoveLandmark : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (RemoveLandmark)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (RemoveLandmark)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API RemoveLandmark() throw() ;
+    UIMEASUREMENT_API RemoveLandmark() throw();
 
-    UIMEASUREMENT_API virtual ~RemoveLandmark() throw() ;
+    UIMEASUREMENT_API virtual ~RemoveLandmark() throw();
 
 protected:
 
@@ -44,14 +45,12 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    void info(std::ostream &_sstream ) ;
+    void info(std::ostream &_sstream );
 
 private:
-    void notify( ::fwData::Image::sptr image, ::fwData::Object::sptr backup );
+    void notify( ::fwData::Image::sptr image, ::fwData::Point::sptr backup );
 
     ::fwData::Point::sptr  getLandmarkToRemove(::fwData::Image::sptr image, bool &removeAll);
 };
@@ -60,4 +59,4 @@ private:
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_REMOVELANDMARK_HPP_
+#endif // __UIMEASUREMENT_ACTION_REMOVELANDMARK_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SAddLabeledPoint.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SAddLabeledPoint.hpp
index 8b60f45..d67f133 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SAddLabeledPoint.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SAddLabeledPoint.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_SADDLABELEDPOINT_HPP_
-#define _UIMEASUREMENT_ACTION_SADDLABELEDPOINT_HPP_
+#ifndef __UIMEASUREMENT_ACTION_SADDLABELEDPOINT_HPP__
+#define __UIMEASUREMENT_ACTION_SADDLABELEDPOINT_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -19,19 +19,17 @@ namespace action
 /**
  * @brief   This action adds landmaks on image.
  * @class   SAddLabeledPoint
- * 
- * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API SAddLabeledPoint : public ::fwGui::IActionSrv
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SAddLabeledPoint)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SAddLabeledPoint)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API SAddLabeledPoint() throw() ;
+    UIMEASUREMENT_API SAddLabeledPoint() throw();
 
-    UIMEASUREMENT_API virtual ~SAddLabeledPoint() throw() ;
+    UIMEASUREMENT_API virtual ~SAddLabeledPoint() throw();
 
 protected:
 
@@ -42,11 +40,9 @@ protected:
 
     UIMEASUREMENT_API void updating() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     UIMEASUREMENT_API void stopping() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void info(std::ostream &_sstream ) ;
+    UIMEASUREMENT_API void info(std::ostream &_sstream );
 
 private:
 
@@ -61,4 +57,4 @@ private:
 } // namespace action
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_SADDLABELEDPOINT_HPP_
+#endif // __UIMEASUREMENT_ACTION_SADDLABELEDPOINT_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp
index b47d71f..a85dc25 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/SaveLandmark.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_UI_ACTION_SAVELANDMARK_HPP_
-#define _UIMEASUREMENT_UI_ACTION_SAVELANDMARK_HPP_
+#ifndef __UIMEASUREMENT_ACTION_SAVELANDMARK_HPP__
+#define __UIMEASUREMENT_ACTION_SAVELANDMARK_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 
@@ -16,14 +16,17 @@ namespace uiMeasurement
 namespace action
 {
 
+/**
+ * @brief Save landmark store in image on the filesystem
+ */
 class UIMEASUREMENT_CLASS_API SaveLandmark : public ::fwGui::IActionSrv
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SaveLandmark)( ::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SaveLandmark)( ::fwGui::IActionSrv) );
 
-    UIMEASUREMENT_API SaveLandmark() throw() ;
+    UIMEASUREMENT_API SaveLandmark() throw();
 
-    UIMEASUREMENT_API virtual ~SaveLandmark() throw() ;
+    UIMEASUREMENT_API virtual ~SaveLandmark() throw();
 
 protected:
 
@@ -33,11 +36,9 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    void info(std::ostream &_sstream ) ;
+    void info(std::ostream &_sstream );
 
     void save(const ::boost::filesystem::path& path);
 
@@ -47,4 +48,4 @@ protected:
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_UI_ACTION_SAVELANDMARK_HPP_
+#endif // __UIMEASUREMENT_ACTION_SAVELANDMARK_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowDistance.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowDistance.hpp
index 1f409a2..398d9fc 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowDistance.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowDistance.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_SHOWDISTANCE_HPP_
-#define _UIMEASUREMENT_ACTION_SHOWDISTANCE_HPP_
+#ifndef __UIMEASUREMENT_ACTION_SHOWDISTANCE_HPP__
+#define __UIMEASUREMENT_ACTION_SHOWDISTANCE_HPP__
 
 #include <fwGui/IActionSrv.hpp>
 #include <fwData/Image.hpp>
@@ -18,26 +18,36 @@ namespace action
 
 /**
  * @brief   This action allows to show/hide image distances.
- * @class   ShowDistance
- * 
- * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API ShowDistance : public ::fwGui::IActionSrv
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ShowDistance)( ::fwGui::IActionSrv) ) ;
-
-    UIMEASUREMENT_API ShowDistance() throw() ;
-
-    UIMEASUREMENT_API virtual ~ShowDistance() throw() ;
-
+    fwCoreServiceClassDefinitionsMacro ( (ShowDistance)( ::fwGui::IActionSrv) );
+
+    UIMEASUREMENT_API ShowDistance() throw();
+
+    UIMEASUREMENT_API virtual ~ShowDistance() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_DISTANCE_DISPLAYED_SIG to this::s_SHOW_DISTANCE_SLOT
+     */
+    UIMEASUREMENT_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_DISTANCE_DISPLAYED_SIG to this::s_SHOW_DISTANCE_SLOT
+     */
+    UIMEASUREMENT_API virtual KeyConnectionsMap getAutoConnections() const;
 protected:
 
-    // update its show/hide flag according image ShowDistance field notification
-    UIMEASUREMENT_API void receiving(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed);
 
-    UIMEASUREMENT_API void swapping() throw(::fwTools::Failed) ;
+    void swapping() throw(::fwTools::Failed);
 
     void configuring() throw (::fwTools::Failed);
 
@@ -47,12 +57,13 @@ protected:
 
     void stopping() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void info(std::ostream &_sstream ) ;
+    void info(std::ostream &_sstream );
 
 
-protected :
+private:
 
-    ::fwData::Image::wptr m_observedImage;
+    /// Slot: show/hide distance
+    void showDistance(bool isShown);
 
 };
 
@@ -60,4 +71,4 @@ protected :
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_SHOWDISTANCE_HPP_
+#endif // __UIMEASUREMENT_ACTION_SHOWDISTANCE_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowLandmark.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowLandmark.hpp
index e0f0208..0de47dc 100644
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowLandmark.hpp
+++ b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/action/ShowLandmark.hpp
@@ -1,16 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENT_ACTION_SHOWLANDMARK_HPP_
-#define _UIMEASUREMENT_ACTION_SHOWLANDMARK_HPP_
+#ifndef __UIMEASUREMENT_ACTION_SHOWLANDMARK_HPP__
+#define __UIMEASUREMENT_ACTION_SHOWLANDMARK_HPP__
 
-#include <fwGui/IActionSrv.hpp>
-#include <fwData/Image.hpp>
 #include "uiMeasurement/config.hpp"
 
+#include <fwData/Image.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
 namespace uiMeasurement
 {
 namespace action
@@ -18,20 +20,32 @@ namespace action
 
 /**
  * @brief   This action allows to show/hide image landmarks.
- * @class   ShowLandmark
- * 
- * @date    2010.
  */
 class UIMEASUREMENT_CLASS_API ShowLandmark : public ::fwGui::IActionSrv
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ShowLandmark)( ::fwGui::IActionSrv) ) ;
-
-    UIMEASUREMENT_API ShowLandmark() throw() ;
-
-    UIMEASUREMENT_API virtual ~ShowLandmark() throw() ;
-
+    fwCoreServiceClassDefinitionsMacro ( (ShowLandmark)( ::fwGui::IActionSrv) );
+
+    UIMEASUREMENT_API ShowLandmark() throw();
+
+    UIMEASUREMENT_API virtual ~ShowLandmark() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_LANDMARK_DISPLAYED_SIG to this::s_SHOW_LANDMARK_SLOT
+     */
+    UIMEASUREMENT_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_LANDMARK_DISPLAYED_SIG to this::s_SHOW_LANDMARK_SLOT
+     */
+    UIMEASUREMENT_API virtual ::fwServices::IService::KeyConnectionsMap getAutoConnections() const;
 protected:
 
     void configuring() throw (::fwTools::Failed);
@@ -40,16 +54,15 @@ protected:
 
     void updating() throw (::fwTools::Failed);
 
-    void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed) ;
-
     void stopping() throw (::fwTools::Failed);
 
-    UIMEASUREMENT_API void swapping() throw(::fwTools::Failed) ;
-    UIMEASUREMENT_API void info(std::ostream &_sstream ) ;
+    UIMEASUREMENT_API void swapping() throw(::fwTools::Failed);
+    UIMEASUREMENT_API void info(std::ostream &_sstream );
 
-protected :
+private:
 
-    ::fwData::Image::wptr m_observedImage;
+    /// Slot: show/hide landmark
+    void showLandmark(bool isShown);
 
 };
 
@@ -57,4 +70,4 @@ protected :
 
 } // namespace uiMeasurement
 
-#endif // _UIMEASUREMENT_ACTION_SHOWLANDMARK_HPP_
+#endif // __UIMEASUREMENT_ACTION_SHOWLANDMARK_HPP__
diff --git a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/config.hpp b/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/config.hpp
deleted file mode 100644
index a8da7b1..0000000
--- a/Bundles/LeafUI/uiMeasurement/include/uiMeasurement/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIMEASUREMENT_CONFIG_HPP_
-#define _UIMEASUREMENT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIMEASUREMENT_EXPORTS
-    #define UIMEASUREMENT_API __declspec(dllexport)
-    #else
-    #define UIMEASUREMENT_API __declspec(dllimport)
-    #endif
-
-    #define UIMEASUREMENT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIMEASUREMENT_EXPORTS
-    #define UIMEASUREMENT_API __attribute__ ((visibility("default")))
-    #define UIMEASUREMENT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIMEASUREMENT_API __attribute__ ((visibility("hidden")))
-    #define UIMEASUREMENT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIMEASUREMENT_API
-    #define UIMEASUREMENT_CLASS_API
-
-#endif
-
-#endif //_UIMEASUREMENT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiMeasurement/rc/plugin.xml b/Bundles/LeafUI/uiMeasurement/rc/plugin.xml
index e2c4f39..410935d 100644
--- a/Bundles/LeafUI/uiMeasurement/rc/plugin.xml
+++ b/Bundles/LeafUI/uiMeasurement/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiMeasurement" class="::uiMeasurement::Plugin">
+<plugin id="uiMeasurement" class="::uiMeasurement::Plugin" version="@DASH_VERSION@" >
     <library name="uiMeasurement"/>
     
     <requirement id="dataReg"/>
@@ -69,7 +69,6 @@
     
      <extension implements="::fwServices::registry::AppConfig">
         <id>LoadLandmark</id>
-        <type>parameters</type>
         <parameters>
             <param name="GENERIC_UID" />
             <param name="landmark" />
@@ -89,7 +88,6 @@
     
     <extension implements="::fwServices::registry::AppConfig">
         <id>SaveLandmark</id>
-        <type>parameters</type>
         <parameters>
             <param name="GENERIC_UID" />
             <param name="landmark" />
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/Plugin.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/Plugin.cpp
index 51df4be..165c977 100755
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/Plugin.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace uiMeasurement
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiMeasurement::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace operators
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddDistance.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddDistance.cpp
index 1e77d2a..a511b67 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddDistance.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddDistance.cpp
@@ -1,54 +1,55 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
+#include "uiMeasurement/action/AddDistance.hpp"
 
-#include <exception>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwData/Vector.hpp>
 #include <fwData/Boolean.hpp>
+#include <fwData/Image.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
-#include <fwData/Boolean.hpp>
-#include <fwData/Image.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwServices/macros.hpp>
 
+#include <exception>
 
-#include "uiMeasurement/action/AddDistance.hpp"
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::AddDistance , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::AddDistance, ::fwData::Image );
 
 
 //------------------------------------------------------------------------------
 
 
-AddDistance::AddDistance( ) throw():
+AddDistance::AddDistance( ) throw() :
     m_actionCheckId(-1)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 AddDistance::~AddDistance() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void AddDistance::info(std::ostream &_sstream )
+void AddDistance::info(std::ostream& _sstream )
 {
     _sstream << "Action for remove distance" << std::endl;
 }
@@ -59,7 +60,10 @@ void AddDistance::updating() throw(::fwTools::Failed)
 {
     SLM_TRACE("AddDistance::updating");
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    if (!image) {return; }
+    if (!image)
+    {
+        return;
+    }
 
     ::fwData::Point::sptr pt1 = ::fwData::Point::New();
     std::copy( image->getOrigin().begin(),  image->getOrigin().begin() +3, pt1->getRefCoord().begin() );
@@ -68,13 +72,13 @@ void AddDistance::updating() throw(::fwTools::Failed)
     std::copy( image->getSize().begin(),  image->getSize().begin() +3, pt2->getRefCoord().begin() );
 
     std::transform( pt2->getRefCoord().begin(),pt2->getRefCoord().end(),
-            image->getSpacing().begin(),
-            pt2->getRefCoord().begin(),
-            std::multiplies<double>() );
+                    image->getSpacing().begin(),
+                    pt2->getRefCoord().begin(),
+                    std::multiplies<double>() );
     std::transform( pt2->getRefCoord().begin(),pt2->getRefCoord().end(),
-            image->getOrigin().begin(),
-            pt2->getRefCoord().begin(),
-            std::plus<double>() );
+                    image->getOrigin().begin(),
+                    pt2->getRefCoord().begin(),
+                    std::plus<double>() );
 
     ::fwData::PointList::sptr pl = ::fwData::PointList::New();
 
@@ -82,17 +86,15 @@ void AddDistance::updating() throw(::fwTools::Failed)
     pl->getRefPoints().push_back( pt2 );
 
     ::fwData::Vector::sptr vectDist;
-    vectDist = image->setDefaultField(::fwComEd::Dictionary::m_imageDistancesId, ::fwData::Vector::New());
+    vectDist = image->setDefaultField(::fwDataTools::fieldHelper::Image::m_imageDistancesId, ::fwData::Vector::New());
 
     vectDist->getContainer().push_back(pl);
 
     // force distance to be shown
     image->setField("ShowDistances",  ::fwData::Boolean::New(true));
 
-
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::DISTANCE );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    auto sig = image->signal< ::fwData::Image::DistanceAddedSignalType >(::fwData::Image::s_DISTANCE_ADDED_SIG);
+    sig->asyncEmit(pl);
 }
 
 //------------------------------------------------------------------------------
@@ -111,11 +113,6 @@ void AddDistance::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void AddDistance::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void AddDistance::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddLandmark.cpp
index 77a4564..a8ce197 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/AddLandmark.cpp
@@ -1,54 +1,56 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
+#include "uiMeasurement/action/AddLandmark.hpp"
 
-#include <exception>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCore/base.hpp>
 
+#include <fwData/Boolean.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/String.hpp>
-#include <fwData/Boolean.hpp>
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/InputDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include "uiMeasurement/action/AddLandmark.hpp"
+#include <fwServices/macros.hpp>
+
+#include <exception>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::AddLandmark , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::AddLandmark, ::fwData::Image );
 
 
 //------------------------------------------------------------------------------
 
 
 AddLandmark::AddLandmark( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 AddLandmark::~AddLandmark() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void AddLandmark::info(std::ostream &_sstream )
+void AddLandmark::info(std::ostream& _sstream )
 {
     _sstream << "Action for remove distance" << std::endl;
 }
@@ -56,9 +58,9 @@ void AddLandmark::info(std::ostream &_sstream )
 //------------------------------------------------------------------------------
 
 // return true if label setting is NOT Canceled , name is modified !!!
-bool defineLabel(std::string &name)
+bool defineLabel(std::string& name)
 {
-    bool res = false;
+    bool res         = false;
     static int count = 1;
     name = "Label" + ::boost::lexical_cast< std::string >(count );
 
@@ -75,7 +77,7 @@ bool defineLabel(std::string &name)
         count++; // reset count if operation canceled
         res = true;
     }
-    return res ;
+    return res;
 }
 
 
@@ -84,13 +86,21 @@ bool defineLabel(std::string &name)
 void AddLandmark::updating() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    if (!::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    ::fwData::Image::sptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInOut< ::fwData::Image >("image");
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }
+    if (!::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Add landmarks",
-                "Sorry, it is impossible to add image landmarks. There is not loaded image in the software.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Add landmarks",
+            "It is impossible to add image landmarks. There is no loaded image in the software.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
         return;
     }
 
@@ -98,35 +108,35 @@ void AddLandmark::updating() throw(::fwTools::Failed)
     if ( defineLabel(value) )
     {
         //get landmarks
-        ::fwComEd::fieldHelper::MedicalImageHelpers::checkLandmarks(  image );
-        ::fwData::PointList::sptr landmarks =  image->getField< ::fwData::PointList >( ::fwComEd::Dictionary::m_imageLandmarksId);
+        ::fwDataTools::fieldHelper::MedicalImageHelpers::checkLandmarks(  image );
+        ::fwData::PointList::sptr landmarks = image->getField< ::fwData::PointList >(
+            ::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
         SLM_ASSERT("landmarks not instanced", landmarks);
 
         // create a new point
-        ::fwData::Point::sptr newPoint = ::fwComEd::fieldHelper::MedicalImageHelpers::getImageSliceIndices( image );
+        ::fwData::Point::sptr newPoint = ::fwDataTools::fieldHelper::MedicalImageHelpers::getImageSliceIndices( image );
         // transform slice to mm
         std::transform( newPoint->getRefCoord().begin(),newPoint->getRefCoord().end(),
-                image->getSpacing().begin(),
-                newPoint->getRefCoord().begin(),
-                std::multiplies<double>() );
+                        image->getSpacing().begin(),
+                        newPoint->getRefCoord().begin(),
+                        std::multiplies<double>() );
         std::transform( newPoint->getRefCoord().begin(),newPoint->getRefCoord().end(),
-                image->getOrigin().begin(),
-                newPoint->getRefCoord().begin(),
-                std::plus<double>() );
+                        image->getOrigin().begin(),
+                        newPoint->getRefCoord().begin(),
+                        std::plus<double>() );
         // append to landmark
         landmarks->getRefPoints().push_back( newPoint );
 
         // append to point the label
         ::fwData::String::sptr label = ::fwData::String::New();
-        label->value() = value;
-        newPoint->setField( ::fwComEd::Dictionary::m_labelId , label );
+        label->value()               = value;
+        newPoint->setField( ::fwDataTools::fieldHelper::Image::m_labelId, label );
 
         image->setField("ShowLandmarks", ::fwData::Boolean::New(true));
 
         // notify
-        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-        msg->addEvent( ::fwComEd::ImageMsg::LANDMARK );
-        ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+        auto sig = image->signal< ::fwData::Image::LandmarkAddedSignalType >(::fwData::Image::s_LANDMARK_ADDED_SIG);
+        sig->asyncEmit(newPoint);
     }
 }
 
@@ -146,11 +156,6 @@ void AddLandmark::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void AddLandmark::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void AddLandmark::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/FocusLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/FocusLandmark.cpp
index e8cdd65..76bbf33 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/FocusLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/FocusLandmark.cpp
@@ -1,48 +1,48 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "uiMeasurement/action/FocusLandmark.hpp"
 
-#include <fwCore/base.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCore/base.hpp>
 
+#include <fwData/Integer.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/String.hpp>
-#include <fwData/Integer.hpp>
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwGui/dialog/SelectorDialog.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
 
-#include "uiMeasurement/action/FocusLandmark.hpp"
+#include <fwServices/macros.hpp>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::FocusLandmark , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::FocusLandmark, ::fwData::Image );
 
 //------------------------------------------------------------------------------
 
 FocusLandmark::FocusLandmark( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 FocusLandmark::~FocusLandmark() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -67,15 +67,7 @@ void FocusLandmark::configuring() throw ( ::fwTools::Failed )
 
 //------------------------------------------------------------------------------
 
-void FocusLandmark::receiving( fwServices::ObjectMsg::csptr _pMsg ) throw ( ::fwTools::Failed )
-{
-    // Do nothing. this method must be not used.
-    SLM_FATAL("Action should not receive a message, correct your configuration");
-}
-
-//------------------------------------------------------------------------------
-
-void FocusLandmark::info(std::ostream &_sstream )
+void FocusLandmark::info(std::ostream& _sstream )
 {
     _sstream << "Action for focus a landmark distance" << std::endl;
 }
@@ -87,11 +79,12 @@ void FocusLandmark::updating() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
 
     ::fwData::Image::sptr pImage = this->getObject< ::fwData::Image >();
-    if (!::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(pImage))
+    if (!::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(pImage))
     {
         ::fwGui::dialog::MessageDialog messageBox;
         messageBox.setTitle("Add landmarks");
-        messageBox.setMessage( "Sorry, it is impossible to add image landmarks. There is not loaded image in the software." );
+        messageBox.setMessage(
+            "It is impossible to add image landmarks. There is no loaded image in the software." );
         messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
         messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
         messageBox.show();
@@ -101,16 +94,18 @@ void FocusLandmark::updating() throw(::fwTools::Failed)
     else // Image is defined
     {
         // get landmarks
-        namespace ns = ::fwComEd::fieldHelper;
+        namespace ns = ::fwDataTools::fieldHelper;
         ns::MedicalImageHelpers::checkLandmarks(  pImage );
-        ::fwData::PointList::sptr landmarks =  pImage->getField< ::fwData::PointList >( ::fwComEd::Dictionary::m_imageLandmarksId);
+        ::fwData::PointList::sptr landmarks = pImage->getField< ::fwData::PointList >(
+            ::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
         SLM_ASSERT("landmarks not instanced", landmarks);
 
         if( landmarks->getCRefPoints().empty() )
         {
             ::fwGui::dialog::MessageDialog messageBox;
             messageBox.setTitle("Focus landmarks");
-            messageBox.setMessage( "Sorry, it is impossible to focus image landmarks. There are not defined landmarks for this selected image." );
+            messageBox.setMessage(
+                "It is impossible to focus image landmarks. There are no defined landmarks for this selected image." );
             messageBox.setIcon(::fwGui::dialog::IMessageDialog::WARNING);
             messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
             messageBox.show();
@@ -122,9 +117,10 @@ void FocusLandmark::updating() throw(::fwTools::Failed)
             std::map< std::string, ::fwData::Point::sptr > name2Point;
 
             ::fwData::PointList::PointListContainer points = landmarks->getCRefPoints();
-            BOOST_FOREACH(::fwData::Point::sptr point, points)
+            for(::fwData::Point::sptr point :  points)
             {
-                std::string name =  point->getField< ::fwData::String >( ::fwComEd::Dictionary::m_labelId )->value();
+                std::string name =
+                    point->getField< ::fwData::String >( ::fwDataTools::fieldHelper::Image::m_labelId )->value();
                 OSLM_DEBUG( "Point name " << name );
                 names.push_back( name );
                 name2Point[name] = point;
@@ -135,37 +131,44 @@ void FocusLandmark::updating() throw(::fwTools::Failed)
             selector->setTitle("Select a landmark");
             selector->setSelections(names);
             std::string selection = selector->show();
-            if( ! selection.empty() )
+            if( !selection.empty() )
             {
                 ::fwData::Point::sptr selectedPoint = name2Point[ selection ];
                 SLM_ASSERT("selectedPoint not instanced", selectedPoint);
                 ::fwData::Integer::sptr paramA = ::fwData::Integer::New();
-                paramA->value() = static_cast<int>((selectedPoint->getRefCoord()[2] - pImage->getOrigin()[2] )/  pImage->getSpacing()[2] +0.5);
+                paramA->value()                =
+                    static_cast<int>((selectedPoint->getRefCoord()[2] - pImage->getOrigin()[2] )/
+                                     pImage->getSpacing()[2] +0.5);
                 ::fwData::Integer::sptr paramF = ::fwData::Integer::New();
-                paramF->value() = static_cast<int>((selectedPoint->getRefCoord()[1] -  pImage->getOrigin()[1])/  pImage->getSpacing()[1] +0.5);
+                paramF->value()                =
+                    static_cast<int>((selectedPoint->getRefCoord()[1] -  pImage->getOrigin()[1])/
+                                     pImage->getSpacing()[1] +0.5);
                 ::fwData::Integer::sptr paramS = ::fwData::Integer::New();
-                paramS->value() = static_cast<int>((selectedPoint->getRefCoord()[0] -  pImage->getOrigin()[0])/  pImage->getSpacing()[0] +0.5);
+                paramS->value()                =
+                    static_cast<int>((selectedPoint->getRefCoord()[0] -  pImage->getOrigin()[0])/
+                                     pImage->getSpacing()[0] +0.5);
                 if( paramS->value() >= 0 &&
-                        paramF->value() >= 0 &&
-                        paramA->value() >= 0 &&
-                        pImage->getSize()[0] > paramS->value() &&
-                        pImage->getSize()[1] > paramF->value() &&
-                        pImage->getSize()[2] > paramA->value() )
+                    paramF->value() >= 0 &&
+                    paramA->value() >= 0 &&
+                    pImage->getSize()[0] > paramS->value() &&
+                    pImage->getSize()[1] > paramF->value() &&
+                    pImage->getSize()[2] > paramA->value() )
                 {
-                    pImage->setField( ::fwComEd::Dictionary::m_axialSliceIndexId, paramA );
-                    pImage->setField( ::fwComEd::Dictionary::m_frontalSliceIndexId, paramF );
-                    pImage->setField( ::fwComEd::Dictionary::m_sagittalSliceIndexId, paramS );
+                    pImage->setField( ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, paramA );
+                    pImage->setField( ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, paramF );
+                    pImage->setField( ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, paramS );
 
                     // notify
-                    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-                    msg->setSliceIndex( paramA, paramF, paramS );
-                    ::fwServices::IEditionService::notify(this->getSptr(), pImage, msg);
+                    auto sig = pImage->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+                        ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+                    sig->asyncEmit(paramA->value(), paramF->value(), paramS->value());
                 }
                 else
                 {
                     ::fwGui::dialog::MessageDialog::showMessageDialog("Focus landmarks",
-                            "Sorry, it is impossible to focus image landmarks: landmark outside image.",
-                            ::fwGui::dialog::IMessageDialog::WARNING);
+                                                                      "It is impossible to focus image landmarks: "
+                                                                      "landmark is outside image.",
+                                                                      ::fwGui::dialog::IMessageDialog::WARNING);
                 }
             }
         }
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp
index f44b66f..9e6c100 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/LoadLandmark.cpp
@@ -1,60 +1,57 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vector>
-#include <exception>
-#include <boost/foreach.hpp>
+#include "uiMeasurement/action/LoadLandmark.hpp"
 
 #include <fwCore/base.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/registry/ServiceConfig.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-#include <fwServices/AppConfigManager.hpp>
-
-#include <fwData/String.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include "uiMeasurement/action/LoadLandmark.hpp"
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+#include <exception>
+#include <vector>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::LoadLandmark , ::fwData::Image) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::LoadLandmark, ::fwData::Image);
 
 
 //------------------------------------------------------------------------------
 
 
 LoadLandmark::LoadLandmark( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 LoadLandmark::~LoadLandmark() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void LoadLandmark::info(std::ostream &_sstream )
+void LoadLandmark::info(std::ostream& _sstream )
 {
     _sstream << "Action for load landmarks" << std::endl;
 }
@@ -64,13 +61,13 @@ void LoadLandmark::info(std::ostream &_sstream )
 void LoadLandmark::updating() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwData::Image::sptr image =  this->getObject< ::fwData::Image >();
-    if (!::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    if (!::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Load landmarks",
-                "Sorry, it is impossible to load image landmarks. There is not loaded image in the software.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Load landmarks",
+            "It is impossible to load image landmarks. There is no loaded image in the software.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
         return;
     }
     static ::boost::filesystem::path _sDefaultPath("");
@@ -80,21 +77,20 @@ void LoadLandmark::updating() throw(::fwTools::Failed)
     dialogFile.addFilter("Landmark file","*.json");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::READ);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
 
     if( result )
     {
         ::boost::filesystem::path path = result->getPath();
-        _sDefaultPath = path.parent_path();
+        _sDefaultPath                  = path.parent_path();
         dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
 
         this->load(path);
 
         // notify
-        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-        msg->addEvent( ::fwComEd::ImageMsg::LANDMARK );
-        ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+        auto sig = image->signal< ::fwData::Image::LandmarkAddedSignalType >(::fwData::Image::s_LANDMARK_ADDED_SIG);
+        sig->asyncEmit(::fwData::Point::sptr());
     }
 }
 
@@ -114,11 +110,6 @@ void LoadLandmark::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void LoadLandmark::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void LoadLandmark::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
@@ -128,29 +119,30 @@ void LoadLandmark::stopping() throw (::fwTools::Failed)
 
 void LoadLandmark::load(const ::boost::filesystem::path& path)
 {
-    ::fwData::Image::sptr image =  this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     //get landmarks
-    ::fwComEd::fieldHelper::MedicalImageHelpers::checkLandmarks(  image );
-    ::fwData::PointList::sptr landmarks =  image->getField< ::fwData::PointList >( ::fwComEd::Dictionary::m_imageLandmarksId);
+    ::fwDataTools::fieldHelper::MedicalImageHelpers::checkLandmarks(  image );
+    ::fwData::PointList::sptr landmarks = image->getField< ::fwData::PointList >(
+        ::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
     SLM_ASSERT("landmarks not instanced", landmarks);
 
     ::fwData::PointList::sptr newLandmarks = ::fwData::PointList::New();
-    ::fwData::Composite::sptr replaceMap = ::fwData::Composite::New();
-    (*replaceMap)["GENERIC_UID"] = ::fwData::String::New(
-            ::fwServices::registry::AppConfig::getUniqueIdentifier("LoadLandmarkApp")
-    );
-    (*replaceMap)["landmark"] = ::fwData::String::New(newLandmarks->getID());
-    (*replaceMap)["file"] = ::fwData::String::New(path.string());
+    ::fwData::Composite::sptr replaceMap   = ::fwData::Composite::New();
+    (*replaceMap)["GENERIC_UID"]           = ::fwData::String::New(
+        ::fwServices::registry::AppConfig::getUniqueIdentifier("LoadLandmarkApp")
+        );
+    (*replaceMap)["landmark"]                       = ::fwData::String::New(newLandmarks->getID());
+    (*replaceMap)["file"]                           = ::fwData::String::New(path.string());
     ::fwRuntime::ConfigurationElement::csptr config =
         ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig("LoadLandmark", replaceMap);
 
-    ::fwServices::AppConfigManager::sptr helper = ::fwServices::AppConfigManager::New();
+    ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
     helper->setConfig( config );
     helper->launch();
     helper->stopAndDestroy();
 
-    BOOST_FOREACH(::fwData::Point::sptr landmark, newLandmarks->getCRefPoints())
+    for(::fwData::Point::sptr landmark :  newLandmarks->getCRefPoints())
     {
         landmarks->getRefPoints().push_back( landmark );
     }
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveDistance.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveDistance.cpp
index dbefb06..36254a5 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveDistance.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveDistance.cpp
@@ -1,53 +1,52 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <sstream>
-#include <exception>
-#include <boost/lexical_cast.hpp>
+#include "uiMeasurement/action/RemoveDistance.hpp"
 
 #include <fwCore/base.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/macros.hpp>
-
 #include <fwData/Image.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/Vector.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
 #include <fwGui/dialog/SelectorDialog.hpp>
 
-#include "uiMeasurement/action/RemoveDistance.hpp"
+#include <fwServices/macros.hpp>
+
+#include <boost/lexical_cast.hpp>
+
+#include <exception>
+#include <sstream>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::RemoveDistance , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::RemoveDistance, ::fwData::Image );
 
 //------------------------------------------------------------------------------
 
 RemoveDistance::RemoveDistance( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 RemoveDistance::~RemoveDistance() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void RemoveDistance::info(std::ostream &_sstream )
+void RemoveDistance::info(std::ostream& _sstream )
 {
     _sstream << "Action for remove distance" << std::endl;
 }
@@ -63,35 +62,38 @@ std::string distanceToStr(double dist)
 
 //------------------------------------------------------------------------------
 
-::fwData::PointList::sptr  getDistanceToRemove(::fwData::Image::sptr image, bool &removeAll)
+::fwData::PointList::sptr  getDistanceToRemove(::fwData::Image::sptr image, bool& removeAll)
 {
     ::fwData::PointList::sptr distToRemove;
     removeAll = false;
     ::fwData::Vector::sptr vectDist;
-    vectDist = image->getField< ::fwData::Vector >(::fwComEd::Dictionary::m_imageDistancesId);
+    vectDist = image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
 
     if(vectDist)
     {
         std::vector< std::string > selections;
         selections.push_back("ALL");
-        std::map< std::string , ::fwData::PointList::sptr > correspondance;
+        std::map< std::string, ::fwData::PointList::sptr > correspondance;
 
-        BOOST_FOREACH(::fwData::Object::sptr obj, *vectDist)
+        for(::fwData::Object::sptr obj :  *vectDist)
         {
             ::fwData::PointList::sptr pl = ::fwData::PointList::dynamicCast(obj);
 
-            if ( pl->getPoints().size()!=2 ) { continue; } // we skip no paired pointList
-            ::fwData::Point::sptr pt1 =  pl->getPoints().front();
-            ::fwData::Point::sptr pt2 =  pl->getPoints().back();
+            if ( pl->getPoints().size()!=2 )
+            {
+                continue;
+            }                                              // we skip no paired pointList
+            ::fwData::Point::sptr pt1 = pl->getPoints().front();
+            ::fwData::Point::sptr pt2 = pl->getPoints().back();
 
-            double dist=0;
+            double dist  = 0;
             double delta = pt1->getCRefCoord()[0] - pt2->getCRefCoord()[0];
             dist += delta*delta;
             delta = pt1->getCRefCoord()[1] - pt2->getCRefCoord()[1];
             dist += delta*delta;
             delta = pt1->getCRefCoord()[2] - pt2->getCRefCoord()[2];
             dist += delta*delta;
-            dist = sqrt(dist);
+            dist  = sqrt(dist);
 
             selections.push_back( distanceToStr(dist) );
             correspondance[ selections.back() ] = pl;
@@ -103,15 +105,15 @@ std::string distanceToStr(double dist)
             selector->setTitle("Select a distance to remove");
             selector->setSelections(selections);
             std::string selection = selector->show();
-            if( ! selection.empty() )
+            if( !selection.empty() )
             {
                 if (selection=="ALL")
                 {
-                    removeAll=true;
+                    removeAll = true;
                 }
                 else
                 {
-                    removeAll=false;
+                    removeAll    = false;
                     distToRemove = correspondance[selection];
                 }
             }
@@ -122,20 +124,18 @@ std::string distanceToStr(double dist)
 
 //------------------------------------------------------------------------------
 
-void RemoveDistance::notifyDeleteDistance(::fwData::Image::sptr image, ::fwData::Object::sptr distance)
+void RemoveDistance::notifyDeleteDistance(::fwData::Image::sptr image, ::fwData::PointList::sptr distance)
 {
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::DELETE_DISTANCE, distance );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    auto sig = image->signal< ::fwData::Image::DistanceRemovedSignalType >(::fwData::Image::s_DISTANCE_REMOVED_SIG);
+    sig->asyncEmit(distance);
 }
 
 //------------------------------------------------------------------------------
 
-void RemoveDistance::notifyNewDistance(::fwData::Image::sptr image, ::fwData::Object::sptr backup)
+void RemoveDistance::notifyNewDistance(::fwData::Image::sptr image, ::fwData::PointList::sptr distance)
 {
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::DISTANCE, backup );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    auto sig = image->signal< ::fwData::Image::DistanceAddedSignalType >(::fwData::Image::s_DISTANCE_ADDED_SIG);
+    sig->asyncEmit(distance);
 }
 
 //------------------------------------------------------------------------------
@@ -145,9 +145,9 @@ void RemoveDistance::updating( ) throw(::fwTools::Failed)
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     ::fwData::Vector::sptr vectDist;
-    vectDist = image->getField< ::fwData::Vector >(::fwComEd::Dictionary::m_imageDistancesId);
+    vectDist = image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
 
-    if (::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image)
+    if (::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image)
         && vectDist)
     {
         bool requestAll;
@@ -165,9 +165,10 @@ void RemoveDistance::updating( ) throw(::fwTools::Failed)
         if ( requestAll )
         {
             // backup
-            ::fwData::Object::sptr backupDistance = image->getField( ::fwComEd::Dictionary::m_imageDistancesId );
+            ::fwData::PointList::sptr backupDistance = image->getField< ::fwData::PointList >(
+                ::fwDataTools::fieldHelper::Image::m_imageDistancesId );
 
-            image->removeField( ::fwComEd::Dictionary::m_imageDistancesId );
+            image->removeField( ::fwDataTools::fieldHelper::Image::m_imageDistancesId );
             this->notifyNewDistance(image, backupDistance);
         }
     }
@@ -189,11 +190,6 @@ void RemoveDistance::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void RemoveDistance::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void RemoveDistance::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveLandmark.cpp
index c26b37e..d17eb92 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/RemoveLandmark.cpp
@@ -1,33 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <sstream>
-#include <boost/lexical_cast.hpp>
-#include <fwCore/base.hpp>
-
-#include <exception>
+#include "uiMeasurement/action/RemoveLandmark.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/macros.hpp>
+#include <fwCore/base.hpp>
 
 #include <fwData/Image.hpp>
-#include <fwData/String.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
 #include <fwData/Vector.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
 #include <fwGui/dialog/SelectorDialog.hpp>
 
-#include "uiMeasurement/action/RemoveLandmark.hpp"
+#include <fwServices/macros.hpp>
+
+#include <boost/lexical_cast.hpp>
+
+#include <exception>
+#include <sstream>
 
 
 namespace uiMeasurement
@@ -35,44 +32,48 @@ namespace uiMeasurement
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::RemoveLandmark , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::RemoveLandmark, ::fwData::Image );
 
 
 //------------------------------------------------------------------------------
 
 
 RemoveLandmark::RemoveLandmark( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 RemoveLandmark::~RemoveLandmark() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void RemoveLandmark::info(std::ostream &_sstream )
+void RemoveLandmark::info(std::ostream& _sstream )
 {
     _sstream << "Action for remove landmark" << std::endl;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Point::sptr  RemoveLandmark::getLandmarkToRemove(::fwData::Image::sptr image, bool &removeAll)
+::fwData::Point::sptr RemoveLandmark::getLandmarkToRemove(::fwData::Image::sptr image, bool& removeAll)
 {
     ::fwData::Point::sptr landmarkToRemove;
     removeAll = false;
 
-    ::fwData::PointList::sptr landmarksBackup = image->getField< ::fwData::PointList >( ::fwComEd::Dictionary::m_imageLandmarksId );
+    ::fwData::PointList::sptr landmarksBackup = image->getField< ::fwData::PointList >(
+        ::fwDataTools::fieldHelper::Image::m_imageLandmarksId );
     SLM_ASSERT("No Field ImageLandmarks", landmarksBackup);
 
     std::vector< std::string > selections;
     selections.push_back("ALL");
-    std::map< std::string , ::fwData::Point::sptr > correspondance;
+    std::map< std::string, ::fwData::Point::sptr > correspondance;
 
-    BOOST_FOREACH(::fwData::Point::sptr landmark, landmarksBackup->getRefPoints())
+    for(::fwData::Point::sptr landmark :  landmarksBackup->getRefPoints())
     {
-        ::fwData::String::sptr name = landmark->getField< ::fwData::String >(::fwComEd::Dictionary::m_labelId);
+        ::fwData::String::sptr name = landmark->getField< ::fwData::String >(
+            ::fwDataTools::fieldHelper::Image::m_labelId);
         SLM_ASSERT("No Field LabelId", name);
         selections.push_back( *name );
         correspondance[ *name ] = landmark;
@@ -82,15 +83,15 @@ void RemoveLandmark::info(std::ostream &_sstream )
     selector->setTitle("Select a landmark to remove");
     selector->setSelections(selections);
     std::string selection = selector->show();
-    if( ! selection.empty() )
+    if( !selection.empty() )
     {
         if (selection=="ALL")
         {
-            removeAll=true;
+            removeAll = true;
         }
         else
         {
-            removeAll=false;
+            removeAll        = false;
             landmarkToRemove = correspondance[selection];
         }
     }
@@ -100,11 +101,10 @@ void RemoveLandmark::info(std::ostream &_sstream )
 
 //------------------------------------------------------------------------------
 
-void RemoveLandmark::notify( ::fwData::Image::sptr image , ::fwData::Object::sptr backup)
+void RemoveLandmark::notify( ::fwData::Image::sptr image, ::fwData::Point::sptr backup)
 {
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::LANDMARK, backup );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    auto sig = image->signal< ::fwData::Image::LandmarkRemovedSignalType >(::fwData::Image::s_LANDMARK_REMOVED_SIG);
+    sig->asyncEmit(backup);
 }
 
 //------------------------------------------------------------------------------
@@ -113,10 +113,11 @@ void RemoveLandmark::updating( ) throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    ::fwData::PointList::sptr landmarks = image->getField< ::fwData::PointList >( ::fwComEd::Dictionary::m_imageLandmarksId );
+    ::fwData::Image::sptr image         = this->getObject< ::fwData::Image >();
+    ::fwData::PointList::sptr landmarks = image->getField< ::fwData::PointList >(
+        ::fwDataTools::fieldHelper::Image::m_imageLandmarksId );
 
-    if (::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image) && landmarks)
+    if (::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image) && landmarks)
     {
         if (!landmarks->getRefPoints().empty())
         {
@@ -138,8 +139,8 @@ void RemoveLandmark::updating( ) throw(::fwTools::Failed)
             if ( requestAll )
             {
                 // backup
-                image->removeField( ::fwComEd::Dictionary::m_imageLandmarksId ); // erase field
-                this->notify(image, landmarks);
+                image->removeField( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId ); // erase field
+                this->notify(image, landmarkToRemove);
             }
         }
     }
@@ -161,11 +162,6 @@ void RemoveLandmark::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void RemoveLandmark::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void RemoveLandmark::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SAddLabeledPoint.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SAddLabeledPoint.cpp
index 8c92873..dbc95a3 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SAddLabeledPoint.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SAddLabeledPoint.cpp
@@ -1,54 +1,56 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
+#include "uiMeasurement/action/SAddLabeledPoint.hpp"
 
-#include <exception>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCore/base.hpp>
 
+#include <fwData/Boolean.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/String.hpp>
-#include <fwData/Boolean.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/PointListMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/InputDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include "uiMeasurement/action/SAddLabeledPoint.hpp"
+#include <fwServices/macros.hpp>
+
+#include <exception>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::SAddLabeledPoint , ::fwData::PointList ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::SAddLabeledPoint, ::fwData::PointList );
 
 
 //------------------------------------------------------------------------------
 
 
 SAddLabeledPoint::SAddLabeledPoint( ) throw()
-         : m_count(1)
-{}
+    : m_count(1)
+{
+}
 
 //------------------------------------------------------------------------------
 
 SAddLabeledPoint::~SAddLabeledPoint() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void SAddLabeledPoint::info(std::ostream &_sstream )
+void SAddLabeledPoint::info(std::ostream& _sstream )
 {
     _sstream << "Action for remove distance" << std::endl;
 }
@@ -56,7 +58,7 @@ void SAddLabeledPoint::info(std::ostream &_sstream )
 //------------------------------------------------------------------------------
 
 // return true if label setting is NOT Canceled , name is modified !!!
-bool SAddLabeledPoint::defineLabel(std::string &name)
+bool SAddLabeledPoint::defineLabel(std::string& name)
 {
     bool res = false;
     name = "Label" + ::boost::lexical_cast< std::string >(m_count);
@@ -74,7 +76,7 @@ bool SAddLabeledPoint::defineLabel(std::string &name)
         m_count++;
         res = true;
     }
-    return res ;
+    return res;
 }
 
 
@@ -97,13 +99,16 @@ void SAddLabeledPoint::updating() throw(::fwTools::Failed)
 
         // append to point the label
         ::fwData::String::sptr label = ::fwData::String::New();
-        label->value() = value;
-        newPoint->setField( ::fwComEd::Dictionary::m_labelId , label );
+        label->value()               = value;
+        newPoint->setField( ::fwDataTools::fieldHelper::Image::m_labelId, label );
 
         // notify
-        ::fwComEd::PointListMsg::sptr msgPointList = ::fwComEd::PointListMsg::New();
-        msgPointList->addEvent( ::fwComEd::PointListMsg::ELEMENT_ADDED, newPoint );
-        ::fwServices::IEditionService::notify( this->getSptr(), landmarks, msgPointList);
+        auto sig =
+            landmarks->signal< ::fwData::PointList::PointAddedSignalType >(::fwData::PointList::s_POINT_ADDED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit(newPoint);
+        }
     }
 }
 
@@ -123,11 +128,6 @@ void SAddLabeledPoint::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SAddLabeledPoint::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void SAddLabeledPoint::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp
index c452d79..d02dbc5 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/SaveLandmark.cpp
@@ -1,61 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vector>
-#include <exception>
-#include <boost/foreach.hpp>
+#include "uiMeasurement/action/SaveLandmark.hpp"
 
 #include <fwCore/base.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/registry/ServiceConfig.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-#include <fwServices/AppConfigManager.hpp>
-
-#include <fwData/String.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/SelectorDialog.hpp>
 
-#include "uiMeasurement/action/SaveLandmark.hpp"
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+#include <exception>
+#include <vector>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::SaveLandmark , ::fwData::Image) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::SaveLandmark, ::fwData::Image);
 
 
 //------------------------------------------------------------------------------
 
 
 SaveLandmark::SaveLandmark( ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SaveLandmark::~SaveLandmark() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void SaveLandmark::info(std::ostream &_sstream )
+void SaveLandmark::info(std::ostream& _sstream )
 {
     _sstream << "Action for save landmarks" << std::endl;
 }
@@ -65,13 +62,13 @@ void SaveLandmark::info(std::ostream &_sstream )
 void SaveLandmark::updating() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwData::Image::sptr image =  this->getObject< ::fwData::Image >();
-    if (!::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    if (!::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
     {
         ::fwGui::dialog::MessageDialog::showMessageDialog(
-                "Save landmarks",
-                "Sorry, it is impossible to save image landmarks. There is not loaded image in the software.",
-                ::fwGui::dialog::IMessageDialog::WARNING);
+            "Save landmarks",
+            "It is impossible to save image landmarks. There is no loaded image in the software.",
+            ::fwGui::dialog::IMessageDialog::WARNING);
         return;
     }
     static ::boost::filesystem::path _sDefaultPath("");
@@ -81,16 +78,16 @@ void SaveLandmark::updating() throw(::fwTools::Failed)
     dialogFile.addFilter("Landmark file","*.json");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
 
     if( result )
     {
         ::boost::filesystem::path path = result->getPath();
-        _sDefaultPath = path.parent_path();
+        _sDefaultPath                  = path.parent_path();
         dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
 
-       this->save(path);
+        this->save(path);
     }
 }
 
@@ -110,11 +107,6 @@ void SaveLandmark::starting() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SaveLandmark::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw (::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void SaveLandmark::stopping() throw (::fwTools::Failed)
 {
     this->::fwGui::IActionSrv::actionServiceStopping();
@@ -124,23 +116,24 @@ void SaveLandmark::stopping() throw (::fwTools::Failed)
 
 void SaveLandmark::save(const ::boost::filesystem::path& path)
 {
-    ::fwData::Image::sptr image =  this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     //get landmarks
-    ::fwComEd::fieldHelper::MedicalImageHelpers::checkLandmarks(  image );
-    ::fwData::PointList::sptr landmarks =  image->getField< ::fwData::PointList >( ::fwComEd::Dictionary::m_imageLandmarksId);
+    ::fwDataTools::fieldHelper::MedicalImageHelpers::checkLandmarks(  image );
+    ::fwData::PointList::sptr landmarks = image->getField< ::fwData::PointList >(
+        ::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
     SLM_ASSERT("landmarks not instanced", landmarks);
 
     ::fwData::Composite::sptr replaceMap = ::fwData::Composite::New();
-    (*replaceMap)["GENERIC_UID"] = ::fwData::String::New(
-            ::fwServices::registry::AppConfig::getUniqueIdentifier("SaveLandmarkApp")
-    );
-    (*replaceMap)["landmark"] = ::fwData::String::New(landmarks->getID());
-    (*replaceMap)["file"] = ::fwData::String::New(path.string());
+    (*replaceMap)["GENERIC_UID"]         = ::fwData::String::New(
+        ::fwServices::registry::AppConfig::getUniqueIdentifier("SaveLandmarkApp")
+        );
+    (*replaceMap)["landmark"]                       = ::fwData::String::New(landmarks->getID());
+    (*replaceMap)["file"]                           = ::fwData::String::New(path.string());
     ::fwRuntime::ConfigurationElement::csptr config =
         ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig("SaveLandmark", replaceMap);
 
-    ::fwServices::AppConfigManager::sptr helper = ::fwServices::AppConfigManager::New();
+    ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
     helper->setConfig( config );
     helper->launch();
 
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowDistance.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowDistance.cpp
index e4642f5..6237c0f 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowDistance.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowDistance.cpp
@@ -1,31 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
+#include "uiMeasurement/action/ShowDistance.hpp"
 
-#include <exception>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwCore/base.hpp>
 
 #include <fwData/Boolean.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/PointList.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include "uiMeasurement/action/ShowDistance.hpp"
+#include <fwServices/macros.hpp>
+
+#include <exception>
 
 
 namespace uiMeasurement
@@ -33,24 +30,26 @@ namespace uiMeasurement
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::ShowDistance , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::ShowDistance, ::fwData::Image );
 
+static const ::fwCom::Slots::SlotKeyType s_SHOW_DISTANCE_SLOT = "showDistance";
 
 //------------------------------------------------------------------------------
 
 ShowDistance::ShowDistance( ) throw()
 {
-    //addNewHandledEvent( ::fwComEd::ImageMsg::DISTANCE );
+    newSlot(s_SHOW_DISTANCE_SLOT, &ShowDistance::showDistance, this);
 }
 
 //------------------------------------------------------------------------------
 
 ShowDistance::~ShowDistance() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void ShowDistance::info(std::ostream &_sstream )
+void ShowDistance::info(std::ostream& _sstream )
 {
     _sstream << "Action for show distance" << std::endl;
 }
@@ -62,13 +61,14 @@ void ShowDistance::updating() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
 
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    if ( !::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image) )
+    if ( !::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image) )
     {
         this->::fwGui::IActionSrv::setIsActive(false);
     }
     else
     {
-        ::fwData::Boolean::sptr showDistances = image->getField< ::fwData::Boolean >("ShowDistances", ::fwData::Boolean::New(true));
+        ::fwData::Boolean::sptr showDistances = image->getField< ::fwData::Boolean >("ShowDistances", ::fwData::Boolean::New(
+                                                                                         true));
         bool isShown = showDistances->value();
 
         bool toShow = !isShown;
@@ -77,9 +77,12 @@ void ShowDistance::updating() throw(::fwTools::Failed)
         // auto manage hide/show : use Field Information instead let gui manage checking
         this->::fwGui::IActionSrv::setIsActive(!toShow);
 
-        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-        msg->addEvent( ::fwComEd::ImageMsg::DISTANCE );
-        ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+        auto sig = image->signal< ::fwData::Image::DistanceDisplayedSignalType >(
+            ::fwData::Image::s_DISTANCE_DISPLAYED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_SHOW_DISTANCE_SLOT)));
+            sig->asyncEmit(toShow);
+        }
     }
 }
 
@@ -87,25 +90,22 @@ void ShowDistance::updating() throw(::fwTools::Failed)
 
 void ShowDistance::swapping() throw(::fwTools::Failed)
 {
-    ::fwData::Image::csptr img = this->getObject< ::fwData::Image >();
-    ::fwData::Boolean::sptr showDistances = img->getField< ::fwData::Boolean >("ShowDistances", ::fwData::Boolean::New(true));
+    ::fwData::Image::csptr img            = this->getObject< ::fwData::Image >();
+    ::fwData::Boolean::sptr showDistances =
+        img->getField< ::fwData::Boolean >("ShowDistances", ::fwData::Boolean::New(true));
 
     this->::fwGui::IActionSrv::setIsActive( !(showDistances->value()) );
 }
 
 //------------------------------------------------------------------------------
 
-void ShowDistance::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void ShowDistance::showDistance(bool isShown)
 {
-    SLM_TRACE_FUNC();
-    ::fwComEd::ImageMsg::csptr imgMsg =  ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    if ( imgMsg && imgMsg->hasEvent( ::fwComEd::ImageMsg::DISTANCE ) )
-    {
-        ::fwData::Image::csptr img = this->getObject< ::fwData::Image >();
-        ::fwData::Boolean::sptr showDistances = img->getField< ::fwData::Boolean >("ShowDistances", ::fwData::Boolean::New(true));
+    ::fwData::Image::csptr img            = this->getObject< ::fwData::Image >();
+    ::fwData::Boolean::sptr showDistances =
+        img->getField< ::fwData::Boolean >("ShowDistances", ::fwData::Boolean::New(true));
 
-        this->::fwGui::IActionSrv::setIsActive( !(showDistances->value()) );
-    }
+    this->::fwGui::IActionSrv::setIsActive( !(showDistances->value()) );
 }
 
 //------------------------------------------------------------------------------
@@ -131,5 +131,25 @@ void ShowDistance::stopping() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType ShowDistance::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_DISTANCE_DISPLAYED_SIG, s_SHOW_DISTANCE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap ShowDistance::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( "image", ::fwData::Image::s_DISTANCE_DISPLAYED_SIG, s_SHOW_DISTANCE_SLOT );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace action
 } // namespace uiMeasurement
diff --git a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowLandmark.cpp b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowLandmark.cpp
index ce96584..b10453e 100644
--- a/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowLandmark.cpp
+++ b/Bundles/LeafUI/uiMeasurement/src/uiMeasurement/action/ShowLandmark.cpp
@@ -1,44 +1,44 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "uiMeasurement/action/ShowLandmark.hpp"
 
-#include <fwCore/base.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <exception>
+#include <fwCore/base.hpp>
 
 #include <fwData/Boolean.hpp>
 
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/ObjectMsg.hpp>
 #include <fwServices/registry/ObjectService.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-
-
-#include "uiMeasurement/action/ShowLandmark.hpp"
-
+#include <exception>
 
 namespace uiMeasurement
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMeasurement::action::ShowLandmark , ::fwData::Image) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMeasurement::action::ShowLandmark, ::fwData::Image);
 
+static const ::fwCom::Slots::SlotKeyType s_SHOW_LANDMARK_SLOT = "showLandmark";
 
 //------------------------------------------------------------------------------
 
 ShowLandmark::ShowLandmark( ) throw()
 {
-    //addNewHandledEvent( ::fwComEd::ImageMsg::LANDMARK );
+    newSlot(s_SHOW_LANDMARK_SLOT, &ShowLandmark::showLandmark, this);
 }
 
 //------------------------------------------------------------------------------
@@ -49,7 +49,7 @@ ShowLandmark::~ShowLandmark() throw()
 
 //------------------------------------------------------------------------------
 
-void ShowLandmark::info(std::ostream &_sstream )
+void ShowLandmark::info(std::ostream& _sstream )
 {
     _sstream << "Action for show distance" << std::endl;
 }
@@ -61,27 +61,30 @@ void ShowLandmark::updating() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
 
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    if (   !::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image) ||
-            ! image->getField( ::fwComEd::Dictionary::m_imageLandmarksId ))
+    if (   !::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image) ||
+           !image->getField( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId ))
     {
         this->::fwGui::IActionSrv::setIsActive(false);
         return;
     }
 
-    ::fwData::Boolean::sptr showLandmarks = image->getField< ::fwData::Boolean >("ShowLandmarks", ::fwData::Boolean::New(true));
+    ::fwData::Boolean::sptr showLandmarks = image->getField< ::fwData::Boolean >("ShowLandmarks", ::fwData::Boolean::New(
+                                                                                     true));
     bool isShown = showLandmarks->value();
 
     bool toShow = !isShown;
     image->setField("ShowLandmarks",  ::fwData::Boolean::New(toShow));
 
-    std::vector< ::fwServices::IService::sptr > services = ::fwServices::OSR::getServices < ::fwServices::IService > (image);
+    auto services = ::fwServices::OSR::getServices < ::fwServices::IService > (image);
 
     this->::fwGui::IActionSrv::setIsActive(isShown);
 
     // notify
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::LANDMARK );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    auto sig = image->signal< ::fwData::Image::LandmarkDisplayedSignalType >(::fwData::Image::s_LANDMARK_DISPLAYED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_SHOW_LANDMARK_SLOT)));
+        sig->asyncEmit(isShown);
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -89,8 +92,9 @@ void ShowLandmark::updating() throw(::fwTools::Failed)
 void ShowLandmark::swapping() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwData::Image::csptr img = this->getObject< ::fwData::Image >();
-    ::fwData::Boolean::sptr showLandmarks = img->getField< ::fwData::Boolean >("ShowLandmarks", ::fwData::Boolean::New(true));
+    ::fwData::Image::csptr img            = this->getObject< ::fwData::Image >();
+    ::fwData::Boolean::sptr showLandmarks =
+        img->getField< ::fwData::Boolean >("ShowLandmarks", ::fwData::Boolean::New(true));
 
     // set check correctly
     this->::fwGui::IActionSrv::setIsActive( !(showLandmarks->value()) );
@@ -98,13 +102,9 @@ void ShowLandmark::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ShowLandmark::receiving(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
+void ShowLandmark::showLandmark(bool isShown)
 {
-    ::fwComEd::ImageMsg::csptr imgMsg =  ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    if ( imgMsg && imgMsg->hasEvent( ::fwComEd::ImageMsg::LANDMARK ) )
-    {
-        this->swapping();
-    }
+    this->swapping();
 }
 
 //------------------------------------------------------------------------------
@@ -130,6 +130,26 @@ void ShowLandmark::stopping() throw (::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType ShowLandmark::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_LANDMARK_DISPLAYED_SIG, s_SHOW_LANDMARK_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap ShowLandmark::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( "image", ::fwData::Image::s_LANDMARK_DISPLAYED_SIG, s_SHOW_LANDMARK_SLOT );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } // namespace action
 } // namespace uiMeasurement
diff --git a/Bundles/LeafUI/uiMeasurementQt/CMakeLists.txt b/Bundles/LeafUI/uiMeasurementQt/CMakeLists.txt
index 937fb7a..4ab9cc1 100644
--- a/Bundles/LeafUI/uiMeasurementQt/CMakeLists.txt
+++ b/Bundles/LeafUI/uiMeasurementQt/CMakeLists.txt
@@ -1,22 +1,19 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-    fwTools
 
-    gui
-)
-
-
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
-fwLink(${QT_LIBRARIES})
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiMeasurementQt/COPYING b/Bundles/LeafUI/uiMeasurementQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiMeasurementQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiMeasurementQt/COPYING.LESSER b/Bundles/LeafUI/uiMeasurementQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiMeasurementQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiMeasurementQt/Properties.cmake b/Bundles/LeafUI/uiMeasurementQt/Properties.cmake
index 48e0184..72b8720 100644
--- a/Bundles/LeafUI/uiMeasurementQt/Properties.cmake
+++ b/Bundles/LeafUI/uiMeasurementQt/Properties.cmake
@@ -2,6 +2,16 @@
 set( NAME uiMeasurementQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGuiQt fwRuntime fwServices fwTools gui )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGuiQt
+    fwRuntime
+    fwServices
+    fwTools
+    fwGui
+    gui
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiMeasurementQt/bin/build.options b/Bundles/LeafUI/uiMeasurementQt/bin/build.options
deleted file mode 100644
index 5c9d5c6..0000000
--- a/Bundles/LeafUI/uiMeasurementQt/bin/build.options
+++ /dev/null
@@ -1,15 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwDataIO_0-2',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          'fwGuiQt_0-1',
-          ]
-USE     = ['boost','qtCore']
-BUNDLES = ['gui_0-1',]
diff --git a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/Plugin.hpp b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/Plugin.hpp
index 1c5be34..d0f012f 100644
--- a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/Plugin.hpp
+++ b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENTQT_PLUGIN_HPP_
-#define _UIMEASUREMENTQT_PLUGIN_HPP_
+#ifndef __UIMEASUREMENTQT_PLUGIN_HPP__
+#define __UIMEASUREMENTQT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -13,7 +13,7 @@ namespace uiMeasurementQt
 {
 
 /**
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -33,4 +33,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiMeasurementQt
 
-#endif //_UIMEASUREMENTQT_PLUGIN_HPP_
+#endif //__UIMEASUREMENTQT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/config.hpp b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/config.hpp
deleted file mode 100644
index 3f7c65a..0000000
--- a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIMEASUREMENTQT_CONFIG_HPP_
-#define _UIMEASUREMENTQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIMEASUREMENTQT_EXPORTS
-    #define UIMEASUREMENTQT_API __declspec(dllexport)
-    #else
-    #define UIMEASUREMENTQT_API __declspec(dllimport)
-    #endif
-
-    #define UIMEASUREMENTQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIMEASUREMENTQT_EXPORTS
-    #define UIMEASUREMENTQT_API __attribute__ ((visibility("default")))
-    #define UIMEASUREMENTQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIMEASUREMENTQT_API __attribute__ ((visibility("hidden")))
-    #define UIMEASUREMENTQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIMEASUREMENTQT_API
-    #define UIMEASUREMENTQT_CLASS_API
-
-#endif
-
-#endif //_UIMEASUREMENTQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Distance.hpp b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Distance.hpp
index 8f0e1b8..c93cb8c 100644
--- a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Distance.hpp
+++ b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Distance.hpp
@@ -1,20 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEASUREMENTQT_DISTANCE_EDITOR_HPP_
-#define _UIMEASUREMENTQT_DISTANCE_EDITOR_HPP_
+#ifndef __UIMEASUREMENTQT_EDITOR_DISTANCE_HPP__
+#define __UIMEASUREMENTQT_EDITOR_DISTANCE_HPP__
 
-#include <QObject>
-#include <QPointer>
-#include <QPushButton>
+#include "uiMeasurementQt/config.hpp"
 
 #include <fwTools/Failed.hpp>
+
 #include <gui/editor/IEditor.hpp>
 
-#include "uiMeasurementQt/config.hpp"
+#include <QObject>
+#include <QPointer>
+#include <QPushButton>
 
 namespace uiMeasurement
 {
@@ -22,23 +23,51 @@ namespace editor
 {
 /**
  * @brief   Distance service is represented by a button. It allows to show distances in a generic scene.
- * @class   Distance
- * 
- * @date    2010.
+ *
+ * @note Sends a signal to request a distance. It should be conected to an ImageMultiDistance adaptor to create the
+ * distance.
+ *
+ * @section Signals Signals
+ *  \b distanceRequested() : signal to request a distance. It should be conected to an ImageMultiDistance
+ * adaptor to create the distance.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <service uid="..." type="::uiMeasurement::editor::Distance" >
+       <inout key="image" uid="..." />
+       <placeInScene uid="genericScene" />
+   </service>
+   @endcode
+
+ * @subsection In-Out In-Out
+ * -\b image [::fwData::Image]: Image in which we calculate the distance.
+ * @subsection Configuration Configuration
+   \b genericScene is the uid of the ::fwRenderVTK::SRender representing the generic scene which will be printed.
  */
-class UIMEASUREMENTQT_CLASS_API Distance : public QObject, public ::gui::editor::IEditor
+class UIMEASUREMENTQT_CLASS_API Distance : public QObject,
+                                           public ::gui::editor::IEditor
 {
-    Q_OBJECT
-public :
+Q_OBJECT
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Distance)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Distance)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIMEASUREMENTQT_API Distance() throw() ;
+    UIMEASUREMENTQT_API Distance() throw();
 
     /// Destructor. Do nothing.
-    UIMEASUREMENTQT_API virtual ~Distance() throw() ;
+    UIMEASUREMENTQT_API virtual ~Distance() throw();
 
+    /**
+     * @name Signal
+     * @{
+     */
+    UIMEASUREMENTQT_API static const ::fwCom::Signals::SignalKeyType s_DISTANCE_REQUESTED_SIG;
+    typedef ::fwCom::Signal< void () > DistanceRequestedSignalType;
+    /**
+     * @}
+     */
 protected:
 
     typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
@@ -58,29 +87,15 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /// Do nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
     virtual void updating() throw(::fwTools::Failed);
 
     /// Do nothing
     virtual void swapping() throw(::fwTools::Failed);
 
-    /**
-     * @brief Configure the editor.
-     *
-     * Example of configuration
-     * @verbatim
-    <service uid="distanceEditor" type="::gui::editor::IEditor" impl="::uiMeasurement::editor::Distance" autoConnect="no">
-        <placeInScene uid="genericScene" />
-    </service>
-     @endverbatim
-     \b genericScene is the uid of the ::fwRenderVTK::VtkRenderService representing the generic scene which will be printed.
-     */
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream& _sstream );
 
 protected Q_SLOTS:
     /**
@@ -93,12 +108,14 @@ private:
     std::string m_scenesUID;
     QPointer< QPushButton > m_distButton;
 
+    DistanceRequestedSignalType::sptr m_sigDistanceRequested; /// signal emitted when a distance is requested
+
 
 
 };
 } // namespace editor
 } // uiMeasurement
 
-#endif /*_UIMEASUREMENTQT_DISTANCE_EDITOR_HPP_*/
+#endif /*__UIMEASUREMENTQT_EDITOR_DISTANCE_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Namespace.hpp b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Namespace.hpp
deleted file mode 100644
index f91e860..0000000
--- a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/Namespace.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIMEASUREMENTQT_EDITOR_NAMESPACE_HPP_
-#define _UIMEASUREMENTQT_EDITOR_NAMESPACE_HPP_
-
-
-namespace uiMeasurement
-{
-/**
- * @brief       The namespace uiMeasurement::editor contains editors to add distances
- * @namespace   uiMeasurement::editor
- * 
- * @date        2009-2010.
- *
- */
-namespace editor
-{
-
-}
-}
-#endif /* _UIMEASUREMENTQT_EDITOR_NAMESPACE_HPP_ */
diff --git a/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/namespace.hpp b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/namespace.hpp
new file mode 100644
index 0000000..9ae9c4e
--- /dev/null
+++ b/Bundles/LeafUI/uiMeasurementQt/include/uiMeasurementQt/editor/namespace.hpp
@@ -0,0 +1,29 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __UIMEASUREMENTQT_EDITOR_NAMESPACE_HPP__
+#define __UIMEASUREMENTQT_EDITOR_NAMESPACE_HPP__
+
+
+namespace uiMeasurement
+{
+/**
+ * @brief The namespace uiMeasurement::editor contains editors to add distances
+ */
+namespace editor
+{
+
+}
+}
+
+
+/**
+ * @brief uiMeasurement qt implementation
+ */
+namespace uiMeasurementQt
+{
+}
+#endif /* __UIMEASUREMENTQT_EDITOR_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiMeasurementQt/rc/plugin.xml b/Bundles/LeafUI/uiMeasurementQt/rc/plugin.xml
index 7fffb26..cae0900 100644
--- a/Bundles/LeafUI/uiMeasurementQt/rc/plugin.xml
+++ b/Bundles/LeafUI/uiMeasurementQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiMeasurementQt" class="::uiMeasurementQt::Plugin">
+<plugin id="uiMeasurementQt" class="::uiMeasurementQt::Plugin" version="@DASH_VERSION@" >
     <library name="uiMeasurementQt"/>
     
     <requirement id="dataReg"/>
diff --git a/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/Plugin.cpp b/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/Plugin.cpp
index 38de632..91a8b4b 100755
--- a/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/Plugin.cpp
+++ b/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace uiMeasurementQt
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiMeasurementQt::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiMeasurementQt
diff --git a/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/editor/Distance.cpp b/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/editor/Distance.cpp
index 2af67cc..4605207 100644
--- a/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/editor/Distance.cpp
+++ b/Bundles/LeafUI/uiMeasurementQt/src/uiMeasurementQt/editor/Distance.cpp
@@ -1,55 +1,54 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QVBoxLayout>
-#include <QIcon>
+#include "uiMeasurementQt/editor/Distance.hpp"
 
-#include <fwCore/base.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/convenience.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwData/String.hpp>
+#include <fwData/Boolean.hpp>
 #include <fwData/Composite.hpp>
 #include <fwData/Image.hpp>
-#include <fwData/Boolean.hpp>
+#include <fwData/String.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
-#include <fwGuiQt/container/QtContainer.hpp>
-
-#include "uiMeasurementQt/editor/Distance.hpp"
+#include <QIcon>
+#include <QVBoxLayout>
 
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/convenience.hpp>
 
 namespace uiMeasurement
 {
 namespace editor
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiMeasurement::editor::Distance , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiMeasurement::editor::Distance, ::fwData::Image );
 
+const ::fwCom::Signals::SignalKeyType Distance::s_DISTANCE_REQUESTED_SIG = "distanceRequested";
 
 Distance::Distance() throw()
 {
-    //handlingEventOff();
+    m_sigDistanceRequested = newSignal< DistanceRequestedSignalType >(s_DISTANCE_REQUESTED_SIG);
 }
 
 //------------------------------------------------------------------------------
 
 Distance::~Distance() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -58,20 +57,21 @@ void Distance::starting() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     namespace fs = ::boost::filesystem;
-    fs::path pathImageDist (std::string(SHAREPATH) + "Bundles/uiMeasurementQt_0-1/distance.png");
+    fs::path pathImageDist (std::string(BUNDLE_PREFIX) + "/uiMeasurementQt_0-1/distance.png");
     OSLM_ASSERT("Image "<< pathImageDist << "is missing", fs::exists(pathImageDist));
 
     QIcon imageDist(QString::fromStdString(pathImageDist.string()));
 
-    m_distButton = new QPushButton( imageDist, tr(""), container) ;
+    m_distButton = new QPushButton( imageDist, tr(""), container);
     m_distButton->setToolTip(tr("Distance"));
 
-    QVBoxLayout* layout  = new QVBoxLayout();
+    QVBoxLayout* layout = new QVBoxLayout();
     layout->addWidget( m_distButton, 1 );
     layout->setContentsMargins(0, 0, 0, 0);
     QObject::connect(m_distButton, SIGNAL(clicked()), this, SLOT(onDistanceButton()));
@@ -118,15 +118,10 @@ void Distance::swapping() throw(::fwTools::Failed)
 {
 
 }
-//------------------------------------------------------------------------------
-
-void Distance::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
 
 //------------------------------------------------------------------------------
 
-void Distance::info( std::ostream &_sstream )
+void Distance::info( std::ostream& _sstream )
 {
 }
 
@@ -136,14 +131,22 @@ void Distance::onDistanceButton()
 {
     SLM_ASSERT("No scene UID!", !m_scenesUID.empty());
     SLM_TRACE_FUNC();
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+
+    ::fwData::Image::sptr image;
+    if (this->isVersion2())
+    {
+        image = this->getInOut< ::fwData::Image >("image");
+    }
+    else
+    {
+        image = this->getObject< ::fwData::Image >();
+    }
+    SLM_ASSERT("'image' key is not found.", image);
 
     // force distance to be shown
     image->setField("ShowDistances",  ::fwData::Boolean::New(true));
 
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->addEvent( ::fwComEd::ImageMsg::NEW_DISTANCE, ::fwData::String::New(m_scenesUID) );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    m_sigDistanceRequested->asyncEmit();
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMedDataQt/CMakeLists.txt b/Bundles/LeafUI/uiMedDataQt/CMakeLists.txt
index 0a1ccbb..cba4656 100644
--- a/Bundles/LeafUI/uiMedDataQt/CMakeLists.txt
+++ b/Bundles/LeafUI/uiMedDataQt/CMakeLists.txt
@@ -1,34 +1,21 @@
 fwLoadProperties()
 
-fwUseForwardInclude(
-    fwData
-    fwGui
-    fwMedData
-    fwRuntime
-    fwServices
-    fwTools
-
-    gui
-)
-
-fwReq(
-    visuVTKAdaptor
-    uiImageQt
-    ctrlSelection
-    )
-
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+find_package(Boost COMPONENTS regex REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
+    ${Boost_INCLUDE_DIRS}
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
 
 fwLink(
-    ${QT_LIBRARIES}
-    )
+    ${Boost_REGEX_LIBRARY}
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiMedDataQt/COPYING b/Bundles/LeafUI/uiMedDataQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiMedDataQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiMedDataQt/COPYING.LESSER b/Bundles/LeafUI/uiMedDataQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiMedDataQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiMedDataQt/Properties.cmake b/Bundles/LeafUI/uiMedDataQt/Properties.cmake
index e110795..01db26c 100644
--- a/Bundles/LeafUI/uiMedDataQt/Properties.cmake
+++ b/Bundles/LeafUI/uiMedDataQt/Properties.cmake
@@ -3,23 +3,23 @@ set( NAME uiMedDataQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
 set( DEPENDENCIES
-    fwMedDataTools
     fwActivities
-    fwComEd
+    fwCom
     fwCore
     fwData
     fwDataCamp
+    fwDataTools
     fwGui
     fwGuiQt
     fwMedData
+    fwMedDataTools
     fwRuntime
     fwServices
     fwTools
+    fwDataTools
     gui
     )
 set( REQUIREMENTS
-    visuVTKAdaptor
     uiImageQt
     ctrlSelection
     )
-
diff --git a/Bundles/LeafUI/uiMedDataQt/bin/build.options b/Bundles/LeafUI/uiMedDataQt/bin/build.options
deleted file mode 100644
index 21865bf..0000000
--- a/Bundles/LeafUI/uiMedDataQt/bin/build.options
+++ /dev/null
@@ -1,22 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          'fwGuiQt_0-1',
-          'fwMedData_0-1',
-          'fwActivities_0-1',
-          'fwDataCamp_0-1',
-          'fwMedDataTools_0-1',
-          ]
-USE     = ['boost','qtCore']
-BUNDLES = ['gui_0-1']
-REQUIREMENTS = [
-               'visuVTKAdaptor_0-1',
-               'ctrlSelection_0-1',
-               ]
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/InsertSeries.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/InsertSeries.hpp
index 208dde4..3549bda 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/InsertSeries.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/InsertSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <fwData/Object.hpp>
 #include <fwData/factory/new.hpp>
-#include <fwData/macros.hpp>
 
 #include <fwMedData/Series.hpp>
 
@@ -20,13 +19,14 @@ namespace uiMedData
 
 /**
  * @class InsertSeries
- * Used as a placeholder in ::uiMedData::editor::SSelector UI to insert create and insert new series in a series DB.
+ * @brief Used as a placeholder in ::uiMedData::editor::SSelector UI to insert create and insert new series in a series DB.
  */
 class UIMEDDATAQT_CLASS_API InsertSeries : public ::fwMedData::Series
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (InsertSeries)(::fwData::Object), (()), ::fwData::factory::New< InsertSeries >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (InsertSeries)(::fwData::Object), (()),
+                                            ::fwData::factory::New< InsertSeries >);
 
     /**
      * @brief Constructor
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/Plugin.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/Plugin.hpp
index 54f0c01..5388df1 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/Plugin.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/Plugin.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,7 +13,7 @@ namespace uiMedDataQt
 {
 
 /**
- * 
+ *
  * @date    2009-2013.
  */
 struct Plugin : public ::fwRuntime::Plugin
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/SSeriesViewer.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/SSeriesViewer.hpp
index df4f09a..dad4f47 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/SSeriesViewer.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/SSeriesViewer.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEDDATAQT_SSERIESVIEWER_HPP_
-#define _UIMEDDATAQT_SSERIESVIEWER_HPP_
+#ifndef __UIMEDDATAQT_SSERIESVIEWER_HPP__
+#define __UIMEDDATAQT_SSERIESVIEWER_HPP__
 
 #include <map>
 
 #include <fwServices/IController.hpp>
-#include <fwServices/AppConfigManager.hpp>
+#include <fwServices/IAppConfigManager.hpp>
 
 #include "uiMedDataQt/config.hpp"
 
@@ -19,21 +19,27 @@ namespace uiMedData
 /**
  * @brief  This Service allows to preview the selected series in the Vector. For the moment, it works only on a
  * single selection.
- * @class   SSeriesViewer
- * 
- * @date    2013.
  */
 class UIMEDDATAQT_CLASS_API SSeriesViewer : public ::fwServices::IController
 {
 
-    public :
-    fwCoreServiceClassDefinitionsMacro ( (SSeriesViewer)(::fwServices::IController) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesViewer)(::fwServices::IController) );
 
     /// Constructor
     UIMEDDATAQT_API SSeriesViewer();
 
     /// Destructor
-    UIMEDDATAQT_API virtual ~SSeriesViewer() throw() ;
+    UIMEDDATAQT_API virtual ~SSeriesViewer() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Vector::s_ADDED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     * Connect Vector::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -45,25 +51,25 @@ protected:
 
     /**
      * @brief Configures the service.
-     * @verbatim
-    <service uid="seriesViewer" type="::fwServices::IController" impl="::uiMedData::SSeriesViewer" autoConnect="yes">
+     * @code{.xml}
+       <service uid="seriesViewer" type="::fwServices::IController" impl="::uiMedData::SSeriesViewer" autoConnect="yes">
         <parentView>preview</parentView>
         <configs>
             <config id="2DSimpleConfig" type="::fwMedData::ImageSeries">
                 <extract path="@image" pattern="imageID" />
             </config>
-            <config id="2DPacsPreviewConfig" type="::fwDicomData::DicomSeries" >
+            <config id="2DPacsPreviewConfig" type="::fwMedData::DicomSeries" >
                 <parameter replace="PACS_CONFIGURATION" by="None" />
             </config>
             <config id="3DSimpleConfig" type="::fwMedData::ModelSeries" />
         </configs>
-    </service>
-     @endverbatim
+       </service>
+       @endcode
      * - \b parentView : wid of the view where the config will install its windows.
      * - \b config : gives the available association between data type and associated config.
      *   - \b id : identifier of the AppConfig to launch
      *   - \b type : classname of the object stored in Vector associated to this config.
-     *   - \b parameter : allow to pass specific value to the associ config 
+     *   - \b parameter : allow to pass specific value to the associ config
      *     - \b replace : name of the parameter to be replaced
      *     - \b by : specific value to replace for the parameter
      * - \b extract : extracts the object from the path and replaces pattern with its fwID
@@ -80,10 +86,7 @@ protected:
      */
     virtual void updating() throw (::fwTools::Failed);
 
-    /// Listen Vector notification when objects are added or deleted.
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    virtual void info( std::ostream &_sstream );
+    virtual void info( std::ostream& _sstream );
 
 private:
 
@@ -105,7 +108,7 @@ private:
     typedef std::map<std::string, SeriesConfigInfo> SeriesConfigMapType;
 
     /// Config manager
-    ::fwServices::AppConfigManager::sptr m_configTemplateManager;
+    ::fwServices::IAppConfigManager::sptr m_configTemplateManager;
 
     /// Stores the wid of the view where the config will install its windows.
     std::string m_parentView;
@@ -115,5 +118,5 @@ private:
 };
 } // namespace uiMedData
 
-#endif // _UIMEDDATAQT_SSERIESVIEWER_HPP_
+#endif // __UIMEDDATAQT_SSERIESVIEWER_HPP__
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SExportSeries.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SExportSeries.hpp
index 0c06445..8201b87 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SExportSeries.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SExportSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,71 +7,105 @@
 #ifndef __UIMEDDATAQT_ACTION_SEXPORTSERIES_HPP__
 #define __UIMEDDATAQT_ACTION_SEXPORTSERIES_HPP__
 
-#include <fwMedData/Series.hpp>
+#include "uiMedDataQt/config.hpp"
+
+#include <fwCom/Slots.hpp>
 
 #include <fwGui/IActionSrv.hpp>
 
-#include "uiMedDataQt/config.hpp"
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
 
 
 namespace uiMedData
 {
 namespace action
 {
+
 /**
  * @brief   This action allows to export the series specified in config to the SeriesDB.
- * @class   SExportSeries
- * 
- * @date    2013.
+ * The export is performed when updating the service.
+ *
  * @note This action is not executable if the series already exists in the SeriesDB.
+ *
+ * @section Slots Slots
+ * - \b checkAddedSeries(::fwMedData::SeriesDB::ContainerType): make the action executable if the added series matches
+ * the series we want to export.
+ * - \b checkAddedSeries(::fwMedData::SeriesDB::ContainerType): make the action inexecutable if the added series matches
+ * the series we want to export.
+
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+        <service type="::uiMedData::action::SExportSeries" autoConnect="yes">
+            <inout key="series" uid="..." />
+            <inout key="seriesDB" uid="..." />
+       </service>
+   @endcode
+ * @subsection In-Out In-Out:
+ * - \b series [::fwMedData::Series]: Source series to export.
+ * - \b seriesDB [::fwMedData::SeriesDB]: Target series database where the series should be exported.
  */
 class UIMEDDATAQT_CLASS_API SExportSeries : public ::fwGui::IActionSrv
 {
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SExportSeries)(::fwGui::IActionSrv) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SExportSeries)(::fwGui::IActionSrv) );
 
     /// Constructor
     UIMEDDATAQT_API SExportSeries();
 
     /// Destructor
-    UIMEDDATAQT_API virtual ~SExportSeries() throw() ;
+    UIMEDDATAQT_API virtual ~SExportSeries() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection.
+     *
+     * Connect ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG to this::s_CHECK_ADDED_SERIES_SLOT.
+     * Connect ::fwMedData::SeriesDB::s_REMOVED_SERIES_SIG to this::s_CHECK_REMOVED_SERIES_SLOT.
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsMap getAutoConnections() const;
 
 protected:
 
+    /// This method is used to configure the service parameters
+    virtual void configuring() throw (::fwTools::Failed);
+
     /// Starts service. If series associated with m_seriesId exists in SeriesDB, this action is not executable.
     virtual void starting() throw(::fwTools::Failed);
 
     /// Stops service. Does nothing.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /**
-     *
-     * @verbatim
-     <service uid="selector" impl="::uiMedData::action::SExportSeries" type="::fwGui::IActionSrv" autoConnect="yes">
-        <seriesId>activitySeries</seriesId>
-     </service>
-     @endverbatim
-     * - \b seriesId : defines the fwId of the series to export in the current SeriesDB.
-     */
-    virtual void configuring() throw (::fwTools::Failed);
-
     /// Adds the series specified by m_seriesId in the SeriesDB.
     virtual void updating() throw (::fwTools::Failed);
 
+    virtual void info( std::ostream& _sstream );
+
+private:
+
     /**
-     * @brief Receive SeriesDBMsg to check if series specified by m_seriesId already exist in SeriesDB,
-     * thus set action not executable.
+     * @name Slots
+     * @{
      */
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
+    static const ::fwCom::Slots::SlotKeyType s_CHECK_ADDED_SERIES_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_CHECK_REMOVED_SERIES_SLOT;
 
-    virtual void info( std::ostream &_sstream );
+    /// Slot: check if specified series is added and set action not executable
+    void checkAddedSeries(::fwMedData::SeriesDB::ContainerType addedSeries);
 
-private:
+    /// Slot: check if specified series is removed and set action executable
+    void checkRemovedSeries(::fwMedData::SeriesDB::ContainerType removedSeries);
+
+    /**
+     * @}
+     */
 
     /// Returns current series given by its fwID m_seriesId.
     ::fwMedData::Series::sptr getSeries();
 
     /// fwID of the series to add in SeriesDB
+    /// @deprecated appXml2
     std::string m_seriesId;
 };
 } // namespace action
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SInitNewSeries.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SInitNewSeries.hpp
index 616abbf..5e39c3a 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SInitNewSeries.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/action/SInitNewSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,20 +21,18 @@ namespace action
 /**
  * @brief   This action allows to update ::uiMedData::editor::SSelector UI in order to add new series.
  * @class   SInitNewSeries
- * 
- * @date    2014.
  * @note The action adds an empty series in each patient/study group to select where the series must be added.
  */
 class UIMEDDATAQT_CLASS_API SInitNewSeries : public ::fwGui::IActionSrv
 {
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SInitNewSeries)(::fwGui::IActionSrv) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SInitNewSeries)(::fwGui::IActionSrv) );
 
     /// Constructor
     UIMEDDATAQT_API SInitNewSeries();
 
     /// Destructor
-    UIMEDDATAQT_API virtual ~SInitNewSeries() throw() ;
+    UIMEDDATAQT_API virtual ~SInitNewSeries() throw();
 
 protected:
 
@@ -46,12 +44,12 @@ protected:
 
     /**
      *
-     * @verbatim
-     <service uid="initSeriesUid" impl="::uiMedData::action::SInitNewSeries" type="::fwGui::IActionSrv" autoConnect="yes">
+     * @code{.xml}
+       <service uid="initSeriesUid" impl="::uiMedData::action::SInitNewSeries" type="::fwGui::IActionSrv" autoConnect="yes">
          <seriesDB>seriesDB_UID</seriesDB>
          <institution>My great company</institution>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * \b seriesDB : UID of series DB used to add new series for each patient/study group
      * \b institution (not mandatory) : default value to be set for new series equipment's institution
      */
@@ -60,9 +58,6 @@ protected:
     /// Adds the fake series in series DB.
     virtual void updating() throw (::fwTools::Failed);
 
-    /// Override
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
     virtual void info( std::ostream &_sstream );
 
 private:
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/config.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/config.hpp
deleted file mode 100644
index 6e91cfc..0000000
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIMEDDATAQT_CONFIG_HPP_
-#define _UIMEDDATAQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIMEDDATAQT_EXPORTS
-    #define UIMEDDATAQT_API __declspec(dllexport)
-    #else
-    #define UIMEDDATAQT_API __declspec(dllimport)
-    #endif
-
-    #define UIMEDDATAQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIMEDDATAQT_EXPORTS
-    #define UIMEDDATAQT_API __attribute__ ((visibility("default")))
-    #define UIMEDDATAQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIMEDDATAQT_API __attribute__ ((visibility("hidden")))
-    #define UIMEDDATAQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIMEDDATAQT_API
-    #define UIMEDDATAQT_CLASS_API
-
-#endif
-
-#endif //_UIMEDDATAQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/constants.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/constants.hpp
index e5fa51f..4ff823d 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/constants.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/constants.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __UIMEDDDATAQT_CONSTANTS_HPP__
-#define __UIMEDDDATAQT_CONSTANTS_HPP__
+#ifndef __UIMEDDATAQT_CONSTANTS_HPP__
+#define __UIMEDDATAQT_CONSTANTS_HPP__
 
 #include <string>
 
@@ -14,22 +14,22 @@
 namespace uiMedData
 {
 
-    /// Placeholder text used to identify a new patient that must be initialized within the series selector widget.
-    static const std::string s_NEW_PATIENT_TEXT = "< New patient... >";
+/// Placeholder text used to identify a new patient that must be initialized within the series selector widget.
+static const std::string s_NEW_PATIENT_TEXT = "< New patient... >";
 
-    /// Placeholder text used to identify a new study that must be initialized within the series selector widget.
-    static const std::string s_NEW_STUDY_TEXT = "< New study... >";
+/// Placeholder text used to identify a new study that must be initialized within the series selector widget.
+static const std::string s_NEW_STUDY_TEXT = "< New study... >";
 
-    /// Placeholder text used to identify a new series that must be initialized within the series selector widget.
-    static const std::string s_INSERT_NEW_SERIES_TEXT = "< Insert new series here... >";
+/// Placeholder text used to identify a new series that must be initialized within the series selector widget.
+static const std::string s_INSERT_NEW_SERIES_TEXT = "< Insert new series here... >";
 
-    /// Field name used to identify a ::fwMedData::Patient to be initialized.
-    static const std::string s_NEW_PATIENT_FIELD_NAME = "NEW_PATIENT";
+/// Field name used to identify a ::fwMedData::Patient to be initialized.
+static const std::string s_NEW_PATIENT_FIELD_NAME = "NEW_PATIENT";
 
-    /// Field name used to identify a ::fwMedData::Study to be initialized.
-    static const std::string s_NEW_STUDY_FIELD_NAME = "NEW_STUDY";
+/// Field name used to identify a ::fwMedData::Study to be initialized.
+static const std::string s_NEW_STUDY_FIELD_NAME = "NEW_STUDY";
 
 } // namespace uiMedData
 
-#endif // __UIMEDDDATAQT_CONSTANTS_HPP__
+#endif // __UIMEDDATAQT_CONSTANTS_HPP__
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SActivityWizard.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SActivityWizard.hpp
new file mode 100644
index 0000000..adcaf06
--- /dev/null
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SActivityWizard.hpp
@@ -0,0 +1,205 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __UIMEDDATAQT_EDITOR_SACTIVITYWIZARD_HPP__
+#define __UIMEDDATAQT_EDITOR_SACTIVITYWIZARD_HPP__
+
+#include "uiMedDataQt/config.hpp"
+#include "uiMedDataQt/widget/ActivityDataView.hpp"
+
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwData/Vector.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <gui/editor/IEditor.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <QPointer>
+#include <QPushButton>
+#include <QLabel>
+
+namespace uiMedData
+{
+namespace editor
+{
+
+/**
+ * @brief This editor allows to select the data required by an activity in order to create the ActivitySeries.
+ *
+ * This editor displays a tab widget (one tab by data).
+ * It works on a ::fwMedData::SeriesDB and adds the created activity series into the seriesDB.
+ *
+ * @section Slots Slots
+ * - \b createActivity(std::string) : This slot displays the gui allowing to create a ::fwMedData::ActivitySeries with
+ *      the required data for the given activity.
+ * - \b updateActivity(::fwMedData::ActivitySeries::sptr) : This slot displays the gui allowing to update the required
+ *      data for the given activity.
+ * - \b updateActivitySeries(::fwMedData::Series::sptr) : This slot receives a ::fwMedData::Series, but works only if
+ *   the series is an ActivitySeries, else it does nothing. It displays the gui allowing to update the required data for
+ *   the given activity.
+ *
+ * @section Signals Signals
+ * - \b activityCreated(::fwMedData::ActivitySeries::sptr) : This signal is emitted when the activitySeries is built.
+ * - \b activityUpdated(::fwMedData::ActivitySeries::sptr) : This signal is emitted when the activitySeries is updated.
+ * - \b canceled() : This signal is emitted when the cancel button is clicked.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <service impl="::uiMedData::editor::SActivityWizard">
+     <ioSelectorConfig>config</ioSelectorConfig>
+     <activitySeries>seriesUid</activitySeries>
+     <confirm>true</confirm>
+     <cancel>true</cancel>
+     <icons>
+         <icon type="::fwMedData::ImageSeries" icon="@BUNDLE_PREFIX@/media_0-1/icons/ImageSeries.svg" />
+         <icon type="::fwMedData::ModelSeries" icon="@BUNDLE_PREFIX@/media_0-1/icons/ModelSeries.svg" />
+     </icons>
+   </service>
+   @endcode
+ * - \b ioSelectorConfig : configuration for the SIOSelector service used to import data in this editor.
+ * - \b icons : defines the icons displayed for a type of data
+ *    - \b type : type of data
+ *    - \b icon : path of the icon to display
+ * - \b activitySeries (optional) : uid of the activity series to update. It is only used when the update() method is
+ *      called.
+ * - \b confirm (optional, true by default): if true, the editor proposes a confirmation dialog when the activity is
+ *   updated.
+ * - \b cancel (optional, true by default): if true, the editor proposes a cancel button. On cancel click, the editor is
+ *   emptied and the signal 'canceled' is emitted.
+
+ */
+class UIMEDDATAQT_CLASS_API SActivityWizard : public QObject,
+                                              public ::gui::editor::IEditor
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SActivityWizard)(::gui::editor::IEditor) );
+
+    /// Constructor. Do nothing.
+    UIMEDDATAQT_API SActivityWizard() throw();
+
+    /// Destructor. Do nothing.
+    UIMEDDATAQT_API virtual ~SActivityWizard() throw();
+
+    /**
+     * @name Slot API
+     * @{
+     */
+    UIMEDDATAQT_API static const ::fwCom::Slots::SlotKeyType s_CREATE_ACTIVITY_SLOT;
+    UIMEDDATAQT_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_ACTIVITY_SLOT;
+    UIMEDDATAQT_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_ACTIVITY_SERIES_SLOT;
+    /// @}
+
+    /**
+     * @name Signal API
+     * @{
+     */
+    UIMEDDATAQT_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_CREATED_SIG;
+    typedef ::fwCom::Signal< void ( ::fwMedData::ActivitySeries::sptr ) > ActivityCreatedSignalType;
+
+    UIMEDDATAQT_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_UPDATED_SIG;
+    typedef ::fwCom::Signal< void ( ::fwMedData::ActivitySeries::sptr ) > ActivityUpdatedSignalType;
+
+    UIMEDDATAQT_API static const ::fwCom::Signals::SignalKeyType s_CANCELED_SIG;
+    typedef ::fwCom::Signal< void () > CanceledSignalType;
+    /// @}
+
+protected:
+
+    ///This method creates the editor gui.
+    virtual void starting() throw(::fwTools::Failed);
+
+    ///This method destroys the editor gui.
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Update the activity if it is defined in the configuration, else does nothing.
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Initialize the editor.
+    virtual void configuring() throw(fwTools::Failed);
+
+private:
+
+
+    enum class Mode : std::uint8_t
+    {
+        CREATE,
+        UPDATE
+    };
+
+    /// SLOT: Displays the gui allowing to select the required data for the activity.
+    void createActivity(std::string activityID);
+
+    /// SLOT: Displays the gui allowing to update the required data for the activity.
+    void updateActivity(::fwMedData::ActivitySeries::sptr activitySeries);
+
+    /// SLOT: Displays the gui allowing to update the required data for the activity.
+    /**
+     * @brief SLOT: It displays the gui allowing to update the required data for the given activity.
+     * @note This slot receives a ::fwMedData::Series, but works only if the series is an ActivitySeries, else it does
+     *       nothing.
+     */
+    void updateActivitySeries(::fwMedData::Series::sptr series);
+
+    /**
+     * @brief Called when the user click on the 'apply' Button.
+     *
+     * if mode == CREATE : It creates the activitySeries and add it to the seriesDB.
+     * else, it update the current activity series.
+     */
+    void onBuildActivity();
+
+    /// Called when the tab selection changed. It check if the current data are properly selected.
+    void onTabChanged(int index);
+
+    /// Called when the user click on the 'reset' Button.
+    void onReset();
+
+    /// Called when the user click on the 'cancel' Button.
+    void onCancel();
+
+    ::fwMedData::ActivitySeries::sptr m_actSeries; ///< Activity series builded
+
+    QPointer<widget::ActivityDataView> m_activityDataView; ///< view used to select required data for activity
+    QPointer<QPushButton> m_okButton; ///<  Button 'Apply' or 'Next' to validate the activity creation
+    QPointer<QPushButton> m_resetButton; ///< Button to clear the activity parameters
+    QPointer<QPushButton> m_cancelButton; ///< Button to cancel the activity creation
+    QPointer<QLabel> m_title; ///< Label to show activity title
+    QPointer<QLabel> m_description; ///< Label to show activity description
+
+    std::string m_ioSelectorConfig; ///< configuration used to import data
+
+    widget::ActivityDataView::ObjectIconMapType m_objectIcons; ///< Map defining the icon associated to an object.
+
+    Mode m_mode; ///< editor mode (CREATE or UPDATE)
+
+    bool m_confirmUpdate; ///< if true, the editor proposes a confirmation dialog when the activity is updated.
+    bool m_isCancelable;  /// true if the cancel button is proposed
+
+
+    ActivityCreatedSignalType::sptr m_sigActivityCreated; ///< Signal emitted when the activitySeries is created
+    ActivityCreatedSignalType::sptr m_sigActivityUpdated; ///< Signal emitted when the activitySeries is updated
+    CanceledSignalType::sptr m_sigCanceled;               /// Signal emitted when the creation is canceled.
+
+};
+
+} //editor
+} // uiMedData
+
+
+#endif // __UIMEDDATAQT_EDITOR_SACTIVITYWIZARD_HPP__
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SModelSeriesList.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SModelSeriesList.hpp
index 313d5ec..c2aa33f 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SModelSeriesList.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SModelSeriesList.hpp
@@ -1,57 +1,72 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEDDATAQT_EDITOR_SMODELSERIESLIST_HPP__
-#define _UIMEDDATAQT_EDITOR_SMODELSERIESLIST_HPP__
+#ifndef __UIMEDDATAQT_EDITOR_SMODELSERIESLIST_HPP__
+#define __UIMEDDATAQT_EDITOR_SMODELSERIESLIST_HPP__
 
-#include <QPointer>
-#include <QObject>
+#include "uiMedDataQt/config.hpp"
+
+#include <gui/editor/IEditor.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwData/Reconstruction.hpp>
 
 #include <fwTools/Failed.hpp>
 
-#include <gui/editor/IEditor.hpp>
 
-#include "uiMedDataQt/config.hpp"
+#include <QPointer>
+#include <QObject>
+#include <QPushButton>
+
 
-class QListWidget;
+class QTreeWidget;
 class QCheckBox;
 class QListWidgetItem;
-
-namespace fwData
-{
-    class Reconstruction;
-}
-
-namespace fwServices
-{
-    class ObjectMsg;
-}
+class QTreeWidgetItem;
 
 namespace uiMedData
 {
 namespace editor
 {
 
+
+class ValueView;
+
 /**
  * @brief   SModelSeriesList service.
  * @class   SModelSeriesList
  * @date    2013.
  */
-class UIMEDDATAQT_CLASS_API SModelSeriesList :  public QObject, public ::gui::editor::IEditor
+class UIMEDDATAQT_CLASS_API SModelSeriesList :  public QObject,
+                                                public ::gui::editor::IEditor
 {
-    Q_OBJECT
-public :
+Q_OBJECT
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesList)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SModelSeriesList)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIMEDDATAQT_API SModelSeriesList() throw() ;
+    UIMEDDATAQT_API SModelSeriesList() throw();
 
     /// Destructor. Do nothing.
-    UIMEDDATAQT_API virtual ~SModelSeriesList() throw() ;
+    UIMEDDATAQT_API virtual ~SModelSeriesList() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect ModelSeries::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG to this::s_UPDATE_SLOT
+     * Connect ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG to this::s_UPDATE_SLOT
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -61,9 +76,6 @@ protected:
     ///This method launches the IEditor::stopping method.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Managment of observations ( overides )
-    virtual void receiving( SPTR(const ::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     virtual void updating() throw(::fwTools::Failed);
 
     virtual void swapping() throw(::fwTools::Failed);
@@ -72,47 +84,93 @@ protected:
      * @brief Configures the editor.
      *
      * Configuration example :
-     @verbatim
-     <config enable_hide_all="true" />
-     @endverbatim
+       @code{.xml}
+       <enable_hide_all>true</enable_hide_all>
+       <columns>
+         <organ_name>@organ_name</organ_name>
+         <volume_cc view="positive" >@volume</volume_cc>
+       </columns>
+       @endcode
      *
      * \b enable_hide_all : if 'true', allows to hide all models through a single checkbox displayed in UI (default
      * value is 'true', allowed values are 'true' and 'false').
      *
+     * \b columns : defines colums to be shown in reconstruction list. XML child element names follow
+     * ::fwData::Reconstruction serialization attribute names.
+     * The attribute 'view' is optional and can has the following values :
+     *  - positive : a numeric value is displayed only if it is positive. Otherwise, 'Unknown' is displayed.
+     *
      * @throw fwTools::Failed
      */
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
-    typedef std::map< std::string, SPTR(::fwData::Reconstruction) > OrganNameReconstruction;
+    typedef std::map< std::string, ValueView* > DisplayedInformation;
 
     void updateReconstructions();
 
+    void fillTree();
+
+    static const ::fwCom::Signals::SignalKeyType s_REC_DISPLAY_MODIFIED__SIG;
+    typedef ::fwCom::Signal< void (bool) > RecDisplayModifiedSignalType;
+    static const ::fwCom::Signals::SignalKeyType s_RECONSTRUCTION_SELECTED_SIG;
+    typedef ::fwCom::Signal< void (::fwData::Object::sptr) > ReconstructionSelectedSignalType;
+    static const ::fwCom::Signals::SignalKeyType s_EMPTIED_SELECTION_SIG;
+    typedef ::fwCom::Signal< void () > EmptiedSelectionSignalType;
+    static const ::fwCom::Slots::SlotKeyType s_SHOW_RECONSTRUCTIONS_SLOT;
+    typedef ::fwCom::Slot< void (bool) > ShowReconstructionsSlotType;
+
+
 protected Q_SLOTS:
 
     /// Slot called when new current item is setted in m_organChoice
-    void onCurrentItemChanged ( QListWidgetItem * current, QListWidgetItem * previous );
+    void onCurrentItemChanged ( QTreeWidgetItem * current, QTreeWidgetItem * previous );
+
+    void onCurrentItemChanged ( QTreeWidgetItem * current, int column );
 
     void onShowReconstructions(int state);
 
-    void onOrganChoiceVisibility(QListWidgetItem * item);
+    void onOrganChoiceVisibility(QTreeWidgetItem * item, int column);
+
+    void onCheckAllCheckBox();
+    void onUnCheckAllCheckBox();
 
 private:
 
+    /// SLOT: Show (or hide) reconstructions
+    void showReconstructions(bool show);
+
     void refreshVisibility();
+
+    void onCheckAllBoxes(bool visible);
+
+    QPointer<QPushButton> m_checkAllButton;
+    QPointer<QPushButton> m_unCheckAllButton;
+
     QPointer< QCheckBox > m_showCheckBox;
-    QPointer< QListWidget > m_organChoice;
-    OrganNameReconstruction m_map ;
+    QPointer< QTreeWidget > m_tree;
+    DisplayedInformation m_displayedInfo;
 
     bool m_enableHideAll;
 
+    /// Signal emitted when m_showCheckBox value changed
+    RecDisplayModifiedSignalType::sptr m_sigRecDisplayModified;
+
+    /// Signal emitted when a reconstruction is selected
+    ReconstructionSelectedSignalType::sptr m_sigReconstructionSelected;
+
+    /// Signal emitted when we clean the list
+    EmptiedSelectionSignalType::sptr m_sigEmptiedSelection;
+
+    /// Slot to show (or hide) reconstructions
+    ShowReconstructionsSlotType::sptr m_slotShowReconstuctions;
 };
 
 } // namespace editor
 } // namespace uiMedData
 
-#endif /*_UIMEDDATAQT_EDITOR_SMODELSERIESLIST_HPP__*/
+#endif /*__UIMEDDATAQT_EDITOR_SMODELSERIESLIST_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SOrganTransformation.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SOrganTransformation.hpp
index db14173..677ada6 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SOrganTransformation.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SOrganTransformation.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEDDATAQT_EDITOR_SORGANTRANSFORMATION_HPP__
-#define _UIMEDDATAQT_EDITOR_SORGANTRANSFORMATION_HPP__
+#ifndef __UIMEDDATAQT_EDITOR_SORGANTRANSFORMATION_HPP__
+#define __UIMEDDATAQT_EDITOR_SORGANTRANSFORMATION_HPP__
 
 #include <QPointer>
 #include <QObject>
@@ -24,31 +24,56 @@ class QListWidget;
 class QPushButton;
 class QListWidgetItem;
 class QComboBox;
+class QCheckBox;
 
 namespace uiMedData
 {
 namespace editor
 {
 
-// SOrganTransformation
-class UIMEDDATAQT_CLASS_API SOrganTransformation : public QObject, public ::gui::editor::IEditor
+/**
+ * @brief Display the organs list and allow an interactive selection to set the corresponding meshes in a composite
+ */
+class UIMEDDATAQT_CLASS_API SOrganTransformation : public QObject,
+                                                   public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 public:
 
     fwCoreServiceClassDefinitionsMacro( (SOrganTransformation)(::gui::editor::IEditor) );
 
-    UIMEDDATAQT_API              SOrganTransformation() throw();
-    UIMEDDATAQT_API virtual     ~SOrganTransformation() throw();
+    /// constructor
+    UIMEDDATAQT_API SOrganTransformation() throw();
+    /// destructor
+    UIMEDDATAQT_API virtual ~SOrganTransformation() throw();
+
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect ModelSeries::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG to this::s_UPDATE_SLOT
+     * Connect ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG to this::s_UPDATE_SLOT
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
+    /**
+     * @brief configures the service
+     * @code{.xml}
+       <service impl="::uiMedData::editor::SOrganTransformation" type="::gui::editor::IEditor" autoConnect="yes">
+           <TMSUid>MESHDB_UID</TMSUid>
+       </service>
+       @endcode
+     * - \b TMSUid = composite uid
+     */
     UIMEDDATAQT_API virtual void configuring() throw( ::fwTools::Failed );
     UIMEDDATAQT_API virtual void starting()    throw( ::fwTools::Failed );
     UIMEDDATAQT_API virtual void stopping()    throw( ::fwTools::Failed );
     UIMEDDATAQT_API virtual void swapping()    throw( ::fwTools::Failed );
     UIMEDDATAQT_API virtual void updating()    throw( ::fwTools::Failed );
-    UIMEDDATAQT_API virtual void receiving( ::fwServices::ObjectMsg::csptr msg ) throw( ::fwTools::Failed );
     UIMEDDATAQT_API virtual void info    ( ::std::ostream& stream );
 
 private Q_SLOTS:
@@ -57,8 +82,8 @@ private Q_SLOTS:
     void onSaveClick();
     void onLoadClick();
 
-    //test
-    void onTestClick();
+    /// Slot to check all the organs of the list
+    void onSelectAllChanged(int state);
 
 private:
 
@@ -71,15 +96,13 @@ private:
     typedef ::std::map< ::std::string, InnerMatMappingType> SaveMappingType;
 
     ReconstructionMapType m_reconstructionMap;
-    ::std::string      m_TMSUid;
+    ::std::string m_TMSUid;
     QPointer< QPushButton > m_saveButton;
     QPointer< QPushButton > m_loadButton;
     QPointer< QPushButton > m_resetButton;
     QPointer< QListWidget > m_reconstructionListBox;
     QPointer< QComboBox > m_saveSelectionComboBox;
-
-    //for testing
-    QPointer< QPushButton > m_testButton;
+    QPointer< QCheckBox > m_selectAllCheckBox;
 
     //variables for the functionalities of saving & loading
     SaveMappingType m_saveListing;
@@ -90,4 +113,4 @@ private:
 } // namespace uiMedData
 
 
-#endif // _UIMEDDATAQT_EDITOR_SORGANTRANSFORMATION_HPP__
+#endif // __UIMEDDATAQT_EDITOR_SORGANTRANSFORMATION_HPP__
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSelector.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSelector.hpp
index 3699948..a647133 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSelector.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSelector.hpp
@@ -1,23 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIMEDDATAQT_EDITOR_SSELECTOR_HPP_
-#define _UIMEDDATAQT_EDITOR_SSELECTOR_HPP_
+#ifndef __UIMEDDATAQT_EDITOR_SSELECTOR_HPP__
+#define __UIMEDDATAQT_EDITOR_SSELECTOR_HPP__
 
-#include <QAbstractItemView>
-#include <QPointer>
-#include <QObject>
-#include <QVector>
+
+#include "uiMedDataQt/config.hpp"
+#include "uiMedDataQt/widget/Selector.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
 
 #include <fwData/Vector.hpp>
 
+#include <fwMedData/SeriesDB.hpp>
+
 #include <gui/editor/IEditor.hpp>
 
-#include "uiMedDataQt/config.hpp"
-#include "uiMedDataQt/widget/Selector.hpp"
+#include <QAbstractItemView>
+#include <QPointer>
+#include <QObject>
+#include <QVector>
 
 
 namespace uiMedData
@@ -27,27 +33,69 @@ namespace editor
 /**
  * @brief   This editor shows information about the medical data. It allows to manipulate
  *          (select, erase, ...) studies and series.
- * @class   SSelector
- * 
- * @date    2013.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+    <service uid="..." type="::uiMedData::editor::SSelector">
+        <inout key="seriesDB" uid="..." />
+        <inout key="selection" uid="..." />
+        <selectionMode>single|extended</selectionMode>
+        <allowedRemove>yes|no</allowedRemove>
+        <insertMode>yes|no</insertMode>
+        <icons>
+            <icon series="..." icon="..." />
+            <icon series="..." icon="..." />
+        </icons>
+    </service>
+   @endcode
+ * @subsection In-Out In-Out
+ * - \b seriesDB [::fwMedData::SeriesDB]: seriesDB on which the editor operates.
+ * - \b selection [::fwData::Vector]: defines the id of the ::fwData::Vector where the selection will be put or get.
+ * @subsection Configuration Configuration
+ * - \b selectionMode : defines the selection mode for the series, among {"single", "extended"}, where extended means "multiple"
+ * - \b allowedRemove : allows user to remove series, among {"yes", "no"}
+ * - \b insertMode : only allows selection of uiMedData::InsertSeries, among {"yes", "no"}
+ * - \b icons : defines the icon to associate for a series
+ *    - \b series : the series classname, e.g. {::fwMedData::ImageSeries, ::fwMedData::ModelSeries, ...}
+ *    - \b icon : the icon path
  */
-class UIMEDDATAQT_CLASS_API SSelector : public QObject, public ::gui::editor::IEditor
+class UIMEDDATAQT_CLASS_API SSelector : public QObject,
+                                        public ::gui::editor::IEditor
 {
-    Q_OBJECT
-public :
-    fwCoreServiceClassDefinitionsMacro ( (SSelector)(::gui::editor::IEditor) ) ;
+Q_OBJECT
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SSelector)(::gui::editor::IEditor) );
 
     /// Constructor
     UIMEDDATAQT_API SSelector();
 
     /// Destructor
-    UIMEDDATAQT_API virtual ~SSelector() throw() ;
+    UIMEDDATAQT_API virtual ~SSelector() throw();
 
     typedef ::fwCom::Signal< void ( SPTR( ::fwMedData::Series ) ) > SeriesDoubleClickedSignalType;
 
     /// Key in m_signals map of signal m_sigSeriesDoubleClicked
     UIMEDDATAQT_API static const ::fwCom::Signals::SignalKeyType s_SERIES_DOUBLE_CLICKED_SIG;
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect SeriesDB::s_ADDED_SERIES_SIG to this::s_ADD_SERIES_SLOT
+     * Connect SeriesDB::s_REMOVED_SERIES_SIG to this::s_REMOVE_SERIES_SLOT
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect SeriesDB::s_ADDED_SERIES_SIG to this::s_ADD_SERIES_SLOT
+     * Connect SeriesDB::s_REMOVED_SERIES_SIG to this::s_REMOVE_SERIES_SLOT
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsMap getAutoConnections() const;
+
 protected:
 
     /// Installs GUI : create container and add selector.
@@ -56,35 +104,13 @@ protected:
     /// Destroys GUI.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /**
-     *
-     * @verbatim
-     <service uid="selector" impl="::uiMedData::editor::SSelector" type="::gui::editor::IEditor" autoConnect="yes">
-        <selectionId>selections</selectionId>
-        <selectionMode>single|extended</selectionMode>
-        <allowedRemove>yes|no</allowedRemove>
-        <insertMode>yes|no</insertMode>
-     </service>
-     @endverbatim
-     * - \b selectionId : defines the fwId of the ::fwData::Vector where the selection will be put or get.
-     * - \b selectionMode : defines the selection mode for the series
-     * - \b allowedRemove : allows user to remove series
-     * - \b insertMode : only allows selection of uiMedData::InsertSeries
-     */
+    /// Configures the service according to the xml tags found.
     virtual void configuring() throw (::fwTools::Failed);
 
     /// Fill selector with the series contained in SeriesDB.
     virtual void updating() throw (::fwTools::Failed);
 
-    /**
-     * @brief Manages events (::fwComEd::SeriesDBMsg::ADDED_OBJECTS, ::fwComEd::SeriesDBMsg::REMOVED_OBJECTS)
-     *  This method adds/removes series in the selector widget.
-     */
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    virtual void info( std::ostream &_sstream );
-
-
+    virtual void info( std::ostream& _sstream );
 
 protected Q_SLOTS:
 
@@ -102,7 +128,7 @@ protected Q_SLOTS:
      * @param[in] index index of the clicked item in the selector.
      * @todo  Manages double click on a study.
      */
-    void onDoubleClick(const QModelIndex &index);
+    void onDoubleClick(const QModelIndex& index);
 
     /**
      * @brief Removes series from seriesDB and notify.
@@ -110,7 +136,26 @@ protected Q_SLOTS:
      */
     void onRemoveSeries(QVector< ::fwMedData::Series::sptr > selection);
 
-private :
+private:
+
+    /**
+     * @name Slots
+     * @{
+     */
+    static const ::fwCom::Slots::SlotKeyType s_ADD_SERIES_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_REMOVE_SERIES_SLOT;
+    typedef ::fwCom::Slot<void (::fwMedData::SeriesDB::ContainerType)> RemoveSeriesSlotType;
+
+    /// Slot: add series into the selector
+    void addSeries(::fwMedData::SeriesDB::ContainerType addedSeries);
+    /// Slot: remove series from the selector
+    void removeSeries(::fwMedData::SeriesDB::ContainerType removedSeries);
+
+    /// Slot used to remove series from the selector
+    RemoveSeriesSlotType::sptr m_slotRemoveSeries;
+    /**
+     * @}
+     */
 
     /// Returns current selection vector given by its fwID m_selectionId.
     ::fwData::Vector::sptr getSelection();
@@ -124,6 +169,9 @@ private :
     /// Signal emitted when there is a double click on a series
     SeriesDoubleClickedSignalType::sptr m_sigSeriesDoubleClicked;
 
+    /// Map containing the specified icons for a series (map\<series classname, icon path\>)
+    ::uiMedData::widget::Selector::SeriesIconType m_seriesIcons;
+
     /// Permits the user to remove series. Default is yes
     bool m_allowedRemove;
 
@@ -137,5 +185,5 @@ private :
 } // namespace editor
 } // namespace uiMedData
 
-#endif // _UIMEDDATAQT_EDITOR_SSELECTOR_HPP_
+#endif // __UIMEDDATAQT_EDITOR_SSELECTOR_HPP__
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSeries.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSeries.hpp
index 3420d84..070fdcd 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSeries.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/editor/SSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,10 +23,10 @@ namespace uiMedData
 
 namespace widget
 {
-    class PatientEditor;
-    class StudyEditor;
-    class EquipmentEditor;
-    class SeriesEditor;
+class PatientEditor;
+class StudyEditor;
+class EquipmentEditor;
+class SeriesEditor;
 }
 
 namespace editor
@@ -34,40 +34,50 @@ namespace editor
 /**
  * @brief Shows and edit fwMedData::Series information
  */
-class UIMEDDATAQT_CLASS_API SSeries : public QObject, public ::gui::editor::IEditor
+class UIMEDDATAQT_CLASS_API SSeries : public QObject,
+                                      public ::gui::editor::IEditor
 {
-    Q_OBJECT
-public :
+Q_OBJECT
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SSeries)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSeries)(::gui::editor::IEditor) );
 
     /// Constructor
     UIMEDDATAQT_API SSeries();
 
     /// Destructor
-    UIMEDDATAQT_API virtual ~SSeries() throw() ;
+    UIMEDDATAQT_API virtual ~SSeries() throw();
 
     /**
      * @brief Signal type and key triggered when the series has been exported to related series DB.
      * @{ */
-    typedef ::fwCom::Signal< void() > SeriesExportedSignalType;
+    typedef ::fwCom::Signal< void () > SeriesExportedSignalType;
     UIMEDDATAQT_API static const ::fwCom::Signals::SignalKeyType s_SERIES_EXPORTED_SIG;
     /**  @} */
 
     /**
      * @brief Signal type and key triggered when the service export ability changes
      * @{ */
-    typedef ::fwCom::Signal< void( bool ) > CanExportSignalType;
+    typedef ::fwCom::Signal< void ( bool ) > CanExportSignalType;
     UIMEDDATAQT_API static const ::fwCom::Signals::SignalKeyType s_CAN_EXPORT_SIG;
     /**  @} */
 
     /**
      * @brief Slot triggering export
      * @{ */
-    typedef ::fwCom::Slot<void()> ExportSlotType;
+    typedef ::fwCom::Slot<void ()> ExportSlotType;
     UIMEDDATAQT_API static const ::fwCom::Slots::SlotKeyType s_EXPORT_SLOT;
     /**  @} */
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect SeriesDB::s_ADDED_SERIES_SIG to this::s_UPDATE_SLOT
+     * Connect SeriesDB::s_REMOVED_SERIES_SIG to this::s_UPDATE_SLOT
+     */
+    UIMEDDATAQT_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     /// Installs GUI : create container and add selector.
@@ -78,13 +88,13 @@ protected:
 
     /**
      *
-     * @verbatim
-     <service uid="selector" impl="::uiMedData::editor::SSeries" type="::gui::editor::IEditor" autoConnect="yes">
+     * @code{.xml}
+       <service uid="selector" impl="::uiMedData::editor::SSeries" type="::gui::editor::IEditor" autoConnect="yes">
         <selectionId>selections</selectionId>
         <selectionMode>single|extended</selectionMode>
         <allowedRemove>yes|no</allowedRemove>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * - \b selectionId : defines the fwId of the ::fwData::Vector where the selection will be put or get.
      * - \b selectionMode : defines the selection mode for the series
      * - \b allowedRemove : allows user to remove series
@@ -94,12 +104,6 @@ protected:
     /// Fill selector with the series contained in SeriesDB.
     virtual void updating() throw (::fwTools::Failed);
 
-    /**
-     * @brief Manages events (::fwComEd::SeriesDBMsg::ADDED_OBJECTS, ::fwComEd::SeriesDBMsg::REMOVED_OBJECTS)
-     *  This method adds/removes series in the selector widget.
-     */
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
 protected Q_SLOTS:
 
     /// Triggered when export button is clicked
@@ -140,5 +144,5 @@ private:
 } // namespace editor
 } // namespace uiMedData
 
-#endif // _UIMEDDATAQT_EDITOR_SSERIES_HPP_
+#endif // __UIMEDDATAQT_EDITOR_SSERIES_HPP__
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/namespace.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/namespace.hpp
index 7991416..9564b22 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/namespace.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,42 +8,27 @@
 #define __UIMEDDATAQT_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace uiMedData contains editors for medical data.
- * @namespace   uiMedData
- * 
- * @date        2009-2013.
- *
+ * @brief The namespace uiMedData contains editors for medical data.
  */
 namespace uiMedData
 {
 
 /**
- * @brief       The namespace ::uiMedData::action contains actions interacting on medical data.
- * @namespace   ::uiMedData::action
- * @date        2013.
- *
+ * @brief The namespace ::uiMedData::action contains actions interacting on medical data.
  */
 namespace action
 {
 }
 
 /**
- * @brief       The namespace ::uiMedData::widget contains widgets for medical data.
- * @namespace   ::uiMedData::widget
- * 
- * @date        2009-2013.
- *
+ * @brief The namespace ::uiMedData::widget contains widgets for medical data.
  */
 namespace widget
 {
 }
 
 /**
- * @brief       The namespace ::uiMedData::editor contains editors for medical data.
- * @namespace   ::uiMedData::editor
- * 
- * @date        2009-2013.
- *
+ * @brief The namespace ::uiMedData::editor contains editors for medical data.
  */
 namespace editor
 {
@@ -51,4 +36,13 @@ namespace editor
 
 
 }
+
+
+/**
+ * @brief Qt implementation of uiMedData
+ */
+namespace uiMedDataQt
+{
+}
+
 #endif /* __UIMEDDATAQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/ActivityDataView.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/ActivityDataView.hpp
new file mode 100644
index 0000000..d3c2b10
--- /dev/null
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/ActivityDataView.hpp
@@ -0,0 +1,149 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __UIMEDDATAQT_WIDGET_ACTIVITYDATAVIEW_HPP__
+#define __UIMEDDATAQT_WIDGET_ACTIVITYDATAVIEW_HPP__
+
+#include "uiMedDataQt/config.hpp"
+
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwData/Composite.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+#include <QEvent>
+#include <QPointer>
+#include <QTabWidget>
+#include <QTreeWidget>
+
+namespace uiMedData
+{
+namespace widget
+{
+
+/**
+ * @brief This class displays a tab widget allowing to select the required data to create an activity.
+ */
+class UIMEDDATAQT_CLASS_API ActivityDataView : public QTabWidget
+{
+Q_OBJECT;
+
+public:
+
+    typedef std::map< std::string, std::string > ObjectIconMapType;
+
+    UIMEDDATAQT_API ActivityDataView(QWidget *parent = 0);
+
+    UIMEDDATAQT_API virtual ~ActivityDataView();
+
+    /// Identifier of the role UID in the series tree item.
+    UIMEDDATAQT_API static const int s_UID_ROLE;
+
+    enum class ColumnType : int
+    {
+        NAME,
+        TYPE,
+        DESC,
+        PATIENT,
+        STUDY
+    };
+
+    /// Fill tab widget with activity info (create on item by activity parameter)
+    UIMEDDATAQT_API void fillInformation(const ::fwActivities::registry::ActivityInfo & info);
+
+    /// Fill widget from existing activity info (create on item by activity parameter)
+    UIMEDDATAQT_API void fillInformation(const ::fwMedData::ActivitySeries::sptr & actSeries);
+
+    /**
+     * @brief Check if all the required data are selected and fill activity data composite.
+     * @return True if data are correct, else false and errorMsg contains detailled error.
+     * @param[in] actSeries activitySeries to fill with the selected data
+     * @param[out] errorMsg it will contain the error information if the data are not correct.
+     *
+     * It checks if all required data are present in the widget, and create the activity data composite.
+     * Then it checks if the activity parameters are accessible from the composite of data (it checks if the object are
+     * accessible from the sesh@ paths.
+     */
+    UIMEDDATAQT_API bool checkAndComputeData(const ::fwMedData::ActivitySeries::sptr & actSeries,
+                                             std::string & errorMsg);
+
+    /**
+     * @brief Check if the current required data are selected And return this data.
+     * @return return the data if it is correct, else return a nullptr and errorMsg contains detailled error.
+     * @param[in] index index of the requirement to check (this index also correspond to a tab).
+     * @param[out] errorMsg it will contain the error information if the data are not correct.
+     */
+    UIMEDDATAQT_API ::fwData::Object::sptr checkData(size_t index, std::string & errorMsg);
+
+    /// Set io selector configuration used to import data
+    void setIOSelectorConfig(const std::string & ioSelectorSrvConfig)
+    {
+        m_ioSelectorSrvConfig = ioSelectorSrvConfig;
+    }
+
+    /// Remove all the widget tabs.
+    UIMEDDATAQT_API virtual void clear();
+
+    /// Set the map that defines the icon associated to an object.
+    void setObjectIconAssociation(const ObjectIconMapType & objectIcons)
+    {
+        m_objectIcons = objectIcons;
+    }
+
+protected:
+
+    /// Catch KeyEvent and DropEvent from tree widgets
+    bool eventFilter(QObject *obj, QEvent *event);
+
+private:
+
+    typedef std::vector< ::fwData::Object::sptr > ImportedObjectType;
+    typedef std::vector<QPointer<QTreeWidget> > TreeContainerType;
+
+    /// Import an object required for the selected tab
+    void importObject();
+
+    /// Create a new object for the selected tab (just use ::fwData::factory::New(type))
+    void createNewObject();
+
+    /// Call SIOSelector service to read the object. Return true if the object is properly read.
+    bool readObject(::fwData::Object::sptr obj);
+
+    /// Removed the selected object in the current tree
+    void removeSelectedObjects();
+
+    /// Remove all the objects in the current tree
+    void clearTree();
+
+    /**
+     * @brief Called on tree item double click : allows to edit the current data.
+     * @note Currently it is only available for simple types (ie ::fwData::String)
+     */
+    void onTreeItemDoubleClicked(QTreeWidgetItem *item, int column);
+
+    /**
+     * @brief Add the current item in the tree.
+     * @param index index used to find the associated tree widget
+     * @param obj object to add in the tree
+     */
+    void addObjectItem(size_t index, const ::fwData::Object::sptr &obj);
+
+    ::fwActivities::registry::ActivityInfo m_activityInfo; ///< activity information
+
+    std::string m_ioSelectorSrvConfig; ///< io selector config
+
+    ImportedObjectType m_importedObject; ///< refereces on the imported before to add them in the activity series.
+    TreeContainerType m_treeWidgets; ///< Register the tree widget of each tab.
+
+    ObjectIconMapType m_objectIcons; ///< Map defining the icon associated to an object.
+};
+
+
+} // namespace widget
+} // namespace uiMedData
+
+#endif // __UIMEDDATAQT_WIDGET_ACTIVITYDATAVIEW_HPP__
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/EquipmentEditor.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/EquipmentEditor.hpp
index fbc9c64..7fd21d1 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/EquipmentEditor.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/EquipmentEditor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,8 +18,8 @@ class QLineEdit;
 
 namespace fwMedData
 {
-    class Series;
-    class Equipment;
+class Series;
+class Equipment;
 }
 
 namespace uiMedData
@@ -34,7 +34,7 @@ namespace widget
  */
 class UIMEDDATAQT_CLASS_API EquipmentEditor : public QWidget
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
@@ -52,7 +52,7 @@ public:
 
     /// Check if the equipment information entered in UI is valid
     UIMEDDATAQT_API bool isValid() const;
-protected :
+protected:
 
     SPTR(::fwMedData::Series) m_series;
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/PatientEditor.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/PatientEditor.hpp
index 8c618b0..c795cbb 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/PatientEditor.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/PatientEditor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,8 +19,8 @@ class QComboBox;
 
 namespace fwMedData
 {
-    class Series;
-    class Patient;
+class Series;
+class Patient;
 }
 
 namespace uiMedData
@@ -35,7 +35,7 @@ namespace widget
  */
 class UIMEDDATAQT_CLASS_API PatientEditor : public QWidget
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
@@ -58,7 +58,7 @@ protected Q_SLOTS:
     void onNameChanged(const QString&);
     void onBirthChanged(const QString&);
 
-protected :
+protected:
 
     SPTR(::fwMedData::Series) m_series;
 
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/Selector.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/Selector.hpp
index 1420055..6e5609f 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/Selector.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/Selector.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -35,12 +35,15 @@ namespace widget
  */
 class UIMEDDATAQT_CLASS_API Selector : public QTreeView
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
     typedef QVector< ::fwMedData::Series::sptr > SeriesVectorType;
 
+    /// Map associating icons to series (map\<series classname, icon path\>)
+    typedef SelectorModel::SeriesIconType SeriesIconType;
+
     /// Constructor. Init tree view.
     UIMEDDATAQT_API Selector(QWidget *parent = 0);
 
@@ -69,6 +72,12 @@ public:
     /// Catch the delete key event and remove the selected items.
     UIMEDDATAQT_API void keyPressEvent(QKeyEvent * event);
 
+    /**
+     * @brief Sets the specific icons for series in selector.
+     * @param[in]  seriesIcons map\<series classname, icon path\>
+     */
+    UIMEDDATAQT_API void setSeriesIcons(const SeriesIconType &seriesIcons);
+
     /// Allows removing items or not.
     UIMEDDATAQT_API void setAllowedRemove(bool allowed);
 
@@ -103,7 +112,7 @@ protected Q_SLOTS:
      */
     void selectionChanged( const QItemSelection & selected, const QItemSelection & deselected );
 
-protected :
+protected:
 
     /**
      * @brief Returns all the Series associated to the selection.
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SelectorModel.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SelectorModel.hpp
index d141a9c..d7f6ca0 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SelectorModel.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SelectorModel.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -32,7 +32,7 @@ namespace widget
  */
 class UIMEDDATAQT_CLASS_API SelectorModel : public QStandardItemModel
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
@@ -50,6 +50,9 @@ public:
         SERIES      ///< Type to represent Series
     }ItemType;
 
+    /// Map associating icons to series (map\<series classname, icon path\>)
+    typedef std::map<std::string, std::string> SeriesIconType;
+
     /// Constructor. Inits the model.
     UIMEDDATAQT_API SelectorModel(QWidget *parent = 0);
 
@@ -72,7 +75,7 @@ public:
     UIMEDDATAQT_API void clear();
 
     /// Returns item flags with non editable flag
-    UIMEDDATAQT_API Qt::ItemFlags flags(const QModelIndex& index) const
+    Qt::ItemFlags flags(const QModelIndex& index) const
     {
         return (QStandardItemModel::flags(index) & ~Qt::ItemIsEditable);
     }
@@ -96,9 +99,16 @@ public:
     /// Returns the item representing the study.
     UIMEDDATAQT_API QStandardItem* findStudyItem(::fwMedData::Study::sptr study);
 
+    /**
+     * @brief Sets the specific icons for series in selector.
+     * @param[in]  seriesIcons map\<series classname, icon path\>
+     */
+    UIMEDDATAQT_API void setSeriesIcons(const SeriesIconType &seriesIcons);
+
     /// Sets if the selector must be in insert mode.
     UIMEDDATAQT_API void setInsertMode(bool insert);
 
+
 private:
 
     typedef std::map< ::fwMedData::DicomValueType, QStandardItem* > StudyUidItemMapType;
@@ -133,6 +143,9 @@ private:
 
     /// Sets if the selector is in insert mode (adding new series, forbid selection of existing series).
     bool m_insert;
+
+    /// Map containing the specified icons for a series (map\<series classname, icon path\>)
+    SeriesIconType m_seriesIcons;
 };
 
 
@@ -147,7 +160,7 @@ QStandardItem* SelectorModel::getInfo(T data, QString separator)
         str << *itr++;
         dataStr = QString::fromStdString(str.str());
 
-        for(;itr!= data.end(); ++itr)
+        for(; itr!= data.end(); ++itr)
         {
             str.str("");
             str << *itr;
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SeriesEditor.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SeriesEditor.hpp
index 67b7623..4267d10 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SeriesEditor.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/SeriesEditor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,7 +21,7 @@ class QPushButton;
 
 namespace fwMedData
 {
-    class Series;
+class Series;
 }
 
 namespace uiMedData
@@ -35,20 +35,25 @@ namespace widget
  */
 class ListInput : public QWidget
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
     /**
      * @name Constructor/Destructor
      * @{ */
     ListInput();
-    ~ListInput() {}
+    ~ListInput()
+    {
+    }
     /**  @} */
 
     /// Erases all items in the list
-    QListWidget* getListWidget() { return m_performingPhysiciansName; }
+    QListWidget* getListWidget()
+    {
+        return m_performingPhysiciansName;
+    }
 
-protected Q_SLOTS: 
+protected Q_SLOTS:
 
     /// Triggered when the add button is clicked, if the input text is not empty
     void onAddPhysician();
@@ -84,7 +89,7 @@ protected:
  */
 class UIMEDDATAQT_CLASS_API SeriesEditor : public QWidget
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
@@ -115,7 +120,7 @@ protected Q_SLOTS:
     /// Triggered when series description text changes
     void onDescChanged(const QString&);
 
-protected :
+protected:
 
     /// Series to edit information
     SPTR(::fwMedData::Series) m_series;
diff --git a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/StudyEditor.hpp b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/StudyEditor.hpp
index 0f96e75..d83d1dc 100644
--- a/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/StudyEditor.hpp
+++ b/Bundles/LeafUI/uiMedDataQt/include/uiMedDataQt/widget/StudyEditor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,8 +19,8 @@ class QLineEdit;
 
 namespace fwMedData
 {
-    class Series;
-    class Study;
+class Series;
+class Study;
 }
 
 namespace uiMedData
@@ -35,7 +35,7 @@ namespace widget
  */
 class UIMEDDATAQT_CLASS_API StudyEditor : public QWidget
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
@@ -65,7 +65,7 @@ protected Q_SLOTS:
     /// Triggered when study description text changes
     void onDescChanged(const QString&);
 
-protected :
+protected:
 
     SPTR(::fwMedData::Series) m_series;
 
diff --git a/Bundles/LeafUI/uiMedDataQt/rc/SeriesExportCfg.xml b/Bundles/LeafUI/uiMedDataQt/rc/SeriesExportCfg.xml
index 4cec537..d80856a 100644
--- a/Bundles/LeafUI/uiMedDataQt/rc/SeriesExportCfg.xml
+++ b/Bundles/LeafUI/uiMedDataQt/rc/SeriesExportCfg.xml
@@ -1,20 +1,16 @@
 <extension implements="::fwServices::registry::AppConfig">
     <id>SeriesExportCfg</id>
-    <type>parameters</type>
     <parameters>
         <param name="SERIESDB_UID" />
         <param name="SERIES_UID" />
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" /><!-- defined by SConfigLauncher -->
     </parameters>
 
     <config>
 
         <object type="::fwData::Composite">
 
-            <service uid="${GENERIC_UID}_notify_close" impl="::gui::action::ActionNotifyService" autoConnect="no">
-                <notify type="::fwServices::ObjectMsg" event="WINDOW_CLOSED" />
-            </service>
-
-            <service uid="${GENERIC_UID}_seriesExportFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="yes">
+            <service uid="${GENERIC_UID}_seriesExportFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::SDefaultFrame" autoConnect="yes">
                 <window onclose="notify" />
                 <gui>
                     <frame>
@@ -27,7 +23,7 @@
                 </registry>
             </service>
 
-            <service uid="${GENERIC_UID}_seriesExportView" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
+            <service uid="${GENERIC_UID}_seriesExportView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
                 <gui>
                     <layout type="::fwGui::LineLayoutManager">
                         <orientation value="vertical" />
@@ -68,14 +64,12 @@
                 </object>
             </item>
 
-            <connect>
+            <proxy channel="${CLOSE_CONFIG_CHANNEL}">
                 <signal>${GENERIC_UID}_selectedSeriesEditor/seriesExported</signal>
-                <slot>${GENERIC_UID}_notify_close/update</slot>
-            </connect>
+            </proxy>
 
             <start uid="${GENERIC_UID}_seriesExportFrame" />
             <start uid="${GENERIC_UID}_sdbInitializer" />
-            <start uid="${GENERIC_UID}_notify_close" />
 
             <update uid="${GENERIC_UID}_selector" />
             <update uid="${GENERIC_UID}_sdbInitializer" />
diff --git a/Bundles/LeafUI/uiMedDataQt/rc/plugin.xml b/Bundles/LeafUI/uiMedDataQt/rc/plugin.xml
index bdc3180..b90ba2a 100644
--- a/Bundles/LeafUI/uiMedDataQt/rc/plugin.xml
+++ b/Bundles/LeafUI/uiMedDataQt/rc/plugin.xml
@@ -1,12 +1,10 @@
-<plugin id="uiMedDataQt" class="::uiMedDataQt::Plugin">
+<plugin id="uiMedDataQt" class="::uiMedDataQt::Plugin" version="@DASH_VERSION@">
     <library name="uiMedDataQt" />
 
     <requirement id="dataReg" />
     <requirement id="servicesReg" />
     <requirement id="gui" />
-    <requirement id="visuVTKAdaptor" />
     <requirement id="uiImageQt" />
-    <requirement id="ctrlSelection" />
 
     <xi:include href="SeriesExportCfg.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
 
@@ -27,7 +25,7 @@
         <service>::uiMedData::SSeriesViewer</service>
         <object>::fwData::Vector</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
         <service>::uiMedData::action::SExportSeries</service>
@@ -45,118 +43,47 @@
         <service>::uiMedData::editor::SModelSeriesList</service>
         <object>::fwMedData::ModelSeries</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::gui::editor::IEditor</type>
         <service>::uiMedData::editor::SOrganTransformation</service>
         <object>::fwMedData::ModelSeries</object>
     </extension>
 
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>2DSimpleConfig</id>
-        <type>parameters</type>
-        <parameters>
-            <param name="GENERIC_UID" />
-            <param name="WID_PARENT" />
-            <param name="objectID" />
-            <param name="imageID" />
-        </parameters>
-        <config>
-            <object type="::fwData::Composite">
-
-                <service uid="${GENERIC_UID}_mainview" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no">
-                    <gui>
-                        <layout type="::fwGui::CardinalLayoutManager">
-                            <view align="center" />
-                            <view align="bottom" minWidth="200" minHeight="30" resizable="no" />
-                        </layout>
-                    </gui>
-                    <registry>
-                        <parent wid="${WID_PARENT}" />
-                        <view sid="${GENERIC_UID}_gs" start="yes" />
-                        <view sid="${GENERIC_UID}_sliderIndexEditor" start="yes" />
-                    </registry>
-                </service>
-
-                <service uid="${GENERIC_UID}_gs" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                    <scene>
-                        <picker id="picker" vtkclass="fwVtkCellPicker" />
-                        <renderer id="default" background="0.0" />
-                        <adaptor id="renderAdaptor" class="::visuVTKAdaptor::Render" objectId="self">
-                            <config renderer="default" picker="" />
-                        </adaptor>
-                        <adaptor id="interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
-                            <config renderer="default" style="InteractorStyle2DForNegato" />
-                        </adaptor>
-                        <adaptor id="imageText" class="::visuVTKAdaptor::ImageText" objectId="image">
-                            <config renderer="default" picker="picker" text="" color="#FFFFFF" />
-                        </adaptor>
-                        <adaptor id="seriesAdaptor" class="::visuVTKAdaptor::ImageSeries" objectId="imageSeries">
-                            <config renderer="default" picker="picker" autoresetcamera="yes" mode="2D" slices="1" sliceIndex="axial" />
-                        </adaptor>
-                        <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="imageSeries">
-                            <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
-                        </adaptor>
-                    </scene>
-                </service>
-
-                <item key="imageSeries">
-                    <object type="::fwMedData::ImageSeries" uid="${objectID}" src="ref">
-                    </object>
-                </item>
-
-                <item key="image">
-                    <object type="::fwData::Image" uid="${imageID}" src="ref">
-                        <service uid="${GENERIC_UID}_imageDumpLocker" impl="::ctrlMemory::LockDumpSrv" type="::fwServices::IController" autoConnect="no" />
-                        <service uid="${GENERIC_UID}_medicalImgConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
-                        <service uid="${GENERIC_UID}_sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
-                            <sliceIndex>axial</sliceIndex>
-                        </service>
-                    </object>
-                </item>
-
-                <start uid="${GENERIC_UID}_imageDumpLocker" />
-                <start uid="${GENERIC_UID}_medicalImgConverter" />
-                <start uid="${GENERIC_UID}_mainview" />
-            </object>
-        </config>
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::gui::editor::IEditor</type>
+        <service>::uiMedData::editor::SActivityWizard</service>
+        <object>::fwMedData::SeriesDB</object>
     </extension>
 
-    <extension implements="::fwServices::registry::AppConfig">
-        <id>3DSimpleConfig</id>
-        <type>parameters</type>
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>ActivityCreatorConfig</id>
         <parameters>
             <param name="GENERIC_UID" />
             <param name="WID_PARENT" />
+            <param name="SERIESDB" />
             <param name="objectID" />
         </parameters>
+        <desc>Configuration to update the given activity series.</desc>
         <config>
-            <object type="::fwData::Composite">
-                <service uid="${GENERIC_UID}_gs" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender" autoConnect="yes">
-                    <registry>
-                        <parent wid="${WID_PARENT}" />
-                    </registry>
-                    <scene>
-                        <picker id="picker" vtkclass="fwVtkCellPicker" />
-                        <renderer id="default" background="0.0" />
-
-                        <adaptor id="modelAdaptor" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
-                            <config renderer="default" picker="picker" autoresetcamera="yes" />
-                        </adaptor>
-
-                        <adaptor id="nameAdaptor" class="::visuVTKAdaptor::Text" objectId="modelSeries">
-                            <config renderer="default" text="@patient.name" fontSize="15" hAlign="right" vAlign="top" />
-                        </adaptor>
-                    </scene>
-                </service>
-                
-                <item key="modelSeries">
-                    <object type="::fwMedData::ModelSeries" uid="${objectID}" src="ref">
-                    </object>
-                </item>
-                
-                <start uid="${GENERIC_UID}_gs" />
-            </object>
+            <object uid="${SERIESDB}" type="::fwMedData::SeriesDB" src="ref" />
+            <object uid="${objectID}" type="::fwMedData::ActivitySeries" src="ref" />
+
+            <service uid="activityCreator" type="::uiMedData::editor::SActivityWizard">
+                <inout key="seriesDB" uid="${SERIESDB}" />
+                <inout key="activitySeries" uid="${objectID}" />
+                <ioSelectorConfig>SDBReaderIOSelectorConfig</ioSelectorConfig>
+                <icons>
+                    <icon type="::fwMedData::ImageSeries" icon="@BUNDLE_PREFIX@/media_0-1/icons/ImageSeries.svg" />
+                    <icon type="::fwMedData::ModelSeries" icon="@BUNDLE_PREFIX@/media_0-1/icons/ModelSeries.svg" />
+                </icons>
+                <registry>
+                    <parent wid="${WID_PARENT}" />
+                </registry>
+            </service>
+
+            <start uid="activityCreator" />
+            <update uid="activityCreator" />
         </config>
     </extension>
 </plugin>
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/InsertSeries.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/InsertSeries.cpp
index 10acb49..e00fb80 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/InsertSeries.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/InsertSeries.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,14 +15,15 @@ fwDataRegisterMacro( ::uiMedData::InsertSeries );
 namespace uiMedData
 {
 
-InsertSeries::InsertSeries(::fwData::Object::Key key): Series(key)
+InsertSeries::InsertSeries(::fwData::Object::Key key) : Series(key)
 {
 }
 
 //------------------------------------------------------------------------------
 
 InsertSeries::~InsertSeries()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -30,8 +31,8 @@ void InsertSeries::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     InsertSeries::csptr other = InsertSeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::shallowCopy(_source);
 }
@@ -42,8 +43,8 @@ void InsertSeries::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCo
 {
     InsertSeries::csptr other = InsertSeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::cachedDeepCopy(_source, cache);
 }
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/Plugin.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/Plugin.cpp
index 61bb77c..f639a20 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/Plugin.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace uiMedDataQt
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiMedDataQt::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiMedDataQt
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/SSeriesViewer.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/SSeriesViewer.cpp
index d0f87a1..3b85ef3 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/SSeriesViewer.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/SSeriesViewer.cpp
@@ -1,33 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "uiMedDataQt/SSeriesViewer.hpp"
+
 #include <fwCore/base.hpp>
 
-#include <fwData/Vector.hpp>
 #include <fwData/String.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include <fwComEd/VectorMsg.hpp>
+#include <fwData/Vector.hpp>
 
 #include <fwDataCamp/getObject.hpp>
 
 #include <fwMedData/Series.hpp>
 
-#include "uiMedDataQt/SSeriesViewer.hpp"
-
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/AppConfig.hpp>
 
 namespace uiMedData
 {
 
 //------------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwServices::IController , ::uiMedData::SSeriesViewer , ::fwData::Vector);
+fwServicesRegisterMacro( ::fwServices::IController, ::uiMedData::SSeriesViewer, ::fwData::Vector);
 
 //------------------------------------------------------------------------------
 
@@ -58,19 +54,6 @@ void SSeriesViewer::starting() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SSeriesViewer::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::VectorMsg::csptr vectorMsg = ::fwComEd::VectorMsg::dynamicConstCast(msg);
-
-    if ( vectorMsg && (vectorMsg->hasEvent( ::fwComEd::VectorMsg::ADDED_OBJECTS )
-                      || vectorMsg->hasEvent( ::fwComEd::VectorMsg::REMOVED_OBJECTS ) ))
-    {
-        this->updating();
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void SSeriesViewer::stopping() throw(::fwTools::Failed)
 {
     if(m_configTemplateManager)
@@ -95,29 +78,29 @@ void SSeriesViewer::updating() throw(::fwTools::Failed)
     if(vector->size() == 1)
     {
         ::fwData::Object::sptr obj = vector->front();
-        std::string classname = obj->getClassname();
+        std::string classname             = obj->getClassname();
         SeriesConfigMapType::iterator itr = m_seriesConfigs.find(classname);
 
         if(itr != m_seriesConfigs.end())
         {
             SeriesConfigInfo info = itr->second;
-            std::string configId =  info.configId;
+            std::string configId  = info.configId;
 
             std::map< std::string, std::string > replaceMap;
             // Generate generic UID
             std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier( this->getID() );
             replaceMap["GENERIC_UID"] = genericUidAdaptor;
-            replaceMap["WID_PARENT"] = m_parentView;
-            replaceMap["objectID"] = obj->getID();
+            replaceMap["WID_PARENT"]  = m_parentView;
+            replaceMap["objectID"]    = obj->getID();
 
-            BOOST_FOREACH(const ReplaceValuesMapType::value_type &elt, info.extractValues)
+            for(const ReplaceValuesMapType::value_type &elt :  info.extractValues)
             {
                 ::fwData::Object::sptr object = ::fwDataCamp::getObject( obj, elt.second );
                 OSLM_ASSERT("Object from name "<< elt.second <<" not found", object);
                 replaceMap[elt.first] = object->getID();
             }
 
-            BOOST_FOREACH(const ReplaceValuesMapType::value_type &elt, info.parameters)
+            for(const ReplaceValuesMapType::value_type &elt :  info.parameters)
             {
                 SLM_ASSERT("Value '" << elt.first << "' already used in extracted values.",
                            replaceMap.find(elt.first) == replaceMap.end());
@@ -125,10 +108,8 @@ void SSeriesViewer::updating() throw(::fwTools::Failed)
             }
 
             // Init manager
-            ::fwRuntime::ConfigurationElement::csptr config =
-                   ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( configId, replaceMap );
-            m_configTemplateManager = ::fwServices::AppConfigManager::New();
-            m_configTemplateManager->setConfig( config );
+            m_configTemplateManager = ::fwServices::IAppConfigManager::New();
+            m_configTemplateManager->setConfig( configId, replaceMap );
 
             // Launch config
             m_configTemplateManager->launch();
@@ -142,8 +123,17 @@ void SSeriesViewer::configuring() throw(::fwTools::Failed)
 {
     std::vector < ::fwRuntime::ConfigurationElement::sptr > viewCfg = m_configuration->find("parentView");
     SLM_ASSERT("Missing tag 'parentView'", viewCfg.size() == 1);
-    m_parentView = viewCfg[0]->getValue();
-    SLM_ASSERT("'parentView' value must not be empty ", !m_parentView.empty());
+
+    if(this->isVersion2())
+    {
+        m_parentView = viewCfg[0]->getAttributeValue("wid");
+        SLM_ASSERT("'wid' attribute missing for tag 'parentView'.", !m_parentView.empty());
+    }
+    else
+    {
+        m_parentView = viewCfg[0]->getValue();
+        SLM_ASSERT("'parentView' value must not be empty ", !m_parentView.empty());
+    }
 
     std::vector < ::fwRuntime::ConfigurationElement::sptr > configsCfg = m_configuration->find("configs");
     SLM_ASSERT("Missing tag 'configs'", configsCfg.size() == 1);
@@ -151,7 +141,7 @@ void SSeriesViewer::configuring() throw(::fwTools::Failed)
     std::vector < ::fwRuntime::ConfigurationElement::sptr > config = configsCfg[0]->find("config");
     SLM_ASSERT("Missing tag 'config'", !config.empty());
 
-    BOOST_FOREACH(const ::fwRuntime::ConfigurationElement::sptr &elt, config)
+    for(const ::fwRuntime::ConfigurationElement::sptr &elt :  config)
     {
         SeriesConfigInfo info;
         info.configId = elt->getAttributeValue("id");
@@ -161,7 +151,7 @@ void SSeriesViewer::configuring() throw(::fwTools::Failed)
         OSLM_ASSERT("Type " << seriesType << " is already defined.",
                     m_seriesConfigs.find(seriesType)== m_seriesConfigs.end() );
 
-        BOOST_FOREACH(const ::fwRuntime::ConfigurationElement::sptr &extractElt, elt->find("extract"))
+        for(const ::fwRuntime::ConfigurationElement::sptr &extractElt :  elt->find("extract"))
         {
             std::string path = extractElt->getAttributeValue("path");
             SLM_ASSERT("'path' attribute must not be empty", !path.empty());
@@ -170,11 +160,15 @@ void SSeriesViewer::configuring() throw(::fwTools::Failed)
             info.extractValues[pattern] = path;
         }
 
-        BOOST_FOREACH(const ::fwRuntime::ConfigurationElement::sptr &param, elt->find("parameter"))
+        for(const ::fwRuntime::ConfigurationElement::sptr &param :  elt->find("parameter"))
         {
             std::string replace = param->getAttributeValue("replace");
             SLM_ASSERT("'replace' attribute must not be empty", !replace.empty());
             std::string by = param->getAttributeValue("by");
+            if(by.empty())
+            {
+                by = param->getAttributeValue("uid");
+            }
             SLM_ASSERT("'by' attribute must not be empty", !by.empty());
             info.parameters[replace] = by;
         }
@@ -186,4 +180,15 @@ void SSeriesViewer::configuring() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType SSeriesViewer::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Vector::s_ADDED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Vector::s_REMOVED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace uiMedData
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SExportSeries.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SExportSeries.cpp
index 025fc6f..7daafd2 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SExportSeries.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SExportSeries.cpp
@@ -1,25 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
+#include "uiMedDataQt/action/SExportSeries.hpp"
 
-#include <fwTools/Os.hpp>
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwServices/Base.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwComEd/helper/SeriesDB.hpp>
+#include <fwGui/dialog/InputDialog.hpp>
 
-#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/ActivitySeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
 
-#include <fwActivities/registry/Activities.hpp>
+#include <fwMedDataTools/helper/SeriesDB.hpp>
 
-#include <fwGui/dialog/InputDialog.hpp>
+#include <fwServices/macros.hpp>
+
+#include <fwTools/Os.hpp>
 
-#include "uiMedDataQt/action/SExportSeries.hpp"
 
 
 namespace uiMedData
@@ -29,12 +35,19 @@ namespace action
 {
 //------------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiMedData::action::SExportSeries , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiMedData::action::SExportSeries, ::fwMedData::SeriesDB );
+
+const ::fwCom::Slots::SlotKeyType SExportSeries::s_CHECK_ADDED_SERIES_SLOT   = "checkAddedSeries";
+const ::fwCom::Slots::SlotKeyType SExportSeries::s_CHECK_REMOVED_SERIES_SLOT = "CheckRemovesSeries";
+
+const static std::string s_SERIESDB_INOUT = "seriesDB";
 
 //------------------------------------------------------------------------------
 
 SExportSeries::SExportSeries()
 {
+    newSlot(s_CHECK_ADDED_SERIES_SLOT, &SExportSeries::checkAddedSeries, this);
+    newSlot(s_CHECK_REMOVED_SERIES_SLOT, &SExportSeries::checkRemovedSeries, this);
 }
 
 //------------------------------------------------------------------------------
@@ -45,55 +58,49 @@ SExportSeries::~SExportSeries() throw()
 
 //------------------------------------------------------------------------------
 
-void SExportSeries::info(std::ostream &_sstream )
+::fwServices::IService::KeyConnectionsMap SExportSeries::getAutoConnections() const
 {
-    // Update message
-    _sstream << std::string("SExportSeries");
+    KeyConnectionsMap connections;
+    connections.push( s_SERIESDB_INOUT, ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG, s_CHECK_ADDED_SERIES_SLOT );
+    connections.push( s_SERIESDB_INOUT, ::fwMedData::SeriesDB::s_REMOVED_SERIES_SIG, s_CHECK_REMOVED_SERIES_SLOT );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
 
-void SExportSeries::starting() throw(::fwTools::Failed)
+void SExportSeries::configuring() throw(::fwTools::Failed)
 {
-    this->actionServiceStarting();
-    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
-    BOOST_FOREACH( ::fwMedData::Series::sptr series, seriesDB->getContainer() )
+    this->::fwGui::IActionSrv::initialize();
+
+    if(!this->isVersion2())
     {
-        if(series == this->getSeries())
-        {
-            this->setIsExecutable(false);
-        }
+        std::vector < ::fwRuntime::ConfigurationElement::sptr > seriesCfg = m_configuration->find("seriesId");
+        m_seriesId = seriesCfg.front()->getValue();
+        SLM_ASSERT("seriesId must not be empty", !m_seriesId.empty());
     }
 }
 
 //------------------------------------------------------------------------------
 
-void SExportSeries::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void SExportSeries::starting() throw(::fwTools::Failed)
 {
-    ::fwComEd::SeriesDBMsg::csptr seriesDBMsg = ::fwComEd::SeriesDBMsg::dynamicConstCast(msg);
-
-    if ( seriesDBMsg && seriesDBMsg->hasEvent( ::fwComEd::SeriesDBMsg::ADDED_OBJECTS ) )
+    this->actionServiceStarting();
+    ::fwMedData::SeriesDB::sptr seriesDB;
+    if(this->isVersion2())
     {
-        ::fwData::Vector::sptr addedObject = seriesDBMsg->getAddedSeries();
-        BOOST_FOREACH( ::fwData::Object::sptr obj, addedObject->getContainer() )
-        {
-            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
-            if(series == this->getSeries())
-            {
-                this->setIsExecutable(false);
-            }
-        }
+        seriesDB = this->getInOut< ::fwMedData::SeriesDB>(s_SERIESDB_INOUT);
     }
-    if ( seriesDBMsg && seriesDBMsg->hasEvent( ::fwComEd::SeriesDBMsg::REMOVED_OBJECTS ) )
+    else
     {
-        ::fwData::Vector::sptr removedObject = seriesDBMsg->getRemovedSeries();
-        BOOST_FOREACH( ::fwData::Object::sptr obj, removedObject->getContainer() )
+        seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    }
+
+    for( ::fwMedData::Series::sptr series :  seriesDB->getContainer() )
+    {
+        if(series == this->getSeries())
         {
-            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
-            if(series == this->getSeries())
-            {
-                this->setIsExecutable(true);
-            }
+            this->setIsExecutable(false);
         }
     }
 }
@@ -109,7 +116,15 @@ void SExportSeries::stopping() throw(::fwTools::Failed)
 
 void SExportSeries::updating() throw(::fwTools::Failed)
 {
-    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    ::fwMedData::SeriesDB::sptr seriesDB;
+    if(this->isVersion2())
+    {
+        seriesDB = this->getInOut< ::fwMedData::SeriesDB>(s_SERIESDB_INOUT);
+    }
+    else
+    {
+        seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    }
     ::fwMedData::Series::sptr series = this->getSeries();
 
     std::string description = series->getDescription();
@@ -132,7 +147,7 @@ void SExportSeries::updating() throw(::fwTools::Failed)
     }
 
     description = ::fwGui::dialog::InputDialog::showInputDialog(
-            "Export activity", "Enter the series description", description);
+        "Export activity", "Enter the series description", description);
 
     if(!description.empty())
     {
@@ -146,38 +161,65 @@ void SExportSeries::updating() throw(::fwTools::Failed)
         series->setPerformingPhysiciansName(physicians);
         series->setDescription(description);
 
-        ::fwComEd::helper::SeriesDB seriesDBHelper(seriesDB);
+        ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
         seriesDBHelper.add(series);
-        seriesDBHelper.notify(this->getSptr());
+        seriesDBHelper.notify();
         this->setIsExecutable(false);
     }
-
 }
 
 //------------------------------------------------------------------------------
 
-void SExportSeries::configuring() throw(::fwTools::Failed)
+void SExportSeries::info(std::ostream& _sstream )
 {
-    this->::fwGui::IActionSrv::initialize();
+    // Update message
+    _sstream << std::string("SExportSeries");
+}
 
-    std::vector < ::fwRuntime::ConfigurationElement::sptr > seriesCfg = m_configuration->find("seriesId");
-    SLM_ASSERT("Missing tag 'seriesId'", !seriesCfg.empty());
+//------------------------------------------------------------------------------
 
-    m_seriesId = seriesCfg.front()->getValue();
-    SLM_ASSERT("seriesId must not be empty", !m_seriesId.empty());
+::fwMedData::Series::sptr SExportSeries::getSeries()
+{
+    ::fwMedData::Series::sptr series;
+
+    if(this->isVersion2())
+    {
+        series = this->getInOut< ::fwMedData::Series>("series");
+    }
+    else
+    {
+        SLM_ASSERT("Object " << m_seriesId << " doesn't exist", ::fwTools::fwID::exist(m_seriesId));
+        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_seriesId);
+        series                      = ::fwMedData::Series::dynamicCast(obj);
+        SLM_ASSERT("Object " << m_seriesId << " is not a '::fwMedData::Series'", series);
+    }
+    return series;
 }
 
 //------------------------------------------------------------------------------
 
-::fwMedData::Series::sptr SExportSeries::getSeries()
+void SExportSeries::checkAddedSeries(::fwMedData::SeriesDB::ContainerType addedSeries)
 {
-    SLM_ASSERT("Object " << m_seriesId << " doesn't exist", ::fwTools::fwID::exist(m_seriesId));
+    for( ::fwMedData::Series::sptr series :  addedSeries )
+    {
+        if(series == this->getSeries())
+        {
+            this->setIsExecutable(false);
+        }
+    }
+}
 
-    ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_seriesId);
-    ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
-    SLM_ASSERT("Object " << m_seriesId << " is not a '::fwMedData::Series'", series);
+//------------------------------------------------------------------------------
 
-    return series;
+void SExportSeries::checkRemovedSeries(::fwMedData::SeriesDB::ContainerType removedSeries)
+{
+    for( ::fwMedData::Series::sptr series :  removedSeries )
+    {
+        if(series == this->getSeries())
+        {
+            this->setIsExecutable(true);
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SInitNewSeries.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SInitNewSeries.cpp
index 30a5f29..d91ca95 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SInitNewSeries.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/action/SInitNewSeries.cpp
@@ -1,35 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
-#include <vector>
+#include "uiMedDataQt/action/SInitNewSeries.hpp"
 
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/algorithm/string/split.hpp>
-#include <boost/algorithm/string/classification.hpp>
+#include "uiMedDataQt/InsertSeries.hpp"
+#include "uiMedDataQt/constants.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwData/String.hpp>
 
-#include <fwServices/Base.hpp>
-
-#include <fwComEd/helper/SeriesDB.hpp>
-
-#include <fwMedData/SeriesDB.hpp>
-#include <fwMedData/Series.hpp>
+#include <fwMedData/Equipment.hpp>
 #include <fwMedData/Patient.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
-#include <fwMedData/Equipment.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/macros.hpp>
 
 #include <fwTools/dateAndTime.hpp>
 
-#include "uiMedDataQt/constants.hpp"
-#include "uiMedDataQt/InsertSeries.hpp"
-#include "uiMedDataQt/action/SInitNewSeries.hpp"
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+#include <utility>
+#include <vector>
 
 
 namespace uiMedData
@@ -56,7 +57,7 @@ SInitNewSeries::~SInitNewSeries() throw()
 
 //------------------------------------------------------------------------------
 
-void SInitNewSeries::info(std::ostream &_sstream )
+void SInitNewSeries::info(std::ostream& _sstream )
 {
     // Update message
     _sstream << std::string("SInitNewSeries");
@@ -71,12 +72,6 @@ void SInitNewSeries::starting() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SInitNewSeries::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
 void SInitNewSeries::stopping() throw(::fwTools::Failed)
 {
     this->actionServiceStopping();
@@ -95,9 +90,9 @@ void SInitNewSeries::updating() throw(::fwTools::Failed)
     SLM_ASSERT("Didn't find object with UID '" + m_seriesDBId + "'", obj);
     ::fwMedData::SeriesDB::sptr srcSeriesDB = ::fwMedData::SeriesDB::dynamicCast(obj);
 
-    ::fwComEd::helper::SeriesDB helper(seriesDB);
+    ::fwMedDataTools::helper::SeriesDB helper(seriesDB);
 
-    BOOST_FOREACH(const ::fwMedData::Series::sptr& series, srcSeriesDB->getContainer())
+    for(const ::fwMedData::Series::sptr& series :  srcSeriesDB->getContainer())
     {
         helper.add(series);
     }
@@ -108,11 +103,11 @@ void SInitNewSeries::updating() throw(::fwTools::Failed)
     StudyToPatientType studyToPatient;
     StudyMapType studies;
 
-    BOOST_FOREACH(const ::fwMedData::Series::sptr& series, seriesDB->getContainer())
+    for(const ::fwMedData::Series::sptr& series :  seriesDB->getContainer())
     {
         const std::string& studyUID = series->getStudy()->getInstanceUID();
 
-        studies[studyUID] = series->getStudy();
+        studies[studyUID]        = series->getStudy();
         studyToPatient[studyUID] = series->getPatient();
     }
 
@@ -121,7 +116,7 @@ void SInitNewSeries::updating() throw(::fwTools::Failed)
     const std::string date = ::fwTools::getDate(now);
     const std::string time = ::fwTools::getTime(now);
 
-    BOOST_FOREACH(const StudyMapType::value_type& study, studies)
+    for(const StudyMapType::value_type& study :  studies)
     {
         ::fwMedData::Series::sptr newSeries = ::uiMedData::InsertSeries::New();
         newSeries->setDescription(s_INSERT_NEW_SERIES_TEXT);
@@ -156,7 +151,7 @@ void SInitNewSeries::updating() throw(::fwTools::Failed)
     newSeries->setTime(time);
 
     helper.add(newSeries);
-    helper.notify(this->getSptr());
+    helper.notify();
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SActivityWizard.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SActivityWizard.cpp
new file mode 100644
index 0000000..84c231c
--- /dev/null
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SActivityWizard.cpp
@@ -0,0 +1,509 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "uiMedDataQt/editor/SActivityWizard.hpp"
+
+#include <fwActivities/IValidator.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+
+#include <fwGui/dialog/InputDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/UUID.hpp>
+#include <fwTools/dateAndTime.hpp>
+
+#include <QApplication>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QMessageBox>
+#include <QObject>
+#include <QVBoxLayout>
+
+namespace uiMedData
+{
+namespace editor
+{
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiMedData::editor::SActivityWizard, ::fwMedData::SeriesDB );
+
+//------------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType SActivityWizard::s_CREATE_ACTIVITY_SLOT        = "createActivity";
+const ::fwCom::Slots::SlotKeyType SActivityWizard::s_UPDATE_ACTIVITY_SLOT        = "updateActivity";
+const ::fwCom::Slots::SlotKeyType SActivityWizard::s_UPDATE_ACTIVITY_SERIES_SLOT = "updateActivitySeries";
+const ::fwCom::Signals::SignalKeyType SActivityWizard::s_ACTIVITY_CREATED_SIG    = "activityCreated";
+const ::fwCom::Signals::SignalKeyType SActivityWizard::s_ACTIVITY_UPDATED_SIG    = "activityUpdated";
+const ::fwCom::Signals::SignalKeyType SActivityWizard::s_CANCELED_SIG            = "canceled";
+
+//------------------------------------------------------------------------------
+
+SActivityWizard::SActivityWizard() throw() :
+    m_mode(Mode::CREATE),
+    m_confirmUpdate(true),
+    m_isCancelable(true)
+{
+    newSlot(s_CREATE_ACTIVITY_SLOT, &SActivityWizard::createActivity, this);
+    newSlot(s_UPDATE_ACTIVITY_SLOT, &SActivityWizard::updateActivity, this);
+    newSlot(s_UPDATE_ACTIVITY_SERIES_SLOT, &SActivityWizard::updateActivitySeries, this);
+
+    m_sigActivityCreated = newSignal<ActivityCreatedSignalType>(s_ACTIVITY_CREATED_SIG);
+    m_sigActivityUpdated = newSignal<ActivityUpdatedSignalType>(s_ACTIVITY_UPDATED_SIG);
+    m_sigCanceled        = newSignal< CanceledSignalType >(s_CANCELED_SIG);
+}
+
+//------------------------------------------------------------------------------
+
+SActivityWizard::~SActivityWizard() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::configuring() throw(fwTools::Failed)
+{
+    ::fwGui::IGuiContainerSrv::initialize();
+
+    ::fwRuntime::ConfigurationElement::sptr config = m_configuration->findConfigurationElement("ioSelectorConfig");
+    if (config)
+    {
+        m_ioSelectorConfig = config->getValue();
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr confirmConfig = m_configuration->findConfigurationElement("confirm");
+    if (confirmConfig)
+    {
+        std::string confirmStr = confirmConfig->getValue();
+        SLM_ASSERT("'confirm' value must be 'true' or 'false', actual: '" + confirmStr + "'",
+                   confirmStr == "true" || confirmStr == "false");
+        m_confirmUpdate = (confirmStr == "true");
+    }
+
+    ::fwRuntime::ConfigurationElement::sptr cancelConfig = m_configuration->findConfigurationElement("cancel");
+    if (cancelConfig)
+    {
+        std::string cancelStr = cancelConfig->getValue();
+        SLM_ASSERT("'cancel' value must be 'true' or 'false', actual: '" + cancelStr + "'",
+                   cancelStr == "true" || cancelStr == "false");
+        m_isCancelable = (cancelStr == "true");
+    }
+
+    std::vector < ::fwRuntime::ConfigurationElement::sptr > iconsCfg = m_configuration->find("icons");
+    if (!iconsCfg.empty())
+    {
+        SLM_ASSERT("Only one 'config' tag is allowed for SSelector configuration", iconsCfg.size() == 1);
+
+        std::vector < ::fwRuntime::ConfigurationElement::sptr > cfg = iconsCfg.front()->find("icon");
+
+        for(::fwRuntime::ConfigurationElement::sptr elt :  cfg)
+        {
+            std::string type = elt->getAttributeValue("type");
+            SLM_ASSERT("'series' attribute is missing", !type.empty());
+
+            std::string icon = elt->getAttributeValue("icon");
+            SLM_ASSERT("'icon' attribute is missing", !icon.empty());
+
+            m_objectIcons[type] = icon;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::starting() throw(::fwTools::Failed)
+{
+    ::fwGui::IGuiContainerSrv::create();
+
+    fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+
+    QVBoxLayout* layout = new QVBoxLayout();
+
+    m_title = new QLabel("");
+    m_title->setStyleSheet("QLabel { font: bold; color: blue; }");
+    m_title->setAlignment(Qt::AlignHCenter);
+    layout->addWidget(m_title);
+
+    m_description = new QLabel("");
+    m_description->setStyleSheet("QLabel { font: italic; border: solid 1px;}");
+    m_description->setAlignment(Qt::AlignHCenter);
+    layout->addWidget(m_description);
+
+    m_activityDataView = new widget::ActivityDataView();
+    m_activityDataView->setIOSelectorConfig(m_ioSelectorConfig);
+    m_activityDataView->setObjectIconAssociation(m_objectIcons);
+
+    layout->addWidget(m_activityDataView, 1);
+
+    QHBoxLayout* buttonLayout = new QHBoxLayout();
+    layout->addLayout(buttonLayout);
+
+    if (m_isCancelable)
+    {
+        m_cancelButton = new QPushButton("Cancel");
+        m_cancelButton->setToolTip("Cacnel the activity creation");
+        buttonLayout->addWidget(m_cancelButton);
+    }
+
+    m_resetButton = new QPushButton("Clear");
+    m_resetButton->setToolTip("Clear the current selected data");
+    buttonLayout->addWidget(m_resetButton);
+
+    m_okButton = new QPushButton("Apply");
+    m_okButton->setToolTip("Create or update the activity with the selected data");
+    buttonLayout->addWidget(m_okButton);
+
+    container->setLayout(layout);
+
+    QObject::connect(m_activityDataView.data(), &widget::ActivityDataView::currentChanged,
+                     this, &SActivityWizard::onTabChanged);
+    QObject::connect(m_okButton.data(), &QPushButton::clicked, this, &SActivityWizard::onBuildActivity);
+    QObject::connect(m_resetButton.data(), &QPushButton::clicked, this, &SActivityWizard::onReset);
+    if (m_isCancelable)
+    {
+        QObject::connect(m_cancelButton.data(), &QPushButton::clicked, this, &SActivityWizard::onCancel);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::stopping() throw(::fwTools::Failed)
+{
+    m_activityDataView->clear();
+
+    QObject::disconnect(m_activityDataView.data(), &widget::ActivityDataView::currentChanged,
+                        this, &SActivityWizard::onTabChanged);
+    QObject::disconnect(m_okButton.data(), &QPushButton::clicked, this, &SActivityWizard::onBuildActivity);
+    QObject::disconnect(m_resetButton.data(), &QPushButton::clicked, this, &SActivityWizard::onReset);
+    if (m_isCancelable)
+    {
+        QObject::disconnect(m_cancelButton.data(), &QPushButton::clicked, this, &SActivityWizard::onCancel);
+    }
+
+    this->getContainer()->clean();
+    ::fwGui::IGuiContainerSrv::destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::updating() throw(::fwTools::Failed)
+{
+    auto as = this->getInOut< ::fwMedData::ActivitySeries>("activitySeries");
+    if (as)
+    {
+        this->updateActivity(as);
+    }
+
+    SLM_DEBUG_IF("activity series is not defined, it cannot be updated", !as);
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::createActivity(std::string activityID)
+{
+    m_mode = Mode::CREATE;
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(activityID);
+
+    // load activity bundle
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = ::fwRuntime::findBundle(info.bundleId,
+                                                                            info.bundleVersion);
+    if (!bundle->isStarted())
+    {
+        bundle->start();
+    }
+
+    m_actSeries = ::fwMedData::ActivitySeries::New();
+
+    m_actSeries->setModality("OT");
+    m_actSeries->setInstanceUID("fwActivities." + ::fwTools::UUID::generateUUID() );
+
+    ::boost::posix_time::ptime now = ::boost::posix_time::second_clock::local_time();
+    m_actSeries->setDate(::fwTools::getDate(now));
+    m_actSeries->setTime(::fwTools::getTime(now));
+
+    m_actSeries->setActivityConfigId(info.id);
+
+    m_title->setText(QString("<h1>%1</h1>").arg(QString::fromStdString(info.title)));
+    m_description->setText(QString::fromStdString(info.description));
+
+    bool needConfig = false;
+
+    // If we have requirements but they are not needed to start (maxOccurs = 0), we can skip the config as well
+    for(const auto& req : info.requirements)
+    {
+        if(req.maxOccurs > 0)
+        {
+            needConfig = true;
+            break;
+        }
+    }
+
+    if (needConfig)
+    {
+        m_activityDataView->fillInformation(info);
+        if (m_activityDataView->count() > 1)
+        {
+            m_okButton->setText("Next");
+        }
+
+        this->slot(s_SHOW_SLOT)->asyncRun();
+    }
+    else
+    {
+        // Create data automatically if they are not provided by the user
+        for(const auto& req : info.requirements)
+        {
+            SLM_ASSERT("minOccurs and maxOccurs should be 0", req.minOccurs == 0 && req.maxOccurs == 0);
+            ::fwData::Composite::sptr data = m_actSeries->getData();
+            (*data)[req.name]              = ::fwData::factory::New(req.type);
+        }
+
+        ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+        ::fwMedDataTools::helper::SeriesDB helper(seriesDB);
+        helper.add(m_actSeries);
+        helper.notify();
+        m_sigActivityCreated->asyncEmit(m_actSeries);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::updateActivity(::fwMedData::ActivitySeries::sptr activitySeries)
+{
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(activitySeries->getActivityConfigId());
+
+    // load activity bundle
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = ::fwRuntime::findBundle(info.bundleId,
+                                                                            info.bundleVersion);
+    if (!bundle->isStarted())
+    {
+        bundle->start();
+    }
+
+    m_title->setText(QString("<h1>%1</h1>").arg(QString::fromStdString(info.title)));
+    m_description->setText(QString::fromStdString(info.description));
+
+    m_mode      = Mode::UPDATE;
+    m_actSeries = activitySeries;
+
+    bool needConfig = false;
+
+    // If we have requirements but they are not needed to start (maxOccurs = 0), we can skip the config as well
+    for(const auto& req : info.requirements)
+    {
+        if(req.maxOccurs != 0)
+        {
+            needConfig = true;
+            break;
+        }
+    }
+
+    if (needConfig)
+    {
+        m_activityDataView->fillInformation(m_actSeries);
+        if (m_activityDataView->count() > 1)
+        {
+            m_okButton->setText("Next");
+        }
+    }
+    else
+    {
+        // Start immediately without popping any configuration UI
+        ::fwData::Object::ModifiedSignalType::sptr sig;
+        sig = m_actSeries->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        sig->asyncEmit();
+        m_sigActivityUpdated->asyncEmit(m_actSeries);
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::updateActivitySeries(::fwMedData::Series::sptr series)
+{
+    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::dynamicCast(series);
+    if (activitySeries)
+    {
+        this->updateActivity(activitySeries);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::onTabChanged(int index)
+{
+    if (index == m_activityDataView->count() - 1)
+    {
+        m_okButton->setText("Apply");
+    }
+    else
+    {
+        m_okButton->setText("Next");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::onReset()
+{
+    if (m_actSeries)
+    {
+        ::fwActivities::registry::ActivityInfo info;
+        info = ::fwActivities::registry::Activities::getDefault()->getInfo(m_actSeries->getActivityConfigId());
+        m_activityDataView->fillInformation(info);
+
+        if (m_activityDataView->count() > 1)
+        {
+            m_okButton->setText("Next");
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::onCancel()
+{
+    m_activityDataView->clear();
+    m_sigCanceled->asyncEmit();
+}
+
+
+//------------------------------------------------------------------------------
+
+void SActivityWizard::onBuildActivity()
+{
+    int index   = m_activityDataView->currentIndex();
+    int lastTab = m_activityDataView->count() -1;
+
+    std::string errorMsg;
+    // Check current data
+    if (m_activityDataView->checkData(size_t(index), errorMsg))
+    {
+        if (index != lastTab)
+        {
+            // enable and select the next tab
+            m_activityDataView->setTabEnabled(index+1, true);
+            m_activityDataView->setCurrentIndex(index+1);
+        }
+
+        else // index == lastTab
+        {
+            // Create/update activity
+            if (m_mode == Mode::UPDATE && m_confirmUpdate)
+            {
+                QMessageBox::StandardButton button = QMessageBox::question(
+                    qApp->activeWindow(),
+                    "Update activity",
+                    "You will override your activity. You could loose some data.\n"
+                    "Would you duplicate your activity ?",
+                    QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel,
+                    QMessageBox::No);
+
+                if (button == QMessageBox::Cancel)
+                {
+                    return;
+                }
+                else if (button == QMessageBox::Yes)
+                {
+                    m_actSeries = ::fwData::Object::copy(m_actSeries);
+                    m_mode      = Mode::CREATE; // The new activity should be added in the seriesDB
+                }
+            }
+
+            // check all data and create/update the activity
+            bool ok = m_activityDataView->checkAndComputeData(m_actSeries, errorMsg);
+            if (ok)
+            {
+                ::fwData::Composite::sptr data = m_actSeries->getData();
+
+                // Copy the patient/study information of a series
+                ::fwMedData::Series::sptr series;
+                for(const auto& elt : (*data) )
+                {
+                    series = ::fwMedData::Series::dynamicCast(elt.second);
+                    if(series)
+                    {
+                        m_actSeries->setPatient( ::fwData::Object::copy(series->getPatient()) );
+                        m_actSeries->setStudy( ::fwData::Object::copy(series->getStudy()) );
+                        m_actSeries->setEquipment( ::fwData::Object::copy(series->getEquipment()) );
+                        break;
+                    }
+                }
+
+                if (m_mode == Mode::CREATE)
+                {
+                    // Add the new activity series in seriesDB
+                    ::fwActivities::registry::ActivityInfo info;
+                    info = ::fwActivities::registry::Activities::getDefault()->getInfo(
+                        m_actSeries->getActivityConfigId());
+
+                    std::string description = ::fwGui::dialog::InputDialog::showInputDialog(
+                        "Activity creation",
+                        "Please, give a description of the activity.",
+                        info.title);
+                    if (description.empty())
+                    {
+                        return;
+                    }
+                    m_actSeries->setDescription(description);
+                    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+                    ::fwMedDataTools::helper::SeriesDB helper(seriesDB);
+                    helper.add(m_actSeries);
+                    helper.notify();
+                    m_sigActivityCreated->asyncEmit(m_actSeries);
+                }
+                else // m_mode == Mode::UPDATE
+                {
+                    ::fwData::Object::ModifiedSignalType::sptr sig;
+                    sig = m_actSeries->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+                    sig->asyncEmit();
+                    m_sigActivityUpdated->asyncEmit(m_actSeries);
+                }
+            }
+            else
+            {
+                QString message = "This activity can not be created : \n";
+                message.append(QString::fromStdString(errorMsg));
+                QMessageBox::warning(qApp->activeWindow(), "Activity Creation", message);
+                SLM_ERROR(errorMsg);
+            }
+        }
+    }
+    else
+    {
+        QMessageBox::warning(qApp->activeWindow(), "Error", QString::fromStdString(errorMsg));
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace editor
+} //namespace uiMedData
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SModelSeriesList.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SModelSeriesList.cpp
index b0b1039..7715f53 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SModelSeriesList.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SModelSeriesList.cpp
@@ -1,57 +1,152 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QListWidget>
-#include <QListWidgetItem>
-#include <QCheckBox>
-#include <QString>
-#include <QVBoxLayout>
-#include <QGroupBox>
+#include "uiMedDataQt/editor/SModelSeriesList.hpp"
 
-#include <fwCore/base.hpp>
 
-#include <fwTools/fwID.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
 
-#include <fwData/Reconstruction.hpp>
 #include <fwData/Boolean.hpp>
+#include <fwData/Float.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/Reconstruction.hpp>
 #include <fwData/String.hpp>
 
-#include <fwMedData/ModelSeries.hpp>
+#include <fwDataCamp/getObject.hpp>
 
-#include <fwComEd/ReconstructionMsg.hpp>
-#include <fwComEd/ModelSeriesMsg.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
 
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
 #include <fwServices/op/Get.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwTools/fwID.hpp>
 
-#include "uiMedDataQt/editor/SModelSeriesList.hpp"
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+#include <QListWidgetItem>
+#include <QCheckBox>
+#include <QString>
+#include <QVBoxLayout>
+#include <QGroupBox>
+
+#include <boost/format.hpp>
+
+#include <boost/format.hpp>
 
 namespace uiMedData
 {
 namespace editor
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiMedData::editor::SModelSeriesList , ::fwMedData::ModelSeries) ;
+class ValueView
+{
+public:
+    virtual std::string apply(::fwData::Object::sptr obj)
+    {
+        if(obj->isA("::fwData::String"))
+        {
+            ::fwData::String::sptr fwValue = ::fwData::String::dynamicCast(obj);
+            return fwValue->getValue();
+        }
+        else if(obj->isA("::fwData::Integer"))
+        {
+            ::fwData::Integer::sptr fwValue = ::fwData::Integer::dynamicCast(obj);
+            return ::boost::lexical_cast<std::string>(fwValue->getValue());
+        }
+        else if(obj->isA("::fwData::Float"))
+        {
+            ::fwData::Float::sptr fwValue = ::fwData::Float::dynamicCast(obj);
+            return ::boost::lexical_cast<std::string>(fwValue->getValue());
+        }
+        else
+        {
+            SLM_WARN(obj->getClassname() +  " is not a printable object  : ");
+            return "";
+        }
+    }
+};
+
+class PositiveView : public ValueView
+{
+
+public:
+    virtual std::string apply(::fwData::Object::sptr obj)
+    {
+        if(obj->isA("::fwData::Integer"))
+        {
+            ::fwData::Integer::sptr fwValue = ::fwData::Integer::dynamicCast(obj);
+
+            if(fwValue->getValue() > 0)
+            {
+                std::stringstream ss;
+                ::fwData::Float::sptr fwValue = ::fwData::Float::dynamicCast(obj);
+                ss << ::boost::format("%11.2f") % (fwValue->getValue());
+                return ss.str();
+            }
+            return "Unknown";
+        }
+        else if(obj->isA("::fwData::Float"))
+        {
+            ::fwData::Float::sptr fwValue = ::fwData::Float::dynamicCast(obj);
+            if(fwValue->getValue() > 0)
+            {
+                std::stringstream ss;
+                ::fwData::Float::sptr fwValue = ::fwData::Float::dynamicCast(obj);
+                ss << ::boost::format("%11.2f") % (fwValue->getValue());
+                return ss.str();
+            }
+            return "Unknown";
+        }
+        else
+        {
+            SLM_WARN(obj->getClassname() +  " is not a printable object  : ");
+            return "";
+        }
+    }
+};
+
 
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiMedData::editor::SModelSeriesList, ::fwMedData::ModelSeries);
 
-SModelSeriesList::SModelSeriesList() throw() : m_enableHideAll(true)
-{}
+const ::fwCom::Signals::SignalKeyType SModelSeriesList::s_REC_DISPLAY_MODIFIED__SIG   = "recDisplayModified";
+const ::fwCom::Signals::SignalKeyType SModelSeriesList::s_RECONSTRUCTION_SELECTED_SIG = "reconstructionSelected";
+const ::fwCom::Signals::SignalKeyType SModelSeriesList::s_EMPTIED_SELECTION_SIG       = "emptiedSelection";
+const ::fwCom::Slots::SlotKeyType SModelSeriesList::s_SHOW_RECONSTRUCTIONS_SLOT       = "showReconstructions";
+
+SModelSeriesList::SModelSeriesList() throw() : m_tree(new QTreeWidget()), m_enableHideAll(true)
+{
+    m_sigRecDisplayModified     = newSignal< RecDisplayModifiedSignalType >( s_REC_DISPLAY_MODIFIED__SIG );
+    m_sigReconstructionSelected = newSignal< ReconstructionSelectedSignalType >( s_RECONSTRUCTION_SELECTED_SIG );
+    m_sigEmptiedSelection       = newSignal< EmptiedSelectionSignalType >( s_EMPTIED_SELECTION_SIG );
+
+    newSlot(s_SHOW_RECONSTRUCTIONS_SLOT, &SModelSeriesList::showReconstructions, this);
+}
 
 //------------------------------------------------------------------------------
 
 SModelSeriesList::~SModelSeriesList() throw()
-{}
+{
+    for(auto cIt :  m_displayedInfo)
+    {
+        delete cIt.second;
+    }
+}
 
 //------------------------------------------------------------------------------
 
@@ -66,27 +161,37 @@ void SModelSeriesList::starting() throw(::fwTools::Failed)
 
     QVBoxLayout* layout = new QVBoxLayout(container);
 
+    QHBoxLayout* layoutButton = new QHBoxLayout(container);
+    layout->addLayout(layoutButton);
 
     if (m_enableHideAll)
     {
+        // check box "show"
         m_showCheckBox = new QCheckBox( tr("Hide all organs"));
         m_showCheckBox->setToolTip(tr("Show or hide all organs"));
-        layout->addWidget( m_showCheckBox, 0 );
+        layoutButton->addWidget( m_showCheckBox, 0 );
         QObject::connect(m_showCheckBox, SIGNAL(stateChanged(int )), this, SLOT(onShowReconstructions(int)));
-    }
 
-    m_organChoice = new QListWidget();
+        m_checkAllButton = new QPushButton(tr("Check all"));
+        layoutButton->addWidget(m_checkAllButton, 0);
+        QObject::connect( m_checkAllButton, SIGNAL(clicked()), this, SLOT(onCheckAllCheckBox()) );
 
-    layout->addWidget( m_organChoice, 1 );
+        m_unCheckAllButton = new QPushButton(tr("UnCheck all"));
+        layoutButton->addWidget(m_unCheckAllButton, 0);
+        QObject::connect( m_unCheckAllButton, SIGNAL(clicked()), this, SLOT(onUnCheckAllCheckBox()) );
+    }
+
+    layout->addWidget( m_tree, 1 );
 
     container->setLayout( layout );
 
-    QObject::connect(m_organChoice, SIGNAL(itemClicked(QListWidgetItem*)),
-            this, SLOT(onOrganChoiceVisibility(QListWidgetItem*)));
-    QObject::connect(m_organChoice, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
-            this, SLOT(onCurrentItemChanged(QListWidgetItem*, QListWidgetItem*)));
+    QObject::connect(m_tree, SIGNAL(currentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)),
+                     this, SLOT(onCurrentItemChanged(QTreeWidgetItem*, QTreeWidgetItem*)));
 
     this->updating();
+
+    QObject::connect(m_tree, SIGNAL(itemChanged(QTreeWidgetItem *, int )),
+                     this, SLOT(onCurrentItemChanged(QTreeWidgetItem *, int )));
 }
 
 //------------------------------------------------------------------------------
@@ -100,10 +205,11 @@ void SModelSeriesList::stopping() throw(::fwTools::Failed)
         QObject::disconnect(m_showCheckBox, SIGNAL(stateChanged(int )), this, SLOT(onShowReconstructions(int)));
     }
 
-    QObject::disconnect(m_organChoice, SIGNAL(itemClicked (QListWidgetItem * )),
-            this, SLOT(onOrganChoiceVisibility(QListWidgetItem *)));
-    QObject::disconnect(m_organChoice, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)),
-            this, SLOT(onCurrentItemChanged(QListWidgetItem*, QListWidgetItem*)));
+    QObject::disconnect(m_tree, SIGNAL(itemChanged(QTreeWidgetItem *, int )),
+                        this, SLOT(onCurrentItemChanged(QTreeWidgetItem *, int )));
+    QObject::disconnect(m_tree, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
+                        this, SLOT(onCurrentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)));
+
 
     this->getContainer()->clean();
     this->destroy();
@@ -120,18 +226,47 @@ void SModelSeriesList::configuring() throw(fwTools::Failed)
     {
         const std::string& hide = m_configuration->findConfigurationElement("enable_hide_all")->getValue();
         SLM_ASSERT("'enable_hide_all' attribute value must be 'true' or 'false' (found '" + hide + "')",
-                hide == "true" || hide == "false");
+                   hide == "true" || hide == "false");
         m_enableHideAll = (hide == "true");
     }
 
+    const ::fwRuntime::ConfigurationElement::sptr& columns = m_configuration->findConfigurationElement( "columns" );
+    if(columns)
+    {
+        ::fwRuntime::ConfigurationElement::Container::const_iterator cIt = columns->begin();
+        m_tree->setColumnCount(static_cast<int>(columns->size()));
+        QStringList header;
+        for(; cIt != columns->end(); cIt++)
+        {
+            ValueView* view;
+            ::fwRuntime::ConfigurationElement::AttributePair configView = (*cIt)->getSafeAttributeValue("view");
+            if(!configView.first)
+            {
+                view = new ValueView();
+            }
+            else if (configView.second ==("positive"))
+            {
+                view = new PositiveView();
+            }
+
+            m_displayedInfo.insert(DisplayedInformation::value_type((*cIt)->getValue(), view));
+            header << QString::fromStdString((*cIt)->getName());
+        }
+        m_tree->setHeaderLabels(header);
+    }
 }
 
 //------------------------------------------------------------------------------
 
 void SModelSeriesList::updating() throw(::fwTools::Failed)
 {
+    m_tree->blockSignals(true);
+
     this->updateReconstructions();
     this->refreshVisibility();
+
+    m_tree->blockSignals(false);
+
 }
 
 //------------------------------------------------------------------------------
@@ -140,27 +275,6 @@ void SModelSeriesList::swapping() throw(::fwTools::Failed)
 {
     this->updating();
 }
-//------------------------------------------------------------------------------
-
-void SModelSeriesList::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::ModelSeriesMsg::csptr acquisitionMsg = ::fwComEd::ModelSeriesMsg::dynamicConstCast( msg ) ;
-    if ( acquisitionMsg )
-    {
-        if ( acquisitionMsg->hasEvent(::fwComEd::ModelSeriesMsg::SHOW_RECONSTRUCTIONS) )
-        {
-            this->updating();
-        }
-        else if ( acquisitionMsg->hasEvent(::fwComEd::ModelSeriesMsg::ADD_RECONSTRUCTION) )
-        {
-            this->updating();
-        }
-        else if ( acquisitionMsg->hasEvent(::fwComEd::ModelSeriesMsg::REMOVED_RECONSTRUCTIONS) )
-        {
-            this->updating();
-        }
-    }
-}
 
 //------------------------------------------------------------------------------
 
@@ -172,9 +286,6 @@ void SModelSeriesList::info( std::ostream &_sstream )
 
 void SModelSeriesList::updateReconstructions()
 {
-    m_organChoice->blockSignals(true);
-    m_organChoice->clear();
-    m_map.clear();
     ::fwGuiQt::container::QtContainer::sptr qtContainer
         = ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
@@ -187,68 +298,89 @@ void SModelSeriesList::updateReconstructions()
 
     if(hasReconstructions)
     {
-        BOOST_FOREACH(::fwData::Reconstruction::sptr rec, modelSeries->getReconstructionDB())
+        this->fillTree();
+        if(m_showCheckBox)
         {
-            m_map[ rec->getOrganName() ] = rec;
+            const bool showAllRec = modelSeries->getField("ShowReconstructions", ::fwData::Boolean::New(true))->value();
+            m_showCheckBox->setCheckState(showAllRec ? Qt::Unchecked : Qt::Checked );
         }
+    }
+}
 
-        for( OrganNameReconstruction::iterator iter = m_map.begin(); iter != m_map.end(); ++iter )
-        {
-            QListWidgetItem* item = new QListWidgetItem(QString::fromStdString((*iter).first), m_organChoice);
-            item->setCheckState(Qt::Unchecked);
-            m_organChoice->addItem(item);
-        }
+//------------------------------------------------------------------------------
+
+void SModelSeriesList::fillTree()
+{
+    ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
+    auto& reconstructions = modelSeries->getReconstructionDB();
 
-        const bool showAllRec
-            = modelSeries->getField("ShowReconstructions", ::fwData::Boolean::New(true))->value();
+    if(!m_tree->selectedItems().empty())
+    {
+        m_sigEmptiedSelection->asyncEmit();
+    }
 
-        if(m_showCheckBox)
+    m_tree->clear();
+
+    // Create items
+    for(auto const& reconstruction :  reconstructions)
+    {
+        QStringList info;
+        for(auto const& cIt :  m_displayedInfo)
         {
-            m_showCheckBox->setCheckState(showAllRec ? Qt::Unchecked : Qt::Checked );
-            m_organChoice->setEnabled(m_showCheckBox->checkState() == Qt::Unchecked);
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(reconstruction, cIt.first);
+            OSLM_ASSERT("Invalid seshat path : '"<< cIt.first <<"'", obj);
+            info << QString::fromStdString(cIt.second->apply(obj));
         }
+        QTreeWidgetItem* item = new QTreeWidgetItem(info);
+        item->setCheckState(0, Qt::Unchecked);
+        m_tree->addTopLevelItem(item);
+        item->setData(0, Qt::UserRole, QString::fromStdString(reconstruction->getID()));
     }
 
-    m_organChoice->blockSignals(false);
+
+    for(int i = 0; i< m_tree->topLevelItemCount(); i++)
+    {
+        m_tree->resizeColumnToContents(i);
+    }
 }
 
 //------------------------------------------------------------------------------
 
-void SModelSeriesList::onCurrentItemChanged( QListWidgetItem * current, QListWidgetItem * previous )
+void SModelSeriesList::onCurrentItemChanged( QTreeWidgetItem * current, QTreeWidgetItem * previous )
 {
     SLM_ASSERT( "Current selected item is null", current );
+    std::string id = current->data(0, Qt::UserRole).toString().toStdString();
 
-    QListWidgetItem * currentItem = m_organChoice->currentItem();
-    std::string organSelected = currentItem->text().toStdString();
+    ::fwData::Reconstruction::sptr rec = ::fwData::Reconstruction::dynamicCast(::fwTools::fwID::getObject(id));
 
-    if( m_map.find(organSelected) != m_map.end() )
-    {
-        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
-        ::fwData::Reconstruction::sptr rec = m_map[organSelected] ;
+    m_sigReconstructionSelected->asyncEmit(rec);
+}
 
-        ::fwComEd::ModelSeriesMsg::sptr msg = ::fwComEd::ModelSeriesMsg::New();
-        msg->addEvent( ::fwComEd::ModelSeriesMsg::NEW_RECONSTRUCTION_SELECTED, ::fwData::String::New(rec->getID()));
-        ::fwServices::IEditionService::notify(this->getSptr(), modelSeries, msg);
-    }
+//------------------------------------------------------------------------------
+
+void SModelSeriesList::onCurrentItemChanged ( QTreeWidgetItem * current, int column )
+{
+    this->onOrganChoiceVisibility(current, column);
 }
 
 //------------------------------------------------------------------------------
 
-void SModelSeriesList::onOrganChoiceVisibility(QListWidgetItem * item )
+void SModelSeriesList::onOrganChoiceVisibility(QTreeWidgetItem * item, int column)
 {
-    std::string organSelected = item->text().toStdString();
-    ::fwData::Reconstruction::sptr rec = m_map[organSelected] ;
+    std::string id = item->data(0, Qt::UserRole).toString().toStdString();
+    ::fwData::Reconstruction::sptr rec = ::fwData::Reconstruction::dynamicCast(::fwTools::fwID::getObject(id));
     SLM_ASSERT("rec not instanced", rec);
 
-    bool itemIsChecked = (item->checkState() == Qt::Checked);
+    bool itemIsChecked = (item->checkState(0) == Qt::Checked);
 
     if (rec->getIsVisible() != itemIsChecked)
     {
-        rec->setIsVisible(item->checkState());
+        rec->setIsVisible(item->checkState(0));
 
-        ::fwComEd::ReconstructionMsg::sptr msg = ::fwComEd::ReconstructionMsg::New();
-        msg->addEvent( ::fwComEd::ReconstructionMsg::VISIBILITY ) ;
-        ::fwServices::IEditionService::notify(this->getSptr(), rec, msg);
+        ::fwData::Reconstruction::VisibilityModifiedSignalType::sptr sig;
+        sig = rec->signal< ::fwData::Reconstruction::VisibilityModifiedSignalType >(
+            ::fwData::Reconstruction::s_VISIBILITY_MODIFIED_SIG);
+        sig->asyncEmit();
     }
 }
 
@@ -256,28 +388,79 @@ void SModelSeriesList::onOrganChoiceVisibility(QListWidgetItem * item )
 
 void SModelSeriesList::onShowReconstructions(int state )
 {
+    const bool visible = static_cast<bool>(state);
+
+    m_checkAllButton->setEnabled(!visible);
+    m_unCheckAllButton->setEnabled(!visible);
+
     ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
     modelSeries->setField("ShowReconstructions",  ::fwData::Boolean::New(state == Qt::Unchecked) );
 
-    ::fwComEd::ModelSeriesMsg::sptr msg = ::fwComEd::ModelSeriesMsg::New();
-    msg->addEvent( ::fwComEd::ModelSeriesMsg::SHOW_RECONSTRUCTIONS );
-    ::fwServices::IEditionService::notify(this->getSptr(), modelSeries, msg);
-
-    m_organChoice->setEnabled(state == Qt::Unchecked);
+    ::fwCom::Connection::Blocker block(m_sigRecDisplayModified->getConnection(m_slotShowReconstuctions));
+    m_sigRecDisplayModified->asyncEmit(state == Qt::Unchecked);
 }
 
 //------------------------------------------------------------------------------
 
 void SModelSeriesList::refreshVisibility()
 {
-    int item = 0;
-    for( OrganNameReconstruction::iterator iter = m_map.begin(); iter != m_map.end(); ++iter, ++item )
+    for( int i = 0; i < m_tree->topLevelItemCount(); ++i )
+    {
+        QTreeWidgetItem *item = m_tree->topLevelItem( i );
+        std::string id        = item->data(0, Qt::UserRole).toString().toStdString();
+        ::fwData::Reconstruction::sptr rec = ::fwData::Reconstruction::dynamicCast(::fwTools::fwID::getObject(id));
+        item->setCheckState(0, rec->getIsVisible() ? Qt::Checked : Qt::Unchecked );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SModelSeriesList::showReconstructions(bool show)
+{
+    if(m_showCheckBox)
+    {
+        m_showCheckBox->setCheckState(show ? Qt::Unchecked : Qt::Checked );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SModelSeriesList::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+void SModelSeriesList::onCheckAllCheckBox()
+{
+    this->onCheckAllBoxes(true);
+}
+
+//------------------------------------------------------------------------------
+
+void SModelSeriesList::onUnCheckAllCheckBox()
+{
+    this->onCheckAllBoxes(false);
+}
+
+//------------------------------------------------------------------------------
+
+void SModelSeriesList::onCheckAllBoxes( bool visible )
+{
+    for( int i = 0; i < m_tree->topLevelItemCount(); ++i )
     {
-        QListWidgetItem *  currentItem = m_organChoice->item (item);
-        currentItem->setCheckState( iter->second->getIsVisible() ? Qt::Checked : Qt::Unchecked );
+        QTreeWidgetItem *item = m_tree->topLevelItem( i );
+        item->setCheckState(0, visible ? Qt::Checked : Qt::Unchecked );
     }
 }
 
+//------------------------------------------------------------------------------
+
 } // namespace editor
 } // namespace uiMedData
-
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SOrganTransformation.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SOrganTransformation.cpp
index 8d6cf02..4f0c524 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SOrganTransformation.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SOrganTransformation.cpp
@@ -1,40 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QListWidget>
-#include <QListWidgetItem>
-#include <QStringList>
-#include <QString>
-#include <QVBoxLayout>
-#include <QGroupBox>
-#include <QPushButton>
-#include <QComboBox>
-
-#include <map>
-
-#include <fwTools/fwID.hpp>
+#include "uiMedDataQt/editor/SOrganTransformation.hpp"
 
 #include <fwData/Composite.hpp>
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
 
+#include <fwDataTools/TransformationMatrix3D.hpp>
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
+
 #include <fwMedData/ModelSeries.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 
-#include <fwComEd/ModelSeriesMsg.hpp>
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
-#include <fwComEd/helper/Composite.hpp>
+#include <fwTools/fwID.hpp>
 
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QGroupBox>
+#include <QListWidget>
+#include <QListWidgetItem>
+#include <QPushButton>
+#include <QString>
+#include <QStringList>
+#include <QVBoxLayout>
 
-#include "uiMedDataQt/editor/SOrganTransformation.hpp"
+#include <map>
 
 namespace uiMedData
 {
@@ -48,16 +46,15 @@ SOrganTransformation::SOrganTransformation() throw() :
     m_loadButton( 0 ),
     m_resetButton( 0 ),
     m_reconstructionListBox( 0 ),
-    m_testButton( 0 ),
     m_saveCount( 0 )
 {
-    //addNewHandledEvent( ::fwComEd::ModelSeriesMsg::ADD_RECONSTRUCTION );
 }
 
 //------------------------------------------------------------------------------
 
 SOrganTransformation::~SOrganTransformation() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -76,7 +73,7 @@ void SOrganTransformation::starting() throw( ::fwTools::Failed )
 {
     this->create();
     ::fwGuiQt::container::QtContainer::sptr qtContainer =
-            ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+        ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -88,6 +85,7 @@ void SOrganTransformation::starting() throw( ::fwTools::Failed )
     QVBoxLayout* layoutGroupBox = new QVBoxLayout(container);
     groupBox->setLayout(layoutGroupBox);
 
+    m_selectAllCheckBox     = new QCheckBox(tr("Select All"), container );
     m_reconstructionListBox = new QListWidget( groupBox);
     m_resetButton           = new QPushButton(tr("Reset"), container );
     m_saveButton            = new QPushButton(tr("Save"), container );
@@ -96,26 +94,21 @@ void SOrganTransformation::starting() throw( ::fwTools::Failed )
 
 
     QObject::connect(m_reconstructionListBox,
-                     SIGNAL(itemClicked (QListWidgetItem * )),
+                     SIGNAL(itemClicked (QListWidgetItem* )),
                      this,
-                     SLOT(onReconstructionCheck(QListWidgetItem *)));
+                     SLOT(onReconstructionCheck(QListWidgetItem*)));
     QObject::connect(m_resetButton, SIGNAL(clicked( )), this, SLOT(onResetClick()));
     QObject::connect(m_saveButton, SIGNAL(clicked( )), this, SLOT(onSaveClick()));
     QObject::connect(m_loadButton, SIGNAL(clicked( )), this, SLOT(onLoadClick()));
+    QObject::connect(m_selectAllCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onSelectAllChanged(int)));
 
-    //testing
-    m_testButton = new QPushButton(tr("Test"), container);
-    QObject::connect(m_testButton, SIGNAL(clicked()), this, SLOT(onTestClick()));
-
+    layoutGroupBox->addWidget( m_selectAllCheckBox, 0);
     layoutGroupBox->addWidget( m_reconstructionListBox, 1);
     layoutGroupBox->addWidget( m_resetButton, 0);
     layoutGroupBox->addWidget( m_saveButton, 0);
     layoutGroupBox->addWidget( m_saveSelectionComboBox,0);
     layoutGroupBox->addWidget( m_loadButton, 0);
 
-    //test
-    layoutGroupBox->addWidget( m_testButton, 0);
-
     container->setLayout( layout );
 
     this->updating();
@@ -126,15 +119,13 @@ void SOrganTransformation::starting() throw( ::fwTools::Failed )
 void SOrganTransformation::stopping() throw( ::fwTools::Failed )
 {
     QObject::disconnect(m_reconstructionListBox,
-                        SIGNAL(itemClicked (QListWidgetItem * )),
+                        SIGNAL(itemClicked (QListWidgetItem* )),
                         this,
-                        SLOT(onReconstructionCheck(QListWidgetItem *)));
+                        SLOT(onReconstructionCheck(QListWidgetItem*)));
     QObject::disconnect(m_resetButton, SIGNAL(clicked( )), this, SLOT(onResetClick()));
     QObject::disconnect(m_saveButton, SIGNAL(clicked( )), this, SLOT(onSaveClick()));
     QObject::disconnect(m_loadButton, SIGNAL(clicked( )), this, SLOT(onLoadClick()));
-
-    //test
-    QObject::disconnect(m_testButton, SIGNAL(clicked( )), this, SLOT(onTestClick()));
+    QObject::disconnect(m_selectAllCheckBox, SIGNAL(stateChanged(int)), this, SLOT(onSelectAllChanged(int)));
 
     this->getContainer()->clean();
     this->destroy();
@@ -156,23 +147,12 @@ void SOrganTransformation::updating() throw( ::fwTools::Failed )
 
 //------------------------------------------------------------------------------
 
-void SOrganTransformation::receiving( ::fwServices::ObjectMsg::csptr msg ) throw( ::fwTools::Failed )
+void SOrganTransformation::info( ::std::ostream& sstream )
 {
-    ::fwComEd::ModelSeriesMsg::csptr pMessage = ::fwComEd::ModelSeriesMsg::dynamicConstCast( msg );
-
-    if( pMessage && pMessage->hasEvent( ::fwComEd::ModelSeriesMsg::ADD_RECONSTRUCTION ) )
-    {
-        this->updating();
-    }
 }
 
 //------------------------------------------------------------------------------
 
-void SOrganTransformation::info( ::std::ostream& sstream )
-{}
-
-//------------------------------------------------------------------------------
-
 void SOrganTransformation::refresh()
 {
     m_reconstructionMap.clear();
@@ -181,7 +161,7 @@ void SOrganTransformation::refresh()
     ::fwMedData::ModelSeries::sptr series = this->getObject< ::fwMedData::ModelSeries >();
 
     ::fwGuiQt::container::QtContainer::sptr qtContainer =
-            ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+        ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -194,10 +174,10 @@ void SOrganTransformation::refresh()
         if (::fwTools::fwID::exist(m_TMSUid))
         {
             pComposite = ::fwData::Composite::dynamicCast(::fwTools::fwID::getObject(m_TMSUid));
-            SLM_ASSERT("Sorry, '"<< m_TMSUid <<"' object is not a composite", pComposite);
+            SLM_ASSERT("The object '"<< m_TMSUid <<"' is not a composite", pComposite);
         }
 
-        BOOST_FOREACH(::fwData::Reconstruction::sptr rec, series->getReconstructionDB())
+        for(::fwData::Reconstruction::sptr rec :  series->getReconstructionDB())
         {
             m_reconstructionMap[ rec->getOrganName() ] = rec;
         }
@@ -223,26 +203,25 @@ void SOrganTransformation::refresh()
 
 void SOrganTransformation::notitfyTransformationMatrix(::fwData::TransformationMatrix3D::sptr aTransMat)
 {
-    ::fwComEd::TransformationMatrix3DMsg::sptr message = ::fwComEd::TransformationMatrix3DMsg::New();
-    message->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED );
-    ::fwServices::IEditionService::notify( getSptr(), aTransMat, message );
+    auto sig = aTransMat->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
 }
 
 //------------------------------------------------------------------------------
 
-void SOrganTransformation::onReconstructionCheck(QListWidgetItem *currentItem)
+void SOrganTransformation::onReconstructionCheck(QListWidgetItem* currentItem)
 {
     ::fwData::Composite::sptr pComposite;
     if (::fwTools::fwID::exist(m_TMSUid))
     {
         pComposite = ::fwData::Composite::dynamicCast(::fwTools::fwID::getObject(m_TMSUid));
-        SLM_ASSERT("Sorry, '"<< m_TMSUid <<"' object is not a composite", pComposite);
+        SLM_ASSERT("The object '"<< m_TMSUid <<"' is not a composite", pComposite);
 
-        ::std::string item_name = currentItem->text().toStdString();
+        ::std::string item_name                        = currentItem->text().toStdString();
         ::fwData::Reconstruction::sptr pReconstruction = m_reconstructionMap[item_name];
-        ::fwData::Mesh::sptr pMesh = pReconstruction->getMesh();
+        ::fwData::Mesh::sptr pMesh                     = pReconstruction->getMesh();
 
-        ::fwComEd::helper::Composite aCompositeHelper(pComposite);
+        ::fwDataTools::helper::Composite aCompositeHelper(pComposite);
         if ((currentItem->checkState()) == Qt::Checked)
         {
             if (pComposite->find(item_name) == pComposite->end())
@@ -261,7 +240,7 @@ void SOrganTransformation::onReconstructionCheck(QListWidgetItem *currentItem)
                 aCompositeHelper.remove(item_name);
             }
         }
-        aCompositeHelper.notify(this->getSptr());
+        aCompositeHelper.notify();
     }
 }
 
@@ -272,16 +251,15 @@ void SOrganTransformation::onResetClick()
     ::fwMedData::ModelSeries::sptr series = this->getObject< ::fwMedData::ModelSeries >();
 
     //search the corresponding triangular mesh
-    BOOST_FOREACH(::fwData::Reconstruction::sptr rec, series->getReconstructionDB())
+    for(::fwData::Reconstruction::sptr rec :  series->getReconstructionDB())
     {
         ::fwData::Mesh::sptr pTmpTrMesh = rec->getMesh();
 
         ::fwData::TransformationMatrix3D::sptr pTmpMat =
-                pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
+            pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
         if (pTmpMat)
         {
-            ::fwData::TransformationMatrix3D::sptr pIdentMat;
-            pTmpMat = ::fwData::Object::copy(pIdentMat);
+            ::fwDataTools::TransformationMatrix3D::identity(pTmpMat);
             this->notitfyTransformationMatrix(pTmpMat);
         }
     }
@@ -297,15 +275,15 @@ void SOrganTransformation::onSaveClick()
 
     if(!series->getReconstructionDB().empty())
     {
-        BOOST_FOREACH(::fwData::Reconstruction::sptr rec, series->getReconstructionDB())
+        for(::fwData::Reconstruction::sptr rec :  series->getReconstructionDB())
         {
-            ::fwData::Mesh::sptr pTmpTrMesh = rec->getMesh();
+            ::fwData::Mesh::sptr pTmpTrMesh                = rec->getMesh();
             ::fwData::TransformationMatrix3D::sptr pTmpMat =
-                    pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
+                pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
             if (pTmpMat)
             {
                 ::fwData::TransformationMatrix3D::sptr pCpyTmpMat;
-                pCpyTmpMat = ::fwData::Object::copy(pTmpMat);
+                pCpyTmpMat                  = ::fwData::Object::copy(pTmpMat);
                 matMap[pTmpTrMesh->getID()] = pCpyTmpMat;
             }
         }
@@ -329,13 +307,13 @@ void SOrganTransformation::onLoadClick()
         ::fwMedData::ModelSeries::sptr series = this->getObject< ::fwMedData::ModelSeries >();
 
         //search the corresponding triangular mesh
-        BOOST_FOREACH(::fwData::Reconstruction::sptr rec, series->getReconstructionDB())
+        for(::fwData::Reconstruction::sptr rec :  series->getReconstructionDB())
         {
             ::fwData::Mesh::sptr pTmpTrMesh = rec->getMesh();
             if (matMap.find(pTmpTrMesh->getID()) != matMap.end())
             {
                 ::fwData::TransformationMatrix3D::sptr pTmpMat =
-                        pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
+                    pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
                 if (pTmpMat)
                 {
                     pTmpMat->shallowCopy(matMap[pTmpTrMesh->getID()]);
@@ -348,46 +326,62 @@ void SOrganTransformation::onLoadClick()
 
 //------------------------------------------------------------------------------
 
-void SOrganTransformation::onTestClick()
+void SOrganTransformation::onSelectAllChanged(int state)
 {
-    ::fwData::TransformationMatrix3D::sptr pRandTmpMat = ::fwData::TransformationMatrix3D::New();
-    srand(time(NULL));
-
-    //randomize the translation parts
-    //pRandTmpMat->setCoefficient(0, 3, (double)(-rand()%50) + 25);
-    //pRandTmpMat->setCoefficient(1, 3, (double)(-rand()%50) + 25);
-    //pRandTmpMat->setCoefficient(2, 3, (double)(-rand()%50) + 25);
 
-    //randomize the 12 parameters of affine transformation matrix
-    for (unsigned int i = 0; i < 3; i++)
+    if (::fwTools::fwID::exist(m_TMSUid))
     {
-        for(unsigned int j = 0; j < 4; j++)
-        {
-            pRandTmpMat->setCoefficient(i, j, (double)(-rand()%4 + 2));
-        }
-    }
+        ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast(::fwTools::fwID::getObject(m_TMSUid));
+        ::fwDataTools::helper::Composite compositeHelper(composite);
 
-    InnerMatMappingType matMap = m_saveListing[m_saveSelectionComboBox->currentText().toStdString()];
+        if(state == Qt::Checked)
+        {
+            m_reconstructionListBox->setEnabled(false);
 
-    ::fwMedData::ModelSeries::sptr series = this->getObject< ::fwMedData::ModelSeries >();
+            ::fwMedData::ModelSeries::sptr series = this->getObject< ::fwMedData::ModelSeries >();
 
-    //search the corresponding triangular mesh
-    BOOST_FOREACH(::fwData::Reconstruction::sptr rec, series->getReconstructionDB())
-    {
-        ::fwData::Mesh::sptr pTmpTrMesh = rec->getMesh();
+            for(::fwData::Reconstruction::sptr rec :  series->getReconstructionDB())
+            {
+                if(composite->find(rec->getOrganName()) == composite->end())
+                {
+                    compositeHelper.add(rec->getOrganName(), rec->getMesh());
+                }
+            }
 
-        ::fwData::TransformationMatrix3D::sptr pTmpMat =
-                pTmpTrMesh->getField< ::fwData::TransformationMatrix3D>( "TransformMatrix" );
-        if (pTmpMat)
+        }
+        else if(state == Qt::Unchecked)
         {
-            pTmpMat->setCoefficients(pRandTmpMat->getCoefficients());
-            this->notitfyTransformationMatrix(pTmpMat);
+            m_reconstructionListBox->setEnabled(true);
+
+            QList<QListWidgetItem*> itemList = m_reconstructionListBox->findItems("", Qt::MatchContains);
+            for(QListWidgetItem* item :  itemList)
+            {
+                if(item->checkState() == Qt::Unchecked)
+                {
+                    compositeHelper.remove(item->text().toStdString());
+                }
+            }
+
+            this->refresh();
         }
+        compositeHelper.notify();
     }
 }
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType SOrganTransformation::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace editor
 } // namespace uiMedData
 
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSelector.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSelector.cpp
index 8cab64d..5786d63 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSelector.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSelector.cpp
@@ -1,32 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "uiMedDataQt/editor/SSelector.hpp"
 
-#include <QVBoxLayout>
+#include "uiMedDataQt/widget/Selector.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwDataTools/helper/Vector.hpp>
 
-#include <fwComEd/helper/Vector.hpp>
-#include <fwComEd/helper/SeriesDB.hpp>
-#include <fwComEd/SeriesDBMsg.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwMedData/Series.hpp>
 #include <fwMedData/SeriesDB.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <fwMedDataTools/helper/SeriesDB.hpp>
 
-#include "uiMedDataQt/editor/SSelector.hpp"
-#include "uiMedDataQt/widget/Selector.hpp"
+#include <fwServices/macros.hpp>
 
+#include <QVBoxLayout>
 
 namespace uiMedData
 {
@@ -35,12 +39,15 @@ namespace editor
 {
 //------------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiMedData::editor::SSelector , ::fwMedData::SeriesDB ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiMedData::editor::SSelector, ::fwMedData::SeriesDB );
 
 //------------------------------------------------------------------------------
 
 const ::fwCom::Signals::SignalKeyType SSelector::s_SERIES_DOUBLE_CLICKED_SIG = "seriesDoubleClicked";
 
+const ::fwCom::Slots::SlotKeyType SSelector::s_ADD_SERIES_SLOT    = "addSeries";
+const ::fwCom::Slots::SlotKeyType SSelector::s_REMOVE_SERIES_SLOT = "removeSeries";
+
 //------------------------------------------------------------------------------
 
 SSelector::SSelector() :
@@ -54,9 +61,10 @@ SSelector::SSelector() :
     // Register
     m_signals( s_SERIES_DOUBLE_CLICKED_SIG,  m_sigSeriesDoubleClicked);
 
-#ifdef COM_LOG
-    ::fwCom::HasSignals::m_signals.setID();
-#endif
+    newSlot(s_ADD_SERIES_SLOT, &SSelector::addSeries, this);
+    m_slotRemoveSeries = newSlot(s_REMOVE_SERIES_SLOT, &SSelector::removeSeries, this);
+
+
 }
 
 //------------------------------------------------------------------------------
@@ -67,7 +75,7 @@ SSelector::~SSelector() throw()
 
 //------------------------------------------------------------------------------
 
-void SSelector::info(std::ostream &_sstream )
+void SSelector::info(std::ostream& _sstream )
 {
     // Update message
     _sstream << std::string("SSelector");
@@ -79,16 +87,18 @@ void SSelector::starting() throw(::fwTools::Failed)
 {
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     m_selectorWidget = new ::uiMedData::widget::Selector();
+    m_selectorWidget->setSeriesIcons(m_seriesIcons);
     m_selectorWidget->setSelectionMode(m_selectionMode);
     m_selectorWidget->setAllowedRemove(m_allowedRemove);
     m_selectorWidget->setInsertMode(m_insertMode);
 
-    QVBoxLayout *layout = new QVBoxLayout();
+    QVBoxLayout* layout = new QVBoxLayout();
     layout->addWidget(m_selectorWidget);
     container->setLayout(layout);
 
@@ -100,7 +110,7 @@ void SSelector::starting() throw(::fwTools::Failed)
     if(!m_insertMode)
     {
         QObject::connect(m_selectorWidget, SIGNAL(doubleClicked(const QModelIndex &)),
-                this, SLOT(onDoubleClick(const QModelIndex &)));
+                         this, SLOT(onDoubleClick(const QModelIndex &)));
     }
 
     if(m_allowedRemove)
@@ -115,38 +125,6 @@ void SSelector::starting() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SSelector::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::SeriesDBMsg::csptr seriesDBMsg = ::fwComEd::SeriesDBMsg::dynamicConstCast(msg);
-
-    if ( seriesDBMsg && seriesDBMsg->hasEvent( ::fwComEd::SeriesDBMsg::ADDED_OBJECTS ) )
-    {
-        ::fwData::Vector::sptr addedObject = seriesDBMsg->getAddedSeries();
-        BOOST_FOREACH( ::fwData::Object::sptr obj, addedObject->getContainer() )
-        {
-            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
-            if(series)
-            {
-                m_selectorWidget->addSeries(series);
-            }
-        }
-    }
-    if ( seriesDBMsg && seriesDBMsg->hasEvent( ::fwComEd::SeriesDBMsg::REMOVED_OBJECTS ) )
-    {
-        ::fwData::Vector::sptr removedObject = seriesDBMsg->getRemovedSeries();
-        BOOST_FOREACH( ::fwData::Object::sptr obj, removedObject->getContainer() )
-        {
-            ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
-            if(series)
-            {
-                m_selectorWidget->removeSeries(series);
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void SSelector::stopping() throw(::fwTools::Failed)
 {
     this->getContainer()->clean();
@@ -157,11 +135,19 @@ void SSelector::stopping() throw(::fwTools::Failed)
 
 void SSelector::updating() throw(::fwTools::Failed)
 {
-    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    ::fwMedData::SeriesDB::sptr seriesDB;
+    if (this->isVersion2())
+    {
+        seriesDB = this->getInOut< ::fwMedData::SeriesDB >("seriesDB");
+    }
+    else
+    {
+        seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    }
 
     m_selectorWidget->clear();
 
-    BOOST_FOREACH(::fwMedData::Series::sptr series, seriesDB->getContainer())
+    for(::fwMedData::Series::sptr series :  seriesDB->getContainer())
     {
         m_selectorWidget->addSeries(series);
     }
@@ -173,11 +159,13 @@ void SSelector::configuring() throw(::fwTools::Failed)
 {
     this->::fwGui::IGuiContainerSrv::initialize();
 
-    std::vector < ::fwRuntime::ConfigurationElement::sptr > selectionCfg = m_configuration->find("selectionId");
-    SLM_ASSERT("Missing tag 'selectionId'", !selectionCfg.empty());
-
-    m_selectionId = selectionCfg.front()->getValue();
-    SLM_ASSERT("selectionId must not be empty", !m_selectionId.empty());
+    if(!this->isVersion2())
+    {
+        std::vector < ::fwRuntime::ConfigurationElement::sptr > selectionCfg = m_configuration->find("selectionId");
+        SLM_ASSERT("Missing tag 'selectionId'", !selectionCfg.empty());
+        m_selectionId = selectionCfg.front()->getValue();
+        SLM_ASSERT("selectionId must not be empty", !m_selectionId.empty());
+    }
 
     std::vector < ::fwRuntime::ConfigurationElement::sptr > selectionModeCfg = m_configuration->find("selectionMode");
     if(!selectionModeCfg.empty())
@@ -239,6 +227,24 @@ void SSelector::configuring() throw(::fwTools::Failed)
         }
     }
 
+    std::vector < ::fwRuntime::ConfigurationElement::sptr > iconsCfg = m_configuration->find("icons");
+    if (!iconsCfg.empty())
+    {
+        SLM_ASSERT("Only one 'config' tag is allowed for SSelector configuration", iconsCfg.size() == 1);
+
+        std::vector < ::fwRuntime::ConfigurationElement::sptr > cfg = iconsCfg.front()->find("icon");
+
+        for(::fwRuntime::ConfigurationElement::sptr elt :  cfg)
+        {
+            std::string series = elt->getAttributeValue("series");
+            SLM_ASSERT("'series' attribute is missing", !series.empty());
+
+            std::string icon = elt->getAttributeValue("icon");
+            SLM_ASSERT("'icon' attribute is missing", !icon.empty());
+
+            m_seriesIcons[series] = icon;
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -247,24 +253,24 @@ void SSelector::onSelectedSeries(QVector< ::fwMedData::Series::sptr > selection,
                                  QVector< ::fwMedData::Series::sptr > deselection)
 {
     ::fwData::Vector::sptr selectionVector = this->getSelection();
-    ::fwComEd::helper::Vector vectorHelper(selectionVector);
+    ::fwDataTools::helper::Vector vectorHelper(selectionVector);
 
-    BOOST_FOREACH( ::fwMedData::Series::sptr series, deselection)
+    for( ::fwMedData::Series::sptr series :  deselection)
     {
         vectorHelper.remove(series);
     }
 
-    BOOST_FOREACH( ::fwMedData::Series::sptr series, selection)
+    for( ::fwMedData::Series::sptr series :  selection)
     {
         vectorHelper.add(series);
     }
 
-    vectorHelper.notify(this->getSptr());
+    vectorHelper.notify();
 }
 
 //------------------------------------------------------------------------------
 
-void SSelector::onDoubleClick(const QModelIndex &index)
+void SSelector::onDoubleClick(const QModelIndex& index)
 {
     m_selectorWidget->clearSelection();
     m_selectorWidget->setCurrentIndex(index);
@@ -282,11 +288,11 @@ void SSelector::onDoubleClick(const QModelIndex &index)
     else if (m_selectorWidget->getItemType(index) == ::uiMedData::widget::SelectorModel::SERIES)
     {
         SLM_ASSERT("There must be only one object selected", selectionVector->size() == 1);
-        ::fwData::Object::sptr obj = selectionVector->front();
+        ::fwData::Object::sptr obj       = selectionVector->front();
         ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
         SLM_ASSERT("Object must be a '::fwMedData::Series'", series);
 
-        fwServicesNotifyMacro(this->getLightID(), m_sigSeriesDoubleClicked, (series));
+        m_sigSeriesDoubleClicked->asyncEmit (series);
     }
 }
 
@@ -294,29 +300,50 @@ void SSelector::onDoubleClick(const QModelIndex &index)
 
 void SSelector::onRemoveSeries(QVector< ::fwMedData::Series::sptr > selection)
 {
-    ::fwMedData::SeriesDB::sptr seriesDB = this->getObject< ::fwMedData::SeriesDB >();
-    ::fwComEd::helper::SeriesDB seriesDBHelper(seriesDB);
+    ::fwMedData::SeriesDB::sptr seriesDB;
+    if (this->isVersion2())
+    {
+        seriesDB = this->getInOut< ::fwMedData::SeriesDB >("seriesDB");
+    }
+    else
+    {
+        seriesDB = this->getObject< ::fwMedData::SeriesDB >();
+    }
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
 
     // Remove duplicated series
     std::set< ::fwMedData::Series::sptr > seriesSet;
     std::copy(selection.begin(), selection.end(), std::inserter(seriesSet, seriesSet.begin()));
 
-    BOOST_FOREACH( ::fwMedData::Series::sptr series, seriesSet)
+    for( ::fwMedData::Series::sptr series :  seriesSet)
     {
         seriesDBHelper.remove(series);
     }
 
-    seriesDBHelper.notify(this->getSptr());
+    {
+        auto sig = seriesDB->signal< ::fwMedData::SeriesDB::RemovedSeriesSignalType >(
+            ::fwMedData::SeriesDB::s_REMOVED_SERIES_SIG );
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotRemoveSeries));
+        seriesDBHelper.notify();
+    }
 }
 
 //------------------------------------------------------------------------------
 
 ::fwData::Vector::sptr SSelector::getSelection()
 {
-    SLM_ASSERT("Object " << m_selectionId << " doesn't exist", ::fwTools::fwID::exist(m_selectionId));
+    ::fwData::Vector::sptr selection;
+    if(this->isVersion2())
+    {
+        selection = this->getInOut< ::fwData::Vector >("selection");
+    }
+    else
+    {
+        SLM_ASSERT("Object " << m_selectionId << " doesn't exist", ::fwTools::fwID::exist(m_selectionId));
 
-    ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_selectionId);
-    ::fwData::Vector::sptr selection = ::fwData::Vector::dynamicCast(obj);
+        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_selectionId);
+        selection                   = ::fwData::Vector::dynamicCast(obj);
+    }
     SLM_ASSERT("Object " << m_selectionId << " is not a '::fwData::Vector'", selection);
 
     return selection;
@@ -324,5 +351,47 @@ void SSelector::onRemoveSeries(QVector< ::fwMedData::Series::sptr > selection)
 
 //------------------------------------------------------------------------------
 
+void SSelector::addSeries(::fwMedData::SeriesDB::ContainerType addedSeries)
+{
+    for( ::fwMedData::Series::sptr series :  addedSeries )
+    {
+        m_selectorWidget->addSeries(series);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSelector::removeSeries(::fwMedData::SeriesDB::ContainerType removedSeries)
+{
+    for( ::fwMedData::Series::sptr series :  removedSeries )
+    {
+        m_selectorWidget->removeSeries(series);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SSelector::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG, s_ADD_SERIES_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::SeriesDB::s_REMOVED_SERIES_SIG, s_REMOVE_SERIES_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap SSelector::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( "seriesDB", ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG, s_ADD_SERIES_SLOT );
+    connections.push( "seriesDB", ::fwMedData::SeriesDB::s_REMOVED_SERIES_SIG, s_REMOVE_SERIES_SLOT );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace editor
 } // namespace uiMedData
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSeries.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSeries.cpp
index a4b26c7..f6490c2 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSeries.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/editor/SSeries.cpp
@@ -1,67 +1,69 @@
-#include <QWidget>
-#include <QLabel>
-#include <QLineEdit>
-#include <QVBoxLayout>
-#include <QHBoxLayout>
-#include <QPushButton>
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
-#include <fwTools/Object.hpp>
+#include "uiMedDataQt/editor/SSeries.hpp"
 
-#include <fwCom/Slots.hpp>
+#include "uiMedDataQt/widget/EquipmentEditor.hpp"
+#include "uiMedDataQt/widget/PatientEditor.hpp"
+#include "uiMedDataQt/widget/SeriesEditor.hpp"
+#include "uiMedDataQt/widget/StudyEditor.hpp"
+
+#include <fwCom/Signal.hxx>
 #include <fwCom/Slots.hxx>
 
-#include <fwComEd/VectorMsg.hpp>
-#include <fwComEd/helper/SeriesDB.hpp>
+#include <fwData/Vector.hpp>
 
 #include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGuiQt/container/QtContainer.hpp>
 
-#include <fwData/Vector.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Study.hpp>
 
 #include <fwMedDataTools/functions.hpp>
+#include <fwMedDataTools/helper/SeriesDB.hpp>
 
 #include <fwServices/macros.hpp>
 
-#include "uiMedDataQt/widget/PatientEditor.hpp"
-#include "uiMedDataQt/widget/StudyEditor.hpp"
-#include "uiMedDataQt/widget/EquipmentEditor.hpp"
-#include "uiMedDataQt/widget/SeriesEditor.hpp"
-#include "uiMedDataQt/editor/SSeries.hpp"
+#include <fwTools/Object.hpp>
+
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QWidget>
 
 namespace uiMedData
 {
 namespace editor
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiMedData::editor::SSeries , ::fwData::Vector ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiMedData::editor::SSeries, ::fwData::Vector );
 
-const ::fwCom::Signals::SignalKeyType SSeries::s_EXPORT_SLOT = "export";
+const ::fwCom::Signals::SignalKeyType SSeries::s_EXPORT_SLOT         = "export";
 const ::fwCom::Signals::SignalKeyType SSeries::s_SERIES_EXPORTED_SIG = "seriesExported";
-const ::fwCom::Signals::SignalKeyType SSeries::s_CAN_EXPORT_SIG = "canExport";
+const ::fwCom::Signals::SignalKeyType SSeries::s_CAN_EXPORT_SIG      = "canExport";
 
 //------------------------------------------------------------------------------
 
 SSeries::SSeries()
 {
-    m_slotExport  = ::fwCom::newSlot( &SSeries::onExportClicked, this ) ;
+    m_slotExport = ::fwCom::newSlot( &SSeries::onExportClicked, this );
     ::fwCom::HasSlots::m_slots( s_EXPORT_SLOT, m_slotExport );
 
-    m_sigCanExport = CanExportSignalType::New();
+    m_sigCanExport      = CanExportSignalType::New();
     m_sigSeriesExported = SeriesExportedSignalType::New();
 
     ::fwCom::HasSignals::m_signals
         (s_CAN_EXPORT_SIG, m_sigCanExport)
         (s_SERIES_EXPORTED_SIG, m_sigSeriesExported)
-        ;
+    ;
+
 
-#ifdef COM_LOG
-    m_slotExport->setID(s_EXPORT_SLOT);
-    m_sigCanExport->setID(s_CAN_EXPORT_SIG);
-    m_sigSeriesExported->setID(s_SERIES_EXPORTED_SIG);
-#endif
 
     // worker was set by IService
     ::fwCom::HasSlots::m_slots.setWorker( m_associatedWorker );
@@ -70,7 +72,8 @@ SSeries::SSeries()
 //------------------------------------------------------------------------------
 
 SSeries::~SSeries() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -84,10 +87,10 @@ void SSeries::starting() throw(::fwTools::Failed)
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
-    m_patientEditor = new ::uiMedData::widget::PatientEditor();
-    m_studyEditor = new ::uiMedData::widget::StudyEditor();
+    m_patientEditor   = new ::uiMedData::widget::PatientEditor();
+    m_studyEditor     = new ::uiMedData::widget::StudyEditor();
     m_equipmentEditor = new ::uiMedData::widget::EquipmentEditor();
-    m_seriesEditor = new ::uiMedData::widget::SeriesEditor();
+    m_seriesEditor    = new ::uiMedData::widget::SeriesEditor();
 
 
     QVBoxLayout* studyEquipmentLayout = new QVBoxLayout();
@@ -106,7 +109,7 @@ void SSeries::starting() throw(::fwTools::Failed)
     m_btnExport = new QPushButton(tr("Export series"));
     m_btnExport->setEnabled(false);
     m_btnExport->setVisible(m_sigCanExport->getNumberOfConnections() == 0);
-    fwServicesNotifyMacro(this->getLightID(), m_sigCanExport, (false));
+    m_sigCanExport->asyncEmit(false);
     QHBoxLayout* btnLayout = new QHBoxLayout();
     btnLayout->setAlignment(Qt::AlignRight);
     btnLayout->setSizeConstraint(QLayout::SetFixedSize);
@@ -150,12 +153,12 @@ void SSeries::updating() throw(::fwTools::Failed)
         m_equipmentEditor->setSeries(series);
         m_seriesEditor->setSeries(series);
         m_btnExport->setEnabled(true);
-        fwServicesNotifyMacro(this->getLightID(), m_sigCanExport, (true));
+        m_sigCanExport->asyncEmit(true);
     }
     else
     {
         m_btnExport->setEnabled(false);
-        fwServicesNotifyMacro(this->getLightID(), m_sigCanExport, (false));
+        m_sigCanExport->asyncEmit(false);
     }
 }
 
@@ -176,7 +179,7 @@ void SSeries::onExportClicked()
     SLM_ASSERT("Failed to retrieve a ::fwMedData::SeriesDB from object '" << m_seriesDBId << "'", seriesDB);
 
     if(m_patientEditor->isValid() && m_studyEditor->isValid()
-            && m_equipmentEditor->isValid() && m_seriesEditor->isValid())
+       && m_equipmentEditor->isValid() && m_seriesEditor->isValid())
     {
 
         ::fwData::Vector::sptr vector = this->getObject< ::fwData::Vector >();
@@ -185,7 +188,7 @@ void SSeries::onExportClicked()
         SLM_ASSERT("Failed to retrieve ::fwMedData::Series from vector", seriesVec);
 
         ::fwMedData::Patient::sptr patient = m_patientEditor->getPatient();
-        ::fwMedData::Study::sptr study = m_studyEditor->getStudy();
+        ::fwMedData::Study::sptr study     = m_studyEditor->getStudy();
 
         // If a new patient is being created but the study edition didn't change a new study instance UID must be set
         if(patient->getPatientId() != seriesVec->getPatient()->getPatientId())
@@ -204,7 +207,7 @@ void SSeries::onExportClicked()
         series->setDescription(seriesInfo->getDescription());
         series->setPerformingPhysiciansName(seriesInfo->getPerformingPhysiciansName());
 
-        ::fwComEd::helper::SeriesDB helper(seriesDB);
+        ::fwMedDataTools::helper::SeriesDB helper(seriesDB);
         ::fwMedData::SeriesDB::iterator it = std::find(seriesDB->begin(), seriesDB->end(), series);
         if(it != seriesDB->end())
         {
@@ -218,10 +221,9 @@ void SSeries::onExportClicked()
         else
         {
             helper.add(series);
-            helper.notify(this->getSptr());
+            helper.notify();
         }
-
-        fwServicesNotifyMacro(this->getLightID(), m_sigSeriesExported, ());
+        m_sigSeriesExported->asyncEmit();
     }
     else
     {
@@ -255,15 +257,14 @@ void SSeries::configuring() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SSeries::receiving(::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+::fwServices::IService::KeyConnectionsType SSeries::getObjSrvConnections() const
 {
-    ::fwComEd::VectorMsg::csptr vectorMsg = ::fwComEd::VectorMsg::dynamicConstCast(_msg);
+    KeyConnectionsType connections;
 
-    if ( vectorMsg && (vectorMsg->hasEvent( ::fwComEd::VectorMsg::ADDED_OBJECTS )
-                      || vectorMsg->hasEvent( ::fwComEd::VectorMsg::REMOVED_OBJECTS ) ))
-    {
-        this->updating();
-    }
+    connections.push_back( std::make_pair( ::fwData::Vector::s_ADDED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Vector::s_REMOVED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/ActivityDataView.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/ActivityDataView.cpp
new file mode 100644
index 0000000..ed0a19f
--- /dev/null
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/ActivityDataView.cpp
@@ -0,0 +1,913 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "uiMedDataQt/widget/ActivityDataView.hpp"
+
+#include <fwActivities/IActivityValidator.hpp>
+#include <fwActivities/IObjectValidator.hpp>
+#include <fwActivities/IValidator.hpp>
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/Float.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/String.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwServices/IService.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+
+#include <QApplication>
+#include <QDropEvent>
+#include <QHBoxLayout>
+#include <QInputDialog>
+#include <QKeyEvent>
+#include <QLabel>
+#include <QMessageBox>
+#include <QMimeData>
+#include <QPixmap>
+#include <QPushButton>
+#include <QStandardItem>
+#include <QTableWidget>
+#include <QVBoxLayout>
+
+namespace uiMedData
+{
+namespace widget
+{
+
+const int ActivityDataView::s_UID_ROLE = Qt::UserRole + 1;
+
+//-----------------------------------------------------------------------------
+
+ActivityDataView::ActivityDataView(QWidget *parent) :
+    QTabWidget(parent)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ActivityDataView::~ActivityDataView()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::clear()
+{
+    m_importedObject.clear();
+    m_treeWidgets.clear();
+    QTabWidget::clear();
+}
+
+//-----------------------------------------------------------------------------
+
+bool ActivityDataView::eventFilter(QObject *obj, QEvent *event)
+{
+    // get dropped data in tree widget
+    if (event->type() == QEvent::Drop)
+    {
+        QDropEvent *dropEvent = static_cast<QDropEvent *>(event);
+
+        size_t index = static_cast<size_t>(this->currentIndex());
+        ::fwActivities::registry::ActivityRequirement requirement = m_activityInfo.requirements[index];
+        QPointer<QTreeWidget> tree = m_treeWidgets[index];
+
+        // get dropped item from event mimedata
+        const QMimeData* qMimeData = dropEvent->mimeData();
+
+        QByteArray encoded = qMimeData->data("application/x-qabstractitemmodeldatalist");
+        QDataStream stream(&encoded, QIODevice::ReadOnly);
+
+        QList<QTreeWidgetItem * > itemList;
+        QTreeWidgetItem *item;
+
+        // Get the dropped item
+        while (!stream.atEnd())
+        {
+            int row, col;
+
+            QMap<int,  QVariant> roleDataMap;
+
+            stream >> row >> col >> roleDataMap;
+
+            if(col == 0)
+            {
+                item = new QTreeWidgetItem();
+                itemList.push_back(item);
+            }
+
+            QList<int> keys = roleDataMap.keys();
+            for (int key : keys)
+            {
+                item->setData(col, key, roleDataMap[key]);
+            }
+        }
+
+        // check if the limit number of data is exceeded
+        int nbChild = tree->topLevelItemCount() + itemList.size();
+        if (static_cast<unsigned int>(nbChild) > requirement.maxOccurs )
+        {
+            QMessageBox::warning(this, "Drop", "The maximum number of element is reached.\n"
+                                 "You must remove one before adding another.");
+        }
+        else
+        {
+            // add the dropped item in the tree
+            for (QTreeWidgetItem * itemToAdd: itemList)
+            {
+                itemToAdd->setFlags(itemToAdd->flags() & ~Qt::ItemIsDropEnabled);
+                std::string uid = itemToAdd->data(int(ColumnType::NAME), s_UID_ROLE).toString().toStdString();
+                if (!uid.empty())
+                {
+                    // insert the object if it is in the required type
+                    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(uid));
+                    if (obj && obj->isA(requirement.type))
+                    {
+                        // Insert the new object
+                        tree->addTopLevelItem(itemToAdd);
+                    }
+                }
+            }
+        }
+        return true;
+    }
+    else if (event->type() == QEvent::KeyPress)
+    {
+        QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+        if (keyEvent->key() == Qt::Key_Delete)
+        {
+            this->removeSelectedObjects();
+            return true;
+        }
+    }
+
+    // standard event processing
+    return QObject::eventFilter(obj, event);
+
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::fillInformation(const ::fwActivities::registry::ActivityInfo & info)
+{
+    namespace ActReg = ::fwActivities::registry;
+
+    m_activityInfo = info;
+    this->clear();
+
+    ActReg::ActivityInfo::RequirementsType reqVect = m_activityInfo.requirements;
+    for(const ActReg::ActivityRequirement& req :  reqVect)
+    {
+        QVBoxLayout * layout = new QVBoxLayout();
+        QWidget * widget     = new QWidget();
+        widget->setLayout(layout);
+
+        QHBoxLayout * infoLayout = new QHBoxLayout();
+        layout->addLayout(infoLayout);
+
+        QVBoxLayout * typeLayout = new QVBoxLayout();
+        QVBoxLayout * txtLayout  = new QVBoxLayout();
+        infoLayout->addLayout(typeLayout);
+        infoLayout->addSpacerItem(new QSpacerItem(20, 0));
+        infoLayout->addLayout(txtLayout, 1);
+
+        ObjectIconMapType::iterator iter = m_objectIcons.find(req.type);
+        if (iter != m_objectIcons.end())
+        {
+            QString filename = QString::fromStdString(iter->second);
+
+            this->addTab(widget, QIcon(filename), QString::fromStdString(req.name));
+            QLabel * icon = new QLabel();
+            icon->setAlignment(Qt::AlignHCenter);
+            QPixmap pixmap(filename);
+            icon->setPixmap(pixmap.scaled(100, 100));
+            typeLayout->addWidget(icon);
+        }
+        else
+        {
+            this->addTab(widget, QString::fromStdString(req.name));
+        }
+
+        QLabel * type = new QLabel(QString("<small>%1</small>").arg(QString::fromStdString(req.type)));
+        type->setAlignment(Qt::AlignHCenter);
+        typeLayout->addWidget(type);
+
+        QLabel * name = new QLabel(QString("<h2>%1</h2>").arg(QString::fromStdString(req.name)));
+        name->setStyleSheet("QLabel { font: bold; }");
+        txtLayout->addWidget(name);
+
+        QLabel * description = new QLabel(QString::fromStdString(req.description));
+        description->setStyleSheet("QLabel { font: italic; }");
+        txtLayout->addWidget(description);
+
+        txtLayout->addStretch();
+
+        QLabel * nb = new QLabel();
+        nb->setStyleSheet("QLabel { font: bold; }");
+        layout->addWidget(nb);
+
+        QPointer<QTreeWidget> tree = new QTreeWidget();
+        m_treeWidgets.push_back(tree);
+        if (req.maxOccurs == 0)
+        {
+            nb->setText("No object is required, it will be automatically created.");
+            tree->setEnabled(false);
+        }
+        else if (req.minOccurs == 1 && req.maxOccurs == 1)
+        {
+            nb->setText("One object is required: ");
+        }
+        else
+        {
+            QString nbObj("Number of required object");
+            if (req.maxOccurs == std::numeric_limits<unsigned int>::max())
+            {
+                nbObj.append(QString(" >= %1").arg(req.minOccurs));
+            }
+            else
+            {
+                nbObj.append(QString(": [%1-%2]").arg(req.minOccurs).arg(req.maxOccurs));
+            }
+            nb->setText(nbObj);
+        }
+
+        QHBoxLayout * treeLayout   = new QHBoxLayout();
+        QVBoxLayout * buttonLayout = new QVBoxLayout();
+        if (req.type == "::fwData::String" || req.type == "::fwData::Boolean"
+            || req.type == "::fwData::Integer" || req.type == "::fwData::Float"
+            || req.type == "::fwData::TransformationMatrix3D")
+        {
+            QPushButton * buttonNew = new QPushButton("New");
+            buttonNew->setToolTip("Create a new empty object");
+            buttonLayout->addWidget(buttonNew);
+            QObject::connect(buttonNew, &QPushButton::clicked, this, &ActivityDataView::createNewObject);
+        }
+        QPushButton * buttonAdd    = new QPushButton("Import");
+        QPushButton * buttonRemove = new QPushButton("Remove");
+        QPushButton * buttonClear  = new QPushButton("Clear");
+        buttonLayout->addWidget(buttonAdd);
+        buttonAdd->setToolTip(QString("Import a new object of type '%1'").arg(QString::fromStdString(req.type)));
+        buttonLayout->addWidget(buttonRemove);
+        buttonRemove->setToolTip(QString("Remove the selected objects"));
+        buttonLayout->addWidget(buttonClear);
+        buttonClear->setToolTip(QString("Remove all the objects"));
+        buttonLayout->addStretch();
+        QObject::connect(buttonAdd, &QPushButton::clicked, this, &ActivityDataView::importObject);
+        QObject::connect(buttonRemove, &QPushButton::clicked, this, &ActivityDataView::removeSelectedObjects);
+        QObject::connect(buttonClear, &QPushButton::clicked, this, &ActivityDataView::clearTree);
+        treeLayout->addLayout(buttonLayout);
+
+        QStringList headers;
+        headers << "" << "object type" << "description" <<  "patient name" << "study description" << "" << "" << ""
+                << "" << "" << "" << "";
+        tree->setHeaderLabels(headers);
+
+        treeLayout->addWidget(tree, 1);
+        tree->setAlternatingRowColors(true);
+        tree->setAcceptDrops(true);
+        tree->setDragDropMode(QAbstractItemView::DropOnly);
+        tree->viewport()->installEventFilter(this);
+        tree->installEventFilter(this);
+
+        QObject::connect(tree.data(), &QTreeWidget::itemDoubleClicked, this,
+                         &ActivityDataView::onTreeItemDoubleClicked);
+        layout->addLayout(treeLayout, 1);
+
+        //TODO better management of composite container
+    }
+
+    for (int i = 1; i< this->count(); ++i)
+    {
+        this->setTabEnabled(i, false);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::fillInformation(const ::fwMedData::ActivitySeries::sptr & activitySeries)
+{
+    namespace ActReg = ::fwActivities::registry;
+    ::fwActivities::registry::ActivityInfo info;
+    info           = ::fwActivities::registry::Activities::getDefault()->getInfo(activitySeries->getActivityConfigId());
+    m_activityInfo = info;
+
+    ::fwData::Composite::sptr data = activitySeries->getData();
+
+    this->fillInformation(info);
+
+
+    for (size_t i = 0; i < m_activityInfo.requirements.size(); ++i)
+    {
+        ::fwActivities::registry::ActivityRequirement req = m_activityInfo.requirements[i];
+
+        ::fwData::Object::sptr obj = data->at< ::fwData::Object >(req.name);
+        if (obj)
+        {
+            if ((req.minOccurs == 0 && req.maxOccurs == 0) ||
+                (req.minOccurs == 1 && req.maxOccurs == 1) ||
+                req.create)
+            {
+                this->addObjectItem(i, obj);
+            }
+            else
+            {
+                if (req.container == "vector")
+                {
+                    ::fwData::Vector::sptr vector = ::fwData::Vector::dynamicCast(obj);
+                    if (vector)
+                    {
+                        for (auto subObj : vector->getContainer())
+                        {
+                            this->addObjectItem(i, subObj);
+                        }
+                    }
+                    else
+                    {
+                        SLM_ERROR("Object param '" + req.name + "' must be a '::fwData::Vector'");
+                    }
+                }
+                else // container == composite
+                {
+                    ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast(obj);
+                    if (composite)
+                    {
+                        for (auto subObj : composite->getContainer())
+                        {
+                            this->addObjectItem(i, subObj.second);
+                        }
+                    }
+                    else
+                    {
+                        SLM_ERROR("Object param '" + req.name + "' must be a '::fwData::Composite'");
+                    }
+                }
+            }
+        }
+        this->setTabEnabled(int(i), true);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::fwData::Object::sptr ActivityDataView::checkData(size_t index, std::string & errorMsg)
+{
+    ::fwData::Object::sptr data;
+
+    ::fwActivities::registry::ActivityRequirement req = m_activityInfo.requirements[index];
+    QPointer<QTreeWidget> tree = m_treeWidgets[index];
+
+    bool ok = true;
+    if ((req.minOccurs == 1 && req.maxOccurs == 1) ||
+        (req.minOccurs == 0 && req.maxOccurs == 0) ||
+        req.create)      // One object is required
+    {
+        if (tree->topLevelItemCount() == 1)
+        {
+            QTreeWidgetItem * item = tree->topLevelItem(0);
+
+            std::string uid =
+                item->data(int(ColumnType::NAME), ActivityDataView::s_UID_ROLE).toString().toStdString();
+
+            ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(uid));
+            if (obj && obj->isA(req.type))
+            {
+                data = obj;
+            }
+            else
+            {
+                ok        = false;
+                errorMsg += "\n - The parameter '" + req.name + "' must be a '" + req.type + "'.";
+            }
+        }
+        else
+        {
+            if ((req.minOccurs == 0 && req.maxOccurs == 0) || req.create)
+            {
+                data = ::fwData::factory::New(req.type);
+            }
+            else
+            {
+                ok        = false;
+                errorMsg += "\n - The parameter '" + req.name + "' is required but is not defined.";
+            }
+        }
+    }
+    else // optional object or several objects
+    {
+        unsigned int nbObj = static_cast<unsigned int>(tree->topLevelItemCount());
+
+        if (nbObj < req.minOccurs)
+        {
+            ok        = false;
+            errorMsg += "\n - The parameter '" + req.name + "' must contain at least " +
+                        std::to_string(req.minOccurs) + " elements.";
+        }
+        else if (nbObj > req.maxOccurs)
+        {
+            ok        = false;
+            errorMsg += "\n - The parameter '" + req.name + "' must contain at most " +
+                        std::to_string(req.maxOccurs) + " elements.";
+        }
+        else
+        {
+            if (req.container == "vector")
+            {
+                ::fwData::Vector::sptr vector = ::fwData::Vector::New();
+
+                for (unsigned int i = 0; i<nbObj; ++i)
+                {
+                    QTreeWidgetItem * itemData = tree->topLevelItem(int(i));
+                    std::string uid            =
+                        itemData->data(int(ColumnType::NAME), s_UID_ROLE).toString().toStdString();
+
+                    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(uid));
+                    if (obj  && obj->isA(req.type))
+                    {
+                        vector->getContainer().push_back(obj);
+                    }
+                    else
+                    {
+                        ok        = false;
+                        errorMsg += "\n - The parameter '" + req.name + "' must be a " + req.type + ".";
+                    }
+                }
+                if (ok)
+                {
+                    data = vector;
+                }
+            }
+            else // container == composite
+            {
+                ::fwData::Composite::sptr composite = ::fwData::Composite::New();
+
+                for (unsigned int i = 0; i<nbObj; ++i)
+                {
+                    QTreeWidgetItem * itemData = tree->topLevelItem(int(i));
+                    std::string uid            =
+                        itemData->data(int(ColumnType::NAME), s_UID_ROLE).toString().toStdString();
+
+                    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(uid));
+                    if (obj  && obj->isA(req.type))
+                    {
+                        std::string key  = req.keys[i].key;
+                        std::string path = req.keys[i].path;
+                        if(path.empty())
+                        {
+                            (*composite)[key] = obj;
+                        }
+                        else
+                        {
+                            (*composite)[key] = ::fwDataCamp::getObject( obj, path );
+                        }
+                    }
+                    else
+                    {
+                        ok        = false;
+                        errorMsg += "\n - The parameter '" + req.name + "' must be a " + req.type + ".";
+                    }
+                }
+                if (ok)
+                {
+                    data = composite;
+                }
+
+            }
+        }
+    }
+
+    if (data && !req.validator.empty())
+    {
+        /// Process object validator
+        ::fwActivities::IValidator::sptr validator           = ::fwActivities::validator::factory::New(req.validator);
+        ::fwActivities::IObjectValidator::sptr dataValidator = ::fwActivities::IObjectValidator::dynamicCast(validator);
+        SLM_ASSERT("Validator '" + req.validator + "' instantiation failed", dataValidator);
+
+        ::fwActivities::IValidator::ValidationType validation = dataValidator->validate(data);
+        if(!validation.first)
+        {
+            errorMsg += "\n" + validation.second;
+            data      = nullptr;
+        }
+    }
+
+    return data;
+}
+
+
+//-----------------------------------------------------------------------------
+
+bool ActivityDataView::checkAndComputeData(const ::fwMedData::ActivitySeries::sptr & actSeries, std::string & errorMsg)
+{
+    namespace ActReg = ::fwActivities::registry;
+
+    ::fwData::Composite::sptr data = actSeries->getData();
+
+    bool ok = true;
+    errorMsg += "The required data are not correct:";
+
+    // Check if all required data are present
+    for (size_t i = 0; i< m_activityInfo.requirements.size(); ++i)
+    {
+        ::fwActivities::registry::ActivityRequirement req = m_activityInfo.requirements[i];
+        std::string msg;
+        ::fwData::Object::sptr obj = this->checkData(i, msg);
+        if (obj)
+        {
+            (*data)[req.name] = obj;
+        }
+        else
+        {
+            ok        = false;
+            errorMsg += msg;
+        }
+    }
+
+    for (std::string validatotImpl : m_activityInfo.validatorsImpl)
+    {
+        /// Process activity validator
+        ::fwActivities::IValidator::sptr validator = ::fwActivities::validator::factory::New(validatotImpl);
+
+        ::fwActivities::IActivityValidator::sptr activityValidator =
+            ::fwActivities::IActivityValidator::dynamicCast(validator);
+        SLM_ASSERT("Validator '" + validatotImpl + "' instantiation failed", activityValidator);
+
+        ::fwActivities::IValidator::ValidationType validation = activityValidator->validate(actSeries);
+        if(!validation.first)
+        {
+            ok        = false;
+            errorMsg += "\n" + validation.second;
+        }
+    }
+
+    return ok;
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::removeSelectedObjects()
+{
+    size_t tabIndex                = static_cast<size_t>(this->currentIndex());
+    QPointer<QTreeWidget> tree     = m_treeWidgets[tabIndex];
+    QList<QTreeWidgetItem *> items = tree->selectedItems();
+    for (QTreeWidgetItem * item: items)
+    {
+        if (item)
+        {
+            int itemIndex                 = tree->indexOfTopLevelItem(item);
+            QTreeWidgetItem *itemToRemove = tree->takeTopLevelItem(itemIndex);
+            if (itemToRemove)
+            {
+                delete itemToRemove;
+                this->update();
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::clearTree()
+{
+    size_t tabIndex            = static_cast<size_t>(this->currentIndex());
+    QPointer<QTreeWidget> tree = m_treeWidgets[tabIndex];
+    tree->clear();
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::createNewObject()
+{
+    size_t index = static_cast<size_t>(this->currentIndex());
+
+    ::fwActivities::registry::ActivityRequirement req = m_activityInfo.requirements[index];
+
+    std::string type = req.type;
+
+    QPointer<QTreeWidget> tree = m_treeWidgets[index];
+
+    unsigned int nbItems = static_cast<unsigned int>(tree->topLevelItemCount());
+
+    if(nbItems >= req.maxOccurs)
+    {
+        QMessageBox::warning(this, "Import",
+                             "The maximum number of element is reached.\n"
+                             "You must remove one before adding another.");
+        return;
+    }
+    ::fwData::Object::sptr newObject = ::fwData::factory::New(type);
+
+    m_importedObject.push_back(newObject);
+    this->addObjectItem(index, newObject);
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::importObject()
+{
+    size_t index = static_cast<size_t>(this->currentIndex());
+
+    ::fwActivities::registry::ActivityRequirement req = m_activityInfo.requirements[index];
+
+    std::string type = req.type;
+
+    QPointer<QTreeWidget> tree = m_treeWidgets[index];
+
+    unsigned int nbItems = static_cast<unsigned int>(tree->topLevelItemCount());
+
+    if(nbItems >= req.maxOccurs)
+    {
+        QMessageBox::warning(this, "Import",
+                             "The maximum number of element is reached.\n"
+                             "You must remove one before adding another.");
+        return;
+    }
+
+    ::fwData::Object::sptr newObject = ::fwData::factory::New(type);
+    if (newObject)
+    {
+        // If type is a series, we use the SeriesDB reader and then extract the object of this type.
+        if (::fwMedData::Series::dynamicCast(newObject))
+        {
+            ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+            if (this->readObject(seriesDB))
+            {
+                unsigned int nbImportedObj = 0;
+                for (const ::fwMedData::Series::sptr &series : *seriesDB)
+                {
+                    if (series->isA(type))
+                    {
+                        ++nbImportedObj;
+                        m_importedObject.push_back(series);
+
+                        this->addObjectItem(index, series);
+
+                        if (nbImportedObj >= req.maxOccurs)
+                        {
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        else
+        {
+            if (this->readObject(newObject))
+            {
+                m_importedObject.push_back(newObject);
+
+                this->addObjectItem(index, newObject);
+            }
+        }
+    }
+    else
+    {
+        std::string msg = "Can not create object '" + type + "'";
+        OSLM_ERROR(msg);
+        QMessageBox messageBox(QMessageBox::Warning, "Error", QString::fromStdString(msg), QMessageBox::Ok);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+bool ActivityDataView::readObject(::fwData::Object::sptr obj)
+{
+    ::fwServices::IService::sptr ioSelectorSrv;
+    ioSelectorSrv = ::fwServices::add(obj,
+                                      "::gui::editor::IDialogEditor",
+                                      "::uiIO::editor::SIOSelector");
+
+    ::fwRuntime::ConfigurationElement::csptr ioCfg;
+    ioCfg = ::fwServices::registry::ServiceConfig::getDefault()->getServiceConfig(m_ioSelectorSrvConfig,
+                                                                                  "::uiIO::editor::SIOSelector");
+
+    bool isRead = true;
+    try
+    {
+        ioSelectorSrv->setConfiguration( ::fwRuntime::ConfigurationElement::constCast(ioCfg) );
+        ioSelectorSrv->configure();
+        ioSelectorSrv->start();
+        ioSelectorSrv->update();
+        ioSelectorSrv->stop();
+        ::fwServices::OSR::unregisterService( ioSelectorSrv );
+
+        // check if object is properly read.
+        // TODO : improve this test
+        {
+            ::fwData::Object::sptr tmpObject = ::fwData::factory::New(obj->getClassname());
+            ::fwDataCamp::visitor::CompareObjects visitor;
+            visitor.compare(tmpObject, obj);
+            SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
+
+            if (props->empty())
+            {
+                SLM_WARN("Object of type '" + obj->getClassname() + "' is not read.");
+                isRead = false;
+            }
+        }
+    }
+    catch(std::exception &e)
+    {
+        std::stringstream msg;
+        msg << "The object can not be imported: " << e.what();
+        SLM_ERROR(msg.str());
+
+        QMessageBox messageBox(QMessageBox::Warning, "Error", QString::fromStdString(msg.str()), QMessageBox::Ok);
+        if (ioSelectorSrv->isStarted())
+        {
+            ioSelectorSrv->stop();
+        }
+        ::fwServices::OSR::unregisterService( ioSelectorSrv );
+        isRead = false;
+    }
+    return isRead;
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::addObjectItem(size_t index, const ::fwData::Object::sptr &obj)
+{
+    QPointer<QTreeWidget> tree = m_treeWidgets[index];
+
+    QTreeWidgetItem * newItem = new QTreeWidgetItem();
+    newItem->setFlags(newItem->flags() & ~Qt::ItemIsDropEnabled);
+    newItem->setData(int(ColumnType::NAME), s_UID_ROLE, QVariant(QString::fromStdString(obj->getID())));
+    newItem->setText(int(ColumnType::TYPE), QString::fromStdString(obj->getClassname()));
+
+    // TODO add more information about object
+    ::fwMedData::Series::sptr series           = ::fwMedData::Series::dynamicCast(obj);
+    ::fwData::String::sptr strObj              = ::fwData::String::dynamicCast(obj);
+    ::fwData::Integer::sptr intObj             = ::fwData::Integer::dynamicCast(obj);
+    ::fwData::Float::sptr floatObj             = ::fwData::Float::dynamicCast(obj);
+    ::fwData::Boolean::sptr boolObj            = ::fwData::Boolean::dynamicCast(obj);
+    ::fwData::TransformationMatrix3D::sptr trf = ::fwData::TransformationMatrix3D::dynamicCast(obj);
+    if (series)
+    {
+        newItem->setText(int(ColumnType::NAME), QString::fromStdString(series->getModality()));
+        newItem->setText(int(ColumnType::DESC), QString::fromStdString(series->getDescription()));
+        newItem->setText(int(ColumnType::PATIENT), QString::fromStdString(series->getPatient()->getName()));
+        newItem->setText(int(ColumnType::STUDY), QString::fromStdString(series->getStudy()->getDescription()));
+    }
+    else if (strObj)
+    {
+        newItem->setText(int(ColumnType::DESC), QString::fromStdString(strObj->value()));
+    }
+    else if (intObj)
+    {
+        newItem->setText(int(ColumnType::DESC), QString("%1").arg(intObj->value()));
+    }
+    else if (floatObj)
+    {
+        newItem->setText(int(ColumnType::DESC), QString("%1").arg(floatObj->value()));
+    }
+    else if (boolObj)
+    {
+        newItem->setText(int(ColumnType::DESC), boolObj->value() ? "true" : "false");
+    }
+    else if (trf)
+    {
+        std::stringstream str;
+        str << *trf;
+        newItem->setText(int(ColumnType::DESC), QString::fromStdString(str.str()));
+    }
+
+    // set icon
+    ObjectIconMapType::iterator iter = m_objectIcons.find(obj->getClassname());
+    if (iter != m_objectIcons.end())
+    {
+        newItem->setIcon(int(ColumnType::NAME), QIcon(QString::fromStdString(iter->second)));
+    }
+
+    tree->addTopLevelItem(newItem);
+    for (int i = 0; i<tree->columnCount(); ++i)
+    {
+        tree->resizeColumnToContents(i);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void ActivityDataView::onTreeItemDoubleClicked(QTreeWidgetItem *item, int column)
+{
+    if (item)
+    {
+        std::string uid = item->data(int(ColumnType::NAME), s_UID_ROLE).toString().toStdString();
+        if (!uid.empty())
+        {
+            ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(uid));
+            if (obj)
+            {
+                if (obj->isA("::fwData::String"))
+                {
+                    ::fwData::String::sptr str = ::fwData::String::dynamicCast(obj);
+                    bool isOkClicked = false;
+                    QString value    = QInputDialog::getText(
+                        this, "Edition", "Enter the String value:",
+                        QLineEdit::Normal, QString::fromStdString(str->value()), &isOkClicked);
+
+                    if ( isOkClicked)
+                    {
+                        str->value() = value.toStdString();
+                        item->setText(int(ColumnType::DESC), value);
+                    }
+                }
+                else if (obj->isA("::fwData::Integer"))
+                {
+                    ::fwData::Integer::sptr intObj = ::fwData::Integer::dynamicCast(obj);
+
+                    bool isOkClicked = false;
+                    int value        = QInputDialog::getInt(
+                        this, "Edition", "Enter the Integer value:", intObj->value(), std::numeric_limits<int>::min(),
+                        std::numeric_limits<int>::max(), 1, &isOkClicked);
+                    if (isOkClicked)
+                    {
+                        intObj->value() = value;
+                        item->setText(int(ColumnType::DESC), QString("%1").arg(value));
+                    }
+                }
+                else if (obj->isA("::fwData::Float"))
+                {
+                    ::fwData::Float::sptr floatObj = ::fwData::Float::dynamicCast(obj);
+
+                    bool isOkClicked = false;
+                    double value     = QInputDialog::getDouble(
+                        this, "Edition", "Enter the Integer value:", floatObj->value(), std::numeric_limits<int>::min(),
+                        std::numeric_limits<int>::max(), 3, &isOkClicked);
+                    if (isOkClicked)
+                    {
+                        floatObj->value() = static_cast<float>(value);
+                        item->setText(int(ColumnType::DESC), QString("%1").arg(value));
+                    }
+                }
+                else if (obj->isA("::fwData::Boolean"))
+                {
+                    ::fwData::Boolean::sptr boolObj = ::fwData::Boolean::dynamicCast(obj);
+                    QMessageBox::StandardButton button = QMessageBox::question(
+                        this, "Edition", "Defines the Boolean value");
+                    boolObj->value() = (button == QMessageBox::Yes);
+                    item->setText(int(ColumnType::DESC), boolObj->value() ? "true" : "false" );
+                }
+                else if (obj->isA("::fwData::TransformationMatrix3D"))
+                {
+                    ::fwData::TransformationMatrix3D::sptr trf = ::fwData::TransformationMatrix3D::dynamicCast(obj);
+                    std::stringstream str;
+                    str << *trf;
+
+                    bool isOkClicked = false;
+                    QString value    = QInputDialog::getMultiLineText(
+                        this, "Edition", "Enter the Matrix coefficient (separated by a space):",
+                        QString::fromStdString(str.str()), &isOkClicked);
+
+                    QStringList coeffList = value.trimmed().split(QRegularExpression("\\s+"));
+                    if (isOkClicked && coeffList.size() == 16)
+                    {
+                        ::fwData::TransformationMatrix3D::TMCoefArray coeffs;
+
+                        bool conversionOK = false;
+                        for (int i = 0; i< 16; ++i)
+                        {
+                            coeffs[size_t(i)] = coeffList[i].toDouble(&conversionOK);
+                            if (!conversionOK)
+                            {
+                                QMessageBox::warning(this, "ERROR",
+                                                     "This values cannot be converted to matrix coefficients");
+                                return;
+                            }
+                        }
+                        trf->setCoefficients(coeffs);
+                        item->setText(int(ColumnType::DESC), value.trimmed() );
+                    }
+                    else if (isOkClicked)
+                    {
+                        QMessageBox::warning(this, "ERROR",
+                                             "This values cannot be converted to matrix coefficients. It must contain "
+                                             "16 values");
+                        return;
+                    }
+                }
+                else
+                {
+                    SLM_DEBUG("Object of type '" + obj->classname() + "' can not yet be editted");
+                }
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace widget
+} // namespace uiMedData
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/EquipmentEditor.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/EquipmentEditor.cpp
index 0f17a9c..6df9c97 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/EquipmentEditor.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/EquipmentEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -45,7 +45,7 @@ EquipmentEditor::~EquipmentEditor()
 
 //-----------------------------------------------------------------------------
 
-void EquipmentEditor::setSeries(SPTR(::fwMedData::Series) series)
+void EquipmentEditor::setSeries(SPTR(::fwMedData::Series)series)
 {
     SLM_ASSERT("Given series is null", series);
     m_series = series;
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/PatientEditor.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/PatientEditor.cpp
index 6805806..39962ac 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/PatientEditor.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/PatientEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -45,8 +45,8 @@ PatientEditor::PatientEditor(QWidget *parent) : QWidget(parent)
     layout->addRow(tr("&Birthdate"), m_txtBirthdate);
     layout->addRow(tr("&Sex"), m_cbSex);
 
-    QObject::connect(m_txtName, SIGNAL(textChanged(const QString&)), this, SLOT(onNameChanged(const QString&)));
-    QObject::connect(m_txtBirthdate, SIGNAL(textChanged(const QString&)), this, SLOT(onBirthChanged(const QString&)));
+    QObject::connect(m_txtName, SIGNAL(textChanged(const QString &)), this, SLOT(onNameChanged(const QString &)));
+    QObject::connect(m_txtBirthdate, SIGNAL(textChanged(const QString &)), this, SLOT(onBirthChanged(const QString &)));
 
     QGroupBox* group = new QGroupBox(tr("Patient"));
     group->setLayout(layout);
@@ -68,9 +68,8 @@ PatientEditor::~PatientEditor()
 bool PatientEditor::isValid() const
 {
     return !m_txtName->text().trimmed().isEmpty()
-        && m_txtName->text().trimmed().toStdString() != s_NEW_PATIENT_TEXT
-        && !m_txtBirthdate->text().trimmed().isEmpty();
-;
+           && m_txtName->text().trimmed().toStdString() != s_NEW_PATIENT_TEXT
+           && !m_txtBirthdate->text().trimmed().isEmpty();
 }
 
 //-----------------------------------------------------------------------------
@@ -110,7 +109,7 @@ void PatientEditor::onBirthChanged(const QString& text)
 SPTR(::fwMedData::Patient) PatientEditor::getPatient() const
 {
     ::fwMedData::Patient::sptr srcPatient = m_series->getPatient();
-    ::fwMedData::Patient::sptr patient = ::fwMedData::Patient::New();
+    ::fwMedData::Patient::sptr patient    = ::fwMedData::Patient::New();
     patient->setName(m_txtName->text().trimmed().toStdString());
     patient->setBirthdate(m_txtBirthdate->text().trimmed().toStdString());
     patient->setPatientId(srcPatient->getPatientId());
@@ -142,9 +141,9 @@ SPTR(::fwMedData::Patient) PatientEditor::getPatient() const
     ::boost::algorithm::trim(sexStr);
 
     const bool same = srcPatient->getName() == name
-        && srcPatient->getBirthdate() == birth
-        && (compareSex ? (srcPatientSex == sexStr) : true)
-        && srcPatient->getPatientId() == patient->getPatientId();
+                      && srcPatient->getBirthdate() == birth
+                      && (compareSex ? (srcPatientSex == sexStr) : true)
+                      && srcPatient->getPatientId() == patient->getPatientId();
 
     ::fwData::String::sptr fieldPatient = srcPatient->getField< ::fwData::String >(s_NEW_PATIENT_FIELD_NAME);
     if(fieldPatient || !same)
@@ -157,7 +156,7 @@ SPTR(::fwMedData::Patient) PatientEditor::getPatient() const
 
 //-----------------------------------------------------------------------------
 
-void PatientEditor::setSeries(SPTR(::fwMedData::Series) series)
+void PatientEditor::setSeries(SPTR(::fwMedData::Series)series)
 {
     SLM_ASSERT("Given series is null", series);
     m_series = series;
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/Selector.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/Selector.cpp
index f8488bf..fa9ec15 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/Selector.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/Selector.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,8 +18,6 @@
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 
-#include <fwComEd/SeriesDBMsg.hpp>
-
 #include "uiMedDataQt/widget/Selector.hpp"
 
 namespace uiMedData
@@ -37,6 +35,7 @@ Selector::Selector(QWidget *parent) :
 
     this->setSelectionMode(QAbstractItemView::ExtendedSelection);
     this->setAlternatingRowColors( true );
+    this->setDragEnabled(true);
 }
 
 //-----------------------------------------------------------------------------
@@ -67,7 +66,7 @@ void Selector::addSeries(::fwMedData::Series::sptr series)
     QStandardItem * studyItem = m_model->findStudyItem(series->getStudy());
     this->expand(m_model->indexFromItem(studyItem));
 
-    for (int i=0 ; i < m_model->columnCount() ; ++i)
+    for (int i = 0; i < m_model->columnCount(); ++i)
     {
         this->resizeColumnToContents(i);
     }
@@ -116,7 +115,7 @@ Selector::SeriesVectorType Selector::getSeries( const QItemSelection & selection
 Selector::SeriesVectorType Selector::getSeries(const QModelIndexList& indexList)
 {
     SeriesVectorType vSeries;
-    BOOST_FOREACH(QModelIndex index, indexList)
+    for(QModelIndex index :  indexList)
     {
         std::string uid = index.data(SelectorModel::UID).toString().toStdString();
         ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(uid);
@@ -135,7 +134,7 @@ Selector::SeriesVectorType Selector::getSeries(const QModelIndexList& indexList)
 QModelIndexList Selector::getStudyIndexes(const QModelIndexList& indexList)
 {
     QModelIndexList studiesIndex;
-    BOOST_FOREACH(QModelIndex index, indexList)
+    for(QModelIndex index :  indexList)
     {
         if (index.data(SelectorModel::ITEM_TYPE)  == SelectorModel::STUDY)
         {
@@ -151,13 +150,13 @@ Selector::SeriesVectorType Selector::getSeriesFromStudyIndex(const QModelIndex&
 {
     SeriesVectorType vSeries;
     QStandardItem* item = m_model->itemFromIndex(index);
-    int nbRow = item->rowCount();
-    for(int row =0; row < nbRow; ++row)
+    int nbRow           = item->rowCount();
+    for(int row = 0; row < nbRow; ++row)
     {
         QStandardItem *child = item->child(row);
-        std::string uid = child->data(SelectorModel::UID).toString().toStdString();
+        std::string uid      = child->data(SelectorModel::UID).toString().toStdString();
         SLM_ASSERT("UID must not be empty.", !uid.empty());
-        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(uid);
+        ::fwTools::Object::sptr obj      = ::fwTools::fwID::getObject(uid);
         ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(obj);
         vSeries.push_back(series);
     }
@@ -171,42 +170,49 @@ SelectorModel::ItemType Selector::getItemType(const QModelIndex &index)
     return m_model->getItemType(index);
 }
 
- //-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
+
+void Selector::keyPressEvent(QKeyEvent * event)
+{
+    if(event->matches(QKeySequence::Delete) && m_allowedRemove)
+    {
+        this->deleteSelection();
+        event->accept();
+    }
+    else
+    {
+        QTreeView::keyPressEvent(event);
+    }
+}
+
+//-----------------------------------------------------------------------------
 
- void Selector::keyPressEvent(QKeyEvent * event)
- {
-     if(event->matches(QKeySequence::Delete) && m_allowedRemove)
-     {
-         this->deleteSelection();
-         event->accept();
-     }
-     else
-     {
-         QTreeView::keyPressEvent(event);
-     }
- }
+void Selector::deleteSelection()
+{
+    QModelIndexList selection = this->selectionModel()->selectedRows(0);
 
- //-----------------------------------------------------------------------------
+    SeriesVectorType vSeries     = this->getSeries(selection);
+    QModelIndexList studyIndexes = this->getStudyIndexes(selection);
+    for(QModelIndex index :  studyIndexes)
+    {
+        SeriesVectorType series = getSeriesFromStudyIndex(index);
+        std::copy(series.begin(), series.end(), std::back_inserter(vSeries));
+    }
 
- void Selector::deleteSelection()
- {
-     QModelIndexList selection = this->selectionModel()->selectedRows(0);
+    Q_EMIT removeSeries(vSeries);
 
-     SeriesVectorType vSeries = this->getSeries(selection);
-     QModelIndexList studyIndexes = this->getStudyIndexes(selection);
-     BOOST_FOREACH(QModelIndex index, studyIndexes)
-     {
-         SeriesVectorType series = getSeriesFromStudyIndex(index);
-         std::copy(series.begin(), series.end(), std::back_inserter(vSeries));
-     }
+    // Remove item in Selector.
+    m_model->removeRows(selection);
+}
 
-     Q_EMIT removeSeries(vSeries);
+//-----------------------------------------------------------------------------
 
-     // Remove item in Selector.
-     m_model->removeRows(selection);
- }
+void Selector::setSeriesIcons(const SeriesIconType &seriesIcons)
+{
+    m_model->setSeriesIcons(seriesIcons);
+}
 
- //-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
 } // namespace widget
 } // namespace uiMedData
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SelectorModel.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SelectorModel.cpp
index 00570c5..8f4aa74 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SelectorModel.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SelectorModel.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -75,7 +75,7 @@ void SelectorModel::setInsertMode(bool insert)
 
 SelectorModel::ItemType SelectorModel::getItemType(const QModelIndex &index)
 {
-    QModelIndex idx = this->createIndex(index.row(), 0, index.internalPointer());
+    QModelIndex idx     = this->createIndex(index.row(), 0, index.internalPointer());
     QStandardItem *item = this->itemFromIndex(idx);
     return (SelectorModel::ItemType) item->data(SelectorModel::ITEM_TYPE).toInt();
 }
@@ -93,7 +93,7 @@ void SelectorModel::clear()
 ::fwData::Image::SpacingType roundSpacing(const ::fwData::Image::SpacingType& spacing)
 {
     ::fwData::Image::SpacingType roundSpacing;
-    BOOST_FOREACH(::fwData::Image::SpacingType::value_type val, spacing)
+    for(::fwData::Image::SpacingType::value_type val :  spacing)
     {
         ::fwData::Image::SpacingType::value_type roundVal = ::boost::math::round(val * 100.)/100.;
         roundSpacing.push_back(roundVal);
@@ -136,10 +136,10 @@ std::string formatTime(const std::string& time)
     std::string formatTime = time;
     ::boost::algorithm::trim(formatTime);
 
-    const std::string regexHour  = "[0-9]{2}";
-    const std::string regexMin   = "[0-9]{2}";
-    const std::string regexSec   = "[0-9]{2}";
-    const std::string regexEnd   = "[.0-9]*";
+    const std::string regexHour = "[0-9]{2}";
+    const std::string regexMin  = "[0-9]{2}";
+    const std::string regexSec  = "[0-9]{2}";
+    const std::string regexEnd  = "[.0-9]*";
 
     const std::string regexStr = "("+regexHour+")"+"("+regexMin+")"+"("+regexSec+")"+regexEnd;
     ::boost::regex re(regexStr);
@@ -162,7 +162,7 @@ std::string formatTime(const std::string& time)
 
 void SelectorModel::addSeries(::fwMedData::Series::sptr series)
 {
-    ::fwMedData::Study::sptr study = series->getStudy();
+    ::fwMedData::Study::sptr study       = series->getStudy();
     ::fwMedData::DicomValueType studyUID = study->getInstanceUID();
     StudyUidItemMapType::iterator itr = m_items.find(studyUID);
     QStandardItem* studyRootItem;
@@ -173,23 +173,23 @@ void SelectorModel::addSeries(::fwMedData::Series::sptr series)
     }
     else
     {
-        ::fwMedData::Patient::sptr patient = series->getPatient();
+        ::fwMedData::Patient::sptr patient     = series->getPatient();
         ::fwMedData::Equipment::sptr equipment = series->getEquipment();
 
         QStandardItem *patientName = new QStandardItem( QString::fromStdString(patient->getName()) );
         patientName->setData(QVariant((int)SelectorModel::STUDY), SelectorModel::ITEM_TYPE);
         patientName->setData(QVariant(QString::fromStdString(study->getInstanceUID())), UID);
-        QStandardItem *patientId   = new QStandardItem( QString::fromStdString(patient->getPatientId()) );
-        std::string birthDate = formatDate(patient->getBirthdate());
-        QStandardItem *patientBirthdate   = new QStandardItem( QString::fromStdString(birthDate) );
-        QStandardItem *patientSex   = new QStandardItem( QString::fromStdString(patient->getSex()) );
+        QStandardItem *patientId        = new QStandardItem( QString::fromStdString(patient->getPatientId()) );
+        std::string birthDate           = formatDate(patient->getBirthdate());
+        QStandardItem *patientBirthdate = new QStandardItem( QString::fromStdString(birthDate) );
+        QStandardItem *patientSex       = new QStandardItem( QString::fromStdString(patient->getSex()) );
 
-        std::string studyDateTime = formatDate(study->getDate()) + " " + formatTime(study->getTime());
-        QStandardItem *studyDate = new QStandardItem( QString::fromStdString(studyDateTime));
+        std::string studyDateTime                  = formatDate(study->getDate()) + " " + formatTime(study->getTime());
+        QStandardItem *studyDate                   = new QStandardItem( QString::fromStdString(studyDateTime));
         QStandardItem *studyReferringPhysicianName = new QStandardItem(
-                QString::fromStdString(study->getReferringPhysicianName()));
+            QString::fromStdString(study->getReferringPhysicianName()));
         QStandardItem *studyDescription = new QStandardItem( QString::fromStdString(study->getDescription()));
-        QStandardItem *studyPatientAge = new QStandardItem( QString::fromStdString(study->getPatientAge()));
+        QStandardItem *studyPatientAge  = new QStandardItem( QString::fromStdString(study->getPatientAge()));
 
         QStandardItem *institution = new QStandardItem( QString::fromStdString(equipment->getInstitutionName()));
 
@@ -215,16 +215,16 @@ void SelectorModel::addSeries(::fwMedData::Series::sptr series)
         }
 
         m_studyRowCount++;
-        studyRootItem = patientName;
+        studyRootItem     = patientName;
         m_items[studyUID] = studyRootItem;
     }
 
     QStandardItem *seriesModality = new QStandardItem(QString::fromStdString(series->getModality()));
-    std::string seriesDateTime = formatDate(series->getDate()) + " " + formatTime(series->getTime());
-    QStandardItem *seriesDate = new QStandardItem( QString::fromStdString(seriesDateTime));
+    std::string seriesDateTime    = formatDate(series->getDate()) + " " + formatTime(series->getTime());
+    QStandardItem *seriesDate     = new QStandardItem( QString::fromStdString(seriesDateTime));
 
     QStandardItem* seriesPerformingPhysician =
-            this->getInfo< ::fwMedData::DicomValuesType >(series->getPerformingPhysiciansName(), ", ");
+        this->getInfo< ::fwMedData::DicomValuesType >(series->getPerformingPhysiciansName(), ", ");
 
     QStandardItem * seriesDescription1 = new QStandardItem(QString::fromStdString(series->getDescription()));
     seriesDescription1->setData(QVariant((int)SelectorModel::SERIES), SelectorModel::ITEM_TYPE);
@@ -244,7 +244,7 @@ void SelectorModel::addSeries(::fwMedData::Series::sptr series)
     if(imageSeries)
     {
 
-        ::fwData::Image::sptr image =  imageSeries->getImage();
+        ::fwData::Image::sptr image = imageSeries->getImage();
 
         ::fwData::Image::SizeType imageNumber = image->getSize();
         QStandardItem* imageSize = this->getInfo< ::fwData::Image::SizeType>(imageNumber, " x ");
@@ -293,30 +293,38 @@ void SelectorModel::addSeries(::fwMedData::Series::sptr series)
 
 void SelectorModel::addSeriesIcon(::fwMedData::Series::sptr series, QStandardItem *item)
 {
-    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
-    ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::dynamicCast(series);
-    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::dynamicCast(series);
-    if(imageSeries)
+    SeriesIconType::iterator iter = m_seriesIcons.find(series->getClassname());
+    if (iter != m_seriesIcons.end())
     {
-        item->setIcon(QIcon(QString((std::string(SHAREPATH) + "Bundles/media_0-1/icons/ImageSeries.svg").c_str())));
-    }
-    else if (modelSeries)
-    {
-        item->setIcon(QIcon(QString((std::string(SHAREPATH) + "Bundles/media_0-1/icons/ModelSeries.svg").c_str())));
-    }
-    else if (activitySeries)
-    {
-        ::fwActivities::registry::Activities::sptr registry = ::fwActivities::registry::Activities::getDefault();
-        std::string id = activitySeries->getActivityConfigId();
-        OSLM_ASSERT("Activity information not found for" << id, registry->hasInfo(id));
-
-        ::fwActivities::registry::ActivityInfo activityInfo;
-        activityInfo = registry->getInfo(id);
-        item->setIcon(QIcon(QString::fromStdString(activityInfo.icon)));
+        item->setIcon(QIcon(QString::fromStdString(iter->second)));
     }
     else
     {
-        OSLM_WARN("This type of series is not defined (" << series->getClassname() << ")");
+        ::fwMedData::ImageSeries::sptr imageSeries       = ::fwMedData::ImageSeries::dynamicCast(series);
+        ::fwMedData::ModelSeries::sptr modelSeries       = ::fwMedData::ModelSeries::dynamicCast(series);
+        ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::dynamicCast(series);
+        if(imageSeries)
+        {
+            item->setIcon(QIcon(BUNDLE_PREFIX "/media_0-1/icons/ImageSeries.svg"));
+        }
+        else if (modelSeries)
+        {
+            item->setIcon(QIcon(BUNDLE_PREFIX "/media_0-1/icons/ModelSeries.svg"));
+        }
+        else if (activitySeries)
+        {
+            ::fwActivities::registry::Activities::sptr registry = ::fwActivities::registry::Activities::getDefault();
+            std::string id = activitySeries->getActivityConfigId();
+            OSLM_ASSERT("Activity information not found for" << id, registry->hasInfo(id));
+
+            ::fwActivities::registry::ActivityInfo activityInfo;
+            activityInfo = registry->getInfo(id);
+            item->setIcon(QIcon(QString::fromStdString(activityInfo.icon)));
+        }
+        else
+        {
+            OSLM_WARN("This type of series is not defined (" << series->getClassname() << ")");
+        }
     }
 }
 
@@ -343,7 +351,7 @@ void SelectorModel::removeRows(const QModelIndexList indexes)
     QList<QStandardItem *> seriesItems;
     QList<QStandardItem *> studyItems;
 
-    BOOST_FOREACH(QModelIndex index, indexes)
+    for(QModelIndex index :  indexes)
     {
         SLM_ASSERT("Index must be in first column.", index.column() == 0);
         QStandardItem * item = this->itemFromIndex(index);
@@ -358,7 +366,7 @@ void SelectorModel::removeRows(const QModelIndexList indexes)
     }
 
     // Remove series items from selector
-    BOOST_FOREACH(QStandardItem *item, seriesItems)
+    for(QStandardItem *item :  seriesItems)
     {
         QStandardItem * studyItem = item->parent();
 
@@ -370,7 +378,7 @@ void SelectorModel::removeRows(const QModelIndexList indexes)
     }
 
     // Remove study items from selector
-    BOOST_FOREACH(QStandardItem *item, studyItems)
+    for(QStandardItem *item :  studyItems)
     {
         this->removeStudyItem(item);
     }
@@ -419,7 +427,7 @@ QStandardItem* SelectorModel::findSeriesItem(::fwMedData::Series::sptr series)
     QStandardItem* studyItem = this->findStudyItem(study);
 
     int nbRow = studyItem->rowCount();
-    for(int row =0; row < nbRow; ++row)
+    for(int row = 0; row < nbRow; ++row)
     {
         QStandardItem *child = studyItem->child(row);
         std::string seriesId = child->data(SelectorModel::UID).toString().toStdString();
@@ -444,5 +452,12 @@ QStandardItem* SelectorModel::findStudyItem(::fwMedData::Study::sptr study)
 
 //-----------------------------------------------------------------------------
 
+void SelectorModel::setSeriesIcons(const SeriesIconType &seriesIcons)
+{
+    m_seriesIcons = seriesIcons;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace widget
 } // namespace uiMedData
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SeriesEditor.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SeriesEditor.cpp
index 2fda8bd..1d75ab4 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SeriesEditor.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/SeriesEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,7 +30,7 @@ namespace widget
 
 ListInput::ListInput()
 {
-    m_physicianInput = new QLineEdit();
+    m_physicianInput     = new QLineEdit();
     m_addPhysicianButton = new QPushButton(tr("+"));
     m_addPhysicianButton->setEnabled(false);
     m_removePhysicianButton = new QPushButton(tr("-"));
@@ -46,12 +46,12 @@ ListInput::ListInput()
     vLayout->addLayout(inputLayout);
     vLayout->addWidget(m_performingPhysiciansName);
 
-    QObject::connect(m_physicianInput, SIGNAL(textChanged(const QString&)),
-            this, SLOT(onInputChanged(const QString&))); 
+    QObject::connect(m_physicianInput, SIGNAL(textChanged(const QString &)),
+                     this, SLOT(onInputChanged(const QString &)));
     QObject::connect(m_addPhysicianButton, SIGNAL(clicked()),
-            this, SLOT(onAddPhysician()));
+                     this, SLOT(onAddPhysician()));
     QObject::connect(m_removePhysicianButton, SIGNAL(clicked()),
-            this, SLOT(onRemovePhysician()));
+                     this, SLOT(onRemovePhysician()));
     QObject::connect(m_performingPhysiciansName, SIGNAL(itemSelectionChanged()), this, SLOT(onSelectionChanged()));
     this->setLayout(vLayout);
 }
@@ -92,11 +92,11 @@ void ListInput::onSelectionChanged()
 
 SeriesEditor::SeriesEditor(QWidget *parent) : QWidget(parent)
 {
-    m_modality = new QLineEdit();
-    m_date = new QLineEdit();
-    m_time = new QLineEdit();
+    m_modality    = new QLineEdit();
+    m_date        = new QLineEdit();
+    m_time        = new QLineEdit();
     m_description = new QLineEdit();
-    m_physicians = new ListInput();
+    m_physicians  = new ListInput();
 
     QFormLayout* layout = new QFormLayout();
 
@@ -107,9 +107,9 @@ SeriesEditor::SeriesEditor(QWidget *parent) : QWidget(parent)
 
     layout->addRow(tr("Physicians"), m_physicians);
 
-    QObject::connect(m_date, SIGNAL(textChanged(const QString&)), this, SLOT(onDateChanged(const QString&)));
-    QObject::connect(m_time, SIGNAL(textChanged(const QString&)), this, SLOT(onTimeChanged(const QString&)));
-    QObject::connect(m_description, SIGNAL(textChanged(const QString&)), this, SLOT(onDescChanged(const QString&)));
+    QObject::connect(m_date, SIGNAL(textChanged(const QString &)), this, SLOT(onDateChanged(const QString &)));
+    QObject::connect(m_time, SIGNAL(textChanged(const QString &)), this, SLOT(onTimeChanged(const QString &)));
+    QObject::connect(m_description, SIGNAL(textChanged(const QString &)), this, SLOT(onDescChanged(const QString &)));
 
     QGroupBox* group = new QGroupBox(tr("Series"));
     group->setLayout(layout);
@@ -122,9 +122,10 @@ SeriesEditor::SeriesEditor(QWidget *parent) : QWidget(parent)
 
 SeriesEditor::~SeriesEditor()
 {
-    QObject::disconnect(m_date, SIGNAL(textChanged(const QString&)), this, SLOT(onDateChanged(const QString&)));
-    QObject::disconnect(m_time, SIGNAL(textChanged(const QString&)), this, SLOT(onTimeChanged(const QString&)));
-    QObject::disconnect(m_description, SIGNAL(textChanged(const QString&)), this, SLOT(onDescChanged(const QString&)));
+    QObject::disconnect(m_date, SIGNAL(textChanged(const QString &)), this, SLOT(onDateChanged(const QString &)));
+    QObject::disconnect(m_time, SIGNAL(textChanged(const QString &)), this, SLOT(onTimeChanged(const QString &)));
+    QObject::disconnect(m_description, SIGNAL(textChanged(const QString &)), this,
+                        SLOT(onDescChanged(const QString &)));
 }
 
 //-----------------------------------------------------------------------------
@@ -178,7 +179,7 @@ void SeriesEditor::onDescChanged(const QString& text)
 
 //-----------------------------------------------------------------------------
 
-void SeriesEditor::setSeries(SPTR(::fwMedData::Series) series)
+void SeriesEditor::setSeries(SPTR(::fwMedData::Series)series)
 {
     SLM_ASSERT("Given series is null", series);
     m_series = series;
@@ -193,11 +194,11 @@ void SeriesEditor::setSeries(SPTR(::fwMedData::Series) series)
     this->onDateChanged(m_date->text());
 
     m_physicians->getListWidget()->clear();
-    BOOST_FOREACH(::fwMedData::DicomValueType value, m_series->getPerformingPhysiciansName())
+    for(::fwMedData::DicomValueType value :  m_series->getPerformingPhysiciansName())
     {
         QListWidgetItem* newVal
             = new QListWidgetItem(QString::fromStdString(value).trimmed(), m_physicians->getListWidget());
-    } 
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -226,8 +227,8 @@ SPTR(::fwMedData::Series) SeriesEditor::getSeries()
 bool SeriesEditor::isValid() const
 {
     return !m_date->text().trimmed().isEmpty()
-        && !m_time->text().trimmed().isEmpty()
-        && m_description->text().trimmed().toStdString() != s_INSERT_NEW_SERIES_TEXT;
+           && !m_time->text().trimmed().isEmpty()
+           && m_description->text().trimmed().toStdString() != s_INSERT_NEW_SERIES_TEXT;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/StudyEditor.cpp b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/StudyEditor.cpp
index 93fdb7f..8f3fed1 100644
--- a/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/StudyEditor.cpp
+++ b/Bundles/LeafUI/uiMedDataQt/src/uiMedDataQt/widget/StudyEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,11 +30,11 @@ namespace widget
 
 StudyEditor::StudyEditor(QWidget *parent) : QWidget(parent)
 {
-    m_date = new QLineEdit();
-    m_time = new QLineEdit();
+    m_date                   = new QLineEdit();
+    m_time                   = new QLineEdit();
     m_referringPhysicianName = new QLineEdit();
-    m_description = new QLineEdit();
-    m_patientAge = new QLineEdit();
+    m_description            = new QLineEdit();
+    m_patientAge             = new QLineEdit();
 
     QFormLayout* layout = new QFormLayout();
 
@@ -44,9 +44,9 @@ StudyEditor::StudyEditor(QWidget *parent) : QWidget(parent)
     layout->addRow(tr("Description"), m_description);
     layout->addRow(tr("Patient age"), m_patientAge);
 
-    QObject::connect(m_date, SIGNAL(textChanged(const QString&)), this, SLOT(onDateChanged(const QString&)));
-    QObject::connect(m_time, SIGNAL(textChanged(const QString&)), this, SLOT(onTimeChanged(const QString&)));
-    QObject::connect(m_description, SIGNAL(textChanged(const QString&)), this, SLOT(onDescChanged(const QString&)));
+    QObject::connect(m_date, SIGNAL(textChanged(const QString &)), this, SLOT(onDateChanged(const QString &)));
+    QObject::connect(m_time, SIGNAL(textChanged(const QString &)), this, SLOT(onTimeChanged(const QString &)));
+    QObject::connect(m_description, SIGNAL(textChanged(const QString &)), this, SLOT(onDescChanged(const QString &)));
 
     QGroupBox* group = new QGroupBox(tr("Study"));
     group->setLayout(layout);
@@ -59,9 +59,10 @@ StudyEditor::StudyEditor(QWidget *parent) : QWidget(parent)
 
 StudyEditor::~StudyEditor()
 {
-    QObject::disconnect(m_date, SIGNAL(textChanged(const QString&)), this, SLOT(onDateChanged(const QString&)));
-    QObject::disconnect(m_time, SIGNAL(textChanged(const QString&)), this, SLOT(onTimeChanged(const QString&)));
-    QObject::disconnect(m_description, SIGNAL(textChanged(const QString&)), this, SLOT(onDescChanged(const QString&)));
+    QObject::disconnect(m_date, SIGNAL(textChanged(const QString &)), this, SLOT(onDateChanged(const QString &)));
+    QObject::disconnect(m_time, SIGNAL(textChanged(const QString &)), this, SLOT(onTimeChanged(const QString &)));
+    QObject::disconnect(m_description, SIGNAL(textChanged(const QString &)), this,
+                        SLOT(onDescChanged(const QString &)));
 }
 
 //-----------------------------------------------------------------------------
@@ -69,8 +70,8 @@ StudyEditor::~StudyEditor()
 bool StudyEditor::isValid() const
 {
     return !m_date->text().trimmed().isEmpty()
-        && m_description->text().trimmed().toStdString() != s_NEW_STUDY_TEXT
-        && !m_time->text().trimmed().isEmpty();
+           && m_description->text().trimmed().toStdString() != s_NEW_STUDY_TEXT
+           && !m_time->text().trimmed().isEmpty();
 }
 
 //-----------------------------------------------------------------------------
@@ -78,7 +79,7 @@ bool StudyEditor::isValid() const
 SPTR(::fwMedData::Study) StudyEditor::getStudy()
 {
     ::fwMedData::Study::sptr srcStudy = m_series->getStudy();
-    ::fwMedData::Study::sptr study = ::fwMedData::Study::New();
+    ::fwMedData::Study::sptr study    = ::fwMedData::Study::New();
     study->setDescription(m_description->text().trimmed().toStdString());
     study->setDate(m_date->text().trimmed().toStdString());
     study->setTime(m_time->text().trimmed().toStdString());
@@ -97,10 +98,10 @@ SPTR(::fwMedData::Study) StudyEditor::getStudy()
 
     // Study description comparison ommitted here
     const bool same = study->getDate() == date
-        && study->getTime() == time
-        && study->getReferringPhysicianName() == refP
-        && study->getInstanceUID() == srcStudy->getInstanceUID()
-        && study->getPatientAge() == age;
+                      && study->getTime() == time
+                      && study->getReferringPhysicianName() == refP
+                      && study->getInstanceUID() == srcStudy->getInstanceUID()
+                      && study->getPatientAge() == age;
 
     ::fwData::String::sptr fieldNewStudy = srcStudy->getField< ::fwData::String>(s_NEW_STUDY_FIELD_NAME);
     if(fieldNewStudy || !same)
@@ -161,7 +162,7 @@ void StudyEditor::onDescChanged(const QString& text)
 
 //-----------------------------------------------------------------------------
 
-void StudyEditor::setSeries(SPTR(::fwMedData::Series) series)
+void StudyEditor::setSeries(SPTR(::fwMedData::Series)series)
 {
     SLM_ASSERT("Given series is null", series);
     m_series = series;
diff --git a/Bundles/LeafUI/uiPreferences/CMakeLists.txt b/Bundles/LeafUI/uiPreferences/CMakeLists.txt
new file mode 100644
index 0000000..c0bc9e3
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/CMakeLists.txt
@@ -0,0 +1,16 @@
+fwLoadProperties()
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+
+fwForwardInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
+
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/LeafUI/uiPreferences/Properties.cmake b/Bundles/LeafUI/uiPreferences/Properties.cmake
new file mode 100644
index 0000000..e15fd06
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/Properties.cmake
@@ -0,0 +1,12 @@
+
+set( NAME uiPreferences )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+        fwGui
+        fwRuntime
+        fwServices
+        fwCom
+)
+set( REQUIREMENTS  )
+
diff --git a/Bundles/LeafUI/uiPreferences/include/uiPreferences/Plugin.hpp b/Bundles/LeafUI/uiPreferences/include/uiPreferences/Plugin.hpp
new file mode 100644
index 0000000..7440e9d
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/include/uiPreferences/Plugin.hpp
@@ -0,0 +1,36 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#ifndef __UIPREFERENCES_PLUGIN_HPP__
+#define __UIPREFERENCES_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+namespace uiPreferences
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    ~Plugin() throw()
+    {
+    }
+
+    // Overrides
+    void start() throw(::fwRuntime::RuntimeException)
+    {
+    }
+
+    // Overrides
+    void stop() throw()
+    {
+    }
+};
+
+} // namespace uiPreferences
+
+#endif //__UIPREFERENCES_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiPreferences/include/uiPreferences/action/SPreferencesConfiguration.hpp b/Bundles/LeafUI/uiPreferences/include/uiPreferences/action/SPreferencesConfiguration.hpp
new file mode 100644
index 0000000..34ab19e
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/include/uiPreferences/action/SPreferencesConfiguration.hpp
@@ -0,0 +1,144 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#ifndef __UIPREFERENCES_ACTION_SPREFERENCESCONFIGURATION_HPP__
+#define __UIPREFERENCES_ACTION_SPREFERENCESCONFIGURATION_HPP__
+
+#include "uiPreferences/config.hpp"
+
+#include <fwCom/Signals.hpp>
+
+#include <fwTools/Failed.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <vector>
+
+#include <QCheckBox>
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+
+namespace fwData
+{
+class String;
+}
+
+namespace uiPreferences
+{
+
+namespace action
+{
+
+/**
+ * @brief   This action shows a dialog to configure preferences of an application.
+ *
+ * @note    This service works with preferences and does nothing if the preferences service is not found.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+       <service type="::uiPreferences::action::SPreferencesConfiguration">
+            <preference>
+                <type>path</type>
+                <name>Video path</name>
+                <key>VIDEO_REF_DIR</key>
+                <default_value>...</default_value>
+            </preference>
+            <preference>
+                <type>text</type>
+                <name>DICOM/MPPS port</name>
+                <key>DICOM_PORT_KEY</key>
+                <default_value>11112</default_value>
+            </preference>
+            <preference>
+                <type>text</type>
+                <name>AE Title</name>
+                <key>DICOM_AETITLE_KEY</key>
+                <default_value>dicom</default_value>
+            </preference>
+            <preference>
+                <type>checkbox</type>
+                <name>Keep PixelData (C-STORE)</name>
+                <key>KEEP_PIXELDATA_KEY</key>
+                <default_value>true</default_value>
+            </preference>
+       </service>
+   @endcode
+ * - \b type : the type of the parameter field (checkBox, lineEdit).
+ * - \b name : the name of the parameter.
+ * - \b key  : the key of the parameter.
+ * - \b default_value : the default value of the parameter.
+ */
+class UIPREFERENCES_CLASS_API SPreferencesConfiguration : public QObject,
+                                                          public ::fwGui::IActionSrv
+{
+Q_OBJECT
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SPreferencesConfiguration)(::fwGui::IActionSrv) );
+
+    /// Constructor. Do nothing.
+    UIPREFERENCES_API SPreferencesConfiguration() throw();
+
+    /// Destructor. Do nothing.
+    UIPREFERENCES_API virtual ~SPreferencesConfiguration() throw();
+
+    /// Type of signal when parameters are updated.
+    typedef ::fwCom::Signal< void () > ParametersModifiedSignalType;
+    UIPREFERENCES_API static const ::fwCom::Signals::SignalKeyType s_PARAMETERS_MODIFIED_SIG;
+
+protected:
+
+    /// Start the action. Gets the preference composite
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Does nothing
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Shows a dialog to configure preferences declared in xml.
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Does nothing
+    virtual void swapping() throw(::fwTools::Failed);
+
+    /// Configures the service
+    virtual void configuring() throw(::fwTools::Failed);
+
+    /// Overrides
+    virtual void info( std::ostream &_sstream );
+
+    void onSelectDir(QPointer<QLineEdit> lineEdit);
+
+private:
+
+    enum class PreferenceType : std::int8_t
+    {
+        TEXT,
+        CHECKBOX,
+        U_INT,
+        PATH
+    };
+
+    struct PreferenceElt
+    {
+        PreferenceType m_type;
+        QPointer<QLineEdit> m_lineEdit;
+        QPointer<QCheckBox> m_checkBox;
+        SPTR(::fwData::String) m_dataPreference;
+        std::string m_preferenceKey;
+        std::string m_name;
+        std::string m_defaultValue;
+    };
+
+    ParametersModifiedSignalType::sptr m_sigParametersModified;
+
+    typedef std::vector<PreferenceElt> PreferenceEltType;
+    PreferenceEltType m_preferences;
+};
+
+} // namespace action
+} // namespace uiPreferences
+
+#endif /*__UIPREFERENCES_ACTION_SPREFERENCESCONFIGURATION_HPP__*/
diff --git a/Bundles/LeafUI/uiPreferences/include/uiPreferences/namespace.hpp b/Bundles/LeafUI/uiPreferences/include/uiPreferences/namespace.hpp
new file mode 100644
index 0000000..43606f9
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/include/uiPreferences/namespace.hpp
@@ -0,0 +1,22 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#ifndef __UIPREFERENCES_NAMESPACE_HPP__
+#define __UIPREFERENCES_NAMESPACE_HPP__
+
+/**
+ * @brief       The namespace uiPreferences contains editors to manage the preferences configuration.
+ */
+namespace uiPreferences
+{
+
+/**
+ * @brief       The namespace action contains action to open dialog box with preferences to set.
+ */
+namespace action
+{
+}
+}
+#endif /* __UIPREFERENCES_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiPreferences/rc/plugin.xml b/Bundles/LeafUI/uiPreferences/rc/plugin.xml
new file mode 100644
index 0000000..87403c7
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/rc/plugin.xml
@@ -0,0 +1,13 @@
+<plugin id="uiPreferences" class="::uiPreferences::Plugin" version="@DASH_VERSION@" >
+    <library name="uiPreferences"/>
+
+    <requirement id="gui"/>
+    <requirement id="guiQt" />
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwGui::IActionSrv</type>
+        <service>::uiPreferences::action::SPreferencesConfiguration</service>
+        <object>::fwData::Object</object>
+    </extension>
+
+</plugin>
diff --git a/Bundles/LeafUI/uiPreferences/src/uiPreferences/Plugin.cpp b/Bundles/LeafUI/uiPreferences/src/uiPreferences/Plugin.cpp
new file mode 100644
index 0000000..4c224a7
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/src/uiPreferences/Plugin.cpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#include "uiPreferences/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/macros.hpp>
+
+namespace uiPreferences
+{
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiPreferences::Plugin");
+
+} // namespace uiServer
diff --git a/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp b/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp
new file mode 100644
index 0000000..8e409f2
--- /dev/null
+++ b/Bundles/LeafUI/uiPreferences/src/uiPreferences/action/SPreferencesConfiguration.cpp
@@ -0,0 +1,272 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#include "uiPreferences/action/SPreferencesConfiguration.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwData/Object.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/location/Folder.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwGui/dialog/LocationDialog.hpp>
+
+#include <boost/lexical_cast.hpp>
+
+#include <QDialog>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPushButton>
+#include <QIntValidator>
+
+namespace uiPreferences
+{
+
+namespace action
+{
+
+const ::fwCom::Signals::SignalKeyType SPreferencesConfiguration::s_PARAMETERS_MODIFIED_SIG = "parametersModified";
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiPreferences::action::SPreferencesConfiguration, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SPreferencesConfiguration::SPreferencesConfiguration() throw()
+{
+    m_sigParametersModified = newSignal< ParametersModifiedSignalType >(s_PARAMETERS_MODIFIED_SIG);
+}
+
+//------------------------------------------------------------------------------
+
+SPreferencesConfiguration::~SPreferencesConfiguration() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::starting() throw(::fwTools::Failed)
+{
+    this->actionServiceStarting();
+
+    // Check preferences
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    if(!preferencesServicesList.empty())
+    {
+        const ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
+        ::fwData::Composite::sptr prefs = prefService->getObject< ::fwData::Composite >();
+
+        for(PreferenceElt& pref : m_preferences)
+        {
+            pref.m_dataPreference                      = ::fwData::String::New(pref.m_defaultValue);
+            ::fwData::Composite::IteratorType iterPref = prefs->find( pref.m_preferenceKey );
+            if ( iterPref != prefs->end() )
+            {
+                pref.m_dataPreference = ::fwData::String::dynamicCast(iterPref->second);
+            }
+            else
+            {
+                (*prefs)[pref.m_preferenceKey] = pref.m_dataPreference;
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::stopping() throw(::fwTools::Failed)
+{
+    this->actionServiceStopping();
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::configuring() throw(fwTools::Failed)
+{
+    this->initialize();
+
+    ::fwRuntime::ConfigurationElementContainer config = m_configuration->findAllConfigurationElement("preference");
+    for(const auto& elt : config.getElements())
+    {
+        PreferenceElt pref;
+
+        ConfigurationType typeCfg = elt->findConfigurationElement("type");
+        SLM_ASSERT("element 'type' is missing.", typeCfg);
+        if(typeCfg->getValue() == "checkbox")
+        {
+            pref.m_type = PreferenceType::CHECKBOX;
+        }
+        else if (typeCfg->getValue() == "text" )
+        {
+            pref.m_type = PreferenceType::TEXT;
+        }
+        else if (typeCfg->getValue() == "number")
+        {
+            pref.m_type = PreferenceType::U_INT;
+        }
+        else if(typeCfg->getValue() == "path")
+        {
+            pref.m_type = PreferenceType::PATH;
+        }
+        else
+        {
+            OSLM_ERROR("Preference type "<<typeCfg->getValue()<<" is not implemented");
+        }
+
+        ConfigurationType nameCfg = elt->findConfigurationElement("name");
+        SLM_ASSERT("element 'name' is missing.", nameCfg);
+        pref.m_name = nameCfg->getValue();
+
+        ConfigurationType keyCfg = elt->findConfigurationElement("key");
+        SLM_ASSERT("element 'key' is missing.", keyCfg);
+        pref.m_preferenceKey = keyCfg->getValue();
+
+        ConfigurationType defaultValueCfg = elt->findConfigurationElement("default_value");
+        SLM_ASSERT("element 'default_value' is missing.", defaultValueCfg);
+        pref.m_defaultValue = defaultValueCfg->getValue();
+
+        if(pref.m_type == PreferenceType::TEXT || pref.m_type == PreferenceType::PATH)
+        {
+            pref.m_lineEdit = new QLineEdit(QString::fromStdString(pref.m_defaultValue));
+        }
+        else if(pref.m_type == PreferenceType::CHECKBOX)
+        {
+            pref.m_checkBox = new QCheckBox();
+            pref.m_checkBox->setChecked(pref.m_defaultValue == "true");
+        }
+        else if(pref.m_type == PreferenceType::U_INT)
+        {
+            pref.m_lineEdit = new QLineEdit(QString::fromStdString(pref.m_defaultValue));
+            pref.m_lineEdit->setValidator( new QIntValidator( 0, 999999));
+        }
+        m_preferences.push_back(pref);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::updating() throw(::fwTools::Failed)
+{
+    QPointer<QDialog> dialog     = new QDialog();
+    QPointer<QGridLayout> layout = new QGridLayout();
+
+    int index = 0;
+    for(PreferenceElt& pref : m_preferences)
+    {
+        QPointer<QLabel> label = new QLabel(QString::fromStdString(pref.m_name));
+        layout->addWidget(label, index, 0);
+
+        if(pref.m_type == PreferenceType::TEXT)
+        {
+            pref.m_lineEdit->setText(QString::fromStdString(pref.m_dataPreference->value()));
+            layout->addWidget(pref.m_lineEdit, index, 1);
+        }
+        else if(pref.m_type == PreferenceType::CHECKBOX)
+        {
+            pref.m_checkBox->setChecked(pref.m_dataPreference->value() == "true");
+            layout->addWidget(pref.m_checkBox, index, 1);
+        }
+        else if(pref.m_type == PreferenceType::U_INT)
+        {
+            pref.m_lineEdit->setText(QString::fromStdString(pref.m_dataPreference->value()));
+            layout->addWidget(pref.m_lineEdit, index, 1);
+        }
+        else if(pref.m_type == PreferenceType::PATH)
+        {
+            pref.m_lineEdit->setText(QString::fromStdString(pref.m_dataPreference->value()));
+            layout->addWidget(pref.m_lineEdit, index, 1);
+            QPointer<QPushButton> directorySelector = new QPushButton("...");
+            layout->addWidget(directorySelector, index, 2);
+            QObject::connect(directorySelector.data(), &QPushButton::clicked, [this,pref]()
+                    {
+                        this->onSelectDir(pref.m_lineEdit);
+                    });
+        }
+
+        ++index;
+    }
+
+    QPointer<QPushButton> cancelButton = new QPushButton("Cancel");
+    QPointer<QPushButton> okButton     = new QPushButton("OK");
+    okButton->setDefault(true);
+
+    QPointer<QHBoxLayout> buttonLayout = new QHBoxLayout();
+    buttonLayout->addWidget(cancelButton);
+    buttonLayout->addWidget(okButton);
+
+    layout->addLayout(buttonLayout, index, 1, 4, 2 );
+
+    QObject::connect(cancelButton.data(), &QPushButton::clicked, dialog.data(), &QDialog::reject);
+    QObject::connect(okButton.data(), &QPushButton::clicked, dialog.data(), &QDialog::accept);
+
+    dialog->setLayout(layout);
+
+
+    if (dialog->exec() == QDialog::Accepted)
+    {
+        for(PreferenceElt& pref : m_preferences)
+        {
+            if((pref.m_type == PreferenceType::TEXT || pref.m_type == PreferenceType::PATH) &&
+               !pref.m_lineEdit->text().isEmpty())
+            {
+                pref.m_dataPreference->value() = pref.m_lineEdit->text().toStdString();
+            }
+            else if(pref.m_type == PreferenceType::CHECKBOX)
+            {
+                pref.m_dataPreference->value() = pref.m_checkBox->isChecked() ? "true" : "false";
+            }
+            else if(pref.m_type == PreferenceType::U_INT)
+            {
+                pref.m_dataPreference->value() = pref.m_lineEdit->text().toStdString();
+            }
+        }
+        m_sigParametersModified->asyncEmit();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::onSelectDir(QPointer<QLineEdit> lineEdit)
+{
+    static ::boost::filesystem::path _sDefaultPath;
+
+    ::fwGui::dialog::LocationDialog dialogFile;
+    dialogFile.setTitle("Select Storage directory");
+    dialogFile.setDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
+    dialogFile.setType(::fwGui::dialog::ILocationDialog::FOLDER);
+
+    ::fwData::location::Folder::sptr result;
+    result = ::fwData::location::Folder::dynamicCast( dialogFile.show() );
+    if (result)
+    {
+        _sDefaultPath = result->getFolder();
+        lineEdit->setText( QString::fromStdString(result->getFolder().string()) );
+        dialogFile.saveDefaultLocation( ::fwData::location::Folder::New(_sDefaultPath) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::swapping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SPreferencesConfiguration::info( std::ostream &_sstream )
+{
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace action
+} // namespace videoQt
diff --git a/Bundles/LeafUI/uiPython/CMakeLists.txt b/Bundles/LeafUI/uiPython/CMakeLists.txt
deleted file mode 100644
index 13ec465..0000000
--- a/Bundles/LeafUI/uiPython/CMakeLists.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwRuntime
-    fwServices
-)
-
-fwReq(
-    binding
-    )
-
diff --git a/Bundles/LeafUI/uiPython/COPYING b/Bundles/LeafUI/uiPython/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiPython/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiPython/COPYING.LESSER b/Bundles/LeafUI/uiPython/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiPython/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiPython/Properties.cmake b/Bundles/LeafUI/uiPython/Properties.cmake
deleted file mode 100644
index 997baf5..0000000
--- a/Bundles/LeafUI/uiPython/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME uiPython )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwCore fwData fwGui fwPython fwRuntime fwServices )
-set( REQUIREMENTS binding )
-
diff --git a/Bundles/LeafUI/uiPython/bin/build.options b/Bundles/LeafUI/uiPython/bin/build.options
deleted file mode 100644
index 426b41b..0000000
--- a/Bundles/LeafUI/uiPython/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-TYPE     = 'bundle'
-VERSION  = '0-1'
-USE      = []
-LIB      = [ 'fwGui_0-1', 'fwPython_0-1' ]
-Bundle   = [ 'binding_0-1' ]
-
-
diff --git a/Bundles/LeafUI/uiPython/include/uiPython/Namespace.hpp b/Bundles/LeafUI/uiPython/include/uiPython/Namespace.hpp
deleted file mode 100644
index ac9144d..0000000
--- a/Bundles/LeafUI/uiPython/include/uiPython/Namespace.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef UIPYTHONNAMESPACE_HPP_
-#define UIPYTHONNAMESPACE_HPP_
-
-/**
- * @brief       The namespace uiPython contains the basic UI for fwPython
- * @namespace   uiPython
- * 
- * @date        2009-2010.
- *
- */
-namespace uiPython
-{
-
-}
-#endif /* UIPYTHONNAMESPACE_HPP_ */
diff --git a/Bundles/LeafUI/uiPython/include/uiPython/Plugin.hpp b/Bundles/LeafUI/uiPython/include/uiPython/Plugin.hpp
deleted file mode 100644
index 44b0bab..0000000
--- a/Bundles/LeafUI/uiPython/include/uiPython/Plugin.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIPYTHON_PLUGIN_HPP_
-#define _UIPYTHON_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
-
-#include "uiPython/config.hpp"
-
-namespace uiPython
-{
-
-/**
- * @brief   This class is called when the uiPython bundle is loaded.
- * @class   Plugin
- * 
- * @date    2009.
- */
-
-class UIPYTHON_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-
-public:
-
-     ///@brief  Destructor. Do nothing.
-    UIPYTHON_API virtual ~Plugin() throw();
-
-    /**
-     * @brief This method is used by runtime to initialize the bundle.
-     *
-     * @exception ::fwRuntime::RuntimeException.
-     *
-     * Register first basic services of type IAction, IEditor and IView.
-     * Secondly, verifies if the command line and profile.xml are well formed and starts the wxWidgets IHM.
-     */
-    UIPYTHON_API void start() throw(::fwRuntime::RuntimeException);
-
-    /**
-    * @brief This method is used by runtime to close the bundle. Do nothing.
-    */
-    UIPYTHON_API void stop() throw();
-
-};
-
-} // namespace uiPython
-
-#endif //_UIPYTHON_PLUGIN_HPP_
diff --git a/Bundles/LeafUI/uiPython/include/uiPython/action/Namespace.hpp b/Bundles/LeafUI/uiPython/include/uiPython/action/Namespace.hpp
deleted file mode 100644
index 9586999..0000000
--- a/Bundles/LeafUI/uiPython/include/uiPython/action/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIPYTHON_ACTION_NAMESPACE_HPP_
-#define _UIPYTHON_ACTION_NAMESPACE_HPP_
-
-namespace uiPython
-{
-/**
- * @brief       The namespace uiPython::action contains basic services managing action.
- * @namespace   uiPython::action
- * 
- * @date        2009-2010.
- *
- */
-namespace action
-{
-
-}
-}
-#endif /* UIPYTHONACTIONNAMESPACE_HPP_ */
diff --git a/Bundles/LeafUI/uiPython/include/uiPython/action/StringRun.hpp b/Bundles/LeafUI/uiPython/include/uiPython/action/StringRun.hpp
deleted file mode 100644
index e9da52b..0000000
--- a/Bundles/LeafUI/uiPython/include/uiPython/action/StringRun.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIPYTHON_ACTION_QUITACTION_HPP_
-#define _UIPYTHON_ACTION_QUITACTION_HPP_
-
-
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "uiPython/config.hpp"
-
-namespace uiPython
-{
-namespace action
-{
-
-/**
- * @brief   This action tries to close the window and reset root object.
- * @class   StringRun
- * 
-
- * @date    2009-2010.
- */
-class UIPYTHON_CLASS_API StringRun : public ::fwGui::IActionSrv
-{
-
-public :
-
-     fwCoreServiceClassDefinitionsMacro ( (StringRun)(::fwGui::IActionSrv) ) ;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    UIPYTHON_API StringRun() throw() ;
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    UIPYTHON_API virtual ~StringRun() throw() ;
-
-protected:
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    UIPYTHON_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the service parameters: specifies which services must be started or stopped
-     */
-    UIPYTHON_API void configuring() throw( ::fwTools::Failed );
-
-    UIPYTHON_API virtual void starting() throw(::fwTools::Failed);
-
-    UIPYTHON_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method tries to close the window and reset root object.
-     */
-    UIPYTHON_API virtual void updating() throw(::fwTools::Failed);
-
-    /*
-     * @brief This method gives information about the class.
-     */
-    UIPYTHON_API virtual void info(std::ostream &_sstream ) ;
-
-};
-
-
-} // namespace action
-} // namespace uiPython
-
-
-#endif /*_UIPYTHON_ACTION_QUITACTION_HPP_*/
diff --git a/Bundles/LeafUI/uiPython/include/uiPython/action/Test.hpp b/Bundles/LeafUI/uiPython/include/uiPython/action/Test.hpp
deleted file mode 100644
index 1720998..0000000
--- a/Bundles/LeafUI/uiPython/include/uiPython/action/Test.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIPYTHON_ACTION_QUITACTION_HPP_
-#define _UIPYTHON_ACTION_QUITACTION_HPP_
-
-
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "uiPython/config.hpp"
-
-namespace uiPython
-{
-namespace action
-{
-
-/**
- * @brief   This action tries to close the window and reset root object.
- * @class   Test
- * 
-
- * @date    2009-2010.
- */
-class UIPYTHON_CLASS_API Test : public ::fwGui::IActionSrv
-{
-
-public :
-
-     fwCoreServiceClassDefinitionsMacro ( (Test)(::fwGui::IActionSrv) ) ;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    UIPYTHON_API Test() throw() ;
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    UIPYTHON_API virtual ~Test() throw() ;
-
-protected:
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    UIPYTHON_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the service parameters: specifies which services must be started or stopped
-     */
-    UIPYTHON_API void configuring() throw( ::fwTools::Failed );
-
-    UIPYTHON_API virtual void starting() throw(::fwTools::Failed);
-
-    UIPYTHON_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method tries to close the window and reset root object.
-     */
-    UIPYTHON_API virtual void updating() throw(::fwTools::Failed);
-
-    /*
-     * @brief This method gives information about the class.
-     */
-    UIPYTHON_API virtual void info(std::ostream &_sstream ) ;
-
-};
-
-
-} // namespace action
-} // namespace uiPython
-
-
-#endif /*_UIPYTHON_ACTION_QUITACTION_HPP_*/
diff --git a/Bundles/LeafUI/uiPython/include/uiPython/config.hpp b/Bundles/LeafUI/uiPython/include/uiPython/config.hpp
deleted file mode 100644
index a698f6d..0000000
--- a/Bundles/LeafUI/uiPython/include/uiPython/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIPYTHON_CONFIG_HPP_
-#define _UIPYTHON_CONFIG_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef UIPYTHON_EXPORTS
-    #define UIPYTHON_API __declspec(dllexport)
-    #else
-    #define UIPYTHON_API __declspec(dllimport)
-    #endif
-
-    #define UIPYTHON_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIPYTHON_EXPORTS
-    #define UIPYTHON_API __attribute__ ((visibility("default")))
-    #define UIPYTHON_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIPYTHON_API __attribute__ ((visibility("hidden")))
-    #define UIPYTHON_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIPYTHON_API
-    #define UIPYTHON_CLASS_API
-
-#endif
-
-#endif // #ifndef _UIPYTHON_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiPython/rc/plugin.xml b/Bundles/LeafUI/uiPython/rc/plugin.xml
deleted file mode 100644
index 23aaaff..0000000
--- a/Bundles/LeafUI/uiPython/rc/plugin.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<plugin class="::uiPython::Plugin" id="uiPython">
-
-    <library name="uiPython" />
-
-    <requirement id="dataReg" />
-    <requirement id="servicesReg" />
-    <requirement id="binding" />
-
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IActionSrv</type>
-        <service>::uiPython::action::Test</service>
-        <object>::fwData::Object</object>
-        <desc>exec python script print hello</desc>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IActionSrv</type>
-        <service>::uiPython::action::StringRun</service>
-        <object>::fwData::String</object>
-        <desc>exec python script from the string</desc>
-    </extension>
-
-</plugin>
diff --git a/Bundles/LeafUI/uiPython/src/uiPython/Plugin.cpp b/Bundles/LeafUI/uiPython/src/uiPython/Plugin.cpp
deleted file mode 100644
index 969fd2d..0000000
--- a/Bundles/LeafUI/uiPython/src/uiPython/Plugin.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-
-#include "uiPython/Plugin.hpp"
-
-namespace uiPython
-{
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiPython::Plugin");
-
-Plugin::~Plugin() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::start() throw(::fwRuntime::RuntimeException)
-{
-}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::stop() throw()
-{}
-
-} // namespace uiPython
diff --git a/Bundles/LeafUI/uiPython/src/uiPython/action/StringRun.cpp b/Bundles/LeafUI/uiPython/src/uiPython/action/StringRun.cpp
deleted file mode 100644
index db23ef4..0000000
--- a/Bundles/LeafUI/uiPython/src/uiPython/action/StringRun.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwData/String.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwPython/Interpreter.hpp>
-
-#include "uiPython/action/StringRun.hpp"
-
-namespace uiPython
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiPython::action::StringRun , ::fwData::String ) ;
-
-//-----------------------------------------------------------------------------
-
-StringRun::StringRun() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-StringRun::~StringRun() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void StringRun::configuring() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void StringRun::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void StringRun::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void StringRun::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void StringRun::info(std::ostream &_sstream )
-{
-    _sstream << "StringRun Action" << std::endl;
-}
-
-//-----------------------------------------------------------------------------
-
-void StringRun::updating() throw( ::fwTools::Failed )
-{
-    ::fwData::String::sptr str = this->getObject< ::fwData::String >();
-    ::fwPython::Interpreter python;
-    python.execute(str->value().c_str());
-}
-
-//-----------------------------------------------------------------------------
-
-}
-}
diff --git a/Bundles/LeafUI/uiPython/src/uiPython/action/Test.cpp b/Bundles/LeafUI/uiPython/src/uiPython/action/Test.cpp
deleted file mode 100644
index a892da1..0000000
--- a/Bundles/LeafUI/uiPython/src/uiPython/action/Test.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwPython/Interpreter.hpp>
-
-#include "uiPython/action/Test.hpp"
-
-namespace uiPython
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiPython::action::Test , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-Test::Test() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-Test::~Test() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Test::configuring() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void Test::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void Test::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void Test::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void Test::info(std::ostream &_sstream )
-{
-    _sstream << "Test Action" << std::endl;
-}
-
-//-----------------------------------------------------------------------------
-
-void Test::updating() throw( ::fwTools::Failed )
-{
-    ::fwPython::Interpreter python;
-    python.execute("print \"Hello fw4spl world\"");
-}
-
-//-----------------------------------------------------------------------------
-
-}
-}
diff --git a/Bundles/LeafUI/uiReconstructionQt/CMakeLists.txt b/Bundles/LeafUI/uiReconstructionQt/CMakeLists.txt
index ced82d2..b991bb0 100644
--- a/Bundles/LeafUI/uiReconstructionQt/CMakeLists.txt
+++ b/Bundles/LeafUI/uiReconstructionQt/CMakeLists.txt
@@ -1,23 +1,18 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwRuntime
-    fwTools
-    gui
-)
-
-
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
 
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
-fwLink(${QT_LIBRARIES})
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
 
-set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiReconstructionQt/COPYING b/Bundles/LeafUI/uiReconstructionQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiReconstructionQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiReconstructionQt/COPYING.LESSER b/Bundles/LeafUI/uiReconstructionQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiReconstructionQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiReconstructionQt/Properties.cmake b/Bundles/LeafUI/uiReconstructionQt/Properties.cmake
index 95bcc67..9303fdd 100644
--- a/Bundles/LeafUI/uiReconstructionQt/Properties.cmake
+++ b/Bundles/LeafUI/uiReconstructionQt/Properties.cmake
@@ -2,6 +2,16 @@
 set( NAME uiReconstructionQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGuiQt fwRuntime fwServices fwTools gui )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwGuiQt
+    fwRuntime
+    fwServices
+    fwTools
+    gui
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiReconstructionQt/bin/build.options b/Bundles/LeafUI/uiReconstructionQt/bin/build.options
deleted file mode 100644
index 6a0d6d9..0000000
--- a/Bundles/LeafUI/uiReconstructionQt/bin/build.options
+++ /dev/null
@@ -1,16 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwRuntime_0-3',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwGuiQt_0-1'
-          ]
-USE     = ['qtCore','boost']
-BUNDLES = ['gui_0-1']
-
-
-
diff --git a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Namespace.hpp b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Namespace.hpp
index 4fb8185..7242b71 100644
--- a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Namespace.hpp
+++ b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIRECONSTRUCTIONQTNAMESPACE_HPP_
-#define UIRECONSTRUCTIONQTNAMESPACE_HPP_
+#ifndef __UIRECONSTRUCTIONQT_NAMESPACE_HPP__
+#define __UIRECONSTRUCTIONQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiReconstruction contains several editors using Qt related on reconstruction. This namespace is included in uiReconstructionQt bundle.
  * @namespace   uiReconstruction
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace uiReconstruction
 {
 }
-#endif /* UIRECONSTRUCTIONQTNAMESPACE_HPP_ */
+#endif /* __UIRECONSTRUCTIONQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/OrganMaterialEditor.hpp b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/OrganMaterialEditor.hpp
index ec74e3f..430d19f 100644
--- a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/OrganMaterialEditor.hpp
+++ b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/OrganMaterialEditor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIRECONSTRUCTIONQT_ORGAN_MATERIAL_EDITOR_HPP_
-#define _UIRECONSTRUCTIONQT_ORGAN_MATERIAL_EDITOR_HPP_
+#ifndef __UIRECONSTRUCTIONQT_ORGANMATERIALEDITOR_HPP__
+#define __UIRECONSTRUCTIONQT_ORGANMATERIALEDITOR_HPP__
 
 #include <QObject>
 #include <QPointer>
@@ -25,22 +25,23 @@ namespace uiReconstruction
 /**
  * @brief   OrganMaterialEditor service.
  * @class   OrganMaterialEditor
- * 
+ *
  * @date    2010.
  */
-class UIRECONSTRUCTIONQT_CLASS_API OrganMaterialEditor : public QObject, public ::gui::editor::IEditor
+class UIRECONSTRUCTIONQT_CLASS_API OrganMaterialEditor : public QObject,
+                                                         public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (OrganMaterialEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (OrganMaterialEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIRECONSTRUCTIONQT_API OrganMaterialEditor() throw() ;
+    UIRECONSTRUCTIONQT_API OrganMaterialEditor() throw();
 
     /// Destructor. Do nothing.
-    UIRECONSTRUCTIONQT_API virtual ~OrganMaterialEditor() throw() ;
+    UIRECONSTRUCTIONQT_API virtual ~OrganMaterialEditor() throw();
 
 protected:
 
@@ -53,9 +54,6 @@ protected:
     ///This method launches the IEditor::stopping method.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Management of observations ( overrides )
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     virtual void updating() throw(::fwTools::Failed);
 
     virtual void swapping() throw(::fwTools::Failed);
@@ -63,7 +61,7 @@ protected:
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
     void refreshMaterial( );
     void materialNotification( );
@@ -75,13 +73,13 @@ protected Q_SLOTS:
 
 private:
 
-    QPointer<QPushButton> m_colourButton ;
-    QPointer<QSlider> m_opacitySlider ;
+    QPointer<QPushButton> m_colourButton;
+    QPointer<QSlider> m_opacitySlider;
     QPointer<QLabel> m_transparencyValue;
 };
 
 } // uiReconstruction
 
-#endif /*_UIRECONSTRUCTIONQT_ORGAN_MATERIAL_EDITOR_HPP_*/
+#endif /*__UIRECONSTRUCTIONQT_ORGANMATERIALEDITOR_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Plugin.hpp b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Plugin.hpp
index 6f93b3d..1af539e 100644
--- a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Plugin.hpp
+++ b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/Plugin.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIRECONSTRUCTIONQT_PLUGIN_HPP_
-#define _UIRECONSTRUCTIONQT_PLUGIN_HPP_
+#ifndef __UIRECONSTRUCTIONQT_PLUGIN_HPP__
+#define __UIRECONSTRUCTIONQT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
 namespace uiReconstruction
 {
 /**
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -32,4 +32,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiReconstruction
 
-#endif //_UIRECONSTRUCTIONQT_PLUGIN_HPP_
+#endif //__UIRECONSTRUCTIONQT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/RepresentationEditor.hpp b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/RepresentationEditor.hpp
index 7a1f39d..833afe4 100644
--- a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/RepresentationEditor.hpp
+++ b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/RepresentationEditor.hpp
@@ -1,22 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIRECONSTRUCTIONQT_REPRESENTATION_EDITOR_HPP_
-#define _UIRECONSTRUCTIONQT_REPRESENTATION_EDITOR_HPP_
+#ifndef __UIRECONSTRUCTIONQT_REPRESENTATIONEDITOR_HPP__
+#define __UIRECONSTRUCTIONQT_REPRESENTATIONEDITOR_HPP__
 
-#include <QObject>
-#include <QPointer>
+#include "uiReconstructionQt/config.hpp"
+
+#include <gui/editor/IEditor.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-#include <fwTools/Failed.hpp>
 #include <fwData/Material.hpp>
 
+#include <fwTools/Failed.hpp>
 
-#include <gui/editor/IEditor.hpp>
+#include <QObject>
+#include <QPointer>
 
-#include "uiReconstructionQt/config.hpp"
 
 class QRadioButton;
 class QCheckBox;
@@ -29,22 +33,32 @@ namespace uiReconstruction
 /**
  * @brief   RepresentationEditor service.
  * @class   RepresentationEditor
- * 
+ *
  * @date    2010.
  */
-class UIRECONSTRUCTIONQT_CLASS_API RepresentationEditor : public  QObject, public ::gui::editor::IEditor
+class UIRECONSTRUCTIONQT_CLASS_API RepresentationEditor : public QObject,
+                                                          public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (RepresentationEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (RepresentationEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIRECONSTRUCTIONQT_API RepresentationEditor() throw() ;
+    UIRECONSTRUCTIONQT_API RepresentationEditor() throw();
 
     /// Destructor. Do nothing.
-    UIRECONSTRUCTIONQT_API virtual ~RepresentationEditor() throw() ;
+    UIRECONSTRUCTIONQT_API virtual ~RepresentationEditor() throw();
+
+    /**
+     * @name Signals API
+     * @{
+     */
+    /// normals mode (0: none, 1: point, 2: cell), reconstruction fwID
+    typedef ::fwCom::Signal< void ( std::uint8_t, std::string ) > NormalsModeModifiedSignalType;
+    UIRECONSTRUCTIONQT_API static const ::fwCom::Signals::SignalKeyType s_NORMALS_MODE_MODIFIED_SIG;
+    /** @} */
 
 protected:
 
@@ -57,9 +71,6 @@ protected:
     ///This method launches the IEditor::stopping method.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Management of observations ( overrides )
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     virtual void updating() throw(::fwTools::Failed);
 
     virtual void swapping() throw(::fwTools::Failed);
@@ -67,10 +78,9 @@ protected:
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
     void notifyMaterial();
-    void notifyMesh();
 
 protected Q_SLOTS:
 
@@ -82,19 +92,22 @@ protected Q_SLOTS:
 private:
 
     void refreshNormals();
-    void refreshRepresentation() ;
-    void refreshShading() ;
+    void refreshRepresentation();
+    void refreshShading();
 
     QPointer<QButtonGroup> m_buttonGroup;
     QPointer<QButtonGroup> m_buttonGroupShading;
-    QPointer<QButtonGroup> m_normalsRadioBox ;
+    QPointer<QButtonGroup> m_normalsRadioBox;
+
+    ::fwData::Material::sptr m_material;
 
-    ::fwData::Material::sptr m_material ;
+    /// Signal emitted when normals mode changed (0: none, 1: point, 2: cell)
+    NormalsModeModifiedSignalType::sptr m_sigNormalsModeModified;
 
 };
 
 } // uiReconstruction
 
-#endif /*_UIRECONSTRUCTIONQT_REPRESENTATION_EDITOR_HPP_*/
+#endif /*__UIRECONSTRUCTIONQT_REPRESENTATIONEDITOR_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/config.hpp b/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/config.hpp
deleted file mode 100644
index e4b2717..0000000
--- a/Bundles/LeafUI/uiReconstructionQt/include/uiReconstructionQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIRECONSTRUCTIONQT_CONFIG_HPP_
-#define _UIRECONSTRUCTIONQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIRECONSTRUCTIONQT_EXPORTS
-    #define UIRECONSTRUCTIONQT_API __declspec(dllexport)
-    #else
-    #define UIRECONSTRUCTIONQT_API __declspec(dllimport)
-    #endif
-
-    #define UIRECONSTRUCTIONQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIRECONSTRUCTIONQT_EXPORTS
-    #define UIRECONSTRUCTIONQT_API __attribute__ ((visibility("default")))
-    #define UIRECONSTRUCTIONQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIRECONSTRUCTIONQT_API __attribute__ ((visibility("hidden")))
-    #define UIRECONSTRUCTIONQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIRECONSTRUCTIONQT_API
-    #define UIRECONSTRUCTIONQT_CLASS_API
-
-#endif
-
-#endif //_UIRECONSTRUCTIONQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiReconstructionQt/rc/plugin.xml b/Bundles/LeafUI/uiReconstructionQt/rc/plugin.xml
index 39102cb..b73833b 100644
--- a/Bundles/LeafUI/uiReconstructionQt/rc/plugin.xml
+++ b/Bundles/LeafUI/uiReconstructionQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiReconstructionQt" class="::uiReconstruction::Plugin">
+<plugin id="uiReconstructionQt" class="::uiReconstruction::Plugin" version="@DASH_VERSION@" >
     <library name="uiReconstructionQt"/>
 
     <requirement id="dataReg"/>
diff --git a/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/OrganMaterialEditor.cpp b/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/OrganMaterialEditor.cpp
index eadba12..0a28343 100644
--- a/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/OrganMaterialEditor.cpp
+++ b/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/OrganMaterialEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,17 +20,12 @@
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
 
-#include <fwComEd/MaterialMsg.hpp>
-
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
 #include <fwServices/op/Get.hpp>
-#include <fwServices/IEditionService.hpp>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 
@@ -39,7 +34,7 @@
 namespace uiReconstruction
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiReconstruction::OrganMaterialEditor , ::fwData::Reconstruction ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiReconstruction::OrganMaterialEditor, ::fwData::Reconstruction );
 
 
 OrganMaterialEditor::OrganMaterialEditor() throw()
@@ -50,7 +45,8 @@ OrganMaterialEditor::OrganMaterialEditor() throw()
 //------------------------------------------------------------------------------
 
 OrganMaterialEditor::~OrganMaterialEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -58,17 +54,17 @@ void OrganMaterialEditor::starting() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
     this->create();
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
-    m_colourButton = new QPushButton(tr("Color"), container) ;
+    m_colourButton = new QPushButton(tr("Color"), container);
     m_colourButton->setToolTip(tr("Selected organ's color"));
     m_colourButton->setMinimumSize (m_colourButton->sizeHint());
-//    m_colourButton->setMinimumSize (120,35);
 
     QLabel* transparencyLabel = new QLabel(tr("Transparency : "), container);
-    m_opacitySlider = new QSlider( Qt::Horizontal, container) ;
+    m_opacitySlider = new QSlider( Qt::Horizontal, container);
     m_opacitySlider->setToolTip(tr("Selected organ's opacity"));
     m_opacitySlider->setRange(0,100);
     m_opacitySlider->setTickInterval(20);
@@ -78,14 +74,14 @@ void OrganMaterialEditor::starting() throw(::fwTools::Failed)
     m_transparencyValue = new QLabel("", container);
     m_transparencyValue->setMinimumSize (m_transparencyValue->sizeHint());
 
-    QVBoxLayout* layout = new QVBoxLayout(container);
-    layout->addWidget( m_colourButton, 0 ) ;
+    QVBoxLayout* layout = new QVBoxLayout();
+    layout->addWidget( m_colourButton, 0 );
 
-    QHBoxLayout* transparencyLayout= new QHBoxLayout( container );
-    transparencyLayout->addWidget( transparencyLabel, 0) ;
+    QHBoxLayout* transparencyLayout = new QHBoxLayout( );
+    transparencyLayout->addWidget( transparencyLabel, 0);
     transparencyLayout->addWidget( m_opacitySlider, 1 );
-    transparencyLayout->addWidget( m_transparencyValue, 0) ;
-    layout->addLayout( transparencyLayout, 0) ;
+    transparencyLayout->addWidget( m_transparencyValue, 0);
+    layout->addLayout( transparencyLayout, 0);
 
     container->setLayout( layout );
     container->setEnabled(false);
@@ -133,12 +129,6 @@ void OrganMaterialEditor::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void OrganMaterialEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
 void OrganMaterialEditor::info( std::ostream &_sstream )
 {
 }
@@ -150,13 +140,14 @@ void OrganMaterialEditor::onColorButton()
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
     SLM_ASSERT("No Reconstruction!", reconstruction);
 
-    ::fwData::Material::sptr material = reconstruction->getMaterial() ;
-    int red = material->ambient()->red()*255;
-    int green = material->ambient()->green()*255;
-    int blue = material->ambient()->blue()*255;
+    ::fwData::Material::sptr material = reconstruction->getMaterial();
+    int red   = material->diffuse()->red()*255;
+    int green = material->diffuse()->green()*255;
+    int blue  = material->diffuse()->blue()*255;
 
     // Create Color choice dialog.
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -164,9 +155,9 @@ void OrganMaterialEditor::onColorButton()
     QColor color = QColorDialog::getColor(oldColor, container);
     if(color.isValid())
     {
-        material->ambient()->red() = color.redF();
-        material->ambient()->green() = color.greenF();
-        material->ambient()->blue() = color.blueF();
+        material->diffuse()->red()   = color.redF();
+        material->diffuse()->green() = color.greenF();
+        material->diffuse()->blue()  = color.blueF();
         this->materialNotification();
         refreshMaterial();
     }
@@ -180,8 +171,8 @@ void OrganMaterialEditor::onOpacitySlider(int value )
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
     SLM_ASSERT("No Reconstruction!", reconstruction);
 
-    ::fwData::Material::sptr material = reconstruction->getMaterial() ;
-    material->ambient()->alpha() = value/100.0;
+    ::fwData::Material::sptr material = reconstruction->getMaterial();
+    material->diffuse()->alpha()      = value/100.0;
     std::stringstream ss;
     ss << value << "%";
     m_transparencyValue->setText(QString::fromStdString(ss.str()));
@@ -196,19 +187,20 @@ void OrganMaterialEditor::refreshMaterial( )
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
     SLM_ASSERT("No Reconstruction!", reconstruction);
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     container->setEnabled(!reconstruction->getOrganName().empty());
 
-    ::fwData::Material::sptr material = reconstruction->getMaterial() ;
+    ::fwData::Material::sptr material = reconstruction->getMaterial();
     QColor materialColor = QColor (
-                material->ambient()->red()*255,
-                material->ambient()->green()*255,
-                material->ambient()->blue()*255,
-                material->ambient()->alpha()*255
-                );
+        material->diffuse()->red()*255,
+        material->diffuse()->green()*255,
+        material->diffuse()->blue()*255,
+        material->diffuse()->alpha()*255
+        );
 
     int iconSize = m_colourButton->style()->pixelMetric(QStyle::PM_LargeIconSize);
     QPixmap pix(iconSize, iconSize);
@@ -216,8 +208,8 @@ void OrganMaterialEditor::refreshMaterial( )
 
     m_colourButton->setIcon(QIcon(pix));
 
-    int a = material->ambient()->alpha()*100;
-    m_opacitySlider->setValue( a ) ;
+    int a = material->diffuse()->alpha()*100;
+    m_opacitySlider->setValue( a );
     std::stringstream ss;
     ss << a << "%";
     m_transparencyValue->setText(QString::fromStdString(ss.str()));
@@ -230,9 +222,10 @@ void OrganMaterialEditor::materialNotification( )
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
     SLM_ASSERT("No Reconstruction!", reconstruction);
 
-    ::fwComEd::MaterialMsg::sptr msg = ::fwComEd::MaterialMsg::New();
-    msg->addEvent( ::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), reconstruction->getMaterial(), msg);
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = reconstruction->getMaterial()->signal< ::fwData::Object::ModifiedSignalType >(
+        ::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/Plugin.cpp b/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/Plugin.cpp
index 0de8e96..94d0cce 100644
--- a/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/Plugin.cpp
+++ b/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,13 +15,15 @@ namespace uiReconstruction
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiReconstruction::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiReconstruction
diff --git a/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/RepresentationEditor.cpp b/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/RepresentationEditor.cpp
index 146a552..a26503a 100644
--- a/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/RepresentationEditor.cpp
+++ b/Bundles/LeafUI/uiReconstructionQt/src/uiReconstructionQt/RepresentationEditor.cpp
@@ -1,14 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QAbstractButton>
-#include <QRadioButton>
-#include <QVBoxLayout>
-#include <QGroupBox>
-#include <QButtonGroup>
+#include "uiReconstructionQt/RepresentationEditor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -17,38 +17,43 @@
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
 
-#include <fwComEd/MaterialMsg.hpp>
-#include <fwComEd/MeshMsg.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
 #include <fwServices/op/Get.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwGuiQt/container/QtContainer.hpp>
 
-#include "uiReconstructionQt/RepresentationEditor.hpp"
+#include <QAbstractButton>
+#include <QRadioButton>
+#include <QVBoxLayout>
+#include <QGroupBox>
+#include <QButtonGroup>
 
 namespace uiReconstruction
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiReconstruction::RepresentationEditor , ::fwData::Reconstruction ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiReconstruction::RepresentationEditor, ::fwData::Reconstruction );
 
+//------------------------------------------------------------------------------
+
+const ::fwCom::Signals::SignalKeyType RepresentationEditor::s_NORMALS_MODE_MODIFIED_SIG = "normalsModeModified";
+
+//------------------------------------------------------------------------------
 
 RepresentationEditor::RepresentationEditor() throw()
 {
-    //handlingEventOff();
+    m_sigNormalsModeModified = NormalsModeModifiedSignalType::New();
+    ::fwCom::HasSignals::m_signals(s_NORMALS_MODE_MODIFIED_SIG, m_sigNormalsModeModified);
 }
 
 //------------------------------------------------------------------------------
 
 RepresentationEditor::~RepresentationEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -56,14 +61,15 @@ void RepresentationEditor::starting() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
     this->create();
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
-    QVBoxLayout * layout = new QVBoxLayout(container);
+    QVBoxLayout * layout = new QVBoxLayout();
 
-    QGroupBox *groupBox =new QGroupBox(tr("Representation"), container);
-    QVBoxLayout * layoutGroupBox = new QVBoxLayout(groupBox);
+    QGroupBox *groupBox          = new QGroupBox(tr("Representation"), container);
+    QVBoxLayout * layoutGroupBox = new QVBoxLayout();
     groupBox->setLayout(layoutGroupBox);
 
     m_buttonGroup = new QButtonGroup(groupBox);
@@ -90,40 +96,46 @@ void RepresentationEditor::starting() throw(::fwTools::Failed)
     layoutGroupBox->addWidget(buttonEdge);
 
     // Shading group box
-    QGroupBox *groupBoxShading =new QGroupBox(tr("Shading"), container);
-    QVBoxLayout * layoutGroupBoxShading = new QVBoxLayout(groupBoxShading);
+    QGroupBox *groupBoxShading          = new QGroupBox(tr("Shading"), container);
+    QVBoxLayout * layoutGroupBoxShading = new QVBoxLayout();
     groupBoxShading->setLayout(layoutGroupBoxShading);
     m_buttonGroupShading = new QButtonGroup(groupBoxShading);
 
+    QRadioButton *buttonAmbient = new QRadioButton ( tr("Ambient"), groupBoxShading );
+    buttonAmbient->setMinimumSize(buttonAmbient->sizeHint());
+    m_buttonGroupShading->addButton(buttonAmbient, 0);
+    layoutGroupBoxShading->addWidget(buttonAmbient);
+    buttonAmbient->setChecked(true);
+
     QRadioButton *buttonFlat = new QRadioButton ( tr("Flat"), groupBoxShading );
     buttonFlat->setMinimumSize(buttonFlat->sizeHint());
-    m_buttonGroupShading->addButton(buttonFlat, 0);
+    m_buttonGroupShading->addButton(buttonFlat, 1);
     layoutGroupBoxShading->addWidget(buttonFlat);
     buttonFlat->setChecked(true);
 
     QRadioButton *buttonGouraud = new QRadioButton ( tr("Gouraud"), groupBoxShading );
     buttonGouraud->setMinimumSize(buttonGouraud->sizeHint());
-    m_buttonGroupShading->addButton(buttonGouraud, 1);
+    m_buttonGroupShading->addButton(buttonGouraud, 2);
     layoutGroupBoxShading->addWidget(buttonGouraud);
 
     QRadioButton *buttonPhong = new QRadioButton ( tr("Phong"), groupBoxShading );
     buttonPhong->setMinimumSize(buttonPhong->sizeHint());
-    m_buttonGroupShading->addButton(buttonPhong, 2);
+    m_buttonGroupShading->addButton(buttonPhong, 3);
     layoutGroupBoxShading->addWidget(buttonPhong);
 
     layout->addWidget( groupBox);
     layout->addWidget( groupBoxShading);
 
 #ifdef _DEBUG
-    QGroupBox *groupBoxNormals =new QGroupBox(tr("Normals"), container);
+    QGroupBox *groupBoxNormals          = new QGroupBox(tr("Normals"), container);
     QVBoxLayout * layoutGroupBoxNormals = new QVBoxLayout(groupBoxNormals);
     m_normalsRadioBox = new QButtonGroup(container);
     QRadioButton* pointNormalsButton = new QRadioButton(tr("Show point normals"), container);
-    QRadioButton* cellNormalsButton = new QRadioButton(tr("Show cell normals"), container);
-    QRadioButton* hideNormalsButton = new QRadioButton(tr("Hide normals"), container);
+    QRadioButton* cellNormalsButton  = new QRadioButton(tr("Show cell normals"), container);
+    QRadioButton* hideNormalsButton  = new QRadioButton(tr("Hide normals"), container);
 
-    m_normalsRadioBox->addButton(pointNormalsButton, 2);
-    m_normalsRadioBox->addButton(cellNormalsButton, 1);
+    m_normalsRadioBox->addButton(pointNormalsButton, 1);
+    m_normalsRadioBox->addButton(cellNormalsButton, 2);
     m_normalsRadioBox->addButton(hideNormalsButton, 0);
 
     layoutGroupBoxNormals->addWidget( pointNormalsButton);
@@ -151,8 +163,8 @@ void RepresentationEditor::stopping() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    QObject::disconnect(m_buttonGroup, SIGNAL(buttonClicked ( QAbstractButton *)), this, SLOT(onChangeRepresentation(QAbstractButton *)));
-    QObject::disconnect(m_buttonGroupShading, SIGNAL(buttonClicked ( QAbstractButton *)), this, SLOT(onChangeShading(QAbstractButton *)));
+    QObject::disconnect(m_buttonGroup, SIGNAL(buttonClicked ( int )), this, SLOT(onChangeRepresentation(int )));
+    QObject::disconnect(m_buttonGroupShading, SIGNAL(buttonClicked ( int )), this, SLOT(onChangeShading(int )));
 
 #ifdef _DEBUG
     QObject::connect(m_normalsRadioBox, SIGNAL(buttonClicked(int)), this, SLOT(onShowNormals(int)));
@@ -176,16 +188,17 @@ void RepresentationEditor::updating() throw(::fwTools::Failed)
 {
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
     SLM_ASSERT("No Reconstruction!", reconstruction);
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
-    m_material = reconstruction->getMaterial() ;
+    m_material = reconstruction->getMaterial();
     container->setEnabled(!reconstruction->getOrganName().empty());
 
     this->refreshRepresentation();
     this->refreshNormals();
-    this->refreshShading() ;
+    this->refreshShading();
 }
 
 //------------------------------------------------------------------------------
@@ -197,12 +210,6 @@ void RepresentationEditor::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void RepresentationEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
 void RepresentationEditor::info( std::ostream &_sstream )
 {
 }
@@ -212,29 +219,29 @@ void RepresentationEditor::info( std::ostream &_sstream )
 void RepresentationEditor::onChangeRepresentation( int id )
 {
 
-    ::fwData::Material::REPRESENTATION_MODE selectedMode = ::fwData::Material::MODE_SURFACE;
+    ::fwData::Material::RepresentationType selectedMode = ::fwData::Material::SURFACE;
 
     switch(id)
     {
-        case 0 :
+        case 0:
         {
-            selectedMode = ::fwData::Material::MODE_SURFACE;
-            break ;
+            selectedMode = ::fwData::Material::SURFACE;
+            break;
         }
-        case 1 :
+        case 1:
         {
-            selectedMode = ::fwData::Material::MODE_POINT;
-            break ;
+            selectedMode = ::fwData::Material::POINT;
+            break;
         }
-        case 2 :
+        case 2:
         {
-            selectedMode = ::fwData::Material::MODE_WIREFRAME;
-            break ;
+            selectedMode = ::fwData::Material::WIREFRAME;
+            break;
         }
-        case 3 :
+        case 3:
         {
-            selectedMode = ::fwData::Material::MODE_EDGE;
-            break ;
+            selectedMode = ::fwData::Material::EDGE;
+            break;
         }
     }
 
@@ -246,24 +253,29 @@ void RepresentationEditor::onChangeRepresentation( int id )
 
 void RepresentationEditor::onChangeShading(  int id )
 {
-    ::fwData::Material::SHADING_MODE selectedMode = ::fwData::Material::MODE_PHONG;
+    ::fwData::Material::ShadingType selectedMode = ::fwData::Material::PHONG;
 
     switch(id)
     {
-        case 0 :
+        case 0:
         {
-            selectedMode = ::fwData::Material::MODE_FLAT;
-            break ;
+            selectedMode = ::fwData::Material::AMBIENT;
+            break;
         }
-        case 1 :
+        case 1:
         {
-            selectedMode = ::fwData::Material::MODE_GOURAUD;
-            break ;
+            selectedMode = ::fwData::Material::FLAT;
+            break;
         }
-        case 2 :
+        case 2:
         {
-            selectedMode = ::fwData::Material::MODE_PHONG;
-            break ;
+            selectedMode = ::fwData::Material::GOURAUD;
+            break;
+        }
+        case 3:
+        {
+            selectedMode = ::fwData::Material::PHONG;
+            break;
         }
     }
 
@@ -280,33 +292,33 @@ void RepresentationEditor::refreshRepresentation()
 
     switch(representationMode)
     {
-    case ::fwData::Material::MODE_SURFACE:
-    {
-        button = m_buttonGroup->button(0);
-        button->setChecked(true);
-        break ;
-    }
-    case ::fwData::Material::MODE_POINT:
-    {
-        button = m_buttonGroup->button(1);
-        button->setChecked(true);
-        break ;
-    }
-    case ::fwData::Material::MODE_WIREFRAME:
-    {
-        button= m_buttonGroup->button(2);
-        button->setChecked(true);
-        break ;
-    }
-    case ::fwData::Material::MODE_EDGE:
-    {
-        button = m_buttonGroup->button(3);
-        button->setChecked(true);
-        break ;
-    }
-    default :
-        button = m_buttonGroup->button(0);
-        button->setChecked(true);
+        case ::fwData::Material::SURFACE:
+        {
+            button = m_buttonGroup->button(0);
+            button->setChecked(true);
+            break;
+        }
+        case ::fwData::Material::POINT:
+        {
+            button = m_buttonGroup->button(1);
+            button->setChecked(true);
+            break;
+        }
+        case ::fwData::Material::WIREFRAME:
+        {
+            button = m_buttonGroup->button(2);
+            button->setChecked(true);
+            break;
+        }
+        case ::fwData::Material::EDGE:
+        {
+            button = m_buttonGroup->button(3);
+            button->setChecked(true);
+            break;
+        }
+        default:
+            button = m_buttonGroup->button(0);
+            button->setChecked(true);
     }
 }
 
@@ -319,27 +331,33 @@ void RepresentationEditor::refreshShading()
 
     switch(shadingMode)
     {
-    case ::fwData::Material::MODE_FLAT:
-    {
-        button = m_buttonGroupShading->button(0);
-        button->setChecked(true);
-        break ;
-    }
-    case ::fwData::Material::MODE_GOURAUD:
-    {
-        button = m_buttonGroupShading->button(1);
-        button->setChecked(true);
-        break ;
-    }
-    case ::fwData::Material::MODE_PHONG:
-    {
-        button = m_buttonGroupShading->button(2);
-        button->setChecked(true);
-        break ;
-    }
-    default :
-        button = m_buttonGroupShading->button(2);
-        button->setChecked(true);
+        case ::fwData::Material::AMBIENT:
+        {
+            button = m_buttonGroupShading->button(0);
+            button->setChecked(true);
+            break;
+        }
+        case ::fwData::Material::FLAT:
+        {
+            button = m_buttonGroupShading->button(1);
+            button->setChecked(true);
+            break;
+        }
+        case ::fwData::Material::GOURAUD:
+        {
+            button = m_buttonGroupShading->button(2);
+            button->setChecked(true);
+            break;
+        }
+        case ::fwData::Material::PHONG:
+        {
+            button = m_buttonGroupShading->button(3);
+            button->setChecked(true);
+            break;
+        }
+        default:
+            button = m_buttonGroupShading->button(2);
+            button->setChecked(true);
     }
 }
 
@@ -349,9 +367,9 @@ void RepresentationEditor::refreshNormals()
 {
 #ifdef _DEBUG
     QAbstractButton *buttonHide = m_normalsRadioBox->button(0);
-    buttonHide->setChecked(m_material->getOptionsMode() == ::fwData::Material::MODE_STANDARD);
+    buttonHide->setChecked(m_material->getOptionsMode() == ::fwData::Material::STANDARD);
     QAbstractButton *buttonNormals = m_normalsRadioBox->button(1);
-    buttonNormals->setChecked(m_material->getOptionsMode() == ::fwData::Material::MODE_NORMALS);
+    buttonNormals->setChecked(m_material->getOptionsMode() == ::fwData::Material::NORMALS);
 #endif
 }
 
@@ -360,26 +378,22 @@ void RepresentationEditor::refreshNormals()
 void RepresentationEditor::onShowNormals(int state )
 {
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
-    ::fwComEd::MeshMsg::sptr meshMsg = ::fwComEd::MeshMsg::New();
-    switch (state)
+
+    switch(state)
     {
         case 0:
-            m_material->setOptionsMode( ::fwData::Material::MODE_STANDARD );
-            meshMsg->addEvent("HIDE_NORMALS");
+            m_material->setOptionsMode( ::fwData::Material::STANDARD );
             break;
         case 1:
-            m_material->setOptionsMode( ::fwData::Material::MODE_NORMALS );
-            meshMsg->addEvent("SHOW_CELL_NORMALS");
+            m_material->setOptionsMode( ::fwData::Material::NORMALS );
             break;
         case 2:
-            m_material->setOptionsMode( ::fwData::Material::MODE_NORMALS );
-            meshMsg->addEvent("SHOW_POINT_NORMALS");
+            m_material->setOptionsMode( ::fwData::Material::CELLS_NORMALS );
             break;
     }
-    ::fwComEd::MaterialMsg::sptr msg = ::fwComEd::MaterialMsg::New();
-    msg->addEvent( ::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), reconstruction->getMesh(), msg);
-    ::fwServices::IEditionService::notify(this->getSptr(), reconstruction->getMesh(), meshMsg);
+
+    this->notifyMaterial();
+    m_sigNormalsModeModified->asyncEmit(static_cast<std::uint8_t>(state), reconstruction->getID());
 }
 
 //------------------------------------------------------------------------------
@@ -388,20 +402,13 @@ void RepresentationEditor::notifyMaterial()
 {
     ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
 
-    ::fwComEd::MaterialMsg::sptr msg = ::fwComEd::MaterialMsg::New();
-    msg->addEvent( ::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), reconstruction->getMaterial(), msg);
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = reconstruction->getMaterial()->signal< ::fwData::Object::ModifiedSignalType >(
+        ::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
 }
 
 //------------------------------------------------------------------------------
 
-void RepresentationEditor::notifyMesh()
-{
-    ::fwData::Reconstruction::sptr reconstruction = this->getObject< ::fwData::Reconstruction>();
-
-    ::fwComEd::MaterialMsg::sptr msg = ::fwComEd::MaterialMsg::New();
-    msg->addEvent( ::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), reconstruction->getMesh(), msg);
-}
 }
 
diff --git a/Bundles/LeafUI/uiTF/CMakeLists.txt b/Bundles/LeafUI/uiTF/CMakeLists.txt
index 8f78fdf..55bfd08 100644
--- a/Bundles/LeafUI/uiTF/CMakeLists.txt
+++ b/Bundles/LeafUI/uiTF/CMakeLists.txt
@@ -1,25 +1,18 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwRuntime
 
-    gui
-)
-
-
-
-find_package(Boost COMPONENTS filesystem REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
 fwLink(
-    ${Boost_LIBRARIES}
-    ${QT_LIBRARIES}
-    )
+    ${Qt5Core_LIBRARIES} 
+    ${Qt5Gui_LIBRARIES} 
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiTF/Properties.cmake b/Bundles/LeafUI/uiTF/Properties.cmake
index 7229012..a39d05e 100644
--- a/Bundles/LeafUI/uiTF/Properties.cmake
+++ b/Bundles/LeafUI/uiTF/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME uiTF )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwGuiQt fwRuntime fwServices gui io )
+set( DEPENDENCIES fwTools fwCore fwData fwGui fwGuiQt fwRuntime fwServices gui io )
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiTF/bin/build.options b/Bundles/LeafUI/uiTF/bin/build.options
deleted file mode 100644
index a211fe3..0000000
--- a/Bundles/LeafUI/uiTF/bin/build.options
+++ /dev/null
@@ -1,6 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['qtCore', 'boostFilesystem' ]
-LIB = ['fwData_0-1', 'fwGui_0-1','fwGuiQt_0-1', 'fwComEd_0-1']
-BUNDLES = ['gui_0-1', 'io_0-1']
-REQUIREMENTS = ['ioAtoms_0-1']
diff --git a/Bundles/LeafUI/uiTF/include/uiTF/Plugin.hpp b/Bundles/LeafUI/uiTF/include/uiTF/Plugin.hpp
index 3462dd4..03ab541 100644
--- a/Bundles/LeafUI/uiTF/include/uiTF/Plugin.hpp
+++ b/Bundles/LeafUI/uiTF/include/uiTF/Plugin.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UITF_PLUGIN_HPP_
-#define _UITF_PLUGIN_HPP_
+#ifndef __UITF_PLUGIN_HPP__
+#define __UITF_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
-#include "uiTF/export.hpp"
+#include "uiTF/config.hpp"
 
 namespace uiTF
 {
 /**
- * 
+ *
  * @date    2009-2010.
  */
 class UITF_CLASS_API Plugin : public ::fwRuntime::Plugin
@@ -25,7 +25,7 @@ public:
     /**
      * @brief   destructor
      */
- UITF_API ~Plugin() throw();
+    UITF_API ~Plugin() throw();
 
     // Overrides
     UITF_API void start() throw(::fwRuntime::RuntimeException);
@@ -37,4 +37,4 @@ public:
 
 } // namespace uiTF
 
-#endif //_P_
+#endif //__UITF_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp b/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp
index 1de94d7..ae56b52 100644
--- a/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp
+++ b/Bundles/LeafUI/uiTF/include/uiTF/TransferFunctionEditor.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UITF_TRANSFERFUNCTIONEDITOR_HPP_
-#define _UITF_TRANSFERFUNCTIONEDITOR_HPP_
+#ifndef __UITF_TRANSFERFUNCTIONEDITOR_HPP__
+#define __UITF_TRANSFERFUNCTIONEDITOR_HPP__
 
-#include <QObject>
+#include "uiTF/config.hpp"
 
 #include <fwData/Composite.hpp>
 #include <fwData/TransferFunction.hpp>
 
 #include <gui/editor/IEditor.hpp>
 
-#include "export.hpp"
+#include <QObject>
 
 class QComboBox;
 class QPushButton;
@@ -25,17 +25,15 @@ namespace uiTF
 
 /**
  * @brief   TransferFunctionEditor service.
- * @class   TransferFunctionEditor
- * 
- * @date    2011.
  */
-class UITF_CLASS_API TransferFunctionEditor : public QObject, public ::gui::editor::IEditor
+class UITF_CLASS_API TransferFunctionEditor : public QObject,
+                                              public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (TransferFunctionEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (TransferFunctionEditor)(::gui::editor::IEditor) );
 
     /// Basic constructor, do nothing.
     UITF_API TransferFunctionEditor();
@@ -43,21 +41,36 @@ public:
     /// Basic destructor, do nothing.
     UITF_API virtual ~TransferFunctionEditor() throw ();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     */
+    UITF_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     /**
-    * @brief Configuring the transfer function editor.
-    *
-    * Example of configuration
-    * @verbatim
-    <service uid="GENERIC_UID_tfm" type="::gui::editor::IEditor" impl="::uiTF::TransferFunctionEditor" autoConnect="yes" >
-        <config selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
-    </service>
-    @endverbatim
-    * - \<image id="myImage" /\> : Set the link between the service and the associated image.
-    *
-    * \b id : mandatory (no default value) : set the id of the associated image.
-    */
+     * @brief Configuring the transfer function editor.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <service uid="GENERIC_UID_tfm" type="::gui::editor::IEditor" impl="::uiTF::TransferFunctionEditor" autoConnect="yes" >
+        <config selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" useDefaultPath="yes">
+            <path>....</path>
+            <path>....</path>
+            <path>....</path>
+        </config>
+       </service>
+       @endcode
+     * - \b selectedTFKey: key of the ::fwData::String containing the key of the selected tf.
+     * - \b tfSelectionFwID: fwID of the composite containing the selected tf.
+     * - \b useDefaultPath (optional)(default = yes): if true, load tf files from uiTF bundle.
+     * - \b path (optional): path to a directory containing tf files.
+     */
     UITF_API virtual void configuring() throw( ::fwTools::Failed );
 
     /// Start the TransferFunctionEditor, create Container, place in Buttons, ComboBox, Layout, and connect them.
@@ -66,19 +79,22 @@ protected:
     /// Update the TransferFunctionEditor, do nothing.
     UITF_API virtual void updating() throw( ::fwTools::Failed );
 
-    /// Update the TransferFunctionEditor when message, do nothing.
-    UITF_API virtual void receiving(::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed );
-
     /// Stop the TransferFunctionEditor, disconnect Buttons and Combo Box, delete them and clean the container.
     UITF_API virtual void stopping() throw( ::fwTools::Failed );
 
-    /// Initialize the transfer functions, get fields m_transferFunctionCompositeId and m_transferFunctionId associated to the related image, add their names to the ComboBox. If the image does not contain any TF, the create a few from the ressources of the Bundle.
+    /**
+     * @brief Initialize the transfer functions.
+     *
+     * Add their names to the ComboBox. If the composite does not contain any TF (or only the default grey level TF,
+     * the service creates a few from the ressources of the Bundle.
+     */
     UITF_API void initTransferFunctions();
 
     /// Check if the image contain the specified TF.
     UITF_API bool hasTransferFunctionName(const std::string & _sName);
 
-    /// Create a string that represents a TF name not already present in the image. For example, if blabla is already used, it will return blabla_1.
+    /// Create a string that represents a TF name not already present in the composite. For example, if blabla is
+    /// already used, it will return blabla_1.
     UITF_API std::string createTransferFunctionName( const std::string & _sBasename );
 
     /// Update the image with the selected TF in the ComboBox.
@@ -93,6 +109,9 @@ protected:
     /// Get the current transfer function
     UITF_API ::fwData::TransferFunction::sptr getSelectedTransferFunction() const;
 
+    /// TEMP_V2: Return the transfer functions set composite
+    UITF_API ::fwData::Composite::sptr getTFPool();
+
 private Q_SLOTS:
 
     void deleteTF();
@@ -105,6 +124,8 @@ private Q_SLOTS:
 
 private:
 
+    typedef std::vector< ::boost::filesystem::path > PathContainerType;
+
     QComboBox *m_pTransferFunctionPreset;
     QPushButton *m_deleteButton;
     QPushButton *m_newButton;
@@ -119,7 +140,10 @@ private:
 
     /// Identifier of the key containing the current selection of TransferFunction in TFSelection.
     std::string m_selectedTFKey;
+
+    /// Paths of the tf files to load.
+    PathContainerType m_paths;
 };
 
 }
-#endif
+#endif // __UITF_TRANSFERFUNCTIONEDITOR_HPP__
diff --git a/Bundles/LeafUI/uiTF/include/uiTF/export.hpp b/Bundles/LeafUI/uiTF/include/uiTF/export.hpp
deleted file mode 100644
index 0d0c66f..0000000
--- a/Bundles/LeafUI/uiTF/include/uiTF/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UITF_CONFIG_HPP_
-#define _UITF_CONFIG_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef UITF_EXPORTS
-    #define UITF_API __declspec(dllexport)
-    #else
-    #define UITF_API __declspec(dllimport)
-    #endif
-
-    #define UITF_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UITF_EXPORTS
-    #define UITF_API __attribute__ ((visibility("default")))
-    #define UITF_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UITF_API __attribute__ ((visibility("hidden")))
-    #define UITF_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UITF_API
-    #define UITF_CLASS_API
-
-#endif
-
-#endif // #ifndef _MYCOMPONENT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiTF/include/uiTF/namespace.hpp b/Bundles/LeafUI/uiTF/include/uiTF/namespace.hpp
new file mode 100644
index 0000000..97bea10
--- /dev/null
+++ b/Bundles/LeafUI/uiTF/include/uiTF/namespace.hpp
@@ -0,0 +1,18 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __UITF_NAMESPACE_HPP__
+#define __UITF_NAMESPACE_HPP__
+
+/**
+ * @brief Transfert functions editor
+ **/
+namespace uiTF
+{
+} //namespace uiTF
+
+
+#endif //__UITF_NAMESPACE_HPP__
diff --git a/Bundles/LeafUI/uiTF/rc/plugin.xml b/Bundles/LeafUI/uiTF/rc/plugin.xml
index 3f3709b..5a42227 100644
--- a/Bundles/LeafUI/uiTF/rc/plugin.xml
+++ b/Bundles/LeafUI/uiTF/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiTF" class="::uiTF::Plugin">
+<plugin id="uiTF" class="::uiTF::Plugin" version="@DASH_VERSION@" >
     <library name="uiTF" />
 
     <requirement id="dataReg" />
diff --git a/Bundles/LeafUI/uiTF/src/uiTF/Plugin.cpp b/Bundles/LeafUI/uiTF/src/uiTF/Plugin.cpp
index 22447a6..ba1a729 100644
--- a/Bundles/LeafUI/uiTF/src/uiTF/Plugin.cpp
+++ b/Bundles/LeafUI/uiTF/src/uiTF/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,17 +21,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafUI/uiTF/src/uiTF/TransferFunctionEditor.cpp b/Bundles/LeafUI/uiTF/src/uiTF/TransferFunctionEditor.cpp
index 0f3f362..ebe7491 100644
--- a/Bundles/LeafUI/uiTF/src/uiTF/TransferFunctionEditor.cpp
+++ b/Bundles/LeafUI/uiTF/src/uiTF/TransferFunctionEditor.cpp
@@ -1,42 +1,41 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/convenience.hpp>
-#include <boost/filesystem/operations.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <QWidget>
-#include <QBoxLayout>
-#include <QComboBox>
-#include <QString>
-#include <QPushButton>
-#include <QIcon>
+#include "uiTF/TransferFunctionEditor.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwData/Composite.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwDataTools/helper/Composite.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/helper/Composite.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/dialog/InputDialog.hpp>
 #include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 
-#include <io/IWriter.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
 #include <io/IReader.hpp>
+#include <io/IWriter.hpp>
 
-#include "uiTF/TransferFunctionEditor.hpp"
+#include <QBoxLayout>
+#include <QComboBox>
+#include <QIcon>
+#include <QPushButton>
+#include <QString>
+#include <QWidget>
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/operations.hpp>
 
 namespace uiTF
 {
@@ -47,17 +46,16 @@ fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiTF::TransferFunctionEditor,
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
 
-TransferFunctionEditor::TransferFunctionEditor() : m_selectedTFKey("")
+TransferFunctionEditor::TransferFunctionEditor() :
+    m_selectedTFKey("")
 {
-//    this->addNewHandledEvent(::fwComEd::CompositeMsg::CHANGED_KEYS);
-//    this->addNewHandledEvent(::fwComEd::CompositeMsg::ADDED_KEYS);
-//    this->addNewHandledEvent(::fwComEd::CompositeMsg::REMOVED_KEYS);
 }
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
 
 TransferFunctionEditor::~TransferFunctionEditor() throw ()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
 
@@ -66,18 +64,47 @@ void TransferFunctionEditor::configuring() throw( ::fwTools::Failed )
     SLM_TRACE_FUNC();
     this->initialize();
     ::fwRuntime::ConfigurationElement::sptr configuration = m_configuration->findConfigurationElement("config");
-    SLM_ASSERT("Sorry, analyzed configuration is not conformed.", configuration);
 
-    SLM_ASSERT("Sorry, analyzed configuration is not conformed.", configuration->getName() == "config");
+    SLM_ASSERT("Missing 'config' element.", configuration);
+
     if ( configuration->hasAttribute("selectedTFKey") )
     {
         m_selectedTFKey = configuration->getAttributeValue("selectedTFKey");
         SLM_FATAL_IF("'selectedTFKey' must not be empty", m_selectedTFKey.empty());
     }
-    if ( configuration->hasAttribute("tfSelectionFwID") )
+    if(!this->isVersion2())
+    {
+        if ( configuration->hasAttribute("tfSelectionFwID") )
+        {
+            m_tfSelectionFwID = configuration->getAttributeValue("tfSelectionFwID");
+            SLM_FATAL_IF("'tfSelectionFwID' must not be empty", m_tfSelectionFwID.empty());
+        }
+    }
+    else
+    {
+        m_tfSelectionFwID = this->getInOut< ::fwData::Composite>("TFSelections")->getID();
+    }
+
+    std::vector< ::fwRuntime::ConfigurationElement::sptr > pathsCfg = configuration->find("path");
+    for(::fwRuntime::ConfigurationElement::sptr cfg :  pathsCfg)
+    {
+        ::boost::filesystem::path path(cfg->getValue());
+        m_paths.push_back(path);
+    }
+
+    bool useDefaultPath = true;
+    if ( configuration->hasAttribute("useDefaultPath") )
+    {
+        std::string value = configuration->getAttributeValue("useDefaultPath");
+        SLM_FATAL_IF("'useDefaultPath' value must be 'yes' or 'no'", value != "yes" && value != "no");
+
+        useDefaultPath = (value == "yes");
+    }
+    if (useDefaultPath)
     {
-        m_tfSelectionFwID = configuration->getAttributeValue("tfSelectionFwID");
-        SLM_FATAL_IF("'tfSelectionFwID' must not be empty", m_tfSelectionFwID.empty());
+        ::boost::filesystem::path pathRoot (std::string(BUNDLE_PREFIX) + "/uiTF_" + std::string(
+                                                UITF_VER) + "/tf");
+        m_paths.push_back(pathRoot);
     }
 }
 
@@ -89,39 +116,46 @@ void TransferFunctionEditor::starting() throw( ::fwTools::Failed )
     this->create();
 
     // Get the Qt container
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast(this->getContainer());
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer());
     m_container = qtContainer->getQtContainer();
-    SLM_ASSERT("Sorry, the qt container is not valid", m_container);
+    SLM_ASSERT("The qt container is not valid", m_container);
 
     // Buttons creation
     m_pTransferFunctionPreset = new QComboBox(m_container);
 
-    ::boost::filesystem::path deletePath (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/delete.png");
+    ::boost::filesystem::path deletePath (std::string(BUNDLE_PREFIX) + "/uiTF_" + std::string(
+                                              UITF_VER) + "/delete.png");
     m_deleteButton = new QPushButton(QIcon(deletePath.string().c_str()), "", m_container);
     m_deleteButton->setToolTip(QString("Delete"));
 
-    ::boost::filesystem::path newPath (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/new.png");
+    ::boost::filesystem::path newPath (std::string(BUNDLE_PREFIX) +"/uiTF_" + std::string(UITF_VER) +
+                                       "/new.png");
     m_newButton = new QPushButton(QIcon(newPath.string().c_str()), "", m_container);
     m_newButton->setToolTip(QString("New"));
 
-    ::boost::filesystem::path reinitializePath (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/reinitialize.png");
+    ::boost::filesystem::path reinitializePath (std::string(BUNDLE_PREFIX) +"/uiTF_" + std::string(
+                                                    UITF_VER) + "/reinitialize.png");
     m_reinitializeButton = new QPushButton(QIcon(reinitializePath.string().c_str()), "", m_container);
     m_reinitializeButton->setToolTip(QString("Reinitialize"));
 
-    ::boost::filesystem::path renamePath (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/rename.png");
+    ::boost::filesystem::path renamePath (std::string(BUNDLE_PREFIX) + "/uiTF_" + std::string(
+                                              UITF_VER) + "/rename.png");
     m_renameButton = new QPushButton(QIcon(renamePath.string().c_str()), "", m_container);
     m_renameButton->setToolTip(QString("Rename"));
 
-    ::boost::filesystem::path importPath (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/import.png");
+    ::boost::filesystem::path importPath (std::string(BUNDLE_PREFIX) + "/uiTF_" + std::string(
+                                              UITF_VER) + "/import.png");
     m_importButton = new QPushButton(QIcon(importPath.string().c_str()), "", m_container);
     m_importButton->setToolTip(QString("Import"));
 
-    ::boost::filesystem::path exportPath (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/export.png");
+    ::boost::filesystem::path exportPath (std::string(BUNDLE_PREFIX) + "/uiTF_" + std::string(
+                                              UITF_VER) + "/export.png");
     m_exportButton = new QPushButton(QIcon(exportPath.string().c_str()), "", m_container);
     m_exportButton->setToolTip(QString("Export"));
 
     // Layout management
-    QBoxLayout* layout =  new QBoxLayout(QBoxLayout::LeftToRight, m_container);
+    QBoxLayout* layout = new QBoxLayout(QBoxLayout::LeftToRight, m_container);
 
     layout->addWidget(m_pTransferFunctionPreset);
     layout->addWidget(m_deleteButton);
@@ -134,13 +168,13 @@ void TransferFunctionEditor::starting() throw( ::fwTools::Failed )
     m_container->setLayout(layout);
 
     // Qt signals management ( connection to buttons )
-    QObject::connect(m_pTransferFunctionPreset, SIGNAL(   activated(int)), this, SLOT(presetChoice(int)));
-    QObject::connect(m_deleteButton, SIGNAL(   clicked()), this, SLOT(deleteTF()));
-    QObject::connect(m_newButton, SIGNAL(   clicked()), this, SLOT(newTF()));
-    QObject::connect(m_reinitializeButton, SIGNAL(   clicked()), this, SLOT(reinitializeTFPool()));
-    QObject::connect(m_renameButton, SIGNAL(   clicked()), this, SLOT(renameTF()));
-    QObject::connect(m_importButton, SIGNAL(   clicked()), this, SLOT(importTF()));
-    QObject::connect(m_exportButton, SIGNAL(   clicked()), this, SLOT(exportTF()));
+    QObject::connect(m_pTransferFunctionPreset, SIGNAL(activated(int)), this, SLOT(presetChoice(int)));
+    QObject::connect(m_deleteButton, SIGNAL(clicked()), this, SLOT(deleteTF()));
+    QObject::connect(m_newButton, SIGNAL(clicked()), this, SLOT(newTF()));
+    QObject::connect(m_reinitializeButton, SIGNAL(clicked()), this, SLOT(reinitializeTFPool()));
+    QObject::connect(m_renameButton, SIGNAL(clicked()), this, SLOT(renameTF()));
+    QObject::connect(m_importButton, SIGNAL(clicked()), this, SLOT(importTF()));
+    QObject::connect(m_exportButton, SIGNAL(clicked()), this, SLOT(exportTF()));
 
     // preset initialization
     this->initTransferFunctions();
@@ -150,21 +184,7 @@ void TransferFunctionEditor::starting() throw( ::fwTools::Failed )
 
 void TransferFunctionEditor::updating() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------------------------------------------------------------------------------------
-
-void TransferFunctionEditor::receiving(::fwServices::ObjectMsg::csptr msg) throw( ::fwTools::Failed )
-{
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(msg);
-    if(compositeMsg &&
-            ( compositeMsg->hasEvent(::fwComEd::CompositeMsg::CHANGED_KEYS) ||
-              compositeMsg->hasEvent(::fwComEd::CompositeMsg::ADDED_KEYS)   ||
-              compositeMsg->hasEvent(::fwComEd::CompositeMsg::REMOVED_KEYS) ) )
-    {
-        this->updateTransferFunctionPreset();
-    }
+    this->updateTransferFunctionPreset();
 }
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -183,7 +203,8 @@ void TransferFunctionEditor::stopping() throw( ::fwTools::Failed )
     QObject::disconnect(m_exportButton, SIGNAL(   clicked()), this, SLOT(exportTF()));
 
     // deletes contained widgets
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast(this->getContainer());
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer());
     qtContainer->clean();
 
     this->destroy();
@@ -198,7 +219,7 @@ void TransferFunctionEditor::presetChoice(int index)
     this->updateTransferFunction();
 
     std::string tfName = m_pTransferFunctionPreset->currentText().toStdString();
-    bool isEnabled = (tfName != ::fwData::TransferFunction::s_DEFAULT_TF_NAME);
+    bool isEnabled     = (tfName != ::fwData::TransferFunction::s_DEFAULT_TF_NAME);
 
     m_renameButton->setEnabled(isEnabled);
     m_deleteButton->setEnabled(isEnabled);
@@ -218,19 +239,17 @@ void TransferFunctionEditor::deleteTF()
 
     if (answerCopy != ::fwGui::dialog::IMessageDialog::CANCEL)
     {
-        ::fwData::Composite::sptr poolTF = this->getObject< ::fwData::Composite > ();
+        ::fwData::Composite::sptr poolTF = this->getTFPool();
 
         if( poolTF->size() > 1 )
         {
-            int indexSelectedTF = m_pTransferFunctionPreset->currentIndex();
+            int indexSelectedTF       = m_pTransferFunctionPreset->currentIndex();
             std::string selectedTFKey = m_pTransferFunctionPreset->currentText().toStdString();
 
-            ::fwData::Composite::sptr poolTF = this->getObject< ::fwData::Composite >();
-
-            ::fwComEd::helper::Composite compositeHelper(poolTF);
+            ::fwDataTools::helper::Composite compositeHelper(poolTF);
             OSLM_ASSERT("TF "<< m_selectedTFKey <<" missing in pool", this->hasTransferFunctionName(selectedTFKey));
             compositeHelper.remove(selectedTFKey);
-            compositeHelper.notify(this->getSptr());
+            compositeHelper.notify();
 
             m_pTransferFunctionPreset->removeItem(indexSelectedTF);
             std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
@@ -242,9 +261,9 @@ void TransferFunctionEditor::deleteTF()
         else
         {
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Warning",
-                    "You can not remove this transfer function because the program requires at least one.",
-                    ::fwGui::dialog::IMessageDialog::WARNING );
+                "Warning",
+                "You can not remove this transfer function because the program requires at least one.",
+                ::fwGui::dialog::IMessageDialog::WARNING );
         }
     }
 }
@@ -269,27 +288,27 @@ void TransferFunctionEditor::newTF()
     {
         if(!this->hasTransferFunctionName(newName))
         {
-            ::fwData::TransferFunction::sptr pNewTransferFunction ;
+            ::fwData::TransferFunction::sptr pNewTransferFunction;
             ::fwData::TransferFunction::sptr selectedTF = this->getSelectedTransferFunction();
 
             pNewTransferFunction = ::fwData::Object::copy(selectedTF);
             pNewTransferFunction->setName(newName);
-            ::fwData::Composite::sptr poolTF = this->getObject< ::fwData::Composite >();
-            ::fwComEd::helper::Composite compositeHelper(poolTF);
+            ::fwData::Composite::sptr poolTF = this->getTFPool();
+            ::fwDataTools::helper::Composite compositeHelper(poolTF);
             compositeHelper.add(newName, pNewTransferFunction);
 
             m_pTransferFunctionPreset->addItem(QString(newName.c_str()));
             m_pTransferFunctionPreset->setCurrentIndex(m_pTransferFunctionPreset->count()-1);
             this->updateTransferFunction();
 
-            compositeHelper.notify(this->getSptr());
+            compositeHelper.notify();
         }
         else
         {
             ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Warning",
-                    "This transfer function name already exists so you can not overwrite it.",
-                    ::fwGui::dialog::IMessageDialog::WARNING);
+                "Warning",
+                "This transfer function name already exists so you can not overwrite it.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
         }
     }
 }
@@ -308,11 +327,10 @@ void TransferFunctionEditor::reinitializeTFPool()
 
     if (answerCopy != ::fwGui::dialog::IMessageDialog::CANCEL)
     {
-        ::fwData::Composite::sptr tfPool = this->getObject< ::fwData::Composite > ();
-
-        ::fwComEd::helper::Composite compositeHelper(tfPool);
+        ::fwData::Composite::sptr poolTF = this->getTFPool();
+        ::fwDataTools::helper::Composite compositeHelper(poolTF);
         compositeHelper.clear();
-        compositeHelper.notify(this->getSptr());
+        compositeHelper.notify();
 
         this->initTransferFunctions();
 
@@ -344,21 +362,20 @@ void TransferFunctionEditor::renameTF()
     inputDialog.setInput( newName );
     newName = inputDialog.getInput();
 
-    if (    ! newName.empty() &&
+    if (    !newName.empty() &&
             newName != str)
     {
-        if( ! this->hasTransferFunctionName(newName) )
+        if( !this->hasTransferFunctionName(newName) )
         {
-
-            ::fwData::Composite::sptr tfPool = this->getObject< ::fwData::Composite >();
+            ::fwData::Composite::sptr poolTF = this->getTFPool();
             ::fwData::TransferFunction::sptr pTF;
-            pTF = ::fwData::TransferFunction::dynamicCast((*tfPool)[str]);
+            pTF = ::fwData::TransferFunction::dynamicCast((*poolTF)[str]);
             pTF->setName(newName);
 
-            ::fwComEd::helper::Composite compositeHelper(tfPool);
+            ::fwDataTools::helper::Composite compositeHelper(poolTF);
             compositeHelper.remove(str);
             compositeHelper.add(newName, pTF);
-            compositeHelper.notify(this->getSptr());
+            compositeHelper.notify();
 
             m_pTransferFunctionPreset->setItemText(m_pTransferFunctionPreset->currentIndex(), QString(newName.c_str()));
             m_pTransferFunctionPreset->setCurrentIndex(m_pTransferFunctionPreset->findText(QString(newName.c_str())));
@@ -390,12 +407,12 @@ void TransferFunctionEditor::renameTF()
 
 void TransferFunctionEditor::importTF()
 {
-    ::fwData::Composite::sptr tfPool = this->getObject< ::fwData::Composite >();
-    ::fwComEd::helper::Composite compositeHelper(tfPool);
+    ::fwData::Composite::sptr poolTF = this->getTFPool();
+    ::fwDataTools::helper::Composite compositeHelper(poolTF);
 
     ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::New();
-    ::fwServices::IService::sptr srv =
-            ::fwServices::registry::ServiceFactory::getDefault()->create("::ioAtoms::SReader");
+    ::fwServices::IService::sptr srv    =
+        ::fwServices::registry::ServiceFactory::getDefault()->create("::ioAtoms::SReader");
 
     ::fwServices::OSR::registerService(tf, srv);
 
@@ -415,9 +432,9 @@ void TransferFunctionEditor::importTF()
 
         compositeHelper.add(tf->getName(), tf);
         m_pTransferFunctionPreset->addItem(QString(tf->getName().c_str()));
-        this->presetChoice((*tfPool).size()-1);
+        this->presetChoice(static_cast<int>((*poolTF).size()-1));
 
-        compositeHelper.notify(this->getSptr());
+        compositeHelper.notify();
     }
 }
 
@@ -438,8 +455,8 @@ void TransferFunctionEditor::exportTF()
         return;
     }
     ::fwData::TransferFunction::sptr tf = this->getSelectedTransferFunction();
-    ::fwServices::IService::sptr srv =
-            ::fwServices::registry::ServiceFactory::getDefault()->create("::ioAtoms::SWriter");
+    ::fwServices::IService::sptr srv    =
+        ::fwServices::registry::ServiceFactory::getDefault()->create("::ioAtoms::SWriter");
 
     ::fwServices::OSR::registerService(tf, srv);
 
@@ -456,9 +473,9 @@ void TransferFunctionEditor::exportTF()
 void TransferFunctionEditor::initTransferFunctions()
 {
     // Get transfer function composite (pool TF)
-    ::fwData::Composite::sptr poolTF = this->getObject< ::fwData::Composite >( );
+    ::fwData::Composite::sptr poolTF = this->getTFPool();
 
-    ::fwComEd::helper::Composite compositeHelper(poolTF);
+    ::fwDataTools::helper::Composite compositeHelper(poolTF);
 
     const std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
     if(!this->hasTransferFunctionName(defaultTFName))
@@ -474,29 +491,32 @@ void TransferFunctionEditor::initTransferFunctions()
     {
         // Parse all TF contained in uiTF Bundle's resources
         std::vector< ::boost::filesystem::path > paths;
-        ::boost::filesystem::path pathRoot (std::string(SHAREPATH) + "Bundles/uiTF_" + std::string(UITF_VER) + "/tf");
-        for(::boost::filesystem::directory_iterator it(pathRoot);
-            it != ::boost::filesystem::directory_iterator();
-            ++it )
+        for(::boost::filesystem::path dirPath :  m_paths)
         {
-            if(! ::boost::filesystem::is_directory(*it) &&
-                 ::boost::filesystem::extension(*it) == ".json")
+            SLM_ASSERT("Invalid directory path '"+dirPath.string()+"'", ::boost::filesystem::exists(dirPath));
+            for(::boost::filesystem::directory_iterator it(dirPath);
+                it != ::boost::filesystem::directory_iterator();
+                ++it )
             {
-                paths.push_back(*it);
+                if(!::boost::filesystem::is_directory(*it) &&
+                   ::boost::filesystem::extension(*it) == ".json")
+                {
+                    paths.push_back(*it);
+                }
             }
         }
 
         ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::New();
-        ::fwServices::IService::sptr srv =
-                ::fwServices::registry::ServiceFactory::getDefault()->create("::ioAtoms::SReader");
+        ::fwServices::IService::sptr srv    =
+            ::fwServices::registry::ServiceFactory::getDefault()->create("::ioAtoms::SReader");
         ::fwServices::OSR::registerService(tf, srv);
         ::io::IReader::sptr reader = ::io::IReader::dynamicCast(srv);
 
-        ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
+        ::fwRuntime::EConfigurationElement::sptr srvCfg  = ::fwRuntime::EConfigurationElement::New("service");
         ::fwRuntime::EConfigurationElement::sptr fileCfg = ::fwRuntime::EConfigurationElement::New("file");
         srvCfg->addConfigurationElement(fileCfg);
 
-        BOOST_FOREACH( ::boost::filesystem::path file, paths )
+        for( ::boost::filesystem::path file :  paths )
         {
             fileCfg->setValue(file.string());
             reader->setConfiguration(srvCfg);
@@ -519,7 +539,7 @@ void TransferFunctionEditor::initTransferFunctions()
         }
         ::fwServices::OSR::unregisterService(srv);
     }
-    compositeHelper.notify(this->getSptr());
+    compositeHelper.notify();
 
     this->updateTransferFunctionPreset();
 }
@@ -529,22 +549,22 @@ void TransferFunctionEditor::initTransferFunctions()
 
 void TransferFunctionEditor::updateTransferFunctionPreset()
 {
-    ::fwData::Composite::sptr poolTF = this->getObject< ::fwData::Composite >( );
+    ::fwData::Composite::sptr poolTF = this->getTFPool();
     const std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
     // Manage TF preset
     m_pTransferFunctionPreset->clear();
-    BOOST_FOREACH(::fwData::Composite::value_type elt, *poolTF)
+    for(::fwData::Composite::value_type elt :  *poolTF)
     {
         m_pTransferFunctionPreset->addItem( elt.first.c_str() );
     }
 
     int index = m_pTransferFunctionPreset->findText( QString::fromStdString(defaultTFName) );
-    index = std::max(index, 0);
+    index                                       = std::max(index, 0);
     ::fwData::TransferFunction::sptr selectedTF = this->getSelectedTransferFunction();
     if(selectedTF)
     {
         std::string tfName = selectedTF->getName();
-        int tmpIdx = m_pTransferFunctionPreset->findText(QString::fromStdString(tfName));
+        int tmpIdx         = m_pTransferFunctionPreset->findText(QString::fromStdString(tfName));
         if(tmpIdx >= 0)
         {
             index = tmpIdx;
@@ -555,29 +575,29 @@ void TransferFunctionEditor::updateTransferFunctionPreset()
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
 
-bool TransferFunctionEditor::hasTransferFunctionName(const std::string & _sName)
+bool TransferFunctionEditor::hasTransferFunctionName(const std::string& _sName)
 {
-    ::fwData::Composite::sptr poolTf = this->getObject< ::fwData::Composite >();
-    return poolTf->find(_sName) != poolTf->end();
+    ::fwData::Composite::sptr poolTF = this->getTFPool();
+    return poolTF->find(_sName) != poolTF->end();
 }
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
 
-std::string TransferFunctionEditor::createTransferFunctionName(const std::string & _sBasename)
+std::string TransferFunctionEditor::createTransferFunctionName(const std::string& _sBasename)
 {
     bool bHasTransferFunctionName = true;
-    std::string newName = _sBasename;
-    int cpt = 1;
+    std::string newName           = _sBasename;
+    int cpt                       = 1;
     while (bHasTransferFunctionName)
     {
         std::stringstream tmpStr;
         tmpStr <<  _sBasename <<  "_" <<  cpt;
-        newName = tmpStr.str();
+        newName                  = tmpStr.str();
         bHasTransferFunctionName = this->hasTransferFunctionName(newName);
         cpt++;
     }
 
-    return  newName;
+    return newName;
 }
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
@@ -590,11 +610,11 @@ void TransferFunctionEditor::updateTransferFunction()
     ::fwData::Composite::sptr tfSelection = this->getTFSelection();
 
     OSLM_ASSERT("TF "<< newSelectedTFKey <<" missing in pool", this->hasTransferFunctionName(newSelectedTFKey));
-    ::fwData::Composite::sptr poolTF = this->getObject< ::fwData::Composite >();
+    ::fwData::Composite::sptr poolTF     = this->getTFPool();
     ::fwData::Object::sptr newSelectedTF = (*poolTF)[newSelectedTFKey];
     if(this->getSelectedTransferFunction() != newSelectedTF)
     {
-        ::fwComEd::helper::Composite compositeHelper(tfSelection);
+        ::fwDataTools::helper::Composite compositeHelper(tfSelection);
         if(tfSelection->getContainer().find(m_selectedTFKey) != tfSelection->getContainer().end())
         {
             compositeHelper.swap(m_selectedTFKey, newSelectedTF);
@@ -603,7 +623,7 @@ void TransferFunctionEditor::updateTransferFunction()
         {
             compositeHelper.add(m_selectedTFKey, newSelectedTF);
         }
-        compositeHelper.notify(this->getSptr());
+        compositeHelper.notify();
     }
 }
 
@@ -611,7 +631,9 @@ void TransferFunctionEditor::updateTransferFunction()
 
 ::fwData::Composite::sptr TransferFunctionEditor::getTFSelection() const
 {
-    ::fwData::Composite::sptr tfSelection = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject( m_tfSelectionFwID ) );
+    ::fwData::Composite::sptr tfSelection = this->isVersion2() ? this->getInOut< ::fwData::Composite>("TFSelections")
+                                            : ::fwData::Composite::dynamicCast(::fwTools::fwID::getObject(
+                                                                                   m_tfSelectionFwID ));
     return tfSelection;
 }
 
@@ -620,7 +642,29 @@ void TransferFunctionEditor::updateTransferFunction()
 ::fwData::TransferFunction::sptr TransferFunctionEditor::getSelectedTransferFunction() const
 {
     ::fwData::Composite::sptr tfSelection = this->getTFSelection();
+    SLM_ASSERT("Transfer function composite is null", tfSelection);
     return ::fwData::TransferFunction::dynamicCast((*tfSelection)[m_selectedTFKey]);
+
+}
+
+//------------------------------------------------------------------------------
+
+fwData::Composite::sptr TransferFunctionEditor::getTFPool()
+{
+    return this->isVersion2() ? this->getInOut< ::fwData::Composite>("transferFunctions")
+           : this->getObject< ::fwData::Composite > ();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType TransferFunctionEditor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
 }
 
 //-----------------------------------------------------------------------------------------------------------------------------------------------------------
diff --git a/Bundles/LeafUI/uiVisu/CMakeLists.txt b/Bundles/LeafUI/uiVisu/CMakeLists.txt
index 737f685..1c29206 100644
--- a/Bundles/LeafUI/uiVisu/CMakeLists.txt
+++ b/Bundles/LeafUI/uiVisu/CMakeLists.txt
@@ -1,14 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwRuntime
-    fwTools
-)
-
-
-find_package(Boost REQUIRED)
-
-fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    )
 
diff --git a/Bundles/LeafUI/uiVisu/COPYING b/Bundles/LeafUI/uiVisu/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiVisu/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiVisu/COPYING.LESSER b/Bundles/LeafUI/uiVisu/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiVisu/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiVisu/Properties.cmake b/Bundles/LeafUI/uiVisu/Properties.cmake
index 0444ab2..ccfb350 100644
--- a/Bundles/LeafUI/uiVisu/Properties.cmake
+++ b/Bundles/LeafUI/uiVisu/Properties.cmake
@@ -2,6 +2,14 @@
 set( NAME uiVisu )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwRuntime fwServices fwTools )
+set( DEPENDENCIES 
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwRuntime
+    fwServices
+    fwTools
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiVisu/bin/build.options b/Bundles/LeafUI/uiVisu/bin/build.options
deleted file mode 100644
index f1ad3c3..0000000
--- a/Bundles/LeafUI/uiVisu/bin/build.options
+++ /dev/null
@@ -1,17 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-           'fwData_0-1',
-           'fwDataIO_0-2',
-           'fwServices_0-1',
-           'fwComEd_0-1',
-           'fwRuntime_0-3',
-           'fwCore_0-1',
-           'fwTools_0-1',
-           'fwGui_0-1',
-           ]
-USE     = ['boost']
-BUNDLES = ['gui_0-1']
-
-
-
diff --git a/Bundles/LeafUI/uiVisu/include/uiVisu/Namespace.hpp b/Bundles/LeafUI/uiVisu/include/uiVisu/Namespace.hpp
index d5368cc..b8fbcdf 100644
--- a/Bundles/LeafUI/uiVisu/include/uiVisu/Namespace.hpp
+++ b/Bundles/LeafUI/uiVisu/include/uiVisu/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIVISU_NAMESPACE_HPP_
-#define UIVISU_NAMESPACE_HPP_
+#ifndef __UIVISU_NAMESPACE_HPP__
+#define __UIVISU_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiVisu contains action to modifies cross type and 3D camera orientation
  * @namespace   uiVisu
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace uiVisu
 {
 }
-#endif /* UIVISU_NAMESPACE_HPP_ */
+#endif /* __UIVISU_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiVisu/include/uiVisu/Plugin.hpp b/Bundles/LeafUI/uiVisu/include/uiVisu/Plugin.hpp
index 222b02d..3bd49d0 100644
--- a/Bundles/LeafUI/uiVisu/include/uiVisu/Plugin.hpp
+++ b/Bundles/LeafUI/uiVisu/include/uiVisu/Plugin.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISU_PLUGIN_HPP_
-#define _UIVISU_PLUGIN_HPP_
+#ifndef __UIVISU_PLUGIN_HPP__
+#define __UIVISU_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
 namespace uiVisu
 {
 /**
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -32,4 +32,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiVisu
 
-#endif //_UIVISU_PLUGIN_HPP_
+#endif //__UIVISU_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiVisu/include/uiVisu/action/CameraOrientationAction.hpp b/Bundles/LeafUI/uiVisu/include/uiVisu/action/CameraOrientationAction.hpp
deleted file mode 100644
index 8b91078..0000000
--- a/Bundles/LeafUI/uiVisu/include/uiVisu/action/CameraOrientationAction.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIVISU_CAMERA_ORIENTATION_ACTION_HPP_
-#define _UIVISU_CAMERA_ORIENTATION_ACTION_HPP_
-
-#include <fwTools/Failed.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "uiVisu/config.hpp"
-
-namespace uiVisu
-{
-namespace action
-{
-
-/**
- * @brief   This action allows change 3D camera orientation (axial, frontal, sagittal)
- * @class   CameraOrientationAction
- * 
- * @date    2010.
- */
-class UIVISU_CLASS_API CameraOrientationAction : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (CameraOrientationAction)(::fwGui::IActionSrv) ) ;
-
-    /// Constructor. Do nothing.
-    UIVISU_API CameraOrientationAction() throw() ;
-
-    /// Destructor. Do nothing.
-    UIVISU_API virtual ~CameraOrientationAction() throw() ;
-
-protected:
-
-    typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
-
-    /**
-     * @brief Configure action.
-     * @verbatim
-    <service type="::fwGui::IActionSrv" impl="::uiData::action::CameraOrientationAction" autoConnect="no">
-        <orientation>frontal</orientation>
-    </service>
-    @endverbatim
-     * - \b orientation : must be axial, frontal or sagittal
-     */
-    void configuring() throw(fwTools::Failed);
-
-    /// Starts action
-    virtual void starting() throw(::fwTools::Failed);
-
-    /// Stops action
-    virtual void stopping() throw(::fwTools::Failed);
-
-    /// Does nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /// Notifies message to change camera orientation
-    void updating() throw(::fwTools::Failed);
-
-    /// Does nothing
-    void swapping() throw(::fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-
-private:
-
-    std::string m_orientation;
-};
-
-} // action
-} // uiVisu
-
-#endif /*_UIVISU_CAMERA_ORIENTATION_ACTION_HPP_*/
-
-
diff --git a/Bundles/LeafUI/uiVisu/include/uiVisu/action/CrossTypeAction.hpp b/Bundles/LeafUI/uiVisu/include/uiVisu/action/CrossTypeAction.hpp
index 6452920..790bee6 100644
--- a/Bundles/LeafUI/uiVisu/include/uiVisu/action/CrossTypeAction.hpp
+++ b/Bundles/LeafUI/uiVisu/include/uiVisu/action/CrossTypeAction.hpp
@@ -1,19 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISU_CROSSTYPE_ACTION_HPP_
-#define _UIVISU_CROSSTYPE_ACTION_HPP_
+#ifndef __UIVISU_ACTION_CROSSTYPEACTION_HPP__
+#define __UIVISU_ACTION_CROSSTYPEACTION_HPP__
 
-#include <string>
-#include <map>
+#include "uiVisu/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-#include <fwTools/Failed.hpp>
 #include <fwGui/IActionSrv.hpp>
 
-#include "uiVisu/config.hpp"
+#include <fwTools/Failed.hpp>
+
+#include <map>
+#include <string>
 
 namespace uiVisu
 {
@@ -23,21 +27,19 @@ namespace action
 /**
  * @brief   This action allows change the cross type
  * @class   CrossTypeAction
- * 
- * @date    2010.
  */
 class UIVISU_CLASS_API CrossTypeAction : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (CrossTypeAction)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (CrossTypeAction)(::fwGui::IActionSrv) );
 
     /// Constructor. Do nothing.
-    UIVISU_API CrossTypeAction() throw() ;
+    UIVISU_API CrossTypeAction() throw();
 
     /// Destructor. Do nothing.
-    UIVISU_API virtual ~CrossTypeAction() throw() ;
+    UIVISU_API virtual ~CrossTypeAction() throw();
 
 protected:
 
@@ -49,9 +51,6 @@ protected:
     /// Stops action
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Does nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     /// Notifies message to change cross type
     void updating() throw(::fwTools::Failed);
 
@@ -60,26 +59,29 @@ protected:
 
     /**
      * @brief Configure action.
-     * @verbatim
-    <service type="::fwGui::IActionSrv" impl="::uiData::action::CrossTypeAction" autoConnect="no">
+     * @code{.xml}
+       <service type="::fwGui::IActionSrv" impl="::uiData::action::CrossTypeAction" autoConnect="no">
         <crossType>hide</crossType>
-    </service>
-    @endverbatim
+       </service>
+       @endcode
      * - \b crossType : must be full, half or hide
      */
     void configuring() throw(fwTools::Failed);
 
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 private:
 
     static std::map< std::string, float > m_scaleConversion;
     std::string m_crossType;
+
+    typedef ::fwCom::Signal< void (double) > CrossTypeModifiedSignalType;
+    CrossTypeModifiedSignalType::sptr m_sigCrossTypeModified; ///< Signal emitted when cross type is modified
 };
 
 } // action
 } // uiVisu
 
-#endif /*_UIVISU_CROSSTYPE_ACTION_HPP_*/
+#endif /*__UIVISU_ACTION_CROSSTYPEACTION_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiVisu/include/uiVisu/action/SSnapshot.hpp b/Bundles/LeafUI/uiVisu/include/uiVisu/action/SSnapshot.hpp
index 4377cf6..b9df6e2 100644
--- a/Bundles/LeafUI/uiVisu/include/uiVisu/action/SSnapshot.hpp
+++ b/Bundles/LeafUI/uiVisu/include/uiVisu/action/SSnapshot.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,13 +7,19 @@
 #ifndef __UIVISU_ACTION_SSNAPSHOT_HPP__
 #define __UIVISU_ACTION_SSNAPSHOT_HPP__
 
+#include "uiVisu/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwTools/Failed.hpp>
+
 #include <string>
 #include <map>
 
-#include <fwTools/Failed.hpp>
-#include <fwGui/IActionSrv.hpp>
 
-#include "uiVisu/config.hpp"
 
 namespace uiVisu
 {
@@ -23,23 +29,22 @@ namespace action
 /**
  * @brief   This action allows to snapshot a generic scene
  * @class   SSnapshot
- * 
- * @date    2012.
  *
- * Send a CompositeMsg with SNAP event containing the uid of the scene to the scene's composite.
+ * Send a 'snapped' signal containing the filename used to save the snapshot.
+ * @note You need to connect the 'snapped' signal to one visuVTKAdaptor::Snapshot to save the file.
  */
 class UIVISU_CLASS_API SSnapshot : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SSnapshot)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSnapshot)(::fwGui::IActionSrv) );
 
     /// Constructor. Do nothing.
-    UIVISU_API SSnapshot() throw() ;
+    UIVISU_API SSnapshot() throw();
 
     /// Destructor. Do nothing.
-    UIVISU_API virtual ~SSnapshot() throw() ;
+    UIVISU_API virtual ~SSnapshot() throw();
 
 protected:
 
@@ -51,9 +56,6 @@ protected:
     /// Stops action
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Does nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     /// Show a file dialog and notify the scene which must be printed.
     void updating() throw(::fwTools::Failed);
 
@@ -62,23 +64,31 @@ protected:
 
     /**
      * @brief Configure action.
-     * @verbatim
-    <service type="::fwGui::IActionSrv" impl="::uiData::action::SSnapshot" autoConnect="no">
-        <snap>
-            <scene uid="genericScene" />
-        </snap>
-    </service>
-    @endverbatim
-     * - \b genericScene is the uid of the ::fwRenderVTK::VtkRenderService representing the generic scene which will be printed.
+     * @code{.xml}
+       <service type="::fwGui::IActionSrv" impl="::uiData::action::SSnapshot" autoConnect="no" />
+       @endcode
      */
     void configuring() throw(fwTools::Failed);
 
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
+
 
 private:
-    std::string requestFileName();
 
-    std::vector< std::string > m_scenesUID;
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal to snap shot
+    typedef ::fwCom::Signal< void (std::string) > SnappedSignalType;
+    static const ::fwCom::Signals::SignalKeyType s_SNAPPED_SIG;
+
+    SnappedSignalType::sptr m_sigSnapped; ///< snap shot signal
+    /**
+     * @}
+     */
+
+    std::string requestFileName();
 
 };
 
diff --git a/Bundles/LeafUI/uiVisu/include/uiVisu/config.hpp b/Bundles/LeafUI/uiVisu/include/uiVisu/config.hpp
deleted file mode 100644
index 189e252..0000000
--- a/Bundles/LeafUI/uiVisu/include/uiVisu/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIVISU_CONFIG_HPP_
-#define _UIVISU_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIVISU_EXPORTS
-    #define UIVISU_API __declspec(dllexport)
-    #else
-    #define UIVISU_API __declspec(dllimport)
-    #endif
-
-    #define UIVISU_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIVISU_EXPORTS
-    #define UIVISU_API __attribute__ ((visibility("default")))
-    #define UIVISU_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIVISU_API __attribute__ ((visibility("hidden")))
-    #define UIVISU_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIVISU_API
-    #define UIVISU_CLASS_API
-
-#endif
-
-#endif //_UIVISU_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiVisu/rc/plugin.xml b/Bundles/LeafUI/uiVisu/rc/plugin.xml
index 7afb63b..0b7ddf1 100644
--- a/Bundles/LeafUI/uiVisu/rc/plugin.xml
+++ b/Bundles/LeafUI/uiVisu/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiVisu" class="::uiVisu::Plugin">
+<plugin id="uiVisu" class="::uiVisu::Plugin" version="@DASH_VERSION@" >
     <library name="uiVisu"/>
     
     <requirement id="dataReg"/>
@@ -10,12 +10,6 @@
         <service>::uiVisu::action::CrossTypeAction</service>
         <object>::fwData::Image</object>
     </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IActionSrv</type>
-        <service>::uiVisu::action::CameraOrientationAction</service>
-        <object>::fwData::Image</object>
-    </extension>
     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
diff --git a/Bundles/LeafUI/uiVisu/src/uiVisu/Plugin.cpp b/Bundles/LeafUI/uiVisu/src/uiVisu/Plugin.cpp
index a863453..fdcbf5f 100644
--- a/Bundles/LeafUI/uiVisu/src/uiVisu/Plugin.cpp
+++ b/Bundles/LeafUI/uiVisu/src/uiVisu/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,13 +15,15 @@ namespace uiVisu
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiVisu::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiVisu
diff --git a/Bundles/LeafUI/uiVisu/src/uiVisu/action/CameraOrientationAction.cpp b/Bundles/LeafUI/uiVisu/src/uiVisu/action/CameraOrientationAction.cpp
deleted file mode 100644
index 789f9d8..0000000
--- a/Bundles/LeafUI/uiVisu/src/uiVisu/action/CameraOrientationAction.cpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <boost/assign/list_of.hpp>
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/trim.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/String.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/operations.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-#include <fwServices/op/Get.hpp>
-
-#include "uiVisu/action/CameraOrientationAction.hpp"
-#include "fwServices/IEditionService.hpp"
-
-namespace uiVisu
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiVisu::action::CameraOrientationAction , ::fwData::Image ) ;
-
-
-CameraOrientationAction::CameraOrientationAction() throw() : m_orientation("axial")
-{
-    //handlingEventOff();
-}
-
-//------------------------------------------------------------------------------
-
-CameraOrientationAction::~CameraOrientationAction() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwGui::IActionSrv::actionServiceStarting();
-}
-
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwGui::IActionSrv::actionServiceStopping();
-}
-
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwGui::IActionSrv::initialize();
-
-    if( this->m_configuration->size() > 0 )
-    {
-        ::fwRuntime::ConfigurationElementContainer::Iterator iter = this->m_configuration->begin() ;
-        SLM_ASSERT("Sorry, only one xml element \"orientation\" is accepted.", this->m_configuration->size() == 1 && (*iter)->getName() == "orientation" );
-        SLM_ASSERT("Sorry, xml element \"orientation\" is empty.", ! (*iter)->getValue().empty() );
-        m_orientation = (*iter)->getValue();
-        ::boost::algorithm::trim(m_orientation);
-        ::boost::algorithm::to_lower(m_orientation);
-
-        if(m_orientation != "axial" && m_orientation != "frontal" && m_orientation != "sagittal")
-        {
-            SLM_FATAL("The value for the xml element \"orientation\" can only be axial, frontal or sagittal.");
-        }
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::updating() throw(::fwTools::Failed)
-{
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-
-    ::fwData::String::sptr dataInfo = ::fwData::String::New();
-    dataInfo->value() = m_orientation;
-
-    ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-    imageMsg->addEvent( "CAMERA_ORIENTATION", dataInfo );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, imageMsg);
-}
-
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::swapping() throw(::fwTools::Failed)
-{
-
-}
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
-void CameraOrientationAction::info( std::ostream &_sstream )
-{
-}
-
-
-//------------------------------------------------------------------------------
-
-} // action
-} // uiVisu
-
diff --git a/Bundles/LeafUI/uiVisu/src/uiVisu/action/CrossTypeAction.cpp b/Bundles/LeafUI/uiVisu/src/uiVisu/action/CrossTypeAction.cpp
index 3892c41..da3d29c 100644
--- a/Bundles/LeafUI/uiVisu/src/uiVisu/action/CrossTypeAction.cpp
+++ b/Bundles/LeafUI/uiVisu/src/uiVisu/action/CrossTypeAction.cpp
@@ -1,55 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
+#include "uiVisu/action/CrossTypeAction.hpp"
 
-#include <boost/assign/list_of.hpp>
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/trim.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <fwData/Image.hpp>
-#include <fwData/Float.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
+#include <fwData/Float.hpp>
+#include <fwData/Image.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
 #include <fwServices/op/Get.hpp>
 
-#include "uiVisu/action/CrossTypeAction.hpp"
-#include "fwServices/IEditionService.hpp"
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/trim.hpp>
+
+#include <boost/assign/list_of.hpp>
+
 
 namespace uiVisu
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiVisu::action::CrossTypeAction , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiVisu::action::CrossTypeAction, ::fwData::Image );
 
+static const ::fwCom::Signals::SignalKeyType s_CROSS_TYPE_MODIFIED_SIG = "crossTypeModified";
 
 std::map< std::string, float >
 CrossTypeAction::m_scaleConversion
-        = ::boost::assign::map_list_of(std::string("full"),1.0)
-                                      (std::string("half"),0.5)
-                                      (std::string("hide"),0.0);
+    = ::boost::assign::map_list_of(std::string("full"),1.0)
+          (std::string("half"),0.5)
+          (std::string("hide"),0.0);
 
 CrossTypeAction::CrossTypeAction() throw()
 {
-    //handlingEventOff();
+    m_sigCrossTypeModified = newSignal< CrossTypeModifiedSignalType >(s_CROSS_TYPE_MODIFIED_SIG);
 }
 
 //------------------------------------------------------------------------------
 
 CrossTypeAction::~CrossTypeAction() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -89,14 +92,7 @@ void CrossTypeAction::configuring() throw(fwTools::Failed)
 
 void CrossTypeAction::updating() throw(::fwTools::Failed)
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-
-    ::fwData::Float::sptr dataInfo = ::fwData::Float::New();
-    dataInfo->value() = m_scaleConversion[m_crossType];
-
-    ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-    imageMsg->addEvent( "CROSS_TYPE", dataInfo );
-    ::fwServices::IEditionService::notify(this->getSptr(), image, imageMsg);
+    m_sigCrossTypeModified->asyncEmit(m_scaleConversion[m_crossType]);
 }
 
 //------------------------------------------------------------------------------
@@ -105,11 +101,6 @@ void CrossTypeAction::swapping() throw(::fwTools::Failed)
 {
 
 }
-//------------------------------------------------------------------------------
-
-void CrossTypeAction::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
 
 //------------------------------------------------------------------------------
 
diff --git a/Bundles/LeafUI/uiVisu/src/uiVisu/action/SSnapshot.cpp b/Bundles/LeafUI/uiVisu/src/uiVisu/action/SSnapshot.cpp
index 3e2693d..7070db7 100644
--- a/Bundles/LeafUI/uiVisu/src/uiVisu/action/SSnapshot.cpp
+++ b/Bundles/LeafUI/uiVisu/src/uiVisu/action/SSnapshot.cpp
@@ -1,22 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
 #include <fwCore/base.hpp>
 
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
-
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwGui/dialog/LocationDialog.hpp>
 
@@ -27,24 +25,26 @@ namespace uiVisu
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::uiVisu::action::SSnapshot , ::fwData::Object ) ;
+const ::fwCom::Signals::SignalKeyType SSnapshot::s_SNAPPED_SIG = "snapped";
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::uiVisu::action::SSnapshot, ::fwData::Object );
 
 
 SSnapshot::SSnapshot() throw()
 {
-    //this->handlingEventOff();
+    m_sigSnapped = newSignal< SnappedSignalType >(s_SNAPPED_SIG);
 }
 
 //------------------------------------------------------------------------------
 
 SSnapshot::~SSnapshot() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void SSnapshot::starting() throw(::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
     ::fwGui::IActionSrv::actionServiceStarting();
 }
 
@@ -52,7 +52,6 @@ void SSnapshot::starting() throw(::fwTools::Failed)
 
 void SSnapshot::stopping() throw(::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
     ::fwGui::IActionSrv::actionServiceStopping();
 }
 
@@ -60,51 +59,18 @@ void SSnapshot::stopping() throw(::fwTools::Failed)
 
 void SSnapshot::configuring() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
     ::fwGui::IActionSrv::initialize();
-
-
-    std::vector < Configuration > snapConfig = m_configuration->find("snap");
-    if(!snapConfig.empty())
-    {
-        std::vector < Configuration > sceneConfig = snapConfig.at(0)->find("scene");
-        for(unsigned int i =0; i < sceneConfig.size(); i++)
-        {
-            OSLM_ASSERT("Wrong tag name: " << sceneConfig.at(i)->getName(), sceneConfig.at(i)->getName() == "scene");
-            SLM_ASSERT("UID attribute is missing", sceneConfig.at(i)->hasAttribute("uid"));
-
-            std::string value(sceneConfig.at(i)->getAttributeValue("uid"));
-            m_scenesUID.push_back(value);
-        }
-    }
 }
 
 //------------------------------------------------------------------------------
 
 void SSnapshot::updating() throw(::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-    for(unsigned int i=0; i < m_scenesUID.size(); i++)
+    std::string filename = this->requestFileName();
+
+    if(!filename.empty())
     {
-        ::fwServices::IService::sptr service = ::fwServices::get(m_scenesUID.at(i));
-        ::fwData::Composite::sptr composite = service->getObject< ::fwData::Composite >();
-        SLM_ASSERT("SnapshotEditor sceneUID " << m_scenesUID.at(i) <<" isn't a GenericScene?" , composite);
-
-        ::fwData::String::sptr dataInfo = ::fwData::String::New();
-
-        ::fwData::String::sptr sceneID = ::fwData::String::New();
-        sceneID->value() = m_scenesUID.at(i);
-        ::fwData::String::sptr filename = ::fwData::String::New();
-
-        filename->value() = this->requestFileName();
-        if(!filename->value().empty())
-        {
-            dataInfo->setField("sceneID", sceneID);
-            dataInfo->setField("filename", filename);
-            ::fwComEd::CompositeMsg::sptr compositeMsg = ::fwComEd::CompositeMsg::New();
-            compositeMsg->addEvent( "SNAP", dataInfo );
-            ::fwServices::IEditionService::notify(this->getSptr(), composite, compositeMsg);
-        }
+        m_sigSnapped->asyncEmit(filename);
     }
 }
 
@@ -114,11 +80,6 @@ void SSnapshot::swapping() throw(::fwTools::Failed)
 {
 
 }
-//------------------------------------------------------------------------------
-
-void SSnapshot::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
 
 //------------------------------------------------------------------------------
 
@@ -142,8 +103,8 @@ std::string SSnapshot::requestFileName()
     dialogFile.addFilter("all","*.*");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         fileName = result->getPath().string();
diff --git a/Bundles/LeafUI/uiVisuQt/CMakeLists.txt b/Bundles/LeafUI/uiVisuQt/CMakeLists.txt
index 6acb944..55bfd08 100644
--- a/Bundles/LeafUI/uiVisuQt/CMakeLists.txt
+++ b/Bundles/LeafUI/uiVisuQt/CMakeLists.txt
@@ -1,24 +1,18 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwRuntime
-    fwTools
-    gui
-)
-
-find_package(Boost COMPONENTS filesystem REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
 
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
 fwLink(
-    ${Boost_LIBRARIES}
-    ${QT_LIBRARIES}
-    )
+    ${Qt5Core_LIBRARIES} 
+    ${Qt5Gui_LIBRARIES} 
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafUI/uiVisuQt/COPYING b/Bundles/LeafUI/uiVisuQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafUI/uiVisuQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafUI/uiVisuQt/COPYING.LESSER b/Bundles/LeafUI/uiVisuQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafUI/uiVisuQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafUI/uiVisuQt/Properties.cmake b/Bundles/LeafUI/uiVisuQt/Properties.cmake
index abee5d0..49aece3 100644
--- a/Bundles/LeafUI/uiVisuQt/Properties.cmake
+++ b/Bundles/LeafUI/uiVisuQt/Properties.cmake
@@ -2,6 +2,17 @@
 set( NAME uiVisuQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGui fwGuiQt fwMath fwRuntime fwServices fwTools gui )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwGuiQt
+    fwMath
+    fwRuntime
+    fwServices
+    fwTools
+    gui
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafUI/uiVisuQt/bin/build.options b/Bundles/LeafUI/uiVisuQt/bin/build.options
deleted file mode 100644
index f563848..0000000
--- a/Bundles/LeafUI/uiVisuQt/bin/build.options
+++ /dev/null
@@ -1,18 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-LIB     = [
-           'fwData_0-1',
-           'fwDataIO_0-2',
-           'fwServices_0-1',
-           'fwComEd_0-1',
-           'fwRuntime_0-3',
-           'fwCore_0-1',
-           'fwTools_0-1',
-           'fwGui_0-1',
-           'fwGuiQt_0-1'
-           ]
-USE     = ['qtCore','boost', 'boostFilesystem']
-BUNDLES = ['gui_0-1']
-
-
-
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/BasicFloatEditor.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/BasicFloatEditor.hpp
index c79dcbd..20c0a23 100644
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/BasicFloatEditor.hpp
+++ b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/BasicFloatEditor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISUQT_BASICFLOATEDITOR_HPP_
-#define _UIVISUQT_BASICFLOATEDITOR_HPP_
+#ifndef __UIVISUQT_BASICFLOATEDITOR_HPP__
+#define __UIVISUQT_BASICFLOATEDITOR_HPP__
 
 #include <QObject>
 #include <QPointer>
@@ -23,21 +23,22 @@ namespace uiVisu
 /**
  * @brief   BasicFloatEditor service permits to edit a float value.
  * @class   BasicFloatEditor
- * 
+ *
  * @date    2011.
  */
-class UIVISUQT_CLASS_API BasicFloatEditor : public QObject, public ::gui::editor::IEditor
+class UIVISUQT_CLASS_API BasicFloatEditor : public QObject,
+                                            public ::gui::editor::IEditor
 {
-    Q_OBJECT
-public :
+Q_OBJECT
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (BasicFloatEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (BasicFloatEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIVISUQT_API BasicFloatEditor() throw() ;
+    UIVISUQT_API BasicFloatEditor() throw();
 
     /// Destructor. Do nothing.
-    UIVISUQT_API virtual ~BasicFloatEditor() throw() ;
+    UIVISUQT_API virtual ~BasicFloatEditor() throw();
 
 protected:
 
@@ -50,9 +51,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /// Do nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
     virtual void updating() throw(::fwTools::Failed);
 
     /// Do nothing
@@ -62,7 +60,7 @@ protected:
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 protected Q_SLOTS:
 
@@ -81,6 +79,6 @@ private:
 
 } // uiVisu
 
-#endif // _UIVISUQT_BASICFLOATEDITOR_HPP_
+#endif // __UIVISUQT_BASICFLOATEDITOR_HPP__
 
 
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Namespace.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Namespace.hpp
index d21f00f..1f3c722 100644
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Namespace.hpp
+++ b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIVISUQTNAMESPACE_HPP_
-#define UIVISUQTNAMESPACE_HPP_
+#ifndef __UIVISUQT_NAMESPACE_HPP__
+#define __UIVISUQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace uiVisu supplies a service to take a snapshot of current scene. The graphic part was done with Qt
  * @namespace   uiVisu
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace uiVisu
 {
 }
-#endif /* UIVISUQTNAMESPACE_HPP_ */
+#endif /* __UIVISUQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Plugin.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Plugin.hpp
index 0645542..68974b8 100644
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Plugin.hpp
+++ b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/Plugin.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISUQT_PLUGIN_HPP_
-#define _UIVISUQT_PLUGIN_HPP_
+#ifndef __UIVISUQT_PLUGIN_HPP__
+#define __UIVISUQT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
 namespace uiVisu
 {
 /**
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -32,4 +32,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace uiVisu
 
-#endif //_UIVISUQT_PLUGIN_HPP_
+#endif //__UIVISUQT_PLUGIN_HPP__
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/PointEditor.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/PointEditor.hpp
index d500c45..b00f3ee 100644
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/PointEditor.hpp
+++ b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/PointEditor.hpp
@@ -1,47 +1,49 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISUQT_POINT_EDITOR_HPP
-#define _UIVISUQT_POINT_EDITOR_HPP
+#ifndef __UIVISUQT_POINTEDITOR_HPP__
+#define __UIVISUQT_POINTEDITOR_HPP__
 
 
-#include <QObject>
-#include <QLineEdit>
-#include <QPointer>
 
-#include <fwTools/Failed.hpp>
+#include "uiVisuQt/config.hpp"
 
 #include <fwData/Point.hpp>
 
+#include <fwDataTools/PickingInfo.hpp>
+
+#include <fwTools/Failed.hpp>
+
 #include <gui/editor/IEditor.hpp>
 
-#include "uiVisuQt/config.hpp"
+#include <QLineEdit>
+#include <QObject>
+#include <QPointer>
+
 
 namespace uiVisu
 {
 
 /**
  * @brief   PointEditor service allows to display point information.
- * @class   PointEditor
- * 
- * @date    2010.
  */
-class UIVISUQT_CLASS_API PointEditor : public QObject, public ::gui::editor::IEditor
+class UIVISUQT_CLASS_API PointEditor : public QObject,
+                                       public ::gui::editor::IEditor
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PointEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PointEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIVISUQT_API PointEditor() throw() ;
+    UIVISUQT_API PointEditor() throw();
 
     /// Destructor. Do nothing.
-    UIVISUQT_API virtual ~PointEditor() throw() ;
+    UIVISUQT_API virtual ~PointEditor() throw();
 
 protected:
 
@@ -54,9 +56,6 @@ protected:
     ///This method launches the IEditor::stopping method.
     virtual void stopping() throw(::fwTools::Failed);
 
-    /// Management of observations ( overrides )
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
     void updating() throw(::fwTools::Failed);
 
     void swapping() throw(::fwTools::Failed);
@@ -64,11 +63,14 @@ protected:
     void configuring() throw( ::fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream& _sstream );
 
 
 private:
 
+    /// Slot: get the interaction information
+    void getInteraction(::fwDataTools::PickingInfo info);
+
     QPointer< QLineEdit >   m_textCtrl_x;
     QPointer< QLineEdit >   m_textCtrl_y;
     QPointer< QLineEdit >   m_textCtrl_z;
@@ -77,4 +79,4 @@ private:
 
 } // uiData
 
-#endif /*_UIVISUQT_POINT_EDITOR_HPP_*/
+#endif /*__UIVISUQT_POINTEDITOR_HPP___*/
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/SnapshotEditor.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/SnapshotEditor.hpp
index 10f79a1..0a2b5f3 100644
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/SnapshotEditor.hpp
+++ b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/SnapshotEditor.hpp
@@ -1,19 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISUQT_SNAPSHOTEDITOR_HPP_
-#define _UIVISUQT_SNAPSHOTEDITOR_HPP_
+#ifndef __UIVISUQT_SNAPSHOTEDITOR_HPP__
+#define __UIVISUQT_SNAPSHOTEDITOR_HPP__
 
-#include <QObject>
-#include <QPointer>
+
+#include "uiVisuQt/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
 #include <fwTools/Failed.hpp>
 #include <gui/editor/IEditor.hpp>
 
-#include "uiVisuQt/config.hpp"
+#include <QObject>
+#include <QPointer>
 
 class QPushButton;
 
@@ -23,23 +27,25 @@ namespace uiVisu
 /**
  * @brief   SnapshotEditor service is represented by a button. It allows to snap shot a generic scene.
  * @class   SnapshotEditor
- * 
- * @date    2010.
+ *
+ * Send a 'snapped' signal containing the filename used to save the snapshot.
+ * @note You need to connect the 'snapped' signal to one visuVTKAdaptor::Snapshot to save the file.
  */
-class UIVISUQT_CLASS_API SnapshotEditor : public QObject, public ::gui::editor::IEditor
+class UIVISUQT_CLASS_API SnapshotEditor : public QObject,
+                                          public ::gui::editor::IEditor
 {
 
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SnapshotEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SnapshotEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIVISUQT_API SnapshotEditor() throw() ;
+    UIVISUQT_API SnapshotEditor() throw();
 
     /// Destructor. Do nothing.
-    UIVISUQT_API virtual ~SnapshotEditor() throw() ;
+    UIVISUQT_API virtual ~SnapshotEditor() throw();
 
 protected:
 
@@ -56,9 +62,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /// Do nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
     virtual void updating() throw(::fwTools::Failed);
 
     /// Do nothing
@@ -68,19 +71,14 @@ protected:
      * @brief Configure the editor.
      *
      * Example of configuration
-     * @verbatim
-    <service uid="snapshotEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no">
-        <snap>
-            <scene uid="genericScene" />
-        </snap>
-    </service>
-       @endverbatim
-       \b genericScene is the uid of the ::fwRenderVTK::VtkRenderService representing the generic scene which will be printed.
+     * @code{.xml}
+       <service uid="snapshotEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
+       @endcode
      */
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 protected Q_SLOTS:
     /**
@@ -91,7 +89,18 @@ protected Q_SLOTS:
 private:
     std::string requestFileName();
 
-    std::vector< std::string > m_scenesUID;
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal to snap shot
+    typedef ::fwCom::Signal< void (std::string) > SnappedSignalType;
+    static const ::fwCom::Signals::SignalKeyType s_SNAPPED_SIG;
+
+    SnappedSignalType::sptr m_sigSnapped; ///< snap shot signal
+    /**
+     * @}
+     */
 
     QPointer< QPushButton > m_snapButton;
 
@@ -99,6 +108,6 @@ private:
 
 } // uiVisu
 
-#endif /*_UIVISUQT_SNAPSHOTEDITOR_HPP_*/
+#endif /*__UIVISUQT_SNAPSHOTEDITOR_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/TransformationMatrixEditor.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/TransformationMatrixEditor.hpp
index 3175264..0f9650e 100644
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/TransformationMatrixEditor.hpp
+++ b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/TransformationMatrixEditor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _UIVISUQT_TRANSFORMATIONMATRIXEDITOR_HPP_
-#define _UIVISUQT_TRANSFORMATIONMATRIXEDITOR_HPP_
+#ifndef __UIVISUQT_TRANSFORMATIONMATRIXEDITOR_HPP__
+#define __UIVISUQT_TRANSFORMATIONMATRIXEDITOR_HPP__
 
 #include <QObject>
 #include <QPointer>
@@ -23,22 +23,23 @@ namespace uiVisu
 /**
  * @brief   TransformationMatrixEditor service is represented by a slider. It update the rotation matrix from the slider angle value.
  * @class   TransformationMatrixEditor
- * 
+ *
  * @date    2010.
  */
-class UIVISUQT_CLASS_API TransformationMatrixEditor : public QObject, public ::gui::editor::IEditor
+class UIVISUQT_CLASS_API TransformationMatrixEditor : public QObject,
+                                                      public ::gui::editor::IEditor
 {
 
-    Q_OBJECT
-public :
+Q_OBJECT
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrixEditor)(::gui::editor::IEditor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrixEditor)(::gui::editor::IEditor) );
 
     /// Constructor. Do nothing.
-    UIVISUQT_API TransformationMatrixEditor() throw() ;
+    UIVISUQT_API TransformationMatrixEditor() throw();
 
     /// Destructor. Do nothing.
-    UIVISUQT_API virtual ~TransformationMatrixEditor() throw() ;
+    UIVISUQT_API virtual ~TransformationMatrixEditor() throw();
 
 protected:
 
@@ -51,9 +52,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /// Do nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /// Do nothing
     virtual void updating() throw(::fwTools::Failed);
 
     /// Do nothing
@@ -63,7 +61,7 @@ protected:
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 protected Q_SLOTS:
     /// Called when the slider value change.
@@ -77,6 +75,6 @@ private:
 
 } // uiVisu
 
-#endif /*_UIVISUQT_TRANSFORMATIONMATRIXEDITOR_HPP_*/
+#endif /*__UIVISUQT_TRANSFORMATIONMATRIXEDITOR_HPP__*/
 
 
diff --git a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/config.hpp b/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/config.hpp
deleted file mode 100644
index e97f6d9..0000000
--- a/Bundles/LeafUI/uiVisuQt/include/uiVisuQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _UIVISUQT_CONFIG_HPP_
-#define _UIVISUQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef UIVISUQT_EXPORTS
-    #define UIVISUQT_API __declspec(dllexport)
-    #else
-    #define UIVISUQT_API __declspec(dllimport)
-    #endif
-
-    #define UIVISUQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef UIVISUQT_EXPORTS
-    #define UIVISUQT_API __attribute__ ((visibility("default")))
-    #define UIVISUQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define UIVISUQT_API __attribute__ ((visibility("hidden")))
-    #define UIVISUQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define UIVISUQT_API
-    #define UIVISUQT_CLASS_API
-
-#endif
-
-#endif //_UIVISUQT_CONFIG_HPP_
diff --git a/Bundles/LeafUI/uiVisuQt/rc/plugin.xml b/Bundles/LeafUI/uiVisuQt/rc/plugin.xml
index e30f6b4..d66c91c 100644
--- a/Bundles/LeafUI/uiVisuQt/rc/plugin.xml
+++ b/Bundles/LeafUI/uiVisuQt/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="uiVisuQt" class="::uiVisuQt::Plugin">
+<plugin id="uiVisuQt" class="::uiVisuQt::Plugin" version="@DASH_VERSION@" >
     <library name="uiVisuQt"/>
 
     <requirement id="dataReg"/>
diff --git a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/BasicFloatEditor.cpp b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/BasicFloatEditor.cpp
index ef22365..8f8adea 100644
--- a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/BasicFloatEditor.cpp
+++ b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/BasicFloatEditor.cpp
@@ -1,45 +1,47 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QHBoxLayout>
-#include <QDoubleValidator>
-#include <QApplication>
+#include "uiVisuQt/BasicFloatEditor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
 #include <fwCore/base.hpp>
 
 #include <fwData/Float.hpp>
 #include <fwData/String.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <fwComEd/FloatMsg.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 
-#include "uiVisuQt/BasicFloatEditor.hpp"
+#include <QHBoxLayout>
+#include <QDoubleValidator>
+#include <QApplication>
 
 namespace uiVisu
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiVisu::BasicFloatEditor , ::fwData::Float ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiVisu::BasicFloatEditor, ::fwData::Float );
 
 
 BasicFloatEditor::BasicFloatEditor() throw()
 {
-//    addNewHandledEvent(::fwComEd::FloatMsg::VALUE_IS_MODIFIED);
 }
 
 //------------------------------------------------------------------------------
 
 BasicFloatEditor::~BasicFloatEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -48,13 +50,14 @@ void BasicFloatEditor::starting() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
     ::fwData::Float::sptr floatObj = this->getObject< ::fwData::Float >();
 
-    QHBoxLayout* layout = new QHBoxLayout();
+    QHBoxLayout* layout               = new QHBoxLayout();
     QDoubleValidator* doubleValidator = new QDoubleValidator( m_valueCtrl );
 
     m_valueCtrl = new QLineEdit( container );
@@ -93,7 +96,7 @@ void BasicFloatEditor::configuring() throw(fwTools::Failed)
 void BasicFloatEditor::updating() throw(::fwTools::Failed)
 {
     ::fwData::Float::sptr floatObj = this->getObject< ::fwData::Float >();
-    SLM_ASSERT("Sorry, the object is null", floatObj);
+    SLM_ASSERT("The given float object is null", floatObj);
 
     std::stringstream ss;
     ss << floatObj->value();
@@ -114,22 +117,6 @@ void BasicFloatEditor::swapping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void BasicFloatEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwComEd::FloatMsg::csptr floatMsg = ::fwComEd::FloatMsg::dynamicConstCast(_msg);
-
-    if (floatMsg)
-    {
-        if(floatMsg->hasEvent(::fwComEd::FloatMsg::VALUE_IS_MODIFIED))
-        {
-            this->updating();
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void BasicFloatEditor::info( std::ostream &_sstream )
 {
     _sstream << "Float Editor";
@@ -156,8 +143,8 @@ void BasicFloatEditor::onModifyValue(QString value)
     }
     else
     {
-        int pos = 0;
-        QString str = m_valueCtrl->text();
+        int pos      = 0;
+        QString str  = m_valueCtrl->text();
         bool isValid = (m_valueCtrl->validator()->validate(str, pos) == QValidator::Acceptable);
 
         if (isValid)
@@ -173,9 +160,12 @@ void BasicFloatEditor::onModifyValue(QString value)
     if ( *oldValue != *floatObj )
     {
         OSLM_TRACE(floatObj->getID() << " new value : " << *floatObj);
-        ::fwComEd::FloatMsg::sptr msg = ::fwComEd::FloatMsg::New();
-        msg->addEvent( ::fwComEd::FloatMsg::VALUE_IS_MODIFIED );
-        ::fwServices::IEditionService::notify(this->getSptr(), floatObj, msg);
+
+        auto sig = floatObj->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
     }
 }
 
diff --git a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/Plugin.cpp b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/Plugin.cpp
index 9623399..5e4d691 100644
--- a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/Plugin.cpp
+++ b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,13 +15,15 @@ namespace uiVisu
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::uiVisuQt::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace uiVisu
diff --git a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/PointEditor.cpp b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/PointEditor.cpp
index e282843..53c38df 100644
--- a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/PointEditor.cpp
+++ b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/PointEditor.cpp
@@ -1,156 +1,145 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "uiVisuQt/PointEditor.hpp"
 
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QWidget>
-#include <QStringList>
-#include <QDoubleValidator>
-#include <QLabel>
-#include <QPalette>
-#include <QSpacerItem>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
 
 #include <fwData/Composite.hpp>
 #include <fwData/String.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-
-#include <fwComEd/InteractionMsg.hpp>
-
 #include <fwGuiQt/container/QtContainer.hpp>
 
 #include <fwMath/IntrasecTypes.hpp>
 
-#include "uiVisuQt/PointEditor.hpp"
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
+
+#include <QDoubleValidator>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QPalette>
+#include <QSpacerItem>
+#include <QStringList>
+#include <QVBoxLayout>
+#include <QWidget>
 
 namespace uiVisu
 {
 
-    fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiVisu::PointEditor , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiVisu::PointEditor, ::fwData::Composite );
 
+static const ::fwCom::Slots::SlotKeyType s_GET_INTERACTION_SLOT = "getInteraction";
 
-    PointEditor::PointEditor() throw()
-    {
-//        addNewHandledEvent(::fwComEd::InteractionMsg::MOUSE_MOVE);
-    }
+PointEditor::PointEditor() throw()
+{
+    newSlot(s_GET_INTERACTION_SLOT, &PointEditor::getInteraction, this);
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    PointEditor::~PointEditor() throw()
-    {}
+PointEditor::~PointEditor() throw()
+{
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::starting() throw(::fwTools::Failed)
-    {
-        SLM_TRACE_FUNC();
-        this->::fwGui::IGuiContainerSrv::create();
+void PointEditor::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->::fwGui::IGuiContainerSrv::create();
 
-        ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
-        QWidget* const container = qtContainer->getQtContainer();
-        SLM_ASSERT("container not instanced", container);
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
+    QWidget* const container = qtContainer->getQtContainer();
+    SLM_ASSERT("container not instanced", container);
 
-        QHBoxLayout* hLayout = new QHBoxLayout();
+    QHBoxLayout* hLayout = new QHBoxLayout();
 
-        QLabel* staticText_x = new QLabel( tr("x:"), container);
-        hLayout->addWidget( staticText_x, 0, Qt::AlignVCenter );
+    QLabel* staticText_x = new QLabel( tr("x:"), container);
+    hLayout->addWidget( staticText_x, 0, Qt::AlignVCenter );
 
-        m_textCtrl_x = new QLineEdit( container );
-        m_textCtrl_x->setValidator( new QDoubleValidator(m_textCtrl_x) );
-        hLayout->addWidget( m_textCtrl_x, 1, Qt::AlignVCenter );
+    m_textCtrl_x = new QLineEdit( container );
+    m_textCtrl_x->setValidator( new QDoubleValidator(m_textCtrl_x) );
+    hLayout->addWidget( m_textCtrl_x, 1, Qt::AlignVCenter );
 
-        QLabel* staticText_y = new QLabel( tr("y:"), container );
-        hLayout->addWidget( staticText_y, 0, Qt::AlignVCenter );
+    QLabel* staticText_y = new QLabel( tr("y:"), container );
+    hLayout->addWidget( staticText_y, 0, Qt::AlignVCenter );
 
-        m_textCtrl_y = new QLineEdit( container );
-        m_textCtrl_y->setValidator( new QDoubleValidator(m_textCtrl_y) );
-        hLayout->addWidget( m_textCtrl_y, 1, Qt::AlignVCenter );
+    m_textCtrl_y = new QLineEdit( container );
+    m_textCtrl_y->setValidator( new QDoubleValidator(m_textCtrl_y) );
+    hLayout->addWidget( m_textCtrl_y, 1, Qt::AlignVCenter );
 
-        QLabel* staticText_z = new QLabel( tr("z:"), container );
-        hLayout->addWidget( staticText_z, 0, Qt::AlignVCenter );
+    QLabel* staticText_z = new QLabel( tr("z:"), container );
+    hLayout->addWidget( staticText_z, 0, Qt::AlignVCenter );
 
-        m_textCtrl_z = new QLineEdit( container );
-        m_textCtrl_z->setValidator( new QDoubleValidator(m_textCtrl_z) );
-        hLayout->addWidget( m_textCtrl_z, 1, Qt::AlignVCenter );
+    m_textCtrl_z = new QLineEdit( container );
+    m_textCtrl_z->setValidator( new QDoubleValidator(m_textCtrl_z) );
+    hLayout->addWidget( m_textCtrl_z, 1, Qt::AlignVCenter );
 
 
-        container->setLayout( hLayout );
-        this->updating();
-    }
+    container->setLayout( hLayout );
+    this->updating();
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::stopping() throw(::fwTools::Failed)
-    {
-        SLM_TRACE_FUNC();
+void PointEditor::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
 
-        this->getContainer()->clean();
-        this->::fwGui::IGuiContainerSrv::destroy();
-    }
+    this->getContainer()->clean();
+    this->::fwGui::IGuiContainerSrv::destroy();
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::configuring() throw(fwTools::Failed)
-    {
-        SLM_TRACE_FUNC();
-        this->::fwGui::IGuiContainerSrv::initialize();
-    }
+void PointEditor::configuring() throw(fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->::fwGui::IGuiContainerSrv::initialize();
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::updating() throw(::fwTools::Failed)
-    {
-    }
+void PointEditor::updating() throw(::fwTools::Failed)
+{
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::swapping() throw(::fwTools::Failed)
-    {
-        this->updating();
-    }
+void PointEditor::swapping() throw(::fwTools::Failed)
+{
+    this->updating();
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+void PointEditor::getInteraction(::fwDataTools::PickingInfo info)
+{
+    if ( info.m_eventId == ::fwDataTools::PickingInfo::Event::MOUSE_MOVE )
     {
-        SLM_TRACE_FUNC();
-        ::fwComEd::InteractionMsg::csptr interactionMsg = ::fwComEd::InteractionMsg::dynamicConstCast(_msg);
-
-        if (interactionMsg)
-        {
-            if ( interactionMsg->hasEvent( ::fwComEd::InteractionMsg::MOUSE_MOVE ) )
-            {
-                ::fwData::Point::csptr point = interactionMsg->getEventPoint();
-                SLM_ASSERT("Sorry, the object is null", point);
-                if(point)
-                {
-                    fwVec3d  pointCoord = point->getCoord();
-                    m_textCtrl_x->setText(QString("%1").arg(pointCoord[0], 0, 'f', 0));
-                    m_textCtrl_y->setText(QString("%1").arg(pointCoord[1], 0, 'f', 0));
-                    m_textCtrl_z->setText(QString("%1").arg(pointCoord[2], 0, 'f', 0));
-                }
-                //        this->updating();
-            }
-        }
+        m_textCtrl_x->setText(QString("%1").arg(info.m_worldPos[0], 0, 'f', 0));
+        m_textCtrl_y->setText(QString("%1").arg(info.m_worldPos[1], 0, 'f', 0));
+        m_textCtrl_z->setText(QString("%1").arg(info.m_worldPos[2], 0, 'f', 0));
     }
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-    void PointEditor::info( std::ostream &_sstream )
-    {
-        _sstream << "Point Editor";
-    }
+void PointEditor::info( std::ostream& _sstream )
+{
+    _sstream << "Point Editor";
+}
 
-    //------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 }
 
diff --git a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/SnapshotEditor.cpp b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/SnapshotEditor.cpp
index b701ec9..15584b2 100644
--- a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/SnapshotEditor.cpp
+++ b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/SnapshotEditor.cpp
@@ -1,59 +1,54 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QWidget>
-#include <QString>
-#include <QIcon>
-#include <QPushButton>
-#include <QHBoxLayout>
+#include "uiVisuQt/SnapshotEditor.hpp"
 
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/convenience.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
 #include <fwCore/base.hpp>
 
-#include <fwData/String.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/location/SingleFile.hpp>
 #include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
+#include <fwGui/dialog/LocationDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/operations.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-#include <fwServices/op/Get.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/dialog/LocationDialog.hpp>
 
-#include <fwGuiQt/container/QtContainer.hpp>
+#include <QWidget>
+#include <QString>
+#include <QIcon>
+#include <QPushButton>
+#include <QHBoxLayout>
 
-#include "uiVisuQt/SnapshotEditor.hpp"
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/convenience.hpp>
 
 namespace uiVisu
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiVisu::SnapshotEditor , ::fwData::Object ) ;
+const ::fwCom::Signals::SignalKeyType SnapshotEditor::s_SNAPPED_SIG = "snapped";
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiVisu::SnapshotEditor, ::fwData::Object );
 
 
 SnapshotEditor::SnapshotEditor() throw()
 {
-
+    m_sigSnapped = newSignal< SnappedSignalType >(s_SNAPPED_SIG);
 }
 
 //------------------------------------------------------------------------------
 
 SnapshotEditor::~SnapshotEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -62,10 +57,12 @@ void SnapshotEditor::starting() throw(::fwTools::Failed)
     SLM_TRACE_FUNC();
     this->create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget *container = qtContainer->getQtContainer();
 
-    ::boost::filesystem::path path(std::string(SHAREPATH) + "Bundles/uiVisuQt_" + std::string(UIVISUQT_VER) + "/camera-photo.png");
+    ::boost::filesystem::path path(std::string(BUNDLE_PREFIX) + "/uiVisuQt_" + std::string(
+                                       UIVISUQT_VER) + "/camera-photo.png");
     QIcon icon(QString::fromStdString(path.string()));
     m_snapButton = new QPushButton(icon, "", container);
     m_snapButton->setToolTip(QObject::tr("Snapshot"));
@@ -85,7 +82,8 @@ void SnapshotEditor::starting() throw(::fwTools::Failed)
 void SnapshotEditor::stopping() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
 
     QObject::disconnect(m_snapButton, SIGNAL(clicked()), this, SLOT(onSnapButton()));
 
@@ -97,23 +95,7 @@ void SnapshotEditor::stopping() throw(::fwTools::Failed)
 
 void SnapshotEditor::configuring() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     this->initialize();
-
-    std::vector < Configuration > snapConfig = m_configuration->find("snap");
-    if(!snapConfig.empty())
-    {
-        std::vector < Configuration > sceneConfig = snapConfig.at(0)->find("scene");
-        for(unsigned int i =0; i < sceneConfig.size(); i++)
-        {
-            OSLM_ASSERT("Wrong tag name: " << sceneConfig.at(i)->getName(), sceneConfig.at(i)->getName() == "scene");
-            SLM_ASSERT("UID attribute is missing", sceneConfig.at(i)->hasAttribute("uid"));
-
-            std::string value(sceneConfig.at(i)->getAttributeValue("uid"));
-            m_scenesUID.push_back(value);
-        }
-    }
 }
 
 //------------------------------------------------------------------------------
@@ -128,11 +110,6 @@ void SnapshotEditor::swapping() throw(::fwTools::Failed)
 {
 
 }
-//------------------------------------------------------------------------------
-
-void SnapshotEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-}
 
 //------------------------------------------------------------------------------
 
@@ -145,37 +122,22 @@ void SnapshotEditor::info( std::ostream &_sstream )
 void SnapshotEditor::onSnapButton()
 {
     SLM_TRACE_FUNC();
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget *container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
     if( container->isVisible() )
     {
-        for(unsigned int i=0; i < m_scenesUID.size(); i++)
+        std::string filename = this->requestFileName();
+
+        if(!filename.empty())
         {
-            ::fwServices::IService::sptr service = ::fwServices::get(m_scenesUID.at(i));
-            ::fwData::Composite::sptr composite = service->getObject< ::fwData::Composite >();
-            SLM_ASSERT("SnapshotEditor sceneUID " << m_scenesUID.at(i) <<" isn't a GenericScene?" , composite);
-
-            ::fwData::String::sptr dataInfo = ::fwData::String::New();
-
-            ::fwData::String::sptr sceneID = ::fwData::String::New();
-            sceneID->value() = m_scenesUID.at(i);
-            ::fwData::String::sptr filename = ::fwData::String::New();
-
-            filename->value() = this->requestFileName();
-            if(!filename->value().empty())
-            {
-                dataInfo->setField("sceneID", sceneID);
-                dataInfo->setField("filename", filename);
-                ::fwComEd::CompositeMsg::sptr compositeMsg = ::fwComEd::CompositeMsg::New();
-                compositeMsg->addEvent( "SNAP", dataInfo );
-                ::fwServices::IEditionService::notify(this->getSptr(), composite, compositeMsg);
-            }
+            m_sigSnapped->asyncEmit(filename);
         }
     }
     else
     {
-        std::string msgInfo("Sorry, it is not possible to snapshot the negato view. This view is not shown on screen.");
+        std::string msgInfo("It is not possible to snapshot the negato view. This view is not shown on screen.");
         ::fwGui::dialog::MessageDialog messageBox;
         messageBox.setTitle("Negato view snapshot");
         messageBox.setMessage( msgInfo );
@@ -201,8 +163,8 @@ std::string SnapshotEditor::requestFileName()
     dialogFile.addFilter("all","*.*");
     dialogFile.setOption(::fwGui::dialog::ILocationDialog::WRITE);
 
-    ::fwData::location::SingleFile::sptr  result;
-    result= ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
+    ::fwData::location::SingleFile::sptr result;
+    result = ::fwData::location::SingleFile::dynamicCast( dialogFile.show() );
     if (result)
     {
         fileName = result->getPath().string();
diff --git a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/TransformationMatrixEditor.cpp b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/TransformationMatrixEditor.cpp
index f4956ed..1a67a10 100644
--- a/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/TransformationMatrixEditor.cpp
+++ b/Bundles/LeafUI/uiVisuQt/src/uiVisuQt/TransformationMatrixEditor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,10 +15,7 @@
 
 #include <fwData/TransformationMatrix3D.hpp>
 
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwGuiQt/container/QtContainer.hpp>
 
@@ -27,18 +24,19 @@
 namespace uiVisu
 {
 
-fwServicesRegisterMacro( ::gui::editor::IEditor , ::uiVisu::TransformationMatrixEditor , ::fwData::TransformationMatrix3D ) ;
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::uiVisu::TransformationMatrixEditor,
+                         ::fwData::TransformationMatrix3D );
 
 
 TransformationMatrixEditor::TransformationMatrixEditor() throw()
 {
-//    addNewHandledEvent(::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED);
 }
 
 //------------------------------------------------------------------------------
 
 TransformationMatrixEditor::~TransformationMatrixEditor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -48,7 +46,8 @@ void TransformationMatrixEditor::starting() throw(::fwTools::Failed)
 
     this->::fwGui::IGuiContainerSrv::create();
 
-    ::fwGuiQt::container::QtContainer::sptr qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( this->getContainer() );
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer() );
     QWidget* const container = qtContainer->getQtContainer();
     SLM_ASSERT("container not instanced", container);
 
@@ -97,16 +96,7 @@ void TransformationMatrixEditor::updating() throw(::fwTools::Failed)
 //------------------------------------------------------------------------------
 
 void TransformationMatrixEditor::swapping() throw(::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
-void TransformationMatrixEditor::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
 {
-    if(_msg->hasEvent(::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED))
-    {
-        this->updating();
-    }
 }
 
 //------------------------------------------------------------------------------
@@ -126,14 +116,20 @@ void TransformationMatrixEditor::onSliderChange( int angle  )
     double cosAngle = cos(angleRad);
     double sinAngle = sin(angleRad);
 
-    tm3D->setCoefficient(0,0, cosAngle); tm3D->setCoefficient(0,1, -sinAngle); tm3D->setCoefficient(0,2, 0); tm3D->setCoefficient(0,3, 0);
-    tm3D->setCoefficient(1,0, sinAngle); tm3D->setCoefficient(1,1, cosAngle);  tm3D->setCoefficient(1,2, 0); tm3D->setCoefficient(1,2, 0);
-    tm3D->setCoefficient(2,0, 0);        tm3D->setCoefficient(2,1, 0);         tm3D->setCoefficient(2,2, 1); tm3D->setCoefficient(2,3, 0);
-    tm3D->setCoefficient(3,0, 0);        tm3D->setCoefficient(3,1, 0);         tm3D->setCoefficient(3,2, 0); tm3D->setCoefficient(3,3, 1);
+    tm3D->setCoefficient(0,0, cosAngle); tm3D->setCoefficient(0,1, -sinAngle); tm3D->setCoefficient(0,2, 0);
+    tm3D->setCoefficient(0,3, 0);
+    tm3D->setCoefficient(1,0, sinAngle); tm3D->setCoefficient(1,1, cosAngle);  tm3D->setCoefficient(1,2, 0);
+    tm3D->setCoefficient(1,2, 0);
+    tm3D->setCoefficient(2,0, 0);        tm3D->setCoefficient(2,1, 0);         tm3D->setCoefficient(2,2, 1);
+    tm3D->setCoefficient(2,3, 0);
+    tm3D->setCoefficient(3,0, 0);        tm3D->setCoefficient(3,1, 0);         tm3D->setCoefficient(3,2, 0);
+    tm3D->setCoefficient(3,3, 1);
 
-    ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-    msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), tm3D, msg);
+    auto sig = tm3D->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/CMakeLists.txt b/Bundles/LeafVisu/scene2D/CMakeLists.txt
index 9172e47..d633a65 100644
--- a/Bundles/LeafVisu/scene2D/CMakeLists.txt
+++ b/Bundles/LeafVisu/scene2D/CMakeLists.txt
@@ -1,21 +1,19 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwData
-    fwRender
-    fwRuntime
-    fwServices
-)
-
-
 add_definitions("-DQT_NO_KEYWORDS")
 
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
 
+fwForwardInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
 
-fwForwardInclude(${QT_INCLUDE_DIR})
-fwLink(${QT_LIBRARIES})
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafVisu/scene2D/COPYING b/Bundles/LeafVisu/scene2D/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/scene2D/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/scene2D/COPYING.LESSER b/Bundles/LeafVisu/scene2D/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/scene2D/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/scene2D/Properties.cmake b/Bundles/LeafVisu/scene2D/Properties.cmake
index 2f668ef..4e36712 100644
--- a/Bundles/LeafVisu/scene2D/Properties.cmake
+++ b/Bundles/LeafVisu/scene2D/Properties.cmake
@@ -2,6 +2,18 @@
 set( NAME scene2D )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwCore fwData fwGuiQt fwRender fwRuntime fwServices )
+set( PRIORITY 2)
+set( DEPENDENCIES
+    fwCore
+    fwTools
+    fwData
+    fwDataTools
+    fwGuiQt
+    fwRender
+    fwRuntime
+    fwServices
+    fwGui
+    fwCom
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafVisu/scene2D/bin/build.options b/Bundles/LeafVisu/scene2D/bin/build.options
deleted file mode 100644
index 1f4ca8d..0000000
--- a/Bundles/LeafVisu/scene2D/bin/build.options
+++ /dev/null
@@ -1,14 +0,0 @@
-TYPE = 'bundle'
-VERSION = '0-1'
-USE = ['qtGui']
-LIB     = [
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwRender_0-1',
-          'fwGuiQt_0-1'
-          ]
-BUNDLES = []
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/Plugin.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/Plugin.hpp
index 8155923..03cb145 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/Plugin.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/Plugin.hpp
@@ -1,12 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#ifndef _SCENE2D_PLUGIN_HPP_
-#define _SCENE2D_PLUGIN_HPP_
+#ifndef __SCENE2D_PLUGIN_HPP__
+#define __SCENE2D_PLUGIN_HPP__
 
 
 #include <fwRuntime/Plugin.hpp>
@@ -15,12 +15,9 @@
 namespace scene2D
 {
 /**
-* @brief   This class is started when the bundles is loaded.
-* @class   Plugin
-* 
-* @date    2010.
-*/
-
+ * @brief   This class is started when the bundles is loaded.
+ * @class   Plugin
+ */
 struct Plugin : public ::fwRuntime::Plugin
 {
 
@@ -41,4 +38,4 @@ struct Plugin : public ::fwRuntime::Plugin
 } // namespace scene2D
 
 
-#endif //_SCENE2D_PLUGIN_HPP_
+#endif //__SCENE2D_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/Render.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/Render.hpp
index 09b8496..1628960 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/Render.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/Render.hpp
@@ -1,49 +1,53 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_RENDER_HPP_
-#define _SCENE2D_RENDER_HPP_
+#ifndef __SCENE2D_RENDER_HPP__
+#define __SCENE2D_RENDER_HPP__
 
-#include <Qt>
-#include <QGraphicsScene>
-#include <QGraphicsView>
-#include <QResizeEvent>
+#include "scene2D/config.hpp"
+#include "scene2D/data/Axis.hpp"
+#include "scene2D/data/Coord.hpp"
+#include "scene2D/data/Event.hpp"
+#include "scene2D/data/Viewport.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
 
+#include <fwData/Composite.hpp>
 
 #include <fwRender/IRender.hpp>
-#include <scene2D/data/Axis.hpp>
-#include <scene2D/data/Viewport.hpp>
 
+#include <fwServices/helper/Config.hpp>
 
-#include "scene2D/config.hpp"
-#include "scene2D/data/Event.hpp"
-#include "scene2D/data/Coord.hpp"
+#include <QGraphicsScene>
+#include <QGraphicsView>
+#include <QResizeEvent>
+#include <Qt>
 
-namespace  fwData
-{
-    class Composite;
-} //namespace fwData
+//namespace fwData
 
 namespace scene2D
 {
-    // Not declared in the #include because of mutual inclusion.
-    class Scene2DGraphicsView;
+// Not declared in the #include because of mutual inclusion.
+class Scene2DGraphicsView;
 
 namespace adaptor
 {
-    // Not declared in the #include because of mutual inclusion.
-    class IAdaptor;
+// Not declared in the #include because of mutual inclusion.
+class IAdaptor;
 }
 
+/**
+ * @brief Scene2D rendering class
+ */
 class SCENE2D_CLASS_API Render : public ::fwRender::IRender
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Render)(::fwRender::IRender) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Render)(::fwRender::IRender) );
 
     /// A string type representing adaptors id.
     typedef std::string AdaptorIDType;
@@ -62,36 +66,57 @@ public:
     SCENE2D_API virtual ~Render() throw();
 
     /// Get the scene.
-    SCENE2D_API QGraphicsScene* getScene();
+    SCENE2D_API QGraphicsScene* getScene() const;
 
     /// Get the view.
-    SCENE2D_API Scene2DGraphicsView* getView();
+    SCENE2D_API Scene2DGraphicsView* getView() const;
 
     /// Get the viewport.
     SCENE2D_API SPTR(::scene2D::data::Viewport) getViewport();
 
     /// Get the object referenced in m_objectID2Object by the key _objectID.
-    SCENE2D_API SPTR(::fwData::Object) getRegisteredObject(ObjectIDType _objectID);
+    SCENE2D_API SPTR(::fwData::Object) getRegisteredObject(ObjectIDType _objectID) const;
 
     /// Iterate on the m_zValue2AdaptorID map and, if the event hasn't been accepted yet, call the adaptor processInteraction function.
     SCENE2D_API void dispatchInteraction( SPTR(::scene2D::data::Event) _event );
 
     /// Returns the viewport coordinate point mapped to scene coordinates.
-    SCENE2D_API ::scene2D::data::Coord mapToScene( const ::scene2D::data::Coord & coord ) const;
+    SCENE2D_API ::scene2D::data::Coord mapToScene( const ::scene2D::data::Coord& coord ) const;
 
     /// Returns what happens to scene's aspect ratio on view resize events
-    SCENE2D_API Qt::AspectRatioMode getAspectRatioMode();
+    SCENE2D_API Qt::AspectRatioMode getAspectRatioMode() const;
 
     /// Update scene size from items bounding rect, this bounding can be enlarged with ratioPercent parameter
     SCENE2D_API void updateSceneSize( float ratioPercent = 0 );
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_ADD_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_CHANGE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_REMOVE_OBJECTS_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsMap  getAutoConnections() const;
+
 protected:
+
     /**
-    * @brief Configuring the Render service.
-    *
-    * Example of configuration
-    * @verbatim
-    <service uid="GENERIC_UID_Scene2D" impl="::scene2D::Render" type="::fwRender::IRender" autoConnect="yes">
+     * @brief Configuring the Render service.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <service uid="GENERIC_UID_Scene2D" impl="::scene2D::Render" type="::fwRender::IRender" autoConnect="yes">
 
         <scene>
 
@@ -109,55 +134,76 @@ protected:
                     color="darkGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/>
             </adaptor>
 
+            <connect>
+                <signal>adaptorUID/modified</signal>
+                <slot>serviceUid/updateTM</slot>
+            </connect>
+
+            <connect waitForKey="myData">
+                <signal>adaptorUID/modified</signal>
+                <slot>serviceUid/updateTM</slot>
+            </connect>
+
+            <connect waitForKey="myData">
+                <signal>modified</signal><!-- signal for object "myData" -->
+                <slot>serviceUid/updateTM</slot>
+            </connect>
+
         </scene>
 
-    </service>
-    @endverbatim
-    *
-    * - \<scene x="-1100" y="-1.1" width="2500" height="1.2" /\> : Set the scene coordinates
-    *
-    * \b x : mandatory : Set the x coordinate of the top left scene corner
-    *
-    * \b y : mandatory : Set the y coordinate of the top left scene corner
-    *
-    * \b width : mandatory : Set the width of the scene
-    *
-    * \b height : mandatory : Set the height of the scene
-    *
-    * \b antialiasing :  not mandatory : activate scene antialiasing if attribute's value set to 'true'
-    *
-    * - \<viewport id="view1" x="-500" y="-1.1" width="500" height="1.2" /\> : Set a viewport coordinates
-    *
-    * \b id : mandatory : Set the viewport id
-    *
-    * \b x : mandatory : Set the x coordinate of the top left viewport corner
-    *
-    * \b y : mandatory : Set the y coordinate of the top left viewport corner
-    *
-    * \b width : mandatory : Set the width of the viewport
-    *
-    * \b height : mandatory : Set the height of the viewport
-    *
-    * - \<axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" /\> : Set an axis specifications
-    *
-    * \b id : mandatory : Set the axis id
-    *
-    * \b origin : mandatory : Set the axis origin
-    *
-    * \b scale : mandatory : Set the axis scale
-    *
-    * \b scaleType : mandatory : Set the axis scaleType
-    *
-    * - \<adaptor id="grid" class="::scene2D::adaptor::GridFromFloat" objectId="myData"\> : Set an adaptor
-    *
-    * \b id : mandatory : Set the adaptor id
-    *
-    * \b class : mandatory : Set the adaptor type
-    *
-    * \b objectId : mandatory : Set the adaptor related object id
-    *
-    * \b uid : no mandatory : Set the adaptor uid
-    */
+       </service>
+       @endcode
+     *
+     * - \<scene x="-1100" y="-1.1" width="2500" height="1.2" /\> : Set the scene coordinates
+     *
+     * \b x : mandatory : Set the x coordinate of the top left scene corner
+     *
+     * \b y : mandatory : Set the y coordinate of the top left scene corner
+     *
+     * \b width : mandatory : Set the width of the scene
+     *
+     * \b height : mandatory : Set the height of the scene
+     *
+     * \b antialiasing :  not mandatory : activate scene antialiasing if attribute's value set to 'true'
+     *
+     * - \<viewport id="view1" x="-500" y="-1.1" width="500" height="1.2" /\> : Set a viewport coordinates
+     *
+     * \b id : mandatory : Set the viewport id
+     *
+     * \b x : mandatory : Set the x coordinate of the top left viewport corner
+     *
+     * \b y : mandatory : Set the y coordinate of the top left viewport corner
+     *
+     * \b width : mandatory : Set the width of the viewport
+     *
+     * \b height : mandatory : Set the height of the viewport
+     *
+     * - \<axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" /\> : Set an axis specifications
+     *
+     * \b id : mandatory : Set the axis id
+     *
+     * \b origin : mandatory : Set the axis origin
+     *
+     * \b scale : mandatory : Set the axis scale
+     *
+     * \b scaleType : mandatory : Set the axis scaleType
+     *
+     * - \<adaptor id="grid" class="::scene2D::adaptor::GridFromFloat" objectId="myData"\> : Set an adaptor
+     *
+     * \b id : mandatory : Set the adaptor id
+     *
+     * \b class : mandatory : Set the adaptor type
+     *
+     * \b objectId : mandatory : Set the adaptor related object id
+     *
+     * \b uid : no mandatory : Set the adaptor uid
+     *
+     *  - \b connect : not mandatory, connects signal to slot
+     *   - \b waitForKey : not mandatory, defines the required object key for the signal/slot connection
+     *   - \b signal : mandatory, must be signal holder UID, followed by '/', followed by signal name. To use the
+     *        object (defined by waitForKey) signal, you don't have to write object uid, only the signal name.
+     *   - \b slot : mandatory, must be slot holder UID, followed by '/', followed by slot name
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Call startContext to set the scene, the viewport and the view, and add'em to the QtContainer and start the adaptors
@@ -167,13 +213,11 @@ protected:
     /// Do nothing.
     SCENE2D_API void updating()    throw ( ::fwTools::Failed );
 
-    /// If the message is ADDED_KEYS, call the startAdaptorsFromComposite function to start all the adaptors contained
-    //  in the message composite.
-    SCENE2D_API void receiving( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    /// ToDo IM
     SCENE2D_API void swapping()    throw ( ::fwTools::Failed );
 
+    /// Start/stop adaptors
+    SCENE2D_API void swapping(const KeyType& key) throw(::fwTools::Failed);
+
     /// Stop all the adaptors attached to the render related composite, stop all those rattached to the objects contained
     //  by the render related composite, clear the maps and call stopContext().
     SCENE2D_API void stopping()    throw ( ::fwTools::Failed );
@@ -181,23 +225,29 @@ protected:
 private:
 
     /// A ConfigurationElement type representing a configuration.
-    typedef SPTR(::fwRuntime::ConfigurationElement) ConfigurationType;
+    typedef SPTR (::fwRuntime::ConfigurationElement) ConfigurationType;
+
+    /// Map used to reference input objects
+    typedef std::map< std::string, ::fwData::Object::csptr > ConstObjectMapType;
 
     /// An internal class to store adaptors representations.
-    class SceneAdaptor2D {
+    class SceneAdaptor2D
+    {
 
-        public:
+    public:
 
-        /// Basic construtor, do nothing.
+        /// Basic constructor, do nothing.
         SceneAdaptor2D()
-        { }
+        {
+        }
 
         /// Basic destructor, do nothing.
         ~SceneAdaptor2D()
-        { }
+        {
+        }
 
         /// Get the related service.
-        SPTR (adaptor::IAdaptor) getService()
+        SPTR (adaptor::IAdaptor) getService() const
         {
             return m_service.lock();
         }
@@ -239,34 +289,50 @@ private:
     void configureAdaptor ( ConfigurationType _conf );
 
     /// Get all the objects of the render related composite, and start all their related adaptors.
-    void startAdaptorsFromComposite( SPTR(::fwData::Composite) _composite);
+    void startAdaptorsFromComposite(const ConstObjectMapType& objects);
 
     /// Get all the objects of the render related composite, and stop all their related adaptors.
-    void stopAdaptorsFromComposite( SPTR(::fwData::Composite) _composite);
+    void stopAdaptorsFromComposite(const ConstObjectMapType& objects);
 
     /// Get all the objects of the render related composite, and swap all their related adaptors.
-    void swapAdaptorsFromComposite( SPTR(::fwData::Composite) _composite);
+    void swapAdaptorsFromComposite(const ::fwData::Composite::ContainerType& objects);
 
     /// Get the SceneAdaptor2D related to the _adaptorID key in the m_adaptorID2SceneAdaptor2D map, add a service corresponding to _object,
     ///  set its render, its configuration, configure it, star it, check if its zValue is unique, store it in the m_zValue2AdaptorID map.
-    void startAdaptor(AdaptorIDType _adaptorID, SPTR(::fwData::Object) _object);
+    void startAdaptor(const AdaptorIDType& _adaptorID, const CSPTR(::fwData::Object)& _object);
 
     /// Swap the SceneAdaptor2D to _object.
-    void swapAdaptor(AdaptorIDType _adaptorID, SPTR(::fwData::Object) _object);
+    void swapAdaptor(const AdaptorIDType& _adaptorID, const SPTR(::fwData::Object)& _object);
 
     /// Stops the adaptor service, unregister it, reset it and erase the SceneAdaptor2D in
     ////  the m_adaptorID2SceneAdaptor2D map.
-    void stopAdaptor(AdaptorIDType _adaptorID);
+    void stopAdaptor(const AdaptorIDType& _adaptorID);
+
+    /// Creates the connection if the required key is contained in the composite
+    void connectAfterWait(const ::fwData::Composite::ContainerType& objects);
+
+    /// Disconnects the connection based on a object key
+    void disconnect(const ::fwData::Composite::ContainerType& objects);
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects,
+                       ::fwData::Composite::ContainerType oldObjects);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
 
     typedef std::map< ObjectIDType, std::vector<AdaptorIDType> > ObjectsID2AdaptorIDVector;
 
     /// Map of std::vector<AdaptorIDType> referenced by ObjectIDType;
     ObjectsID2AdaptorIDVector m_objectsID2AdaptorIDVector;
-    typedef std::map< AdaptorIDType, SceneAdaptor2D > AdaptorID2SceneAdaptor2D ;
+    typedef std::map< AdaptorIDType, SceneAdaptor2D > AdaptorID2SceneAdaptor2D;
 
     /// Map of SceneAdaptor2D referenced by AdaptorIDType;
     AdaptorID2SceneAdaptor2D m_adaptorID2SceneAdaptor2D;
-    typedef std::map< ObjectIDType, SPTR(::fwData::Object) > ObjectID2Object ;
+    typedef std::map< ObjectIDType, SPTR(::fwData::Object) > ObjectID2Object;
 
     /// Map of SPTR(::fwData::Object) referenced by ObjectIDType;
     ObjectID2Object m_objectID2Object;
@@ -285,22 +351,36 @@ private:
     ::scene2D::data::Coord m_sceneWidth;
 
     /// The scene.
-    QGraphicsScene * m_scene;
+    QGraphicsScene* m_scene;
 
     /// The view.
-    Scene2DGraphicsView * m_view;
+    Scene2DGraphicsView* m_view;
 
     /// If antialiasing is requested (deactivated by default because of a potential lack of performance)
     bool m_antialiasing;
 
     /// How the scene should behave on view resize events
     Qt::AspectRatioMode m_aspectRatioMode;
-};
 
+    /// Signal/ Slot connection
+    ::fwCom::helper::SigSlotConnection m_connections;
+
+    typedef std::vector< ::fwRuntime::ConfigurationElement::sptr > ConnectConfigType;
+    /// vector containing all the connections configurations
+    ConnectConfigType m_connect;
+    /// vector containing all the proxy configurations
+    ConnectConfigType m_proxies;
 
+    typedef std::map< std::string, ::fwCom::helper::SigSlotConnection > ObjectConnectionsMapType;
+    /// map containing the object key/connection relation
+    ObjectConnectionsMapType m_objectConnections;
+
+    /// Map to register proxy connections
+    ::fwServices::helper::Config::ProxyConnectionsMapType m_proxyMap;
+};
 
 } // namespace scene2D
 
 
-#endif // _SCENE2D_RENDER_HPP_
+#endif // __SCENE2D_RENDER_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/Scene2DGraphicsView.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/Scene2DGraphicsView.hpp
index fc30228..072b2a4 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/Scene2DGraphicsView.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/Scene2DGraphicsView.hpp
@@ -1,20 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_SCENE2DGRAPHICVIEW_HPP_
-#define _SCENE2D_SCENE2DGRAPHICVIEW_HPP_
+#ifndef __SCENE2D_SCENE2DGRAPHICSVIEW_HPP__
+#define __SCENE2D_SCENE2DGRAPHICSVIEW_HPP__
+
+#include "scene2D/config.hpp"
+#include "scene2D/data/Viewport.hpp"
+#include "scene2D/data/Event.hpp"
 
 #include <QGraphicsView>
 #include <QResizeEvent>
 #include <QGraphicsScene>
 #include <QPaintEvent>
 
-#include "scene2D/config.hpp"
-#include "scene2D/data/Viewport.hpp"
-#include "scene2D/data/Event.hpp"
 
 namespace scene2D
 {
@@ -23,16 +24,16 @@ class Render;
 
 class SCENE2D_CLASS_API Scene2DGraphicsView : public QGraphicsView
 {
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
     SCENE2D_API Scene2DGraphicsView(QGraphicsScene* scene, QWidget* widget);
 
     /// Events
 
     SCENE2D_API void keyPressEvent(QKeyEvent* _event);
-    
+
     SCENE2D_API void keyReleaseEvent(QKeyEvent* _event);
 
     SCENE2D_API void resizeEvent(QResizeEvent *_event);
@@ -55,7 +56,7 @@ public :
 
     SCENE2D_API void setSceneRender( SPTR(::scene2D::Render) sceneRender );
 
-protected :
+protected:
 
     WPTR(::scene2D::data::Viewport) m_viewport;
     WPTR(::scene2D::Render) m_scene2DRender;
@@ -69,5 +70,5 @@ protected :
 } // namespace scene2D
 
 
-#endif // _SCENE2D_SCENE2DGRAPHICVIEW_HPP_
+#endif // __SCENE2D_SCENE2DGRAPHICSVIEW_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Axis.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Axis.hpp
index b5152df..3930e0c 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Axis.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Axis.hpp
@@ -1,14 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_AXIS_HPP_
-#define _SCENE2D_AXIS_HPP_
+#ifndef __SCENE2D_ADAPTOR_AXIS_HPP__
+#define __SCENE2D_ADAPTOR_AXIS_HPP__
 
-#include <scene2D/config.hpp>
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/config.hpp"
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -21,7 +21,7 @@ class SCENE2D_CLASS_API Axis : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Axis)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Axis)(::scene2D::adaptor::IAdaptor) );
 
     SCENE2D_API Axis() throw();
     SCENE2D_API virtual ~Axis() throw();
@@ -32,7 +32,6 @@ protected:
     void doStop() throw( ::fwTools::Failed);
     void doSwap() throw( ::fwTools::Failed);
     void doUpdate() throw( ::fwTools::Failed);
-    void doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed);
     void configuring() throw( ::fwTools::Failed);
 
     /// Manage the given events
@@ -90,10 +89,8 @@ private:
     ::fwCom::Connection m_connection;
 };
 
-
 }   // namespace adaptor
-
 }   // namespace scene2D
 
-#endif
+#endif //__SCENE2D_ADAPTOR_AXIS_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/CurvedHistogram.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/CurvedHistogram.hpp
index b303010..ee9e7b0 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/CurvedHistogram.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/CurvedHistogram.hpp
@@ -1,13 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_CURVEDHISTOGRAM_HPP_
-#define _SCENE2D_ADAPTOR_CURVEDHISTOGRAM_HPP_
+#ifndef __SCENE2D_ADAPTOR_CURVEDHISTOGRAM_HPP__
+#define __SCENE2D_ADAPTOR_CURVEDHISTOGRAM_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
+
+#include <fwData/Histogram.hpp>
 
 namespace scene2D
 {
@@ -20,12 +22,12 @@ namespace adaptor
  *
  * Configuration example:
  *
-   @verbatim
+   @code{.xml}
    <adaptor id="histogram" class="::scene2D::adaptor::CurvedHistogram" objectId="myCurvedHistogram">
        <config xAxis="xAxis" yAxis="axeCurvedHistogramY" borderColor="lightGray" innerColor="gray" opacity="0.25"
                zValue="6" histogramPointUID="HistogramPointID" borderWidth="2.0" />
    </adaptor>
-   @endverbatim
+   @endcode
  *
  * - \b innerColor         : the background color of the histogram
  * - \b borderColor        : the color of the histogram border
@@ -39,100 +41,99 @@ namespace adaptor
  */
 class SCENE2D_CLASS_API CurvedHistogram : public ::scene2D::adaptor::IAdaptor
 {
-    public:
-        fwCoreServiceClassDefinitionsMacro( (CurvedHistogram)( ::scene2D::adaptor::IAdaptor) );
+public:
+    fwCoreServiceClassDefinitionsMacro( (CurvedHistogram)( ::scene2D::adaptor::IAdaptor) );
 
-        typedef ::scene2D::adaptor::IAdaptor::Point2DType Point;
-        typedef std::vector< Point > Points;
+    typedef ::scene2D::adaptor::IAdaptor::Point2DType Point;
+    typedef std::vector< Point > Points;
 
-        SCENE2D_API CurvedHistogram() throw();
-        SCENE2D_API virtual ~CurvedHistogram() throw();
+    SCENE2D_API CurvedHistogram() throw();
+    SCENE2D_API virtual ~CurvedHistogram() throw();
 
-    protected:
-        SCENE2D_API void configuring()  throw ( ::fwTools::Failed );
-        SCENE2D_API void doStart()      throw ( ::fwTools::Failed );
-        SCENE2D_API void doUpdate()     throw ( ::fwTools::Failed );
-        SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-        SCENE2D_API void doSwap()       throw ( ::fwTools::Failed );
-        SCENE2D_API void doStop()       throw ( ::fwTools::Failed );
+protected:
+    SCENE2D_API void configuring()  throw ( ::fwTools::Failed );
+    SCENE2D_API void doStart()      throw ( ::fwTools::Failed );
+    SCENE2D_API void doUpdate()     throw ( ::fwTools::Failed );
+    SCENE2D_API void doSwap()       throw ( ::fwTools::Failed );
+    SCENE2D_API void doStop()       throw ( ::fwTools::Failed );
 
-        SCENE2D_API void processInteraction( SPTR(::scene2D::data::Event) _event );
+    SCENE2D_API void processInteraction( SPTR(::scene2D::data::Event) _event );
 
-        /// Ratio used for vertical scaling (default value: 1.1)
-        static const float SCALE;
+    /// Ratio used for vertical scaling (default value: 1.1)
+    static const float SCALE;
 
-        /// The number of points between to points of the final Bezier curve to compute
-        static const float NB_POINTS_BEZIER;
+    /// The number of points between to points of the final Bezier curve to compute
+    static const float NB_POINTS_BEZIER;
 
-    private:
+private:
 
-        Points getControlPoints( ::fwData::Histogram::sptr _histogram );
+    Points getControlPoints(const ::fwData::Histogram::sptr& _histogram ) const;
 
-        Points getBSplinePoints( Points & _controlPoints );
+    Points getBSplinePoints( const Points & _controlPoints ) const;
 
-        Points getResampledBSplinePoints( Points & _bSplinePoints );
+    Points getResampledBSplinePoints( const Points & _bSplinePoints ) const;
 
-        void buildBSplineFromPoints( Points & _bSplinePoints );
+    void buildBSplineFromPoints( Points & _bSplinePoints );
 
-        void computePointToPathLengthMapFromBSplinePoints( Points & _bSplinePoints );
+    void computePointToPathLengthMapFromBSplinePoints( Points & _bSplinePoints );
 
-        /// Update the value of m_ordinateValueUID according to the value pointed by mouse cursor.
-        void updateCurrentPoint( ::scene2D::data::Event::sptr _event );
+    /// Update the value of m_ordinateValueUID according to the value pointed by mouse cursor.
+    void updateCurrentPoint( const ::scene2D::data::Event::sptr& _event );
 
-        /// Build and add a part of histogram's border, according to the given path.
-        void addBorderItem( const QPainterPath & _path );
+    /// Build and add a part of histogram's border, according to the given path.
+    void addBorderItem( const QPainterPath & _path );
 
-        /// Build and add a part of the histogram, according to the given path.
-        void addInnerItem( const QPainterPath & _path );
+    /// Build and add a part of the histogram, according to the given path.
+    void addInnerItem( const QPainterPath & _path );
 
 
-        Points linearInterpolation( const Point _p1, const Point _p2 );
+    Points linearInterpolation( const Point _p1, const Point _p2 );
 
-        Points cosinusInterpolation( const Point _p0, const Point _p1 );
+    Points cosinusInterpolation( const Point _p0, const Point _p1 );
 
-        Points quadraticInterpolation( const Point _p0, const Point _p1, const Point _p2 );
+    Points quadraticInterpolation( const Point _p0, const Point _p1, const Point _p2 );
 
-        Points cubicInterpolation(
-                const Point _p0, const Point _p1, const Point _p2, const Point _p3 );
+    Points cubicInterpolation(
+        const Point _p0, const Point _p1, const Point _p2, const Point _p3 );
 
 
-        // Map the absciss of the points to the corresponding length within the path.
-        std::map<double, double> m_positionsToPathLength;
+    // Map the absciss of the points to the corresponding length within the path.
+    std::map<double, double> m_positionsToPathLength;
 
-        /// Color used for graphic histogram's border color
-        QPen m_borderColor;
+    /// Color used for graphic histogram's border color
+    QPen m_borderColor;
 
-        // Color used for graphic histogram's inner color. If no value is supplied in the configuration,
-        // item's inner will be transparent
-        QPen m_innerColor;
+    // Color used for graphic histogram's inner color. If no value is supplied in the configuration,
+    // item's inner will be transparent
+    QPen m_innerColor;
 
-        /// Inner color.
-        QBrush m_brush;
+    /// Inner color.
+    QBrush m_brush;
 
-        // A Qt painter that is used to build a curve representing the shape of the histogram.
-        // Note that the histogram won't be built thanks to this path because of a lack of performance.
-        // In other words, this painter path won't be used to build a graphic item that will be added to 
-        // a Qt graphics scene. The graphic representation of the histogram will composed of multiple items
-        // build thanks to painters like this one, because it improves significantly the rendering performance.
-        // This painter path will be used to provide information about the hsitogram: for instance, it will help 
-        // to retrieve the coordinates of path's points.
-        QPainterPath * m_painterPath;
+    // A Qt painter that is used to build a curve representing the shape of the histogram.
+    // Note that the histogram won't be built thanks to this path because of a lack of performance.
+    // In other words, this painter path won't be used to build a graphic item that will be added to
+    // a Qt graphics scene. The graphic representation of the histogram will composed of multiple items
+    // build thanks to painters like this one, because it improves significantly the rendering performance.
+    // This painter path will be used to provide information about the hsitogram: for instance, it will help
+    // to retrieve the coordinates of path's points.
+    QPainterPath * m_painterPath;
 
-        /// Width of histram's border
-        float m_borderWidth;
+    /// Width of histram's border
+    float m_borderWidth;
 
-        /// Current vertical scaling ratio
-        float m_scale;
+    /// Current vertical scaling ratio
+    float m_scale;
 
-        // Graphis items contained into m_items are also added to this group item,
-        // which is then added to the scene.
-        // (This is the only graphic item which has to be added into the scene).
-        QGraphicsItemGroup* m_layer;
+    // Graphis items contained into m_items are also added to this group item,
+    // which is then added to the scene.
+    // (This is the only graphic item which has to be added into the scene).
+    QGraphicsItemGroup* m_layer;
 
-        // Curve point at the current index of the histogram pointed by the mouse. This adaptor looks for 
-        // mouse move events: when the mouse cursor is onto the histogram, the corresponding point of the 
-        // histogram is informed into the object this UID is all about.
-        std::string m_histogramPointUID;
+    // Curve point at the current index of the histogram pointed by the mouse. This adaptor looks for
+    // mouse move events: when the mouse cursor is onto the histogram, the corresponding point of the
+    // histogram is informed into the object this UID is all about.
+    std::string m_histogramPointUID;
 };
 
 
@@ -140,5 +141,5 @@ class SCENE2D_CLASS_API CurvedHistogram : public ::scene2D::adaptor::IAdaptor
 
 }   // namespace scene2D
 
-#endif  // _SCENE2D_ADAPTOR_CURVEDHISTOGRAM_HPP_
+#endif  // __SCENE2D_ADAPTOR_CURVEDHISTOGRAM_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Grid2D.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Grid2D.hpp
index 6029559..3ae4781 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Grid2D.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Grid2D.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_GRID2D_HPP_
-#define _SCENE2D_ADAPTOR_GRID2D_HPP_
+#ifndef __SCENE2D_ADAPTOR_GRID2D_HPP__
+#define __SCENE2D_ADAPTOR_GRID2D_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -20,13 +20,13 @@ class SCENE2D_CLASS_API Grid2D : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Grid2D)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Grid2D)(::scene2D::adaptor::IAdaptor) );
 
     enum LineType
-   {
-      PLAIN,
-      DOTTED
-   };
+    {
+        PLAIN,
+        DOTTED
+    };
 
     /// Constructor, set the x and y spacing to 10
     SCENE2D_API Grid2D() throw();
@@ -36,44 +36,42 @@ public:
 
 protected:
     /**
-    * @brief Configuring the Grid2D adaptor.
-    *
-    * Example of configuration
-    * @verbatim
-    <adaptor id="grid1" class="::scene2D::adaptor::Grid2D" objectId="self">
-        <config xMin="-1100" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1" 
+     * @brief Configuring the Grid2D adaptor.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <adaptor id="grid1" class="::scene2D::adaptor::Grid2D" objectId="self">
+        <config xMin="-1100" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1"
             color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/>
-    </adaptor>
-    @endverbatim
-    * - \<config xMin="-1100" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1"
-    *   color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/\> : Set the config.
-    *
-    * \b xMin : mandatory : Set the minimum x value of the grid.
-    *
-    * \b xMax : mandatory : Set the maximum x value of the grid.
-    *
-    * \b yMin : mandatory : Set the minimum y value of the grid.
-    *
-    * \b yMax : mandatory : Set the maximum y value of the grid.
-    *
-    * \b xSpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in x.
-    *
-    * \b ySpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in y.
-    *
-    * \b color : no mandatory (default value : black) : Set the color of the lines.
-    *
-    * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : 
-    * Set the x Axis of the grid layer.
-    *
-    * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : 
-    * Set the y Axis of the grid layer.
-    *
-    * \b zValue : no mandatory (default value : 0) : Set the zValue of the grid layer 
-    * (the higher the zValue, the higher the layer is).
-    *
-    * \b viewportUID : mandatory : a viewport that help us to manage the scaling of the graphic object
-    *
-    */
+       </adaptor>
+       @endcode
+     * - \<config xMin="-1100" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1"
+     *   color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/\> : Set the config.
+     *
+     * \b xMin : mandatory : Set the minimum x value of the grid.
+     *
+     * \b xMax : mandatory : Set the maximum x value of the grid.
+     *
+     * \b yMin : mandatory : Set the minimum y value of the grid.
+     *
+     * \b yMax : mandatory : Set the maximum y value of the grid.
+     *
+     * \b xSpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in x.
+     *
+     * \b ySpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in y.
+     *
+     * \b color : no mandatory (default value : black) : Set the color of the lines.
+     *
+     * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) :
+     * Set the x Axis of the grid layer.
+     *
+     * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) :
+     * Set the y Axis of the grid layer.
+     *
+     * \b zValue : no mandatory (default value : 0) : Set the zValue of the grid layer
+     * (the higher the zValue, the higher the layer is).
+     *
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Initialize the layer, set the pen style to DashLine and call the draw() function.
@@ -83,9 +81,6 @@ protected:
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
 
     /// Do nothing.
-    SCENE2D_API void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    /// Do nothing.
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
 
     /// Clean the lines vector and remove the layer from the scene.
@@ -96,20 +91,20 @@ protected:
 
 private:
 
-    /// Calculate the x/y start/end values, create the lines, set'em m_pen, push'em back in 
-    /// the m_lines vector, add'em to the layer, set the layer position and zValue and add it 
+    /// Calculate the x/y start/end values, create the lines, set'em m_pen, push'em back in
+    /// the m_lines vector, add'em to the layer, set the layer position and zValue and add it
     /// to the scene.
     void draw();
 
     ///
     float getXStartVal();
-    
+
     ///
     float getXEndVal();
-    
+
     ///
     float getYStartVal();
-    
+
     ///
     float getYEndVal();
 
@@ -136,5 +131,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_GRID2D_HPP_
+#endif // __SCENE2D_ADAPTOR_GRID2D_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/GridFromFloat.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/GridFromFloat.hpp
index 262e141..472eb1d 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/GridFromFloat.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/GridFromFloat.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_GRIDFROMFLOAT_HPP_
-#define _SCENE2D_ADAPTOR_GRIDFROMFLOAT_HPP_
+#ifndef __SCENE2D_ADAPTOR_GRIDFROMFLOAT_HPP__
+#define __SCENE2D_ADAPTOR_GRIDFROMFLOAT_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -16,17 +16,20 @@ namespace adaptor
 
 
 
+/**
+ * @brief Create a Grid in the scen2D with float min/max values
+ */
 class SCENE2D_CLASS_API GridFromFloat : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (GridFromFloat)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (GridFromFloat)(::scene2D::adaptor::IAdaptor) );
 
     enum LineType
-   {
-      PLAIN,
-      DOTTED
-   };
+    {
+        PLAIN,
+        DOTTED
+    };
 
     /// Constructor, set the x and y spacing to 10
     SCENE2D_API GridFromFloat() throw();
@@ -34,42 +37,50 @@ public:
     /// Basic destructor, do nothing
     SCENE2D_API virtual ~GridFromFloat() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Object::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
     /**
-    * @brief Configuring the GridFromFloat adaptor.
-    *
-    * Example of configuration
-    * @verbatim
-    <adaptor id="grid1" class="::scene2D::adaptor::GridFromFloat" objectId="myData">
+     * @brief Configuring the GridFromFloat adaptor.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <adaptor id="grid1" class="::scene2D::adaptor::GridFromFloat" objectId="myData">
         <config xMin="-750" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1" color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/>
-    </adaptor>
-    @endverbatim
-    *
-    * - objectId : ::fwData::Float
-    *
-    * - \<config xMin="-750" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1" color="lightGray"
-    * xAxis="xAxis" yAxis="yAxis" zValue="1"/\> : Set the config.
-    *
-    * \b xMin : mandatory : Set the minimum x value of the grid.
-    *
-    * \b xMax : mandatory : Set the maximum x value of the grid.
-    *
-    * \b yMin : mandatory : Set the minimum y value of the grid.
-    *
-    * \b yMax : mandatory : Set the maximum y value of the grid.
-    *
-    * \b xSpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in x.
-    *
-    * \b ySpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in y.
-    *
-    * \b color : no mandatory (default value : black) : Set the color of the lines.
-    *
-    * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the x Axis of the grid layer.
-    *
-    * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the y Axis of the grid layer.
-    *
-    * \b zValue : no mandatory (default value : 0) : Set the zValue of the grid layer (the higher the zValue, the higher the layer is).
-    */
+       </adaptor>
+       @endcode
+     *
+     * - objectId : ::fwData::Float
+     *
+     * - \<config xMin="-750" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1" color="lightGray"
+     * xAxis="xAxis" yAxis="yAxis" zValue="1"/\> : Set the config.
+     *
+     * \b xMin : mandatory : Set the minimum x value of the grid.
+     *
+     * \b xMax : mandatory : Set the maximum x value of the grid.
+     *
+     * \b yMin : mandatory : Set the minimum y value of the grid.
+     *
+     * \b yMax : mandatory : Set the maximum y value of the grid.
+     *
+     * \b xSpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in x.
+     *
+     * \b ySpacing : no mandatory (default value : 10) : Set the grid spacing (space between 2 consecutive lines) in y.
+     *
+     * \b color : no mandatory (default value : black) : Set the color of the lines.
+     *
+     * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the x Axis of the grid layer.
+     *
+     * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the y Axis of the grid layer.
+     *
+     * \b zValue : no mandatory (default value : 0) : Set the zValue of the grid layer (the higher the zValue, the higher the layer is).
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Initialize the layer, set the pen style to DashLine and call the draw() function.
@@ -78,9 +89,6 @@ protected:
     /// Do nothing.
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
 
-    /// If a VALUE_IS_MODIFIED message is catched, check if the float object isn't negative and if not, set the xSpacing its value.
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
     /// Do nothing.
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
 
@@ -109,5 +117,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_GRIDFROMFLOAT_HPP_
+#endif // __SCENE2D_ADAPTOR_GRIDFROMFLOAT_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Histogram.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Histogram.hpp
index 3c995d9..72b9857 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Histogram.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Histogram.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_HISTOGRAM_HPP_
-#define _SCENE2D_ADAPTOR_HISTOGRAM_HPP_
+#ifndef __SCENE2D_ADAPTOR_HISTOGRAM_HPP__
+#define __SCENE2D_ADAPTOR_HISTOGRAM_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 
 namespace scene2D
@@ -21,12 +21,12 @@ namespace adaptor
  *
  * Configuration example:
  *
-   @verbatim
+   @code{.xml}
    <adaptor id="histogram" class="::scene2D::adaptor::Histogram" objectId="myHistogram">
        <config xAxis="xAxis" yAxis="axeHistogramY" color="gray" opacity="0.25" zValue="5"/>
    </adaptor>
-   @endverbatim
- * 
+   @endcode
+ *
  * \b color (mandatory)     : the background color of the histogram
  *
  * \b opacity (mandatory)   : the opacity of the histogram (from 0.0 to 1.0)
@@ -39,47 +39,46 @@ namespace adaptor
  */
 class SCENE2D_CLASS_API Histogram : public ::scene2D::adaptor::IAdaptor
 {
-    public:
-        fwCoreServiceClassDefinitionsMacro( (Histogram)( ::scene2D::adaptor::IAdaptor) );
-
-        SCENE2D_API Histogram() throw();
-        SCENE2D_API virtual ~Histogram() throw();
-
-    protected:
-        SCENE2D_API void configuring()  throw ( ::fwTools::Failed );
-        SCENE2D_API void doStart()      throw ( ::fwTools::Failed );
-        SCENE2D_API void doUpdate()     throw ( ::fwTools::Failed );
-        SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-        SCENE2D_API void doSwap()       throw ( ::fwTools::Failed );
-        SCENE2D_API void doStop()       throw ( ::fwTools::Failed );
-
-        SCENE2D_API void processInteraction( SPTR(::scene2D::data::Event) _event );
-
-        /// Ratio used for vertical scaling (default value: 1.1)
-        static const float SCALE;
-        
-    private:
-        /// Update the value of m_ordinateValueUID according to the value pointed by mouse cursor.
-        void updateCurrentPoint( ::scene2D::data::Event::sptr _event );
-        
-        /// Color used for graphic item's inner and border color
-        QPen m_color;
-
-        /// Opacity
-        float m_opacity;
-
-        /// Current vertical scaling ratio
-        float m_scale;
-
-        // Graphis items contained into m_items are also added to this group item, 
-        // which is then added to the scene.
-        // (This is the only graphic item which has to be added into the scene).
-        QGraphicsItemGroup* m_layer;
-
-        // Curve point at the current index of the histogram pointed by the mouse. This adaptor looks for 
-        // mouse move events: when the mouse cursor is onto the histogram, the corresponding point of the 
-        // histogram is informed into the object this UID is all about.
-        std::string m_histogramPointUID;
+public:
+    fwCoreServiceClassDefinitionsMacro( (Histogram)( ::scene2D::adaptor::IAdaptor) );
+
+    SCENE2D_API Histogram() throw();
+    SCENE2D_API virtual ~Histogram() throw();
+
+protected:
+    SCENE2D_API void configuring()  throw ( ::fwTools::Failed );
+    SCENE2D_API void doStart()      throw ( ::fwTools::Failed );
+    SCENE2D_API void doUpdate()     throw ( ::fwTools::Failed );
+    SCENE2D_API void doSwap()       throw ( ::fwTools::Failed );
+    SCENE2D_API void doStop()       throw ( ::fwTools::Failed );
+
+    SCENE2D_API void processInteraction( SPTR(::scene2D::data::Event) _event );
+
+    /// Ratio used for vertical scaling (default value: 1.1)
+    static const float SCALE;
+
+private:
+    /// Update the value of m_ordinateValueUID according to the value pointed by mouse cursor.
+    void updateCurrentPoint( ::scene2D::data::Event::sptr _event );
+
+    /// Color used for graphic item's inner and border color
+    QPen m_color;
+
+    /// Opacity
+    float m_opacity;
+
+    /// Current vertical scaling ratio
+    float m_scale;
+
+    // Graphis items contained into m_items are also added to this group item,
+    // which is then added to the scene.
+    // (This is the only graphic item which has to be added into the scene).
+    QGraphicsItemGroup* m_layer;
+
+    // Curve point at the current index of the histogram pointed by the mouse. This adaptor looks for
+    // mouse move events: when the mouse cursor is onto the histogram, the corresponding point of the
+    // histogram is informed into the object this UID is all about.
+    std::string m_histogramPointUID;
 };
 
 
@@ -87,5 +86,5 @@ class SCENE2D_CLASS_API Histogram : public ::scene2D::adaptor::IAdaptor
 
 }   // namespace scene2D
 
-#endif  // _SCENE2D_ADAPTOR_HISTOGRAM_HPP_
+#endif  // __SCENE2D_ADAPTOR_HISTOGRAM_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramCursor.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramCursor.hpp
index bc9c4b7..26e4b8e 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramCursor.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramCursor.hpp
@@ -1,18 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_HISTOGRAMCURSOR_HPP_
-#define _SCENE2D_HISTOGRAMCURSOR_HPP_
+#ifndef __SCENE2D_ADAPTOR_HISTOGRAMCURSOR_HPP__
+#define __SCENE2D_ADAPTOR_HISTOGRAMCURSOR_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
+#include "scene2D/data/Viewport.hpp"
 
 #include <QGraphicsTextItem>
 
-#include "scene2D/data/Viewport.hpp"
-
 namespace scene2D
 {
 namespace adaptor
@@ -42,7 +41,7 @@ class HistogramCursor : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (HistogramCursor)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (HistogramCursor)(::scene2D::adaptor::IAdaptor) );
     SCENE2D_API HistogramCursor() throw();
     SCENE2D_API virtual ~HistogramCursor() throw();
 
@@ -50,7 +49,6 @@ protected:
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
     SCENE2D_API void doStart()    throw ( ::fwTools::Failed );
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
     SCENE2D_API void doStop()    throw ( ::fwTools::Failed );
 
@@ -97,5 +95,5 @@ private:
 }   // namespace adaptor
 }   // namespace scene2D
 
-#endif  // _SCENE2D_HISTOGRAMCURSOR_HPP_
+#endif  // __SCENE2D_ADAPTOR_HISTOGRAMCURSOR_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramValue.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramValue.hpp
index ffe7bfa..578e5ae 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramValue.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/HistogramValue.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_HISTOGRAMVALUE_HPP_
-#define _SCENE2D_HISTOGRAMVALUE_HPP_
+#ifndef __SCENE2D_ADAPTOR_HISTOGRAMVALUE_HPP__
+#define __SCENE2D_ADAPTOR_HISTOGRAMVALUE_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/data/Viewport.hpp"
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 #include <QGraphicsTextItem>
 
-#include "scene2D/data/Viewport.hpp"
 
 namespace scene2D
 {
@@ -42,7 +42,7 @@ class HistogramValue : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (HistogramValue)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (HistogramValue)(::scene2D::adaptor::IAdaptor) );
     SCENE2D_API HistogramValue() throw();
     SCENE2D_API virtual ~HistogramValue() throw();
 
@@ -50,7 +50,6 @@ protected:
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
     SCENE2D_API void doStart()    throw ( ::fwTools::Failed );
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
     SCENE2D_API void doStop()    throw ( ::fwTools::Failed );
 
@@ -95,5 +94,5 @@ private:
 }   // namespace adaptor
 }   // namespace scene2D
 
-#endif  // _SCENE2D_HISTOGRAMVALUEHPP_
+#endif  // __SCENE2D_ADAPTOR_HISTOGRAMVALUE_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/IAdaptor.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/IAdaptor.hpp
index d178bd1..6365bdd 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/IAdaptor.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/IAdaptor.hpp
@@ -1,26 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_IADAPTOR_HPP_
-#define _SCENE2D_ADAPTOR_IADAPTOR_HPP_
+#ifndef __SCENE2D_ADAPTOR_IADAPTOR_HPP__
+#define __SCENE2D_ADAPTOR_IADAPTOR_HPP__
 
-#include <fwServices/IService.hpp>
-
-#include "scene2D/config.hpp"
 #include "scene2D/Render.hpp"
+#include "scene2D/config.hpp"
 #include "scene2D/data/Axis.hpp"
 #include "scene2D/data/Event.hpp"
 
-
+#include <fwServices/IService.hpp>
 
 namespace scene2D
 {
 namespace adaptor
 {
 
+/**
+ * @brief Root class for all scene2D adaptors.
+ */
 class SCENE2D_CLASS_API IAdaptor : public ::fwServices::IService
 {
 
@@ -38,22 +39,22 @@ public:
     // <width, height>
     typedef std::pair<float, float> Scene2DRatio;
 
-    fwCoreServiceClassDefinitionsMacro ( (IAdaptor)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IAdaptor)(::fwServices::IService) );
 
     /// Set the zValue.
     SCENE2D_API void setZValue(float _zValue);
 
     /// Get the zValue.
-    SCENE2D_API float getZValue();
+    SCENE2D_API float getZValue() const;
 
-    /// Set the render that manage the IAdaptor.
+    /// Set the render that manages the IAdaptor.
     SCENE2D_API void setScene2DRender( ::scene2D::Render::sptr _scene2DRender);
 
-    /// Get the render that manage the IAdaptor.
-    SCENE2D_API SPTR(::scene2D::Render) getScene2DRender();
+    /// Get the render that manages the IAdaptor.
+    SCENE2D_API SPTR(::scene2D::Render) getScene2DRender() const;
 
     /// Get the object associated to the IAdaptor.
-    SCENE2D_API ::fwData::Object::sptr getRegisteredObject(::scene2D::Render::ObjectIDType _objectId);
+    SCENE2D_API ::fwData::Object::sptr getRegisteredObject(::scene2D::Render::ObjectIDType _objectId) const;
 
     /// Interact with the mouse events catched on the IAdaptor (virtual function, its behavior is only defined in the specific adaptors).
     SCENE2D_API virtual void processInteraction( ::scene2D::data::Event::sptr _event );
@@ -66,9 +67,8 @@ protected:
     /// Basic destructor, do nothing.
     SCENE2D_API virtual ~IAdaptor() throw();
 
-
     /// ToDo IM
-    SCENE2D_API virtual void info(std::ostream &_sstream ) ;
+    SCENE2D_API virtual void info(std::ostream& _sstream );
 
     /// Not implemented in IAdaptor but in its subclasses
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
@@ -79,9 +79,6 @@ protected:
     /// Call DoUpdate() function.
     SCENE2D_API void updating() throw ( ::fwTools::Failed );
 
-    /// Call DoUpdate(_msg) function.
-    SCENE2D_API void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
     /// Start and stop the IAdaptor.
     SCENE2D_API void swapping() throw ( ::fwTools::Failed );
 
@@ -95,9 +92,6 @@ protected:
     SCENE2D_API virtual void doUpdate() = 0;
 
     /// Pure virtual -> implemented in the subclasses
-    SCENE2D_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) = 0;
-
-    /// Pure virtual -> implemented in the subclasses
     SCENE2D_API virtual void doSwap() = 0;
 
     /// Pure virtual -> implemented in the subclasses
@@ -105,17 +99,19 @@ protected:
 
     /// Get a pair of doubles (a point), two axis, and convert the pair of doubles values from adaptor
     //  coordinates to scene coordinates
-    SCENE2D_API Point2DType mapAdaptorToScene(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis, ::scene2D::data::Axis::sptr _yAxis);
+    SCENE2D_API Point2DType mapAdaptorToScene(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis,
+                                              ::scene2D::data::Axis::sptr _yAxis);
 
     /// Get a pair of doubles (a point), two axis, and convert the pair of doubles values from scene
     //  coordinates to adaptor coordinates
-    SCENE2D_API Point2DType mapSceneToAdaptor(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis, ::scene2D::data::Axis::sptr _yAxis);
+    SCENE2D_API Point2DType mapSceneToAdaptor(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis,
+                                              ::scene2D::data::Axis::sptr _yAxis);
 
     /// Return the ratio between view's initial size and its current size
-    SCENE2D_API ViewSizeRatio getViewSizeRatio();
+    SCENE2D_API ViewSizeRatio getViewSizeRatio() const;
 
     /// Return the ratio between viewport's initial size and its current size
-    SCENE2D_API ViewportSizeRatio getViewportSizeRatio();
+    SCENE2D_API ViewportSizeRatio getViewportSizeRatio() const;
 
     /// Initialize the source values used for computing view's size ratio.
     SCENE2D_API void initializeViewSize();
@@ -123,7 +119,7 @@ protected:
     /// Initialize the source values used for computing viewport's size ratio.
     SCENE2D_API void initializeViewportSize();
 
-    SCENE2D_API Scene2DRatio getRatio();
+    SCENE2D_API Scene2DRatio getRatio() const;
 
     /// The x Axis.
     SPTR(::scene2D::data::Axis) m_xAxis;
@@ -149,17 +145,24 @@ protected:
     typedef std::vector< ::scene2D::adaptor::IAdaptor::wptr > ManagedAdaptorVector;
 
     /// Return all managed adaptor
-    SCENE2D_API ManagedAdaptorVector & getRegisteredServices() { return m_managedAdaptors; };
+    ManagedAdaptorVector& getRegisteredServices()
+    {
+        return m_managedAdaptors;
+    }
 
     /// Register new adaptor
     SCENE2D_API void registerService( ::scene2D::adaptor::IAdaptor::sptr srv );
 
     /// Unregister all adaptors
     SCENE2D_API void unregisterServices();
+
+    template< class DATATYPE >
+    SPTR(DATATYPE) getSafeInOut(const std::string& key) const;
+
 private:
 
     /// Register automatic connection on object
-    ::fwServices::helper::SigSlotConnection::sptr m_connections;
+    ::fwCom::helper::SigSlotConnection m_connections;
 
     /// All managed adaptors
     ManagedAdaptorVector m_managedAdaptors;
@@ -169,10 +172,25 @@ private:
 
 };
 
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+SPTR(DATATYPE) IAdaptor::getSafeInOut(const std::string& key) const
+{
+    if( ::fwServices::IService::isVersion2() )
+    {
+        return this->getScene2DRender()->getInOut<DATATYPE>(key);
+    }
+    else
+    {
+        return std::dynamic_pointer_cast<DATATYPE>( ::fwTools::fwID::getObject(key) );
+    }
+}
+
+//------------------------------------------------------------------------------
 
 } // namespace adaptor
 } // namespace scene2D
 
-
-#endif // _SCENE2D_ADAPTOR_IADAPTOR_HPP_
+#endif // __SCENE2D_ADAPTOR_IADAPTOR_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Line.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Line.hpp
index ab3fc27..86c819a 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Line.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Line.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_LINE_HPP_
-#define _SCENE2D_ADAPTOR_LINE_HPP_
+#ifndef __SCENE2D_ADAPTOR_LINE_HPP__
+#define __SCENE2D_ADAPTOR_LINE_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -15,17 +15,20 @@ namespace adaptor
 {
 
 
+/**
+ * @brief line adaptor. Draw a line on the scene2D
+ */
 class SCENE2D_CLASS_API Line : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Line)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Line)(::scene2D::adaptor::IAdaptor) );
 
     enum LineType
-   {
-      PLAIN,
-      DOTTED
-   };
+    {
+        PLAIN,
+        DOTTED
+    };
 
     /// Basic constructor, do nothing.
     SCENE2D_API Line() throw();
@@ -35,32 +38,32 @@ public:
 
 protected:
     /**
-    * @brief Configuring the Line adaptor.
-    *
-    * Example of configuration
-    * @verbatim
-    <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
+     * @brief Configuring the Line adaptor.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
         <config x1="-500" x2="500" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" />
-    </adaptor>
-    @endverbatim
-    * - \<config x1="-500" x2="500" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" /\> : Set the config.
-    *
-    * \b x1 : mandatory : Set the line begining coordinate x value.
-    *
-    * \b x2 : mandatory : Set the line ending coordinate x value.
-    *
-    * \b y1 : mandatory : Set the line begining coordinate y value.
-    *
-    * \b y2 : mandatory : Set the line ending coordinate y value.
-    *
-    * \b color : no mandatory (default value : black) : Set the color of the line.
-    *
-    * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the x Axis of the line layer.
-    *
-    * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the y Axis of the line layer.
-    *
-    * \b zValue : no mandatory (default value : 0) : Set the zValue of the line layer (the higher the zValue, the higher the layer is).
-    */
+       </adaptor>
+       @endcode
+     * - \<config x1="-500" x2="500" y1="0" y2="0" color="white" xAxis="xAxis" yAxis="yAxis" zValue="2" /\> : Set the config.
+     *
+     * \b x1 : mandatory : Set the line begining coordinate x value.
+     *
+     * \b x2 : mandatory : Set the line ending coordinate x value.
+     *
+     * \b y1 : mandatory : Set the line begining coordinate y value.
+     *
+     * \b y2 : mandatory : Set the line ending coordinate y value.
+     *
+     * \b color : no mandatory (default value : black) : Set the color of the line.
+     *
+     * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the x Axis of the line layer.
+     *
+     * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the y Axis of the line layer.
+     *
+     * \b zValue : no mandatory (default value : 0) : Set the zValue of the line layer (the higher the zValue, the higher the layer is).
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Initialize the layer and call the draw() function.
@@ -70,9 +73,6 @@ protected:
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
 
     /// Do nothing.
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    /// Do nothing.
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
 
     /// Remove the layer from the scene.
@@ -99,5 +99,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_LINE_HPP_
+#endif // __SCENE2D_ADAPTOR_LINE_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Negato.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Negato.hpp
index 69794ac..0cf85e6 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Negato.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Negato.hpp
@@ -1,19 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_NEGATO_HPP_
-#define _SCENE2D_ADAPTOR_NEGATO_HPP_
-
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#ifndef __SCENE2D_ADAPTOR_NEGATO_HPP__
+#define __SCENE2D_ADAPTOR_NEGATO_HPP__
 
 #include "scene2D/adaptor/IAdaptor.hpp"
 #include "scene2D/data/Coord.hpp"
 
-#include <QImage>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
 #include <QGraphicsItemGroup>
+#include <QImage>
 #include <QPointF>
 
 namespace scene2D
@@ -21,43 +21,79 @@ namespace scene2D
 namespace adaptor
 {
 
-class SCENE2D_CLASS_API Negato : public ::fwComEd::helper::MedicalImageAdaptor, public ::scene2D::adaptor::IAdaptor
+class SCENE2D_CLASS_API Negato : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                 public ::scene2D::adaptor::IAdaptor
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Negato)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Negato)(::scene2D::adaptor::IAdaptor) );
 
     SCENE2D_API Negato() throw();
     SCENE2D_API virtual ~Negato() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_VISIBILITY_MODIFIED_SIG to this::s_UPDATE_VISIBILITY_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_BUFFER_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
     SCENE2D_API void doStart()    throw ( ::fwTools::Failed );
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
     SCENE2D_API void doStop()    throw ( ::fwTools::Failed );
     SCENE2D_API void processInteraction( ::scene2D::data::Event::sptr _event );
 
+
+    /// Called when transfer function points are modified.
+    SCENE2D_API virtual void updatingTFPoints();
+
+    /// Called when transfer function windowing is modified.
+    SCENE2D_API virtual void updatingTFWindowing(double window, double level);
+
 private:
 
-    QImage * createQImage();
-    void updateBufferFromImage( QImage * qimg );
-    void changeImageMinMaxFromCoord( scene2D::data::Coord & oldCoord, scene2D::data::Coord & newCoord );
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+
+    /// Slot: update image buffer
+    void updateBuffer();
+
+    /// Slot: update image visibility
+    void updateVisibility(bool isVisible);
+    /**
+     * @}
+     */
+
+    QImage* createQImage();
+    void updateBufferFromImage( QImage* qimg );
+    void changeImageMinMaxFromCoord( scene2D::data::Coord& oldCoord, scene2D::data::Coord& newCoord );
 
-    QRgb getQImageVal(const unsigned int index, signed short* buffer,
-            const double wlMin, const double wlMax, const double window,
-            const double tfMin, const double tfMax,
-            ::fwData::TransferFunction::sptr tf);
+    static QRgb getQImageVal(const size_t index, const short* buffer, double wlMin,
+                             double tfWin, const ::fwData::TransferFunction::sptr& tf);
 
-    QImage * m_qimg;
-    QGraphicsPixmapItem * m_pixmapItem;
+    QImage* m_qimg;
+    QGraphicsPixmapItem* m_pixmapItem;
     QGraphicsItemGroup* m_layer;
 
     /// The current orientation of the negato
-    ::fwComEd::helper::MedicalImageAdaptor::Orientation m_orientation;
+    ::fwDataTools::helper::MedicalImageAdaptor::Orientation m_orientation;
 
     /// Used during negato interaction to manage window/level
     bool m_pointIsCaptured;
@@ -75,5 +111,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_NEGATO_HPP_
+#endif // __SCENE2D_ADAPTOR_NEGATO_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ScaleValues.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ScaleValues.hpp
index bbe80f0..84c9ada 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ScaleValues.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ScaleValues.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_SCALEVALUES_HPP_
-#define _SCENE2D_ADAPTOR_SCALEVALUES_HPP_
+#ifndef __SCENE2D_ADAPTOR_SCALEVALUES_HPP__
+#define __SCENE2D_ADAPTOR_SCALEVALUES_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -20,7 +20,7 @@ class SCENE2D_CLASS_API ScaleValues : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ScaleValues)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ScaleValues)(::scene2D::adaptor::IAdaptor) );
 
     /// Constructor, set the x and y spacing to 10
     SCENE2D_API ScaleValues() throw();
@@ -30,48 +30,48 @@ public:
 
 protected:
     /**
-    * @brief Configuring the ScaleValues adaptor.
-    *
-    * Example of configuration
-    * @verbatim
-    <adaptor id="scaleValues" class="::scene2D::adaptor::ScaleValues" objectId="self">
-        <config xMin="-1100" xMax="750" yMin="0" yMax="1" xSpacing="100" ySpacing="0.1" 
+     * @brief Configuring the ScaleValues adaptor.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <adaptor id="scaleValues" class="::scene2D::adaptor::ScaleValues" objectId="self">
+        <config xMin="-1100" xMax="750" yMin="0" yMax="1" xSpacing="100" ySpacing="0.1"
             color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/>
-    </adaptor>
-    @endverbatim
-    * - \<config xMin="-1100" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1"
-    *   color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/\> : Set the config.
-    *
-    * \b xMin : mandatory : Set the minimum X value to display.
-    *
-    * \b xMax : mandatory : Set the maximum X value to display.
-    *
-    * \b yMin : mandatory : Set the minimum Y value to display.
-    *
-    * \b yMax : mandatory : Set the maximum Y value to display.
-    *
-    * \b xInterval : no mandatory (default value : 10) : Set the interval between 2 consecutive values on the X axis.
-    *
-    * \b yInterval : no mandatory (default value : 10) : Set the interval between 2 consecutive values on the Y axis.
-    *
-    * \b color : no mandatory (default value : white) : Set the foreground color of the values.
-    *
-    * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : 
-    * Set the X axis of this adaptor.
-    *
-    * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : 
-    * Set the Y axis of this adaptor.
-    *
-    * \b zValue : no mandatory (default value : 0) : Set the zValue of this adaptor
-    * (the higher the zValue, the higher the layer is).
-    *
-    * \b viewportUID : mandatory : a viewport that help us to manage the scaling of the graphic object
-    *
-    * \b showXScale : no mandatory : tells if the scale on the X axis has to be shown (value: "true" or "false")
-    *
-    * \b showYScale : no mandatory : tells if the scale on the Y axis has to be shown (value: "true" or "false")
-    *
-    */
+       </adaptor>
+       @endcode
+     * - \<config xMin="-1100" xMax="750" yMin="-0.7" yMax="1.7" xSpacing="100" ySpacing="0.1"
+     *   color="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="1"/\> : Set the config.
+     *
+     * \b xMin : mandatory : Set the minimum X value to display.
+     *
+     * \b xMax : mandatory : Set the maximum X value to display.
+     *
+     * \b yMin : mandatory : Set the minimum Y value to display.
+     *
+     * \b yMax : mandatory : Set the maximum Y value to display.
+     *
+     * \b xInterval : no mandatory (default value : 10) : Set the interval between 2 consecutive values on the X axis.
+     *
+     * \b yInterval : no mandatory (default value : 10) : Set the interval between 2 consecutive values on the Y axis.
+     *
+     * \b color : no mandatory (default value : white) : Set the foreground color of the values.
+     *
+     * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) :
+     * Set the X axis of this adaptor.
+     *
+     * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) :
+     * Set the Y axis of this adaptor.
+     *
+     * \b zValue : no mandatory (default value : 0) : Set the zValue of this adaptor
+     * (the higher the zValue, the higher the layer is).
+     *
+     * \b viewportUID : mandatory : a viewport that help us to manage the scaling of the graphic object
+     *
+     * \b showXScale : no mandatory : tells if the scale on the X axis has to be shown (value: "true" or "false")
+     *
+     * \b showYScale : no mandatory : tells if the scale on the Y axis has to be shown (value: "true" or "false")
+     *
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Initialize the layer, set the pen style to DashLine and call the draw() function.
@@ -81,9 +81,6 @@ protected:
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
 
     /// Do nothing.
-    SCENE2D_API void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    /// Do nothing.
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
 
     /// Clean the lines vector and remove the layer from the scene.
@@ -164,5 +161,4 @@ private:
 } // namespace adaptor
 } // namespace scene2D
 
-
-#endif // _SCENE2D_ADAPTOR_GRID2D_HPP_
+#endif // __SCENE2D_ADAPTOR_SCALEVALUES_HPP__
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Sin.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Sin.hpp
index 5e39007..0d760dc 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Sin.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Sin.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_SIN_HPP_
-#define _SCENE2D_ADAPTOR_SIN_HPP_
-
-#include <scene2D/adaptor/IAdaptor.hpp>
+#ifndef __SCENE2D_ADAPTOR_SIN_HPP__
+#define __SCENE2D_ADAPTOR_SIN_HPP__
 
+#include "scene2D/adaptor/IAdaptor.hpp"
 #include "scene2D/config.hpp"
 
 namespace scene2D
@@ -21,7 +20,7 @@ class SCENE2D_CLASS_API Sin : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Sin)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Sin)(::scene2D::adaptor::IAdaptor) );
 
     SCENE2D_API Sin() throw();
     SCENE2D_API virtual ~Sin() throw();
@@ -30,7 +29,6 @@ protected:
     SCENE2D_API void configuring() throw (::fwTools::Failed);
     SCENE2D_API void doStart();
     SCENE2D_API void doUpdate();
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg );
     SCENE2D_API void doSwap();
     SCENE2D_API void doStop();
 
@@ -43,5 +41,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_SIN_HPP_
+#endif // __SCENE2D_ADAPTOR_SIN_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Square.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Square.hpp
index 323eb35..2c8d503 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Square.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/Square.hpp
@@ -1,28 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_SQUARE_HPP_
-#define _SCENE2D_ADAPTOR_SQUARE_HPP_
-
-#include <QGraphicsItem>
+#ifndef __SCENE2D_ADAPTOR_SQUARE_HPP__
+#define __SCENE2D_ADAPTOR_SQUARE_HPP__
 
 #include "scene2D/adaptor/IAdaptor.hpp"
 #include "scene2D/data/Coord.hpp"
 
+#include <QGraphicsItem>
+
 namespace scene2D
 {
 namespace adaptor
 {
 
+/**
+ * @brief Create a square on the scene2D
+ */
 class SCENE2D_CLASS_API Square : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Square)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Square)(::scene2D::adaptor::IAdaptor) );
 
     SCENE2D_API Square() throw();
     SCENE2D_API virtual ~Square() throw();
@@ -32,7 +35,6 @@ protected:
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
     SCENE2D_API void doStart() throw ( ::fwTools::Failed );
     SCENE2D_API void doUpdate() throw ( ::fwTools::Failed );
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
     SCENE2D_API void doSwap() throw ( ::fwTools::Failed );
     SCENE2D_API void doStop() throw ( ::fwTools::Failed );
 
@@ -40,7 +42,8 @@ protected:
 
     SCENE2D_API void setColor( std::string _color );
     SCENE2D_API bool coordViewIsInItem( const ::scene2D::data::Coord & coord, QGraphicsItem * item );
-    SCENE2D_API ::scene2D::data::Coord coordViewToCoordItem( const ::scene2D::data::Coord & coord, QGraphicsItem * item );
+    SCENE2D_API ::scene2D::data::Coord coordViewToCoordItem( const ::scene2D::data::Coord & coord,
+                                                             QGraphicsItem * item );
 
 private:
 
@@ -58,5 +61,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_SQUARE_HPP_
+#endif // __SCENE2D_ADAPTOR_SQUARE_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/TransferFunction.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/TransferFunction.hpp
index 624f8fc..46e4f5f 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/TransferFunction.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/TransferFunction.hpp
@@ -1,17 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_TRANSFERFUNCTION_HPP_
-#define _SCENE2D_ADAPTOR_TRANSFERFUNCTION_HPP_
+#ifndef __SCENE2D_ADAPTOR_TRANSFERFUNCTION_HPP__
+#define __SCENE2D_ADAPTOR_TRANSFERFUNCTION_HPP__
+
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include <scene2D/adaptor/IAdaptor.hpp>
 
 namespace scene2D
 {
@@ -19,18 +20,19 @@ namespace adaptor
 {
 
 
-class SCENE2D_CLASS_API TransferFunction : public ::fwComEd::helper::MedicalImageAdaptor, public ::scene2D::adaptor::IAdaptor
+class SCENE2D_CLASS_API TransferFunction : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                           public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (TransferFunction)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (TransferFunction)(::scene2D::adaptor::IAdaptor) );
 
     /// Enumeration of authorized line types
     enum LineType
-   {
-      PLAIN,
-      DOTTED
-   };
+    {
+        PLAIN,
+        DOTTED
+    };
 
     /// Constructor, add handle events TRANSFERFUNCTION and WINDOWING.
     SCENE2D_API TransferFunction() throw();
@@ -38,28 +40,37 @@ public:
     /// Basic destructor, do nothing.
     SCENE2D_API virtual ~TransferFunction() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
     /**
-    * @brief Configuring the TransferFunction adaptor.
-    *
-    * Example of configuration
-    * @verbatim
-    <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="myImage">
+     * @brief Configuring the TransferFunction adaptor.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="myImage">
         <config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="4"/>
-    </adaptor>
-    @endverbatim
-    * - \<config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="4"/\> : Set the config.
-    *
-    * \b lineColor : no mandatory (default value : black) : Set the color of the lines between the TF points.
-    *
-    * \b circleColor : no mandatory (default value : black) : Set the outline color of the circles representing the TF points.
-    *
-    * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the x Axis of the TF layer.
-    *
-    * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the y Axis of the TF layer.
-    *
-    * \b zValue : no mandatory (default value : 0) : Set the zValue of the TF layer (the higher the zValue, the higher the layer is).
-    */
+       </adaptor>
+       @endcode
+     * - \<config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis" yAxis="yAxis" zValue="4"/\> : Set the config.
+     *
+     * \b lineColor : no mandatory (default value : black) : Set the color of the lines between the TF points.
+     *
+     * \b circleColor : no mandatory (default value : black) : Set the outline color of the circles representing the TF points.
+     *
+     * \b xAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the x Axis of the TF layer.
+     *
+     * \b yAxis : no mandatory (default value : ::scene2D::data::Axis::New() : m_origin (0), m_scale (1), m_scaleType (LINEAR)) : Set the y Axis of the TF layer.
+     *
+     * \b zValue : no mandatory (default value : 0) : Set the zValue of the TF layer (the higher the zValue, the higher the layer is).
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Initialize the layer m_layer (QGraphicsGroupItem), m_circleWidth and m_circleHeight from the viewport
@@ -70,9 +81,6 @@ protected:
     ///  the circles vector, the lines and polygons vector, and to add'em all to the layer and add it to the scene.
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
 
-    /// If the message is TRANSFERFUNCTION or WINDOWING, call DoUpdate().
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
     /// @todo
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
 
@@ -84,10 +92,17 @@ protected:
     ///  to a specific event.
     SCENE2D_API void processInteraction( SPTR(::scene2D::data::Event) _event );
 
+
+    /// Called when transfer function points are modified.
+    SCENE2D_API virtual void updatingTFPoints();
+
+    /// Called when transfer function windowing is modified.
+    SCENE2D_API virtual void updatingTFWindowing(double window, double level);
+
 private:
 
     /// Convert the view coordinates to item coordinates.
-    SCENE2D_API ::scene2D::data::Coord coordViewToCoordItem( const ::scene2D::data::Coord & _coord );
+    SCENE2D_API ::scene2D::data::Coord coordViewToCoordItem( const ::scene2D::data::Coord& _coord );
 
     /// Get the selected tf of the image, calculate the window and the level, clear the m_TFPoints map and fill
     ///  it with the tf points of the selected tf.
@@ -100,7 +115,7 @@ private:
     /// From an iterator on the m_TFPoints map, create a QGraphicsEllipseItem, give it the appropriated color
     ///  and pen, and return it.
     SCENE2D_API QGraphicsEllipseItem* buildCircle(::fwData::TransferFunction::TFValueType value,
-                                    ::fwData::TransferFunction::TFColor color);
+                                                  ::fwData::TransferFunction::TFColor color);
 
     /// Remove all line and polygon items from the scene, clear the m_linesAndPolygons vector, and push it back
     ///  lines and gradient polygons generated from m_circles.
@@ -133,13 +148,15 @@ private:
     /// point in the tf points map, create a new one with the new coord as key and alpha, rescale the tf map
     /// to 0-1 and update the image tf.
     SCENE2D_API void mouseMoveEvent(QGraphicsEllipseItem* circle,
-            ::fwData::TransferFunction::TFValueType tfPoint, ::scene2D::data::Event::sptr _event);
+                                    ::fwData::TransferFunction::TFValueType tfPoint,
+                                    ::scene2D::data::Event::sptr _event);
 
     /// Reset the circle pen to the selected circle
     SCENE2D_API void mouseButtonReleaseEvent(QGraphicsEllipseItem* circle, ::scene2D::data::Event::sptr _event);
 
     /// Erase the selected point
-    SCENE2D_API void rightButtonEvent(::fwData::TransferFunction::TFValueType tfPoint, ::scene2D::data::Event::sptr _event);
+    SCENE2D_API void rightButtonEvent(::fwData::TransferFunction::TFValueType tfPoint,
+                                      ::scene2D::data::Event::sptr _event);
 
     /// Create a new point without modifying the TF (placed between the 2 encompassing points with linear
     /// interpolation)
@@ -193,5 +210,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_ADAPTOR_TRANSFERFUNCTION_HPP_
+#endif // __SCENE2D_ADAPTOR_TRANSFERFUNCTION_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportInteractor.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportInteractor.hpp
index 96d2753..148b38d 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportInteractor.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportInteractor.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_VIEWPORTINTERACTOR_HPP_
-#define _SCENE2D_VIEWPORTINTERACTOR_HPP_
+#ifndef __SCENE2D_ADAPTOR_VIEWPORTINTERACTOR_HPP__
+#define __SCENE2D_ADAPTOR_VIEWPORTINTERACTOR_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -23,7 +23,7 @@ class ViewportInteractor : public ::scene2D::adaptor::IAdaptor
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ViewportInteractor)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ViewportInteractor)(::scene2D::adaptor::IAdaptor) );
 
     ViewportInteractor() throw();
 
@@ -37,8 +37,6 @@ protected:
 
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
 
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
 
     SCENE2D_API void doStop()    throw ( ::fwTools::Failed );
@@ -55,4 +53,4 @@ protected:
 }   // namespace adaptor
 }   // namespace scene2D
 
-#endif  // _SCENE2D_VIEWPORTINTERACTOR_HPP_
+#endif  // __SCENE2D_ADAPTOR_VIEWPORTINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportRangeSelector.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportRangeSelector.hpp
index a06cc48..0557bec 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportRangeSelector.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportRangeSelector.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_VIEWPORTRANGESELECTOR_HPP_
-#define _SCENE2D_VIEWPORTRANGESELECTOR_HPP_
+#ifndef __SCENE2D_ADAPTOR_VIEWPORTRANGESELECTOR_HPP__
+#define __SCENE2D_ADAPTOR_VIEWPORTRANGESELECTOR_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -17,13 +17,13 @@ namespace adaptor
 
 /**
  * @brief <p>The viewport range selector adaptor allows to select a delimited range of a viewport.
- * It uses a graphical delimiter (called shutter) that can be moved from both left to right 
+ * It uses a graphical delimiter (called shutter) that can be moved from both left to right
  * and right to left directions (in those cases, shutter's width is changing).</p>
  *
- * <p>Clicking onto the approximative center of the shutter allows the user to change its position, 
+ * <p>Clicking onto the approximative center of the shutter allows the user to change its position,
  * according to mouse's cursor position (width won't change).</p>
  *
- * <p>Clicking onto the approximative left/right (respectively) border of the shutter allows the 
+ * <p>Clicking onto the approximative left/right (respectively) border of the shutter allows the
  * user to change the width of the shutter: the right/left (respectively) border doesn't move
  * during resizing.</p>
  *
@@ -31,12 +31,12 @@ namespace adaptor
  * ::scene2D::data::Viewport object.</p>
  *
  * Configuration example:
-   @verbatim
+   @code{.xml}
    <adaptor id="viewSelector" class="::scene2D::adaptor::ViewportRangeSelector" objectId="myViewport">
        <config xAxis="xAxis" yAxis="yAxis" zValue="5" />
    </adaptor>
-   @endverbatim
- * 
+   @endcode
+ *
  * \b objectId  :   the viewport object that is updated by this adaptor
  *
  * \b xAxis     : see ::scene2D::adaptor::IAdaptor
@@ -55,7 +55,7 @@ class ViewportRangeSelector : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ViewportRangeSelector)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ViewportRangeSelector)(::scene2D::adaptor::IAdaptor) );
     ViewportRangeSelector() throw();
     ~ViewportRangeSelector() throw();
 
@@ -63,7 +63,6 @@ protected:
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
     SCENE2D_API void doStart()    throw ( ::fwTools::Failed );
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
     SCENE2D_API void doStop()    throw ( ::fwTools::Failed );
 
@@ -72,7 +71,7 @@ protected:
     /// Update the viewport object according to the current state of the shutter (coordinates are
     /// mapped from the scene).
     SCENE2D_API void updateViewportFromShutter( double x, double y, double width, double height );
- 
+
     QGraphicsRectItem* m_shutter;
     bool m_isLeftInteracting;                       // interaction onto shutter's left border
     bool m_isRightInteracting;                      // interaction onto shutter's right border
@@ -82,7 +81,7 @@ protected:
 
     /// A spacing value for an easier picking onto shutter borders
     const int m_clickCatchRange;
-        
+
     /// (This is the only graphic item which has to be added into the scene).
     QGraphicsItemGroup* m_layer;
 
@@ -96,10 +95,10 @@ private:
 
     /// Tells if the mouse cursor is at the good position to start interacting on shutter's left border
     bool mouseOnShutterLeft( ::scene2D::data::Coord _coord);
-    
+
     /// Tells if the mouse cursor is at the good position to start interacting on shutter's right border
     bool mouseOnShutterRight( ::scene2D::data::Coord _coord);
-    
+
     /// Tells if the mouse cursor is at the good position to start interacting on shutter's middle part
     bool mouseOnShutterMiddle( ::scene2D::data::Coord _coord);
 };
@@ -108,5 +107,5 @@ private:
 }   // namespace adaptor
 }   // namespace scene2D
 
-#endif  // _SCENE2D_VIEWPORTRANGESELECTOR_HPP_
+#endif  // __SCENE2D_ADAPTOR_VIEWPORTRANGESELECTOR_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportUpdater.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportUpdater.hpp
index eea2430..ce40856 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportUpdater.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/ViewportUpdater.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_VIEWPORTUPDATER_HPP_
-#define _SCENE2D_VIEWPORTUPDATER_HPP_
+#ifndef __SCENE2D_ADAPTOR_VIEWPORTUPDATER_HPP__
+#define __SCENE2D_ADAPTOR_VIEWPORTUPDATER_HPP__
 
-#include <scene2D/adaptor/IAdaptor.hpp>
+#include "scene2D/adaptor/IAdaptor.hpp"
 
 namespace scene2D
 {
@@ -22,11 +22,11 @@ namespace adaptor
  * managed ::scene2D::data::Viewport object.
  *
  * Configuration example:
-   @verbatim
+   @code{.xml}
    <adaptor id="viewportRangeUpdater" class="::scene2D::adaptor::ViewportUpdater" objectId="myViewport">
        <config xAxis="xAxis" yAxis="yAxis" zValue="7" />
    </adaptor>
-   @endverbatim
+   @endcode
  *
  * \b objectID  : the viewport object this updater takes values from.
  *
@@ -42,7 +42,7 @@ class ViewportUpdater : public ::scene2D::adaptor::IAdaptor
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ViewportUpdater)(::scene2D::adaptor::IAdaptor) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ViewportUpdater)(::scene2D::adaptor::IAdaptor) );
     ViewportUpdater() throw();
     ~ViewportUpdater() throw();
 
@@ -50,7 +50,6 @@ protected:
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
     SCENE2D_API void doStart()    throw ( ::fwTools::Failed );
     SCENE2D_API void doUpdate()    throw ( ::fwTools::Failed );
-    SCENE2D_API void doReceive( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
     SCENE2D_API void doSwap()    throw ( ::fwTools::Failed );
     SCENE2D_API void doStop()    throw ( ::fwTools::Failed );
 
@@ -61,5 +60,5 @@ protected:
 }   // namespace adaptor
 }   // namespace scene2D
 
-#endif  // _SCENE2D_VIEWPORTUPDATER_HPP_
+#endif  // __SCENE2D_ADAPTOR_VIEWPORTUPDATER_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp
index c6092ed..8b9a00d 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/adaptor/namespace.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-
+#ifndef __SCENE2D_ADAPTOR_NAMESPACE_HPP__
+#define __SCENE2D_ADAPTOR_NAMESPACE_HPP__
 
 /**
-*
-*     TODO Doxygen documentation
-*
-**/
+ *
+ *     TODO Doxygen documentation
+ *
+ **/
 
 namespace scene2D
 {
@@ -19,7 +19,5 @@ namespace scene2D
 } // namespace scene2D
 
 
-
-
-
+#endif // __SCENE2D_ADAPTOR_NAMESPACE_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/bspline.h b/Bundles/LeafVisu/scene2D/include/scene2D/bspline.h
index 50add0a..bcc461f 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/bspline.h
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/bspline.h
@@ -1,34 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _BSPLINE_H
-#define _BSPLINE_H
+#ifndef __SCENE2D_BSPLINE_H__
+#define __SCENE2D_BSPLINE_H__
 
 #include <iostream>
 #include <cmath>
 #include <list>
 #include <vector>
 
-#define BUFFER_SIZE 128
 #define DEFAULT_PRECISION 40
 
-using namespace std;
-
 struct point
 {
     float x;
     float y;
 
-    point(float _x = 0, float _y = 0): x(_x), y(_y) { }
+    point(float _x = 0.f, float _y = 0.f) : x(_x), y(_y)
+    {
+    }
     point(const point & _which)
     {
         this->x = _which.x;
         this->y = _which.y;
     }
-    ~point() {}
+    ~point()
+    {
+    }
 
     point & operator = (const point & _which)
     {
@@ -37,100 +38,113 @@ struct point
         return *this;
     }
 };
+
 class point_list
 {
 public:
-    point_list() {}
+    point_list()
+    {
+    }
     point_list(const point_list & _which)
     {
-        this->list = _which.list;
+        this->m_list = _which.m_list;
     }
     ~point_list()
     {
-        for (unsigned int i = 0; i<this->list.size(); i++) delete list[i];
+        for (unsigned int i = 0; i < m_list.size(); i++)
+        {
+            delete m_list[i];
+        }
     }
 
     point & get_point(int which)
     {
-        std::vector<point*>::iterator _it = this->list.begin();
-        for (int i = 0; i < which; i++) _it++;
-        return **_it;
+        point* pt = m_list.at(which);
+        return *pt;
     }
 
     void add_point(point * _which)
     {
-        this->list.push_back(_which);
+        m_list.push_back(_which);
     }
 
-    std::vector<point*> list;
+    std::vector<point*> m_list;
 };
 
 
 class cat_curve
 {
 public:
-    cat_curve(const point_list & _which)
+    cat_curve(const point_list & _which) :
+        m_plist(new point_list(_which)),
+        m_curve_point(nullptr),
+        m_nb_curve_point(0),
+        m_nb_point(m_plist->m_list.size()),
+        m_precision(DEFAULT_PRECISION),
+        m_draw_number(true)
     {
-        this->plist = new point_list(_which);
-        this->curve_point = NULL;
-        this->nb_curve_point = 0;
-        this->nb_point = this->plist->list.size();
-        this->precision = DEFAULT_PRECISION;
-        this->draw_number = true;
     }
+
     ~cat_curve()
     {
-        if (this->curve_point != NULL) delete[] this->curve_point;
+        if (m_curve_point != nullptr)
+        {
+            delete[] m_curve_point;
+        }
     }
 
     void compute()
     {
-        if (this->curve_point != NULL) delete[] this->curve_point;
-        this->curve_point = new point[this->precision+1];
-        this->nb_curve_point = this->precision+1;
+        if (m_curve_point != nullptr)
+        {
+            delete[] m_curve_point;
+        }
+        m_curve_point    = new point[m_precision+1];
+        m_nb_curve_point = m_precision+1;
 
-        float t=1.0f, p = (float)(this->nb_point-3)/(float)this->precision;
+        float t = 1.0f, p = (float)(m_nb_point-3)/(float)m_precision;
 
         int i;
         float ti;
-        for(int k=0; k<this->nb_curve_point; k++)
+        for(int k = 0; k<m_nb_curve_point; k++)
         {
-            i = (int)floor(t);
+            i  = (int)floor(t);
             ti = (float)i;
-            if (i < this->nb_point-2)
+            if (i < m_nb_point-2)
             {
-                this->curve_point[k].x =
-                    (3.0f*this->plist->list[i]->x-3.0f*this->plist->list[i+1]->x+
-                    this->plist->list[i+2]->x-this->plist->list[i-1]->x)*pow(t-ti,3)/2.0f+
-                    ( 2.0f*this->plist->list[i-1]->x - 5.0f*this->plist->list[i]->x +
-                    4.0f*this->plist->list[i+1]->x - this->plist->list[i+2]->x)*pow(t-ti,2)/2.0f+
-                    ( this->plist->list[i+1]->x - this->plist->list[i-1]->x ) *(t-ti)/2.0f + this->plist->list[i]->x;
-
-                this->curve_point[k].y =
-                    (3.0f*this->plist->list[i]->y-3.0f*this->plist->list[i+1]->y+
-                    this->plist->list[i+2]->y-this->plist->list[i-1]->y)*pow(t-ti,3)/2.0f+
-                    ( 2.0f*this->plist->list[i-1]->y - 5.0f*this->plist->list[i]->y +
-                    4.0f*this->plist->list[i+1]->y - this->plist->list[i+2]->y)*pow(t-ti,2)/2.0f+
-                    ( this->plist->list[i+1]->y - this->plist->list[i-1]->y ) *(t-ti)/2.0f + this->plist->list[i]->y;
+                m_curve_point[k].x =
+                    (3.0f*m_plist->m_list[i]->x-3.0f*m_plist->m_list[i+1]->x+
+                     m_plist->m_list[i+2]->x-m_plist->m_list[i-1]->x)*pow(t-ti,3)/2.0f+
+                    ( 2.0f*m_plist->m_list[i-1]->x - 5.0f*m_plist->m_list[i]->x +
+                      4.0f*m_plist->m_list[i+1]->x - m_plist->m_list[i+2]->x)*pow(t-ti,2)/2.0f+
+                    ( m_plist->m_list[i+1]->x - m_plist->m_list[i-1]->x ) *(t-ti)/2.0f + m_plist->m_list[i]->x;
+
+                m_curve_point[k].y =
+                    (3.0f*m_plist->m_list[i]->y-3.0f*m_plist->m_list[i+1]->y+
+                     m_plist->m_list[i+2]->y-m_plist->m_list[i-1]->y)*pow(t-ti,3)/2.0f+
+                    ( 2.0f*m_plist->m_list[i-1]->y - 5.0f*m_plist->m_list[i]->y +
+                      4.0f*m_plist->m_list[i+1]->y - m_plist->m_list[i+2]->y)*pow(t-ti,2)/2.0f+
+                    ( m_plist->m_list[i+1]->y - m_plist->m_list[i-1]->y ) *(t-ti)/2.0f + m_plist->m_list[i]->y;
             }
-            else if(i < this->nb_point)
+            else if(i < m_nb_point)
             {
-                this->curve_point[k].x = this->plist->list[i]->x;
-                this->curve_point[k].y = this->plist->list[i]->y;
+                m_curve_point[k].x = m_plist->m_list[i]->x;
+                m_curve_point[k].y = m_plist->m_list[i]->y;
             }
 
             t += p;
         }
     }
 
-    point * curve_point;
-    int nb_curve_point;
+    point * m_curve_point;
+    int m_nb_curve_point;
 
-    point_list * plist;
-    int nb_point;
+    point_list * m_plist;
+    int m_nb_point;
 
-    int precision;
-    bool draw_number;
+    int m_precision;
+    bool m_draw_number;
 };
-#endif
+
+#endif //__SCENE2D_BSPLINE_H__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/config.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/config.hpp
deleted file mode 100644
index e7518b1..0000000
--- a/Bundles/LeafVisu/scene2D/include/scene2D/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _SCENE2D_CONFIG_HPP_
-#define _SCENE2D_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef SCENE2D_EXPORTS
-            #define SCENE2D_API __declspec(dllexport)
-        #else
-            #define SCENE2D_API __declspec(dllimport)
-        #endif
-
-        #define SCENE2D_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef SCENE2D_EXPORTS
-            #define SCENE2D_API __attribute__ ((visibility("default")))
-            #define SCENE2D_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define SCENE2D_API __attribute__ ((visibility("hidden")))
-            #define SCENE2D_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define SCENE2D_API
-        #define SCENE2D_CLASS_API
-
-    #endif
-
-#endif //SCENE2D_API
-
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp
index aa71c57..c65d35f 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Axis.hpp
@@ -1,40 +1,41 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_DATA_AXIS_HPP_
-#define _SCENE2D_DATA_AXIS_HPP_
-
-#include <fwData/Object.hpp>
+#ifndef __SCENE2D_DATA_AXIS_HPP__
+#define __SCENE2D_DATA_AXIS_HPP__
 
 #include "scene2D/config.hpp"
 
+#include <fwData/Object.hpp>
+
 namespace scene2D
 {
 namespace data
 {
 
-
-
+/**
+ * @brief This class manages an axis on the scene2D.
+ */
 class SCENE2D_CLASS_API Axis : public ::fwData::Object
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Axis)(::fwData::Object), (()), ::fwData::factory::New< Axis >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Axis)(::fwData::Object), (()), ::fwData::factory::New< Axis >);
 
     typedef enum
-   {
-      LINEAR,
-      LOG
-   }  ScaleType;
-
-   /**
-    * @brief Constructor, set origin to 0, scale to 1 and type to LINEAR.
-    * @param key Private construction key
-    */
+    {
+        LINEAR,
+        LOG
+    }  ScaleType;
+
+    /**
+     * @brief Constructor, set origin to 0, scale to 1 and type to LINEAR.
+     * @param key Private construction key
+     */
     SCENE2D_API Axis( ::fwData::Object::Key key );
 
     /// Defines shallow copy
@@ -47,22 +48,22 @@ public:
     SCENE2D_API virtual ~Axis();
 
     /// Get m_origin attribute.
-    SCENE2D_API float getOrigin();
+    SCENE2D_API float getOrigin() const;
 
     /// Set m_origin attribute.
     SCENE2D_API void setOrigin (float _origin);
 
     /// Get m_scale attribute.
-    SCENE2D_API float getScale();
+    SCENE2D_API float getScale() const;
 
     /// Set m_scale attribute.
     SCENE2D_API void setScale (float _scale);
 
     /// Get m_scaleType attribute.
-    SCENE2D_API std::string getScaleType();
+    SCENE2D_API std::string getScaleType() const;
 
     /// Set m_scaleType attribute.
-    SCENE2D_API void setScaleType (std::string _scaleType);
+    SCENE2D_API void setScaleType(const std::string& _scaleType);
 
 private:
     /// The origin and scale.
@@ -73,10 +74,8 @@ private:
 
 };
 
-
 } // namespace data
 } // namespace scene2D
 
-
-#endif // _SCENE2D_DATA_AXIS_HPP_
+#endif // __SCENE2D_DATA_AXIS_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp
index 0771da3..b518bb4 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Coord.hpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_DATA_COORD_HPP_
-#define _SCENE2D_DATA_COORD_HPP_
+#ifndef __SCENE2D_DATA_COORD_HPP__
+#define __SCENE2D_DATA_COORD_HPP__
+
+#include "scene2D/config.hpp"
 
 #include <fwData/Object.hpp>
 
-#include "scene2D/config.hpp"
 
 namespace scene2D
 {
@@ -18,16 +19,34 @@ namespace data
 
 class SCENE2D_CLASS_API Coord
 {
-public :
-
-    SCENE2D_API Coord(){m_x=0;m_y=0;}
-    SCENE2D_API Coord( double x , double y ){m_x=x;m_y=y;}
-    SCENE2D_API double getX() const {return m_x;}
-    SCENE2D_API void setX ( double x ){m_x=x;}
-    SCENE2D_API double getY() const {return m_y;}
-    SCENE2D_API void setY ( double y ){m_y=y;}
-
-private :
+public:
+
+    Coord()
+    {
+        m_x = 0; m_y = 0;
+    }
+    Coord( double x, double y )
+    {
+        m_x = x; m_y = y;
+    }
+    double getX() const
+    {
+        return m_x;
+    }
+    void setX ( double x )
+    {
+        m_x = x;
+    }
+    double getY() const
+    {
+        return m_y;
+    }
+    void setY ( double y )
+    {
+        m_y = y;
+    }
+
+private:
 
     double m_x;
     double m_y;
@@ -37,5 +56,5 @@ private :
 } // namespace scene2D
 
 
-#endif // _SCENE2D_DATA_COORD_HPP_
+#endif // __SCENE2D_DATA_COORD_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Event.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Event.hpp
index 292aeff..f463b63 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Event.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Event.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_DATA_EVENT_HPP_
-#define _SCENE2D_DATA_EVENT_HPP_
-
-#include <Qt>
+#ifndef __SCENE2D_DATA_EVENT_HPP__
+#define __SCENE2D_DATA_EVENT_HPP__
 
 #include "scene2D/config.hpp"
 #include "scene2D/data/Coord.hpp"
 #include "scene2D/data/Size.hpp"
 
+#include <Qt>
+
 namespace scene2D
 {
 namespace data
@@ -20,41 +20,48 @@ namespace data
 
 //-----------------------------------------------------------------------------
 
+/**
+ * @brief This class manage events on the scene 2D (mouse event, keyboard event ,
+ * ...).
+ */
 class SCENE2D_CLASS_API Event : public ::fwData::Object
 {
 
 public:
 
     typedef enum
-    { NoType,
-      Resize,                   // change within the size of the widget/view
-      Viewport,                 // change within the size of the sene (contained into the widget/view)
-      MouseButtonDoubleClick,
-      MouseButtonPress,
-      MouseButtonRelease,
-      MouseMove,
-      MouseWheelUp,
-      MouseWheelDown,
-      KeyPress,
-      KeyRelease
+    {
+        NoType,
+        Resize,                   // change within the size of the widget/view
+        Viewport,                 // change within the size of the sene (contained into the widget/view)
+        MouseButtonDoubleClick,
+        MouseButtonPress,
+        MouseButtonRelease,
+        MouseMove,
+        MouseWheelUp,
+        MouseWheelDown,
+        KeyPress,
+        KeyRelease
     } Type;
 
     typedef enum
-    {   NoButton,
+    {
+        NoButton,
         LeftButton,
         RightButton,
         MidButton
     } Button;
 
     typedef enum
-    {  NoModifier,
-       ShiftModifier,
-       ControlModifier,
-       AltModifier
+    {
+        NoModifier,
+        ShiftModifier,
+        ControlModifier,
+        AltModifier
     } Modifier;
 
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Event)(::fwData::Object), (()), ::fwData::factory::New< Event >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Event)(::fwData::Object), (()), ::fwData::factory::New< Event >);
 
     /**
      * @brief Constructor
@@ -69,14 +76,29 @@ public:
     /// Defines deep copy
     SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType &cache );
 
-    fwGettersSettersDocMacro(OldSize, oldSize, Size, no comment);
-    fwGettersSettersDocMacro(Size, size, Size, no comment);
-    fwGettersSettersDocMacro(Type, type, Type, no comment);
-    fwGettersSettersDocMacro(Coord, coord, Coord, no comment);
-    fwGettersSettersDocMacro(Button, button, Button, no comment);
-    fwGettersSettersDocMacro(Accepted, accepted, bool, no comment);
-    fwGettersSettersDocMacro(Modifier, modifier, Modifier, no comment);
-    fwGettersSettersDocMacro(Key, key, int, no comment);
+    bool isAccepted() const;
+    void setAccepted(bool accepted);
+
+    Button getButton() const;
+    void setButton(Button button);
+
+    const Coord& getCoord() const;
+    void setCoord(const Coord& coord);
+
+    int getKey() const;
+    void setKey(int key);
+
+    Modifier getModifier() const;
+    void setModifier(Modifier modifier);
+
+    const Size& getOldSize() const;
+    void setOldSize(const Size& oldSize);
+
+    const Size& getSize() const;
+    void setSize(const Size& size);
+
+    Type getType() const;
+    void setType(Type type);
 
 private:
 
@@ -90,10 +112,121 @@ private:
     int m_key;
 };
 
+//------------------------------------------------------------------------------
+
+inline bool Event::isAccepted() const
+{
+    return m_accepted;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setAccepted(bool accepted)
+{
+    m_accepted = accepted;
+}
+
+//------------------------------------------------------------------------------
+
+inline Event::Button Event::getButton() const
+{
+    return m_button;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setButton(Button button)
+{
+    m_button = button;
+}
+
+//------------------------------------------------------------------------------
+
+inline const Coord& Event::getCoord() const
+{
+    return m_coord;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setCoord(const Coord& coord)
+{
+    m_coord = coord;
+}
+
+//------------------------------------------------------------------------------
+
+inline int Event::getKey() const
+{
+    return m_key;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setKey(int key)
+{
+    m_key = key;
+}
+
+//------------------------------------------------------------------------------
+
+inline Event::Modifier Event::getModifier() const
+{
+    return m_modifier;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setModifier(Modifier modifier)
+{
+    m_modifier = modifier;
+}
+
+//------------------------------------------------------------------------------
+
+inline const Size& Event::getOldSize() const
+{
+    return m_oldSize;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setOldSize(const Size& oldSize)
+{
+    m_oldSize = oldSize;
+}
+
+//------------------------------------------------------------------------------
+
+inline const Size& Event::getSize() const
+{
+    return m_size;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setSize(const Size& size)
+{
+    m_size = size;
+}
+
+//------------------------------------------------------------------------------
+
+inline Event::Type Event::getType() const
+{
+    return m_type;
+}
+
+//------------------------------------------------------------------------------
+
+inline void Event::setType(Type type)
+{
+    m_type = type;
+}
 
 } // namespace data
 } // namespace scene2D
 
 
-#endif // _SCENE2D_DATA_SCENEEVENT_HPP_
+#endif // __SCENE2D_DATA_EVENT_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/InitQtPen.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/InitQtPen.hpp
index 4f977e6..d87e218 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/InitQtPen.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/InitQtPen.hpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_ADAPTOR_INITQTPEN_HPP_
-#define _SCENE2D_ADAPTOR_INITQTPEN_HPP_
+#ifndef __SCENE2D_DATA_INITQTPEN_HPP__
+#define __SCENE2D_DATA_INITQTPEN_HPP__
+
+#include "scene2D/config.hpp"
 
 #include <QPen>
 
-#include "scene2D/config.hpp"
 
 namespace scene2D
 {
@@ -31,4 +32,4 @@ public:
 } // namespace data
 } // namespace scene2D
 
-#endif // _SCENE2D_ADAPTOR_INITQTPEN_HPP_
+#endif // __SCENE2D_DATA_INITQTPEN_HPP__
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp
index b4780c8..69363e6 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Size.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_DATA_SIZE_HPP_
-#define _SCENE2D_DATA_SIZE_HPP_
-
-#include <fwData/Object.hpp>
+#ifndef __SCENE2D_DATA_SIZE_HPP__
+#define __SCENE2D_DATA_SIZE_HPP__
 
 #include "scene2D/config.hpp"
 
+#include <fwData/Object.hpp>
+
 namespace scene2D
 {
 namespace data
@@ -18,16 +18,33 @@ namespace data
 
 class SCENE2D_CLASS_API Size
 {
-public :
-
-    SCENE2D_API Size(){m_w=0;m_h=0;}
-    SCENE2D_API Size( double w , double h ){m_w=w;m_h=h;}
-    SCENE2D_API double getWidth() const {return m_w;}
-    SCENE2D_API void setWidth ( double w ){m_w=w;}
-    SCENE2D_API double getHeight() const {return m_h;}
-    SCENE2D_API void setHeight ( double h ){m_h=h;}
-
-private :
+public:
+
+    Size() : m_w(0.),  m_h(0.)
+    {
+    }
+    Size( double w, double h )
+    {
+        m_w = w; m_h = h;
+    }
+    double getWidth() const
+    {
+        return m_w;
+    }
+    void setWidth ( double w )
+    {
+        m_w = w;
+    }
+    double getHeight() const
+    {
+        return m_h;
+    }
+    void setHeight ( double h )
+    {
+        m_h = h;
+    }
+
+private:
 
     double m_w;
     double m_h;
@@ -37,5 +54,5 @@ private :
 } // namespace scene2D
 
 
-#endif // _SCENE2D_DATA_SIZE_HPP_
+#endif // __SCENE2D_DATA_SIZE_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/Viewport.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/Viewport.hpp
index 629a8dc..60fc970 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/Viewport.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/Viewport.hpp
@@ -1,29 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SCENE2D_DATA_VIEWPORT_HPP_
-#define _SCENE2D_DATA_VIEWPORT_HPP_
-
-#include <fwData/Object.hpp>
+#ifndef __SCENE2D_DATA_VIEWPORT_HPP__
+#define __SCENE2D_DATA_VIEWPORT_HPP__
 
 #include "scene2D/config.hpp"
 
+#include <fwData/Object.hpp>
+
 namespace scene2D
 {
 namespace data
 {
 
-
-
+/**
+ * @brief Manage the current viewport of the scene2D.
+ */
 class SCENE2D_CLASS_API Viewport : public ::fwData::Object
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Viewport)(::fwData::Object), (()), ::fwData::factory::New< Viewport >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Viewport)(::fwData::Object), (()), ::fwData::factory::New< Viewport >);
 
     /**
      * @brief Constructor
@@ -38,13 +39,13 @@ public:
     /// Defines deep copy
     SCENE2D_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType &cache );
 
-    SCENE2D_API float getX();
+    SCENE2D_API float getX() const;
     SCENE2D_API void setX (float _x);
-    SCENE2D_API float getY();
+    SCENE2D_API float getY() const;
     SCENE2D_API void setY (float _y);
-    SCENE2D_API float getWidth();
+    SCENE2D_API float getWidth() const;
     SCENE2D_API void setWidth (float _width);
-    SCENE2D_API float getHeight();
+    SCENE2D_API float getHeight() const;
     SCENE2D_API void setHeight (float _height);
 
 private:
@@ -57,5 +58,5 @@ private:
 } // namespace scene2D
 
 
-#endif // _SCENE2D_DATA_VIEWPORT_HPP_
+#endif // __SCENE2D_DATA_VIEWPORT_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/ViewportMsg.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/ViewportMsg.hpp
deleted file mode 100644
index 7b266da..0000000
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/ViewportMsg.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _SCENE2D_DATA_VIEWPORTMSG_HPP_
-#define _SCENE2D_DATA_VIEWPORTMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "scene2D/config.hpp"
-
-
-namespace scene2D
-{
-namespace data
-{
-
-
-/**
- * @brief   Object event message specialized for viewport.
- */
-class SCENE2D_CLASS_API ViewportMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ViewportMsg) ( ::fwServices::ObjectMsg), ( () ),
-                                            ::fwServices::factory::message::New<ViewportMsg> );
-
-    /**
-     * @brief Constructor : does nothing.
-     * @param key Private construction key
-     */
-    SCENE2D_API ViewportMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : does nothing.
-     */
-    SCENE2D_API virtual ~ViewportMsg();
-
-    /**
-     * Event identifier used to inform for any modification among viewport parameters.
-     */
-    SCENE2D_API static std::string VALUE_IS_MODIFIED;
-};
-
-
-}   // namespace data
-}   // namespace scene2D
-
-#endif  // _SCENE2D_DATA_VIEWPORTMSG_HPP_
-
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp
index c6092ed..48fab67 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/data/namespace.hpp
@@ -1,17 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-
+#ifndef __SCENE2D_DATA_NAMESPACE_HPP__
+#define __SCENE2D_DATA_NAMESPACE_HPP__
 
 /**
-*
-*     TODO Doxygen documentation
-*
-**/
+ *
+ *     TODO Doxygen documentation
+ *
+ **/
 
 namespace scene2D
 {
@@ -19,7 +20,4 @@ namespace scene2D
 } // namespace scene2D
 
 
-
-
-
-
+#endif // __SCENE2D_DATA_NAMESPACE_HPP__
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/namespace.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/namespace.hpp
index c6092ed..a9f872b 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/namespace.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/namespace.hpp
@@ -1,25 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-
+#ifndef __SCENE2D_NAMESPACE_HPP__
+#define __SCENE2D_NAMESPACE_HPP__
 
 /**
-*
-*     TODO Doxygen documentation
-*
-**/
+ *
+ *     TODO Doxygen documentation
+ *
+ **/
 
 namespace scene2D
 {
 
 } // namespace scene2D
 
-
-
-
-
+#endif // __SCENE2D_NAMESPACE_HPP__
 
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/processing/ComputeHistogramFunctor.hxx b/Bundles/LeafVisu/scene2D/include/scene2D/processing/ComputeHistogramFunctor.hxx
index dec33fd..8ccdc63 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/processing/ComputeHistogramFunctor.hxx
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/processing/ComputeHistogramFunctor.hxx
@@ -1,12 +1,18 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 #ifndef __SCENE2D_PROCESSING_COMPUTEHISTOGRAMFUNCTOR_HXX__
 #define __SCENE2D_PROCESSING_COMPUTEHISTOGRAMFUNCTOR_HXX__
 
-#include <fwComEd/helper/Image.hpp>
-#include <fwComEd/helper/Array.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-
 #include "scene2D/processing/SComputeHistogram.hpp"
 
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
 namespace scene2D
 {
 namespace processing
@@ -20,32 +26,32 @@ struct ComputeHistogramFunctor
     /// Parameters of the functor.
     struct Parameter
     {
-        ::fwData::Image::sptr  image;
+        ::fwData::Image::sptr image;
         ::fwData::Histogram::sptr histogram;
         float binsWidth;
     };
 
     template<class IMAGETYPE>
-    void operator()(Parameter &param)
+    void operator()(Parameter& param)
     {
-        ::fwData::Image::sptr image = param.image;
+        ::fwData::Image::sptr image         = param.image;
         ::fwData::Histogram::sptr histogram = param.histogram;
 
-        ::fwComEd::helper::Image imgHelper(image);
+        ::fwDataTools::helper::Image imgHelper(image);
 
         IMAGETYPE min = std::numeric_limits<IMAGETYPE>::max();
         IMAGETYPE max = std::numeric_limits<IMAGETYPE>::min();
 
-        ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
-        SLM_ASSERT("Wrong image", max > min) ;
+        ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
+        SLM_ASSERT("Wrong image", max > min);
         if( max > min )
         {
             histogram->initialize( min, max, param.binsWidth );
 
             ::fwData::Array::sptr array = image->getDataArray();
-            ::fwComEd::helper::Array arrayHelper(array);
+            ::fwDataTools::helper::Array arrayHelper(array);
 
-            IMAGETYPE* itr = arrayHelper.begin<IMAGETYPE>();
+            IMAGETYPE* itr    = arrayHelper.begin<IMAGETYPE>();
             IMAGETYPE* itrEnd = arrayHelper.end<IMAGETYPE>();
 
             for(; itr!= itrEnd; ++itr)
diff --git a/Bundles/LeafVisu/scene2D/include/scene2D/processing/SComputeHistogram.hpp b/Bundles/LeafVisu/scene2D/include/scene2D/processing/SComputeHistogram.hpp
index a5af153..686a864 100644
--- a/Bundles/LeafVisu/scene2D/include/scene2D/processing/SComputeHistogram.hpp
+++ b/Bundles/LeafVisu/scene2D/include/scene2D/processing/SComputeHistogram.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,13 +7,13 @@
 #ifndef __SCENE2D_PROCESSING_SCOMPUTEHISTOGRAM_HPP__
 #define __SCENE2D_PROCESSING_SCOMPUTEHISTOGRAM_HPP__
 
+#include "scene2D/config.hpp"
+
 #include <fwData/Histogram.hpp>
 #include <fwData/Image.hpp>
 
 #include <fwServices/IController.hpp>
 
-#include "scene2D/config.hpp"
-
 namespace scene2D
 {
 
@@ -22,15 +22,13 @@ namespace processing
 
 /**
  * @brief The SComputeHistogram service computes the histogram of the image.
- * @class SComputeHistogram
- * @date 2013
  */
 class SCENE2D_CLASS_API SComputeHistogram : public ::fwServices::IController
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SComputeHistogram)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SComputeHistogram)(::fwServices::IController) );
 
     /// Constructor. Does nothing.
     SCENE2D_API SComputeHistogram() throw();
@@ -38,30 +36,45 @@ public:
     /// Destructor. Does nothing.
     SCENE2D_API virtual ~SComputeHistogram() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    SCENE2D_API virtual KeyConnectionsMap getAutoConnections() const;
+
 protected:
 
     /**
-    * @brief Configures the service.
-    * @verbatim
-    <service uid="computeHistogram" type="::fwServices::IController" impl="::scene2D::processing::SComputeHistogram" autoConnect="yes">
+     * @brief Configures the service.
+     * @code{.xml}
+       <service uid="computeHistogram" type="::fwServices::IController" impl="::scene2D::processing::SComputeHistogram" autoConnect="yes">
         <histogramId>Histogram</histogramId>
         <binsWidth>5.0</binsWidth>
-    </service>
-    @endverbatim
-    * - \b histogramId: Id of the histogram object.
-    * - \b binsWidth: desired bins width used to classified pixel.
-    */
+       </service>
+       @endcode
+     * - \b histogramId: Id of the histogram object.
+     * - \b binsWidth: desired bins width used to classified pixel.
+     */
     SCENE2D_API void configuring() throw ( ::fwTools::Failed );
 
     /// Starts the service. Calls updating().
     SCENE2D_API void starting()    throw ( ::fwTools::Failed );
 
-    /// Computes the histogram and notifies VALUE_IS_MODIFIED.
+    /// Computes the histogram and notifies Histogram::s_MODIFIED_SIG.
     SCENE2D_API void updating()    throw ( ::fwTools::Failed );
 
-    /// Updates the histogram object when it receives image message (BUFFER, MODIFIED, NEW_IMAGE).
-    SCENE2D_API void receiving( fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
     /// Swaps the service. Calls updating().
     SCENE2D_API void swapping()    throw ( ::fwTools::Failed );
 
diff --git a/Bundles/LeafVisu/scene2D/rc/plugin.xml b/Bundles/LeafVisu/scene2D/rc/plugin.xml
index 59dcfc9..b04fcc7 100644
--- a/Bundles/LeafVisu/scene2D/rc/plugin.xml
+++ b/Bundles/LeafVisu/scene2D/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="scene2D" class="::scene2D::Plugin">
+<plugin id="scene2D" class="::scene2D::Plugin" version="@DASH_VERSION@" >
 
     <library name="scene2D" />
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/Plugin.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/Plugin.cpp
index 04c0490..c624e17 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/Plugin.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/Plugin.cpp
@@ -1,14 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
+#include "scene2D/Plugin.hpp"
 
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
-#include "scene2D/Plugin.hpp"
 
 namespace scene2D
 {
@@ -20,17 +20,20 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw( ::fwRuntime::RuntimeException )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp
index afe23b8..aa0f780 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/Render.cpp
@@ -1,39 +1,51 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QVBoxLayout>
-
-#include <QGraphicsRectItem>
+#include "scene2D/Render.hpp"
 
-#include <fwData/Composite.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/adaptor/IAdaptor.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+#include <fwCom/helper/SigSlotConnection.hpp>
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <scene2D/adaptor/IAdaptor.hpp>
 #include <fwGuiQt/container/QtContainer.hpp>
 
-#include "scene2D/Render.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
+#include <fwServices/helper/Config.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+
+#include <QGraphicsRectItem>
+#include <QVBoxLayout>
 
-fwServicesRegisterMacro( ::fwRender::IRender , ::scene2D::Render , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRender::IRender, ::scene2D::Render, ::fwData::Composite );
 
 namespace scene2D
 {
 
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT    = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects";
 
-Render::Render() throw()
-        : m_sceneStart (-100,-100),
-          m_sceneWidth (200,200),
-          m_antialiasing(false)
+//-----------------------------------------------------------------------------
+
+Render::Render() throw() :
+    m_sceneStart(-100., -100.),
+    m_sceneWidth(200., 200.),
+    m_antialiasing(false),
+    m_scene(nullptr),
+    m_view(nullptr),
+    m_aspectRatioMode(Qt::IgnoreAspectRatio)
 {
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::ADDED_KEYS );
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS );
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS );
+    newSlot(s_ADD_OBJECTS_SLOT, &Render::addObjects, this);
+    newSlot(s_CHANGE_OBJECTS_SLOT, &Render::changeObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &Render::removeObjects, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -44,19 +56,15 @@ Render::~Render() throw()
 
 //-----------------------------------------------------------------------------
 
-QGraphicsScene* Render::getScene()
+QGraphicsScene* Render::getScene() const
 {
-    SLM_TRACE_FUNC();
-
     return m_scene;
 }
 
 //-----------------------------------------------------------------------------
 
-Scene2DGraphicsView* Render::getView()
+Scene2DGraphicsView* Render::getView() const
 {
-    SLM_TRACE_FUNC();
-
     return m_view;
 }
 
@@ -64,24 +72,22 @@ Scene2DGraphicsView* Render::getView()
 
 SPTR(::scene2D::data::Viewport) Render::getViewport()
 {
-    SLM_TRACE_FUNC();
-
     return ::scene2D::data::Viewport::dynamicCast( m_objectID2Object["view1"] );
 }
 
 //-----------------------------------------------------------------------------
 
-SPTR(::fwData::Object) Render::getRegisteredObject(ObjectIDType _objectID)
+SPTR(::fwData::Object) Render::getRegisteredObject(ObjectIDType _objectID) const
 {
-    SLM_TRACE_FUNC();
-
-    OSLM_ASSERT("Sorry, the object id '"<< _objectID <<"' does not exist in the registered objects map.", m_objectID2Object.find(_objectID) != m_objectID2Object.end() );
-    return m_objectID2Object[_objectID];
+    ObjectID2Object::const_iterator iter = m_objectID2Object.find( _objectID );
+    OSLM_ASSERT("Sorry, the object id '"<< _objectID <<"' does not exist in the registered objects map.",
+                iter != m_objectID2Object.end() );
+    return iter->second;
 }
 
 //-----------------------------------------------------------------------------
 
-void Render::dispatchInteraction( SPTR(::scene2D::data::Event) _event)
+void Render::dispatchInteraction( SPTR(::scene2D::data::Event)_event)
 {
     SLM_TRACE_FUNC();
 
@@ -92,7 +98,7 @@ void Render::dispatchInteraction( SPTR(::scene2D::data::Event) _event)
      */
     for(ZValue2AdaptorID::reverse_iterator rit = m_zValue2AdaptorID.rbegin(); rit != m_zValue2AdaptorID.rend(); ++rit )
     {
-        if ( ! _event->getAccepted() && ! m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.expired() )
+        if ( !_event->isAccepted() && !m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.expired() )
         {
             m_adaptorID2SceneAdaptor2D[ rit->second ].m_service.lock()->processInteraction( _event );
         }
@@ -101,10 +107,8 @@ void Render::dispatchInteraction( SPTR(::scene2D::data::Event) _event)
 
 //-----------------------------------------------------------------------------
 
-::scene2D::data::Coord Render::mapToScene( const ::scene2D::data::Coord & coord ) const
+::scene2D::data::Coord Render::mapToScene( const ::scene2D::data::Coord& coord ) const
 {
-    SLM_TRACE_FUNC();
-
     /// Returns the viewport coordinate point mapped to scene coordinates.
     QPoint qp ( coord.getX(), coord.getY() );
     QPointF qps = m_view->mapToScene(qp);
@@ -124,7 +128,7 @@ void Render::configuring() throw ( ::fwTools::Failed )
     m_sceneConfiguration = vectConfig.at(0);
 
     ::fwRuntime::ConfigurationElementContainer::Iterator iter;
-    for (iter = m_sceneConfiguration->begin() ; iter != m_sceneConfiguration->end() ; ++iter)
+    for (iter = m_sceneConfiguration->begin(); iter != m_sceneConfiguration->end(); ++iter)
     {
         if ((*iter)->getName() == "axis")
         {
@@ -142,11 +146,21 @@ void Render::configuring() throw ( ::fwTools::Failed )
         {
             this->configureAdaptor(*iter);
         }
+        else if((*iter)->getName() == "connect")
+        {
+            m_connect.push_back(*iter);
+        }
+        else if((*iter)->getName() == "proxy")
+        {
+            m_proxies.push_back(*iter);
+        }
         else
         {
             OSLM_ASSERT("Bad scene configurationType, unknown xml node : " << (*iter)->getName(), false);
         }
     }
+
+
 }
 
 //-----------------------------------------------------------------------------
@@ -159,60 +173,173 @@ void Render::starting() throw ( ::fwTools::Failed )
 
     this->startContext();
 
-    SPTR(::fwData::Composite) composite = this->getObject< ::fwData::Composite >();
+    ::fwData::Composite::sptr composite;
+    if(this->isVersion2())
+    {
+        composite = this->getInOut< ::fwData::Composite >(s_DEFAULT_OBJECT);
+    }
+    else
+    {
+        composite = this->getObject< ::fwData::Composite >();
+    }
 
     ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find( "self" );
     if ( objectIter != m_objectsID2AdaptorIDVector.end() )
     {
-        BOOST_FOREACH( AdaptorIDType adaptorId,  objectIter->second )
+        for(const AdaptorIDType& adaptorId :  objectIter->second )
         {
             this->startAdaptor( adaptorId, composite );
             SLM_ASSERT("Service is not started", m_adaptorID2SceneAdaptor2D[adaptorId].getService()->isStarted());
         }
     }
 
-    this->startAdaptorsFromComposite(composite);
+    ConstObjectMapType container;
+    if(this->isVersion2())
+    {
+        for(auto obj : this->getInputs())
+        {
+            if(obj.first != s_DEFAULT_OBJECT)
+            {
+                container[obj.first] = obj.second.lock();
+            }
+        }
+        for(auto obj : this->getInOuts())
+        {
+            if(obj.first != s_DEFAULT_OBJECT)
+            {
+                container[obj.first] = obj.second.lock();
+            }
+        }
+        this->startAdaptorsFromComposite(container);
+    }
+    else
+    {
+        auto objects = composite->getContainer();
+        std::for_each(objects.begin(), objects.end(), [&container](
+                          const ::fwData::Composite::ContainerType::value_type& it)
+            {
+                container[it.first] = it.second;
+            });
+        this->startAdaptorsFromComposite(container);
+    }
+
+    //Create connections when adaptors are started
+
+    for(const ::fwRuntime::ConfigurationElement::sptr& connect : m_connect)
+    {
+        if(!connect->hasAttribute("waitForKey"))
+        {
+            ::fwServices::helper::Config::createConnections(connect, m_connections);
+        }
+    }
+    for(const ::fwRuntime::ConfigurationElement::sptr& proxy : m_proxies)
+    {
+        if(!proxy->hasAttribute("waitForKey"))
+        {
+            ::fwServices::helper::Config::createProxy("self", proxy, m_proxyMap);
+        }
+    }
+    this->connectAfterWait(composite->getContainer());
 }
 
 //-----------------------------------------------------------------------------
 
-void Render::updating() throw ( ::fwTools::Failed )
+void Render::connectAfterWait(const ::fwData::Composite::ContainerType& objects)
 {
-    SLM_TRACE_FUNC();
+
+    for(const ::fwData::Composite::value_type& element : objects)
+    {
+        std::string key = element.first;
+        for(const ::fwRuntime::ConfigurationElement::sptr& connect : m_connect)
+        {
+            if(connect->hasAttribute("waitForKey"))
+            {
+                std::string waitForKey = connect->getAttributeValue("waitForKey");
+                if(waitForKey == key)
+                {
+                    ::fwServices::helper::Config::createConnections(connect, m_objectConnections[key], element.second);
+                }
+            }
+        }
+
+        for(const ::fwRuntime::ConfigurationElement::sptr& proxy : m_proxies)
+        {
+            if(proxy->hasAttribute("waitForKey"))
+            {
+                std::string waitForKey = proxy->getAttributeValue("waitForKey");
+                if(waitForKey == key)
+                {
+                    ::fwServices::helper::Config::createProxy(key, proxy, m_proxyMap, element.second);
+                }
+            }
+        }
+    }
 }
 
 //-----------------------------------------------------------------------------
 
-void Render::receiving( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
+void Render::disconnect(const ::fwData::Composite::ContainerType& objects)
 {
-    SLM_TRACE_FUNC();
 
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(_msg);
-
-    if(compositeMsg && compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) )
+    for(const ::fwData::Composite::value_type& element : objects)
     {
-        SPTR(::fwData::Composite) field = compositeMsg->getAddedKeys();
-        this->startAdaptorsFromComposite(field);
-    }
-    else if(compositeMsg && compositeMsg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS ) )
-    {
-        SPTR(::fwData::Composite) field = compositeMsg->getRemovedKeys();
-        this->stopAdaptorsFromComposite(field);
-    }
-    else if(compositeMsg && compositeMsg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS ) )
-    {
-        this->swapAdaptorsFromComposite(compositeMsg->getNewChangedKeys());
-        //SLM_FATAL("ToDo IM");
+        std::string key = element.first;
+        if(m_objectConnections.find(key) != m_objectConnections.end())
+        {
+            m_objectConnections[key].disconnect();
+            m_objectConnections.erase(key);
+        }
+
+        ::fwServices::helper::Config::disconnectProxies(key, m_proxyMap);
     }
 }
 
 //-----------------------------------------------------------------------------
 
+void Render::updating() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
 void Render::swapping() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
 
-    //SLM_FATAL("ToDo IM");
+void Render::swapping(const IService::KeyType& key) throw(::fwTools::Failed)
+{
+    if (this->isVersion2())
+    {
+        // remove connections
+        auto iter = m_objectConnections.find(key);
+        if(iter != m_objectConnections.end())
+        {
+            iter->second.disconnect();
+            m_objectConnections.erase(key);
+        }
+        ::fwServices::helper::Config::disconnectProxies(key, m_proxyMap);
+
+        ConstObjectMapType map;
+        auto obj = this->getInput< ::fwData::Object>(key);
+        obj = (obj == nullptr) ? this->getInOut< ::fwData::Object>(key) : obj;
+
+        map[key] = obj;
+        this->stopAdaptorsFromComposite(map);
+
+        // create connections
+        if(obj)
+        {
+            this->startAdaptorsFromComposite(map);
+
+            ::fwData::Composite::ContainerType mapConnect;
+            mapConnect[key] = ::fwData::Object::constCast(obj);
+            this->connectAfterWait(mapConnect);
+        }
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -221,18 +348,55 @@ void Render::stopping() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 
-    SPTR(::fwData::Composite) composite = this->getObject< ::fwData::Composite >();
+    m_connections.disconnect();
+
+    ::fwData::Composite::sptr composite;
+    if(this->isVersion2())
+    {
+        composite = this->getInOut< ::fwData::Composite >(s_DEFAULT_OBJECT);
+    }
+    else
+    {
+        composite = this->getObject< ::fwData::Composite >();
+    }
+
+    this->disconnect(composite->getContainer());
 
     ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find( "self" );
     if ( objectIter != m_objectsID2AdaptorIDVector.end() )
     {
-        BOOST_FOREACH( AdaptorIDType adaptorId,  objectIter->second )
+        for(const AdaptorIDType& adaptorId : objectIter->second )
         {
             this->stopAdaptor( adaptorId );
         }
     }
 
-    this->stopAdaptorsFromComposite(composite);
+    ConstObjectMapType container;
+    if(this->isVersion2())
+    {
+        for(auto obj : this->getInOuts())
+        {
+            if(obj.first != s_DEFAULT_OBJECT)
+            {
+                container[obj.first] = obj.second.lock();
+            }
+        }
+        for(auto obj : this->getInputs())
+        {
+            if(obj.first != s_DEFAULT_OBJECT)
+            {
+                container[obj.first] = obj.second.lock();
+            }
+        }
+        this->stopAdaptorsFromComposite(container);
+    }
+    else
+    {
+        auto objects = composite->getContainer();
+        std::for_each(objects.begin(), objects.end(), [&container](
+                          ::fwData::Composite::ContainerType::value_type it){ container[it.first] = it.second; });
+        this->stopAdaptorsFromComposite(container);
+    }
 
     m_adaptorID2SceneAdaptor2D.clear();
     m_objectID2Object.clear();
@@ -250,7 +414,8 @@ void Render::startContext()
 {
     SLM_TRACE_FUNC();
 
-    SPTR(::fwGuiQt::container::QtContainer) qtContainer =  ::fwGuiQt::container::QtContainer::dynamicCast(this->getContainer());
+    SPTR(::fwGuiQt::container::QtContainer) qtContainer = ::fwGuiQt::container::QtContainer::dynamicCast(
+        this->getContainer());
 
     m_scene = new QGraphicsScene( m_sceneStart.getX(), m_sceneStart.getY(), m_sceneWidth.getX(), m_sceneWidth.getY());
     m_scene->setBackgroundBrush(QBrush(QColor(0,0,0)));
@@ -263,7 +428,7 @@ void Render::startContext()
     m_view->setSceneRender( ::scene2D::Render::dynamicCast( this->getSptr() ) );
     m_view->setRenderHint( QPainter::Antialiasing, m_antialiasing );
 
-    QVBoxLayout *layout = new QVBoxLayout;
+    QVBoxLayout* layout = new QVBoxLayout;
     layout->addWidget(m_view);
     qtContainer->getQtContainer()->setLayout(layout);
 
@@ -282,7 +447,7 @@ void Render::stopContext()
 
 //-----------------------------------------------------------------------------
 
-Qt::AspectRatioMode Render::getAspectRatioMode()
+Qt::AspectRatioMode Render::getAspectRatioMode() const
 {
     return m_aspectRatioMode;
 }
@@ -310,10 +475,10 @@ void Render::configureAxis( ConfigurationType _conf )
 
     SLM_ASSERT("\"axis\" tag required", _conf->getName() == "axis");
 
-    std::string id      = _conf->getAttributeValue("id");
-    std::string origin  = _conf->getAttributeValue("origin");
-    std::string scale   = _conf->getAttributeValue("scale");
-    std::string scaleType    = _conf->getAttributeValue("scaleType");
+    std::string id        = _conf->getAttributeValue("id");
+    std::string origin    = _conf->getAttributeValue("origin");
+    std::string scale     = _conf->getAttributeValue("scale");
+    std::string scaleType = _conf->getAttributeValue("scaleType");
 
 
     if(m_objectID2Object.count(id) == 0)
@@ -334,11 +499,11 @@ void Render::configureViewport( ConfigurationType _conf )
 
     SLM_ASSERT("\"viewport\" tag required", _conf->getName() == "viewport");
 
-    std::string id  = _conf->getAttributeValue("id");
-    std::string x  = _conf->getAttributeValue("x");
-    std::string y   = _conf->getAttributeValue("y");
-    std::string width    = _conf->getAttributeValue("width");
-    std::string height    = _conf->getAttributeValue("height");
+    std::string id     = _conf->getAttributeValue("id");
+    std::string x      = _conf->getAttributeValue("x");
+    std::string y      = _conf->getAttributeValue("y");
+    std::string width  = _conf->getAttributeValue("width");
+    std::string height = _conf->getAttributeValue("height");
 
     m_objectID2Object[id] = ::scene2D::data::Viewport::New();
     SLM_ASSERT( "Sorry, viewport ptr is null",  m_objectID2Object[id] );
@@ -356,9 +521,9 @@ void Render::configureScene( ConfigurationType _conf )
 
     SLM_ASSERT("\"viewport\" tag required", _conf->getName() == "scene");
 
-    std::string x = _conf->getAttributeValue("x");
-    std::string y = _conf->getAttributeValue("y");
-    std::string width = _conf->getAttributeValue("width");
+    std::string x      = _conf->getAttributeValue("x");
+    std::string y      = _conf->getAttributeValue("y");
+    std::string width  = _conf->getAttributeValue("width");
     std::string height = _conf->getAttributeValue("height");
 
     m_sceneStart.setX( ::boost::lexical_cast< float >( x ) );
@@ -377,7 +542,7 @@ void Render::configureScene( ConfigurationType _conf )
     if( _conf->hasAttribute(("aspectRatioMode")))
     {
         m_aspectRatioMode = (_conf->getAttributeValue("aspectRatioMode") == "KeepAspectRatioByExpanding")
-            ? Qt::KeepAspectRatioByExpanding : Qt::IgnoreAspectRatio;
+                            ? Qt::KeepAspectRatioByExpanding : Qt::IgnoreAspectRatio;
     }
 }
 
@@ -389,41 +554,42 @@ void Render::configureAdaptor( ConfigurationType _conf )
 
     SLM_ASSERT("\"adaptor\" tag required", _conf->getName() == "adaptor");
 
-    const std::string id            = _conf->getAttributeValue("id");
-    const std::string objectId      = _conf->getAttributeValue("objectId");
-    const std::string type          = _conf->getAttributeValue("class");
-    const std::string uid           = _conf->getAttributeValue("uid");
+    const std::string id       = _conf->getAttributeValue("id");
+    const std::string objectId = _conf->getAttributeValue("objectId");
+    const std::string type     = _conf->getAttributeValue("class");
+    const std::string uid      = _conf->getAttributeValue("uid");
 
-    SLM_ASSERT( "'id' required attribute missing or empty"      , !id.empty() );
+    SLM_ASSERT( "'id' required attribute missing or empty", !id.empty() );
     SLM_ASSERT( "'objectId' required attribute missing or empty", !objectId.empty() );
-    SLM_ASSERT( "'class' required attribute missing or empty" , !type.empty() );
+    SLM_ASSERT( "'class' required attribute missing or empty", !type.empty() );
 
     m_objectsID2AdaptorIDVector[objectId].push_back(id);
 
     SceneAdaptor2D adaptee;
-    adaptee.m_uid = uid;
-    adaptee.m_type = type;
-    adaptee.m_config = * (_conf->begin());
+    adaptee.m_uid    = uid;
+    adaptee.m_type   = type;
+    adaptee.m_config = *(_conf->begin());
 
     m_adaptorID2SceneAdaptor2D[id] = adaptee;
 }
 
 //-----------------------------------------------------------------------------
 
-void Render::startAdaptorsFromComposite( SPTR(::fwData::Composite) _composite)
+void Render::startAdaptorsFromComposite(const ConstObjectMapType& objects)
 {
     SLM_TRACE_FUNC();
 
-    BOOST_FOREACH( ::fwData::Composite::value_type elem, (*_composite) )
+    for(const auto& elem : objects )
     {
-        std::string compositeKey = elem.first;
+        std::string compositeKey                       = elem.first;
         ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find( compositeKey );
         if ( objectIter != m_objectsID2AdaptorIDVector.end() )
         {
-            BOOST_FOREACH( AdaptorIDType adaptorId,  objectIter->second )
+            for(const AdaptorIDType& adaptorId :  objectIter->second )
             {
                 this->startAdaptor( adaptorId, elem.second );
-                OSLM_ASSERT("Service "<<adaptorId<<" is not started", m_adaptorID2SceneAdaptor2D[adaptorId].getService()->isStarted());
+                SLM_ASSERT("Service "+adaptorId+" is not started",
+                           m_adaptorID2SceneAdaptor2D[adaptorId].getService()->isStarted());
             }
         }
     }
@@ -431,21 +597,20 @@ void Render::startAdaptorsFromComposite( SPTR(::fwData::Composite) _composite)
 
 //-----------------------------------------------------------------------------
 
-void Render::swapAdaptorsFromComposite( SPTR(::fwData::Composite) _composite)
+void Render::swapAdaptorsFromComposite(const ::fwData::Composite::ContainerType& objects)
 {
-    SLM_TRACE_FUNC();
-    BOOST_FOREACH( ::fwData::Composite::value_type elem, (*_composite) )
+    for(const ::fwData::Composite::value_type& elem : objects)
     {
-        std::string compositeKey = elem.first;
+        std::string compositeKey                       = elem.first;
         ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find( compositeKey );
         if ( objectIter != m_objectsID2AdaptorIDVector.end() )
         {
-            BOOST_FOREACH( AdaptorIDType adaptorId,  objectIter->second )
+            for(const AdaptorIDType& adaptorId : objectIter->second )
             {
                 ::fwRuntime::ConfigurationElementContainer::Iterator iter;
-                for (iter = m_sceneConfiguration->begin() ; iter != m_sceneConfiguration->end() ; ++iter)
+                for (const auto& config : m_sceneConfiguration->getElements())
                 {
-                    if ((*iter)->getName() == "adaptor" && (*iter)->getAttributeValue("id") == adaptorId)
+                    if((config->getName() == "adaptor") && (config->getAttributeValue("id") == adaptorId))
                     {
                         this->swapAdaptor( adaptorId, elem.second );
                     }
@@ -457,16 +622,15 @@ void Render::swapAdaptorsFromComposite( SPTR(::fwData::Composite) _composite)
 
 //-----------------------------------------------------------------------------
 
-void Render::stopAdaptorsFromComposite( SPTR(::fwData::Composite) _composite)
+void Render::stopAdaptorsFromComposite(const ConstObjectMapType& objects)
 {
-    SLM_TRACE_FUNC();
-    BOOST_FOREACH( ::fwData::Composite::value_type elem, (*_composite) )
+    for(const auto& elem : objects)
     {
-        std::string compositeKey = elem.first;
+        std::string compositeKey                       = elem.first;
         ObjectsID2AdaptorIDVector::iterator objectIter = m_objectsID2AdaptorIDVector.find( compositeKey );
         if ( objectIter != m_objectsID2AdaptorIDVector.end() )
         {
-            BOOST_FOREACH( AdaptorIDType adaptorId,  objectIter->second )
+            for(const AdaptorIDType& adaptorId : objectIter->second )
             {
                 this->stopAdaptor( adaptorId );
             }
@@ -476,24 +640,25 @@ void Render::stopAdaptorsFromComposite( SPTR(::fwData::Composite) _composite)
 
 //-----------------------------------------------------------------------------
 
-void Render::startAdaptor(AdaptorIDType _adaptorID, SPTR(::fwData::Object) _object)
+void Render::startAdaptor(const AdaptorIDType& _adaptorID, const CSPTR(::fwData::Object)& _object)
 {
-    SLM_TRACE_FUNC();
-
     if (!m_adaptorID2SceneAdaptor2D[_adaptorID].m_uid.empty())
     {
-        m_adaptorID2SceneAdaptor2D[_adaptorID].m_service = ::fwServices::add< ::scene2D::adaptor::IAdaptor >( _object , m_adaptorID2SceneAdaptor2D[_adaptorID].m_type, m_adaptorID2SceneAdaptor2D[_adaptorID].m_uid);
+        m_adaptorID2SceneAdaptor2D[_adaptorID].m_service = ::fwServices::add< ::scene2D::adaptor::IAdaptor >(
+            _object, m_adaptorID2SceneAdaptor2D[_adaptorID].m_type, m_adaptorID2SceneAdaptor2D[_adaptorID].m_uid);
     }
     else
     {
-        m_adaptorID2SceneAdaptor2D[_adaptorID].m_service = ::fwServices::add< ::scene2D::adaptor::IAdaptor >( _object , m_adaptorID2SceneAdaptor2D[_adaptorID].m_type);
+        m_adaptorID2SceneAdaptor2D[_adaptorID].m_service = ::fwServices::add< ::scene2D::adaptor::IAdaptor >(
+            _object, m_adaptorID2SceneAdaptor2D[_adaptorID].m_type);
     }
 
     SLM_ASSERT("\"config\" tag required", m_adaptorID2SceneAdaptor2D[_adaptorID].m_config->getName() == "config");
     SLM_ASSERT("Adaptor service expired", m_adaptorID2SceneAdaptor2D[_adaptorID].getService());
 
     m_adaptorID2SceneAdaptor2D[_adaptorID].getService()->setScene2DRender(Render::dynamicCast(this->shared_from_this()));
-    m_adaptorID2SceneAdaptor2D[_adaptorID].getService()->setConfiguration(m_adaptorID2SceneAdaptor2D[_adaptorID].m_config);
+    m_adaptorID2SceneAdaptor2D[_adaptorID].getService()->setConfiguration(
+        m_adaptorID2SceneAdaptor2D[_adaptorID].m_config);
     m_adaptorID2SceneAdaptor2D[_adaptorID].getService()->configure();
     m_adaptorID2SceneAdaptor2D[_adaptorID].getService()->start();
 
@@ -505,28 +670,30 @@ void Render::startAdaptor(AdaptorIDType _adaptorID, SPTR(::fwData::Object) _obje
 
 //-----------------------------------------------------------------------------
 
-void Render::swapAdaptor(AdaptorIDType _adaptorID, SPTR(::fwData::Object) _object)
+void Render::swapAdaptor(const AdaptorIDType& _adaptorID, const SPTR(::fwData::Object)& _object)
 {
     SLM_TRACE_FUNC();
 
-     m_adaptorID2SceneAdaptor2D[ _adaptorID ].getService()->swap( _object );
+    m_adaptorID2SceneAdaptor2D[ _adaptorID ].getService()->swap( _object );
 }
 
 //-----------------------------------------------------------------------------
 
-void Render::stopAdaptor(AdaptorIDType _adaptorID)
+void Render::stopAdaptor(const AdaptorIDType& _adaptorID)
 {
     SLM_TRACE_FUNC();
 
-    SceneAdaptor2D & info = m_adaptorID2SceneAdaptor2D[_adaptorID];
+    SceneAdaptor2D& info = m_adaptorID2SceneAdaptor2D[_adaptorID];
 
-    m_zValue2AdaptorID.erase( info.getService()->getZValue() );
-
-    info.getService()->stop();
-    SLM_ASSERT("Service is not stopped", info.getService()->isStopped());
-    ::fwServices::OSR::unregisterService(info.getService());
-    info.m_service.reset();
+    if(info.getService())
+    {
+        m_zValue2AdaptorID.erase( info.getService()->getZValue() );
 
+        info.getService()->stop();
+        SLM_ASSERT("Service is not stopped", info.getService()->isStopped());
+        ::fwServices::OSR::unregisterService(info.getService());
+        info.m_service.reset();
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -553,7 +720,62 @@ void Render::updateSceneSize( float ratioPercent )
     m_sceneWidth.setY( h );
 
     m_scene->setSceneRect( rec );
+}
+
+//------------------------------------------------------------------------------
+
+void Render::addObjects(::fwData::Composite::ContainerType objects)
+{
+    ConstObjectMapType map;
+    std::for_each(objects.begin(), objects.end(), [&map](
+                      const ::fwData::Composite::ContainerType::value_type& it){ map[it.first] = it.second; });
+    this->startAdaptorsFromComposite(map);
+    this->connectAfterWait(objects);
+}
+
+//------------------------------------------------------------------------------
+
+void Render::changeObjects(::fwData::Composite::ContainerType newObjects,
+                           ::fwData::Composite::ContainerType oldObjects)
+{
+    this->disconnect(oldObjects);
+    this->swapAdaptorsFromComposite(newObjects);
+    this->connectAfterWait(newObjects);
+}
+
+//------------------------------------------------------------------------------
+
+void Render::removeObjects(::fwData::Composite::ContainerType objects)
+{
+    this->disconnect(objects);
+    ConstObjectMapType map;
+    std::for_each(objects.begin(), objects.end(), [&map](
+                      const ::fwData::Composite::ContainerType::value_type& it){ map[it.first] = it.second; });
+    this->stopAdaptorsFromComposite(map);
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Render::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT ) );
+
+    return connections;
+}
+
+//-----------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap Render::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( s_DEFAULT_OBJECT, ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT );
+    connections.push( s_DEFAULT_OBJECT, ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT );
+    connections.push( s_DEFAULT_OBJECT, ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT );
 
+    return connections;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/Scene2DGraphicsView.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/Scene2DGraphicsView.cpp
index 89432ba..4862d79 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/Scene2DGraphicsView.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/Scene2DGraphicsView.cpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/Composite.hpp>
-
 #include "scene2D/data/Size.hpp"
 #include "scene2D/Scene2DGraphicsView.hpp"
 #include "scene2D/Render.hpp"
 
+#include <fwData/Composite.hpp>
+
+
 #include <QMouseEvent>
 
 namespace scene2D
@@ -38,7 +39,7 @@ Scene2DGraphicsView::Scene2DGraphicsView(QGraphicsScene* scene, QWidget* widget)
 
     this->setViewportUpdateMode( QGraphicsView::BoundingRectViewportUpdate );
     this->setOptimizationFlags( QGraphicsView::DontSavePainterState          //
-                              | QGraphicsView::DontAdjustForAntialiasing );  // Prevent from rendering artifacts
+                                | QGraphicsView::DontAdjustForAntialiasing ); // Prevent from rendering artifacts
     this->setCacheMode( QGraphicsView::CacheBackground );   // Activates background cache
     this->setAttribute( Qt::WA_TranslucentBackground, false );
     this->setFrameStyle( 0 );
@@ -46,7 +47,7 @@ Scene2DGraphicsView::Scene2DGraphicsView(QGraphicsScene* scene, QWidget* widget)
 
 //-----------------------------------------------------------------------------
 
-void Scene2DGraphicsView::setSceneRender( SPTR(::scene2D::Render) sceneRender )
+void Scene2DGraphicsView::setSceneRender( SPTR(::scene2D::Render)sceneRender )
 {
     m_scene2DRender = sceneRender;
 }
@@ -99,11 +100,11 @@ void Scene2DGraphicsView::mousePressEvent ( QMouseEvent * _event )
 {
     SLM_TRACE_FUNC();
 
-    OSLM_TRACE("Press in x = " <<  _event->posF().x() << " y = " << _event->posF().y() );
+    OSLM_TRACE("Press in x = " <<  _event->localPos().x() << " y = " << _event->localPos().y() );
 
     ::scene2D::data::Event::sptr sceneEvent = ::scene2D::data::Event::New();
     sceneEvent->setType( ::scene2D::data::Event::MouseButtonPress );
-    sceneEvent->setCoord( ::scene2D::data::Coord( _event->posF().x(), _event->posF().y() ) );
+    sceneEvent->setCoord( ::scene2D::data::Coord( _event->localPos().x(), _event->localPos().y() ) );
     sceneEvent->setButton( this->getScene2DButtonFromEvent( _event ) );
     sceneEvent->setModifier( this->getScene2DModifierFromEvent( _event) );
 
@@ -173,11 +174,11 @@ void Scene2DGraphicsView::mouseDoubleClickEvent ( QMouseEvent * _event )
 {
     SLM_TRACE_FUNC();
 
-    OSLM_TRACE("DoubleClick in x = " <<  _event->posF().x() << " y = " << _event->posF().y() );
+    OSLM_TRACE("DoubleClick in x = " <<  _event->localPos().x() << " y = " << _event->localPos().y() );
 
     ::scene2D::data::Event::sptr sceneEvent = ::scene2D::data::Event::New();
     sceneEvent->setType( ::scene2D::data::Event::MouseButtonDoubleClick );
-    sceneEvent->setCoord( ::scene2D::data::Coord( _event->posF().x(), _event->posF().y() ) );
+    sceneEvent->setCoord( ::scene2D::data::Coord( _event->localPos().x(), _event->localPos().y() ) );
     sceneEvent->setButton( this->getScene2DButtonFromEvent( _event ) );
     sceneEvent->setModifier( this->getScene2DModifierFromEvent( _event) );
 
@@ -189,10 +190,10 @@ void Scene2DGraphicsView::mouseDoubleClickEvent ( QMouseEvent * _event )
 void Scene2DGraphicsView::mouseReleaseEvent ( QMouseEvent * _event )
 {
     SLM_TRACE_FUNC();
-    OSLM_TRACE("Release in x = " <<  _event->posF().x() << " y = " << _event->posF().y() );
+    OSLM_TRACE("Release in x = " <<  _event->localPos().x() << " y = " << _event->localPos().y() );
     ::scene2D::data::Event::sptr sceneEvent = ::scene2D::data::Event::New();
     sceneEvent->setType( ::scene2D::data::Event::MouseButtonRelease );
-    sceneEvent->setCoord( ::scene2D::data::Coord( _event->posF().x(), _event->posF().y() ) );
+    sceneEvent->setCoord( ::scene2D::data::Coord( _event->localPos().x(), _event->localPos().y() ) );
     sceneEvent->setButton( this->getScene2DButtonFromEvent( _event ) );
     sceneEvent->setModifier( this->getScene2DModifierFromEvent( _event) );
 
@@ -205,10 +206,10 @@ void Scene2DGraphicsView::mouseMoveEvent ( QMouseEvent * _event )
 {
     SLM_TRACE_FUNC();
 
-    OSLM_TRACE("Move in x = " <<  _event->posF().x() << " y = " << _event->posF().y() );
+    OSLM_TRACE("Move in x = " <<  _event->localPos().x() << " y = " << _event->localPos().y() );
     ::scene2D::data::Event::sptr sceneEvent = ::scene2D::data::Event::New();
     sceneEvent->setType( ::scene2D::data::Event::MouseMove );
-    sceneEvent->setCoord( ::scene2D::data::Coord( _event->posF().x(), _event->posF().y() ) );
+    sceneEvent->setCoord( ::scene2D::data::Coord( _event->localPos().x(), _event->localPos().y() ) );
     sceneEvent->setButton( this->getScene2DButtonFromEvent( _event ) );
     sceneEvent->setModifier( this->getScene2DModifierFromEvent( _event) );
 
@@ -243,6 +244,7 @@ void Scene2DGraphicsView::setViewport( ::scene2D::data::Viewport::sptr viewport
 void Scene2DGraphicsView::updateFromViewport()
 {
     ::scene2D::data::Viewport::sptr viewport = m_viewport.lock();
+    SLM_ASSERT("Viewport is not set", viewport);
 
     this->fitInView(
         viewport->getX(), viewport->getY(), viewport->getWidth(), viewport->getHeight(),
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp
index c0180d0..8185600 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Axis.cpp
@@ -1,20 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "scene2D/data/InitQtPen.hpp"
+#include "scene2D/adaptor/Axis.hpp"
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwData/Composite.hpp>
 
 #include <QGraphicsItemGroup>
 
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/data/ViewportMsg.hpp"
-#include "scene2D/adaptor/Axis.hpp"
-
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Axis, ::fwData::Composite );
 
@@ -24,9 +22,8 @@ namespace scene2D
 namespace adaptor
 {
 
-Axis::Axis() throw() : m_showLine(true), m_tickSize(0.02), m_color("white")
+Axis::Axis() throw() : m_showLine(true), m_tickSize(0.02f), m_color(Qt::white)
 {
-//    addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
 }
 
 //--------------------------------------------------------------------------------------------------
@@ -40,10 +37,10 @@ Axis::~Axis() throw()
 
 void Axis::doStart() throw( ::fwTools::Failed)
 {
-    m_viewport = ::scene2D::data::Viewport::dynamicCast( ::fwTools::fwID::getObject( m_viewportID ) );
+    m_viewport = this->getSafeInOut< ::scene2D::data::Viewport>( m_viewportID );
 
-    m_connection = m_viewport->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connection = m_viewport->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
 
     this->buildAxis();
     this->doUpdate();
@@ -85,10 +82,11 @@ void Axis::configuring() throw( ::fwTools::Failed)
 
     // 'align' attribute configuration
     m_align = m_configuration->getAttributeValue("align");
-    SLM_ASSERT("'align' attribute is missing. Please add an 'align' attribute with value 'left', 'right', 'top' or 'bottom'",
-            !m_align.empty());
+    SLM_ASSERT(
+        "'align' attribute is missing. Please add an 'align' attribute with value 'left', 'right', 'top' or 'bottom'",
+        !m_align.empty());
     SLM_ASSERT("Unsupported value for 'align' attribute.",
-           m_align == "left" || m_align == "right" || m_align == "top" || m_align == "bottom");
+               m_align == "left" || m_align == "right" || m_align == "top" || m_align == "bottom");
 
 
     // Axis bounds
@@ -109,11 +107,11 @@ void Axis::configuring() throw( ::fwTools::Failed)
 
     // Viewport
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
-            !m_configuration->getAttributeValue("viewportUID").empty());
+               !m_configuration->getAttributeValue("viewportUID").empty());
 
     if( !m_configuration->getAttributeValue("viewportUID").empty() )
     {
-        m_viewportID =  m_configuration->getAttributeValue("viewportUID");
+        m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
 
 
@@ -126,6 +124,7 @@ void Axis::configuring() throw( ::fwTools::Failed)
 
 void Axis::buildAxis()
 {
+    m_color.setCosmetic(true);
     const int nbValues = (m_max - m_min) / m_interval + 1;
     m_layer = new QGraphicsItemGroup();
 
@@ -181,9 +180,9 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
 
     ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
     const double viewportHeight = viewport->getHeight();
-    const double viewportWidth = viewport->getWidth();
+    const double viewportWidth  = viewport->getWidth();
 
-    const double viewportSizeRatio = viewportHeight / viewportWidth;
+    const double viewportSizeRatio    = viewportHeight / viewportWidth;
     const double viewInitialSizeRatio = m_viewInitialSize.first / m_viewInitialSize.second;
 
     double viewportWidthRatio = this->getViewportSizeRatio().first;
@@ -196,7 +195,7 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
     scaleX = scaleX * ratio.first;
     scaleY = scaleY * ratio.second;
 
-    const int nbValues = m_ticks.size();
+    const size_t nbValues = m_ticks.size();
 
     const double min = this->getStartVal();
     const double max = this->getEndVal();
@@ -206,7 +205,7 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
     std::pair<double, double> tickPos;
 
     const std::pair<double, double> viewportSize = this->mapAdaptorToScene(
-            std::pair<double, double>(viewportWidth, viewportHeight), m_xAxis, m_yAxis);
+        std::pair<double, double>(viewportWidth, viewportHeight), m_xAxis, m_yAxis);
 
     if(m_align == "bottom")
     {
@@ -216,11 +215,11 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
 
         for(int i = 0; i < nbValues; ++i)
         {
-            pos = min + i * m_interval;
+            pos     = min + i * m_interval;
             tickPos = this->mapAdaptorToScene(std::pair<double, double>(pos, tickPosY), m_xAxis, m_yAxis);
             m_ticks.at(i)->setLine(
-                    tickPos.first, tickPos.second,
-                    tickPos.first, tickPos.second - tickSize.second * scaleY);
+                tickPos.first, tickPos.second,
+                tickPos.first, tickPos.second - tickSize.second * scaleY);
         }
 
         m_line->setLine(min, tickPos.second, max, tickPos.second);
@@ -233,12 +232,12 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
 
         for(int i = 0; i < nbValues; ++i)
         {
-            pos = min + i * m_interval;
+            pos     = min + i * m_interval;
             tickPos = this->mapAdaptorToScene(std::pair<double, double>(pos, tickPosY), m_xAxis, m_yAxis);
 
             m_ticks.at(i)->setLine(
-                    tickPos.first, tickPos.second,
-                    tickPos.first, tickPos.second - tickSize.second * scaleY);
+                tickPos.first, tickPos.second,
+                tickPos.first, tickPos.second - tickSize.second * scaleY);
         }
 
         m_line->setLine(min, tickPos.second, max, tickPos.second);
@@ -251,11 +250,11 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
 
         for(int i = 0; i < nbValues; ++i)
         {
-            pos = min + i * m_interval;
+            pos     = min + i * m_interval;
             tickPos = this->mapAdaptorToScene(std::pair<double, double>(tickPosX, pos), m_xAxis, m_yAxis);
             m_ticks.at(i)->setLine(
-                    tickPos.first, tickPos.second,
-                    tickPos.first + tickSize.first * scaleX, tickPos.second);
+                tickPos.first, tickPos.second,
+                tickPos.first + tickSize.first * scaleX, tickPos.second);
         }
 
         m_line->setLine( tickPos.first, min, tickPos.first, tickPos.second);
@@ -263,7 +262,7 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
     else if(m_align == "right")
     {
         tickSize = this->mapAdaptorToScene(
-                std::pair<double, double>(m_tickSize, 0), m_xAxis, m_yAxis);
+            std::pair<double, double>(m_tickSize, 0), m_xAxis, m_yAxis);
 
         const double tickPosX = m_viewport->getX() + m_viewport->getWidth();
 
@@ -272,27 +271,17 @@ void Axis::doUpdate() throw( ::fwTools::Failed)
             pos = min + i * m_interval;
 
             tickPos = this->mapAdaptorToScene(
-                    std::pair<double, double>(tickPosX, pos), m_xAxis, m_yAxis);
+                std::pair<double, double>(tickPosX, pos), m_xAxis, m_yAxis);
 
             m_ticks.at(i)->setLine(
-                  tickPos.first - tickSize.first * scaleX, tickPos.second,
-                  tickPos.first, tickPos.second);
+                tickPos.first - tickSize.first * scaleX, tickPos.second,
+                tickPos.first, tickPos.second);
         }
 
         m_line->setLine(tickPos.first, min, tickPos.first, tickPos.second);
     }
 }
 
-//--------------------------------------------------------------------------------------------------
-
-void Axis::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    if( _msg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED) )
-    {
-        doUpdate();
-    }
-}
-
 //---------------------------------------------------------------------------------------
 
 void Axis::processInteraction( ::scene2D::data::Event::sptr _event)
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/CurvedHistogram.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/CurvedHistogram.cpp
index f6abf4b..eca933c 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/CurvedHistogram.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/CurvedHistogram.cpp
@@ -1,26 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/bspline.h"
+
+#include "scene2D/adaptor/CurvedHistogram.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwServices/macros.hpp>
 
 #include <fwData/Float.hpp>
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/mt/ObjectReadLock.hpp>
 
-#include <fwComEd/HistogramMsg.hpp>
-
 #include <QGraphicsRectItem>
 #include <QGraphicsView>
 
-#include "scene2D/bspline.h"    // test Alex
-
-#include "scene2D/adaptor/CurvedHistogram.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::CurvedHistogram, ::fwData::Histogram);
 
@@ -34,14 +33,14 @@ namespace scene2D
 namespace adaptor
 {
 
-const float CurvedHistogram::SCALE = 1.1f; // vertical scaling factor applied at each mouse scroll
+const float CurvedHistogram::SCALE            = 1.1f; // vertical scaling factor applied at each mouse scroll
 const float CurvedHistogram::NB_POINTS_BEZIER = 100.0f;
 
 //-----------------------------------------------------------------------------------------------------------------
 
 CurvedHistogram::CurvedHistogram() throw() : m_borderWidth(1.75f), m_scale(1.0)
 {
-    m_layer = NULL;
+    m_layer       = NULL;
     m_painterPath = NULL;
 }
 
@@ -61,20 +60,20 @@ void CurvedHistogram::configuring() throw( ::fwTools::Failed)
 
     this->IAdaptor::configuring();  // Looks for 'xAxis', 'yAxis', 'opacity' and 'zValue'
 
-    m_innerColor = QPen( Qt::transparent );
+    m_innerColor  = QPen( Qt::transparent );
     m_borderColor = QPen( Qt::transparent );
-    m_brush = QBrush( Qt::NoBrush );
+    m_brush       = QBrush( Qt::NoBrush );
 
     if (!m_configuration->getAttributeValue("borderColor").empty())
     {
         ::scene2D::data::InitQtPen::setPenColor(
-                m_borderColor, m_configuration->getAttributeValue("borderColor"), m_opacity );
+            m_borderColor, m_configuration->getAttributeValue("borderColor"), m_opacity );
     }
 
     if (!m_configuration->getAttributeValue("innerColor").empty())
     {
         ::scene2D::data::InitQtPen::setPenColor(
-                m_innerColor, m_configuration->getAttributeValue("innerColor"), m_opacity );
+            m_innerColor, m_configuration->getAttributeValue("innerColor"), m_opacity );
     }
 
     if (!m_configuration->getAttributeValue("borderWidth").empty())
@@ -85,7 +84,7 @@ void CurvedHistogram::configuring() throw( ::fwTools::Failed)
     m_histogramPointUID = m_configuration->getAttributeValue("histogramPointUID");
 
     OSLM_WARN_IF("If an histogram cursor is used with this histogram, m_histogramPointUID must be set in order to "
-            << "inform about the position that the cursor should use.", m_histogramPointUID.empty());
+                 << "inform about the position that the cursor should use.", m_histogramPointUID.empty());
 }
 
 //----------------------------------------------------------------------------------------------------------
@@ -108,10 +107,10 @@ void CurvedHistogram::doStart() throw( ::fwTools::Failed)
 
 //----------------------------------------------------------------------------------------------------------
 
-CurvedHistogram::Points CurvedHistogram::getControlPoints( ::fwData::Histogram::sptr _histogram)
+CurvedHistogram::Points CurvedHistogram::getControlPoints(const ::fwData::Histogram::sptr& _histogram) const
 {
     ::fwData::Histogram::fwHistogramValues histogramValues = _histogram->getValues();
-    const float binsWidth = _histogram->getBinsWidth();
+    const float binsWidth    = _histogram->getBinsWidth();
     const float histogramMin = _histogram->getMinValue();
 
     Point p;
@@ -122,7 +121,7 @@ CurvedHistogram::Points CurvedHistogram::getControlPoints( ::fwData::Histogram::
     // (testing...)
     for(unsigned int i = 0; i < nbValues; ++i)
     {
-        p.first = (double)(histogramMin + i * binsWidth);
+        p.first  = (double)(histogramMin + i * binsWidth);
         p.second = histogramValues[i];
 
         controlPoints.push_back( p );
@@ -133,43 +132,42 @@ CurvedHistogram::Points CurvedHistogram::getControlPoints( ::fwData::Histogram::
 
 //----------------------------------------------------------------------------------------------------------
 
-CurvedHistogram::Points CurvedHistogram::getBSplinePoints( Points & _points )
+CurvedHistogram::Points CurvedHistogram::getBSplinePoints( const Points & _points ) const
 {
     Points bSplinePoints;
-    Points::iterator it;
     point_list list;        // see bspline.h
 
     // Add again the first point with a higher value in order to prevent B-Spline algorithm from removing
     // the first value.
     list.add_point(
-            new point(
-                (float) _points[0].first,
-                (float) _points[0].second * 2) );
+        new point(
+            (float) _points[0].first,
+            (float) _points[0].second * 2) );
 
     // Add all the points
-    for( it = _points.begin(); it != _points.end(); ++it )
+    for(const auto& pt : _points )
     {
         list.add_point(
-                new point(
-                    (float)((*it).first),
-                    (float)((*it).second)) );
+            new point(
+                (float)(pt.first),
+                (float)(pt.second)) );
     }
 
     // Add again the last point
     list.add_point(
-            new point(
-                (float) _points.back().first,
-                (float) _points.back().second / 2 ) );
+        new point(
+            (float) _points.back().first,
+            (float) _points.back().second / 2 ) );
 
 
     // Commpute the points of the B-Spline with external code from AHO (to be integrated here later).
     cat_curve curve( list );
-    curve.precision = static_cast<int>(_points.size() * 5);
+    curve.m_precision = static_cast<int>(_points.size() * 5);
     curve.compute();
 
-    for(int i = 0; i < curve.precision; ++i)
+    for(int i = 0; i < curve.m_precision; ++i)
     {
-        bSplinePoints.push_back( Point( curve.curve_point[i].x, curve.curve_point[i].y ) );
+        bSplinePoints.push_back( Point( curve.m_curve_point[i].x, curve.m_curve_point[i].y ) );
     }
 
     return bSplinePoints;
@@ -177,22 +175,18 @@ CurvedHistogram::Points CurvedHistogram::getBSplinePoints( Points & _points )
 
 //----------------------------------------------------------------------------------------------------------
 
-CurvedHistogram::Points CurvedHistogram::getResampledBSplinePoints( Points & _bSplinePoints )
+CurvedHistogram::Points CurvedHistogram::getResampledBSplinePoints(const Points & _bSplinePoints ) const
 {
-    SLM_TRACE_FUNC();
-
     Points points;
-    Points::iterator it;
-
     Point point = _bSplinePoints.front();
 
     double dx, dy;
     const double maxLength = 2000;
-    double segmentLength = 0;
+    double segmentLength   = 0;
 
     points.push_back( point );
 
-    for(it = _bSplinePoints.begin() + 1; it != _bSplinePoints.end(); ++it)
+    for(Points::const_iterator it = _bSplinePoints.begin() + 1; it != _bSplinePoints.end(); ++it)
     {
         dx = abs((*it).first - point.first);    // theoretically positive
         dy = abs((*it).second - point.second);
@@ -219,15 +213,33 @@ CurvedHistogram::Points CurvedHistogram::getResampledBSplinePoints( Points & _bS
 
 void CurvedHistogram::computePointToPathLengthMapFromBSplinePoints( Points & _bSplinePoints )
 {
-    Point p;
-    Points::iterator it;
+    Points::iterator it = _bSplinePoints.begin();
 
-    for(it = _bSplinePoints.begin(); it != _bSplinePoints.end(); ++it)
+    if( it != _bSplinePoints.end())
     {
-        p = this->mapAdaptorToScene( *it, m_xAxis, m_yAxis );
+        Point p;
 
+        p = this->mapAdaptorToScene( *it, m_xAxis, m_yAxis );
+        QPointF prevPt = QPointF(p.first,  p.second);
         m_painterPath->lineTo( p.first, p.second );
-        m_positionsToPathLength[ (int) p.first ] = m_painterPath->length();
+        qreal len = m_painterPath->length();
+        ++it;
+
+        for(; it != _bSplinePoints.end(); ++it)
+        {
+            p = this->mapAdaptorToScene( *it, m_xAxis, m_yAxis );
+
+            m_painterPath->lineTo( p.first, p.second );
+
+            // This is way too slow as the complexity is O(N.log(N) )
+            //m_positionsToPathLength[ (int) p.first ] = m_painterPath->length();
+
+            QPointF pt(p.first,  p.second);
+            len                                     += QLineF( prevPt, pt ).length();
+            m_positionsToPathLength[ (int) p.first ] = len;
+
+            prevPt = pt;
+        }
     }
 }
 
@@ -271,14 +283,16 @@ void CurvedHistogram::doUpdate() throw( ::fwTools::Failed)
 
 //----------------------------------------------------------------------------------------------------------
 
-void CurvedHistogram::buildBSplineFromPoints( Points & _bSplinePoints )
+void CurvedHistogram::buildBSplineFromPoints(Points & _bSplinePoints )
 {
     ::fwData::Histogram::sptr histogram = this->getObject< ::fwData::Histogram>();
 
     const bool useBorderColor = (m_borderColor.color() != Qt::transparent);
-    const bool useInnerColor = (m_innerColor.color() != Qt::transparent);
+    const bool useInnerColor  = (m_innerColor.color() != Qt::transparent);
 
-    Point currentPoint = this->mapAdaptorToScene( Point(histogram->getMinValue(), _bSplinePoints[0].second), m_xAxis, m_yAxis );
+    Point currentPoint = this->mapAdaptorToScene( Point(
+                                                      histogram->getMinValue(), _bSplinePoints[0].second), m_xAxis,
+                                                  m_yAxis );
     Point previousPoint = currentPoint;
     Points::iterator it;
 
@@ -287,9 +301,9 @@ void CurvedHistogram::buildBSplineFromPoints( Points & _bSplinePoints )
     path.lineTo( startPoint );
 
     const int maxLinesPerPath = 10;
-    int lineCount = 0;
+    int lineCount             = 0;
 
-    previousPoint.first = startPoint.x();
+    previousPoint.first  = startPoint.x();
     previousPoint.second = startPoint.y();
 
     // Build the path with the B-Spline points
@@ -347,15 +361,15 @@ void CurvedHistogram::addBorderItem( const QPainterPath & _path )
 //----------------------------------------------------------------------------------------------------------
 
 CurvedHistogram::Points CurvedHistogram::quadraticInterpolation(
-        const Point _p0, const Point _p1, const Point _p2 )
+    const Point _p0, const Point _p1, const Point _p2 )
 {
     Points points;
     Point p;
 
     const double d2 =
         2 * ((_p2.second - _p1.second) / (_p2.first - _p1.first) - (_p1.second - _p0.second)
-                / (_p1.first - _p0.first))
-            / (_p2.first - _p0.first);
+             / (_p1.first - _p0.first))
+        / (_p2.first - _p0.first);
 
     const double d1 = (_p2.second - _p1.second) / (_p2.first - _p1.first) - 0.5 * d2 * (_p2.first - _p1.first);
     const double d0 = _p1.second;
@@ -364,7 +378,7 @@ CurvedHistogram::Points CurvedHistogram::quadraticInterpolation(
 
     for(double x = _p0.first; x < _p2.first; x += 0.5)
     {
-        p.first = x;
+        p.first  = x;
         p.second = 0.5 * d2 * pow(x - _p1.first, 2) + d1 * (x - _p1.first) + d0;
 
         points.push_back( p );
@@ -386,7 +400,7 @@ CurvedHistogram::Points CurvedHistogram::cosinusInterpolation(const Point _p0, c
     {
         mu2 = (1 - std::cos(mu * PI)) / 2;
 
-        p.first = _p0.first + mu * deltaX;
+        p.first  = _p0.first + mu * deltaX;
         p.second = _p0.second * (1 - mu2) + _p1.second * mu2;
 
         points.push_back( p );
@@ -398,7 +412,7 @@ CurvedHistogram::Points CurvedHistogram::cosinusInterpolation(const Point _p0, c
 //----------------------------------------------------------------------------------------------------------
 
 CurvedHistogram::Points CurvedHistogram::cubicInterpolation(
-        const Point _p0, const Point _p1, const Point _p2, const Point _p3 )
+    const Point _p0, const Point _p1, const Point _p2, const Point _p3 )
 {
     Points points;
     Point p;
@@ -409,11 +423,11 @@ CurvedHistogram::Points CurvedHistogram::cubicInterpolation(
         mu2 = mu * mu;
 
         /*
-        a0 = _p3.second - _p2.second - _p0.second + _p1.second;
-        a1 = _p0.second - _p1.second - a0;
-        a2 = _p2.second - _p0.second;
-        a3 = _p1.second;
-        */
+           a0 = _p3.second - _p2.second - _p0.second + _p1.second;
+           a1 = _p0.second - _p1.second - a0;
+           a2 = _p2.second - _p0.second;
+           a3 = _p1.second;
+         */
 
         // Smoother curves (Catmull-Rom s_plines)
         a0 = -0.5*_p0.second + 1.5*_p1.second - 1.5*_p2.second + 0.5*_p3.second;
@@ -421,7 +435,7 @@ CurvedHistogram::Points CurvedHistogram::cubicInterpolation(
         a2 = -0.5*_p0.second + 0.5*_p2.second;
         a3 = _p1.second;
 
-        p.first = _p1.first + mu * deltaX;
+        p.first  = _p1.first + mu * deltaX;
         p.second = a0 * mu * mu2 +a1 * mu2 + a2 * mu + a3;
 
         points.push_back( p );
@@ -432,34 +446,30 @@ CurvedHistogram::Points CurvedHistogram::cubicInterpolation(
 
 //----------------------------------------------------------------------------------------------------------
 
-void CurvedHistogram::updateCurrentPoint( ::scene2D::data::Event::sptr _event )
+void CurvedHistogram::updateCurrentPoint(const ::scene2D::data::Event::sptr& _event )
 {
-    SLM_TRACE_FUNC();
-
     SLM_ASSERT("m_histogramPointUID must be defined in order to update the related ::fwData::Point data.",
-            !m_histogramPointUID.empty());
+               !m_histogramPointUID.empty());
 
-    ::fwData::Histogram::sptr histogram = this->getObject< ::fwData::Histogram>();
+    ::fwData::Histogram::sptr histogram           = this->getObject< ::fwData::Histogram>();
     ::fwData::Histogram::fwHistogramValues values = histogram->getValues();
-    const float histogramMinValue = histogram->getMinValue();
+    const float histogramMinValue  = histogram->getMinValue();
     const float histogramBinsWidth = histogram->getBinsWidth();
 
     // Event coordinates in scene
     ::scene2D::data::Coord sceneCoord = this->getScene2DRender()->mapToScene( _event->getCoord() );
 
     const int histIndex = (int) sceneCoord.getX();
-    const int index = histIndex - histogramMinValue;
-    const int nbValues = (int)values.size() * histogramBinsWidth;
+    const int index     = histIndex - histogramMinValue;
+    const int nbValues  = (int)values.size() * histogramBinsWidth;
 
     if(index >= 0 && index < nbValues && m_positionsToPathLength.find( histIndex ) != m_positionsToPathLength.end())
     {
-        double key = m_positionsToPathLength[ histIndex ];
+        double key           = m_positionsToPathLength[ histIndex ];
         const double percent = m_painterPath->percentAtLength( key );
-        QPointF qPoint = m_painterPath->pointAtPercent( percent );
-
-        ::fwData::Point::sptr point =
-            ::fwData::Point::dynamicCast( ::fwTools::fwID::getObject( m_histogramPointUID ) );
+        QPointF qPoint       = m_painterPath->pointAtPercent( percent );
 
+        ::fwData::Point::sptr point = this->getSafeInOut< ::fwData::Point>( m_histogramPointUID );
         SLM_ASSERT("m_histogramPointUID can't be null here.", point);
 
         point->getRefCoord()[0] = sceneCoord.getX();
@@ -480,7 +490,7 @@ CurvedHistogram::Points CurvedHistogram::linearInterpolation( const Point _p1, c
     {
         t = i / 100;
 
-        p.first = _p1.first + ( _p2.first - _p1.first ) * t;
+        p.first  = _p1.first + ( _p2.first - _p1.first ) * t;
         p.second = _p1.second + ( _p2.second - _p1.second ) * t;
         points.push_back( p );
     }
@@ -490,17 +500,6 @@ CurvedHistogram::Points CurvedHistogram::linearInterpolation( const Point _p1, c
 
 //----------------------------------------------------------------------------------------------------------
 
-void CurvedHistogram::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    ::fwComEd::HistogramMsg::csptr histoMsg = ::fwComEd::HistogramMsg::dynamicConstCast(_msg);
-    if (histoMsg && histoMsg->hasEvent(::fwComEd::HistogramMsg::VALUE_IS_MODIFIED))
-    {
-        this->doUpdate();
-    }
-}
-
-//----------------------------------------------------------------------------------------------------------
-
 void CurvedHistogram::doSwap() throw( ::fwTools::Failed)
 {
     this->doUpdate();
@@ -536,14 +535,14 @@ void CurvedHistogram::processInteraction( ::scene2D::data::Event::sptr _event)
     if( _event->getType() == ::scene2D::data::Event::MouseWheelUp )
     {
         m_scale *= SCALE;
-        m_layer->scale(1, SCALE);
+        m_layer->setTransform(QTransform::fromScale(1, SCALE), true);
 
         updatePointedPos = true;
     }
     else if( _event->getType() == ::scene2D::data::Event::MouseWheelDown )
     {
         m_scale /= SCALE;
-        m_layer->scale(1, 1 / SCALE);
+        m_layer->setTransform(QTransform::fromScale(1, 1 / SCALE), true);
 
         updatePointedPos = true;
     }
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp
index c41f531..69899aa 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Grid2D.cpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/Grid2D.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
 #include <QGraphicsItemGroup>
 
-#include "scene2D/adaptor/Grid2D.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
-#include "scene2D/data/ViewportMsg.hpp"
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::Grid2D  , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Grid2D, ::fwData::Composite );
 
 
 namespace scene2D
@@ -24,7 +24,6 @@ namespace adaptor
 
 Grid2D::Grid2D() throw() : m_xSpacing(10), m_ySpacing(10)
 {
-//    addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -85,20 +84,20 @@ void Grid2D::draw()
 
     // Calculate the start, end and step on x for the lines
     const float xStartVal = getXStartVal();    // Allows to start drawing the grid from 0 with the correct step
-    const float xEndVal = getXEndVal();      // Allows to start drawing the grid from 0 with the correct step
+    const float xEndVal   = getXEndVal();    // Allows to start drawing the grid from 0 with the correct step
 
     // Calculate the start, end and step on y for the lines
     const float yStartVal = getYStartVal();    // Allows to start drawing the grid from 0 with the correct step
-    const float yEndVal = getYEndVal();        // Allows to start drawing the grid from 0 with the correct step
+    const float yEndVal   = getYEndVal();      // Allows to start drawing the grid from 0 with the correct step
 
     // Holds the current computed coordinates:
     std::pair< double, double > coord1, coord2;
 
     // Draw the horizontal lines
-    for ( float yVal = yStartVal ; yVal <= yEndVal ; yVal += m_ySpacing )
+    for ( float yVal = yStartVal; yVal <= yEndVal; yVal += m_ySpacing )
     {
-        coord1 = this->mapAdaptorToScene( std::pair< double, double >( xStartVal, yVal) , m_xAxis, m_yAxis );
-        coord2 = this->mapAdaptorToScene( std::pair< double, double >( xEndVal, yVal) , m_xAxis, m_yAxis );
+        coord1 = this->mapAdaptorToScene( std::pair< double, double >( xStartVal, yVal), m_xAxis, m_yAxis );
+        coord2 = this->mapAdaptorToScene( std::pair< double, double >( xEndVal, yVal), m_xAxis, m_yAxis );
 
         QGraphicsLineItem* line = new QGraphicsLineItem(coord1.first, coord1.second, coord2.first, coord2.second);
 
@@ -108,10 +107,10 @@ void Grid2D::draw()
     }
 
     // Draw the vertical lines
-    for ( float xVal = xStartVal ; xVal <= xEndVal ; xVal += m_xSpacing )
+    for ( float xVal = xStartVal; xVal <= xEndVal; xVal += m_xSpacing )
     {
-        coord1 = this->mapAdaptorToScene(std::pair< double, double >( xVal, yStartVal) , m_xAxis, m_yAxis);
-        coord2 = this->mapAdaptorToScene(std::pair< double, double >( xVal, yEndVal) , m_xAxis, m_yAxis);
+        coord1 = this->mapAdaptorToScene(std::pair< double, double >( xVal, yStartVal), m_xAxis, m_yAxis);
+        coord2 = this->mapAdaptorToScene(std::pair< double, double >( xVal, yEndVal), m_xAxis, m_yAxis);
 
         QGraphicsLineItem* line = new QGraphicsLineItem(coord1.first, coord1.second, coord2.first, coord2.second);
 
@@ -121,7 +120,7 @@ void Grid2D::draw()
     }
 
     // Add the lines contained in the lines vector to the layer
-    for ( unsigned int i = 0 ; i < m_lines.size() ; i++)
+    for ( unsigned int i = 0; i < m_lines.size(); i++)
     {
         m_layer->addToGroup(m_lines.at(i));
     }
@@ -145,6 +144,7 @@ void Grid2D::doStart() throw ( ::fwTools::Failed )
 
     // Set the pen a style
     m_pen.setStyle(Qt::DashLine);
+    m_pen.setCosmetic(true);
 
     this->draw();
     this->doUpdate();
@@ -187,18 +187,6 @@ void Grid2D::doUpdate() throw ( ::fwTools::Failed )
 
 //---------------------------------------------------------------------------------------------------------------
 
-void Grid2D::doReceive( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    if( _msg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED) )
-    {
-        doUpdate();
-    }
-}
-
-//---------------------------------------------------------------------------------------------------------------
-
 void Grid2D::processInteraction( ::scene2D::data::Event::sptr _event)
 {
     if( _event->getType() == ::scene2D::data::Event::Resize)
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/GridFromFloat.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/GridFromFloat.cpp
index 4f21698..129e887 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/GridFromFloat.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/GridFromFloat.cpp
@@ -1,19 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/GridFromFloat.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+
+#include <fwServices/macros.hpp>
 #include <fwData/Float.hpp>
-#include <fwComEd/FloatMsg.hpp>
 
 #include <QGraphicsItemGroup>
 
-#include "scene2D/adaptor/GridFromFloat.hpp"
-#include "scene2D/data/InitQtPen.hpp"
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::GridFromFloat  , ::fwData::Float ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::GridFromFloat, ::fwData::Float );
 
 
 namespace scene2D
@@ -21,17 +21,21 @@ namespace scene2D
 namespace adaptor
 {
 
-GridFromFloat::GridFromFloat() throw()
-: m_xSpacing (10),
-  m_ySpacing (10)
+//------------------------------------------------------------------------------
+
+GridFromFloat::GridFromFloat() throw() : m_xSpacing (10.f),
+                                         m_ySpacing (10.f)
 {
-//    addNewHandledEvent( ::fwComEd::FloatMsg::VALUE_IS_MODIFIED );
 }
 
+//------------------------------------------------------------------------------
+
 GridFromFloat::~GridFromFloat() throw()
 {
 }
 
+//------------------------------------------------------------------------------
+
 void GridFromFloat::configuring() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
@@ -63,6 +67,8 @@ void GridFromFloat::configuring() throw ( ::fwTools::Failed )
     }
 }
 
+//------------------------------------------------------------------------------
+
 void GridFromFloat::draw()
 {
     SLM_TRACE_FUNC();
@@ -80,44 +86,44 @@ void GridFromFloat::draw()
 
     // Calculate the start, end and step on x for the lines
     float xStartVal = (int)( m_xMin / m_xSpacing ) * m_xSpacing;
-    float xEndVal = (int)( m_xMax / m_xSpacing ) * m_xSpacing;
-    float xStep = m_xSpacing;
+    float xEndVal   = (int)( m_xMax / m_xSpacing ) * m_xSpacing;
+    float xStep     = m_xSpacing;
 
     // Calculate the start, end and step on y for the lines
     float yStartVal = (int)( m_yMin / m_ySpacing ) * m_ySpacing;
-    float yEndVal = (int)( m_yMax / m_ySpacing ) * m_ySpacing;
-    float yStep = m_ySpacing;
+    float yEndVal   = (int)( m_yMax / m_ySpacing ) * m_ySpacing;
+    float yStep     = m_ySpacing;
 
     // Draw the horizontal lines
-    for ( float yVal = yStartVal ; yVal <= yEndVal ; yVal += yStep )
+    for ( float yVal = yStartVal; yVal <= yEndVal; yVal += yStep )
     {
         QGraphicsLineItem* line = new QGraphicsLineItem(
-            this->mapAdaptorToScene(std::pair< double , double >( xStartVal, yVal) , m_xAxis, m_yAxis).first,
-            this->mapAdaptorToScene(std::pair< double , double >( xStartVal, yVal) , m_xAxis, m_yAxis).second,
-            this->mapAdaptorToScene(std::pair< double , double >( xEndVal, yVal) , m_xAxis, m_yAxis).first,
-            this->mapAdaptorToScene(std::pair< double , double >( xEndVal, yVal) , m_xAxis, m_yAxis).second
-        );
+            this->mapAdaptorToScene(std::pair< double, double >( xStartVal, yVal), m_xAxis, m_yAxis).first,
+            this->mapAdaptorToScene(std::pair< double, double >( xStartVal, yVal), m_xAxis, m_yAxis).second,
+            this->mapAdaptorToScene(std::pair< double, double >( xEndVal, yVal), m_xAxis, m_yAxis).first,
+            this->mapAdaptorToScene(std::pair< double, double >( xEndVal, yVal), m_xAxis, m_yAxis).second
+            );
         // Set the line the pen and push it back in to the lines vector
         line->setPen(m_pen);
         m_lines.push_back(line);
     }
 
     // Draw the vertical lines
-    for ( float xVal = xStartVal ; xVal <= xEndVal ; xVal += xStep )
+    for ( float xVal = xStartVal; xVal <= xEndVal; xVal += xStep )
     {
         QGraphicsLineItem* line = new QGraphicsLineItem(
-            this->mapAdaptorToScene(std::pair< double , double >( xVal, yStartVal) , m_xAxis, m_yAxis).first,
-            this->mapAdaptorToScene(std::pair< double , double >( xVal, yStartVal) , m_xAxis, m_yAxis).second,
-            this->mapAdaptorToScene(std::pair< double , double >( xVal, yEndVal) , m_xAxis, m_yAxis).first,
-            this->mapAdaptorToScene(std::pair< double , double >( xVal, yEndVal) , m_xAxis, m_yAxis).second
-        );
+            this->mapAdaptorToScene(std::pair< double, double >( xVal, yStartVal), m_xAxis, m_yAxis).first,
+            this->mapAdaptorToScene(std::pair< double, double >( xVal, yStartVal), m_xAxis, m_yAxis).second,
+            this->mapAdaptorToScene(std::pair< double, double >( xVal, yEndVal), m_xAxis, m_yAxis).first,
+            this->mapAdaptorToScene(std::pair< double, double >( xVal, yEndVal), m_xAxis, m_yAxis).second
+            );
         // Set the line the pen and push it back in to the lines vector
         line->setPen(m_pen);
         m_lines.push_back(line);
     }
 
     // Add the lines contained in the lines vector to the layer
-    for ( unsigned int i = 0 ; i < m_lines.size() ; i++)
+    for ( unsigned int i = 0; i < m_lines.size(); i++)
     {
         m_layer->addToGroup(m_lines.at(i));
     }
@@ -129,6 +135,8 @@ void GridFromFloat::draw()
     this->getScene2DRender()->getScene()->addItem(m_layer);
 }
 
+//------------------------------------------------------------------------------
+
 void GridFromFloat::doStart() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
@@ -137,40 +145,33 @@ void GridFromFloat::doStart() throw ( ::fwTools::Failed )
     m_layer = new QGraphicsItemGroup();
     // Set the pen a style
     m_pen.setStyle(Qt::DashLine);
-    this->draw();  
+    m_pen.setCosmetic(true);
+    this->draw();
 }
 
-void GridFromFloat::doUpdate() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
+//------------------------------------------------------------------------------
 
-void GridFromFloat::doReceive( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
+void GridFromFloat::doUpdate() throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-
-    // Get and cast the ObjectMsg to FloatMsg
-    ::fwComEd::FloatMsg::csptr floatMsg = ::fwComEd::FloatMsg::dynamicConstCast(_msg);
-
-    // If the message is VALUE_IS_MODIFIED
-    if(floatMsg && floatMsg->hasEvent( ::fwComEd::FloatMsg::VALUE_IS_MODIFIED ) )
+    // Check if the float object isn't negative
+    if (this->getObject< ::fwData::Float >()->getValue() > 0)
     {
-        // Check if the float object isn't negative
-        if (this->getObject< ::fwData::Float >()->getValue() > 0)
-        {
-            // Set the xSpacing the float object value
-            m_xSpacing = this->getObject< ::fwData::Float >()->getValue();
-        }
-
-        this->draw();
+        // Set the xSpacing the float object value
+        m_xSpacing = this->getObject< ::fwData::Float >()->getValue();
     }
+
+    this->draw();
 }
 
+//------------------------------------------------------------------------------
+
 void GridFromFloat::doSwap() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 }
 
+//------------------------------------------------------------------------------
+
 void GridFromFloat::doStop() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
@@ -181,6 +182,19 @@ void GridFromFloat::doStop() throw ( ::fwTools::Failed )
     this->getScene2DRender()->getScene()->removeItem(m_layer);
 }
 
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType GridFromFloat::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace adaptor
 } // namespace scene2D
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Histogram.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Histogram.cpp
index d9b9356..224c4d0 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Histogram.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Histogram.cpp
@@ -1,22 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/Histogram.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwServices/macros.hpp>
 
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 
-#include <fwComEd/HistogramMsg.hpp>
-
 #include <QGraphicsRectItem>
 #include <QGraphicsView>
 
-#include "scene2D/adaptor/Histogram.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Histogram, ::fwData::Histogram);
 
@@ -66,7 +65,7 @@ void Histogram::configuring() throw( ::fwTools::Failed)
     m_histogramPointUID = m_configuration->getAttributeValue("histogramPointUID");
 
     OSLM_WARN_IF("If an histogram cursor is used with this histogram, m_histogramPointUID must be set in order to "
-            << "inform about the position that the cursor should use.", m_histogramPointUID.empty());
+                 << "inform about the position that the cursor should use.", m_histogramPointUID.empty());
 }
 
 //---------------------------------------------------------------------------------------------------------
@@ -86,7 +85,7 @@ void Histogram::doUpdate() throw( ::fwTools::Failed)
 
     this->doStop();
 
-    ::fwData::Histogram::sptr histogram = this->getObject< ::fwData::Histogram>();
+    ::fwData::Histogram::sptr histogram           = this->getObject< ::fwData::Histogram>();
     ::fwData::Histogram::fwHistogramValues values = histogram->getValues();
 
     if (!values.empty())
@@ -97,13 +96,13 @@ void Histogram::doUpdate() throw( ::fwTools::Failed)
         color.setAlphaF( m_opacity );
         m_color.setColor( color );
 
-        const float min = histogram->getMinValue();
+        const float min       = histogram->getMinValue();
         const float binsWidth = histogram->getBinsWidth();
 
         // Initialize the path with a start point:
         // The value preceding the current value that we'll use to build the arcs of the path
         std::pair< double, double > startPoint = this->mapAdaptorToScene(
-                std::pair<double, double>(min, values[0]), m_xAxis, m_yAxis);
+            std::pair<double, double>(min, values[0]), m_xAxis, m_yAxis);
 
         std::pair<double, double> pair;
 
@@ -114,7 +113,7 @@ void Histogram::doUpdate() throw( ::fwTools::Failed)
         for(int i = 1; i < nbValues; ++i)
         {
             pair = this->mapAdaptorToScene(
-                    std::pair<double, double>(min + i * binsWidth, values[i]), m_xAxis, m_yAxis);
+                std::pair<double, double>(min + i * binsWidth, values[i]), m_xAxis, m_yAxis);
 
             QPainterPath painter( QPointF(startPoint.first, 0) );
             painter.lineTo( startPoint.first, startPoint.second );
@@ -148,25 +147,23 @@ void Histogram::updateCurrentPoint( ::scene2D::data::Event::sptr _event )
     SLM_TRACE_FUNC();
 
     SLM_ASSERT("m_histogramPointUID must be defined in order to update the related ::fwData::Point data.",
-            !m_histogramPointUID.empty());
+               !m_histogramPointUID.empty());
 
-    ::fwData::Histogram::sptr histogram = this->getObject< ::fwData::Histogram>();
+    ::fwData::Histogram::sptr histogram           = this->getObject< ::fwData::Histogram>();
     ::fwData::Histogram::fwHistogramValues values = histogram->getValues();
-    const float histogramMinValue = histogram->getMinValue();
+    const float histogramMinValue  = histogram->getMinValue();
     const float histogramBinsWidth = histogram->getBinsWidth();
 
     // Event coordinates in scene
     ::scene2D::data::Coord sceneCoord = this->getScene2DRender()->mapToScene( _event->getCoord() );
 
     const int histIndex = (int) sceneCoord.getX();
-    const int index = histIndex - histogramMinValue;
-    const int nbValues = (int)values.size() * histogramBinsWidth;
+    const int index     = histIndex - histogramMinValue;
+    const int nbValues  = (int)values.size() * histogramBinsWidth;
 
     if(index >= 0 && index < nbValues)
     {
-        ::fwData::Point::sptr point =
-            ::fwData::Point::dynamicCast( ::fwTools::fwID::getObject( m_histogramPointUID ) );
-
+        ::fwData::Point::sptr point = this->getSafeInOut< ::fwData::Point>( m_histogramPointUID );
         SLM_ASSERT("m_histogramPointUID can't be null here.", point);
 
         point->getRefCoord()[0] = sceneCoord.getX();
@@ -176,17 +173,6 @@ void Histogram::updateCurrentPoint( ::scene2D::data::Event::sptr _event )
 
 //---------------------------------------------------------------------------------------------------------
 
-void Histogram::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    ::fwComEd::HistogramMsg::csptr histoMsg = ::fwComEd::HistogramMsg::dynamicConstCast(_msg);
-    if (histoMsg && histoMsg->hasEvent(::fwComEd::HistogramMsg::VALUE_IS_MODIFIED))
-    {
-        this->doUpdate();
-    }
-}
-
-//---------------------------------------------------------------------------------------------------------
-
 void Histogram::doSwap() throw( ::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
@@ -216,7 +202,7 @@ void Histogram::processInteraction( ::scene2D::data::Event::sptr _event)
     if( _event->getType() == ::scene2D::data::Event::MouseWheelUp )
     {
         m_scale *= SCALE;
-        m_layer->scale(1, SCALE);
+        m_layer->setTransform(QTransform::fromScale(1, SCALE), true);
 
         //_event->setAccepted( true );
         m_yAxis->setScale( m_scale );
@@ -226,7 +212,7 @@ void Histogram::processInteraction( ::scene2D::data::Event::sptr _event)
     else if( _event->getType() == ::scene2D::data::Event::MouseWheelDown )
     {
         m_scale /= SCALE;
-        m_layer->scale(1, 1 / SCALE);
+        m_layer->setTransform(QTransform::fromScale(1, 1 / SCALE), true);
 
         //_event->setAccepted( true );
         m_yAxis->setScale( m_scale );
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp
index 867f869..b015bf8 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramCursor.cpp
@@ -1,24 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/adaptor/HistogramCursor.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+
+#include <fwServices/macros.hpp>
 
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 
-#include <fwComEd/HistogramMsg.hpp>
-
 #include <QGraphicsEllipseItem>
 #include <QFont>
 
-#include "scene2D/Scene2DGraphicsView.hpp"
-#include "scene2D/adaptor/HistogramCursor.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/data/ViewportMsg.hpp"
-
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::HistogramCursor, ::fwData::Histogram);
 
@@ -27,10 +24,9 @@ namespace scene2D
 namespace adaptor
 {
 
-HistogramCursor::HistogramCursor() throw()
-: m_color("red"), m_borderColor("gray"), m_opacity(0.8), m_pointSize(6)
+HistogramCursor::HistogramCursor() throw() :
+    m_color("red"), m_borderColor(Qt::gray), m_opacity(0.8f), m_index(nullptr), m_pointSize(6.f), m_layer(nullptr)
 {
-//    addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -68,14 +64,15 @@ void HistogramCursor::configuring() throw( ::fwTools::Failed)
     }
 
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
-            !m_configuration->getAttributeValue("viewportUID").empty());
+               !m_configuration->getAttributeValue("viewportUID").empty());
 
     if( !m_configuration->getAttributeValue("viewportUID").empty() )
     {
-        m_viewportID =  m_configuration->getAttributeValue("viewportUID");
+        m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
 
-    SLM_ASSERT("'histogramPointUID' attribute is missing.", !m_configuration->getAttributeValue("histogramPointUID").empty());
+    SLM_ASSERT("'histogramPointUID' attribute is missing.", !m_configuration->getAttributeValue(
+                   "histogramPointUID").empty());
     m_histogramPointUID = m_configuration->getAttributeValue("histogramPointUID");
 }
 
@@ -83,13 +80,12 @@ void HistogramCursor::configuring() throw( ::fwTools::Failed)
 
 void HistogramCursor::doStart() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     m_index = new QGraphicsEllipseItem();
     m_index->setBrush( m_color.color() );
     m_index->setPen( m_borderColor );
     m_index->setZValue(m_zValue);
     m_index->setCacheMode( QGraphicsItem::DeviceCoordinateCache );
+    m_color.setCosmetic(true);
 
     // Initialize the layer
     m_layer = new QGraphicsItemGroup();
@@ -100,10 +96,10 @@ void HistogramCursor::doStart() throw( ::fwTools::Failed)
     m_layer->setPos(m_xAxis->getOrigin(), m_yAxis->getOrigin());
     m_layer->setZValue(m_zValue);
 
-    m_viewport = ::scene2D::data::Viewport::dynamicCast( ::fwTools::fwID::getObject( m_viewportID ) );
+    m_viewport = this->getSafeInOut< ::scene2D::data::Viewport>( m_viewportID );
 
-    m_connection = m_viewport->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connection = m_viewport->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
 
     // Add the layer containing grid's lines to the scene
     this->getScene2DRender()->getScene()->addItem(m_layer);
@@ -113,8 +109,6 @@ void HistogramCursor::doStart() throw( ::fwTools::Failed)
 
 void HistogramCursor::doStop() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     m_connection.disconnect();
 }
 
@@ -122,33 +116,34 @@ void HistogramCursor::doStop() throw( ::fwTools::Failed)
 
 void HistogramCursor::doUpdate() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
+    this->initializeViewSize();
+    this->initializeViewportSize();
 
-    ::fwData::Histogram::sptr histogram = this->getObject< ::fwData::Histogram>();
+    ::fwData::Histogram::sptr histogram           = this->getObject< ::fwData::Histogram>();
     ::fwData::Histogram::fwHistogramValues values = histogram->getValues();
-    const float histogramMinValue = histogram->getMinValue();
+    const float histogramMinValue  = histogram->getMinValue();
     const float histogramBinsWidth = histogram->getBinsWidth();
 
     // Event coordinates in scene
     ::scene2D::data::Coord sceneCoord = this->getScene2DRender()->mapToScene( m_coord );
 
     int histIndex = (int) sceneCoord.getX();
-    int index = (histIndex - histogramMinValue) / histogramBinsWidth;
+    int index     = (histIndex - histogramMinValue) / histogramBinsWidth;
 
     if(index >= 0 && index < (int)values.size()) // avoid std out_of_range on MS Windows
     {
         ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
         const double viewportHeight = viewport->getHeight();
-        const double viewportWidth = viewport->getWidth();
+        const double viewportWidth  = viewport->getWidth();
 
-        const double viewportSizeRatio = viewportHeight / viewportWidth;
+        const double viewportSizeRatio    = viewportHeight / viewportWidth;
         const double viewInitialSizeRatio = m_viewInitialSize.first / m_viewInitialSize.second;
 
-        const Scene2DRatio ratio = this->getRatio();  // Total ratio
+        const Scene2DRatio ratio   = this->getRatio(); // Total ratio
         const double viewportRatio = this->getViewportSizeRatio().first;
 
-        double diameterH  = m_pointSize;
-        double diameterV  = m_pointSize * viewportSizeRatio;
+        double diameterH = m_pointSize;
+        double diameterV = m_pointSize * viewportSizeRatio;
 
         diameterV /= viewportRatio;
         diameterV *= viewInitialSizeRatio;
@@ -158,7 +153,8 @@ void HistogramCursor::doUpdate() throw( ::fwTools::Failed)
         diameterH *= ratio.first;
         diameterV *= ratio.second;
 
-        ::fwData::Point::sptr point = ::fwData::Point::dynamicCast( ::fwTools::fwID::getObject( m_histogramPointUID ) );
+        ::fwData::Point::sptr point = this->getSafeInOut< ::fwData::Point>( m_histogramPointUID );
+        SLM_ASSERT("[inout] Point '" + m_histogramPointUID + "' is not found", point);
 
         double x = point->getRefCoord()[0] - diameterH / 2;
         double y = point->getRefCoord()[1] - diameterV / 2;
@@ -169,42 +165,20 @@ void HistogramCursor::doUpdate() throw( ::fwTools::Failed)
 
 //---------------------------------------------------------------------------------------------------------------
 
-void HistogramCursor::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    ::fwComEd::HistogramMsg::csptr histoMsg = ::fwComEd::HistogramMsg::dynamicConstCast(_msg);
-    ::scene2D::data::ViewportMsg::csptr viewportMsg = ::scene2D::data::ViewportMsg::dynamicConstCast(_msg);
-    if (histoMsg && histoMsg->hasEvent(::fwComEd::HistogramMsg::VALUE_IS_MODIFIED))
-    {
-        this->doUpdate();
-    }
-    else if( viewportMsg && viewportMsg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED) )
-    {
-        this->initializeViewSize();
-        this->initializeViewportSize();
-
-        doUpdate();
-    }
-}
-
-//---------------------------------------------------------------------------------------------------------------
-
 void HistogramCursor::doSwap() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
 }
 
 //---------------------------------------------------------------------------------------------------------------
 
 void HistogramCursor::processInteraction( ::scene2D::data::Event::sptr _event )
 {
-    SLM_TRACE_FUNC();
-
     this->initializeViewSize();
     this->initializeViewportSize();
 
     if( _event->getType() == ::scene2D::data::Event::MouseMove )
     {
-       m_coord = _event->getCoord();
+        m_coord = _event->getCoord();
     }
 
     doUpdate();
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp
index cf64aa3..958ff5f 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/HistogramValue.cpp
@@ -1,24 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/adaptor/HistogramValue.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+
+#include <fwServices/macros.hpp>
 
 #include <fwData/Histogram.hpp>
 #include <fwData/Point.hpp>
 
-#include <fwComEd/HistogramMsg.hpp>
-
 #include <QGraphicsEllipseItem>
 #include <QFont>
 
-#include "scene2D/Scene2DGraphicsView.hpp"
-#include "scene2D/adaptor/HistogramValue.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/data/ViewportMsg.hpp"
-
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::HistogramValue, ::fwData::Histogram);
 
@@ -27,10 +24,9 @@ namespace scene2D
 namespace adaptor
 {
 
-HistogramValue::HistogramValue() throw()
-: m_color("white"), m_isInteracting(false), m_fontSize(8)
+HistogramValue::HistogramValue() throw() :
+    m_color(Qt::white), m_isInteracting(false),  m_text(nullptr), m_fontSize(8.f), m_layer(nullptr)
 {
-//    addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -58,14 +54,15 @@ void HistogramValue::configuring() throw( ::fwTools::Failed)
     }
 
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
-            !m_configuration->getAttributeValue("viewportUID").empty());
+               !m_configuration->getAttributeValue("viewportUID").empty());
 
     if( !m_configuration->getAttributeValue("viewportUID").empty() )
     {
-        m_viewportID =  m_configuration->getAttributeValue("viewportUID");
+        m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
 
-    SLM_ASSERT("'histogramPointUID' attribute is missing.", !m_configuration->getAttributeValue("histogramPointUID").empty());
+    SLM_ASSERT("'histogramPointUID' attribute is missing.", !m_configuration->getAttributeValue(
+                   "histogramPointUID").empty());
     m_histogramPointUID = m_configuration->getAttributeValue("histogramPointUID");
 }
 
@@ -80,7 +77,8 @@ void HistogramValue::doStart() throw( ::fwTools::Failed)
     m_font.setKerning( true );
     m_font.setFixedPitch( true );
 
-    m_text = new QGraphicsSimpleTextItem(0, this->getScene2DRender()->getScene());
+
+    m_text = new QGraphicsSimpleTextItem();
     m_text->setBrush( QBrush(m_color.color()) );
     m_text->setFont( m_font );
     m_text->setCacheMode( QGraphicsItem::DeviceCoordinateCache );
@@ -88,17 +86,16 @@ void HistogramValue::doStart() throw( ::fwTools::Failed)
 
     // Initialize the layer
     m_layer = new QGraphicsItemGroup();
-
     m_layer->addToGroup( m_text );
 
     // Set the layer position (according to the related axis) and zValue
     m_layer->setPos(m_xAxis->getOrigin(), m_yAxis->getOrigin());
     m_layer->setZValue(m_zValue);
 
-    m_viewport = ::scene2D::data::Viewport::dynamicCast( ::fwTools::fwID::getObject( m_viewportID ) );
+    m_viewport = this->getSafeInOut< ::scene2D::data::Viewport>( m_viewportID );
 
-    m_connection = m_viewport->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connection = m_viewport->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
 
     // Add the layer containing grid's lines to the scene
     this->getScene2DRender()->getScene()->addItem(m_layer);
@@ -108,8 +105,6 @@ void HistogramValue::doStart() throw( ::fwTools::Failed)
 
 void HistogramValue::doStop() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     m_connection.disconnect();
 }
 
@@ -117,33 +112,34 @@ void HistogramValue::doStop() throw( ::fwTools::Failed)
 
 void HistogramValue::doUpdate() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
+    this->initializeViewSize();
+    this->initializeViewportSize();
 
-    ::fwData::Histogram::sptr histogram = this->getObject< ::fwData::Histogram>();
+    ::fwData::Histogram::sptr histogram           = this->getObject< ::fwData::Histogram>();
     ::fwData::Histogram::fwHistogramValues values = histogram->getValues();
-    const float histogramMinValue = histogram->getMinValue();
+    const float histogramMinValue  = histogram->getMinValue();
     const float histogramBinsWidth = histogram->getBinsWidth();
 
     // Event coordinates in scene
     ::scene2D::data::Coord sceneCoord = this->getScene2DRender()->mapToScene( m_coord );
 
     int histIndex = (int) sceneCoord.getX();
-    int index = (histIndex - histogramMinValue) / histogramBinsWidth;
+    int index     = (histIndex - histogramMinValue) / histogramBinsWidth;
 
     if(index >= 0 && index < (int)values.size() && m_isInteracting) // avoid std out_of_range on Windows
     {
         ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
         const double viewportHeight = viewport->getHeight();
-        const double viewportWidth = viewport->getWidth();
+        const double viewportWidth  = viewport->getWidth();
 
-        const double viewportSizeRatio = viewportHeight / viewportWidth;
+        const double viewportSizeRatio    = viewportHeight / viewportWidth;
         const double viewInitialSizeRatio = m_viewInitialSize.first / m_viewInitialSize.second;
 
-        Scene2DRatio ratio = this->getRatio();  // Total ratio
+        Scene2DRatio ratio        = this->getRatio(); // Total ratio
         double viewportWidthRatio = this->getViewportSizeRatio().first;
 
-        double diameterH  = m_fontSize;
-        double diameterV  = m_fontSize * viewportSizeRatio;
+        double diameterH = m_fontSize;
+        double diameterV = m_fontSize * viewportSizeRatio;
 
         diameterV /= viewportWidthRatio;
         diameterV *= viewInitialSizeRatio;
@@ -165,7 +161,7 @@ void HistogramValue::doUpdate() throw( ::fwTools::Failed)
         QTransform transform;
         transform.scale(scaleX, scaleY);
 
-        ::fwData::Point::sptr point = ::fwData::Point::dynamicCast( ::fwTools::fwID::getObject( m_histogramPointUID ) );
+        ::fwData::Point::sptr point = this->getSafeInOut< ::fwData::Point>( m_histogramPointUID );
 
         m_text->setTransform( transform );
         m_text->setPos( point->getRefCoord()[0] + diameterH * 2, point->getRefCoord()[1] - diameterV * 2 );
@@ -176,40 +172,17 @@ void HistogramValue::doUpdate() throw( ::fwTools::Failed)
         m_text->setVisible( false );
     }
 }
-//---------------------------------------------------------------------------------------------------------------
-
-void HistogramValue::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwComEd::HistogramMsg::csptr histoMsg = ::fwComEd::HistogramMsg::dynamicConstCast(_msg);
-    ::scene2D::data::ViewportMsg::csptr viewportMsg = ::scene2D::data::ViewportMsg::dynamicConstCast(_msg);
-
-    if (histoMsg && histoMsg->hasEvent(::fwComEd::HistogramMsg::VALUE_IS_MODIFIED))
-    {
-        this->doUpdate();
-    }
-    else if( viewportMsg && viewportMsg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED) )
-    {
-        this->initializeViewSize();
-        this->initializeViewportSize();
-
-        doUpdate();
-    }
-}
 
 //---------------------------------------------------------------------------------------------------------------
 
 void HistogramValue::doSwap() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
 }
 
 //---------------------------------------------------------------------------------------------------------------
 
 void HistogramValue::processInteraction( ::scene2D::data::Event::sptr _event )
 {
-    SLM_TRACE_FUNC();
-
     this->initializeViewSize();
     this->initializeViewportSize();
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp
index d22cb06..e9bf593 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/IAdaptor.cpp
@@ -1,17 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QGraphicsItemGroup>
+#include "scene2D/adaptor/IAdaptor.hpp"
+
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
 
 #include <fwData/Composite.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
 
-#include "scene2D/adaptor/IAdaptor.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <QGraphicsItemGroup>
 
 namespace scene2D
 {
@@ -21,20 +25,20 @@ namespace adaptor
 
 IAdaptor::IAdaptor() throw() : m_zValue(0), m_opacity(1)
 {
-    m_connections = ::fwServices::helper::SigSlotConnection::New();
 }
 
 //-----------------------------------------------------------------------------
 
 IAdaptor::~IAdaptor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void IAdaptor::info(std::ostream &_sstream )
+void IAdaptor::info(std::ostream& _sstream )
 {
     /*_sstream << "IAdaptor : " ;
-    this->SuperClass::info( _sstream ) ;*/
+       this->SuperClass::info( _sstream ) ;*/
 }
 
 //-----------------------------------------------------------------------------
@@ -46,7 +50,7 @@ void IAdaptor::setZValue(float _zValue)
 
 //-----------------------------------------------------------------------------
 
-float IAdaptor::getZValue()
+float IAdaptor::getZValue() const
 {
     return m_zValue;
 }
@@ -56,40 +60,40 @@ float IAdaptor::getZValue()
 void IAdaptor::setScene2DRender( ::scene2D::Render::sptr _scene2DRender)
 {
     SLM_ASSERT("Service not instanced", _scene2DRender);
-    SLM_ASSERT("Adaptor is already started", this->isStopped() ) ;
+    SLM_ASSERT("Adaptor is already started", this->isStopped() );
     m_scene2DRender = _scene2DRender;
 }
 
 //-----------------------------------------------------------------------------
 
-::scene2D::Render::sptr IAdaptor::getScene2DRender()
+::scene2D::Render::sptr IAdaptor::getScene2DRender() const
 {
     return m_scene2DRender.lock();
 }
 
 //-----------------------------------------------------------------------------
 
-IAdaptor::ViewSizeRatio IAdaptor::getViewSizeRatio()
+IAdaptor::ViewSizeRatio IAdaptor::getViewSizeRatio() const
 {
     return ViewSizeRatio(
-            (float) ( m_viewInitialSize.first / this->getScene2DRender()->getView()->width() ),
-            (float) ( m_viewInitialSize.second / this->getScene2DRender()->getView()->height() ) );
+        (float) ( m_viewInitialSize.first / this->getScene2DRender()->getView()->width() ),
+        (float) ( m_viewInitialSize.second / this->getScene2DRender()->getView()->height() ) );
 }
 
 //-----------------------------------------------------------------------------
 
-IAdaptor::ViewportSizeRatio IAdaptor::getViewportSizeRatio()
+IAdaptor::ViewportSizeRatio IAdaptor::getViewportSizeRatio() const
 {
     return ViewportSizeRatio(
-            (float) ( m_viewportInitialSize.first / this->getScene2DRender()->getViewport()->getWidth() ),
-            (float) ( m_viewportInitialSize.second / this->getScene2DRender()->getViewport()->getHeight() ) );
+        (float) ( m_viewportInitialSize.first / this->getScene2DRender()->getViewport()->getWidth() ),
+        (float) ( m_viewportInitialSize.second / this->getScene2DRender()->getViewport()->getHeight() ) );
 }
 
 //-----------------------------------------------------------------------------
 
-IAdaptor::Scene2DRatio IAdaptor::getRatio()
+IAdaptor::Scene2DRatio IAdaptor::getRatio() const
 {
-    ViewSizeRatio ratioView = this->getViewSizeRatio();
+    ViewSizeRatio ratioView         = this->getViewSizeRatio();
     ViewportSizeRatio ratioViewport = this->getViewportSizeRatio();
 
     return Scene2DRatio(    ratioView.first / ratioViewport.first,
@@ -98,7 +102,8 @@ IAdaptor::Scene2DRatio IAdaptor::getRatio()
 
 //-----------------------------------------------------------------------------
 
-IAdaptor::Point2DType IAdaptor::mapAdaptorToScene(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis, ::scene2D::data::Axis::sptr _yAxis )
+IAdaptor::Point2DType IAdaptor::mapAdaptorToScene(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis,
+                                                  ::scene2D::data::Axis::sptr _yAxis )
 {
     double x, y;
 
@@ -140,12 +145,13 @@ IAdaptor::Point2DType IAdaptor::mapAdaptorToScene(Point2DType _xy, ::scene2D::da
         y = _yAxis->getScale() * _xy.second;
     }
 
-    return Point2DType( x , y );
+    return Point2DType( x, y );
 }
 
 //-----------------------------------------------------------------------------
 
-IAdaptor::Point2DType IAdaptor::mapSceneToAdaptor(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis, ::scene2D::data::Axis::sptr _yAxis )
+IAdaptor::Point2DType IAdaptor::mapSceneToAdaptor(Point2DType _xy, ::scene2D::data::Axis::sptr _xAxis,
+                                                  ::scene2D::data::Axis::sptr _yAxis )
 {
     // Do the reverse operation of the mapAdaptorToScene function
     double x, y;
@@ -168,7 +174,7 @@ IAdaptor::Point2DType IAdaptor::mapSceneToAdaptor(Point2DType _xy, ::scene2D::da
         y = _xy.second / _yAxis->getScale();
     }
 
-    return Point2DType( x , y );
+    return Point2DType( x, y );
 }
 
 //-----------------------------------------------------------------------------
@@ -177,17 +183,17 @@ void IAdaptor::configuring() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 
-    m_viewInitialSize.first = -1.0f;
+    m_viewInitialSize.first  = -1.0f;
     m_viewInitialSize.second = -1.0f;
 
-    m_viewportInitialSize.first = -1.0f;
+    m_viewportInitialSize.first  = -1.0f;
     m_viewportInitialSize.second = -1.0f;
 
     // If the corresponding attributes are present in the config, set the xAxis, yAxis and the adaptor zValue
     if ( m_configuration->hasAttribute("xAxis") )
     {
         m_xAxis = ::scene2D::data::Axis::dynamicCast(
-                this->getScene2DRender()->getRegisteredObject(m_configuration->getAttributeValue("xAxis")));
+            this->getScene2DRender()->getRegisteredObject(m_configuration->getAttributeValue("xAxis")));
     }
     else
     {
@@ -197,7 +203,7 @@ void IAdaptor::configuring() throw ( ::fwTools::Failed )
     if ( m_configuration->hasAttribute("yAxis") )
     {
         m_yAxis = ::scene2D::data::Axis::dynamicCast(
-                this->getScene2DRender()->getRegisteredObject(m_configuration->getAttributeValue("yAxis")));
+            this->getScene2DRender()->getRegisteredObject(m_configuration->getAttributeValue("yAxis")));
     }
     else
     {
@@ -253,7 +259,7 @@ void IAdaptor::initializeViewportSize()
 
 void IAdaptor::starting() throw ( ::fwTools::Failed )
 {
-    m_connections->connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
+    m_connections.connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
 
     doStart();
 }
@@ -267,17 +273,10 @@ void IAdaptor::updating() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void IAdaptor::receiving( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    doReceive(_msg);
-}
-
-//-----------------------------------------------------------------------------
-
 void IAdaptor::swapping() throw(fwTools::Failed)
 {
-    m_connections->disconnect();
-    m_connections->connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
+    m_connections.disconnect();
+    m_connections.connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
     doSwap();
 }
 
@@ -285,7 +284,7 @@ void IAdaptor::swapping() throw(fwTools::Failed)
 
 void IAdaptor::stopping() throw ( ::fwTools::Failed )
 {
-    m_connections->disconnect();
+    m_connections.disconnect();
     doStop();
 
     m_xAxis.reset();
@@ -294,7 +293,7 @@ void IAdaptor::stopping() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-::fwData::Object::sptr IAdaptor::getRegisteredObject(::scene2D::Render::ObjectIDType _objectId)
+::fwData::Object::sptr IAdaptor::getRegisteredObject(::scene2D::Render::ObjectIDType _objectId) const
 {
     ::fwData::Object::sptr obj;
     if (!_objectId.empty())
@@ -324,8 +323,8 @@ void IAdaptor::registerService( ::scene2D::adaptor::IAdaptor::sptr srv )
 
 void IAdaptor::unregisterServices()
 {
-    BOOST_FOREACH( ManagedAdaptorVector::value_type adaptor, m_managedAdaptors )
-    {        
+    for(const ManagedAdaptorVector::value_type& adaptor : m_managedAdaptors )
+    {
         adaptor.lock()->stop();
         ::fwServices::OSR::unregisterService(adaptor.lock());
     }
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp
index b1275a2..aaf578c 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Line.cpp
@@ -1,19 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/Line.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+
+#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
 #include <QGraphicsItemGroup>
 
-#include "scene2D/adaptor/Line.hpp"
-#include "scene2D/data/InitQtPen.hpp"
 
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::Line  , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Line, ::fwData::Composite );
 
 
 namespace scene2D
@@ -21,14 +22,22 @@ namespace scene2D
 namespace adaptor
 {
 
-Line::Line() throw()
+Line::Line() throw() :
+    m_x1(0.f), m_x2(0.f),
+    m_y1(0.f), m_y2(0.f),
+    m_lineType(PLAIN),
+    m_layer(nullptr)
 {
 }
 
+//---------------------------------------------------------------------------------------------------------------
+
 Line::~Line() throw()
 {
 }
 
+//---------------------------------------------------------------------------------------------------------------
+
 void Line::configuring() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
@@ -52,17 +61,19 @@ void Line::configuring() throw ( ::fwTools::Failed )
     }
 }
 
+//---------------------------------------------------------------------------------------------------------------
+
 void Line::draw()
 {
     SLM_TRACE_FUNC();
 
     // Draw the line
     QGraphicsLineItem* line = new QGraphicsLineItem(
-        this->mapAdaptorToScene(std::pair< double , double >( m_x1, m_y1) , m_xAxis, m_yAxis).first,
-        this->mapAdaptorToScene(std::pair< double , double >( m_x1, m_y1) , m_xAxis, m_yAxis).second,
-        this->mapAdaptorToScene(std::pair< double , double >( m_x2, m_y2) , m_xAxis, m_yAxis).first,
-        this->mapAdaptorToScene(std::pair< double , double >( m_x2, m_y2) , m_xAxis, m_yAxis).second
-    );
+        this->mapAdaptorToScene(std::pair< double, double >( m_x1, m_y1), m_xAxis, m_yAxis).first,
+        this->mapAdaptorToScene(std::pair< double, double >( m_x1, m_y1), m_xAxis, m_yAxis).second,
+        this->mapAdaptorToScene(std::pair< double, double >( m_x2, m_y2), m_xAxis, m_yAxis).first,
+        this->mapAdaptorToScene(std::pair< double, double >( m_x2, m_y2), m_xAxis, m_yAxis).second
+        );
     // Set the line the pen
     line->setPen(m_pen);
 
@@ -76,30 +87,35 @@ void Line::draw()
     this->getScene2DRender()->getScene()->addItem(m_layer);
 }
 
+//---------------------------------------------------------------------------------------------------------------
+
 void Line::doStart() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 
     // Initialize the layer
     m_layer = new QGraphicsItemGroup();
+    m_pen.setCosmetic(true);
+
     this->draw();
 }
 
+//---------------------------------------------------------------------------------------------------------------
+
 void Line::doUpdate() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 }
 
-void Line::doReceive( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
+//---------------------------------------------------------------------------------------------------------------
 
 void Line::doSwap() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
 }
 
+//---------------------------------------------------------------------------------------------------------------
+
 void Line::doStop() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Negato.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Negato.cpp
index d13c0e0..03a16a3 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Negato.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Negato.cpp
@@ -1,31 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QGraphicsItemGroup>
-#include <QPoint>
-#include <QBitmap>
-#include <QPixmap>
+#include "scene2D/adaptor/Negato.hpp"
 
-#include <fwData/Image.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Boolean.hpp>
 #include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
 #include <fwData/Integer.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/helper/Image.hpp>
+#include <fwServices/macros.hpp>
 
-#include "scene2D/adaptor/Negato.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
+#include <QBitmap>
+#include <QGraphicsItemGroup>
+#include <QPixmap>
+#include <QPoint>
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::Negato  , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Negato, ::fwData::Image );
 
 
 namespace scene2D
@@ -33,24 +41,35 @@ namespace scene2D
 namespace adaptor
 {
 
-typedef ::fwComEd::helper::MedicalImageAdaptor MedicalImageAdaptor;
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_BUFFER_SLOT      = "updateBuffer";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_VISIBILITY_SLOT  = "updateVisibility";
+
+typedef ::fwDataTools::helper::MedicalImageAdaptor MedicalImageAdaptor;
 
 //-----------------------------------------------------------------------------
 
-Negato::Negato() throw()
-: m_pointIsCaptured (false),
-    m_orientation(MedicalImageAdaptor::Z_AXIS), m_changeSliceTypeAllowed(true)
+Negato::Negato() throw() :
+    m_qimg(nullptr),
+    m_pixmapItem(nullptr),
+    m_layer(nullptr),
+    m_orientation(MedicalImageAdaptor::Z_AXIS),
+    m_pointIsCaptured (false),
+    m_changeSliceTypeAllowed(true)
 {
-    this->installTFSelectionEventHandler(this);
-//    this->addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
-//    this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::WINDOWING );
-//    this->addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
+    this->installTFSlots(this);
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &Negato::updateSliceIndex, this);
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &Negato::updateSliceType, this);
+    newSlot(s_UPDATE_BUFFER_SLOT, &Negato::updateBuffer, this);
+    newSlot(s_UPDATE_VISIBILITY_SLOT, &Negato::updateVisibility, this);
 }
 
 //-----------------------------------------------------------------------------
 
 Negato::~Negato() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -100,71 +119,86 @@ void Negato::configuring() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void Negato::updateBufferFromImage( QImage * qimg )
+void Negato::updateBufferFromImage( QImage* qimg )
 {
+    if(!qimg)
+    {
+        return;
+    }
     // Window min/max
     ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
     const double wlMin = tf->getWLMinMax().first;
-    const double wlMax = tf->getWLMinMax().second;
 
     // Window max
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    ::fwComEd::helper::Image imgHelper(image);
+    ::fwDataTools::helper::Image imgHelper(image);
     const ::fwData::Image::SizeType size = image->getSize();
-    signed short * imgBuff = (signed short *) imgHelper.getBuffer();
-    const double window = tf->getWindow();
-    const unsigned int imageZOffset = size[0] * size[1];
+    const short* imgBuff                 = static_cast<const short*>(imgHelper.getBuffer());
+    const size_t imageZOffset            = size[0] * size[1];
 
     const double tfMin = tf->getMinMaxTFValues().first;
     const double tfMax = tf->getMinMaxTFValues().second;
+    const double tfWin = (1. / tf->getWindow()) * ((tfMax - tfMin) + tfMin);
 
+    ::std::uint8_t* pDest = qimg->bits();
 
     // Fill image according to current slice type:
-    if( m_orientation == MedicalImageAdaptor::X_AXIS )
+    if( m_orientation == MedicalImageAdaptor::X_AXIS ) // sagittal
     {
-        for( ::boost::int32_t z = 0; z < size[2]; ++z)
+        const size_t sagitalIndex = static_cast<size_t>(m_sagittalIndex->value());
+
+        for( size_t z = 0; z < size[2]; ++z)
         {
-            const unsigned int zOffset = z * imageZOffset;
-            const unsigned int zPos = size[2] - 1 - z;
-            const unsigned int zxOffset = zOffset + m_sagittalIndex->value();
+            const size_t zOffset  = (size[2] - 1 - z) * imageZOffset;
+            const size_t zxOffset = zOffset + sagitalIndex;
 
-            for( ::boost::int32_t y = 0; y < size[1]; y++ )
+            for( size_t y = 0; y < size[1]; ++y )
             {
-                QRgb val = this->getQImageVal(zxOffset + y * size[0], imgBuff, wlMin, wlMax, window, tfMin, tfMax, tf);
-                qimg->setPixel(y, zPos, val);
+                const QRgb val = this->getQImageVal(zxOffset + y * size[0], imgBuff, wlMin, tfWin, tf);
+
+                *pDest++ = static_cast<std::uint8_t>(qRed(val));
+                *pDest++ = static_cast<std::uint8_t>(qGreen(val));
+                *pDest++ = static_cast<std::uint8_t>(qBlue(val));
             }
         }
     }
-    else if( m_orientation == MedicalImageAdaptor::Y_AXIS )
+    else if( m_orientation == MedicalImageAdaptor::Y_AXIS ) // frontal
     {
-        const double yOffset = m_frontalIndex->value() * size[0];
+        const size_t frontalIndex = static_cast<size_t>(m_frontalIndex->value());
+        const size_t yOffset      = frontalIndex * size[0];
 
-        for( ::boost::int32_t z = 0; z < size[2]; ++z)
+        for( size_t z = 0; z < size[2]; ++z)
         {
-            const double zOffset = z * imageZOffset;
-            const double zPos = size[2] - 1 - z;
-            const double zyOffset = zOffset + yOffset;
+            const size_t zOffset  = (size[2] - 1 - z) * imageZOffset;
+            const size_t zyOffset = zOffset + yOffset;
 
-            for( ::boost::int32_t x = 0; x < size[0]; x++ )
+            for( size_t x = 0; x < size[0]; ++x )
             {
-                QRgb val = this->getQImageVal(zyOffset + x, imgBuff, wlMin, wlMax, window, tfMin, tfMax, tf);
-                qimg->setPixel(x, zPos, val);
+                const QRgb val = this->getQImageVal(zyOffset + x, imgBuff, wlMin, tfWin, tf);
+
+                *pDest++ = static_cast<std::uint8_t>(qRed(val));
+                *pDest++ = static_cast<std::uint8_t>(qGreen(val));
+                *pDest++ = static_cast<std::uint8_t>(qBlue(val));
             }
         }
     }
-    else if( m_orientation == MedicalImageAdaptor::Z_AXIS )
+    else if( m_orientation == MedicalImageAdaptor::Z_AXIS ) // axial
     {
-        const double zOffset = m_axialIndex->value() * imageZOffset;
+        const size_t axialIndex = static_cast<size_t>(m_axialIndex->value());
+        const size_t zOffset    = axialIndex * imageZOffset;
 
-        for( ::boost::int32_t y = 0; y < size[1]; y++ )
+        for( size_t y = 0; y < size[1]; ++y )
         {
-            const unsigned int yOffset = y * size[0];
-            const unsigned int zyOffset = zOffset + yOffset;
+            const size_t yOffset  = y * size[0];
+            const size_t zyOffset = zOffset + yOffset;
 
-            for( ::boost::int32_t x = 0; x < size[0]; x++ )
+            for( size_t x = 0; x < size[0]; ++x )
             {
-                QRgb val = this->getQImageVal(x + zyOffset, imgBuff, wlMin, wlMax, window, tfMin, tfMax, tf);
-                qimg->setPixel(x, y, val);
+                const QRgb val = this->getQImageVal(zyOffset + x, imgBuff, wlMin, tfWin, tf);
+
+                *pDest++ = static_cast<std::uint8_t>(qRed(val));
+                *pDest++ = static_cast<std::uint8_t>(qGreen(val));
+                *pDest++ = static_cast<std::uint8_t>(qBlue(val));
             }
         }
     }
@@ -175,63 +209,66 @@ void Negato::updateBufferFromImage( QImage * qimg )
 
 //-----------------------------------------------------------------------------
 
-QRgb Negato::getQImageVal(
-    const unsigned int index, signed short* buffer, const double wlMin, const double wlMax, const double window,
-    const double tfMin, const double tfMax, ::fwData::TransferFunction::sptr tf)
+QRgb Negato::getQImageVal(const size_t index, const short* buffer, double wlMin, double tfWin,
+                          const fwData::TransferFunction::sptr& tf)
 {
-    signed short val16 = buffer[index];
+    const short val16 = buffer[index];
 
-    double value = (val16 - wlMin) / window;
-    value = value * (tfMax - tfMin) + tfMin;
+    double value = (val16 - wlMin) * tfWin;
 
-    ::fwData::TransferFunction::TFColor color = tf->getInterpolatedColor(value);
+    const ::fwData::TransferFunction::TFColor color = tf->getInterpolatedColor(value);
 
-    return qRgba(color.r*255, color.g*255, color.b*255, color.a*255);
+    // use QImage::Format_RGBA8888 in QImage if you need alpha value
+    return qRgb(static_cast<int>(color.r*255), static_cast<int>(color.g*255), static_cast<int>(color.b*255));
 }
 
 //---------------------------------------------------------------------------
 
-QImage * Negato::createQImage()
+QImage* Negato::createQImage()
 {
-    SLM_TRACE_FUNC();
-
     ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
 
-    const ::fwData::Image::SizeType size = img->getSize();
+    if (!::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( img ))
+    {
+        return nullptr;
+    }
+
+    const ::fwData::Image::SizeType size       = img->getSize();
     const ::fwData::Image::SpacingType spacing = img->getSpacing();
-    const ::fwData::Image::OriginType origin = img->getOrigin();
+    const ::fwData::Image::OriginType origin   = img->getOrigin();
 
     double qImageSpacing[2];
     double qImageOrigin[2];
-    ::boost::int32_t qImageSize[2];
+    int qImageSize[2];
 
     switch ( m_orientation )
     {
-        case MedicalImageAdaptor::X_AXIS:
-            qImageSize[0]    = size[1];
-            qImageSize[1]    = size[2];
+        case MedicalImageAdaptor::X_AXIS:// sagittal
+            this->m_yAxis->setScale(-1);
+            qImageSize[0]    = static_cast<int>(size[1]);
+            qImageSize[1]    = static_cast<int>(size[2]);
             qImageSpacing[0] = spacing[1];
             qImageSpacing[1] = spacing[2];
-            qImageOrigin[0]  = origin[1];
-            qImageOrigin[1]  = origin[2];
+            qImageOrigin[0]  = origin[1] - 0.5f*spacing[1];
+            qImageOrigin[1]  = -( origin[2] + size[2] * spacing[2]  - 0.5f*spacing[2]);
             break;
 
-        case MedicalImageAdaptor::Y_AXIS:
-            qImageSize[0]    = size[0];
-            qImageSize[1]    = size[2];
+        case MedicalImageAdaptor::Y_AXIS:// frontal
+            qImageSize[0]    = static_cast<int>(size[0]);
+            qImageSize[1]    = static_cast<int>(size[2]);
             qImageSpacing[0] = spacing[0];
             qImageSpacing[1] = spacing[2];
-            qImageOrigin[0]  = origin[0];
-            qImageOrigin[1]  = origin[2];
+            qImageOrigin[0]  = origin[0] - 0.5f*spacing[0];
+            qImageOrigin[1]  = -( origin[2] + size[2] * spacing[2]  - 0.5f*spacing[2]);
             break;
 
-        case MedicalImageAdaptor::Z_AXIS:
-            qImageSize[0]    = size[0];
-            qImageSize[1]    = size[1];
+        case MedicalImageAdaptor::Z_AXIS:// axial
+            qImageSize[0]    = static_cast<int>(size[0]);
+            qImageSize[1]    = static_cast<int>(size[1]);
             qImageSpacing[0] = spacing[0];
             qImageSpacing[1] = spacing[1];
-            qImageOrigin[0]  = origin[0];
-            qImageOrigin[1]  = origin[1];
+            qImageOrigin[0]  = origin[0] - 0.5f*spacing[0];
+            qImageOrigin[1]  = origin[1] - 0.5f*spacing[1];
             break;
 
         default:
@@ -240,11 +277,11 @@ QImage * Negato::createQImage()
     }
 
     // Create empty QImage
-    QImage * qimage = new QImage(qImageSize[0], qImageSize[1], QImage::Format_RGB888);
+    QImage* qimage = new QImage(qImageSize[0], qImageSize[1], QImage::Format_RGB888);
 
     // Place m_pixmapItem
     m_pixmapItem->resetTransform();
-    m_pixmapItem->scale(qImageSpacing[0], qImageSpacing[1]);
+    m_pixmapItem->setTransform(QTransform::fromScale(qImageSpacing[0], qImageSpacing[1]), true);
     m_pixmapItem->setPos(qImageOrigin[0], qImageOrigin[1]);
 
     // Force bounding box recomputing ( Qt bug )
@@ -252,7 +289,7 @@ QImage * Negato::createQImage()
     m_layer->addToGroup( m_pixmapItem );
 
     // Update image scene
-    this->getScene2DRender()->updateSceneSize( 0.20 );
+    this->getScene2DRender()->updateSceneSize( 0.20f );
 
     return qimage;
 }
@@ -261,12 +298,16 @@ QImage * Negato::createQImage()
 
 void Negato::doStart() throw ( ::fwTools::Failed )
 {
+    ::fwData::Composite::wptr tfSelection = this->getSafeInOut< ::fwData::Composite>(this->getTFSelectionFwID());
+    this->setTransferFunctionSelection(tfSelection);
+
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos( image );
-    this->updateTransferFunction( image, this->getSptr() );
+    this->updateTransferFunction( image );
 
     m_pixmapItem = new QGraphicsPixmapItem();
     m_pixmapItem->setShapeMode( QGraphicsPixmapItem::BoundingRectShape );
+    m_pixmapItem->setTransformationMode(Qt::SmoothTransformation);
     m_layer = new QGraphicsItemGroup();
     m_layer->resetTransform();
     m_layer->addToGroup( m_pixmapItem );
@@ -277,8 +318,9 @@ void Negato::doStart() throw ( ::fwTools::Failed )
     m_qimg = this->createQImage();
     this->updateBufferFromImage( m_qimg );
 
+    this->getScene2DRender()->updateSceneSize( 1.f );
 
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //-----------------------------------------------------------------------------
@@ -293,47 +335,83 @@ void Negato::doUpdate() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void Negato::doReceive( fwServices::ObjectMsg::csptr msg) throw ( ::fwTools::Failed )
+void Negato::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    SLM_TRACE_FUNC();
-    if( msg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE) && m_changeSliceTypeAllowed )
-    {
-        ::fwData::Object::csptr cObjInfo = msg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-        ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-        ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
+
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateImageInfos( image );
+    this->updateBufferFromImage( m_qimg );
+}
+
+//-----------------------------------------------------------------------------
 
-        ::fwData::Integer::sptr fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] );
-        ::fwData::Integer::sptr toSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] );
+void Negato::updateSliceType(int from, int to)
+{
+    if (m_changeSliceTypeAllowed)
+    {
+        if( to == static_cast< int > ( m_orientation ) )
+        {
+            m_orientation = static_cast< MedicalImageAdaptor::Orientation > ( from );
+        }
+        else if(from == static_cast<int>(m_orientation))
+        {
+            m_orientation = static_cast< MedicalImageAdaptor::Orientation >( to );
+        }
 
-        if( toSliceType->value() == static_cast< int > ( m_orientation ) )
+        // manages the modification of axes
+        if ( m_orientation == MedicalImageAdaptor::Z_AXIS )
         {
-            m_orientation = static_cast< MedicalImageAdaptor::Orientation > ( fromSliceType->value() );
+            this->m_yAxis->setScale(1);
         }
-        else if(fromSliceType->value() == static_cast<int>(m_orientation))
+        else
         {
-            m_orientation = static_cast< MedicalImageAdaptor::Orientation >( toSliceType->value() );
+            this->m_yAxis->setScale(-1);
         }
 
         this->doUpdate();
     }
+}
+
+//-----------------------------------------------------------------------------
 
-    if ( this->upadteTFObserver(msg, this->getSptr() )
-            || msg->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING )
-            || msg->hasEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS ) )
+void Negato::updateVisibility(bool isVisible)
+{
+    if( isVisible ) // display the scene
     {
-        this->updateBufferFromImage( m_qimg );
+        m_layer->setVisible(true);
     }
-
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
+    else // remove the layer from the scene
     {
-        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-        this->updateImageInfos( image );
-        this->updateBufferFromImage( m_qimg );
+        m_layer->setVisible(false);
     }
 }
 
 //-----------------------------------------------------------------------------
 
+void Negato::updateBuffer()
+{
+    this->updateBufferFromImage(m_qimg);
+}
+
+//------------------------------------------------------------------------------
+
+void Negato::updatingTFPoints()
+{
+    this->updateBufferFromImage( m_qimg );
+}
+
+//------------------------------------------------------------------------------
+
+void Negato::updatingTFWindowing(double window, double level)
+{
+    this->updateBufferFromImage( m_qimg );
+}
+
+//-----------------------------------------------------------------------------
+
 void Negato::doSwap() throw ( ::fwTools::Failed )
 {
     this->doStop();
@@ -344,7 +422,7 @@ void Negato::doSwap() throw ( ::fwTools::Failed )
 
 void Negato::doStop() throw ( ::fwTools::Failed )
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
 
     this->getScene2DRender()->getScene()->removeItem(m_layer);
 
@@ -359,16 +437,78 @@ void Negato::processInteraction( ::scene2D::data::Event::sptr _event )
 {
     SLM_TRACE_FUNC();
 
+    // if a key is pressed
+    if(_event->getType() == ::scene2D::data::Event::KeyRelease)
+    {
+        // if pressed key is 'R'
+        if ( _event->getKey() == Qt::Key_R )
+        {
+            // get image origin
+            QRectF recImage = m_pixmapItem->sceneBoundingRect();
+
+            ::scene2D::data::Viewport::sptr sceneViewport = this->getScene2DRender()->getViewport();
+
+            float sceneWidth  = static_cast<float>(this->getScene2DRender()->getView()->width());
+            float sceneHeight = static_cast<float>(this->getScene2DRender()->getView()->height());
+
+            float ratioYonXimage = recImage.height() / recImage.width();
+            float sceneRatio     = sceneHeight / sceneWidth;
+
+            if ( sceneRatio > ratioYonXimage ) // used scene ratio
+            {
+                float widthViewPortNew  = recImage.width();
+                float heightViewPortNew = widthViewPortNew * sceneRatio;
+
+                // computes new y origin
+                float newOrigineY = recImage.y() - ( heightViewPortNew - recImage.height() ) / 2.f;
+
+                sceneViewport->setX(  recImage.x() );
+                sceneViewport->setY( newOrigineY );
+                sceneViewport->setWidth(  widthViewPortNew );
+                sceneViewport->setHeight( heightViewPortNew );
+            }
+            else
+            {
+                float heightViewPortNew = recImage.height();
+                float widthViewPortNew  = heightViewPortNew / sceneRatio;
+
+                // computes new x origin
+                float newOrigineX = recImage.x() - (widthViewPortNew - recImage.width() )/ 2.f;
+
+                sceneViewport->setX( newOrigineX );
+                sceneViewport->setY( recImage.y() );
+                sceneViewport->setWidth(  widthViewPortNew );
+                sceneViewport->setHeight( heightViewPortNew );
+            }
+
+            this->getScene2DRender()->getView()->updateFromViewport();
+        }
+
+        //image pixel
+        if ( _event->getKey() == Qt::Key_F )
+        {
+            m_pixmapItem->setTransformationMode(Qt::FastTransformation);
+            this->doUpdate();
+        }
+
+        //image smooth
+        if ( _event->getKey() == Qt::Key_S )
+        {
+            m_pixmapItem->setTransformationMode(Qt::SmoothTransformation);
+            this->doUpdate();
+        }
+    }
+
     ::scene2D::data::Coord coord = this->getScene2DRender()->mapToScene( _event->getCoord() );
     coord.setX( coord.getX() / m_layer->scale());
     coord.setY( coord.getY() / m_layer->scale());
 
     if ( _event->getType() == ::scene2D::data::Event::MouseButtonPress
-            && _event->getButton() == ::scene2D::data::Event::RightButton
-            && _event->getModifier() == ::scene2D::data::Event::NoModifier )
+         && _event->getButton() == ::scene2D::data::Event::RightButton
+         && _event->getModifier() == ::scene2D::data::Event::NoModifier )
     {
         m_pointIsCaptured = true;
-        m_oldCoord = _event->getCoord();
+        m_oldCoord        = _event->getCoord();
         _event->setAccepted(true);
     }
     else if ( m_pointIsCaptured )
@@ -381,7 +521,7 @@ void Negato::processInteraction( ::scene2D::data::Event::sptr _event )
             _event->setAccepted(true);
         }
         else if( _event->getButton() == ::scene2D::data::Event::RightButton
-                && _event->getType() == ::scene2D::data::Event::MouseButtonRelease )
+                 && _event->getType() == ::scene2D::data::Event::MouseButtonRelease )
         {
             m_pointIsCaptured = false;
             _event->setAccepted(true);
@@ -391,32 +531,49 @@ void Negato::processInteraction( ::scene2D::data::Event::sptr _event )
 
 //-----------------------------------------------------------------------------
 
-void Negato::changeImageMinMaxFromCoord( scene2D::data::Coord & oldCoord, scene2D::data::Coord & newCoord )
+void Negato::changeImageMinMaxFromCoord( scene2D::data::Coord& oldCoord, scene2D::data::Coord& newCoord )
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image         = this->getObject< ::fwData::Image >();
     ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
 
     double min = tf->getWLMinMax().first;
     double max = tf->getWLMinMax().second;
 
     double window = newCoord.getX() - m_oldCoord.getX();
-    double level = newCoord.getY() - m_oldCoord.getY();
+    double level  = newCoord.getY() - m_oldCoord.getY();
 
     double imgWindow = max - min;
-    double imgLevel = min + imgWindow/2.0;
+    double imgLevel  = min + imgWindow/2.0;
 
 
-    double newImgLevel = imgLevel + level;
+    double newImgLevel  = imgLevel + level;
     double newImgWindow = imgWindow + imgWindow * window/100.0;
 
-    double newMin = newImgLevel - newImgWindow/2.0;
-    double newMax = newImgLevel + newImgWindow/2.0;
-
     this->doUpdate();
 
-    // Fire the message
-    this->setWindowLevel(newMin, newMax);
-    this->notifyTFWindowing(this->getSptr());
+    // Send signal
+    tf->setWindow(newImgWindow);
+    tf->setLevel(newImgLevel);
+    auto sig = tf->signal< ::fwData::TransferFunction::WindowingModifiedSignalType >(
+        ::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdateTFWindowing));
+        sig->asyncEmit( newImgWindow, newImgLevel);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Negato::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_BUFFER_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_VISIBILITY_MODIFIED_SIG, s_UPDATE_VISIBILITY_SLOT ) );
+
+    return connections;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp
index af05845..29858e1 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ScaleValues.cpp
@@ -1,21 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "scene2D/adaptor/ScaleValues.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
 #include <QGraphicsItemGroup>
 
-#include "scene2D/adaptor/ScaleValues.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
-#include "scene2D/data/ViewportMsg.hpp"
-
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ScaleValues, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ScaleValues, ::fwData::Composite );
 
 
 namespace scene2D
@@ -23,9 +21,11 @@ namespace scene2D
 namespace adaptor
 {
 
-ScaleValues::ScaleValues() throw() : m_interval(10), m_step(1), m_fontSize(8), m_displayedUnit(""), m_showUnit(true)
+ScaleValues::ScaleValues() throw() :
+    m_min(0.f), m_max(0.f),
+    m_interval(10.), m_step(1), m_fontSize(8.f),
+    m_showUnit(true), m_unit(nullptr), m_layer(nullptr)
 {
-//    addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -84,11 +84,11 @@ void ScaleValues::configuring() throw ( ::fwTools::Failed )
 
     // Viewport configuratiion
     SLM_ASSERT("A viewport attribute must be specified with 'viewportUID'.",
-            !m_configuration->getAttributeValue("viewportUID").empty());
+               !m_configuration->getAttributeValue("viewportUID").empty());
 
     if( !m_configuration->getAttributeValue("viewportUID").empty() )
     {
-        m_viewportID =  m_configuration->getAttributeValue("viewportUID");
+        m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
 
 
@@ -112,7 +112,7 @@ void ScaleValues::configuring() throw ( ::fwTools::Failed )
         !m_align.empty());
 
     SLM_ASSERT("Unsupported value for 'align' attribute.",
-           m_align == "left" || m_align == "right" || m_align == "top" || m_align == "bottom");
+               m_align == "left" || m_align == "right" || m_align == "top" || m_align == "bottom");
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -124,9 +124,9 @@ void ScaleValues::buildValues()
 
     m_values.clear();
 
-    double val = this->getStartVal();
-    const int range = (int) ceil(this->getEndVal() - val);
-    const int nbValues = (int)(ceil(range/ m_interval)) + 1 ;
+    double val         = this->getStartVal();
+    const int range    = (int) ceil(this->getEndVal() - val);
+    const int nbValues = (int)(ceil(range/ m_interval)) + 1;
 
     std::string format;
 
@@ -156,7 +156,7 @@ void ScaleValues::buildValues()
     }
 
     // Add the values to the item group
-    BOOST_FOREACH( QGraphicsItem* item, m_values )
+    for( QGraphicsItem* item : m_values )
     {
         m_layer->addToGroup( item );
     }
@@ -192,16 +192,18 @@ void ScaleValues::doStart() throw ( ::fwTools::Failed )
     m_layer = new QGraphicsItemGroup();
 
     m_brush = QBrush( m_pen.color() );
+    m_pen.setCosmetic(true);
 
     m_font.setPointSize( m_fontSize );
     m_font.setLetterSpacing( QFont::AbsoluteSpacing, 0.25 );
     m_font.setKerning( true );
     m_font.setFixedPitch( true );
 
-    m_viewport = ::scene2D::data::Viewport::dynamicCast( ::fwTools::fwID::getObject( m_viewportID ) );
+    m_viewport = this->getSafeInOut< ::scene2D::data::Viewport>( m_viewportID );
+    SLM_ASSERT("Viewport '" + m_viewportID + "' is not found", m_viewport);
 
-    m_connection = m_viewport->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connection = m_viewport->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
 
     this->buildValues();
     this->doUpdate();
@@ -236,14 +238,14 @@ void ScaleValues::doUpdate() throw ( ::fwTools::Failed )
 
 void ScaleValues::rescaleValues()
 {
-    const double viewportX = m_viewport->getX();
-    const double viewportWidth = m_viewport->getWidth();
+    const double viewportX      = m_viewport->getX();
+    const double viewportWidth  = m_viewport->getWidth();
     const double viewportHeight = m_viewport->getHeight();
 
-    const double viewportSizeRatio = viewportHeight / viewportWidth;
+    const double viewportSizeRatio    = viewportHeight / viewportWidth;
     const double viewInitialSizeRatio = m_viewInitialSize.first / m_viewInitialSize.second;
 
-    Scene2DRatio ratio = this->getRatio();  // Total ratio
+    Scene2DRatio ratio        = this->getRatio(); // Total ratio
     double viewportWidthRatio = this->getViewportSizeRatio().first;
 
     double scaleX = m_fontSize;
@@ -264,8 +266,8 @@ void ScaleValues::rescaleValues()
     bool suggestResampling = false;     /* scale value items resampling is suggested because of
                                            a lack of sufficient width to display all of them */
 
-    const int valuesSize = m_values.size();
-    float val = getStartVal();
+    const size_t valuesSize = m_values.size();
+    float val               = getStartVal();
 
     if(m_align == "left" || m_align == "right")
     {
@@ -281,7 +283,7 @@ void ScaleValues::rescaleValues()
         }
         else
         {
-            coeff = -1;
+            coeff    = -1;
             textPosX = viewportX + viewportWidth;
         }
 
@@ -290,14 +292,14 @@ void ScaleValues::rescaleValues()
             valueSize = m_values[i]->boundingRect().height();
 
             size = this->mapAdaptorToScene(
-                    std::pair<double, double>(m_values[i]->boundingRect().width(), valueSize),
-                    m_xAxis, m_yAxis);
+                std::pair<double, double>(m_values[i]->boundingRect().width(), valueSize),
+                m_xAxis, m_yAxis);
 
             step = (int)(valueSize / valueSizeRatio) + 1;
 
             if( step > m_step )
             {
-                m_step = step;
+                m_step            = step;
                 suggestResampling = true;
             }
 
@@ -307,8 +309,8 @@ void ScaleValues::rescaleValues()
             m_values[i]->setTransform( transform );
 
             m_values[i]->setPos(
-                    coord.first + coeff * size.first * scaleX,
-                    coord.second - (m_interval - size.second / 2) * scaleY );
+                coord.first + coeff * size.first * scaleX,
+                coord.second - (m_interval - size.second / 2) * scaleY );
         }
 
         m_unit->setTransform( transform );
@@ -316,13 +318,13 @@ void ScaleValues::rescaleValues()
         val = viewportHeight * 0.8;
 
         coord = this->mapAdaptorToScene(
-                std::pair<double, double>(textPosX, val), m_xAxis, m_yAxis);
+            std::pair<double, double>(textPosX, val), m_xAxis, m_yAxis);
 
         coeff = (m_align == "left") ? 1 : -1.5;
 
         m_unit->setPos(
-                coord.first + coeff * 2 * size.first * scaleX,
-                coord.second + size.second * scaleY);
+            coord.first + coeff * 2 * size.first * scaleX,
+            coord.second + size.second * scaleY);
     }
     else    // axis centered on top or bottom
     {
@@ -331,8 +333,8 @@ void ScaleValues::rescaleValues()
         float coeff = 0.5;
 
         double textPosY = (m_align == "bottom")
-            ? m_viewport->getY()
-            : viewportHeight * 0.9;
+                          ? m_viewport->getY()
+                          : viewportHeight * 0.9;
 
         for(int i = 0; i < valuesSize; ++i, val += m_interval)
         {
@@ -346,18 +348,18 @@ void ScaleValues::rescaleValues()
 
             if( step > m_step )
             {
-                m_step = step;
+                m_step            = step;
                 suggestResampling = true;
             }
 
             coord = this->mapAdaptorToScene(std::pair<double, double>(val, textPosY),
-                    m_xAxis, m_yAxis);
+                                            m_xAxis, m_yAxis);
 
             m_values[i]->setTransform( transform );
 
             m_values[i]->setPos(
-                    coord.first - size.first / 2 * scaleX,
-                    coord.second - coeff * size.second / 2 * scaleY );
+                coord.first - size.first / 2 * scaleX,
+                coord.second - coeff * size.second / 2 * scaleY );
         }
 
         m_unit->setTransform( transform );
@@ -365,19 +367,19 @@ void ScaleValues::rescaleValues()
         val = viewportHeight * 0.8;
 
         size = this->mapAdaptorToScene(
-                std::pair<double, double>(m_unit->boundingRect().width(), m_unit->boundingRect().height()),
-                m_xAxis, m_yAxis);
+            std::pair<double, double>(m_unit->boundingRect().width(), m_unit->boundingRect().height()),
+            m_xAxis, m_yAxis);
 
         coord = this->mapAdaptorToScene(
-                std::pair<double, double>(
-                    viewportX + viewportWidth / 2, textPosY),
-                m_xAxis, m_yAxis);
+            std::pair<double, double>(
+                viewportX + viewportWidth / 2, textPosY),
+            m_xAxis, m_yAxis);
 
         coeff = (m_align == "left") ? 1 : -1.5;
 
         m_unit->setPos(
-                coord.first - size.first * scaleX,
-                coord.second - 1.5 * size.second * scaleY);
+            coord.first - size.first * scaleX,
+            coord.second - 1.5 * size.second * scaleY);
     }
 
     if( suggestResampling )
@@ -396,14 +398,14 @@ void ScaleValues::rescaleValues()
 void ScaleValues::showHideScaleValues()
 {
     double value;
-    const int size = (int)m_values.size();
+    const int size        = (int)m_values.size();
     const double startVal = this->getStartVal();
 
     for(int i = 0; i < size; ++i)
     {
         value = i * m_interval + startVal;  // compute the value at index 'i'
 
-        // Display this value or not according to the current step between two consecutives values
+        // Display this value or not according to the current step between two consecutive values
         // and in keeping the displaying of the value '0':
         m_values[i]->setVisible( fmod(value, (m_step * m_interval)) == 0.0 );
     }
@@ -411,18 +413,6 @@ void ScaleValues::showHideScaleValues()
 
 //---------------------------------------------------------------------------------------
 
-void ScaleValues::doReceive( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-
-    if( _msg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED) )
-    {
-        doUpdate();
-    }
-}
-
-//---------------------------------------------------------------------------------------
-
 void ScaleValues::processInteraction( ::scene2D::data::Event::sptr _event)
 {
     if( _event->getType() == ::scene2D::data::Event::Resize)
@@ -435,15 +425,12 @@ void ScaleValues::processInteraction( ::scene2D::data::Event::sptr _event)
 
 void ScaleValues::doSwap() throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
 }
 
 //---------------------------------------------------------------------------------------
 
 void ScaleValues::doStop() throw ( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC();
-
     // Remove the layer (and therefore all its related items) from the scene
     this->getScene2DRender()->getScene()->removeItem(m_layer);
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Sin.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Sin.cpp
index 98a145b..3e279f7 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Sin.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Sin.cpp
@@ -1,16 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
-#include <fwData/Composite.hpp>
-
 #include "scene2D/adaptor/Sin.hpp"
 #include "scene2D/data/InitQtPen.hpp"
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::Sin  , ::fwData::Composite ) ;
+#include <fwServices/macros.hpp>
+#include <fwData/Composite.hpp>
+
+
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Sin, ::fwData::Composite );
 
 
 namespace scene2D
@@ -18,18 +19,22 @@ namespace scene2D
 namespace adaptor
 {
 
-Sin::Sin() throw()
+Sin::Sin() throw() :
+    m_xMin(0.f),
+    m_xMax(0.f)
 {
 }
 
+//---------------------------------------------------------------------------------------------------------
+
 Sin::~Sin() throw()
 {
 }
 
+//---------------------------------------------------------------------------------------------------------
+
 void Sin::configuring() throw (::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     assert(m_configuration->getName() == "config");
 
     std::string xMinStr(m_configuration->getAttributeValue("xMinBound"));
@@ -44,31 +49,28 @@ void Sin::configuring() throw (::fwTools::Failed)
     m_xMax = xMax;
 }
 
+//---------------------------------------------------------------------------------------------------------
+
 void Sin::doStart()
 {
-    /*QGraphicsItemGroup* sinLayer = new QGraphicsItemGroup();
-    QEasingCurve* sinus = new QEasingCurve(QEasingCurve::InSine);
-    this->getScene2DRender->getScene()->addItem(sinLayer);*/
 }
 
+//---------------------------------------------------------------------------------------------------------
+
 void Sin::doUpdate()
 {
-
 }
 
-void Sin::doReceive( fwServices::ObjectMsg::csptr _msg)
-{
-
-}
+//---------------------------------------------------------------------------------------------------------
 
 void Sin::doSwap()
 {
-
 }
 
+//---------------------------------------------------------------------------------------------------------
+
 void Sin::doStop()
 {
-
 }
 
 } // namespace adaptor
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp
index 91dbd45..5f589fa 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/Square.cpp
@@ -1,17 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/Square.hpp"
+
+#include <fwServices/macros.hpp>
 #include <fwData/Composite.hpp>
 
 #include <QGraphicsItemGroup>
 
-#include "scene2D/adaptor/Square.hpp"
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::Square  , ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::Square, ::fwData::Composite );
 
 
 namespace scene2D
@@ -21,13 +22,19 @@ namespace adaptor
 
 //-----------------------------------------------------------------------------
 
-Square::Square() throw() : m_pointIsCaptured (false)
-{}
+Square::Square() throw() :
+    m_size(0),
+    m_layer(nullptr),
+    m_rec(nullptr),
+    m_pointIsCaptured (false)
+{
+}
 
 //-----------------------------------------------------------------------------
 
 Square::~Square() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -80,13 +87,6 @@ void Square::doUpdate() throw ( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void Square::doReceive( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
 void Square::doSwap() throw ( ::fwTools::Failed )
 {
     SLM_TRACE_FUNC();
@@ -123,13 +123,14 @@ void Square::setColor( std::string _color )
 void Square::processInteraction( ::scene2D::data::Event::sptr _event )
 {
     SLM_TRACE_FUNC();
-    if ( _event->getType() == ::scene2D::data::Event::MouseButtonPress && _event->getButton() == ::scene2D::data::Event::LeftButton )
+    if ( _event->getType() == ::scene2D::data::Event::MouseButtonPress &&
+         _event->getButton() == ::scene2D::data::Event::LeftButton )
     {
         if ( this->coordViewIsInItem( _event->getCoord(), m_rec ) )
         {
-            OSLM_TRACE("Point is captured");
+            SLM_TRACE("Point is captured");
             m_pointIsCaptured = true;
-            m_oldCoord = this->coordViewToCoordItem( _event->getCoord(), m_rec );
+            m_oldCoord        = this->coordViewToCoordItem( _event->getCoord(), m_rec );
             m_rec->setBrush( Qt::yellow );
             _event->setAccepted(true);
         }
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp
index e215e68..18012f0 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/TransferFunction.cpp
@@ -1,36 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "scene2D/adaptor/TransferFunction.hpp"
 
-#include <fwServices/Base.hpp>
+#include "scene2D/Scene2DGraphicsView.hpp"
+#include "scene2D/data/InitQtPen.hpp"
+#include "scene2D/data/Viewport.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
 
-#include <fwData/Image.hpp>
 #include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
 #include <fwData/String.hpp>
 
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
+#include <QColorDialog>
 #include <QGraphicsItemGroup>
 #include <QPoint>
-#include <QColorDialog>
 
-#include "scene2D/data/Viewport.hpp"
-#include "scene2D/adaptor/TransferFunction.hpp"
-#include "scene2D/data/InitQtPen.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
-#include "scene2D/data/ViewportMsg.hpp"
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor , ::scene2D::adaptor::TransferFunction  , ::fwData::Image ) ;
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::TransferFunction, ::fwData::Image );
 
 
 namespace scene2D
@@ -38,20 +38,22 @@ namespace scene2D
 namespace adaptor
 {
 
-TransferFunction::TransferFunction() throw() : m_pointSize(10)
+TransferFunction::TransferFunction() throw() :
+    m_layer(nullptr),
+    m_circleWidth(0.),
+    m_circleHeight(0.),
+    m_pointIsCaptured(false),
+    m_capturedCircle(nullptr),
+    m_pointSize(10.f)
 {
-    this->installTFSelectionEventHandler(this);
-//    this->addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
-//    this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS );
-//    this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::WINDOWING );
-//    this->addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-//    this->addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
+    this->installTFSlots(this);
 }
 
 //-----------------------------------------------------------------------------
 
 TransferFunction::~TransferFunction() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -82,7 +84,7 @@ void TransferFunction::configuring() throw ( ::fwTools::Failed )
 
     if( !m_configuration->getAttributeValue("viewportUID").empty() )
     {
-        m_viewportID =  m_configuration->getAttributeValue("viewportUID");
+        m_viewportID = m_configuration->getAttributeValue("viewportUID");
     }
     this->parseTFConfig( m_configuration );
 }
@@ -99,15 +101,15 @@ void TransferFunction::buildTFPoints()
 
     // Iterate on the selected tf and fill the tf points map with key = value and T = Color(RGBA)
     ::fwData::TransferFunction::TFValuePairType minMax = selectedTF->getMinMaxTFValues();
-    ::fwData::TransferFunction::TFValueType wlMin = selectedTF->getWLMinMax().first;
-    ::fwData::TransferFunction::TFValueType window = selectedTF->getWindow();
-    ::fwData::TransferFunction::TFValueType width = minMax.second - minMax.first;
+    ::fwData::TransferFunction::TFValueType wlMin      = selectedTF->getWLMinMax().first;
+    ::fwData::TransferFunction::TFValueType window     = selectedTF->getWindow();
+    ::fwData::TransferFunction::TFValueType width      = minMax.second - minMax.first;
 
-    BOOST_FOREACH(::fwData::TransferFunction::TFDataType::value_type elt, selectedTF->getTFData())
+    for(const ::fwData::TransferFunction::TFDataType::value_type& elt : selectedTF->getTFData())
     {
         ::fwData::TransferFunction::TFValueType val;
-        val = (elt.first - minMax.first) / width;
-        val = val * window + wlMin;
+        val             = (elt.first - minMax.first) / width;
+        val             = val * window + wlMin;
         m_TFPoints[val] = elt.second;
     }
 }
@@ -121,7 +123,7 @@ void TransferFunction::buildCircles()
 
     ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
     const double viewportHeight = viewport->getHeight();
-    const double viewportWidth = viewport->getWidth();
+    const double viewportWidth  = viewport->getWidth();
 
     // Total ratio
     Scene2DRatio ratio = this->getRatio();
@@ -132,26 +134,26 @@ void TransferFunction::buildCircles()
     m_circleWidth = m_pointSize;
 
     // Initialize the height of the circles
-    m_circleHeight = m_pointSize * viewportHeight / viewportWidth;
+    m_circleHeight  = m_pointSize * viewportHeight / viewportWidth;
     m_circleHeight /= viewportWidthRatio;
     m_circleHeight *= (m_viewInitialSize.first / m_viewInitialSize.second);
 
     // Apply the ratio of the scene 2D in order to keep the same size for the circles if viewport's size or
     // view's size change:
-    m_circleWidth *= ratio.first;
+    m_circleWidth  *= ratio.first;
     m_circleHeight *= ratio.second;
 
     // Remove the circles items from the scene and clear the circles vector
-    for (std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin() ; circleIt != m_circles.end() ; ++circleIt)
+    for(QGraphicsEllipseItem* circle : m_circles)
     {
-        this->getScene2DRender()->getScene()->removeItem(*circleIt);
-        delete *circleIt;
+        this->getScene2DRender()->getScene()->removeItem(circle);
+        delete circle;
     }
 
     m_circles.clear();
 
     // Iterate on the tf points map to add circle items to the circles vector
-    BOOST_FOREACH(::fwData::TransferFunction::TFDataType::value_type elt,  m_TFPoints)
+    for(const ::fwData::TransferFunction::TFDataType::value_type& elt : m_TFPoints)
     {
         // Build circle corresponding to the tf point and push it back into the circles vector
         m_circles.push_back(this->buildCircle(elt.first, elt.second));
@@ -160,7 +162,8 @@ void TransferFunction::buildCircles()
 
 //-----------------------------------------------------------------------------
 
-QGraphicsEllipseItem* TransferFunction::buildCircle(::fwData::TransferFunction::TFValueType value, ::fwData::TransferFunction::TFColor color)
+QGraphicsEllipseItem* TransferFunction::buildCircle(::fwData::TransferFunction::TFValueType value,
+                                                    ::fwData::TransferFunction::TFColor color)
 {
     ::fwData::TransferFunction::sptr selectedTF = this->getTransferFunction();
     Point2DType valColor(value, color.a );
@@ -188,11 +191,10 @@ void TransferFunction::buildLinesAndPolygons()
     ::fwData::TransferFunction::sptr selectedTF = this->getTransferFunction();
 
     // Remove line and polygon items from the scene and clear the lines and polygons vector
-    std::vector< QGraphicsItem* >::iterator linesAndPolygonsIt;
-    for( linesAndPolygonsIt = m_linesAndPolygons.begin() ; linesAndPolygonsIt != m_linesAndPolygons.end() ; ++linesAndPolygonsIt)
+    for( QGraphicsItem* linesAndPolygons : m_linesAndPolygons)
     {
-        this->getScene2DRender()->getScene()->removeItem(*linesAndPolygonsIt);
-        delete *linesAndPolygonsIt;
+        this->getScene2DRender()->getScene()->removeItem(linesAndPolygons);
+        delete linesAndPolygons;
     }
 
     m_linesAndPolygons.clear();
@@ -219,11 +221,11 @@ void TransferFunction::buildBounds()
     ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
 
     QGraphicsEllipseItem* beginCircle = m_circles.front();
-    QGraphicsEllipseItem* endCircle = m_circles.back();
+    QGraphicsEllipseItem* endCircle   = m_circles.back();
 
     double x1 = viewport->getX() - 10;
     double x2 = beginCircle->rect().x() + beginCircle->pos().x() + m_circleWidth /2;
-    double y = beginCircle->rect().y() + beginCircle->pos().y() + m_circleHeight / 2;
+    double y  = beginCircle->rect().y() + beginCircle->pos().y() + m_circleHeight / 2;
     // Build the line between the actual and the next TF Point and push it back into the lines and polygons vector
     QGraphicsLineItem* line = new QGraphicsLineItem(x1, y, x2, y);
     line->setPen(m_linePen);
@@ -253,7 +255,7 @@ void TransferFunction::buildBounds()
 
     x1 = endCircle->rect().x() + endCircle->pos().x() + m_circleWidth /2;
     x2 = viewport->getX() + viewport->getWidth() + 10;
-    y = endCircle->rect().y() + endCircle->pos().y() + m_circleHeight / 2;
+    y  = endCircle->rect().y() + endCircle->pos().y() + m_circleHeight / 2;
     // Build the line between the actual and the next TF Point and push it back into the lines and polygons vector
     QGraphicsLineItem* line2 = new QGraphicsLineItem(x1, y, x2, y);
     line2->setPen(m_linePen);
@@ -289,19 +291,19 @@ void TransferFunction::buildLinearLinesAndPolygons()
     SLM_ASSERT("Circles must not be empty", !m_circles.empty());
 
     ::fwData::TransferFunction::sptr selectedTF = this->getTransferFunction();
-    ::scene2D::data::Viewport::sptr viewport = this->getScene2DRender()->getViewport();
+    ::scene2D::data::Viewport::sptr viewport    = this->getScene2DRender()->getViewport();
 
     QVector<QPointF> vect;
     QLinearGradient grad;
 
     QGraphicsEllipseItem* firtsCircle = m_circles.front();
-    QGraphicsEllipseItem* lastCircle = m_circles.back();
+    QGraphicsEllipseItem* lastCircle  = m_circles.back();
 
 
     double xBegin;
     double xEnd;
     xBegin = firtsCircle->rect().x() + firtsCircle->pos().x() + m_circleWidth / 2;
-    xEnd = lastCircle->rect().x() + lastCircle->pos().x() + m_circleWidth / 2;
+    xEnd   = lastCircle->rect().x() + lastCircle->pos().x() + m_circleWidth / 2;
     if (selectedTF->getIsClamped())
     {
         vect.append(QPointF(xBegin, 0));
@@ -320,11 +322,11 @@ void TransferFunction::buildLinearLinesAndPolygons()
         }
         if (xEnd < viewport->getX() + viewport->getWidth())
         {
-            xEnd = viewport->getX() + viewport->getWidth() +10 ;
+            xEnd = viewport->getX() + viewport->getWidth() +10;
         }
     }
 
-    grad.setColorAt(0 ,  firtsCircle->brush().color());
+    grad.setColorAt(0,  firtsCircle->brush().color());
 
     grad.setStart( xBegin, 0);
     grad.setFinalStop( xEnd, 0 );
@@ -332,7 +334,8 @@ void TransferFunction::buildLinearLinesAndPolygons()
     double distanceMax = xEnd - xBegin;
 
     // Iterate on the circles vector to add line and polygon items to the lines and polygons vector
-    for ( std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin() ; circleIt != m_circles.end()-1 ; ++circleIt)
+    for ( std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin(); circleIt != m_circles.end()-1;
+          ++circleIt)
     {
         QPointF p1((*circleIt)->rect().x() + (*circleIt)->pos().x() + m_circleWidth / 2,
                    (*circleIt)->rect().y() + (*circleIt)->pos().y() + m_circleHeight / 2);
@@ -343,7 +346,7 @@ void TransferFunction::buildLinearLinesAndPolygons()
         vect.append(p2);
 
         // Build the gradient
-        grad.setColorAt((p1.x() - xBegin)/distanceMax ,  (*circleIt)->brush().color());
+        grad.setColorAt((p1.x() - xBegin)/distanceMax,  (*circleIt)->brush().color());
     }
 
     if (!selectedTF->getIsClamped())
@@ -353,10 +356,10 @@ void TransferFunction::buildLinearLinesAndPolygons()
             vect.append(QPointF(xEnd, lastCircle->rect().y() + lastCircle->pos().y() + m_circleHeight / 2));
         }
         double lastCircleX = lastCircle->rect().x() + lastCircle->pos().x() + m_circleWidth / 2;
-        grad.setColorAt((lastCircleX-xBegin)/distanceMax , lastCircle->brush().color());
+        grad.setColorAt((lastCircleX-xBegin)/distanceMax, lastCircle->brush().color());
     }
     vect.append(QPointF(xEnd, 0));
-    grad.setColorAt(1 , lastCircle->brush().color());
+    grad.setColorAt(1, lastCircle->brush().color());
 
 
 
@@ -377,7 +380,8 @@ void TransferFunction::buildLinearLinesAndPolygons()
 void TransferFunction::buildNearestLinesAndPolygons()
 {
     // Iterate on the circles vector to add line and polygon items to the lines and polygons vector
-    for ( std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin() ; circleIt != m_circles.end() ; ++circleIt)
+    for ( std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin(); circleIt != m_circles.end();
+          ++circleIt)
     {
         QGraphicsEllipseItem* circle = *circleIt;
         QGraphicsEllipseItem* previousCircle;
@@ -400,9 +404,12 @@ void TransferFunction::buildNearestLinesAndPolygons()
         }
 
         double x1 = previousCircle->rect().x() + previousCircle->pos().x() + (circle->pos().x() + circle->rect().x()
-                - (previousCircle->pos().x() + previousCircle->rect().x()))/2 + m_circleWidth /2;
+                                                                              - (previousCircle->pos().x() +
+                                                                                 previousCircle->rect().x()))/2 +
+                    m_circleWidth /2;
         double x2 = circle->rect().x() + circle->pos().x() + (nextCircle->pos().x() + nextCircle->rect().x()
-                - (circle->pos().x() + circle->rect().x()))/2 + m_circleWidth /2;
+                                                              - (circle->pos().x() + circle->rect().x()))/2 +
+                    m_circleWidth /2;
         double y = circle->rect().y() + circle->pos().y() + m_circleHeight / 2;
         // Build the line between the actual and the next TF Point and push it back into the lines and polygons vector
         QGraphicsLineItem* line = new QGraphicsLineItem(x1, y, x2, y);
@@ -438,12 +445,12 @@ void TransferFunction::buildNearestLinesAndPolygons()
 void TransferFunction::buildLayer()
 {
     // Add graphics items vectors to the layer
-    for ( unsigned int i = 0 ; i < m_linesAndPolygons.size() ; i++)
+    for ( unsigned int i = 0; i < m_linesAndPolygons.size(); i++)
     {
         m_layer->addToGroup(m_linesAndPolygons.at(i));
     }
 
-    for ( unsigned int i = 0 ; i < m_circles.size() ; i++)
+    for ( unsigned int i = 0; i < m_circles.size(); i++)
     {
         m_layer->addToGroup(m_circles.at(i));
     }
@@ -461,18 +468,18 @@ void TransferFunction::buildLayer()
 void TransferFunction::updateImageTF()
 {
     // Get the selected tf of the image
-    ::fwData::TransferFunction::sptr selectedTF = this->getTransferFunction();
+    ::fwData::TransferFunction::sptr selectedTF        = this->getTransferFunction();
     ::fwData::TransferFunction::TFValuePairType minMax = selectedTF->getMinMaxTFValues();
-    ::fwData::TransferFunction::TFValueType window = selectedTF->getWindow();
-    ::fwData::TransferFunction::TFValueType wlMin = selectedTF->getWLMinMax().first;
+    ::fwData::TransferFunction::TFValueType window     = selectedTF->getWindow();
+    ::fwData::TransferFunction::TFValueType wlMin      = selectedTF->getWLMinMax().first;
     ::fwData::TransferFunction::TFValueType val;
     selectedTF->clear();
 
     // Rebuild the selected tf from the tf points map
     double width = minMax.second - minMax.first;
-    double min = m_TFPoints.begin()->first;
-    double max = m_TFPoints.rbegin()->first;
-    BOOST_FOREACH(::fwData::TransferFunction::TFDataType::value_type elt,  m_TFPoints)
+    double min   = m_TFPoints.begin()->first;
+    double max   = m_TFPoints.rbegin()->first;
+    for(const ::fwData::TransferFunction::TFDataType::value_type& elt :  m_TFPoints)
     {
         val = (elt.first - wlMin) / window;
         val = val * width + minMax.first;
@@ -488,12 +495,12 @@ void TransferFunction::updateImageTF()
         selectedTF->setWLMinMax(::fwData::TransferFunction::TFValuePairType(max, min));
     }
 
-    ::fwComEd::TransferFunctionMsg::sptr msg = ::fwComEd::TransferFunctionMsg::New();
-    msg->addEvent(::fwComEd::TransferFunctionMsg::MODIFIED_POINTS);
-    ::fwServices::IEditionService::notify( this->getSptr(), selectedTF, msg );
-
-    // Update image window and level
-    this->notifyTFWindowing(this->getSptr());
+    auto sig = selectedTF->signal< ::fwData::TransferFunction::PointsModifiedSignalType >(
+        ::fwData::TransferFunction::s_POINTS_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdateTFPoints));
+        sig->asyncEmit();
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -509,22 +516,25 @@ void TransferFunction::doStart() throw ( ::fwTools::Failed )
     m_circlePen.setCosmetic( true );
     m_circlePen.setWidthF( 0 );
 
-    m_viewport = ::scene2D::data::Viewport::dynamicCast( ::fwTools::fwID::getObject( m_viewportID ) );
+    m_viewport = this->getSafeInOut< ::scene2D::data::Viewport>( m_viewportID );
 
-    m_connection = m_viewport->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connection = m_viewport->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
 
     this->doUpdate();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //-----------------------------------------------------------------------------
 
 void TransferFunction::doUpdate() throw ( ::fwTools::Failed )
 {
+    ::fwData::Composite::wptr tfSelection = this->getSafeInOut< ::fwData::Composite>(this->getTFSelectionFwID());
+    this->setTransferFunctionSelection(tfSelection);
+
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
-    this->updateTransferFunction(image, this->getSptr());
+    this->updateTransferFunction(image);
 
     // Build the tf map points, the circles vector, the lines and polygons vector, add the items to the layer and add it to the scene
     this->buildTFPoints();
@@ -533,45 +543,45 @@ void TransferFunction::doUpdate() throw ( ::fwTools::Failed )
     this->buildLayer();
 }
 
-//-----------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
-void TransferFunction::doReceive( fwServices::ObjectMsg::csptr msg) throw ( ::fwTools::Failed )
+void TransferFunction::updatingTFPoints()
 {
-    if(msg->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING )
-            || msg->hasEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS )
-            || msg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED)
-            || msg->hasEvent( ::fwComEd::ImageMsg::BUFFER)
-            || msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE)
-            || this->upadteTFObserver(msg, this->getSptr()))
-    {
-        this->doUpdate();
-    }
+    this->doUpdate();
+}
+
+//------------------------------------------------------------------------------
+
+void TransferFunction::updatingTFWindowing(double window, double level)
+{
+    this->doUpdate();
 }
 
 //-----------------------------------------------------------------------------
 
 void TransferFunction::doSwap() throw ( ::fwTools::Failed )
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->doUpdate();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //-----------------------------------------------------------------------------
 
 void TransferFunction::doStop() throw ( ::fwTools::Failed )
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     m_connection.disconnect();
 
     // Clear the items vectors and remove the layer (and all its children) from the scene
-    for (std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin() ; circleIt != m_circles.end() ; ++circleIt )
+    for (std::vector< QGraphicsEllipseItem* >::iterator circleIt = m_circles.begin(); circleIt != m_circles.end();
+         ++circleIt )
     {
         delete *circleIt;
     }
 
-    for( std::vector< QGraphicsItem* >::iterator linesPolyIt = m_linesAndPolygons.begin() ;
-            linesPolyIt != m_linesAndPolygons.end() ; ++linesPolyIt)
+    for( std::vector< QGraphicsItem* >::iterator linesPolyIt = m_linesAndPolygons.begin();
+         linesPolyIt != m_linesAndPolygons.end(); ++linesPolyIt)
     {
         delete *linesPolyIt;
     }
@@ -592,7 +602,7 @@ void TransferFunction::processInteraction( ::scene2D::data::Event::sptr _event )
 
     // Iterate parallely on the circles vector and the tf points map
     ::fwData::TransferFunction::TFDataType::iterator TFPointIt = m_TFPoints.begin();
-    BOOST_FOREACH(QGraphicsEllipseItem* circle, m_circles)
+    for(QGraphicsEllipseItem* circle : m_circles)
     {
         if ( items.indexOf(circle) >=0)
         {
@@ -604,15 +614,15 @@ void TransferFunction::processInteraction( ::scene2D::data::Event::sptr _event )
             }
             // If left button is pressed
             else if ( _event->getType() == ::scene2D::data::Event::MouseButtonPress
-                    && _event->getButton() == ::scene2D::data::Event::LeftButton )
+                      && _event->getButton() == ::scene2D::data::Event::LeftButton )
             {
 
                 this->leftButtonEvent(circle, _event);
                 return;
             }
             else if ( _event->getType() == ::scene2D::data::Event::MouseButtonPress
-                    && _event->getButton() == ::scene2D::data::Event::RightButton
-                    && m_circles.size() > 2  )
+                      && _event->getButton() == ::scene2D::data::Event::RightButton
+                      && m_circles.size() > 2  )
             {
                 this->rightButtonEvent(TFPointIt->first, _event);
                 return;
@@ -620,14 +630,14 @@ void TransferFunction::processInteraction( ::scene2D::data::Event::sptr _event )
         }
         // If a point is captured, this is the good one, and the mouse move
         if ( m_pointIsCaptured && m_capturedCircle == circle
-                && _event->getType() == ::scene2D::data::Event::MouseMove )
+             && _event->getType() == ::scene2D::data::Event::MouseMove )
         {
             this->mouseMoveEvent(circle, TFPointIt->first, _event);
             return;
         }
         // If a point is captured, this is the good one, and the button is released
         else if ( m_pointIsCaptured && m_capturedCircle == circle
-                && _event->getType() == ::scene2D::data::Event::MouseButtonRelease )
+                  && _event->getType() == ::scene2D::data::Event::MouseButtonRelease )
         {
             this->mouseButtonReleaseEvent(circle, _event);
             return;
@@ -637,7 +647,8 @@ void TransferFunction::processInteraction( ::scene2D::data::Event::sptr _event )
 
 
     // After iteration, due to return instruction in it, the events caught aren't on circles
-    if ( _event->getType() == ::scene2D::data::Event::MouseButtonDoubleClick && _event->getButton() == ::scene2D::data::Event::LeftButton )
+    if ( _event->getType() == ::scene2D::data::Event::MouseButtonDoubleClick &&
+         _event->getButton() == ::scene2D::data::Event::LeftButton )
     {
         // If no other event has been catched, a left click means a point creation
         this->doubleClickEvent(_event);
@@ -671,9 +682,9 @@ void TransferFunction::doubleClickEvent(QGraphicsEllipseItem* circle, ::fwData::
     const QColor initialColor( shapeColor.red(), shapeColor.green(), shapeColor.blue(), tfColor.a*255);
 
     QColor circleColor = QColorDialog::getColor(initialColor,
-                                this->getScene2DRender()->getView(),
-                                QString("Choose the point color"),
-                                QColorDialog::ShowAlphaChannel);
+                                                this->getScene2DRender()->getView(),
+                                                QString("Choose the point color"),
+                                                QColorDialog::ShowAlphaChannel);
 
     if (circleColor.isValid())
     {
@@ -706,7 +717,9 @@ void TransferFunction::leftButtonEvent(QGraphicsEllipseItem* circle, ::scene2D::
     m_oldCoord = this->coordViewToCoordItem( _event->getCoord() );
 
     // Set the selected circle pen to yellow to get a visual feedback that the selected circle is selected
-    circle->setPen( QPen( Qt::GlobalColor( Qt::yellow ) ) );
+    QPen circlePen(Qt::yellow);
+    circlePen.setCosmetic(true);
+    circle->setPen( circlePen );
 
     _event->setAccepted(true);
 }
@@ -714,8 +727,8 @@ void TransferFunction::leftButtonEvent(QGraphicsEllipseItem* circle, ::scene2D::
 //-----------------------------------------------------------------------------
 
 void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
-        ::fwData::TransferFunction::TFValueType tfPoint,
-         ::scene2D::data::Event::sptr _event)
+                                      ::fwData::TransferFunction::TFValueType tfPoint,
+                                      ::scene2D::data::Event::sptr _event)
 {
     QGraphicsEllipseItem* lastPoint = m_circles.back();
 
@@ -741,7 +754,7 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
 
     // Calculate the real coordinates of the previous circle
     double previousXCircleRealPos = (*previousCircle)->rect().x() + (*previousCircle)->pos().x();
-    double previousYRealNewPos = (*previousCircle)->rect().y() + (*previousCircle)->pos().y();
+    double previousYRealNewPos    = (*previousCircle)->rect().y() + (*previousCircle)->pos().y();
 
     Point2DType previousValues;
     Point2DType previousXY(previousXCircleRealPos, previousYRealNewPos );
@@ -750,7 +763,7 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
 
     // Calculate the real coordinates of the next circle
     double nextXCircleRealPos = (*nextCircle)->rect().x() + (*nextCircle)->pos().x();
-    double nextYRealNewPos = (*nextCircle)->rect().y() + (*nextCircle)->pos().y();
+    double nextYRealNewPos    = (*nextCircle)->rect().y() + (*nextCircle)->pos().y();
 
     Point2DType nextValues;
     Point2DType nextXY(nextXCircleRealPos, nextYRealNewPos);
@@ -762,7 +775,7 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
     double circleYRealNewPos = circle->rect().y() + circle->pos().y() + newCoord.getY() - m_oldCoord.getY();
 
     Point2DType realValues;
-    Point2DType circleXY( circleXRealNewPos , circleYRealNewPos );
+    Point2DType circleXY( circleXRealNewPos, circleYRealNewPos );
     realValues = this->mapSceneToAdaptor(circleXY, m_xAxis, m_yAxis);
 
     Point2DType oldCoordPair;
@@ -776,9 +789,9 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
 
     // Check if the mouse isn't out of bounds vertically and horizontally
     if (   (circle == m_circles.front() || realValues.first > previousValues.first)
-        && (circle == lastPoint || realValues.first < nextValues.first)
-        && (realValues.second - m_circleHeight/2) >= 0
-        && (realValues.second - m_circleHeight/2) <= 1 )
+           && (circle == lastPoint || realValues.first < nextValues.first)
+           && (realValues.second - m_circleHeight/2) >= 0
+           && (realValues.second - m_circleHeight/2) <= 1 )
     {
         // Move the selected tf point by the difference between the old coordinates and the new ones
         circle->moveBy( newCoord.getX() - m_oldCoord.getX(), newCoord.getY() - m_oldCoord.getY() );
@@ -790,15 +803,15 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
     {
         // Check if the mouse is out of bounds only horizontally
         if (  ((circle != m_circles.front() && realValues.first < previousValues.first)
-                    || (circle != lastPoint && realValues.first > nextValues.first))
-                && (realValues.second - m_circleHeight/2) >= 0
-                && (realValues.second - m_circleHeight/2) <= 1 )
+               || (circle != lastPoint && realValues.first > nextValues.first))
+              && (realValues.second - m_circleHeight/2) >= 0
+              && (realValues.second - m_circleHeight/2) <= 1 )
         {
             // new abscissa of the moving TF point
             double x = (newCoordPair.first > oldCoordPair.first) ? (nextValues.first - 1) : (previousValues.first + 1);
             x = this->mapAdaptorToScene(Point2DType( x, 0 ), m_xAxis, m_yAxis).first;
 
-            QRectF rect = circle->rect();
+            QRectF rect        = circle->rect();
             const double width = rect.width();
             rect.setX( x );
             rect.setWidth( width );
@@ -812,8 +825,8 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
 
         // Check if the mouse is out of bounds only vertically
         if (  (circle == m_circles.front() || realValues.first > previousValues.first)
-                && (circle == lastPoint || realValues.first < nextValues.first)
-                && ((realValues.second - m_circleHeight/2) < 0 || (realValues.second - m_circleHeight/2) > 1) ) // opacity
+              && (circle == lastPoint || realValues.first < nextValues.first)
+              && ((realValues.second - m_circleHeight/2) < 0 || (realValues.second - m_circleHeight/2) > 1) )   // opacity
         {
             // If the mouse is vertically out of bounds, the TF point is moved to fit the nearest vertical bound (0 or 1).
 
@@ -826,7 +839,7 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
                 y = this->mapAdaptorToScene(Point2DType( 0, 1 ), m_xAxis, m_yAxis).second;
             }
 
-            QRectF rect = circle->rect();
+            QRectF rect         = circle->rect();
             const double height = rect.height();
             rect.setY( y - m_circleHeight / 2 );
             rect.setHeight( height );
@@ -845,14 +858,14 @@ void TransferFunction::mouseMoveEvent(QGraphicsEllipseItem* circle,
     // Erase the selected tf point cause it's key is const
     m_TFPoints.erase(tfPoint);
 
-    Point2DType point(this->pointValue(circle) , circle->rect().y() + circle->pos().y() + m_circleHeight / 2 );
+    Point2DType point(this->pointValue(circle), circle->rect().y() + circle->pos().y() + m_circleHeight / 2 );
     // Create a new tf point with the right value (key) and alpha
     Point2DType pair = this->mapSceneToAdaptor(point, m_xAxis, m_yAxis);
 
     m_TFPoints[pair.first] = ::fwData::TransferFunction::TFColor(
-            circle->brush().color().redF(),
-            circle->brush().color().greenF(),
-            circle->brush().color().blueF(),
+        circle->brush().color().redF(),
+        circle->brush().color().greenF(),
+        circle->brush().color().blueF(),
         pair.second);
 
     // Update the image tf
@@ -894,15 +907,16 @@ void TransferFunction::doubleClickEvent( ::scene2D::data::Event::sptr _event)
     double y = this->getScene2DRender()->mapToScene(_event->getCoord()).getY();
 
     // Transform the x and y coordinates with axis scaling and type
-    Point2DType _xy(x , y );
-    Point2DType values = this->mapSceneToAdaptor(_xy , m_xAxis, m_yAxis);
+    Point2DType _xy(x, y );
+    Point2DType values = this->mapSceneToAdaptor(_xy, m_xAxis, m_yAxis);
 
-    ::fwData::TransferFunction::TFDataType::iterator nextTFPointIt = m_TFPoints.begin();
+    ::fwData::TransferFunction::TFDataType::iterator nextTFPointIt         = m_TFPoints.begin();
     ::fwData::TransferFunction::TFDataType::reverse_iterator lastTFPointIt = m_TFPoints.rbegin();
 
     if (values.first < (*nextTFPointIt).first)
     {
-        ::fwData::TransferFunction::TFColor color((*nextTFPointIt).second.r, (*nextTFPointIt).second.g, (*nextTFPointIt).second.b, values.second);
+        ::fwData::TransferFunction::TFColor color((*nextTFPointIt).second.r, (*nextTFPointIt).second.g,
+                                                  (*nextTFPointIt).second.b, values.second);
         m_TFPoints[values.first] = color;
 
         this->updateImageTF();
@@ -910,7 +924,8 @@ void TransferFunction::doubleClickEvent( ::scene2D::data::Event::sptr _event)
     }
     else if (values.first > (*lastTFPointIt).first)
     {
-        ::fwData::TransferFunction::TFColor color((*lastTFPointIt).second.r, (*lastTFPointIt).second.g, (*lastTFPointIt).second.b, values.second);
+        ::fwData::TransferFunction::TFColor color((*lastTFPointIt).second.r, (*lastTFPointIt).second.g,
+                                                  (*lastTFPointIt).second.b, values.second);
         m_TFPoints[values.first] = color;
 
         this->updateImageTF();
@@ -933,10 +948,14 @@ void TransferFunction::doubleClickEvent( ::scene2D::data::Event::sptr _event)
             double coef = (values.first - (*prevTFPointIt).first) / ((*nextTFPointIt).first - (*prevTFPointIt).first);
 
             // Calculate the new red, green, blue and alpha by linear interpolation in RGBA
-            double newRed = coef * ((*nextTFPointIt).second.r - (*prevTFPointIt).second.r) + (*prevTFPointIt).second.r;
-            double newGreen = coef * ((*nextTFPointIt).second.g - (*prevTFPointIt).second.g) + (*prevTFPointIt).second.g;
-            double newBlue = coef * ((*nextTFPointIt).second.b - (*prevTFPointIt).second.b) + (*prevTFPointIt).second.b;
-            double newAlpha = coef * ((*nextTFPointIt).second.a - (*prevTFPointIt).second.a) + (*prevTFPointIt).second.a;
+            double newRed = coef * ((*nextTFPointIt).second.r - (*prevTFPointIt).second.r) +
+                            (*prevTFPointIt).second.r;
+            double newGreen = coef * ((*nextTFPointIt).second.g - (*prevTFPointIt).second.g) +
+                              (*prevTFPointIt).second.g;
+            double newBlue = coef * ((*nextTFPointIt).second.b - (*prevTFPointIt).second.b) +
+                             (*prevTFPointIt).second.b;
+            double newAlpha = coef * ((*nextTFPointIt).second.a - (*prevTFPointIt).second.a) +
+                              (*prevTFPointIt).second.a;
 
             // Add a point with the right values to the tf points map
             m_TFPoints[values.first] = ::fwData::TransferFunction::TFColor(newRed, newGreen, newBlue, newAlpha);
@@ -957,12 +976,26 @@ double TransferFunction::pointValue(QGraphicsEllipseItem* circle)
 
 //-----------------------------------------------------------------------------
 
-::scene2D::data::Coord TransferFunction::coordViewToCoordItem( const ::scene2D::data::Coord & _coord )
+::scene2D::data::Coord TransferFunction::coordViewToCoordItem( const ::scene2D::data::Coord& _coord )
 {
     ::scene2D::data::Coord scenePoint = this->getScene2DRender()->mapToScene( _coord );
     return scenePoint;
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType TransferFunction::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+
 } // namespace adaptor
 } // namespace scene2D
 
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportInteractor.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportInteractor.cpp
index 2a25d45..c53cb6e 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportInteractor.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportInteractor.cpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/ViewportInteractor.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwServices/macros.hpp>
 
 #include <fwData/Composite.hpp>
 
-#include "scene2D/adaptor/ViewportInteractor.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ViewportInteractor,  ::fwData::Composite );
 
@@ -21,15 +22,15 @@ namespace adaptor
 //-----------------------------------------------------------------------------
 
 ViewportInteractor::ViewportInteractor() throw() :
-        m_viewportIsTranslated(false)
+    m_viewportIsTranslated(false)
 {
-//    this->handlingEventOff();
 }
 
 //-----------------------------------------------------------------------------
 
 ViewportInteractor::~ViewportInteractor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -41,60 +42,59 @@ void ViewportInteractor::configuring() throw( ::fwTools::Failed)
 //-----------------------------------------------------------------------------
 
 void ViewportInteractor::doStart() throw( ::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ViewportInteractor::doStop() throw( ::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ViewportInteractor::doUpdate() throw( ::fwTools::Failed)
-{}
-
-//-----------------------------------------------------------------------------
-
-void ViewportInteractor::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ViewportInteractor::doSwap() throw( ::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ViewportInteractor::processInteraction( ::scene2D::data::Event::sptr _event )
 {
     if ( _event->getType() == ::scene2D::data::Event::MouseWheelUp
-            && _event->getModifier() == ::scene2D::data::Event::ShiftModifier )
+         && _event->getModifier() == ::scene2D::data::Event::ShiftModifier )
     {
         this->zoom(true);
     }
     else if ( _event->getType() == ::scene2D::data::Event::MouseWheelDown
-            && _event->getModifier() == ::scene2D::data::Event::ShiftModifier )
+              && _event->getModifier() == ::scene2D::data::Event::ShiftModifier )
     {
         this->zoom(false);
     }
     else if ( _event->getType() == ::scene2D::data::Event::MouseButtonPress
-            && _event->getButton() == ::scene2D::data::Event::LeftButton
-            && _event->getModifier() == ::scene2D::data::Event::ShiftModifier )
+              && _event->getButton() == ::scene2D::data::Event::LeftButton
+              && _event->getModifier() == ::scene2D::data::Event::ShiftModifier )
     {
         m_viewportIsTranslated = true;
-        m_lastCoordEvent = _event->getCoord();
+        m_lastCoordEvent       = _event->getCoord();
     }
     else if ( m_viewportIsTranslated )
     {
         if ( _event->getType() == ::scene2D::data::Event::MouseMove )
         {
-            ::scene2D::data::Coord coord = _event->getCoord();
+            ::scene2D::data::Coord coord                  = _event->getCoord();
             ::scene2D::data::Viewport::sptr sceneViewport = this->getScene2DRender()->getViewport();
 
-            float dx = coord.getX() - m_lastCoordEvent.getX();
+            float dx     = coord.getX() - m_lastCoordEvent.getX();
             float xTrans = dx * sceneViewport->getWidth() / (float) this->getScene2DRender()->getView()->width();
 
-            float dy = coord.getY() - m_lastCoordEvent.getY();
+            float dy     = coord.getY() - m_lastCoordEvent.getY();
             float yTrans = dy * sceneViewport->getHeight() / (float) this->getScene2DRender()->getView()->height();
 
             sceneViewport->setX( sceneViewport->getX() - xTrans );
@@ -116,34 +116,34 @@ void ViewportInteractor::zoom( bool zoomIn )
 {
     ::scene2D::data::Viewport::sptr sceneViewport = this->getScene2DRender()->getViewport();
 
-    float zoomPercent = 10 / 100.0;
-    float y = sceneViewport->getY();
-    float x = sceneViewport->getX();
-    float width = sceneViewport->getWidth();
-    float height = sceneViewport->getHeight();
-    float centerX = x + width/2.0;
-    float centerY = x + height/2.0;
+    float zoomPercent = 10.f / 100.0f;
+    float y           = sceneViewport->getY();
+    float x           = sceneViewport->getX();
+    float width       = sceneViewport->getWidth();
+    float height      = sceneViewport->getHeight();
+    float centerX     = x + width/2.0f;
+    float centerY     = y + height/2.0f;
 
     float newWidth;
     float newHeight;
     if ( zoomIn )
     {
-        newWidth = width * zoomPercent;
+        newWidth  = width * zoomPercent;
         newHeight = height * zoomPercent;
     }
     else
     {
-        newWidth = - width * zoomPercent;
-        newHeight = - height * zoomPercent;
+        newWidth  = -width * zoomPercent;
+        newHeight = -height * zoomPercent;
     }
 
-    newWidth += width;
+    newWidth  += width;
     newHeight += height;
 
     x = centerX - newWidth / 2;
     y = centerY - newHeight / 2;
 
-    width = newWidth;
+    width  = newWidth;
     height = newHeight;
 
     // Set viewport
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp
index 8083bf9..0354df5 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportRangeSelector.cpp
@@ -1,23 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "scene2D/adaptor/ViewportRangeSelector.hpp"
+#include "scene2D/data/Viewport.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
 
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <scene2D/data/Viewport.hpp>
-#include <scene2D/data/ViewportMsg.hpp>
+#include <fwServices/macros.hpp>
 
 #include <QGraphicsRectItem>
 
-#include "scene2D/adaptor/ViewportRangeSelector.hpp"
-#include "scene2D/Scene2DGraphicsView.hpp"
-
 
-fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ViewportRangeSelector, ::scene2D::data::Viewport);
+fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ViewportRangeSelector,
+                         ::scene2D::data::Viewport);
 
 namespace scene2D
 {
@@ -25,10 +25,16 @@ namespace adaptor
 {
 
 
-ViewportRangeSelector::ViewportRangeSelector() throw()
-    : m_isLeftInteracting( false ), m_isRightInteracting( false ), m_isInteracting( false ), m_clickCatchRange( 15 )
+ViewportRangeSelector::ViewportRangeSelector() throw() :
+    m_shutter(nullptr),
+    m_isLeftInteracting( false ),
+    m_isRightInteracting( false ),
+    m_isInteracting( false ),
+    m_clickCatchRange( 15 ),
+    m_layer(nullptr),
+    m_initialX(0.f),
+    m_initialWidth(0.f)
 {
-//     this->handlingEventOff(); // This service no handling event
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -48,7 +54,7 @@ void ViewportRangeSelector::configuring() throw( ::fwTools::Failed)
     this->IAdaptor::configuring();
 
     const double viewportWidth = viewport->getWidth();
-    const double defaultWidth = 2 * viewportWidth / 4;
+    const double defaultWidth  = 2 * viewportWidth / 4;
 
     if (!m_configuration->getAttributeValue("initialWidth").empty())
     {
@@ -87,16 +93,14 @@ void ViewportRangeSelector::configuring() throw( ::fwTools::Failed)
 
 void ViewportRangeSelector::doStart() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     ::scene2D::data::Viewport::sptr viewport = this->getObject< ::scene2D::data::Viewport>();
 
     QRectF sceneRect = this->getScene2DRender()->getScene()->sceneRect();
 
     std::pair< double, double > pair = this->mapAdaptorToScene(
-            std::pair< double, double >( m_initialX, viewport->getHeight() ), m_xAxis, m_yAxis );
+        std::pair< double, double >( m_initialX, viewport->getHeight() ), m_xAxis, m_yAxis );
     m_shutter = new QGraphicsRectItem(
-            pair.first, 0, m_initialWidth * m_xAxis->getScale(), pair.second );
+        pair.first, 0, m_initialWidth * m_xAxis->getScale(), pair.second );
     m_shutter->setBrush( QBrush(QColor(127, 127, 127, 127)) );
     m_shutter->setPen( Qt::NoPen );
 
@@ -112,9 +116,12 @@ void ViewportRangeSelector::doStart() throw( ::fwTools::Failed)
     QRectF rect = m_shutter->rect();
     updateViewportFromShutter( rect.x(), rect.y(), rect.width(), rect.height() );
 
-    ::scene2D::data::ViewportMsg::sptr msg = ::scene2D::data::ViewportMsg::New();
-    msg->addEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
-    ::fwServices::IEditionService::notify( this->getSptr(), viewport, msg );
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = viewport->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -133,13 +140,6 @@ void ViewportRangeSelector::doUpdate() throw( ::fwTools::Failed)
 
 //---------------------------------------------------------------------------------------------------------------
 
-void ViewportRangeSelector::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//---------------------------------------------------------------------------------------------------------------
-
 void ViewportRangeSelector::doSwap() throw( ::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
@@ -149,8 +149,6 @@ void ViewportRangeSelector::doSwap() throw( ::fwTools::Failed)
 
 void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _event )
 {
-    SLM_TRACE_FUNC();
-
     // Event coordinates in scene
     ::scene2D::data::Coord coord;
     coord = this->getScene2DRender()->mapToScene( _event->getCoord() );
@@ -158,13 +156,13 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
     // Shutter coordinates in scene
     std::pair< double, double > shutterCoordPair;
     shutterCoordPair = this->mapAdaptorToScene(
-            std::pair< double, double >( m_shutter->rect().x(), m_shutter->rect().y() ), m_xAxis, m_yAxis);
+        std::pair< double, double >( m_shutter->rect().x(), m_shutter->rect().y() ), m_xAxis, m_yAxis);
     double shutterWidth = m_shutter->rect().width() * m_xAxis->getScale();
 
     QRectF sceneRect = this->getScene2DRender()->getScene()->sceneRect();
 
-    bool onShutterLeft = mouseOnShutterLeft( coord );
-    bool onShutterRight = mouseOnShutterRight( coord );
+    bool onShutterLeft   = mouseOnShutterLeft( coord );
+    bool onShutterRight  = mouseOnShutterRight( coord );
     bool onShutterMiddle = mouseOnShutterMiddle( coord );
 
     QRectF rect = m_shutter->rect();
@@ -184,7 +182,7 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
             this->getScene2DRender()->getView()->setCursor( Qt::ClosedHandCursor );
 
             // Interaction when clicking on the center of the shutter
-            m_isInteracting = true;
+            m_isInteracting  = true;
             m_dragStartPoint = coord;
             m_dragStartShutterPos.setX( shutterCoordPair.first );
             m_dragStartShutterPos.setY( shutterCoordPair.second );
@@ -192,8 +190,8 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
     }
     else if( _event->getType() == ::scene2D::data::Event::MouseButtonRelease )
     {
-        m_isInteracting = false;
-        m_isLeftInteracting = false;
+        m_isInteracting      = false;
+        m_isLeftInteracting  = false;
         m_isRightInteracting = false;
 
         // Reset cursor
@@ -253,7 +251,7 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
         }
         else if( m_isRightInteracting )
         {
-            double newWidth = coord.getX() - shutterCoordPair.first;
+            double newWidth        = coord.getX() - shutterCoordPair.first;
             double shutterRightPos = abs(sceneRect.x()) + shutterCoordPair.first + newWidth;
 
             if( newWidth > m_clickCatchRange ) // Shutter's width must be greater than the allowed picking range
@@ -276,8 +274,8 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
         }
         else if( m_isInteracting )
         {
-            double offset = coord.getX() - m_dragStartPoint.getX();
-            double newX = m_dragStartShutterPos.getX() + offset;
+            double offset          = coord.getX() - m_dragStartPoint.getX();
+            double newX            = m_dragStartShutterPos.getX() + offset;
             double shutterRightPos = abs(sceneRect.x()) + newX + shutterWidth;
 
             if( newX >= sceneRect.x() && shutterRightPos < sceneRect.width() )
@@ -306,9 +304,14 @@ void ViewportRangeSelector::processInteraction( ::scene2D::data::Event::sptr _ev
 
             // Update object
             updateViewportFromShutter( rect.x(), rect.y(), rect.width(), rect.height() );
-            ::scene2D::data::ViewportMsg::sptr msg = ::scene2D::data::ViewportMsg::New();
-            msg->addEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
-            ::fwServices::IEditionService::notify( this->getSptr(), this->getObject< ::scene2D::data::Viewport>(), msg );
+
+            ::fwData::Object::ModifiedSignalType::sptr sig;
+            sig = this->getObject< ::scene2D::data::Viewport>()->signal< ::fwData::Object::ModifiedSignalType >(
+                ::fwData::Object::s_MODIFIED_SIG);
+            {
+                ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+                sig->asyncEmit();
+            }
         }
     }
 }
@@ -335,10 +338,11 @@ void ViewportRangeSelector::updateViewportFromShutter( double _x, double _y, dou
 bool ViewportRangeSelector::mouseOnShutterMiddle( ::scene2D::data::Coord _coord)
 {
     Point2DType shutterCoordPair;
-    shutterCoordPair = this->mapAdaptorToScene( Point2DType( m_shutter->rect().x(), m_shutter->rect().y() ), m_xAxis, m_yAxis );
+    shutterCoordPair = this->mapAdaptorToScene( Point2DType( m_shutter->rect().x(),
+                                                             m_shutter->rect().y() ), m_xAxis, m_yAxis );
 
     return ( _coord.getX() > m_shutter->rect().x() + m_clickCatchRange )
-        && ( _coord.getX() < m_shutter->rect().x() + m_shutter->rect().width() - m_clickCatchRange );
+           && ( _coord.getX() < m_shutter->rect().x() + m_shutter->rect().width() - m_clickCatchRange );
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -346,10 +350,12 @@ bool ViewportRangeSelector::mouseOnShutterMiddle( ::scene2D::data::Coord _coord)
 bool ViewportRangeSelector::mouseOnShutterLeft( ::scene2D::data::Coord _coord)
 {
     std::pair< double, double > shutterCoordPair;
-    shutterCoordPair = this->mapAdaptorToScene( std::pair< double, double >( m_shutter->rect().x(), m_shutter->rect().y() ), m_xAxis, m_yAxis );
+    shutterCoordPair =
+        this->mapAdaptorToScene( std::pair< double, double >( m_shutter->rect().x(),
+                                                              m_shutter->rect().y() ), m_xAxis, m_yAxis );
 
     return ( _coord.getX() >= shutterCoordPair.first - m_clickCatchRange )
-        && ( _coord.getX() <= shutterCoordPair.first + m_clickCatchRange );
+           && ( _coord.getX() <= shutterCoordPair.first + m_clickCatchRange );
 }
 
 //---------------------------------------------------------------------------------------------------------------
@@ -357,12 +363,14 @@ bool ViewportRangeSelector::mouseOnShutterLeft( ::scene2D::data::Coord _coord)
 bool ViewportRangeSelector::mouseOnShutterRight( ::scene2D::data::Coord _coord)
 {
     std::pair< double, double > shutterCoordPair;
-    shutterCoordPair = this->mapAdaptorToScene( std::pair< double, double >( m_shutter->rect().x(), m_shutter->rect().y() ), m_xAxis, m_yAxis );
+    shutterCoordPair =
+        this->mapAdaptorToScene( std::pair< double, double >( m_shutter->rect().x(),
+                                                              m_shutter->rect().y() ), m_xAxis, m_yAxis );
 
     double shutterRightPos = shutterCoordPair.first + m_shutter->rect().width() * m_xAxis->getScale();
 
     return ( _coord.getX() >=  shutterRightPos - m_clickCatchRange )
-        && ( _coord.getX() <=  shutterRightPos + m_clickCatchRange );
+           && ( _coord.getX() <=  shutterRightPos + m_clickCatchRange );
 }
 
 //---------------------------------------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportUpdater.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportUpdater.cpp
index 36a2a35..ff4110a 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportUpdater.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/adaptor/ViewportUpdater.cpp
@@ -1,17 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
-
-#include <scene2D/Scene2DGraphicsView.hpp>
-
-#include <scene2D/data/Viewport.hpp>
-#include <scene2D/data/ViewportMsg.hpp>
-
 #include "scene2D/adaptor/ViewportUpdater.hpp"
+#include "scene2D/data/Viewport.hpp"
+#include "scene2D/Scene2DGraphicsView.hpp"
+
+#include <fwServices/macros.hpp>
 
 
 fwServicesRegisterMacro( ::scene2D::adaptor::IAdaptor, ::scene2D::adaptor::ViewportUpdater, ::scene2D::data::Viewport);
@@ -24,7 +21,6 @@ namespace adaptor
 
 ViewportUpdater::ViewportUpdater() throw()
 {
-//    addNewHandledEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED);
 }
 
 //-----------------------------------------------------------------------------
@@ -37,8 +33,6 @@ ViewportUpdater::~ViewportUpdater() throw()
 
 void ViewportUpdater::configuring() throw( ::fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     this->IAdaptor::configuring();
 
     doUpdate();
@@ -64,14 +58,14 @@ void ViewportUpdater::doUpdate() throw( ::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    ::scene2D::data::Viewport::sptr sceneViewport = this->getScene2DRender()->getViewport();
+    ::scene2D::data::Viewport::sptr sceneViewport  = this->getScene2DRender()->getViewport();
     ::scene2D::data::Viewport::sptr viewportObject = this->getObject< ::scene2D::data::Viewport>();
 
     std::pair< double, double > pairCoord = this->mapAdaptorToScene(
-            std::pair< double, double >( viewportObject->getX(), viewportObject->getY() ), m_xAxis, m_yAxis );
+        std::pair< double, double >( viewportObject->getX(), viewportObject->getY() ), m_xAxis, m_yAxis );
 
     std::pair< double, double > pairSize = this->mapAdaptorToScene(
-            std::pair< double, double >( viewportObject->getWidth(), viewportObject->getHeight() ), m_xAxis, m_yAxis );
+        std::pair< double, double >( viewportObject->getWidth(), viewportObject->getHeight() ), m_xAxis, m_yAxis );
 
     sceneViewport->setX( pairCoord.first );
     sceneViewport->setY( pairCoord.second );
@@ -83,18 +77,6 @@ void ViewportUpdater::doUpdate() throw( ::fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-void ViewportUpdater::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw( ::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if( _msg->hasEvent( ::scene2D::data::ViewportMsg::VALUE_IS_MODIFIED) )
-    {
-        doUpdate();
-    }
-}
-
-//-----------------------------------------------------------------------------
-
 void ViewportUpdater::doSwap() throw( ::fwTools::Failed)
 {
 }
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/data/Axis.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/data/Axis.cpp
index 9a536e1..625c3cd 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/data/Axis.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/data/Axis.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
+#include "scene2D/data/Axis.hpp"
 
 #include <fwData/registry/macros.hpp>
 #include <fwData/Exception.hpp>
 
-#include "scene2D/data/Axis.hpp"
+#include <fwCore/base.hpp>
 
 namespace scene2D
 {
@@ -18,11 +18,12 @@ namespace data
 
 fwDataRegisterMacro( ::scene2D::data::Axis );
 
-Axis::Axis( ::fwData::Object::Key key )
-: m_origin (0),
-  m_scale (1),
-  m_scaleType (LINEAR)
-{}
+Axis::Axis( ::fwData::Object::Key key ) :
+    m_origin(0.f),
+    m_scale(1.f),
+    m_scaleType(LINEAR)
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -36,12 +37,12 @@ void Axis::shallowCopy(const ::fwData::Object::csptr &_source )
 {
     Axis::csptr other = Axis::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
-    m_origin = other->m_origin;
-    m_scale = other->m_scale;
+    m_origin    = other->m_origin;
+    m_scale     = other->m_scale;
     m_scaleType = other->m_scaleType;
 }
 
@@ -51,16 +52,18 @@ void Axis::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCacheT
 {
     Axis::csptr other = Axis::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_origin = other->m_origin;
-    m_scale = other->m_scale;
+    m_origin    = other->m_origin;
+    m_scale     = other->m_scale;
     m_scaleType = other->m_scaleType;
 }
 
-float Axis::getOrigin()
+//-----------------------------------------------------------------------------
+
+float Axis::getOrigin() const
 {
     return m_origin;
 }
@@ -74,7 +77,7 @@ void Axis::setOrigin (float _origin)
 
 //-----------------------------------------------------------------------------
 
-float Axis::getScale()
+float Axis::getScale() const
 {
     return m_scale;
 }
@@ -88,14 +91,14 @@ void Axis::setScale (float _scale)
 
 //-----------------------------------------------------------------------------
 
-std::string Axis::getScaleType()
+std::string Axis::getScaleType() const
 {
-    return (m_scaleType == LINEAR)?"LINEAR":"LOG";
+    return (m_scaleType == LINEAR) ? "LINEAR" : "LOG";
 }
 
 //-----------------------------------------------------------------------------
 
-void Axis::setScaleType (std::string _scaleType)
+void Axis::setScaleType (const std::string& _scaleType)
 {
     if (_scaleType == "LINEAR")
     {
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/data/Event.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/data/Event.cpp
index 8a98342..abcbd1c 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/data/Event.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/data/Event.cpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "scene2D/data/Event.hpp"
+
 #include <fwCore/base.hpp>
 
 #include <fwData/registry/macros.hpp>
 #include <fwData/Exception.hpp>
 
-#include "scene2D/data/Event.hpp"
-
 namespace scene2D
 {
 namespace data
@@ -22,18 +22,20 @@ fwDataRegisterMacro( ::scene2D::data::Event );
 
 //-----------------------------------------------------------------------------
 
-Event::Event(::fwData::Object::Key key)
-:   m_type(NoType),
+Event::Event(::fwData::Object::Key key) :
+    m_type(NoType),
     m_button(NoButton),
     m_modifier(NoModifier),
     m_accepted(false),
     m_key(Qt::Key_unknown)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 Event::~Event()
-{}
+{
+}
 
 
 //------------------------------------------------------------------------------
@@ -42,19 +44,19 @@ void Event::shallowCopy(const ::fwData::Object::csptr &_source )
 {
     Event::csptr other = Event::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
     Coord m_coord;
     Size m_size;
     Size m_oldSize;
 
-    m_type = other->m_type;
-    m_button = other->m_button;
+    m_type     = other->m_type;
+    m_button   = other->m_button;
     m_modifier = other->m_modifier;
     m_accepted = other->m_accepted;
-    m_key = other->m_key;
+    m_key      = other->m_key;
     m_coord.setX(other->m_coord.getX());
     m_coord.setY(other->m_coord.getY());
     m_size.setHeight(other->m_size.getHeight());
@@ -69,15 +71,15 @@ void Event::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCache
 {
     Event::csptr other = Event::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_type = other->m_type;
-    m_button = other->m_button;
+    m_type     = other->m_type;
+    m_button   = other->m_button;
     m_modifier = other->m_modifier;
     m_accepted = other->m_accepted;
-    m_key = other->m_key;
+    m_key      = other->m_key;
     m_coord.setX(other->m_coord.getX());
     m_coord.setY(other->m_coord.getY());
     m_size.setHeight(other->m_size.getHeight());
@@ -85,10 +87,9 @@ void Event::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCache
     m_oldSize.setHeight(other->m_oldSize.getHeight());
     m_oldSize.setWidth(other->m_oldSize.getWidth());
 }
+
 //-----------------------------------------------------------------------------
 
 } // namespace data
 } // namespace scene2D
 
-
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/data/InitQtPen.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/data/InitQtPen.cpp
index 75a4692..bce63de 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/data/InitQtPen.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/data/InitQtPen.cpp
@@ -1,12 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "scene2D/data/InitQtPen.hpp"
+
 #include <fwCore/base.hpp>
 
-#include "scene2D/data/InitQtPen.hpp"
 
 namespace scene2D
 {
@@ -27,6 +28,7 @@ void InitQtPen::setPenColor(QPen & _pen, std::string _color)
         // Default value: black (if the color id cannot be parsed)
         _pen.setColor(Qt::GlobalColor(Qt::black));
     }
+    _pen.setCosmetic(true);
 }
 
 //---------------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/data/Viewport.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/data/Viewport.cpp
index 817a39d..75859a7 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/data/Viewport.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/data/Viewport.cpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "scene2D/data/Viewport.hpp"
+
 #include <fwCore/base.hpp>
 #include <fwData/registry/macros.hpp>
 #include <fwData/Exception.hpp>
 
-#include "scene2D/data/Viewport.hpp"
 
 namespace scene2D
 {
@@ -19,12 +20,13 @@ fwDataRegisterMacro( ::scene2D::data::Viewport );
 
 //-----------------------------------------------------------------------------
 
-Viewport::Viewport(::fwData::Object::Key key)
-: m_x (200),
-  m_y (200),
-  m_width (400),
-  m_height (400)
-{}
+Viewport::Viewport(::fwData::Object::Key key) :
+    m_x (200.f),
+    m_y (200.f),
+    m_width (400.f),
+    m_height (400.f)
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -38,13 +40,13 @@ void Viewport::shallowCopy(const ::fwData::Object::csptr &_source )
 {
     Viewport::csptr other = Viewport::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
-    m_x = other->m_x;
-    m_y = other->m_y;
-    m_width = other->m_width;
+    m_x      = other->m_x;
+    m_y      = other->m_y;
+    m_width  = other->m_width;
     m_height = other->m_height;
 }
 
@@ -54,19 +56,19 @@ void Viewport::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCa
 {
     Viewport::csptr other = Viewport::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_x = other->m_x;
-    m_y = other->m_y;
-    m_width = other->m_width;
+    m_x      = other->m_x;
+    m_y      = other->m_y;
+    m_width  = other->m_width;
     m_height = other->m_height;
 }
 
 //------------------------------------------------------------------------------
 
-float Viewport::getX()
+float Viewport::getX() const
 {
     return m_x;
 }
@@ -80,7 +82,7 @@ void Viewport::setX (float _x)
 
 //-----------------------------------------------------------------------------
 
-float Viewport::getY()
+float Viewport::getY() const
 {
     return m_y;
 }
@@ -94,7 +96,7 @@ void Viewport::setY (float _y)
 
 //-----------------------------------------------------------------------------
 
-float Viewport::getWidth()
+float Viewport::getWidth() const
 {
     return m_width;
 }
@@ -108,7 +110,7 @@ void Viewport::setWidth (float _width)
 
 //-----------------------------------------------------------------------------
 
-float Viewport::getHeight()
+float Viewport::getHeight() const
 {
     return m_height;
 }
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/data/ViewportMsg.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/data/ViewportMsg.cpp
deleted file mode 100644
index 02dad11..0000000
--- a/Bundles/LeafVisu/scene2D/src/scene2D/data/ViewportMsg.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "scene2D/data/ViewportMsg.hpp"
-
-
-fwServicesMessageRegisterMacro( ::scene2D::data::ViewportMsg );
-
-namespace scene2D
-{
-namespace data
-{
-
-
-std::string ViewportMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-ViewportMsg::ViewportMsg(::fwServices::ObjectMsg::Key key)
-{
-}
-
-ViewportMsg::~ViewportMsg()
-{
-}
-
-
-}   // namespace data
-}   // namespace scene2D
-
diff --git a/Bundles/LeafVisu/scene2D/src/scene2D/processing/SComputeHistogram.cpp b/Bundles/LeafVisu/scene2D/src/scene2D/processing/SComputeHistogram.cpp
index 8d7fd96..342855e 100644
--- a/Bundles/LeafVisu/scene2D/src/scene2D/processing/SComputeHistogram.cpp
+++ b/Bundles/LeafVisu/scene2D/src/scene2D/processing/SComputeHistogram.cpp
@@ -1,34 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- *
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/lexical_cast.hpp>
 
-#include <fwData/Image.hpp>
+#include "scene2D/processing/SComputeHistogram.hpp"
+
+#include "scene2D/processing/ComputeHistogramFunctor.hxx"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
 #include <fwData/Histogram.hpp>
-#include <fwData/mt/ObjectWriteLock.hpp>
+#include <fwData/Image.hpp>
 #include <fwData/mt/ObjectReadLock.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/HistogramMsg.hpp>
+#include <fwServices/macros.hpp>
 
-#include "scene2D/processing/SComputeHistogram.hpp"
-#include "scene2D/processing/ComputeHistogramFunctor.hxx"
+#include <boost/lexical_cast.hpp>
 
-fwServicesRegisterMacro( ::fwServices::IController , ::scene2D::processing::SComputeHistogram, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwServices::IController, ::scene2D::processing::SComputeHistogram, ::fwData::Image );
 
 namespace scene2D
 {
 namespace processing
 {
 
-SComputeHistogram::SComputeHistogram() throw() :
-    m_binsWidth(1.0)
+SComputeHistogram::SComputeHistogram() throw() : m_binsWidth(1.0f)
 {
 }
 
@@ -42,11 +43,14 @@ SComputeHistogram::~SComputeHistogram() throw()
 
 void SComputeHistogram::configuring() throw ( ::fwTools::Failed )
 {
-    std::vector < ::fwRuntime::ConfigurationElement::sptr > cfg = m_configuration->find("histogramId");
-    SLM_ASSERT("Missing tag 'histogramId'", !cfg.empty());
+    if(!this->isVersion2())
+    {
+        std::vector < ::fwRuntime::ConfigurationElement::sptr > cfg = m_configuration->find("histogramId");
+        SLM_ASSERT("Missing tag 'histogramId'", !cfg.empty());
 
-    m_histogramId = cfg.front()->getValue();
-    SLM_ASSERT("'histogramId' must not be empty", !m_histogramId.empty());
+        m_histogramId = cfg.front()->getValue();
+        SLM_ASSERT("'histogramId' must not be empty", !m_histogramId.empty());
+    }
 
     std::vector < ::fwRuntime::ConfigurationElement::sptr > binsWidthCfg = m_configuration->find("binsWidth");
     SLM_ASSERT("Missing tag 'binsWidth'", !binsWidthCfg.empty());
@@ -67,39 +71,29 @@ void SComputeHistogram::starting() throw ( ::fwTools::Failed )
 
 void SComputeHistogram::updating() throw ( ::fwTools::Failed )
 {
-    ::fwData::Image::sptr image =  this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     ::fwData::mt::ObjectReadLock imgLock(image);
 
-    if(::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    if(::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
     {
         ::fwData::Histogram::sptr histogram = this->getHistogram();
 
         ::fwData::mt::ObjectWriteLock lock(histogram);
 
         ComputeHistogramFunctor::Parameter param;
-        param.image = image;
+        param.image     = image;
         param.histogram = histogram;
         param.binsWidth = m_binsWidth;
 
         ::fwTools::DynamicType type = image->getPixelType();
-        ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , ComputeHistogramFunctor >::invoke( type , param );
+        ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, ComputeHistogramFunctor >::invoke( type, param );
 
-        ::fwComEd::HistogramMsg::sptr msg = ::fwComEd::HistogramMsg::New();
-        msg->addEvent(::fwComEd::HistogramMsg::VALUE_IS_MODIFIED);
-        ::fwServices::IEditionService::notify(this->getSptr(), histogram, msg);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void SComputeHistogram::receiving( fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-     if(_msg->hasEvent(::fwComEd::ImageMsg::NEW_IMAGE) ||
-        _msg->hasEvent(::fwComEd::ImageMsg::BUFFER) ||
-        _msg->hasEvent(::fwComEd::ImageMsg::MODIFIED))
-    {
-        this->updating();
+        auto sig = histogram->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
     }
 }
 
@@ -120,15 +114,45 @@ void SComputeHistogram::stopping() throw ( ::fwTools::Failed )
 
 ::fwData::Histogram::sptr SComputeHistogram::getHistogram()
 {
-    SLM_ASSERT("Object " << m_histogramId << " doesn't exist", ::fwTools::fwID::exist(m_histogramId));
+    ::fwData::Histogram::sptr histogram;
+    if(!this->isVersion2())
+    {
+        SLM_ASSERT("Object " << m_histogramId << " doesn't exist", ::fwTools::fwID::exist(m_histogramId));
 
-    ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_histogramId);
-    ::fwData::Histogram::sptr histogram = ::fwData::Histogram::dynamicCast(obj);
-    SLM_ASSERT("Object " << m_histogramId << " is not a '::fwData::Histogram'", histogram);
+        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(m_histogramId);
+        histogram                   = ::fwData::Histogram::dynamicCast(obj);
+        SLM_ASSERT("Object " << m_histogramId << " is not a '::fwData::Histogram'", histogram);
+    }
+    else
+    {
+        histogram = this->getInOut< ::fwData::Histogram>("histogram");
+    }
 
     return histogram;
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SComputeHistogram::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap SComputeHistogram::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( "image", ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT );
+    connections.push( "image", ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT );
+
+    return connections;
+}
+
 //-----------------------------------------------------------------------------
 
 } // namespace processing
diff --git a/Bundles/LeafVisu/scene2D/test/CMakeLists.txt b/Bundles/LeafVisu/scene2D/test/CMakeLists.txt
index b23b5b0..7db1a65 100644
--- a/Bundles/LeafVisu/scene2D/test/CMakeLists.txt
+++ b/Bundles/LeafVisu/scene2D/test/CMakeLists.txt
@@ -1,8 +1,18 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+find_package(Boost COMPONENTS log system thread filesystem date_time REQUIRED)
+
+fwInclude(
+    ${CPPUNIT_INCLUDE_DIR}
+    ${Boost_INCLUDE_DIRS}
+)
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_LOG_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_DATE_TIME_LIBRARY}
+)
+
 
diff --git a/Bundles/LeafVisu/scene2D/test/Properties.cmake b/Bundles/LeafVisu/scene2D/test/Properties.cmake
index db2de1a..62a362c 100644
--- a/Bundles/LeafVisu/scene2D/test/Properties.cmake
+++ b/Bundles/LeafVisu/scene2D/test/Properties.cmake
@@ -2,7 +2,7 @@
 set( NAME scene2DTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwTest fwData )
+set( DEPENDENCIES fwTest fwData fwServices fwRuntime fwTools)
 set( REQUIREMENTS dataReg servicesReg scene2D )
 
 set(CPPUNITTEST_OPTIONS BUNDLE scene2D WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/Bundles/LeafVisu/scene2D/test/cppunit.options b/Bundles/LeafVisu/scene2D/test/cppunit.options
deleted file mode 100644
index ccd79e7..0000000
--- a/Bundles/LeafVisu/scene2D/test/cppunit.options
+++ /dev/null
@@ -1,13 +0,0 @@
-CLASSTEST=[
-          'ProcessingTest',
-          ]
-
-USE = ['boost']
-LIB = ['fwData_0-1','fwTest_0-1']
-
-BUNDLES = []
-REQUIREMENTS = ['dataReg_0-1','servicesReg_0-1','scene2D_0-1']
-
-CONSOLE = 'yes'
-
-#LOGLEVEL='trace'
diff --git a/Bundles/LeafVisu/scene2D/test/tu/include/ProcessingTest.hpp b/Bundles/LeafVisu/scene2D/test/tu/include/ProcessingTest.hpp
index 554ca8f..cb6343d 100644
--- a/Bundles/LeafVisu/scene2D/test/tu/include/ProcessingTest.hpp
+++ b/Bundles/LeafVisu/scene2D/test/tu/include/ProcessingTest.hpp
@@ -1,3 +1,8 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #ifndef __SCENE2D_UT_PROCESSINGTEST_HPP__
 #define __SCENE2D_UT_PROCESSINGTEST_HPP__
@@ -11,9 +16,9 @@ namespace ut
 
 class ProcessingTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ProcessingTest );
-    CPPUNIT_TEST( histogramTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ProcessingTest );
+CPPUNIT_TEST( histogramTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
diff --git a/Bundles/LeafVisu/scene2D/test/tu/src/ProcessingTest.cpp b/Bundles/LeafVisu/scene2D/test/tu/src/ProcessingTest.cpp
index 5fdcbbe..3503ed0 100644
--- a/Bundles/LeafVisu/scene2D/test/tu/src/ProcessingTest.cpp
+++ b/Bundles/LeafVisu/scene2D/test/tu/src/ProcessingTest.cpp
@@ -1,17 +1,23 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <fwTest/Exception.hpp>
+#include "ProcessingTest.hpp"
 
-#include <fwData/Image.hpp>
 #include <fwData/Histogram.hpp>
+#include <fwData/Image.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwDataTools/helper/Array.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
 
-#include "ProcessingTest.hpp"
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwTest/Exception.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::scene2D::ut::ProcessingTest );
@@ -45,43 +51,43 @@ void ProcessingTest::histogramTest()
     activeWorkers->initRegistry();
 
     typedef signed short ImageType;
-    const int sizeX = 50;
-    const int sizeY = 50;
-    const int sizeZ = 50;
+    const int sizeX     = 50;
+    const int sizeY     = 50;
+    const int sizeZ     = 50;
     const int imageSize = sizeX * sizeY * sizeZ;
 
     std::string implementation = "::scene2D::processing::SComputeHistogram";
 
     // Configure data hirearchy
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    ::fwData::Image::sptr image         = ::fwData::Image::New();
     ::fwData::Histogram::sptr histogram = ::fwData::Histogram::New();
 
     // Create image.
     image->allocate(sizeX, sizeY,  sizeZ, ::fwTools::Type("int16"));
     ::fwData::Array::sptr array = image->getDataArray();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
-    ImageType* itr = arrayHelper.begin< ImageType >();
+    ImageType* itr    = arrayHelper.begin< ImageType >();
     ImageType* itrEnd = arrayHelper.end< ImageType >();
 
-    int count=0;
+    int count = 0;
     for(; itr!= itrEnd; ++itr)
     {
         if(count < imageSize/4)
         {
-            *itr =10;
+            *itr = 10;
         }
         else if( count < imageSize/2)
         {
-            *itr =20;
+            *itr = 20;
         }
         else if( count < 3*imageSize/4)
         {
-            *itr =30;
+            *itr = 30;
         }
         else if( count < imageSize)
         {
-            *itr =40;
+            *itr = 40;
         }
         ++count;
     }
@@ -92,7 +98,7 @@ void ProcessingTest::histogramTest()
     CPPUNIT_ASSERT(srv);
 
     // Register service.
-    ::fwServices::OSR::registerService( image , srv );
+    ::fwServices::OSR::registerService( image, srv );
 
     ::fwRuntime::EConfigurationElement::sptr srvCfg = ::fwRuntime::EConfigurationElement::New("service");
 
diff --git a/Bundles/LeafVisu/visuVTK/CMakeLists.txt b/Bundles/LeafVisu/visuVTK/CMakeLists.txt
index 728f60c..15cd4c1 100644
--- a/Bundles/LeafVisu/visuVTK/CMakeLists.txt
+++ b/Bundles/LeafVisu/visuVTK/CMakeLists.txt
@@ -1,8 +1 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-)
-
-
-
-fwReq(visu)
diff --git a/Bundles/LeafVisu/visuVTK/COPYING b/Bundles/LeafVisu/visuVTK/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/visuVTK/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/visuVTK/COPYING.LESSER b/Bundles/LeafVisu/visuVTK/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/visuVTK/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/visuVTK/Properties.cmake b/Bundles/LeafVisu/visuVTK/Properties.cmake
index c359989..d6c1e0f 100644
--- a/Bundles/LeafVisu/visuVTK/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTK/Properties.cmake
@@ -2,6 +2,11 @@
 set( NAME visuVTK )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwRender fwRenderVTK fwRuntime fwServices )
-set( REQUIREMENTS visu )
-
+set( DEPENDENCIES
+    fwCore
+    fwRender
+    fwRenderVTK
+    fwRuntime
+    fwServices
+)
+set( REQUIREMENTS )
diff --git a/Bundles/LeafVisu/visuVTK/bin/build.options b/Bundles/LeafVisu/visuVTK/bin/build.options
deleted file mode 100644
index 5716dc5..0000000
--- a/Bundles/LeafVisu/visuVTK/bin/build.options
+++ /dev/null
@@ -1,15 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-USE     = ['boost']
-LIB     = [
-        'fwCore_0-1',
-        'fwTools_0-1',
-        'fwRuntime_0-3',
-        'fwData_0-1',
-        'fwServices_0-1',
-        'fwRenderVTK_0-1',
-        'fwRender_0-1'
-        ]
-REQUIREMENTS = [
-                'visu_0-1',
-                ]
diff --git a/Bundles/LeafVisu/visuVTK/include/visuVTK/Namespace.hpp b/Bundles/LeafVisu/visuVTK/include/visuVTK/Namespace.hpp
index 814fe5b..1b22070 100644
--- a/Bundles/LeafVisu/visuVTK/include/visuVTK/Namespace.hpp
+++ b/Bundles/LeafVisu/visuVTK/include/visuVTK/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIVISUVTKNAMESPACE_HPP_
-#define UIVISUVTKNAMESPACE_HPP_
+#ifndef __VISUVTK_NAMESPACE_HPP__
+#define __VISUVTK_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace visuVTK supplies a  default plugin implementation for the visuVTK bundle.
  * @namespace   visuVTK
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace visuVTK
 {
 }
-#endif /* UIVISUVTKNAMESPACE_HPP_ */
+#endif /* __VISUVTK_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/visuVTK/include/visuVTK/Plugin.hpp b/Bundles/LeafVisu/visuVTK/include/visuVTK/Plugin.hpp
index b37dfa9..fb8f627 100644
--- a/Bundles/LeafVisu/visuVTK/include/visuVTK/Plugin.hpp
+++ b/Bundles/LeafVisu/visuVTK/include/visuVTK/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTK_PLUGIN_HPP_
-#define _VISUVTK_PLUGIN_HPP_
+#ifndef __VISUVTK_PLUGIN_HPP__
+#define __VISUVTK_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -16,7 +16,7 @@ namespace visuVTK
 /**
  * @brief   This class is started when the bundles is loaded.
  * @class   Plugin
- * 
+ *
  * @date    2009.
  */
 struct VISUVTK_CLASS_API Plugin : public ::fwRuntime::Plugin
@@ -25,15 +25,15 @@ struct VISUVTK_CLASS_API Plugin : public ::fwRuntime::Plugin
      * @brief   destructor
      */
     ~Plugin() throw();
-    
+
     // Overrides
     VISUVTK_API void start() throw(::fwRuntime::RuntimeException);
 
-    // Overrides    
+    // Overrides
     VISUVTK_API void stop() throw();
-    
+
 };
 
 } // namespace visuVTK
 
-#endif //_VISUVTK_PLUGIN_HPP_
+#endif //__VISUVTK_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/visuVTK/include/visuVTK/config.hpp b/Bundles/LeafVisu/visuVTK/include/visuVTK/config.hpp
deleted file mode 100644
index 750067e..0000000
--- a/Bundles/LeafVisu/visuVTK/include/visuVTK/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VISUVTK_CONFIG_HPP_
-#define VISUVTK_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VISUVTK_EXPORTS
-    #define VISUVTK_API __declspec(dllexport)
-    #else
-    #define VISUVTK_API __declspec(dllimport)
-    #endif
-
-    #define VISUVTK_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VISUVTK_EXPORTS
-    #define VISUVTK_API __attribute__ ((visibility("default")))
-    #define VISUVTK_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VISUVTK_API __attribute__ ((visibility("hidden")))
-    #define VISUVTK_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VISUVTK_API
-    #define VISUVTK_CLASS_API
-
-#endif
-
-#endif //VISUVTK_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/visuVTK/rc/plugin.xml b/Bundles/LeafVisu/visuVTK/rc/plugin.xml
index 2f8b312..c8300dd 100644
--- a/Bundles/LeafVisu/visuVTK/rc/plugin.xml
+++ b/Bundles/LeafVisu/visuVTK/rc/plugin.xml
@@ -1,18 +1,14 @@
-<plugin id="visuVTK" class="visuVTK::Plugin" >
+<plugin id="visuVTK" class="visuVTK::Plugin" version="@DASH_VERSION@" >
 
     <library name="visuVTK" />
 
     <requirement id="dataReg"/>
     <requirement id="servicesReg"/>
-    <requirement id="visu" />
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRender::IRender</type>
-        <service>::fwRenderVTK::VtkRenderService</service>
+        <service>::fwRenderVTK::SRender</service>
         <object>::fwData::Composite</object>
     </extension>
 
 </plugin>
-
-
-
diff --git a/Bundles/LeafVisu/visuVTK/rc/visuVTKCfg.xsd b/Bundles/LeafVisu/visuVTK/rc/visuVTKCfg.xsd
deleted file mode 100644
index 3151f68..0000000
--- a/Bundles/LeafVisu/visuVTK/rc/visuVTKCfg.xsd
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?> 
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-<xs:element name="extension" type="ExtensionType"/>
-
-<xs:complexType name="ExtensionType">
-  <xs:sequence>
-    <xs:element name="service" type="VisualizationServiceType" minOccurs="0" maxOccurs="unbounded" />
-  </xs:sequence>
-  <xs:anyAttribute processContents="skip" />
-</xs:complexType>
-
-<xs:complexType name="VisualizationServiceType">
-  <xs:sequence>
-    <xs:element name="service" type="DelegateType" minOccurs="0" maxOccurs="unbounded" />
-  </xs:sequence>
-  <xs:attribute name="clockRateMSeconds" type="xs:integer" />  
-</xs:complexType>
-
-<xs:complexType name="DelegateType">
-  <xs:attribute name="config" type="xs:string" use="required" />
-  <xs:attribute name="type" type="xs:string" use="required" />
-</xs:complexType>
-
-</xs:schema>
\ No newline at end of file
diff --git a/Bundles/LeafVisu/visuVTK/src/visuVTK/Plugin.cpp b/Bundles/LeafVisu/visuVTK/src/visuVTK/Plugin.cpp
index 2bfe77a..85a5f5f 100644
--- a/Bundles/LeafVisu/visuVTK/src/visuVTK/Plugin.cpp
+++ b/Bundles/LeafVisu/visuVTK/src/visuVTK/Plugin.cpp
@@ -1,20 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 
 #include <fwRender/IRender.hpp>
-#include <fwRenderVTK/VtkRenderService.hpp>
+#include <fwRenderVTK/SRender.hpp>
 #include <fwRenderVTK/vtk/Instantiator.hpp>
 
-#include <fwData/Composite.hpp>
-
 #include "visuVTK/Plugin.hpp"
 
 namespace visuVTK
@@ -24,7 +21,8 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt b/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt
index 07d3763..70a31c3 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt
+++ b/Bundles/LeafVisu/visuVTKAdaptor/CMakeLists.txt
@@ -1,22 +1,54 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCom
-    fwComEd
-    fwData
-    fwRenderVTK
-    fwRuntime
-    fwServices
-)
 
-find_package(Boost REQUIRED)
-find_package(VTK REQUIRED)
+if(NOT ANDROID)
+    find_package(VTK
+        COMPONENTS
+        REQUIRED
+        NO_MODULE
+    )
+    
+    # Just look one core module to get the version number
+    find_package(VTK COMPONENTS
+            vtkCommonCore
+            REQUIRED
+            NO_MODULE)
+            
+    if(${VTK_MAJOR_VERSION} STREQUAL "7")
+        find_package(VTK COMPONENTS
+            vtkInteractionWidgets
+            vtkInteractionStyle
+            vtkFiltersTexture
+            vtkRenderingOpenGL2
+            vtkIOLegacy
+        REQUIRED
+        NO_MODULE)
+    else()
+        find_package(VTK COMPONENTS
+            vtkInteractionWidgets
+            vtkInteractionStyle
+            vtkFiltersTexture
+            vtkRenderingOpenGL
+            vtkIOLegacy
+        REQUIRED
+        NO_MODULE)
+    endif()
+else()
+
+    find_package(VTK
+        COMPONENTS
+        vtkInteractionStyle
+        vtkFiltersTexture
+        vtkRenderingOpenGL2
+        vtkIOLegacy
+        REQUIRED
+        NO_MODULE
+    )
+endif()
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS}
-    )
+)
 fwLink(
-    ${Boost_LIBRARIES} 
-    vtkWidgets
-    )
+    ${VTK_LIBRARIES}
+)
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/COPYING b/Bundles/LeafVisu/visuVTKAdaptor/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/COPYING.LESSER b/Bundles/LeafVisu/visuVTKAdaptor/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake b/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake
index 13cde73..201865c 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTKAdaptor/Properties.cmake
@@ -2,6 +2,22 @@
 set( NAME visuVTKAdaptor )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCom fwComEd fwCore fwData fwDataCamp fwGui fwMath fwMedData fwRenderVTK fwRuntime fwServices fwTools fwVtkIO )
-set( REQUIREMENTS  )
-
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwDataCamp
+    fwGui
+    fwMath
+    fwMedData
+    fwRenderVTK
+    fwRuntime
+    fwServices
+    fwTools
+    fwVtkIO
+)
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    visuVTK
+)
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/bin/build.options b/Bundles/LeafVisu/visuVTKAdaptor/bin/build.options
deleted file mode 100644
index 217eefb..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/bin/build.options
+++ /dev/null
@@ -1,25 +0,0 @@
-# -*- coding: utf-8 -*-
-
-TYPE = 'bundle'
-VERSION = '0-1'
-USE = ['vtkWidgets', 'boost']
-LIB = [
-    'fwComEd_0-1',
-    'fwCore_0-1',
-    'fwData_0-1',
-    'fwDataCamp_0-1',
-    'fwMath_0-1',
-    'fwRenderVTK_0-1',
-    'fwRender_0-1',
-    'fwRuntime_0-3',
-    'fwServices_0-1',
-    'fwTools_0-1',
-    'fwVtkIO_0-1',
-    'fwGui_0-1',
-    'fwMedData_0-1',
-    ]
-
-DEF += [
-#        'SHOW_ID_LABELS'   ,
-       ]
-
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp
index da11534..3fb5a65 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Axes.hpp
@@ -1,52 +1,73 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_AXES_HPP_
-#define _VISUVTKADAPTOR_AXES_HPP_
+#ifndef __VISUVTKADAPTOR_AXES_HPP__
+#define __VISUVTKADAPTOR_AXES_HPP__
 
-// FW4SPL Includes
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-// Boost Includes
-#include <boost/logic/tribool.hpp>
+#ifndef ANDROID
 
 // Config include
 #include "visuVTKAdaptor/config.hpp"
 
+// FW4SPL Includes
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
 // VTK Includes
-#include <vtkAxesActor.h>
+#include <vtkSmartPointer.h>
+#include <fwRenderVTK/vtk/fwVtkAxesActor.hpp>
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Axes: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Render axes in the generic scene.
+ */
+class VISUVTKADAPTOR_CLASS_API Axes : public ::fwRenderVTK::IVtkAdaptorService
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Axes)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Axes)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Axes() throw();
     VISUVTKADAPTOR_API virtual ~Axes() throw();
 
-protected :
+    /**
+     * @name Slots API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_VISIBILITY_SLOT;
+    typedef ::fwCom::Slot<void (bool)> UpdateVisibilitySlotType;
+
+    /// Slot: update axes visibility (true = visible)
+    VISUVTKADAPTOR_API void updateVisibility ( bool isVisible );
+    /** @} */
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
     void buildPipeline();
 
-    vtkAxesActor * m_axesActor;
+    fwVtkAxesActor * m_axesActor;
     double m_length;
     bool m_labelOn;
+    vtkSmartPointer< vtkTransform> m_transformAxes;
+
+    ///X,Y and Z Labels
+    std::string m_xLabel;
+    std::string m_yLabel;
+    std::string m_zLabel;
 };
 
-} //namespace visuVTKAdaptor
+} // namespace visuVTKAdaptor
+
+#endif // ANDROID
 
-#endif // _VISUVTKADAPTOR_AXES_HPP_
+#endif // __VISUVTKADAPTOR_AXES_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp
index 0072165..b2ff28f 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/BoxWidget.hpp
@@ -1,11 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_BOXWIDGET_HPP_
-#define _VISUVTKADAPTOR_BOXWIDGET_HPP_
+#ifndef __VISUVTKADAPTOR_BOXWIDGET_HPP__
+#define __VISUVTKADAPTOR_BOXWIDGET_HPP__
+
+#ifndef ANDROID
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 #include "visuVTKAdaptor/config.hpp"
@@ -26,19 +28,18 @@ public:
 
     fwCoreServiceClassDefinitionsMacro( (BoxWidget)(::fwRenderVTK::IVtkAdaptorService) );
 
-    VISUVTKADAPTOR_API              BoxWidget() throw();
-    VISUVTKADAPTOR_API virtual     ~BoxWidget() throw();
+    VISUVTKADAPTOR_API BoxWidget() throw();
+    VISUVTKADAPTOR_API virtual ~BoxWidget() throw();
 
     VISUVTKADAPTOR_API void updateFromVtk();
 
 protected:
 
-    VISUVTKADAPTOR_API virtual void configuring() throw( ::fwTools::Failed );
+    VISUVTKADAPTOR_API virtual void doConfigure() throw( ::fwTools::Failed );
     VISUVTKADAPTOR_API virtual void doStart()     throw( ::fwTools::Failed );
     VISUVTKADAPTOR_API virtual void doStop()      throw( ::fwTools::Failed );
     VISUVTKADAPTOR_API virtual void doSwap()      throw( ::fwTools::Failed );
     VISUVTKADAPTOR_API virtual void doUpdate()    throw( ::fwTools::Failed );
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr msg ) throw( ::fwTools::Failed );
 
     vtkTransform* m_transform;
     WPTR(::visuVTKAdaptor::Transform) m_transformService;
@@ -54,4 +55,7 @@ private:
 
 } // namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_BOXWIDGET_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_BOXWIDGET_HPP__
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera.hpp
deleted file mode 100644
index adce4d7..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_CAMERA_HPP_
-#define _VISUVTKADAPTOR_CAMERA_HPP_
-
-#include <vector>
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
-
-
-namespace visuVTKAdaptor
-{
-
-
-class VISUVTKADAPTOR_CLASS_API Camera: public ::fwRenderVTK::IVtkAdaptorService
-{
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (Camera)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    VISUVTKADAPTOR_API Camera() throw();
-
-    VISUVTKADAPTOR_API virtual ~Camera() throw();
-
-protected:
-
-    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    // redraw all (stop then restart sub services)
-    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-private:
-
-    bool initCameraParameters();
-
-    bool bCam_init;
-};
-
-
-
-
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_CAMERA_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera2.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera2.hpp
index 174e4fc..3b61e4d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera2.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Camera2.hpp
@@ -1,29 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_CAMERA_HPP_
-#define _VISUVTKADAPTOR_CAMERA_HPP_
+#ifndef __VISUVTKADAPTOR_CAMERA2_HPP__
+#define __VISUVTKADAPTOR_CAMERA2_HPP__
 
-#include <vector>
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vector>
 
+class vtkCommand;
+class vtkPerspectiveTransform;
 
 namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API Camera2: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Camera2 : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Camera2)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Camera2)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Camera2() throw();
 
@@ -35,13 +37,11 @@ protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
 private:
     vtkCommand* m_cameraCommand;
     vtkPerspectiveTransform* m_transOrig;
@@ -53,4 +53,4 @@ private:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_CAMERA_HPP_
+#endif // __VISUVTKADAPTOR_CAMERA2_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Cube.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Cube.hpp
index 9305b3d..ac74db6 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Cube.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Cube.hpp
@@ -1,9 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __VISUVTKADAPTOR_CUBE_HPP__
+#define __VISUVTKADAPTOR_CUBE_HPP__
+
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 #include "visuVTKAdaptor/config.hpp"
@@ -12,26 +15,31 @@ namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API Cube: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Render a cube on the generic scene
+ */
+class VISUVTKADAPTOR_CLASS_API Cube : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Cube)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Cube)(::fwRenderVTK::IVtkAdaptorService) );
 
 protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    void doSwap() throw(fwTools::Failed){};
-    void doUpdate() throw(fwTools::Failed){};
-    void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed){};
-    void configuring() throw(fwTools::Failed){};
- 
-
+    void doSwap() throw(fwTools::Failed)
+    {
+    }
+    void doUpdate() throw(fwTools::Failed)
+    {
+    }
+    void doConfigure() throw(fwTools::Failed)
+    {
+    }
 };
 
-
-
+#endif //__VISUVTKADAPTOR_CUBE_HPP__
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Distance.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Distance.hpp
index 185dead..e51283c 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Distance.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Distance.hpp
@@ -1,21 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_DISTANCE_HPP_
-#define _VISUVTKADAPTOR_DISTANCE_HPP_
+#ifndef __VISUVTKADAPTOR_DISTANCE_HPP__
+#define __VISUVTKADAPTOR_DISTANCE_HPP__
 
-#include <vector>
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/config.hpp"
+#include "visuVTKAdaptor/MeshFactory.hpp"
 
 #include <fwData/Point.hpp>
 #include <fwData/Color.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/MeshFactory.hpp"
+#include <vector>
 
 class vtkDistanceRepresentation2D;
 class vtkActor;
@@ -24,12 +26,12 @@ class vtkLineSource;
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Distance: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Distance : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Distance)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Distance)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Distance() throw();
 
@@ -40,29 +42,26 @@ public:
 
 protected:
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
     VISUVTKADAPTOR_API void doStart();
     VISUVTKADAPTOR_API void doStop();
 
+private:
 
     vtkDistanceRepresentation2D * m_distanceRepresentation;
-//  typedef std::vector < ::fwRenderVTK::IVtkAdaptorService::wptr > ServiceVector;
-//  ServiceVector m_services;
 
     vtkActor          *m_lineActor;
-//      vtkPolyDataMapper *LineMapper;
     vtkLineSource     *m_lineSource;
 
     ::fwData::Point::wptr m_point1;
     ::fwData::Point::wptr m_point2;
 
-    /// Connection between point 1 objectModified and this service reveive
+    /// Connection between point 1 modified and this service reveive
     ::fwCom::Connection m_point1Connection;
 
-    /// Connection between point 2 objectModified and this service reveive
+    /// Connection between point 2 modified and this service reveive
     ::fwCom::Connection m_point2Connection;
 };
 
@@ -71,4 +70,6 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_DISTANCE_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_DISTANCE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image.hpp
index cbb8fae..3ba6e11 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image.hpp
@@ -1,59 +1,79 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGE_HPP_
-#define _VISUVTKADAPTOR_IMAGE_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGE_HPP__
+#define __VISUVTKADAPTOR_IMAGE_HPP__
 
-#include <vtkSmartPointer.h>
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/Image.hpp>
 
-
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vtkSmartPointer.h>
 
-class vtkImageActor;
 class fwVtkWindowLevelLookupTable;
 class vtkImageMapToColors;
 class vtkImageData;
-class vtkPolyDataMapper;
-class vtkPolyData;
-class vtkActor;
-
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Image: public ::fwComEd::helper::MedicalImageAdaptor, public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Render an image on the generic scene
+ */
+class VISUVTKADAPTOR_CLASS_API Image : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                       public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Image)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Image)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Image() throw();
 
     VISUVTKADAPTOR_API virtual ~Image() throw();
 
-    void setVtkImageRegisterId(std::string id) {m_imageRegisterId = id;};
-    void setVtkImageRegister(vtkObject *obj)   {m_imageRegister = obj;};
-    void setImageOpacity(double opacity)       {m_imageOpacity = opacity;};
-    void setAllowAlphaInTF(bool allow)         {m_allowAlphaInTF = allow;};
-
-protected :
+    void setVtkImageRegisterId(std::string id)
+    {
+        m_imageRegisterId = id;
+    }
+    void setVtkImageRegister(vtkObject* obj)
+    {
+        m_imageRegister = obj;
+    }
+    void setImageOpacity(double opacity)
+    {
+        m_imageOpacity = opacity;
+    }
+    void setAllowAlphaInTF(bool allow)
+    {
+        m_allowAlphaInTF = allow;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_VISIBILITY_MODIFIED_SIG to this::s_UPDATE_IMAGE_OPACITY_SLOT
+     * Connect Image::s_TRANSPARENCY_MODIFIED_SIG to this::s_UPDATE_IMAGE_OPACITY_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
 
@@ -61,27 +81,33 @@ protected :
     virtual void destroyPipeline();
 
     void updateImage( ::fwData::Image::sptr image  );
+
+    /// Slot: Update image opacity and visibility
     void updateImageOpacity();
-    void updateWindowing( ::fwData::Image::sptr image );
+    void updateWindowing();
     void updateImageTransferFunction( ::fwData::Image::sptr image );
 
+    /// Called when transfer function points are modified.
+    VISUVTKADAPTOR_API virtual void updatingTFPoints();
+
+    /// Called when transfer function windowing is modified.
+    VISUVTKADAPTOR_API virtual void updatingTFWindowing(double window, double level);
+
+private:
+
     std::string m_imageRegisterId;
-    vtkObject  *m_imageRegister;
+    vtkObject* m_imageRegister;
 
-    int    m_imagePortId;
+    int m_imagePortId;
     double m_imageOpacity;
-    bool   m_allowAlphaInTF;
+    bool m_allowAlphaInTF;
 
     vtkSmartPointer< fwVtkWindowLevelLookupTable > m_lut;
-    vtkImageMapToColors *m_map2colors;
-    vtkImageData *m_imageData;
-
+    vtkImageMapToColors* m_map2colors;
+    vtkImageData* m_imageData;
 
 };
 
-
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGE_HPP_
+#endif // __VISUVTKADAPTOR_IMAGE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image3DCursor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image3DCursor.hpp
index 6e0edc3..21768f6 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image3DCursor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Image3DCursor.hpp
@@ -1,20 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGE3DCURSOR_HPP_
-#define _VISUVTKADAPTOR_IMAGE3DCURSOR_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGE3DCURSOR_HPP__
+#define __VISUVTKADAPTOR_IMAGE3DCURSOR_HPP__
 
-#include <vtkSmartPointer.h>
+#include "visuVTKAdaptor/config.hpp"
 
+#include <fwData/Color.hpp>
 #include <fwData/TransferFunction.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vtkSmartPointer.h>
 
 class vtkCommand;
 class vtkActor;
@@ -24,11 +26,15 @@ class vtkPolyDataMapper;
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Image3DCursor: public  ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Add a 3D spatial marker represented by a sphere
+ */
+class VISUVTKADAPTOR_CLASS_API Image3DCursor : public  ::fwDataTools::helper::MedicalImageAdaptor,
+                                               public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Image3DCursor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Image3DCursor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Image3DCursor() throw();
 
@@ -38,16 +44,23 @@ public:
 
     VISUVTKADAPTOR_API void setVisibility( bool visibility );
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     void buildPolyData(float radius = 1.0);
 
@@ -57,7 +70,20 @@ protected:
     vtkSmartPointer<vtkPolyDataMapper> m_cursorMapper;
     vtkSmartPointer<vtkActor>          m_cursorActor;
 
+private:
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
 
+    /// Slot: update the sphere color and radius
+    void updateSphere(::fwData::Color::sptr color, float radius);
+    /**
+     * @}
+     */
 
 };
 
@@ -66,4 +92,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGE3DCURSOR_HPP_
+#endif // __VISUVTKADAPTOR_IMAGE3DCURSOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp
index 8d51c98..1517ab6 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageLandmarks.hpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_ImageLandmarks_HPP_
-#define _VISUVTKADAPTOR_ImageLandmarks_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGELANDMARKS_HPP__
+#define __VISUVTKADAPTOR_IMAGELANDMARKS_HPP__
 
+#include "visuVTKAdaptor/config.hpp"
 
-#include <fwServices/ObjectMsg.hpp>
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkCommand;
 
@@ -19,12 +18,15 @@ namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API ImageLandmarks: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Adaptor to display image landmarks
+ */
+class VISUVTKADAPTOR_CLASS_API ImageLandmarks : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageLandmarks)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageLandmarks)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImageLandmarks() throw();
 
@@ -32,15 +34,24 @@ public:
 
     VISUVTKADAPTOR_API virtual void show(bool b = true);
 
-protected :
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_LANDMARK_ADDED_SIG to this::s_UPDATE_LANDMARKS_SLOT
+     * Connect Image::s_LANDMARK_REMOVED_SIG to this::s_UPDATE_LANDMARKS_SLOT
+     * Connect Image::s_LANDMARK_DISPLAYED_SIG to this::s_UPDATE_LANDMARKS_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
 
     std::list< ::fwRenderVTK::IVtkAdaptorService::sptr > m_subServices;
 
@@ -48,6 +59,11 @@ protected :
 
     bool m_needSubservicesDeletion;
 
+private:
+
+    /// Slot: update landmarks sub-adaptors
+    void updateLandmaks();
+
 };
 
 
@@ -55,4 +71,4 @@ protected :
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_ImageLandmarks_HPP_
+#endif // __VISUVTKADAPTOR_IMAGELANDMARKS_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageMultiDistances.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageMultiDistances.hpp
index 1a22944..4251197 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageMultiDistances.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageMultiDistances.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGEMULTIDISTANCES_HPP_
-#define _VISUVTKADAPTOR_IMAGEMULTIDISTANCES_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGEMULTIDISTANCES_HPP__
+#define __VISUVTKADAPTOR_IMAGEMULTIDISTANCES_HPP__
 
 
+#include "visuVTKAdaptor/config.hpp"
+
 #include <fwData/PointList.hpp>
-#include <fwServices/ObjectMsg.hpp>
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkCommand;
 
@@ -21,12 +21,15 @@ namespace visuVTKAdaptor
 
 
 
-class VISUVTKADAPTOR_CLASS_API ImageMultiDistances: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Adaptor to display distance on an image
+ */
+class VISUVTKADAPTOR_CLASS_API ImageMultiDistances : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageMultiDistances)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageMultiDistances)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImageMultiDistances() throw();
 
@@ -36,18 +39,27 @@ public:
 
     VISUVTKADAPTOR_API virtual void show(bool showDistances = true);
 
-protected :
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_DISTANCE_ADDED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_DISTANCE_REMOVED_SIG to this::s_REMOVE_DISTANCE_SLOT
+     * Connect Image::s_DISTANCE_DISPLAYED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     void installSubServices( ::fwData::PointList::sptr pl );
     ::fwData::Point::sptr screenToWorld(int X,int Y);
-    void removeDistance(  ::fwData::PointList::sptr plToRemove ) throw(::fwTools::Failed);
+
     void createNewDistance( std::string sceneId ) throw(::fwTools::Failed);
 
     std::list< ::fwRenderVTK::IVtkAdaptorService::sptr > m_subServices;
@@ -56,6 +68,20 @@ protected :
 
     bool m_needSubservicesDeletion;
 
+private:
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: remove distance
+    void removeDistance(::fwData::PointList::sptr pointList);
+
+    /// Slot: to create a new distance attached to this adaptor
+    void createDistance();
+    /**
+     * @}
+     */
 };
 
 
@@ -63,4 +89,4 @@ protected :
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGEMULTIDISTANCES_HPP_
+#endif // __VISUVTKADAPTOR_IMAGEMULTIDISTANCES_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagePickerInteractor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagePickerInteractor.hpp
index 5775917..188342b 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagePickerInteractor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagePickerInteractor.hpp
@@ -1,54 +1,125 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGEPICKERINTERACTOR_HPP_
-#define _VISUVTKADAPTOR_IMAGEPICKERINTERACTOR_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGEPICKERINTERACTOR_HPP__
+#define __VISUVTKADAPTOR_IMAGEPICKERINTERACTOR_HPP__
 
-#include <vector>
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/PickingInfo.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vtkCommand.h>
 
-class vtkCommand;
+#include <vector>
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API ImagePickerInteractor: public ::fwComEd::helper::MedicalImageAdaptor, public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Adaptor to manage image picking
+ */
+class VISUVTKADAPTOR_CLASS_API ImagePickerInteractor : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                       public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImagePickerInteractor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImagePickerInteractor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImagePickerInteractor() throw();
 
     VISUVTKADAPTOR_API virtual ~ImagePickerInteractor() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @name Signals API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_PICKED_SIGNAL;
+    typedef ::fwCom::Signal<void (::fwDataTools::PickingInfo)> PickedSignalType;
+    ///@}
+
+    typedef enum
+    {
+        MOUSE_LEFT_UP       = vtkCommand::LeftButtonReleaseEvent,
+        MOUSE_RIGHT_UP      = vtkCommand::RightButtonReleaseEvent,
+        MOUSE_MIDDLE_UP     = vtkCommand::MiddleButtonReleaseEvent,
+        MOUSE_WHEELFORWARD  = vtkCommand::MouseWheelForwardEvent,
+        MOUSE_LEFT_DOWN     = vtkCommand::LeftButtonPressEvent,
+        MOUSE_RIGHT_DOWN    = vtkCommand::RightButtonPressEvent,
+        MOUSE_MIDDLE_DOWN   = vtkCommand::MiddleButtonPressEvent,
+        MOUSE_WHEELBACKWARD = vtkCommand::MouseWheelBackwardEvent,
+        MOUSE_MOVE          = vtkCommand::MouseMoveEvent,
+        KEY_PRESS           = vtkCommand::KeyPressEvent
+    } EventID;
+    typedef std::set< EventID > SetEventIdType;
+
 protected:
     friend class ImagePickerInteractorCallback;
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    /**
+     * @brief Configure the adaptor
+     *
+     * Example :
+           @code{.xml}
+           <adaptor id="text" class="::visuVTKRDAdaptor::SCellPickerInteractor" objectId="self">
+            <config renderer="default" picker="myPicker" event="MOUSE_RIGHT_UP" />
+           </adaptor>
+           @endcode
+     * - renderer : the identifier of the renderer.
+     * - picker : the identifier of the picker.
+     * - event : the identifier(s) of the event on which the adaptor is picking.
+     *   Possible values are:
+     *   - MOUSE_LEFT_UP
+     *   - MOUSE_RIGHT_UP
+     *   - MOUSE_MIDDLE_UP
+     *   - MOUSE_WHEELFORWARD
+     *   - MOUSE_LEFT_DOWN
+     *   - MOUSE_RIGHT_DOWN
+     *   - MOUSE_MIDDLE_DOWN
+     *   - MOUSE_WHEELBACKWARD
+     *   - MOUSE_MOVE
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-    VISUVTKADAPTOR_API void notifyEvent(::fwComEd::InteractionMsg::sptr msg);
-
-
-
-    vtkCommand *m_interactionCommand;
-    float m_priority;
 
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+    /**
+     * @}
+     */
+    typedef std::map< std::string, EventID > MapEventIdType; ///< typedef for the map (seen below).
+    static MapEventIdType m_eventIdConversion; ///< map containing the association between 'event text' and 'event ID'.
+
+    vtkCommand* m_interactionCommand; ///< the vtk mouse events observer
+    SetEventIdType m_eventId; ///< event ID treated for picking
 };
 
 
@@ -56,4 +127,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGEPICKERINTERACTOR_HPP_
+#endif // __VISUVTKADAPTOR_IMAGEPICKERINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSeries.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSeries.hpp
index f17aebf..9452699 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSeries.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,14 +7,14 @@
 #ifndef __VISUVTKADAPTOR_IMAGESERIES_HPP__
 #define __VISUVTKADAPTOR_IMAGESERIES_HPP__
 
-#include <vector>
+#include "visuVTKAdaptor/NegatoMPR.hpp"
+#include "visuVTKAdaptor/config.hpp"
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/NegatoMPR.hpp"
+#include <vector>
 
 namespace visuVTKAdaptor
 {
@@ -22,23 +22,31 @@ namespace visuVTKAdaptor
 
 /**
  * @brief This adaptor shows ImageSeries. Creates an adaptor for the image in the series.
- * @class ImageSeries
  */
-class VISUVTKADAPTOR_CLASS_API ImageSeries : public ::fwComEd::helper::MedicalImageAdaptor,
+class VISUVTKADAPTOR_CLASS_API ImageSeries : public ::fwDataTools::helper::MedicalImageAdaptor,
                                              public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageSeries)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageSeries)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImageSeries() throw();
 
     VISUVTKADAPTOR_API virtual ~ImageSeries() throw();
 
-    void setAllowAlphaInTF(bool allow) {m_allowAlphaInTF = allow;};
-    void setInterpolation(bool interpolation){m_interpolation = interpolation;};
-    void setVtkImageSourceId(std::string id) {m_imageSourceId = id;};
+    void setAllowAlphaInTF(bool allow)
+    {
+        m_allowAlphaInTF = allow;
+    }
+    void setInterpolation(bool interpolation)
+    {
+        m_interpolation = interpolation;
+    }
+    void setVtkImageSourceId(std::string id)
+    {
+        m_imageSourceId = id;
+    }
 
 protected:
 
@@ -46,7 +54,7 @@ protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
 
     /// Configure the adaptor.
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
 
     /// Calls doUpdate()
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
@@ -57,9 +65,6 @@ protected:
     /// Stops and unregister image subservice.
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    /// Does nothing.
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
     /// Sets adaptor slice mode (NO_SLICE, ONE_SLICE, THREE_SLICES)
     void setSliceMode(NegatoMPR::SliceMode sliceMode);
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp
index 8089468..6da8cce 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSlice.hpp
@@ -1,20 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGESLICE_HPP_
-#define _VISUVTKADAPTOR_IMAGESLICE_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGESLICE_HPP__
+#define __VISUVTKADAPTOR_IMAGESLICE_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwCom/Connection.hpp>
+#include <fwCom/helper/SigSlotConnection.hpp>
 
+#include <fwData/Composite.hpp>
 #include <fwData/Image.hpp>
 
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkImageActor;
 class vtkLookupTable;
@@ -28,33 +32,89 @@ class vtkActor;
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API ImageSlice: public ::fwComEd::helper::MedicalImageAdaptor, public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Adaptor to display only one slice of an image
+ */
+class VISUVTKADAPTOR_CLASS_API ImageSlice : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                            public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageSlice)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageSlice)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImageSlice() throw();
 
     VISUVTKADAPTOR_API virtual ~ImageSlice() throw();
 
-    void setCtrlImageId(std::string id)      {m_ctrlImageId = id;};
-    void setCtrlImage(::fwData::Image::sptr image)      {m_ctrlImage = image;};
-    void setVtkImageSourceId(std::string id) {m_imageSourceId = id;};
-    void setVtkImageSource(vtkObject *obj)   {m_imageSource = obj;};
-    void setInterpolation(bool interpolation){m_interpolation = interpolation;};
-
-    void setUseImageTF(bool use)               {m_useImageTF = use;};
-
-protected :
+    void setCtrlImageId(std::string id)
+    {
+        m_ctrlImageId = id;
+    }
+    void setCtrlImage(::fwData::Image::sptr image)
+    {
+        m_ctrlImage = image;
+    }
+    void setVtkImageSourceId(std::string id)
+    {
+        m_imageSourceId = id;
+    }
+    void setVtkImageSource(vtkObject* obj)
+    {
+        m_imageSource = obj;
+    }
+    void setInterpolation(bool interpolation)
+    {
+        m_interpolation = interpolation;
+    }
+
+    void setActorOpacity(double actorOpacity)
+    {
+        m_actorOpacity = actorOpacity;
+    }
+
+    void setUseImageTF(bool use)
+    {
+        m_useImageTF = use;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_CHECK_CTRL_IMAGE_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_CHECK_CTRL_IMAGE_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_CHECK_CTRL_IMAGE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+
+    /**
+     * @brief Configures the service
+     *
+     * @code{.xml}
+       <adaptor id="imageSlice" class="::visuVTKAdaptor::ImageSlice" objectId="self">
+           <config renderer="default" picker="negatodefault" sliceIndex="axial"
+                   transform="trf" ctrlimage="imageKey" interpolation="off" vtkimagesource="imgSource"
+                   actorOpacity="1.0" />
+       </adaptor>
+       @endcode
+     * - \b renderer (mandatory): defines the renderer to show the arrow. It must be different from the 3D objects renderer.
+     * - \b picker (mandatory): identifier of the picker
+     * - \b sliceIndex (optional, axial/frontal/sagittal, default=axial): orientation of the negato
+     * - \b transform (optional): the vtkTransform to associate to the adaptor
+     * - \b ctrlimage (mandatory): image to show
+     * - \b interpolation (optional, yes/no, default=yes): if true, the image pixels are interpolated
+     * - \b vtkimagesource (optional): source image, used for blend
+     * - \b actorOpacity (optional, default=1.0): actor opacity (float)
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
     virtual void buildPipeline();
@@ -66,7 +126,7 @@ protected :
 
     void updateOutline();
     void updateImage( ::fwData::Image::sptr ImageSlice  );
-    void updateSliceIndex( ::fwData::Image::sptr ImageSlice );
+    void updateImageSliceIndex( ::fwData::Image::sptr ImageSlice );
 
 
     std::string m_ctrlImageId;
@@ -74,23 +134,40 @@ protected :
 
     bool m_interpolation;
     bool m_useImageTF;
+    double m_actorOpacity;
 
     std::string m_imageSourceId;
-    vtkObject  *m_imageSource;
+    vtkObject* m_imageSource;
 
-    vtkImageActor *m_imageActor;
+    vtkImageActor* m_imageActor;
 
-    vtkPolyData *m_planeOutlinePolyData;
-    vtkPolyDataMapper *m_planeOutlineMapper;
-    vtkActor *m_planeOutlineActor;
+    vtkPolyData* m_planeOutlinePolyData;
+    vtkPolyDataMapper* m_planeOutlineMapper;
+    vtkActor* m_planeOutlineActor;
 
-    ::fwCom::Connection m_connection;
+    ::fwCom::helper::SigSlotConnection m_connections;
 
-};
+private:
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: Check if ctrl image changed and update scene
+    void checkCtrlImage();
 
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
 
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+    /**
+     * @}
+     */
+
+};
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGESLICE_HPP_
+#endif // __VISUVTKADAPTOR_IMAGESLICE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSliceOrientationText.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSliceOrientationText.hpp
new file mode 100644
index 0000000..6a7acc3
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageSliceOrientationText.hpp
@@ -0,0 +1,109 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VISUVTKADAPTOR_IMAGESLICEORIENTATIONTEXT_HPP__
+#define __VISUVTKADAPTOR_IMAGESLICEORIENTATIONTEXT_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
+#include <memory> //unique_ptr
+#include <string>
+
+
+namespace visuVTKAdaptor
+{
+
+class ImageSliceOrientationTextPImpl;
+
+/**
+ * @brief Shows image orientation information (right, left, ...)
+ * This adaptor show locations labels in the four borders of the scene
+ */
+class VISUVTKADAPTOR_CLASS_API ImageSliceOrientationText : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                           public ::fwRenderVTK::IVtkAdaptorService
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (ImageSliceOrientationText)(::fwRenderVTK::IVtkAdaptorService) );
+
+    VISUVTKADAPTOR_API ImageSliceOrientationText() throw();
+    VISUVTKADAPTOR_API virtual ~ImageSliceOrientationText() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
+
+
+    /**
+     * @brief Configure the adaptor
+     *
+     * Example :
+       @code{.xml}
+        <adaptor id="adaptorID" class="::visuVTKAdaptor::ImageSliceOrientationText" objectId="imageKey">
+            <config renderer="default" >
+                <locations>R,L,A,P,S,I</locations>
+                <initialOrientation>${orientation}</initialOrientation>
+            </config>
+        </adaptor>
+       @endcode
+     *
+     * - locations : comma-separated location terms to use, in this order :
+     *   Right,Left,Anterior,Posterior,Superior,Inferior
+     *   if 'default' is given, 'R,L,A,P,S,I' is used. If empty, nothing is displayed
+     * - initialOrientation : initial orientation of the associated slice
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+
+    /// @brief IService API implementation
+    /// @{
+    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
+    /// @}
+
+    /// Overides MedicalImageAdaptor's setOrientation
+    VISUVTKADAPTOR_API void setOrientation( Orientation orientation );
+
+
+    /// Locations string
+    std::string m_locations;
+
+    /// adaptor's initial orientation
+    std::string m_initialOrientation;
+
+    /// adaptor's private implementation
+    std::unique_ptr< ImageSliceOrientationTextPImpl > m_pimpl;
+
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+    /**
+     * @}
+     */
+};
+
+
+} //namespace visuVTKAdaptor
+
+#endif // __VISUVTKADAPTOR_IMAGESLICEORIENTATIONTEXT_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageText.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageText.hpp
index c750ec0..38533a0 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageText.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImageText.hpp
@@ -1,34 +1,52 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __VISUVTKADAPTOR_IMAGETEXT_HPP__
+#define __VISUVTKADAPTOR_IMAGETEXT_HPP__
 
-#include <string>
+#include "visuVTKAdaptor/Text.hpp"
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/Text.hpp"
-#include "visuVTKAdaptor/config.hpp"
+#include <string>
 
 class vtkTextActor;
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API ImageText: public Text, public ::fwComEd::helper::MedicalImageAdaptor
+/**
+ * @brief Adaptor to display window image information (width, heigth, picked
+ * position)
+ */
+class VISUVTKADAPTOR_CLASS_API ImageText : public Text,
+                                           public ::fwDataTools::helper::MedicalImageAdaptor
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImageText)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImageText)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImageText() throw();
 
     VISUVTKADAPTOR_API virtual ~ImageText() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_BUFFER_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
@@ -37,11 +55,27 @@ protected:
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+
+    /// Update tranfer function points
+    VISUVTKADAPTOR_API virtual void updatingTFPoints();
+
+    /// Update transfer function windowing
+    VISUVTKADAPTOR_API virtual void updatingTFWindowing(double window, double level);
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+    /**
+     * @}
+     */
 };
 
 } //namespace visuVTKAdaptor
+
+#endif //__VISUVTKADAPTOR_IMAGETEXT_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesBlend.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesBlend.hpp
index 3446d29..b3fd232 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesBlend.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesBlend.hpp
@@ -1,20 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGESBLEND_HPP_
-#define _VISUVTKADAPTOR_IMAGESBLEND_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGESBLEND_HPP__
+#define __VISUVTKADAPTOR_IMAGESBLEND_HPP__
 
-#include <fwServices/helper/SigSlotConnection.hpp>
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
 
 #include <fwData/Image.hpp>
 
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkImageActor;
 class vtkLookupTable;
@@ -23,55 +25,65 @@ class vtkImageData;
 class vtkPolyDataMapper;
 class vtkPolyData;
 class vtkActor;
-
+class vtkImageBlend;
 
 namespace visuVTKAdaptor
 {
 
 /**
- * @brief   Manage blend for image given in configuration.
- * @class   ImagesProbeCursor
- * 
- * @date    2010.
+ * @brief Manage blend for image given in configuration.
  */
-class VISUVTKADAPTOR_CLASS_API ImagesBlend: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API ImagesBlend : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ImagesBlend)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImagesBlend)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImagesBlend() throw();
 
     VISUVTKADAPTOR_API virtual ~ImagesBlend() throw();
 
-    void setVtkImageRegisterId(std::string id) {m_imageRegisterId = id;};
+    void setVtkImageRegisterId(const std::string& id)
+    {
+        m_imageRegisterId = id;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
-protected :
+protected:
 
     class ImageInfo
     {
 
     public:
-        ImageInfo():
+        ImageInfo() :
             m_useTFAlfa(false),
             m_imageOpacity(1.0)
-        {}
+        {
+        }
 
-        bool   m_useTFAlfa;
+        bool m_useTFAlfa;
         double m_imageOpacity;
         std::string m_tfSelectionFwID;
         std::string m_selectedTFKey;
 
-        ::fwServices::helper::SigSlotConnection::sptr m_connections;
+        ::fwCom::helper::SigSlotConnection m_connections;
     };
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
     void addImageAdaptors();
@@ -89,14 +101,12 @@ protected :
     RegisteredImageMap m_registeredImages;
 
 
-    vtkImageBlend *m_imageBlend;
+    vtkImageBlend* m_imageBlend;
     std::string m_imageRegisterId;
 
 };
 
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGESBLEND_HPP_
+#endif // __VISUVTKADAPTOR_IMAGESBLEND_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesProbeCursor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesProbeCursor.hpp
index b7f0eeb..89940a2 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesProbeCursor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ImagesProbeCursor.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGESPROBECURSOR_HPP_
-#define _VISUVTKADAPTOR_IMAGESPROBECURSOR_HPP_
+#ifndef __VISUVTKADAPTOR_IMAGESPROBECURSOR_HPP__
+#define __VISUVTKADAPTOR_IMAGESPROBECURSOR_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-
 class vtkCommand;
 class vtkActor;
 class vtkActor2D;
@@ -27,15 +27,13 @@ namespace visuVTKAdaptor
 
 /**
  * @brief   Draw pixel information from images given by id in composite.
- * @class   ImagesProbeCursor
- * 
- * @date    2010.
  */
-class VISUVTKADAPTOR_CLASS_API ImagesProbeCursor: public  ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API ImagesProbeCursor : public  ::fwDataTools::helper::MedicalImageAdaptor,
+                                                   public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ImagesProbeCursor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ImagesProbeCursor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ImagesProbeCursor() throw();
 
@@ -53,37 +51,36 @@ protected:
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     /**
-     * @verbatim
-     <adaptor id="GENERIC_UID_ImagesProbeCursor" class="::visuVTKAdaptor::ImagesProbeCursor" objectId="self">
+     * @code{.xml}
+       <adaptor id="GENERIC_UID_ImagesProbeCursor" class="::visuVTKAdaptor::ImagesProbeCursor" objectId="self">
          <config renderer="default" picker="myPicker">
              <image objectId="myRefImage" name="background" />
              <image objectId="myObject" name="working" />
          </config>
-     </adaptor>
-     @endverbatim
+       </adaptor>
+       @endcode
      */
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     void buildTextActor();
     void buildPolyData();
 
-    void computeCrossExtremity( const int probeSlice[3] , double worldCross[4][3] );
+    void computeCrossExtremity( const int probeSlice[3], double worldCross[4][3] );
 
     typedef std::pair< std::string, std::string > ImagesIdPair;
     std::vector< ImagesIdPair > m_imagesId;
     double m_priority;
 
-    vtkCommand *m_vtkObserver;
+    vtkCommand* m_vtkObserver;
 
-    vtkActor2D * m_textActor; // rendering defect using a vtkTextActor
-    vtkTextMapper * m_textMapper;
+    vtkActor2D* m_textActor;     // rendering defect using a vtkTextActor
+    vtkTextMapper* m_textMapper;
 
-    vtkPolyData         *m_cursorPolyData;
-    vtkPolyDataMapper   *m_cursorMapper;
-    vtkActor            *m_cursorActor;
+    vtkPolyData* m_cursorPolyData;
+    vtkPolyDataMapper* m_cursorMapper;
+    vtkActor* m_cursorActor;
 
 
 
@@ -94,4 +91,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGESPROBECURSOR_HPP_
+#endif // __VISUVTKADAPTOR_IMAGESPROBECURSOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/InteractorStyle.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/InteractorStyle.hpp
index 7380848..f847f0e 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/InteractorStyle.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/InteractorStyle.hpp
@@ -1,29 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_INTERACTORSTYLE_HPP_
-#define _VISUVTKADAPTOR_INTERACTORSTYLE_HPP_
+#ifndef __VISUVTKADAPTOR_INTERACTORSTYLE_HPP__
+#define __VISUVTKADAPTOR_INTERACTORSTYLE_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkInteractorStyle;
 
 namespace visuVTKAdaptor
 {
 
-
-
-class VISUVTKADAPTOR_CLASS_API InteractorStyle: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Managing vtk interactor style
+ */
+class VISUVTKADAPTOR_CLASS_API InteractorStyle : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (InteractorStyle)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (InteractorStyle)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API InteractorStyle() throw();
 
@@ -34,11 +36,10 @@ protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     void setInteractorStyle(vtkInteractorStyle *interactor);
 
@@ -46,9 +47,6 @@ protected:
     vtkInteractorStyle *m_interactorStyle;
 };
 
-
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_INTERACTORSTYLE_HPP_
+#endif // __VISUVTKADAPTOR_INTERACTORSTYLE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/LabeledPointList.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/LabeledPointList.hpp
index e98cc06..6115ca9 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/LabeledPointList.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/LabeledPointList.hpp
@@ -1,56 +1,60 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_LABELEDPOINTLIST_HPP_
-#define _VISUVTKADAPTOR_LABELEDPOINTLIST_HPP_
+#ifndef __VISUVTKADAPTOR_LABELEDPOINTLIST_HPP__
+#define __VISUVTKADAPTOR_LABELEDPOINTLIST_HPP__
 
+#include "visuVTKAdaptor/config.hpp"
 
-#include <fwServices/ObjectMsg.hpp>
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkCommand;
 
 namespace visuVTKAdaptor
 {
-
-
-class VISUVTKADAPTOR_CLASS_API LabeledPointList: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Adaptor to display a point list
+ */
+class VISUVTKADAPTOR_CLASS_API LabeledPointList : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (LabeledPointList)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (LabeledPointList)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API LabeledPointList() throw();
 
     VISUVTKADAPTOR_API virtual ~LabeledPointList() throw();
 
-protected :
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect PointList::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect PointList::s_POINT_ADDED_SIG to this::s_UPDATE_SLOT
+     * Connect PointList::s_POINT_REMOVED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
 
     std::list< ::fwRenderVTK::IVtkAdaptorService::sptr > m_subServices;
 
     vtkCommand * m_rightButtonCommand;
-
-    bool m_needSubservicesDeletion;
-
 };
 
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_LABELEDPOINTLIST_HPP_
+#endif // __VISUVTKADAPTOR_LABELEDPOINTLIST_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Material.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Material.hpp
index b381a07..afae834 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Material.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Material.hpp
@@ -1,34 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_MATERIAL_HPP_
-#define _VISUVTKADAPTOR_MATERIAL_HPP_
+#ifndef __VISUVTKADAPTOR_MATERIAL_HPP__
+#define __VISUVTKADAPTOR_MATERIAL_HPP__
 
-
-#include <fwServices/ObjectMsg.hpp>
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 
 class VISUVTKADAPTOR_CLASS_API vtkProperty;
 
+namespace fwData
+{
+class Material;
+}
 
 namespace visuVTKAdaptor
 {
 
 
-
-class VISUVTKADAPTOR_CLASS_API Material: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Manage material representation of meshes
+ */
+class VISUVTKADAPTOR_CLASS_API Material : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Material)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Material)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Material() throw();
 
@@ -36,22 +40,30 @@ public:
 
     VISUVTKADAPTOR_API void setVtkProperty(vtkProperty *property);
 
-    VISUVTKADAPTOR_API vtkProperty *getVtkProperty();
+    VISUVTKADAPTOR_API vtkProperty *getVtkProperty() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Material::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
+    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
-    void updateMaterial( ::fwData::Material::sptr material );
+    void updateMaterial( SPTR(::fwData::Material) material );
 
 
     vtkProperty *m_property;
     bool m_manageProperty;
+    bool m_lighting;
 
 };
 
@@ -60,4 +72,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_MATERIAL_HPP_
+#endif // __VISUVTKADAPTOR_MATERIAL_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Medical3DCamera.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Medical3DCamera.hpp
index d94b6ac..fa39dbc 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Medical3DCamera.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Medical3DCamera.hpp
@@ -1,43 +1,81 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_MEDICAL3DCAMERA_HPP_
-#define _VISUVTKADAPTOR_MEDICAL3DCAMERA_HPP_
+#ifndef __VISUVTKADAPTOR_MEDICAL3DCAMERA_HPP__
+#define __VISUVTKADAPTOR_MEDICAL3DCAMERA_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+class vtkCamera;
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Medical3DCamera: public ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService 
+/**
+ * @brief Update camera scene according to defined axes (axial, sagittal, frontal).
+ *
+ * The scene can be updated using adaptor slots setAxial, setFrontal, setSagittal.
+ */
+class VISUVTKADAPTOR_CLASS_API Medical3DCamera : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                 public ::fwRenderVTK::IVtkAdaptorService
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Medical3DCamera)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Medical3DCamera)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Medical3DCamera() throw();
 
     VISUVTKADAPTOR_API virtual ~Medical3DCamera() throw();
 
+    typedef ::fwCom::Slot< void () > SetCameraSlotType;
+
 protected:
 
+
+    /**
+     * @brief Configure the adaptor
+     *
+     * Example :
+       @code{.xml}
+       <adaptor id="medicalCamera" class="::visuVTKAdaptor::Medical3DCamera" objectId="object">
+        <config renderer="default" sliceIndex="axial" resetAtStart="yes" />
+       </adaptor>
+
+       ...
+
+       <connect>
+        <signal>guiActionAxialView/triggered</signal>
+        <slot>medicalCamera/setAxial</slot> <!-- Connect to adaptor's axial view slot -->
+       </connect>
+
+       @endcode
+     *
+     * - renderer : mandatory, renderer used by the adaptor
+     * - sliceIndex : not mandatory, defines view orientation. Available values are axial, frontal, sagittal;
+     *   default value set to axial.
+     * - resetAtStart : update view when adaptor is started if set to yes, default value is no.
+     *
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+
+    /**
+     * @name Overrides
+     * @{ */
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-
-    void initializeCamera();
+    /**  @} */
 
 private:
     void updateView();
@@ -45,14 +83,27 @@ private:
     void resetFrontalView();
     void resetAxialView();
 
+    void setSagittalView();
+    void setFrontalView();
+    void setAxialView();
 
     vtkCamera* m_camera;
-    static std::map< std::string, ::fwComEd::helper::MedicalImageAdaptor::Orientation > m_orientationConversion;
-};
+    static std::map< std::string, ::fwDataTools::helper::MedicalImageAdaptor::Orientation > m_orientationConversion;
 
+    /// Set axial view slot.
+    SetCameraSlotType::sptr m_slotSetAxial;
 
+    /// Set sagittal view slot.
+    SetCameraSlotType::sptr m_slotSetSagittal;
+
+    /// Set frontal view slot.
+    SetCameraSlotType::sptr m_slotSetFrontal;
+
+    /// Update view when adaptor is started if true
+    bool m_resetAtStart;
+};
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_MEDICAL3DCAMERA_HPP_
+#endif // __VISUVTKADAPTOR_MEDICAL3DCAMERA_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Mesh.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Mesh.hpp
index 79cc693..1c82acb 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Mesh.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Mesh.hpp
@@ -1,16 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_MESH_HPP_
-#define _VISUVTKADAPTOR_MESH_HPP_
+#ifndef __VISUVTKADAPTOR_MESH_HPP__
+#define __VISUVTKADAPTOR_MESH_HPP__
 
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
 
 class vtkCommand;
 class vtkDepthSortPolyData;
@@ -35,25 +38,80 @@ namespace visuVTKAdaptor
 
 class Transform;
 
-class VISUVTKADAPTOR_CLASS_API MeshVtkCommand ;
+class VISUVTKADAPTOR_CLASS_API MeshVtkCommand;
 
-class VISUVTKADAPTOR_CLASS_API Mesh: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Display a mesh on the generic scene
+ */
+class VISUVTKADAPTOR_CLASS_API Mesh : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Mesh)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Mesh)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Mesh() throw();
     VISUVTKADAPTOR_API virtual ~Mesh() throw();
 
-    VISUVTKADAPTOR_API SPTR(::fwData::Material) getMaterial();
+    /**
+     * @name Signals API
+     * @{
+     */
+    typedef ::fwCom::Signal< void ( SPTR(::fwData::Material) ) > TextureAppliedSignalType;
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_TEXTURE_APPLIED_SIG;
+    /** @} */
+
+    /**
+     * @name Slots API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_VISIBILITY_SLOT;
+    typedef ::fwCom::Slot<void (bool)> UpdateVisibilitySlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_POINT_COLORS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdatePointColorsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CELL_COLORS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdateCellColorsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_VERTEX_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdateVertexSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_POINT_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdatePointNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CELL_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdateCellNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_POINT_TEX_COORDS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdatePointTexCoordsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CELL_TEX_COORDS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdateCellTexCoordsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_SHOW_POINT_COLORS_SLOT;
+    typedef ::fwCom::Slot<void ()> ShowPointColorsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_SHOW_CELL_COLORS_SLOT;
+    typedef ::fwCom::Slot<void ()> ShowCellColorsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_HIDE_COLORS_SLOT;
+    typedef ::fwCom::Slot<void ()> HideColorsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_COLOR_MODE_SLOT;
+    typedef ::fwCom::Slot<void (std::uint8_t)> UpdateColorModeSlotType; ///< color mode (0: none, 1: point, 2: cell)
+
+    /// Slot: update mesh visibility (true = visible)
+    VISUVTKADAPTOR_API void updateVisibility ( bool isVisible );
+    /** @} */
+
+    VISUVTKADAPTOR_API SPTR(::fwData::Material) getMaterial() const;
     VISUVTKADAPTOR_API void setMaterial(SPTR(::fwData::Material) material);
 
-    VISUVTKADAPTOR_API SPTR(::fwData::Material) getUnclippedMaterial();
+    VISUVTKADAPTOR_API SPTR(::fwData::Material) getUnclippedMaterial() const;
     VISUVTKADAPTOR_API void setUnclippedPartMaterial(SPTR(::fwData::Material) material);
 
     VISUVTKADAPTOR_API void setShowClippedPart ( bool show );
-    VISUVTKADAPTOR_API void setClippingPlanesId( ::fwRenderVTK::VtkRenderService::VtkObjectIdType id );
+    VISUVTKADAPTOR_API void setClippingPlanesId( ::fwRenderVTK::SRender::VtkObjectIdType id );
 
     VISUVTKADAPTOR_API void setVtkClippingPlanes               ( vtkPlaneCollection *planes );
     VISUVTKADAPTOR_API void setActorPropertyToUnclippedMaterial( bool opt );
@@ -61,30 +119,85 @@ public:
     /// Active/Inactive automatic reset on camera. By default =true.
     VISUVTKADAPTOR_API void setAutoResetCamera(bool autoResetCamera);
 
-    VISUVTKADAPTOR_API void updateVisibility ( bool isVisible );
-    VISUVTKADAPTOR_API bool getVisibility();
+    VISUVTKADAPTOR_API bool getVisibility() const;
 
+    /// Creates normals adaptor if material has NORMALS, else remove normals adaptor.
     VISUVTKADAPTOR_API void updateOptionsMode();
 
+    /// Used to update normal mode (0: none, 1: point, 2: cell)
+    VISUVTKADAPTOR_API void updateNormalMode(std::uint8_t mode);
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect mesh::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect mesh::s_POINT_COLORS_MODIFIED_SIG to this::s_UPDATE_POINT_COLORS_SLOT
+     * Connect mesh::s_CELL_COLORS_MODIFIED_SIG to this::s_UPDATE_CELL_COLORS_SLOT
+     * Connect mesh::s_VERTEX_MODIFIED_SIG to this::s_UPDATE_VERTEX_SLOT
+     * Connect mesh::s_POINT_NORMALS_MODIFIED_SIG to this::s_UPDATE_POINT_NORMALS_SLOT
+     * Connect mesh::s_CELL_NORMALS_MODIFIED_SIG to this::s_UPDATE_CELL_NORMALS_SLOT
+     * Connect mesh::s_POINT_TEX_COORDS_MODIFIED_SIG to this::s_UPDATE_POINT_TEX_COORDS_SLOT
+     * Connect mesh::s_CELL_TEX_COORDS_MODIFIED_SIG to this::s_UPDATE_CELL_TEX_COORDS_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
-   VISUVTKADAPTOR_API void doStart    () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doStop     () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doSwap   () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doUpdate   () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doReceive   (::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStart    () throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStop     () throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doSwap   () throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doUpdate   () throw(fwTools::Failed);
+
+    /**
+     * @name Slots methods
+     * @{
+     */
+
+    /// Slot:  used to update point colors
+    void updatePointColors();
+
+    /// Slot: used to update cell colors
+    void updateCellColors();
+
+    /// Slot: used to update mesh vertex
+    void updateVertex();
+
+    ///Slot: used to update point normals
+    void updatePointNormals();
 
+    /// Slot: used to update cell normals
+    void updateCellNormals();
+
+    /// Slot: used to update point tex coords
+    void updatePointTexCoords();
+
+    /// Slot: used to update cell tex coords
+    void updateCellTexCoords();
+
+    /// Slot: used to show point colors
+    void showPointColors();
+
+    /// Slot: used to show cell colors
+    void showCellColors();
+
+    /// Slot: used to hide colors
+    void hideColors();
+
+    /// Slot: used to update color mode (0: none, 1: point, 2: cell)
+    void updateColorMode(std::uint8_t mode);
+    /**
+     * @}
+     */
 
     vtkActor *newActor();
     void buildPipeline();
 
     void updateMesh ( SPTR(::fwData::Mesh) mesh );
 
-    void setServiceOnMaterial(
-        ::fwRenderVTK::IVtkAdaptorService::sptr &srv,
-        SPTR(::fwData::Material) material
-        );
+    void setServiceOnMaterial(::fwRenderVTK::IVtkAdaptorService::sptr &srv,
+                              SPTR(::fwData::Material) material);
 
     void removePlaneCollectionShifterCommand();
     void removeServicesStarterCommand();
@@ -94,16 +207,15 @@ protected:
     void createNormalsService();
     void removeNormalsService();
 
-    bool   m_showClippedPart;
-    bool   m_autoResetCamera;
+    bool m_showClippedPart;
+    bool m_autoResetCamera;
 
     vtkPolyData        *m_polyData;
     vtkPolyDataMapper  *m_mapper;
     vtkActor           *m_actor;
-    vtkCommand         *m_depthSortCommand;
 
     vtkPlaneCollection *m_clippingPlanes;
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanesId;
+    ::fwRenderVTK::SRender::VtkObjectIdType m_clippingPlanesId;
 
     MeshVtkCommand *m_planeCollectionShifterCallback;
     MeshVtkCommand *m_servicesStarterCallback;
@@ -118,12 +230,55 @@ protected:
     vtkTransform* m_transform;
     WPTR(::visuVTKAdaptor::Transform) m_transformService;
 
-public :
+    /**
+     * @brief Type for generation of texture coordinates
+     */
+    enum UvGenType
+    {
+        NONE,
+        SPHERE,
+        CYLINDER,
+        PLANE,
+    };
+
+    UvGenType m_uvgen;
+    std::string m_textureAdaptorUID;
+
+    /// Signal to emit when a texture must be applied on a material.
+    TextureAppliedSignalType::sptr m_sigTextureApplied;
+
+private:
+
+    /**
+     * @name Slots attributes
+     * @{
+     */
+    UpdateVisibilitySlotType::sptr m_slotUpdateVisibility; ///< slot used to change the mesh visibility
+    UpdatePointColorsSlotType::sptr m_slotUpdatePointColors; ///< slot used to update point colors
+    UpdateCellColorsSlotType::sptr m_slotUpdateCellColors; ///< slot used to update cell colors
+    UpdateVertexSlotType::sptr m_slotUpdateVertex; ///< slot used to update mesh vertex
+    UpdatePointNormalsSlotType::sptr m_slotUpdatePointNormals; ///< slot used to update point normals
+    UpdateCellNormalsSlotType::sptr m_slotUpdateCellNormals; ///< slot used to update cell normals
+    UpdatePointTexCoordsSlotType::sptr m_slotUpdatePointTexCoords; ///< slot used to update point tex coords
+    UpdateCellTexCoordsSlotType::sptr m_slotUpdateCellTexCoords; ///< slot used to update cell tex coords
+    ShowPointColorsSlotType::sptr m_slotShowPointColors; ///< slot used to show point colors
+    ShowCellColorsSlotType::sptr m_slotShowCellColors; ///< slot used to show cell colors
+    HideColorsSlotType::sptr m_slotHideColors; ///< slot used to hide colors
+    /// slot used to update color mode (0: none, 1: point, 2: cell)
+    UpdateColorModeSlotType::sptr m_slotUpdateColorMode;
+    /**
+     * @}
+     */
+
+public:
 
-   vtkActor * getActor(){ return m_actor; }
+    vtkActor * getActor() const
+    {
+        return m_actor;
+    }
 
 };
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_MESH_HPP_
+#endif // __VISUVTKADAPTOR_MESH_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshFactory.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshFactory.hpp
index 31d54c1..acf642d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshFactory.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshFactory.hpp
@@ -1,22 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_VTKADAPTOR_MESHFACTORY_HPP_
-#define _VISUVTKADAPTOR_VTKADAPTOR_MESHFACTORY_HPP_
+#ifndef __VISUVTKADAPTOR_MESHFACTORY_HPP__
+#define __VISUVTKADAPTOR_MESHFACTORY_HPP__
 
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/Material.hpp>
-#include <fwData/TriangularMesh.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
 
-class  vtkActor;
-class  vtkDepthSortPolyData;
-class  vtkPolyDataNormals;
-class  vtkPlaneCollection;
+class vtkActor;
+class vtkDepthSortPolyData;
+class vtkPolyDataNormals;
+class vtkPlaneCollection;
 
 namespace visuVTKAdaptor
 {
@@ -33,9 +31,7 @@ public:
 
 protected:
 
-    VISUVTKADAPTOR_API vtkActor* getActor();
-
-    VISUVTKADAPTOR_API void updateTriangulaMesh( ::fwData::TriangularMesh::sptr mesh);
+    VISUVTKADAPTOR_API vtkActor* getActor() const;
 
     VISUVTKADAPTOR_API void updateMaterial( ::fwData::Material::sptr material );
 
@@ -43,17 +39,20 @@ protected:
 
     VISUVTKADAPTOR_API void setVtkClippingPlanes(vtkPlaneCollection *planes);
 
-    void setNormalsFeatureAngle(double angle){ m_normalsFeatureAngle = angle; }
+    void setNormalsFeatureAngle(double angle)
+    {
+        m_normalsFeatureAngle = angle;
+    }
 
 protected:
     vtkPolyDataNormals * m_normals;
     vtkPlaneCollection * m_clippingPlanes;
-    vtkActor * m_actor ;
+    vtkActor * m_actor;
 
     double m_normalsFeatureAngle;
 };
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_VTKADAPTOR_MESHFACTORY_HPP_
+#endif // __VISUVTKADAPTOR_MESHFACTORY_HPP__
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshNormals.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshNormals.hpp
index 890fbfb..d9f500e 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshNormals.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshNormals.hpp
@@ -1,19 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_MESHNORMALS_HPP_
-#define _VISUVTKADAPTOR_MESHNORMALS_HPP_
+#ifndef __VISUVTKADAPTOR_MESHNORMALS_HPP__
+#define __VISUVTKADAPTOR_MESHNORMALS_HPP__
 
-#include <vtkSmartPointer.h>
+#include "visuVTKAdaptor/config.hpp"
 
-#include <fwServices/ObjectMsg.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vtkSmartPointer.h>
+
 
 class vtkPolyData;
 class vtkActor;
@@ -22,7 +24,7 @@ namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API MeshNormals: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API MeshNormals : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
@@ -34,7 +36,7 @@ public:
         CELL_NORMAL
     } NormalRepresentation;
 
-    fwCoreServiceClassDefinitionsMacro ( (MeshNormals)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (MeshNormals)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API MeshNormals() throw();
 
@@ -42,27 +44,110 @@ public:
 
     VISUVTKADAPTOR_API void setPolyData(vtkSmartPointer< vtkPolyData > polydata);
 
+    /**
+     * @name Slots API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_VERTEX_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdateVertexSlotType;
+
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_POINT_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdatePointNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CELL_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdateCellNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_SHOW_POINT_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> ShowPointNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_SHOW_CELL_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> ShowCellNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_HIDE_NORMALS_SLOT;
+    typedef ::fwCom::Slot<void ()> HideNormalsSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_NORMAL_MODE_SLOT;
+    typedef ::fwCom::Slot<void (std::uint8_t)> UpdateNormalModeSlotType; ///< normal mode (0: none, 1: point, 2: cell)
+
+    /// Slot: used to update normal mode (0: none, 1: point, 2: cell)
+    void updateNormalMode(std::uint8_t mode);
+    /** @} */
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect mesh::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect mesh::s_VERTEX_MODIFIED_SIG to this::s_UPDATE_VERTEX_SLOT
+     * Connect mesh::s_POINT_NORMALS_MODIFIED_SIG to this::s_UPDATE_POINT_NORMALS_SLOT
+     * Connect mesh::s_CELL_NORMALS_MODIFIED_SIG to this::s_UPDATE_CELL_NORMALS_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
-   VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-   VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    vtkActor* getActor();
+    vtkActor* getActor() const;
     void updateMeshNormals();
 
+    /**
+     * @name Slots methods
+     * @{
+     */
+
+    /// Slot: used to update mesh vertex
+    void updateVertex();
+
+    ///Slot: used to update point normals
+    void updatePointNormals();
+
+    /// Slot: used to update cell normals
+    void updateCellNormals();
+
+    /// Slot: used to show point normals
+    void showPointNormals();
+
+    /// Slot: used to show cell normals
+    void showCellNormals();
+
+    /// Slot: used to hide normals
+    void hideNormals();
+
+    /**
+     * @}
+     */
+
 private:
 
     NormalRepresentation m_normalRepresentation;
     vtkSmartPointer< vtkPolyData > m_polyData;
     vtkSmartPointer< vtkActor >    m_actor;
     static std::map< std::string, NormalRepresentation > m_normalRepresentationConversion;
+
+    /**
+     * @name Slots attributes
+     * @{
+     */
+    UpdateVertexSlotType::sptr m_slotUpdateVertex; ///< slot used to update mesh vertex
+    UpdatePointNormalsSlotType::sptr m_slotUpdatePointNormals; ///< slot used to update point normals
+    UpdateCellNormalsSlotType::sptr m_slotUpdateCellNormals; ///< slot used to update cell normals
+    ShowPointNormalsSlotType::sptr m_slotShowPointNormals; ///< slot used to show point normals
+    ShowCellNormalsSlotType::sptr m_slotShowCellNormals; ///< slot used to show cell normals
+    HideNormalsSlotType::sptr m_slotHideNormals; ///< slot used to hide normals
+    /// slot used to update normal mode (0: none, 1: point, 2: cell)
+    UpdateNormalModeSlotType::sptr m_slotUpdateNormalMode;
+    /**
+     * @}
+     */
 };
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_MESHNORMALS_HPP_
+#endif // __VISUVTKADAPTOR_MESHNORMALS_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshesBoxWidget.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshesBoxWidget.hpp
index 391eea5..f3390bb 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshesBoxWidget.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/MeshesBoxWidget.hpp
@@ -1,22 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_MESHESBOXWIDGET_HPP_
-#define _VISUVTKADAPTOR_MESHESBOXWIDGET_HPP_
+#ifndef __VISUVTKADAPTOR_MESHESBOXWIDGET_HPP__
+#define __VISUVTKADAPTOR_MESHESBOXWIDGET_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwCom/Connection.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwData/Composite.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#ifndef ANDROID
 
 class vtkBoxWidget2;
 class vtkCommand;
 class vtkPolyData;
-
+class vtkAssembly;
+class vtkActor;
 
 namespace visuVTKAdaptor
 {
@@ -24,15 +31,15 @@ namespace visuVTKAdaptor
 /**
  * @brief   Create a Box widget around the meshes contained in the composite.
  * @class   MeshesBoxWidget
- * 
+ *
  * @date    2010.
  */
-class VISUVTKADAPTOR_CLASS_API MeshesBoxWidget: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API MeshesBoxWidget : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (MeshesBoxWidget)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (MeshesBoxWidget)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API MeshesBoxWidget() throw();
 
@@ -41,24 +48,51 @@ public:
     /// Updates meshes transformation matrix from vtk box widget transform
     void updateFromVtk();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_ADD_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_CHANGE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_REMOVE_OBJECTS_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     /// Updates vtk transformation from data meshes
     void updateMeshTransform();
 
     /// Updates map from composite meshes
-    void updateMeshMapFromComposite(::fwData::Composite::sptr composite);
-
+    void updateMeshMapFromComposite(::fwData::Composite::ContainerType objects);
 
 private:
 
+    /**
+     * @name Slots methods
+     * @{
+     */
+    /// Slot: Updates the matrices
+    void updateMatrices();
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects, ::fwData::Composite::ContainerType oldObjects);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
+    /**
+     * @}
+     */
+
     typedef std::map< std::string, ::fwCom::Connection > ConnectionMapType;
     typedef std::map< std::string, vtkActor* > MeshMapType;
 
@@ -75,4 +109,6 @@ private:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_MESHESBOXWIDGET_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_MESHESBOXWIDGET_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Model.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Model.hpp
deleted file mode 100644
index 747a322..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Model.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_MODEL_HPP_
-#define _VISUVTKADAPTOR_MODEL_HPP_
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/MeshFactory.hpp"
-
-#include "visuVTKAdaptor/config.hpp"
-
-namespace visuVTKAdaptor
-{
-
-
-class VISUVTKADAPTOR_CLASS_API Model: public ::fwRenderVTK::IVtkAdaptorService, protected MeshFactory
-{
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (Model)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    VISUVTKADAPTOR_API Model() throw();
-
-    VISUVTKADAPTOR_API virtual ~Model() throw();
-
-protected:
-
-    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    // redraw all (stop then restart sub services)
-    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-};
-
-
-
-
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_MODEL_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ModelSeries.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ModelSeries.hpp
index bb4e7ba..82d08e5 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ModelSeries.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ModelSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,30 +26,98 @@ class VISUVTKADAPTOR_CLASS_API ModelSeries : public ::fwRenderVTK::IVtkAdaptorSe
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ModelSeries)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ModelSeries)(::fwRenderVTK::IVtkAdaptorService) );
+
+    /**
+     * @name Signals API
+     * @{
+     */
+    typedef ::fwCom::Signal< void ( SPTR(::fwData::Material) ) > TextureAppliedSignalType;
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_TEXTURE_APPLIED_SIG;
+    /** @} */
+
+    /**
+     * @name Slots API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_NORMAL_MODE_SLOT;
+    /// normal mode (0: none, 1: point, 2: cell), reconstruction fwID
+    typedef ::fwCom::Slot<void (std::uint8_t, std::string)> UpdateNormalModeSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_SHOW_RECONSTRUCTIONS_SLOT;
+    typedef ::fwCom::Slot<void (bool)> ShowReconstructionsSlotType;
+    /**
+     * @}
+     */
 
     VISUVTKADAPTOR_API ModelSeries() throw();
 
     VISUVTKADAPTOR_API virtual ~ModelSeries() throw();
 
-    void setClippingPlanes(::fwRenderVTK::VtkRenderService::VtkObjectIdType id){ m_clippingPlanes = id ; }
+    void setClippingPlanes(::fwRenderVTK::SRender::VtkObjectIdType id)
+    {
+        m_clippingPlanes = id;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect ModelSeries::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG to this::s_UPDATE_SLOT
+     * Connect ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     /// redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    /// manage SHOW/ADD/REMOVED_RECONSTRUCTIONS event
-   VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
+    ::fwRenderVTK::SRender::VtkObjectIdType m_clippingPlanes;
+
+    /**
+     * @name Slots methods
+     * @{
+     */
+
+    /**
+     * Slot: used to update normal display for the adaptor on object with givent uid 'recID'
+     * (0: none, 1: point, 2: cell)
+     */
+    void updateNormalMode(std::uint8_t mode, std::string recID);
+
+    /// Slot: show(or hide) reconstructions
+    void showReconstructions(bool show);
+    /**
+     * @}
+     */
 
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanes;
 
 private:
-    bool   m_autoResetCamera;
+    bool m_autoResetCamera;
+    std::string m_textureAdaptorUID;
+
+    /// Signal to emit when a texture must be applied on a material.
+    TextureAppliedSignalType::sptr m_sigTextureApplied;
+
+
+    /**
+     * @name Slots attributes
+     * @{
+     */
+    /// Slot to update normal diplay (0: none, 1: point, 2: cell)
+    UpdateNormalModeSlotType::sptr m_slotUpdateNormalMode;
+
+    /// Slot to show(or hide) reconstructions
+    ShowReconstructionsSlotType::sptr m_slotShowReconstructions;
+    /**
+     * @}
+     */
 };
 
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Namespace.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Namespace.hpp
index a6e090b..8129f0b 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Namespace.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Namespace.hpp
@@ -1,20 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIVISUVTKADAPTORNAMESPACE_HPP_
-#define UIVISUVTKADAPTORNAMESPACE_HPP_
+#ifndef __VISUVTKADAPTOR_NAMESPACE_HPP__
+#define __VISUVTKADAPTOR_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace visuVTKAdaptor contains the list of adaptors available for the generic scene. .
  * @namespace   visuVTKAdaptor
- * 
- * @date        2009-2010.
  *
  */
 namespace visuVTKAdaptor
 {
 }
-#endif /* UIVISUVTKADAPTORNAMESPACE_HPP_ */
+#endif /* __VISUVTKADAPTOR_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp
index 40653e4..4815c3f 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoMPR.hpp
@@ -1,29 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_NEGATOMPR_HPP_
-#define _VISUVTKADAPTOR_NEGATOMPR_HPP_
+#ifndef __VISUVTKADAPTOR_NEGATOMPR_HPP__
+#define __VISUVTKADAPTOR_NEGATOMPR_HPP__
 
-#include <boost/logic/tribool.hpp>
+#include "visuVTKAdaptor/config.hpp"
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#include <fwCom/helper/SigSlotConnection.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 namespace visuVTKAdaptor
 {
 
+class SliceCursor;
 
-class VISUVTKADAPTOR_CLASS_API NegatoMPR: public ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API NegatoMPR : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                           public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (NegatoMPR)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (NegatoMPR)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API NegatoMPR() throw();
 
@@ -36,16 +39,40 @@ public:
         THREE_SLICES
     } SliceMode;
 
-    void setAllowAlphaInTF(bool allow) {m_allowAlphaInTF = allow;};
-    void setInterpolation(bool interpolation){m_interpolation = interpolation;};
-    void setVtkImageSourceId(std::string id) {m_imageSourceId = id;};
+    void setAllowAlphaInTF(bool allow)
+    {
+        m_allowAlphaInTF = allow;
+    }
+    void setInterpolation(bool interpolation)
+    {
+        m_interpolation = interpolation;
+    }
+    void setVtkImageSourceId(std::string id)
+    {
+        m_imageSourceId = id;
+    }
+
+    VISUVTKADAPTOR_API void setSliceMode(SliceMode sliceMode);
+    VISUVTKADAPTOR_API SliceMode getSliceMode() const;
+    VISUVTKADAPTOR_API ::boost::logic::tribool is3dModeEnabled() const;
+    VISUVTKADAPTOR_API void set3dMode( bool enabled );
+
+    /// Set actor opacity
+    void setActorOpacity(double actorOpacity)
+    {
+        m_actorOpacity = actorOpacity;
+    }
 
-    void setSliceMode(SliceMode sliceMode);
-    SliceMode getSliceMode();
-    ::boost::logic::tribool is3dModeEnabled();
-    void set3dMode( bool enabled );
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
-protected :
+protected:
 
     typedef ::fwRuntime::ConfigurationElement::sptr Configuration;
 
@@ -53,28 +80,77 @@ protected :
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+
+    /**
+     * @brief Configures the service
+     *
+     * @code{.xml}
+       <adaptor id="negato" class="::visuVTKAdaptor::NegatoMPR" objectId="imageKey">
+           <config renderer="default" picker="negatodefault" mode="2d" slices="1" sliceIndex="axial"
+                   transform="trf" tfalpha="yes" interpolation="off" vtkimagesource="imgSource" actorOpacity="1.0"
+                   selectedTFKey="tkKey" tfSelectionFwID="selectionID" />
+       </adaptor>
+       @endcode
+     * - \b renderer (mandatory): defines the renderer to show the arrow. It must be different from the 3D objects renderer.
+     * - \b picker (mandatory): identifier of the picker
+     * - \b mode (optional, 2d or 3d): defines the scene mode. In 2d mode, the camera follow the negato in
+     * axial/frontal/sagital orientation. In 3d mode, the camera is automatically reset when the image is modified. If
+     * mode is not defined, the camera is free.
+     * - \b slices (optional, default=3): number of slices shown in the adaptor
+     * - \b sliceIndex (optional, axial/frontal/sagittal, default=axial): orientation of the negato
+     * - \b transform (optional): the vtkTransform to associate to the adaptor
+     * - \b tfalpha (optional, yes/no, default=no): if true, the opacity of the transfer function is used in the negato.
+     * - \b interpolation (optional, yes/no, default=yes): if true, the image pixels are interpolated
+     * - \b vtkimagesource (optional): source image, used for blend
+     * - \b actorOpacity (optional, default=1.0): actor opacity (float)
+     * - \b tfSelectionFwID (optional): fwID of the composite containing transfer functions
+     * - \b selectedTFKey (optional): key of the transfer function to use in negato
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
-    void addAdaptor(std::string adaptor, int axis=-1);
+    ::fwRenderVTK::IVtkAdaptorService::sptr addAdaptor(std::string adaptor, int axis = -1);
 
 
 private:
 
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+
+    /// Slot: update Slice mode (0: NO_SLICE, 1: ONE_SLICE, 3: THREE_SLICES)
+    void updateSliceMode(int mode);
+
+    /// Slot: show/hide slice
+    void showSlice(bool isShown);
+
+    /// Slot: set the slice cross scale. Forward the information to SliceCursor sub-adaptor.
+    void setCrossScale(double scale);
+    /**
+     * @}
+     */
+
     bool m_allowAlphaInTF;
     bool m_interpolation;
+    double m_actorOpacity;
 
     std::string m_imageSourceId;
 
+    std::string m_slicingStartingProxy; ///< channel of the proxy used to start slicing
+    std::string m_slicingStoppingProxy; ///< channel of the proxy used to stop slicing
+
+
     ::boost::logic::tribool m_3dModeEnabled;
     SliceMode m_sliceMode;
     SliceMode m_backupedSliceMode;
-};
-
-
+    ::fwCom::helper::SigSlotConnection m_connections; /// store subservices connections
 
+    ::fwRenderVTK::IVtkAdaptorService::wptr m_sliceCursor;
+};
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_NEGATOMPR_HPP_
+#endif // __VISUVTKADAPTOR_NEGATOMPR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoOneSlice.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoOneSlice.hpp
index 2a5b29e..c0d5cfc 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoOneSlice.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoOneSlice.hpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_NEGATOONESLICE_HPP_
-#define _VISUVTKADAPTOR_NEGATOONESLICE_HPP_
+#ifndef __VISUVTKADAPTOR_NEGATOONESLICE_HPP__
+#define __VISUVTKADAPTOR_NEGATOONESLICE_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/Image.hpp>
 
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkObject;
 
@@ -20,38 +22,86 @@ class vtkObject;
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API NegatoOneSlice: public ::fwComEd::helper::MedicalImageAdaptor, public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API NegatoOneSlice : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (NegatoOneSlice)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (NegatoOneSlice)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API NegatoOneSlice() throw();
 
     VISUVTKADAPTOR_API virtual ~NegatoOneSlice() throw();
 
-    void setAllowAlphaInTF(bool allow) {m_allowAlphaInTF = allow;};
-    void setInterpolation(bool interpolation){m_interpolation = interpolation;};
-    void setVtkImageSourceId(std::string id) {m_imageSourceId = id;};
-    void setVtkImageSource(vtkObject *obj)   {m_imageSource = obj;};
-
-protected :
+    void setAllowAlphaInTF(bool allow)
+    {
+        m_allowAlphaInTF = allow;
+    }
+    void setInterpolation(bool interpolation)
+    {
+        m_interpolation = interpolation;
+    }
+    void setVtkImageSourceId(std::string id)
+    {
+        m_imageSourceId = id;
+    }
+    void setVtkImageSource(vtkObject* obj)
+    {
+        m_imageSource = obj;
+    }
+    void setActorOpacity(double actorOpacity)
+    {
+        m_actorOpacity = actorOpacity;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_IMAGE_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_IMAGE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+
+    /**
+     * @brief Configures the service
+     *
+     * @code{.xml}
+       <adaptor id="negatoOneSlice" class="::visuVTKAdaptor::NegatoOneSlice" objectId="imageKey">
+           <config renderer="default" picker="negatodefault" sliceIndex="axial"
+                   transform="trf" tfalpha="yes" interpolation="off" vtkimagesource="imgSource" actorOpacity="1.0"
+                   selectedTFKey="tkKey" tfSelectionFwID="selectionID" />
+       </adaptor>
+       @endcode
+     * - \b renderer (mandatory): defines the renderer to show the arrow. It must be different from the 3D objects renderer.
+     * - \b picker (mandatory): identifier of the picker
+     * - \b sliceIndex (optional, axial/frontal/sagittal, default=axial): orientation of the negato
+     * - \b transform (optional): the vtkTransform to associate to the adaptor
+     * - \b interpolation (optional, yes/no, default=yes): if true, the image pixels are interpolated
+     * - \b vtkimagesource (optional): source image, used for blend
+     * - \b actorOpacity (optional, default=1.0): actor opacity (float)
+     * - \b tfSelectionFwID (optional): fwID of the composite containing transfer functions
+     * - \b selectedTFKey (optional): key of the transfer function to use in negato
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
     bool m_manageImageSource;
     std::string m_imageSourceId;
-    vtkObject  *m_imageSource;
+    vtkObject* m_imageSource;
 
     bool m_allowAlphaInTF;
     bool m_interpolation;
+    double m_actorOpacity;
 
     vtkObject* getImageSource();
     void cleanImageSource();
@@ -61,11 +111,22 @@ protected :
     ::fwRenderVTK::IVtkAdaptorService::wptr m_imageAdaptor;
     ::fwRenderVTK::IVtkAdaptorService::wptr m_imageSliceAdaptor;
 
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+
+    /// Slot: update image
+    void updateImage();
+    /**
+     * @}
+     */
 };
 
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_NEGATOONESLICE_HPP_
+#endif // __VISUVTKADAPTOR_NEGATOONESLICE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoSlicingInteractor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoSlicingInteractor.hpp
index 08de877..ee445e3 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoSlicingInteractor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoSlicingInteractor.hpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_NEGATOSLICINGINTERACTOR_HPP_
-#define _VISUVTKADAPTOR_NEGATOSLICINGINTERACTOR_HPP_
+#ifndef __VISUVTKADAPTOR_NEGATOSLICINGINTERACTOR_HPP__
+#define __VISUVTKADAPTOR_NEGATOSLICINGINTERACTOR_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class VISUVTKADAPTOR_CLASS_API vtkCommand;
 
@@ -21,12 +23,13 @@ namespace visuVTKAdaptor
 
 
 
-class VISUVTKADAPTOR_CLASS_API NegatoSlicingInteractor: public ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService 
+class VISUVTKADAPTOR_CLASS_API NegatoSlicingInteractor : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                         public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (NegatoSlicingInteractor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (NegatoSlicingInteractor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API NegatoSlicingInteractor() throw();
 
@@ -40,24 +43,74 @@ public:
 
     VISUVTKADAPTOR_API void pushSlice( int factor, Orientation axis);
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when slicing is updated
+    typedef ::fwCom::Signal< void () > SlicingStartedSignalType;
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_SLICING_STARTED_SIG;
+
+    /// Type of signal when slicing is stopped
+    typedef ::fwCom::Signal< void () > SlicingStoppedSignalType;
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_SLICING_STOPPED_SIG;
+    /**
+     * @}
+     */
+
 protected:
 
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+    /**
+     * @}
+     */
+
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
-    vtkCommand *m_vtkObserver;
+    vtkCommand* m_vtkObserver;
     double m_priority;
-};
 
 
+private:
 
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Signal emitted when slicing is started
+    SlicingStartedSignalType::sptr m_sigSlicingStarted;
+    /// Signal emitted when slicing is stopped
+    SlicingStoppedSignalType::sptr m_sigSlicingStopped;
+    /**
+     * @}
+     */
+};
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_NEGATOSLICINGINTERACTOR_HPP_
+#endif // __VISUVTKADAPTOR_NEGATOSLICINGINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoWindowingInteractor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoWindowingInteractor.hpp
index 9d3ca95..9f2938f 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoWindowingInteractor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/NegatoWindowingInteractor.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_NEGATOWINDOWINGINTERACTOR_HPP_
-#define _VISUVTKADAPTOR_NEGATOWINDOWINGINTERACTOR_HPP_
+#ifndef __VISUVTKADAPTOR_NEGATOWINDOWINGINTERACTOR_HPP__
+#define __VISUVTKADAPTOR_NEGATOWINDOWINGINTERACTOR_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 class vtkCommand;
 
@@ -21,12 +22,13 @@ namespace visuVTKAdaptor
 
 
 
-class VISUVTKADAPTOR_CLASS_API NegatoWindowingInteractor: public ::fwComEd::helper::MedicalImageAdaptor, public ::fwRenderVTK::IVtkAdaptorService 
+class VISUVTKADAPTOR_CLASS_API NegatoWindowingInteractor : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                           public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (NegatoWindowingInteractor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (NegatoWindowingInteractor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API NegatoWindowingInteractor() throw();
 
@@ -36,22 +38,30 @@ public:
 
     VISUVTKADAPTOR_API void stopWindowing();
 
-    VISUVTKADAPTOR_API void updateWindowing( double , double);
+    VISUVTKADAPTOR_API void updateWindowing( double, double);
 
     VISUVTKADAPTOR_API void resetWindowing();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
-    vtkCommand *m_vtkObserver;
+    vtkCommand* m_vtkObserver;
     double m_initialWindow;
     double m_initialLevel;
     double m_priority;
@@ -62,4 +72,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_NEGATOWINDOWINGINTERACTOR_HPP_
+#endif // __VISUVTKADAPTOR_NEGATOWINDOWINGINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Normals.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Normals.hpp
deleted file mode 100644
index 0e5bce2..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Normals.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_NORMALS_HPP_
-#define _VISUVTKADAPTOR_NORMALS_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include <vtkCommand.h>
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
-
-class vtkActor;
-class vtkActor2D;
-class vtkAlgorithmOutput;
-
-namespace visuVTKAdaptor
-{
-
-
-class VISUVTKADAPTOR_CLASS_API Normals: public ::fwRenderVTK::IVtkAdaptorService
-{
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (Normals)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    VISUVTKADAPTOR_API Normals() throw();
-
-    VISUVTKADAPTOR_API virtual ~Normals() throw();
-
-    VISUVTKADAPTOR_API void setMapperInput(vtkAlgorithmOutput *input);
-
-protected:
-
-   VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-   VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-
-
-    vtkActor* getActor();
-    void updateNormals();
-
-private:
-
-    vtkAlgorithmOutput *m_mapperInput;
-
-    vtkActor   * m_actor ;
-    vtkActor2D * m_ptsIdActor2D ;
-    vtkActor2D * m_cellsIdActor2D ;
-};
-
-
-
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_NORMALS_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/OrientationMarker.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/OrientationMarker.hpp
new file mode 100644
index 0000000..65cd5f9
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/OrientationMarker.hpp
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VISUVTKADAPTOR_ORIENTATIONMARKER_HPP__
+#define __VISUVTKADAPTOR_ORIENTATIONMARKER_HPP__
+
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
+namespace visuVTKAdaptor
+{
+
+/**
+ * @brief Adaptor using for displayed an orientationMarker in a generic scene
+ */
+class VISUVTKADAPTOR_CLASS_API OrientationMarker : public ::fwRenderVTK::IVtkAdaptorService
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (OrientationMarker)(::fwRenderVTK::IVtkAdaptorService) );
+    VISUVTKADAPTOR_API OrientationMarker();
+
+protected:
+    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
+
+    /**
+     * @name Does nothing
+     * @{ */
+    void doSwap() throw(fwTools::Failed)
+    {
+    }
+    void doUpdate() throw(fwTools::Failed)
+    {
+    }
+    /**  @} */
+
+    /**
+     * @brief Configure the adaptor
+     *
+     * Example :
+       @code{.xml}
+       <adaptor id="visu" class="::visuVTKAdaptor::Text" objectId="self">
+         <config renderer="default" hAlign="right" />
+       </adaptor>
+       @endcode
+     */
+    void doConfigure() throw(fwTools::Failed);
+
+    /// Horizontal alignment
+    std::string m_hAlign;
+};
+} //namespace visuVTKAdaptor
+
+#endif // ANDROID
+
+#endif //__VISUVTKADAPTOR_ORIENTATIONMARKER_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PickerInteractor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PickerInteractor.hpp
index 97975e0..e859cbd 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PickerInteractor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PickerInteractor.hpp
@@ -1,53 +1,101 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_PICKERINTERACTOR_HPP_
-#define _VISUVTKADAPTOR_PICKERINTERACTOR_HPP_
+#ifndef __VISUVTKADAPTOR_PICKERINTERACTOR_HPP__
+#define __VISUVTKADAPTOR_PICKERINTERACTOR_HPP__
 
-#include <vector>
+#include "visuVTKAdaptor/MeshFactory.hpp"
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <fwDataTools/PickingInfo.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/MeshFactory.hpp"
+#include <vtkCommand.h>
+
+#include <vector>
 
-class vtkCommand;
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API PickerInteractor: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API PickerInteractor : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PickerInteractor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PickerInteractor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PickerInteractor() throw();
 
     VISUVTKADAPTOR_API virtual ~PickerInteractor() throw();
 
+    /**
+     * @name Signals API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_PICKED_SIGNAL;
+    typedef ::fwCom::Signal<void (::fwDataTools::PickingInfo)> PickedSignalType;
+    ///@}
+
+    typedef enum
+    {
+        MOUSE_LEFT_UP       = vtkCommand::LeftButtonReleaseEvent,
+        MOUSE_RIGHT_UP      = vtkCommand::RightButtonReleaseEvent,
+        MOUSE_MIDDLE_UP     = vtkCommand::MiddleButtonReleaseEvent,
+        MOUSE_WHEELFORWARD  = vtkCommand::MouseWheelForwardEvent,
+        MOUSE_LEFT_DOWN     = vtkCommand::LeftButtonPressEvent,
+        MOUSE_RIGHT_DOWN    = vtkCommand::RightButtonPressEvent,
+        MOUSE_MIDDLE_DOWN   = vtkCommand::MiddleButtonPressEvent,
+        MOUSE_WHEELBACKWARD = vtkCommand::MouseWheelBackwardEvent,
+        MOUSE_MOVE          = vtkCommand::MouseMoveEvent,
+        KEY_PRESS           = vtkCommand::KeyPressEvent
+    } EventID;
+    typedef std::set< EventID > SetEventIdType;
+
 protected:
-    friend class PickerInteractorCallback;
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    /**
+     * @brief Configure the adaptor
+     *
+     * Example :
+           @code{.xml}
+           <adaptor id="text" class="::visuVTKRDAdaptor::SCellPickerInteractor" objectId="self">
+            <config renderer="default" picker="myPicker" event="MOUSE_RIGHT_UP" />
+           </adaptor>
+           @endcode
+     * - renderer : the identifier of the renderer.
+     * - picker : the identifier of the picker.
+     * - event : the identifier(s) of the event on which the adaptor is picking.
+     *   Possible values are:
+     *   - MOUSE_LEFT_UP
+     *   - MOUSE_RIGHT_UP
+     *   - MOUSE_MIDDLE_UP
+     *   - MOUSE_WHEELFORWARD
+     *   - MOUSE_LEFT_DOWN
+     *   - MOUSE_RIGHT_DOWN
+     *   - MOUSE_MIDDLE_DOWN
+     *   - MOUSE_WHEELBACKWARD
+     *   - MOUSE_MOVE
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed){};
-
-    VISUVTKADAPTOR_API void notifyEvent(::fwComEd::InteractionMsg::sptr msg);
-
-
 
-    vtkCommand *m_interactionCommand;
-    float m_priority;
+    typedef std::map< std::string, EventID > MapEventIdType; ///< typedef for the map (seen below).
+    static MapEventIdType m_eventIdConversion; ///< map containing the association between 'event text' and 'event ID'.
 
+    vtkCommand* m_interactionCommand; ///< the vtk mouse events observer
+    SetEventIdType m_eventId; ///< event ID treated for picking
 };
 
 
@@ -55,4 +103,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PICKERINTERACTOR_HPP_
+#endif // __VISUVTKADAPTOR_PICKERINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plane.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plane.hpp
index 26d1874..29d2df6 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plane.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plane.hpp
@@ -1,25 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_PLANE_HPP_
-#define _VISUVTKADAPTOR_PLANE_HPP_
+#ifndef __VISUVTKADAPTOR_PLANE_HPP__
+#define __VISUVTKADAPTOR_PLANE_HPP__
 
-#include <fwServices/ObjectMsg.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#ifndef ANDROID
 
 #include "visuVTKAdaptor/config.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Plane.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
+
 class vtkPlaneSource;
 class vtkPlaneCollection;
 class vtkPlane;
 class vtkObject;
+class vtkActor;
 
 namespace fwData
 {
-    class Plane;
+class Plane;
 }
 
 namespace visuVTKAdaptor
@@ -27,44 +35,79 @@ namespace visuVTKAdaptor
 
 
 
-class VISUVTKADAPTOR_CLASS_API Plane: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Plane : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Plane)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Plane)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Plane() throw();
 
     VISUVTKADAPTOR_API virtual ~Plane() throw();
 
-    VISUVTKADAPTOR_API void setVtkPlaneCollection( vtkObject * col );
+    VISUVTKADAPTOR_API void setVtkPlaneCollection( vtkObject* col );
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Plane::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Plane::s_SELECTED_SIG to this::s_SELECT_PLANE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when plane interaction is started (store current plane)
+    typedef ::fwCom::Signal< void (::fwData::Plane::sptr) > InteractionStartedSignalType;
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_INTERACTION_STARTED_SIG;
+    /**
+     * @}
+     */
 
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Update the plane from the points and notify planes is modified
+    void updatePoints();
+
+    /// Re-notify "startInteraction" for this service
+    void startInteraction();
+
+    /// Changes points color (red is selected, else white)
     void selectPlane(bool select);
+    /**
+     * @}
+     */
 
 private:
 
     vtkPlaneSource* m_vtkPlane;
-    vtkActor *m_actorPlan;
-    fwData::Plane::wptr m_pPlane;
+    vtkActor* m_actorPlan;
+    ::fwData::Plane::wptr m_pPlane;
 
     vtkPlane* m_vtkImplicitPlane;
     vtkPlaneCollection* m_vtkPlaneCollection;
 
     /// register connections between plane's points and this service
-    ::fwServices::helper::SigSlotConnection::sptr m_connections;
+    ::fwCom::helper::SigSlotConnection m_connections;
 };
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PLANE_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_PLANE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneInteractor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneInteractor.hpp
index ff5a2c3..c012b19 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneInteractor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneInteractor.hpp
@@ -1,30 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_PLANEINTERACTOR_HPP_
-#define _VISUVTKADAPTOR_PLANEINTERACTOR_HPP_
+#ifndef __VISUVTKADAPTOR_PLANEINTERACTOR_HPP__
+#define __VISUVTKADAPTOR_PLANEINTERACTOR_HPP__
 
-#include <fwData/TransferFunction.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#ifndef ANDROID
 
 #include "visuVTKAdaptor/config.hpp"
 
+#include <fwData/TransferFunction.hpp>
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
 
 class vtkCommand;
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API PlaneInteractor: public ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService 
+class VISUVTKADAPTOR_CLASS_API PlaneInteractor : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                 public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PlaneInteractor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PlaneInteractor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PlaneInteractor() throw();
 
@@ -41,13 +46,12 @@ protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
-    vtkCommand *m_vtkObserver;
+    vtkCommand* m_vtkObserver;
     double m_priority;
 };
 
@@ -56,4 +60,6 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PLANEINTERACTOR_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_PLANEINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneList.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneList.hpp
index e69e096..282b270 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneList.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneList.hpp
@@ -1,16 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_PLANELIST_HPP_
-#define _VISUVTKADAPTOR_PLANELIST_HPP_
+#ifndef __VISUVTKADAPTOR_PLANELIST_HPP__
+#define __VISUVTKADAPTOR_PLANELIST_HPP__
 
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#ifndef ANDROID
 
-#include "visuVTKAdaptor/config.hpp"
 #include "visuVTKAdaptor/MeshFactory.hpp"
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 
 class vtkCommand;
@@ -19,35 +23,61 @@ namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API PlaneList: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API PlaneList : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PlaneList)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PlaneList)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PlaneList() throw();
 
     VISUVTKADAPTOR_API virtual ~PlaneList() throw();
 
-    void setPlaneCollectionId(::fwRenderVTK::VtkRenderService::VtkObjectIdType id) { m_planeCollectionId = id; }
+    void setPlaneCollectionId(::fwRenderVTK::SRender::VtkObjectIdType id)
+    {
+        m_planeCollectionId = id;
+    }
 
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType getPlaneCollectionId() { return m_planeCollectionId; }
+    ::fwRenderVTK::SRender::VtkObjectIdType getPlaneCollectionId() const
+    {
+        return m_planeCollectionId;
+    }
 
 protected:
 
+    /// Type of signal emitted when plane selection changed
+    typedef  ::fwCom::Signal< void (::fwData::Plane::sptr) > SelectedignalType;
+
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
+    /// Slot: Update plane selection
+    void updateSelection(::fwData::Plane::sptr plane);
+
+    vtkCommand* m_rightButtonCommand;
+    ::fwRenderVTK::SRender::VtkObjectIdType m_planeCollectionId;
 
+    /// Store connections to planes adaptors.
+    ::fwCom::helper::SigSlotConnection m_planeConnections;
 
-    vtkCommand * m_rightButtonCommand;
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_planeCollectionId;
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Update planes (call doStop-soStart())
+    void updatePlanes();
+
+    /// Show/hide planes
+    void showPlanes(bool visible);
+    /**
+     * @}
+     */
 };
 
 
@@ -55,4 +85,6 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PLANELIST_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_PLANELIST_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp
index e02fcdb..f235e53 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelectionNotifier.hpp
@@ -1,44 +1,74 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#ifndef _VISUVTKADAPTOR_PLANESELECTIONNOTIFIER_HPP_
-#define _VISUVTKADAPTOR_PLANESELECTIONNOTIFIER_HPP_
+#ifndef __VISUVTKADAPTOR_PLANESELECTIONNOTIFIER_HPP__
+#define __VISUVTKADAPTOR_PLANESELECTIONNOTIFIER_HPP__
 
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwCom/Connection.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <fwData/Composite.hpp>
 #include <fwData/Object.hpp>
 #include <fwData/PlaneList.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API PlaneSelectionNotifier: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Update selection plan in resection activity
+ */
+class VISUVTKADAPTOR_CLASS_API PlaneSelectionNotifier : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PlaneSelectionNotifier)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PlaneSelectionNotifier)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PlaneSelectionNotifier() throw();
 
     VISUVTKADAPTOR_API virtual ~PlaneSelectionNotifier() throw();
 
-    VISUVTKADAPTOR_API void setPlaneListId(std::string id)
-    { m_planeListId = id; }
-
-    VISUVTKADAPTOR_API void setPlaneSelectionId(std::string id)
-    { m_planeSelectionId = id;}
-
+    void setPlaneListId(const std::string& id)
+    {
+        m_planeListId = id;
+    }
+
+    void setPlaneSelectionId(const std::string& id)
+    {
+        m_planeSelectionId = id;
+    }
+
+    /**
+     * @brief Slot: adds/swaps the plane is the composite.
+     *
+     * @note It can be connected to ::visuVTKAdaptor::PlaneList's "selected" signal.
+     */
     VISUVTKADAPTOR_API void selectPlane( ::fwData::Object::sptr plane );
 
     VISUVTKADAPTOR_API void deselectPlane();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_PLANELIST_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_UPDATE_PLANELIST_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_PLANELIST_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     typedef std::map < std::string, ::fwCom::Connection > ConnetionMapType;
@@ -46,11 +76,10 @@ protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    
+
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     std::string m_planeListId;
     std::string m_planeSelectionId;
@@ -58,16 +87,43 @@ protected:
     ::fwData::PlaneList::wptr m_currentPlaneList;
 
     /// Register connection between planelist and this adaptor
-    ::fwCom::Connection m_plConnection;
+    ::fwCom::helper::SigSlotConnection m_plConnection;
 
     /// Register connection between plane and this service
     ConnetionMapType m_planeConnections;
 
-};
+private:
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// If selected==false, the planes are deselected.
+    void updateSelection(bool selected);
+
+    /// Adds plane
+    void addPlane(::fwData::Plane::sptr plane);
+
+    /// Removes plane
+    void removePlane(::fwData::Plane::sptr plane);
 
+    /// Show/hide planes
+    void showPlanes(bool visible);
 
+    /// Slot: update scene if planeList changed
+    void updatePlaneList(::fwData::Composite::ContainerType objects);
+
+    typedef fwCom::Slot <void (::fwData::Composite::ContainerType)> UpdatePlaneListSlotType;
+    UpdatePlaneListSlotType::sptr m_slotUpdatePlaneList;
+    /**
+     * @}
+     */
+
+};
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PLANESELECTIONNOTIFIER_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_PLANESELECTIONNOTIFIER_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp
index e8471fc..b7a173d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PlaneSelector.hpp
@@ -1,29 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#ifndef _VISUVTKADAPTOR_PLANESELECTOR_HPP_
-#define _VISUVTKADAPTOR_PLANESELECTOR_HPP_
+#ifndef __VISUVTKADAPTOR_PLANESELECTOR_HPP__
+#define __VISUVTKADAPTOR_PLANESELECTOR_HPP__
+
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/Object.hpp>
 #include <fwData/PlaneList.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API PlaneSelector: public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief Manage the current selected plan
+ */
+class VISUVTKADAPTOR_CLASS_API PlaneSelector : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PlaneSelector)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PlaneSelector)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PlaneSelector() throw();
 
@@ -36,11 +42,10 @@ protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    
+
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     ::fwData::Object::wptr m_currentObject;
 };
@@ -50,4 +55,6 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PLANESELECTOR_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_PLANESELECTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plugin.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plugin.hpp
index e240d29..a5b3699 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plugin.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Plugin.hpp
@@ -1,15 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_PLUGIN_HPP_
-#define _VISUVTKADAPTOR_PLUGIN_HPP_
+#ifndef __VISUVTKADAPTOR_PLUGIN_HPP__
+#define __VISUVTKADAPTOR_PLUGIN_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwRuntime/Plugin.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 namespace visuVTKAdaptor
 {
@@ -17,8 +18,6 @@ namespace visuVTKAdaptor
 /**
  * @brief   This class is started when the bundles is loaded.
  * @class   Plugin
- * 
- * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
 {
@@ -26,15 +25,15 @@ struct Plugin : public ::fwRuntime::Plugin
      * @brief   destructor
      */
     ~Plugin() throw();
-    
+
     // Overrides
     void start() throw(::fwRuntime::RuntimeException);
 
-    // Overrides    
+    // Overrides
     void stop() throw();
-    
+
 };
 
-} // namespace visuVTK
+} // namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PLUGIN_HPP_
+#endif // __VISUVTKADAPTOR_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Point.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Point.hpp
index 380afbe..a64751a 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Point.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Point.hpp
@@ -1,34 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_POINT_HPP_
-#define _VISUVTKADAPTOR_POINT_HPP_
+#ifndef __VISUVTKADAPTOR_POINT_HPP__
 
+#ifndef __VISUVTKADAPTOR_POINT_HPP__
+#define __VISUVTKADAPTOR_POINT_HPP__
 
-#include <fwServices/ObjectMsg.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 #include "visuVTKAdaptor/config.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
+
 class vtkHandleWidget;
 class vtkHandleRepresentation;
 class vtkCommand;
 
-
-
 namespace visuVTKAdaptor
 {
 
-
-class VISUVTKADAPTOR_CLASS_API Point: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Point : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Point)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Point)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Point() throw();
 
@@ -38,18 +40,35 @@ public:
 
     VISUVTKADAPTOR_API void setSelectedColor(double red, double green, double blue, double alpha = 1.0);
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Point::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @Signals
+     * @{
+     */
+    /// Type of signal when point interaction is started
+    typedef ::fwCom::Signal< void () > InteractionStartedSignalType;
+    VISUVTKADAPTOR_API static const ::fwCom::Signals::SignalKeyType s_INTERACTION_STARTED_SIG;
+    /**
+     * @}
+     */
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
 
-
-protected:
+private:
     vtkHandleWidget         * m_handle;
     vtkHandleRepresentation * m_representation;
     vtkCommand              * m_pointUpdateCommand;
@@ -61,4 +80,6 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_POINT_HPP_
+#endif // __VISUVTKADAPTOR_POINT_HPP__
+
+#endif // __VISUVTKADAPTOR_POINT_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointLabel.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointLabel.hpp
index 947f537..b82dd4a 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointLabel.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointLabel.hpp
@@ -1,51 +1,51 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_POINTLABEL_HPP_
-#define _VISUVTKADAPTOR_POINTLABEL_HPP_
+#ifndef __VISUVTKADAPTOR_POINTLABEL_HPP__
+#define __VISUVTKADAPTOR_POINTLABEL_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
+#include "visuVTKAdaptor/Text.hpp"
 
 #include <string>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/Text.hpp"
 
 class VISUVTKADAPTOR_CLASS_API vtkTextActor;
 
 namespace visuVTKAdaptor
 {
 
-
-
-class VISUVTKADAPTOR_CLASS_API PointLabel: public Text
+class VISUVTKADAPTOR_CLASS_API PointLabel : public Text
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (PointLabel)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PointLabel)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PointLabel();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Point::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
 
     void starting() throw(::fwTools::Failed);
     void stopping() throw(::fwTools::Failed);
-
-
-
-
 };
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif //  _VISUVTKADAPTOR_POINTLABEL_HPP_
+#endif // __VISUVTKADAPTOR_POINTLABEL_HPP__
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointList.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointList.hpp
index b759a13..b742987 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointList.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointList.hpp
@@ -1,58 +1,86 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_POINTLIST_HPP_
-#define _VISUVTKADAPTOR_POINTLIST_HPP_
+#ifndef __VISUVTKADAPTOR_POINTLIST_HPP__
+#define __VISUVTKADAPTOR_POINTLIST_HPP__
 
-#include <set>
-#include <vector>
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#ifndef ANDROID
 
 #include "visuVTKAdaptor/config.hpp"
 #include "visuVTKAdaptor/MeshFactory.hpp"
 
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
+#include <fwData/Point.hpp>
+
+#include <set>
+#include <vector>
+
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API PointList: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API PointList : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
     typedef std::vector< WPTR(::fwData::Point) > WeakPointListType;
     typedef std::set< WPTR(::fwData::Point) > WeakPointSetType;
 
-    fwCoreServiceClassDefinitionsMacro ( (PointList)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PointList)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PointList() throw();
 
     VISUVTKADAPTOR_API virtual ~PointList() throw();
 
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect PointList::s_MODIFIED_SIG to this::s_UPDATE_SPLINE_SLOT
+     * Connect PointList::s_POINT_ADDED_SIG to this::s_ADD_POINT_SLOT
+     * Connect PointList::s_POINT_REMOVED_SIG to this::s_REMOVE_POINT_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void createServices(WeakPointListType &wPtList);
     VISUVTKADAPTOR_API WeakPointListType getWeakPointList();
     VISUVTKADAPTOR_API WeakPointListType getNewPoints();
 
-     WeakPointListType m_oldWeakPointList;
-     WeakPointListType m_weakPointList;
+    WeakPointListType m_oldWeakPointList;
+    WeakPointListType m_weakPointList;
 
-};
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Adds a point into the spline
+    void addPoint(::fwData::Point::sptr point);
 
+    /// Updates the spline's points
+    void updateSpline();
+    /**
+     * @}
+     */
 
+};
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_POINTLIST_HPP_
+#endif // ANDROID
+
+#endif // __VISUVTKADAPTOR_POINTLIST_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointListInteractor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointListInteractor.hpp
index 60e3d0c..5c2beb9 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointListInteractor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/PointListInteractor.hpp
@@ -1,30 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_POINTLISTINTERACTOR_HPP_
-#define _VISUVTKADAPTOR_POINTLISTINTERACTOR_HPP_
+#ifndef __VISUVTKADAPTOR_POINTLISTINTERACTOR_HPP__
+#define __VISUVTKADAPTOR_POINTLISTINTERACTOR_HPP__
 
-#include <vector>
+#include "visuVTKAdaptor/config.hpp"
+#include "visuVTKAdaptor/MeshFactory.hpp"
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/MeshFactory.hpp"
+#include <vector>
 
 class vtkCommand;
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API PointListInteractor: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API PointListInteractor : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (PointListInteractor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (PointListInteractor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API PointListInteractor() throw();
 
@@ -39,21 +39,15 @@ protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed){};
-
-
 
     vtkCommand *m_interactionCommand;
     float m_priority;
-
 };
 
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_POINTLISTINTERACTOR_HPP_
+#endif // __VISUVTKADAPTOR_POINTLISTINTERACTOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp
index ac3639d..69eb824 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ProbeCursor.hpp
@@ -1,19 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_PROBECURSOR_HPP_
-#define _VISUVTKADAPTOR_PROBECURSOR_HPP_
+#ifndef __VISUVTKADAPTOR_PROBECURSOR_HPP__
+#define __VISUVTKADAPTOR_PROBECURSOR_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
 
 class vtkCommand;
 class vtkActor;
@@ -25,11 +26,15 @@ class vtkPolyDataMapper;
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API ProbeCursor: public  ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService 
+/**
+ * @brief Cursor management
+ */
+class VISUVTKADAPTOR_CLASS_API ProbeCursor : public  ::fwDataTools::helper::MedicalImageAdaptor,
+                                             public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ProbeCursor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ProbeCursor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ProbeCursor() throw();
 
@@ -39,43 +44,58 @@ public:
 
     VISUVTKADAPTOR_API void setVisibility( bool visibility );
 
-    VISUVTKADAPTOR_API void StartProbeCursor();
+    VISUVTKADAPTOR_API void startProbeCursor();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_BUFFER_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     void buildTextActor();
     void buildPolyData();
 
-    void computeCrossExtremity( const int probeSlice[3] , double worldCross[4][3] );
+    void computeCrossExtremity( const int probeSlice[3], double worldCross[4][3] );
 
 
     double m_priority;
 
-    vtkCommand *m_vtkObserver;
+    vtkCommand* m_vtkObserver;
 
-    vtkActor2D * m_textActor; // rendering defect using a vtkTextActor
-    vtkTextMapper * m_textMapper;
-
-    vtkPolyData         *m_cursorPolyData;
-    vtkPolyDataMapper   *m_cursorMapper;
-    vtkActor            *m_cursorActor;
+    vtkActor2D* m_textActor;  // rendering defect using a vtkTextActor
+    vtkTextMapper* m_textMapper;
 
+    vtkPolyData* m_cursorPolyData;
+    vtkPolyDataMapper* m_cursorMapper;
+    vtkActor* m_cursorActor;
 
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+    /**
+     * @}
+     */
 
 };
 
-
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_PROBECURSOR_HPP_
+#endif // __VISUVTKADAPTOR_PROBECURSOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Reconstruction.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Reconstruction.hpp
index 0d75150..c4fc417 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Reconstruction.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Reconstruction.hpp
@@ -1,68 +1,150 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_RECONSTRUCTION_HPP_
-#define _VISUVTKADAPTOR_RECONSTRUCTION_HPP_
+#ifndef __VISUVTKADAPTOR_RECONSTRUCTION_HPP__
+#define __VISUVTKADAPTOR_RECONSTRUCTION_HPP__
 
-#include <fwServices/ObjectMsg.hpp>
+#include "visuVTKAdaptor/config.hpp"
+#include "visuVTKAdaptor/MeshFactory.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/MeshFactory.hpp"
+namespace fwData
+{
+class Mesh;
+}
 
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Reconstruction: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Reconstruction : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Reconstruction)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Reconstruction)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Reconstruction() throw();
 
     VISUVTKADAPTOR_API virtual ~Reconstruction() throw();
 
-    void setClippingPlanes(::fwRenderVTK::VtkRenderService::VtkObjectIdType id){ m_clippingPlanesId = id ; }
+    void setClippingPlanes(::fwRenderVTK::SRender::VtkObjectIdType id)
+    {
+        m_clippingPlanesId = id;
+    }
 
-    void setSharpEdgeAngle(double angle){ m_sharpEdgeAngle = angle; }
+    void setSharpEdgeAngle(double angle)
+    {
+        m_sharpEdgeAngle = angle;
+    }
 
     VISUVTKADAPTOR_API void setForceHide(bool hide);
 
+    /// Set underlying actor visible or not
+    VISUVTKADAPTOR_API void setVisibility(bool visible);
+
     /// Active/Inactive automatic reset on camera for triangular mesh adaptor. By default =true.
     VISUVTKADAPTOR_API void setAutoResetCamera(bool autoResetCamera);
 
+    /// Retrieve a weak_ptr on underlying mesh adaptor service
+    ::fwRenderVTK::IVtkAdaptorService::wptr getMeshService() const
+    {
+        return m_meshService;
+    }
+
+    /**
+     * @name Slots API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_MESH_SLOT;
+    /// slot used to update mesh
+    typedef ::fwCom::Slot<void (SPTR(::fwData::Mesh))> UpdateMeshSlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_VISIBILITY_SLOT;
+    /// slot used to update visibility
+    typedef ::fwCom::Slot<void ()> UpdateVisibilitySlotType;
+
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_NORMAL_MODE_SLOT;
+    /// slot used to update normal mode (0: none, 1: point, 2: cell)
+    typedef ::fwCom::Slot<void (std::uint8_t)> UpdateNormalModeSlotType;
+
+    /// Slot: used to update normal display(0: none, 1: point, 2: cell)
+    void updateNormalMode(std::uint8_t mode);
+    /**
+     * @}
+     */
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Reconstruction::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Reconstruction::s_MESH_CHANGED_SIG to this::s_UPDATE_MESH_SLOT
+     * Connect Reconstruction::s_VISIBILITY_MODIFIED_SIG to this::s_UPDATE_VISIBILITY_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API virtual void doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-
     void createMeshService();
 
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanesId;
+    ::fwRenderVTK::SRender::VtkObjectIdType m_clippingPlanesId;
 
     ::fwRenderVTK::IVtkAdaptorService::wptr m_meshService;
 
-    double      m_sharpEdgeAngle;
+    double m_sharpEdgeAngle;
+
+    /**
+     * @name Slots methods
+     * @{
+     */
+
+    /// Slot: update mesh
+    void updateMesh(SPTR(::fwData::Mesh));
+
+    /// Slot: update visibility
+    void updateVisibility();
+
+    /**
+     * @}
+     */
 
 private:
-    bool   m_autoResetCamera;
-};
+    bool m_autoResetCamera;
+
+    /**
+     * @name Slots attributes
+     * @{
+     */
 
+    /// Slot used to update mesh
+    UpdateMeshSlotType::sptr m_slotUpdateMesh;
 
+    /// Slot used to update visibility
+    UpdateVisibilitySlotType::sptr m_slotUpdateVisibility;
+
+    /// slot used to update normal mode (0: none, 1: point, 2: cell)
+    UpdateNormalModeSlotType::sptr m_slotUpdateNormalMode;
+    /**
+     * @}
+     */
+};
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_RECONSTRUCTION_HPP_
+#endif // __VISUVTKADAPTOR_RECONSTRUCTION_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Render.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Render.hpp
deleted file mode 100644
index d371ada..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Render.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_RENDER_HPP_
-#define _VISUVTKADAPTOR_RENDER_HPP_
-
-#include <vector>
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
-
-namespace visuVTKAdaptor
-{
-
-
-class VISUVTKADAPTOR_CLASS_API Render: public ::fwRenderVTK::IVtkAdaptorService
-{
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (Render)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    VISUVTKADAPTOR_API Render() throw();
-
-    VISUVTKADAPTOR_API virtual ~Render() throw();
-
-protected:
-
-    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    // redraw all (stop then restart sub services)
-    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-
-    // manage only "ShowReconstructions" Field
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-};
-
-
-
-
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_RENDER_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Resection.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Resection.hpp
index 1945455..106b185 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Resection.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Resection.hpp
@@ -1,52 +1,63 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_RESECTION_HPP_
-#define _VISUVTKADAPTOR_RESECTION_HPP_
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#ifndef __VISUVTKADAPTOR_RESECTION_HPP__
+#define __VISUVTKADAPTOR_RESECTION_HPP__
 
 #include "visuVTKAdaptor/config.hpp"
 #include "visuVTKAdaptor/MeshFactory.hpp"
 
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 namespace visuVTKAdaptor
 {
 
-
-
-class VISUVTKADAPTOR_CLASS_API Resection: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Resection : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Resection)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Resection)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Resection() throw();
 
     VISUVTKADAPTOR_API virtual ~Resection() throw();
 
-    void setClippingPlanes(::fwRenderVTK::VtkRenderService::VtkObjectIdType id){ m_clippingPlanes = id ; }
-
-    void setSharpEdgeAngle(double angle){ m_sharpEdgeAngle = angle; }
+    void setClippingPlanes(::fwRenderVTK::SRender::VtkObjectIdType id)
+    {
+        m_clippingPlanes = id;
+    }
+
+    void setSharpEdgeAngle(double angle)
+    {
+        m_sharpEdgeAngle = angle;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect mesh::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect mesh::s_VISIBILITY_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect mesh::s_RECONSTRUCTION_ADDED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
 private:
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanes;
+    ::fwRenderVTK::SRender::VtkObjectIdType m_clippingPlanes;
     double m_sharpEdgeAngle;
-    bool   m_autoResetCamera;
+    bool m_autoResetCamera;
 };
 
 
@@ -54,4 +65,4 @@ private:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_RESECTION_HPP_
+#endif // __VISUVTKADAPTOR_RESECTION_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResectionDB.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResectionDB.hpp
index b86463f..7ae8dde 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResectionDB.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResectionDB.hpp
@@ -1,55 +1,65 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_RESECTIONDB_HPP_
-#define _VISUVTKADAPTOR_RESECTIONDB_HPP_
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#ifndef __VISUVTKADAPTOR_RESECTIONDB_HPP__
+#define __VISUVTKADAPTOR_RESECTIONDB_HPP__
 
 #include "visuVTKAdaptor/config.hpp"
 #include "visuVTKAdaptor/MeshFactory.hpp"
 
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
 namespace visuVTKAdaptor
 {
 
-
-
-class VISUVTKADAPTOR_CLASS_API ResectionDB: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API ResectionDB : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (ResectionDB)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ResectionDB)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API ResectionDB() throw();
 
     VISUVTKADAPTOR_API virtual ~ResectionDB() throw();
 
-    void setClippingPlanes(::fwRenderVTK::VtkRenderService::VtkObjectIdType id){ m_clippingPlanes = id ; }
-
-    void setSharpEdgeAngle(double angle){ m_sharpEdgeAngle = angle; }
+    void setClippingPlanes(::fwRenderVTK::SRender::VtkObjectIdType id)
+    {
+        m_clippingPlanes = id;
+    }
+
+    void setSharpEdgeAngle(double angle)
+    {
+        m_sharpEdgeAngle = angle;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect ResectionDB::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect ResectionDB::s_SAFE_PART_ADDED_SIG to this::s_UPDATE_SLOT
+     * Connect ResectionDB::s_RESECTION_ADDED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
 private:
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanes;
+    ::fwRenderVTK::SRender::VtkObjectIdType m_clippingPlanes;
     double m_sharpEdgeAngle;
 };
 
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_RESECTIONDB_HPP_
+#endif // __VISUVTKADAPTOR_RESECTIONDB_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResetCamera.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResetCamera.hpp
deleted file mode 100644
index 160c6ef..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/ResetCamera.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_RESETCAMERA_HPP_
-#define _VISUVTKADAPTOR_RESETCAMERA_HPP_
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
-
-namespace visuVTKAdaptor
-{
-
-/**
- * @brief   Do a reset camera.
- * @class   ResetCamera
- * @note    The priority  of the comChannel of this Adaptor is very low (0.1). The update of the GenericScene must be done before this reset.
- * 
- * @date    2010.
- */
-class VISUVTKADAPTOR_CLASS_API ResetCamera: public ::fwRenderVTK::IVtkAdaptorService
-{
-
-public:
-
-    fwCoreServiceClassDefinitionsMacro ( (ResetCamera)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    VISUVTKADAPTOR_API ResetCamera() throw();
-
-    VISUVTKADAPTOR_API virtual ~ResetCamera() throw();
-
-protected:
-
-    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-private:
-
-    bool bCameraReseted;
-
-};
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_RESETCAMERA_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SliceFollowerCamera.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SliceFollowerCamera.hpp
index 0b24136..c70d22b 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SliceFollowerCamera.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SliceFollowerCamera.hpp
@@ -1,52 +1,80 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_SLICEFOLLOWERCAMERA_HPP_
-#define _VISUVTKADAPTOR_SLICEFOLLOWERCAMERA_HPP_
+#ifndef __VISUVTKADAPTOR_SLICEFOLLOWERCAMERA_HPP__
+#define __VISUVTKADAPTOR_SLICEFOLLOWERCAMERA_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
+
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include <vector>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vector>
+
+class vtkCamera;
 
 namespace visuVTKAdaptor
 {
 
-
-class VISUVTKADAPTOR_CLASS_API SliceFollowerCamera: public ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService 
+/**
+ * @brief Update the camera according to slice move.
+ */
+class VISUVTKADAPTOR_CLASS_API SliceFollowerCamera : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                                     public ::fwRenderVTK::IVtkAdaptorService
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SliceFollowerCamera)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SliceFollowerCamera)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API SliceFollowerCamera() throw();
 
     VISUVTKADAPTOR_API virtual ~SliceFollowerCamera() throw();
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
 protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
 
     void initializeCamera();
-    void updateCamera(double distance = -1., double size=-1);
+    void updateCamera(double distance = -1., double size = -1);
 
     vtkCamera* m_camera;
-};
-
 
+private:
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+    /**
+     * @}
+     */
+};
 
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_SLICEFOLLOWERCAMERA_HPP_
+#endif // __VISUVTKADAPTOR_SLICEFOLLOWERCAMERA_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp
index c46721f..081e844 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/SlicesCursor.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_SLICESCURSOR_HPP_
-#define _VISUVTKADAPTOR_SLICECURSOR_HPP_
+#ifndef __VISUVTKADAPTOR_SLICESCURSOR_HPP__
+#define __VISUVTKADAPTOR_SLICESCURSOR_HPP__
+
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/Image.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 
 class VISUVTKADAPTOR_CLASS_API vtkPolyData;
@@ -24,49 +25,92 @@ namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API SlicesCursor: public ::fwComEd::helper::MedicalImageAdaptor,public ::fwRenderVTK::IVtkAdaptorService 
+class VISUVTKADAPTOR_CLASS_API SlicesCursor : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                              public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (SlicesCursor)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SlicesCursor)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API SlicesCursor()  throw();
 
     VISUVTKADAPTOR_API virtual ~SlicesCursor()  throw();
 
-protected :
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_IMAGE_SLOT
+     * Connect Image::s_SLICE_INDEX_MODIFIED_SIG to this::s_UPDATE_SLICE_INDEX_SLOT
+     * Connect Image::s_SLICE_TYPE_MODIFIED_SIG to this::s_UPDATE_SLICE_TYPE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_IMAGE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @name Slots
+     * @{
+     */
+    static const ::fwCom::Slots::SlotKeyType s_SHOW_FULL_CROSS_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_SHOW_NORMAL_CROSS_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_SET_CROSS_SCALE_SLOT;
+    /**
+     * @}
+     */
+
+protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
 
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void reconfiguring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
 
-    /// set the scale for the cross : 1. means full cross, 0.5 half cross, 0. no cross
+    /// Slot: set the scale for the cross : 1. means full cross, 0.5 half cross, 0. no cross
     void setCrossScale(double scale);
 
-    void updateSliceIndex( ::fwData::Image::sptr image );
+    void updateImageSliceIndex( ::fwData::Image::sptr image );
     void buildPolyData();
     void updateColors();
     void buildColorAttribute();
 
-    vtkPolyData         *m_cursorPolyData;
-    vtkPolyDataMapper   *m_cursorMapper;
-    vtkActor            *m_cursorActor;
+    vtkPolyData* m_cursorPolyData;
+    vtkPolyDataMapper* m_cursorMapper;
+    vtkActor* m_cursorActor;
     float m_scale;
-    bool  m_isSelected;
+    bool m_isSelected;
+
+private:
+
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Slot: update image slice index
+    void updateSliceIndex(int axial, int frontal, int sagittal);
+
+    /// Slot: update image slice type
+    void updateSliceType(int from, int to);
+
+    /// Slot: update image
+    void updateImage();
 
-private :
+    /// Slot: show full cross
+    void showFullCross();
 
+    /// Slot: show normal cross (use m_scale to "normal" size)
+    void showNormalCross();
+    /**
+     * @}
+     */
 
     /// Compute the barycenter : result = scale*ptA + (1-scale)*ptB
     static void barycenter( double ptA[3], double ptB[3], float scale, double result[3] );
 
     /// Compute points A' and B' on A------A'<---P--->B'---B
-    static void computeCrossPoints( double _ptA[3], double _ptB[3], double _ptP[3], double _scale, double _ptAprime[3], double _ptBprime[3] );
+    static void computeCrossPoints( double _ptA[3], double _ptB[3], double _ptP[3], double _scale, double _ptAprime[3],
+                                    double _ptBprime[3] );
 
 };
 
@@ -75,4 +119,4 @@ private :
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_SLICESCURSOR_HPP_
+#endif // __VISUVTKADAPTOR_SLICESCURSOR_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp
index b4e7003..d4efb00 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Snapshot.hpp
@@ -1,28 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_CAMERA_HPP_
-#define _VISUVTKADAPTOR_CAMERA_HPP_
+#ifndef __VISUVTKADAPTOR_SNAPSHOT_HPP__
+#define __VISUVTKADAPTOR_SNAPSHOT_HPP__
 
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 #include "visuVTKAdaptor/config.hpp"
 #include "visuVTKAdaptor/MeshFactory.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
 
 namespace visuVTKAdaptor
 {
 
 
-class VISUVTKADAPTOR_CLASS_API Snapshot: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Snapshot : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Snapshot)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Snapshot)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Snapshot() throw();
 
@@ -32,22 +35,28 @@ protected:
 
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
     // redraw all (stop then restart sub services)
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
 private:
 
-    void snap(std::string filePath);
+    /**
+     * @name Slots
+     * @{
+     */
+    /// Type of slot to snap shot
+    static const ::fwCom::Slots::SlotKeyType s_SNAP_SIG;
 
+    /// Slot: snap shot the generic scene.
+    void snap(std::string filePath);
+    /**
+     * @}
+     */
 };
 
 
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_CAMERA_HPP_
+#endif // __VISUVTKADAPTOR_SNAPSHOT_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Text.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Text.hpp
index efdd6c6..e525ba3 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Text.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Text.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,43 +21,60 @@ class vtkTextMapper;
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API Text: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Text : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
-    fwCoreServiceClassDefinitionsMacro ( (Text)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Text)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API Text();
     VISUVTKADAPTOR_API virtual ~Text() throw();
 
-    VISUVTKADAPTOR_API virtual void setText(std::string str);
-    virtual std::string getText(){return m_text;};
+    VISUVTKADAPTOR_API virtual void setText(const std::string &str);
+    std::string getText() const
+    {
+        return m_text;
+    }
 
 protected:
 
     VISUVTKADAPTOR_API virtual void doStart() throw(fwTools::Failed);
     VISUVTKADAPTOR_API virtual void doStop() throw(fwTools::Failed);
-    virtual void doSwap() throw(fwTools::Failed){};
-    virtual void doUpdate() throw(fwTools::Failed){};
-    virtual void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed){};
+    virtual void doSwap() throw(fwTools::Failed)
+    {
+    }
+    virtual void doUpdate() throw(fwTools::Failed)
+    {
+    }
 
     /**
      * @brief Configure the adaptor
      *
      * Example :
-     @verbatim
-     <adaptor id="text" class="::visuVTKAdaptor::Text" objectId="imageSeries">
-        <config renderer="default" text="@patient.name" fontSize="16" />
-     </adaptor>
-     @endverbatim
+       @code{.xml}
+       <adaptor id="text" class="::visuVTKAdaptor::Text" objectId="imageSeries">
+        <config renderer="default" text="@patient.name" color="#ff0000" fontSize="16" />
+       </adaptor>
+
+       <adaptor id="text2" class="::visuVTKAdaptor::Text" objectId="imageSeries">
+        <config renderer="default" vAlign='top' hAlign='center'>
+        <text>Text to display<text>
+        </config>
+       </adaptor>
+       @endcode
      *
      * - text : text to display. If a valid Seshat object attribute path is detected, the associated
      *   value is used. Otherwise, it uses the given value in XML configuration.
-     * - fontSize : font size in points of displayed text (not mandatory, default value is set to 20)
-     * - hAlign : horizontal alignment ('left' or 'right', not mandatory, default value is set to 'left')
-     * - vAlign : vertical alignment ('top' or 'bottom', not mandatory, default value is set to 'bottom')
+     * - color : text color in hexadecimal format : \#rrggbb or \#rrggbbaa (optional, default: white)
+     * - fontSize : font size in points of displayed text (optional, default: 20)
+     * - hAlign : horizontal alignment (left, center or right, optional, default: 'left')
+     * - vAlign : vertical alignment (top, center or bottom, optional, default: 'bottom')
+     *
+     *   The configuration accepts also a text tag instead of the text attribute
+     *   (see second example). This is useful for multiline text. The same rules
+     *   that for the attribute are applied.
      */
-    VISUVTKADAPTOR_API virtual void configuring() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API virtual void doConfigure() throw(fwTools::Failed);
 
     std::string m_text;
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Texture.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Texture.hpp
new file mode 100644
index 0000000..35f6b6a
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Texture.hpp
@@ -0,0 +1,112 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VISUVTKADAPTOR_TEXTURE_HPP__
+#define __VISUVTKADAPTOR_TEXTURE_HPP__
+
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+
+#include "visuVTKAdaptor/config.hpp"
+
+namespace fwData
+{
+class Material;
+}
+
+namespace visuVTKAdaptor
+{
+
+/**
+ * @brief Adaptor to map a texture on a mesh. This is done via ::visuVTKAdaptor::Material. However in the configuration
+ *        we don't specify the material adaptor since it is automatically created by the ::visuVTKAdaptor::Mesh adaptor.
+ *        Thus we rather try to specify the mesh adaptor.
+ */
+class VISUVTKADAPTOR_CLASS_API Texture : public ::fwRenderVTK::IVtkAdaptorService
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (Texture)(::fwRenderVTK::IVtkAdaptorService) );
+
+    /**
+     * @name Slots API
+     * @{
+     */
+    VISUVTKADAPTOR_API static const ::fwCom::Slots::SlotKeyType s_APPLY_TEXTURE_SLOT;
+    typedef ::fwCom::Slot< void ( SPTR(::fwData::Material) ) > ApplyTextureSlotType;
+    /** @} */
+
+    /// Constructor
+    VISUVTKADAPTOR_API Texture() throw();
+    /// Destructor
+    VISUVTKADAPTOR_API virtual ~Texture() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
+
+    /// Calls doUpdate()
+    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
+
+    /**
+     * @brief Configure the adaptor.
+     * @code{.xml}
+       <adaptor id="texAdaptor" class="::visuVTKAdaptor::Texture" objectId="imageKey" >
+        <config texture="texture" autoRender="true" meshAdaptor="meshAdaptor" filtering="linear" wrapping="repeat" />
+       </adaptor>
+       @endcode
+     * With :
+     *  - \b texture (mandatory) : the vtkTexture to associate to the adaptor
+     *  - \b autoRender (optional, "true" by default): if autoRender=true,  the scene is automatically rendered after
+     *    doStart, doUpdate, doSwap and doStop if m_vtkPipelineModified=true.
+     *  - \b filtering (optional) : filtering of the texture, "nearest" or "linear"
+     *  - \b wrapping (optional) : wrapping of the texture, "clamp" or "repeat"
+     *  - \b lighting (optional) : enable the lighting, "yes" or "no" default yes
+     * And either of the three (adaptor is preferred if several are specified) :
+     *  - \b meshAdaptor : the meshAdaptor referring to the mesh you want to map
+     *  - \b mesh : a mesh data, in this case the first mesh adaptor linked to it is used
+     *  - \b modelSeries : a model series data, the first mesh adaptor of all reconstructions are used
+     */
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+
+    /// Calls doUpdate()
+    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
+
+    /// Updates the vtkTransform from the TransformationMatrix3D
+    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
+
+    /// Does nothing
+    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
+
+    /// Slot called when a texture must be applied on a material.
+    void applyTexture( SPTR(::fwData::Material) _material);
+
+    /// Contains all mesh adaptors that currently have this texture applied. Needed when image is updated.
+    std::set< SPTR(::fwData::Material) > m_materialSet;
+
+    /// How to filter this texture
+    std::string m_filtering;
+
+    /// How to wrap the texture
+    std::string m_wrapping;
+
+    /// Slot to call when a texture must be applied on a material.
+    ApplyTextureSlotType::sptr m_slotApplyTexture;
+
+    /// enable or not the lighting (default true)
+    bool m_lighting;
+};
+
+} //namespace visuVTKAdaptor
+
+#endif // __VISUVTKADAPTOR_TEXTURE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp
index 7e8e382..1444d26 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Transform.hpp
@@ -1,17 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_TRANSFORM_HPP_
-#define _VISUVTKADAPTOR_TRANSFORM_HPP_
+#ifndef __VISUVTKADAPTOR_TRANSFORM_HPP__
+#define __VISUVTKADAPTOR_TRANSFORM_HPP__
 
-#include <vector>
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vtkSmartPointer.h>
+
+#include <vector>
 
 class vtkTransform;
 
@@ -22,63 +24,70 @@ namespace visuVTKAdaptor
  * @brief Adaptor to manage a TransformationMatrix3D from a vtkTransform and vice versa
  * @class Transform
  */
-class VISUVTKADAPTOR_CLASS_API Transform: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API Transform : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Transform)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Transform)(::fwRenderVTK::IVtkAdaptorService) );
 
     /// Constructor
     VISUVTKADAPTOR_API Transform() throw();
     /// Destructor
     VISUVTKADAPTOR_API virtual ~Transform() throw();
-    
+
     /// Set a new vtkTransform
     VISUVTKADAPTOR_API void setTransform(vtkTransform *t);
-    
+
     /// Returns the current vtkTransform
     VISUVTKADAPTOR_API vtkTransform *getTransform();
 
     /// Updates the TransformationMatrix3D from the vtkTransform
     VISUVTKADAPTOR_API void updateFromVtk();
 
+    /// Returns the priority of the adaptor - some adaptors may have to be started before other ones
+    VISUVTKADAPTOR_API virtual int getStartPriority();
+
 protected:
 
     /// Calls doUpdate()
     VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    
-    /** 
+
+    /**
      * @brief Configure the adaptor.
-     * @verbatim
-    <adaptor id="tmAdaptor" class="::visuVTKAdaptor::Transform" objectId="tm3dKey" >
-        <config transform="transform" autoRender="true" />
-    </adaptor> 
-       @endverbatim
-     * With : 
+     * @code{.xml}
+       <adaptor id="tmAdaptor" class="::visuVTKAdaptor::Transform" objectId="tm3dKey" >
+        <config transform="transform" autoRender="true" parent="parentTransform" />
+       </adaptor>
+       @endcode
+     * With :
      *  - \b transform (mandatory) : the vtkTransform to associate to the adaptor
      *  - \b autoRender (optional, "true" by default): if autoRender=true,  the scene is automatically rendered after
-     *    doStart, doUpdate, doSwap, doReceive and doStop if m_vtkPipelineModified=true.
+     *    doStart, doUpdate, doSwap and doStop if m_vtkPipelineModified=true.
+     *  - \b parent (optional): id of the parent vtkTransform, it will be concatenated with this current vtkTransform.
      */
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    
+    VISUVTKADAPTOR_API void doConfigure() throw(fwTools::Failed);
+
     /// Calls doUpdate()
     VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    
+
     /// Updates the vtkTransform from the TransformationMatrix3D
     VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    
+
     /// Does nothing
     VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
- 
-    /// Calls doUpdate() when it receives MATRIX_IS_MODIFIED event
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
 
     /// Current vtkTransform
     vtkTransform* m_transform;
-    
+
     /// Command used to listen m_transform changes
     vtkCommand* m_transformCommand;
+
+    /// Parent vtkTransform id (optional)
+    std::string m_parentId;
+
+    /// Parent vtkTransform (optional)
+    vtkSmartPointer<vtkTransform> m_parentTransform;
 };
 
 
@@ -86,4 +95,4 @@ protected:
 
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_TRANSFORM_HPP_
+#endif // __VISUVTKADAPTOR_TRANSFORM_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/TriangularMesh.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/TriangularMesh.hpp
deleted file mode 100644
index 836cc05..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/TriangularMesh.hpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_TRIANGULARMESH_HPP_
-#define _VISUVTKADAPTOR_TRIANGULARMESH_HPP_
-
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
-
-class vtkCommand;
-class vtkDepthSortPolyData;
-class vtkAlgorithm;
-class vtkAlgorithmOutput;
-class vtkPolyDataNormals;
-class vtkPlaneCollection;
-class vtkActorCollection;
-class vtkActor;
-class vtkPolyData;
-class vtkPolyDataMapper;
-class vtkTransform;
-
-namespace visuVTKAdaptor
-{
-
-class Transform;
-
-class VISUVTKADAPTOR_CLASS_API TriangularMeshVtkCommand ;
-
-class VISUVTKADAPTOR_CLASS_API TriangularMesh: public ::fwRenderVTK::IVtkAdaptorService
-{
-
-public:
-    fwCoreServiceClassDefinitionsMacro ( (TriangularMesh)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    VISUVTKADAPTOR_API TriangularMesh() throw();
-    VISUVTKADAPTOR_API virtual ~TriangularMesh() throw();
-
-    VISUVTKADAPTOR_API ::fwData::Material::sptr getMaterial();
-    VISUVTKADAPTOR_API void setMaterial(::fwData::Material::sptr material);
-
-    VISUVTKADAPTOR_API ::fwData::Material::sptr getUnclippedMaterial();
-    VISUVTKADAPTOR_API void setUnclippedPartMaterial(::fwData::Material::sptr material);
-
-
-    VISUVTKADAPTOR_API void setSharpEdgeAngle  ( double angle );
-    VISUVTKADAPTOR_API double getSharpEdgeAngle( );
-
-    VISUVTKADAPTOR_API void setShowClippedPart ( bool show );
-    VISUVTKADAPTOR_API void setClippingPlanesId( ::fwRenderVTK::VtkRenderService::VtkObjectIdType id );
-
-    VISUVTKADAPTOR_API void setVtkClippingPlanes               ( vtkPlaneCollection *planes );
-    VISUVTKADAPTOR_API void setMapperInput                     ( vtkAlgorithmOutput *input  );
-    VISUVTKADAPTOR_API vtkAlgorithmOutput *getMapperInput      ( );
-    VISUVTKADAPTOR_API void setActorPropertyToUnclippedMaterial( bool opt );
-
-    /// Active/Inactive automatic reset on camera. By default =true.
-    VISUVTKADAPTOR_API void setAutoResetCamera(bool autoResetCamera);
-
-    VISUVTKADAPTOR_API void updateVisibility ( bool isVisible );
-    VISUVTKADAPTOR_API bool getVisibility();
-
-    VISUVTKADAPTOR_API void updateOptionsMode();
-
-protected:
-
-   VISUVTKADAPTOR_API void doStart    () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doStop     () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doSwap   () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doUpdate   () throw(fwTools::Failed);
-   VISUVTKADAPTOR_API void doReceive   (::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-
-    vtkActor *newActor();
-    void buildPipeline();
-
-
-    void updateMapper();
-    void updateTriangularMesh ( ::fwData::TriangularMesh::sptr mesh );
-    void updateMaterial       ( ::fwData::Material::sptr material   );
-
-    void setServiceOnMaterial(
-        ::fwRenderVTK::IVtkAdaptorService::sptr &srv,
-        ::fwData::Material::sptr material
-        );
-
-    void removePlaneCollectionShifterCommand();
-    void removeServicesStarterCommand();
-    void createServicesStarterCommand();
-
-    void createTransformService();
-    void createNormalsService();
-    void removeNormalsService();
-
-
-
-
-    bool   m_showClippedPart;
-    double m_sharpEdgeAngle;
-    bool   m_manageMapperInput;
-    bool   m_autoResetCamera;
-
-    bool m_computeNormals;
-    bool m_computeNormalsAtUpdate;
-
-    vtkAlgorithm       *m_pipelineInput;
-    vtkAlgorithmOutput *m_mapperInput;
-    vtkPolyData        *m_polyData;
-    vtkPolyDataMapper  *m_mapper;
-    vtkPolyDataNormals *m_normals;
-    vtkActor           *m_actor;
-    vtkCommand         *m_depthSortCommand;
-
-    vtkPlaneCollection *m_clippingPlanes;
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanesId;
-
-    TriangularMeshVtkCommand *m_planeCollectionShifterCallback;
-    TriangularMeshVtkCommand *m_servicesStarterCallback;
-
-    ::fwData::Material::sptr       m_material;
-    ::fwData::Material::sptr       m_unclippedPartMaterial;
-
-    ::fwRenderVTK::IVtkAdaptorService::wptr m_materialService;
-    ::fwRenderVTK::IVtkAdaptorService::wptr m_unclippedPartMaterialService;
-    ::fwRenderVTK::IVtkAdaptorService::wptr m_normalsService;
-
-    vtkTransform* m_transform;
-    WPTR(::visuVTKAdaptor::Transform) m_transformService;
-
-public :
-
-   vtkActor * getActor(){ return m_actor; }
-
-};
-
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_TRIANGULARMESH_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/VectorField.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/VectorField.hpp
index 56a6850..2584e63 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/VectorField.hpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/VectorField.hpp
@@ -1,53 +1,57 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKADAPTOR_IMAGE_HPP_
-#define _VISUVTKADAPTOR_IMAGE_HPP_
+#ifndef __VISUVTKADAPTOR_VECTORFIELD_HPP__
+#define __VISUVTKADAPTOR_VECTORFIELD_HPP__
 
-#include <vtkSmartPointer.h>
+#include "visuVTKAdaptor/config.hpp"
 
 #include <fwData/Image.hpp>
 
-
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
 
-#include "visuVTKAdaptor/config.hpp"
+#include <vtkSmartPointer.h>
 
 class vtkPolyDataAlgorithm;
 class vtkImageData;
 class vtkGlyph3D;
 
-
-
 namespace visuVTKAdaptor
 {
 
-class VISUVTKADAPTOR_CLASS_API VectorField: public ::fwRenderVTK::IVtkAdaptorService
+class VISUVTKADAPTOR_CLASS_API VectorField : public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (VectorField)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (VectorField)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKADAPTOR_API VectorField() throw();
 
     VISUVTKADAPTOR_API virtual ~VectorField() throw();
 
-protected :
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
 
-    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
+protected:
 
-    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
+    VISUVTKADAPTOR_API void doStart() throw(::fwTools::Failed);
+    VISUVTKADAPTOR_API void doStop() throw(::fwTools::Failed);
 
+    VISUVTKADAPTOR_API void doUpdate() throw(::fwTools::Failed);
+    VISUVTKADAPTOR_API void doConfigure() throw(::fwTools::Failed);
+    VISUVTKADAPTOR_API void doSwap() throw(::fwTools::Failed);
 
     virtual void buildPipeline();
     virtual void destroyPipeline();
@@ -58,9 +62,6 @@ protected :
 
 };
 
-
-
-
 } //namespace visuVTKAdaptor
 
-#endif // _VISUVTKADAPTOR_IMAGE_HPP_
+#endif // __VISUVTKADAPTOR_VECTORFIELD_HPP__
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Video.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Video.hpp
deleted file mode 100644
index 02a576c..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/Video.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_VIDEO_HPP_
-#define _VISUVTKADAPTOR_VIDEO_HPP_
-
-#include <vector>
-
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
-
-#include "visuVTKAdaptor/config.hpp"
-#include "visuVTKAdaptor/MeshFactory.hpp"
-
-
-class VISUVTKADAPTOR_CLASS_API vtkImageData;
-class VISUVTKADAPTOR_CLASS_API vtkUnsignedCharArray;
-class VISUVTKADAPTOR_CLASS_API vtkTexture;
-
-namespace visuVTKAdaptor
-{
-
-
-class VISUVTKADAPTOR_CLASS_API Video: public ::fwRenderVTK::IVtkAdaptorService, protected MeshFactory
-{
-
-public:
-    fwCoreServiceClassDefinitionsMacro ( (Video)(::fwRenderVTK::IVtkAdaptorService) ) ;
-
-    Video() throw();
-    virtual ~Video() throw();
-
-protected:
-
-    VISUVTKADAPTOR_API void doStart() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void configuring() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doSwap() throw(fwTools::Failed);
-    // redraw all (stop then restart sub services)
-    VISUVTKADAPTOR_API void doUpdate() throw(fwTools::Failed);
-    VISUVTKADAPTOR_API void doStop() throw(fwTools::Failed);
-
-    VISUVTKADAPTOR_API void doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
-
-private:
-
-    vtkImageData* m_imageData;
-    vtkUnsignedCharArray* m_array;
-    vtkTexture* m_texture ;
-
-    bool bText_init;
-//  enum ARL_VIDEO_FLIP { VIDEO_FLIP_VERTICAL, VIDEO_FLIP_HORIZONTAL, VIDEO_FLIP_RADIAL, VIDEO_NBFLIP };
-
-};
-
-
-
-
-} //namespace visuVTKAdaptor
-
-#endif // _VISUVTKADAPTOR_VIDEO_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/config.hpp b/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/config.hpp
deleted file mode 100644
index 9339c15..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/include/visuVTKAdaptor/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKADAPTOR_CONFIG_HPP_
-#define _VISUVTKADAPTOR_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VISUVTKADAPTOR_EXPORTS
-    #define VISUVTKADAPTOR_API __declspec(dllexport)
-    #else
-    #define VISUVTKADAPTOR_API __declspec(dllimport)
-    #endif
-
-    #define VISUVTKADAPTOR_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VISUVTKADAPTOR_EXPORTS
-    #define VISUVTKADAPTOR_API __attribute__ ((visibility("default")))
-    #define VISUVTKADAPTOR_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VISUVTKADAPTOR_API __attribute__ ((visibility("hidden")))
-    #define VISUVTKADAPTOR_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VISUVTKADAPTOR_API
-    #define VISUVTKADAPTOR_CLASS_API
-
-#endif
-
-#endif // _VISUVTKADAPTOR_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/rc/fp.glsl b/Bundles/LeafVisu/visuVTKAdaptor/rc/fp.glsl
new file mode 100644
index 0000000..7b14878
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/rc/fp.glsl
@@ -0,0 +1,11 @@
+uniform sampler2D texture;   // input image
+varying vec2  texCoord;
+void propFuncFS(void)
+{
+  vec4 tmp_color;
+  tmp_color = texture2D(texture,texCoord);
+  gl_FragColor = tmp_color;
+  gl_FragColor.r = tmp_color.b;
+  gl_FragColor.b = tmp_color.r;
+}
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/rc/human.vtk b/Bundles/LeafVisu/visuVTKAdaptor/rc/human.vtk
new file mode 100644
index 0000000..3242376
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/rc/human.vtk
@@ -0,0 +1,5227 @@
+# vtk DataFile Version 3.0
+vtk output
+ASCII
+DATASET POLYDATA
+POINTS 4266 float
+0.142655 -0.322902 7.88847 0.198054 -0.260409 7.79332 0.448454 -0.197843 7.80188 
+0.142655 -0.322902 7.88847 0.448454 -0.197843 7.80188 0.509354 -0.167621 7.8936 
+0.142655 -0.322902 7.88847 0.509354 -0.167621 7.8936 0.523556 -0.052331 8.11458 
+0.142655 -0.322902 7.88847 0.523556 -0.052331 8.11458 0.241357 -0.24844 8.16468 
+0.509354 -0.167621 7.8936 0.448454 -0.197843 7.80188 0.529853 -0.076784 7.71498 
+0.509354 -0.167621 7.8936 0.529853 -0.076784 7.71498 0.601853 0.006573 7.82272 
+0.509354 -0.167621 7.8936 0.601853 0.006573 7.82272 0.603554 0.18733 8.00337 
+0.509354 -0.167621 7.8936 0.603554 0.18733 8.00337 0.523556 -0.052331 8.11458 
+0.603554 0.18733 8.00337 0.601853 0.006573 7.82272 0.657051 0.280173 7.65345 
+0.603554 0.18733 8.00337 0.657051 0.280173 7.65345 0.682652 0.522058 7.85175 
+0.529853 -0.076784 7.71498 0.61435 0.104853 7.46382 0.657051 0.280173 7.65345 
+0.529853 -0.076784 7.71498 0.657051 0.280173 7.65345 0.601853 0.006573 7.82272 
+0.682652 0.522058 7.85175 0.762551 0.698128 7.73817 0.740951 0.843379 7.79877 
+0.682652 0.522058 7.85175 0.740951 0.843379 7.79877 0.718853 0.83286 8.04593 
+0.728651 0.984823 7.73985 0.679851 1.12606 7.82724 0.718853 0.83286 8.04593 
+0.728651 0.984823 7.73985 0.718853 0.83286 8.04593 0.740951 0.843379 7.79877 
+0.37775 -0.16759 7.3524 0.207052 -0.190428 7.60411 0.189351 -0.226969 7.46826 
+0.682652 0.522058 7.85175 0.657051 0.280173 7.65345 0.691949 0.568155 7.48863 
+0.682652 0.522058 7.85175 0.691949 0.568155 7.48863 0.762551 0.698128 7.73817 
+0.853349 0.873428 7.56869 0.691949 0.568155 7.48863 0.708348 0.652464 7.29258 
+0.853349 0.873428 7.56869 0.708348 0.652464 7.29258 0.826248 0.826273 7.4121 
+0.691949 0.568155 7.48863 0.853349 0.873428 7.56869 0.858251 0.810316 7.71713 
+0.691949 0.568155 7.48863 0.858251 0.810316 7.71713 0.762551 0.698128 7.73817 
+0.721049 0.962648 7.61256 0.646049 1.1494 7.62533 0.679851 1.12606 7.82724 
+0.721049 0.962648 7.61256 0.679851 1.12606 7.82724 0.728651 0.984823 7.73985 
+0.691949 0.568155 7.48863 0.657051 0.280173 7.65345 0.61435 0.104853 7.46382 
+0.691949 0.568155 7.48863 0.61435 0.104853 7.46382 0.591148 0.215466 7.26708 
+0.17685 -0.236151 7.36692 0.15105 -0.258739 7.26693 0.194049 -0.254578 7.20374 
+0.17685 -0.236151 7.36692 0.194049 -0.254578 7.20374 0.299449 -0.202705 7.23456 
+0.299449 -0.202705 7.23456 0.194049 -0.254578 7.20374 0.203049 -0.273929 7.14336 
+0.299449 -0.202705 7.23456 0.203049 -0.273929 7.14336 0.336948 -0.176807 7.08956 
+0.065349 -0.351733 7.14404 4.9e-05 -0.359868 7.12811 4.8e-05 -0.375888 7.06034 
+0.065349 -0.351733 7.14404 4.8e-05 -0.375888 7.06034 0.066148 -0.369457 7.07697 
+0.203049 -0.273929 7.14336 0.065349 -0.351733 7.14404 0.066148 -0.369457 7.07697 
+0.203049 -0.273929 7.14336 0.066148 -0.369457 7.07697 0.198048 -0.285349 7.05112 
+0.467146 0.061399 6.96754 0.584447 0.311421 7.08397 0.591148 0.215466 7.26708 
+0.467146 0.061399 6.96754 0.591148 0.215466 7.26708 0.439248 -0.070915 7.1646 
+0.439248 -0.070915 7.1646 0.37775 -0.16759 7.3524 0.299449 -0.202705 7.23456 
+0.439248 -0.070915 7.1646 0.299449 -0.202705 7.23456 0.336948 -0.176807 7.08956 
+0.61435 0.104853 7.46382 0.37775 -0.16759 7.3524 0.439248 -0.070915 7.1646 
+0.61435 0.104853 7.46382 0.439248 -0.070915 7.1646 0.591148 0.215466 7.26708 
+0.529853 -0.076784 7.71498 0.37775 -0.16759 7.3524 0.61435 0.104853 7.46382 
+0.691949 0.568155 7.48863 0.591148 0.215466 7.26708 0.584447 0.311421 7.08397 
+0.691949 0.568155 7.48863 0.584447 0.311421 7.08397 0.708348 0.652464 7.29258 
+0.708348 0.652464 7.29258 0.644247 0.717426 7.22915 0.680048 0.885991 7.40785 
+0.708348 0.652464 7.29258 0.680048 0.885991 7.40785 0.826248 0.826273 7.4121 
+0.721049 0.962648 7.61256 0.853349 0.873428 7.56869 0.826248 0.826273 7.4121 
+0.721049 0.962648 7.61256 0.826248 0.826273 7.4121 0.680048 0.885991 7.40785 
+0.853349 0.873428 7.56869 0.721049 0.962648 7.61256 0.728651 0.984823 7.73985 
+0.853349 0.873428 7.56869 0.728651 0.984823 7.73985 0.858251 0.810316 7.71713 
+0.740951 0.843379 7.79877 0.762551 0.698128 7.73817 0.858251 0.810316 7.71713 
+0.740951 0.843379 7.79877 0.858251 0.810316 7.71713 0.728651 0.984823 7.73985 
+0.646049 1.1494 7.62533 0.721049 0.962648 7.61256 0.680048 0.885991 7.40785 
+0.646049 1.1494 7.62533 0.680048 0.885991 7.40785 0.611547 1.1104 7.38157 
+0.644247 0.717426 7.22915 0.668545 0.839321 7.03675 0.611547 1.1104 7.38157 
+0.644247 0.717426 7.22915 0.611547 1.1104 7.38157 0.680048 0.885991 7.40785 
+0.718853 0.83286 8.04593 0.679851 1.12606 7.82724 0.575051 1.33185 7.87959 
+0.718853 0.83286 8.04593 0.575051 1.33185 7.87959 0.667754 1.0925 8.1815 
+0.667754 1.0925 8.1815 0.575051 1.33185 7.87959 0.381051 1.54 7.96395 
+0.667754 1.0925 8.1815 0.381051 1.54 7.96395 0.432154 1.45888 8.28572 
+0.432154 1.45888 8.28572 0.381051 1.54 7.96395 0.220951 1.64492 8.00898 
+0.432154 1.45888 8.28572 0.220951 1.64492 8.00898 0.230354 1.58127 8.33482 
+0.682652 0.522058 7.85175 0.718853 0.83286 8.04593 0.623155 0.391875 8.18671 
+0.682652 0.522058 7.85175 0.623155 0.391875 8.18671 0.603554 0.18733 8.00337 
+0.644247 0.717426 7.22915 0.708348 0.652464 7.29258 0.584447 0.311421 7.08397 
+0.644247 0.717426 7.22915 0.584447 0.311421 7.08397 0.563845 0.472272 6.90213 
+0.467146 0.061399 6.96754 0.473944 0.246419 6.769 0.563845 0.472272 6.90213 
+0.467146 0.061399 6.96754 0.563845 0.472272 6.90213 0.584447 0.311421 7.08397 
+0.325747 -0.133464 6.93384 0.316845 -0.052345 6.73527 0.473944 0.246419 6.769 
+0.325747 -0.133464 6.93384 0.473944 0.246419 6.769 0.467146 0.061399 6.96754 
+0.325747 -0.133464 6.93384 0.467146 0.061399 6.96754 0.439248 -0.070915 7.1646 
+0.325747 -0.133464 6.93384 0.439248 -0.070915 7.1646 0.336948 -0.176807 7.08956 
+0.280147 -0.194331 7.02279 0.275947 -0.190554 6.9798 0.325747 -0.133464 6.93384 
+0.280147 -0.194331 7.02279 0.325747 -0.133464 6.93384 0.336948 -0.176807 7.08956 
+0.203049 -0.273929 7.14336 0.198048 -0.285349 7.05112 0.280147 -0.194331 7.02279 
+0.203049 -0.273929 7.14336 0.280147 -0.194331 7.02279 0.336948 -0.176807 7.08956 
+0.325747 -0.133464 6.93384 0.275947 -0.190554 6.9798 0.187147 -0.243827 6.92449 
+0.325747 -0.133464 6.93384 0.187147 -0.243827 6.92449 0.206246 -0.18 6.79695 
+0.301547 1.5139 7.48004 0.490547 1.33512 7.4253 0.523944 1.30588 7.07277 
+0.301547 1.5139 7.48004 0.523944 1.30588 7.07277 0.311344 1.47913 7.08329 
+0.611547 1.1104 7.38157 0.668545 0.839321 7.03675 0.691244 0.971344 6.88579 
+0.611547 1.1104 7.38157 0.691244 0.971344 6.88579 0.609044 1.17452 7.01433 
+0.194049 -0.254578 7.20374 0.063549 -0.344048 7.19608 0.065349 -0.351733 7.14404 
+0.194049 -0.254578 7.20374 0.065349 -0.351733 7.14404 0.203049 -0.273929 7.14336 
+0.15105 -0.258739 7.26693 0.05055 -0.376784 7.25324 0.063549 -0.344048 7.19608 
+0.15105 -0.258739 7.26693 0.063549 -0.344048 7.19608 0.194049 -0.254578 7.20374 
+0.12465 -0.395105 7.30687 0.05145 -0.473235 7.28984 0.05055 -0.376784 7.25324 
+0.12465 -0.395105 7.30687 0.05055 -0.376784 7.25324 0.15105 -0.258739 7.26693 
+0.17685 -0.236151 7.36692 0.189351 -0.226969 7.46826 0.108452 -0.303014 7.52755 
+0.17685 -0.236151 7.36692 0.108452 -0.303014 7.52755 0.113651 -0.349676 7.42126 
+0.113651 -0.349676 7.42126 0.12465 -0.395105 7.30687 0.15105 -0.258739 7.26693 
+0.113651 -0.349676 7.42126 0.15105 -0.258739 7.26693 0.17685 -0.236151 7.36692 
+0.207052 -0.190428 7.60411 0.111353 -0.198534 7.67808 0.108452 -0.303014 7.52755 
+0.207052 -0.190428 7.60411 0.108452 -0.303014 7.52755 0.189351 -0.226969 7.46826 
+0.189351 -0.226969 7.46826 0.17685 -0.236151 7.36692 0.299449 -0.202705 7.23456 
+0.189351 -0.226969 7.46826 0.299449 -0.202705 7.23456 0.37775 -0.16759 7.3524 
+0.198054 -0.260409 7.79332 0.142655 -0.322902 7.88847 0.067653 -0.267563 7.70919 
+0.198054 -0.260409 7.79332 0.067653 -0.267563 7.70919 0.111353 -0.198534 7.67808 
+0.111353 -0.198534 7.67808 0.067653 -0.267563 7.70919 0.046252 -0.374429 7.53095 
+0.111353 -0.198534 7.67808 0.046252 -0.374429 7.53095 0.108452 -0.303014 7.52755 
+0.108452 -0.303014 7.52755 0.046252 -0.374429 7.53095 0.049651 -0.463785 7.39888 
+0.108452 -0.303014 7.52755 0.049651 -0.463785 7.39888 0.113651 -0.349676 7.42126 
+0.05145 -0.473235 7.28984 0.12465 -0.395105 7.30687 0.113651 -0.349676 7.42126 
+0.05145 -0.473235 7.28984 0.113651 -0.349676 7.42126 0.049651 -0.463785 7.39888 
+0.216545 -0.152849 6.71176 0.316845 -0.052345 6.73527 0.325747 -0.133464 6.93384 
+0.216545 -0.152849 6.71176 0.325747 -0.133464 6.93384 0.206246 -0.18 6.79695 
+0.584544 0.588649 6.81101 0.433943 0.358357 6.68716 0.501742 0.490469 6.53911 
+0.584544 0.588649 6.81101 0.501742 0.490469 6.53911 0.647143 0.705258 6.71199 
+0.563845 0.472272 6.90213 0.473944 0.246419 6.769 0.433943 0.358357 6.68716 
+0.563845 0.472272 6.90213 0.433943 0.358357 6.68716 0.584544 0.588649 6.81101 
+0.644247 0.717426 7.22915 0.563845 0.472272 6.90213 0.584544 0.588649 6.81101 
+0.644247 0.717426 7.22915 0.584544 0.588649 6.81101 0.668545 0.839321 7.03675 
+0.216545 -0.152849 6.71176 0.209644 -0.100224 6.63298 0.280944 -0.015886 6.64842 
+0.216545 -0.152849 6.71176 0.280944 -0.015886 6.64842 0.316845 -0.052345 6.73527 
+0.433943 0.358357 6.68716 0.473944 0.246419 6.769 0.316845 -0.052345 6.73527 
+0.433943 0.358357 6.68716 0.316845 -0.052345 6.73527 0.280944 -0.015886 6.64842 
+0.209644 -0.100224 6.63298 0.216545 -0.152849 6.71176 4.5e-05 -0.266654 6.66419 
+0.209644 -0.100224 6.63298 4.5e-05 -0.266654 6.66419 4.4e-05 -0.184935 6.58683 
+0.433943 0.358357 6.68716 0.280944 -0.015886 6.64842 0.209644 -0.100224 6.63298 
+0.433943 0.358357 6.68716 0.209644 -0.100224 6.63298 0.223443 0.109402 6.55454 
+4.6e-05 -0.288312 6.7752 4.5e-05 -0.266654 6.66419 0.216545 -0.152849 6.71176 
+4.6e-05 -0.288312 6.7752 0.216545 -0.152849 6.71176 0.206246 -0.18 6.79695 
+0.646049 1.1494 7.62533 0.611547 1.1104 7.38157 0.490547 1.33512 7.4253 
+0.646049 1.1494 7.62533 0.490547 1.33512 7.4253 0.510249 1.36252 7.66841 
+0.510249 1.36252 7.66841 0.490547 1.33512 7.4253 0.301547 1.5139 7.48004 
+0.510249 1.36252 7.66841 0.301547 1.5139 7.48004 0.318549 1.56988 7.72797 
+0.433943 0.358357 6.68716 0.223443 0.109402 6.55454 0.275542 0.321402 6.45801 
+0.433943 0.358357 6.68716 0.275542 0.321402 6.45801 0.501742 0.490469 6.53911 
+0.668545 0.839321 7.03675 0.584544 0.588649 6.81101 0.647143 0.705258 6.71199 
+0.668545 0.839321 7.03675 0.647143 0.705258 6.71199 0.691244 0.971344 6.88579 
+0.609044 1.17452 7.01433 0.523944 1.30588 7.07277 0.490547 1.33512 7.4253 
+0.609044 1.17452 7.01433 0.490547 1.33512 7.4253 0.611547 1.1104 7.38157 
+0.646049 1.1494 7.62533 0.510249 1.36252 7.66841 0.575051 1.33185 7.87959 
+0.646049 1.1494 7.62533 0.575051 1.33185 7.87959 0.679851 1.12606 7.82724 
+0.575051 1.33185 7.87959 0.510249 1.36252 7.66841 0.318549 1.56988 7.72797 
+0.575051 1.33185 7.87959 0.318549 1.56988 7.72797 0.381051 1.54 7.96395 
+0.667754 1.0925 8.1815 0.658756 0.750803 8.3749 0.623155 0.391875 8.18671 
+0.667754 1.0925 8.1815 0.623155 0.391875 8.18671 0.718853 0.83286 8.04593 
+0.288459 -0.097577 8.4407 0.241357 -0.24844 8.16468 0.523556 -0.052331 8.11458 
+0.288459 -0.097577 8.4407 0.523556 -0.052331 8.11458 0.522957 0.106876 8.33154 
+0.522957 0.106876 8.33154 0.523556 -0.052331 8.11458 0.603554 0.18733 8.00337 
+0.522957 0.106876 8.33154 0.603554 0.18733 8.00337 0.623155 0.391875 8.18671 
+0.432154 1.45888 8.28572 0.471657 1.19814 8.58434 0.658756 0.750803 8.3749 
+0.432154 1.45888 8.28572 0.658756 0.750803 8.3749 0.667754 1.0925 8.1815 
+0.230354 1.58127 8.33482 0.203557 1.26996 8.65394 0.471657 1.19814 8.58434 
+0.230354 1.58127 8.33482 0.471657 1.19814 8.58434 0.432154 1.45888 8.28572 
+0.522957 0.106876 8.33154 0.623155 0.391875 8.18671 0.658756 0.750803 8.3749 
+0.522957 0.106876 8.33154 0.658756 0.750803 8.3749 0.511658 0.454332 8.56117 
+0.511658 0.454332 8.56117 0.658756 0.750803 8.3749 0.471657 1.19814 8.58434 
+0.511658 0.454332 8.56117 0.471657 1.19814 8.58434 0.419758 0.930036 8.68244 
+0.24766 0.286037 8.70488 0.511658 0.454332 8.56117 0.419758 0.930036 8.68244 
+0.24766 0.286037 8.70488 0.419758 0.930036 8.68244 0.184159 0.822 8.7635 
+0.24766 0.286037 8.70488 0.288459 -0.097577 8.4407 0.522957 0.106876 8.33154 
+0.24766 0.286037 8.70488 0.522957 0.106876 8.33154 0.511658 0.454332 8.56117 
+0.419758 0.930036 8.68244 0.471657 1.19814 8.58434 0.203557 1.26996 8.65394 
+0.419758 0.930036 8.68244 0.203557 1.26996 8.65394 0.184159 0.822 8.7635 
+0.311344 1.47913 7.08329 0.106644 1.51914 7.08136 0.179247 1.58756 7.51404 
+0.311344 1.47913 7.08329 0.179247 1.58756 7.51404 0.301547 1.5139 7.48004 
+0.188749 1.64168 7.75077 0.318549 1.56988 7.72797 0.301547 1.5139 7.48004 
+0.188749 1.64168 7.75077 0.301547 1.5139 7.48004 0.179247 1.58756 7.51404 
+0.381051 1.54 7.96395 0.318549 1.56988 7.72797 0.188749 1.64168 7.75077 
+0.381051 1.54 7.96395 0.188749 1.64168 7.75077 0.220951 1.64492 8.00898 
+0.179247 1.58756 7.51404 0.106644 1.51914 7.08136 4.4e-05 1.51194 7.08083 
+0.179247 1.58756 7.51404 4.4e-05 1.51194 7.08083 4.7e-05 1.62612 7.5223 
+0.647143 0.705258 6.71199 0.501742 0.490469 6.53911 0.702737 0.643389 5.95263 
+0.647143 0.705258 6.71199 0.702737 0.643389 5.95263 0.810738 0.880321 6.13951 
+0.501742 0.490469 6.53911 0.275542 0.321402 6.45801 0.384836 0.432606 5.77806 
+0.501742 0.490469 6.53911 0.384836 0.432606 5.77806 0.702737 0.643389 5.95263 
+0.523944 1.30588 7.07277 0.609044 1.17452 7.01433 0.72134 1.49089 6.58533 
+0.523944 1.30588 7.07277 0.72134 1.49089 6.58533 0.56814 1.57176 6.63997 
+0.609044 1.17452 7.01433 0.691244 0.971344 6.88579 0.87264 1.27153 6.47732 
+0.609044 1.17452 7.01433 0.87264 1.27153 6.47732 0.72134 1.49089 6.58533 
+4.4e-05 1.51194 7.08083 0.106644 1.51914 7.08136 0.13284 1.62285 6.61988 
+4.4e-05 1.51194 7.08083 0.13284 1.62285 6.61988 4e-05 1.62076 6.61627 
+0.106644 1.51914 7.08136 0.311344 1.47913 7.08329 0.28614 1.62368 6.63578 
+0.106644 1.51914 7.08136 0.28614 1.62368 6.63578 0.13284 1.62285 6.61988 
+0.523944 1.30588 7.07277 0.56814 1.57176 6.63997 0.28614 1.62368 6.63578 
+0.523944 1.30588 7.07277 0.28614 1.62368 6.63578 0.311344 1.47913 7.08329 
+0.87264 1.27153 6.47732 0.691244 0.971344 6.88579 0.647143 0.705258 6.71199 
+0.87264 1.27153 6.47732 0.647143 0.705258 6.71199 0.810738 0.880321 6.13951 
+0.702737 0.643389 5.95263 0.384836 0.432606 5.77806 0.472132 -0.030831 5.20415 
+0.702737 0.643389 5.95263 0.472132 -0.030831 5.20415 0.846334 0.394155 5.4753 
+0.87264 1.27153 6.47732 0.810738 0.880321 6.13951 1.03864 0.871961 5.91167 
+0.87264 1.27153 6.47732 1.03864 0.871961 5.91167 1.12244 1.27779 6.31775 
+0.72134 1.49089 6.58533 0.87264 1.27153 6.47732 1.12244 1.27779 6.31775 
+0.72134 1.49089 6.58533 1.12244 1.27779 6.31775 0.933038 1.58862 6.35913 
+0.28614 1.62368 6.63578 0.56814 1.57176 6.63997 0.769437 1.70044 6.30719 
+0.28614 1.62368 6.63578 0.769437 1.70044 6.30719 0.494737 1.71802 6.28747 
+0.13284 1.62285 6.61988 0.28614 1.62368 6.63578 0.494737 1.71802 6.28747 
+0.13284 1.62285 6.61988 0.494737 1.71802 6.28747 0.237337 1.68376 6.30063 
+1.03864 0.871961 5.91167 0.810738 0.880321 6.13951 0.702737 0.643389 5.95263 
+1.03864 0.871961 5.91167 0.702737 0.643389 5.95263 0.846334 0.394155 5.4753 
+1.12244 1.27779 6.31775 1.03864 0.871961 5.91167 1.56613 0.529101 5.56185 
+1.12244 1.27779 6.31775 1.56613 0.529101 5.56185 1.63494 1.07299 6.0034 
+0.933038 1.58862 6.35913 1.12244 1.27779 6.31775 1.63494 1.07299 6.0034 
+0.933038 1.58862 6.35913 1.63494 1.07299 6.0034 1.48714 1.66076 6.03432 
+2.14334 0.983783 5.88272 1.93073 0.486125 5.43497 2.42663 0.556274 5.30215 
+2.14334 0.983783 5.88272 2.42663 0.556274 5.30215 2.62773 0.996394 5.51657 
+1.96073 1.70863 5.75121 2.14334 0.983783 5.88272 2.62773 0.996394 5.51657 
+1.96073 1.70863 5.75121 2.62773 0.996394 5.51657 2.36583 1.84034 5.36115 
+2.62773 0.996394 5.51657 2.42663 0.556274 5.30215 3.54102 0.579122 3.61762 
+2.62773 0.996394 5.51657 3.54102 0.579122 3.61762 3.72222 0.949505 3.71975 
+2.36583 1.84034 5.36115 2.62773 0.996394 5.51657 3.72222 0.949505 3.71975 
+2.36583 1.84034 5.36115 3.72222 0.949505 3.71975 3.40361 1.55373 3.22954 
+3.72222 0.949505 3.71975 3.54102 0.579122 3.61762 3.80552 0.37645 3.34398 
+3.72222 0.949505 3.71975 3.80552 0.37645 3.34398 4.00342 0.94857 3.36454 
+3.40361 1.55373 3.22954 3.72222 0.949505 3.71975 4.00342 0.94857 3.36454 
+3.40361 1.55373 3.22954 4.00342 0.94857 3.36454 3.82291 1.28661 2.82293 
+4.00342 0.94857 3.36454 3.80552 0.37645 3.34398 4.72071 -1.14128 2.03751 
+4.00342 0.94857 3.36454 4.72071 -1.14128 2.03751 4.92351 -0.961202 2.09305 
+3.82291 1.28661 2.82293 4.00342 0.94857 3.36454 4.92351 -0.961202 2.09305 
+3.82291 1.28661 2.82293 4.92351 -0.961202 2.09305 5.07671 -0.747577 1.91783 
+0.72134 1.49089 6.58533 0.933038 1.58862 6.35913 0.769437 1.70044 6.30719 
+0.72134 1.49089 6.58533 0.769437 1.70044 6.30719 0.56814 1.57176 6.63997 
+1.96073 1.70863 5.75121 1.68903 2.08972 5.31788 1.36203 1.92288 5.7889 
+1.96073 1.70863 5.75121 1.36203 1.92288 5.7889 1.48714 1.66076 6.03432 
+1.48714 1.66076 6.03432 1.36203 1.92288 5.7889 0.769437 1.70044 6.30719 
+1.48714 1.66076 6.03432 0.769437 1.70044 6.30719 0.933038 1.58862 6.35913 
+3.40361 1.55373 3.22954 3.17441 1.31702 2.91516 2.03502 2.11702 4.75939 
+3.40361 1.55373 3.22954 2.03502 2.11702 4.75939 2.36583 1.84034 5.36115 
+2.42663 0.556274 5.30215 2.13403 0.403217 4.78202 3.24121 0.698878 3.04651 
+2.42663 0.556274 5.30215 3.24121 0.698878 3.04651 3.54102 0.579122 3.61762 
+1.93073 0.486125 5.43497 1.88553 0.324383 4.9111 2.13403 0.403217 4.78202 
+1.93073 0.486125 5.43497 2.13403 0.403217 4.78202 2.42663 0.556274 5.30215 
+2.13403 0.403217 4.78202 2.08512 0.956955 4.2402 3.11431 0.855993 2.89756 
+2.13403 0.403217 4.78202 3.11431 0.855993 2.89756 3.24121 0.698878 3.04651 
+1.70413 0.078347 4.50698 1.88553 0.324383 4.9111 1.41253 0.221922 5.09528 
+1.70413 0.078347 4.50698 1.41253 0.221922 5.09528 0.869429 -0.163471 4.75279 
+2.13403 0.403217 4.78202 2.01922 0.285235 4.38913 1.97052 0.75083 4.14895 
+2.13403 0.403217 4.78202 1.97052 0.75083 4.14895 2.08512 0.956955 4.2402 
+0.846334 0.394155 5.4753 1.41253 0.221922 5.09528 1.56613 0.529101 5.56185 
+0.846334 0.394155 5.4753 1.56613 0.529101 5.56185 1.03864 0.871961 5.91167 
+2.08512 0.956955 4.2402 2.03502 2.11702 4.75939 3.17441 1.31702 2.91516 
+2.08512 0.956955 4.2402 3.17441 1.31702 2.91516 3.11431 0.855993 2.89756 
+3.54102 0.579122 3.61762 3.24121 0.698878 3.04651 3.36071 0.649095 2.84811 
+3.54102 0.579122 3.61762 3.36071 0.649095 2.84811 3.80552 0.37645 3.34398 
+3.80552 0.37645 3.34398 3.36071 0.649095 2.84811 4.63841 -0.985242 1.83595 
+3.80552 0.37645 3.34398 4.63841 -0.985242 1.83595 4.72071 -1.14128 2.03751 
+2.03502 2.11702 4.75939 2.08512 0.956955 4.2402 1.97052 0.75083 4.14895 
+2.03502 2.11702 4.75939 1.97052 0.75083 4.14895 1.91912 1.94685 3.90458 
+1.38282 2.17325 4.82592 1.68903 2.08972 5.31788 2.03502 2.11702 4.75939 
+1.38282 2.17325 4.82592 2.03502 2.11702 4.75939 1.91912 1.94685 3.90458 
+0.237337 1.68376 6.30063 0.494737 1.71802 6.28747 1.07593 2.19363 5.55792 
+0.237337 1.68376 6.30063 1.07593 2.19363 5.55792 0.636829 2.31028 5.5216 
+1.38282 2.17325 4.82592 0.799623 2.41354 4.68322 0.636829 2.31028 5.5216 
+1.38282 2.17325 4.82592 0.636829 2.31028 5.5216 1.07593 2.19363 5.55792 
+0.769437 1.70044 6.30719 1.36203 1.92288 5.7889 1.07593 2.19363 5.55792 
+0.769437 1.70044 6.30719 1.07593 2.19363 5.55792 0.494737 1.71802 6.28747 
+1.91912 1.94685 3.90458 1.75321 1.64826 3.17214 1.05151 2.40475 3.29767 
+1.91912 1.94685 3.90458 1.05151 2.40475 3.29767 0.959917 2.46368 4.01902 
+1.97052 0.75083 4.14895 1.73022 0.567537 3.46749 1.75321 1.64826 3.17214 
+1.97052 0.75083 4.14895 1.75321 1.64826 3.17214 1.91912 1.94685 3.90458 
+2.01922 0.285235 4.38913 1.59322 -0.080792 3.86122 1.73022 0.567537 3.46749 
+2.01922 0.285235 4.38913 1.73022 0.567537 3.46749 1.97052 0.75083 4.14895 
+2.01922 0.285235 4.38913 1.70413 0.078347 4.50698 0.802224 -0.436626 4.03796 
+2.01922 0.285235 4.38913 0.802224 -0.436626 4.03796 1.59322 -0.080792 3.86122 
+0.955619 -0.305008 3.4035 0.456219 -0.486878 3.44395 0.454911 -0.302273 2.4731 
+0.955619 -0.305008 3.4035 0.454911 -0.302273 2.4731 0.81601 -0.118796 2.43076 
+1.55681 0.500411 2.91571 1.27122 -0.078209 3.18603 1.02301 0.054968 2.31857 
+1.55681 0.500411 2.91571 1.02301 0.054968 2.31857 1.42841 0.365295 2.19165 
+1e-05 1.93932 3.01266 1.08661 2.02612 2.7948 0.985006 1.70273 2.38077 
+1e-05 1.93932 3.01266 0.985006 1.70273 2.38077 7e-06 1.55003 2.47524 
+1.08661 2.02612 2.7948 1.51381 1.198 2.72608 1.4539 1.15942 2.21242 
+1.08661 2.02612 2.7948 1.4539 1.15942 2.21242 0.985006 1.70273 2.38077 
+1.51381 1.198 2.72608 1.55681 0.500411 2.91571 1.42841 0.365295 2.19165 
+1.51381 1.198 2.72608 1.42841 0.365295 2.19165 1.4539 1.15942 2.21242 
+1.4539 1.15942 2.21242 1.42841 0.365295 2.19165 1.4611 0.412122 1.65164 
+1.4539 1.15942 2.21242 1.4611 0.412122 1.65164 1.443 1.21062 1.74973 
+1.42841 0.365295 2.19165 1.02301 0.054968 2.31857 1.0714 0.088124 1.7715 
+1.42841 0.365295 2.19165 1.0714 0.088124 1.7715 1.4611 0.412122 1.65164 
+1.4092 1.39108 1.39807 1.031 1.80704 1.50509 1.0487 1.50852 1.84846 
+1.4092 1.39108 1.39807 1.0487 1.50852 1.84846 1.443 1.21062 1.74973 
+1.0714 0.088124 1.7715 0.819605 -0.051918 1.80553 0.775802 -0.013216 1.44139 
+1.0714 0.088124 1.7715 0.775802 -0.013216 1.44139 1.1152 0.130393 1.41537 
+1.443 1.21062 1.74973 1.0487 1.50852 1.84846 1.1134 1.45817 2.05395 
+1.443 1.21062 1.74973 1.1134 1.45817 2.05395 1.4539 1.15942 2.21242 
+0.81601 -0.118796 2.43076 0.454911 -0.302273 2.4731 0.428706 -0.22973 1.8565 
+0.81601 -0.118796 2.43076 0.428706 -0.22973 1.8565 0.819605 -0.051918 1.80553 
+1.443 1.21062 1.74973 1.4611 0.412122 1.65164 1.5181 0.564247 1.28216 
+1.443 1.21062 1.74973 1.5181 0.564247 1.28216 1.4092 1.39108 1.39807 
+1.4611 0.412122 1.65164 1.0714 0.088124 1.7715 1.1152 0.130393 1.41537 
+1.4611 0.412122 1.65164 1.1152 0.130393 1.41537 1.5181 0.564247 1.28216 
+1.4092 1.39108 1.39807 1.40069 1.48009 1.03123 0.996893 2.0608 0.908529 
+1.4092 1.39108 1.39807 0.996893 2.0608 0.908529 1.031 1.80704 1.50509 
+1.02301 0.054968 2.31857 0.81601 -0.118796 2.43076 0.819605 -0.051918 1.80553 
+1.02301 0.054968 2.31857 0.819605 -0.051918 1.80553 1.0714 0.088124 1.7715 
+0.819605 -0.051918 1.80553 0.428706 -0.22973 1.8565 0.421803 -0.169266 1.50145 
+0.819605 -0.051918 1.80553 0.421803 -0.169266 1.50145 0.775802 -0.013216 1.44139 
+1.2179 0.134171 1.10559 0.7702 0.037951 1.15829 0.769796 0.072727 0.752034 
+1.2179 0.134171 1.10559 0.769796 0.072727 0.752034 1.3183 0.120153 0.697624 
+1.63494 1.07299 6.0034 1.56613 0.529101 5.56185 1.93073 0.486125 5.43497 
+1.63494 1.07299 6.0034 1.93073 0.486125 5.43497 2.14334 0.983783 5.88272 
+1.48714 1.66076 6.03432 1.63494 1.07299 6.0034 2.14334 0.983783 5.88272 
+1.48714 1.66076 6.03432 2.14334 0.983783 5.88272 1.96073 1.70863 5.75121 
+2.36583 1.84034 5.36115 2.03502 2.11702 4.75939 1.68903 2.08972 5.31788 
+2.36583 1.84034 5.36115 1.68903 2.08972 5.31788 1.96073 1.70863 5.75121 
+1.56613 0.529101 5.56185 1.41253 0.221922 5.09528 1.88553 0.324383 4.9111 
+1.56613 0.529101 5.56185 1.88553 0.324383 4.9111 1.93073 0.486125 5.43497 
+2.01922 0.285235 4.38913 2.13403 0.403217 4.78202 1.88553 0.324383 4.9111 
+2.01922 0.285235 4.38913 1.88553 0.324383 4.9111 1.70413 0.078347 4.50698 
+0.802224 -0.436626 4.03796 1.70413 0.078347 4.50698 0.869429 -0.163471 4.75279 
+0.802224 -0.436626 4.03796 0.869429 -0.163471 4.75279 0.328825 -0.508223 4.08547 
+1.05151 2.40475 3.29767 1.75321 1.64826 3.17214 1.51381 1.198 2.72608 
+1.05151 2.40475 3.29767 1.51381 1.198 2.72608 1.08661 2.02612 2.7948 
+1.07593 2.19363 5.55792 1.36203 1.92288 5.7889 1.68903 2.08972 5.31788 
+1.07593 2.19363 5.55792 1.68903 2.08972 5.31788 1.38282 2.17325 4.82592 
+1.91912 1.94685 3.90458 0.959917 2.46368 4.01902 0.799623 2.41354 4.68322 
+1.91912 1.94685 3.90458 0.799623 2.41354 4.68322 1.38282 2.17325 4.82592 
+1.4e-05 2.24413 3.56942 1.05151 2.40475 3.29767 1.08661 2.02612 2.7948 
+1.4e-05 2.24413 3.56942 1.08661 2.02612 2.7948 1e-05 1.93932 3.01266 
+0.955619 -0.305008 3.4035 0.802224 -0.436626 4.03796 0.328825 -0.508223 4.08547 
+0.955619 -0.305008 3.4035 0.328825 -0.508223 4.08547 0.456219 -0.486878 3.44395 
+0.802224 -0.436626 4.03796 0.955619 -0.305008 3.4035 1.27122 -0.078209 3.18603 
+0.802224 -0.436626 4.03796 1.27122 -0.078209 3.18603 1.59322 -0.080792 3.86122 
+0.81601 -0.118796 2.43076 1.02301 0.054968 2.31857 1.27122 -0.078209 3.18603 
+0.81601 -0.118796 2.43076 1.27122 -0.078209 3.18603 0.955619 -0.305008 3.4035 
+1.41253 0.221922 5.09528 0.846334 0.394155 5.4753 0.472132 -0.030831 5.20415 
+1.41253 0.221922 5.09528 0.472132 -0.030831 5.20415 0.869429 -0.163471 4.75279 
+0.869429 -0.163471 4.75279 0.472132 -0.030831 5.20415 3.2e-05 0.038122 5.14263 
+0.869429 -0.163471 4.75279 3.2e-05 0.038122 5.14263 2.9e-05 -0.335256 4.67559 
+1.51381 1.198 2.72608 1.75321 1.64826 3.17214 1.73022 0.567537 3.46749 
+1.51381 1.198 2.72608 1.73022 0.567537 3.46749 1.55681 0.500411 2.91571 
+1.59322 -0.080792 3.86122 1.27122 -0.078209 3.18603 1.55681 0.500411 2.91571 
+1.59322 -0.080792 3.86122 1.55681 0.500411 2.91571 1.73022 0.567537 3.46749 
+3.11431 0.855993 2.89756 3.17441 1.31702 2.91516 3.57231 1.17296 2.61516 
+3.11431 0.855993 2.89756 3.57231 1.17296 2.61516 3.29851 0.825742 2.66743 
+3.82291 1.28661 2.82293 3.57231 1.17296 2.61516 3.17441 1.31702 2.91516 
+3.82291 1.28661 2.82293 3.17441 1.31702 2.91516 3.40361 1.55373 3.22954 
+3.36071 0.649095 2.84811 3.24121 0.698878 3.04651 3.11431 0.855993 2.89756 
+3.36071 0.649095 2.84811 3.11431 0.855993 2.89756 3.29851 0.825742 2.66743 
+1.49439 -0.007078 -0.580412 0.813986 -0.038867 -0.535138 1.32857 0.223014 -3.07628 
+1.49439 -0.007078 -0.580412 1.32857 0.223014 -3.07628 1.72096 0.394584 -3.18978 
+1.94218 0.681402 -0.598277 1.49439 -0.007078 -0.580412 1.72096 0.394584 -3.18978 
+1.94218 0.681402 -0.598277 1.72096 0.394584 -3.18978 1.95006 0.768853 -3.20564 
+1.18868 1.82169 -0.642471 1.64658 1.48769 -0.618451 1.84106 1.3349 -2.8996 
+1.18868 1.82169 -0.642471 1.84106 1.3349 -2.8996 1.57736 1.56001 -2.92727 
+1.5181 0.564247 1.28216 1.1152 0.130393 1.41537 1.2179 0.134171 1.10559 
+1.5181 0.564247 1.28216 1.2179 0.134171 1.10559 1.6121 0.611438 1.01775 
+1.94218 0.681402 -0.598277 1.95006 0.768853 -3.20564 1.84106 1.3349 -2.8996 
+1.94218 0.681402 -0.598277 1.84106 1.3349 -2.8996 1.64658 1.48769 -0.618451 
+1.4092 1.39108 1.39807 1.5181 0.564247 1.28216 1.6121 0.611438 1.01775 
+1.4092 1.39108 1.39807 1.6121 0.611438 1.01775 1.40069 1.48009 1.03123 
+0.025783 0.932519 -0.651327 0.386881 1.66079 -0.642727 1.16986 1.56057 -2.96497 
+0.025783 0.932519 -0.651327 1.16986 1.56057 -2.96497 0.707563 1.09631 -3.07338 
+1.18868 1.82169 -0.642471 1.57736 1.56001 -2.92727 1.16986 1.56057 -2.96497 
+1.18868 1.82169 -0.642471 1.16986 1.56057 -2.96497 0.386881 1.66079 -0.642727 
+0.025783 0.932519 -0.651327 0.034589 0.968515 0.125827 0.258189 1.78571 0.274197 
+0.025783 0.932519 -0.651327 0.258189 1.78571 0.274197 0.386881 1.66079 -0.642727 
+1.32857 0.223014 -3.07628 0.813986 -0.038867 -0.535138 0.098084 0.483629 -0.679078 
+1.32857 0.223014 -3.07628 0.098084 0.483629 -0.679078 0.693764 0.584848 -3.08419 
+1.02549 2.02028 0.404658 1.18868 1.82169 -0.642471 0.386881 1.66079 -0.642727 
+1.02549 2.02028 0.404658 0.386881 1.66079 -0.642727 0.258189 1.78571 0.274197 
+1.41819 1.49455 0.65349 1.64658 1.48769 -0.618451 1.18868 1.82169 -0.642471 
+1.41819 1.49455 0.65349 1.18868 1.82169 -0.642471 1.02549 2.02028 0.404658 
+3.36071 0.649095 2.84811 3.29851 0.825742 2.66743 4.79131 -0.785173 1.67417 
+3.36071 0.649095 2.84811 4.79131 -0.785173 1.67417 4.63841 -0.985242 1.83595 
+3.57231 1.17296 2.61516 4.97741 -0.672098 1.70464 4.79131 -0.785173 1.67417 
+3.57231 1.17296 2.61516 4.79131 -0.785173 1.67417 3.29851 0.825742 2.66743 
+5.07671 -0.747577 1.91783 4.97741 -0.672098 1.70464 3.57231 1.17296 2.61516 
+5.07671 -0.747577 1.91783 3.57231 1.17296 2.61516 3.82291 1.28661 2.82293 
+1.16986 1.56057 -2.96497 1.57736 1.56001 -2.92727 1.76815 1.631 -3.94399 
+1.16986 1.56057 -2.96497 1.76815 1.631 -3.94399 1.43876 1.59021 -3.89685 
+1.72096 0.394584 -3.18978 1.32857 0.223014 -3.07628 1.41126 0.312066 -3.96172 
+1.72096 0.394584 -3.18978 1.41126 0.312066 -3.96172 1.74066 0.35477 -3.93825 
+1.32857 0.223014 -3.07628 0.693764 0.584848 -3.08419 1.09246 0.638346 -3.93228 
+1.32857 0.223014 -3.07628 1.09246 0.638346 -3.93228 1.41126 0.312066 -3.96172 
+1.95006 0.768853 -3.20564 1.72096 0.394584 -3.18978 1.74066 0.35477 -3.93825 
+1.95006 0.768853 -3.20564 1.74066 0.35477 -3.93825 2.05596 0.794716 -3.92414 
+1.84106 1.3349 -2.8996 1.95006 0.768853 -3.20564 2.05596 0.794716 -3.92414 
+1.84106 1.3349 -2.8996 2.05596 0.794716 -3.92414 2.03446 1.36014 -3.88131 
+0.707563 1.09631 -3.07338 1.16986 1.56057 -2.96497 1.43876 1.59021 -3.89685 
+0.707563 1.09631 -3.07338 1.43876 1.59021 -3.89685 0.993656 1.22236 -3.93387 
+1.57736 1.56001 -2.92727 1.84106 1.3349 -2.8996 2.03446 1.36014 -3.88131 
+1.57736 1.56001 -2.92727 2.03446 1.36014 -3.88131 1.76815 1.631 -3.94399 
+2.03446 1.36014 -3.88131 2.05596 0.794716 -3.92414 2.29415 0.846331 -4.97034 
+2.03446 1.36014 -3.88131 2.29415 0.846331 -4.97034 2.42885 1.53714 -4.94659 
+2.05596 0.794716 -3.92414 1.74066 0.35477 -3.93825 1.92455 0.504161 -5.12415 
+2.05596 0.794716 -3.92414 1.92455 0.504161 -5.12415 2.29415 0.846331 -4.97034 
+1.76815 1.631 -3.94399 2.03446 1.36014 -3.88131 2.42885 1.53714 -4.94659 
+1.76815 1.631 -3.94399 2.42885 1.53714 -4.94659 2.09734 1.98452 -5.11225 
+0.993656 1.22236 -3.93387 1.43876 1.59021 -3.89685 1.57534 2.0019 -5.20247 
+0.993656 1.22236 -3.93387 1.57534 2.0019 -5.20247 0.966845 1.37176 -5.21976 
+1.43876 1.59021 -3.89685 1.76815 1.631 -3.94399 2.09734 1.98452 -5.11225 
+1.43876 1.59021 -3.89685 2.09734 1.98452 -5.11225 1.57534 2.0019 -5.20247 
+1.41126 0.312066 -3.96172 1.09246 0.638346 -3.93228 1.04065 0.912372 -5.24766 
+1.41126 0.312066 -3.96172 1.04065 0.912372 -5.24766 1.41845 0.597409 -5.25706 
+1.74066 0.35477 -3.93825 1.41126 0.312066 -3.96172 1.41845 0.597409 -5.25706 
+1.74066 0.35477 -3.93825 1.41845 0.597409 -5.25706 1.92455 0.504161 -5.12415 
+2.29415 0.846331 -4.97034 1.92455 0.504161 -5.12415 1.96093 0.527476 -7.86837 
+2.29415 0.846331 -4.97034 1.96093 0.527476 -7.86837 2.19432 0.816285 -7.89408 
+2.09734 1.98452 -5.11225 2.42885 1.53714 -4.94659 2.23212 1.21081 -7.89986 
+2.09734 1.98452 -5.11225 2.23212 1.21081 -7.89986 1.93792 1.53729 -7.87021 
+0.966845 1.37176 -5.21976 1.57534 2.0019 -5.20247 1.77592 1.50186 -7.88745 
+0.966845 1.37176 -5.21976 1.77592 1.50186 -7.88745 1.64673 1.13997 -7.86485 
+1.57534 2.0019 -5.20247 2.09734 1.98452 -5.11225 1.93792 1.53729 -7.87021 
+1.57534 2.0019 -5.20247 1.93792 1.53729 -7.87021 1.77592 1.50186 -7.88745 
+1.41845 0.597409 -5.25706 1.04065 0.912372 -5.24766 1.64973 0.820791 -7.79886 
+1.41845 0.597409 -5.25706 1.64973 0.820791 -7.79886 1.75043 0.581912 -7.80425 
+1.92455 0.504161 -5.12415 1.41845 0.597409 -5.25706 1.75043 0.581912 -7.80425 
+1.92455 0.504161 -5.12415 1.75043 0.581912 -7.80425 1.96093 0.527476 -7.86837 
+2.42885 1.53714 -4.94659 2.29415 0.846331 -4.97034 2.19432 0.816285 -7.89408 
+2.42885 1.53714 -4.94659 2.19432 0.816285 -7.89408 2.23212 1.21081 -7.89986 
+4.72071 -1.14128 2.03751 4.63841 -0.985242 1.83595 4.52531 -1.40097 1.81764 
+4.72071 -1.14128 2.03751 4.52531 -1.40097 1.81764 4.57321 -1.58649 1.84527 
+4.48151 -1.86761 1.68131 4.42581 -1.78813 1.58844 4.35271 -2.03383 1.46592 
+4.48151 -1.86761 1.68131 4.35271 -2.03383 1.46592 4.46551 -2.10291 1.51004 
+4.46551 -2.10291 1.51004 4.35271 -2.03383 1.46592 4.39611 -1.9876 1.41092 
+4.46551 -2.10291 1.51004 4.39611 -1.9876 1.41092 4.51181 -2.05998 1.45572 
+4.60061 -1.86775 1.54431 4.51001 -1.77138 1.52761 4.62401 -1.43759 1.60458 
+4.60061 -1.86775 1.54431 4.62401 -1.43759 1.60458 4.75441 -1.65751 1.63298 
+4.48151 -1.86761 1.68131 4.60061 -1.86775 1.54431 4.75441 -1.65751 1.63298 
+4.48151 -1.86761 1.68131 4.75441 -1.65751 1.63298 4.57321 -1.58649 1.84527 
+4.42581 -1.78813 1.58844 4.51001 -1.77138 1.52761 4.39611 -1.9876 1.41092 
+4.42581 -1.78813 1.58844 4.39611 -1.9876 1.41092 4.35271 -2.03383 1.46592 
+4.57321 -1.58649 1.84527 4.52531 -1.40097 1.81764 4.42581 -1.78813 1.58844 
+4.57321 -1.58649 1.84527 4.42581 -1.78813 1.58844 4.48151 -1.86761 1.68131 
+4.51181 -2.05998 1.45572 4.39611 -1.9876 1.41092 4.51001 -1.77138 1.52761 
+4.51181 -2.05998 1.45572 4.51001 -1.77138 1.52761 4.60061 -1.86775 1.54431 
+4.46551 -2.10291 1.51004 4.51181 -2.05998 1.45572 4.60061 -1.86775 1.54431 
+4.46551 -2.10291 1.51004 4.60061 -1.86775 1.54431 4.48151 -1.86761 1.68131 
+4.52531 -1.40097 1.81764 4.62401 -1.43759 1.60458 4.51001 -1.77138 1.52761 
+4.52531 -1.40097 1.81764 4.51001 -1.77138 1.52761 4.42581 -1.78813 1.58844 
+4.57321 -1.58649 1.84527 4.75441 -1.65751 1.63298 4.99291 -1.5916 1.77555 
+4.57321 -1.58649 1.84527 4.99291 -1.5916 1.77555 4.95461 -1.36959 1.92046 
+5.15781 -0.976547 1.78888 5.07671 -0.747577 1.91783 4.92351 -0.961202 2.09305 
+5.15781 -0.976547 1.78888 4.92351 -0.961202 2.09305 4.95461 -1.36959 1.92046 
+4.72071 -1.14128 2.03751 4.57321 -1.58649 1.84527 4.95461 -1.36959 1.92046 
+4.72071 -1.14128 2.03751 4.95461 -1.36959 1.92046 4.92351 -0.961202 2.09305 
+4.63841 -0.985242 1.83595 4.73431 -1.12626 1.62137 4.62401 -1.43759 1.60458 
+4.63841 -0.985242 1.83595 4.62401 -1.43759 1.60458 4.52531 -1.40097 1.81764 
+5.07671 -0.747577 1.91783 5.15781 -0.976547 1.78888 5.1426 -0.824782 1.60361 
+5.07671 -0.747577 1.91783 5.1426 -0.824782 1.60361 4.97741 -0.672098 1.70464 
+5.1426 -0.824782 1.60361 5.15781 -0.976547 1.78888 5.26401 -1.25502 1.58763 
+5.1426 -0.824782 1.60361 5.26401 -1.25502 1.58763 5.2595 -1.04067 1.28511 
+4.9846 -0.841438 1.44724 4.79131 -0.785173 1.67417 4.97741 -0.672098 1.70464 
+4.9846 -0.841438 1.44724 4.97741 -0.672098 1.70464 5.1426 -0.824782 1.60361 
+4.9846 -0.841438 1.44724 5.1426 -0.824782 1.60361 5.2595 -1.04067 1.28511 
+4.9846 -0.841438 1.44724 5.2595 -1.04067 1.28511 5.1429 -1.06261 1.19792 
+4.73431 -1.12626 1.62137 4.63841 -0.985242 1.83595 4.79131 -0.785173 1.67417 
+4.73431 -1.12626 1.62137 4.79131 -0.785173 1.67417 4.9846 -0.841438 1.44724 
+4.73431 -1.12626 1.62137 4.9846 -0.841438 1.44724 5.1429 -1.06261 1.19792 
+4.73431 -1.12626 1.62137 5.1429 -1.06261 1.19792 4.9896 -1.3497 1.46024 
+4.9896 -1.3497 1.46024 4.75441 -1.65751 1.63298 4.62401 -1.43759 1.60458 
+4.9896 -1.3497 1.46024 4.62401 -1.43759 1.60458 4.73431 -1.12626 1.62137 
+4.9896 -1.3497 1.46024 5.1429 -1.06261 1.19792 5.3362 -1.24648 1.04516 
+4.9896 -1.3497 1.46024 5.3362 -1.24648 1.04516 5.1122 -1.58994 1.22785 
+5.2595 -1.04067 1.28511 5.26401 -1.25502 1.58763 5.3263 -1.54783 1.39522 
+5.2595 -1.04067 1.28511 5.3263 -1.54783 1.39522 5.4338 -1.23883 1.12899 
+5.04661 -1.81982 1.6101 5.09741 -2.16769 1.35947 5.4124 -1.87288 1.13968 
+5.04661 -1.81982 1.6101 5.4124 -1.87288 1.13968 5.3263 -1.54783 1.39522 
+5.1429 -1.06261 1.19792 5.2595 -1.04067 1.28511 5.4338 -1.23883 1.12899 
+5.1429 -1.06261 1.19792 5.4338 -1.23883 1.12899 5.3362 -1.24648 1.04516 
+4.99291 -1.5916 1.77555 4.75441 -1.65751 1.63298 4.94851 -1.8302 1.50876 
+4.99291 -1.5916 1.77555 4.94851 -1.8302 1.50876 5.04661 -1.81982 1.6101 
+4.75441 -1.65751 1.63298 4.9896 -1.3497 1.46024 5.1122 -1.58994 1.22785 
+4.75441 -1.65751 1.63298 5.1122 -1.58994 1.22785 4.94851 -1.8302 1.50876 
+5.3362 -1.24648 1.04516 5.4338 -1.23883 1.12899 5.517 -1.45733 0.741286 
+5.3362 -1.24648 1.04516 5.517 -1.45733 0.741286 5.4339 -1.45517 0.677795 
+5.26401 -1.25502 1.58763 4.99291 -1.5916 1.77555 5.04661 -1.81982 1.6101 
+5.26401 -1.25502 1.58763 5.04661 -1.81982 1.6101 5.3263 -1.54783 1.39522 
+4.94851 -1.8302 1.50876 5.1122 -1.58994 1.22785 5.2466 -1.85732 1.05344 
+4.94851 -1.8302 1.50876 5.2466 -1.85732 1.05344 5.0156 -2.17028 1.21266 
+5.04661 -1.81982 1.6101 4.94851 -1.8302 1.50876 5.0156 -2.17028 1.21266 
+5.04661 -1.81982 1.6101 5.0156 -2.17028 1.21266 5.09741 -2.16769 1.35947 
+5.1122 -1.58994 1.22785 5.3362 -1.24648 1.04516 5.4339 -1.45517 0.677795 
+5.1122 -1.58994 1.22785 5.4339 -1.45517 0.677795 5.2466 -1.85732 1.05344 
+5.2466 -1.85732 1.05344 5.4339 -1.45517 0.677795 5.5361 -1.84054 0.572406 
+5.2466 -1.85732 1.05344 5.5361 -1.84054 0.572406 5.3286 -2.169 0.708055 
+5.4339 -1.45517 0.677795 5.517 -1.45733 0.741286 5.5994 -1.88893 0.593605 
+5.4339 -1.45517 0.677795 5.5994 -1.88893 0.593605 5.5361 -1.84054 0.572406 
+5.15781 -0.976547 1.78888 4.95461 -1.36959 1.92046 4.99291 -1.5916 1.77555 
+5.15781 -0.976547 1.78888 4.99291 -1.5916 1.77555 5.26401 -1.25502 1.58763 
+5.0156 -2.17028 1.21266 5.2466 -1.85732 1.05344 5.3286 -2.169 0.708055 
+5.0156 -2.17028 1.21266 5.3286 -2.169 0.708055 5.067 -2.43341 0.999768 
+5.09741 -2.16769 1.35947 5.0156 -2.17028 1.21266 5.067 -2.43341 0.999768 
+5.09741 -2.16769 1.35947 5.067 -2.43341 0.999768 5.1204 -2.46365 1.03554 
+5.4342 -2.25476 0.721299 5.3286 -2.169 0.708055 5.5361 -1.84054 0.572406 
+5.4342 -2.25476 0.721299 5.5361 -1.84054 0.572406 5.5994 -1.88893 0.593605 
+5.067 -2.43341 0.999768 5.3286 -2.169 0.708055 5.4342 -2.25476 0.721299 
+5.067 -2.43341 0.999768 5.4342 -2.25476 0.721299 5.1204 -2.46365 1.03554 
+5.3263 -1.54783 1.39522 5.4124 -1.87288 1.13968 5.517 -1.45733 0.741286 
+5.3263 -1.54783 1.39522 5.517 -1.45733 0.741286 5.4338 -1.23883 1.12899 
+5.4124 -1.87288 1.13968 5.4342 -2.25476 0.721299 5.5994 -1.88893 0.593605 
+5.4124 -1.87288 1.13968 5.5994 -1.88893 0.593605 5.517 -1.45733 0.741286 
+5.09741 -2.16769 1.35947 5.1204 -2.46365 1.03554 5.4342 -2.25476 0.721299 
+5.09741 -2.16769 1.35947 5.4342 -2.25476 0.721299 5.4124 -1.87288 1.13968 
+1.96093 0.527476 -7.86837 1.75043 0.581912 -7.80425 1.70582 0.417225 -8.05043 
+1.96093 0.527476 -7.86837 1.70582 0.417225 -8.05043 2.00842 0.387783 -8.01585 
+2.19432 0.816285 -7.89408 1.96093 0.527476 -7.86837 2.00842 0.387783 -8.01585 
+2.19432 0.816285 -7.89408 2.00842 0.387783 -8.01585 2.29452 0.786694 -8.26011 
+2.00842 0.387783 -8.01585 1.70582 0.417225 -8.05043 1.59732 0.380454 -8.25148 
+2.00842 0.387783 -8.01585 1.59732 0.380454 -8.25148 2.02922 0.165858 -8.18007 
+2.29452 0.786694 -8.26011 2.00842 0.387783 -8.01585 2.02922 0.165858 -8.18007 
+2.29452 0.786694 -8.26011 2.02922 0.165858 -8.18007 2.32652 0.606729 -8.43865 
+2.02922 0.165858 -8.18007 1.59732 0.380454 -8.25148 1.50842 -0.175627 -8.42707 
+2.02922 0.165858 -8.18007 1.50842 -0.175627 -8.42707 1.97902 -0.151439 -8.35108 
+2.32652 0.606729 -8.43865 2.02922 0.165858 -8.18007 1.97902 -0.151439 -8.35108 
+2.32652 0.606729 -8.43865 1.97902 -0.151439 -8.35108 2.42792 0.222209 -8.58004 
+1.97902 -0.151439 -8.35108 1.50842 -0.175627 -8.42707 1.55142 -0.826675 -8.56236 
+1.97902 -0.151439 -8.35108 1.55142 -0.826675 -8.56236 1.91102 -0.850976 -8.56186 
+2.42792 0.222209 -8.58004 1.97902 -0.151439 -8.35108 1.91102 -0.850976 -8.56186 
+2.42792 0.222209 -8.58004 1.91102 -0.850976 -8.56186 2.42492 -0.456935 -8.59514 
+1.77592 1.50186 -7.88745 1.93792 1.53729 -7.87021 1.98942 1.64716 -8.29776 
+1.77592 1.50186 -7.88745 1.98942 1.64716 -8.29776 1.72892 1.57491 -8.26146 
+1.64673 1.13997 -7.86485 1.77592 1.50186 -7.88745 1.72892 1.57491 -8.26146 
+1.64673 1.13997 -7.86485 1.72892 1.57491 -8.26146 1.64522 1.23958 -8.30474 
+1.93792 1.53729 -7.87021 2.23212 1.21081 -7.89986 2.22482 1.18629 -8.37896 
+1.93792 1.53729 -7.87021 2.22482 1.18629 -8.37896 1.98942 1.64716 -8.29776 
+2.19432 0.816285 -7.89408 2.29452 0.786694 -8.26011 2.22482 1.18629 -8.37896 
+2.19432 0.816285 -7.89408 2.22482 1.18629 -8.37896 2.23212 1.21081 -7.89986 
+1.70582 0.417225 -8.05043 1.75043 0.581912 -7.80425 1.64973 0.820791 -7.79886 
+1.70582 0.417225 -8.05043 1.64973 0.820791 -7.79886 1.61982 0.889651 -8.24968 
+1.98942 1.64716 -8.29776 2.22482 1.18629 -8.37896 2.22392 1.23686 -8.56516 
+1.98942 1.64716 -8.29776 2.22392 1.23686 -8.56516 1.96222 1.64726 -8.58976 
+1.64522 1.23958 -8.30474 1.72892 1.57491 -8.26146 1.72052 1.5509 -8.60076 
+1.64522 1.23958 -8.30474 1.72052 1.5509 -8.60076 1.63682 1.23536 -8.61466 
+1.72892 1.57491 -8.26146 1.98942 1.64716 -8.29776 1.96222 1.64726 -8.58976 
+1.72892 1.57491 -8.26146 1.96222 1.64726 -8.58976 1.72052 1.5509 -8.60076 
+2.32652 0.606729 -8.43865 2.22392 1.23686 -8.56516 2.22482 1.18629 -8.37896 
+2.32652 0.606729 -8.43865 2.22482 1.18629 -8.37896 2.29452 0.786694 -8.26011 
+1.70582 0.417225 -8.05043 1.61982 0.889651 -8.24968 1.64542 0.932351 -8.49231 
+1.70582 0.417225 -8.05043 1.64542 0.932351 -8.49231 1.59732 0.380454 -8.25148 
+1.72052 1.5509 -8.60076 1.96222 1.64726 -8.58976 1.92902 1.54546 -8.71228 
+1.72052 1.5509 -8.60076 1.92902 1.54546 -8.71228 1.76052 1.4045 -8.74436 
+1.55142 -0.826675 -8.56236 1.50842 -0.175627 -8.42707 1.46832 -0.167956 -8.68684 
+1.55142 -0.826675 -8.56236 1.46832 -0.167956 -8.68684 1.57412 -0.817256 -8.78522 
+2.22392 1.23686 -8.56516 2.32652 0.606729 -8.43865 2.24782 0.806084 -8.64563 
+2.22392 1.23686 -8.56516 2.24782 0.806084 -8.64563 2.14562 1.14087 -8.69115 
+1.96222 1.64726 -8.58976 2.22392 1.23686 -8.56516 2.14562 1.14087 -8.69115 
+1.96222 1.64726 -8.58976 2.14562 1.14087 -8.69115 1.92902 1.54546 -8.71228 
+1.50842 -0.175627 -8.42707 1.59732 0.380454 -8.25148 1.59032 0.399283 -8.4283 
+1.50842 -0.175627 -8.42707 1.59032 0.399283 -8.4283 1.46832 -0.167956 -8.68684 
+1.59732 0.380454 -8.25148 1.64542 0.932351 -8.49231 1.67262 0.877148 -8.66134 
+1.59732 0.380454 -8.25148 1.67262 0.877148 -8.66134 1.59032 0.399283 -8.4283 
+1.63682 1.23536 -8.61466 1.72052 1.5509 -8.60076 1.76052 1.4045 -8.74436 
+1.63682 1.23536 -8.61466 1.76052 1.4045 -8.74436 1.72592 1.1383 -8.74636 
+2.42792 0.222209 -8.58004 2.42492 -0.456935 -8.59514 2.40712 -0.481593 -8.77515 
+2.42792 0.222209 -8.58004 2.40712 -0.481593 -8.77515 2.34302 0.244366 -8.73945 
+2.32652 0.606729 -8.43865 2.42792 0.222209 -8.58004 2.34302 0.244366 -8.73945 
+2.32652 0.606729 -8.43865 2.34302 0.244366 -8.73945 2.24782 0.806084 -8.64563 
+2.42492 -0.456935 -8.59514 1.91102 -0.850976 -8.56186 1.89472 -0.870854 -8.76125 
+2.42492 -0.456935 -8.59514 1.89472 -0.870854 -8.76125 2.40712 -0.481593 -8.77515 
+1.91102 -0.850976 -8.56186 1.55142 -0.826675 -8.56236 1.57412 -0.817256 -8.78522 
+1.91102 -0.850976 -8.56186 1.57412 -0.817256 -8.78522 1.89472 -0.870854 -8.76125 
+1.89472 -0.870854 -8.76125 1.57412 -0.817256 -8.78522 1.46832 -0.167956 -8.68684 
+1.89472 -0.870854 -8.76125 1.46832 -0.167956 -8.68684 2.40712 -0.481593 -8.77515 
+1.59032 0.399283 -8.4283 2.34302 0.244366 -8.73945 2.40712 -0.481593 -8.77515 
+1.59032 0.399283 -8.4283 2.40712 -0.481593 -8.77515 1.46832 -0.167956 -8.68684 
+2.34302 0.244366 -8.73945 1.59032 0.399283 -8.4283 1.67262 0.877148 -8.66134 
+2.34302 0.244366 -8.73945 1.67262 0.877148 -8.66134 2.24782 0.806084 -8.64563 
+1.1152 0.130393 1.41537 0.775802 -0.013216 1.44139 0.7702 0.037951 1.15829 
+1.1152 0.130393 1.41537 0.7702 0.037951 1.15829 1.2179 0.134171 1.10559 
+1.67859 0.663104 0.66226 1.94218 0.681402 -0.598277 1.64658 1.48769 -0.618451 
+1.67859 0.663104 0.66226 1.64658 1.48769 -0.618451 1.41819 1.49455 0.65349 
+0.098084 0.483629 -0.679078 0.025783 0.932519 -0.651327 0.707563 1.09631 -3.07338 
+0.098084 0.483629 -0.679078 0.707563 1.09631 -3.07338 0.693764 0.584848 -3.08419 
+1.3183 0.120153 0.697624 1.49439 -0.007078 -0.580412 1.94218 0.681402 -0.598277 
+1.3183 0.120153 0.697624 1.94218 0.681402 -0.598277 1.67859 0.663104 0.66226 
+0.693764 0.584848 -3.08419 0.707563 1.09631 -3.07338 0.993656 1.22236 -3.93387 
+0.693764 0.584848 -3.08419 0.993656 1.22236 -3.93387 1.09246 0.638346 -3.93228 
+1.09246 0.638346 -3.93228 0.993656 1.22236 -3.93387 0.966845 1.37176 -5.21976 
+1.09246 0.638346 -3.93228 0.966845 1.37176 -5.21976 1.04065 0.912372 -5.24766 
+1.04065 0.912372 -5.24766 0.966845 1.37176 -5.21976 1.64673 1.13997 -7.86485 
+1.04065 0.912372 -5.24766 1.64673 1.13997 -7.86485 1.64973 0.820791 -7.79886 
+1.64973 0.820791 -7.79886 1.64673 1.13997 -7.86485 1.64522 1.23958 -8.30474 
+1.64973 0.820791 -7.79886 1.64522 1.23958 -8.30474 1.61982 0.889651 -8.24968 
+1.61982 0.889651 -8.24968 1.64522 1.23958 -8.30474 1.63682 1.23536 -8.61466 
+1.61982 0.889651 -8.24968 1.63682 1.23536 -8.61466 1.64542 0.932351 -8.49231 
+1.64542 0.932351 -8.49231 1.63682 1.23536 -8.61466 1.72592 1.1383 -8.74636 
+1.64542 0.932351 -8.49231 1.72592 1.1383 -8.74636 1.67262 0.877148 -8.66134 
+1.72592 1.1383 -8.74636 2.14562 1.14087 -8.69115 2.24782 0.806084 -8.64563 
+1.72592 1.1383 -8.74636 2.24782 0.806084 -8.64563 1.67262 0.877148 -8.66134 
+1.92902 1.54546 -8.71228 2.14562 1.14087 -8.69115 1.72592 1.1383 -8.74636 
+1.92902 1.54546 -8.71228 1.72592 1.1383 -8.74636 1.76052 1.4045 -8.74436 
+0.275947 -0.190554 6.9798 0.205947 -0.18185 7.00294 0.156047 -0.230142 7.00094 
+0.275947 -0.190554 6.9798 0.156047 -0.230142 7.00094 0.187147 -0.243827 6.92449 
+0.198048 -0.285349 7.05112 0.173948 -0.240587 7.0118 0.234847 -0.208758 7.00493 
+0.198048 -0.285349 7.05112 0.234847 -0.208758 7.00493 0.280147 -0.194331 7.02279 
+0.280147 -0.194331 7.02279 0.234847 -0.208758 7.00493 0.205947 -0.18185 7.00294 
+0.280147 -0.194331 7.02279 0.205947 -0.18185 7.00294 0.275947 -0.190554 6.9798 
+0.066148 -0.369457 7.07697 0.048348 -0.296767 7.00677 0.173948 -0.240587 7.0118 
+0.066148 -0.369457 7.07697 0.173948 -0.240587 7.0118 0.198048 -0.285349 7.05112 
+0.205947 -0.18185 7.00294 0.185147 -0.130171 6.98395 0.141047 -0.167707 6.9926 
+0.205947 -0.18185 7.00294 0.141047 -0.167707 6.9926 0.156047 -0.230142 7.00094 
+0.048348 -0.296767 7.00677 0.025748 -0.251986 7.01146 0.153347 -0.188789 7.01251 
+0.048348 -0.296767 7.00677 0.153347 -0.188789 7.01251 0.173948 -0.240587 7.0118 
+0.173948 -0.240587 7.0118 0.153347 -0.188789 7.01251 0.209947 -0.154392 7.01335 
+0.173948 -0.240587 7.0118 0.209947 -0.154392 7.01335 0.234847 -0.208758 7.00493 
+0.234847 -0.208758 7.00493 0.209947 -0.154392 7.01335 0.185147 -0.130171 6.98395 
+0.234847 -0.208758 7.00493 0.185147 -0.130171 6.98395 0.205947 -0.18185 7.00294 
+1.40069 1.48009 1.03123 1.6121 0.611438 1.01775 1.67859 0.663104 0.66226 
+1.40069 1.48009 1.03123 1.67859 0.663104 0.66226 1.41819 1.49455 0.65349 
+1.6121 0.611438 1.01775 1.2179 0.134171 1.10559 1.3183 0.120153 0.697624 
+1.6121 0.611438 1.01775 1.3183 0.120153 0.697624 1.67859 0.663104 0.66226 
+0.7702 0.037951 1.15829 0.775802 -0.013216 1.44139 0.421803 -0.169266 1.50145 
+0.7702 0.037951 1.15829 0.421803 -0.169266 1.50145 0.378599 -0.059868 1.08989 
+0.996893 2.0608 0.908529 1.40069 1.48009 1.03123 1.41819 1.49455 0.65349 
+0.996893 2.0608 0.908529 1.41819 1.49455 0.65349 1.02549 2.02028 0.404658 
+0.274691 1.90897 0.598707 0.258189 1.78571 0.274197 -0.00281 1.55375 0.384243 
+0.274691 1.90897 0.598707 -0.00281 1.55375 0.384243 -0.023407 1.77106 0.770243 
+0.769796 0.072727 0.752034 0.813986 -0.038867 -0.535138 1.49439 -0.007078 -0.580412 
+0.769796 0.072727 0.752034 1.49439 -0.007078 -0.580412 1.3183 0.120153 0.697624 
+0.996893 2.0608 0.908529 1.02549 2.02028 0.404658 0.258189 1.78571 0.274197 
+0.996893 2.0608 0.908529 0.258189 1.78571 0.274197 0.274691 1.90897 0.598707 
+1.031 1.80704 1.50509 0.248198 1.72488 1.46906 0.483303 1.63187 1.98258 
+1.031 1.80704 1.50509 0.483303 1.63187 1.98258 1.0487 1.50852 1.84846 
+0.119795 0.142545 0.553325 0.034589 0.968515 0.125827 0.025783 0.932519 -0.651327 
+0.119795 0.142545 0.553325 0.025783 0.932519 -0.651327 0.098084 0.483629 -0.679078 
+0.7702 0.037951 1.15829 0.378599 -0.059868 1.08989 0.119795 0.142545 0.553325 
+0.7702 0.037951 1.15829 0.119795 0.142545 0.553325 0.769796 0.072727 0.752034 
+0.119795 0.142545 0.553325 0.378599 -0.059868 1.08989 0 -0.129426 1.17621 
+0.119795 0.142545 0.553325 0 -0.129426 1.17621 -5e-06 0.103797 0.637667 
+0.813986 -0.038867 -0.535138 0.769796 0.072727 0.752034 0.119795 0.142545 0.553325 
+0.813986 -0.038867 -0.535138 0.119795 0.142545 0.553325 0.098084 0.483629 -0.679078 
+0.996893 2.0608 0.908529 0.274691 1.90897 0.598707 0.248198 1.72488 1.46906 
+0.996893 2.0608 0.908529 0.248198 1.72488 1.46906 1.031 1.80704 1.50509 
+0.985006 1.70273 2.38077 0.704904 1.69117 2.22372 6e-06 1.53432 2.30808 
+0.985006 1.70273 2.38077 6e-06 1.53432 2.30808 7e-06 1.55003 2.47524 
+0.704904 1.69117 2.22372 0.483303 1.63187 1.98258 4e-06 1.47799 2.12195 
+0.704904 1.69117 2.22372 4e-06 1.47799 2.12195 6e-06 1.53432 2.30808 
+1.0487 1.50852 1.84846 0.483303 1.63187 1.98258 0.704904 1.69117 2.22372 
+1.0487 1.50852 1.84846 0.704904 1.69117 2.22372 1.1134 1.45817 2.05395 
+1.4539 1.15942 2.21242 1.1134 1.45817 2.05395 0.704904 1.69117 2.22372 
+1.4539 1.15942 2.21242 0.704904 1.69117 2.22372 0.985006 1.70273 2.38077 
+-0.142545 -0.322903 7.88847 -0.509246 -0.167624 7.89361 -0.448346 -0.197845 7.80189 
+-0.142545 -0.322903 7.88847 -0.448346 -0.197845 7.80189 -0.197946 -0.26041 7.79333 
+-0.142545 -0.322903 7.88847 -0.241243 -0.248441 8.16468 -0.523444 -0.052334 8.11459 
+-0.142545 -0.322903 7.88847 -0.523444 -0.052334 8.11459 -0.509246 -0.167624 7.89361 
+-0.509246 -0.167624 7.89361 -0.601746 0.00657 7.82273 -0.529747 -0.076786 7.71499 
+-0.509246 -0.167624 7.89361 -0.529747 -0.076786 7.71499 -0.448346 -0.197845 7.80189 
+-0.509246 -0.167624 7.89361 -0.523444 -0.052334 8.11459 -0.603445 0.187327 8.00338 
+-0.509246 -0.167624 7.89361 -0.603445 0.187327 8.00338 -0.601746 0.00657 7.82273 
+-0.603445 0.187327 8.00338 -0.682547 0.522054 7.85176 -0.656948 0.28017 7.65346 
+-0.603445 0.187327 8.00338 -0.656948 0.28017 7.65346 -0.601746 0.00657 7.82273 
+-0.529747 -0.076786 7.71499 -0.601746 0.00657 7.82273 -0.656948 0.28017 7.65346 
+-0.529747 -0.076786 7.71499 -0.656948 0.28017 7.65346 -0.61425 0.104851 7.46383 
+-0.682547 0.522054 7.85176 -0.718747 0.832856 8.04594 -0.740849 0.843376 7.79878 
+-0.682547 0.522054 7.85176 -0.740849 0.843376 7.79878 -0.762449 0.698124 7.73818 
+-0.728549 0.98482 7.73986 -0.740849 0.843376 7.79878 -0.718747 0.832856 8.04594 
+-0.728549 0.98482 7.73986 -0.718747 0.832856 8.04594 -0.679749 1.12606 7.82725 
+-0.37765 -0.167592 7.35241 -0.189249 -0.226969 7.46826 -0.206948 -0.19043 7.60422 
+-0.682547 0.522054 7.85176 -0.762449 0.698124 7.73818 -0.69185 0.568152 7.48865 
+-0.682547 0.522054 7.85176 -0.69185 0.568152 7.48865 -0.656948 0.28017 7.65346 
+-0.853251 0.873424 7.56871 -0.826152 0.826269 7.41211 -0.708252 0.652461 7.29259 
+-0.853251 0.873424 7.56871 -0.708252 0.652461 7.29259 -0.69185 0.568152 7.48865 
+-0.69185 0.568152 7.48865 -0.762449 0.698124 7.73818 -0.858149 0.810312 7.71715 
+-0.69185 0.568152 7.48865 -0.858149 0.810312 7.71715 -0.853251 0.873424 7.56871 
+-0.72095 0.962644 7.61257 -0.728549 0.98482 7.73986 -0.679749 1.12606 7.82725 
+-0.72095 0.962644 7.61257 -0.679749 1.12606 7.82725 -0.645951 1.14939 7.62534 
+-0.69185 0.568152 7.48865 -0.591051 0.215463 7.26709 -0.61425 0.104851 7.46383 
+-0.69185 0.568152 7.48865 -0.61425 0.104851 7.46383 -0.656948 0.28017 7.65346 
+-0.17675 -0.236152 7.36692 -0.299351 -0.202706 7.23456 -0.193951 -0.254579 7.20375 
+-0.17675 -0.236152 7.36692 -0.193951 -0.254579 7.20375 -0.15095 -0.25874 7.26693 
+-0.299351 -0.202706 7.23456 -0.336852 -0.176808 7.08957 -0.202951 -0.27393 7.14337 
+-0.299351 -0.202706 7.23456 -0.202951 -0.27393 7.14337 -0.193951 -0.254579 7.20375 
+-0.202951 -0.27393 7.14337 -0.197952 -0.28535 7.05112 -0.066052 -0.369457 7.07697 
+-0.202951 -0.27393 7.14337 -0.066052 -0.369457 7.07697 -0.065251 -0.351734 7.14405 
+-0.467054 0.061397 6.96755 -0.439152 -0.070917 7.16461 -0.591051 0.215463 7.26709 
+-0.467054 0.061397 6.96755 -0.591051 0.215463 7.26709 -0.584353 0.311419 7.08398 
+-0.439152 -0.070917 7.16461 -0.336852 -0.176808 7.08957 -0.299351 -0.202706 7.23456 
+-0.439152 -0.070917 7.16461 -0.299351 -0.202706 7.23456 -0.37765 -0.167592 7.35241 
+-0.61425 0.104851 7.46383 -0.591051 0.215463 7.26709 -0.439152 -0.070917 7.16461 
+-0.61425 0.104851 7.46383 -0.439152 -0.070917 7.16461 -0.37765 -0.167592 7.35241 
+-0.529747 -0.076786 7.71499 -0.61425 0.104851 7.46383 -0.37765 -0.167592 7.35241 
+-0.69185 0.568152 7.48865 -0.708252 0.652461 7.29259 -0.584353 0.311419 7.08398 
+-0.69185 0.568152 7.48865 -0.584353 0.311419 7.08398 -0.591051 0.215463 7.26709 
+-0.708252 0.652461 7.29259 -0.826152 0.826269 7.41211 -0.679952 0.885988 7.40786 
+-0.708252 0.652461 7.29259 -0.679952 0.885988 7.40786 -0.644153 0.717423 7.22916 
+-0.72095 0.962644 7.61257 -0.679952 0.885988 7.40786 -0.826152 0.826269 7.41211 
+-0.72095 0.962644 7.61257 -0.826152 0.826269 7.41211 -0.853251 0.873424 7.56871 
+-0.853251 0.873424 7.56871 -0.858149 0.810312 7.71715 -0.728549 0.98482 7.73986 
+-0.853251 0.873424 7.56871 -0.728549 0.98482 7.73986 -0.72095 0.962644 7.61257 
+-0.740849 0.843376 7.79878 -0.728549 0.98482 7.73986 -0.858149 0.810312 7.71715 
+-0.740849 0.843376 7.79878 -0.858149 0.810312 7.71715 -0.762449 0.698124 7.73818 
+-0.645951 1.14939 7.62534 -0.611453 1.1104 7.38158 -0.679952 0.885988 7.40786 
+-0.645951 1.14939 7.62534 -0.679952 0.885988 7.40786 -0.72095 0.962644 7.61257 
+-0.644153 0.717423 7.22916 -0.679952 0.885988 7.40786 -0.611453 1.1104 7.38158 
+-0.644153 0.717423 7.22916 -0.611453 1.1104 7.38158 -0.668455 0.839318 7.03676 
+-0.718747 0.832856 8.04594 -0.667646 1.0925 8.18151 -0.574949 1.33185 7.8796 
+-0.718747 0.832856 8.04594 -0.574949 1.33185 7.8796 -0.679749 1.12606 7.82725 
+-0.667646 1.0925 8.18151 -0.432046 1.45887 8.28572 -0.380949 1.54 7.96395 
+-0.667646 1.0925 8.18151 -0.380949 1.54 7.96395 -0.574949 1.33185 7.8796 
+-0.432046 1.45887 8.28572 -0.230246 1.58127 8.33483 -0.220849 1.64492 8.00899 
+-0.432046 1.45887 8.28572 -0.220849 1.64492 8.00899 -0.380949 1.54 7.96395 
+-0.682547 0.522054 7.85176 -0.603445 0.187327 8.00338 -0.623044 0.391872 8.18672 
+-0.682547 0.522054 7.85176 -0.623044 0.391872 8.18672 -0.718747 0.832856 8.04594 
+-0.644153 0.717423 7.22916 -0.563755 0.47227 6.90214 -0.584353 0.311419 7.08398 
+-0.644153 0.717423 7.22916 -0.584353 0.311419 7.08398 -0.708252 0.652461 7.29259 
+-0.467054 0.061397 6.96755 -0.584353 0.311419 7.08398 -0.563755 0.47227 6.90214 
+-0.467054 0.061397 6.96755 -0.563755 0.47227 6.90214 -0.473856 0.246417 6.76901 
+-0.325653 -0.133466 6.93385 -0.467054 0.061397 6.96755 -0.473856 0.246417 6.76901 
+-0.325653 -0.133466 6.93385 -0.473856 0.246417 6.76901 -0.316755 -0.052346 6.73528 
+-0.325653 -0.133466 6.93385 -0.336852 -0.176808 7.08957 -0.439152 -0.070917 7.16461 
+-0.325653 -0.133466 6.93385 -0.439152 -0.070917 7.16461 -0.467054 0.061397 6.96755 
+-0.280052 -0.194333 7.0228 -0.336852 -0.176808 7.08957 -0.325653 -0.133466 6.93385 
+-0.280052 -0.194333 7.0228 -0.325653 -0.133466 6.93385 -0.275853 -0.190555 6.97981 
+-0.202951 -0.27393 7.14337 -0.336852 -0.176808 7.08957 -0.280052 -0.194333 7.0228 
+-0.202951 -0.27393 7.14337 -0.280052 -0.194333 7.0228 -0.197952 -0.28535 7.05112 
+-0.325653 -0.133466 6.93385 -0.206154 -0.180001 6.79695 -0.187053 -0.243828 6.92449 
+-0.325653 -0.133466 6.93385 -0.187053 -0.243828 6.92449 -0.275853 -0.190555 6.97981 
+-0.301453 1.5139 7.48004 -0.311256 1.47913 7.08329 -0.523856 1.30587 7.07278 
+-0.301453 1.5139 7.48004 -0.523856 1.30587 7.07278 -0.490453 1.33512 7.4253 
+-0.611453 1.1104 7.38158 -0.608956 1.17451 7.01434 -0.691156 0.971341 6.8858 
+-0.611453 1.1104 7.38158 -0.691156 0.971341 6.8858 -0.668455 0.839318 7.03676 
+-0.193951 -0.254579 7.20375 -0.202951 -0.27393 7.14337 -0.065251 -0.351734 7.14405 
+-0.193951 -0.254579 7.20375 -0.065251 -0.351734 7.14405 -0.063451 -0.344048 7.19608 
+-0.15095 -0.25874 7.26693 -0.193951 -0.254579 7.20375 -0.063451 -0.344048 7.19608 
+-0.15095 -0.25874 7.26693 -0.063451 -0.344048 7.19608 -0.05045 -0.376784 7.25324 
+-0.12455 -0.395105 7.30687 -0.15095 -0.25874 7.26693 -0.05045 -0.376784 7.25324 
+-0.12455 -0.395105 7.30687 -0.05045 -0.376784 7.25324 -0.05135 -0.473236 7.28984 
+-0.17675 -0.236152 7.36692 -0.113549 -0.349676 7.42126 -0.108348 -0.303015 7.52755 
+-0.17675 -0.236152 7.36692 -0.108348 -0.303015 7.52755 -0.189249 -0.226969 7.46826 
+-0.113549 -0.349676 7.42126 -0.17675 -0.236152 7.36692 -0.15095 -0.25874 7.26693 
+-0.113549 -0.349676 7.42126 -0.15095 -0.25874 7.26693 -0.12455 -0.395105 7.30687 
+-0.206948 -0.19043 7.60422 -0.189249 -0.226969 7.46826 -0.108348 -0.303015 7.52755 
+-0.206948 -0.19043 7.60422 -0.108348 -0.303015 7.52755 -0.111247 -0.198534 7.67808 
+-0.189249 -0.226969 7.46826 -0.37765 -0.167592 7.35241 -0.299351 -0.202706 7.23456 
+-0.189249 -0.226969 7.46826 -0.299351 -0.202706 7.23456 -0.17675 -0.236152 7.36692 
+-0.197946 -0.26041 7.79333 -0.111247 -0.198534 7.67808 -0.067547 -0.267563 7.7092 
+-0.197946 -0.26041 7.79333 -0.067547 -0.267563 7.7092 -0.142545 -0.322903 7.88847 
+-0.111247 -0.198534 7.67808 -0.108348 -0.303015 7.52755 -0.046148 -0.374429 7.53095 
+-0.111247 -0.198534 7.67808 -0.046148 -0.374429 7.53095 -0.067547 -0.267563 7.7092 
+-0.108348 -0.303015 7.52755 -0.113549 -0.349676 7.42126 -0.049549 -0.463785 7.39889 
+-0.108348 -0.303015 7.52755 -0.049549 -0.463785 7.39889 -0.046148 -0.374429 7.53095 
+-0.05135 -0.473236 7.28984 -0.049549 -0.463785 7.39889 -0.113549 -0.349676 7.42126 
+-0.05135 -0.473236 7.28984 -0.113549 -0.349676 7.42126 -0.12455 -0.395105 7.30687 
+-0.049549 -0.463785 7.39889 5.1e-05 -0.468356 7.39187 5.2e-05 -0.383508 7.52582 
+-0.049549 -0.463785 7.39889 5.2e-05 -0.383508 7.52582 -0.046148 -0.374429 7.53095 
+-0.049549 -0.463785 7.39889 -0.05135 -0.473236 7.28984 5e-05 -0.49152 7.28607 
+-0.049549 -0.463785 7.39889 5e-05 -0.49152 7.28607 5.1e-05 -0.468356 7.39187 
+5.2e-05 -0.383508 7.52582 5.3e-05 -0.282937 7.70283 -0.067547 -0.267563 7.7092 
+5.2e-05 -0.383508 7.52582 -0.067547 -0.267563 7.7092 -0.046148 -0.374429 7.53095 
+-0.216455 -0.15285 6.71176 -0.206154 -0.180001 6.79695 -0.325653 -0.133466 6.93385 
+-0.216455 -0.15285 6.71176 -0.325653 -0.133466 6.93385 -0.316755 -0.052346 6.73528 
+-0.584456 0.588646 6.81102 -0.647057 0.705255 6.712 -0.501658 0.490467 6.53911 
+-0.584456 0.588646 6.81102 -0.501658 0.490467 6.53911 -0.433856 0.358355 6.68717 
+-0.563755 0.47227 6.90214 -0.584456 0.588646 6.81102 -0.433856 0.358355 6.68717 
+-0.563755 0.47227 6.90214 -0.433856 0.358355 6.68717 -0.473856 0.246417 6.76901 
+-0.644153 0.717423 7.22916 -0.668455 0.839318 7.03676 -0.584456 0.588646 6.81102 
+-0.644153 0.717423 7.22916 -0.584456 0.588646 6.81102 -0.563755 0.47227 6.90214 
+-0.216455 -0.15285 6.71176 -0.316755 -0.052346 6.73528 -0.280856 -0.015888 6.64843 
+-0.216455 -0.15285 6.71176 -0.280856 -0.015888 6.64843 -0.209556 -0.100225 6.63298 
+-0.433856 0.358355 6.68717 -0.280856 -0.015888 6.64843 -0.316755 -0.052346 6.73528 
+-0.433856 0.358355 6.68717 -0.316755 -0.052346 6.73528 -0.473856 0.246417 6.76901 
+4.3e-05 0.04082 6.50136 -0.223357 0.109401 6.55454 -0.275458 0.3214 6.45801 
+4.3e-05 0.04082 6.50136 -0.275458 0.3214 6.45801 4.1e-05 0.253492 6.36313 
+-0.433856 0.358355 6.68717 -0.223357 0.109401 6.55454 -0.209556 -0.100225 6.63298 
+-0.433856 0.358355 6.68717 -0.209556 -0.100225 6.63298 -0.280856 -0.015888 6.64843 
+-0.645951 1.14939 7.62534 -0.510151 1.36252 7.66842 -0.490453 1.33512 7.4253 
+-0.645951 1.14939 7.62534 -0.490453 1.33512 7.4253 -0.611453 1.1104 7.38158 
+-0.510151 1.36252 7.66842 -0.318451 1.56988 7.72797 -0.301453 1.5139 7.48004 
+-0.510151 1.36252 7.66842 -0.301453 1.5139 7.48004 -0.490453 1.33512 7.4253 
+-0.433856 0.358355 6.68717 -0.501658 0.490467 6.53911 -0.275458 0.3214 6.45801 
+-0.433856 0.358355 6.68717 -0.275458 0.3214 6.45801 -0.223357 0.109401 6.55454 
+-0.668455 0.839318 7.03676 -0.691156 0.971341 6.8858 -0.647057 0.705255 6.712 
+-0.668455 0.839318 7.03676 -0.647057 0.705255 6.712 -0.584456 0.588646 6.81102 
+-0.608956 1.17451 7.01434 -0.611453 1.1104 7.38158 -0.490453 1.33512 7.4253 
+-0.608956 1.17451 7.01434 -0.490453 1.33512 7.4253 -0.523856 1.30587 7.07278 
+-0.645951 1.14939 7.62534 -0.679749 1.12606 7.82725 -0.574949 1.33185 7.8796 
+-0.645951 1.14939 7.62534 -0.574949 1.33185 7.8796 -0.510151 1.36252 7.66842 
+-0.574949 1.33185 7.8796 -0.380949 1.54 7.96395 -0.318451 1.56988 7.72797 
+-0.574949 1.33185 7.8796 -0.318451 1.56988 7.72797 -0.510151 1.36252 7.66842 
+-0.667646 1.0925 8.18151 -0.718747 0.832856 8.04594 -0.623044 0.391872 8.18672 
+-0.667646 1.0925 8.18151 -0.623044 0.391872 8.18672 -0.658644 0.7508 8.37491 
+5.7e-05 -0.279226 8.16095 5.9e-05 -0.13217 8.46316 -0.288341 -0.097578 8.44071 
+5.7e-05 -0.279226 8.16095 -0.288341 -0.097578 8.44071 -0.241243 -0.248441 8.16468 
+-0.288341 -0.097578 8.44071 -0.522843 0.106873 8.33155 -0.523444 -0.052334 8.11459 
+-0.288341 -0.097578 8.44071 -0.523444 -0.052334 8.11459 -0.241243 -0.248441 8.16468 
+-0.522843 0.106873 8.33155 -0.623044 0.391872 8.18672 -0.603445 0.187327 8.00338 
+-0.522843 0.106873 8.33155 -0.603445 0.187327 8.00338 -0.523444 -0.052334 8.11459 
+-0.432046 1.45887 8.28572 -0.667646 1.0925 8.18151 -0.658644 0.7508 8.37491 
+-0.432046 1.45887 8.28572 -0.658644 0.7508 8.37491 -0.471543 1.19814 8.58435 
+-0.230246 1.58127 8.33483 -0.432046 1.45887 8.28572 -0.471543 1.19814 8.58435 
+-0.230246 1.58127 8.33483 -0.471543 1.19814 8.58435 -0.203443 1.26995 8.65394 
+-0.522843 0.106873 8.33155 -0.511542 0.454329 8.56118 -0.658644 0.7508 8.37491 
+-0.522843 0.106873 8.33155 -0.658644 0.7508 8.37491 -0.623044 0.391872 8.18672 
+-0.511542 0.454329 8.56118 -0.419642 0.930034 8.68245 -0.471543 1.19814 8.58435 
+-0.511542 0.454329 8.56118 -0.471543 1.19814 8.58435 -0.658644 0.7508 8.37491 
+-0.24754 0.286036 8.70489 -0.184041 0.821999 8.7635 -0.419642 0.930034 8.68245 
+-0.24754 0.286036 8.70489 -0.419642 0.930034 8.68245 -0.511542 0.454329 8.56118 
+-0.24754 0.286036 8.70489 -0.511542 0.454329 8.56118 -0.522843 0.106873 8.33155 
+-0.24754 0.286036 8.70489 -0.522843 0.106873 8.33155 -0.288341 -0.097578 8.44071 
+-0.419642 0.930034 8.68245 -0.184041 0.821999 8.7635 -0.203443 1.26995 8.65394 
+-0.419642 0.930034 8.68245 -0.203443 1.26995 8.65394 -0.471543 1.19814 8.58435 
+-0.311256 1.47913 7.08329 -0.301453 1.5139 7.48004 -0.179153 1.58756 7.51405 
+-0.311256 1.47913 7.08329 -0.179153 1.58756 7.51405 -0.106556 1.51914 7.08136 
+-0.188651 1.64168 7.75077 -0.179153 1.58756 7.51405 -0.301453 1.5139 7.48004 
+-0.188651 1.64168 7.75077 -0.301453 1.5139 7.48004 -0.318451 1.56988 7.72797 
+-0.380949 1.54 7.96395 -0.220849 1.64492 8.00899 -0.188651 1.64168 7.75077 
+-0.380949 1.54 7.96395 -0.188651 1.64168 7.75077 -0.318451 1.56988 7.72797 
+-0.24754 0.286036 8.70489 6e-05 0.250302 8.73734 5.9e-05 0.80431 8.78522 
+-0.24754 0.286036 8.70489 5.9e-05 0.80431 8.78522 -0.184041 0.821999 8.7635 
+-0.184041 0.821999 8.7635 5.9e-05 0.80431 8.78522 5.7e-05 1.28571 8.66491 
+-0.184041 0.821999 8.7635 5.7e-05 1.28571 8.66491 -0.203443 1.26995 8.65394 
+-0.203443 1.26995 8.65394 5.7e-05 1.28571 8.66491 5.4e-05 1.6026 8.35331 
+-0.203443 1.26995 8.65394 5.4e-05 1.6026 8.35331 -0.230246 1.58127 8.33483 
+-0.288341 -0.097578 8.44071 5.9e-05 -0.13217 8.46316 6e-05 0.250302 8.73734 
+-0.288341 -0.097578 8.44071 6e-05 0.250302 8.73734 -0.24754 0.286036 8.70489 
+-0.647057 0.705255 6.712 -0.812362 0.886841 6.15805 -0.702663 0.650151 5.96097 
+-0.647057 0.705255 6.712 -0.702663 0.650151 5.96097 -0.501658 0.490467 6.53911 
+4.1e-05 0.253492 6.36313 -0.275458 0.3214 6.45801 -0.384764 0.432604 5.77807 
+4.1e-05 0.253492 6.36313 -0.384764 0.432604 5.77807 3.5e-05 0.26192 5.65296 
+-0.501658 0.490467 6.53911 -0.702663 0.650151 5.96097 -0.384764 0.432604 5.77807 
+-0.501658 0.490467 6.53911 -0.384764 0.432604 5.77807 -0.275458 0.3214 6.45801 
+-0.523856 1.30587 7.07278 -0.56806 1.57476 6.64019 -0.72146 1.49198 6.58555 
+-0.523856 1.30587 7.07278 -0.72146 1.49198 6.58555 -0.608956 1.17451 7.01434 
+-0.608956 1.17451 7.01434 -0.72146 1.49198 6.58555 -0.87796 1.27659 6.48576 
+-0.608956 1.17451 7.01434 -0.87796 1.27659 6.48576 -0.691156 0.971341 6.8858 
+-0.106556 1.51914 7.08136 -0.13276 1.62284 6.61988 -0.28606 1.62358 6.63579 
+-0.106556 1.51914 7.08136 -0.28606 1.62358 6.63579 -0.311256 1.47913 7.08329 
+-0.523856 1.30587 7.07278 -0.311256 1.47913 7.08329 -0.28606 1.62358 6.63579 
+-0.523856 1.30587 7.07278 -0.28606 1.62358 6.63579 -0.56806 1.57476 6.64019 
+-0.87796 1.27659 6.48576 -0.812362 0.886841 6.15805 -0.647057 0.705255 6.712 
+-0.87796 1.27659 6.48576 -0.647057 0.705255 6.712 -0.691156 0.971341 6.8858 
+-0.702663 0.650151 5.96097 -0.846266 0.394151 5.47531 -0.472067 -0.030833 5.20415 
+-0.702663 0.650151 5.96097 -0.472067 -0.030833 5.20415 -0.384764 0.432604 5.77807 
+-0.87796 1.27659 6.48576 -1.12276 1.27838 6.31887 -1.03856 0.871956 5.91169 
+-0.87796 1.27659 6.48576 -1.03856 0.871956 5.91169 -0.812362 0.886841 6.15805 
+-0.72146 1.49198 6.58555 -0.932962 1.58862 6.35915 -1.12276 1.27838 6.31887 
+-0.72146 1.49198 6.58555 -1.12276 1.27838 6.31887 -0.87796 1.27659 6.48576 
+-0.28606 1.62358 6.63579 -0.494663 1.71801 6.28747 -0.769363 1.70043 6.3072 
+-0.28606 1.62358 6.63579 -0.769363 1.70043 6.3072 -0.56806 1.57476 6.64019 
+-0.13276 1.62284 6.61988 -0.254763 1.68234 6.30573 -0.494663 1.71801 6.28747 
+-0.13276 1.62284 6.61988 -0.494663 1.71801 6.28747 -0.28606 1.62358 6.63579 
+-1.03856 0.871956 5.91169 -0.846266 0.394151 5.47531 -0.702663 0.650151 5.96097 
+-1.03856 0.871956 5.91169 -0.702663 0.650151 5.96097 -0.812362 0.886841 6.15805 
+-1.12276 1.27838 6.31887 -1.63486 1.07298 6.00342 -1.56607 0.529094 5.56187 
+-1.12276 1.27838 6.31887 -1.56607 0.529094 5.56187 -1.03856 0.871956 5.91169 
+-0.932962 1.58862 6.35915 -1.48706 1.66076 6.03435 -1.63486 1.07298 6.00342 
+-0.932962 1.58862 6.35915 -1.63486 1.07298 6.00342 -1.12276 1.27838 6.31887 
+-2.14326 0.983773 5.88276 -2.62767 0.996382 5.51661 -2.42657 0.556263 5.30219 
+-2.14326 0.983773 5.88276 -2.42657 0.556263 5.30219 -1.93067 0.486116 5.435 
+-1.96067 1.70862 5.75124 -2.36577 1.84033 5.36119 -2.62767 0.996382 5.51661 
+-1.96067 1.70862 5.75124 -2.62767 0.996382 5.51661 -2.14326 0.983773 5.88276 
+-2.62767 0.996382 5.51661 -3.72218 0.949487 3.71981 -3.54098 0.579106 3.61768 
+-2.62767 0.996382 5.51661 -3.54098 0.579106 3.61768 -2.42657 0.556263 5.30219 
+-2.36577 1.84033 5.36119 -3.40359 1.55371 3.22959 -3.72218 0.949487 3.71981 
+-2.36577 1.84033 5.36119 -3.72218 0.949487 3.71981 -2.62767 0.996382 5.51661 
+-3.72218 0.949487 3.71981 -4.00338 0.948551 3.3646 -3.80548 0.376432 3.34404 
+-3.72218 0.949487 3.71981 -3.80548 0.376432 3.34404 -3.54098 0.579106 3.61768 
+-3.40359 1.55371 3.22959 -3.82299 1.28659 2.82299 -4.00338 0.948551 3.3646 
+-3.40359 1.55371 3.22959 -4.00338 0.948551 3.3646 -3.72218 0.949487 3.71981 
+-4.00338 0.948551 3.3646 -4.92349 -0.961225 2.09313 -4.72069 -1.1413 2.03758 
+-4.00338 0.948551 3.3646 -4.72069 -1.1413 2.03758 -3.80548 0.376432 3.34404 
+-3.82299 1.28659 2.82299 -5.07669 -0.747601 1.91791 -4.92349 -0.961225 2.09313 
+-3.82299 1.28659 2.82299 -4.92349 -0.961225 2.09313 -4.00338 0.948551 3.3646 
+-0.72146 1.49198 6.58555 -0.56806 1.57476 6.64019 -0.769363 1.70043 6.3072 
+-0.72146 1.49198 6.58555 -0.769363 1.70043 6.3072 -0.932962 1.58862 6.35915 
+-1.96067 1.70862 5.75124 -1.48706 1.66076 6.03435 -1.36197 1.92287 5.78892 
+-1.96067 1.70862 5.75124 -1.36197 1.92287 5.78892 -1.68897 2.08971 5.31791 
+-1.48706 1.66076 6.03435 -0.932962 1.58862 6.35915 -0.769363 1.70043 6.3072 
+-1.48706 1.66076 6.03435 -0.769363 1.70043 6.3072 -1.36197 1.92287 5.78892 
+-3.40359 1.55371 3.22959 -2.36577 1.84033 5.36119 -2.03498 2.11701 4.75942 
+-3.40359 1.55371 3.22959 -2.03498 2.11701 4.75942 -3.17439 1.31701 2.91521 
+-2.42657 0.556263 5.30219 -3.54098 0.579106 3.61768 -3.24119 0.698862 3.04657 
+-2.42657 0.556263 5.30219 -3.24119 0.698862 3.04657 -2.13397 0.403207 4.78205 
+-1.93067 0.486116 5.435 -2.42657 0.556263 5.30219 -2.13397 0.403207 4.78205 
+-1.93067 0.486116 5.435 -2.13397 0.403207 4.78205 -1.88547 0.324374 4.91113 
+-2.13397 0.403207 4.78205 -3.24119 0.698862 3.04657 -3.11429 0.855978 2.89761 
+-2.13397 0.403207 4.78205 -3.11429 0.855978 2.89761 -2.08508 0.956946 4.24023 
+-1.70407 0.078339 4.50701 -0.869371 -0.163475 4.75281 -1.41247 0.221915 5.0953 
+-1.70407 0.078339 4.50701 -1.41247 0.221915 5.0953 -1.88547 0.324374 4.91113 
+-2.13397 0.403207 4.78205 -2.08508 0.956946 4.24023 -1.97048 0.75082 4.14898 
+-2.13397 0.403207 4.78205 -1.97048 0.75082 4.14898 -2.01918 0.285226 4.38916 
+-0.846266 0.394151 5.47531 -1.03856 0.871956 5.91169 -1.56607 0.529094 5.56187 
+-0.846266 0.394151 5.47531 -1.56607 0.529094 5.56187 -1.41247 0.221915 5.0953 
+-2.08508 0.956946 4.24023 -3.11429 0.855978 2.89761 -3.17439 1.31701 2.91521 
+-2.08508 0.956946 4.24023 -3.17439 1.31701 2.91521 -2.03498 2.11701 4.75942 
+-3.54098 0.579106 3.61768 -3.80548 0.376432 3.34404 -3.36069 0.64908 2.84816 
+-3.54098 0.579106 3.61768 -3.36069 0.64908 2.84816 -3.24119 0.698862 3.04657 
+-3.80548 0.376432 3.34404 -4.72069 -1.1413 2.03758 -4.63839 -0.985264 1.83602 
+-3.80548 0.376432 3.34404 -4.63839 -0.985264 1.83602 -3.36069 0.64908 2.84816 
+-2.03498 2.11701 4.75942 -1.91908 1.94684 3.90461 -1.97048 0.75082 4.14898 
+-2.03498 2.11701 4.75942 -1.97048 0.75082 4.14898 -2.08508 0.956946 4.24023 
+-1.38278 2.17324 4.82595 -1.91908 1.94684 3.90461 -2.03498 2.11701 4.75942 
+-1.38278 2.17324 4.82595 -2.03498 2.11701 4.75942 -1.68897 2.08971 5.31791 
+-0.254763 1.68234 6.30573 -0.63677 2.31028 5.52161 -1.07587 2.19362 5.55793 
+-0.254763 1.68234 6.30573 -1.07587 2.19362 5.55793 -0.494663 1.71801 6.28747 
+-1.38278 2.17324 4.82595 -1.07587 2.19362 5.55793 -0.63677 2.31028 5.52161 
+-1.38278 2.17324 4.82595 -0.63677 2.31028 5.52161 -0.799577 2.41353 4.68323 
+3.7e-05 1.67174 6.30518 2.9e-05 2.11491 5.4173 -0.63677 2.31028 5.52161 
+3.7e-05 1.67174 6.30518 -0.63677 2.31028 5.52161 -0.254763 1.68234 6.30573 
+-0.769363 1.70043 6.3072 -0.494663 1.71801 6.28747 -1.07587 2.19362 5.55793 
+-0.769363 1.70043 6.3072 -1.07587 2.19362 5.55793 -1.36197 1.92287 5.78892 
+2.4e-05 2.21409 4.7921 1.9e-05 2.31923 4.27163 -0.959883 2.46367 4.01903 
+2.4e-05 2.21409 4.7921 -0.959883 2.46367 4.01903 -0.799577 2.41353 4.68323 
+-1.91908 1.94684 3.90461 -0.959883 2.46367 4.01903 -1.05149 2.40475 3.29768 
+-1.91908 1.94684 3.90461 -1.05149 2.40475 3.29768 -1.75319 1.64826 3.17217 
+-1.97048 0.75082 4.14898 -1.91908 1.94684 3.90461 -1.75319 1.64826 3.17217 
+-1.97048 0.75082 4.14898 -1.75319 1.64826 3.17217 -1.73018 0.567529 3.46752 
+-2.01918 0.285226 4.38916 -1.97048 0.75082 4.14898 -1.73018 0.567529 3.46752 
+-2.01918 0.285226 4.38916 -1.73018 0.567529 3.46752 -1.59318 -0.0808 3.86125 
+-2.01918 0.285226 4.38916 -1.59318 -0.0808 3.86125 -0.802176 -0.436629 4.03797 
+-2.01918 0.285226 4.38916 -0.802176 -0.436629 4.03797 -1.70407 0.078339 4.50701 
+-0.955581 -0.305013 3.40351 -0.81599 -0.1188 2.43077 -0.454889 -0.302275 2.47311 
+-0.955581 -0.305013 3.40351 -0.454889 -0.302275 2.47311 -0.456181 -0.48688 3.44396 
+-1.55679 0.500404 2.91573 -1.42839 0.365288 2.19167 -1.02299 0.054963 2.31859 
+-1.55679 0.500404 2.91573 -1.02299 0.054963 2.31859 -1.27118 -0.078215 3.18605 
+-1.08659 2.02612 2.79482 -0.984994 1.70272 2.38078 -1.45389 1.15941 2.21244 
+-1.08659 2.02612 2.79482 -1.45389 1.15941 2.21244 -1.51379 1.19799 2.72611 
+-1.51379 1.19799 2.72611 -1.45389 1.15941 2.21244 -1.42839 0.365288 2.19167 
+-1.51379 1.19799 2.72611 -1.42839 0.365288 2.19167 -1.55679 0.500404 2.91573 
+-1.45389 1.15941 2.21244 -1.443 1.21062 1.74975 -1.4611 0.412115 1.65166 
+-1.45389 1.15941 2.21244 -1.4611 0.412115 1.65166 -1.42839 0.365288 2.19167 
+-1.42839 0.365288 2.19167 -1.4611 0.412115 1.65166 -1.0714 0.088019 1.77152 
+-1.42839 0.365288 2.19167 -1.0714 0.088019 1.77152 -1.02299 0.054963 2.31859 
+-1.4092 1.39107 1.39809 -1.443 1.21062 1.74975 -1.0487 1.50851 1.84848 
+-1.4092 1.39107 1.39809 -1.0487 1.50851 1.84848 -1.031 1.80703 1.50511 
+-1.0714 0.088019 1.77152 -1.1152 0.130288 1.41539 -0.775798 -0.01352 1.4414 
+-1.0714 0.088019 1.77152 -0.775798 -0.01352 1.4414 -0.819595 -0.052222 1.80554 
+-1.443 1.21062 1.74975 -1.45389 1.15941 2.21244 -1.1134 1.45817 2.05397 
+-1.443 1.21062 1.74975 -1.1134 1.45817 2.05397 -1.0487 1.50851 1.84848 
+-0.81599 -0.1188 2.43077 -0.819595 -0.052222 1.80554 -0.428694 -0.229932 1.85651 
+-0.81599 -0.1188 2.43077 -0.428694 -0.229932 1.85651 -0.454889 -0.302275 2.47311 
+-1.443 1.21062 1.74975 -1.4092 1.39107 1.39809 -1.5181 0.56424 1.28218 
+-1.443 1.21062 1.74975 -1.5181 0.56424 1.28218 -1.4611 0.412115 1.65166 
+-1.4611 0.412115 1.65166 -1.5181 0.56424 1.28218 -1.1152 0.130288 1.41539 
+-1.4611 0.412115 1.65166 -1.1152 0.130288 1.41539 -1.0714 0.088019 1.77152 
+-0.428694 -0.229932 1.85651 -0.421797 -0.169568 1.50145 3e-06 -0.224361 1.52412 
+-0.428694 -0.229932 1.85651 3e-06 -0.224361 1.52412 6e-06 -0.204218 1.90171 
+-1.4092 1.39107 1.39809 -1.031 1.80703 1.50511 -0.996907 2.06079 0.908545 
+-1.4092 1.39107 1.39809 -0.996907 2.06079 0.908545 -1.4007 1.48008 1.03126 
+-1.02299 0.054963 2.31859 -1.0714 0.088019 1.77152 -0.819595 -0.052222 1.80554 
+-1.02299 0.054963 2.31859 -0.819595 -0.052222 1.80554 -0.81599 -0.1188 2.43077 
+-0.819595 -0.052222 1.80554 -0.775798 -0.01352 1.4414 -0.421797 -0.169568 1.50145 
+-0.819595 -0.052222 1.80554 -0.421797 -0.169568 1.50145 -0.428694 -0.229932 1.85651 
+-1.2179 0.134165 1.10561 -1.3183 0.120147 0.697645 -0.769804 0.072723 0.752047 
+-1.2179 0.134165 1.10561 -0.769804 0.072723 0.752047 -0.7702 0.037848 1.15831 
+-1.63486 1.07298 6.00342 -2.14326 0.983773 5.88276 -1.93067 0.486116 5.435 
+-1.63486 1.07298 6.00342 -1.93067 0.486116 5.435 -1.56607 0.529094 5.56187 
+-1.48706 1.66076 6.03435 -1.96067 1.70862 5.75124 -2.14326 0.983773 5.88276 
+-1.48706 1.66076 6.03435 -2.14326 0.983773 5.88276 -1.63486 1.07298 6.00342 
+-2.36577 1.84033 5.36119 -1.96067 1.70862 5.75124 -1.68897 2.08971 5.31791 
+-2.36577 1.84033 5.36119 -1.68897 2.08971 5.31791 -2.03498 2.11701 4.75942 
+-1.56607 0.529094 5.56187 -1.93067 0.486116 5.435 -1.88547 0.324374 4.91113 
+-1.56607 0.529094 5.56187 -1.88547 0.324374 4.91113 -1.41247 0.221915 5.0953 
+-2.01918 0.285226 4.38916 -1.70407 0.078339 4.50701 -1.88547 0.324374 4.91113 
+-2.01918 0.285226 4.38916 -1.88547 0.324374 4.91113 -2.13397 0.403207 4.78205 
+-0.802176 -0.436629 4.03797 -0.328775 -0.508225 4.08548 -0.869371 -0.163475 4.75281 
+-0.802176 -0.436629 4.03797 -0.869371 -0.163475 4.75281 -1.70407 0.078339 4.50701 
+-1.05149 2.40475 3.29768 -1.08659 2.02612 2.79482 -1.51379 1.19799 2.72611 
+-1.05149 2.40475 3.29768 -1.51379 1.19799 2.72611 -1.75319 1.64826 3.17217 
+-1.07587 2.19362 5.55793 -1.38278 2.17324 4.82595 -1.68897 2.08971 5.31791 
+-1.07587 2.19362 5.55793 -1.68897 2.08971 5.31791 -1.36197 1.92287 5.78892 
+-1.91908 1.94684 3.90461 -1.38278 2.17324 4.82595 -0.799577 2.41353 4.68323 
+-1.91908 1.94684 3.90461 -0.799577 2.41353 4.68323 -0.959883 2.46367 4.01903 
+2.9e-05 2.11491 5.4173 2.4e-05 2.21409 4.7921 -0.799577 2.41353 4.68323 
+2.9e-05 2.11491 5.4173 -0.799577 2.41353 4.68323 -0.63677 2.31028 5.52161 
+-0.456181 -0.48688 3.44396 1.9e-05 -0.493623 3.33333 2.5e-05 -0.443114 4.10744 
+-0.456181 -0.48688 3.44396 2.5e-05 -0.443114 4.10744 -0.328775 -0.508225 4.08548 
+-0.955581 -0.305013 3.40351 -0.456181 -0.48688 3.44396 -0.328775 -0.508225 4.08548 
+-0.955581 -0.305013 3.40351 -0.328775 -0.508225 4.08548 -0.802176 -0.436629 4.03797 
+-0.802176 -0.436629 4.03797 -1.59318 -0.0808 3.86125 -1.27118 -0.078215 3.18605 
+-0.802176 -0.436629 4.03797 -1.27118 -0.078215 3.18605 -0.955581 -0.305013 3.40351 
+-0.81599 -0.1188 2.43077 -0.955581 -0.305013 3.40351 -1.27118 -0.078215 3.18605 
+-0.81599 -0.1188 2.43077 -1.27118 -0.078215 3.18605 -1.02299 0.054963 2.31859 
+-1.41247 0.221915 5.0953 -0.869371 -0.163475 4.75281 -0.472067 -0.030833 5.20415 
+-1.41247 0.221915 5.0953 -0.472067 -0.030833 5.20415 -0.846266 0.394151 5.47531 
+-1.51379 1.19799 2.72611 -1.55679 0.500404 2.91573 -1.73018 0.567529 3.46752 
+-1.51379 1.19799 2.72611 -1.73018 0.567529 3.46752 -1.75319 1.64826 3.17217 
+-1.59318 -0.0808 3.86125 -1.73018 0.567529 3.46752 -1.55679 0.500404 2.91573 
+-1.59318 -0.0808 3.86125 -1.55679 0.500404 2.91573 -1.27118 -0.078215 3.18605 
+-3.11429 0.855978 2.89761 -3.29849 0.825726 2.66749 -3.57229 1.17294 2.61522 
+-3.11429 0.855978 2.89761 -3.57229 1.17294 2.61522 -3.17439 1.31701 2.91521 
+-3.82299 1.28659 2.82299 -3.40359 1.55371 3.22959 -3.17439 1.31701 2.91521 
+-3.82299 1.28659 2.82299 -3.17439 1.31701 2.91521 -3.57229 1.17294 2.61522 
+-3.36069 0.64908 2.84816 -3.29849 0.825726 2.66749 -3.11429 0.855978 2.89761 
+-3.36069 0.64908 2.84816 -3.11429 0.855978 2.89761 -3.24119 0.698862 3.04657 
+-1.49441 -0.007085 -0.580388 -1.72104 0.394576 -3.18975 -1.32863 0.223008 -3.07626 
+-1.49441 -0.007085 -0.580388 -1.32863 0.223008 -3.07626 -0.814014 -0.038871 -0.535125 
+-1.94222 0.681393 -0.598246 -1.95014 0.768845 -3.20581 -1.72104 0.394576 -3.18975 
+-1.94222 0.681393 -0.598246 -1.72104 0.394576 -3.18975 -1.49441 -0.007085 -0.580388 
+-1.18872 1.82169 -0.642451 -1.57744 1.56 -2.92725 -1.84114 1.33489 -2.89967 
+-1.18872 1.82169 -0.642451 -1.84114 1.33489 -2.89967 -1.64662 1.48768 -0.618424 
+-1.5181 0.56424 1.28218 -1.6121 0.61143 1.01778 -1.2179 0.134165 1.10561 
+-1.5181 0.56424 1.28218 -1.2179 0.134165 1.10561 -1.1152 0.130288 1.41539 
+-1.94222 0.681393 -0.598246 -1.64662 1.48768 -0.618424 -1.84114 1.33489 -2.89967 
+-1.94222 0.681393 -0.598246 -1.84114 1.33489 -2.89967 -1.95014 0.768845 -3.20581 
+-1.4092 1.39107 1.39809 -1.4007 1.48008 1.03126 -1.6121 0.61143 1.01778 
+-1.4092 1.39107 1.39809 -1.6121 0.61143 1.01778 -1.5181 0.56424 1.28218 
+-0.025817 0.932518 -0.651327 -0.707637 1.09631 -3.07337 -1.16994 1.56056 -2.96505 
+-0.025817 0.932518 -0.651327 -1.16994 1.56056 -2.96505 -0.386918 1.66079 -0.642721 
+-1.18872 1.82169 -0.642451 -0.386918 1.66079 -0.642721 -1.16994 1.56056 -2.96505 
+-1.18872 1.82169 -0.642451 -1.16994 1.56056 -2.96505 -1.57744 1.56 -2.92725 
+-0.025817 0.932518 -0.651327 -0.386918 1.66079 -0.642721 -0.258211 1.78571 0.2742 
+-0.025817 0.932518 -0.651327 -0.258211 1.78571 0.2742 -0.034611 0.968514 0.125828 
+-1.32863 0.223008 -3.07626 -0.693835 0.584845 -3.08418 -0.098116 0.483629 -0.679076 
+-1.32863 0.223008 -3.07626 -0.098116 0.483629 -0.679076 -0.814014 -0.038871 -0.535125 
+-1.02551 2.02027 0.404675 -0.258211 1.78571 0.2742 -0.386918 1.66079 -0.642721 
+-1.02551 2.02027 0.404675 -0.386918 1.66079 -0.642721 -1.18872 1.82169 -0.642451 
+-1.41821 1.49454 0.653513 -1.02551 2.02027 0.404675 -1.18872 1.82169 -0.642451 
+-1.41821 1.49454 0.653513 -1.18872 1.82169 -0.642451 -1.64662 1.48768 -0.618424 
+-3.36069 0.64908 2.84816 -4.63839 -0.985264 1.83602 -4.79129 -0.785196 1.67425 
+-3.36069 0.64908 2.84816 -4.79129 -0.785196 1.67425 -3.29849 0.825726 2.66749 
+-3.57229 1.17294 2.61522 -3.29849 0.825726 2.66749 -4.79129 -0.785196 1.67425 
+-3.57229 1.17294 2.61522 -4.79129 -0.785196 1.67425 -4.97739 -0.672121 1.70472 
+-5.07669 -0.747601 1.91791 -3.82299 1.28659 2.82299 -3.57229 1.17294 2.61522 
+-5.07669 -0.747601 1.91791 -3.57229 1.17294 2.61522 -4.97739 -0.672121 1.70472 
+-1.16994 1.56056 -2.96505 -1.43884 1.5902 -3.89683 -1.76824 1.631 -3.94396 
+-1.16994 1.56056 -2.96505 -1.76824 1.631 -3.94396 -1.57744 1.56 -2.92725 
+-1.72104 0.394576 -3.18975 -1.74074 0.354762 -3.93822 -1.41134 0.312059 -3.9617 
+-1.72104 0.394576 -3.18975 -1.41134 0.312059 -3.9617 -1.32863 0.223008 -3.07626 
+-1.32863 0.223008 -3.07626 -1.41134 0.312059 -3.9617 -1.09254 0.638341 -3.93226 
+-1.32863 0.223008 -3.07626 -1.09254 0.638341 -3.93226 -0.693835 0.584845 -3.08418 
+-1.95014 0.768845 -3.20581 -2.05604 0.794707 -3.92431 -1.74074 0.354762 -3.93822 
+-1.95014 0.768845 -3.20581 -1.74074 0.354762 -3.93822 -1.72104 0.394576 -3.18975 
+-1.84114 1.33489 -2.89967 -2.03454 1.36013 -3.88138 -2.05604 0.794707 -3.92431 
+-1.84114 1.33489 -2.89967 -2.05604 0.794707 -3.92431 -1.95014 0.768845 -3.20581 
+-0.707637 1.09631 -3.07337 -0.993744 1.22235 -3.93385 -1.43884 1.5902 -3.89683 
+-0.707637 1.09631 -3.07337 -1.43884 1.5902 -3.89683 -1.16994 1.56056 -2.96505 
+-1.57744 1.56 -2.92725 -1.76824 1.631 -3.94396 -2.03454 1.36013 -3.88138 
+-1.57744 1.56 -2.92725 -2.03454 1.36013 -3.88138 -1.84114 1.33489 -2.89967 
+-2.03454 1.36013 -3.88138 -2.42895 1.53713 -4.94655 -2.29425 0.84632 -4.9703 
+-2.03454 1.36013 -3.88138 -2.29425 0.84632 -4.9703 -2.05604 0.794707 -3.92431 
+-2.05604 0.794707 -3.92431 -2.29425 0.84632 -4.9703 -1.92465 0.504152 -5.12412 
+-2.05604 0.794707 -3.92431 -1.92465 0.504152 -5.12412 -1.74074 0.354762 -3.93822 
+-1.76824 1.631 -3.94396 -2.09746 1.98451 -5.11221 -2.42895 1.53713 -4.94655 
+-1.76824 1.631 -3.94396 -2.42895 1.53713 -4.94655 -2.03454 1.36013 -3.88138 
+-0.993744 1.22235 -3.93385 -0.966955 1.37176 -5.21975 -1.57546 2.00189 -5.20244 
+-0.993744 1.22235 -3.93385 -1.57546 2.00189 -5.20244 -1.43884 1.5902 -3.89683 
+-1.43884 1.5902 -3.89683 -1.57546 2.00189 -5.20244 -2.09746 1.98451 -5.11221 
+-1.43884 1.5902 -3.89683 -2.09746 1.98451 -5.11221 -1.76824 1.631 -3.94396 
+-1.41134 0.312059 -3.9617 -1.41855 0.597402 -5.25704 -1.04075 0.912367 -5.24764 
+-1.41134 0.312059 -3.9617 -1.04075 0.912367 -5.24764 -1.09254 0.638341 -3.93226 
+-1.74074 0.354762 -3.93822 -1.92465 0.504152 -5.12412 -1.41855 0.597402 -5.25704 
+-1.74074 0.354762 -3.93822 -1.41855 0.597402 -5.25704 -1.41134 0.312059 -3.9617 
+-2.29425 0.84632 -4.9703 -2.19447 0.816275 -7.89405 -1.96107 0.527467 -7.86834 
+-2.29425 0.84632 -4.9703 -1.96107 0.527467 -7.86834 -1.92465 0.504152 -5.12412 
+-2.09746 1.98451 -5.11221 -1.93808 1.53728 -7.87018 -2.23228 1.2108 -7.89982 
+-2.09746 1.98451 -5.11221 -2.23228 1.2108 -7.89982 -2.42895 1.53713 -4.94655 
+-0.966955 1.37176 -5.21975 -1.64688 1.13996 -7.86482 -1.77608 1.50185 -7.88743 
+-0.966955 1.37176 -5.21975 -1.77608 1.50185 -7.88743 -1.57546 2.00189 -5.20244 
+-1.57546 2.00189 -5.20244 -1.77608 1.50185 -7.88743 -1.93808 1.53728 -7.87018 
+-1.57546 2.00189 -5.20244 -1.93808 1.53728 -7.87018 -2.09746 1.98451 -5.11221 
+-1.41855 0.597402 -5.25704 -1.75057 0.581903 -7.80422 -1.64987 0.820784 -7.79883 
+-1.41855 0.597402 -5.25704 -1.64987 0.820784 -7.79883 -1.04075 0.912367 -5.24764 
+-1.92465 0.504152 -5.12412 -1.96107 0.527467 -7.86834 -1.75057 0.581903 -7.80422 
+-1.92465 0.504152 -5.12412 -1.75057 0.581903 -7.80422 -1.41855 0.597402 -5.25704 
+-2.42895 1.53713 -4.94655 -2.23228 1.2108 -7.89982 -2.19447 0.816275 -7.89405 
+-2.42895 1.53713 -4.94655 -2.19447 0.816275 -7.89405 -2.29425 0.84632 -4.9703 
+-4.72069 -1.1413 2.03758 -4.57319 -1.58651 1.84535 -4.52529 -1.40099 1.81771 
+-4.72069 -1.1413 2.03758 -4.52529 -1.40099 1.81771 -4.63839 -0.985264 1.83602 
+-4.48149 -1.86763 1.68138 -4.46549 -2.10293 1.51011 -4.35269 -2.03385 1.46599 
+-4.48149 -1.86763 1.68138 -4.35269 -2.03385 1.46599 -4.42579 -1.78815 1.58851 
+-4.46549 -2.10293 1.51011 -4.51179 -2.06 1.45579 -4.39609 -1.98772 1.41099 
+-4.46549 -2.10293 1.51011 -4.39609 -1.98772 1.41099 -4.35269 -2.03385 1.46599 
+-4.60059 -1.86777 1.54438 -4.75439 -1.65753 1.63305 -4.62399 -1.43761 1.60466 
+-4.60059 -1.86777 1.54438 -4.62399 -1.43761 1.60466 -4.50999 -1.7714 1.52768 
+-4.48149 -1.86763 1.68138 -4.57319 -1.58651 1.84535 -4.75439 -1.65753 1.63305 
+-4.48149 -1.86763 1.68138 -4.75439 -1.65753 1.63305 -4.60059 -1.86777 1.54438 
+-4.42579 -1.78815 1.58851 -4.35269 -2.03385 1.46599 -4.39609 -1.98772 1.41099 
+-4.42579 -1.78815 1.58851 -4.39609 -1.98772 1.41099 -4.50999 -1.7714 1.52768 
+-4.57319 -1.58651 1.84535 -4.48149 -1.86763 1.68138 -4.42579 -1.78815 1.58851 
+-4.57319 -1.58651 1.84535 -4.42579 -1.78815 1.58851 -4.52529 -1.40099 1.81771 
+-4.51179 -2.06 1.45579 -4.60059 -1.86777 1.54438 -4.50999 -1.7714 1.52768 
+-4.51179 -2.06 1.45579 -4.50999 -1.7714 1.52768 -4.39609 -1.98772 1.41099 
+-4.46549 -2.10293 1.51011 -4.48149 -1.86763 1.68138 -4.60059 -1.86777 1.54438 
+-4.46549 -2.10293 1.51011 -4.60059 -1.86777 1.54438 -4.51179 -2.06 1.45579 
+-4.52529 -1.40099 1.81771 -4.42579 -1.78815 1.58851 -4.50999 -1.7714 1.52768 
+-4.52529 -1.40099 1.81771 -4.50999 -1.7714 1.52768 -4.62399 -1.43761 1.60466 
+-4.57319 -1.58651 1.84535 -4.95459 -1.36962 1.92054 -4.99289 -1.59162 1.77563 
+-4.57319 -1.58651 1.84535 -4.99289 -1.59162 1.77563 -4.75439 -1.65753 1.63305 
+-5.15779 -0.976571 1.78896 -4.95459 -1.36962 1.92054 -4.92349 -0.961225 2.09313 
+-5.15779 -0.976571 1.78896 -4.92349 -0.961225 2.09313 -5.07669 -0.747601 1.91791 
+-4.72069 -1.1413 2.03758 -4.92349 -0.961225 2.09313 -4.95459 -1.36962 1.92054 
+-4.72069 -1.1413 2.03758 -4.95459 -1.36962 1.92054 -4.57319 -1.58651 1.84535 
+-4.63839 -0.985264 1.83602 -4.52529 -1.40099 1.81771 -4.62399 -1.43761 1.60466 
+-4.63839 -0.985264 1.83602 -4.62399 -1.43761 1.60466 -4.73429 -1.12628 1.62144 
+-5.07669 -0.747601 1.91791 -4.97739 -0.672121 1.70472 -5.14259 -0.824806 1.60369 
+-5.07669 -0.747601 1.91791 -5.14259 -0.824806 1.60369 -5.15779 -0.976571 1.78896 
+-5.14259 -0.824806 1.60369 -5.2595 -1.04069 1.2852 -5.26399 -1.25504 1.58771 
+-5.14259 -0.824806 1.60369 -5.26399 -1.25504 1.58771 -5.15779 -0.976571 1.78896 
+-4.98459 -0.841461 1.44732 -5.14259 -0.824806 1.60369 -4.97739 -0.672121 1.70472 
+-4.98459 -0.841461 1.44732 -4.97739 -0.672121 1.70472 -4.79129 -0.785196 1.67425 
+-4.98459 -0.841461 1.44732 -5.1429 -1.06263 1.198 -5.2595 -1.04069 1.2852 
+-4.98459 -0.841461 1.44732 -5.2595 -1.04069 1.2852 -5.14259 -0.824806 1.60369 
+-4.73429 -1.12628 1.62144 -4.98459 -0.841461 1.44732 -4.79129 -0.785196 1.67425 
+-4.73429 -1.12628 1.62144 -4.79129 -0.785196 1.67425 -4.63839 -0.985264 1.83602 
+-4.73429 -1.12628 1.62144 -4.98959 -1.34972 1.46032 -5.1429 -1.06263 1.198 
+-4.73429 -1.12628 1.62144 -5.1429 -1.06263 1.198 -4.98459 -0.841461 1.44732 
+-4.98959 -1.34972 1.46032 -4.73429 -1.12628 1.62144 -4.62399 -1.43761 1.60466 
+-4.98959 -1.34972 1.46032 -4.62399 -1.43761 1.60466 -4.75439 -1.65753 1.63305 
+-4.98959 -1.34972 1.46032 -5.1122 -1.58996 1.22793 -5.3363 -1.24651 1.04525 
+-4.98959 -1.34972 1.46032 -5.3363 -1.24651 1.04525 -5.1429 -1.06263 1.198 
+-5.2595 -1.04069 1.2852 -5.4338 -1.23885 1.12908 -5.32629 -1.54785 1.39531 
+-5.2595 -1.04069 1.2852 -5.32629 -1.54785 1.39531 -5.26399 -1.25504 1.58771 
+-5.04659 -1.81984 1.61019 -5.32629 -1.54785 1.39531 -5.4124 -1.8729 1.13977 
+-5.04659 -1.81984 1.61019 -5.4124 -1.8729 1.13977 -5.09739 -2.16771 1.35955 
+-5.1429 -1.06263 1.198 -5.3363 -1.24651 1.04525 -5.4338 -1.23885 1.12908 
+-5.1429 -1.06263 1.198 -5.4338 -1.23885 1.12908 -5.2595 -1.04069 1.2852 
+-4.99289 -1.59162 1.77563 -5.04659 -1.81984 1.61019 -4.94849 -1.83022 1.50884 
+-4.99289 -1.59162 1.77563 -4.94849 -1.83022 1.50884 -4.75439 -1.65753 1.63305 
+-4.75439 -1.65753 1.63305 -4.94849 -1.83022 1.50884 -5.1122 -1.58996 1.22793 
+-4.75439 -1.65753 1.63305 -5.1122 -1.58996 1.22793 -4.98959 -1.34972 1.46032 
+-5.3363 -1.24651 1.04525 -5.4339 -1.45519 0.677883 -5.517 -1.45736 0.741375 
+-5.3363 -1.24651 1.04525 -5.517 -1.45736 0.741375 -5.4338 -1.23885 1.12908 
+-5.26399 -1.25504 1.58771 -5.32629 -1.54785 1.39531 -5.04659 -1.81984 1.61019 
+-5.26399 -1.25504 1.58771 -5.04659 -1.81984 1.61019 -4.99289 -1.59162 1.77563 
+-4.94849 -1.83022 1.50884 -5.01559 -2.17031 1.21274 -5.2466 -1.85735 1.05353 
+-4.94849 -1.83022 1.50884 -5.2466 -1.85735 1.05353 -5.1122 -1.58996 1.22793 
+-5.04659 -1.81984 1.61019 -5.09739 -2.16771 1.35955 -5.01559 -2.17031 1.21274 
+-5.04659 -1.81984 1.61019 -5.01559 -2.17031 1.21274 -4.94849 -1.83022 1.50884 
+-5.1122 -1.58996 1.22793 -5.2466 -1.85735 1.05353 -5.4339 -1.45519 0.677883 
+-5.1122 -1.58996 1.22793 -5.4339 -1.45519 0.677883 -5.3363 -1.24651 1.04525 
+-5.2466 -1.85735 1.05353 -5.3286 -2.16902 0.70814 -5.5361 -1.84056 0.572495 
+-5.2466 -1.85735 1.05353 -5.5361 -1.84056 0.572495 -5.4339 -1.45519 0.677883 
+-5.4339 -1.45519 0.677883 -5.5361 -1.84056 0.572495 -5.5994 -1.88895 0.593696 
+-5.4339 -1.45519 0.677883 -5.5994 -1.88895 0.593696 -5.517 -1.45736 0.741375 
+-5.15779 -0.976571 1.78896 -5.26399 -1.25504 1.58771 -4.99289 -1.59162 1.77563 
+-5.15779 -0.976571 1.78896 -4.99289 -1.59162 1.77563 -4.95459 -1.36962 1.92054 
+-5.01559 -2.17031 1.21274 -5.067 -2.43343 0.999849 -5.3286 -2.16902 0.70814 
+-5.01559 -2.17031 1.21274 -5.3286 -2.16902 0.70814 -5.2466 -1.85735 1.05353 
+-5.09739 -2.16771 1.35955 -5.1204 -2.46368 1.03563 -5.067 -2.43343 0.999849 
+-5.09739 -2.16771 1.35955 -5.067 -2.43343 0.999849 -5.01559 -2.17031 1.21274 
+-5.4342 -2.25478 0.721387 -5.5994 -1.88895 0.593696 -5.5361 -1.84056 0.572495 
+-5.4342 -2.25478 0.721387 -5.5361 -1.84056 0.572495 -5.3286 -2.16902 0.70814 
+-5.067 -2.43343 0.999849 -5.1204 -2.46368 1.03563 -5.4342 -2.25478 0.721387 
+-5.067 -2.43343 0.999849 -5.4342 -2.25478 0.721387 -5.3286 -2.16902 0.70814 
+-5.32629 -1.54785 1.39531 -5.4338 -1.23885 1.12908 -5.517 -1.45736 0.741375 
+-5.32629 -1.54785 1.39531 -5.517 -1.45736 0.741375 -5.4124 -1.8729 1.13977 
+-5.4124 -1.8729 1.13977 -5.517 -1.45736 0.741375 -5.5994 -1.88895 0.593696 
+-5.4124 -1.8729 1.13977 -5.5994 -1.88895 0.593696 -5.4342 -2.25478 0.721387 
+-5.09739 -2.16771 1.35955 -5.4124 -1.8729 1.13977 -5.4342 -2.25478 0.721387 
+-5.09739 -2.16771 1.35955 -5.4342 -2.25478 0.721387 -5.1204 -2.46368 1.03563 
+-1.96107 0.527467 -7.86834 -2.00857 0.387774 -8.01582 -1.70598 0.417217 -8.0504 
+-1.96107 0.527467 -7.86834 -1.70598 0.417217 -8.0504 -1.75057 0.581903 -7.80422 
+-2.19447 0.816275 -7.89405 -2.29468 0.786683 -8.26007 -2.00857 0.387774 -8.01582 
+-2.19447 0.816275 -7.89405 -2.00857 0.387774 -8.01582 -1.96107 0.527467 -7.86834 
+-2.00857 0.387774 -8.01582 -2.02938 0.165849 -8.18004 -1.59748 0.380446 -8.25146 
+-2.00857 0.387774 -8.01582 -1.59748 0.380446 -8.25146 -1.70598 0.417217 -8.0504 
+-2.29468 0.786683 -8.26007 -2.32668 0.606718 -8.43862 -2.02938 0.165849 -8.18004 
+-2.29468 0.786683 -8.26007 -2.02938 0.165849 -8.18004 -2.00857 0.387774 -8.01582 
+-2.02938 0.165849 -8.18004 -1.97918 -0.151449 -8.35105 -1.50858 -0.175635 -8.42705 
+-2.02938 0.165849 -8.18004 -1.50858 -0.175635 -8.42705 -1.59748 0.380446 -8.25146 
+-2.32668 0.606718 -8.43862 -2.42808 0.222197 -8.58 -1.97918 -0.151449 -8.35105 
+-2.32668 0.606718 -8.43862 -1.97918 -0.151449 -8.35105 -2.02938 0.165849 -8.18004 
+-1.97918 -0.151449 -8.35105 -1.91118 -0.850985 -8.56183 -1.55158 -0.826682 -8.56234 
+-1.97918 -0.151449 -8.35105 -1.55158 -0.826682 -8.56234 -1.50858 -0.175635 -8.42705 
+-2.42808 0.222197 -8.58 -2.42508 -0.456946 -8.5951 -1.91118 -0.850985 -8.56183 
+-2.42808 0.222197 -8.58 -1.91118 -0.850985 -8.56183 -1.97918 -0.151449 -8.35105 
+-1.77608 1.50185 -7.88743 -1.72908 1.5749 -8.26143 -1.98958 1.64715 -8.29773 
+-1.77608 1.50185 -7.88743 -1.98958 1.64715 -8.29773 -1.93808 1.53728 -7.87018 
+-1.64688 1.13996 -7.86482 -1.64538 1.23957 -8.30471 -1.72908 1.5749 -8.26143 
+-1.64688 1.13996 -7.86482 -1.72908 1.5749 -8.26143 -1.77608 1.50185 -7.88743 
+-1.93808 1.53728 -7.87018 -1.98958 1.64715 -8.29773 -2.22498 1.18628 -8.37893 
+-1.93808 1.53728 -7.87018 -2.22498 1.18628 -8.37893 -2.23228 1.2108 -7.89982 
+-2.19447 0.816275 -7.89405 -2.23228 1.2108 -7.89982 -2.22498 1.18628 -8.37893 
+-2.19447 0.816275 -7.89405 -2.22498 1.18628 -8.37893 -2.29468 0.786683 -8.26007 
+-1.70598 0.417217 -8.0504 -1.61998 0.889643 -8.24965 -1.64987 0.820784 -7.79883 
+-1.70598 0.417217 -8.0504 -1.64987 0.820784 -7.79883 -1.75057 0.581903 -7.80422 
+-1.98958 1.64715 -8.29773 -1.96238 1.64725 -8.58973 -2.22408 1.23685 -8.56512 
+-1.98958 1.64715 -8.29773 -2.22408 1.23685 -8.56512 -2.22498 1.18628 -8.37893 
+-1.64538 1.23957 -8.30471 -1.63698 1.23535 -8.61463 -1.72068 1.5509 -8.60073 
+-1.64538 1.23957 -8.30471 -1.72068 1.5509 -8.60073 -1.72908 1.5749 -8.26143 
+-1.72908 1.5749 -8.26143 -1.72068 1.5509 -8.60073 -1.96238 1.64725 -8.58973 
+-1.72908 1.5749 -8.26143 -1.96238 1.64725 -8.58973 -1.98958 1.64715 -8.29773 
+-2.32668 0.606718 -8.43862 -2.29468 0.786683 -8.26007 -2.22498 1.18628 -8.37893 
+-2.32668 0.606718 -8.43862 -2.22498 1.18628 -8.37893 -2.22408 1.23685 -8.56512 
+-1.70598 0.417217 -8.0504 -1.59748 0.380446 -8.25146 -1.64558 0.932344 -8.49228 
+-1.70598 0.417217 -8.0504 -1.64558 0.932344 -8.49228 -1.61998 0.889643 -8.24965 
+-1.72068 1.5509 -8.60073 -1.76068 1.40449 -8.74434 -1.92918 1.54545 -8.71225 
+-1.72068 1.5509 -8.60073 -1.92918 1.54545 -8.71225 -1.96238 1.64725 -8.58973 
+-1.55158 -0.826682 -8.56234 -1.57428 -0.817263 -8.7852 -1.46848 -0.167963 -8.68682 
+-1.55158 -0.826682 -8.56234 -1.46848 -0.167963 -8.68682 -1.50858 -0.175635 -8.42705 
+-2.22408 1.23685 -8.56512 -2.14578 1.14086 -8.69112 -2.24798 0.806073 -8.6456 
+-2.22408 1.23685 -8.56512 -2.24798 0.806073 -8.6456 -2.32668 0.606718 -8.43862 
+-1.96238 1.64725 -8.58973 -1.92918 1.54545 -8.71225 -2.14578 1.14086 -8.69112 
+-1.96238 1.64725 -8.58973 -2.14578 1.14086 -8.69112 -2.22408 1.23685 -8.56512 
+-1.50858 -0.175635 -8.42705 -1.46848 -0.167963 -8.68682 -1.59048 0.399275 -8.42828 
+-1.50858 -0.175635 -8.42705 -1.59048 0.399275 -8.42828 -1.59748 0.380446 -8.25146 
+-1.59748 0.380446 -8.25146 -1.59048 0.399275 -8.42828 -1.67278 0.87714 -8.66131 
+-1.59748 0.380446 -8.25146 -1.67278 0.87714 -8.66131 -1.64558 0.932344 -8.49228 
+-1.63698 1.23535 -8.61463 -1.72608 1.13829 -8.74633 -1.76068 1.40449 -8.74434 
+-1.63698 1.23535 -8.61463 -1.76068 1.40449 -8.74434 -1.72068 1.5509 -8.60073 
+-2.42808 0.222197 -8.58 -2.34318 0.244355 -8.73941 -2.40728 -0.481604 -8.77511 
+-2.42808 0.222197 -8.58 -2.40728 -0.481604 -8.77511 -2.42508 -0.456946 -8.5951 
+-2.32668 0.606718 -8.43862 -2.24798 0.806073 -8.6456 -2.34318 0.244355 -8.73941 
+-2.32668 0.606718 -8.43862 -2.34318 0.244355 -8.73941 -2.42808 0.222197 -8.58 
+-2.42508 -0.456946 -8.5951 -2.40728 -0.481604 -8.77511 -1.89488 -0.870863 -8.76122 
+-2.42508 -0.456946 -8.5951 -1.89488 -0.870863 -8.76122 -1.91118 -0.850985 -8.56183 
+-1.91118 -0.850985 -8.56183 -1.89488 -0.870863 -8.76122 -1.57428 -0.817263 -8.7852 
+-1.91118 -0.850985 -8.56183 -1.57428 -0.817263 -8.7852 -1.55158 -0.826682 -8.56234 
+-1.89488 -0.870863 -8.76122 -2.40728 -0.481604 -8.77511 -1.46848 -0.167963 -8.68682 
+-1.89488 -0.870863 -8.76122 -1.46848 -0.167963 -8.68682 -1.57428 -0.817263 -8.7852 
+-1.59048 0.399275 -8.42828 -1.46848 -0.167963 -8.68682 -2.40728 -0.481604 -8.77511 
+-1.59048 0.399275 -8.42828 -2.40728 -0.481604 -8.77511 -2.34318 0.244355 -8.73941 
+-2.34318 0.244355 -8.73941 -2.24798 0.806073 -8.6456 -1.67278 0.87714 -8.66131 
+-2.34318 0.244355 -8.73941 -1.67278 0.87714 -8.66131 -1.59048 0.399275 -8.42828 
+-1.1152 0.130288 1.41539 -1.2179 0.134165 1.10561 -0.7702 0.037848 1.15831 
+-1.1152 0.130288 1.41539 -0.7702 0.037848 1.15831 -0.775798 -0.01352 1.4414 
+-1.67861 0.663096 0.662287 -1.41821 1.49454 0.653513 -1.64662 1.48768 -0.618424 
+-1.67861 0.663096 0.662287 -1.64662 1.48768 -0.618424 -1.94222 0.681393 -0.598246 
+-0.098116 0.483629 -0.679076 -0.693835 0.584845 -3.08418 -0.707637 1.09631 -3.07337 
+-0.098116 0.483629 -0.679076 -0.707637 1.09631 -3.07337 -0.025817 0.932518 -0.651327 
+-1.3183 0.120147 0.697645 -1.67861 0.663096 0.662287 -1.94222 0.681393 -0.598246 
+-1.3183 0.120147 0.697645 -1.94222 0.681393 -0.598246 -1.49441 -0.007085 -0.580388 
+-0.693835 0.584845 -3.08418 -1.09254 0.638341 -3.93226 -0.993744 1.22235 -3.93385 
+-0.693835 0.584845 -3.08418 -0.993744 1.22235 -3.93385 -0.707637 1.09631 -3.07337 
+-1.09254 0.638341 -3.93226 -1.04075 0.912367 -5.24764 -0.966955 1.37176 -5.21975 
+-1.09254 0.638341 -3.93226 -0.966955 1.37176 -5.21975 -0.993744 1.22235 -3.93385 
+-1.04075 0.912367 -5.24764 -1.64987 0.820784 -7.79883 -1.64688 1.13996 -7.86482 
+-1.04075 0.912367 -5.24764 -1.64688 1.13996 -7.86482 -0.966955 1.37176 -5.21975 
+-1.64987 0.820784 -7.79883 -1.61998 0.889643 -8.24965 -1.64538 1.23957 -8.30471 
+-1.64987 0.820784 -7.79883 -1.64538 1.23957 -8.30471 -1.64688 1.13996 -7.86482 
+-1.61998 0.889643 -8.24965 -1.64558 0.932344 -8.49228 -1.63698 1.23535 -8.61463 
+-1.61998 0.889643 -8.24965 -1.63698 1.23535 -8.61463 -1.64538 1.23957 -8.30471 
+-1.64558 0.932344 -8.49228 -1.67278 0.87714 -8.66131 -1.72608 1.13829 -8.74633 
+-1.64558 0.932344 -8.49228 -1.72608 1.13829 -8.74633 -1.63698 1.23535 -8.61463 
+-1.72608 1.13829 -8.74633 -1.67278 0.87714 -8.66131 -2.24798 0.806073 -8.6456 
+-1.72608 1.13829 -8.74633 -2.24798 0.806073 -8.6456 -2.14578 1.14086 -8.69112 
+-1.92918 1.54545 -8.71225 -1.76068 1.40449 -8.74434 -1.72608 1.13829 -8.74633 
+-1.92918 1.54545 -8.71225 -1.72608 1.13829 -8.74633 -2.14578 1.14086 -8.69112 
+-0.275853 -0.190555 6.97981 -0.187053 -0.243828 6.92449 -0.155953 -0.230143 7.00095 
+-0.275853 -0.190555 6.97981 -0.155953 -0.230143 7.00095 -0.205853 -0.181851 7.00294 
+-0.197952 -0.28535 7.05112 -0.280052 -0.194333 7.0228 -0.234753 -0.208759 7.00493 
+-0.197952 -0.28535 7.05112 -0.234753 -0.208759 7.00493 -0.173852 -0.240588 7.0118 
+-0.187053 -0.243828 6.92449 4.7e-05 -0.317621 6.92288 4.8e-05 -0.316542 7.00069 
+-0.187053 -0.243828 6.92449 4.8e-05 -0.316542 7.00069 -0.155953 -0.230143 7.00095 
+-0.280052 -0.194333 7.0228 -0.275853 -0.190555 6.97981 -0.205853 -0.181851 7.00294 
+-0.280052 -0.194333 7.0228 -0.205853 -0.181851 7.00294 -0.234753 -0.208759 7.00493 
+-0.066052 -0.369457 7.07697 -0.197952 -0.28535 7.05112 -0.173852 -0.240588 7.0118 
+-0.066052 -0.369457 7.07697 -0.173852 -0.240588 7.0118 -0.048252 -0.296767 7.00677 
+-0.205853 -0.181851 7.00294 -0.155953 -0.230143 7.00095 -0.140953 -0.167708 6.9926 
+-0.205853 -0.181851 7.00294 -0.140953 -0.167708 6.9926 -0.185053 -0.130172 6.98396 
+-0.048252 -0.296767 7.00677 -0.173852 -0.240588 7.0118 -0.153253 -0.18879 7.01252 
+-0.048252 -0.296767 7.00677 -0.153253 -0.18879 7.01252 -0.025652 -0.251986 7.01146 
+4.8e-05 -0.307067 7.00683 -0.048252 -0.296767 7.00677 -0.025652 -0.251986 7.01146 
+4.8e-05 -0.307067 7.00683 -0.025652 -0.251986 7.01146 0.000147 -0.243737 6.97539 
+-0.173852 -0.240588 7.0118 -0.234753 -0.208759 7.00493 -0.209853 -0.154393 7.01336 
+-0.173852 -0.240588 7.0118 -0.209853 -0.154393 7.01336 -0.153253 -0.18879 7.01252 
+-0.234753 -0.208759 7.00493 -0.205853 -0.181851 7.00294 -0.185053 -0.130172 6.98396 
+-0.234753 -0.208759 7.00493 -0.185053 -0.130172 6.98396 -0.209853 -0.154393 7.01336 
+-1.4007 1.48008 1.03126 -1.41821 1.49454 0.653513 -1.67861 0.663096 0.662287 
+-1.4007 1.48008 1.03126 -1.67861 0.663096 0.662287 -1.6121 0.61143 1.01778 
+-1.6121 0.61143 1.01778 -1.67861 0.663096 0.662287 -1.3183 0.120147 0.697645 
+-1.6121 0.61143 1.01778 -1.3183 0.120147 0.697645 -1.2179 0.134165 1.10561 
+-0.7702 0.037848 1.15831 -0.378601 -0.05997 1.0899 -0.421797 -0.169568 1.50145 
+-0.7702 0.037848 1.15831 -0.421797 -0.169568 1.50145 -0.775798 -0.01352 1.4414 
+-0.996907 2.06079 0.908545 -1.02551 2.02027 0.404675 -1.41821 1.49454 0.653513 
+-0.996907 2.06079 0.908545 -1.41821 1.49454 0.653513 -1.4007 1.48008 1.03126 
+-0.769804 0.072723 0.752047 -1.3183 0.120147 0.697645 -1.49441 -0.007085 -0.580388 
+-0.769804 0.072723 0.752047 -1.49441 -0.007085 -0.580388 -0.814014 -0.038871 -0.535125 
+-0.996907 2.06079 0.908545 -0.274709 1.90897 0.598711 -0.258211 1.78571 0.2742 
+-0.996907 2.06079 0.908545 -0.258211 1.78571 0.2742 -1.02551 2.02027 0.404675 
+-1.031 1.80703 1.50511 -1.0487 1.50851 1.84848 -0.483297 1.63186 1.98258 
+-1.031 1.80703 1.50511 -0.483297 1.63186 1.98258 -0.248202 1.72488 1.46906 
+-0.119805 0.142545 0.553327 -0.098116 0.483629 -0.679076 -0.025817 0.932518 -0.651327 
+-0.119805 0.142545 0.553327 -0.025817 0.932518 -0.651327 -0.034611 0.968514 0.125828 
+-0.7702 0.037848 1.15831 -0.769804 0.072723 0.752047 -0.119805 0.142545 0.553327 
+-0.7702 0.037848 1.15831 -0.119805 0.142545 0.553327 -0.378601 -0.05997 1.0899 
+-0.814014 -0.038871 -0.535125 -0.098116 0.483629 -0.679076 -0.119805 0.142545 0.553327 
+-0.814014 -0.038871 -0.535125 -0.119805 0.142545 0.553327 -0.769804 0.072723 0.752047 
+-0.996907 2.06079 0.908545 -1.031 1.80703 1.50511 -0.248202 1.72488 1.46906 
+-0.996907 2.06079 0.908545 -0.248202 1.72488 1.46906 -0.274709 1.90897 0.598711 
+-1.0487 1.50851 1.84848 -1.1134 1.45817 2.05397 -0.704895 1.69117 2.22373 
+-1.0487 1.50851 1.84848 -0.704895 1.69117 2.22373 -0.483297 1.63186 1.98258 
+-1.45389 1.15941 2.21244 -0.984994 1.70272 2.38078 -0.704895 1.69117 2.22373 
+-1.45389 1.15941 2.21244 -0.704895 1.69117 2.22373 -1.1134 1.45817 2.05397 
+5e-05 -0.408509 7.23501 4.9e-05 -0.361716 7.1884 0.063549 -0.344048 7.19608 
+5e-05 -0.408509 7.23501 0.063549 -0.344048 7.19608 0.05055 -0.376784 7.25324 
+0.063549 -0.344048 7.19608 4.9e-05 -0.361716 7.1884 4.9e-05 -0.359868 7.12811 
+0.063549 -0.344048 7.19608 4.9e-05 -0.359868 7.12811 0.065349 -0.351733 7.14404 
+0.05145 -0.473235 7.28984 5e-05 -0.49152 7.28607 5e-05 -0.408509 7.23501 
+0.05145 -0.473235 7.28984 5e-05 -0.408509 7.23501 0.05055 -0.376784 7.25324 
+0.049651 -0.463785 7.39888 0.046252 -0.374429 7.53095 5.2e-05 -0.383508 7.52582 
+0.049651 -0.463785 7.39888 5.2e-05 -0.383508 7.52582 5.1e-05 -0.468356 7.39187 
+0.067653 -0.267563 7.70919 0.142655 -0.322902 7.88847 5.5e-05 -0.311139 7.87322 
+0.067653 -0.267563 7.70919 5.5e-05 -0.311139 7.87322 5.3e-05 -0.282937 7.70283 
+0.049651 -0.463785 7.39888 5.1e-05 -0.468356 7.39187 5e-05 -0.49152 7.28607 
+0.049651 -0.463785 7.39888 5e-05 -0.49152 7.28607 0.05145 -0.473235 7.28984 
+5.2e-05 -0.383508 7.52582 0.046252 -0.374429 7.53095 0.067653 -0.267563 7.70919 
+5.2e-05 -0.383508 7.52582 0.067653 -0.267563 7.70919 5.3e-05 -0.282937 7.70283 
+4.3e-05 0.04082 6.50136 4.1e-05 0.253492 6.36313 0.275542 0.321402 6.45801 
+4.3e-05 0.04082 6.50136 0.275542 0.321402 6.45801 0.223443 0.109402 6.55454 
+0.209644 -0.100224 6.63298 4.4e-05 -0.184935 6.58683 4.3e-05 0.04082 6.50136 
+0.209644 -0.100224 6.63298 4.3e-05 0.04082 6.50136 0.223443 0.109402 6.55454 
+0.206246 -0.18 6.79695 0.187147 -0.243827 6.92449 4.7e-05 -0.317621 6.92288 
+0.206246 -0.18 6.79695 4.7e-05 -0.317621 6.92288 4.6e-05 -0.288312 6.7752 
+0.241357 -0.24844 8.16468 5.7e-05 -0.279226 8.16095 5.5e-05 -0.311139 7.87322 
+0.241357 -0.24844 8.16468 5.5e-05 -0.311139 7.87322 0.142655 -0.322902 7.88847 
+5.7e-05 -0.279226 8.16095 0.241357 -0.24844 8.16468 0.288459 -0.097577 8.4407 
+5.7e-05 -0.279226 8.16095 0.288459 -0.097577 8.4407 5.9e-05 -0.13217 8.46316 
+0.24766 0.286037 8.70488 0.184159 0.822 8.7635 5.9e-05 0.80431 8.78522 
+0.24766 0.286037 8.70488 5.9e-05 0.80431 8.78522 6e-05 0.250302 8.73734 
+0.184159 0.822 8.7635 0.203557 1.26996 8.65394 5.7e-05 1.28571 8.66491 
+0.184159 0.822 8.7635 5.7e-05 1.28571 8.66491 5.9e-05 0.80431 8.78522 
+0.188749 1.64168 7.75077 0.179247 1.58756 7.51404 4.7e-05 1.62612 7.5223 
+0.188749 1.64168 7.75077 4.7e-05 1.62612 7.5223 4.9e-05 1.67942 7.76582 
+0.230354 1.58127 8.33482 0.220951 1.64492 8.00898 5.1e-05 1.68822 8.00886 
+0.230354 1.58127 8.33482 5.1e-05 1.68822 8.00886 5.4e-05 1.6026 8.35331 
+0.203557 1.26996 8.65394 0.230354 1.58127 8.33482 5.4e-05 1.6026 8.35331 
+0.203557 1.26996 8.65394 5.4e-05 1.6026 8.35331 5.7e-05 1.28571 8.66491 
+0.220951 1.64492 8.00898 0.188749 1.64168 7.75077 4.9e-05 1.67942 7.76582 
+0.220951 1.64492 8.00898 4.9e-05 1.67942 7.76582 5.1e-05 1.68822 8.00886 
+0.288459 -0.097577 8.4407 0.24766 0.286037 8.70488 6e-05 0.250302 8.73734 
+0.288459 -0.097577 8.4407 6e-05 0.250302 8.73734 5.9e-05 -0.13217 8.46316 
+4.1e-05 0.253492 6.36313 3.5e-05 0.26192 5.65296 0.384836 0.432606 5.77806 
+4.1e-05 0.253492 6.36313 0.384836 0.432606 5.77806 0.275542 0.321402 6.45801 
+3.5e-05 0.26192 5.65296 3.2e-05 0.038122 5.14263 0.472132 -0.030831 5.20415 
+3.5e-05 0.26192 5.65296 0.472132 -0.030831 5.20415 0.384836 0.432606 5.77806 
+4e-05 1.62076 6.61627 0.13284 1.62285 6.61988 0.237337 1.68376 6.30063 
+4e-05 1.62076 6.61627 0.237337 1.68376 6.30063 3.7e-05 1.67174 6.30518 
+3.7e-05 1.67174 6.30518 0.237337 1.68376 6.30063 0.636829 2.31028 5.5216 
+3.7e-05 1.67174 6.30518 0.636829 2.31028 5.5216 2.9e-05 2.11491 5.4173 
+2.4e-05 2.21409 4.7921 0.799623 2.41354 4.68322 0.959917 2.46368 4.01902 
+2.4e-05 2.21409 4.7921 0.959917 2.46368 4.01902 1.9e-05 2.31923 4.27163 
+0.959917 2.46368 4.01902 1.05151 2.40475 3.29767 1.4e-05 2.24413 3.56942 
+0.959917 2.46368 4.01902 1.4e-05 2.24413 3.56942 1.9e-05 2.31923 4.27163 
+0.456219 -0.486878 3.44395 1.9e-05 -0.493623 3.33333 1.1e-05 -0.289979 2.47416 
+0.456219 -0.486878 3.44395 1.1e-05 -0.289979 2.47416 0.454911 -0.302273 2.4731 
+0.454911 -0.302273 2.4731 1.1e-05 -0.289979 2.47416 6e-06 -0.204218 1.90171 
+0.454911 -0.302273 2.4731 6e-06 -0.204218 1.90171 0.428706 -0.22973 1.8565 
+0.428706 -0.22973 1.8565 6e-06 -0.204218 1.90171 3e-06 -0.224361 1.52412 
+0.428706 -0.22973 1.8565 3e-06 -0.224361 1.52412 0.421803 -0.169266 1.50145 
+0.248198 1.72488 1.46906 0.274691 1.90897 0.598707 -0.023407 1.77106 0.770243 
+0.248198 1.72488 1.46906 -0.023407 1.77106 0.770243 -0 1.52508 1.58923 
+0.328825 -0.508223 4.08547 0.869429 -0.163471 4.75279 2.9e-05 -0.335256 4.67559 
+0.328825 -0.508223 4.08547 2.9e-05 -0.335256 4.67559 2.5e-05 -0.443114 4.10744 
+2.9e-05 2.11491 5.4173 0.636829 2.31028 5.5216 0.799623 2.41354 4.68322 
+2.9e-05 2.11491 5.4173 0.799623 2.41354 4.68322 2.4e-05 2.21409 4.7921 
+0.456219 -0.486878 3.44395 0.328825 -0.508223 4.08547 2.5e-05 -0.443114 4.10744 
+0.456219 -0.486878 3.44395 2.5e-05 -0.443114 4.10744 1.9e-05 -0.493623 3.33333 
+0.187147 -0.243827 6.92449 0.156047 -0.230142 7.00094 4.8e-05 -0.316542 7.00069 
+0.187147 -0.243827 6.92449 4.8e-05 -0.316542 7.00069 4.7e-05 -0.317621 6.92288 
+4.8e-05 -0.375888 7.06034 4.8e-05 -0.307067 7.00683 0.048348 -0.296767 7.00677 
+4.8e-05 -0.375888 7.06034 0.048348 -0.296767 7.00677 0.066148 -0.369457 7.07697 
+0.156047 -0.230142 7.00094 0.141047 -0.167707 6.9926 4.8e-05 -0.257656 7.00413 
+0.156047 -0.230142 7.00094 4.8e-05 -0.257656 7.00413 4.8e-05 -0.316542 7.00069 
+4.8e-05 -0.307067 7.00683 0.000147 -0.243737 6.97539 0.025748 -0.251986 7.01146 
+4.8e-05 -0.307067 7.00683 0.025748 -0.251986 7.01146 0.048348 -0.296767 7.00677 
+0.378599 -0.059868 1.08989 0.421803 -0.169266 1.50145 3e-06 -0.224361 1.52412 
+0.378599 -0.059868 1.08989 3e-06 -0.224361 1.52412 0 -0.129426 1.17621 
+-1.1e-05 0.923567 0.112942 0.034589 0.968515 0.125827 0.119795 0.142545 0.553325 
+-1.1e-05 0.923567 0.112942 0.119795 0.142545 0.553325 -5e-06 0.103797 0.637667 
+0.034589 0.968515 0.125827 -1.1e-05 0.923567 0.112942 -0.00281 1.55375 0.384243 
+0.034589 0.968515 0.125827 -0.00281 1.55375 0.384243 0.258189 1.78571 0.274197 
+0.483303 1.63187 1.98258 0.248198 1.72488 1.46906 -0 1.52508 1.58923 
+0.483303 1.63187 1.98258 -0 1.52508 1.58923 4e-06 1.47799 2.12195 
+-0.065251 -0.351734 7.14405 -0.066052 -0.369457 7.07697 4.8e-05 -0.375888 7.06034 
+-0.065251 -0.351734 7.14405 4.8e-05 -0.375888 7.06034 4.9e-05 -0.359868 7.12811 
+5e-05 -0.408509 7.23501 -0.05045 -0.376784 7.25324 -0.063451 -0.344048 7.19608 
+5e-05 -0.408509 7.23501 -0.063451 -0.344048 7.19608 4.9e-05 -0.361716 7.1884 
+-0.063451 -0.344048 7.19608 -0.065251 -0.351734 7.14405 4.9e-05 -0.359868 7.12811 
+-0.063451 -0.344048 7.19608 4.9e-05 -0.359868 7.12811 4.9e-05 -0.361716 7.1884 
+-0.05135 -0.473236 7.28984 -0.05045 -0.376784 7.25324 5e-05 -0.408509 7.23501 
+-0.05135 -0.473236 7.28984 5e-05 -0.408509 7.23501 5e-05 -0.49152 7.28607 
+-0.067547 -0.267563 7.7092 5.3e-05 -0.282937 7.70283 5.5e-05 -0.311139 7.87322 
+-0.067547 -0.267563 7.7092 5.5e-05 -0.311139 7.87322 -0.142545 -0.322903 7.88847 
+-0.209556 -0.100225 6.63298 -0.223357 0.109401 6.55454 4.3e-05 0.04082 6.50136 
+-0.209556 -0.100225 6.63298 4.3e-05 0.04082 6.50136 4.4e-05 -0.184935 6.58683 
+-0.209556 -0.100225 6.63298 4.4e-05 -0.184935 6.58683 4.5e-05 -0.266654 6.66419 
+-0.209556 -0.100225 6.63298 4.5e-05 -0.266654 6.66419 -0.216455 -0.15285 6.71176 
+4.6e-05 -0.288312 6.7752 -0.206154 -0.180001 6.79695 -0.216455 -0.15285 6.71176 
+4.6e-05 -0.288312 6.7752 -0.216455 -0.15285 6.71176 4.5e-05 -0.266654 6.66419 
+-0.206154 -0.180001 6.79695 4.6e-05 -0.288312 6.7752 4.7e-05 -0.317621 6.92288 
+-0.206154 -0.180001 6.79695 4.7e-05 -0.317621 6.92288 -0.187053 -0.243828 6.92449 
+-0.241243 -0.248441 8.16468 -0.142545 -0.322903 7.88847 5.5e-05 -0.311139 7.87322 
+-0.241243 -0.248441 8.16468 5.5e-05 -0.311139 7.87322 5.7e-05 -0.279226 8.16095 
+-0.179153 1.58756 7.51405 4.7e-05 1.62612 7.5223 4.4e-05 1.51194 7.08083 
+-0.179153 1.58756 7.51405 4.4e-05 1.51194 7.08083 -0.106556 1.51914 7.08136 
+-0.188651 1.64168 7.75077 4.9e-05 1.67942 7.76582 4.7e-05 1.62612 7.5223 
+-0.188651 1.64168 7.75077 4.7e-05 1.62612 7.5223 -0.179153 1.58756 7.51405 
+-0.230246 1.58127 8.33483 5.4e-05 1.6026 8.35331 5.1e-05 1.68822 8.00886 
+-0.230246 1.58127 8.33483 5.1e-05 1.68822 8.00886 -0.220849 1.64492 8.00899 
+-0.220849 1.64492 8.00899 5.1e-05 1.68822 8.00886 4.9e-05 1.67942 7.76582 
+-0.220849 1.64492 8.00899 4.9e-05 1.67942 7.76582 -0.188651 1.64168 7.75077 
+4.4e-05 1.51194 7.08083 4e-05 1.62076 6.61627 -0.13276 1.62284 6.61988 
+4.4e-05 1.51194 7.08083 -0.13276 1.62284 6.61988 -0.106556 1.51914 7.08136 
+3.5e-05 0.26192 5.65296 -0.384764 0.432604 5.77807 -0.472067 -0.030833 5.20415 
+3.5e-05 0.26192 5.65296 -0.472067 -0.030833 5.20415 3.2e-05 0.038122 5.14263 
+4e-05 1.62076 6.61627 3.7e-05 1.67174 6.30518 -0.254763 1.68234 6.30573 
+4e-05 1.62076 6.61627 -0.254763 1.68234 6.30573 -0.13276 1.62284 6.61988 
+-0.959883 2.46367 4.01903 1.9e-05 2.31923 4.27163 1.4e-05 2.24413 3.56942 
+-0.959883 2.46367 4.01903 1.4e-05 2.24413 3.56942 -1.05149 2.40475 3.29768 
+1e-05 1.93932 3.01266 7e-06 1.55003 2.47524 -0.984994 1.70272 2.38078 
+1e-05 1.93932 3.01266 -0.984994 1.70272 2.38078 -1.08659 2.02612 2.79482 
+-0.456181 -0.48688 3.44396 -0.454889 -0.302275 2.47311 1.1e-05 -0.289979 2.47416 
+-0.456181 -0.48688 3.44396 1.1e-05 -0.289979 2.47416 1.9e-05 -0.493623 3.33333 
+-0.454889 -0.302275 2.47311 -0.428694 -0.229932 1.85651 6e-06 -0.204218 1.90171 
+-0.454889 -0.302275 2.47311 6e-06 -0.204218 1.90171 1.1e-05 -0.289979 2.47416 
+-0.248202 1.72488 1.46906 -0 1.52508 1.58923 -0.023407 1.77106 0.770243 
+-0.248202 1.72488 1.46906 -0.023407 1.77106 0.770243 -0.274709 1.90897 0.598711 
+-0.328775 -0.508225 4.08548 2.5e-05 -0.443114 4.10744 2.9e-05 -0.335256 4.67559 
+-0.328775 -0.508225 4.08548 2.9e-05 -0.335256 4.67559 -0.869371 -0.163475 4.75281 
+1.4e-05 2.24413 3.56942 1e-05 1.93932 3.01266 -1.08659 2.02612 2.79482 
+1.4e-05 2.24413 3.56942 -1.08659 2.02612 2.79482 -1.05149 2.40475 3.29768 
+-0.869371 -0.163475 4.75281 2.9e-05 -0.335256 4.67559 3.2e-05 0.038122 5.14263 
+-0.869371 -0.163475 4.75281 3.2e-05 0.038122 5.14263 -0.472067 -0.030833 5.20415 
+4.8e-05 -0.375888 7.06034 -0.066052 -0.369457 7.07697 -0.048252 -0.296767 7.00677 
+4.8e-05 -0.375888 7.06034 -0.048252 -0.296767 7.00677 4.8e-05 -0.307067 7.00683 
+-0.155953 -0.230143 7.00095 4.8e-05 -0.316542 7.00069 4.8e-05 -0.257656 7.00413 
+-0.155953 -0.230143 7.00095 4.8e-05 -0.257656 7.00413 -0.140953 -0.167708 6.9926 
+-0.274709 1.90897 0.598711 -0.023407 1.77106 0.770243 -0.00281 1.55375 0.384243 
+-0.274709 1.90897 0.598711 -0.00281 1.55375 0.384243 -0.258211 1.78571 0.2742 
+-0.378601 -0.05997 1.0899 0 -0.129426 1.17621 3e-06 -0.224361 1.52412 
+-0.378601 -0.05997 1.0899 3e-06 -0.224361 1.52412 -0.421797 -0.169568 1.50145 
+-1.1e-05 0.923567 0.112942 -5e-06 0.103797 0.637667 -0.119805 0.142545 0.553327 
+-1.1e-05 0.923567 0.112942 -0.119805 0.142545 0.553327 -0.034611 0.968514 0.125828 
+-0.034611 0.968514 0.125828 -0.258211 1.78571 0.2742 -0.00281 1.55375 0.384243 
+-0.034611 0.968514 0.125828 -0.00281 1.55375 0.384243 -1.1e-05 0.923567 0.112942 
+-0.483297 1.63186 1.98258 4e-06 1.47799 2.12195 -0 1.52508 1.58923 
+-0.483297 1.63186 1.98258 -0 1.52508 1.58923 -0.248202 1.72488 1.46906 
+-0.119805 0.142545 0.553327 -5e-06 0.103797 0.637667 0 -0.129426 1.17621 
+-0.119805 0.142545 0.553327 0 -0.129426 1.17621 -0.378601 -0.05997 1.0899 
+-0.984994 1.70272 2.38078 7e-06 1.55003 2.47524 6e-06 1.53432 2.30808 
+-0.984994 1.70272 2.38078 6e-06 1.53432 2.30808 -0.704895 1.69117 2.22373 
+-0.704895 1.69117 2.22373 6e-06 1.53432 2.30808 4e-06 1.47799 2.12195 
+-0.704895 1.69117 2.22373 4e-06 1.47799 2.12195 -0.483297 1.63186 1.98258 
+0.207052 -0.190428 7.60411 0.37775 -0.16759 7.3524 0.529853 -0.076784 7.71498 
+0.198054 -0.260409 7.79332 0.111353 -0.198534 7.67808 0.207052 -0.190428 7.60411 
+0.448454 -0.197843 7.80188 0.198054 -0.260409 7.79332 0.207052 -0.190428 7.60411 
+0.529853 -0.076784 7.71498 0.448454 -0.197843 7.80188 0.207052 -0.190428 7.60411 
+-0.153253 -0.18879 7.01252 -0.209853 -0.154393 7.01336 -0.185053 -0.130172 6.98396 
+-0.140953 -0.167708 6.9926 4.8e-05 -0.257656 7.00413 0.141047 -0.167707 6.9926 
+-0.140953 -0.167708 6.9926 0.141047 -0.167707 6.9926 0.185147 -0.130171 6.98395 
+-0.185053 -0.130172 6.98396 -0.140953 -0.167708 6.9926 0.185147 -0.130171 6.98395 
+0.209947 -0.154392 7.01335 0.153347 -0.188789 7.01251 0.025748 -0.251986 7.01146 
+-0.153253 -0.18879 7.01252 -0.185053 -0.130172 6.98396 0.185147 -0.130171 6.98395 
+-0.529747 -0.076786 7.71499 -0.37765 -0.167592 7.35241 -0.206948 -0.19043 7.60422 
+-0.206948 -0.19043 7.60422 -0.111247 -0.198534 7.67808 -0.197946 -0.26041 7.79333 
+-0.206948 -0.19043 7.60422 -0.197946 -0.26041 7.79333 -0.448346 -0.197845 7.80189 
+-0.206948 -0.19043 7.60422 -0.448346 -0.197845 7.80189 -0.529747 -0.076786 7.71499 
+
+POLYGONS 1422 5688
+3 0 1 2 
+3 3 4 5 
+3 6 7 8 
+3 9 10 11 
+3 12 13 14 
+3 15 16 17 
+3 18 19 20 
+3 21 22 23 
+3 24 25 26 
+3 27 28 29 
+3 30 31 32 
+3 33 34 35 
+3 36 37 38 
+3 39 40 41 
+3 42 43 44 
+3 45 46 47 
+3 48 49 50 
+3 51 52 53 
+3 54 55 56 
+3 57 58 59 
+3 60 61 62 
+3 63 64 65 
+3 66 67 68 
+3 69 70 71 
+3 72 73 74 
+3 75 76 77 
+3 78 79 80 
+3 81 82 83 
+3 84 85 86 
+3 87 88 89 
+3 90 91 92 
+3 93 94 95 
+3 96 97 98 
+3 99 100 101 
+3 102 103 104 
+3 105 106 107 
+3 108 109 110 
+3 111 112 113 
+3 114 115 116 
+3 117 118 119 
+3 120 121 122 
+3 123 124 125 
+3 126 127 128 
+3 129 130 131 
+3 132 133 134 
+3 135 136 137 
+3 138 139 140 
+3 141 142 143 
+3 144 145 146 
+3 147 148 149 
+3 150 151 152 
+3 153 154 155 
+3 156 157 158 
+3 159 160 161 
+3 162 163 164 
+3 165 166 167 
+3 168 169 170 
+3 171 172 173 
+3 174 175 176 
+3 177 178 179 
+3 180 181 182 
+3 183 184 185 
+3 186 187 188 
+3 189 190 191 
+3 192 193 194 
+3 195 196 197 
+3 198 199 200 
+3 201 202 203 
+3 204 205 206 
+3 207 208 209 
+3 210 211 212 
+3 213 214 215 
+3 216 217 218 
+3 219 220 221 
+3 222 223 224 
+3 225 226 227 
+3 228 229 230 
+3 231 232 233 
+3 234 235 236 
+3 237 238 239 
+3 240 241 242 
+3 243 244 245 
+3 246 247 248 
+3 249 250 251 
+3 252 253 254 
+3 255 256 257 
+3 258 259 260 
+3 261 262 263 
+3 264 265 266 
+3 267 268 269 
+3 270 271 272 
+3 273 274 275 
+3 276 277 278 
+3 279 280 281 
+3 282 283 284 
+3 285 286 287 
+3 288 289 290 
+3 291 292 293 
+3 294 295 296 
+3 297 298 299 
+3 300 301 302 
+3 303 304 305 
+3 306 307 308 
+3 309 310 311 
+3 312 313 314 
+3 315 316 317 
+3 318 319 320 
+3 321 322 323 
+3 324 325 326 
+3 327 328 329 
+3 330 331 332 
+3 333 334 335 
+3 336 337 338 
+3 339 340 341 
+3 342 343 344 
+3 345 346 347 
+3 348 349 350 
+3 351 352 353 
+3 354 355 356 
+3 357 358 359 
+3 360 361 362 
+3 363 364 365 
+3 366 367 368 
+3 369 370 371 
+3 372 373 374 
+3 375 376 377 
+3 378 379 380 
+3 381 382 383 
+3 384 385 386 
+3 387 388 389 
+3 390 391 392 
+3 393 394 395 
+3 396 397 398 
+3 399 400 401 
+3 402 403 404 
+3 405 406 407 
+3 408 409 410 
+3 411 412 413 
+3 414 415 416 
+3 417 418 419 
+3 420 421 422 
+3 423 424 425 
+3 426 427 428 
+3 429 430 431 
+3 432 433 434 
+3 435 436 437 
+3 438 439 440 
+3 441 442 443 
+3 444 445 446 
+3 447 448 449 
+3 450 451 452 
+3 453 454 455 
+3 456 457 458 
+3 459 460 461 
+3 462 463 464 
+3 465 466 467 
+3 468 469 470 
+3 471 472 473 
+3 474 475 476 
+3 477 478 479 
+3 480 481 482 
+3 483 484 485 
+3 486 487 488 
+3 489 490 491 
+3 492 493 494 
+3 495 496 497 
+3 498 499 500 
+3 501 502 503 
+3 504 505 506 
+3 507 508 509 
+3 510 511 512 
+3 513 514 515 
+3 516 517 518 
+3 519 520 521 
+3 522 523 524 
+3 525 526 527 
+3 528 529 530 
+3 531 532 533 
+3 534 535 536 
+3 537 538 539 
+3 540 541 542 
+3 543 544 545 
+3 546 547 548 
+3 549 550 551 
+3 552 553 554 
+3 555 556 557 
+3 558 559 560 
+3 561 562 563 
+3 564 565 566 
+3 567 568 569 
+3 570 571 572 
+3 573 574 575 
+3 576 577 578 
+3 579 580 581 
+3 582 583 584 
+3 585 586 587 
+3 588 589 590 
+3 591 592 593 
+3 594 595 596 
+3 597 598 599 
+3 600 601 602 
+3 603 604 605 
+3 606 607 608 
+3 609 610 611 
+3 612 613 614 
+3 615 616 617 
+3 618 619 620 
+3 621 622 623 
+3 624 625 626 
+3 627 628 629 
+3 630 631 632 
+3 633 634 635 
+3 636 637 638 
+3 639 640 641 
+3 642 643 644 
+3 645 646 647 
+3 648 649 650 
+3 651 652 653 
+3 654 655 656 
+3 657 658 659 
+3 660 661 662 
+3 663 664 665 
+3 666 667 668 
+3 669 670 671 
+3 672 673 674 
+3 675 676 677 
+3 678 679 680 
+3 681 682 683 
+3 684 685 686 
+3 687 688 689 
+3 690 691 692 
+3 693 694 695 
+3 696 697 698 
+3 699 700 701 
+3 702 703 704 
+3 705 706 707 
+3 708 709 710 
+3 711 712 713 
+3 714 715 716 
+3 717 718 719 
+3 720 721 722 
+3 723 724 725 
+3 726 727 728 
+3 729 730 731 
+3 732 733 734 
+3 735 736 737 
+3 738 739 740 
+3 741 742 743 
+3 744 745 746 
+3 747 748 749 
+3 750 751 752 
+3 753 754 755 
+3 756 757 758 
+3 759 760 761 
+3 762 763 764 
+3 765 766 767 
+3 768 769 770 
+3 771 772 773 
+3 774 775 776 
+3 777 778 779 
+3 780 781 782 
+3 783 784 785 
+3 786 787 788 
+3 789 790 791 
+3 792 793 794 
+3 795 796 797 
+3 798 799 800 
+3 801 802 803 
+3 804 805 806 
+3 807 808 809 
+3 810 811 812 
+3 813 814 815 
+3 816 817 818 
+3 819 820 821 
+3 822 823 824 
+3 825 826 827 
+3 828 829 830 
+3 831 832 833 
+3 834 835 836 
+3 837 838 839 
+3 840 841 842 
+3 843 844 845 
+3 846 847 848 
+3 849 850 851 
+3 852 853 854 
+3 855 856 857 
+3 858 859 860 
+3 861 862 863 
+3 864 865 866 
+3 867 868 869 
+3 870 871 872 
+3 873 874 875 
+3 876 877 878 
+3 879 880 881 
+3 882 883 884 
+3 885 886 887 
+3 888 889 890 
+3 891 892 893 
+3 894 895 896 
+3 897 898 899 
+3 900 901 902 
+3 903 904 905 
+3 906 907 908 
+3 909 910 911 
+3 912 913 914 
+3 915 916 917 
+3 918 919 920 
+3 921 922 923 
+3 924 925 926 
+3 927 928 929 
+3 930 931 932 
+3 933 934 935 
+3 936 937 938 
+3 939 940 941 
+3 942 943 944 
+3 945 946 947 
+3 948 949 950 
+3 951 952 953 
+3 954 955 956 
+3 957 958 959 
+3 960 961 962 
+3 963 964 965 
+3 966 967 968 
+3 969 970 971 
+3 972 973 974 
+3 975 976 977 
+3 978 979 980 
+3 981 982 983 
+3 984 985 986 
+3 987 988 989 
+3 990 991 992 
+3 993 994 995 
+3 996 997 998 
+3 999 1000 1001 
+3 1002 1003 1004 
+3 1005 1006 1007 
+3 1008 1009 1010 
+3 1011 1012 1013 
+3 1014 1015 1016 
+3 1017 1018 1019 
+3 1020 1021 1022 
+3 1023 1024 1025 
+3 1026 1027 1028 
+3 1029 1030 1031 
+3 1032 1033 1034 
+3 1035 1036 1037 
+3 1038 1039 1040 
+3 1041 1042 1043 
+3 1044 1045 1046 
+3 1047 1048 1049 
+3 1050 1051 1052 
+3 1053 1054 1055 
+3 1056 1057 1058 
+3 1059 1060 1061 
+3 1062 1063 1064 
+3 1065 1066 1067 
+3 1068 1069 1070 
+3 1071 1072 1073 
+3 1074 1075 1076 
+3 1077 1078 1079 
+3 1080 1081 1082 
+3 1083 1084 1085 
+3 1086 1087 1088 
+3 1089 1090 1091 
+3 1092 1093 1094 
+3 1095 1096 1097 
+3 1098 1099 1100 
+3 1101 1102 1103 
+3 1104 1105 1106 
+3 1107 1108 1109 
+3 1110 1111 1112 
+3 1113 1114 1115 
+3 1116 1117 1118 
+3 1119 1120 1121 
+3 1122 1123 1124 
+3 1125 1126 1127 
+3 1128 1129 1130 
+3 1131 1132 1133 
+3 1134 1135 1136 
+3 1137 1138 1139 
+3 1140 1141 1142 
+3 1143 1144 1145 
+3 1146 1147 1148 
+3 1149 1150 1151 
+3 1152 1153 1154 
+3 1155 1156 1157 
+3 1158 1159 1160 
+3 1161 1162 1163 
+3 1164 1165 1166 
+3 1167 1168 1169 
+3 1170 1171 1172 
+3 1173 1174 1175 
+3 1176 1177 1178 
+3 1179 1180 1181 
+3 1182 1183 1184 
+3 1185 1186 1187 
+3 1188 1189 1190 
+3 1191 1192 1193 
+3 1194 1195 1196 
+3 1197 1198 1199 
+3 1200 1201 1202 
+3 1203 1204 1205 
+3 1206 1207 1208 
+3 1209 1210 1211 
+3 1212 1213 1214 
+3 1215 1216 1217 
+3 1218 1219 1220 
+3 1221 1222 1223 
+3 1224 1225 1226 
+3 1227 1228 1229 
+3 1230 1231 1232 
+3 1233 1234 1235 
+3 1236 1237 1238 
+3 1239 1240 1241 
+3 1242 1243 1244 
+3 1245 1246 1247 
+3 1248 1249 1250 
+3 1251 1252 1253 
+3 1254 1255 1256 
+3 1257 1258 1259 
+3 1260 1261 1262 
+3 1263 1264 1265 
+3 1266 1267 1268 
+3 1269 1270 1271 
+3 1272 1273 1274 
+3 1275 1276 1277 
+3 1278 1279 1280 
+3 1281 1282 1283 
+3 1284 1285 1286 
+3 1287 1288 1289 
+3 1290 1291 1292 
+3 1293 1294 1295 
+3 1296 1297 1298 
+3 1299 1300 1301 
+3 1302 1303 1304 
+3 1305 1306 1307 
+3 1308 1309 1310 
+3 1311 1312 1313 
+3 1314 1315 1316 
+3 1317 1318 1319 
+3 1320 1321 1322 
+3 1323 1324 1325 
+3 1326 1327 1328 
+3 1329 1330 1331 
+3 1332 1333 1334 
+3 1335 1336 1337 
+3 1338 1339 1340 
+3 1341 1342 1343 
+3 1344 1345 1346 
+3 1347 1348 1349 
+3 1350 1351 1352 
+3 1353 1354 1355 
+3 1356 1357 1358 
+3 1359 1360 1361 
+3 1362 1363 1364 
+3 1365 1366 1367 
+3 1368 1369 1370 
+3 1371 1372 1373 
+3 1374 1375 1376 
+3 1377 1378 1379 
+3 1380 1381 1382 
+3 1383 1384 1385 
+3 1386 1387 1388 
+3 1389 1390 1391 
+3 1392 1393 1394 
+3 1395 1396 1397 
+3 1398 1399 1400 
+3 1401 1402 1403 
+3 1404 1405 1406 
+3 1407 1408 1409 
+3 1410 1411 1412 
+3 1413 1414 1415 
+3 1416 1417 1418 
+3 1419 1420 1421 
+3 1422 1423 1424 
+3 1425 1426 1427 
+3 1428 1429 1430 
+3 1431 1432 1433 
+3 1434 1435 1436 
+3 1437 1438 1439 
+3 1440 1441 1442 
+3 1443 1444 1445 
+3 1446 1447 1448 
+3 1449 1450 1451 
+3 1452 1453 1454 
+3 1455 1456 1457 
+3 1458 1459 1460 
+3 1461 1462 1463 
+3 1464 1465 1466 
+3 1467 1468 1469 
+3 1470 1471 1472 
+3 1473 1474 1475 
+3 1476 1477 1478 
+3 1479 1480 1481 
+3 1482 1483 1484 
+3 1485 1486 1487 
+3 1488 1489 1490 
+3 1491 1492 1493 
+3 1494 1495 1496 
+3 1497 1498 1499 
+3 1500 1501 1502 
+3 1503 1504 1505 
+3 1506 1507 1508 
+3 1509 1510 1511 
+3 1512 1513 1514 
+3 1515 1516 1517 
+3 1518 1519 1520 
+3 1521 1522 1523 
+3 1524 1525 1526 
+3 1527 1528 1529 
+3 1530 1531 1532 
+3 1533 1534 1535 
+3 1536 1537 1538 
+3 1539 1540 1541 
+3 1542 1543 1544 
+3 1545 1546 1547 
+3 1548 1549 1550 
+3 1551 1552 1553 
+3 1554 1555 1556 
+3 1557 1558 1559 
+3 1560 1561 1562 
+3 1563 1564 1565 
+3 1566 1567 1568 
+3 1569 1570 1571 
+3 1572 1573 1574 
+3 1575 1576 1577 
+3 1578 1579 1580 
+3 1581 1582 1583 
+3 1584 1585 1586 
+3 1587 1588 1589 
+3 1590 1591 1592 
+3 1593 1594 1595 
+3 1596 1597 1598 
+3 1599 1600 1601 
+3 1602 1603 1604 
+3 1605 1606 1607 
+3 1608 1609 1610 
+3 1611 1612 1613 
+3 1614 1615 1616 
+3 1617 1618 1619 
+3 1620 1621 1622 
+3 1623 1624 1625 
+3 1626 1627 1628 
+3 1629 1630 1631 
+3 1632 1633 1634 
+3 1635 1636 1637 
+3 1638 1639 1640 
+3 1641 1642 1643 
+3 1644 1645 1646 
+3 1647 1648 1649 
+3 1650 1651 1652 
+3 1653 1654 1655 
+3 1656 1657 1658 
+3 1659 1660 1661 
+3 1662 1663 1664 
+3 1665 1666 1667 
+3 1668 1669 1670 
+3 1671 1672 1673 
+3 1674 1675 1676 
+3 1677 1678 1679 
+3 1680 1681 1682 
+3 1683 1684 1685 
+3 1686 1687 1688 
+3 1689 1690 1691 
+3 1692 1693 1694 
+3 1695 1696 1697 
+3 1698 1699 1700 
+3 1701 1702 1703 
+3 1704 1705 1706 
+3 1707 1708 1709 
+3 1710 1711 1712 
+3 1713 1714 1715 
+3 1716 1717 1718 
+3 1719 1720 1721 
+3 1722 1723 1724 
+3 1725 1726 1727 
+3 1728 1729 1730 
+3 1731 1732 1733 
+3 1734 1735 1736 
+3 1737 1738 1739 
+3 1740 1741 1742 
+3 1743 1744 1745 
+3 1746 1747 1748 
+3 1749 1750 1751 
+3 1752 1753 1754 
+3 1755 1756 1757 
+3 1758 1759 1760 
+3 1761 1762 1763 
+3 1764 1765 1766 
+3 1767 1768 1769 
+3 1770 1771 1772 
+3 1773 1774 1775 
+3 1776 1777 1778 
+3 1779 1780 1781 
+3 1782 1783 1784 
+3 1785 1786 1787 
+3 1788 1789 1790 
+3 1791 1792 1793 
+3 1794 1795 1796 
+3 1797 1798 1799 
+3 1800 1801 1802 
+3 1803 1804 1805 
+3 1806 1807 1808 
+3 1809 1810 1811 
+3 1812 1813 1814 
+3 1815 1816 1817 
+3 1818 1819 1820 
+3 1821 1822 1823 
+3 1824 1825 1826 
+3 1827 1828 1829 
+3 1830 1831 1832 
+3 1833 1834 1835 
+3 1836 1837 1838 
+3 1839 1840 1841 
+3 1842 1843 1844 
+3 1845 1846 1847 
+3 1848 1849 1850 
+3 1851 1852 1853 
+3 1854 1855 1856 
+3 1857 1858 1859 
+3 1860 1861 1862 
+3 1863 1864 1865 
+3 1866 1867 1868 
+3 1869 1870 1871 
+3 1872 1873 1874 
+3 1875 1876 1877 
+3 1878 1879 1880 
+3 1881 1882 1883 
+3 1884 1885 1886 
+3 1887 1888 1889 
+3 1890 1891 1892 
+3 1893 1894 1895 
+3 1896 1897 1898 
+3 1899 1900 1901 
+3 1902 1903 1904 
+3 1905 1906 1907 
+3 1908 1909 1910 
+3 1911 1912 1913 
+3 1914 1915 1916 
+3 1917 1918 1919 
+3 1920 1921 1922 
+3 1923 1924 1925 
+3 1926 1927 1928 
+3 1929 1930 1931 
+3 1932 1933 1934 
+3 1935 1936 1937 
+3 1938 1939 1940 
+3 1941 1942 1943 
+3 1944 1945 1946 
+3 1947 1948 1949 
+3 1950 1951 1952 
+3 1953 1954 1955 
+3 1956 1957 1958 
+3 1959 1960 1961 
+3 1962 1963 1964 
+3 1965 1966 1967 
+3 1968 1969 1970 
+3 1971 1972 1973 
+3 1974 1975 1976 
+3 1977 1978 1979 
+3 1980 1981 1982 
+3 1983 1984 1985 
+3 1986 1987 1988 
+3 1989 1990 1991 
+3 1992 1993 1994 
+3 1995 1996 1997 
+3 1998 1999 2000 
+3 2001 2002 2003 
+3 2004 2005 2006 
+3 2007 2008 2009 
+3 2010 2011 2012 
+3 2013 2014 2015 
+3 2016 2017 2018 
+3 2019 2020 2021 
+3 2022 2023 2024 
+3 2025 2026 2027 
+3 2028 2029 2030 
+3 2031 2032 2033 
+3 2034 2035 2036 
+3 2037 2038 2039 
+3 2040 2041 2042 
+3 2043 2044 2045 
+3 2046 2047 2048 
+3 2049 2050 2051 
+3 2052 2053 2054 
+3 2055 2056 2057 
+3 2058 2059 2060 
+3 2061 2062 2063 
+3 2064 2065 2066 
+3 2067 2068 2069 
+3 2070 2071 2072 
+3 2073 2074 2075 
+3 2076 2077 2078 
+3 2079 2080 2081 
+3 2082 2083 2084 
+3 2085 2086 2087 
+3 2088 2089 2090 
+3 2091 2092 2093 
+3 2094 2095 2096 
+3 2097 2098 2099 
+3 2100 2101 2102 
+3 2103 2104 2105 
+3 2106 2107 2108 
+3 2109 2110 2111 
+3 2112 2113 2114 
+3 2115 2116 2117 
+3 2118 2119 2120 
+3 2121 2122 2123 
+3 2124 2125 2126 
+3 2127 2128 2129 
+3 2130 2131 2132 
+3 2133 2134 2135 
+3 2136 2137 2138 
+3 2139 2140 2141 
+3 2142 2143 2144 
+3 2145 2146 2147 
+3 2148 2149 2150 
+3 2151 2152 2153 
+3 2154 2155 2156 
+3 2157 2158 2159 
+3 2160 2161 2162 
+3 2163 2164 2165 
+3 2166 2167 2168 
+3 2169 2170 2171 
+3 2172 2173 2174 
+3 2175 2176 2177 
+3 2178 2179 2180 
+3 2181 2182 2183 
+3 2184 2185 2186 
+3 2187 2188 2189 
+3 2190 2191 2192 
+3 2193 2194 2195 
+3 2196 2197 2198 
+3 2199 2200 2201 
+3 2202 2203 2204 
+3 2205 2206 2207 
+3 2208 2209 2210 
+3 2211 2212 2213 
+3 2214 2215 2216 
+3 2217 2218 2219 
+3 2220 2221 2222 
+3 2223 2224 2225 
+3 2226 2227 2228 
+3 2229 2230 2231 
+3 2232 2233 2234 
+3 2235 2236 2237 
+3 2238 2239 2240 
+3 2241 2242 2243 
+3 2244 2245 2246 
+3 2247 2248 2249 
+3 2250 2251 2252 
+3 2253 2254 2255 
+3 2256 2257 2258 
+3 2259 2260 2261 
+3 2262 2263 2264 
+3 2265 2266 2267 
+3 2268 2269 2270 
+3 2271 2272 2273 
+3 2274 2275 2276 
+3 2277 2278 2279 
+3 2280 2281 2282 
+3 2283 2284 2285 
+3 2286 2287 2288 
+3 2289 2290 2291 
+3 2292 2293 2294 
+3 2295 2296 2297 
+3 2298 2299 2300 
+3 2301 2302 2303 
+3 2304 2305 2306 
+3 2307 2308 2309 
+3 2310 2311 2312 
+3 2313 2314 2315 
+3 2316 2317 2318 
+3 2319 2320 2321 
+3 2322 2323 2324 
+3 2325 2326 2327 
+3 2328 2329 2330 
+3 2331 2332 2333 
+3 2334 2335 2336 
+3 2337 2338 2339 
+3 2340 2341 2342 
+3 2343 2344 2345 
+3 2346 2347 2348 
+3 2349 2350 2351 
+3 2352 2353 2354 
+3 2355 2356 2357 
+3 2358 2359 2360 
+3 2361 2362 2363 
+3 2364 2365 2366 
+3 2367 2368 2369 
+3 2370 2371 2372 
+3 2373 2374 2375 
+3 2376 2377 2378 
+3 2379 2380 2381 
+3 2382 2383 2384 
+3 2385 2386 2387 
+3 2388 2389 2390 
+3 2391 2392 2393 
+3 2394 2395 2396 
+3 2397 2398 2399 
+3 2400 2401 2402 
+3 2403 2404 2405 
+3 2406 2407 2408 
+3 2409 2410 2411 
+3 2412 2413 2414 
+3 2415 2416 2417 
+3 2418 2419 2420 
+3 2421 2422 2423 
+3 2424 2425 2426 
+3 2427 2428 2429 
+3 2430 2431 2432 
+3 2433 2434 2435 
+3 2436 2437 2438 
+3 2439 2440 2441 
+3 2442 2443 2444 
+3 2445 2446 2447 
+3 2448 2449 2450 
+3 2451 2452 2453 
+3 2454 2455 2456 
+3 2457 2458 2459 
+3 2460 2461 2462 
+3 2463 2464 2465 
+3 2466 2467 2468 
+3 2469 2470 2471 
+3 2472 2473 2474 
+3 2475 2476 2477 
+3 2478 2479 2480 
+3 2481 2482 2483 
+3 2484 2485 2486 
+3 2487 2488 2489 
+3 2490 2491 2492 
+3 2493 2494 2495 
+3 2496 2497 2498 
+3 2499 2500 2501 
+3 2502 2503 2504 
+3 2505 2506 2507 
+3 2508 2509 2510 
+3 2511 2512 2513 
+3 2514 2515 2516 
+3 2517 2518 2519 
+3 2520 2521 2522 
+3 2523 2524 2525 
+3 2526 2527 2528 
+3 2529 2530 2531 
+3 2532 2533 2534 
+3 2535 2536 2537 
+3 2538 2539 2540 
+3 2541 2542 2543 
+3 2544 2545 2546 
+3 2547 2548 2549 
+3 2550 2551 2552 
+3 2553 2554 2555 
+3 2556 2557 2558 
+3 2559 2560 2561 
+3 2562 2563 2564 
+3 2565 2566 2567 
+3 2568 2569 2570 
+3 2571 2572 2573 
+3 2574 2575 2576 
+3 2577 2578 2579 
+3 2580 2581 2582 
+3 2583 2584 2585 
+3 2586 2587 2588 
+3 2589 2590 2591 
+3 2592 2593 2594 
+3 2595 2596 2597 
+3 2598 2599 2600 
+3 2601 2602 2603 
+3 2604 2605 2606 
+3 2607 2608 2609 
+3 2610 2611 2612 
+3 2613 2614 2615 
+3 2616 2617 2618 
+3 2619 2620 2621 
+3 2622 2623 2624 
+3 2625 2626 2627 
+3 2628 2629 2630 
+3 2631 2632 2633 
+3 2634 2635 2636 
+3 2637 2638 2639 
+3 2640 2641 2642 
+3 2643 2644 2645 
+3 2646 2647 2648 
+3 2649 2650 2651 
+3 2652 2653 2654 
+3 2655 2656 2657 
+3 2658 2659 2660 
+3 2661 2662 2663 
+3 2664 2665 2666 
+3 2667 2668 2669 
+3 2670 2671 2672 
+3 2673 2674 2675 
+3 2676 2677 2678 
+3 2679 2680 2681 
+3 2682 2683 2684 
+3 2685 2686 2687 
+3 2688 2689 2690 
+3 2691 2692 2693 
+3 2694 2695 2696 
+3 2697 2698 2699 
+3 2700 2701 2702 
+3 2703 2704 2705 
+3 2706 2707 2708 
+3 2709 2710 2711 
+3 2712 2713 2714 
+3 2715 2716 2717 
+3 2718 2719 2720 
+3 2721 2722 2723 
+3 2724 2725 2726 
+3 2727 2728 2729 
+3 2730 2731 2732 
+3 2733 2734 2735 
+3 2736 2737 2738 
+3 2739 2740 2741 
+3 2742 2743 2744 
+3 2745 2746 2747 
+3 2748 2749 2750 
+3 2751 2752 2753 
+3 2754 2755 2756 
+3 2757 2758 2759 
+3 2760 2761 2762 
+3 2763 2764 2765 
+3 2766 2767 2768 
+3 2769 2770 2771 
+3 2772 2773 2774 
+3 2775 2776 2777 
+3 2778 2779 2780 
+3 2781 2782 2783 
+3 2784 2785 2786 
+3 2787 2788 2789 
+3 2790 2791 2792 
+3 2793 2794 2795 
+3 2796 2797 2798 
+3 2799 2800 2801 
+3 2802 2803 2804 
+3 2805 2806 2807 
+3 2808 2809 2810 
+3 2811 2812 2813 
+3 2814 2815 2816 
+3 2817 2818 2819 
+3 2820 2821 2822 
+3 2823 2824 2825 
+3 2826 2827 2828 
+3 2829 2830 2831 
+3 2832 2833 2834 
+3 2835 2836 2837 
+3 2838 2839 2840 
+3 2841 2842 2843 
+3 2844 2845 2846 
+3 2847 2848 2849 
+3 2850 2851 2852 
+3 2853 2854 2855 
+3 2856 2857 2858 
+3 2859 2860 2861 
+3 2862 2863 2864 
+3 2865 2866 2867 
+3 2868 2869 2870 
+3 2871 2872 2873 
+3 2874 2875 2876 
+3 2877 2878 2879 
+3 2880 2881 2882 
+3 2883 2884 2885 
+3 2886 2887 2888 
+3 2889 2890 2891 
+3 2892 2893 2894 
+3 2895 2896 2897 
+3 2898 2899 2900 
+3 2901 2902 2903 
+3 2904 2905 2906 
+3 2907 2908 2909 
+3 2910 2911 2912 
+3 2913 2914 2915 
+3 2916 2917 2918 
+3 2919 2920 2921 
+3 2922 2923 2924 
+3 2925 2926 2927 
+3 2928 2929 2930 
+3 2931 2932 2933 
+3 2934 2935 2936 
+3 2937 2938 2939 
+3 2940 2941 2942 
+3 2943 2944 2945 
+3 2946 2947 2948 
+3 2949 2950 2951 
+3 2952 2953 2954 
+3 2955 2956 2957 
+3 2958 2959 2960 
+3 2961 2962 2963 
+3 2964 2965 2966 
+3 2967 2968 2969 
+3 2970 2971 2972 
+3 2973 2974 2975 
+3 2976 2977 2978 
+3 2979 2980 2981 
+3 2982 2983 2984 
+3 2985 2986 2987 
+3 2988 2989 2990 
+3 2991 2992 2993 
+3 2994 2995 2996 
+3 2997 2998 2999 
+3 3000 3001 3002 
+3 3003 3004 3005 
+3 3006 3007 3008 
+3 3009 3010 3011 
+3 3012 3013 3014 
+3 3015 3016 3017 
+3 3018 3019 3020 
+3 3021 3022 3023 
+3 3024 3025 3026 
+3 3027 3028 3029 
+3 3030 3031 3032 
+3 3033 3034 3035 
+3 3036 3037 3038 
+3 3039 3040 3041 
+3 3042 3043 3044 
+3 3045 3046 3047 
+3 3048 3049 3050 
+3 3051 3052 3053 
+3 3054 3055 3056 
+3 3057 3058 3059 
+3 3060 3061 3062 
+3 3063 3064 3065 
+3 3066 3067 3068 
+3 3069 3070 3071 
+3 3072 3073 3074 
+3 3075 3076 3077 
+3 3078 3079 3080 
+3 3081 3082 3083 
+3 3084 3085 3086 
+3 3087 3088 3089 
+3 3090 3091 3092 
+3 3093 3094 3095 
+3 3096 3097 3098 
+3 3099 3100 3101 
+3 3102 3103 3104 
+3 3105 3106 3107 
+3 3108 3109 3110 
+3 3111 3112 3113 
+3 3114 3115 3116 
+3 3117 3118 3119 
+3 3120 3121 3122 
+3 3123 3124 3125 
+3 3126 3127 3128 
+3 3129 3130 3131 
+3 3132 3133 3134 
+3 3135 3136 3137 
+3 3138 3139 3140 
+3 3141 3142 3143 
+3 3144 3145 3146 
+3 3147 3148 3149 
+3 3150 3151 3152 
+3 3153 3154 3155 
+3 3156 3157 3158 
+3 3159 3160 3161 
+3 3162 3163 3164 
+3 3165 3166 3167 
+3 3168 3169 3170 
+3 3171 3172 3173 
+3 3174 3175 3176 
+3 3177 3178 3179 
+3 3180 3181 3182 
+3 3183 3184 3185 
+3 3186 3187 3188 
+3 3189 3190 3191 
+3 3192 3193 3194 
+3 3195 3196 3197 
+3 3198 3199 3200 
+3 3201 3202 3203 
+3 3204 3205 3206 
+3 3207 3208 3209 
+3 3210 3211 3212 
+3 3213 3214 3215 
+3 3216 3217 3218 
+3 3219 3220 3221 
+3 3222 3223 3224 
+3 3225 3226 3227 
+3 3228 3229 3230 
+3 3231 3232 3233 
+3 3234 3235 3236 
+3 3237 3238 3239 
+3 3240 3241 3242 
+3 3243 3244 3245 
+3 3246 3247 3248 
+3 3249 3250 3251 
+3 3252 3253 3254 
+3 3255 3256 3257 
+3 3258 3259 3260 
+3 3261 3262 3263 
+3 3264 3265 3266 
+3 3267 3268 3269 
+3 3270 3271 3272 
+3 3273 3274 3275 
+3 3276 3277 3278 
+3 3279 3280 3281 
+3 3282 3283 3284 
+3 3285 3286 3287 
+3 3288 3289 3290 
+3 3291 3292 3293 
+3 3294 3295 3296 
+3 3297 3298 3299 
+3 3300 3301 3302 
+3 3303 3304 3305 
+3 3306 3307 3308 
+3 3309 3310 3311 
+3 3312 3313 3314 
+3 3315 3316 3317 
+3 3318 3319 3320 
+3 3321 3322 3323 
+3 3324 3325 3326 
+3 3327 3328 3329 
+3 3330 3331 3332 
+3 3333 3334 3335 
+3 3336 3337 3338 
+3 3339 3340 3341 
+3 3342 3343 3344 
+3 3345 3346 3347 
+3 3348 3349 3350 
+3 3351 3352 3353 
+3 3354 3355 3356 
+3 3357 3358 3359 
+3 3360 3361 3362 
+3 3363 3364 3365 
+3 3366 3367 3368 
+3 3369 3370 3371 
+3 3372 3373 3374 
+3 3375 3376 3377 
+3 3378 3379 3380 
+3 3381 3382 3383 
+3 3384 3385 3386 
+3 3387 3388 3389 
+3 3390 3391 3392 
+3 3393 3394 3395 
+3 3396 3397 3398 
+3 3399 3400 3401 
+3 3402 3403 3404 
+3 3405 3406 3407 
+3 3408 3409 3410 
+3 3411 3412 3413 
+3 3414 3415 3416 
+3 3417 3418 3419 
+3 3420 3421 3422 
+3 3423 3424 3425 
+3 3426 3427 3428 
+3 3429 3430 3431 
+3 3432 3433 3434 
+3 3435 3436 3437 
+3 3438 3439 3440 
+3 3441 3442 3443 
+3 3444 3445 3446 
+3 3447 3448 3449 
+3 3450 3451 3452 
+3 3453 3454 3455 
+3 3456 3457 3458 
+3 3459 3460 3461 
+3 3462 3463 3464 
+3 3465 3466 3467 
+3 3468 3469 3470 
+3 3471 3472 3473 
+3 3474 3475 3476 
+3 3477 3478 3479 
+3 3480 3481 3482 
+3 3483 3484 3485 
+3 3486 3487 3488 
+3 3489 3490 3491 
+3 3492 3493 3494 
+3 3495 3496 3497 
+3 3498 3499 3500 
+3 3501 3502 3503 
+3 3504 3505 3506 
+3 3507 3508 3509 
+3 3510 3511 3512 
+3 3513 3514 3515 
+3 3516 3517 3518 
+3 3519 3520 3521 
+3 3522 3523 3524 
+3 3525 3526 3527 
+3 3528 3529 3530 
+3 3531 3532 3533 
+3 3534 3535 3536 
+3 3537 3538 3539 
+3 3540 3541 3542 
+3 3543 3544 3545 
+3 3546 3547 3548 
+3 3549 3550 3551 
+3 3552 3553 3554 
+3 3555 3556 3557 
+3 3558 3559 3560 
+3 3561 3562 3563 
+3 3564 3565 3566 
+3 3567 3568 3569 
+3 3570 3571 3572 
+3 3573 3574 3575 
+3 3576 3577 3578 
+3 3579 3580 3581 
+3 3582 3583 3584 
+3 3585 3586 3587 
+3 3588 3589 3590 
+3 3591 3592 3593 
+3 3594 3595 3596 
+3 3597 3598 3599 
+3 3600 3601 3602 
+3 3603 3604 3605 
+3 3606 3607 3608 
+3 3609 3610 3611 
+3 3612 3613 3614 
+3 3615 3616 3617 
+3 3618 3619 3620 
+3 3621 3622 3623 
+3 3624 3625 3626 
+3 3627 3628 3629 
+3 3630 3631 3632 
+3 3633 3634 3635 
+3 3636 3637 3638 
+3 3639 3640 3641 
+3 3642 3643 3644 
+3 3645 3646 3647 
+3 3648 3649 3650 
+3 3651 3652 3653 
+3 3654 3655 3656 
+3 3657 3658 3659 
+3 3660 3661 3662 
+3 3663 3664 3665 
+3 3666 3667 3668 
+3 3669 3670 3671 
+3 3672 3673 3674 
+3 3675 3676 3677 
+3 3678 3679 3680 
+3 3681 3682 3683 
+3 3684 3685 3686 
+3 3687 3688 3689 
+3 3690 3691 3692 
+3 3693 3694 3695 
+3 3696 3697 3698 
+3 3699 3700 3701 
+3 3702 3703 3704 
+3 3705 3706 3707 
+3 3708 3709 3710 
+3 3711 3712 3713 
+3 3714 3715 3716 
+3 3717 3718 3719 
+3 3720 3721 3722 
+3 3723 3724 3725 
+3 3726 3727 3728 
+3 3729 3730 3731 
+3 3732 3733 3734 
+3 3735 3736 3737 
+3 3738 3739 3740 
+3 3741 3742 3743 
+3 3744 3745 3746 
+3 3747 3748 3749 
+3 3750 3751 3752 
+3 3753 3754 3755 
+3 3756 3757 3758 
+3 3759 3760 3761 
+3 3762 3763 3764 
+3 3765 3766 3767 
+3 3768 3769 3770 
+3 3771 3772 3773 
+3 3774 3775 3776 
+3 3777 3778 3779 
+3 3780 3781 3782 
+3 3783 3784 3785 
+3 3786 3787 3788 
+3 3789 3790 3791 
+3 3792 3793 3794 
+3 3795 3796 3797 
+3 3798 3799 3800 
+3 3801 3802 3803 
+3 3804 3805 3806 
+3 3807 3808 3809 
+3 3810 3811 3812 
+3 3813 3814 3815 
+3 3816 3817 3818 
+3 3819 3820 3821 
+3 3822 3823 3824 
+3 3825 3826 3827 
+3 3828 3829 3830 
+3 3831 3832 3833 
+3 3834 3835 3836 
+3 3837 3838 3839 
+3 3840 3841 3842 
+3 3843 3844 3845 
+3 3846 3847 3848 
+3 3849 3850 3851 
+3 3852 3853 3854 
+3 3855 3856 3857 
+3 3858 3859 3860 
+3 3861 3862 3863 
+3 3864 3865 3866 
+3 3867 3868 3869 
+3 3870 3871 3872 
+3 3873 3874 3875 
+3 3876 3877 3878 
+3 3879 3880 3881 
+3 3882 3883 3884 
+3 3885 3886 3887 
+3 3888 3889 3890 
+3 3891 3892 3893 
+3 3894 3895 3896 
+3 3897 3898 3899 
+3 3900 3901 3902 
+3 3903 3904 3905 
+3 3906 3907 3908 
+3 3909 3910 3911 
+3 3912 3913 3914 
+3 3915 3916 3917 
+3 3918 3919 3920 
+3 3921 3922 3923 
+3 3924 3925 3926 
+3 3927 3928 3929 
+3 3930 3931 3932 
+3 3933 3934 3935 
+3 3936 3937 3938 
+3 3939 3940 3941 
+3 3942 3943 3944 
+3 3945 3946 3947 
+3 3948 3949 3950 
+3 3951 3952 3953 
+3 3954 3955 3956 
+3 3957 3958 3959 
+3 3960 3961 3962 
+3 3963 3964 3965 
+3 3966 3967 3968 
+3 3969 3970 3971 
+3 3972 3973 3974 
+3 3975 3976 3977 
+3 3978 3979 3980 
+3 3981 3982 3983 
+3 3984 3985 3986 
+3 3987 3988 3989 
+3 3990 3991 3992 
+3 3993 3994 3995 
+3 3996 3997 3998 
+3 3999 4000 4001 
+3 4002 4003 4004 
+3 4005 4006 4007 
+3 4008 4009 4010 
+3 4011 4012 4013 
+3 4014 4015 4016 
+3 4017 4018 4019 
+3 4020 4021 4022 
+3 4023 4024 4025 
+3 4026 4027 4028 
+3 4029 4030 4031 
+3 4032 4033 4034 
+3 4035 4036 4037 
+3 4038 4039 4040 
+3 4041 4042 4043 
+3 4044 4045 4046 
+3 4047 4048 4049 
+3 4050 4051 4052 
+3 4053 4054 4055 
+3 4056 4057 4058 
+3 4059 4060 4061 
+3 4062 4063 4064 
+3 4065 4066 4067 
+3 4068 4069 4070 
+3 4071 4072 4073 
+3 4074 4075 4076 
+3 4077 4078 4079 
+3 4080 4081 4082 
+3 4083 4084 4085 
+3 4086 4087 4088 
+3 4089 4090 4091 
+3 4092 4093 4094 
+3 4095 4096 4097 
+3 4098 4099 4100 
+3 4101 4102 4103 
+3 4104 4105 4106 
+3 4107 4108 4109 
+3 4110 4111 4112 
+3 4113 4114 4115 
+3 4116 4117 4118 
+3 4119 4120 4121 
+3 4122 4123 4124 
+3 4125 4126 4127 
+3 4128 4129 4130 
+3 4131 4132 4133 
+3 4134 4135 4136 
+3 4137 4138 4139 
+3 4140 4141 4142 
+3 4143 4144 4145 
+3 4146 4147 4148 
+3 4149 4150 4151 
+3 4152 4153 4154 
+3 4155 4156 4157 
+3 4158 4159 4160 
+3 4161 4162 4163 
+3 4164 4165 4166 
+3 4167 4168 4169 
+3 4170 4171 4172 
+3 4173 4174 4175 
+3 4176 4177 4178 
+3 4179 4180 4181 
+3 4182 4183 4184 
+3 4185 4186 4187 
+3 4188 4189 4190 
+3 4191 4192 4193 
+3 4194 4195 4196 
+3 4197 4198 4199 
+3 4200 4201 4202 
+3 4203 4204 4205 
+3 4206 4207 4208 
+3 4209 4210 4211 
+3 4212 4213 4214 
+3 4215 4216 4217 
+3 4218 4219 4220 
+3 4221 4222 4223 
+3 4224 4225 4226 
+3 4227 4228 4229 
+3 4230 4231 4232 
+3 4233 4234 4235 
+3 4236 4237 4238 
+3 4239 4240 4241 
+3 4242 4243 4244 
+3 4245 4246 4247 
+3 4248 4249 4250 
+3 4251 4252 4253 
+3 4254 4255 4256 
+3 4257 4258 4259 
+3 4260 4261 4262 
+3 4263 4264 4265 
+
+POINT_DATA 4266
+NORMALS normals float
+0.348874 -0.933082 0.087431 0.212374 -0.888448 -0.406888 0.386855 -0.855628 -0.343865 
+0.348874 -0.933082 0.087431 0.386855 -0.855628 -0.343865 0.725381 -0.658564 0.200292 
+0.348874 -0.933082 0.087431 0.725381 -0.658564 0.200292 0.701118 -0.662983 0.262465 
+0.348874 -0.933082 0.087431 0.701118 -0.662983 0.262465 0.35387 -0.903987 0.239965 
+0.725381 -0.658564 0.200292 0.386855 -0.855628 -0.343865 0.729917 -0.670363 -0.133543 
+0.725381 -0.658564 0.200292 0.729917 -0.670363 -0.133543 0.953893 -0.29867 0.029749 
+0.725381 -0.658564 0.200292 0.953893 -0.29867 0.029749 0.965144 -0.219026 0.143263 
+0.725381 -0.658564 0.200292 0.965144 -0.219026 0.143263 0.701118 -0.662983 0.262465 
+0.965144 -0.219026 0.143263 0.953893 -0.29867 0.029749 0.979551 -0.200712 0.013968 
+0.965144 -0.219026 0.143263 0.979551 -0.200712 0.013968 0.977066 -0.192313 0.091421 
+0.729917 -0.670363 -0.133543 0.911598 -0.389757 -0.130684 0.979551 -0.200712 0.013968 
+0.729917 -0.670363 -0.133543 0.979551 -0.200712 0.013968 0.953893 -0.29867 0.029749 
+0.977066 -0.192313 0.091421 0.874936 -0.422464 0.236664 0.942026 -0.050144 0.331771 
+0.977066 -0.192313 0.091421 0.942026 -0.050144 0.331771 0.986235 0.049921 0.157632 
+0.901647 0.397694 0.169917 0.926445 0.366024 0.087895 0.986235 0.049921 0.157632 
+0.901647 0.397694 0.169917 0.986235 0.049921 0.157632 0.942026 -0.050144 0.331771 
+0.594942 -0.803167 -0.031089 0.352348 -0.931809 -0.087082 0.458241 -0.883928 0.093203 
+0.977066 -0.192313 0.091421 0.979551 -0.200712 0.013968 0.954741 -0.284513 -0.086734 
+0.977066 -0.192313 0.091421 0.954741 -0.284513 -0.086734 0.874936 -0.422464 0.236664 
+0.989279 -0.070005 -0.128169 0.954741 -0.284513 -0.086734 0.923887 -0.171674 -0.341995 
+0.989279 -0.070005 -0.128169 0.923887 -0.171674 -0.341995 0.579134 0.57374 -0.579159 
+0.954741 -0.284513 -0.086734 0.989279 -0.070005 -0.128169 0.951966 -0.195126 0.235978 
+0.954741 -0.284513 -0.086734 0.951966 -0.195126 0.235978 0.874936 -0.422464 0.236664 
+0.734202 0.623781 -0.268041 0.876306 0.450645 -0.170315 0.926445 0.366024 0.087895 
+0.734202 0.623781 -0.268041 0.926445 0.366024 0.087895 0.901647 0.397694 0.169917 
+0.954741 -0.284513 -0.086734 0.979551 -0.200712 0.013968 0.911598 -0.389757 -0.130684 
+0.954741 -0.284513 -0.086734 0.911598 -0.389757 -0.130684 0.938204 -0.282348 -0.200131 
+0.631287 -0.771506 0.079087 0.820104 -0.561234 -0.11156 0.439167 -0.869493 0.226084 
+0.631287 -0.771506 0.079087 0.439167 -0.869493 0.226084 0.504474 -0.862975 0.027922 
+0.504474 -0.862975 0.027922 0.439167 -0.869493 0.226084 0.555397 -0.827906 0.078147 
+0.504474 -0.862975 0.027922 0.555397 -0.827906 0.078147 0.662773 -0.741412 -0.105072 
+0.373518 -0.89631 0.238982 4e-06 -0.992431 0.122802 -1e-06 -0.934468 -0.356048 
+0.373518 -0.89631 0.238982 -1e-06 -0.934468 -0.356048 0.406482 -0.846534 -0.343734 
+0.555397 -0.827906 0.078147 0.373518 -0.89631 0.238982 0.406482 -0.846534 -0.343734 
+0.555397 -0.827906 0.078147 0.406482 -0.846534 -0.343734 0.545411 -0.77524 -0.318636 
+0.888296 -0.378073 -0.260751 0.953696 -0.195071 -0.228935 0.938204 -0.282348 -0.200131 
+0.888296 -0.378073 -0.260751 0.938204 -0.282348 -0.200131 0.822765 -0.539521 -0.178815 
+0.822765 -0.539521 -0.178815 0.594942 -0.803167 -0.031089 0.504474 -0.862975 0.027922 
+0.822765 -0.539521 -0.178815 0.504474 -0.862975 0.027922 0.662773 -0.741412 -0.105072 
+0.911598 -0.389757 -0.130684 0.594942 -0.803167 -0.031089 0.822765 -0.539521 -0.178815 
+0.911598 -0.389757 -0.130684 0.822765 -0.539521 -0.178815 0.938204 -0.282348 -0.200131 
+0.729917 -0.670363 -0.133543 0.594942 -0.803167 -0.031089 0.911598 -0.389757 -0.130684 
+0.954741 -0.284513 -0.086734 0.938204 -0.282348 -0.200131 0.953696 -0.195071 -0.228935 
+0.954741 -0.284513 -0.086734 0.953696 -0.195071 -0.228935 0.923887 -0.171674 -0.341995 
+0.923887 -0.171674 -0.341995 0.984314 -0.034468 -0.173023 0.784402 0.43033 -0.446688 
+0.923887 -0.171674 -0.341995 0.784402 0.43033 -0.446688 0.579134 0.57374 -0.579159 
+0.734202 0.623781 -0.268041 0.989279 -0.070005 -0.128169 0.579134 0.57374 -0.579159 
+0.734202 0.623781 -0.268041 0.579134 0.57374 -0.579159 0.784402 0.43033 -0.446688 
+0.989279 -0.070005 -0.128169 0.734202 0.623781 -0.268041 0.901647 0.397694 0.169917 
+0.989279 -0.070005 -0.128169 0.901647 0.397694 0.169917 0.951966 -0.195126 0.235978 
+0.942026 -0.050144 0.331771 0.874936 -0.422464 0.236664 0.951966 -0.195126 0.235978 
+0.942026 -0.050144 0.331771 0.951966 -0.195126 0.235978 0.901647 0.397694 0.169917 
+0.876306 0.450645 -0.170315 0.734202 0.623781 -0.268041 0.784402 0.43033 -0.446688 
+0.876306 0.450645 -0.170315 0.784402 0.43033 -0.446688 0.964956 0.262334 -0.006335 
+0.984314 -0.034468 -0.173023 0.987547 -0.136774 0.077744 0.964956 0.262334 -0.006335 
+0.984314 -0.034468 -0.173023 0.964956 0.262334 -0.006335 0.784402 0.43033 -0.446688 
+0.986235 0.049921 0.157632 0.926445 0.366024 0.087895 0.853239 0.521224 0.017567 
+0.986235 0.049921 0.157632 0.853239 0.521224 0.017567 0.935641 0.293185 0.196515 
+0.935641 0.293185 0.196515 0.853239 0.521224 0.017567 0.722651 0.689448 0.04937 
+0.935641 0.293185 0.196515 0.722651 0.689448 0.04937 0.799054 0.539894 0.264627 
+0.799054 0.539894 0.264627 0.722651 0.689448 0.04937 0.385971 0.919932 0.068936 
+0.799054 0.539894 0.264627 0.385971 0.919932 0.068936 0.324346 0.820394 0.470907 
+0.977066 -0.192313 0.091421 0.986235 0.049921 0.157632 0.975637 -0.153724 0.156528 
+0.977066 -0.192313 0.091421 0.975637 -0.153724 0.156528 0.965144 -0.219026 0.143263 
+0.984314 -0.034468 -0.173023 0.923887 -0.171674 -0.341995 0.953696 -0.195071 -0.228935 
+0.984314 -0.034468 -0.173023 0.953696 -0.195071 -0.228935 0.947457 -0.205221 -0.245376 
+0.888296 -0.378073 -0.260751 0.864378 -0.332181 -0.377501 0.947457 -0.205221 -0.245376 
+0.888296 -0.378073 -0.260751 0.947457 -0.205221 -0.245376 0.953696 -0.195071 -0.228935 
+0.769239 -0.573633 -0.281454 0.805175 -0.423519 -0.415121 0.864378 -0.332181 -0.377501 
+0.769239 -0.573633 -0.281454 0.864378 -0.332181 -0.377501 0.888296 -0.378073 -0.260751 
+0.769239 -0.573633 -0.281454 0.888296 -0.378073 -0.260751 0.822765 -0.539521 -0.178815 
+0.769239 -0.573633 -0.281454 0.822765 -0.539521 -0.178815 0.662773 -0.741412 -0.105072 
+0.575754 -0.783717 -0.233011 0.467776 -0.872239 0.142777 0.769239 -0.573633 -0.281454 
+0.575754 -0.783717 -0.233011 0.769239 -0.573633 -0.281454 0.662773 -0.741412 -0.105072 
+0.555397 -0.827906 0.078147 0.545411 -0.77524 -0.318636 0.575754 -0.783717 -0.233011 
+0.555397 -0.827906 0.078147 0.575754 -0.783717 -0.233011 0.662773 -0.741412 -0.105072 
+0.769239 -0.573633 -0.281454 0.467776 -0.872239 0.142777 0.474078 -0.87185 -0.122997 
+0.769239 -0.573633 -0.281454 0.474078 -0.87185 -0.122997 0.481758 -0.839145 -0.252479 
+0.616266 0.780555 -0.104641 0.803092 0.594031 -0.046599 0.606811 0.7427 0.283156 
+0.616266 0.780555 -0.104641 0.606811 0.7427 0.283156 0.457822 0.886834 0.06265 
+0.964956 0.262334 -0.006335 0.987547 -0.136774 0.077744 0.975257 -0.035228 0.218248 
+0.964956 0.262334 -0.006335 0.975257 -0.035228 0.218248 0.891761 0.325339 0.314511 
+0.439167 -0.869493 0.226084 0.543674 -0.838873 -0.026645 0.373518 -0.89631 0.238982 
+0.439167 -0.869493 0.226084 0.373518 -0.89631 0.238982 0.555397 -0.827906 0.078147 
+0.820104 -0.561234 -0.11156 0.602673 -0.457406 -0.653885 0.543674 -0.838873 -0.026645 
+0.820104 -0.561234 -0.11156 0.543674 -0.838873 -0.026645 0.439167 -0.869493 0.226084 
+0.86604 -0.429484 -0.255965 0.715428 -0.652929 -0.248689 0.602673 -0.457406 -0.653885 
+0.86604 -0.429484 -0.255965 0.602673 -0.457406 -0.653885 0.820104 -0.561234 -0.11156 
+0.631287 -0.771506 0.079087 0.458241 -0.883928 0.093203 0.721161 -0.629427 0.289393 
+0.631287 -0.771506 0.079087 0.721161 -0.629427 0.289393 0.878202 -0.452932 0.153667 
+0.878202 -0.452932 0.153667 0.86604 -0.429484 -0.255965 0.820104 -0.561234 -0.11156 
+0.878202 -0.452932 0.153667 0.820104 -0.561234 -0.11156 0.631287 -0.771506 0.079087 
+0.352348 -0.931809 -0.087082 0.550241 -0.832853 0.059928 0.721161 -0.629427 0.289393 
+0.352348 -0.931809 -0.087082 0.721161 -0.629427 0.289393 0.458241 -0.883928 0.093203 
+0.458241 -0.883928 0.093203 0.631287 -0.771506 0.079087 0.504474 -0.862975 0.027922 
+0.458241 -0.883928 0.093203 0.504474 -0.862975 0.027922 0.594942 -0.803167 -0.031089 
+0.212374 -0.888448 -0.406888 0.348874 -0.933082 0.087431 0.337905 -0.934588 -0.111196 
+0.212374 -0.888448 -0.406888 0.337905 -0.934588 -0.111196 0.550241 -0.832853 0.059928 
+0.550241 -0.832853 0.059928 0.337905 -0.934588 -0.111196 0.631678 -0.664595 0.39912 
+0.550241 -0.832853 0.059928 0.631678 -0.664595 0.39912 0.721161 -0.629427 0.289393 
+0.721161 -0.629427 0.289393 0.631678 -0.664595 0.39912 0.584991 -0.741818 0.327858 
+0.721161 -0.629427 0.289393 0.584991 -0.741818 0.327858 0.878202 -0.452932 0.153667 
+0.715428 -0.652929 -0.248689 0.86604 -0.429484 -0.255965 0.878202 -0.452932 0.153667 
+0.715428 -0.652929 -0.248689 0.878202 -0.452932 0.153667 0.584991 -0.741818 0.327858 
+0.586831 -0.742915 -0.322034 0.805175 -0.423519 -0.415121 0.769239 -0.573633 -0.281454 
+0.586831 -0.742915 -0.322034 0.769239 -0.573633 -0.281454 0.481758 -0.839145 -0.252479 
+0.921668 -0.382038 -0.067641 0.792456 -0.388821 -0.469927 0.678966 -0.733832 -0.022292 
+0.921668 -0.382038 -0.067641 0.678966 -0.733832 -0.022292 0.90544 -0.404256 0.129447 
+0.947457 -0.205221 -0.245376 0.864378 -0.332181 -0.377501 0.792456 -0.388821 -0.469927 
+0.947457 -0.205221 -0.245376 0.792456 -0.388821 -0.469927 0.921668 -0.382038 -0.067641 
+0.984314 -0.034468 -0.173023 0.947457 -0.205221 -0.245376 0.921668 -0.382038 -0.067641 
+0.984314 -0.034468 -0.173023 0.921668 -0.382038 -0.067641 0.987547 -0.136774 0.077744 
+0.586831 -0.742915 -0.322034 0.486236 -0.397332 -0.778268 0.724399 -0.336995 -0.601398 
+0.586831 -0.742915 -0.322034 0.724399 -0.336995 -0.601398 0.805175 -0.423519 -0.415121 
+0.792456 -0.388821 -0.469927 0.864378 -0.332181 -0.377501 0.805175 -0.423519 -0.415121 
+0.792456 -0.388821 -0.469927 0.805175 -0.423519 -0.415121 0.724399 -0.336995 -0.601398 
+0.486236 -0.397332 -0.778268 0.586831 -0.742915 -0.322034 -3e-06 -0.858758 -0.512381 
+0.486236 -0.397332 -0.778268 -3e-06 -0.858758 -0.512381 -7e-06 -0.468007 -0.883725 
+0.792456 -0.388821 -0.469927 0.724399 -0.336995 -0.601398 0.486236 -0.397332 -0.778268 
+0.792456 -0.388821 -0.469927 0.486236 -0.397332 -0.778268 0.587459 -0.386793 -0.710833 
+0 -0.978551 -0.206004 -3e-06 -0.858758 -0.512381 0.586831 -0.742915 -0.322034 
+0 -0.978551 -0.206004 0.586831 -0.742915 -0.322034 0.481758 -0.839145 -0.252479 
+0.876306 0.450645 -0.170315 0.964956 0.262334 -0.006335 0.803092 0.594031 -0.046599 
+0.876306 0.450645 -0.170315 0.803092 0.594031 -0.046599 0.741001 0.653804 -0.153158 
+0.741001 0.653804 -0.153158 0.803092 0.594031 -0.046599 0.616266 0.780555 -0.104641 
+0.741001 0.653804 -0.153158 0.616266 0.780555 -0.104641 0.646123 0.750792 -0.137249 
+0.792456 -0.388821 -0.469927 0.587459 -0.386793 -0.710833 0.518011 -0.801463 -0.298867 
+0.792456 -0.388821 -0.469927 0.518011 -0.801463 -0.298867 0.678966 -0.733832 -0.022292 
+0.987547 -0.136774 0.077744 0.921668 -0.382038 -0.067641 0.90544 -0.404256 0.129447 
+0.987547 -0.136774 0.077744 0.90544 -0.404256 0.129447 0.975257 -0.035228 0.218248 
+0.891761 0.325339 0.314511 0.606811 0.7427 0.283156 0.803092 0.594031 -0.046599 
+0.891761 0.325339 0.314511 0.803092 0.594031 -0.046599 0.964956 0.262334 -0.006335 
+0.876306 0.450645 -0.170315 0.741001 0.653804 -0.153158 0.853239 0.521224 0.017567 
+0.876306 0.450645 -0.170315 0.853239 0.521224 0.017567 0.926445 0.366024 0.087895 
+0.853239 0.521224 0.017567 0.741001 0.653804 -0.153158 0.646123 0.750792 -0.137249 
+0.853239 0.521224 0.017567 0.646123 0.750792 -0.137249 0.722651 0.689448 0.04937 
+0.935641 0.293185 0.196515 0.933752 0.055817 0.353542 0.975637 -0.153724 0.156528 
+0.935641 0.293185 0.196515 0.975637 -0.153724 0.156528 0.986235 0.049921 0.157632 
+0.389691 -0.673093 0.628559 0.35387 -0.903987 0.239965 0.701118 -0.662983 0.262465 
+0.389691 -0.673093 0.628559 0.701118 -0.662983 0.262465 0.830375 -0.341302 0.440443 
+0.830375 -0.341302 0.440443 0.701118 -0.662983 0.262465 0.965144 -0.219026 0.143263 
+0.830375 -0.341302 0.440443 0.965144 -0.219026 0.143263 0.975637 -0.153724 0.156528 
+0.799054 0.539894 0.264627 0.746043 0.33557 0.575164 0.933752 0.055817 0.353542 
+0.799054 0.539894 0.264627 0.933752 0.055817 0.353542 0.935641 0.293185 0.196515 
+0.324346 0.820394 0.470907 0.209437 0.494896 0.843335 0.746043 0.33557 0.575164 
+0.324346 0.820394 0.470907 0.746043 0.33557 0.575164 0.799054 0.539894 0.264627 
+0.830375 -0.341302 0.440443 0.975637 -0.153724 0.156528 0.933752 0.055817 0.353542 
+0.830375 -0.341302 0.440443 0.933752 0.055817 0.353542 0.750373 -0.14413 0.64511 
+0.750373 -0.14413 0.64511 0.933752 0.055817 0.353542 0.746043 0.33557 0.575164 
+0.750373 -0.14413 0.64511 0.746043 0.33557 0.575164 0.470056 0.038915 0.881778 
+0.413086 -0.251082 0.875396 0.750373 -0.14413 0.64511 0.470056 0.038915 0.881778 
+0.413086 -0.251082 0.875396 0.470056 0.038915 0.881778 0.192696 0.095302 0.976619 
+0.413086 -0.251082 0.875396 0.389691 -0.673093 0.628559 0.830375 -0.341302 0.440443 
+0.413086 -0.251082 0.875396 0.830375 -0.341302 0.440443 0.750373 -0.14413 0.64511 
+0.470056 0.038915 0.881778 0.746043 0.33557 0.575164 0.209437 0.494896 0.843335 
+0.470056 0.038915 0.881778 0.209437 0.494896 0.843335 0.192696 0.095302 0.976619 
+0.457822 0.886834 0.06265 0.076178 0.992961 0.090692 0.236611 0.953639 -0.185977 
+0.457822 0.886834 0.06265 0.236611 0.953639 -0.185977 0.616266 0.780555 -0.104641 
+0.349242 0.926109 -0.142659 0.646123 0.750792 -0.137249 0.616266 0.780555 -0.104641 
+0.349242 0.926109 -0.142659 0.616266 0.780555 -0.104641 0.236611 0.953639 -0.185977 
+0.722651 0.689448 0.04937 0.646123 0.750792 -0.137249 0.349242 0.926109 -0.142659 
+0.722651 0.689448 0.04937 0.349242 0.926109 -0.142659 0.385971 0.919932 0.068936 
+0.236611 0.953639 -0.185977 0.076178 0.992961 0.090692 -3e-06 0.999967 -0.00811 
+0.236611 0.953639 -0.185977 -3e-06 0.999967 -0.00811 -5e-06 0.971901 -0.235392 
+0.90544 -0.404256 0.129447 0.678966 -0.733832 -0.022292 0.565557 -0.740229 0.363602 
+0.90544 -0.404256 0.129447 0.565557 -0.740229 0.363602 0.824637 -0.477011 0.30403 
+0.678966 -0.733832 -0.022292 0.518011 -0.801463 -0.298867 0.373704 -0.900114 0.223923 
+0.678966 -0.733832 -0.022292 0.373704 -0.900114 0.223923 0.565557 -0.740229 0.363602 
+0.606811 0.7427 0.283156 0.891761 0.325339 0.314511 0.672282 0.428756 0.603494 
+0.606811 0.7427 0.283156 0.672282 0.428756 0.603494 0.304464 0.803416 0.511689 
+0.891761 0.325339 0.314511 0.975257 -0.035228 0.218248 0.849327 -0.275006 0.450571 
+0.891761 0.325339 0.314511 0.849327 -0.275006 0.450571 0.672282 0.428756 0.603494 
+-3e-06 0.999967 -0.00811 0.076178 0.992961 0.090692 -0.052836 0.977633 0.203575 
+-3e-06 0.999967 -0.00811 -0.052836 0.977633 0.203575 -0.000539 0.982003 0.188866 
+0.076178 0.992961 0.090692 0.457822 0.886834 0.06265 0.196368 0.917204 0.346664 
+0.076178 0.992961 0.090692 0.196368 0.917204 0.346664 -0.052836 0.977633 0.203575 
+0.606811 0.7427 0.283156 0.304464 0.803416 0.511689 0.196368 0.917204 0.346664 
+0.606811 0.7427 0.283156 0.196368 0.917204 0.346664 0.457822 0.886834 0.06265 
+0.849327 -0.275006 0.450571 0.975257 -0.035228 0.218248 0.90544 -0.404256 0.129447 
+0.849327 -0.275006 0.450571 0.90544 -0.404256 0.129447 0.824637 -0.477011 0.30403 
+0.565557 -0.740229 0.363602 0.373704 -0.900114 0.223923 0.169275 -0.823659 0.541231 
+0.565557 -0.740229 0.363602 0.169275 -0.823659 0.541231 0.242985 -0.739194 0.628133 
+0.849327 -0.275006 0.450571 0.824637 -0.477011 0.30403 0.250148 -0.700994 0.667857 
+0.849327 -0.275006 0.450571 0.250148 -0.700994 0.667857 0.317378 -0.486856 0.813783 
+0.672282 0.428756 0.603494 0.849327 -0.275006 0.450571 0.317378 -0.486856 0.813783 
+0.672282 0.428756 0.603494 0.317378 -0.486856 0.813783 0.507725 0.289123 0.811556 
+0.196368 0.917204 0.346664 0.304464 0.803416 0.511689 0.208203 0.79297 0.572582 
+0.196368 0.917204 0.346664 0.208203 0.79297 0.572582 -0.032913 0.902551 0.429323 
+-0.052836 0.977633 0.203575 0.196368 0.917204 0.346664 -0.032913 0.902551 0.429323 
+-0.052836 0.977633 0.203575 -0.032913 0.902551 0.429323 0.025858 0.836488 0.547374 
+0.250148 -0.700994 0.667857 0.824637 -0.477011 0.30403 0.565557 -0.740229 0.363602 
+0.250148 -0.700994 0.667857 0.565557 -0.740229 0.363602 0.242985 -0.739194 0.628133 
+0.317378 -0.486856 0.813783 0.250148 -0.700994 0.667857 0.127543 -0.760503 0.636685 
+0.317378 -0.486856 0.813783 0.127543 -0.760503 0.636685 0.295024 -0.352926 0.887921 
+0.507725 0.289123 0.811556 0.317378 -0.486856 0.813783 0.295024 -0.352926 0.887921 
+0.507725 0.289123 0.811556 0.295024 -0.352926 0.887921 0.394249 0.365932 0.843008 
+0.419051 -0.224101 0.879872 0.179506 -0.821589 0.541082 0.334659 -0.91143 0.239372 
+0.419051 -0.224101 0.879872 0.334659 -0.91143 0.239372 0.798617 -0.05579 0.599249 
+0.472541 0.509098 0.719392 0.419051 -0.224101 0.879872 0.798617 -0.05579 0.599249 
+0.472541 0.509098 0.719392 0.798617 -0.05579 0.599249 0.677456 0.636835 0.368096 
+0.798617 -0.05579 0.599249 0.334659 -0.91143 0.239372 0.360994 -0.880424 0.307467 
+0.798617 -0.05579 0.599249 0.360994 -0.880424 0.307467 0.830073 0.300703 0.469636 
+0.677456 0.636835 0.368096 0.798617 -0.05579 0.599249 0.830073 0.300703 0.469636 
+0.677456 0.636835 0.368096 0.830073 0.300703 0.469636 0.519886 0.85059 0.078831 
+0.830073 0.300703 0.469636 0.360994 -0.880424 0.307467 -0.289849 -0.773799 0.563225 
+0.830073 0.300703 0.469636 -0.289849 -0.773799 0.563225 0.848672 0.174313 0.499371 
+0.519886 0.85059 0.078831 0.830073 0.300703 0.469636 0.848672 0.174313 0.499371 
+0.519886 0.85059 0.078831 0.848672 0.174313 0.499371 0.793166 0.604024 -0.077734 
+0.848672 0.174313 0.499371 -0.289849 -0.773799 0.563225 0.108291 -0.492362 0.863628 
+0.848672 0.174313 0.499371 0.108291 -0.492362 0.863628 0.857388 0.156702 0.490235 
+0.793166 0.604024 -0.077734 0.848672 0.174313 0.499371 0.857388 0.156702 0.490235 
+0.793166 0.604024 -0.077734 0.857388 0.156702 0.490235 0.827407 0.559339 -0.050371 
+0.672282 0.428756 0.603494 0.507725 0.289123 0.811556 0.208203 0.79297 0.572582 
+0.672282 0.428756 0.603494 0.208203 0.79297 0.572582 0.304464 0.803416 0.511689 
+0.472541 0.509098 0.719392 0.258314 0.911365 0.320449 0.291412 0.765834 0.573217 
+0.472541 0.509098 0.719392 0.291412 0.765834 0.573217 0.394249 0.365932 0.843008 
+0.394249 0.365932 0.843008 0.291412 0.765834 0.573217 0.208203 0.79297 0.572582 
+0.394249 0.365932 0.843008 0.208203 0.79297 0.572582 0.507725 0.289123 0.811556 
+0.519886 0.85059 0.078831 -0.6424 0.428523 -0.635366 0.028296 0.910392 -0.412779 
+0.519886 0.85059 0.078831 0.028296 0.910392 -0.412779 0.677456 0.636835 0.368096 
+0.334659 -0.91143 0.239372 -0.02457 -0.966561 -0.255255 -0.031711 -0.994445 -0.100363 
+0.334659 -0.91143 0.239372 -0.031711 -0.994445 -0.100363 0.360994 -0.880424 0.307467 
+0.179506 -0.821589 0.541082 0.339863 -0.884652 0.319193 -0.02457 -0.966561 -0.255255 
+0.179506 -0.821589 0.541082 -0.02457 -0.966561 -0.255255 0.334659 -0.91143 0.239372 
+-0.02457 -0.966561 -0.255255 -0.760371 -0.004823 -0.649471 -0.731135 -0.346337 -0.587786 
+-0.02457 -0.966561 -0.255255 -0.731135 -0.346337 -0.587786 -0.031711 -0.994445 -0.100363 
+0.407061 -0.872295 0.270931 0.339863 -0.884652 0.319193 0.281096 -0.820445 0.49785 
+0.407061 -0.872295 0.270931 0.281096 -0.820445 0.49785 0.215455 -0.890885 0.39988 
+-0.02457 -0.966561 -0.255255 0.780966 -0.614563 -0.111376 0.960962 -0.027288 -0.275332 
+-0.02457 -0.966561 -0.255255 0.960962 -0.027288 -0.275332 -0.760371 -0.004823 -0.649471 
+0.242985 -0.739194 0.628133 0.281096 -0.820445 0.49785 0.127543 -0.760503 0.636685 
+0.242985 -0.739194 0.628133 0.127543 -0.760503 0.636685 0.250148 -0.700994 0.667857 
+-0.760371 -0.004823 -0.649471 0.028296 0.910392 -0.412779 -0.6424 0.428523 -0.635366 
+-0.760371 -0.004823 -0.649471 -0.6424 0.428523 -0.635366 -0.731135 -0.346337 -0.587786 
+0.360994 -0.880424 0.307467 -0.031711 -0.994445 -0.100363 -0.76488 -0.635839 -0.103284 
+0.360994 -0.880424 0.307467 -0.76488 -0.635839 -0.103284 -0.289849 -0.773799 0.563225 
+-0.289849 -0.773799 0.563225 -0.76488 -0.635839 -0.103284 -0.867674 -0.490294 -0.082183 
+-0.289849 -0.773799 0.563225 -0.867674 -0.490294 -0.082183 0.108291 -0.492362 0.863628 
+0.028296 0.910392 -0.412779 -0.760371 -0.004823 -0.649471 0.960962 -0.027288 -0.275332 
+0.028296 0.910392 -0.412779 0.960962 -0.027288 -0.275332 0.75127 0.643251 -0.147721 
+0.236676 0.971339 0.022036 0.258314 0.911365 0.320449 0.028296 0.910392 -0.412779 
+0.236676 0.971339 0.022036 0.028296 0.910392 -0.412779 0.75127 0.643251 -0.147721 
+0.025858 0.836488 0.547374 -0.032913 0.902551 0.429323 0.175241 0.881339 0.438785 
+0.025858 0.836488 0.547374 0.175241 0.881339 0.438785 -0.022474 0.939725 0.341193 
+0.236676 0.971339 0.022036 0.111679 0.98828 0.104071 -0.022474 0.939725 0.341193 
+0.236676 0.971339 0.022036 -0.022474 0.939725 0.341193 0.175241 0.881339 0.438785 
+0.208203 0.79297 0.572582 0.291412 0.765834 0.573217 0.175241 0.881339 0.438785 
+0.208203 0.79297 0.572582 0.175241 0.881339 0.438785 -0.032913 0.902551 0.429323 
+0.75127 0.643251 -0.147721 0.879748 0.197412 -0.432518 0.346205 0.845486 -0.406566 
+0.75127 0.643251 -0.147721 0.346205 0.845486 -0.406566 0.076926 0.996795 0.021977 
+0.960962 -0.027288 -0.275332 0.927168 -0.178767 -0.329243 0.879748 0.197412 -0.432518 
+0.960962 -0.027288 -0.275332 0.879748 0.197412 -0.432518 0.75127 0.643251 -0.147721 
+0.780966 -0.614563 -0.111376 0.694409 -0.692344 -0.196103 0.927168 -0.178767 -0.329243 
+0.780966 -0.614563 -0.111376 0.927168 -0.178767 -0.329243 0.960962 -0.027288 -0.275332 
+0.780966 -0.614563 -0.111376 0.407061 -0.872295 0.270931 0.372004 -0.923628 0.09233 
+0.780966 -0.614563 -0.111376 0.372004 -0.923628 0.09233 0.694409 -0.692344 -0.196103 
+0.370478 -0.916542 -0.150655 0.116223 -0.986891 -0.111977 0.195264 -0.964933 -0.175434 
+0.370478 -0.916542 -0.150655 0.195264 -0.964933 -0.175434 0.465009 -0.865356 -0.186883 
+0.887785 -0.387035 -0.249083 0.605549 -0.752463 -0.259055 0.663647 -0.734775 -0.140277 
+0.887785 -0.387035 -0.249083 0.663647 -0.734775 -0.140277 0.931498 -0.360023 -0.051908 
+-6e-06 0.835316 -0.54977 0.21042 0.815506 -0.539142 -0.012274 0.836245 -0.548218 
+-6e-06 0.835316 -0.54977 -0.012274 0.836245 -0.548218 -6e-06 0.866977 -0.498349 
+0.21042 0.815506 -0.539142 0.90969 0.204323 -0.361546 0.917765 0.356117 -0.175748 
+0.21042 0.815506 -0.539142 0.917765 0.356117 -0.175748 -0.012274 0.836245 -0.548218 
+0.90969 0.204323 -0.361546 0.887785 -0.387035 -0.249083 0.931498 -0.360023 -0.051908 
+0.90969 0.204323 -0.361546 0.931498 -0.360023 -0.051908 0.917765 0.356117 -0.175748 
+0.917765 0.356117 -0.175748 0.931498 -0.360023 -0.051908 0.95337 -0.301579 0.011657 
+0.917765 0.356117 -0.175748 0.95337 -0.301579 0.011657 0.945889 0.315049 0.077705 
+0.931498 -0.360023 -0.051908 0.663647 -0.734775 -0.140277 0.565299 -0.824309 -0.030857 
+0.931498 -0.360023 -0.051908 0.565299 -0.824309 -0.030857 0.95337 -0.301579 0.011657 
+0.882586 0.426513 0.197806 0.265383 0.876908 0.400755 0.518352 0.809628 0.275342 
+0.882586 0.426513 0.197806 0.518352 0.809628 0.275342 0.945889 0.315049 0.077705 
+0.565299 -0.824309 -0.030857 0.454554 -0.884754 -0.102916 0.394021 -0.908823 -0.137072 
+0.565299 -0.824309 -0.030857 0.394021 -0.908823 -0.137072 0.564781 -0.825095 -0.015541 
+0.945889 0.315049 0.077705 0.518352 0.809628 0.275342 0.59067 0.799484 0.109244 
+0.945889 0.315049 0.077705 0.59067 0.799484 0.109244 0.917765 0.356117 -0.175748 
+0.465009 -0.865356 -0.186883 0.195264 -0.964933 -0.175434 0.219714 -0.969825 -0.105666 
+0.465009 -0.865356 -0.186883 0.219714 -0.969825 -0.105666 0.454554 -0.884754 -0.102916 
+0.945889 0.315049 0.077705 0.95337 -0.301579 0.011657 0.967108 -0.223659 0.121157 
+0.945889 0.315049 0.077705 0.967108 -0.223659 0.121157 0.882586 0.426513 0.197806 
+0.95337 -0.301579 0.011657 0.565299 -0.824309 -0.030857 0.564781 -0.825095 -0.015541 
+0.95337 -0.301579 0.011657 0.564781 -0.825095 -0.015541 0.967108 -0.223659 0.121157 
+0.882586 0.426513 0.197806 0.922324 0.373675 0.098414 0.234589 0.963245 0.130868 
+0.882586 0.426513 0.197806 0.234589 0.963245 0.130868 0.265383 0.876908 0.400755 
+0.663647 -0.734775 -0.140277 0.465009 -0.865356 -0.186883 0.454554 -0.884754 -0.102916 
+0.663647 -0.734775 -0.140277 0.454554 -0.884754 -0.102916 0.565299 -0.824309 -0.030857 
+0.454554 -0.884754 -0.102916 0.219714 -0.969825 -0.105666 0.266644 -0.941747 -0.204975 
+0.454554 -0.884754 -0.102916 0.266644 -0.941747 -0.204975 0.394021 -0.908823 -0.137072 
+0.512989 -0.849734 0.121633 0.204626 -0.960886 -0.18662 0.012129 -0.997835 0.064639 
+0.512989 -0.849734 0.121633 0.012129 -0.997835 0.064639 0.671426 -0.724316 0.156694 
+0.295024 -0.352926 0.887921 0.127543 -0.760503 0.636685 0.179506 -0.821589 0.541082 
+0.295024 -0.352926 0.887921 0.179506 -0.821589 0.541082 0.419051 -0.224101 0.879872 
+0.394249 0.365932 0.843008 0.295024 -0.352926 0.887921 0.419051 -0.224101 0.879872 
+0.394249 0.365932 0.843008 0.419051 -0.224101 0.879872 0.472541 0.509098 0.719392 
+0.677456 0.636835 0.368096 0.028296 0.910392 -0.412779 0.258314 0.911365 0.320449 
+0.677456 0.636835 0.368096 0.258314 0.911365 0.320449 0.472541 0.509098 0.719392 
+0.127543 -0.760503 0.636685 0.281096 -0.820445 0.49785 0.339863 -0.884652 0.319193 
+0.127543 -0.760503 0.636685 0.339863 -0.884652 0.319193 0.179506 -0.821589 0.541082 
+0.780966 -0.614563 -0.111376 -0.02457 -0.966561 -0.255255 0.339863 -0.884652 0.319193 
+0.780966 -0.614563 -0.111376 0.339863 -0.884652 0.319193 0.407061 -0.872295 0.270931 
+0.372004 -0.923628 0.09233 0.407061 -0.872295 0.270931 0.215455 -0.890885 0.39988 
+0.372004 -0.923628 0.09233 0.215455 -0.890885 0.39988 0.119769 -0.979393 0.162618 
+0.346205 0.845486 -0.406566 0.879748 0.197412 -0.432518 0.90969 0.204323 -0.361546 
+0.346205 0.845486 -0.406566 0.90969 0.204323 -0.361546 0.21042 0.815506 -0.539142 
+0.175241 0.881339 0.438785 0.291412 0.765834 0.573217 0.258314 0.911365 0.320449 
+0.175241 0.881339 0.438785 0.258314 0.911365 0.320449 0.236676 0.971339 0.022036 
+0.75127 0.643251 -0.147721 0.076926 0.996795 0.021977 0.111679 0.98828 0.104071 
+0.75127 0.643251 -0.147721 0.111679 0.98828 0.104071 0.236676 0.971339 0.022036 
+-5e-06 0.944139 -0.329548 0.346205 0.845486 -0.406566 0.21042 0.815506 -0.539142 
+-5e-06 0.944139 -0.329548 0.21042 0.815506 -0.539142 -6e-06 0.835316 -0.54977 
+0.370478 -0.916542 -0.150655 0.372004 -0.923628 0.09233 0.119769 -0.979393 0.162618 
+0.370478 -0.916542 -0.150655 0.119769 -0.979393 0.162618 0.116223 -0.986891 -0.111977 
+0.372004 -0.923628 0.09233 0.370478 -0.916542 -0.150655 0.605549 -0.752463 -0.259055 
+0.372004 -0.923628 0.09233 0.605549 -0.752463 -0.259055 0.694409 -0.692344 -0.196103 
+0.465009 -0.865356 -0.186883 0.663647 -0.734775 -0.140277 0.605549 -0.752463 -0.259055 
+0.465009 -0.865356 -0.186883 0.605549 -0.752463 -0.259055 0.370478 -0.916542 -0.150655 
+0.281096 -0.820445 0.49785 0.242985 -0.739194 0.628133 0.169275 -0.823659 0.541231 
+0.281096 -0.820445 0.49785 0.169275 -0.823659 0.541231 0.215455 -0.890885 0.39988 
+0.215455 -0.890885 0.39988 0.169275 -0.823659 0.541231 6e-06 -0.884931 0.465723 
+0.215455 -0.890885 0.39988 6e-06 -0.884931 0.465723 6e-06 -0.894018 0.448032 
+0.90969 0.204323 -0.361546 0.879748 0.197412 -0.432518 0.927168 -0.178767 -0.329243 
+0.90969 0.204323 -0.361546 0.927168 -0.178767 -0.329243 0.887785 -0.387035 -0.249083 
+0.694409 -0.692344 -0.196103 0.605549 -0.752463 -0.259055 0.887785 -0.387035 -0.249083 
+0.694409 -0.692344 -0.196103 0.887785 -0.387035 -0.249083 0.927168 -0.178767 -0.329243 
+-0.731135 -0.346337 -0.587786 -0.6424 0.428523 -0.635366 0.028596 0.513713 -0.857485 
+-0.731135 -0.346337 -0.587786 0.028596 0.513713 -0.857485 -0.638643 -0.082252 -0.765095 
+0.793166 0.604024 -0.077734 0.028596 0.513713 -0.857485 -0.6424 0.428523 -0.635366 
+0.793166 0.604024 -0.077734 -0.6424 0.428523 -0.635366 0.519886 0.85059 0.078831 
+-0.76488 -0.635839 -0.103284 -0.031711 -0.994445 -0.100363 -0.731135 -0.346337 -0.587786 
+-0.76488 -0.635839 -0.103284 -0.731135 -0.346337 -0.587786 -0.638643 -0.082252 -0.765095 
+0.476797 -0.879003 0.004283 -0.288875 -0.951245 -0.108093 -0.278427 -0.946176 -0.165014 
+0.476797 -0.879003 0.004283 -0.278427 -0.946176 -0.165014 0.716964 -0.696477 -0.029713 
+0.984177 -0.16281 0.069912 0.476797 -0.879003 0.004283 0.716964 -0.696477 -0.029713 
+0.984177 -0.16281 0.069912 0.716964 -0.696477 -0.029713 0.981612 -0.188144 0.03224 
+0.269579 0.961037 -0.061117 0.856101 0.507391 0.098213 0.890974 0.450664 0.055382 
+0.269579 0.961037 -0.061117 0.890974 0.450664 0.055382 0.374731 0.926856 0.022695 
+0.967108 -0.223659 0.121157 0.564781 -0.825095 -0.015541 0.512989 -0.849734 0.121633 
+0.967108 -0.223659 0.121157 0.512989 -0.849734 0.121633 0.971816 -0.145411 0.185551 
+0.984177 -0.16281 0.069912 0.981612 -0.188144 0.03224 0.890974 0.450664 0.055382 
+0.984177 -0.16281 0.069912 0.890974 0.450664 0.055382 0.856101 0.507391 0.098213 
+0.882586 0.426513 0.197806 0.967108 -0.223659 0.121157 0.971816 -0.145411 0.185551 
+0.882586 0.426513 0.197806 0.971816 -0.145411 0.185551 0.922324 0.373675 0.098414 
+-0.92777 0.321978 -0.188609 -0.544673 0.80871 -0.22208 -0.512433 0.840994 -0.173613 
+-0.92777 0.321978 -0.188609 -0.512433 0.840994 -0.173613 -0.89925 0.375143 -0.224982 
+0.269579 0.961037 -0.061117 0.374731 0.926856 0.022695 -0.512433 0.840994 -0.173613 
+0.269579 0.961037 -0.061117 -0.512433 0.840994 -0.173613 -0.544673 0.80871 -0.22208 
+-0.92777 0.321978 -0.188609 -0.981974 0.119821 -0.146185 -0.661564 0.720079 -0.209332 
+-0.92777 0.321978 -0.188609 -0.661564 0.720079 -0.209332 -0.544673 0.80871 -0.22208 
+-0.278427 -0.946176 -0.165014 -0.288875 -0.951245 -0.108093 -0.762388 -0.609666 -0.216963 
+-0.278427 -0.946176 -0.165014 -0.762388 -0.609666 -0.216963 -0.813106 -0.511343 -0.278185 
+0.148471 0.980497 -0.128767 0.269579 0.961037 -0.061117 -0.544673 0.80871 -0.22208 
+0.148471 0.980497 -0.128767 -0.544673 0.80871 -0.22208 -0.661564 0.720079 -0.209332 
+0.841349 0.533265 0.088092 0.856101 0.507391 0.098213 0.269579 0.961037 -0.061117 
+0.841349 0.533265 0.088092 0.269579 0.961037 -0.061117 0.148471 0.980497 -0.128767 
+-0.76488 -0.635839 -0.103284 -0.638643 -0.082252 -0.765095 -0.56871 0.040232 -0.821553 
+-0.76488 -0.635839 -0.103284 -0.56871 0.040232 -0.821553 -0.867674 -0.490294 -0.082183 
+0.028596 0.513713 -0.857485 0.421129 0.684384 -0.595205 -0.56871 0.040232 -0.821553 
+0.028596 0.513713 -0.857485 -0.56871 0.040232 -0.821553 -0.638643 -0.082252 -0.765095 
+0.827407 0.559339 -0.050371 0.421129 0.684384 -0.595205 0.028596 0.513713 -0.857485 
+0.827407 0.559339 -0.050371 0.028596 0.513713 -0.857485 0.793166 0.604024 -0.077734 
+-0.512433 0.840994 -0.173613 0.374731 0.926856 0.022695 0.392847 0.882584 0.258296 
+-0.512433 0.840994 -0.173613 0.392847 0.882584 0.258296 -0.428732 0.898555 0.093742 
+0.716964 -0.696477 -0.029713 -0.278427 -0.946176 -0.165014 -0.37626 -0.915889 -0.139915 
+0.716964 -0.696477 -0.029713 -0.37626 -0.915889 -0.139915 0.475938 -0.878762 -0.035486 
+-0.278427 -0.946176 -0.165014 -0.813106 -0.511343 -0.278185 -0.869601 -0.466555 -0.161621 
+-0.278427 -0.946176 -0.165014 -0.869601 -0.466555 -0.161621 -0.37626 -0.915889 -0.139915 
+0.981612 -0.188144 0.03224 0.716964 -0.696477 -0.029713 0.475938 -0.878762 -0.035486 
+0.981612 -0.188144 0.03224 0.475938 -0.878762 -0.035486 0.934609 -0.322749 0.149462 
+0.890974 0.450664 0.055382 0.981612 -0.188144 0.03224 0.934609 -0.322749 0.149462 
+0.890974 0.450664 0.055382 0.934609 -0.322749 0.149462 0.929055 0.254252 0.268726 
+-0.89925 0.375143 -0.224982 -0.512433 0.840994 -0.173613 -0.428732 0.898555 0.093742 
+-0.89925 0.375143 -0.224982 -0.428732 0.898555 0.093742 -0.903146 0.4262 -0.051773 
+0.374731 0.926856 0.022695 0.890974 0.450664 0.055382 0.929055 0.254252 0.268726 
+0.374731 0.926856 0.022695 0.929055 0.254252 0.268726 0.392847 0.882584 0.258296 
+0.929055 0.254252 0.268726 0.934609 -0.322749 0.149462 0.898845 -0.434221 0.059404 
+0.929055 0.254252 0.268726 0.898845 -0.434221 0.059404 0.984006 0.169276 0.05547 
+0.934609 -0.322749 0.149462 0.475938 -0.878762 -0.035486 0.296446 -0.955037 -0.004981 
+0.934609 -0.322749 0.149462 0.296446 -0.955037 -0.004981 0.898845 -0.434221 0.059404 
+0.392847 0.882584 0.258296 0.929055 0.254252 0.268726 0.984006 0.169276 0.05547 
+0.392847 0.882584 0.258296 0.984006 0.169276 0.05547 0.508224 0.861206 -0.00574 
+-0.903146 0.4262 -0.051773 -0.428732 0.898555 0.093742 -0.474665 0.878916 -0.046911 
+-0.903146 0.4262 -0.051773 -0.474665 0.878916 -0.046911 -0.923373 0.358922 -0.136226 
+-0.428732 0.898555 0.093742 0.392847 0.882584 0.258296 0.508224 0.861206 -0.00574 
+-0.428732 0.898555 0.093742 0.508224 0.861206 -0.00574 -0.474665 0.878916 -0.046911 
+-0.37626 -0.915889 -0.139915 -0.869601 -0.466555 -0.161621 -0.877916 -0.448198 -0.168471 
+-0.37626 -0.915889 -0.139915 -0.877916 -0.448198 -0.168471 -0.452025 -0.883904 -0.119948 
+0.475938 -0.878762 -0.035486 -0.37626 -0.915889 -0.139915 -0.452025 -0.883904 -0.119948 
+0.475938 -0.878762 -0.035486 -0.452025 -0.883904 -0.119948 0.296446 -0.955037 -0.004981 
+0.898845 -0.434221 0.059404 0.296446 -0.955037 -0.004981 0.568793 -0.821784 0.033839 
+0.898845 -0.434221 0.059404 0.568793 -0.821784 0.033839 0.962742 -0.270384 -0.004472 
+0.508224 0.861206 -0.00574 0.984006 0.169276 0.05547 0.89975 0.42261 -0.108858 
+0.508224 0.861206 -0.00574 0.89975 0.42261 -0.108858 0.377955 0.915407 -0.138491 
+-0.923373 0.358922 -0.136226 -0.474665 0.878916 -0.046911 -0.730183 0.658199 -0.18332 
+-0.923373 0.358922 -0.136226 -0.730183 0.658199 -0.18332 -0.976457 0.053591 -0.20895 
+-0.474665 0.878916 -0.046911 0.508224 0.861206 -0.00574 0.377955 0.915407 -0.138491 
+-0.474665 0.878916 -0.046911 0.377955 0.915407 -0.138491 -0.730183 0.658199 -0.18332 
+-0.452025 -0.883904 -0.119948 -0.877916 -0.448198 -0.168471 -0.897898 -0.422582 -0.123306 
+-0.452025 -0.883904 -0.119948 -0.897898 -0.422582 -0.123306 -0.427075 -0.904047 -0.017497 
+0.296446 -0.955037 -0.004981 -0.452025 -0.883904 -0.119948 -0.427075 -0.904047 -0.017497 
+0.296446 -0.955037 -0.004981 -0.427075 -0.904047 -0.017497 0.568793 -0.821784 0.033839 
+0.984006 0.169276 0.05547 0.898845 -0.434221 0.059404 0.962742 -0.270384 -0.004472 
+0.984006 0.169276 0.05547 0.962742 -0.270384 -0.004472 0.89975 0.42261 -0.108858 
+0.108291 -0.492362 0.863628 -0.867674 -0.490294 -0.082183 -0.969272 0.237654 0.063494 
+0.108291 -0.492362 0.863628 -0.969272 0.237654 0.063494 -0.13011 -0.51674 0.846198 
+0.069135 -0.560452 0.825296 -0.966787 0.220528 0.129192 -0.902501 -0.207783 0.377251 
+0.069135 -0.560452 0.825296 -0.902501 -0.207783 0.377251 0.24809 -0.807015 0.53589 
+0.24809 -0.807015 0.53589 -0.902501 -0.207783 0.377251 -0.25499 0.23052 -0.939064 
+0.24809 -0.807015 0.53589 -0.25499 0.23052 -0.939064 0.558792 -0.031092 -0.828725 
+0.833746 -0.294651 -0.466956 -0.311289 0.430839 -0.84704 -0.509726 0.174338 -0.842488 
+0.833746 -0.294651 -0.466956 -0.509726 0.174338 -0.842488 -0.418051 -0.757797 -0.500977 
+0.069135 -0.560452 0.825296 0.833746 -0.294651 -0.466956 -0.418051 -0.757797 -0.500977 
+0.069135 -0.560452 0.825296 -0.418051 -0.757797 -0.500977 -0.13011 -0.51674 0.846198 
+-0.966787 0.220528 0.129192 -0.311289 0.430839 -0.84704 -0.25499 0.23052 -0.939064 
+-0.966787 0.220528 0.129192 -0.25499 0.23052 -0.939064 -0.902501 -0.207783 0.377251 
+-0.13011 -0.51674 0.846198 -0.969272 0.237654 0.063494 -0.966787 0.220528 0.129192 
+-0.13011 -0.51674 0.846198 -0.966787 0.220528 0.129192 0.069135 -0.560452 0.825296 
+0.558792 -0.031092 -0.828725 -0.25499 0.23052 -0.939064 -0.311289 0.430839 -0.84704 
+0.558792 -0.031092 -0.828725 -0.311289 0.430839 -0.84704 0.833746 -0.294651 -0.466956 
+0.24809 -0.807015 0.53589 0.558792 -0.031092 -0.828725 0.833746 -0.294651 -0.466956 
+0.24809 -0.807015 0.53589 0.833746 -0.294651 -0.466956 0.069135 -0.560452 0.825296 
+-0.969272 0.237654 0.063494 -0.509726 0.174338 -0.842488 -0.311289 0.430839 -0.84704 
+-0.969272 0.237654 0.063494 -0.311289 0.430839 -0.84704 -0.966787 0.220528 0.129192 
+-0.13011 -0.51674 0.846198 -0.418051 -0.757797 -0.500977 0.464088 -0.499495 0.731524 
+-0.13011 -0.51674 0.846198 0.464088 -0.499495 0.731524 0.417763 -0.371279 0.829232 
+0.843029 -0.087191 0.530754 0.827407 0.559339 -0.050371 0.857388 0.156702 0.490235 
+0.843029 -0.087191 0.530754 0.857388 0.156702 0.490235 0.417763 -0.371279 0.829232 
+0.108291 -0.492362 0.863628 -0.13011 -0.51674 0.846198 0.417763 -0.371279 0.829232 
+0.108291 -0.492362 0.863628 0.417763 -0.371279 0.829232 0.857388 0.156702 0.490235 
+-0.867674 -0.490294 -0.082183 -0.700419 0.120906 -0.703416 -0.509726 0.174338 -0.842488 
+-0.867674 -0.490294 -0.082183 -0.509726 0.174338 -0.842488 -0.969272 0.237654 0.063494 
+0.827407 0.559339 -0.050371 0.843029 -0.087191 0.530754 0.845132 0.532418 -0.047769 
+0.827407 0.559339 -0.050371 0.845132 0.532418 -0.047769 0.421129 0.684384 -0.595205 
+0.845132 0.532418 -0.047769 0.843029 -0.087191 0.530754 0.89459 -0.040219 0.445075 
+0.845132 0.532418 -0.047769 0.89459 -0.040219 0.445075 0.875772 0.481096 0.039634 
+-0.343533 0.621173 -0.704364 -0.56871 0.040232 -0.821553 0.421129 0.684384 -0.595205 
+-0.343533 0.621173 -0.704364 0.421129 0.684384 -0.595205 0.845132 0.532418 -0.047769 
+-0.343533 0.621173 -0.704364 0.845132 0.532418 -0.047769 0.875772 0.481096 0.039634 
+-0.343533 0.621173 -0.704364 0.875772 0.481096 0.039634 -0.577091 0.158508 -0.80115 
+-0.700419 0.120906 -0.703416 -0.867674 -0.490294 -0.082183 -0.56871 0.040232 -0.821553 
+-0.700419 0.120906 -0.703416 -0.56871 0.040232 -0.821553 -0.343533 0.621173 -0.704364 
+-0.700419 0.120906 -0.703416 -0.343533 0.621173 -0.704364 -0.577091 0.158508 -0.80115 
+-0.700419 0.120906 -0.703416 -0.577091 0.158508 -0.80115 -0.661449 -0.017614 -0.749783 
+-0.661449 -0.017614 -0.749783 -0.418051 -0.757797 -0.500977 -0.509726 0.174338 -0.842488 
+-0.661449 -0.017614 -0.749783 -0.509726 0.174338 -0.842488 -0.700419 0.120906 -0.703416 
+-0.661449 -0.017614 -0.749783 -0.577091 0.158508 -0.80115 -0.677252 0.361261 -0.640953 
+-0.661449 -0.017614 -0.749783 -0.677252 0.361261 -0.640953 -0.822824 0.071194 -0.563819 
+0.875772 0.481096 0.039634 0.89459 -0.040219 0.445075 0.904829 -0.056383 0.422025 
+0.875772 0.481096 0.039634 0.904829 -0.056383 0.422025 0.925527 0.342816 0.160864 
+0.570279 -0.400929 0.716965 0.597799 -0.526006 0.604941 0.87272 -0.216078 0.437801 
+0.570279 -0.400929 0.716965 0.87272 -0.216078 0.437801 0.904829 -0.056383 0.422025 
+-0.577091 0.158508 -0.80115 0.875772 0.481096 0.039634 0.925527 0.342816 0.160864 
+-0.577091 0.158508 -0.80115 0.925527 0.342816 0.160864 -0.677252 0.361261 -0.640953 
+0.464088 -0.499495 0.731524 -0.418051 -0.757797 -0.500977 -0.922649 -0.225381 -0.312925 
+0.464088 -0.499495 0.731524 -0.922649 -0.225381 -0.312925 0.570279 -0.400929 0.716965 
+-0.418051 -0.757797 -0.500977 -0.661449 -0.017614 -0.749783 -0.822824 0.071194 -0.563819 
+-0.418051 -0.757797 -0.500977 -0.822824 0.071194 -0.563819 -0.922649 -0.225381 -0.312925 
+-0.677252 0.361261 -0.640953 0.925527 0.342816 0.160864 0.974591 0.144613 0.171053 
+-0.677252 0.361261 -0.640953 0.974591 0.144613 0.171053 -0.774826 0.151054 -0.613862 
+0.89459 -0.040219 0.445075 0.464088 -0.499495 0.731524 0.570279 -0.400929 0.716965 
+0.89459 -0.040219 0.445075 0.570279 -0.400929 0.716965 0.904829 -0.056383 0.422025 
+-0.922649 -0.225381 -0.312925 -0.822824 0.071194 -0.563819 -0.842138 0.125475 -0.524461 
+-0.922649 -0.225381 -0.312925 -0.842138 0.125475 -0.524461 -0.93595 0.128227 -0.327956 
+0.570279 -0.400929 0.716965 -0.922649 -0.225381 -0.312925 -0.93595 0.128227 -0.327956 
+0.570279 -0.400929 0.716965 -0.93595 0.128227 -0.327956 0.597799 -0.526006 0.604941 
+-0.822824 0.071194 -0.563819 -0.677252 0.361261 -0.640953 -0.774826 0.151054 -0.613862 
+-0.822824 0.071194 -0.563819 -0.774826 0.151054 -0.613862 -0.842138 0.125475 -0.524461 
+-0.842138 0.125475 -0.524461 -0.774826 0.151054 -0.613862 -0.735636 0.048424 -0.675644 
+-0.842138 0.125475 -0.524461 -0.735636 0.048424 -0.675644 -0.771252 0.189254 -0.607744 
+-0.774826 0.151054 -0.613862 0.974591 0.144613 0.171053 0.988617 -0.070768 0.132775 
+-0.774826 0.151054 -0.613862 0.988617 -0.070768 0.132775 -0.735636 0.048424 -0.675644 
+0.843029 -0.087191 0.530754 0.417763 -0.371279 0.829232 0.464088 -0.499495 0.731524 
+0.843029 -0.087191 0.530754 0.464088 -0.499495 0.731524 0.89459 -0.040219 0.445075 
+-0.93595 0.128227 -0.327956 -0.842138 0.125475 -0.524461 -0.771252 0.189254 -0.607744 
+-0.93595 0.128227 -0.327956 -0.771252 0.189254 -0.607744 -0.849823 -0.255516 -0.460991 
+0.597799 -0.526006 0.604941 -0.93595 0.128227 -0.327956 -0.849823 -0.255516 -0.460991 
+0.597799 -0.526006 0.604941 -0.849823 -0.255516 -0.460991 0.635311 -0.64584 0.423403 
+0.800971 -0.561158 0.20868 -0.771252 0.189254 -0.607744 -0.735636 0.048424 -0.675644 
+0.800971 -0.561158 0.20868 -0.735636 0.048424 -0.675644 0.988617 -0.070768 0.132775 
+-0.849823 -0.255516 -0.460991 -0.771252 0.189254 -0.607744 0.800971 -0.561158 0.20868 
+-0.849823 -0.255516 -0.460991 0.800971 -0.561158 0.20868 0.635311 -0.64584 0.423403 
+0.904829 -0.056383 0.422025 0.87272 -0.216078 0.437801 0.974591 0.144613 0.171053 
+0.904829 -0.056383 0.422025 0.974591 0.144613 0.171053 0.925527 0.342816 0.160864 
+0.87272 -0.216078 0.437801 0.800971 -0.561158 0.20868 0.988617 -0.070768 0.132775 
+0.87272 -0.216078 0.437801 0.988617 -0.070768 0.132775 0.974591 0.144613 0.171053 
+0.597799 -0.526006 0.604941 0.635311 -0.64584 0.423403 0.800971 -0.561158 0.20868 
+0.597799 -0.526006 0.604941 0.800971 -0.561158 0.20868 0.87272 -0.216078 0.437801 
+0.568793 -0.821784 0.033839 -0.427075 -0.904047 -0.017497 -0.882881 -0.362157 0.298938 
+0.568793 -0.821784 0.033839 -0.882881 -0.362157 0.298938 0.483451 -0.636013 0.601467 
+0.962742 -0.270384 -0.004472 0.568793 -0.821784 0.033839 0.483451 -0.636013 0.601467 
+0.962742 -0.270384 -0.004472 0.483451 -0.636013 0.601467 0.930188 -0.164462 0.328182 
+0.483451 -0.636013 0.601467 -0.882881 -0.362157 0.298938 -0.78021 -0.187851 0.596644 
+0.483451 -0.636013 0.601467 -0.78021 -0.187851 0.596644 0.302385 -0.439488 0.845822 
+0.930188 -0.164462 0.328182 0.483451 -0.636013 0.601467 0.302385 -0.439488 0.845822 
+0.930188 -0.164462 0.328182 0.302385 -0.439488 0.845822 0.959251 -0.048491 0.278362 
+0.302385 -0.439488 0.845822 -0.78021 -0.187851 0.596644 -0.579656 -0.199 0.790189 
+0.302385 -0.439488 0.845822 -0.579656 -0.199 0.790189 0.325713 -0.303351 0.895483 
+0.959251 -0.048491 0.278362 0.302385 -0.439488 0.845822 0.325713 -0.303351 0.895483 
+0.959251 -0.048491 0.278362 0.325713 -0.303351 0.895483 0.686398 -0.113075 0.718381 
+0.325713 -0.303351 0.895483 -0.579656 -0.199 0.790189 -0.513041 -0.358823 0.779766 
+0.325713 -0.303351 0.895483 -0.513041 -0.358823 0.779766 0.309049 -0.419318 0.853616 
+0.686398 -0.113075 0.718381 0.325713 -0.303351 0.895483 0.309049 -0.419318 0.853616 
+0.686398 -0.113075 0.718381 0.309049 -0.419318 0.853616 0.599245 -0.406633 0.689604 
+-0.730183 0.658199 -0.18332 0.377955 0.915407 -0.138491 0.599801 0.785307 0.153402 
+-0.730183 0.658199 -0.18332 0.599801 0.785307 0.153402 -0.784491 0.613356 0.091478 
+-0.976457 0.053591 -0.20895 -0.730183 0.658199 -0.18332 -0.784491 0.613356 0.091478 
+-0.976457 0.053591 -0.20895 -0.784491 0.613356 0.091478 -0.988881 0.144432 0.035418 
+0.377955 0.915407 -0.138491 0.89975 0.42261 -0.108858 0.943697 0.318981 0.087677 
+0.377955 0.915407 -0.138491 0.943697 0.318981 0.087677 0.599801 0.785307 0.153402 
+0.962742 -0.270384 -0.004472 0.930188 -0.164462 0.328182 0.943697 0.318981 0.087677 
+0.962742 -0.270384 -0.004472 0.943697 0.318981 0.087677 0.89975 0.42261 -0.108858 
+-0.882881 -0.362157 0.298938 -0.427075 -0.904047 -0.017497 -0.897898 -0.422582 -0.123306 
+-0.882881 -0.362157 0.298938 -0.897898 -0.422582 -0.123306 -0.997769 -0.066749 -0.001 
+0.599801 0.785307 0.153402 0.943697 0.318981 0.087677 0.920431 0.332645 -0.205312 
+0.599801 0.785307 0.153402 0.920431 0.332645 -0.205312 0.423244 0.841273 -0.33634 
+-0.988881 0.144432 0.035418 -0.784491 0.613356 0.091478 -0.820434 0.53331 -0.206081 
+-0.988881 0.144432 0.035418 -0.820434 0.53331 -0.206081 -0.977144 0.082624 -0.195863 
+-0.784491 0.613356 0.091478 0.599801 0.785307 0.153402 0.423244 0.841273 -0.33634 
+-0.784491 0.613356 0.091478 0.423244 0.841273 -0.33634 -0.820434 0.53331 -0.206081 
+0.959251 -0.048491 0.278362 0.920431 0.332645 -0.205312 0.943697 0.318981 0.087677 
+0.959251 -0.048491 0.278362 0.943697 0.318981 0.087677 0.930188 -0.164462 0.328182 
+-0.882881 -0.362157 0.298938 -0.997769 -0.066749 -0.001 -0.999232 0.001706 -0.039159 
+-0.882881 -0.362157 0.298938 -0.999232 0.001706 -0.039159 -0.78021 -0.187851 0.596644 
+-0.820434 0.53331 -0.206081 0.423244 0.841273 -0.33634 0.178823 0.264017 -0.947796 
+-0.820434 0.53331 -0.206081 0.178823 0.264017 -0.947796 -0.551395 0.271189 -0.788936 
+-0.513041 -0.358823 0.779766 -0.579656 -0.199 0.790189 -0.328082 0.220029 -0.918667 
+-0.513041 -0.358823 0.779766 -0.328082 0.220029 -0.918667 -0.489731 -0.453661 -0.744551 
+0.920431 0.332645 -0.205312 0.959251 -0.048491 0.278362 0.413252 0.051756 -0.909145 
+0.920431 0.332645 -0.205312 0.413252 0.051756 -0.909145 0.399667 0.1154 -0.909367 
+0.423244 0.841273 -0.33634 0.920431 0.332645 -0.205312 0.399667 0.1154 -0.909367 
+0.423244 0.841273 -0.33634 0.399667 0.1154 -0.909367 0.178823 0.264017 -0.947796 
+-0.579656 -0.199 0.790189 -0.78021 -0.187851 0.596644 -0.436229 0.100588 -0.894196 
+-0.579656 -0.199 0.790189 -0.436229 0.100588 -0.894196 -0.328082 0.220029 -0.918667 
+-0.78021 -0.187851 0.596644 -0.999232 0.001706 -0.039159 -0.422023 -0.124107 -0.89805 
+-0.78021 -0.187851 0.596644 -0.422023 -0.124107 -0.89805 -0.436229 0.100588 -0.894196 
+-0.977144 0.082624 -0.195863 -0.820434 0.53331 -0.206081 -0.551395 0.271189 -0.788936 
+-0.977144 0.082624 -0.195863 -0.551395 0.271189 -0.788936 -0.152426 -0.106299 -0.982582 
+0.686398 -0.113075 0.718381 0.599245 -0.406633 0.689604 0.047062 0.124248 -0.991134 
+0.686398 -0.113075 0.718381 0.047062 0.124248 -0.991134 -0.054895 -0.014078 -0.998393 
+0.959251 -0.048491 0.278362 0.686398 -0.113075 0.718381 -0.054895 -0.014078 -0.998393 
+0.959251 -0.048491 0.278362 -0.054895 -0.014078 -0.998393 0.413252 0.051756 -0.909145 
+0.599245 -0.406633 0.689604 0.309049 -0.419318 0.853616 0.161355 -0.257913 -0.952599 
+0.599245 -0.406633 0.689604 0.161355 -0.257913 -0.952599 0.047062 0.124248 -0.991134 
+0.309049 -0.419318 0.853616 -0.513041 -0.358823 0.779766 -0.489731 -0.453661 -0.744551 
+0.309049 -0.419318 0.853616 -0.489731 -0.453661 -0.744551 0.161355 -0.257913 -0.952599 
+0.161355 -0.257913 -0.952599 -0.489731 -0.453661 -0.744551 -0.328082 0.220029 -0.918667 
+0.161355 -0.257913 -0.952599 -0.328082 0.220029 -0.918667 0.047062 0.124248 -0.991134 
+-0.436229 0.100588 -0.894196 -0.054895 -0.014078 -0.998393 0.047062 0.124248 -0.991134 
+-0.436229 0.100588 -0.894196 0.047062 0.124248 -0.991134 -0.328082 0.220029 -0.918667 
+-0.054895 -0.014078 -0.998393 -0.436229 0.100588 -0.894196 -0.422023 -0.124107 -0.89805 
+-0.054895 -0.014078 -0.998393 -0.422023 -0.124107 -0.89805 0.413252 0.051756 -0.909145 
+0.564781 -0.825095 -0.015541 0.394021 -0.908823 -0.137072 0.204626 -0.960886 -0.18662 
+0.564781 -0.825095 -0.015541 0.204626 -0.960886 -0.18662 0.512989 -0.849734 0.121633 
+0.98034 0.085999 0.177587 0.984177 -0.16281 0.069912 0.856101 0.507391 0.098213 
+0.98034 0.085999 0.177587 0.856101 0.507391 0.098213 0.841349 0.533265 0.088092 
+-0.762388 -0.609666 -0.216963 -0.92777 0.321978 -0.188609 -0.89925 0.375143 -0.224982 
+-0.762388 -0.609666 -0.216963 -0.89925 0.375143 -0.224982 -0.813106 -0.511343 -0.278185 
+0.671426 -0.724316 0.156694 0.476797 -0.879003 0.004283 0.984177 -0.16281 0.069912 
+0.671426 -0.724316 0.156694 0.984177 -0.16281 0.069912 0.98034 0.085999 0.177587 
+-0.813106 -0.511343 -0.278185 -0.89925 0.375143 -0.224982 -0.903146 0.4262 -0.051773 
+-0.813106 -0.511343 -0.278185 -0.903146 0.4262 -0.051773 -0.869601 -0.466555 -0.161621 
+-0.869601 -0.466555 -0.161621 -0.903146 0.4262 -0.051773 -0.923373 0.358922 -0.136226 
+-0.869601 -0.466555 -0.161621 -0.923373 0.358922 -0.136226 -0.877916 -0.448198 -0.168471 
+-0.877916 -0.448198 -0.168471 -0.923373 0.358922 -0.136226 -0.976457 0.053591 -0.20895 
+-0.877916 -0.448198 -0.168471 -0.976457 0.053591 -0.20895 -0.897898 -0.422582 -0.123306 
+-0.897898 -0.422582 -0.123306 -0.976457 0.053591 -0.20895 -0.988881 0.144432 0.035418 
+-0.897898 -0.422582 -0.123306 -0.988881 0.144432 0.035418 -0.997769 -0.066749 -0.001 
+-0.997769 -0.066749 -0.001 -0.988881 0.144432 0.035418 -0.977144 0.082624 -0.195863 
+-0.997769 -0.066749 -0.001 -0.977144 0.082624 -0.195863 -0.999232 0.001706 -0.039159 
+-0.999232 0.001706 -0.039159 -0.977144 0.082624 -0.195863 -0.152426 -0.106299 -0.982582 
+-0.999232 0.001706 -0.039159 -0.152426 -0.106299 -0.982582 -0.422023 -0.124107 -0.89805 
+-0.152426 -0.106299 -0.982582 0.399667 0.1154 -0.909367 0.413252 0.051756 -0.909145 
+-0.152426 -0.106299 -0.982582 0.413252 0.051756 -0.909145 -0.422023 -0.124107 -0.89805 
+0.178823 0.264017 -0.947796 0.399667 0.1154 -0.909367 -0.152426 -0.106299 -0.982582 
+0.178823 0.264017 -0.947796 -0.152426 -0.106299 -0.982582 -0.551395 0.271189 -0.788936 
+0.467776 -0.872239 0.142777 0.076001 -0.205769 0.975645 0.257494 -0.492349 0.831438 
+0.467776 -0.872239 0.142777 0.257494 -0.492349 0.831438 0.474078 -0.87185 -0.122997 
+0.545411 -0.77524 -0.318636 0.170419 -0.401743 -0.899755 0.124013 -0.425124 -0.896599 
+0.545411 -0.77524 -0.318636 0.124013 -0.425124 -0.896599 0.575754 -0.783717 -0.233011 
+0.575754 -0.783717 -0.233011 0.124013 -0.425124 -0.896599 0.076001 -0.205769 0.975645 
+0.575754 -0.783717 -0.233011 0.076001 -0.205769 0.975645 0.467776 -0.872239 0.142777 
+0.406482 -0.846534 -0.343734 0.165096 -0.374835 -0.912273 0.170419 -0.401743 -0.899755 
+0.406482 -0.846534 -0.343734 0.170419 -0.401743 -0.899755 0.545411 -0.77524 -0.318636 
+0.076001 -0.205769 0.975645 -0.187717 -0.49189 0.850181 -0.015348 0.157274 0.987436 
+0.076001 -0.205769 0.975645 -0.015348 0.157274 0.987436 0.257494 -0.492349 0.831438 
+0.165096 -0.374835 -0.912273 0.141275 0.007086 -0.989945 -0.001337 0.047724 -0.99886 
+0.165096 -0.374835 -0.912273 -0.001337 0.047724 -0.99886 0.170419 -0.401743 -0.899755 
+0.170419 -0.401743 -0.899755 -0.001337 0.047724 -0.99886 -0.297839 -0.060251 -0.952713 
+0.170419 -0.401743 -0.899755 -0.297839 -0.060251 -0.952713 0.124013 -0.425124 -0.896599 
+0.124013 -0.425124 -0.896599 -0.297839 -0.060251 -0.952713 -0.187717 -0.49189 0.850181 
+0.124013 -0.425124 -0.896599 -0.187717 -0.49189 0.850181 0.076001 -0.205769 0.975645 
+0.922324 0.373675 0.098414 0.971816 -0.145411 0.185551 0.98034 0.085999 0.177587 
+0.922324 0.373675 0.098414 0.98034 0.085999 0.177587 0.841349 0.533265 0.088092 
+0.971816 -0.145411 0.185551 0.512989 -0.849734 0.121633 0.671426 -0.724316 0.156694 
+0.971816 -0.145411 0.185551 0.671426 -0.724316 0.156694 0.98034 0.085999 0.177587 
+0.204626 -0.960886 -0.18662 0.394021 -0.908823 -0.137072 0.266644 -0.941747 -0.204975 
+0.204626 -0.960886 -0.18662 0.266644 -0.941747 -0.204975 0.177657 -0.921486 -0.3454 
+0.234589 0.963245 0.130868 0.922324 0.373675 0.098414 0.841349 0.533265 0.088092 
+0.234589 0.963245 0.130868 0.841349 0.533265 0.088092 0.148471 0.980497 -0.128767 
+-0.334428 0.94242 -0.001663 -0.661564 0.720079 -0.209332 -7e-06 0.700849 -0.713309 
+-0.334428 0.94242 -0.001663 -7e-06 0.700849 -0.713309 -2e-06 0.996084 0.088412 
+0.012129 -0.997835 0.064639 -0.288875 -0.951245 -0.108093 0.476797 -0.879003 0.004283 
+0.012129 -0.997835 0.064639 0.476797 -0.879003 0.004283 0.671426 -0.724316 0.156694 
+0.234589 0.963245 0.130868 0.148471 0.980497 -0.128767 -0.661564 0.720079 -0.209332 
+0.234589 0.963245 0.130868 -0.661564 0.720079 -0.209332 -0.334428 0.94242 -0.001663 
+0.265383 0.876908 0.400755 -0.266017 0.926195 0.267202 -0.113055 0.969376 0.21801 
+0.265383 0.876908 0.400755 -0.113055 0.969376 0.21801 0.518352 0.809628 0.275342 
+-0.563658 -0.809482 -0.164405 -0.981974 0.119821 -0.146185 -0.92777 0.321978 -0.188609 
+-0.563658 -0.809482 -0.164405 -0.92777 0.321978 -0.188609 -0.762388 -0.609666 -0.216963 
+0.204626 -0.960886 -0.18662 0.177657 -0.921486 -0.3454 -0.563658 -0.809482 -0.164405 
+0.204626 -0.960886 -0.18662 -0.563658 -0.809482 -0.164405 0.012129 -0.997835 0.064639 
+-0.563658 -0.809482 -0.164405 0.177657 -0.921486 -0.3454 0.000107 -0.936053 -0.35186 
+-0.563658 -0.809482 -0.164405 0.000107 -0.936053 -0.35186 -4e-06 -0.710532 -0.703665 
+-0.288875 -0.951245 -0.108093 0.012129 -0.997835 0.064639 -0.563658 -0.809482 -0.164405 
+-0.288875 -0.951245 -0.108093 -0.563658 -0.809482 -0.164405 -0.762388 -0.609666 -0.216963 
+0.234589 0.963245 0.130868 -0.334428 0.94242 -0.001663 -0.266017 0.926195 0.267202 
+0.234589 0.963245 0.130868 -0.266017 0.926195 0.267202 0.265383 0.876908 0.400755 
+-0.012274 0.836245 -0.548218 0.152909 0.97193 -0.178804 -3e-06 0.998985 -0.045037 
+-0.012274 0.836245 -0.548218 -3e-06 0.998985 -0.045037 -6e-06 0.866977 -0.498349 
+0.152909 0.97193 -0.178804 -0.113055 0.969376 0.21801 -3e-06 0.99977 -0.021467 
+0.152909 0.97193 -0.178804 -3e-06 0.99977 -0.021467 -3e-06 0.998985 -0.045037 
+0.518352 0.809628 0.275342 -0.113055 0.969376 0.21801 0.152909 0.97193 -0.178804 
+0.518352 0.809628 0.275342 0.152909 0.97193 -0.178804 0.59067 0.799484 0.109244 
+0.917765 0.356117 -0.175748 0.59067 0.799484 0.109244 0.152909 0.97193 -0.178804 
+0.917765 0.356117 -0.175748 0.152909 0.97193 -0.178804 -0.012274 0.836245 -0.548218 
+-0.348869 -0.933084 0.087437 -0.725375 -0.658567 0.200303 -0.38683 -0.855615 -0.343927 
+-0.348869 -0.933084 0.087437 -0.38683 -0.855615 -0.343927 -0.212425 -0.888393 -0.406981 
+-0.348869 -0.933084 0.087437 -0.353862 -0.903989 0.23997 -0.701111 -0.662986 0.262475 
+-0.348869 -0.933084 0.087437 -0.701111 -0.662986 0.262475 -0.725375 -0.658567 0.200303 
+-0.725375 -0.658567 0.200303 -0.953891 -0.298675 0.029764 -0.729905 -0.67038 -0.13353 
+-0.725375 -0.658567 0.200303 -0.729905 -0.67038 -0.13353 -0.38683 -0.855615 -0.343927 
+-0.725375 -0.658567 0.200303 -0.701111 -0.662986 0.262475 -0.965141 -0.21903 0.143278 
+-0.725375 -0.658567 0.200303 -0.965141 -0.21903 0.143278 -0.953891 -0.298675 0.029764 
+-0.965141 -0.21903 0.143278 -0.977064 -0.192318 0.091436 -0.979549 -0.200717 0.013984 
+-0.965141 -0.21903 0.143278 -0.979549 -0.200717 0.013984 -0.953891 -0.298675 0.029764 
+-0.729905 -0.67038 -0.13353 -0.953891 -0.298675 0.029764 -0.979549 -0.200717 0.013984 
+-0.729905 -0.67038 -0.13353 -0.979549 -0.200717 0.013984 -0.911599 -0.38976 -0.130669 
+-0.977064 -0.192318 0.091436 -0.986233 0.049916 0.157648 -0.942021 -0.050149 0.331785 
+-0.977064 -0.192318 0.091436 -0.942021 -0.050149 0.331785 -0.87493 -0.422469 0.236679 
+-0.901647 0.397689 0.169931 -0.942021 -0.050149 0.331785 -0.986233 0.049916 0.157648 
+-0.901647 0.397689 0.169931 -0.986233 0.049916 0.157648 -0.926446 0.36602 0.08791 
+-0.594921 -0.803183 -0.031076 -0.458233 -0.883934 0.093183 -0.352345 -0.93181 -0.087076 
+-0.977064 -0.192318 0.091436 -0.87493 -0.422469 0.236679 -0.954741 -0.284517 -0.086718 
+-0.977064 -0.192318 0.091436 -0.954741 -0.284517 -0.086718 -0.979549 -0.200717 0.013984 
+-0.98928 -0.070009 -0.128154 -0.579145 0.573738 -0.579151 -0.923892 -0.171678 -0.341979 
+-0.98928 -0.070009 -0.128154 -0.923892 -0.171678 -0.341979 -0.954741 -0.284517 -0.086718 
+-0.954741 -0.284517 -0.086718 -0.87493 -0.422469 0.236679 -0.951962 -0.19513 0.235994 
+-0.954741 -0.284517 -0.086718 -0.951962 -0.19513 0.235994 -0.98928 -0.070009 -0.128154 
+-0.73421 0.623776 -0.268029 -0.901647 0.397689 0.169931 -0.926446 0.36602 0.08791 
+-0.73421 0.623776 -0.268029 -0.926446 0.36602 0.08791 -0.876311 0.450641 -0.170301 
+-0.954741 -0.284517 -0.086718 -0.938206 -0.282352 -0.200116 -0.911599 -0.38976 -0.130669 
+-0.954741 -0.284517 -0.086718 -0.911599 -0.38976 -0.130669 -0.979549 -0.200717 0.013984 
+-0.631282 -0.77151 0.079097 -0.504469 -0.862978 0.027931 -0.439158 -0.869495 0.226092 
+-0.631282 -0.77151 0.079097 -0.439158 -0.869495 0.226092 -0.820103 -0.561238 -0.111547 
+-0.504469 -0.862978 0.027931 -0.662771 -0.741415 -0.105062 -0.555391 -0.827908 0.078155 
+-0.504469 -0.862978 0.027931 -0.555391 -0.827908 0.078155 -0.439158 -0.869495 0.226092 
+-0.555391 -0.827908 0.078155 -0.545412 -0.775243 -0.318629 -0.406483 -0.846536 -0.343727 
+-0.555391 -0.827908 0.078155 -0.406483 -0.846536 -0.343727 -0.37351 -0.896312 0.238987 
+-0.888298 -0.378077 -0.260737 -0.822765 -0.539525 -0.178802 -0.938206 -0.282352 -0.200116 
+-0.888298 -0.378077 -0.260737 -0.938206 -0.282352 -0.200116 -0.953699 -0.195075 -0.22892 
+-0.822765 -0.539525 -0.178802 -0.662771 -0.741415 -0.105062 -0.504469 -0.862978 0.027931 
+-0.822765 -0.539525 -0.178802 -0.504469 -0.862978 0.027931 -0.594921 -0.803183 -0.031076 
+-0.911599 -0.38976 -0.130669 -0.938206 -0.282352 -0.200116 -0.822765 -0.539525 -0.178802 
+-0.911599 -0.38976 -0.130669 -0.822765 -0.539525 -0.178802 -0.594921 -0.803183 -0.031076 
+-0.729905 -0.67038 -0.13353 -0.911599 -0.38976 -0.130669 -0.594921 -0.803183 -0.031076 
+-0.954741 -0.284517 -0.086718 -0.923892 -0.171678 -0.341979 -0.953699 -0.195075 -0.22892 
+-0.954741 -0.284517 -0.086718 -0.953699 -0.195075 -0.22892 -0.938206 -0.282352 -0.200116 
+-0.923892 -0.171678 -0.341979 -0.579145 0.573738 -0.579151 -0.784412 0.430325 -0.446675 
+-0.923892 -0.171678 -0.341979 -0.784412 0.430325 -0.446675 -0.984317 -0.034473 -0.173007 
+-0.73421 0.623776 -0.268029 -0.784412 0.430325 -0.446675 -0.579145 0.573738 -0.579151 
+-0.73421 0.623776 -0.268029 -0.579145 0.573738 -0.579151 -0.98928 -0.070009 -0.128154 
+-0.98928 -0.070009 -0.128154 -0.951962 -0.19513 0.235994 -0.901647 0.397689 0.169931 
+-0.98928 -0.070009 -0.128154 -0.901647 0.397689 0.169931 -0.73421 0.623776 -0.268029 
+-0.942021 -0.050149 0.331785 -0.901647 0.397689 0.169931 -0.951962 -0.19513 0.235994 
+-0.942021 -0.050149 0.331785 -0.951962 -0.19513 0.235994 -0.87493 -0.422469 0.236679 
+-0.876311 0.450641 -0.170301 -0.964958 0.26233 -0.00632 -0.784412 0.430325 -0.446675 
+-0.876311 0.450641 -0.170301 -0.784412 0.430325 -0.446675 -0.73421 0.623776 -0.268029 
+-0.984317 -0.034473 -0.173007 -0.784412 0.430325 -0.446675 -0.964958 0.26233 -0.00632 
+-0.984317 -0.034473 -0.173007 -0.964958 0.26233 -0.00632 -0.987545 -0.136779 0.07776 
+-0.986233 0.049916 0.157648 -0.935639 0.29318 0.196531 -0.853241 0.521221 0.01758 
+-0.986233 0.049916 0.157648 -0.853241 0.521221 0.01758 -0.926446 0.36602 0.08791 
+-0.935639 0.29318 0.196531 -0.799052 0.53989 0.26464 -0.722653 0.689444 0.049382 
+-0.935639 0.29318 0.196531 -0.722653 0.689444 0.049382 -0.853241 0.521221 0.01758 
+-0.799052 0.53989 0.26464 -0.324342 0.820392 0.470912 -0.385975 0.91993 0.068942 
+-0.799052 0.53989 0.26464 -0.385975 0.91993 0.068942 -0.722653 0.689444 0.049382 
+-0.977064 -0.192318 0.091436 -0.965141 -0.21903 0.143278 -0.975634 -0.153729 0.156544 
+-0.977064 -0.192318 0.091436 -0.975634 -0.153729 0.156544 -0.986233 0.049916 0.157648 
+-0.984317 -0.034473 -0.173007 -0.94746 -0.205226 -0.245361 -0.953699 -0.195075 -0.22892 
+-0.984317 -0.034473 -0.173007 -0.953699 -0.195075 -0.22892 -0.923892 -0.171678 -0.341979 
+-0.888298 -0.378077 -0.260737 -0.953699 -0.195075 -0.22892 -0.94746 -0.205226 -0.245361 
+-0.888298 -0.378077 -0.260737 -0.94746 -0.205226 -0.245361 -0.864382 -0.332185 -0.377487 
+-0.76924 -0.573637 -0.281443 -0.888298 -0.378077 -0.260737 -0.864382 -0.332185 -0.377487 
+-0.76924 -0.573637 -0.281443 -0.864382 -0.332185 -0.377487 -0.80518 -0.423524 -0.415106 
+-0.76924 -0.573637 -0.281443 -0.662771 -0.741415 -0.105062 -0.822765 -0.539525 -0.178802 
+-0.76924 -0.573637 -0.281443 -0.822765 -0.539525 -0.178802 -0.888298 -0.378077 -0.260737 
+-0.575755 -0.78372 -0.233002 -0.662771 -0.741415 -0.105062 -0.76924 -0.573637 -0.281443 
+-0.575755 -0.78372 -0.233002 -0.76924 -0.573637 -0.281443 -0.467768 -0.872242 0.142784 
+-0.555391 -0.827908 0.078155 -0.662771 -0.741415 -0.105062 -0.575755 -0.78372 -0.233002 
+-0.555391 -0.827908 0.078155 -0.575755 -0.78372 -0.233002 -0.545412 -0.775243 -0.318629 
+-0.76924 -0.573637 -0.281443 -0.481758 -0.839147 -0.252472 -0.474076 -0.871852 -0.122989 
+-0.76924 -0.573637 -0.281443 -0.474076 -0.871852 -0.122989 -0.467768 -0.872242 0.142784 
+-0.616271 0.780552 -0.104631 -0.457826 0.886837 0.062567 -0.606061 0.742513 0.285245 
+-0.616271 0.780552 -0.104631 -0.606061 0.742513 0.285245 -0.803095 0.594027 -0.046586 
+-0.964958 0.26233 -0.00632 -0.887683 0.32986 0.321265 -0.973773 -0.039058 0.224144 
+-0.964958 0.26233 -0.00632 -0.973773 -0.039058 0.224144 -0.987545 -0.136779 0.07776 
+-0.439158 -0.869495 0.226092 -0.555391 -0.827908 0.078155 -0.37351 -0.896312 0.238987 
+-0.439158 -0.869495 0.226092 -0.37351 -0.896312 0.238987 -0.543671 -0.838875 -0.026637 
+-0.820103 -0.561238 -0.111547 -0.439158 -0.869495 0.226092 -0.543671 -0.838875 -0.026637 
+-0.820103 -0.561238 -0.111547 -0.543671 -0.838875 -0.026637 -0.602681 -0.457408 -0.653876 
+-0.866042 -0.429488 -0.255953 -0.820103 -0.561238 -0.111547 -0.602681 -0.457408 -0.653876 
+-0.866042 -0.429488 -0.255953 -0.602681 -0.457408 -0.653876 -0.715431 -0.652931 -0.248677 
+-0.631282 -0.77151 0.079097 -0.878198 -0.452936 0.153681 -0.721106 -0.629489 0.289397 
+-0.631282 -0.77151 0.079097 -0.721106 -0.629489 0.289397 -0.458233 -0.883934 0.093183 
+-0.878198 -0.452936 0.153681 -0.631282 -0.77151 0.079097 -0.820103 -0.561238 -0.111547 
+-0.878198 -0.452936 0.153681 -0.820103 -0.561238 -0.111547 -0.866042 -0.429488 -0.255953 
+-0.352345 -0.93181 -0.087076 -0.458233 -0.883934 0.093183 -0.721106 -0.629489 0.289397 
+-0.352345 -0.93181 -0.087076 -0.721106 -0.629489 0.289397 -0.550251 -0.832845 0.059946 
+-0.458233 -0.883934 0.093183 -0.594921 -0.803183 -0.031076 -0.504469 -0.862978 0.027931 
+-0.458233 -0.883934 0.093183 -0.504469 -0.862978 0.027931 -0.631282 -0.77151 0.079097 
+-0.212425 -0.888393 -0.406981 -0.550251 -0.832845 0.059946 -0.337905 -0.934589 -0.111191 
+-0.212425 -0.888393 -0.406981 -0.337905 -0.934589 -0.111191 -0.348869 -0.933084 0.087437 
+-0.550251 -0.832845 0.059946 -0.721106 -0.629489 0.289397 -0.631669 -0.664597 0.39913 
+-0.550251 -0.832845 0.059946 -0.631669 -0.664597 0.39913 -0.337905 -0.934589 -0.111191 
+-0.721106 -0.629489 0.289397 -0.878198 -0.452936 0.153681 -0.584983 -0.741821 0.327867 
+-0.721106 -0.629489 0.289397 -0.584983 -0.741821 0.327867 -0.631669 -0.664597 0.39913 
+-0.715431 -0.652931 -0.248677 -0.584983 -0.741821 0.327867 -0.878198 -0.452936 0.153681 
+-0.715431 -0.652931 -0.248677 -0.878198 -0.452936 0.153681 -0.866042 -0.429488 -0.255953 
+-0.584983 -0.741821 0.327867 1e-05 -0.911741 0.410765 7e-06 -0.855225 0.518257 
+-0.584983 -0.741821 0.327867 7e-06 -0.855225 0.518257 -0.631669 -0.664597 0.39913 
+-0.584983 -0.741821 0.327867 -0.715431 -0.652931 -0.248677 3e-06 -0.981923 -0.189284 
+-0.584983 -0.741821 0.327867 3e-06 -0.981923 -0.189284 1e-05 -0.911741 0.410765 
+7e-06 -0.855225 0.518257 5e-06 -0.978984 0.203935 -0.337905 -0.934589 -0.111191 
+7e-06 -0.855225 0.518257 -0.337905 -0.934589 -0.111191 -0.631669 -0.664597 0.39913 
+-0.586833 -0.742918 -0.322025 -0.481758 -0.839147 -0.252472 -0.76924 -0.573637 -0.281443 
+-0.586833 -0.742918 -0.322025 -0.76924 -0.573637 -0.281443 -0.80518 -0.423524 -0.415106 
+-0.921667 -0.382043 -0.067626 -0.903521 -0.408445 0.129702 -0.682918 -0.730087 -0.024419 
+-0.921667 -0.382043 -0.067626 -0.682918 -0.730087 -0.024419 -0.792462 -0.388825 -0.469914 
+-0.94746 -0.205226 -0.245361 -0.921667 -0.382043 -0.067626 -0.792462 -0.388825 -0.469914 
+-0.94746 -0.205226 -0.245361 -0.792462 -0.388825 -0.469914 -0.864382 -0.332185 -0.377487 
+-0.984317 -0.034473 -0.173007 -0.987545 -0.136779 0.07776 -0.921667 -0.382043 -0.067626 
+-0.984317 -0.034473 -0.173007 -0.921667 -0.382043 -0.067626 -0.94746 -0.205226 -0.245361 
+-0.586833 -0.742918 -0.322025 -0.80518 -0.423524 -0.415106 -0.724408 -0.336999 -0.601386 
+-0.586833 -0.742918 -0.322025 -0.724408 -0.336999 -0.601386 -0.486246 -0.397334 -0.778261 
+-0.792462 -0.388825 -0.469914 -0.724408 -0.336999 -0.601386 -0.80518 -0.423524 -0.415106 
+-0.792462 -0.388825 -0.469914 -0.80518 -0.423524 -0.415106 -0.864382 -0.332185 -0.377487 
+-6e-06 -0.45012 -0.892968 -0.587469 -0.386797 -0.710822 -0.518012 -0.801466 -0.298858 
+-6e-06 -0.45012 -0.892968 -0.518012 -0.801466 -0.298858 1e-06 -0.986329 -0.164789 
+-0.792462 -0.388825 -0.469914 -0.587469 -0.386797 -0.710822 -0.486246 -0.397334 -0.778261 
+-0.792462 -0.388825 -0.469914 -0.486246 -0.397334 -0.778261 -0.724408 -0.336999 -0.601386 
+-0.876311 0.450641 -0.170301 -0.741006 0.653801 -0.153146 -0.803095 0.594027 -0.046586 
+-0.876311 0.450641 -0.170301 -0.803095 0.594027 -0.046586 -0.964958 0.26233 -0.00632 
+-0.741006 0.653801 -0.153146 -0.646129 0.750789 -0.137238 -0.616271 0.780552 -0.104631 
+-0.741006 0.653801 -0.153146 -0.616271 0.780552 -0.104631 -0.803095 0.594027 -0.046586 
+-0.792462 -0.388825 -0.469914 -0.682918 -0.730087 -0.024419 -0.518012 -0.801466 -0.298858 
+-0.792462 -0.388825 -0.469914 -0.518012 -0.801466 -0.298858 -0.587469 -0.386797 -0.710822 
+-0.987545 -0.136779 0.07776 -0.973773 -0.039058 0.224144 -0.903521 -0.408445 0.129702 
+-0.987545 -0.136779 0.07776 -0.903521 -0.408445 0.129702 -0.921667 -0.382043 -0.067626 
+-0.887683 0.32986 0.321265 -0.964958 0.26233 -0.00632 -0.803095 0.594027 -0.046586 
+-0.887683 0.32986 0.321265 -0.803095 0.594027 -0.046586 -0.606061 0.742513 0.285245 
+-0.876311 0.450641 -0.170301 -0.926446 0.36602 0.08791 -0.853241 0.521221 0.01758 
+-0.876311 0.450641 -0.170301 -0.853241 0.521221 0.01758 -0.741006 0.653801 -0.153146 
+-0.853241 0.521221 0.01758 -0.722653 0.689444 0.049382 -0.646129 0.750789 -0.137238 
+-0.853241 0.521221 0.01758 -0.646129 0.750789 -0.137238 -0.741006 0.653801 -0.153146 
+-0.935639 0.29318 0.196531 -0.986233 0.049916 0.157648 -0.975634 -0.153729 0.156544 
+-0.935639 0.29318 0.196531 -0.975634 -0.153729 0.156544 -0.933747 0.055813 0.353556 
+5e-06 -0.93434 0.356384 9e-06 -0.736409 0.676536 -0.389677 -0.673095 0.628566 
+5e-06 -0.93434 0.356384 -0.389677 -0.673095 0.628566 -0.353862 -0.903989 0.23997 
+-0.389677 -0.673095 0.628566 -0.830367 -0.341306 0.440456 -0.701111 -0.662986 0.262475 
+-0.389677 -0.673095 0.628566 -0.701111 -0.662986 0.262475 -0.353862 -0.903989 0.23997 
+-0.830367 -0.341306 0.440456 -0.975634 -0.153729 0.156544 -0.965141 -0.21903 0.143278 
+-0.830367 -0.341306 0.440456 -0.965141 -0.21903 0.143278 -0.701111 -0.662986 0.262475 
+-0.799052 0.53989 0.26464 -0.935639 0.29318 0.196531 -0.933747 0.055813 0.353556 
+-0.799052 0.53989 0.26464 -0.933747 0.055813 0.353556 -0.746035 0.335567 0.575175 
+-0.324342 0.820392 0.470912 -0.799052 0.53989 0.26464 -0.746035 0.335567 0.575175 
+-0.324342 0.820392 0.470912 -0.746035 0.335567 0.575175 -0.209425 0.494896 0.843338 
+-0.830367 -0.341306 0.440456 -0.750362 -0.144134 0.645122 -0.933747 0.055813 0.353556 
+-0.830367 -0.341306 0.440456 -0.933747 0.055813 0.353556 -0.975634 -0.153729 0.156544 
+-0.750362 -0.144134 0.645122 -0.470041 0.038914 0.881786 -0.746035 0.335567 0.575175 
+-0.750362 -0.144134 0.645122 -0.746035 0.335567 0.575175 -0.933747 0.055813 0.353556 
+-0.41307 -0.251084 0.875403 -0.192681 0.095302 0.976623 -0.470041 0.038914 0.881786 
+-0.41307 -0.251084 0.875403 -0.470041 0.038914 0.881786 -0.750362 -0.144134 0.645122 
+-0.41307 -0.251084 0.875403 -0.750362 -0.144134 0.645122 -0.830367 -0.341306 0.440456 
+-0.41307 -0.251084 0.875403 -0.830367 -0.341306 0.440456 -0.389677 -0.673095 0.628566 
+-0.470041 0.038914 0.881786 -0.192681 0.095302 0.976623 -0.209425 0.494896 0.843338 
+-0.470041 0.038914 0.881786 -0.209425 0.494896 0.843338 -0.746035 0.335567 0.575175 
+-0.457826 0.886837 0.062567 -0.616271 0.780552 -0.104631 -0.236619 0.953638 -0.185973 
+-0.457826 0.886837 0.062567 -0.236619 0.953638 -0.185973 -0.076313 0.992955 0.090642 
+-0.349249 0.926107 -0.142654 -0.236619 0.953638 -0.185973 -0.616271 0.780552 -0.104631 
+-0.349249 0.926107 -0.142654 -0.616271 0.780552 -0.104631 -0.646129 0.750789 -0.137238 
+-0.722653 0.689444 0.049382 -0.385975 0.91993 0.068942 -0.349249 0.926107 -0.142654 
+-0.722653 0.689444 0.049382 -0.349249 0.926107 -0.142654 -0.646129 0.750789 -0.137238 
+-0.41307 -0.251084 0.875403 9e-06 -0.410924 0.91167 9e-06 0.002713 0.999996 
+-0.41307 -0.251084 0.875403 9e-06 0.002713 0.999996 -0.192681 0.095302 0.976623 
+-0.192681 0.095302 0.976623 9e-06 0.002713 0.999996 5e-06 0.402826 0.915277 
+-0.192681 0.095302 0.976623 5e-06 0.402826 0.915277 -0.209425 0.494896 0.843338 
+-0.209425 0.494896 0.843338 5e-06 0.402826 0.915277 2e-06 0.809493 0.587129 
+-0.209425 0.494896 0.843338 2e-06 0.809493 0.587129 -0.324342 0.820392 0.470912 
+-0.389677 -0.673095 0.628566 9e-06 -0.736409 0.676536 9e-06 -0.410924 0.91167 
+-0.389677 -0.673095 0.628566 9e-06 -0.410924 0.91167 -0.41307 -0.251084 0.875403 
+-0.903521 -0.408445 0.129702 -0.822165 -0.48276 0.30164 -0.56663 -0.740096 0.3622 
+-0.903521 -0.408445 0.129702 -0.56663 -0.740096 0.3622 -0.682918 -0.730087 -0.024419 
+1e-06 -0.986329 -0.164789 -0.518012 -0.801466 -0.298858 -0.376588 -0.899002 0.223555 
+1e-06 -0.986329 -0.164789 -0.376588 -0.899002 0.223555 5e-06 -0.92965 0.368443 
+-0.682918 -0.730087 -0.024419 -0.56663 -0.740096 0.3622 -0.376588 -0.899002 0.223555 
+-0.682918 -0.730087 -0.024419 -0.376588 -0.899002 0.223555 -0.518012 -0.801466 -0.298858 
+-0.606061 0.742513 0.285245 -0.302146 0.804427 0.511474 -0.667075 0.441049 0.600405 
+-0.606061 0.742513 0.285245 -0.667075 0.441049 0.600405 -0.887683 0.32986 0.321265 
+-0.887683 0.32986 0.321265 -0.667075 0.441049 0.600405 -0.84943 -0.269978 0.45341 
+-0.887683 0.32986 0.321265 -0.84943 -0.269978 0.45341 -0.973773 -0.039058 0.224144 
+-0.076313 0.992955 0.090642 0.053789 0.977936 0.201861 -0.193098 0.918173 0.345935 
+-0.076313 0.992955 0.090642 -0.193098 0.918173 0.345935 -0.457826 0.886837 0.062567 
+-0.606061 0.742513 0.285245 -0.457826 0.886837 0.062567 -0.193098 0.918173 0.345935 
+-0.606061 0.742513 0.285245 -0.193098 0.918173 0.345935 -0.302146 0.804427 0.511474 
+-0.84943 -0.269978 0.45341 -0.822165 -0.48276 0.30164 -0.903521 -0.408445 0.129702 
+-0.84943 -0.269978 0.45341 -0.903521 -0.408445 0.129702 -0.973773 -0.039058 0.224144 
+-0.56663 -0.740096 0.3622 -0.243623 -0.73912 0.627972 -0.169653 -0.823479 0.541387 
+-0.56663 -0.740096 0.3622 -0.169653 -0.823479 0.541387 -0.376588 -0.899002 0.223555 
+-0.84943 -0.269978 0.45341 -0.321054 -0.483993 0.814049 -0.256212 -0.701512 0.665009 
+-0.84943 -0.269978 0.45341 -0.256212 -0.701512 0.665009 -0.822165 -0.48276 0.30164 
+-0.667075 0.441049 0.600405 -0.508275 0.290914 0.810571 -0.321054 -0.483993 0.814049 
+-0.667075 0.441049 0.600405 -0.321054 -0.483993 0.814049 -0.84943 -0.269978 0.45341 
+-0.193098 0.918173 0.345935 0.032061 0.902657 0.429164 -0.207987 0.793658 0.571707 
+-0.193098 0.918173 0.345935 -0.207987 0.793658 0.571707 -0.302146 0.804427 0.511474 
+0.053789 0.977936 0.201861 -0.025853 0.836488 0.547375 0.032061 0.902657 0.429164 
+0.053789 0.977936 0.201861 0.032061 0.902657 0.429164 -0.193098 0.918173 0.345935 
+-0.256212 -0.701512 0.665009 -0.243623 -0.73912 0.627972 -0.56663 -0.740096 0.3622 
+-0.256212 -0.701512 0.665009 -0.56663 -0.740096 0.3622 -0.822165 -0.48276 0.30164 
+-0.321054 -0.483993 0.814049 -0.295566 -0.352509 0.887907 -0.127565 -0.760553 0.636621 
+-0.321054 -0.483993 0.814049 -0.127565 -0.760553 0.636621 -0.256212 -0.701512 0.665009 
+-0.508275 0.290914 0.810571 -0.394237 0.36593 0.843014 -0.295566 -0.352509 0.887907 
+-0.508275 0.290914 0.810571 -0.295566 -0.352509 0.887907 -0.321054 -0.483993 0.814049 
+-0.419036 -0.224103 0.879879 -0.798607 -0.055794 0.599262 -0.334651 -0.911431 0.239378 
+-0.419036 -0.224103 0.879879 -0.334651 -0.911431 0.239378 -0.179494 -0.82159 0.541085 
+-0.472532 0.509095 0.7194 -0.677453 0.636831 0.368107 -0.798607 -0.055794 0.599262 
+-0.472532 0.509095 0.7194 -0.798607 -0.055794 0.599262 -0.419036 -0.224103 0.879879 
+-0.798607 -0.055794 0.599262 -0.830067 0.300698 0.469649 -0.360985 -0.880426 0.307473 
+-0.798607 -0.055794 0.599262 -0.360985 -0.880426 0.307473 -0.334651 -0.911431 0.239378 
+-0.677453 0.636831 0.368107 -0.519884 0.85059 0.078846 -0.830067 0.300698 0.469649 
+-0.677453 0.636831 0.368107 -0.830067 0.300698 0.469649 -0.798607 -0.055794 0.599262 
+-0.830067 0.300698 0.469649 -0.848639 0.174271 0.499441 0.289861 -0.773798 0.563221 
+-0.830067 0.300698 0.469649 0.289861 -0.773798 0.563221 -0.360985 -0.880426 0.307473 
+-0.519884 0.85059 0.078846 -0.79317 0.60402 -0.077722 -0.848639 0.174271 0.499441 
+-0.519884 0.85059 0.078846 -0.848639 0.174271 0.499441 -0.830067 0.300698 0.469649 
+-0.848639 0.174271 0.499441 -0.857362 0.156642 0.4903 -0.108274 -0.492363 0.863629 
+-0.848639 0.174271 0.499441 -0.108274 -0.492363 0.863629 0.289861 -0.773798 0.563221 
+-0.79317 0.60402 -0.077722 -0.827393 0.559351 -0.050474 -0.857362 0.156642 0.4903 
+-0.79317 0.60402 -0.077722 -0.857362 0.156642 0.4903 -0.848639 0.174271 0.499441 
+-0.667075 0.441049 0.600405 -0.302146 0.804427 0.511474 -0.207987 0.793658 0.571707 
+-0.667075 0.441049 0.600405 -0.207987 0.793658 0.571707 -0.508275 0.290914 0.810571 
+-0.472532 0.509095 0.7194 -0.394237 0.36593 0.843014 -0.291407 0.765832 0.573222 
+-0.472532 0.509095 0.7194 -0.291407 0.765832 0.573222 -0.258313 0.911364 0.320454 
+-0.394237 0.36593 0.843014 -0.508275 0.290914 0.810571 -0.207987 0.793658 0.571707 
+-0.394237 0.36593 0.843014 -0.207987 0.793658 0.571707 -0.291407 0.765832 0.573222 
+-0.519884 0.85059 0.078846 -0.677453 0.636831 0.368107 -0.028307 0.910391 -0.412778 
+-0.519884 0.85059 0.078846 -0.028307 0.910391 -0.412778 0.64238 0.428536 -0.635377 
+-0.334651 -0.911431 0.239378 -0.360985 -0.880426 0.307473 0.031714 -0.994445 -0.100363 
+-0.334651 -0.911431 0.239378 0.031714 -0.994445 -0.100363 0.024571 -0.966561 -0.255256 
+-0.179494 -0.82159 0.541085 -0.334651 -0.911431 0.239378 0.024571 -0.966561 -0.255256 
+-0.179494 -0.82159 0.541085 0.024571 -0.966561 -0.255256 -0.339854 -0.884653 0.319198 
+0.024571 -0.966561 -0.255256 0.031714 -0.994445 -0.100363 0.731128 -0.346333 -0.587797 
+0.024571 -0.966561 -0.255256 0.731128 -0.346333 -0.587797 0.76036 -0.004819 -0.649484 
+-0.407052 -0.872296 0.270938 -0.215444 -0.890886 0.399883 -0.281084 -0.820446 0.497855 
+-0.407052 -0.872296 0.270938 -0.281084 -0.820446 0.497855 -0.339854 -0.884653 0.319198 
+0.024571 -0.966561 -0.255256 0.76036 -0.004819 -0.649484 -0.960966 -0.027293 -0.275317 
+0.024571 -0.966561 -0.255256 -0.960966 -0.027293 -0.275317 -0.780965 -0.614567 -0.111364 
+-0.243623 -0.73912 0.627972 -0.256212 -0.701512 0.665009 -0.127565 -0.760553 0.636621 
+-0.243623 -0.73912 0.627972 -0.127565 -0.760553 0.636621 -0.281084 -0.820446 0.497855 
+0.76036 -0.004819 -0.649484 0.731128 -0.346333 -0.587797 0.64238 0.428536 -0.635377 
+0.76036 -0.004819 -0.649484 0.64238 0.428536 -0.635377 -0.028307 0.910391 -0.412778 
+-0.360985 -0.880426 0.307473 0.289861 -0.773798 0.563221 0.764882 -0.635835 -0.103297 
+-0.360985 -0.880426 0.307473 0.764882 -0.635835 -0.103297 0.031714 -0.994445 -0.100363 
+0.289861 -0.773798 0.563221 -0.108274 -0.492363 0.863629 0.867675 -0.49029 -0.082197 
+0.289861 -0.773798 0.563221 0.867675 -0.49029 -0.082197 0.764882 -0.635835 -0.103297 
+-0.028307 0.910391 -0.412778 -0.751275 0.643248 -0.147709 -0.960966 -0.027293 -0.275317 
+-0.028307 0.910391 -0.412778 -0.960966 -0.027293 -0.275317 0.76036 -0.004819 -0.649484 
+-0.23668 0.971338 0.022039 -0.751275 0.643248 -0.147709 -0.028307 0.910391 -0.412778 
+-0.23668 0.971338 0.022039 -0.028307 0.910391 -0.412778 -0.258313 0.911364 0.320454 
+-0.025853 0.836488 0.547375 0.022893 0.939246 0.342482 -0.177451 0.881624 0.437322 
+-0.025853 0.836488 0.547375 -0.177451 0.881624 0.437322 0.032061 0.902657 0.429164 
+-0.23668 0.971338 0.022039 -0.177451 0.881624 0.437322 0.022893 0.939246 0.342482 
+-0.23668 0.971338 0.022039 0.022893 0.939246 0.342482 -0.111682 0.988279 0.104073 
+0.001037 0.882289 0.470708 -0 0.971344 0.237677 0.022893 0.939246 0.342482 
+0.001037 0.882289 0.470708 0.022893 0.939246 0.342482 -0.025853 0.836488 0.547375 
+-0.207987 0.793658 0.571707 0.032061 0.902657 0.429164 -0.177451 0.881624 0.437322 
+-0.207987 0.793658 0.571707 -0.177451 0.881624 0.437322 -0.291407 0.765832 0.573222 
+-1e-06 0.992342 0.123524 -2e-06 0.999698 0.024563 -0.076931 0.996794 0.021978 
+-1e-06 0.992342 0.123524 -0.076931 0.996794 0.021978 -0.111682 0.988279 0.104073 
+-0.751275 0.643248 -0.147709 -0.076931 0.996794 0.021978 -0.346215 0.845484 -0.406561 
+-0.751275 0.643248 -0.147709 -0.346215 0.845484 -0.406561 -0.879756 0.197408 -0.432504 
+-0.960966 -0.027293 -0.275317 -0.751275 0.643248 -0.147709 -0.879756 0.197408 -0.432504 
+-0.960966 -0.027293 -0.275317 -0.879756 0.197408 -0.432504 -0.927173 -0.178772 -0.329228 
+-0.780965 -0.614567 -0.111364 -0.960966 -0.027293 -0.275317 -0.927173 -0.178772 -0.329228 
+-0.780965 -0.614567 -0.111364 -0.927173 -0.178772 -0.329228 -0.694409 -0.692347 -0.196092 
+-0.780965 -0.614567 -0.111364 -0.694409 -0.692347 -0.196092 -0.371998 -0.923629 0.092336 
+-0.780965 -0.614567 -0.111364 -0.371998 -0.923629 0.092336 -0.407052 -0.872296 0.270938 
+-0.370476 -0.916544 -0.150649 -0.465019 -0.865383 -0.186735 -0.195217 -0.964956 -0.175358 
+-0.370476 -0.916544 -0.150649 -0.195217 -0.964956 -0.175358 -0.11622 -0.986891 -0.111975 
+-0.887787 -0.38704 -0.249068 -0.931503 -0.360017 -0.05187 -0.663703 -0.734743 -0.140182 
+-0.887787 -0.38704 -0.249068 -0.663703 -0.734743 -0.140182 -0.60555 -0.752466 -0.259046 
+-0.210432 0.815505 -0.539138 0.012261 0.836246 -0.548218 -0.91777 0.356113 -0.175733 
+-0.210432 0.815505 -0.539138 -0.91777 0.356113 -0.175733 -0.909697 0.204319 -0.361531 
+-0.909697 0.204319 -0.361531 -0.91777 0.356113 -0.175733 -0.931503 -0.360017 -0.05187 
+-0.909697 0.204319 -0.361531 -0.931503 -0.360017 -0.05187 -0.887787 -0.38704 -0.249068 
+-0.91777 0.356113 -0.175733 -0.945889 0.315045 0.07772 -0.953376 -0.30156 0.01168 
+-0.91777 0.356113 -0.175733 -0.953376 -0.30156 0.01168 -0.931503 -0.360017 -0.05187 
+-0.931503 -0.360017 -0.05187 -0.953376 -0.30156 0.01168 -0.565519 -0.824161 -0.030767 
+-0.931503 -0.360017 -0.05187 -0.565519 -0.824161 -0.030767 -0.663703 -0.734743 -0.140182 
+-0.882585 0.426509 0.197821 -0.945889 0.315045 0.07772 -0.518351 0.809626 0.275351 
+-0.882585 0.426509 0.197821 -0.518351 0.809626 0.275351 -0.26538 0.876907 0.400759 
+-0.565519 -0.824161 -0.030767 -0.564959 -0.824971 -0.015659 -0.394266 -0.908685 -0.137279 
+-0.565519 -0.824161 -0.030767 -0.394266 -0.908685 -0.137279 -0.454676 -0.884721 -0.102656 
+-0.945889 0.315045 0.07772 -0.91777 0.356113 -0.175733 -0.590672 0.799482 0.109254 
+-0.945889 0.315045 0.07772 -0.590672 0.799482 0.109254 -0.518351 0.809626 0.275351 
+-0.465019 -0.865383 -0.186735 -0.454676 -0.884721 -0.102656 -0.219435 -0.96992 -0.105374 
+-0.465019 -0.865383 -0.186735 -0.219435 -0.96992 -0.105374 -0.195217 -0.964956 -0.175358 
+-0.945889 0.315045 0.07772 -0.882585 0.426509 0.197821 -0.96711 -0.223655 0.121149 
+-0.945889 0.315045 0.07772 -0.96711 -0.223655 0.121149 -0.953376 -0.30156 0.01168 
+-0.953376 -0.30156 0.01168 -0.96711 -0.223655 0.121149 -0.564959 -0.824971 -0.015659 
+-0.953376 -0.30156 0.01168 -0.564959 -0.824971 -0.015659 -0.565519 -0.824161 -0.030767 
+-0.219435 -0.96992 -0.105374 -0.266367 -0.941791 -0.205131 0.000275 -0.986724 -0.162403 
+-0.219435 -0.96992 -0.105374 0.000275 -0.986724 -0.162403 0.000139 -0.99612 -0.088 
+-0.882585 0.426509 0.197821 -0.26538 0.876907 0.400759 -0.234592 0.963244 0.130872 
+-0.882585 0.426509 0.197821 -0.234592 0.963244 0.130872 -0.922324 0.37367 0.098429 
+-0.663703 -0.734743 -0.140182 -0.565519 -0.824161 -0.030767 -0.454676 -0.884721 -0.102656 
+-0.663703 -0.734743 -0.140182 -0.454676 -0.884721 -0.102656 -0.465019 -0.865383 -0.186735 
+-0.454676 -0.884721 -0.102656 -0.394266 -0.908685 -0.137279 -0.266367 -0.941791 -0.205131 
+-0.454676 -0.884721 -0.102656 -0.266367 -0.941791 -0.205131 -0.219435 -0.96992 -0.105374 
+-0.513045 -0.849714 0.121534 -0.67142 -0.724319 0.156705 -0.012141 -0.997837 0.064604 
+-0.513045 -0.849714 0.121534 -0.012141 -0.997837 0.064604 -0.204727 -0.960801 -0.186943 
+-0.295566 -0.352509 0.887907 -0.419036 -0.224103 0.879879 -0.179494 -0.82159 0.541085 
+-0.295566 -0.352509 0.887907 -0.179494 -0.82159 0.541085 -0.127565 -0.760553 0.636621 
+-0.394237 0.36593 0.843014 -0.472532 0.509095 0.7194 -0.419036 -0.224103 0.879879 
+-0.394237 0.36593 0.843014 -0.419036 -0.224103 0.879879 -0.295566 -0.352509 0.887907 
+-0.677453 0.636831 0.368107 -0.472532 0.509095 0.7194 -0.258313 0.911364 0.320454 
+-0.677453 0.636831 0.368107 -0.258313 0.911364 0.320454 -0.028307 0.910391 -0.412778 
+-0.127565 -0.760553 0.636621 -0.179494 -0.82159 0.541085 -0.339854 -0.884653 0.319198 
+-0.127565 -0.760553 0.636621 -0.339854 -0.884653 0.319198 -0.281084 -0.820446 0.497855 
+-0.780965 -0.614567 -0.111364 -0.407052 -0.872296 0.270938 -0.339854 -0.884653 0.319198 
+-0.780965 -0.614567 -0.111364 -0.339854 -0.884653 0.319198 0.024571 -0.966561 -0.255256 
+-0.371998 -0.923629 0.092336 -0.119761 -0.979394 0.16262 -0.215444 -0.890886 0.399883 
+-0.371998 -0.923629 0.092336 -0.215444 -0.890886 0.399883 -0.407052 -0.872296 0.270938 
+-0.346215 0.845484 -0.406561 -0.210432 0.815505 -0.539138 -0.909697 0.204319 -0.361531 
+-0.346215 0.845484 -0.406561 -0.909697 0.204319 -0.361531 -0.879756 0.197408 -0.432504 
+-0.177451 0.881624 0.437322 -0.23668 0.971338 0.022039 -0.258313 0.911364 0.320454 
+-0.177451 0.881624 0.437322 -0.258313 0.911364 0.320454 -0.291407 0.765832 0.573222 
+-0.751275 0.643248 -0.147709 -0.23668 0.971338 0.022039 -0.111682 0.988279 0.104073 
+-0.751275 0.643248 -0.147709 -0.111682 0.988279 0.104073 -0.076931 0.996794 0.021978 
+-0 0.971344 0.237677 -1e-06 0.992342 0.123524 -0.111682 0.988279 0.104073 
+-0 0.971344 0.237677 -0.111682 0.988279 0.104073 0.022893 0.939246 0.342482 
+-0.11622 -0.986891 -0.111975 2e-06 -0.995633 -0.09335 3e-06 -0.998337 0.057641 
+-0.11622 -0.986891 -0.111975 3e-06 -0.998337 0.057641 -0.119761 -0.979394 0.16262 
+-0.370476 -0.916544 -0.150649 -0.11622 -0.986891 -0.111975 -0.119761 -0.979394 0.16262 
+-0.370476 -0.916544 -0.150649 -0.119761 -0.979394 0.16262 -0.371998 -0.923629 0.092336 
+-0.371998 -0.923629 0.092336 -0.694409 -0.692347 -0.196092 -0.60555 -0.752466 -0.259046 
+-0.371998 -0.923629 0.092336 -0.60555 -0.752466 -0.259046 -0.370476 -0.916544 -0.150649 
+-0.465019 -0.865383 -0.186735 -0.370476 -0.916544 -0.150649 -0.60555 -0.752466 -0.259046 
+-0.465019 -0.865383 -0.186735 -0.60555 -0.752466 -0.259046 -0.663703 -0.734743 -0.140182 
+-0.281084 -0.820446 0.497855 -0.215444 -0.890886 0.399883 -0.169653 -0.823479 0.541387 
+-0.281084 -0.820446 0.497855 -0.169653 -0.823479 0.541387 -0.243623 -0.73912 0.627972 
+-0.909697 0.204319 -0.361531 -0.887787 -0.38704 -0.249068 -0.927173 -0.178772 -0.329228 
+-0.909697 0.204319 -0.361531 -0.927173 -0.178772 -0.329228 -0.879756 0.197408 -0.432504 
+-0.694409 -0.692347 -0.196092 -0.927173 -0.178772 -0.329228 -0.887787 -0.38704 -0.249068 
+-0.694409 -0.692347 -0.196092 -0.887787 -0.38704 -0.249068 -0.60555 -0.752466 -0.259046 
+0.731128 -0.346333 -0.587797 0.638631 -0.08225 -0.765105 -0.028609 0.513707 -0.857489 
+0.731128 -0.346333 -0.587797 -0.028609 0.513707 -0.857489 0.64238 0.428536 -0.635377 
+-0.79317 0.60402 -0.077722 -0.519884 0.85059 0.078846 0.64238 0.428536 -0.635377 
+-0.79317 0.60402 -0.077722 0.64238 0.428536 -0.635377 -0.028609 0.513707 -0.857489 
+0.764882 -0.635835 -0.103297 0.638631 -0.08225 -0.765105 0.731128 -0.346333 -0.587797 
+0.764882 -0.635835 -0.103297 0.731128 -0.346333 -0.587797 0.031714 -0.994445 -0.100363 
+-0.476793 -0.879005 0.00429 -0.716963 -0.696478 -0.029701 0.278429 -0.946174 -0.165019 
+-0.476793 -0.879005 0.00429 0.278429 -0.946174 -0.165019 0.288878 -0.951244 -0.108098 
+-0.984177 -0.16281 0.069925 -0.981612 -0.188141 0.032254 -0.716963 -0.696478 -0.029701 
+-0.984177 -0.16281 0.069925 -0.716963 -0.696478 -0.029701 -0.476793 -0.879005 0.00429 
+-0.269582 0.961036 -0.061111 -0.374738 0.926853 0.022701 -0.890981 0.450648 0.055394 
+-0.269582 0.961036 -0.061111 -0.890981 0.450648 0.055394 -0.856101 0.507388 0.098224 
+-0.96711 -0.223655 0.121149 -0.971812 -0.145416 0.185567 -0.513045 -0.849714 0.121534 
+-0.96711 -0.223655 0.121149 -0.513045 -0.849714 0.121534 -0.564959 -0.824971 -0.015659 
+-0.984177 -0.16281 0.069925 -0.856101 0.507388 0.098224 -0.890981 0.450648 0.055394 
+-0.984177 -0.16281 0.069925 -0.890981 0.450648 0.055394 -0.981612 -0.188141 0.032254 
+-0.882585 0.426509 0.197821 -0.922324 0.37367 0.098429 -0.971812 -0.145416 0.185567 
+-0.882585 0.426509 0.197821 -0.971812 -0.145416 0.185567 -0.96711 -0.223655 0.121149 
+0.927768 0.321975 -0.188623 0.899251 0.375128 -0.225002 0.512426 0.840997 -0.173621 
+0.927768 0.321975 -0.188623 0.512426 0.840997 -0.173621 0.544667 0.808713 -0.222083 
+-0.269582 0.961036 -0.061111 0.544667 0.808713 -0.222083 0.512426 0.840997 -0.173621 
+-0.269582 0.961036 -0.061111 0.512426 0.840997 -0.173621 -0.374738 0.926853 0.022701 
+0.927768 0.321975 -0.188623 0.544667 0.808713 -0.222083 0.662276 0.719906 -0.207666 
+0.927768 0.321975 -0.188623 0.662276 0.719906 -0.207666 0.982532 0.119253 -0.14286 
+0.278429 -0.946174 -0.165019 0.813104 -0.511339 -0.278198 0.762387 -0.609662 -0.216975 
+0.278429 -0.946174 -0.165019 0.762387 -0.609662 -0.216975 0.288878 -0.951244 -0.108098 
+-0.148478 0.980497 -0.128765 0.662276 0.719906 -0.207666 0.544667 0.808713 -0.222083 
+-0.148478 0.980497 -0.128765 0.544667 0.808713 -0.222083 -0.269582 0.961036 -0.061111 
+-0.84135 0.533261 0.088106 -0.148478 0.980497 -0.128765 -0.269582 0.961036 -0.061111 
+-0.84135 0.533261 0.088106 -0.269582 0.961036 -0.061111 -0.856101 0.507388 0.098224 
+0.764882 -0.635835 -0.103297 0.867675 -0.49029 -0.082197 0.568697 0.040234 -0.821562 
+0.764882 -0.635835 -0.103297 0.568697 0.040234 -0.821562 0.638631 -0.08225 -0.765105 
+-0.028609 0.513707 -0.857489 0.638631 -0.08225 -0.765105 0.568697 0.040234 -0.821562 
+-0.028609 0.513707 -0.857489 0.568697 0.040234 -0.821562 -0.42114 0.684382 -0.595199 
+-0.827393 0.559351 -0.050474 -0.79317 0.60402 -0.077722 -0.028609 0.513707 -0.857489 
+-0.827393 0.559351 -0.050474 -0.028609 0.513707 -0.857489 -0.42114 0.684382 -0.595199 
+0.512426 0.840997 -0.173621 0.428729 0.898557 0.093739 -0.39286 0.882574 0.258312 
+0.512426 0.840997 -0.173621 -0.39286 0.882574 0.258312 -0.374738 0.926853 0.022701 
+-0.716963 -0.696478 -0.029701 -0.475938 -0.878763 -0.035479 0.376263 -0.915887 -0.139921 
+-0.716963 -0.696478 -0.029701 0.376263 -0.915887 -0.139921 0.278429 -0.946174 -0.165019 
+0.278429 -0.946174 -0.165019 0.376263 -0.915887 -0.139921 0.8696 -0.466551 -0.161635 
+0.278429 -0.946174 -0.165019 0.8696 -0.466551 -0.161635 0.813104 -0.511339 -0.278198 
+-0.981612 -0.188141 0.032254 -0.934604 -0.322752 0.149488 -0.475938 -0.878763 -0.035479 
+-0.981612 -0.188141 0.032254 -0.475938 -0.878763 -0.035479 -0.716963 -0.696478 -0.029701 
+-0.890981 0.450648 0.055394 -0.929054 0.254217 0.268759 -0.934604 -0.322752 0.149488 
+-0.890981 0.450648 0.055394 -0.934604 -0.322752 0.149488 -0.981612 -0.188141 0.032254 
+0.899251 0.375128 -0.225002 0.903143 0.426205 -0.051788 0.428729 0.898557 0.093739 
+0.899251 0.375128 -0.225002 0.428729 0.898557 0.093739 0.512426 0.840997 -0.173621 
+-0.374738 0.926853 0.022701 -0.39286 0.882574 0.258312 -0.929054 0.254217 0.268759 
+-0.374738 0.926853 0.022701 -0.929054 0.254217 0.268759 -0.890981 0.450648 0.055394 
+-0.929054 0.254217 0.268759 -0.984007 0.169265 0.055487 -0.898839 -0.434233 0.059421 
+-0.929054 0.254217 0.268759 -0.898839 -0.434233 0.059421 -0.934604 -0.322752 0.149488 
+-0.934604 -0.322752 0.149488 -0.898839 -0.434233 0.059421 -0.296429 -0.955042 -0.004976 
+-0.934604 -0.322752 0.149488 -0.296429 -0.955042 -0.004976 -0.475938 -0.878763 -0.035479 
+-0.39286 0.882574 0.258312 -0.508228 0.861203 -0.005732 -0.984007 0.169265 0.055487 
+-0.39286 0.882574 0.258312 -0.984007 0.169265 0.055487 -0.929054 0.254217 0.268759 
+0.903143 0.426205 -0.051788 0.923369 0.358927 -0.13624 0.47466 0.878918 -0.046919 
+0.903143 0.426205 -0.051788 0.47466 0.878918 -0.046919 0.428729 0.898557 0.093739 
+0.428729 0.898557 0.093739 0.47466 0.878918 -0.046919 -0.508228 0.861203 -0.005732 
+0.428729 0.898557 0.093739 -0.508228 0.861203 -0.005732 -0.39286 0.882574 0.258312 
+0.376263 -0.915887 -0.139921 0.452028 -0.883901 -0.119955 0.877915 -0.448194 -0.168485 
+0.376263 -0.915887 -0.139921 0.877915 -0.448194 -0.168485 0.8696 -0.466551 -0.161635 
+-0.475938 -0.878763 -0.035479 -0.296429 -0.955042 -0.004976 0.452028 -0.883901 -0.119955 
+-0.475938 -0.878763 -0.035479 0.452028 -0.883901 -0.119955 0.376263 -0.915887 -0.139921 
+-0.898839 -0.434233 0.059421 -0.962741 -0.270388 -0.004457 -0.568789 -0.821787 0.033848 
+-0.898839 -0.434233 0.059421 -0.568789 -0.821787 0.033848 -0.296429 -0.955042 -0.004976 
+-0.508228 0.861203 -0.005732 -0.377962 0.915405 -0.138485 -0.899754 0.422606 -0.108843 
+-0.508228 0.861203 -0.005732 -0.899754 0.422606 -0.108843 -0.984007 0.169265 0.055487 
+0.923369 0.358927 -0.13624 0.976453 0.053596 -0.208966 0.730177 0.658203 -0.183332 
+0.923369 0.358927 -0.13624 0.730177 0.658203 -0.183332 0.47466 0.878918 -0.046919 
+0.47466 0.878918 -0.046919 0.730177 0.658203 -0.183332 -0.377962 0.915405 -0.138485 
+0.47466 0.878918 -0.046919 -0.377962 0.915405 -0.138485 -0.508228 0.861203 -0.005732 
+0.452028 -0.883901 -0.119955 0.427079 -0.904045 -0.017504 0.897898 -0.422578 -0.123321 
+0.452028 -0.883901 -0.119955 0.897898 -0.422578 -0.123321 0.877915 -0.448194 -0.168485 
+-0.296429 -0.955042 -0.004976 -0.568789 -0.821787 0.033848 0.427079 -0.904045 -0.017504 
+-0.296429 -0.955042 -0.004976 0.427079 -0.904045 -0.017504 0.452028 -0.883901 -0.119955 
+-0.984007 0.169265 0.055487 -0.899754 0.422606 -0.108843 -0.962741 -0.270388 -0.004457 
+-0.984007 0.169265 0.055487 -0.962741 -0.270388 -0.004457 -0.898839 -0.434233 0.059421 
+-0.108274 -0.492363 0.863629 0.130127 -0.516738 0.846197 0.969273 0.237656 0.063481 
+-0.108274 -0.492363 0.863629 0.969273 0.237656 0.063481 0.867675 -0.49029 -0.082197 
+-0.069116 -0.560452 0.825298 -0.248064 -0.806931 0.536028 0.902477 -0.207789 0.377304 
+-0.069116 -0.560452 0.825298 0.902477 -0.207789 0.377304 0.966796 0.220543 0.129097 
+-0.248064 -0.806931 0.536028 -0.558821 -0.031098 -0.828705 0.254972 0.230521 -0.939068 
+-0.248064 -0.806931 0.536028 0.254972 0.230521 -0.939068 0.902477 -0.207789 0.377304 
+-0.833754 -0.294657 -0.466939 0.418047 -0.757793 -0.500986 0.509711 0.174339 -0.842497 
+-0.833754 -0.294657 -0.466939 0.509711 0.174339 -0.842497 0.311317 0.430817 -0.847041 
+-0.069116 -0.560452 0.825298 0.130127 -0.516738 0.846197 0.418047 -0.757793 -0.500986 
+-0.069116 -0.560452 0.825298 0.418047 -0.757793 -0.500986 -0.833754 -0.294657 -0.466939 
+0.966796 0.220543 0.129097 0.902477 -0.207789 0.377304 0.254972 0.230521 -0.939068 
+0.966796 0.220543 0.129097 0.254972 0.230521 -0.939068 0.311317 0.430817 -0.847041 
+0.130127 -0.516738 0.846197 -0.069116 -0.560452 0.825298 0.966796 0.220543 0.129097 
+0.130127 -0.516738 0.846197 0.966796 0.220543 0.129097 0.969273 0.237656 0.063481 
+-0.558821 -0.031098 -0.828705 -0.833754 -0.294657 -0.466939 0.311317 0.430817 -0.847041 
+-0.558821 -0.031098 -0.828705 0.311317 0.430817 -0.847041 0.254972 0.230521 -0.939068 
+-0.248064 -0.806931 0.536028 -0.069116 -0.560452 0.825298 -0.833754 -0.294657 -0.466939 
+-0.248064 -0.806931 0.536028 -0.833754 -0.294657 -0.466939 -0.558821 -0.031098 -0.828705 
+0.969273 0.237656 0.063481 0.966796 0.220543 0.129097 0.311317 0.430817 -0.847041 
+0.969273 0.237656 0.063481 0.311317 0.430817 -0.847041 0.509711 0.174339 -0.842497 
+0.130127 -0.516738 0.846197 -0.417748 -0.371282 0.829238 -0.464073 -0.499497 0.731532 
+0.130127 -0.516738 0.846197 -0.464073 -0.499497 0.731532 0.418047 -0.757793 -0.500986 
+-0.843021 -0.087194 0.530767 -0.417748 -0.371282 0.829238 -0.857362 0.156642 0.4903 
+-0.843021 -0.087194 0.530767 -0.857362 0.156642 0.4903 -0.827393 0.559351 -0.050474 
+-0.108274 -0.492363 0.863629 -0.857362 0.156642 0.4903 -0.417748 -0.371282 0.829238 
+-0.108274 -0.492363 0.863629 -0.417748 -0.371282 0.829238 0.130127 -0.516738 0.846197 
+0.867675 -0.49029 -0.082197 0.969273 0.237656 0.063481 0.509711 0.174339 -0.842497 
+0.867675 -0.49029 -0.082197 0.509711 0.174339 -0.842497 0.700407 0.120909 -0.703428 
+-0.827393 0.559351 -0.050474 -0.42114 0.684382 -0.595199 -0.845136 0.532415 -0.047756 
+-0.827393 0.559351 -0.050474 -0.845136 0.532415 -0.047756 -0.843021 -0.087194 0.530767 
+-0.845136 0.532415 -0.047756 -0.875773 0.481092 0.039647 -0.894583 -0.040223 0.445089 
+-0.845136 0.532415 -0.047756 -0.894583 -0.040223 0.445089 -0.843021 -0.087194 0.530767 
+0.343521 0.621174 -0.70437 -0.845136 0.532415 -0.047756 -0.42114 0.684382 -0.595199 
+0.343521 0.621174 -0.70437 -0.42114 0.684382 -0.595199 0.568697 0.040234 -0.821562 
+0.343521 0.621174 -0.70437 0.577074 0.158436 -0.801176 -0.875773 0.481092 0.039647 
+0.343521 0.621174 -0.70437 -0.875773 0.481092 0.039647 -0.845136 0.532415 -0.047756 
+0.700407 0.120909 -0.703428 0.343521 0.621174 -0.70437 0.568697 0.040234 -0.821562 
+0.700407 0.120909 -0.703428 0.568697 0.040234 -0.821562 0.867675 -0.49029 -0.082197 
+0.700407 0.120909 -0.703428 0.661403 -0.017614 -0.749824 0.577074 0.158436 -0.801176 
+0.700407 0.120909 -0.703428 0.577074 0.158436 -0.801176 0.343521 0.621174 -0.70437 
+0.661403 -0.017614 -0.749824 0.700407 0.120909 -0.703428 0.509711 0.174339 -0.842497 
+0.661403 -0.017614 -0.749824 0.509711 0.174339 -0.842497 0.418047 -0.757793 -0.500986 
+0.661403 -0.017614 -0.749824 0.822804 0.071281 -0.563837 0.677241 0.361263 -0.640963 
+0.661403 -0.017614 -0.749824 0.677241 0.361263 -0.640963 0.577074 0.158436 -0.801176 
+-0.875773 0.481092 0.039647 -0.92555 0.342691 0.160995 -0.904822 -0.056387 0.422039 
+-0.875773 0.481092 0.039647 -0.904822 -0.056387 0.422039 -0.894583 -0.040223 0.445089 
+-0.570265 -0.400932 0.716974 -0.904822 -0.056387 0.422039 -0.872712 -0.216082 0.437815 
+-0.570265 -0.400932 0.716974 -0.872712 -0.216082 0.437815 -0.597787 -0.526008 0.604951 
+0.577074 0.158436 -0.801176 0.677241 0.361263 -0.640963 -0.92555 0.342691 0.160995 
+0.577074 0.158436 -0.801176 -0.92555 0.342691 0.160995 -0.875773 0.481092 0.039647 
+-0.464073 -0.499497 0.731532 -0.570265 -0.400932 0.716974 0.922645 -0.225375 -0.312941 
+-0.464073 -0.499497 0.731532 0.922645 -0.225375 -0.312941 0.418047 -0.757793 -0.500986 
+0.418047 -0.757793 -0.500986 0.922645 -0.225375 -0.312941 0.822804 0.071281 -0.563837 
+0.418047 -0.757793 -0.500986 0.822804 0.071281 -0.563837 0.661403 -0.017614 -0.749824 
+0.677241 0.361263 -0.640963 0.774817 0.151138 -0.613853 -0.974593 0.144547 0.171099 
+0.677241 0.361263 -0.640963 -0.974593 0.144547 0.171099 -0.92555 0.342691 0.160995 
+-0.894583 -0.040223 0.445089 -0.904822 -0.056387 0.422039 -0.570265 -0.400932 0.716974 
+-0.894583 -0.040223 0.445089 -0.570265 -0.400932 0.716974 -0.464073 -0.499497 0.731532 
+0.922645 -0.225375 -0.312941 0.935944 0.128233 -0.327972 0.842129 0.12548 -0.524475 
+0.922645 -0.225375 -0.312941 0.842129 0.12548 -0.524475 0.822804 0.071281 -0.563837 
+-0.570265 -0.400932 0.716974 -0.597787 -0.526008 0.604951 0.935944 0.128233 -0.327972 
+-0.570265 -0.400932 0.716974 0.935944 0.128233 -0.327972 0.922645 -0.225375 -0.312941 
+0.822804 0.071281 -0.563837 0.842129 0.12548 -0.524475 0.774817 0.151138 -0.613853 
+0.822804 0.071281 -0.563837 0.774817 0.151138 -0.613853 0.677241 0.361263 -0.640963 
+0.842129 0.12548 -0.524475 0.771241 0.189259 -0.607756 0.735625 0.048428 -0.675655 
+0.842129 0.12548 -0.524475 0.735625 0.048428 -0.675655 0.774817 0.151138 -0.613853 
+0.774817 0.151138 -0.613853 0.735625 0.048428 -0.675655 -0.988614 -0.070773 0.132791 
+0.774817 0.151138 -0.613853 -0.988614 -0.070773 0.132791 -0.974593 0.144547 0.171099 
+-0.843021 -0.087194 0.530767 -0.894583 -0.040223 0.445089 -0.464073 -0.499497 0.731532 
+-0.843021 -0.087194 0.530767 -0.464073 -0.499497 0.731532 -0.417748 -0.371282 0.829238 
+0.935944 0.128233 -0.327972 0.849817 -0.255512 -0.461005 0.771241 0.189259 -0.607756 
+0.935944 0.128233 -0.327972 0.771241 0.189259 -0.607756 0.842129 0.12548 -0.524475 
+-0.597787 -0.526008 0.604951 -0.6353 -0.645845 0.423413 0.849817 -0.255512 -0.461005 
+-0.597787 -0.526008 0.604951 0.849817 -0.255512 -0.461005 0.935944 0.128233 -0.327972 
+-0.800965 -0.561161 0.208693 -0.988614 -0.070773 0.132791 0.735625 0.048428 -0.675655 
+-0.800965 -0.561161 0.208693 0.735625 0.048428 -0.675655 0.771241 0.189259 -0.607756 
+0.849817 -0.255512 -0.461005 -0.6353 -0.645845 0.423413 -0.800965 -0.561161 0.208693 
+0.849817 -0.255512 -0.461005 -0.800965 -0.561161 0.208693 0.771241 0.189259 -0.607756 
+-0.904822 -0.056387 0.422039 -0.92555 0.342691 0.160995 -0.974593 0.144547 0.171099 
+-0.904822 -0.056387 0.422039 -0.974593 0.144547 0.171099 -0.872712 -0.216082 0.437815 
+-0.872712 -0.216082 0.437815 -0.974593 0.144547 0.171099 -0.988614 -0.070773 0.132791 
+-0.872712 -0.216082 0.437815 -0.988614 -0.070773 0.132791 -0.800965 -0.561161 0.208693 
+-0.597787 -0.526008 0.604951 -0.872712 -0.216082 0.437815 -0.800965 -0.561161 0.208693 
+-0.597787 -0.526008 0.604951 -0.800965 -0.561161 0.208693 -0.6353 -0.645845 0.423413 
+-0.568789 -0.821787 0.033848 -0.483439 -0.636016 0.601474 0.882887 -0.362153 0.298924 
+-0.568789 -0.821787 0.033848 0.882887 -0.362153 0.298924 0.427079 -0.904045 -0.017504 
+-0.962741 -0.270388 -0.004457 -0.930182 -0.164467 0.328196 -0.483439 -0.636016 0.601474 
+-0.962741 -0.270388 -0.004457 -0.483439 -0.636016 0.601474 -0.568789 -0.821787 0.033848 
+-0.483439 -0.636016 0.601474 -0.302369 -0.439489 0.845827 0.78022 -0.187848 0.596632 
+-0.483439 -0.636016 0.601474 0.78022 -0.187848 0.596632 0.882887 -0.362153 0.298924 
+-0.930182 -0.164467 0.328196 -0.959247 -0.048495 0.278377 -0.302369 -0.439489 0.845827 
+-0.930182 -0.164467 0.328196 -0.302369 -0.439489 0.845827 -0.483439 -0.636016 0.601474 
+-0.302369 -0.439489 0.845827 -0.325698 -0.303352 0.895488 0.57967 -0.198997 0.790179 
+-0.302369 -0.439489 0.845827 0.57967 -0.198997 0.790179 0.78022 -0.187848 0.596632 
+-0.959247 -0.048495 0.278377 -0.686386 -0.113078 0.718392 -0.325698 -0.303352 0.895488 
+-0.959247 -0.048495 0.278377 -0.325698 -0.303352 0.895488 -0.302369 -0.439489 0.845827 
+-0.325698 -0.303352 0.895488 -0.309032 -0.41932 0.853622 0.513055 -0.358821 0.779758 
+-0.325698 -0.303352 0.895488 0.513055 -0.358821 0.779758 0.57967 -0.198997 0.790179 
+-0.686386 -0.113078 0.718392 -0.599233 -0.406636 0.689613 -0.309032 -0.41932 0.853622 
+-0.686386 -0.113078 0.718392 -0.309032 -0.41932 0.853622 -0.325698 -0.303352 0.895488 
+0.730177 0.658203 -0.183332 0.78449 0.61336 0.091465 -0.599802 0.785304 0.153412 
+0.730177 0.658203 -0.183332 -0.599802 0.785304 0.153412 -0.377962 0.915405 -0.138485 
+0.976453 0.053596 -0.208966 0.988881 0.144437 0.035402 0.78449 0.61336 0.091465 
+0.976453 0.053596 -0.208966 0.78449 0.61336 0.091465 0.730177 0.658203 -0.183332 
+-0.377962 0.915405 -0.138485 -0.599802 0.785304 0.153412 -0.943697 0.318977 0.087693 
+-0.377962 0.915405 -0.138485 -0.943697 0.318977 0.087693 -0.899754 0.422606 -0.108843 
+-0.962741 -0.270388 -0.004457 -0.899754 0.422606 -0.108843 -0.943697 0.318977 0.087693 
+-0.962741 -0.270388 -0.004457 -0.943697 0.318977 0.087693 -0.930182 -0.164467 0.328196 
+0.882887 -0.362153 0.298924 0.99777 -0.066745 -0.001016 0.897898 -0.422578 -0.123321 
+0.882887 -0.362153 0.298924 0.897898 -0.422578 -0.123321 0.427079 -0.904045 -0.017504 
+-0.599802 0.785304 0.153412 -0.423252 0.841271 -0.336334 -0.920436 0.332641 -0.205298 
+-0.599802 0.785304 0.153412 -0.920436 0.332641 -0.205298 -0.943697 0.318977 0.087693 
+0.988881 0.144437 0.035402 0.977141 0.082629 -0.195879 0.820428 0.533314 -0.206094 
+0.988881 0.144437 0.035402 0.820428 0.533314 -0.206094 0.78449 0.61336 0.091465 
+0.78449 0.61336 0.091465 0.820428 0.533314 -0.206094 -0.423252 0.841271 -0.336334 
+0.78449 0.61336 0.091465 -0.423252 0.841271 -0.336334 -0.599802 0.785304 0.153412 
+-0.959247 -0.048495 0.278377 -0.930182 -0.164467 0.328196 -0.943697 0.318977 0.087693 
+-0.959247 -0.048495 0.278377 -0.943697 0.318977 0.087693 -0.920436 0.332641 -0.205298 
+0.882887 -0.362153 0.298924 0.78022 -0.187848 0.596632 0.999231 0.00171 -0.039175 
+0.882887 -0.362153 0.298924 0.999231 0.00171 -0.039175 0.99777 -0.066745 -0.001016 
+0.820428 0.533314 -0.206094 0.551381 0.271192 -0.788945 -0.17884 0.264018 -0.947793 
+0.820428 0.533314 -0.206094 -0.17884 0.264018 -0.947793 -0.423252 0.841271 -0.336334 
+0.513055 -0.358821 0.779758 0.489721 -0.453659 -0.744558 0.328067 0.22003 -0.918672 
+0.513055 -0.358821 0.779758 0.328067 0.22003 -0.918672 0.57967 -0.198997 0.790179 
+-0.920436 0.332641 -0.205298 -0.399682 0.115398 -0.909361 -0.413267 0.051754 -0.909138 
+-0.920436 0.332641 -0.205298 -0.413267 0.051754 -0.909138 -0.959247 -0.048495 0.278377 
+-0.423252 0.841271 -0.336334 -0.17884 0.264018 -0.947793 -0.399682 0.115398 -0.909361 
+-0.423252 0.841271 -0.336334 -0.399682 0.115398 -0.909361 -0.920436 0.332641 -0.205298 
+0.57967 -0.198997 0.790179 0.328067 0.22003 -0.918672 0.436215 0.100591 -0.894203 
+0.57967 -0.198997 0.790179 0.436215 0.100591 -0.894203 0.78022 -0.187848 0.596632 
+0.78022 -0.187848 0.596632 0.436215 0.100591 -0.894203 0.422009 -0.124105 -0.898057 
+0.78022 -0.187848 0.596632 0.422009 -0.124105 -0.898057 0.999231 0.00171 -0.039175 
+0.977141 0.082629 -0.195879 0.152411 -0.106298 -0.982584 0.551381 0.271192 -0.788945 
+0.977141 0.082629 -0.195879 0.551381 0.271192 -0.788945 0.820428 0.533314 -0.206094 
+-0.686386 -0.113078 0.718392 0.054879 -0.014078 -0.998394 -0.047079 0.124248 -0.991134 
+-0.686386 -0.113078 0.718392 -0.047079 0.124248 -0.991134 -0.599233 -0.406636 0.689613 
+-0.959247 -0.048495 0.278377 -0.413267 0.051754 -0.909138 0.054879 -0.014078 -0.998394 
+-0.959247 -0.048495 0.278377 0.054879 -0.014078 -0.998394 -0.686386 -0.113078 0.718392 
+-0.599233 -0.406636 0.689613 -0.047079 0.124248 -0.991134 -0.16137 -0.257915 -0.952596 
+-0.599233 -0.406636 0.689613 -0.16137 -0.257915 -0.952596 -0.309032 -0.41932 0.853622 
+-0.309032 -0.41932 0.853622 -0.16137 -0.257915 -0.952596 0.489721 -0.453659 -0.744558 
+-0.309032 -0.41932 0.853622 0.489721 -0.453659 -0.744558 0.513055 -0.358821 0.779758 
+-0.16137 -0.257915 -0.952596 -0.047079 0.124248 -0.991134 0.328067 0.22003 -0.918672 
+-0.16137 -0.257915 -0.952596 0.328067 0.22003 -0.918672 0.489721 -0.453659 -0.744558 
+0.436215 0.100591 -0.894203 0.328067 0.22003 -0.918672 -0.047079 0.124248 -0.991134 
+0.436215 0.100591 -0.894203 -0.047079 0.124248 -0.991134 0.054879 -0.014078 -0.998394 
+0.054879 -0.014078 -0.998394 -0.413267 0.051754 -0.909138 0.422009 -0.124105 -0.898057 
+0.054879 -0.014078 -0.998394 0.422009 -0.124105 -0.898057 0.436215 0.100591 -0.894203 
+-0.564959 -0.824971 -0.015659 -0.513045 -0.849714 0.121534 -0.204727 -0.960801 -0.186943 
+-0.564959 -0.824971 -0.015659 -0.204727 -0.960801 -0.186943 -0.394266 -0.908685 -0.137279 
+-0.980338 0.085995 0.177602 -0.84135 0.533261 0.088106 -0.856101 0.507388 0.098224 
+-0.980338 0.085995 0.177602 -0.856101 0.507388 0.098224 -0.984177 -0.16281 0.069925 
+0.762387 -0.609662 -0.216975 0.813104 -0.511339 -0.278198 0.899251 0.375128 -0.225002 
+0.762387 -0.609662 -0.216975 0.899251 0.375128 -0.225002 0.927768 0.321975 -0.188623 
+-0.67142 -0.724319 0.156705 -0.980338 0.085995 0.177602 -0.984177 -0.16281 0.069925 
+-0.67142 -0.724319 0.156705 -0.984177 -0.16281 0.069925 -0.476793 -0.879005 0.00429 
+0.813104 -0.511339 -0.278198 0.8696 -0.466551 -0.161635 0.903143 0.426205 -0.051788 
+0.813104 -0.511339 -0.278198 0.903143 0.426205 -0.051788 0.899251 0.375128 -0.225002 
+0.8696 -0.466551 -0.161635 0.877915 -0.448194 -0.168485 0.923369 0.358927 -0.13624 
+0.8696 -0.466551 -0.161635 0.923369 0.358927 -0.13624 0.903143 0.426205 -0.051788 
+0.877915 -0.448194 -0.168485 0.897898 -0.422578 -0.123321 0.976453 0.053596 -0.208966 
+0.877915 -0.448194 -0.168485 0.976453 0.053596 -0.208966 0.923369 0.358927 -0.13624 
+0.897898 -0.422578 -0.123321 0.99777 -0.066745 -0.001016 0.988881 0.144437 0.035402 
+0.897898 -0.422578 -0.123321 0.988881 0.144437 0.035402 0.976453 0.053596 -0.208966 
+0.99777 -0.066745 -0.001016 0.999231 0.00171 -0.039175 0.977141 0.082629 -0.195879 
+0.99777 -0.066745 -0.001016 0.977141 0.082629 -0.195879 0.988881 0.144437 0.035402 
+0.999231 0.00171 -0.039175 0.422009 -0.124105 -0.898057 0.152411 -0.106298 -0.982584 
+0.999231 0.00171 -0.039175 0.152411 -0.106298 -0.982584 0.977141 0.082629 -0.195879 
+0.152411 -0.106298 -0.982584 0.422009 -0.124105 -0.898057 -0.413267 0.051754 -0.909138 
+0.152411 -0.106298 -0.982584 -0.413267 0.051754 -0.909138 -0.399682 0.115398 -0.909361 
+-0.17884 0.264018 -0.947793 0.551381 0.271192 -0.788945 0.152411 -0.106298 -0.982584 
+-0.17884 0.264018 -0.947793 0.152411 -0.106298 -0.982584 -0.399682 0.115398 -0.909361 
+-0.467768 -0.872242 0.142784 -0.474076 -0.871852 -0.122989 -0.257478 -0.492351 0.831442 
+-0.467768 -0.872242 0.142784 -0.257478 -0.492351 0.831442 -0.075979 -0.205793 0.975641 
+-0.545412 -0.775243 -0.318629 -0.575755 -0.78372 -0.233002 -0.124026 -0.425119 -0.8966 
+-0.545412 -0.775243 -0.318629 -0.124026 -0.425119 -0.8966 -0.170432 -0.401744 -0.899753 
+-0.474076 -0.871852 -0.122989 1e-06 -0.972905 -0.231204 6e-06 -0.885133 0.465339 
+-0.474076 -0.871852 -0.122989 6e-06 -0.885133 0.465339 -0.257478 -0.492351 0.831442 
+-0.575755 -0.78372 -0.233002 -0.467768 -0.872242 0.142784 -0.075979 -0.205793 0.975641 
+-0.575755 -0.78372 -0.233002 -0.075979 -0.205793 0.975641 -0.124026 -0.425119 -0.8966 
+-0.406483 -0.846536 -0.343727 -0.545412 -0.775243 -0.318629 -0.170432 -0.401744 -0.899753 
+-0.406483 -0.846536 -0.343727 -0.170432 -0.401744 -0.899753 -0.16511 -0.374839 -0.912269 
+-0.075979 -0.205793 0.975641 -0.257478 -0.492351 0.831442 0.012145 0.171437 0.98512 
+-0.075979 -0.205793 0.975641 0.012145 0.171437 0.98512 0.063022 -0.845408 -0.53039 
+-0.16511 -0.374839 -0.912269 -0.170432 -0.401744 -0.899753 -0.023323 -0.258531 -0.965721 
+-0.16511 -0.374839 -0.912269 -0.023323 -0.258531 -0.965721 -0.152647 0.003463 -0.988275 
+-6e-06 -0.395924 -0.918283 -0.16511 -0.374839 -0.912269 -0.152647 0.003463 -0.988275 
+-6e-06 -0.395924 -0.918283 -0.152647 0.003463 -0.988275 2e-06 -0.444663 -0.895698 
+-0.170432 -0.401744 -0.899753 -0.124026 -0.425119 -0.8966 0.145433 -0.228035 -0.96273 
+-0.170432 -0.401744 -0.899753 0.145433 -0.228035 -0.96273 -0.023323 -0.258531 -0.965721 
+-0.124026 -0.425119 -0.8966 -0.075979 -0.205793 0.975641 0.063022 -0.845408 -0.53039 
+-0.124026 -0.425119 -0.8966 0.063022 -0.845408 -0.53039 0.145433 -0.228035 -0.96273 
+-0.922324 0.37367 0.098429 -0.84135 0.533261 0.088106 -0.980338 0.085995 0.177602 
+-0.922324 0.37367 0.098429 -0.980338 0.085995 0.177602 -0.971812 -0.145416 0.185567 
+-0.971812 -0.145416 0.185567 -0.980338 0.085995 0.177602 -0.67142 -0.724319 0.156705 
+-0.971812 -0.145416 0.185567 -0.67142 -0.724319 0.156705 -0.513045 -0.849714 0.121534 
+-0.204727 -0.960801 -0.186943 -0.177439 -0.921455 -0.345595 -0.266367 -0.941791 -0.205131 
+-0.204727 -0.960801 -0.186943 -0.266367 -0.941791 -0.205131 -0.394266 -0.908685 -0.137279 
+-0.234592 0.963244 0.130872 -0.148478 0.980497 -0.128765 -0.84135 0.533261 0.088106 
+-0.234592 0.963244 0.130872 -0.84135 0.533261 0.088106 -0.922324 0.37367 0.098429 
+-0.012141 -0.997837 0.064604 -0.67142 -0.724319 0.156705 -0.476793 -0.879005 0.00429 
+-0.012141 -0.997837 0.064604 -0.476793 -0.879005 0.00429 0.288878 -0.951244 -0.108098 
+-0.234592 0.963244 0.130872 0.3469 0.937893 0.004144 0.662276 0.719906 -0.207666 
+-0.234592 0.963244 0.130872 0.662276 0.719906 -0.207666 -0.148478 0.980497 -0.128765 
+-0.26538 0.876907 0.400759 -0.518351 0.809626 0.275351 0.113054 0.969377 0.218009 
+-0.26538 0.876907 0.400759 0.113054 0.969377 0.218009 0.271698 0.925219 0.264859 
+0.563663 -0.80947 -0.164447 0.762387 -0.609662 -0.216975 0.927768 0.321975 -0.188623 
+0.563663 -0.80947 -0.164447 0.927768 0.321975 -0.188623 0.982532 0.119253 -0.14286 
+-0.204727 -0.960801 -0.186943 -0.012141 -0.997837 0.064604 0.563663 -0.80947 -0.164447 
+-0.204727 -0.960801 -0.186943 0.563663 -0.80947 -0.164447 -0.177439 -0.921455 -0.345595 
+0.288878 -0.951244 -0.108098 0.762387 -0.609662 -0.216975 0.563663 -0.80947 -0.164447 
+0.288878 -0.951244 -0.108098 0.563663 -0.80947 -0.164447 -0.012141 -0.997837 0.064604 
+-0.234592 0.963244 0.130872 -0.26538 0.876907 0.400759 0.271698 0.925219 0.264859 
+-0.234592 0.963244 0.130872 0.271698 0.925219 0.264859 0.3469 0.937893 0.004144 
+-0.518351 0.809626 0.275351 -0.590672 0.799482 0.109254 -0.152916 0.971929 -0.178802 
+-0.518351 0.809626 0.275351 -0.152916 0.971929 -0.178802 0.113054 0.969377 0.218009 
+-0.91777 0.356113 -0.175733 0.012261 0.836246 -0.548218 -0.152916 0.971929 -0.178802 
+-0.91777 0.356113 -0.175733 -0.152916 0.971929 -0.178802 -0.590672 0.799482 0.109254 
+-6e-06 -0.618853 -0.785507 -1e-06 -0.910204 -0.414159 0.543674 -0.838873 -0.026645 
+-6e-06 -0.618853 -0.785507 0.543674 -0.838873 -0.026645 0.602673 -0.457406 -0.653885 
+0.543674 -0.838873 -0.026645 -1e-06 -0.910204 -0.414159 4e-06 -0.992431 0.122802 
+0.543674 -0.838873 -0.026645 4e-06 -0.992431 0.122802 0.373518 -0.89631 0.238982 
+0.715428 -0.652929 -0.248689 3e-06 -0.981923 -0.189284 -6e-06 -0.618853 -0.785507 
+0.715428 -0.652929 -0.248689 -6e-06 -0.618853 -0.785507 0.602673 -0.457406 -0.653885 
+0.584991 -0.741818 0.327858 0.631678 -0.664595 0.39912 7e-06 -0.855225 0.518257 
+0.584991 -0.741818 0.327858 7e-06 -0.855225 0.518257 1e-05 -0.911741 0.410765 
+0.337905 -0.934588 -0.111196 0.348874 -0.933082 0.087431 3e-06 -0.997292 0.073548 
+0.337905 -0.934588 -0.111196 3e-06 -0.997292 0.073548 5e-06 -0.978984 0.203935 
+0.584991 -0.741818 0.327858 1e-05 -0.911741 0.410765 3e-06 -0.981923 -0.189284 
+0.584991 -0.741818 0.327858 3e-06 -0.981923 -0.189284 0.715428 -0.652929 -0.248689 
+7e-06 -0.855225 0.518257 0.631678 -0.664595 0.39912 0.337905 -0.934588 -0.111196 
+7e-06 -0.855225 0.518257 0.337905 -0.934588 -0.111196 5e-06 -0.978984 0.203935 
+-6e-06 -0.45012 -0.892968 1e-06 -0.986329 -0.164789 0.518011 -0.801463 -0.298867 
+-6e-06 -0.45012 -0.892968 0.518011 -0.801463 -0.298867 0.587459 -0.386793 -0.710833 
+0.486236 -0.397332 -0.778268 -7e-06 -0.468007 -0.883725 -6e-06 -0.45012 -0.892968 
+0.486236 -0.397332 -0.778268 -6e-06 -0.45012 -0.892968 0.587459 -0.386793 -0.710833 
+0.481758 -0.839145 -0.252479 0.474078 -0.87185 -0.122997 1e-06 -0.972905 -0.231204 
+0.481758 -0.839145 -0.252479 1e-06 -0.972905 -0.231204 0 -0.978551 -0.206004 
+0.35387 -0.903987 0.239965 5e-06 -0.93434 0.356384 3e-06 -0.997292 0.073548 
+0.35387 -0.903987 0.239965 3e-06 -0.997292 0.073548 0.348874 -0.933082 0.087431 
+5e-06 -0.93434 0.356384 0.35387 -0.903987 0.239965 0.389691 -0.673093 0.628559 
+5e-06 -0.93434 0.356384 0.389691 -0.673093 0.628559 9e-06 -0.736409 0.676536 
+0.413086 -0.251082 0.875396 0.192696 0.095302 0.976619 9e-06 0.002713 0.999996 
+0.413086 -0.251082 0.875396 9e-06 0.002713 0.999996 9e-06 -0.410924 0.91167 
+0.192696 0.095302 0.976619 0.209437 0.494896 0.843335 5e-06 0.402826 0.915277 
+0.192696 0.095302 0.976619 5e-06 0.402826 0.915277 9e-06 0.002713 0.999996 
+0.349242 0.926109 -0.142659 0.236611 0.953639 -0.185977 -5e-06 0.971901 -0.235392 
+0.349242 0.926109 -0.142659 -5e-06 0.971901 -0.235392 -3e-06 0.995714 -0.092489 
+0.324346 0.820394 0.470907 0.385971 0.919932 0.068936 -1e-06 0.988451 0.151539 
+0.324346 0.820394 0.470907 -1e-06 0.988451 0.151539 2e-06 0.809493 0.587129 
+0.209437 0.494896 0.843335 0.324346 0.820394 0.470907 2e-06 0.809493 0.587129 
+0.209437 0.494896 0.843335 2e-06 0.809493 0.587129 5e-06 0.402826 0.915277 
+0.385971 0.919932 0.068936 0.349242 0.926109 -0.142659 -3e-06 0.995714 -0.092489 
+0.385971 0.919932 0.068936 -3e-06 0.995714 -0.092489 -1e-06 0.988451 0.151539 
+0.389691 -0.673093 0.628559 0.413086 -0.251082 0.875396 9e-06 -0.410924 0.91167 
+0.389691 -0.673093 0.628559 9e-06 -0.410924 0.91167 9e-06 -0.736409 0.676536 
+1e-06 -0.986329 -0.164789 5e-06 -0.92965 0.368443 0.373704 -0.900114 0.223923 
+1e-06 -0.986329 -0.164789 0.373704 -0.900114 0.223923 0.518011 -0.801463 -0.298867 
+5e-06 -0.92965 0.368443 6e-06 -0.884931 0.465723 0.169275 -0.823659 0.541231 
+5e-06 -0.92965 0.368443 0.169275 -0.823659 0.541231 0.373704 -0.900114 0.223923 
+-0.000539 0.982003 0.188866 -0.052836 0.977633 0.203575 0.025858 0.836488 0.547374 
+-0.000539 0.982003 0.188866 0.025858 0.836488 0.547374 0.001037 0.882289 0.470708 
+0.001037 0.882289 0.470708 0.025858 0.836488 0.547374 -0.022474 0.939725 0.341193 
+0.001037 0.882289 0.470708 -0.022474 0.939725 0.341193 -0 0.971344 0.237677 
+-1e-06 0.992342 0.123524 0.111679 0.98828 0.104071 0.076926 0.996795 0.021977 
+-1e-06 0.992342 0.123524 0.076926 0.996795 0.021977 -2e-06 0.999698 0.024563 
+0.076926 0.996795 0.021977 0.346205 0.845486 -0.406566 -5e-06 0.944139 -0.329548 
+0.076926 0.996795 0.021977 -5e-06 0.944139 -0.329548 -2e-06 0.999698 0.024563 
+0.116223 -0.986891 -0.111977 2e-06 -0.995633 -0.09335 1e-06 -0.981082 -0.193594 
+0.116223 -0.986891 -0.111977 1e-06 -0.981082 -0.193594 0.195264 -0.964933 -0.175434 
+0.195264 -0.964933 -0.175434 1e-06 -0.981082 -0.193594 0.000139 -0.99612 -0.088 
+0.195264 -0.964933 -0.175434 0.000139 -0.99612 -0.088 0.219714 -0.969825 -0.105666 
+0.219714 -0.969825 -0.105666 0.000139 -0.99612 -0.088 0.000275 -0.986724 -0.162403 
+0.219714 -0.969825 -0.105666 0.000275 -0.986724 -0.162403 0.266644 -0.941747 -0.204975 
+-0.266017 0.926195 0.267202 -0.334428 0.94242 -0.001663 -2e-06 0.996084 0.088412 
+-0.266017 0.926195 0.267202 -2e-06 0.996084 0.088412 -0 0.97023 0.242184 
+0.119769 -0.979393 0.162618 0.215455 -0.890885 0.39988 6e-06 -0.894018 0.448032 
+0.119769 -0.979393 0.162618 6e-06 -0.894018 0.448032 3e-06 -0.998337 0.057641 
+-0 0.971344 0.237677 -0.022474 0.939725 0.341193 0.111679 0.98828 0.104071 
+-0 0.971344 0.237677 0.111679 0.98828 0.104071 -1e-06 0.992342 0.123524 
+0.116223 -0.986891 -0.111977 0.119769 -0.979393 0.162618 3e-06 -0.998337 0.057641 
+0.116223 -0.986891 -0.111977 3e-06 -0.998337 0.057641 2e-06 -0.995633 -0.09335 
+0.474078 -0.87185 -0.122997 0.257494 -0.492349 0.831438 6e-06 -0.885133 0.465339 
+0.474078 -0.87185 -0.122997 6e-06 -0.885133 0.465339 1e-06 -0.972905 -0.231204 
+-1e-06 -0.934468 -0.356048 -6e-06 -0.395924 -0.918283 0.165096 -0.374835 -0.912273 
+-1e-06 -0.934468 -0.356048 0.165096 -0.374835 -0.912273 0.406482 -0.846534 -0.343734 
+0.257494 -0.492349 0.831438 -0.015348 0.157274 0.987436 6e-06 0.075914 0.997114 
+0.257494 -0.492349 0.831438 6e-06 0.075914 0.997114 6e-06 -0.885133 0.465339 
+-6e-06 -0.395924 -0.918283 2e-06 -0.444663 -0.895698 0.141275 0.007086 -0.989945 
+-6e-06 -0.395924 -0.918283 0.141275 0.007086 -0.989945 0.165096 -0.374835 -0.912273 
+0.177657 -0.921486 -0.3454 0.266644 -0.941747 -0.204975 0.000275 -0.986724 -0.162403 
+0.177657 -0.921486 -0.3454 0.000275 -0.986724 -0.162403 0.000107 -0.936053 -0.35186 
+-8e-06 -0.403259 -0.915086 -0.981974 0.119821 -0.146185 -0.563658 -0.809482 -0.164405 
+-8e-06 -0.403259 -0.915086 -0.563658 -0.809482 -0.164405 -4e-06 -0.710532 -0.703665 
+-0.981974 0.119821 -0.146185 -8e-06 -0.403259 -0.915086 -7e-06 0.700849 -0.713309 
+-0.981974 0.119821 -0.146185 -7e-06 0.700849 -0.713309 -0.661564 0.720079 -0.209332 
+-0.113055 0.969376 0.21801 -0.266017 0.926195 0.267202 -0 0.97023 0.242184 
+-0.113055 0.969376 0.21801 -0 0.97023 0.242184 -3e-06 0.99977 -0.021467 
+-0.37351 -0.896312 0.238987 -0.406483 -0.846536 -0.343727 -1e-06 -0.934468 -0.356048 
+-0.37351 -0.896312 0.238987 -1e-06 -0.934468 -0.356048 4e-06 -0.992431 0.122802 
+-6e-06 -0.618853 -0.785507 -0.602681 -0.457408 -0.653876 -0.543671 -0.838875 -0.026637 
+-6e-06 -0.618853 -0.785507 -0.543671 -0.838875 -0.026637 -1e-06 -0.910204 -0.414159 
+-0.543671 -0.838875 -0.026637 -0.37351 -0.896312 0.238987 4e-06 -0.992431 0.122802 
+-0.543671 -0.838875 -0.026637 4e-06 -0.992431 0.122802 -1e-06 -0.910204 -0.414159 
+-0.715431 -0.652931 -0.248677 -0.602681 -0.457408 -0.653876 -6e-06 -0.618853 -0.785507 
+-0.715431 -0.652931 -0.248677 -6e-06 -0.618853 -0.785507 3e-06 -0.981923 -0.189284 
+-0.337905 -0.934589 -0.111191 5e-06 -0.978984 0.203935 3e-06 -0.997292 0.073548 
+-0.337905 -0.934589 -0.111191 3e-06 -0.997292 0.073548 -0.348869 -0.933084 0.087437 
+-0.486246 -0.397334 -0.778261 -0.587469 -0.386797 -0.710822 -6e-06 -0.45012 -0.892968 
+-0.486246 -0.397334 -0.778261 -6e-06 -0.45012 -0.892968 -7e-06 -0.468007 -0.883725 
+-0.486246 -0.397334 -0.778261 -7e-06 -0.468007 -0.883725 -3e-06 -0.858758 -0.512381 
+-0.486246 -0.397334 -0.778261 -3e-06 -0.858758 -0.512381 -0.586833 -0.742918 -0.322025 
+0 -0.978551 -0.206004 -0.481758 -0.839147 -0.252472 -0.586833 -0.742918 -0.322025 
+0 -0.978551 -0.206004 -0.586833 -0.742918 -0.322025 -3e-06 -0.858758 -0.512381 
+-0.481758 -0.839147 -0.252472 0 -0.978551 -0.206004 1e-06 -0.972905 -0.231204 
+-0.481758 -0.839147 -0.252472 1e-06 -0.972905 -0.231204 -0.474076 -0.871852 -0.122989 
+-0.353862 -0.903989 0.23997 -0.348869 -0.933084 0.087437 3e-06 -0.997292 0.073548 
+-0.353862 -0.903989 0.23997 3e-06 -0.997292 0.073548 5e-06 -0.93434 0.356384 
+-0.236619 0.953638 -0.185973 -5e-06 0.971901 -0.235392 -3e-06 0.999967 -0.00811 
+-0.236619 0.953638 -0.185973 -3e-06 0.999967 -0.00811 -0.076313 0.992955 0.090642 
+-0.349249 0.926107 -0.142654 -3e-06 0.995714 -0.092489 -5e-06 0.971901 -0.235392 
+-0.349249 0.926107 -0.142654 -5e-06 0.971901 -0.235392 -0.236619 0.953638 -0.185973 
+-0.324342 0.820392 0.470912 2e-06 0.809493 0.587129 -1e-06 0.988451 0.151539 
+-0.324342 0.820392 0.470912 -1e-06 0.988451 0.151539 -0.385975 0.91993 0.068942 
+-0.385975 0.91993 0.068942 -1e-06 0.988451 0.151539 -3e-06 0.995714 -0.092489 
+-0.385975 0.91993 0.068942 -3e-06 0.995714 -0.092489 -0.349249 0.926107 -0.142654 
+-3e-06 0.999967 -0.00811 -0.000539 0.982003 0.188866 0.053789 0.977936 0.201861 
+-3e-06 0.999967 -0.00811 0.053789 0.977936 0.201861 -0.076313 0.992955 0.090642 
+5e-06 -0.92965 0.368443 -0.376588 -0.899002 0.223555 -0.169653 -0.823479 0.541387 
+5e-06 -0.92965 0.368443 -0.169653 -0.823479 0.541387 6e-06 -0.884931 0.465723 
+-0.000539 0.982003 0.188866 0.001037 0.882289 0.470708 -0.025853 0.836488 0.547375 
+-0.000539 0.982003 0.188866 -0.025853 0.836488 0.547375 0.053789 0.977936 0.201861 
+-0.076931 0.996794 0.021978 -2e-06 0.999698 0.024563 -5e-06 0.944139 -0.329548 
+-0.076931 0.996794 0.021978 -5e-06 0.944139 -0.329548 -0.346215 0.845484 -0.406561 
+-6e-06 0.835316 -0.54977 -6e-06 0.866977 -0.498349 0.012261 0.836246 -0.548218 
+-6e-06 0.835316 -0.54977 0.012261 0.836246 -0.548218 -0.210432 0.815505 -0.539138 
+-0.11622 -0.986891 -0.111975 -0.195217 -0.964956 -0.175358 1e-06 -0.981082 -0.193594 
+-0.11622 -0.986891 -0.111975 1e-06 -0.981082 -0.193594 2e-06 -0.995633 -0.09335 
+-0.195217 -0.964956 -0.175358 -0.219435 -0.96992 -0.105374 0.000139 -0.99612 -0.088 
+-0.195217 -0.964956 -0.175358 0.000139 -0.99612 -0.088 1e-06 -0.981082 -0.193594 
+0.271698 0.925219 0.264859 -0 0.97023 0.242184 -2e-06 0.996084 0.088412 
+0.271698 0.925219 0.264859 -2e-06 0.996084 0.088412 0.3469 0.937893 0.004144 
+-0.119761 -0.979394 0.16262 3e-06 -0.998337 0.057641 6e-06 -0.894018 0.448032 
+-0.119761 -0.979394 0.16262 6e-06 -0.894018 0.448032 -0.215444 -0.890886 0.399883 
+-5e-06 0.944139 -0.329548 -6e-06 0.835316 -0.54977 -0.210432 0.815505 -0.539138 
+-5e-06 0.944139 -0.329548 -0.210432 0.815505 -0.539138 -0.346215 0.845484 -0.406561 
+-0.215444 -0.890886 0.399883 6e-06 -0.894018 0.448032 6e-06 -0.884931 0.465723 
+-0.215444 -0.890886 0.399883 6e-06 -0.884931 0.465723 -0.169653 -0.823479 0.541387 
+-1e-06 -0.934468 -0.356048 -0.406483 -0.846536 -0.343727 -0.16511 -0.374839 -0.912269 
+-1e-06 -0.934468 -0.356048 -0.16511 -0.374839 -0.912269 -6e-06 -0.395924 -0.918283 
+-0.257478 -0.492351 0.831442 6e-06 -0.885133 0.465339 6e-06 0.075914 0.997114 
+-0.257478 -0.492351 0.831442 6e-06 0.075914 0.997114 0.012145 0.171437 0.98512 
+0.3469 0.937893 0.004144 -2e-06 0.996084 0.088412 -7e-06 0.700849 -0.713309 
+0.3469 0.937893 0.004144 -7e-06 0.700849 -0.713309 0.662276 0.719906 -0.207666 
+-0.177439 -0.921455 -0.345595 0.000107 -0.936053 -0.35186 0.000275 -0.986724 -0.162403 
+-0.177439 -0.921455 -0.345595 0.000275 -0.986724 -0.162403 -0.266367 -0.941791 -0.205131 
+-8e-06 -0.403259 -0.915086 -4e-06 -0.710532 -0.703665 0.563663 -0.80947 -0.164447 
+-8e-06 -0.403259 -0.915086 0.563663 -0.80947 -0.164447 0.982532 0.119253 -0.14286 
+0.982532 0.119253 -0.14286 0.662276 0.719906 -0.207666 -7e-06 0.700849 -0.713309 
+0.982532 0.119253 -0.14286 -7e-06 0.700849 -0.713309 -8e-06 -0.403259 -0.915086 
+0.113054 0.969377 0.218009 -3e-06 0.99977 -0.021467 -0 0.97023 0.242184 
+0.113054 0.969377 0.218009 -0 0.97023 0.242184 0.271698 0.925219 0.264859 
+0.563663 -0.80947 -0.164447 -4e-06 -0.710532 -0.703665 0.000107 -0.936053 -0.35186 
+0.563663 -0.80947 -0.164447 0.000107 -0.936053 -0.35186 -0.177439 -0.921455 -0.345595 
+0.012261 0.836246 -0.548218 -6e-06 0.866977 -0.498349 -3e-06 0.998985 -0.045037 
+0.012261 0.836246 -0.548218 -3e-06 0.998985 -0.045037 -0.152916 0.971929 -0.178802 
+-0.152916 0.971929 -0.178802 -3e-06 0.998985 -0.045037 -3e-06 0.99977 -0.021467 
+-0.152916 0.971929 -0.178802 -3e-06 0.99977 -0.021467 0.113054 0.969377 0.218009 
+0.352348 -0.931809 -0.087082 0.594942 -0.803167 -0.031089 0.729917 -0.670363 -0.133543 
+0.212374 -0.888448 -0.406888 0.550241 -0.832853 0.059928 0.352348 -0.931809 -0.087082 
+0.386855 -0.855628 -0.343865 0.212374 -0.888448 -0.406888 0.352348 -0.931809 -0.087082 
+0.729917 -0.670363 -0.133543 0.386855 -0.855628 -0.343865 0.352348 -0.931809 -0.087082 
+-0.023323 -0.258531 -0.965721 0.145433 -0.228035 -0.96273 0.063022 -0.845408 -0.53039 
+0.012145 0.171437 0.98512 6e-06 0.075914 0.997114 -0.015348 0.157274 0.987436 
+0.012145 0.171437 0.98512 -0.015348 0.157274 0.987436 -0.187717 -0.49189 0.850181 
+0.063022 -0.845408 -0.53039 0.012145 0.171437 0.98512 -0.187717 -0.49189 0.850181 
+-0.297839 -0.060251 -0.952713 -0.001337 0.047724 -0.99886 0.141275 0.007086 -0.989945 
+-0.023323 -0.258531 -0.965721 0.063022 -0.845408 -0.53039 -0.187717 -0.49189 0.850181 
+-0.729905 -0.67038 -0.13353 -0.594921 -0.803183 -0.031076 -0.352345 -0.93181 -0.087076 
+-0.352345 -0.93181 -0.087076 -0.550251 -0.832845 0.059946 -0.212425 -0.888393 -0.406981 
+-0.352345 -0.93181 -0.087076 -0.212425 -0.888393 -0.406981 -0.38683 -0.855615 -0.343927 
+-0.352345 -0.93181 -0.087076 -0.38683 -0.855615 -0.343927 -0.729905 -0.67038 -0.13353 
+
+TEXTURE_COORDINATES tcoords 2 float
+0.8203 0.4978 0.8278 0.5047 0.8265 0.5278 0.8203 0.4978 0.8265 
+0.5278 0.8209 0.5331 0.8203 0.4978 0.8209 0.5331 0.7991 0.5396 
+0.8203 0.4978 0.7991 0.5396 0.7971 0.5048 0.8209 0.5331 0.8265 
+0.5278 0.8362 0.5413 0.8209 0.5331 0.8362 0.5413 0.8273 0.5498 
+0.8209 0.5331 0.8273 0.5498 0.805 0.5656 0.8209 0.5331 0.805 
+0.5656 0.7991 0.5396 0.805 0.5656 0.8273 0.5498 0.8398 0.5801 
+0.805 0.5656 0.8398 0.5801 0.8166 0.5981 0.8362 0.5413 0.8613 
+0.5646 0.8398 0.5801 0.8362 0.5413 0.8398 0.5801 0.8273 0.5498 
+0.8166 0.5981 0.8274 0.6216 0.8165 0.6357 0.8166 0.5981 0.8165 
+0.6357 0.7867 0.6311 0.8175 0.6549 0.803 0.6707 0.7867 0.6311 
+0.8175 0.6549 0.7867 0.6311 0.8165 0.6357 0.8761 0.5261 0.8506 
+0.508 0.8656 0.5053 0.8166 0.5981 0.8398 0.5801 0.8548 0.6061 
+0.8166 0.5981 0.8548 0.6061 0.8274 0.6216 0.8418 0.6335 0.8548 
+0.6061 0.8689 0.6179 0.8418 0.6335 0.8689 0.6179 0.8521 0.6333 
+0.8548 0.6061 0.8418 0.6335 0.8356 0.6312 0.8548 0.6061 0.8356 
+0.6312 0.8274 0.6216 0.835 0.6582 0.8273 0.6835 0.803 0.6707 
+0.835 0.6582 0.803 0.6707 0.8175 0.6549 0.8548 0.6061 0.8398 
+0.5801 0.8613 0.5646 0.8548 0.6061 0.8613 0.5646 0.881 0.5743 
+0.8729 0.5023 0.8789 0.4984 0.8836 0.5016 0.8729 0.5023 0.8836 
+0.5016 0.8864 0.5158 0.8864 0.5158 0.8836 0.5016 0.888 0.5018 
+0.8864 0.5158 0.888 0.5018 0.8988 0.5202 0.8861 0.489 0.8872 
+0.4832 0.8925 0.4832 0.8861 0.489 0.8925 0.4832 0.8913 0.4878 
+0.888 0.5018 0.8861 0.489 0.8913 0.4878 0.888 0.5018 0.8913 
+0.4878 0.8952 0.4998 0.9132 0.5505 0.8998 0.5825 0.881 0.5743 
+0.9132 0.5505 0.881 0.5743 0.8911 0.539 0.8911 0.539 0.8761 
+0.5261 0.8864 0.5158 0.8911 0.539 0.8864 0.5158 0.8988 0.5202 
+0.8613 0.5646 0.8761 0.5261 0.8911 0.539 0.8613 0.5646 0.8911 
+0.539 0.881 0.5743 0.8362 0.5413 0.8761 0.5261 0.8613 0.5646 
+0.8548 0.6061 0.881 0.5743 0.8998 0.5825 0.8548 0.6061 0.8998 
+0.5825 0.8689 0.6179 0.8689 0.6179 0.8848 0.6345 0.8608 0.6543 
+0.8689 0.6179 0.8608 0.6543 0.8521 0.6333 0.835 0.6582 0.8418 
+0.6335 0.8521 0.6333 0.835 0.6582 0.8521 0.6333 0.8608 0.6543 
+0.8418 0.6335 0.835 0.6582 0.8175 0.6549 0.8418 0.6335 0.8175 
+0.6549 0.8356 0.6312 0.8165 0.6357 0.8274 0.6216 0.8356 0.6312 
+0.8165 0.6357 0.8356 0.6312 0.8175 0.6549 0.8273 0.6835 0.835 
+0.6582 0.8608 0.6543 0.8273 0.6835 0.8608 0.6543 0.903 0.689 
+0.8848 0.6345 0.9158 0.6527 0.903 0.689 0.8848 0.6345 0.903 
+0.689 0.8608 0.6543 0.7867 0.6311 0.803 0.6707 0.7925 0.6935 
+0.7867 0.6311 0.7925 0.6935 0.7659 0.6525 0.7659 0.6525 0.7925 
+0.6935 0.7701 0.7237 0.7659 0.6525 0.7701 0.7237 0.7337 0.6926 
+0.7337 0.6926 0.7701 0.7237 0.7528 0.7481 0.7337 0.6926 0.7528 
+0.7481 0.7104 0.7182 0.8166 0.5981 0.7867 0.6311 0.7809 0.5811 
+0.8166 0.5981 0.7809 0.5811 0.805 0.5656 0.8848 0.6345 0.8689 
+0.6179 0.8998 0.5825 0.8848 0.6345 0.8998 0.5825 0.9244 0.5938 
+0.9132 0.5505 0.9361 0.5596 0.9244 0.5938 0.9132 0.5505 0.9244 
+0.5938 0.8998 0.5825 0.9167 0.5174 0.9409 0.5251 0.9361 0.5596 
+0.9167 0.5174 0.9361 0.5596 0.9132 0.5505 0.9167 0.5174 0.9132 
+0.5505 0.8911 0.539 0.9167 0.5174 0.8911 0.539 0.8988 0.5202 
+0.9048 0.5111 0.9098 0.5087 0.9167 0.5174 0.9048 0.5111 0.9167 
+0.5174 0.8988 0.5202 0.888 0.5018 0.8952 0.4998 0.9048 0.5111 
+0.888 0.5018 0.9048 0.5111 0.8988 0.5202 0.9167 0.5174 0.9098 
+0.5087 0.9224 0.4989 0.9167 0.5174 0.9224 0.4989 0.9334 0.5049 
+0.4518 0.9717 0.4434 0.9654 0.4548 0.954 0.4518 0.9717 0.4548 
+0.954 0.4609 0.9611 0.4366 0.9619 0.4265 0.9572 0.4373 0.9423 
+0.4366 0.9619 0.4373 0.9423 0.4487 0.9487 0.8836 0.5016 0.8839 
+0.4891 0.8861 0.489 0.8836 0.5016 0.8861 0.489 0.888 0.5018 
+0.8789 0.4984 0.8803 0.4884 0.8839 0.4891 0.8789 0.4984 0.8839 
+0.4891 0.8836 0.5016 0.8744 0.4916 0.8744 0.4862 0.8803 0.4884 
+0.8744 0.4916 0.8803 0.4884 0.8789 0.4984 0.8729 0.5023 0.8656 
+0.5053 0.8575 0.4975 0.8729 0.5023 0.8575 0.4975 0.8668 0.4935 
+0.8668 0.4935 0.8744 0.4916 0.8789 0.4984 0.8668 0.4935 0.8789 
+0.4984 0.8729 0.5023 0.8506 0.508 0.8415 0.4999 0.8575 0.4975 
+0.8506 0.508 0.8575 0.4975 0.8656 0.5053 0.8656 0.5053 0.8729 
+0.5023 0.8864 0.5158 0.8656 0.5053 0.8864 0.5158 0.8761 0.5261 
+0.8278 0.5047 0.8203 0.4978 0.837 0.4914 0.8278 0.5047 0.837 
+0.4914 0.8415 0.4999 0.8415 0.4999 0.837 0.4914 0.8543 0.4889 
+0.8415 0.4999 0.8543 0.4889 0.8575 0.4975 0.8575 0.4975 0.8543 
+0.4889 0.8662 0.4868 0.8575 0.4975 0.8662 0.4868 0.8668 0.4935 
+0.8744 0.4862 0.8744 0.4916 0.8668 0.4935 0.8744 0.4862 0.8668 
+0.4935 0.8662 0.4868 0.9427 0.5064 0.9409 0.5251 0.9167 0.5174 
+0.9427 0.5064 0.9167 0.5174 0.9334 0.5049 0.4141 0.95 0.4016 
+0.9474 0.4142 0.9262 0.4141 0.95 0.4142 0.9262 0.4278 0.935 
+0.9244 0.5938 0.9361 0.5596 0.9611 0.573 0.9244 0.5938 0.9611 
+0.573 0.938 0.612 0.8848 0.6345 0.9244 0.5938 0.938 0.612 
+0.8848 0.6345 0.938 0.612 0.9158 0.6527 0.9427 0.5064 0.9527 
+0.5073 0.9519 0.5212 0.9427 0.5064 0.9519 0.5212 0.9409 0.5251 
+0.9611 0.573 0.9361 0.5596 0.9409 0.5251 0.9611 0.573 0.9409 
+0.5251 0.9519 0.5212 0.9527 0.5073 0.9427 0.5064 0.9458 0.4832 
+0.9527 0.5073 0.9458 0.4832 0.955 0.4832 0.9611 0.573 0.9519 
+0.5212 0.9527 0.5073 0.9611 0.573 0.9527 0.5073 0.9843 0.5292 
+0.9367 0.4832 0.9458 0.4832 0.9427 0.5064 0.9367 0.4832 0.9427 
+0.5064 0.9334 0.5049 0.8273 0.6835 0.903 0.689 0.8926 0.7339 
+0.8273 0.6835 0.8926 0.7339 0.8174 0.7098 0.8174 0.7098 0.8926 
+0.7339 0.8819 0.7679 0.8174 0.7098 0.8819 0.7679 0.8 0.7432 
+0.4016 0.9474 0.3875 0.95 0.3978 0.9201 0.4016 0.9474 0.3978 
+0.9201 0.4142 0.9262 0.4265 0.9572 0.4141 0.95 0.4278 0.935 
+0.4265 0.9572 0.4278 0.935 0.4373 0.9423 0.4487 0.9487 0.4548 
+0.954 0.4434 0.9654 0.4487 0.9487 0.4434 0.9654 0.4366 0.9619 
+0.8273 0.6835 0.8174 0.7098 0.7925 0.6935 0.8273 0.6835 0.7925 
+0.6935 0.803 0.6707 0.7925 0.6935 0.8174 0.7098 0.8 0.7432 
+0.7925 0.6935 0.8 0.7432 0.7701 0.7237 0.7659 0.6525 0.7528 
+0.6088 0.7809 0.5811 0.7659 0.6525 0.7809 0.5811 0.7867 0.6311 
+0.765 0.5154 0.7971 0.5048 0.7991 0.5396 0.765 0.5154 0.7991 
+0.5396 0.7713 0.5517 0.7713 0.5517 0.7991 0.5396 0.805 0.5656 
+0.7713 0.5517 0.805 0.5656 0.7809 0.5811 0.7337 0.6926 0.7097 
+0.6486 0.7528 0.6088 0.7337 0.6926 0.7528 0.6088 0.7659 0.6525 
+0.7104 0.7182 0.6722 0.6616 0.7097 0.6486 0.7104 0.7182 0.7097 
+0.6486 0.7337 0.6926 0.7713 0.5517 0.7809 0.5811 0.7528 0.6088 
+0.7713 0.5517 0.7528 0.6088 0.743 0.5726 0.743 0.5726 0.7528 
+0.6088 0.7097 0.6486 0.743 0.5726 0.7097 0.6486 0.7026 0.6146 
+0.7259 0.5329 0.743 0.5726 0.7026 0.6146 0.7259 0.5329 0.7026 
+0.6146 0.6754 0.5906 0.7259 0.5329 0.765 0.5154 0.7713 0.5517 
+0.7259 0.5329 0.7713 0.5517 0.743 0.5726 0.7026 0.6146 0.7097 
+0.6486 0.6722 0.6616 0.7026 0.6146 0.6722 0.6616 0.6754 0.5906 
+0.4609 0.9611 0.4678 0.9683 0.4577 0.9786 0.4609 0.9611 0.4577 
+0.9786 0.4518 0.9717 0.7906 0.7662 0.8 0.7432 0.8819 0.7679 
+0.7906 0.7662 0.8819 0.7679 0.8763 0.7842 0.7701 0.7237 0.8 
+0.7432 0.7906 0.7662 0.7701 0.7237 0.7906 0.7662 0.7528 0.7481 
+0.465 0.9817 0.4609 0.9783 0.4586 0.9788 0.465 0.9817 0.4586 
+0.9788 0.4615 0.9833 0.4278 0.935 0.4142 0.9262 0.4354 0.8826 
+0.4278 0.935 0.4354 0.8826 0.451 0.895 0.4142 0.9262 0.3978 
+0.9201 0.4071 0.8623 0.4142 0.9262 0.4071 0.8623 0.4354 0.8826 
+0.4548 0.954 0.4487 0.9487 0.4676 0.9314 0.4548 0.954 0.4676 
+0.9314 0.4681 0.9438 0.4487 0.9487 0.4373 0.9423 0.4653 0.9121 
+0.4487 0.9487 0.4653 0.9121 0.4676 0.9314 0.4721 0.9733 0.4678 
+0.9683 0.4746 0.9649 0.4721 0.9733 0.4746 0.9649 0.4776 0.9687 
+0.4678 0.9683 0.4609 0.9611 0.4706 0.9577 0.4678 0.9683 0.4706 
+0.9577 0.4746 0.9649 0.4548 0.954 0.4681 0.9438 0.4706 0.9577 
+0.4548 0.954 0.4706 0.9577 0.4609 0.9611 0.4653 0.9121 0.4373 
+0.9423 0.4278 0.935 0.4653 0.9121 0.4278 0.935 0.451 0.895 
+0.4354 0.8826 0.4071 0.8623 0.4168 0.8065 0.4354 0.8826 0.4168 
+0.8065 0.4505 0.8259 0.4653 0.9121 0.451 0.895 0.4775 0.8678 
+0.4653 0.9121 0.4775 0.8678 0.4965 0.8892 0.4676 0.9314 0.4653 
+0.9121 0.4965 0.8892 0.4676 0.9314 0.4965 0.8892 0.4973 0.9054 
+0.4706 0.9577 0.4681 0.9438 0.4979 0.9182 0.4706 0.9577 0.4979 
+0.9182 0.4955 0.9353 0.4746 0.9649 0.4706 0.9577 0.4955 0.9353 
+0.4746 0.9649 0.4955 0.9353 0.4973 0.9461 0.4775 0.8678 0.451 
+0.895 0.4354 0.8826 0.4775 0.8678 0.4354 0.8826 0.4505 0.8259 
+0.4965 0.8892 0.4775 0.8678 0.5068 0.8296 0.4965 0.8892 0.5068 
+0.8296 0.5201 0.8672 0.4973 0.9054 0.4965 0.8892 0.5201 0.8672 
+0.4973 0.9054 0.5201 0.8672 0.5272 0.8861 0.5406 0.8561 0.5274 
+0.8241 0.5552 0.8314 0.5406 0.8561 0.5552 0.8314 0.5603 0.8508 
+0.5448 0.8775 0.5406 0.8561 0.5603 0.8508 0.5448 0.8775 0.5603 
+0.8508 0.5722 0.8752 0.5603 0.8508 0.5552 0.8314 0.6432 0.8213 
+0.5603 0.8508 0.6432 0.8213 0.6402 0.8423 0.5722 0.8752 0.5603 
+0.8508 0.6402 0.8423 0.5722 0.8752 0.6402 0.8423 0.642 0.8663 
+0.6402 0.8423 0.6432 0.8213 0.6629 0.8243 0.6402 0.8423 0.6629 
+0.8243 0.6568 0.8476 0.642 0.8663 0.6402 0.8423 0.6568 0.8476 
+0.642 0.8663 0.6568 0.8476 0.6601 0.8625 0.6568 0.8476 0.6629 
+0.8243 0.7499 0.8212 0.6568 0.8476 0.7499 0.8212 0.7512 0.8291 
+0.6601 0.8625 0.6568 0.8476 0.7512 0.8291 0.6601 0.8625 0.7512 
+0.8291 0.7517 0.84 0.4676 0.9314 0.4973 0.9054 0.4979 0.9182 
+0.4676 0.9314 0.4979 0.9182 0.4681 0.9438 0.5448 0.8775 0.5665 
+0.9023 0.5311 0.8976 0.5448 0.8775 0.5311 0.8976 0.5272 0.8861 
+0.5272 0.8861 0.5311 0.8976 0.4979 0.9182 0.5272 0.8861 0.4979 
+0.9182 0.4973 0.9054 0.642 0.8663 0.6418 0.875 0.5783 0.8894 
+0.642 0.8663 0.5783 0.8894 0.5722 0.8752 0.5552 0.8314 0.5329 
+0.7921 0.648 0.7934 0.5552 0.8314 0.648 0.7934 0.6432 0.8213 
+0.5274 0.8241 0.5079 0.7915 0.5329 0.7921 0.5274 0.8241 0.5329 
+0.7921 0.5552 0.8314 0.5329 0.7921 0.558 0.7638 0.6427 0.7794 
+0.5329 0.7921 0.6427 0.7794 0.648 0.7934 0.4741 0.7571 0.5079 
+0.7915 0.4814 0.8012 0.4741 0.7571 0.4814 0.8012 0.4312 0.7777 
+0.5329 0.7921 0.4991 0.7497 0.522 0.7343 0.5329 0.7921 0.522 
+0.7343 0.558 0.7638 0.4505 0.8259 0.4814 0.8012 0.5068 0.8296 
+0.4505 0.8259 0.5068 0.8296 0.4775 0.8678 0.558 0.7638 0.5772 
+0.7465 0.6344 0.7637 0.558 0.7638 0.6344 0.7637 0.6427 0.7794 
+0.6432 0.8213 0.648 0.7934 0.6592 0.7922 0.6432 0.8213 0.6592 
+0.7922 0.6629 0.8243 0.6629 0.8243 0.6592 0.7922 0.7481 0.8141 
+0.6629 0.8243 0.7481 0.8141 0.7499 0.8212 0.5772 0.7465 0.558 
+0.7638 0.522 0.7343 0.5772 0.7465 0.522 0.7343 0.5809 0.711 
+0.6071 0.708 0.5929 0.7348 0.5772 0.7465 0.6071 0.708 0.5772 
+0.7465 0.5809 0.711 0.4973 0.9461 0.4955 0.9353 0.5337 0.9145 
+0.4973 0.9461 0.5337 0.9145 0.5323 0.9338 0.563 0.9122 0.5553 
+0.9355 0.5323 0.9338 0.563 0.9122 0.5323 0.9338 0.5337 0.9145 
+0.4979 0.9182 0.5311 0.8976 0.5337 0.9145 0.4979 0.9182 0.5337 
+0.9145 0.4955 0.9353 0.5809 0.711 0.5549 0.6748 0.5834 0.6581 
+0.5809 0.711 0.5834 0.6581 0.6041 0.6831 0.522 0.7343 0.503 
+0.6799 0.5549 0.6748 0.522 0.7343 0.5549 0.6748 0.5809 0.711 
+0.4991 0.7497 0.4624 0.6998 0.503 0.6799 0.4991 0.7497 0.503 
+0.6799 0.522 0.7343 0.4991 0.7497 0.4741 0.7571 0.4251 0.7002 
+0.4991 0.7497 0.4251 0.7002 0.4624 0.6998 0.4411 0.6531 0.4079 
+0.6569 0.4089 0.6009 0.4411 0.6531 0.4089 0.6009 0.4356 0.5969 
+0.4897 0.6365 0.4591 0.6453 0.4534 0.591 0.4897 0.6365 0.4534 
+0.591 0.4865 0.5857 0.6046 0.62 0.5678 0.6269 0.5628 0.592 
+0.6046 0.62 0.5628 0.592 0.5984 0.5898 0.5678 0.6269 0.5297 
+0.6323 0.5272 0.5864 0.5678 0.6269 0.5272 0.5864 0.5628 0.592 
+0.5297 0.6323 0.4897 0.6365 0.4865 0.5857 0.5297 0.6323 0.4865 
+0.5857 0.5272 0.5864 0.5272 0.5864 0.4865 0.5857 0.4889 0.5474 
+0.5272 0.5864 0.4889 0.5474 0.5278 0.5524 0.4865 0.5857 0.4534 
+0.591 0.4549 0.5574 0.4865 0.5857 0.4549 0.5574 0.4889 0.5474 
+0.5341 0.5223 0.5625 0.5261 0.5514 0.5577 0.5341 0.5223 0.5514 
+0.5577 0.5278 0.5524 0.4549 0.5574 0.4352 0.5592 0.4329 0.5265 
+0.4549 0.5574 0.4329 0.5265 0.4585 0.5268 0.5278 0.5524 0.5514 
+0.5577 0.5478 0.5756 0.5278 0.5524 0.5478 0.5756 0.5272 0.5864 
+0.4356 0.5969 0.4089 0.6009 0.4066 0.5636 0.4356 0.5969 0.4066 
+0.5636 0.4352 0.5592 0.5278 0.5524 0.4889 0.5474 0.4934 0.5191 
+0.5278 0.5524 0.4934 0.5191 0.5341 0.5223 0.4889 0.5474 0.4549 
+0.5574 0.4585 0.5268 0.4889 0.5474 0.4585 0.5268 0.4934 0.5191 
+0.5341 0.5223 0.5397 0.5005 0.5715 0.5008 0.5341 0.5223 0.5715 
+0.5008 0.5625 0.5261 0.4534 0.591 0.4356 0.5969 0.4352 0.5592 
+0.4534 0.591 0.4352 0.5592 0.4549 0.5574 0.4352 0.5592 0.4066 
+0.5636 0.4077 0.5309 0.4352 0.5592 0.4077 0.5309 0.4329 0.5265 
+0.4632 0.5039 0.431 0.5004 0.4288 0.4635 0.4632 0.5039 0.4288 
+0.4635 0.4663 0.4733 0.5201 0.8672 0.5068 0.8296 0.5274 0.8241 
+0.5201 0.8672 0.5274 0.8241 0.5406 0.8561 0.5272 0.8861 0.5201 
+0.8672 0.5406 0.8561 0.5272 0.8861 0.5406 0.8561 0.5448 0.8775 
+0.5722 0.8752 0.5783 0.8894 0.5665 0.9023 0.5722 0.8752 0.5665 
+0.9023 0.5448 0.8775 0.5068 0.8296 0.4814 0.8012 0.5079 0.7915 
+0.5068 0.8296 0.5079 0.7915 0.5274 0.8241 0.4991 0.7497 0.5329 
+0.7921 0.5079 0.7915 0.4991 0.7497 0.5079 0.7915 0.4741 0.7571 
+0.4251 0.7002 0.4741 0.7571 0.4312 0.7777 0.4251 0.7002 0.4312 
+0.7777 0.3975 0.7068 0.5834 0.6581 0.5549 0.6748 0.5297 0.6323 
+0.5834 0.6581 0.5297 0.6323 0.5678 0.6269 0.5337 0.9145 0.5311 
+0.8976 0.5665 0.9023 0.5337 0.9145 0.5665 0.9023 0.563 0.9122 
+0.5809 0.711 0.6041 0.6831 0.6231 0.6912 0.5809 0.711 0.6231 
+0.6912 0.6071 0.708 0.6151 0.6406 0.5834 0.6581 0.5678 0.6269 
+0.6151 0.6406 0.5678 0.6269 0.6046 0.62 0.4411 0.6531 0.4251 
+0.7002 0.3975 0.7068 0.4411 0.6531 0.3975 0.7068 0.4079 0.6569 
+0.4251 0.7002 0.4411 0.6531 0.4591 0.6453 0.4251 0.7002 0.4591 
+0.6453 0.4624 0.6998 0.4356 0.5969 0.4534 0.591 0.4591 0.6453 
+0.4356 0.5969 0.4591 0.6453 0.4411 0.6531 0.4814 0.8012 0.4505 
+0.8259 0.4168 0.8065 0.4814 0.8012 0.4168 0.8065 0.4312 0.7777 
+0.4312 0.7777 0.4168 0.8065 0.3806 0.8022 0.4312 0.7777 0.3806 
+0.8022 0.3806 0.7613 0.5297 0.6323 0.5549 0.6748 0.503 0.6799 
+0.5297 0.6323 0.503 0.6799 0.4897 0.6365 0.4624 0.6998 0.4591 
+0.6453 0.4897 0.6365 0.4624 0.6998 0.4897 0.6365 0.503 0.6799 
+0.6427 0.7794 0.6344 0.7637 0.6606 0.7672 0.6427 0.7794 0.6606 
+0.7672 0.6609 0.7821 0.6601 0.8625 0.661 0.8718 0.6418 0.875 
+0.6601 0.8625 0.6418 0.875 0.642 0.8663 0.6592 0.7922 0.648 
+0.7934 0.6427 0.7794 0.6592 0.7922 0.6427 0.7794 0.6609 0.7821 
+0.4818 0.4007 0.4534 0.3905 0.5019 0.2977 0.4818 0.4007 0.5019 
+0.2977 0.5155 0.2996 0.5122 0.4126 0.4818 0.4007 0.5155 0.2996 
+0.5122 0.4126 0.5155 0.2996 0.5362 0.3056 0.5728 0.4298 0.5444 
+0.4242 0.5666 0.321 0.5728 0.4298 0.5666 0.321 0.5837 0.3204 
+0.4934 0.5191 0.4585 0.5268 0.4632 0.5039 0.4934 0.5191 0.4632 
+0.5039 0.4964 0.5006 0.5122 0.4126 0.5362 0.3056 0.5666 0.321 
+0.5122 0.4126 0.5666 0.321 0.5444 0.4242 0.5341 0.5223 0.4934 
+0.5191 0.4964 0.5006 0.5341 0.5223 0.4964 0.5006 0.5397 0.5005 
+0.6285 0.4205 0.6021 0.4284 0.5987 0.321 0.6285 0.4205 0.5987 
+0.321 0.6217 0.3255 0.5728 0.4298 0.5837 0.3204 0.5987 0.321 
+0.5728 0.4298 0.5987 0.321 0.6021 0.4284 0.6285 0.4205 0.6493 
+0.4495 0.6078 0.4801 0.6285 0.4205 0.6078 0.4801 0.6021 0.4284 
+0.5019 0.2977 0.4534 0.3905 0.4295 0.3699 0.5019 0.2977 0.4295 
+0.3699 0.4821 0.29 0.5739 0.483 0.5728 0.4298 0.6021 0.4284 
+0.5739 0.483 0.6021 0.4284 0.6078 0.4801 0.5426 0.4807 0.5444 
+0.4242 0.5728 0.4298 0.5426 0.4807 0.5728 0.4298 0.5739 0.483 
+0.6592 0.7922 0.6609 0.7821 0.7486 0.808 0.6592 0.7922 0.7486 
+0.808 0.7481 0.8141 0.6606 0.7672 0.7502 0.8023 0.7486 0.808 
+0.6606 0.7672 0.7486 0.808 0.6609 0.7821 0.7517 0.84 0.7501 
+0.8532 0.661 0.8718 0.7517 0.84 0.661 0.8718 0.6601 0.8625 
+0.5987 0.321 0.5837 0.3204 0.5866 0.2794 0.5987 0.321 0.5866 
+0.2794 0.6019 0.2849 0.5155 0.2996 0.5019 0.2977 0.5115 0.2746 
+0.5155 0.2996 0.5115 0.2746 0.5218 0.278 0.5019 0.2977 0.4821 
+0.29 0.4976 0.2662 0.5019 0.2977 0.4976 0.2662 0.5115 0.2746 
+0.5362 0.3056 0.5155 0.2996 0.5218 0.278 0.5362 0.3056 0.5218 
+0.278 0.5446 0.2799 0.5666 0.321 0.5362 0.3056 0.5446 0.2799 
+0.5666 0.321 0.5446 0.2799 0.5695 0.2807 0.6217 0.3255 0.5987 
+0.321 0.6019 0.2849 0.6217 0.3255 0.6019 0.2849 0.6278 0.2935 
+0.5837 0.3204 0.5666 0.321 0.5695 0.2807 0.5837 0.3204 0.5695 
+0.2807 0.5866 0.2794 0.5695 0.2807 0.5446 0.2799 0.551 0.2411 
+0.5695 0.2807 0.551 0.2411 0.568 0.2443 0.5446 0.2799 0.5218 
+0.278 0.5407 0.2362 0.5446 0.2799 0.5407 0.2362 0.551 0.2411 
+0.5866 0.2794 0.5695 0.2807 0.568 0.2443 0.5866 0.2794 0.568 
+0.2443 0.5857 0.2425 0.6278 0.2935 0.6019 0.2849 0.6034 0.2429 
+0.6278 0.2935 0.6034 0.2429 0.6327 0.2479 0.6019 0.2849 0.5866 
+0.2794 0.5857 0.2425 0.6019 0.2849 0.5857 0.2425 0.6034 0.2429 
+0.5115 0.2746 0.4976 0.2662 0.5167 0.2226 0.5115 0.2746 0.5167 
+0.2226 0.5291 0.228 0.5218 0.278 0.5115 0.2746 0.5291 0.228 
+0.5218 0.278 0.5291 0.228 0.5407 0.2362 0.551 0.2411 0.5407 
+0.2362 0.5714 0.1387 0.551 0.2411 0.5714 0.1387 0.5834 0.1415 
+0.5857 0.2425 0.568 0.2443 0.5955 0.1454 0.5857 0.2425 0.5955 
+0.1454 0.6091 0.1518 0.6327 0.2479 0.6034 0.2429 0.616 0.1552 
+0.6327 0.2479 0.616 0.1552 0.6325 0.1596 0.6034 0.2429 0.5857 
+0.2425 0.6091 0.1518 0.6034 0.2429 0.6091 0.1518 0.616 0.1552 
+0.5291 0.228 0.5167 0.2226 0.5533 0.1407 0.5291 0.228 0.5533 
+0.1407 0.5628 0.1394 0.5407 0.2362 0.5291 0.228 0.5628 0.1394 
+0.5407 0.2362 0.5628 0.1394 0.5714 0.1387 0.568 0.2443 0.551 
+0.2411 0.5834 0.1415 0.568 0.2443 0.5834 0.1415 0.5955 0.1454 
+0.6081 0.1117 0.5934 0.1144 0.5935 0.09 0.6081 0.1117 0.5935 
+0.09 0.6063 0.0879 0.5971 0.0736 0.5919 0.0761 0.582 0.0585 
+0.5971 0.0736 0.582 0.0585 0.5893 0.0535 0.7106 0.192 0.7016 
+0.1958 0.701 0.1912 0.7106 0.192 0.701 0.1912 0.7084 0.1881 
+0.7029 0.178 0.6954 0.1791 0.6837 0.1592 0.7029 0.178 0.6837 
+0.1592 0.6986 0.1585 0.5971 0.0736 0.6018 0.0629 0.6053 0.0653 
+0.5971 0.0736 0.6053 0.0653 0.6063 0.0879 0.691 0.1823 0.6954 
+0.1791 0.701 0.1912 0.691 0.1823 0.701 0.1912 0.7016 0.1958 
+0.6063 0.0879 0.5935 0.09 0.5919 0.0761 0.6063 0.0879 0.5919 
+0.0761 0.5971 0.0736 0.7084 0.1881 0.701 0.1912 0.6954 0.1791 
+0.7084 0.1881 0.6954 0.1791 0.7029 0.178 0.5893 0.0535 0.5949 
+0.0541 0.6018 0.0629 0.5893 0.0535 0.6018 0.0629 0.5971 0.0736 
+0.6796 0.16 0.6837 0.1592 0.6954 0.1791 0.6796 0.16 0.6954 
+0.1791 0.691 0.1823 0.6063 0.0879 0.6053 0.0653 0.6179 0.066 
+0.6063 0.0879 0.6179 0.066 0.6221 0.0937 0.6444 0.1118 0.6388 
+0.1237 0.6246 0.1133 0.6444 0.1118 0.6246 0.1133 0.6221 0.0937 
+0.6081 0.1117 0.6063 0.0879 0.6221 0.0937 0.6081 0.1117 0.6221 
+0.0937 0.6246 0.1133 0.6713 0.1499 0.6755 0.1461 0.6837 0.1592 
+0.6713 0.1499 0.6837 0.1592 0.6796 0.16 0.6388 0.1237 0.6444 
+0.1118 0.6632 0.12 0.6388 0.1237 0.6632 0.12 0.6499 0.1333 
+0.6632 0.12 0.6444 0.1118 0.6495 0.0889 0.6632 0.12 0.6495 
+0.0889 0.6762 0.1081 0.6719 0.1247 0.6696 0.1263 0.6594 0.1249 
+0.6719 0.1247 0.6594 0.1249 0.6632 0.12 0.6719 0.1247 0.6632 
+0.12 0.6762 0.1081 0.6719 0.1247 0.6762 0.1081 0.6817 0.1157 
+0.6755 0.1461 0.6715 0.1501 0.6696 0.1263 0.6755 0.1461 0.6696 
+0.1263 0.6719 0.1247 0.6755 0.1461 0.6719 0.1247 0.6817 0.1157 
+0.6755 0.1461 0.6817 0.1157 0.6908 0.139 0.6908 0.139 0.6986 
+0.1585 0.6837 0.1592 0.6908 0.139 0.6837 0.1592 0.6755 0.1461 
+0.6908 0.139 0.6817 0.1157 0.7002 0.101 0.6908 0.139 0.7002 
+0.101 0.7123 0.1317 0.6762 0.1081 0.6495 0.0889 0.6611 0.0576 
+0.6762 0.1081 0.6611 0.0576 0.6955 0.0951 0.6241 0.0565 0.6228 
+0.0391 0.6704 0.034 0.6241 0.0565 0.6704 0.034 0.6611 0.0576 
+0.6817 0.1157 0.6762 0.1081 0.6955 0.0951 0.6817 0.1157 0.6955 
+0.0951 0.7002 0.101 0.7019 0.1626 0.6986 0.1585 0.7143 0.1546 
+0.7019 0.1626 0.7143 0.1546 0.715 0.158 0.6986 0.1585 0.6908 
+0.139 0.7123 0.1317 0.6986 0.1585 0.7123 0.1317 0.7143 0.1546 
+0.7002 0.101 0.6955 0.0951 0.7154 0.0855 0.7002 0.101 0.7154 
+0.0855 0.7174 0.0882 0.6495 0.0889 0.6179 0.066 0.6241 0.0565 
+0.6495 0.0889 0.6241 0.0565 0.6611 0.0576 0.7143 0.1546 0.7123 
+0.1317 0.7337 0.1296 0.7143 0.1546 0.7337 0.1296 0.7391 0.1586 
+0.715 0.158 0.7143 0.1546 0.7391 0.1586 0.715 0.158 0.7391 
+0.1586 0.7329 0.1623 0.7123 0.1317 0.7002 0.101 0.7174 0.0882 
+0.7123 0.1317 0.7174 0.0882 0.7337 0.1296 0.7337 0.1296 0.7174 
+0.0882 0.744 0.0944 0.7337 0.1296 0.744 0.0944 0.7566 0.1248 
+0.7174 0.0882 0.7154 0.0855 0.7464 0.0916 0.7174 0.0882 0.7464 
+0.0916 0.744 0.0944 0.6444 0.1118 0.6221 0.0937 0.6179 0.066 
+0.6444 0.1118 0.6179 0.066 0.6495 0.0889 0.7391 0.1586 0.7337 
+0.1296 0.7566 0.1248 0.7391 0.1586 0.7566 0.1248 0.7549 0.161 
+0.7329 0.1623 0.7391 0.1586 0.7549 0.161 0.7329 0.1623 0.7549 
+0.161 0.7566 0.1633 0.7624 0.1243 0.7566 0.1248 0.744 0.0944 
+0.7624 0.1243 0.744 0.0944 0.7464 0.0916 0.7549 0.161 0.7566 
+0.1248 0.7624 0.1243 0.7549 0.161 0.7624 0.1243 0.7566 0.1633 
+0.6611 0.0576 0.6704 0.034 0.7154 0.0855 0.6611 0.0576 0.7154 
+0.0855 0.6955 0.0951 0.6704 0.034 0.6797 0.0118 0.7139 0.046 
+0.6704 0.034 0.7139 0.046 0.7154 0.0855 0.6228 0.0391 0.6198 
+0.0161 0.6797 0.0118 0.6228 0.0391 0.6797 0.0118 0.6704 0.034 
+0.3089 0.1217 0.2989 0.1232 0.2945 0.107 0.3089 0.1217 0.2945 
+0.107 0.3132 0.1093 0.3199 0.1323 0.3089 0.1217 0.3132 0.1093 
+0.3199 0.1323 0.3132 0.1093 0.3364 0.1257 0.3132 0.1093 0.2945 
+0.107 0.2821 0.0972 0.3132 0.1093 0.2821 0.0972 0.3171 0.0913 
+0.3364 0.1257 0.3132 0.1093 0.3171 0.0913 0.3364 0.1257 0.3171 
+0.0913 0.344 0.1167 0.3171 0.0913 0.2821 0.0972 0.2839 0.0583 
+0.3171 0.0913 0.2839 0.0583 0.3176 0.0684 0.344 0.1167 0.3171 
+0.0913 0.3176 0.0684 0.344 0.1167 0.3176 0.0684 0.3475 0.093 
+0.3176 0.0684 0.2839 0.0583 0.2853 0.0167 0.3176 0.0684 0.2853 
+0.0167 0.3168 0.0129 0.3475 0.093 0.3176 0.0684 0.3168 0.0129 
+0.3475 0.093 0.3168 0.0129 0.3573 0.0668 0.2725 0.1509 0.2688 
+0.1539 0.2513 0.1436 0.2725 0.1509 0.2513 0.1436 0.2588 0.1387 
+0.2829 0.1405 0.2725 0.1509 0.2588 0.1387 0.2829 0.1405 0.2588 
+0.1387 0.2632 0.1293 0.3309 0.1653 0.3269 0.1467 0.3474 0.1416 
+0.3309 0.1653 0.3474 0.1416 0.3519 0.1665 0.3199 0.1323 0.3364 
+0.1257 0.3474 0.1416 0.3199 0.1323 0.3474 0.1416 0.3269 0.1467 
+0.2945 0.107 0.2989 0.1232 0.2913 0.1311 0.2945 0.107 0.2913 
+0.1311 0.2722 0.1199 0.3519 0.1665 0.3474 0.1416 0.3534 0.1414 
+0.3519 0.1665 0.3534 0.1414 0.3593 0.1618 0.2632 0.1293 0.2588 
+0.1387 0.249 0.1303 0.2632 0.1293 0.249 0.1303 0.2531 0.1241 
+0.2588 0.1387 0.2513 0.1436 0.2433 0.1379 0.2588 0.1387 0.2433 
+0.1379 0.249 0.1303 0.344 0.1167 0.3534 0.1414 0.3474 0.1416 
+0.344 0.1167 0.3474 0.1416 0.3364 0.1257 0.2945 0.107 0.2722 
+0.1199 0.2593 0.1165 0.2945 0.107 0.2593 0.1165 0.2821 0.0972 
+0.249 0.1303 0.2433 0.1379 0.2426 0.1291 0.249 0.1303 0.2426 
+0.1291 0.246 0.126 0.2853 0.0167 0.2839 0.0583 0.2677 0.0586 
+0.2853 0.0167 0.2677 0.0586 0.2771 0.021 0.223 0.1297 0.216 
+0.107 0.2299 0.1101 0.223 0.1297 0.2299 0.1101 0.2349 0.121 
+0.2433 0.1379 0.223 0.1297 0.2349 0.121 0.2433 0.1379 0.2349 
+0.121 0.2426 0.1291 0.2839 0.0583 0.2821 0.0972 0.2699 0.0956 
+0.2839 0.0583 0.2699 0.0956 0.2677 0.0586 0.2821 0.0972 0.2593 
+0.1165 0.2531 0.1135 0.2821 0.0972 0.2531 0.1135 0.2699 0.0956 
+0.2531 0.1241 0.249 0.1303 0.246 0.126 0.2531 0.1241 0.246 
+0.126 0.2486 0.1204 0.2167 0.0858 0.2143 0.0562 0.221 0.0569 
+0.2167 0.0858 0.221 0.0569 0.225 0.086 0.216 0.107 0.2167 
+0.0858 0.225 0.086 0.216 0.107 0.225 0.086 0.2299 0.1101 
+0.2143 0.0562 0.2395 0.0134 0.2416 0.0194 0.2143 0.0562 0.2416 
+0.0194 0.221 0.0569 0.2395 0.0134 0.2853 0.0167 0.2771 0.021 
+0.2395 0.0134 0.2771 0.021 0.2416 0.0194 0.2416 0.0194 0.2771 
+0.021 0.2677 0.0586 0.2416 0.0194 0.2677 0.0586 0.221 0.0569 
+0.2699 0.0956 0.225 0.086 0.221 0.0569 0.2699 0.0956 0.221 
+0.0569 0.2677 0.0586 0.225 0.086 0.2699 0.0956 0.2531 0.1135 
+0.225 0.086 0.2531 0.1135 0.2299 0.1101 0.4585 0.5268 0.4329 
+0.5265 0.431 0.5004 0.4585 0.5268 0.431 0.5004 0.4632 0.5039 
+0.5012 0.4744 0.5122 0.4126 0.5444 0.4242 0.5012 0.4744 0.5444 
+0.4242 0.5426 0.4807 0.4295 0.3699 0.412 0.3576 0.4717 0.2835 
+0.4295 0.3699 0.4717 0.2835 0.4821 0.29 0.4663 0.4733 0.4818 
+0.4007 0.5122 0.4126 0.4663 0.4733 0.5122 0.4126 0.5012 0.4744 
+0.4821 0.29 0.4717 0.2835 0.4863 0.2576 0.4821 0.29 0.4863 
+0.2576 0.4976 0.2662 0.4976 0.2662 0.4863 0.2576 0.5057 0.2185 
+0.4976 0.2662 0.5057 0.2185 0.5167 0.2226 0.5167 0.2226 0.5057 
+0.2185 0.5503 0.1417 0.5167 0.2226 0.5503 0.1417 0.5533 0.1407 
+0.2913 0.1311 0.2829 0.1405 0.2632 0.1293 0.2913 0.1311 0.2632 
+0.1293 0.2722 0.1199 0.2722 0.1199 0.2632 0.1293 0.2531 0.1241 
+0.2722 0.1199 0.2531 0.1241 0.2593 0.1165 0.2593 0.1165 0.2531 
+0.1241 0.2486 0.1204 0.2593 0.1165 0.2486 0.1204 0.2531 0.1135 
+0.2486 0.1204 0.2349 0.121 0.2299 0.1101 0.2486 0.1204 0.2299 
+0.1101 0.2531 0.1135 0.2426 0.1291 0.2349 0.121 0.2486 0.1204 
+0.2426 0.1291 0.2486 0.1204 0.246 0.126 0.9098 0.5087 0.9092 
+0.5026 0.9194 0.4961 0.9098 0.5087 0.9194 0.4961 0.9224 0.4989 
+0.8952 0.4998 0.9025 0.4943 0.9068 0.5029 0.8952 0.4998 0.9068 
+0.5029 0.9048 0.5111 0.9048 0.5111 0.9068 0.5029 0.9092 0.5026 
+0.9048 0.5111 0.9092 0.5026 0.9098 0.5087 0.8913 0.4878 0.8987 
+0.4858 0.9025 0.4943 0.8913 0.4878 0.9025 0.4943 0.8952 0.4998 
+0.9092 0.5026 0.9103 0.4988 0.9162 0.4949 0.9092 0.5026 0.9162 
+0.4949 0.9194 0.4961 0.8987 0.4858 0.9022 0.4848 0.9051 0.4927 
+0.8987 0.4858 0.9051 0.4927 0.9025 0.4943 0.9025 0.4943 0.9051 
+0.4927 0.9085 0.4992 0.9025 0.4943 0.9085 0.4992 0.9068 0.5029 
+0.9068 0.5029 0.9085 0.4992 0.9103 0.4988 0.9068 0.5029 0.9103 
+0.4988 0.9092 0.5026 0.5397 0.5005 0.4964 0.5006 0.5012 0.4744 
+0.5397 0.5005 0.5012 0.4744 0.5426 0.4807 0.4964 0.5006 0.4632 
+0.5039 0.4663 0.4733 0.4964 0.5006 0.4663 0.4733 0.5012 0.4744 
+0.431 0.5004 0.4329 0.5265 0.4077 0.5309 0.431 0.5004 0.4077 
+0.5309 0.4041 0.4901 0.5715 0.5008 0.5397 0.5005 0.5426 0.4807 
+0.5715 0.5008 0.5426 0.4807 0.5739 0.483 0.6023 0.4972 0.6078 
+0.4801 0.6266 0.479 0.6023 0.4972 0.6266 0.479 0.6159 0.5031 
+0.4288 0.4635 0.4534 0.3905 0.4818 0.4007 0.4288 0.4635 0.4818 
+0.4007 0.4663 0.4733 0.5715 0.5008 0.5739 0.483 0.6078 0.4801 
+0.5715 0.5008 0.6078 0.4801 0.6023 0.4972 0.5625 0.5261 0.5948 
+0.5322 0.5803 0.5647 0.5625 0.5261 0.5803 0.5647 0.5514 0.5577 
+0.3887 0.4383 0.3885 0.3809 0.412 0.3576 0.3887 0.4383 0.412 
+0.3576 0.4295 0.3699 0.431 0.5004 0.4041 0.4901 0.3887 0.4383 
+0.431 0.5004 0.3887 0.4383 0.4288 0.4635 0.3887 0.4383 0.4041 
+0.4901 0.3806 0.4967 0.3887 0.4383 0.3806 0.4967 0.3806 0.4434 
+0.4534 0.3905 0.4288 0.4635 0.3887 0.4383 0.4534 0.3905 0.3887 
+0.4383 0.4295 0.3699 0.5715 0.5008 0.6023 0.4972 0.5948 0.5322 
+0.5715 0.5008 0.5948 0.5322 0.5625 0.5261 0.5628 0.592 0.5723 
+0.5813 0.5988 0.5805 0.5628 0.592 0.5988 0.5805 0.5984 0.5898 
+0.5723 0.5813 0.5803 0.5647 0.5997 0.5718 0.5723 0.5813 0.5997 
+0.5718 0.5988 0.5805 0.5514 0.5577 0.5803 0.5647 0.5723 0.5813 
+0.5514 0.5577 0.5723 0.5813 0.5478 0.5756 0.5272 0.5864 0.5478 
+0.5756 0.5723 0.5813 0.5272 0.5864 0.5723 0.5813 0.5628 0.592 
+0.8203 0.4686 0.8209 0.4333 0.8265 0.4386 0.8203 0.4686 0.8265 
+0.4386 0.8278 0.4616 0.8203 0.4686 0.7971 0.4615 0.7991 0.4267 
+0.8203 0.4686 0.7991 0.4267 0.8209 0.4333 0.8209 0.4333 0.8273 
+0.4165 0.8362 0.4251 0.8209 0.4333 0.8362 0.4251 0.8265 0.4386 
+0.8209 0.4333 0.7991 0.4267 0.805 0.4007 0.8209 0.4333 0.805 
+0.4007 0.8273 0.4165 0.805 0.4007 0.8166 0.3682 0.8398 0.3862 
+0.805 0.4007 0.8398 0.3862 0.8273 0.4165 0.8362 0.4251 0.8273 
+0.4165 0.8398 0.3862 0.8362 0.4251 0.8398 0.3862 0.8613 0.4017 
+0.8166 0.3682 0.7867 0.3352 0.8165 0.3307 0.8166 0.3682 0.8165 
+0.3307 0.8274 0.3447 0.8175 0.3115 0.8165 0.3307 0.7867 0.3352 
+0.8175 0.3115 0.7867 0.3352 0.803 0.2957 0.8761 0.4403 0.8656 
+0.4611 0.8506 0.4583 0.8166 0.3682 0.8274 0.3447 0.8548 0.3602 
+0.8166 0.3682 0.8548 0.3602 0.8398 0.3862 0.8418 0.3328 0.8521 
+0.333 0.8689 0.3484 0.8418 0.3328 0.8689 0.3484 0.8548 0.3602 
+0.8548 0.3602 0.8274 0.3447 0.8356 0.3351 0.8548 0.3602 0.8356 
+0.3351 0.8418 0.3328 0.835 0.3081 0.8175 0.3115 0.803 0.2957 
+0.835 0.3081 0.803 0.2957 0.8273 0.2829 0.8548 0.3602 0.881 
+0.392 0.8613 0.4017 0.8548 0.3602 0.8613 0.4017 0.8398 0.3862 
+0.8729 0.464 0.8864 0.4506 0.8836 0.4648 0.8729 0.464 0.8836 
+0.4648 0.8789 0.468 0.8864 0.4506 0.8988 0.4461 0.888 0.4645 
+0.8864 0.4506 0.888 0.4645 0.8836 0.4648 0.888 0.4645 0.8952 
+0.4665 0.8913 0.4786 0.888 0.4645 0.8913 0.4786 0.8861 0.4773 
+0.9132 0.4159 0.8911 0.4273 0.881 0.392 0.9132 0.4159 0.881 
+0.392 0.8998 0.3838 0.8911 0.4273 0.8988 0.4461 0.8864 0.4506 
+0.8911 0.4273 0.8864 0.4506 0.8761 0.4403 0.8613 0.4017 0.881 
+0.392 0.8911 0.4273 0.8613 0.4017 0.8911 0.4273 0.8761 0.4403 
+0.8362 0.4251 0.8613 0.4017 0.8761 0.4403 0.8548 0.3602 0.8689 
+0.3484 0.8998 0.3838 0.8548 0.3602 0.8998 0.3838 0.881 0.392 
+0.8689 0.3484 0.8521 0.333 0.8608 0.312 0.8689 0.3484 0.8608 
+0.312 0.8848 0.3319 0.835 0.3081 0.8608 0.312 0.8521 0.333 
+0.835 0.3081 0.8521 0.333 0.8418 0.3328 0.8418 0.3328 0.8356 
+0.3351 0.8175 0.3115 0.8418 0.3328 0.8175 0.3115 0.835 0.3081 
+0.8165 0.3307 0.8175 0.3115 0.8356 0.3351 0.8165 0.3307 0.8356 
+0.3351 0.8274 0.3447 0.8273 0.2829 0.903 0.2774 0.8608 0.312 
+0.8273 0.2829 0.8608 0.312 0.835 0.3081 0.8848 0.3319 0.8608 
+0.312 0.903 0.2774 0.8848 0.3319 0.903 0.2774 0.9158 0.3136 
+0.7867 0.3352 0.7659 0.3139 0.7925 0.2729 0.7867 0.3352 0.7925 
+0.2729 0.803 0.2957 0.7659 0.3139 0.7337 0.2737 0.7701 0.2426 
+0.7659 0.3139 0.7701 0.2426 0.7925 0.2729 0.7337 0.2737 0.7104 
+0.2481 0.7528 0.2183 0.7337 0.2737 0.7528 0.2183 0.7701 0.2426 
+0.8166 0.3682 0.805 0.4007 0.7809 0.3852 0.8166 0.3682 0.7809 
+0.3852 0.7867 0.3352 0.8848 0.3319 0.9244 0.3725 0.8998 0.3838 
+0.8848 0.3319 0.8998 0.3838 0.8689 0.3484 0.9132 0.4159 0.8998 
+0.3838 0.9244 0.3725 0.9132 0.4159 0.9244 0.3725 0.9361 0.4067 
+0.9167 0.4489 0.9132 0.4159 0.9361 0.4067 0.9167 0.4489 0.9361 
+0.4067 0.9409 0.4412 0.9167 0.4489 0.8988 0.4461 0.8911 0.4273 
+0.9167 0.4489 0.8911 0.4273 0.9132 0.4159 0.9048 0.4553 0.8988 
+0.4461 0.9167 0.4489 0.9048 0.4553 0.9167 0.4489 0.9098 0.4577 
+0.888 0.4645 0.8988 0.4461 0.9048 0.4553 0.888 0.4645 0.9048 
+0.4553 0.8952 0.4665 0.9167 0.4489 0.9334 0.4615 0.9224 0.4675 
+0.9167 0.4489 0.9224 0.4675 0.9098 0.4577 0.3095 0.9717 0.3003 
+0.9611 0.3064 0.954 0.3095 0.9717 0.3064 0.954 0.3179 0.9654 
+0.3247 0.9619 0.3125 0.9487 0.324 0.9423 0.3247 0.9619 0.324 
+0.9423 0.3348 0.9572 0.8836 0.4648 0.888 0.4645 0.8861 0.4773 
+0.8836 0.4648 0.8861 0.4773 0.8839 0.4772 0.8789 0.468 0.8836 
+0.4648 0.8839 0.4772 0.8789 0.468 0.8839 0.4772 0.8803 0.478 
+0.8744 0.4748 0.8789 0.468 0.8803 0.478 0.8744 0.4748 0.8803 
+0.478 0.8744 0.4801 0.8729 0.464 0.8668 0.4728 0.8575 0.4688 
+0.8729 0.464 0.8575 0.4688 0.8656 0.4611 0.8668 0.4728 0.8729 
+0.464 0.8789 0.468 0.8668 0.4728 0.8789 0.468 0.8744 0.4748 
+0.8506 0.4583 0.8656 0.4611 0.8575 0.4688 0.8506 0.4583 0.8575 
+0.4688 0.8415 0.4664 0.8656 0.4611 0.8761 0.4403 0.8864 0.4506 
+0.8656 0.4611 0.8864 0.4506 0.8729 0.464 0.8278 0.4616 0.8415 
+0.4664 0.837 0.475 0.8278 0.4616 0.837 0.475 0.8203 0.4686 
+0.8415 0.4664 0.8575 0.4688 0.8543 0.4774 0.8415 0.4664 0.8543 
+0.4774 0.837 0.475 0.8575 0.4688 0.8668 0.4728 0.8662 0.4795 
+0.8575 0.4688 0.8662 0.4795 0.8543 0.4774 0.8744 0.4801 0.8662 
+0.4795 0.8668 0.4728 0.8744 0.4801 0.8668 0.4728 0.8744 0.4748 
+0.8662 0.4795 0.8655 0.4832 0.8543 0.4832 0.8662 0.4795 0.8543 
+0.4832 0.8543 0.4774 0.8662 0.4795 0.8744 0.4801 0.8743 0.4832 
+0.8662 0.4795 0.8743 0.4832 0.8655 0.4832 0.8543 0.4832 0.8352 
+0.4832 0.837 0.475 0.8543 0.4832 0.837 0.475 0.8543 0.4774 
+0.9427 0.4599 0.9334 0.4615 0.9167 0.4489 0.9427 0.4599 0.9167 
+0.4489 0.9409 0.4412 0.3472 0.95 0.3335 0.935 0.3471 0.9262 
+0.3472 0.95 0.3471 0.9262 0.3597 0.9474 0.9244 0.3725 0.938 
+0.3543 0.9611 0.3933 0.9244 0.3725 0.9611 0.3933 0.9361 0.4067 
+0.8848 0.3319 0.9158 0.3136 0.938 0.3543 0.8848 0.3319 0.938 
+0.3543 0.9244 0.3725 0.9427 0.4599 0.9409 0.4412 0.9519 0.4451 
+0.9427 0.4599 0.9519 0.4451 0.9527 0.459 0.9611 0.3933 0.9519 
+0.4451 0.9409 0.4412 0.9611 0.3933 0.9409 0.4412 0.9361 0.4067 
+0.3806 0.9521 0.3737 0.95 0.3634 0.9201 0.3806 0.9521 0.3634 
+0.9201 0.3806 0.9182 0.9611 0.3933 0.9843 0.4372 0.9527 0.459 
+0.9611 0.3933 0.9527 0.459 0.9519 0.4451 0.8273 0.2829 0.8174 
+0.2566 0.8926 0.2324 0.8273 0.2829 0.8926 0.2324 0.903 0.2774 
+0.8174 0.2566 0.8 0.2231 0.8819 0.1984 0.8174 0.2566 0.8819 
+0.1984 0.8926 0.2324 0.3597 0.9474 0.3471 0.9262 0.3634 0.9201 
+0.3597 0.9474 0.3634 0.9201 0.3737 0.95 0.3348 0.9572 0.324 
+0.9423 0.3335 0.935 0.3348 0.9572 0.3335 0.935 0.3472 0.95 
+0.3125 0.9487 0.3247 0.9619 0.3179 0.9654 0.3125 0.9487 0.3179 
+0.9654 0.3064 0.954 0.8273 0.2829 0.803 0.2957 0.7925 0.2729 
+0.8273 0.2829 0.7925 0.2729 0.8174 0.2566 0.7925 0.2729 0.7701 
+0.2426 0.8 0.2231 0.7925 0.2729 0.8 0.2231 0.8174 0.2566 
+0.7659 0.3139 0.7867 0.3352 0.7809 0.3852 0.7659 0.3139 0.7809 
+0.3852 0.7528 0.3575 0.7986 0.4832 0.7644 0.4832 0.765 0.4509 
+0.7986 0.4832 0.765 0.4509 0.7971 0.4615 0.765 0.4509 0.7713 
+0.4147 0.7991 0.4267 0.765 0.4509 0.7991 0.4267 0.7971 0.4615 
+0.7713 0.4147 0.7809 0.3852 0.805 0.4007 0.7713 0.4147 0.805 
+0.4007 0.7991 0.4267 0.7337 0.2737 0.7659 0.3139 0.7528 0.3575 
+0.7337 0.2737 0.7528 0.3575 0.7097 0.3178 0.7104 0.2481 0.7337 
+0.2737 0.7097 0.3178 0.7104 0.2481 0.7097 0.3178 0.6722 0.3047 
+0.7713 0.4147 0.743 0.3938 0.7528 0.3575 0.7713 0.4147 0.7528 
+0.3575 0.7809 0.3852 0.743 0.3938 0.7026 0.3517 0.7097 0.3178 
+0.743 0.3938 0.7097 0.3178 0.7528 0.3575 0.7259 0.4334 0.6754 
+0.3758 0.7026 0.3517 0.7259 0.4334 0.7026 0.3517 0.743 0.3938 
+0.7259 0.4334 0.743 0.3938 0.7713 0.4147 0.7259 0.4334 0.7713 
+0.4147 0.765 0.4509 0.7026 0.3517 0.6754 0.3758 0.6722 0.3047 
+0.7026 0.3517 0.6722 0.3047 0.7097 0.3178 0.3003 0.9611 0.3095 
+0.9717 0.3035 0.9786 0.3003 0.9611 0.3035 0.9786 0.2935 0.9683 
+0.7906 0.2001 0.8771 0.1827 0.8819 0.1984 0.7906 0.2001 0.8819 
+0.1984 0.8 0.2231 0.7701 0.2426 0.7528 0.2183 0.7906 0.2001 
+0.7701 0.2426 0.7906 0.2001 0.8 0.2231 0.7259 0.4334 0.683 
+0.4487 0.6487 0.3867 0.7259 0.4334 0.6487 0.3867 0.6754 0.3758 
+0.6754 0.3758 0.6487 0.3867 0.6462 0.2965 0.6754 0.3758 0.6462 
+0.2965 0.6722 0.3047 0.6722 0.3047 0.6462 0.2965 0.6849 0.2267 
+0.6722 0.3047 0.6849 0.2267 0.7104 0.2481 0.765 0.4509 0.7644 
+0.4832 0.683 0.4487 0.765 0.4509 0.683 0.4487 0.7259 0.4334 
+0.3335 0.935 0.3102 0.895 0.3259 0.8826 0.3335 0.935 0.3259 
+0.8826 0.3471 0.9262 0.3806 0.9182 0.3634 0.9201 0.3542 0.8623 
+0.3806 0.9182 0.3542 0.8623 0.3806 0.8598 0.3471 0.9262 0.3259 
+0.8826 0.3542 0.8623 0.3471 0.9262 0.3542 0.8623 0.3634 0.9201 
+0.3064 0.954 0.2932 0.9438 0.2937 0.9314 0.3064 0.954 0.2937 
+0.9314 0.3125 0.9487 0.3125 0.9487 0.2937 0.9314 0.296 0.9121 
+0.3125 0.9487 0.296 0.9121 0.324 0.9423 0.2935 0.9683 0.2867 
+0.9649 0.2907 0.9577 0.2935 0.9683 0.2907 0.9577 0.3003 0.9611 
+0.3064 0.954 0.3003 0.9611 0.2907 0.9577 0.3064 0.954 0.2907 
+0.9577 0.2932 0.9438 0.296 0.9121 0.3102 0.895 0.3335 0.935 
+0.296 0.9121 0.3335 0.935 0.324 0.9423 0.3259 0.8826 0.3108 
+0.8259 0.3445 0.8065 0.3259 0.8826 0.3445 0.8065 0.3542 0.8623 
+0.296 0.9121 0.2648 0.8892 0.2837 0.8678 0.296 0.9121 0.2837 
+0.8678 0.3102 0.895 0.2937 0.9314 0.2639 0.9054 0.2648 0.8892 
+0.2937 0.9314 0.2648 0.8892 0.296 0.9121 0.2907 0.9577 0.2658 
+0.9353 0.2634 0.9182 0.2907 0.9577 0.2634 0.9182 0.2932 0.9438 
+0.2867 0.9649 0.264 0.9461 0.2658 0.9353 0.2867 0.9649 0.2658 
+0.9353 0.2907 0.9577 0.2837 0.8678 0.3108 0.8259 0.3259 0.8826 
+0.2837 0.8678 0.3259 0.8826 0.3102 0.895 0.2648 0.8892 0.2411 
+0.8672 0.2545 0.8296 0.2648 0.8892 0.2545 0.8296 0.2837 0.8678 
+0.2639 0.9054 0.234 0.8861 0.2411 0.8672 0.2639 0.9054 0.2411 
+0.8672 0.2648 0.8892 0.2206 0.8561 0.201 0.8508 0.2061 0.8314 
+0.2206 0.8561 0.2061 0.8314 0.2338 0.8241 0.2165 0.8775 0.1891 
+0.8752 0.201 0.8508 0.2165 0.8775 0.201 0.8508 0.2206 0.8561 
+0.201 0.8508 0.121 0.8423 0.118 0.8213 0.201 0.8508 0.118 
+0.8213 0.2061 0.8314 0.1891 0.8752 0.1193 0.8663 0.121 0.8423 
+0.1891 0.8752 0.121 0.8423 0.201 0.8508 0.121 0.8423 0.1045 
+0.8476 0.0984 0.8243 0.121 0.8423 0.0984 0.8243 0.118 0.8213 
+0.1193 0.8663 0.1012 0.8625 0.1045 0.8476 0.1193 0.8663 0.1045 
+0.8476 0.121 0.8423 0.1045 0.8476 0.0101 0.8291 0.0114 0.8212 
+0.1045 0.8476 0.0114 0.8212 0.0984 0.8243 0.1012 0.8625 0.0096 
+0.84 0.0101 0.8291 0.1012 0.8625 0.0101 0.8291 0.1045 0.8476 
+0.2937 0.9314 0.2932 0.9438 0.2634 0.9182 0.2937 0.9314 0.2634 
+0.9182 0.2639 0.9054 0.2165 0.8775 0.234 0.8861 0.2301 0.8976 
+0.2165 0.8775 0.2301 0.8976 0.1948 0.9023 0.234 0.8861 0.2639 
+0.9054 0.2634 0.9182 0.234 0.8861 0.2634 0.9182 0.2301 0.8976 
+0.1193 0.8663 0.1891 0.8752 0.183 0.8894 0.1193 0.8663 0.183 
+0.8894 0.1195 0.875 0.2061 0.8314 0.118 0.8213 0.1133 0.7934 
+0.2061 0.8314 0.1133 0.7934 0.2284 0.7921 0.2338 0.8241 0.2061 
+0.8314 0.2284 0.7921 0.2338 0.8241 0.2284 0.7921 0.2534 0.7915 
+0.2284 0.7921 0.1133 0.7934 0.1186 0.7794 0.2284 0.7921 0.1186 
+0.7794 0.2033 0.7638 0.2872 0.7571 0.3301 0.7777 0.2798 0.8012 
+0.2872 0.7571 0.2798 0.8012 0.2534 0.7915 0.2284 0.7921 0.2033 
+0.7638 0.2393 0.7343 0.2284 0.7921 0.2393 0.7343 0.2622 0.7497 
+0.3108 0.8259 0.2837 0.8678 0.2545 0.8296 0.3108 0.8259 0.2545 
+0.8296 0.2798 0.8012 0.2033 0.7638 0.1186 0.7794 0.1269 0.7637 
+0.2033 0.7638 0.1269 0.7637 0.1841 0.7465 0.118 0.8213 0.0984 
+0.8243 0.1021 0.7922 0.118 0.8213 0.1021 0.7922 0.1133 0.7934 
+0.0984 0.8243 0.0114 0.8212 0.0132 0.8141 0.0984 0.8243 0.0132 
+0.8141 0.1021 0.7922 0.1841 0.7465 0.1804 0.711 0.2393 0.7343 
+0.1841 0.7465 0.2393 0.7343 0.2033 0.7638 0.1542 0.708 0.1804 
+0.711 0.1841 0.7465 0.1542 0.708 0.1841 0.7465 0.1683 0.7348 
+0.264 0.9461 0.229 0.9338 0.2276 0.9145 0.264 0.9461 0.2276 
+0.9145 0.2658 0.9353 0.1982 0.9122 0.2276 0.9145 0.229 0.9338 
+0.1982 0.9122 0.229 0.9338 0.206 0.9355 0.2621 0.9542 0.2372 
+0.954 0.229 0.9338 0.2621 0.9542 0.229 0.9338 0.264 0.9461 
+0.2634 0.9182 0.2658 0.9353 0.2276 0.9145 0.2634 0.9182 0.2276 
+0.9145 0.2301 0.8976 0.1206 0.6731 0.1304 0.6627 0.1572 0.6831 
+0.1206 0.6731 0.1572 0.6831 0.1382 0.6912 0.1804 0.711 0.1572 
+0.6831 0.1779 0.6581 0.1804 0.711 0.1779 0.6581 0.2064 0.6748 
+0.2393 0.7343 0.1804 0.711 0.2064 0.6748 0.2393 0.7343 0.2064 
+0.6748 0.2582 0.6799 0.2622 0.7497 0.2393 0.7343 0.2582 0.6799 
+0.2622 0.7497 0.2582 0.6799 0.2989 0.6998 0.2622 0.7497 0.2989 
+0.6998 0.3362 0.7002 0.2622 0.7497 0.3362 0.7002 0.2872 0.7571 
+0.3202 0.6531 0.3257 0.5969 0.3524 0.6009 0.3202 0.6531 0.3524 
+0.6009 0.3533 0.6569 0.2716 0.6365 0.2748 0.5857 0.3079 0.591 
+0.2716 0.6365 0.3079 0.591 0.3021 0.6453 0.1934 0.6269 0.1985 
+0.592 0.2341 0.5864 0.1934 0.6269 0.2341 0.5864 0.2316 0.6323 
+0.2316 0.6323 0.2341 0.5864 0.2748 0.5857 0.2316 0.6323 0.2748 
+0.5857 0.2716 0.6365 0.2341 0.5864 0.2335 0.5524 0.2723 0.5474 
+0.2341 0.5864 0.2723 0.5474 0.2748 0.5857 0.2748 0.5857 0.2723 
+0.5474 0.3064 0.5574 0.2748 0.5857 0.3064 0.5574 0.3079 0.591 
+0.2272 0.5223 0.2335 0.5524 0.2099 0.5577 0.2272 0.5223 0.2099 
+0.5577 0.1987 0.5261 0.3064 0.5574 0.3028 0.5268 0.3284 0.5265 
+0.3064 0.5574 0.3284 0.5265 0.3261 0.5592 0.2335 0.5524 0.2341 
+0.5864 0.2135 0.5756 0.2335 0.5524 0.2135 0.5756 0.2099 0.5577 
+0.3257 0.5969 0.3261 0.5592 0.3547 0.5636 0.3257 0.5969 0.3547 
+0.5636 0.3524 0.6009 0.2335 0.5524 0.2272 0.5223 0.2679 0.5191 
+0.2335 0.5524 0.2679 0.5191 0.2723 0.5474 0.2723 0.5474 0.2679 
+0.5191 0.3028 0.5268 0.2723 0.5474 0.3028 0.5268 0.3064 0.5574 
+0.3547 0.5636 0.3536 0.5309 0.3806 0.5337 0.3547 0.5636 0.3806 
+0.5337 0.3806 0.5658 0.2272 0.5223 0.1987 0.5261 0.1898 0.5008 
+0.2272 0.5223 0.1898 0.5008 0.2216 0.5005 0.3079 0.591 0.3064 
+0.5574 0.3261 0.5592 0.3079 0.591 0.3261 0.5592 0.3257 0.5969 
+0.3261 0.5592 0.3284 0.5265 0.3536 0.5309 0.3261 0.5592 0.3536 
+0.5309 0.3547 0.5636 0.2981 0.5039 0.295 0.4733 0.3325 0.4635 
+0.2981 0.5039 0.3325 0.4635 0.3303 0.5004 0.2411 0.8672 0.2206 
+0.8561 0.2338 0.8241 0.2411 0.8672 0.2338 0.8241 0.2545 0.8296 
+0.234 0.8861 0.2165 0.8775 0.2206 0.8561 0.234 0.8861 0.2206 
+0.8561 0.2411 0.8672 0.1891 0.8752 0.2165 0.8775 0.1948 0.9023 
+0.1891 0.8752 0.1948 0.9023 0.183 0.8894 0.2545 0.8296 0.2338 
+0.8241 0.2534 0.7915 0.2545 0.8296 0.2534 0.7915 0.2798 0.8012 
+0.2622 0.7497 0.2872 0.7571 0.2534 0.7915 0.2622 0.7497 0.2534 
+0.7915 0.2284 0.7921 0.3362 0.7002 0.3638 0.7068 0.3301 0.7777 
+0.3362 0.7002 0.3301 0.7777 0.2872 0.7571 0.1779 0.6581 0.1934 
+0.6269 0.2316 0.6323 0.1779 0.6581 0.2316 0.6323 0.2064 0.6748 
+0.2276 0.9145 0.1982 0.9122 0.1948 0.9023 0.2276 0.9145 0.1948 
+0.9023 0.2301 0.8976 0.1804 0.711 0.1542 0.708 0.1382 0.6912 
+0.1804 0.711 0.1382 0.6912 0.1572 0.6831 0.2372 0.954 0.2144 
+0.9597 0.206 0.9355 0.2372 0.954 0.206 0.9355 0.229 0.9338 
+0.3533 0.6569 0.3806 0.6545 0.3806 0.7026 0.3533 0.6569 0.3806 
+0.7026 0.3638 0.7068 0.3202 0.6531 0.3533 0.6569 0.3638 0.7068 
+0.3202 0.6531 0.3638 0.7068 0.3362 0.7002 0.3362 0.7002 0.2989 
+0.6998 0.3021 0.6453 0.3362 0.7002 0.3021 0.6453 0.3202 0.6531 
+0.3257 0.5969 0.3202 0.6531 0.3021 0.6453 0.3257 0.5969 0.3021 
+0.6453 0.3079 0.591 0.2798 0.8012 0.3301 0.7777 0.3445 0.8065 
+0.2798 0.8012 0.3445 0.8065 0.3108 0.8259 0.2316 0.6323 0.2716 
+0.6365 0.2582 0.6799 0.2316 0.6323 0.2582 0.6799 0.2064 0.6748 
+0.2989 0.6998 0.2582 0.6799 0.2716 0.6365 0.2989 0.6998 0.2716 
+0.6365 0.3021 0.6453 0.1186 0.7794 0.1004 0.7821 0.1007 0.7672 
+0.1186 0.7794 0.1007 0.7672 0.1269 0.7637 0.1012 0.8625 0.1193 
+0.8663 0.1195 0.875 0.1012 0.8625 0.1195 0.875 0.1003 0.8718 
+0.1021 0.7922 0.1004 0.7821 0.1186 0.7794 0.1021 0.7922 0.1186 
+0.7794 0.1133 0.7934 0.2795 0.4007 0.2457 0.2996 0.2594 0.2977 
+0.2795 0.4007 0.2594 0.2977 0.3079 0.3905 0.2491 0.4126 0.2251 
+0.3056 0.2457 0.2996 0.2491 0.4126 0.2457 0.2996 0.2795 0.4007 
+0.1885 0.4298 0.1775 0.3204 0.1947 0.321 0.1885 0.4298 0.1947 
+0.321 0.2169 0.4242 0.2679 0.5191 0.2648 0.5006 0.2981 0.5039 
+0.2679 0.5191 0.2981 0.5039 0.3028 0.5268 0.2491 0.4126 0.2169 
+0.4242 0.1947 0.321 0.2491 0.4126 0.1947 0.321 0.2251 0.3056 
+0.2272 0.5223 0.2216 0.5005 0.2648 0.5006 0.2272 0.5223 0.2648 
+0.5006 0.2679 0.5191 0.1328 0.4205 0.1396 0.3255 0.1625 0.321 
+0.1328 0.4205 0.1625 0.321 0.1592 0.4284 0.1885 0.4298 0.1592 
+0.4284 0.1625 0.321 0.1885 0.4298 0.1625 0.321 0.1775 0.3204 
+0.1328 0.4205 0.1592 0.4284 0.1534 0.4801 0.1328 0.4205 0.1534 
+0.4801 0.1119 0.4495 0.2594 0.2977 0.2792 0.29 0.3318 0.3699 
+0.2594 0.2977 0.3318 0.3699 0.3079 0.3905 0.1873 0.483 0.1534 
+0.4801 0.1592 0.4284 0.1873 0.483 0.1592 0.4284 0.1885 0.4298 
+0.2187 0.4807 0.1873 0.483 0.1885 0.4298 0.2187 0.4807 0.1885 
+0.4298 0.2169 0.4242 0.1021 0.7922 0.0132 0.8141 0.0127 0.808 
+0.1021 0.7922 0.0127 0.808 0.1004 0.7821 0.1007 0.7672 0.1004 
+0.7821 0.0127 0.808 0.1007 0.7672 0.0127 0.808 0.0111 0.8023 
+0.0096 0.84 0.1012 0.8625 0.1003 0.8718 0.0096 0.84 0.1003 
+0.8718 0.0112 0.8532 0.1625 0.321 0.1594 0.2849 0.1747 0.2794 
+0.1625 0.321 0.1747 0.2794 0.1775 0.3204 0.2457 0.2996 0.2395 
+0.278 0.2498 0.2746 0.2457 0.2996 0.2498 0.2746 0.2594 0.2977 
+0.2594 0.2977 0.2498 0.2746 0.2637 0.2662 0.2594 0.2977 0.2637 
+0.2662 0.2792 0.29 0.2251 0.3056 0.2167 0.2799 0.2395 0.278 
+0.2251 0.3056 0.2395 0.278 0.2457 0.2996 0.1947 0.321 0.1917 
+0.2807 0.2167 0.2799 0.1947 0.321 0.2167 0.2799 0.2251 0.3056 
+0.1396 0.3255 0.1335 0.2935 0.1594 0.2849 0.1396 0.3255 0.1594 
+0.2849 0.1625 0.321 0.1775 0.3204 0.1747 0.2794 0.1917 0.2807 
+0.1775 0.3204 0.1917 0.2807 0.1947 0.321 0.1917 0.2807 0.1933 
+0.2443 0.2103 0.2411 0.1917 0.2807 0.2103 0.2411 0.2167 0.2799 
+0.2167 0.2799 0.2103 0.2411 0.2206 0.2362 0.2167 0.2799 0.2206 
+0.2362 0.2395 0.278 0.1747 0.2794 0.1756 0.2425 0.1933 0.2443 
+0.1747 0.2794 0.1933 0.2443 0.1917 0.2807 0.1335 0.2935 0.1286 
+0.2479 0.1579 0.2429 0.1335 0.2935 0.1579 0.2429 0.1594 0.2849 
+0.1594 0.2849 0.1579 0.2429 0.1756 0.2425 0.1594 0.2849 0.1756 
+0.2425 0.1747 0.2794 0.2498 0.2746 0.2322 0.228 0.2445 0.2226 
+0.2498 0.2746 0.2445 0.2226 0.2637 0.2662 0.2395 0.278 0.2206 
+0.2362 0.2322 0.228 0.2395 0.278 0.2322 0.228 0.2498 0.2746 
+0.2103 0.2411 0.1779 0.1415 0.1899 0.1387 0.2103 0.2411 0.1899 
+0.1387 0.2206 0.2362 0.1756 0.2425 0.1522 0.1518 0.1658 0.1454 
+0.1756 0.2425 0.1658 0.1454 0.1933 0.2443 0.1286 0.2479 0.1288 
+0.1596 0.1453 0.1552 0.1286 0.2479 0.1453 0.1552 0.1579 0.2429 
+0.1579 0.2429 0.1453 0.1552 0.1522 0.1518 0.1579 0.2429 0.1522 
+0.1518 0.1756 0.2425 0.2322 0.228 0.1984 0.1394 0.208 0.1407 
+0.2322 0.228 0.208 0.1407 0.2445 0.2226 0.2206 0.2362 0.1899 
+0.1387 0.1984 0.1394 0.2206 0.2362 0.1984 0.1394 0.2322 0.228 
+0.1933 0.2443 0.1658 0.1454 0.1779 0.1415 0.1933 0.2443 0.1779 
+0.1415 0.2103 0.2411 0.5158 0.1117 0.5176 0.0879 0.5304 0.09 
+0.5158 0.1117 0.5304 0.09 0.5305 0.1144 0.5268 0.0736 0.5346 
+0.0535 0.5419 0.0585 0.5268 0.0736 0.5419 0.0585 0.5321 0.0761 
+0.4134 0.192 0.4155 0.1881 0.4229 0.1912 0.4134 0.192 0.4229 
+0.1912 0.4223 0.1958 0.421 0.178 0.4253 0.1585 0.4402 0.1592 
+0.421 0.178 0.4402 0.1592 0.4285 0.1791 0.5268 0.0736 0.5176 
+0.0879 0.5187 0.0653 0.5268 0.0736 0.5187 0.0653 0.5222 0.0629 
+0.4329 0.1823 0.4223 0.1958 0.4229 0.1912 0.4329 0.1823 0.4229 
+0.1912 0.4285 0.1791 0.5176 0.0879 0.5268 0.0736 0.5321 0.0761 
+0.5176 0.0879 0.5321 0.0761 0.5304 0.09 0.4155 0.1881 0.421 
+0.178 0.4285 0.1791 0.4155 0.1881 0.4285 0.1791 0.4229 0.1912 
+0.5346 0.0535 0.5268 0.0736 0.5222 0.0629 0.5346 0.0535 0.5222 
+0.0629 0.529 0.0541 0.4443 0.16 0.4329 0.1823 0.4285 0.1791 
+0.4443 0.16 0.4285 0.1791 0.4402 0.1592 0.5176 0.0879 0.5018 
+0.0937 0.5061 0.066 0.5176 0.0879 0.5061 0.066 0.5187 0.0653 
+0.4795 0.1118 0.5018 0.0937 0.4993 0.1133 0.4795 0.1118 0.4993 
+0.1133 0.4852 0.1237 0.5158 0.1117 0.4993 0.1133 0.5018 0.0937 
+0.5158 0.1117 0.5018 0.0937 0.5176 0.0879 0.4526 0.1499 0.4443 
+0.16 0.4402 0.1592 0.4526 0.1499 0.4402 0.1592 0.4485 0.1461 
+0.4852 0.1237 0.4741 0.1333 0.4608 0.12 0.4852 0.1237 0.4608 
+0.12 0.4795 0.1118 0.4608 0.12 0.4477 0.1081 0.4744 0.0889 
+0.4608 0.12 0.4744 0.0889 0.4795 0.1118 0.452 0.1247 0.4608 
+0.12 0.4645 0.1249 0.452 0.1247 0.4645 0.1249 0.4544 0.1263 
+0.452 0.1247 0.4422 0.1157 0.4477 0.1081 0.452 0.1247 0.4477 
+0.1081 0.4608 0.12 0.4485 0.1461 0.452 0.1247 0.4544 0.1263 
+0.4485 0.1461 0.4544 0.1263 0.4524 0.1501 0.4485 0.1461 0.4331 
+0.139 0.4422 0.1157 0.4485 0.1461 0.4422 0.1157 0.452 0.1247 
+0.4331 0.139 0.4485 0.1461 0.4402 0.1592 0.4331 0.139 0.4402 
+0.1592 0.4253 0.1585 0.4331 0.139 0.4116 0.1317 0.4237 0.101 
+0.4331 0.139 0.4237 0.101 0.4422 0.1157 0.4477 0.1081 0.4284 
+0.0951 0.4628 0.0576 0.4477 0.1081 0.4628 0.0576 0.4744 0.0889 
+0.4998 0.0565 0.4628 0.0576 0.4535 0.034 0.4998 0.0565 0.4535 
+0.034 0.5011 0.0391 0.4422 0.1157 0.4237 0.101 0.4284 0.0951 
+0.4422 0.1157 0.4284 0.0951 0.4477 0.1081 0.422 0.1626 0.4089 
+0.158 0.4096 0.1546 0.422 0.1626 0.4096 0.1546 0.4253 0.1585 
+0.4253 0.1585 0.4096 0.1546 0.4116 0.1317 0.4253 0.1585 0.4116 
+0.1317 0.4331 0.139 0.4237 0.101 0.4066 0.0882 0.4086 0.0855 
+0.4237 0.101 0.4086 0.0855 0.4284 0.0951 0.4744 0.0889 0.4628 
+0.0576 0.4998 0.0565 0.4744 0.0889 0.4998 0.0565 0.5061 0.066 
+0.4096 0.1546 0.3848 0.1586 0.3902 0.1296 0.4096 0.1546 0.3902 
+0.1296 0.4116 0.1317 0.4089 0.158 0.391 0.1623 0.3848 0.1586 
+0.4089 0.158 0.3848 0.1586 0.4096 0.1546 0.4116 0.1317 0.3902 
+0.1296 0.4066 0.0882 0.4116 0.1317 0.4066 0.0882 0.4237 0.101 
+0.3902 0.1296 0.3674 0.1248 0.38 0.0944 0.3902 0.1296 0.38 
+0.0944 0.4066 0.0882 0.4066 0.0882 0.38 0.0944 0.3776 0.0916 
+0.4066 0.0882 0.3776 0.0916 0.4086 0.0855 0.4795 0.1118 0.4744 
+0.0889 0.5061 0.066 0.4795 0.1118 0.5061 0.066 0.5018 0.0937 
+0.3848 0.1586 0.369 0.161 0.3674 0.1248 0.3848 0.1586 0.3674 
+0.1248 0.3902 0.1296 0.391 0.1623 0.3673 0.1633 0.369 0.161 
+0.391 0.1623 0.369 0.161 0.3848 0.1586 0.3615 0.1243 0.3776 
+0.0916 0.38 0.0944 0.3615 0.1243 0.38 0.0944 0.3674 0.1248 
+0.369 0.161 0.3673 0.1633 0.3615 0.1243 0.369 0.161 0.3615 
+0.1243 0.3674 0.1248 0.4628 0.0576 0.4284 0.0951 0.4086 0.0855 
+0.4628 0.0576 0.4086 0.0855 0.4535 0.034 0.4535 0.034 0.4086 
+0.0855 0.41 0.046 0.4535 0.034 0.41 0.046 0.4442 0.0118 
+0.5011 0.0391 0.4535 0.034 0.4442 0.0118 0.5011 0.0391 0.4442 
+0.0118 0.5041 0.0161 0.082 0.1213 0.0777 0.1089 0.0965 0.1065 
+0.082 0.1213 0.0965 0.1065 0.092 0.1227 0.071 0.1318 0.0545 
+0.1252 0.0777 0.1089 0.071 0.1318 0.0777 0.1089 0.082 0.1213 
+0.0777 0.1089 0.0739 0.0908 0.1089 0.0967 0.0777 0.1089 0.1089 
+0.0967 0.0965 0.1065 0.0545 0.1252 0.0469 0.1162 0.0739 0.0908 
+0.0545 0.1252 0.0739 0.0908 0.0777 0.1089 0.0739 0.0908 0.0733 
+0.0679 0.107 0.0579 0.0739 0.0908 0.107 0.0579 0.1089 0.0967 
+0.0469 0.1162 0.0435 0.0925 0.0733 0.0679 0.0469 0.1162 0.0733 
+0.0679 0.0739 0.0908 0.0733 0.0679 0.0742 0.0124 0.1057 0.0162 
+0.0733 0.0679 0.1057 0.0162 0.107 0.0579 0.0435 0.0925 0.0336 
+0.0663 0.0742 0.0124 0.0435 0.0925 0.0742 0.0124 0.0733 0.0679 
+0.1184 0.1505 0.1322 0.1383 0.1396 0.1431 0.1184 0.1505 0.1396 
+0.1431 0.1221 0.1534 0.1081 0.14 0.1278 0.1288 0.1322 0.1383 
+0.1081 0.14 0.1322 0.1383 0.1184 0.1505 0.0601 0.1648 0.039 
+0.1661 0.0436 0.1411 0.0601 0.1648 0.0436 0.1411 0.064 0.1462 
+0.071 0.1318 0.064 0.1462 0.0436 0.1411 0.071 0.1318 0.0436 
+0.1411 0.0545 0.1252 0.0965 0.1065 0.1188 0.1195 0.0996 0.1306 
+0.0965 0.1065 0.0996 0.1306 0.092 0.1227 0.039 0.1661 0.0316 
+0.1613 0.0375 0.1409 0.039 0.1661 0.0375 0.1409 0.0436 0.1411 
+0.1278 0.1288 0.1379 0.1236 0.1419 0.1298 0.1278 0.1288 0.1419 
+0.1298 0.1322 0.1383 0.1322 0.1383 0.1419 0.1298 0.1477 0.1374 
+0.1322 0.1383 0.1477 0.1374 0.1396 0.1431 0.0469 0.1162 0.0545 
+0.1252 0.0436 0.1411 0.0469 0.1162 0.0436 0.1411 0.0375 0.1409 
+0.0965 0.1065 0.1089 0.0967 0.1316 0.116 0.0965 0.1065 0.1316 
+0.116 0.1188 0.1195 0.1419 0.1298 0.1449 0.1256 0.1484 0.1286 
+0.1419 0.1298 0.1484 0.1286 0.1477 0.1374 0.1057 0.0162 0.1139 
+0.0205 0.1233 0.0581 0.1057 0.0162 0.1233 0.0581 0.107 0.0579 
+0.1679 0.1292 0.156 0.1206 0.161 0.1096 0.1679 0.1292 0.161 
+0.1096 0.175 0.1066 0.1477 0.1374 0.1484 0.1286 0.156 0.1206 
+0.1477 0.1374 0.156 0.1206 0.1679 0.1292 0.107 0.0579 0.1233 
+0.0581 0.1211 0.0951 0.107 0.0579 0.1211 0.0951 0.1089 0.0967 
+0.1089 0.0967 0.1211 0.0951 0.1379 0.113 0.1089 0.0967 0.1379 
+0.113 0.1316 0.116 0.1379 0.1236 0.1424 0.1199 0.1449 0.1256 
+0.1379 0.1236 0.1449 0.1256 0.1419 0.1298 0.1742 0.0853 0.1659 
+0.0855 0.1699 0.0564 0.1742 0.0853 0.1699 0.0564 0.1766 0.0557 
+0.175 0.1066 0.161 0.1096 0.1659 0.0855 0.175 0.1066 0.1659 
+0.0855 0.1742 0.0853 0.1766 0.0557 0.1699 0.0564 0.1494 0.0189 
+0.1766 0.0557 0.1494 0.0189 0.1514 0.0129 0.1514 0.0129 0.1494 
+0.0189 0.1139 0.0205 0.1514 0.0129 0.1139 0.0205 0.1057 0.0162 
+0.1494 0.0189 0.1699 0.0564 0.1233 0.0581 0.1494 0.0189 0.1233 
+0.0581 0.1139 0.0205 0.1211 0.0951 0.1233 0.0581 0.1699 0.0564 
+0.1211 0.0951 0.1699 0.0564 0.1659 0.0855 0.1659 0.0855 0.161 
+0.1096 0.1379 0.113 0.1659 0.0855 0.1379 0.113 0.1211 0.0951 
+0.3028 0.5268 0.2981 0.5039 0.3303 0.5004 0.3028 0.5268 0.3303 
+0.5004 0.3284 0.5265 0.2601 0.4744 0.2187 0.4807 0.2169 0.4242 
+0.2601 0.4744 0.2169 0.4242 0.2491 0.4126 0.3318 0.3699 0.2792 
+0.29 0.2896 0.2835 0.3318 0.3699 0.2896 0.2835 0.3493 0.3576 
+0.295 0.4733 0.2601 0.4744 0.2491 0.4126 0.295 0.4733 0.2491 
+0.4126 0.2795 0.4007 0.2792 0.29 0.2637 0.2662 0.275 0.2576 
+0.2792 0.29 0.275 0.2576 0.2896 0.2835 0.2637 0.2662 0.2445 
+0.2226 0.2556 0.2185 0.2637 0.2662 0.2556 0.2185 0.275 0.2576 
+0.2445 0.2226 0.208 0.1407 0.2109 0.1417 0.2445 0.2226 0.2109 
+0.1417 0.2556 0.2185 0.0996 0.1306 0.1188 0.1195 0.1278 0.1288 
+0.0996 0.1306 0.1278 0.1288 0.1081 0.14 0.1188 0.1195 0.1316 
+0.116 0.1379 0.1236 0.1188 0.1195 0.1379 0.1236 0.1278 0.1288 
+0.1316 0.116 0.1379 0.113 0.1424 0.1199 0.1316 0.116 0.1424 
+0.1199 0.1379 0.1236 0.1424 0.1199 0.1379 0.113 0.161 0.1096 
+0.1424 0.1199 0.161 0.1096 0.156 0.1206 0.1484 0.1286 0.1449 
+0.1256 0.1424 0.1199 0.1484 0.1286 0.1424 0.1199 0.156 0.1206 
+0.9098 0.4577 0.9224 0.4675 0.9173 0.4694 0.9098 0.4577 0.9173 
+0.4694 0.9093 0.4633 0.8952 0.4665 0.9048 0.4553 0.9068 0.4635 
+0.8952 0.4665 0.9068 0.4635 0.9025 0.472 0.9224 0.4675 0.9258 
+0.4832 0.9201 0.4832 0.9224 0.4675 0.9201 0.4832 0.9173 0.4694 
+0.9048 0.4553 0.9098 0.4577 0.9093 0.4633 0.9048 0.4553 0.9093 
+0.4633 0.9068 0.4635 0.8913 0.4786 0.8952 0.4665 0.9025 0.472 
+0.8913 0.4786 0.9025 0.472 0.8987 0.4805 0.9143 0.4717 0.9094 
+0.4659 0.9093 0.4633 0.9143 0.4717 0.9093 0.4633 0.9173 0.4694 
+0.8987 0.4805 0.9025 0.472 0.9047 0.4725 0.8987 0.4805 0.9047 
+0.4725 0.9019 0.4802 0.9019 0.4802 0.8987 0.4805 0.8985 0.4829 
+0.9019 0.4802 0.8985 0.4829 0.902 0.4822 0.9025 0.472 0.9068 
+0.4635 0.9083 0.4659 0.9025 0.472 0.9083 0.4659 0.9047 0.4725 
+0.9068 0.4635 0.9083 0.4659 0.9094 0.4659 0.9068 0.4635 0.9094 
+0.4659 0.9093 0.4633 0.2216 0.5005 0.2187 0.4807 0.2601 0.4744 
+0.2216 0.5005 0.2601 0.4744 0.2648 0.5006 0.2648 0.5006 0.2601 
+0.4744 0.295 0.4733 0.2648 0.5006 0.295 0.4733 0.2981 0.5039 
+0.3303 0.5004 0.3571 0.4901 0.3536 0.5309 0.3303 0.5004 0.3536 
+0.5309 0.3284 0.5265 0.1898 0.5008 0.1873 0.483 0.2187 0.4807 
+0.1898 0.5008 0.2187 0.4807 0.2216 0.5005 0.3325 0.4635 0.295 
+0.4733 0.2795 0.4007 0.3325 0.4635 0.2795 0.4007 0.3079 0.3905 
+0.1898 0.5008 0.159 0.4972 0.1534 0.4801 0.1898 0.5008 0.1534 
+0.4801 0.1873 0.483 0.1987 0.5261 0.2099 0.5577 0.181 0.5647 
+0.1987 0.5261 0.181 0.5647 0.1665 0.5322 0.3725 0.4383 0.3318 
+0.3699 0.3493 0.3576 0.3725 0.4383 0.3493 0.3576 0.3728 0.3809 
+0.3303 0.5004 0.3325 0.4635 0.3725 0.4383 0.3303 0.5004 0.3725 
+0.4383 0.3571 0.4901 0.3079 0.3905 0.3318 0.3699 0.3725 0.4383 
+0.3079 0.3905 0.3725 0.4383 0.3325 0.4635 0.1898 0.5008 0.1987 
+0.5261 0.1665 0.5322 0.1898 0.5008 0.1665 0.5322 0.159 0.4972 
+0.2099 0.5577 0.2135 0.5756 0.189 0.5813 0.2099 0.5577 0.189 
+0.5813 0.181 0.5647 0.2341 0.5864 0.1985 0.592 0.189 0.5813 
+0.2341 0.5864 0.189 0.5813 0.2135 0.5756 0.8798 0.4832 0.8842 
+0.4832 0.8839 0.4891 0.8798 0.4832 0.8839 0.4891 0.8803 0.4884 
+0.8839 0.4891 0.8842 0.4832 0.8872 0.4832 0.8839 0.4891 0.8872 
+0.4832 0.8861 0.489 0.8744 0.4862 0.8743 0.4832 0.8798 0.4832 
+0.8744 0.4862 0.8798 0.4832 0.8803 0.4884 0.8662 0.4868 0.8543 
+0.4889 0.8543 0.4832 0.8662 0.4868 0.8543 0.4832 0.8655 0.4832 
+0.837 0.4914 0.8203 0.4978 0.8214 0.4832 0.837 0.4914 0.8214 
+0.4832 0.8352 0.4832 0.8662 0.4868 0.8655 0.4832 0.8743 0.4832 
+0.8662 0.4868 0.8743 0.4832 0.8744 0.4862 0.8543 0.4832 0.8543 
+0.4889 0.837 0.4914 0.8543 0.4832 0.837 0.4914 0.8352 0.4832 
+0.3806 0.9521 0.3806 0.9182 0.3978 0.9201 0.3806 0.9521 0.3978 
+0.9201 0.3875 0.95 0.9527 0.5073 0.955 0.4832 0.9933 0.4807 
+0.9527 0.5073 0.9933 0.4807 0.9843 0.5292 0.9334 0.5049 0.9224 
+0.4989 0.9258 0.4832 0.9334 0.5049 0.9258 0.4832 0.9367 0.4832 
+0.7971 0.5048 0.7986 0.4832 0.8214 0.4832 0.7971 0.5048 0.8214 
+0.4832 0.8203 0.4978 0.7986 0.4832 0.7971 0.5048 0.765 0.5154 
+0.7986 0.4832 0.765 0.5154 0.7644 0.4832 0.7259 0.5329 0.6754 
+0.5906 0.6487 0.5796 0.7259 0.5329 0.6487 0.5796 0.6856 0.5184 
+0.6754 0.5906 0.6722 0.6616 0.6462 0.6699 0.6754 0.5906 0.6462 
+0.6699 0.6487 0.5796 0.7906 0.7662 0.8763 0.7842 0.8703 0.8106 
+0.7906 0.7662 0.8703 0.8106 0.779 0.797 0.7104 0.7182 0.7528 
+0.7481 0.7359 0.7787 0.7104 0.7182 0.7359 0.7787 0.6849 0.7396 
+0.6722 0.6616 0.7104 0.7182 0.6849 0.7396 0.6722 0.6616 0.6849 
+0.7396 0.6462 0.6699 0.7528 0.7481 0.7906 0.7662 0.779 0.797 
+0.7528 0.7481 0.779 0.797 0.7359 0.7787 0.765 0.5154 0.7259 
+0.5329 0.6851 0.5184 0.765 0.5154 0.6851 0.5184 0.7644 0.4832 
+0.3806 0.9182 0.3806 0.8598 0.4071 0.8623 0.3806 0.9182 0.4071 
+0.8623 0.3978 0.9201 0.3806 0.8598 0.3806 0.8022 0.4168 0.8065 
+0.3806 0.8598 0.4168 0.8065 0.4071 0.8623 0.4776 0.9687 0.4746 
+0.9649 0.4973 0.9461 0.4776 0.9687 0.4973 0.9461 0.4992 0.9542 
+0.4992 0.9542 0.4973 0.9461 0.5323 0.9338 0.4992 0.9542 0.5323 
+0.9338 0.524 0.954 0.6407 0.6731 0.6231 0.6912 0.6041 0.6831 
+0.6407 0.6731 0.6041 0.6831 0.6309 0.6627 0.6041 0.6831 0.5834 
+0.6581 0.6151 0.6406 0.6041 0.6831 0.6151 0.6406 0.6309 0.6627 
+0.4079 0.6569 0.3806 0.6545 0.3806 0.6022 0.4079 0.6569 0.3806 
+0.6022 0.4089 0.6009 0.4089 0.6009 0.3806 0.6022 0.3806 0.5658 
+0.4089 0.6009 0.3806 0.5658 0.4066 0.5636 0.4066 0.5636 0.3806 
+0.5658 0.3806 0.5337 0.4066 0.5636 0.3806 0.5337 0.4077 0.5309 
+0.5948 0.5322 0.6023 0.4972 0.6159 0.5031 0.5948 0.5322 0.6159 
+0.5031 0.6067 0.5382 0.3975 0.7068 0.4312 0.7777 0.3806 0.7613 
+0.3975 0.7068 0.3806 0.7613 0.3806 0.7026 0.524 0.954 0.5323 
+0.9338 0.5553 0.9355 0.524 0.954 0.5553 0.9355 0.5469 0.9597 
+0.4079 0.6569 0.3975 0.7068 0.3806 0.7026 0.4079 0.6569 0.3806 
+0.7026 0.3806 0.6545 0.9224 0.4989 0.9194 0.4961 0.9201 0.4832 
+0.9224 0.4989 0.9201 0.4832 0.9258 0.4832 0.8925 0.4832 0.8985 
+0.4829 0.8987 0.4858 0.8925 0.4832 0.8987 0.4858 0.8913 0.4878 
+0.9194 0.4961 0.9162 0.4949 0.9167 0.4833 0.9194 0.4961 0.9167 
+0.4833 0.9201 0.4832 0.8985 0.4829 0.902 0.4822 0.9022 0.4848 
+0.8985 0.4829 0.9022 0.4848 0.8987 0.4858 0.4041 0.4901 0.4077 
+0.5309 0.3806 0.5337 0.4041 0.4901 0.3806 0.5337 0.3806 0.4967 
+0.3806 0.3812 0.3885 0.3809 0.3887 0.4383 0.3806 0.3812 0.3887 
+0.4383 0.3806 0.4434 0.6493 0.4495 0.6498 0.4502 0.6266 0.479 
+0.6493 0.4495 0.6266 0.479 0.6078 0.4801 0.5803 0.5647 0.5948 
+0.5322 0.6067 0.5382 0.5803 0.5647 0.6067 0.5382 0.5997 0.5718 
+0.8861 0.4773 0.8913 0.4786 0.8925 0.4832 0.8861 0.4773 0.8925 
+0.4832 0.8872 0.4832 0.8798 0.4832 0.8803 0.478 0.8839 0.4772 
+0.8798 0.4832 0.8839 0.4772 0.8842 0.4832 0.8839 0.4772 0.8861 
+0.4773 0.8872 0.4832 0.8839 0.4772 0.8872 0.4832 0.8842 0.4832 
+0.8744 0.4801 0.8803 0.478 0.8798 0.4832 0.8744 0.4801 0.8798 
+0.4832 0.8743 0.4832 0.837 0.475 0.8352 0.4832 0.8214 0.4832 
+0.837 0.475 0.8214 0.4832 0.8203 0.4686 0.9527 0.459 0.9843 
+0.4372 0.9933 0.4807 0.9527 0.459 0.9933 0.4807 0.955 0.4832 
+0.9527 0.459 0.955 0.4832 0.9458 0.4832 0.9527 0.459 0.9458 
+0.4832 0.9427 0.4599 0.9367 0.4832 0.9334 0.4615 0.9427 0.4599 
+0.9367 0.4832 0.9427 0.4599 0.9458 0.4832 0.9334 0.4615 0.9367 
+0.4832 0.9258 0.4832 0.9334 0.4615 0.9258 0.4832 0.9224 0.4675 
+0.7971 0.4615 0.8203 0.4686 0.8214 0.4832 0.7971 0.4615 0.8214 
+0.4832 0.7986 0.4832 0.2984 0.9828 0.3035 0.9786 0.2935 0.9683 
+0.2984 0.9828 0.2935 0.9683 0.2892 0.9733 0.7906 0.2001 0.779 
+0.1694 0.8692 0.1542 0.7906 0.2001 0.8692 0.1542 0.8771 0.1827 
+0.7104 0.2481 0.6849 0.2267 0.7359 0.1876 0.7104 0.2481 0.7359 
+0.1876 0.7528 0.2183 0.7528 0.2183 0.7359 0.1876 0.779 0.1694 
+0.7528 0.2183 0.779 0.1694 0.7906 0.2001 0.2892 0.9733 0.2836 
+0.9687 0.2867 0.9649 0.2892 0.9733 0.2867 0.9649 0.2935 0.9683 
+0.3806 0.8598 0.3542 0.8623 0.3445 0.8065 0.3806 0.8598 0.3445 
+0.8065 0.3806 0.8022 0.2837 0.9687 0.2621 0.9542 0.264 0.9461 
+0.2837 0.9687 0.264 0.9461 0.2867 0.9649 0.1572 0.6831 0.1304 
+0.6627 0.1462 0.6406 0.1572 0.6831 0.1462 0.6406 0.1779 0.6581 
+0.1566 0.62 0.1629 0.5898 0.1985 0.592 0.1566 0.62 0.1985 
+0.592 0.1934 0.6269 0.3533 0.6569 0.3524 0.6009 0.3806 0.6022 
+0.3533 0.6569 0.3806 0.6022 0.3806 0.6545 0.3524 0.6009 0.3547 
+0.5636 0.3806 0.5658 0.3524 0.6009 0.3806 0.5658 0.3806 0.6022 
+0.1665 0.5322 0.1546 0.5382 0.1453 0.5031 0.1665 0.5322 0.1453 
+0.5031 0.159 0.4972 0.3638 0.7068 0.3806 0.7026 0.3806 0.7613 
+0.3638 0.7068 0.3806 0.7613 0.3301 0.7777 0.1462 0.6406 0.1566 
+0.62 0.1934 0.6269 0.1462 0.6406 0.1934 0.6269 0.1779 0.6581 
+0.3301 0.7777 0.3806 0.7613 0.3806 0.8022 0.3301 0.7777 0.3806 
+0.8022 0.3445 0.8065 0.8925 0.4832 0.8913 0.4786 0.8987 0.4805 
+0.8925 0.4832 0.8987 0.4805 0.8985 0.4829 0.9167 0.4833 0.9201 
+0.4832 0.9173 0.4694 0.9167 0.4833 0.9173 0.4694 0.9143 0.4717 
+0.159 0.4972 0.1453 0.5031 0.1347 0.479 0.159 0.4972 0.1347 
+0.479 0.1534 0.4801 0.3571 0.4901 0.3806 0.4967 0.3806 0.5337 
+0.3571 0.4901 0.3806 0.5337 0.3536 0.5309 0.3806 0.3812 0.3806 
+0.4434 0.3725 0.4383 0.3806 0.3812 0.3725 0.4383 0.3728 0.3809 
+0.1119 0.4495 0.1534 0.4801 0.1347 0.479 0.1119 0.4495 0.1347 
+0.479 0.1115 0.4502 0.181 0.5647 0.1616 0.5718 0.1546 0.5382 
+0.181 0.5647 0.1546 0.5382 0.1665 0.5322 0.3725 0.4383 0.3806 
+0.4434 0.3806 0.4967 0.3725 0.4383 0.3806 0.4967 0.3571 0.4901 
+0.1985 0.592 0.1629 0.5898 0.1625 0.5805 0.1985 0.592 0.1625 
+0.5805 0.189 0.5813 0.189 0.5813 0.1625 0.5805 0.1616 0.5718 
+0.189 0.5813 0.1616 0.5718 0.181 0.5647 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/rc/plugin.xml b/Bundles/LeafVisu/visuVTKAdaptor/rc/plugin.xml
index a9b4f50..d72a9ad 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/rc/plugin.xml
+++ b/Bundles/LeafVisu/visuVTKAdaptor/rc/plugin.xml
@@ -1,29 +1,26 @@
-<plugin id="visuVTKAdaptor" class="visuVTKAdaptor::Plugin" >
+<plugin id="visuVTKAdaptor" class="visuVTKAdaptor::Plugin" version="@DASH_VERSION@" >
 
     <library name="visuVTKAdaptor" />
 
     <requirement id="dataReg"/>
     <requirement id="servicesReg"/>
-    <requirement id="visu" />
     <requirement id="visuVTK" />
 
-
-
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Render</service>
+        <service>::visuVTKAdaptor::Cube</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Cube</service>
+        <service>::visuVTKAdaptor::Axes</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Axes</service>
+        <service>::visuVTKAdaptor::OrientationMarker</service>
         <object>::fwData::Object</object>
     </extension>
 
@@ -35,12 +32,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::TriangularMesh</service>
-        <object>::fwData::TriangularMesh</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::Reconstruction</service>
         <object>::fwData::Reconstruction</object>
     </extension>
@@ -125,12 +116,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Model</service>
-        <object>::fwData::Model</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::Transform</service>
         <object>::fwData::TransformationMatrix3D</object>
     </extension>
@@ -143,18 +128,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Video</service>
-        <object>::fwData::Video</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Camera</service>
-        <object>::fwData::Video</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::Camera2</service>
         <object>::fwData::TransformationMatrix3D</object>
     </extension>
@@ -185,12 +158,6 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
-        <service>::visuVTKAdaptor::Normals</service>
-        <object>::fwData::TriangularMesh</object>
-    </extension>
-
-    <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::InteractorStyle</service>
         <object>::fwData::Object</object>
     </extension>
@@ -264,7 +231,7 @@
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::Medical3DCamera</service>
-        <object>::fwData::Image</object>
+        <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
@@ -320,20 +287,31 @@
         <service>::visuVTKAdaptor::VectorField</service>
         <object>::fwData::Image</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::ModelSeries</service>
         <object>::fwMedData::ModelSeries</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRenderVTK::IVtkAdaptorService</type>
         <service>::visuVTKAdaptor::ImageSeries</service>
         <object>::fwMedData::ImageSeries</object>
     </extension>
 
-</plugin>
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwRenderVTK::IVtkAdaptorService</type>
+        <service>::visuVTKAdaptor::Texture</service>
+        <object>::fwData::Image</object>
+    </extension>
 
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwRenderVTK::IVtkAdaptorService</type>
+        <service>::visuVTKAdaptor::ImageSliceOrientationText</service>
+        <object>::fwData::Object</object>
+    </extension>
+</plugin>
 
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/rc/video.xml b/Bundles/LeafVisu/visuVTKAdaptor/rc/video.xml
deleted file mode 100644
index 5a227bb..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/rc/video.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<Material name="video" NumberOfVertexShaders="1" NumberOfFragmentShaders="1">
-
-  <Shader scope="Vertex" name="videoVert" location="Inline" language="GLSL" entry="main" args="-DVERTEX_PROGRAM">
-    <![CDATA[
-        varying vec2  texCoord;
-        void main(void)
-        {
-           texCoord = gl_MultiTexCoord0.st;
-           texCoord.y = 1.-texCoord.y;
-           
-          // normal transformation
-          gl_Position = ftransform();
-        }
-    ]]>
-  </Shader>
-
-  <Shader scope="Fragment" name="videoFrag" location="Inline" language="GLSL" entry="main" args="-DFRAGMENT_PROGRAM">
-    <![CDATA[
-        uniform sampler2D texture;   // input image
-        varying vec2  texCoord;
-        void main(void)
-        {
-          vec4 tmp_color;
-          tmp_color = texture2D(texture,texCoord);
-          gl_FragColor = tmp_color;
-          gl_FragColor.r = tmp_color.b;
-          gl_FragColor.b = tmp_color.r;
-        }
-    ]]>
-  </Shader>
-
-</Material>
-
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/rc/vp.glsl b/Bundles/LeafVisu/visuVTKAdaptor/rc/vp.glsl
new file mode 100644
index 0000000..96be1ff
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/rc/vp.glsl
@@ -0,0 +1,10 @@
+varying vec2  texCoord;
+void propFuncVS(void)
+{
+   texCoord = gl_MultiTexCoord0.st;
+   texCoord.y = 1.-texCoord.y;
+   
+  // normal transformation
+  gl_Position = ftransform();
+}
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp
index 1587009..dd41662 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Axes.cpp
@@ -1,36 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/lexical_cast.hpp>
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/Axes.hpp"
 
-/// FW4SPL Includes
+#include <fwCom/Slots.hxx>
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 
-/// VTK Includes
 #include <vtkProperty.h>
 #include <vtkRenderer.h>
 #include <vtkTransform.h>
 #include <vtkProp3D.h>
+#include <vtkCommand.h>
 
-#include "visuVTKAdaptor/Axes.hpp"
+#include <boost/lexical_cast.hpp>
 
 fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Axes, ::fwData::Object );
 
 namespace visuVTKAdaptor
 {
+//------------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType Axes::s_UPDATE_VISIBILITY_SLOT = "updateVisibility";
 
 //------------------------------------------------------------------------------
 
-Axes::Axes() throw()
+Axes::Axes() throw() :
+    m_axesActor(fwVtkAxesActor::New()),
+    m_length(1.),
+    m_labelOn(true),
+    m_transformAxes(vtkTransform::New()),
+    m_xLabel("x"),
+    m_yLabel("y"),
+    m_zLabel("z")
+
 {
-    m_axesActor = vtkAxesActor::New();
-    m_length = 1;
-    m_labelOn = true;
+    newSlot(s_UPDATE_VISIBILITY_SLOT, &Axes::updateVisibility, this);
 }
 
 //------------------------------------------------------------------------------
@@ -65,28 +74,16 @@ void Axes::doSwap() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Axes::doUpdate() throw(::fwTools::Failed)
+void Axes::doUpdate() throw(fwTools::Failed)
 {
 }
 
 //------------------------------------------------------------------------------
 
-void Axes::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
-{
-}
-
-//------------------------------------------------------------------------------
-
-void Axes::configuring() throw(fwTools::Failed)
+void Axes::doConfigure() throw(fwTools::Failed)
 {
     assert( m_configuration->getName() == "config" );
 
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-
-    if ( m_configuration->hasAttribute( "transform" ) )
-    {
-        this->setTransformId ( m_configuration->getAttributeValue ( "transform" ) );
-    }
     if ( m_configuration->hasAttribute( "length" ) )
     {
         m_length = boost::lexical_cast<double>( m_configuration->getAttributeValue( "length" ) );
@@ -97,26 +94,55 @@ void Axes::configuring() throw(fwTools::Failed)
         std::transform( value.begin(), value.end(), value.begin(), tolower );
         m_labelOn = ( value == "yes" );
     }
+    if(m_configuration->hasAttribute( "xLabel" ))
+    {
+        m_xLabel = m_configuration->getAttributeValue( "xLabel" );
+    }
+    if(m_configuration->hasAttribute( "yLabel" ))
+    {
+        m_yLabel = m_configuration->getAttributeValue( "yLabel" );
+    }
+    if(m_configuration->hasAttribute( "zLabel" ))
+    {
+        m_zLabel = m_configuration->getAttributeValue( "zLabel" );
+    }
 }
 
 //------------------------------------------------------------------------------
 
 void Axes::buildPipeline()
 {
+    vtkTransform* transform = m_renderService.lock()->getOrAddVtkTransform(m_transformId);
     m_axesActor->SetTotalLength( m_length, m_length, m_length );
     m_axesActor->SetShaftTypeToCylinder();
     m_axesActor->SetTipTypeToCone();
+    m_axesActor->SetXAxisLabelText( m_xLabel.c_str() );
+    m_axesActor->SetYAxisLabelText( m_yLabel.c_str() );
+    m_axesActor->SetZAxisLabelText( m_zLabel.c_str() );
 
     if (!m_labelOn)
     {
-        m_axesActor->SetXAxisLabelText( "x" );
-        m_axesActor->SetYAxisLabelText( "y" );
-        m_axesActor->SetZAxisLabelText( "z" );
         m_axesActor->AxisLabelsOff();
     }
-    m_axesActor->SetUserTransform( this->getTransform() );
+
+    m_axesActor->SetUserTransform(transform);
+
+    this->setVtkPipelineModified();
+
+}
+
+//------------------------------------------------------------------------------
+
+void Axes::updateVisibility(bool _isVisible)
+{
+    m_axesActor->SetVisibility(_isVisible);
+
+    this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp
index fe48d93..f08abeb 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/BoxWidget.cpp
@@ -1,10 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/lexical_cast.hpp>
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/Transform.hpp"
+#include "visuVTKAdaptor/BoxWidget.hpp"
+
+#include <fwData/TransformationMatrix3D.hpp>
+#include <fwServices/macros.hpp>
+
+
+#include <fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp>
 
 #include <vtkRenderWindowInteractor.h>
 #include <vtkRenderWindow.h>
@@ -16,17 +25,7 @@
 #include <vtkBoxRepresentation.h>
 #include <vtkBoxWidget2.h>
 
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
-#include <fwData/TransformationMatrix3D.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp>
-
-#include "visuVTKAdaptor/Transform.hpp"
-#include "visuVTKAdaptor/BoxWidget.hpp"
-#include <fwServices/IEditionService.hpp>
+#include <boost/lexical_cast.hpp>
 
 namespace visuVTKAdaptor
 {
@@ -35,14 +34,19 @@ class BoxClallback : public ::vtkCommand
 {
 public:
 
-    static BoxClallback* New(::visuVTKAdaptor::BoxWidget* adaptor) {
+    static BoxClallback* New(::visuVTKAdaptor::BoxWidget* adaptor)
+    {
         BoxClallback *cb = new BoxClallback;
         cb->m_adaptor = adaptor;
         return cb;
     }
 
-     BoxClallback() : m_adaptor(NULL) {}
-    ~BoxClallback() {}
+    BoxClallback() : m_adaptor(nullptr)
+    {
+    }
+    ~BoxClallback()
+    {
+    }
 
     virtual void Execute( ::vtkObject* pCaller, unsigned long eventId, void* )
     {
@@ -54,17 +58,20 @@ public:
 
 // BoxWidget
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::BoxWidget, ::fwData::TransformationMatrix3D );
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::BoxWidget,
+                         ::fwData::TransformationMatrix3D );
 
 //------------------------------------------------------------------------------
 
-BoxWidget::BoxWidget() throw()
-: ::fwRenderVTK::IVtkAdaptorService(),
-  m_vtkBoxWidget( 0 ), m_scaleFactor(1.0), m_enableScaling(true)
+BoxWidget::BoxWidget() throw() :
+    ::fwRenderVTK::IVtkAdaptorService(),
+    m_transform(nullptr),
+    m_vtkBoxWidget(nullptr),
+    m_boxWidgetCommand(nullptr),
+    m_scaleFactor(1.0),
+    m_enableScaling(true)
 {
     m_boxWidgetCommand = BoxClallback::New(this);
-
-    //addNewHandledEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED );
 }
 
 //------------------------------------------------------------------------------
@@ -75,11 +82,8 @@ BoxWidget::~BoxWidget() throw()
 
 //------------------------------------------------------------------------------
 
-void BoxWidget::configuring() throw( ::fwTools::Failed )
+void BoxWidget::doConfigure() throw( ::fwTools::Failed )
 {
-    setRenderId( m_configuration->getAttributeValue( "renderer" ) );
-    this->setTransformId( m_configuration->getAttributeValue("transform") );
-
     if (m_configuration->hasAttribute("scaleFactor"))
     {
         m_scaleFactor = ::boost::lexical_cast<double>(m_configuration->getAttributeValue("scaleFactor"));
@@ -88,8 +92,8 @@ void BoxWidget::configuring() throw( ::fwTools::Failed )
     if (m_configuration->hasAttribute("enableScaling"))
     {
         SLM_ASSERT("Wrong value for 'enableScaling', must be 'true' or 'false'",
-                m_configuration->getAttributeValue("enableScaling") == "yes" ||
-                m_configuration->getAttributeValue("enableScaling") == "no");
+                   m_configuration->getAttributeValue("enableScaling") == "yes" ||
+                   m_configuration->getAttributeValue("enableScaling") == "no");
         m_enableScaling = (m_configuration->getAttributeValue("enableScaling") == "yes");
     }
 }
@@ -159,17 +163,19 @@ void BoxWidget::updateFromVtk()
     ::fwData::TransformationMatrix3D::sptr trf = this->getObject< ::fwData::TransformationMatrix3D >();
     vtkMatrix4x4* mat = m_transform->GetMatrix();
 
-    for(int lt=0; lt<4; lt++)
+    for(int lt = 0; lt<4; lt++)
     {
-        for(int ct=0; ct<4; ct++)
+        for(int ct = 0; ct<4; ct++)
         {
             trf->setCoefficient(lt,ct, mat->GetElement(lt,ct));
         }
     }
 
-    ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-    msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), trf, msg);
+    auto sig = trf->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 
     m_vtkBoxWidget->AddObserver( ::vtkCommand::InteractionEvent, m_boxWidgetCommand );
 }
@@ -184,9 +190,9 @@ void BoxWidget::doUpdate() throw( ::fwTools::Failed )
     {
         vtkMatrix4x4* mat = m_transform->GetMatrix();
         ::fwData::TransformationMatrix3D::sptr transMat = this->getObject< ::fwData::TransformationMatrix3D >();
-        for(int lt=0; lt<4; lt++)
+        for(int lt = 0; lt<4; lt++)
         {
-            for(int ct=0; ct<4; ct++)
+            for(int ct = 0; ct<4; ct++)
             {
                 mat->SetElement(lt, ct, transMat->getCoefficient(lt,ct));
             }
@@ -200,16 +206,6 @@ void BoxWidget::doUpdate() throw( ::fwTools::Failed )
 
 //------------------------------------------------------------------------------
 
-void BoxWidget::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw( ::fwTools::Failed )
-{
-    ::fwComEd::TransformationMatrix3DMsg::csptr transfoMsg = ::fwComEd::TransformationMatrix3DMsg::dynamicConstCast(msg);
-    if (transfoMsg && transfoMsg->hasEvent(::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED)
-            &&  m_vtkBoxWidget->HasObserver(::vtkCommand::InteractionEvent, m_boxWidgetCommand))
-    {
-        doUpdate();
-    }
-}
-
-//------------------------------------------------------------------------------
-
 } // namespace visuVTKAdaptor
+
+#endif
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera.cpp
deleted file mode 100644
index 6c53b71..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera.cpp
+++ /dev/null
@@ -1,202 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwData/Camera.hpp>
-#include <fwData/Video.hpp>
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
-#include <fwData/Boolean.hpp>
-#include <fwData/TransformationMatrix3D.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/CameraMsg.hpp>
-#include <fwComEd/VideoMsg.hpp>
-
-#include <vtkActor.h>
-#include <vtkRenderer.h>
-#include <vtkMatrix4x4.h>
-#include <vtkTransform.h>
-#include <vtkCamera.h>
-
-#include "visuVTKAdaptor/Camera.hpp"
-
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Camera, ::fwData::Video ) ;
-
-namespace visuVTKAdaptor
-{
-
-
-Camera::Camera() throw()
-{
-    bCam_init = false;
-}
-
-Camera::~Camera() throw()
-{
-}
-
-
-void Camera::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-}
-
-void Camera::doStart() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-void Camera::doUpdate() throw(fwTools::Failed)
-{
-    ::fwData::Video::sptr video = this->getObject< ::fwData::Video >();
-    if (!video->dataAvailable())
-        return;
-
-    if(!bCam_init)
-    {
-        bCam_init = this->initCameraParameters();
-    }
-}
-
-void Camera::doSwap() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-void Camera::doStop() throw(fwTools::Failed)
-{
-    this->unregisterServices();
-}
-
-
-void Camera::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-
-    ::fwComEd::CameraMsg::csptr cameraMsg = ::fwComEd::CameraMsg::dynamicConstCast( msg );
-    ::fwComEd::VideoMsg::csptr videoMsg = ::fwComEd::VideoMsg::dynamicConstCast( msg );
-    if ( ( cameraMsg && cameraMsg->hasEvent( ::fwComEd::CameraMsg::NEW_CAMERA ) )
-            || ( videoMsg && videoMsg->hasEvent(::fwComEd::VideoMsg::VIDEO_IS_REFRESHED) ))
-    {
-        doUpdate();
-    }
-    else if( msg->hasEvent( fwComEd::Dictionary::position ) )
-    {
-        vtkCamera* camera = this->getRenderer()->GetActiveCamera();
-        ::fwData::TransformationMatrix3D::sptr transMat;
-        transMat = this->getObject()->getField< ::fwData::TransformationMatrix3D>(fwComEd::Dictionary::position);
-
-        vtkMatrix4x4* mat = vtkMatrix4x4::New();
-
-        for(int lt=0; lt<4; lt++)
-        {
-            for(int ct=0; ct<4; ct++)
-            {
-                mat->SetElement(lt, ct, transMat->getCoefficient(lt,ct));
-            }
-        }
-
-        double pos[3];
-        pos[0] = mat->Element[0][3];
-        pos[1] = mat->Element[1][3];
-        pos[2] = mat->Element[2][3];
-
-        double p1[]={0.0, 0.0, 100.0, 1.0};
-        double p2[4];
-        mat->MultiplyPoint( p1, p2);
-
-        mat->SetElement(0,3,0);
-        mat->SetElement(1,3,0);
-        mat->SetElement(2,3,0);
-
-        double p3[]={0.0, -1.0, 0.0, 1.0};
-        double p4[4];
-        mat->MultiplyPoint( p3, p4);
-
-        double p5[]={p4[0],p4[1],p4[2]};
-        camera->SetPosition(pos);
-        camera->SetFocalPoint(p2);
-        camera->SetViewUp(p5);
-
-        mat->Delete();
-        this->setVtkPipelineModified();
-    }
-}
-
-
-bool Camera::initCameraParameters()
-{
-    SLM_TRACE_FUNC();
-    vtkRenderer* renderer = this->getRenderer();
-
-    vtkCamera* camera = renderer->GetActiveCamera();
-    ::fwData::Video::sptr video = this->getObject< ::fwData::Video >();
-    ::fwData::TransformationMatrix3D::wptr extrinsic = video->getCamera()->getExtrinsicCameraTransformation();
-    ::fwData::TransformationMatrix3D::wptr intrinsic = video->getCamera()->getIntrinsicCameraTransformation();
-
-    /*****************************************************************/
-    // Intrinsic matrix
-//    double cx = intrinsic.lock()->getCoefficient(0,2);
-//    double cy = intrinsic.lock()->getCoefficient(1,2);
-//    double fx = intrinsic.lock()->getCoefficient(0,0);
-    double fy = intrinsic.lock()->getCoefficient(1,1);
-
-    int width, height, lowerLeftX, lowerLeftY;
-
-//    m_interactor->Render();
-    renderer->GetTiledSizeAndOrigin(&width, &height, &lowerLeftX, &lowerLeftY);
-
-    if(width <=  0 || height <= 0)
-        return false;
-
-    camera->SetViewAngle(2.0 * atan( (this->getObject< ::fwData::Video >()->getYSize()/2.0)/fy ) / 3.1415 * 180.0);
-//    camera->SetViewAngle(2.0 * atan( (600.0/2.0)/fy ) / 3.1415 * 180.0);
-    camera->GetCompositeProjectionTransformMatrix(width/height, -1, +1);
-
-    /*****************************************************************/
-    // Extrinsic matrix
-    vtkMatrix4x4 * mat = vtkMatrix4x4::New();
-    vtkTransform* trans = vtkTransform::New();
-
-    for(int l=0; l<4; l++)
-    {
-        for(int c=0; c <4; c++)
-        {
-            mat->SetElement(l,c, extrinsic.lock()->getCoefficient(l, c));
-        }
-    }
-
-    mat->Invert();
-    trans->Identity();
-    trans->SetMatrix(mat);
-
-    camera->SetPosition (0, 0, 0);
-    camera->SetFocalPoint(0, 0, 10);
-    camera->SetViewUp(0, -1, 0);
-    camera->ApplyTransform(trans);
-    camera->SetClippingRange(0.1, 10000);
-
-    mat->Delete();
-    trans->Delete();
-    this->setVtkPipelineModified();
-
-    return true;
-}
-
-
-
-
-} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera2.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera2.cpp
index feea80e..9a41329 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera2.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Camera2.cpp
@@ -1,81 +1,82 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/Camera2.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwData/Boolean.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/mt/ObjectReadLock.hpp>
 #include <fwData/mt/ObjectWriteLock.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
+#include <fwServices/macros.hpp>
 
 #include <vtkActor.h>
-#include <vtkRenderer.h>
-#include <vtkMatrix4x4.h>
-#include <vtkTransform.h>
-#include <vtkIdentityTransform.h>
 #include <vtkCamera.h>
 #include <vtkCommand.h>
+#include <vtkIdentityTransform.h>
+#include <vtkMatrix4x4.h>
 #include <vtkPerspectiveTransform.h>
-
-#include "visuVTKAdaptor/Camera2.hpp"
+#include <vtkRenderer.h>
+#include <vtkTransform.h>
 
 class Camera2Clallback : public ::vtkCommand
 {
 public:
 
-    static Camera2Clallback* New(::visuVTKAdaptor::Camera2* adaptor) {
-        Camera2Clallback *cb = new Camera2Clallback;
+    static Camera2Clallback* New(::visuVTKAdaptor::Camera2* adaptor)
+    {
+        Camera2Clallback* cb = new Camera2Clallback;
         cb->m_adaptor = adaptor;
         return cb;
     }
 
-     Camera2Clallback() : m_adaptor(NULL) {}
-    ~Camera2Clallback() {}
+    Camera2Clallback() : m_adaptor(nullptr)
+    {
+    }
+    ~Camera2Clallback()
+    {
+    }
 
     virtual void Execute( ::vtkObject* pCaller, unsigned long eventId, void* )
     {
         m_adaptor->updateFromVtk();
     }
 
-    ::visuVTKAdaptor::Camera2 *m_adaptor;
+    ::visuVTKAdaptor::Camera2* m_adaptor;
 };
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Camera2, ::fwData::TransformationMatrix3D ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Camera2,
+                         ::fwData::TransformationMatrix3D );
 
 namespace visuVTKAdaptor
 {
 
 //------------------------------------------------------------------------------
 
-Camera2::Camera2() throw()
+Camera2::Camera2() throw() :
+    m_cameraCommand(Camera2Clallback::New(this)),
+    m_transOrig(nullptr)
 {
-    m_cameraCommand = Camera2Clallback::New(this);
 }
 
 //------------------------------------------------------------------------------
 
 Camera2::~Camera2() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void Camera2::configuring() throw(fwTools::Failed)
+void Camera2::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -84,9 +85,9 @@ void Camera2::doStart() throw(fwTools::Failed)
 {
     vtkCamera* camera = this->getRenderer()->GetActiveCamera();
 
-    double position[]={0.0, 0.0, 0.0};
-    double focal[]={1.0, 0.0, 0.0};
-    double viewUp[]={0.0, 0.0, 1.0};
+    double position[] = {0.0, 0.0, 0.0};
+    double focal[]    = {1.0, 0.0, 0.0};
+    double viewUp[]   = {0.0, 0.0, 1.0};
 
     m_transOrig = vtkPerspectiveTransform::New();
     m_transOrig->Identity();
@@ -103,73 +104,65 @@ void Camera2::doStart() throw(fwTools::Failed)
 //------------------------------------------------------------------------------
 
 void Camera2::doUpdate() throw(fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
-void Camera2::doSwap() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void Camera2::doStop() throw(fwTools::Failed)
 {
     vtkCamera* camera = this->getRenderer()->GetActiveCamera();
     camera->RemoveObserver( m_cameraCommand );
-    this->unregisterServices();
-    m_transOrig->Delete();
-}
 
-//------------------------------------------------------------------------------
+    ::fwData::TransformationMatrix3D::sptr transMat = this->getObject< ::fwData::TransformationMatrix3D >();
 
-void Camera2::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    if( msg->hasEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED ) )
+    vtkMatrix4x4* mat = vtkMatrix4x4::New();
+
+    ::fwData::mt::ObjectReadLock lock(transMat);
+
+    for(int lt = 0; lt<4; lt++)
     {
-        vtkCamera* camera = this->getRenderer()->GetActiveCamera();
-        camera->RemoveObserver( m_cameraCommand );
+        for(int ct = 0; ct<4; ct++)
+        {
+            mat->SetElement(lt, ct, transMat->getCoefficient(lt,ct));
+        }
+    }
 
-        ::fwData::TransformationMatrix3D::sptr transMat = this->getObject< ::fwData::TransformationMatrix3D >();
+    lock.unlock();
 
-        vtkMatrix4x4* mat = vtkMatrix4x4::New();
+    // Position camera on origin
+    vtkPerspectiveTransform* oldTrans = vtkPerspectiveTransform::New();
+    oldTrans->Identity();
+    oldTrans->SetupCamera(camera->GetPosition(), camera->GetFocalPoint(), camera->GetViewUp());
+    oldTrans->Inverse();
+    oldTrans->Concatenate(m_transOrig);
+    oldTrans->Inverse();
 
-        ::fwData::mt::ObjectReadLock lock(transMat);
+    // Apply new transform
+    vtkTransform* trans = vtkTransform::New();
+    trans->SetMatrix(mat);
+    trans->Concatenate(oldTrans->GetMatrix());
+    camera->ApplyTransform(trans);
 
-        for(int lt=0; lt<4; lt++)
-        {
-            for(int ct=0; ct<4; ct++)
-            {
-                mat->SetElement(lt, ct, transMat->getCoefficient(lt,ct));
-            }
-        }
+    this->getRenderer()->ResetCameraClippingRange();
+    this->setVtkPipelineModified();
 
-        lock.unlock();
+    camera->AddObserver( ::vtkCommand::ModifiedEvent, m_cameraCommand );
 
-        // Position camera on origin
-        vtkPerspectiveTransform* oldTrans = vtkPerspectiveTransform::New();
-        oldTrans->Identity();
-        oldTrans->SetupCamera(camera->GetPosition(), camera->GetFocalPoint(), camera->GetViewUp());
-        oldTrans->Inverse();
-        oldTrans->Concatenate(m_transOrig);
-        oldTrans->Inverse();
+    mat->Delete();
+    oldTrans->Delete();
+    trans->Delete();
+}
 
-        // Apply new transform
-        vtkTransform* trans =  vtkTransform::New();
-        trans->SetMatrix(mat);
-        trans->Concatenate(oldTrans->GetMatrix());
-        camera->ApplyTransform(trans);
+//------------------------------------------------------------------------------
 
-        this->getRenderer()->ResetCameraClippingRange();
-        this->setVtkPipelineModified();
+void Camera2::doSwap() throw(fwTools::Failed)
+{
+    this->doUpdate();
+}
 
-        camera->AddObserver( ::vtkCommand::ModifiedEvent, m_cameraCommand );
+//------------------------------------------------------------------------------
 
-        mat->Delete();
-        oldTrans->Delete();
-        trans->Delete();
-    }
+void Camera2::doStop() throw(fwTools::Failed)
+{
+    vtkCamera* camera = this->getRenderer()->GetActiveCamera();
+    camera->RemoveObserver( m_cameraCommand );
+    this->unregisterServices();
+    m_transOrig->Delete();
 }
 
 //------------------------------------------------------------------------------
@@ -190,9 +183,9 @@ void Camera2::updateFromVtk()
     trans->Concatenate(m_transOrig);
     vtkMatrix4x4* mat = trans->GetMatrix();
 
-    for(int lt=0; lt<4; lt++)
+    for(int lt = 0; lt<4; lt++)
     {
-        for(int ct=0; ct<4; ct++)
+        for(int ct = 0; ct<4; ct++)
         {
             trf->setCoefficient(lt,ct, mat->GetElement(lt,ct));
         }
@@ -200,9 +193,11 @@ void Camera2::updateFromVtk()
 
     lock.unlock();
 
-    ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-    msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), trf, msg);
+    auto sig = trf->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 
     camera->AddObserver( ::vtkCommand::ModifiedEvent, m_cameraCommand );
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Cube.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Cube.cpp
index 6da33c6..7d37d15 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Cube.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Cube.cpp
@@ -1,9 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/Cube.hpp"
 
 #include <fwServices/macros.hpp>
 
@@ -12,33 +13,32 @@
 #include <vtkActor.h>
 #include <vtkPolyDataMapper.h>
 
-#include "visuVTKAdaptor/Cube.hpp"
-
-
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Cube, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Cube, ::fwData::Object );
 
 namespace visuVTKAdaptor
 {
 
+//------------------------------------------------------------------------------
+
 void Cube::doStart() throw(fwTools::Failed)
 {
-    vtkCubeSource *cube = vtkCubeSource::New();
+    vtkCubeSource *cube       = vtkCubeSource::New();
     vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
-    mapper->SetInput(cube->GetOutput());
+    mapper->SetInputConnection(cube->GetOutputPort());
     vtkActor *actor = vtkActor::New();
     actor->SetMapper(mapper);
     this->addToRenderer(actor);
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
 
 void Cube::doStop() throw(fwTools::Failed)
 {
     this->removeAllPropFromRenderer();
 }
 
-
-
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Distance.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Distance.cpp
index 8ec1446..b91864d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Distance.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Distance.cpp
@@ -1,62 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
 
+#include "visuVTKAdaptor/Distance.hpp"
+
+#include <fwData/Material.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/PointMsg.hpp>
+#include <fwServices/macros.hpp>
 
 #include <vtkActor.h>
-#include <vtkCommand.h>
 #include <vtkAxisActor2D.h>
+#include <vtkCommand.h>
 #include <vtkDistanceRepresentation2D.h>
 #include <vtkHandleRepresentation.h>
 #include <vtkLineSource.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkProperty.h>
-#include <vtkTextProperty.h>
 #include <vtkProperty2D.h>
 #include <vtkRenderer.h>
-
-#include "visuVTKAdaptor/Distance.hpp"
-
+#include <vtkTextProperty.h>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Distance, ::fwData::PointList ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Distance, ::fwData::PointList );
 
 namespace visuVTKAdaptor
 {
 
 
-Distance::Distance() throw():
-    m_distanceRepresentation( vtkDistanceRepresentation2D::New())
+Distance::Distance() throw() :
+    m_distanceRepresentation( vtkDistanceRepresentation2D::New()),
+    m_lineActor(vtkActor::New()),
+    m_lineSource(vtkLineSource::New())
 {
     m_distanceRepresentation->InstantiateHandleRepresentation();
     m_distanceRepresentation->SetLabelFormat("%-#6.3gmm");
-    vtkPolyDataMapper *LineMapper;
 
-    m_lineSource = vtkLineSource::New();
     m_lineSource->SetResolution(1);
-    LineMapper = vtkPolyDataMapper::New();
-    LineMapper->SetInput(m_lineSource->GetOutput());
-    m_lineActor = vtkActor::New();
-    m_lineActor->SetMapper(LineMapper);
+    vtkPolyDataMapper* lineMapper = vtkPolyDataMapper::New();
+    lineMapper->SetInputConnection(m_lineSource->GetOutputPort());
+
+    m_lineActor->SetMapper(lineMapper);
     m_lineActor->GetProperty()->SetLineWidth(5.);
     m_lineActor->GetProperty()->SetColor(1.,1.,0.);
     m_lineActor->GetProperty()->SetOpacity(0.4);
 
-    LineMapper->Delete();
+    lineMapper->Delete();
     m_distanceRepresentation->GetAxis()->GetProperty()->SetColor(1.0,0.0,1.);
     m_distanceRepresentation->GetAxis()->SetTitlePosition(0.9);
 
@@ -64,8 +60,6 @@ Distance::Distance() throw():
     //m_distanceRepresentation->GetAxis()->SizeFontRelativeToAxisOn();
     //m_distanceRepresentation->GetAxis()->GetMapper();
     //m_distanceRepresentation->GetAxis()->SetFontFactor(0.8);
-
-    //addNewHandledEvent(::fwComEd::PointMsg::POINT_IS_MODIFIED);
 }
 
 //------------------------------------------------------------------------------
@@ -81,24 +75,20 @@ void Distance::setAxisColor( ::fwData::Color::sptr newColor) throw()
 {
     SLM_ASSERT("newColor not instanced", newColor);
     m_distanceRepresentation->GetAxis()->GetProperty()->SetColor(
-            newColor->red(),newColor->green(),newColor->blue() );
+        newColor->red(),newColor->green(),newColor->blue() );
     m_distanceRepresentation->GetAxis()->GetProperty()->SetOpacity(newColor->alpha() );
     m_lineActor->GetProperty()->SetColor(newColor->red(),newColor->green(),newColor->blue());
     m_lineActor->GetProperty()->SetOpacity( newColor->alpha() * 0.4);
 
     m_distanceRepresentation->GetAxis()->GetTitleTextProperty()->SetColor(
-            newColor->red(),newColor->green(),newColor->blue() );
+        newColor->red(), newColor->green(), newColor->blue() );
     this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
 
-void Distance::configuring() throw(fwTools::Failed)
+void Distance::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -110,16 +100,16 @@ void Distance::doStart()
     m_point1 = ptList->getPoints().front();
     m_point2 = ptList->getPoints().back();
 
-    m_point1Connection = m_point1.lock()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                    this->slot(::fwServices::IService::s_RECEIVE_SLOT));
-    m_point2Connection = m_point2.lock()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                    this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_point1Connection = m_point1.lock()->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
+    m_point2Connection = m_point2.lock()->signal(::fwData::Object::s_MODIFIED_SIG)->connect(
+        this->slot(::fwServices::IService::s_UPDATE_SLOT));
 
     // set color to distance if Point List have Color Field
-    if ( ptList->getField( ::fwComEd::Dictionary::m_colorId ) )
+    if ( ptList->getField( ::fwDataTools::fieldHelper::Image::m_colorId ) )
     {
         ::fwData::Color::sptr color;
-        color = ptList->getField< ::fwData::Color >( ::fwComEd::Dictionary::m_colorId );
+        color = ptList->getField< ::fwData::Color >( ::fwDataTools::fieldHelper::Image::m_colorId );
         this->setAxisColor( color );
     }
 
@@ -157,18 +147,6 @@ void Distance::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Distance::doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::PointMsg::csptr pointMsg = ::fwComEd::PointMsg::dynamicConstCast( _msg );
-    SLM_ASSERT("Message received is not PointMsg",  pointMsg);
-    if ( pointMsg && pointMsg->hasEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED ) )
-    {
-        this->doUpdate();
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void Distance::doSwap() throw(fwTools::Failed)
 {
     this->doStop();
@@ -189,6 +167,9 @@ void Distance::doStop()
     this->removeAllPropFromRenderer();
 }
 
+//------------------------------------------------------------------------------
 
 
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image.cpp
index 11ce879..f6877a2 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image.cpp
@@ -1,65 +1,55 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
+#include "visuVTKAdaptor/Image.hpp"
 
-#include <fwServices/macros.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Boolean.hpp>
-#include <fwData/Color.hpp>
 #include <fwData/Image.hpp>
-#include <fwData/String.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwVtkIO/vtk.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp>
+
+#include <fwServices/macros.hpp>
+
 #include <fwVtkIO/helper/TransferFunction.hpp>
+#include <fwVtkIO/vtk.hpp>
 
 #include <vtkImageBlend.h>
 #include <vtkImageData.h>
 #include <vtkImageMapToColors.h>
 
-#include <fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp>
-
-#include "visuVTKAdaptor/Image.hpp"
-
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Image, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Image, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_IMAGE_OPACITY_SLOT = "updateImageOpacity";
 
 //------------------------------------------------------------------------------
 
-Image::Image() throw()
+Image::Image() throw() :
+    m_imageRegister(nullptr),
+    m_imagePortId(-1),
+    m_imageOpacity(0.),
+    m_allowAlphaInTF(false),
+    m_lut(fwVtkWindowLevelLookupTable::New()),
+    m_map2colors(vtkImageMapToColors::New()),
+    m_imageData(vtkImageData::New())
 {
-    SLM_TRACE_FUNC();
-    m_lut        = fwVtkWindowLevelLookupTable::New();
-    m_map2colors = vtkImageMapToColors::New();
-    m_imageData  = vtkImageData::New();
-
-    m_imageRegister = NULL;
-
-    m_imagePortId = -1;
-    m_allowAlphaInTF = false;
-
-    // Manage events
-    this->installTFSelectionEventHandler(this);
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER                     );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::MODIFIED                   );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE                  );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::TRANSPARENCY               );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::VISIBILITY                 );
-    //addNewHandledEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS );
-    //addNewHandledEvent( ::fwComEd::TransferFunctionMsg::WINDOWING       );
+    this->installTFSlots(this);
+    newSlot(s_UPDATE_IMAGE_OPACITY_SLOT, &Image::updateImageOpacity, this);
 }
 
 //------------------------------------------------------------------------------
@@ -81,15 +71,18 @@ Image::~Image() throw()
 
 void Image::doStart() throw(fwTools::Failed)
 {
+    ::fwData::Composite::wptr tfSelection = this->getSafeInOut< ::fwData::Composite>(this->getTFSelectionFwID());
+    this->setTransferFunctionSelection(tfSelection);
+
     this->doUpdate();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //------------------------------------------------------------------------------
 
 void Image::doStop() throw(fwTools::Failed)
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->destroyPipeline();
 }
 
@@ -97,9 +90,9 @@ void Image::doStop() throw(fwTools::Failed)
 
 void Image::doSwap() throw(fwTools::Failed)
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->doUpdate();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //------------------------------------------------------------------------------
@@ -107,77 +100,47 @@ void Image::doSwap() throw(fwTools::Failed)
 void Image::doUpdate() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
 
     if (imageIsValid)
     {
         this->updateImage(image);
         this->buildPipeline();
         this->updateImageTransferFunction(image);
-        this->updateWindowing(image);
+        this->updateWindowing();
         this->updateImageOpacity();
     }
     else
     {
-        this->updateTransferFunction(image, this->getSptr());
+        this->updateTransferFunction(image);
     }
 }
 
 //------------------------------------------------------------------------------
 
-void Image::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
+void Image::updatingTFPoints()
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-
-    if (imageIsValid)
-    {
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            this->doUpdate();
-
-            // Hack to force imageSlice update until it is not able to detect a new image
-            ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-            msg->setSliceIndex(m_axialIndex, m_frontalIndex, m_sagittalIndex);
-            ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
-        }
-
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::MODIFIED ) )
-        {
-            m_imageData->Modified();
-
-            this->setVtkPipelineModified();
-        }
-
-        if (this->upadteTFObserver(msg, this->getSptr()) || msg->hasEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS ) )
-        {
-            this->updateImageTransferFunction(image);
-        }
+    this->updateImageTransferFunction(image);
+    this->requestRender();
+}
 
-        if ( msg->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING ) )
-        {
-            ::fwComEd::TransferFunctionMsg::csptr tfmsg = ::fwComEd::TransferFunctionMsg::dynamicConstCast(msg);
-            this->setWindow(tfmsg->getWindow());
-            this->setLevel(tfmsg->getLevel());
-            updateWindowing(image);
-        }
+//------------------------------------------------------------------------------
 
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::TRANSPARENCY ) || msg->hasEvent( ::fwComEd::ImageMsg::VISIBILITY ) )
-        {
-            this->updateImageOpacity();
-        }
-    }
-    else
-    {
-        this->destroyPipeline();
-    }
+void Image::updatingTFWindowing(double window, double level)
+{
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->setWindow(window);
+    this->setLevel(level);
+    this->updateWindowing();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
 
-void Image::configuring() throw(fwTools::Failed)
+void Image::doConfigure() throw(fwTools::Failed)
 {
-    assert(m_configuration->getName() == "config");
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
     if(m_configuration->hasAttribute("vtkimageregister") )
     {
         this->setVtkImageRegisterId( m_configuration->getAttributeValue("vtkimageregister") );
@@ -207,7 +170,7 @@ void Image::updateImage( ::fwData::Image::sptr image  )
 
 //------------------------------------------------------------------------------
 
-void Image::updateWindowing( ::fwData::Image::sptr image )
+void Image::updateWindowing()
 {
     m_lut->SetWindow(this->getWindow());
     m_lut->SetLevel(this->getLevel());
@@ -219,17 +182,14 @@ void Image::updateWindowing( ::fwData::Image::sptr image )
 
 void Image::updateImageTransferFunction( ::fwData::Image::sptr image )
 {
-    this->updateTransferFunction(image, this->getSptr());
+    this->updateTransferFunction(image);
     ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
 
     ::fwVtkIO::helper::TransferFunction::toVtkLookupTable( tf, m_lut, m_allowAlphaInTF, 256 );
 
     m_lut->SetClamping( !tf->getIsClamped() );
 
-    this->setWindow(tf->getWindow());
-    this->setLevel(tf->getLevel());
-
-    this->updateWindowing(image);
+    this->updateWindowing();
 
     this->setVtkPipelineModified();
 }
@@ -244,17 +204,19 @@ void Image::updateImageOpacity()
         if(img->getField( "TRANSPARENCY" ) )
         {
             ::fwData::Integer::sptr transparency = img->getField< ::fwData::Integer >( "TRANSPARENCY" );
-            m_imageOpacity = (100 - (*transparency) ) / 100.0 ;
+            m_imageOpacity                       = (100 - (*transparency) ) / 100.0;
         }
         if(img->getField( "VISIBILITY" ) )
         {
             ::fwData::Boolean::sptr visible = img->getField< ::fwData::Boolean >( "VISIBILITY" );
-            m_imageOpacity = (*visible)?m_imageOpacity:0.0;
+            m_imageOpacity                  = (*visible) ? m_imageOpacity : 0.0;
         }
-        vtkImageBlend *imageBlend = vtkImageBlend::SafeDownCast(m_imageRegister);
+        vtkImageBlend* imageBlend = vtkImageBlend::SafeDownCast(m_imageRegister);
         imageBlend->SetOpacity(m_imagePortId, m_imageOpacity);
-        OSLM_TRACE( "vtkImageBlend " << this->m_imageRegisterId << " opacity :" << m_imagePortId << "," << m_imageOpacity );
+        OSLM_TRACE(
+            "vtkImageBlend " << this->m_imageRegisterId << " opacity :" << m_imagePortId << "," << m_imageOpacity );
         this->setVtkPipelineModified();
+        this->requestRender();
     }
 }
 
@@ -263,7 +225,7 @@ void Image::updateImageOpacity()
 void Image::buildPipeline( )
 {
     SLM_TRACE_FUNC();
-    m_map2colors->SetInput(m_imageData);
+    m_map2colors->SetInputData(m_imageData);
     m_map2colors->SetLookupTable(m_lut);
     m_map2colors->SetOutputFormatToRGBA();
 
@@ -272,9 +234,9 @@ void Image::buildPipeline( )
         m_imageRegister = this->getVtkObject(m_imageRegisterId);
     }
 
-    vtkImageAlgorithm *algorithm  = vtkImageAlgorithm::SafeDownCast(m_imageRegister);
-    vtkImageData      *imageData  = vtkImageData::SafeDownCast(m_imageRegister);
-    vtkImageBlend     *imageBlend = vtkImageBlend::SafeDownCast(m_imageRegister);
+    vtkImageAlgorithm* algorithm = vtkImageAlgorithm::SafeDownCast(m_imageRegister);
+    vtkImageData* imageData      = vtkImageData::SafeDownCast(m_imageRegister);
+    vtkImageBlend* imageBlend    = vtkImageBlend::SafeDownCast(m_imageRegister);
 
     SLM_ASSERT("Invalid vtk image register", algorithm||imageData||imageBlend );
     if (imageBlend)
@@ -296,6 +258,7 @@ void Image::buildPipeline( )
     {
         SLM_TRACE("Register is a vtkImageData");
         m_map2colors->SetOutput(imageData);
+        m_map2colors->Update();
     }
 
     this->setVtkPipelineModified();
@@ -305,9 +268,9 @@ void Image::buildPipeline( )
 
 void Image::destroyPipeline( )
 {
-    vtkImageAlgorithm *algorithm  = vtkImageAlgorithm::SafeDownCast(m_imageRegister);
-    vtkImageData      *imageData  = vtkImageData::SafeDownCast(m_imageRegister);
-    vtkImageBlend     *imageBlend = vtkImageBlend::SafeDownCast(m_imageRegister);
+    vtkImageAlgorithm* algorithm = vtkImageAlgorithm::SafeDownCast(m_imageRegister);
+    vtkImageData* imageData      = vtkImageData::SafeDownCast(m_imageRegister);
+    vtkImageBlend* imageBlend    = vtkImageBlend::SafeDownCast(m_imageRegister);
 
     if (imageBlend)
     {
@@ -332,5 +295,18 @@ void Image::destroyPipeline( )
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType Image::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair(::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT));
+    connections.push_back( std::make_pair(::fwData::Image::s_VISIBILITY_MODIFIED_SIG, s_UPDATE_IMAGE_OPACITY_SLOT));
+    connections.push_back( std::make_pair(::fwData::Image::s_TRANSPARENCY_MODIFIED_SIG, s_UPDATE_IMAGE_OPACITY_SLOT));
+    connections.push_back( std::make_pair(::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT));
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image3DCursor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image3DCursor.cpp
index 0ee088e..56d68c0 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image3DCursor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Image3DCursor.cpp
@@ -1,26 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/format.hpp>
+#include "visuVTKAdaptor/Image3DCursor.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwData/Integer.hpp>
+#include <fwData/Color.hpp>
+#include <fwData/Float.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/TransferFunction.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/Color.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwRenderVTK/vtk/Helpers.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/Base.hpp>
 
 #include <vtkActor.h>
 #include <vtkParametricBoy.h>
@@ -32,29 +34,31 @@
 #include <vtkSphereSource.h>
 #include <vtkTransform.h>
 
-#include "fwRenderVTK/vtk/Helpers.hpp"
-
-#include "visuVTKAdaptor/Image3DCursor.hpp"
+#include <boost/format.hpp>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Image3DCursor, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Image3DCursor, ::fwData::Image );
 
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SPHERE_SLOT      = "updateSphere";
+
 //------------------------------------------------------------------------------
 
 Image3DCursor::Image3DCursor() throw() : m_priority(.6)
 {
     ////handlingEventOff();
-    //addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
-    //addNewHandledEvent( "NEW_SPHERE_CONFIG" );
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &Image3DCursor::updateSliceIndex, this);
+    newSlot(s_UPDATE_SPHERE_SLOT, &Image3DCursor::updateSphere, this);
 }
 
 //------------------------------------------------------------------------------
 
 Image3DCursor::~Image3DCursor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 void Image3DCursor::setVisibility( bool visibility )
@@ -66,17 +70,8 @@ void Image3DCursor::setVisibility( bool visibility )
 
 //------------------------------------------------------------------------------
 
-void Image3DCursor::configuring() throw(fwTools::Failed)
+void Image3DCursor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
 }
 
 //------------------------------------------------------------------------------
@@ -92,7 +87,7 @@ void Image3DCursor::doStart() throw(fwTools::Failed)
     if ( img->getField("IMAGE3DCURSOR_RADIUS") && img->getField("IMAGE3DCURSOR_COLOR") )
     {
         ::fwData::Float::sptr radius = img->getField< ::fwData::Float >("IMAGE3DCURSOR_RADIUS");
-        ::fwData::Color::sptr color = img->getField< ::fwData::Color >("IMAGE3DCURSOR_COLOR");
+        ::fwData::Color::sptr color  = img->getField< ::fwData::Color >("IMAGE3DCURSOR_COLOR");
 
         this->buildPolyData(radius->value());
         m_cursorActor->GetProperty()->SetColor( color->red(), color->green(), color->blue());
@@ -103,7 +98,7 @@ void Image3DCursor::doStart() throw(fwTools::Failed)
         m_cursorActor->GetProperty()->SetColor(1,1,1);
     }
 
-    m_cursorMapper->SetInput( m_cursorPolyData );
+    m_cursorMapper->SetInputData( m_cursorPolyData );
     m_cursorActor->SetMapper(m_cursorMapper);
 
     if(!this->getTransformId().empty())
@@ -149,37 +144,33 @@ void Image3DCursor::doStop() throw(fwTools::Failed)
     m_cursorActor    = 0;
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void Image3DCursor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void Image3DCursor::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    SLM_TRACE_FUNC();
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
 
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
-    {
-        ::fwComEd::ImageMsg::dynamicConstCast(msg)->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
-        int index[3] = {
-            *m_sagittalIndex,
-            *m_frontalIndex,
-            *m_axialIndex
-        };
-        double center[3];
-        sliceIndexToWorld(index, center);
-        this->updateCursorPosition(center);
-    }
+    int index[3] = {sagittal, frontal, axial};
+    double center[3];
+    this->sliceIndexToWorld(index, center);
+    this->updateCursorPosition(center);
+    this->requestRender();
+}
 
-    if ( msg->hasEvent( "NEW_SPHERE_CONFIG" ) )
-    {
-        ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
-        ::fwData::Float::sptr radius = img->getField< ::fwData::Float >("IMAGE3DCURSOR_RADIUS");
-        ::fwData::Color::sptr color = img->getField< ::fwData::Color >("IMAGE3DCURSOR_COLOR");
+//------------------------------------------------------------------------------
 
-        m_cursorActor->GetProperty()->SetColor( color->red(), color->green(), color->blue());
-        buildPolyData(radius->value());
+void Image3DCursor::updateSphere(::fwData::Color::sptr color, float radius)
+{
+    ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
 
-        m_cursorMapper->SetInput( m_cursorPolyData );
-        this->setVtkPipelineModified();
-    }
+    m_cursorActor->GetProperty()->SetColor( color->red(), color->green(), color->blue());
+    this->buildPolyData(radius);
+
+    m_cursorMapper->SetInputData( m_cursorPolyData );
+    this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
@@ -210,5 +201,16 @@ void Image3DCursor::buildPolyData(float radius)
     //this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Image3DCursor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+
+    return connections;
+}
+
+//-----------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp
index db03abf..6392437 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageLandmarks.cpp
@@ -1,62 +1,69 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
+#include "visuVTKAdaptor/ImageLandmarks.hpp"
+
+#include "visuVTKAdaptor/PointLabel.hpp"
+#include "visuVTKAdaptor/PointList.hpp"
 
-#include <boost/foreach.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Boolean.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Material.hpp>
-#include <fwData/PointList.hpp>
 #include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/PointListMsg.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
 
 #include <vtkActor.h>
 #include <vtkAssemblyNode.h>
 #include <vtkAssemblyPath.h>
+#include <vtkCellPicker.h>
 #include <vtkCommand.h>
 #include <vtkCubeSource.h>
-#include <vtkCellPicker.h>
 #include <vtkPolyDataMapper.h>
-#include <vtkRenderer.h>
 #include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
 
-#include "visuVTKAdaptor/ImageLandmarks.hpp"
-#include "visuVTKAdaptor/PointList.hpp"
-#include "visuVTKAdaptor/PointLabel.hpp"
-#include <fwServices/IEditionService.hpp>
-
-
+#include <algorithm>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageLandmarks, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageLandmarks, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_LANDMARKS_SLOT = "updateLandmaks";
+
+
+//------------------------------------------------------------------------------
+
 void notifyRemoveLandMark( ::fwData::Image::sptr image, ::fwServices::IService* _service, ::fwData::Point::sptr point )
 {
     SLM_ASSERT("NULL Service", _service);
 
-    ::fwComEd::PointListMsg::sptr msgPointList = ::fwComEd::PointListMsg::New();
-    msgPointList->addEvent( ::fwComEd::PointListMsg::ELEMENT_REMOVED, point );
-    ::fwData::PointList::sptr pointList = image->getField< ::fwData::PointList >(  ::fwComEd::Dictionary::m_imageLandmarksId );
-    ::fwServices::IEditionService::notify( _service->getSptr(), pointList, msgPointList);
+    ::fwData::PointList::sptr pointList = image->getField< ::fwData::PointList >(
+        ::fwDataTools::fieldHelper::Image::m_imageLandmarksId );
 
-    ::fwComEd::ImageMsg::sptr msgLandmark = ::fwComEd::ImageMsg::New();
-    msgLandmark->addEvent( ::fwComEd::ImageMsg::LANDMARK, point );
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = image->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-    fwServicesNotifyMsgMacro( image->getLightID(), sig, msgLandmark );
+    auto sig =
+        pointList->signal< ::fwData::PointList::PointRemovedSignalType >(::fwData::PointList::s_POINT_REMOVED_SIG);
+    sig->asyncEmit(point);
+
+    auto sigImg = image->signal< ::fwData::Image::LandmarkRemovedSignalType >(
+        ::fwData::Image::s_LANDMARK_REMOVED_SIG );
+    sigImg->asyncEmit(point);
 }
 
 //------------------------------------------------------------------------------
@@ -64,21 +71,23 @@ void notifyRemoveLandMark( ::fwData::Image::sptr image, ::fwServices::IService*
 class vtkPointDeleteCallBack : public vtkCommand
 {
 
-public :
-    static vtkPointDeleteCallBack *New( ::fwRenderVTK::IVtkAdaptorService *service)
-    { return new vtkPointDeleteCallBack(service); }
+public:
+    static vtkPointDeleteCallBack* New( ::fwRenderVTK::IVtkAdaptorService* service)
+    {
+        return new vtkPointDeleteCallBack(service);
+    }
 
-    vtkPointDeleteCallBack( ::fwRenderVTK::IVtkAdaptorService *service )
-    : m_service(service),
-      m_picker( vtkCellPicker::New() ),
-      m_propCollection( vtkPropCollection::New() )
+    vtkPointDeleteCallBack( ::fwRenderVTK::IVtkAdaptorService* service )
+        : m_service(service),
+          m_picker( vtkCellPicker::New() ),
+          m_propCollection( vtkPropCollection::New() )
     {
         m_lastPos[0] = -1;
         m_lastPos[1] = -1;
         m_picker->PickFromListOn();
         m_picker->SetTolerance(0.001);
 
-        m_display[2]=0.0;
+        m_display[2] = 0.0;
     }
 
     ~vtkPointDeleteCallBack( )
@@ -98,7 +107,7 @@ public :
         m_service->getAllSubProps(m_propCollection);
         m_propCollection->InitTraversal();
 
-        vtkProp *prop;
+        vtkProp* prop;
 
         while ( (prop = m_propCollection->GetNextProp()) )
         {
@@ -106,7 +115,7 @@ public :
         }
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         int pos[2];
         m_service->getInteractor()->GetLastEventPosition(pos);
@@ -119,7 +128,7 @@ public :
             m_display[1] = pos[1];
 
             this->fillPickList();
-            if (m_picker->Pick( m_display , m_service->getRenderer() ) )
+            if (m_picker->Pick( m_display, m_service->getRenderer() ) )
             {
                 if(getSelectedPoint())
                 {
@@ -132,10 +141,13 @@ public :
                 }
             }
         }
-        else if ( (eventId == vtkCommand::RightButtonReleaseEvent ) && !m_pickedPoint.expired() && !m_pickedPointList.expired() && std::equal(pos, pos+1, m_lastPos) )
+        else if ( (eventId == vtkCommand::RightButtonReleaseEvent ) && !m_pickedPoint.expired() &&
+                  !m_pickedPointList.expired() && std::equal(pos, pos+1, m_lastPos) )
         {
-            ::fwData::Image::sptr image = m_service->getObject< ::fwData::Image >();
-            ::fwData::PointList::PointListContainer::iterator itr = std::find( m_pickedPointList.lock()->getRefPoints().begin(), m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock() );
+            ::fwData::Image::sptr image                           = m_service->getObject< ::fwData::Image >();
+            ::fwData::PointList::PointListContainer::iterator itr = std::find(
+                m_pickedPointList.lock()->getRefPoints().begin(),
+                m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock() );
             if(itr != m_pickedPointList.lock()->getRefPoints().end())
             {
                 ::fwData::Point::sptr point = *itr;
@@ -146,19 +158,21 @@ public :
     }
     bool getSelectedPoint()
     {
-        bool isFind = false;
-        vtkPropCollection *propc = m_picker->GetActors();
-        vtkProp *prop;
+        bool isFind              = false;
+        vtkPropCollection* propc = m_picker->GetActors();
+        vtkProp* prop;
 
         propc->InitTraversal();
         while ( (prop = propc->GetNextProp()) )
         {
-            m_pickedPoint = ::fwData::Point::dynamicCast(m_service->getAssociatedObject(prop,2));
+            m_pickedPoint     = ::fwData::Point::dynamicCast(m_service->getAssociatedObject(prop,2));
             m_pickedPointList = ::fwData::PointList::dynamicCast(m_service->getAssociatedObject(prop,1));
 
             if( !m_pickedPoint.expired() && !m_pickedPointList.expired() )
             {
-                ::fwData::PointList::PointListContainer::iterator itr = std::find( m_pickedPointList.lock()->getRefPoints().begin(), m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock());
+                ::fwData::PointList::PointListContainer::iterator itr = std::find(
+                    m_pickedPointList.lock()->getRefPoints().begin(),
+                    m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock());
                 if(itr != m_pickedPointList.lock()->getRefPoints().end() )
                 {
                     isFind = true;
@@ -169,10 +183,10 @@ public :
         return isFind;
     }
 
-protected :
+protected:
     ::fwRenderVTK::IVtkAdaptorService *m_service;
-    vtkPicker * m_picker;
-    vtkPropCollection * m_propCollection;
+    vtkPicker* m_picker;
+    vtkPropCollection* m_propCollection;
     double m_display[3];
     int m_lastPos[2];
     ::fwData::Point::wptr m_pickedPoint;
@@ -182,27 +196,23 @@ protected :
 
 //------------------------------------------------------------------------------
 
-ImageLandmarks::ImageLandmarks() throw():
-    m_rightButtonCommand(0),
+ImageLandmarks::ImageLandmarks() throw() :
+    m_rightButtonCommand(nullptr),
     m_needSubservicesDeletion(false)
 {
-    //addNewHandledEvent( ::fwComEd::ImageMsg::LANDMARK );
+    newSlot(s_UPDATE_LANDMARKS_SLOT, &ImageLandmarks::updateLandmaks, this);
 }
 
 //------------------------------------------------------------------------------
 
 ImageLandmarks::~ImageLandmarks() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void ImageLandmarks::configuring() throw(fwTools::Failed)
+void ImageLandmarks::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -212,8 +222,8 @@ void ImageLandmarks::doStart() throw(fwTools::Failed)
     SLM_TRACE_FUNC();
 
     m_rightButtonCommand = vtkPointDeleteCallBack::New(this);
-    this->getInteractor()->AddObserver( "RightButtonPressEvent" , m_rightButtonCommand, 1 );
-    this->getInteractor()->AddObserver( "RightButtonReleaseEvent" , m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonPressEvent", m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonReleaseEvent", m_rightButtonCommand, 1 );
 
     this->doUpdate();
 }
@@ -236,8 +246,8 @@ void ImageLandmarks::doUpdate() throw(fwTools::Failed)
 
     ::fwData::PointList::sptr landmarks;
     bool isShown;
-    landmarks = image->getField< ::fwData::PointList >(  ::fwComEd::Dictionary::m_imageLandmarksId );
-    isShown = image->getField("ShowLandmarks", ::fwData::Boolean::New(true))->value();
+    landmarks = image->getField< ::fwData::PointList >(  ::fwDataTools::fieldHelper::Image::m_imageLandmarksId );
+    isShown   = image->getField("ShowLandmarks", ::fwData::Boolean::New(true))->value();
 
     if (!isShown || !landmarks || m_needSubservicesDeletion)
     {
@@ -247,10 +257,11 @@ void ImageLandmarks::doUpdate() throw(fwTools::Failed)
 
     if( isShown && landmarks )
     {
-        if ( ! landmarks->getPoints().empty() )
+        if ( !landmarks->getPoints().empty() )
         {
             ::fwRenderVTK::IVtkAdaptorService::sptr servicePointList;
-            servicePointList = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( landmarks , "::visuVTKAdaptor::PointList");
+            servicePointList = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( landmarks,
+                                                                                       "::visuVTKAdaptor::PointList");
             SLM_ASSERT("servicePointList not instanced", servicePointList);
 
             servicePointList->setPickerId( this->getPickerId() );
@@ -261,10 +272,11 @@ void ImageLandmarks::doUpdate() throw(fwTools::Failed)
             this->registerService( servicePointList );
 
 
-            BOOST_FOREACH( ::fwData::Point::sptr point, landmarks->getRefPoints() )
+            for( ::fwData::Point::sptr point :  landmarks->getRefPoints() )
             {
                 ::fwRenderVTK::IVtkAdaptorService::sptr serviceLabel;
-                serviceLabel = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(point , "::visuVTKAdaptor::PointLabel");
+                serviceLabel = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(point,
+                                                                                      "::visuVTKAdaptor::PointLabel");
                 SLM_ASSERT("serviceLabel not instanced", serviceLabel);
                 serviceLabel->setRenderService( this->getRenderService() );
                 serviceLabel->setAutoRender( this->getAutoRender() );
@@ -278,15 +290,10 @@ void ImageLandmarks::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImageLandmarks::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void ImageLandmarks::updateLandmaks()
 {
-    // update only if new LandMarks
-     ::fwComEd::ImageMsg::csptr imgMsg =  ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    if ( imgMsg && imgMsg->hasEvent( ::fwComEd::ImageMsg::LANDMARK ) )
-    {
-        m_needSubservicesDeletion = true; // to manage point deletion
-        doUpdate();
-    }
+    m_needSubservicesDeletion = true; // to manage point deletion
+    this->updating();
 }
 
 //------------------------------------------------------------------------------
@@ -317,5 +324,18 @@ void ImageLandmarks::show(bool b)
     }
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageLandmarks::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_LANDMARK_ADDED_SIG, s_UPDATE_LANDMARKS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_LANDMARK_REMOVED_SIG, s_UPDATE_LANDMARKS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_LANDMARK_DISPLAYED_SIG, s_UPDATE_LANDMARKS_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageMultiDistances.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageMultiDistances.cpp
index d179974..35c0007 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageMultiDistances.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageMultiDistances.cpp
@@ -1,48 +1,53 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
+#include "visuVTKAdaptor/ImageMultiDistances.hpp"
 
-#include <sstream>
-#include <boost/assign/std/vector.hpp>
+#include "visuVTKAdaptor/Distance.hpp"
 
-#include <fwTools/fwID.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Boolean.hpp>
-#include <fwData/String.hpp>
+#include <fwData/Color.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Material.hpp>
-#include <fwData/Color.hpp>
+#include <fwData/String.hpp>
 #include <fwData/Vector.hpp>
 
+#include <fwDataTools/fieldHelper/Image.hpp>
+
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/op/Add.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwTools/fwID.hpp>
 
 #include <vtkActor.h>
 #include <vtkAssemblyNode.h>
 #include <vtkAssemblyPath.h>
+#include <vtkCamera.h>
+#include <vtkCellPicker.h>
 #include <vtkCommand.h>
 #include <vtkCubeSource.h>
-#include <vtkCellPicker.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindowInteractor.h>
 #include <vtkInteractorStyle.h>
+#include <vtkPolyDataMapper.h>
 #include <vtkRenderWindow.h>
-#include <vtkCamera.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
 
-#include "visuVTKAdaptor/ImageMultiDistances.hpp"
-#include "visuVTKAdaptor/Distance.hpp"
-#include <fwServices/IEditionService.hpp>
+#include <boost/assign/std/vector.hpp>
 
+#include <algorithm>
+#include <sstream>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageMultiDistances, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageMultiDistances, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
@@ -52,24 +57,24 @@ namespace visuVTKAdaptor
 class vtkDistanceDeleteCallBack : public vtkCommand
 {
 
-public :
+public:
 
-    static vtkDistanceDeleteCallBack * New( ImageMultiDistances * service )
+    static vtkDistanceDeleteCallBack* New( ImageMultiDistances* service )
     {
         return new vtkDistanceDeleteCallBack(service);
     }
 
-    vtkDistanceDeleteCallBack( ImageMultiDistances *service )
-    : m_service(service),
-      m_picker( vtkCellPicker::New() ),
-      m_propCollection( vtkPropCollection::New() )
+    vtkDistanceDeleteCallBack( ImageMultiDistances* service )
+        : m_service(service),
+          m_picker( vtkCellPicker::New() ),
+          m_propCollection( vtkPropCollection::New() )
     {
         m_lastPos[0] = -1;
         m_lastPos[1] = -1;
         m_picker->PickFromListOn();
         m_picker->SetTolerance(0.001);
 
-        m_display[2]=0.0;
+        m_display[2] = 0.0;
     }
 
     void fillPickList()
@@ -79,7 +84,7 @@ public :
         m_service->getAllSubProps(m_propCollection);
         m_propCollection->InitTraversal();
 
-        vtkProp *prop;
+        vtkProp* prop;
 
         while ( (prop = m_propCollection->GetNextProp()) )
         {
@@ -87,7 +92,7 @@ public :
         }
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         int pos[2];
         m_service->getInteractor()->GetLastEventPosition(pos);
@@ -105,10 +110,10 @@ public :
 
 
             this->fillPickList();
-            if (m_picker->Pick( m_display , m_service->getRenderer() ) )
+            if (m_picker->Pick( m_display, m_service->getRenderer() ) )
             {
-                vtkPropCollection *propc = m_picker->GetActors();
-                vtkProp *prop;
+                vtkPropCollection* propc = m_picker->GetActors();
+                vtkProp* prop;
 
                 propc->InitTraversal();
                 while ( (prop = propc->GetNextProp()) )
@@ -119,12 +124,9 @@ public :
                     if(plist)
                     {
                         ::fwData::Image::sptr image = m_service->getObject< ::fwData::Image >();
-                        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-                        msg->addEvent( ::fwComEd::ImageMsg::DELETE_DISTANCE, plist );
-
-                        ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-                        sig = image->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-                        fwServicesNotifyMsgMacro( image->getLightID(), sig, msg );
+                        auto sig = image->signal< ::fwData::Image::DistanceRemovedSignalType >(
+                            ::fwData::Image::s_DISTANCE_REMOVED_SIG );
+                        sig->asyncEmit(plist);
 
                         break;
                     }
@@ -133,25 +135,27 @@ public :
         }
     }
 
-protected :
+protected:
 
-    ImageMultiDistances * m_service;
-    vtkPicker * m_picker;
-    vtkPropCollection * m_propCollection;
+    ImageMultiDistances* m_service;
+    vtkPicker* m_picker;
+    vtkPropCollection* m_propCollection;
     double m_display[3];
     int m_lastPos[2];
 
 };
 
+static const ::fwCom::Slots::SlotKeyType s_CREATE_DISTANCE_SLOT = "createDistance";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_DISTANCE_SLOT = "removeDistance";
+
 //------------------------------------------------------------------------------
 
-ImageMultiDistances::ImageMultiDistances() throw():
-    m_rightButtonCommand(0),
+ImageMultiDistances::ImageMultiDistances() throw() :
+    m_rightButtonCommand(nullptr),
     m_needSubservicesDeletion(false)
 {
-    //addNewHandledEvent( ::fwComEd::ImageMsg::DISTANCE );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_DISTANCE );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::DELETE_DISTANCE );
+    newSlot(s_CREATE_DISTANCE_SLOT, &ImageMultiDistances::createDistance, this);
+    newSlot(s_REMOVE_DISTANCE_SLOT, &ImageMultiDistances::removeDistance, this);
 }
 
 //------------------------------------------------------------------------------
@@ -162,13 +166,8 @@ ImageMultiDistances::~ImageMultiDistances() throw()
 
 //------------------------------------------------------------------------------
 
-void ImageMultiDistances::configuring() throw(fwTools::Failed)
+void ImageMultiDistances::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -178,9 +177,9 @@ void ImageMultiDistances::doStart() throw(fwTools::Failed)
     SLM_TRACE_FUNC();
 
     m_rightButtonCommand = vtkDistanceDeleteCallBack::New(this);
-    this->getInteractor()->AddObserver( "RightButtonPressEvent" , m_rightButtonCommand, 1 );
-    this->getInteractor()->AddObserver( "RightButtonReleaseEvent" , m_rightButtonCommand, 1 ); // jamais reçu quand TrackBallCameraStyle activé (GrabFocus)
-    this->getInteractor()->AddObserver( "StartInteractionEvent" , m_rightButtonCommand, 0);    // par contre ce style lance un event d'interaction
+    this->getInteractor()->AddObserver( "RightButtonPressEvent", m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonReleaseEvent", m_rightButtonCommand, 1 );  // jamais reçu quand TrackBallCameraStyle activé (GrabFocus)
+    this->getInteractor()->AddObserver( "StartInteractionEvent", m_rightButtonCommand, 0);     // par contre ce style lance un event d'interaction
 
     this->doUpdate();
 }
@@ -222,20 +221,14 @@ void ImageMultiDistances::doSwap() throw(fwTools::Failed)
         colors.push_back( violet );
 
         Color::sptr vertpomme = Color::New();
-        vertpomme->setRGBA( .65, 1 , 0);
+        vertpomme->setRGBA( .65, 1, 0);
         colors.push_back( vertpomme );
 
         Color::sptr jaune = Color::New();
         jaune->setRGBA( 1, 1, 0);
         colors.push_back( jaune );
 
-//        colors +=   Color::New( 1, 0, 1), // magenta
-//                    Color::New( 0, 1, 1), // cyan
-//                    Color::New( 1, 0.647, 0 ), // orange
-//                    Color::New( .5, 0.26, 1 ), // violet
-//                    Color::New( .65, 1 , 0), // vert pomme
-//                    Color::New( 1, 1, 0 ); // jaune
-        current= colors.begin();
+        current = colors.begin();
     }
 
     if ( ++current == colors.end() )
@@ -258,11 +251,11 @@ void ImageMultiDistances::installSubServices( ::fwData::PointList::sptr pl )
         ::fwRenderVTK::IVtkAdaptorService::sptr serviceDistance;
         serviceDistance =
             ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
-        ( pl , "::visuVTKAdaptor::Distance");
+                ( pl, "::visuVTKAdaptor::Distance");
         SLM_ASSERT("serviceDistance not instanced", serviceDistance);
 
         // install  Color Field if none
-        pl->setDefaultField( ::fwComEd::Dictionary::m_colorId, generateColor() );
+        pl->setDefaultField( ::fwDataTools::fieldHelper::Image::m_colorId, generateColor() );
 
 
         // no mandatory to set picker id
@@ -276,7 +269,7 @@ void ImageMultiDistances::installSubServices( ::fwData::PointList::sptr pl )
         ::fwRenderVTK::IVtkAdaptorService::sptr servicePointList;
         servicePointList =
             ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
-        ( pl , "::visuVTKAdaptor::PointList");
+                ( pl, "::visuVTKAdaptor::PointList");
         SLM_ASSERT("servicePointList not instanced", servicePointList);
 
         servicePointList->setPickerId( this->getPickerId() );
@@ -287,7 +280,6 @@ void ImageMultiDistances::installSubServices( ::fwData::PointList::sptr pl )
 
         this->registerService( serviceDistance );
         this->registerService( servicePointList );
-
     }
 }
 
@@ -295,28 +287,28 @@ void ImageMultiDistances::installSubServices( ::fwData::PointList::sptr pl )
 
 ::fwData::Point::sptr ImageMultiDistances::screenToWorld(int X,int Y)
 {
-    double *world;
+    double* world;
     double display[3];
     double worldTmp[4];
-    display[0]=X;
-    display[1]=Y;
-    display[2]=0;
+    display[0] = X;
+    display[1] = Y;
+    display[2] = 0;
 
-    if ( this->getPicker() && this->getPicker()->Pick( display , this->getRenderer() ) )
+    if ( this->getPicker() && this->getPicker()->Pick( display, this->getRenderer() ) )
     {
         world = this->getPicker()->GetPickPosition();
     }
     else
     {
         // set temporaly the clipping around the focal point : see (1)
-        vtkCamera *camera = this->getRenderer()->GetActiveCamera();
-        double *clippingCamBackup = camera->GetClippingRange();
-        camera->SetClippingRange( camera->GetDistance() - 0.1 , camera->GetDistance() + 0.1 ); // set the clipping around the focal point
+        vtkCamera* camera         = this->getRenderer()->GetActiveCamera();
+        double* clippingCamBackup = camera->GetClippingRange();
+        camera->SetClippingRange( camera->GetDistance() - 0.1, camera->GetDistance() + 0.1 );  // set the clipping around the focal point
 
-        world=worldTmp;
+        world = worldTmp;
         // (1) this function use the near clipping range to estimate the world point (by defaut 0.1 from camera view). The clipping can be modified
         // by insertion of new object. By setting previously the clipping to the focal point we ensure to not place new point a camera position
-        this->getInteractor()->GetInteractorStyle()->ComputeDisplayToWorld ( this->getRenderer(), X , Y , 0 , world); // RETURN HOMOGEN COORD !!!
+        this->getInteractor()->GetInteractorStyle()->ComputeDisplayToWorld ( this->getRenderer(), X, Y, 0, world);    // RETURN HOMOGEN COORD !!!
 
         // restore initial clipping
         camera->SetClippingRange( clippingCamBackup );
@@ -336,7 +328,7 @@ void ImageMultiDistances::doUpdate() throw(fwTools::Failed)
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
     ::fwData::Vector::sptr distanceField;
-    distanceField = image->getField< ::fwData::Vector >( ::fwComEd::Dictionary::m_imageDistancesId);
+    distanceField = image->getField< ::fwData::Vector >( ::fwDataTools::fieldHelper::Image::m_imageDistancesId);
 
     bool isShown;
     isShown = image->getField("ShowDistances", ::fwData::Boolean::New(true))->value();
@@ -349,11 +341,12 @@ void ImageMultiDistances::doUpdate() throw(fwTools::Failed)
     if( isShown && distanceField )
     {
 
-        bool filtering = m_configuration->getAttributeValue("filter") == "true" ;
-        BOOST_FOREACH(::fwData::Object::sptr object, *distanceField)
+        bool filtering = m_configuration->getAttributeValue("filter") == "true";
+        for(::fwData::Object::sptr object :  *distanceField)
         {
-            ::fwData::PointList::sptr distance = ::fwData::PointList::dynamicCast(object);
-            ::fwData::String::sptr relatedService = distance->getField< ::fwData::String >(::fwComEd::Dictionary::m_relatedServiceId);
+            ::fwData::PointList::sptr distance    = ::fwData::PointList::dynamicCast(object);
+            ::fwData::String::sptr relatedService = distance->getField< ::fwData::String >(
+                ::fwDataTools::fieldHelper::Image::m_relatedServiceId);
 
             if ( filtering && relatedService )
             {
@@ -373,13 +366,13 @@ void ImageMultiDistances::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImageMultiDistances::removeDistance(::fwData::PointList::sptr plToRemove ) throw(::fwTools::Failed)
+void ImageMultiDistances::removeDistance(::fwData::PointList::sptr plToRemove )
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->unregisterServices();
 
     ::fwData::Vector::sptr distanceField;
-    distanceField = image->getField< ::fwData::Vector >( ::fwComEd::Dictionary::m_imageDistancesId);
+    distanceField = image->getField< ::fwData::Vector >( ::fwDataTools::fieldHelper::Image::m_imageDistancesId);
 
     ::fwData::Vector::IteratorType iter = std::find(distanceField->begin(), distanceField->end(), plToRemove);
     if(iter != distanceField->end())
@@ -392,15 +385,24 @@ void ImageMultiDistances::removeDistance(::fwData::PointList::sptr plToRemove )
 
 //------------------------------------------------------------------------------
 
+void ImageMultiDistances::createDistance()
+{
+    std::string sceneId = getRenderService()->getID();
+    this->createNewDistance(sceneId);
+}
+
+//------------------------------------------------------------------------------
+
 void ImageMultiDistances::createNewDistance( std::string sceneId ) throw(::fwTools::Failed)
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image     = this->getObject< ::fwData::Image >();
     ::fwData::PointList::sptr newPL = ::fwData::PointList::New();
 
-    newPL->setField( ::fwComEd::Dictionary::m_relatedServiceId, ::fwData::String::New( sceneId ) );
+    newPL->setField( ::fwDataTools::fieldHelper::Image::m_relatedServiceId, ::fwData::String::New( sceneId ) );
 
     ::fwData::Vector::sptr distanceField;
-    distanceField = image->setDefaultField< ::fwData::Vector >(::fwComEd::Dictionary::m_imageDistancesId, ::fwData::Vector::New());
+    distanceField = image->setDefaultField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId,
+                                                               ::fwData::Vector::New());
     distanceField->getContainer().push_back(newPL);
 
     OSLM_INFO("DistanceField size: " << distanceField->size() );
@@ -421,52 +423,6 @@ void ImageMultiDistances::createNewDistance( std::string sceneId ) throw(::fwToo
 
 //------------------------------------------------------------------------------
 
-void ImageMultiDistances::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    // update only if new LandMarks
-    ::fwComEd::ImageMsg::csptr imgMsg =  ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    std::string  sceneId =  getRenderService()->getID();
-
-    if ( imgMsg && imgMsg->hasEvent( ::fwComEd::ImageMsg::NEW_DISTANCE ) )
-    {
-        ::fwData::String::csptr dataInfo;
-        dataInfo = ::fwData::String::dynamicConstCast(imgMsg->getDataInfo(::fwComEd::ImageMsg::NEW_DISTANCE));
-        OSLM_FATAL_IF(" ImageMultiDistances::doUpdate with RenderService "
-                     <<  sceneId << "missing sceneId dataInfo !!!", !dataInfo);
-        if ( dataInfo->value() == sceneId )
-        {
-            this->createNewDistance( sceneId );
-            ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-            msg->addEvent( ::fwComEd::ImageMsg::DISTANCE );
-            ::fwServices::IEditionService::notify( this->getSptr(), image, msg );
-        }
-    }
-
-    if ( imgMsg && imgMsg->hasEvent( ::fwComEd::ImageMsg::DISTANCE ) )
-    {
-        ::fwData::String::csptr dataInfo;
-        dataInfo = ::fwData::String::dynamicConstCast(imgMsg->getDataInfo(::fwComEd::ImageMsg::DISTANCE));
-        // update only if the distance is added in this scene
-        // or if the service is not filtered
-        if ( !dataInfo || dataInfo->value() ==  this->getRenderService()->getID()
-                || m_configuration->getAttributeValue("filter") == "false")
-        {
-            this->doUpdate();
-        }
-    }
-
-    if ( imgMsg && imgMsg->hasEvent( ::fwComEd::ImageMsg::DELETE_DISTANCE ) )
-    {
-        ::fwData::PointList::csptr plToRemove;
-        plToRemove = ::fwData::PointList::dynamicConstCast(imgMsg->getDataInfo(::fwComEd::ImageMsg::DELETE_DISTANCE));
-        SLM_ASSERT( "No dataInfo for the PointList ",plToRemove );
-        this->removeDistance( ::boost::const_pointer_cast< ::fwData::PointList>(plToRemove) );
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void ImageMultiDistances::setNeedSubservicesDeletion( bool _needSubservicesDeletion)
 {
     m_needSubservicesDeletion = _needSubservicesDeletion; // to manage point deletion
@@ -500,5 +456,18 @@ void ImageMultiDistances::show(bool showDistances)
     }
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageMultiDistances::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_DISTANCE_ADDED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_DISTANCE_REMOVED_SIG, s_REMOVE_DISTANCE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_DISTANCE_DISPLAYED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp
index 6ef2c8a..e42ba93 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagePickerInteractor.cpp
@@ -1,70 +1,103 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/ImagePickerInteractor.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <boost/foreach.hpp>
-
-#include <vtkAbstractPropPicker.h>
-#include <vtkActor.h>
-#include <vtkCommand.h>
-#include <vtkCubeSource.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkRenderWindowInteractor.h>
-
-#include <fwComEd/InteractionMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
-
-#include <fwData/Material.hpp>
 #include <fwData/Composite.hpp>
+#include <fwData/Material.hpp>
 #include <fwData/Reconstruction.hpp>
 
 #include <fwRenderVTK/vtk/Helpers.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include "visuVTKAdaptor/ImagePickerInteractor.hpp"
 
+#include <vtkAbstractPropPicker.h>
+#include <vtkActor.h>
+#include <vtkCommand.h>
+#include <vtkCubeSource.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkRenderWindowInteractor.h>
 
 #define START_INTERACTION_EVENT vtkCommand::LeftButtonPressEvent
 #define STOP_INTERACTION_EVENT  vtkCommand::LeftButtonReleaseEvent
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImagePickerInteractor, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImagePickerInteractor, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const std::map< unsigned long, ::fwDataTools::PickingInfo::Event > s_vtkEventIDConversion
+{
+    { vtkCommand::LeftButtonReleaseEvent, ::fwDataTools::PickingInfo::Event::MOUSE_LEFT_UP },
+    { vtkCommand::RightButtonReleaseEvent, ::fwDataTools::PickingInfo::Event::MOUSE_RIGHT_UP },
+    { vtkCommand::MiddleButtonReleaseEvent, ::fwDataTools::PickingInfo::Event::MOUSE_MIDDLE_UP },
+    { vtkCommand::MouseWheelForwardEvent, ::fwDataTools::PickingInfo::Event::MOUSE_WHEELFORWARD },
+    { vtkCommand::LeftButtonPressEvent, ::fwDataTools::PickingInfo::Event::MOUSE_LEFT_DOWN },
+    { vtkCommand::RightButtonPressEvent, ::fwDataTools::PickingInfo::Event::MOUSE_RIGHT_DOWN },
+    { vtkCommand::MiddleButtonPressEvent, ::fwDataTools::PickingInfo::Event::MOUSE_MIDDLE_DOWN },
+    { vtkCommand::MouseWheelBackwardEvent, ::fwDataTools::PickingInfo::Event::MOUSE_WHEELBACKWARD },
+    { vtkCommand::MouseMoveEvent, ::fwDataTools::PickingInfo::Event::MOUSE_MOVE },
+    { vtkCommand::KeyPressEvent, ::fwDataTools::PickingInfo::Event::KEY_PRESS }
+};
+
+ImagePickerInteractor::MapEventIdType ImagePickerInteractor::m_eventIdConversion
+{
+    { std::string("MOUSE_LEFT_UP"), MOUSE_LEFT_UP },
+    { std::string("MOUSE_RIGHT_UP"), MOUSE_RIGHT_UP },
+    { std::string("MOUSE_MIDDLE_UP"), MOUSE_MIDDLE_UP },
+    { std::string("MOUSE_WHEELBACKWARD"), MOUSE_WHEELBACKWARD },
+    { std::string("MOUSE_LEFT_DOWN"), MOUSE_LEFT_DOWN },
+    { std::string("MOUSE_RIGHT_DOWN"), MOUSE_RIGHT_DOWN },
+    { std::string("MOUSE_MIDDLE_DOWN"), MOUSE_MIDDLE_DOWN },
+    { std::string("MOUSE_WHEELBACKWARD"), MOUSE_WHEELBACKWARD },
+    { std::string("MOUSE_MOVE"), MOUSE_MOVE },
+    { std::string("KEY_PRESS"), KEY_PRESS }
+};
+
 class ImagePickerInteractorCallback : public vtkCommand
 {
 public:
-    static ImagePickerInteractorCallback *New()
-    { return new ImagePickerInteractorCallback(); }
+    static ImagePickerInteractorCallback* New()
+    {
+        return new ImagePickerInteractorCallback();
+    }
 
-    ImagePickerInteractorCallback() :  m_caller(NULL), m_priority(-1)
+    //------------------------------------------------------------------------------
+
+    ImagePickerInteractorCallback() : m_picker(nullptr), m_eventId(nullptr)
     {
         m_picker = NULL;
         this->PassiveObserverOn();
     }
 
-    ~ImagePickerInteractorCallback()
+    //------------------------------------------------------------------------------
+
+    virtual ~ImagePickerInteractorCallback()
     {
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    //------------------------------------------------------------------------------
+
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
-        assert(m_priority>=0);
         SLM_ASSERT("m_adaptor not instanced", m_adaptor);
         SLM_ASSERT("m_picker not instanced", m_picker);
 
         this->process(vtkRenderWindowInteractor::SafeDownCast(caller), eventId);
     }
 
+    //------------------------------------------------------------------------------
+
     bool pickSomething()
     {
         int x,y;
@@ -75,121 +108,99 @@ public:
         display[1] = y;
         display[2] = 0;
 
-        return  m_picker->Pick( display , m_adaptor->getRenderer() );
+        return (m_picker->Pick( display, m_adaptor->getRenderer() ) != 0);
     }
 
+    //------------------------------------------------------------------------------
 
-    void process(vtkRenderWindowInteractor *caller, unsigned long eventId) // from
+    void process(vtkRenderWindowInteractor* caller, unsigned long eventId) // from
     {
-        SLM_ASSERT("bad vtk caller", caller);
-        m_caller = caller;
-
-        switch (eventId)
+        if( m_eventId->find( static_cast< ImagePickerInteractor::EventID>(eventId) ) != m_eventId->end() )
         {
-            case vtkCommand::LeftButtonPressEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_LEFT_DOWN);
-                break;
-            case vtkCommand::LeftButtonReleaseEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_LEFT_UP);
-                break;
-            case vtkCommand::MiddleButtonPressEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_MIDDLE_DOWN);
-                break;
-            case vtkCommand::MiddleButtonReleaseEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_MIDDLE_UP);
-                break;
-            case vtkCommand::RightButtonPressEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_RIGHT_DOWN);
-                break;
-            case vtkCommand::RightButtonReleaseEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_RIGHT_UP);
-                break;
-            //case vtkCommand::EnterEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::);
-                //break;
-            //case vtkCommand::LeaveEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::);
-                //break;
-            //case vtkCommand::KeyPressEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::KEY_DOWN);
-                //break;
-            //case vtkCommand::KeyReleaseEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::KEY_UP);
-                //break;
-            case vtkCommand::MouseMoveEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_MOVE);
-                break;
-            case vtkCommand::MouseWheelForwardEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELFORWARD_DOWN);
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELFORWARD_UP);
-                break;
-            case vtkCommand::MouseWheelBackwardEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELBACKWARD_DOWN);
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELBACKWARD_UP);
-                break;
-            default:
-                OSLM_ASSERT("Unknown vtk event: " << vtkCommand::GetStringFromEventId(eventId) ,0);
-        };
+#ifdef __linux
+            /// We receive way too many MOUSE_MOVE events on Linux
+            /// HACK_FB: Skip some of them...
+            if(eventId == ImagePickerInteractor::MOUSE_MOVE)
+            {
+                m_skipMove++;
+                if( m_skipMove % 10 )
+                {
+                    return;
+                }
+            }
+#endif
+            SLM_ASSERT("bad vtk caller", caller);
+
+            if ( this->pickSomething() )
+            {
+                double world[3] = {-1,0,0};
+                ::fwRenderVTK::vtk::getNearestPickedPosition(m_picker, m_adaptor->getRenderer(), world);
+                OSLM_TRACE("PICK" << world[0] << " ," << world[1] << " ," << world[2] );
+
+                ::fwDataTools::PickingInfo info;
+
+                m_adaptor->worldToImageSliceIndex(world, info.m_worldPos);
+
+                const auto iter = s_vtkEventIDConversion.find(eventId);
+                SLM_ASSERT("Unknown eventId", iter != s_vtkEventIDConversion.end());
+                info.m_eventId = iter->second;
+
+                info.m_keyPressed = caller->GetKeyCode();
+
+                info.m_modifierMask =
+                    caller->GetControlKey() ? ::fwDataTools::PickingInfo::CTRL : ::fwDataTools::PickingInfo::NONE;
+                info.m_modifierMask |=
+                    caller->GetShiftKey() ? ::fwDataTools::PickingInfo::SHIFT : ::fwDataTools::PickingInfo::NONE;
+
+                auto sig = m_adaptor->signal<ImagePickerInteractor::PickedSignalType>(
+                    ImagePickerInteractor::s_PICKED_SIGNAL);
+                sig->asyncEmit(info);
+            }
+        }
 
     }
 
-
-    void notifyMsg(std::string event)
-    {
-        if ( this->pickSomething() )
-        {
-            double world[3] = {-1,0,0};
-            ::fwRenderVTK::vtk::getNearestPickedPosition(m_picker, m_adaptor->getRenderer(), world);
-            OSLM_TRACE("PICK" << world[0] << " ," << world[1] << " ," << world[2] );
-
-            ::fwComEd::InteractionMsg::sptr msg = ::fwComEd::InteractionMsg::New();
-
-            int index[3];
-            m_adaptor->worldToImageSliceIndex(world, index);
-            msg->setEventPoint(index[0], index[1], index[2]);
-            msg->setEvent(event);
-
-            OSLM_TRACE( "Key Ctrl : " << m_caller->GetControlKey() );
-            OSLM_TRACE( "Key Shift : " << m_caller->GetShiftKey() );
-            msg->setModifiersStatus( ::fwComEd::InteractionMsg::CTRL,  m_caller->GetControlKey());
-            msg->setModifiersStatus( ::fwComEd::InteractionMsg::SHIFT, m_caller->GetShiftKey());
-
-            m_adaptor->notifyEvent( msg );
-        }
-    }
+    //------------------------------------------------------------------------------
 
     void setAdaptor( ImagePickerInteractor::sptr adaptor)
     {
         m_adaptor = adaptor;
     }
 
-    void setPicker( vtkAbstractPropPicker *adaptor)
+    //------------------------------------------------------------------------------
+
+    void setPicker( vtkAbstractPropPicker* picker)
     {
-        m_picker = adaptor;
+        m_picker = picker;
     }
 
-    void setPriority( float priority )
+    //------------------------------------------------------------------------------
+
+    void setEventId(ImagePickerInteractor::SetEventIdType* eventId)
     {
-        m_priority = priority;
+        m_eventId = eventId;
     }
 
-protected :
-    vtkRenderWindowInteractor *m_caller;
+protected:
     ImagePickerInteractor::sptr m_adaptor;
-    vtkAbstractPropPicker *m_picker;
-    float    m_priority;
-
+    vtkAbstractPropPicker* m_picker;
+    ImagePickerInteractor::SetEventIdType* m_eventId;
+    ImagePickerInteractor::PickedSignalType::sptr m_sigPickedCell; ///< signal to emit
+#ifdef __linux
+    unsigned int m_skipMove = 0u;
+#endif // __linux
 };
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+
+const ::fwCom::Signals::SignalKeyType ImagePickerInteractor::s_PICKED_SIGNAL = "picked";
+
 //------------------------------------------------------------------------------
 
-ImagePickerInteractor::ImagePickerInteractor() throw()
-    : m_priority(0.999)
+ImagePickerInteractor::ImagePickerInteractor() throw() : m_interactionCommand(nullptr)
 {
-    ////handlingEventOff();
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
+    newSignal<PickedSignalType>(s_PICKED_SIGNAL);
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &ImagePickerInteractor::updateSliceIndex, this);
 }
 
 //------------------------------------------------------------------------------
@@ -200,40 +211,55 @@ ImagePickerInteractor::~ImagePickerInteractor() throw()
 
 //------------------------------------------------------------------------------
 
-void ImagePickerInteractor::configuring() throw(fwTools::Failed)
+void ImagePickerInteractor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
+    SLM_ASSERT("Required element 'config' is missing.", m_configuration->getName() == "config");
+
+    if (m_configuration->hasAttribute("event"))
+    {
+        const std::string eventTxt = m_configuration->getAttributeValue("event");
 
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+        ::boost::char_separator<char> sep(", ;");
+        ::boost::tokenizer< ::boost::char_separator<char> > tok(eventTxt, sep);
+        for( const auto it : tok)
+        {
+            const auto iter = m_eventIdConversion.find(it);
+            SLM_ASSERT("Unknown eventId '"+ it+"'.", iter != m_eventIdConversion.end());
+            m_eventId.insert(iter->second);
+        }
+    }
+    else
+    {
+        for(auto elt : m_eventIdConversion)
+        {
+            m_eventId.insert(elt.second);
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
 
 void ImagePickerInteractor::doStart() throw(fwTools::Failed)
 {
-    ImagePickerInteractorCallback *observer = ImagePickerInteractorCallback::New();
+    ImagePickerInteractorCallback* observer = ImagePickerInteractorCallback::New();
     observer->setAdaptor( ImagePickerInteractor::dynamicCast(this->getSptr()) );
     observer->setPicker(this->getPicker());
-    observer->setPriority(  m_priority );
+    observer->setEventId(&m_eventId);
 
     m_interactionCommand = observer;
 
-    vtkRenderWindowInteractor *interactor = this->getInteractor();
-    interactor->AddObserver(vtkCommand::LeftButtonPressEvent    , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::LeftButtonReleaseEvent  , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MiddleButtonPressEvent  , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MiddleButtonReleaseEvent, m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::RightButtonPressEvent   , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::RightButtonReleaseEvent , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::EnterEvent              , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::LeaveEvent              , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::KeyPressEvent           , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::KeyReleaseEvent         , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MouseMoveEvent          , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MouseWheelForwardEvent  , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent , m_interactionCommand, m_priority);
+    vtkRenderWindowInteractor* interactor = this->getInteractor();
+    const float priority                  = 0.999f;
+    interactor->AddObserver(vtkCommand::LeftButtonPressEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::LeftButtonReleaseEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MiddleButtonPressEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MiddleButtonReleaseEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::RightButtonPressEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::RightButtonReleaseEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MouseMoveEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::KeyPressEvent, m_interactionCommand, priority);
 
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
@@ -242,22 +268,18 @@ void ImagePickerInteractor::doStart() throw(fwTools::Failed)
 //------------------------------------------------------------------------------
 
 void ImagePickerInteractor::doUpdate() throw(fwTools::Failed)
-{}
+{
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateImageInfos(image);
+}
 
 //-----------------------------------------------------------------------------
 
-void ImagePickerInteractor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void ImagePickerInteractor::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-    {
-        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-        this->updateImageInfos(image);
-    }
-
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
-    {
-        ::fwComEd::ImageMsg::dynamicConstCast(msg)->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
-    }
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
 }
 
 //------------------------------------------------------------------------------
@@ -272,20 +294,18 @@ void ImagePickerInteractor::doSwap() throw(fwTools::Failed)
 
 void ImagePickerInteractor::doStop() throw(fwTools::Failed)
 {
-    vtkRenderWindowInteractor *interactor = this->getInteractor();
-    interactor->RemoveObservers(vtkCommand::LeftButtonPressEvent    , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::LeftButtonReleaseEvent  , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MiddleButtonPressEvent  , m_interactionCommand);
+    vtkRenderWindowInteractor* interactor = this->getInteractor();
+    interactor->RemoveObservers(vtkCommand::LeftButtonPressEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::LeftButtonReleaseEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MiddleButtonPressEvent, m_interactionCommand);
     interactor->RemoveObservers(vtkCommand::MiddleButtonReleaseEvent, m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::RightButtonPressEvent   , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::RightButtonReleaseEvent , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::EnterEvent              , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::LeaveEvent              , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::KeyPressEvent           , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::KeyReleaseEvent         , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MouseMoveEvent          , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MouseWheelForwardEvent  , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MouseWheelBackwardEvent , m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::RightButtonPressEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::RightButtonReleaseEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MouseMoveEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MouseWheelForwardEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MouseWheelBackwardEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::KeyPressEvent, m_interactionCommand);
+
 
     m_interactionCommand->Delete();
     m_interactionCommand = NULL;
@@ -294,9 +314,14 @@ void ImagePickerInteractor::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImagePickerInteractor::notifyEvent(::fwComEd::InteractionMsg::sptr msg)
+::fwServices::IService::KeyConnectionsType ImagePickerInteractor::getObjSrvConnections() const
 {
-    ::fwServices::IEditionService::notify(this->getSptr(), this->getObject(), msg);
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSeries.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSeries.cpp
index 9955a0d..648d8d5 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSeries.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSeries.cpp
@@ -1,28 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/ImageSeries.hpp"
 
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
 #include <fwData/Boolean.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Reconstruction.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
 
 #include <fwServices/macros.hpp>
 #include <fwServices/op/Add.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwMedData/ImageSeries.hpp>
 
 #include <vtkActor.h>
 #include <vtkPolyDataMapper.h>
 
-#include "visuVTKAdaptor/ImageSeries.hpp"
-
-
-
 fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageSeries, ::fwMedData::ImageSeries );
 
 namespace visuVTKAdaptor
@@ -30,33 +25,33 @@ namespace visuVTKAdaptor
 
 
 ImageSeries::ImageSeries() throw() :
-        m_allowAlphaInTF(false),
-        m_interpolation(false),
-        m_3dModeEnabled ( ::boost::logic::indeterminate ),
-        m_sliceMode(NegatoMPR::THREE_SLICES)
+    m_allowAlphaInTF(false),
+    m_interpolation(false),
+    m_3dModeEnabled ( ::boost::logic::indeterminate ),
+    m_sliceMode(NegatoMPR::THREE_SLICES)
 
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ImageSeries::~ImageSeries() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void ImageSeries::configuring() throw(fwTools::Failed)
+void ImageSeries::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
 
     if (m_configuration->hasAttribute("mode"))
     {
         std::string value(m_configuration->getAttributeValue("mode"));
         std::transform(value.begin(), value.end(), value.begin(), tolower);
-        OSLM_ASSERT("Sorry, bad value "<<value<<" for attribute mode.",
+        OSLM_ASSERT("Bad value "<<value<<" for attribute mode, it should either be '3d' or '2d'.",
                     value == "3d" || value == "2d");
         this->set3dMode(value == "3d");
     }
@@ -80,7 +75,7 @@ void ImageSeries::configuring() throw(fwTools::Failed)
     }
     if(m_configuration->hasAttribute("sliceIndex"))
     {
-        std::string  orientation = m_configuration->getAttributeValue("sliceIndex");
+        std::string orientation = m_configuration->getAttributeValue("sliceIndex");
         if(orientation == "axial" )
         {
             m_orientation = Z_AXIS;
@@ -94,10 +89,6 @@ void ImageSeries::configuring() throw(fwTools::Failed)
             m_orientation = X_AXIS;
         }
     }
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
     if(m_configuration->hasAttribute("tfalpha") )
     {
         this->setAllowAlphaInTF(m_configuration->getAttributeValue("tfalpha") == "yes");
@@ -131,7 +122,7 @@ void ImageSeries::doUpdate() throw(fwTools::Failed)
     ::fwData::Image::sptr image = series->getImage();
 
     ::fwRenderVTK::IVtkAdaptorService::sptr service =
-            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( image, "::visuVTKAdaptor::NegatoMPR" );
+        ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( image, "::visuVTKAdaptor::NegatoMPR" );
     SLM_ASSERT("service not instanced", service);
 
     service->setTransformId( this->getTransformId() );
@@ -168,12 +159,7 @@ void ImageSeries::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImageSeries::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
-void  ImageSeries::setSliceMode(NegatoMPR::SliceMode sliceMode)
+void ImageSeries::setSliceMode(NegatoMPR::SliceMode sliceMode)
 {
     if(m_sliceMode != sliceMode)
     {
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp
index 9013bde..82412ab 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSlice.cpp
@@ -1,21 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
+#include "visuVTKAdaptor/ImageSlice.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Image.hpp>
-#include <fwData/TransferFunction.hpp>
-#include <fwData/Color.hpp>
-#include <fwData/String.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwServices/macros.hpp>
 
 #include <fwVtkIO/vtk.hpp>
 
@@ -24,74 +25,73 @@
 #include <vtkImageActor.h>
 #include <vtkImageBlend.h>
 #include <vtkImageData.h>
+#include <vtkImageMapper3D.h>
 #include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkProperty.h>
 #include <vtkRenderer.h>
 #include <vtkTransform.h>
 
-#include "visuVTKAdaptor/ImageSlice.hpp"
-
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageSlice, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageSlice, ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_CHECK_CTRL_IMAGE_SLOT   = "checkCtrlImage";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
 
 //------------------------------------------------------------------------------
 
-ImageSlice::ImageSlice() throw()
+ImageSlice::ImageSlice() throw() :
+    m_interpolation(true),
+    m_useImageTF(false),
+    m_actorOpacity(1.),
+    m_imageSource(nullptr),
+    m_imageActor(vtkImageActor::New()),
+    m_planeOutlinePolyData(vtkPolyData::New()),
+    m_planeOutlineMapper(vtkPolyDataMapper::New()),
+    m_planeOutlineActor(vtkActor::New())
 {
-    SLM_TRACE_FUNC();
-    m_imageActor = vtkImageActor::New();
-
-    m_imageSource = NULL;
-
-    m_planeOutlinePolyData = vtkPolyData::New();
-    m_planeOutlineMapper   = vtkPolyDataMapper::New();
-    m_planeOutlineActor    = vtkActor::New();
-
-    m_interpolation = true;
-
-    m_useImageTF = false;
-
-    // Manage events
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER              );
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE           );
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX         );
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE   );
+    newSlot(s_CHECK_CTRL_IMAGE_SLOT, &ImageSlice::checkCtrlImage, this);
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &ImageSlice::updateSliceIndex, this);
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &ImageSlice::updateSliceType, this);
 }
 
 //------------------------------------------------------------------------------
 
 ImageSlice::~ImageSlice() throw()
 {
-    SLM_TRACE_FUNC();
     m_imageActor->Delete();
-    m_imageActor = NULL;
+    m_imageActor = nullptr;
 
     m_planeOutlineActor->Delete();
-    m_planeOutlineActor = NULL;
+    m_planeOutlineActor = nullptr;
 
     m_planeOutlineMapper->Delete();
-    m_planeOutlineMapper = NULL;
+    m_planeOutlineMapper = nullptr;
 
     m_planeOutlinePolyData->Delete();
-    m_planeOutlinePolyData = NULL;
+    m_planeOutlinePolyData = nullptr;
 }
 
 //------------------------------------------------------------------------------
 
 void ImageSlice::doStart() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
     this->addToRenderer(m_imageActor);
     this->addToRenderer(m_planeOutlineActor);
     this->addToPicker(m_imageActor);
 
-    m_connection = this->getCtrlImage()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLOT);
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLICE_INDEX_SLOT);
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLICE_TYPE_SLOT);
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_BUFFER_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLOT);
     this->doUpdate();
 }
 
@@ -100,10 +100,8 @@ void ImageSlice::doStart() throw(fwTools::Failed)
 void ImageSlice::doStop() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    if (!m_connection.expired())
-    {
-        m_connection.disconnect();
-    }
+
+    m_connections.disconnect();
     this->removeFromPicker(m_imageActor);
     this->removeAllPropFromRenderer();
 }
@@ -112,12 +110,15 @@ void ImageSlice::doStop() throw(fwTools::Failed)
 
 void ImageSlice::doSwap() throw(fwTools::Failed)
 {
-    if (!m_connection.expired())
-    {
-        m_connection.disconnect();
-    }
-    m_connection = this->getCtrlImage()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+    m_connections.disconnect();
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLOT);
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLICE_INDEX_SLOT);
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLICE_TYPE_SLOT);
+    m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_BUFFER_MODIFIED_SIG,
+                          this->getSptr(), s_UPDATE_SLOT);
     this->doUpdate();
 }
 
@@ -148,104 +149,64 @@ void ImageSlice::doUpdate() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getCtrlImage();
 
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
     if (imageIsValid)
     {
         this->buildPipeline();
         this->updateImage(image);
-        this->updateSliceIndex(image);
+        this->updateImageSliceIndex(image);
         this->updateOutline();
     }
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void ImageSlice::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
+void ImageSlice::updateSliceIndex(int axial, int frontal, int sagittal)
 {
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
+
     ::fwData::Image::sptr image = m_ctrlImage.lock();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    this->updateImageSliceIndex(image);
+    this->updateOutline();
+}
 
-    if ( msg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS )
-         || msg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS )
-         || msg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS )
-         )
+//-----------------------------------------------------------------------------
+
+void ImageSlice::updateSliceType(int from, int to)
+{
+    if( to == static_cast<int>(m_orientation) )
     {
-        if (m_ctrlImage.expired() || m_ctrlImage.lock() != this->getCtrlImage())
-        {
-            if (!m_connection.expired())
-            {
-                m_connection.disconnect();
-            }
-            m_connection = m_ctrlImage.lock()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
-        }
-        this->doUpdate();
+        setOrientation( static_cast< Orientation >( from ));
     }
-
-    if (imageIsValid)
+    else if(from == static_cast<int>(m_orientation))
     {
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            doUpdate();
-        }
-
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
-        {
-            ::fwComEd::ImageMsg::dynamicConstCast(msg)->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
-            this->updateSliceIndex(image);
-            this->updateOutline();
-        }
-
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE ) && imageIsValid)
-        {
-            ::fwData::Object::csptr cObjInfo = msg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-            ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-            ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-            int fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] )->value();
-            int toSliceType =   ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] )->value();
-
-            if( toSliceType == static_cast<int>(m_orientation) )
-            {
-                setOrientation( static_cast< Orientation >( fromSliceType ));
-                this->doUpdate();
-            }
-            else if(fromSliceType == static_cast<int>(m_orientation))
-            {
-                setOrientation( static_cast< Orientation >( toSliceType ));
-                this->doUpdate();
-            }
-        }
+        setOrientation( static_cast< Orientation >( to ));
     }
+    this->updating();
 }
 
 //------------------------------------------------------------------------------
 
-void ImageSlice::configuring() throw(fwTools::Failed)
+void ImageSlice::doConfigure() throw(fwTools::Failed)
 {
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
     if(m_configuration->hasAttribute("sliceIndex"))
     {
-         std::string  orientation = m_configuration->getAttributeValue("sliceIndex");
-         if(orientation == "axial" )
-         {
-             m_orientation = Z_AXIS;
-         }
-         else if(orientation == "frontal" )
-         {
-             m_orientation = Y_AXIS;
-         }
-         else if(orientation == "sagittal" )
-         {
-             m_orientation = X_AXIS;
-         }
-    }
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
+        std::string orientation = m_configuration->getAttributeValue("sliceIndex");
+        if(orientation == "axial" )
+        {
+            m_orientation = Z_AXIS;
+        }
+        else if(orientation == "frontal" )
+        {
+            m_orientation = Y_AXIS;
+        }
+        else if(orientation == "sagittal" )
+        {
+            m_orientation = X_AXIS;
+        }
     }
     if(m_configuration->hasAttribute("ctrlimage") )
     {
@@ -259,6 +220,10 @@ void ImageSlice::configuring() throw(fwTools::Failed)
     {
         this->setInterpolation(!(m_configuration->getAttributeValue("interpolation") == "off"));
     }
+    if(m_configuration->hasAttribute("actorOpacity") )
+    {
+        this->setActorOpacity(::boost::lexical_cast<double>(m_configuration->getAttributeValue("actorOpacity")));
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -272,7 +237,7 @@ void ImageSlice::updateImage( ::fwData::Image::sptr image  )
 
 //------------------------------------------------------------------------------
 
-void ImageSlice::updateSliceIndex( ::fwData::Image::sptr image )
+void ImageSlice::updateImageSliceIndex( ::fwData::Image::sptr image )
 {
     unsigned int axialIndex    = m_axialIndex->value();
     unsigned int frontalIndex  = m_frontalIndex->value();
@@ -294,16 +259,16 @@ void ImageSlice::setSlice( int slice, ::fwData::Image::sptr image  )
     SLM_TRACE_FUNC();
     int extent[6];
     std::fill(  extent, extent+6, 0);
-    extent[1] = image->getSize()[0]-1;
-    extent[3] = image->getSize()[1]-1;
-    extent[5] = image->getSize()[2]-1;
-    extent[2*m_orientation]=slice;
-    extent[2*m_orientation+1]=slice;
+    extent[1]                 = static_cast<int>(image->getSize()[0]-1);
+    extent[3]                 = static_cast<int>(image->getSize()[1]-1);
+    extent[5]                 = static_cast<int>(image->getSize()[2]-1);
+    extent[2*m_orientation]   = slice;
+    extent[2*m_orientation+1] = slice;
 
     OSLM_TRACE("DisplayExtent : " << " X min: " << extent[0] << " X max: " << extent[1] <<
-                " Y min: " << extent[2] << " Y max: " << extent[3] <<
-                " Z min: " << extent[4] << " Z max: " << extent[5]
-                );
+               " Y min: " << extent[2] << " Y max: " << extent[3] <<
+               " Z min: " << extent[4] << " Z max: " << extent[5]
+               );
 
     m_imageActor->SetDisplayExtent( extent );
 
@@ -314,32 +279,30 @@ void ImageSlice::setSlice( int slice, ::fwData::Image::sptr image  )
 
 void ImageSlice::buildPipeline( )
 {
-    SLM_TRACE_FUNC();
-
     if (!m_imageSourceId.empty())
     {
         m_imageSource = this->getVtkObject(m_imageSourceId);
     }
 
-    vtkImageAlgorithm *algorithm  = vtkImageAlgorithm::SafeDownCast(m_imageSource);
-    vtkImageData      *imageData  = vtkImageData::SafeDownCast(m_imageSource);
+    vtkImageAlgorithm* algorithm = vtkImageAlgorithm::SafeDownCast(m_imageSource);
+    vtkImageData* imageData      = vtkImageData::SafeDownCast(m_imageSource);
     //vtkImageBlend     *imageBlend = vtkImageBlend::SafeDownCast(m_imageSource);
 
     SLM_ASSERT("Invalid vtk image source", algorithm||imageData );
     if (algorithm)
     {
         SLM_TRACE("Input is a vtkImageAlgorithm");
-        m_imageActor->SetInput(algorithm->GetOutput());
+        m_imageActor->GetMapper()->SetInputConnection(algorithm->GetOutputPort());
         //if (imageBlend)
         //{
-            //imageBlend->SetBlendModeToCompound();
-            //imageBlend->SetCompoundThreshold(0);
+        //imageBlend->SetBlendModeToCompound();
+        //imageBlend->SetCompoundThreshold(0);
         //}
     }
     else if (imageData)
     {
         SLM_TRACE("Input is a vtkImageData");
-        m_imageActor->SetInput(imageData);
+        m_imageActor->SetInputData(imageData);
     }
 
     if(!this->getTransformId().empty())
@@ -348,16 +311,17 @@ void ImageSlice::buildPipeline( )
     }
 
     m_imageActor->SetInterpolate(m_interpolation);
+    m_imageActor->SetOpacity(m_actorOpacity);
 
     this->buildOutline();
     this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
+
 void ImageSlice::buildOutline()
 {
-    SLM_TRACE_FUNC();
-    vtkPoints* points   = vtkPoints::New(VTK_DOUBLE);
+    vtkPoints* points = vtkPoints::New(VTK_DOUBLE);
     points->SetNumberOfPoints(4);
     int i;
     for (i = 0; i < 4; i++)
@@ -365,7 +329,7 @@ void ImageSlice::buildOutline()
         points->SetPoint(i,0.0,0.0,0.0);
     }
 
-    vtkCellArray *cells = vtkCellArray::New();
+    vtkCellArray* cells = vtkCellArray::New();
     cells->Allocate(cells->EstimateSize(4,2));
     vtkIdType pts[2];
     pts[0] = 3; pts[1] = 2;       // top edge
@@ -379,13 +343,13 @@ void ImageSlice::buildOutline()
 
     m_planeOutlinePolyData->SetPoints(points);
     points->Delete();
-    points = NULL;
+    points = nullptr;
     m_planeOutlinePolyData->SetLines(cells);
     cells->Delete();
-    cells = NULL;
+    cells = nullptr;
 
     m_planeOutlineMapper = vtkPolyDataMapper::New();
-    m_planeOutlineMapper->SetInput( m_planeOutlinePolyData );
+    m_planeOutlineMapper->SetInputData( m_planeOutlinePolyData );
     m_planeOutlineMapper->SetResolveCoincidentTopologyToPolygonOffset();
     m_planeOutlineActor->SetMapper(m_planeOutlineMapper);
     m_planeOutlineActor->PickableOff();
@@ -398,22 +362,21 @@ void ImageSlice::buildOutline()
 
 //------------------------------------------------------------------------------
 
-
 void ImageSlice::updateOutline()
 {
     SLM_TRACE_FUNC();
-    static const int indexZ[12] = { 0,2,4, 1,2,4,  1,3,4 ,0,3,4 };
-    static const int indexY[12] = { 0,2,4, 1,2,4,  1,2,5 ,0,2,5 };
-    static const int indexX[12] = { 0,2,4, 0,2,5,  0,3,5 ,0,3,4 };
-    static const int *indexSet[3] = { indexX, indexY, indexZ  };
-    static double colors[3][3] = { {0.,0.,1.} , {0.,1.,0.}, {1.,0.,0.} };
+    static const int indexZ[12]   = { 0,2,4, 1,2,4,  1,3,4,0,3,4 };
+    static const int indexY[12]   = { 0,2,4, 1,2,4,  1,2,5,0,2,5 };
+    static const int indexX[12]   = { 0,2,4, 0,2,5,  0,3,5,0,3,4 };
+    static const int* indexSet[3] = { indexX, indexY, indexZ  };
+    static double colors[3][3]    = { {0.,0.,1.}, {0.,1.,0.}, {1.,0.,0.} };
 
-    double *extent = m_imageActor->GetBounds();
+    double* extent    = m_imageActor->GetBounds();
     vtkPoints* points = m_planeOutlinePolyData->GetPoints();
 
 
-    const int *index = indexSet[ m_orientation ];
-    for ( int i=0; i < 4; ++i)
+    const int* index = indexSet[ m_orientation ];
+    for ( int i = 0; i < 4; ++i)
     {
         double pt[3];
         pt[0] = extent[ *(index++) ];
@@ -429,5 +392,38 @@ void ImageSlice::updateOutline()
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
+void ImageSlice::checkCtrlImage()
+{
+    if (m_ctrlImage.expired() || m_ctrlImage.lock() != this->getCtrlImage())
+    {
+        m_connections.disconnect();
+        m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_MODIFIED_SIG,
+                              this->getSptr(), s_UPDATE_SLOT);
+        m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG,
+                              this->getSptr(), s_UPDATE_SLICE_INDEX_SLOT);
+        m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG,
+                              this->getSptr(), s_UPDATE_SLICE_TYPE_SLOT);
+        m_connections.connect(this->getCtrlImage(), ::fwData::Image::s_BUFFER_MODIFIED_SIG,
+                              this->getSptr(), s_UPDATE_SLOT);
+
+        this->doUpdate();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageSlice::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_CHECK_CTRL_IMAGE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHECK_CTRL_IMAGE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_CHECK_CTRL_IMAGE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSliceOrientationText.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSliceOrientationText.cpp
new file mode 100644
index 0000000..3966287
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageSliceOrientationText.cpp
@@ -0,0 +1,284 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "visuVTKAdaptor/ImageSliceOrientationText.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Image.hpp>
+
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <vtkActor2D.h>
+#include <vtkRenderer.h>
+#include <vtkSmartPointer.h>
+#include <vtkTextMapper.h>
+#include <vtkTextProperty.h>
+
+#include <boost/algorithm/string.hpp>
+
+
+
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageSliceOrientationText,
+                         ::fwData::Object );
+
+namespace visuVTKAdaptor
+{
+
+class ImageSliceOrientationTextPImpl
+{
+public:
+    typedef vtkSmartPointer<vtkActor2D> TextActorPtr;
+    typedef vtkSmartPointer<vtkTextMapper> TextMapperPtr;
+
+    void configure(TextActorPtr& actor, TextMapperPtr& mapper)
+    {
+        actor  = TextActorPtr::New();
+        mapper = TextMapperPtr::New();
+
+        mapper->GetTextProperty()->SetFontFamilyToCourier(); // Fixed-width font
+        mapper->GetTextProperty()->ShadowOn(); // better contrast
+        mapper->GetTextProperty()->BoldOn();
+        actor->SetMapper(mapper);
+        actor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();
+        actor->GetPosition2Coordinate()->SetCoordinateSystemToNormalizedViewport();
+    }
+
+    ImageSliceOrientationTextPImpl()
+    {
+        configure(m_right, m_rightMapper);
+        configure(m_left, m_leftMapper);
+        configure(m_top, m_topMapper);
+        configure(m_bottom, m_bottomMapper);
+
+        vtkTextProperty* textProp;
+
+        m_right->SetPosition(0.99, 0.5);
+        m_rightMapper->SetInput("");
+        textProp = m_rightMapper->GetTextProperty();
+        textProp->SetJustificationToRight();
+        textProp->SetVerticalJustificationToCentered();
+
+        m_left->SetPosition(0.01, 0.5);
+        m_leftMapper->SetInput("");
+        textProp = m_leftMapper->GetTextProperty();
+        textProp->SetJustificationToLeft();
+        textProp->SetVerticalJustificationToCentered();
+
+        m_top->SetPosition(0.5, 0.99);
+        m_topMapper->SetInput("");
+        textProp = m_topMapper->GetTextProperty();
+        textProp->SetJustificationToCentered();
+        textProp->SetVerticalJustificationToTop();
+
+        m_bottom->SetPosition(0.5, 0.01);
+        m_bottomMapper->SetInput("");
+        textProp = m_bottomMapper->GetTextProperty();
+        textProp->SetJustificationToCentered();
+        textProp->SetVerticalJustificationToBottom();
+    }
+
+    void setText(const std::string& str)
+    {
+        m_rightStr     = "-";
+        m_leftStr      = "-";
+        m_anteriorStr  = "-";
+        m_porteriorStr = "-";
+        m_superiorStr  = "-";
+        m_inferiorStr  = "-";
+
+        if (!str.empty())
+        {
+            std::vector<std::string> locations;
+            ::boost::algorithm::split( locations, str, ::boost::algorithm::is_any_of(",") );
+            SLM_ASSERT("Six location should be given, got : " << locations.size() << ":" << str, locations.size());
+
+            m_rightStr     = (locations.size()>0) ? locations[0] : "";
+            m_leftStr      = (locations.size()>1) ? locations[1] : "";
+            m_anteriorStr  = (locations.size()>2) ? locations[2] : "";
+            m_porteriorStr = (locations.size()>3) ? locations[3] : "";
+            m_superiorStr  = (locations.size()>4) ? locations[4] : "";
+            m_inferiorStr  = (locations.size()>5) ? locations[5] : "";
+        }
+
+    }
+
+    void setOrientation( ::fwDataTools::helper::MedicalImageAdaptor::Orientation orientation )
+    {
+        switch (orientation)
+        {
+            case ::fwDataTools::helper::MedicalImageAdaptor::X_AXIS: // Sagittal
+                m_rightMapper->SetInput(m_anteriorStr.c_str());
+                m_leftMapper->SetInput(m_porteriorStr.c_str());
+                m_topMapper->SetInput(m_superiorStr.c_str());
+                m_bottomMapper->SetInput(m_inferiorStr.c_str());
+                break;
+            case ::fwDataTools::helper::MedicalImageAdaptor::Y_AXIS: // Frontal
+                m_rightMapper->SetInput(m_leftStr.c_str());
+                m_leftMapper->SetInput(m_rightStr.c_str());
+                m_topMapper->SetInput(m_superiorStr.c_str());
+                m_bottomMapper->SetInput(m_inferiorStr.c_str());
+                break;
+            case ::fwDataTools::helper::MedicalImageAdaptor::Z_AXIS: // Axial
+                m_rightMapper->SetInput(m_leftStr.c_str());
+                m_leftMapper->SetInput(m_rightStr.c_str());
+                m_topMapper->SetInput(m_anteriorStr.c_str());
+                m_bottomMapper->SetInput(m_porteriorStr.c_str());
+                break;
+            default:
+                m_rightMapper->SetInput("");
+                m_leftMapper->SetInput("");
+                m_topMapper->SetInput("");
+                m_bottomMapper->SetInput("");
+                SLM_ASSERT("bad orientation : " << orientation, 0);
+        }
+    }
+
+    std::string m_rightStr;
+    std::string m_leftStr;
+    std::string m_anteriorStr;
+    std::string m_porteriorStr;
+    std::string m_superiorStr;
+    std::string m_inferiorStr;
+
+    TextMapperPtr m_rightMapper;
+    TextMapperPtr m_leftMapper;
+    TextMapperPtr m_topMapper;
+    TextMapperPtr m_bottomMapper;
+    TextActorPtr m_right;
+    TextActorPtr m_left;
+    TextActorPtr m_top;
+    TextActorPtr m_bottom;
+};
+
+//------------------------------------------------------------------------------
+
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT = "updateSliceType";
+
+//------------------------------------------------------------------------------
+
+ImageSliceOrientationText::ImageSliceOrientationText() throw() : m_pimpl( new ImageSliceOrientationTextPImpl )
+{
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &ImageSliceOrientationText::updateSliceType, this);
+}
+
+//------------------------------------------------------------------------------
+
+ImageSliceOrientationText::~ImageSliceOrientationText() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void ImageSliceOrientationText::doStart() throw(fwTools::Failed)
+{
+    if(m_initialOrientation == "axial")
+    {
+        this->setOrientation(Z_AXIS);
+    }
+    else if(m_initialOrientation == "frontal")
+    {
+        this->setOrientation(Y_AXIS);
+    }
+    else // sagittal
+    {
+        this->setOrientation(X_AXIS);
+    }
+
+    if(!m_locations.empty())
+    {
+        // this->getRenderer()->AddActor2D(m_pimpl->m_right);
+        this->addToRenderer( m_pimpl->m_right );
+        this->addToRenderer( m_pimpl->m_left );
+        this->addToRenderer( m_pimpl->m_top );
+        this->addToRenderer( m_pimpl->m_bottom );
+    }
+    this->doUpdate();
+}
+
+//------------------------------------------------------------------------------
+
+void ImageSliceOrientationText::doStop() throw(fwTools::Failed)
+{
+    this->removeAllPropFromRenderer();
+}
+
+//------------------------------------------------------------------------------
+
+void ImageSliceOrientationText::doSwap() throw(fwTools::Failed)
+{
+    this->doStop();
+    this->doStart();
+}
+
+//------------------------------------------------------------------------------
+
+void ImageSliceOrientationText::doUpdate() throw(::fwTools::Failed)
+{
+    m_pimpl->setText(m_locations);
+    m_pimpl->setOrientation(m_orientation);
+}
+
+//------------------------------------------------------------------------------
+
+void ImageSliceOrientationText::setOrientation( Orientation orientation )
+{
+    this->::fwDataTools::helper::MedicalImageAdaptor::setOrientation(orientation);
+    m_pimpl->setOrientation(orientation);
+}
+
+//-----------------------------------------------------------------------------
+
+void ImageSliceOrientationText::updateSliceType(int from, int to)
+{
+    if( to == static_cast<int>(m_orientation) )
+    {
+        this->setOrientation( static_cast< Orientation >( from ));
+    }
+    else if(from == static_cast<int>(m_orientation))
+    {
+        this->setOrientation( static_cast< Orientation >( to ));
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void ImageSliceOrientationText::doConfigure() throw(fwTools::Failed)
+{
+
+    ::fwServices::IService::ConfigType srvconfig = this->getConfigTree().get_child("config");
+
+    m_locations = srvconfig.get("locations","");
+
+    // R,L,A,P,S,I, right, left, anterior, posterior, superior, inferior, referenced by :
+    // http://en.wikipedia.org/wiki/Anatomical_terms_of_location#Human_anatomy
+    m_locations = (m_locations == "default") ? "R,L,A,P,S,I" : m_locations;
+
+    m_initialOrientation = srvconfig.get("initialOrientation","axial");
+    SLM_TRACE("initialOrientation " + m_initialOrientation);
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageSliceOrientationText::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+
+} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageText.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageText.cpp
index f919203..5ff2671 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageText.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImageText.cpp
@@ -1,59 +1,67 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#include <boost/format.hpp>
+#include "visuVTKAdaptor/ImageText.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwServices/macros.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Integer.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwServices/macros.hpp>
 
 #include <vtkRenderer.h>
 #include <vtkTextActor.h>
 
-#include "visuVTKAdaptor/ImageText.hpp"
+#include <boost/format.hpp>
 
 #include <sstream>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageText, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImageText, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+
 //-----------------------------------------------------------------------------
 
 ImageText::ImageText() throw()
 {
-    //this->installTFSelectionEventHandler(this);
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
-    //this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::WINDOWING );
-    //this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS );
+    this->installTFSlots(this);
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &ImageText::updateSliceIndex, this);
 }
 
 //-----------------------------------------------------------------------------
 
 ImageText::~ImageText() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ImageText::doStart() throw(::fwTools::Failed)
 {
+    ::fwData::Composite::wptr tfSelection = this->getSafeInOut< ::fwData::Composite>(this->getTFSelectionFwID());
+    this->setTransferFunctionSelection(tfSelection);
+
     this->Text::doStart();
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
-    this->updateTransferFunction(image, this->getSptr());
-    this->installTFObserver( this->getSptr() );
+    this->updateTransferFunction(image);
+    this->installTFConnections();
     this->doUpdate();
 }
 
@@ -61,17 +69,17 @@ void ImageText::doStart() throw(::fwTools::Failed)
 
 void ImageText::doStop() throw(fwTools::Failed)
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->Text::doStop();
 }
 
 //-----------------------------------------------------------------------------
 
-void ImageText::configuring() throw(fwTools::Failed)
+void ImageText::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    this->Text::configuring();
+    this->Text::doConfigure();
 
     this->parseTFConfig( m_configuration );
 }
@@ -84,9 +92,9 @@ void ImageText::doUpdate() throw(::fwTools::Failed)
     std::stringstream ss;
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-    if (::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    if (::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
     {
-        ::fwComEd::helper::Image imageHelper(image);
+        ::fwDataTools::helper::Image imageHelper(image);
         unsigned int axialIndex    = m_axialIndex->value();
         unsigned int frontalIndex  = m_frontalIndex->value();
         unsigned int sagittalIndex = m_sagittalIndex->value();
@@ -95,12 +103,12 @@ void ImageText::doUpdate() throw(::fwTools::Failed)
         int max = this->getLevel() + this->getWindow()/2.0;
 
         double window = max - min;
-        double level = min + window*0.5;
+        double level  = min + window*0.5;
 
         ss <<  ( ::boost::format("[% 3li,% 3li]") % min % max ) << std::endl;
         ss <<  ( ::boost::format("W:% 3lg L:% 3lg") % window % level ) << std::endl;
         ss <<  ( ::boost::format("(% 4li,% 4li,% 4li): %s") % sagittalIndex % frontalIndex % axialIndex %
-                imageHelper.getPixelAsString(sagittalIndex, frontalIndex, axialIndex ));
+                 imageHelper.getPixelAsString(sagittalIndex, frontalIndex, axialIndex ));
     }
 
     this->setText(ss.str());
@@ -110,24 +118,13 @@ void ImageText::doUpdate() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImageText::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void ImageText::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    // update only if new LandMarks
-    ::fwComEd::ImageMsg::csptr imgMsg =  ::fwComEd::ImageMsg::dynamicConstCast( msg );
-    ::fwComEd::TransferFunctionMsg::csptr tfMsg =  ::fwComEd::TransferFunctionMsg::dynamicConstCast( msg );
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
 
-    if ( imgMsg )
-    {
-        if( imgMsg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ))
-        {
-            imgMsg->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
-        }
-        this->doUpdate();
-    }
-    else  if ( tfMsg || this->upadteTFObserver(msg, this->getSptr()))
-    {
-        this->doUpdate();
-    }
+    this->updating();
 }
 
 //------------------------------------------------------------------------------
@@ -135,12 +132,40 @@ void ImageText::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools:
 void ImageText::doSwap() throw(fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->updateImageInfos(image);
-    this->updateTransferFunction(image, this->getSptr());
+    this->updateTransferFunction(image);
     this->doUpdate();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
+}
+
+//------------------------------------------------------------------------------
+
+void ImageText::updatingTFPoints()
+{
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+void ImageText::updatingTFWindowing(double window, double level)
+{
+    this->updating();
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ImageText::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesBlend.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesBlend.cpp
index 295a232..a5be142 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesBlend.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesBlend.cpp
@@ -1,67 +1,55 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkImageBlend.h>
-#include <vtkImageData.h>
-#include <vtkImageMapToColors.h>
-#include <vtkLookupTable.h>
+#include "visuVTKAdaptor/ImagesBlend.hpp"
 
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/Base.hpp>
+#include "visuVTKAdaptor/Image.hpp"
 
 #include <fwData/Boolean.hpp>
 #include <fwData/Color.hpp>
 #include <fwData/Image.hpp>
-#include <fwData/String.hpp>
 #include <fwData/Integer.hpp>
+#include <fwData/String.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwMath/Compare.hpp>
-
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-#include <fwComEd/CompositeMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
 #include <fwGui/dialog/MessageDialog.hpp>
 
+#include <fwMath/Compare.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+
 #include <fwVtkIO/vtk.hpp>
 
-#include "visuVTKAdaptor/Image.hpp"
-#include "visuVTKAdaptor/ImagesBlend.hpp"
+#include <vtkImageBlend.h>
+#include <vtkImageData.h>
+#include <vtkImageMapToColors.h>
+#include <vtkLookupTable.h>
 
+#include <boost/foreach.hpp>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImagesBlend, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImagesBlend, ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
-
 //------------------------------------------------------------------------------
 
-ImagesBlend::ImagesBlend() throw()
+ImagesBlend::ImagesBlend() throw() : m_imageBlend(nullptr)
 {
-    SLM_TRACE_FUNC();
-
-    // Manage events
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER                     );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE                  );
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::ADDED_KEYS           );
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS         );
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS         );
 }
 
 //------------------------------------------------------------------------------
 
 ImagesBlend::~ImagesBlend() throw()
 {
-    SLM_TRACE_FUNC();
-
-    m_imageBlend = NULL;
+    m_imageBlend = nullptr;
 }
 
 //------------------------------------------------------------------------------
@@ -103,41 +91,7 @@ void ImagesBlend::doUpdate() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImagesBlend::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(msg);
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast(msg);
-
-    if (compositeMsg)
-    {
-        if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::ADDED_KEYS)
-                || compositeMsg->hasEvent(::fwComEd::CompositeMsg::REMOVED_KEYS)
-                || compositeMsg->hasEvent(::fwComEd::CompositeMsg::CHANGED_KEYS))
-        {
-            this->doUpdate();
-        }
-    }
-    else if (imageMsg)
-    {
-        SLM_ASSERT("msg subject is expired", !imageMsg->getSubject().expired() );
-        ::fwData::Image::sptr image = ::fwData::Image::dynamicCast(imageMsg->getSubject().lock());
-
-        if ( imageMsg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            if (! ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image)
-                || m_registeredImages.find(image->getID()) == m_registeredImages.end())
-            {
-                this->doUpdate();
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ImagesBlend::configuring() throw(fwTools::Failed)
+void ImagesBlend::doConfigure() throw(fwTools::Failed)
 {
     assert(m_configuration->getName() == "config");
 
@@ -148,9 +102,9 @@ void ImagesBlend::configuring() throw(fwTools::Failed)
 
     std::vector< ::fwRuntime::ConfigurationElement::sptr > configs = m_configuration->find("image");
     SLM_ASSERT("Missing tag 'image' ", !configs.empty());
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr element, configs)
+    for(::fwRuntime::ConfigurationElement::sptr element :  configs)
     {
-        SPTR(ImageInfo) info = ::boost::shared_ptr< ImageInfo >(new ImageInfo());
+        SPTR(ImageInfo) info = std::shared_ptr< ImageInfo >(new ImageInfo());
         SLM_ASSERT("Missing attribute 'objectId'", element->hasAttribute("objectId"));
         std::string objectId = element->getAttributeValue("objectId");
 
@@ -189,46 +143,57 @@ bool ImagesBlend::checkImageInformations()
 
     bool haveSameInfo = true;
 
-    BOOST_FOREACH(std::string id, m_imageIds)
+    for(std::string id :  m_imageIds)
     {
-        if (composite->find(id) != composite->end())
+        ::fwData::Image::csptr img;
+        if (!this->isVersion2() && composite->find(id) != composite->end())
         {
-            ::fwData::Image::sptr img = ::fwData::Image::dynamicCast((*composite)[id]);
-
-            bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
-            if (imageIsValid)
+            img = ::fwData::Image::dynamicCast((*composite)[id]);
+        }
+        else
+        {
+            img = this->getSafeInput< ::fwData::Image >(id);
+        }
+        if (img && ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( img ))
+        {
+            if (size.empty() && spacing.empty() && origin.empty())
             {
-                if (size.empty() && spacing.empty() && origin.empty())
-                {
-                    size = img->getSize();
-                    spacing = img->getSpacing();
-                    origin = img->getOrigin();
-                }
-                else
+                size    = img->getSize();
+                spacing = img->getSpacing();
+                origin  = img->getOrigin();
+            }
+            else
+            {
+                if (  size != img->getSize() ||
+                      !::fwMath::isContainerEqual< const ::fwData::Image::SpacingType >(spacing,
+                                                                                        img->getSpacing()) ||
+                      !::fwMath::isContainerEqual< const ::fwData::Image::OriginType >(origin,
+                                                                                       img->getOrigin()) )
                 {
-                    if (  size != img->getSize() ||
-                          !::fwMath::isContainerEqual< const ::fwData::Image::SpacingType >(spacing, img->getSpacing()) ||
-                          !::fwMath::isContainerEqual< const ::fwData::Image::OriginType >(origin, img->getOrigin()) )
-                    {
-                        OSLM_ERROR("imgA size : " << size[0] << " / " << size[1] << " / "<< size[2] );
-                        OSLM_ERROR("imgA spacing : " << spacing[0] << " / " << spacing[1] << " / "<< spacing[2] );
-                        OSLM_ERROR("imgA origin : " << origin[0] << " / " << origin[1] << " / "<< origin[2] );
-
-                        OSLM_ERROR("imgB size : " << img->getSize()[0] << " / " << img->getSize()[1] << " / "<< img->getSize()[2] );
-                        OSLM_ERROR("imgB spacing : " << img->getSpacing()[0] << " / " << img->getSpacing()[1] << " / "<< img->getSpacing()[2] );
-                        OSLM_ERROR("imgB origin : " << img->getOrigin()[0] << " / " << img->getOrigin()[1] << " / "<< img->getOrigin()[2] );
-
-                        haveSameInfo = false;
-                        std::string errorMsg = "Warning : images in blend have not the same";
-                        errorMsg += (size != img->getSize())?" size":"";
-                        errorMsg += (spacing != img->getSpacing())?" spacing":"";
-                        errorMsg += (origin != img->getOrigin())?" origin":"";
-                        errorMsg += ".\n Background image size, spacing and origin are use.";
-                        ::fwGui::dialog::MessageDialog::showMessageDialog("Images blending",
-                                errorMsg,
-                                ::fwGui::dialog::MessageDialog::WARNING);
-                        break;
-                    }
+                    OSLM_ERROR("imgA size : " << size[0] << " / " << size[1] << " / "<< size[2] );
+                    OSLM_ERROR("imgA spacing : " << spacing[0] << " / " << spacing[1] << " / "<< spacing[2] );
+                    OSLM_ERROR("imgA origin : " << origin[0] << " / " << origin[1] << " / "<< origin[2] );
+
+                    OSLM_ERROR(
+                        "imgB size : " << img->getSize()[0] << " / " << img->getSize()[1] << " / "<<
+                        img->getSize()[2] );
+                    OSLM_ERROR(
+                        "imgB spacing : " << img->getSpacing()[0] << " / " << img->getSpacing()[1] << " / "<<
+                        img->getSpacing()[2] );
+                    OSLM_ERROR(
+                        "imgB origin : " << img->getOrigin()[0] << " / " << img->getOrigin()[1] << " / "<<
+                        img->getOrigin()[2] );
+
+                    haveSameInfo = false;
+                    std::string errorMsg = "Warning : images in blend have not the same";
+                    errorMsg += (size != img->getSize()) ? " size" : "";
+                    errorMsg += (spacing != img->getSpacing()) ? " spacing" : "";
+                    errorMsg += (origin != img->getOrigin()) ? " origin" : "";
+                    errorMsg += ".\n Background image size, spacing and origin are use.";
+                    ::fwGui::dialog::MessageDialog::showMessageDialog("Images blending",
+                                                                      errorMsg,
+                                                                      ::fwGui::dialog::IMessageDialog::WARNING);
+                    break;
                 }
             }
         }
@@ -245,30 +210,36 @@ void ImagesBlend::addImageAdaptors()
 
     this->checkImageInformations();
 
-    BOOST_FOREACH(std::string id, m_imageIds)
+    for(std::string id :  m_imageIds)
     {
-        if (composite->find(id) != composite->end())
+        ::fwData::Image::csptr img;
+        if (!this->isVersion2() && composite->find(id) != composite->end())
         {
-            ::fwData::Image::sptr img = ::fwData::Image::dynamicCast((*composite)[id]);
+            img = ::fwData::Image::dynamicCast((*composite)[id]);
+        }
+        else
+        {
+            img = this->getSafeInput< ::fwData::Image >(id);
 
+        }
+        if (img)
+        {
             SPTR(ImageInfo) info = m_imagesInfo[id];
 
-            SLM_ASSERT("Sorry, '" << id << "' is not an image", img);
+            SLM_ASSERT("No image with the id '" << id << "' found", img);
 
-            if (info->m_connections)
-            {
-                info->m_connections->disconnect();
-                info->m_connections.reset();
-            }
+            info->m_connections.disconnect();
 
-            info->m_connections = ::fwServices::helper::SigSlotConnection::New();
-            info->m_connections->connect(img, this->getSptr(), this->getObjSrvConnections());
+            info->m_connections.connect(img, ::fwData::Image::s_MODIFIED_SIG, this->getSptr(), s_UPDATE_SLOT);
+            info->m_connections.connect(img, ::fwData::Image::s_BUFFER_MODIFIED_SIG, this->getSptr(),
+                                        s_UPDATE_SLOT);
 
-            bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
+            bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
             if (imageIsValid)
             {
                 ::fwRenderVTK::IVtkAdaptorService::sptr imageAdaptor;
-                imageAdaptor = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( img, "::visuVTKAdaptor::Image");
+                imageAdaptor = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( img,
+                                                                                       "::visuVTKAdaptor::Image");
                 imageAdaptor->setRenderService(this->getRenderService());
                 imageAdaptor->setRenderId( this->getRenderId() );
                 imageAdaptor->setPickerId( this->getPickerId() );
@@ -299,17 +270,24 @@ void ImagesBlend::removeImageAdaptors()
     BOOST_REVERSE_FOREACH(std::string id, m_imageIds)
     {
         SPTR(ImageInfo) info = m_imagesInfo[id];
-
-        if ( info->m_connections)
-        {
-            info->m_connections->disconnect();
-            info->m_connections.reset();
-        }
+        info->m_connections.disconnect();
     }
     this->unregisterServices();
 }
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType ImagesBlend::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesProbeCursor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesProbeCursor.cpp
index 2f01066..34920a9 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesProbeCursor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ImagesProbeCursor.cpp
@@ -1,47 +1,43 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/format.hpp>
+#include "visuVTKAdaptor/ImagesProbeCursor.hpp"
+
+#include "visuVTKAdaptor/ImageText.hpp"
 
 #include <fwData/Composite.hpp>
-#include <fwData/Integer.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/Base.hpp>
+#include <fwRenderVTK/vtk/Helpers.hpp>
+
+#include <fwServices/macros.hpp>
 
-#include <vtkRenderWindowInteractor.h>
 #include <vtkAbstractPropPicker.h>
-#include <vtkInteractorStyleImage.h>
+#include <vtkActor.h>
+#include <vtkCellArray.h>
+#include <vtkCellData.h>
 #include <vtkCommand.h>
-
+#include <vtkInteractorStyleImage.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkProperty.h>
+#include <vtkRenderWindowInteractor.h>
 #include <vtkTextActor.h>
 #include <vtkTextMapper.h>
 #include <vtkTextProperty.h>
-#include <vtkProperty.h>
-
-#include <vtkActor.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPolyData.h>
-#include <vtkCellArray.h>
-#include <vtkCellData.h>
 #include <vtkTransform.h>
 
+#include <boost/format.hpp>
 
-#include <fwRenderVTK/vtk/Helpers.hpp>
-
-#include "visuVTKAdaptor/ImageText.hpp"
-#include "visuVTKAdaptor/ImagesProbeCursor.hpp"
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImagesProbeCursor, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ImagesProbeCursor, ::fwData::Composite );
 
 
 #define START_PROBE_EVENT vtkCommand::LeftButtonPressEvent
@@ -56,23 +52,24 @@ namespace visuVTKAdaptor
 class ImagesProbingCallback : public vtkCommand
 {
 public:
-    static ImagesProbingCallback *New()
-    { return new ImagesProbingCallback(); }
+    static ImagesProbingCallback* New()
+    {
+        return new ImagesProbingCallback();
+    }
 
-    ImagesProbingCallback()
-        : m_priority(-1),
-          m_mouseMoveObserved(false)
+    ImagesProbingCallback() :
+        m_priority(-1),
+        m_mouseMoveObserved(false)
     {
         m_picker = NULL;
         this->PassiveObserverOff();
     }
 
-    ~ImagesProbingCallback()
+    virtual ~ImagesProbingCallback()
     {
-
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         assert(m_priority>=0);
         SLM_ASSERT("m_adaptor not instanced", m_adaptor);
@@ -117,7 +114,7 @@ public:
         display[1] = y;
         display[2] = 0;
 
-        return  m_picker->Pick( display , m_adaptor->getRenderer() );
+        return m_picker->Pick( display, m_adaptor->getRenderer() );
     }
 
 
@@ -138,7 +135,7 @@ public:
         m_adaptor = adaptor;
     }
 
-    void setPicker( vtkAbstractPropPicker *adaptor)
+    void setPicker( vtkAbstractPropPicker* adaptor)
     {
         m_picker = adaptor;
     }
@@ -148,10 +145,10 @@ public:
         m_priority = priority;
     }
 
-protected :
+protected:
     ImagesProbeCursor::sptr m_adaptor;
-    vtkAbstractPropPicker *m_picker;
-    float    m_priority;
+    vtkAbstractPropPicker* m_picker;
+    float m_priority;
 
     bool m_mouseMoveObserved;
 
@@ -159,15 +156,15 @@ protected :
 
 //------------------------------------------------------------------------------
 
-ImagesProbeCursor::ImagesProbeCursor() throw()
-: m_priority(.6)
-, m_textActor(vtkActor2D::New())
-, m_textMapper(vtkTextMapper::New())
-, m_cursorPolyData( vtkPolyData::New() )
-, m_cursorMapper  ( vtkPolyDataMapper::New() )
-, m_cursorActor(    vtkActor::New() )
+ImagesProbeCursor::ImagesProbeCursor() throw() :
+    m_priority(.6),
+    m_vtkObserver(nullptr),
+    m_textActor(vtkActor2D::New()),
+    m_textMapper(vtkTextMapper::New()),
+    m_cursorPolyData( vtkPolyData::New() ),
+    m_cursorMapper  ( vtkPolyDataMapper::New() ),
+    m_cursorActor(    vtkActor::New() )
 {
-    //handlingEventOff();
 }
 
 //------------------------------------------------------------------------------
@@ -178,13 +175,14 @@ ImagesProbeCursor::~ImagesProbeCursor() throw()
     m_textActor->Delete();
 
     m_cursorActor->Delete();
-    m_cursorActor = NULL;
+    m_cursorActor = nullptr;
     m_cursorMapper->Delete();
-    m_cursorMapper = NULL;
+    m_cursorMapper = nullptr;
     m_cursorPolyData->Delete();
 }
 
 //------------------------------------------------------------------------------
+
 void ImagesProbeCursor::setVisibility( bool visibility )
 {
     m_textActor->SetVisibility(visibility);
@@ -195,25 +193,19 @@ void ImagesProbeCursor::setVisibility( bool visibility )
 
 //------------------------------------------------------------------------------
 
-void ImagesProbeCursor::configuring() throw(fwTools::Failed)
+void ImagesProbeCursor::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
     assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
 
     std::vector< ::fwRuntime::ConfigurationElement::sptr > configs = m_configuration->find("image");
     SLM_ASSERT("Missing tag 'image' ", !configs.empty());
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr element, configs)
+    for(::fwRuntime::ConfigurationElement::sptr element :  configs)
     {
         SLM_ASSERT("Missing attribute 'objectId'", element->hasAttribute("objectId"));
         std::string objectId = element->getAttributeValue("objectId");
-        std::string name = objectId;
+        std::string name     = objectId;
         if (element->hasAttribute("name"))
         {
             name = element->getAttributeValue("name");
@@ -253,7 +245,7 @@ void ImagesProbeCursor::doStart() throw(fwTools::Failed)
     this->addToRenderer(m_textActor );
 
     buildPolyData();
-    m_cursorMapper->SetInput( m_cursorPolyData );
+    m_cursorMapper->SetInputData( m_cursorPolyData );
     m_cursorActor->SetMapper(m_cursorMapper);
     m_cursorActor->GetProperty()->SetColor(1,0,0);
     if(!this->getTransformId().empty())
@@ -262,7 +254,7 @@ void ImagesProbeCursor::doStart() throw(fwTools::Failed)
     }
     this->addToRenderer(m_cursorActor);
 
-    ImagesProbingCallback *observer = ImagesProbingCallback::New();
+    ImagesProbingCallback* observer = ImagesProbingCallback::New();
     observer->setAdaptor( ImagesProbeCursor::dynamicCast(this->getSptr()) );
     observer->setPicker(this->getPicker());
     observer->setPriority(  m_priority );
@@ -300,11 +292,6 @@ void ImagesProbeCursor::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ImagesProbeCursor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void ImagesProbeCursor::StartImagesProbeCursor( )
 {
 }
@@ -321,7 +308,7 @@ void ImagesProbeCursor::updateView( double world[3] )
         ::fwData::Image::sptr image = ::fwData::Image::dynamicCast((*composite)[m_imagesId.begin()->first]);
         OSLM_ASSERT("Object '" << m_imagesId.begin()->first << "' must be an image", image);
 
-        if(::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+        if(::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
         {
             this->updateImageInfos(image);
 
@@ -336,13 +323,13 @@ void ImagesProbeCursor::updateView( double world[3] )
                     index[0]>= image->getSize()[0] ||
                     index[1]>= image->getSize()[1] ||
                     index[2]>= image->getSize()[2]
-            )
+                    )
             {
                 txt << "(---,---,---)" << std::endl;
             }
             else
             {
-                ::fwComEd::helper::Image imageHelper(image);
+                ::fwDataTools::helper::Image imageHelper(image);
                 txt << (::boost::format("(% 4li,% 4li,% 4li)") % index[0] % index[1] % index[2] ).str() << std::endl;
 
                 // update polyData
@@ -350,7 +337,7 @@ void ImagesProbeCursor::updateView( double world[3] )
                 this->computeCrossExtremity( index, worldCross);
 
                 vtkPoints* points = m_cursorPolyData->GetPoints();
-                for ( int i=0; i < 4; ++i)
+                for ( int i = 0; i < 4; ++i)
                 {
                     OSLM_TRACE("p=" << worldCross[i][0] << "," << worldCross[i][2] << "," << worldCross[i][2] << "," );
                     points->SetPoint(i,worldCross[i]);
@@ -360,16 +347,16 @@ void ImagesProbeCursor::updateView( double world[3] )
         }
     }
 
-    BOOST_FOREACH(ImagesIdPair element, m_imagesId)
+    for(ImagesIdPair element :  m_imagesId)
     {
         if (composite->find(element.first) != composite->end())
         {
             ::fwData::Image::sptr image = ::fwData::Image::dynamicCast((*composite)[element.first]);
             OSLM_ASSERT("Object '" << element.first << "' must be an image", image);
 
-            if(::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+            if(::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
             {
-                ::fwComEd::helper::Image imageHelper(image);
+                ::fwDataTools::helper::Image imageHelper(image);
                 this->updateImageInfos(image);
 
                 int index[3];
@@ -383,7 +370,7 @@ void ImagesProbeCursor::updateView( double world[3] )
                         index[0]>= image->getSize()[0] ||
                         index[1]>= image->getSize()[1] ||
                         index[2]>= image->getSize()[2])
-                )
+                     )
                 {
                     std::string greyLevel = imageHelper.getPixelAsString(index[0], index[1], index[2] );
                     txt << element.second << " : " << greyLevel << std::endl;
@@ -399,7 +386,7 @@ void ImagesProbeCursor::updateView( double world[3] )
 
 //------------------------------------------------------------------------------
 
-void ImagesProbeCursor::computeCrossExtremity( const int probeSlice[3] , double worldCross[4][3] )
+void ImagesProbeCursor::computeCrossExtremity( const int probeSlice[3], double worldCross[4][3] )
 {
     ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
     if (composite->find(m_imagesId.begin()->first) != composite->end())
@@ -414,28 +401,28 @@ void ImagesProbeCursor::computeCrossExtremity( const int probeSlice[3] , double
         sliceIndex[0] = m_sagittalIndex->value();
 
         double probeWorld[3]; // probe index in world positioning system
-        for (int dim=0; dim<3; ++dim )
+        for (int dim = 0; dim<3; ++dim )
         {
             if ( probeSlice[dim]==sliceIndex[dim] ) // FIXME if (sliceIndex==probeWorld)
             {
                 //setOrientation( (dim==2?2:(dim+1)%2) ); // KEEP Z but swap X,Y
                 this->setOrientation(dim);
             }
-            probeWorld[dim] = probeSlice[dim]*image->getSpacing()[dim] + image->getOrigin().at(dim);;
+            probeWorld[dim] = probeSlice[dim]*image->getSpacing()[dim] + image->getOrigin().at(dim);
         }
 
-        for ( int p=0; p<2; ++p )
+        for ( int p = 0; p<2; ++p )
         {
-            for (int dim=0; dim<3; ++dim )
+            for (int dim = 0; dim<3; ++dim )
             {
-                worldCross[p][dim] = probeWorld[dim];
+                worldCross[p][dim]   = probeWorld[dim];
                 worldCross[p+2][dim] = probeWorld[dim];
                 if ( (dim + p + 1)%3 == m_orientation )
                 {
-                    worldCross[p][dim] = image->getOrigin().at(dim);
+                    worldCross[p][dim]              = image->getOrigin().at(dim);
                     ::fwData::Image::IndexType size = image->getSize().at(dim)-1;
                     double spacing = image->getSpacing().at(dim);
-                    worldCross[p+2][dim] =  size * spacing + image->getOrigin().at(dim);
+                    worldCross[p+2][dim] = size * spacing + image->getOrigin().at(dim);
                 }
             }
         }
@@ -447,22 +434,22 @@ void ImagesProbeCursor::computeCrossExtremity( const int probeSlice[3] , double
 void ImagesProbeCursor::buildPolyData()
 {
     // point are stored Left,right,up,down
-    int nbPoints = 4;
-    vtkPoints* points   = vtkPoints::New(VTK_DOUBLE);
+    int nbPoints      = 4;
+    vtkPoints* points = vtkPoints::New(VTK_DOUBLE);
     points->SetNumberOfPoints(nbPoints);
     int i;
     for (i = 0; i < nbPoints; i++)
     {
-        points->SetPoint(i, 0.0, 0.0 , 0.0);
+        points->SetPoint(i, 0.0, 0.0, 0.0);
     }
 
-    vtkCellArray *cells = vtkCellArray::New();
+    vtkCellArray* cells = vtkCellArray::New();
     cells->Allocate(cells->EstimateSize(nbPoints,2));
 
     vtkIdType pts[2];
-    pts[0]=0;pts[1]=2;
+    pts[0] = 0; pts[1] = 2;
     cells->InsertNextCell(2,pts);
-    pts[0]=1;pts[1]=3;
+    pts[0] = 1; pts[1] = 3;
     cells->InsertNextCell(2,pts);
 
     m_cursorPolyData->SetPoints(points);
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp
index 8a7b9a4..a782d6b 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/InteractorStyle.cpp
@@ -1,35 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/InteractorStyle.hpp"
 
 #include <fwData/Object.hpp>
 
+#include <fwRenderVTK/IInteractorStyle.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
 
-#include <vtkRenderWindowInteractor.h>
 #include <vtkInstantiator.h>
 #include <vtkInteractorStyleImage.h>
+#include <vtkRenderWindowInteractor.h>
 
-#include "visuVTKAdaptor/InteractorStyle.hpp"
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::InteractorStyle, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::InteractorStyle, ::fwData::Object );
 
 namespace visuVTKAdaptor
 {
 
 //------------------------------------------------------------------------------
 
-InteractorStyle::InteractorStyle() throw()
+InteractorStyle::InteractorStyle() throw() : m_interactorStyle(nullptr)
 {
-    m_interactorStyle = NULL;
-    //handlingEventOff();
 }
 
 //------------------------------------------------------------------------------
@@ -41,13 +36,12 @@ InteractorStyle::~InteractorStyle() throw()
 
 //------------------------------------------------------------------------------
 
-void InteractorStyle::configuring() throw(fwTools::Failed)
+void InteractorStyle::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    assert(m_configuration->getName() == "config");
-    assert(m_configuration->hasAttribute("style"));
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
+    SLM_ASSERT("Missing attribute 'style'", m_configuration->hasAttribute("style"));
     m_configuredStyle = m_configuration->getAttributeValue("style");
 }
 
@@ -55,14 +49,15 @@ void InteractorStyle::configuring() throw(fwTools::Failed)
 
 void InteractorStyle::doStart() throw(fwTools::Failed)
 {
-    vtkObject* objectStyle = vtkInstantiator::CreateInstance(m_configuredStyle.c_str());
+    vtkObject* objectStyle         = vtkInstantiator::CreateInstance(m_configuredStyle.c_str());
     vtkInteractorStyle *interactor = vtkInteractorStyle::SafeDownCast(objectStyle);
     OSLM_ASSERT(
-            "InsteractorStyle adaptor is waiting "
-            "for a vtkInteractorStyle object, but '"
-            << m_configuredStyle <<
-            "' has been given.", interactor);
+        "InsteractorStyle adaptor is waiting "
+        "for a vtkInteractorStyle object, but '"
+        << m_configuredStyle <<
+        "' has been given.", interactor);
     this->setInteractorStyle(interactor);
+
 }
 
 //------------------------------------------------------------------------------
@@ -82,25 +77,29 @@ void InteractorStyle::doSwap() throw(fwTools::Failed)
 
 void InteractorStyle::doStop() throw(fwTools::Failed)
 {
-    this->setInteractorStyle(NULL);
+    this->setInteractorStyle(nullptr);
 }
 
 //------------------------------------------------------------------------------
 
-void InteractorStyle::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void InteractorStyle::setInteractorStyle(vtkInteractorStyle *interactor)
 {
-    if ( m_interactorStyle != NULL ){
+    if ( m_interactorStyle != nullptr )
+    {
         m_interactorStyle->Delete();
-        m_interactorStyle = NULL;
+        m_interactorStyle = nullptr;
+    }
+
+    ::fwRenderVTK::IInteractorStyle* fwInteractor = dynamic_cast< ::fwRenderVTK::IInteractorStyle* >(interactor);
+    if(fwInteractor)
+    {
+        fwInteractor->setAutoRender(this->getAutoRender());
     }
 
     m_interactorStyle = interactor;
-    this->getInteractor()->SetInteractorStyle(NULL);
+
+
+    this->getInteractor()->SetInteractorStyle(nullptr);
     this->getInteractor()->SetInteractorStyle(m_interactorStyle);
     this->setVtkPipelineModified();
 }
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/LabeledPointList.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/LabeledPointList.cpp
index 036e0e5..d7cda4e 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/LabeledPointList.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/LabeledPointList.cpp
@@ -1,77 +1,63 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
+#include "visuVTKAdaptor/LabeledPointList.hpp"
+
+#include "visuVTKAdaptor/PointLabel.hpp"
+#include "visuVTKAdaptor/PointList.hpp"
 
-#include <boost/foreach.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwData/PointList.hpp>
 #include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/PointListMsg.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
 
 #include <vtkActor.h>
 #include <vtkAssemblyNode.h>
 #include <vtkAssemblyPath.h>
+#include <vtkCellPicker.h>
 #include <vtkCommand.h>
 #include <vtkCubeSource.h>
-#include <vtkCellPicker.h>
 #include <vtkPolyDataMapper.h>
-#include <vtkRenderer.h>
 #include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
 
-#include "visuVTKAdaptor/LabeledPointList.hpp"
-#include "visuVTKAdaptor/PointList.hpp"
-#include "visuVTKAdaptor/PointLabel.hpp"
-
-
+#include <algorithm>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::LabeledPointList, ::fwData::PointList ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::LabeledPointList, ::fwData::PointList );
 
 namespace visuVTKAdaptor
 {
 
 //------------------------------------------------------------------------------
 
-void notifyRemoveLandMark( ::fwData::Point::sptr point )
-{
-    ::fwComEd::PointListMsg::sptr msgPointList = ::fwComEd::PointListMsg::New();
-    msgPointList->addEvent( ::fwComEd::PointListMsg::ELEMENT_REMOVED, point );
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = point->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-    fwServicesNotifyMsgMacro( point->getLightID(), sig, msgPointList );
-}
-
-//------------------------------------------------------------------------------
-
 class vtkLabeledPointDeleteCallBack : public vtkCommand
 {
 
-public :
-    static vtkLabeledPointDeleteCallBack *New( ::fwRenderVTK::IVtkAdaptorService *service)
-    { return new vtkLabeledPointDeleteCallBack(service); }
+public:
+    static vtkLabeledPointDeleteCallBack* New( ::fwRenderVTK::IVtkAdaptorService* service)
+    {
+        return new vtkLabeledPointDeleteCallBack(service);
+    }
 
-    vtkLabeledPointDeleteCallBack( ::fwRenderVTK::IVtkAdaptorService *service )
-    : m_service(service),
-      m_picker( vtkCellPicker::New() ),
-      m_propCollection( vtkPropCollection::New() )
+    vtkLabeledPointDeleteCallBack( ::fwRenderVTK::IVtkAdaptorService* service )
+        : m_service(service),
+          m_picker( vtkCellPicker::New() ),
+          m_propCollection( vtkPropCollection::New() )
     {
         m_lastPos[0] = -1;
         m_lastPos[1] = -1;
         m_picker->PickFromListOn();
         m_picker->SetTolerance(0.001);
 
-        m_display[2]=0.0;
+        m_display[2] = 0.0;
     }
 
     ~vtkLabeledPointDeleteCallBack( )
@@ -91,7 +77,7 @@ public :
         m_service->getAllSubProps(m_propCollection);
         m_propCollection->InitTraversal();
 
-        vtkProp *prop;
+        vtkProp* prop;
 
         while ( (prop = m_propCollection->GetNextProp()) )
         {
@@ -99,7 +85,7 @@ public :
         }
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         int pos[2];
         m_service->getInteractor()->GetLastEventPosition(pos);
@@ -112,7 +98,7 @@ public :
             m_display[1] = pos[1];
 
             this->fillPickList();
-            if (m_picker->Pick( m_display , m_service->getRenderer() ) )
+            if (m_picker->Pick( m_display, m_service->getRenderer() ) )
             {
                 if(getSelectedPoint())
                 {
@@ -125,32 +111,39 @@ public :
                 }
             }
         }
-        else if ( (eventId == vtkCommand::RightButtonReleaseEvent ) && !m_pickedPoint.expired() && !m_pickedPointList.expired() && std::equal(pos, pos+1, m_lastPos) )
+        else if ( (eventId == vtkCommand::RightButtonReleaseEvent ) && !m_pickedPoint.expired() &&
+                  !m_pickedPointList.expired() && std::equal(pos, pos+1, m_lastPos) )
         {
-            ::fwData::PointList::PointListContainer::iterator itr = std::find( m_pickedPointList.lock()->getRefPoints().begin(), m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock() );
+            ::fwData::PointList::PointListContainer::iterator itr = std::find(
+                m_pickedPointList.lock()->getRefPoints().begin(),
+                m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock() );
             if(itr != m_pickedPointList.lock()->getRefPoints().end())
             {
                 ::fwData::Point::sptr point = *itr;
                 m_pickedPointList.lock()->getRefPoints().erase(itr);
-                notifyRemoveLandMark( point );
+                auto sig = m_pickedPointList.lock()->signal< ::fwData::PointList::PointRemovedSignalType >(
+                    ::fwData::PointList::s_POINT_REMOVED_SIG );
+                sig->asyncEmit(point);
             }
         }
     }
     bool getSelectedPoint()
     {
-        bool isFind = false;
-        vtkPropCollection *propc = m_picker->GetActors();
-        vtkProp *prop;
+        bool isFind              = false;
+        vtkPropCollection* propc = m_picker->GetActors();
+        vtkProp* prop;
 
         propc->InitTraversal();
         while ( (prop = propc->GetNextProp()) )
         {
-            m_pickedPoint = ::fwData::Point::dynamicCast(m_service->getAssociatedObject(prop,2));
+            m_pickedPoint     = ::fwData::Point::dynamicCast(m_service->getAssociatedObject(prop,2));
             m_pickedPointList = ::fwData::PointList::dynamicCast(m_service->getAssociatedObject(prop,1));
 
             if( !m_pickedPoint.expired() && !m_pickedPointList.expired() )
             {
-                ::fwData::PointList::PointListContainer::iterator itr = std::find( m_pickedPointList.lock()->getRefPoints().begin(), m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock());
+                ::fwData::PointList::PointListContainer::iterator itr = std::find(
+                    m_pickedPointList.lock()->getRefPoints().begin(),
+                    m_pickedPointList.lock()->getRefPoints().end(), m_pickedPoint.lock());
                 if(itr != m_pickedPointList.lock()->getRefPoints().end() )
                 {
                     isFind = true;
@@ -161,10 +154,10 @@ public :
         return isFind;
     }
 
-protected :
+protected:
     ::fwRenderVTK::IVtkAdaptorService *m_service;
-    vtkPicker * m_picker;
-    vtkPropCollection * m_propCollection;
+    vtkPicker* m_picker;
+    vtkPropCollection* m_propCollection;
     double m_display[3];
     int m_lastPos[2];
     ::fwData::Point::wptr m_pickedPoint;
@@ -174,29 +167,21 @@ protected :
 
 //------------------------------------------------------------------------------
 
-LabeledPointList::LabeledPointList() throw():
-    m_rightButtonCommand(0),
-    m_needSubservicesDeletion(false)
+LabeledPointList::LabeledPointList() throw() :
+    m_rightButtonCommand(nullptr)
 {
-    //addNewHandledEvent( ::fwComEd::PointListMsg::ELEMENT_ADDED );
-    //addNewHandledEvent( ::fwComEd::PointListMsg::ELEMENT_MODIFIED );
-    //addNewHandledEvent( ::fwComEd::PointListMsg::ELEMENT_REMOVED );
 }
 
 //------------------------------------------------------------------------------
 
 LabeledPointList::~LabeledPointList() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void LabeledPointList::configuring() throw(fwTools::Failed)
+void LabeledPointList::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -206,8 +191,8 @@ void LabeledPointList::doStart() throw(fwTools::Failed)
     SLM_TRACE_FUNC();
 
     m_rightButtonCommand = vtkLabeledPointDeleteCallBack::New(this);
-    this->getInteractor()->AddObserver( "RightButtonPressEvent" , m_rightButtonCommand, 1 );
-    this->getInteractor()->AddObserver( "RightButtonReleaseEvent" , m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonPressEvent", m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonReleaseEvent", m_rightButtonCommand, 1 );
 
     this->doUpdate();
 }
@@ -228,16 +213,13 @@ void LabeledPointList::doUpdate() throw(fwTools::Failed)
     // get PointList in image Field then install distance service if required
     ::fwData::PointList::sptr landmarks = this->getObject< ::fwData::PointList >();
 
-    if ( m_needSubservicesDeletion )
-    {
-        this->unregisterServices();
-        m_needSubservicesDeletion = false;
-    }
+    this->unregisterServices();
 
-    if ( ! landmarks->getPoints().empty() )
+    if ( !landmarks->getPoints().empty() )
     {
         ::fwRenderVTK::IVtkAdaptorService::sptr servicePointList;
-        servicePointList = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( landmarks , "::visuVTKAdaptor::PointList");
+        servicePointList = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( landmarks,
+                                                                                   "::visuVTKAdaptor::PointList");
         SLM_ASSERT("servicePointList not instanced", servicePointList);
 
         servicePointList->setPickerId( this->getPickerId() );
@@ -248,10 +230,11 @@ void LabeledPointList::doUpdate() throw(fwTools::Failed)
         this->registerService( servicePointList );
 
 
-        BOOST_FOREACH( ::fwData::Point::sptr point, landmarks->getRefPoints() )
+        for( ::fwData::Point::sptr point :  landmarks->getRefPoints() )
         {
             ::fwRenderVTK::IVtkAdaptorService::sptr serviceLabel;
-            serviceLabel = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(point , "::visuVTKAdaptor::PointLabel");
+            serviceLabel =
+                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(point, "::visuVTKAdaptor::PointLabel");
             SLM_ASSERT("serviceLabel not instanced", serviceLabel);
             serviceLabel->setRenderService( this->getRenderService() );
             serviceLabel->setAutoRender( this->getAutoRender() );
@@ -265,22 +248,6 @@ void LabeledPointList::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void LabeledPointList::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    // update only if new LandMarks
-    ::fwComEd::PointListMsg::csptr plMsg =  ::fwComEd::PointListMsg::dynamicConstCast( msg );
-    if ( plMsg &&
-                ( plMsg->hasEvent( ::fwComEd::PointListMsg::ELEMENT_ADDED ) ||
-                  plMsg->hasEvent( ::fwComEd::PointListMsg::ELEMENT_REMOVED )||
-                  plMsg->hasEvent( ::fwComEd::PointListMsg::ELEMENT_MODIFIED ) ) )
-    {
-        m_needSubservicesDeletion = true; // to manage point deletion
-        doUpdate();
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void LabeledPointList::doStop() throw(fwTools::Failed)
 {
     if ( m_rightButtonCommand ) // can be not instanciated (use of LabeledPointList::show() )
@@ -295,5 +262,17 @@ void LabeledPointList::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType LabeledPointList::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::PointList::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::PointList::s_POINT_ADDED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::PointList::s_POINT_REMOVED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Material.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Material.cpp
index 6bbdd78..51f2b44 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Material.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Material.cpp
@@ -1,26 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/Material.hpp"
 
-#include <fwTools/fwID.hpp>
 #include <fwData/Material.hpp>
+#include <fwData/mt/ObjectReadLock.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwComEd/MaterialMsg.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <fwVtkIO/vtk.hpp>
 
 #include <vtkRenderer.h>
 #include <vtkRenderWindowInteractor.h>
 #include <vtkProperty.h>
-
-#include "visuVTKAdaptor/Material.hpp"
+#include <vtkSmartPointer.h>
+#include <vtkImageData.h>
+#include <vtkTexture.h>
 
 
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Material, ::fwData::Material ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Material, ::fwData::Material );
 
 namespace visuVTKAdaptor
 {
@@ -28,18 +31,19 @@ namespace visuVTKAdaptor
 
 //------------------------------------------------------------------------------
 
-Material::Material() throw()
+Material::Material() throw() :
+    m_property(vtkProperty::New()),
+    m_manageProperty(true),
+    m_lighting(true)
 {
-    m_manageProperty = true;
-    m_property = vtkProperty::New();
-    //addNewHandledEvent( ::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED );
 }
 
 //------------------------------------------------------------------------------
 
 Material::~Material() throw()
 {
-    if (m_manageProperty){
+    if (m_manageProperty)
+    {
         m_property->Delete();
     }
     m_property = NULL;
@@ -49,7 +53,8 @@ Material::~Material() throw()
 
 void Material::setVtkProperty(vtkProperty *property)
 {
-    if (m_manageProperty){
+    if (m_manageProperty)
+    {
         m_property->Delete();
         m_property = NULL;
     }
@@ -57,31 +62,27 @@ void Material::setVtkProperty(vtkProperty *property)
     if (property)
     {
         m_manageProperty = false;
-        m_property = property;
+        m_property       = property;
     }
     else
     {
         m_manageProperty = true;
-        m_property = vtkProperty::New();
+        m_property       = vtkProperty::New();
     }
     this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
 
-vtkProperty *Material::getVtkProperty()
+vtkProperty *Material::getVtkProperty() const
 {
     return m_property;
 }
 
 //------------------------------------------------------------------------------
 
-void Material::configuring() throw(fwTools::Failed)
+void Material::doConfigure() throw(fwTools::Failed)
 {
-
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
 }
 
 //------------------------------------------------------------------------------
@@ -105,18 +106,7 @@ void Material::doUpdate() throw(fwTools::Failed)
 {
     ::fwData::Material::sptr material = this->getObject < ::fwData::Material >();
 
-    updateMaterial( material );
-}
-
-//------------------------------------------------------------------------------
-
-void Material::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::MaterialMsg::csptr materialMsg = ::fwComEd::MaterialMsg::dynamicConstCast(msg);
-    if( materialMsg && materialMsg->hasEvent(::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED) )
-    {
-        this->doUpdate();
-    }
+    this->updateMaterial( material );
 }
 
 //------------------------------------------------------------------------------
@@ -129,40 +119,63 @@ void Material::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Material::updateMaterial( ::fwData::Material::sptr material )
+void Material::updateMaterial( SPTR(::fwData::Material)material )
 {
+    //3DVSP-like rendering
+    m_property->SetLighting(material->getShadingMode() > 0);
 
-    ::fwData::Color::sptr color =  material->ambient();
-    m_property->SetColor( color->red(),
-            color->green(),
-            color->blue());
+    ::fwData::Color::sptr diffuse = material->diffuse();
+    m_property->SetDiffuseColor(diffuse->red(), diffuse->green(), diffuse->blue());
+
+    // Use alpha from the diffuse color
+    m_property->SetOpacity( diffuse->alpha() );
+
+    ::fwData::Color::sptr ambient = material->ambient();
+    m_property->SetAmbientColor(ambient->red(), ambient->green(), ambient->blue());
 
-    //3DVSP-like rendering
     m_property->SetSpecularColor(1.,1.,1.);
     m_property->SetSpecularPower(100.); //Shininess
-    m_property->SetAmbient(.05);
-    m_property->SetDiffuse(1.);
-    m_property->SetSpecular(1.);
 
-    m_property->SetOpacity( color->alpha() );
+    // set texture
+    ::fwData::Image::sptr diffTex = material->getDiffuseTexture();
+
+    if(diffTex != NULL)
+    {
+        ::fwData::mt::ObjectReadLock lock(diffTex);
+
+        if (diffTex->getSizeInBytes() != 0)
+        {
+            vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
+            ::fwVtkIO::toVTKImage( diffTex, vtkImage );
+
+            vtkSmartPointer<vtkTexture> vtkTex = vtkSmartPointer< vtkTexture >::New();
+            vtkTex->SetInputData(vtkImage);
+
+            ::fwData::Material::WrappingType wrapping = material->getDiffuseTextureWrapping();
+            vtkTex->SetRepeat( wrapping == ::fwData::Material::REPEAT );
+            vtkTex->SetEdgeClamp( wrapping == ::fwData::Material::CLAMP );
+            m_property->RemoveTexture("diffuse");
+            m_property->SetTexture("diffuse", vtkTex);
+        }
+    }
 
     switch(material->getRepresentationMode())
     {
-        case ::fwData::Material::MODE_SURFACE:
+        case ::fwData::Material::SURFACE:
             m_property->SetRepresentationToSurface();
             m_property->EdgeVisibilityOff();
             break;
 
-        case ::fwData::Material::MODE_EDGE:
+        case ::fwData::Material::EDGE:
             m_property->SetRepresentationToSurface();
             m_property->EdgeVisibilityOn();
             break;
 
-        case ::fwData::Material::MODE_WIREFRAME:
+        case ::fwData::Material::WIREFRAME:
             m_property->SetRepresentationToWireframe();
             break;
 
-        case ::fwData::Material::MODE_POINT:
+        case ::fwData::Material::POINT:
             m_property->SetRepresentationToPoints();
             break;
 
@@ -173,15 +186,17 @@ void Material::updateMaterial( ::fwData::Material::sptr material )
     switch(material->getShadingMode())
     {
         /// Sets ShadingMode
-        case ::fwData::Material::MODE_PHONG:
+        case ::fwData::Material::AMBIENT:
+            break;
+        case ::fwData::Material::PHONG:
             m_property->SetInterpolationToPhong();
             break;
 
-        case ::fwData::Material::MODE_GOURAUD:
+        case ::fwData::Material::GOURAUD:
             m_property->SetInterpolationToGouraud();
             break;
 
-        case ::fwData::Material::MODE_FLAT:
+        case ::fwData::Material::FLAT:
             m_property->SetInterpolationToFlat();
             break;
 
@@ -193,7 +208,16 @@ void Material::updateMaterial( ::fwData::Material::sptr material )
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Material::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Material::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
 
+    return connections;
+}
 
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp
index a9dbdb7..0778e96 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Medical3DCamera.cpp
@@ -1,46 +1,61 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
+#include "visuVTKAdaptor/Medical3DCamera.hpp"
+
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hxx>
 
+#include <fwData/Object.hpp>
 #include <fwData/String.hpp>
-#include <fwData/Image.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
 
 #include <vtkActor.h>
-#include <vtkRenderer.h>
 #include <vtkCamera.h>
-#include <vtkRenderWindowInteractor.h>
 #include <vtkInteractorStyleImage.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
 
-#include "visuVTKAdaptor/Medical3DCamera.hpp"
+#include <boost/assign/list_of.hpp>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Medical3DCamera, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Medical3DCamera, ::fwData::Object );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType SET_AXIAL_SLOT    = "setAxial";
+static const ::fwCom::Slots::SlotKeyType SET_SAGITTAL_SLOT = "setSagittal";
+static const ::fwCom::Slots::SlotKeyType SET_FRONTAL_SLOT  = "setFrontal";
 
-std::map< std::string, ::fwComEd::helper::MedicalImageAdaptor::Orientation >
-Medical3DCamera::m_orientationConversion
-        = ::boost::assign::map_list_of(std::string("axial"),Z_AXIS)
-                                      (std::string("frontal"),Y_AXIS)
-                                      (std::string("sagittal"),X_AXIS);
+std::map< std::string, ::fwDataTools::helper::MedicalImageAdaptor::Orientation >
+Medical3DCamera::m_orientationConversion = ::boost::assign::map_list_of
+                                               (std::string("axial"), Z_AXIS)
+                                               (std::string("frontal"), Y_AXIS)
+                                               (std::string("sagittal"), X_AXIS);
+
+//------------------------------------------------------------------------------
+
+Medical3DCamera::Medical3DCamera() throw() :
+    m_resetAtStart(false)
 
-Medical3DCamera::Medical3DCamera() throw()
 {
-    //addNewHandledEvent( "CAMERA_ORIENTATION" );
+    m_slotSetAxial    = ::fwCom::newSlot(&Medical3DCamera::setAxialView, this);
+    m_slotSetSagittal = ::fwCom::newSlot(&Medical3DCamera::setSagittalView, this);
+    m_slotSetFrontal  = ::fwCom::newSlot(&Medical3DCamera::setFrontalView, this);
+
+    ::fwCom::HasSlots::m_slots(SET_AXIAL_SLOT, m_slotSetAxial)
+        (SET_SAGITTAL_SLOT, m_slotSetSagittal)
+        (SET_FRONTAL_SLOT, m_slotSetFrontal);
+
+
+
+    this->setWorker(m_associatedWorker);
 }
 
 //------------------------------------------------------------------------------
@@ -51,18 +66,25 @@ Medical3DCamera::~Medical3DCamera() throw()
 
 //------------------------------------------------------------------------------
 
-void Medical3DCamera::configuring() throw(fwTools::Failed)
+void Medical3DCamera::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
     assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
     if(m_configuration->hasAttribute("sliceIndex"))
     {
-        std::string  orientation = m_configuration->getAttributeValue("sliceIndex");
+        std::string orientation = m_configuration->getAttributeValue("sliceIndex");
         SLM_ASSERT("Unknown orientation", m_orientationConversion.find(orientation) != m_orientationConversion.end());
         m_orientation = m_orientationConversion[orientation];
     }
+
+    if(m_configuration->hasAttribute("resetAtStart"))
+    {
+        std::string reset = m_configuration->getAttributeValue("resetAtStart");
+        SLM_ASSERT("'resetAtStart' value must be 'yes' or 'no'",
+                   reset == "yes" || reset == "no");
+        m_resetAtStart = (reset == "yes");
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -70,7 +92,11 @@ void Medical3DCamera::configuring() throw(fwTools::Failed)
 void Medical3DCamera::doStart() throw(fwTools::Failed)
 {
     m_camera = this->getRenderer()->GetActiveCamera();
-    this->doUpdate();
+
+    if(m_resetAtStart)
+    {
+        this->updateView();
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -97,21 +123,26 @@ void Medical3DCamera::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Medical3DCamera::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void Medical3DCamera::setSagittalView()
 {
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast( msg );
+    m_orientation = X_AXIS;
+    this->updating();
+}
 
-    if ( imageMsg && imageMsg->hasEvent( "CAMERA_ORIENTATION") )
-    {
-        ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo("CAMERA_ORIENTATION");
-        SLM_ASSERT("dataInfo is missing", dataInfo);
-        ::fwData::String::csptr orientation = ::fwData::String::dynamicConstCast(dataInfo);
-        SLM_ASSERT("dataInfo is missing", orientation);
-        SLM_ASSERT("Unknown orientation", m_orientationConversion.find(orientation->value()) != m_orientationConversion.end());
-        m_orientation = m_orientationConversion[orientation->value()];
-        this->doUpdate();
-    }
+//------------------------------------------------------------------------------
 
+void Medical3DCamera::setFrontalView()
+{
+    m_orientation = Y_AXIS;
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+void Medical3DCamera::setAxialView()
+{
+    m_orientation = Z_AXIS;
+    this->updating();
 }
 
 //------------------------------------------------------------------------------
@@ -164,10 +195,9 @@ void Medical3DCamera::resetAxialView()
     m_camera->SetViewUp(0,-1,0);
     this->getRenderer()->ResetCamera();
     this->setVtkPipelineModified();
-
 }
 
 //------------------------------------------------------------------------------
 
-
 } //namespace visuVTKAdaptor
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Mesh.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Mesh.cpp
index 2cb43d9..20df47e 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Mesh.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Mesh.cpp
@@ -1,29 +1,42 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/Material.hpp"
+#include "visuVTKAdaptor/Mesh.hpp"
+#include "visuVTKAdaptor/MeshNormals.hpp"
 
-#include <fwTools/fwID.hpp>
+#include "visuVTKAdaptor/Texture.hpp"
+#include "visuVTKAdaptor/Transform.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
+#include <fwData/mt/ObjectReadLock.hpp>
 
-#include <fwComEd/MaterialMsg.hpp>
-#include <fwComEd/MeshMsg.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
 
-#include <fwVtkIO/vtk.hpp>
 #include <fwVtkIO/helper/Mesh.hpp>
+#include <fwVtkIO/vtk.hpp>
 
 #include <vtkActor.h>
 #include <vtkCamera.h>
 #include <vtkCommand.h>
+
 #include <vtkDepthSortPolyData.h>
+#include <vtkTextureMapToCylinder.h>
+#include <vtkTextureMapToPlane.h>
+#include <vtkTextureMapToSphere.h>
+
 #include <vtkMath.h>
 #include <vtkMatrix4x4.h>
 #include <vtkPicker.h>
@@ -31,22 +44,36 @@
 #include <vtkPolyDataMapper.h>
 #include <vtkPolyDataNormals.h>
 #include <vtkProperty.h>
-#include <vtkRenderWindowInteractor.h>
 #include <vtkRenderer.h>
+#include <vtkRenderWindowInteractor.h>
 #include <vtkTransform.h>
 
-#include "visuVTKAdaptor/Material.hpp"
-#include "visuVTKAdaptor/MeshNormals.hpp"
 
-#include "visuVTKAdaptor/Transform.hpp"
-#include "visuVTKAdaptor/Mesh.hpp"
 
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Mesh, ::fwData::Mesh );
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Mesh, ::fwData::Mesh ) ;
+//-----------------------------------------------------------------------------
 
 namespace visuVTKAdaptor
 {
 
+//-----------------------------------------------------------------------------
+
+const ::fwCom::Signals::SignalKeyType Mesh::s_TEXTURE_APPLIED_SIG      = "textureApplied";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_VISIBILITY_SLOT       = "updateVisibility";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_POINT_COLORS_SLOT     = "updatepointColors";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_CELL_COLORS_SLOT      = "updateCellColors";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_VERTEX_SLOT           = "updateVertex";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_POINT_NORMALS_SLOT    = "updatePointNormals";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_CELL_NORMALS_SLOT     = "updateCellNormals";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_POINT_TEX_COORDS_SLOT = "updatePointTexCoords";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_CELL_TEX_COORDS_SLOT  = "updateCellTexCoords";
+const ::fwCom::Slots::SlotKeyType Mesh::s_SHOW_POINT_COLORS_SLOT       = "showPointColors";
+const ::fwCom::Slots::SlotKeyType Mesh::s_SHOW_CELL_COLORS_SLOT        = "showCellColors";
+const ::fwCom::Slots::SlotKeyType Mesh::s_HIDE_COLORS_SLOT             = "hideColors";
+const ::fwCom::Slots::SlotKeyType Mesh::s_UPDATE_COLOR_MODE_SLOT       = "updateColorMode";
+
+//-----------------------------------------------------------------------------
 
 class MeshVtkCommand : public vtkCommand
 {
@@ -54,21 +81,22 @@ public:
     virtual void Stop() = 0;
 };
 
-
 //------------------------------------------------------------------------------
 
 class PlaneShifterCallback : public MeshVtkCommand
 {
-    public:
+public:
 
-    static PlaneShifterCallback *New( vtkPlane *src,  vtkPlane *dst, double factor = 1.)
-    { return new PlaneShifterCallback( src, dst, factor ); }
+    static PlaneShifterCallback* New( vtkPlane* src,  vtkPlane* dst, double factor = 1.)
+    {
+        return new PlaneShifterCallback( src, dst, factor );
+    }
 
     //--------------------------------------------------------------------------
-    PlaneShifterCallback( vtkPlane *src,  vtkPlane *dst, double factor )
-    : m_planeSrc(src),
-      m_planeDst(dst),
-      m_factor(factor)
+    PlaneShifterCallback( vtkPlane* src,  vtkPlane* dst, double factor )
+        : m_planeSrc(src),
+          m_planeDst(dst),
+          m_factor(factor)
     {
         m_planeSrc->Register(this);
         m_planeDst->Register(this);
@@ -84,7 +112,7 @@ class PlaneShifterCallback : public MeshVtkCommand
     }
 
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void * )
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void* )
     {
         if (eventId == vtkCommand::ModifiedEvent)
         {
@@ -110,32 +138,33 @@ class PlaneShifterCallback : public MeshVtkCommand
 
     }
 
-    protected:
-        vtkPlane *m_planeSrc;
-        vtkPlane *m_planeDst;
-        double    m_factor;
+protected:
+    vtkPlane* m_planeSrc;
+    vtkPlane* m_planeDst;
+    double m_factor;
 };
 
 
 
 class PlaneCollectionShifterCallback : public MeshVtkCommand
 {
-    public:
+public:
 
-    static PlaneCollectionShifterCallback *New(
-            vtkPlaneCollection *src,
-            vtkPlaneCollection *dst,
-            double factor = 1. )
-    { return new PlaneCollectionShifterCallback( src, dst, factor ); }
+    static PlaneCollectionShifterCallback* New(
+        vtkPlaneCollection* src,
+        vtkPlaneCollection* dst,
+        double factor = 1. )
+    {
+        return new PlaneCollectionShifterCallback( src, dst, factor );
+    }
 
     //--------------------------------------------------------------------------
-    PlaneCollectionShifterCallback(
-            vtkPlaneCollection *src,
-            vtkPlaneCollection *dst,
-            double factor)
-    : m_planeCollectionSrc(src),
-      m_planeCollectionDst(dst),
-      m_factor(factor)
+    PlaneCollectionShifterCallback( vtkPlaneCollection* src,
+                                    vtkPlaneCollection* dst,
+                                    double factor) :
+        m_planeCollectionSrc(src),
+        m_planeCollectionDst(dst),
+        m_factor(factor)
     {
         m_planeCollectionSrc->Register(this);
         m_planeCollectionDst->Register(this);
@@ -156,27 +185,27 @@ class PlaneCollectionShifterCallback : public MeshVtkCommand
     {
         m_planeCollectionDst->RemoveAllItems();
 
-        BOOST_FOREACH( PlaneShifterCallback *psc, m_planeCallbacks )
+        for( PlaneShifterCallback* psc :  m_planeCallbacks )
         {
             psc->Stop();
             psc->Delete();
-            psc=0;
+            psc = 0;
         }
         m_planeCallbacks.clear();
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void * )
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void* )
     {
         if (eventId == vtkCommand::ModifiedEvent)
         {
             this->Clear();
 
-            vtkPlane *plane = NULL;
+            vtkPlane* plane = NULL;
             for (  m_planeCollectionSrc->InitTraversal();
-                  (plane=m_planeCollectionSrc->GetNextItem());
-                )
+                   (plane = m_planeCollectionSrc->GetNextItem());
+                   )
             {
-                vtkPlane *newPlane = vtkPlane::New();
+                vtkPlane* newPlane = vtkPlane::New();
                 m_planeCollectionDst->AddItem(newPlane);
                 m_planeCallbacks.push_back(PlaneShifterCallback::New(plane, newPlane, m_factor));
                 newPlane->Modified();
@@ -185,36 +214,35 @@ class PlaneCollectionShifterCallback : public MeshVtkCommand
         }
     }
 
-    protected:
-        vtkPlaneCollection *m_planeCollectionSrc;
-        vtkPlaneCollection *m_planeCollectionDst;
+protected:
+    vtkPlaneCollection* m_planeCollectionSrc;
+    vtkPlaneCollection* m_planeCollectionDst;
 
-        std::vector< PlaneShifterCallback* > m_planeCallbacks;
-        double    m_factor;
+    std::vector< PlaneShifterCallback* > m_planeCallbacks;
+    double m_factor;
 };
 
 
 
 class PlaneCollectionAdaptorStarter : public MeshVtkCommand
 {
-    public:
+public:
 
-    static PlaneCollectionAdaptorStarter *New(
-            ::visuVTKAdaptor::Mesh::sptr service,
-            vtkPlaneCollection *src,
-            double factor = 1. )
+    static PlaneCollectionAdaptorStarter* New(
+        ::visuVTKAdaptor::Mesh::sptr service,
+        vtkPlaneCollection* src,
+        double factor = 1. )
     {
         return new PlaneCollectionAdaptorStarter( service, src, factor );
     }
 
     //--------------------------------------------------------------------------
-    PlaneCollectionAdaptorStarter(
-            ::visuVTKAdaptor::Mesh::sptr service,
-            vtkPlaneCollection *src,
-            double factor)
-    : m_service(service),
-      m_planeCollectionSrc(src),
-      m_factor(factor)
+    PlaneCollectionAdaptorStarter( ::visuVTKAdaptor::Mesh::sptr service,
+                                   vtkPlaneCollection* src,
+                                   double factor) :
+        m_service(service),
+        m_planeCollectionSrc(src),
+        m_factor(factor)
     {
         m_planeCollectionSrc->Register(this);
         m_planeCollectionSrc->AddObserver(vtkCommand::ModifiedEvent, this);
@@ -230,7 +258,7 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
 
     void Clear()
     {
-        BOOST_FOREACH( ::visuVTKAdaptor::Mesh::wptr adaptor, m_meshServices )
+        for( ::visuVTKAdaptor::Mesh::wptr adaptor :  m_meshServices )
         {
             if (!adaptor.expired())
             {
@@ -240,15 +268,15 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
         }
         m_meshServices.clear();
 
-        BOOST_FOREACH( PlaneShifterCallback *psc, m_planeCallbacks )
+        for( PlaneShifterCallback* psc :  m_planeCallbacks )
         {
             psc->Stop();
             psc->Delete();
-            psc=0;
+            psc = 0;
         }
         m_planeCallbacks.clear();
 
-        BOOST_FOREACH( vtkPlaneCollection *planeCol, m_planeCollections )
+        for( vtkPlaneCollection* planeCol :  m_planeCollections )
         {
             planeCol->Delete();
         }
@@ -260,7 +288,7 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
         }
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void * data)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void* data)
     {
         ::visuVTKAdaptor::Mesh::sptr service;
 
@@ -268,7 +296,7 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
         {
             this->Stop();
             this->Delete();
-            return ;
+            return;
         }
 
         if (eventId == vtkCommand::ModifiedEvent)
@@ -277,22 +305,22 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
 
             this->Clear();
 
-            vtkPlane *plane = NULL;
+            vtkPlane* plane = NULL;
             for (  m_planeCollectionSrc->InitTraversal();
-                    (plane = m_planeCollectionSrc->GetNextItem());
-                )
+                   (plane = m_planeCollectionSrc->GetNextItem());
+                   )
             {
-                vtkPlane *newPlane = vtkPlane::New();
+                vtkPlane* newPlane = vtkPlane::New();
                 m_planeCallbacks.push_back(PlaneShifterCallback::New(plane, newPlane, m_factor));
 
-                vtkPlaneCollection *newCollection = vtkPlaneCollection::New();
+                vtkPlaneCollection* newCollection = vtkPlaneCollection::New();
                 newCollection->AddItem(newPlane);
 
 
                 ::fwRenderVTK::IVtkAdaptorService::sptr meshService =
                     ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-                            service->getObject(),
-                            "::visuVTKAdaptor::Mesh" );
+                        service->getObject(),
+                        "::visuVTKAdaptor::Mesh" );
 
                 ::visuVTKAdaptor::Mesh::sptr meshAdaptor = Mesh::dynamicCast(meshService);
 
@@ -317,7 +345,7 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
         }
         else if ( eventId == vtkCommand::UserEvent )
         {
-            BOOST_FOREACH( ::visuVTKAdaptor::Mesh::wptr adaptor, m_meshServices )
+            for( ::visuVTKAdaptor::Mesh::wptr adaptor :  m_meshServices )
             {
                 if (!adaptor.expired())
                 {
@@ -327,95 +355,111 @@ class PlaneCollectionAdaptorStarter : public MeshVtkCommand
         }
     }
 
-    protected:
+protected:
 
-        ::visuVTKAdaptor::Mesh::wptr m_service;
+    ::visuVTKAdaptor::Mesh::wptr m_service;
 
-        vtkPlaneCollection *m_planeCollectionSrc;
-        ::fwData::Mesh::sptr m_mesh;
+    vtkPlaneCollection* m_planeCollectionSrc;
+    ::fwData::Mesh::sptr m_mesh;
 
-        std::vector< ::visuVTKAdaptor::Mesh::wptr > m_meshServices;
+    std::vector< ::visuVTKAdaptor::Mesh::wptr > m_meshServices;
 
-        std::vector< PlaneShifterCallback* > m_planeCallbacks;
-        std::vector< vtkPlaneCollection* >   m_planeCollections;
+    std::vector< PlaneShifterCallback* > m_planeCallbacks;
+    std::vector< vtkPlaneCollection* >   m_planeCollections;
 
-        double    m_factor;
+    double m_factor;
 };
 
 
 //------------------------------------------------------------------------------
 
-Mesh::Mesh() throw()
+Mesh::Mesh() throw() :
+    m_showClippedPart(false),
+    m_autoResetCamera(true),
+    m_polyData(nullptr),
+    m_mapper(vtkPolyDataMapper::New()),
+    m_actor(nullptr),
+    m_clippingPlanes(nullptr),
+    m_planeCollectionShifterCallback(nullptr),
+    m_servicesStarterCallback(nullptr),
+    m_transform(vtkTransform::New()),
+    m_uvgen(NONE)
 {
-    m_material               = ::fwData::Material::New();
-    m_unclippedPartMaterial  = ::fwData::Material::New();
-    m_unclippedPartMaterial->ambient()->setRGBA("#aaaaff44");
-
-    m_clippingPlanesId  = "";
-
-    m_showClippedPart   = false;
-    m_clippingPlanes    = 0;
-    m_actor             = 0;
-
-    m_polyData          = 0;
-    m_mapper            = vtkPolyDataMapper::New();
-
-    m_autoResetCamera   = true;
-
-    m_planeCollectionShifterCallback = 0;
-    m_servicesStarterCallback        = 0;
-
-    m_transform = vtkTransform::New();
-
-    //addNewHandledEvent (::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::NEW_MESH );
-    //addNewHandledEvent (::fwComEd::MeshMsg::VERTEX_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::POINT_COLORS_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::CELL_COLORS_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::POINT_NORMALS_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::CELL_NORMALS_MODIFIED );
-    //addNewHandledEvent ("SHOW_POINT_COLORS");
-    //addNewHandledEvent ("SHOW_CELL_COLORS");
-    //addNewHandledEvent ("HIDE_COLORS");
+    m_unclippedPartMaterial = ::fwData::Material::New();
+    m_material              = ::fwData::Material::New();
+    m_unclippedPartMaterial->diffuse()->setRGBA("#aaaaff44");
+    m_clippingPlanesId = "";
+
+    m_sigTextureApplied = TextureAppliedSignalType::New();
+    ::fwCom::HasSignals::m_signals(s_TEXTURE_APPLIED_SIG, m_sigTextureApplied);
+
+    m_slotUpdateVisibility     = ::fwCom::newSlot(&Mesh::updateVisibility, this);
+    m_slotUpdatePointColors    = ::fwCom::newSlot(&Mesh::updatePointColors, this);
+    m_slotUpdateCellColors     = ::fwCom::newSlot(&Mesh::updateCellColors, this);
+    m_slotUpdateVertex         = ::fwCom::newSlot(&Mesh::updateVertex, this);
+    m_slotUpdatePointNormals   = ::fwCom::newSlot(&Mesh::updatePointNormals, this);
+    m_slotUpdateCellNormals    = ::fwCom::newSlot(&Mesh::updateCellNormals, this);
+    m_slotUpdatePointTexCoords = ::fwCom::newSlot(&Mesh::updatePointTexCoords, this);
+    m_slotUpdateCellTexCoords  = ::fwCom::newSlot(&Mesh::updateCellTexCoords, this);
+    m_slotShowPointColors      = ::fwCom::newSlot(&Mesh::showPointColors, this);
+    m_slotShowCellColors       = ::fwCom::newSlot(&Mesh::showCellColors, this);
+    m_slotHideColors           = ::fwCom::newSlot(&Mesh::hideColors, this);
+    m_slotUpdateColorMode      = ::fwCom::newSlot(&Mesh::updateColorMode, this);
+
+    ::fwCom::HasSlots::m_slots(s_UPDATE_VISIBILITY_SLOT, m_slotUpdateVisibility)
+        (s_UPDATE_POINT_COLORS_SLOT, m_slotUpdatePointColors)
+        (s_UPDATE_CELL_COLORS_SLOT, m_slotUpdateCellColors)
+        (s_UPDATE_VERTEX_SLOT, m_slotUpdateVertex)
+        (s_UPDATE_POINT_NORMALS_SLOT, m_slotUpdatePointNormals)
+        (s_UPDATE_CELL_NORMALS_SLOT, m_slotUpdateCellNormals)
+        (s_UPDATE_POINT_TEX_COORDS_SLOT, m_slotUpdatePointTexCoords)
+        (s_UPDATE_CELL_TEX_COORDS_SLOT, m_slotUpdateCellTexCoords)
+        (s_SHOW_POINT_COLORS_SLOT, m_slotShowPointColors)
+        (s_SHOW_CELL_COLORS_SLOT, m_slotShowCellColors)
+        (s_HIDE_COLORS_SLOT, m_slotHideColors)
+        (s_UPDATE_COLOR_MODE_SLOT, m_slotUpdateColorMode)
+    ;
+
+    ::fwCom::HasSlots::m_slots.setWorker( m_associatedWorker );
 }
 
 //------------------------------------------------------------------------------
 
 Mesh::~Mesh() throw()
 {
-    m_clippingPlanes = 0;
+    m_clippingPlanes = nullptr;
 
     m_mapper->Delete();
-    m_mapper = 0;
+    m_mapper = nullptr;
 
     m_transform->Delete();
-    m_transform = 0;
+    m_transform = nullptr;
 
     if(m_actor)
     {
         m_actor->Delete();
-        m_actor = 0;
+        m_actor = nullptr;
     }
 
     if (m_polyData)
     {
         m_polyData->Delete();
-        m_polyData = 0;
+        m_polyData = nullptr;
     }
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::configuring() throw(fwTools::Failed)
+void Mesh::doConfigure() throw(fwTools::Failed)
 {
     assert(m_configuration->getName() == "config");
 
-    std::string color = m_configuration->getAttributeValue("color");
+    std::string color          = m_configuration->getAttributeValue("color");
     std::string unclippedColor = m_configuration->getAttributeValue("unclippedcolor");
 
-    m_material->ambient()->setRGBA(color.empty() ? "#ffffffff" : color );
+    m_material->diffuse()->setRGBA(color.empty() ? "#ffffffff" : color );
 
-    m_unclippedPartMaterial->ambient()->setRGBA(unclippedColor.empty() ? "#aaaaff44" : unclippedColor );
+    m_unclippedPartMaterial->diffuse()->setRGBA(unclippedColor.empty() ? "#aaaaff44" : unclippedColor );
 
     if (m_configuration->hasAttribute("autoresetcamera") )
     {
@@ -423,9 +467,27 @@ void Mesh::configuring() throw(fwTools::Failed)
         m_autoResetCamera = (autoresetcamera == "yes");
     }
 
-    this->setPickerId    ( m_configuration->getAttributeValue ( "picker"    ) );
-    this->setRenderId    ( m_configuration->getAttributeValue ( "renderer"  ) );
-    this->setTransformId ( m_configuration->getAttributeValue ( "transform" ) );
+    if(m_configuration->hasAttribute("uvgen"))
+    {
+        std::string uvGen = m_configuration->getAttributeValue ("uvgen");
+        if(uvGen == "sphere")
+        {
+            m_uvgen = SPHERE;
+        }
+        else if(uvGen == "cylinder")
+        {
+            m_uvgen = CYLINDER;
+        }
+        else if(uvGen == "plane")
+        {
+            m_uvgen = PLANE;
+        }
+    }
+
+    if ( m_configuration->hasAttribute("texture") )
+    {
+        m_textureAdaptorUID = m_configuration->getAttributeValue("texture");
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -440,80 +502,19 @@ void Mesh::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Mesh::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void Mesh::doStart() throw(fwTools::Failed)
 {
-    ::fwComEd::MaterialMsg::csptr materialMsg = ::fwComEd::MaterialMsg::dynamicConstCast(msg);
-    ::fwComEd::MeshMsg::csptr meshMsg = ::fwComEd::MeshMsg::dynamicConstCast(msg);
-
-    if( materialMsg && materialMsg->hasEvent(::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED) )
+    if(!m_textureAdaptorUID.empty())
     {
-        this->updateOptionsMode();
-    }
+        ::fwRenderVTK::SRender::sptr renderService      = this->getRenderService();
+        ::fwRenderVTK::IVtkAdaptorService::sptr adaptor = renderService->getAdaptor(m_textureAdaptorUID);
+        ::visuVTKAdaptor::Texture::sptr textureAdaptor  = ::visuVTKAdaptor::Texture::dynamicCast(adaptor);
 
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::NEW_MESH) )
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        this->updateMesh( mesh );
+        SLM_ASSERT("textureAdaptor is NULL", textureAdaptor);
+        m_connections.connect(this->getSptr(), s_TEXTURE_APPLIED_SIG, textureAdaptor,
+                              ::visuVTKAdaptor::Texture::s_APPLY_TEXTURE_SLOT);
     }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::POINT_COLORS_MODIFIED))
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        SLM_ASSERT("m_polyData not instanced", m_polyData);
-
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointColor(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::CELL_COLORS_MODIFIED))
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        SLM_ASSERT("m_polyData not instanced", m_polyData);
-
-        ::fwVtkIO::helper::Mesh::updatePolyDataCellColor(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::VERTEX_MODIFIED) )
-    {
-       ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-       SLM_ASSERT("m_polyData not instanced", m_polyData);
-
-       ::fwVtkIO::helper::Mesh::updatePolyDataPoints(m_polyData, mesh);
-       this->setVtkPipelineModified();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::POINT_NORMALS_MODIFIED))
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::CELL_NORMALS_MODIFIED))
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        ::fwVtkIO::helper::Mesh::updatePolyDataCellNormals(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
-    if (meshMsg && meshMsg->hasEvent("SHOW_POINT_COLORS"))
-    {
-        m_mapper->ScalarVisibilityOn();
-        m_mapper->SetScalarModeToUsePointData();
-        this->setVtkPipelineModified();
-    }
-    else if (meshMsg && meshMsg->hasEvent("SHOW_CELL_COLORS"))
-    {
-        m_mapper->ScalarVisibilityOn();
-        m_mapper->SetScalarModeToUseCellData();
-        this->setVtkPipelineModified();
-    }
-    else if (meshMsg && meshMsg->hasEvent("HIDE_COLORS"))
-    {
-        m_mapper->ScalarVisibilityOff();
-        this->setVtkPipelineModified();
-    }
-}
 
-//------------------------------------------------------------------------------
-
-void Mesh::doStart() throw(fwTools::Failed)
-{
     this->buildPipeline();
     m_transformService.lock()->start();
 }
@@ -536,6 +537,8 @@ void Mesh::doStop() throw(fwTools::Failed)
     removeServicesStarterCommand();
 
     this->unregisterServices();
+
+    m_connections.disconnect();
 }
 
 //------------------------------------------------------------------------------
@@ -547,11 +550,11 @@ void Mesh::doSwap() throw(fwTools::Failed)
     ::fwServices::OSR::unregisterService(m_transformService.lock());
 
 
-    ::fwRenderVTK::IVtkAdaptorService::sptr materialService = m_materialService.lock();
+    ::fwRenderVTK::IVtkAdaptorService::sptr materialService              = m_materialService.lock();
     ::fwRenderVTK::IVtkAdaptorService::sptr unclippedPartMaterialService = m_unclippedPartMaterialService.lock();
 
     this->setServiceOnMaterial(materialService, m_material);
-    this->setServiceOnMaterial(unclippedPartMaterialService , m_unclippedPartMaterial);
+    this->setServiceOnMaterial(unclippedPartMaterialService, m_unclippedPartMaterial);
 
     m_materialService              = materialService;
     m_unclippedPartMaterialService = unclippedPartMaterialService;
@@ -571,21 +574,22 @@ void Mesh::createTransformService()
 
     if(!this->getTransformId().empty())
     {
-        m_transform->Concatenate(this->getTransform());
+        vtkTransform* t = m_renderService.lock()->getOrAddVtkTransform(m_transformId);
+        m_transform->Concatenate(t);
     }
 
     ::fwData::TransformationMatrix3D::sptr fieldTransform;
     fieldTransform = mesh->setDefaultField("TransformMatrix", ::fwData::TransformationMatrix3D::New());
 
-    vtkTransform *vtkFieldTransform = vtkTransform::New();
+    vtkTransform* vtkFieldTransform = vtkTransform::New();
     vtkFieldTransform->Identity();
     m_transformService = ::visuVTKAdaptor::Transform::dynamicCast(
         ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-                fieldTransform,
-                "::visuVTKAdaptor::Transform"
-                )
+            fieldTransform,
+            "::visuVTKAdaptor::Transform"
+            )
         );
-    assert(m_transformService.lock());
+    SLM_ASSERT("Transform service NULL", m_transformService.lock());
     ::visuVTKAdaptor::Transform::sptr transformService = m_transformService.lock();
 
     transformService->setRenderService ( this->getRenderService()  );
@@ -601,14 +605,14 @@ void Mesh::createTransformService()
 
 //------------------------------------------------------------------------------
 
-::fwData::Material::sptr Mesh::getMaterial()
+::fwData::Material::sptr Mesh::getMaterial() const
 {
     return m_material;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Material::sptr Mesh::getUnclippedMaterial()
+::fwData::Material::sptr Mesh::getUnclippedMaterial() const
 {
     return m_unclippedPartMaterial;
 }
@@ -621,17 +625,13 @@ void Mesh::setActorPropertyToUnclippedMaterial(bool opt)
 
     if (opt)
     {
-        assert(!m_unclippedPartMaterialService.expired());
-        mat = ::visuVTKAdaptor::Material::dynamicCast(
-                m_unclippedPartMaterialService.lock()
-                );
+        SLM_ASSERT("Material service expired", !m_unclippedPartMaterialService.expired());
+        mat = ::visuVTKAdaptor::Material::dynamicCast(m_unclippedPartMaterialService.lock());
     }
     else
     {
-        assert(!m_materialService.expired());
-        mat = ::visuVTKAdaptor::Material::dynamicCast(
-                m_materialService.lock()
-                );
+        SLM_ASSERT("Material service expired", !m_materialService.expired());
+        mat = ::visuVTKAdaptor::Material::dynamicCast(m_materialService.lock());
     }
 
     SLM_ASSERT("Invalid Material Adaptor", mat);
@@ -649,20 +649,18 @@ void Mesh::setShowClippedPart(bool show)
 
 //------------------------------------------------------------------------------
 
-void Mesh::setClippingPlanesId(::fwRenderVTK::VtkRenderService::VtkObjectIdType id)
+void Mesh::setClippingPlanesId(::fwRenderVTK::SRender::VtkObjectIdType id)
 {
     m_clippingPlanesId = id;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setServiceOnMaterial(::fwRenderVTK::IVtkAdaptorService::sptr &srv, ::fwData::Material::sptr material)
+void Mesh::setServiceOnMaterial(::fwRenderVTK::IVtkAdaptorService::sptr& srv, ::fwData::Material::sptr material)
 {
-    if (! srv)
+    if (!srv)
     {
-        srv = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-            material, "::visuVTKAdaptor::Material"
-            );
+        srv = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (material, "::visuVTKAdaptor::Material");
         SLM_ASSERT("srv not instanced", srv);
 
         srv->setRenderService(this->getRenderService());
@@ -695,7 +693,7 @@ void Mesh::setUnclippedPartMaterial(::fwData::Material::sptr material)
 
 void Mesh::updateOptionsMode()
 {
-    if (m_material->getOptionsMode() == ::fwData::Material::MODE_NORMALS)
+    if (m_material->getOptionsMode() == ::fwData::Material::NORMALS)
     {
         this->createNormalsService();
     }
@@ -714,9 +712,9 @@ void Mesh::createNormalsService()
         ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
 
         ::fwRenderVTK::IVtkAdaptorService::sptr service =
-                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
-                        mesh,
-                        "::visuVTKAdaptor::MeshNormals"
+            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
+                mesh,
+                "::visuVTKAdaptor::MeshNormals"
                 );
         SLM_ASSERT("service not instanced", service);
 
@@ -751,8 +749,8 @@ void Mesh::buildPipeline()
 
     if (!m_clippingPlanesId.empty())
     {
-        vtkObject          *o      = this->getVtkObject(m_clippingPlanesId);
-        vtkPlaneCollection *planes = vtkPlaneCollection::SafeDownCast(o);
+        vtkObject* o               = this->getVtkObject(m_clippingPlanesId);
+        vtkPlaneCollection* planes = vtkPlaneCollection::SafeDownCast(o);
         this->setVtkClippingPlanes( planes );
     }
 
@@ -760,7 +758,7 @@ void Mesh::buildPipeline()
     ::fwRenderVTK::IVtkAdaptorService::sptr unclippedPartMaterialService;
 
     this->setServiceOnMaterial(materialService, m_material);
-    this->setServiceOnMaterial(unclippedPartMaterialService , m_unclippedPartMaterial);
+    this->setServiceOnMaterial(unclippedPartMaterialService, m_unclippedPartMaterial);
 
     m_materialService              = materialService;
     m_unclippedPartMaterialService = unclippedPartMaterialService;
@@ -801,8 +799,42 @@ void Mesh::updateMesh( ::fwData::Mesh::sptr mesh )
         m_polyData = 0;
     }
     m_polyData = vtkPolyData::New();
-    ::fwVtkIO::helper::Mesh::toVTKMesh(mesh, m_polyData);
-    m_mapper->SetInput(m_polyData);
+
+    {
+        ::fwData::mt::ObjectReadLock lock(mesh);
+        ::fwVtkIO::helper::Mesh::toVTKMesh(mesh, m_polyData);
+    }
+
+    if(m_uvgen == SPHERE)
+    {
+        vtkSmartPointer<vtkTextureMapToSphere> texCoord = vtkSmartPointer<vtkTextureMapToSphere>::New();
+        texCoord->SetInputData(m_polyData);
+        m_mapper->SetInputConnection(texCoord->GetOutputPort());
+    }
+    else if(m_uvgen == CYLINDER)
+    {
+        vtkSmartPointer<vtkTextureMapToCylinder> texCoord = vtkSmartPointer<vtkTextureMapToCylinder>::New();
+        texCoord->SetInputData(m_polyData);
+        m_mapper->SetInputConnection(texCoord->GetOutputPort());
+    }
+    else if(m_uvgen == PLANE)
+    {
+        vtkSmartPointer<vtkTextureMapToPlane> texCoord = vtkSmartPointer<vtkTextureMapToPlane>::New();
+        texCoord->SetInputData(m_polyData);
+        m_mapper->SetInputConnection(texCoord->GetOutputPort());
+    }
+    else
+    {
+        m_mapper->SetInputData(m_polyData);
+    }
+
+    if(!m_textureAdaptorUID.empty())
+    {
+        ::fwData::Material::sptr material = this->getMaterial();
+        SLM_ASSERT("Missing material", material);
+
+        m_sigTextureApplied->asyncEmit(material);
+    }
 
     if (m_autoResetCamera)
     {
@@ -813,14 +845,15 @@ void Mesh::updateMesh( ::fwData::Mesh::sptr mesh )
 
 //------------------------------------------------------------------------------
 
-vtkActor *Mesh::newActor()
+vtkActor* Mesh::newActor()
 {
-    vtkActor *actor = vtkActor::New();
-    m_mapper->SetInput(m_polyData);
+    vtkActor* actor = vtkActor::New();
+
+    m_mapper->SetInputData(m_polyData);
 
     if (m_clippingPlanes)
     {
-        vtkPlaneCollection *newClippingPlanes = vtkPlaneCollection::New();
+        vtkPlaneCollection* newClippingPlanes = vtkPlaneCollection::New();
 
         removePlaneCollectionShifterCommand();
 
@@ -850,11 +883,12 @@ void Mesh::updateVisibility( bool isVisible)
         m_servicesStarterCallback->Execute(0, vtkCommand::UserEvent, &isVisible);
     }
     this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
 
-bool Mesh::getVisibility()
+bool Mesh::getVisibility() const
 {
     bool visible = false;
     if (m_actor)
@@ -866,7 +900,7 @@ bool Mesh::getVisibility()
 
 //------------------------------------------------------------------------------
 
-void Mesh::setVtkClippingPlanes(vtkPlaneCollection *planes)
+void Mesh::setVtkClippingPlanes(vtkPlaneCollection* planes)
 {
     m_clippingPlanes = planes;
 }
@@ -891,8 +925,8 @@ void Mesh::createServicesStarterCommand()
     {
         ::visuVTKAdaptor::Mesh::sptr srv =
             ::visuVTKAdaptor::Mesh::dynamicCast(
-                    this->getSptr()
-                    );
+                this->getSptr()
+                );
         m_servicesStarterCallback = PlaneCollectionAdaptorStarter::New( srv, m_clippingPlanes, -1. );
     }
 }
@@ -918,7 +952,182 @@ void Mesh::setAutoResetCamera(bool autoResetCamera)
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType Mesh::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_POINT_COLORS_MODIFIED_SIG, s_UPDATE_POINT_COLORS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_CELL_COLORS_MODIFIED_SIG, s_UPDATE_CELL_COLORS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_VERTEX_MODIFIED_SIG,
+                                           s_UPDATE_VERTEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_POINT_NORMALS_MODIFIED_SIG,
+                                           s_UPDATE_POINT_NORMALS_SLOT) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_CELL_NORMALS_MODIFIED_SIG,
+                                           s_UPDATE_CELL_NORMALS_SLOT) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_POINT_TEX_COORDS_MODIFIED_SIG,
+                                           s_UPDATE_POINT_TEX_COORDS_SLOT) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_CELL_TEX_COORDS_MODIFIED_SIG,
+                                           s_UPDATE_CELL_TEX_COORDS_SLOT) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updatePointColors()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    SLM_ASSERT("m_polyData not instanced", m_polyData);
+
+    ::fwVtkIO::helper::Mesh::updatePolyDataPointColor(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updateCellColors()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    SLM_ASSERT("m_polyData not instanced", m_polyData);
+
+    ::fwVtkIO::helper::Mesh::updatePolyDataCellColor(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updateVertex()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    SLM_ASSERT("m_polyData not instanced", m_polyData);
+
+    ::fwVtkIO::helper::Mesh::updatePolyDataPoints(m_polyData, mesh);
+
+    if (m_autoResetCamera)
+    {
+        this->getRenderer()->ResetCamera();
+    }
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updatePointNormals()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updateCellNormals()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataCellNormals(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updatePointTexCoords()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataPointTexCoords(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updateCellTexCoords()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataCellTexCoords(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::showPointColors()
+{
+    m_mapper->ScalarVisibilityOn();
+    m_mapper->SetScalarModeToUsePointData();
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::showCellColors()
+{
+    m_mapper->ScalarVisibilityOn();
+    m_mapper->SetScalarModeToUseCellData();
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::hideColors()
+{
+    m_mapper->ScalarVisibilityOff();
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updateColorMode(std::uint8_t mode)
+{
+    switch (mode)
+    {
+        case 0:
+        {
+            this->hideColors();
+            break;
+        }
+        case 1:
+        {
+            this->showPointColors();
+            break;
+        }
+        case 2:
+        {
+            this->showCellColors();
+            break;
+        }
+        default:
+        {
+            OSLM_ERROR("mode " << mode << " is not allowed");
+            break;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::updateNormalMode(std::uint8_t mode)
+{
+    this->updateOptionsMode();
+    if (!m_normalsService.expired())
+    {
+        ::visuVTKAdaptor::MeshNormals::sptr normalsAdaptor =
+            ::visuVTKAdaptor::MeshNormals::dynamicCast(m_normalsService.lock());
+        normalsAdaptor->updateNormalMode(mode);
+    }
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace visuVTKAdaptor
 
 
 
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshFactory.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshFactory.cpp
index 10457c7..484a4ad 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshFactory.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshFactory.cpp
@@ -1,9 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/MeshFactory.hpp"
+
+#include <fwData/Material.hpp>
+
+#include <fwVtkIO/vtk.hpp>
+
 #include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkPolyDataNormals.h>
@@ -12,135 +18,93 @@
 #include <vtkDepthSortPolyData.h>
 #include <vtkPlaneCollection.h>
 
-#include <fwData/Material.hpp>
-#include <fwData/TriangularMesh.hpp>
-
-#include <fwVtkIO/vtk.hpp>
-
-#include "visuVTKAdaptor/MeshFactory.hpp"
-
 namespace visuVTKAdaptor
 {
 
 
 //------------------------------------------------------------------------------
 
-MeshFactory::MeshFactory()
+MeshFactory::MeshFactory() :
+    m_normals(vtkPolyDataNormals::New()),
+    m_clippingPlanes(nullptr),
+    m_actor(vtkActor::New()),
+    m_normalsFeatureAngle(180.)
 {
-    m_clippingPlanes = 0;
-    m_actor = vtkActor::New();
-    m_normals = vtkPolyDataNormals::New();
-    m_normalsFeatureAngle = 180;
 }
 
 //------------------------------------------------------------------------------
 
 MeshFactory::~MeshFactory()
 {
-    m_clippingPlanes = 0;
+    m_clippingPlanes = nullptr;
 
     m_normals->Delete();
-    m_normals = 0;
+    m_normals = nullptr;
 
     m_actor->Delete();
-    m_actor = 0;
+    m_actor = nullptr;
 }
 
 //------------------------------------------------------------------------------
 
-vtkActor* MeshFactory::getActor()
+vtkActor* MeshFactory::getActor() const
 {
     return m_actor;
 }
 
 //------------------------------------------------------------------------------
 
-void MeshFactory::updateTriangulaMesh( ::fwData::TriangularMesh::sptr mesh)
-{
-    vtkPolyData * polyData       = ::fwVtkIO::toVTKMesh(mesh);
-    vtkPolyDataMapper  * mapper  = vtkPolyDataMapper::New();
-
-    m_normals->SetInput(polyData);
-    m_normals->ComputePointNormalsOn ();
-    m_normals->ComputeCellNormalsOff ();
-    m_normals->ConsistencyOn ();
-    m_normals->SplittingOn ();
-    m_normals->SetFeatureAngle(m_normalsFeatureAngle);
-
-
-    mapper->SetInputConnection(m_normals->GetOutputPort());
-
-    m_actor->SetMapper(mapper);
-
-    if (m_clippingPlanes)
-    {
-        mapper->RemoveAllClippingPlanes();
-        mapper->SetClippingPlanes(m_clippingPlanes);
-    }
-
-    mapper->Delete();
-    polyData->Delete();
-}
-
-//------------------------------------------------------------------------------
-
 void MeshFactory::updateMaterial( ::fwData::Material::sptr material )
 {
     if (m_actor)
     {
-        ::fwData::Color::sptr color = material->ambient();
-
         vtkProperty *property = m_actor->GetProperty();
 
-        property->SetColor( color->red(),
-                color->green(),
-                color->blue());
+        ::fwData::Color::sptr diffuse = material->diffuse();
+        property->SetDiffuseColor(diffuse->red(), diffuse->green(), diffuse->blue());
 
-        //3DVSP like rendering
-        property->SetSpecularColor(1.,1.,1.);
-        property->SetSpecularPower(100.); //Shininess
-        property->SetAmbient(.05);
-        property->SetDiffuse(1.);
-        property->SetSpecular(1.);
-//        property->SetInterpolationToPhong();
+        // Use alpha from the diffuse color
+        property->SetOpacity( diffuse->alpha() );
 
+        ::fwData::Color::sptr ambient = material->ambient();
+        property->SetAmbientColor(ambient->red(), ambient->green(), ambient->blue());
 
-        property->SetOpacity( color->alpha() );
+        property->SetSpecularColor(1.,1.,1.);
+        property->SetSpecularPower(100.); //Shininess
 
         /// Sets RepresentationMode
-        if(material->getRepresentationMode() == ::fwData::Material::MODE_SURFACE)
+        if(material->getRepresentationMode() == ::fwData::Material::SURFACE)
         {
             m_actor->GetProperty()->SetRepresentationToSurface();
             m_actor->GetProperty()->EdgeVisibilityOff();
         }
-        else if(material->getRepresentationMode() == ::fwData::Material::MODE_EDGE)
+        else if(material->getRepresentationMode() == ::fwData::Material::EDGE)
         {
             m_actor->GetProperty()->SetRepresentationToSurface();
             m_actor->GetProperty()->EdgeVisibilityOn();
         }
-        else if(material->getRepresentationMode() == ::fwData::Material::MODE_WIREFRAME)
+        else if(material->getRepresentationMode() == ::fwData::Material::WIREFRAME)
         {
             m_actor->GetProperty()->SetRepresentationToWireframe();
         }
-        else if(material->getRepresentationMode() == ::fwData::Material::MODE_POINT)
+        else if(material->getRepresentationMode() == ::fwData::Material::POINT)
         {
             m_actor->GetProperty()->SetRepresentationToPoints();
         }
 
         /// Sets ShadingMode
-        if(material->getShadingMode() == ::fwData::Material::MODE_PHONG)
+        if(material->getShadingMode() == ::fwData::Material::PHONG)
         {
             m_actor->GetProperty()->SetInterpolationToPhong();
         }
-        else if(material->getShadingMode() == ::fwData::Material::MODE_GOURAUD)
+        else if(material->getShadingMode() == ::fwData::Material::GOURAUD)
         {
             m_actor->GetProperty()->SetInterpolationToGouraud();
         }
-        else if(material->getShadingMode() == ::fwData::Material::MODE_FLAT)
+        else if(material->getShadingMode() == ::fwData::Material::FLAT)
         {
             m_actor->GetProperty()->SetInterpolationToFlat();
         }
-
     }
 }
 
@@ -156,14 +120,11 @@ void MeshFactory::updateVisibility( bool isVisible)
 
 //------------------------------------------------------------------------------
 
-
 void MeshFactory::setVtkClippingPlanes(vtkPlaneCollection *planes)
 {
     m_clippingPlanes = planes;
 }
 
 
-
-
 } //namespace visuVTKAdaptor
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshNormals.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshNormals.cpp
index de27383..6c7b784 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshNormals.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshNormals.cpp
@@ -1,10 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
+#include "visuVTKAdaptor/MeshNormals.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Mesh.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwVtkIO/helper/Mesh.hpp>
 
 #include <vtkCellCenters.h>
 #include <vtkActor.h>
@@ -15,16 +26,9 @@
 #include <vtkPolyDataMapper.h>
 #include <vtkProperty.h>
 
-#include <fwData/Mesh.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwComEd/MeshMsg.hpp>
-
-#include <fwVtkIO/helper/Mesh.hpp>
-
-#include "visuVTKAdaptor/MeshNormals.hpp"
+#include <boost/assign/list_of.hpp>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::MeshNormals, ::fwData::Mesh ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::MeshNormals, ::fwData::Mesh );
 
 
 namespace visuVTKAdaptor
@@ -32,11 +36,20 @@ namespace visuVTKAdaptor
 
 std::map< std::string, MeshNormals::NormalRepresentation >
 MeshNormals::m_normalRepresentationConversion
-        = ::boost::assign::map_list_of(std::string("POINT"), POINT_NORMAL)
-                                      (std::string("CELL"), CELL_NORMAL)
-                                      (std::string("NONE"), NONE);
+    = ::boost::assign::map_list_of(std::string("POINT"), POINT_NORMAL)
+          (std::string("CELL"), CELL_NORMAL)
+          (std::string("NONE"), NONE);
 
 
+//------------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_UPDATE_VERTEX_SLOT        = "updateVertex";
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_UPDATE_POINT_NORMALS_SLOT = "updatePointNormals";
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_UPDATE_CELL_NORMALS_SLOT  = "updateCellNormals";
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_SHOW_POINT_NORMALS_SLOT   = "showPointNormals";
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_SHOW_CELL_NORMALS_SLOT    = "showCellNormals";
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_HIDE_NORMALS_SLOT         = "hideNormals";
+const ::fwCom::Slots::SlotKeyType MeshNormals::s_UPDATE_NORMAL_MODE_SLOT   = "updateNormalMode";
 
 //------------------------------------------------------------------------------
 
@@ -44,14 +57,24 @@ MeshNormals::MeshNormals() throw() : m_normalRepresentation(CELL_NORMAL)
 {
     m_actor = vtkActor::New();
 
-    //addNewHandledEvent (::fwComEd::MeshMsg::NEW_MESH );
-    //addNewHandledEvent (::fwComEd::MeshMsg::VERTEX_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::POINT_NORMALS_MODIFIED );
-    //addNewHandledEvent (::fwComEd::MeshMsg::CELL_NORMALS_MODIFIED );
-
-    //addNewHandledEvent ("SHOW_CELL_NORMALS");
-    //addNewHandledEvent ("SHOW_POINT_NORMALS");
-    //addNewHandledEvent ("HIDE_NORMALS");
+    m_slotUpdateVertex       = ::fwCom::newSlot(&MeshNormals::updateVertex, this);
+    m_slotUpdatePointNormals = ::fwCom::newSlot(&MeshNormals::updatePointNormals, this);
+    m_slotUpdateCellNormals  = ::fwCom::newSlot(&MeshNormals::updateCellNormals, this);
+    m_slotShowPointNormals   = ::fwCom::newSlot(&MeshNormals::showPointNormals, this);
+    m_slotShowCellNormals    = ::fwCom::newSlot(&MeshNormals::showCellNormals, this);
+    m_slotHideNormals        = ::fwCom::newSlot(&MeshNormals::hideNormals, this);
+    m_slotUpdateNormalMode   = ::fwCom::newSlot(&MeshNormals::updateNormalMode, this);
+
+    ::fwCom::HasSlots::m_slots(s_UPDATE_VERTEX_SLOT, m_slotUpdateVertex)
+        (s_UPDATE_POINT_NORMALS_SLOT, m_slotUpdatePointNormals)
+        (s_UPDATE_CELL_NORMALS_SLOT, m_slotUpdateCellNormals)
+        (s_SHOW_POINT_NORMALS_SLOT, m_slotShowPointNormals)
+        (s_SHOW_CELL_NORMALS_SLOT, m_slotShowCellNormals)
+        (s_HIDE_NORMALS_SLOT, m_slotHideNormals)
+        (s_UPDATE_NORMAL_MODE_SLOT, m_slotUpdateNormalMode)
+    ;
+
+    ::fwCom::HasSlots::m_slots.setWorker( m_associatedWorker );
 }
 
 //------------------------------------------------------------------------------
@@ -64,18 +87,16 @@ MeshNormals::~MeshNormals() throw()
 
 //------------------------------------------------------------------------------
 
-void MeshNormals::configuring() throw( ::fwTools::Failed)
+void MeshNormals::doConfigure() throw( ::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
     if(m_configuration->hasAttribute("normal") )
     {
         std::string normal = m_configuration->getExistingAttributeValue("normal");
         SLM_ASSERT("Wrong normal representation '"<<normal << "' (required POINT, CELL or NONE)",
-                m_normalRepresentationConversion.find(normal) != m_normalRepresentationConversion.end());
+                   m_normalRepresentationConversion.find(normal) != m_normalRepresentationConversion.end());
 
         m_normalRepresentation = m_normalRepresentationConversion[normal];
     }
@@ -107,7 +128,7 @@ void MeshNormals::doUpdate() throw( ::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-vtkActor* MeshNormals::getActor()
+vtkActor* MeshNormals::getActor() const
 {
     return m_actor;
 }
@@ -151,29 +172,15 @@ void MeshNormals::updateMeshNormals()
             algo = ptMask;
         }
 
-        algo->SetInput(m_polyData);
+        algo->SetInputData(m_polyData);
 
-        //vtkSmartPointer<vtkArrowSource> arrow = vtkSmartPointer<vtkArrowSource>::New();
         vtkSmartPointer<vtkGlyphSource2D> arrow = vtkSmartPointer<vtkGlyphSource2D>::New();
-
-        //arrow->SetGlyphTypeToVertex ();
-        //arrow->SetGlyphTypeToDash ();
-        //arrow->SetGlyphTypeToCross ();
-        //arrow->SetGlyphTypeToThickCross ();
-        //arrow->SetGlyphTypeToTriangle ();
-        //arrow->SetGlyphTypeToSquare ();
-        //arrow->SetGlyphTypeToCircle ();
-        //arrow->SetGlyphTypeToDiamond ();
         arrow->SetGlyphTypeToArrow ();
-        //arrow->SetGlyphTypeToThickArrow ();
-        //arrow->SetGlyphTypeToHookedArrow ();
-        //arrow->SetGlyphTypeToEdgeArrow ();
-
         arrow->FilledOff();
 
         vtkSmartPointer<vtkGlyph3D> glyph = vtkSmartPointer<vtkGlyph3D>::New();
         glyph->SetInputConnection(algo->GetOutputPort());
-        glyph->SetSource(arrow->GetOutput());
+        glyph->SetSourceConnection(arrow->GetOutputPort());
         glyph->SetVectorModeToUseNormal();
         glyph->SetScaleModeToScaleByVector();
         glyph->SetScaleFactor(10.0);
@@ -190,59 +197,110 @@ void MeshNormals::updateMeshNormals()
 
 //------------------------------------------------------------------------------
 
-void MeshNormals::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void MeshNormals::doStop() throw( ::fwTools::Failed)
+{
+    this->removeAllPropFromRenderer();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType MeshNormals::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_VERTEX_MODIFIED_SIG,
+                                           s_UPDATE_VERTEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_POINT_NORMALS_MODIFIED_SIG,
+                                           s_UPDATE_POINT_NORMALS_SLOT) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_CELL_NORMALS_MODIFIED_SIG,
+                                           s_UPDATE_CELL_NORMALS_SLOT) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+void MeshNormals::updateVertex()
 {
-    SLM_TRACE_FUNC();
-    ::fwComEd::MeshMsg::csptr meshMsg = ::fwComEd::MeshMsg::dynamicConstCast(msg);
     ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataPoints(m_polyData, mesh);
+    ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
+    ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
 
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::NEW_MESH))
-    {
-        this->updateMeshNormals();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::VERTEX_MODIFIED) )
-    {
-        ::fwVtkIO::helper::Mesh::updatePolyDataPoints(m_polyData, mesh);
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::POINT_NORMALS_MODIFIED))
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::MeshMsg::CELL_NORMALS_MODIFIED))
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
-        ::fwVtkIO::helper::Mesh::updatePolyDataCellNormals(m_polyData, mesh);
-        this->setVtkPipelineModified();
-    }
+//------------------------------------------------------------------------------
 
-    if( meshMsg && meshMsg->hasEvent("SHOW_CELL_NORMALS"))
-    {
-        m_normalRepresentation = CELL_NORMAL;
-        this->updateMeshNormals();
-    }
+void MeshNormals::updatePointNormals()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
 
-    if( meshMsg && meshMsg->hasEvent("SHOW_POINT_NORMALS"))
-    {
-        m_normalRepresentation = POINT_NORMAL;
-        this->updateMeshNormals();
-    }
+//------------------------------------------------------------------------------
 
-    if( meshMsg && meshMsg->hasEvent("HIDE_NORMALS"))
-    {
-        m_normalRepresentation = NONE;
-        this->updateMeshNormals();
-    }
+void MeshNormals::updateCellNormals()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject < ::fwData::Mesh >();
+    ::fwVtkIO::helper::Mesh::updatePolyDataCellNormals(m_polyData, mesh);
+    this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
-void MeshNormals::doStop() throw( ::fwTools::Failed)
+
+void MeshNormals::showPointNormals()
 {
-    this->removeAllPropFromRenderer();
+    m_normalRepresentation = POINT_NORMAL;
+    this->updateMeshNormals();
+}
+
+//------------------------------------------------------------------------------
+
+void MeshNormals::showCellNormals()
+{
+    m_normalRepresentation = CELL_NORMAL;
+    this->updateMeshNormals();
+}
+
+//------------------------------------------------------------------------------
+
+void MeshNormals::hideNormals()
+{
+    m_normalRepresentation = NONE;
+    this->updateMeshNormals();
+}
+
+//------------------------------------------------------------------------------
+
+void MeshNormals::updateNormalMode(std::uint8_t mode)
+{
+    switch (mode)
+    {
+        case 0:
+        {
+            this->hideNormals();
+            break;
+        }
+        case 1:
+        {
+            this->showPointNormals();
+            break;
+        }
+        case 2:
+        {
+            this->showCellNormals();
+            break;
+        }
+        default:
+        {
+            OSLM_ERROR("mode " << mode << " is not allowed");
+            break;
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshesBoxWidget.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshesBoxWidget.cpp
index 9067b7d..1444100 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshesBoxWidget.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/MeshesBoxWidget.cpp
@@ -1,39 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
-#include <limits>
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
 
-#include <fwData/Composite.hpp>
-#include <fwData/Mesh.hpp>
+#include "visuVTKAdaptor/MeshesBoxWidget.hpp"
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Mesh.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwVtkIO/helper/Mesh.hpp>
 
 #include <fwVtkIO/vtk.hpp>
-#include <fwVtkIO/helper/Mesh.hpp>
 
-#include <vtkPolyData.h>
+#include <limits>
+
+#include <vtkActor.h>
+#include <vtkAssembly.h>
 #include <vtkBoxRepresentation.h>
 #include <vtkBoxWidget2.h>
-#include <vtkTransform.h>
 #include <vtkCommand.h>
+#include <vtkPolyData.h>
 #include <vtkPolyDataMapper.h>
-#include <vtkActor.h>
-#include <vtkAssembly.h>
 #include <vtkProp3DCollection.h>
-
-#include "visuVTKAdaptor/MeshesBoxWidget.hpp"
-
+#include <vtkTransform.h>
 
 class MeshesBoxClallback : public ::vtkCommand
 {
@@ -46,8 +44,12 @@ public:
         return cb;
     }
 
-    MeshesBoxClallback() : m_adaptor(NULL) {}
-    ~MeshesBoxClallback() {}
+    MeshesBoxClallback() : m_adaptor(NULL)
+    {
+    }
+    ~MeshesBoxClallback()
+    {
+    }
 
     virtual void Execute( ::vtkObject* pCaller, unsigned long, void* )
     {
@@ -59,21 +61,27 @@ public:
 
 //-----------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::MeshesBoxWidget, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::MeshesBoxWidget, ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_MATRICES_SLOT = "updateMatrices";
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT     = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT  = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT  = "removeObjects";
+
 //-----------------------------------------------------------------------------
 
-MeshesBoxWidget::MeshesBoxWidget() throw()
+MeshesBoxWidget::MeshesBoxWidget() throw() :
+    m_assembly(nullptr),
+    m_boxWidgetCommand(MeshesBoxClallback::New(this)),
+    m_vtkBoxWidget(nullptr)
 {
-    //addNewHandledEvent(::fwComEd::CompositeMsg::ADDED_KEYS);
-    //addNewHandledEvent(::fwComEd::CompositeMsg::REMOVED_KEYS);
-    //addNewHandledEvent(::fwComEd::CompositeMsg::CHANGED_KEYS);
-    //addNewHandledEvent(::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED);
-
-    m_boxWidgetCommand = MeshesBoxClallback::New(this);
+    newSlot(s_UPDATE_MATRICES_SLOT, &MeshesBoxWidget::updateMatrices, this);
+    newSlot(s_ADD_OBJECTS_SLOT, &MeshesBoxWidget::addObjects, this);
+    newSlot(s_CHANGE_OBJECTS_SLOT, &MeshesBoxWidget::changeObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &MeshesBoxWidget::removeObjects, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -84,13 +92,8 @@ MeshesBoxWidget::~MeshesBoxWidget() throw()
 
 //-----------------------------------------------------------------------------
 
-void MeshesBoxWidget::configuring() throw(fwTools::Failed)
+void MeshesBoxWidget::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //-----------------------------------------------------------------------------
@@ -110,7 +113,7 @@ void MeshesBoxWidget::doStart() throw(fwTools::Failed)
 
     m_vtkBoxWidget->AddObserver( ::vtkCommand::InteractionEvent, m_boxWidgetCommand );
 
-    this->updateMeshMapFromComposite(composite);
+    this->updateMeshMapFromComposite(composite->getContainer());
     this->doUpdate();
 }
 
@@ -121,7 +124,7 @@ void MeshesBoxWidget::doUpdate() throw(fwTools::Failed)
     m_assembly->GetParts()->RemoveAllItems();
     if (!m_meshMap.empty())
     {
-        BOOST_FOREACH(MeshMapType::value_type elt, m_meshMap)
+        for(MeshMapType::value_type elt :  m_meshMap)
         {
             m_assembly->AddPart( elt.second );
         }
@@ -149,7 +152,7 @@ void MeshesBoxWidget::doStop() throw(fwTools::Failed)
 {
     ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
 
-    BOOST_FOREACH(::fwData::Composite::value_type elt, *composite)
+    for(::fwData::Composite::value_type elt :  *composite)
     {
         ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(elt.second);
         ::fwData::TransformationMatrix3D::sptr fieldTransform;
@@ -160,51 +163,12 @@ void MeshesBoxWidget::doStop() throw(fwTools::Failed)
     m_meshMap.clear();
 
     m_assembly->Delete();
-    m_assembly = 0;
+    m_assembly = nullptr;
 
     m_vtkBoxWidget->Off();
     m_vtkBoxWidget->RemoveObserver( m_boxWidgetCommand );
     m_vtkBoxWidget->Delete();
-    m_vtkBoxWidget = 0;
-}
-
-//-----------------------------------------------------------------------------
-
-void MeshesBoxWidget::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast( msg ) ;
-    if (compositeMsg)
-    {
-        if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::REMOVED_KEYS))
-        {
-            BOOST_FOREACH(::fwData::Composite::value_type elt, *compositeMsg->getRemovedKeys())
-            {
-                ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(elt.second);
-                m_meshMap[elt.first]->Delete();
-                m_meshMap.erase(elt.first);
-
-                ::fwData::TransformationMatrix3D::sptr fieldTransform;
-                fieldTransform = mesh->getField< ::fwData::TransformationMatrix3D > ("TransformMatrix");
-                m_connections[elt.first].disconnect();
-                m_connections.erase(elt.first);
-            }
-        }
-        if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::ADDED_KEYS))
-        {
-            this->updateMeshMapFromComposite(compositeMsg->getAddedKeys());
-        }
-        if (compositeMsg->hasEvent(::fwComEd::CompositeMsg::CHANGED_KEYS))
-        {
-            this->updateMeshMapFromComposite(compositeMsg->getNewChangedKeys());
-        }
-        this->updateMeshTransform();
-        this->doUpdate();
-    }
-    else if (msg->hasEvent(::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED))
-    {
-        this->updateMeshTransform();
-        this->doUpdate();
-    }
+    m_vtkBoxWidget = nullptr;
 }
 
 //-----------------------------------------------------------------------------
@@ -216,33 +180,34 @@ void MeshesBoxWidget::updateFromVtk()
     ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
 
     vtkBoxRepresentation *boxRep = vtkBoxRepresentation::SafeDownCast( m_vtkBoxWidget->GetRepresentation() );
-    vtkTransform * boxTransform = vtkTransform::New();
+    vtkTransform * boxTransform  = vtkTransform::New();
     boxRep->GetTransform(boxTransform);
 
-    BOOST_FOREACH(::fwData::Composite::value_type elt, *composite)
+    for(::fwData::Composite::value_type elt :  *composite)
     {
-        ::fwData::Mesh::sptr triangularMesh = ::fwData::Mesh::dynamicCast(elt.second);
+        ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(elt.second);
         ::fwData::TransformationMatrix3D::sptr fieldTransform;
-        SLM_ASSERT("Triangular mesh must have a TransformMatrix field", triangularMesh->getField("TransformMatrix"));
-        fieldTransform = triangularMesh->getField< ::fwData::TransformationMatrix3D > ("TransformMatrix");
+        SLM_ASSERT("Mesh must have a TransformMatrix field", mesh->getField("TransformMatrix"));
+        fieldTransform = mesh->getField< ::fwData::TransformationMatrix3D > ("TransformMatrix");
 
-        vtkTransform * transform = vtkTransform::New();
+        vtkTransform * transform           = vtkTransform::New();
         vtkLinearTransform * meshTransform = m_meshMap[elt.first]->GetUserTransform();
         transform->Concatenate(boxTransform);
         transform->Concatenate(meshTransform);
 
         vtkMatrix4x4* mat = transform->GetMatrix();
-        for(int lt=0; lt<4; lt++)
+        for(int lt = 0; lt<4; lt++)
         {
-            for(int ct=0; ct<4; ct++)
+            for(int ct = 0; ct<4; ct++)
             {
                 fieldTransform->setCoefficient(lt,ct, mat->GetElement(lt,ct));
             }
         }
 
-        ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-        msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED ) ;
-        ::fwServices::IEditionService::notify(this->getSptr(), fieldTransform, msg);
+        auto sig = fieldTransform->signal< ::fwData::Object::ModifiedSignalType >(
+            ::fwData::Object::s_MODIFIED_SIG);
+        sig->asyncEmit();
+
         transform->Delete();
     }
     m_vtkBoxWidget->AddObserver( ::vtkCommand::InteractionEvent, m_boxWidgetCommand );
@@ -251,9 +216,9 @@ void MeshesBoxWidget::updateFromVtk()
 
 //-----------------------------------------------------------------------------
 
-void MeshesBoxWidget::updateMeshMapFromComposite(::fwData::Composite::sptr composite)
+void MeshesBoxWidget::updateMeshMapFromComposite(::fwData::Composite::ContainerType objects)
 {
-    BOOST_FOREACH(::fwData::Composite::value_type elt, *composite)
+    for(::fwData::Composite::value_type elt :  objects)
     {
         ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(elt.second);
         vtkSmartPointer<vtkPolyData> vtkMesh = vtkSmartPointer<vtkPolyData>::New();
@@ -264,16 +229,20 @@ void MeshesBoxWidget::updateMeshMapFromComposite(::fwData::Composite::sptr compo
 
         vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
         transform->Identity();
-        for(int lt=0; lt<4; lt++)
+
+        vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New();
+
+        for(int lt = 0; lt<4; lt++)
         {
-            for(int ct=0; ct<4; ct++)
+            for(int ct = 0; ct<4; ct++)
             {
-                transform->GetMatrix()->SetElement(lt,ct, fieldTransform->getCoefficient(lt,ct));
+                matrix->SetElement(lt,ct, fieldTransform->getCoefficient(lt,ct));
             }
         }
 
+        transform->SetMatrix(matrix);
         vtkSmartPointer<vtkPolyDataMapper> meshMapper = vtkSmartPointer<vtkPolyDataMapper>::New();
-        meshMapper->SetInput(vtkMesh);
+        meshMapper->SetInputData(vtkMesh);
 
         vtkActor *meshActor = vtkActor::New();
         meshActor->SetMapper(meshMapper);
@@ -281,8 +250,8 @@ void MeshesBoxWidget::updateMeshMapFromComposite(::fwData::Composite::sptr compo
 
         if (m_meshMap.find(elt.first) == m_meshMap.end())
         {
-            ::fwCom::Connection connection = fieldTransform->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->
-                                connect(this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+            ::fwCom::Connection connection = fieldTransform->signal(::fwData::Object::s_MODIFIED_SIG)->
+                                             connect(this->slot(s_UPDATE_MATRICES_SLOT));
             m_connections[elt.first] = connection;
         }
 
@@ -295,7 +264,7 @@ void MeshesBoxWidget::updateMeshMapFromComposite(::fwData::Composite::sptr compo
 void MeshesBoxWidget::updateMeshTransform()
 {
     ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    BOOST_FOREACH(::fwData::Composite::value_type elt, *composite)
+    for(::fwData::Composite::value_type elt :  *composite)
     {
         ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(elt.second);
 
@@ -305,19 +274,85 @@ void MeshesBoxWidget::updateMeshTransform()
 
         vtkSmartPointer<vtkTransform> transform = vtkSmartPointer<vtkTransform>::New();
         transform->Identity();
-        for(int lt=0; lt<4; lt++)
+
+        vtkSmartPointer<vtkMatrix4x4> matrix = vtkSmartPointer<vtkMatrix4x4>::New();
+
+        for(int lt = 0; lt<4; lt++)
         {
-            for(int ct=0; ct<4; ct++)
+            for(int ct = 0; ct<4; ct++)
             {
-                transform->GetMatrix()->SetElement(lt,ct, fieldTransform->getCoefficient(lt,ct));
+                matrix->SetElement(lt,ct, fieldTransform->getCoefficient(lt,ct));
             }
         }
 
+        transform->SetMatrix(matrix);
         vtkActor *meshActor = m_meshMap[elt.first];
         meshActor->SetUserTransform(transform);
     }
 }
 
+
+//-----------------------------------------------------------------------------
+
+void MeshesBoxWidget::updateMatrices()
+{
+    this->updateMeshTransform();
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+void MeshesBoxWidget::addObjects(::fwData::Composite::ContainerType objects)
+{
+    this->updateMeshMapFromComposite(objects);
+    this->updateMeshTransform();
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+void MeshesBoxWidget::changeObjects(::fwData::Composite::ContainerType newObjects,
+                                    ::fwData::Composite::ContainerType oldObjects)
+{
+    this->updateMeshMapFromComposite(newObjects);
+    this->updateMeshTransform();
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+void MeshesBoxWidget::removeObjects(::fwData::Composite::ContainerType objects)
+{
+    for(::fwData::Composite::value_type elt :  objects)
+    {
+        ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(elt.second);
+        m_meshMap[elt.first]->Delete();
+        m_meshMap.erase(elt.first);
+
+        ::fwData::TransformationMatrix3D::sptr fieldTransform;
+        fieldTransform = mesh->getField< ::fwData::TransformationMatrix3D > ("TransformMatrix");
+        m_connections[elt.first].disconnect();
+        m_connections.erase(elt.first);
+    }
+
+    this->updateMeshTransform();
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType MeshesBoxWidget::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT ) );
+
+    return connections;
+}
+
 //-----------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Model.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Model.cpp
deleted file mode 100644
index 0a2f3ca..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Model.cpp
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwData/Model.hpp>
-#include <fwData/Material.hpp>
-
-#include <fwComEd/ModelMsg.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include "visuVTKAdaptor/Model.hpp"
-#include "visuVTKAdaptor/TriangularMesh.hpp"
-
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Model, ::fwData::Model ) ;
-
-namespace visuVTKAdaptor
-{
-
-//------------------------------------------------------------------------------
-
-Model::Model() throw()
-{
-     //addNewHandledEvent( ::fwComEd::ModelMsg::NEW_MODEL );
-}
-
-//------------------------------------------------------------------------------
-
-Model::~Model() throw()
-{
-
-}
-
-//------------------------------------------------------------------------------
-
-void Model::configuring() throw(fwTools::Failed)
-{
-
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Model::doStart() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void Model::doUpdate() throw(fwTools::Failed)
-{
-    doStop();
-
-    ::fwData::Model::sptr model = this->getObject< ::fwData::Model >();
-    ::fwData::Model::Container::iterator iter;
-    ::fwData::Model::Container mapModel = model->getCRefMap();
-
-    for (iter = mapModel.begin(); iter != mapModel.end(); ++iter)
-    {
-        ::fwRenderVTK::IVtkAdaptorService::sptr service =
-            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
-                 ( iter->first, "::visuVTKAdaptor::TriangularMesh" );
-        SLM_ASSERT("AdaptorService", service);
-
-        ::visuVTKAdaptor::TriangularMesh::sptr trianAdaptor =
-                ::visuVTKAdaptor::TriangularMesh::dynamicCast(service);
-        SLM_ASSERT("dynamicCast TriangularMesh fails", trianAdaptor);
-
-        trianAdaptor->setMaterial(iter->second);
-        trianAdaptor->setTransformId( this->getTransformId() );
-        trianAdaptor->setRenderId( this->getRenderId() );
-        trianAdaptor->setPickerId( this->getPickerId() );
-        trianAdaptor->setRenderService(this->getRenderService());
-        trianAdaptor->setAutoRender( this->getAutoRender() );
-        trianAdaptor->start();
-
-        this->registerService(trianAdaptor);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Model::doSwap() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void Model::doStop() throw(fwTools::Failed)
-{
-    this->unregisterServices();
-}
-
-//------------------------------------------------------------------------------
-
-void Model::doReceive( ::fwServices::ObjectMsg::csptr _msg) throw(fwTools::Failed)
-{
-    ::fwComEd::ModelMsg::csptr msg = ::fwComEd::ModelMsg::dynamicConstCast(_msg);
-
-    if ( msg && msg->hasEvent( ::fwComEd::ModelMsg::NEW_MODEL ) )
-    {
-        doUpdate();
-    }
-}
-
-
-
-} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ModelSeries.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ModelSeries.cpp
index 93d8d1c..4be7d0a 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ModelSeries.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ModelSeries.cpp
@@ -1,70 +1,84 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/Mesh.hpp"
+#include "visuVTKAdaptor/ModelSeries.hpp"
+#include "visuVTKAdaptor/Reconstruction.hpp"
+#include "visuVTKAdaptor/Texture.hpp"
 
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
-#include <fwData/Boolean.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/op/Add.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwData/Boolean.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
 
 #include <fwMedData/ModelSeries.hpp>
 
-#include <fwComEd/ModelSeriesMsg.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
 
 #include <vtkActor.h>
 #include <vtkPolyDataMapper.h>
 
-#include "visuVTKAdaptor/Reconstruction.hpp"
-#include "visuVTKAdaptor/ModelSeries.hpp"
-
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ModelSeries, ::fwMedData::ModelSeries ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ModelSeries, ::fwMedData::ModelSeries );
 
 namespace visuVTKAdaptor
 {
 
+const ::fwCom::Signals::SignalKeyType ModelSeries::s_TEXTURE_APPLIED_SIG = "textureApplied";
 
-ModelSeries::ModelSeries() throw()
+const ::fwCom::Slots::SlotKeyType ModelSeries::s_UPDATE_NORMAL_MODE_SLOT   = "updateNormalMode";
+const ::fwCom::Slots::SlotKeyType ModelSeries::s_SHOW_RECONSTRUCTIONS_SLOT = "showReconstructions";
+
+//------------------------------------------------------------------------------
+
+ModelSeries::ModelSeries() throw() :
+    m_sigTextureApplied(TextureAppliedSignalType::New()),
+    m_autoResetCamera(true)
 {
     m_clippingPlanes = "";
-    m_autoResetCamera = true;
+
+    ::fwCom::HasSignals::m_signals(s_TEXTURE_APPLIED_SIG, m_sigTextureApplied);
+
+    m_slotUpdateNormalMode    = ::fwCom::newSlot(&ModelSeries::updateNormalMode, this);
+    m_slotShowReconstructions = ::fwCom::newSlot(&ModelSeries::showReconstructions, this);
+    ::fwCom::HasSlots::m_slots(s_UPDATE_NORMAL_MODE_SLOT, m_slotUpdateNormalMode)
+        (s_SHOW_RECONSTRUCTIONS_SLOT, m_slotShowReconstructions);
+
+    ::fwCom::HasSlots::m_slots.setWorker( m_associatedWorker );
 }
 
 //------------------------------------------------------------------------------
 
 ModelSeries::~ModelSeries() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void ModelSeries::configuring() throw(fwTools::Failed)
+void ModelSeries::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
 
     this->setClippingPlanes( m_configuration->getAttributeValue("clippingplanes") );
 
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
-
     if (m_configuration->hasAttribute("autoresetcamera") )
     {
         std::string autoresetcamera = m_configuration->getAttributeValue("autoresetcamera");
         m_autoResetCamera = (autoresetcamera == "yes");
     }
+
+    if ( m_configuration->hasAttribute("texture") )
+    {
+        m_textureAdaptorUID = m_configuration->getAttributeValue("texture");
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -81,14 +95,29 @@ void ModelSeries::doUpdate() throw(fwTools::Failed)
     ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
 
     doStop();
+
+    // doStop() disconnects everything, we have to restore connection with the data
+    m_connections.connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
+
     bool showRec;
     showRec = modelSeries->getField("ShowReconstructions", ::fwData::Boolean::New(true))->value();
 
-    BOOST_FOREACH( ::fwData::Reconstruction::sptr reconstruction, modelSeries->getReconstructionDB() )
+    if(!m_textureAdaptorUID.empty())
+    {
+        ::fwRenderVTK::SRender::sptr renderService      = this->getRenderService();
+        ::fwRenderVTK::IVtkAdaptorService::sptr adaptor = renderService->getAdaptor(m_textureAdaptorUID);
+        ::visuVTKAdaptor::Texture::sptr textureAdaptor  = ::visuVTKAdaptor::Texture::dynamicCast(adaptor);
+
+        SLM_ASSERT("textureAdaptor is NULL", textureAdaptor);
+        m_connections.connect(this->getSptr(), s_TEXTURE_APPLIED_SIG, textureAdaptor,
+                              ::visuVTKAdaptor::Texture::s_APPLY_TEXTURE_SLOT);
+    }
+
+    for( ::fwData::Reconstruction::sptr reconstruction :  modelSeries->getReconstructionDB() )
     {
         ::fwRenderVTK::IVtkAdaptorService::sptr service =
-                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
-        ( reconstruction, "::visuVTKAdaptor::Reconstruction" );
+            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
+                ( reconstruction, "::visuVTKAdaptor::Reconstruction" );
         SLM_ASSERT("service not instanced", service);
 
         service->setTransformId( this->getTransformId() );
@@ -97,13 +126,31 @@ void ModelSeries::doUpdate() throw(fwTools::Failed)
         service->setRenderService(this->getRenderService());
         service->setAutoRender( this->getAutoRender() );
         ::visuVTKAdaptor::Reconstruction::sptr renconstructionAdaptor =
-                ::visuVTKAdaptor::Reconstruction::dynamicCast(service);
+            ::visuVTKAdaptor::Reconstruction::dynamicCast(service);
         renconstructionAdaptor->setClippingPlanes( m_clippingPlanes );
         renconstructionAdaptor->setAutoResetCamera(m_autoResetCamera);
         service->start();
         renconstructionAdaptor->setForceHide( !showRec );
 
         this->registerService(service);
+
+
+        if(!m_textureAdaptorUID.empty())
+        {
+            ::fwData::Mesh::sptr mesh = reconstruction->getMesh();
+            SLM_ASSERT("Missing mesh", mesh);
+
+            ::fwServices::registry::ObjectService::ServiceVectorType servicesVector;
+            servicesVector = ::fwServices::OSR::getServices(mesh, "::visuVTKAdaptor::Mesh");
+            SLM_ASSERT("Missing material adaptor", !servicesVector.empty());
+
+            ::visuVTKAdaptor::Mesh::sptr meshAdaptor = ::visuVTKAdaptor::Mesh::dynamicCast(*servicesVector.begin());
+
+            ::fwData::Material::sptr material = meshAdaptor->getMaterial();
+            SLM_ASSERT("Missing material", material);
+
+            m_sigTextureApplied->asyncEmit(material);
+        }
     }
 }
 
@@ -118,44 +165,61 @@ void ModelSeries::doSwap() throw(fwTools::Failed)
 
 void ModelSeries::doStop() throw(fwTools::Failed)
 {
+    m_connections.disconnect();
     this->unregisterServices();
 }
 
 //------------------------------------------------------------------------------
 
-void ModelSeries::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void ModelSeries::updateNormalMode(std::uint8_t mode, std::string recID)
 {
-    if ( msg->hasEvent(::fwComEd::ModelSeriesMsg::SHOW_RECONSTRUCTIONS) )
+    for( ServiceVector::value_type service :  m_subServices)
     {
-        ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
-        bool showRec;
-        showRec = modelSeries->getField("ShowReconstructions", ::fwData::Boolean::New(true))->value();
-
-        BOOST_FOREACH( ServiceVector::value_type service, m_subServices)
+        if(!service.expired())
         {
-            if(!service.expired())
+            ::visuVTKAdaptor::Reconstruction::sptr renconstructionAdaptor
+                = ::visuVTKAdaptor::Reconstruction::dynamicCast(service.lock());
+            if (renconstructionAdaptor && renconstructionAdaptor->getObject()->getID() == recID)
             {
-                ::visuVTKAdaptor::Reconstruction::sptr renconstructionAdaptor
-                 = ::visuVTKAdaptor::Reconstruction::dynamicCast(service.lock());
-                if (renconstructionAdaptor)
-                {
-                    renconstructionAdaptor->setForceHide( !showRec );
-                }
+                renconstructionAdaptor->updateNormalMode(mode);
+                break;
             }
         }
-
-        OSLM_INFO( "Receive event ShowReconstruction : " << showRec );
-        this->setVtkPipelineModified();
-    }
-    else if ( msg->hasEvent(::fwComEd::ModelSeriesMsg::ADD_RECONSTRUCTION) )
-    {
-        this->doUpdate();
     }
-    else if ( msg->hasEvent(::fwComEd::ModelSeriesMsg::REMOVED_RECONSTRUCTIONS) )
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeries::showReconstructions(bool show)
+{
+    ::fwMedData::ModelSeries::sptr modelSeries = this->getObject< ::fwMedData::ModelSeries >();
+
+    for( ServiceVector::value_type service :  m_subServices)
     {
-        this->doStop();
+        if(!service.expired())
+        {
+            ::visuVTKAdaptor::Reconstruction::sptr renconstructionAdaptor
+                = ::visuVTKAdaptor::Reconstruction::dynamicCast(service.lock());
+            if (renconstructionAdaptor)
+            {
+                renconstructionAdaptor->setForceHide( !show );
+            }
+        }
     }
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ModelSeries::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG, s_UPDATE_SLOT ) );
 
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoMPR.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoMPR.cpp
index bbf9324..24ebb79 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoMPR.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoMPR.cpp
@@ -1,49 +1,63 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/NegatoMPR.hpp"
 
-#include <fwTools/fwID.hpp>
+#include "visuVTKAdaptor/NegatoOneSlice.hpp"
+#include "visuVTKAdaptor/NegatoSlicingInteractor.hpp"
+#include "visuVTKAdaptor/NegatoWindowingInteractor.hpp"
+#include "visuVTKAdaptor/SlicesCursor.hpp"
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
+#include <fwData/Boolean.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Integer.hpp>
 #include <fwData/String.hpp>
-#include <fwData/Boolean.hpp>
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include "visuVTKAdaptor/NegatoWindowingInteractor.hpp"
-#include "visuVTKAdaptor/NegatoOneSlice.hpp"
-#include "visuVTKAdaptor/NegatoMPR.hpp"
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/Proxy.hpp>
 
+#include <fwTools/fwID.hpp>
+
+#include <string>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoMPR, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoMPR, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT = "updateSliceType";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_MODE_SLOT = "updateSliceMode";
+static const ::fwCom::Slots::SlotKeyType s_SHOW_SLICE_SLOT        = "showSlice";
+static const ::fwCom::Slots::SlotKeyType s_SET_CROSS_SCALE_SLOT   = "setCrossScale";
+
+static const std::string s_slicingStartingProxy = "slicingStartingProxy";
+static const std::string s_slicingStoppingProxy = "slicingStoppingProxy";
 
 //------------------------------------------------------------------------------
 
 NegatoMPR::NegatoMPR() throw() :
-        m_3dModeEnabled ( ::boost::logic::indeterminate ),
-        m_sliceMode(THREE_SLICES),
-        m_backupedSliceMode(THREE_SLICES)
+    m_allowAlphaInTF(false),
+    m_interpolation(false),
+    m_actorOpacity(1.0),
+    m_3dModeEnabled ( ::boost::logic::indeterminate ),
+    m_sliceMode(THREE_SLICES),
+    m_backupedSliceMode(THREE_SLICES)
 {
-    m_allowAlphaInTF = false;
-    m_interpolation  = true;
-
-    //addNewHandledEvent("SLICE_MODE");
-    //addNewHandledEvent("SCAN_SHOW");
-    //addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &NegatoMPR::updateSliceType, this);
+    newSlot(s_UPDATE_SLICE_MODE_SLOT, &NegatoMPR::updateSliceMode, this);
+    newSlot(s_SHOW_SLICE_SLOT, &NegatoMPR::showSlice, this);
+    newSlot(s_SET_CROSS_SCALE_SLOT, &NegatoMPR::setCrossScale, this);
 }
 
 //------------------------------------------------------------------------------
@@ -64,6 +78,33 @@ void NegatoMPR::doStart() throw(fwTools::Failed)
 
 void NegatoMPR::doStop() throw(fwTools::Failed)
 {
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    //disconnect proxy
+    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+    for (auto srv : this->getRegisteredServices())
+    {
+        NegatoSlicingInteractor::sptr negatoSlicingInteractor = NegatoSlicingInteractor::dynamicCast(srv.lock());
+        SlicesCursor::sptr sliceCursor                        = SlicesCursor::dynamicCast(srv.lock());
+        if (negatoSlicingInteractor)
+        {
+            proxy->disconnect(m_slicingStartingProxy, negatoSlicingInteractor->signal(
+                                  NegatoSlicingInteractor::s_SLICING_STARTED_SIG));
+            proxy->disconnect(m_slicingStoppingProxy, negatoSlicingInteractor->signal(
+                                  NegatoSlicingInteractor::s_SLICING_STOPPED_SIG));
+        }
+
+        if (sliceCursor)
+        {
+            proxy->disconnect(m_slicingStartingProxy, sliceCursor->slot(
+                                  SlicesCursor::s_SHOW_FULL_CROSS_SLOT));
+
+
+            proxy->disconnect(m_slicingStoppingProxy, sliceCursor->slot(
+                                  SlicesCursor::s_SHOW_NORMAL_CROSS_SLOT));
+        }
+    }
+
     this->unregisterServices();
 }
 
@@ -72,7 +113,7 @@ void NegatoMPR::doStop() throw(fwTools::Failed)
 void NegatoMPR::doSwap() throw(fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
 
     if ( imageIsValid)
     {
@@ -82,7 +123,7 @@ void NegatoMPR::doSwap() throw(fwTools::Failed)
         }
         else
         {
-            BOOST_FOREACH( ServiceVector::value_type service, m_subServices)
+            for( ServiceVector::value_type service :  m_subServices)
             {
                 OSLM_ASSERT("sub services expired in service : " << this->getSptr()->getID(), !service.expired());
                 service.lock()->swap(image);
@@ -101,134 +142,146 @@ void NegatoMPR::doSwap() throw(fwTools::Failed)
 void NegatoMPR::doUpdate() throw(::fwTools::Failed)
 {
     this->doStop();
-    if(!this->getSliceMode() == NO_SLICE)
+
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+
+    if ( imageIsValid)
     {
-        if(this->getSliceMode() == ONE_SLICE)
+        if(this->getSliceMode() != NO_SLICE)
+        {
+            if(this->getSliceMode() == ONE_SLICE)
+            {
+                this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", m_orientation);
+            }
+            else if(this->getSliceMode() == THREE_SLICES)
+            {
+                this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", X_AXIS);
+                this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", Y_AXIS);
+                this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", Z_AXIS);
+            }
+
+            ::fwRenderVTK::IVtkAdaptorService::sptr sliceCursor;
+            ::fwRenderVTK::IVtkAdaptorService::sptr negatoSlicingInteractor;
+            this->addAdaptor("::visuVTKAdaptor::NegatoWindowingInteractor");
+            negatoSlicingInteractor = this->addAdaptor("::visuVTKAdaptor::NegatoSlicingInteractor", m_orientation);
+            sliceCursor             = this->addAdaptor("::visuVTKAdaptor::SlicesCursor", m_orientation);
+            this->addAdaptor("::visuVTKAdaptor::ProbeCursor", m_orientation);
+
+            /// Connect slicing signals/slots from NegatoSlicingInteractor to SlicesCursor using the image slicing proxy
+            ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+            m_slicingStartingProxy                    = image->getID() + s_slicingStartingProxy;
+            m_slicingStoppingProxy                    = image->getID() + s_slicingStoppingProxy;
+            proxy->connect(m_slicingStartingProxy, negatoSlicingInteractor->signal(
+                               NegatoSlicingInteractor::s_SLICING_STARTED_SIG));
+            proxy->connect(m_slicingStartingProxy, sliceCursor->slot(
+                               SlicesCursor::s_SHOW_FULL_CROSS_SLOT));
+
+            proxy->connect(m_slicingStoppingProxy, negatoSlicingInteractor->signal(
+                               NegatoSlicingInteractor::s_SLICING_STOPPED_SIG));
+            proxy->connect(m_slicingStoppingProxy, sliceCursor->slot(
+                               SlicesCursor::s_SHOW_NORMAL_CROSS_SLOT));
+            m_sliceCursor = sliceCursor;
+        }
+        if(this->is3dModeEnabled())
         {
-            this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", m_orientation);
+            this->addAdaptor("::visuVTKAdaptor::Medical3DCamera", m_orientation);
         }
-        else if(this->getSliceMode() == THREE_SLICES)
+        else if(!this->is3dModeEnabled())
         {
-            this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", X_AXIS);
-            this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", Y_AXIS);
-            this->addAdaptor("::visuVTKAdaptor::NegatoOneSlice", Z_AXIS);
+            this->addAdaptor("::visuVTKAdaptor::SliceFollowerCamera", m_orientation);
         }
-
-        this->addAdaptor("::visuVTKAdaptor::NegatoWindowingInteractor");
-        this->addAdaptor("::visuVTKAdaptor::NegatoSlicingInteractor", m_orientation);
-        this->addAdaptor("::visuVTKAdaptor::SlicesCursor", m_orientation);
-        this->addAdaptor("::visuVTKAdaptor::ProbeCursor", m_orientation);
-    }
-    if(this->is3dModeEnabled())
-    {
-        this->addAdaptor("::visuVTKAdaptor::Medical3DCamera", m_orientation);
+        else
+        {
+            SLM_TRACE("No 2D/3D mode specified.");
+        }
+        this->setVtkPipelineModified();
     }
-    else if(!this->is3dModeEnabled())
+
+}
+
+//-----------------------------------------------------------------------------
+
+void NegatoMPR::updateSliceType(int from, int to)
+{
+    if( to == static_cast<int>(m_orientation) )
     {
-        this->addAdaptor("::visuVTKAdaptor::SliceFollowerCamera", m_orientation);
+        setOrientation( static_cast< Orientation >( from ));
     }
-    else
+    else if(from == static_cast<int>(m_orientation))
     {
-        SLM_TRACE("No 2D/3D mode specified.");
+        setOrientation( static_cast< Orientation >( to ));
     }
-    this->setVtkPipelineModified();
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void NegatoMPR::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
+void NegatoMPR::updateSliceMode(int mode)
 {
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast( msg );
-
-    if ( imageMsg && imageMsg->hasEvent( "SLICE_MODE"))
+    switch(mode)
     {
-        ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo("SLICE_MODE");
-        SLM_ASSERT("dataInfo is missing", dataInfo);
-        SLM_ASSERT("m_relatedServiceId is missing", dataInfo->getField( ::fwComEd::Dictionary::m_relatedServiceId ) );
-        std::string servId = dataInfo->getField< ::fwData::String >(::fwComEd::Dictionary::m_relatedServiceId)->value();
-        if( servId ==   this->getSptr()->getID() )
+        case 0:
         {
-            ::fwData::Integer::csptr integer = ::fwData::Integer::dynamicConstCast(dataInfo);
-            SLM_ASSERT("dataInfo is missing", integer);
-            if(integer->value()== 0)
-            {
-                this->setSliceMode(NO_SLICE);
-            }
-            else if(integer->value()== 1)
-            {
-                this->setSliceMode(ONE_SLICE);
-            }
-            else if(integer->value()==3)
-            {
-                this->setSliceMode(THREE_SLICES);
-            }
-            else if(integer->value()==-1)
-            {
-                SLM_FATAL("not yet implemented :(");
-            }
-            else
-            {
-                OSLM_FATAL("Unknown slice mode "<< integer->value());
-            }
-            m_backupedSliceMode = this->getSliceMode();
-            this->doUpdate();
+            this->setSliceMode(NO_SLICE);
+            break;
         }
-    }
-    else if( imageMsg && imageMsg->hasEvent( "SCAN_SHOW"))
-    {
-        ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo("SCAN_SHOW");
-        SLM_ASSERT("dataInfo is missing", dataInfo);
-        SLM_ASSERT("m_relatedServiceId is missing", dataInfo->getField( ::fwComEd::Dictionary::m_relatedServiceId ) );
-        std::string servId = dataInfo->getField< ::fwData::String >(::fwComEd::Dictionary::m_relatedServiceId)->value();
-        if( servId ==   this->getSptr()->getID() )
+        case 1:
         {
-            ::fwData::Boolean::csptr integer = ::fwData::Boolean::dynamicConstCast(dataInfo);
-            if(integer->value())
-            {
-                this->setSliceMode(m_backupedSliceMode);
-            }
-            else
-            {
-                m_backupedSliceMode = this->getSliceMode();
-                this->setSliceMode(NO_SLICE);
-            }
-            this->doUpdate();
+            this->setSliceMode(ONE_SLICE);
+            break;
         }
-    }
-    else if (imageMsg && imageMsg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE ))
-    {
-        ::fwData::Object::csptr cObjInfo = imageMsg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-        ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-        ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-        int fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] )->value();
-        int toSliceType =   ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] )->value();
-
-        if( toSliceType == static_cast<int>(m_orientation) )
+        case 3:
         {
-            setOrientation( static_cast< Orientation >( fromSliceType ));
+            this->setSliceMode(THREE_SLICES);
+            break;
         }
-        else if(fromSliceType == static_cast<int>(m_orientation))
+        default:
         {
-            setOrientation( static_cast< Orientation >( toSliceType ));
+            FW_RAISE("Slice mode " << mode << " is not implemented.");
         }
     }
+    m_backupedSliceMode = this->getSliceMode();
+    this->doUpdate();
+}
+//-----------------------------------------------------------------------------
+
+void NegatoMPR::showSlice(bool isShown)
+{
+    if(isShown)
+    {
+        this->setSliceMode(m_backupedSliceMode);
+    }
+    else
+    {
+        m_backupedSliceMode = this->getSliceMode();
+        this->setSliceMode(NO_SLICE);
+    }
+    this->doUpdate();
+}
+
+//-----------------------------------------------------------------------------
+
+void NegatoMPR::setCrossScale(double scale)
+{
+    if (!m_sliceCursor.expired())
+    {
+        ::fwCom::SlotBase::sptr slot = m_sliceCursor.lock()->slot(s_SET_CROSS_SCALE_SLOT);
+        slot->asyncRun(scale);
+    }
 }
 
 //------------------------------------------------------------------------------
 
-void NegatoMPR::configuring() throw(fwTools::Failed)
+void NegatoMPR::doConfigure() throw(fwTools::Failed)
 {
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
 
     if (m_configuration->hasAttribute("mode"))
     {
         std::string value(m_configuration->getAttributeValue("mode"));
         std::transform(value.begin(), value.end(), value.begin(), tolower);
-        OSLM_ASSERT("Sorry, bad value "<<value<<" for attribute mode.",
-                value == "3d" || value == "2d");
+        OSLM_ASSERT("Bad value "<<value<<" for attribute mode, it should either be '2d' or '3d'.",
+                    value == "3d" || value == "2d");
         this->set3dMode(value == "3d");
     }
     if (m_configuration->hasAttribute("slices"))
@@ -252,23 +305,19 @@ void NegatoMPR::configuring() throw(fwTools::Failed)
     }
     if(m_configuration->hasAttribute("sliceIndex"))
     {
-         std::string  orientation = m_configuration->getAttributeValue("sliceIndex");
-         if(orientation == "axial" )
-         {
-             m_orientation = Z_AXIS;
-         }
-         else if(orientation == "frontal" )
-         {
-             m_orientation = Y_AXIS;
-         }
-         else if(orientation == "sagittal" )
-         {
-             m_orientation = X_AXIS;
-         }
-    }
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
+        std::string orientation = m_configuration->getAttributeValue("sliceIndex");
+        if(orientation == "axial" )
+        {
+            m_orientation = Z_AXIS;
+        }
+        else if(orientation == "frontal" )
+        {
+            m_orientation = Y_AXIS;
+        }
+        else if(orientation == "sagittal" )
+        {
+            m_orientation = X_AXIS;
+        }
     }
     if(m_configuration->hasAttribute("tfalpha") )
     {
@@ -282,12 +331,16 @@ void NegatoMPR::configuring() throw(fwTools::Failed)
     {
         this->setVtkImageSourceId( m_configuration->getAttributeValue("vtkimagesource") );
     }
+    if(m_configuration->hasAttribute("actorOpacity") )
+    {
+        m_actorOpacity = ::boost::lexical_cast<double>(m_configuration->getAttributeValue("actorOpacity"));
+    }
     this->parseTFConfig( m_configuration );
 }
 
 //------------------------------------------------------------------------------
 
-void  NegatoMPR::setSliceMode(SliceMode sliceMode)
+void NegatoMPR::setSliceMode(SliceMode sliceMode)
 {
     if(m_sliceMode != sliceMode)
     {
@@ -297,14 +350,14 @@ void  NegatoMPR::setSliceMode(SliceMode sliceMode)
 
 //------------------------------------------------------------------------------
 
-NegatoMPR::SliceMode NegatoMPR::getSliceMode()
+NegatoMPR::SliceMode NegatoMPR::getSliceMode() const
 {
     return m_sliceMode;
 }
 
 //------------------------------------------------------------------------------
 
-::boost::logic::tribool NegatoMPR::is3dModeEnabled()
+::boost::logic::tribool NegatoMPR::is3dModeEnabled() const
 {
     return m_3dModeEnabled;
 }
@@ -318,7 +371,7 @@ void NegatoMPR::set3dMode( bool enabled )
 
 //------------------------------------------------------------------------------
 
-void NegatoMPR::addAdaptor(std::string adaptor, int axis)
+::fwRenderVTK::IVtkAdaptorService::sptr NegatoMPR::addAdaptor(std::string adaptor, int axis)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     ::fwRenderVTK::IVtkAdaptorService::sptr service;
@@ -327,8 +380,8 @@ void NegatoMPR::addAdaptor(std::string adaptor, int axis)
     {
         service = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( image, adaptor );
         SLM_ASSERT("service not instanced", service);
-        ::fwComEd::helper::MedicalImageAdaptor::sptr adaptorSrv =
-                ::fwComEd::helper::MedicalImageAdaptor::dynamicCast(service);
+        ::fwDataTools::helper::MedicalImageAdaptor::sptr adaptorSrv =
+            ::fwDataTools::helper::MedicalImageAdaptor::dynamicCast(service);
         SLM_ASSERT("adaptorSrv not instanced", adaptorSrv);
         adaptorSrv->setOrientation((Orientation) axis);
     }
@@ -355,6 +408,7 @@ void NegatoMPR::addAdaptor(std::string adaptor, int axis)
         }
         negatoAdaptor->setSelectedTFKey( this->getSelectedTFKey() );
         negatoAdaptor->setTFSelectionFwID( this->getTFSelectionFwID() );
+        negatoAdaptor->setActorOpacity(m_actorOpacity);
     }
     else if (negatoWindowingAdaptor)
     {
@@ -371,6 +425,19 @@ void NegatoMPR::addAdaptor(std::string adaptor, int axis)
     service->start();
     service->update();
     this->registerService(service);
+
+    return service;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType NegatoMPR::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoOneSlice.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoOneSlice.cpp
index ef79f73..74483a6 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoOneSlice.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoOneSlice.cpp
@@ -1,63 +1,68 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
+#include "visuVTKAdaptor/NegatoOneSlice.hpp"
 
-#include <fwServices/Base.hpp>
+#include "visuVTKAdaptor/Image.hpp"
+#include "visuVTKAdaptor/ImageSlice.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwData/Image.hpp>
-#include <fwData/TransferFunction.hpp>
 #include <fwData/Color.hpp>
+#include <fwData/Image.hpp>
 #include <fwData/String.hpp>
+#include <fwData/TransferFunction.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+
 #include <fwVtkIO/vtk.hpp>
 
-#include <vtkImageData.h>
 #include <vtkImageBlend.h>
-
-#include "visuVTKAdaptor/Image.hpp"
-#include "visuVTKAdaptor/ImageSlice.hpp"
-#include "visuVTKAdaptor/NegatoOneSlice.hpp"
+#include <vtkImageData.h>
+#include <vtkImageMapToColors.h>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoOneSlice, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoOneSlice, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT = "updateSliceType";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_IMAGE_SLOT      = "updateImage";
 
 //------------------------------------------------------------------------------
 
-NegatoOneSlice::NegatoOneSlice() throw()
+NegatoOneSlice::NegatoOneSlice() throw() :
+    m_manageImageSource(false),
+    m_imageSource(nullptr),
+    m_allowAlphaInTF(false),
+    m_interpolation(true),
+    m_actorOpacity (1.0)
 {
-    SLM_TRACE_FUNC();
-    m_allowAlphaInTF = false;
-    m_interpolation  = true;
-    m_manageImageSource = false;
-
-    m_imageSource = NULL;
-
-    // Manage events
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER            );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE         );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::MODIFIED          );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &NegatoOneSlice::updateSliceType, this);
+    newSlot(s_UPDATE_IMAGE_SLOT, &NegatoOneSlice::updateImage, this);
 }
 
 //------------------------------------------------------------------------------
 
 NegatoOneSlice::~NegatoOneSlice() throw()
 {
-    SLM_TRACE_FUNC();
     this->unregisterServices();
     this->cleanImageSource();
 }
 
 //------------------------------------------------------------------------------
+
 vtkObject* NegatoOneSlice::getImageSource()
 {
     if ( !m_imageSource )
@@ -69,7 +74,7 @@ vtkObject* NegatoOneSlice::getImageSource()
         }
         else
         {
-            m_imageSource = vtkImageData::New();
+            m_imageSource       = vtkImageMapToColors::New();
             m_manageImageSource = true;
         }
     }
@@ -84,7 +89,7 @@ void NegatoOneSlice::cleanImageSource()
     if (m_manageImageSource && m_imageSource)
     {
         m_imageSource->Delete();
-        m_imageSource = NULL;
+        m_imageSource = nullptr;
     }
 }
 
@@ -92,7 +97,7 @@ void NegatoOneSlice::cleanImageSource()
 
 ::fwRenderVTK::IVtkAdaptorService::sptr NegatoOneSlice::getImageSliceAdaptor()
 {
-    ::fwRenderVTK::IVtkAdaptorService::sptr imageSliceAdaptor;
+    ::fwRenderVTK::IVtkAdaptorService::sptr adaptor;
 
     if (m_imageSliceAdaptor.expired())
     {
@@ -101,74 +106,72 @@ void NegatoOneSlice::cleanImageSource()
         ::fwData::Composite::sptr sceneComposite;
 
         image          = this->getObject< ::fwData::Image >();
-        sceneComposite = this->getRenderService()->getObject< ::fwData::Composite >();
-
-        imageSliceAdaptor = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
-                sceneComposite,
-                "::visuVTKAdaptor::ImageSlice"
-                );
-        imageSliceAdaptor->setRenderService(this->getRenderService());
-        imageSliceAdaptor->setRenderId( this->getRenderId() );
-        imageSliceAdaptor->setPickerId( this->getPickerId() );
-        imageSliceAdaptor->setTransformId( this->getTransformId() );
-        imageSliceAdaptor->setAutoRender( this->getAutoRender() );
-
-
-        ::visuVTKAdaptor::ImageSlice::sptr ISA;
-        ISA = ::visuVTKAdaptor::ImageSlice::dynamicCast(imageSliceAdaptor);
-        ISA->setVtkImageSource(this->getImageSource());
-        ISA->setCtrlImage(image);
-        ISA->setInterpolation(m_interpolation);
-
-       ::fwComEd::helper::MedicalImageAdaptor::dynamicCast(ISA)->setOrientation((Orientation) m_orientation);
-
-        m_imageSliceAdaptor = imageSliceAdaptor;
-        this->registerService(imageSliceAdaptor);
+        sceneComposite = this->getRenderService()->getComposite();
+
+        adaptor = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
+            sceneComposite,
+            "::visuVTKAdaptor::ImageSlice");
+        adaptor->setRenderService(this->getRenderService());
+        adaptor->setRenderId( this->getRenderId() );
+        adaptor->setPickerId( this->getPickerId() );
+        adaptor->setTransformId( this->getTransformId() );
+        adaptor->setAutoRender( this->getAutoRender() );
+
+        ::visuVTKAdaptor::ImageSlice::sptr imgSliceAdaptor;
+        imgSliceAdaptor = ::visuVTKAdaptor::ImageSlice::dynamicCast(adaptor);
+        imgSliceAdaptor->setVtkImageSource(this->getImageSource());
+        imgSliceAdaptor->setCtrlImage(image);
+        imgSliceAdaptor->setInterpolation(m_interpolation);
+        imgSliceAdaptor->setActorOpacity(m_actorOpacity);
+        imgSliceAdaptor->setOrientation((Orientation) m_orientation);
+
+        m_imageSliceAdaptor = adaptor;
+        this->registerService(adaptor);
     }
     else
     {
-        imageSliceAdaptor = m_imageSliceAdaptor.lock();
+        adaptor = m_imageSliceAdaptor.lock();
     }
-    return imageSliceAdaptor;
+    return adaptor;
 }
 
 //------------------------------------------------------------------------------
+
 ::fwRenderVTK::IVtkAdaptorService::sptr NegatoOneSlice::getImageAdaptor()
 {
-    ::fwRenderVTK::IVtkAdaptorService::sptr imageAdaptor;
+    ::fwRenderVTK::IVtkAdaptorService::sptr adaptor;
 
     if (m_imageAdaptor.expired())
     {
         OSLM_TRACE(this->getID() << ": Create Image Adaptor Service");
         ::fwData::Image::sptr image;
-        image = this->getObject< ::fwData::Image >();
-        imageAdaptor = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
-                image,
-                "::visuVTKAdaptor::Image"
-                );
-        imageAdaptor->setRenderService(this->getRenderService());
-        imageAdaptor->setRenderId( this->getRenderId() );
-        imageAdaptor->setPickerId( this->getPickerId() );
-        imageAdaptor->setTransformId( this->getTransformId() );
-        imageAdaptor->setAutoRender( this->getAutoRender() );
-
-        ::visuVTKAdaptor::Image::sptr IA;
-        IA = ::visuVTKAdaptor::Image::dynamicCast(imageAdaptor);
-        IA->setVtkImageRegister(this->getImageSource());
-        IA->setSelectedTFKey( this->getSelectedTFKey() );
-        IA->setTFSelectionFwID( this->getTFSelectionFwID() );
-
-        IA->setImageOpacity(1.);
-        IA->setAllowAlphaInTF(m_allowAlphaInTF);
-
-        m_imageAdaptor = imageAdaptor;
-        this->registerService(imageAdaptor);
+        image   = this->getObject< ::fwData::Image >();
+        adaptor = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
+            image,
+            "::visuVTKAdaptor::Image");
+        adaptor->setRenderService(this->getRenderService());
+        adaptor->setRenderId( this->getRenderId() );
+        adaptor->setPickerId( this->getPickerId() );
+        adaptor->setTransformId( this->getTransformId() );
+        adaptor->setAutoRender( this->getAutoRender() );
+
+        ::visuVTKAdaptor::Image::sptr imgAdaptor;
+        imgAdaptor = ::visuVTKAdaptor::Image::dynamicCast(adaptor);
+        imgAdaptor->setVtkImageRegister(this->getImageSource());
+        imgAdaptor->setSelectedTFKey( this->getSelectedTFKey() );
+        imgAdaptor->setTFSelectionFwID( this->getTFSelectionFwID() );
+
+        imgAdaptor->setImageOpacity(1.);
+        imgAdaptor->setAllowAlphaInTF(m_allowAlphaInTF);
+
+        m_imageAdaptor = adaptor;
+        this->registerService(adaptor);
     }
     else
     {
-        imageAdaptor = m_imageAdaptor.lock();
+        adaptor = m_imageAdaptor.lock();
     }
-    return imageAdaptor;
+    return adaptor;
 }
 
 //------------------------------------------------------------------------------
@@ -176,7 +179,7 @@ void NegatoOneSlice::cleanImageSource()
 void NegatoOneSlice::doStart() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    if (! vtkImageBlend::SafeDownCast(this->getImageSource()))
+    if (!vtkImageBlend::SafeDownCast(this->getImageSource()))
     {
         this->getImageAdaptor()->start();
     }
@@ -187,9 +190,6 @@ void NegatoOneSlice::doStart() throw(fwTools::Failed)
 
 void NegatoOneSlice::doStop() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-//    this->getImageAdaptor()->stop();
-//    this->getImageSliceAdaptor()->stop();
     this->unregisterServices();
     this->cleanImageSource();
 }
@@ -198,7 +198,6 @@ void NegatoOneSlice::doStop() throw(fwTools::Failed)
 
 void NegatoOneSlice::doSwap() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
     this->doStop();
     this->doStart();
 }
@@ -208,75 +207,56 @@ void NegatoOneSlice::doSwap() throw(fwTools::Failed)
 void NegatoOneSlice::doUpdate() throw(::fwTools::Failed)
 {
     SLM_TRACE_FUNC();
-    if (! vtkImageBlend::SafeDownCast(this->getImageSource()))
+    if (!vtkImageBlend::SafeDownCast(this->getImageSource()))
     {
         this->getImageAdaptor()->update();
     }
     this->getImageSliceAdaptor()->update();
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void NegatoOneSlice::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
+void NegatoOneSlice::updateSliceType(int from, int to)
 {
-    SLM_TRACE_FUNC();
-
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE ))
+    if( to == static_cast<int>(m_orientation) )
     {
-        ::fwData::Object::csptr cObjInfo = msg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-        ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-        ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-        int fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] )->value();
-        int toSliceType =   ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] )->value();
-
-        if( toSliceType == static_cast<int>(m_orientation) )
-        {
-            setOrientation( static_cast< Orientation >( fromSliceType ));
-        }
-        else if(fromSliceType == static_cast<int>(m_orientation))
-        {
-            setOrientation( static_cast< Orientation >( toSliceType ));
-        }
+        setOrientation( static_cast< Orientation >( from ));
     }
-    else if (msg->hasEvent(::fwComEd::ImageMsg::BUFFER)
-              || msg->hasEvent(::fwComEd::ImageMsg::NEW_IMAGE)
-              ||msg->hasEvent(::fwComEd::ImageMsg::MODIFIED))
+    else if(from == static_cast<int>(m_orientation))
     {
-        this->doStop();
-        this->doStart();
-        this->doUpdate();
+        setOrientation( static_cast< Orientation >( to ));
     }
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void NegatoOneSlice::configuring() throw(fwTools::Failed)
+void NegatoOneSlice::updateImage()
 {
-    SLM_TRACE_FUNC();
+    this->doStop();
+    this->doStart();
+    this->doUpdate();
+}
 
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
+//------------------------------------------------------------------------------
+
+void NegatoOneSlice::doConfigure() throw(fwTools::Failed)
+{
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
     if(m_configuration->hasAttribute("sliceIndex"))
     {
-         std::string  orientation = m_configuration->getAttributeValue("sliceIndex");
-         if(orientation == "axial" )
-         {
-             m_orientation = Z_AXIS;
-         }
-         else if(orientation == "frontal" )
-         {
-             m_orientation = Y_AXIS;
-         }
-         else if(orientation == "sagittal" )
-         {
-             m_orientation = X_AXIS;
-         }
-    }
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
+        std::string orientation = m_configuration->getAttributeValue("sliceIndex");
+        if(orientation == "axial" )
+        {
+            m_orientation = Z_AXIS;
+        }
+        else if(orientation == "frontal" )
+        {
+            m_orientation = Y_AXIS;
+        }
+        else if(orientation == "sagittal" )
+        {
+            m_orientation = X_AXIS;
+        }
     }
     if(m_configuration->hasAttribute("tfalpha") )
     {
@@ -290,11 +270,27 @@ void NegatoOneSlice::configuring() throw(fwTools::Failed)
     {
         this->setVtkImageSourceId( m_configuration->getAttributeValue("vtkimagesource") );
     }
+    if(m_configuration->hasAttribute("actorOpacity") )
+    {
+        m_actorOpacity = ::boost::lexical_cast<double>(m_configuration->getAttributeValue("actorOpacity"));
+    }
 
     this->parseTFConfig( m_configuration );
 }
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType NegatoOneSlice::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_IMAGE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_IMAGE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoSlicingInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoSlicingInteractor.cpp
index 9938f4e..d6ae753 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoSlicingInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoSlicingInteractor.cpp
@@ -1,42 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/NegatoSlicingInteractor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwData/Integer.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/String.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
+#include <fwRenderVTK/vtk/Helpers.hpp>
+#include <fwRenderVTK/vtk/fwVtkCellPicker.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
-#include <vtkRenderWindowInteractor.h>
-#include <vtkCellPicker.h>
 #include <vtkActor.h>
 #include <vtkActorCollection.h>
-#include <vtkProp3DCollection.h>
-#include <vtkInteractorStyleImage.h>
 #include <vtkAssemblyNode.h>
+#include <vtkCellPicker.h>
 #include <vtkCommand.h>
+#include <vtkInteractorStyleImage.h>
+#include <vtkProp3DCollection.h>
+#include <vtkRenderWindowInteractor.h>
 
-#include <fwRenderVTK/vtk/Helpers.hpp>
-#include <fwRenderVTK/vtk/fwVtkCellPicker.hpp>
-
-#include "visuVTKAdaptor/NegatoSlicingInteractor.hpp"
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoSlicingInteractor, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoSlicingInteractor,
+                         ::fwData::Image );
 
 
 namespace visuVTKAdaptor
@@ -48,10 +51,16 @@ namespace visuVTKAdaptor
 class NegatoSlicingCallback : public vtkCommand
 {
 public:
-    static NegatoSlicingCallback *New()
-    { return new NegatoSlicingCallback(); }
+    static NegatoSlicingCallback* New()
+    {
+        return new NegatoSlicingCallback();
+    }
 
-    NegatoSlicingCallback() :  m_picker(NULL), m_localPicker(NULL), m_pickedProp(NULL), m_mouseMoveObserved(false)
+    NegatoSlicingCallback() :
+        m_picker(nullptr),
+        m_localPicker(nullptr),
+        m_pickedProp(nullptr),
+        m_mouseMoveObserved(false)
     {
         this->PassiveObserverOff();
     }
@@ -64,7 +73,7 @@ public:
     {
         SLM_ASSERT("m_picker should be set before picking.", m_picker);
 
-        if ( m_picker->Pick( pickPoint , m_adaptor->getRenderer() ) )
+        if ( m_picker->Pick( pickPoint, m_adaptor->getRenderer() ) )
         {
             m_picker->GetPickPosition(position);
             return true;
@@ -76,7 +85,7 @@ public:
     {
         SLM_ASSERT("m_localPicker should be set before picking.", m_localPicker);
 
-        if ( m_localPicker->Pick( pickPoint , m_adaptor->getRenderer() ) )
+        if ( m_localPicker->Pick( pickPoint, m_adaptor->getRenderer() ) )
         {
             m_localPicker->GetPickPosition(position);
             return true;
@@ -84,65 +93,79 @@ public:
         return false;
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    void startSlicing()
     {
-        if ( m_mouseMoveObserved || !m_adaptor->getInteractor()->GetShiftKey() )
-        {
-            if ( eventId == START_SLICING_EVENT)
-            {
-                SLM_TRACE("vtkEvent: MiddleButtonPressEvent");
-                SLM_ASSERT("m_adaptor not instanced", m_adaptor);
-                SLM_ASSERT("m_picker not instanced", m_picker);
+        SLM_TRACE("vtkEvent: MiddleButtonPressEvent");
+        SLM_ASSERT("m_adaptor not instanced", m_adaptor);
+        SLM_ASSERT("m_picker not instanced", m_picker);
 
-                double pickPoint[3];
-                double pickedPoint[3];
+        double pickPoint[3];
+        double pickedPoint[3];
 
-                int x,y;
-                m_adaptor->getInteractor()->GetEventPosition(x, y);
-                pickPoint[0] = x;
-                pickPoint[1] = y;
-                pickPoint[2] = 0;
+        int x,y;
+        m_adaptor->getInteractor()->GetEventPosition(x, y);
+        pickPoint[0] = x;
+        pickPoint[1] = y;
+        pickPoint[2] = 0;
 
-                OSLM_TRACE("vtkEvent: MiddleButtonPressEvent: picking " << pickPoint[0] << ", " << pickPoint[1] << ", " << pickPoint[2]);
+        OSLM_TRACE(
+            "vtkEvent: MiddleButtonPressEvent: picking " << pickPoint[0] << ", " << pickPoint[1] << ", " <<
+            pickPoint[2]);
 
-                if ( this->Pick(pickPoint, pickedPoint) )
-                {
-                    SLM_TRACE("vtkEvent: MiddleButtonPressEvent:picked point");
-                    assert(!m_mouseMoveObserved);
-                    m_adaptor->getInteractor()->AddObserver(vtkCommand::MouseMoveEvent, this, 1.);
-                    m_mouseMoveObserved = true;
-                    SetAbortFlag(1);
-
-                    //m_pickedProp = m_picker->GetProp3D();
-                    m_pickedProp = ::fwRenderVTK::vtk::getNearestPickedProp(m_picker, m_adaptor->getRenderer());
-                    m_localPicker = fwVtkCellPicker::New();
-                    m_localPicker->InitializePickList();
-                    m_localPicker->PickFromListOn();
-                    m_localPicker->AddPickList(m_pickedProp);
-
-                    double localPickedPoint[3];
-                    this->localPick(pickPoint, localPickedPoint);
-
-                    m_adaptor->startSlicing(localPickedPoint);
-                }
-            }
+        if ( this->Pick(pickPoint, pickedPoint) )
+        {
+            SLM_TRACE("vtkEvent: MiddleButtonPressEvent:picked point");
+            SLM_ASSERT("Slicing has already begun", !m_mouseMoveObserved);
+            m_adaptor->getInteractor()->AddObserver(vtkCommand::MouseMoveEvent, this, 1.);
+            m_mouseMoveObserved = true;
+            SetAbortFlag(1);
+
+            //m_pickedProp = m_picker->GetProp3D();
+            m_pickedProp  = ::fwRenderVTK::vtk::getNearestPickedProp(m_picker, m_adaptor->getRenderer());
+            m_localPicker = fwVtkCellPicker::New();
+            m_localPicker->InitializePickList();
+            m_localPicker->PickFromListOn();
+            m_localPicker->AddPickList(m_pickedProp);
+
+            double localPickedPoint[3];
+            this->localPick(pickPoint, localPickedPoint);
+
+            m_adaptor->startSlicing(localPickedPoint);
+        }
+    }
 
-            else if ( eventId == STOP_SLICING_EVENT)
-            {
-                SLM_TRACE("vtkEvent: MiddleButtonReleaseEvent");
-                SLM_ASSERT("m_adaptor not instanced", m_adaptor);
-                SLM_ASSERT("m_picker not instanced", m_picker);
+    void stopSlicing()
+    {
+        SLM_TRACE("vtkEvent: MiddleButtonReleaseEvent");
+        SLM_ASSERT("m_adaptor not instanced", m_adaptor);
+        SLM_ASSERT("m_picker not instanced", m_picker);
+        SLM_ASSERT("Slicing doesn't begun", m_mouseMoveObserved);
+
+        m_adaptor->getInteractor()->RemoveObservers(vtkCommand::MouseMoveEvent, this);
+        m_mouseMoveObserved = false;
+        m_adaptor->stopSlicing();
+        m_localPicker->Delete();
+        m_localPicker = nullptr;
+        m_pickedProp  = nullptr;
+    }
 
-                if(m_mouseMoveObserved)
-                {
-                    m_adaptor->getInteractor()->RemoveObservers(vtkCommand::MouseMoveEvent, this);
-                    m_mouseMoveObserved = false;
-                    m_adaptor->stopSlicing();
-                    m_localPicker->Delete();
-                    m_localPicker = NULL;
-                    m_pickedProp = NULL;
-                }
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
+    {
+        if(m_mouseMoveObserved && eventId == START_SLICING_EVENT)
+        {
+            SetAbortFlag(1); // To handle space bar pressed and middle click slicing at the same time
+        }
+
+        if(m_mouseMoveObserved || !m_adaptor->getInteractor()->GetShiftKey())
+        {
+            if (eventId == START_SLICING_EVENT && !m_mouseMoveObserved)
+            {
+                startSlicing();
+            }
 
+            else if(eventId == STOP_SLICING_EVENT && m_mouseMoveObserved)
+            {
+                stopSlicing();
             }
             else if (eventId == vtkCommand::MouseMoveEvent)
             {
@@ -165,9 +188,8 @@ public:
             }
             else if (eventId == vtkCommand::KeyPressEvent && !m_adaptor->getInteractor()->GetControlKey())
             {
-                vtkRenderWindowInteractor *rwi = vtkRenderWindowInteractor::SafeDownCast(caller);
-                char *keySym = rwi->GetKeySym();
-
+                vtkRenderWindowInteractor* rwi = vtkRenderWindowInteractor::SafeDownCast(caller);
+                char* keySym                   = rwi->GetKeySym();
 
                 if ( std::string(keySym) == "A" || std::string(keySym) == "a" )
                 {
@@ -179,27 +201,41 @@ public:
                 }
                 if ( std::string(keySym) == "T" || std::string(keySym) == "t" )
                 {
-                    m_adaptor->pushSlice(-1, ::fwComEd::helper::MedicalImageAdaptor::Z_AXIS);
+                    m_adaptor->pushSlice(-1, ::fwDataTools::helper::MedicalImageAdaptor::Z_AXIS);
                 }
                 else if (std::string(keySym) == "Y" || std::string(keySym) == "y" )
                 {
-                    m_adaptor->pushSlice(1, ::fwComEd::helper::MedicalImageAdaptor::Z_AXIS);
+                    m_adaptor->pushSlice(1, ::fwDataTools::helper::MedicalImageAdaptor::Z_AXIS);
                 }
                 else if (std::string(keySym) == "G" || std::string(keySym) == "g" )
                 {
-                    m_adaptor->pushSlice(-1, ::fwComEd::helper::MedicalImageAdaptor::Y_AXIS);
+                    m_adaptor->pushSlice(-1, ::fwDataTools::helper::MedicalImageAdaptor::Y_AXIS);
                 }
                 else if (std::string(keySym) == "H" || std::string(keySym) == "h" )
                 {
-                    m_adaptor->pushSlice(1, ::fwComEd::helper::MedicalImageAdaptor::Y_AXIS);
+                    m_adaptor->pushSlice(1, ::fwDataTools::helper::MedicalImageAdaptor::Y_AXIS);
                 }
                 else if (std::string(keySym) == "B" || std::string(keySym) == "b" )
                 {
-                    m_adaptor->pushSlice(-1, ::fwComEd::helper::MedicalImageAdaptor::X_AXIS);
+                    m_adaptor->pushSlice(-1, ::fwDataTools::helper::MedicalImageAdaptor::X_AXIS);
                 }
                 else if (std::string(keySym) == "N" || std::string(keySym) == "n" )
                 {
-                    m_adaptor->pushSlice(1, ::fwComEd::helper::MedicalImageAdaptor::X_AXIS);
+                    m_adaptor->pushSlice(1, ::fwDataTools::helper::MedicalImageAdaptor::X_AXIS);
+                }
+                else if (std::string(keySym) == "space" && !m_mouseMoveObserved)
+                {
+                    this->startSlicing();
+                }
+            }
+            else if(eventId == vtkCommand::KeyReleaseEvent)
+            {
+                vtkRenderWindowInteractor* rwi = vtkRenderWindowInteractor::SafeDownCast(caller);
+                char* keySym                   = rwi->GetKeySym();
+
+                if (std::string(keySym) == "space" && m_mouseMoveObserved)
+                {
+                    this->stopSlicing();
                 }
             }
         }
@@ -221,32 +257,34 @@ public:
         m_adaptor = adaptor;
     }
 
-    void setPicker( vtkAbstractPropPicker *picker)
+    void setPicker( vtkAbstractPropPicker* picker)
     {
         m_picker = picker;
     }
 
-protected :
+protected:
     NegatoSlicingInteractor::sptr m_adaptor;
-    vtkAbstractPropPicker *m_picker;
-    vtkAbstractPropPicker *m_localPicker;
-
-    vtkProp *m_pickedProp;
-
-
+    vtkAbstractPropPicker* m_picker;
+    vtkAbstractPropPicker* m_localPicker;
+    vtkProp* m_pickedProp;
     bool m_mouseMoveObserved;
-
 };
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
+
+const ::fwCom::Signals::SignalKeyType NegatoSlicingInteractor::s_SLICING_STARTED_SIG = "slicingStarted";
+const ::fwCom::Signals::SignalKeyType NegatoSlicingInteractor::s_SLICING_STOPPED_SIG = "slicingStopped";
+
 //-----------------------------------------------------------------------------
 
-NegatoSlicingInteractor::NegatoSlicingInteractor() throw()
+NegatoSlicingInteractor::NegatoSlicingInteractor() throw() : m_vtkObserver(nullptr), m_priority(.6)
 {
-    m_priority = .6;
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
+    m_sigSlicingStarted = newSignal< SlicingStartedSignalType >(s_SLICING_STARTED_SIG);
+    m_sigSlicingStopped = newSignal< SlicingStoppedSignalType >(s_SLICING_STOPPED_SIG);
+
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &NegatoSlicingInteractor::updateSliceIndex, this);
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &NegatoSlicingInteractor::updateSliceType, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -257,20 +295,15 @@ NegatoSlicingInteractor::~NegatoSlicingInteractor() throw()
 
 //-----------------------------------------------------------------------------
 
-void NegatoSlicingInteractor::configuring() throw(fwTools::Failed)
+void NegatoSlicingInteractor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    SLM_ASSERT("Tag config is required", m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
 }
 
 //-----------------------------------------------------------------------------
 
 void NegatoSlicingInteractor::doStart() throw(fwTools::Failed)
 {
-    NegatoSlicingCallback *observer = NegatoSlicingCallback::New();
+    NegatoSlicingCallback* observer = NegatoSlicingCallback::New();
     observer->setAdaptor( NegatoSlicingInteractor::dynamicCast(this->getSptr()) );
     observer->setPicker(this->getPicker());
 
@@ -278,7 +311,8 @@ void NegatoSlicingInteractor::doStart() throw(fwTools::Failed)
 
     this->getInteractor()->AddObserver(START_SLICING_EVENT, m_vtkObserver, m_priority);
     this->getInteractor()->AddObserver(STOP_SLICING_EVENT, m_vtkObserver, m_priority);
-    this->getInteractor()->AddObserver(vtkCommand::KeyPressEvent  , m_vtkObserver, m_priority);
+    this->getInteractor()->AddObserver(vtkCommand::KeyPressEvent, m_vtkObserver, m_priority);
+    this->getInteractor()->AddObserver(vtkCommand::KeyReleaseEvent, m_vtkObserver, m_priority);
     this->getInteractor()->AddObserver(vtkCommand::MouseWheelForwardEvent, m_vtkObserver, m_priority);
     this->getInteractor()->AddObserver(vtkCommand::MouseWheelBackwardEvent, m_vtkObserver, m_priority);
 
@@ -290,6 +324,8 @@ void NegatoSlicingInteractor::doStart() throw(fwTools::Failed)
 
 void NegatoSlicingInteractor::doUpdate() throw(fwTools::Failed)
 {
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateImageInfos(image);
 }
 
 //-----------------------------------------------------------------------------
@@ -304,48 +340,37 @@ void NegatoSlicingInteractor::doSwap() throw(fwTools::Failed)
 
 void NegatoSlicingInteractor::doStop() throw(fwTools::Failed)
 {
-    this->getInteractor()->RemoveObservers(START_SLICING_EVENT  , m_vtkObserver);
+    this->getInteractor()->RemoveObservers(START_SLICING_EVENT, m_vtkObserver);
     this->getInteractor()->RemoveObservers(STOP_SLICING_EVENT, m_vtkObserver);
-    this->getInteractor()->RemoveObservers(vtkCommand::KeyPressEvent  , m_vtkObserver);
+    this->getInteractor()->RemoveObservers(vtkCommand::KeyPressEvent, m_vtkObserver);
+    this->getInteractor()->RemoveObservers(vtkCommand::KeyReleaseEvent, m_vtkObserver);
     this->getInteractor()->RemoveObservers(vtkCommand::MouseWheelForwardEvent, m_vtkObserver);
     this->getInteractor()->RemoveObservers(vtkCommand::MouseWheelBackwardEvent, m_vtkObserver);
     m_vtkObserver->Delete();
-    m_vtkObserver = NULL;
+    m_vtkObserver = nullptr;
     this->removeAllPropFromRenderer();
 }
 
 //-----------------------------------------------------------------------------
 
-void NegatoSlicingInteractor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void NegatoSlicingInteractor::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-    {
-        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-        this->updateImageInfos(image);
-    }
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
+}
 
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
+//-----------------------------------------------------------------------------
+
+void NegatoSlicingInteractor::updateSliceType(int from, int to)
+{
+    if( to == static_cast<int>(m_orientation) )
     {
-        ::fwComEd::ImageMsg::dynamicConstCast(msg)->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
+        setOrientation( static_cast< Orientation >( from ));
     }
-
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE ))
+    else if(from == static_cast<int>(m_orientation))
     {
-        ::fwData::Object::csptr cObjInfo = msg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-        ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-        ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-        int fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] )->value();
-        int toSliceType =   ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] )->value();
-
-        if( toSliceType == static_cast<int>(m_orientation) )
-        {
-            setOrientation( static_cast< Orientation >( fromSliceType ));
-        }
-        else if(fromSliceType == static_cast<int>(m_orientation))
-        {
-            setOrientation( static_cast< Orientation >( toSliceType ));
-        }
+        setOrientation( static_cast< Orientation >( to ));
     }
 }
 
@@ -358,9 +383,10 @@ void NegatoSlicingInteractor::startSlicing( double pickedPoint[3] )
 
     int index[3];
     this->worldToImageSliceIndex(pickedPoint, index);
+    m_sigSlicingStarted->asyncEmit();
 
     int i;
-    for (i=0; i<3; i++)
+    for (i = 0; i<3; i++)
     {
         if (index[i] == sliceIndex[i]->value())
         {
@@ -380,14 +406,14 @@ void NegatoSlicingInteractor::startSlicing( double pickedPoint[3] )
 void NegatoSlicingInteractor::stopSlicing( )
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    // Fire the message to stop full cross display
-    ::fwData::Integer::sptr dataInfo = ::fwData::Integer::New();
-    ::fwData::String::sptr sliceMode = ::fwData::String::New();
-    sliceMode->value() = "STOP_SLICING";
-    dataInfo->setField("SLICE_MODE", sliceMode);
-    ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-    msg->setSliceIndex(m_axialIndex, m_frontalIndex, m_sagittalIndex, dataInfo);
-    ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+    m_sigSlicingStopped->asyncEmit();
+
+    auto sig = image->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+        ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_UPDATE_SLICE_INDEX_SLOT)));
+        sig->asyncEmit(m_axialIndex->value(), m_frontalIndex->value(), m_sagittalIndex->value());
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -413,22 +439,19 @@ void NegatoSlicingInteractor::updateSlicing( double pickedPoint[3] )
     for ( int i = 0; i < image->getNumberOfDimensions(); i++ )
     {
         OSLM_ASSERT("index["<< i <<"] = " << index[i]
-                << " and image->getSize()[" << i << "] = " << image->getSize()[i],
-                index[i] >=0 && index[i] < image->getSize()[i]);
+                            << " and image->getSize()[" << i << "] = " << image->getSize()[i],
+                    index[i] >=0 && index[i] < image->getSize()[i]);
     }
 #endif
 
     if(setSliceIndex(index))
     {
-        ::fwData::Integer::sptr dataInfo = ::fwData::Integer::New();
-        ::fwData::String::sptr sliceMode = ::fwData::String::New();
-        sliceMode->value() = "UPDATE_SLICING";
-        dataInfo->setField("SLICE_MODE", sliceMode);
-
-        // Fire the message
-        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-        msg->setSliceIndex(m_axialIndex, m_frontalIndex, m_sagittalIndex, dataInfo);
-        ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+        auto sig = image->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+            ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_UPDATE_SLICE_INDEX_SLOT)));
+            sig->asyncEmit(m_axialIndex->value(), m_frontalIndex->value(), m_sagittalIndex->value());
+        }
     }
 }
 
@@ -440,9 +463,9 @@ void NegatoSlicingInteractor::pushSlice( int factor, Orientation axis)
     this->getSliceIndex(sliceIndex);
 
     int index[3];
-    index[0] = sliceIndex[0]->value();
-    index[1] = sliceIndex[1]->value();
-    index[2] = sliceIndex[2]->value();
+    index[0]     = sliceIndex[0]->value();
+    index[1]     = sliceIndex[1]->value();
+    index[2]     = sliceIndex[2]->value();
     index[axis] += factor;
 
     int size[3];
@@ -461,16 +484,30 @@ void NegatoSlicingInteractor::pushSlice( int factor, Orientation axis)
     {
         ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
-        ::fwData::Integer::sptr dataInfo = ::fwData::Integer::New();
-        ::fwData::String::sptr sliceMode = ::fwData::String::New();
-        sliceMode->value() = "STOP_SLICING";
-        dataInfo->setField("SLICE_MODE", sliceMode);
+        m_sigSlicingStopped->asyncEmit();
 
-        // Fire the message
-        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-        msg->setSliceIndex(m_axialIndex, m_frontalIndex, m_sagittalIndex, dataInfo);
-        ::fwServices::IEditionService::notify(this->getSptr(), image, msg);
+        auto sig = image->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+            ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_UPDATE_SLICE_INDEX_SLOT)));
+            sig->asyncEmit(m_axialIndex->value(), m_frontalIndex->value(), m_sagittalIndex->value());
+        }
     }
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType NegatoSlicingInteractor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoWindowingInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoWindowingInteractor.cpp
index 268a668..6466fb8 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoWindowingInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/NegatoWindowingInteractor.cpp
@@ -1,36 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/NegatoWindowingInteractor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <fwData/Integer.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <vtkRenderWindowInteractor.h>
-#include <vtkInteractorStyleImage.h>
-#include <vtkCommand.h>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
 #include <fwRenderVTK/IVtkAdaptorService.hpp>
 #include <fwRenderVTK/vtk/fwVtkCellPicker.hpp>
 
-#include "visuVTKAdaptor/NegatoWindowingInteractor.hpp"
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoWindowingInteractor, ::fwData::Image ) ;
+#include <vtkCommand.h>
+#include <vtkInteractorStyleImage.h>
+#include <vtkRenderWindowInteractor.h>
+
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::NegatoWindowingInteractor,
+                         ::fwData::Image );
 
 
 #define START_WINDOWING_EVENT vtkCommand::RightButtonPressEvent
@@ -42,13 +39,19 @@ namespace visuVTKAdaptor
 class NegatoWindowingCallback : public vtkCommand
 {
 public:
-    static NegatoWindowingCallback *New()
-    { return new NegatoWindowingCallback(); }
+    static NegatoWindowingCallback* New()
+    {
+        return new NegatoWindowingCallback();
+    }
 
-    NegatoWindowingCallback() : m_picker(NULL), m_x(0), m_y(0), m_mouseMoveObserved(false)
+    NegatoWindowingCallback() :
+        m_picker(nullptr),
+        m_x(0),
+        m_y(0),
+        m_windowStep(1.),
+        m_levelStep(1.),
+        m_mouseMoveObserved(false)
     {
-        m_windowStep = 1. ;
-        m_levelStep  = 1. ;
         this->PassiveObserverOff();
     }
 
@@ -57,7 +60,7 @@ public:
 
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         if ( m_mouseMoveObserved || !m_adaptor->getInteractor()->GetShiftKey() )
         {
@@ -73,7 +76,7 @@ public:
                 display[1] = m_y;
                 display[2] = 0;
 
-                if ( m_picker->Pick( display , m_adaptor->getRenderer() ) )
+                if ( m_picker->Pick( display, m_adaptor->getRenderer() ) )
                 {
                     assert(!m_mouseMoveObserved);
                     m_adaptor->startWindowing();
@@ -104,8 +107,8 @@ public:
                 int x,y;
                 m_adaptor->getInteractor()->GetEventPosition(x,y);
 
-                double dx = m_windowStep * ( x - m_x ) ;
-                double dy = m_levelStep  * ( m_y - y ) ;
+                double dx = m_windowStep * ( x - m_x );
+                double dy = m_levelStep  * ( m_y - y );
 
                 m_adaptor->updateWindowing(dx, dy);
                 m_adaptor->update();
@@ -113,9 +116,9 @@ public:
         }
         else if (m_adaptor->getInteractor()->GetShiftKey())
         {
-            vtkRenderWindowInteractor *rwi = vtkRenderWindowInteractor::SafeDownCast(caller);
-            char *keySym = rwi->GetKeySym();
-            if(keySym != NULL)
+            vtkRenderWindowInteractor* rwi = vtkRenderWindowInteractor::SafeDownCast(caller);
+            char* keySym                   = rwi->GetKeySym();
+            if(keySym != nullptr)
             {
                 if (std::string(keySym) == "R")
                 {
@@ -130,14 +133,14 @@ public:
         m_adaptor = adaptor;
     }
 
-    void setPicker( vtkAbstractPropPicker *picker)
+    void setPicker( vtkAbstractPropPicker* picker)
     {
         m_picker = picker;
     }
 
-protected :
+protected:
     NegatoWindowingInteractor::sptr m_adaptor;
-    vtkAbstractPropPicker *m_picker;
+    vtkAbstractPropPicker* m_picker;
 
     int m_x;
     int m_y;
@@ -151,30 +154,27 @@ protected :
 
 //------------------------------------------------------------------------------
 
-NegatoWindowingInteractor::NegatoWindowingInteractor() throw()
+NegatoWindowingInteractor::NegatoWindowingInteractor() throw() :
+    m_vtkObserver(nullptr),
+    m_initialWindow(0.),
+    m_initialLevel(0.),
+    m_priority(.6)
 {
-    m_priority = .6;
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
 }
 
 //------------------------------------------------------------------------------
 
 NegatoWindowingInteractor::~NegatoWindowingInteractor() throw()
 {
-
-
 }
 
 //------------------------------------------------------------------------------
 
-void NegatoWindowingInteractor::configuring() throw(fwTools::Failed)
+void NegatoWindowingInteractor::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
     SLM_ASSERT("Tag config is required", m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
 
     this->parseTFConfig( m_configuration );
 }
@@ -183,7 +183,10 @@ void NegatoWindowingInteractor::configuring() throw(fwTools::Failed)
 
 void NegatoWindowingInteractor::doStart() throw(fwTools::Failed)
 {
-    NegatoWindowingCallback *observer = NegatoWindowingCallback::New();
+    ::fwData::Composite::wptr tfSelection = this->getSafeInOut< ::fwData::Composite>(this->getTFSelectionFwID());
+    this->setTransferFunctionSelection(tfSelection);
+
+    NegatoWindowingCallback* observer = NegatoWindowingCallback::New();
     observer->setAdaptor( NegatoWindowingInteractor::dynamicCast(this->getSptr()) );
     observer->setPicker(this->getPicker());
 
@@ -191,7 +194,7 @@ void NegatoWindowingInteractor::doStart() throw(fwTools::Failed)
 
     this->getInteractor()->AddObserver(START_WINDOWING_EVENT, m_vtkObserver, m_priority);
     this->getInteractor()->AddObserver(STOP_WINDOWING_EVENT, m_vtkObserver, m_priority);
-    this->getInteractor()->AddObserver(vtkCommand::KeyPressEvent  , m_vtkObserver, m_priority);
+    this->getInteractor()->AddObserver(vtkCommand::KeyPressEvent, m_vtkObserver, m_priority);
 
     this->doUpdate();
 }
@@ -202,7 +205,7 @@ void NegatoWindowingInteractor::doUpdate() throw(fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
-    this->updateTransferFunction(image, this->getSptr());
+    this->updateTransferFunction(image);
 }
 
 //------------------------------------------------------------------------------
@@ -217,74 +220,89 @@ void NegatoWindowingInteractor::doSwap() throw(fwTools::Failed)
 
 void NegatoWindowingInteractor::doStop() throw(fwTools::Failed)
 {
-    this->getInteractor()->RemoveObservers(START_WINDOWING_EVENT  , m_vtkObserver);
+    this->getInteractor()->RemoveObservers(START_WINDOWING_EVENT, m_vtkObserver);
     this->getInteractor()->RemoveObservers(STOP_WINDOWING_EVENT, m_vtkObserver);
-    this->getInteractor()->RemoveObservers(vtkCommand::KeyPressEvent  , m_vtkObserver);
+    this->getInteractor()->RemoveObservers(vtkCommand::KeyPressEvent, m_vtkObserver);
     m_vtkObserver->Delete();
-    m_vtkObserver = NULL;
+    m_vtkObserver = nullptr;
     this->removeAllPropFromRenderer();
 }
 
 //------------------------------------------------------------------------------
 
-void NegatoWindowingInteractor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-
-    if (imageIsValid)
-    {
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            doUpdate();
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void NegatoWindowingInteractor::startWindowing( )
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->doUpdate();
 
-    m_initialLevel = this->getLevel();
+    m_initialLevel  = this->getLevel();
     m_initialWindow = this->getWindow();
 }
 
 //------------------------------------------------------------------------------
 
 void NegatoWindowingInteractor::stopWindowing( )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void NegatoWindowingInteractor::updateWindowing( double dw, double dl )
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image         = this->getObject< ::fwData::Image >();
+    ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
 
     double newWindow = m_initialWindow + dw;
     double newLevel  = m_initialLevel - dl;
 
-    this->setWindow( newWindow );
-    this->setLevel( newLevel );
-    this->notifyTFWindowing( this->getSptr() );
+    tf->setWindow( newWindow );
+    tf->setLevel( newLevel );
+
+    auto sig = tf->signal< ::fwData::TransferFunction::WindowingModifiedSignalType >(
+        ::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdateTFWindowing));
+        sig->asyncEmit( newWindow, newLevel);
+    }
 
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
 void NegatoWindowingInteractor::resetWindowing()
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    ::fwData::Image::sptr image         = this->getObject< ::fwData::Image >();
+    ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
+
     double newWindow = image->getWindowWidth();
     double newLevel  = image->getWindowCenter();
 
-    this->setWindow( newWindow );
-    this->setLevel( newLevel );
-    this->notifyTFWindowing( this->getSptr() );
+    tf->setWindow( newWindow );
+    tf->setLevel( newLevel );
+
+    auto sig = tf->signal< ::fwData::TransferFunction::WindowingModifiedSignalType >(
+        ::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdateTFWindowing));
+        sig->asyncEmit( newWindow, newLevel);
+    }
 
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType NegatoWindowingInteractor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Normals.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Normals.cpp
deleted file mode 100644
index e16860a..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Normals.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Material.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwComEd/ReconstructionMsg.hpp>
-
-#include <vtkActor.h>
-#include <vtkActor2D.h>
-#include <vtkArrowSource.h>
-#include <vtkCamera.h>
-#include <vtkGlyph3D.h>
-#include <vtkIdFilter.h>
-#include <vtkCellCenters.h>
-#include <vtkLabeledDataMapper.h>
-#include <vtkMaskPoints.h>
-#include <vtkMath.h>
-#include <vtkPicker.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPolyDataNormals.h>
-#include <vtkTextProperty.h>
-#include <vtkProperty.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkRenderer.h>
-#include <vtkTransform.h>
-
-#include <fwVtkIO/vtk.hpp>
-
-#include "visuVTKAdaptor/Normals.hpp"
-
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Normals, ::fwData::TriangularMesh ) ;
-
-namespace visuVTKAdaptor
-{
-
-//------------------------------------------------------------------------------
-//------------------------------------------------------------------------------
-Normals::Normals() throw()
-{
-    m_actor = vtkActor::New();
-#ifdef SHOW_ID_LABELS
-    m_ptsIdActor2D = vtkActor2D::New();
-    m_cellsIdActor2D = vtkActor2D::New();
-#endif
-}
-
-//------------------------------------------------------------------------------
-
-Normals::~Normals() throw()
-{
-    m_actor->Delete();
-    m_actor = 0;
-#ifdef SHOW_ID_LABELS
-    m_ptsIdActor2D->Delete();
-    m_ptsIdActor2D = 0;
-    m_cellsIdActor2D->Delete();
-    m_cellsIdActor2D = 0;
-#endif
-}
-
-//------------------------------------------------------------------------------
-
-void Normals::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-}
-
-//------------------------------------------------------------------------------
-
-void Normals::doStart() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    this->doUpdate();
-
-    this->addToRenderer(this->getActor());
-
-#ifdef SHOW_ID_LABELS
-    this->addToRenderer(m_ptsIdActor2D);
-    this->addToRenderer(m_cellsIdActor2D);
-#endif
-}
-
-//------------------------------------------------------------------------------
-
-void Normals::doSwap() throw(fwTools::Failed)
-{
-    SLM_TRACE("SWAPPING Normals");
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-void Normals::doUpdate() throw(fwTools::Failed)
-{
-    updateNormals();
-}
-
-//------------------------------------------------------------------------------
-
-vtkActor* Normals::getActor()
-{
-    return m_actor;
-}
-
-
-//------------------------------------------------------------------------------
-void Normals::setMapperInput(vtkAlgorithmOutput *input)
-{
-    if (input)
-    {
-        m_mapperInput = input;
-    }
-}
-//
-//------------------------------------------------------------------------------
-
-void Normals::updateNormals()
-{
-
-#ifdef SHOW_ID_LABELS
-    { //Points Ids
-        vtkIdFilter *ids = vtkIdFilter::New();
-        vtkLabeledDataMapper *idsMapper = vtkLabeledDataMapper::New();
-        idsMapper->GetLabelTextProperty()->ShadowOn();
-        idsMapper->GetLabelTextProperty()->SetFontSize(18);
-
-        ids->SetInput(m_mapperInput->GetOutput());
-        idsMapper->SetInputConnection(ids->GetOutputPort());
-        m_ptsIdActor2D->SetMapper(idsMapper);
-
-        idsMapper->Delete();
-        ids->Delete();
-    }
-    { //Points cell
-        vtkCellCenters *cc = vtkCellCenters::New();
-        vtkLabeledDataMapper *ccMapper = vtkLabeledDataMapper::New();
-        ccMapper->GetLabelTextProperty()->ShadowOn();
-        ccMapper->GetLabelTextProperty()->SetFontSize(18);
-        ccMapper->GetLabelTextProperty()->SetColor(0, 1, 0);
-
-
-        cc->SetInput(m_mapperInput->GetOutput());
-        ccMapper->SetInputConnection(cc->GetOutputPort());
-        m_cellsIdActor2D->SetMapper(ccMapper);
-
-        ccMapper->Delete();
-        cc->Delete();
-    }
-#endif
-
-    vtkMaskPoints* ptMask = vtkMaskPoints::New();
-    ptMask->SetInputConnection(m_mapperInput);
-    ptMask->SetOnRatio(1);
-    ptMask->RandomModeOn();
-
-    vtkArrowSource* arrow = vtkArrowSource::New();
-
-    vtkGlyph3D* glyph = vtkGlyph3D::New();
-    glyph->SetInputConnection(ptMask->GetOutputPort());
-    glyph->SetSource(arrow->GetOutput());
-    glyph->SetVectorModeToUseNormal();
-    glyph->SetScaleModeToScaleByVector();
-    glyph->SetScaleFactor(10.0);
-    vtkPolyDataMapper* glyphMapper = vtkPolyDataMapper::New();
-    glyphMapper->SetInputConnection(glyph->GetOutputPort());
-
-    this->getActor()->SetMapper(glyphMapper);
-    this->getActor()->GetProperty()->SetColor(1., 1., 1.);
-
-    glyphMapper->Delete();
-    glyph->Delete();
-    arrow->Delete();
-    this->setVtkPipelineModified();
-}
-
-//------------------------------------------------------------------------------
-
-void Normals::doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-void Normals::doStop() throw(fwTools::Failed)
-{
-    this->removeAllPropFromRenderer();
-}
-
-//------------------------------------------------------------------------------
-
-
-
-} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/OrientationMarker.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/OrientationMarker.cpp
new file mode 100644
index 0000000..9bf8d68
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/OrientationMarker.cpp
@@ -0,0 +1,95 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/OrientationMarker.hpp"
+
+#include <fwServices/macros.hpp>
+
+#include <vtkCubeSource.h>
+#include <vtkRenderer.h>
+#include <vtkActor.h>
+#include <vtkAxesActor.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkOrientationMarkerWidget.h>
+#include <vtkGenericDataObjectReader.h>
+#include <vtkPolyData.h>
+#include <vtkTransform.h>
+#include <vtkSmartPointer.h>
+
+
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::OrientationMarker, ::fwData::Object );
+
+namespace visuVTKAdaptor
+{
+
+OrientationMarker::OrientationMarker() : m_hAlign("left")
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void OrientationMarker::doStart() throw(fwTools::Failed)
+{
+
+    std::string file = std::string(BUNDLE_PREFIX) +
+                       "/visuVTKAdaptor_0-1/human.vtk";
+    vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New();
+    reader->SetFileName( file.c_str() );
+    reader->Update();
+    vtkDataObject *obj = reader->GetOutput();
+    vtkPolyData* mesh  = vtkPolyData::SafeDownCast(obj);
+
+    SLM_WARN_IF("Orientation marker load failed", !obj);
+
+
+    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+    mapper->SetInputData(mesh);
+
+    vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
+    actor->SetMapper(mapper);
+
+    vtkOrientationMarkerWidget* widget = vtkOrientationMarkerWidget::New();
+    widget->SetOrientationMarker( actor );
+    widget->SetInteractor( this->getInteractor() );
+
+    if(m_hAlign == "left")
+    {
+        widget->SetViewport( 0.0, 0.0, 0.1, 0.1 );
+    }
+    else if(m_hAlign == "right")
+    {
+        widget->SetViewport( 0.9, 0.0, 1, 0.1 );
+    }
+
+    widget->SetEnabled( 1 );
+    widget->InteractiveOff();
+    this->setVtkPipelineModified();
+}
+
+//-----------------------------------------------------------------------------
+
+void OrientationMarker::doStop() throw(fwTools::Failed)
+{
+    this->removeAllPropFromRenderer();
+}
+
+//-----------------------------------------------------------------------------
+
+void OrientationMarker::doConfigure() throw(fwTools::Failed)
+{
+    if(m_configuration->hasAttribute("hAlign"))
+    {
+        m_hAlign = m_configuration->getAttributeValue("hAlign");
+        SLM_ASSERT("'hAlign' value must be 'left', 'center' or 'right'",
+                   m_hAlign == "left"
+                   || m_hAlign == "right");
+    }
+}
+
+
+} //namespace visuVTKAdaptor
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp
index 9321974..aa87d76 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PickerInteractor.cpp
@@ -1,53 +1,84 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/PickerInteractor.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
-#include <boost/foreach.hpp>
+#include <fwCore/HiResClock.hpp>
 
-#include <vtkAbstractPropPicker.h>
-#include <vtkActor.h>
-#include <vtkCommand.h>
-#include <vtkCubeSource.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkRenderWindowInteractor.h>
-
-#include <fwComEd/InteractionMsg.hpp>
-
-#include <fwData/Material.hpp>
 #include <fwData/Composite.hpp>
+#include <fwData/Material.hpp>
 #include <fwData/Reconstruction.hpp>
 
 #include <fwRenderVTK/vtk/Helpers.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/macros.hpp>
 
-#include "visuVTKAdaptor/PickerInteractor.hpp"
-#include <fwServices/IEditionService.hpp>
-
+#include <vtkAbstractPropPicker.h>
+#include <vtkActor.h>
+#include <vtkCellPicker.h>
+#include <vtkCommand.h>
+#include <vtkCubeSource.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkRenderWindowInteractor.h>
 
 #define START_INTERACTION_EVENT vtkCommand::LeftButtonPressEvent
 #define STOP_INTERACTION_EVENT  vtkCommand::LeftButtonReleaseEvent
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PickerInteractor, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PickerInteractor, ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
+static const std::map< unsigned long, ::fwDataTools::PickingInfo::Event > s_vtkEventIDConversion
+{
+    { vtkCommand::LeftButtonReleaseEvent, ::fwDataTools::PickingInfo::Event::MOUSE_LEFT_UP },
+    { vtkCommand::RightButtonReleaseEvent, ::fwDataTools::PickingInfo::Event::MOUSE_RIGHT_UP },
+    { vtkCommand::MiddleButtonReleaseEvent, ::fwDataTools::PickingInfo::Event::MOUSE_MIDDLE_UP },
+    { vtkCommand::MouseWheelForwardEvent, ::fwDataTools::PickingInfo::Event::MOUSE_WHEELFORWARD },
+    { vtkCommand::LeftButtonPressEvent, ::fwDataTools::PickingInfo::Event::MOUSE_LEFT_DOWN },
+    { vtkCommand::RightButtonPressEvent, ::fwDataTools::PickingInfo::Event::MOUSE_RIGHT_DOWN },
+    { vtkCommand::MiddleButtonPressEvent, ::fwDataTools::PickingInfo::Event::MOUSE_MIDDLE_DOWN },
+    { vtkCommand::MouseWheelBackwardEvent, ::fwDataTools::PickingInfo::Event::MOUSE_WHEELBACKWARD },
+    { vtkCommand::MouseMoveEvent, ::fwDataTools::PickingInfo::Event::MOUSE_MOVE },
+    { vtkCommand::KeyPressEvent, ::fwDataTools::PickingInfo::Event::KEY_PRESS }
+};
+
+PickerInteractor::MapEventIdType PickerInteractor::m_eventIdConversion
+{
+    { std::string("MOUSE_LEFT_UP"), MOUSE_LEFT_UP },
+    { std::string("MOUSE_RIGHT_UP"), MOUSE_RIGHT_UP },
+    { std::string("MOUSE_MIDDLE_UP"), MOUSE_MIDDLE_UP },
+    { std::string("MOUSE_WHEELBACKWARD"), MOUSE_WHEELBACKWARD },
+    { std::string("MOUSE_LEFT_DOWN"), MOUSE_LEFT_DOWN },
+    { std::string("MOUSE_RIGHT_DOWN"), MOUSE_RIGHT_DOWN },
+    { std::string("MOUSE_MIDDLE_DOWN"), MOUSE_MIDDLE_DOWN },
+    { std::string("MOUSE_WHEELBACKWARD"), MOUSE_WHEELBACKWARD },
+    { std::string("MOUSE_MOVE"), MOUSE_MOVE },
+    { std::string("KEY_PRESS"), KEY_PRESS }
+};
+
+const ::fwCom::Signals::SignalKeyType PickerInteractor::s_PICKED_SIGNAL = "picked";
+
+//------------------------------------------------------------------------------
+
+
 class PickerInteractorCallback : public vtkCommand
 {
 public:
-    static PickerInteractorCallback *New()
-    { return new PickerInteractorCallback(); }
+    static PickerInteractorCallback* New()
+    {
+        return new PickerInteractorCallback();
+    }
 
-    PickerInteractorCallback() : m_caller(NULL), m_priority(-1)
+    PickerInteractorCallback() : m_picker(nullptr), m_eventId(nullptr)
     {
-        m_picker = NULL;
         this->PassiveObserverOn();
     }
 
@@ -55,9 +86,8 @@ public:
     {
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
-        assert(m_priority>=0);
         SLM_ASSERT("m_adaptor not instanced", m_adaptor);
         SLM_ASSERT("m_picker not instanced", m_picker);
 
@@ -74,80 +104,60 @@ public:
         display[1] = y;
         display[2] = 0;
 
-        return  m_picker->Pick( display , m_adaptor->getRenderer() );
+        return (m_picker->Pick( display, m_adaptor->getRenderer() ) != 0);
     }
 
 
-    void process(vtkRenderWindowInteractor *caller, unsigned long eventId) // from
+    void process(vtkRenderWindowInteractor* caller, unsigned long eventId) // from
     {
         SLM_ASSERT("bad vtk caller", caller);
-        m_caller = caller;
-
-        switch (eventId)
+        if( m_eventId->find( static_cast< PickerInteractor::EventID>(eventId) ) != m_eventId->end() )
         {
-            case vtkCommand::LeftButtonPressEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_LEFT_DOWN);
-                break;
-            case vtkCommand::LeftButtonReleaseEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_LEFT_UP);
-                break;
-            case vtkCommand::MiddleButtonPressEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_MIDDLE_DOWN);
-                break;
-            case vtkCommand::MiddleButtonReleaseEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_MIDDLE_UP);
-                break;
-            case vtkCommand::RightButtonPressEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_RIGHT_DOWN);
-                break;
-            case vtkCommand::RightButtonReleaseEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_RIGHT_UP);
-                break;
-            //case vtkCommand::EnterEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::);
-                //break;
-            //case vtkCommand::LeaveEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::);
-                //break;
-            //case vtkCommand::KeyPressEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::KEY_DOWN);
-                //break;
-            //case vtkCommand::KeyReleaseEvent :
-                //this->notifyMsg(::fwComEd::InteractionMsg::KEY_UP);
-                //break;
-            case vtkCommand::MouseMoveEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_MOVE);
-                break;
-            case vtkCommand::MouseWheelForwardEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELFORWARD_DOWN);
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELFORWARD_UP);
-                break;
-            case vtkCommand::MouseWheelBackwardEvent :
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELBACKWARD_DOWN);
-                this->notifyMsg(::fwComEd::InteractionMsg::MOUSE_WHEELBACKWARD_UP);
-                break;
-            default:
-                OSLM_ASSERT("Unknown vtk event: " << vtkCommand::GetStringFromEventId(eventId) ,0);
-        };
-
-    }
-
-
-    void notifyMsg(std::string event)
-    {
-        double world[3] = {-1,0,0};
-        this->pickSomething();
-        ::fwRenderVTK::vtk::getNearestPickedPosition(m_picker, m_adaptor->getRenderer(), world);
-        OSLM_TRACE("PICK" << world[0] << " ," << world[1] << " ," << world[2] );
-
-        ::fwComEd::InteractionMsg::sptr msg = ::fwComEd::InteractionMsg::New();
-        msg->setEventPoint(world[0], world[1], world[2]);
-        msg->setEvent(event);
-
-        msg->setModifiersStatus( ::fwComEd::InteractionMsg::CTRL,  m_caller->GetControlKey());
-        msg->setModifiersStatus( ::fwComEd::InteractionMsg::SHIFT, m_caller->GetShiftKey());
-
-        m_adaptor->notifyEvent( msg );
+#ifdef __linux
+            /// We receive way too many MOUSE_MOVE events on Linux
+            /// HACK_FB: Skip some of them...
+            if(eventId == PickerInteractor::MOUSE_MOVE)
+            {
+                m_skipMove++;
+                if( m_skipMove % 10 )
+                {
+                    return;
+                }
+            }
+#endif
+            if(this->pickSomething())
+            {
+                ::fwDataTools::PickingInfo info;
+                ::fwRenderVTK::vtk::getNearestPickedPosition(m_picker, m_adaptor->getRenderer(), info.m_worldPos);
+                OSLM_TRACE("PICK" << info.m_worldPos[0] << " ," << info.m_worldPos[1] << " ," << info.m_worldPos[2] );
+
+                info.m_modifierMask =
+                    caller->GetControlKey() ? ::fwDataTools::PickingInfo::CTRL : ::fwDataTools::PickingInfo::NONE;
+                info.m_modifierMask |=
+                    caller->GetShiftKey() ? ::fwDataTools::PickingInfo::SHIFT : ::fwDataTools::PickingInfo::NONE;
+
+                vtkCellPicker* picker = vtkCellPicker::SafeDownCast ( m_picker );
+                if (picker)
+                {
+                    info.m_cellId         = picker->GetCellId();
+                    info.m_closestPointId = picker->GetPointId();
+                }
+
+                const auto iter = s_vtkEventIDConversion.find(eventId);
+                SLM_ASSERT("Unknown eventId", iter != s_vtkEventIDConversion.end());
+                info.m_eventId = iter->second;
+
+                info.m_keyPressed = caller->GetKeyCode();
+                OSLM_TRACE("EVENT" << static_cast<int>(info.m_eventId) );
+                OSLM_TRACE("KEY" << info.m_keyPressed << " - MASK " << static_cast<int>(info.m_modifierMask) );
+
+                info.m_timestamp = ::fwCore::HiResClock::getTimeInMilliSec();
+
+                auto sig = m_adaptor->signal<PickerInteractor::PickedSignalType>(
+                    PickerInteractor::s_PICKED_SIGNAL);
+                sig->asyncEmit(info);
+            }
+        }
     }
 
     void setAdaptor( PickerInteractor::sptr adaptor)
@@ -155,30 +165,31 @@ public:
         m_adaptor = adaptor;
     }
 
-    void setPicker( vtkAbstractPropPicker *adaptor)
+    void setPicker( vtkAbstractPropPicker* picker)
     {
-        m_picker = adaptor;
+        m_picker = picker;
     }
 
-    void setPriority( float priority )
+    void setEventId(PickerInteractor::SetEventIdType* eventId)
     {
-        m_priority = priority;
+        m_eventId = eventId;
     }
 
-protected :
-    vtkRenderWindowInteractor *m_caller;
+protected:
+    PickerInteractor::SetEventIdType* m_eventId;
     PickerInteractor::sptr m_adaptor;
-    vtkAbstractPropPicker *m_picker;
-    float    m_priority;
+    vtkAbstractPropPicker* m_picker;
+#ifdef __linux
+    unsigned int m_skipMove = 0u;
+#endif // __linux
 
 };
 
 //------------------------------------------------------------------------------
 
-PickerInteractor::PickerInteractor() throw()
-    : m_priority(0.999)
+PickerInteractor::PickerInteractor() throw() : m_interactionCommand(nullptr)
 {
-    //handlingEventOff();
+    newSignal<PickedSignalType>(s_PICKED_SIGNAL);
 }
 
 //------------------------------------------------------------------------------
@@ -189,40 +200,55 @@ PickerInteractor::~PickerInteractor() throw()
 
 //------------------------------------------------------------------------------
 
-void PickerInteractor::configuring() throw(fwTools::Failed)
+void PickerInteractor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
+    SLM_ASSERT("Required element 'config' is missing.", m_configuration->getName() == "config");
+
+    if (m_configuration->hasAttribute("event"))
+    {
+        const std::string eventTxt = m_configuration->getAttributeValue("event");
 
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+        ::boost::char_separator<char> sep(", ;");
+        ::boost::tokenizer< ::boost::char_separator<char> > tok(eventTxt, sep);
+        for( const auto it : tok)
+        {
+            const auto iter = m_eventIdConversion.find(it);
+            SLM_ASSERT("Unknown eventId '"+ it+"'.", iter != m_eventIdConversion.end());
+            m_eventId.insert(iter->second);
+        }
+    }
+    else
+    {
+        for(auto elt : m_eventIdConversion)
+        {
+            m_eventId.insert(elt.second);
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
 
 void PickerInteractor::doStart() throw(fwTools::Failed)
 {
-    PickerInteractorCallback *observer = PickerInteractorCallback::New();
+    PickerInteractorCallback* observer = PickerInteractorCallback::New();
     observer->setAdaptor( PickerInteractor::dynamicCast(this->getSptr()) );
     observer->setPicker(this->getPicker());
-    observer->setPriority(  m_priority );
+    observer->setEventId(&m_eventId);
 
     m_interactionCommand = observer;
 
-    vtkRenderWindowInteractor *interactor = this->getInteractor();
-    interactor->AddObserver(vtkCommand::LeftButtonPressEvent    , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::LeftButtonReleaseEvent  , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MiddleButtonPressEvent  , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MiddleButtonReleaseEvent, m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::RightButtonPressEvent   , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::RightButtonReleaseEvent , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::EnterEvent              , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::LeaveEvent              , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::KeyPressEvent           , m_interactionCommand, m_priority);
-    //interactor->AddObserver(vtkCommand::KeyReleaseEvent         , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MouseMoveEvent          , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MouseWheelForwardEvent  , m_interactionCommand, m_priority);
-    interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent , m_interactionCommand, m_priority);
+    vtkRenderWindowInteractor* interactor = this->getInteractor();
+    const float priority                  = 0.999f;
+    interactor->AddObserver(vtkCommand::LeftButtonPressEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::LeftButtonReleaseEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MiddleButtonPressEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MiddleButtonReleaseEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::RightButtonPressEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::RightButtonReleaseEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MouseMoveEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MouseWheelForwardEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::MouseWheelBackwardEvent, m_interactionCommand, priority);
+    interactor->AddObserver(vtkCommand::KeyPressEvent, m_interactionCommand, priority);
 
 }
 
@@ -242,33 +268,23 @@ void PickerInteractor::doSwap() throw(fwTools::Failed)
 
 void PickerInteractor::doStop() throw(fwTools::Failed)
 {
-    vtkRenderWindowInteractor *interactor = this->getInteractor();
-    interactor->RemoveObservers(vtkCommand::LeftButtonPressEvent    , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::LeftButtonReleaseEvent  , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MiddleButtonPressEvent  , m_interactionCommand);
+    vtkRenderWindowInteractor* interactor = this->getInteractor();
+    interactor->RemoveObservers(vtkCommand::LeftButtonPressEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::LeftButtonReleaseEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MiddleButtonPressEvent, m_interactionCommand);
     interactor->RemoveObservers(vtkCommand::MiddleButtonReleaseEvent, m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::RightButtonPressEvent   , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::RightButtonReleaseEvent , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::EnterEvent              , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::LeaveEvent              , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::KeyPressEvent           , m_interactionCommand);
-    //interactor->RemoveObservers(vtkCommand::KeyReleaseEvent         , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MouseMoveEvent          , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MouseWheelForwardEvent  , m_interactionCommand);
-    interactor->RemoveObservers(vtkCommand::MouseWheelBackwardEvent , m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::RightButtonPressEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::RightButtonReleaseEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MouseMoveEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MouseWheelForwardEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::MouseWheelBackwardEvent, m_interactionCommand);
+    interactor->RemoveObservers(vtkCommand::KeyPressEvent, m_interactionCommand);
 
     m_interactionCommand->Delete();
-    m_interactionCommand = NULL;
+    m_interactionCommand = nullptr;
     this->unregisterServices();
 }
 
 //------------------------------------------------------------------------------
 
-void PickerInteractor::notifyEvent(::fwComEd::InteractionMsg::sptr msg)
-{
-    ::fwServices::IEditionService::notify(this->getSptr(), this->getObject(), msg);
-}
-
-//------------------------------------------------------------------------------
-
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plane.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plane.cpp
index 260ca74..a06483d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plane.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plane.cpp
@@ -1,60 +1,65 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
+
+#include "visuVTKAdaptor/Plane.hpp"
+#include "visuVTKAdaptor/Point.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Color.hpp>
+#include <fwData/Plane.hpp>
 
 #include <fwMath/IntrasecTypes.hpp>
 #include <fwMath/PlaneFunctions.hpp>
 
-#include <fwData/Plane.hpp>
-#include <fwData/Color.hpp>
+#include <fwRenderVTK/vtk/Helpers.hpp>
+#include <fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/PointMsg.hpp>
-#include <fwComEd/PlaneMsg.hpp>
+#include <fwServices/op/Add.hpp>
 
 #include <vtkActor.h>
 #include <vtkPlaneCollection.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkPropCollection.h>
 #include <vtkProperty.h>
-#include <vtkRenderWindowInteractor.h>
 #include <vtkRenderer.h>
+#include <vtkRenderWindowInteractor.h>
 
-
-#include "fwRenderVTK/vtk/Helpers.hpp"
-#include "fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp"
-#include "visuVTKAdaptor/Plane.hpp"
-#include "visuVTKAdaptor/Point.hpp"
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Plane, ::fwData::Plane ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Plane, ::fwData::Plane );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_POINTS_SLOT     = "updatePoints";
+static const ::fwCom::Slots::SlotKeyType s_START_INTERACTION_SLOT = "startInteraction";
+static const ::fwCom::Slots::SlotKeyType s_SELECT_PLANE_SLOT      = "selectPlane";
 
+const ::fwCom::Signals::SignalKeyType Plane::s_INTERACTION_STARTED_SIG = "interactionStarted";
 
-Plane::Plane() throw()
-{
-    SLM_TRACE_FUNC();
-
-    m_vtkPlaneCollection = 0;
-    m_vtkImplicitPlane = 0;
+//------------------------------------------------------------------------------
 
-    //addNewHandledEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );
-    //addNewHandledEvent( ::fwComEd::PointMsg::START_POINT_INTERACTION );
-    //addNewHandledEvent( ::fwComEd::PlaneMsg::PLANE_MODIFIED );
-    //addNewHandledEvent( ::fwComEd::PlaneMsg::WAS_SELECTED );
-    //addNewHandledEvent( ::fwComEd::PlaneMsg::WAS_DESELECTED );
+Plane::Plane() throw() :
+    m_vtkPlane(nullptr),
+    m_actorPlan(nullptr),
+    m_vtkImplicitPlane(nullptr),
+    m_vtkPlaneCollection(nullptr)
+{
+    newSlot(s_UPDATE_POINTS_SLOT, &Plane::updatePoints, this);
+    newSlot(s_START_INTERACTION_SLOT, &Plane::startInteraction, this);
+    newSlot(s_SELECT_PLANE_SLOT, &Plane::selectPlane, this);
 
-    m_connections = ::fwServices::helper::SigSlotConnection::New();
+    newSignal< InteractionStartedSignalType >(s_INTERACTION_STARTED_SIG);
 }
 
 //------------------------------------------------------------------------------
@@ -66,13 +71,8 @@ Plane::~Plane() throw()
 
 //------------------------------------------------------------------------------
 
-void Plane::configuring() throw(fwTools::Failed)
+void Plane::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -81,51 +81,13 @@ void Plane::doStart() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
-//  vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
-//  mapper->SetInput( m_vtkPlane->GetOutput() );
-//  m_actorPlan->SetMapper(mapper);
-//  m_actorPlan->GetProperty()->SetOpacity( 0.5 );
-//  m_actorPlan->GetProperty()->SetColor( 1., 1., 1. );
-//  this->addToRenderer(m_actorPlan);
-//
-//  mapper->Delete();
-//  mapper = 0;
-//
-//  vtkMaskPoints* ptMask = vtkMaskPoints::New();
-//  ptMask->SetInputConnection(m_vtkPlane->GetOutputPort());
-//  ptMask->SetOnRatio(1);
-//  //ptMask->RandomModeOn();
-//
-//  vtkArrowSource* arrow = vtkArrowSource::New();
-//
-//  vtkGlyph3D* glyph = vtkGlyph3D::New();
-//  glyph->SetInputConnection(ptMask->GetOutputPort());
-//  glyph->SetSource(arrow->GetOutput());
-//  glyph->SetVectorModeToUseNormal();
-//  glyph->SetScaleModeToScaleByVector();
-//  glyph->SetScaleFactor(50.0);
-//
-//  vtkPolyDataMapper* glyphMapper = vtkPolyDataMapper::New();
-//  glyphMapper->SetInputConnection(glyph->GetOutputPort());
-//
-//  vtkActor *arrowsActor = vtkActor::New();
-//    arrowsActor->SetMapper(glyphMapper);
-//  arrowsActor->GetProperty()->SetOpacity( 0.5 );
-//  this->addToRenderer(arrowsActor);
-//
-//  arrowsActor->Delete();
-//  ptMask->Delete();
-//  glyph->Delete();
-//  glyphMapper->Delete();
-//  arrow->Delete();
-
     m_pPlane = this->getObject< ::fwData::Plane >();
 
-    BOOST_FOREACH( ::fwData::Point::sptr point, m_pPlane.lock()->getPoints() )
+    for( ::fwData::Point::sptr point :  m_pPlane.lock()->getPoints() )
     {
         ::fwRenderVTK::IVtkAdaptorService::sptr servicePoint =
-                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
-        ( point, "::visuVTKAdaptor::Point" );
+            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
+                ( point, "::visuVTKAdaptor::Point" );
         SLM_ASSERT("servicePoint not instanced", servicePoint);
 
         servicePoint->setRenderService(this->getRenderService());
@@ -136,8 +98,10 @@ void Plane::doStart() throw(fwTools::Failed)
 
         this->registerService(servicePoint);
 
-        m_connections->connect(point, ::fwData::Object::s_OBJECT_MODIFIED_SIG,
-                               this->getSptr(), ::fwServices::IService::s_RECEIVE_SLOT);
+        m_connections.connect(point, ::fwData::Object::s_MODIFIED_SIG,
+                              this->getSptr(), s_UPDATE_POINTS_SLOT);
+        m_connections.connect(servicePoint, ::visuVTKAdaptor::Point::s_INTERACTION_STARTED_SIG,
+                              this->getSptr(), s_START_INTERACTION_SLOT);
     }
 
     if (m_vtkPlaneCollection)
@@ -169,11 +133,13 @@ void Plane::doUpdate() throw(fwTools::Failed)
     ::fwData::Point::sptr pt0 = plane->getPoints()[0];
     ::fwData::Point::sptr pt1 = plane->getPoints()[1];
     ::fwData::Point::sptr pt2 = plane->getPoints()[2];
-    plane->computePlaneFromPoints();
+
+    fwPlane planeDesc;
+    ::fwMath::setValues(planeDesc, pt0->getCoord(), pt1->getCoord(), pt2->getCoord());
 
     if(m_vtkImplicitPlane)
     {
-        fwVec3d normal = ::fwMath::getNormal(plane->getPlane());
+        fwVec3d normal = ::fwMath::getNormal(planeDesc);
 
         m_vtkImplicitPlane->SetOrigin(pt0->getCoord()[0], pt0->getCoord()[1], pt0->getCoord()[2]);
         m_vtkImplicitPlane->SetNormal(normal[0], normal[1], normal[2]);
@@ -184,50 +150,28 @@ void Plane::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Plane::doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+void Plane::updatePoints()
 {
-    SLM_TRACE_FUNC();
-    ::fwComEd::PointMsg::csptr pointMsg = ::fwComEd::PointMsg::dynamicConstCast( _msg );
-    ::fwComEd::PlaneMsg::csptr planeMsg = ::fwComEd::PlaneMsg::dynamicConstCast( _msg );
-    if ( pointMsg)
-    {
-        if (pointMsg->hasEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED ) )
-        {
-            this->doUpdate();
-            ::fwComEd::PlaneMsg::sptr msg = ::fwComEd::PlaneMsg::New();
-            msg->addEvent( ::fwComEd::PlaneMsg::PLANE_MODIFIED );
-            ::fwServices::IEditionService::notify( this->getSptr(), m_pPlane.lock(), msg );
-        }
+    this->updating();
 
-        if ( pointMsg->hasEvent( ::fwComEd::PointMsg::START_POINT_INTERACTION ))
-        {
-            ::fwComEd::PlaneMsg::sptr msg = ::fwComEd::PlaneMsg::New();
-            msg->addEvent( ::fwComEd::PlaneMsg::START_PLANE_INTERACTION );
-            ::fwServices::IEditionService::notify( this->getSptr(), m_pPlane.lock(), msg );
-        }
-    }
-    else if (planeMsg)
+    auto sig = m_pPlane.lock()->signal< ::fwData::Object::ModifiedSignalType >(
+        ::fwData::Object::s_MODIFIED_SIG);
     {
-        if (planeMsg->hasEvent( ::fwComEd::PlaneMsg::PLANE_MODIFIED ) )
-        {
-            this->doUpdate();
-        }
-        else  if (planeMsg->hasEvent( ::fwComEd::PlaneMsg::WAS_SELECTED ) )
-        {
-            // highlight selected plan
-            this->selectPlane(true);
-            setVtkPipelineModified();
-        }
-        else  if (planeMsg->hasEvent( ::fwComEd::PlaneMsg::WAS_DESELECTED ) )
-        {
-            this->selectPlane(false);
-            setVtkPipelineModified();
-        }
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
     }
 }
 
 //------------------------------------------------------------------------------
 
+void Plane::startInteraction()
+{
+    auto sig = m_pPlane.lock()->signal< InteractionStartedSignalType >( s_INTERACTION_STARTED_SIG);
+    sig->asyncEmit( m_pPlane.lock() );
+}
+
+//------------------------------------------------------------------------------
+
 void Plane::doStop() throw(fwTools::Failed)
 {
     if (m_vtkPlaneCollection && m_vtkImplicitPlane)
@@ -237,7 +181,7 @@ void Plane::doStop() throw(fwTools::Failed)
         m_vtkImplicitPlane = 0;
     }
 
-    m_connections->disconnect();
+    m_connections.disconnect();
 
     this->unregisterServices();
     this->removeAllPropFromRenderer();
@@ -245,7 +189,7 @@ void Plane::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Plane::setVtkPlaneCollection( vtkObject * col )
+void Plane::setVtkPlaneCollection( vtkObject* col )
 {
     if (m_vtkPlaneCollection != col)
     {
@@ -255,7 +199,7 @@ void Plane::setVtkPlaneCollection( vtkObject * col )
             {
                 m_vtkPlaneCollection->RemoveItem(m_vtkImplicitPlane);
             }
-            m_vtkPlaneCollection=0;
+            m_vtkPlaneCollection = 0;
         }
 
         if ( col )
@@ -274,7 +218,7 @@ void Plane::setVtkPlaneCollection( vtkObject * col )
 
 void Plane::selectPlane(bool select)
 {
-    BOOST_FOREACH( ServiceVector::value_type service, m_subServices )
+    for( ServiceVector::value_type service :  m_subServices )
     {
         if(!service.expired())
         {
@@ -289,10 +233,25 @@ void Plane::selectPlane(bool select)
             }
         }
     }
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
 
+//------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType Plane::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Plane::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Plane::s_SELECTED_SIG, s_SELECT_PLANE_SLOT ) );
 
+    return connections;
 }
 
+//------------------------------------------------------------------------------
+
+
 
 } //namespace visuVTKAdaptor
+
+#endif //ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneInteractor.cpp
index 1ee73b4..d6f6a1d 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneInteractor.cpp
@@ -1,31 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
 
+#include "visuVTKAdaptor/PlaneInteractor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
 
 #include <fwData/Plane.hpp>
 
 #include <fwMath/PlaneFunctions.hpp>
 
-#include <fwComEd/PlaneMsg.hpp>
-#include <fwComEd/PointMsg.hpp>
-
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
 
 #include <vtkRenderWindowInteractor.h>
 #include <vtkCommand.h>
 
-#include "visuVTKAdaptor/PlaneInteractor.hpp"
-#include <fwServices/IEditionService.hpp>
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneInteractor, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneInteractor, ::fwData::Object );
 
 namespace visuVTKAdaptor
 {
@@ -34,13 +31,17 @@ class PlaneInteractorCallback : public vtkCommand
 {
 public:
     static PlaneInteractorCallback *New()
-    { return new PlaneInteractorCallback(); }
+    {
+        return new PlaneInteractorCallback();
+    }
 
     PlaneInteractorCallback()
-    {}
+    {
+    }
 
     ~PlaneInteractorCallback()
-    {}
+    {
+    }
 
     virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
     {
@@ -78,41 +79,35 @@ public:
         m_adaptor = adaptor;
     }
 
-protected :
+protected:
     PlaneInteractor::sptr m_adaptor;
 
 };
 
 //------------------------------------------------------------------------------
 
-PlaneInteractor::PlaneInteractor() throw()
+PlaneInteractor::PlaneInteractor() throw() :
+    m_vtkObserver(nullptr),
+    m_priority(1.)
 {
-    m_priority = 1;
-    m_vtkObserver = NULL;
-    //handlingEventOff();
 }
 
 //------------------------------------------------------------------------------
 
 PlaneInteractor::~PlaneInteractor() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void PlaneInteractor::configuring() throw(fwTools::Failed)
+void PlaneInteractor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    SLM_ASSERT("Tag config is required", m_configuration->getName() == "config");
-    //this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    //this->setPickerId( m_configuration->getAttributeValue("picker") );
 }
 
 //------------------------------------------------------------------------------
 
 void PlaneInteractor::doStart() throw(fwTools::Failed)
 {
-
     if (::fwData::Plane::dynamicCast(this->getObject()))
     {
         PlaneInteractorCallback *observer = PlaneInteractorCallback::New();
@@ -120,7 +115,7 @@ void PlaneInteractor::doStart() throw(fwTools::Failed)
 
         m_vtkObserver = observer;
 
-        this->getInteractor()->AddObserver(vtkCommand::KeyPressEvent  , m_vtkObserver, m_priority);
+        this->getInteractor()->AddObserver(vtkCommand::KeyPressEvent, m_vtkObserver, m_priority);
         this->getInteractor()->AddObserver(vtkCommand::KeyReleaseEvent, m_vtkObserver, m_priority);
         this->getInteractor()->AddObserver(vtkCommand::MouseWheelForwardEvent, m_vtkObserver, m_priority);
         this->getInteractor()->AddObserver(vtkCommand::MouseWheelBackwardEvent, m_vtkObserver, m_priority);
@@ -148,22 +143,17 @@ void PlaneInteractor::doStop() throw(fwTools::Failed)
 {
     if(m_vtkObserver)
     {
-        this->getInteractor()->RemoveObservers(vtkCommand::KeyPressEvent  , m_vtkObserver);
+        this->getInteractor()->RemoveObservers(vtkCommand::KeyPressEvent, m_vtkObserver);
         this->getInteractor()->RemoveObservers(vtkCommand::KeyReleaseEvent, m_vtkObserver);
         this->getInteractor()->RemoveObservers(vtkCommand::MouseWheelForwardEvent, m_vtkObserver);
         this->getInteractor()->RemoveObservers(vtkCommand::MouseWheelBackwardEvent, m_vtkObserver);
         m_vtkObserver->Delete();
-        m_vtkObserver = NULL;
+        m_vtkObserver = nullptr;
     }
 }
 
 //------------------------------------------------------------------------------
 
-void PlaneInteractor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
 void PlaneInteractor::switchPlaneNormal()
 {
     ::fwData::Plane::sptr plane ( ::fwData::Plane::dynamicCast( this->getObject() ) );
@@ -177,9 +167,8 @@ void PlaneInteractor::switchPlaneNormal()
         {
             plane->setValue(pt0,pt2,pt1);
 
-            ::fwComEd::PlaneMsg::sptr modifiedMsg = ::fwComEd::PlaneMsg::New();
-            modifiedMsg->addEvent( ::fwComEd::PlaneMsg::PLANE_MODIFIED );
-            ::fwServices::IEditionService::notify( this->getSptr(), plane, modifiedMsg);
+            auto sig = plane->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
         }
         this->setVtkPipelineModified();
     }
@@ -196,7 +185,10 @@ void PlaneInteractor::pushPlane(double factor)
         ::fwData::Point::sptr pt1 = plane->getPoints()[1];
         ::fwData::Point::sptr pt2 = plane->getPoints()[2];
 
-        fwVec3d normal = ::fwMath::getNormal(plane->getPlane());
+        fwPlane planeDesc;
+        ::fwMath::setValues(planeDesc, pt0->getCoord(), pt1->getCoord(), pt2->getCoord());
+
+        fwVec3d normal = ::fwMath::getNormal(planeDesc);
         if ( pt0 && pt1 && pt2 )
         {
             fwVec3d vec0 = pt0->getCoord();
@@ -214,18 +206,19 @@ void PlaneInteractor::pushPlane(double factor)
             pt2->setCoord(vec2);
 
             plane->setValue(pt0,pt1,pt2);
+            ::fwMath::setValues(planeDesc, pt0->getCoord(), pt1->getCoord(), pt2->getCoord());
+            normal = ::fwMath::getNormal(planeDesc);
+
+            ::fwData::Object::ModifiedSignalType::sptr sig;
+            sig = pt0->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
+
+            sig = pt1->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
+
+            sig = pt2->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
 
-            normal = ::fwMath::getNormal(plane->getPlane());
-
-            ::fwComEd::PointMsg::sptr modifiedMsg = ::fwComEd::PointMsg::New();
-            modifiedMsg->addEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );
-            ::fwServices::IEditionService::notify( this->getSptr(), pt0, modifiedMsg);
-            ::fwComEd::PointMsg::sptr modifiedMsg2 = ::fwComEd::PointMsg::New();
-            modifiedMsg2->addEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );
-            ::fwServices::IEditionService::notify( this->getSptr(), pt1, modifiedMsg2);
-            ::fwComEd::PointMsg::sptr modifiedMsg3 = ::fwComEd::PointMsg::New();
-            modifiedMsg3->addEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );
-            ::fwServices::IEditionService::notify( this->getSptr(), pt2, modifiedMsg3);
             this->setVtkPipelineModified();
         }
     }
@@ -238,11 +231,12 @@ void PlaneInteractor::deselectPlane()
     ::fwData::Plane::sptr plane ( ::fwData::Plane::dynamicCast( this->getObject() ) );
     if (plane)
     {
-        ::fwComEd::PlaneMsg::sptr deselectMsg = ::fwComEd::PlaneMsg::New();
-        deselectMsg->addEvent( ::fwComEd::PlaneMsg::DESELECT_PLANE );
-        ::fwServices::IEditionService::notify( this->getSptr(), plane, deselectMsg);
+        auto sig = plane->signal< ::fwData::Plane::SelectedSignalType >(::fwData::Plane::s_SELECTED_SIG);
+        sig->asyncEmit(false);
     }
 }
 
 
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneList.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneList.cpp
index 5de736b..344a6f6 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneList.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneList.cpp
@@ -1,72 +1,78 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
 
-#include <fwData/PlaneList.hpp>
-#include <fwData/Plane.hpp>
-#include <fwData/Boolean.hpp>
+#include "visuVTKAdaptor/Plane.hpp"
+#include "visuVTKAdaptor/PlaneList.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwComEd/PlaneMsg.hpp>
-#include <fwComEd/PlaneListMsg.hpp>
+#include <fwData/Boolean.hpp>
+#include <fwData/Plane.hpp>
+#include <fwData/PlaneList.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/op/Add.hpp>
 
-#include <vtkCommand.h>
-#include <vtkCellPicker.h>
 #include <vtkActor.h>
 #include <vtkAssemblyNode.h>
 #include <vtkAssemblyPath.h>
+#include <vtkCellPicker.h>
+#include <vtkCommand.h>
 #include <vtkPolyDataMapper.h>
 #include <vtkRenderer.h>
 #include <vtkRenderWindowInteractor.h>
 
-#include "visuVTKAdaptor/Plane.hpp"
-#include "visuVTKAdaptor/PlaneList.hpp"
-#include <fwServices/IEditionService.hpp>
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneList, ::fwData::PlaneList ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneList, ::fwData::PlaneList );
 
 namespace visuVTKAdaptor
 {
 
+const ::fwCom::Signals::SignalKeyType s_SELECTED_SIG = "selected";
+
+const ::fwCom::Slots::SlotKeyType s_UPDATE_SELECTION_SLOT = "updateSelection";
+const ::fwCom::Slots::SlotKeyType s_UPDATE_PLANES_SLOT    = "updatePlanes";
+const ::fwCom::Slots::SlotKeyType s_SHOW_PLANES_SLOT      = "showPlanes";
+
+//------------------------------------------------------------------------------
 
 
 void notifyDeletePlane( ::fwData::PlaneList::sptr planeList, ::fwData::Plane::sptr plane )
 {
-    ::fwComEd::PlaneListMsg::sptr msg = ::fwComEd::PlaneListMsg::New();
-    msg->addEvent( ::fwComEd::PlaneListMsg::DESELECT_ALL_PLANES );
-    msg->addEvent( ::fwComEd::PlaneListMsg::REMOVE_PLANE, plane );
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = planeList->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-    fwServicesNotifyMsgMacro( planeList->getLightID(), sig, msg );
+    auto sig = planeList->signal< ::fwData::PlaneList::PlaneRemovedSignalType >(
+        ::fwData::PlaneList::s_PLANE_REMOVED_SIG );
+    sig->asyncEmit(plane);
 }
 
 class vtkPlaneDeleteCallBack : public vtkCommand
 {
 
-public :
-    static vtkPlaneDeleteCallBack *New( ::fwRenderVTK::IVtkAdaptorService *service)
-    { return new vtkPlaneDeleteCallBack(service); }
+public:
+    static vtkPlaneDeleteCallBack* New( ::fwRenderVTK::IVtkAdaptorService* service)
+    {
+        return new vtkPlaneDeleteCallBack(service);
+    }
 
-    vtkPlaneDeleteCallBack( ::fwRenderVTK::IVtkAdaptorService *service )
-    : m_service(service),
-      m_picker( vtkCellPicker::New() ),
-      m_propCollection( vtkPropCollection::New() )
+    vtkPlaneDeleteCallBack( ::fwRenderVTK::IVtkAdaptorService* service ) :
+        m_service(service),
+        m_picker( vtkCellPicker::New() ),
+        m_propCollection( vtkPropCollection::New() )
     {
         m_lastPos[0] = -1;
         m_lastPos[1] = -1;
         m_picker->PickFromListOn();
         m_picker->SetTolerance(0.001);
 
-        m_display[2]=0.0;
+        m_display[2] = 0.0;
     }
 
     ~vtkPlaneDeleteCallBack( )
@@ -86,7 +92,7 @@ public :
         m_service->getAllSubProps(m_propCollection);
         m_propCollection->InitTraversal();
 
-        vtkProp *prop;
+        vtkProp* prop;
 
         while ( (prop = m_propCollection->GetNextProp()) )
         {
@@ -94,7 +100,7 @@ public :
         }
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         int pos[2];
         m_service->getInteractor()->GetLastEventPosition(pos);
@@ -106,7 +112,7 @@ public :
             m_display[1] = pos[1];
 
             this->fillPickList();
-            if (m_picker->Pick( m_display , m_service->getRenderer() ) )
+            if (m_picker->Pick( m_display, m_service->getRenderer() ) )
             {
                 if(getSelectedPlane())
                 {
@@ -118,7 +124,8 @@ public :
                 }
             }
         }
-        else if ( eventId == vtkCommand::RightButtonReleaseEvent && std::equal(pos, pos+1, m_lastPos) && !m_pickedPlane.expired() )
+        else if ( eventId == vtkCommand::RightButtonReleaseEvent &&
+                  std::equal(pos, pos+1, m_lastPos) && !m_pickedPlane.expired() )
         {
             // backup of plane
             ::fwData::Plane::sptr planeBackup(m_pickedPlane);
@@ -126,16 +133,16 @@ public :
             ::fwData::PlaneList::sptr planeList = m_service->getObject< ::fwData::PlaneList >();
             planeList->getRefPlanes().erase
             (
-                    std::find( planeList->getRefPlanes().begin(), planeList->getRefPlanes().end(), m_pickedPlane.lock())
+                std::find( planeList->getRefPlanes().begin(), planeList->getRefPlanes().end(), m_pickedPlane.lock())
             );
             notifyDeletePlane(planeList, planeBackup);
         }
     }
     bool getSelectedPlane()
     {
-        bool isFind = false;
-        vtkPropCollection *propc = m_picker->GetActors();
-        vtkProp *prop;
+        bool isFind              = false;
+        vtkPropCollection* propc = m_picker->GetActors();
+        vtkProp* prop;
 
         propc->InitTraversal();
         while ( (prop = propc->GetNextProp()) )
@@ -146,7 +153,8 @@ public :
                 ::fwData::PlaneList::sptr planeList = m_service->getObject< ::fwData::PlaneList >();
                 if(!planeList->getRefPlanes().empty())
                 {
-                    ::fwData::PlaneList::PlaneListContainer::iterator itr = std::find( planeList->getRefPlanes().begin(), planeList->getRefPlanes().end(), m_pickedPlane.lock());
+                    ::fwData::PlaneList::PlaneListContainer::iterator itr = std::find(
+                        planeList->getRefPlanes().begin(), planeList->getRefPlanes().end(), m_pickedPlane.lock());
                     if(itr != planeList->getRefPlanes().end() )
                     {
                         isFind = true;
@@ -158,10 +166,10 @@ public :
         return isFind;
     }
 
-protected :
+protected:
     ::fwRenderVTK::IVtkAdaptorService *m_service;
-    vtkPicker * m_picker;
-    vtkPropCollection * m_propCollection;
+    vtkPicker* m_picker;
+    vtkPropCollection* m_propCollection;
     double m_display[3];
     int m_lastPos[2];
     ::fwData::Plane::wptr m_pickedPlane;
@@ -170,12 +178,13 @@ protected :
 
 //------------------------------------------------------------------------------
 
-PlaneList::PlaneList() throw()
-    : m_planeCollectionId("")
+PlaneList::PlaneList() throw()  : m_rightButtonCommand(nullptr), m_planeCollectionId("")
 {
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::ADD_PLANE );
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::REMOVE_PLANE );
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::PLANELIST_VISIBILITY );
+    newSlot(s_UPDATE_SELECTION_SLOT, &PlaneList::updateSelection, this);
+    newSlot(s_UPDATE_PLANES_SLOT, &PlaneList::updatePlanes, this);
+    newSlot(s_SHOW_PLANES_SLOT, &PlaneList::showPlanes, this);
+
+    newSignal< SelectedignalType >(s_SELECTED_SIG);
 }
 
 //------------------------------------------------------------------------------
@@ -186,14 +195,9 @@ PlaneList::~PlaneList() throw()
 
 //------------------------------------------------------------------------------
 
-void PlaneList::configuring() throw(fwTools::Failed)
+void PlaneList::doConfigure() throw(fwTools::Failed)
 {
-
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
     this->setPlaneCollectionId( m_configuration->getAttributeValue("planecollection") );
 }
 
@@ -202,8 +206,8 @@ void PlaneList::configuring() throw(fwTools::Failed)
 void PlaneList::doStart() throw(fwTools::Failed)
 {
     m_rightButtonCommand = vtkPlaneDeleteCallBack::New(this);
-    this->getInteractor()->AddObserver( "RightButtonPressEvent" , m_rightButtonCommand, 1 );
-    this->getInteractor()->AddObserver( "RightButtonReleaseEvent" , m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonPressEvent", m_rightButtonCommand, 1 );
+    this->getInteractor()->AddObserver( "RightButtonReleaseEvent", m_rightButtonCommand, 1 );
 
     this->doUpdate();
 }
@@ -219,10 +223,10 @@ void PlaneList::doUpdate() throw(fwTools::Failed)
     showPlanes = planeList->getField("ShowPlanes", ::fwData::Boolean::New(true))->value();
     if(showPlanes)
     {
-        BOOST_FOREACH( ::fwData::Plane::sptr plane, planeList->getPlanes() )
+        for( ::fwData::Plane::sptr plane :  planeList->getPlanes() )
         {
             ::fwRenderVTK::IVtkAdaptorService::sptr servicePlane =
-                    ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
+                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
                     ( plane, "::visuVTKAdaptor::Plane" );
             SLM_ASSERT("servicePlane not instanced", servicePlane);
 
@@ -237,6 +241,9 @@ void PlaneList::doUpdate() throw(fwTools::Failed)
             }
             servicePlane->start();
 
+            m_planeConnections.connect(servicePlane, Plane::s_INTERACTION_STARTED_SIG, this->getSptr(),
+                                       s_UPDATE_SELECTION_SLOT);
+
             this->registerService(servicePlane);
         }
     }
@@ -244,33 +251,27 @@ void PlaneList::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void PlaneList::doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void PlaneList::updatePlanes()
 {
-    SLM_TRACE_FUNC();
-    ::fwComEd::PlaneListMsg::csptr planeListMsg = ::fwComEd::PlaneListMsg::dynamicConstCast( msg );
-    if ( planeListMsg )
-    {
-        if (planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::ADD_PLANE )
-                || planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::REMOVE_PLANE) )
-        {
-            this->doStop();
-            this->doStart();
-        }
-        else if ( planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::PLANELIST_VISIBILITY ) )
-        {
-            ::fwData::PlaneList::sptr planeList = this->getObject< ::fwData::PlaneList >();
+    this->doStop();
+    this->doStart();
+    this->setVtkPipelineModified();
+    this->requestRender();
+}
 
-            this->doStop();
-            bool showPlanes;
-            showPlanes = planeList->getField("ShowPlanes", ::fwData::Boolean::New(true))->value();
-            OSLM_INFO( "Receive event ShowPlanes : " << showPlanes );
-            if(showPlanes)
-            {
-                this->doStart();
-            }
-        }
+//------------------------------------------------------------------------------
+
+void PlaneList::showPlanes(bool visible)
+{
+    ::fwData::PlaneList::sptr planeList = this->getObject< ::fwData::PlaneList >();
+
+    this->doStop();
+    if(visible)
+    {
+        this->doStart();
     }
     this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
@@ -290,6 +291,14 @@ void PlaneList::doSwap() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
+void PlaneList::updateSelection(::fwData::Plane::sptr plane)
+{
+    auto sig = this->signal< SelectedignalType >(s_SELECTED_SIG);
+    sig->asyncEmit(plane);
+}
+
+//------------------------------------------------------------------------------
+
 void PlaneList::doStop() throw(fwTools::Failed)
 {
     if ( m_rightButtonCommand ) // can be not instanciated
@@ -298,9 +307,12 @@ void PlaneList::doStop() throw(fwTools::Failed)
         m_rightButtonCommand->Delete();
         m_rightButtonCommand = 0;
     }
+    m_planeConnections.disconnect();
 
     this->unregisterServices();
 }
 
 
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelectionNotifier.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelectionNotifier.cpp
index f6fdcde..3589b44 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelectionNotifier.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelectionNotifier.cpp
@@ -1,41 +1,51 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/PlaneListMsg.hpp>
-#include <fwComEd/PlaneMsg.hpp>
+#include "visuVTKAdaptor/PlaneSelectionNotifier.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
+#include <fwData/Boolean.hpp>
 #include <fwData/Plane.hpp>
 #include <fwData/PlaneList.hpp>
-#include <fwData/Boolean.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include "visuVTKAdaptor/PlaneSelectionNotifier.hpp"
+#include <fwDataTools/helper/Composite.hpp>
 
+#include <fwServices/macros.hpp>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneSelectionNotifier, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneSelectionNotifier,
+                         ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_PLANELIST_SLOT = "updatePlaneList";
+static const ::fwCom::Slots::SlotKeyType s_SELECT_PLANE_SLOT     = "selectPlane";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SELECTION_SLOT = "updateSelection";
+static const ::fwCom::Slots::SlotKeyType s_ADD_PLANE_SLOT        = "addPlane";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_PLANE_SLOT     = "removePlane";
+static const ::fwCom::Slots::SlotKeyType s_SHOW_PLANES_SLOT      = "showPlanes";
+
 PlaneSelectionNotifier::PlaneSelectionNotifier() throw()
 {
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::ADD_PLANE );
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::REMOVE_PLANE);
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::PLANELIST_VISIBILITY);
-    //addNewHandledEvent( ::fwComEd::PlaneListMsg::DESELECT_ALL_PLANES );
-    //addNewHandledEvent( ::fwComEd::PlaneMsg::START_PLANE_INTERACTION );
-    //addNewHandledEvent( ::fwComEd::PlaneMsg::DESELECT_PLANE );
+    m_slotUpdatePlaneList = newSlot(s_UPDATE_PLANELIST_SLOT, &PlaneSelectionNotifier::updatePlaneList, this);
+    newSlot(s_SELECT_PLANE_SLOT, &PlaneSelectionNotifier::selectPlane, this);
+    newSlot(s_UPDATE_SELECTION_SLOT, &PlaneSelectionNotifier::updateSelection, this);
+    newSlot(s_ADD_PLANE_SLOT, &PlaneSelectionNotifier::addPlane, this);
+    newSlot(s_REMOVE_PLANE_SLOT, &PlaneSelectionNotifier::removePlane, this);
+    newSlot(s_SHOW_PLANES_SLOT, &PlaneSelectionNotifier::showPlanes, this);
 }
 
 //------------------------------------------------------------------------------
@@ -46,7 +56,7 @@ PlaneSelectionNotifier::~PlaneSelectionNotifier() throw()
 
 //------------------------------------------------------------------------------
 
-void PlaneSelectionNotifier::configuring() throw(fwTools::Failed)
+void PlaneSelectionNotifier::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
     assert(m_configuration->getName() == "config");
@@ -74,13 +84,15 @@ void PlaneSelectionNotifier::doStart() throw(fwTools::Failed)
     ::fwData::PlaneList::sptr planeList = m_currentPlaneList.lock();
     if(planeList)
     {
-        m_plConnection = planeList->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+        m_plConnection.connect(planeList, ::fwData::PlaneList::s_PLANE_REMOVED_SIG,
+                               this->getSptr(), s_REMOVE_PLANE_SLOT);
+        m_plConnection.connect(planeList, ::fwData::PlaneList::s_VISIBILITY_MODIFIED_SIG,
+                               this->getSptr(), s_SHOW_PLANES_SLOT);
 
-        BOOST_FOREACH( ::fwData::Plane::sptr plane, planeList->getPlanes() )
+        for( ::fwData::Plane::sptr plane :  planeList->getPlanes() )
         {
-            m_planeConnections[plane->getID()] = plane->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                                            this->slot(::fwServices::IService::s_RECEIVE_SLOT));
+            m_planeConnections[plane->getID()] = plane->signal(::fwData::Plane::s_SELECTED_SIG)->connect(
+                this->slot(s_UPDATE_SELECTION_SLOT));
         }
     }
 }
@@ -111,7 +123,7 @@ void PlaneSelectionNotifier::doStop() throw(fwTools::Failed)
     if(planeList)
     {
 
-        BOOST_FOREACH( ::fwData::Plane::sptr plane, planeList->getPlanes() )
+        for( ::fwData::Plane::sptr plane :  planeList->getPlanes() )
         {
             m_planeConnections[plane->getID()].disconnect();
         }
@@ -124,122 +136,114 @@ void PlaneSelectionNotifier::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void PlaneSelectionNotifier::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void PlaneSelectionNotifier::addPlane(::fwData::Plane::sptr plane)
 {
-    SLM_TRACE_FUNC();
+    //New plane selected is the last one in planeList
+    this->selectPlane(plane);
 
-    ::fwComEd::PlaneListMsg::csptr planeListMsg = ::fwComEd::PlaneListMsg::dynamicConstCast( msg );
-    ::fwComEd::PlaneMsg::csptr planeMsg         = ::fwComEd::PlaneMsg::dynamicConstCast( msg );
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast( msg );
+    m_planeConnections[plane->getID()] = plane->signal(::fwData::Plane::s_SELECTED_SIG)->connect(
+        this->slot(s_UPDATE_SELECTION_SLOT));
+}
 
-    if ( compositeMsg )
-    {
-        ::fwData::Composite::ContainerType objects;
-        ::fwData::Composite::sptr modifiedKeys;
+//------------------------------------------------------------------------------
 
-        modifiedKeys = compositeMsg->getAddedKeys();
-        objects.insert(modifiedKeys->begin(), modifiedKeys->end());
+void PlaneSelectionNotifier::removePlane(::fwData::Plane::sptr plane)
+{
+    //Remove connections
+    m_planeConnections[plane->getID()].disconnect();
+    this->deselectPlane();
+}
 
-        modifiedKeys = compositeMsg->getNewChangedKeys();
-        objects.insert(modifiedKeys->begin(), modifiedKeys->end());
+//------------------------------------------------------------------------------
 
-        modifiedKeys = compositeMsg->getRemovedKeys();
-        objects.insert(modifiedKeys->begin(), modifiedKeys->end());
+void PlaneSelectionNotifier::showPlanes(bool visible)
+{
+    if (visible)
+    {
+        ::fwData::PlaneList::sptr planeList = m_currentPlaneList.lock();
 
-        if ( objects.find(m_planeListId) != objects.end() )
-        {
-            this->doStop();
-            this->doStart();
-            this->deselectPlane();
-        }
+        //New plane selected is the last one in planeList
+        ::fwData::Plane::sptr plane = *(planeList->getRefPlanes().rbegin());
+        this->selectPlane(plane);
     }
-    else if ( planeListMsg )
+    else
     {
-        ::fwData::PlaneList::sptr planeList = ::fwData::PlaneList::dynamicCast(planeListMsg->getSubject().lock());
-        SLM_ASSERT("Messsage's subject should be a PlaneList", planeList);
-        bool showPlanes;
-        showPlanes = planeList->getField("ShowPlanes", ::fwData::Boolean::New(true));
+        this->deselectPlane();
+    }
+}
 
-        if(!planeList->getRefPlanes().empty())
-        {
-            if (planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::ADD_PLANE))
-            {
-                //New plane selected is the last one in planeList
-                ::fwData::Plane::sptr plane = *(planeList->getRefPlanes().rbegin());
-                this->selectPlane(plane);
-
-                m_planeConnections[plane->getID()] = plane->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                                                this->slot(::fwServices::IService::s_RECEIVE_SLOT));
-            }
-            else if(showPlanes && planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::PLANELIST_VISIBILITY ))
-            {
-                //New plane selected is the last one in planeList
-                ::fwData::Plane::sptr plane = *(planeList->getRefPlanes().rbegin());
-                this->selectPlane(plane);
-            }
-        }
-        if (planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::REMOVE_PLANE))
-        {
-            //Remove connections
-            ::fwTools::Object::csptr dataInfo = planeListMsg->getDataInfo(::fwComEd::PlaneListMsg::REMOVE_PLANE);
+//------------------------------------------------------------------------------
+
+void PlaneSelectionNotifier::selectPlane( ::fwData::Object::sptr plane )
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
 
-            SLM_ASSERT("Sorry, Missing data info", dataInfo);
-            ::fwData::Plane::sptr plane = ::fwData::Plane::dynamicCast(::fwTools::Object::constCast(dataInfo));
+    ::fwDataTools::helper::Composite helper(composite);
+    helper.swap(m_planeSelectionId, plane);
 
-            m_planeConnections[plane->getID()].disconnect();
-        }
-        if ( (!showPlanes && planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::PLANELIST_VISIBILITY ))
-                || planeListMsg->hasEvent( ::fwComEd::PlaneListMsg::DESELECT_ALL_PLANES ) )
-        {
-            this->deselectPlane();
-        }
+    auto sig = composite->signal< ::fwData::Composite::ChangedObjectsSignalType >(
+        ::fwData::Composite::s_CHANGED_OBJECTS_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdatePlaneList));
+        helper.notify();
     }
-    else if (planeMsg)
+}
+
+//------------------------------------------------------------------------------
+
+void PlaneSelectionNotifier::deselectPlane()
+{
+    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    if ( composite->find(m_planeSelectionId) != composite->end() )
     {
-        if (planeMsg->hasEvent( ::fwComEd::PlaneMsg::START_PLANE_INTERACTION ))
-        {
-            this->selectPlane(::fwData::Object::dynamicCast(planeMsg->getSubject().lock()));
-        }
-        if (planeMsg->hasEvent( ::fwComEd::PlaneMsg::DESELECT_PLANE ))
+        ::fwDataTools::helper::Composite helper(composite);
+        helper.remove(m_planeSelectionId);
+        auto sig = composite->signal< ::fwData::Composite::RemovedObjectsSignalType >(
+            ::fwData::Composite::s_REMOVED_OBJECTS_SIG);
         {
-            this->deselectPlane();
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdatePlaneList));
+            helper.notify();
         }
     }
 }
 
 //------------------------------------------------------------------------------
 
-void PlaneSelectionNotifier::selectPlane( ::fwData::Object::sptr plane )
+void PlaneSelectionNotifier::updatePlaneList(::fwData::Composite::ContainerType objects)
 {
-    SLM_TRACE_FUNC();
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+    if ( objects.find(m_planeListId) != objects.end() )
+    {
+        this->doStop();
+        this->doStart();
+        this->deselectPlane();
+    }
+}
 
-    ::fwData::Object::sptr oldPlane = composite->getContainer()[m_planeSelectionId];
+//------------------------------------------------------------------------------
 
-    if (plane && plane != oldPlane)
+void PlaneSelectionNotifier::updateSelection(bool selected)
+{
+    if (!selected)
     {
-        ::fwComEd::CompositeMsg::sptr compositeMsg = ::fwComEd::CompositeMsg::New();
-        compositeMsg->appendChangedKey(m_planeSelectionId,oldPlane, plane);
-        composite->getContainer()[m_planeSelectionId] = plane;
-        ::fwServices::IEditionService::notify(this->getSptr(), composite, compositeMsg);
+        this->deselectPlane();
     }
 }
 
-void PlaneSelectionNotifier::deselectPlane()
-{
-     SLM_TRACE_FUNC();
-     ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-     if ( composite->find(m_planeSelectionId) != composite->end() )
-     {
-        ::fwComEd::CompositeMsg::sptr compositeMsg = ::fwComEd::CompositeMsg::New();
-        compositeMsg->appendRemovedKey(m_planeSelectionId,(*composite)[m_planeSelectionId]);
+//------------------------------------------------------------------------------
 
-        composite->getContainer().erase(m_planeSelectionId);
+::fwServices::IService::KeyConnectionsType PlaneSelectionNotifier::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_UPDATE_PLANELIST_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_UPDATE_PLANELIST_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_UPDATE_PLANELIST_SLOT ) );
 
-        ::fwServices::IEditionService::notify(this->getSptr(), composite, compositeMsg);
-     }
+    return connections;
 }
+//------------------------------------------------------------------------------
 
 
 } //namespace visuVTKAdaptor
 
+#endif // ANDROID
+
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp
index 0938c3c..76f99a5 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PlaneSelector.cpp
@@ -1,33 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef ANDROID
 
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/PlaneListMsg.hpp>
-#include <fwComEd/PlaneMsg.hpp>
+#include "visuVTKAdaptor/PlaneSelector.hpp"
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwData/Object.hpp>
 
-#include "visuVTKAdaptor/PlaneSelector.hpp"
-
+#include <fwServices/macros.hpp>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneSelector, ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PlaneSelector, ::fwData::Object );
 
 namespace visuVTKAdaptor
 {
 
 PlaneSelector::PlaneSelector() throw()
 {
-    //handlingEventOff();
 }
 
 //------------------------------------------------------------------------------
@@ -38,15 +32,10 @@ PlaneSelector::~PlaneSelector() throw()
 
 //------------------------------------------------------------------------------
 
-void PlaneSelector::configuring() throw(fwTools::Failed)
+void PlaneSelector::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
     assert(m_configuration->getName() == "config");
-    //assert(m_configuration->hasAttribute("planelist"));
-    //assert(m_configuration->hasAttribute("planeselection"));
-
-    //this->setPlaneListId( m_configuration->getAttributeValue("planelist") );
-    //this->setPlaneSelectionId( m_configuration->getAttributeValue("planeselection") );
 }
 
 //------------------------------------------------------------------------------
@@ -68,16 +57,13 @@ void PlaneSelector::doStart() throw(fwTools::Failed)
 
 void PlaneSelector::doUpdate() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-    SLM_ASSERT("NOT IMPLEMENTED",false);
+    SLM_ASSERT("NOT IMPLEMENTED", false);
 }
 
 //------------------------------------------------------------------------------
 
 void PlaneSelector::doSwap() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     ::fwData::Object::sptr object = ::fwData::Object::dynamicCast(this->getObject());
     this->selectObject(object);
 }
@@ -86,45 +72,31 @@ void PlaneSelector::doSwap() throw(fwTools::Failed)
 
 void PlaneSelector::doStop() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     this->selectObject( ::fwData::Object::sptr() );
 }
 
 //------------------------------------------------------------------------------
 
-void PlaneSelector::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
 void PlaneSelector::selectObject( ::fwData::Object::sptr object )
 {
-    SLM_TRACE_FUNC();
-
     ::fwData::Object::sptr oldObject = m_currentObject.lock();
 
     if (oldObject != object)
     {
         if (oldObject)
         {
-            ::fwComEd::PlaneMsg::sptr deselectMsg = ::fwComEd::PlaneMsg::New();
-            deselectMsg->addEvent( ::fwComEd::PlaneMsg::WAS_DESELECTED );
-            ::fwServices::IEditionService::notify( this->getSptr(), oldObject, deselectMsg); //TODO: remove option
+            auto sig = oldObject->signal< ::fwData::Plane::SelectedSignalType >(
+                ::fwData::Plane::s_SELECTED_SIG);
+            sig->asyncEmit(false);
         }
 
         m_currentObject.reset();
 
         if (object)
         {
-            if ( object )
-            {
-                ::fwComEd::PlaneMsg::sptr selectMsg = ::fwComEd::PlaneMsg::New();
-                selectMsg->addEvent( ::fwComEd::PlaneMsg::WAS_SELECTED );
-                ::fwServices::IEditionService::notify( this->getSptr(), object, selectMsg); //TODO: remove option
-            }
+            auto sig = object->signal< ::fwData::Plane::SelectedSignalType >(
+                ::fwData::Plane::s_SELECTED_SIG);
+            sig->asyncEmit(true);
             m_currentObject = object;
         }
     }
@@ -134,4 +106,6 @@ void PlaneSelector::selectObject( ::fwData::Object::sptr object )
 
 } //namespace visuVTKAdaptor
 
+#endif //ANDROID
+
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plugin.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plugin.cpp
index a9d9253..c5057d5 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plugin.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Plugin.cpp
@@ -1,30 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/Plugin.hpp"
+
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
 
-#include "visuVTKAdaptor/Plugin.hpp"
-
 
 namespace visuVTKAdaptor
 {
-using namespace ::fwRuntime::utils;
-static GenericExecutableFactoryRegistrar<Plugin> registrar("visuVTKAdaptor::Plugin");
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("visuVTKAdaptor::Plugin");
 
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace operators
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Point.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Point.cpp
index 7d1eee6..7c532f9 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Point.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Point.cpp
@@ -1,111 +1,124 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkCommand.h>
-#include <vtkHandleWidget.h>
-#include <vtkSphereHandleRepresentation.h>
+#ifndef ANDROID
+
+
+#include "fwRenderVTK/vtk/Helpers.hpp"
+#include "fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp"
+#include "visuVTKAdaptor/Point.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwData/Point.hpp>
 #include <fwData/Material.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <fwComEd/PointMsg.hpp>
-
-#include <vtkSphereSource.h>
 #include <vtkActor.h>
-#include <vtkPolyDataMapper.h>
+#include <vtkCommand.h>
+#include <vtkHandleWidget.h>
 #include <vtkPicker.h>
+#include <vtkPolyDataMapper.h>
 #include <vtkPropCollection.h>
 #include <vtkProperty.h>
 #include <vtkRenderer.h>
 #include <vtkRenderWindowInteractor.h>
+#include <vtkSphereHandleRepresentation.h>
+#include <vtkSphereSource.h>
 #include <vtkWidgetEventTranslator.h>
 
-#include "fwRenderVTK/vtk/Helpers.hpp"
-#include "fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp"
-#include "visuVTKAdaptor/Point.hpp"
-
 
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Point, ::fwData::Point ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Point, ::fwData::Point );
 
 namespace visuVTKAdaptor
 {
 
+const ::fwCom::Signals::SignalKeyType Point::s_INTERACTION_STARTED_SIG = "interactionStarted";
+
+//------------------------------------------------------------------------------
+
 class vtkPointUpdateCallBack : public vtkCommand
 {
 
-public :
+public:
     static vtkPointUpdateCallBack *New( ::fwRenderVTK::IVtkAdaptorService *service)
-    { return new vtkPointUpdateCallBack(service); }
+    {
+        return new vtkPointUpdateCallBack(service);
+    }
 
-    vtkPointUpdateCallBack( ::fwRenderVTK::IVtkAdaptorService *service )
-    : m_service(service),
-      m_pickLimiter (0)
-    {}
+    vtkPointUpdateCallBack( ::fwRenderVTK::IVtkAdaptorService *service ) :
+        m_service(service),
+        m_pickLimiter (0)
+    {
+    }
 
     virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
     {
         vtkHandleWidget *handler = vtkHandleWidget::SafeDownCast(caller);
-        if (!handler) {return;}
+        if (!handler)
+        {
+            return;
+        }
 
         if ( eventId == vtkCommand::StartInteractionEvent)
         {
-            handler->AddObserver("EndInteractionEvent" ,this );
-            handler->AddObserver("InteractionEvent" ,this );
+            handler->AddObserver("EndInteractionEvent",this );
+            handler->AddObserver("InteractionEvent",this );
 
         }
         else if ( eventId == vtkCommand::EndInteractionEvent )
         {
-            handler->RemoveObservers("EndInteractionEvent" ,this );
-            handler->RemoveObservers("InteractionEvent" ,this );
+            handler->RemoveObservers("EndInteractionEvent",this );
+            handler->RemoveObservers("InteractionEvent",this );
         }
 
-        ::fwData::Point::sptr point= m_service->getObject< ::fwData::Point >();
+        ::fwData::Point::sptr point = m_service->getObject< ::fwData::Point >();
 
         vtkHandleRepresentation *representation = vtkHandleRepresentation::SafeDownCast(handler->GetRepresentation());
         SLM_ASSERT("handler not instanced", handler);
         double *world = representation->GetWorldPosition();
 
-        ::fwComEd::PointMsg::sptr msg = ::fwComEd::PointMsg::New();// (  new fwServices::ObjectMsg(point) );
-
         if ( (m_pickLimiter-- == 0 && eventId == vtkCommand::InteractionEvent)
-                || eventId == vtkCommand::EndInteractionEvent )
+             || eventId == vtkCommand::EndInteractionEvent )
         {
-            m_pickLimiter=2;
+            m_pickLimiter = 2;
 
             double display[3];
             int x,y;
             handler->GetInteractor()->GetLastEventPosition(x,y);
-            display[0]=x;
-            display[1]=y;
-            display[2]=0;
+            display[0] = x;
+            display[1] = y;
+            display[2] = 0;
 
-            if ( m_service->getPicker() && m_service->getPicker()->Pick( display , m_service->getRenderer() ) )
+            if ( m_service->getPicker() && m_service->getPicker()->Pick( display, m_service->getRenderer() ) )
             {
                 ::fwRenderVTK::vtk::getNearestPickedPosition(m_service->getPicker(), m_service->getRenderer(), world);
             }
         }
         else if (eventId == vtkCommand::StartInteractionEvent)
         {
-            msg->addEvent( ::fwComEd::PointMsg::START_POINT_INTERACTION );
+            auto sig = m_service->signal< Point::InteractionStartedSignalType >(Point::s_INTERACTION_STARTED_SIG);
+            sig->asyncEmit();
         }
 
-        std::copy( world, world+3 , point->getRefCoord().begin() );
+        std::copy( world, world+3, point->getRefCoord().begin() );
 
-        msg->addEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );//setAllModified();
-
-        ::fwServices::IEditionService::notify( m_service->getSptr(), point, msg );
+        auto sig = point->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::SlotBase::sptr slot;
+            slot = m_service->slot(::fwServices::IService::s_UPDATE_SLOT );
+            ::fwCom::Connection::Blocker block(sig->getConnection(slot));
+            sig->asyncEmit();
+        }
         m_service->update();
     }
 
-protected :
+protected:
 
     ::fwRenderVTK::IVtkAdaptorService * m_service;
 
@@ -116,12 +129,11 @@ protected :
 
 Point::Point() throw() :
     m_handle( vtkHandleWidget::New() ),
-//    m_representation( vtkSphereHandleRepresentation::New() ),
     m_representation( ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation::New() ),
-    m_pointUpdateCommand(0)
+    m_pointUpdateCommand(nullptr)
 {
     m_handle->SetRepresentation(m_representation);
-    m_handle->SetPriority(0.8);
+    m_handle->SetPriority(0.8f);
 
     vtkWidgetEventTranslator *translator = m_handle->GetEventTranslator();
 
@@ -137,33 +149,25 @@ Point::Point() throw() :
     rep->GetMarkerProperty()->SetOpacity(.3);
     rep->SetHandleSize(7);
 
-    //addNewHandledEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );
+    newSignal<InteractionStartedSignalType>(s_INTERACTION_STARTED_SIG);
 }
 
 //------------------------------------------------------------------------------
 
 Point::~Point() throw()
 {
-    SLM_TRACE_FUNC();
-
     m_handle->SetRepresentation(0);
     m_handle->Delete();
-    m_handle = 0;
+    m_handle = nullptr;
 
     m_representation->Delete();
-    m_representation = 0;
-
+    m_representation = nullptr;
 }
 
 //------------------------------------------------------------------------------
 
-void Point::configuring() throw(fwTools::Failed)
+void Point::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -207,25 +211,13 @@ void Point::doUpdate() throw(fwTools::Failed)
     assert ( point->getCRefCoord().size()==3 );
     std::copy(point->getCRefCoord().begin(),point->getCRefCoord().end(), ps  );
     m_representation->SetWorldPosition( ps );
-//  getRenderService()->update();
+    //getRenderService()->update();
     getRenderer()->ResetCameraClippingRange();
     this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
 
-void Point::doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_ASSERT("ACH : receive a msg that no concern his object", _msg->getSubject().lock() == this->getObject() );
-    ::fwComEd::PointMsg::csptr pointMsg = ::fwComEd::PointMsg::dynamicConstCast( _msg );
-    if ( pointMsg && pointMsg->hasEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED ) )
-    {
-        this->doUpdate();
-    }
-}
-
-//------------------------------------------------------------------------------
-
 void Point::doStop() throw(fwTools::Failed)
 {
     m_handle->Off();
@@ -244,7 +236,7 @@ void Point::doStop() throw(fwTools::Failed)
 void Point::setColor(double red, double green, double blue, double alpha)
 {
     ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation *rep =
-            ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation::SafeDownCast(m_representation);
+        ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation::SafeDownCast(m_representation);
     SLM_ASSERT("MarkedSphereHandleRepresentation cast failed", rep);
     rep->GetProperty()->SetColor(red, green, blue);
     rep->GetProperty()->SetOpacity(alpha);
@@ -256,7 +248,7 @@ void Point::setColor(double red, double green, double blue, double alpha)
 void Point::setSelectedColor(double red, double green, double blue, double alpha)
 {
     ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation *rep =
-                ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation::SafeDownCast(m_representation);
+        ::fwRenderVTK::vtk::MarkedSphereHandleRepresentation::SafeDownCast(m_representation);
     SLM_ASSERT("MarkedSphereHandleRepresentation cast failed", rep);
     rep->GetSelectedProperty()->SetColor(red, green, blue);
     rep->GetSelectedProperty()->SetOpacity(alpha);
@@ -265,4 +257,16 @@ void Point::setSelectedColor(double red, double green, double blue, double alpha
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType Point::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Point::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointLabel.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointLabel.cpp
index 4f1f605..c782b91 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointLabel.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointLabel.cpp
@@ -1,28 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef ANDROID
 
-#include <boost/format.hpp>
+#include "visuVTKAdaptor/PointLabel.hpp"
 
-#include <fwServices/macros.hpp>
 #include <fwData/Point.hpp>
 #include <fwData/String.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/PointMsg.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwServices/macros.hpp>
 
 #include <vtkRenderer.h>
 #include <vtkTextActor.h>
 
-#include "visuVTKAdaptor/PointLabel.hpp"
+#include <boost/format.hpp>
 
 #include <sstream>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PointLabel, ::fwData::Point ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PointLabel, ::fwData::Point );
 
 namespace visuVTKAdaptor
 {
@@ -33,7 +35,6 @@ PointLabel::PointLabel() : Text()
 {
     m_actor->GetPositionCoordinate()->SetCoordinateSystemToWorld();
     m_actor->GetPosition2Coordinate()->SetCoordinateSystemToWorld();
-    //addNewHandledEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED );
 }
 
 //------------------------------------------------------------------------------
@@ -57,7 +58,7 @@ void PointLabel::doUpdate() throw(::fwTools::Failed)
 {
     ::fwData::Point::sptr point = this->getObject< ::fwData::Point >();
 
-    std::string label = point->getField(::fwComEd::Dictionary::m_labelId, ::fwData::String::New())->value() ;
+    std::string label = point->getField(::fwDataTools::fieldHelper::Image::m_labelId, ::fwData::String::New())->value();
 
     setText( label );
 
@@ -71,24 +72,23 @@ void PointLabel::doUpdate() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void PointLabel::doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+void PointLabel::doSwap() throw(fwTools::Failed)
 {
-    SLM_ASSERT("ACH : recieve a msg that no concern his object", _msg->getSubject().lock() == this->getObject() );
-
-    ::fwComEd::PointMsg::csptr pointMsg = ::fwComEd::PointMsg::dynamicConstCast( _msg );
-    if ( pointMsg && pointMsg->hasEvent( ::fwComEd::PointMsg::POINT_IS_MODIFIED ) )
-    {
-        this->doUpdate();
-    }
+    this->doUpdate();
 }
 
 //------------------------------------------------------------------------------
 
-void PointLabel::doSwap() throw(fwTools::Failed)
+::fwServices::IService::KeyConnectionsType PointLabel::getObjSrvConnections() const
 {
-    this->doUpdate();
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Point::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointList.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointList.cpp
index 9a19eb0..e0aac98 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointList.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointList.cpp
@@ -1,62 +1,61 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iterator>
-#include <algorithm>
-#include <functional>
+#ifndef ANDROID
 
-#include <boost/foreach.hpp>
-#include <boost/function.hpp>
+#include "visuVTKAdaptor/PointList.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Material.hpp>
 #include <fwData/PointList.hpp>
 #include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
-
-#include <fwComEd/PointListMsg.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/op/Add.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
+#include <algorithm>
+#include <iterator>
+#include <functional>
 
-#include <vtkCubeSource.h>
 #include <vtkActor.h>
+#include <vtkCubeSource.h>
 #include <vtkPolyDataMapper.h>
 
-#include "visuVTKAdaptor/PointList.hpp"
+#include <boost/function.hpp>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PointList, ::fwData::PointList ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PointList, ::fwData::PointList );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_ADD_POINT_SLOT     = "addPoint";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SPLINE_SLOT = "updateSpline";
+
 //------------------------------------------------------------------------------
 
 PointList::PointList() throw()
 {
-    //addNewHandledEvent( ::fwComEd::PointListMsg::ELEMENT_ADDED );
-    //addNewHandledEvent( ::fwComEd::PointListMsg::ELEMENT_MODIFIED );
-    //addNewHandledEvent( ::fwComEd::PointListMsg::ELEMENT_REMOVED );
+    newSlot(s_ADD_POINT_SLOT, &PointList::addPoint, this);
+    newSlot(s_UPDATE_SPLINE_SLOT, &PointList::updateSpline, this);
 }
 
 //------------------------------------------------------------------------------
 
 PointList::~PointList() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void PointList::configuring() throw(fwTools::Failed)
+void PointList::doConfigure() throw(fwTools::Failed)
 {
-
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -78,26 +77,23 @@ void PointList::doUpdate() throw(fwTools::Failed)
     this->createServices( points );
 }
 
-//------------------------------------------------------------------------------
+//----------------------------------------------------------------------------------------------------------------
 
-void PointList::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void PointList::addPoint(::fwData::Point::sptr /*point*/)
 {
-    SLM_TRACE_FUNC();
+    m_oldWeakPointList = m_weakPointList;
+    m_weakPointList    = this->getWeakPointList();
+    this->doUpdate();
+    this->setVtkPipelineModified();
+}
 
-    if ( msg->hasEvent( ::fwComEd::PointListMsg::ELEMENT_REMOVED )
-         || ( msg->hasEvent( ::fwComEd::PointListMsg::ELEMENT_MODIFIED )) )
-    {
-        this->doStop();
-        this->doUpdate();
-        setVtkPipelineModified();
-    }
-    else if ( msg->hasEvent( ::fwComEd::PointListMsg::ELEMENT_ADDED ))
-    {
-        m_oldWeakPointList = m_weakPointList;
-        m_weakPointList    = this->getWeakPointList();
-        this->doUpdate();
-        setVtkPipelineModified();
-    }
+//----------------------------------------------------------------------------------------------------------------
+
+void PointList::updateSpline()
+{
+    this->doStop();
+    this->doUpdate();
+    this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
@@ -121,12 +117,11 @@ void PointList::doStop() throw(fwTools::Failed)
 
 void PointList::createServices(WeakPointListType &wPtList)
 {
-
-    BOOST_FOREACH( ::fwData::Point::wptr wpt, wPtList )
+    for( ::fwData::Point::wptr wpt :  wPtList )
     {
         SLM_ASSERT("Point Expired", !wpt.expired());
 
-        ::fwData::Point::sptr pt = wpt.lock();
+        ::fwData::Point::sptr pt                        = wpt.lock();
         ::fwRenderVTK::IVtkAdaptorService::sptr service =
             ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
                 ( pt, "::visuVTKAdaptor::Point" );
@@ -166,14 +161,16 @@ PointList::WeakPointListType PointList::getNewPoints()
 //            std::back_inserter(newPoints)
 //            );
     bool isFound;
-    BOOST_FOREACH(::fwData::Point::wptr point, m_weakPointList)
+    for(::fwData::Point::wptr point :  m_weakPointList)
     {
         isFound = false;
-        BOOST_FOREACH(::fwData::Point::wptr oldPoint, m_oldWeakPointList)
+        for(::fwData::Point::wptr oldPoint :  m_oldWeakPointList)
         {
             isFound = (point.lock() == oldPoint.lock());
             if(isFound)
+            {
                 break;
+            }
         }
         if(!isFound)
         {
@@ -185,4 +182,17 @@ PointList::WeakPointListType PointList::getNewPoints()
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType PointList::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::PointList::s_MODIFIED_SIG, s_UPDATE_SPLINE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::PointList::s_POINT_ADDED_SIG, s_ADD_POINT_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace visuVTKAdaptor
+
+#endif // ANDROID
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointListInteractor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointListInteractor.cpp
index ff886e9..b997f2e 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointListInteractor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/PointListInteractor.cpp
@@ -1,21 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/PointListInteractor.hpp"
 
-
-#include <boost/foreach.hpp>
-
-#include <vtkAbstractPropPicker.h>
-#include <vtkActor.h>
-#include <vtkCommand.h>
-#include <vtkCubeSource.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkRenderWindowInteractor.h>
-
-#include <fwComEd/PointListMsg.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Material.hpp>
 #include <fwData/PointList.hpp>
@@ -23,18 +20,20 @@
 
 #include <fwRenderVTK/vtk/Helpers.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/macros.hpp>
 
-#include "visuVTKAdaptor/PointListInteractor.hpp"
-#include <fwServices/IEditionService.hpp>
-
+#include <vtkAbstractPropPicker.h>
+#include <vtkActor.h>
+#include <vtkCommand.h>
+#include <vtkCubeSource.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkRenderWindowInteractor.h>
 
 #define START_INTERACTION_EVENT vtkCommand::LeftButtonPressEvent
 #define STOP_INTERACTION_EVENT  vtkCommand::LeftButtonReleaseEvent
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PointListInteractor, ::fwData::PointList ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::PointListInteractor,
+                         ::fwData::PointList );
 
 namespace visuVTKAdaptor
 {
@@ -43,19 +42,20 @@ class PointListInteractorCallback : public vtkCommand
 {
 public:
     static PointListInteractorCallback *New()
-    { return new PointListInteractorCallback(); }
+    {
+        return new PointListInteractorCallback();
+    }
 
-    PointListInteractorCallback()
-        : m_priority(-1),
-          m_mouseMoveObserved(false)
+    PointListInteractorCallback() :
+        m_picker(nullptr),
+        m_priority(-1.f),
+        m_mouseMoveObserved(false)
     {
-        m_picker = NULL;
         this->PassiveObserverOff();
     }
 
     ~PointListInteractorCallback()
     {
-
     }
 
     virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
@@ -63,7 +63,8 @@ public:
         assert(m_priority>=0);
         SLM_ASSERT("m_adaptor not instanced", m_adaptor);
         SLM_ASSERT("m_picker not instanced", m_picker);
-        if ( m_mouseMoveObserved || (m_adaptor->getInteractor()->GetControlKey() && m_adaptor->getInteractor()->GetShiftKey()) )
+        if ( m_mouseMoveObserved ||
+             (m_adaptor->getInteractor()->GetControlKey() && m_adaptor->getInteractor()->GetShiftKey()) )
         {
             if ( eventId == vtkCommand::MouseMoveEvent )
             {
@@ -104,13 +105,13 @@ public:
         display[1] = y;
         display[2] = 0;
 
-        return  m_picker->Pick( display , m_adaptor->getRenderer() );
+        return m_picker->Pick( display, m_adaptor->getRenderer() );
     }
 
 
     void process() // from
     {
-        double world[3] = {-1,0,0};
+        double world[3] = {-1, 0, 0};
         ::fwRenderVTK::vtk::getNearestPickedPosition(m_picker, m_adaptor->getRenderer(), world);
         OSLM_TRACE("PICK" << world[0] << " ," << world[1] << " ," << world[2] );
         m_adaptor->addPoint( world[0], world[1], world[2] );
@@ -131,10 +132,10 @@ public:
         m_priority = priority;
     }
 
-protected :
+protected:
     PointListInteractor::sptr m_adaptor;
     vtkAbstractPropPicker *m_picker;
-    float    m_priority;
+    float m_priority;
 
     bool m_mouseMoveObserved;
 
@@ -142,10 +143,10 @@ protected :
 
 //------------------------------------------------------------------------------
 
-PointListInteractor::PointListInteractor() throw()
-    : m_priority(0.999)
+PointListInteractor::PointListInteractor() throw() :
+    m_interactionCommand(nullptr),
+    m_priority(0.999f)
 {
-    //handlingEventOff();
 }
 
 //------------------------------------------------------------------------------
@@ -156,13 +157,8 @@ PointListInteractor::~PointListInteractor() throw()
 
 //------------------------------------------------------------------------------
 
-void PointListInteractor::configuring() throw(fwTools::Failed)
+void PointListInteractor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -208,27 +204,30 @@ void PointListInteractor::doStop() throw(fwTools::Failed)
 void PointListInteractor::resetPointList()
 {
     ::fwData::PointList::sptr list = this->getObject< ::fwData::PointList >();
-    list->getRefPoints().clear();
 
-    ::fwComEd::PointListMsg::sptr msg = ::fwComEd::PointListMsg::New();
-    msg->addEvent(::fwComEd::PointListMsg::ELEMENT_REMOVED);
-    ::fwServices::IEditionService::notify(this->getSptr(), list, msg);
+    for (auto point : list->getPoints())
+    {
+        auto sig =
+            list->signal< ::fwData::PointList::PointRemovedSignalType >(::fwData::PointList::s_POINT_REMOVED_SIG);
+        sig->asyncEmit(point);
+    }
+
+    list->getRefPoints().clear();
 }
 
 //------------------------------------------------------------------------------
 
 void PointListInteractor::addPoint(const double &x, const double &y, const double &z)
 {
-    ::fwData::PointList::sptr list = this->getObject< ::fwData::PointList >();
+    ::fwData::PointList::sptr list             = this->getObject< ::fwData::PointList >();
     ::fwData::Point::PointCoordArrayType coord = {{ x, y, z }};
-    ::fwData::Point::sptr p = ::fwData::Point::New();
-    p->getRefCoord() = coord;
+    ::fwData::Point::sptr p                    = ::fwData::Point::New();
+    p->getRefCoord()                           = coord;
 
     list->getRefPoints().push_back(p);
 
-    ::fwComEd::PointListMsg::sptr msg = ::fwComEd::PointListMsg::New();
-    msg->addEvent(::fwComEd::PointListMsg::ELEMENT_ADDED);
-    ::fwServices::IEditionService::notify(this->getSptr(), list, msg);
+    auto sig = list->signal< ::fwData::PointList::PointAddedSignalType >(::fwData::PointList::s_POINT_ADDED_SIG);
+    sig->asyncEmit(p);
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp
index b04b3b5..b67e7d0 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ProbeCursor.cpp
@@ -1,49 +1,49 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/format.hpp>
+#include "visuVTKAdaptor/ProbeCursor.hpp"
 
+#include "visuVTKAdaptor/ImageText.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwData/Integer.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwRenderVTK/vtk/Helpers.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 
-#include <vtkRenderWindowInteractor.h>
 #include <vtkAbstractPropPicker.h>
-#include <vtkInteractorStyleImage.h>
+#include <vtkActor.h>
+#include <vtkCellArray.h>
+#include <vtkCellData.h>
 #include <vtkCommand.h>
-
+#include <vtkInteractorStyleImage.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkProperty.h>
+#include <vtkRenderWindowInteractor.h>
 #include <vtkTextActor.h>
 #include <vtkTextMapper.h>
 #include <vtkTextProperty.h>
-#include <vtkProperty.h>
-
-#include <vtkActor.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPolyData.h>
-#include <vtkCellArray.h>
-#include <vtkCellData.h>
 #include <vtkTransform.h>
 
-#include "fwRenderVTK/vtk/Helpers.hpp"
-#include "visuVTKAdaptor/ImageText.hpp"
+#include <boost/format.hpp>
 
-#include "visuVTKAdaptor/ProbeCursor.hpp"
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ProbeCursor, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ProbeCursor, ::fwData::Image );
 
 
 #define START_PROBE_EVENT vtkCommand::LeftButtonPressEvent
@@ -58,23 +58,24 @@ namespace visuVTKAdaptor
 class ProbingCallback : public vtkCommand
 {
 public:
-    static ProbingCallback *New()
-    { return new ProbingCallback(); }
+    static ProbingCallback* New()
+    {
+        return new ProbingCallback();
+    }
 
-    ProbingCallback()
-        : m_priority(-1),
-          m_mouseMoveObserved(false)
+    ProbingCallback() :
+        m_picker(nullptr),
+        m_priority(-1),
+        m_mouseMoveObserved(false)
     {
-        m_picker = NULL;
         this->PassiveObserverOff();
     }
 
     ~ProbingCallback()
     {
-
     }
 
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
         assert(m_priority>=0);
         SLM_ASSERT("m_adaptor not instanced", m_adaptor);
@@ -94,7 +95,7 @@ public:
                     m_mouseMoveObserved = true;
                     SetAbortFlag(1);
                     m_adaptor->setVisibility(true);
-                    m_adaptor->StartProbeCursor();
+                    m_adaptor->startProbeCursor();
                     process();
                     m_adaptor->getInteractor()->AddObserver(vtkCommand::MouseMoveEvent, this, m_priority);
                 }
@@ -119,7 +120,7 @@ public:
         display[1] = y;
         display[2] = 0;
 
-        return  m_picker->Pick( display , m_adaptor->getRenderer() );
+        return m_picker->Pick( display, m_adaptor->getRenderer() );
     }
 
 
@@ -140,7 +141,7 @@ public:
         m_adaptor = adaptor;
     }
 
-    void setPicker( vtkAbstractPropPicker *adaptor)
+    void setPicker( vtkAbstractPropPicker* adaptor)
     {
         m_picker = adaptor;
     }
@@ -150,29 +151,29 @@ public:
         m_priority = priority;
     }
 
-protected :
+protected:
     ProbeCursor::sptr m_adaptor;
-    vtkAbstractPropPicker *m_picker;
-    float    m_priority;
+    vtkAbstractPropPicker* m_picker;
+    float m_priority;
 
     bool m_mouseMoveObserved;
 
 };
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+
 //------------------------------------------------------------------------------
 
-ProbeCursor::ProbeCursor() throw()
-: m_priority(.6)
-, m_textActor(vtkActor2D::New())
-, m_textMapper(vtkTextMapper::New())
-, m_cursorPolyData( vtkPolyData::New() )
-, m_cursorMapper  ( vtkPolyDataMapper::New() )
-, m_cursorActor(    vtkActor::New() )
+ProbeCursor::ProbeCursor() throw() :
+    m_priority(.6),
+    m_vtkObserver(nullptr),
+    m_textActor(vtkActor2D::New()),
+    m_textMapper(vtkTextMapper::New()),
+    m_cursorPolyData( vtkPolyData::New() ),
+    m_cursorMapper(vtkPolyDataMapper::New() ),
+    m_cursorActor(vtkActor::New() )
 {
-    ////handlingEventOff();
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &ProbeCursor::updateSliceIndex, this);
 }
 
 //------------------------------------------------------------------------------
@@ -183,9 +184,9 @@ ProbeCursor::~ProbeCursor() throw()
     m_textActor->Delete();
 
     m_cursorActor->Delete();
-    m_cursorActor = NULL;
+    m_cursorActor = nullptr;
     m_cursorMapper->Delete();
-    m_cursorMapper = NULL;
+    m_cursorMapper = nullptr;
     m_cursorPolyData->Delete();
 }
 
@@ -195,22 +196,13 @@ void ProbeCursor::setVisibility( bool visibility )
     m_textActor->SetVisibility(visibility);
     m_cursorActor->SetVisibility(visibility);
     this->setVtkPipelineModified();
-    this->updating();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
 
-void ProbeCursor::configuring() throw(fwTools::Failed)
+void ProbeCursor::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
 }
 
 //------------------------------------------------------------------------------
@@ -243,7 +235,7 @@ void ProbeCursor::doStart() throw(fwTools::Failed)
     this->addToRenderer(m_textActor );
 
     this->buildPolyData();
-    m_cursorMapper->SetInput( m_cursorPolyData );
+    m_cursorMapper->SetInputData( m_cursorPolyData );
     m_cursorActor->SetMapper(m_cursorMapper);
     m_cursorActor->GetProperty()->SetColor(1,0,0);
     if(!this->getTransformId().empty())
@@ -252,7 +244,7 @@ void ProbeCursor::doStart() throw(fwTools::Failed)
     }
     this->addToRenderer(m_cursorActor);
 
-    ProbingCallback *observer = ProbingCallback::New();
+    ProbingCallback* observer = ProbingCallback::New();
     observer->setAdaptor( ProbeCursor::dynamicCast(this->getSptr()) );
     observer->setPicker(this->getPicker());
     observer->setPriority(  m_priority );
@@ -271,6 +263,9 @@ void ProbeCursor::doStart() throw(fwTools::Failed)
 
 void ProbeCursor::doUpdate() throw(fwTools::Failed)
 {
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateImageInfos(image);
+    this->setVisibility(false);
 }
 
 //------------------------------------------------------------------------------
@@ -288,30 +283,22 @@ void ProbeCursor::doStop() throw(fwTools::Failed)
     this->getInteractor()->RemoveObservers(START_PROBE_EVENT, m_vtkObserver);
     this->getInteractor()->RemoveObservers(STOP_PROBE_EVENT, m_vtkObserver);
     m_vtkObserver->Delete();
-    m_vtkObserver = NULL;
+    m_vtkObserver = nullptr;
     this->removeAllPropFromRenderer();
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void ProbeCursor::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void ProbeCursor::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-    {
-        ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-        this->updateImageInfos(image);
-        this->setVisibility(false);
-    }
-
-    if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
-    {
-        ::fwComEd::ImageMsg::dynamicConstCast(msg)->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
-    }
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
 }
 
 //------------------------------------------------------------------------------
 
-void ProbeCursor::StartProbeCursor( )
+void ProbeCursor::startProbeCursor( )
 {
 }
 
@@ -332,14 +319,14 @@ void ProbeCursor::updateView( double world[3] )
          index[0]>= image->getSize()[0] ||
          index[1]>= image->getSize()[1] ||
          index[2]>= image->getSize()[2]
-        )
+         )
     {
         txt = "(---,---,---)";
         m_textMapper->SetInput(txt.c_str());
     }
     else
     {
-        ::fwComEd::helper::Image imageHelper(image);
+        ::fwDataTools::helper::Image imageHelper(image);
 
         std::string greyLevel = imageHelper.getPixelAsString(index[0], index[1], index[2] );
         txt = (::boost::format("(% 4li,% 4li, % 4li) : %s ") % index[0] % index[1] % index[2] % greyLevel ).str();
@@ -351,7 +338,7 @@ void ProbeCursor::updateView( double world[3] )
         this->computeCrossExtremity( index, worldCross);
 
         vtkPoints* points = m_cursorPolyData->GetPoints();
-        for ( int i=0; i < 4; ++i)
+        for ( int i = 0; i < 4; ++i)
         {
             OSLM_TRACE("p=" << worldCross[i][0] << "," << worldCross[i][2] << "," << worldCross[i][2] << "," );
             points->SetPoint(i,worldCross[i]);
@@ -359,12 +346,12 @@ void ProbeCursor::updateView( double world[3] )
         m_cursorPolyData->Modified();
     }
     this->setVtkPipelineModified();
-    this->updating();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
 
-void ProbeCursor::computeCrossExtremity( const int probeSlice[3] , double worldCross[4][3] )
+void ProbeCursor::computeCrossExtremity( const int probeSlice[3], double worldCross[4][3] )
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
 
@@ -375,7 +362,7 @@ void ProbeCursor::computeCrossExtremity( const int probeSlice[3] , double worldC
     sliceIndex[0] = m_sagittalIndex->value();
 
     double probeWorld[3]; // probe index in world positioning system
-    for (int dim=0; dim<3; ++dim )
+    for (int dim = 0; dim<3; ++dim )
     {
         if ( probeSlice[dim]==sliceIndex[dim] ) // FIXME if (sliceIndex==probeWorld)
         {
@@ -384,18 +371,18 @@ void ProbeCursor::computeCrossExtremity( const int probeSlice[3] , double worldC
         probeWorld[dim] = probeSlice[dim]*image->getSpacing()[dim] + image->getOrigin().at(dim);
     }
 
-    for ( int p=0; p<2; ++p )
+    for ( int p = 0; p<2; ++p )
     {
-        for (int dim=0; dim<3; ++dim )
+        for (int dim = 0; dim<3; ++dim )
         {
-            worldCross[p][dim] = probeWorld[dim];
+            worldCross[p][dim]   = probeWorld[dim];
             worldCross[p+2][dim] = probeWorld[dim];
             if ( (dim + p + 1)%3 == m_orientation )
             {
-                worldCross[p][dim] = image->getOrigin().at(dim);
-                ::fwData::Image::SizeType::value_type size = image->getSize().at(dim)-1;
+                worldCross[p][dim]                               = image->getOrigin().at(dim);
+                ::fwData::Image::SizeType::value_type size       = image->getSize().at(dim)-1;
                 ::fwData::Image::SpacingType::value_type spacing = image->getSpacing().at(dim);
-                worldCross[p+2][dim] =  size * spacing + image->getOrigin().at(dim);
+                worldCross[p+2][dim]                             = size * spacing + image->getOrigin().at(dim);
             }
         }
     }
@@ -406,22 +393,22 @@ void ProbeCursor::computeCrossExtremity( const int probeSlice[3] , double worldC
 void ProbeCursor::buildPolyData()
 {
     // point are stored Left,right,up,down
-    int nbPoints = 4;
-    vtkPoints* points   = vtkPoints::New(VTK_DOUBLE);
+    int nbPoints      = 4;
+    vtkPoints* points = vtkPoints::New(VTK_DOUBLE);
     points->SetNumberOfPoints(nbPoints);
     int i;
     for (i = 0; i < nbPoints; i++)
     {
-        points->SetPoint(i, 0.0, 0.0 , 0.0);
+        points->SetPoint(i, 0.0, 0.0, 0.0);
     }
 
-    vtkCellArray *cells = vtkCellArray::New();
+    vtkCellArray* cells = vtkCellArray::New();
     cells->Allocate(cells->EstimateSize(nbPoints,2));
 
     vtkIdType pts[2];
-    pts[0]=0;pts[1]=2;
+    pts[0] = 0; pts[1] = 2;
     cells->InsertNextCell(2,pts);
-    pts[0]=1;pts[1]=3;
+    pts[0] = 1; pts[1] = 3;
     cells->InsertNextCell(2,pts);
 
     m_cursorPolyData->SetPoints(points);
@@ -431,5 +418,18 @@ void ProbeCursor::buildPolyData()
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType ProbeCursor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Reconstruction.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Reconstruction.cpp
index 2f05876..21b4fea 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Reconstruction.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Reconstruction.cpp
@@ -1,17 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/Mesh.hpp"
+#include "visuVTKAdaptor/Reconstruction.hpp"
+
 #include <fwTools/fwID.hpp>
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
 #include <fwData/Reconstruction.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwComEd/ReconstructionMsg.hpp>
+#include <fwServices/op/Add.hpp>
 
 #include <vtkActor.h>
 #include <vtkCamera.h>
@@ -26,48 +28,40 @@
 #include <vtkPlaneCollection.h>
 #include <vtkPolyDataNormals.h>
 
-#include "visuVTKAdaptor/Mesh.hpp"
-#include "visuVTKAdaptor/Reconstruction.hpp"
 
-//VAG DEBUG
-//#include <fwMath/MeshFunctions.hpp>
-//#include <fwVtkIO/vtk.hpp>
-//#include <fwVtkIO/MeshWriter.hpp>
-//#include <boost/filesystem.hpp>
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Reconstruction,
+                         ::fwData::Reconstruction );
 
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Reconstruction, ::fwData::Reconstruction ) ;
-
 namespace visuVTKAdaptor
 {
 
+const ::fwCom::Slots::SlotKeyType Reconstruction::s_UPDATE_MESH_SLOT        = "updateMesh";
+const ::fwCom::Slots::SlotKeyType Reconstruction::s_UPDATE_VISIBILITY_SLOT  = "updateVisibility";
+const ::fwCom::Slots::SlotKeyType Reconstruction::s_UPDATE_NORMAL_MODE_SLOT = "updateNormalMode";
 
 //------------------------------------------------------------------------------
-Reconstruction::Reconstruction() throw()
+Reconstruction::Reconstruction() throw() :
+    m_sharpEdgeAngle(180.),
+    m_autoResetCamera(true)
 {
-    m_clippingPlanesId = "";
-    m_sharpEdgeAngle = 180;
-    m_autoResetCamera = true;
-    //addNewHandledEvent( ::fwComEd::ReconstructionMsg::MESH );
-    //addNewHandledEvent( ::fwComEd::ReconstructionMsg::VISIBILITY );
+    m_slotUpdateMesh       = newSlot(s_UPDATE_MESH_SLOT, &Reconstruction::updateMesh, this);
+    m_slotUpdateVisibility = newSlot(s_UPDATE_VISIBILITY_SLOT, &Reconstruction::updateVisibility, this);
+    m_slotUpdateNormalMode = newSlot(s_UPDATE_NORMAL_MODE_SLOT, &Reconstruction::updateNormalMode, this);
 }
 
 //------------------------------------------------------------------------------
 
 Reconstruction::~Reconstruction() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void Reconstruction::configuring() throw(fwTools::Failed)
+void Reconstruction::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setPickerId   ( m_configuration->getAttributeValue( "picker"    ) ) ;
-    this->setRenderId   ( m_configuration->getAttributeValue( "renderer"  ) ) ;
-    this->setTransformId( m_configuration->getAttributeValue( "transform" ) ) ;
+    SLM_ASSERT("Configuration must begin with <config>", m_configuration->getName() == "config");
 
     if (m_configuration->hasAttribute("autoresetcamera") )
     {
@@ -80,17 +74,14 @@ void Reconstruction::configuring() throw(fwTools::Failed)
 
 void Reconstruction::doStart() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-    createMeshService();
+    this->createMeshService();
 }
 
 //------------------------------------------------------------------------------
 
 void Reconstruction::createMeshService()
 {
-    SLM_TRACE_FUNC();
-    ::fwData::Reconstruction::sptr reconstruction
-        = this->getObject < ::fwData::Reconstruction >();
+    ::fwData::Reconstruction::sptr reconstruction = this->getObject < ::fwData::Reconstruction >();
 
     ::fwData::Mesh::sptr mesh = reconstruction->getMesh();
 
@@ -99,11 +90,10 @@ void Reconstruction::createMeshService()
     {
         ::fwRenderVTK::IVtkAdaptorService::sptr meshService;
         meshService = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-                mesh,
-                "::visuVTKAdaptor::Mesh" );
+            mesh,
+            "::visuVTKAdaptor::Mesh" );
         SLM_ASSERT("meshService not instanced", meshService);
-        ::visuVTKAdaptor::Mesh::sptr meshAdaptor
-            = Mesh::dynamicCast(meshService);
+        ::visuVTKAdaptor::Mesh::sptr meshAdaptor = Mesh::dynamicCast(meshService);
 
         meshService->setRenderService( this->getRenderService() );
         meshService->setRenderId     ( this->getRenderId()      );
@@ -146,12 +136,12 @@ void Reconstruction::doUpdate() throw(fwTools::Failed)
         ::fwRenderVTK::IVtkAdaptorService::sptr meshService = m_meshService.lock();
 
         ::fwData::Reconstruction::sptr reconstruction = this->getObject < ::fwData::Reconstruction >();
-        ::visuVTKAdaptor::Mesh::sptr meshAdaptor = Mesh::dynamicCast(meshService);
+        ::visuVTKAdaptor::Mesh::sptr meshAdaptor      = Mesh::dynamicCast(meshService);
         //meshAdaptor->setSharpEdgeAngle( m_sharpEdgeAngle );
 
-        meshAdaptor->setMaterial     ( reconstruction->getMaterial()       );
+        meshAdaptor->setMaterial     ( reconstruction->getMaterial());
         meshAdaptor->swap            ( reconstruction->getMesh() );
-        meshAdaptor->updateVisibility( reconstruction->getIsVisible()      );
+        meshAdaptor->updateVisibility( reconstruction->getIsVisible());
 
     }
     else
@@ -162,74 +152,89 @@ void Reconstruction::doUpdate() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Reconstruction::doReceive( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
+void Reconstruction::doStop() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
+    this->removeAllPropFromRenderer();
 
-    if (!m_meshService.expired())
-    {
-        ::fwRenderVTK::IVtkAdaptorService::sptr meshService = m_meshService.lock();
+    this->unregisterServices();
+}
 
-        ::fwComEd::ReconstructionMsg::csptr msg = ::fwComEd::ReconstructionMsg::dynamicConstCast(_msg);
+//------------------------------------------------------------------------------
 
-        assert(msg->getSubject().lock() == this->getObject());
+void Reconstruction::setForceHide(bool hide)
+{
+    ::fwData::Reconstruction::sptr reconstruction = this->getObject < ::fwData::Reconstruction >();
+    this->setVisibility((hide ? false : reconstruction->getIsVisible()));
+}
 
-        ::fwData::Reconstruction::sptr reconstruction = this->getObject < ::fwData::Reconstruction >();
-        SLM_ASSERT("reconstruction not instanced", reconstruction);
 
-        if (msg && msg->hasEvent(::fwComEd::ReconstructionMsg::MESH))
-        {
-            //updateTriangulaMesh( reconstruction->getMesh() );
-            this->doUpdate();
-        }
-        else if (msg && msg->hasEvent(::fwComEd::ReconstructionMsg::VISIBILITY))
-        {
+//------------------------------------------------------------------------------
+
+void Reconstruction::setVisibility(bool visible)
+{
+    SLM_TRACE_FUNC();
+    if (!m_meshService.expired())
+    {
+        ::fwRenderVTK::IVtkAdaptorService::sptr meshService = m_meshService.lock();
+        ::visuVTKAdaptor::Mesh::sptr meshAdaptor
+            = Mesh::dynamicCast(meshService);
 
-            this->setForceHide(!reconstruction->getIsVisible());
+        if (meshAdaptor)
+        {
+            meshAdaptor->updateVisibility( visible );
         }
+        this->setVtkPipelineModified();
     }
 }
 
 //------------------------------------------------------------------------------
 
-void Reconstruction::doStop() throw(fwTools::Failed)
+void Reconstruction::setAutoResetCamera(bool autoResetCamera)
 {
-    SLM_TRACE_FUNC();
-    this->removeAllPropFromRenderer();
+    m_autoResetCamera = autoResetCamera;
+}
 
-    //if (this->getPicker())
-    //{
-        //this->removeFromPicker(this->getActor());
-    //}
+//------------------------------------------------------------------------------
 
-    this->unregisterServices();
+void Reconstruction::updateMesh(SPTR(::fwData::Mesh))
+{
+    this->doUpdate();
 }
 
 //------------------------------------------------------------------------------
 
-void Reconstruction::setForceHide(bool hide)
+void Reconstruction::updateVisibility()
+{
+    ::fwData::Reconstruction::sptr reconstruction = this->getObject < ::fwData::Reconstruction >();
+    this->setForceHide(!reconstruction->getIsVisible());
+}
+
+//------------------------------------------------------------------------------
+
+void Reconstruction::updateNormalMode(std::uint8_t mode)
 {
-    SLM_TRACE_FUNC();
     if (!m_meshService.expired())
     {
-        ::fwRenderVTK::IVtkAdaptorService::sptr meshService = m_meshService.lock();
-        ::visuVTKAdaptor::Mesh::sptr meshAdaptor
-            = Mesh::dynamicCast(meshService);
-
+        ::visuVTKAdaptor::Mesh::sptr meshAdaptor = ::visuVTKAdaptor::Mesh::dynamicCast(m_meshService.lock());
         if (meshAdaptor)
         {
-            ::fwData::Reconstruction::sptr reconstruction = this->getObject < ::fwData::Reconstruction >();
-            meshAdaptor->updateVisibility( hide ? false : reconstruction->getIsVisible() );
+            meshAdaptor->updateNormalMode(mode);
         }
-        this->setVtkPipelineModified();
     }
 }
 
 //------------------------------------------------------------------------------
 
-void Reconstruction::setAutoResetCamera(bool autoResetCamera)
+::fwServices::IService::KeyConnectionsType Reconstruction::getObjSrvConnections() const
 {
-    m_autoResetCamera = autoResetCamera;
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Reconstruction::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Reconstruction::s_MESH_CHANGED_SIG, s_UPDATE_MESH_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Reconstruction::s_VISIBILITY_MODIFIED_SIG,
+                                           s_UPDATE_VISIBILITY_SLOT ) );
+
+    return connections;
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Render.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Render.cpp
deleted file mode 100644
index ecb8f85..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Render.cpp
+++ /dev/null
@@ -1,104 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwTools/fwID.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/registry/ObjectService.hpp>
-
-
-#include <vtkRenderWindowInteractor.h>
-
-#include "visuVTKAdaptor/Render.hpp"
-
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Render, ::fwData::Object ) ;
-
-namespace visuVTKAdaptor
-{
-
-//------------------------------------------------------------------------------
-
-Render::Render() throw()
-{
-    m_vtkPipelineModified = false;
-    m_comChannelPriority = 0.1;
-    //addNewHandledEvent("SCENE_RENDER_REQUEST");
-}
-
-//------------------------------------------------------------------------------
-
-Render::~Render() throw()
-{
-}
-
-//------------------------------------------------------------------------------
-
-void Render::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    SLM_ASSERT("Sorry, config tag is missing", m_configuration->getName() == "config");
-    SLM_ASSERT("Sorry, renderer attribute is missing", m_configuration->hasAttribute("renderer"));
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-    // TODO allow to add other object
-}
-
-//------------------------------------------------------------------------------
-
-void Render::doStart() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    //addNewHandledEvent( "SCENE_RENDER_REQUEST" );
-    this->getRenderService()->setPendingRenderRequest(false);
-}
-
-//------------------------------------------------------------------------------
-
-void Render::doStop() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void Render::doUpdate() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void Render::doSwap() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void Render::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    if ( msg->hasEvent("SCENE_RENDER_REQUEST") )
-    {
-        ::fwData::Object::csptr dataInfo = msg->getDataInfo("SCENE_RENDER_REQUEST");
-        SLM_ASSERT("dataInfo is missing", dataInfo);
-        SLM_ASSERT("dataInfo must contain a string", ::fwData::String::dynamicConstCast( dataInfo ));
-        std::string requestSceneID = ::fwData::String::dynamicConstCast( dataInfo )->value();
-        if( requestSceneID ==  this->getRenderService()->getID() )
-        {
-            this->getInteractor()->Render() ;
-            this->getRenderService()->setPendingRenderRequest(false);
-        }
-    }
-}
-
-} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Resection.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Resection.cpp
index f43d7f6..8cd18ca 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Resection.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Resection.cpp
@@ -1,53 +1,40 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/Reconstruction.hpp"
+#include "visuVTKAdaptor/Resection.hpp"
+
 #include <fwData/Resection.hpp>
 #include <fwData/Reconstruction.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwComEd/ResectionMsg.hpp>
-
-#include "visuVTKAdaptor/Reconstruction.hpp"
-#include "visuVTKAdaptor/Resection.hpp"
+#include <fwServices/op/Add.hpp>
 
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Resection, ::fwData::Resection ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Resection, ::fwData::Resection );
 
 namespace visuVTKAdaptor
 {
 
-
-Resection::Resection() throw()
+Resection::Resection() throw() :
+    m_sharpEdgeAngle(50.),
+    m_autoResetCamera(true)
 {
-    m_clippingPlanes = "";
-    m_sharpEdgeAngle = 50;
-    m_autoResetCamera = true;
-    //addNewHandledEvent( ::fwComEd::ResectionMsg::VISIBILITY );
-    //addNewHandledEvent( ::fwComEd::ResectionMsg::MODIFIED );
 }
 
 //------------------------------------------------------------------------------
 
 Resection::~Resection() throw()
 {
-
 }
 
 //------------------------------------------------------------------------------
 
-void Resection::configuring() throw(fwTools::Failed)
+void Resection::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 
     this->setClippingPlanes( m_configuration->getAttributeValue("clippingplanes") );
 
@@ -58,11 +45,6 @@ void Resection::configuring() throw(fwTools::Failed)
         this->setSharpEdgeAngle( sharpEdgeAngle );
     }
 
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
-
     if (m_configuration->hasAttribute("autoresetcamera") )
     {
         std::string autoresetcamera = m_configuration->getAttributeValue("autoresetcamera");
@@ -102,8 +84,8 @@ void Resection::doUpdate() throw(fwTools::Failed)
         for (iterRes = vReconst.begin(); iterRes != vReconst.end(); ++iterRes)
         {
             ::fwRenderVTK::IVtkAdaptorService::sptr service =
-                    ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
-            ( *iterRes, "::visuVTKAdaptor::Reconstruction" );
+                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >
+                    ( *iterRes, "::visuVTKAdaptor::Reconstruction" );
             SLM_ASSERT("service not instanced", service);
 
             service->setTransformId( this->getTransformId() );
@@ -111,7 +93,8 @@ void Resection::doUpdate() throw(fwTools::Failed)
             service->setPickerId( this->getPickerId() );
             service->setRenderService(this->getRenderService());
             service->setAutoRender( this->getAutoRender() );
-            ::visuVTKAdaptor::Reconstruction::sptr reconstAdaptor = ::visuVTKAdaptor::Reconstruction::dynamicCast(service);
+            ::visuVTKAdaptor::Reconstruction::sptr reconstAdaptor = ::visuVTKAdaptor::Reconstruction::dynamicCast(
+                service);
             if(!resectionIsValid)
             {
                 reconstAdaptor->setClippingPlanes( m_clippingPlanes );
@@ -142,23 +125,16 @@ void Resection::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void Resection::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+::fwServices::IService::KeyConnectionsType Resection::getObjSrvConnections() const
 {
-    ::fwComEd::ResectionMsg::csptr pResectionMsg = ::fwComEd::ResectionMsg::dynamicConstCast( msg ) ;
-    if ( pResectionMsg)
-    {
-        if ( pResectionMsg->hasEvent(::fwComEd::ResectionMsg::VISIBILITY) )
-        {
-            this->doUpdate();
-        }
-        if ( pResectionMsg->hasEvent(::fwComEd::ResectionMsg::MODIFIED) )
-        {
-            this->doUpdate();
-        }
-    }
-}
-
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Resection::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Resection::s_VISIBILITY_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Resection::s_RECONSTRUCTION_ADDED_SIG, s_UPDATE_SLOT ) );
 
+    return connections;
+}
 
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResectionDB.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResectionDB.cpp
index 6169e21..2321dd3 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResectionDB.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResectionDB.cpp
@@ -1,56 +1,41 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKAdaptor/Resection.hpp"
+#include "visuVTKAdaptor/ResectionDB.hpp"
+
 #include <fwData/ResectionDB.hpp>
 #include <fwData/Resection.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/op/Add.hpp>
 
-#include <fwComEd/ResectionDBMsg.hpp>
-
-#include "visuVTKAdaptor/Resection.hpp"
-#include "visuVTKAdaptor/ResectionDB.hpp"
 
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ResectionDB, ::fwData::ResectionDB ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ResectionDB, ::fwData::ResectionDB );
 
 namespace visuVTKAdaptor
 {
 
-
 //------------------------------------------------------------------------------
 
-ResectionDB::ResectionDB() throw()
+ResectionDB::ResectionDB() throw() : m_sharpEdgeAngle(50.)
 {
-    m_clippingPlanes = "";
-    m_sharpEdgeAngle = 50;
-    //addNewHandledEvent( ::fwComEd::ResectionDBMsg::ADD_SAFE_PART );
-    //addNewHandledEvent( ::fwComEd::ResectionDBMsg::ADD_RESECTION );
-    //addNewHandledEvent( ::fwComEd::ResectionDBMsg::MODIFIED );
 }
 
 //------------------------------------------------------------------------------
 
 ResectionDB::~ResectionDB() throw()
 {
-
 }
 
 //------------------------------------------------------------------------------
 
-void ResectionDB::configuring() throw(fwTools::Failed)
+void ResectionDB::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     assert(m_configuration->getName() == "config");
-    this->setPickerId( m_configuration->getAttributeValue("picker") );
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 
     this->setClippingPlanes( m_configuration->getAttributeValue("clippingplanes") );
 
@@ -60,12 +45,6 @@ void ResectionDB::configuring() throw(fwTools::Failed)
         double sharpEdgeAngle = ::boost::lexical_cast< double > (sSharpEdgeAngle);
         this->setSharpEdgeAngle( sharpEdgeAngle );
     }
-
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
-
 }
 
 //------------------------------------------------------------------------------
@@ -84,10 +63,10 @@ void ResectionDB::doUpdate() throw(fwTools::Failed)
 
     ::fwData::ResectionDB::sptr resecDB = this->getObject< ::fwData::ResectionDB >();
 
-    BOOST_FOREACH( ::fwData::Resection::sptr resection, resecDB->getResections() )
+    for( ::fwData::Resection::sptr resection :  resecDB->getResections() )
     {
         ::fwRenderVTK::IVtkAdaptorService::sptr service =
-                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > ( resection, "::visuVTKAdaptor::Resection" );
+            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > ( resection, "::visuVTKAdaptor::Resection" );
         SLM_ASSERT("service not instanced", service);
 
         service->setTransformId( this->getTransformId() );
@@ -107,7 +86,7 @@ void ResectionDB::doUpdate() throw(fwTools::Failed)
     if(resec)
     {
         ::fwRenderVTK::IVtkAdaptorService::sptr service =
-                ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > ( resec, "::visuVTKAdaptor::Resection" );
+            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > ( resec, "::visuVTKAdaptor::Resection" );
         SLM_ASSERT("service not instanced", service);
 
         service->setTransformId( this->getTransformId() );
@@ -137,24 +116,16 @@ void ResectionDB::doStop() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void ResectionDB::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+::fwServices::IService::KeyConnectionsType ResectionDB::getObjSrvConnections() const
 {
-    ::fwComEd::ResectionDBMsg::csptr pResectionDBMsg = ::fwComEd::ResectionDBMsg::dynamicConstCast( msg ) ;
-    if ( pResectionDBMsg )
-    {
-        if ( pResectionDBMsg->hasEvent(::fwComEd::ResectionDBMsg::ADD_SAFE_PART) ||
-                pResectionDBMsg->hasEvent(::fwComEd::ResectionDBMsg::ADD_RESECTION) )
-        {
-            this->doUpdate();
-        }
-        if ( pResectionDBMsg->hasEvent(::fwComEd::ResectionDBMsg::MODIFIED) )
-        {
-            this->doUpdate();
-        }
-    }
-}
-
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::ResectionDB::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::ResectionDB::s_SAFE_PART_ADDED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::ResectionDB::s_RESECTION_ADDED_SIG, s_UPDATE_SLOT ) );
 
+    return connections;
+}
 
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResetCamera.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResetCamera.cpp
deleted file mode 100644
index f28af95..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/ResetCamera.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
-
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/CompositeMsg.hpp>
-
-#include <vtkActor.h>
-#include <vtkRenderer.h>
-#include <vtkCamera.h>
-#include <vtkActorCollection.h>
-
-#include "visuVTKAdaptor/ResetCamera.hpp"
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::ResetCamera, ::fwData::Composite ) ;
-
-namespace visuVTKAdaptor
-{
-
-ResetCamera::ResetCamera() throw()
-{
-    bCameraReseted = false;
-    m_comChannelPriority = 0.1;
-    //addNewHandledEvent(::fwComEd::CompositeMsg::ADDED_KEYS);
-}
-
-//------------------------------------------------------------------------------
-
-ResetCamera::~ResetCamera() throw()
-{
-}
-
-//------------------------------------------------------------------------------
-
-void ResetCamera::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-}
-
-//------------------------------------------------------------------------------
-
-void ResetCamera::doStart() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void ResetCamera::doUpdate() throw(fwTools::Failed)
-{
-
-}
-
-//------------------------------------------------------------------------------
-
-void ResetCamera::doSwap() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void ResetCamera::doStop() throw(fwTools::Failed)
-{
-
-}
-
-//------------------------------------------------------------------------------
-
-void ResetCamera::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast( msg );
-
-    if ( compositeMsg && compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS))
-    {
-        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-        if(!bCameraReseted)
-        {
-            vtkRenderer* renderer = this->getRenderer();
-            renderer->ResetCamera();
-            bCameraReseted = true;
-            this->setVtkPipelineModified();
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SliceFollowerCamera.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SliceFollowerCamera.cpp
index 6d3bc15..c0d99eb 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SliceFollowerCamera.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SliceFollowerCamera.cpp
@@ -1,51 +1,44 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "visuVTKAdaptor/SliceFollowerCamera.hpp"
 
-#include <fwData/Camera.hpp>
-#include <fwData/Video.hpp>
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
-#include <fwData/Boolean.hpp>
-#include <fwData/TransformationMatrix3D.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include <fwServices/macros.hpp>
 
 #include <vtkActor.h>
-#include <vtkRenderer.h>
-#include <vtkMatrix4x4.h>
-#include <vtkTransform.h>
 #include <vtkCamera.h>
+#include <vtkInteractorStyleImage.h>
 #include <vtkMath.h>
+#include <vtkMatrix4x4.h>
 #include <vtkRenderWindowInteractor.h>
-#include <vtkInteractorStyleImage.h>
-
-#include "visuVTKAdaptor/SliceFollowerCamera.hpp"
-
-
+#include <vtkRenderer.h>
+#include <vtkTransform.h>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::SliceFollowerCamera, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::SliceFollowerCamera, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
+
+//------------------------------------------------------------------------------
 
-SliceFollowerCamera::SliceFollowerCamera() throw()
+SliceFollowerCamera::SliceFollowerCamera() throw() : m_camera(nullptr)
 {
     m_comChannelPriority = 0.49;
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &SliceFollowerCamera::updateSliceIndex, this);
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &SliceFollowerCamera::updateSliceType, this);
 }
 
 //------------------------------------------------------------------------------
@@ -56,27 +49,26 @@ SliceFollowerCamera::~SliceFollowerCamera() throw()
 
 //------------------------------------------------------------------------------
 
-void SliceFollowerCamera::configuring() throw(fwTools::Failed)
+void SliceFollowerCamera::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
     assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
     if(m_configuration->hasAttribute("sliceIndex"))
     {
-         std::string  orientation = m_configuration->getAttributeValue("sliceIndex");
-         if(orientation == "axial" )
-         {
-             m_orientation = Z_AXIS;
-         }
-         else if(orientation == "frontal" )
-         {
-             m_orientation = Y_AXIS;
-         }
-         else if(orientation == "sagittal" )
-         {
-             m_orientation = X_AXIS;
-         }
+        std::string orientation = m_configuration->getAttributeValue("sliceIndex");
+        if(orientation == "axial" )
+        {
+            m_orientation = Z_AXIS;
+        }
+        else if(orientation == "frontal" )
+        {
+            m_orientation = Y_AXIS;
+        }
+        else if(orientation == "sagittal" )
+        {
+            m_orientation = X_AXIS;
+        }
     }
 }
 
@@ -96,7 +88,9 @@ void SliceFollowerCamera::doStart() throw(fwTools::Failed)
 
 void SliceFollowerCamera::doUpdate() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateImageInfos(image);
+    this->initializeCamera();
 }
 
 //------------------------------------------------------------------------------
@@ -105,7 +99,7 @@ void SliceFollowerCamera::doSwap() throw(fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
     this->updateImageInfos(image);
-    initializeCamera();
+    this->initializeCamera();
 }
 
 //------------------------------------------------------------------------------
@@ -115,46 +109,27 @@ void SliceFollowerCamera::doStop() throw(fwTools::Failed)
     this->unregisterServices();
 }
 
-//------------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-void SliceFollowerCamera::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void SliceFollowerCamera::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    this->updateCamera();
+}
 
-    if (imageIsValid)
-    {
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            this->updateImageInfos(image);
-            initializeCamera();
-        }
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
-        {
-            updateCamera();
-        }
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE ))
-        {
-            ::fwData::Object::csptr cObjInfo = msg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-            ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-            ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
-
-            int fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] )->value();
-            int toSliceType =   ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] )->value();
-
-            if( toSliceType == static_cast<int>(m_orientation) )
-            {
-                setOrientation( static_cast< Orientation >( fromSliceType ));
-                initializeCamera();
-            }
-            else if(fromSliceType == static_cast<int>(m_orientation))
-            {
-                setOrientation( static_cast< Orientation >( toSliceType ));
-                initializeCamera();
-            }
-        }
+//-----------------------------------------------------------------------------
 
+void SliceFollowerCamera::updateSliceType(int from, int to)
+{
+    if( to == static_cast<int>(m_orientation) )
+    {
+        setOrientation( static_cast< Orientation >( from ));
+    }
+    else if(from == static_cast<int>(m_orientation))
+    {
+        setOrientation( static_cast< Orientation >( to ));
     }
+    this->initializeCamera();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
@@ -162,7 +137,7 @@ void SliceFollowerCamera::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(f
 void SliceFollowerCamera::initializeCamera()
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
 
     if (imageIsValid)
     {
@@ -170,10 +145,10 @@ void SliceFollowerCamera::initializeCamera()
         double imageSize[3];
         this->getImageSize(imageSize);
         int orientation = orientationToAxe [m_orientation];
-        double size = imageSize[ orientation ];
+        double size     = imageSize[ orientation ];
 
         double distance = (1.1 * size)
-                    / ( std::tan( m_camera->GetViewAngle() * (vtkMath::DoublePi() / 180.0) ) );
+                          / ( std::tan( m_camera->GetViewAngle() * (vtkMath::Pi() / 180.0) ) );
 
         m_camera->ParallelProjectionOn();
         setVtkPipelineModified();
@@ -186,7 +161,6 @@ void SliceFollowerCamera::initializeCamera()
 
 void SliceFollowerCamera::updateCamera(double distance, double size)
 {
-
     SLM_ASSERT("No Camera", m_camera );
 
     if (distance > 0)
@@ -217,16 +191,28 @@ void SliceFollowerCamera::updateCamera(double distance, double size)
     // m_orientation = 1 : 0, 0,1
     // m_orientation = 2 : 0,-1,0
     m_camera->SetViewUp(
-            0,
-            (m_orientation == 2 ? -1 : 0) ,
-            (m_orientation <= 1 ?  1 : 0)
-    );
+        0,
+        (m_orientation == 2 ? -1 : 0),
+        (m_orientation <= 1 ?  1 : 0)
+        );
     m_camera->OrthogonalizeViewUp();
 
     this->getRenderer()->ResetCameraClippingRange();
     this->setVtkPipelineModified();
 }
 
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SliceFollowerCamera::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
 
+    return connections;
+}
+
+//------------------------------------------------------------------------------
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp
index 610f309..fc8a51c 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/SlicesCursor.cpp
@@ -1,56 +1,67 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
+#include "visuVTKAdaptor/SlicesCursor.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
+#include <fwCore/base.hpp>
+
+#include <fwData/Float.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/String.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <vtkPolyData.h>
-#include <vtkRenderer.h>
 #include <vtkActor.h>
-#include <vtkPolyDataMapper.h>
 #include <vtkCellArray.h>
 #include <vtkCellData.h>
 #include <vtkLine.h> // CELL
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkRenderer.h>
 #include <vtkTransform.h>
 
-#include <fwCore/base.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/String.hpp>
+#include <boost/assign/list_of.hpp>
 
-#include "visuVTKAdaptor/SlicesCursor.hpp"
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::SlicesCursor, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::SlicesCursor, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
 
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_INDEX_SLOT = "updateSliceIndex";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLICE_TYPE_SLOT  = "updateSliceType";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_IMAGE_SLOT       = "updateImage";
 
-SlicesCursor::SlicesCursor()  throw()
-: m_cursorPolyData( vtkPolyData::New() )
-, m_cursorMapper  ( vtkPolyDataMapper::New() )
-, m_cursorActor(    vtkActor::New() )
-, m_scale(0.5)
-, m_isSelected(false)
-{
+const ::fwCom::Slots::SlotKeyType SlicesCursor::s_SHOW_FULL_CROSS_SLOT   = "showFullCross";
+const ::fwCom::Slots::SlotKeyType SlicesCursor::s_SHOW_NORMAL_CROSS_SLOT = "showNormalCross";
+const ::fwCom::Slots::SlotKeyType SlicesCursor::s_SET_CROSS_SCALE_SLOT   = "setCrossScale";
+
+//-----------------------------------------------------------------------------
 
-    //addNewHandledEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) ;
-    //addNewHandledEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
-    //addNewHandledEvent( "CROSS_TYPE" );
+SlicesCursor::SlicesCursor()  throw() :
+    m_cursorPolyData( vtkPolyData::New() ),
+    m_cursorMapper( vtkPolyDataMapper::New() ),
+    m_cursorActor( vtkActor::New() ),
+    m_scale(0.5f),
+    m_isSelected(false)
+{
+    newSlot(s_UPDATE_SLICE_INDEX_SLOT, &SlicesCursor::updateSliceIndex, this);
+    newSlot(s_UPDATE_SLICE_TYPE_SLOT, &SlicesCursor::updateSliceType, this);
+    newSlot(s_UPDATE_IMAGE_SLOT, &SlicesCursor::updateImage, this);
+    newSlot(s_SHOW_FULL_CROSS_SLOT, &SlicesCursor::showFullCross, this);
+    newSlot(s_SHOW_NORMAL_CROSS_SLOT, &SlicesCursor::showNormalCross, this);
+    newSlot(s_SET_CROSS_SCALE_SLOT, &SlicesCursor::setCrossScale, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -69,11 +80,12 @@ SlicesCursor::~SlicesCursor()  throw()
 void SlicesCursor::setCrossScale(double scale)
 {
     m_scale = scale;
+    this->updating();
 }
 
 //-----------------------------------------------------------------------------
 
-void SlicesCursor::configuring() throw(fwTools::Failed)
+void SlicesCursor::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
@@ -83,17 +95,6 @@ void SlicesCursor::configuring() throw(fwTools::Failed)
         SLM_ASSERT("scale attribute must be in a config", m_configuration->getName() == "config");
         m_scale = ::boost::lexical_cast<double>(scaleStr);
     }
-    if(m_configuration->hasAttribute("transform") )
-    {
-        this->setTransformId( m_configuration->getAttributeValue("transform") );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void SlicesCursor::reconfiguring() throw(fwTools::Failed)
-{
-    configuring();
 }
 
 //-----------------------------------------------------------------------------
@@ -105,7 +106,7 @@ void SlicesCursor::doStart() throw(fwTools::Failed)
     this->buildColorAttribute();
     this->updateImageInfos(image);
     this->updateColors();
-    m_cursorMapper->SetInput( m_cursorPolyData );
+    m_cursorMapper->SetInputData( m_cursorPolyData );
     m_cursorActor->SetMapper(m_cursorMapper);
     if(!this->getTransformId().empty())
     {
@@ -145,25 +146,25 @@ void SlicesCursor::doStop() throw(fwTools::Failed)
 
 void SlicesCursor::buildPolyData()
 {
-    int nbPoints = 8;
+    int nbPoints      = 8;
     vtkPoints* points = vtkPoints::New(VTK_DOUBLE);
     points->SetNumberOfPoints(nbPoints);
     int i;
     for (i = 0; i < nbPoints; i++)
     {
         //points->SetPoint(i, 300*i +0.0, 50*i*i + 0.0 , 0.0);
-        points->SetPoint(i, 0.0, 0.0 , 0.0);
+        points->SetPoint(i, 0.0, 0.0, 0.0);
     }
 
-    vtkCellArray *cells = vtkCellArray::New();
+    vtkCellArray* cells = vtkCellArray::New();
     cells->Allocate(cells->EstimateSize(nbPoints,2));
 
     vtkIdType pts[2];
-    for ( int line=0; line<4; ++line)
+    for ( int line = 0; line<4; ++line)
     {
         pts[0] = line; pts[1] = line+4;
         //cells->InsertNextCell(2,pts);
-        vtkLine *lineCell= vtkLine::New();
+        vtkLine* lineCell = vtkLine::New();
         lineCell->GetPointIds()->SetId(0, line );
         lineCell->GetPointIds()->SetId(1, line+ 4 );
         cells->InsertNextCell(lineCell);
@@ -181,7 +182,7 @@ void SlicesCursor::buildPolyData()
 
 void SlicesCursor::barycenter( double ptA[3], double ptB[3], float scale, double result[3] )
 {
-    for (int i=0 ; i<3; ++i )
+    for (int i = 0; i<3; ++i )
     {
         result[i] = scale*ptA[i] + (1-scale)*ptB[i];
     }
@@ -189,17 +190,18 @@ void SlicesCursor::barycenter( double ptA[3], double ptB[3], float scale, double
 
 //-----------------------------------------------------------------------------
 
-void SlicesCursor::computeCrossPoints( double _ptA[3], double _ptB[3], double _ptP[3], double _scale, double _ptAprime[3], double _ptBprime[3] )
+void SlicesCursor::computeCrossPoints( double _ptA[3], double _ptB[3], double _ptP[3], double _scale,
+                                       double _ptAprime[3], double _ptBprime[3] )
 {
     double ptPBprime[3];
     double norm2PBprime = 0.0;
-    double norm2BP = 0;
-    double norm2AP = 0;
+    double norm2BP      = 0;
+    double norm2AP      = 0;
 
     // Compute AB x scale / 2 = |A'P| x AB = |PB'| x AB
-    for (int i=0 ; i<3; ++i )
+    for (int i = 0; i<3; ++i )
     {
-        ptPBprime[i] = ( _ptB[i] - _ptA[i] ) * (1-_scale)/2.0;
+        ptPBprime[i]  = ( _ptB[i] - _ptA[i] ) * (1-_scale)/2.0;
         norm2PBprime += ptPBprime[i]*ptPBprime[i];
         norm2AP      += (_ptP[i] - _ptA[i])*(_ptP[i] - _ptA[i]);
         norm2BP      += (_ptP[i] - _ptB[i])*(_ptP[i] - _ptB[i]);
@@ -209,7 +211,7 @@ void SlicesCursor::computeCrossPoints( double _ptA[3], double _ptB[3], double _p
     //          BPrime = P + pB' = P + |PB'| x AB
     if ( norm2PBprime > norm2BP )
     {
-        for (int i=0 ; i<3; ++i )
+        for (int i = 0; i<3; ++i )
         {
             _ptAprime[i] = _ptP[i] - ptPBprime[i];
             _ptBprime[i] = _ptB[i];
@@ -217,7 +219,7 @@ void SlicesCursor::computeCrossPoints( double _ptA[3], double _ptB[3], double _p
     }
     else if ( norm2PBprime > norm2AP )
     {
-        for (int i=0 ; i<3; ++i )
+        for (int i = 0; i<3; ++i )
         {
             _ptAprime[i] = _ptA[i];
             _ptBprime[i] = _ptP[i] + ptPBprime[i];
@@ -225,7 +227,7 @@ void SlicesCursor::computeCrossPoints( double _ptA[3], double _ptB[3], double _p
     }
     else
     {
-        for (int i=0 ; i<3; ++i )
+        for (int i = 0; i<3; ++i )
         {
             _ptAprime[i] = _ptP[i] - ptPBprime[i];
             _ptBprime[i] = _ptP[i] + ptPBprime[i];
@@ -237,19 +239,19 @@ void SlicesCursor::computeCrossPoints( double _ptA[3], double _ptB[3], double _p
 
 void SlicesCursor::buildColorAttribute()
 {
-    unsigned char red[3] = {255, 0, 0};
+    unsigned char red[3]   = {255, 0, 0};
     unsigned char green[3] = {0, 255, 0};
-    unsigned char blue[3] = {0, 0, 255};
+    unsigned char blue[3]  = {0, 0, 255};
 
     typedef  unsigned char* RGBColor;
-    typedef std::map< std::string , std::pair< RGBColor , RGBColor> >  DicoType;
-    DicoType                                                         dict;
+    typedef std::map< std::string, std::pair< RGBColor, RGBColor> >  DicoType;
+    DicoType dict;
     dict["colorXAxis"] = std::make_pair(green,red);
     dict["colorYAxis"] = std::make_pair(red, blue);
     dict["colorZAxis"] = std::make_pair(blue, green );
 
 
-    for ( DicoType::iterator i= dict.begin() ; i!= dict.end(); ++ i )
+    for ( DicoType::iterator i = dict.begin(); i!= dict.end(); ++i )
     {
         vtkUnsignedCharArray* colors = vtkUnsignedCharArray::New();
         colors->SetNumberOfComponents(3);
@@ -270,9 +272,9 @@ void SlicesCursor::updateColors()
 {
     switch (m_orientation )
     {
-        case 0 : m_cursorMapper->SelectColorArray("colorXAxis"); break;
-        case 1 : m_cursorMapper->SelectColorArray("colorYAxis"); break;
-        case 2 : m_cursorMapper->SelectColorArray("colorZAxis"); break;
+        case 0: m_cursorMapper->SelectColorArray("colorXAxis"); break;
+        case 1: m_cursorMapper->SelectColorArray("colorYAxis"); break;
+        case 2: m_cursorMapper->SelectColorArray("colorZAxis"); break;
 
     }
     this->setVtkPipelineModified();
@@ -292,18 +294,18 @@ void SlicesCursor::doSwap() throw(fwTools::Failed)
 void SlicesCursor::doUpdate() throw(fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
 
     if ( imageIsValid)
     {
-        this->updateSliceIndex(image);
+        this->updateImageSliceIndex(image);
         this->updateColors();
     }
 }
 
 //-----------------------------------------------------------------------------
 
-void SlicesCursor::updateSliceIndex( ::fwData::Image::sptr image )
+void SlicesCursor::updateImageSliceIndex( ::fwData::Image::sptr image )
 {
     float scale = m_isSelected ? 1.0 : m_scale;
     if (scale <= 0)
@@ -321,31 +323,30 @@ void SlicesCursor::updateSliceIndex( ::fwData::Image::sptr image )
         pos[0] = m_sagittalIndex->value();
 
         double sliceWorld[3];
-        for (int dim=0; dim<3; ++dim )
+        for (int dim = 0; dim<3; ++dim )
         {
             sliceWorld[dim] = pos[dim]*image->getSpacing()[dim] + image->getOrigin().at(dim);
         }
 
         double cursorPoints[8][3]; // point AB,BC,CD,AD,ABM,BCM,CDM,ADM
 
-        for ( int p=0; p<2; ++p )
+        for ( int p = 0; p<2; ++p )
         {
-            for (int dim=0; dim<3; ++dim )
+            for (int dim = 0; dim<3; ++dim )
             {
                 //cursorPoints[p][dim] =   ((m_orientation==dim   ||   ( (dim != m_orientation) && p )  )?sliceWorld[dim] : 0 );
                 //cursorPoints[p+2][dim] = ((m_orientation==dim   ||   ( (dim != m_orientation) && p )  )?sliceWorld[dim] : (image->getSize()[dim]-1)*image->getSpacing()[dim] );
-                cursorPoints[p][dim] = sliceWorld[dim];
+                cursorPoints[p][dim]   = sliceWorld[dim];
                 cursorPoints[p+2][dim] = sliceWorld[dim];
                 if ( (dim + p + 1)%3 == m_orientation )
                 {
-                    cursorPoints[p][dim] = image->getOrigin().at(dim);
-                    cursorPoints[p+2][dim] =  (image->getSize()[dim]-1)*image->getSpacing()[dim] + image->getOrigin().at(dim);
+                    cursorPoints[p][dim]   = image->getOrigin().at(dim);
+                    cursorPoints[p+2][dim] = (image->getSize()[dim]-1)*image->getSpacing()[dim] + image->getOrigin().at(
+                        dim);
                 }
             }
         }
 
-
-
         // Compute ABM & CDM
         computeCrossPoints( cursorPoints[0], cursorPoints[2], sliceWorld, scale, cursorPoints[4], cursorPoints[6] );
         // Compute BCM & ADM
@@ -353,7 +354,7 @@ void SlicesCursor::updateSliceIndex( ::fwData::Image::sptr image )
 
         vtkPoints* points = m_cursorPolyData->GetPoints();
 
-        for ( int i=0; i < 8; ++i)
+        for ( int i = 0; i < 8; ++i)
         {
             points->SetPoint(i,cursorPoints[i]);
         }
@@ -365,64 +366,66 @@ void SlicesCursor::updateSliceIndex( ::fwData::Image::sptr image )
 
 //-----------------------------------------------------------------------------
 
-void SlicesCursor::doReceive(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
+void SlicesCursor::updateSliceIndex(int axial, int frontal, int sagittal)
 {
-    m_isSelected = false;
+    m_axialIndex->value()    = axial;
+    m_frontalIndex->value()  = frontal;
+    m_sagittalIndex->value() = sagittal;
+
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-    ::fwComEd::ImageMsg::csptr imageMsg = ::fwComEd::ImageMsg::dynamicConstCast(msg);
-    if(imageIsValid && imageMsg)
-    {
 
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            this->updateImageInfos(image);
-            this->updating();
-        }
-        if ( imageMsg->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ) )
-        {
-            ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo(::fwComEd::ImageMsg::SLICE_INDEX);
-            imageMsg->getSliceIndex( m_axialIndex, m_frontalIndex, m_sagittalIndex);
+    this->updateImageSliceIndex(image);
+    this->updating();
+}
+//-----------------------------------------------------------------------------
 
-            if(dataInfo && dataInfo->getField("SLICE_MODE"))
-            {
-                ::fwData::String::sptr sliceMode = dataInfo->getField< ::fwData::String >("SLICE_MODE");
-                SLM_ASSERT("sceneID empty!", sliceMode);
-                m_isSelected = ( sliceMode->value() == "UPDATE_SLICING" );
-            }
-            this->updateSliceIndex(image);
-            this->updating();
-        }
-        if ( imageMsg->hasEvent( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE ) )
-        {
+void SlicesCursor::showFullCross()
+{
+    m_isSelected = true;
+}
 
-            ::fwData::Object::csptr cObjInfo = imageMsg->getDataInfo( ::fwComEd::ImageMsg::CHANGE_SLICE_TYPE );
-            ::fwData::Object::sptr objInfo = ::boost::const_pointer_cast< ::fwData::Object > ( cObjInfo );
-            ::fwData::Composite::sptr info = ::fwData::Composite::dynamicCast ( objInfo );
+//-----------------------------------------------------------------------------
 
-            int fromSliceType = ::fwData::Integer::dynamicCast( info->getContainer()["fromSliceType"] )->value();
-            int toSliceType =   ::fwData::Integer::dynamicCast( info->getContainer()["toSliceType"] )->value();
+void SlicesCursor::showNormalCross()
+{
+    m_isSelected = false;
+}
 
-            if( toSliceType == static_cast<int>(m_orientation) )
-            {
-                setOrientation( static_cast< Orientation >( fromSliceType ));
-            }
-            else if( fromSliceType == static_cast<int>(m_orientation) )
-            {
-                setOrientation( static_cast< Orientation >( toSliceType ));
-            }
-            this->updating();
-        }
-        if ( imageMsg->hasEvent( "CROSS_TYPE") )
-        {
-            ::fwData::Object::csptr dataInfo = imageMsg->getDataInfo("CROSS_TYPE");
-            SLM_ASSERT("dataInfo is missing", dataInfo);
-            ::fwData::Float::csptr scale = ::fwData::Float::dynamicConstCast(dataInfo);
-            SLM_ASSERT("dataInfo is missing", scale);
-            this->setCrossScale( scale->value() );
-            this->updating();
-        }
+//-----------------------------------------------------------------------------
+
+void SlicesCursor::updateSliceType(int from, int to)
+{
+    if( to == static_cast<int>(m_orientation) )
+    {
+        setOrientation( static_cast< Orientation >( from ));
+    }
+    else if( from == static_cast<int>(m_orientation) )
+    {
+        setOrientation( static_cast< Orientation >( to ));
     }
+    this->updating();
+}
+
+//-----------------------------------------------------------------------------
+
+void SlicesCursor::updateImage()
+{
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateImageInfos(image);
+    this->updating();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SlicesCursor::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_IMAGE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG, s_UPDATE_SLICE_INDEX_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_SLICE_TYPE_MODIFIED_SIG, s_UPDATE_SLICE_TYPE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_IMAGE_SLOT ) );
+
+    return connections;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp
index 5eb5f90..dd4984a 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Snapshot.cpp
@@ -1,46 +1,48 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem.hpp>
 
-#include <vtkWindowToImageFilter.h>
-#include <vtkImageWriter.h>
-#include <vtkJPEGWriter.h>
-#include <vtkBMPWriter.h>
-#include <vtkTIFFWriter.h>
-#include <vtkPNGWriter.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
+#include "visuVTKAdaptor/Snapshot.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/Composite.hpp>
 #include <fwData/String.hpp>
 
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IService.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/CompositeMsg.hpp>
+#include <fwServices/macros.hpp>
 
 #include <vtkActor.h>
+#include <vtkBMPWriter.h>
+#include <vtkImageData.h>
+#include <vtkImageWriter.h>
+#include <vtkJPEGWriter.h>
+#include <vtkPNGWriter.h>
+#include <vtkRenderWindow.h>
 #include <vtkRenderer.h>
+#include <vtkTIFFWriter.h>
+#include <vtkWindowToImageFilter.h>
 
-
-#include "visuVTKAdaptor/Snapshot.hpp"
+#include <boost/filesystem.hpp>
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Snapshot, ::fwData::Composite ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Snapshot, ::fwData::Composite );
 
 namespace visuVTKAdaptor
 {
 
+const ::fwCom::Slots::SlotKeyType Snapshot::s_SNAP_SIG = "snap";
+
 Snapshot::Snapshot() throw()
 {
-    //addNewHandledEvent("SNAP");
+    newSlot(s_SNAP_SIG, &Snapshot::snap, this);
 }
 
 //------------------------------------------------------------------------------
@@ -51,12 +53,8 @@ Snapshot::~Snapshot() throw()
 
 //------------------------------------------------------------------------------
 
-void Snapshot::configuring() throw(fwTools::Failed)
+void Snapshot::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 }
 
 //------------------------------------------------------------------------------
@@ -70,7 +68,6 @@ void Snapshot::doStart() throw(fwTools::Failed)
 
 void Snapshot::doUpdate() throw(fwTools::Failed)
 {
-
 }
 
 //------------------------------------------------------------------------------
@@ -84,32 +81,6 @@ void Snapshot::doSwap() throw(fwTools::Failed)
 
 void Snapshot::doStop() throw(fwTools::Failed)
 {
-
-}
-
-//------------------------------------------------------------------------------
-
-void Snapshot::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast( msg );
-
-    if ( compositeMsg && compositeMsg->hasEvent( "SNAP"))
-    {
-        ::fwData::Object::csptr dataInfo = compositeMsg->getDataInfo("SNAP");
-
-        SLM_ASSERT("sceneID missing", dataInfo->getField("sceneID"));
-        ::fwData::String::sptr sceneID = dataInfo->getField< ::fwData::String >("sceneID");
-        SLM_ASSERT("sceneID empty!", sceneID);
-
-        SLM_ASSERT("filename missing", dataInfo->getField("filename"));
-        ::fwData::String::sptr filename = dataInfo->getField< ::fwData::String >("filename");
-        SLM_ASSERT("filename empty!", !filename->value().empty());
-
-        if( this->getRenderService()->getID() == sceneID->value())
-        {
-            this->snap(filename->value());
-        }
-    }
 }
 
 //------------------------------------------------------------------------------
@@ -121,11 +92,7 @@ void Snapshot::snap(std::string filePath)
     fs::path pathImageSnap(filePath);
 
     std::string ext = ".jpg";
-#if BOOST_FILESYSTEM_VERSION > 2
     ext = pathImageSnap.extension().string();
-#else
-    ext = pathImageSnap.extension();
-#endif
     vtkImageWriter* writer = 0;
 
     if( ext==".jpg" || ext==".jpeg" )
@@ -153,8 +120,7 @@ void Snapshot::snap(std::string filePath)
     snapper->SetMagnification( 1 );
     snapper->SetInput( this->getRenderer()->GetRenderWindow() );
 
-
-    writer->SetInput( snapper->GetOutput() );
+    writer->SetInputConnection( snapper->GetOutputPort() );
     writer->SetFileName( pathImageSnap.string().c_str() );
     writer->Write();
 
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Text.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Text.cpp
index 7c9ff61..a7eee59 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Text.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Text.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,14 +24,17 @@ fwServicesRegisterMacro(::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Tex
 namespace visuVTKAdaptor
 {
 
-Text::Text() : m_fontSize(20), m_vAlign("bottom"), m_hAlign("left")
+Text::Text() :
+    m_actor(vtkActor2D::New()),
+    m_mapper(vtkTextMapper::New()),
+    m_fontSize(20),
+    m_vAlign("bottom"),
+    m_hAlign("left")
 {
-    m_mapper = vtkTextMapper::New();
     m_mapper->GetTextProperty()->SetFontFamilyToCourier(); // Fixed-width font
     m_mapper->GetTextProperty()->ShadowOn(); // better contrast
     m_mapper->GetTextProperty()->BoldOn();
 
-    m_actor = vtkActor2D::New();
     m_actor->SetMapper(m_mapper);
     m_actor->GetPositionCoordinate()->SetCoordinateSystemToNormalizedViewport();
     m_actor->GetPosition2Coordinate()->SetCoordinateSystemToNormalizedViewport();
@@ -42,25 +45,25 @@ Text::Text() : m_fontSize(20), m_vAlign("bottom"), m_hAlign("left")
 Text::~Text() throw()
 {
     m_actor->Delete();
-    m_actor = 0;
+    m_actor = nullptr;
 
     m_mapper->Delete();
-    m_mapper = 0;
+    m_mapper = nullptr;
 }
 
 //-----------------------------------------------------------------------------
 
-void Text::configuring() throw(fwTools::Failed)
+void Text::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
     assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
 
     std::string text = m_configuration->getAttributeValue("text");
     if(!text.empty() && text[0] == '@')
     {
-        ::fwData::Object::sptr obj = this->getObject();
+        OSLM_ASSERT("You shall set text attribute or <text> tag, not both", m_configuration->find("text").empty());
+        ::fwData::Object::sptr obj             = this->getObject();
         ::fwData::GenericFieldBase::sptr field = ::fwDataCamp::getObject< ::fwData::GenericFieldBase >(obj, text);
         SLM_ASSERT("Seshat path can't be cast to generic field", field);
         if(field)
@@ -69,23 +72,42 @@ void Text::configuring() throw(fwTools::Failed)
         }
     }
 
+    if(text.empty())
+    {
+        auto textVector = m_configuration->find("text");
+        if(!textVector.empty())
+        {
+            OSLM_ASSERT("<text> tag shall be set at most once", textVector.size()<=1);
+            auto item = textVector[0];
+            text = item->getValue();
+        }
+
+    }
+
     if(m_configuration->hasAttribute("fontSize"))
     {
         m_fontSize = ::boost::lexical_cast< unsigned int >(m_configuration->getAttributeValue("fontSize"));
     }
 
-    m_mapper->GetTextProperty()->SetFontSize(m_fontSize);
+    m_mapper->GetTextProperty()->SetFontSize( int(m_fontSize) );
 
     if(m_configuration->hasAttribute("hAlign"))
     {
         m_hAlign = m_configuration->getAttributeValue("hAlign");
-        SLM_ASSERT("'hAlign' value must be 'left' or 'right'", m_hAlign == "left" || m_hAlign == "right");
+        SLM_ASSERT("'hAlign' value must be 'left', 'center' or 'right'",
+                   m_hAlign == "left"
+                   || m_hAlign == "center"
+                   || m_hAlign == "right"
+                   );
     }
 
     if(m_configuration->hasAttribute("vAlign"))
     {
         m_vAlign = m_configuration->getAttributeValue("vAlign");
-        SLM_ASSERT("'vAlign' value must be 'top' or 'bottom'", m_vAlign == "top" || m_vAlign == "bottom");
+        SLM_ASSERT("'vAlign' value must be 'top', 'center' or 'bottom'",
+                   m_vAlign == "top"
+                   || m_hAlign == "center"
+                   || m_vAlign == "bottom");
     }
 
     if( m_configuration->hasAttribute("color") )
@@ -95,7 +117,8 @@ void Text::configuring() throw(fwTools::Failed)
         {
             ::fwData::Color::sptr color = ::fwData::Color::New();
             color->setRGBA(colorText);
-            m_mapper->GetTextProperty()->SetColor(color->getRefRGBA()[0], color->getRefRGBA()[1], color->getRefRGBA()[2]);
+            m_mapper->GetTextProperty()->SetColor(color->getRefRGBA()[0], color->getRefRGBA()[1],
+                                                  color->getRefRGBA()[2]);
         }
         else
         {
@@ -128,41 +151,40 @@ void Text::setAlignment()
 {
     vtkTextProperty* textprop = m_mapper->GetTextProperty();
 
+    double x = 0.5;
+    double y = 0.5;
+
+    textprop->SetJustificationToCentered();
+    textprop->SetVerticalJustificationToCentered();
+
     if(m_hAlign == "left")
     {
         textprop->SetJustificationToLeft();
-
-        if(m_vAlign == "top")
-        {
-            textprop->SetVerticalJustificationToTop();
-            m_actor->SetPosition(0.001, 0.98);
-        }
-        else
-        {
-            textprop->SetVerticalJustificationToBottom();
-            m_actor->SetPosition(0.001,0.02);
-        }
+        x = 0.001;
     }
-    else
+    else if(m_hAlign == "right")
     {
         textprop->SetJustificationToRight();
+        x = 0.99;
+    }
 
-        if(m_vAlign == "top")
-        {
-            textprop->SetVerticalJustificationToTop();
-            m_actor->SetPosition(0.99, 0.98);
-        }
-        else
-        {
-            textprop->SetVerticalJustificationToBottom();
-            m_actor->SetPosition(0.99,0.02);
-        }
+    if(m_vAlign == "top")
+    {
+        textprop->SetVerticalJustificationToTop();
+        y = 0.98;
     }
+    else if(m_vAlign == "bottom")
+    {
+        textprop->SetVerticalJustificationToBottom();
+        y = 0.02;
+    }
+
+    m_actor->SetPosition(x,y);
 }
 
 //-----------------------------------------------------------------------------
 
-void Text::setText(std::string str)
+void Text::setText(const std::string &str)
 {
     m_text = str;
     m_mapper->SetInput(m_text.c_str());
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Texture.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Texture.cpp
new file mode 100644
index 0000000..643d277
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Texture.cpp
@@ -0,0 +1,188 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "visuVTKAdaptor/Texture.hpp"
+
+#include "visuVTKAdaptor/Mesh.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Image.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/mt/ObjectReadLock.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <vtkRenderWindowInteractor.h>
+#include <vtkTexture.h>
+
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Texture, ::fwData::Image );
+
+namespace visuVTKAdaptor
+{
+
+const ::fwCom::Slots::SlotKeyType Texture::s_APPLY_TEXTURE_SLOT = "applyTexture";
+
+//------------------------------------------------------------------------------
+
+Texture::Texture() throw() :
+    m_filtering("linear"),
+    m_wrapping("repeat"),
+    m_lighting(true)
+{
+    m_slotApplyTexture = ::fwCom::newSlot( &Texture::applyTexture, this );
+    ::fwCom::HasSlots::m_slots( s_APPLY_TEXTURE_SLOT, m_slotApplyTexture);
+    ::fwCom::HasSlots::m_slots.setWorker( m_associatedWorker );
+}
+
+//------------------------------------------------------------------------------
+
+Texture::~Texture() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Texture::doConfigure() throw(fwTools::Failed)
+{
+    SLM_ASSERT("Missing configuration", m_configuration->getName() == "config");
+
+    if ( m_configuration->hasAttribute( "autoRender" ) )
+    {
+        const std::string autoRender = m_configuration->getAttributeValue("autoRender");
+        const bool autoRenderValue   = (autoRender == "true");
+        this->setAutoRender(autoRenderValue);
+    }
+
+    if ( m_configuration->hasAttribute( "filtering" ) )
+    {
+        m_filtering = m_configuration->getAttributeValue("filtering");
+    }
+
+    if ( m_configuration->hasAttribute( "wrapping" ) )
+    {
+        m_wrapping = m_configuration->getAttributeValue("wrapping");
+    }
+    if ( m_configuration->hasAttribute( "lighting" ) )
+    {
+        m_lighting = (m_configuration->getAttributeValue("lighting") == "yes");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Texture::doStart() throw(fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Texture::doUpdate() throw(fwTools::Failed)
+{
+    for(::fwData::Material::sptr material :  m_materialSet)
+    {
+        applyTexture(material);
+    }
+}
+
+//------------------------------------------------------------------------------
+void Texture::doSwap() throw(fwTools::Failed)
+{
+    this->doUpdate();
+}
+
+//------------------------------------------------------------------------------
+
+void Texture::doStop() throw(fwTools::Failed)
+{
+    this->unregisterServices();
+}
+
+//------------------------------------------------------------------------------
+
+void Texture::applyTexture( SPTR(::fwData::Material)_material )
+{
+    if(m_materialSet.count(_material) == 0)
+    {
+        m_materialSet.insert(_material);
+    }
+
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+
+    if(!::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+    {
+        return;
+    }
+
+    _material->setDiffuseTexture(image);
+    if(m_lighting == false)
+    {
+        _material->setShadingMode(::fwData::Material::AMBIENT);
+    }
+
+    ::fwData::Material::FilteringType filtering = ::fwData::Material::LINEAR;
+    ::fwData::Material::WrappingType wrapping   = ::fwData::Material::REPEAT;
+
+    if(m_filtering == "nearest")
+    {
+        filtering = ::fwData::Material::NEAREST;
+    }
+    else if(m_filtering == "linear")
+    {
+        filtering = ::fwData::Material::LINEAR;
+    }
+    else
+    {
+        OSLM_WARN("Texture filtering type unknown or not supported : " << m_filtering);
+    }
+    _material->setDiffuseTextureFiltering(filtering);
+
+    if(m_wrapping == "repeat")
+    {
+        wrapping = ::fwData::Material::REPEAT;
+    }
+    else if(m_wrapping == "clamp")
+    {
+        wrapping = ::fwData::Material::CLAMP;
+    }
+    else
+    {
+        OSLM_WARN("Texture wrapping type unknown or not supported : " << m_wrapping);
+    }
+    _material->setDiffuseTextureWrapping(wrapping);
+
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = _material->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Texture::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+
+} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Transform.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Transform.cpp
index 1cf3639..c1630fc 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Transform.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Transform.cpp
@@ -1,44 +1,46 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <vtkCommand.h>
-#include <vtkMatrix4x4.h>
-#include <vtkTransform.h>
-#include <vtkRenderWindowInteractor.h>
+#include "visuVTKAdaptor/Transform.hpp"
 
-#include <fwData/TransformationMatrix3D.hpp>
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
 #include <fwData/Boolean.hpp>
+#include <fwData/Material.hpp>
 #include <fwData/mt/ObjectReadLock.hpp>
 #include <fwData/mt/ObjectWriteLock.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
 
-#include <fwComEd/TransformationMatrix3DMsg.hpp>
+#include <vtkCommand.h>
+#include <vtkMatrix4x4.h>
+#include <vtkTransform.h>
+#include <vtkRenderWindowInteractor.h>
 
-#include "visuVTKAdaptor/Transform.hpp"
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-class TransformClallback : public ::vtkCommand
+class TransformCallback : public ::vtkCommand
 {
 public:
 
-    static TransformClallback* New(::visuVTKAdaptor::Transform* adaptor) {
-        TransformClallback *cb = new TransformClallback;
+    static TransformCallback* New(::visuVTKAdaptor::Transform* adaptor)
+    {
+        TransformCallback *cb = new TransformCallback;
         cb->m_adaptor = adaptor;
         return cb;
     }
 
-     TransformClallback() : m_adaptor(NULL) {}
-    ~TransformClallback() {}
+    TransformCallback() : m_adaptor(nullptr)
+    {
+    }
+    ~TransformCallback()
+    {
+    }
 
     virtual void Execute( ::vtkObject* pCaller, unsigned long, void* )
     {
@@ -49,110 +51,163 @@ public:
 };
 
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Transform, ::fwData::TransformationMatrix3D ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Transform,
+                         ::fwData::TransformationMatrix3D );
 
 namespace visuVTKAdaptor
 {
 
 //------------------------------------------------------------------------------
 
-Transform::Transform() throw()
+Transform::Transform() throw() :
+    m_transform(nullptr),
+    m_transformCommand(TransformCallback::New(this))
 {
-    m_transform = 0;
-    m_transformCommand = TransformClallback::New(this);
-    //addNewHandledEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED );
 }
 
 //------------------------------------------------------------------------------
 
 Transform::~Transform() throw()
 {
-    if( m_transformCommand ) m_transformCommand->Delete();
-    m_transformCommand = 0;
+    if( m_transformCommand )
+    {
+        m_transformCommand->Delete();
+    }
+    m_transformCommand = nullptr;
 }
 
 //------------------------------------------------------------------------------
 
-void Transform::configuring() throw(fwTools::Failed)
+void Transform::doConfigure() throw(fwTools::Failed)
 {
-    SLM_TRACE_FUNC();
-
     assert(m_configuration->getName() == "config");
-    this->setTransformId( m_configuration->getAttributeValue("transform") );
 
     if ( m_configuration->hasAttribute( "autoRender" ) )
     {
-        const std::string autoRender   = m_configuration->getAttributeValue("autoRender");
-        const bool autoRenderValue = (autoRender == "true");
+        const std::string autoRender = m_configuration->getAttributeValue("autoRender");
+        const bool autoRenderValue   = (autoRender == "true");
         this->setAutoRender(autoRenderValue);
     }
+
+    if ( m_configuration->hasAttribute( "parent" ) )
+    {
+        m_parentId = m_configuration->getAttributeValue("parent");
+
+        if(m_parentId.empty())
+        {
+            SLM_ERROR("Can't find vtkTransform '" + m_parentId + "'");
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
 
 void Transform::doStart() throw(fwTools::Failed)
 {
+    if(!m_transformId.empty())
+    {
+        m_renderService.lock()->getOrAddVtkTransform(m_transformId);
+    }
+    if(!m_parentId.empty())
+    {
+        m_parentTransform = m_renderService.lock()->getOrAddVtkTransform(m_parentId);
+    }
 
     this->doUpdate();
     getTransform()->AddObserver( ::vtkCommand::ModifiedEvent, m_transformCommand );
-
 }
 
-
+//------------------------------------------------------------------------------
 
 void Transform::updateFromVtk()
 {
-    getTransform()->RemoveObserver( m_transformCommand );
+    vtkTransform* vtkTrf = this->getTransform();
+
+    vtkTrf->RemoveObserver( m_transformCommand );
     ::fwData::TransformationMatrix3D::sptr trf = this->getObject< ::fwData::TransformationMatrix3D >();
-    vtkMatrix4x4* mat = getTransform()->GetMatrix();
+
+    vtkMatrix4x4* mat = nullptr;
+
+    if(m_parentTransform)
+    {
+        // Get the matrix before concatenation
+        mat = vtkTrf->GetConcatenatedTransform(0)->GetMatrix();
+    }
+    else
+    {
+        mat = vtkTrf->GetMatrix();
+    }
 
     {
         ::fwData::mt::ObjectWriteLock lock(trf);
-        for(int lt=0; lt<4; lt++)
+        for(int lt = 0; lt<4; lt++)
         {
-            for(int ct=0; ct<4; ct++)
+            for(int ct = 0; ct<4; ct++)
             {
                 trf->setCoefficient(lt,ct, mat->GetElement(lt,ct));
             }
         }
     }
-    ::fwComEd::TransformationMatrix3DMsg::sptr msg = ::fwComEd::TransformationMatrix3DMsg::New();
-    msg->addEvent( ::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED ) ;
-    ::fwServices::IEditionService::notify(this->getSptr(), trf, msg);
 
-    getTransform()->AddObserver( ::vtkCommand::ModifiedEvent, m_transformCommand );
+    auto sig = trf->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+
+    vtkTrf->AddObserver( ::vtkCommand::ModifiedEvent, m_transformCommand );
 }
 
 
 //------------------------------------------------------------------------------
 
+int Transform::getStartPriority()
+{
+    return -10;
+}
+
+//------------------------------------------------------------------------------
+
 void Transform::doUpdate() throw(fwTools::Failed)
 {
-    getTransform()->RemoveObserver( m_transformCommand );
+    vtkTransform* vtkTrf = this->getTransform();
+
+    vtkTrf->RemoveObserver( m_transformCommand );
     ::fwData::TransformationMatrix3D::sptr trf = this->getObject< ::fwData::TransformationMatrix3D >();
     vtkMatrix4x4* mat = vtkMatrix4x4::New();
 
     {
         ::fwData::mt::ObjectReadLock lock(trf);
-        for(int lt=0; lt<4; lt++)
+        for(int lt = 0; lt<4; lt++)
         {
-            for(int ct=0; ct<4; ct++)
+            for(int ct = 0; ct<4; ct++)
             {
                 mat->SetElement(lt,ct, trf->getCoefficient(lt,ct));
             }
         }
     }
-    vtkTransform* vtkTrf = this->getTransform();
-    vtkTrf->SetMatrix(mat);
+
+    if(m_parentTransform)
+    {
+        vtkTrf->PostMultiply();
+        vtkTrf->SetMatrix( mat );
+        vtkTrf->Concatenate( m_parentTransform );
+    }
+    else
+    {
+        vtkTrf->SetMatrix(mat);
+    }
+
     vtkTrf->Modified();
-    getTransform()->AddObserver( ::vtkCommand::ModifiedEvent, m_transformCommand );
+    vtkTrf->AddObserver( ::vtkCommand::ModifiedEvent, m_transformCommand );
     mat->Delete();
     this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
 
-void Transform::setTransform(vtkTransform *t){
+void Transform::setTransform(vtkTransform *t)
+{
     if ( m_transform != t )
     {
         if (m_transform)
@@ -161,16 +216,16 @@ void Transform::setTransform(vtkTransform *t){
         }
         if(t)
         {
-            t->Register(NULL);
+            t->Register(nullptr);
         }
     }
-
     m_transform = t;
-};
+}
 
 //------------------------------------------------------------------------------
 
-vtkTransform * Transform::getTransform(){
+vtkTransform * Transform::getTransform()
+{
     vtkTransform *t = m_transform;
     if (t == 0)
     {
@@ -180,6 +235,7 @@ vtkTransform * Transform::getTransform(){
 }
 
 //------------------------------------------------------------------------------
+
 void Transform::doSwap() throw(fwTools::Failed)
 {
     this->doUpdate();
@@ -192,16 +248,4 @@ void Transform::doStop() throw(fwTools::Failed)
     this->unregisterServices();
 }
 
-//------------------------------------------------------------------------------
-
-void Transform::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    ::fwComEd::TransformationMatrix3DMsg::csptr transfoMsg = ::fwComEd::TransformationMatrix3DMsg::dynamicConstCast(msg);
-    if (transfoMsg && transfoMsg->hasEvent(::fwComEd::TransformationMatrix3DMsg::MATRIX_IS_MODIFIED))
-    {
-
-        doUpdate();
-    }
-}
-
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/TriangularMesh.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/TriangularMesh.cpp
deleted file mode 100644
index c8abda2..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/TriangularMesh.cpp
+++ /dev/null
@@ -1,994 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwData/Material.hpp>
-#include <fwData/TriangularMesh.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwComEd/MaterialMsg.hpp>
-#include <fwComEd/TriangularMeshMsg.hpp>
-
-#include <fwVtkIO/vtk.hpp>
-
-#include <vtkActor.h>
-#include <vtkCamera.h>
-#include <vtkCommand.h>
-#include <vtkDepthSortPolyData.h>
-#include <vtkMath.h>
-#include <vtkMatrix4x4.h>
-#include <vtkPicker.h>
-#include <vtkPlaneCollection.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkPolyDataNormals.h>
-#include <vtkProperty.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkRenderer.h>
-#include <vtkTransform.h>
-
-#include "visuVTKAdaptor/Material.hpp"
-#include "visuVTKAdaptor/Normals.hpp"
-
-#include "visuVTKAdaptor/Transform.hpp"
-#include "visuVTKAdaptor/TriangularMesh.hpp"
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::TriangularMesh, ::fwData::TriangularMesh ) ;
-
-namespace visuVTKAdaptor
-{
-
-
-class TriangularMeshVtkCommand : public vtkCommand
-{
-public:
-    virtual void Stop() = 0;
-};
-
-
-//------------------------------------------------------------------------------
-
-namespace TMCommand
-{
-
-class PlaneShifterCallback : public TriangularMeshVtkCommand
-{
-    public:
-
-    static PlaneShifterCallback *New( vtkPlane *src,  vtkPlane *dst, double factor = 1.)
-    { return new PlaneShifterCallback( src, dst, factor ); }
-
-    //--------------------------------------------------------------------------
-    PlaneShifterCallback( vtkPlane *src,  vtkPlane *dst, double factor )
-    : m_planeSrc(src),
-      m_planeDst(dst),
-      m_factor(factor)
-    {
-        m_planeSrc->Register(this);
-        m_planeDst->Register(this);
-        src->AddObserver(vtkCommand::ModifiedEvent, this);
-        this->Execute( 0, vtkCommand::ModifiedEvent, 0);
-    }
-
-    void Stop()
-    {
-        m_planeSrc->RemoveObserver(this);
-        m_planeSrc->UnRegister(this);
-        m_planeDst->UnRegister(this);
-    }
-
-
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void * )
-    {
-        if (eventId == vtkCommand::ModifiedEvent)
-        {
-            double n[3];
-            double o[3];
-
-            m_planeSrc->GetNormal(n);
-            m_planeSrc->GetOrigin(o);
-
-            if (m_factor < 0)
-            {
-                for (int i = 0; i<3; i++)
-                {
-                    n[i] = -n[i];
-                }
-            }
-
-            m_planeDst->SetNormal( n );
-            m_planeDst->SetOrigin( o );
-            m_planeDst->Push( m_factor );
-            m_planeDst->Modified();
-        }
-
-    }
-
-    protected:
-        vtkPlane *m_planeSrc;
-        vtkPlane *m_planeDst;
-        double    m_factor;
-};
-
-
-
-class PlaneCollectionShifterCallback : public TriangularMeshVtkCommand
-{
-    public:
-
-    static PlaneCollectionShifterCallback *New(
-            vtkPlaneCollection *src,
-            vtkPlaneCollection *dst,
-            double factor = 1. )
-    { return new PlaneCollectionShifterCallback( src, dst, factor ); }
-
-    //--------------------------------------------------------------------------
-    PlaneCollectionShifterCallback(
-            vtkPlaneCollection *src,
-            vtkPlaneCollection *dst,
-            double factor)
-    : m_planeCollectionSrc(src),
-      m_planeCollectionDst(dst),
-      m_factor(factor)
-    {
-        m_planeCollectionSrc->Register(this);
-        m_planeCollectionDst->Register(this);
-        m_planeCollectionSrc->AddObserver(vtkCommand::ModifiedEvent, this);
-
-        this->Execute( 0, vtkCommand::ModifiedEvent, 0);
-    }
-
-    void Stop()
-    {
-        this->Clear();
-        m_planeCollectionSrc->RemoveObserver(this);
-        m_planeCollectionSrc->UnRegister(this);
-        m_planeCollectionDst->UnRegister(this);
-    }
-
-    void Clear()
-    {
-        m_planeCollectionDst->RemoveAllItems();
-
-        BOOST_FOREACH( PlaneShifterCallback *psc, m_planeCallbacks )
-        {
-            psc->Stop();
-            psc->Delete();
-            psc=0;
-        }
-        m_planeCallbacks.clear();
-    }
-
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void * )
-    {
-        if (eventId == vtkCommand::ModifiedEvent)
-        {
-            this->Clear();
-
-            vtkPlane *plane = NULL;
-            for (  m_planeCollectionSrc->InitTraversal();
-                  (plane=m_planeCollectionSrc->GetNextItem());
-                )
-            {
-                vtkPlane *newPlane = vtkPlane::New();
-                m_planeCollectionDst->AddItem(newPlane);
-                m_planeCallbacks.push_back(PlaneShifterCallback::New(plane, newPlane, m_factor));
-                newPlane->Modified();
-                newPlane->Delete();
-            }
-        }
-    }
-
-    protected:
-        vtkPlaneCollection *m_planeCollectionSrc;
-        vtkPlaneCollection *m_planeCollectionDst;
-
-        std::vector< PlaneShifterCallback* > m_planeCallbacks;
-        double    m_factor;
-};
-
-
-
-class PlaneCollectionAdaptorStarter : public TriangularMeshVtkCommand
-{
-    public:
-
-    static PlaneCollectionAdaptorStarter *New(
-            ::visuVTKAdaptor::TriangularMesh::sptr service,
-            vtkPlaneCollection *src,
-            double factor = 1. )
-    {
-        return new PlaneCollectionAdaptorStarter( service, src, factor );
-    }
-
-    //--------------------------------------------------------------------------
-    PlaneCollectionAdaptorStarter(
-            ::visuVTKAdaptor::TriangularMesh::sptr service,
-            vtkPlaneCollection *src,
-            double factor)
-    : m_service(service),
-      m_planeCollectionSrc(src),
-      m_factor(factor)
-    {
-        m_planeCollectionSrc->Register(this);
-        m_planeCollectionSrc->AddObserver(vtkCommand::ModifiedEvent, this);
-        this->Execute( 0, vtkCommand::ModifiedEvent, 0);
-    }
-
-    void Stop()
-    {
-        m_planeCollectionSrc->RemoveObserver(this);
-        m_planeCollectionSrc->UnRegister(this);
-        this->Clear();
-    }
-
-    void Clear()
-    {
-        BOOST_FOREACH( ::visuVTKAdaptor::TriangularMesh::wptr adaptor, m_meshServices )
-        {
-            if (!adaptor.expired())
-            {
-                adaptor.lock()->stop();
-                ::fwServices::OSR::unregisterService(adaptor.lock());
-            }
-        }
-        m_meshServices.clear();
-
-        BOOST_FOREACH( PlaneShifterCallback *psc, m_planeCallbacks )
-        {
-            psc->Stop();
-            psc->Delete();
-            psc=0;
-        }
-        m_planeCallbacks.clear();
-
-        BOOST_FOREACH( vtkPlaneCollection *planeCol, m_planeCollections )
-        {
-            planeCol->Delete();
-        }
-        m_planeCollections.clear();
-
-        if (!m_service.expired())
-        {
-            m_service.lock()->setActorPropertyToUnclippedMaterial( false );
-        }
-    }
-
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void * data)
-    {
-        ::visuVTKAdaptor::TriangularMesh::sptr service;
-
-        if (m_service.expired())
-        {
-            this->Stop();
-            this->Delete();
-            return ;
-        }
-
-        if (eventId == vtkCommand::ModifiedEvent)
-        {
-            service = m_service.lock();
-
-            this->Clear();
-
-            vtkPlane *plane = NULL;
-            for (  m_planeCollectionSrc->InitTraversal();
-                    (plane = m_planeCollectionSrc->GetNextItem());
-                )
-            {
-                vtkPlane *newPlane = vtkPlane::New();
-                m_planeCallbacks.push_back(PlaneShifterCallback::New(plane, newPlane, m_factor));
-
-                vtkPlaneCollection *newCollection = vtkPlaneCollection::New();
-                newCollection->AddItem(newPlane);
-
-
-                ::fwRenderVTK::IVtkAdaptorService::sptr meshService =
-                    ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-                            service->getObject(),
-                            "::visuVTKAdaptor::TriangularMesh" );
-
-                ::visuVTKAdaptor::TriangularMesh::sptr meshAdaptor = TriangularMesh::dynamicCast(meshService);
-
-                meshAdaptor->setRenderService ( service->getRenderService()  );
-                meshAdaptor->setRenderId      ( service->getRenderId()       );
-                meshAdaptor->setPickerId      ( service->getPickerId()       );
-                meshAdaptor->setMapperInput   ( service->getMapperInput()    );
-                meshAdaptor->setSharpEdgeAngle( service->getSharpEdgeAngle() );
-                meshAdaptor->setMaterial      ( service->getMaterial()       );
-                meshAdaptor->setAutoRender( service->getAutoRender() );
-
-                meshAdaptor->setVtkClippingPlanes( newCollection );
-
-                meshAdaptor->start();
-                meshAdaptor->updateVisibility ( service->getVisibility()     );
-
-                newPlane->Delete();
-
-                m_planeCollections.push_back(newCollection);
-                m_meshServices.push_back(meshAdaptor);
-            }
-
-            bool hasItems = !m_meshServices.empty();
-            service->setActorPropertyToUnclippedMaterial( hasItems );
-        }
-        else if ( eventId == vtkCommand::UserEvent )
-        {
-            BOOST_FOREACH( ::visuVTKAdaptor::TriangularMesh::wptr adaptor, m_meshServices )
-            {
-                if (!adaptor.expired())
-                {
-                    adaptor.lock()->updateVisibility(*(bool*)data);
-                }
-            }
-        }
-    }
-
-    protected:
-
-        ::visuVTKAdaptor::TriangularMesh::wptr m_service;
-
-        vtkPlaneCollection *m_planeCollectionSrc;
-        ::fwData::TriangularMesh::sptr m_mesh;
-
-        std::vector< ::visuVTKAdaptor::TriangularMesh::wptr > m_meshServices;
-
-        std::vector< PlaneShifterCallback* > m_planeCallbacks;
-        std::vector< vtkPlaneCollection* >   m_planeCollections;
-
-        double    m_factor;
-};
-
-}
-
-//------------------------------------------------------------------------------
-
-TriangularMesh::TriangularMesh() throw()
-{
-    m_material               = ::fwData::Material::New();
-    m_unclippedPartMaterial  = ::fwData::Material::New();
-    m_unclippedPartMaterial->ambient()->setRGBA("#aaaaff44");
-
-    m_clippingPlanesId  = "";
-    m_sharpEdgeAngle    = 180;
-
-    m_showClippedPart   = false;
-    m_clippingPlanes    = 0;
-    m_actor             = 0;
-    m_normals           = vtkPolyDataNormals::New();
-
-    m_manageMapperInput = true;
-    m_mapperInput       = 0;
-    m_polyData          = 0;
-    m_mapper            = vtkPolyDataMapper::New();
-    m_pipelineInput     = m_mapper;
-
-    m_computeNormals     = true;
-    m_computeNormalsAtUpdate = true;
-
-    m_autoResetCamera   = true;
-
-    m_planeCollectionShifterCallback = 0;
-    m_servicesStarterCallback        = 0;
-
-    m_transform = vtkTransform::New();
-
-    //addNewHandledEvent (::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED );
-    //addNewHandledEvent (::fwComEd::TriangularMeshMsg::NEW_MESH );
-    //addNewHandledEvent (::fwComEd::TriangularMeshMsg::VERTEX_MODIFIED );
-}
-
-//------------------------------------------------------------------------------
-
-TriangularMesh::~TriangularMesh() throw()
-{
-    m_clippingPlanes = 0;
-
-    m_mapper->Delete();
-    m_mapper = 0;
-
-    m_normals->Delete();
-    m_normals = 0;
-
-    m_transform->Delete();
-    m_transform = 0;
-
-    if(m_actor)
-    {
-        m_actor->Delete();
-        m_actor = 0;
-    }
-
-    if (m_polyData)
-    {
-        m_polyData->Delete();
-        m_polyData = 0;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::configuring() throw(fwTools::Failed)
-{
-    assert(m_configuration->getName() == "config");
-
-    std::string color = m_configuration->getAttributeValue("color");
-    std::string unclippedColor = m_configuration->getAttributeValue("unclippedcolor");
-
-    m_material->ambient()->setRGBA(color.empty() ? "#ffffffff" : color );
-
-    m_unclippedPartMaterial->ambient()->setRGBA(unclippedColor.empty() ? "#aaaaff44" : unclippedColor );
-
-    if (m_configuration->hasAttribute("autoresetcamera") )
-    {
-        std::string autoresetcamera = m_configuration->getAttributeValue("autoresetcamera");
-        m_autoResetCamera = (autoresetcamera == "yes");
-    }
-
-    this->setPickerId    ( m_configuration->getAttributeValue ( "picker"    ) );
-    this->setRenderId    ( m_configuration->getAttributeValue ( "renderer"  ) );
-    this->setTransformId ( m_configuration->getAttributeValue ( "transform" ) );
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::doUpdate() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    ::fwData::TriangularMesh::sptr triangularMesh = this->getObject < ::fwData::TriangularMesh >();
-    this->updateTriangularMesh( triangularMesh );
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::doReceive( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    ::fwComEd::MaterialMsg::csptr materialMsg = ::fwComEd::MaterialMsg::dynamicConstCast(msg);
-    ::fwComEd::TriangularMeshMsg::csptr meshMsg = ::fwComEd::TriangularMeshMsg::dynamicConstCast(msg);
-
-    if( materialMsg && materialMsg->hasEvent(::fwComEd::MaterialMsg::MATERIAL_IS_MODIFIED) )
-    {
-        this->updateOptionsMode();
-    }
-
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::TriangularMeshMsg::NEW_MESH) )
-    {
-        ::fwData::TriangularMesh::sptr triangularMesh = this->getObject < ::fwData::TriangularMesh >();
-        this->updateTriangularMesh( triangularMesh );
-    }
-
-    if( meshMsg && meshMsg->hasEvent(::fwComEd::TriangularMeshMsg::VERTEX_MODIFIED) )
-    {
-       ::fwData::TriangularMesh::sptr mesh = this->getObject < ::fwData::TriangularMesh >();
-       SLM_ASSERT("m_polyData not instanced", m_polyData);
-
-       ::fwVtkIO::updatePolyDataPoints(m_polyData, mesh);
-
-       this->setVtkPipelineModified();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::doStart() throw(fwTools::Failed)
-{
-    this->buildPipeline();
-    m_transformService.lock()->start();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::doStop() throw(fwTools::Failed)
-{
-    m_transformService.lock()->stop();
-    ::fwServices::OSR::unregisterService(m_transformService.lock());
-
-    this->removeAllPropFromRenderer();
-    if (this->getPicker())
-    {
-        this->removeFromPicker(m_actor);
-    }
-
-    removeNormalsService();
-    removePlaneCollectionShifterCommand();
-    removeServicesStarterCommand();
-
-    this->unregisterServices();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::doSwap() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    m_transformService.lock()->stop();
-    ::fwServices::OSR::unregisterService(m_transformService.lock());
-
-
-    ::fwRenderVTK::IVtkAdaptorService::sptr materialService = m_materialService.lock();
-    ::fwRenderVTK::IVtkAdaptorService::sptr unclippedPartMaterialService = m_unclippedPartMaterialService.lock();
-
-    this->setServiceOnMaterial(materialService, m_material);
-    this->setServiceOnMaterial(unclippedPartMaterialService , m_unclippedPartMaterial);
-
-    m_materialService              = materialService;
-    m_unclippedPartMaterialService = unclippedPartMaterialService;
-
-    ::fwData::TriangularMesh::sptr triangularMesh = this->getObject < ::fwData::TriangularMesh >();
-
-    this->createTransformService();
-    m_transformService.lock()->start();
-    this->updateTriangularMesh( triangularMesh );
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::createTransformService()
-{
-
-    ::fwData::TriangularMesh::sptr triangularMesh = this->getObject < ::fwData::TriangularMesh >();
-
-    if(!this->getTransformId().empty())
-    {
-        m_transform->Concatenate(this->getTransform());
-    }
-
-    ::fwData::TransformationMatrix3D::sptr fieldTransform;
-    fieldTransform = triangularMesh->setDefaultField("TransformMatrix", ::fwData::TransformationMatrix3D::New());
-
-    vtkTransform *vtkFieldTransform = vtkTransform::New();
-    vtkFieldTransform->Identity();
-    m_transformService = ::visuVTKAdaptor::Transform::dynamicCast(
-        ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-                fieldTransform,
-                "::visuVTKAdaptor::Transform" ));
-    assert(m_transformService.lock());
-    ::visuVTKAdaptor::Transform::sptr transformService = m_transformService.lock();
-
-
-    transformService->setRenderService ( this->getRenderService()  );
-    transformService->setRenderId      ( this->getRenderId()       );
-    transformService->setAutoRender    ( this->getAutoRender()     );
-
-    transformService->setTransform(vtkFieldTransform);
-    m_transform->Concatenate(vtkFieldTransform);
-    vtkFieldTransform->Delete();
-
-
-    m_actor->SetUserTransform(m_transform);
-
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Material::sptr TriangularMesh::getMaterial()
-{
-    return m_material;
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Material::sptr TriangularMesh::getUnclippedMaterial()
-{
-    return m_unclippedPartMaterial;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setActorPropertyToUnclippedMaterial(bool opt)
-{
-    ::visuVTKAdaptor::Material::sptr mat;
-
-    if (opt)
-    {
-        assert(!m_unclippedPartMaterialService.expired());
-        mat = ::visuVTKAdaptor::Material::dynamicCast(
-                m_unclippedPartMaterialService.lock()
-                );
-    }
-    else
-    {
-        assert(!m_materialService.expired());
-        mat = ::visuVTKAdaptor::Material::dynamicCast(
-                m_materialService.lock()
-                );
-    }
-
-    SLM_ASSERT("Invalid Material Adaptor", mat);
-
-    m_actor->SetProperty( mat->getVtkProperty() );
-    this->setVtkPipelineModified();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setShowClippedPart(bool show)
-{
-    m_showClippedPart = show;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setClippingPlanesId(::fwRenderVTK::VtkRenderService::VtkObjectIdType id)
-{
-    m_clippingPlanesId = id;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setSharpEdgeAngle(double angle)
-{
-    m_sharpEdgeAngle = angle;
-}
-
-//------------------------------------------------------------------------------
-
-double TriangularMesh::getSharpEdgeAngle()
-{
-    return m_sharpEdgeAngle;
-}
-
-//------------------------------------------------------------------------------
-
-vtkAlgorithmOutput *TriangularMesh::getMapperInput()
-{
-    return m_mapperInput;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setServiceOnMaterial(::fwRenderVTK::IVtkAdaptorService::sptr &srv, ::fwData::Material::sptr material)
-{
-
-    if (! srv)
-    {
-        srv = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService > (
-            material, "::visuVTKAdaptor::Material"
-            );
-        SLM_ASSERT("srv not instanced", srv);
-
-        srv->setRenderService(this->getRenderService());
-        srv->setAutoRender( this->getAutoRender() );
-        srv->start();
-        srv->update();
-        this->registerService(srv);
-    }
-    else if (srv->getObject< ::fwData::Material >() != material)
-    {
-        srv->swap(material);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setMaterial(::fwData::Material::sptr material)
-{
-    m_material = material;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setUnclippedPartMaterial(::fwData::Material::sptr material)
-{
-    m_unclippedPartMaterial = material;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setMapperInput(vtkAlgorithmOutput *input)
-{
-    if (input)
-    {
-        m_mapperInput = input;
-        m_manageMapperInput = false;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::updateOptionsMode()
-{
-    if (m_material->getOptionsMode() == ::fwData::Material::MODE_NORMALS)
-    {
-        createNormalsService();
-    }
-    else
-    {
-        removeNormalsService();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::createNormalsService()
-{
-    ::fwData::TriangularMesh::sptr TriangularMesh = this->getObject < ::fwData::TriangularMesh >();
-
-
-    if(m_mapperInput)
-    {
-        ::fwRenderVTK::IVtkAdaptorService::sptr service =
-            ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >(
-                    TriangularMesh,
-                    "::visuVTKAdaptor::Normals"
-                    );
-        SLM_ASSERT("service not instanced", service);
-
-        service->setRenderService( this->getRenderService() );
-        service->setRenderId     ( this->getRenderId()      );
-        service->setPickerId     ( this->getPickerId()      );
-        service->setAutoRender   ( this->getAutoRender()    );
-        ::visuVTKAdaptor::Normals::dynamicCast(service)->setMapperInput( m_mapperInput );
-        service->start();
-
-
-        m_normalsService = service;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::removeNormalsService()
-{
-    if ( !m_normalsService.expired() )
-    {
-        m_normalsService.lock()->stop();
-        ::fwServices::OSR::unregisterService(m_normalsService.lock());
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::buildPipeline()
-{
-    m_pipelineInput = m_mapper;
-
-    if ( m_manageMapperInput )
-    {
-        m_normals->ComputePointNormalsOn();
-        m_normals->ComputeCellNormalsOff();
-        m_normals->ConsistencyOn();
-        m_normals->SplittingOff();
-        m_normals->SetFeatureAngle( m_sharpEdgeAngle );
-
-        if (m_computeNormals)
-        {
-           m_mapperInput   = m_normals->GetOutputPort();
-           m_pipelineInput = m_normals;
-        }
-    }
-
-    ::fwData::TriangularMesh::sptr triangularMesh = this->getObject < ::fwData::TriangularMesh >();
-
-    if (!m_clippingPlanesId.empty())
-    {
-        vtkObject          *o      = this->getVtkObject(m_clippingPlanesId);
-        vtkPlaneCollection *planes = vtkPlaneCollection::SafeDownCast(o);
-        this->setVtkClippingPlanes( planes );
-    }
-
-    ::fwRenderVTK::IVtkAdaptorService::sptr materialService;
-    ::fwRenderVTK::IVtkAdaptorService::sptr unclippedPartMaterialService;
-
-    this->setServiceOnMaterial(materialService, m_material);
-    this->setServiceOnMaterial(unclippedPartMaterialService , m_unclippedPartMaterial);
-
-    m_materialService              = materialService;
-    m_unclippedPartMaterialService = unclippedPartMaterialService;
-
-    if (!m_actor)
-    {
-        m_actor = this->newActor();
-        this->createTransformService();
-
-        this->addToRenderer(m_actor);
-        if (this->getPicker())
-        {
-            this->addToPicker(m_actor);
-        }
-    }
-
-    if ( m_manageMapperInput )
-    {
-        this->updateMaterial( m_material );
-        this->updateTriangularMesh( triangularMesh );
-        this->updateMapper();
-
-        this->updateOptionsMode();
-    }
-
-    setActorPropertyToUnclippedMaterial(false);
-
-    removeServicesStarterCommand();
-
-    if( m_clippingPlanes && m_showClippedPart )
-    {
-        createServicesStarterCommand();
-    }
-    this->setVtkPipelineModified();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::updateTriangularMesh( ::fwData::TriangularMesh::sptr mesh )
-{
-    if(m_manageMapperInput)
-    {
-        if (m_polyData)
-        {
-            m_polyData->Delete();
-            m_polyData = 0;
-        }
-
-        m_polyData = ::fwVtkIO::toVTKMesh(mesh);
-
-        if (m_computeNormalsAtUpdate)
-        {
-            m_normals->SetInput( m_polyData );
-            m_normals->Update();
-            m_polyData->DeepCopy(m_normals->GetOutput());
-        }
-
-        this->updateMapper();
-
-        if (m_autoResetCamera)
-        {
-            this->getRenderer()->ResetCamera();
-        }
-    }
-    this->setVtkPipelineModified();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::updateMapper()
-{
-    vtkPolyDataMapper  *mapper = 0;
-    vtkPolyDataAlgorithm *algo = 0;
-
-    SLM_ASSERT("Bad vtkPolyData", m_polyData);
-
-    if( (algo = vtkPolyDataAlgorithm::SafeDownCast(m_pipelineInput)) )
-    {
-        algo->SetInput( m_polyData );
-        SLM_ASSERT ("missing mapper input", m_mapperInput);
-        m_mapper->SetInputConnection(m_mapperInput);
-    }
-    else if ( (mapper = vtkPolyDataMapper::SafeDownCast(m_pipelineInput)) )
-    {
-        SLM_ASSERT ("mapper input should be 0", m_mapperInput == 0 );
-        mapper->SetInput( m_polyData );
-    }
-
-    SLM_ASSERT( "Bad pipeline input", algo || mapper);
-}
-
-//------------------------------------------------------------------------------
-
-vtkActor *TriangularMesh::newActor()
-{
-    vtkActor *actor = vtkActor::New();
-
-    m_mapper->SetInputConnection(m_mapperInput);
-
-    if (m_clippingPlanes)
-    {
-        vtkPlaneCollection *newClippingPlanes = vtkPlaneCollection::New();
-
-        removePlaneCollectionShifterCommand();
-
-        m_planeCollectionShifterCallback =
-                TMCommand::PlaneCollectionShifterCallback::New(m_clippingPlanes, newClippingPlanes, 2.);
-
-        m_mapper->SetClippingPlanes(newClippingPlanes);
-        newClippingPlanes->Delete();
-    }
-
-    actor->SetMapper(m_mapper);
-
-    this->setVtkPipelineModified();
-    return actor;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::updateMaterial( ::fwData::Material::sptr material )
-{
-    return ;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::updateVisibility( bool isVisible)
-{
-    if (m_actor)
-    {
-        m_actor->SetVisibility( isVisible );
-    }
-
-    if (m_servicesStarterCallback)
-    {
-        m_servicesStarterCallback->Execute(0, vtkCommand::UserEvent, &isVisible);
-    }
-    this->setVtkPipelineModified();
-}
-
-//------------------------------------------------------------------------------
-
-bool TriangularMesh::getVisibility()
-{
-    bool visible = false;
-    if (m_actor)
-    {
-        visible = m_actor->GetVisibility() == 1;
-    }
-    return visible;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setVtkClippingPlanes(vtkPlaneCollection *planes)
-{
-    m_clippingPlanes = planes;
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::removePlaneCollectionShifterCommand()
-{
-    if (m_planeCollectionShifterCallback)
-    {
-        m_planeCollectionShifterCallback->Stop();
-        m_planeCollectionShifterCallback->Delete();
-        m_planeCollectionShifterCallback = 0;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::createServicesStarterCommand()
-{
-    if(!m_servicesStarterCallback)
-    {
-        ::visuVTKAdaptor::TriangularMesh::sptr srv =
-            ::visuVTKAdaptor::TriangularMesh::dynamicCast(
-                    this->getSptr()
-                    );
-        m_servicesStarterCallback = TMCommand::PlaneCollectionAdaptorStarter::New( srv, m_clippingPlanes, -1. );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::removeServicesStarterCommand()
-{
-    if(m_servicesStarterCallback)
-    {
-        m_servicesStarterCallback->Stop();
-        m_servicesStarterCallback->Delete();
-        m_servicesStarterCallback = 0;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMesh::setAutoResetCamera(bool autoResetCamera)
-{
-    m_autoResetCamera = autoResetCamera;
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace visuVTKAdaptor
-
-
-
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/VectorField.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/VectorField.cpp
index 20e5116..bff0e23 100644
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/VectorField.cpp
+++ b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/VectorField.cpp
@@ -1,17 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-
-#include <fwServices/macros.hpp>
+#include "visuVTKAdaptor/VectorField.hpp"
 
 #include <fwData/Boolean.hpp>
 #include <fwData/Color.hpp>
@@ -19,8 +12,15 @@
 #include <fwData/String.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwVtkIO/vtk.hpp>
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp>
+
+#include <fwServices/macros.hpp>
+
 #include <fwVtkIO/helper/TransferFunction.hpp>
+#include <fwVtkIO/vtk.hpp>
 
 #include <vtkActor.h>
 #include <vtkArrowSource.h>
@@ -33,12 +33,8 @@
 #include <vtkPointData.h>
 #include <vtkPolyDataMapper.h>
 
-#include <fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp>
-
-#include "visuVTKAdaptor/VectorField.hpp"
-
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::VectorField, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::VectorField, ::fwData::Image );
 
 namespace visuVTKAdaptor
 {
@@ -48,13 +44,7 @@ namespace visuVTKAdaptor
 
 VectorField::VectorField() throw()
 {
-    m_imageData  = vtkImageData::New();
-
-
-    // Manage events
-    //addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER                     );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::MODIFIED                   );
-    //addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE                  );
+    m_imageData = vtkImageData::New();
 }
 
 //------------------------------------------------------------------------------
@@ -91,7 +81,7 @@ void VectorField::doSwap() throw(fwTools::Failed)
 void VectorField::doUpdate() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
 
     if (imageIsValid && image->getNumberOfComponents() == 3)
     {
@@ -101,39 +91,11 @@ void VectorField::doUpdate() throw(::fwTools::Failed)
     {
         this->destroyPipeline();
     }
-
-}
-
-//------------------------------------------------------------------------------
-
-void VectorField::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
-{
-    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-
-    if (imageIsValid && image->getNumberOfComponents() == 3)
-    {
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            this->doUpdate();
-        }
-
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::MODIFIED ) )
-        {
-            m_imageData->Modified();
-
-            this->setVtkPipelineModified();
-        }
-    }
-    else
-    {
-        this->destroyPipeline();
-    }
 }
 
 //------------------------------------------------------------------------------
 
-void VectorField::configuring() throw(fwTools::Failed)
+void VectorField::doConfigure() throw(fwTools::Failed)
 {
 }
 
@@ -159,7 +121,7 @@ void VectorField::buildPipeline( )
 
     vtkSmartPointer<vtkMaskPoints> ptMask = vtkSmartPointer<vtkMaskPoints>::New();
 
-    ptMask->SetInput(m_imageData);
+    ptMask->SetInputData(m_imageData);
     ptMask->SetOnRatio(1);
     ptMask->RandomModeOn();
 
@@ -200,7 +162,7 @@ void VectorField::buildPipeline( )
     vectorMapper->OrientOn();
     vectorMapper->SetInputConnection(ptMask->GetOutputPort());
 
-    OSLM_WARN("USE_GPU");
+    SLM_WARN("USE_GPU");
 #endif
 
 
@@ -222,5 +184,16 @@ void VectorField::destroyPipeline( )
 
 //------------------------------------------------------------------------------
 
+::fwServices::IService::KeyConnectionsType VectorField::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
 
 } //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Video.cpp b/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Video.cpp
deleted file mode 100644
index b9e0e19..0000000
--- a/Bundles/LeafVisu/visuVTKAdaptor/src/visuVTKAdaptor/Video.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwData/Video.hpp>
-#include <fwData/Reconstruction.hpp>
-#include <fwData/Material.hpp>
-#include <fwData/Boolean.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/VideoMsg.hpp>
-
-
-#include <vtkPlaneSource.h>
-#include <vtkActor.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkRenderer.h>
-#include <vtkImageData.h>
-#include <vtkUnsignedCharArray.h>
-#include <vtkPointData.h>
-#include <vtkMatrix4x4.h>
-#include <vtkTransform.h>
-#include <vtkCamera.h>
-#include <vtkProperty.h>
-#include <vtkgl.h>
-
-#include "visuVTKAdaptor/Video.hpp"
-
-
-
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKAdaptor::Video, ::fwData::Video ) ;
-
-
-namespace visuVTKAdaptor
-{
-
-//------------------------------------------------------------------------------
-
-Video::Video() throw()
-{
-    m_imageData   = vtkImageData::New();
-    m_array = vtkUnsignedCharArray::New();
-    m_texture = vtkTexture::New();
-    bText_init  = false;
-
-    //addNewHandledEvent( ::fwComEd::VideoMsg::VIDEO_IS_REFRESHED );
-}
-
-//------------------------------------------------------------------------------
-
-Video::~Video() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void Video::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
-}
-
-//------------------------------------------------------------------------------
-
-void Video::doStart() throw(fwTools::Failed)
-{
-    vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
-    vtkPlaneSource* plan = vtkPlaneSource ::New();
-    mapper->SetInput(plan->GetOutput());
-    vtkActor* actor = this->getActor();
-    actor->SetMapper(mapper);
-    this->setVtkPipelineModified();
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void Video::doUpdate() throw(fwTools::Failed)
-{
-    ::fwData::Video::sptr video = this->getObject< ::fwData::Video >();
-    if (!video->dataAvailable())
-        return;
-
-    const ::boost::uint8_t * _pImageBuffer = video->getImageBuffer();
-
-    int size[3];
-    size[0] = video->getXSize() ;
-    size[1] = video->getYSize();
-    size[2] = 1;
-
-    m_array->SetNumberOfComponents(video->m_ui8BPP );
-    m_array->SetVoidArray( (unsigned char*)_pImageBuffer, video->getXSize() * video->getYSize() ,1);
-    m_imageData->GetPointData()->SetScalars(m_array) ;
-    m_imageData->SetDimensions(size) ;
-    m_imageData->SetScalarType(VTK_UNSIGNED_CHAR) ;
-    m_imageData->SetSpacing(1.0, 1.0, 1.0 );
-    m_imageData->SetOrigin(0.0, 0.0, 0.0 );
-
-    if(!bText_init)
-    {
-        m_texture->SetInput(m_imageData ) ;
-        this->getActor()->SetScale(size[0], size[1], 1.0);
-        this->getRenderer()->InteractiveOff();
-        this->getRenderer()->GetActiveCamera()->ParallelProjectionOn();
-        this->getRenderer()->ResetCamera();
-
-         //fit the image to the render window
-        this->getRenderer()->GetActiveCamera()->SetParallelScale(size[1] / 2.0);
-
-        this->addToRenderer(this->getActor());
-
-        bText_init  = true;
-
-        vtkProperty *property = this->getActor()->GetProperty();
-        ::boost::filesystem::path pathShader ( std::string(SHAREPATH) + "Bundles/visuVTKAdaptor_" + std::string(VISUVTKADAPTOR_VER) + "/video.xml" );
-        property->LoadMaterial(pathShader.string().c_str());
-        property->SetTexture("texture", m_texture);
-        property->ShadingOn();
-    }
-    m_imageData->Modified();
-    this->setVtkPipelineModified();
-}
-
-//------------------------------------------------------------------------------
-
-void Video::doSwap() throw(fwTools::Failed)
-{
-    this->doUpdate();
-}
-
-//------------------------------------------------------------------------------
-
-void Video::doStop() throw(fwTools::Failed)
-{
-    this->unregisterServices();
-}
-
-//------------------------------------------------------------------------------
-
-void Video::doReceive( ::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    ::fwData::Video::sptr video = this->getObject< ::fwData::Video >();
-
-    ::fwComEd::VideoMsg::csptr videoMsg = ::fwComEd::VideoMsg::dynamicConstCast( msg );
-    if ( videoMsg &&
-            ( videoMsg->hasEvent( ::fwComEd::VideoMsg::VIDEO_IS_REFRESHED ) /* ||  videoMsg->hasEvent( ::fwComEd::VideoMsg::VIDEO_IS_INITIALIZED ) */ ) )
-    {
-        doUpdate();
-    }
-}
-
-
-
-} //namespace visuVTKAdaptor
diff --git a/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt b/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt
index b53b405..ddd0393 100644
--- a/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt
+++ b/Bundles/LeafVisu/visuVTKQt/CMakeLists.txt
@@ -1,33 +1,24 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwGui
-    fwRenderVTK
-    fwRuntime
-)
-
-fwReq(
-    visu
-    visuVTK
-)
 
 add_definitions("-DQT_NO_KEYWORDS")
 
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui QtSql QtNetWork QtOpenGL REQUIRED)
-include(${QT_USE_FILE})
-find_package(VTK REQUIRED)
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+find_package(VTK COMPONENTS vtkViewsQt REQUIRED NO_MODULE)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS} 
-    ${QT_INCLUDE_DIR}
-    )
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
+
 fwLink(
-    ${Boost_LIBRARIES} 
-    ${QT_LIBRARIES}
-    QVTK
-    )
+    ${Qt5Core_LIBRARIES} 
+    ${Qt5Gui_LIBRARIES} 
+    ${Qt5Widgets_LIBRARIES}
+    ${VTK_LIBRARIES}
+    
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
 
diff --git a/Bundles/LeafVisu/visuVTKQt/COPYING b/Bundles/LeafVisu/visuVTKQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/visuVTKQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/visuVTKQt/COPYING.LESSER b/Bundles/LeafVisu/visuVTKQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/visuVTKQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/visuVTKQt/Properties.cmake b/Bundles/LeafVisu/visuVTKQt/Properties.cmake
index 04891ad..1499dda 100644
--- a/Bundles/LeafVisu/visuVTKQt/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTKQt/Properties.cmake
@@ -2,6 +2,17 @@
 set( NAME visuVTKQt )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCore fwData fwGui fwGuiQt fwRenderVTK fwRuntime fwServices fwTools )
-set( REQUIREMENTS visu visuVTK )
-
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwGui
+    fwGuiQt
+    fwRenderVTK
+    fwRuntime
+    fwServices
+    fwTools
+    fwCom
+)
+set( REQUIREMENTS
+    visuVTK
+)
diff --git a/Bundles/LeafVisu/visuVTKQt/bin/build.options b/Bundles/LeafVisu/visuVTKQt/bin/build.options
deleted file mode 100755
index 5998716..0000000
--- a/Bundles/LeafVisu/visuVTKQt/bin/build.options
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-USE = [
-    'boost',
-    'QVtk'
-    ]
-LIB = [
-    'fwRuntime_0-3',
-    'fwTools_0-1',
-    'fwCore_0-1',
-    'fwGuiQt_0-1',
-    'fwRenderVTK_0-1',
-    ]
-
-REQUIREMENTS = [
-                'visuVTK_0-1',
-                ]
-TYPE = 'bundle'
-VERSION = '0-1'
-
diff --git a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp
index 67073ce..a7f526a 100644
--- a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp
+++ b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef UIVISUVTKQTNAMESPACE_HPP_
-#define UIVISUVTKQTNAMESPACE_HPP_
+#ifndef __VISUVTKQT_NAMESPACE_HPP__
+#define __VISUVTKQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace visuVTKQt contains a vtk Renderer window interactor manager using Qt.
  * @namespace   visuVTKQt
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace visuVTKQt
 {
 }
-#endif /* UIVISUVTKQTNAMESPACE_HPP_ */
+#endif /* __VISUVTKQT_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Plugin.hpp b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Plugin.hpp
index 09682e2..381d28f 100644
--- a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Plugin.hpp
+++ b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKQT_PLUGIN_HPP_
-#define _VISUVTKQT_PLUGIN_HPP_
+#ifndef __VISUVTKQT_PLUGIN_HPP__
+#define __VISUVTKQT_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -16,7 +16,7 @@ namespace visuVTKQt
 /**
  * @brief   This class is started when the bundles is loaded.
  * @class   Plugin
- * 
+ *
  * @date    2009.
  */
 struct VISUVTKQT_CLASS_API Plugin : public ::fwRuntime::Plugin
@@ -36,4 +36,4 @@ struct VISUVTKQT_CLASS_API Plugin : public ::fwRuntime::Plugin
 
 } // namespace visuVTKQt
 
-#endif //_VISUVTKQT_PLUGIN_HPP_
+#endif //__VISUVTKQT_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/VtkRenderWindowInteractorManager.hpp b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/VtkRenderWindowInteractorManager.hpp
index c7066f5..dbaf355 100644
--- a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/VtkRenderWindowInteractorManager.hpp
+++ b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/VtkRenderWindowInteractorManager.hpp
@@ -1,21 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKQT_VTKRENDERWINDOWINTERACTORMANAGER_HPP_
-#define _VISUVTKQT_VTKRENDERWINDOWINTERACTORMANAGER_HPP_
+#ifndef __VISUVTKQT_VTKRENDERWINDOWINTERACTORMANAGER_HPP__
+#define __VISUVTKQT_VTKRENDERWINDOWINTERACTORMANAGER_HPP__
 
-#include <string>
+#include "visuVTKQt/config.hpp"
 
 #include <fwCore/base.hpp>
 
+#include <fwGui/container/fwContainer.hpp>
+
 #include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
 
-#include <fwGui/container/fwContainer.hpp>
+#include <string>
 
-#include "visuVTKQt/config.hpp"
 
 class vtkRenderWindowInteractor;
 
@@ -38,8 +39,6 @@ namespace visuVTKQt
  * @brief   Defines a class to manage vtkRenderWindowInteractor in a window.
  * @class   VtkRenderWindowInteractorManager
  *
- * @date    2009-2010.
- *
  */
 class VISUVTKQT_CLASS_API VtkRenderWindowInteractorManager : public ::fwRenderVTK::IVtkRenderWindowInteractorManager
 {
@@ -74,6 +73,6 @@ private:
 
 } // namespace visuVTKQt
 
-#endif // _VISUVTKQT_VTKRENDERWINDOWINTERACTORMANAGER_HPP_
+#endif // __VISUVTKQT_VTKRENDERWINDOWINTERACTORMANAGER_HPP__
 
 
diff --git a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/config.hpp b/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/config.hpp
deleted file mode 100644
index 7b50a1b..0000000
--- a/Bundles/LeafVisu/visuVTKQt/include/visuVTKQt/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VISUVTKQT_CONFIG_HPP_
-#define VISUVTKQT_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VISUVTKQT_EXPORTS
-    #define VISUVTKQT_API __declspec(dllexport)
-    #else
-    #define VISUVTKQT_API __declspec(dllimport)
-    #endif
-
-    #define VISUVTKQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VISUVTKQT_EXPORTS
-    #define VISUVTKQT_API __attribute__ ((visibility("default")))
-    #define VISUVTKQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VISUVTKQT_API __attribute__ ((visibility("hidden")))
-    #define VISUVTKQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VISUVTKQT_API
-    #define VISUVTKQT_CLASS_API
-
-#endif
-
-#endif //VISUVTKQT_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/visuVTKQt/rc/plugin.xml b/Bundles/LeafVisu/visuVTKQt/rc/plugin.xml
index c43ad4e..e94a7e9 100644
--- a/Bundles/LeafVisu/visuVTKQt/rc/plugin.xml
+++ b/Bundles/LeafVisu/visuVTKQt/rc/plugin.xml
@@ -1,13 +1,9 @@
-<plugin id="visuVTKQt" class="visuVTKQt::Plugin" >
-    
+<plugin id="visuVTKQt" class="visuVTKQt::Plugin"  version="@DASH_VERSION@" >
+
     <library name="visuVTKQt" />
 
     <requirement id="dataReg"/>
     <requirement id="servicesReg"/>
-    <requirement id="visu" />
     <requirement id="visuVTK" />
 
 </plugin>
-
-
-
diff --git a/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/Plugin.cpp b/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/Plugin.cpp
index fa11f51..edded12 100644
--- a/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/Plugin.cpp
+++ b/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/Plugin.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "visuVTKQt/Plugin.hpp"
+
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
 #include <fwCore/spyLog.hpp>
 
-#include "visuVTKQt/Plugin.hpp"
-
 namespace visuVTKQt
 {
 
@@ -20,7 +20,8 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //-----------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/VtkRenderWindowInteractorManager.cpp b/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/VtkRenderWindowInteractorManager.cpp
index babe745..5037660 100644
--- a/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/VtkRenderWindowInteractorManager.cpp
+++ b/Bundles/LeafVisu/visuVTKQt/src/visuVTKQt/VtkRenderWindowInteractorManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,6 +10,8 @@
 
 #include <QVTKWidget.h>
 
+#include <QMimeData>
+
 #include <vtkRenderer.h>
 #include <vtkRenderWindow.h>
 #include <vtkRenderWindowInteractor.h>
@@ -18,54 +20,285 @@
 
 #include <fwTools/UUID.hpp>
 
-#include <fwServices/IEditionService.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
+#include <fwRenderVTK/SRender.hpp>
 #include <fwRenderVTK/registry/macros.hpp>
 #include <fwGuiQt/container/QtContainer.hpp>
 
 #include "visuVTKQt/VtkRenderWindowInteractorManager.hpp"
 
+#ifdef __APPLE__
+// XXX Retinhack
+// hack to fix vtk render windows on mac retina screen, until fixed
+// by vtk
+#include <QWindow>
+#include <QScreen>
+#include <QVTKInteractor.h>
+#include <vtkCocoaRenderWindow.h>
+#include <vtkObjectFactory.h>
+#include <vtkSmartPointer.h>
+#include <vtkInteractorStyleTrackballCamera.h>
+#include <QMetaEnum>
+
+class RetinHackRWI : public QVTKInteractor
+{
+protected:
+    RetinHackRWI() : QVTKInteractor()
+    {
+    }
+
+public:
+
+    static RetinHackRWI *New();
+
+    virtual int *GetLastEventPosition ()
+    {
+        auto LastPos = this->QVTKInteractor::GetLastEventPosition();
+        const auto r = this->Ratio;
+
+        LastRetinaPos[0] = LastPos[0]*r;
+        LastRetinaPos[1] = LastPos[1]*r;
+
+        return LastRetinaPos;
+    }
+
+    virtual void GetLastEventPosition (int &x, int &y)
+    {
+        auto LastPos = this->QVTKInteractor::GetLastEventPosition();
+        const auto r = this->Ratio;
+
+        x = LastPos[0]*r;
+        y = LastPos[1]*r;
+    }
+
+    virtual void GetLastEventPosition (int xy[2])
+    {
+        auto LastPos = this->QVTKInteractor::GetLastEventPosition();
+        const auto r = this->Ratio;
+
+        xy[0] = LastPos[0]*r;
+        xy[1] = LastPos[1]*r;
+    }
+
+    virtual int *GetEventPosition ()
+    {
+        auto Pos     = this->QVTKInteractor::GetEventPosition();
+        const auto r = this->Ratio;
+
+        RetinaPos[0] = Pos[0]*r;
+        RetinaPos[1] = Pos[1]*r;
+
+        return RetinaPos;
+    }
+
+    virtual void GetEventPosition (int &x, int &y)
+    {
+        auto Pos     = this->QVTKInteractor::GetEventPosition();
+        const auto r = this->Ratio;
+
+        x = Pos[0]*r;
+        y = Pos[1]*r;
+    }
+
+    virtual void GetEventPosition (int xy[2])
+    {
+        auto Pos     = this->QVTKInteractor::GetEventPosition();
+        const auto r = this->Ratio;
+
+        xy[0] = Pos[0]*r;
+        xy[1] = Pos[1]*r;
+    }
+
+    void SetDevicePixelRatio(int r)
+    {
+        this->Ratio = r;
+    }
+
+private:
+    int RetinaPos[2];
+    int LastRetinaPos[2];
+
+    int Ratio = 2;
+
+};
+
+vtkStandardNewMacro(RetinHackRWI);
+
+
+class RetinhackRenderWindow : public vtkCocoaRenderWindow
+{
+protected:
+    RetinhackRenderWindow() : vtkCocoaRenderWindow()
+    {
+    }
+
+public:
+
+    static RetinhackRenderWindow *New();
+
+    int *GetSize()
+    {
+        this->vtkCocoaRenderWindow::GetSize();
+
+        this->RetinaSize[0] = this->Size[0] * this->Ratio;
+        this->RetinaSize[1] = this->Size[1] * this->Ratio;
+
+        return this->RetinaSize;
+    }
+
+    int *GetScreenSize()
+    {
+        this->vtkCocoaRenderWindow::GetScreenSize();
+
+        this->RetinaSize[0] = this->Size[0] * this->Ratio;
+        this->RetinaSize[1] = this->Size[1] * this->Ratio;
+
+        return this->RetinaSize;
+    }
+
+    vtkRenderWindowInteractor *MakeRenderWindowInteractor()
+    {
+        this->Interactor = RetinHackRWI::New();
+        this->Interactor->SetRenderWindow(this);
+        return this->Interactor;
+    }
+
+    void SetDevicePixelRatio(int r)
+    {
+        this->Ratio = r;
+        static_cast< RetinHackRWI* >( this->Interactor )->SetDevicePixelRatio(r);
+    }
+
+private:
+    int RetinaSize[2] = {600,600};
+    int Ratio         = 2;
+};
+
+vtkStandardNewMacro(RetinhackRenderWindow);
+
+
+class RetinhackVtkWidget : public QVTKWidget
+{
+public:
+    RetinhackVtkWidget(QWidget* container = nullptr) : QVTKWidget(container)
+    {
+        vtkSmartPointer< vtkInteractorStyleTrackballCamera > interactorStyle
+            = vtkInteractorStyleTrackballCamera::New();
+        vtkSmartPointer< RetinhackRenderWindow > renderWindow = RetinhackRenderWindow::New();
+        vtkSmartPointer< RetinHackRWI > rwi                   = RetinHackRWI::New();
+
+        rwi->Initialize();
+        rwi->SetInteractorStyle(interactorStyle);
+        rwi->SetRenderWindow(renderWindow);
+        renderWindow->SetInteractor(rwi);
+
+        this->SetRenderWindow(renderWindow);
+
+    }
+
+    bool event(QEvent* e)
+    {
+        auto ratio = this->devicePixelRatio();
+        if (m_ratio != ratio )
+        {
+            SLM_ASSERT( "Render window shall be a RetinhackRenderWindow",
+                        dynamic_cast< RetinhackRenderWindow* >( this->mRenWin ));
+            static_cast< RetinhackRenderWindow* >( this->mRenWin )->SetDevicePixelRatio(ratio);
+            m_ratio = ratio;
+        }
+
+        if(e->type() == QEvent::ShowToParent)
+        {
+            QObject::disconnect(m_renderConnection);
+            QPointer<RetinhackVtkWidget> widget(this);
+            m_renderConnection = QObject::connect(this->window()->windowHandle(), &QWindow::screenChanged, [ = ] ()
+            {
+                if(!widget)
+                {
+                    return;
+                }
+                auto ratio = widget->devicePixelRatio();
+                SLM_ASSERT( "Render window shall be a RetinhackRenderWindow",
+                            dynamic_cast< RetinhackRenderWindow* >( widget->mRenWin ));
+                static_cast< RetinhackRenderWindow* >( widget->mRenWin )->SetDevicePixelRatio(ratio);
+                widget->mRenWin->Render();
+            });
+        }
+
+        return QVTKWidget::event(e);
+    }
+
+    virtual void SetRenderWindow(vtkRenderWindow* rw)
+    {
+        QVTKWidget::SetRenderWindow(rw);
+
+        auto ratio = this->devicePixelRatio();
+
+        SLM_ASSERT( "Render window shall be a RetinhackRenderWindow",
+                    dynamic_cast< RetinhackRenderWindow* >( this->mRenWin ));
+        static_cast< RetinhackRenderWindow* >( this->mRenWin )->SetDevicePixelRatio(ratio);
+    }
+
+
+protected:
+    int m_ratio = -1;
+
+    QMetaObject::Connection m_renderConnection;
+};
+
+#define QVTKWidget RetinhackVtkWidget
+
+#endif //__APPLE__
+
+
+
 class DropFilter : public QObject
- {
- public:
-     DropFilter(::fwServices::IService::sptr service): m_service(service){};
- protected:
-     bool eventFilter(QObject *obj, QEvent *event);
-
- private:
-     ::fwServices::IService::wptr m_service;
- };
-
- bool DropFilter::eventFilter(QObject *obj, QEvent *event)
- {
-     if( event->type() == QEvent::DragEnter)
-     {
-         QDragEnterEvent *dragEvent=dynamic_cast< QDragEnterEvent* >(event);
-         if (dragEvent->mimeData()->hasFormat("text/plain"))
-         {
-             QString data = dragEvent->mimeData()->text();
-             dragEvent->acceptProposedAction();
-         }
-     }
-     else if (event->type() == QEvent::Drop )
-     {
-         QDropEvent* dropEvent = dynamic_cast< QDropEvent* >(event);
-         QString data = dropEvent->mimeData()->text();
-         ::fwServices::ObjectMsg::sptr message = ::fwServices::ObjectMsg::New();
-         message->addEvent("DROPPED_UUID", ::fwData::String::New(data.toStdString()));
-         ::fwServices::IService::sptr service = m_service.lock();
-         ::fwServices::IEditionService::notify( service, service->getObject< ::fwData::Object >(), message );
-     } else {
-         // standard event processing
-         return QObject::eventFilter(obj, event);
-     }
-     return true;
- }
+{
+public:
+    DropFilter(::fwServices::IService::sptr service) : m_service(service)
+    {
+    }
+protected:
+    bool eventFilter(QObject *obj, QEvent *event);
+
+private:
+    ::fwServices::IService::wptr m_service;
+};
+
+bool DropFilter::eventFilter(QObject *obj, QEvent *event)
+{
+    if( event->type() == QEvent::DragEnter)
+    {
+        QDragEnterEvent *dragEvent = dynamic_cast< QDragEnterEvent* >(event);
+        if (dragEvent->mimeData()->hasFormat("text/plain"))
+        {
+            QString data = dragEvent->mimeData()->text();
+            dragEvent->acceptProposedAction();
+        }
+    }
+    else if (event->type() == QEvent::Drop )
+    {
+        QDropEvent* dropEvent = dynamic_cast< QDropEvent* >(event);
+        QString data          = dropEvent->mimeData()->text();
+        ::fwServices::IService::sptr service = m_service.lock();
+        auto sig = service->signal< ::fwRenderVTK::SRender::DroppedSignalType >(
+            ::fwRenderVTK::SRender::s_DROPPED_SIG);
+        sig->asyncEmit( data.toStdString() );
+    }
+    else
+    {
+        // standard event processing
+        return QObject::eventFilter(obj, event);
+    }
+    return true;
+}
 
 //-----------------------------------------------------------------------------
 
- fwRenderVTKRegisterMacro( ::visuVTKQt::VtkRenderWindowInteractorManager,
-                           ::fwRenderVTK::IVtkRenderWindowInteractorManager::REGISTRY_KEY );
+fwRenderVTKRegisterMacro( ::visuVTKQt::VtkRenderWindowInteractorManager,
+                          ::fwRenderVTK::IVtkRenderWindowInteractorManager::REGISTRY_KEY );
 
 //-----------------------------------------------------------------------------
 
@@ -75,22 +308,24 @@ namespace visuVTKQt
 //-----------------------------------------------------------------------------
 
 VtkRenderWindowInteractorManager::VtkRenderWindowInteractorManager(
-        ::fwRenderVTK::IVtkRenderWindowInteractorManager::Key key )
-{}
+    ::fwRenderVTK::IVtkRenderWindowInteractorManager::Key key )
+{
+}
 
 //-----------------------------------------------------------------------------
 
 VtkRenderWindowInteractorManager::~VtkRenderWindowInteractorManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void VtkRenderWindowInteractorManager::installInteractor( ::fwGui::container::fwContainer::sptr _parent )
 {
-    SLM_ASSERT("Invalid parent.", _parent ) ;
-    m_parentContainer =  ::fwGuiQt::container::QtContainer::dynamicCast( _parent );
+    SLM_ASSERT("Invalid parent.", _parent );
+    m_parentContainer = ::fwGuiQt::container::QtContainer::dynamicCast( _parent );
     QWidget* container = m_parentContainer->getQtContainer();
-    SLM_ASSERT("The container is not a qtContainer.", container ) ;
+    SLM_ASSERT("The container is not a qtContainer.", container );
 
     m_qVTKWidget = new QVTKWidget(container);
 
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/CMakeLists.txt b/Bundles/LeafVisu/visuVTKVRAdaptor/CMakeLists.txt
index 02a33a5..fb06ac0 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/CMakeLists.txt
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/CMakeLists.txt
@@ -1,21 +1,39 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwData
-    fwRenderVTK
-    fwRuntime
-)
 
+# Just look one core module to get the version number
+find_package(VTK COMPONENTS
+        vtkCommonCore
+        REQUIRED
+        NO_MODULE)
+        
+if(${VTK_MAJOR_VERSION} STREQUAL "7")
+    find_package(VTK COMPONENTS
+        vtkInteractionWidgets
+        vtkRenderingVolumeOpenGL2
+        vtkRenderingCore
+        vtkIOImage
+        vtkCommonDataModel
+        vtkCommonCore
+    REQUIRED
+    NO_MODULE)
+else()
+    find_package(VTK COMPONENTS
+        vtkInteractionWidgets
+        vtkRenderingVolumeOpenGL
+        vtkRenderingCore
+        vtkIOImage
+        vtkCommonDataModel
+        vtkCommonCore
+    REQUIRED
+    NO_MODULE)
+endif()
 
-find_package(Boost REQUIRED)
-find_package(VTK COMPONENTS  REQUIRED)
+include(${VTK_USE_FILE})
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS}
-    )
+)
+
 fwLink(
-    ${Boost_LIBRARIES}
-    vtkHybrid
-    vtkVolumeRendering
-    )
+    ${VTK_LIBRARIES}
+)
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake b/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake
index b67103b..6cb615a 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME visuVTKVRAdaptor )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwData fwRenderVTK fwRuntime fwServices fwVtkIO )
+set( DEPENDENCIES fwCom fwData fwRenderVTK fwRuntime fwServices fwVtkIO fwTools fwCore)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/bin/build.options b/Bundles/LeafVisu/visuVTKVRAdaptor/bin/build.options
deleted file mode 100644
index d0ce79c..0000000
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/bin/build.options
+++ /dev/null
@@ -1,20 +0,0 @@
-# -*- coding: utf-8 -*-
-
-TYPE = 'bundle'
-VERSION = '0-1'
-USE = ['vtkHybrid','vtkVolumeRendering', 'boost']
-LIB = [
-    'fwComEd_0-1',
-    'fwCore_0-1',
-    'fwData_0-1',
-    'fwMath_0-1',
-    'fwRenderVTK_0-1',
-    'fwRender_0-1',
-    'fwRuntime_0-3',
-    'fwServices_0-1',
-    'fwTools_0-1',
-    'fwVtkIO_0-1',
-    ]
-
-BUNDLES = ['visuVTKAdaptor']
-
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Plugin.hpp b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Plugin.hpp
index 507532a..83594dd 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Plugin.hpp
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VISUVTKVRADAPTOR_PLUGIN_HPP_
-#define _VISUVTKVRADAPTOR_PLUGIN_HPP_
+#ifndef __VISUVTKVRADAPTOR_PLUGIN_HPP__
+#define __VISUVTKVRADAPTOR_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -17,7 +17,7 @@ namespace visuVTKVRAdaptor
 /**
  * @brief   This class is started when the bundles is loaded.
  * @class   Plugin
- * 
+ *
  * @date    2009.
  */
 struct Plugin : public ::fwRuntime::Plugin
@@ -26,15 +26,15 @@ struct Plugin : public ::fwRuntime::Plugin
      * @brief   destructor
      */
     ~Plugin() throw();
-    
+
     // Overrides
     void start() throw(::fwRuntime::RuntimeException);
 
-    // Overrides    
+    // Overrides
     void stop() throw();
-    
+
 };
 
 } // namespace visuVTK
 
-#endif // _VISUVTKVRADAPTOR_PLUGIN_HPP_
+#endif // __VISUVTKVRADAPTOR_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Volume.hpp b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Volume.hpp
index 54d3b71..36a5c73 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Volume.hpp
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/Volume.hpp
@@ -1,52 +1,101 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
 
-#ifndef _VISUVTKVRADAPTOR_VOLUME_HPP_
-#define _VISUVTKVRADAPTOR_VOLUME_HPP_
+#ifndef __VISUVTKVRADAPTOR_VOLUME_HPP__
+#define __VISUVTKVRADAPTOR_VOLUME_HPP__
+
+#include "visuVTKVRAdaptor/config.hpp"
 
 #include <fwData/Image.hpp>
 
-#include <fwRenderVTK/VtkRenderService.hpp>
-#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#include <fwDataTools/helper/MedicalImageAdaptor.hpp>
 
-#include <fwComEd/helper/MedicalImageAdaptor.hpp>
+#include <fwRenderVTK/IVtkAdaptorService.hpp>
+#include <fwRenderVTK/SRender.hpp>
 
-#include "visuVTKVRAdaptor/config.hpp"
 
-class vtkLookupTable;
-class vtkImageMapToColors;
-class vtkImageData;
 class vtkAbstractVolumeMapper;
-class vtkVolumeProperty;
-class vtkVolume;
-class vtkCommand;
-
 class vtkBoxWidget2;
+class vtkColorTransferFunction;
+class vtkCommand;
+class vtkPiecewiseFunction;
+class vtkPlaneCollection;
+class vtkVolume;
+class vtkVolumeProperty;
 
 namespace visuVTKVRAdaptor
 {
 
-class VISUVTKVRADAPTOR_CLASS_API Volume : public ::fwComEd::helper::MedicalImageAdaptor, public ::fwRenderVTK::IVtkAdaptorService
+/**
+ * @brief This adaptor displays a volume image.
+ *
+ * @section Slots Slots
+ * - \b resetBoxWidget() : reset the clipping box widget around the volume.
+ * - \b activateBoxClipping(bool) : show/hide clipping box.
+ * - \b show(bool) : show/hide the volume.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+     <adaptor id="VolumeScene3D" class="::visuVTKVRAdaptor::Volume" objectId="imageKey">
+         <config renderer="default" clippingplanes="clippingPlanesId" autoresetcamera="yes|no" croppingBox="yes|no"
+                 reductionFactor="0.5" cropBoxTransform="cropTransform" transform="trf" selectedTFKey="TFKey"
+                 tfSelectionFwID="tfComposite"/>
+     </adaptor>
+   @endcode
+ * @subsection Input Input
+ * - \b imageKey [::fwData::Image]: image to display.
+ * @subsection In-Out In-Out
+ * - \b tfSelectionFwID (optional) [::fwData::Composite]: composite containing the current transfer function.
+ * @subsection Configuration Configuration
+ * - \b renderer : ID of renderer the adaptor must use
+ * - \b clippingplanes (optional) : id of VTK object for clipping planes
+ * - \b autoresetcamera (optional, default: yes) : defines if the renderer must reset camera when updating image
+ * - \b croppingBox (optional, default: no) : defines if the cropping box must be shown
+ * - \b reductionFactor (optional, [0-1]) : factor to resample the original image.
+ * - \b cropBoxTransform (optional) : vtkTransform applied to the cropping box.
+ * - \b transform (optional) : vtkTransform applied to the volume.
+ * - \b selectedTFKey (optional) : key of the transfer funtion in the tf composite.
+ */
+class VISUVTKVRADAPTOR_CLASS_API Volume : public ::fwDataTools::helper::MedicalImageAdaptor,
+                                          public ::fwRenderVTK::IVtkAdaptorService
 {
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (Volume)(::fwRenderVTK::IVtkAdaptorService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (Volume)(::fwRenderVTK::IVtkAdaptorService) );
 
     VISUVTKVRADAPTOR_API Volume() throw();
 
     VISUVTKVRADAPTOR_API virtual ~Volume() throw();
 
-    VISUVTKVRADAPTOR_API void setClippingPlanesId( ::fwRenderVTK::VtkRenderService::VtkObjectIdType id );
+    VISUVTKVRADAPTOR_API void setClippingPlanesId( ::fwRenderVTK::SRender::VtkObjectIdType id );
+
+    VISUVTKVRADAPTOR_API void setVtkClippingPlanes( vtkPlaneCollection* planes );
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_UPDATE_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_UPDATE_SLOT
+     */
+    VISUVTKVRADAPTOR_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /// Apply the cropping on volume rendering
+    VISUVTKVRADAPTOR_API void crop();
 
-    VISUVTKVRADAPTOR_API void setVtkClippingPlanes( vtkPlaneCollection *planes );
+    /// Update associated transform adaptor with CropBox transform
+    VISUVTKVRADAPTOR_API void updateTransform();
 
-protected :
+    /// Update CropBox transform with transform adaptor
+    VISUVTKVRADAPTOR_API void updateCropBoxTransform();
+
+protected:
 
     VISUVTKVRADAPTOR_API void doStart() throw(fwTools::Failed);
 
@@ -54,63 +103,67 @@ protected :
 
     VISUVTKVRADAPTOR_API void doUpdate() throw(fwTools::Failed);
 
-    VISUVTKVRADAPTOR_API void doReceive( ::fwServices::ObjectMsg::csptr msg ) throw (fwTools::Failed);
-
     /**
      * @brief Configures the service
-     *
-     * Configuration example :
-     @verbatim
-     <adaptor id="VolumeScene3D" class="::visuVTKVRAdaptor::Volume" objectId="imageKey">
-         <config renderer="default" clippingplanes="clippingPlanesId" autoresetcamera="yes|no" croppingBox="yes|no"/>
-     </adaptor>
-     @endverbatim
-     * 
-     * \b renderer : ID of renderer the adaptor must use
-     * \b clippingplanes : id of VTK object for clipping planes
-     * \b autoresetcamera : (not mandatory, default is yes) set if the renderer must reset camera when updating image
-     * \b croppingBox : (not mandatory, default is no) set if the cropping box must be shown
-     *
      * @throw fwTools::Failed
      */
-    VISUVTKVRADAPTOR_API void configuring() throw(fwTools::Failed);
+    VISUVTKVRADAPTOR_API void doConfigure() throw(fwTools::Failed);
 
     VISUVTKVRADAPTOR_API void doSwap() throw(fwTools::Failed);
 
 
+    /// Called when transfer function points are modified.
+    VISUVTKVRADAPTOR_API virtual void updatingTFPoints();
+
+    /// Called when transfer function windowing is modified.
+    VISUVTKVRADAPTOR_API virtual void updatingTFWindowing(double window, double level);
+
+    /// Slot: reset the clipping box widget around the volume
     void resetBoxWidget();
 
+    /// Slot: show/hide clipping box
     void activateBoxClipping( bool activate );
 
+    /// Slot: show/hide the volume
+    void show( bool isVisible );
+
     void buildPipeline();
 
     void updateImage( ::fwData::Image::sptr image  );
 
     void updateVolumeTransferFunction( ::fwData::Image::sptr image );
 
-    vtkPlaneCollection *m_clippingPlanes;
+    vtkPlaneCollection* m_clippingPlanes;
 
-    ::fwRenderVTK::VtkRenderService::VtkObjectIdType m_clippingPlanesId;
+    ::fwRenderVTK::SRender::VtkObjectIdType m_clippingPlanesId;
 
-    vtkAbstractVolumeMapper  * m_volumeMapper;
-    vtkVolumeProperty        * m_volumeProperty;
-    vtkVolume                * m_volume;
+    vtkAbstractVolumeMapper* m_volumeMapper;
+    vtkVolumeProperty* m_volumeProperty;
+    vtkVolume* m_volume;
 
-    vtkPiecewiseFunction     * m_opacityTransferFunction;
-    vtkColorTransferFunction * m_colorTransferFunction;
+    vtkPiecewiseFunction* m_opacityTransferFunction;
+    vtkColorTransferFunction* m_colorTransferFunction;
 
-    vtkCommand               * m_abortCommand;
+    vtkCommand* m_abortCommand;
 
-    vtkBoxWidget2 * m_boxWidget;
-    vtkCommand    * m_croppingCommand;
-    bool m_bClippingBoxIsActivate;
+    vtkBoxWidget2* m_boxWidget;
+    vtkCommand* m_croppingCommand;
+    vtkCommand* m_transformCommand;
 
-    /// Croping box default state
+    /// Cropping box default state
     bool m_croppingBoxDefaultState;
 
+    /// XML ID for the transformation matrix affected only to the cropBox.
+    std::string m_cropBoxTransformID;
+
+    /// Transformation matrix affected only to the cropBox.
+    vtkTransform* m_cropBoxTransform;
+
 private:
 
-    bool   m_autoResetCamera;
+    bool m_autoResetCamera;
+
+    double m_reductionFactor;
 };
 
 
@@ -118,4 +171,4 @@ private:
 
 } //namespace visuVTKVRAdaptor
 
-#endif // _VISUVTKVRADAPTOR_NEGATOONESLICE_HPP_
+#endif // __VISUVTKVRADAPTOR_VOLUME_HPP__
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/config.hpp b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/config.hpp
deleted file mode 100644
index f584e9d..0000000
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISUVTKVRADAPTOR_CONFIG_HPP_
-#define _VISUVTKVRADAPTOR_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VISUVTKVRADAPTOR_EXPORTS
-    #define VISUVTKVRADAPTOR_API __declspec(dllexport)
-    #else
-    #define VISUVTKVRADAPTOR_API __declspec(dllimport)
-    #endif
-
-    #define VISUVTKVRADAPTOR_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VISUVTKVRADAPTOR_EXPORTS
-    #define VISUVTKVRADAPTOR_API __attribute__ ((visibility("default")))
-    #define VISUVTKVRADAPTOR_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VISUVTKVRADAPTOR_API __attribute__ ((visibility("hidden")))
-    #define VISUVTKVRADAPTOR_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VISUVTKVRADAPTOR_API
-    #define VISUVTKVRADAPTOR_CLASS_API
-
-#endif
-
-#endif // _VISUVTKVRADAPTOR_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/namespace.hpp b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/namespace.hpp
new file mode 100644
index 0000000..1a77e5e
--- /dev/null
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/include/visuVTKVRAdaptor/namespace.hpp
@@ -0,0 +1,19 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VISUVTKVRADAPTOR_NAMESPACE_HPP__
+#define __VISUVTKVRADAPTOR_NAMESPACE_HPP__
+
+
+/**
+ * @brief Volume rendering adaptors
+ **/
+namespace visuVTKVRAdaptor
+{
+} //namespace visuVTKVRAdaptor
+
+
+#endif //__VISUVTKVRADAPTOR_NAMESPACE_HPP__
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/rc/plugin.xml b/Bundles/LeafVisu/visuVTKVRAdaptor/rc/plugin.xml
index 7216e80..850e02d 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/rc/plugin.xml
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/rc/plugin.xml
@@ -1,10 +1,9 @@
-<plugin id="visuVTKVRAdaptor" class="visuVTKAdaptor::Plugin">
+<plugin id="visuVTKVRAdaptor" class="visuVTKAdaptor::Plugin" version="@DASH_VERSION@" >
 
     <library name="visuVTKVRAdaptor" />
 
     <requirement id="dataReg" />
     <requirement id="servicesReg" />
-    <requirement id="visu" />
     <requirement id="visuVTK" />
 
     <extension implements="::fwServices::registry::ServiceFactory">
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Plugin.cpp b/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Plugin.cpp
index 6600a8f..6edec4e 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Plugin.cpp
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,12 +18,15 @@ static GenericExecutableFactoryRegistrar<Plugin> registrar("visuVTKVRAdaptor::Pl
 
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace operators
diff --git a/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp b/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp
index c28600b..3618713 100644
--- a/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp
+++ b/Bundles/LeafVisu/visuVTKVRAdaptor/src/visuVTKVRAdaptor/Volume.cpp
@@ -1,81 +1,81 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/TransferFunctionMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
+#include "visuVTKVRAdaptor/Volume.hpp"
 
-#include <fwServices/macros.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwData/TransferFunction.hpp>
-#include <fwData/Color.hpp>
+
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwServices/macros.hpp>
 
 #include <fwVtkIO/vtk.hpp>
 
+#include <vtkBoundingBox.h>
+#include <vtkBoxRepresentation.h>
+#include <vtkBoxWidget2.h>
+#include <vtkColorTransferFunction.h>
 #include <vtkCommand.h>
+#include <vtkImageImport.h>
+#include <vtkImageResample.h>
+#include <vtkObjectFactory.h>
+#include <vtkPiecewiseFunction.h>
 #include <vtkPlaneCollection.h>
 #include <vtkRenderWindow.h>
 #include <vtkRenderer.h>
-#include <vtkImageImport.h>
-#include <vtkVolumeProperty.h>
-#include <vtkVolume.h>
 #include <vtkSmartVolumeMapper.h>
-#include <vtkBoxWidget2.h>
-#include <vtkBoxRepresentation.h>
-#include <vtkObjectFactory.h>
-#include <vtkPiecewiseFunction.h>
-#include <vtkColorTransferFunction.h>
-
-
-#include "visuVTKVRAdaptor/Volume.hpp"
-
+#include <vtkTransform.h>
+#include <vtkVolume.h>
+#include <vtkVolumeProperty.h>
 
-fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKVRAdaptor::Volume, ::fwData::Image ) ;
+fwServicesRegisterMacro( ::fwRenderVTK::IVtkAdaptorService, ::visuVTKVRAdaptor::Volume, ::fwData::Image );
 
 namespace visuVTKVRAdaptor
 {
 
-class vtkBoxRepresentationHack: public vtkBoxRepresentation
+class TransformCallback : public ::vtkCommand
 {
-    // Hack to disable box rotation, since SetRotationEnable is ineffective...
 public:
 
-    static vtkBoxRepresentationHack *New();
-
-    vtkTypeRevisionMacro(vtkBoxRepresentationHack,vtkWidgetRepresentation);
+    static TransformCallback* New(Volume* adaptor)
+    {
+        TransformCallback* cb = new TransformCallback;
+        cb->m_adaptor = adaptor;
+        return cb;
+    }
 
-    int ComputeInteractionState(int X, int Y, int modify)
+    virtual void Execute( ::vtkObject* caller, unsigned long, void* )
     {
-        return vtkBoxRepresentation::ComputeInteractionState(X,Y,1);
+        m_adaptor->updateCropBoxTransform();
+        m_adaptor->crop();
     }
 
+private:
+    Volume* m_adaptor;
 };
 
-vtkCxxRevisionMacro(vtkBoxRepresentationHack, "$Revision: 1.8 $");
-vtkStandardNewMacro(vtkBoxRepresentationHack);
-
-
+//------------------------------------------------------------------------------
 
 class AbortCallback : public vtkCommand
 {
+public:
 
-public :
-    //--------------------------------------------------------------------------
-    static AbortCallback *New()
-    { return new AbortCallback(); }
-
-    //--------------------------------------------------------------------------
-    AbortCallback( )
-    { }
-
-    //--------------------------------------------------------------------------
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    static AbortCallback* New()
     {
+        return new AbortCallback();
+    }
 
-        vtkRenderWindow *win = vtkRenderWindow::SafeDownCast(caller);
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
+    {
+        vtkRenderWindow* win = vtkRenderWindow::SafeDownCast(caller);
         if ( win )
         {
             if( win->GetEventPending() )
@@ -90,74 +90,60 @@ public :
 
 class CroppingCallback : public vtkCommand
 {
+public:
 
-public :
-    //--------------------------------------------------------------------------
-    static CroppingCallback *New(vtkAbstractMapper *mapper)
+    static CroppingCallback* New(Volume* adaptor)
     {
-
-        CroppingCallback *callback = new CroppingCallback();
-        callback->mapper = vtkVolumeMapper::SafeDownCast(mapper);
+        CroppingCallback* callback = new CroppingCallback();
+        callback->m_adaptor = adaptor;
         return callback;
     }
 
-    //--------------------------------------------------------------------------
-    CroppingCallback( ) : mapper(NULL)
-    { }
-
-    //--------------------------------------------------------------------------
-    virtual void Execute( vtkObject *caller, unsigned long eventId, void *)
+    virtual void Execute( vtkObject* caller, unsigned long eventId, void*)
     {
-
-        vtkBoxWidget2 *widget = vtkBoxWidget2::SafeDownCast( caller );
-        mapper->SetCroppingRegionPlanes( widget->GetRepresentation()->GetBounds() );
+        m_adaptor->crop();
+        m_adaptor->updateTransform();
     }
 
 private:
-    vtkVolumeMapper *mapper;
+    Volume* m_adaptor;
 };
 
+static const ::fwCom::Slots::SlotKeyType s_RESET_BOX_WIDGET_SLOT      = "resetBoxWidget";
+static const ::fwCom::Slots::SlotKeyType s_ACTIVATE_BOX_CLIPPING_SLOT = "activateBoxClipping";
+static const ::fwCom::Slots::SlotKeyType s_SHOW_SLOT                  = "show";
 
 //------------------------------------------------------------------------------
 
 Volume::Volume() throw() :
-    ::fwComEd::helper::MedicalImageAdaptor(),
+    ::fwDataTools::helper::MedicalImageAdaptor(),
     ::fwRenderVTK::IVtkAdaptorService(),
-     m_bClippingBoxIsActivate(false),
-     m_autoResetCamera(true),
-     m_croppingBoxDefaultState(true)
-
+    m_clippingPlanes(nullptr),
+    m_volumeMapper( vtkSmartVolumeMapper::New()),
+    m_volumeProperty(vtkVolumeProperty::New()),
+    m_volume(vtkVolume::New()),
+    m_opacityTransferFunction(vtkPiecewiseFunction::New()),
+    m_colorTransferFunction(vtkColorTransferFunction::New()),
+    m_abortCommand(AbortCallback::New()),
+    m_boxWidget(vtkBoxWidget2::New()),
+    m_croppingCommand(nullptr),
+    m_transformCommand(nullptr),
+    m_croppingBoxDefaultState(true),
+    m_cropBoxTransform(nullptr),
+    m_autoResetCamera(true),
+    m_reductionFactor(1.0)
 {
-    m_clippingPlanesId = "";
-    m_clippingPlanes   = 0;
-
-    m_volume = vtkVolume::New();
-    m_volumeProperty = vtkVolumeProperty::New();
-    m_volumeMapper = vtkSmartVolumeMapper::New();
-
-    m_abortCommand    = AbortCallback::New();
-
-    m_opacityTransferFunction = vtkPiecewiseFunction::New();
-    m_colorTransferFunction = vtkColorTransferFunction::New();
-
-    m_boxWidget = vtkBoxWidget2::New();
     m_boxWidget->KeyPressActivationOff();
     m_boxWidget->SetRotationEnabled(0);
-    vtkBoxRepresentationHack *repr = vtkBoxRepresentationHack::New();
+    vtkBoxRepresentation* repr = vtkBoxRepresentation::New();
     m_boxWidget->SetRepresentation(repr);
     repr->Delete();
 
-    m_croppingCommand = CroppingCallback::New(m_volumeMapper);
-    m_boxWidget->AddObserver(vtkCommand::InteractionEvent, m_croppingCommand);
+    newSlot(s_RESET_BOX_WIDGET_SLOT, &Volume::resetBoxWidget, this);
+    newSlot(s_ACTIVATE_BOX_CLIPPING_SLOT, &Volume::activateBoxClipping, this);
+    newSlot(s_SHOW_SLOT, &Volume::show, this);
 
-    // Manage events
-    this->installTFSelectionEventHandler(this);
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::BUFFER );
-    //this->addNewHandledEvent( ::fwComEd::ImageMsg::NEW_IMAGE );
-    //this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS );
-    //this->addNewHandledEvent( ::fwComEd::TransferFunctionMsg::WINDOWING );
-    //this->addNewHandledEvent( "SHOWHIDE_BOX_WIDGET" );
-    //this->addNewHandledEvent( "RESET_BOX_WIDGET" );
+    this->installTFSlots(this);
 }
 
 //------------------------------------------------------------------------------
@@ -165,37 +151,34 @@ Volume::Volume() throw() :
 Volume::~Volume() throw()
 {
     m_volumeMapper->Delete();
-    m_volumeMapper = NULL;
+    m_volumeMapper = nullptr;
 
     m_volume->Delete();
-    m_volume = NULL;
+    m_volume = nullptr;
 
     m_abortCommand->Delete();
-    m_abortCommand = NULL;
+    m_abortCommand = nullptr;
 
     if (m_clippingPlanes)
     {
         m_clippingPlanes->Delete();
-        m_clippingPlanes = NULL;
+        m_clippingPlanes = nullptr;
     }
 
-    m_boxWidget->RemoveObserver(m_croppingCommand);
     m_boxWidget->Delete();
-    m_boxWidget = NULL;
-    m_croppingCommand->Delete();
-    m_croppingCommand = NULL;
+    m_boxWidget = nullptr;
 }
 
 //------------------------------------------------------------------------------
 
-void Volume::setClippingPlanesId(::fwRenderVTK::VtkRenderService::VtkObjectIdType id)
+void Volume::setClippingPlanesId(::fwRenderVTK::SRender::VtkObjectIdType id)
 {
     m_clippingPlanesId = id;
 }
 
 //------------------------------------------------------------------------------
 
-void Volume::setVtkClippingPlanes(vtkPlaneCollection *planes)
+void Volume::setVtkClippingPlanes(vtkPlaneCollection* planes)
 {
     m_clippingPlanes = planes;
 }
@@ -204,35 +187,62 @@ void Volume::setVtkClippingPlanes(vtkPlaneCollection *planes)
 
 void Volume::doStart() throw(fwTools::Failed)
 {
+    ::fwData::Composite::wptr tfSelection = this->getSafeInOut< ::fwData::Composite>(this->getTFSelectionFwID());
+    this->setTransferFunctionSelection(tfSelection);
+
     this->addToRenderer(m_volume);
 
     this->getInteractor()->GetRenderWindow()->AddObserver("AbortCheckEvent", m_abortCommand);
     this->doUpdate(); //TODO: remove me ?
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
+
+    this->activateBoxClipping( m_croppingBoxDefaultState );
+
+    if(!m_cropBoxTransformID.empty())
+    {
+        m_cropBoxTransform = vtkTransform::SafeDownCast( m_renderService.lock()->getVtkObject(m_cropBoxTransformID));
+    }
 
-    if(!m_croppingBoxDefaultState)
+    if(m_cropBoxTransform)
     {
-        m_bClippingBoxIsActivate = m_croppingBoxDefaultState;
-        this->activateBoxClipping( m_bClippingBoxIsActivate );
+        m_transformCommand = TransformCallback::New(this);
+        m_cropBoxTransform->AddObserver( ::vtkCommand::ModifiedEvent, m_transformCommand );
     }
+
+    m_croppingCommand = CroppingCallback::New(this);
+    m_boxWidget->AddObserver(vtkCommand::InteractionEvent, m_croppingCommand);
+
+
+    m_volume->SetUserTransform(this->getTransform());
 }
 
 //------------------------------------------------------------------------------
 
 void Volume::doStop() throw(fwTools::Failed)
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->removeAllPropFromRenderer();
     this->getInteractor()->GetRenderWindow()->RemoveObserver(m_abortCommand);
+    m_boxWidget->RemoveObserver(m_croppingCommand);
+
+    m_croppingCommand->Delete();
+    m_croppingCommand = nullptr;
+
+    if(m_cropBoxTransform)
+    {
+        m_cropBoxTransform->RemoveObserver( m_transformCommand );
+        m_transformCommand->Delete();
+        m_transformCommand = nullptr;
+    }
 }
 
 //------------------------------------------------------------------------------
 
 void Volume::doSwap() throw(fwTools::Failed)
 {
-    this->removeTFObserver();
+    this->removeTFConnections();
     this->doUpdate();
-    this->installTFObserver( this->getSptr() );
+    this->installTFConnections();
 }
 
 //------------------------------------------------------------------------------
@@ -240,7 +250,7 @@ void Volume::doSwap() throw(fwTools::Failed)
 void Volume::doUpdate() throw(::fwTools::Failed)
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
 
     if (imageIsValid)
     {
@@ -248,53 +258,37 @@ void Volume::doUpdate() throw(::fwTools::Failed)
         this->updateImage(image);
         this->updateVolumeTransferFunction(image);
     }
+    else
+    {
+        this->updateTransferFunction(image);
+    }
 }
 
 //------------------------------------------------------------------------------
 
-void Volume::doReceive(::fwServices::ObjectMsg::csptr msg) throw(::fwTools::Failed)
+void Volume::updatingTFPoints()
 {
     ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( image );
-
-    if (imageIsValid)
-    {
-        if ( msg->hasEvent( ::fwComEd::ImageMsg::BUFFER ) || ( msg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE )) )
-        {
-            this->doUpdate();
-        }
-
-        if (this->upadteTFObserver(msg, this->getSptr()) || msg->hasEvent( ::fwComEd::TransferFunctionMsg::MODIFIED_POINTS ) )
-        {
-            this->updateVolumeTransferFunction(image);
-        }
-
-        if ( msg->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING ) )
-        {
-            this->updateVolumeTransferFunction(image);
-        }
+    this->updateVolumeTransferFunction(image);
+    this->requestRender();
+}
 
-        if ( msg->hasEvent( "SHOWHIDE_BOX_WIDGET" ) )
-        {
-            m_bClippingBoxIsActivate = ! m_bClippingBoxIsActivate;
-            this->activateBoxClipping( m_bClippingBoxIsActivate );
-        }
+//------------------------------------------------------------------------------
 
-        if ( msg->hasEvent( "RESET_BOX_WIDGET" ) )
-        {
-            this->resetBoxWidget();
-        }
-    }
+void Volume::updatingTFWindowing(double window, double level)
+{
+    ::fwData::Image::sptr image = this->getObject< ::fwData::Image >();
+    this->updateVolumeTransferFunction(image);
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
 
-void Volume::configuring() throw(fwTools::Failed)
+void Volume::doConfigure() throw(fwTools::Failed)
 {
     SLM_TRACE_FUNC();
 
     assert(m_configuration->getName() == "config");
-    this->setRenderId( m_configuration->getAttributeValue("renderer") );
     this->setClippingPlanesId( m_configuration->getAttributeValue("clippingplanes") );
 
     if (m_configuration->hasAttribute("autoresetcamera") )
@@ -304,11 +298,23 @@ void Volume::configuring() throw(fwTools::Failed)
     }
     this->parseTFConfig( m_configuration );
 
+    // Show croppingBox
     if(m_configuration->hasAttribute("croppingBox") &&
        m_configuration->getAttributeValue("croppingBox") == "no")
     {
         m_croppingBoxDefaultState = false;
     }
+
+    // Get the boundingBox transformation matrix
+    if(m_configuration->hasAttribute("cropBoxTransform"))
+    {
+        m_cropBoxTransformID = m_configuration->getAttributeValue("cropBoxTransform");
+    }
+
+    if(m_configuration->hasAttribute("reductionFactor"))
+    {
+        m_reductionFactor = std::stod(m_configuration->getAttributeValue("reductionFactor"));
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -317,27 +323,38 @@ void Volume::updateImage( ::fwData::Image::sptr image  )
 {
     this->updateImageInfos(image);
 
-    vtkImageImport *imageImport = vtkImageImport::New();
+    vtkImageImport* imageImport = vtkImageImport::New();
     ::fwVtkIO::configureVTKImageImport( imageImport, image );
 
+
     m_volumeMapper->RemoveAllClippingPlanes();
     if (m_clippingPlanes)
     {
         m_volumeMapper->SetClippingPlanes(m_clippingPlanes);
     }
 
-    //m_volumeMapper->SetInputConnection(shiftScale->GetOutputPort());
-    m_volumeMapper->SetInputConnection(imageImport->GetOutputPort());
+    if ( m_reductionFactor < 1.0 )
+    {
+        vtkImageResample* resample = vtkImageResample::New();
+        resample->SetInputConnection( imageImport->GetOutputPort() );
+        resample->SetAxisMagnificationFactor(0, m_reductionFactor);
+        resample->SetAxisMagnificationFactor(1, m_reductionFactor);
+        resample->SetAxisMagnificationFactor(2, m_reductionFactor);
+        m_volumeMapper->SetInputConnection(resample->GetOutputPort());
+        resample->Delete();
+    }
+    else
+    {
+        m_volumeMapper->SetInputConnection(imageImport->GetOutputPort());
+    }
 
     m_boxWidget->GetRepresentation()->SetPlaceFactor(1.0);
     m_boxWidget->GetRepresentation()->PlaceWidget(m_volumeMapper->GetBounds());
     m_boxWidget->SetInteractor(this->getInteractor());
-    m_boxWidget->On();
+
     vtkVolumeMapper::SafeDownCast(m_volumeMapper)->CroppingOn();
     vtkVolumeMapper::SafeDownCast(m_volumeMapper)->SetCroppingRegionPlanes( m_volumeMapper->GetBounds() );
-    m_bClippingBoxIsActivate = m_croppingBoxDefaultState;
 
-    //shiftScale->Delete();
     imageImport->Delete();
 
     if (m_autoResetCamera)
@@ -352,25 +369,25 @@ void Volume::updateImage( ::fwData::Image::sptr image  )
 
 void Volume::updateVolumeTransferFunction( ::fwData::Image::sptr image )
 {
-    this->updateTransferFunction(image, this->getSptr());
+    this->updateTransferFunction(image);
     ::fwData::TransferFunction::sptr pTF = this->getTransferFunction();
     SLM_ASSERT("TransferFunction null pointer", pTF);
 
     m_colorTransferFunction->RemoveAllPoints();
     m_opacityTransferFunction->RemoveAllPoints();
 
-    ::fwData::TransferFunction::TFValueVectorType values = pTF->getScaledValues();
+    ::fwData::TransferFunction::TFValueVectorType values              = pTF->getScaledValues();
     ::fwData::TransferFunction::TFValueVectorType::iterator valueIter = values.begin();
     if(pTF->getInterpolationMode() == ::fwData::TransferFunction::NEAREST)
     {
         m_colorTransferFunction->AllowDuplicateScalarsOn();
         m_opacityTransferFunction->AllowDuplicateScalarsOn();
 
-        BOOST_FOREACH(const ::fwData::TransferFunction::TFDataType::value_type &tfPoint, pTF->getTFData())
+        for(const ::fwData::TransferFunction::TFDataType::value_type& tfPoint :  pTF->getTFData())
         {
-            const ::fwData::TransferFunction::TFValueType &value = *valueIter;
+            const ::fwData::TransferFunction::TFValueType& value = *valueIter;
             ::fwData::TransferFunction::TFValueType valuePrevious = *valueIter;
-            ::fwData::TransferFunction::TFValueType valueNext = *valueIter;
+            ::fwData::TransferFunction::TFValueType valueNext     = *valueIter;
             if(valueIter != values.begin())
             {
                 valuePrevious = *(valueIter - 1);
@@ -380,31 +397,30 @@ void Volume::updateVolumeTransferFunction( ::fwData::Image::sptr image )
                 valueNext = *(valueIter + 1);
             }
 
-            const ::fwData::TransferFunction::TFColor &color = tfPoint.second;
+            const ::fwData::TransferFunction::TFColor& color = tfPoint.second;
 
-            m_colorTransferFunction->AddRGBPoint(valuePrevious + (value - valuePrevious) / 2. , color.r, color.g, color.b );
+            m_colorTransferFunction->AddRGBPoint(valuePrevious + (value - valuePrevious) / 2., color.r, color.g,
+                                                 color.b );
             m_colorTransferFunction->AddRGBPoint(value + (valueNext - value) / 2., color.r, color.g, color.b );
 
-            m_opacityTransferFunction->AddPoint(valuePrevious + (value -valuePrevious) / 2. , color.a );
+            m_opacityTransferFunction->AddPoint(valuePrevious + (value -valuePrevious) / 2., color.a );
             m_opacityTransferFunction->AddPoint(value + (valueNext - value) / 2., color.a );
 
             ++valueIter;
-         }
+        }
     }
     else
     {
-        BOOST_FOREACH(const ::fwData::TransferFunction::TFDataType::value_type &tfPoint, pTF->getTFData())
+        for(const ::fwData::TransferFunction::TFDataType::value_type& tfPoint :  pTF->getTFData())
         {
-            const ::fwData::TransferFunction::TFValueType &value = *(valueIter++);
-            const ::fwData::TransferFunction::TFColor &color = tfPoint.second;
+            const ::fwData::TransferFunction::TFValueType& value = *(valueIter++);
+            const ::fwData::TransferFunction::TFColor& color     = tfPoint.second;
 
-            m_colorTransferFunction->AddRGBPoint( value , color.r, color.g, color.b );
-            m_opacityTransferFunction->AddPoint(  value , color.a );
+            m_colorTransferFunction->AddRGBPoint( value, color.r, color.g, color.b );
+            m_opacityTransferFunction->AddPoint(  value, color.a );
         }
     }
 
-    ::fwData::TransferFunction::TFValuePairType minMax = pTF->getMinMaxTFValues();
-
     m_colorTransferFunction->SetClamping(!pTF->getIsClamped());
     m_opacityTransferFunction->SetClamping(!pTF->getIsClamped());
 
@@ -417,8 +433,8 @@ void Volume::buildPipeline( )
 {
     if (!m_clippingPlanesId.empty())
     {
-        vtkObject          *o      = this->getVtkObject(m_clippingPlanesId);
-        vtkPlaneCollection *planes = vtkPlaneCollection::SafeDownCast(o);
+        vtkObject* o               = this->getVtkObject(m_clippingPlanesId);
+        vtkPlaneCollection* planes = vtkPlaneCollection::SafeDownCast(o);
         this->setVtkClippingPlanes( planes );
     }
 
@@ -451,6 +467,7 @@ void Volume::resetBoxWidget()
         this->getRenderer()->ResetCamera();
     }
     this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
@@ -466,6 +483,80 @@ void Volume::activateBoxClipping( bool activate )
         m_boxWidget->Off();
     }
     this->setVtkPipelineModified();
+    this->requestRender();
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType Volume::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+void Volume::crop()
+{
+    vtkVolumeMapper* mapper      = vtkVolumeMapper::SafeDownCast(m_volumeMapper);
+    double* croppingRegionPlanes = m_boxWidget->GetRepresentation()->GetBounds();
+
+    vtkBoundingBox boundingBoxCrop(croppingRegionPlanes);
+    vtkBoundingBox boundingBoxVolume(mapper->GetBounds());
+
+    if(boundingBoxCrop.Intersects(boundingBoxVolume))
+    {
+        mapper->SetCroppingRegionPlanes( croppingRegionPlanes );
+    }
+    else
+    {
+        mapper->SetCroppingRegionPlanes(0.,0.,0.,0.,0.,0.);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Volume::updateTransform()
+{
+    if(m_cropBoxTransform)
+    {
+        vtkBoxRepresentation* repr = vtkBoxRepresentation::SafeDownCast( m_boxWidget->GetRepresentation() );
+        if( repr )
+        {
+            m_cropBoxTransform->RemoveObserver(m_transformCommand);
+            repr->GetTransform(m_cropBoxTransform);
+            m_cropBoxTransform->Modified();
+            m_cropBoxTransform->AddObserver(vtkCommand::ModifiedEvent, m_transformCommand);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Volume::updateCropBoxTransform()
+{
+    if(m_cropBoxTransform)
+    {
+        vtkBoxRepresentation* repr = vtkBoxRepresentation::SafeDownCast( m_boxWidget->GetRepresentation() );
+        if( repr )
+        {
+            m_boxWidget->RemoveObserver(m_croppingCommand);
+            repr->SetTransform(m_cropBoxTransform);
+            m_boxWidget->AddObserver(vtkCommand::InteractionEvent, m_croppingCommand);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Volume::show(bool isVisible)
+{
+    m_volume->SetVisibility(isVisible);
+    this->setVtkPipelineModified();
+    this->requestRender();
 }
 
 //------------------------------------------------------------------------------
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/CMakeLists.txt b/Bundles/LeafVisu/vtkCompositeMesh/CMakeLists.txt
index ac8a3ef..d461eff 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/CMakeLists.txt
+++ b/Bundles/LeafVisu/vtkCompositeMesh/CMakeLists.txt
@@ -1,20 +1,10 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwData
-    fwRender
-    fwRenderVTK
-    fwRuntime
-    fwServices
-)
 
-find_package(Boost REQUIRED)
-find_package(VTK COMPONENTS  REQUIRED)
+find_package(VTK COMPONENTS vtkInteractionWidgets REQUIRED NO_MODULE)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS}
-    )
+)
 fwLink(
-    ${Boost_LIBRARIES}
-    vtkWidgets
-    )
+    ${VTK_LIBRARIES}    
+)
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/COPYING b/Bundles/LeafVisu/vtkCompositeMesh/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/vtkCompositeMesh/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/COPYING.LESSER b/Bundles/LeafVisu/vtkCompositeMesh/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/vtkCompositeMesh/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/Properties.cmake b/Bundles/LeafVisu/vtkCompositeMesh/Properties.cmake
index e4be3e3..1f999fe 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/Properties.cmake
+++ b/Bundles/LeafVisu/vtkCompositeMesh/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME vtkCompositeMesh )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCom fwComEd fwData fwRender fwRenderVTK fwRuntime fwServices fwVtkIO )
+set( DEPENDENCIES fwCom fwData fwRender fwRenderVTK fwRuntime fwServices fwVtkIO fwGui fwTools fwCore)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/bin/build.options b/Bundles/LeafVisu/vtkCompositeMesh/bin/build.options
deleted file mode 100644
index 1125706..0000000
--- a/Bundles/LeafVisu/vtkCompositeMesh/bin/build.options
+++ /dev/null
@@ -1,16 +0,0 @@
-TYPE     = 'bundle'
-USE      = ['vtkWidgets','boost']
-LIB      = [
-           'fwCore_0-1',
-           'fwRuntime_0-3',
-           'fwData_0-1',
-           'fwServices_0-1',
-           'fwComEd_0-1',
-           'fwVtkIO_0-1',
-           'fwTools_0-1',
-           'fwDataIO_0-2',
-           'fwRender_0-1',
-           'fwRenderVTK_0-1',
-           ]
-BUNDLES  = ['gui_0-1']
-VERSION  = '0-1'
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Namespace.hpp b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Namespace.hpp
index 9ed3ab8..3b5e5b4 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Namespace.hpp
+++ b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef VTKCOMPOSITEMESHNAMESPACE_HPP_
-#define VTKCOMPOSITEMESHNAMESPACE_HPP_
+#ifndef __VTKCOMPOSITEMESH_NAMESPACE_HPP__
+#define __VTKCOMPOSITEMESH_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace vtkCompositeMesh contains a service which renders several meshes and store it on Composite.
  * @namespace   vtkCompositeMesh
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace vtkCompositeMesh
 {
 }
-#endif /* VTKCOMPOSITEMESHNAMESPACE_HPP_ */
+#endif /* __VTKCOMPOSITEMESH_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Plugin.hpp b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Plugin.hpp
index b4edd97..97829e9 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Plugin.hpp
+++ b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/Plugin.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKCOMPOSITEMESH_PLUGIN_HPP_
-#define _VTKCOMPOSITEMESH_PLUGIN_HPP_
+#ifndef __VTKCOMPOSITEMESH_PLUGIN_HPP__
+#define __VTKCOMPOSITEMESH_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
 /**
  * @brief   Namespace vtkCompositeMesh.
  * @namespace   vtkCompositeMesh
- * 
+ *
  * @date    2009.
  *
  *  The namespace vtkCompositeMesh contains a COMPOSITE mesh renderer using vtk.
@@ -26,24 +26,24 @@ public:
      * @brief   Destructor
      */
     ~Plugin() throw();
-    
+
     /**
-    * @brief Start method.
-    *
-    * @exception ::fwRuntime::RuntimeException.
-    * This method is used by runtime to initialize the bundle.
-    */
+     * @brief Start method.
+     *
+     * @exception ::fwRuntime::RuntimeException.
+     * This method is used by runtime to initialize the bundle.
+     */
     void start() throw(::fwRuntime::RuntimeException);
 
     /**
-    * @brief Stop method.
-    *
-    * This method is used by runtime to stop the bundle.
-    */
+     * @brief Stop method.
+     *
+     * This method is used by runtime to stop the bundle.
+     */
     void stop() throw();
-    
+
 };
 
 } // namespace vtkCompositeMesh
 
-#endif //_VTKCOMPOSITEMESH_PLUGIN_HPP_
+#endif //__VTKCOMPOSITEMESH_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/RendererService.hpp b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/RendererService.hpp
index 4259309..fc8a429 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/RendererService.hpp
+++ b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/RendererService.hpp
@@ -1,25 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef VTKCOMPOSITEMESH_RENDERER_SERVICE_HPP_
-#define VTKCOMPOSITEMESH_RENDERER_SERVICE_HPP_
+#ifndef __VTKCOMPOSITEMESH_RENDERERSERVICE_HPP__
+#define __VTKCOMPOSITEMESH_RENDERERSERVICE_HPP__
 
-#include <boost/shared_array.hpp>
-
-#include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
+#include "vtkCompositeMesh/config.hpp"
 
-#include <vtkCommand.h>
+#include <fwData/Image.hpp>
 
 #include <fwRender/IRender.hpp>
+#include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
 
-#include <fwData/Image.hpp>
 
-#include "vtkCompositeMesh/config.hpp"
+#include <vtkCommand.h>
+
+#include <boost/shared_array.hpp>
 
 
 // VTK
@@ -30,99 +29,94 @@ namespace vtkCompositeMesh
 {
 
 /**
- * @brief   Renderer service.
+ * @brief   Service rendering ::fwData::Mesh contained in a ::fwData::Composite using VTK.
  * @class   RendererService
- * 
- * @date    2009.
- *
- * Service rendering ::fwData::Mesh contained in a ::fwData::Composite using VTK.
- *
+
  * Service registered details : \n
  * fwServicesRegisterMacro( ::fwRender::IRender , ::vtkCompositeMesh::RendererService , ::fwData::Composite)
  */
 class VTKCOMPOSITEMESH_CLASS_API RendererService : public ::fwRender::IRender
 {
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (RendererService)(::fwRender::IRender) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (RendererService)(::fwRender::IRender) );
 
     typedef ::boost::shared_array< double > SharedArray;
 
     VTKCOMPOSITEMESH_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CAM_POSITION_SLOT;
-    typedef ::fwCom::Slot<void(SharedArray, SharedArray, SharedArray)> UpdateCamPositionSlotType;
+    typedef ::fwCom::Slot<void (SharedArray, SharedArray, SharedArray)> UpdateCamPositionSlotType;
+
+    /// Slot to update pipeline
+    VTKCOMPOSITEMESH_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_PIPELINE_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdatePipelineSlotType;
 
     VTKCOMPOSITEMESH_API static const ::fwCom::Signals::SignalKeyType s_CAM_UPDATED_SIG;
     typedef ::fwCom::Signal< void (SharedArray, SharedArray, SharedArray) > CamUpdatedSignalType;
 
 
     /**
-    * @brief    Constructor
-    */
-    VTKCOMPOSITEMESH_API RendererService() throw() ;
+     * @brief    Constructor
+     */
+    VTKCOMPOSITEMESH_API RendererService() throw();
 
     /**
-    * @brief    Destructor
-    */
-    VTKCOMPOSITEMESH_API virtual ~RendererService() throw() ;
+     * @brief    Destructor
+     */
+    VTKCOMPOSITEMESH_API virtual ~RendererService() throw();
 
     /// This method is used to notify that the VTK camera position is updated.
     void notifyCamPositionUpdated();
 
-    /// Slot to receive new camera information (position, focal, viewUp). Update camera with new information.
-    VTKCOMPOSITEMESH_API virtual void updateCamPosition(SharedArray positionValue,
-                                                        SharedArray focalValue,
-                                                        SharedArray viewUpValue);
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect mesh::s_MODIFIED_SIG to this::s_UPDATE_PIPELINE_SLOT
+     */
+    VTKCOMPOSITEMESH_API virtual KeyConnectionsType getObjSrvConnections() const;
 
-protected :
+protected:
 
     /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    * Initialize VTK renderer and create qt containers
-    */
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     * Initialize VTK renderer and create qt containers
+     */
     VTKCOMPOSITEMESH_API virtual void starting() throw(fwTools::Failed);
 
 
     /**
-    * @brief Configuring method.
-    *
-    * XML configuration sample:
-    * @verbatim
-    <service impl="::vtkCompositeMesh::RendererService" type="::fwRender::IRender" autoConnect="yes" />
-    @endverbatim
-    * This method is used to configure the service. Initialize qt container.
-    */
+     * @brief Configuring method.
+     *
+     * XML configuration sample:
+     * @code{.xml}
+       <service impl="::vtkCompositeMesh::RendererService" type="::fwRender::IRender" autoConnect="yes" />
+       @endcode
+     * This method is used to configure the service. Initialize qt container.
+     */
     VTKCOMPOSITEMESH_API virtual void configuring() throw(::fwTools::Failed);
 
 
     /**
-    * @brief Stopping method.
-    *
-    * Destroy VTK renderer and containers
-    */
+     * @brief Stopping method.
+     *
+     * Destroy VTK renderer and containers
+     */
     VTKCOMPOSITEMESH_API virtual void stopping() throw(fwTools::Failed);
 
     /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * Make a render if necessary
-    */
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * Make a render if necessary
+     */
     VTKCOMPOSITEMESH_API virtual void updating() throw(fwTools::Failed);
 
-    /**
-    * @brief Receiving method (react on data modifications).
-    * @param[in] _msg ::fwServices::ObjectMsg::csptr.
-    *
-    * This method is used to update the vtk pipeline when the mesh is modified.
-    */
-    VTKCOMPOSITEMESH_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
     /// @brief vtk renderer
-    vtkRenderer * m_render ;
+    vtkRenderer * m_render;
 
-private :
+private:
 
     /// @brief VTK Interactor window manager
     ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
@@ -137,14 +131,22 @@ private :
     void updateVTKPipeline();
 
 
+    /// Slot: receives new camera information (position, focal, viewUp). Update camera with new information.
+    void updateCamPosition(SharedArray positionValue,
+                           SharedArray focalValue,
+                           SharedArray viewUpValue);
+
+    /// Slot: update the pipeline
+    void updatePipeline();
+
 
     /// Contains the mesh, and allows to compute normals.
     vtkPolyDataNormals* m_normals;
 
     /**
-    * @brief the m_bPipelineIsInit value is \b true
-    * if the pipeline is initialized.
-    */
+     * @brief the m_bPipelineIsInit value is \b true
+     * if the pipeline is initialized.
+     */
     bool m_bPipelineIsInit;
 
     vtkCommand* m_loc;
@@ -152,6 +154,9 @@ private :
     /// Slot to call updateCamPosition method.
     UpdateCamPositionSlotType::sptr m_slotUpdateCamPosition;
 
+    /// Slot to call updatePipeline method
+    UpdatePipelineSlotType::sptr m_slotUpdatePipeline;
+
     /// Signal emitted when camera position is updated.
     CamUpdatedSignalType::sptr m_sigCamUpdated;
 
@@ -160,4 +165,4 @@ private :
 
 }
 
-#endif /* VTKCOMPOSITEMESH_RENDERER_SERVICE_HPP_ */
+#endif /* __VTKCOMPOSITEMESH_RENDERERSERVICE_HPP__ */
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/config.hpp b/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/config.hpp
deleted file mode 100644
index 8a5eb02..0000000
--- a/Bundles/LeafVisu/vtkCompositeMesh/include/vtkCompositeMesh/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VTKCOMPOSITEMESH_CONFIG_HPP_
-#define VTKCOMPOSITEMESH_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VTKCOMPOSITEMESH_EXPORTS
-    #define VTKCOMPOSITEMESH_API __declspec(dllexport)
-    #else
-    #define VTKCOMPOSITEMESH_API __declspec(dllimport)
-    #endif
-
-    #define VTKCOMPOSITEMESH_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VTKCOMPOSITEMESH_EXPORTS
-    #define VTKCOMPOSITEMESH_API __attribute__ ((visibility("default")))
-    #define VTKCOMPOSITEMESH_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VTKCOMPOSITEMESH_API __attribute__ ((visibility("hidden")))
-    #define VTKCOMPOSITEMESH_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VTKCOMPOSITEMESH_API
-    #define VTKCOMPOSITEMESH_CLASS_API
-
-#endif
-
-#endif //VTKCOMPOSITEMESH_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/rc/plugin.xml b/Bundles/LeafVisu/vtkCompositeMesh/rc/plugin.xml
index 11312af..36b65bf 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/rc/plugin.xml
+++ b/Bundles/LeafVisu/vtkCompositeMesh/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="vtkCompositeMesh" class="::vtkCompositeMesh::Plugin" >
+<plugin id="vtkCompositeMesh" class="::vtkCompositeMesh::Plugin"  version="@DASH_VERSION@" >
 
 
     <library name="vtkCompositeMesh" />
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/Plugin.cpp b/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/Plugin.cpp
index 9b6fa11..9f27b4c 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/Plugin.cpp
+++ b/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace vtkCompositeMesh
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::vtkCompositeMesh::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace vtkCompositeMesh
diff --git a/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/RendererService.cpp b/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/RendererService.cpp
index 70ca1a6..65152e5 100644
--- a/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/RendererService.cpp
+++ b/Bundles/LeafVisu/vtkCompositeMesh/src/vtkCompositeMesh/RendererService.cpp
@@ -1,47 +1,41 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkCommand.h>
-#include <vtkCamera.h>
-#include <vtkPolyData.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkPolyDataNormals.h>
-#include <vtkCamera.h>
-#include <vtkMatrix4x4.h>
-#include <vtkInteractorStyleTrackballCamera.h>
-#include <vtkTransform.h>
+#include "vtkCompositeMesh/RendererService.hpp"
 
-#include <fwCom/Slots.hpp>
+#include <fwCom/Signal.hxx>
 #include <fwCom/Slots.hxx>
-#include <fwCom/Signals.hpp>
 
-#include <fwData/Mesh.hpp>
 #include <fwData/Composite.hpp>
-#include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/Material.hpp>
 
-#include <fwServices/Base.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+
 #include <fwServices/macros.hpp>
-#include <fwServices/IEditionService.hpp>
 #include <fwServices/registry/ActiveWorkers.hpp>
 
-#include <fwComEd/CameraMsg.hpp>
-#include <fwComEd/MeshMsg.hpp>
-
-
 #include <fwVtkIO/helper/Mesh.hpp>
 #include <fwVtkIO/vtk.hpp>
 
-#include "vtkCompositeMesh/RendererService.hpp"
+#include <vtkCommand.h>
+#include <vtkCamera.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkProperty.h>
+#include <vtkRenderer.h>
+#include <vtkRenderWindow.h>
+#include <vtkPolyDataNormals.h>
+#include <vtkCamera.h>
+#include <vtkMatrix4x4.h>
+#include <vtkInteractorStyleTrackballCamera.h>
+#include <vtkTransform.h>
 
 
-fwServicesRegisterMacro( ::fwRender::IRender , ::vtkCompositeMesh::RendererService , ::fwData::Composite );
+fwServicesRegisterMacro( ::fwRender::IRender, ::vtkCompositeMesh::RendererService, ::fwData::Composite );
 
 
 
@@ -49,7 +43,8 @@ namespace vtkCompositeMesh
 {
 
 const ::fwCom::Slots::SlotKeyType RendererService::s_UPDATE_CAM_POSITION_SLOT = "updateCamPosition";
-const ::fwCom::Signals::SignalKeyType RendererService::s_CAM_UPDATED_SIG = "camUpdated";
+const ::fwCom::Slots::SlotKeyType RendererService::s_UPDATE_PIPELINE_SLOT     = "updatePipeline";
+const ::fwCom::Signals::SignalKeyType RendererService::s_CAM_UPDATED_SIG      = "camUpdated";
 
 class vtkLocalCommand : public vtkCommand
 {
@@ -57,7 +52,7 @@ public:
 
     vtkLocalCommand(::vtkCompositeMesh::RendererService* _service)
     {
-        m_service = _service;
+        m_service              = _service;
         this->m_isMousePressed = false;
     }
     void Execute(vtkObject* _caller, unsigned long _event, void* _obj)
@@ -71,7 +66,7 @@ public:
             this->m_isMousePressed = false;
         }
         else if ( (_event == vtkCommand::ModifiedEvent && this->m_isMousePressed)
-                || _event == vtkCommand::MouseWheelBackwardEvent || _event == vtkCommand::MouseWheelForwardEvent)
+                  || _event == vtkCommand::MouseWheelBackwardEvent || _event == vtkCommand::MouseWheelForwardEvent)
         {
             m_service->notifyCamPositionUpdated();
             ::fwThread::Worker::sptr worker = m_service->getWorker();
@@ -84,30 +79,23 @@ private:
 };
 
 RendererService::RendererService() throw()
-                                    : m_render( 0 ), m_bPipelineIsInit(false)
+    : m_render( 0 ), m_bPipelineIsInit(false)
 {
-//    this->IService::addNewHandledEvent( ::fwComEd::MeshMsg::NEW_MESH );
-//    this->IService::addNewHandledEvent( ::fwComEd::CameraMsg::CAMERA_MOVING );
-
-    m_slotUpdateCamPosition = ::fwCom::newSlot( &RendererService::updateCamPosition, this ) ;
-    ::fwCom::HasSlots::m_slots( s_UPDATE_CAM_POSITION_SLOT, m_slotUpdateCamPosition );
+    m_slotUpdateCamPosition = newSlot( s_UPDATE_CAM_POSITION_SLOT, &RendererService::updateCamPosition, this );
+    newSlot(s_UPDATE_PIPELINE_SLOT, &RendererService::updatePipeline, this);
 
     m_sigCamUpdated = CamUpdatedSignalType::New();
-#ifdef COM_LOG
-    m_sigCamUpdated->setID( s_CAM_UPDATED_SIG );
-#endif
+
     // Register
     ::fwCom::HasSignals::m_signals( s_CAM_UPDATED_SIG,  m_sigCamUpdated);
 
-    this->setWorker( ::fwServices::registry::ActiveWorkers::getDefault()->
-                                 getWorker( ::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER ) );
-
 }
 
 //-----------------------------------------------------------------------------
 
 RendererService::~RendererService() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -136,7 +124,10 @@ void RendererService::configuring() throw(::fwTools::Failed)
 
 void RendererService::stopping() throw(fwTools::Failed)
 {
-    if( m_render == 0 ) return;
+    if( m_render == 0 )
+    {
+        return;
+    }
 
     assert( m_interactorManager->getInteractor() );
     m_interactorManager->getInteractor()->RemoveObserver(m_loc);
@@ -160,26 +151,6 @@ void RendererService::updating() throw(fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-void RendererService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(fwTools::Failed)
-{
-    ::fwComEd::MeshMsg::csptr meshMsg = ::fwComEd::MeshMsg::dynamicConstCast(_msg);
-    if ( meshMsg && meshMsg->hasEvent( ::fwComEd::MeshMsg::NEW_MESH ) )
-    {
-        if(!m_bPipelineIsInit)
-        {
-            initVTKPipeline();
-            m_bPipelineIsInit = true;
-        }
-        else
-        {
-            updateVTKPipeline();
-        }
-        m_interactorManager->getInteractor()->Render();
-    }
-}
-
-//-----------------------------------------------------------------------------
-
 void RendererService::updateCamPosition(SharedArray positionValue,
                                         SharedArray focalValue,
                                         SharedArray viewUpValue)
@@ -214,7 +185,7 @@ void RendererService::createAndAddActorToRender()
     OSLM_INFO( "VTK Pipeline ready TO UPDATE" << '\n' << "Object received:" << myComposite->getLeafClassname());
 
     // elementnumber increases for each mesh found:
-    unsigned int elementNumber=0;
+    unsigned int elementNumber = 0;
 
     //Loop through the composite objects, if it's a mesh, then render it:
     for(::fwData::Composite::ContainerType::const_iterator it = myComposite->begin(); it != myComposite->end(); ++it)
@@ -223,7 +194,7 @@ void RendererService::createAndAddActorToRender()
         OSLM_INFO("ObjectPointer: " << it->second);
         OSLM_INFO("ObjectType: " << it->second->getClassname () << '\n');
 
-        ::fwData::Mesh::sptr myMesh =::fwData::Mesh::dynamicCast (it->second);
+        ::fwData::Mesh::sptr myMesh = ::fwData::Mesh::dynamicCast (it->second);
 
         // If it's a mesh, then put it in the pipeline:
         if( myMesh )
@@ -234,10 +205,10 @@ void RendererService::createAndAddActorToRender()
             vtkPolyDataMapper* mapper = vtkPolyDataMapper::New();
 
             m_normals = vtkPolyDataNormals::New();
-            m_normals->SetInput(vtk_polyData);
+            m_normals->SetInputData(vtk_polyData);
             mapper->SetInputConnection(m_normals->GetOutputPort());
 
-            vtkActor* actor =  vtkActor::New();
+            vtkActor* actor = vtkActor::New();
             actor->SetMapper( mapper);
 
             // Add the actors
@@ -265,7 +236,8 @@ void RendererService::createAndAddActorToRender()
             {
                 // Material exists
                 ::fwData::Material::sptr matObjPtr = myMesh->getField< ::fwData::Material >( "MaterialMesh" );
-                actor->GetProperty()->SetColor (matObjPtr->ambient()->red(), matObjPtr->ambient()->green(), matObjPtr->ambient()->blue());
+                actor->GetProperty()->SetColor (matObjPtr->diffuse()->red(),
+                                                matObjPtr->diffuse()->green(), matObjPtr->diffuse()->blue());
             }
             mapper->Delete();
             elementNumber++;
@@ -292,21 +264,47 @@ void RendererService::updateVTKPipeline()
 
 //-----------------------------------------------------------------------------
 
+void RendererService::updatePipeline()
+{
+    if(!m_bPipelineIsInit)
+    {
+        this->initVTKPipeline();
+        m_bPipelineIsInit = true;
+    }
+    else
+    {
+        this->updateVTKPipeline();
+    }
+    m_interactorManager->getInteractor()->Render();
+}
+
+//-----------------------------------------------------------------------------
+
 void RendererService::notifyCamPositionUpdated()
 {
     vtkCamera* camera = m_render->GetActiveCamera();
 
     SharedArray position = SharedArray(new double[3]);
-    SharedArray focal = SharedArray(new double[3]);
-    SharedArray viewUp = SharedArray(new double[3]);
+    SharedArray focal    = SharedArray(new double[3]);
+    SharedArray viewUp   = SharedArray(new double[3]);
 
     std::copy(camera->GetPosition(), camera->GetPosition()+3, position.get());
     std::copy(camera->GetFocalPoint(), camera->GetFocalPoint()+3, focal.get());
     std::copy(camera->GetViewUp(), camera->GetViewUp()+3, viewUp.get());
 
-    fwServicesBlockAndNotifyMacro( this->getLightID(), m_sigCamUpdated,
-                                   (position, focal, viewUp),
-                                   m_slotUpdateCamPosition );
+    {
+        ::fwCom::Connection::Blocker block(m_sigCamUpdated->getConnection(m_slotUpdateCamPosition));
+        m_sigCamUpdated->asyncEmit(position, focal, viewUp);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType RendererService::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_MODIFIED_SIG, s_UPDATE_PIPELINE_SLOT ) );
+    return connections;
 }
 
 }
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/CMakeLists.txt b/Bundles/LeafVisu/vtkSimpleMesh/CMakeLists.txt
index ce362c1..9c22c46 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/CMakeLists.txt
+++ b/Bundles/LeafVisu/vtkSimpleMesh/CMakeLists.txt
@@ -1,20 +1,29 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRender
-    fwRenderVTK
-    fwRuntime
-    fwServices
-    fwThread
-)
 
-find_package(Boost REQUIRED)
-find_package(VTK REQUIRED)
+# Just look one core module to get the version number
+find_package(VTK COMPONENTS
+        vtkCommonCore
+        REQUIRED
+        NO_MODULE)
+        
+if(${VTK_MAJOR_VERSION} STREQUAL "7")
+    find_package(VTK COMPONENTS
+        vtkRenderingOpenGL2
+        vtkInteractionStyle
+        vtkRenderingFreeType
+    REQUIRED
+    NO_MODULE)
+else()
+    find_package(VTK COMPONENTS
+        vtkRenderingOpenGL
+        vtkInteractionStyle
+        vtkRenderingFreeType
+    REQUIRED
+    NO_MODULE)
+endif()
 
-fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
-    ${VTK_INCLUDE_DIRS} 
-    )
-fwLink(
-    vtkWidgets
-    )
+include(${VTK_USE_FILE})
+
+fwForwardInclude( ${VTK_INCLUDE_DIRS} )
+fwLink( ${VTK_LIBRARIES} )
 
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/COPYING b/Bundles/LeafVisu/vtkSimpleMesh/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/vtkSimpleMesh/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/COPYING.LESSER b/Bundles/LeafVisu/vtkSimpleMesh/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/vtkSimpleMesh/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/Properties.cmake b/Bundles/LeafVisu/vtkSimpleMesh/Properties.cmake
index e2c1712..6a17d77 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/Properties.cmake
+++ b/Bundles/LeafVisu/vtkSimpleMesh/Properties.cmake
@@ -2,6 +2,18 @@
 set( NAME vtkSimpleMesh )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCom fwComEd fwCore fwData fwDataTools fwRender fwRenderVTK fwRuntime fwServices fwThread fwVtkIO )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwDataTools
+    fwRender
+    fwRenderVTK
+    fwRuntime
+    fwServices
+    fwVtkIO
+    fwGui
+    fwTools
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/bin/build.options b/Bundles/LeafVisu/vtkSimpleMesh/bin/build.options
deleted file mode 100644
index 150f96d..0000000
--- a/Bundles/LeafVisu/vtkSimpleMesh/bin/build.options
+++ /dev/null
@@ -1,16 +0,0 @@
-TYPE    = 'bundle'
-USE     = ['vtkWidgets','boost']
-LIB     = [
-          'fwCore_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwVtkIO_0-1',
-          'fwTools_0-1',
-          'fwDataIO_0-2',
-          'fwDataTools_0-1',
-          'fwRender_0-1',
-          'fwRenderVTK_0-1',
-          ]
-VERSION = '0-1'
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Namespace.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Namespace.hpp
index 08c7ef0..0146023 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Namespace.hpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Namespace.hpp
@@ -1,20 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef VTKSIMPLEMESHNAMESPACE_HPP_
-#define VTKSIMPLEMESHNAMESPACE_HPP_
+#ifndef __VTKSIMPLEMESH_NAMESPACE_HPP__
+#define __VTKSIMPLEMESH_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace vtkSimpleMesh contains a service which renders one mesh (::fwData::TriangularMesh).
+ * @brief       The namespace vtkSimpleMesh contains a service which renders one mesh (::fwData::Mesh).
  * @namespace   vtkSimpleMesh
- * 
- * @date        2009-2010.
+ *
  *
  */
 namespace vtkSimpleMesh
 {
 }
-#endif /* VTKSIMPLEMESHNAMESPACE_HPP_ */
+#endif /* __VTKSIMPLEMESH_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Plugin.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Plugin.hpp
index 9db765e..ee1ef85 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Plugin.hpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/Plugin.hpp
@@ -1,19 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKSIMPLEMESH_PLUGIN_HPP_
-#define _VTKSIMPLEMESH_PLUGIN_HPP_
+#ifndef __VTKSIMPLEMESH_PLUGIN_HPP__
+#define __VTKSIMPLEMESH_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
 /**
  * @brief   Namespace vtkSimpleMesh.
  * @namespace   vtkSimpleMesh
- * 
- * @date    2009.
  *
  *  The namespace vtkSimpleMesh contains a simple mesh renderer using vtk.
  */
@@ -26,24 +24,24 @@ public:
      * @brief   Destructor
      */
     ~Plugin() throw();
-    
+
     /**
-    * @brief Start method.
-    *
-    * @exception ::fwRuntime::RuntimeException.
-    * This method is used by runtime to initialize the bundle.
-    */
+     * @brief Start method.
+     *
+     * @exception ::fwRuntime::RuntimeException.
+     * This method is used by runtime to initialize the bundle.
+     */
     void start() throw(::fwRuntime::RuntimeException);
 
     /**
-    * @brief Stop method.
-    *
-    * This method is used by runtime to stop the bundle.
-    */
+     * @brief Stop method.
+     *
+     * This method is used by runtime to stop the bundle.
+     */
     void stop() throw();
-    
+
 };
 
 } // namespace vtkSimpleMesh
 
-#endif //_VTKSIMPLEMESH_PLUGIN_HPP_
+#endif //__VTKSIMPLEMESH_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/RendererService.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/RendererService.hpp
deleted file mode 100644
index 33b2c92..0000000
--- a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/RendererService.hpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VTKSIMPLEMESH_RENDERER_SERVICE_HPP_
-#define VTKSIMPLEMESH_RENDERER_SERVICE_HPP_
-
-#include <boost/shared_array.hpp>
-
-#include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
-
-#include <vtkCommand.h>
-
-#include <fwRender/IRender.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "vtkSimpleMesh/config.hpp"
-
-// VTK
-class vtkRenderer;
-class vtkPolyDataNormals;
-
-namespace vtkSimpleMesh
-{
-
-/**
- * @brief   Renderer service.
- * @class   RendererService
- * 
- * @date    2009.
- *
- * Service rendering a ::fwData::Mesh using VTK.
- *
- * Service registered details : \n
- * fwServicesRegisterMacro( ::fwRender::IRender , ::vtkSimpleMesh::RendererService , ::fwData::Mesh)
- */
-class VTKSIMPLEMESH_CLASS_API RendererService : public fwRender::IRender
-{
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (RendererService)(::fwRender::IRender) ) ;
-
-    typedef ::boost::shared_array< double > SharedArray;
-
-    VTKSIMPLEMESH_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CAM_POSITION_SLOT;
-    typedef ::fwCom::Slot<void(SharedArray, SharedArray, SharedArray)> UpdateCamPositionSlotType;
-
-    VTKSIMPLEMESH_API static const ::fwCom::Signals::SignalKeyType s_CAM_UPDATED_SIG;
-    typedef ::fwCom::Signal< void (SharedArray, SharedArray, SharedArray) > CamUpdatedSignalType;
-
-    /**
-    * @brief    Constructor
-    */
-    VTKSIMPLEMESH_API RendererService() throw() ;
-
-    /**
-    * @brief    Destructor
-    */
-    VTKSIMPLEMESH_API virtual ~RendererService() throw() ;
-
-
-    /// Slot to receive new camera information (position, focal, viewUp). Update camera with new information.
-    void updateCamPosition(SharedArray positionValue,
-                           SharedArray focalValue,
-                           SharedArray viewUpValue);
-
-    /// This method is used to notify that the VTK camera position is updated.
-    void notifyCamPositionUpdated();
-
-
-protected :
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    * Initialize VTK renderer and qt containers
-    */
-    VTKSIMPLEMESH_API virtual void starting() throw(fwTools::Failed);
-
-
-    /**
-    * @brief Configuring method.
-    *
-    * XML configuration sample:
-    * @verbatim
-    <service impl="::vtkSimpleMesh::RendererService" type="::fwRender::IRender" autoConnect="yes" />
-    @endverbatim
-    * This method is used to configure the service. Initialize qt container.
-    */
-    VTKSIMPLEMESH_API virtual void configuring() throw(::fwTools::Failed);
-
-
-    /**
-    * @brief Stopping method.
-    *
-    * Destroy VTK renderer and qt containers
-    */
-    VTKSIMPLEMESH_API virtual void stopping() throw(fwTools::Failed);
-
-    /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * Make a render if necessary
-    */
-    VTKSIMPLEMESH_API virtual void updating() throw(fwTools::Failed);
-
-    /**
-    * @brief Updating method (react on data modifications).
-    * @param[in] _msg ::fwServices::ObjectMsg::csptr.
-    *
-    * This method is used to update the vtk pipeline when the mesh is modified.
-    */
-    VTKSIMPLEMESH_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /// @brief vtk renderer
-    vtkRenderer * m_render ;
-
-private :
-
-    /// @brief VTK Interactor window manager
-    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
-
-    /// This method is used to initialize the VTK pipeline.
-    void initVTKPipeline();
-
-    /**
-    * @brief This method is used to update the VTK pipeline.
-    * @param resetCamera if true : reset the camera position
-    */
-    void updateVTKPipeline(bool resetCamera = true);
-
-    /**
-    * @brief the m_bPipelineIsInit value is \b true
-    * if the pipeline is initialized.
-    */
-    bool m_bPipelineIsInit;
-
-    vtkCommand* m_loc;
-
-    /// Slot to call updateCamPosition method
-    UpdateCamPositionSlotType::sptr m_slotUpdateCamPosition;
-
-    /// Signal emitted when camera position is updated.
-    CamUpdatedSignalType::sptr m_sigCamUpdated;
-
-    /// To store the polyData
-    vtkSmartPointer<vtkPolyData> m_vtkPolyData;
-
-    /// Vtk mapper
-    vtkSmartPointer<vtkPolyDataMapper> m_mapper;
-
-    /// Hight resolution timer to log information about computing function time
-    ::fwCore::HiResTimer m_hiResTimer;
-};
-
-}
-
-#endif /* VTKSIMPLEMESH_RENDERER_SERVICE_HPP_ */
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp
new file mode 100644
index 0000000..d5aa7f1
--- /dev/null
+++ b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SRenderer.hpp
@@ -0,0 +1,184 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VTKSIMPLEMESH_SRENDERER_HPP__
+#define __VTKSIMPLEMESH_SRENDERER_HPP__
+
+#include "vtkSimpleMesh/config.hpp"
+
+#include <fwRender/IRender.hpp>
+
+#include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
+
+#include <boost/shared_array.hpp>
+
+#include <vtkCommand.h>
+#include <vtkSmartPointer.h>
+
+// VTK
+class vtkRenderer;
+class vtkPolyData;
+class vtkPolyDataMapper;
+
+namespace vtkSimpleMesh
+{
+
+/**
+ * @brief   Service rendering a ::fwData::Mesh using VTK.
+ * @class   SRenderer
+ *
+ * This service displays a mesh in a scene.
+ *
+ * The scene owns a 3D camera that can be moved by the user on clicking in the scene.
+ *   - When the camera moved, a signal 'camUpdated' is emitted with the new camera information (position, focal and
+ *     view up).
+ *  - To update the camera without clicking, you could called the slot 'updateCamPosition'.
+ */
+class VTKSIMPLEMESH_CLASS_API SRenderer : public fwRender::IRender
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SRenderer)(::fwRender::IRender) );
+
+    typedef ::boost::shared_array< double > SharedArray;
+
+    VTKSIMPLEMESH_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_CAM_POSITION_SLOT;
+    typedef ::fwCom::Slot<void (SharedArray, SharedArray, SharedArray)> UpdateCamPositionSlotType;
+
+    /// Slot to initialize pipeline
+    VTKSIMPLEMESH_API static const ::fwCom::Slots::SlotKeyType s_INIT_PIPELINE_SLOT;
+    typedef ::fwCom::Slot<void ()> InitPipelineSlotType;
+
+    /// Slot to update pipeline
+    VTKSIMPLEMESH_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_PIPELINE_SLOT;
+    typedef ::fwCom::Slot<void ()> UpdatePipelineSlotType;
+
+    VTKSIMPLEMESH_API static const ::fwCom::Signals::SignalKeyType s_CAM_UPDATED_SIG;
+    typedef ::fwCom::Signal< void (SharedArray, SharedArray, SharedArray) > CamUpdatedSignalType;
+
+    /**
+     * @brief    Constructor
+     */
+    VTKSIMPLEMESH_API SRenderer() throw();
+
+    /**
+     * @brief    Destructor
+     */
+    VTKSIMPLEMESH_API virtual ~SRenderer() throw();
+
+
+    /// This method is used to notify that the VTK camera position is updated.
+    void notifyCamPositionUpdated();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect mesh::s_MODIFIED_SIG to this::s_INIT_PIPELINE_SLOT
+     * Connect mesh::s_VERTEX_MODIFIED_SIG to this::s_UPDATE_PIPELINE_SLOT
+     */
+    VTKSIMPLEMESH_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+
+protected:
+
+    /**
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     * Initialize VTK renderer and qt containers
+     */
+    VTKSIMPLEMESH_API virtual void starting() throw(fwTools::Failed);
+
+
+    /**
+     * @brief This method is used to configure the service. Initialize the qt container.
+     *
+     * XML configuration sample:
+     * @code{.xml}
+       <service impl="::vtkSimpleMesh::SRenderer" type="::fwRender::IRender" autoConnect="yes" />
+       @endcode
+     */
+    VTKSIMPLEMESH_API virtual void configuring() throw(::fwTools::Failed);
+
+
+    /**
+     * @brief Stopping method.
+     *
+     * Destroy the VTK renderer and the qt container
+     */
+    VTKSIMPLEMESH_API virtual void stopping() throw(fwTools::Failed);
+
+    /**
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * Make a render if necessary
+     */
+    VTKSIMPLEMESH_API virtual void updating() throw(fwTools::Failed);
+
+    /// @brief vtk renderer
+    vtkRenderer * m_render;
+
+private:
+
+    /// @brief VTK Interactor window manager
+    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
+
+    /// This method is used to initialize the VTK pipeline.
+    void initVTKPipeline();
+
+    /**
+     * @brief This method is used to update the VTK pipeline.
+     * @param resetCamera if true : reset the camera position
+     */
+    void updateVTKPipeline(bool resetCamera = true);
+
+
+    /// Slot: receives new camera information (position, focal, viewUp). Update camera with new information.
+    void updateCamPosition(SharedArray positionValue,
+                           SharedArray focalValue,
+                           SharedArray viewUpValue);
+
+    /// Slot: initialize the pipeline
+    void initPipeline();
+
+    /// Slot: update the pipeline
+    void updatePipeline();
+
+    /**
+     * @brief the m_bPipelineIsInit value is \b true
+     * if the pipeline is initialized.
+     */
+    bool m_bPipelineIsInit;
+
+    vtkCommand* m_loc;
+
+    /// Slot to call updateCamPosition method
+    UpdateCamPositionSlotType::sptr m_slotUpdateCamPosition;
+
+    /// Slot to call initPipeline method
+    InitPipelineSlotType::sptr m_slotInitPipeline;
+
+    /// Slot to call initPipeline method
+    UpdatePipelineSlotType::sptr m_slotUpdatePipeline;
+
+    /// Signal emitted when camera position is updated.
+    CamUpdatedSignalType::sptr m_sigCamUpdated;
+
+    /// To store the polyData
+    vtkSmartPointer<vtkPolyData> m_vtkPolyData;
+
+    /// Vtk mapper
+    vtkSmartPointer<vtkPolyDataMapper> m_mapper;
+
+    /// Hight resolution timer to log information about computing function time
+    ::fwCore::HiResTimer m_hiResTimer;
+};
+
+}
+
+#endif /* __VTKSIMPLEMESH_SRENDERER_HPP__ */
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SSimpleMeshDeformation.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SSimpleMeshDeformation.hpp
index 2972f24..3ac83bd 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SSimpleMeshDeformation.hpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/SSimpleMeshDeformation.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,42 +7,43 @@
 #ifndef __VTKSIMPLEMESH_SSIMPLEMESHDEFORMATION_HPP__
 #define __VTKSIMPLEMESH_SSIMPLEMESHDEFORMATION_HPP__
 
+#include "vtkSimpleMesh/config.hpp"
+
+#include <fwData/Mesh.hpp>
+
 #include <fwThread/Timer.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
+
 #include <fwServices/IController.hpp>
 
-#include "vtkSimpleMesh/config.hpp"
 
 
 namespace vtkSimpleMesh
 {
 
 /**
- * @brief   Service used to deform mesh
+ * @brief   Service used to deform a mesh
  * @class   SSimpleMeshDeformation
- * 
- * @date    2012.
  */
 class VTKSIMPLEMESH_CLASS_API SSimpleMeshDeformation : public ::fwServices::IController
 {
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SSimpleMeshDeformation)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSimpleMeshDeformation)(::fwServices::IController) );
 
+    // Key used to register the 'startDeformation' slot
     VTKSIMPLEMESH_API static const ::fwCom::Slots::SlotKeyType s_START_DEFORMATION_SLOT;
-    typedef ::fwCom::Slot<void()> StartDeformationSlotType;
 
+    // Key used to register the 'stopDeformation' slot
     VTKSIMPLEMESH_API static const ::fwCom::Slots::SlotKeyType s_STOP_DEFORMATION_SLOT;
-    typedef ::fwCom::Slot<void()> StopDeformationSlotType;
 
     /// Constructor
-    VTKSIMPLEMESH_API SSimpleMeshDeformation() throw() ;
+    VTKSIMPLEMESH_API SSimpleMeshDeformation() throw();
 
     /// Destructor
-    VTKSIMPLEMESH_API virtual ~SSimpleMeshDeformation() throw() ;
+    VTKSIMPLEMESH_API virtual ~SSimpleMeshDeformation() throw();
 
-protected :
+protected:
 
     /// Starting method. Initialize timer.
     VTKSIMPLEMESH_API virtual void starting() throw(fwTools::Failed);
@@ -58,9 +59,6 @@ protected :
     /// Updating method. Deforms the mesh
     VTKSIMPLEMESH_API virtual void updating() throw(fwTools::Failed);
 
-    /// Receiving.
-    VTKSIMPLEMESH_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
     /// Starts mesh deformation
     VTKSIMPLEMESH_API void startDeformation();
 
@@ -69,12 +67,6 @@ protected :
 
 private:
 
-    /// Slot to call startDeformation method
-    StartDeformationSlotType::sptr m_slotStartDeformation;
-
-    /// Slot to call stopDeformation method
-    StopDeformationSlotType::sptr m_slotStopDeformation;
-
     /// Helper to copy quicly meshes ( only points, normals and point colors )
     void copyMesh( const ::fwData::Mesh::sptr & src, const ::fwData::Mesh::sptr & dest ) const;
 
@@ -86,9 +78,9 @@ private:
 
     /// Helper to compute mesh deformation
     void computeDeformation(
-            const ::fwData::Mesh::sptr & refMesh,
-            const ::fwData::Mesh::sptr & transformMesh,
-            float deformationPercent );
+        const ::fwData::Mesh::sptr & refMesh,
+        const ::fwData::Mesh::sptr & transformMesh,
+        float deformationPercent );
 
     ::fwThread::Timer::sptr m_timer;
 
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/config.hpp b/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/config.hpp
deleted file mode 100644
index 5f1a03c..0000000
--- a/Bundles/LeafVisu/vtkSimpleMesh/include/vtkSimpleMesh/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VTKSIMPLEMESH_CONFIG_HPP_
-#define VTKSIMPLEMESH_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VTKSIMPLEMESH_EXPORTS
-    #define VTKSIMPLEMESH_API __declspec(dllexport)
-    #else
-    #define VTKSIMPLEMESH_API __declspec(dllimport)
-    #endif
-
-    #define VTKSIMPLEMESH_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VTKSIMPLEMESH_EXPORTS
-    #define VTKSIMPLEMESH_API __attribute__ ((visibility("default")))
-    #define VTKSIMPLEMESH_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VTKSIMPLEMESH_API __attribute__ ((visibility("hidden")))
-    #define VTKSIMPLEMESH_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VTKSIMPLEMESH_API
-    #define VTKSIMPLEMESH_CLASS_API
-
-#endif
-
-#endif //VTKSIMPLEMESH_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/rc/plugin.xml b/Bundles/LeafVisu/vtkSimpleMesh/rc/plugin.xml
index b31abef..02a1dfd 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/rc/plugin.xml
+++ b/Bundles/LeafVisu/vtkSimpleMesh/rc/plugin.xml
@@ -1,10 +1,10 @@
-<plugin id="vtkSimpleMesh" class="::vtkSimpleMesh::Plugin">
+<plugin id="vtkSimpleMesh" class="::vtkSimpleMesh::Plugin" version="@DASH_VERSION@" >
     <library name="vtkSimpleMesh" />
 
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRender::IRender</type>
-        <service>::vtkSimpleMesh::RendererService</service>
+        <service>::vtkSimpleMesh::SRenderer</service>
         <object>::fwData::Mesh</object>
     </extension>
 
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/Plugin.cpp b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/Plugin.cpp
index 05b3f54..bfb4f6a 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/Plugin.cpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace vtkSimpleMesh
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::vtkSimpleMesh::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace vtkSimpleMesh
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/RendererService.cpp b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/RendererService.cpp
deleted file mode 100644
index 0088bfb..0000000
--- a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/RendererService.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vtkCommand.h>
-#include <vtkCamera.h>
-#include <vtkPolyData.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkProperty.h>
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkPolyDataNormals.h>
-#include <vtkCamera.h>
-#include <vtkMatrix4x4.h>
-#include <vtkInteractorStyleTrackballCamera.h>
-#include <vtkTransform.h>
-
-#include <fwCore/HiResTimer.hpp>
-
-#include <fwData/Mesh.hpp>
-#include <fwData/mt/ObjectReadLock.hpp>
-
-#include <fwComEd/CameraMsg.hpp>
-#include <fwComEd/MeshMsg.hpp>
-
-#include <fwCom/Slots.hpp>
-#include <fwCom/Slots.hxx>
-#include <fwCom/Signals.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include <fwVtkIO/helper/Mesh.hpp>
-#include <fwVtkIO/vtk.hpp>
-
-#include "vtkSimpleMesh/RendererService.hpp"
-
-fwServicesRegisterMacro( ::fwRender::IRender , ::vtkSimpleMesh::RendererService , ::fwData::Mesh );
-
-
-namespace vtkSimpleMesh
-{
-
-const ::fwCom::Slots::SlotKeyType RendererService::s_UPDATE_CAM_POSITION_SLOT = "updateCamPosition";
-const ::fwCom::Signals::SignalKeyType RendererService::s_CAM_UPDATED_SIG = "camUpdated";
-
-class vtkLocalCommand : public vtkCommand
-{
-public:
-
-    vtkLocalCommand(::vtkSimpleMesh::RendererService* _service)
-    {
-        m_service = _service;
-        this->m_isMousePressed = false;
-    }
-    void Execute(vtkObject* _caller, unsigned long _event, void* _obj)
-    {
-        if (_event == vtkCommand::StartInteractionEvent )
-        {
-            this->m_isMousePressed = true;
-        }
-        else if (_event == vtkCommand::EndInteractionEvent )
-        {
-            this->m_isMousePressed = false;
-        }
-        else if ( (_event == vtkCommand::ModifiedEvent && this->m_isMousePressed)
-                || _event == vtkCommand::MouseWheelBackwardEvent || _event == vtkCommand::MouseWheelForwardEvent)
-        {
-            m_service->notifyCamPositionUpdated();
-            ::fwThread::Worker::sptr worker = m_service->getWorker();
-            worker->processTasks();
-        }
-    }
-private:
-    ::vtkSimpleMesh::RendererService* m_service;
-    bool m_isMousePressed;
-};
-
-RendererService::RendererService() throw()
-: m_render( 0 ), m_bPipelineIsInit(false)
-{
-    //this->addNewHandledEvent( ::fwComEd::MeshMsg::NEW_MESH );
-    //this->addNewHandledEvent( ::fwComEd::CameraMsg::CAMERA_MOVING );
-
-
-    m_slotUpdateCamPosition   = ::fwCom::newSlot( &RendererService::updateCamPosition, this ) ;
-    ::fwCom::HasSlots::m_slots( s_UPDATE_CAM_POSITION_SLOT, m_slotUpdateCamPosition );
-
-    m_sigCamUpdated = CamUpdatedSignalType::New();
-#ifdef COM_LOG
-    m_sigCamUpdated->setID( s_CAM_UPDATED_SIG );
-#endif
-    // Register
-    ::fwCom::HasSignals::m_signals( s_CAM_UPDATED_SIG,  m_sigCamUpdated);
-
-    this->setWorker( ::fwServices::registry::ActiveWorkers::getDefault()->
-                                 getWorker( ::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER ) );
-}
-
-//-----------------------------------------------------------------------------
-
-RendererService::~RendererService() throw()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::starting() throw(fwTools::Failed)
-{
-    this->create();
-
-    m_interactorManager = ::fwRenderVTK::IVtkRenderWindowInteractorManager::createManager();
-    m_interactorManager->installInteractor( this->getContainer() );
-
-    m_bPipelineIsInit = false;
-
-    // Renderer
-    m_render = vtkRenderer::New();
-    m_interactorManager->getInteractor()->GetRenderWindow()->AddRenderer(m_render);
-
-    bool meshIsLoaded;
-    {
-        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-        ::fwData::mt::ObjectReadLock lock(mesh);
-        meshIsLoaded = mesh->getNumberOfPoints() > 0;
-    }
-
-    if ( meshIsLoaded )
-    {
-        this->initVTKPipeline();
-        m_bPipelineIsInit = true;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::configuring() throw(::fwTools::Failed)
-{
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::stopping() throw(fwTools::Failed)
-{
-    if( m_render == 0 ) return;
-
-    m_interactorManager->getInteractor()->RemoveObserver(m_loc);
-
-    m_interactorManager->uninstallInteractor();
-    m_interactorManager.reset();
-
-    SLM_ASSERT("m_render not instanced", m_render);
-    m_render->Delete();
-    m_render = 0;
-
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::updating() throw(fwTools::Failed)
-{
-    m_interactorManager->getInteractor()->Render();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(fwTools::Failed)
-{
-    ::fwComEd::MeshMsg::csptr meshMsg = ::fwComEd::MeshMsg::dynamicConstCast(_msg);
-    if ( meshMsg && meshMsg->hasEvent( ::fwComEd::MeshMsg::NEW_MESH ) )
-    {
-        if(!m_bPipelineIsInit)
-        {
-            this->initVTKPipeline();
-            m_bPipelineIsInit = true;
-        }
-        else
-        {
-            m_vtkPolyData = vtkSmartPointer<vtkPolyData>::New();
-            ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-            {
-                ::fwData::mt::ObjectReadLock lock(mesh);
-                ::fwVtkIO::helper::Mesh::toVTKMesh( mesh, m_vtkPolyData );
-            }
-            m_mapper->SetInput(m_vtkPolyData);
-        }
-        m_interactorManager->getInteractor()->Render();
-    }
-    else if ( meshMsg && meshMsg->hasEvent( ::fwComEd::MeshMsg::VERTEX_MODIFIED ) )
-    {
-        m_hiResTimer.reset();
-        m_hiResTimer.start();
-        this->updateVTKPipeline(false);
-        m_hiResTimer.stop();
-        OSLM_INFO("Vertex updating time (milli sec) = " << m_hiResTimer.getElapsedTimeInMilliSec());
-
-        m_hiResTimer.reset();
-        m_hiResTimer.start();
-        m_interactorManager->getInteractor()->Render();
-        m_hiResTimer.stop();
-        OSLM_INFO("Render time (milli sec) = " << m_hiResTimer.getElapsedTimeInMilliSec());
-    }
-
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::initVTKPipeline()
-{
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-    m_vtkPolyData = vtkSmartPointer<vtkPolyData>::New();
-
-    {
-        ::fwData::mt::ObjectReadLock lock(mesh);
-        ::fwVtkIO::helper::Mesh::toVTKMesh( mesh, m_vtkPolyData );
-    }
-
-    m_mapper = vtkPolyDataMapper::New();
-    m_mapper->SetInput(m_vtkPolyData);
-
-    vtkActor* actor =  vtkActor::New();
-    actor->SetMapper(m_mapper);
-
-    // Add the actors
-    m_render->AddActor( actor);
-
-    m_interactorManager->getInteractor()->SetInteractorStyle(vtkInteractorStyleTrackballCamera::New());
-    m_loc = new vtkLocalCommand(this);
-
-    m_interactorManager->getInteractor()->AddObserver(vtkCommand::AnyEvent, m_loc);
-
-
-    // Repaint and resize window
-    m_render->ResetCamera();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::updateVTKPipeline(bool resetCamera)
-{
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-
-    {
-        ::fwData::mt::ObjectReadLock lock(mesh);
-        ::fwVtkIO::helper::Mesh::updatePolyDataPoints(m_vtkPolyData, mesh);
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_vtkPolyData, mesh);
-        ::fwVtkIO::helper::Mesh::updatePolyDataPointColor(m_vtkPolyData, mesh);
-        ::fwVtkIO::helper::Mesh::updatePolyDataCellNormals(m_vtkPolyData, mesh);
-    }
-
-    if (resetCamera)
-    {
-        m_render->ResetCamera();
-    }
-
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::notifyCamPositionUpdated()
-{
-    vtkCamera* camera = m_render->GetActiveCamera();
-
-    SharedArray position = SharedArray(new double[3]);
-    SharedArray focal = SharedArray(new double[3]);
-    SharedArray viewUp = SharedArray(new double[3]);
-
-    std::copy(camera->GetPosition(), camera->GetPosition()+3, position.get());
-    std::copy(camera->GetFocalPoint(), camera->GetFocalPoint()+3, focal.get());
-    std::copy(camera->GetViewUp(), camera->GetViewUp()+3, viewUp.get());
-
-    fwServicesBlockAndNotifyMacro( this->getLightID(), m_sigCamUpdated,
-                                   (position, focal, viewUp),
-                                   m_slotUpdateCamPosition );
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::updateCamPosition(SharedArray positionValue,
-                                        SharedArray focalValue,
-                                        SharedArray viewUpValue)
-{
-    vtkCamera* camera = m_render->GetActiveCamera();
-
-    camera->SetPosition(positionValue.get());
-    camera->SetFocalPoint(focalValue.get());
-    camera->SetViewUp(viewUpValue.get());
-    camera->SetClippingRange(0.1, 1000000);
-
-    m_interactorManager->getInteractor()->Render();
-}
-
-}
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp
new file mode 100644
index 0000000..cf9fdda
--- /dev/null
+++ b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SRenderer.cpp
@@ -0,0 +1,306 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "vtkSimpleMesh/SRenderer.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/HiResTimer.hpp>
+
+#include <fwData/Mesh.hpp>
+#include <fwData/mt/ObjectReadLock.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+
+#include <fwVtkIO/helper/Mesh.hpp>
+#include <fwVtkIO/vtk.hpp>
+
+#include <vtkCamera.h>
+#include <vtkCamera.h>
+#include <vtkCommand.h>
+#include <vtkMatrix4x4.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkPolyDataNormals.h>
+#include <vtkProperty.h>
+#include <vtkRenderer.h>
+#include <vtkRenderWindow.h>
+#include <vtkTransform.h>
+#ifndef ANDROID
+#include <vtkInteractorStyleTrackballCamera.h>
+#else
+#include <vtkInteractorStyleMultiTouchCamera.h>
+#endif
+
+fwServicesRegisterMacro( ::fwRender::IRender, ::vtkSimpleMesh::SRenderer, ::fwData::Mesh );
+
+namespace vtkSimpleMesh
+{
+
+const ::fwCom::Slots::SlotKeyType SRenderer::s_UPDATE_CAM_POSITION_SLOT = "updateCamPosition";
+const ::fwCom::Slots::SlotKeyType SRenderer::s_UPDATE_PIPELINE_SLOT     = "updatePipeline";
+const ::fwCom::Slots::SlotKeyType SRenderer::s_INIT_PIPELINE_SLOT       = "initPipeline";
+const ::fwCom::Signals::SignalKeyType SRenderer::s_CAM_UPDATED_SIG      = "camUpdated";
+
+// vtkCommand used to catch the user interactions and notify the new camera position
+class vtkLocalCommand : public vtkCommand
+{
+public:
+
+    vtkLocalCommand(::vtkSimpleMesh::SRenderer* _service)
+    {
+        m_service              = _service;
+        this->m_isMousePressed = false;
+    }
+    void Execute(vtkObject* _caller, unsigned long _event, void* _obj)
+    {
+        if (_event == vtkCommand::StartInteractionEvent )
+        {
+            this->m_isMousePressed = true;
+        }
+        else if (_event == vtkCommand::EndInteractionEvent )
+        {
+            this->m_isMousePressed = false;
+        }
+        else if ( (_event == vtkCommand::ModifiedEvent && this->m_isMousePressed)
+                  || _event == vtkCommand::MouseWheelBackwardEvent || _event == vtkCommand::MouseWheelForwardEvent)
+        {
+            m_service->notifyCamPositionUpdated();
+            ::fwThread::Worker::sptr worker = m_service->getWorker();
+            worker->processTasks();
+        }
+    }
+private:
+    ::vtkSimpleMesh::SRenderer* m_service;
+    bool m_isMousePressed;
+};
+
+SRenderer::SRenderer() throw() : m_render( 0 ), m_bPipelineIsInit(false)
+{
+    m_slotUpdateCamPosition = newSlot(s_UPDATE_CAM_POSITION_SLOT, &SRenderer::updateCamPosition, this);
+    m_slotUpdatePipeline    = newSlot(s_UPDATE_PIPELINE_SLOT, &SRenderer::updatePipeline, this);
+    m_slotInitPipeline      = newSlot(s_INIT_PIPELINE_SLOT, &SRenderer::initPipeline, this);
+
+    m_sigCamUpdated = newSignal<CamUpdatedSignalType>(s_CAM_UPDATED_SIG);
+}
+
+//-----------------------------------------------------------------------------
+
+SRenderer::~SRenderer() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::starting() throw(fwTools::Failed)
+{
+    this->create();
+
+    m_interactorManager = ::fwRenderVTK::IVtkRenderWindowInteractorManager::createManager();
+
+    m_interactorManager->installInteractor( this->getContainer() );
+
+    m_bPipelineIsInit = false;
+
+    // Renderer
+    m_render = vtkRenderer::New();
+    m_interactorManager->getInteractor()->GetRenderWindow()->AddRenderer(m_render);
+
+    bool meshIsLoaded;
+    {
+        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        ::fwData::mt::ObjectReadLock lock(mesh);
+        meshIsLoaded = mesh->getNumberOfPoints() > 0;
+    }
+
+    if ( meshIsLoaded )
+    {
+        this->initVTKPipeline();
+        m_bPipelineIsInit = true;
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::configuring() throw(::fwTools::Failed)
+{
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::stopping() throw(fwTools::Failed)
+{
+    if( m_render == 0 )
+    {
+        return;
+    }
+
+    m_interactorManager->getInteractor()->RemoveObserver(m_loc);
+
+    m_interactorManager->uninstallInteractor();
+    m_interactorManager.reset();
+
+    SLM_ASSERT("m_render not instanced", m_render);
+    m_render->Delete();
+    m_render = 0;
+
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::updating() throw(fwTools::Failed)
+{
+    m_interactorManager->getInteractor()->Render();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::initVTKPipeline()
+{
+    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+    m_vtkPolyData             = vtkSmartPointer<vtkPolyData>::New();
+
+    {
+        ::fwData::mt::ObjectReadLock lock(mesh);
+        ::fwVtkIO::helper::Mesh::toVTKMesh( mesh, m_vtkPolyData );
+    }
+
+    m_mapper = vtkPolyDataMapper::New();
+    m_mapper->SetInputData(m_vtkPolyData);
+
+    vtkActor* actor = vtkActor::New();
+    actor->SetMapper(m_mapper);
+
+    // Add the actors
+    m_render->AddActor( actor);
+#ifndef ANDROID
+    m_interactorManager->getInteractor()->SetInteractorStyle(vtkInteractorStyleTrackballCamera::New());
+#else
+    m_interactorManager->getInteractor()->SetInteractorStyle(vtkInteractorStyleMultiTouchCamera::New());
+#endif
+    m_loc = new vtkLocalCommand(this);
+
+    m_interactorManager->getInteractor()->AddObserver(vtkCommand::AnyEvent, m_loc);
+
+
+    // Repaint and resize window
+    m_render->ResetCamera();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::updateVTKPipeline(bool resetCamera)
+{
+    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+
+    {
+        ::fwData::mt::ObjectReadLock lock(mesh);
+        ::fwVtkIO::helper::Mesh::updatePolyDataPoints(m_vtkPolyData, mesh);
+        ::fwVtkIO::helper::Mesh::updatePolyDataPointNormals(m_vtkPolyData, mesh);
+        ::fwVtkIO::helper::Mesh::updatePolyDataPointColor(m_vtkPolyData, mesh);
+        ::fwVtkIO::helper::Mesh::updatePolyDataCellNormals(m_vtkPolyData, mesh);
+    }
+
+    if (resetCamera)
+    {
+        m_render->ResetCamera();
+    }
+
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::notifyCamPositionUpdated()
+{
+    vtkCamera* camera = m_render->GetActiveCamera();
+
+    SharedArray position = SharedArray(new double[3]);
+    SharedArray focal    = SharedArray(new double[3]);
+    SharedArray viewUp   = SharedArray(new double[3]);
+
+    std::copy(camera->GetPosition(), camera->GetPosition()+3, position.get());
+    std::copy(camera->GetFocalPoint(), camera->GetFocalPoint()+3, focal.get());
+    std::copy(camera->GetViewUp(), camera->GetViewUp()+3, viewUp.get());
+
+    {
+        ::fwCom::Connection::Blocker block(m_sigCamUpdated->getConnection(m_slotUpdateCamPosition));
+        m_sigCamUpdated->asyncEmit (position, focal, viewUp);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::updateCamPosition(SharedArray positionValue,
+                                  SharedArray focalValue,
+                                  SharedArray viewUpValue)
+{
+    vtkCamera* camera = m_render->GetActiveCamera();
+
+    camera->SetPosition(positionValue.get());
+    camera->SetFocalPoint(focalValue.get());
+    camera->SetViewUp(viewUpValue.get());
+    camera->SetClippingRange(0.1, 1000000);
+
+    m_interactorManager->getInteractor()->Render();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::initPipeline()
+{
+    if(!m_bPipelineIsInit)
+    {
+        this->initVTKPipeline();
+        m_bPipelineIsInit = true;
+    }
+    else
+    {
+        m_vtkPolyData             = vtkSmartPointer<vtkPolyData>::New();
+        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        {
+            ::fwData::mt::ObjectReadLock lock(mesh);
+            ::fwVtkIO::helper::Mesh::toVTKMesh( mesh, m_vtkPolyData );
+        }
+        m_mapper->SetInputData(m_vtkPolyData);
+    }
+    m_interactorManager->getInteractor()->Render();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::updatePipeline()
+{
+    m_hiResTimer.reset();
+    m_hiResTimer.start();
+    this->updateVTKPipeline(false);
+    m_hiResTimer.stop();
+    OSLM_INFO("Vertex updating time (milli sec) = " << m_hiResTimer.getElapsedTimeInMilliSec());
+
+    m_hiResTimer.reset();
+    m_hiResTimer.start();
+    m_interactorManager->getInteractor()->Render();
+    m_hiResTimer.stop();
+    OSLM_INFO("Render time (milli sec) = " << m_hiResTimer.getElapsedTimeInMilliSec());
+}
+
+//-----------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SRenderer::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_MODIFIED_SIG, s_INIT_PIPELINE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Mesh::s_VERTEX_MODIFIED_SIG, s_UPDATE_PIPELINE_SLOT ) );
+    return connections;
+}
+
+//-----------------------------------------------------------------------------
+}
diff --git a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SSimpleMeshDeformation.cpp b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SSimpleMeshDeformation.cpp
index 2359ead..0405579 100644
--- a/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SSimpleMeshDeformation.cpp
+++ b/Bundles/LeafVisu/vtkSimpleMesh/src/vtkSimpleMesh/SSimpleMeshDeformation.cpp
@@ -1,49 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "vtkSimpleMesh/SSimpleMeshDeformation.hpp"
 
-#include <fwCom/Slots.hpp>
+#include <fwCom/Signal.hxx>
 #include <fwCom/Slots.hxx>
 
-#include <fwData/Object.hpp>
 #include <fwData/Mesh.hpp>
-#include <fwData/mt/ObjectReadToWriteLock.hpp>
+#include <fwData/Object.hpp>
 #include <fwData/mt/ObjectReadLock.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include <fwComEd/MeshMsg.hpp>
+#include <fwData/mt/ObjectReadToWriteLock.hpp>
 
 #include <fwDataTools/Mesh.hpp>
 
-#include "vtkSimpleMesh/SSimpleMeshDeformation.hpp"
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+
+#include <functional>
 
-fwServicesRegisterMacro( ::fwServices::IController , ::vtkSimpleMesh::SSimpleMeshDeformation , ::fwData::Mesh );
+fwServicesRegisterMacro( ::fwServices::IController, ::vtkSimpleMesh::SSimpleMeshDeformation, ::fwData::Mesh );
 
 namespace vtkSimpleMesh
 {
 
 const ::fwCom::Slots::SlotKeyType SSimpleMeshDeformation::s_START_DEFORMATION_SLOT = "startDeformation";
-const ::fwCom::Slots::SlotKeyType SSimpleMeshDeformation::s_STOP_DEFORMATION_SLOT = "stopDeformation";
+const ::fwCom::Slots::SlotKeyType SSimpleMeshDeformation::s_STOP_DEFORMATION_SLOT  = "stopDeformation";
 
 SSimpleMeshDeformation::SSimpleMeshDeformation() throw()
 {
-    m_slotStartDeformation = ::fwCom::newSlot( &SSimpleMeshDeformation::startDeformation, this ) ;
-    m_slotStopDeformation = ::fwCom::newSlot( &SSimpleMeshDeformation::stopDeformation, this ) ;
-    ::fwCom::HasSlots::m_slots( s_START_DEFORMATION_SLOT   , m_slotStartDeformation )
-    ( s_STOP_DEFORMATION_SLOT   , m_slotStopDeformation );
-
-#ifdef COM_LOG
-    m_slotStartDeformation->setID( s_START_DEFORMATION_SLOT );
-    m_slotStopDeformation->setID( s_STOP_DEFORMATION_SLOT );
-#endif
-
-    this->setWorker( ::fwServices::registry::ActiveWorkers::getDefault()->
-            getWorker( ::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER ) );
+    newSlot(s_START_DEFORMATION_SLOT, &SSimpleMeshDeformation::startDeformation, this);
+    newSlot(s_STOP_DEFORMATION_SLOT, &SSimpleMeshDeformation::stopDeformation, this);
 }
 
 //-----------------------------------------------------------------------------
@@ -59,16 +48,17 @@ void SSimpleMeshDeformation::starting() throw(fwTools::Failed)
     SLM_ASSERT("No valid worker for mesh deformation", m_associatedWorker);
     m_timer = m_associatedWorker->createTimer();
 
-    ::fwThread::Timer::TimeDurationType duration = ::boost::chrono::milliseconds(200) ;
+    ::fwThread::Timer::TimeDurationType duration = ::boost::chrono::milliseconds(200);
 
-    m_timer->setFunction(  ::boost::bind( &SSimpleMeshDeformation::updating, this)  );
+    m_timer->setFunction(  std::bind( &SSimpleMeshDeformation::updating, this)  );
     m_timer->setDuration(duration);
 }
 
 //-----------------------------------------------------------------------------
 
 void SSimpleMeshDeformation::configuring() throw(::fwTools::Failed)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -79,7 +69,71 @@ void SSimpleMeshDeformation::stopping() throw(fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-void SSimpleMeshDeformation::copyMesh( const ::fwData::Mesh::sptr & src, const ::fwData::Mesh::sptr & dest ) const
+void SSimpleMeshDeformation::updating() throw(fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+
+    ::fwData::mt::ObjectReadToWriteLock lock(mesh);
+    if ( mesh->getNumberOfPoints() > 0 )
+    {
+        m_hiRestimer.reset();
+        m_hiRestimer.start();
+        this->computeDeformation(m_mesh,m_transformMesh);
+        m_hiRestimer.stop();
+        OSLM_INFO("Deformation time (milli sec) = " << m_hiRestimer.getElapsedTimeInMilliSec());
+
+        lock.upgrade();
+        m_hiRestimer.reset();
+        m_hiRestimer.start();
+        copyMesh(m_transformMesh,mesh);
+        m_hiRestimer.stop();
+        OSLM_INFO("Copy time (milli sec) = " << m_hiRestimer.getElapsedTimeInMilliSec());
+        lock.downgrade();
+
+        ::fwData::Mesh::VertexModifiedSignalType::sptr sig;
+        sig = mesh->signal< ::fwData::Mesh::VertexModifiedSignalType >( ::fwData::Mesh::s_VERTEX_MODIFIED_SIG );
+        sig->asyncEmit();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SSimpleMeshDeformation::startDeformation()
+{
+    bool meshIsLoaded;
+    {
+        ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
+        ::fwData::mt::ObjectReadLock lock(mesh);
+        meshIsLoaded = mesh->getNumberOfPoints() > 0;
+    }
+
+    if ( meshIsLoaded )
+    {
+        this->initMeshBackup();
+
+        if (!m_timer->isRunning())
+        {
+            m_timer->start();
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SSimpleMeshDeformation::stopDeformation()
+{
+    if (m_timer->isRunning())
+    {
+        m_timer->stop();
+        m_transformMesh.reset();
+        m_mesh.reset();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SSimpleMeshDeformation::copyMesh( const ::fwData::Mesh::sptr& src, const ::fwData::Mesh::sptr& dest ) const
 {
     dest->setPointsArray(::fwData::Object::copy( src->getPointsArray() ));
     dest->setPointNormalsArray(::fwData::Object::copy( src->getPointNormalsArray() ));
@@ -89,20 +143,20 @@ void SSimpleMeshDeformation::copyMesh( const ::fwData::Mesh::sptr & src, const :
 //-----------------------------------------------------------------------------
 
 void SSimpleMeshDeformation::computeDeformation (
-        const ::fwData::Mesh::sptr & refMesh,
-        const ::fwData::Mesh::sptr & transformMesh,
-        float deformationPercent )
+    const ::fwData::Mesh::sptr& refMesh,
+    const ::fwData::Mesh::sptr& transformMesh,
+    float deformationPercent )
 {
     SLM_ASSERT("Deformation range must be equal to [0,1]", 0 <= deformationPercent && deformationPercent <= 1 );
 
     const float maxDeformation = 15/100.0f;
-    const float center = 2/3.0f;
+    const float center         = 2/3.0f;
 
-    ::fwComEd::helper::Mesh meshHelper(refMesh);
-    ::fwComEd::helper::Mesh transformMeshHelper(transformMesh);
+    ::fwDataTools::helper::Mesh meshHelper(refMesh);
+    ::fwDataTools::helper::Mesh transformMeshHelper(transformMesh);
 
-    ::fwData::Mesh::PointsMultiArrayType points = meshHelper.getPoints();
-    ::fwData::Mesh::PointsMultiArrayType pointsTransform = transformMeshHelper.getPoints();
+    ::fwData::Mesh::PointsMultiArrayType points              = meshHelper.getPoints();
+    ::fwData::Mesh::PointsMultiArrayType pointsTransform     = transformMeshHelper.getPoints();
     ::fwData::Mesh::PointColorsMultiArrayType colorTransform = transformMeshHelper.getPointColors();
 
     size_t nbPts = refMesh->getNumberOfPoints();
@@ -111,7 +165,7 @@ void SSimpleMeshDeformation::computeDeformation (
     float ymin = points[0][1];
     float ymax = points[0][1];
     float val;
-    for(size_t i=0; i!=nbPts; ++i)
+    for(size_t i = 0; i!=nbPts; ++i)
     {
         val = points[i][1];
         if ( val < ymin )
@@ -125,21 +179,21 @@ void SSimpleMeshDeformation::computeDeformation (
     }
 
     // Compute deformation
-    float sizeRef = ymax-ymin;
-    float yref = sizeRef * center + ymin;
-    float strafe = maxDeformation * sizeRef;
+    float sizeRef       = ymax-ymin;
+    float yref          = sizeRef * center + ymin;
+    float strafe        = maxDeformation * sizeRef;
     float currentStrafe = deformationPercent * strafe;
 
-    for(size_t i=0 ; i<nbPts ; ++i )
+    for(size_t i = 0; i<nbPts; ++i )
     {
         float y = points[i][1];
         if( y < yref )
         {
-            float val =  ( yref - y ) / ( yref - ymin ) * currentStrafe;
+            float val = ( yref - y ) / ( yref - ymin ) * currentStrafe;
             pointsTransform[i][1] = y - val;
-            colorTransform[i][0] = 255;
-            colorTransform[i][1] = 255 - 255 * ( val / strafe );
-            colorTransform[i][2] = 255 - 255 * ( val / strafe );
+            colorTransform[i][0]  = 255;
+            colorTransform[i][1]  = static_cast<fwData::Mesh::ColorValueType>(255 - 255 * ( val / strafe ));
+            colorTransform[i][2]  = static_cast<fwData::Mesh::ColorValueType>(255 - 255 * ( val / strafe ));
         }
         else
         {
@@ -155,10 +209,10 @@ void SSimpleMeshDeformation::computeDeformation (
 //-----------------------------------------------------------------------------
 
 void SSimpleMeshDeformation::computeDeformation(
-        const ::fwData::Mesh::sptr & refMesh,
-        const ::fwData::Mesh::sptr & transformMesh )
+    const ::fwData::Mesh::sptr& refMesh,
+    const ::fwData::Mesh::sptr& transformMesh )
 {
-    const  int step = 5;
+    const int step = 5;
 
     m_currentDeformation += m_currentIncrement;
     if ( m_currentDeformation == 100 )
@@ -176,94 +230,24 @@ void SSimpleMeshDeformation::computeDeformation(
 
 void SSimpleMeshDeformation::initMeshBackup()
 {
-    m_currentIncrement = 0;
-    m_currentDeformation = 0;
-
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-    ::fwData::mt::ObjectReadToWriteLock lock(mesh);
-
-    SLM_ASSERT("Data already init", ! m_transformMesh && ! m_mesh);
-
-    lock.upgrade();
-    ::fwDataTools::Mesh::generatePointNormals(mesh);
-    mesh->allocatePointColors( ::fwData::Mesh::RGB );
-    lock.downgrade();
-
-    m_mesh = ::fwData::Object::copy( mesh );
-
-    m_transformMesh = ::fwData::Object::copy( mesh );
-}
-
-//-----------------------------------------------------------------------------
-
-void SSimpleMeshDeformation::updating() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-
-    ::fwData::mt::ObjectReadToWriteLock lock(mesh);
-    if ( mesh->getNumberOfPoints() > 0 )
+    SLM_WARN_IF("Data already init", m_transformMesh || m_mesh);
+    if (!m_mesh && !m_transformMesh)
     {
-        m_hiRestimer.reset();
-        m_hiRestimer.start();
-        this->computeDeformation(m_mesh,m_transformMesh);
-        m_hiRestimer.stop();
-        OSLM_INFO("Deformation time (milli sec) = " << m_hiRestimer.getElapsedTimeInMilliSec());
-
-        lock.upgrade();
-        m_hiRestimer.reset();
-        m_hiRestimer.start();
-        copyMesh(m_transformMesh,mesh);
-        m_hiRestimer.stop();
-        OSLM_INFO("Copy time (milli sec) = " << m_hiRestimer.getElapsedTimeInMilliSec());
-        lock.downgrade();
-
-        ::fwComEd::MeshMsg::sptr msg = ::fwComEd::MeshMsg::New();;
-        msg->addEvent( ::fwComEd::MeshMsg::VERTEX_MODIFIED ) ;
+        m_currentIncrement   = 0;
+        m_currentDeformation = 0;
 
-        ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-        sig = mesh->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-        fwServicesBlockAndNotifyMsgMacro( this->getLightID(), sig, msg, m_slotReceive );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void SSimpleMeshDeformation::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(fwTools::Failed)
-{}
-
-//-----------------------------------------------------------------------------
-
-void SSimpleMeshDeformation::startDeformation()
-{
-    bool meshIsLoaded;
-    {
         ::fwData::Mesh::sptr mesh = this->getObject< ::fwData::Mesh >();
-        ::fwData::mt::ObjectReadLock lock(mesh);
-        meshIsLoaded = mesh->getNumberOfPoints() > 0;
-    }
+        ::fwData::mt::ObjectReadToWriteLock lock(mesh);
 
-    if ( meshIsLoaded )
-    {
-        this->initMeshBackup();
 
-        if (!m_timer->isRunning())
-        {
-            m_timer->start();
-        }
-    }
-}
+        lock.upgrade();
+        ::fwDataTools::Mesh::generatePointNormals(mesh);
+        mesh->allocatePointColors( ::fwData::Mesh::RGB );
+        lock.downgrade();
 
-//-----------------------------------------------------------------------------
+        m_mesh = ::fwData::Object::copy( mesh );
 
-void SSimpleMeshDeformation::stopDeformation()
-{
-    if (m_timer->isRunning())
-    {
-        m_timer->stop();
-        m_transformMesh.reset();
-        m_mesh.reset();
+        m_transformMesh = ::fwData::Object::copy( mesh );
     }
 }
 
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/CMakeLists.txt b/Bundles/LeafVisu/vtkSimpleNegato/CMakeLists.txt
index df54680..b9e460f 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/CMakeLists.txt
+++ b/Bundles/LeafVisu/vtkSimpleNegato/CMakeLists.txt
@@ -1,18 +1,12 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRender
-    fwRenderVTK
-    fwRuntime
-)
 
-find_package(Boost REQUIRED)
-find_package(VTK REQUIRED)
+find_package(VTK COMPONENTS vtkInteractionWidgets REQUIRED NO_MODULE)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${VTK_INCLUDE_DIRS} 
-    )
+)
 fwLink(
-    vtkWidgets
-    )
+    ${VTK_LIBRARIES}
+    
+)
 
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/COPYING b/Bundles/LeafVisu/vtkSimpleNegato/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/LeafVisu/vtkSimpleNegato/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/COPYING.LESSER b/Bundles/LeafVisu/vtkSimpleNegato/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/LeafVisu/vtkSimpleNegato/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/Properties.cmake b/Bundles/LeafVisu/vtkSimpleNegato/Properties.cmake
index 5c4d501..f7bc4f3 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/Properties.cmake
+++ b/Bundles/LeafVisu/vtkSimpleNegato/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME vtkSimpleNegato )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwData fwRender fwRenderVTK fwRuntime fwServices fwVtkIO )
+set( DEPENDENCIES fwCom fwCore fwTools fwData fwRender fwRenderVTK fwRuntime fwServices fwVtkIO fwGui)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/bin/build.options b/Bundles/LeafVisu/vtkSimpleNegato/bin/build.options
deleted file mode 100644
index a5b0415..0000000
--- a/Bundles/LeafVisu/vtkSimpleNegato/bin/build.options
+++ /dev/null
@@ -1,16 +0,0 @@
-TYPE    = 'bundle'
-USE     = ['vtkWidgets','boost']
-LIB     = [
-          'fwCore_0-1',
-          'fwRuntime_0-3',
-          'fwData_0-1',
-          'fwServices_0-1',
-          'fwComEd_0-1',
-          'fwVtkIO_0-1',
-          'fwTools_0-1',
-          'fwGui_0-1',
-          'fwDataIO_0-2',
-          'fwRender_0-1',
-          'fwRenderVTK_0-1'
-          ]
-VERSION = '0-1'
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Namespace.hpp b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Namespace.hpp
index 1e8aa7d..5018dea 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Namespace.hpp
+++ b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Namespace.hpp
@@ -1,20 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef VTKSIMPLENEGATONAMESPACE_HPP_
-#define VTKSIMPLENEGATONAMESPACE_HPP_
+#ifndef __VTKSIMPLENEGATO_NAMESPACE_HPP__
+#define __VTKSIMPLENEGATO_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace vtkSimpleNegato has a visualization service of medical image (::fwData::Image).
  * @namespace   vtkSimpleNegato
- * 
- * @date        2009-2010.
- *
  */
 namespace vtkSimpleNegato
 {
 }
-#endif /* VTKSIMPLENEGATONAMESPACE_HPP_ */
+#endif /* __VTKSIMPLENEGATO_NAMESPACE_HPP__ */
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Plugin.hpp b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Plugin.hpp
index 588ecc6..8d4ee70 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Plugin.hpp
+++ b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKSIMPLENEGATO_PLUGIN_HPP_
-#define _VTKSIMPLENEGATO_PLUGIN_HPP_
+#ifndef __VTKSIMPLENEGATO_PLUGIN_HPP__
+#define __VTKSIMPLENEGATO_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -13,7 +13,7 @@
 /**
  * @brief   Namespace vtkSimpleNegato.
  * @namespace   vtkSimpleNegato
- * 
+ *
  * @date    2009.
  *
  *  The namespace vtkSimpleNegato contains a simple negato renderer using vtk.
@@ -28,24 +28,24 @@ public:
      * @brief   Destructor
      */
     ~Plugin() throw();
-    
+
     /**
-    * @brief Start method.
-    *
-    * @exception ::fwRuntime::RuntimeException.
-    * This method is used by runtime to initialize the bundle.
-    */
+     * @brief Start method.
+     *
+     * @exception ::fwRuntime::RuntimeException.
+     * This method is used by runtime to initialize the bundle.
+     */
     void start() throw(::fwRuntime::RuntimeException);
 
     /**
-    * @brief Stop method.
-    *
-    * This method is used by runtime to stop the bundle.
-    */
+     * @brief Stop method.
+     *
+     * This method is used by runtime to stop the bundle.
+     */
     void stop() throw();
-    
+
 };
 
 } // namespace vtkSimpleNegato
 
-#endif //_VTKSIMPLENEGATO_PLUGIN_HPP_
+#endif //__VTKSIMPLENEGATO_PLUGIN_HPP__
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/RendererService.hpp b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/RendererService.hpp
deleted file mode 100644
index a763fe6..0000000
--- a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/RendererService.hpp
+++ /dev/null
@@ -1,136 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VTKSIMPLENEGATO_RENDERER_SERVICE_HPP_
-#define VTKSIMPLENEGATO_RENDERER_SERVICE_HPP_
-
-
-#include  <vtkRenderer.h>
-#include  <vtkImagePlaneWidget.h>
-#include  <vtkOutlineFilter.h>
-
-#include <fwRender/IRender.hpp>
-
-#include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
-
-#include "vtkSimpleNegato/config.hpp"
-
-namespace vtkSimpleNegato
-{
-
-/**
-* @brief    Renderer service.
-* @class    RendererService
-* 
-* @date 2009.
-*
-* Service rendering a ::fwData::Image using VTK.
-*
-* Service registered details : \n
-* fwServicesRegisterMacro( ::fwRender::IRender , ::vtkSimpleNegato::RendererService , ::fwData::Image)
-*/
-class VTKSIMPLENEGATO_CLASS_API RendererService : public fwRender::IRender
-{
-public :
-    fwCoreServiceClassDefinitionsMacro ( (RendererService)(::fwRender::IRender) );
-
-    /**
-    * @brief    Constructor
-    */
-    VTKSIMPLENEGATO_API RendererService() throw() ;
-
-    /**
-    * @brief    Destructor
-    */
-    VTKSIMPLENEGATO_API virtual ~RendererService() throw() ;
-
-
-protected :
-
-    /**
-    * @brief Starting method.
-    *
-    * This method is used to initialize the service.
-    * Initialize VTK renderer and wxWidget containers
-    */
-    VTKSIMPLENEGATO_API virtual void starting() throw(fwTools::Failed);
-
-    /**
-    * @brief Stopping method.
-    *
-    * Destroy VTK renderer and wxWidget containers
-    */
-    VTKSIMPLENEGATO_API virtual void stopping() throw(fwTools::Failed);
-
-    /**
-    * @brief Updating method.
-    *
-    * This method is used to update the service.
-    * Make a render if necessary
-    */
-    VTKSIMPLENEGATO_API virtual void updating() throw(fwTools::Failed);
-
-    /**
-    * @brief Configuring method.
-    *
-    * This method is used to configure the service.
-    */
-    VTKSIMPLENEGATO_API virtual void configuring() throw(::fwTools::Failed);
-
-    /**
-    * @brief Receiving method (react on data modifications).
-    * @param[in] _msg ::fwServices::ObjectMsg::csptr
-    *
-    * This method is used to update the service.
-    */
-    VTKSIMPLENEGATO_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /// @brief vtk renderer
-    vtkRenderer * m_render ;
-
-private :
-
-    /// @brief VTK Interactor window manager
-    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
-
-    /**
-    * @brief VTK pipeline initialization method.
-    *
-    * This method is used to initialize the VTK pipeline.
-    */
-    void initVTKPipeline();
-
-    void refresh();
-    /**
-    * @brief VTK pipeline updating method.
-    *
-    * This method is used to update the VTK pipeline.
-    */
-    void updateVTKPipeline();
-
-    /// @brief image wireframe outline.
-    vtkOutlineFilter* m_outline;
-
-    /// @brief vtk widget used in the negatoscope axial plane.
-    vtkImagePlaneWidget* m_negatoAxial;
-
-    /// @brief vtk widget used in the negatoscope sagittal plane.
-    vtkImagePlaneWidget* m_negatoSagittal;
-
-    /// @brief vtk widget used in the negatoscope frontal plane.
-    vtkImagePlaneWidget* m_negatoFrontal;
-
-    /**
-    * @brief the m_bPipelineIsInit value is \b true
-    * if the pipeline is initialized.
-    */
-    bool m_bPipelineIsInit;
-};
-
-}
-
-
-#endif /* VTKSIMPLENEGATO_RENDERER_SERVICE_HPP_ */
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp
new file mode 100644
index 0000000..65f9d4e
--- /dev/null
+++ b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/SRenderer.hpp
@@ -0,0 +1,132 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VTKSIMPLENEGATO_SRENDERER_HPP__
+#define __VTKSIMPLENEGATO_SRENDERER_HPP__
+
+
+#include "vtkSimpleNegato/config.hpp"
+
+#include <fwRender/IRender.hpp>
+
+#include <fwRenderVTK/IVtkRenderWindowInteractorManager.hpp>
+
+#include  <vtkImagePlaneWidget.h>
+#include  <vtkOutlineFilter.h>
+#include  <vtkRenderer.h>
+
+namespace vtkSimpleNegato
+{
+
+/**
+ * @brief    Service rendering a ::fwData::Image using VTK.
+ * @class    SRenderer
+ *
+ * This service displays a 3D image in a scene.
+ */
+class VTKSIMPLENEGATO_CLASS_API SRenderer : public fwRender::IRender
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SRenderer)(::fwRender::IRender) );
+
+    /**
+     * @brief    Constructor
+     */
+    VTKSIMPLENEGATO_API SRenderer() throw();
+
+    /**
+     * @brief    Destructor
+     */
+    VTKSIMPLENEGATO_API virtual ~SRenderer() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Image::s_MODIFIED_SIG to this::s_REFRESH_SLOT
+     * Connect Image::s_BUFFER_MODIFIED_SIG to this::s_REFRESH_SLOT
+     */
+    VTKSIMPLENEGATO_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
+
+    /**
+     * @brief Starting method.
+     *
+     * This method is used to initialize the service.
+     * Initialize VTK renderer and gui containers
+     */
+    VTKSIMPLENEGATO_API virtual void starting() throw(fwTools::Failed);
+
+    /**
+     * @brief Stopping method.
+     *
+     * Destroy VTK renderer and gui containers
+     */
+    VTKSIMPLENEGATO_API virtual void stopping() throw(fwTools::Failed);
+
+    /**
+     * @brief Updating method.
+     *
+     * This method is used to update the service.
+     * Make a render if necessary
+     */
+    VTKSIMPLENEGATO_API virtual void updating() throw(fwTools::Failed);
+
+    /**
+     * @brief This method is used to configure the service.
+     *
+     * It initializes the qt container.
+     */
+    VTKSIMPLENEGATO_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// @brief vtk renderer
+    vtkRenderer * m_render;
+
+private:
+
+    /// @brief VTK Interactor window manager
+    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
+
+    /**
+     * @brief VTK pipeline initialization method.
+     *
+     * This method is used to initialize the VTK pipeline.
+     */
+    void initVTKPipeline();
+
+    /// Slot: refresh the scene
+    void refresh();
+    /**
+     * @brief VTK pipeline updating method.
+     *
+     * This method is used to update the VTK pipeline.
+     */
+    void updateVTKPipeline();
+
+    /// @brief image wireframe outline.
+    vtkOutlineFilter* m_outline;
+
+    /// @brief vtk widget used in the negatoscope axial plane.
+    vtkImagePlaneWidget* m_negatoAxial;
+
+    /// @brief vtk widget used in the negatoscope sagittal plane.
+    vtkImagePlaneWidget* m_negatoSagittal;
+
+    /// @brief vtk widget used in the negatoscope frontal plane.
+    vtkImagePlaneWidget* m_negatoFrontal;
+
+    /**
+     * @brief the m_bPipelineIsInit value is \b true
+     * if the pipeline is initialized.
+     */
+    bool m_bPipelineIsInit;
+};
+
+}
+
+
+#endif /* __VTKSIMPLENEGATO_SRENDERER_HPP__ */
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/config.hpp b/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/config.hpp
deleted file mode 100644
index 0e7514a..0000000
--- a/Bundles/LeafVisu/vtkSimpleNegato/include/vtkSimpleNegato/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VTKSIMPLENEGATO_CONFIG_HPP_
-#define VTKSIMPLENEGATO_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VTKSIMPLENEGATO_EXPORTS
-    #define VTKSIMPLENEGATO_API __declspec(dllexport)
-    #else
-    #define VTKSIMPLENEGATO_API __declspec(dllimport)
-    #endif
-
-    #define VTKSIMPLENEGATO_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VTKSIMPLENEGATO_EXPORTS
-    #define VTKSIMPLENEGATO_API __attribute__ ((visibility("default")))
-    #define VTKSIMPLENEGATO_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VTKSIMPLENEGATO_API __attribute__ ((visibility("hidden")))
-    #define VTKSIMPLENEGATO_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VTKSIMPLENEGATO_API
-    #define VTKSIMPLENEGATO_CLASS_API
-
-#endif
-
-#endif //VTKSIMPLENEGATO_CONFIG_HPP_
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/rc/plugin.xml b/Bundles/LeafVisu/vtkSimpleNegato/rc/plugin.xml
index c05367e..b476cb7 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/rc/plugin.xml
+++ b/Bundles/LeafVisu/vtkSimpleNegato/rc/plugin.xml
@@ -1,10 +1,10 @@
-<plugin id="vtkSimpleNegato" class="::vtkSimpleNegato::Plugin" >
+<plugin id="vtkSimpleNegato" class="::vtkSimpleNegato::Plugin"  version="@DASH_VERSION@" >
     <library name="vtkSimpleNegato" />
 
 
 <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwRender::IRender</type>
-        <service>::vtkSimpleNegato::RendererService</service>
+        <service>::vtkSimpleNegato::SRenderer</service>
         <object>::fwData::Image</object>
     </extension>
 
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/Plugin.cpp b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/Plugin.cpp
index 288f65c..5a97972 100644
--- a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/Plugin.cpp
+++ b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace vtkSimpleNegato
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::vtkSimpleNegato::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace vtkSimpleNegato
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/RendererService.cpp b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/RendererService.cpp
deleted file mode 100644
index 64f2811..0000000
--- a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/RendererService.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vtkCellPicker.h>
-#include <vtkCommand.h>
-#include <vtkImageData.h>
-#include <vtkLookupTable.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkProperty.h>
-#include <vtkRenderWindow.h>
-#include <vtkSmartPointer.h>
-
-#include <fwData/Image.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwVtkIO/vtk.hpp>
-
-#include "vtkSimpleNegato/RendererService.hpp"
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwRender::IRender , ::vtkSimpleNegato::RendererService , ::fwData::Image) ;
-
-//-----------------------------------------------------------------------------
-
-namespace vtkSimpleNegato
-{
-
-//-----------------------------------------------------------------------------
-
-RendererService::RendererService() throw()
-    : m_render( 0 ), m_bPipelineIsInit(false)
-{
-    SLM_TRACE_FUNC();
-    //this->addNewHandledEvent(::fwComEd::ImageMsg::NEW_IMAGE );
-    //this->addNewHandledEvent(::fwComEd::ImageMsg::BUFFER );
-}
-
-//-----------------------------------------------------------------------------
-
-RendererService::~RendererService() throw()
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::configuring() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::starting() throw(fwTools::Failed)
-{
-    this->create();
-
-    m_interactorManager = ::fwRenderVTK::IVtkRenderWindowInteractorManager::createManager();
-    m_interactorManager->installInteractor( this->getContainer() );
-
-    m_bPipelineIsInit = false;
-
-    // Renderer
-    m_render = vtkRenderer::New();
-    m_interactorManager->getInteractor()->GetRenderWindow()->AddRenderer(m_render);
-
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::stopping() throw(fwTools::Failed)
-{
-    if( m_render == 0 ) return;
-
-    if(m_bPipelineIsInit)
-    {
-        m_negatoSagittal->Delete();
-        m_negatoFrontal->Delete();
-        m_negatoAxial->Delete();
-        m_outline->Delete();
-    }
-
-    SLM_ASSERT("m_render not instanced", m_render);
-    m_render->Delete();
-    m_render = 0;
-
-    m_interactorManager->uninstallInteractor();
-    m_interactorManager.reset();
-
-//    this->getContainer()->clean();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::updating() throw(fwTools::Failed)
-{
-
-//    m_interactorManager->getInteractor()->Render();
-    refresh();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(fwTools::Failed)
-{
-    // If message is a ImageMsg
-    ::fwComEd::ImageMsg::csptr pImageMsg = ::fwComEd::ImageMsg::dynamicConstCast( _msg ) ;
-    if (pImageMsg)
-    {
-        if( pImageMsg->hasEvent( ::fwComEd::ImageMsg::NEW_IMAGE ) || pImageMsg->hasEvent( ::fwComEd::ImageMsg::BUFFER ))
-        {
-            refresh();
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::refresh()
-{
-    ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
-    bool imageIsValid = ::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
-    if(imageIsValid )
-    {
-        if(!m_bPipelineIsInit)
-        {
-            initVTKPipeline();
-            m_bPipelineIsInit = true;
-        }
-        else
-        {
-            updateVTKPipeline();
-        }
-
-
-        //
-        unsigned int axialIndex = img->getSize()[2]/2;
-        unsigned int frontalIndex = img->getSize()[1]/2;
-        unsigned int sagittalIndex = img->getSize()[0]/2;
-
-        m_negatoAxial->SetSliceIndex( axialIndex );
-        m_negatoFrontal->SetSliceIndex( frontalIndex );
-        m_negatoSagittal->SetSliceIndex( sagittalIndex );
-        m_interactorManager->getInteractor()->Render();
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::initVTKPipeline()
-{
-    vtkSmartPointer< vtkImageData > vtk_img = vtkSmartPointer< vtkImageData >::New();
-    ::fwVtkIO::toVTKImage( this->getObject< ::fwData::Image >(), vtk_img);
-
-    m_outline = vtkOutlineFilter::New();
-    m_outline->SetInput(vtk_img);
-
-    vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper::New();
-    outlineMapper->SetInputConnection(m_outline->GetOutputPort());
-
-    vtkActor* outlineActor =  vtkActor::New();
-    outlineActor->SetMapper( outlineMapper);
-
-    vtkCellPicker* picker = vtkCellPicker::New();
-    picker->SetTolerance(0.005);
-
-    //assign default props to the ipw's texture plane actor
-
-    m_negatoSagittal = vtkImagePlaneWidget::New();
-    m_negatoSagittal->SetInteractor( m_interactorManager->getInteractor() );
-    m_negatoSagittal->SetKeyPressActivationValue('x');
-    m_negatoSagittal->SetPicker(picker);
-    m_negatoSagittal->GetPlaneProperty()->SetColor(1,0,0);
-    m_negatoSagittal->TextureInterpolateOn();
-    m_negatoSagittal->SetInput(vtk_img);
-    m_negatoSagittal->SetPlaneOrientationToXAxes();
-    m_negatoSagittal->DisplayTextOn();
-    m_negatoSagittal->On();
-    m_negatoSagittal->InteractionOn();
-
-    m_negatoFrontal = vtkImagePlaneWidget::New();
-    m_negatoFrontal->SetInteractor( m_interactorManager->getInteractor() );
-    m_negatoFrontal->SetKeyPressActivationValue('y');
-    m_negatoFrontal->SetPicker(picker);
-    m_negatoFrontal->GetPlaneProperty()->SetColor(0,1,0);
-    m_negatoFrontal->TextureInterpolateOn();
-    m_negatoFrontal->SetInput(vtk_img);
-    m_negatoFrontal->SetPlaneOrientationToYAxes();
-    m_negatoFrontal->SetLookupTable( m_negatoSagittal->GetLookupTable());
-    m_negatoFrontal->DisplayTextOn();
-    m_negatoFrontal->UpdatePlacement();
-    m_negatoFrontal->On();
-
-    m_negatoAxial = vtkImagePlaneWidget::New();
-    m_negatoAxial->SetInteractor( m_interactorManager->getInteractor() );
-    m_negatoAxial->SetKeyPressActivationValue('z');
-    m_negatoAxial->SetPicker(picker);
-    m_negatoAxial->GetPlaneProperty()->SetColor(0,0,1);
-    m_negatoAxial->TextureInterpolateOn();
-    m_negatoAxial->SetInput(vtk_img);
-    m_negatoAxial->SetPlaneOrientationToZAxes();
-    m_negatoAxial->SetLookupTable( m_negatoSagittal->GetLookupTable());
-    m_negatoAxial->DisplayTextOn();
-    m_negatoAxial->On();
-
-    // Add the actors
-    m_render->AddActor( outlineActor);
-
-    // Repaint and resize window
-    m_render->ResetCamera();
-
-    picker->Delete();
-    outlineActor->Delete();
-    outlineMapper->Delete();
-}
-
-//-----------------------------------------------------------------------------
-
-void RendererService::updateVTKPipeline()
-{
-    assert(this->getObject< ::fwData::Image >());
-    vtkSmartPointer< vtkImageData > vtk_img = vtkSmartPointer< vtkImageData >::New();
-    ::fwVtkIO::toVTKImage( this->getObject< ::fwData::Image >(), vtk_img);
-
-    m_outline->SetInput(vtk_img);
-    m_negatoSagittal->SetInput(vtk_img);
-    m_negatoFrontal->SetInput(vtk_img);
-    m_negatoAxial->SetInput(vtk_img);
-}
-
-//-----------------------------------------------------------------------------
-
-}
diff --git a/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp
new file mode 100644
index 0000000..95119f4
--- /dev/null
+++ b/Bundles/LeafVisu/vtkSimpleNegato/src/vtkSimpleNegato/SRenderer.cpp
@@ -0,0 +1,247 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "vtkSimpleNegato/SRenderer.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Image.hpp>
+
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwVtkIO/vtk.hpp>
+
+#include <vtkCellPicker.h>
+#include <vtkCommand.h>
+#include <vtkImageData.h>
+#include <vtkLookupTable.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkProperty.h>
+#include <vtkRenderWindow.h>
+#include <vtkSmartPointer.h>
+
+//-----------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwRender::IRender, ::vtkSimpleNegato::SRenderer, ::fwData::Image);
+
+//-----------------------------------------------------------------------------
+
+namespace vtkSimpleNegato
+{
+
+static const ::fwCom::Slots::SlotKeyType s_REFRESH_SLOT = "refresh";
+
+//-----------------------------------------------------------------------------
+
+SRenderer::SRenderer() throw()
+    : m_render( 0 ), m_bPipelineIsInit(false)
+{
+    SLM_TRACE_FUNC();
+    newSlot(s_REFRESH_SLOT, &SRenderer::refresh, this);
+}
+
+//-----------------------------------------------------------------------------
+
+SRenderer::~SRenderer() throw()
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::configuring() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::starting() throw(fwTools::Failed)
+{
+    this->create();
+
+    m_interactorManager = ::fwRenderVTK::IVtkRenderWindowInteractorManager::createManager();
+    m_interactorManager->installInteractor( this->getContainer() );
+
+    m_bPipelineIsInit = false;
+
+    // Renderer
+    m_render = vtkRenderer::New();
+    m_interactorManager->getInteractor()->GetRenderWindow()->AddRenderer(m_render);
+
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::stopping() throw(fwTools::Failed)
+{
+    if( m_render == 0 )
+    {
+        return;
+    }
+
+    if(m_bPipelineIsInit)
+    {
+        m_negatoSagittal->Delete();
+        m_negatoFrontal->Delete();
+        m_negatoAxial->Delete();
+        m_outline->Delete();
+    }
+
+    SLM_ASSERT("m_render not instanced", m_render);
+    m_render->Delete();
+    m_render = 0;
+
+    m_interactorManager->uninstallInteractor();
+    m_interactorManager.reset();
+
+//    this->getContainer()->clean();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::updating() throw(fwTools::Failed)
+{
+
+//    m_interactorManager->getInteractor()->Render();
+    refresh();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::refresh()
+{
+    ::fwData::Image::sptr img = this->getObject< ::fwData::Image >();
+    bool imageIsValid = ::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity( img );
+    if(imageIsValid )
+    {
+        if(!m_bPipelineIsInit)
+        {
+            initVTKPipeline();
+            m_bPipelineIsInit = true;
+        }
+        else
+        {
+            updateVTKPipeline();
+        }
+
+
+        //
+        int axialIndex    = static_cast<int>(img->getSize()[2]/2);
+        int frontalIndex  = static_cast<int>(img->getSize()[1]/2);
+        int sagittalIndex = static_cast<int>(img->getSize()[0]/2);
+
+        m_negatoAxial->SetSliceIndex( axialIndex );
+        m_negatoFrontal->SetSliceIndex( frontalIndex );
+        m_negatoSagittal->SetSliceIndex( sagittalIndex );
+        m_interactorManager->getInteractor()->Render();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::initVTKPipeline()
+{
+    vtkSmartPointer< vtkImageData > vtk_img = vtkSmartPointer< vtkImageData >::New();
+    ::fwVtkIO::toVTKImage( this->getObject< ::fwData::Image >(), vtk_img);
+
+    m_outline = vtkOutlineFilter::New();
+    m_outline->SetInputData(vtk_img);
+
+    vtkPolyDataMapper* outlineMapper = vtkPolyDataMapper::New();
+    outlineMapper->SetInputConnection(m_outline->GetOutputPort());
+
+    vtkActor* outlineActor = vtkActor::New();
+    outlineActor->SetMapper( outlineMapper);
+
+    vtkCellPicker* picker = vtkCellPicker::New();
+    picker->SetTolerance(0.005);
+
+    //assign default props to the ipw's texture plane actor
+
+    m_negatoSagittal = vtkImagePlaneWidget::New();
+    m_negatoSagittal->SetInteractor( m_interactorManager->getInteractor() );
+    m_negatoSagittal->SetKeyPressActivationValue('x');
+    m_negatoSagittal->SetPicker(picker);
+    m_negatoSagittal->GetPlaneProperty()->SetColor(1,0,0);
+    m_negatoSagittal->TextureInterpolateOn();
+    m_negatoSagittal->SetInputData(vtk_img);
+    m_negatoSagittal->SetPlaneOrientationToXAxes();
+    m_negatoSagittal->DisplayTextOn();
+    m_negatoSagittal->On();
+    m_negatoSagittal->InteractionOn();
+
+    m_negatoFrontal = vtkImagePlaneWidget::New();
+    m_negatoFrontal->SetInteractor( m_interactorManager->getInteractor() );
+    m_negatoFrontal->SetKeyPressActivationValue('y');
+    m_negatoFrontal->SetPicker(picker);
+    m_negatoFrontal->GetPlaneProperty()->SetColor(0,1,0);
+    m_negatoFrontal->TextureInterpolateOn();
+    m_negatoFrontal->SetInputData(vtk_img);
+    m_negatoFrontal->SetPlaneOrientationToYAxes();
+    m_negatoFrontal->SetLookupTable( m_negatoSagittal->GetLookupTable());
+    m_negatoFrontal->DisplayTextOn();
+    m_negatoFrontal->UpdatePlacement();
+    m_negatoFrontal->On();
+
+    m_negatoAxial = vtkImagePlaneWidget::New();
+    m_negatoAxial->SetInteractor( m_interactorManager->getInteractor() );
+    m_negatoAxial->SetKeyPressActivationValue('z');
+    m_negatoAxial->SetPicker(picker);
+    m_negatoAxial->GetPlaneProperty()->SetColor(0,0,1);
+    m_negatoAxial->TextureInterpolateOn();
+    m_negatoAxial->SetInputData(vtk_img);
+    m_negatoAxial->SetPlaneOrientationToZAxes();
+    m_negatoAxial->SetLookupTable( m_negatoSagittal->GetLookupTable());
+    m_negatoAxial->DisplayTextOn();
+    m_negatoAxial->On();
+
+    // Add the actors
+    m_render->AddActor( outlineActor);
+
+    // Repaint and resize window
+    m_render->ResetCamera();
+
+    picker->Delete();
+    outlineActor->Delete();
+    outlineMapper->Delete();
+}
+
+//-----------------------------------------------------------------------------
+
+void SRenderer::updateVTKPipeline()
+{
+    assert(this->getObject< ::fwData::Image >());
+    vtkSmartPointer< vtkImageData > vtk_img = vtkSmartPointer< vtkImageData >::New();
+    ::fwVtkIO::toVTKImage( this->getObject< ::fwData::Image >(), vtk_img);
+
+    m_outline->SetInputData(vtk_img);
+    m_negatoSagittal->SetInputData(vtk_img);
+    m_negatoFrontal->SetInputData(vtk_img);
+    m_negatoAxial->SetInputData(vtk_img);
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SRenderer::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Image::s_MODIFIED_SIG, s_REFRESH_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_REFRESH_SLOT ) );
+
+    return connections;
+}
+
+//-----------------------------------------------------------------------------
+
+}
diff --git a/Bundles/core/activities/CMakeLists.txt b/Bundles/core/activities/CMakeLists.txt
index 70a6e7c..423bbcc 100644
--- a/Bundles/core/activities/CMakeLists.txt
+++ b/Bundles/core/activities/CMakeLists.txt
@@ -1,19 +1,21 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwActivities
-    fwGui
-    fwRuntime
-    fwTools
-)
-
-Find_package (Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
 
 
-fwForwardInclude(${Boost_INCLUDE_DIRS} ${QT_INCLUDE_DIR})
-fwLink(${QT_LIBRARIES})
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
+find_package (Boost COMPONENTS regex REQUIRED)
 
-#set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
+fwForwardInclude(
+    ${Boost_INCLUDE_DIRS}
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+)
 
+fwLink(
+    ${Boost_REGEX_LIBRARY}
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+)
 
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/Bundles/core/activities/Properties.cmake b/Bundles/core/activities/Properties.cmake
index 33eb81c..2cb36ff 100644
--- a/Bundles/core/activities/Properties.cmake
+++ b/Bundles/core/activities/Properties.cmake
@@ -2,6 +2,19 @@
 set( NAME activities )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwActivities fwCom fwComEd fwData fwDataCamp fwGui fwMedData fwRuntime fwServices fwTools gui )
+set( DEPENDENCIES 
+    fwCore 
+    fwActivities
+    fwCom
+    fwData
+    fwDataCamp
+    fwGui
+    fwGuiQt
+    fwMedData
+    fwRuntime
+    fwServices
+    fwTools
+    gui
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/activities/bin/build.options b/Bundles/core/activities/bin/build.options
deleted file mode 100644
index 1d1addc..0000000
--- a/Bundles/core/activities/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE    = 'bundle'
-USE     = ['boost']
-LIB     = [
-          'fwRuntime_0-3',
-          'fwGui_0-1',
-          'fwGuiQt_0-1',
-          'fwActivities_0-1',
-          'fwDataCamp_0-1',
-          ]
-BUNDLES = ['gui_0-1']
-VERSION = '0-1'
diff --git a/Bundles/core/activities/include/activities/Plugin.hpp b/Bundles/core/activities/include/activities/Plugin.hpp
index 3480b02..a6b122e 100644
--- a/Bundles/core/activities/include/activities/Plugin.hpp
+++ b/Bundles/core/activities/include/activities/Plugin.hpp
@@ -1,5 +1,11 @@
-#ifndef _ACTIVITIES_PLUGIN_HPP_
-#define _ACTIVITIES_PLUGIN_HPP_
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __ACTIVITIES_PLUGIN_HPP__
+#define __ACTIVITIES_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 #include "activities/config.hpp"
@@ -7,7 +13,7 @@
 namespace activities
 {
 /**
- * 
+ *
  * @date    2012.
  */
 struct ACTIVITIES_CLASS_API Plugin : public ::fwRuntime::Plugin
@@ -27,4 +33,4 @@ struct ACTIVITIES_CLASS_API Plugin : public ::fwRuntime::Plugin
 
 } // namespace activities
 
-#endif //_ACTIVITIES_PLUGIN_HPP_
+#endif //__ACTIVITIES_PLUGIN_HPP__
diff --git a/Bundles/core/activities/include/activities/SSeriesSignal.hpp b/Bundles/core/activities/include/activities/SSeriesSignal.hpp
new file mode 100644
index 0000000..7619539
--- /dev/null
+++ b/Bundles/core/activities/include/activities/SSeriesSignal.hpp
@@ -0,0 +1,124 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __ACTIVITIES_SSERIESSIGNAL_HPP__
+#define __ACTIVITIES_SSERIESSIGNAL_HPP__
+
+#include "activities/config.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Series.hpp>
+
+#include <fwServices/IController.hpp>
+
+namespace activities
+{
+
+/**
+ * @brief This service emits a signal for each added series (the signal contains the added series)
+ *
+ * This action works on a ::fwMedData::SeriesDB. It listens all the added series in the SeriesDB and emits the signal.
+ *
+ * It is possible to configure the service to report only one type of series.
+ *
+ * @section Slots Slots
+ * - \b reportSeries(::fwMedData::SeriesDB::ContainerType) : This slot is called when a series is added in the SeriesDB.
+ *   It emits a signal for each added series corresponding to the configured type.
+ *
+ * @section Signal Signal
+ * - \b seriesAdded(::fwMedData::Series::sptr) : This signal is emitted when the added series correspond to the
+ *   configured type.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+    <service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SSeriesSignal" autoConnect="yes" >
+        <!-- Filter mode 'include' allows all given types.
+             Filter mode 'exclude' allows all series excepted given ones. -->
+        <filter>
+            <mode>include</mode>
+            <type>::fwMedData::ImageSeries</type>
+            <type>::fwMedData::ModelSeries</type>
+        </filter>
+    </service>
+        @endcode
+ * - \b filter (optional): it allows to filter the series that can be notified.
+ *    - \b mode: 'include' or 'exclude'. Defines if the series is notified (include) or not (exclude).
+ *    - \b id: id of the activity
+ */
+class ACTIVITIES_CLASS_API SSeriesSignal : public ::fwServices::IController
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SSeriesSignal)(::fwServices::IController) );
+
+    /// Constructor. Do nothing.
+    ACTIVITIES_API SSeriesSignal() throw();
+
+    /// Destructor. Do nothing.
+    ACTIVITIES_API virtual ~SSeriesSignal() throw();
+
+    ACTIVITIES_API static const ::fwCom::Slots::SlotKeyType s_REPORT_SERIES_SLOT;
+
+    typedef ::fwCom::Signal< void ( ::fwMedData::Series::sptr ) > SeriesAddedSignalType;
+    ACTIVITIES_API static const ::fwCom::Signals::SignalKeyType s_SERIES_ADDED_SIG;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Vector::s_ADDED_OBJECTS_SIG to this::s_UPDATE_STATE_SLOT
+     * Connect Vector::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_STATE_SLOT
+     */
+    ACTIVITIES_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+protected:
+
+    /// Do nothing
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Parse XML configuration
+    virtual void configuring() throw(fwTools::Failed);
+
+private:
+
+    typedef std::vector< std::string > TypesType;
+
+    /**
+     * @brief This slot is called when a series is added in the SeriesDB.
+     * It emits a signal for each added series corresponding to the configured type.
+     */
+    void reportSeries(::fwMedData::SeriesDB::ContainerType addedSeries);
+
+    /**
+     * @brief Filter mode : include or exclude activity configurations.
+     * @note Allowed values : 'include' or 'exclude'
+     */
+    std::string m_filterMode;
+
+    /// Types of series to be enabled or disabled, according to filter mode.
+    TypesType m_types;
+
+    /// Signal emitted when the added series correspond to the configured type.
+    SeriesAddedSignalType::sptr m_sigSeriesAdded;
+
+};
+
+} // gui
+
+
+#endif // __ACTIVITIES_SSERIESSIGNAL_HPP__
diff --git a/Bundles/core/activities/include/activities/action/SActivityLauncher.hpp b/Bundles/core/activities/include/activities/action/SActivityLauncher.hpp
index bbb42b1..12d74b2 100644
--- a/Bundles/core/activities/include/activities/action/SActivityLauncher.hpp
+++ b/Bundles/core/activities/include/activities/action/SActivityLauncher.hpp
@@ -1,20 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP_
-#define _ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP_
+#ifndef __ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP__
+#define __ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP__
 
-#include <fwTools/Failed.hpp>
+#include <fwActivities/registry/Activities.hpp>
+#include <fwActivities/registry/ActivityMsg.hpp>
 
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwData/Vector.hpp>
 
 #include <fwGui/IActionSrv.hpp>
 
-#include <fwActivities/registry/Activities.hpp>
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
 
 #include "activities/config.hpp"
 
@@ -23,26 +24,132 @@ namespace activities
 namespace action
 {
 
+/**
+ * @brief This action launchs an activity according to the selected data
+ *
+ * This action works on a ::fwData::Vector. It proposes all the available activity according to the selected data and
+ * the given configuration. And then, send a signal with all the activity information.
+ *
+ * This action should be followed by the service '::guiQt::editor::DynamicView' : this service listens the action
+ * signals and launchs the activity in a new tab.
+ *
+ * @section Slots Slots
+ * - \b launchSeries(::fwMedData::Series::sptr) : This slot allows to launch the series. If series is an
+ *      ActivitySeries, it is launched, otherwise it launches the first available activity for this series or used
+ *      m_quickLaunch information if a default association is defined for this series type. It sends the
+ *      signal 'activityLaunched' with all the activity information.
+ * - \b launchActivitySeries(::fwMedData::ActivitySeries::sptr) : This slot allows to launch the given activity series.
+ *   It sends the signal 'activityLaunched' with all the activity information.
+ *
+ * - \b updateState() : Updates action state (enable if activities are available for current selection).
+ *
+ * @section Signal Signal
+ * - \b activityLaunched(::fwActivities::registry::ActivityMsg) : This signal is emitted when the activity is created, it
+ *      contains the activity information. It should be connected to the slot 'createTab' of the service
+ *      '::guiQt::editor::DynamicView'.
+ *
+ * @section XML XML Configuration
+ * @code{.xml}
+    <service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
+        <config>
+            <!-- SActivityLauncher mode : immediate or message(default)
+                 Immediate mode starts and stop immediatly the activity's config -->
+            <mode>immediate</mode>
+            <parameters>
+                <parameter replace="SERIESDB" by="medicalData" />
+                <parameter replace="IMAGE" by="@values.ImageSeries.image" />
+            </parameters>
+
+            <!-- Filter mode 'include' allows all given activity id-s.
+                 Filter mode 'exclude' allows all activity id-s excepted given ones. -->
+            <filter>
+                <mode>include</mode>
+                <id>2DVisualizationActivity</id>
+                <id>3DVisualizationActivity</id>
+                <id>VolumeRenderingActivity</id>
+            </filter>
+
+            <!-- Definition of quick association between series type and an activity id.
+                 This mapping is used by launchSeries slot (see the function to have few details ) -->
+            <quickLaunch>
+                <association type="::fwMedData::ImageSeries" id="2DVisualizationActivity" />
+                <association type="::fwMedData::ModelSeries" id="3DVisualizationActivity" />
+            </quickLaunch>
+        </config>
+    </service>
+        @endcode
+ *
+ * - \b mode (optional): there are two mode: "message" and "immediate"
+ *    - \b message (used by défaut): the action send a signal containing the information needed to launch the
+ *      choosen activity. The service '::guiQt::editor::DynamicView' allows to launch the activity in a new tab. For
+ *      that, it must listen the action signal.
+ *    - \b immediate: the activity is automatically started et stopped by this action. It is used to run a process
+ *      without creating a new tab, for example, to save the selected data.
+ * - \b parameters (optional): list of the parameters used to launch the activity, it is the parameters for the
+ *   AppConfig associated to the activity.
+ *    - \b parameter: defines a parameter
+ *        - \b replace: name of the parameter as defined in the AppConfig
+ *        - \b by: defines the string that will replace the parameter name. It should be a simple string (ex.
+ *          frontal) or define a sesh@ path (ex. \@values.myImage). The root object of the sesh@ path if the
+ *          composite contained in the ActivitySeries.
+ * - \b filter (optional): it allows to filter the activity that can be proposed.
+ *    - \b mode: 'include' or 'exclude'. Defines if the activity in the following list are proposed (include) or not
+ *      (exclude).
+ *    - \b id: id of the activity
+ * - \b quickLaunch (optional): defines the activity that will be launched on a double-click on a series. The
+ *   launched activity depends of the series type (ImageSeries, ModelSeries, ...).
+ *    - \b association: allows to associate an activity to launch with a type of series
+ *       - \b type: type of series (::fwMedData::ImageSeries, ::fwMedData::ModelSeries, ....)
+ *       - \b id: identifier of the activity.
+ *
+ *
+ * @note A sesh@ path is a path used to browse an object (and sub-object) using the introspection (see fwDataCamp).
+ *       The path begins with a '@' or a '!'.
+ *          - '@' : the returned string is the fwID of the sub-object defined by the path.
+ *          - '!' : the returned string is the value of the sub-object, it works only on String, Integer, Float and
+ *            Boolean object.
+ */
 class ACTIVITIES_CLASS_API SActivityLauncher : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SActivityLauncher)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SActivityLauncher)(::fwGui::IActionSrv) );
 
     /// Constructor. Do nothing.
-    ACTIVITIES_API SActivityLauncher() throw() ;
+    ACTIVITIES_API SActivityLauncher() throw();
 
     /// Destructor. Do nothing.
-    ACTIVITIES_API virtual ~SActivityLauncher() throw() ;
+    ACTIVITIES_API virtual ~SActivityLauncher() throw();
 
+    /**
+     * @name Slot API
+     * @{
+     */
     ACTIVITIES_API static const ::fwCom::Slots::SlotKeyType s_LAUNCH_SERIES_SLOT;
-    typedef ::fwCom::Slot< void (SPTR( ::fwMedData::Series )) > LaunchSeriesSlotType;
+    ACTIVITIES_API static const ::fwCom::Slots::SlotKeyType s_LAUNCH_ACTIVITY_SERIES_SLOT;
+    ACTIVITIES_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_STATE_SLOT;
+    /// @}
 
-    typedef ::fwCom::Signal< void ( CSPTR(::fwServices::ObjectMsg) ) > ActivityLaunchedSignalType;
+
+    /**
+     * @name Signal API
+     * @{
+     */
+    typedef ::fwCom::Signal< void ( ::fwActivities::registry::ActivityMsg ) > ActivityLaunchedSignalType;
 
     /// Key in m_signals map of signal m_sigActivityLaunched
     ACTIVITIES_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_LAUNCHED_SIG;
+    /// @}
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Vector::s_ADDED_OBJECTS_SIG to this::s_UPDATE_STATE_SLOT
+     * Connect Vector::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_STATE_SLOT
+     */
+    ACTIVITIES_API virtual KeyConnectionsType getObjSrvConnections() const;
 
 protected:
 
@@ -53,12 +160,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /**
-     * @brief This method is used to update services on notification. ( overrides ).
-     * Enable the action according to the available activities.
-     */
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) msg ) throw(::fwTools::Failed);
-
-    /**
      * @brief Show activity selector.
      */
     virtual void updating() throw(::fwTools::Failed);
@@ -66,42 +167,11 @@ protected:
     /**
      * @brief Initialize the action.
      * @see fwGui::IActionSrv::initialize()
-     *
-     * @verbatim
-     <service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SActivityLauncher" autoConnect="yes" >
-         <config>
-             <!-- SActivityLauncher mode : immediate or message(default)
-             Immediate mode starts and stop immediatly the activity's config -->
-             <mode>immediate</mode>
-             <parameters>
-                 <parameter replace="SERIESDB" by="medicalData" />
-                 <parameter replace="IMAGE" by="@values.ImageSeries.image" />
-             </parameters>
-
-             <!-- Filter mode 'include' allows all given activity id-s.
-                  Filter mode 'exclude' allows all activity id-s excepted given ones. -->
-             <filter>
-                <mode>include</mode>
-                <id>2DVisualizationActivity</id>
-                <id>3DVisualizationActivity</id>
-                <id>VolumeRenderingActivity</id>
-            </filter>
-
-            <!-- Definition of quick association between series type and an activity id.
-                 This mapping is used by launchSeries slot (see the function to have few details ) -->
-            <quickLaunch>
-                <association type="::fwMedData::ImageSeries" id="2DVisualizationActivity" />
-                <association type="::fwMedData::ModelSeries" id="3DVisualizationActivity" />
-            </quickLaunch>
-
-         </config>
-     </service>
-     @endverbatim
-      */
+     */
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
     typedef ::fwActivities::registry::ActivityAppConfig::ActivityAppConfigParamsType ParametersType;
 
@@ -109,9 +179,7 @@ protected:
 
     typedef std::map< std::string, std::string > QuickLaunchType;
 
-    /**
-     * @brief Updates action state (enable if activities are available for current selection).
-     */
+    //// SLOT: Updates action state (enable if activities are available for current selection).
     virtual void updateState();
 
     /**
@@ -137,6 +205,12 @@ private:
     void launchSeries(::fwMedData::Series::sptr series);
 
     /**
+     * @brief Slots to launch the given activity series.
+     * @param series the activity series to launch.
+     */
+    void launchActivitySeries(::fwMedData::ActivitySeries::sptr series);
+
+    /**
      * @brief Send message to launch new tab view
      * If given activity info contains an ::fwActivities::IValidator, first checks if activity is valid according to
      * validator, then build activity with activity builder.
@@ -172,9 +246,6 @@ private:
     /// Id-s of activity configurations to be enabled or disabled, according to filter mode.
     KeysType m_keys;
 
-    /// Slot to call launchSeries method
-    LaunchSeriesSlotType::sptr m_slotLaunchSeries;
-
     /// Signal emitted when activity is launched. Send a message containing the activity information.
     ActivityLaunchedSignalType::sptr m_sigActivityLaunched;
 
@@ -189,6 +260,4 @@ private:
 } // gui
 
 
-#endif // _ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP_
-
-
+#endif // __ACTIVITIES_ACTION_SACTIVITYLAUNCHER_HPP__
diff --git a/Bundles/core/activities/include/activities/action/SCreateActivity.hpp b/Bundles/core/activities/include/activities/action/SCreateActivity.hpp
new file mode 100644
index 0000000..446f88a
--- /dev/null
+++ b/Bundles/core/activities/include/activities/action/SCreateActivity.hpp
@@ -0,0 +1,140 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __ACTIVITIES_ACTION_SCREATEACTIVITY_HPP__
+#define __ACTIVITIES_ACTION_SCREATEACTIVITY_HPP__
+
+#include "activities/config.hpp"
+
+#include <fwActivities/registry/Activities.hpp>
+#include <fwActivities/registry/ActivityMsg.hpp>
+
+#include <fwData/Vector.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
+namespace activities
+{
+namespace action
+{
+
+/**
+ * @brief This action launchs an activity according to the given configuration
+ *
+ * This action works on a ::fwData::Vector. It proposes all the available activity according to the given configuration.
+ * And then, send a signal with the activity identifier.
+ *
+ * It should works with the ::uiMedData::editor::SActivityWizard that creates or updates the activitySeries.
+ *
+ * @section Signals Signals
+ * - \b activityIDSelected(std::string) : This signal is emitted when the activity is selected, it
+ *      contains all activity identifier. It should be connected to the slot 'createActivity' of the service
+ *     'SActivityWizard'.
+ * - \b activitySelected(::fwMedData::ActivitySeries::sptr) : This signal is emitted when the activity is selected in
+ *      the current vector. It should be connected to the slot 'updateActivity' of the service 'SActivityWizard'.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <service uid="action_newActivity" type="::fwGui::IActionSrv" impl="::activities::action::SCreateActivity" autoConnect="yes" >
+       <!-- Filter mode 'include' allows all given activity id-s.
+            Filter mode 'exclude' allows all activity id-s excepted given ones. -->
+       <filter>
+           <mode>include</mode>
+           <id>2DVisualizationActivity</id>
+           <id>3DVisualizationActivity</id>
+           <id>VolumeRenderingActivity</id>
+       </filter>
+   </service>
+   @endcode
+ *
+ * - \b filter (optional): it allows to filter the activity that can be proposed.
+ *    - \b mode: 'include' or 'exclude'. Defines if the activity in the following list are proposed (include) or not
+ *      (exclude).
+ *    - \b id: id of the activity
+ */
+class ACTIVITIES_CLASS_API SCreateActivity : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SCreateActivity)(::fwGui::IActionSrv) );
+
+    /// Constructor. Do nothing.
+    ACTIVITIES_API SCreateActivity() throw();
+
+    /// Destructor. Do nothing.
+    ACTIVITIES_API virtual ~SCreateActivity() throw();
+
+    /**
+     * @name Signals API
+     * @{
+     */
+    ACTIVITIES_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_SELECTED_SIG;
+    typedef ::fwCom::Signal< void ( ::fwMedData::ActivitySeries::sptr ) > ActivitySelectedSignalType;
+
+    ACTIVITIES_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_ID_SELECTED_SIG;
+    typedef ::fwCom::Signal< void (std::string) > ActivityIDSelectedSignalType;
+    /// @}
+
+protected:
+
+    ///This method launches the IAction::starting method.
+    virtual void starting() throw(::fwTools::Failed);
+
+    ///This method launches the IAction::stopping method.
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Show activity selector.
+     */
+    virtual void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Initialize the action.
+     * @see fwGui::IActionSrv::initialize()
+     */
+    virtual void configuring() throw(fwTools::Failed);
+
+    typedef std::vector< std::string > KeysType;
+
+private:
+
+    /**
+     * @brief Slots to launch the given activitySeries.
+     * @param activitySeries the activity is launched on this series.
+     */
+    void launchActivity(::fwMedData::ActivitySeries::sptr activitySeries);
+
+    typedef ::fwActivities::registry::Activities::ActivitiesType ActivityInfoContainer;
+
+    /// Show custom dialog box
+    ::fwActivities::registry::ActivityInfo show( const ActivityInfoContainer& infos );
+
+    /// Returns enabled activity infos according to activity filter.
+    ActivityInfoContainer getEnabledActivities(const ActivityInfoContainer& infos);
+
+    /**
+     * @brief Filter mode : include or exclude activity configurations.
+     * @note Allowed values : 'include' or 'exclude'
+     */
+    std::string m_filterMode;
+
+    /// Id-s of activity configurations to be enabled or disabled, according to filter mode.
+    KeysType m_keys;
+
+    /// Signal emitted when activity is selected. Contains the activity identifier.
+    ActivityIDSelectedSignalType::sptr m_sigActivityIDSelected;
+
+    /// Signal emitted when activity is selected. Contains the activity.
+    ActivitySelectedSignalType::sptr m_sigActivitySelected;
+};
+
+} // namespace action
+} // namespace activities
+
+
+#endif // __ACTIVITIES_ACTION_SCREATEACTIVITY_HPP__
diff --git a/Bundles/core/activities/include/activities/config.hpp b/Bundles/core/activities/include/activities/config.hpp
deleted file mode 100644
index 3d8f0bc..0000000
--- a/Bundles/core/activities/include/activities/config.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#ifndef ACTIVITIES_EXPORT_HPP_
-#define ACTIVITIES_EXPORT_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-    #ifdef ACTIVITIES_EXPORTS
-    #define ACTIVITIES_API  __declspec(dllexport)
-    #else
-    #define ACTIVITIES_API __declspec(dllimport)
-    #endif
-
-    #define ACTIVITIES_CLASS_API
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef ACTIVITIES_EXPORTS
-    #define ACTIVITIES_API __attribute__ ((visibility("default")))
-    #define ACTIVITIES_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define ACTIVITIES_API __attribute__ ((visibility("hidden")))
-    #define ACTIVITIES_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define ACTIVITIES_API
-    #define ACTIVITIES_CLASS_API
-
-#endif
-
-#endif //ACTIVITIES_EXPORT_HPP_
diff --git a/Bundles/core/activities/include/activities/editor/SCreateActivity.hpp b/Bundles/core/activities/include/activities/editor/SCreateActivity.hpp
new file mode 100644
index 0000000..120b9c4
--- /dev/null
+++ b/Bundles/core/activities/include/activities/editor/SCreateActivity.hpp
@@ -0,0 +1,137 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __ACTIVITIES_EDITOR_SCREATEACTIVITY_HPP__
+#define __ACTIVITIES_EDITOR_SCREATEACTIVITY_HPP__
+
+#include "activities/config.hpp"
+
+#include <fwActivities/registry/Activities.hpp>
+#include <fwActivities/registry/ActivityMsg.hpp>
+
+#include <gui/editor/IEditor.hpp>
+
+#include <QPointer>
+#include <QObject>
+#include <QButtonGroup>
+
+namespace activities
+{
+namespace editor
+{
+
+/**
+ * @brief This editor launchs an activity according to the given configuration
+ *
+ * This editor proposes all the available activities according to the given configuration.
+ * It sends a signal with the activity identifier when a button is pushed.
+ *
+ * It should work with the ::uiMedData::editor::SActivityWizard that creates or updates the activitySeries.
+ *
+ * @section Signals Signals
+ * - \b activityIDSelected(std::string) : This signal is emitted when the activity is selected, it
+ *      contains all activity identifier. It should be connected to the slot 'createActivity' of the service
+ *     'SActivityWizard'.
+ * - \b loadRequested() : This signal is emitted when the "load activity" button is pushed.
+ *
+ * @section XML XML Configuration
+ *
+ * @code{.xml}
+   <service uid="editor_newActivity" type="::activities::editor::SCreateActivity" >
+       <filter>
+           <mode>include</mode>
+           <id>2DVisualizationActivity</id>
+           <id>3DVisualizationActivity</id>
+           <id>VolumeRenderingActivity</id>
+       </filter>
+   </service>
+   @endcode
+ *
+ * - \b filter (optional): it allows to filter the activity that can be proposed.
+ *    - \b mode: 'include' or 'exclude'. Defines if the activity in the following list are proposed (include) or not
+ *      (exclude).
+ *    - \b id: id of the activity
+ */
+class ACTIVITIES_CLASS_API SCreateActivity : public QObject,
+                                             public ::gui::editor::IEditor
+{
+Q_OBJECT;
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SCreateActivity)(::gui::editor::IEditor) );
+
+    /// Constructor. Do nothing.
+    ACTIVITIES_API SCreateActivity() throw();
+
+    /// Destructor. Do nothing.
+    ACTIVITIES_API virtual ~SCreateActivity() throw();
+
+    /**
+     * @name Signals API
+     * @{
+     */
+    ACTIVITIES_API static const ::fwCom::Signals::SignalKeyType s_ACTIVITY_ID_SELECTED_SIG;
+    typedef ::fwCom::Signal< void (std::string) > ActivityIDSelectedSignalType;
+
+    ACTIVITIES_API static const ::fwCom::Signals::SignalKeyType s_LOAD_REQUESTED_SIG;
+    typedef ::fwCom::Signal< void () > LoadRequestedSignalType;
+    /// @}
+
+protected:
+
+    /// Initialize the editor.
+    virtual void configuring() throw(fwTools::Failed);
+
+    /// This method launches the IEditor::starting method.
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// This method launches the IEditor::stopping method.
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Show activity selector.
+    virtual void updating() throw(::fwTools::Failed);
+
+    typedef std::vector< std::string > KeysType;
+
+private Q_SLOTS:
+
+    void onClicked(int id);
+
+private:
+
+    /**
+     * @brief Slots to launch the given activitySeries.
+     * @param activitySeries the activity is launched on this series.
+     */
+    void launchActivity(::fwMedData::ActivitySeries::sptr activitySeries);
+
+    typedef ::fwActivities::registry::Activities::ActivitiesType ActivityInfoContainer;
+
+    /// Returns enabled activity infos according to activity filter.
+    ActivityInfoContainer getEnabledActivities(const ActivityInfoContainer& infos);
+
+    /**
+     * @brief Filter mode : include or exclude activity configurations.
+     * @note Allowed values : 'include' or 'exclude'
+     */
+    std::string m_filterMode;
+
+    /// Id-s of activity configurations to be enabled or disabled, according to filter mode.
+    KeysType m_keys;
+
+    /// Informations used to launch activities
+    ActivityInfoContainer m_activitiesInfo;
+
+    /// Pointer on the buttons group
+    QPointer<QButtonGroup> m_buttonGroup;
+};
+
+} // namespace editor
+} // namespace activities
+
+
+#endif // __ACTIVITIES_EDITOR_SCREATEACTIVITY_HPP__
diff --git a/Bundles/core/activities/include/activities/helper/Activity.hpp b/Bundles/core/activities/include/activities/helper/Activity.hpp
deleted file mode 100644
index 94d6b6c..0000000
--- a/Bundles/core/activities/include/activities/helper/Activity.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __ACTIVITIES_HELPER_ACTIVITY_HPP__
-#define __ACTIVITIES_HELPER_ACTIVITY_HPP__
-
-#include <fwActivities/registry/Activities.hpp>
-
-#include "activities/config.hpp"
-
-namespace fwServices
-{
-class ObjectMsg;
-}
-
-namespace activities
-{
-
-class ActivitySerie;
-
-namespace helper
-{
-
-typedef ::fwActivities::registry::ActivityAppConfig::ActivityAppConfigParamsType ParametersType;
-
-    ACTIVITIES_API SPTR(::fwServices::ObjectMsg) buildActivityMsg(
-            SPTR(::fwMedData::ActivitySeries) series,
-            const ::fwActivities::registry::ActivityInfo& info,
-            const ParametersType& parameters = ParametersType());
-
-} // namespace helper
-} // namespace activities
-
-#endif // __ACTIVITIES_HELPER_ACTIVITY_HPP__
diff --git a/Bundles/core/activities/include/activities/namespace.hpp b/Bundles/core/activities/include/activities/namespace.hpp
new file mode 100644
index 0000000..e9c0190
--- /dev/null
+++ b/Bundles/core/activities/include/activities/namespace.hpp
@@ -0,0 +1,24 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __ACTIVITIES_NAMESPACE_HPP__
+#define __ACTIVITIES_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace activities contains helper and services allowing to launch activities.
+ * @namespace activities
+ **/
+
+namespace activities
+{
+
+} // namespace activities
+
+#endif // __ACTIVITIES_NAMESPACE_HPP__
+
+
+
+
diff --git a/Bundles/core/activities/rc/activities.xsd b/Bundles/core/activities/rc/activities.xsd
index 40abd56..4b2ba26 100644
--- a/Bundles/core/activities/rc/activities.xsd
+++ b/Bundles/core/activities/rc/activities.xsd
@@ -15,6 +15,8 @@
               <xs:element name="requirement" maxOccurs="unbounded" minOccurs="0">
                 <xs:complexType>
                   <xs:sequence>
+                    <xs:element name="desc" type="xs:string" maxOccurs="1" minOccurs="0" />
+                    <xs:element name="validator" type="xs:string" maxOccurs="1" minOccurs="0" />
                     <xs:element name="key" maxOccurs="unbounded" minOccurs="0">
                       <xs:complexType>
                         <xs:simpleContent>
@@ -28,6 +30,8 @@
 
                   <xs:attribute type="xs:string" name="name" use="required"/>
                   <xs:attribute type="xs:string" name="type" use="required"/>
+                  <xs:attribute type="xs:string" name="container" use="optional"/>
+                  <xs:attribute type="xs:string" name="create" use="optional"/>
                   <xs:attribute name="maxOccurs" use="optional">
                     <xs:simpleType>
                       <xs:union memberTypes="xs:unsignedInt unboundedtype" />
@@ -43,9 +47,18 @@
             </xs:sequence>
           </xs:complexType>
         </xs:element>
-        <xs:element name="builder" type="xs:string"/>
+        <xs:element name="builder" type="xs:string" minOccurs="0" maxOccurs="1"/>
+
         <xs:element name="validator" type="xs:string" minOccurs="0" maxOccurs="1" />
 
+        <xs:element name="validators" minOccurs="0" maxOccurs="1" >
+            <xs:complexType>
+                <xs:sequence>
+                    <xs:element name="validator" maxOccurs="unbounded" minOccurs="0" />
+                </xs:sequence>
+            </xs:complexType>
+        </xs:element>
+
         <xs:element name="appConfig">
           <!-- TODO -->
         </xs:element>
@@ -63,5 +76,3 @@
   </xs:simpleType>
 
 </xs:schema>
-
-
diff --git a/Bundles/core/activities/rc/plugin.xml b/Bundles/core/activities/rc/plugin.xml
index 9d04878..d2f45d3 100644
--- a/Bundles/core/activities/rc/plugin.xml
+++ b/Bundles/core/activities/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="activities" class="activities::Plugin" >
+<plugin id="activities" class="activities::Plugin"  version="@DASH_VERSION@" >
 
     <library name="activities" />
 
@@ -13,6 +13,18 @@
         <object>::fwData::Vector</object>
     </extension>
 
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwGui::IActionSrv</type>
+        <service>::activities::action::SCreateActivity</service>
+        <object>::fwData::Vector</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::activities::SSeriesSignal</service>
+        <object>::fwMedData::SeriesDB</object>
+    </extension>
+
     <!-- EXTENSION POINT FOR AN APP CONFIGURATION -->
     <extension-point id="::fwActivities::registry::Activities" schema="activities.xsd"/>
 
diff --git a/Bundles/core/activities/src/activities/Plugin.cpp b/Bundles/core/activities/src/activities/Plugin.cpp
index 05a2dac..254b5b1 100644
--- a/Bundles/core/activities/src/activities/Plugin.cpp
+++ b/Bundles/core/activities/src/activities/Plugin.cpp
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
 #include <fwMedData/ActivitySeries.hpp>
diff --git a/Bundles/core/activities/src/activities/SSeriesSignal.cpp b/Bundles/core/activities/src/activities/SSeriesSignal.cpp
new file mode 100644
index 0000000..36da03c
--- /dev/null
+++ b/Bundles/core/activities/src/activities/SSeriesSignal.cpp
@@ -0,0 +1,128 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "activities/SSeriesSignal.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+#include <fwRuntime/Convert.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace activities
+{
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwServices::IController, ::activities::SSeriesSignal, ::fwMedData::SeriesDB );
+
+//------------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType SSeriesSignal::s_REPORT_SERIES_SLOT   = "reportSeries";
+const ::fwCom::Signals::SignalKeyType SSeriesSignal::s_SERIES_ADDED_SIG = "seriesAdded";
+
+//------------------------------------------------------------------------------
+
+SSeriesSignal::SSeriesSignal() throw()
+{
+    m_sigSeriesAdded = newSignal< SeriesAddedSignalType >(s_SERIES_ADDED_SIG);
+
+    newSlot(s_REPORT_SERIES_SLOT, &SSeriesSignal::reportSeries, this);
+}
+
+//------------------------------------------------------------------------------
+
+SSeriesSignal::~SSeriesSignal() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesSignal::starting() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesSignal::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesSignal::configuring() throw(fwTools::Failed)
+{
+
+    const ::fwServices::IService::ConfigType srvconfig = this->getConfigTree().get_child("service");
+
+    if(srvconfig.count("filter") == 1 )
+    {
+        const ::fwServices::IService::ConfigType &configFilter = srvconfig.get_child("filter");
+        SLM_ASSERT("A maximum of 1 <mode> tag is allowed", configFilter.count("mode") < 2);
+
+        const std::string mode = configFilter.get< std::string >("mode");
+        SLM_ASSERT("'" + mode + "' value for <mode> tag isn't valid. Allowed values are : 'include', 'exclude'.",
+                   mode == "include" || mode == "exclude");
+        m_filterMode = mode;
+
+        BOOST_FOREACH( const ConfigType::value_type &v,  configFilter.equal_range("type") )
+        {
+            m_types.push_back(v.second.get<std::string>(""));
+        }
+    }
+    SLM_ASSERT("A maximum of 1 <filter> tag is allowed", srvconfig.count("filter") < 2);
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesSignal::reportSeries(::fwMedData::SeriesDB::ContainerType addedSeries)
+{
+    for(const ::fwMedData::Series::sptr &series : addedSeries)
+    {
+        const bool isIncludeMode = m_filterMode == "include";
+
+        std::string classname     = series->getClassname();
+        TypesType::iterator keyIt = std::find(m_types.begin(), m_types.end(), classname);
+
+        if(keyIt != m_types.end() && isIncludeMode)
+        {
+            m_sigSeriesAdded->asyncEmit(series);
+        }
+        else if(keyIt == m_types.end() && !isIncludeMode)
+        {
+            m_sigSeriesAdded->asyncEmit(series);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SSeriesSignal::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SSeriesSignal::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG, s_REPORT_SERIES_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace activities
diff --git a/Bundles/core/activities/src/activities/action/SActivityLauncher.cpp b/Bundles/core/activities/src/activities/action/SActivityLauncher.cpp
index 69db71d..a69bc65 100644
--- a/Bundles/core/activities/src/activities/action/SActivityLauncher.cpp
+++ b/Bundles/core/activities/src/activities/action/SActivityLauncher.cpp
@@ -1,49 +1,53 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QApplication>
-#include <QDialog>
-#include <QPushButton>
-#include <QListWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QStandardItemModel>
+#include "activities/action/SActivityLauncher.hpp"
 
-#include <fwRuntime/Convert.hpp>
+#include <fwActivities/IBuilder.hpp>
+#include <fwActivities/IValidator.hpp>
+#include <fwActivities/IActivityValidator.hpp>
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 #include <fwCom/Slot.hpp>
 #include <fwCom/Slots.hpp>
 #include <fwCom/Slots.hxx>
 
-#include <fwTools/UUID.hpp>
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-#include <fwServices/AppConfigManager.hpp>
-
 #include <fwData/Composite.hpp>
 #include <fwData/String.hpp>
 #include <fwData/Vector.hpp>
-#include <fwMedData/ActivitySeries.hpp>
 
-#include <fwComEd/VectorMsg.hpp>
+#include <fwDataCamp/getObject.hpp>
 
-#include <fwGui/dialog/SelectorDialog.hpp>
 #include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
 
-#include <fwDataCamp/getObject.hpp>
+#include <fwMedData/ActivitySeries.hpp>
 
-#include <fwActivities/IBuilder.hpp>
-#include <fwActivities/IValidator.hpp>
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/Convert.hpp>
+#include <fwRuntime/operations.hpp>
 
-#include "activities/helper/Activity.hpp"
-#include "activities/action/SActivityLauncher.hpp"
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+
+#include <fwTools/UUID.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <QApplication>
+#include <QDialog>
+#include <QPushButton>
+#include <QListWidget>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QPushButton>
+#include <QStandardItemModel>
 
 Q_DECLARE_METATYPE(::fwActivities::registry::ActivityInfo)
 
@@ -58,32 +62,28 @@ fwServicesRegisterMacro( ::fwGui::IActionSrv, ::activities::action::SActivityLau
 
 //------------------------------------------------------------------------------
 
-const ::fwCom::Slots::SlotKeyType SActivityLauncher::s_LAUNCH_SERIES_SLOT = "launchSeries";
-const ::fwCom::Signals::SignalKeyType SActivityLauncher::s_ACTIVITY_LAUNCHED_SIG = "activityLaunched";
+const ::fwCom::Slots::SlotKeyType SActivityLauncher::s_LAUNCH_SERIES_SLOT          = "launchSeries";
+const ::fwCom::Slots::SlotKeyType SActivityLauncher::s_LAUNCH_ACTIVITY_SERIES_SLOT = "launchActivitySeries";
+const ::fwCom::Slots::SlotKeyType SActivityLauncher::s_UPDATE_STATE_SLOT           = "updateState";
+const ::fwCom::Signals::SignalKeyType SActivityLauncher::s_ACTIVITY_LAUNCHED_SIG   = "activityLaunched";
 
 //------------------------------------------------------------------------------
 
-SActivityLauncher::SActivityLauncher() throw():
+SActivityLauncher::SActivityLauncher() throw() :
     m_mode("message")
 {
-    m_sigActivityLaunched = ActivityLaunchedSignalType::New();
-    m_signals( s_ACTIVITY_LAUNCHED_SIG,  m_sigActivityLaunched);
-
-    m_slotLaunchSeries = ::fwCom::newSlot( &SActivityLauncher::launchSeries, this ) ;
-
-    ::fwCom::HasSlots::m_slots( s_LAUNCH_SERIES_SLOT, m_slotLaunchSeries );
+    m_sigActivityLaunched = newSignal< ActivityLaunchedSignalType >(s_ACTIVITY_LAUNCHED_SIG);
 
-#ifdef COM_LOG
-    ::fwCom::HasSlots::m_slots.setID();
-    ::fwCom::HasSignals::m_signals.setID();
-#endif
-    this->setWorker( m_associatedWorker );
+    newSlot(s_LAUNCH_SERIES_SLOT, &SActivityLauncher::launchSeries, this);
+    newSlot(s_LAUNCH_ACTIVITY_SERIES_SLOT, &SActivityLauncher::launchActivitySeries, this);
+    newSlot(s_UPDATE_STATE_SLOT, &SActivityLauncher::updateState, this);
 }
 
 //------------------------------------------------------------------------------
 
 SActivityLauncher::~SActivityLauncher() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -111,62 +111,63 @@ void SActivityLauncher::configuring() throw(fwTools::Failed)
     m_parameters.clear();
     if(this->getConfigTree().get_child("service").count("config") > 0)
     {
-        SLM_ASSERT("Sorry you must have one (and only one) <config/> element.",
-                this->getConfigTree().get_child("service").count("config") == 1 );
+        SLM_ASSERT("There must be one (and only one) <config/> element.",
+                   this->getConfigTree().get_child("service").count("config") == 1 );
 
         const ::fwServices::IService::ConfigType srvconfig = this->getConfigTree().get_child("service");
-        const ::fwServices::IService::ConfigType &config = srvconfig.get_child("config");
+        const ::fwServices::IService::ConfigType &config   = srvconfig.get_child("config");
 
         m_mode = config.get_optional<std::string>("mode").get_value_or("message");
-        SLM_ASSERT("SActivityLauncher mode must be 'immediate' or 'message'",
+        SLM_ASSERT("SActivityLauncher mode must be either 'immediate' or 'message'",
                    "message" == m_mode || "immediate" == m_mode);
 
         if(config.count("parameters") == 1 )
         {
             const ::fwServices::IService::ConfigType &configParameters = config.get_child("parameters");
-            BOOST_FOREACH( const ConfigType::value_type &v, configParameters.equal_range("parameter") )
+            BOOST_FOREACH( const ConfigType::value_type &v,  configParameters.equal_range("parameter") )
             {
                 ParametersType::value_type parameter( v.second );
                 m_parameters.push_back( parameter );
             }
         }
-        OSLM_ASSERT("At most 1 <parameters> tag is allowed", config.count("parameters") < 2);
+        OSLM_ASSERT("A maximum of 1 <parameters> tag is allowed", config.count("parameters") < 2);
 
         if(config.count("filter") == 1 )
         {
             const ::fwServices::IService::ConfigType &configFilter = config.get_child("filter");
-            OSLM_ASSERT("At most 1 <mode> tag is allowed", configFilter.count("mode") < 2);
+            OSLM_ASSERT("A maximum of 1 <mode> tag is allowed", configFilter.count("mode") < 2);
 
             const std::string mode = configFilter.get< std::string >("mode");
-            OSLM_ASSERT("'" << mode << "' value for <mode> tag isn't valid. Allowed values are : 'include', 'exclude'.", mode == "include" || mode == "exclude");
+            OSLM_ASSERT("'" << mode << "' value for <mode> tag isn't valid. Allowed values are : 'include', 'exclude'.",
+                        mode == "include" || mode == "exclude");
             m_filterMode = mode;
 
-            BOOST_FOREACH( const ConfigType::value_type &v, configFilter.equal_range("id") )
+            BOOST_FOREACH( const ConfigType::value_type &v,  configFilter.equal_range("id") )
             {
                 m_keys.push_back(v.second.get<std::string>(""));
             }
         }
-        OSLM_ASSERT("At most 1 <filter> tag is allowed", config.count("filter") < 2);
+        OSLM_ASSERT("A maximum of 1 <filter> tag is allowed", config.count("filter") < 2);
 
         if(config.count("quickLaunch") == 1 )
         {
             m_quickLaunch.clear();
             const ::fwServices::IService::ConfigType &configQuickLaunch = config.get_child("quickLaunch");
-            BOOST_FOREACH( const ConfigType::value_type &v, configQuickLaunch.equal_range("association") )
+            BOOST_FOREACH( const ConfigType::value_type &v,  configQuickLaunch.equal_range("association") )
             {
                 const ::fwServices::IService::ConfigType &association = v.second;
-                const ::fwServices::IService::ConfigType xmlattr = association.get_child("<xmlattr>");
+                const ::fwServices::IService::ConfigType xmlattr      = association.get_child("<xmlattr>");
 
-                SLM_FATAL_IF( "Sorry, attribute \"type\" is missing", xmlattr.count("type") != 1 );
-                SLM_FATAL_IF( "Sorry, attribute \"id\" is missing", xmlattr.count("id") != 1 );
+                SLM_FATAL_IF( "The attribute \"type\" is missing", xmlattr.count("type") != 1 );
+                SLM_FATAL_IF( "The attribute \"id\" is missing", xmlattr.count("id") != 1 );
 
                 std::string type = xmlattr.get<std::string>("type");
-                std::string id = xmlattr.get<std::string>("id");
+                std::string id   = xmlattr.get<std::string>("id");
 
                 m_quickLaunch[type] = id;
             }
         }
-        SLM_ASSERT("At most 1 <quickLaunch> tag is allowed", config.count("quickLaunch") < 2);
+        SLM_ASSERT("A maximum of 1 <quickLaunch> tag is allowed", config.count("quickLaunch") < 2);
     }
 }
 
@@ -181,7 +182,7 @@ void SActivityLauncher::configuring() throw(fwTools::Failed)
 
 
     QStandardItemModel *model = new QStandardItemModel(dialog);
-    BOOST_FOREACH( ::fwActivities::registry::ActivityInfo info, infos)
+    for( ::fwActivities::registry::ActivityInfo info :  infos)
     {
         std::string text;
         if(info.title.empty())
@@ -211,7 +212,7 @@ void SActivityLauncher::configuring() throw(fwTools::Failed)
         selectionList->selectionModel()->select( index, QItemSelectionModel::Select );
     }
 
-    QPushButton* okButton = new QPushButton("Ok");
+    QPushButton* okButton     = new QPushButton("Ok");
     QPushButton* cancelButton = new QPushButton("Cancel");
 
     QHBoxLayout *hLayout = new QHBoxLayout();
@@ -231,8 +232,8 @@ void SActivityLauncher::configuring() throw(fwTools::Failed)
     if(dialog->exec())
     {
         QModelIndex currentIndex = selectionList->selectionModel()->currentIndex();
-        QStandardItem *item = model->itemFromIndex( currentIndex );
-        QVariant var = item->data();
+        QStandardItem *item      = model->itemFromIndex( currentIndex );
+        QVariant var             = item->data();
         info = var.value< ::fwActivities::registry::ActivityInfo >();
     }
 
@@ -283,7 +284,7 @@ void SActivityLauncher::updating() throw(::fwTools::Failed)
         ActivityInfoContainer infos = ::fwActivities::registry::Activities::getDefault()->getInfos(selection);
         infos = this->getEnabledActivities(infos);
 
-        if ( ! infos.empty())
+        if ( !infos.empty())
         {
             ::fwActivities::registry::ActivityInfo info;
             if((m_keys.size() == 1 && m_filterMode == "include") || (infos.size() == 1))
@@ -311,13 +312,6 @@ void SActivityLauncher::updating() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SActivityLauncher::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    this->updateState();
-}
-
-//------------------------------------------------------------------------------
-
 void SActivityLauncher::updateState()
 {
     ::fwData::Vector::sptr selection = this->getObject< ::fwData::Vector >();
@@ -327,7 +321,30 @@ void SActivityLauncher::updateState()
     if(selection->size() == 1 && ::fwMedData::ActivitySeries::dynamicCast((*selection)[0]))
     {
         ::fwMedData::ActivitySeries::sptr as = ::fwMedData::ActivitySeries::dynamicCast((*selection)[0]);
-        isExecutable = ::fwActivities::registry::Activities::getDefault()->hasInfo(as->getActivityConfigId());
+
+
+        if(m_filterMode == "include" || m_filterMode == "exclude")
+        {
+            const bool isIncludeMode = m_filterMode == "include";
+
+            KeysType::iterator keyIt = std::find(m_keys.begin(), m_keys.end(), as->getActivityConfigId());
+
+            if(keyIt != m_keys.end() && isIncludeMode)
+            {
+                isExecutable = true;
+            }
+            else if(keyIt == m_keys.end() && !isIncludeMode)
+            {
+                isExecutable = true;
+            }
+            isExecutable &= ::fwActivities::registry::Activities::getDefault()->hasInfo(
+                as->getActivityConfigId());
+        }
+        else
+        {
+            isExecutable = ::fwActivities::registry::Activities::getDefault()->hasInfo(
+                as->getActivityConfigId());
+        }
     }
     else
     {
@@ -354,11 +371,13 @@ void SActivityLauncher::updateState()
 //------------------------------------------------------------------------------
 
 void SActivityLauncher::info( std::ostream &_sstream )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void SActivityLauncher::buildActivity(const ::fwActivities::registry::ActivityInfo & info, const ::fwData::Vector::sptr& selection)
+void SActivityLauncher::buildActivity(const ::fwActivities::registry::ActivityInfo & info,
+                                      const ::fwData::Vector::sptr& selection)
 {
     ::fwData::Composite::sptr replaceMap = ::fwData::Composite::New();
     ::fwActivities::IBuilder::sptr builder;
@@ -368,34 +387,62 @@ void SActivityLauncher::buildActivity(const ::fwActivities::registry::ActivityIn
     ::fwMedData::ActivitySeries::sptr actSeries;
     actSeries = builder->buildData(info, selection);
 
-    if( ! actSeries )
+    if( !actSeries )
     {
-        OSLM_INFO("Activity <" << info.builderImpl << ">launch aborted");
+        std::string msg = "The activity <" + info.title + "> can't be launched. Builder <" + info.builderImpl +
+                          "> failed.";
+        ::fwGui::dialog::MessageDialog::showMessageDialog( "Activity can not be launched", msg,
+                                                           ::fwGui::dialog::IMessageDialog::WARNING);
+        OSLM_ERROR(msg);
         return;
     }
 
+    // Applies activity validator on activity series to check the data
+    if (!info.validatorsImpl.empty())
+    {
+        for (std::string validatorImpl : info.validatorsImpl)
+        {
+            /// Process activity validator
+            ::fwActivities::IValidator::sptr validator = ::fwActivities::validator::factory::New(validatorImpl);
+
+            ::fwActivities::IActivityValidator::sptr activityValidator =
+                ::fwActivities::IActivityValidator::dynamicCast(validator);
+
+            if (activityValidator)
+            {
+                ::fwActivities::IValidator::ValidationType validation = activityValidator->validate(actSeries);
+                if(!validation.first)
+                {
+                    std::string message = "The activity '" + info.title + "' can not be launched:\n" +
+                                          validation.second;
+                    ::fwGui::dialog::MessageDialog::showMessageDialog("Activity launch",
+                                                                      message,
+                                                                      ::fwGui::dialog::IMessageDialog::CRITICAL);
+                    return;
+                }
+            }
+        }
+    }
+
+
     ParametersType parameters = this->translateParameters(m_parameters);
-    ::fwServices::ObjectMsg::sptr msg = helper::buildActivityMsg(actSeries, info, parameters);
+    ::fwActivities::registry::ActivityMsg msg = ::fwActivities::registry::ActivityMsg(actSeries, info, parameters);
 
     if( m_mode == "message" )
     {
-        fwServicesNotifyMsgMacro(this->getLightID(), m_sigActivityLaunched, msg);
+        m_sigActivityLaunched->asyncEmit(msg);
     }
     else
     {
         ::fwGui::LockAction lock(this->getSptr());
-        ::fwData::String::csptr msgData = ::fwData::String::dynamicConstCast(msg->getDataInfo("NEW_CONFIGURATION_HELPER"));
-        const std::string viewConfigFieldID = "VIEWCONFIGID";
-        const std::string fieldID           = "APPCONFIG";
-
-        std::string viewConfigID = msgData->getField(viewConfigFieldID, ::fwData::String::New(""))->value();
-        ::fwData::Composite::sptr replaceMap = msgData->getField(fieldID, ::fwData::Composite::New());
 
-        ::fwRuntime::ConfigurationElement::csptr config =
-            ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( viewConfigID, replaceMap);
+        std::string viewConfigID = msg.getAppConfigID();
+        ::fwActivities::registry::ActivityMsg::ReplaceMapType replaceMap = msg.getReplaceMap();
+        replaceMap["GENERIC_UID"]                                        =
+            ::fwServices::registry::AppConfig::getUniqueIdentifier();
 
-        ::fwServices::AppConfigManager::sptr helper = ::fwServices::AppConfigManager::New();
-        helper->setConfig( config );
+        ::fwServices::IAppConfigManager::sptr helper = ::fwServices::IAppConfigManager::New();
+        helper->setConfig( viewConfigID, replaceMap );
         helper->launch();
         helper->stopAndDestroy();
     }
@@ -405,25 +452,43 @@ void SActivityLauncher::buildActivity(const ::fwActivities::registry::ActivityIn
 
 void SActivityLauncher::sendConfig( const ::fwActivities::registry::ActivityInfo & info )
 {
+    // Start Bundle containing the activity if it is not started
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = ::fwRuntime::findBundle(info.bundleId, info.bundleVersion);
+    SLM_WARN_IF("Bundle '" + info.bundleId + "' used by activity '" + info.id + "' is already started.",
+                bundle->isStarted());
+    if (!bundle->isStarted())
+    {
+        SLM_DEBUG("Start bundle '" + info.bundleId + "' used by activity '" + info.id + "'");
+        bundle->start();
+    }
+
+
     ::fwData::Vector::sptr selection = this->getObject< ::fwData::Vector >();
 
-    if(!info.validatorImpl.empty())
+    ::fwActivities::IValidator::ValidationType validation;
+    validation.first = true;
+
+    for(auto const &validatorImpl :  info.validatorsImpl)
     {
-        ::fwActivities::IValidator::sptr validator = ::fwActivities::validator::factory::New(info.validatorImpl);
-        OSLM_ASSERT(info.validatorImpl << " instantiation failed", validator);
+        ::fwActivities::IValidator::sptr validator = ::fwActivities::validator::factory::New(validatorImpl);
+        OSLM_ASSERT(validatorImpl << " instantiation failed", validator);
 
         ::fwActivities::IValidator::ValidationType valid = validator->validate(info, selection);
+        validation.first                                &= valid.first;
         if(!valid.first)
         {
-            ::fwGui::dialog::MessageDialog::showMessageDialog("Activity could not be launched",
-                    "The activity " + info.title + " can't be launched.\nReason : " + valid.second,
-                    ::fwGui::dialog::MessageDialog::WARNING);
-        }
-        else
-        {
-            this->buildActivity(info, selection);
+            validation.second += "\n" + valid.second;
         }
     }
+
+    if(!validation.first)
+    {
+        ::fwGui::dialog::MessageDialog::showMessageDialog(
+            "Activity can not be launched",
+            "The activity " + info.title + " can't be launched. Reason : " + validation.second,
+            ::fwGui::dialog::IMessageDialog::WARNING
+            );
+    }
     else
     {
         this->buildActivity(info, selection);
@@ -439,7 +504,7 @@ bool SActivityLauncher::launchAS(::fwData::Vector::sptr &selection)
     dataCount = ::fwActivities::registry::Activities::getDefault()->getDataCount(selection);
     if(dataCount.size() == 1)
     {
-        BOOST_FOREACH(::fwData::Object::sptr obj, *selection)
+        for(::fwData::Object::sptr obj :  *selection)
         {
             ::fwMedData::ActivitySeries::sptr as = ::fwMedData::ActivitySeries::dynamicCast(obj);
             if (!as)
@@ -449,12 +514,7 @@ bool SActivityLauncher::launchAS(::fwData::Vector::sptr &selection)
             }
             else
             {
-                ::fwActivities::registry::ActivityInfo info;
-                info = ::fwActivities::registry::Activities::getDefault()->getInfo(as->getActivityConfigId());
-                ParametersType parameters = this->translateParameters(m_parameters);
-                ::fwServices::ObjectMsg::sptr msg = helper::buildActivityMsg(as, info, parameters);
-
-                fwServicesNotifyMsgMacro(this->getLightID(), m_sigActivityLaunched, msg);
+                this->launchActivitySeries(as);
                 launchAS = true;
             }
         }
@@ -469,12 +529,7 @@ void SActivityLauncher::launchSeries(::fwMedData::Series::sptr series)
     ::fwMedData::ActivitySeries::sptr as = ::fwMedData::ActivitySeries::dynamicCast(series);
     if (as)
     {
-        ::fwActivities::registry::ActivityInfo info;
-        info = ::fwActivities::registry::Activities::getDefault()->getInfo(as->getActivityConfigId());
-        ParametersType parameters = this->translateParameters(m_parameters);
-        ::fwServices::ObjectMsg::sptr msg = helper::buildActivityMsg(as, info, parameters);
-
-        fwServicesNotifyMsgMacro(this->getLightID(), m_sigActivityLaunched, msg);
+        this->launchActivitySeries(as);
     }
     else
     {
@@ -486,10 +541,10 @@ void SActivityLauncher::launchSeries(::fwMedData::Series::sptr series)
         {
             std::string activityId = m_quickLaunch[ series->getClassname() ];
             SLM_ASSERT("Activity information not found for" + activityId,
-                    ::fwActivities::registry::Activities::getDefault()->hasInfo(activityId) );
+                       ::fwActivities::registry::Activities::getDefault()->hasInfo(activityId) );
             this->sendConfig( ::fwActivities::registry::Activities::getDefault()->getInfo(activityId) );
         }
-        else if ( ! infos.empty() )
+        else if ( !infos.empty() )
         {
             this->sendConfig( infos.front() );
         }
@@ -504,11 +559,52 @@ void SActivityLauncher::launchSeries(::fwMedData::Series::sptr series)
 
 //------------------------------------------------------------------------------
 
+void SActivityLauncher::launchActivitySeries(::fwMedData::ActivitySeries::sptr series)
+{
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(series->getActivityConfigId());
+
+    // Applies activity validator on activity series to check the data
+    if (!info.validatorsImpl.empty())
+    {
+        for (std::string validatorImpl : info.validatorsImpl)
+        {
+            /// Process activity validator
+            ::fwActivities::IValidator::sptr validator = ::fwActivities::validator::factory::New(validatorImpl);
+
+            ::fwActivities::IActivityValidator::sptr activityValidator =
+                ::fwActivities::IActivityValidator::dynamicCast(validator);
+
+            if (activityValidator)
+            {
+                ::fwActivities::IValidator::ValidationType validation = activityValidator->validate(series);
+                if(!validation.first)
+                {
+                    std::string message = "The activity '" + info.title + "' can not be launched:\n" +
+                                          validation.second;
+                    ::fwGui::dialog::MessageDialog::showMessageDialog("Activity launch",
+                                                                      message,
+                                                                      ::fwGui::dialog::IMessageDialog::CRITICAL);
+                    return;
+                }
+            }
+        }
+    }
+
+
+    ParametersType parameters = this->translateParameters(m_parameters);
+    ::fwActivities::registry::ActivityMsg msg = ::fwActivities::registry::ActivityMsg(series, info, parameters);
+
+    m_sigActivityLaunched->asyncEmit(msg);
+}
+
+//------------------------------------------------------------------------------
+
 SActivityLauncher::ParametersType SActivityLauncher::translateParameters( const ParametersType& parameters )
 {
     ParametersType transParams = parameters;
     ::fwData::Object::sptr workingObj = this->getObject();
-    BOOST_FOREACH(ParametersType::value_type& param, transParams)
+    for(ParametersType::value_type& param :  transParams)
     {
         if(param.isSeshat())
         {
@@ -535,6 +631,18 @@ SActivityLauncher::ParametersType SActivityLauncher::translateParameters( const
     return transParams;
 }
 
-}
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SActivityLauncher::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Vector::s_ADDED_OBJECTS_SIG, s_UPDATE_STATE_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Vector::s_REMOVED_OBJECTS_SIG, s_UPDATE_STATE_SLOT ) );
+
+    return connections;
 }
 
+//------------------------------------------------------------------------------
+
+}
+}
diff --git a/Bundles/core/activities/src/activities/action/SCreateActivity.cpp b/Bundles/core/activities/src/activities/action/SCreateActivity.cpp
new file mode 100644
index 0000000..c17c6c0
--- /dev/null
+++ b/Bundles/core/activities/src/activities/action/SCreateActivity.cpp
@@ -0,0 +1,269 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "activities/action/SCreateActivity.hpp"
+
+#include <fwActivities/IBuilder.hpp>
+#include <fwActivities/IValidator.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/Convert.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <QApplication>
+#include <QDialog>
+#include <QPushButton>
+#include <QListWidget>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QStandardItemModel>
+
+Q_DECLARE_METATYPE(::fwActivities::registry::ActivityInfo)
+
+namespace activities
+{
+namespace action
+{
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::activities::action::SCreateActivity, ::fwData::Vector );
+
+//------------------------------------------------------------------------------
+
+const ::fwCom::Signals::SignalKeyType SCreateActivity::s_ACTIVITY_ID_SELECTED_SIG = "activityIDSelected";
+const ::fwCom::Signals::SignalKeyType SCreateActivity::s_ACTIVITY_SELECTED_SIG    = "activitySelected";
+
+//------------------------------------------------------------------------------
+
+SCreateActivity::SCreateActivity() throw()
+{
+    m_sigActivityIDSelected = newSignal< ActivityIDSelectedSignalType >(s_ACTIVITY_ID_SELECTED_SIG);
+    m_sigActivitySelected   = newSignal< ActivitySelectedSignalType >(s_ACTIVITY_SELECTED_SIG);
+}
+
+//------------------------------------------------------------------------------
+
+SCreateActivity::~SCreateActivity() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::starting() throw(::fwTools::Failed)
+{
+    this->actionServiceStarting();
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::stopping() throw(::fwTools::Failed)
+{
+    this->actionServiceStopping();
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::configuring() throw(fwTools::Failed)
+{
+    this->::fwGui::IActionSrv::initialize();
+    typedef ::fwServices::IService::ConfigType ConfigType;
+
+    const ::fwServices::IService::ConfigType srvconfig = this->getConfigTree().get_child("service");
+
+    if(srvconfig.count("filter") == 1 )
+    {
+        const ::fwServices::IService::ConfigType &configFilter = srvconfig.get_child("filter");
+        SLM_ASSERT("A maximum of 1 <mode> tag is allowed", configFilter.count("mode") < 2);
+
+        const std::string mode = configFilter.get< std::string >("mode");
+        SLM_ASSERT("'" + mode + "' value for <mode> tag isn't valid. Allowed values are : 'include', 'exclude'.",
+                   mode == "include" || mode == "exclude");
+        m_filterMode = mode;
+
+        BOOST_FOREACH( const ConfigType::value_type &v,  configFilter.equal_range("id") )
+        {
+            m_keys.push_back(v.second.get<std::string>(""));
+        }
+    }
+    SLM_ASSERT("A maximum of 1 <filter> tag is allowed", srvconfig.count("filter") < 2);
+}
+
+//------------------------------------------------------------------------------
+
+::fwActivities::registry::ActivityInfo SCreateActivity::show( const ActivityInfoContainer & infos )
+{
+    QWidget *parent = qApp->activeWindow();
+
+    QDialog* dialog = new QDialog(parent);
+    dialog->setWindowTitle(QString::fromStdString("Choose an activity"));
+    dialog->resize(600, 400);
+
+
+    QStandardItemModel *model = new QStandardItemModel(dialog);
+    for( const ::fwActivities::registry::ActivityInfo &info :  infos)
+    {
+        std::string text;
+        if(info.title.empty())
+        {
+            text = info.id;
+        }
+        else
+        {
+            text = info.title + (info.description.empty() ? "" : "\n" + info.description);
+        }
+
+        QStandardItem* item = new QStandardItem(QIcon(info.icon.c_str()), QString::fromStdString(text));
+        item->setData(QVariant::fromValue(info));
+        item->setEditable(false);
+        model->appendRow(item);
+    }
+
+
+    QListView * selectionList = new QListView();
+    selectionList->setIconSize(QSize(40,40));
+    selectionList->setUniformItemSizes(true);
+    selectionList->setModel(model);
+
+    QModelIndex index = model->index( 0, 0 );
+    if ( index.isValid() )
+    {
+        selectionList->selectionModel()->select( index, QItemSelectionModel::Select );
+    }
+
+    QPushButton* okButton     = new QPushButton("Ok");
+    QPushButton* cancelButton = new QPushButton("Cancel");
+
+    QHBoxLayout *hLayout = new QHBoxLayout();
+    hLayout->addWidget(okButton);
+    hLayout->addWidget(cancelButton);
+
+    QVBoxLayout *vLayout = new QVBoxLayout();
+    vLayout->addWidget(selectionList);
+    vLayout->addLayout(hLayout);
+
+    dialog->setLayout(vLayout);
+    QObject::connect(okButton, SIGNAL(clicked()), dialog, SLOT(accept()));
+    QObject::connect(cancelButton, SIGNAL(clicked()), dialog, SLOT(reject()));
+    QObject::connect(selectionList, SIGNAL(doubleClicked( const QModelIndex &  )), dialog, SLOT(accept()));
+
+    ::fwActivities::registry::ActivityInfo info;
+    if(dialog->exec())
+    {
+        QModelIndex currentIndex = selectionList->selectionModel()->currentIndex();
+        QStandardItem *item      = model->itemFromIndex( currentIndex );
+        QVariant var             = item->data();
+        info = var.value< ::fwActivities::registry::ActivityInfo >();
+    }
+
+    return info;
+}
+
+//------------------------------------------------------------------------------
+
+SCreateActivity::ActivityInfoContainer SCreateActivity::getEnabledActivities(const ActivityInfoContainer& infos)
+{
+    ActivityInfoContainer configs;
+
+    if(m_filterMode == "include" || m_filterMode == "exclude")
+    {
+        const bool isIncludeMode = m_filterMode == "include";
+
+        for(auto info : infos)
+        {
+            KeysType::iterator keyIt = std::find(m_keys.begin(), m_keys.end(), info.id);
+
+            if(keyIt != m_keys.end() && isIncludeMode)
+            {
+                configs.push_back(info);
+            }
+            else if(keyIt == m_keys.end() && !isIncludeMode)
+            {
+                configs.push_back(info);
+            }
+        }
+    }
+    else
+    {
+        configs = infos;
+    }
+
+    return configs;
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::updating() throw(::fwTools::Failed)
+{
+    ::fwData::Vector::sptr selection = this->getObject< ::fwData::Vector >();
+
+    bool update = false;
+    if (selection->size() == 1)
+    {
+        ::fwMedData::ActivitySeries::sptr as = ::fwMedData::ActivitySeries::dynamicCast(selection->front());
+        if (as)
+        {
+            m_sigActivitySelected->asyncEmit(as);
+            update = true;
+        }
+    }
+
+    if (!update)
+    {
+        ActivityInfoContainer infos = ::fwActivities::registry::Activities::getDefault()->getInfos();
+        infos = this->getEnabledActivities(infos);
+
+        if ( !infos.empty())
+        {
+            ::fwActivities::registry::ActivityInfo info;
+            if((m_keys.size() == 1 && m_filterMode == "include") || (infos.size() == 1))
+            {
+                info = infos[0];
+            }
+            else
+            {
+                info = this->show( infos );
+            }
+
+            if( !info.id.empty() )
+            {
+                m_sigActivityIDSelected->asyncEmit(info.id);
+            }
+        }
+        else
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog("Activity launcher",
+                                                              "No available activity for the current selection.",
+                                                              ::fwGui::dialog::MessageDialog::WARNING);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+}
+}
diff --git a/Bundles/core/activities/src/activities/editor/SCreateActivity.cpp b/Bundles/core/activities/src/activities/editor/SCreateActivity.cpp
new file mode 100644
index 0000000..a346baa
--- /dev/null
+++ b/Bundles/core/activities/src/activities/editor/SCreateActivity.cpp
@@ -0,0 +1,274 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "activities/editor/SCreateActivity.hpp"
+
+#include <fwActivities/IBuilder.hpp>
+#include <fwActivities/IValidator.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/dialog/SelectorDialog.hpp>
+#include <fwGuiQt/container/QtContainer.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/Convert.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+#include <QGridLayout>
+#include <QLabel>
+#include <QPainter>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QGroupBox>
+#include <QScrollArea>
+
+
+Q_DECLARE_METATYPE(::fwActivities::registry::ActivityInfo)
+
+namespace activities
+{
+namespace editor
+{
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::gui::editor::IEditor, ::activities::editor::SCreateActivity, ::fwData::Object );
+
+//------------------------------------------------------------------------------
+
+const ::fwCom::Signals::SignalKeyType SCreateActivity::s_ACTIVITY_ID_SELECTED_SIG = "activityIDSelected";
+const ::fwCom::Signals::SignalKeyType SCreateActivity::s_LOAD_REQUESTED_SIG       = "loadRequested";
+
+//------------------------------------------------------------------------------
+
+SCreateActivity::SCreateActivity() throw()
+{
+    newSignal< ActivityIDSelectedSignalType >(s_ACTIVITY_ID_SELECTED_SIG);
+    newSignal< LoadRequestedSignalType >(s_LOAD_REQUESTED_SIG);
+}
+
+//------------------------------------------------------------------------------
+
+SCreateActivity::~SCreateActivity() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::configuring() throw(fwTools::Failed)
+{
+    fwGui::IGuiContainerSrv::initialize();
+
+    typedef ::fwServices::IService::ConfigType ConfigType;
+
+    const ::fwServices::IService::ConfigType srvconfig = this->getConfigTree().get_child("service");
+
+    if(srvconfig.count("filter") == 1 )
+    {
+        const ::fwServices::IService::ConfigType& configFilter = srvconfig.get_child("filter");
+        SLM_ASSERT("A maximum of 1 <mode> tag is allowed", configFilter.count("mode") < 2);
+
+        const std::string mode = configFilter.get< std::string >("mode");
+        SLM_ASSERT("'" + mode + "' value for <mode> tag isn't valid. Allowed values are : 'include', 'exclude'.",
+                   mode == "include" || mode == "exclude");
+        m_filterMode = mode;
+
+        BOOST_FOREACH( const ConfigType::value_type &v,  configFilter.equal_range("id") )
+        {
+            m_keys.push_back(v.second.get<std::string>(""));
+        }
+    }
+    SLM_ASSERT("A maximum of 1 <filter> tag is allowed", srvconfig.count("filter") < 2);
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::starting() throw(::fwTools::Failed)
+{
+    fwGui::IGuiContainerSrv::create();
+
+    fwGuiQt::container::QtContainer::sptr qtContainer = fwGuiQt::container::QtContainer::dynamicCast(getContainer());
+
+    QWidget* const container = qtContainer->getQtContainer();
+
+    QGroupBox* groupBox = new QGroupBox(tr("Activities") );
+
+    QScrollArea* scrollArea = new QScrollArea(container);
+    scrollArea->setWidget(groupBox);
+    scrollArea->setWidgetResizable(true);
+
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+    mainLayout->addWidget(scrollArea);
+
+    container->setLayout(mainLayout);
+
+    m_buttonGroup = new QButtonGroup(groupBox);
+
+    ActivityInfoContainer infos = ::fwActivities::registry::Activities::getDefault()->getInfos();
+    m_activitiesInfo = this->getEnabledActivities(infos);
+
+    // Add the load button
+    ::fwActivities::registry::ActivityInfo infoLoad;
+    infoLoad.title       = "Load activity";
+    infoLoad.icon        = std::string(BUNDLE_PREFIX) + std::string("/media_0-1/icons/LoadActivity.svg");
+    infoLoad.description = "Load a previously saved activity.";
+
+    m_activitiesInfo.insert(m_activitiesInfo.begin(), infoLoad);
+
+    size_t indexButton = 0;
+    size_t numCols     = static_cast<size_t>(std::ceil(std::sqrt(static_cast<float>(m_activitiesInfo.size()))));
+    int numRows        = static_cast<int>(std::floor(std::sqrt(static_cast<float>(m_activitiesInfo.size()))));
+    numCols = numCols + numCols + 1;
+
+    container->setObjectName("activities");
+    std::string styleGrid("QGridLayout#activities {"
+                          "border-width: 4px;"
+                          "}");
+    container->setStyleSheet(QString::fromUtf8(styleGrid.c_str()));
+
+    QGridLayout* activitiesLayout = new QGridLayout();
+    activitiesLayout->setRowMinimumHeight(0, 5);
+    activitiesLayout->setRowStretch(0, 2);
+    groupBox->setLayout(activitiesLayout);
+
+    QFont font;
+    font.setPointSize(12);
+    font.setBold(true);
+
+    std::string style("QPushButton#activityButton {"
+                      "padding: 16px;"
+                      "text-align:bottom"
+                      "}");
+
+    int i = 1;
+    int j = 0;
+
+    for(const ::fwActivities::registry::ActivityInfo& info :  m_activitiesInfo)
+    {
+        QPushButton* button = new QPushButton(QIcon(info.icon.c_str()), QString::fromStdString(" " + info.title));
+        button->setToolTip(QString::fromStdString(info.description));
+        button->setIconSize(QSize(80, 80));
+        button->setObjectName("activityButton");
+        button->setFont(font);
+
+        button->setStyleSheet(QString::fromUtf8(style.c_str()));
+        m_buttonGroup->addButton(button, static_cast<int>(indexButton));
+
+        QLabel* label = new QLabel(QString::fromStdString(info.description));
+        label->setWordWrap(true);
+
+        activitiesLayout->setColumnMinimumWidth(j, 10);
+        activitiesLayout->setColumnStretch(j, 5);
+        activitiesLayout->addWidget(button, i, j + 1);
+
+        activitiesLayout->addWidget(label, i + 1, j + 1);
+        j += 2;
+        if(j == static_cast<int>(numCols) - 1 )
+        {
+            activitiesLayout->setColumnMinimumWidth(j, 10);
+            activitiesLayout->setColumnStretch(j, 5);
+            i += 3;
+            j  = 0;
+        }
+
+        activitiesLayout->setRowMinimumHeight(i + 2, 5);
+        activitiesLayout->setRowStretch(i + 2, 1);
+
+        ++indexButton;
+    }
+
+    activitiesLayout->setRowMinimumHeight(numRows * 3, 5);
+    activitiesLayout->setRowStretch(numRows * 3, 2);
+
+    this->connect(m_buttonGroup, SIGNAL(buttonClicked(int)), SLOT(onClicked(int)));
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::stopping() throw(::fwTools::Failed)
+{
+    this->disconnect();
+    this->getContainer()->clean();
+    ::fwGui::IGuiContainerSrv::destroy();
+}
+
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SCreateActivity::onClicked(int id)
+{
+    if(id == 0)
+    {
+        auto sig = this->signal<LoadRequestedSignalType>(s_LOAD_REQUESTED_SIG);
+        sig->asyncEmit();
+    }
+    else
+    {
+        auto sig = this->signal<ActivityIDSelectedSignalType>(s_ACTIVITY_ID_SELECTED_SIG);
+        sig->asyncEmit(m_activitiesInfo[ static_cast<size_t>(id)].id);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+SCreateActivity::ActivityInfoContainer SCreateActivity::getEnabledActivities(const ActivityInfoContainer& infos)
+{
+    ActivityInfoContainer configs;
+
+    if(m_filterMode == "include" || m_filterMode == "exclude")
+    {
+        const bool isIncludeMode = m_filterMode == "include";
+
+        for(ActivityInfoContainer::const_iterator iter = infos.begin(); iter != infos.end(); ++iter)
+        {
+            KeysType::iterator keyIt = std::find(m_keys.begin(), m_keys.end(), iter->id);
+
+            if(keyIt != m_keys.end() && isIncludeMode)
+            {
+                configs.push_back(*iter);
+            }
+            else if(keyIt == m_keys.end() && !isIncludeMode)
+            {
+                configs.push_back(*iter);
+            }
+        }
+    }
+    else
+    {
+        configs = infos;
+    }
+
+    return configs;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace editor
+} // namespace activities
diff --git a/Bundles/core/activities/src/activities/helper/Activity.cpp b/Bundles/core/activities/src/activities/helper/Activity.cpp
deleted file mode 100644
index 1ccd7a2..0000000
--- a/Bundles/core/activities/src/activities/helper/Activity.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/regex.hpp>
-#include <boost/algorithm/string/replace.hpp>
-
-#include <fwTools/UUID.hpp>
-
-#include <fwData/Boolean.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/registry/AppConfig.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwDataCamp/getObject.hpp>
-
-#include <fwMedData/ActivitySeries.hpp>
-#include <fwActivities/registry/Activities.hpp>
-
-#include "activities/helper/Activity.hpp"
-
-
-namespace activities
-{
-namespace helper
-{
-
-//-----------------------------------------------------------------------------
-
-::fwServices::ObjectMsg::sptr buildActivityMsg( ::fwMedData::ActivitySeries::sptr series,
-        const ::fwActivities::registry::ActivityInfo & info,
-        const ParametersType& parameters)
-{
-    namespace ActiReg = fwActivities::registry;
-
-    ::fwServices::ObjectMsg::sptr activityMsg = ::fwServices::ObjectMsg::New();
-    ::fwData::Composite::sptr replaceMap = ::fwData::Composite::New();
-    SLM_ASSERT("ActivitySeries instantiation failed", series);
-
-    const std::string eventID              = "NEW_CONFIGURATION_HELPER";
-    const std::string fieldID              = "APPCONFIG";
-    const std::string viewConfigFieldID    = "VIEWCONFIGID";
-    const std::string closableFieldID      = "CLOSABLE";
-    const std::string iconFieldID          = "ICON";
-    const std::string tooltipFieldID       = "TOOLTIP";
-    const std::string tabIDFieldID         = "TABID";
-    const std::string tabInfoID            = "TABINFO";
-    const std::string asFieldID            = "ACTIVITYSERIES";
-    const std::string asUID                = "AS_UID";
-    const std::string genericUID           = "GENERIC_UID";
-    const std::string tabID                = "TABID_" + ::fwTools::UUID::generateUUID();
-
-    ::fwData::String::sptr title = ::fwData::String::New();
-
-    title->value() = info.title;
-    activityMsg->addEvent( eventID, title );
-    title->setField( viewConfigFieldID, ::fwData::String::New(info.appConfig.id) );
-    title->setField( closableFieldID, ::fwData::Boolean::New(true));
-    title->setField( tabIDFieldID, ::fwData::String::New(tabID));
-
-    if(info.tabInfo.empty())
-    {
-
-        title->setField( tabInfoID, ::fwData::String::New(info.title));
-    }
-    else
-    {
-
-        std::string newTabInfo = info.tabInfo;
-        ::boost::regex e("(!(([[:word:]]+\\.?)+[[:word:]]))");
-        ::boost::smatch what;
-        if(boost::regex_search(newTabInfo, what, e))
-        {
-            std::string submatch(what[1].first, what[1].second);
-
-            submatch.replace(0, 1, "@");
-
-            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(series->getData(), submatch);
-            OSLM_ASSERT("Invalid seshat path : '" << submatch <<"'", obj);
-
-            ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
-
-            std::string tabInfoSeshat;
-
-            if(stringParameter)
-            {
-                tabInfoSeshat = stringParameter->getValue();
-            }
-            else
-            {
-                OSLM_WARN("Seshat path '" << submatch << "' doesn't reference an fwData::String");
-            }
-
-            submatch.replace(0, 1, "!");
-            ::boost::algorithm::replace_all(newTabInfo, submatch, tabInfoSeshat);
-
-        }
-        title->setField( tabInfoID, ::fwData::String::New(newTabInfo));
-    }
-    title->setField( iconFieldID, ::fwData::String::New(info.icon) );
-    title->setField( tooltipFieldID, ::fwData::String::New(info.title) );
-    title->setField( asFieldID, series );
-    title->setField( fieldID, replaceMap );
-
-
-    std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier(info.id);
-    (*replaceMap)[genericUID] = ::fwData::String::New(genericUidAdaptor);
-
-    ActiReg::ActivityAppConfig::ActivityAppConfigParamsType params = info.appConfig.parameters;
-    params.reserve(params.size() + parameters.size() + 1);
-    params.insert(params.end(), parameters.begin(), parameters.end());
-    ActiReg::ActivityAppConfigParam asConfigParam;
-    asConfigParam.replace = asUID;
-    asConfigParam.by = series->getID();
-    params.push_back(asConfigParam);
-    BOOST_FOREACH(const ActiReg::ActivityAppConfigParam& param, params)
-    {
-        if(!param.isSeshat())
-        {
-            (*replaceMap)[param.replace] = ::fwData::String::New(param.by);
-        }
-        else
-        {
-            std::string parameterToReplace = param.by;
-            if (parameterToReplace.substr(0,1) == "!")
-            {
-                parameterToReplace.replace(0, 1, "@");
-            }
-
-            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(series->getData(), parameterToReplace);
-            OSLM_ASSERT("Invalid seshat path : '"<<param.by<<"'", obj);
-
-            ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
-
-            std::string parameterValue = obj->getID();
-
-            if(stringParameter && param.by.substr(0,1) == "!")
-            {
-                parameterValue = stringParameter->getValue();
-            }
-            (*replaceMap)[param.replace] = ::fwData::String::New(parameterValue);
-        }
-    }
-    return activityMsg;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace helper
-} // namespace activities
diff --git a/Bundles/core/appXml/CMakeLists.txt b/Bundles/core/appXml/CMakeLists.txt
index 0729bf3..1c29206 100644
--- a/Bundles/core/appXml/CMakeLists.txt
+++ b/Bundles/core/appXml/CMakeLists.txt
@@ -1,9 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-    fwServices
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
 
diff --git a/Bundles/core/appXml/COPYING b/Bundles/core/appXml/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/appXml/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/appXml/COPYING.LESSER b/Bundles/core/appXml/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/appXml/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/appXml/Properties.cmake b/Bundles/core/appXml/Properties.cmake
index 989972c..5483111 100644
--- a/Bundles/core/appXml/Properties.cmake
+++ b/Bundles/core/appXml/Properties.cmake
@@ -2,6 +2,11 @@
 set( NAME appXml )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwRuntime fwServices )
+set( START ON )
+set( DEPENDENCIES 
+    fwCore 
+    fwRuntime
+    fwServices
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/appXml/bin/build.options b/Bundles/core/appXml/bin/build.options
deleted file mode 100644
index ddedae1..0000000
--- a/Bundles/core/appXml/bin/build.options
+++ /dev/null
@@ -1,5 +0,0 @@
-TYPE    = 'bundle'
-USE     = ['boost']
-LIB     = ['fwRuntime_0-3','fwData_0-1','fwServices_0-1']
-VERSION = '0-1'
-
diff --git a/Bundles/core/appXml/include/appXml/Namespace.hpp b/Bundles/core/appXml/include/appXml/Namespace.hpp
index 89557a5..89de242 100644
--- a/Bundles/core/appXml/include/appXml/Namespace.hpp
+++ b/Bundles/core/appXml/include/appXml/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef APPXMLNAMESPACE_HPP_
-#define APPXMLNAMESPACE_HPP_
+#ifndef __APPXML_NAMESPACE_HPP__
+#define __APPXML_NAMESPACE_HPP__
 
 /**
  * @brief      The namespace appXml.
  * @namespace  appXml
- * 
+ *
  * @date       2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace appXml
 {
 
 }
-#endif /* APPXMLNAMESPACE_HPP_ */
+#endif /* __APPXML_NAMESPACE_HPP__ */
diff --git a/Bundles/core/appXml/include/appXml/Plugin.hpp b/Bundles/core/appXml/include/appXml/Plugin.hpp
index bd253ab..8992c14 100644
--- a/Bundles/core/appXml/include/appXml/Plugin.hpp
+++ b/Bundles/core/appXml/include/appXml/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _APPXML_PLUGIN_HPP_
-#define _APPXML_PLUGIN_HPP_
+#ifndef __APPXML_PLUGIN_HPP__
+#define __APPXML_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 #include <fwServices/AppConfigManager.hpp>
@@ -17,7 +17,6 @@ namespace appXml
 
 /**
  * @brief   This class is started when the bundles is loaded.
- * @class   Plugin
  */
 class APPXML_CLASS_API Plugin : public ::fwRuntime::Plugin
 {
@@ -46,4 +45,4 @@ private:
 
 } // namespace appXml
 
-#endif // _APPXML_PLUGIN_HPP_
+#endif // __APPXML_PLUGIN_HPP__
diff --git a/Bundles/core/appXml/include/appXml/config.hpp b/Bundles/core/appXml/include/appXml/config.hpp
deleted file mode 100644
index 7cb5cb8..0000000
--- a/Bundles/core/appXml/include/appXml/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _APPXML_CONFIG_HPP_
-#define _APPXML_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef APPXML_EXPORTS
-    #define APPXML_API __declspec(dllexport)
-    #else
-    #define APPXML_API __declspec(dllimport)
-    #endif
-
-    #define APPXML_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef APPXML_EXPORTS
-    #define APPXML_API __attribute__ ((visibility("default")))
-    #define APPXML_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define APPXML_API __attribute__ ((visibility("hidden")))
-    #define APPXML_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define APPXML_API
-    #define APPXML_CLASS_API
-
-#endif
-
-#endif // _APPXML_CONFIG_HPP_
diff --git a/Bundles/core/appXml/rc/plugin.xml b/Bundles/core/appXml/rc/plugin.xml
index ccaee4f..03f9c07 100644
--- a/Bundles/core/appXml/rc/plugin.xml
+++ b/Bundles/core/appXml/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="appXml" class="::appXml::Plugin" >
+<plugin id="appXml" class="::appXml::Plugin" version="@DASH_VERSION@" >
 
     <library name="appXml" />
     <requirement id="servicesReg" />
diff --git a/Bundles/core/appXml/src/appXml/Plugin.cpp b/Bundles/core/appXml/src/appXml/Plugin.cpp
index a682bbc..76d93c1 100644
--- a/Bundles/core/appXml/src/appXml/Plugin.cpp
+++ b/Bundles/core/appXml/src/appXml/Plugin.cpp
@@ -1,11 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/registry/AppConfig.hpp>
 #include <fwServices/registry/AppConfigParameters.hpp>
 
@@ -19,22 +18,24 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 //------------------------------------------------------------------------------
 
 Plugin::Plugin() throw() : m_configurationName(""),m_parametersName("")
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Plugin::start() throw( ::fwRuntime::RuntimeException )
 {
     SLM_FATAL_IF("Bundle appXml, missing param config in profile", !this->getBundle()->hasParameter("config"));
-    m_configurationName =  this->getBundle()->getParameterValue("config") ;
+    m_configurationName = this->getBundle()->getParameterValue("config");
     if( this->getBundle()->hasParameter("parameters") )
     {
-        m_parametersName =  this->getBundle()->getParameterValue("parameters") ;
+        m_parametersName = this->getBundle()->getParameterValue("parameters");
     }
 }
 
@@ -42,36 +43,37 @@ void Plugin::start() throw( ::fwRuntime::RuntimeException )
 
 void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
 {
-    SLM_ASSERT("Sorry, the OSR is already initialized.", ! m_appConfigMng );
-    SLM_ASSERT("Sorry, configuration name parameter is not initialized.", !m_configurationName.empty());
+    SLM_ASSERT("The OSR is already initialized.", !m_appConfigMng );
+    SLM_ASSERT("The configuration name parameter is not initialized.", !m_configurationName.empty());
 
     m_appConfigMng = ::fwServices::AppConfigManager::New();
 
     if( m_parametersName.empty() )
     {
-        const ::fwServices::registry::AppConfig::FieldAdaptorType fields;
-        ::fwRuntime::ConfigurationElement::csptr config = ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( m_configurationName, fields );
-        m_appConfigMng->setConfig( ::fwRuntime::ConfigurationElement::constCast( config ) );
+        const ::fwServices::registry::FieldAdaptorType fields;
+        m_appConfigMng->setConfig( m_configurationName, fields );
     }
     else
     {
-        const ::fwServices::registry::AppConfig::FieldAdaptorType & fields = ::fwServices::registry::AppConfigParameters::getDefault()->getParameters( m_parametersName );
-        ::fwRuntime::ConfigurationElement::csptr config = ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( m_configurationName, fields );
-        m_appConfigMng->setConfig( ::fwRuntime::ConfigurationElement::constCast( config ) );
+        const ::fwServices::registry::FieldAdaptorType & fields =
+            ::fwServices::registry::AppConfigParameters::getDefault()->getParameters( m_parametersName );
+        m_appConfigMng->setConfig( m_configurationName, fields );
     }
+
     m_appConfigMng->launch();
 }
 
 //------------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Plugin::uninitialize() throw()
 {
-    SLM_ASSERT("Sorry, the OSR is not initialized.", m_appConfigMng );
+    SLM_ASSERT("The OSR is not initialized.", m_appConfigMng );
     m_appConfigMng->stopAndDestroy();
 }
 
diff --git a/Apps/Tuto07LoaderForExternalData/CMakeLists.txt b/Bundles/core/appXml2/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto07LoaderForExternalData/CMakeLists.txt
rename to Bundles/core/appXml2/CMakeLists.txt
diff --git a/Bundles/core/appXml2/Properties.cmake b/Bundles/core/appXml2/Properties.cmake
new file mode 100644
index 0000000..cf612b8
--- /dev/null
+++ b/Bundles/core/appXml2/Properties.cmake
@@ -0,0 +1,12 @@
+
+set( NAME appXml2 )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( START ON )
+set( DEPENDENCIES 
+    fwCore 
+    fwRuntime
+    fwServices
+)
+set( REQUIREMENTS  )
+
diff --git a/Bundles/core/appXml2/include/appXml2/Namespace.hpp b/Bundles/core/appXml2/include/appXml2/Namespace.hpp
new file mode 100644
index 0000000..e74537d
--- /dev/null
+++ b/Bundles/core/appXml2/include/appXml2/Namespace.hpp
@@ -0,0 +1,17 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __APPXML2_NAMESPACE_HPP__
+#define __APPXML2_NAMESPACE_HPP__
+
+/**
+ * @brief      The namespace appXml2.
+ */
+namespace appXml2
+{
+
+}
+#endif /* __APPXML2_NAMESPACE_HPP__ */
diff --git a/Bundles/core/appXml2/include/appXml2/Plugin.hpp b/Bundles/core/appXml2/include/appXml2/Plugin.hpp
new file mode 100644
index 0000000..b5b4361
--- /dev/null
+++ b/Bundles/core/appXml2/include/appXml2/Plugin.hpp
@@ -0,0 +1,48 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __APPXML2_PLUGIN_HPP__
+#define __APPXML2_PLUGIN_HPP__
+
+#include "appXml2/config.hpp"
+
+#include <fwRuntime/Plugin.hpp>
+#include <fwServices/AppConfigManager2.hpp>
+
+namespace appXml2
+{
+
+/**
+ * @brief   This class is started when the bundles is loaded.
+ */
+class APPXML2_CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+public:
+    /// Constructor.
+    APPXML2_API Plugin() throw();
+
+    /// Destructor. Do nothing.
+    APPXML2_API ~Plugin() throw();
+
+    /// Overrides start method. .
+    APPXML2_API void start() throw(::fwRuntime::RuntimeException);
+
+    /// Overrides stop method. Do nothing
+    APPXML2_API void stop() throw();
+
+    APPXML2_API void initialize() throw( ::fwRuntime::RuntimeException );
+
+    APPXML2_API void uninitialize() throw();
+
+private:
+    std::string m_configurationName;
+    std::string m_parametersName;
+    ::fwServices::AppConfigManager2::sptr m_appConfigMng;
+};
+
+} // namespace appXml2
+
+#endif // __APPXML2_PLUGIN_HPP__
diff --git a/Bundles/core/appXml2/rc/plugin.xml b/Bundles/core/appXml2/rc/plugin.xml
new file mode 100644
index 0000000..f9d0430
--- /dev/null
+++ b/Bundles/core/appXml2/rc/plugin.xml
@@ -0,0 +1,7 @@
+<plugin id="appXml2" class="::appXml2::Plugin" version="@DASH_VERSION@" >
+
+    <library name="appXml2" />
+    <requirement id="servicesReg" />
+    <requirement id="dataReg" />
+
+</plugin>
diff --git a/Bundles/core/appXml2/src/appXml2/Plugin.cpp b/Bundles/core/appXml2/src/appXml2/Plugin.cpp
new file mode 100644
index 0000000..9173589
--- /dev/null
+++ b/Bundles/core/appXml2/src/appXml2/Plugin.cpp
@@ -0,0 +1,83 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/registry/AppConfig2.hpp>
+#include <fwServices/registry/AppConfigParameters.hpp>
+
+#include "appXml2/Plugin.hpp"
+
+namespace appXml2
+{
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::appXml2::Plugin");
+
+//------------------------------------------------------------------------------
+
+Plugin::Plugin() throw() : m_configurationName(""),m_parametersName("")
+{
+}
+
+//------------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::start() throw( ::fwRuntime::RuntimeException )
+{
+    SLM_FATAL_IF("Bundle appXml2, missing param config in profile", !this->getBundle()->hasParameter("config"));
+    m_configurationName = this->getBundle()->getParameterValue("config");
+    if( this->getBundle()->hasParameter("parameters") )
+    {
+        m_parametersName = this->getBundle()->getParameterValue("parameters");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
+{
+    SLM_ASSERT("The OSR is already initialized.", !m_appConfigMng );
+    SLM_ASSERT("The configuration name parameter is not initialized.", !m_configurationName.empty());
+
+    m_appConfigMng = ::fwServices::AppConfigManager2::New();
+
+    if( m_parametersName.empty() )
+    {
+        const ::fwServices::registry::FieldAdaptorType fields;
+        m_appConfigMng->setConfig( m_configurationName, fields );
+    }
+    else
+    {
+        const ::fwServices::registry::FieldAdaptorType & fields =
+            ::fwServices::registry::AppConfigParameters::getDefault()->getParameters( m_parametersName );
+        m_appConfigMng->setConfig( m_configurationName, fields );
+    }
+
+    m_appConfigMng->launch();
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::uninitialize() throw()
+{
+    SLM_ASSERT("The OSR is not initialized.", m_appConfigMng );
+    m_appConfigMng->stopAndDestroy();
+    m_appConfigMng.reset();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace appXml2
diff --git a/Bundles/core/binding/CMakeLists.txt b/Bundles/core/binding/CMakeLists.txt
deleted file mode 100644
index 91baede..0000000
--- a/Bundles/core/binding/CMakeLists.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-)
diff --git a/Bundles/core/binding/COPYING b/Bundles/core/binding/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/binding/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/binding/COPYING.LESSER b/Bundles/core/binding/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/binding/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/binding/Properties.cmake b/Bundles/core/binding/Properties.cmake
deleted file mode 100644
index 0aaa713..0000000
--- a/Bundles/core/binding/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME binding )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwCore fwPython fwRuntime )
-set( REQUIREMENTS  )
-
diff --git a/Bundles/core/binding/bin/build.options b/Bundles/core/binding/bin/build.options
deleted file mode 100644
index 3330998..0000000
--- a/Bundles/core/binding/bin/build.options
+++ /dev/null
@@ -1,6 +0,0 @@
-TYPE = 'bundle'
-VERSION = '0.1'
-
-#USE = []
-LIB = ['fwPython_0.1']
-#BUNDLES = []
diff --git a/Bundles/core/binding/include/binding/Plugin.hpp b/Bundles/core/binding/include/binding/Plugin.hpp
deleted file mode 100644
index 50affbe..0000000
--- a/Bundles/core/binding/include/binding/Plugin.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#ifndef _BINDING_PLUGIN_HPP_
-#define _BINDING_PLUGIN_HPP_
-
-
-#include <fwRuntime/Plugin.hpp>
-
-#include "binding/config.hpp"
-
-namespace binding
-{
-/**
-* @brief   This class is started when the bundles is loaded.
-* @class   Plugin
-*/
-
-class BINDING_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-public:
-    /**
-     * @brief   destructor
-     */
-    BINDING_API ~Plugin() throw();
-
-    // Overrides
-    BINDING_API void start() throw(::fwRuntime::RuntimeException);
-
-    // Overrides
-    BINDING_API void stop() throw();
-
-};
-
-
-} // namespace binding
-
-
-#endif //_BINDING_PLUGIN_HPP_
diff --git a/Bundles/core/binding/include/binding/config.hpp b/Bundles/core/binding/include/binding/config.hpp
deleted file mode 100644
index bcb8b3c..0000000
--- a/Bundles/core/binding/include/binding/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _BINDING_CONFIG_HPP_
-#define _BINDING_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef BINDING_EXPORTS
-            #define BINDING_API __declspec(dllexport)
-        #else
-            #define BINDING_API __declspec(dllimport)
-        #endif
-
-        #define BINDING_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef BINDING_EXPORTS
-            #define BINDING_API __attribute__ ((visibility("default")))
-            #define BINDING_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define BINDING_API __attribute__ ((visibility("hidden")))
-            #define BINDING_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define BINDING_API
-        #define BINDING_CLASS_API
-
-    #endif
-
-#endif //BINDING_API
-
diff --git a/Bundles/core/binding/include/binding/namespace.hpp b/Bundles/core/binding/include/binding/namespace.hpp
deleted file mode 100644
index 1d3677f..0000000
--- a/Bundles/core/binding/include/binding/namespace.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-/**
- * @brief       The binding namespace contains the basics to configure python
- * interpreter
- * @namespace   binding
- * 
- */
-
-namespace binding
-{
-
-} // namespace binding
diff --git a/Bundles/core/binding/rc/plugin.xml b/Bundles/core/binding/rc/plugin.xml
deleted file mode 100644
index 6390d9a..0000000
--- a/Bundles/core/binding/rc/plugin.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-<plugin id="binding" class="::binding::Plugin">
-    
-    <library name="binding" />
-
-</plugin>
diff --git a/Bundles/core/binding/src/binding/Plugin.cpp b/Bundles/core/binding/src/binding/Plugin.cpp
deleted file mode 100644
index d6f1eab..0000000
--- a/Bundles/core/binding/src/binding/Plugin.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwPython/python.hpp>
-#include <fwPython/bindings/base.hpp>
-
-#include "binding/Plugin.hpp"
-
-namespace binding
-{
-
-//-----------------------------------------------------------------------------
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::binding::Plugin");
-
-//-----------------------------------------------------------------------------
-
-Plugin::~Plugin() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::start() throw( ::fwRuntime::RuntimeException )
-{
-    SLM_TRACE_FUNC();
-
-    if ( this->getBundle()->hasParameter("pythonhome") )
-    {
-        ::fwPython::setHome(this->getBundle()->getParameterValue("pythonhome"));
-    }
-
-    SLM_WARN_IF( "pythonhome is not set, you may encounter some problems",
-            !this->getBundle()->hasParameter("pythonhome"));
-
-    ::fwPython::initialize();
-
-    if ( this->getBundle()->hasParameter("pythonpath") )
-    {
-        ::fwPython::addPath(this->getBundle()->getParameterValue("pythonpath"));
-    }
-
-    ::fwPython::bindings::initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void Plugin::stop() throw()
-{
-    ::fwPython::finalize();
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace binding
diff --git a/Bundles/core/dataReg/CMakeLists.txt b/Bundles/core/dataReg/CMakeLists.txt
index c8b05f8..4d48cd5 100644
--- a/Bundles/core/dataReg/CMakeLists.txt
+++ b/Bundles/core/dataReg/CMakeLists.txt
@@ -1,7 +1,12 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
+
+
+find_package (Boost COMPONENTS thread system filesystem REQUIRED)
+
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+fwLink(
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
 )
 
 
diff --git a/Bundles/core/dataReg/COPYING b/Bundles/core/dataReg/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/dataReg/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/dataReg/COPYING.LESSER b/Bundles/core/dataReg/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/dataReg/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/dataReg/Properties.cmake b/Bundles/core/dataReg/Properties.cmake
index ce505b1..fc34f49 100644
--- a/Bundles/core/dataReg/Properties.cmake
+++ b/Bundles/core/dataReg/Properties.cmake
@@ -2,6 +2,12 @@
 set( NAME dataReg )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwData fwMedData fwRuntime )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwMedData
+    fwRuntime
+    fwServices
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/dataReg/bin/build.options b/Bundles/core/dataReg/bin/build.options
deleted file mode 100644
index f8dd9b4..0000000
--- a/Bundles/core/dataReg/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-TYPE    = 'bundle'
-USE     = ['boost']
-LIB     = ['fwRuntime_0-3','fwData_0-1','fwMedData_0-1','fwTools_0-1','fwCore_0-1']
-VERSION = '0-1'
diff --git a/Bundles/core/dataReg/include/dataReg/Namespace.hpp b/Bundles/core/dataReg/include/dataReg/Namespace.hpp
index ecc0dbe..7c7dfac 100644
--- a/Bundles/core/dataReg/include/dataReg/Namespace.hpp
+++ b/Bundles/core/dataReg/include/dataReg/Namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef DATAREGNAMESPACE_HPP_
-#define DATAREGNAMESPACE_HPP_
+#ifndef __DATAREG_NAMESPACE_HPP__
+#define __DATAREG_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace dataReg (data registration) contains classes which describes all types of data existing in FW4SPL.
@@ -15,4 +15,4 @@ namespace dataReg
 {
 
 }
-#endif /* DATAREGNAMESPACE_HPP_ */
+#endif /* __DATAREG_NAMESPACE_HPP__ */
diff --git a/Bundles/core/dataReg/include/dataReg/Plugin.hpp b/Bundles/core/dataReg/include/dataReg/Plugin.hpp
index 71f525c..3d77c1c 100644
--- a/Bundles/core/dataReg/include/dataReg/Plugin.hpp
+++ b/Bundles/core/dataReg/include/dataReg/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _DATAREG_PLUGIN_HPP_
-#define _DATAREG_PLUGIN_HPP_
+#ifndef __DATAREG_PLUGIN_HPP__
+#define __DATAREG_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -36,4 +36,4 @@ struct DATAREG_CLASS_API Plugin : public ::fwRuntime::Plugin
 
 } // namespace dataReg
 
-#endif //_DATAREG_PLUGIN_HPP_
+#endif //__DATAREG_PLUGIN_HPP__
diff --git a/Bundles/core/dataReg/include/dataReg/config.hpp b/Bundles/core/dataReg/include/dataReg/config.hpp
deleted file mode 100644
index 5aedb25..0000000
--- a/Bundles/core/dataReg/include/dataReg/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _DATAREG_CONFIG_HPP_
-#define _DATAREG_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef DATAREG_EXPORTS
-    #define DATAREG_API __declspec(dllexport)
-    #else
-    #define DATAREG_API __declspec(dllimport)
-    #endif
-
-    #define DATAREG_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef DATAREG_EXPORTS
-    #define DATAREG_API __attribute__ ((visibility("default")))
-    #define DATAREG_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define DATAREG_API __attribute__ ((visibility("hidden")))
-    #define DATAREG_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define DATAREG_API
-    #define DATAREG_CLASS_API
-
-#endif
-
-#endif //DATAREG_API
diff --git a/Bundles/core/dataReg/include/dataReg/parser/Composite.hpp b/Bundles/core/dataReg/include/dataReg/parser/Composite.hpp
new file mode 100644
index 0000000..000a2a3
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/parser/Composite.hpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PARSER_COMPOSITE_HPP__
+#define __DATAREG_PARSER_COMPOSITE_HPP__
+
+#include "dataReg/config.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/IXMLParser.hpp>
+
+#include <fwTools/Failed.hpp>
+#include <fwTools/Object.hpp>
+
+
+namespace dataReg
+{
+namespace parser
+{
+/**
+ * @brief   Specific service for the construction of a Composite and its associated services from an XML-based description.
+ * @see     ::fwServices::IXMLParser
+ */
+class DATAREG_CLASS_API Composite : public ::fwServices::IXMLParser
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (Composite)(::fwServices::IXMLParser) );
+
+    /**
+     * @brief   Constructor : does nothing.
+     */
+    Composite( )
+    {
+    }
+
+    /**
+     * @brief   Destructor : does nothing.
+     */
+    virtual ~Composite()
+    {
+    }
+
+    DATAREG_API void createConfig( ::fwTools::Object::sptr _obj );
+
+    DATAREG_API void startConfig();
+
+    DATAREG_API void updateConfig();
+
+    DATAREG_API void stopConfig();
+
+    DATAREG_API void destroyConfig();
+
+protected:
+
+    /**
+     * @brief   Updating method : create composite object.
+     *
+     * Parse the composite configuration element to configure and add its objects.
+     */
+    DATAREG_API virtual void updating( ) throw(fwTools::Failed);
+
+private:
+
+    /// To verify some conditions in xml file
+    bool refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement );
+
+    std::vector< ::fwServices::IAppConfigManager::sptr > m_ctmContainer;
+};
+
+} //namespace parser
+} //namespace dataReg
+
+#endif /* __DATAREG_PARSER_COMPOSITE_HPP__ */
diff --git a/Bundles/core/dataReg/include/dataReg/parser/GenericField.hpp b/Bundles/core/dataReg/include/dataReg/parser/GenericField.hpp
new file mode 100644
index 0000000..de81a5e
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/parser/GenericField.hpp
@@ -0,0 +1,99 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PARSER_GENERICFIELD_HPP__
+#define __DATAREG_PARSER_GENERICFIELD_HPP__
+
+#include "dataReg/config.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/IXMLParser.hpp>
+
+#include <fwTools/Failed.hpp>
+#include <fwTools/Object.hpp>
+
+namespace dataReg
+{
+namespace parser
+{
+/**
+ * @brief   Specific service for the construction of a GenericField and its associated services from an XML-based description.
+ * @see     ::fwServices::IXMLParser
+ */
+class DATAREG_CLASS_API GenericField  : public ::fwServices::IXMLParser
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (GenericField)(::fwServices::IXMLParser) );
+
+    /// Constructor : does nothing.
+    GenericField()
+    {
+    }
+
+    /// Destructor : does nothing.
+    virtual ~GenericField()
+    {
+    }
+
+    DATAREG_API void createConfig( ::fwTools::Object::sptr _obj );
+protected:
+
+    /**
+     * @brief Updating method : create the process object.
+     *
+     * Parse the configuration element to configure inputs and outputs and add
+     * them in the process object.
+     */
+    DATAREG_API virtual void updating( ) throw(fwTools::Failed);
+
+};
+
+/**
+ * @brief Specialisation of GenericField parser for boolean
+ */
+class BooleanParser : public GenericField
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (BooleanParser)(::fwServices::IXMLParser) );
+};
+
+
+/**
+ * @brief Specialisation of GenericField parser for integer
+ */
+class IntegerParser : public GenericField
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (IntegerParser)(::fwServices::IXMLParser) );
+};
+
+
+/**
+ * @brief Specialisation of GenericField parser for float
+ */
+class FloatParser : public GenericField
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (FloatParser)(::fwServices::IXMLParser) );
+};
+
+
+/**
+ * @brief Specialisation of GenericField parser for string
+ */
+class StringParser : public GenericField
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (StringParser)(::fwServices::IXMLParser) );
+};
+
+} //namespace parser
+} //namespace dataReg
+
+#endif // __DATAREG_PARSER_GENERICFIELD_HPP__
diff --git a/Bundles/core/dataReg/include/dataReg/parser/List.hpp b/Bundles/core/dataReg/include/dataReg/parser/List.hpp
new file mode 100644
index 0000000..66c6691
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/parser/List.hpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PARSER_LIST_HPP__
+#define __DATAREG_PARSER_LIST_HPP__
+
+#include "dataReg/config.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/IXMLParser.hpp>
+
+#include <fwTools/Failed.hpp>
+#include <fwTools/Object.hpp>
+
+namespace dataReg
+{
+namespace parser
+{
+/**
+ * @brief   Specific service for the construction of a List and its associated services from an XML-based description.
+ * @see     ::fwServices::IXMLParser
+ */
+class DATAREG_CLASS_API List : public ::fwServices::IXMLParser
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (List)(::fwServices::IXMLParser) );
+
+    /**
+     * @brief   Constructor : does nothing.
+     */
+    List( )
+    {
+    }
+
+    /**
+     * @brief   Destructor : does nothing.
+     */
+    virtual ~List()
+    {
+    }
+
+    DATAREG_API void createConfig( ::fwTools::Object::sptr _obj );
+
+    DATAREG_API void startConfig();
+
+    DATAREG_API void updateConfig();
+
+    DATAREG_API void stopConfig();
+
+    DATAREG_API void destroyConfig();
+
+protected:
+
+    /**
+     * @brief   Updating method : create List object.
+     *
+     * Parse the List configuration element to configure and add its objects.
+     */
+    DATAREG_API virtual void updating( ) throw(fwTools::Failed);
+
+private:
+
+    /// To verify some conditions in xml file
+    bool refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement );
+
+    std::vector< ::fwServices::IAppConfigManager::sptr > m_ctmContainer;
+};
+
+} //namespace parser
+} //namespace dataReg
+
+#endif /* __DATAREG_PARSER_LIST_HPP__ */
+
diff --git a/Bundles/core/dataReg/include/dataReg/parser/Object.hpp b/Bundles/core/dataReg/include/dataReg/parser/Object.hpp
new file mode 100644
index 0000000..0572613
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/parser/Object.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PARSER_OBJECT_HPP__
+#define __DATAREG_PARSER_OBJECT_HPP__
+
+#include "dataReg/config.hpp"
+
+#include <fwServices/IAppConfigManager.hpp>
+#include <fwServices/IXMLParser.hpp>
+
+#include <fwTools/Object.hpp>
+
+namespace dataReg
+{
+namespace parser
+{
+
+/**
+ * @brief Specific ::fwTools::Object parser. Does nothing as no IService method is specialized: IXMLParser base class
+ *  methods are therefore considered.
+ *
+ * @note This implementation is only written to avoid the mix between the service type IXMLParser and the
+ * ::fwTools::Object implementation (for homogeneity).
+ *
+ */
+class DATAREG_CLASS_API Object : public ::fwServices::IXMLParser
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (Object)(::fwServices::IXMLParser) );
+
+    DATAREG_API Object( );
+    DATAREG_API virtual ~Object();
+
+    DATAREG_API void createConfig( ::fwTools::Object::sptr _obj );
+    DATAREG_API void startConfig();
+    DATAREG_API void updateConfig();
+    DATAREG_API void stopConfig();
+    DATAREG_API void destroyConfig();
+
+protected:
+
+    bool refObjectValidator( ::fwRuntime::ConfigurationElement::csptr _cfgElement );
+    void updating() throw( fwTools::Failed );
+
+    std::vector< ::fwServices::IAppConfigManager::sptr > m_ctmContainer;
+};
+
+} //namespace parser
+} //namespace dataReg
+
+#endif /* __DATAREG_PARSER_OBJECT_HPP__ */
diff --git a/Bundles/core/dataReg/include/dataReg/parser/TransferFunction.hpp b/Bundles/core/dataReg/include/dataReg/parser/TransferFunction.hpp
new file mode 100644
index 0000000..4d89dcb
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/parser/TransferFunction.hpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PARSER_TRANSFERFUNCTION_HPP__
+#define __DATAREG_PARSER_TRANSFERFUNCTION_HPP__
+
+#include "dataReg/config.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/IXMLParser.hpp>
+
+#include <fwTools/Failed.hpp>
+#include <fwTools/Object.hpp>
+
+
+namespace dataReg
+{
+namespace parser
+{
+/**
+ * @brief   Specific service for the construction of a TransferFunction and its associated services from an XML-based
+ * description.
+ * @see     ::fwServices::IXMLParser
+ */
+class DATAREG_CLASS_API TransferFunction : public ::fwServices::IXMLParser
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (TransferFunction)(::fwServices::IXMLParser) );
+
+    /// Constructor : does nothing.
+    TransferFunction()
+    {
+    }
+
+    /// Destructor : does nothing.
+    virtual ~TransferFunction()
+    {
+    }
+
+    /**
+     * @code{.xml}
+       <object type="::fwData::TransferFunction">
+           <colors>
+               <step color="#ffffff" value="0" />
+               <step color="#0000ff" value="1000" />
+               <step color="#00ff00" value="2000" />
+               <step color="#ffff00" value="3000" />
+               <step color="#ff0000" value="4000" />
+               <step color="#000000" value="5000" />
+           </colors>
+       </object>
+       @endcode
+     * - \b step : defines a step in the legend given with the arguments color in hex-code and the max value.
+     */
+    DATAREG_API void createConfig( ::fwTools::Object::sptr _obj );
+protected:
+
+    /**
+     * @brief Updating method : create the process object.
+     *
+     * Parse the configuration element to configure inputs and outputs and add
+     * them in the process object.
+     */
+    DATAREG_API virtual void updating( ) throw(fwTools::Failed);
+
+};
+
+} //namespace parser
+} //namespace dataReg
+
+#endif // __DATAREG_PARSER_TRANSFERFUNCTION_HPP__
diff --git a/Bundles/core/dataReg/include/dataReg/parser/TransformationMatrix3D.hpp b/Bundles/core/dataReg/include/dataReg/parser/TransformationMatrix3D.hpp
new file mode 100644
index 0000000..dc6b46c
--- /dev/null
+++ b/Bundles/core/dataReg/include/dataReg/parser/TransformationMatrix3D.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __DATAREG_PARSER_TRANSFORMATIONMATRIX3D_HPP__
+#define __DATAREG_PARSER_TRANSFORMATIONMATRIX3D_HPP__
+
+#include "dataReg/config.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/IXMLParser.hpp>
+
+#include <fwTools/Failed.hpp>
+#include <fwTools/Object.hpp>
+
+namespace dataReg
+{
+namespace parser
+{
+/**
+ * @brief   Specific service for the construction of a TransformationMatrix3D and its associated services from an XML-based description.
+ * @see     ::fwServices::IXMLParser
+ */
+class DATAREG_CLASS_API TransformationMatrix3D : public ::fwServices::IXMLParser
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrix3D)(::fwServices::IXMLParser) );
+
+    /// Constructor : does nothing.
+    TransformationMatrix3D()
+    {
+    }
+
+    /// Destructor : does nothing.
+    virtual ~TransformationMatrix3D()
+    {
+    }
+
+    DATAREG_API void createConfig( ::fwTools::Object::sptr _obj );
+protected:
+
+    /**
+     * @brief Updating method : create the process object.
+     *
+     * Parse the configuration element to configure inputs and outputs and add
+     * them in the process object.
+     */
+    DATAREG_API virtual void updating( ) throw(fwTools::Failed);
+
+};
+
+} //namespace parser
+} //namespace dataReg
+
+#endif // __DATAREG_PARSER_TRANSFORMATIONMATRIX3D_HPP__
diff --git a/Bundles/core/dataReg/rc/plugin.xml b/Bundles/core/dataReg/rc/plugin.xml
index 29bdb7c..8ea78b5 100644
--- a/Bundles/core/dataReg/rc/plugin.xml
+++ b/Bundles/core/dataReg/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="dataReg" class="::dataReg::Plugin" >
+<plugin id="dataReg" class="::dataReg::Plugin" version="@DASH_VERSION@" >
     
     <library name="dataReg" />
     
diff --git a/Bundles/core/dataReg/src/dataReg/Plugin.cpp b/Bundles/core/dataReg/src/dataReg/Plugin.cpp
index 5cd2cf3..4e81df7 100644
--- a/Bundles/core/dataReg/src/dataReg/Plugin.cpp
+++ b/Bundles/core/dataReg/src/dataReg/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace dataReg
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::dataReg::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
 {
@@ -30,6 +31,7 @@ void Plugin::start() throw(::fwRuntime::RuntimeException)
 }
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace dataReg
diff --git a/Bundles/core/dataReg/src/dataReg/parser/Composite.cpp b/Bundles/core/dataReg/src/dataReg/parser/Composite.cpp
new file mode 100644
index 0000000..1787eba
--- /dev/null
+++ b/Bundles/core/dataReg/src/dataReg/parser/Composite.cpp
@@ -0,0 +1,168 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "dataReg/parser/Composite.hpp"
+
+#include <fwData/Composite.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::Composite, ::fwData::Composite );
+
+namespace dataReg
+{
+namespace parser
+{
+
+//------------------------------------------------------------------------------
+
+bool Composite::refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement )
+{
+    bool isOk = true;
+
+    for(    ::fwRuntime::ConfigurationElement::Iterator configEltIter = _cfgElement->begin();
+            configEltIter != _cfgElement->end();
+            ++configEltIter)
+    {
+        std::string subElementName = (*configEltIter)->getName();
+        if(     subElementName != "service" &&
+                subElementName != "serviceList"    )
+        {
+            OSLM_ERROR(
+                "xml subelement \""<< subElementName <<
+                "\" for element object is not supported for the moment when you use a reference on item composite.");
+            isOk = false;
+        }
+    }
+
+    return isOk;
+}
+
+//------------------------------------------------------------------------------
+
+void Composite::updating( ) throw( ::fwTools::Failed)
+{
+    SLM_FATAL("This method is deprecated, and this, shouldn't be used.");
+}
+
+//------------------------------------------------------------------------------
+
+void Composite::createConfig( ::fwTools::Object::sptr _obj )
+{
+    // Declaration of attributes values
+    const std::string OBJECT_BUILD_MODE = "src";
+    const std::string BUILD_OBJECT      = "new";
+    const std::string GET_OBJECT        = "ref";
+
+    ::fwData::Composite::sptr dataComposite = ::fwData::Composite::dynamicCast(_obj);
+    SLM_ASSERT("The passed object must be a fwData::Composite",dataComposite);
+
+    for( ::fwRuntime::ConfigurationElement::csptr elem :  m_cfg->getElements() )
+    {
+        if( elem->getName() == "item" )
+        {
+
+            // Test build mode
+            std::string buildMode = BUILD_OBJECT;
+
+            if ( elem->hasAttribute( OBJECT_BUILD_MODE ) )
+            {
+                buildMode = elem->getExistingAttributeValue( OBJECT_BUILD_MODE );
+                OSLM_ASSERT( "The buildMode \""<< buildMode <<"\" is not supported, it should be either BUILD_OBJECT"
+                             "or GET_OBJECT.",
+                             buildMode == BUILD_OBJECT || buildMode == GET_OBJECT );
+            }
+
+            SLM_ASSERT( "The xml element \"item\" must have an attribute named \"key\" .",
+                        elem->hasAttribute("key") );
+            std::string key = elem->getExistingAttributeValue("key");
+            SLM_ASSERT( "The xml element \"item\" must have an attribute named \"key\" which is not empty.",
+                        !key.empty() );
+            SLM_ASSERT( "The xml element \"item\" must have one (and only one) xml sub-element \"object\".",
+                        elem->size() == 1 && (*elem->getElements().begin())->getName() == "object" );
+
+            if( buildMode == BUILD_OBJECT )
+            {
+                // Test if key already exist in composite
+                OSLM_ASSERT("The key "<< key <<" already exists in the composite.", dataComposite->find(
+                                key ) == dataComposite->end() );
+
+                // Create and manage object config
+                ::fwServices::IAppConfigManager::sptr ctm = ::fwServices::IAppConfigManager::New();
+                if( ::fwServices::IService::isVersion2())
+                {
+                    ctm->::fwServices::IAppConfigManager::setConfig( elem );
+                }
+                else
+                {
+                    ctm->::fwServices::IAppConfigManager::setConfig( *( elem->getElements().begin() ) );
+                }
+
+                m_ctmContainer.push_back( ctm );
+                ctm->create();
+                ::fwData::Object::sptr localObj = ctm->getConfigRoot();
+
+                // Add object
+                SLM_ASSERT("A ::fwData::Composite can contain only ::fwData::Object", localObj );
+                (*dataComposite)[ key ] = localObj;
+
+            }
+            else // if( buildMode == GET_OBJECT )
+            {
+                SLM_FATAL("ACH => Todo");
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Composite::startConfig()
+{
+    for( ::fwServices::IAppConfigManager::sptr ctm :  m_ctmContainer )
+    {
+        ctm->start();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Composite::updateConfig()
+{
+    for( ::fwServices::IAppConfigManager::sptr ctm :  m_ctmContainer )
+    {
+        ctm->update();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Composite::stopConfig()
+{
+    BOOST_REVERSE_FOREACH( ::fwServices::IAppConfigManager::sptr ctm, m_ctmContainer )
+    {
+        ctm->stop();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Composite::destroyConfig()
+{
+    BOOST_REVERSE_FOREACH( ::fwServices::IAppConfigManager::sptr ctm, m_ctmContainer )
+    {
+        ctm->destroy();
+    }
+    m_ctmContainer.clear();
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace parser
+} //namespace dataReg
+
diff --git a/Bundles/core/dataReg/src/dataReg/parser/GenericField.cpp b/Bundles/core/dataReg/src/dataReg/parser/GenericField.cpp
new file mode 100644
index 0000000..ea554b9
--- /dev/null
+++ b/Bundles/core/dataReg/src/dataReg/parser/GenericField.cpp
@@ -0,0 +1,61 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "dataReg/parser/GenericField.hpp"
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Float.hpp>
+#include <fwData/GenericField.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/String.hpp>
+
+#include <fwServices/macros.hpp>
+
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::BooleanParser, ::fwData::Boolean );
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::IntegerParser, ::fwData::Integer );
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::FloatParser, ::fwData::Float );
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::StringParser, ::fwData::String );
+
+
+namespace dataReg
+{
+namespace parser
+{
+
+//------------------------------------------------------------------------------
+
+void GenericField::updating( ) throw(fwTools::Failed)
+{
+    SLM_FATAL("This method is deprecated, and thus shouldn't be used.");
+}
+
+//------------------------------------------------------------------------------
+
+void GenericField::createConfig( ::fwTools::Object::sptr _obj )
+{
+    ::fwData::GenericFieldBase::sptr field = ::fwData::GenericFieldBase::dynamicCast( _obj );
+    SLM_ASSERT("GenericField not instanced", field);
+
+    ::fwRuntime::ConfigurationElementContainer configs = m_cfg->findAllConfigurationElement("value");
+    SLM_ASSERT("GenericField config must contain at most one tag <value>...</value>", configs.size() <= 1);
+
+    if ( configs.size() >= 1 )
+    {
+        ::fwRuntime::ConfigurationElement::sptr config = *configs.begin();
+        std::string input = config->getValue();
+        field->fromString(input);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace parser
+} //namespace dataReg
+
diff --git a/Bundles/core/dataReg/src/dataReg/parser/List.cpp b/Bundles/core/dataReg/src/dataReg/parser/List.cpp
new file mode 100644
index 0000000..71d4fd6
--- /dev/null
+++ b/Bundles/core/dataReg/src/dataReg/parser/List.cpp
@@ -0,0 +1,158 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "dataReg/parser/List.hpp"
+
+#include <fwData/List.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::List, ::fwData::List );
+
+namespace dataReg
+{
+namespace parser
+{
+
+//------------------------------------------------------------------------------
+
+bool List::refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement )
+{
+    bool isOk = true;
+
+    for(    ::fwRuntime::ConfigurationElement::Iterator configEltIter = _cfgElement->begin();
+            configEltIter != _cfgElement->end();
+            ++configEltIter)
+    {
+        std::string subElementName = (*configEltIter)->getName();
+        if(     subElementName != "service" &&
+                subElementName != "serviceList"    )
+        {
+            OSLM_ERROR(
+                "xml subelement \""<< subElementName <<
+                "\" for element object is not supported for the moment when you use a reference on item List.");
+            isOk = false;
+        }
+    }
+
+    return isOk;
+}
+
+//------------------------------------------------------------------------------
+
+void List::updating( ) throw(fwTools::Failed)
+{
+    SLM_FATAL("This method is deprecated, and thus shouldn't be used.");
+}
+
+//------------------------------------------------------------------------------
+
+void List::createConfig( ::fwTools::Object::sptr _obj )
+{
+    // Declaration of attributes values
+    const std::string OBJECT_BUILD_MODE = "src";
+    const std::string BUILD_OBJECT      = "new";
+    const std::string GET_OBJECT        = "ref";
+
+    ::fwData::List::sptr dataList = ::fwData::List::dynamicCast(_obj);
+    SLM_ASSERT("The passed object must be a fwData::List",dataList);
+
+    for( ::fwRuntime::ConfigurationElement::csptr elem :  m_cfg->getElements() )
+    {
+        if( elem->getName() == "item" )
+        {
+
+            // Test build mode
+            std::string buildMode = BUILD_OBJECT;
+
+
+            if ( elem->hasAttribute( OBJECT_BUILD_MODE ) )
+            {
+                buildMode = elem->getExistingAttributeValue( OBJECT_BUILD_MODE );
+                OSLM_ASSERT( "The buildMode \""<< buildMode <<"\" is not supported, it should be either BUILD_OBJECT"
+                             "or GET_OBJECT.",
+                             buildMode == BUILD_OBJECT || buildMode == GET_OBJECT );
+            }
+
+            if( buildMode == BUILD_OBJECT )
+            {
+
+                // Create and manage object config
+                ::fwServices::IAppConfigManager::sptr ctm = ::fwServices::IAppConfigManager::New();
+                if( ::fwServices::IService::isVersion2())
+                {
+                    ctm->::fwServices::IAppConfigManager::setConfig( elem );
+                }
+                else
+                {
+                    ctm->::fwServices::IAppConfigManager::setConfig( *( elem->getElements().begin() ) );
+                }
+                m_ctmContainer.push_back( ctm );
+                ctm->create();
+                ::fwData::Object::sptr localObj = ctm->getConfigRoot();
+
+                // Add object
+                SLM_ASSERT("A ::fwData::List can contain only ::fwData::Object", localObj );
+                dataList->getContainer().push_back( localObj );
+
+            }
+            else // if( buildMode == GET_OBJECT )
+            {
+                SLM_FATAL("ACH => Todo");
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void List::startConfig()
+{
+    for( ::fwServices::IAppConfigManager::sptr ctm :  m_ctmContainer )
+    {
+        ctm->start();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void List::updateConfig()
+{
+    for( ::fwServices::IAppConfigManager::sptr ctm :  m_ctmContainer )
+    {
+        ctm->update();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void List::stopConfig()
+{
+    BOOST_REVERSE_FOREACH( ::fwServices::IAppConfigManager::sptr ctm, m_ctmContainer )
+    {
+        ctm->stop();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void List::destroyConfig()
+{
+    BOOST_REVERSE_FOREACH( ::fwServices::IAppConfigManager::sptr ctm, m_ctmContainer )
+    {
+        ctm->destroy();
+    }
+    m_ctmContainer.clear();
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace parser
+} //namespace dataReg
+
+
diff --git a/Bundles/core/dataReg/src/dataReg/parser/Object.cpp b/Bundles/core/dataReg/src/dataReg/parser/Object.cpp
new file mode 100644
index 0000000..5c9b78e
--- /dev/null
+++ b/Bundles/core/dataReg/src/dataReg/parser/Object.cpp
@@ -0,0 +1,178 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "dataReg/parser/Object.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <boost/foreach.hpp>
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::Object, ::fwData::Object );
+
+namespace dataReg
+{
+namespace parser
+{
+
+//------------------------------------------------------------------------------
+
+Object::Object( )
+{
+}
+
+//------------------------------------------------------------------------------
+
+Object::~Object()
+{
+}
+
+//------------------------------------------------------------------------------
+
+bool Object::refObjectValidator( ::fwRuntime::ConfigurationElement::csptr _cfgElement )
+{
+    bool isOk = true;
+
+    for( ::fwRuntime::ConfigurationElement::csptr elem :  _cfgElement->getElements() )
+    {
+        std::string subElementName = elem->getName();
+        if(     subElementName != "service" &&
+                subElementName != "serviceList"    )
+        {
+            OSLM_ERROR(
+                "xml subelement \""<< subElementName <<
+                "\" for element object is not supported for the moment when you use a reference on item composite.");
+            isOk = false;
+        }
+    }
+
+    return isOk;
+}
+
+//------------------------------------------------------------------------------
+
+void Object::updating( ) throw(fwTools::Failed)
+{
+    SLM_FATAL("This method is deprecated, and thus, shouldn't be used.");
+}
+
+
+//------------------------------------------------------------------------------
+
+void Object::createConfig( ::fwTools::Object::sptr _obj )
+{
+    // Declaration of attributes values
+    const std::string OBJECT_BUILD_MODE = "src";
+    const std::string BUILD_OBJECT      = "new";
+    const std::string GET_OBJECT        = "ref";
+
+    ::fwData::Object::sptr associatedObject = ::fwData::Object::dynamicCast(_obj);
+    SLM_ASSERT("associatedObject not instanced", associatedObject);
+
+    for( ::fwRuntime::ConfigurationElement::csptr elem :  m_cfg->getElements() )
+    {
+
+        if( elem->getName() == "item" )
+        {
+            // Test build mode
+            std::string buildMode = BUILD_OBJECT;
+
+            if ( elem->hasAttribute( OBJECT_BUILD_MODE ) )
+            {
+                buildMode = elem->getExistingAttributeValue( OBJECT_BUILD_MODE );
+                OSLM_ASSERT( "The buildMode \""<< buildMode <<"\" is not supported, it should either be BUILD_OBJECT "
+                             "or GET_OBJECT.",
+                             buildMode == BUILD_OBJECT || buildMode == GET_OBJECT );
+            }
+
+
+            SLM_ASSERT( "The xml element \"item\" must have an attribute named \"key\" .",
+                        elem->hasAttribute("key") );
+            std::string key = elem->getExistingAttributeValue("key");
+            SLM_ASSERT( "The xml element \"item\" must have an attribute named \"key\" whick is not empty.",
+                        !key.empty() );
+            SLM_ASSERT( "The xml element \"item\" must have one (and only one) xml sub-element \"object\".",
+                        elem->size() == 1 && (*(elem->getElements().begin()))->getName() == "object" );
+
+            if( buildMode == BUILD_OBJECT )
+            {
+                // Test if key already exist in object
+                OSLM_ASSERT("The key "<< key <<" already exists in the object.", !associatedObject->getField(
+                                key ) );
+
+                // Create and manage object config
+                ::fwServices::IAppConfigManager::sptr ctm = ::fwServices::IAppConfigManager::New();
+                if( ::fwServices::IService::isVersion2())
+                {
+                    ctm->::fwServices::IAppConfigManager::setConfig( elem );
+                }
+                else
+                {
+                    ctm->::fwServices::IAppConfigManager::setConfig( *( elem->getElements().begin() ) );
+                }
+                m_ctmContainer.push_back( ctm );
+                ctm->create();
+                ::fwData::Object::sptr localObj = ctm->getConfigRoot();
+
+                // Add object
+                associatedObject->setField(key, localObj);
+            }
+            else // if( buildMode == GET_OBJECT )
+            {
+                SLM_FATAL("ACH => Todo");
+                // ToDo
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Object::startConfig()
+{
+    for( ::fwServices::IAppConfigManager::sptr ctm :  m_ctmContainer )
+    {
+        ctm->start();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Object::updateConfig()
+{
+    for( ::fwServices::IAppConfigManager::sptr ctm :  m_ctmContainer )
+    {
+        ctm->update();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Object::stopConfig()
+{
+    BOOST_REVERSE_FOREACH( ::fwServices::IAppConfigManager::sptr ctm, m_ctmContainer )
+    {
+        ctm->stop();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Object::destroyConfig()
+{
+    BOOST_REVERSE_FOREACH( ::fwServices::IAppConfigManager::sptr ctm, m_ctmContainer )
+    {
+        ctm->destroy();
+    }
+    m_ctmContainer.clear();
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace parser
+} //namespace dataReg
+
diff --git a/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp b/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp
new file mode 100644
index 0000000..90bb9d6
--- /dev/null
+++ b/Bundles/core/dataReg/src/dataReg/parser/TransferFunction.cpp
@@ -0,0 +1,68 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "dataReg/parser/TransferFunction.hpp"
+
+#include <fwData/Color.hpp>
+#include <fwData/TransferFunction.hpp>
+
+#include <fwServices/macros.hpp>
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::TransferFunction, ::fwData::TransferFunction );
+
+namespace dataReg
+{
+namespace parser
+{
+
+//------------------------------------------------------------------------------
+
+void TransferFunction::updating( ) throw(fwTools::Failed)
+{
+    SLM_FATAL("This method is deprecated, and this shouldn't be used.");
+}
+
+//------------------------------------------------------------------------------
+
+void TransferFunction::createConfig( ::fwTools::Object::sptr _obj )
+{
+    ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::dynamicCast( _obj );
+    SLM_ASSERT("TransferFunction not instanced", tf);
+
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+
+    const ConfigurationType colorCfg = m_cfg->findConfigurationElement("colors");
+
+    if(colorCfg)
+    {
+        const ::fwRuntime::ConfigurationElementContainer stepsConfig = colorCfg->findAllConfigurationElement("step");
+        SLM_ASSERT("element 'step' is missing.", stepsConfig.size() != 0);
+
+        for(ConfigurationType stepConfig :  stepsConfig.getElements())
+        {
+            SLM_ASSERT("Missing attribute 'color'", stepConfig->hasAttribute("color"));
+            SLM_ASSERT("Missing attribute 'value'", stepConfig->hasAttribute("value"));
+
+            double value         = ::boost::lexical_cast<double>(stepConfig->getAttributeValue("value"));
+            std::string strColor = stepConfig->getAttributeValue("color");
+
+            ::fwData::Color::sptr newColor = ::fwData::Color::New();
+            newColor->setRGBA(strColor);
+
+            ::fwData::TransferFunction::TFColor color(newColor->red(),newColor->green(),
+                                                      newColor->blue(),newColor->alpha());
+            tf->addTFColor(value,color);
+        }
+    }
+
+    tf->setWLMinMax(tf->getMinMaxTFValues());
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace parser
+} //namespace dataReg
+
diff --git a/Bundles/core/dataReg/src/dataReg/parser/TransformationMatrix3D.cpp b/Bundles/core/dataReg/src/dataReg/parser/TransformationMatrix3D.cpp
new file mode 100644
index 0000000..0bf3908
--- /dev/null
+++ b/Bundles/core/dataReg/src/dataReg/parser/TransformationMatrix3D.cpp
@@ -0,0 +1,56 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "dataReg/parser/TransformationMatrix3D.hpp"
+
+#include <fwData/TransformationMatrix3D.hpp>
+
+#include <fwServices/macros.hpp>
+
+fwServicesRegisterMacro( ::fwServices::IXMLParser, ::dataReg::parser::TransformationMatrix3D,
+                         ::fwData::TransformationMatrix3D );
+
+namespace dataReg
+{
+namespace parser
+{
+
+//------------------------------------------------------------------------------
+
+void TransformationMatrix3D::updating( ) throw(fwTools::Failed)
+{
+    SLM_FATAL("This method is deprecated, and thus shouldn't be used.");
+}
+
+//------------------------------------------------------------------------------
+
+void TransformationMatrix3D::createConfig( ::fwTools::Object::sptr _obj )
+{
+    ::fwData::TransformationMatrix3D::sptr matrix = ::fwData::TransformationMatrix3D::dynamicCast( _obj );
+    SLM_ASSERT("matrix not instanced", matrix);
+
+    for( ::fwRuntime::ConfigurationElement::csptr elem :  m_cfg->getElements() )
+    {
+        if ( elem->getName() == "matrix" )
+        {
+            std::string input = elem->getValue();
+            std::istringstream inputString( input );
+
+            double coef;
+            for ( unsigned int k = 0; k < 16; k++)
+            {
+                inputString >> coef;
+                matrix->getRefCoefficients()[k] = coef;
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace parser
+} //namespace dataReg
+
diff --git a/Bundles/core/gui/CMakeLists.txt b/Bundles/core/gui/CMakeLists.txt
index 001e05c..cf4be89 100644
--- a/Bundles/core/gui/CMakeLists.txt
+++ b/Bundles/core/gui/CMakeLists.txt
@@ -1,15 +1,11 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCom
-    fwCore
-    fwGui
-    fwRuntime
-    fwServices
-    fwTools
-)
 
-Find_package (Boost COMPONENTS filesystem REQUIRED)
+
+find_package (Boost COMPONENTS regex REQUIRED)
 
 fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
+
+fwLink(
+    ${Boost_REGEX_LIBRARY}
+)
 
diff --git a/Bundles/core/gui/COPYING b/Bundles/core/gui/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/gui/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/gui/COPYING.LESSER b/Bundles/core/gui/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/gui/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/gui/Properties.cmake b/Bundles/core/gui/Properties.cmake
index ff537e2..d891862 100644
--- a/Bundles/core/gui/Properties.cmake
+++ b/Bundles/core/gui/Properties.cmake
@@ -2,6 +2,17 @@
 set( NAME gui )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCom fwComEd fwCore fwData fwGui fwRuntime fwServices fwTools )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwDataTools
+    fwGui
+    fwRuntime
+    fwServices
+    fwTools
+    fwThread
+    fwJobs
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/gui/bin/build.options b/Bundles/core/gui/bin/build.options
deleted file mode 100644
index b6dada6..0000000
--- a/Bundles/core/gui/bin/build.options
+++ /dev/null
@@ -1,15 +0,0 @@
-TYPE     = 'bundle'
-VERSION  = '0-1'
-USE      = ['boost', 'boostFilesystem']
-LIB      = [
-            'fwRuntime_0-3',
-            'fwServices_0-1',
-            'fwTools_0-1',
-            'fwCore_0-1',
-            'fwData_0-1',
-            'fwComEd_0-1',
-            'fwGui_0-1',
-            'fwActivities_0-1',
-            ]
-
-
diff --git a/Bundles/core/gui/include/gui/Namespace.hpp b/Bundles/core/gui/include/gui/Namespace.hpp
index 863ec25..73d2f3a 100644
--- a/Bundles/core/gui/include/gui/Namespace.hpp
+++ b/Bundles/core/gui/include/gui/Namespace.hpp
@@ -1,21 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef GUINAMESPACE_HPP_
-#define GUINAMESPACE_HPP_
+#ifndef __GUI_NAMESPACE_HPP__
+#define __GUI_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace gui contains the basic services to build the application IHM.
- * @namespace   gui
- * 
- * @date        2009-2010.
- *
+ * @brief The namespace gui contains the basic services to build the application IHM.
  */
 namespace gui
 {
 
+/**
+ * @brief The namespace gui::action contains basic services managing action.
+ */
+namespace action
+{
+
+} // namespace action
+
+/**
+ * @brief The namespace gui::aspect contains basic services for basic widgets like menuBar, menu, toolBar....
+ */
+namespace aspect
+{
+
+} // namespace aspect
+
+/**
+ * @brief The namespace gui::editor contains basic services managing editor.
+ */
+namespace editor
+{
+
 }
-#endif /* GUINAMESPACE_HPP_ */
+
+/**
+ * @brief The namespace gui::frame contains basic services managing frame.
+ */
+namespace frame
+{
+
+}
+
+/**
+ * @brief The namespace gui::view contains basic services managing view.
+ */
+namespace view
+{
+
+}
+
+} // namespace gui
+
+#endif /* __GUI_NAMESPACE_HPP__ */
diff --git a/Bundles/core/gui/include/gui/Plugin.hpp b/Bundles/core/gui/include/gui/Plugin.hpp
index 4575538..bd52b46 100644
--- a/Bundles/core/gui/include/gui/Plugin.hpp
+++ b/Bundles/core/gui/include/gui/Plugin.hpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUI_PLUGIN_HPP_
-#define _GUI_PLUGIN_HPP_
+#ifndef __GUI_PLUGIN_HPP__
+#define __GUI_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
-#include "gui/export.hpp"
+#include "gui/config.hpp"
 
 namespace gui
 {
@@ -24,7 +24,7 @@ class GUI_CLASS_API Plugin : public ::fwRuntime::Plugin
 
 public:
 
-     ///@brief  Destructor. Do nothing.
+    ///@brief  Destructor. Do nothing.
     GUI_API virtual ~Plugin() throw();
 
     /**
@@ -38,12 +38,12 @@ public:
     GUI_API void start() throw(::fwRuntime::RuntimeException);
 
     /**
-    * @brief This method is used by runtime to close the bundle. Do nothing.
-    */
+     * @brief This method is used by runtime to close the bundle. Do nothing.
+     */
     GUI_API void stop() throw();
 
 };
 
 } // namespace gui
 
-#endif //_GUI_PLUGIN_HPP_
+#endif //__GUI_PLUGIN_HPP__
diff --git a/Bundles/core/gui/include/gui/action/ActionNotifyService.hpp b/Bundles/core/gui/include/gui/action/ActionNotifyService.hpp
deleted file mode 100644
index f180b10..0000000
--- a/Bundles/core/gui/include/gui/action/ActionNotifyService.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_ACTIONNOTIFYSERVICE_HPP_
-#define _GUI_ACTION_ACTIONNOTIFYSERVICE_HPP_
-
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-
-namespace gui
-{
-
-namespace action
-{
-
-class GUI_CLASS_API ActionNotifyService : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ActionNotifyService)(::fwGui::IActionSrv) ) ;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    GUI_API ActionNotifyService() throw();
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    GUI_API virtual ~ActionNotifyService() throw();
-
-protected:
-
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-
-    GUI_API void starting() throw(::fwTools::Failed);
-
-    GUI_API void stopping() throw(::fwTools::Failed);
-
-    GUI_API void updating()throw (fwTools::Failed);
-
-    GUI_API void receiving(::fwServices::ObjectMsg::csptr _msg )throw (::fwTools::Failed);
-
-    /**
-     * @brief Configure the message to send.
-     *
-     * Example of configuration :
-     * @verbatim
-        <service ... >
-            <notify type="::fwServices::ObjectMsg" event="APPLY" />
-        </service>
-       @endverbatim
-     * - \<notify\> :
-     *   - \b type : the type of the message (i.e. ::fwServices::ObjectMsg)
-     *   - \b event : the event of the message (i.e. "APPLY")
-     */
-    GUI_API void configuring() throw( ::fwTools::Failed );
-
-    /// Message container [(MessageType, Event)]
-    typedef ::boost::tuple< std::string, std::string > MsgEventType;
-
-    /// Notify message vector
-    typedef std::vector < MsgEventType > MsgVectType;
-
-    MsgVectType  m_vectMsg;
-};
-
-
-} // namespace action
-} // namespace gui
-
-
-#endif // _GUI_ACTION_ACTIONNOTIFYSERVICE_HPP_
diff --git a/Bundles/core/gui/include/gui/action/ConfigActionSrv.hpp b/Bundles/core/gui/include/gui/action/ConfigActionSrv.hpp
deleted file mode 100644
index 3172467..0000000
--- a/Bundles/core/gui/include/gui/action/ConfigActionSrv.hpp
+++ /dev/null
@@ -1,176 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_CONFIGACTIONSRV_HPP_
-#define _GUI_ACTION_CONFIGACTIONSRV_HPP_
-
-#include <fwCom/Signal.hpp>
-
-#include <fwTools/Failed.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @class   ConfigActionSrv
- * @brief   To manage configuration file defines in xml extension.
- * 
- * @date    2010.
- *
- * This action starts/stops a template configuration given by its identifier in this action configuration.
- *  - You can specified pattern to replace in the template configuration by the tag 'replace'.
- *  - The pattern GENERIC_UID is replaced by a generated unique identifier when the configuration is launch.
- *  This assure that the created object and services in the configuration have a unique uid even if this
- *  configuration is launch several times.
- *
- * Example of this service configuration
- * @verbatim
-   <service impl="::gui::action::ConfigActionSrv" type="::fwGui::IActionSrv">
-       <config id="IdOfTemplateConfig" />
-       <replace val="VALUE" pattern ="PATTERN_TO_REPLACE_BY_VALUE" />
-   </service>
-   @endverbatim
- *
- *
- * Example of template configuration
- * @verbatim
-   <extension implements="::fwServices::registry::AppConfig">
-       <id>Activity1Config</id>
-       <type>template</type>
-       <config>
-           <object uid="GENERIC_UID_myComposite" type="::fwData::Composite">
-               <service uid="GENERIC_UID_myService" type="..." impl="..." autoConnect="no" />
-               <item key="myImage">
-                   <object uid="PATTERN_TO_REPLACE_BY_VALUE" src="ref" type="::fwData::Image" />
-               </item>
-               <!-- ... -->
-           </object>
-       </config>
-   </extension>
-  @endverbatim
- */
-class GUI_CLASS_API ConfigActionSrv : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ConfigActionSrv)(::fwGui::IActionSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API ConfigActionSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~ConfigActionSrv() throw() ;
-
-    /// Set the action service is activated/inactivated.
-    GUI_API virtual void setIsActive(bool isActive);
-
-    // Launched signal key
-    GUI_API static const ::fwCom::Signals::SignalKeyType s_LAUNCHED_SIG;
-
-protected:
-
-    /**
-     * @name Defines signal triggered when config is started
-     * @{ */
-    typedef ::fwCom::Signal< void () > LaunchedSignalType;
-    LaunchedSignalType::sptr m_sigLaunched;
-    /**  @} */
-
-    ///This method launches the IAction::starting method.
-    virtual void starting() throw(::fwTools::Failed);
-
-    ///This method launches the IAction::stopping method.
-    virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief Management of observations ( overrides ).
-     *
-     * Stop configuration when it receives "WINDOW_CLOSED" event (ie. close the param view).
-     */
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief Starts the view and initialize the operator.
-     */
-    virtual void updating() throw(::fwTools::Failed);
-
-
-    /**
-     * @brief Declare the configuration to associate with an operator type and a view config
-     *
-     * Call the IAction::configuring()
-     *
-     * Example of this service configuration
-     * @verbatim
-       <service impl="::gui::action::ConfigActionSrv" type="::fwGui::IActionSrv">
-           <config id="IdOfTemplateConfig" />
-           <replace val="VALUE" pattern ="PATTERN_TO_REPLACE_BY_VALUE" />
-       </service>
-        @endverbatim
-      */
-    virtual void configuring() throw(fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-    /**
-     * @brief Read the configuration and show the parameters view.
-     */
-    virtual void startConfig();
-
-    /**
-     * @brief Close the parameters view.
-     */
-    virtual void stopConfig();
-
-    /**
-     * @brief Add GENERIC_UID to field to adapt.
-     */
-    void AddGenericUidToFieldApadtor();
-
-
-    /// Id of plugin extension where the configuration is defined.
-    std::string m_viewConfigId;
-
-    /// to know if config is running
-    bool m_configIsRunning;
-
-    // config manager
-    ::fwServices::AppConfigManager::sptr m_configTemplateManager;
-    /**
-     * @brief keep the association between the PATTERN and the associated key  as fieldAdaptors[PATTERN] = AssociatedKey.
-     */
-    std::map< std::string, std::string > m_fieldAdaptors;
-
-    /// helper to connect tp config root
-    void connectToConfigRoot();
-
-    /// helper to disconnect tp config root
-    void disconnectToConfigRoot();
-
-    /// To manage connection to the config root
-    ::fwServices::helper::SigSlotConnection::sptr m_connections;
-};
-
-} //action
-} // GUI
-
-
-#endif // _GUI_ACTION_CONFIGACTIONSRV_HPP_
-
-
diff --git a/Bundles/core/gui/include/gui/action/ConfigActionSrvWithKey.hpp b/Bundles/core/gui/include/gui/action/ConfigActionSrvWithKey.hpp
deleted file mode 100644
index a1f0bd3..0000000
--- a/Bundles/core/gui/include/gui/action/ConfigActionSrvWithKey.hpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_CONFIGACTIONSRVWITHKEY_HPP_
-#define _GUI_ACTION_CONFIGACTIONSRVWITHKEY_HPP_
-
-#include <fwTools/Failed.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <gui/action/ConfigActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @class   ConfigActionSrvWithKey
- * @brief   To manage configuration file defines in xml extension.
- * 
- * @date    2010.
- *
- * This action works on a ::fwData::Composite. It action starts/stops a template configuration given by its identifier in this action configuration.
- *  - You can specified pattern to replace in the template configuration by the tag 'replace'.
- *  - You can specified pattern to replace by the uid of the object contained by the composite with the given key
- *  - The pattern GENERIC_UID is replaced by a generated unique identifier when the configuration is launch.
- *  This assure that the created object and services in the configuration have a unique uid even if this
- *  configuration is launch several times.
- *
- * Example of this service configuration
- * @verbatim
-   <service impl="::gui::action::ConfigActionSrvWithKey" type="::fwGui::IActionSrv">
-       <config id="IdOfTemplateConfig" />
-       <replace val="VALUE" pattern="PATTERN_TO_REPLACE_BY_VALUE" />
-       <key id="KEY" pattern="PATTERN_TO_REPLACE_BY_UID_OF_KEY" />
-   </service>
-   @endverbatim
- * @see ::gui::action::ConfigActionSrv
- */
-class GUI_CLASS_API ConfigActionSrvWithKey : public ::gui::action::ConfigActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ConfigActionSrvWithKey)(::gui::action::ConfigActionSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API ConfigActionSrvWithKey() throw() ;
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~ConfigActionSrvWithKey() throw() ;
-
-protected:
-
-    ///This method launches the IAction::starting method.
-    virtual void starting() throw(::fwTools::Failed);
-
-    ///This method launches the IAction::stopping method.
-    virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief Management of observations ( overrides ).
-     *
-     * Stop configuration when it receives "WINDOW_CLOSED" event (ie. close the param view).
-     */
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief Starts the view and initialize the operator.
-     */
-    virtual void updating() throw(::fwTools::Failed);
-
-
-    /**
-     * @brief Declare the configuration to associate with an operator type and a view config
-     *
-     * Call the IAction::configuring()
-     *
-     * Example of this service configuration
-     * @verbatim
-       <service impl="::gui::action::ConfigActionSrvWithKey" type="::fwGui::IActionSrv">
-           <config id="IdOfTemplateConfig" />
-           <replace val="VALUE" pattern="PATTERN_TO_REPLACE_BY_VALUE" />
-           <key id="KEY" pattern="PATTERN_TO_REPLACE_BY_UID_OF_KEY" />
-       </service>
-        @endverbatim
-     * It MUST have at least one key node and at least one replace node.
-     */
-    virtual void configuring() throw(fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-
-private:
-
-    /**
-     * @brief Read the configuration and show the parameters view.
-     */
-    void startConfig();
-
-    /**
-     * @brief Close the parameters view.
-     */
-    void stopConfig();
-
-    typedef std::map< std::string, std::string > KeyAdaptorType;
-
-    /**
-     * @brief keep the association between the PATTERN and the associated key as m_keyAdaptors[PATTERN] = AssociatedKey.
-     */
-    KeyAdaptorType m_keyAdaptors;
-
-};
-
-} //action
-} // GUI
-
-
-#endif // _GUI_ACTION_CONFIGACTIONSRVWITHKEY_HPP_
-
-
diff --git a/Bundles/core/gui/include/gui/action/ModifyLayoutActionSrv.hpp b/Bundles/core/gui/include/gui/action/ModifyLayoutActionSrv.hpp
deleted file mode 100644
index 0e4dd55..0000000
--- a/Bundles/core/gui/include/gui/action/ModifyLayoutActionSrv.hpp
+++ /dev/null
@@ -1,121 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_MOVELAYOUTACTIONSERVICE_HPP_
-#define _GUI_ACTION_MOVELAYOUTACTIONSERVICE_HPP_
-
-#include <boost/logic/tribool.hpp>
-
-#include <vector>
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @brief This action is used to modify the layout configuration.
- * @class   ModifyLayoutActionSrv
- */
-class GUI_CLASS_API ModifyLayoutActionSrv : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (ModifyLayoutActionSrv)(::fwGui::IActionSrv) ) ;
-    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    GUI_API ModifyLayoutActionSrv() throw();
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    GUI_API virtual ~ModifyLayoutActionSrv() throw();
-
-protected:
-
-    enum ActionType {
-        MOVE,
-        SHOW,
-        HIDE,
-        SHOW_OR_HIDE,
-        ENABLE,
-        DISABLE,
-        DO_NOTHING
-    };
-
-    /**
-     * @brief This method gives information about the class. Do nothing.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-
-    /**
-     * @brief This method starts-updates or stops the specified services
-     */
-    GUI_API void updating()throw (fwTools::Failed);
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the service parameters: specifies which views to show/hide/mode.
-     *
-     * @verbatim
-     <config>
-         <move uid="srv_uid" wid="new_view_wid" />
-         <show wid="view_to_show" />
-         <hide wid="view_to_hide />
-         <show_or_hide wid="view_to_show_or_hide />
-         <enable uid="action_to_enabled" />
-         <disable uid="action_to_disabled" />
-     </config>
-       @endverbatim
-     * - \b move configures the services to move in the new view given by wid
-     * - \b show configures the view to show
-     * - \b hide configures the view to hide
-     * - \b show or hide configures the view to show or hide. If the action is activated, the view is shown else it is
-     * hidden. The action in the menu/toolbar must be checkable (style="check").
-     */
-    GUI_API void configuring() throw( ::fwTools::Failed );
-
-    GUI_API virtual void starting() throw(::fwTools::Failed);
-
-    GUI_API virtual void stopping() throw(::fwTools::Failed);
-
-private:
-
-    /// < fwID, WIDContainer>
-    typedef std::vector< std::pair< std::string, std::string > > MoveSrvVectType;
-    /// map representing fwID's services and new associated wid parent container
-    MoveSrvVectType m_moveSrv;
-
-    /// < wid, showState>
-    typedef std::vector< std::pair< std::string, ::boost::logic::tribool > > ShowSrvVectType;
-    /// map representing wid container and show state
-    ShowSrvVectType m_showSrv;
-
-    /// < fwID, enableState>
-    typedef std::vector< std::pair< std::string, bool > > EnableSrvVectType;
-    /// map representing fwID's services and enable state
-    EnableSrvVectType m_enableSrv;
-};
-
-
-} // namespace action
-} // namespace gui
-
-
-#endif /*_GUI_ACTION_MOVELAYOUTACTIONSERVICE_HPP_*/
diff --git a/Bundles/core/gui/include/gui/action/Namespace.hpp b/Bundles/core/gui/include/gui/action/Namespace.hpp
deleted file mode 100644
index 9d35dfd..0000000
--- a/Bundles/core/gui/include/gui/action/Namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIACTIONNAMESPACE_HPP_
-#define GUIACTIONNAMESPACE_HPP_
-
-#include "gui/GuiNamespaceDoc.hpp"
-
-namespace gui
-{
-/**
- * @brief       The namespace gui::action contains basic services managing action.
- * @namespace   gui::action
- * 
- * @date        2009-2010.
- *
- */
-namespace action
-{
-
-}
-}
-#endif /* GUIACTIONNAMESPACE_HPP_ */
diff --git a/Bundles/core/gui/include/gui/action/NothingActionSrv.hpp b/Bundles/core/gui/include/gui/action/NothingActionSrv.hpp
deleted file mode 100644
index fab0c4e..0000000
--- a/Bundles/core/gui/include/gui/action/NothingActionSrv.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_NOTHINGACTION_HPP_
-#define _GUI_ACTION_NOTHINGACTION_HPP_
-
-
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @brief   This action does nothing.
- * @class   NothingActionSrv
- */
-class GUI_CLASS_API NothingActionSrv : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (NothingActionSrv)(::fwGui::IActionSrv) ) ;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    GUI_API NothingActionSrv() throw() ;
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    GUI_API virtual ~NothingActionSrv() throw() ;
-
-protected:
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief This method is used to configure the action.
-     */
-    GUI_API virtual void configuring() throw( ::fwTools::Failed ) ;
-
-    GUI_API virtual void starting() throw(::fwTools::Failed);
-
-    GUI_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief Process the action. Do nothing.
-     */
-    GUI_API virtual void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method gives information about the class.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-
-    ///@}
-
-};
-
-
-} // namespace action
-} // namespace gui
-
-
-#endif /*_GUI_ACTION_NOTHINGACTION_HPP_*/
diff --git a/Bundles/core/gui/include/gui/action/PushObjectSrv.hpp b/Bundles/core/gui/include/gui/action/PushObjectSrv.hpp
deleted file mode 100644
index fa97289..0000000
--- a/Bundles/core/gui/include/gui/action/PushObjectSrv.hpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_PUSHOBJECTSRV_HPP_
-#define _GUI_ACTION_PUSHOBJECTSRV_HPP_
-
-#include <set>
-#include <map>
-
-#include <fwTools/Failed.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @class   PushObjectSrv
- * @brief   To add or remove object in composite with specific key.
- * 
- * @date    2011.
- */
-class GUI_CLASS_API PushObjectSrv : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (PushObjectSrv)(::fwGui::IActionSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API PushObjectSrv() throw() ;
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~PushObjectSrv() throw() ;
-
-protected:
-
-
-    virtual void starting() throw(::fwTools::Failed);
-
-    virtual void stopping() throw(::fwTools::Failed);
-
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    virtual void updating() throw(::fwTools::Failed);
-
-
-    /**
-     * Call the IAction::configuring()
-     *
-     * Example of this service configuration
-     * @verbatim
-       <service impl="::gui::action::PushObjectSrv" type="::fwGui::IActionSrv">
-           <push src="COMPOSITE_UID[KEY]" key="KEY_IN_COMPOSITE" />
-       </service>
-        @endverbatim
-     */
-    virtual void configuring() throw(fwTools::Failed);
-
-    /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
-
-private:
-
-    // [src_map]->[(src_key1, src_key2, ...)]
-    typedef std::map< std::string, std::set< std::string > > SrcKeyMapType;
-    // [dest_key]->[<src_map, src_key>]
-    typedef std::map< std::string, std::pair< std::string, std::string > > DestKeyMapType;
-    /**
-     * @brief keep the association between associated key and source object
-     */
-    DestKeyMapType m_key2src;
-    SrcKeyMapType  m_srcMap;
-};
-
-} //action
-} // GUI
-
-
-#endif // _GUI_ACTION_PUSHOBJECTSRV_HPP_
-
-
diff --git a/Bundles/core/gui/include/gui/action/QuitAction.hpp b/Bundles/core/gui/include/gui/action/QuitAction.hpp
deleted file mode 100644
index fa8acac..0000000
--- a/Bundles/core/gui/include/gui/action/QuitAction.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_QUITACTION_HPP_
-#define _GUI_ACTION_QUITACTION_HPP_
-
-
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @brief   This action tries to close the window and reset root object.
- * @class   QuitAction
- */
-class GUI_CLASS_API QuitAction : public ::fwGui::IActionSrv
-{
-
-public :
-
-     fwCoreServiceClassDefinitionsMacro ( (QuitAction)(::fwGui::IActionSrv) ) ;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    GUI_API QuitAction() throw() ;
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    GUI_API virtual ~QuitAction() throw() ;
-
-protected:
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the service parameters: specifies which services must be started or stopped
-     */
-    GUI_API void configuring() throw( ::fwTools::Failed );
-
-    GUI_API virtual void starting() throw(::fwTools::Failed);
-
-    GUI_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method tries to close the window and reset root object.
-     */
-    GUI_API virtual void updating() throw(::fwTools::Failed);
-
-    /*
-     * @brief This method gives information about the class.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-
-};
-
-
-} // namespace action
-} // namespace gui
-
-
-#endif /*_GUI_ACTION_QUITACTION_HPP_*/
diff --git a/Bundles/core/gui/include/gui/action/SBooleanSlotCaller.hpp b/Bundles/core/gui/include/gui/action/SBooleanSlotCaller.hpp
new file mode 100644
index 0000000..074064c
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SBooleanSlotCaller.hpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SBOOLEANSLOTCALLER_HPP__
+#define __GUI_ACTION_SBOOLEANSLOTCALLER_HPP__
+
+#include "gui/config.hpp"
+#include "gui/action/SSlotCaller.hpp"
+
+#include <fwCom/Slots.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwServices/IService.hpp>
+
+#include <vector>
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief   This action runs a slot given by HasSlot id and slot key with a boolean in paramter representing the action
+ * state (active or not).
+ * @class   SBooleanSlotCaller
+ *
+ * @see SSlotCaller
+ * @warning This action should be configured with style="check".
+ */
+
+class GUI_CLASS_API SBooleanSlotCaller : public ::gui::action::SSlotCaller
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SBooleanSlotCaller)(::fwGui::IActionSrv) );
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    GUI_API SBooleanSlotCaller() throw();
+
+    /**
+     * @brief Destructor. Do nothing.
+     */
+    GUI_API virtual ~SBooleanSlotCaller() throw();
+
+protected:
+
+    /**
+     * @brief This method run the specified slots.
+     */
+    GUI_API void updating() throw (fwTools::Failed);
+
+};
+
+
+} // namespace action
+} // namespace gui
+
+
+#endif /*__GUI_ACTION_SBOOLEANSLOTCALLER_HPP__*/
diff --git a/Bundles/core/gui/include/gui/action/SConfigLauncher.hpp b/Bundles/core/gui/include/gui/action/SConfigLauncher.hpp
index e5f6793..6ad168a 100644
--- a/Bundles/core/gui/include/gui/action/SConfigLauncher.hpp
+++ b/Bundles/core/gui/include/gui/action/SConfigLauncher.hpp
@@ -1,23 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUI_ACTION_SCONFIGLAUNCHER_HPP_
-#define _GUI_ACTION_SCONFIGLAUNCHER_HPP_
+#ifndef __GUI_ACTION_SCONFIGLAUNCHER_HPP__
+#define __GUI_ACTION_SCONFIGLAUNCHER_HPP__
+
+#include "gui/config.hpp"
 
 #include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-#include <fwTools/Failed.hpp>
+#include <fwGui/IActionSrv.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/EConfigurationElement.hpp>
 
-#include <fwGui/IActionSrv.hpp>
-
 #include <fwServices/helper/ConfigLauncher.hpp>
 
-#include "gui/export.hpp"
+#include <fwTools/Failed.hpp>
+
 
 namespace gui
 {
@@ -38,7 +41,7 @@ namespace action
  *  configuration is launch several times.
  *
  * Example of this service configuration
- * @verbatim
+ * @code{.xml}
    <service impl="::gui::action::SConfigLauncher" type="::fwGui::IActionSrv">
         <config>
             <appConfig id="Visu2DID" >
@@ -49,24 +52,32 @@ namespace action
             </appConfig>
         </config>
    </service>
-   @endverbatim
+   @endcode
  */
 class GUI_CLASS_API SConfigLauncher : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SConfigLauncher)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SConfigLauncher)(::fwGui::IActionSrv) );
 
     /// Constructor. Do nothing.
-    GUI_API SConfigLauncher() throw() ;
+    GUI_API SConfigLauncher() throw();
 
     /// Destructor. Do nothing.
-    GUI_API virtual ~SConfigLauncher() throw() ;
+    GUI_API virtual ~SConfigLauncher() throw();
 
     /// Set the action service is activated/disable.
     GUI_API virtual void setIsActive(bool isActive);
 
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * @note connect Object::s_MODIFIED_SIG to this::s_CHECK_PARAMETERS_SIG
+     */
+    GUI_API virtual KeyConnectionsType getObjSrvConnections() const;
+
     // Launched signal key
     GUI_API static const ::fwCom::Signals::SignalKeyType s_LAUNCHED_SIG;
 
@@ -86,13 +97,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /**
-     * @brief Management of observations ( overrides ).
-     *
-     * Stop configuration when it receives "WINDOW_CLOSED" event (ie. close the param view).
-     */
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /**
      * @brief Starts the view and initialize the operator.
      */
     virtual void updating() throw(::fwTools::Failed);
@@ -104,7 +108,7 @@ protected:
      * Call the IAction::configuring()
      *
      * Example of this service configuration
-     * @verbatim
+     * @code{.xml}
        <service impl="::gui::action::SConfigLauncher" type="::fwGui::IActionSrv">
            <config>
                 <appConfig id="Visu2DID" >
@@ -115,20 +119,32 @@ protected:
                 </appConfig>
             </config>
        </service>
-        @endverbatim
+        @endcode
      */
     virtual void configuring() throw(fwTools::Failed);
 
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
+
+    /**
+     * @name Slots
+     * @}
+     */
+    /// Slot: stop the config.
+    void stopConfig();
+
+    /// Slot: check if the configuration is executable
+    void checkIfExecutable();
+    /**
+     * @}
+     */
 
     ::fwServices::helper::ConfigLauncher::sptr m_configLauncher;
+    std::string m_proxychannel; ///< Name of the channel used to connect stopConfig slot to the config frame closing.
 };
 
 } // action
 } // gui
 
 
-#endif // _GUI_ACTION_SCONFIGLAUNCHER_HPP_
-
-
+#endif // __GUI_ACTION_SCONFIGLAUNCHER_HPP__
diff --git a/Bundles/core/gui/include/gui/action/SDoNothing.hpp b/Bundles/core/gui/include/gui/action/SDoNothing.hpp
new file mode 100644
index 0000000..9a87e4e
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SDoNothing.hpp
@@ -0,0 +1,75 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SDONOTHING_HPP__
+#define __GUI_ACTION_SDONOTHING_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwServices/IService.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief   This action does nothing.
+ */
+class GUI_CLASS_API SDoNothing : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDoNothing)(::fwGui::IActionSrv) );
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    GUI_API SDoNothing() throw();
+
+    /**
+     * @brief Destructor. Do nothing.
+     */
+    GUI_API virtual ~SDoNothing() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief This method is used to configure the action.
+     */
+    GUI_API virtual void configuring() throw( ::fwTools::Failed );
+
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief Process the action. Do nothing.
+     */
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method gives information about the class.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+
+    ///@}
+
+};
+
+
+} // namespace action
+} // namespace gui
+
+
+#endif /*__GUI_ACTION_SDONOTHING_HPP__*/
diff --git a/Bundles/core/gui/include/gui/action/SModifyLayout.hpp b/Bundles/core/gui/include/gui/action/SModifyLayout.hpp
new file mode 100644
index 0000000..6d79a89
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SModifyLayout.hpp
@@ -0,0 +1,127 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SMODIFYLAYOUT_HPP__
+#define __GUI_ACTION_SMODIFYLAYOUT_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwServices/IService.hpp>
+
+#include <boost/logic/tribool.hpp>
+#include <vector>
+
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief This action is used to modify the layout configuration.
+ * @class   SModifyLayout
+ */
+class GUI_CLASS_API SModifyLayout : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SModifyLayout)(::fwGui::IActionSrv) );
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    GUI_API SModifyLayout() throw();
+
+    /**
+     * @brief Destructor. Do nothing.
+     */
+    GUI_API virtual ~SModifyLayout() throw();
+
+protected:
+
+    enum ActionType
+    {
+        MOVE,
+        SHOW,
+        HIDE,
+        SHOW_OR_HIDE,
+        ENABLE,
+        DISABLE,
+        DO_NOTHING
+    };
+
+    /**
+     * @brief This method gives information about the class. Do nothing.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+
+    /**
+     * @brief This method starts-updates or stops the specified services
+     */
+    GUI_API void updating() throw (fwTools::Failed);
+
+    /**
+     * @brief This method is used to configure the service parameters: specifies which views to show/hide/mode.
+     *
+     * @code{.xml}
+       <config>
+         <move uid="srv_uid" wid="new_view_wid" />
+         <show wid="view_to_show" />
+         <hide wid="view_to_hide />
+         <show_or_hide wid="view_to_show_or_hide />
+         <enable uid="action_to_enabled" />
+         <disable uid="action_to_disabled" />
+       </config>
+       @endcode
+     * - \b move configures the services to move in the new view given by wid
+     * - \b show configures the element to show
+     * - \b hide configures the element to hide
+     * - \b show_or_hide configures the element to show or hide.
+     *      If action is activated, element is shown else it is hidden.
+     *
+     * \<show\>, \<hide\> and \<show_or_hide\> tags can have 2 type of attribute :
+     * - wid to show  or hide windows container (view)
+     * - sid  to show or hide a gui container service (IEditor, IView, IRender...)
+     *
+     * The action in the menu/toolbar must be checkable (style="check").
+     */
+    GUI_API void configuring() throw( ::fwTools::Failed );
+
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+private:
+
+    /// < fwID, WIDContainer>
+    typedef std::vector< std::pair< std::string, std::string > > MoveSrvVectType;
+    /// map representing fwID's services and new associated wid parent container
+    MoveSrvVectType m_moveSrv;
+
+    /// < wid, showState>
+    typedef std::vector< std::pair< std::string, ::boost::logic::tribool > > ShowSrvVectType;
+    /// map representing wid container and show state
+    ShowSrvVectType m_showSrvWid;
+
+    /// map representing sid container and show state
+    ShowSrvVectType m_showSrvSid;
+
+    /// < fwID, enableState>
+    typedef std::vector< std::pair< std::string, bool > > EnableSrvVectType;
+    /// map representing fwID's services and enable state
+    EnableSrvVectType m_enableSrv;
+};
+
+
+} // namespace action
+} // namespace gui
+
+
+#endif /*__GUI_ACTION_SMODIFYLAYOUT_HPP__*/
diff --git a/Bundles/core/gui/include/gui/action/SPushField.hpp b/Bundles/core/gui/include/gui/action/SPushField.hpp
new file mode 100644
index 0000000..c1391e6
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SPushField.hpp
@@ -0,0 +1,89 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SPUSHFIELD_HPP__
+#define __GUI_ACTION_SPUSHFIELD_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwTools/Failed.hpp>
+
+#include <set>
+#include <map>
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief   To add or remove an object in composite with specific key.
+ *
+ * @section XML Configuration
+ *
+ * @code{.xml}
+       <service impl="::gui::action::SPushField">
+           <inout key="source" uid="compositeId" />
+           <out key="destination" uid="objectId" />
+           <push field="item" />
+       </service>
+   @endcode
+ */
+class GUI_CLASS_API SPushField : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SPushField)(::fwGui::IActionSrv) );
+
+    /// Constructor. Do nothing.
+    GUI_API SPushField() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SPushField() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect source Composite::s_ADDED_FIELDS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect source Composite::s_REMOVED_FIELDS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     */
+    GUI_API virtual KeyConnectionsMap getAutoConnections() const;
+
+protected:
+
+    /// Configure the service.
+    virtual void configuring() throw(fwTools::Failed);
+
+    /// Register the action and check if the action is executable.
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Unregister the action.
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Extract the object.
+    virtual void updating() throw(::fwTools::Failed);
+
+private:
+
+    /**
+     * @brief Slot: called when source composite objects are updated, enabled/disabled the action if the defined objects
+     * are present/not present.
+     */
+    void updateObjects();
+
+    /// Key in the source composite to extract
+    std::string m_field;
+};
+
+} // namespace action
+
+} // namespace gui
+
+#endif // __GUI_ACTION_SPUSHFIELD_HPP__
diff --git a/Bundles/core/gui/include/gui/action/SPushObject.hpp b/Bundles/core/gui/include/gui/action/SPushObject.hpp
new file mode 100644
index 0000000..13b4ccb
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SPushObject.hpp
@@ -0,0 +1,112 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SPUSHOBJECT_HPP__
+#define __GUI_ACTION_SPUSHOBJECT_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwTools/Failed.hpp>
+
+#include <set>
+#include <map>
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief   To add or remove an object in composite with specific key.
+ *
+ * @section XML Configuration
+ *
+ * @code{.xml}
+       <service impl="::gui::action::SPushObject">
+           <inout key="source" uid="compositeId" />
+           <out key="destination" uid="objectId" />
+           <push srcKey="item" />
+       </service>
+   @endcode
+ */
+class GUI_CLASS_API SPushObject : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SPushObject)(::fwGui::IActionSrv) );
+
+    /// Constructor. Do nothing.
+    GUI_API SPushObject() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SPushObject() throw();
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     * @deprecated
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     */
+    GUI_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect source Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect source Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     */
+    GUI_API virtual KeyConnectionsMap getAutoConnections() const;
+
+protected:
+
+
+    /// Configure the service.
+    virtual void configuring() throw(fwTools::Failed);
+
+    /// Register the action and check if the action is executable.
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Unregister the action.
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Extract the object.
+    virtual void updating() throw(::fwTools::Failed);
+
+private:
+
+    /**
+     * @brief Slot: called when source composite objects are updated, enabled/disabled the action if the defined objects
+     * are present/not present.
+     */
+    void updateObjects();
+
+    // [src_map]->[(src_key1, src_key2, ...)]
+    typedef std::map< std::string, std::set< std::string > > SrcKeyMapType;
+    // [dest_key]->[<src_map, src_key>]
+    typedef std::map< std::string, std::pair< std::string, std::string > > DestKeyMapType;
+    /**
+     * @brief keep the association between associated key and source object
+     */
+    DestKeyMapType m_key2src;
+    SrcKeyMapType m_srcMap;
+
+    /// Key in the source composite to extract
+    std::string m_srcKey;
+};
+
+} // namespace action
+
+} // namespace gui
+
+#endif // __GUI_ACTION_SPUSHOBJECT_HPP__
+
+
diff --git a/Bundles/core/gui/include/gui/action/SQuit.hpp b/Bundles/core/gui/include/gui/action/SQuit.hpp
new file mode 100644
index 0000000..1230563
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SQuit.hpp
@@ -0,0 +1,70 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SQUIT_HPP__
+#define __GUI_ACTION_SQUIT_HPP__
+
+
+#include "gui/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwServices/IService.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief   This action tries to close the window and reset root object.
+ */
+class GUI_CLASS_API SQuit : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SQuit)(::fwGui::IActionSrv) );
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    GUI_API SQuit() throw();
+
+    /**
+     * @brief Destructor. Do nothing.
+     */
+    GUI_API virtual ~SQuit() throw();
+
+protected:
+
+    /**
+     * @brief This method is used to configure the service parameters: specifies which services must be started or stopped
+     */
+    GUI_API void configuring() throw( ::fwTools::Failed );
+
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method tries to close the window and reset root object.
+     */
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+
+    /*
+     * @brief This method gives information about the class.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+
+};
+
+
+} // namespace action
+} // namespace gui
+
+
+#endif /*__GUI_ACTION_SQUIT_HPP__*/
diff --git a/Bundles/core/gui/include/gui/action/SSignal.hpp b/Bundles/core/gui/include/gui/action/SSignal.hpp
index e396f12..bca40de 100644
--- a/Bundles/core/gui/include/gui/action/SSignal.hpp
+++ b/Bundles/core/gui/include/gui/action/SSignal.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,18 +7,17 @@
 #ifndef __GUI_ACTION_SSIGNAL_HPP__
 #define __GUI_ACTION_SSIGNAL_HPP__
 
-#include <vector>
+#include "gui/config.hpp"
 
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/Signal.hpp>
 #include <fwCom/Slots.hpp>
 
-#include <fwServices/IService.hpp>
-
 #include <fwGui/IActionSrv.hpp>
 
-#include <fwCom/HasSignals.hpp>
-#include <fwCom/Signal.hpp>
+#include <fwServices/IService.hpp>
 
-#include "gui/export.hpp"
+#include <vector>
 
 namespace gui
 {
@@ -27,27 +26,34 @@ namespace action
 
 /**
  * @brief   Simple Signal service
- * @class   SSignal
  *
  * Triggers a signal when the action is triggered.
  * If the action uses a confirmation, different signals are emitted depending on the confirmation result.
+ *
+ * @code{.xml}
+       <service uid="..." type="::gui::action::SSignal" />
+   @endcode
+ *
+ * See also ::fwGui::IActionSrv::configuring for more configuration parameters.
+ * @see IActionSrv::configuring
+ *
  */
 
 class GUI_CLASS_API SSignal : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
     typedef std::vector< ::fwData::Object::sptr > ObjectVectorType;
 
-    fwCoreServiceClassDefinitionsMacro ( (SSignal)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSignal)(::fwGui::IActionSrv) );
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
     /// Type of triggered signal
     typedef ::fwCom::Signal< void (ObjectVectorType) > TrigerredSignalType;
 
     /// Type of setObject slot
-    typedef ::fwCom::Slot< void( ObjectVectorType ) >  SetObjectsSlotType;
+    typedef ::fwCom::Slot< void ( ObjectVectorType ) >  SetObjectsSlotType;
 
     /**
      * @brief Constructor. Do nothing.
@@ -64,27 +70,15 @@ protected:
     /**
      * @brief This method gives information about the class. Do nothing.
      */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
+    GUI_API virtual void info(std::ostream& _sstream );
 
     /**
      * @brief This method emit a signal.
      */
-    GUI_API void updating()throw (fwTools::Failed);
-
-    /**
-     * @brief Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
+    GUI_API void updating() throw (fwTools::Failed);
 
     /**
      * @brief Configures the service
-     *
-     @verbatim
-     <service uid="..." type="::fwGui::IActionSrv" impl="::gui::action::SSignal" autoConnect="no" />
-     @endverbatim
-     *
-     * See also ::fwGui::IActionSrv::configuring for more configuration parameters.
-     * @see IActionSrv::configuring
      */
     GUI_API void configuring() throw( ::fwTools::Failed );
 
@@ -95,7 +89,10 @@ protected:
     /**
      * @brief setObjects slot's method
      */
-    virtual void setObjects( ObjectVectorType objects ) { m_objects = objects; }
+    virtual void setObjects( ObjectVectorType objects )
+    {
+        m_objects = objects;
+    }
 
     ///Signal trigerred when action has been trigerred
     SPTR(TrigerredSignalType) m_sigTriggered;
diff --git a/Bundles/core/gui/include/gui/action/SSlotCaller.hpp b/Bundles/core/gui/include/gui/action/SSlotCaller.hpp
index f36f23a..75b61cc 100644
--- a/Bundles/core/gui/include/gui/action/SSlotCaller.hpp
+++ b/Bundles/core/gui/include/gui/action/SSlotCaller.hpp
@@ -1,21 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUI_ACTION_SSLOTCALLER_HPP_
-#define _GUI_ACTION_SSLOTCALLER_HPP_
+#ifndef __GUI_ACTION_SSLOTCALLER_HPP__
+#define __GUI_ACTION_SSLOTCALLER_HPP__
 
-#include <vector>
+#include "gui/config.hpp"
 
 #include <fwCom/Slots.hpp>
 
-#include <fwServices/IService.hpp>
-
 #include <fwGui/IActionSrv.hpp>
 
-#include "gui/export.hpp"
+#include <fwServices/IService.hpp>
+
+#include <vector>
 
 namespace gui
 {
@@ -24,68 +24,51 @@ namespace action
 
 /**
  * @brief   Run a slot given by HasSlot id and slot key.
- * @class   SSlotCaller
  *
  * This action works on a ::fwData::Object. It does the action specify by the specify config.
+ * @code{.xml}
+   <service uid="..." type="::gui::action::SSlotCaller" >
+      <slots>
+          <slot>hasSlotsId/slotKey</slot>
+      </slots>
+   </service>
+   @endcode
  */
 
 class GUI_CLASS_API SSlotCaller : public ::fwGui::IActionSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SSlotCaller)(::fwGui::IActionSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SSlotCaller)(::fwGui::IActionSrv) );
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
     typedef std::string HasSlotIDType;
     typedef std::pair< HasSlotIDType, ::fwCom::Slots::SlotKeyType> SlotInfoType;
     typedef std::vector< SlotInfoType > SlotInfoContainerType;
 
-    /**
-    * @brief Constructor. Do nothing.
-    */
+    /// Constructor. Does nothing.
     GUI_API SSlotCaller() throw();
 
-    /**
-    * @brief Destructor. Do nothing.
-    */
+    /// Destructor. Does nothing.
     GUI_API virtual ~SSlotCaller() throw();
 
 protected:
 
-    /**
-     * @brief This method gives information about the class. Do nothing.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-
-    /**
-     * @brief This method run the specified slots.
-     */
-    GUI_API void updating()throw (fwTools::Failed);
-
-    /**
-     * @brief Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the service parameters: specifies which slots must be called.
-     * @verbatim
-       <service uid="..." type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
-          <slots>
-              <slot>hasSlotsId/slotKey</slot>
-          </slots>
-       </service>
-       @endverbatim
-     */
+    /// This method gives information about the class.
+    GUI_API virtual void info(std::ostream& _sstream );
+
+    /// This method run the specified slots.
+    GUI_API void updating() throw (fwTools::Failed);
+
+    ///  This method is used to configure the service parameters: specifies which slots must be called.
     GUI_API void configuring() throw( ::fwTools::Failed );
 
     GUI_API virtual void starting() throw(::fwTools::Failed);
 
     GUI_API virtual void stopping() throw(::fwTools::Failed);
 
-private:
-    // vector representing slots
+    // Vector representing slots
     SlotInfoContainerType m_slotInfos;
 };
 
@@ -94,4 +77,4 @@ private:
 } // namespace gui
 
 
-#endif /*_GUI_ACTION_SSLOTCALLER_HPP_*/
+#endif /*__GUI_ACTION_SSLOTCALLER_HPP__*/
diff --git a/Bundles/core/gui/include/gui/action/SStarter.hpp b/Bundles/core/gui/include/gui/action/SStarter.hpp
new file mode 100644
index 0000000..8df4c6e
--- /dev/null
+++ b/Bundles/core/gui/include/gui/action/SStarter.hpp
@@ -0,0 +1,141 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ACTION_SSTARTER_HPP__
+#define __GUI_ACTION_SSTARTER_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwServices/IService.hpp>
+
+#include <vector>
+
+namespace gui
+{
+namespace action
+{
+
+/**
+ * @brief   Apply an action (start, stop, ...) on a service specify by uid.
+ * @class   SStarter
+ *
+ * This action works on a ::fwData::Object. It does the action specify by the specify config.
+ * This action can be :
+ *   - Start a service :
+ * @code{.xml}
+           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+              <start uid="Uid_of_the_service" />
+           </service>
+   @endcode
+ * If the service is stopped, the service specified by "Uid_of_the_service" is started and updated. Otherwise it is just updated.
+ *
+ *   - Start a service if exists :
+ * @code{.xml}
+           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+              <start_if_exists uid="Uid_of_the_service" />
+           </service>
+   @endcode
+ * Test if the service specified by "Uid_of_the_service" exists before starting it.
+ *
+ *   - Stop a service :
+ * @code{.xml}
+           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+              <stop uid="Uid_of_the_service" />
+           </service>
+   @endcode
+ *  If the service specified by "Uid_of_the_service" has been started, it is stopped. Otherwise, nothing appends.
+ *
+ *   - Stop a service if exists :  Test if the service exist before stopping it
+ * @code{.xml}
+           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+              <stop_if_exists uid="Uid_of_the_service" />
+           </service>
+   @endcode
+ *  Test if the service specified by "Uid_of_the_service" exists before stopping it.
+ *
+ *   - Start or stop the service:
+ * @code{.xml}
+           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+              <start_or_stop uid="Uid_of_the_service" />
+           </service>
+   @endcode
+ * If the service is stopped, this works as start the service. If the service is started, this works as stop the service.
+ *
+ * To notice : when the starterActionService is stopped, it stops all the associated services which have been started by itself.
+ */
+
+class GUI_CLASS_API SStarter : public ::fwGui::IActionSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SStarter)(::fwGui::IActionSrv) );
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    GUI_API SStarter() throw();
+
+    /**
+     * @brief Destructor. Do nothing.
+     */
+    GUI_API virtual ~SStarter() throw();
+
+protected:
+
+    enum ActionType
+    {
+        START,
+        STOP,
+        START_OR_STOP,
+        START_IF_EXISTS,
+        STOP_IF_EXISTS,
+        DO_NOTHING
+    };
+
+    /**
+     * @brief This method gives information about the class. Do nothing.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+
+    /**
+     * @brief This method starts-updates or stops the specified services
+     */
+    GUI_API void updating() throw (fwTools::Failed);
+
+    /**
+     * @brief This method is used to configure the service parameters: specifies which services must be started or stopped
+     */
+    GUI_API void configuring() throw( ::fwTools::Failed );
+
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief Uninitialized the service activity.
+     * All services started by this action are stopped.
+     */
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+private:
+    typedef ::fwTools::fwID::IDType IDSrvType;
+    typedef std::pair< IDSrvType, ActionType > PairIDActionType;
+    typedef std::vector<PairIDActionType> VectPairIDActionType;
+    typedef std::set<IDSrvType> SetIDSrvType;
+
+    // vector representing uuid's services that must be started (true) or stopped (false)
+    VectPairIDActionType m_uuidServices;
+    SetIDSrvType m_idStartedSrvSet;
+};
+
+
+} // namespace action
+} // namespace gui
+
+
+#endif /*__GUI_ACTION_SSTARTER_HPP__*/
diff --git a/Bundles/core/gui/include/gui/action/StarterActionService.hpp b/Bundles/core/gui/include/gui/action/StarterActionService.hpp
deleted file mode 100644
index 6aeade2..0000000
--- a/Bundles/core/gui/include/gui/action/StarterActionService.hpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_ACTION_STARTERACTIONSERVICE_HPP_
-#define _GUI_ACTION_STARTERACTIONSERVICE_HPP_
-
-#include <vector>
-#include <fwServices/IService.hpp>
-
-#include <fwGui/IActionSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-/**
- * @brief   Apply an action (start, stop, ...) on a service specify by uid.
- * @class   StarterActionService
- *
- * This action works on a ::fwData::Object. It does the action specify by the specify config.
- * This action can be :
- *   - Start a service :
- * @verbatim
-           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-              <start uid="Uid_of_the_service" />
-           </service>
-   @endverbatim
- * If the service is stopped, the service specified by "Uid_of_the_service" is started and updated. Otherwise it is just updated.
- *
- *   - Start a service if exists :
- * @verbatim
-           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-              <start_if_exists uid="Uid_of_the_service" />
-           </service>
-   @endverbatim
- * Test if the service specified by "Uid_of_the_service" exists before starting it.
- *
- *   - Stop a service :
- * @verbatim
-           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-              <stop uid="Uid_of_the_service" />
-           </service>
-   @endverbatim
- *  If the service specified by "Uid_of_the_service" has been started, it is stopped. Otherwise, nothing appends.
- *
- *   - Stop a service if exists :  Test if the service exist before stopping it
- * @verbatim
-           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-              <stop_if_exists uid="Uid_of_the_service" />
-           </service>
-   @endverbatim
- *  Test if the service specified by "Uid_of_the_service" exists before stopping it.
- *
- *   - Start or stop the service:
- * @verbatim
-           <service uid="actionUid" type="::fwGui::IActionSrv" impl="::gui::action::StarterActionService" autoConnect="no">
-              <start_or_stop uid="Uid_of_the_service" />
-           </service>
-   @endverbatim
- * If the service is stopped, this works as start the service. If the service is started, this works as stop the service.
- *
- * To notice : when the starterActionService is stopped, it stops all the associated services which have been started by itself.
- */
-
-class GUI_CLASS_API StarterActionService : public ::fwGui::IActionSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (StarterActionService)(::fwGui::IActionSrv) ) ;
-    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
-
-    /**
-    * @brief Constructor. Do nothing.
-    */
-    GUI_API StarterActionService() throw();
-
-    /**
-    * @brief Destructor. Do nothing.
-    */
-    GUI_API virtual ~StarterActionService() throw();
-
-protected:
-
-    enum ActionType {
-        START,
-        STOP,
-        START_OR_STOP,
-        START_IF_EXISTS,
-        STOP_IF_EXISTS,
-        DO_NOTHING
-    };
-
-    /**
-     * @brief This method gives information about the class. Do nothing.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-
-    /**
-     * @brief This method starts-updates or stops the specified services
-     */
-    GUI_API void updating()throw (fwTools::Failed);
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to configure the service parameters: specifies which services must be started or stopped
-     */
-    GUI_API void configuring() throw( ::fwTools::Failed );
-
-    GUI_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief Uninitialized the service activity.
-     * All services started by this action are stopped.
-     */
-    GUI_API virtual void stopping() throw(::fwTools::Failed);
-
-private:
-    typedef ::fwTools::fwID::IDType IDSrvType;
-    typedef std::pair< IDSrvType, ActionType > PairIDActionType;
-    typedef std::vector<PairIDActionType> VectPairIDActionType;
-    typedef std::set<IDSrvType> SetIDSrvType;
-
-    // vector representing uuid's services that must be started (true) or stopped (false)
-    VectPairIDActionType m_uuidServices;
-    SetIDSrvType m_idStartedSrvSet;
-};
-
-
-} // namespace action
-} // namespace gui
-
-
-#endif /*_GUI_ACTION_STARTERACTIONSERVICE_HPP_*/
diff --git a/Bundles/core/gui/include/gui/aspect/DefaultMenuBarSrv.hpp b/Bundles/core/gui/include/gui/aspect/DefaultMenuBarSrv.hpp
deleted file mode 100644
index 35576e9..0000000
--- a/Bundles/core/gui/include/gui/aspect/DefaultMenuBarSrv.hpp
+++ /dev/null
@@ -1,98 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUI_ASPECT_DEFAULTMENUBARSRV_HPP_
-#define GUI_ASPECT_DEFAULTMENUBARSRV_HPP_
-
-#include <fwGui/IMenuBarSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace aspect
-{
-
-/**
- * @brief   Defines the default menubar for standard application
- * @class   DefaultMenuBarSrv
- */
-class GUI_CLASS_API DefaultMenuBarSrv : public ::fwGui::IMenuBarSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (DefaultMenuBarSrv)(::fwGui::IMenuBarSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API DefaultMenuBarSrv() throw();
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~DefaultMenuBarSrv() throw();
-
-protected :
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief Configuring method allows to configure an application with menu bar.
-     * Example of configuration
-     * @verbatim
-      <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-          <gui>
-              <layout>
-                  <menu name="My Menu"/>
-                  <menu name="My Menu 2"/>
-              </layout>
-          </gui>
-          <registry>
-              <menu sid="myMenu" start="yes" />
-              <menu sid="myMenu2" start="yes" />
-          </registry>
-      </service>
-       @endverbatim
-     *  - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
-     *  - \<registry\> \</registry\> : (mandatory) describe the service management.
-     *   - sid of the menu services
-     *   - start or not the menu service automatically
-     *
-     * @warning
-     * - The number of item in the gui section must be equal or greater than in the registry section.
-     * - The order of the menu in each section (gui and registry) must be the same.\n
-     *   For example: the menu named "My Menu" will be connected with the service which have the sid = "myMenu".
-     * - A menu bar can't have the same service connected on two different menu.
-     *
-     *  @see ::fwGui::IMenuBarSrv::initialize(), ::fwGui::layoutManager::IMenuBarLayoutManager::initialize()
-     */
-    GUI_API virtual void configuring() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief Create the menus and start the managed services.
-     * @see ::fwGui::IMenuBarSrv::create()
-     */
-    GUI_API virtual void starting() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief Stop all menu of this menuBar and destroy MenuBar
-     * @see ::fwGui::IMenuBarSrv::destroy()
-     */
-    GUI_API virtual void stopping() throw( ::fwTools::Failed ) ;
-
-    /// Updating service, do nothing.
-    GUI_API virtual void updating() throw(::fwTools::Failed);
-
-    /// Updating service on notification, do nothing.
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-    ///@}
-};
-
-}
-
-}
-
-#endif // GUI_ASPECT_DEFAULTMENUBARSRV_HPP_
diff --git a/Bundles/core/gui/include/gui/aspect/DefaultMenuSrv.hpp b/Bundles/core/gui/include/gui/aspect/DefaultMenuSrv.hpp
deleted file mode 100644
index 084332c..0000000
--- a/Bundles/core/gui/include/gui/aspect/DefaultMenuSrv.hpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUI_ASPECT_DEFAULTMENUSRV_HPP_
-#define GUI_ASPECT_DEFAULTMENUSRV_HPP_
-
-#include <fwGui/IMenuSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace aspect
-{
-
-/**
- * @brief   Defines the default menu for standard application
- * @class   DefaultMenuSrv
- */
-class GUI_CLASS_API DefaultMenuSrv : public ::fwGui::IMenuSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (DefaultMenuSrv)(::fwGui::IMenuSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API DefaultMenuSrv() throw();
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~DefaultMenuSrv() throw();
-
-protected :
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief Configuring method allows to configure a menu with several actions.
-
-     * Example of configuration
-     * @verbatim
-      <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
-          <gui>
-              <layout>
-                  <menu name="My Menu"/>
-                  <menu name="My Menu 2"/>
-              </layout>
-          </gui>
-          <registry>
-              <menu sid="myMenu" start="yes" />
-              <menu sid="myMenu2" start="yes" />
-          </registry>
-      </service>
-       @endverbatim
-     *  - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
-     *    - <separator /> : allows to put a separator in the menu
-     *  - \<registry\> \</registry\> : (mandatory) describe the service management.
-     *
-     * @warning
-     * - The number of item in the gui section must be equal or greater than in the registry section.
-     * - The order of the menu in each section (gui and registry) must be the same.\n
-     *   For example: the menu named "My Menu" will be connected with the service which have the sid = "myMenu".
-     * - A menu bar can't have the same service connected on two different menu.
-     *
-     *  @see ::fwGui::IMenuBarSrv::initialize(), ::fwGui::layoutManager::IMenuLayoutManager::initialize()
-     */
-    GUI_API virtual void configuring() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief Create the menu items and start the managed services.
-     * @see ::fwGui::IMenuSrv::create()
-     */
-    GUI_API virtual void starting() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief Stop all actions and separator of this menu and remove menu to menuBar
-     * @see ::fwGui::IMenuSrv::destroy()
-     */
-    GUI_API virtual void stopping() throw( ::fwTools::Failed ) ;
-
-    /// Updating service, do nothing.
-    GUI_API virtual void updating() throw(::fwTools::Failed);
-
-    /// Updating service on notification, do nothing.
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-    ///@}
-
-};
-
-}
-
-}
-
-#endif // GUI_ASPECT_DEFAULTMENUSRV_HPP_
diff --git a/Bundles/core/gui/include/gui/aspect/DefaultToolBarSrv.hpp b/Bundles/core/gui/include/gui/aspect/DefaultToolBarSrv.hpp
deleted file mode 100644
index e67d54c..0000000
--- a/Bundles/core/gui/include/gui/aspect/DefaultToolBarSrv.hpp
+++ /dev/null
@@ -1,127 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUI_DEFAULTTOOLBARSRV_HPP_
-#define GUI_DEFAULTTOOLBARSRV_HPP_
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/IToolBarSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace aspect
-{
-
-/**
- * @brief   Defines the default toolbar for standard application
- * @class   DefaultToolBarSrv
- */
-class GUI_CLASS_API DefaultToolBarSrv : public ::fwGui::IToolBarSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (DefaultToolBarSrv)(::fwGui::IToolBarSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API DefaultToolBarSrv() throw();
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~DefaultToolBarSrv() throw();
-
-protected:
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief This method create a new ToolBar in frame.
-     */
-
-    /**
-     * @brief Create the toolBar
-     * @see ::fwGui::IToolBarSrv::create()
-     */
-    GUI_API virtual void starting() throw( ::fwTools::Failed ) ;
-
-    /**
-     * @brief This method remove the tools situated in the ToolBar.
-     * @see ::fwGui::IToolBarSrv::destroy()
-     */
-    GUI_API virtual void stopping() throw( ::fwTools::Failed );
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to update services. Do nothing.
-     */
-    GUI_API virtual void updating() throw(::fwTools::Failed);
-
-    /**
-     * @brief Configuring method allows to create a toolBar with several actions.
-     *
-     * Example of configuration
-     * @verbatim
-       <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no" >
-           <gui>
-               <layout>
-                   <menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                   <menuItem name="My item 3" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                   <separator />
-                   <menuItem name="My item A" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                   <menuItem name="My item B" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                   <separator />
-                   <menu name="My menu" />
-                   <separator />
-                   <editor />
-               </layout>
-           </gui>
-           <registry>
-               <menuItem sid="item2" />
-               <menuItem sid="item3" />
-               <menuItem sid="item4" />
-               <menuItem sid="item5" />
-               <menu sid="menu" />
-               <editor sid="editor" />
-           </registry>
-       </service>
-       @endverbatim
-     *   - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
-     *   - \<registry\> \</registry\> : (mandatory) describe the service management.
-     *     - \<menuItem\> represents IActionSrv
-     *     - \<menu\> represents IMenuSrv
-     *     - \<editor\> represents container service (IEditor, IView, ...)
-     *
-     *   @warning
-     *   - The number of item in the gui section must be EQUAL to the registry section.
-     *   - The order of the item in each section (gui and registry) must be the same.\n
-     *  For example: the item named "My item 2" will be connected with the service which have the sid = "item2".
-     *   - A toolbar can't have the same service connected on two different buttons.
-     *
-     *  @see ::fwGui::IToolBarSrv::initialize(), ::fwGui::layoutManager::IToolBarLayoutManager::initialize()
-     */
-    GUI_API virtual void configuring() throw( ::fwTools::Failed );
-
-    /**
-     * @brief This method is used to give information about the service. Do nothing.
-     */
-    GUI_API virtual void info(std::ostream &_sstream );
-    ///@}
-
-};
-
-}
-
-}
-
-#endif // GUI_DEFAULTTOOLBARSRV_HPP_
diff --git a/Bundles/core/gui/include/gui/aspect/Namespace.hpp b/Bundles/core/gui/include/gui/aspect/Namespace.hpp
deleted file mode 100644
index 9543ee2..0000000
--- a/Bundles/core/gui/include/gui/aspect/Namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIASPECTNAMESPACE_HPP_
-#define GUIASPECTNAMESPACE_HPP_
-
-#include "gui/GuiNamespaceDoc.hpp"
-
-namespace gui
-{
-/**
- * @brief       The namespace gui::aspect contains basic services for basic widgets like menuBar, menu, toolBar....
- * @namespace   gui::aspect
- * 
- * @date        2009-2010.
- *
- */
-namespace aspect
-{
-
-}
-}
-#endif /* GUIASPECTNAMESPACE_HPP_ */
diff --git a/Bundles/core/gui/include/gui/aspect/SDefaultMenu.hpp b/Bundles/core/gui/include/gui/aspect/SDefaultMenu.hpp
new file mode 100644
index 0000000..1c046d5
--- /dev/null
+++ b/Bundles/core/gui/include/gui/aspect/SDefaultMenu.hpp
@@ -0,0 +1,95 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ASPECT_SDEFAULTMENU_HPP__
+#define __GUI_ASPECT_SDEFAULTMENU_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IMenuSrv.hpp>
+
+namespace gui
+{
+namespace aspect
+{
+
+/**
+ * @brief   Defines the default menu for standard application
+ */
+class GUI_CLASS_API SDefaultMenu : public ::fwGui::IMenuSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDefaultMenu)(::fwGui::IMenuSrv) );
+
+    /// Constructor. Do nothing.
+    GUI_API SDefaultMenu() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SDefaultMenu() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief Configuring method allows to configure a menu with several actions.
+
+     * Example of configuration
+     * @code{.xml}
+       <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no" >
+          <gui>
+              <layout>
+                  <menu name="My Menu"/>
+                  <menu name="My Menu 2"/>
+              </layout>
+          </gui>
+          <registry>
+              <menu sid="myMenu" start="yes" />
+              <menu sid="myMenu2" start="yes" />
+          </registry>
+       </service>
+       @endcode
+     *  - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
+     *    - <separator /> : allows to put a separator in the menu
+     *  - \<registry\> \</registry\> : (mandatory) describe the service management.
+     *
+     * @warning
+     * - The number of item in the gui section must be equal or greater than in the registry section.
+     * - The order of the menu in each section (gui and registry) must be the same.\n
+     *   For example: the menu named "My Menu" will be connected with the service which have the sid = "myMenu".
+     * - A menu bar can't have the same service connected on two different menu.
+     *
+     *  @see ::fwGui::IMenuBarSrv::initialize(), ::fwGui::layoutManager::IMenuLayoutManager::initialize()
+     */
+    GUI_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /**
+     * @brief Create the menu items and start the managed services.
+     * @see ::fwGui::IMenuSrv::create()
+     */
+    GUI_API virtual void starting() throw( ::fwTools::Failed );
+
+    /**
+     * @brief Stop all actions and separator of this menu and remove menu to menuBar
+     * @see ::fwGui::IMenuSrv::destroy()
+     */
+    GUI_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /// Updating service, do nothing.
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+    ///@}
+
+};
+
+}
+
+}
+
+#endif // __GUI_ASPECT_SDEFAULTMENU_HPP__
diff --git a/Bundles/core/gui/include/gui/aspect/SDefaultMenuBar.hpp b/Bundles/core/gui/include/gui/aspect/SDefaultMenuBar.hpp
new file mode 100644
index 0000000..495cd51
--- /dev/null
+++ b/Bundles/core/gui/include/gui/aspect/SDefaultMenuBar.hpp
@@ -0,0 +1,95 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ASPECT_SDEFAULTMENUBAR_HPP__
+#define __GUI_ASPECT_SDEFAULTMENUBAR_HPP__
+
+#include <fwGui/IMenuBarSrv.hpp>
+
+#include "gui/config.hpp"
+
+namespace gui
+{
+namespace aspect
+{
+
+/**
+ * @brief   Defines the default menubar for standard application
+ */
+class GUI_CLASS_API SDefaultMenuBar : public ::fwGui::IMenuBarSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDefaultMenuBar)(::fwGui::IMenuBarSrv) );
+
+    /// Constructor. Do nothing.
+    GUI_API SDefaultMenuBar() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SDefaultMenuBar() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief Configuring method allows to configure an application with menu bar.
+     * Example of configuration
+     * @code{.xml}
+       <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no" >
+          <gui>
+              <layout>
+                  <menu name="My Menu"/>
+                  <menu name="My Menu 2"/>
+              </layout>
+          </gui>
+          <registry>
+              <menu sid="myMenu" start="yes" />
+              <menu sid="myMenu2" start="yes" />
+          </registry>
+       </service>
+       @endcode
+     *  - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
+     *  - \<registry\> \</registry\> : (mandatory) describe the service management.
+     *   - sid of the menu services
+     *   - start or not the menu service automatically
+     *
+     * @warning
+     * - The number of item in the gui section must be equal or greater than in the registry section.
+     * - The order of the menu in each section (gui and registry) must be the same.\n
+     *   For example: the menu named "My Menu" will be connected with the service which have the sid = "myMenu".
+     * - A menu bar can't have the same service connected on two different menu.
+     *
+     *  @see ::fwGui::IMenuBarSrv::initialize(), ::fwGui::layoutManager::IMenuBarLayoutManager::initialize()
+     */
+    GUI_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /**
+     * @brief Create the menus and start the managed services.
+     * @see ::fwGui::IMenuBarSrv::create()
+     */
+    GUI_API virtual void starting() throw( ::fwTools::Failed );
+
+    /**
+     * @brief Stop all menu of this menuBar and destroy MenuBar
+     * @see ::fwGui::IMenuBarSrv::destroy()
+     */
+    GUI_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /// Updating service, do nothing.
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+
+    ///@}
+};
+
+}
+
+}
+
+#endif // __GUI_ASPECT_SDEFAULTMENUBAR_HPP__
diff --git a/Bundles/core/gui/include/gui/aspect/SDefaultToolBar.hpp b/Bundles/core/gui/include/gui/aspect/SDefaultToolBar.hpp
new file mode 100644
index 0000000..793d06d
--- /dev/null
+++ b/Bundles/core/gui/include/gui/aspect/SDefaultToolBar.hpp
@@ -0,0 +1,122 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_ASPECT_SDEFAULTTOOLBAR_HPP__
+#define __GUI_ASPECT_SDEFAULTTOOLBAR_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwGui/IToolBarSrv.hpp>
+
+
+namespace gui
+{
+namespace aspect
+{
+
+/**
+ * @brief   Defines the default toolbar for standard application
+ */
+class GUI_CLASS_API SDefaultToolBar : public ::fwGui::IToolBarSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDefaultToolBar)(::fwGui::IToolBarSrv) );
+
+    /// Constructor. Do nothing.
+    GUI_API SDefaultToolBar() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SDefaultToolBar() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief This method create a new ToolBar in frame.
+     */
+
+    /**
+     * @brief Create the toolBar
+     * @see ::fwGui::IToolBarSrv::create()
+     */
+    GUI_API virtual void starting() throw( ::fwTools::Failed );
+
+    /**
+     * @brief This method remove the tools situated in the ToolBar.
+     * @see ::fwGui::IToolBarSrv::destroy()
+     */
+    GUI_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /**
+     * @brief This method is used to update services. Do nothing.
+     */
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief Configuring method allows to create a toolBar with several actions.
+     *
+     * Example of configuration
+     * @code{.xml}
+       <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no" >
+           <gui>
+               <layout>
+                   <menuItem name="My item 2" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                   <menuItem name="My item 3" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                   <separator />
+                   <menuItem name="My item A" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                   <menuItem name="My item B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                   <separator />
+                   <menu name="My menu" />
+                   <separator />
+                   <editor />
+               </layout>
+           </gui>
+           <registry>
+               <menuItem sid="item2" />
+               <menuItem sid="item3" />
+               <menuItem sid="item4" />
+               <menuItem sid="item5" />
+               <menu sid="menu" />
+               <editor sid="editor" />
+           </registry>
+       </service>
+       @endcode
+     *   - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
+     *   - \<registry\> \</registry\> : (mandatory) describe the service management.
+     *     - \<menuItem\> represents IActionSrv
+     *     - \<menu\> represents IMenuSrv
+     *     - \<editor\> represents container service (IEditor, IView, ...)
+     *
+     *   @warning
+     *   - The number of item in the gui section must be EQUAL to the registry section.
+     *   - The order of the item in each section (gui and registry) must be the same.\n
+     *  For example: the item named "My item 2" will be connected with the service which have the sid = "item2".
+     *   - A toolbar can't have the same service connected on two different buttons.
+     *
+     *  @see ::fwGui::IToolBarSrv::initialize(), ::fwGui::layoutManager::IToolBarLayoutManager::initialize()
+     */
+    GUI_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /**
+     * @brief This method is used to give information about the service. Do nothing.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+    ///@}
+
+};
+
+}
+
+}
+
+#endif // __GUI_ASPECT_SDEFAULTTOOLBAR_HPP__
diff --git a/Bundles/core/gui/include/gui/editor/IDialogEditor.hpp b/Bundles/core/gui/include/gui/editor/IDialogEditor.hpp
index c8c6b47..45607ff 100644
--- a/Bundles/core/gui/include/gui/editor/IDialogEditor.hpp
+++ b/Bundles/core/gui/include/gui/editor/IDialogEditor.hpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUI_EDITOR_IDIALOGEDITOR_HPP_
-#define _GUI_EDITOR_IDIALOGEDITOR_HPP_
+#ifndef __GUI_EDITOR_IDIALOGEDITOR_HPP__
+#define __GUI_EDITOR_IDIALOGEDITOR_HPP__
 
-#include <fwTools/Failed.hpp>
-#include <fwServices/IService.hpp>
+#include "gui/config.hpp"
 
 #include <fwGui/IGuiContainerSrv.hpp>
 
-#include "gui/export.hpp"
+#include <fwServices/IService.hpp>
+
+#include <fwTools/Failed.hpp>
+
 
 namespace gui
 {
@@ -20,22 +22,21 @@ namespace editor
 {
 
 /**
- * @brief   Defines the service interface managing the editor service which create their own container.
- * @class   IDialogEditor
+ * @brief Defines the service interface managing the editor service which create their own container.
  */
 
 class GUI_CLASS_API IDialogEditor : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IDialogEditor)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IDialogEditor)(::fwServices::IService) );
 
-protected :
+protected:
 
-    GUI_API IDialogEditor() throw() ;
+    GUI_API IDialogEditor() throw();
 
-    GUI_API virtual ~IDialogEditor() throw() ;
+    GUI_API virtual ~IDialogEditor() throw();
 
     /** @name Service methods ( override from ::fwServices::IService )
      *  @{
@@ -45,7 +46,7 @@ protected :
      * @brief This method is used to give information about the service. Do nothing.
      * @todo Must be not implemented and class child declaration should be imposed.
      */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
+    GUI_API virtual void info(std::ostream &_sstream );
 
     /// @}
 };
@@ -53,6 +54,6 @@ protected :
 }
 }
 
-#endif /*_GUI_EDITOR_IDIALOGEDITOR_HPP_*/
+#endif /*__GUI_EDITOR_IDIALOGEDITOR_HPP__*/
 
 
diff --git a/Bundles/core/gui/include/gui/editor/IEditor.hpp b/Bundles/core/gui/include/gui/editor/IEditor.hpp
index bf4a8c8..0f6e714 100644
--- a/Bundles/core/gui/include/gui/editor/IEditor.hpp
+++ b/Bundles/core/gui/include/gui/editor/IEditor.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUI_EDITOR_IEDITOR_HPP_
-#define _GUI_EDITOR_IEDITOR_HPP_
+#ifndef __GUI_EDITOR_IEDITOR_HPP__
+#define __GUI_EDITOR_IEDITOR_HPP__
 
-#include <fwTools/Failed.hpp>
-#include <fwServices/IService.hpp>
+#include "gui/config.hpp"
 
 #include <fwGui/IGuiContainerSrv.hpp>
 
-#include "gui/export.hpp"
+#include <fwServices/IService.hpp>
+
+#include <fwTools/Failed.hpp>
 
 namespace gui
 {
@@ -20,26 +21,25 @@ namespace editor
 {
 
 /**
- * @brief   Defines the service interface managing the editor service for object.
- * @class   IEditor
+ * @brief Defines the service interface managing the editor service for object.
  */
 
 class GUI_CLASS_API IEditor : public ::fwGui::IGuiContainerSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IEditor)(::fwGui::IGuiContainerSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IEditor)(::fwGui::IGuiContainerSrv) );
 
-protected :
+protected:
 
     /**
      * @brief   Constructor. Do nothing (Just initialize parameters).
      */
-    GUI_API IEditor() throw() ;
+    GUI_API IEditor() throw();
 
     /// Destructor. Do nothing.
-    GUI_API virtual ~IEditor() throw() ;
+    GUI_API virtual ~IEditor() throw();
 
     /** @name Service methods ( override from ::fwServices::IService )
      * @{
@@ -49,7 +49,7 @@ protected :
      * @brief This method is used to give information about the service. Do nothing.
      * @todo Must be not implemented and class child declaration should be imposed.
      */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
+    GUI_API virtual void info(std::ostream &_sstream );
 
     ///@}
 
@@ -58,6 +58,6 @@ protected :
 }
 }
 
-#endif /*_GUI_EDITOR_IEDITOR_HPP_*/
+#endif /*__GUI_EDITOR_IEDITOR_HPP__*/
 
 
diff --git a/Bundles/core/gui/include/gui/editor/Namespace.hpp b/Bundles/core/gui/include/gui/editor/Namespace.hpp
deleted file mode 100644
index 226b3b0..0000000
--- a/Bundles/core/gui/include/gui/editor/Namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIEDITORNAMESPACE_HPP_
-#define GUIEDITORNAMESPACE_HPP_
-
-#include "gui/GuiNamespaceDoc.hpp"
-
-namespace gui
-{
-/**
- * @brief       The namespace gui::editor contains basic services managing editor.
- * @namespace   gui::editor
- * 
- * @date        2009-2010.
- *
- */
-namespace editor
-{
-
-}
-}
-#endif /* GUIEDITORNAMESPACE_HPP_ */
diff --git a/Bundles/core/gui/include/gui/editor/SJobBar.hpp b/Bundles/core/gui/include/gui/editor/SJobBar.hpp
new file mode 100644
index 0000000..8d4c913
--- /dev/null
+++ b/Bundles/core/gui/include/gui/editor/SJobBar.hpp
@@ -0,0 +1,104 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_EDITOR_SJOBBAR_HPP__
+#define __GUI_EDITOR_SJOBBAR_HPP__
+
+#include "gui/config.hpp"
+#include "gui/editor/IDialogEditor.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwGui/IActionSrv.hpp>
+
+#include <fwJobs/IJob.hpp>
+
+#include <fwServices/IService.hpp>
+
+#include <set>
+
+namespace fwGui
+{
+namespace dialog
+{
+class ProgressDialog;
+}
+}
+
+namespace gui
+{
+namespace editor
+{
+
+/**
+ * @brief   Service diplaying a progress bar.
+ */
+
+class GUI_CLASS_API SJobBar : public ::gui::editor::IDialogEditor
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SJobBar)(::gui::editor::IDialogEditor) );
+
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+
+    /// Type of showJob slot
+    typedef ::fwCom::Slot< void ( ::fwJobs::IJob::sptr ) >  ShowJobSlot;
+
+    /**
+     * @brief Constructor. Do nothing.
+     */
+    GUI_API SJobBar() throw();
+
+    /**
+     * @brief Destructor. Do nothing.
+     */
+    GUI_API virtual ~SJobBar() throw();
+
+protected:
+
+    /**
+     * @brief This method gives information about the class. Do nothing.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+
+    /**
+     * @brief This method emit a signal.
+     */
+    GUI_API void updating() throw (fwTools::Failed);
+
+    /**
+     * @brief This method is used to configure the service.
+     */
+    GUI_API void configuring() throw( ::fwTools::Failed );
+
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief showJob slot's method
+     */
+    GUI_API virtual void showJob( ::fwJobs::IJob::sptr iJob );
+
+    typedef std::set< SPTR(::fwGui::dialog::ProgressDialog) > ProgressDialogs;
+    ProgressDialogs m_progressDialogs;
+
+    typedef ::fwCom::Signal<void () > StartedSignalType;
+    typedef ::fwCom::Signal<void () > EndedSignalType;
+
+    SPTR(StartedSignalType) m_sigStarted;
+    SPTR(EndedSignalType) m_sigEnded;
+
+};
+
+} // namespace editor
+} // namespace gui
+
+
+#endif /*__GUI_EDITOR_SJOBBAR_HPP__*/
diff --git a/Bundles/core/gui/include/gui/export.hpp b/Bundles/core/gui/include/gui/export.hpp
deleted file mode 100644
index ac91205..0000000
--- a/Bundles/core/gui/include/gui/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_CONFIG_HPP_
-#define _GUI_CONFIG_HPP_
-
-
-#ifdef _WIN32
-    #pragma warning( disable : 4251 )
-
-
-    #ifdef GUI_EXPORTS
-    #define GUI_API __declspec(dllexport)
-    #else
-    #define GUI_API __declspec(dllimport)
-    #endif
-
-    #define GUI_CLASS_API
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef GUI_EXPORTS
-    #define GUI_API __attribute__ ((visibility("default")))
-    #define GUI_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define GUI_API __attribute__ ((visibility("hidden")))
-    #define GUI_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define GUI_API
-    #define GUI_CLASS_API
-
-#endif
-
-#endif // #ifndef _GUI_CONFIG_HPP_
diff --git a/Bundles/core/gui/include/gui/frame/DefaultFrame.hpp b/Bundles/core/gui/include/gui/frame/DefaultFrame.hpp
deleted file mode 100644
index 3a91b35..0000000
--- a/Bundles/core/gui/include/gui/frame/DefaultFrame.hpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_FRAME_DEFAULT_FRAME_HPP_
-#define _GUI_FRAME_DEFAULT_FRAME_HPP_
-
-#include <fwTools/Failed.hpp>
-#include <fwGui/IFrameSrv.hpp>
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace frame
-{
-
-/**
- * @brief   Defines the default frame for standard application.
- * @class   DefaultFrame
- */
-class GUI_CLASS_API DefaultFrame : public ::fwGui::IFrameSrv
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (DefaultFrame)(::fwGui::IFrameSrv) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API DefaultFrame() throw() ;
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~DefaultFrame() throw() ;
-
-protected :
-
-    /** @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief This method is used to configure the class parameters.
-     * @see ::fwGui::IFrameSrv::initialize()
-     */
-    GUI_API virtual void configuring() throw( ::fwTools::Failed );
-
-    /**
-     * @brief Register a view with defined id.
-     * @see ::fwGui::IFrameSrv::create()
-     */
-    GUI_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method remove the view in the frame.
-     * @see ::fwGui::IFrameSrv::destroy()
-     */
-    GUI_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) ;
-
-    /**
-     * @brief This method is used to update services. Do nothing.
-     */
-    GUI_API virtual void updating() throw(::fwTools::Failed) ;
-
-    /**
-     * @brief This method gives information about the class. Do nothing.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-    ///@}
-
-};
-
-
-} // namespace frame
-} // namespace gui
-
-
-#endif /*_GUI_FRAME_DEFAULT_FRAME_HPP_*/
diff --git a/Bundles/core/gui/include/gui/frame/Namespace.hpp b/Bundles/core/gui/include/gui/frame/Namespace.hpp
deleted file mode 100644
index 61eaa4e..0000000
--- a/Bundles/core/gui/include/gui/frame/Namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIFRAMENAMESPACE_HPP_
-#define GUIFRAMENAMESPACE_HPP_
-
-#include "gui/GuiNamespaceDoc.hpp"
-
-namespace gui
-{
-/**
- * @brief       The namespace gui::frame contains basic services managing frame.
- * @namespace   gui::frame
- * 
- * @date        2009-2010.
- *
- */
-namespace frame
-{
-
-}
-}
-#endif /* GUIFRAMENAMESPACE_HPP_ */
diff --git a/Bundles/core/gui/include/gui/frame/SDefaultFrame.hpp b/Bundles/core/gui/include/gui/frame/SDefaultFrame.hpp
new file mode 100644
index 0000000..452c565
--- /dev/null
+++ b/Bundles/core/gui/include/gui/frame/SDefaultFrame.hpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_FRAME_SDEFAULTFRAME_HPP__
+#define __GUI_FRAME_SDEFAULTFRAME_HPP__
+
+#include "gui/config.hpp"
+
+#include <fwGui/IFrameSrv.hpp>
+
+#include <fwTools/Failed.hpp>
+
+namespace gui
+{
+namespace frame
+{
+
+/**
+ * @brief Defines the default frame for standard application.
+ */
+class GUI_CLASS_API SDefaultFrame : public ::fwGui::IFrameSrv
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDefaultFrame)(::fwGui::IFrameSrv) );
+
+    /// Constructor. Do nothing.
+    GUI_API SDefaultFrame() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SDefaultFrame() throw();
+
+protected:
+
+    /** @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief This method is used to configure the class parameters.
+     * @see ::fwGui::IFrameSrv::initialize()
+     */
+    GUI_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /**
+     * @brief Register a view with defined id.
+     * @see ::fwGui::IFrameSrv::create()
+     */
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method remove the view in the frame.
+     * @see ::fwGui::IFrameSrv::destroy()
+     */
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method is used to update services. Do nothing.
+     */
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method gives information about the class. Do nothing.
+     */
+    GUI_API virtual void info(std::ostream &_sstream );
+    ///@}
+
+};
+
+
+} // namespace frame
+} // namespace gui
+
+
+#endif /*__GUI_FRAME_SDEFAULTFRAME_HPP__*/
diff --git a/Bundles/core/gui/include/gui/view/DefaultView.hpp b/Bundles/core/gui/include/gui/view/DefaultView.hpp
deleted file mode 100644
index e39d261..0000000
--- a/Bundles/core/gui/include/gui/view/DefaultView.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _GUI_VIEW_DEFAULT_VIEW_HPP_
-#define _GUI_VIEW_DEFAULT_VIEW_HPP_
-
-#include <fwTools/Failed.hpp>
-
-#include "gui/view/IView.hpp"
-
-#include "gui/export.hpp"
-
-namespace gui
-{
-namespace view
-{
-
-/**
- * @brief   Defines the generic layout for application.
- * @class   DefaultView
- * 
-
- * @date    2009-2010.
- */
-class GUI_CLASS_API DefaultView : public ::gui::view::IView
-{
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (DefaultView)(::gui::view::IView) ) ;
-
-    /// Constructor. Do nothing.
-    GUI_API DefaultView() throw() ;
-
-    /// Destructor. Do nothing.
-    GUI_API virtual ~DefaultView() throw() ;
-
-protected :
-
-    /**
-     * @name Service methods ( override from ::fwServices::IService )
-     * @{
-     */
-
-    /**
-     * @brief This method is used to configure the class parameters.
-     * @see ::fwGui::IGuiContainerSrv::initialize()
-     */
-    GUI_API virtual void configuring() throw( ::fwTools::Failed );
-
-    /**
-     * @brief Register a view with defined id.
-     * @see ::fwGui::IGuiContainerSrv::create()
-     */
-    GUI_API virtual void starting() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method remove the view in the frame.
-     * @see ::fwGui::IGuiContainerSrv::destroy()
-     */
-    GUI_API virtual void stopping() throw(::fwTools::Failed);
-
-    /**
-     * @brief This method is used to update services on notification. Do nothing.
-     */
-    GUI_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) ;
-
-    /**
-     * @brief This method is used to update services. Do nothing.
-     */
-    GUI_API virtual void updating() throw(::fwTools::Failed) ;
-
-    /**
-     * @brief This method gives information about the class. Do nothing.
-     */
-    GUI_API virtual void info(std::ostream &_sstream ) ;
-    ///@}
-
-};
-
-
-} // namespace view
-} // namespace gui
-
-
-#endif /*_GUI_VIEW_DEFAULT_VIEW_HPP_*/
diff --git a/Bundles/core/gui/include/gui/view/IView.hpp b/Bundles/core/gui/include/gui/view/IView.hpp
index 763da17..1dc347c 100644
--- a/Bundles/core/gui/include/gui/view/IView.hpp
+++ b/Bundles/core/gui/include/gui/view/IView.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _GUI_VIEW_IVIEW_HPP_
-#define _GUI_VIEW_IVIEW_HPP_
+#ifndef __GUI_VIEW_IVIEW_HPP__
+#define __GUI_VIEW_IVIEW_HPP__
 
-#include <fwServices/IService.hpp>
+#include "gui/config.hpp"
 
 #include <fwGui/IGuiContainerSrv.hpp>
 
-#include "gui/export.hpp"
+#include <fwServices/IService.hpp>
 
 namespace gui
 {
@@ -20,27 +20,26 @@ namespace view
 
 /**
  * @brief   Defines the service interface managing a view placed in main frame.
- * @class   IView
  *
  */
 class GUI_CLASS_API IView : public ::fwGui::IGuiContainerSrv
 {
 
-public :
+public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (IView)(::fwGui::IGuiContainerSrv) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (IView)(::fwGui::IGuiContainerSrv) );
 
 protected:
 
     /**
-    * @brief Constructor. Do nothing (Just initialize parameters).
-    */
-    GUI_API IView() throw() ;
+     * @brief Constructor. Do nothing (Just initialize parameters).
+     */
+    GUI_API IView() throw();
 
     /**
      * @brief Destructor. Do nothing.
      */
-    GUI_API virtual ~IView() throw() ;
+    GUI_API virtual ~IView() throw();
 
 };
 
@@ -50,4 +49,4 @@ protected:
 } // namespace gui
 
 
-#endif /*_GUI_VIEW_IVIEW_HPP_*/
+#endif /*__GUI_VIEW_IVIEW_HPP__*/
diff --git a/Bundles/core/gui/include/gui/view/Namespace.hpp b/Bundles/core/gui/include/gui/view/Namespace.hpp
deleted file mode 100644
index 60a8284..0000000
--- a/Bundles/core/gui/include/gui/view/Namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef GUIVIEWNAMESPACE_HPP_
-#define GUIVIEWNAMESPACE_HPP_
-
-#include "gui/GuiNamespaceDoc.hpp"
-
-namespace gui
-{
-/**
- * @brief       The namespace gui::view contains basic services managing view.
- * @namespace   gui::view
- * 
- * @date        2009-2010.
- *
- */
-namespace view
-{
-
-}
-}
-#endif /* GUIVIEWNAMESPACE_HPP_ */
diff --git a/Bundles/core/gui/include/gui/view/SDefaultView.hpp b/Bundles/core/gui/include/gui/view/SDefaultView.hpp
new file mode 100644
index 0000000..8fdc43f
--- /dev/null
+++ b/Bundles/core/gui/include/gui/view/SDefaultView.hpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __GUI_VIEW_SDEFAULTVIEW_HPP__
+#define __GUI_VIEW_SDEFAULTVIEW_HPP__
+
+#include "gui/view/IView.hpp"
+#include "gui/config.hpp"
+
+#include <fwTools/Failed.hpp>
+
+namespace gui
+{
+namespace view
+{
+
+/**
+ * @brief Defines the generic layout for application.
+ * @see ::fwGui::IGuiContainer for the service configuration
+ */
+class GUI_CLASS_API SDefaultView : public ::gui::view::IView
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SDefaultView)(::gui::view::IView) );
+
+    /// Constructor. Do nothing.
+    GUI_API SDefaultView() throw();
+
+    /// Destructor. Do nothing.
+    GUI_API virtual ~SDefaultView() throw();
+
+protected:
+
+    /**
+     * @name Service methods ( override from ::fwServices::IService )
+     * @{
+     */
+
+    /**
+     * @brief This method is used to configure the class parameters.
+     * @see ::fwGui::IGuiContainerSrv::initialize()
+     */
+    GUI_API virtual void configuring() throw( ::fwTools::Failed );
+
+    /**
+     * @brief Register a view with defined id.
+     * @see ::fwGui::IGuiContainerSrv::create()
+     */
+    GUI_API virtual void starting() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method remove the view in the frame.
+     * @see ::fwGui::IGuiContainerSrv::destroy()
+     */
+    GUI_API virtual void stopping() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method is used to update services. Do nothing.
+     */
+    GUI_API virtual void updating() throw(::fwTools::Failed);
+
+    /**
+     * @brief This method gives information about the class. Do nothing.
+     */
+    GUI_API virtual void info(std::ostream& _sstream );
+    ///@}
+
+};
+
+
+} // namespace view
+} // namespace gui
+
+
+#endif /*__GUI_VIEW_SDEFAULTVIEW_HPP__*/
diff --git a/Bundles/core/gui/rc/plugin.xml b/Bundles/core/gui/rc/plugin.xml
index 65dce1c..ce0e5b0 100644
--- a/Bundles/core/gui/rc/plugin.xml
+++ b/Bundles/core/gui/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin class="::gui::Plugin" id="gui">
+<plugin class="::gui::Plugin" id="gui" version="@DASH_VERSION@" >
 
     <library name="gui"/>
 
@@ -7,46 +7,46 @@
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IFrameSrv</type>
-        <service>::gui::frame::DefaultFrame</service>
+        <service>::gui::frame::SDefaultFrame</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IMenuSrv</type>
-        <service>::gui::aspect::DefaultMenuSrv</service>
+        <service>::gui::aspect::SDefaultMenu</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IMenuBarSrv</type>
-        <service>::gui::aspect::DefaultMenuBarSrv</service>
+        <service>::gui::aspect::SDefaultMenuBar</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::gui::view::IView</type>
-        <service>::gui::view::DefaultView</service>
+        <service>::gui::view::SDefaultView</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::NothingActionSrv</service>
+        <service>::gui::action::SDoNothing</service>
         <object>::fwData::Object</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::QuitAction</service>
+        <service>::gui::action::SQuit</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::StarterActionService</service>
+        <service>::gui::action::SStarter</service>
         <object>::fwData::Object</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
         <service>::gui::action::SSlotCaller</service>
@@ -54,45 +54,45 @@
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IToolBarSrv</type>
-        <service>::gui::aspect::DefaultToolBarSrv</service>
+        <type>::fwGui::IActionSrv</type>
+        <service>::gui::action::SBooleanSlotCaller</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::ConfigActionSrv</service>
+        <type>::fwGui::IToolBarSrv</type>
+        <service>::gui::aspect::SDefaultToolBar</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::ConfigActionSrvWithKey</service>
+        <service>::gui::action::SConfigLauncher</service>
         <object>::fwData::Object</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::SConfigLauncher</service>
+        <service>::gui::action::SModifyLayout</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::ModifyLayoutActionSrv</service>
-        <object>::fwData::Object</object>
+        <service>::gui::action::SPushObject</service>
+        <object>::fwData::Composite</object>
     </extension>
-    
+
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::ActionNotifyService</service>
+        <service>::gui::action::SPushField</service>
         <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
-        <type>::fwGui::IActionSrv</type>
-        <service>::gui::action::PushObjectSrv</service>
-        <object>::fwData::Composite</object>
+        <type>::gui::editor::IDialogEditor</type>
+        <service>::gui::editor::SJobBar</service>
+        <object>::fwData::Object</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
diff --git a/Bundles/core/gui/src/gui/Plugin.cpp b/Bundles/core/gui/src/gui/Plugin.cpp
index 69e3d83..9496732 100644
--- a/Bundles/core/gui/src/gui/Plugin.cpp
+++ b/Bundles/core/gui/src/gui/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,16 +14,19 @@ namespace gui
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::gui::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace gui
diff --git a/Bundles/core/gui/src/gui/action/ActionNotifyService.cpp b/Bundles/core/gui/src/gui/action/ActionNotifyService.cpp
deleted file mode 100644
index 7c1c2b9..0000000
--- a/Bundles/core/gui/src/gui/action/ActionNotifyService.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwRuntime/helper.hpp>
-#include <fwRuntime/Extension.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include "gui/action/ActionNotifyService.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-//-----------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::ActionNotifyService , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-ActionNotifyService::ActionNotifyService() throw()
-{
-    //handlingEventOff();
-}
-
-//-----------------------------------------------------------------------------
-
-ActionNotifyService::~ActionNotifyService() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ActionNotifyService::info(std::ostream &_sstream )
-{
-    _sstream << "NotifyService Action" << std::endl;
-}
-
-//-----------------------------------------------------------------------------
-
-void ActionNotifyService::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void ActionNotifyService::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void ActionNotifyService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{}
-
-//-----------------------------------------------------------------------------
-
-void ActionNotifyService::updating() throw( ::fwTools::Failed )
-{
-    if (this->confirmAction())
-    {
-        BOOST_FOREACH(MsgEventType msg, m_vectMsg)
-        {
-            const std::string msgType = msg.get<0>();
-            const std::string event   = msg.get<1>();
-            ::fwServices::ObjectMsg::sptr objectMsg = ::fwServices::factory::message::New(msgType);
-            OSLM_ASSERT(msgType << " creation failed", objectMsg);
-
-            ::fwData::Object::sptr srvObj = this->getObject();
-            objectMsg->addEvent( event );
-            ::fwServices::IEditionService::notify(this->getSptr(), srvObj, objectMsg);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ActionNotifyService::configuring() throw( ::fwTools::Failed )
-{
-    this->initialize();
-
-    m_vectMsg.clear();
-    std::vector < ::fwRuntime::ConfigurationElement::sptr > notify = m_configuration->find("notify");
-    SLM_ASSERT("Problem with configuration for ActionNotifyService, missing element \"notify\"", !notify.empty() );
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr msgConfig, notify)
-    {
-        SLM_ASSERT("Missing attribute type", msgConfig->hasAttribute("type"));
-        std::string type = msgConfig->getAttributeValue("type");
-        SLM_ASSERT("Missing attribute event", msgConfig->hasAttribute("event"));
-        std::string event = msgConfig->getAttributeValue("event");
-        MsgEventType msg (type, event);
-        m_vectMsg.push_back( msg );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-}
-}
diff --git a/Bundles/core/gui/src/gui/action/ConfigActionSrv.cpp b/Bundles/core/gui/src/gui/action/ConfigActionSrv.cpp
deleted file mode 100644
index 77e5d65..0000000
--- a/Bundles/core/gui/src/gui/action/ConfigActionSrv.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/regex.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include "gui/action/ConfigActionSrv.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-//------------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::ConfigActionSrv, ::fwData::Object );
-const ::fwCom::Signals::SignalKeyType  ConfigActionSrv::s_LAUNCHED_SIG = "launched";
-
-//------------------------------------------------------------------------------
-
-ConfigActionSrv::ConfigActionSrv() throw() :
-    m_viewConfigId(""),
-    m_configIsRunning(false),
-    m_sigLaunched(LaunchedSignalType::New())
-{
-    //addNewHandledEvent("WINDOW_CLOSED");
-    ::fwCom::HasSignals::m_signals( s_LAUNCHED_SIG, m_sigLaunched );
-
-#ifdef COM_LOG
-    m_sigLaunched->setID( s_LAUNCHED_SIG );
-#endif
-}
-
-//------------------------------------------------------------------------------
-
-ConfigActionSrv::~ConfigActionSrv() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    m_connections = ::fwServices::helper::SigSlotConnection::New();
-    this->::fwGui::IActionSrv::actionServiceStarting();
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    bool configIsRunning = this->::fwGui::IActionSrv::getIsActive();
-
-    if ( configIsRunning )
-    {
-        this->stopConfig();
-    }
-
-    m_connections.reset();
-    this->::fwGui::IActionSrv::actionServiceStopping();
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    this->::fwGui::IActionSrv::initialize();
-
-    std::vector < ConfigurationType > vectConfig = m_configuration->find("config");
-
-    SLM_ASSERT("Sorry you must have one (and only one) <config id=... /> element.", vectConfig.size() == 1 );
-    ::fwRuntime::ConfigurationElement::sptr configElement = vectConfig.at(0);
-
-    SLM_ASSERT( "Sorry, missing attribute id in <config> xml element.", configElement->hasAttribute("id") );
-    m_viewConfigId = configElement->getExistingAttributeValue("id");
-
-    SLM_ASSERT( "Sorry, the attribute id in <config> xml element is empty.", ! m_viewConfigId.empty() );
-
-    std::vector < ConfigurationType > replaceTagsConfig = m_configuration->find("replace");
-    std::string adaptor("");
-    std::string pattern("");
-    BOOST_FOREACH( ConfigurationType replaceItem, replaceTagsConfig)
-    {
-        SLM_ASSERT("<replace> tag must have one attribut val.", replaceItem->hasAttribute("val"));
-        adaptor = replaceItem->getAttributeValue("val");
-        SLM_ASSERT("<replace> tag must have one attribut pattern.", replaceItem->hasAttribute("pattern"));
-        pattern = replaceItem->getAttributeValue("pattern");
-        m_fieldAdaptors[pattern] = adaptor;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ConfigActionSrv::setIsActive(bool isActive)
-{
-    this->::fwGui::IActionSrv::setIsActive(isActive);
-    if ( isActive )
-    {
-        this->startConfig();
-    }
-    else
-    {
-        this->stopConfig();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::updating() throw(::fwTools::Failed)
-{}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    if ( _msg->hasEvent("WINDOW_CLOSED") )
-    {
-        this->::fwGui::IActionSrv::setIsActive( false );
-        this->stopConfig();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::info( std::ostream &_sstream )
-{}
-
-//------------------------------------------------------------------------------
-void ConfigActionSrv::AddGenericUidToFieldApadtor( )
-{
-    // Generate generic UID
-    std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier( this->getID() );
-
-    // Init manager
-    m_fieldAdaptors["GENERIC_UID"] = genericUidAdaptor;
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::startConfig()
-{
-    AddGenericUidToFieldApadtor();
-
-    ::fwRuntime::ConfigurationElement::csptr config = ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( m_viewConfigId, m_fieldAdaptors );
-    m_configTemplateManager = ::fwServices::AppConfigManager::New();
-    m_configTemplateManager->setConfig( config );
-
-
-    // Launch config
-    m_configTemplateManager->launch();
-
-    // Add connection
-    this->connectToConfigRoot();
-
-    m_configIsRunning = true;
-    fwServicesNotifyMacro(this->getLightID(), m_sigLaunched, ());
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::stopConfig()
-{
-    if( m_configIsRunning )
-    {
-        // Remove connection
-        this->disconnectToConfigRoot();
-
-        // Delete manager
-        m_configTemplateManager->stopAndDestroy();
-        m_configTemplateManager.reset();
-    }
-    m_configIsRunning = false;
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::connectToConfigRoot()
-{
-    ::fwData::Object::sptr root = m_configTemplateManager->getConfigRoot();
-    m_connections->connect( root, this->getSptr(), this->getObjSrvConnections() );
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrv::disconnectToConfigRoot()
-{
-    m_connections->disconnect();
-}
-
-//------------------------------------------------------------------------------
-
-}
-}
-
diff --git a/Bundles/core/gui/src/gui/action/ConfigActionSrvWithKey.cpp b/Bundles/core/gui/src/gui/action/ConfigActionSrvWithKey.cpp
deleted file mode 100644
index 45fa3cb..0000000
--- a/Bundles/core/gui/src/gui/action/ConfigActionSrvWithKey.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include <fwTools/fwID.hpp>
-#include <fwData/Composite.hpp>
-#include <fwComEd/CompositeMsg.hpp>
-
-#include "gui/action/ConfigActionSrvWithKey.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-//------------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::ConfigActionSrvWithKey, ::fwData::Object );
-
-//------------------------------------------------------------------------------
-
-ConfigActionSrvWithKey::ConfigActionSrvWithKey() throw()
-{
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::ADDED_KEYS );
-    //addNewHandledEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS );
-}
-
-//------------------------------------------------------------------------------
-
-ConfigActionSrvWithKey::~ConfigActionSrvWithKey() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    this->::gui::action::ConfigActionSrv::starting();
-
-    bool executable = true;
-
-    ::fwData::Object::sptr obj = this->getObject();
-    ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast( obj );
-    if( composite )
-    {
-        BOOST_FOREACH( const KeyAdaptorType::value_type& elem, m_keyAdaptors )
-        {
-            if ( elem.second != "self" )
-            {
-                executable &= (composite->find(elem.second)!= composite->end());
-            }
-        }
-    }
-    else
-    {
-        BOOST_FOREACH( const KeyAdaptorType::value_type& elem, m_keyAdaptors )
-        {
-            if ( elem.second != "self" )
-            {
-                executable &= (obj->getFields().find(elem.second)!= obj->getFields().end());
-            }
-        }
-    }
-
-    this->::fwGui::IActionSrv::setIsExecutable( executable );
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->::gui::action::ConfigActionSrv::stopping();
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->::gui::action::ConfigActionSrv::configuring();
-
-    std::vector < ConfigurationType > keyTagsConfig = m_configuration->find("key");
-    SLM_ASSERT("::gui::action::ConfigActionSrv must have at least  one tag <key>", !keyTagsConfig.empty());
-    if(!keyTagsConfig.empty())
-    {
-        std::string adaptor("");
-        std::string pattern("");
-        BOOST_FOREACH( ConfigurationType keyItem, keyTagsConfig)
-        {
-            SLM_ASSERT("<key> tag must have one attribut val.", keyItem->hasAttribute("id"));
-            adaptor = keyItem->getAttributeValue("id");
-            SLM_ASSERT("<key> tag must have one attribut pattern.", keyItem->hasAttribute("pattern"));
-            pattern = keyItem->getAttributeValue("pattern");
-            m_keyAdaptors[pattern] = adaptor;
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::updating() throw(::fwTools::Failed)
-{
-    this->::gui::action::ConfigActionSrv::updating();
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    this->::gui::action::ConfigActionSrv::receiving(_msg);
-
-    bool executable = true;
-
-    ::fwData::Object::sptr obj = this->getObject();
-    ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast( obj );
-    if( composite )
-    {
-        if ( _msg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) ||
-             _msg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS )  )
-        {
-            BOOST_FOREACH( const KeyAdaptorType::value_type& elem, m_keyAdaptors )
-            {
-                if ( elem.second != "self" )
-                {
-                    executable &= (composite->find(elem.second)!= composite->end());
-                }
-            }
-            this->::fwGui::IActionSrv::setIsExecutable( executable );
-        }
-    }
-    else
-    {
-        if ( _msg->hasEvent( ::fwServices::ObjectMsg::ADDED_FIELDS ) ||
-             _msg->hasEvent( ::fwServices::ObjectMsg::REMOVED_FIELDS ) )
-        {
-            BOOST_FOREACH( const KeyAdaptorType::value_type& elem, m_keyAdaptors )
-            {
-                if ( elem.second != "self" )
-                {
-                    executable &= (composite->find(elem.second)!= composite->end());
-                }
-            }
-            this->::fwGui::IActionSrv::setIsExecutable( executable );
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::info( std::ostream &_sstream )
-{
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::startConfig()
-{
-    AddGenericUidToFieldApadtor();
-    std::map< std::string, std::string > finalMap;
-    finalMap = m_fieldAdaptors;
-
-    ::fwData::Object::sptr obj = this->getObject();
-    ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast( obj );
-    if( composite )
-    {
-        BOOST_FOREACH( const KeyAdaptorType::value_type& elem, m_keyAdaptors )
-        {
-            std::string key = elem.second;
-            if ( key == "self" )
-            {
-                finalMap[elem.first] = composite->getID();
-            }
-            else
-            {
-                finalMap[elem.first] = (*composite)[key]->getID();
-            }
-        }
-    }
-    else
-    {
-        BOOST_FOREACH( const KeyAdaptorType::value_type& elem, m_keyAdaptors )
-        {
-            std::string key = elem.second;
-            if ( key == "self" )
-            {
-                finalMap[elem.first] = obj->getID();
-            }
-            else
-            {
-                finalMap[elem.first] = obj->getField(key)->getID();
-            }
-        }
-    }
-
-    // Init manager
-    ::fwRuntime::ConfigurationElement::csptr config =
-            ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( m_viewConfigId, finalMap );
-    m_configTemplateManager = ::fwServices::AppConfigManager::New();
-    m_configTemplateManager->setConfig( config );
-
-    // Launch config
-    m_configTemplateManager->launch();
-
-    // Add connection
-    this->connectToConfigRoot();
-
-    m_configIsRunning = true;
-
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigActionSrvWithKey::stopConfig()
-{
-    if( m_configIsRunning )
-    {
-        // Remove com channel
-        this->disconnectToConfigRoot();
-
-        // Delete manager
-        m_configTemplateManager->stopAndDestroy();
-        m_configTemplateManager.reset();
-    }
-    m_configIsRunning = false;
-}
-
-//------------------------------------------------------------------------------
-
-}
-}
-
diff --git a/Bundles/core/gui/src/gui/action/ModifyLayoutActionSrv.cpp b/Bundles/core/gui/src/gui/action/ModifyLayoutActionSrv.cpp
deleted file mode 100644
index 9a8bf41..0000000
--- a/Bundles/core/gui/src/gui/action/ModifyLayoutActionSrv.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwRuntime/helper.hpp>
-#include <fwRuntime/Extension.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-#include <fwGui/GuiRegistry.hpp>
-#include <fwGui/IGuiContainerSrv.hpp>
-
-#include "gui/action/ModifyLayoutActionSrv.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::gui::action::ModifyLayoutActionSrv , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-ModifyLayoutActionSrv::ModifyLayoutActionSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-ModifyLayoutActionSrv::~ModifyLayoutActionSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ModifyLayoutActionSrv::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void ModifyLayoutActionSrv::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void ModifyLayoutActionSrv::info(std::ostream &_sstream )
-{
-    _sstream << "Starter Action" << std::endl;
-}
-
-//-----------------------------------------------------------------------------
-
-void ModifyLayoutActionSrv::updating() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-
-    BOOST_FOREACH(MoveSrvVectType::value_type elt, m_moveSrv )
-    {
-        std::string uid = elt.first;
-        std::string wid = elt.second;
-        OSLM_ASSERT( uid << " doesn't exist", ::fwTools::fwID::exist(uid) );
-        ::fwServices::IService::sptr service = ::fwServices::get( uid ) ;
-        SLM_ASSERT("service not found", service);
-        ::fwGui::IGuiContainerSrv::sptr container = ::fwGui::IGuiContainerSrv::dynamicCast(service);
-        SLM_ASSERT("::fwGui::IGuiContainerSrv dynamicCast failed", container);
-
-        container->setParent(wid);
-        service->update();
-    }
-
-    BOOST_FOREACH(EnableSrvVectType::value_type elt, m_enableSrv )
-    {
-        std::string uid = elt.first;
-        bool isEnable = elt.second;
-        OSLM_ASSERT( uid << " doesn't exist", ::fwTools::fwID::exist(uid) );
-        ::fwServices::IService::sptr service = ::fwServices::get( uid ) ;
-        SLM_ASSERT("service not found", service);
-        if(service->isStarted())
-        {
-//            //todo : add methods to enable/disable IGuiContainerSrv, IMenuSrv, IMenuBarSrv and IToolBarSrv
-//            ::fwGui::IGuiContainerSrv::sptr containerSrv = ::fwGui::IGuiContainerSrv::dynamicCast(service);
-//            if(containerSrv)
-//            {
-//                container->getContainer()->setEnable(isEnable);
-//            }
-            ::fwGui::IActionSrv::sptr actionSrv = ::fwGui::IActionSrv::dynamicCast(service);
-            if(actionSrv)
-            {
-                actionSrv->setIsExecutable(isEnable);
-            }
-        }
-    }
-
-    BOOST_FOREACH(ShowSrvVectType::value_type elt, m_showSrv)
-    {
-        std::string wid = elt.first;
-        ::boost::logic::tribool isVisible = elt.second;
-        ::fwGui::container::fwContainer::sptr container = ::fwGui::GuiRegistry::getWIDContainer(wid);
-        OSLM_ASSERT("::fwGui::IGuiContainerSrv " << wid << " is unknown", container);
-
-        if(isVisible)
-        {
-            container->setVisible(true);
-        }
-        else if(!isVisible)
-        {
-            container->setVisible(false);
-        }
-        else
-        {
-            container->setVisible(this->getIsActive());
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ModifyLayoutActionSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void ModifyLayoutActionSrv::configuring() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-    std::vector < ConfigurationType > vectConfig = m_configuration->find("config");
-    if( ! vectConfig.empty() )
-    {
-        ConfigurationType config = vectConfig.at(0);
-        BOOST_FOREACH(ConfigurationType actionCfg, config->getElements() )
-        {
-            if(actionCfg->getName() == "move")
-            {
-                SLM_ASSERT("Attribute uid missing", actionCfg->hasAttribute("uid")) ;
-                std::string uuid = actionCfg->getExistingAttributeValue("uid") ;
-                SLM_ASSERT("Attribute wid missing", actionCfg->hasAttribute("wid")) ;
-                std::string wid = actionCfg->getExistingAttributeValue("wid") ;
-
-                m_moveSrv.push_back( std::make_pair(uuid, wid) );
-            }
-            else if(actionCfg->getName() == "show"
-                    || actionCfg->getName() == "hide"
-                    || actionCfg->getName() == "show_or_hide")
-            {
-                SLM_ASSERT("Attribute wid missing", actionCfg->hasAttribute("wid")) ;
-                std::string wid = actionCfg->getExistingAttributeValue("wid") ;
-                ::boost::logic::tribool isVisible;
-                if (actionCfg->getName() == "show")
-                {
-                    isVisible = true;
-                }
-                else if (actionCfg->getName() == "hide")
-                {
-                    isVisible = false;
-                }
-                else
-                {
-                    isVisible = ::boost::logic::indeterminate;
-                }
-                m_showSrv.push_back( std::make_pair(wid, isVisible) );
-            }
-            else if(actionCfg->getName() == "enable" || actionCfg->getName() == "disable")
-            {
-                SLM_ASSERT("Attribute uid missing", actionCfg->hasAttribute("uid")) ;
-                std::string uuid = actionCfg->getExistingAttributeValue("uid") ;
-                bool isEnable = (actionCfg->getName() == "enable");
-
-                m_enableSrv.push_back( std::make_pair(uuid, isEnable) );
-            }
-            else
-            {
-                OSLM_FATAL( "Invalid tag name "<<actionCfg->getName());
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace action
-} // namespace gui
-
diff --git a/Bundles/core/gui/src/gui/action/NothingActionSrv.cpp b/Bundles/core/gui/src/gui/action/NothingActionSrv.cpp
deleted file mode 100644
index ac376fe..0000000
--- a/Bundles/core/gui/src/gui/action/NothingActionSrv.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-
-
-#include "gui/action/NothingActionSrv.hpp"
-
-namespace gui
-{
-namespace action
-{
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::gui::action::NothingActionSrv , ::fwData::Object ) ;
-
-
-NothingActionSrv::NothingActionSrv() throw()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-NothingActionSrv::~NothingActionSrv() throw()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-void NothingActionSrv::configuring() throw( ::fwTools::Failed )
-{
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void NothingActionSrv::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void NothingActionSrv::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void NothingActionSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void NothingActionSrv::updating() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void NothingActionSrv::info(std::ostream &_sstream )
-{
-    _sstream << "Nothing Action" << std::endl;
-}
-
-}
-}
-
diff --git a/Bundles/core/gui/src/gui/action/PushObjectSrv.cpp b/Bundles/core/gui/src/gui/action/PushObjectSrv.cpp
deleted file mode 100644
index 0c4e1fa..0000000
--- a/Bundles/core/gui/src/gui/action/PushObjectSrv.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/regex.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/AppConfig.hpp>
-
-#include <fwTools/fwID.hpp>
-#include <fwData/Composite.hpp>
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/helper/Composite.hpp>
-
-#include "gui/action/PushObjectSrv.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-//------------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::PushObjectSrv, ::fwData::Composite );
-
-//------------------------------------------------------------------------------
-
-PushObjectSrv::PushObjectSrv() throw()
-{
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::ADDED_KEYS );
-//    addNewHandledEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS );
-}
-
-//------------------------------------------------------------------------------
-
-PushObjectSrv::~PushObjectSrv() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-void PushObjectSrv::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-    bool executable = true;
-    std::string src_uid;
-    BOOST_FOREACH(const SrcKeyMapType::value_type& valElt, m_srcMap )
-    {
-        src_uid = valElt.first;
-        SLM_TRACE("start check : " + src_uid );
-        OSLM_ASSERT( src_uid << " doesn't exist", ::fwTools::fwID::exist(src_uid) );
-        ::fwData::Composite::sptr composite_src = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject( src_uid ) );
-        OSLM_ASSERT("fwData::Composite dynamicCast failed for "<<src_uid, composite_src);
-        BOOST_FOREACH(SrcKeyMapType::key_type keyElt, valElt.second )
-        {
-            executable &= (composite_src->find(keyElt)!= composite_src->end());
-            OSLM_TRACE("start check : " << src_uid << "[" << keyElt << "] : " <<(composite_src->find(keyElt)!= composite_src->end()) );
-        }
-    }
-    this->::fwGui::IActionSrv::setIsExecutable( executable );
-}
-
-//------------------------------------------------------------------------------
-
-void PushObjectSrv::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//------------------------------------------------------------------------------
-
-void PushObjectSrv::configuring() throw( ::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->initialize();
-
-    std::vector < ConfigurationType > pushConfig = m_configuration->find("push","","",3);
-    std::string src, src_uid, src_key, key;
-    ::boost::regex re("(.*)\\[(.*)\\]");
-    ::boost::smatch match;
-    BOOST_FOREACH( ConfigurationType pushItem, pushConfig)
-    {
-        SLM_ASSERT("<push> tag must have one attribute key.", pushItem->hasAttribute("key"));
-        key = pushItem->getAttributeValue("key");
-        SLM_ASSERT("<push> tag must have one attribute src.", pushItem->hasAttribute("src"));
-        src = pushItem->getAttributeValue("src");
-        if( ::boost::regex_match(src, match, re) )
-        {
-            OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
-            src_uid.assign(match[1].first, match[1].second);
-            src_key.assign(match[2].first, match[2].second);
-            m_key2src[key] = std::make_pair(src_uid, src_key);
-            m_srcMap[src_uid].insert(src_key);
-            SLM_TRACE("Add " + src_uid + "[" + src_key + "]");
-        }
-        else
-        {
-            OSLM_FATAL("The regexp \"" << re << "\" does not match \"" << src << "\"");
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void PushObjectSrv::updating() throw(::fwTools::Failed)
-{
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
-    ::boost::shared_ptr< ::fwComEd::helper::Composite > compositeHelper ( new ::fwComEd::helper::Composite( composite ) );
-
-    std::string src_uid("");
-    std::string src_key("");
-    std::string key("");
-    BOOST_FOREACH(DestKeyMapType::value_type elt, m_key2src )
-    {
-        key = elt.first;
-        src_uid = elt.second.first;
-        src_key = elt.second.second;
-        OSLM_ASSERT( src_uid << " doesn't exist", ::fwTools::fwID::exist(src_uid) );
-        ::fwData::Composite::sptr composite_src = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject( src_uid ) );
-        OSLM_ASSERT("fwData::Composite dynamicCast failed for "<<src_uid, composite_src);
-
-
-        ::fwData::Composite::const_iterator iter = composite_src->find(src_key);
-
-        OSLM_WARN_IF("'" << src_key << "' not found in composite '" << src_uid << "'" ,iter == composite_src->end());
-        if (iter != composite_src->end())
-        {
-            ::fwData::Object::sptr obj = composite_src->getContainer()[src_key];
-
-            if ( composite->find(key) != composite->end() )
-            {
-                compositeHelper->remove(key);
-            }
-            else
-            {
-                compositeHelper->add(key, obj);
-            }
-        }
-    }
-    // Notification of message
-    compositeHelper->notify( this->getSptr() );
-}
-
-//------------------------------------------------------------------------------
-
-void PushObjectSrv::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
-{
-    bool executable = !m_srcMap.empty();
-    ::fwData::Object::sptr subject = msg->getSubject().lock();
-
-    std::string src_uid;
-    BOOST_FOREACH(const SrcKeyMapType::value_type& valElt, m_srcMap )
-    {
-        src_uid = valElt.first;
-        SLM_TRACE("check : " + src_uid);
-        if( src_uid == subject->getID() &&
-                ( msg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) ||
-                  msg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS))  )
-        {
-            ::fwData::Composite::sptr composite_src = ::fwData::Composite::dynamicCast( subject );
-            OSLM_ASSERT("fwData::Composite dynamicCast failed for "<<src_uid, composite_src);
-            BOOST_FOREACH(SrcKeyMapType::key_type keyElt, valElt.second )
-            {
-                executable &= (composite_src->find(keyElt)!= composite_src->end());
-                OSLM_TRACE("check : " << src_uid << "[" << keyElt << "] : " << (composite_src->find(keyElt)!= composite_src->end()) );
-            }
-        }
-    }
-    this->setIsExecutable( executable );
-
-    //TODO managed active mode (objects already present in target composite)
-}
-
-//------------------------------------------------------------------------------
-
-void PushObjectSrv::info( std::ostream &_sstream )
-{}
-
-//------------------------------------------------------------------------------
-
-}
-}
-
diff --git a/Bundles/core/gui/src/gui/action/QuitAction.cpp b/Bundles/core/gui/src/gui/action/QuitAction.cpp
deleted file mode 100644
index 08ea0f7..0000000
--- a/Bundles/core/gui/src/gui/action/QuitAction.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include <fwGui/Application.hpp>
-#include <fwGui/Cursor.hpp>
-
-#include "gui/action/QuitAction.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::gui::action::QuitAction , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-QuitAction::QuitAction() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-QuitAction::~QuitAction() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void QuitAction::configuring() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void QuitAction::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void QuitAction::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void QuitAction::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void QuitAction::info(std::ostream &_sstream )
-{
-    _sstream << "Quit Action" << std::endl;
-}
-
-//-----------------------------------------------------------------------------
-
-void QuitAction::updating() throw( ::fwTools::Failed )
-{
-    ::fwGui::Cursor cursor;
-    cursor.setCursor(::fwGui::ICursor::BUSY);
-    ::fwGui::Application::New()->exit(0);
-    cursor.setDefaultCursor();
-}
-
-//-----------------------------------------------------------------------------
-
-}
-}
diff --git a/Bundles/core/gui/src/gui/action/SBooleanSlotCaller.cpp b/Bundles/core/gui/src/gui/action/SBooleanSlotCaller.cpp
new file mode 100644
index 0000000..70b4262
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SBooleanSlotCaller.cpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SBooleanSlotCaller.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwRuntime/Extension.hpp>
+#include <fwRuntime/helper.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <boost/regex.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SBooleanSlotCaller, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SBooleanSlotCaller::SBooleanSlotCaller() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SBooleanSlotCaller::~SBooleanSlotCaller() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SBooleanSlotCaller::updating() throw( ::fwTools::Failed )
+{
+    for(SlotInfoType info :  m_slotInfos)
+    {
+        HasSlotIDType HasSlotId = info.first;
+        ::fwCom::Slots::SlotKeyType slotKey = info.second;
+
+        if (::fwTools::fwID::exist(HasSlotId))
+        {
+            ::fwTools::Object::sptr obj      = ::fwTools::fwID::getObject(HasSlotId);
+            ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+            SLM_ASSERT("Object with id " << HasSlotId << " is not a HasSlots", hasSlots);
+
+            ::fwCom::SlotBase::sptr slot = hasSlots->slot(slotKey);
+
+            slot->asyncRun(this->getIsActive());
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace action
+} // namespace gui
+
diff --git a/Bundles/core/gui/src/gui/action/SConfigLauncher.cpp b/Bundles/core/gui/src/gui/action/SConfigLauncher.cpp
index 99f7af7..8a0268b 100644
--- a/Bundles/core/gui/src/gui/action/SConfigLauncher.cpp
+++ b/Bundles/core/gui/src/gui/action/SConfigLauncher.cpp
@@ -1,15 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include "gui/action/SConfigLauncher.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwRuntime/Convert.hpp>
+
+#include <fwServices/macros.hpp>
 #include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/Proxy.hpp>
 
 #include <fwTools/fwID.hpp>
 
-#include "gui/action/SConfigLauncher.hpp"
-
 namespace gui
 {
 namespace action
@@ -21,29 +32,36 @@ fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SConfigLauncher, ::
 
 const ::fwCom::Signals::SignalKeyType SConfigLauncher::s_LAUNCHED_SIG = "launched";
 
+static const ::fwCom::Slots::SlotKeyType s_CHECK_IF_EXECUTABLE_SLOT = "checkIfExecutable";
+static const ::fwCom::Slots::SlotKeyType s_STOP_CONFIG_SLOT         = "stopConfig";
+
+static const std::string s_CLOSE_CONFIG_CHANNEL_ID = "CLOSE_CONFIG_CHANNEL";
+
 //------------------------------------------------------------------------------
 
-SConfigLauncher::SConfigLauncher() throw() :
-    m_sigLaunched(LaunchedSignalType::New())
+SConfigLauncher::SConfigLauncher() throw()
 {
     m_configLauncher = ::fwServices::helper::ConfigLauncher::New();
 
-    ::fwCom::HasSignals::m_signals( s_LAUNCHED_SIG, m_sigLaunched );
+    m_sigLaunched = newSignal<LaunchedSignalType>(s_LAUNCHED_SIG);
 
-#ifdef COM_LOG
-    m_sigLaunched->setID( s_LAUNCHED_SIG );
-#endif
+    newSlot(s_CHECK_IF_EXECUTABLE_SLOT, &SConfigLauncher::checkIfExecutable, this);
+    newSlot(s_STOP_CONFIG_SLOT, &SConfigLauncher::stopConfig, this);
 }
 
 //------------------------------------------------------------------------------
 
 SConfigLauncher::~SConfigLauncher() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void SConfigLauncher::starting() throw(::fwTools::Failed)
 {
+
+    m_proxychannel = this->getID() + "_stopConfig";
+
     this->actionServiceStarting();
     ::fwData::Object::sptr currentObj = this->getObject();
     bool executable = m_configLauncher->isExecutable(currentObj);
@@ -54,11 +72,7 @@ void SConfigLauncher::starting() throw(::fwTools::Failed)
 
 void SConfigLauncher::stopping() throw(::fwTools::Failed)
 {
-    bool configIsRunning = this->getIsActive();
-    if ( configIsRunning )
-    {
-        m_configLauncher->stopConfig();
-    }
+    this->stopConfig();
     this->actionServiceStopping();
 }
 
@@ -67,7 +81,71 @@ void SConfigLauncher::stopping() throw(::fwTools::Failed)
 void SConfigLauncher::configuring() throw(fwTools::Failed)
 {
     this->initialize();
-    m_configLauncher->parseConfig(this->getConfigTree());
+
+    if(this->isVersion2())
+    {
+        typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+        typedef ::fwRuntime::EConfigurationElement::sptr EditableConfigType;
+
+        ConfigType cfg = this->getConfiguration();
+
+        ConfigType appCfg = cfg->findConfigurationElement("appConfig");
+        SLM_ASSERT("Missing 'appConfig' tag.", appCfg);
+        std::string appCfgId = appCfg->getAttributeValue("id");
+
+
+        EditableConfigType srvCfg    = ::fwRuntime::EConfigurationElement::New( "service" );
+        EditableConfigType newCfg    = srvCfg->addConfigurationElement("config");
+        EditableConfigType newAppCfg = newCfg->addConfigurationElement("appConfig");
+        newAppCfg->setAttributeValue("id", appCfgId);
+
+        EditableConfigType newParamsCfg = newAppCfg->addConfigurationElement("parameters");
+
+        const std::vector< ConfigType > inoutsCfg = cfg->find("inout");
+        for (const auto& inoutCfg : inoutsCfg)
+        {
+            std::string key = inoutCfg->getAttributeValue("key");
+            SLM_ASSERT("[" + appCfgId + "] Missing 'key' tag.", !key.empty());
+
+            std::string uid = inoutCfg->getAttributeValue("uid");
+            SLM_ASSERT("[" + appCfgId + "] Missing 'uid' tag.", !uid.empty());
+
+            EditableConfigType newParamCfg = newParamsCfg->addConfigurationElement("parameter");
+            newParamCfg->setAttributeValue("replace", key);
+
+            auto obj = this->getInOut< ::fwData::Object>(key);
+            newParamCfg->setAttributeValue("uid", obj->getID());
+        }
+
+        const std::vector< ConfigType > paramsCfg = cfg->find("parameter");
+        for (const auto& paramCfg : paramsCfg)
+        {
+            std::string replace = paramCfg->getAttributeValue("replace");
+            SLM_ASSERT("[" + appCfgId + "] Missing 'replace' tag.", !replace.empty());
+
+            EditableConfigType newParamCfg = newParamsCfg->addConfigurationElement("parameter");
+            newParamCfg->setAttributeValue("replace", replace);
+
+            std::string uid = paramCfg->getAttributeValue("uid");
+            if(!uid.empty())
+            {
+                newParamCfg->setAttributeValue("uid", uid);
+            }
+            else
+            {
+                std::string by = paramCfg->getAttributeValue("by");
+                SLM_ASSERT("[" + appCfgId + "] Missing 'uid' or 'by' tag.", !by.empty());
+
+                newParamCfg->setAttributeValue("by", by);
+            }
+        }
+
+        m_configLauncher->parseConfig(::fwRuntime::Convert::toPropertyTree(srvCfg));
+    }
+    else
+    {
+        m_configLauncher->parseConfig(this->getConfigTree());
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -77,12 +155,16 @@ void SConfigLauncher::setIsActive(bool isActive)
     this->::fwGui::IActionSrv::setIsActive(isActive);
     if ( isActive )
     {
-        m_configLauncher->startConfig(this->getSptr());
-        fwServicesNotifyMacro(this->getLightID(), m_sigLaunched, ());
+        ::fwServices::registry::Proxy::sptr proxies = ::fwServices::registry::Proxy::getDefault();
+        proxies->connect(m_proxychannel, this->slot(s_STOP_CONFIG_SLOT));
+        ::fwServices::helper::ConfigLauncher::FieldAdaptorType replaceMap;
+        replaceMap[s_CLOSE_CONFIG_CHANNEL_ID] = m_proxychannel;
+        m_configLauncher->startConfig(this->getSptr(), replaceMap);
+        m_sigLaunched->asyncEmit();
     }
     else
     {
-        m_configLauncher->stopConfig();
+        this->stopConfig();
     }
 }
 
@@ -94,14 +176,8 @@ void SConfigLauncher::updating() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SConfigLauncher::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fwTools::Failed)
+void SConfigLauncher::checkIfExecutable()
 {
-    if ( msg->hasEvent("WINDOW_CLOSED") )
-    {
-        this->setIsActive( false );
-        m_configLauncher->stopConfig();
-    }
-
     ::fwData::Object::sptr currentObj = this->getObject();
     bool executable = m_configLauncher->isExecutable(currentObj);
     this->setIsExecutable( executable );
@@ -109,10 +185,32 @@ void SConfigLauncher::receiving( ::fwServices::ObjectMsg::csptr msg ) throw(::fw
 
 //------------------------------------------------------------------------------
 
+void SConfigLauncher::stopConfig()
+{
+    if (m_configLauncher->configIsRunning())
+    {
+        m_configLauncher->stopConfig();
+        ::fwServices::registry::Proxy::sptr proxies = ::fwServices::registry::Proxy::getDefault();
+        proxies->disconnect(m_proxychannel, this->slot(s_STOP_CONFIG_SLOT));
+        this->setIsActive(false);
+    }
+}
+
+//------------------------------------------------------------------------------
+
 void SConfigLauncher::info( std::ostream &_sstream )
 {
 }
 
+//-----------------------------------------------------------------------------
+
+SConfigLauncher::KeyConnectionsType SConfigLauncher::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_MODIFIED_SIG, s_CHECK_IF_EXECUTABLE_SLOT ) );
+    return connections;
+}
+
 //------------------------------------------------------------------------------
 
 }
diff --git a/Bundles/core/gui/src/gui/action/SDoNothing.cpp b/Bundles/core/gui/src/gui/action/SDoNothing.cpp
new file mode 100644
index 0000000..4f6f92a
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SDoNothing.cpp
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SDoNothing.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+
+
+
+namespace gui
+{
+namespace action
+{
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SDoNothing, ::fwData::Object );
+
+
+SDoNothing::SDoNothing() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SDoNothing::~SDoNothing() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SDoNothing::configuring() throw( ::fwTools::Failed )
+{
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDoNothing::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStarting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDoNothing::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStopping();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDoNothing::updating() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDoNothing::info(std::ostream &_sstream )
+{
+    _sstream << "Nothing Action" << std::endl;
+}
+
+}
+}
+
diff --git a/Bundles/core/gui/src/gui/action/SModifyLayout.cpp b/Bundles/core/gui/src/gui/action/SModifyLayout.cpp
new file mode 100644
index 0000000..4c882d7
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SModifyLayout.cpp
@@ -0,0 +1,229 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SModifyLayout.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwGui/GuiRegistry.hpp>
+#include <fwGui/IGuiContainerSrv.hpp>
+
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Extension.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
+
+#include <fwTools/fwID.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SModifyLayout, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SModifyLayout::SModifyLayout() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SModifyLayout::~SModifyLayout() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SModifyLayout::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStarting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SModifyLayout::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStopping();
+}
+
+//-----------------------------------------------------------------------------
+
+void SModifyLayout::info(std::ostream &_sstream )
+{
+    _sstream << "Starter Action" << std::endl;
+}
+
+//-----------------------------------------------------------------------------
+
+void SModifyLayout::updating() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    for(MoveSrvVectType::value_type elt :  m_moveSrv )
+    {
+        std::string uid = elt.first;
+        std::string wid = elt.second;
+        OSLM_ASSERT( uid << " doesn't exist", ::fwTools::fwID::exist(uid) );
+        ::fwServices::IService::sptr service = ::fwServices::get( uid );
+        SLM_ASSERT("service not found", service);
+        ::fwGui::IGuiContainerSrv::sptr container = ::fwGui::IGuiContainerSrv::dynamicCast(service);
+        SLM_ASSERT("::fwGui::IGuiContainerSrv dynamicCast failed", container);
+
+        container->setParent(wid);
+        service->update();
+    }
+
+    for(EnableSrvVectType::value_type elt :  m_enableSrv )
+    {
+        std::string uid = elt.first;
+        bool isEnable   = elt.second;
+        OSLM_ASSERT( uid << " doesn't exist", ::fwTools::fwID::exist(uid) );
+        ::fwServices::IService::sptr service = ::fwServices::get( uid );
+        SLM_ASSERT("service not found", service);
+        if(service->isStarted())
+        {
+            ::fwGui::IGuiContainerSrv::sptr containerSrv = ::fwGui::IGuiContainerSrv::dynamicCast(service);
+            if(containerSrv)
+            {
+                containerSrv->getContainer()->setEnabled(isEnable);
+            }
+            ::fwGui::IActionSrv::sptr actionSrv = ::fwGui::IActionSrv::dynamicCast(service);
+            if(actionSrv)
+            {
+                actionSrv->setIsExecutable(isEnable);
+            }
+        }
+    }
+
+    for(ShowSrvVectType::value_type elt :  m_showSrvWid)
+    {
+        std::string wid = elt.first;
+        ::boost::logic::tribool isVisible               = elt.second;
+        ::fwGui::container::fwContainer::sptr container = ::fwGui::GuiRegistry::getWIDContainer(wid);
+        OSLM_ASSERT("::fwGui::IGuiContainerSrv " << wid << " is unknown", container);
+
+        if(isVisible)
+        {
+            container->setVisible(true);
+        }
+        else if(!isVisible)
+        {
+            container->setVisible(false);
+        }
+        else
+        {
+            container->setVisible(this->getIsActive());
+        }
+    }
+
+    for(ShowSrvVectType::value_type elt :  m_showSrvSid)
+    {
+        std::string uid = elt.first;
+        ::boost::logic::tribool isVisible = elt.second;
+        OSLM_ASSERT( uid << " doesn't exist", ::fwTools::fwID::exist(uid) );
+        ::fwServices::IService::sptr service = ::fwServices::get( uid );
+
+        ::fwGui::IGuiContainerSrv::sptr containerSrv = ::fwGui::IGuiContainerSrv::dynamicCast(service);
+        SLM_ASSERT("::fwGui::IGuiContainerSrv dynamicCast failed", containerSrv);
+
+        ::fwGui::container::fwContainer::sptr container = containerSrv->getContainer();
+
+        if(isVisible)
+        {
+            container->setVisible(true);
+        }
+        else if(!isVisible)
+        {
+            container->setVisible(false);
+        }
+        else
+        {
+            container->setVisible(this->getIsActive());
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SModifyLayout::configuring() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+    std::vector < ConfigurationType > vectConfig = m_configuration->find("config");
+    if( !vectConfig.empty() )
+    {
+        ConfigurationType config = vectConfig.at(0);
+        for(ConfigurationType actionCfg :  config->getElements() )
+        {
+            if(actionCfg->getName() == "move")
+            {
+                SLM_ASSERT("Attribute uid missing", actionCfg->hasAttribute("uid"));
+                std::string uuid = actionCfg->getExistingAttributeValue("uid");
+                SLM_ASSERT("Attribute wid missing", actionCfg->hasAttribute("wid"));
+                std::string wid = actionCfg->getExistingAttributeValue("wid");
+
+                m_moveSrv.push_back( std::make_pair(uuid, wid) );
+            }
+            else if(actionCfg->getName() == "show"
+                    || actionCfg->getName() == "hide"
+                    || actionCfg->getName() == "show_or_hide")
+            {
+                ::boost::logic::tribool isVisible;
+                if (actionCfg->getName() == "show")
+                {
+                    isVisible = true;
+                }
+                else if (actionCfg->getName() == "hide")
+                {
+                    isVisible = false;
+                }
+                else
+                {
+                    isVisible = ::boost::logic::indeterminate;
+                }
+
+                if(actionCfg->hasAttribute("wid"))
+                {
+                    std::string wid = actionCfg->getExistingAttributeValue("wid");
+                    m_showSrvWid.push_back( std::make_pair(wid, isVisible) );
+                }
+                else if(actionCfg->hasAttribute("sid"))
+                {
+                    std::string sid = actionCfg->getExistingAttributeValue("sid");
+                    m_showSrvSid.push_back( std::make_pair(sid, isVisible) );
+                }
+                else
+                {
+                    SLM_ERROR("Attribute wid or sid missing");
+                }
+            }
+            else if(actionCfg->getName() == "enable" || actionCfg->getName() == "disable")
+            {
+                SLM_ASSERT("Attribute uid missing", actionCfg->hasAttribute("uid"));
+                std::string uuid = actionCfg->getExistingAttributeValue("uid");
+                bool isEnable    = (actionCfg->getName() == "enable");
+
+                m_enableSrv.push_back( std::make_pair(uuid, isEnable) );
+            }
+            else
+            {
+                OSLM_FATAL( "Invalid tag name "<<actionCfg->getName());
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace action
+} // namespace gui
+
diff --git a/Bundles/core/gui/src/gui/action/SPushField.cpp b/Bundles/core/gui/src/gui/action/SPushField.cpp
new file mode 100644
index 0000000..437fb28
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SPushField.cpp
@@ -0,0 +1,124 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SPushField.hpp"
+
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwTools/fwID.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+//------------------------------------------------------------------------------
+
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_OBJECTS_SLOT = "updateObject";
+
+static const std::string s_SOURCE_KEY      = "source";
+static const std::string s_DESTINATION_KEY = "destination";
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SPushField, ::fwData::Object );
+
+//------------------------------------------------------------------------------
+
+SPushField::SPushField() throw()
+{
+    newSlot(s_UPDATE_OBJECTS_SLOT, &SPushField::updateObjects, this);
+}
+
+//------------------------------------------------------------------------------
+
+SPushField::~SPushField() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SPushField::configuring() throw( ::fwTools::Failed)
+{
+    this->initialize();
+
+    const ConfigurationType pushCfg = m_configuration->findConfigurationElement("push");
+
+    SLM_ASSERT("<push> tag must have one attribute 'field'.", pushCfg->hasAttribute("field"));
+    m_field = pushCfg->getAttributeValue("field");
+}
+
+//------------------------------------------------------------------------------
+
+void SPushField::starting() throw(::fwTools::Failed)
+{
+    this->actionServiceStarting();
+    this->updateObjects();
+}
+
+//------------------------------------------------------------------------------
+
+void SPushField::stopping() throw(::fwTools::Failed)
+{
+    this->actionServiceStopping();
+}
+
+//------------------------------------------------------------------------------
+
+void SPushField::updating() throw(::fwTools::Failed)
+{
+    ::fwData::Object::sptr objectSrc = this->getInOut< ::fwData::Object >(s_SOURCE_KEY);
+    SLM_ASSERT( s_SOURCE_KEY + " doesn't exist or is not a composite", objectSrc);
+
+    ::fwData::Object::sptr obj = objectSrc->getField(m_field);
+
+    SLM_WARN_IF("'" + m_field + "' not found in object '" + objectSrc->getID() + "'", obj == nullptr);
+    if (obj)
+    {
+        this->setOutput(s_DESTINATION_KEY, obj);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPushField::updateObjects()
+{
+    bool executable = true;
+
+    if(this->isVersion2())
+    {
+        ::fwData::Object::sptr objectSrc = this->getInOut< ::fwData::Object >(s_SOURCE_KEY);
+        SLM_ASSERT( s_SOURCE_KEY + " doesn't exist or is not a composite", objectSrc);
+
+        executable = (objectSrc->getField(m_field) != nullptr);
+    }
+    this->::fwGui::IActionSrv::setIsExecutable( executable );
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap SPushField::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( s_SOURCE_KEY, ::fwData::Object::s_ADDED_FIELDS_SIG, s_UPDATE_OBJECTS_SLOT );
+    connections.push( s_SOURCE_KEY, ::fwData::Object::s_REMOVED_FIELDS_SIG, s_UPDATE_OBJECTS_SLOT );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace action
+
+} // namespace gui
diff --git a/Bundles/core/gui/src/gui/action/SPushObject.cpp b/Bundles/core/gui/src/gui/action/SPushObject.cpp
new file mode 100644
index 0000000..647ec6b
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SPushObject.cpp
@@ -0,0 +1,237 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SPushObject.hpp"
+
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Composite.hpp>
+
+#include <fwDataTools/helper/Composite.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <boost/regex.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_OBJECTS_SLOT = "updateObject";
+
+static const std::string s_SOURCE_KEY      = "source";
+static const std::string s_DESTINATION_KEY = "destination";
+
+//------------------------------------------------------------------------------
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SPushObject, ::fwData::Composite );
+
+//------------------------------------------------------------------------------
+
+SPushObject::SPushObject() throw()
+{
+    newSlot(s_UPDATE_OBJECTS_SLOT, &SPushObject::updateObjects, this);
+}
+
+//------------------------------------------------------------------------------
+
+SPushObject::~SPushObject() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SPushObject::configuring() throw( ::fwTools::Failed)
+{
+    this->initialize();
+
+    if(this->isVersion2())
+    {
+        const ConfigurationType pushCfg = m_configuration->findConfigurationElement("push");
+
+        SLM_ASSERT("<push> tag must have one attribute 'srcKey'.", pushCfg->hasAttribute("srcKey"));
+        m_srcKey = pushCfg->getAttributeValue("srcKey");
+    }
+    else
+    {
+        std::vector < ConfigurationType > pushConfig = m_configuration->find("push","","",3);
+        std::string src, srcUid, srcKey, key;
+        ::boost::regex re("(.*)\\[(.*)\\]");
+        ::boost::smatch match;
+        for( ConfigurationType pushItem :  pushConfig)
+        {
+            SLM_ASSERT("<push> tag must have one attribute key.", pushItem->hasAttribute("key"));
+            key = pushItem->getAttributeValue("key");
+            SLM_ASSERT("<push> tag must have one attribute src.", pushItem->hasAttribute("src"));
+            src = pushItem->getAttributeValue("src");
+            if( ::boost::regex_match(src, match, re) )
+            {
+                OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
+                srcUid.assign(match[1].first, match[1].second);
+                srcKey.assign(match[2].first, match[2].second);
+                m_key2src[key] = std::make_pair(srcUid, srcKey);
+                m_srcMap[srcUid].insert(srcKey);
+                SLM_TRACE("Add " + srcUid + "[" + srcKey + "]");
+            }
+            else
+            {
+                OSLM_FATAL("The regexp \"" << re << "\" does not match \"" << src << "\"");
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPushObject::starting() throw(::fwTools::Failed)
+{
+    this->actionServiceStarting();
+    this->updateObjects();
+}
+
+//------------------------------------------------------------------------------
+
+void SPushObject::stopping() throw(::fwTools::Failed)
+{
+    this->actionServiceStopping();
+}
+
+//------------------------------------------------------------------------------
+
+void SPushObject::updating() throw(::fwTools::Failed)
+{
+    if(this->isVersion2())
+    {
+        ::fwData::Composite::sptr compositeSrc = this->getInOut< ::fwData::Composite >(s_SOURCE_KEY);
+        SLM_ASSERT( s_SOURCE_KEY + " doesn't exist or is not a composite", compositeSrc);
+
+        ::fwData::Object::sptr obj = compositeSrc->at< ::fwData::Object>(m_srcKey);
+
+        SLM_WARN_IF("'" + m_srcKey + "' not found in composite '" + compositeSrc->getID() + "'", obj == nullptr);
+        if (::fwServices::OSR::isRegistered(s_DESTINATION_KEY, ::fwServices::IService::AccessType::OUTPUT,
+                                            this->getSptr()))
+        {
+            this->setOutput(s_DESTINATION_KEY, nullptr);
+        }
+        else if (obj)
+        {
+            this->setOutput(s_DESTINATION_KEY, obj);
+        }
+    }
+    else
+    {
+        ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >();
+        std::shared_ptr< ::fwDataTools::helper::Composite > compositeHelper ( new ::fwDataTools::helper::Composite(
+                                                                                  composite ) );
+
+        for(DestKeyMapType::value_type elt :  m_key2src )
+        {
+            const auto& key    = elt.first;
+            const auto& srcUid = elt.second.first;
+            const auto& srcKey = elt.second.second;
+            SLM_ASSERT( srcUid + " doesn't exist", ::fwTools::fwID::exist(srcUid) );
+            ::fwData::Composite::sptr compositeSrc = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject(
+                                                                                           srcUid ) );
+            SLM_ASSERT("fwData::Composite dynamicCast failed for "+srcUid, compositeSrc);
+
+
+            ::fwData::Composite::const_iterator iter = compositeSrc->find(srcKey);
+
+            SLM_WARN_IF("'" + srcKey + "' not found in composite '" + srcUid + "'",iter == compositeSrc->end());
+            if (iter != compositeSrc->end())
+            {
+                ::fwData::Object::sptr obj = compositeSrc->getContainer()[srcKey];
+
+                if ( composite->find(key) != composite->end() )
+                {
+                    compositeHelper->remove(key);
+                }
+                else
+                {
+                    compositeHelper->add(key, obj);
+                }
+            }
+        }
+        // Notification of message
+        compositeHelper->notify();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SPushObject::updateObjects()
+{
+    bool executable = true;
+    std::string srcUid;
+
+    if(this->isVersion2())
+    {
+        ::fwData::Composite::sptr compositeSrc = this->getInOut< ::fwData::Composite >(s_SOURCE_KEY);
+        SLM_ASSERT( s_SOURCE_KEY + " doesn't exist or is not a composite", compositeSrc);
+
+        executable = (compositeSrc->find(m_srcKey)!= compositeSrc->end());
+        OSLM_TRACE("start check : " << compositeSrc->getID() << "[" << m_srcKey << "] : " <<
+                   (compositeSrc->find(m_srcKey)!= compositeSrc->end()) );
+    }
+    else
+    {
+        for(const SrcKeyMapType::value_type& valElt :  m_srcMap )
+        {
+            srcUid = valElt.first;
+
+            OSLM_ASSERT( srcUid << " doesn't exist", ::fwTools::fwID::exist(srcUid) );
+            ::fwData::Composite::sptr compositeSrc = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject(
+                                                                                           srcUid ) );
+            OSLM_ASSERT("fwData::Composite dynamicCast failed for "<<srcUid, compositeSrc);
+            for(SrcKeyMapType::key_type keyElt :  valElt.second )
+            {
+                executable &= (compositeSrc->find(keyElt)!= compositeSrc->end());
+                OSLM_TRACE("start check : " << srcUid << "[" << keyElt << "] : " <<
+                           (compositeSrc->find(keyElt)!= compositeSrc->end()) );
+            }
+        }
+    }
+    this->::fwGui::IActionSrv::setIsExecutable( executable );
+
+    //TODO managed active mode (objects already present in target composite)
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SPushObject::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_UPDATE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_UPDATE_OBJECTS_SLOT ) );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap SPushObject::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( s_SOURCE_KEY, ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_UPDATE_OBJECTS_SLOT );
+    connections.push( s_SOURCE_KEY, ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_UPDATE_OBJECTS_SLOT );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace action
+
+} // namespace gui
diff --git a/Bundles/core/gui/src/gui/action/SQuit.cpp b/Bundles/core/gui/src/gui/action/SQuit.cpp
new file mode 100644
index 0000000..acd579c
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SQuit.cpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SQuit.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwGui/Application.hpp>
+#include <fwGui/Cursor.hpp>
+
+#include <fwServices/macros.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SQuit, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SQuit::SQuit() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SQuit::~SQuit() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SQuit::configuring() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SQuit::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStarting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SQuit::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStopping();
+}
+
+//-----------------------------------------------------------------------------
+
+void SQuit::info(std::ostream &_sstream )
+{
+    _sstream << "Quit Action" << std::endl;
+}
+
+//-----------------------------------------------------------------------------
+
+void SQuit::updating() throw( ::fwTools::Failed )
+{
+    ::fwGui::Cursor cursor;
+    cursor.setCursor(::fwGui::ICursor::BUSY);
+    ::fwGui::Application::New()->exit(0);
+    cursor.setDefaultCursor();
+}
+
+//-----------------------------------------------------------------------------
+
+}
+}
diff --git a/Bundles/core/gui/src/gui/action/SSignal.cpp b/Bundles/core/gui/src/gui/action/SSignal.cpp
index 178b4aa..435f50a 100644
--- a/Bundles/core/gui/src/gui/action/SSignal.cpp
+++ b/Bundles/core/gui/src/gui/action/SSignal.cpp
@@ -1,40 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/regex.hpp>
+#include "gui/action/SSignal.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
 
-#include <fwTools/fwID.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include <fwRuntime/helper.hpp>
 #include <fwRuntime/Extension.hpp>
+#include <fwRuntime/helper.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwCom/Signal.hxx>
-#include <fwCom/Slots.hpp>
-#include <fwCom/Slots.hxx>
-
-#include <fwGui/dialog/MessageDialog.hpp>
 
-#include "gui/action/SSignal.hpp"
+#include <fwTools/fwID.hpp>
 
 namespace gui
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::gui::action::SSignal , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SSignal, ::fwData::Object );
 
 
-static const ::fwCom::Signals::SignalKeyType TRIGERRED_SIG = "triggered";
-static const ::fwCom::Signals::SignalKeyType CANCELLED_SIG = "cancelled";
+static const ::fwCom::Signals::SignalKeyType TRIGERRED_SIG   = "triggered";
+static const ::fwCom::Signals::SignalKeyType CANCELLED_SIG   = "cancelled";
 static const ::fwCom::Signals::SignalKeyType SET_OBJECT_SLOT = "setObjects";
 
 //-----------------------------------------------------------------------------
@@ -51,11 +46,7 @@ SSignal::SSignal() throw() :
     ::fwCom::HasSlots::m_slots
         ( SET_OBJECT_SLOT, m_slotSetObjects );
 
-#ifdef COM_LOG
-    m_sigTriggered->setID( TRIGERRED_SIG );
-    m_sigCancelled->setID( CANCELLED_SIG );
-    m_slotSetObjects->setID( SET_OBJECT_SLOT );
-#endif
+
 
     this->setWorker( m_associatedWorker );
 }
@@ -63,7 +54,8 @@ SSignal::SSignal() throw() :
 //-----------------------------------------------------------------------------
 
 SSignal::~SSignal() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -95,30 +87,23 @@ void SSignal::info(std::ostream &_sstream )
 
 void SSignal::updating() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC() ;
+    SLM_TRACE_FUNC();
     if (this->confirmAction())
     {
-        fwServicesNotifyMacro(this->getLightID(), m_sigTriggered, (m_objects));
+        m_sigTriggered->asyncEmit(m_objects);
     }
     else
     {
-        fwServicesNotifyMacro(this->getLightID(), m_sigCancelled, (m_objects));
+        m_sigCancelled->asyncEmit(m_objects);
     }
 
 }
 
 //-----------------------------------------------------------------------------
 
-void SSignal::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
 void SSignal::configuring() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC() ;
+    SLM_TRACE_FUNC();
     this->initialize();
 }
 
diff --git a/Bundles/core/gui/src/gui/action/SSlotCaller.cpp b/Bundles/core/gui/src/gui/action/SSlotCaller.cpp
index 4881e59..461a20b 100644
--- a/Bundles/core/gui/src/gui/action/SSlotCaller.cpp
+++ b/Bundles/core/gui/src/gui/action/SSlotCaller.cpp
@@ -1,42 +1,47 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/regex.hpp>
+#include "gui/action/SSlotCaller.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
 
-#include <fwTools/fwID.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 
-#include <fwRuntime/helper.hpp>
 #include <fwRuntime/Extension.hpp>
+#include <fwRuntime/helper.hpp>
 
 #include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
 
-#include <fwGui/dialog/MessageDialog.hpp>
+#include <fwTools/fwID.hpp>
 
-#include "gui/action/SSlotCaller.hpp"
+#include <boost/regex.hpp>
 
 namespace gui
 {
 namespace action
 {
 
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::gui::action::SSlotCaller , ::fwData::Object ) ;
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SSlotCaller, ::fwData::Object );
 
 //-----------------------------------------------------------------------------
 
 SSlotCaller::SSlotCaller() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 SSlotCaller::~SSlotCaller() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -57,7 +62,7 @@ void SSlotCaller::stopping() throw( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SSlotCaller::info(std::ostream &_sstream )
+void SSlotCaller::info(std::ostream& _sstream )
 {
     _sstream << "Starter Action" << std::endl;
 }
@@ -66,17 +71,17 @@ void SSlotCaller::info(std::ostream &_sstream )
 
 void SSlotCaller::updating() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC() ;
+    SLM_TRACE_FUNC();
 
-    BOOST_FOREACH(SlotInfoType info, m_slotInfos)
+    for(SlotInfoType info :  m_slotInfos)
     {
         HasSlotIDType HasSlotId = info.first;
         ::fwCom::Slots::SlotKeyType slotKey = info.second;
 
         if (::fwTools::fwID::exist(HasSlotId))
         {
-            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(HasSlotId);
-            ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+            ::fwTools::Object::sptr obj      = ::fwTools::fwID::getObject(HasSlotId);
+            ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
             SLM_ASSERT("Object with id " << HasSlotId << " is not a HasSlots", hasSlots);
 
             ::fwCom::SlotBase::sptr slot = hasSlots->slot(slotKey);
@@ -88,18 +93,13 @@ void SSlotCaller::updating() throw( ::fwTools::Failed )
 
 //-----------------------------------------------------------------------------
 
-void SSlotCaller::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
 void SSlotCaller::configuring() throw( ::fwTools::Failed )
 {
-    SLM_TRACE_FUNC() ;
+    SLM_TRACE_FUNC();
     this->initialize();
 
+    OSLM_ASSERT("Missing slots configuration element in " << this->getID(),
+                m_configuration->hasConfigurationElement("slots"));
     ConfigurationType cfg = m_configuration->findConfigurationElement("slots");
 
     ::fwRuntime::ConfigurationElementContainer slotCfgs = cfg->findAllConfigurationElement("slot");
@@ -108,7 +108,7 @@ void SSlotCaller::configuring() throw( ::fwTools::Failed )
     ::boost::smatch match;
     std::string src, uid, key;
 
-    BOOST_FOREACH(ConfigurationType elem,  slotCfgs.getElements())
+    for(ConfigurationType elem :   slotCfgs.getElements())
     {
         src = elem->getValue();
         if( ::boost::regex_match(src, match, re) )
diff --git a/Bundles/core/gui/src/gui/action/SStarter.cpp b/Bundles/core/gui/src/gui/action/SStarter.cpp
new file mode 100644
index 0000000..9b65e76
--- /dev/null
+++ b/Bundles/core/gui/src/gui/action/SStarter.cpp
@@ -0,0 +1,231 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/action/SStarter.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwGui/dialog/MessageDialog.hpp>
+
+#include <fwRuntime/Extension.hpp>
+#include <fwRuntime/helper.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
+
+#include <fwTools/fwID.hpp>
+
+namespace gui
+{
+namespace action
+{
+
+fwServicesRegisterMacro( ::fwGui::IActionSrv, ::gui::action::SStarter, ::fwData::Object );
+
+//-----------------------------------------------------------------------------
+
+SStarter::SStarter() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SStarter::~SStarter() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SStarter::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->actionServiceStarting();
+}
+
+//-----------------------------------------------------------------------------
+
+void SStarter::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    for( VectPairIDActionType::value_type serviceUid :  m_uuidServices)
+    {
+        bool srv_exists = ::fwTools::fwID::exist(serviceUid.first );
+        if (srv_exists &&  (m_idStartedSrvSet.find(serviceUid.first) != m_idStartedSrvSet.end()) )
+        {
+            ::fwServices::IService::sptr service = ::fwServices::get( serviceUid.first );
+            if (service->isStarted())
+            {
+                service->stop();
+            }
+        }
+    }
+
+    this->actionServiceStopping();
+}
+
+//-----------------------------------------------------------------------------
+
+void SStarter::info(std::ostream &_sstream )
+{
+    _sstream << "Starter Action" << std::endl;
+}
+
+//-----------------------------------------------------------------------------
+
+void SStarter::updating() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+
+    for(size_t i = 0; i < m_uuidServices.size(); i++)
+    {
+        ActionType action = m_uuidServices.at(i).second;
+        IDSrvType uid     = m_uuidServices.at(i).first;
+        bool srv_exists   = ::fwTools::fwID::exist(uid);
+
+        // Manage special action
+        if ( action == START_IF_EXISTS )
+        {
+            if ( srv_exists )
+            {
+                action = START;
+            }
+            else
+            {
+                action = DO_NOTHING;
+            }
+        }
+        else if( action == STOP_IF_EXISTS )
+        {
+            if ( srv_exists )
+            {
+                action = STOP;
+            }
+            else
+            {
+                action = DO_NOTHING;
+            }
+        }
+
+        if( action != DO_NOTHING)
+        {
+            ::fwGui::LockAction lock(this->getSptr());
+
+            ::fwServices::IService::sptr service = ::fwServices::get( uid );
+            SLM_ASSERT("service not found", service);
+            switch ( action )
+            {
+                case START_OR_STOP:
+                {
+                    if(service->isStopped())
+                    {
+                        service->start();
+                        service->update();
+                        m_idStartedSrvSet.insert(uid);
+                    }
+                    else
+                    {
+                        service->stop();
+                        m_idStartedSrvSet.erase(uid);
+                    }
+                    break;
+                }
+                case START:
+                {
+                    if(service->isStopped())
+                    {
+                        service->start();
+                        m_idStartedSrvSet.insert(uid);
+                    }
+                    else
+                    {
+                        OSLM_WARN("Service " << service->getID() << " is not stopped");
+                    }
+                    service->update();
+                    break;
+                }
+                case STOP:
+                {
+                    if(service->isStarted())
+                    {
+                        service->stop();
+                    }
+                    else
+                    {
+                        OSLM_WARN("Service " << service->getID() << " is not started");
+                    }
+                    break;
+                }
+                default:
+                {
+                    OSLM_FATAL("There is no action ("<< action
+                                                     <<") type corresponding to the action id requested for " << uid <<
+                               ".");
+                    break;
+                }
+            }
+        }
+        else
+        {
+            ::fwGui::dialog::MessageDialog::showMessageDialog(
+                "Service unavailable",
+                "The service is unavailable.",
+                ::fwGui::dialog::IMessageDialog::WARNING);
+
+            OSLM_INFO("Do nothing for Service " << m_uuidServices.at(i).first);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SStarter::configuring() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+
+    for(ConfigurationType actionCfg :  m_configuration->getElements() )
+    {
+        OSLM_INFO( "SStarter " << actionCfg->getName());
+
+        std::string actionType = actionCfg->getName();
+        ActionType action;
+        if ( actionType == "start" )
+        {
+            action = START;
+        }
+        else if ( actionType == "stop" )
+        {
+            action = STOP;
+        }
+        else if ( actionType == "start_or_stop" )
+        {
+            action = START_OR_STOP;
+        }
+        else if ( actionType == "start_if_exists" )
+        {
+            action = START_IF_EXISTS;
+        }
+        else if ( actionType == "stop_if_exists" )
+        {
+            action = STOP_IF_EXISTS;
+        }
+        else
+        {
+            OSLM_WARN("The \"actionType\":" << actionType <<" is not managed by SStarter");
+            continue;
+        }
+        SLM_ASSERT("Attribute uid missing", actionCfg->hasAttribute("uid"));
+        IDSrvType uuid = actionCfg->getExistingAttributeValue("uid");
+
+        m_uuidServices.push_back( std::make_pair(uuid, action) );
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace action
+} // namespace gui
+
diff --git a/Bundles/core/gui/src/gui/action/StarterActionService.cpp b/Bundles/core/gui/src/gui/action/StarterActionService.cpp
deleted file mode 100644
index b775805..0000000
--- a/Bundles/core/gui/src/gui/action/StarterActionService.cpp
+++ /dev/null
@@ -1,221 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwRuntime/helper.hpp>
-#include <fwRuntime/Extension.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-
-#include "gui/action/StarterActionService.hpp"
-
-namespace gui
-{
-namespace action
-{
-
-fwServicesRegisterMacro( ::fwGui::IActionSrv , ::gui::action::StarterActionService , ::fwData::Object ) ;
-
-//-----------------------------------------------------------------------------
-
-StarterActionService::StarterActionService() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-StarterActionService::~StarterActionService() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void StarterActionService::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->actionServiceStarting();
-}
-
-//-----------------------------------------------------------------------------
-
-void StarterActionService::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    BOOST_FOREACH( VectPairIDActionType::value_type serviceUid, m_uuidServices)
-    {
-        bool srv_exists = ::fwTools::fwID::exist(serviceUid.first );
-        if (srv_exists &&  (m_idStartedSrvSet.find(serviceUid.first) != m_idStartedSrvSet.end()) )
-        {
-            ::fwServices::IService::sptr service = ::fwServices::get( serviceUid.first ) ;
-            if (service->isStarted())
-            {
-                service->stop();
-            }
-        }
-    }
-
-    this->actionServiceStopping();
-}
-
-//-----------------------------------------------------------------------------
-
-void StarterActionService::info(std::ostream &_sstream )
-{
-    _sstream << "Starter Action" << std::endl;
-}
-
-//-----------------------------------------------------------------------------
-
-void StarterActionService::updating() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-
-    for(size_t i = 0; i < m_uuidServices.size(); i++)
-    {
-        ActionType action =  m_uuidServices.at(i).second;
-        IDSrvType uid =  m_uuidServices.at(i).first;
-        bool srv_exists = ::fwTools::fwID::exist(uid  );
-
-        // Manage special action
-        if ( action == START_IF_EXISTS )
-        {
-            if ( srv_exists )
-            {
-                action = START;
-            }
-            else
-            {
-                action = DO_NOTHING;
-            }
-        }
-        else if( action == STOP_IF_EXISTS )
-        {
-            if ( srv_exists )
-            {
-                action = STOP;
-            }
-            else
-            {
-                action = DO_NOTHING;
-            }
-        }
-
-        if( action != DO_NOTHING)
-        {
-            ::fwGui::LockAction lock(this->getSptr());
-
-            ::fwServices::IService::sptr service = ::fwServices::get( uid ) ;
-            SLM_ASSERT("service not found", service);
-            switch ( action )
-            {
-            case START_OR_STOP:
-            {
-                if(service->isStopped())
-                {
-                    service->start();
-                    service->update();
-                    m_idStartedSrvSet.insert(uid);
-                }
-                else
-                {
-                    service->stop();
-                    m_idStartedSrvSet.erase(uid);
-                }
-                break;
-            }
-            case START :
-            {
-                if(service->isStopped())
-                {
-                    service->start();
-                    m_idStartedSrvSet.insert(uid);
-                }
-                else
-                {
-                    OSLM_WARN("Service " << service->getID() << " is not stopped");
-                }
-                service->update();
-                break;
-            }
-            case STOP :
-            {
-                if(service->isStarted())
-                {
-                    service->stop();
-                }
-                else
-                {
-                    OSLM_WARN("Service " << service->getID() << " is not started");
-                }
-                break;
-            }
-            default :
-            {
-                SLM_FATAL("Sorry, this action type is not managed");
-                break;
-            }
-            }
-        }
-        else
-        {
-            ::fwGui::dialog::MessageDialog::showMessageDialog(
-                    "Service unavailable",
-                    "Sorry, the service is unavailable.",
-                    ::fwGui::dialog::IMessageDialog::WARNING);
-
-            OSLM_INFO("Do nothing for Service " << m_uuidServices.at(i).first);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void StarterActionService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void StarterActionService::configuring() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC() ;
-    this->initialize();
-
-    BOOST_FOREACH(ConfigurationType actionCfg, m_configuration->getElements() )
-    {
-        OSLM_INFO( "StarterActionService "  << actionCfg->getName());
-
-        std::string actionType =  actionCfg->getName();
-        ActionType action;
-        if ( actionType == "start" )                { action = START; }
-        else if ( actionType == "stop" )            { action = STOP; }
-        else if ( actionType == "start_or_stop" )   { action = START_OR_STOP; }
-        else if ( actionType == "start_if_exists" ) { action = START_IF_EXISTS; }
-        else if ( actionType == "stop_if_exists" )  { action = STOP_IF_EXISTS; }
-        else
-        {
-            OSLM_WARN("Sorry this type of \"actionType\":" << actionType <<" is not managed by StarterActionService");
-            continue;
-        }
-        SLM_ASSERT("Attribute uid missing", actionCfg->hasAttribute("uid")) ;
-        IDSrvType uuid = actionCfg->getExistingAttributeValue("uid") ;
-
-        m_uuidServices.push_back( std::make_pair(uuid, action) );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace action
-} // namespace gui
-
diff --git a/Bundles/core/gui/src/gui/aspect/DefaultMenuBarSrv.cpp b/Bundles/core/gui/src/gui/aspect/DefaultMenuBarSrv.cpp
deleted file mode 100644
index 6f71c82..0000000
--- a/Bundles/core/gui/src/gui/aspect/DefaultMenuBarSrv.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwRuntime/Runtime.hpp>
-#include <fwRuntime/helper.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include "gui/aspect/DefaultMenuBarSrv.hpp"
-
-
-fwServicesRegisterMacro( ::fwGui::IMenuBarSrv , ::gui::aspect::DefaultMenuBarSrv , ::fwData::Object );
-
-namespace gui
-{
-
-namespace aspect
-{
-
-
-//-----------------------------------------------------------------------------
-
-DefaultMenuBarSrv::DefaultMenuBarSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-DefaultMenuBarSrv::~DefaultMenuBarSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuBarSrv::configuring() throw( ::fwTools::Failed )
-{
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuBarSrv::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->create();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuBarSrv::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuBarSrv::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuBarSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-}
-
-}
diff --git a/Bundles/core/gui/src/gui/aspect/DefaultMenuSrv.cpp b/Bundles/core/gui/src/gui/aspect/DefaultMenuSrv.cpp
deleted file mode 100644
index bd28279..0000000
--- a/Bundles/core/gui/src/gui/aspect/DefaultMenuSrv.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwRuntime/Runtime.hpp>
-#include <fwRuntime/helper.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include "gui/aspect/DefaultMenuSrv.hpp"
-
-
-fwServicesRegisterMacro( ::fwGui::IMenuSrv , ::gui::aspect::DefaultMenuSrv , ::fwData::Object );
-
-namespace gui
-{
-
-namespace aspect
-{
-
-//-----------------------------------------------------------------------------
-
-DefaultMenuSrv::DefaultMenuSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-DefaultMenuSrv::~DefaultMenuSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuSrv::configuring() throw( ::fwTools::Failed )
-{
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuSrv::starting() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->create();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuSrv::stopping() throw( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuSrv::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultMenuSrv::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-}
-
-}
diff --git a/Bundles/core/gui/src/gui/aspect/DefaultToolBarSrv.cpp b/Bundles/core/gui/src/gui/aspect/DefaultToolBarSrv.cpp
deleted file mode 100644
index c37e8fc..0000000
--- a/Bundles/core/gui/src/gui/aspect/DefaultToolBarSrv.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Object.hpp>
-#include <fwServices/Base.hpp>
-
-#include "gui/aspect/DefaultToolBarSrv.hpp"
-
-fwServicesRegisterMacro( ::fwGui::IToolBarSrv , ::gui::aspect::DefaultToolBarSrv , ::fwData::Object ) ;
-
-namespace gui
-{
-
-namespace aspect
-{
-
-DefaultToolBarSrv::DefaultToolBarSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-DefaultToolBarSrv::~DefaultToolBarSrv() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DefaultToolBarSrv::starting()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->create();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultToolBarSrv::stopping()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultToolBarSrv::configuring()  throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultToolBarSrv::updating() throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultToolBarSrv::receiving(::fwServices::ObjectMsg::csptr _msg) throw ( ::fwTools::Failed )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultToolBarSrv::info( std::ostream &_sstream )
-{
-    SLM_TRACE_FUNC();
-}
-
-}
-
-}
diff --git a/Bundles/core/gui/src/gui/aspect/SDefaultMenu.cpp b/Bundles/core/gui/src/gui/aspect/SDefaultMenu.cpp
new file mode 100644
index 0000000..bcb4525
--- /dev/null
+++ b/Bundles/core/gui/src/gui/aspect/SDefaultMenu.cpp
@@ -0,0 +1,69 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/aspect/SDefaultMenu.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
+
+#include <fwServices/macros.hpp>
+
+fwServicesRegisterMacro( ::fwGui::IMenuSrv, ::gui::aspect::SDefaultMenu, ::fwData::Object );
+
+namespace gui
+{
+
+namespace aspect
+{
+
+//-----------------------------------------------------------------------------
+
+SDefaultMenu::SDefaultMenu() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SDefaultMenu::~SDefaultMenu() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenu::configuring() throw( ::fwTools::Failed )
+{
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenu::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->create();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenu::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenu::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+}
+
+}
diff --git a/Bundles/core/gui/src/gui/aspect/SDefaultMenuBar.cpp b/Bundles/core/gui/src/gui/aspect/SDefaultMenuBar.cpp
new file mode 100644
index 0000000..64d73b4
--- /dev/null
+++ b/Bundles/core/gui/src/gui/aspect/SDefaultMenuBar.cpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/aspect/SDefaultMenuBar.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+fwServicesRegisterMacro( ::fwGui::IMenuBarSrv, ::gui::aspect::SDefaultMenuBar, ::fwData::Object );
+
+namespace gui
+{
+
+namespace aspect
+{
+
+
+//-----------------------------------------------------------------------------
+
+SDefaultMenuBar::SDefaultMenuBar() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SDefaultMenuBar::~SDefaultMenuBar() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenuBar::configuring() throw( ::fwTools::Failed )
+{
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenuBar::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->create();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenuBar::stopping() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultMenuBar::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+}
+
+}
diff --git a/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp b/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp
new file mode 100644
index 0000000..42445e0
--- /dev/null
+++ b/Bundles/core/gui/src/gui/aspect/SDefaultToolBar.cpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/aspect/SDefaultToolBar.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <fwServices/macros.hpp>
+
+
+fwServicesRegisterMacro( ::fwGui::IToolBarSrv, ::gui::aspect::SDefaultToolBar, ::fwData::Object );
+
+namespace gui
+{
+
+namespace aspect
+{
+
+SDefaultToolBar::SDefaultToolBar() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SDefaultToolBar::~SDefaultToolBar() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultToolBar::starting()  throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->create();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultToolBar::stopping()  throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultToolBar::configuring()  throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultToolBar::updating() throw ( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultToolBar::info( std::ostream &_sstream )
+{
+    SLM_TRACE_FUNC();
+}
+
+}
+
+}
diff --git a/Bundles/core/gui/src/gui/editor/IDialogEditor.cpp b/Bundles/core/gui/src/gui/editor/IDialogEditor.cpp
index 076bca9..5451fbe 100644
--- a/Bundles/core/gui/src/gui/editor/IDialogEditor.cpp
+++ b/Bundles/core/gui/src/gui/editor/IDialogEditor.cpp
@@ -1,12 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "gui/editor/IDialogEditor.hpp"
+
 #include <fwCore/base.hpp>
 
-#include "gui/editor/IDialogEditor.hpp"
 
 namespace gui
 {
@@ -15,12 +16,14 @@ namespace editor
 
 
 IDialogEditor::IDialogEditor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IDialogEditor::~IDialogEditor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/core/gui/src/gui/editor/IEditor.cpp b/Bundles/core/gui/src/gui/editor/IEditor.cpp
index 94dd34e..983dd71 100644
--- a/Bundles/core/gui/src/gui/editor/IEditor.cpp
+++ b/Bundles/core/gui/src/gui/editor/IEditor.cpp
@@ -1,12 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "gui/editor/IEditor.hpp"
+
 #include <fwCore/base.hpp>
 
-#include "gui/editor/IEditor.hpp"
 
 namespace gui
 {
@@ -15,12 +16,14 @@ namespace editor
 
 
 IEditor::IEditor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IEditor::~IEditor() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/core/gui/src/gui/editor/SJobBar.cpp b/Bundles/core/gui/src/gui/editor/SJobBar.cpp
new file mode 100644
index 0000000..9889211
--- /dev/null
+++ b/Bundles/core/gui/src/gui/editor/SJobBar.cpp
@@ -0,0 +1,128 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/editor/SJobBar.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwGui/dialog/ProgressDialog.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwThread/Worker.hxx>
+
+namespace gui
+{
+namespace editor
+{
+
+fwServicesRegisterMacro( ::gui::editor::IDialogEditor, ::gui::editor::SJobBar, ::fwData::Object );
+
+static const ::fwCom::Slots::SlotKeyType SHOW_JOB_SLOT      = "showJob";
+static const ::fwCom::Signals::SignalKeyType STARTED_SIGNAL = "started";
+static const ::fwCom::Signals::SignalKeyType ENDED_SIGNAL   = "ended";
+
+//-----------------------------------------------------------------------------
+
+SJobBar::SJobBar() throw()
+{
+    newSlot( SHOW_JOB_SLOT, &SJobBar::showJob, this );
+
+    m_sigStarted = newSignal< StartedSignalType >( STARTED_SIGNAL );
+    m_sigEnded   = newSignal< EndedSignalType >( ENDED_SIGNAL );
+}
+
+//-----------------------------------------------------------------------------
+
+SJobBar::~SJobBar() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SJobBar::starting() throw( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SJobBar::stopping() throw( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SJobBar::info(std::ostream &_sstream )
+{
+    _sstream << "Starter editor" << std::endl;
+}
+
+//-----------------------------------------------------------------------------
+
+void SJobBar::updating() throw( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SJobBar::configuring() throw( ::fwTools::Failed )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SJobBar::showJob( ::fwJobs::IJob::sptr iJob )
+{
+    ::fwGui::dialog::ProgressDialog::sptr progressDialog = ::fwGui::dialog::ProgressDialog::New();
+    progressDialog->setTitle(iJob->getName());
+
+    if(!iJob->isCancelable())
+    {
+        progressDialog->hideCancelButton();
+    }
+
+    iJob->addDoneWorkHook( [ = ](::fwJobs::IJob& job, std::uint64_t oldDoneWork)
+            {
+                std::string msg = (job.getLogs().empty()) ? "" : job.getLogs().back();
+                (*progressDialog)( float(job.getDoneWorkUnits())/job.getTotalWorkUnits(), msg );
+            });
+
+    iJob->addStateHook( [ = ](::fwJobs::IJob::State state)
+            {
+                if(state == ::fwJobs::IJob::CANCELED || state == ::fwJobs::IJob::FINISHED )
+                {
+                    m_sigEnded->emit();
+                    m_associatedWorker->postTask< void >( [ = ]
+                    {
+                        m_progressDialogs.erase(progressDialog);
+                    });
+                }
+                else if( state == ::fwJobs::IJob::RUNNING)
+                {
+                    m_sigStarted->emit();
+                }
+            });
+
+    ::fwJobs::IJob::wptr wIJob = iJob;
+    progressDialog->setCancelCallback( [ = ]
+            {
+                ::fwJobs::IJob::sptr job = wIJob.lock();
+                if(job)
+                {
+                    job->cancel();
+                }
+            });
+
+    m_progressDialogs.insert(progressDialog);
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace editor
+} // namespace gui
+
diff --git a/Bundles/core/gui/src/gui/frame/DefaultFrame.cpp b/Bundles/core/gui/src/gui/frame/DefaultFrame.cpp
deleted file mode 100644
index fad47c3..0000000
--- a/Bundles/core/gui/src/gui/frame/DefaultFrame.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-
-#include "gui/frame/DefaultFrame.hpp"
-
-namespace gui
-{
-namespace frame
-{
-
-fwServicesRegisterMacro( ::fwGui::IFrameSrv , ::gui::frame::DefaultFrame , ::fwData::Object ) ;
-
-
-DefaultFrame::DefaultFrame() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-DefaultFrame::~DefaultFrame() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DefaultFrame::configuring() throw( ::fwTools::Failed )
-{
-    SLM_ASSERT( "<service> tag is required.", m_configuration->getName() == "service" );
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultFrame::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->create();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultFrame::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultFrame::info(std::ostream &_sstream )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultFrame::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultFrame::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-
-//-----------------------------------------------------------------------------
-
-}
-}
-
diff --git a/Bundles/core/gui/src/gui/frame/SDefaultFrame.cpp b/Bundles/core/gui/src/gui/frame/SDefaultFrame.cpp
new file mode 100644
index 0000000..c7fcb3d
--- /dev/null
+++ b/Bundles/core/gui/src/gui/frame/SDefaultFrame.cpp
@@ -0,0 +1,75 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/frame/SDefaultFrame.hpp"
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+
+namespace gui
+{
+namespace frame
+{
+
+fwServicesRegisterMacro( ::fwGui::IFrameSrv, ::gui::frame::SDefaultFrame, ::fwData::Object );
+
+
+SDefaultFrame::SDefaultFrame() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SDefaultFrame::~SDefaultFrame() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultFrame::configuring() throw( ::fwTools::Failed )
+{
+    SLM_ASSERT( "<service> tag is required.", m_configuration->getName() == "service" );
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultFrame::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->create();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultFrame::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultFrame::info(std::ostream &_sstream )
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultFrame::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+
+//-----------------------------------------------------------------------------
+
+}
+}
+
diff --git a/Bundles/core/gui/src/gui/view/DefaultView.cpp b/Bundles/core/gui/src/gui/view/DefaultView.cpp
deleted file mode 100644
index beb1ac1..0000000
--- a/Bundles/core/gui/src/gui/view/DefaultView.cpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwTools/fwID.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwData/Object.hpp>
-
-#include "gui/view/DefaultView.hpp"
-
-namespace gui
-{
-namespace view
-{
-
-fwServicesRegisterMacro( ::gui::view::IView , ::gui::view::DefaultView , ::fwData::Object ) ;
-
-
-DefaultView::DefaultView() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-DefaultView::~DefaultView() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void DefaultView::configuring() throw( ::fwTools::Failed )
-{
-    this->initialize();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultView::starting() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->create();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultView::stopping() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    this->destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultView::info(std::ostream &_sstream )
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultView::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-void DefaultView::updating() throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-}
-
-//-----------------------------------------------------------------------------
-
-}
-}
-
diff --git a/Bundles/core/gui/src/gui/view/IView.cpp b/Bundles/core/gui/src/gui/view/IView.cpp
index 3505a98..b7523fd 100644
--- a/Bundles/core/gui/src/gui/view/IView.cpp
+++ b/Bundles/core/gui/src/gui/view/IView.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,12 +12,14 @@ namespace view
 {
 
 IView::IView() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IView::~IView() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/core/gui/src/gui/view/SDefaultView.cpp b/Bundles/core/gui/src/gui/view/SDefaultView.cpp
new file mode 100644
index 0000000..2459f37
--- /dev/null
+++ b/Bundles/core/gui/src/gui/view/SDefaultView.cpp
@@ -0,0 +1,75 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "gui/view/SDefaultView.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwTools/fwID.hpp>
+
+
+namespace gui
+{
+namespace view
+{
+
+fwServicesRegisterMacro( ::gui::view::IView, ::gui::view::SDefaultView, ::fwData::Object );
+
+
+SDefaultView::SDefaultView() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SDefaultView::~SDefaultView() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultView::configuring() throw( ::fwTools::Failed )
+{
+    this->initialize();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultView::starting() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->create();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultView::stopping() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    this->destroy();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultView::info(std::ostream &_sstream )
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+void SDefaultView::updating() throw(::fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+}
+}
+
diff --git a/Bundles/core/io/CMakeLists.txt b/Bundles/core/io/CMakeLists.txt
index 58de12b..1c29206 100644
--- a/Bundles/core/io/CMakeLists.txt
+++ b/Bundles/core/io/CMakeLists.txt
@@ -1,11 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-    fwServices
-)
-
-find_package (Boost REQUIRED)
-
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
 
diff --git a/Bundles/core/io/COPYING b/Bundles/core/io/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/io/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/io/COPYING.LESSER b/Bundles/core/io/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/io/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/io/Properties.cmake b/Bundles/core/io/Properties.cmake
index 344f151..3328baf 100644
--- a/Bundles/core/io/Properties.cmake
+++ b/Bundles/core/io/Properties.cmake
@@ -2,6 +2,5 @@
 set( NAME io )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCore fwRuntime fwServices )
+set( DEPENDENCIES fwCom fwCore fwTools fwRuntime fwServices )
 set( REQUIREMENTS  )
-
diff --git a/Bundles/core/io/bin/build.options b/Bundles/core/io/bin/build.options
deleted file mode 100644
index 95af755..0000000
--- a/Bundles/core/io/bin/build.options
+++ /dev/null
@@ -1,5 +0,0 @@
-TYPE    = 'bundle'
-LIB     = ['fwServices_0-1','fwCore_0-1','fwRuntime_0-3','fwTools_0-1']
-USE     = ['boost']
-VERSION = '0-1'
-
diff --git a/Bundles/core/io/include/io/IReader.hpp b/Bundles/core/io/include/io/IReader.hpp
index 0871832..a99af27 100644
--- a/Bundles/core/io/include/io/IReader.hpp
+++ b/Bundles/core/io/include/io/IReader.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IO_IREADER_HPP_
-#define _IO_IREADER_HPP_
+#ifndef __IO_IREADER_HPP__
+#define __IO_IREADER_HPP__
 
 #include <boost/filesystem/path.hpp>
 
@@ -32,8 +32,8 @@ namespace io
 class IO_CLASS_API IReader : public fwServices::IService
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (IReader)(::fwServices::IService) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (IReader)(::fwServices::IService) );
 
     /**
      * @name    Specific service methods for reading
@@ -51,7 +51,7 @@ public :
     /**
      * @brief   returns  (filename) extension
      */
-    IO_API virtual std::vector< std::string > getSupportedExtensions() ;
+    IO_API virtual std::vector< std::string > getSupportedExtensions();
 
     /**
      * @brief   returns  the title of selector dialog box
@@ -125,9 +125,9 @@ public :
 
 protected:
 
-    IO_API IReader() throw() ;
+    IO_API IReader() throw();
 
-    IO_API virtual ~IReader() throw() ;
+    IO_API virtual ~IReader() throw();
 
     /**
      * @brief This method proposes to parse xml configuration to retrieve
@@ -138,31 +138,38 @@ protected:
      * else you must use this generic approach.
      *
      * Sample configuration for a file:
-     * @verbatim
-     <service ... >
+     * @code{.xml}
+       <service ... >
         <file>/home/user/myFile.jpg</file>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * Sample configuration for many files:
-     * @verbatim
-     <service ... >
+     * @code{.xml}
+       <service ... >
         <file>/home/user/myFile01.jpg</file>
         <file>/home/user/myFile02.jpg</file>
         <file>/home/user/myFile03.jpg</file>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * Sample configuration for a folder:
-     * @verbatim
-     <service ... >
+     * @code{.xml}
+       <service ... >
         <folder>/home/user/myFolder</folder>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      */
     IO_API virtual void configuring() throw (fwTools::Failed);
 
 
 private:
 
+    /// Slot to read folder
+    void readFolder(::boost::filesystem::path path);
+    /// Slot to read file
+    void readFile(::boost::filesystem::path path);
+    /// Slot to read files
+    void readFiles(::io::LocationsType files);
+
     /// Value to stock file or folder paths
     ::io::LocationsType m_locations;
 };
@@ -170,4 +177,4 @@ private:
 }
 
 
-#endif /*_IO_IREADER_HPP_*/
+#endif /*__IO_IREADER_HPP__*/
diff --git a/Bundles/core/io/include/io/IWriter.hpp b/Bundles/core/io/include/io/IWriter.hpp
index 44e2e7c..9242a7e 100644
--- a/Bundles/core/io/include/io/IWriter.hpp
+++ b/Bundles/core/io/include/io/IWriter.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IO_IWRITER_HPP_
-#define _IO_IWRITER_HPP_
+#ifndef __IO_IWRITER_HPP__
+#define __IO_IWRITER_HPP__
 
 #include <boost/filesystem/path.hpp>
 
@@ -31,8 +31,8 @@ namespace io
 class IO_CLASS_API IWriter : public fwServices::IService
 {
 
-public :
-    fwCoreServiceClassDefinitionsMacro ( (IWriter)(::fwServices::IService) ) ;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (IWriter)(::fwServices::IService) );
 
     /**
      * @brief Configure the image path (by default does nothing).
@@ -40,7 +40,7 @@ public :
      * This method is used to find
      * the file path  using a file selector.
      */
-    IO_API virtual void configureWithIHM() = 0 ;
+    IO_API virtual void configureWithIHM() = 0;
 
     /**
      * @brief This method must be implemented by concrete service writers
@@ -107,9 +107,9 @@ public :
 
 protected:
 
-    IO_API IWriter() throw() ;
+    IO_API IWriter() throw();
 
-    IO_API virtual ~IWriter() throw() ;
+    IO_API virtual ~IWriter() throw();
 
     /**
      * @brief This method proposes to parse xml configuration to retrieve
@@ -120,25 +120,25 @@ protected:
      * else you must use this generic approach.
      *
      * Sample configuration for a file:
-     * @verbatim
-     <service ... >
+     * @code{.xml}
+       <service ... >
         <file>/home/user/myFile.jpg<file/>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * Sample configuration for many files:
-     * @verbatim
-     <service ... >
+     * @code{.xml}
+       <service ... >
         <file>/home/user/myFile01.jpg<file/>
         <file>/home/user/myFile02.jpg<file/>
         <file>/home/user/myFile03.jpg<file/>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      * Sample configuration for a folder:
-     * @verbatim
-     <service ... >
+     * @code{.xml}
+       <service ... >
         <folder>/home/user/myFolder<folder/>
-     </service>
-     @endverbatim
+       </service>
+       @endcode
      */
     IO_API virtual void configuring() throw (fwTools::Failed);
 
@@ -151,4 +151,4 @@ private:
 }
 
 
-#endif // _IO_IWRITER_HPP_
+#endif // __IO_IWRITER_HPP__
diff --git a/Bundles/core/io/include/io/Namespace.hpp b/Bundles/core/io/include/io/Namespace.hpp
index 923526a..cee905f 100644
--- a/Bundles/core/io/include/io/Namespace.hpp
+++ b/Bundles/core/io/include/io/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef IONAMESPACE_HPP_
-#define IONAMESPACE_HPP_
+#ifndef __IO_NAMESPACE_HPP__
+#define __IO_NAMESPACE_HPP__
 
 /**
  * @brief     The namespace io contains the base interface for reader and writer services.
  * @namespace io
- * 
+ *
  * @date      2009-2010.
  *
  */
@@ -18,4 +18,4 @@ namespace io
 {
 
 }
-#endif /* IONAMESPACE_HPP_ */
+#endif /* __IO_NAMESPACE_HPP__ */
diff --git a/Bundles/core/io/include/io/Plugin.hpp b/Bundles/core/io/include/io/Plugin.hpp
index f1e6397..43f821a 100644
--- a/Bundles/core/io/include/io/Plugin.hpp
+++ b/Bundles/core/io/include/io/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IO_PLUGIN_HPP_
-#define _IO_PLUGIN_HPP_
+#ifndef __IO_PLUGIN_HPP__
+#define __IO_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -41,4 +41,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace io
 
-#endif //_IO_PLUGIN_HPP_
+#endif //__IO_PLUGIN_HPP__
diff --git a/Bundles/core/io/include/io/config.hpp b/Bundles/core/io/include/io/config.hpp
deleted file mode 100644
index 7f52bd3..0000000
--- a/Bundles/core/io/include/io/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _IO_CONFIG_HPP_
-#define _IO_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef IO_EXPORTS
-    #define IO_API __declspec(dllexport)
-    #else
-    #define IO_API __declspec(dllimport)
-    #endif
-
-    #define IO_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef IO_EXPORTS
-    #define IO_API __attribute__ ((visibility("default")))
-    #define IO_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define IO_API __attribute__ ((visibility("hidden")))
-    #define IO_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define IO_API
-    #define IO_CLASS_API
-
-#endif
-
-#endif //_IO_CONFIG_HPP_
diff --git a/Bundles/core/io/include/io/ioTypes.hpp b/Bundles/core/io/include/io/ioTypes.hpp
index 53beb47..3cd25d3 100644
--- a/Bundles/core/io/include/io/ioTypes.hpp
+++ b/Bundles/core/io/include/io/ioTypes.hpp
@@ -1,28 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _IO_IOTYPES_HPP_
-#define _IO_IOTYPES_HPP_
+#ifndef __IO_IOTYPES_HPP__
+#define __IO_IOTYPES_HPP__
+
+#include "io/config.hpp"
 
 #include <boost/filesystem/path.hpp>
 
 namespace io
 {
-    //! IOPathType defines different type of paths used by service readers/writers
-    typedef enum
-    {
-        FILE   = 1 << 0, /*!< io service can manage file and cannot manage a list of file*/
-        FILES  = 1 << 1, /*!< io service can manage a list of file ()*/
-        FOLDER = 1 << 2, /*!< io service can manage folder*/
-        TYPE_NOT_DEFINED = 1 << 3, /*!< io service not used path parameter to works */
-    } IOPathType;
+//! IOPathType defines different type of paths used by service readers/writers
+typedef enum
+{
+    FILE             = (1 << 0),  /*!< io service can manage file and cannot manage a list of file*/
+    FILES            = (1 << 1),  /*!< io service can manage a list of file ()*/
+    FOLDER           = (1 << 2),  /*!< io service can manage folder*/
+    TYPE_NOT_DEFINED = (1 << 3),  /*!< io service not used path parameter to works */
+} IOPathType;
+
+/// List of paths managed by io services
+typedef std::vector< ::boost::filesystem::path > LocationsType;
+
+IO_API extern const std::string s_DATA_KEY;
 
-    /// List of paths managed by io services
-    typedef std::vector< ::boost::filesystem::path > LocationsType;
-}
+} // namespace io
 
 
-#endif /* _IO_IOTYPES_HPP_ */
+#endif /* __IO_IOTYPES_HPP__ */
diff --git a/Bundles/core/io/rc/locale/en/LC_MESSAGES/io.po b/Bundles/core/io/rc/locale/en/LC_MESSAGES/io.po
deleted file mode 100644
index 66ac9fe..0000000
--- a/Bundles/core/io/rc/locale/en/LC_MESSAGES/io.po
+++ /dev/null
@@ -1,102 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 13:59+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: C:/Dev/Bundles/ui/src/ui/Frame.cpp:38
-msgid "/Frame"
-msgstr ""
-
-#. /< the path in the user configuration for frtame settings
-#: C:/Dev/Bundles/ui/src/ui/Frame.cpp:39
-msgid "Location"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ActionManager.cpp:34
-msgid "/Shortcuts"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ActionManager.cpp:135
-msgid " "
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ActionManager.cpp:135
-#: C:/Dev/Bundles/ui/src/ui/action/ActionManager.cpp:136
-msgid "_"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ActionManager.cpp:136
-msgid "/"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ShortcutEditor.cpp:251
-msgid "Hit keys on your keyboard to change the shortcut."
-msgstr ""
-
-#. Creates the controls.
-#: C:/Dev/Bundles/ui/src/ui/action/ShortcutEditor.cpp:408
-msgid "Shortcuts"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ShortcutEditor.cpp:410
-msgid "&Edit..."
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ShortcutEditor.cpp:411
-msgid "&Clear"
-msgstr ""
-
-#. Initializes the shortcut list.
-#: C:/Dev/Bundles/ui/src/ui/action/ShortcutEditor.cpp:414
-msgid "Name"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/action/ShortcutEditor.cpp:415
-msgid "Value"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/utility/WindowLocation.cpp:28
-msgid "unknown"
-msgstr ""
-
-#. /< the unknown state literal
-#: C:/Dev/Bundles/ui/src/ui/utility/WindowLocation.cpp:29
-msgid "iconized"
-msgstr ""
-
-#. /< the iconized state literal
-#: C:/Dev/Bundles/ui/src/ui/utility/WindowLocation.cpp:30
-msgid "maximized"
-msgstr ""
-
-#. /< the maximized state literal
-#: C:/Dev/Bundles/ui/src/ui/utility/WindowLocation.cpp:31
-msgid "full screen"
-msgstr ""
-
-#. Matches the given window location.
-#: C:/Dev/Bundles/ui/src/ui/utility/WindowLocation.cpp:99
-msgid "([0-9]+)x([0-9]+)([+\\-][0-9]+)([+\\-][0-9]+)"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/utility/WindowLocation.cpp:209
-#, possible-c-format
-msgid "%ix%i%+i%+i"
-msgstr ""
-
-#: C:/Dev/Bundles/ui/src/ui/view/SampleView.cpp:43
-msgid "ui::view::SampleView"
-msgstr ""
diff --git a/Bundles/core/io/rc/locale/fr/LC_MESSAGES/io-Final.po b/Bundles/core/io/rc/locale/fr/LC_MESSAGES/io-Final.po
deleted file mode 100644
index dbce8cb..0000000
--- a/Bundles/core/io/rc/locale/fr/LC_MESSAGES/io-Final.po
+++ /dev/null
@@ -1,126 +0,0 @@
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:41
-msgid "Name"
-msgstr "Nom"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:42
-msgid "Modality"
-msgstr "Modalité"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:43
-msgid "Zone"
-msgstr "Zone"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:44
-msgid "ID"
-msgstr "ID"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:45
-msgid "Birthdate"
-msgstr "Date de naissance"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:46
-msgid "Hospital"
-msgstr "Hopital"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:47
-msgid "Acq. date"
-msgstr "Date d'acquisition"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:48
-msgid "Nb images"
-msgstr "Nb images"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:49
-msgid "Voxel size"
-msgstr "Taille voxel"
-
-msgid "PatientDBGuiSelectorService"
-msgstr ""
-
-msgid "Input to import"
-msgstr ""
-
-msgid "Output to export"
-msgstr ""
-
-msgid "Reader to use"
-msgstr ""
-
-msgid "IO Service "
-msgstr ""
-
-msgid "IGuiSelectorService"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:69
-msgid "Choose image to read"
-msgstr ""
-
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 14:27+0200\n"
-"PO-Revision-Date: 2008-06-16 08:54+0100\n"
-"Last-Translator: Johan Moreau <Johan.Moreau at laposte.net>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:91
-msgid "Enter filename"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:94
-msgid ".inr.gz"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:95
-msgid "*.inr.gz"
-msgstr ""
-
-msgid "OK"
-msgstr ""
-
-msgid "Cancel"
-msgstr ""
-
-msgid " composite object reader"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/TriangularMeshGuiEditorService.cpp:45
-msgid "Choose trian to read"
-msgstr ""
-
-msgid "IGuiEditorService"
-msgstr ""
-
-msgid "Title of selector dialog box"
-msgstr ""
-
-msgid "Bouchonnage: loading simulated"
-msgstr ""
-
-msgid "Load model"
-msgstr ""
-
-msgid "Bouchonnage: no save"
-msgstr ""
-
-msgid "Save model"
-msgstr ""
-
-msgid "PatientDBGuiEditorService"
-msgstr ""
-
-msgid "File format unknown. Retry with another file reader."
-msgstr ""
-
-msgid "Image Reader"
-msgstr ""
diff --git a/Bundles/core/io/rc/locale/fr/LC_MESSAGES/io.po b/Bundles/core/io/rc/locale/fr/LC_MESSAGES/io.po
deleted file mode 100644
index 760e3f5..0000000
--- a/Bundles/core/io/rc/locale/fr/LC_MESSAGES/io.po
+++ /dev/null
@@ -1,73 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 14:27+0200\n"
-"PO-Revision-Date: 2008-06-16 08:54+0100\n"
-"Last-Translator: Johan Moreau <Johan.Moreau at laposte.net>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:41
-msgid "Name"
-msgstr "Nom"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:42
-msgid "Modality"
-msgstr "Modalité"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:43
-msgid "Zone"
-msgstr "Zone"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:44
-msgid "ID"
-msgstr "ID"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:45
-msgid "Birthdate"
-msgstr "Date de naissance"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:46
-msgid "Hospital"
-msgstr "Hopital"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:47
-msgid "Acq. date"
-msgstr "Date d'acquisition"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:48
-msgid "Nb images"
-msgstr "Nb images"
-
-# C:/Dev/Bundles/io/src/io/AcquisitionSelectorPanel.cpp:49
-msgid "Voxel size"
-msgstr "Taille voxel"
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:69
-msgid "Choose image to read"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:91
-msgid "Enter filename"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:94
-msgid ".inr.gz"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/ImageGuiEditorService.cpp:95
-msgid "*.inr.gz"
-msgstr ""
-
-# C:/Dev/Bundles/io/src/io/TriangularMeshGuiEditorService.cpp:45
-msgid "Choose trian to read"
-msgstr ""
-
diff --git a/Bundles/core/io/rc/plugin.xml b/Bundles/core/io/rc/plugin.xml
index 4dd8287..f7dc724 100644
--- a/Bundles/core/io/rc/plugin.xml
+++ b/Bundles/core/io/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="io" class="io::Plugin">
+<plugin id="io" class="io::Plugin" version="@DASH_VERSION@" >
 
     <library name="io"/>
     
diff --git a/Bundles/core/io/src/io/IReader.cpp b/Bundles/core/io/src/io/IReader.cpp
index 015d1ec..46deb7d 100644
--- a/Bundles/core/io/src/io/IReader.cpp
+++ b/Bundles/core/io/src/io/IReader.cpp
@@ -1,11 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "io/IReader.hpp"
 
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
 #include <fwCore/base.hpp>
 
 #include <fwRuntime/ConfigurationElementContainer.hpp>
@@ -18,13 +23,24 @@ using fwRuntime::ConfigurationElementContainer;
 namespace io
 {
 
+const ::fwCom::Slots::SlotKeyType s_READ_FOLDER_SLOT = "readFolder";
+const ::fwCom::Slots::SlotKeyType s_READ_FILE_SLOT   = "readFile";
+const ::fwCom::Slots::SlotKeyType s_READ_FILES_SLOT  = "readFiles";
+
+//-----------------------------------------------------------------------------
+
 IReader::IReader() throw()
-{}
+{
+    newSlot(s_READ_FOLDER_SLOT, &IReader::readFolder, this);
+    newSlot(s_READ_FILE_SLOT, &IReader::readFile, this);
+    newSlot(s_READ_FILES_SLOT, &IReader::readFiles, this);
+}
 
 //-----------------------------------------------------------------------------
 
 IReader::~IReader() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -44,8 +60,8 @@ std::vector< std::string > IReader::getSupportedExtensions()
 
 const ::boost::filesystem::path &IReader::getFile() const
 {
-    FW_RAISE_IF("This reader doesn't manage file", !(this->getIOPathType() & ::io::FILE));
-    FW_RAISE_IF("Sorry, one file must be define in location", m_locations.size() != 1);
+    FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILE));
+    FW_RAISE_IF("Exactly one file must be defined in location", m_locations.size() != 1);
     return m_locations.front();
 }
 
@@ -53,7 +69,7 @@ const ::boost::filesystem::path &IReader::getFile() const
 
 void IReader::setFile( const ::boost::filesystem::path &file)
 {
-    FW_RAISE_IF("This reader doesn't manage file", !(this->getIOPathType() & ::io::FILE));
+    FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILE));
     m_locations.clear();
     m_locations.push_back(file);
 }
@@ -63,7 +79,7 @@ void IReader::setFile( const ::boost::filesystem::path &file)
 const ::io::LocationsType &IReader::getFiles() const
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILES));
-    FW_RAISE_IF("Sorry, at least one file must be define in location", m_locations.empty() );
+    FW_RAISE_IF("At least one file must be define in location", m_locations.empty() );
     return m_locations;
 }
 
@@ -79,8 +95,8 @@ void IReader::setFiles(const ::io::LocationsType &files)
 
 const ::boost::filesystem::path &IReader::getFolder() const
 {
-    FW_RAISE_IF("This reader doesn't manage folder", !(this->getIOPathType() & ::io::FOLDER));
-    FW_RAISE_IF("Sorry, one folder must be define in location", m_locations.size() !=1 );
+    FW_RAISE_IF("This reader doesn't manage folders", !(this->getIOPathType() & ::io::FOLDER));
+    FW_RAISE_IF("Exactly one folder must be define in location", m_locations.size() !=1 );
     return m_locations.front();
 }
 
@@ -88,7 +104,7 @@ const ::boost::filesystem::path &IReader::getFolder() const
 
 void IReader::setFolder(const ::boost::filesystem::path &folder)
 {
-    FW_RAISE_IF("This reader doesn't manage folder", !(this->getIOPathType() & ::io::FOLDER));
+    FW_RAISE_IF("This reader doesn't manage folders", !(this->getIOPathType() & ::io::FOLDER));
     m_locations.clear();
     m_locations.push_back(folder);
 }
@@ -97,7 +113,7 @@ void IReader::setFolder(const ::boost::filesystem::path &folder)
 
 const ::io::LocationsType &IReader::getLocations() const
 {
-    FW_RAISE_IF("Sorry, at least one pâth must be define in location", m_locations.empty() );
+    FW_RAISE_IF("At least one path must be define in location", m_locations.empty() );
     return m_locations;
 }
 
@@ -112,21 +128,23 @@ void IReader::clearLocations()
 
 void IReader::configuring() throw (fwTools::Failed)
 {
-    SLM_ASSERT("Generic configuring method is just available for io service that uses pathes.", ! ( this->getIOPathType() & ::io::TYPE_NOT_DEFINED ) );
+    SLM_ASSERT("Generic configuring method is only available for io service that use paths.",
+               !( this->getIOPathType() & ::io::TYPE_NOT_DEFINED ) );
 
-    SLM_ASSERT("Sorry, you not manage folder and a folder path is given in the configuration",
-            ( this->getIOPathType() & ::io::FOLDER ) ||
-               ((! (this->getIOPathType() & ::io::FOLDER)) && (m_configuration->find("folder").size() == 0)) );
+    SLM_ASSERT("This reader does not manage folders and a folder path is given in the configuration",
+               ( this->getIOPathType() & ::io::FOLDER ) ||
+               ((!(this->getIOPathType() & ::io::FOLDER)) && (m_configuration->find("folder").size() == 0)) );
 
-    SLM_ASSERT("Sorry, you not manage file and a file path is given in the configuration",
-            ( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES ) ||
-               ((!( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES )) && (m_configuration->find("file").size() == 0)) );
+    SLM_ASSERT("This reader does not manage files and a file path is given in the configuration",
+               ( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES ) ||
+               ((!( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES )) &&
+                (m_configuration->find("file").size() == 0)) );
 
     if ( this->getIOPathType() & ::io::FILE )
     {
         FW_RAISE_IF("This reader cannot manages FILE and FILES.", this->getIOPathType() & ::io::FILES );
         std::vector< ::fwRuntime::ConfigurationElement::sptr > config = m_configuration->find("file");
-        FW_RAISE_IF("Sorry, only one file must be defined in configuration", config.size() > 1 );
+        FW_RAISE_IF("At least one file must be defined in configuration", config.size() > 1 );
         if (config.size() == 1)
         {
             std::string file = config.at(0)->getValue();
@@ -137,10 +155,10 @@ void IReader::configuring() throw (fwTools::Failed)
 
     if ( this->getIOPathType() & ::io::FILES )
     {
-        FW_RAISE_IF("This reader cannot manages FILE and FILES.", this->getIOPathType() & ::io::FILE );
+        FW_RAISE_IF("This reader cannot manage FILE and FILES.", this->getIOPathType() & ::io::FILE );
         std::vector< ::fwRuntime::ConfigurationElement::sptr > config = m_configuration->find("file");
         ::io::LocationsType locations;
-        BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr elt, config)
+        for(::fwRuntime::ConfigurationElement::sptr elt :  config)
         {
             std::string location = elt->getValue();
             locations.push_back(::boost::filesystem::path(location));
@@ -152,7 +170,7 @@ void IReader::configuring() throw (fwTools::Failed)
     if ( this->getIOPathType() & ::io::FOLDER )
     {
         std::vector< ::fwRuntime::ConfigurationElement::sptr > config = m_configuration->find("folder");
-        FW_RAISE_IF("Sorry, only one folder must be defined in configuration", config.size() > 1 );
+        FW_RAISE_IF("At least one folder must be defined in configuration", config.size() > 1 );
         if (config.size() == 1)
         {
             std::string folder = config.at(0)->getValue();
@@ -178,5 +196,29 @@ bool IReader::hasLocationDefined() const
 
 //-----------------------------------------------------------------------------
 
+void IReader::readFolder(::boost::filesystem::path folder)
+{
+    this->setFolder(folder);
+    this->updating();
+}
+
+//-----------------------------------------------------------------------------
+
+void IReader::readFile(::boost::filesystem::path file)
+{
+    this->setFile(file);
+    this->updating();
+}
+
+//-----------------------------------------------------------------------------
+
+void IReader::readFiles(::io::LocationsType files)
+{
+    this->setFiles(files);
+    this->updating();
+}
+
+//-----------------------------------------------------------------------------
+
 }
 
diff --git a/Bundles/core/io/src/io/IWriter.cpp b/Bundles/core/io/src/io/IWriter.cpp
index 78aafdd..cdb2aa3 100644
--- a/Bundles/core/io/src/io/IWriter.cpp
+++ b/Bundles/core/io/src/io/IWriter.cpp
@@ -1,12 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 #include "io/IWriter.hpp"
 
 #include <fwCore/base.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 namespace io
 {
@@ -14,19 +14,21 @@ namespace io
 //-----------------------------------------------------------------------------
 
 IWriter::IWriter() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IWriter::~IWriter() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 const ::boost::filesystem::path &IWriter::getFile() const
 {
-    FW_RAISE_IF("This reader doesn't manage file", !(this->getIOPathType() & ::io::FILE));
-    FW_RAISE_IF("Sorry, one file must be define in location", m_locations.size() != 1);
+    FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILE));
+    FW_RAISE_IF("Exactly one file must be define in location", m_locations.size() != 1);
     return m_locations.front();
 }
 
@@ -34,7 +36,7 @@ const ::boost::filesystem::path &IWriter::getFile() const
 
 void IWriter::setFile( const ::boost::filesystem::path &file)
 {
-    FW_RAISE_IF("This reader doesn't manage file", !(this->getIOPathType() & ::io::FILE));
+    FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILE));
     m_locations.clear();
     m_locations.push_back(file);
 }
@@ -44,7 +46,7 @@ void IWriter::setFile( const ::boost::filesystem::path &file)
 const ::io::LocationsType &IWriter::getFiles() const
 {
     FW_RAISE_IF("This reader doesn't manage files", !(this->getIOPathType() & ::io::FILES));
-    FW_RAISE_IF("Sorry, at least one file must be define in location", m_locations.empty() );
+    FW_RAISE_IF("At least one file must be define in location", m_locations.empty() );
     return m_locations;
 }
 
@@ -60,8 +62,8 @@ void IWriter::setFiles(const ::io::LocationsType &files)
 
 const ::boost::filesystem::path &IWriter::getFolder() const
 {
-    FW_RAISE_IF("This reader doesn't manage folder", !(this->getIOPathType() & ::io::FOLDER));
-    FW_RAISE_IF("Sorry, one folder must be define in location", m_locations.size() !=1 );
+    FW_RAISE_IF("This reader doesn't manage folders", !(this->getIOPathType() & ::io::FOLDER));
+    FW_RAISE_IF("Exactly one folder must be define in location", m_locations.size() !=1 );
     return m_locations.front();
 }
 
@@ -69,7 +71,7 @@ const ::boost::filesystem::path &IWriter::getFolder() const
 
 void IWriter::setFolder(const ::boost::filesystem::path &folder)
 {
-    FW_RAISE_IF("This reader doesn't manage folder", !(this->getIOPathType() & ::io::FOLDER));
+    FW_RAISE_IF("This reader doesn't manage folders", !(this->getIOPathType() & ::io::FOLDER));
     m_locations.clear();
     m_locations.push_back(folder);
 }
@@ -78,7 +80,7 @@ void IWriter::setFolder(const ::boost::filesystem::path &folder)
 
 const ::io::LocationsType &IWriter::getLocations() const
 {
-    FW_RAISE_IF("Sorry, at least one pâth must be define in location", m_locations.empty() );
+    FW_RAISE_IF("At least one path must be define in location", m_locations.empty() );
     return m_locations;
 }
 
@@ -93,21 +95,23 @@ void IWriter::clearLocations()
 
 void IWriter::configuring() throw (fwTools::Failed)
 {
-    SLM_ASSERT("Generic configuring method is just available for io service that uses pathes.", ! ( this->getIOPathType() & ::io::TYPE_NOT_DEFINED ) );
+    SLM_ASSERT("Generic configuring method is only available for io service that uses paths.",
+               !( this->getIOPathType() & ::io::TYPE_NOT_DEFINED ) );
 
-    SLM_ASSERT("Sorry, you not manage folder and a folder path is given in the configuration",
-            ( this->getIOPathType() & ::io::FOLDER ) ||
-               ((! (this->getIOPathType() & ::io::FOLDER)) && (m_configuration->find("folder").size() == 0)) );
+    SLM_ASSERT("This writer does not manage folders and a folder path is given in the configuration",
+               ( this->getIOPathType() & ::io::FOLDER ) ||
+               ((!(this->getIOPathType() & ::io::FOLDER)) && (m_configuration->find("folder").size() == 0)) );
 
-    SLM_ASSERT("Sorry, you not manage file and a file path is given in the configuration",
-            ( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES ) ||
-               ((!( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES )) && (m_configuration->find("file").size() == 0)) );
+    SLM_ASSERT("This writer does not manages files and a file path is given in the configuration",
+               ( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES ) ||
+               ((!( this->getIOPathType() & ::io::FILE || this->getIOPathType() & ::io::FILES )) &&
+                (m_configuration->find("file").size() == 0)) );
 
     if ( this->getIOPathType() & ::io::FILE )
     {
         FW_RAISE_IF("This reader cannot manages FILE and FILES.", this->getIOPathType() & ::io::FILES );
         std::vector< ::fwRuntime::ConfigurationElement::sptr > config = m_configuration->find("file");
-        FW_RAISE_IF("Sorry, only one file must be defined in configuration", config.size() > 1 );
+        FW_RAISE_IF("No more than one file must be defined in the configuration", config.size() > 1 );
         if (config.size() == 1)
         {
             std::string file = config.at(0)->getValue();
@@ -121,7 +125,7 @@ void IWriter::configuring() throw (fwTools::Failed)
         FW_RAISE_IF("This reader cannot manages FILE and FILES.", this->getIOPathType() & ::io::FILE );
         std::vector< ::fwRuntime::ConfigurationElement::sptr > config = m_configuration->find("file");
         ::io::LocationsType locations;
-        BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr elt, config)
+        for(::fwRuntime::ConfigurationElement::sptr elt :  config)
         {
             std::string location = elt->getValue();
             locations.push_back(::boost::filesystem::path(location));
@@ -133,7 +137,7 @@ void IWriter::configuring() throw (fwTools::Failed)
     if ( this->getIOPathType() & ::io::FOLDER )
     {
         std::vector< ::fwRuntime::ConfigurationElement::sptr > config = m_configuration->find("folder");
-        FW_RAISE_IF("Sorry, only one folder must be defined in configuration", config.size() > 1 );
+        FW_RAISE_IF("No more than one folder must be defined in configuration", config.size() > 1 );
         if (config.size() == 1)
         {
             std::string folder = config.at(0)->getValue();
diff --git a/Bundles/core/io/src/io/Plugin.cpp b/Bundles/core/io/src/io/Plugin.cpp
index b9e1db4..9c3324b 100644
--- a/Bundles/core/io/src/io/Plugin.cpp
+++ b/Bundles/core/io/src/io/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,15 @@ namespace io
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("io::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 } // namespace io
diff --git a/Bundles/core/io/src/io/ioTypes.cpp b/Bundles/core/io/src/io/ioTypes.cpp
new file mode 100644
index 0000000..842cbf8
--- /dev/null
+++ b/Bundles/core/io/src/io/ioTypes.cpp
@@ -0,0 +1,14 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "io/ioTypes.hpp"
+
+namespace io
+{
+
+const std::string s_DATA_KEY = "data";
+
+} // namespace io
diff --git a/Bundles/core/memory/CMakeLists.txt b/Bundles/core/memory/CMakeLists.txt
index 370ca17..1c29206 100644
--- a/Bundles/core/memory/CMakeLists.txt
+++ b/Bundles/core/memory/CMakeLists.txt
@@ -1,12 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwMemory
-    fwRuntime
-    fwServices
-    fwTools
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
 
diff --git a/Bundles/core/memory/COPYING b/Bundles/core/memory/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/memory/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/memory/COPYING.LESSER b/Bundles/core/memory/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/memory/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/memory/Properties.cmake b/Bundles/core/memory/Properties.cmake
index 15a27a1..e537fb2 100644
--- a/Bundles/core/memory/Properties.cmake
+++ b/Bundles/core/memory/Properties.cmake
@@ -2,6 +2,14 @@
 set( NAME memory )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwCore fwData fwMemory fwRuntime fwServices fwTools )
+set( START ON )
+set( DEPENDENCIES 
+    fwCore 
+    fwData 
+    fwMemory 
+    fwRuntime 
+    fwServices 
+    fwTools 
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/memory/bin/build.options b/Bundles/core/memory/bin/build.options
deleted file mode 100644
index 57aabd5..0000000
--- a/Bundles/core/memory/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE    = 'bundle'
-LIB     = [
-          'fwServices_0-1',
-          'fwCore_0-1',
-          'fwRuntime_0-3',
-          'fwTools_0-1',
-          'fwMemory_0-1',
-          ]
-USE     = ['boost']
-VERSION = '0-1'
-
diff --git a/Bundles/core/memory/include/memory/Namespace.hpp b/Bundles/core/memory/include/memory/Namespace.hpp
index d5d8629..d908716 100644
--- a/Bundles/core/memory/include/memory/Namespace.hpp
+++ b/Bundles/core/memory/include/memory/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _MEMORY_NAMESPACE_HPP_
-#define _MEMORY_NAMESPACE_HPP_
+#ifndef __MEMORY_NAMESPACE_HPP__
+#define __MEMORY_NAMESPACE_HPP__
 
 /**
  * @brief     The namespace memory contains tools to manage memory. Used for dump.
  * @namespace memory
- * 
+ *
  * @date      2009-2011.
  *
  */
@@ -18,4 +18,4 @@ namespace memory
 {
 
 }
-#endif /* _MEMORY_NAMESPACE_HPP_ */
+#endif /* __MEMORY_NAMESPACE_HPP__ */
diff --git a/Bundles/core/memory/include/memory/Plugin.hpp b/Bundles/core/memory/include/memory/Plugin.hpp
index b2992c9..6712578 100644
--- a/Bundles/core/memory/include/memory/Plugin.hpp
+++ b/Bundles/core/memory/include/memory/Plugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _MEMORY_PLUGIN_HPP_
-#define _MEMORY_PLUGIN_HPP_
+#ifndef __MEMORY_PLUGIN_HPP__
+#define __MEMORY_PLUGIN_HPP__
 
 #include <fwRuntime/Plugin.hpp>
 
@@ -41,4 +41,4 @@ struct Plugin : public ::fwRuntime::Plugin
 
 } // namespace memory
 
-#endif //_MEMORY_PLUGIN_HPP_
+#endif //__MEMORY_PLUGIN_HPP__
diff --git a/Bundles/core/memory/include/memory/SDumpPolicy.hpp b/Bundles/core/memory/include/memory/SDumpPolicy.hpp
index 5c55843..fcae079 100644
--- a/Bundles/core/memory/include/memory/SDumpPolicy.hpp
+++ b/Bundles/core/memory/include/memory/SDumpPolicy.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,7 +23,7 @@ class MEMORY_CLASS_API SDumpPolicy : public ::fwServices::IController
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SDumpPolicy)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SDumpPolicy)(::fwServices::IController) );
 
     MEMORY_API SDumpPolicy();
 
@@ -31,8 +31,8 @@ public:
 
     /**
      * Configuration example :
-     @verbatim
-     <service ...>
+       @code{.xml}
+       <service ...>
        <config>
          <policy>ValveDump</policy>
          <params>
@@ -40,8 +40,8 @@ public:
           <hysteresis_offet>104857600</hysteresis_offet>
          </params>
        </config>
-     </service>
-      @endverbatim
+       </service>
+       @endcode
      * */
     MEMORY_API virtual void configuring() throw ( ::fwTools::Failed );
 
@@ -55,12 +55,9 @@ public:
     MEMORY_API virtual void updating() throw ( ::fwTools::Failed );
 
     /// Overrides
-    MEMORY_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
-
-    /// Overrides
     MEMORY_API virtual void swapping() throw ( ::fwTools::Failed );
 
-protected :
+protected:
 
     typedef std::vector< std::pair< ::fwMemory::IPolicy::ParamNamesType::value_type, std::string > > ParametersType;
 
diff --git a/Bundles/core/memory/include/memory/config.hpp b/Bundles/core/memory/include/memory/config.hpp
deleted file mode 100644
index 7a17e04..0000000
--- a/Bundles/core/memory/include/memory/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _MEMORY_CONFIG_HPP_
-#define _MEMORY_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef MEMORY_EXPORTS
-    #define MEMORY_API __declspec(dllexport)
-    #else
-    #define MEMORY_API __declspec(dllimport)
-    #endif
-
-    #define MEMORY_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef MEMORY_EXPORTS
-    #define MEMORY_API __attribute__ ((visibility("default")))
-    #define MEMORY_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define MEMORY_API __attribute__ ((visibility("hidden")))
-    #define MEMORY_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define MEMORY_API
-    #define MEMORY_CLASS_API
-
-#endif
-
-#endif //_MEMORY_CONFIG_HPP_
diff --git a/Bundles/core/memory/rc/plugin.xml b/Bundles/core/memory/rc/plugin.xml
index 928a54d..307cfc0 100644
--- a/Bundles/core/memory/rc/plugin.xml
+++ b/Bundles/core/memory/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="memory" class="memory::Plugin">
+<plugin id="memory" class="memory::Plugin" version="@DASH_VERSION@" >
 
     <library name="memory"/>
 
diff --git a/Bundles/core/memory/src/memory/Plugin.cpp b/Bundles/core/memory/src/memory/Plugin.cpp
index 9305345..0139ae6 100644
--- a/Bundles/core/memory/src/memory/Plugin.cpp
+++ b/Bundles/core/memory/src/memory/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,8 @@ namespace memory
 static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("memory::Plugin");
 
 Plugin::~Plugin() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/Bundles/core/memory/src/memory/SDumpPolicy.cpp b/Bundles/core/memory/src/memory/SDumpPolicy.cpp
index 7596f0d..903b831 100644
--- a/Bundles/core/memory/src/memory/SDumpPolicy.cpp
+++ b/Bundles/core/memory/src/memory/SDumpPolicy.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@
 #include <fwData/Object.hpp>
 
 // Services tools
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwMemory/BufferManager.hpp>
 #include <fwMemory/IPolicy.hpp>
@@ -26,10 +26,12 @@ namespace memory
 fwServicesRegisterMacro( ::fwServices::IController, ::memory::SDumpPolicy, ::fwData::Object );
 
 SDumpPolicy::SDumpPolicy()
-{}
+{
+}
 
 SDumpPolicy::~SDumpPolicy()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -40,7 +42,7 @@ void SDumpPolicy::configuring() throw ( ::fwTools::Failed )
 
     if (!config.empty())
     {
-        std::vector < ConfigurationType > policy = config.at(0)->find("policy");
+        std::vector < ConfigurationType > policy        = config.at(0)->find("policy");
         std::vector < ConfigurationType > paramsElement = config.at(0)->find("params");
 
         m_policyParams.clear();
@@ -77,13 +79,13 @@ void SDumpPolicy::starting() throw ( ::fwTools::Failed )
         if (policy)
         {
             bool success;
-            BOOST_FOREACH(const ParametersType::value_type &param, m_policyParams)
+            for(const ParametersType::value_type &param :  m_policyParams)
             {
                 success = policy->setParam(param.first, param.second);
                 OSLM_ERROR_IF( "[" << m_policy << "] Unable to set '"
-                               << param.first << "' parameter to " << param.second,
+                                   << param.first << "' parameter to " << param.second,
                                !success);
-                OSLM_INFO_IF("Set '" << param.first << "' policy parameter to " << param.second , success);
+                OSLM_INFO_IF("Set '" << param.first << "' policy parameter to " << param.second, success);
             }
             ::fwCore::mt::WriteLock lock( manager->getMutex() );
             manager->setDumpPolicy(policy);
@@ -96,13 +98,12 @@ void SDumpPolicy::starting() throw ( ::fwTools::Failed )
 //------------------------------------------------------------------------------
 
 void SDumpPolicy::stopping() throw ( ::fwTools::Failed )
-{}
+{
+}
 
 void SDumpPolicy::updating() throw ( ::fwTools::Failed )
-{}
-
-void SDumpPolicy::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/Bundles/core/preferences/CMakeLists.txt b/Bundles/core/preferences/CMakeLists.txt
new file mode 100644
index 0000000..be5f89f
--- /dev/null
+++ b/Bundles/core/preferences/CMakeLists.txt
@@ -0,0 +1,2 @@
+
+fwLoadProperties()
diff --git a/Bundles/core/preferences/Properties.cmake b/Bundles/core/preferences/Properties.cmake
new file mode 100644
index 0000000..874cf98
--- /dev/null
+++ b/Bundles/core/preferences/Properties.cmake
@@ -0,0 +1,18 @@
+
+set( NAME preferences )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+    fwCore
+    fwTools
+    fwRuntime
+    fwData
+    fwDataCamp
+    fwServices
+    fwAtomsBoostIO
+    fwAtomConversion
+    fwZip
+    fwAtoms
+)
+set( REQUIREMENTS  )
+
diff --git a/Bundles/core/preferences/include/preferences/IPreferencesService.hpp b/Bundles/core/preferences/include/preferences/IPreferencesService.hpp
new file mode 100644
index 0000000..e15452b
--- /dev/null
+++ b/Bundles/core/preferences/include/preferences/IPreferencesService.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PREFERENCES_IPREFERENCESSERVICE_HPP__
+#define __PREFERENCES_IPREFERENCESSERVICE_HPP__
+
+#include "preferences/config.hpp"
+
+#include <fwServices/IService.hpp>
+
+namespace preferences
+{
+
+/**
+ * @brief Preferences service API.
+ * This class represents the base interface for preferences services.
+ */
+class PREFERENCES_CLASS_API IPreferencesService : public fwServices::IService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (IPreferencesService)(::fwServices::IService) );
+
+    /// Constructor
+    IPreferencesService() throw()
+    {
+    }
+
+    /// Destructor
+    virtual ~IPreferencesService() throw()
+    {
+    }
+};
+
+} // namespace preferences
+
+#endif /*__PREFERENCES_IPREFERENCESSERVICE_HPP__*/
+
+
diff --git a/Bundles/core/preferences/include/preferences/Plugin.hpp b/Bundles/core/preferences/include/preferences/Plugin.hpp
new file mode 100644
index 0000000..e000513
--- /dev/null
+++ b/Bundles/core/preferences/include/preferences/Plugin.hpp
@@ -0,0 +1,41 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PREFERENCES_PLUGIN_HPP__
+#define __PREFERENCES_PLUGIN_HPP__
+
+#include <string>
+#include <boost/filesystem.hpp>
+
+#include <fwRuntime/Plugin.hpp>
+
+#include <fwData/Composite.hpp>
+
+namespace preferences
+{
+
+struct Plugin : public ::fwRuntime::Plugin
+{
+    ~Plugin() throw()
+    {
+    }
+
+    void start() throw(::fwRuntime::RuntimeException);
+
+    void stop() throw();
+
+    protected:
+
+        ::boost::filesystem::path getPreferencesFile() const;
+
+        static const std::string s_PREF_SERVICE_UID;
+
+        ::fwData::Composite::sptr m_preferences;
+};
+
+} // namespace preferences
+
+#endif //__PREFERENCES_PLUGIN_HPP__
diff --git a/Bundles/core/preferences/include/preferences/SPreferences.hpp b/Bundles/core/preferences/include/preferences/SPreferences.hpp
new file mode 100644
index 0000000..cf8f71a
--- /dev/null
+++ b/Bundles/core/preferences/include/preferences/SPreferences.hpp
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __PREFERENCES_SPREFERENCES_HPP__
+#define __PREFERENCES_SPREFERENCES_HPP__
+
+#include "preferences/IPreferencesService.hpp"
+
+namespace preferences
+{
+/**
+ * @brief Service to load and save preferences.
+ * @section XML XML Configuration
+ * @code{.xml}
+         <filename>path/to/my/preferences.json</filename>
+ * @endcode
+ * @throw ::fwTools::Failed
+ */
+class PREFERENCES_CLASS_API SPreferences : public ::preferences::IPreferencesService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SPreferences)(::preferences::IPreferencesService) );
+
+    ///Destructor
+
+    SPreferences() throw()
+    {
+    }
+    virtual ~SPreferences() throw()
+    {
+    }
+
+protected:
+
+    /// Starts service and loads preferences if exists.
+    PREFERENCES_API virtual void starting() throw( ::fwTools::Failed );
+
+    /// Stops service and saves preferences.
+    PREFERENCES_API virtual void stopping() throw( ::fwTools::Failed );
+
+    /// Updates service and saves preferences.
+    PREFERENCES_API virtual void updating() throw( ::fwTools::Failed );
+
+    PREFERENCES_API virtual void configuring() throw(::fwTools::Failed);
+
+    /// preference file
+    ::boost::filesystem::path m_prefFile;
+
+private:
+
+    /// loads preferences
+    void load();
+    /// saves preferences
+    void save();
+};
+
+} // namespace preferences
+
+#endif /*__PREFERENCES_SPREFERENCES_HPP__*/
diff --git a/Bundles/core/preferences/rc/plugin.xml b/Bundles/core/preferences/rc/plugin.xml
new file mode 100644
index 0000000..43280bb
--- /dev/null
+++ b/Bundles/core/preferences/rc/plugin.xml
@@ -0,0 +1,11 @@
+<plugin id="preferences" class="preferences::Plugin" version="@DASH_VERSION@" >
+
+    <library name="preferences"/>
+    
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::preferences::IPreferencesService</type>
+        <service>::preferences::SPreferences</service>
+        <object>::fwData::Composite</object>
+    </extension>
+
+</plugin>
diff --git a/Bundles/core/preferences/src/preferences/Plugin.cpp b/Bundles/core/preferences/src/preferences/Plugin.cpp
new file mode 100644
index 0000000..b134ada
--- /dev/null
+++ b/Bundles/core/preferences/src/preferences/Plugin.cpp
@@ -0,0 +1,102 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "preferences/Plugin.hpp"
+
+#include <fwData/String.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwRuntime/profile/Profile.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/op/Get.hpp>
+
+#include <fwTools/Os.hpp>
+
+namespace preferences
+{
+
+const std::string Plugin::s_PREF_SERVICE_UID = "PREF_SERVICE_UID";
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("preferences::Plugin");
+
+//-----------------------------------------------------------------------------
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+    m_preferences = ::fwData::Composite::New();
+
+    ::fwServices::IService::sptr prefSrv;
+    prefSrv = ::fwServices::add (m_preferences,
+                                 "::preferences::IPreferencesService", "::preferences::SPreferences",
+                                 s_PREF_SERVICE_UID);
+
+    try
+    {
+        ::fwRuntime::EConfigurationElement::sptr prefConfig = ::fwRuntime::EConfigurationElement::New( "filename" );
+        ::boost::filesystem::path prefFile                  = this->getPreferencesFile();
+        prefConfig->setValue(prefFile.string());
+
+        prefSrv->setConfiguration(prefConfig);
+        prefSrv->configure();
+        prefSrv->start();
+
+        if ( m_preferences->find( "PREFERENCES_VERSION" ) == m_preferences->end() )
+        {
+            ::fwData::String::sptr version            = ::fwData::String::New( PREFERENCES_VER );
+            (*m_preferences)[ "PREFERENCES_VERSION" ] = version;
+        }
+    }
+    catch(::fwCore::Exception& e)
+    {
+        OSLM_ERROR("Preferences service not started. " << e.what());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+    if(::fwTools::fwID::exist(s_PREF_SERVICE_UID))
+    {
+        ::fwServices::IService::sptr prefSrv = ::fwServices::get(s_PREF_SERVICE_UID);
+        prefSrv->stop();
+        ::fwServices::OSR::unregisterService(prefSrv);
+    }
+    m_preferences.reset();
+}
+
+//-----------------------------------------------------------------------------
+
+::boost::filesystem::path Plugin::getPreferencesFile() const
+{
+    namespace bfile = ::boost::filesystem;
+
+    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
+    FW_RAISE_IF("No current profile set.", !profile);
+
+    const std::string appName     = profile->getName();
+    const bfile::path appPrefDir  = ::fwTools::os::getUserDataDir("fw4spl", appName, true);
+    const bfile::path appPrefFile = appPrefDir / "preferences.json";
+
+    FW_RAISE_IF("Unable to define user data directory", appPrefDir.empty());
+
+    if (!bfile::exists(appPrefDir))
+    {
+        bfile::create_directories(appPrefDir);
+    }
+
+    FW_RAISE_IF("Preferences file '"+appPrefFile.string()+"' already exists and is not a regular file.",
+                bfile::exists(appPrefFile) && !bfile::is_regular_file(appPrefFile));
+
+    return appPrefFile;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace preferences
diff --git a/Bundles/core/preferences/src/preferences/SPreferences.cpp b/Bundles/core/preferences/src/preferences/SPreferences.cpp
new file mode 100644
index 0000000..8fbf461
--- /dev/null
+++ b/Bundles/core/preferences/src/preferences/SPreferences.cpp
@@ -0,0 +1,125 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "preferences/SPreferences.hpp"
+
+#include <fwAtomsBoostIO/types.hpp>
+#include <fwAtomsBoostIO/Reader.hpp>
+#include <fwAtomsBoostIO/Writer.hpp>
+
+#include <fwAtomConversion/convert.hpp>
+
+#include <fwData/Composite.hpp>
+
+#include <fwDataCamp/visitor/RecursiveLock.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwZip/ReadDirArchive.hpp>
+#include <fwZip/WriteDirArchive.hpp>
+
+#include <boost/filesystem.hpp>
+
+namespace preferences
+{
+
+fwServicesRegisterMacro( ::preferences::IPreferencesService, ::preferences::SPreferences, ::fwData::Composite );
+
+//-----------------------------------------------------------------------------
+
+void SPreferences::starting() throw (::fwTools::Failed)
+{
+    this->load();
+}
+
+//-----------------------------------------------------------------------------
+
+void SPreferences::stopping() throw (::fwTools::Failed)
+{
+    this->save();
+}
+
+//-----------------------------------------------------------------------------
+
+void SPreferences::updating() throw (::fwTools::Failed)
+{
+    this->save();
+}
+
+//-----------------------------------------------------------------------------
+
+void SPreferences::configuring() throw(::fwTools::Failed)
+{
+    std::vector < ::fwRuntime::ConfigurationElement::sptr > vectConfig = m_configuration->find("filename");
+    SLM_ASSERT("The <filename> element must exist.", !vectConfig.empty() );
+    m_prefFile = vectConfig.at(0)->getValue();
+}
+
+//-----------------------------------------------------------------------------
+
+void SPreferences::load()
+{
+    if (::boost::filesystem::is_regular_file(m_prefFile))
+    {
+        const ::boost::filesystem::path folderPath = m_prefFile.parent_path();
+        const ::boost::filesystem::path filename   = m_prefFile.filename();
+
+        ::fwData::Object::sptr data = this->getObject< ::fwData::Object >();
+
+        // Read atom
+        ::fwZip::IReadArchive::sptr readArchive = ::fwZip::ReadDirArchive::New(folderPath.string());
+        ::fwAtomsBoostIO::Reader reader;
+        try
+        {
+            ::fwAtoms::Object::sptr atom = ::fwAtoms::Object::dynamicCast( reader.read( readArchive, filename ) );
+
+            ::fwData::Object::sptr newData = ::fwAtomConversion::convert(atom,
+                                                                         ::fwAtomConversion::AtomVisitor::ChangePolicy());
+            data->shallowCopy(newData);
+        }
+        catch(...)
+        {
+            SLM_ERROR("Failed to load preference file '"+m_prefFile.string()+"'.");
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SPreferences::save()
+{
+    const ::boost::filesystem::path folderPath = m_prefFile.parent_path();
+    const ::boost::filesystem::path filename   = m_prefFile.filename();
+
+    ::fwData::Object::sptr obj = this->getObject();
+
+    // Mutex data lock
+    ::fwDataCamp::visitor::RecursiveLock recursiveLock (obj);
+
+    // Convert data to atom
+    ::fwAtoms::Object::sptr atom = ::fwAtomConversion::convert(obj);
+    // Write atom
+    ::fwZip::IWriteArchive::sptr writeArchive = ::fwZip::WriteDirArchive::New(folderPath.string());
+    ::fwAtomsBoostIO::FormatType format       = ::fwAtomsBoostIO::JSON;
+
+    if(::boost::filesystem::exists(m_prefFile) && ::boost::filesystem::is_regular_file(m_prefFile)
+       && !(::boost::filesystem::status(m_prefFile).permissions() & ::boost::filesystem::owner_write) )
+    {
+        SLM_ERROR("SPreference need write access to the file '"+m_prefFile.string()+"'."
+                  "Please, change file permission.");
+    }
+    else
+    {
+        ::fwAtomsBoostIO::Writer(atom).write( writeArchive, filename, format );
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+}
+
diff --git a/Bundles/core/servicesReg/CMakeLists.txt b/Bundles/core/servicesReg/CMakeLists.txt
index 6c43e97..45cc4af 100644
--- a/Bundles/core/servicesReg/CMakeLists.txt
+++ b/Bundles/core/servicesReg/CMakeLists.txt
@@ -1,6 +1,10 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-)
 
+
+find_package(Boost COMPONENTS system REQUIRED)
+
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+fwLink(
+    ${Boost_SYSTEM_LIBRARY}
+)
diff --git a/Bundles/core/servicesReg/COPYING b/Bundles/core/servicesReg/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/servicesReg/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/servicesReg/COPYING.LESSER b/Bundles/core/servicesReg/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/servicesReg/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/servicesReg/Properties.cmake b/Bundles/core/servicesReg/Properties.cmake
index b6e694d..6397de3 100644
--- a/Bundles/core/servicesReg/Properties.cmake
+++ b/Bundles/core/servicesReg/Properties.cmake
@@ -2,6 +2,9 @@
 set( NAME servicesReg )
 set( VERSION 0.1 )
 set( TYPE BUNDLE )
-set( DEPENDENCIES fwComEd fwRuntime fwServices )
+set( DEPENDENCIES
+    fwRuntime
+    fwServices
+)
 set( REQUIREMENTS  )
 
diff --git a/Bundles/core/servicesReg/bin/build.options b/Bundles/core/servicesReg/bin/build.options
deleted file mode 100644
index abcac4b..0000000
--- a/Bundles/core/servicesReg/bin/build.options
+++ /dev/null
@@ -1,8 +0,0 @@
-TYPE    = 'bundle'
-USE     = ['boost']
-LIB     = ['fwRuntime_0-3','fwData_0-1','fwTools_0-1','fwCore_0-1','fwServices_0-1','fwComEd_0-1']
-REQUIREMENTS = [
-                'dataReg_0-1',
-                ]
-VERSION = '0-1'
-
diff --git a/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp b/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp
index f2c566a..e4bd96c 100644
--- a/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp
+++ b/Bundles/core/servicesReg/include/servicesReg/Namespace.hpp
@@ -1,21 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef SERVICESREGNAMESPACE_HPP_
-#define SERVICESREGNAMESPACE_HPP_
+#ifndef __SERVICESREG_NAMESPACE_HPP__
+#define __SERVICESREG_NAMESPACE_HPP__
 
 /**
  * @brief      The namespace servicesReg (registration service) contains all types of low-level services essential to FW4SPL.
- * @namespace  servicesReg
- * 
- * @date       2009-2010.
- *
  */
 namespace servicesReg
 {
 
 }
-#endif /* SERVICESREGNAMESPACE_HPP_ */
+#endif /* __SERVICESREG_NAMESPACE_HPP__ */
diff --git a/Bundles/core/servicesReg/include/servicesReg/Plugin.hpp b/Bundles/core/servicesReg/include/servicesReg/Plugin.hpp
index d34a87c..172b3d8 100644
--- a/Bundles/core/servicesReg/include/servicesReg/Plugin.hpp
+++ b/Bundles/core/servicesReg/include/servicesReg/Plugin.hpp
@@ -1,29 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _SERVICESREG_PLUGIN_HPP_
-#define _SERVICESREG_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
+#ifndef __SERVICESREG_PLUGIN_HPP__
+#define __SERVICESREG_PLUGIN_HPP__
 
 #include "servicesReg/config.hpp"
 
+#include <fwRuntime/Plugin.hpp>
+
 namespace servicesReg
 {
 
 /**
  * @brief   This class is started when the bundles is loaded.
- * @class   Plugin
  */
 struct SERVICESREG_CLASS_API Plugin : public ::fwRuntime::Plugin
 {
     /// Destructor. Do nothing.
     SERVICESREG_API ~Plugin() throw();
 
-    /// Overrides start method. Service declarations (services declared in fwServices / fwComEd libraries ).
+    /// Overrides start method. Service declarations (services declared in fwServices libraries ).
     SERVICESREG_API void start() throw(::fwRuntime::RuntimeException);
 
     /// Overrides initialize method
@@ -39,4 +38,4 @@ struct SERVICESREG_CLASS_API Plugin : public ::fwRuntime::Plugin
 
 } // namespace servicesReg
 
-#endif // _SERVICESREG_PLUGIN_HPP_
+#endif // __SERVICESREG_PLUGIN_HPP__
diff --git a/Bundles/core/servicesReg/include/servicesReg/config.hpp b/Bundles/core/servicesReg/include/servicesReg/config.hpp
deleted file mode 100644
index 739d038..0000000
--- a/Bundles/core/servicesReg/include/servicesReg/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _SERVICESREG_CONFIG_HPP_
-#define _SERVICESREG_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef SERVICESREG_EXPORTS
-    #define SERVICESREG_API __declspec(dllexport)
-    #else
-    #define SERVICESREG_API __declspec(dllimport)
-    #endif
-
-    #define SERVICESREG_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef SERVICESREG_EXPORTS
-    #define SERVICESREG_API __attribute__ ((visibility("default")))
-    #define SERVICESREG_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define SERVICESREG_API __attribute__ ((visibility("hidden")))
-    #define SERVICESREG_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define SERVICESREG_API
-    #define SERVICESREG_CLASS_API
-
-#endif
-
-#endif // _SERVICESREG_CONFIG_HPP_
diff --git a/Bundles/core/servicesReg/rc/appConfig.xsd b/Bundles/core/servicesReg/rc/appConfig.xsd
index 67d45d2..6285165 100644
--- a/Bundles/core/servicesReg/rc/appConfig.xsd
+++ b/Bundles/core/servicesReg/rc/appConfig.xsd
@@ -6,7 +6,6 @@
     <xs:complexType name="ExtensionType">
         <xs:sequence>
             <xs:element name="id" type="xs:string" />
-            <xs:element name="type" type="xs:string" minOccurs="1" maxOccurs="1"/>
             <xs:element name="parameters" type="ParametersType" minOccurs="0" maxOccurs="1"/>
             <xs:element name="group" type="xs:string" minOccurs="0" maxOccurs="1"/>
             <xs:element name="desc" type="xs:string" minOccurs="0" maxOccurs="1"/>
@@ -32,13 +31,6 @@
         </xs:sequence>
     </xs:complexType>
 
-    <xs:simpleType name="TypeType">
-        <xs:restriction base="xs:string">
-            <xs:enumeration value="standard" />
-            <xs:enumeration value="template" />
-        </xs:restriction>
-    </xs:simpleType>
-
     <!-- Object Type -->
     <xs:complexType name="ObjectType">
         <xs:sequence>
@@ -49,6 +41,8 @@
             <xs:element name="item"  type="ItemType"  minOccurs="0" maxOccurs="unbounded" />
             <xs:element name="node"  type="NodeType"  minOccurs="0" maxOccurs="unbounded" />
             <xs:element name="edge"  type="EdgeType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="colors"  type="ColorType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="param" minOccurs="0" maxOccurs="unbounded" />
             <xs:element name="connect"  type="ConnectionType"  minOccurs="0" maxOccurs="unbounded" />
             <xs:element name="proxy"  type="ProxyType"  minOccurs="0" maxOccurs="unbounded" />
             <xs:element name="start" type="StartType" minOccurs="0" maxOccurs="unbounded" />
@@ -79,8 +73,9 @@
         <xs:attribute name='impl' type='xs:string' use="required" />
         <xs:attribute name='autoConnect' type='AutoConnectType' />
         <xs:attribute name='worker' type='xs:string' />
+        <xs:attribute name='config' type='xs:string' />
     </xs:complexType>
-
+   
     <!-- Connection Type -->
     <xs:complexType name="ConnectionType">
         <xs:sequence>
@@ -151,5 +146,16 @@
         <xs:attribute name="uid" type="xs:string" />
         <xs:attribute name="src" type="xs:string" />
     </xs:complexType>
+    
+    <xs:complexType name="ColorType">
+        <xs:sequence>
+            <xs:element name="step" type="StepType" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+    
+    <xs:complexType name="StepType">
+        <xs:attribute name="color" type="xs:string" use="required" />
+        <xs:attribute name="value" type="xs:string" use="required" />
+    </xs:complexType>
 
 </xs:schema>        
diff --git a/Bundles/core/servicesReg/rc/appConfig2.xsd b/Bundles/core/servicesReg/rc/appConfig2.xsd
new file mode 100644
index 0000000..2e0f0f5
--- /dev/null
+++ b/Bundles/core/servicesReg/rc/appConfig2.xsd
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+
+    <xs:element name="extension" type="ExtensionType" />
+
+    <xs:complexType name="ExtensionType">
+        <xs:sequence>
+            <xs:element name="id" type="xs:string" />
+            <xs:element name="parameters" type="ParametersType" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="group" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="desc" type="xs:string" minOccurs="0" maxOccurs="1"/>
+            <xs:element name="config" type="ConfigType" />
+        </xs:sequence>
+        <xs:anyAttribute processContents="skip" />
+    </xs:complexType>
+
+    <xs:complexType name="ParametersType">
+        <xs:sequence>
+            <xs:element name="param" type="ParamType" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="ParamType">
+        <xs:attribute name='name' type='xs:string' use="required" />
+        <xs:attribute name='default' type='xs:string' />
+    </xs:complexType>
+
+    <xs:complexType name="ConfigType">
+        <xs:sequence>
+            <xs:element name="object" type="ObjectType" minOccurs="0" maxOccurs="unbounded"/>
+            <xs:element name="serviceList" type="ServiceListType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="service" type="ServiceType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="connect"  type="ConnectionType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="start" type="StartType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="update" type="UpdateType" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <!-- Object Type -->
+    <xs:complexType name="ObjectType">
+        <xs:sequence>
+            <xs:element name="matrix"  type="xs:string"  minOccurs="0" maxOccurs="1" />
+            <xs:element name="value"  type="xs:string"  minOccurs="0" maxOccurs="1" />
+            <xs:element name="item"  type="ItemType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="node"  type="NodeType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="edge"  type="EdgeType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="colors"  type="ColorType"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="param" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name='uid' type='xs:string' />
+        <xs:attribute name='type' type='xs:string'/>
+        <xs:attribute name='src' type='xs:string' />
+    </xs:complexType>
+
+    <!-- Item Type -->
+    <xs:complexType name="ItemType">
+        <xs:sequence>
+             <xs:element name="object" type="ObjectType" minOccurs="1" maxOccurs="1" />
+        </xs:sequence>
+        <xs:attribute name='key' type='xs:string' />
+    </xs:complexType>
+
+    <!-- Service Type -->
+    <xs:complexType name="ServiceType">
+        <xs:sequence>
+            <xs:any processContents="skip" maxOccurs="unbounded" minOccurs="0"/>
+        </xs:sequence>
+        <xs:attribute name='uid' type='xs:string' use="optional"/>
+        <xs:attribute name='type' type='xs:string' use="required" />
+        <xs:attribute name='autoConnect' type='AutoConnectType' />
+        <xs:attribute name='worker' type='xs:string' />
+        <xs:attribute name='config' type='xs:string' />
+    </xs:complexType>
+
+    <!-- Connection Type -->
+    <xs:complexType name="ConnectionType">
+        <xs:sequence>
+            <xs:element name="signal"  type="xs:string"  minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="slot"  type="xs:string"  minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name='channel' type='xs:string' use="optional" />
+    </xs:complexType>
+
+    <!-- Start/Update/stop Type -->
+    <xs:complexType name="StartType">
+        <xs:attribute name='uid' type='xs:string' />
+    </xs:complexType>
+
+    <xs:complexType name="UpdateType">
+        <xs:attribute name='uid' type='xs:string' />
+    </xs:complexType>
+
+    <xs:simpleType name="AutoConnectType">
+        <xs:restriction base="xs:string">
+            <xs:enumeration value="yes" />
+            <xs:enumeration value="no" />
+        </xs:restriction>
+    </xs:simpleType>
+
+    <!-- ServiceList Type -->
+    <xs:complexType name="ServiceListType">
+        <xs:sequence>
+            <xs:element name="service" type="ServiceType" minOccurs="1" maxOccurs="unbounded"/>
+        </xs:sequence>
+    </xs:complexType>
+
+    <!-- NodeType Type -->
+    <xs:complexType name="NodeType"> <!-- Almost the same as ObjectType -->
+        <xs:sequence>
+            <xs:element name="object" type="ObjectType" minOccurs="0" maxOccurs="1" />
+            <xs:element name="serviceList" type="ServiceListType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="service" type="ServiceType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="start" type="StartType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="update" type="UpdateType" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="uid" type="xs:string" use="required" />
+        <xs:attribute name="src" type="xs:string" />
+    </xs:complexType>
+
+    <!-- EdgeType Type -->
+    <xs:complexType name="EdgeType"> <!-- Same as NodeType, but with optionnal "weight" attribute -->
+        <xs:sequence>
+            <xs:element name="object" type="ObjectType" minOccurs="0" maxOccurs="1" />
+            <xs:element name="serviceList" type="ServiceListType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="service" type="ServiceType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="start" type="StartType" minOccurs="0" maxOccurs="unbounded" />
+            <xs:element name="update" type="UpdateType" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+        <xs:attribute name="origin" type="xs:string" use="required" />
+        <xs:attribute name="target" type="xs:string" use="required" />
+        <xs:attribute name="weight" type="xs:string" />
+        <xs:attribute name="uid" type="xs:string" />
+        <xs:attribute name="src" type="xs:string" />
+    </xs:complexType>
+
+    <xs:complexType name="ColorType">
+        <xs:sequence>
+            <xs:element name="step" type="StepType" minOccurs="0" maxOccurs="unbounded" />
+        </xs:sequence>
+    </xs:complexType>
+
+    <xs:complexType name="StepType">
+        <xs:attribute name="color" type="xs:string" use="required" />
+        <xs:attribute name="value" type="xs:string" use="required" />
+    </xs:complexType>
+
+</xs:schema>
diff --git a/Bundles/core/servicesReg/rc/plugin.xml b/Bundles/core/servicesReg/rc/plugin.xml
index 66ec6c5..a9154bc 100644
--- a/Bundles/core/servicesReg/rc/plugin.xml
+++ b/Bundles/core/servicesReg/rc/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="servicesReg" class="::servicesReg::Plugin" >
+<plugin id="servicesReg" class="::servicesReg::Plugin" version="@DASH_VERSION@" >
 
     <library name="servicesReg" />
 
@@ -6,6 +6,7 @@
     
     <!-- EXTENSION POINT FOR AN APP CONFIGURATION -->
     <extension-point id="::fwServices::registry::AppConfig" schema="appConfig.xsd"/>
+    <extension-point id="::fwServices::registry::AppConfig2" schema="appConfig2.xsd"/>
     
     <!-- EXTENSION POINT FOR APP CONFIGURATION PARAMETERS-->
     <extension-point id="::fwServices::registry::AppConfigParameters" schema="appConfigParameters.xsd"/>
@@ -19,52 +20,58 @@
     <!-- SPECIFIC SERVICES -->
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::Composite</service>
+        <service>::dataReg::parser::Composite</service>
         <object>::fwData::Composite</object>
     </extension>
     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::TransformationMatrix3D</service>
+        <service>::dataReg::parser::TransformationMatrix3D</service>
         <object>::fwData::TransformationMatrix3D</object>
     </extension>
 
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::Object</service>
+        <service>::dataReg::parser::Object</service>
         <object>::fwData::Object</object>
     </extension>
     
      <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::List</service>
+        <service>::dataReg::parser::List</service>
         <object>::fwData::List</object>
     </extension>
     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::BooleanParser</service>
+        <service>::dataReg::parser::BooleanParser</service>
         <object>::fwData::Boolean</object>
     </extension>
     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::FloatParser</service>
+        <service>::dataReg::parser::FloatParser</service>
         <object>::fwData::Float</object>
     </extension>
     
      <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::IntegerParser</service>
+        <service>::dataReg::parser::IntegerParser</service>
         <object>::fwData::Integer</object>
     </extension>
     
      <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IXMLParser</type>
-        <service>::fwComEd::parser::StringParser</service>
+        <service>::dataReg::parser::StringParser</service>
         <object>::fwData::String</object>
     </extension>
      
+     <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IXMLParser</type>
+        <service>::dataReg::parser::TransferFunction</service>
+        <object>::fwData::TransferFunction</object>
+    </extension>
+     
     <extension implements="::fwServices::registry::ServiceFactory">
         <type>::fwServices::IController</type>
         <service>::fwServices::SConfigController</service>
diff --git a/Bundles/core/servicesReg/src/servicesReg/Plugin.cpp b/Bundles/core/servicesReg/src/servicesReg/Plugin.cpp
index 3254016..13ac359 100644
--- a/Bundles/core/servicesReg/src/servicesReg/Plugin.cpp
+++ b/Bundles/core/servicesReg/src/servicesReg/Plugin.cpp
@@ -1,22 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-
-#include <fwServices/registry/ObjectService.hpp>
+#include "servicesReg/Plugin.hpp"
 
-#include <fwComEd/parser/Composite.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
 
-#include <fwServices/registry/ServiceConfig.hpp>
-#include <fwServices/registry/ServiceFactory.hpp>
+#include <fwServices/registry/ActiveWorkers.hpp>
 #include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/registry/AppConfig2.hpp>
 #include <fwServices/registry/AppConfigParameters.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/ServiceConfig.hpp>
+#include <fwServices/registry/ServiceFactory.hpp>
 
-#include "servicesReg/Plugin.hpp"
+#include <fwThread/Pool.hpp>
 
 namespace servicesReg
 {
@@ -27,7 +26,6 @@ static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("
 
 Plugin::~Plugin() throw()
 {
-    ::fwComEd::parser::Composite::sptr objectCreatedToForceLink;
 }
 
 //-----------------------------------------------------------------------------
@@ -37,18 +35,24 @@ void Plugin::start() throw( ::fwRuntime::RuntimeException )
     ::fwServices::registry::ServiceFactory::getDefault()->parseBundleInformation();
     ::fwServices::registry::ServiceConfig::getDefault()->parseBundleInformation();
     ::fwServices::registry::AppConfig::getDefault()->parseBundleInformation();
+    ::fwServices::registry::AppConfig2::getDefault()->parseBundleInformation();
     ::fwServices::registry::AppConfigParameters::getDefault()->parseBundleInformation();
+
+    ::fwThread::createDefaultPool();
 }
 
 //-----------------------------------------------------------------------------
 
 void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Plugin::uninitialize() throw( ::fwRuntime::RuntimeException )
 {
+    ::fwThread::deleteDefaultPool();
+
     // Clear all service configs
     ::fwServices::registry::ServiceConfig::getDefault()->clearRegistry();
 
@@ -68,7 +72,8 @@ void Plugin::uninitialize() throw( ::fwRuntime::RuntimeException )
 //-----------------------------------------------------------------------------
 
 void Plugin::stop() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/Bundles/core/visu/CMakeLists.txt b/Bundles/core/visu/CMakeLists.txt
deleted file mode 100644
index 2449a4b..0000000
--- a/Bundles/core/visu/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-fwLoadProperties()
-fwUseForwardInclude(
-    fwRuntime
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-
diff --git a/Bundles/core/visu/COPYING b/Bundles/core/visu/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/Bundles/core/visu/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/Bundles/core/visu/COPYING.LESSER b/Bundles/core/visu/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/Bundles/core/visu/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/Bundles/core/visu/Properties.cmake b/Bundles/core/visu/Properties.cmake
deleted file mode 100644
index eda91e1..0000000
--- a/Bundles/core/visu/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME visu )
-set( VERSION 0.1 )
-set( TYPE BUNDLE )
-set( DEPENDENCIES fwRuntime )
-set( REQUIREMENTS  )
-
diff --git a/Bundles/core/visu/bin/build.options b/Bundles/core/visu/bin/build.options
deleted file mode 100644
index 8cf6ede..0000000
--- a/Bundles/core/visu/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-TYPE     = 'bundle'
-USE      = ['boost']
-LIB      = ['fwRuntime_0-3','fwData_0-1','fwServices_0-1','fwComEd_0-1','fwTools_0-1','fwCore_0-1','fwRender_0-1']
-REQUIREMENTS = [
-                'servicesReg_0-1',
-                ]
-VERSION  = '0-1'
diff --git a/Bundles/core/visu/include/visu/Namespace.hpp b/Bundles/core/visu/include/visu/Namespace.hpp
deleted file mode 100644
index 21ff575..0000000
--- a/Bundles/core/visu/include/visu/Namespace.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef VISUNAMESPACE_HPP_
-#define VISUNAMESPACE_HPP_
-
-/**
- * @brief      The namespace visu contains low-level visu services essential to FW4SPL.
- * @namespace  visu
- * 
- * @date       2009-2010.
- *
- */
-namespace visu
-{
-
-}
-#endif /* VISUNAMESPACE_HPP_ */
diff --git a/Bundles/core/visu/include/visu/Plugin.hpp b/Bundles/core/visu/include/visu/Plugin.hpp
deleted file mode 100644
index 4ec6892..0000000
--- a/Bundles/core/visu/include/visu/Plugin.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISU_PLUGIN_HPP_
-#define _VISU_PLUGIN_HPP_
-
-#include <fwRuntime/Plugin.hpp>
-
-#include "visu/config.hpp"
-
-namespace visu
-{
-
-/**
- * @brief   This class is started when the bundles is loaded.
- * @class   Plugin
- */
-struct VISU_CLASS_API Plugin : public ::fwRuntime::Plugin
-{
-    /// Destructor. Do nothing.
-    VISU_API ~Plugin() throw();
-
-    /// Overrides start method. Do nothing
-    VISU_API void start() throw(::fwRuntime::RuntimeException);
-
-    /// Overrides stop method. Do nothing
-    VISU_API void stop() throw();
-
-};
-
-} // namespace visu
-
-#endif //_VISU_PLUGIN_HPP_
diff --git a/Bundles/core/visu/include/visu/config.hpp b/Bundles/core/visu/include/visu/config.hpp
deleted file mode 100644
index 3eb6287..0000000
--- a/Bundles/core/visu/include/visu/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VISU_CONFIG_HPP_
-#define _VISU_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef VISU_EXPORTS
-    #define VISU_API __declspec(dllexport)
-    #else
-    #define VISU_API __declspec(dllimport)
-    #endif
-
-    #define VISU_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef VISU_EXPORTS
-    #define VISU_API __attribute__ ((visibility("default")))
-    #define VISU_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define VISU_API __attribute__ ((visibility("hidden")))
-    #define VISU_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define VISU_API
-    #define VISU_CLASS_API
-
-#endif
-
-#endif //_VISU_CONFIG_HPP_
diff --git a/Bundles/core/visu/rc/chest.xml b/Bundles/core/visu/rc/chest.xml
deleted file mode 100755
index a9831c6..0000000
--- a/Bundles/core/visu/rc/chest.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" ?>
-<TransferFunctionData>
-    <!--Here are the points colour(rgb), level-->
-    <Point>
-        <Level>0.000000</Level>
-        <Opacity>0.000000</Opacity>
-        <Blue>0.000000</Blue>
-        <Green>0.000000</Green>
-        <Red>0.000000</Red>
-    </Point>
-    <Point>
-        <Level>0.179946</Level>
-        <Opacity>0.000000</Opacity>
-        <Blue>0.000000</Blue>
-        <Green>0.000000</Green>
-        <Red>0.000000</Red>
-    </Point>
-    <Point>
-        <Level>0.205688</Level>
-        <Opacity>0.075000</Opacity>
-        <Blue>0.262745</Blue>
-        <Green>0.352941</Green>
-        <Red>0.996078</Red>
-    </Point>
-    <Point>
-        <Level>0.247119</Level>
-        <Opacity>0.645000</Opacity>
-        <Blue>0.403922</Blue>
-        <Green>0.909804</Green>
-        <Red>0.921569</Red>
-    </Point>
-    <Point>
-        <Level>0.314783</Level>
-        <Opacity>0.000000</Opacity>
-        <Blue>0.992157</Blue>
-        <Green>0.992157</Green>
-        <Red>0.992157</Red>
-    </Point>
-    <Point>
-        <Level>1.000000</Level>
-        <Opacity>0.000000</Opacity>
-        <Blue>1.000000</Blue>
-        <Green>1.000000</Green>
-        <Red>1.000000</Red>
-    </Point>
-</TransferFunctionData>
diff --git a/Bundles/core/visu/rc/locale/en/LC_MESSAGES/visualization.po b/Bundles/core/visu/rc/locale/en/LC_MESSAGES/visualization.po
deleted file mode 100644
index 9257e44..0000000
--- a/Bundles/core/visu/rc/locale/en/LC_MESSAGES/visualization.po
+++ /dev/null
@@ -1,59 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 13:59+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:158
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:159
-#, possible-c-format
-msgid "%d"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:234
-msgid "-0000"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:235
-msgid "+0000"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:236
-msgid "    "
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:244
-msgid "0\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:245
-msgid "20\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:246
-msgid "40\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:247
-msgid "60\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:248
-msgid "80\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:249
-msgid "100\\%"
-msgstr ""
diff --git a/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization-Final.po b/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization-Final.po
deleted file mode 100644
index e10d157..0000000
--- a/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization-Final.po
+++ /dev/null
@@ -1,46 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 14:27+0200\n"
-"PO-Revision-Date: 2008-06-13 22:45+0100\n"
-"Last-Translator: Johan Moreau <Johan.Moreau at laposte.net>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-msgid "TFZoomPanel::SendEvent"
-msgstr ""
-
-msgid "Windowing"
-msgstr ""
-
-msgid "Slices Position"
-msgstr ""
-
-msgid "Min"
-msgstr ""
-
-msgid "Max"
-msgstr ""
-
-msgid "Center"
-msgstr ""
-
-msgid "Width"
-msgstr ""
-
-msgid "Axial"
-msgstr ""
-
-msgid "Frontal"
-msgstr ""
-
-msgid "Sagittal"
-msgstr ""
diff --git a/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization.po b/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization.po
deleted file mode 100644
index d4ef0f3..0000000
--- a/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization.po
+++ /dev/null
@@ -1,59 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 14:27+0200\n"
-"PO-Revision-Date: 2008-06-13 22:45+0100\n"
-"Last-Translator: Johan Moreau <Johan.Moreau at laposte.net>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:158
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:159
-#, possible-c-format
-msgid "%d"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:234
-msgid "-0000"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:235
-msgid "+0000"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:236
-msgid "    "
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:244
-msgid "0\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:245
-msgid "20\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:246
-msgid "40\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:247
-msgid "60\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:248
-msgid "80\\%"
-msgstr ""
-
-#: C:/Dev/Bundles/visualization/src/visu/widgets/TFGraphWidget.cpp:249
-msgid "100\\%"
-msgstr ""
-
diff --git a/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization.pot b/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization.pot
deleted file mode 100644
index 5ebdc62..0000000
--- a/Bundles/core/visu/rc/locale/fr/LC_MESSAGES/visualization.pot
+++ /dev/null
@@ -1,29 +0,0 @@
-msgid "TFZoomPanel::SendEvent"
-msgstr ""
-
-msgid "Windowing"
-msgstr ""
-
-msgid "Slices Position"
-msgstr ""
-
-msgid "Min"
-msgstr ""
-
-msgid "Max"
-msgstr ""
-
-msgid "Center"
-msgstr ""
-
-msgid "Width"
-msgstr ""
-
-msgid "Axial"
-msgstr ""
-
-msgid "Frontal"
-msgstr ""
-
-msgid "Sagittal"
-msgstr ""
diff --git a/Bundles/core/visu/rc/plugin.xml b/Bundles/core/visu/rc/plugin.xml
deleted file mode 100644
index 639f112..0000000
--- a/Bundles/core/visu/rc/plugin.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-<plugin id="visu" class="::visu::Plugin" >
-
-    <library name="visu" />
-
-    <requirement id="servicesReg" />
-
-</plugin>
-
-
-
diff --git a/Bundles/core/visu/rc/visuCfg.xsd b/Bundles/core/visu/rc/visuCfg.xsd
deleted file mode 100644
index 3151f68..0000000
--- a/Bundles/core/visu/rc/visuCfg.xsd
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?> 
-<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
-
-<xs:element name="extension" type="ExtensionType"/>
-
-<xs:complexType name="ExtensionType">
-  <xs:sequence>
-    <xs:element name="service" type="VisualizationServiceType" minOccurs="0" maxOccurs="unbounded" />
-  </xs:sequence>
-  <xs:anyAttribute processContents="skip" />
-</xs:complexType>
-
-<xs:complexType name="VisualizationServiceType">
-  <xs:sequence>
-    <xs:element name="service" type="DelegateType" minOccurs="0" maxOccurs="unbounded" />
-  </xs:sequence>
-  <xs:attribute name="clockRateMSeconds" type="xs:integer" />  
-</xs:complexType>
-
-<xs:complexType name="DelegateType">
-  <xs:attribute name="config" type="xs:string" use="required" />
-  <xs:attribute name="type" type="xs:string" use="required" />
-</xs:complexType>
-
-</xs:schema>
\ No newline at end of file
diff --git a/Bundles/core/visu/src/visu/Plugin.cpp b/Bundles/core/visu/src/visu/Plugin.cpp
deleted file mode 100644
index 49300b5..0000000
--- a/Bundles/core/visu/src/visu/Plugin.cpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-
-#include "visu/Plugin.hpp"
-
-namespace visu
-{
-
-static ::fwRuntime::utils::GenericExecutableFactoryRegistrar< Plugin > registrar ("::visu::Plugin");
-
-Plugin::~Plugin() throw()
-{}
-
-void Plugin::start() throw(::fwRuntime::RuntimeException)
-{}
-
-void Plugin::stop() throw()
-{}
-
-} // namespace visu
diff --git a/Bundles/media/CMakeLists.txt b/Bundles/media/CMakeLists.txt
index 092911b..1c29206 100644
--- a/Bundles/media/CMakeLists.txt
+++ b/Bundles/media/CMakeLists.txt
@@ -1,2 +1,2 @@
-fwBundle(media 0.1)
+fwLoadProperties()
 
diff --git a/Bundles/media/bin/build.options b/Bundles/media/bin/build.options
deleted file mode 100644
index 5c1132c..0000000
--- a/Bundles/media/bin/build.options
+++ /dev/null
@@ -1,3 +0,0 @@
-TYPE    = 'bundle'
-VERSION = '0-1'
-BUNDLES = []
diff --git a/Bundles/media/rc/icons/Apply.svg b/Bundles/media/rc/icons/Apply.svg
new file mode 100644
index 0000000..8166824
--- /dev/null
+++ b/Bundles/media/rc/icons/Apply.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Apply.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.979899"
+     inkscape:cx="98.196225"
+     inkscape:cy="135.77593"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="1021"
+     inkscape:window-x="1680"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <g
+       id="check"
+       transform="matrix(2.894036,0,0,2.894036,269.7423,150.53037)"
+       style="stroke:#000000;stroke-opacity:1;fill:#006088;fill-opacity:1">
+      <g
+         id="g6"
+         style="stroke:#000000;stroke-opacity:1;fill:#006088;fill-opacity:1">
+        <polygon
+           points="32,5.695 11.941,25.754 11.941,25.754 0,13.812 5.695,8.117 11.941,14.363 26.305,0 "
+           style="fill:#006088;stroke:#000000;stroke-opacity:1;fill-opacity:1"
+           id="polygon8" />
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Composite.svg b/Bundles/media/rc/icons/Composite.svg
new file mode 100644
index 0000000..7e80d8f
--- /dev/null
+++ b/Bundles/media/rc/icons/Composite.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Composite.svg">
+  <defs
+     id="defs3007">
+    <linearGradient
+       id="linearGradient3766">
+      <stop
+         style="stop-color:#880045;stop-opacity:1;"
+         offset="0"
+         id="stop3768" />
+      <stop
+         style="stop-color:#ff0986;stop-opacity:1;"
+         offset="1"
+         id="stop3770" />
+    </linearGradient>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="35.069698"
+     inkscape:cy="78.380647"
+     inkscape:document-units="px"
+     inkscape:current-layer="Layer 1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <g
+       transform="matrix(0.16621132,0,0,0.16621132,259.86025,130.94334)"
+       style="fill-rule:evenodd"
+       id="Layer 1">
+      <path
+         inkscape:connector-curvature="0"
+         class="fil0"
+         d="M 174.99164,43.652402 C 42.253232,161.64213 195.47596,356.65288 338.04684,273.07684 c 0,-165.51334 244.99249,-200.746387 280.22553,-27.0393 C 605.1624,103.46663 484.71459,-8.7874618 338.04684,-8.7874618 c -60.63359,0 -117.17032,19.6649488 -163.0552,52.4398638 z"
+         id="path9"
+         style="fill:#21365b;fill-opacity:1;stroke:#000000;stroke-width:9.85941124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil1"
+         d="M 687.28822,384.06924 C 652.05519,210.36219 407.06269,245.59522 407.06269,411.10855 c 144.20963,81.93728 51.6205,312.18106 -117.17032,256.46371 131.09966,59.81422 288.41926,10.65184 361.34344,-115.53158 30.3168,-52.43986 41.78802,-111.43471 36.05241,-167.97144 z"
+         id="path11"
+         style="fill:#721e53;fill-opacity:1;stroke:#000000;stroke-width:9.85941124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil2"
+         d="M 151.86067,667.57226 C 320.65148,723.28961 413.24062,493.04583 269.03099,411.10855 126.4601,494.68458 -26.762648,299.67383 105.97577,181.68416 -11.194563,264.4408 -48.066338,425.03788 24.857844,552.04068 55.994013,604.48055 100.24016,643.81044 151.86067,667.57226 z"
+         id="path13"
+         style="fill:#234c20;fill-opacity:1;stroke:#000000;stroke-width:9.85941124;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/CreateActivity.svg b/Bundles/media/rc/icons/CreateActivity.svg
new file mode 100644
index 0000000..e222c86
--- /dev/null
+++ b/Bundles/media/rc/icons/CreateActivity.svg
@@ -0,0 +1,695 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="CreateActivity.svg">
+  <defs
+     id="defs3007">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient3811">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3813" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3815" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3811"
+       id="linearGradient3817"
+       x1="296.21085"
+       y1="187.79788"
+       x2="310.13318"
+       y2="187.79788"
+       gradientUnits="userSpaceOnUse" />
+    <inkscape:perspective
+       id="perspective90"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 24 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       id="linearGradient3099"
+       inkscape:collect="always">
+      <stop
+         id="stop3101"
+         offset="0"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+      <stop
+         id="stop3103"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3078"
+       inkscape:collect="always">
+      <stop
+         id="stop3080"
+         offset="0"
+         style="stop-color:#c4a000" />
+      <stop
+         id="stop3082"
+         offset="1"
+         style="stop-color:#fce94f" />
+    </linearGradient>
+    <linearGradient
+       id="XMLID_45_"
+       gradientUnits="userSpaceOnUse"
+       x1="68.175293"
+       y1="21.424805"
+       x2="74.587158"
+       y2="27.836672">
+      <stop
+         offset="0"
+         style="stop-color:#BABDB6"
+         id="stop695" />
+      <stop
+         offset="1"
+         style="stop-color:#EEEEEC"
+         id="stop697" />
+    </linearGradient>
+    <radialGradient
+       id="XMLID_52_"
+       cx="165.06104"
+       cy="23.333008"
+       r="7.2848282"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,1.010300,1.007969e-18,-0.159801)"
+       gradientUnits="userSpaceOnUse">
+      <stop
+         offset="0"
+         style="stop-color:#EF3535"
+         id="stop812" />
+      <stop
+         id="stop2239"
+         style="stop-color:#c91a1a;stop-opacity:1;"
+         offset="0" />
+      <stop
+         offset="1"
+         style="stop-color:#ff4c4c;stop-opacity:1;"
+         id="stop814" />
+    </radialGradient>
+    <linearGradient
+       id="path3311_1_"
+       gradientUnits="userSpaceOnUse"
+       x1="1420.5474"
+       y1="-50.919434"
+       x2="1420.6542"
+       y2="-79.574341"
+       gradientTransform="matrix(2.051000,0.000000,0.167200,-0.989000,-799.2049,221.0724)">
+      <stop
+         offset="0"
+         style="stop-color:#C4A000"
+         id="stop4970" />
+      <stop
+         offset="1"
+         style="stop-color:#957A00"
+         id="stop4972" />
+    </linearGradient>
+    <linearGradient
+       id="path3230_2_"
+       gradientUnits="userSpaceOnUse"
+       x1="1668.7646"
+       y1="185.30176"
+       x2="1679.5989"
+       y2="175.78883"
+       gradientTransform="matrix(1.213800,0.000000,0.282500,-1.671200,46.72625,447.9442)">
+      <stop
+         offset="0"
+         style="stop-color:#FFFFFF"
+         id="stop4977" />
+      <stop
+         offset="1"
+         style="stop-color:#CFCFCF"
+         id="stop4979" />
+    </linearGradient>
+    <linearGradient
+       id="XMLID_897_"
+       gradientUnits="userSpaceOnUse"
+       x1="292.97168"
+       y1="4.7592773"
+       x2="296.93979"
+       y2="10.711433">
+      <stop
+         offset="0"
+         style="stop-color:#EEEEEC"
+         id="stop45093" />
+      <stop
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;"
+         id="stop45095" />
+    </linearGradient>
+    <radialGradient
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.000000,0.000000,0.000000,1.010300,1.007969e-18,-0.159801)"
+       r="7.2848282"
+       cy="23.333008"
+       cx="165.06104"
+       id="radialGradient16850">
+      <stop
+         id="stop16852"
+         style="stop-color:#EF3535"
+         offset="0" />
+      <stop
+         id="stop16854"
+         style="stop-color:#a40000;stop-opacity:0"
+         offset="1" />
+    </radialGradient>
+    <linearGradient
+       id="linearGradient2229">
+      <stop
+         style="stop-color:#e2e2e2;stop-opacity:1;"
+         offset="0"
+         id="stop2231" />
+      <stop
+         style="stop-color:#d8d8d8;stop-opacity:1;"
+         offset="1"
+         id="stop2233" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2251">
+      <stop
+         style="stop-color:#df2a2a;stop-opacity:1;"
+         offset="0"
+         id="stop2253" />
+      <stop
+         style="stop-color:#df2a2a;stop-opacity:0;"
+         offset="1"
+         id="stop2255" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient2259">
+      <stop
+         style="stop-color:#9a0c00;stop-opacity:1;"
+         offset="0"
+         id="stop2261" />
+      <stop
+         style="stop-color:#9a0c00;stop-opacity:0;"
+         offset="1"
+         id="stop2263" />
+    </linearGradient>
+    <linearGradient
+       y2="175.78883"
+       x2="1679.5989"
+       y1="185.30176"
+       x1="1668.7646"
+       gradientTransform="matrix(1.213781,0,0.282495,-1.671173,-1834.231,751.0328)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1890"
+       xlink:href="#path3230_2_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="175.78883"
+       x2="1679.5989"
+       y1="185.30176"
+       x1="1668.7646"
+       gradientTransform="matrix(1.213781,0,0.282495,-1.671173,-1774.231,387.0328)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1893"
+       xlink:href="#path3230_2_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-79.574341"
+       x2="1420.6542"
+       y1="-50.919434"
+       x1="1420.5474"
+       gradientTransform="matrix(2.050967,0,0.167197,-0.988984,-2791.942,99.82423)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient1896"
+       xlink:href="#path3311_1_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="10.711433"
+       x2="296.93979"
+       y1="4.7592773"
+       x1="292.97168"
+       gradientTransform="matrix(-4.127761,0,0,4.136601,2003.489,504.25)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2975"
+       xlink:href="#XMLID_897_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="23.942537"
+       x2="24.32597"
+       y1="6.4603648"
+       x1="20.288025"
+       gradientTransform="translate(759.0237,516.155)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2977"
+       xlink:href="#linearGradient2229"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.3396"
+       x2="297.18515"
+       y1="12.187603"
+       x1="294.59497"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2979"
+       xlink:href="#XMLID_52_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="9.8769522"
+       x2="296.52905"
+       y1="15.506916"
+       x1="296.48611"
+       gradientTransform="matrix(3.637893,0,0,3.470375,-297.0923,500.1478)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2981"
+       xlink:href="#XMLID_52_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="10.711433"
+       x2="296.93979"
+       y1="4.7592773"
+       x1="292.97168"
+       gradientTransform="matrix(4.053427,0,0,4.136601,-416.5113,504.25)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2983"
+       xlink:href="#XMLID_897_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="22.860907"
+       x2="24.190449"
+       y1="23.843431"
+       x1="22.225399"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2987"
+       xlink:href="#XMLID_45_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="50.774887"
+       x2="25.152235"
+       y1="31.056622"
+       x1="7.184845"
+       gradientTransform="matrix(1.161878,0,0,0.992497,756.5929,516.4208)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2989"
+       xlink:href="#XMLID_52_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="2.3262277"
+       x2="7.6700611"
+       y1="40.068752"
+       x1="13.82536"
+       gradientTransform="matrix(1.161878,0,0,0.992497,756.3567,516.219)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2991"
+       xlink:href="#XMLID_52_"
+       inkscape:collect="always" />
+    <radialGradient
+       r="8.3887873"
+       fy="37.50008"
+       fx="34.376091"
+       cy="37.50008"
+       cx="34.376091"
+       gradientTransform="matrix(1,0,0,1.060381,759.0237,513.8555)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient2993"
+       xlink:href="#XMLID_52_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.802949"
+       x2="298.86948"
+       y1="13.599585"
+       x1="298.47852"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2995"
+       xlink:href="#linearGradient2251"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="13.802949"
+       x2="298.86948"
+       y1="13.599585"
+       x1="298.47852"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2997"
+       xlink:href="#linearGradient2259"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="10.946587"
+       x2="297.79822"
+       y1="12.012225"
+       x1="296.76199"
+       gradientTransform="matrix(3.624438,0,0,3.624438,-294.1553,499.3078)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient2999"
+       xlink:href="#XMLID_52_"
+       inkscape:collect="always" />
+    <linearGradient
+       y2="-11.889042"
+       x2="-3.532515"
+       y1="44.540932"
+       x1="39.619942"
+       gradientTransform="matrix(1.161878,0,0,0.992497,753.9116,516.219)"
+       gradientUnits="userSpaceOnUse"
+       id="linearGradient3001"
+       xlink:href="#radialGradient16850"
+       inkscape:collect="always" />
+    <radialGradient
+       r="18.0625"
+       fy="41.625"
+       fx="25.1875"
+       cy="41.625"
+       cx="25.1875"
+       gradientTransform="matrix(1,0,0,0.32526,0,28.08607)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3003"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="16.35697"
+       x2="32.350136"
+       y1="58.076275"
+       x1="42.426411"
+       id="linearGradient3084"
+       xlink:href="#linearGradient3078"
+       inkscape:collect="always" />
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="70.073158"
+       x2="52.131729"
+       y1="11.913623"
+       x1="28.835155"
+       id="linearGradient3105"
+       xlink:href="#linearGradient3099"
+       inkscape:collect="always" />
+    <radialGradient
+       r="18.0625"
+       fy="41.625"
+       fx="25.1875"
+       cy="41.625"
+       cx="25.1875"
+       gradientTransform="matrix(1,0,0,0.32526,0,28.08607)"
+       gradientUnits="userSpaceOnUse"
+       id="radialGradient3253"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient2229"
+       id="linearGradient5395"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(759.0237,516.155)"
+       x1="20.288025"
+       y1="6.4603648"
+       x2="24.32597"
+       y2="23.942537" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.6381454"
+     inkscape:cx="80.111198"
+     inkscape:cy="48.569734"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1614"
+     inkscape:window-height="989"
+     inkscape:window-x="977"
+     inkscape:window-y="163"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-237.3183,-121.94415)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="242.3183"
+       y="126.94415"
+       ry="9.9183826" />
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot3761"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       transform="translate(241.5368,126.16265)"><flowRegion
+         id="flowRegion3763"><rect
+           id="rect3765"
+           width="213.39473"
+           height="148.9975"
+           x="-35.860416"
+           y="3.5673711" /></flowRegion><flowPara
+         id="flowPara3767" /></flowRoot>    <g
+       style="overflow:visible"
+       id="g5367"
+       transform="matrix(1.654787,0,0,1.654787,249.41575,133.45889)">
+      <ellipse
+         inkscape:r_cy="true"
+         inkscape:r_cx="true"
+         style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.26704544;fill:url(#radialGradient3253);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+         id="path3251"
+         transform="matrix(0.968858,0,0,0.465206,6.096886,24.90272)"
+         cx="25.1875"
+         cy="41.625"
+         rx="18.0625"
+         ry="5.875" />
+      <path
+         id="path1465"
+         d="m 44.46875,3.6875 -28.03125,40.78125 28.03125,0 0,-40.78125 z m -5.9375,19.8125 0,14 -9.03125,0 9.03125,-14 z"
+         style="fill:url(#linearGradient3084);fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:1.02738464px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <path
+         sodipodi:nodetypes="cccc"
+         inkscape:r_cy="true"
+         inkscape:r_cx="true"
+         id="path3006"
+         d="M 43.5,43.5 43.5,6.8437499 18.375,43.4375 43.5,43.5 Z"
+         style="opacity:0.63874344;fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient3105);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         inkscape:connector-curvature="0" />
+      <g
+         inkscape:r_cy="true"
+         inkscape:r_cx="true"
+         transform="matrix(0.827925,0,0,0.827925,-628.8636,-425.078)"
+         id="g1903">
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2975);stroke:#888a85;stroke-width:1.2078383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 793.19801,517.78 c 0.21195,0.0685 0.41726,0.14466 0.62398,0.2175 0.65142,2.197 3.67149,4.41872 2.52306,6.60663 -3.82584,6.38039 -7.62433,12.84544 -11.42159,19.27614 -0.74575,0.1469 -1.49803,0.22691 -2.25177,0.24469 -1.58639,0.0402 -3.21493,-0.19449 -4.72056,-0.73407 5.05087,-8.55127 10.10387,-17.12141 15.24688,-25.61089 z"
+           id="path16717"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient5395);fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 793.31252,520.405 c -0.23112,0.30745 -0.44961,0.87094 -0.68603,1.15625 -4.04685,6.75273 -8.16201,13.49408 -12.22381,20.21875 -0.0606,0.25312 -0.81393,1.01229 -0.0121,0.94296 1.11156,0.19788 2.27175,0.35061 3.37983,0.057 3.75899,-6.21721 7.44588,-12.48242 11.19629,-18.70182 0.34247,-0.38728 0.40911,-0.92526 0.0494,-1.31198 -0.53001,-0.81661 -1.06694,-1.67472 -1.61003,-2.45495 l -0.0706,0.0707 -0.023,0.023 z"
+           id="path16719"
+           inkscape:connector-curvature="0" />
+        <polygon
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2979);fill-opacity:1;stroke:#9a0c00;stroke-width:0.33993483;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="polygon45129"
+           points="297.04443,12.300293 297.04443,12.300293 296.39941,13.384766 295.13281,14.71875 294.73242,13.672852 295.74658,11.960449 "
+           transform="matrix(3.637893,0,0,3.470375,-297.0923,500.1478)" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2981);fill-opacity:1;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 779.42995,543.12375 c -1.22235,0.48672 -1.21402,2.03518 -1.92498,2.96401 -0.34232,0.7158 -0.94379,1.34623 -1.20002,2.09849 -0.01,0.51539 0.44795,1.36022 1.03125,0.90625 1.38498,-1.14633 2.56437,-2.53868 3.44422,-4.12687 0.23237,-0.49003 0.79576,-0.89416 0.86828,-1.40438 -0.53857,-0.57081 -1.51282,-0.53302 -2.21875,-0.4375 z"
+           id="polygon16896"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2983);stroke:#888a85;stroke-width:1.2078383;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 771.9838,517.78 c -0.20813,0.0685 -0.40975,0.14466 -0.61275,0.2175 -0.63968,2.197 -3.60536,4.41872 -2.47762,6.60663 3.75695,6.38039 7.48703,12.84544 11.21591,19.27614 0.73232,0.1469 1.47105,0.22691 2.21121,0.24469 1.55783,0.0402 3.15704,-0.19449 4.63556,-0.73407 -4.95992,-8.55127 -9.92192,-17.12141 -14.97231,-25.61089 z"
+           id="polygon45097"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2977);fill-opacity:1;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 771.74337,520.405 c -0.38304,1.12668 -1.44966,1.95596 -1.71482,3.15625 3.70853,6.39411 7.47095,12.76913 11.17691,19.15625 1.19836,0.2583 2.42844,0.0932 3.61335,-0.15625 -0.18877,-0.74044 -0.7382,-1.33093 -1.02998,-2.02955 -3.8946,-6.57053 -7.8237,-13.13383 -11.678,-19.72045 -0.0147,-0.15161 -0.21671,-0.48413 -0.36746,-0.40625 z"
+           id="path16635"
+           inkscape:connector-curvature="0" />
+        <circle
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient2987);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+           id="path16731"
+           transform="matrix(0.979893,0,0,1,759.3351,516.329)"
+           cx="23.207924"
+           cy="23.843431"
+           r="0.98252523" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           id="path45138"
+           style="fill:url(#linearGradient2989);fill-opacity:1;stroke:#a40000;stroke-opacity:1"
+           d="m 776.72409,546.44193 c 3.23501,1.72665 3.49584,6.61292 0.57795,10.91436 -2.91786,4.30396 -7.90449,6.39518 -11.14096,4.67613 -3.2365,-1.72665 -3.49583,-6.61039 -0.57794,-10.91182 2.91637,-4.30143 7.90448,-6.39266 11.14095,-4.67867 z m -1.85512,2.74215 c -1.43653,-0.76363 -4.50746,0.54052 -6.46634,3.43403 -1.96291,2.8935 -1.8229,5.91351 -0.38773,6.67484 1.43515,0.76823 4.50879,-0.54052 6.46767,-3.43403 1.96426,-2.8935 1.82289,-5.91121 0.3864,-6.67484 z"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2991);fill-opacity:1;stroke:none;stroke-opacity:1"
+           d="m 773.3492,546.73829 c -1.92513,0.38722 -3.63446,1.45402 -5.04691,2.48124 -0.75176,0.6949 -1.24356,1.44992 -1.91565,2.25421 -1.70832,2.35206 -2.42423,5.44343 -1.07283,8.06967 0.61945,1.4531 2.64263,2.04744 4.36821,1.67913 1.45192,-0.24846 2.68132,-1.16107 3.81241,-1.7989 0.92091,-0.79078 1.55402,-1.62651 2.3329,-2.59128 1.80936,-2.4744 2.79191,-5.74867 1.29797,-8.51228 -0.7237,-1.14213 -2.23464,-1.74679 -3.7761,-1.58179 z m 0.47201,0.96148 c 2.01651,0.25035 3.35698,2.03281  [...]
+           id="path16771"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           d="m 789.35546,546.44193 c -3.23501,1.72665 -3.49583,6.61292 -0.57794,10.91436 2.91786,4.30396 7.90449,6.39518 11.14096,4.67613 3.2365,-1.72665 3.49583,-6.61039 0.57794,-10.91182 -2.91637,-4.30143 -7.90449,-6.39266 -11.14096,-4.67867 z m 1.85513,2.74215 c 1.43652,-0.76363 4.50746,0.54052 6.46634,3.43403 1.96291,2.8935 1.8229,5.91351 0.38773,6.67484 -1.43515,0.76823 -4.50879,-0.54052 -6.46767,-3.43403 -1.96426,-2.8935 -1.8229,-5.91121 -0.3864,-6.67484 z"
+           style="fill:url(#radialGradient2993);fill-opacity:1;stroke:#a40000;stroke-opacity:1"
+           id="path11967"
+           inkscape:connector-curvature="0" />
+        <polygon
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2995);fill-opacity:1;stroke:url(#linearGradient2997);stroke-width:0.3332485;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="polygon45101"
+           points="296.95605,12.300293 296.95605,12.300293 297.6001,13.384766 298.86719,14.71875 299.26807,13.672852 298.25391,11.960449 "
+           transform="matrix(3.624438,0,0,3.624438,-294.1553,499.3078)" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient2999);fill-opacity:1;stroke:none;stroke-width:0.27590489;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="m 785.17995,544.0925 c -0.42675,0.19882 -1.01681,0.20148 -1.34375,0.5 0.95002,1.40139 1.88991,2.91466 2.85088,4.21258 0.66855,0.75454 1.35581,1.50022 2.11787,2.16242 0.73528,-1.39142 0.13516,-3.06121 -0.8125,-4.1875 -0.60254,-0.89969 -0.82982,-2.11296 -1.84375,-2.59375 -0.30405,-0.11841 -0.65062,-0.17788 -0.96875,-0.0937 z"
+           id="polygon16860"
+           inkscape:connector-curvature="0" />
+        <path
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="fill:url(#linearGradient3001);fill-opacity:1;stroke:none;stroke-opacity:1"
+           d="m 791.30379,546.60409 c -1.52039,0.22975 -2.89495,1.08566 -3.24045,2.38797 -1.13115,2.39545 -0.21488,5.11351 1.27978,7.22685 1.10192,1.3452 1.94007,2.92991 3.63958,3.77397 1.47065,0.92362 3.34114,1.89057 5.21764,1.30089 1.51332,-0.43345 2.37067,-1.68057 2.68017,-2.97186 0.60443,-2.31003 -0.29569,-4.67596 -1.70696,-6.63648 -0.65868,-0.91371 -1.33299,-1.88321 -2.11332,-2.69465 -1.19456,-0.90345 -2.63792,-1.65153 -4.08884,-2.23235 -0.5341,-0.11041 -1.11523,-0.23274 -1.6676,-0. [...]
+           id="path16795"
+           inkscape:connector-curvature="0" />
+        <ellipse
+           inkscape:r_cy="true"
+           inkscape:r_cx="true"
+           style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.26704544;fill:url(#radialGradient3003);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;marker-start:none;marker-mid:none;marker-end:none"
+           id="path2267"
+           transform="matrix(1.256055,0,0,0.819149,751.8243,525.2454)"
+           cx="25.1875"
+           cy="41.625"
+           rx="18.0625"
+           ry="5.875" />
+      </g>
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,40.61612 -0.75843,0"
+         id="path3022"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,36.61612 -0.75843,0"
+         id="path3046"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,32.61612 -0.75843,0"
+         id="path3050"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,28.61612 -0.75843,0"
+         id="path3054"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,24.61612 -0.75843,0"
+         id="path3058"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,20.61612 -0.75843,0"
+         id="path3062"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,16.61612 -0.75843,0"
+         id="path3066"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+      <path
+         style="opacity:1;fill:#2e3436;fill-opacity:0.75;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.99999964px;stroke-linecap:square;stroke-linejoin:miter;stroke-opacity:1"
+         d="m 43.506026,12.61612 -0.75843,0"
+         id="path3070"
+         inkscape:r_cx="true"
+         inkscape:r_cy="true"
+         inkscape:connector-curvature="0" />
+    </g>
+    <path
+       inkscape:connector-curvature="0"
+       id="path3764"
+       d="m 325.05951,228.82365 0,-9.54614 -10.09252,0 -10.09253,0 0,-3.98944 0,-3.98944 10.09253,0 10.09252,0 0,-9.45117 0,-9.45117 4.23886,0 4.23885,0 0,9.45117 0,9.45117 10.09253,0 10.0925,0 0,3.98944 0,3.98944 -10.0925,0 -10.09253,0 0,9.54614 0,9.54615 -4.23885,0 -4.23886,0 0,-9.54615 z"
+       style="fill:#008080;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.15389442;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Custom.svg b/Bundles/media/rc/icons/Custom.svg
new file mode 100644
index 0000000..17904b3
--- /dev/null
+++ b/Bundles/media/rc/icons/Custom.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Custom.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="38.995815"
+     inkscape:cy="74.199779"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:135.91946411000000694px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#002855;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="296.13153"
+       y="221.4912"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.9159612,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="296.13153"
+         y="221.4912"
+         style="font-weight:bold;fill:#002855;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold">C</tspan></text>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/DicomSeries.svg b/Bundles/media/rc/icons/DicomSeries.svg
new file mode 100644
index 0000000..ef8459e
--- /dev/null
+++ b/Bundles/media/rc/icons/DicomSeries.svg
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="DicomSeries.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="-46.361328"
+     inkscape:cy="43.12835"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <text
+       xml:space="preserve"
+       style="font-size:108.76456450999999959px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#002855;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="297.75156"
+       y="211.65955"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.9159612,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="297.75156"
+         y="211.65955"
+         style="font-weight:bold;fill:#002855;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;fill-opacity:1">D</tspan></text>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/LoadActivity.svg b/Bundles/media/rc/icons/LoadActivity.svg
new file mode 100644
index 0000000..5d3f157
--- /dev/null
+++ b/Bundles/media/rc/icons/LoadActivity.svg
@@ -0,0 +1,272 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="LoadActivity.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8033817"
+     inkscape:cx="7.6465365"
+     inkscape:cy="115.87617"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1740"
+     inkscape:window-height="1448"
+     inkscape:window-x="818"
+     inkscape:window-y="299"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs3007">
+    <linearGradient
+       id="linearGradient3836">
+      <stop
+         style="stop-color:#fff8da;stop-opacity:1"
+         offset="0"
+         id="stop3838" />
+      <stop
+         id="stop3846"
+         offset="0.6883117"
+         style="stop-color:#ffd45e;stop-opacity:1;" />
+      <stop
+         style="stop-color:#d49800;stop-opacity:1;"
+         offset="1"
+         id="stop3840" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutM"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutM">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="fill-rule:evenodd;fill:#FFFFFF;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4313" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="TriangleOutL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="TriangleOutL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4292" />
+    </marker>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient5522">
+      <stop
+         id="stop5524"
+         offset="0"
+         style="stop-color:#00da00;stop-opacity:1;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="SquareL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="SquareL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         id="path4220" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4176" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4152" />
+    </marker>
+    <linearGradient
+       id="linearGradient3811"
+       inkscape:collect="always">
+      <stop
+         id="stop3813"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3815"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient3797">
+      <stop
+         id="stop3799"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="187.79788"
+       x2="310.13318"
+       y1="187.79788"
+       x1="296.21085"
+       id="linearGradient3817"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend5"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend5">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path9748" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mendi"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mendi">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path10835" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutMP"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutMP">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="stroke-width:1.0pt;marker-start:none;stroke:#000091;fill:#000091;fill-rule:evenodd"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path11676" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3010">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-237.3183,-121.94415)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3013"
+       y="272.52441"
+       x="246.47722"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         y="272.52441"
+         x="246.47722"
+         id="tspan3015"
+         sodipodi:role="line" /></text>
+    <rect
+       ry="9.9183826"
+       y="126.94415"
+       x="242.3183"
+       height="121.70744"
+       width="121.70744"
+       id="rect3023"
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <flowRoot
+       transform="translate(241.5368,126.16265)"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       id="flowRoot3761"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3763"><rect
+           y="3.5673711"
+           x="-35.860416"
+           height="148.9975"
+           width="213.39473"
+           id="rect3765" /></flowRegion><flowPara
+         id="flowPara3767" /></flowRoot>    <rect
+       style="fill:#ffdb3f;fill-opacity:1;stroke:#000000;stroke-width:1.83965158;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3018"
+       width="79.999207"
+       height="57.586411"
+       x="264.0455"
+       y="162.07393" />
+    <rect
+       style="fill:#fff8da;fill-opacity:1;stroke:#000000;stroke-width:1.83995569;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3848"
+       width="73.194298"
+       height="5.8397489"
+       x="267.03302"
+       y="156.07195" />
+    <path
+       style="fill:#fff8da;fill-opacity:1;stroke:#000000;stroke-width:1.83995569;stroke-miterlimit:4;stroke-opacity:1;stroke-dashoffset:0"
+       d="m 269.85453,152.1788 34.49402,0 0,3.79814 -34.49402,0 z"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       style="fill:#fff8da;fill-opacity:1;stroke:none"
+       d="m 270.67457,154.89668 32.73359,0 0,2.30698 -32.73359,0 z"
+       id="rect3850" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Minus.svg b/Bundles/media/rc/icons/Minus.svg
new file mode 100644
index 0000000..aacb5f7
--- /dev/null
+++ b/Bundles/media/rc/icons/Minus.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Minus.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.69999999"
+     inkscape:cx="-44.563175"
+     inkscape:cy="157.24814"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <rect
+       style="fill:#6e0000;fill-opacity:1;stroke:#000000;stroke-width:1.70593321;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect2992"
+       width="79.51104"
+       height="17.5"
+       x="276.29135"
+       y="179.04688" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Modifier.svg b/Bundles/media/rc/icons/Modifier.svg
new file mode 100644
index 0000000..b670e3b
--- /dev/null
+++ b/Bundles/media/rc/icons/Modifier.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Modifier.svg">
+  <defs
+     id="defs3007">
+    <linearGradient
+       id="linearGradient3766">
+      <stop
+         style="stop-color:#880045;stop-opacity:1;"
+         offset="0"
+         id="stop3768" />
+      <stop
+         style="stop-color:#ff0986;stop-opacity:1;"
+         offset="1"
+         id="stop3770" />
+    </linearGradient>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.959798"
+     inkscape:cx="25.245128"
+     inkscape:cy="65.895129"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscscc"
+       id="path15341"
+       d="m 330.09609,188.98443 -40.0749,-31.61078 40.95954,-31.88967 -0.0205,18.7072 c 0,0 17.02545,-2.37623 27.12968,7.07781 10.10413,9.45396 10.04516,31.42364 10.04516,31.42364 0,0 -5.58568,-9.76293 -15.83232,-13.35778 -10.24656,-3.59481 -21.91303,-1.70711 -21.91303,-1.70711 l -0.29243,21.35669 z"
+       style="fill:#721e53;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.44748759000000016;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscscc"
+       id="path15341-4"
+       d="m 301.99756,186.60934 40.0749,31.61078 -40.95954,31.88965 0.0206,-18.7072 c 0,0 -17.02545,2.37623 -27.12968,-7.0778 -10.10413,-9.45398 -10.04516,-31.42364 -10.04516,-31.42364 0,0 5.58568,9.76293 15.83233,13.35778 10.24655,3.59481 21.91302,1.70711 21.91302,1.70711 l 0.29239,-21.35668 z"
+       style="fill:#721e53;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.44748759000000016;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Plus.svg b/Bundles/media/rc/icons/Plus.svg
new file mode 100644
index 0000000..eeb82b8
--- /dev/null
+++ b/Bundles/media/rc/icons/Plus.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Plus.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="94.691072"
+     inkscape:cy="57.722466"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="1021"
+     inkscape:window-x="1680"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3764"
+       d="m 308.54688,213.06473 0,-17.94643 -17.85714,0 -17.85715,0 0,-7.5 0,-7.5 17.85715,0 17.85714,0 0,-17.76785 0,-17.76786 7.5,0 7.5,0 0,17.76786 0,17.76785 17.85714,0 17.85714,0 0,7.5 0,7.5 -17.85714,0 -17.85714,0 0,17.94643 0,17.94643 -7.5,0 -7.5,0 0,-17.94643 z"
+       style="fill:#006088;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.89400000000000013;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Preview.svg b/Bundles/media/rc/icons/Preview.svg
new file mode 100644
index 0000000..5e3c06b
--- /dev/null
+++ b/Bundles/media/rc/icons/Preview.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Preview.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="29.804615"
+     inkscape:cy="65.351129"
+     inkscape:document-units="px"
+     inkscape:current-layer="g2246"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <g
+       transform="matrix(0.19136096,0,0,0.19136096,267.05847,122.1181)"
+       id="g2246">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#999999;opacity:0"
+         d="m 0,343.2193 0,-256.000001 256,0 256,0 0,256.000001 0,256 -256,0 -256,0 0,-256 z"
+         id="path2250" />
+      <g
+         id="XMLID_13_"
+         transform="matrix(9.6692781,0,0,9.6692781,-253.93504,-138.68286)"
+         style="fill:#1d3349;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:1.08089275000000007;stroke-miterlimit:4;stroke-dasharray:none">
+        <g
+           id="g4"
+           style="fill:#1d3349;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:1.08089275000000007;stroke-miterlimit:4;stroke-dasharray:none">
+          <g
+             id="XMLID_10_"
+             style="fill:#1d3349;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:1.08089275000000007;stroke-miterlimit:4;stroke-dasharray:none">
+            <g
+               id="g7"
+               style="fill:#1d3349;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:1.08089275000000007;stroke-miterlimit:4;stroke-dasharray:none">
+              <path
+                 d="M 69.902,72.704 58.967,61.769 c -2.997,1.961 -6.579,3.111 -10.444,3.111 -10.539,0 -19.062,-8.542 -19.062,-19.081 0,-10.519 8.522,-19.061 19.062,-19.061 10.521,0 19.06,8.542 19.06,19.061 0,3.679 -1.036,7.107 -2.828,10.011 l 11.013,11.011 c 0.583,0.567 0.094,1.981 -1.076,3.148 l -1.64,1.644 c -1.17,1.167 -2.584,1.656 -3.15,1.091 z M 61.249,45.799 c 0,-7.033 -5.695,-12.727 -12.727,-12.727 -7.033,0 -12.745,5.694 -12.745,12.727 0,7.033 5.712,12.745 12.745,12.745 7.032,0 12 [...]
+                 id="path9"
+                 inkscape:connector-curvature="0"
+                 style="fill:#1d3349;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:1.08089275000000007;stroke-miterlimit:4;stroke-dasharray:none" />
+            </g>
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Pull.svg b/Bundles/media/rc/icons/Pull.svg
new file mode 100644
index 0000000..7294fea
--- /dev/null
+++ b/Bundles/media/rc/icons/Pull.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Pull.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.959798"
+     inkscape:cx="59.853754"
+     inkscape:cy="73.664184"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscscc"
+       id="path15341"
+       d="m 354.19835,186.57364 -37.98393,48.15454 -38.31902,-49.21752 22.47882,0.0247 c 0,0 -2.85531,-20.45802 8.50477,-32.5994 11.36002,-12.14124 37.75906,-12.07038 37.75906,-12.07038 0,0 -11.73126,6.71181 -16.05088,19.02433 -4.31957,12.31239 -2.05128,26.33097 -2.05128,26.33097 l 25.66246,0.35133 z"
+       style="fill:#a3c800;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.20771074;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Push.svg b/Bundles/media/rc/icons/Push.svg
new file mode 100644
index 0000000..e012ee9
--- /dev/null
+++ b/Bundles/media/rc/icons/Push.svg
@@ -0,0 +1,122 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Push.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.959798"
+     inkscape:cx="10.861356"
+     inkscape:cy="73.664184"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <path
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="ccccscscc"
+       id="path15341"
+       d="m 277.8954,189.02011 37.98393,-48.15454 38.31902,49.21752 -22.47882,-0.0247 c 0,0 2.85531,20.45802 -8.50477,32.5994 -11.36002,12.14124 -37.75906,12.07038 -37.75906,12.07038 0,0 11.73126,-6.71181 16.05088,-19.02433 4.31957,-12.31239 2.05128,-26.33097 2.05128,-26.33097 l -25.66246,-0.35133 z"
+       style="fill:#0097c8;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.20771073999999956;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Settings.svg b/Bundles/media/rc/icons/Settings.svg
new file mode 100644
index 0000000..003735d
--- /dev/null
+++ b/Bundles/media/rc/icons/Settings.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Settings.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="5.6"
+     inkscape:cx="13.603414"
+     inkscape:cy="53.928343"
+     inkscape:document-units="px"
+     inkscape:current-layer="g2246"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <g
+       transform="matrix(0.19136096,0,0,0.19136096,267.05847,122.1181)"
+       id="g2246">
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#999999;opacity:0"
+         d="m 0,343.2193 0,-256.000001 256,0 256,0 0,256.000001 0,256 -256,0 -256,0 0,-256 z"
+         id="path2250" />
+      <path
+         inkscape:connector-curvature="0"
+         style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:4.55899798"
+         d="m 419.7259,577.84737 c -0.632,-0.32925 -1.32127,-0.8614 -1.5317,-1.18255 -0.21045,-0.32117 -0.7621,-0.9794 -1.2259,-1.46272 -1.39407,-1.45273 -4.33645,-4.76145 -5.62958,-6.33048 -2.96217,-3.5942 -7.13442,-8.3504 -11.07907,-12.62972 -1.02593,-1.113 -1.9741,-2.22028 -2.10702,-2.4606 -0.13293,-0.24035 -1.11056,-1.40805 -2.1725,-2.59488 -1.06196,-1.18682 -2.05701,-2.39362 -2.2112,-2.68177 -0.15423,-0.28815 -0.53093,-0.66328 -0.83715,-0.83363 -0.54248,-0.30175 -1.20811,-0.3872 -7. [...]
+         id="path2248" />
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Sorter.svg b/Bundles/media/rc/icons/Sorter.svg
new file mode 100644
index 0000000..84c269f
--- /dev/null
+++ b/Bundles/media/rc/icons/Sorter.svg
@@ -0,0 +1,246 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Sorter.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.9645804"
+     inkscape:cx="-36.879857"
+     inkscape:cy="62.497931"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs3007">
+    <linearGradient
+       id="linearGradient3829">
+      <stop
+         style="stop-color:#003d57;stop-opacity:1;"
+         offset="0"
+         id="stop3831" />
+      <stop
+         style="stop-color:#3fc7ff;stop-opacity:1;"
+         offset="1"
+         id="stop3833" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutM"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutM">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="fill-rule:evenodd;fill:#FFFFFF;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4313" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="TriangleOutL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="TriangleOutL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4292" />
+    </marker>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient5522">
+      <stop
+         id="stop5524"
+         offset="0"
+         style="stop-color:#00da00;stop-opacity:1;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="SquareL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="SquareL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         id="path4220" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4176" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4152" />
+    </marker>
+    <linearGradient
+       id="linearGradient3811"
+       inkscape:collect="always">
+      <stop
+         id="stop3813"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3815"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient3797">
+      <stop
+         id="stop3799"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="187.79788"
+       x2="310.13318"
+       y1="187.79788"
+       x1="296.21085"
+       id="linearGradient3817"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend5"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend5">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path9748" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mendi"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mendi">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path10835" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutMP"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutMP">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="stroke-width:1.0pt;marker-start:none;stroke:#000091;fill:#000091;fill-rule:evenodd"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path11676" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-237.3183,-121.94415)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
+    <g
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       id="text3013" />
+    <g
+       transform="translate(241.5368,126.16265)"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       id="flowRoot3761" />
+    <path
+       style="opacity:0;fill:#23bf8e;fill-opacity:1;stroke:#0b61a4;stroke-width:1.87202501;stroke-opacity:1"
+       d="m 298.26885,214.55856 15.76264,0 c 4.95103,0 8.93688,3.98585 8.93688,8.93688 l 0,21.44447 c 0,4.95103 -3.98585,8.93688 -8.93688,8.93688 l -15.76264,0 c -4.95103,0 -8.93688,-3.98585 -8.93688,-8.93688 l 0,-21.44447 c 0,-4.95103 3.98585,-8.93688 8.93688,-8.93688 z"
+       id="rect3056" />
+    <path
+       style="opacity:0;fill:#23bf8e;fill-opacity:1;stroke:#0b61a4;stroke-width:2.07762241;stroke-opacity:1"
+       d="m -190.60725,14.923332 9.67455,0 c 5.49479,0 9.91839,4.423599 9.91839,9.918383 l 0,30.3577 c 0,5.494784 -4.4236,9.918383 -9.91839,9.918383 l -9.67455,0 c -5.49479,0 -9.91838,-4.423599 -9.91838,-9.918383 l 0,-30.3577 c 0,-5.494784 4.42359,-9.918383 9.91838,-9.918383 z"
+       id="rect3874"
+       transform="translate(237.3183,121.94415)" />
+    <path
+       style="opacity:0;fill:#23bf8e;fill-opacity:1;stroke:#0b61a4;stroke-width:2.07762241;stroke-opacity:1"
+       d="m -194.13852,37.119881 12.19689,0 c 5.49478,0 9.91838,4.423598 9.91838,9.918382 l 0,23.295163 c 0,5.494784 -4.4236,9.918382 -9.91838,9.918382 l -12.19689,0 c -5.49478,0 -9.91838,-4.423598 -9.91838,-9.918382 l 0,-23.295163 c 0,-5.494784 4.4236,-9.918382 9.91838,-9.918382 z"
+       id="rect3876"
+       transform="translate(237.3183,121.94415)" />
+    <path
+       style="fill:#21365b;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 272.57953,134.5907 -31.20739,46.01448 20.28951,0.0937 -2e-5,60.30614 22.30438,2e-5 0,-60.21244 20.33635,0.0937 -31.72283,-46.29562 z"
+       id="path12133-3-3"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:#21365b;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 333.7645,241.00502 31.2074,-46.01448 -20.2895,-0.0937 1e-5,-60.30614 -22.30439,-2e-5 0,60.21244 -20.33633,-0.0937 31.72281,46.29562 z"
+       id="path12133-3-3-0"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Split.svg b/Bundles/media/rc/icons/Split.svg
new file mode 100644
index 0000000..d910b34
--- /dev/null
+++ b/Bundles/media/rc/icons/Split.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Split.svg">
+  <defs
+     id="defs3007">
+    <linearGradient
+       id="linearGradient3766">
+      <stop
+         style="stop-color:#880045;stop-opacity:1;"
+         offset="0"
+         id="stop3768" />
+      <stop
+         style="stop-color:#ff0986;stop-opacity:1;"
+         offset="1"
+         id="stop3770" />
+    </linearGradient>
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="-58.012589"
+     inkscape:cy="46.422099"
+     inkscape:document-units="px"
+     inkscape:current-layer="Layer 1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <g
+       transform="matrix(0.16621132,0,0,0.16621132,259.86025,130.94334)"
+       style="fill-rule:evenodd"
+       id="Layer 1">
+      <path
+         inkscape:connector-curvature="0"
+         class="fil0"
+         d="m 99.799695,143.08713 c -81.592109,72.52636 12.591375,192.39628 100.227365,141.02346 0,-101.73835 150.59288,-123.39553 172.25005,-16.62062 -8.05849,-87.63601 -82.09578,-156.63676 -172.25005,-156.63676 -37.27047,0 -72.02268,12.08772 -100.227365,32.23392 z"
+         id="path9"
+         style="fill:#21365b;fill-opacity:1;stroke:#000000;stroke-width:6.06041861;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil1"
+         d="M 606.6463,156.01968 C 584.98913,49.244829 434.39625,70.90199 434.39625,172.6403 c 88.6433,50.36551 31.73028,191.8926 -72.02268,157.64405 80.58482,36.76683 177.2866,6.54752 222.1119,-71.01537 18.63524,-32.23392 25.68642,-68.49709 22.16083,-103.2493 z"
+         id="path11"
+         style="fill:#721e53;fill-opacity:1;stroke:#000000;stroke-width:6.06041861;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <path
+         inkscape:connector-curvature="0"
+         class="fil2"
+         d="m 351.13707,593.34416 c 103.75295,34.24854 160.66598,-107.27854 72.02268,-157.64405 -87.63599,51.37282 -181.81951,-68.4971 -100.22738,-141.02342 -72.02269,50.86916 -94.68716,149.58555 -49.86186,227.6521 19.13889,32.23393 46.33628,56.40937 78.06656,71.01537 z"
+         id="path13"
+         style="fill:#234c20;fill-opacity:1;stroke:#000000;stroke-width:6.06041861;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         style="fill:none;stroke:#000000;stroke-width:60.16437531;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+         id="rect3023"
+         width="732.24524"
+         height="732.24524"
+         x="-28.079308"
+         y="-24.066887"
+         ry="59.673328" />
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/Splitter.svg b/Bundles/media/rc/icons/Splitter.svg
new file mode 100644
index 0000000..d59335e
--- /dev/null
+++ b/Bundles/media/rc/icons/Splitter.svg
@@ -0,0 +1,241 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Splitter.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4016908"
+     inkscape:cx="-273.06917"
+     inkscape:cy="112.6821"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs3007">
+    <linearGradient
+       id="linearGradient5272">
+      <stop
+         style="stop-color:#008806;stop-opacity:1;"
+         offset="0"
+         id="stop5274" />
+      <stop
+         style="stop-color:#c1e400;stop-opacity:1;"
+         offset="1"
+         id="stop5276" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutM"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutM">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="fill-rule:evenodd;fill:#FFFFFF;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4313" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="TriangleOutL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="TriangleOutL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4292" />
+    </marker>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient5522">
+      <stop
+         id="stop5524"
+         offset="0"
+         style="stop-color:#00da00;stop-opacity:1;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="SquareL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="SquareL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         id="path4220" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4176" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4152" />
+    </marker>
+    <linearGradient
+       id="linearGradient3811"
+       inkscape:collect="always">
+      <stop
+         id="stop3813"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3815"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient3797">
+      <stop
+         id="stop3799"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="187.79788"
+       x2="310.13318"
+       y1="187.79788"
+       x1="296.21085"
+       id="linearGradient3817"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend5"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend5">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path9748" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mendi"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mendi">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path10835" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutMP"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutMP">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="stroke-width:1.0pt;marker-start:none;stroke:#000091;fill:#000091;fill-rule:evenodd"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path11676" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-237.3183,-121.94415)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
+    <g
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       id="text3013" />
+    <g
+       transform="translate(241.5368,126.16265)"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       id="flowRoot3761" />
+    <path
+       style="opacity:0;fill:#23bf8e;fill-opacity:1;stroke:#0b61a4;stroke-width:1.87202501;stroke-opacity:1"
+       d="m 298.26885,214.55856 15.76264,0 c 4.95103,0 8.93688,3.98585 8.93688,8.93688 l 0,21.44447 c 0,4.95103 -3.98585,8.93688 -8.93688,8.93688 l -15.76264,0 c -4.95103,0 -8.93688,-3.98585 -8.93688,-8.93688 l 0,-21.44447 c 0,-4.95103 3.98585,-8.93688 8.93688,-8.93688 z"
+       id="rect3056" />
+    <path
+       transform="translate(237.3183,121.94415)"
+       style="opacity:0;fill:#23bf8e;fill-opacity:1;stroke:#0b61a4;stroke-width:2.07762241;stroke-opacity:1"
+       d="m -190.60725,14.923332 9.67455,0 c 5.49479,0 9.91839,4.423599 9.91839,9.918383 l 0,30.3577 c 0,5.494784 -4.4236,9.918383 -9.91839,9.918383 l -9.67455,0 c -5.49479,0 -9.91838,-4.423599 -9.91838,-9.918383 l 0,-30.3577 c 0,-5.494784 4.42359,-9.918383 9.91838,-9.918383 z"
+       id="rect3874" />
+    <path
+       transform="translate(237.3183,121.94415)"
+       style="opacity:0;fill:#23bf8e;fill-opacity:1;stroke:#0b61a4;stroke-width:2.07762241;stroke-opacity:1"
+       d="m -194.13852,37.119881 12.19689,0 c 5.49478,0 9.91838,4.423598 9.91838,9.918382 l 0,23.295163 c 0,5.494784 -4.4236,9.918382 -9.91838,9.918382 l -12.19689,0 c -5.49478,0 -9.91838,-4.423598 -9.91838,-9.918382 l 0,-23.295163 c 0,-5.494784 4.4236,-9.918382 9.91838,-9.918382 z"
+       id="rect3876" />
+    <path
+       style="fill:#234c20;fill-opacity:1;stroke:#000000;stroke-width:1.91549075000000002;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 358.51174,127.50481 -48.90487,9.36794 12.80984,12.89964 -24.03342,24.03342 -3.41197,3.41197 -47.43832,0 0,21.16018 47.13903,0 27.68482,27.68483 -12.92956,12.80984 49.38375,9.2183 -9.36795,-48.87494 -12.89963,12.77992 -24.06336,-24.06336 23.97357,-23.97356 12.80984,12.92956 9.24823,-49.38374 z"
+       id="path12133-3-3"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/icon-Anonymization.svg b/Bundles/media/rc/icons/icon-Anonymization.svg
new file mode 100644
index 0000000..2e077c0
--- /dev/null
+++ b/Bundles/media/rc/icons/icon-Anonymization.svg
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="icon-Anonymization.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5204">
+      <stop
+         offset="0"
+         style="stop-color:#0a1ba1;stop-opacity:1"
+         id="stop5206" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="91.631134"
+     inkscape:cy="46.622321"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1104"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <g
+       id="layer1-7"
+       transform="matrix(0.34184662,0,0,0.35338962,264.2648,-164.66057)">
+      <path
+         inkscape:connector-curvature="0"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.382;marker:none;visibility:visible;display:inline;overflow:visible [...]
+         id="path3052"
+         d="m 58.552755,945.05674 c -16.62525,0.13664 -29.16344,4.36796 -38.21992,12.03757 -9.34866,7.91702 -14.97921,19.48588 -17.64199,33.9744 l 0,0.0325 0.0131,0.0435 c 8.86079,24.30879 20.43124,39.28389 33.34414,47.99829 12.91283,8.7146 27.15304,11.1558 41.30003,10.3987 14.14691,-0.7572 28.209925,-4.703 40.788835,-8.7379 12.55928,-4.0286 23.65729,-8.1426 31.86305,-9.2914 8.20576,1.1488 19.3038,5.2628 31.86304,9.2914 13.27578,4.6886 25.93073,7.8578 40.78886,8.7379 12.58563,0.6735 25.6 [...]
+    </g>
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/icon-DICOM-Filtering.svg b/Bundles/media/rc/icons/icon-DICOM-Filtering.svg
new file mode 100644
index 0000000..fb367e7
--- /dev/null
+++ b/Bundles/media/rc/icons/icon-DICOM-Filtering.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="icon-DICOM-Reader.svg">
+  <defs
+     id="defs3007">
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8"
+     inkscape:cx="-19.932757"
+     inkscape:cy="69.199779"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="967"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3764"
+       d="m 308.54688,213.06473 0,-17.94643 -17.85714,0 -17.85715,0 0,-7.5 0,-7.5 17.85715,0 17.85714,0 0,-17.76785 0,-17.76786 7.5,0 7.5,0 0,17.76786 0,17.76785 17.85714,0 17.85714,0 0,7.5 0,7.5 -17.85714,0 -17.85714,0 0,17.94643 0,17.94643 -7.5,0 -7.5,0 0,-17.94643 z"
+       style="fill:#002855;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.71428572999999995;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+  </g>
+</svg>
diff --git a/Bundles/media/rc/icons/sending.svg b/Bundles/media/rc/icons/sending.svg
new file mode 100644
index 0000000..be6dcc4
--- /dev/null
+++ b/Bundles/media/rc/icons/sending.svg
@@ -0,0 +1,217 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.71875"
+   height="131.71875"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="Network-Receiving.svg">
+  <defs
+     id="defs3007">
+    <pattern
+       inkscape:collect="always"
+       xlink:href="#Strips1_1"
+       id="pattern5333"
+       patternTransform="matrix(60.523928,0,0,61.110479,271.65464,-166.61821)" />
+    <pattern
+       inkscape:stockid="Stripes 1:1"
+       id="Strips1_1"
+       patternTransform="translate(0,0) scale(10,10)"
+       height="1"
+       width="2"
+       patternUnits="userSpaceOnUse"
+       inkscape:collect="always">
+      <rect
+         id="rect4510"
+         height="2"
+         width="1"
+         y="-0.5"
+         x="0"
+         style="fill:black;stroke:none" />
+    </pattern>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 65.859375 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="131.71875 : 65.859375 : 1"
+       inkscape:persp3d-origin="65.859375 : 43.90625 : 1"
+       id="perspective5225" />
+    <marker
+       inkscape:stockid="Arrow1Lstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow1Lstart"
+       style="overflow:visible">
+      <path
+         id="path3822"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(0.8) translate(12.5,0)" />
+    </marker>
+    <linearGradient
+       id="linearGradient3797"
+       osb:paint="solid">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3799" />
+    </linearGradient>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="2.8284271"
+     inkscape:cx="65.622162"
+     inkscape:cy="22.728178"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1024"
+     inkscape:window-x="1920"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="false" />
+  <metadata
+     id="metadata3010">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Calque 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-250.1875,-121.9375)">
+    <text
+       xml:space="preserve"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       x="246.47722"
+       y="272.52441"
+       id="text3013"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3015"
+         x="246.47722"
+         y="272.52441" /></text>
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;opacity:1;"
+       id="rect3023"
+       width="121.70744"
+       height="121.70744"
+       x="255.19417"
+       y="126.94415"
+       ry="9.9183826" />
+    <text
+       xml:space="preserve"
+       style="font-size:50.0000003px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#005544;fill-opacity:1;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans Bold"
+       x="291.01212"
+       y="211.66046"
+       id="text3025"
+       sodipodi:linespacing="125%"
+       transform="scale(0.91596119,1.0917493)"><tspan
+         sodipodi:role="line"
+         id="tspan3027"
+         x="291.01212"
+         y="211.66046"
+         style="font-weight:bold;fill:#005544;stroke:#000000;stroke-width:0.30863425000000000;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;-inkscape-font-specification:DejaVu Sans Bold;font-size:50.0000003px" /></text>
+    <path
+       id="path2250"
+       d="m 263.05847,191.15563 0,-52.34716 51.2865,0 51.2865,0 0,52.34716 0,52.34717 -51.2865,0 -51.2865,0 0,-52.34717 z"
+       style="opacity:0;fill:#999999"
+       inkscape:connector-curvature="0" />
+    <rect
+       y="144.78503"
+       x="307.68237"
+       height="83.128899"
+       width="53.776169"
+       id="rect5241"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.089;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       y="155.05588"
+       x="315.12781"
+       height="1.1448882"
+       width="20.751272"
+       id="rect5248"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.09583306;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       y="196.81671"
+       x="315.81265"
+       height="0.18889691"
+       width="36.273617"
+       id="rect5250"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.09583306;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       y="218.88953"
+       x="315.62759"
+       height="0.18889691"
+       width="36.273617"
+       id="rect5250-1"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.09583306;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <rect
+       y="207.90034"
+       x="315.62759"
+       height="0.18889691"
+       width="36.273617"
+       id="rect5250-3"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.09583306;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <path
+       transform="matrix(1.7802291,0,0,1.8170463,385.80839,74.58794)"
+       d="m -18.208,44.656227 a 1.4142135,1.3258252 0 1 1 -2.828427,0 1.4142135,1.3258252 0 1 1 2.828427,0 z"
+       sodipodi:ry="1.3258252"
+       sodipodi:rx="1.4142135"
+       sodipodi:cy="44.656227"
+       sodipodi:cx="-19.622213"
+       id="path5277"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.92700005;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:type="star"
+       style="fill:#000091;fill-opacity:1;stroke:#ffffff;stroke-width:2.31781626;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path12133"
+       sodipodi:sides="3"
+       sodipodi:cx="34.957779"
+       sodipodi:cy="28.26095"
+       sodipodi:r1="17.229597"
+       sodipodi:r2="8.6147985"
+       sodipodi:arg1="2.0943951"
+       sodipodi:arg2="3.1415927"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 26.34298,43.182219 0,-29.842538 25.844396,14.921269 z"
+       transform="matrix(1.4233628,0,0,1.5733162,260.54377,136.80345)"
+       inkscape:transform-center-x="-17.20397" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path7303"
+       d="m 272.70251,181.78301 29.18251,0 0,0"
+       style="fill:#258600;fill-opacity:1;stroke:#000091;stroke-width:17.03572464;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:none" />
+  </g>
+</svg>
diff --git a/Bundles/LeafUI/uiImageQt/rc/sliceHide.png b/Bundles/media/rc/icons/sliceHide.png
similarity index 100%
rename from Bundles/LeafUI/uiImageQt/rc/sliceHide.png
rename to Bundles/media/rc/icons/sliceHide.png
diff --git a/Bundles/LeafUI/uiImageQt/rc/sliceShow.png b/Bundles/media/rc/icons/sliceShow.png
similarity index 100%
rename from Bundles/LeafUI/uiImageQt/rc/sliceShow.png
rename to Bundles/media/rc/icons/sliceShow.png
diff --git a/Bundles/media/rc/plugin.xml b/Bundles/media/rc/plugin.xml
index c41a0d7..89e431b 100644
--- a/Bundles/media/rc/plugin.xml
+++ b/Bundles/media/rc/plugin.xml
@@ -1,2 +1,2 @@
-<plugin id="media">
+<plugin id="media" version="@DASH_VERSION@" >
 </plugin>
diff --git a/CHANGELOG.txt b/CHANGELOG.txt
index 6f66d04..378595a 100644
--- a/CHANGELOG.txt
+++ b/CHANGELOG.txt
@@ -1,3 +1,100 @@
+=== fw4spl_0.9.2.3 ( diff from fw4spl_0.9.2.2 ) 10/09/2014 ===
+
+ * Transplanted from fw4spl_0.10.0:
+  * Removed all services working on deprecated data PatientDB
+  * Removed ARLcore dependency in uiMeasurement : load/save landmarks with ioAtoms
+  * Moved Examples, POC and Training to fw4spl-ext repository
+  * Fixed AppConfig::getUniqueIdentifier()
+  * Fixed wrong warning in PushObjectSrv.
+  * Fixed gui doxygen (menuBar and toolBar)
+  * Removed useless notify in TransferFunctionEditor::initTransferFunctions()
+
+ * General:
+  * Updated fwAtomsPatch and spyLogger according to Bost 1.54
+  * Removed author field in doxygen
+  * Fixed Mac OS issue with Qt (QTBUG-32789)
+  * Fixed ProfileRunner for Mac OS
+  * Fixed guiQt, SliceCursor and WindowLevel memory leak
+  * Moved gdcmIO, ioGdcm and ioGdcmQt to FW4SPL-ext
+  * Added CMakeLists
+  * Removed useless SelectedNodeIOUpdater service
+
+ * Core:
+  * Added getConfigDesc in fwServices
+  * Fixed timer asio one shot
+  * Changed SigSevBacktrace log level to ERROR
+  * Fixed PushObjectSrv
+  * Added 'launched' signal to ConfigActionSrv and SConfigLauncher
+  * Added 'updated' signal on Graph and Node
+  * Optimized Graph route
+  * Added SSignal service
+  * Updated template arguments to manage five parameters in fwCom
+  * Fixed fwRuntime compilation on Linux
+  * Added support of ! operator in seshat path (returns a string pointed by the seshat path if possible, the uid otherwise)
+  * Allowed empty string in XML <parameter> default value.
+
+ * Memory dump system
+  * Set default streamFactory when buffer's streamFactory was never explicitly set
+  * Fixed buffer lock and buffer streams
+  * Fixed an issue due to some implementations returning a non-NULL pointer for malloc(0) in buffer allocation
+  * Fixed BufferManager and StructureTraits binding
+  * Added getTemporaryFolder in System
+
+ * IO:
+  * Fixed fwData::Array initialization in vtkGdcmIO/fwVtkIO SeriesDB reader
+  * Fixed zipped json/xml loading
+  * Updated ioAtoms to be able to overwrite a lazy-loaded file
+  * Added custom extensions ability in ioAtoms
+  * Fixed atom custom extension when using JSON/XML backends
+
+ * UI:
+  * Added a way to configure button state
+  * Fixed relative URLs in uiGenericQt::action::LaunchBrowserActionService
+  * Updated IOSelector to display config's description if applicable
+  * Fixed compilation of DataInfoFromMsgUpdaterSrv
+  * Updated SExportSeries to use an existing activity description or physician name
+  * Added ability to pass parameters in config
+  * Updated Qt MessageDialog to manage a default button
+  * Added several editors and services to propose a new export config
+  * Set SShowAbout to modal
+
+ * Tools:
+  * Added fwDataTools::TransformationMatrix3D to manipulate ::fwData::TransformationMatrix3D
+  * Removed useless dimension check for medical images
+  * Added lib fwMedDataTools to manage fwMedData UID
+
+ * Visu:
+  * Added autoRender option in genericScene
+  * Added ability of hidding cropping box by default in visuVTKVRAdaptor::Volume
+  * Added locks in VTK adaptors
+  * Updated VTK text adaptor to manage Seshat path, text alignment and font size
+  * Added patient name in all generic scene.
+
+ * Patch system:
+  * Fixed fatal when visiting enum object in ::fwDataCamp::visitor::getObject class.
+  * Added medical workspace filtering for MedicalData V2 context
+  * Added ImageSeries and ActivitySeries to fwStructuralPatch
+  * Added resection patching in MedicalData V2 context
+
+ * Activities:
+  * Added activity validator concept to fwActivites
+  * Added image properties validator
+  * Added new option for SActivityLauncher to define a default association
+  * Made activity launch cancelable
+  * Added a new validator for authorizing activity launching with several series from the same study
+  * Added seshat path ability in activity launcher
+
+ * UT:
+  * Fixed several compilation issues (b4be6561e715 and 20ff6c2d0cda)
+  * Fixed working directory
+
+ * Software:
+  * Updated VRRender activities:
+   * 3DVisualisationActivity
+   * blendActivity
+   * volumeRenderingActivity
+
+
 === fw4spl_0.9.2.2 ( diff from fw4spl_0.9.2.1 ) 20/06/2013 ===
  
  * Transplanted from fw4spl_0.9.1.4.:
@@ -622,7 +719,7 @@
   * Method to convert a ::fwData::TransferFunction to vtk lookup table are added in vtkIO::helper::TransfertFunction
   * It's possible now for negato or volume rendering or window level interactor to work only on a specific transfert function
   * All image messages concerning window/level or transfer function has been removed, no messages are send directly on the tf
-  * Evolution of ::fwComEd::helper::MedicalImageAdaptor to provide some helpers to manipulate transfer function in your service
+  * Evolution of ::fwDataTools::helper::MedicalImageAdaptor to provide some helpers to manipulate transfer function in your service
 
  * Other :
   * Add new macros API to generate getter/setter for fwData
diff --git a/CMake/Modules/FindCAMP.cmake b/CMake/Modules/FindCAMP.cmake
deleted file mode 100644
index df132ba..0000000
--- a/CMake/Modules/FindCAMP.cmake
+++ /dev/null
@@ -1,48 +0,0 @@
-# Locate CAMP library
-# This module defines
-#  CAMP_FOUND, if false, do not try to link to CAMP
-#  CAMP_LIBRARIES
-#  CAMP_INCLUDE_DIR, where to find camp/version.hpp
-
-FIND_PATH(CAMP_INCLUDE_DIR camp/version.hpp
-  HINTS
-  $ENV{CAMP_DIR}
-  PATH_SUFFIXES include
-  PATHS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Tegesoft\\CAMP]
-  ~/Library/Frameworks
-  /Library/Frameworks
-  /usr/local
-  /usr
-  /sw # Fink
-  /opt/local # DarwinPorts
-  /opt/csw # Blastwave
-  /opt
-)
-
-FIND_LIBRARY(CAMP_LIBRARY 
-  NAMES camp campd
-  HINTS
-  $ENV{CAMP_DIR}
-  PATH_SUFFIXES lib64 lib
-  PATHS
-  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Tegesoft\\CAMP]
-  ~/Library/Frameworks
-  /Library/Frameworks
-  /usr/local
-  /usr
-  /sw
-  /opt/local
-  /opt/csw
-  /opt
-)
-
-SET(CAMP_LIBRARIES "${CAMP_LIBRARY}" CACHE STRING "CAMP Libraries")
-
-INCLUDE(FindPackageHandleStandardArgs)
-# handle the QUIETLY and REQUIRED arguments and set CAMP_FOUND to TRUE if 
-# all listed variables are TRUE
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(CAMP DEFAULT_MSG CAMP_LIBRARIES CAMP_INCLUDE_DIR)
-
-MARK_AS_ADVANCED(CAMP_INCLUDE_DIR CAMP_LIBRARIES CAMP_LIBRARY)
-
diff --git a/CMake/Modules/FindCppUnit.cmake b/CMake/Modules/FindCppUnit.cmake
deleted file mode 100644
index 936fed0..0000000
--- a/CMake/Modules/FindCppUnit.cmake
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Find the CppUnit includes and library
-#
-# This module defines
-# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
-# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
-# CPPUNIT_FOUND, If false, do not try to use CppUnit.
-
-# also defined, but not for general use are
-# CPPUNIT_LIBRARY, where to find the CppUnit library.
-# CPPUNIT_DEBUG_LIBRARY, where to find the CppUnit library in debug mode.
-
-FIND_PATH(CPPUNIT_INCLUDE_DIR cppunit/TestCase.h
-  /usr/local/include
-  /usr/include
-)
-
-# With Win32, important to have both
-IF(WIN32)
-  FIND_LIBRARY(CPPUNIT_LIBRARY cppunit
-               ${CPPUNIT_INCLUDE_DIR}/../lib
-               /usr/local/lib
-               /usr/lib)
-  FIND_LIBRARY(CPPUNIT_DEBUG_LIBRARY cppunitd
-               ${CPPUNIT_INCLUDE_DIR}/../lib
-               /usr/local/lib
-               /usr/lib)
-ELSE(WIN32)
-  # On unix system, debug and release have the same name
-  FIND_LIBRARY(CPPUNIT_LIBRARY cppunit
-               ${CPPUNIT_INCLUDE_DIR}/../lib
-               /usr/local/lib
-               /usr/lib)
-  FIND_LIBRARY(CPPUNIT_DEBUG_LIBRARY cppunit
-               ${CPPUNIT_INCLUDE_DIR}/../lib
-               /usr/local/lib
-               /usr/lib)
-ENDIF(WIN32)
-
-IF(CPPUNIT_INCLUDE_DIR)
-  IF(CPPUNIT_LIBRARY)
-    SET(CPPUNIT_FOUND "YES")
-    SET(CPPUNIT_LIBRARIES ${CPPUNIT_LIBRARY} ${CMAKE_DL_LIBS})
-    SET(CPPUNIT_DEBUG_LIBRARIES ${CPPUNIT_DEBUG_LIBRARY} ${CMAKE_DL_LIBS})
-  ENDIF(CPPUNIT_LIBRARY)
-ENDIF(CPPUNIT_INCLUDE_DIR)
diff --git a/CMake/Modules/FindHDF5.cmake b/CMake/Modules/FindHDF5.cmake
deleted file mode 100644
index eb80a35..0000000
--- a/CMake/Modules/FindHDF5.cmake
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-FIND_PATH(HDF5_INCLUDE_DIR H5Cpp.h
-  HINTS
-  $ENV{HDF5_DIR}
-  PATH_SUFFIXES include
-  PATHS
-  ~/Library/Frameworks
-  /Library/Frameworks
-  /usr/include/hdf5/serial
-  /usr
-  /sw # Fink
-  /opt/local # DarwinPorts
-  /opt/csw # Blastwave
-  /opt
-)
-
-message("#### : ${HDF5_INCLUDE_DIR}")
-
-FIND_LIBRARY(HDF5_LIBRARY 
-  NAMES hdf5ddll hdf5dll hdf5 hdf5d hdf5_debug libhdf5
-  HINTS
-  $ENV{HDF5_DIR}
-  PATH_SUFFIXES lib 
-  PATHS
-  ~/Library/Frameworks
-  /Library/Frameworks
-  /usr/lib/x86_64-linux-gnu/hdf5/serial
-  /usr/lib
-  /usr
-  /sw
-  /opt/local
-  /opt/csw
-  /opt
-)
-
-FIND_LIBRARY(HDF5_CPP_LIBRARY 
-  NAMES hdf5_cppddll hdf5_cppdll hdf5_cpp hdf5_cppd hdf5_cpp_debug
-  HINTS
-  $ENV{HDF5_DIR}
-  PATH_SUFFIXES lib64 lib
-  PATHS
-  ~/Library/Frameworks
-  /Library/Frameworks
-  /usr/local
-  /usr
-  /sw
-  /opt/local
-  /opt/csw
-  /opt
-)
-
-SET(HDF5_LIBRARIES "${HDF5_LIBRARY};${HDF5_CPP_LIBRARY}" CACHE STRING "HDF5 Libraries")
-
-INCLUDE(FindPackageHandleStandardArgs)
-# handle the QUIETLY and REQUIRED arguments and set HDF5_FOUND to TRUE if 
-# all listed variables are TRUE
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(HDF5 DEFAULT_MSG HDF5_LIBRARIES HDF5_INCLUDE_DIR)
-
-MARK_AS_ADVANCED(HDF5_INCLUDE_DIR HDF5_LIBRARIES HDF5_LIBRARY)
-
-
diff --git a/CMake/Modules/FindIconv.cmake b/CMake/Modules/FindIconv.cmake
deleted file mode 100644
index 93cd668..0000000
--- a/CMake/Modules/FindIconv.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-# ICONV_FOUND - system has Iconv 
-# ICONV_INCLUDE_DIR - the Iconv include directory 
-# ICONV_LIBRARIES - Link these to use Iconv 
-
-FIND_PATH(ICONV_INCLUDE_DIR iconv.h) 
-FIND_LIBRARY(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c)
- 
-IF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) 
-	 SET(ICONV_FOUND TRUE) 
-ENDIF(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) 
diff --git a/CMake/Modules/fw-ITK.cmake b/CMake/Modules/fw-ITK.cmake
deleted file mode 100644
index d95fb60..0000000
--- a/CMake/Modules/fw-ITK.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-set(ITK_DIR /usr/lib/InsightToolkit/)
-
-SET(ITK_LIBS ITKAlgorithms
-    ITKBasicFilters
-    ITKCommon
-    ITKDICOMParser
-    ITKEXPAT
-    ITKFEM
-    ITKIO
-    ITKIOReview
-    ITKMetaIO
-    ITKNrrdIO
-    ITKNumerics
-    ITKQuadEdgeMesh
-    ITKSpatialObject
-    ITKStatistics
-    ITKniftiio
-    ITKznz
-    itkNetlibSlatec
-    itkjpeg12
-    itkjpeg16
-    itkjpeg8
-    itkopenjpeg
-    itksys
-    itkvnl_inst
-    )
-
-foreach(LIB ${ITK_LIBS})
-    find_library(${LIB}_LIB ${LIB} ${ITK_DIR} )
-    add_library(${LIB} UNKNOWN IMPORTED)
-    set_target_properties(${LIB} PROPERTIES IMPORTED_LOCATION "${${LIB}_LIB}")
-    set(ITK_LIBRARIES ${ITK_LIBRARIES} ${${LIB}_LIB})
-endforeach()
diff --git a/CMake/Modules/fw-Qt4.cmake b/CMake/Modules/fw-Qt4.cmake
deleted file mode 100644
index 70aa850..0000000
--- a/CMake/Modules/fw-Qt4.cmake
+++ /dev/null
@@ -1,5 +0,0 @@
-set(QT_DIR /usr/lib/x86_64-linux-gnu/qt4)
-
-add_definitions("-DQT_NO_KEYWORDS")
-#Fix error with BOOST_JOIN and qt moc
-set(CMAKE_AUTOMOC_MOC_OPTIONS "-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION")
diff --git a/CMake/Modules/fw-VTK.cmake b/CMake/Modules/fw-VTK.cmake
deleted file mode 100644
index 1997d31..0000000
--- a/CMake/Modules/fw-VTK.cmake
+++ /dev/null
@@ -1,2 +0,0 @@
-set(VTK_DIR /usr/lib/vtk-5.10/)
-
diff --git a/CMake/Modules/fw-VXL.cmake b/CMake/Modules/fw-VXL.cmake
deleted file mode 100644
index 08be41a..0000000
--- a/CMake/Modules/fw-VXL.cmake
+++ /dev/null
@@ -1 +0,0 @@
-set(VXL_DIR ${CMAKE_CURRENT_LIST_DIR}/lib/vxl/)
diff --git a/CMake/Modules/fw-boost.cmake b/CMake/Modules/fw-boost.cmake
deleted file mode 100644
index 6a2daf7..0000000
--- a/CMake/Modules/fw-boost.cmake
+++ /dev/null
@@ -1,33 +0,0 @@
-set(Boost_DEBUG false)
-file(GLOB BOOST_ROOT ${CMAKE_CURRENT_LIST_DIR})
-#set(Boost_NO_SYSTEM_PATHS ON)
-set(Boost_USE_DEBUG_PYTHON ON)
-set(Boost_USE_MULTITHREADED ON)
-
-
-add_definitions(
-        -DBOOST_ALL_DYN_LINK
-        -DBOOST_LINKING_PYTHON
-        -DBOOST_DEBUG_PYTHON
-        -DBOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0
-        -DBOOST_THREAD_PROVIDES_FUTURE
-        -DBOOST_THREAD_VERSION=2
-        )
-
-IF(WIN32)
-    set(BOOST_LIBRARYDIR ${BOOST_ROOT}/lib)
-
-    set(Boost_COMPILER -vc100)
-    add_definitions(
-            -DBOOST_LIB_DIAGNOSTIC
-            -DNOMINMAX
-            -DWIN32_LEAN_AND_MEAN
-            )
-ENDIF()
-
-IF(APPLE)
-    set(Boost_COMPILER -clang-darwin42)
-ENDIF()
-
-
-
diff --git a/CMake/Modules/fw-python.cmake b/CMake/Modules/fw-python.cmake
deleted file mode 100644
index 9aae871..0000000
--- a/CMake/Modules/fw-python.cmake
+++ /dev/null
@@ -1,4 +0,0 @@
-set(PYTHON_INCLUDE_DIR /usr/include/python2.7)
-#set(PYTHON_INCLUDE_DIR ${CMAKE_CURRENT_LIST_DIR}/include/python2.7)
-#set(PYTHON_LIBRARY ${CMAKE_CURRENT_LIST_DIR}/lib)
-
diff --git a/CMake/Wix/WIX.template.in b/CMake/Wix/WIX.template.in
deleted file mode 100644
index 6be1449..0000000
--- a/CMake/Wix/WIX.template.in
+++ /dev/null
@@ -1,80 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<?include "cpack_variables.wxi"?>
-
-<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
-    RequiredVersion="3.6.3303.0">
-
-    <Product Id="$(var.CPACK_WIX_PRODUCT_GUID)"
-        Name="$(var.CPACK_PACKAGE_NAME)"
-        Language="1033"
-        Version="$(var.CPACK_PACKAGE_VERSION)"
-        Manufacturer="$(var.CPACK_PACKAGE_VENDOR)"
-        UpgradeCode="$(var.CPACK_WIX_UPGRADE_GUID)">
-
-        <Package InstallerVersion="301" Compressed="yes"/>
-
-        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes"/>
-
-        <MajorUpgrade
-            Schedule="afterInstallInitialize"
-            AllowSameVersionUpgrades="yes"
-            DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/>
-
-        <WixVariable Id="WixUILicenseRtf" Value="$(var.CPACK_WIX_LICENSE_RTF)"/>
-        <Property Id="WIXUI_INSTALLDIR" Value="INSTALL_ROOT"/>
-
-        <?ifdef CPACK_WIX_PRODUCT_ICON?>
-        <Property Id="ARPPRODUCTICON">ProductIcon.ico</Property>
-        <Icon Id="ProductIcon.ico" SourceFile="$(var.CPACK_WIX_PRODUCT_ICON)"/>
-        <?endif?>
-
-        <?ifdef CPACK_WIX_UI_BANNER?>
-        <WixVariable Id="WixUIBannerBmp" Value="$(var.CPACK_WIX_UI_BANNER)"/>
-        <?endif?>
-
-        <?ifdef CPACK_WIX_UI_DIALOG?>
-        <WixVariable Id="WixUIDialogBmp" Value="$(var.CPACK_WIX_UI_DIALOG)"/>
-        <?endif?>
-        
-        
-       <DirectoryRef Id="TARGETDIR">
-            <Directory Id="ProgramMenuFolder">
-                <Directory Id="ApplicationProgramsFolder" Name="IRCAD"/>
-            </Directory>
-        </DirectoryRef>
-        
-        <DirectoryRef Id="ApplicationProgramsFolder">
-            <Component Id="ApplicationShortcut" Guid="$(var.CPACK_WIX_PRODUCT_GUID)">
-                <Shortcut
-                    Id="$(var.CPACK_PACKAGE_NAME)"
-                    Name="$(var.CPACK_PACKAGE_NAME)"
-                    Icon='ProductIcon.ico'
-                    IconIndex="0"
-                    Target="[INSTALL_ROOT]@LAUNCHER_PATH@"
-                    Arguments=".\@PROFILE_PATH@" 
-                    WorkingDirectory="INSTALL_ROOT"
-                />
-                <Shortcut
-                    Id="UninstallProduct"
-                    Name="Uninstall $(var.CPACK_PACKAGE_NAME)"
-                    Target="[System64Folder]msiexec.exe"
-                    Arguments="/x [ProductCode]"
-                    Description="Uninstalls $(var.CPACK_PACKAGE_NAME)"
-                    />
-            
-            
-                <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
-                <RegistryValue Root="HKCU" Key="Software\IRCAD\$(var.CPACK_PACKAGE_NAME)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
-            </Component>
-        </DirectoryRef>
-
-        <Feature Id="MainApplication" Title="Main Application" Level="1">
-            <ComponentRef Id="ApplicationShortcut" />   
-        </Feature>
-
-        <FeatureRef Id="ProductFeature"/>
-
-        <UIRef Id="WixUI_InstallDir" />
-    </Product>
-</Wix>
diff --git a/Apps/Tuto15MultithreadCtrl/CMakeLists.txt b/CMake/build/Bundle/CMakeLists.txt.in
similarity index 100%
rename from Apps/Tuto15MultithreadCtrl/CMakeLists.txt
rename to CMake/build/Bundle/CMakeLists.txt.in
diff --git a/CMake/build/Bundle/Properties.cmake.in b/CMake/build/Bundle/Properties.cmake.in
new file mode 100644
index 0000000..4f5d6ff
--- /dev/null
+++ b/CMake/build/Bundle/Properties.cmake.in
@@ -0,0 +1,11 @@
+
+set( NAME @BUNDLE_NAME@ )
+set( VERSION 0.1 )
+set( TYPE BUNDLE )
+set( DEPENDENCIES
+        fwCore
+        fwServices 
+        fwRuntime
+)
+set( REQUIREMENTS  )
+
diff --git a/CMake/build/Bundle/include/Plugin.hpp.in b/CMake/build/Bundle/include/Plugin.hpp.in
new file mode 100644
index 0000000..c847768
--- /dev/null
+++ b/CMake/build/Bundle/include/Plugin.hpp.in
@@ -0,0 +1,31 @@
+#ifndef __ at BUNDLE_NAME_UPPER@_PLUGIN_HPP__
+#define __ at BUNDLE_NAME_UPPER@_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+#include "@BUNDLE_NAME@/config.hpp"
+
+namespace @BUNDLE_NAME@
+{
+/**
+ * @brief   This class is started when the bundles is loaded.
+ * @class   Plugin
+ */
+struct @BUNDLE_NAME_UPPER at _CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+    /**
+     * @brief   destructor
+     */
+    @BUNDLE_NAME_UPPER at _API ~Plugin() throw();
+
+    // Overrides
+    @BUNDLE_NAME_UPPER at _API void start() throw(::fwRuntime::RuntimeException);
+
+    // Overrides
+    @BUNDLE_NAME_UPPER at _API void stop() throw();
+
+};
+
+} // namespace @BUNDLE_NAME@
+
+#endif //__ at BUNDLE_NAME_UPPER@_PLUGIN_HPP__
diff --git a/CMake/build/Bundle/include/namespace.hpp.in b/CMake/build/Bundle/include/namespace.hpp.in
new file mode 100644
index 0000000..69b86b3
--- /dev/null
+++ b/CMake/build/Bundle/include/namespace.hpp.in
@@ -0,0 +1,12 @@
+#ifndef __ at BUNDLE_NAME_UPPER@_NAMESPACE_HPP__
+#define __ at BUNDLE_NAME_UPPER@_NAMESPACE_HPP__
+
+/**
+ * @brief       The namespace @BUNDLE_NAME@ description.
+ * @namespace   @BUNDLE_NAME@
+ */
+namespace @BUNDLE_NAME@
+{
+
+}
+#endif /* __ at BUNDLE_NAME_UPPER@_NAMESPACE_HPP__ */
\ No newline at end of file
diff --git a/CMake/build/Bundle/rc/plugin.xml.in b/CMake/build/Bundle/rc/plugin.xml.in
new file mode 100644
index 0000000..729341d
--- /dev/null
+++ b/CMake/build/Bundle/rc/plugin.xml.in
@@ -0,0 +1,8 @@
+<plugin id="@BUNDLE_NAME@" class="::@BUNDLE_NAME@::Plugin" version="@DASH_VERSION@">
+    
+    <library name="@BUNDLE_NAME@" />
+
+    <requirement id="dataReg"/>
+    <requirement id="servicesReg"/>
+
+</plugin>
\ No newline at end of file
diff --git a/CMake/build/Bundle/src/Plugin.cpp.in b/CMake/build/Bundle/src/Plugin.cpp.in
new file mode 100644
index 0000000..e72dd16
--- /dev/null
+++ b/CMake/build/Bundle/src/Plugin.cpp.in
@@ -0,0 +1,29 @@
+#include "@BUNDLE_NAME@/Plugin.hpp"
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwServices/macros.hpp>
+
+namespace @BUNDLE_NAME@
+{
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::@BUNDLE_NAME@::Plugin");
+
+//-----------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+}
+
+} // namespace @BUNDLE_NAME@
diff --git a/CMake/build/Service/include/newService.hpp.in b/CMake/build/Service/include/newService.hpp.in
new file mode 100644
index 0000000..5642114
--- /dev/null
+++ b/CMake/build/Service/include/newService.hpp.in
@@ -0,0 +1,54 @@
+#ifndef __ at BUNDLE_NAME_UPPER@_ at SERVICE_NAME_UPPER@_HPP__
+#define __ at BUNDLE_NAME_UPPER@_ at SERVICE_NAME_UPPER@_HPP__
+
+#include "@BUNDLE_NAME@/config.hpp"
+
+#include <@SUPERCLASS_NAMESPACE_INCLUDE@/@SUPERCLASS at .hpp>
+
+namespace @BUNDLE_NAME@
+{
+
+/**
+ * @brief   Description of the class.
+ * @class   @SERVICE_NAME@
+ */
+class @BUNDLE_NAME_UPPER at _CLASS_API @SERVICE_NAME@ : public ::@SUPERCLASS_NAMESPACE@::@SUPERCLASS@
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (@SERVICE_NAME@)(::@SUPERCLASS_NAMESPACE@::@SUPERCLASS@) );
+
+    /// Constructor.
+    @BUNDLE_NAME_UPPER at _API @SERVICE_NAME@() throw();
+
+    /// Destructor. Does nothing
+    @BUNDLE_NAME_UPPER at _API virtual ~@SERVICE_NAME@() throw();
+
+protected:
+
+    /**
+     * @brief method description:
+     * @code{.xml}
+        <service uid="@SERVICE_NAME at Instance" impl="::@BUNDLE_NAME@::@SERVICE_NAME@" type="::@SUPERCLASS_NAMESPACE@::@SUPERCLASS@">
+             <parameter>param</parameter>
+        </service>
+       @endcode
+     * - \b Parameter : parameter description.
+     */
+    @BUNDLE_NAME_UPPER at _API virtual void configuring()  throw ( ::fwTools::Failed );
+
+    /// FILL ME.
+    @BUNDLE_NAME_UPPER at _API virtual void starting()  throw ( ::fwTools::Failed );
+
+    /// FILL ME.
+    @BUNDLE_NAME_UPPER at _API virtual void stopping()  throw ( ::fwTools::Failed );
+
+    /// FILL ME.
+    @BUNDLE_NAME_UPPER at _API virtual void updating() throw ( ::fwTools::Failed );
+
+};
+
+} // @BUNDLE_NAME@
+
+#endif // __ at BUNDLE_NAME_UPPER@_ at SERVICE_NAME_UPPER@_HPP__
diff --git a/CMake/build/Service/rc/extensionService.txt b/CMake/build/Service/rc/extensionService.txt
new file mode 100644
index 0000000..b75bcaf
--- /dev/null
+++ b/CMake/build/Service/rc/extensionService.txt
@@ -0,0 +1,8 @@
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::@SUPERCLASS_NAMESPACE@::@SERVICE_SUBDIRECTORY_CPP@@SUPERCLASS@</type>
+        <service>::@BUNDLE_NAME@::@SERVICE_NAME@</service>
+        <object>::@OBJECT_NAMESPACE@::@OBJECT@</object>
+        <desc>service description</desc>
+    </extension>
+
+</plugin>
\ No newline at end of file
diff --git a/CMake/build/Service/src/newService.cpp.in b/CMake/build/Service/src/newService.cpp.in
new file mode 100644
index 0000000..d96987a
--- /dev/null
+++ b/CMake/build/Service/src/newService.cpp.in
@@ -0,0 +1,47 @@
+#include "@BUNDLE_NAME@/@SERVICE_NAME at .hpp"
+
+#include <fwServices/Base.hpp>
+
+namespace @BUNDLE_NAME@
+{
+
+fwServicesRegisterMacro( ::@SUPERCLASS_NAMESPACE@::@SUPERCLASS@, ::@BUNDLE_NAME@::@SERVICE_SUBDIRECTORY_CPP@@SERVICE_NAME@, ::@OBJECT_NAMESPACE@::@OBJECT@);
+
+//------------------------------------------------------------------------------
+ at SERVICE_NAME@::@SERVICE_NAME@() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+ at SERVICE_NAME@::~@SERVICE_NAME@() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void @SERVICE_NAME@::configuring() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void @SERVICE_NAME@::starting() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void @SERVICE_NAME@::stopping() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+void @SERVICE_NAME@::updating() throw(::fwTools::Failed)
+{
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace @BUNDLE_NAME@
diff --git a/CMake/build/argsBundle.cmake b/CMake/build/argsBundle.cmake
new file mode 100644
index 0000000..755d037
--- /dev/null
+++ b/CMake/build/argsBundle.cmake
@@ -0,0 +1,2 @@
+set(BUNDLE_PATH D:/Dev/Src/ar/Bundles/LeafUI/)
+set(BUNDLE_NAME uiTest)
diff --git a/CMake/build/argsService.cmake b/CMake/build/argsService.cmake
new file mode 100644
index 0000000..d7ac2f2
--- /dev/null
+++ b/CMake/build/argsService.cmake
@@ -0,0 +1,11 @@
+set(BUNDLE_NAME uiTest)
+set(SERVICE_NAME STest)
+
+set(SUPERCLASS ITest)
+set(SUPERCLASS_NAMESPACE ui)
+
+set(OBJECT Mesh)
+set(OBJECT_NAMESPACE fwData)
+
+#optionnal parameter
+#set(SERVICE_SUBDIRECTORY "")
diff --git a/CMake/build/cmake_newBundle.cmake b/CMake/build/cmake_newBundle.cmake
new file mode 100644
index 0000000..ae6828e
--- /dev/null
+++ b/CMake/build/cmake_newBundle.cmake
@@ -0,0 +1,64 @@
+#read arguments from file
+find_path(ArgsFile "argsBundle.cmake"  "${CMAKE_BINARY_DIR}/")
+if(${ArgsFile} STREQUAL ArgsFile-NOTFOUND)
+    message( FATAL_ERROR "${CMAKE_BINARY_DIR}/argsBundle.cmake not found, maybe you forgot to copy the arguments file into your build directory?")
+else()
+    include("${CMAKE_BINARY_DIR}/argsBundle.cmake")
+endif()
+
+set(DASH_VERSION @DASH_VERSION@)
+
+#check required parameters
+if(NOT DEFINED BUNDLE_NAME)
+    message( FATAL_ERROR "BUNDLE_NAME parameter is not defined, please specify.")
+elseif(NOT DEFINED  BUNDLE_PATH)
+    message( FATAL_ERROR "BUNDLE_PATH parameter is not defined, please specify.")
+endif()
+
+string(TOUPPER ${BUNDLE_NAME} BUNDLE_NAME_UPPER)
+
+# find path to bundle
+find_path(PathFlag ${BUNDLE_PATH})
+
+if(${PathFlag} STREQUAL Path-NOTFOUND)
+    message( FATAL_ERROR "Bundle path '${BUNDLE_PATH}' not found")
+endif()
+
+#copy files of new service with configured parameters
+configure_file(
+    "${SOURCEDIR}/CMake/build/Bundle/include/namespace.hpp.in"
+    "${BUNDLE_PATH}/${BUNDLE_NAME}/include/${BUNDLE_NAME}/namespace.hpp"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+    
+configure_file(
+    "${SOURCEDIR}/CMake/build/Bundle/include/Plugin.hpp.in"
+    "${BUNDLE_PATH}/${BUNDLE_NAME}/include/${BUNDLE_NAME}/Plugin.hpp"
+    @ONLY
+    NEWLINE_STYLE UNIX)    
+    
+configure_file(
+    "${SOURCEDIR}/CMake/build/Bundle/src/Plugin.cpp.in"
+    "${BUNDLE_PATH}/${BUNDLE_NAME}/src/${BUNDLE_NAME}/Plugin.cpp"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+
+configure_file(
+    "${SOURCEDIR}/CMake/build/Bundle/rc/plugin.xml.in"
+    "${BUNDLE_PATH}/${BUNDLE_NAME}/rc/plugin.xml"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+    
+configure_file(
+    "${SOURCEDIR}/CMake/build/Bundle/Properties.cmake.in"
+    "${BUNDLE_PATH}/${BUNDLE_NAME}/Properties.cmake"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+
+configure_file(
+    "${SOURCEDIR}/CMake/build/Bundle/CMakeLists.txt.in"
+    "${BUNDLE_PATH}/${BUNDLE_NAME}/CMakeLists.txt"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+    
+message("New bundle ${BUNDLE_NAME} created, please do not forget to reconfigure with cmake" )  
diff --git a/CMake/build/cmake_newService.cmake b/CMake/build/cmake_newService.cmake
new file mode 100644
index 0000000..eee19d4
--- /dev/null
+++ b/CMake/build/cmake_newService.cmake
@@ -0,0 +1,84 @@
+#read arguments from file
+find_path(ArgsFile "argsService.cmake"  "${CMAKE_BINARY_DIR}/")
+if(${ArgsFile} STREQUAL ArgsFile-NOTFOUND)
+    message( FATAL_ERROR "${CMAKE_BINARY_DIR}/argsService.cmake not found, maybe you forgot to copy the arguments file into your build directory?")
+else()
+    include("${CMAKE_BINARY_DIR}/argsService.cmake")
+endif()
+
+#check required parameters
+if(NOT DEFINED BUNDLE_NAME)
+    message( FATAL_ERROR "BUNDLE_NAME parameter is not defined, please specify.")
+elseif(NOT DEFINED SERVICE_NAME)
+    message( FATAL_ERROR "SERVICE_NAME parameter is not defined, please specify.")
+elseif(NOT DEFINED SUPERCLASS)
+    message( FATAL_ERROR "SUPERCLASS parameter is not defined, please specify.")
+elseif(NOT DEFINED SUPERCLASS_NAMESPACE)
+    message( FATAL_ERROR "SUPERCLASS_NAMESPACE parameter is not defined, please specify.")
+elseif(NOT DEFINED OBJECT)
+    message( FATAL_ERROR "OBJECT parameter is not defined, please specify.")
+elseif(NOT DEFINED OBJECT_NAMESPACE)
+    message( FATAL_ERROR "OBJECT_NAMESPACE parameter is not defined, please specify.")
+endif()
+
+
+# read extension
+file(READ "${SOURCEDIR}/CMake/build/Service/rc/extensionService.txt" extension)
+
+string(FIND ${SUPERCLASS_NAMESPACE} "::" SUPERCLASS_NAMESPACE_FLAG)
+if("${SUPERCLASS_NAMESPACE_FLAG}" GREATER "-1")
+    string(REPLACE "::" "/" SUPERCLASS_NAMESPACE_INCLUDE ${SUPERCLASS_NAMESPACE})
+else()
+    set(SUPERCLASS_NAMESPACE_INCLUDE ${SUPERCLASS_NAMESPACE})
+endif()
+
+if(DEFINED SERVICE_SUBDIRECTORY)
+    string(CONCAT SERVICE_SUBDIRECTORY_CPP ${SERVICE_SUBDIRECTORY} "::")
+endif()
+
+string(TOUPPER ${BUNDLE_NAME} BUNDLE_NAME_UPPER)
+string(TOUPPER ${SERVICE_NAME} SERVICE_NAME_UPPER)
+
+# prepare additional directory for bundle search
+string(REPLACE " " ";" ADDITIONAL_PROJECTS ${ADDITIONALDIR})
+
+# find path to bundle
+find_path(Path ${BUNDLE_NAME}  "${SOURCEDIR}/Bundles/*/")
+if(NOT ${Path})
+    foreach(ADDITIONAL_PROJECT ${ADDITIONAL_PROJECTS})
+        find_path(Path ${BUNDLE_NAME}  "${ADDITIONAL_PROJECT}/Bundles/*/")
+    endforeach()
+endif()
+
+if(${Path} STREQUAL Path-NOTFOUND)
+    message( FATAL_ERROR "Bundle '${BUNDLE_NAME}' not found")
+endif()
+
+#copy files of new service with configured parameters
+configure_file(
+    "${SOURCEDIR}/CMake/build/Service/include/newService.hpp.in"
+    "${Path}/${BUNDLE_NAME}/include/${BUNDLE_NAME}/${SERVICE_SUBDIRECTORY}/${SERVICE_NAME}.hpp"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+    
+configure_file(
+    "${SOURCEDIR}/CMake/build/Service/src/newService.cpp.in"
+    "${Path}/${BUNDLE_NAME}/src/${BUNDLE_NAME}/${SERVICE_SUBDIRECTORY}/${SERVICE_NAME}.cpp"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+
+# manipulation of the plugin.xml
+file(READ "${Path}/${BUNDLE_NAME}/rc/plugin.xml" extensionXML)
+string(REPLACE "</plugin>" "" extensionXMLmodified ${extensionXML})
+    
+# write extension for service
+file(WRITE "${Path}/${BUNDLE_NAME}/rc/plugin.xml" ${extensionXMLmodified})
+file(APPEND "${Path}/${BUNDLE_NAME}/rc/plugin.xml" ${extension})
+
+configure_file(
+    "${Path}/${BUNDLE_NAME}/rc/plugin.xml"
+    "${Path}/${BUNDLE_NAME}/rc/plugin.xml"
+    @ONLY
+    NEWLINE_STYLE UNIX)
+    
+message("New service ${SERVICE_NAME} of bundle ${BUNDLE_NAME} created, please do not forget to reconfigure with cmake" )    
diff --git a/CMake/build/config.hpp.in b/CMake/build/config.hpp.in
new file mode 100644
index 0000000..50e9625
--- /dev/null
+++ b/CMake/build/config.hpp.in
@@ -0,0 +1,29 @@
+
+#ifndef __ at PROJECT_NAME_UPCASE@_CONFIG_HPP__
+#define __ at PROJECT_NAME_UPCASE@_CONFIG_HPP__
+
+    #ifdef _WIN32
+
+        #ifdef @PROJECT_NAME_UPCASE at _EXPORTS
+            #define @PROJECT_NAME_UPCASE at _API __declspec(dllexport)
+        #else
+            #define @PROJECT_NAME_UPCASE at _API __declspec(dllimport)
+        #endif
+
+        #define @PROJECT_NAME_UPCASE at _CLASS_API
+
+        #pragma warning(disable: 4290)
+
+    #elif defined(__GNUC__) && (__GNUC__>=4)
+
+        #define @PROJECT_NAME_UPCASE at _API __attribute__ ((visibility("default")))
+        #define @PROJECT_NAME_UPCASE at _CLASS_API __attribute__ ((visibility("default")))
+
+    #else
+
+        #define @PROJECT_NAME_UPCASE at _API
+        #define @PROJECT_NAME_UPCASE at _CLASS_API
+
+    #endif
+
+#endif // __ at PROJECT_NAME_UPCASE@_CONFIG_HPP__
diff --git a/CMake/build/plugin.xml.in b/CMake/build/plugin.xml.in
new file mode 100644
index 0000000..e4ed9a2
--- /dev/null
+++ b/CMake/build/plugin.xml.in
@@ -0,0 +1,5 @@
+<plugin id="@PROJECT_ID@" @PROJECT_CLASS@ version="@PROJECT_VERSION@" >
+ at PROJECT_LIBRARY@
+ at REQUIREMENT_LIST@
+ at EXTENSION_LIST@
+</plugin>
diff --git a/CMake/build/plugin_config.cmake b/CMake/build/plugin_config.cmake
new file mode 100644
index 0000000..0f2fd98
--- /dev/null
+++ b/CMake/build/plugin_config.cmake
@@ -0,0 +1,81 @@
+
+function(plugin_setup ${PROJECT})
+
+    #Clear last set
+    unset(REQUIREMENT_LIST)
+    unset(EXTENSION_LIST)
+    unset(PROJECT_LIBRARY)
+    unset(PROJECT_CLASS)
+
+    # set variables used in the configure_file command
+    set(PROJECT_VERSION ${${PROJECT}_DASH_VERSION})
+    set(PROJECT_NAME ${PROJECT})
+    set(PROJECT_ID ${PROJECT})
+
+    # Add each requirements to the requirement list
+    foreach(CURRENT_REQUIREMENT ${${PROJECT}_REQUIREMENTS})
+        # to only consider bundles and app
+        get_target_property(TARGET_TYPE ${CURRENT_REQUIREMENT} TYPE)
+        if( "${${CURRENT_REQUIREMENT}_TYPE}" STREQUAL "BUNDLE" OR "${${CURRENT_REQUIREMENT}_TYPE}" STREQUAL "APP")
+                list(APPEND REQUIREMENT_LIST "    <requirement id=\"${CURRENT_REQUIREMENT}\"/>")
+         endif()
+    endforeach()
+
+    # Add each bundle deps to the requirement list
+    foreach(CURRENT_BUNDLE_DEPS ${${PROJECT}_BUNDLE_DEPENDENCIES})
+        list(APPEND REQUIREMENT_LIST "    <requirement id=\"${CURRENT_BUNDLE_DEPS}\"/>")
+    endforeach()
+
+    if(REQUIREMENT_LIST)
+        list(SORT REQUIREMENT_LIST)
+        string(REPLACE ";" "\n" REQUIREMENT_LIST "${REQUIREMENT_LIST}")
+    endif()
+
+    # Add each service to the extension list
+    file(TO_CMAKE_PATH "${${PROJECT}_DIR}/src" PRJ_SRC_DIR)
+    file(TO_CMAKE_PATH "${${PROJECT}_DIR}/include" PRJ_INCLUDE_DIR)
+
+    file(GLOB_RECURSE PRJ_CPP_FILES  "${PRJ_SRC_DIR}/*.cpp")
+    foreach(CPP_FILE ${PRJ_CPP_FILES})
+        #find associated .hpp file to find service description in doxygen
+        file(TO_CMAKE_PATH ${CPP_FILE} CPP_FILE)
+        string(REPLACE "${PRJ_SRC_DIR}" "" HPP_FILE ${CPP_FILE})
+        string(REPLACE ".cpp" ".hpp" HPP_FILE ${HPP_FILE})
+        set(HPP_FILE "${PRJ_INCLUDE_DIR}/${HPP_FILE}")
+        file(TO_CMAKE_PATH ${HPP_FILE} HPP_FILE)
+
+        if(EXISTS ${HPP_FILE})
+            set(BRIEF_REGEX "[ /*]*@brief ([^\n]+)")
+            file(STRINGS ${HPP_FILE} HPP_FILE_CONTENT NEWLINE_CONSUME)
+            if("${HPP_FILE_CONTENT}" MATCHES ${BRIEF_REGEX})
+                string(STRIP ${CMAKE_MATCH_1} SRV_DESC)
+            endif()
+        endif()
+
+        file(STRINGS ${CPP_FILE} CPP_FILE_CONTENT NEWLINE_CONSUME)
+        set(SRV_REGISTER_REGEX "fwServicesRegisterMacro\\(([ :a-zA-Z1-9_]+)[,\n\t\r ]*([ :a-zA-Z1-9_]+)[,\n\t\r ]*([ :a-zA-Z1-9_]+)\\);")
+        if("${CPP_FILE_CONTENT}" MATCHES ${SRV_REGISTER_REGEX})
+            string(STRIP ${CMAKE_MATCH_1} SRV_TYPE)
+            string(STRIP ${CMAKE_MATCH_2} SRV_IMPL)
+            string(STRIP ${CMAKE_MATCH_3} SRV_OBJECT)
+            list(APPEND EXTENSION_LIST "\n    <extension implements=\"::fwServices::registry::ServiceFactory\">"
+                                       "         <type>${SRV_TYPE}</type>"
+                                       "         <service>${SRV_IMPL}</service>"
+                                       "         <object>${SRV_OBJECT}</object>"
+                                       "         <desc>${SRV_DESC}</desc>"
+                                       "    </extension>")
+        endif()
+    endforeach()
+    if(EXTENSION_LIST)
+        string(REPLACE ";" "\n" EXTENSION_LIST "${EXTENSION_LIST}")
+    endif()
+
+    # retrieves the class representing the bundle executable part.
+    if(PRJ_CPP_FILES)
+        set(PROJECT_CLASS "class=\"::${PROJECT_NAME}::Plugin\"")
+        set(PROJECT_LIBRARY "    <library name=\"${PROJECT_NAME}\" />")
+    endif()
+
+    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CMake/build/plugin.xml.in"    "${CMAKE_BINARY_DIR}/${BUNDLE_PREFIX}/${PROJECT}_${${PROJECT}_DASH_VERSION}/plugin.xml")
+
+endfunction()
diff --git a/CMake/build/profile.xml.in b/CMake/build/profile.xml.in
new file mode 100644
index 0000000..65ec97c
--- /dev/null
+++ b/CMake/build/profile.xml.in
@@ -0,0 +1,6 @@
+<profile name="@PROJECT@" version="@PROJECT_VERSION@" check-single-instance="@UNIQUE@">
+
+ at ACTIVATE_LIST@
+ at START_BUNDLE_LIST@
+
+</profile>
\ No newline at end of file
diff --git a/CMake/build/profile_config.cmake b/CMake/build/profile_config.cmake
new file mode 100644
index 0000000..40c047e
--- /dev/null
+++ b/CMake/build/profile_config.cmake
@@ -0,0 +1,93 @@
+
+# Do not change the indentation of the activate list
+macro(profile_setup ${PROJECT})
+    set(UNIQUE "false")
+    #Set the check-single-instance
+    if(${PROJECT}_UNIQUE)
+        string(TOLOWER "${${PROJECT}_UNIQUE}" UNIQUE)
+    endif()
+
+    #Clear last set
+    unset(ACTIVATE_LIST)
+    # unset start for the current app
+    unset(START_BUNDLES)
+    unset(START_BUNDLE_LIST)
+
+    # set a variable used in the configure_file command
+    set(PROJECT_VERSION ${${PROJECT}_VERSION})
+
+    # Add each requirements to the activate list
+    set(ALL_REQUIREMENTS "")
+    findRequirements(${PROJECT} ALL_REQUIREMENTS)
+    list(REMOVE_DUPLICATES ALL_REQUIREMENTS)
+    list(SORT ALL_REQUIREMENTS)
+
+    foreach(CURRENT_REQUIREMENT ${ALL_REQUIREMENTS})
+
+        # get the start option of the current requirement if exists
+        if(${CURRENT_REQUIREMENT}_START)
+            list(APPEND START_BUNDLES "${CURRENT_REQUIREMENT}")
+        endif()
+
+        # to only consider bundles and app
+        if( "${${CURRENT_REQUIREMENT}_TYPE}" STREQUAL "BUNDLE" OR "${${CURRENT_REQUIREMENT}_TYPE}" STREQUAL "APP")
+            # check if a bundleParam macro had been use in the properties.cmake
+            # if yes, get and set bundle param and values
+            if(${PROJECT}_${CURRENT_REQUIREMENT}_PARAM_LIST)
+                set(CURRENT_PARAM_LIST "${${PROJECT}_${CURRENT_REQUIREMENT}_PARAM_LIST}")
+                set(CURRENT_PARAM_VALUES "${${PROJECT}_${CURRENT_REQUIREMENT}_PARAM_VALUES}")
+
+                #set activate tag with parameters
+                list(APPEND ACTIVATE_LIST "    <activate id=\"${CURRENT_REQUIREMENT}\" version=\"${${CURRENT_REQUIREMENT}_DASH_VERSION}\" >")
+                foreach(CURRENT_PARAM ${CURRENT_PARAM_LIST})
+                    list(FIND CURRENT_PARAM_LIST "${CURRENT_PARAM}" CURRENT_INDEX)
+                    list(GET CURRENT_PARAM_VALUES "${CURRENT_INDEX}" CURRENT_VALUE)
+                    list(APPEND ACTIVATE_LIST "        <param id=\"${CURRENT_PARAM}\" value=\"${CURRENT_VALUE}\" />")
+                endforeach()
+
+                list(APPEND ACTIVATE_LIST "    </activate>")
+            # else simply set the activate tag
+            else()
+                 list(APPEND ACTIVATE_LIST "    <activate id=\"${CURRENT_REQUIREMENT}\" version=\"${${CURRENT_REQUIREMENT}_DASH_VERSION}\" />")
+            endif()
+        endif()
+    endforeach()
+    string(REPLACE ";" "\n" ACTIVATE_LIST "${ACTIVATE_LIST}")
+
+    if(${PROJECT}_START) # add a start for ctrl app
+        list(APPEND START_BUNDLES "${PROJECT}")
+    endif()
+
+    list(SORT START_BUNDLES)
+
+    foreach(CURRENT_BUNDLES ${START_BUNDLES})
+        set(START_BUNDLE_LIST "${START_BUNDLE_LIST}\n    <start id=\"${CURRENT_BUNDLES}\" />")
+    endforeach()
+
+    configure_file("${CMAKE_CURRENT_SOURCE_DIR}/CMake/build/profile.xml.in"    "${CMAKE_BINARY_DIR}/${BUNDLE_PREFIX}/${PROJECT}_${${PROJECT}_DASH_VERSION}/profile.xml")
+endmacro()
+
+function(findRequirements FWPROJECT_NAME)
+    list(APPEND ALL_REQUIREMENTS ${FWPROJECT_NAME})
+
+    set(CURRENT_REQUIREMENTS ${${FWPROJECT_NAME}_REQUIREMENTS})
+    if(${FWPROJECT_NAME}_BUNDLE_DEPENDENCIES)
+        list(APPEND CURRENT_REQUIREMENTS ${${FWPROJECT_NAME}_BUNDLE_DEPENDENCIES})
+        list(REMOVE_DUPLICATES CURRENT_REQUIREMENTS)
+    endif()
+
+    foreach(CURRENT_REQUIREMENT ${CURRENT_REQUIREMENTS})
+        if( "${${CURRENT_REQUIREMENT}_TYPE}" STREQUAL "BUNDLE" OR "${${CURRENT_REQUIREMENT}_TYPE}" STREQUAL "APP")
+            findRequirements(${CURRENT_REQUIREMENT})
+        endif()
+    endforeach()
+
+    set(ALL_REQUIREMENTS ${ALL_REQUIREMENTS} PARENT_SCOPE)
+endfunction()
+
+macro(bundleParam BUNDLE_NAME)
+    set(options)
+    set(oneValueArgs)
+    set(multiValueArgs PARAM_VALUES PARAM_LIST)
+    cmake_parse_arguments("${NAME}_${BUNDLE_NAME}" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
+endmacro()
diff --git a/CMake/build/project.vcxproj.user.in b/CMake/build/project.vcxproj.user.in
new file mode 100644
index 0000000..3f4a3cb
--- /dev/null
+++ b/CMake/build/project.vcxproj.user.in
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="12.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='@CMAKE_BUILD_TYPE@|@PLATFORM@'">
+    <LocalDebuggerCommand>@LAUNCHER@</LocalDebuggerCommand>
+    <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
+    <LocalDebuggerCommandArguments>@PROFILE@</LocalDebuggerCommandArguments>
+    <LocalDebuggerWorkingDirectory>@WORKING_DIRECTORY@</LocalDebuggerWorkingDirectory>
+    <LocalDebuggerEnvironment>PATH=%PATH%;@DEBUGGER_ENVIRONMENT@;$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
+  </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/CMake/cppunit/cppunit_main.cpp b/CMake/cppunit/cppunit_main.cpp
index 1c3e225..9b78980 100644
--- a/CMake/cppunit/cppunit_main.cpp
+++ b/CMake/cppunit/cppunit_main.cpp
@@ -1,4 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+/* ***** BEGIN LICENSE BLOCK *****
  * Copyright (C) IRCAD, 2004-2010.
  * Distributed under the terms of the BSD Licence as
  * published by the Open Source Initiative.
@@ -31,13 +37,8 @@ class MiniLauncher
 public:
     MiniLauncher( ::boost::filesystem::path profilePath )
     {
-	#ifdef SPECIALINSTALL
-    		::boost::filesystem::path cwd = SHAREPATH;
-	#else
-		::boost::filesystem::path cwd = ::boost::filesystem::current_path();
-	#endif
-
-        ::boost::filesystem::path bundlePath = cwd / "Bundles";
+        ::boost::filesystem::path cwd        = ::boost::filesystem::current_path();
+        ::boost::filesystem::path bundlePath = cwd / ::boost::filesystem::path(BUNDLE_PREFIX);
 
         ::fwRuntime::addBundles(bundlePath);
 
@@ -88,16 +89,15 @@ struct Options
     std::string profile;
 #endif
 
-    Options(): verbose(false), xmlReport(false), listTests(false)
+    Options() : verbose(false), xmlReport(false), listTests(false)
 #ifdef BUNDLE_TEST_PROFILE
-               , profile( BUNDLE_TEST_PROFILE )
+                , profile( BUNDLE_TEST_PROFILE )
 #endif
-    { }
+    {
+    }
 
     bool parse(int argc, char* argv[])
     {
-        bool error = false;
-
         if (argc < 1)
         {
             return true;
@@ -105,8 +105,7 @@ struct Options
 
         std::string programName( *argv != 0 ? *argv : "test_runner" );
 
-        int argn = 0;
-        char** args = argv + 1;
+        char** args    = argv + 1;
         char** argsEnd = argv + argc;
         while (args < argsEnd)
         {
@@ -174,7 +173,7 @@ struct Options
         return true;
     }
 
-} ;
+};
 
 
 CPPUNIT_NS_BEGIN
@@ -184,23 +183,26 @@ class SynchronizationObject;
 class TestLister : public TestResult
 {
 public:
-    TestLister( SynchronizationObject *syncObject = 0 ){};
+    TestLister( SynchronizationObject* syncObject = 0 )
+    {
+    }
 
-    virtual void startTest( Test *test )
+    virtual void startTest( Test* test )
     {
         std::cout << test->getName() << std::endl;
-    };
+    }
 
-    virtual void runTest( Test *test )
+    virtual void runTest( Test* test )
     {
         test->run( this );
-    };
+    }
 
-    virtual bool protect( const Functor &functor,
-                          Test *test,
-                          const std::string &shortDescription = std::string("") ){
+    virtual bool protect( const Functor& functor,
+                          Test* test,
+                          const std::string& shortDescription = std::string("") )
+    {
         return false;
-    };
+    }
 
 };
 CPPUNIT_NS_END
@@ -224,7 +226,7 @@ int main( int argc, char* argv[] )
 #endif
 
 
-    CPPUNIT_NS::Test *testSuite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();
+    CPPUNIT_NS::Test* testSuite = CPPUNIT_NS::TestFactoryRegistry::getRegistry().makeTest();
 
     // Add the top suite to the test runner
     CPPUNIT_NS::TestRunner runner;
@@ -272,7 +274,7 @@ int main( int argc, char* argv[] )
         {
             runner.run( controller, *iter );
         }
-        catch ( std::exception &e )
+        catch ( std::exception& e )
         {
             std::cerr << "[" << ((iter->empty()) ? "All tests" : *iter) << "]" << "Error: " << e.what() << std::endl;
             return 1;
@@ -284,7 +286,7 @@ int main( int argc, char* argv[] )
         }
     }
 
-    // Print test in a compiler compatible format.
+    // Print test results in a compiler compatible format.
     CPPUNIT_NS::CompilerOutputter outputter( &result, std::cerr );
     outputter.write();
 
@@ -296,5 +298,10 @@ int main( int argc, char* argv[] )
         file.close();
     }
 
+    if (result.testFailuresTotal())
+    {
+        return 1;
+    }
+
     return 0;
 }
diff --git a/CMake/doxygen/Doxyfile.in b/CMake/doxygen/Doxyfile.in
index 14c1e8f..eaf8645 100644
--- a/CMake/doxygen/Doxyfile.in
+++ b/CMake/doxygen/Doxyfile.in
@@ -1,1521 +1,310 @@
-# Doxyfile 1.5.8
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# Doxyfile 1.8.7
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file 
-# that follow. The default is UTF-8 which is also the encoding used for all 
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the 
-# iconv built into libc) for the transcoding. See 
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
 DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded 
-# by quotes) that should identify the project.
-
 PROJECT_NAME           = fw4spl
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number. 
-# This could be handy for archiving the generated documentation or 
-# if some version control system is used.
-
-PROJECT_NUMBER         = 
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) 
-# base path where the generated documentation will be put. 
-# If a relative path is entered, it will be relative to the location 
-# where doxygen was started. If left blank the current directory will be used.
-
+PROJECT_NUMBER         =
+PROJECT_BRIEF          =
+PROJECT_LOGO           =
 OUTPUT_DIRECTORY       = @CMAKE_CURRENT_BINARY_DIR@/Documentation/Doxygen
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 
-# 4096 sub-directories (in 2 levels) under the output directory of each output 
-# format and will distribute the generated files over these directories. 
-# Enabling this option can be useful when feeding doxygen a huge amount of 
-# source files, where putting all generated files in the same directory would 
-# otherwise cause performance problems for the file system.
-
 CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all 
-# documentation generated by doxygen is written. Doxygen will use this 
-# information to generate all constant output in the proper language. 
-# The default language is English, other supported languages are: 
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, 
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek, 
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages), 
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish, 
-# Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, Slovene, 
-# Spanish, Swedish, and Ukrainian.
-
+ALLOW_UNICODE_NAMES    = NO
 OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will 
-# include brief member descriptions after the members that are listed in 
-# the file and class documentation (similar to JavaDoc). 
-# Set to NO to disable this.
-
 BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend 
-# the brief description of a member or function before the detailed description. 
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the 
-# brief descriptions will be completely suppressed.
-
 REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator 
-# that is used to form the text in various listings. Each string 
-# in this list, if found as the leading text of the brief description, will be 
-# stripped from the text and the result after processing the whole list, is 
-# used as the annotated text. Otherwise, the brief description is used as-is. 
-# If left blank, the following values are used ("$name" is automatically 
-# replaced with the name of the entity): "The $name class" "The $name widget" 
-# "The $name file" "is" "provides" "specifies" "contains" 
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       = 
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then 
-# Doxygen will generate a detailed section even if there is only a brief 
-# description.
-
+ABBREVIATE_BRIEF       =
 ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all 
-# inherited members of a class in the documentation of that class as if those 
-# members were ordinary class members. Constructors, destructors and assignment 
-# operators of the base classes will not be shown.
-
 INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full 
-# path before files name in the file list and in the header files. If set 
-# to NO the shortest path that makes the file name unique will be used.
-
 FULL_PATH_NAMES        = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag 
-# can be used to strip a user-defined part of the path. Stripping is 
-# only done if one of the specified strings matches the left-hand part of 
-# the path. The tag can be used to show relative paths in the file list. 
-# If left blank the directory from which doxygen is run is used as the 
-# path to strip.
-
-STRIP_FROM_PATH        = 
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of 
-# the path mentioned in the documentation of a class, which tells 
-# the reader which header file to include in order to use a class. 
-# If left blank only the name of the header file containing the class 
-# definition is used. Otherwise one should specify the include paths that 
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    = 
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter 
-# (but less readable) file names. This can be useful is your file systems 
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
+STRIP_FROM_PATH        =
+STRIP_FROM_INC_PATH    =
 SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen 
-# will interpret the first line (until the first dot) of a JavaDoc-style 
-# comment as the brief description. If set to NO, the JavaDoc 
-# comments will behave just like regular Qt-style comments 
-# (thus requiring an explicit @brief command for a brief description.)
-
 JAVADOC_AUTOBRIEF      = NO
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will 
-# interpret the first line (until the first dot) of a Qt-style 
-# comment as the brief description. If set to NO, the comments 
-# will behave just like regular Qt-style comments (thus requiring 
-# an explicit \brief command for a brief description.)
-
 QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen 
-# treat a multi-line C++ special comment block (i.e. a block of //! or /// 
-# comments) as a brief description. This used to be the default behaviour. 
-# The new default is to treat a multi-line C++ comment block as a detailed 
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
 MULTILINE_CPP_IS_BRIEF = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented 
-# member inherits the documentation from any documented member that it 
-# re-implements.
-
 INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce 
-# a new page for each member. If set to NO, the documentation of a member will 
-# be part of the file/class/namespace that contains it.
-
 SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab. 
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
 TAB_SIZE               = 4
-
-# This tag can be used to specify a number of aliases that acts 
-# as commands in the documentation. An alias has the form "name=value". 
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to 
-# put the command \sideeffect (or @sideeffect) in the documentation, which 
-# will result in a user-defined paragraph with heading "Side Effects:". 
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = 
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C 
-# sources only. Doxygen will then generate output that is more tailored for C. 
-# For instance, some of the names that are used will be different. The list 
-# of all members will be omitted, etc.
-
+ALIASES                =
+TCL_SUBST              =
 OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Java. For instance, namespaces will be presented as packages, qualified 
-# scopes will look different, etc.
-
 OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran 
-# sources only. Doxygen will then generate output that is more tailored for 
-# Fortran.
-
 OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL 
-# sources. Doxygen will then generate output that is tailored for 
-# VHDL.
-
 OPTIMIZE_OUTPUT_VHDL   = NO
-
-# Doxygen selects the parser to use depending on the extension of the files it parses. 
-# With this tag you can assign which parser to use for a given extension. 
-# Doxygen has a built-in mapping, but you can override or extend it using this tag. 
-# The format is ext=language, where ext is a file extension, and language is one of 
-# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, 
-# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat 
-# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), 
-# use: inc=Fortran f=C
-
-EXTENSION_MAPPING      = 
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want 
-# to include (a tag file for) the STL sources as input, then you should 
-# set this tag to YES in order to let doxygen match functions declarations and 
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. 
-# func(std::string) {}). This also make the inheritance and collaboration 
-# diagrams that involve STL classes more complete and accurate.
-
+EXTENSION_MAPPING      =
+MARKDOWN_SUPPORT       = YES
+AUTOLINK_SUPPORT       = YES
 BUILTIN_STL_SUPPORT    = YES
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to 
-# enable parsing support.
-
 CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. 
-# Doxygen will parse them like normal C++ but will assume all classes use public 
-# instead of private inheritance when no explicit protection keyword is present.
-
 SIP_SUPPORT            = NO
-
-# For Microsoft's IDL there are propget and propput attributes to indicate getter 
-# and setter methods for a property. Setting this option to YES (the default) 
-# will make doxygen to replace the get and set methods by a property in the 
-# documentation. This will only work if the methods are indeed getting or 
-# setting a simple type. If this is not the case, or you want to show the 
-# methods anyway, you should set this option to NO.
-
 IDL_PROPERTY_SUPPORT   = YES
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC 
-# tag is set to YES, then doxygen will reuse the documentation of the first 
-# member in the group (if any) for the other members of the group. By default 
-# all members of a group must be documented explicitly.
-
 DISTRIBUTE_GROUP_DOC   = YES
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of 
-# the same type (for instance a group of public functions) to be put as a 
-# subgroup of that type (e.g. under the Public Functions section). Set it to 
-# NO to prevent subgrouping. Alternatively, this can be done per class using 
-# the \nosubgrouping command.
-
 SUBGROUPING            = YES
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum 
-# is documented as struct, union, or enum with the name of the typedef. So 
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct 
-# with name TypeT. When disabled the typedef will appear as a member of a file, 
-# namespace, or class. And the struct will be named TypeS. This can typically 
-# be useful for C code in case the coding convention dictates that all compound 
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
 TYPEDEF_HIDES_STRUCT   = NO
-
-# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to 
-# determine which symbols to keep in memory and which to flush to disk. 
-# When the cache is full, less often used symbols will be written to disk. 
-# For small to medium size projects (<1000 input files) the default value is 
-# probably good enough. For larger projects a too small cache size can cause 
-# doxygen to be busy swapping symbols to and from disk most of the time 
-# causing a significant performance penality. 
-# If the system has enough physical memory increasing the cache will improve the 
-# performance by keeping more symbols in memory. Note that the value works on 
-# a logarithmic scale so increasing the size by one will rougly double the 
-# memory usage. The cache size is given by this formula: 
-# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, 
-# corresponding to a cache size of 2^16 = 65536 symbols
-
-SYMBOL_CACHE_SIZE      = 0
-
+LOOKUP_CACHE_SIZE      = 0
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in 
-# documentation are documented, even if no documentation was available. 
-# Private class members and static file members will be hidden unless 
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
 EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class 
-# will be included in the documentation.
-
 EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file 
-# will be included in the documentation.
-
+EXTRACT_PACKAGE        = NO
 EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) 
-# defined locally in source files will be included in the documentation. 
-# If set to NO only classes defined in header files are included.
-
 EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local 
-# methods, which are defined in the implementation section but not in 
-# the interface are included in the documentation. 
-# If set to NO (the default) only methods in the interface are included.
-
 EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be 
-# extracted and appear in the documentation as a namespace called 
-# 'anonymous_namespace{file}', where file will be replaced with the base 
-# name of the file that contains the anonymous namespace. By default 
-# anonymous namespace are hidden.
-
 EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all 
-# undocumented members of documented classes, files or namespaces. 
-# If set to NO (the default) these members will be included in the 
-# various overviews, but no documentation section is generated. 
-# This option has no effect if EXTRACT_ALL is enabled.
-
 HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all 
-# undocumented classes that are normally visible in the class hierarchy. 
-# If set to NO (the default) these classes will be included in the various 
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
 HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all 
-# friend (class|struct|union) declarations. 
-# If set to NO (the default) these declarations will be included in the 
-# documentation.
-
 HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any 
-# documentation blocks found inside the body of a function. 
-# If set to NO (the default) these blocks will be appended to the 
-# function's detailed documentation block.
-
 HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation 
-# that is typed after a \internal command is included. If the tag is set 
-# to NO (the default) then the documentation will be excluded. 
-# Set it to YES to include the internal documentation.
-
 INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate 
-# file names in lower-case letters. If set to YES upper-case letters are also 
-# allowed. This is useful if you have classes or files whose names only differ 
-# in case and if your file system supports case sensitive file names. Windows 
-# and Mac users are advised to set this option to NO.
-
 CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen 
-# will show members with their full class and namespace scopes in the 
-# documentation. If set to YES the scope will be hidden.
-
 HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen 
-# will put a list of the files that are included by a file in the documentation 
-# of that file.
-
 SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] 
-# is inserted in the documentation for inline members.
-
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
 INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen 
-# will sort the (detailed) documentation of file and class members 
-# alphabetically by member name. If set to NO the members will appear in 
-# declaration order.
-
 SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the 
-# brief documentation of file, namespace and class members alphabetically 
-# by member name. If set to NO (the default) the members will appear in 
-# declaration order.
-
 SORT_BRIEF_DOCS        = NO
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the 
-# hierarchy of group names into alphabetical order. If set to NO (the default) 
-# the group names will appear in their defined order.
-
+SORT_MEMBERS_CTORS_1ST = NO
 SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be 
-# sorted by fully-qualified names, including namespaces. If set to 
-# NO (the default), the class list will be sorted only by class name, 
-# not including the namespace part. 
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. 
-# Note: This option applies only to the class list, not to the 
-# alphabetical list.
-
 SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or 
-# disable (NO) the todo list. This list is created by putting \todo 
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or 
-# disable (NO) the test list. This list is created by putting \test 
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or 
-# disable (NO) the bug list. This list is created by putting \bug 
-# commands in the documentation.
-
+STRICT_PROTO_MATCHING  = NO
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
 GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or 
-# disable (NO) the deprecated list. This list is created by putting 
-# \deprecated commands in the documentation.
-
 GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional 
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       = 
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines 
-# the initial value of a variable or define consists of for it to appear in 
-# the documentation. If the initializer consists of more lines than specified 
-# here it will be hidden. Use a value of 0 to hide initializers completely. 
-# The appearance of the initializer of individual variables and defines in the 
-# documentation can be controlled using \showinitializer or \hideinitializer 
-# command in the documentation regardless of this setting.
-
+ENABLED_SECTIONS       =
 MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated 
-# at the bottom of the documentation of classes and structs. If set to YES the 
-# list will mention the files that were used to generate the documentation.
-
 SHOW_USED_FILES        = YES
-
-# If the sources in your project are distributed over multiple directories 
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy 
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# Set the SHOW_FILES tag to NO to disable the generation of the Files page. 
-# This will remove the Files entry from the Quick Index and from the 
-# Folder Tree View (if specified). The default is YES.
-
 SHOW_FILES             = YES
-
-# Set the SHOW_NAMESPACES tag to NO to disable the generation of the 
-# Namespaces page. 
-# This will remove the Namespaces entry from the Quick Index 
-# and from the Folder Tree View (if specified). The default is YES.
-
 SHOW_NAMESPACES        = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that 
-# doxygen should invoke to get the current version for each file (typically from 
-# the version control system). Doxygen will invoke the program by executing (via 
-# popen()) the command <command> <input-file>, where <command> is the value of 
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file 
-# provided by doxygen. Whatever the program writes to standard output 
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    = 
-
-# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by 
-# doxygen. The layout file controls the global structure of the generated output files 
-# in an output format independent way. The create the layout file that represents 
-# doxygen's defaults, run doxygen with the -l option. You can optionally specify a 
-# file name after the option, if omitted DoxygenLayout.xml will be used as the name 
-# of the layout file.
-
-LAYOUT_FILE            = 
-
+FILE_VERSION_FILTER    =
+LAYOUT_FILE            =
+CITE_BIB_FILES         =
 #---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
+# Configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated 
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are 
-# generated by doxygen. Possible values are YES and NO. If left blank 
-# NO is used.
-
+QUIET                  = YES
 WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings 
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will 
-# automatically be disabled.
-
 WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for 
-# potential errors in the documentation, such as not documenting some 
-# parameters in a documented function, or documenting parameters that 
-# don't exist or using markup commands wrongly.
-
 WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for 
-# functions that are documented, but have no documentation for their parameters 
-# or return value. If set to NO (the default) doxygen will only warn about 
-# wrong or incomplete parameter documentation, but not about the absence of 
-# documentation.
-
 WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that 
-# doxygen can produce. The string should contain the $file, $line, and $text 
-# tags, which will be replaced by the file and line number from which the 
-# warning originated and the warning text. Optionally the format may contain 
-# $version, which will be replaced by the version of the file (if it could 
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning 
-# and error messages should be written. If left blank the output is written 
-# to stderr.
-
-WARN_LOGFILE           = 
-
+WARN_FORMAT            = "$file:$line: $text "
+WARN_LOGFILE           = doxygen.log
 #---------------------------------------------------------------------------
-# configuration options related to the input files
+# Configuration options related to the input files
 #---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain 
-# documented source files. You may enter file names like "myfile.cpp" or 
-# directories like "/usr/src/mrproject". Separate the files or directories 
-# with spaces.
-
-INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@
-
-# This tag can be used to specify the character encoding of the source files 
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is 
-# also the default input encoding. Doxygen uses libiconv (or the iconv built 
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for 
-# the list of possible encodings.
-
+INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@ @ADDITIONAL_PROJECTS_SOURCE_DIR@
 INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the 
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank the following patterns are tested: 
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx 
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
-
 FILE_PATTERNS          = 
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories 
-# should be searched for input files as well. Possible values are YES and NO. 
-# If left blank NO is used.
-
 RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should 
-# excluded from the INPUT source files. This way you can easily exclude a 
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
 EXCLUDE                = 
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or 
-# directories that are symbolic links (a Unix filesystem feature) are excluded 
-# from the input.
-
 EXCLUDE_SYMLINKS       = YES
-
-# If the value of the INPUT tag contains directories, you can use the 
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude 
-# certain files from those directories. Note that the wildcards are matched 
-# against the file with absolute path, so to exclude all test directories 
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       = */.svn/*
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names 
-# (namespaces, classes, functions, etc.) that should be excluded from the 
-# output. The symbol name can be a fully qualified name, a word, or if the 
-# wildcard * is used, a substring. Examples: ANamespace, AClass, 
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        = 
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or 
-# directories that contain example code fragments that are included (see 
-# the \include command).
-
-EXAMPLE_PATH           = 
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the 
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
-# and *.h) to filter out the source-files in the directories. If left 
-# blank all files are included.
-
+EXCLUDE_PATTERNS       = .hg/* .git/* */tu/*
+EXCLUDE_SYMBOLS        = ServiceImplConceptCheck* ServiceObjectConceptCheck* ServiceTypeConceptCheck* camp::detail __FWCORE*
+EXAMPLE_PATH           =
 EXAMPLE_PATTERNS       = 
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be 
-# searched for input files to be used with the \include or \dontinclude 
-# commands irrespective of the value of the RECURSIVE tag. 
-# Possible values are YES and NO. If left blank NO is used.
-
 EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or 
-# directories that contain image that are included in the documentation (see 
-# the \image command).
-
-IMAGE_PATH             = 
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should 
-# invoke to filter for each input file. Doxygen will invoke the filter program 
-# by executing (via popen()) the command <filter> <input-file>, where <filter> 
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an 
-# input file. Doxygen will then use the output that the filter program writes 
-# to standard output. 
-# If FILTER_PATTERNS is specified, this tag will be 
-# ignored.
-
-INPUT_FILTER           = 
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern 
-# basis. 
-# Doxygen will compare the file name with each pattern and apply the 
-# filter if there is a match. 
-# The filters are a list of the form: 
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further 
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER 
-# is applied to all files.
-
-FILTER_PATTERNS        = 
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using 
-# INPUT_FILTER) will be used to filter the input files when producing source 
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
 FILTER_SOURCE_FILES    = NO
-
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE = README.md
 #---------------------------------------------------------------------------
-# configuration options related to source browsing
+# Configuration options related to source browsing
 #---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will 
-# be generated. Documented entities will be cross-referenced with these sources. 
-# Note: To get rid of all source code in the generated output, make sure also 
-# VERBATIM_HEADERS is set to NO.
-
 SOURCE_BROWSER         = YES
-
-# Setting the INLINE_SOURCES tag to YES will include the body 
-# of functions and classes directly in the documentation.
-
 INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct 
-# doxygen to hide any special comment blocks from generated source code 
-# fragments. Normal C and C++ comments will always remain visible.
-
 STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES 
-# then for each documented function all documented 
-# functions referencing it will be listed.
-
 REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES 
-# then for each documented function all documented entities 
-# called/used by that function will be listed.
-
 REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) 
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from 
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will 
-# link to the source code. 
-# Otherwise they will link to the documentation.
-
 REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code 
-# will point to the HTML generated by the htags(1) tool instead of doxygen 
-# built-in source browser. The htags tool is part of GNU's global source 
-# tagging system (see http://www.gnu.org/software/global/global.html). You 
-# will need version 4.8.6 or higher.
-
+SOURCE_TOOLTIPS        = YES
 USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen 
-# will generate a verbatim copy of the header file for each class for 
-# which an include is specified. Set to NO to disable this.
-
 VERBATIM_HEADERS       = YES
-
 #---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
+# Configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index 
-# of all compounds will be generated. Enable this if the project 
-# contains a lot of classes, structs, unions or interfaces.
-
 ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then 
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns 
-# in which this list will be split (can be a number in the range [1..20])
-
 COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all 
-# classes will be put under the same header in the alphabetical index. 
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that 
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          = 
-
+IGNORE_PREFIX          =
 #---------------------------------------------------------------------------
-# configuration options related to the HTML output
+# Configuration options related to the HTML output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will 
-# generate HTML output.
-
 GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `html' will be used as the default path.
-
 HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for 
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank 
-# doxygen will generate files with .html extension.
-
 HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard header.
-
-HTML_HEADER            = 
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for 
-# each generated HTML page. If it is left blank doxygen will generate a 
-# standard footer.
-
-HTML_FOOTER            = 
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading 
-# style sheet that is used by each HTML page. It can be used to 
-# fine-tune the look of the HTML output. If the tag is left blank doxygen 
-# will generate a default style sheet. Note that doxygen will try to copy 
-# the style sheet file to the HTML output directory, so don't put your own 
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        = 
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, 
-# files or namespaces will be aligned in HTML using tables. If set to 
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML 
-# documentation will contain sections that can be hidden and shown after the 
-# page has loaded. For this to work a browser that supports 
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox 
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files 
-# will be generated that can be used as input for Apple's Xcode 3 
-# integrated development environment, introduced with OSX 10.5 (Leopard). 
-# To create a documentation set, doxygen will generate a Makefile in the 
-# HTML output directory. Running make will produce the docset in that 
-# directory and running "make install" will install the docset in 
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find 
-# it at startup. 
-# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the 
-# feed. A documentation feed provides an umbrella under which multiple 
-# documentation sets from a single provider (such as a company or product suite) 
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that 
-# should uniquely identify the documentation set bundle. This should be a 
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen 
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files 
-# will be generated that can be used as input for tools like the 
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) 
-# of the generated HTML documentation.
-
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        =
+HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_FILES       =
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = YES
+HTML_DYNAMIC_SECTIONS  = YES
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET        = YES
+DOCSET_FEEDNAME        = "Doxygen docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Doxygen
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
 GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can 
-# be used to specify the file name of the resulting .chm file. You 
-# can add a path in front of the file if the result should not be 
-# written to the html output directory.
-
-CHM_FILE               = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can 
-# be used to specify the location (absolute path including file name) of 
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run 
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag 
-# controls if a separate .chi index file is generated (YES) or that 
-# it should be included in the master .chm file (NO).
-
+CHM_FILE               =
+HHC_LOCATION           =
 GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING 
-# is used to encode HtmlHelp index (hhk), content (hhc) and project file 
-# content.
-
-CHM_INDEX_ENCODING     = 
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag 
-# controls whether a binary table of contents is generated (YES) or a 
-# normal table of contents (NO) in the .chm file.
-
+CHM_INDEX_ENCODING     =
 BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members 
-# to the contents of the HTML help documentation and to the tree view.
-
 TOC_EXPAND             = NO
-
-# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER 
-# are set, an additional index file will be generated that can be used as input for 
-# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated 
-# HTML documentation.
-
 GENERATE_QHP           = NO
-
-# If the QHG_LOCATION tag is specified, the QCH_FILE tag can 
-# be used to specify the file name of the resulting .qch file. 
-# The path specified is relative to the HTML output folder.
-
-QCH_FILE               = 
-
-# The QHP_NAMESPACE tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#namespace
-
-QHP_NAMESPACE          = 
-
-# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating 
-# Qt Help Project output. For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#virtual-folders
-
+QCH_FILE               =
+QHP_NAMESPACE          = org.doxygen.Project
 QHP_VIRTUAL_FOLDER     = doc
-
-# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. 
-# For more information please see 
-# http://doc.trolltech.com/qthelpproject.html#custom-filters
-
-QHP_CUST_FILTER_NAME   = 
-
-# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see 
-# <a href="http://doc.trolltech.com/qthelpproject.html#custom-filters">Qt Help Project / Custom Filters</a>.
-
-QHP_CUST_FILTER_ATTRS  = 
-
-# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's 
-# filter section matches. 
-# <a href="http://doc.trolltech.com/qthelpproject.html#filter-attributes">Qt Help Project / Filter Attributes</a>.
-
-QHP_SECT_FILTER_ATTRS  = 
-
-# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can 
-# be used to specify the location of Qt's qhelpgenerator. 
-# If non-empty doxygen will try to run qhelpgenerator on the generated 
-# .qhp file.
-
-QHG_LOCATION           = 
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at 
-# top of each HTML page. The value NO (the default) enables the index and 
-# the value YES disables it.
-
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
 DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20]) 
-# that doxygen will group on one line in the generated HTML documentation.
-
+GENERATE_TREEVIEW      = YES
 ENUM_VALUES_PER_LINE   = 4
-
-# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index 
-# structure should be generated to display hierarchical information. 
-# If the tag value is set to FRAME, a side panel will be generated 
-# containing a tree-like index structure (just like the one that 
-# is generated for HTML Help). For this to work a browser that supports 
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, 
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are 
-# probably better off using the HTML help feature. Other possible values 
-# for this tag are: HIERARCHIES, which will generate the Groups, Directories, 
-# and Class Hierarchy pages using a tree view instead of an ordered list; 
-# ALL, which combines the behavior of FRAME and HIERARCHIES; and NONE, which 
-# disables this behavior completely. For backwards compatibility with previous 
-# releases of Doxygen, the values YES and NO are equivalent to FRAME and NONE 
-# respectively.
-
-GENERATE_TREEVIEW      = HIERARCHIES
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be 
-# used to set the initial width (in pixels) of the frame in which the tree 
-# is shown.
-
 TREEVIEW_WIDTH         = 250
-
-# Use this tag to change the font size of Latex formulas included 
-# as images in the HTML documentation. The default is 10. Note that 
-# when you change the font size after a successful doxygen run you need 
-# to manually remove any form_*.png images from the HTML output directory 
-# to force them to be regenerated.
-
+EXT_LINKS_IN_WINDOW    = NO
 FORMULA_FONTSIZE       = 10
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS     =
+MATHJAX_CODEFILE       =
+SEARCHENGINE           = YES
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       =
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     =
+EXTRA_SEARCH_MAPPINGS  =
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will 
-# generate Latex output.
-
 GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be 
-# invoked. If left blank `latex' will be used as the default command name.
-
+LATEX_OUTPUT           =
 LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to 
-# generate index for LaTeX. If left blank `makeindex' will be used as the 
-# default command name.
-
 MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact 
-# LaTeX documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
 COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used 
-# by the printer. Possible values are: a4, a4wide, letter, legal and 
-# executive. If left blank a4wide will be used.
-
 PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX 
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         = 
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for 
-# the generated latex document. The header should contain everything until 
-# the first chapter. If it is left blank doxygen will generate a 
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           = 
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated 
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will 
-# contain links (just like the HTML output) instead of page references 
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = NO
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of 
-# plain latex in the generated Makefile. Set this option to YES to get a 
-# higher quality PDF documentation.
-
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+LATEX_FOOTER           =
+LATEX_EXTRA_FILES      =
+PDF_HYPERLINKS         = YES
 USE_PDFLATEX           = NO
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. 
-# command to the generated LaTeX files. This will instruct LaTeX to keep 
-# running if errors occur, instead of asking the user for help. 
-# This option is also used when generating formulas in HTML.
-
 LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not 
-# include the index chapters (such as File Index, Compound Index, etc.) 
-# in the output.
-
 LATEX_HIDE_INDICES     = NO
-
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
 #---------------------------------------------------------------------------
-# configuration options related to the RTF output
+# Configuration options related to the RTF output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output 
-# The RTF output is optimized for Word 97 and may not look very pretty with 
-# other RTF readers or editors.
-
 GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact 
-# RTF documents. This may be useful for small projects and may help to 
-# save some trees in general.
-
+RTF_OUTPUT             =
 COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated 
-# will contain hyperlink fields. The RTF file will 
-# contain links (just like the HTML output) instead of page references. 
-# This makes the output suitable for online browsing using WORD or other 
-# programs which support those fields. 
-# Note: wordpad (write) and others do not support links.
-
 RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's 
-# config file, i.e. a series of assignments. You only have to provide 
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    = 
-
-# Set optional variables used in the generation of an rtf document. 
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    = 
-
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
 #---------------------------------------------------------------------------
-# configuration options related to the man page output
+# Configuration options related to the man page output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will 
-# generate man pages
-
 GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to 
-# the generated man pages (default is the subroutine's section .3)
-
+MAN_OUTPUT             =
 MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output, 
-# then it will generate one additional man file for each entity 
-# documented in the real man page(s). These additional files 
-# only source the real man page, but without them the man command 
-# would be unable to find the correct page. The default is NO.
-
+MAN_SUBDIR             =
 MAN_LINKS              = NO
-
 #---------------------------------------------------------------------------
-# configuration options related to the XML output
+# Configuration options related to the XML output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will 
-# generate an XML file that captures the structure of 
-# the code including all documentation.
-
 GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put. 
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be 
-# put in front of it. If left blank `xml' will be used as the default path.
-
 XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_SCHEMA             = 
-
-# The XML_DTD tag can be used to specify an XML DTD, 
-# which can be used by a validating XML parser to check the 
-# syntax of the XML files.
-
-XML_DTD                = 
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will 
-# dump the program listings (including syntax highlighting 
-# and cross-referencing information) to the XML output. Note that 
-# enabling this will significantly increase the size of the XML output.
-
 XML_PROGRAMLISTING     = YES
-
 #---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+DOCBOOK_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will 
-# generate an AutoGen Definitions (see autogen.sf.net) file 
-# that captures the structure of the code including all 
-# documentation. Note that this feature is still experimental 
-# and incomplete at the moment.
-
 GENERATE_AUTOGEN_DEF   = NO
-
 #---------------------------------------------------------------------------
-# configuration options related to the Perl module output
+# Configuration options related to the Perl module output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will 
-# generate a Perl module file that captures the structure of 
-# the code including all documentation. Note that this 
-# feature is still experimental and incomplete at the 
-# moment.
-
 GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate 
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able 
-# to generate PDF and DVI output from the Perl module output.
-
 PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be 
-# nicely formatted so it can be parsed by a human reader. 
-# This is useful 
-# if you want to understand what is going on. 
-# On the other hand, if this 
-# tag is set to NO the size of the Perl module output will be much smaller 
-# and Perl will parse it just the same.
-
 PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file 
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. 
-# This is useful so different doxyrules.make files included by the same 
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX = 
-
+PERLMOD_MAKEVAR_PREFIX =
 #---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
+# Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will 
-# evaluate all C-preprocessor directives found in the sources and include 
-# files.
-
 ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro 
-# names in the source code. If set to NO (the default) only conditional 
-# compilation will be performed. Macro expansion can be done in a controlled 
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
 MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES 
-# then the macro expansion is limited to the macros specified with the 
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
 EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files 
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
 SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that 
-# contain include files that are not input files but should be processed by 
-# the preprocessor.
-
 INCLUDE_PATH           = @INCLUDE_DIRS@
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard 
-# patterns (like *.h and *.hpp) to filter out the header-files in the 
-# directories. If left blank, the patterns specified with FILE_PATTERNS will 
-# be used.
-
-INCLUDE_FILE_PATTERNS  = 
-
-# The PREDEFINED tag can be used to specify one or more macro names that 
-# are defined before the preprocessor is started (similar to the -D option of 
-# gcc). The argument of the tag is a list of macros of the form: name 
-# or name=definition (no spaces). If the definition and the = are 
-# omitted =1 is assumed. To prevent a macro definition from being 
-# undefined via #undef or recursively expanded use the := operator 
-# instead of the = operator.
-
-PREDEFINED             = 
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then 
-# this tag can be used to specify a list of macro names that should be expanded. 
-# The macro definition that is found in the sources will be used. 
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      = 
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then 
-# doxygen's preprocessor will remove all function-like macros that are alone 
-# on a line, have an all uppercase name, and do not end with a semicolon. Such 
-# function macros are typically used for boiler-plate code, and will confuse 
-# the parser if not removed.
-
+INCLUDE_FILE_PATTERNS  =
+PREDEFINED             =
+EXPAND_AS_DEFINED      =
 SKIP_FUNCTION_MACROS   = YES
-
 #---------------------------------------------------------------------------
-# Configuration::additions related to external references   
+# Configuration options related to external references
 #---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles. 
-# Optionally an initial location of the external documentation 
-# can be added for each tagfile. The format of a tag file without 
-# this location is as follows: 
-#  
-# TAGFILES = file1 file2 ... 
-# Adding location for the tag files is done as follows: 
-#  
-# TAGFILES = file1=loc1 "file2 = loc2" ... 
-# where "loc1" and "loc2" can be relative or absolute paths or 
-# URLs. If a location is present for each tag, the installdox tool 
-# does not have to be run to correct the links. 
-# Note that each tag file must have a unique name 
-# (where the name does NOT include the path) 
-# If a tag file is not located in the directory in which doxygen 
-# is run, you must also specify the path to the tagfile here.
-
 TAGFILES               = 
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create 
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = 
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed 
-# in the class index. If set to NO only the inherited external classes 
-# will be listed.
-
+GENERATE_TAGFILE       = doxygen.tag
 ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed 
-# in the modules index. If set to NO, only the current project's groups will 
-# be listed.
-
 EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script 
-# interpreter (i.e. the result of `which perl').
-
+EXTERNAL_PAGES         = YES
 PERL_PATH              = /usr/bin/perl
-
 #---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
+# Configuration options related to the dot tool
 #---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will 
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base 
-# or super classes. Setting the tag to NO turns the diagrams off. Note that 
-# this option is superseded by the HAVE_DOT option below. This is only a 
-# fallback. It is recommended to install and use dot, since it yields more 
-# powerful graphs.
-
-CLASS_DIAGRAMS         = YES #======
-#CLASS_DIAGRAMS         = NO
-
-# You can define message sequence charts within doxygen comments using the \msc 
-# command. Doxygen will then run the mscgen tool (see 
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the 
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where 
-# the mscgen tool resides. If left empty the tool is assumed to be found in the 
-# default search path.
-
-MSCGEN_PATH            = 
-
-# If set to YES, the inheritance and collaboration graphs will hide 
-# inheritance and usage relations if the target is undocumented 
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = NO
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is 
-# available from the path. This tool is part of Graphviz, a graph visualization 
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section 
-# have no effect if this option is set to NO (the default)
-
+CLASS_DIAGRAMS         = YES
+MSCGEN_PATH            =
+DIA_PATH               =
+HIDE_UNDOC_RELATIONS   = YES
 HAVE_DOT               = YES
-
-# By default doxygen will write a font called FreeSans.ttf to the output 
-# directory and reference it in all dot files that doxygen generates. This 
-# font does not include all possible unicode characters however, so when you need 
-# these (or just want a differently looking font) you can specify the font name 
-# using DOT_FONTNAME. You need need to make sure dot is able to find the font, 
-# which can be done by putting it in a standard location or by setting the 
-# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory 
-# containing the font.
-
-DOT_FONTNAME           = FreeSans
-
-# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. 
-# The default size is 10pt.
-
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Helvetica
 DOT_FONTSIZE           = 10
-
-# By default doxygen will tell dot to use the output directory to look for the 
-# FreeSans.ttf font (which doxygen will put there itself). If you specify a 
-# different font using DOT_FONTNAME you can set the path where dot 
-# can find it using this tag.
-
-DOT_FONTPATH           = 
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect inheritance relations. Setting this tag to YES will force the 
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES #======
-#CLASS_GRAPH            = NO
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for each documented class showing the direct and 
-# indirect implementation dependencies (inheritance, containment, and 
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES #======
-#COLLABORATION_GRAPH    = NO
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen 
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES #======
-#GROUP_GRAPHS           = NO
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and 
-# collaboration diagrams in a style similar to the OMG's Unified Modeling 
-# Language.
-
+DOT_FONTPATH           =
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
 UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the 
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = YES #======
-#TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT 
-# tags are set to YES then doxygen will generate a graph for each documented 
-# file showing the direct and indirect include dependencies of the file with 
-# other documented files.
-
-INCLUDE_GRAPH          = YES #======
-#INCLUDE_GRAPH          = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and 
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each 
-# documented header file showing the documented files that directly or 
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES #======
-#INCLUDED_BY_GRAPH      = NO
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then 
-# doxygen will generate a call dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable call graphs 
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = YES #======
-#CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then 
-# doxygen will generate a caller dependency graph for every global function 
-# or class method. Note that enabling this option will significantly increase 
-# the time of a run. So in most cases it will be better to enable caller 
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = YES #======
-#CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen 
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES #======
-#GRAPHICAL_HIERARCHY    = NO
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES 
-# then doxygen will show the dependencies a directory has on other directories 
-# in a graphical way. The dependency relations are determined by the #include 
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES #======
-#DIRECTORY_GRAPH        = NO
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images 
-# generated by dot. Possible values are png, jpg, or gif 
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be 
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               = #################################################
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that 
-# contain dot files that are included in the documentation (see the 
-# \dotfile command).
-
-DOTFILE_DIRS           = 
-
-# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of 
-# nodes that will be shown in the graph. If the number of nodes in a graph 
-# becomes larger than this value, doxygen will truncate the graph, which is 
-# visualized by representing a node as a red box. Note that doxygen if the 
-# number of direct children of the root node in a graph is already larger than 
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note 
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
+UML_LIMIT_NUM_FIELDS   = 10
+TEMPLATE_RELATIONS     = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = YES
+CALLER_GRAPH           = YES
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = svg
+INTERACTIVE_SVG        = YES
+DOT_PATH               =
+DOTFILE_DIRS           =
+MSCFILE_DIRS           =
+DIAFILE_DIRS           =
+PLANTUML_JAR_PATH      =
 DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the 
-# graphs generated by dot. A depth value of 3 means that only nodes reachable 
-# from the root by following a path via at most 3 edges will be shown. Nodes 
-# that lay further from the root node will be omitted. Note that setting this 
-# option to 1 or 2 may greatly reduce the computation time needed for large 
-# code bases. Also note that the size of a graph can be further restricted by 
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
 MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent 
-# background. This is disabled by default, because dot on Windows does not 
-# seem to support this out of the box. Warning: Depending on the platform used, 
-# enabling this option may lead to badly anti-aliased labels on the edges of 
-# a graph (i.e. they become hard to read).
-
 DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output 
-# files in one run (i.e. multiple -o and -T options on the command line). This 
-# makes dot run faster, but since only newer versions of dot (>1.8.10) 
-# support this, this feature is disabled by default.
-
 DOT_MULTI_TARGETS      = YES
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will 
-# generate a legend page explaining the meaning of the various boxes and 
-# arrows in the dot generated graphs.
-
 GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will 
-# remove the intermediate dot files that are used to generate 
-# the various graphs.
-
 DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Options related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be 
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
diff --git a/CMake/doxygen/MainPage.dox b/CMake/doxygen/MainPage.dox
deleted file mode 100644
index 7061bd8..0000000
--- a/CMake/doxygen/MainPage.dox
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- *
- * \mainpage  fw4spl: Framework For Software Production Line
- * 
- *
- */
-
diff --git a/CMake/doxygen/doxygen_generator.cmake b/CMake/doxygen/doxygen_generator.cmake
new file mode 100644
index 0000000..efb892a
--- /dev/null
+++ b/CMake/doxygen/doxygen_generator.cmake
@@ -0,0 +1,30 @@
+# Generates doxygen for all specified projects.
+# Works only with fw4spl CMake script.
+function(doxygenGenerator)
+    include(${CMAKE_ROOT}/Modules/Documentation.cmake)
+    find_package(Doxygen)
+    
+    if(DOXYGEN_FOUND)
+        set(INCLUDE_DIRS)
+        foreach(PROJECT ${PROJECT_LIST})
+            if(TARGET ${PROJECT})
+                get_target_property(PROJECT_INCLUDE_DIRECTORIES ${PROJECT} INCLUDE_DIRECTORIES)
+                if(PROJECT_INCLUDE_DIRECTORIES)
+                    list(REMOVE_DUPLICATES PROJECT_INCLUDE_DIRECTORIES)
+                    foreach(DEPENDENCY ${PROJECT_INCLUDE_DIRECTORIES})
+                        list(APPEND INCLUDE_DIRS ${DEPENDENCY})
+                    endforeach()
+                endif()
+            elseif(EXISTS "${${PROJECT}_DIR}/include")
+                list(APPEND INCLUDE_DIRS "${${PROJECT}_DIR}/include/")
+            endif()
+        endforeach()
+        list(REMOVE_DUPLICATES INCLUDE_DIRS)
+        string(REPLACE ";" " " INCLUDE_DIRS "${INCLUDE_DIRS}")
+        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMake/doxygen/Doxyfile.in 
+                       ${CMAKE_CURRENT_BINARY_DIR}/Documentation/Doxygen/Doxyfile @ONLY)
+        add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Documentation/Doxygen/Doxyfile
+            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT
+            "Generating API documentation with Doxygen" VERBATIM)
+    endif()
+endfunction()
diff --git a/CMake/eclipse/.cproject.in b/CMake/eclipse/.cproject.in
new file mode 100644
index 0000000..2c768bc
--- /dev/null
+++ b/CMake/eclipse/.cproject.in
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<?fileVersion 4.0.0?>
+<cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
+    <!--
+    BUILD_PATH        = @BUILD_PATH@
+    PROJECT_NAME_USER = @PROJECT_NAME_USER@
+    PROJECT_NAME      = @PROJECT_NAME@
+    DEPS_INCLUDES     = @DEPS_INCLUDES@
+    MAKE              = @MAKE@
+    -->
+    <storageModule moduleId="org.eclipse.cdt.core.settings">
+        <cconfiguration id="0.945266578">
+            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.945266578" moduleId="org.eclipse.cdt.core.settings" name="Build @PROJECT_NAME@">
+                <externalSettings/>
+                <extensions>
+                    <extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                </extensions>
+            </storageModule>
+            <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                <configuration artifactName="@PROJECT_NAME_USER@" buildProperties="" description="" id="0.945266578" name="Build" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+                    <folderInfo id="0.945266578." name="/" resourcePath="">
+                        <toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.671624611" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
+                            <targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.671624611.1182702742" name=""/>
+                            <builder arguments="" buildPath="@BUILD_PATH@" cleanBuildTarget="-c @PROJECT_NAME@" command="@MAKE@" id="org.eclipse.cdt.build.core.settings.default.builder.377367477" incrementalBuildTarget="@PROJECT_NAME@" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
+                            <tool id="org.eclipse.cdt.build.core.settings.holder.libs.240675590" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs">
+                                <option id="org.eclipse.cdt.build.core.settings.holder.libpaths.2040018006" name="Library Paths" superClass="org.eclipse.cdt.build.core.settings.holder.libpaths" valueType="libPaths">
+                                </option>
+                            </tool>
+                            <tool id="org.eclipse.cdt.build.core.settings.holder.1509269446" name="Assembly" superClass="org.eclipse.cdt.build.core.settings.holder">
+                                <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.855471375" languageId="org.eclipse.cdt.core.assembly" languageName="Assembly" sourceContentType="org.eclipse.cdt.core.asmSource" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+                            </tool>
+                            <tool id="org.eclipse.cdt.build.core.settings.holder.1575943659" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
+                                <option id="org.eclipse.cdt.build.core.settings.holder.incpaths.1251103639" superClass="org.eclipse.cdt.build.core.settings.holder.incpaths" valueType="includePath">
+                                    @DEPS_INCLUDES@
+                                </option>
+                                <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.57575828" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+                            </tool>
+                            <tool id="org.eclipse.cdt.build.core.settings.holder.746746138" name="GNU C" superClass="org.eclipse.cdt.build.core.settings.holder">
+                                <inputType id="org.eclipse.cdt.build.core.settings.holder.inType.538761431" languageId="org.eclipse.cdt.core.gcc" languageName="GNU C" sourceContentType="org.eclipse.cdt.core.cSource,org.eclipse.cdt.core.cHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>
+                            </tool>
+                        </toolChain>
+                    </folderInfo>
+                </configuration>
+            </storageModule>
+            <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+        </cconfiguration>
+        <cconfiguration id="0.945266578.837898353.967377430">
+            <storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="0.945266578.837898353.967377430" moduleId="org.eclipse.cdt.core.settings" name="Build">
+                <externalSettings/>
+                <extensions>
+                    <extension id="org.eclipse.cdt.core.VCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                    <extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
+                </extensions>
+            </storageModule>
+            <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+                <configuration artifactName="@PROJECT_NAME_USER@" buildProperties="" description="" id="0.945266578.837898353.967377430" name="Build" parent="org.eclipse.cdt.build.core.prefbase.cfg">
+                    <folderInfo id="0.945266578.837898353.967377430." name="/" resourcePath="">
+                        <toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.772408819" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
+                            <targetPlatform id="org.eclipse.cdt.build.core.prefbase.toolchain.772408819.1751368155" name=""/>
+                            <builder arguments="" buildPath="@BUILD_PATH@" cleanBuildTarget="-c @PROJECT_NAME@" command="@MAKE@" id="org.eclipse.cdt.build.core.settings.default.builder.1414762219" incrementalBuildTarget="@PROJECT_NAME@" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
+                            <tool id="org.eclipse.cdt.build.core.settings.holder.libs.543704817" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
+                        </toolChain>
+                    </folderInfo>
+                </configuration>
+            </storageModule>
+            <storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
+        </cconfiguration>
+    </storageModule>
+    <storageModule moduleId="cdtBuildSystem" version="4.0.0">
+        <project id="@PROJECT_NAME at .null.1066214194" name="@PROJECT_NAME@"/>
+    </storageModule>
+    <storageModule moduleId="scannerConfiguration">
+        <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+        <scannerConfigBuildInfo instanceId="0.945266578">
+            <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
+        </scannerConfigBuildInfo>
+    </storageModule>
+    <storageModule moduleId="refreshScope" versionNumber="1">
+        <resource resourceType="PROJECT" workspacePath="/@PROJECT_NAME@"/>
+    </storageModule>
+    <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
+        <buildTargets>
+
+            <target name="Build @PROJECT_NAME@" path="" targetID="org.eclipse.cdt.build.MakeTargetBuilder">
+                <buildCommand>@MAKE@</buildCommand>
+                <buildArguments></buildArguments>
+                <buildTarget>@PROJECT_NAME@</buildTarget>
+                <stopOnError>true</stopOnError>
+                <useDefaultCommand>false</useDefaultCommand>
+                <runAllBuilders>true</runAllBuilders>
+            </target>
+
+             </buildTargets>
+    </storageModule>
+</cproject>
diff --git a/CMake/eclipse/.project.in b/CMake/eclipse/.project.in
new file mode 100644
index 0000000..5796ede
--- /dev/null
+++ b/CMake/eclipse/.project.in
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+    <!--
+    PROJECT_NAME_USER = @PROJECT_NAME_USER@
+    PROJECT_NAME      = @PROJECT_NAME@
+    MAKE              = @MAKE@
+    -->
+    <name>@PROJECT_NAME_USER@</name>
+    <comment></comment>
+    <projects>
+    </projects>
+    <buildSpec>
+        <buildCommand>
+            <name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
+            <triggers>clean,full,incremental,</triggers>
+            <arguments>
+                <dictionary>
+                    <key>@PROJECT_NAME@</key>
+                    <value></value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.append_environment</key>
+                    <value>true</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.autoBuildTarget</key>
+                    <value>all</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.buildArguments</key>
+                    <value></value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.buildCommand</key>
+                    <value>@MAKE@</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
+                    <value>clean</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.contents</key>
+                    <value>org.eclipse.cdt.make.core.activeConfigSettings</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.enableAutoBuild</key>
+                    <value>false</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.enableCleanBuild</key>
+                    <value>true</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.enableFullBuild</key>
+                    <value>true</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.fullBuildTarget</key>
+                    <value>all</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.stopOnError</key>
+                    <value>true</value>
+                </dictionary>
+                <dictionary>
+                    <key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
+                    <value>false</value>
+                </dictionary>
+            </arguments>
+        </buildCommand>
+        <buildCommand>
+            <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder</name>
+            <triggers>full,incremental,</triggers>
+            <arguments>
+            </arguments>
+        </buildCommand>
+    </buildSpec>
+    <natures>
+        <nature>org.eclipse.cdt.core.cnature</nature>
+        <nature>org.eclipse.cdt.core.ccnature</nature>
+        <nature>org.eclipse.cdt.managedbuilder.core.managedBuildNature</nature>
+        <nature>org.eclipse.cdt.managedbuilder.core.ScannerConfigNature</nature>
+    </natures>
+</projectDescription>
diff --git a/CMake/eclipse/eclipse_generator.cmake b/CMake/eclipse/eclipse_generator.cmake
new file mode 100644
index 0000000..44b7217
--- /dev/null
+++ b/CMake/eclipse/eclipse_generator.cmake
@@ -0,0 +1,63 @@
+# Generates Eclipse project (.project + .cproject) for all specified projects.
+# Works only with fw4spl CMake script.
+function(eclipseGenerator)
+
+    #find compiler system include directories
+    if(WIN32)
+        set(SYSTEM_INCLUDES "$ENV{INCLUDE}")
+    else()
+        include(CMakeExtraGeneratorDetermineCompilerMacrosAndIncludeDirs)
+        set(SYSTEM_INCLUDES ${CMAKE_EXTRA_GENERATOR_C_SYSTEM_INCLUDE_DIRS} ${CMAKE_EXTRA_GENERATOR_CXX_SYSTEM_INCLUDE_DIRS})
+    endif()
+    
+    foreach(PROJECT ${ARGV})
+        if(NOT TARGET ${PROJECT})
+            message("Project target ${PROJECT} doesn't exist")
+            continue()
+        endif()
+        message(STATUS "Generating ${PROJECT} Eclipse project")
+        #configure eclipse project template
+        set(BUILD_PATH ${CMAKE_BINARY_DIR})
+        set(PROJECT_NAME ${PROJECT})
+
+        set(TYPE ${${PROJECT}_TYPE})
+        if( TYPE STREQUAL "EXECUTABLE" )
+            set(PROJECT_NAME_USER "exec-${PROJECT}")
+        elseif( TYPE STREQUAL "LIBRARY" )
+            set(PROJECT_NAME_USER "lib-${PROJECT}")
+        elseif( TYPE STREQUAL "BUNDLE" )
+            set(PROJECT_NAME_USER "bundle-${PROJECT}")
+        elseif( TYPE STREQUAL "TEST" )
+            set(PROJECT_NAME_USER "test-${PROJECT}")
+        elseif( TYPE STREQUAL "APP")
+            set(PROJECT_NAME_USER "app-${PROJECT}")
+        else()
+            set(PROJECT_NAME_USER "unknown-${PROJECT}")
+        endif()
+        set(MAKE ${CMAKE_MAKE_PROGRAM})
+        set(DEPS_INCLUDES "")
+        
+        get_target_property(PROJECT_INCLUDE_DIRECTORIES ${PROJECT} INCLUDE_DIRECTORIES)
+        list(REMOVE_DUPLICATES PROJECT_INCLUDE_DIRECTORIES)
+        foreach(INCLUDE_DIR ${PROJECT_INCLUDE_DIRECTORIES})
+            set(DEPS_INCLUDES "${DEPS_INCLUDES}\n<listOptionValue builtIn=\"false\" value=\"${INCLUDE_DIR}\"/>")
+        endforeach()
+        
+        foreach(DEPENDENCY ${${PROJECT}_DEPENDENCIES})
+            get_target_property(DEPENDENCY_INCLUDE_DIRECTORIES ${DEPENDENCY} INCLUDE_DIRECTORIES)
+            list(REMOVE_DUPLICATES DEPENDENCY_INCLUDE_DIRECTORIES)
+            foreach(INCLUDE_DIR ${DEPENDENCY_INCLUDE_DIRECTORIES})
+                set(DEPS_INCLUDES "${DEPS_INCLUDES}\n<listOptionValue builtIn=\"false\" value=\"${INCLUDE_DIR}\"/>")
+            endforeach()
+        endforeach()
+        
+        #add system include dirs
+        foreach(SYS_INC ${SYSTEM_INCLUDES})
+            string( REGEX REPLACE "\\\\" "/" SYS_INC ${SYS_INC} )
+            set(DEPS_INCLUDES "${DEPS_INCLUDES}\n<listOptionValue builtIn=\"false\" value=\"${SYS_INC}\"/>")
+        endforeach()
+        
+        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMake/eclipse/.cproject.in ${${PROJECT}_DIR}/.cproject @ONLY )
+        configure_file(${CMAKE_CURRENT_SOURCE_DIR}/CMake/eclipse/.project.in ${${PROJECT}_DIR}/.project @ONLY )
+    endforeach()
+endfunction()
diff --git a/CMake/install/generic_install.cmake b/CMake/install/generic_install.cmake
new file mode 100644
index 0000000..0aaee58
--- /dev/null
+++ b/CMake/install/generic_install.cmake
@@ -0,0 +1,29 @@
+if(APPLE)
+    include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/osx_install.cmake)
+elseif(WIN32)
+    include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/win_install.cmake)
+elseif(UNIX)
+    include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/linux_install.cmake)
+endif()
+
+macro(generic_install)
+    if(${FWPROJECT_NAME}_INSTALL)
+
+        #qt plugins setup
+        if(QT_REQUIREMENTS) # set by helper.cmake -> qt_setup() macros
+             foreach(QT_REQUIREMENT ${QT_REQUIREMENTS})
+                 get_filename_component(QT_REQ_DIR ${QT_REQUIREMENT} DIRECTORY)
+                 install(DIRECTORY "${EXTERNAL_LIBRARIES}/${QT_REQUIREMENT}" DESTINATION "${QT_REQ_DIR}" )
+            endforeach()
+
+        endif()
+        if(APPLE)
+            osx_install(${FWPROJECT_NAME})
+        elseif(WIN32)
+            win_install(${FWPROJECT_NAME})
+        elseif(UNIX)
+            linux_install(${FWPROJECT_NAME})
+        endif()
+    endif()
+
+endmacro(generic_install)
diff --git a/CMake/install/helper.cmake b/CMake/install/helper.cmake
new file mode 100644
index 0000000..0141bd3
--- /dev/null
+++ b/CMake/install/helper.cmake
@@ -0,0 +1,30 @@
+macro(qt_plugins_setup)
+    
+    # check if there is a PLUGINS variable in the current bundle properties.cmake
+    if(PLUGINS)
+        string(LENGTH "${EXTERNAL_LIBRARIES}/" QT_LENGTH)
+        
+        # search in qml and plugins dirs
+        file(GLOB QT_DIRS  "${EXTERNAL_LIBRARIES}/qml/*" "${EXTERNAL_LIBRARIES}/plugins/*")
+        foreach(CURRENT_DIR ${QT_DIRS})
+    
+            get_filename_component(QT_NAME ${CURRENT_DIR} NAME)
+            string(FIND "${PLUGINS}" ${QT_NAME} QT_TEST)
+            if( NOT ${QT_TEST} EQUAL -1 )
+                
+                file(GLOB_RECURSE QT_FILES  "${CURRENT_DIR}/*")
+            
+                string(LENGTH ${CURRENT_DIR} CURRENT_LENGTH)
+                MATH( EXPR FINAL_LENGTH "${CURRENT_LENGTH} - ${QT_LENGTH}" )
+                string(SUBSTRING ${CURRENT_DIR} ${QT_LENGTH} ${FINAL_LENGTH} SUB_DIR)
+            
+                list(APPEND PLUGINS_LIST ${SUB_DIR})
+ 
+            endif()
+         endforeach()
+         
+         set( QT_REQUIREMENTS "${QT_REQUIREMENTS};${PLUGINS_LIST}" PARENT_SCOPE)
+
+    endif()
+
+endmacro(qt_plugins_setup)
\ No newline at end of file
diff --git a/CMake/install/linux/linux_fixup.cmake.in b/CMake/install/linux/linux_fixup.cmake.in
new file mode 100644
index 0000000..124c9cc
--- /dev/null
+++ b/CMake/install/linux/linux_fixup.cmake.in
@@ -0,0 +1,40 @@
+#This script is called at install time only on linux OS
+#It will be configured at configure time, only '@' variables will be replaced.
+
+
+#function to find libs and Bundles/* directories
+function(findFwlibsAndBundles FWLIBS_BUNDLES_DIRECTORIES)
+    file(GLOB_RECURSE LIBS @CMAKE_INSTALL_PREFIX@/@BUNDLE_PREFIX@/*@CMAKE_SHARED_LIBRARY_SUFFIX@*)
+    list(REMOVE_DUPLICATES LIBS)
+    set(FOLDERS)
+    foreach(LIB ${LIBS})
+        get_filename_component(LIB_DIR "${LIB}" DIRECTORY)
+        list(APPEND FOLDERS ${LIB_DIR})
+    endforeach()
+    list(REMOVE_DUPLICATES FOLDERS)
+    set(${FWLIBS_BUNDLES_DIRECTORIES} ${FOLDERS} PARENT_SCOPE)
+endfunction()
+
+#Find all /*/.so* in /Bundles /plugins /share
+file(GLOB_RECURSE BUNDLES FOLLOW_SYMLINKS "@CMAKE_INSTALL_PREFIX@/@BUNDLE_PREFIX@/*@CMAKE_SHARED_LIBRARY_SUFFIX@*")
+file(GLOB_RECURSE PLUGINS FOLLOW_SYMLINKS "@CMAKE_INSTALL_PREFIX@/plugins/*@CMAKE_SHARED_LIBRARY_SUFFIX@*")
+file(GLOB_RECURSE SHARE FOLLOW_SYMLINKS "@CMAKE_INSTALL_PREFIX@/share/*@CMAKE_SHARED_LIBRARY_SUFFIX@*")
+include(BundleUtilities)
+set(LIBS)
+list(APPEND LIBS ${BUNDLES} ${PLUGINS} ${SHARE})
+#Look for all directories containing '.so*' files
+findFwlibsAndBundles(FWLIBS_BUNDLES_DIRECTORIES)
+list(APPEND FWLIBS_BUNDLES_DIRECTORIES @EXTERNAL_LIBRARIES_DIRECTORIES@)
+#Call fixup bundle on the fwlauncher and on all 'plugins' libraries (like bundle, plugins and share)
+fixup_bundle("@CMAKE_INSTALL_PREFIX@/@LAUNCHER_PATH@" "${LIBS}" "${FWLIBS_BUNDLES_DIRECTORIES}")
+
+#Move all libraries in 'lib' folder
+#Not needed but much more elegant
+file(GLOB_RECURSE FIXED_LIBS "@CMAKE_INSTALL_PREFIX@/bin/*@CMAKE_SHARED_LIBRARY_SUFFIX@*")
+file(GLOB_RECURSE TOREMOVE_LIBS "@CMAKE_INSTALL_PREFIX@/lib/*@CMAKE_SHARED_LIBRARY_SUFFIX@*")
+file(REMOVE ${TOREMOVE_LIBS})
+
+foreach(LIB ${FIXED_LIBS})
+    file(COPY ${LIB} DESTINATION "@CMAKE_INSTALL_PREFIX@/lib/")
+    file(REMOVE ${LIB})
+endforeach()
diff --git a/CMake/install/linux/template.sh.in b/CMake/install/linux/template.sh.in
new file mode 100644
index 0000000..6aa3446
--- /dev/null
+++ b/CMake/install/linux/template.sh.in
@@ -0,0 +1,48 @@
+#! /bin/sh
+#shell script to launch a specific application on linux.
+#Avoid export of LD_LIBRARY_PATH, and append the profile.xml of the application
+#At the end you just have to launch the 'ApplicationName-Version.sh'
+
+#Don't modify this file, it will automaticaly be generated by Cmake.
+
+makeAbsolute() {
+    case $1 in
+        /*)
+            # absolute
+            echo "$1"
+            ;;
+        *)
+            # relative
+            echo `makeAbsolute "$2" "$PWD"`/"$1" | sed 's,/\.$,,'
+            ;;
+    esac
+}
+
+me=`which "$0"` # Search $PATH if necessary
+if test -L "$me"; then
+    # Try readlink(1)
+    readlink=`type readlink 2>/dev/null` || readlink=
+    if test -n "$readlink"; then
+        # We have readlink(1), so we can use it. Assuming GNU readlink (for -f).
+        me=`readlink -nf "$me"`
+    else
+        # No readlink(1), so let's try ls -l
+        me=`ls -l "$me" | sed 's/^.*-> //'`
+        base=`dirname "$me"`
+        me=`makeAbsolute "$me" "$base"`
+    fi
+fi
+#Find the directories
+bindir=`dirname "$me"`
+libdir=`cd "$bindir/lib" ; pwd`
+bundledir=`cd "$bindir/@BUNDLE_PREFIX@"; pwd`
+fontdir=`cd "$libdir/fonts"; pwd`
+
+#export LD_LIBRARY_PATH
+LD_LIBRARY_PATH=$libdir:${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
+export LD_LIBRARY_PATH
+#export the path to the fonts (mandatory for Qt)
+QT_QPA_FONTDIR=$fontdir
+export QT_QPA_FONTDIR
+#Use CMAKE Variable of fwlauncher and Profile.xml path
+exec "$bindir/@LAUNCHER@" "$bundledir/@PROFILE_PATH@" "-B" "$bundledir" "--rwd" "$bindir/.."
diff --git a/CMake/install/linux_install.cmake b/CMake/install/linux_install.cmake
new file mode 100644
index 0000000..72f93fe
--- /dev/null
+++ b/CMake/install/linux_install.cmake
@@ -0,0 +1,66 @@
+
+#Find all sub-folders containing external libraries
+function(findExtLibDir EXTERNAL_LIBRARIES_DIRECTORIES)
+    file(GLOB_RECURSE LIBS ${EXTERNAL_LIBRARIES}/*${CMAKE_SHARED_LIBRARY_SUFFIX}.*)
+    list(REMOVE_DUPLICATES LIBS)
+    set(FOLDERS)
+    foreach(LIB ${LIBS})
+        get_filename_component(LIB_DIR "${LIB}" DIRECTORY)
+        list(APPEND FOLDERS ${LIB_DIR})
+    endforeach()
+    list(REMOVE_DUPLICATES FOLDERS)
+    set(${EXTERNAL_LIBRARIES_DIRECTORIES} ${FOLDERS} PARENT_SCOPE)
+endfunction()
+
+#Linux install
+macro(linux_install PRJ_NAME)
+    if(NOT USE_SYSTEM_LIB)
+        findExtLibDir(EXTERNAL_LIBRARIES_DIRECTORIES)
+    endif()
+    set(CPACK_GENERATOR TGZ)
+    string(TOLOWER ${PRJ_NAME} LOWER_PRJ_NAME)
+    set(ICON_FILENAME ${LOWER_PRJ_NAME}.ico)
+
+    if("${${PRJ_NAME}_TYPE}" STREQUAL  "APP")
+
+        set(LAUNCHER_PATH "bin/fwlauncher-${fwlauncher_VERSION}")
+        set(LAUNCHER "fwlauncher-${fwlauncher_VERSION}")
+        set(PROFILE_PATH "${PRJ_NAME}_${DASH_VERSION}/profile.xml")
+
+    elseif("${${PRJ_NAME}_TYPE}" STREQUAL  "EXECUTABLE")
+
+        set(LAUNCHER_PATH "bin/${PRJ_NAME}-${${PRJ_NAME}_VERSION}")
+        set(LAUNCHER "${PRJ_NAME}-${${PRJ_NAME}_VERSION}")
+        set(PROFILE_PATH "")
+
+    else()
+        message(FATAL_ERROR "'${PRJ_NAME}' is not a installable (type : ${${PRJ_NAME}_TYPE})")
+    endif()
+
+    #configure the 'fixup' script
+    if(NOT USE_SYSTEM_LIB)
+        configure_file(${FWCMAKE_RESOURCE_PATH}/install/linux/linux_fixup.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/linux_fixup.cmake @ONLY)
+        install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/linux_fixup.cmake)
+    endif()
+
+    set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_INSTALL_PREFIX};.") #look inside install dir for packaging
+
+    set(CPACK_PACKAGE_VENDOR "IRCAD")
+    set(CPACK_PACKAGE_NAME "${PRJ_NAME}")
+    set(CPACK_PACKAGE_VERSION "${VERSION}")
+
+    if("${${PRJ_NAME}_TYPE}" STREQUAL  "APP")
+        configure_file(${FWCMAKE_RESOURCE_PATH}/install/linux/template.sh.in ${CMAKE_CURRENT_BINARY_DIR}/${PRJ_NAME}_${DASH_VERSION}.sh @ONLY)
+        install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/${PRJ_NAME}_${DASH_VERSION}.sh DESTINATION ${CMAKE_INSTALL_PREFIX}/bin )
+    endif()
+
+
+
+    if(NOT USE_SYSTEM_LIB)
+        #Copy the qt font directory inside install/libs
+        install( DIRECTORY "${EXTERNAL_LIBRARIES}/lib/fonts" DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/")
+    endif()
+
+    include(CPack)
+
+endmacro()
diff --git a/CMake/install/osx_install.cmake b/CMake/install/osx_install.cmake
new file mode 100644
index 0000000..c2f1236
--- /dev/null
+++ b/CMake/install/osx_install.cmake
@@ -0,0 +1,95 @@
+function(osx_install PRJ_NAME)
+
+    set(EXECUTABLE_NAME ${PRJ_NAME}.app)
+
+    #set app icon filename
+    string(TOLOWER ${PRJ_NAME} LOWER_PRJ_NAME)
+    set(ICON_FILENAME ${LOWER_PRJ_NAME}.icns)
+
+    set_source_files_properties(rc/${ICON_FILENAME} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
+
+    if("${${PRJ_NAME}_TYPE}" STREQUAL  "APP")
+        add_executable(${EXECUTABLE_NAME} MACOSX_BUNDLE ${fwlauncher_HEADERS} ${fwlauncher_SOURCES} rc/${ICON_FILENAME})
+        add_definitions(-DDEFAULT_PROFILE=Bundles/${PRJ_NAME}_${${PRJ_NAME}_DASH_VERSION}/profile.xml)
+        find_package (Boost COMPONENTS program_options REQUIRED )
+        target_link_libraries(${EXECUTABLE_NAME}
+            fwCore
+            fwRuntime
+            ${Boost_PROGRAM_OPTIONS_LIBRARIES}
+        )
+    elseif("${${PRJ_NAME}_TYPE}" STREQUAL  "EXECUTABLE")
+        add_executable(${EXECUTABLE_NAME} MACOSX_BUNDLE ${${PRJ_NAME}_HEADERS} ${${PRJ_NAME}_SOURCES} rc/${ICON_FILENAME})
+        get_target_property(LINK_PROPERTIES ${PRJ_NAME} LINK_LIBRARIES)
+        target_link_libraries(${EXECUTABLE_NAME} ${LINK_PROPERTIES})
+    else()
+        message(FATAL_ERROR "'${PRJ_NAME}' is not a installable (type : ${${PRJ_NAME}_TYPE})")
+    endif()
+
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES OUTPUT_NAME ${PRJ_NAME})
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_ICON_FILE ${ICON_FILENAME})
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_INFO_STRING "${PRJ_NAME}")
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_SHORT_VERSION_STRING "${${PRJ_NAME}_VERSION}")
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_LONG_VERSION_STRING "${${PRJ_NAME}_VERSION}")
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_BUNDLE_NAME "${PRJ_NAME}")
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_COPYRIGHT "Copyright 2012-2015 IRCAD")
+    set_target_properties( ${EXECUTABLE_NAME} PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER "com.fw4spl.${LOWER_PRJ_NAME}")
+
+    set(APP_PATH "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${EXECUTABLE_NAME}")
+    set(APP_INSTALL_PATH "${CMAKE_INSTALL_PREFIX}/${EXECUTABLE_NAME}")
+
+    configure_file("${fwGuiQt_DIR}/bin/qt.conf" "${APP_PATH}/Contents/Resources/qt.conf")
+
+    install(CODE " file(WRITE \"${APP_PATH}/Contents/Resources/qt.conf\" \"\") " COMPONENT ApplicationBundle)
+    install(TARGETS ${EXECUTABLE_NAME} BUNDLE DESTINATION . COMPONENT ApplicationBundle)
+
+    install(CODE "
+        if (EXISTS \"${CMAKE_INSTALL_PREFIX}/share\")
+            file(INSTALL \"${CMAKE_INSTALL_PREFIX}/share\" DESTINATION \"${APP_INSTALL_PATH}/Contents\")
+        endif()
+        if (EXISTS ${CMAKE_INSTALL_PREFIX}/Bundles)
+            file(INSTALL \"${CMAKE_INSTALL_PREFIX}/Bundles\" DESTINATION \"${APP_INSTALL_PATH}/Contents\")
+        endif()
+        if (EXISTS ${CMAKE_INSTALL_PREFIX}/plugins)
+            file(INSTALL \"${CMAKE_INSTALL_PREFIX}/plugins\" DESTINATION \"${APP_INSTALL_PATH}/Contents\")
+        endif()
+    " COMPONENT ApplicationBundle)
+
+    install(CODE "
+        file(GLOB_RECURSE QTPLUGINS \"${APP_INSTALL_PATH}/Contents/plugins/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
+        file(GLOB_RECURSE BUNDLES \"${APP_INSTALL_PATH}/Contents/Bundles/*/*${CMAKE_SHARED_LIBRARY_SUFFIX}\")
+
+        # Find Bundles for fixup
+        if (BUNDLES)
+            set (BUNDLES_TO_FIX )
+            foreach(CURRENT_BUNDLE \${BUNDLES})
+                if (NOT IS_SYMLINK \${CURRENT_BUNDLE})
+                    list(APPEND BUNDLES_TO_FIX \${CURRENT_BUNDLE} )
+                endif()
+            endforeach()
+            # Get Bundles folders
+            set(BUNDLES_FOLDERS)
+            foreach(BUNDLE \${BUNDLES_TO_FIX})
+                get_filename_component(BUNDLE_DIR \"\${BUNDLE}\" DIRECTORY)
+                list(APPEND BUNDLES_FOLDERS \${BUNDLE_DIR})
+            endforeach()
+            list(REMOVE_DUPLICATES BUNDLES_FOLDERS)
+        endif()
+
+        # If the BU_CHMOD_BUNDLE_ITEMS variable is set then bundle items will be marked writable before install_name_tool tries to change them.
+        set(BU_CHMOD_BUNDLE_ITEMS ON)
+
+        include(BundleUtilities)
+        fixup_bundle(\"${APP_INSTALL_PATH}\" \"\${BUNDLES_TO_FIX};\${QTPLUGINS}\" \"${CMAKE_INSTALL_PREFIX}/${LIBRARY_OUTPUT_DIR};${EXTERNAL_LIBRARIES}/lib;\${BUNDLES_FOLDERS}\")
+
+        execute_process(
+            COMMAND sh -c \"find . -type f -name '*.dylib'|sed 's/\\\\.[0-9].*//g'|sort|uniq -d|xargs -I{} -n1 find . -path '{}.*' | paste -d ' ' - -| sed 's/^/ln -s -f /' | sh \"
+            WORKING_DIRECTORY ${APP_INSTALL_PATH}/Contents/MacOS
+            )
+
+        execute_process(
+            COMMAND sh -c \"python ${CMAKE_SOURCE_DIR}/CMake/OSXTools/osx_install_name_tool.py -e MacOS/ $(find Bundles -iname '*.dylib') -f\"
+            WORKING_DIRECTORY ${APP_INSTALL_PATH}/Contents
+            )
+    " COMPONENT ApplicationBundle)
+
+endfunction(osx_install)
diff --git a/CMake/install/win_install.cmake b/CMake/install/win_install.cmake
new file mode 100644
index 0000000..9cb958d
--- /dev/null
+++ b/CMake/install/win_install.cmake
@@ -0,0 +1,86 @@
+
+#Find all sub-folders containing external libraries
+function(findExtLibDir EXTERNAL_LIBRARIES_DIRECTORIES)
+    file(GLOB_RECURSE LIBS ${EXTERNAL_LIBRARIES}/*${CMAKE_SHARED_LIBRARY_SUFFIX})
+    list(REMOVE_DUPLICATES LIBS)
+    set(FOLDERS)
+    foreach(LIB ${LIBS})
+        get_filename_component(LIB_DIR "${LIB}" DIRECTORY)
+        list(APPEND FOLDERS ${LIB_DIR})
+    endforeach()
+    list(REMOVE_DUPLICATES FOLDERS)
+    set(${EXTERNAL_LIBRARIES_DIRECTORIES} ${FOLDERS} PARENT_SCOPE)
+endfunction()
+
+#Windows install
+macro(win_install PRJ_NAME)
+    findExtLibDir(EXTERNAL_LIBRARIES_DIRECTORIES)
+    
+    set(CPACK_GENERATOR NSIS)
+    
+    #set app icon filename
+    string(TOLOWER ${PRJ_NAME} LOWER_PRJ_NAME)    
+    set(ICON_FILENAME ${LOWER_PRJ_NAME}.ico)
+    
+    if("${${PRJ_NAME}_TYPE}" STREQUAL  "APP")
+        set(LAUNCHER_PATH "bin/fwlauncher.exe")
+        set(PROFILE_PATH "${${PRJ_NAME}_BUNDLE_DIR}/profile.xml")
+    elseif("${${PRJ_NAME}_TYPE}" STREQUAL  "EXECUTABLE")
+        set(LAUNCHER_PATH "bin/${PRJ_NAME}.exe")
+        set(PROFILE_PATH "")
+    else()
+        message(FATAL_ERROR "'${PRJ_NAME}' is not a installable (type : ${${PRJ_NAME}_TYPE})")
+    endif()
+    
+    list(APPEND CMAKE_MODULE_PATH ${FWCMAKE_RESOURCE_PATH}/install/windows/NSIS/)
+
+    #configure the 'fixup' script
+    configure_file(${FWCMAKE_RESOURCE_PATH}/install/windows/windows_fixup.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/windows_fixup.cmake @ONLY)
+    install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/windows_fixup.cmake)
+    
+    if(CMAKE_CL_64)
+        set(CPACK_NSIS_INSTALL_DIR "$PROGRAMFILES64")
+    endif()
+
+    set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON)
+    set(CPACK_INSTALLED_DIRECTORIES "${CMAKE_INSTALL_PREFIX};.") #look inside install dir for packaging
+
+    set(CPACK_PACKAGE_VENDOR "FW4SPL")
+    set(CPACK_NSIS_URL_INFO_ABOUT "https://github.com/fw4spl-org")
+    set(CPACK_NSIS_CONTACT "fw4spl at gmail.com")
+
+    set(CPACK_PACKAGE_NAME "${PRJ_NAME}")
+    set(CPACK_NSIS_PACKAGE_NAME "${PRJ_NAME}_${${PRJ_NAME}_DASH_VERSION}")
+    set(CPACK_NSIS_DISPLAY_NAME "${PRJ_NAME}")
+    set(CPACK_PACKAGE_VERSION "${VERSION}")
+    
+    set(DEFAULT_NSIS_RC_PATH "${FWCMAKE_RESOURCE_PATH}/install/windows/NSIS/rc/")
+    
+    find_file(CPACK_PACKAGE_ICON "banner_nsis.bmp" PATHS 
+              "${CMAKE_CURRENT_SOURCE_DIR}/rc/NSIS/" ${DEFAULT_NSIS_RC_PATH}
+              NO_SYSTEM_ENVIRONMENT_PATH)
+    find_file(CPACK_NSIS_WELCOMEFINISH_IMAGE "dialog_nsis.bmp" PATHS 
+              "${CMAKE_CURRENT_SOURCE_DIR}/rc/NSIS/" ${DEFAULT_NSIS_RC_PATH}
+              NO_SYSTEM_ENVIRONMENT_PATH)
+    find_file(CPACK_NSIS_MUI_ICON "${ICON_FILENAME}" "app.ico" PATHS 
+              "${CMAKE_CURRENT_SOURCE_DIR}/rc/" ${DEFAULT_NSIS_RC_PATH}
+              NO_SYSTEM_ENVIRONMENT_PATH)
+    find_file(CPACK_NSIS_MUI_UNIICON "${ICON_FILENAME}" "app.ico" PATHS 
+              "${CMAKE_CURRENT_SOURCE_DIR}/rc/" ${DEFAULT_NSIS_RC_PATH}
+              NO_SYSTEM_ENVIRONMENT_PATH)
+    find_file(CPACK_RESOURCE_FILE_LICENSE "license.rtf" PATHS 
+              "${CMAKE_CURRENT_SOURCE_DIR}/rc/NSIS/" ${DEFAULT_NSIS_RC_PATH}
+              NO_SYSTEM_ENVIRONMENT_PATH)
+    
+    string(REPLACE "/" "\\\\" CPACK_PACKAGE_ICON ${CPACK_PACKAGE_ICON})
+    string(REPLACE "/" "\\\\" CPACK_NSIS_WELCOMEFINISH_IMAGE ${CPACK_NSIS_WELCOMEFINISH_IMAGE})
+    string(REPLACE "/" "\\\\" CPACK_NSIS_MUI_ICON ${CPACK_NSIS_MUI_ICON})
+    string(REPLACE "/" "\\\\" CPACK_NSIS_MUI_UNIICON ${CPACK_NSIS_MUI_UNIICON})
+    string(REPLACE "/" "\\\\" CPACK_RESOURCE_FILE_LICENSE ${CPACK_RESOURCE_FILE_LICENSE})
+    
+    set(CPACK_NSIS_DESKTOP_ICON ${ICON_FILENAME})
+    set(CPACK_NSIS_SHORTCUT_ICON ${ICON_FILENAME})
+    
+    include(CPack)
+    
+endmacro()
diff --git a/CMake/install/windows/NSIS/NSIS.InstallOptions.ini.in b/CMake/install/windows/NSIS/NSIS.InstallOptions.ini.in
new file mode 100644
index 0000000..d92d779
--- /dev/null
+++ b/CMake/install/windows/NSIS/NSIS.InstallOptions.ini.in
@@ -0,0 +1,46 @@
+[Settings]
+NumFields=5
+
+[Field 1]
+Type=label
+Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does not add its directory to the system PATH.
+Left=0
+Right=-1
+Top=0
+Bottom=20
+
+[Field 2]
+Type=radiobutton
+Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH
+Left=0
+Right=-1
+Top=30
+Bottom=40
+State=1
+
+[Field 3]
+Type=radiobutton
+Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users
+Left=0
+Right=-1
+Top=40
+Bottom=50
+State=0
+
+[Field 4]
+Type=radiobutton
+Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user
+Left=0
+Right=-1
+Top=50
+Bottom=60
+State=0
+
+[Field 5]
+Type=CheckBox
+Text=Create @CPACK_PACKAGE_NAME@ Desktop Icon
+Left=0
+Right=-1
+Top=80
+Bottom=90
+State=0
diff --git a/CMake/install/windows/NSIS/NSIS.template.in b/CMake/install/windows/NSIS/NSIS.template.in
new file mode 100644
index 0000000..c5ed078
--- /dev/null
+++ b/CMake/install/windows/NSIS/NSIS.template.in
@@ -0,0 +1,1160 @@
+; CPack install script designed for a nmake build
+
+;--------------------------------
+; You must define these values
+
+    !define VERSION "@CPACK_PACKAGE_VERSION@"
+    !define PATCH  "@CPACK_PACKAGE_VERSION_PATCH@"
+    !define INST_DIR "@CPACK_TEMPORARY_DIRECTORY@"
+
+;--------------------------------
+;Variables
+
+  Var MUI_TEMP
+Var STARTMENU_FOLDER
+Var SV_ALLUSERS
+Var START_MENU
+Var DO_NOT_ADD_TO_PATH
+Var ADD_TO_PATH_ALL_USERS
+Var ADD_TO_PATH_CURRENT_USER
+Var INSTALL_DESKTOP
+Var ACCOUNT_TYPE
+Var IS_DEFAULT_INSTALLDIR
+Var INSTALL_DIRECTORY
+;--------------------------------
+;Include Modern UI
+
+!include "MUI.nsh"
+!include "x64.nsh"
+
+;Default installation folder
+InstallDir "$LOCALAPPDATA\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+;--------------------------------
+;General
+
+;Name and file
+Name "@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION@"
+OutFile "@CPACK_TOPLEVEL_DIRECTORY@/@CPACK_OUTPUT_FILE_NAME@"
+
+;Set compression
+SetCompressor @CPACK_NSIS_COMPRESSOR@
+
+;Require administrator access
+RequestExecutionLevel user
+
+ at CPACK_NSIS_DEFINES@
+
+!include Sections.nsh
+
+;--- Component support macros: ---
+; The code for the add/remove functionality is from:
+;   http://nsis.sourceforge.net/Add/Remove_Functionality
+; It has been modified slightly and extended to provide
+; inter-component dependencies.
+Var AR_SecFlags
+Var AR_RegFlags
+ at CPACK_NSIS_SECTION_SELECTED_VARS@
+
+; Loads the "selected" flag for the section named SecName into the
+; variable VarName.
+!macro LoadSectionSelectedIntoVar SecName VarName
+SectionGetFlags ${${SecName}} $${VarName}
+IntOp $${VarName} $${VarName} & ${SF_SELECTED}  ;Turn off all other bits
+!macroend
+
+; Loads the value of a variable... can we get around this?
+!macro LoadVar VarName
+IntOp $R0 0 + $${VarName}
+!macroend
+
+; Sets the value of a variable
+!macro StoreVar VarName IntValue
+IntOp $${VarName} 0 + ${IntValue}
+!macroend
+
+!macro InitSection SecName
+    ;  This macro reads component installed flag from the registry and
+    ;changes checked state of the section on the components page.
+    ;Input: section index constant name specified in Section command.
+
+    ClearErrors
+    ;Reading component status from registry
+    ReadRegDWORD $AR_RegFlags HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" "Installed"
+    IfErrors "default_${SecName}"
+    ;Status will stay default if registry value not found
+    ;(component was never installed)
+    IntOp $AR_RegFlags $AR_RegFlags & ${SF_SELECTED} ;Turn off all other bits
+    SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading default section flags
+    IntOp $AR_SecFlags $AR_SecFlags & 0xFFFE  ;Turn lowest (enabled) bit off
+    IntOp $AR_SecFlags $AR_RegFlags | $AR_SecFlags      ;Change lowest bit
+
+    ; Note whether this component was installed before
+    !insertmacro StoreVar ${SecName}_was_installed $AR_RegFlags
+    IntOp $R0 $AR_RegFlags & $AR_RegFlags
+
+    ;Writing modified flags
+    SectionSetFlags ${${SecName}} $AR_SecFlags
+
+    "default_${SecName}:"
+    !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
+!macroend
+
+!macro FinishSection SecName
+    ;  This macro reads section flag set by user and removes the section
+    ;if it is not selected.
+    ;Then it writes component installed flag to registry
+    ;Input: section index constant name specified in Section command.
+
+    SectionGetFlags ${${SecName}} $AR_SecFlags  ;Reading section flags
+    ;Checking lowest bit:
+    IntOp $AR_SecFlags $AR_SecFlags & ${SF_SELECTED}
+    IntCmp $AR_SecFlags 1 "leave_${SecName}"
+    ;Section is not selected:
+    ;Calling Section uninstall macro and writing zero installed flag
+    !insertmacro "Remove_${${SecName}}"
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
+    "Installed" 0
+    Goto "exit_${SecName}"
+
+    "leave_${SecName}:"
+    ;Section is selected:
+    WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@\Components\${SecName}" \
+    "Installed" 1
+
+    "exit_${SecName}:"
+!macroend
+
+!macro RemoveSection_CPack SecName
+    ;  This macro is used to call section's Remove_... macro
+    ;from the uninstaller.
+    ;Input: section index constant name specified in Section command.
+
+    !insertmacro "Remove_${${SecName}}"
+    !macroend
+
+    ; Determine whether the selection of SecName changed
+    !macro MaybeSelectionChanged SecName
+    !insertmacro LoadVar ${SecName}_selected
+    SectionGetFlags ${${SecName}} $R1
+    IntOp $R1 $R1 & ${SF_SELECTED} ;Turn off all other bits
+
+    ; See if the status has changed:
+    IntCmp $R0 $R1 "${SecName}_unchanged"
+    !insertmacro LoadSectionSelectedIntoVar ${SecName} ${SecName}_selected
+
+    IntCmp $R1 ${SF_SELECTED} "${SecName}_was_selected"
+    !insertmacro "Deselect_required_by_${SecName}"
+    goto "${SecName}_unchanged"
+
+    "${SecName}_was_selected:"
+    !insertmacro "Select_${SecName}_depends"
+
+    "${SecName}_unchanged:"
+!macroend
+
+;--- End of Add/Remove macros ---
+
+;--------------------------------
+;Interface Settings
+
+!define MUI_HEADERIMAGE
+!define MUI_WELCOMEFINISHPAGE_BITMAP "@CPACK_NSIS_WELCOMEFINISH_IMAGE@"
+!define MUI_ABORTWARNING
+
+;--------------------------------
+; path functions
+
+!verbose 3
+!include "WinMessages.NSH"
+!verbose 4
+
+;----------------------------------------
+; based upon a script of "Written by KiCHiK 2003-01-18 05:57:02"
+;----------------------------------------
+!verbose 3
+!include "WinMessages.NSH"
+!verbose 4
+;====================================================
+; get_NT_environment
+;     Returns: the selected environment
+;     Output : head of the stack
+;====================================================
+!macro select_NT_profile UN
+Function ${UN}select_NT_profile
+    StrCmp $ADD_TO_PATH_ALL_USERS "1" 0 environment_single
+    DetailPrint "Selected environment for all users"
+    Push "all"
+    Return
+    environment_single:
+        DetailPrint "Selected environment for current user only."
+        Push "current"
+        Return
+
+FunctionEnd
+!macroend
+!insertmacro select_NT_profile ""
+!insertmacro select_NT_profile "un."
+;----------------------------------------------------
+!define NT_current_env 'HKCU "Environment"'
+!define NT_all_env     'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+
+!ifndef WriteEnvStr_RegKey
+    !ifdef ALL_USERS
+        !define WriteEnvStr_RegKey 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
+    !else
+        !define WriteEnvStr_RegKey 'HKCU "Environment"'
+    !endif
+!endif
+
+; AddToPath - Adds the given dir to the search path.
+;        Input - head of the stack
+;        Note - Win9x systems requires reboot
+
+Function AddToPath
+    Exch $0
+    Push $1
+    Push $2
+    Push $3
+
+# don't add if the path doesn't exist
+    IfFileExists "$0\*.*" "" AddToPath_done
+
+    ReadEnvStr $1 PATH
+    ; if the path is too long for a NSIS variable NSIS will return a 0
+    ; length string.  If we find that, then warn and skip any path
+    ; modification as it will trash the existing path.
+    StrLen $2 $1
+    IntCmp $2 0 CheckPathLength_ShowPathWarning CheckPathLength_Done CheckPathLength_Done
+
+    CheckPathLength_ShowPathWarning:
+        Messagebox MB_OK|MB_ICONEXCLAMATION "Warning! PATH too long installer unable to modify PATH!"
+        Goto AddToPath_done
+
+    CheckPathLength_Done:
+        Push "$1;"
+        Push "$0;"
+        Call StrStr
+        Pop $2
+        StrCmp $2 "" "" AddToPath_done
+        Push "$1;"
+        Push "$0\;"
+        Call StrStr
+        Pop $2
+        StrCmp $2 "" "" AddToPath_done
+        GetFullPathName /SHORT $3 $0
+        Push "$1;"
+        Push "$3;"
+        Call StrStr
+        Pop $2
+        StrCmp $2 "" "" AddToPath_done
+        Push "$1;"
+        Push "$3\;"
+        Call StrStr
+        Pop $2
+        StrCmp $2 "" "" AddToPath_done
+
+        Call IsNT
+        Pop $1
+        StrCmp $1 1 AddToPath_NT
+        ; Not on NT
+        StrCpy $1 $WINDIR 2
+        FileOpen $1 "$1\autoexec.bat" a
+        FileSeek $1 -1 END
+        FileReadByte $1 $2
+        IntCmp $2 26 0 +2 +2 # DOS EOF
+        FileSeek $1 -1 END # write over EOF
+        FileWrite $1 "$\r$\nSET PATH=%PATH%;$3$\r$\n"
+        FileClose $1
+        SetRebootFlag true
+        Goto AddToPath_done
+
+    AddToPath_NT:
+        StrCmp $ADD_TO_PATH_ALL_USERS "1" ReadAllKey
+        ReadRegStr $1 ${NT_current_env} "PATH"
+        Goto DoTrim
+
+    ReadAllKey:
+        ReadRegStr $1 ${NT_all_env} "PATH"
+
+    DoTrim:
+        StrCmp $1 "" AddToPath_NTdoIt
+        Push $1
+        Call Trim
+        Pop $1
+        StrCpy $0 "$1;$0"
+
+    AddToPath_NTdoIt:
+        StrCmp $ADD_TO_PATH_ALL_USERS "1" WriteAllKey
+        WriteRegExpandStr ${NT_current_env} "PATH" $0
+        Goto DoSend
+
+    WriteAllKey:
+        WriteRegExpandStr ${NT_all_env} "PATH" $0
+
+    DoSend:
+        SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+    AddToPath_done:
+        Pop $3
+        Pop $2
+        Pop $1
+        Pop $0
+
+FunctionEnd
+
+
+; RemoveFromPath - Remove a given dir from the path
+;     Input: head of the stack
+
+Function un.RemoveFromPath
+    Exch $0
+    Push $1
+    Push $2
+    Push $3
+    Push $4
+    Push $5
+    Push $6
+
+    IntFmt $6 "%c" 26 # DOS EOF
+
+    Call un.IsNT
+    Pop $1
+    StrCmp $1 1 unRemoveFromPath_NT
+    ; Not on NT
+    StrCpy $1 $WINDIR 2
+    FileOpen $1 "$1\autoexec.bat" r
+    GetTempFileName $4
+    FileOpen $2 $4 w
+    GetFullPathName /SHORT $0 $0
+    StrCpy $0 "SET PATH=%PATH%;$0"
+    Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoop:
+        FileRead $1 $3
+        StrCpy $5 $3 1 -1 # read last char
+        StrCmp $5 $6 0 +2 # if DOS EOF
+            StrCpy $3 $3 -1 # remove DOS EOF so we can compare
+        StrCmp $3 "$0$\r$\n" unRemoveFromPath_dosLoopRemoveLine
+        StrCmp $3 "$0$\n" unRemoveFromPath_dosLoopRemoveLine
+        StrCmp $3 "$0" unRemoveFromPath_dosLoopRemoveLine
+        StrCmp $3 "" unRemoveFromPath_dosLoopEnd
+        FileWrite $2 $3
+        Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoopRemoveLine:
+        SetRebootFlag true
+        Goto unRemoveFromPath_dosLoop
+
+    unRemoveFromPath_dosLoopEnd:
+        FileClose $2
+        FileClose $1
+        StrCpy $1 $WINDIR 2
+        Delete "$1\autoexec.bat"
+        CopyFiles /SILENT $4 "$1\autoexec.bat"
+        Delete $4
+        Goto unRemoveFromPath_done
+
+    unRemoveFromPath_NT:
+        StrCmp $ADD_TO_PATH_ALL_USERS "1" unReadAllKey
+        ReadRegStr $1 ${NT_current_env} "PATH"
+        Goto unDoTrim
+
+    unReadAllKey:
+        ReadRegStr $1 ${NT_all_env} "PATH"
+
+    unDoTrim:
+        StrCpy $5 $1 1 -1 # copy last char
+        StrCmp $5 ";" +2 # if last char != ;
+        StrCpy $1 "$1;" # append ;
+        Push $1
+        Push "$0;"
+        Call un.StrStr ; Find `$0;` in $1
+        Pop $2 ; pos of our dir
+        StrCmp $2 "" unRemoveFromPath_done
+        ; else, it is in path
+        # $0 - path to add
+        # $1 - path var
+        StrLen $3 "$0;"
+        StrLen $4 $2
+        StrCpy $5 $1 -$4 # $5 is now the part before the path to remove
+        StrCpy $6 $2 "" $3 # $6 is now the part after the path to remove
+        StrCpy $3 $5$6
+
+        StrCpy $5 $3 1 -1 # copy last char
+        StrCmp $5 ";" 0 +2 # if last char == ;
+            StrCpy $3 $3 -1 # remove last char
+
+        StrCmp $ADD_TO_PATH_ALL_USERS "1" unWriteAllKey
+        WriteRegExpandStr ${NT_current_env} "PATH" $3
+        Goto unDoSend
+
+    unWriteAllKey:
+        WriteRegExpandStr ${NT_all_env} "PATH" $3
+
+    unDoSend:
+    SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 "STR:Environment" /TIMEOUT=5000
+
+    unRemoveFromPath_done:
+    Pop $6
+    Pop $5
+    Pop $4
+    Pop $3
+    Pop $2
+    Pop $1
+    Pop $0
+FunctionEnd
+
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+; Uninstall sutff
+;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+###########################################
+#            Utility Functions            #
+###########################################
+
+;====================================================
+; IsNT - Returns 1 if the current system is NT, 0
+;        otherwise.
+;     Output: head of the stack
+;====================================================
+; IsNT
+; no input
+; output, top of the stack = 1 if NT or 0 if not
+;
+; Usage:
+;   Call IsNT
+;   Pop $R0
+;  ($R0 at this point is 1 or 0)
+
+!macro IsNT un
+    Function ${un}IsNT
+        Push $0
+        ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" CurrentVersion
+        StrCmp $0 "" 0 IsNT_yes
+        ; we are not NT.
+        Pop $0
+        Push 0
+        Return
+
+        IsNT_yes:
+            ; NT!!!
+            Pop $0
+            Push 1
+
+    FunctionEnd
+!macroend
+!insertmacro IsNT ""
+!insertmacro IsNT "un."
+
+; StrStr
+; input, top of stack = string to search for
+;        top of stack-1 = string to search in
+; output, top of stack (replaces with the portion of the string remaining)
+; modifies no other variables.
+;
+; Usage:
+;   Push "this is a long ass string"
+;   Push "ass"
+;   Call StrStr
+;   Pop $R0
+;  ($R0 at this point is "ass string")
+
+!macro StrStr un
+Function ${un}StrStr
+    Exch $R1 ; st=haystack,old$R1, $R1=needle
+    Exch    ; st=old$R1,haystack
+    Exch $R2 ; st=old$R1,old$R2, $R2=haystack
+    Push $R3
+    Push $R4
+    Push $R5
+    StrLen $R3 $R1
+    StrCpy $R4 0
+    ; $R1=needle
+    ; $R2=haystack
+    ; $R3=len(needle)
+    ; $R4=cnt
+    ; $R5=tmp
+    ;
+    loop:
+        StrCpy $R5 $R2 $R3 $R4
+        StrCmp $R5 $R1 done
+        StrCmp $R5 "" done
+        IntOp $R4 $R4 + 1
+        Goto loop
+
+    done:
+        StrCpy $R1 $R2 "" $R4
+        Pop $R5
+        Pop $R4
+        Pop $R3
+        Pop $R2
+        Exch $R1
+
+FunctionEnd
+!macroend
+!insertmacro StrStr ""
+!insertmacro StrStr "un."
+
+Function Trim ; Added by Pelaca
+    Exch $R1
+    Push $R2
+
+    Loop:
+        StrCpy $R2 "$R1" 1 -1
+        StrCmp "$R2" " " RTrim
+        StrCmp "$R2" "$\n" RTrim
+        StrCmp "$R2" "$\r" RTrim
+        StrCmp "$R2" ";" RTrim
+        GoTo Done
+
+    RTrim:
+        StrCpy $R1 "$R1" -1
+        Goto Loop
+
+    Done:
+        Pop $R2
+        Exch $R1
+FunctionEnd
+
+Function ConditionalAddToRegisty
+    Pop $0
+    Pop $1
+    StrCmp "$0" "" ConditionalAddToRegisty_EmptyString
+    WriteRegStr SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" \
+    "$1" "$0"
+    ;MessageBox MB_OK "Set Registry: '$1' to '$0'"
+    DetailPrint "Set install registry entry: '$1' to '$0'"
+
+    ConditionalAddToRegisty_EmptyString:
+
+FunctionEnd
+
+;--------------------------------
+; Installation types
+ at CPACK_NSIS_INSTALLATION_TYPES@
+
+;--------------------------------
+; Component sections
+ at CPACK_NSIS_COMPONENT_SECTIONS@
+
+;--------------------------------
+; Define some macro setting for the gui
+ at CPACK_NSIS_INSTALLER_MUI_ICON_CODE@
+ at CPACK_NSIS_INSTALLER_ICON_CODE@
+ at CPACK_NSIS_INSTALLER_MUI_COMPONENTS_DESC@
+ at CPACK_NSIS_INSTALLER_MUI_FINISHPAGE_RUN_CODE@
+
+;--------------------------------
+;Pages
+!insertmacro MUI_PAGE_WELCOME
+
+!insertmacro MUI_PAGE_LICENSE "@CPACK_RESOURCE_FILE_LICENSE@"
+Page custom InstallOptionsPage
+!insertmacro MUI_PAGE_DIRECTORY
+
+;Start Menu Folder Page Configuration
+!define MUI_STARTMENUPAGE_REGISTRY_ROOT "SHCTX"
+!define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
+!define MUI_STARTMENUPAGE_DEFAULTFOLDER "@CPACK_PACKAGE_VENDOR@\@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION@"
+!insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER
+
+ at CPACK_NSIS_PAGE_COMPONENTS@
+
+!insertmacro MUI_PAGE_INSTFILES
+!insertmacro MUI_PAGE_FINISH
+
+!insertmacro MUI_UNPAGE_CONFIRM
+!insertmacro MUI_UNPAGE_INSTFILES
+
+;--------------------------------
+;Languages
+
+!insertmacro MUI_LANGUAGE "English" ;first language is the default language
+!insertmacro MUI_LANGUAGE "Albanian"
+!insertmacro MUI_LANGUAGE "Arabic"
+!insertmacro MUI_LANGUAGE "Basque"
+!insertmacro MUI_LANGUAGE "Belarusian"
+!insertmacro MUI_LANGUAGE "Bosnian"
+!insertmacro MUI_LANGUAGE "Breton"
+!insertmacro MUI_LANGUAGE "Bulgarian"
+!insertmacro MUI_LANGUAGE "Croatian"
+!insertmacro MUI_LANGUAGE "Czech"
+!insertmacro MUI_LANGUAGE "Danish"
+!insertmacro MUI_LANGUAGE "Dutch"
+!insertmacro MUI_LANGUAGE "Estonian"
+!insertmacro MUI_LANGUAGE "Farsi"
+!insertmacro MUI_LANGUAGE "Finnish"
+!insertmacro MUI_LANGUAGE "French"
+!insertmacro MUI_LANGUAGE "German"
+!insertmacro MUI_LANGUAGE "Greek"
+!insertmacro MUI_LANGUAGE "Hebrew"
+!insertmacro MUI_LANGUAGE "Hungarian"
+!insertmacro MUI_LANGUAGE "Icelandic"
+!insertmacro MUI_LANGUAGE "Indonesian"
+!insertmacro MUI_LANGUAGE "Irish"
+!insertmacro MUI_LANGUAGE "Italian"
+!insertmacro MUI_LANGUAGE "Japanese"
+!insertmacro MUI_LANGUAGE "Korean"
+!insertmacro MUI_LANGUAGE "Kurdish"
+!insertmacro MUI_LANGUAGE "Latvian"
+!insertmacro MUI_LANGUAGE "Lithuanian"
+!insertmacro MUI_LANGUAGE "Luxembourgish"
+!insertmacro MUI_LANGUAGE "Macedonian"
+!insertmacro MUI_LANGUAGE "Malay"
+!insertmacro MUI_LANGUAGE "Mongolian"
+!insertmacro MUI_LANGUAGE "Norwegian"
+!insertmacro MUI_LANGUAGE "Polish"
+!insertmacro MUI_LANGUAGE "Portuguese"
+!insertmacro MUI_LANGUAGE "PortugueseBR"
+!insertmacro MUI_LANGUAGE "Romanian"
+!insertmacro MUI_LANGUAGE "Russian"
+!insertmacro MUI_LANGUAGE "Serbian"
+!insertmacro MUI_LANGUAGE "SerbianLatin"
+!insertmacro MUI_LANGUAGE "SimpChinese"
+!insertmacro MUI_LANGUAGE "Slovak"
+!insertmacro MUI_LANGUAGE "Slovenian"
+!insertmacro MUI_LANGUAGE "Spanish"
+!insertmacro MUI_LANGUAGE "Swedish"
+!insertmacro MUI_LANGUAGE "Thai"
+!insertmacro MUI_LANGUAGE "TradChinese"
+!insertmacro MUI_LANGUAGE "Turkish"
+!insertmacro MUI_LANGUAGE "Ukrainian"
+!insertmacro MUI_LANGUAGE "Welsh"
+
+
+;--------------------------------
+;Reserve Files
+
+;These files should be inserted before other files in the data block
+;Keep these lines before any File command
+;Only for solid compression (by default, solid compression is enabled for BZIP2 and LZMA)
+
+ReserveFile "NSIS.InstallOptions.ini"
+!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
+
+;--------------------------------
+;Installer Sections
+
+Section "-Core installation"
+    ;Use the entire tree produced by the INSTALL target.  Keep the
+    ;list of directories here in sync with the RMDir commands below.
+    SetOutPath "$INSTDIR"
+    @CPACK_NSIS_EXTRA_PREINSTALL_COMMANDS@
+    @CPACK_NSIS_FULL_INSTALL@
+
+    ;Store installation folder
+    WriteRegStr SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "" $INSTDIR
+
+    ;Create uninstaller
+    WriteUninstaller "$INSTDIR\Uninstall.exe"
+    Push "DisplayName"
+    Push "@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION@"
+    Call ConditionalAddToRegisty
+    Push "DisplayVersion"
+    Push "@CPACK_PACKAGE_VERSION@"
+    Call ConditionalAddToRegisty
+    Push "Publisher"
+    Push "@CPACK_PACKAGE_VENDOR@"
+    Call ConditionalAddToRegisty
+    Push "UninstallString"
+    Push "$INSTDIR\Uninstall.exe"
+    Call ConditionalAddToRegisty
+    Push "InstallDir"
+    Push "$INSTDIR"
+    Call ConditionalAddToRegisty
+    Push "NoRepair"
+    Push "1"
+    Call ConditionalAddToRegisty
+
+    !ifdef CPACK_NSIS_ADD_REMOVE
+        ;Create add/remove functionality
+        Push "ModifyPath"
+        Push "$INSTDIR\AddRemove.exe"
+        Call ConditionalAddToRegisty
+    !else
+        Push "NoModify"
+        Push "1"
+        Call ConditionalAddToRegisty
+    !endif
+
+    ; Optional registration
+    Push "DisplayIcon"
+    Push "$INSTDIR\@CPACK_NSIS_INSTALLED_ICON_NAME@"
+    Call ConditionalAddToRegisty
+    Push "HelpLink"
+    Push "@CPACK_NSIS_HELP_LINK@"
+    Call ConditionalAddToRegisty
+    Push "URLInfoAbout"
+    Push "@CPACK_NSIS_URL_INFO_ABOUT@"
+    Call ConditionalAddToRegisty
+    Push "Contact"
+    Push "@CPACK_NSIS_CONTACT@"
+    Call ConditionalAddToRegisty
+    !insertmacro MUI_INSTALLOPTIONS_READ $INSTALL_DESKTOP "NSIS.InstallOptions.ini" "Field 5" "State"
+    !insertmacro MUI_STARTMENU_WRITE_BEGIN Application
+
+    ;Create shortcuts
+    CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER"
+    @CPACK_NSIS_CREATE_ICONS@
+    @CPACK_NSIS_CREATE_ICONS_EXTRA@
+    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
+    CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION at .lnk" "$INSTDIR\bin\fwlauncher.exe" "Bundles\@CPACK_NSIS_PACKAGE_NAME@\profile.xml" "$INSTDIR\Bundles\@CPACK_NSIS_PACKAGE_NAME@\shortcut.ico" 0
+
+    ;Read a value from an InstallOptions INI file
+    !insertmacro MUI_INSTALLOPTIONS_READ $DO_NOT_ADD_TO_PATH "NSIS.InstallOptions.ini" "Field 2" "State"
+    !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_ALL_USERS "NSIS.InstallOptions.ini" "Field 3" "State"
+    !insertmacro MUI_INSTALLOPTIONS_READ $ADD_TO_PATH_CURRENT_USER "NSIS.InstallOptions.ini" "Field 4" "State"
+
+    ; Write special uninstall registry entries
+    Push "StartMenu"
+    Push "$STARTMENU_FOLDER"
+    Call ConditionalAddToRegisty
+    Push "DoNotAddToPath"
+    Push "$DO_NOT_ADD_TO_PATH"
+    Call ConditionalAddToRegisty
+    Push "AddToPathAllUsers"
+    Push "$ADD_TO_PATH_ALL_USERS"
+    Call ConditionalAddToRegisty
+    Push "AddToPathCurrentUser"
+    Push "$ADD_TO_PATH_CURRENT_USER"
+    Call ConditionalAddToRegisty
+    Push "InstallToDesktop"
+    Push "$INSTALL_DESKTOP"
+    Call ConditionalAddToRegisty
+
+    !insertmacro MUI_STARTMENU_WRITE_END
+
+    @CPACK_NSIS_EXTRA_INSTALL_COMMANDS@
+
+SectionEnd
+
+Section "-Add to path"
+    Push $INSTDIR\bin
+    StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 doNotAddToPath
+    StrCmp $DO_NOT_ADD_TO_PATH "1" doNotAddToPath 0
+    Call AddToPath
+    doNotAddToPath:
+SectionEnd
+
+Section "Desktop Shortcut" SHORTCUT
+    SetOutPath "$INSTDIR"
+    CreateShortCut "$DESKTOP\@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION at .lnk" "$INSTDIR\bin\fwlauncher.exe" "Bundles\@CPACK_NSIS_PACKAGE_NAME@\profile.xml" "$INSTDIR\Bundles\@CPACK_NSIS_PACKAGE_NAME@\desktop.ico" 0
+SectionEnd
+
+;--------------------------------
+; Create custom pages
+Function InstallOptionsPage
+    !insertmacro MUI_HEADER_TEXT "Install Options" "Choose options for installing @CPACK_NSIS_PACKAGE_NAME@"
+    !insertmacro MUI_INSTALLOPTIONS_DISPLAY "NSIS.InstallOptions.ini"
+FunctionEnd
+
+;--- Add/Remove callback functions: ---
+!macro SectionList MacroName
+;This macro used to perform operation on multiple sections.
+;List all of your components in following manner here.
+ at CPACK_NSIS_COMPONENT_SECTION_LIST@
+!macroend
+
+Section -FinishComponents
+    ;Removes unselected components and writes component status to registry
+    !insertmacro SectionList "FinishSection"
+
+    !ifdef CPACK_NSIS_ADD_REMOVE
+        ; Get the name of the installer executable
+        System::Call 'kernel32::GetModuleFileNameA(i 0, t .R0, i 1024) i r1'
+        StrCpy $R3 $R0
+
+        ; Strip off the last 13 characters, to see if we have AddRemove.exe
+        StrLen $R1 $R0
+        IntOp $R1 $R0 - 13
+        StrCpy $R2 $R0 13 $R1
+        StrCmp $R2 "AddRemove.exe" addremove_installed
+
+        ; We're not running AddRemove.exe, so install it
+        CopyFiles $R3 $INSTDIR\AddRemove.exe
+
+    addremove_installed:
+        !endif
+
+SectionEnd
+;--- End of Add/Remove callback functions ---
+
+;--------------------------------
+; Component dependencies
+Function .onSelChange
+    !insertmacro SectionList MaybeSelectionChanged
+FunctionEnd
+;-----------------------
+;
+;    Syntax:
+;    ${VersionCompare} "[Version1]" "[Version2]" $var
+;
+;    "[Version1]"        ; First version
+;    "[Version2]"        ; Second version
+;    $var                ; Result:
+;                        ;    $var=0  Versions are equal
+;                        ;    $var=1  Version1 is newer
+;                        ;    $var=2  Version2 is newer
+;
+Function VersionCompare
+    !define VersionCompare `!insertmacro VersionCompareCall`
+
+    !macro VersionCompareCall _VER1 _VER2 _RESULT
+        Push `${_VER1}`
+        Push `${_VER2}`
+        Call VersionCompare
+        Pop ${_RESULT}
+    !macroend
+
+    Exch $1
+    Exch
+    Exch $0
+    Exch
+    Push $2
+    Push $3
+    Push $4
+    Push $5
+    Push $6
+    Push $7
+
+begin:
+    StrCpy $2 -1
+    IntOp $2 $2 + 1
+    StrCpy $3 $0 1 $2
+    StrCmp $3 '' +2
+    StrCmp $3 '.' 0 -3
+    StrCpy $4 $0 $2
+    IntOp $2 $2 + 1
+    StrCpy $0 $0 '' $2
+
+    StrCpy $2 -1
+    IntOp $2 $2 + 1
+    StrCpy $3 $1 1 $2
+    StrCmp $3 '' +2
+    StrCmp $3 '.' 0 -3
+    StrCpy $5 $1 $2
+    IntOp $2 $2 + 1
+    StrCpy $1 $1 '' $2
+
+    StrCmp $4$5 '' equal
+
+    StrCpy $6 -1
+    IntOp $6 $6 + 1
+    StrCpy $3 $4 1 $6
+    StrCmp $3 '0' -2
+    StrCmp $3 '' 0 +2
+    StrCpy $4 0
+
+    StrCpy $7 -1
+    IntOp $7 $7 + 1
+    StrCpy $3 $5 1 $7
+    StrCmp $3 '0' -2
+    StrCmp $3 '' 0 +2
+    StrCpy $5 0
+
+    StrCmp $4 0 0 +2
+    StrCmp $5 0 begin newer2
+    StrCmp $5 0 newer1
+    IntCmp $6 $7 0 newer1 newer2
+
+    StrCpy $4 '1$4'
+    StrCpy $5 '1$5'
+    IntCmp $4 $5 begin newer2 newer1
+
+equal:
+    StrCpy $0 0
+    goto end
+
+newer1:
+    StrCpy $0 1
+    goto end
+
+newer2:
+    StrCpy $0 2
+
+    end:
+    Pop $7
+    Pop $6
+    Pop $5
+    Pop $4
+    Pop $3
+    Pop $2
+    Pop $1
+    Exch $0
+FunctionEnd
+
+;--------------------------------
+
+Function openLinkNewWindow
+    Push $3
+    Exch
+    Push $2
+    Exch
+    Push $1
+    Exch
+    Push $0
+    Exch
+
+    ReadRegStr $0 HKCR "http\shell\open\command" ""
+  # Get browser path
+    DetailPrint $0
+    StrCpy $2 '"'
+    StrCpy $1 $0 1
+    StrCmp $1 $2 +2 # if path is not enclosed in " look for space as final char
+      StrCpy $2 ' '
+    StrCpy $3 1
+loop:
+    StrCpy $1 $0 1 $3
+    DetailPrint $1
+    StrCmp $1 $2 found
+    StrCmp $1 "" found
+    IntOp $3 $3 + 1
+    Goto loop
+
+found:
+    StrCpy $1 $0 $3
+    StrCmp $2 " " +2
+        StrCpy $1 '$1"'
+
+    Pop $0
+    Exec '$1 $0'
+    Pop $0
+    Pop $1
+    Pop $2
+    Pop $3
+FunctionEnd
+
+!macro _OpenURL URL
+Push "${URL}"
+Call openLinkNewWindow
+!macroend
+
+!define OpenURL '!insertmacro "_OpenURL"'
+
+;--------------------------------
+; determine admin versus local install
+Function un.onInit
+
+    ClearErrors
+    UserInfo::GetAccountType
+    Pop $1
+    StrCpy $ACCOUNT_TYPE $1
+
+    ${If} $ACCOUNT_TYPE == "Admin"
+        SetShellVarContext all
+    ${EndIf}
+
+    ReadRegStr $INSTALL_DIRECTORY SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallDir"
+    ReadRegStr $R0 SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DisplayVersion"
+
+    StrCmp $R0 "@CPACK_PACKAGE_VERSION@" 0 messageVersion
+    StrCmp $INSTDIR $INSTALL_DIRECTORY 0 messageAdminRights
+
+    Goto done
+
+messageAdminRights:
+    ${If} $INSTALL_DIRECTORY == ""
+        MessageBox MB_OK "@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION@ is not installed."
+    ${Else}
+        MessageBox MB_OK "Uninstaller has been moved from the folder $INSTALL_DIRECTORY $\n or you do not own right privileges for uninstalling this software."
+    ${EndIf}
+    Abort
+
+messageVersion:
+    MessageBox MB_OK "@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION@ is not installed."
+    Abort
+
+    done:
+
+
+FunctionEnd
+;--------------------------------
+;Uninstaller Section
+
+Section "Uninstall"
+
+    ReadRegStr $START_MENU SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "StartMenu"
+    ;MessageBox MB_OK "Start menu is in: $START_MENU"
+    ReadRegStr $DO_NOT_ADD_TO_PATH SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DoNotAddToPath"
+    ReadRegStr $ADD_TO_PATH_ALL_USERS SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathAllUsers"
+    ReadRegStr $ADD_TO_PATH_CURRENT_USER SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "AddToPathCurrentUser"
+    ;MessageBox MB_OK "Add to path: $DO_NOT_ADD_TO_PATH all users: $ADD_TO_PATH_ALL_USERS"
+    ReadRegStr $INSTALL_DESKTOP SHCTX \
+    "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "InstallToDesktop"
+    ;MessageBox MB_OK "Install to desktop: $INSTALL_DESKTOP "
+
+    @CPACK_NSIS_EXTRA_UNINSTALL_COMMANDS@
+
+    ;Remove files we installed.
+    ;Keep the list of directories here in sync with the File commands above.
+    @CPACK_NSIS_DELETE_FILES@
+    @CPACK_NSIS_DELETE_DIRECTORIES@
+
+    !ifdef CPACK_NSIS_ADD_REMOVE
+        ;Remove the add/remove program
+        Delete "$INSTALL_DIRECTORY\AddRemove.exe"
+    !endif
+
+;Also deletes post install residues
+    Delete "$INSTALL_DIRECTORY\SLM.log"
+    Delete "$DESKTOP\@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION at .lnk"
+
+    ;Remove the uninstaller itself.
+    Delete "$INSTALL_DIRECTORY\Uninstall.exe"
+    DeleteRegKey SHCTX "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+    ;Remove the installation directory if it is empty.
+    RMDir "$INSTALL_DIRECTORY"
+
+    ; Remove the registry entries.
+    DeleteRegKey SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+    ; Removes all optional components
+    !insertmacro SectionList "RemoveSection_CPack"
+
+    !insertmacro MUI_STARTMENU_GETFOLDER Application $MUI_TEMP
+
+    Delete "$SMPROGRAMS\$MUI_TEMP\@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION at .lnk"
+    Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+    Delete "$SMPROGRAMS\$MUI_TEMP\SLM.log"
+
+    @CPACK_NSIS_DELETE_ICONS@
+    @CPACK_NSIS_DELETE_ICONS_EXTRA@
+
+    ;Delete empty start menu parent diretories
+    StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+    startMenuDeleteLoop:
+        ClearErrors
+        RMDir $MUI_TEMP
+        GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+        IfErrors startMenuDeleteLoopDone
+
+        StrCmp "$MUI_TEMP" "$SMPROGRAMS" startMenuDeleteLoopDone startMenuDeleteLoop
+
+    startMenuDeleteLoopDone:
+        ; If the user changed the shortcut, then untinstall may not work. This should
+        ; try to fix it.
+        StrCpy $MUI_TEMP "$START_MENU"
+        Delete "$SMPROGRAMS\$MUI_TEMP\Uninstall.lnk"
+
+        @CPACK_NSIS_DELETE_ICONS_EXTRA@
+
+        ;Delete empty start menu parent diretories
+        StrCpy $MUI_TEMP "$SMPROGRAMS\$MUI_TEMP"
+
+    secondStartMenuDeleteLoop:
+        ClearErrors
+        RMDir $MUI_TEMP
+        GetFullPathName $MUI_TEMP "$MUI_TEMP\.."
+
+        IfErrors secondStartMenuDeleteLoopDone
+
+        StrCmp "$MUI_TEMP" "$SMPROGRAMS" secondStartMenuDeleteLoopDone secondStartMenuDeleteLoop
+
+    secondStartMenuDeleteLoopDone:
+        DeleteRegKey /ifempty SHCTX "Software\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@"
+
+        Push $INSTALL_DIRECTORY\bin
+        StrCmp $DO_NOT_ADD_TO_PATH_ "1" doNotRemoveFromPath 0
+            Call un.RemoveFromPath
+
+    doNotRemoveFromPath:
+SectionEnd
+
+;--------------------------------
+; determine admin versus local install
+; Is install for "AllUsers" or "JustMe"?
+; Default to "JustMe" - set to "AllUsers" if admin or on Win9x
+; This function is used for the very first "custom page" of the installer.
+; This custom page does not show up visibly, but it executes prior to the
+; first visible page and sets up $INSTDIR properly...
+; Choose different default installation folder based on SV_ALLUSERS...
+; "Program Files" for AllUsers, "My Documents" for JustMe...
+
+Function .onInit
+
+    StrCmp "@CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL@" "ON" 0 inst
+
+    ${IfNot} ${RunningX64}
+        MessageBox MB_OK "Your are trying to install @CPACK_NSIS_DISPLAY_NAME@ on a 32 bit operating system. This software is intended to be used on a 64 bit system."
+        Abort
+    ${EndIf}
+
+    ClearErrors
+    UserInfo::GetAccountType
+    Pop $1
+    StrCpy $ACCOUNT_TYPE $1
+
+    ${If} $ACCOUNT_TYPE == "Admin"
+        ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString"
+        StrCmp $0 "" inst check_version
+    ${Else}
+        ReadRegStr $0 HKCU "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "UninstallString"
+        StrCmp $0 "" inst check_version
+    ${EndIf}
+
+check_version:
+    ${If} $ACCOUNT_TYPE == "Admin"
+        ReadRegStr $R0 HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DisplayVersion"
+    ${Else}
+        ReadRegStr $R0 HKCU "Software\Microsoft\Windows\CurrentVersion\Uninstall\@CPACK_PACKAGE_INSTALL_REGISTRY_KEY@" "DisplayVersion"
+    ${EndIf}
+
+    ${VersionCompare} "@CPACK_PACKAGE_VERSION@" $R0 $R1
+    StrCmp $R1 0 message_already_installed
+    StrCmp $R1 1 messageUninstall
+    StrCmp $R1 2 messageOldVersion
+
+message_already_installed:
+    MessageBox MB_OK "@CPACK_NSIS_DISPLAY_NAME@ @CPACK_PACKAGE_VERSION@ is already installed"
+    Abort
+
+messageUninstall:
+    MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION \
+    "@CPACK_NSIS_DISPLAY_NAME@ is already installed. $\n$\nYou have to uninstall the old version before installing the new one." \
+    IDOK uninst
+    Abort
+
+messageOldVersion:
+    MessageBox MB_OK "Warning: the version you are trying to install is older than the one already installed." \
+
+;Run the uninstaller
+uninst:
+    ClearErrors
+    StrLen $2 "\Uninstall.exe"
+    StrCpy $3 $0 -$2 # remove "\Uninstall.exe" from UninstallString to get path
+    ExecWait '$0 _?=$3' ;Do not copy the uninstaller to a temp file
+    Delete $0
+    RMDir $3
+
+    IfErrors uninst_failed inst
+
+uninst_failed:
+    MessageBox MB_OK|MB_ICONSTOP "Uninstall failed."
+    Abort
+
+inst:
+    ; Reads components status for registry
+    !insertmacro SectionList "InitSection"
+
+    StrCpy $INSTDIR "$LOCALAPPDATA\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+
+    ${If} $ACCOUNT_TYPE == "Admin"
+        SetShellVarContext all
+        StrCpy $INSTDIR "@CPACK_NSIS_INSTALL_DIR@\@CPACK_PACKAGE_VENDOR@\@CPACK_PACKAGE_INSTALL_DIRECTORY@"
+    ${EndIf}
+
+done:
+    StrCmp "@CPACK_NSIS_MODIFY_PATH@" "ON" 0 noOptionsPage
+        !insertmacro MUI_INSTALLOPTIONS_EXTRACT "NSIS.InstallOptions.ini"
+
+  noOptionsPage:
+FunctionEnd
diff --git a/Apps/Tuto01Basic/rc/tuto.ico b/CMake/install/windows/NSIS/rc/app.ico
similarity index 100%
rename from Apps/Tuto01Basic/rc/tuto.ico
rename to CMake/install/windows/NSIS/rc/app.ico
diff --git a/CMake/install/windows/NSIS/rc/banner_nsis.bmp b/CMake/install/windows/NSIS/rc/banner_nsis.bmp
new file mode 100644
index 0000000..4ecdbc9
Binary files /dev/null and b/CMake/install/windows/NSIS/rc/banner_nsis.bmp differ
diff --git a/CMake/install/windows/NSIS/rc/dialog_nsis.bmp b/CMake/install/windows/NSIS/rc/dialog_nsis.bmp
new file mode 100644
index 0000000..4999326
Binary files /dev/null and b/CMake/install/windows/NSIS/rc/dialog_nsis.bmp differ
diff --git a/CMake/install/windows/NSIS/rc/license.rtf b/CMake/install/windows/NSIS/rc/license.rtf
new file mode 100644
index 0000000..afeac27
--- /dev/null
+++ b/CMake/install/windows/NSIS/rc/license.rtf
@@ -0,0 +1,154 @@
+{\rtf1\ansi\deff3\adeflang1025
+{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\froman\fprq2\fcharset0 Arial;}{\f5\froman\fprq2\fcharset0 Calibri;}{\f6\fnil\fprq2\fcharset0 Mangal;}{\f7\fnil\fprq2\fcharset0 Times New Roman;}}
+{\colortbl;\red0\green0\blue0;\red0\green0\blue128;\red0\green0\blue255;\red128\green128\blue128;}
+{\stylesheet{\s0\snext0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036 Normal;}
+{\*\cs15\snext15\cf2\ul\ulc0\langfe255\alang255\lang255 Lien Internet;}
+{\s16\sbasedon0\snext17\ql\nowidctlpar\sb240\sa120\keepn\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f4\fs28\lang1036 Titre;}
+{\s17\sbasedon0\snext17\ql\nowidctlpar\sb0\sa120\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f0\fs24\lang1036 Corps de texte;}
+{\s18\sbasedon17\snext18\ql\nowidctlpar\sb0\sa120\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f0\fs24\lang1036 Liste;}
+{\s19\sbasedon0\snext19\ql\nowidctlpar\sb120\sa120\ltrpar\cf1\i\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f0\fs24\lang1036 L\u233\'e9gende;}
+{\s20\sbasedon0\snext20\ql\nowidctlpar\ltrpar\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\loch\f0\fs24\lang1036 Index;}
+}{\*\generator LibreOffice/4.4.1.2$Windows_x86 LibreOffice_project/45e2de17089c24a1fa810c8f975a7171ba4cd432}{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr2015\mo6\dy26\hr10\min33}{\printim\yr0\mo0\dy0\hr0\min0}}\deftab720
+\viewscale100
+{\*\pgdsctbl
+{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\pgdscnxt0 Style par d\u233\'e9faut;}}
+\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1800\margr1800\margt1440\margb1440\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
+{\*\ftnsep}\pgndec\pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+GNU LESSER GENERAL PUBLIC LICENSE}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+Version 3, 29 June 2007}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+Copyright \u169\'a9 2007 Free Software Foundation, Inc. <}{{\field{\*\fldinst HYPERLINK "http://fsf.org/" }{\fldrslt {\cf2\ul\ulc0\langfe255\alang255\lang255\cf3\ul\ulc0\rtlch \ltrch\loch\fs22\lang9\loch\f5
+http://fsf.org/}{}}}\rtlch \ltrch\loch\fs22\lang9\loch\f5
+>}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+0. Additional Definitions.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+As used herein, \u8220\'93this License\u8221\'94 refers to version 3 of the GNU Lesser General Public License, and the \u8220\'93GNU GPL\u8221\'94 refers to version 3 of the GNU General Public License.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+\u8220\'93}{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+The Library\u8221\'94 refers to a covered work governed by this License, other than an Application or a Combined Work as defined below.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+An \u8220\'93Application\u8221\'94 is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+A \u8220\'93Combined Work\u8221\'94 is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the \u8220\'93Linked Version\u8221\'94.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+The \u8220\'93Minimal Corresponding Source\u8221\'94 for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+The \u8220\'93Corresponding Application Code\u8221\'94 for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+1. Exception to Section 3 of the GNU GPL.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+2. Conveying Modified Versions.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version:}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+3. Object Code Incorporating Material from Library Header Files.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following:}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+b) Accompany the object code with a copy of the GNU GPL and this license document.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+4. Combined Works.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following:}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+b) Accompany the Combined Work with a copy of the GNU GPL and this license document.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+d) Do one of the following:}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+        }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+        }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application [...]
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+5. Combined Libraries.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following:}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\fs22\lang9\loch\f5
+    }{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+6. Revised Versions of the GNU Lesser General Public License.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.}
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200{\rtlch \ltrch\loch\fs22\lang9\loch\f5
+Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License \u8220\'93or any later version\u8221\'94 applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public Licen [...]
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\sb0\sa200\rtlch \ltrch\loch\fs22\lang9\loch\f5
+
+\par \pard\plain \s0\ql\nowidctlpar\ltrpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf1\kerning1\dbch\af6\langfe1081\dbch\af7\afs24\alang1081\loch\f0\fs24\lang1036\sl276\slmult1\qj\nowidctlpar\sb0\sa200\keepn{\afs20\rtlch \ltrch\loch\fs22\lang9\loch\f5
+If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library}
+\par }
\ No newline at end of file
diff --git a/CMake/install/windows/Wix/WIX.template.in b/CMake/install/windows/Wix/WIX.template.in
new file mode 100644
index 0000000..54ed505
--- /dev/null
+++ b/CMake/install/windows/Wix/WIX.template.in
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<?include "cpack_variables.wxi"?>
+
+<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
+    RequiredVersion="3.6.3303.0">
+
+    <Product Id="$(var.CPACK_WIX_PRODUCT_GUID)"
+        Name="$(var.CPACK_PACKAGE_NAME)"
+        Language="1033"
+        Version="$(var.CPACK_PACKAGE_VERSION)"
+        Manufacturer="$(var.CPACK_PACKAGE_VENDOR)"
+        UpgradeCode="$(var.CPACK_WIX_UPGRADE_GUID)">
+
+        <Package InstallerVersion="301" Compressed="yes"/>
+
+        <Media Id="1" Cabinet="media1.cab" EmbedCab="yes"/>
+
+        <MajorUpgrade
+            Schedule="afterInstallInitialize"
+            AllowSameVersionUpgrades="yes"
+            DowngradeErrorMessage="A later version of [ProductName] is already installed. Setup will now exit."/>
+
+        <WixVariable Id="WixUILicenseRtf" Value="$(var.CPACK_WIX_LICENSE_RTF)"/>
+        <Property Id="WIXUI_INSTALLDIR" Value="INSTALL_ROOT"/>
+
+        <?ifdef CPACK_WIX_PRODUCT_ICON?>
+        <Property Id="ARPPRODUCTICON">ProductIcon.ico</Property>
+        <Icon Id="ProductIcon.ico" SourceFile="$(var.CPACK_WIX_PRODUCT_ICON)"/>
+        <?endif?>
+
+        <?ifdef CPACK_WIX_UI_BANNER?>
+        <WixVariable Id="WixUIBannerBmp" Value="$(var.CPACK_WIX_UI_BANNER)"/>
+        <?endif?>
+
+        <?ifdef CPACK_WIX_UI_DIALOG?>
+        <WixVariable Id="WixUIDialogBmp" Value="$(var.CPACK_WIX_UI_DIALOG)"/>
+        <?endif?>
+
+
+       <DirectoryRef Id="TARGETDIR">
+            <Directory Id="ProgramMenuFolder">
+                <Directory Id="ApplicationProgramsFolder" Name="IRCAD"/>
+            </Directory>
+        </DirectoryRef>
+
+        <DirectoryRef Id="ApplicationProgramsFolder">
+            <Component Id="ApplicationShortcut" Guid="$(var.CPACK_WIX_PRODUCT_GUID)">
+                <Shortcut
+                    Id="$(var.CPACK_PACKAGE_NAME)"
+                    Name="$(var.CPACK_PACKAGE_NAME)"
+                    Icon='ProductIcon.ico'
+                    IconIndex="0"
+                    Target="[INSTALL_ROOT]@LAUNCHER_PATH@"
+                    Arguments=".\@PROFILE_PATH@"
+                    WorkingDirectory="INSTALL_ROOT"
+                />
+                <Shortcut
+                    Id="UninstallProduct"
+                    Name="Uninstall $(var.CPACK_PACKAGE_NAME)"
+                    Target="[System64Folder]msiexec.exe"
+                    Arguments="/x [ProductCode]"
+                    Description="Uninstalls $(var.CPACK_PACKAGE_NAME)"
+                    />
+
+
+                <RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
+                <RegistryValue Root="HKCU" Key="Software\IRCAD\$(var.CPACK_PACKAGE_NAME)" Name="installed" Type="integer" Value="1" KeyPath="yes"/>
+            </Component>
+        </DirectoryRef>
+
+        <Feature Id="MainApplication" Title="Main Application" Level="1">
+            <ComponentRef Id="ApplicationShortcut" />
+        </Feature>
+
+        <FeatureRef Id="ProductFeature"/>
+
+        <UIRef Id="WixUI_InstallDir" />
+    </Product>
+</Wix>
diff --git a/CMake/install/windows/windows_fixup.cmake.in b/CMake/install/windows/windows_fixup.cmake.in
new file mode 100644
index 0000000..3bb2548
--- /dev/null
+++ b/CMake/install/windows/windows_fixup.cmake.in
@@ -0,0 +1,30 @@
+#This script is called at install time only on Windows OS
+#It will be configured at configure time, only '@' variables will be replaced.
+
+
+#function to find libs and Bundles/* directories
+function(findFwlibsAndBundles FWLIBS_BUNDLES_DIRECTORIES)
+    file(GLOB_RECURSE LIBS @CMAKE_INSTALL_PREFIX@/*@CMAKE_SHARED_LIBRARY_SUFFIX@)
+    list(REMOVE_DUPLICATES LIBS)
+    set(FOLDERS)
+    foreach(LIB ${LIBS})
+        get_filename_component(LIB_DIR "${LIB}" DIRECTORY)
+        list(APPEND FOLDERS ${LIB_DIR})
+    endforeach()
+    list(REMOVE_DUPLICATES FOLDERS)
+    set(${FWLIBS_BUNDLES_DIRECTORIES} ${FOLDERS} PARENT_SCOPE)
+endfunction()
+
+#Find all /*/.dll in /Bundles /plugins /share
+file(GLOB_RECURSE BUNDLES FOLLOW_SYMLINKS "@CMAKE_INSTALL_PREFIX@/Bundles/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
+file(GLOB_RECURSE PLUGINS FOLLOW_SYMLINKS "@CMAKE_INSTALL_PREFIX@/plugins/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
+file(GLOB_RECURSE SHARE FOLLOW_SYMLINKS "@CMAKE_INSTALL_PREFIX@/share/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
+include(BundleUtilities)
+set(LIBS)
+list(APPEND LIBS ${BUNDLES} ${PLUGINS} ${SHARE})
+#Look for all directories containing '.dll' files
+findFwlibsAndBundles(FWLIBS_BUNDLES_DIRECTORIES)
+list(APPEND FWLIBS_BUNDLES_DIRECTORIES @EXTERNAL_LIBRARIES_DIRECTORIES@)
+#Call fixup bundle on the fwlauncher and on all 'plugins' libraries (like bundle, plugins and share)
+fixup_bundle("@CMAKE_INSTALL_PREFIX@/@LAUNCHER_PATH@" "${LIBS}" "${FWLIBS_BUNDLES_DIRECTORIES}")
+
diff --git a/CMake/modules/FindCAMP.cmake b/CMake/modules/FindCAMP.cmake
new file mode 100644
index 0000000..3b4842e
--- /dev/null
+++ b/CMake/modules/FindCAMP.cmake
@@ -0,0 +1,48 @@
+# Locate CAMP library
+# This module defines
+#  CAMP_FOUND, if false, do not try to link to CAMP
+#  CAMP_LIBRARIES
+#  CAMP_INCLUDE_DIR, where to find camp/version.hpp
+
+find_path(CAMP_INCLUDE_DIR camp/version.hpp
+  HINTS
+  $ENV{CAMP_DIR}
+  PATH_SUFFIXES include
+  PATHS
+  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Tegesoft\\CAMP]
+  ~/Library/Frameworks
+  /Library/Frameworks
+  /usr/local
+  /usr
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+  /opt
+)
+
+find_library(CAMP_LIBRARY 
+  NAMES camp campd
+  HINTS
+  $ENV{CAMP_DIR}
+  PATH_SUFFIXES lib64 lib
+  PATHS
+  [HKEY_LOCAL_MACHINE\\SOFTWARE\\Tegesoft\\CAMP]
+  ~/Library/Frameworks
+  /Library/Frameworks
+  /usr/local
+  /usr
+  /sw
+  /opt/local
+  /opt/csw
+  /opt
+)
+
+set(CAMP_LIBRARIES "${CAMP_LIBRARY}" CACHE STRING "CAMP Libraries")
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set CAMP_FOUND to TRUE if 
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CAMP DEFAULT_MSG CAMP_LIBRARIES CAMP_INCLUDE_DIR)
+
+MARK_AS_ADVANCED(CAMP_INCLUDE_DIR CAMP_LIBRARIES CAMP_LIBRARY)
+
diff --git a/CMake/modules/FindCppUnit.cmake b/CMake/modules/FindCppUnit.cmake
new file mode 100644
index 0000000..95d0f1d
--- /dev/null
+++ b/CMake/modules/FindCppUnit.cmake
@@ -0,0 +1,46 @@
+#
+# Find the CppUnit includes and library
+#
+# This module defines
+# CPPUNIT_INCLUDE_DIR, where to find tiff.h, etc.
+# CPPUNIT_LIBRARIES, the libraries to link against to use CppUnit.
+# CPPUNIT_FOUND, If false, do not try to use CppUnit.
+
+# also defined, but not for general use are
+# CPPUNIT_LIBRARY, where to find the CppUnit library.
+# CPPUNIT_DEBUG_LIBRARY, where to find the CppUnit library in debug mode.
+
+find_path(CPPUNIT_INCLUDE_DIR cppunit/TestCase.h
+  /usr/local/include
+  /usr/include
+)
+
+# With Win32, important to have both
+if(WIN32)
+  find_library(CPPUNIT_LIBRARY cppunit
+               ${CPPUNIT_INCLUDE_DIR}/../lib
+               /usr/local/lib
+               /usr/lib)
+  find_library(CPPUNIT_DEBUG_LIBRARY cppunitd
+               ${CPPUNIT_INCLUDE_DIR}/../lib
+               /usr/local/lib
+               /usr/lib)
+else(WIN32)
+  # On unix system, debug and release have the same name
+  find_library(CPPUNIT_LIBRARY cppunit
+               ${CPPUNIT_INCLUDE_DIR}/../lib
+               /usr/local/lib
+               /usr/lib)
+  find_library(CPPUNIT_DEBUG_LIBRARY cppunit
+               ${CPPUNIT_INCLUDE_DIR}/../lib
+               /usr/local/lib
+               /usr/lib)
+endif(WIN32)
+
+if(CPPUNIT_INCLUDE_DIR)
+  if(CPPUNIT_LIBRARY)
+    set(CPPUNIT_FOUND "YES")
+    set(CPPUNIT_LIBRARIES ${CPPUNIT_LIBRARY} ${CMAKE_DL_LIBS})
+    set(CPPUNIT_DEBUG_LIBRARIES ${CPPUNIT_DEBUG_LIBRARY} ${CMAKE_DL_LIBS})
+  endif(CPPUNIT_LIBRARY)
+endif(CPPUNIT_INCLUDE_DIR)
diff --git a/CMake/modules/FindCryptoPP.cmake b/CMake/modules/FindCryptoPP.cmake
new file mode 100644
index 0000000..4a399bb
--- /dev/null
+++ b/CMake/modules/FindCryptoPP.cmake
@@ -0,0 +1,65 @@
+# Locate CryptoPP library
+# This module defines
+#  CryptoPP_FOUND, if false, do not try to link to CryptoPP
+#  CryptoPP_LIBRARIES
+#  CryptoPP_INCLUDE_DIR, where to find cryptopp/config.h
+
+
+    find_path(CryptoPP_INCLUDE_DIR cryptopp/config.h
+        HINTS
+        PATH_SUFFIXES include
+        PATHS
+        ~/Library/Frameworks
+        /Library/Frameworks
+        /usr/local
+        /usr
+        /sw # Fink
+        /opt/local # DarwinPorts
+        /opt/csw # Blastwave
+        /opt
+        )
+
+    find_library(CryptoPP_LIBRARY 
+        NAMES cryptopp 
+        HINTS
+        PATH_SUFFIXES lib
+        PATHS
+        ~/Library/Frameworks
+        /Library/Frameworks
+        /usr/local
+        /usr
+        /sw
+        /opt/local
+        /opt/csw
+        /opt
+        )
+
+if(WIN32)
+    find_library(CryptoPP_LIB
+        NAMES cryptlib 
+        HINTS
+        PATH_SUFFIXES lib
+        PATHS
+        ~/Library/Frameworks
+        /Library/Frameworks
+        /usr/local
+        /usr
+        /sw
+        /opt/local
+        /opt/csw
+        /opt
+        )
+    set(CryptoPP_LIBRARIES "${CryptoPP_LIB};${CryptoPP_LIBRARY}" CACHE LIST "CryptoPP Libraries")
+else()
+    set(CryptoPP_LIBRARIES "${CryptoPP_LIBRARY}" CACHE LIST "CryptoPP Libraries")
+endif()
+
+
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set CryptoPP_FOUND to TRUE if 
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(CryptoPP DEFAULT_MSG CryptoPP_LIBRARIES CryptoPP_INCLUDE_DIR)
+
+MARK_AS_ADVANCED(CryptoPP_INCLUDE_DIR CryptoPP_LIBRARIES CryptoPP_LIBRARY)
+
diff --git a/CMake/modules/FindGLM.cmake b/CMake/modules/FindGLM.cmake
new file mode 100644
index 0000000..2d90092
--- /dev/null
+++ b/CMake/modules/FindGLM.cmake
@@ -0,0 +1,63 @@
+# FindGLM - attempts to locate the glm matrix/vector library.
+#
+# This module defines the following variables (on success):
+#   GLM_INCLUDE_DIRS  - where to find glm/glm.hpp
+#   GLM_FOUND         - if the library was successfully located
+#
+# It is trying a few standard installation locations, but can be customized
+# with the following variables:
+#   GLM_ROOT_DIR      - root directory of a glm installation
+#                       Headers are expected to be found in either:
+#                       <GLM_ROOT_DIR>/glm/glm.hpp           OR
+#                       <GLM_ROOT_DIR>/include/glm/glm.hpp
+#                       This variable can either be a cmake or environment
+#                       variable. Note however that changing the value
+#                       of the environment varible will NOT result in
+#                       re-running the header search and therefore NOT
+#                       adjust the variables set by this module.
+
+#=============================================================================
+# Copyright 2012 Carsten Neumann
+#
+# Distributed under the OSI-approved BSD License (the "License");
+# see accompanying file Copyright.txt for details.
+#
+# This software is distributed WITHOUT ANY WARRANTY; without even the
+# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+# See the License for more information.
+#=============================================================================
+# (To distribute this file outside of CMake, substitute the full
+#  License text for the above reference.)
+
+# default search dirs
+SET(_glm_HEADER_SEARCH_DIRS
+    "/usr/include"
+    "/usr/local/include")
+
+# check environment variable
+SET(_glm_ENV_ROOT_DIR "$ENV{GLM_ROOT_DIR}")
+
+IF(NOT GLM_ROOT_DIR AND _glm_ENV_ROOT_DIR)
+    SET(GLM_ROOT_DIR "${_glm_ENV_ROOT_DIR}")
+ENDIF(NOT GLM_ROOT_DIR AND _glm_ENV_ROOT_DIR)
+
+# put user specified location at beginning of search
+IF(GLM_ROOT_DIR)
+    SET(_glm_HEADER_SEARCH_DIRS "${GLM_ROOT_DIR}"
+                                "${GLM_ROOT_DIR}/include"
+                                 ${_glm_HEADER_SEARCH_DIRS})
+ENDIF(GLM_ROOT_DIR)
+
+# locate header
+FIND_PATH(GLM_INCLUDE_DIR "glm/glm.hpp"
+    PATHS ${_glm_HEADER_SEARCH_DIRS})
+
+INCLUDE(FindPackageHandleStandardArgs)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLM DEFAULT_MSG
+    GLM_INCLUDE_DIR)
+
+IF(GLM_FOUND)
+    SET(GLM_INCLUDE_DIRS "${GLM_INCLUDE_DIR}")
+
+    MESSAGE(STATUS "GLM_INCLUDE_DIR = ${GLM_INCLUDE_DIR}")
+ENDIF(GLM_FOUND)
diff --git a/CMake/modules/FindIconv.cmake b/CMake/modules/FindIconv.cmake
new file mode 100644
index 0000000..940ab89
--- /dev/null
+++ b/CMake/modules/FindIconv.cmake
@@ -0,0 +1,10 @@
+# ICONV_FOUND - system has Iconv 
+# ICONV_INCLUDE_DIR - the Iconv include directory 
+# ICONV_LIBRARIES - Link these to use Iconv 
+
+find_path(ICONV_INCLUDE_DIR iconv.h) 
+find_library(ICONV_LIBRARIES NAMES iconv libiconv libiconv-2 c)
+ 
+if(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) 
+    set(ICONV_FOUND TRUE) 
+endif(ICONV_INCLUDE_DIR AND ICONV_LIBRARIES) 
diff --git a/CMake/modules/FindTetgen.cmake b/CMake/modules/FindTetgen.cmake
new file mode 100644
index 0000000..21619d4
--- /dev/null
+++ b/CMake/modules/FindTetgen.cmake
@@ -0,0 +1,48 @@
+# Locate Tetgen library
+# This module defines
+#  TETGEN_FOUND, if false, do not try to link to TETGEN
+#  TETGEN_LIBRARIES
+#  TETGEN_INCLUDE_DIR, where to find tetgen.h
+
+find_path(TETGEN_INCLUDE_DIR tetgen.h
+  HINTS
+  $ENV{TETGEN_DIR}
+  PATH_SUFFIXES include include/tetgen
+  PATHS
+  ~/Library/Frameworks
+  /Library/Frameworks
+  /usr/local
+  /usr
+  /sw # Fink
+  /opt/local # DarwinPorts
+  /opt/csw # Blastwave
+  /opt
+)
+
+find_library(TETGEN_LIBRARY 
+  NAMES tetlib
+  HINTS
+  $ENV{TETGEN_DIR}
+  PATH_SUFFIXES lib64 lib
+  PATHS
+  ~/Library/Frameworks
+  /Library/Frameworks
+  /usr/local
+  /usr
+  /sw
+  /opt/local
+  /opt/csw
+  /opt
+)
+
+set(TETGEN_LIBRARIES "${TETGEN_LIBRARY}" CACHE STRING "Tetgen Libraries")
+
+include(FindPackageHandleStandardArgs)
+# handle the QUIETLY and REQUIRED arguments and set TETGEN_FOUND to TRUE if 
+# all listed variables are TRUE
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(TETGEN DEFAULT_MSG TETGEN_LIBRARIES TETGEN_INCLUDE_DIR)
+
+add_definitions(-DTETLIBRARY)
+
+MARK_AS_ADVANCED(TETGEN_INCLUDE_DIR TETGEN_LIBRARIES TETGEN_LIBRARY)
+
diff --git a/CMake/modules/fw-Qt5.cmake b/CMake/modules/fw-Qt5.cmake
new file mode 100644
index 0000000..01e5135
--- /dev/null
+++ b/CMake/modules/fw-Qt5.cmake
@@ -0,0 +1,3 @@
+add_definitions("-DQT_NO_KEYWORDS")
+#Fix error with BOOST_JOIN and qt moc
+set(CMAKE_AUTOMOC_MOC_OPTIONS "-DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION")
diff --git a/CMake/modules/fw-boost.cmake b/CMake/modules/fw-boost.cmake
new file mode 100644
index 0000000..603f08e
--- /dev/null
+++ b/CMake/modules/fw-boost.cmake
@@ -0,0 +1,7 @@
+add_definitions(
+    -DBOOST_ALL_DYN_LINK
+    -DBOOST_THREAD_DONT_PROVIDE_DEPRECATED_FEATURES_SINCE_V3_0_0
+    -DBOOST_THREAD_PROVIDES_FUTURE
+    -DBOOST_THREAD_VERSION=2
+    -DBOOST_SPIRIT_USE_PHOENIX_V3
+)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index aa5cd73..2c732a2 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,5 +1,5 @@
 
-cmake_minimum_required (VERSION 2.8.11)
+cmake_minimum_required (VERSION 3.1)
 
 project (fw4spl)
 
@@ -7,39 +7,103 @@ enable_testing()
 
 include(CheckVariableExists)
 include(CMakeParseArguments)
+include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/build/profile_config.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/build/plugin_config.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/generic_install.cmake)
+include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/install/helper.cmake)
 
-option(CLASSIC_INSTALL ON)
-set(CLASSIC_INSTALL OFF)
-set( EXTERNAL_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/CMake/Modules/ )
+set(BUILD_SHARED_LIBS ON)
+if (NOT CMAKE_BUILD_TYPE)
+    message(STATUS "Setting build type to 'Debug' as none was specified.")
+    set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
+    set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "Debug" "Release")
+endif()
+if(CMAKE_CONFIGURATION_TYPES)
+    set(CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE} CACHE STRING "List of supported configurations." FORCE)
+endif()
+
+#Use solution folders.
+set_property(GLOBAL PROPERTY USE_FOLDERS ON)
+set_property(GLOBAL PROPERTY AUTOGEN_TARGETS_FOLDER automoc)
+
+set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")  #racy backward compatibility
 
-if(CLASSIC_INSTALL)
-    set( LIBRARY_OUTPUT_DIR "lib" )
-    set( SHARE_OUTPUT_DIR "share" )
-    add_definitions( -DLIBSFW4SPL=\"\" )
-    add_definitions( -DBUNDLEPATH=\"\" )
-    add_definitions( -DSHAREPATH=\"\" )
+if(UNIX AND NOT APPLE)
+    option(DEBIAN_INSTALL "Install apps in a Debian-way" OFF)
+endif()
+
+if(DEBIAN_INSTALL)
+    set(USE_SYSTEM_LIB CACHE BOOL ON)
 else()
-    set( CMAKE_BUILD_TYPE Release)
-    set( CMAKE_INSTALL_PREFIX /usr )
-    set( PROJECTS_TO_BUILD VRRender )
-    set( PROJECTS_TO_INSTALL VRRender )
-    set( SHARE_OUTPUT_DIR "share/fw4spl" )
-    set( LIBRARY_OUTPUT_DIR "lib/fw4spl" )
-    add_definitions( -DSPECIALINSTALL )
-    add_definitions( -DLIBSFW4SPL=\"/usr/lib/fw4spl/\" )
-    add_definitions( -DBUNDLEPATH=\"/usr/share/fw4spl/Bundles/\" )
-    add_definitions( -DSHAREPATH=\"/usr/share/fw4spl/\" )
+    option(USE_SYSTEM_LIB "Use system libraries to compile fw4spl" OFF)
+    if(NOT USE_SYSTEM_LIB)
+        set(EXTERNAL_LIBRARIES CACHE PATH "External libraries location")
+    endif()
 endif()
 
-set( RUNTIME_OUTPUT_DIR "bin" )
 
-set(BUILD_SHARED_LIBS ON)
+set(CREATE_SUBPROJECTS OFF CACHE BOOL "Create a project for each subproject")
+set(BUILD_TESTS ON CACHE BOOL "Configures projects associated tests (<project>Test projects)")
+set(ADDITIONAL_PROJECTS CACHE PATH
+        "Paths to the additional projects"
+    )
 
-set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")  #racy backward compatibility
+set(SET_API_VERSION ON)
 
-set(CREATE_SUBPROJECTS OFF CACHE BOOL "Create a project for each subproject")
+# Empty custom macro that can be overriden by projects CMakeLists
+macro(fwLibExtra)
+    # Do nothing
+endmacro()
+macro(fwBundleExtra)
+    # Do nothing
+endmacro()
 
-set(BUILD_TESTS ON CACHE BOOL "Configures projects associated tests (<project>Test projects)")
+if(ADDITIONAL_PROJECTS)
+    foreach(ADDITIONAL_PROJECT ${ADDITIONAL_PROJECTS})
+        # parse additional CMakeLists
+        if(EXISTS ${ADDITIONAL_PROJECT}/CMakeLists.txt)
+            get_filename_component(DIRECTORY_PATH ${ADDITIONAL_PROJECT} ABSOLUTE )
+            get_filename_component(DIR_NAME ${DIRECTORY_PATH} NAME )
+            add_subdirectory(${ADDITIONAL_PROJECT} ${DIR_NAME})
+        endif()
+    endforeach()
+endif()
+
+set(BUNDLE_PREFIX "Bundles")
+
+# Set warning level and function export visibility on Unix
+if(UNIX)
+    if(APPLE)
+        # actually the flag -fvisibility=hidden makes application crash on OSX
+        set(CMAKE_C_FLAG "${CMAKE_C_FLAGS} -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-ignored-qualifiers -fvisibility-ms-compat")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-ignored-qualifiers -fvisibility-ms-compat")
+        set(CMAKE_MACOSX_RPATH ON)
+    else()
+        set(CMAKE_C_FLAG "${CMAKE_C_FLAGS} -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-ignored-qualifiers -fvisibility=hidden")
+        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -Wconversion -Wno-unused-parameter -Wno-ignored-qualifiers -fvisibility=hidden")
+
+        #To make a debian package we should install our bundle in /usr/share/...
+        if(DEBIAN_INSTALL)
+            set(BUNDLE_PREFIX "share/Bundles")
+        endif()
+
+    endif()
+    # Color for ninja and Clang on Linux and OSX
+    if (CMAKE_GENERATOR STREQUAL "Ninja")
+        if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
+            set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fcolor-diagnostics")
+            set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fcolor-diagnostics")
+        endif()
+    endif()
+endif()
+
+# Building with all your cores on Visual Studio IDE
+if(MSVC_IDE)
+    set(CMAKE_C_FLAG "${CMAKE_C_FLAGS} /MP")
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
+endif()
+
+set(LIBRARY_OUTPUT_DIR lib)
 
 set(FWCMAKE_RESOURCE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/CMake/)
 
@@ -49,11 +113,17 @@ if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
     set(LIBRARY_OUTPUT_DIR Libraries)
 endif()
 
-set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${RUNTIME_OUTPUT_DIR})
 
+set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${LIBRARY_OUTPUT_DIR})
 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/${LIBRARY_OUTPUT_DIR})
-
+# Fixed path for multi-config builds (e.g. msvc)
+foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
+    string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
+    set( CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/bin )
+    set( CMAKE_LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_DIR} )
+    set( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_BINARY_DIR}/${LIBRARY_OUTPUT_DIR} )
+endforeach()
 
 set(SPYLOG_LEVEL "error" CACHE STRING "Log level")
 set(SPYLOG_LEVEL_VALUES "fatal;error;warning;info;debug;trace" CACHE INTERNAL
@@ -66,14 +136,30 @@ set(SPYLOG_LEVEL_MAP_debug 5)
 set(SPYLOG_LEVEL_MAP_trace 6)
 set_property(CACHE SPYLOG_LEVEL PROPERTY STRINGS ${SPYLOG_LEVEL_VALUES} )
 
-# Until c++11 beeing globaly enabled ...
-macro(fwEnableCpp11)
-    if(NOT WIN32)
-        add_definitions("--std=c++11")
-        if(APPLE)
-            add_definitions("--stdlib=libc++")
-        endif(APPLE)
-    endif()
+# require C++11 standard by default
+if(ANDROID)
+    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11")
+else()
+    set(CMAKE_CXX_STANDARD 11)
+    set(CMAKE_CXX_STANDARD_REQUIRED ON)
+endif()
+
+add_definitions(-DBUNDLE_PREFIX="${BUNDLE_PREFIX}")
+
+macro(groupMaker FWPROJECT_NAME)
+    file(GLOB_RECURSE PRJ_SOURCES "${${FWPROJECT_NAME}_DIR}/*")
+    foreach(SRC ${PRJ_SOURCES})
+        string(REGEX REPLACE ${${FWPROJECT_NAME}_DIR} "" REL_DIR "${SRC}")
+        string(REGEX REPLACE "[\\\\/][^\\\\/]*$" "" REL_DIR "${REL_DIR}")
+        string(REGEX REPLACE "^[\\\\/]" "" REL_DIR "${REL_DIR}")
+        string(REPLACE "/" "\\" REL_DIR "${REL_DIR}")
+        source_group("${REL_DIR}" FILES ${SRC})
+    endforeach()
+
+    file(GLOB_RECURSE PRJ_BUILD_SOURCES "${${FWPROJECT_NAME}_BUILD_DIR}/*.cpp" "${${FWPROJECT_NAME}_BUILD_DIR}/*.hpp")
+    foreach(SRC ${PRJ_BUILD_SOURCES})
+        source_group("genFiles" FILES ${SRC})
+    endforeach()
 endmacro()
 
 macro(initProject PRJNAME )
@@ -102,13 +188,31 @@ macro(initProject PRJNAME )
 
         list(APPEND ${FWPROJECT_NAME}_HEADERS ${HEADERS})
         list(APPEND ${FWPROJECT_NAME}_SOURCES ${SOURCES})
-    endforeach(SUBDIR)
+    endforeach()
+
+    set (${FWPROJECT_NAME}_INCLUDE_DIR ${${FWPROJECT_NAME}_INCLUDE_DIR} PARENT_SCOPE)
+    set (${FWPROJECT_NAME}_DIR     ${CMAKE_CURRENT_SOURCE_DIR}  PARENT_SCOPE)
+    set (${FWPROJECT_NAME}_BUILD_DIR ${CMAKE_BINARY_DIR}/${FWPROJECT_NAME})
+    set (${FWPROJECT_NAME}_BUILD_DIR ${${FWPROJECT_NAME}_BUILD_DIR} PARENT_SCOPE)
 
-    set (${FWPROJECT_NAME}_INCLUDE_DIR ${${FWPROJECT_NAME}_INCLUDE_DIR} PARENT_SCOPE) 
+    set (${FWPROJECT_NAME}_HEADERS ${${FWPROJECT_NAME}_HEADERS} PARENT_SCOPE)
+    set (${FWPROJECT_NAME}_SOURCES ${${FWPROJECT_NAME}_SOURCES} PARENT_SCOPE)
 
-    set (${FWPROJECT_NAME}_HEADERS ${${FWPROJECT_NAME}_HEADERS} PARENT_SCOPE) 
-    set (${FWPROJECT_NAME}_SOURCES ${${FWPROJECT_NAME}_SOURCES} PARENT_SCOPE) 
-endmacro(initProject)
+    file(GLOB_RECURSE ${FWPROJECT_NAME}_RC_FILES "${PRJ_SOURCE_DIR}/rc/*" "${PRJ_SOURCE_DIR}/tu/rc/*")
+    set(${FWPROJECT_NAME}_RC_FILES ${${FWPROJECT_NAME}_RC_FILES} PARENT_SCOPE)
+    set_source_files_properties(${${FWPROJECT_NAME}_RC_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
+
+    file(GLOB ${FWPROJECT_NAME}_CMAKE_FILES "${PRJ_SOURCE_DIR}/*.txt" "${PRJ_SOURCE_DIR}/*.cmake")
+    set(${FWPROJECT_NAME}_CMAKE_FILES ${${FWPROJECT_NAME}_CMAKE_FILES} PARENT_SCOPE)
+    set_source_files_properties(${${FWPROJECT_NAME}_CMAKE_FILES} PROPERTIES HEADER_FILE_ONLY TRUE)
+
+    if (APPLE)
+        set_source_files_properties(${${FWPROJECT_NAME}_RC_FILES} PROPERTIES XCODE_LAST_KNOWN_FILE_TYPE YES)
+        set_source_files_properties(${${FWPROJECT_NAME}_CMAKE_FILES} PROPERTIES XCODE_LAST_KNOWN_FILE_TYPE YES)
+    endif()
+
+    groupMaker(${FWPROJECT_NAME})
+endmacro()
 
 
 macro(setVersion FWPROJECT_NAME PROJECT_VERSION)
@@ -124,7 +228,11 @@ macro(configureProject FWPROJECT_NAME PROJECT_VERSION)
 
     setVersion(${FWPROJECT_NAME} ${PROJECT_VERSION})
     string(REGEX MATCH "^[^.]+" API_VERSION ${PROJECT_VERSION})
-    set_target_properties(${FWPROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${API_VERSION})
+
+    if(SET_API_VERSION)
+        set_target_properties(${FWPROJECT_NAME} PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${API_VERSION})
+    endif()
+
     set_target_properties(${FWPROJECT_NAME} PROPERTIES DEFINE_SYMBOL ${PROJECT_NAME_UPCASE}_EXPORTS)
 
     add_definitions(-D${PROJECT_NAME_UPCASE}_VER="${DASH_VERSION}")
@@ -132,7 +240,7 @@ macro(configureProject FWPROJECT_NAME PROJECT_VERSION)
     get_target_property(TARGET_TYPE ${FWPROJECT_NAME} TYPE)
 
     if (NOT ${TARGET_TYPE} MATCHES "EXECUTABLE")
-        get_target_property(${FWPROJECT_NAME}_LIBRARY ${FWPROJECT_NAME} LOCATION)
+        set(${FWPROJECT_NAME}_LIBRARY "$<TARGET_FILE:${FWPROJECT_NAME}>")
         set(${FWPROJECT_NAME}_LIBRARY ${${FWPROJECT_NAME}_LIBRARY} PARENT_SCOPE)
     endif()
 
@@ -149,7 +257,7 @@ macro(configureProject FWPROJECT_NAME PROJECT_VERSION)
     endif()
     unset(SPYLOG_VALID_VALUE)
 
-endmacro(configureProject)
+endmacro()
 
 
 macro(createResourcesTarget TARGET RES_DIR TARGET_DIR)
@@ -158,42 +266,41 @@ macro(createResourcesTarget TARGET RES_DIR TARGET_DIR)
     foreach(RESOURCE_FILE ${RESOURCES_FILES})
         file(RELATIVE_PATH REL_PATH "${RES_DIR}" "${RESOURCE_FILE}")
         if ("${TARGET_DIR}/${REL_PATH}" MATCHES "^.*\\.(txt|xml)$")
-            set(COPY_COMMAND cmake
-            -DIN_FILE="${RES_DIR}/${REL_PATH}" 
-            -DOUT_FILE="${TARGET_DIR}/${REL_PATH}" 
+            set(COPY_COMMAND ${CMAKE_COMMAND}
+            -DIN_FILE="${RES_DIR}/${REL_PATH}"
+            -DOUT_FILE="${TARGET_DIR}/${REL_PATH}"
             -DFWPROJECT_NAME="${FWPROJECT_NAME}"
             -DDASH_VERSION="${${FWPROJECT_NAME}_DASH_VERSION}"
             -DPROJECT_VERSION="${${FWPROJECT_NAME}_VERSION}"
+            -DBUNDLE_PREFIX="${BUNDLE_PREFIX}"
             -DTARGET_TYPE="${TARGET_TYPE}"
             -P ${FWCMAKE_RESOURCE_PATH}/build/configure_file.cmake
             )
             set(COPY_DEPENDS "${FWCMAKE_RESOURCE_PATH}/build/configure_file.cmake" )
         else()
-            set(COPY_COMMAND cmake -E copy "${RES_DIR}/${REL_PATH}" "${TARGET_DIR}/${REL_PATH}")
+
+            set(COPY_COMMAND ${CMAKE_COMMAND} -E copy "${RES_DIR}/${REL_PATH}" "${TARGET_DIR}/${REL_PATH}")
             set(COPY_DEPENDS )
         endif()
 
         add_custom_command(OUTPUT "${TARGET_DIR}/${REL_PATH}"
-            # COMMAND cmake -E copy "${RES_DIR}/${REL_PATH}" "${TARGET_DIR}/${REL_PATH}"
             COMMAND ${COPY_COMMAND}
             DEPENDS "${RES_DIR}/${REL_PATH}" ${COPY_DEPENDS}
-            ) 
+            )
         LIST (APPEND CREATED_RESOURCES_LIST "${TARGET_DIR}/${REL_PATH}")
+
     endforeach()
 
     add_custom_target("${TARGET}" ALL DEPENDS ${CREATED_RESOURCES_LIST} )
 
+    # Adds project into folder rc
+    set_target_properties("${TARGET}" PROPERTIES FOLDER "rc")
+
     unset(CREATED_RESOURCES_LIST)
 endmacro()
 
-macro(createResourcesInstallTarget RES_DIR CONFIGURED_FILES_DIR DESTINATION)
-    file(GLOB_RECURSE RESOURCES_FILES "${RES_DIR}/*")
-    foreach(RESOURCE_FILE ${RESOURCES_FILES})
-        file(RELATIVE_PATH REL_PATH "${RES_DIR}" "${RESOURCE_FILE}")
-        get_filename_component(RC_REL_DIR "${REL_PATH}" DIRECTORY)
-        install(FILES "${CONFIGURED_FILES_DIR}/${REL_PATH}" DESTINATION "${SHARE_OUTPUT_DIR}/${DESTINATION}/${RC_REL_DIR}" )
-        unset(RC_REL_DIR)
-    endforeach()
+macro(createResourcesInstallTarget CONFIGURED_FILES_DIR DESTINATION)
+    install(DIRECTORY "${CONFIGURED_FILES_DIR}/" DESTINATION "${DESTINATION}/")
 endmacro()
 
 
@@ -215,31 +322,35 @@ macro(fwExec FWPROJECT_NAME PROJECT_VERSION)
         add_definitions(-D_CONSOLE)
     endif()
 
-    add_executable(${FWPROJECT_NAME} ${GUI_TYPE} ${${FWPROJECT_NAME}_HEADERS} ${${FWPROJECT_NAME}_SOURCES} )
+    add_executable(${FWPROJECT_NAME} ${GUI_TYPE}
+        ${${FWPROJECT_NAME}_HEADERS}
+        ${${FWPROJECT_NAME}_SOURCES}
+        ${${FWPROJECT_NAME}_RC_FILES}
+        ${${FWPROJECT_NAME}_CMAKE_FILES})
 
     configureProject( ${FWPROJECT_NAME} ${PROJECT_VERSION} )
 
     if(EXISTS "${PRJ_SOURCE_DIR}/rc")
-        set(${FWPROJECT_NAME}_RC_BUILD_DIR "${CMAKE_BINARY_DIR}/${SHARE_OUTPUT_DIR}/${FWPROJECT_NAME}_${DASH_VERSION}")
-
+        set(${FWPROJECT_NAME}_RC_BUILD_DIR "${CMAKE_BINARY_DIR}/share/${FWPROJECT_NAME}_${DASH_VERSION}")
         createResourcesTarget( ${FWPROJECT_NAME}_rc "${PRJ_SOURCE_DIR}/rc" "${${FWPROJECT_NAME}_RC_BUILD_DIR}" )
         add_dependencies( ${FWPROJECT_NAME} ${FWPROJECT_NAME}_rc )
 
         if(${FWPROJECT_NAME}_INSTALL)
-            createResourcesInstallTarget( "${PRJ_SOURCE_DIR}/rc" "${${FWPROJECT_NAME}_RC_BUILD_DIR}" "${FWPROJECT_NAME}_${DASH_VERSION}" )
+            createResourcesInstallTarget( "${${FWPROJECT_NAME}_RC_BUILD_DIR}" "share/${FWPROJECT_NAME}_${DASH_VERSION}" )
         endif()
     endif()
 
     if(${FWPROJECT_NAME}_INSTALL)
         install(
             TARGETS ${FWPROJECT_NAME}
-            RUNTIME DESTINATION ${RUNTIME_OUTPUT_DIR}
+            RUNTIME DESTINATION bin
             OPTIONAL
             )
     endif()
 
-
-endmacro(fwExec)
+    # Adds project into folder exec
+    set_target_properties(${FWPROJECT_NAME} PROPERTIES FOLDER "exec")
+endmacro()
 
 macro(fwCppunitTest FWPROJECT_NAME)
     set(options)
@@ -247,6 +358,11 @@ macro(fwCppunitTest FWPROJECT_NAME)
     set(multiValueArgs)
     cmake_parse_arguments(fwCppunitTest "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} )
 
+    configure_file(
+        "${FWCMAKE_RESOURCE_PATH}/cppunit/cppunit_main.cpp"
+        "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/src/cppunit_main.cpp"
+        IMMEDIATE @ONLY)
+
     initProject( ${FWPROJECT_NAME} tu )
 
     set(${FWPROJECT_NAME}_TYPE "TEST")
@@ -257,25 +373,24 @@ macro(fwCppunitTest FWPROJECT_NAME)
         ${fwCppunitTest_UNPARSED_ARGUMENTS}
         ${${FWPROJECT_NAME}_HEADERS}
         ${${FWPROJECT_NAME}_SOURCES}
-        ${FWCMAKE_RESOURCE_PATH}/cppunit/cppunit_main.cpp
-        )
+        ${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/src/cppunit_main.cpp
+        ${${FWPROJECT_NAME}_RC_FILES}
+        ${${FWPROJECT_NAME}_CMAKE_FILES})
 
     if(fwCppunitTest_BUNDLE)
-        add_definitions(-DBUNDLE_TEST_PROFILE=\"${SHARE_OUTPUT_DIR}/tu_exec_${fwCppunitTest_BUNDLE}_0-0/profile.xml\")
+        add_definitions(-DBUNDLE_TEST_PROFILE=\"share/tu_exec_${fwCppunitTest_BUNDLE}_0-0/profile.xml\")
     endif()
 
     configureProject( ${FWPROJECT_NAME} 0.0 )
 
     if(EXISTS "${PRJ_SOURCE_DIR}/tu/rc")
         string(REGEX REPLACE "Test$" "" DIRNAME "${FWPROJECT_NAME}")
-        set(${FWPROJECT_NAME}_RC_BUILD_DIR "${CMAKE_BINARY_DIR}/${SHARE_OUTPUT_DIR}/tu_exec_${DIRNAME}_${DASH_VERSION}")
+        set(${FWPROJECT_NAME}_RC_BUILD_DIR "${CMAKE_BINARY_DIR}/share/tu_exec_${DIRNAME}_${DASH_VERSION}")
         createResourcesTarget( ${FWPROJECT_NAME}_rc "${PRJ_SOURCE_DIR}/tu/rc" "${${FWPROJECT_NAME}_RC_BUILD_DIR}" )
         add_dependencies( ${FWPROJECT_NAME} ${FWPROJECT_NAME}_rc )
 
         if(${FWPROJECT_NAME}_INSTALL)
-            createResourcesInstallTarget( "${PRJ_SOURCE_DIR}/tu/rc"
-                "${${FWPROJECT_NAME}_RC_BUILD_DIR}" 
-                "unittest/tu_exec_${DIRNAME}_${DASH_VERSION}" )
+            createResourcesInstallTarget( "${${FWPROJECT_NAME}_RC_BUILD_DIR}" "share/tu_exec_${DIRNAME}_${DASH_VERSION}" )
         endif()
     endif()
 
@@ -283,29 +398,57 @@ macro(fwCppunitTest FWPROJECT_NAME)
         set(fwCppunitTest_WORKING_DIRECTORY WORKING_DIRECTORY ${fwCppunitTest_WORKING_DIRECTORY})
     endif()
 
-    get_target_property(${FWPROJECT_NAME}_EXECUTABLE ${FWPROJECT_NAME} LOCATION)
-    add_test( NAME ${FWPROJECT_NAME} ${fwCppunitTest_WORKING_DIRECTORY} COMMAND ${${FWPROJECT_NAME}_EXECUTABLE}  )
-
-endmacro(fwCppunitTest)
+    set(${FWPROJECT_NAME}_EXECUTABLE "$<TARGET_FILE:${FWPROJECT_NAME}>")
+    add_test(NAME ${FWPROJECT_NAME} ${fwCppunitTest_WORKING_DIRECTORY} COMMAND ${${FWPROJECT_NAME}_EXECUTABLE} )
+
+    # Adds project into folder test
+    set_target_properties(${FWPROJECT_NAME} PROPERTIES FOLDER "test")
+
+    if(MSVC_IDE)
+        # create the launch config for the current test
+        set(LAUNCHER "${CMAKE_BINARY_DIR}/bin/${FWPROJECT_NAME}")
+        set(PROFILE "")
+        set(WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
+        include(${FWCMAKE_RESOURCE_PATH}/install/win_install.cmake)
+        if(NOT DEBUGGER_ENVIRONMENT)
+            findExtLibDir(EXTERNAL_LIBRARIES_DIRECTORIES)
+            set(DEBUGGER_ENVIRONMENT ${EXTERNAL_LIBRARIES_DIRECTORIES}
+                CACHE INTERNAL "List of all folders containing external libraries")
+        endif()
+        if(CMAKE_CL_64)
+            set(PLATFORM "x64")
+        else()
+            set(PLATFORM "Win32")
+        endif()
+        configure_file(
+            "${CMAKE_SOURCE_DIR}/CMake/build/project.vcxproj.user.in"
+            "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/${FWPROJECT_NAME}.vcxproj.user"
+            IMMEDIATE @ONLY)
+    endif()
+endmacro()
 
 macro(fwLib FWPROJECT_NAME PROJECT_VERSION)
     initProject( ${FWPROJECT_NAME} )
 
     set(${FWPROJECT_NAME}_TYPE "LIBRARY")
     set(${FWPROJECT_NAME}_TYPE ${${FWPROJECT_NAME}_TYPE} PARENT_SCOPE)
+
     setVersion(${FWPROJECT_NAME} ${PROJECT_VERSION})
 
-    add_library(${FWPROJECT_NAME} ${ARGN} ${${FWPROJECT_NAME}_HEADERS} ${${FWPROJECT_NAME}_SOURCES} )
+    add_library(${FWPROJECT_NAME} ${ARGN} ${${FWPROJECT_NAME}_HEADERS}
+               ${${FWPROJECT_NAME}_SOURCES}
+               ${${FWPROJECT_NAME}_RC_FILES}
+               ${${FWPROJECT_NAME}_CMAKE_FILES})
 
     configureProject( ${FWPROJECT_NAME} ${PROJECT_VERSION} )
 
     if(EXISTS "${PRJ_SOURCE_DIR}/rc")
-        set(${FWPROJECT_NAME}_RC_BUILD_DIR "${CMAKE_BINARY_DIR}/${SHARE_OUTPUT_DIR}/${FWPROJECT_NAME}_${DASH_VERSION}")
+        set(${FWPROJECT_NAME}_RC_BUILD_DIR "${CMAKE_BINARY_DIR}/share/${FWPROJECT_NAME}_${DASH_VERSION}")
         createResourcesTarget( ${FWPROJECT_NAME}_rc "${PRJ_SOURCE_DIR}/rc" "${${FWPROJECT_NAME}_RC_BUILD_DIR}" )
         add_dependencies( ${FWPROJECT_NAME} ${FWPROJECT_NAME}_rc )
 
         if(${FWPROJECT_NAME}_INSTALL)
-            createResourcesInstallTarget( "${PRJ_SOURCE_DIR}/rc" "${${FWPROJECT_NAME}_RC_BUILD_DIR}" "${FWPROJECT_NAME}_${DASH_VERSION}" )
+            createResourcesInstallTarget( "${${FWPROJECT_NAME}_RC_BUILD_DIR}" "share/${FWPROJECT_NAME}_${DASH_VERSION}" )
         endif()
 
     endif()
@@ -313,95 +456,138 @@ macro(fwLib FWPROJECT_NAME PROJECT_VERSION)
     if(${FWPROJECT_NAME}_INSTALL)
         install(
             TARGETS ${FWPROJECT_NAME}
-            RUNTIME DESTINATION ${RUNTIME_OUTPUT_DIR}
+            RUNTIME DESTINATION bin
             LIBRARY DESTINATION ${LIBRARY_OUTPUT_DIR}
-            OPTIONAL
+            OPTIONAL NAMELINK_SKIP
             )
     endif()
 
-endmacro(fwLib)
+    string(TOUPPER ${FWPROJECT_NAME} PROJECT_NAME_UPCASE)
+
+    # create the config.hpp for the current library
+    configure_file(
+        "${CMAKE_SOURCE_DIR}/CMake/build/config.hpp.in"
+        "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/${FWPROJECT_NAME}/config.hpp"
+        IMMEDIATE @ONLY)
+
+    target_include_directories(${FWPROJECT_NAME} PUBLIC "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/")
+
+    # Adds project into folder lib
+    set_target_properties(${FWPROJECT_NAME} PROPERTIES FOLDER "lib")
 
+    fwLibExtra()
+
+endmacro()
 
 macro(fwBundle FWPROJECT_NAME PROJECT_VERSION)
     initProject( ${FWPROJECT_NAME} )
 
-    set(${FWPROJECT_NAME}_TYPE "BUNDLE")
     set(${FWPROJECT_NAME}_TYPE ${${FWPROJECT_NAME}_TYPE} PARENT_SCOPE)
     setVersion(${FWPROJECT_NAME} ${PROJECT_VERSION})
 
-    set(BUNDLE_DIR "${CMAKE_BINARY_DIR}/Bundles/${FWPROJECT_NAME}_${DASH_VERSION}")
+    set(BUNDLE_DIR "${CMAKE_BINARY_DIR}/${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION}")
 
     if(EXISTS "${PRJ_SOURCE_DIR}/src")
-        add_library( ${FWPROJECT_NAME} SHARED ${ARGN} ${${FWPROJECT_NAME}_HEADERS} ${${FWPROJECT_NAME}_SOURCES})
+        add_library( ${FWPROJECT_NAME} SHARED ${ARGN}
+            ${${FWPROJECT_NAME}_HEADERS}
+            ${${FWPROJECT_NAME}_SOURCES}
+            ${${FWPROJECT_NAME}_RC_FILES}
+            ${${FWPROJECT_NAME}_CMAKE_FILES})
 
         configureProject( ${FWPROJECT_NAME} ${PROJECT_VERSION} )
 
         set_target_properties(${FWPROJECT_NAME} PROPERTIES OUTPUT_NAME ${FWPROJECT_NAME}_${DASH_VERSION})
         set_target_properties(${FWPROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BUNDLE_DIR})
         set_target_properties(${FWPROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${BUNDLE_DIR})
-
-        #install(DIRECTORY "${BUNDLE_DIR}" DESTINATION VRRender.app/Bundles COMPONENT Runtime)
+        # Fixed path for multi-config builds (e.g. msvc)
+        foreach( OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES} )
+            string( TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG )
+            set_target_properties(${FWPROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BUNDLE_DIR})
+            set_target_properties(${FWPROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BUNDLE_DIR})
+            set_target_properties(${FWPROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${BUNDLE_DIR})
+        endforeach()
 
         if(${FWPROJECT_NAME}_INSTALL)
-		install(TARGETS ${FWPROJECT_NAME}
-			RUNTIME DESTINATION ${LIBRARY_OUTPUT_DIR}/Bundles/${FWPROJECT_NAME}_${DASH_VERSION}
-			LIBRARY DESTINATION ${LIBRARY_OUTPUT_DIR}/Bundles/${FWPROJECT_NAME}_${DASH_VERSION}
-			OPTIONAL
-		)
+            qt_plugins_setup() # search and setup qt plugins for each bundles
+            install(
+                TARGETS ${FWPROJECT_NAME}
+                RUNTIME DESTINATION ${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION}
+                LIBRARY DESTINATION ${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION}
+                OPTIONAL NAMELINK_SKIP
+                )
         endif()
 
+        # create the config.hpp for the current library
+        configure_file(
+            "${CMAKE_SOURCE_DIR}/CMake/build/config.hpp.in"
+            "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/${FWPROJECT_NAME}/config.hpp"
+            IMMEDIATE @ONLY)
+
+        target_include_directories(${FWPROJECT_NAME} PUBLIC "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/include/")
     else()
-        add_custom_target(${FWPROJECT_NAME})
+        add_custom_target(${FWPROJECT_NAME} SOURCES
+            ${${FWPROJECT_NAME}_RC_FILES}
+            ${${FWPROJECT_NAME}_CMAKE_FILES})
+    endif()
+
+    # Adds project into folder bundle or apps
+    if(TYPE STREQUAL "APP")
+        set_target_properties(${FWPROJECT_NAME} PROPERTIES FOLDER "app")
+        if(MSVC_IDE)
+            # create the launch config for the current app
+            set(LAUNCHER "${CMAKE_BINARY_DIR}/bin/fwlauncher.exe")
+            set(PROFILE "${CMAKE_BINARY_DIR}/${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION}/profile.xml")
+            set(WORKING_DIRECTORY "${CMAKE_BINARY_DIR}")
+            include(${FWCMAKE_RESOURCE_PATH}/install/win_install.cmake)
+            if(NOT DEBUGGER_ENVIRONMENT)
+                findExtLibDir(EXTERNAL_LIBRARIES_DIRECTORIES)
+                set(DEBUGGER_ENVIRONMENT ${EXTERNAL_LIBRARIES_DIRECTORIES}
+                    CACHE INTERNAL "List of all folders containing external libraries")
+            endif()
+            if(CMAKE_CL_64)
+                set(PLATFORM "x64")
+            else()
+                set(PLATFORM "Win32")
+            endif()
+            configure_file(
+                "${CMAKE_SOURCE_DIR}/CMake/build/project.vcxproj.user.in"
+                "${CMAKE_BINARY_DIR}/${FWPROJECT_NAME}/${FWPROJECT_NAME}.vcxproj.user"
+                IMMEDIATE @ONLY)
+        endif()
+    else()
+        set_target_properties(${FWPROJECT_NAME} PROPERTIES FOLDER "bundle")
     endif()
 
     if(EXISTS "${PRJ_SOURCE_DIR}/rc")
         createResourcesTarget( ${FWPROJECT_NAME}_rc "${PRJ_SOURCE_DIR}/rc" "${BUNDLE_DIR}" )
         add_dependencies( ${FWPROJECT_NAME} ${FWPROJECT_NAME}_rc )
-
-        if(${FWPROJECT_NAME}_INSTALL)
-            createResourcesInstallTarget( "${PRJ_SOURCE_DIR}/rc" "${BUNDLE_DIR}" Bundles/${FWPROJECT_NAME}_${DASH_VERSION} )
-        endif()
     endif()
 
+    if(${FWPROJECT_NAME}_INSTALL)
+        createResourcesInstallTarget( "${BUNDLE_DIR}" ${BUNDLE_PREFIX}/${FWPROJECT_NAME}_${DASH_VERSION} )
+    endif()
+    fwBundleExtra()
+endmacro()
 
-endmacro(fwBundle)
-
-
-macro(fwUseForwardInclude)
-    foreach(PROJECT ${ARGV})
-        get_target_property(PROJECT_INCLUDE_DIRECTORIES ${PROJECT} INTERFACE_INCLUDE_DIRECTORIES)
-        list(REMOVE_DUPLICATES PROJECT_INCLUDE_DIRECTORIES)
-        target_include_directories(${FWPROJECT_NAME} PUBLIC ${PROJECT_INCLUDE_DIRECTORIES})
-    endforeach(PROJECT)
-endmacro(fwUseForwardInclude)
-
-macro(fwUseForwardLink)
-    target_link_libraries(${FWPROJECT_NAME} LINK_PUBLIC ${ARGV})
-endmacro(fwUseForwardLink)
-
-macro(fwUseForward)
-    fwUseForwardInclude(${ARGV})
-    fwUseForwardLink(${ARGV})
-endmacro(fwUseForward)
-
-
+# Include the projects in parameter and export them.
+# Compiling warnings will not be reported (because of SYSTEM).
 macro(fwForwardInclude)
-    target_include_directories(${FWPROJECT_NAME} PUBLIC ${ARGV})
-endmacro(fwForwardInclude)
+    target_include_directories(${FWPROJECT_NAME} SYSTEM PUBLIC ${ARGV})
+endmacro()
 
 macro(fwForwardLink)
-    #target_link_libraries(${FWPROJECT_NAME} LINK_PUBLIC ${ARGV})
-    target_link_libraries(${FWPROJECT_NAME} ${ARGV})
-endmacro(fwForwardLink)
+    target_link_libraries(${FWPROJECT_NAME} PUBLIC ${ARGV})
+endmacro()
 
+# Include the projects in parameter but do not export them.
+# Compiling warnings will not be reported (because of SYSTEM).
 macro(fwInclude)
-    target_include_directories(${FWPROJECT_NAME} PRIVATE ${ARGV})
-endmacro(fwInclude)
+    target_include_directories(${FWPROJECT_NAME} SYSTEM PRIVATE ${ARGV})
+endmacro()
 
 macro(fwLink)
-    #target_link_libraries(${FWPROJECT_NAME} LINK_PRIVATE ${ARGV})
-    target_link_libraries(${FWPROJECT_NAME} ${ARGV})
-endmacro(fwLink)
+    target_link_libraries(${FWPROJECT_NAME} PRIVATE ${ARGV})
+endmacro()
 
 
 # Defines project's linked dependencies on others projects
@@ -410,8 +596,7 @@ endmacro(fwLink)
 # WARNING : some part of this cmake file relies on this macro signature
 
 macro(fwUse)
-    #target_link_libraries(${FWPROJECT_NAME} LINK_PRIVATE ${ARGV})
-    target_link_libraries(${FWPROJECT_NAME} ${ARGV})
+    target_link_libraries(${FWPROJECT_NAME} PUBLIC ${ARGV})
 
     set(${FWPROJECT_NAME}_DEPENDENCIES)
     set(${FWPROJECT_NAME}_EXECUTABLE_DEPENDENCIES)
@@ -421,14 +606,14 @@ macro(fwUse)
     foreach(PROJECT ${ARGV})
         list(APPEND ${FWPROJECT_NAME}_DEPENDENCIES ${PROJECT})
         list(APPEND ${FWPROJECT_NAME}_${${PROJECT}_TYPE}_DEPENDENCIES ${PROJECT})
-    endforeach(PROJECT)
+    endforeach()
 
     set(${FWPROJECT_NAME}_DEPENDENCIES ${${FWPROJECT_NAME}_DEPENDENCIES} PARENT_SCOPE)
     set(${FWPROJECT_NAME}_EXECUTABLE_DEPENDENCIES ${${FWPROJECT_NAME}_EXECUTABLE_DEPENDENCIES} PARENT_SCOPE)
     set(${FWPROJECT_NAME}_BUNDLE_DEPENDENCIES ${${FWPROJECT_NAME}_BUNDLE_DEPENDENCIES} PARENT_SCOPE)
     set(${FWPROJECT_NAME}_LIBRARY_DEPENDENCIES ${${FWPROJECT_NAME}_LIBRARY_DEPENDENCIES} PARENT_SCOPE)
 
-endmacro(fwUse)
+endmacro()
 
 
 
@@ -447,14 +632,14 @@ macro(fwReq)
     foreach(PROJECT ${ARGV})
         list(APPEND ${FWPROJECT_NAME}_REQUIREMENTS ${PROJECT})
         list(APPEND ${FWPROJECT_NAME}_${${PROJECT}_TYPE}_REQUIREMENTS ${PROJECT})
-    endforeach(PROJECT)
+    endforeach()
 
     set(${FWPROJECT_NAME}_REQUIREMENTS ${${FWPROJECT_NAME}_REQUIREMENTS} PARENT_SCOPE)
     set(${FWPROJECT_NAME}_EXECUTABLE_REQUIREMENTS ${${FWPROJECT_NAME}_EXECUTABLE_REQUIREMENTS} PARENT_SCOPE)
     set(${FWPROJECT_NAME}_BUNDLE_REQUIREMENTS ${${FWPROJECT_NAME}_BUNDLE_REQUIREMENTS} PARENT_SCOPE)
     set(${FWPROJECT_NAME}_LIBRARY_REQUIREMENTS ${${FWPROJECT_NAME}_LIBRARY_REQUIREMENTS} PARENT_SCOPE)
 
-endmacro(fwReq)
+endmacro()
 
 
 function(checkMissingDependencies DIR KEYWORD RESULT)
@@ -472,10 +657,10 @@ function(checkMissingDependencies DIR KEYWORD RESULT)
     foreach(DEPENDENCY ${DEPENDENCIES})
         if(NOT ${DEPENDENCY}_TYPE)
             list(APPEND DEPENDENCY_LIST ${DEPENDENCY})
-        endif(NOT ${DEPENDENCY}_TYPE)
-    endforeach(DEPENDENCY)
+        endif()
+    endforeach()
     set(${RESULT} ${DEPENDENCY_LIST} PARENT_SCOPE)
-endfunction(checkMissingDependencies)
+endfunction()
 
 
 function(findAllDependencies FWPROJECT_NAMES RESULT_VAR)
@@ -514,13 +699,16 @@ function(findTests FWPROJECTS RESULT_VAR)
 endfunction()
 
 macro(loadProperties PROPERTIES_FILE)
-    set(NAME)
-    set(OPTIONS)
-    set(VERSION)
-    set(TYPE)
-    set(DEPENDENCIES)
-    set(REQUIREMENTS)
-    set(CPPUNITTEST_OPTIONS)
+    unset(NAME)
+    unset(OPTIONS)
+    unset(VERSION)
+    unset(TYPE)
+    unset(START)
+    unset(DEPENDENCIES)
+    unset(REQUIREMENTS)
+    unset(CPPUNITTEST_OPTIONS)
+    unset(UNIQUE)
+    unset(PLATFORM)
 
     include("${PROPERTIES_FILE}")
 endmacro()
@@ -530,15 +718,19 @@ macro(fwLoadProperties)
     loadProperties("Properties.cmake")
 
     string( TOUPPER "${TYPE}" TYPE )
-    
+
     if( TYPE STREQUAL "EXECUTABLE" )
         fwExec(${NAME} ${VERSION} ${OPTIONS})
     elseif( TYPE STREQUAL "LIBRARY" )
         fwLib(${NAME} ${VERSION} ${OPTIONS})
     elseif( TYPE STREQUAL "BUNDLE" )
+        set(${NAME}_TYPE "BUNDLE")
         fwBundle(${NAME} ${VERSION} ${OPTIONS})
     elseif( TYPE STREQUAL "TEST" )
         fwCppunitTest(${NAME} "${CPPUNITTEST_OPTIONS}" "${OPTIONS}")
+    elseif( TYPE STREQUAL "APP" )
+        set(${NAME}_TYPE "APP")
+        fwBundle(${NAME} ${VERSION} ${OPTIONS})
     endif()
 
     if(DEPENDENCIES)
@@ -582,88 +774,104 @@ macro(addProject PROJECT)
     unset(PROJECT_CACHE)
 endmacro()
 
-
-
-set(EXTERNAL_LIBRARIES CACHE PATH "External libraries location")
 if(EXTERNAL_LIBRARIES)
     list(APPEND CMAKE_PREFIX_PATH ${EXTERNAL_LIBRARIES})
     list(APPEND CMAKE_MODULE_PATH ${EXTERNAL_LIBRARIES})
+    list(APPEND CMAKE_FIND_ROOT_PATH ${EXTERNAL_LIBRARIES})
 
     file(GLOB LIB_CONFIGS ${EXTERNAL_LIBRARIES}/fw-*.cmake )
     foreach(LIB_CONFIG ${LIB_CONFIGS})
         message(STATUS "include : ${LIB_CONFIG}")
         include("${LIB_CONFIG}")
-    endforeach(LIB_CONFIG)
-endif(EXTERNAL_LIBRARIES)
+    endforeach()
+elseif(USE_SYSTEM_LIB)
+    list(APPEND CMAKE_PREFIX_PATH ${FWCMAKE_RESOURCE_PATH}/modules)
+    list(APPEND CMAKE_MODULE_PATH ${FWCMAKE_RESOURCE_PATH}/modules)
+    list(APPEND CMAKE_FIND_ROOT_PATH ${FWCMAKE_RESOURCE_PATH}/modules)
+    file(GLOB LIB_CONFIGS ${FWCMAKE_RESOURCE_PATH}/modules/fw-*.cmake )
+    foreach(LIB_CONFIG ${LIB_CONFIGS})
+        message(STATUS "include : ${LIB_CONFIG}")
+        include("${LIB_CONFIG}")
+    endforeach()
+endif()
 
 
-set(PROJECTS_TO_BUILD CACHE STRING 
+set(PROJECTS_TO_BUILD CACHE STRING
         "List of projects that will be configured for build.
         Leave empty to configure all projects"
     )
 
-set(PROJECTS_TO_INSTALL CACHE STRING 
+set(PROJECTS_TO_INSTALL CACHE STRING
         "List of projects for which the installation rules will be created."
     )
 
-
 file(GLOB_RECURSE PROJECTS_PROPERTIES */Properties.cmake)
 
-# Fix CMake find a bundle twice (once in ./pc == quilt's patches)
-foreach(PROPERTIES_FILE ${PROJECTS_PROPERTIES})
-	if(PROPERTIES_FILE MATCHES "(.*)/.pc/(.*)")
-		remove(PROJECTS_PROPERTIES ${PROPERTIES_FILE})
-	endif()
-endforeach()
+set(ADDITIONAL_PROJECTS CACHE PATH
+        "Paths to the additional projects"
+    )
+set(ADDITIONAL_PROJECTS_SOURCE_DIR "")
+if(ADDITIONAL_PROJECTS)
+    foreach(ADDITIONAL_PROJECT ${ADDITIONAL_PROJECTS})
+        file(GLOB_RECURSE ADDITIONAL_PROJECTS_PROPERTIES ${ADDITIONAL_PROJECT}/*/Properties.cmake)
+        list(APPEND PROJECTS_PROPERTIES ${ADDITIONAL_PROJECTS_PROPERTIES})
+        set(ADDITIONAL_PROJECTS_SOURCE_DIR "${ADDITIONAL_PROJECTS_SOURCE_DIR} ${ADDITIONAL_PROJECT}")
+    endforeach()
+endif()
 
+unset(PROJECT_LIST)
 foreach(PROPERTIES_FILE ${PROJECTS_PROPERTIES})
     get_filename_component(PROJECT_DIR ${PROPERTIES_FILE} PATH)
 
     loadProperties("${PROPERTIES_FILE}")
 
-    if(NOT NAME)
-        message(FATAL_ERROR "${PROPERTIES_FILE}: Project NAME can not be empty.")
+    # Check if project is compatible with the current platform
+    set(APPEND_PROJECT OFF)
+    if( NOT PLATFORM OR PLATFORM STREQUAL "ALL")
+        set(APPEND_PROJECT ON)
+    elseif(PLATFORM STREQUAL "DROID" AND ANDROID)
+        set(APPEND_PROJECT ON)
+    elseif(PLATFORM STREQUAL "DESKTOP" AND NOT ANDROID)
+        set(APPEND_PROJECT ON)
     endif()
 
-    list(FIND DEPENDENCIES ${NAME} DEP_LOOP)
-    if(DEP_LOOP GREATER -1)
-        message(FATAL_ERROR "${PROPERTIES_FILE}: A project can not be it's own dependency.")
-    endif()
+    if (APPEND_PROJECT)
 
-    list(FIND REQUIREMENTS ${NAME} REQ_LOOP)
-    if(REQ_LOOP GREATER -1)
-        message(FATAL_ERROR "${PROPERTIES_FILE}: A project can not be it's own requirement.")
-    endif()
+        if(NOT NAME)
+            message(FATAL_ERROR "${PROPERTIES_FILE}: Project NAME can not be empty.")
+        endif()
 
-    if(${NAME}_DIR)
-        message(FATAL_ERROR "${PROPERTIES_FILE}: A project NAME must be unique in the workspace. ${NAME} already defined there : ${${NAME}_DIR}")
-    endif()
+        list(FIND DEPENDENCIES ${NAME} DEP_LOOP)
+        if(DEP_LOOP GREATER -1)
+            message(FATAL_ERROR "${PROPERTIES_FILE}: A project can not be it's own dependency.")
+        endif()
 
-    set(${NAME}_DEPENDENCIES "${DEPENDENCIES}")
-    set(${NAME}_REQUIREMENTS "${REQUIREMENTS}")
-    set(${NAME}_VERSION "${VERSION}")
-    set(${NAME}_DIR "${PROJECT_DIR}")
+        list(FIND REQUIREMENTS ${NAME} REQ_LOOP)
+        if(REQ_LOOP GREATER -1)
+            message(FATAL_ERROR "${PROPERTIES_FILE}: A project can not be it's own requirement.")
+        endif()
 
-    LIST(APPEND PROJECT_LIST ${NAME})
+        if(${NAME}_DIR)
+            message(FATAL_ERROR "${PROPERTIES_FILE}: A project NAME must be unique in the workspace. ${NAME} already defined there : ${${NAME}_DIR}")
+        endif()
 
-endforeach()
+        set(${NAME}_DEPENDENCIES "${DEPENDENCIES}")
+        set(${NAME}_REQUIREMENTS "${REQUIREMENTS}")
+        set(${NAME}_VERSION "${VERSION}")
+        set(${NAME}_DIR "${PROJECT_DIR}")
 
-# Doxygen documentation
-include(${CMAKE_ROOT}/Modules/Documentation.cmake)
-option(BUILD_DOCUMENTATION "Build the doxygen documentation" OFF)
-if(BUILD_DOCUMENTATION)
-    find_package(Doxygen)
-    if(DOXYGEN_FOUND)
-        set(INCLUDE_DIRS)
-        foreach(PROJECT ${PROJECT_LIST})
-            set(INCLUDE_DIRS "${INCLUDE_DIRS} ${${PROJECT}_DIR}/include")
-        endforeach(PROJECT)
-        configure_file(${FWCMAKE_RESOURCE_PATH}/doxygen/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Documentation/Doxygen/Doxyfile @ONLY)
-        add_custom_target(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/documentation/doxygen/doxyfile
-            WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT
-            "Generating API documentation with Doxygen" VERBATIM)
-    endif(DOXYGEN_FOUND)
-endif(BUILD_DOCUMENTATION)
+        if(TYPE STREQUAL "APP")
+            set(${NAME}_UNIQUE "${UNIQUE}")
+        endif()
+
+        if( TYPE STREQUAL "BUNDLE" OR TYPE STREQUAL "APP" AND START)
+            set(${NAME}_START "${START}")
+        endif()
+
+        list(APPEND PROJECT_LIST ${NAME})
+    endif()
+
+endforeach()
 
 if(PROJECTS_TO_BUILD)
     set(PROJECT_LIST ${PROJECTS_TO_BUILD})
@@ -673,27 +881,70 @@ endif()
 
 if(BUILD_TESTS)
     findTests("${PROJECT_LIST}" PROJECT_TESTS)
-    set(PROJECT_LIST ${PROJECT_LIST};${PROJECT_TESTS})
+    list(APPEND PROJECT_LIST ${PROJECT_TESTS})
+else()
+    findTests("${PROJECT_LIST}" PROJECT_TESTS)
+    if(PROJECT_TESTS)
+        list(REMOVE_ITEM PROJECT_LIST ${PROJECT_TESTS})
+    endif()
 endif()
 
-findAllDependencies("${PROJECTS_TO_INSTALL}" PROJECTS_TO_INSTALL)
-
 if(PROJECTS_TO_INSTALL)
     message(STATUS "Installation rules will be created for : ${PROJECTS_TO_INSTALL}")
+    findAllDependencies("${PROJECTS_TO_INSTALL}" PROJECTS_TO_INSTALL)
+
+    foreach(PROJECT ${PROJECTS_TO_INSTALL})
+        list(FIND PROJECT_LIST "${PROJECT}" PROJECT_FOUND)
+        if(PROJECT_FOUND GREATER -1)
+            set(${PROJECT}_INSTALL 1)
+        else()
+            message(WARNING "Project ${PROJECT} not found, will not be installed.")
+            unset(${PROJECT}_INSTALL)
+        endif()
+    endforeach()
+    unset(PROJECT_FOUND)
 endif()
 
-foreach(PROJECT ${PROJECTS_TO_INSTALL})
-    list(FIND PROJECT_LIST "${PROJECT}" PROJECT_FOUND)
-    if(PROJECT_FOUND GREATER -1)
-        set(${PROJECT}_INSTALL 1)
-    else()
-        message(WARNING "Project ${PROJECT} not found, will not be installed.")
-        unset(${PROJECT}_INSTALL)
-    endif()
-endforeach()
-unset(PROJECT_FOUND)
+if(EXTERNAL_LIBRARIES OR USE_SYSTEM_LIB)
+    set(APP_TO_BUILD)
+    foreach(PROJECT ${PROJECT_LIST})
+        addProject(${PROJECT})
+        if(${PROJECT}_TYPE STREQUAL "APP")
+            if(NOT EXISTS "${${PROJECT}_DIR}/rc/profile.xml" )
+                profile_setup("${PROJECT}")
+            endif()
+        elseif(${PROJECT}_TYPE STREQUAL "BUNDLE")
+            if(NOT EXISTS "${${PROJECT}_DIR}/rc/plugin.xml" )
+                plugin_setup("${PROJECT}")
+            endif()
+        endif()
+    endforeach()
+else()
+    message("EXTERNAL_LIBRARIES variable is missing. Please, specify external libraries location to genereate CMake projects.")
+endif()
 
-foreach(PROJECT ${PROJECT_LIST})
-    addProject(${PROJECT})
-endforeach()
+# Doxygen documentation
+option(BUILD_DOCUMENTATION "Build the doxygen documentation" OFF)
+if(BUILD_DOCUMENTATION)
+    include(${FWCMAKE_RESOURCE_PATH}doxygen/doxygen_generator.cmake)
+    doxygenGenerator(${PROJECT_LIST})
+endif()
+
+# Eclipse project
+option(ECLIPSE_PROJECT "Generate eclipse project" OFF)
+if(ECLIPSE_PROJECT)
+    include(${FWCMAKE_RESOURCE_PATH}eclipse/eclipse_generator.cmake)
+    eclipseGenerator(${PROJECT_LIST})
+endif()
 
+# command new service
+add_custom_target(newService
+        COMMAND ${CMAKE_COMMAND} -DSOURCEDIR:VAR=${CMAKE_CURRENT_SOURCE_DIR}
+                                 -DADDITIONALDIR="${ADDITIONAL_PROJECTS}"
+                                 -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/build/cmake_newService.cmake)
+
+# command new bundle
+add_custom_target(newBundle
+        COMMAND ${CMAKE_COMMAND} -DSOURCEDIR:VAR=${CMAKE_CURRENT_SOURCE_DIR}
+                                 -DADDITIONALDIR="${ADDITIONAL_PROJECTS}"
+                                 -P ${CMAKE_CURRENT_SOURCE_DIR}/CMake/build/cmake_newBundle.cmake)
diff --git a/Apps/Tuto01Basic/COPYING b/LICENSE/COPYING
similarity index 100%
rename from Apps/Tuto01Basic/COPYING
rename to LICENSE/COPYING
diff --git a/Apps/Tuto01Basic/COPYING.LESSER b/LICENSE/COPYING.LESSER
similarity index 100%
rename from Apps/Tuto01Basic/COPYING.LESSER
rename to LICENSE/COPYING.LESSER
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..b0c9534
--- /dev/null
+++ b/README.md
@@ -0,0 +1,39 @@
+[![Build Status](https://travis-ci.org/fw4spl-org/fw4spl.svg?branch=fw4spl_0.11.0)](https://travis-ci.org/fw4spl-org/fw4spl)
+
+Description
+===========
+
+**FW4SPL** is a framework for fast and easy creation of applications, mainly in the medical imaging field.
+It includes various features such as 2D and 3D digital image processing, visualization, augmented reality and medical interaction simulation. It runs on many different environments (Windows, linux, OSX), is written in C++, and features rapid interface design using XML files. 
+It is freely available under open source license (LGPL).
+
+See [documentation](http://fw4spl-doc.readthedocs.org/) for more details.
+
+Applications
+============
+
+*FW4SPL* comes with **VRRender**, a medical image and segmentation viewer. It supports many format including DICOM, vtk, inr, etc...
+
+Lots of **tutorials** and **examples** can also be found in the *Samples/* directory. The tutorials can help you to learn smoothly how to use *FW4SPL*, detailed steps are described [there](http://fw4spl-doc.readthedocs.io/en/fw4spl_0.11.0/Tutorials/index.html).
+
+Install
+=======
+
+See how to install fw4spl [here](http://fw4spl-doc.readthedocs.org/en/fw4spl_0.11.0/Installation/index.html)
+
+Documentation
+=============
+
+* **documentation**: http://fw4spl-doc.readthedocs.org/
+* **tutorials**: http://fw4spl-doc.readthedocs.io/en/fw4spl_0.11.0/Tutorials/index.html
+* **doxygen**: http://fw4spl-org.github.io/fw4spl-dox/
+* **blog**: http://fw4spl-org.github.io/fw4spl-blog/
+
+Annex
+=====
+
+* [fw4spl-deps](https://github.com/fw4spl-org/fw4spl-deps): contains the scripts to compile the external libraries used by fw4spl (Boost, VTK, ITK, Qt, ...)
+* [fw4spl-ar](https://github.com/fw4spl-org/fw4spl-ar): fw4spl repository that contains additional functionalities for Augmented Reality
+* [fw4spl-droid](https://github.com/fw4spl-org/fw4spl-droid): fw4spl repository that brings Android support.
+* [fw4spl-ogre](https://github.com/fw4spl-org/fw4spl-ogre): fw4spl repository that offers a new 3D rendering backend using [Ogre3D](http://www.ogre3d.org/).
+* [fw4spl community](https://github.com/fw4spl-org): contains various repositories associated with fw4spl (extensions, dependencies, ...)
diff --git a/Apps/Tuto01Basic/CMakeLists.txt b/Samples/Examples/Ex01VolumeRendering/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto01Basic/CMakeLists.txt
rename to Samples/Examples/Ex01VolumeRendering/CMakeLists.txt
diff --git a/Samples/Examples/Ex01VolumeRendering/Properties.cmake b/Samples/Examples/Ex01VolumeRendering/Properties.cmake
new file mode 100644
index 0000000..a4cd2e1
--- /dev/null
+++ b/Samples/Examples/Ex01VolumeRendering/Properties.cmake
@@ -0,0 +1,32 @@
+
+set( NAME Ex01VolumeRendering )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( UNIQUE TRUE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    ctrlCamp
+    ctrlSelection
+    gui
+    guiQt
+    ioData
+    ioAtoms
+    ioVTK
+    io
+    servicesReg
+    uiVisuQt
+    uiImageQt
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    visuVTKVRAdaptor
+    fwlauncher
+    appXml2
+    scene2D
+    uiTF
+    preferences
+)
+
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES Ex01VolumeRendering)
diff --git a/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml b/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml
new file mode 100644
index 0000000..a7963d5
--- /dev/null
+++ b/Samples/Examples/Ex01VolumeRendering/rc/plugin.xml
@@ -0,0 +1,480 @@
+<!--
+                 graphical application overview.
+
+  =========================================================
+  |                   menuBar                             |
+  =========================================================
+  |                           |         |     TFEditor    |
+  |                           |         |=================|
+  |      genericScene1        | negato1 |                 |
+  |                           |         | Scene2D_Shutter |
+  |                           |         |                 |
+  =========================================================
+  |                           |         |                 |
+  |      genericScene2        |         |                 |
+  |                           | negato2 |     Scene2D     |
+  |===========================|         |================ |
+  | multiView_scene1_bottom   |         |  windowLevel    |
+  =========================================================
+Comment: Name inside the drawing are the uid of the service defined below.
+
+ This application allows to load an medical image and displays it:
+  - The genericscene1 displays the image with volume rendering by using the transfer function defined in TFEditor.
+  - The negato1 displays the image with a 2D multi-planar rendering by using the transfer function defined in TFEditor.
+
+  - The genericscene2 displays the image with a 3D multi-planar rendering by using the default transfer function (CT-GreyLevel).
+  - The negato2 displays the image with a 2D multi-planar rendering by using the default transfer function (CT-GreyLevel).
+
+ It also displays in Scene2D_Shutter the transfer function selected in TFEditor. Scene2D displays a range of the transfer function defined
+ by the gray range in Scene2D_Shutter.
+
+ -->
+
+<plugin id="Ex01VolumeRendering" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+    <requirement id="scene2D" />
+
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>Ex01VolumeRendering</id>
+        <config>
+
+            <object uid="imageUID" type="::fwData::Image" />
+            <object uid="TFSet" type="::fwData::Composite" src="deferred" />
+            <object uid="TFSelectionsUID" type="::fwData::Composite" />
+            <object uid="Viewport" type="::scene2D::data::Viewport" />
+
+            <!--  Service entrance point for interface creation -->
+            <service uid="IHM" type="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>Ex01VolumeRendering</name>
+                        <icon>@BUNDLE_PREFIX@/Ex01VolumeRendering_0-1/tuto.ico</icon>
+                    </frame>
+                    <menuBar />
+                </gui>
+                <registry>
+                    <menuBar sid="menuBar" start="yes" />
+                    <view sid="multiView" start="yes" />
+                </registry>
+            </service>
+            <service uid="menuBar" type="::gui::aspect::SDefaultMenuBar" >
+                <gui>
+                    <layout>
+                        <menu name="File" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menu sid="menu_File" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="menu_File" type="::gui::aspect::SDefaultMenu" >
+                <gui>
+                    <layout>
+                        <menuItem name="Open file" shortcut="Ctrl+O" />
+                        <menuItem name="Save file" shortcut="Ctrl+S" />
+                        <separator />
+                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="action_openFile" start="yes" />
+                    <menuItem sid="action_saveFile" start="yes" />
+                    <menuItem sid="action_quit" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="action_openFile" type="::gui::action::SStarter">
+                <start uid="readerPathFile" />
+            </service>
+
+            <service uid="action_saveFile" type="::gui::action::SStarter">
+                <start uid="writerPathFile" />
+            </service>
+
+            <service uid="action_quit" type="::gui::action::SQuit" />
+
+            <service uid="multiView" type="::gui::view::SDefaultView" >
+                <gui>
+                    <layout type="::fwGui::CardinalLayoutManager" >
+                        <view align="center"  />
+                        <view align="right" caption="Parameters" minWidth="400" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="leftMultiView" start="yes" />
+                    <view sid="rightMultiView" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="leftMultiView" type="::gui::view::SDefaultView" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="vertical" />
+                        <view proportion ="1" />
+                        <view proportion ="1" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="leftUpperMultiView" start="yes" />
+                    <view sid="leftBottomMultiView" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="leftUpperMultiView" type="::gui::view::SDefaultView" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="horizontal" />
+                        <view proportion ="1" caption="Volume rendering" />
+                        <view proportion ="1" caption="Negato 1" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="genericScene1" start="yes" />
+                    <view sid="negato1" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="leftBottomMultiView" type="::gui::view::SDefaultView" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="horizontal" />
+                        <view proportion ="1" caption="Negato 3D" />
+                        <view proportion ="1" caption="Negato 2"/>
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="multiView_scene1" start="yes" />
+                    <view sid="negato2" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="multiView_scene1" type="::gui::view::SDefaultView" >
+                <gui>
+                    <layout type="::fwGui::CardinalLayoutManager" >
+                        <view align="center" />
+                        <view align="bottom" minWidth="200" minHeight="30" resizable="no" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="genericScene2" start="yes" />
+                    <view sid="multiView_scene1_bottom" start="yes" />
+                </registry>
+            </service>
+            <service uid="multiView_scene1_bottom" type="::gui::view::SDefaultView">
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="horizontal" />
+                        <view proportion="0" minWidth="30" />
+                        <view proportion="0" minWidth="50" />
+                        <view proportion="1" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="sliceListEditor" start="yes" />
+                    <view sid="showScanEditor" start="yes" />
+                    <view sid="sliderIndexEditor" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="rightMultiView" type="::gui::view::SDefaultView" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="vertical" />
+                        <view proportion ="0" />
+                        <view proportion="0" />
+                        <view proportion="0" />
+                        <view proportion ="0" />
+                    </layout>
+
+                </gui>
+                <registry>
+                    <view sid="TFEditor" start="no" />
+                    <view sid="Scene2D_Shutter" start="yes" />
+                    <view sid="Scene2D" start="yes" />
+                    <view sid="windowLevel" start="yes" />
+                </registry>
+            </service>
+
+            <!-- Image reader/writer -->
+
+            <service uid="readerPathFile" type="::uiIO::editor::SIOSelector">
+                <in key="image" uid="imageUID" />
+                <type mode="reader" />
+            </service>
+
+            <service uid="writerPathFile" type="::uiIO::editor::SIOSelector">
+                <inout key="image" uid="imageUID" />
+                <type mode="writer" />
+            </service>
+
+            <service uid="windowLevel" type="::uiImage::WindowLevel" >
+                <inout key="image" uid="imageUID" autoConnect="yes"/>
+                <inout key="TFSelections" uid="TFSelectionsUID" />
+                <config selectedTFKey="SelectedTF" />
+            </service>
+
+            <service uid="sliceListEditor" type="::guiQt::editor::SSelectionMenuButton">
+                <toolTip>Manage slice visibility</toolTip>
+                <selected>3</selected>
+                <items>
+                    <item text="One slice" value="1" />
+                    <item text="three slices" value="3" />
+                </items>
+            </service>
+
+            <service uid="showScanEditor" type="::guiQt::editor::SSignalButton">
+                <config>
+                    <checkable>true</checkable>
+                    <icon>@BUNDLE_PREFIX@/media_0-1/icons/sliceHide.png</icon>
+                    <icon2>@BUNDLE_PREFIX@/media_0-1/icons/sliceShow.png</icon2>
+                    <iconWidth>40</iconWidth>
+                    <iconHeight>16</iconHeight>
+                    <checked>true</checked>
+                </config>
+            </service>
+
+            <service uid="sliderIndexEditor" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <sliceIndex>axial</sliceIndex>
+            </service>
+
+            <!-- This manager adds/removes a field (m_transferFunctionCompositeId) on Image (image) -->
+            <service uid="fieldMgr" type="::gui::action::SPushField" >
+                <inout key="source" uid="imageUID" />
+                <out key="destination" uid="TFSet" />
+                <push field="m_transferFunctionCompositeId" />
+            </service>
+
+            <service uid="TFEditor" type="::uiTF::TransferFunctionEditor">
+                <inout key="transferFunctions" uid="TFSet" />
+                <inout key="TFSelections" uid="TFSelectionsUID" />
+                <config selectedTFKey="SelectedTF" />
+            </service>
+
+            <!-- This generic scene (genericScene1) uses the transfer function stores with key = SelectedTF in TFSelections -->
+            <service uid="genericScene1" type="::fwRenderVTK::SRender" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <inout key="TFSelections" uid="TFSelectionsUID" />
+                <scene>
+                    <picker id="picker" vtkclass="fwVtkCellPicker" />
+
+                    <renderer id="default" background="0.0" />
+
+                    <!-- Adaptor to visualize the medical image (image) with volume rendering. -->
+                    <adaptor id="vRAdaptor" class="::visuVTKVRAdaptor::Volume" objectId="image">
+                        <config renderer="default" selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                    </adaptor>
+
+                    <adaptor id="ImageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                        <config renderer="default" picker="picker" text="" color="#FFFFFF" selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                    </adaptor>
+
+                </scene>
+            </service>
+
+            <!-- This generic scene (genericScene2) uses the default transfer function (CT-GreyLevel) -->
+            <service uid="genericScene2" type="::fwRenderVTK::SRender" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <scene>
+                    <picker id="picker" vtkclass="fwVtkCellPicker" />
+
+                    <renderer id="default" background="0.0" />
+
+                    <!-- Adaptor to visualize the medical image (image) in a 3D multi-planar rendering -->
+                    <adaptor id="MPRNegato3D" uid="MPRNegatoScene3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                        <config renderer="default" picker="picker" mode="3D" slices="3" sliceIndex="axial" />
+                    </adaptor>
+
+                    <adaptor id="ImageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                        <config renderer="default" picker="picker" text="" color="#FFFFFF" />
+                    </adaptor>
+
+                    <adaptor id="cameraScene3DID" class="::visuVTKAdaptor::Medical3DCamera" objectId="image">
+                        <config renderer="default" sliceIndex="axial" />
+                    </adaptor>
+
+                    <connect waitForKey="image">
+                        <signal>showScanEditor/toggled</signal>
+                        <slot>MPRNegatoScene3D/showSlice</slot>
+                    </connect>
+
+                    <connect waitForKey="image">
+                        <signal>sliceListEditor/selected</signal>
+                        <slot>MPRNegatoScene3D/updateSliceMode</slot>
+                    </connect>
+
+                </scene>
+            </service>
+
+            <!-- This negato (negato1) uses the transfer function stores with key = SelectedTF in TFSelections -->
+            <service uid="negato1" type="::fwRenderVTK::SRender" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <inout key="TFSelections" uid="TFSelectionsUID" />
+                <scene>
+                    <picker id="picker" vtkclass="fwVtkCellPicker" />
+
+                    <renderer id="default" background="0.0" />
+
+                    <adaptor id="Interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                        <config renderer="default" style="InteractorStyle2DForNegato" />
+                    </adaptor>
+
+                    <adaptor id="MPRNegato2D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                        <config renderer="default" picker="picker" mode="2d" slices="1" sliceIndex="axial" selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                    </adaptor>
+
+                    <adaptor id="ImageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                        <config renderer="default" picker="picker" text="" color="#FFFFFF" selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                    </adaptor>
+
+                </scene>
+            </service>
+
+            <!-- This negato (negato2) uses the default transfer function (CT-GreyLevel) -->
+            <service uid="negato2" type="::fwRenderVTK::SRender" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <scene>
+                    <picker id="picker" vtkclass="fwVtkCellPicker" />
+
+                    <renderer id="default" background="0.0" />
+
+                    <adaptor id="Interactor4Negato" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                        <config renderer="default" style="InteractorStyle2DForNegato" />
+                    </adaptor>
+
+                    <adaptor id="MPRNegato2D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                        <config renderer="default" picker="picker" mode="2d" slices="1" sliceIndex="axial" />
+                    </adaptor>
+
+                    <adaptor id="ImageText" class="::visuVTKAdaptor::ImageText" objectId="image">
+                        <config renderer="default" picker="picker" text="" color="#FFFFFF" />
+                    </adaptor>
+
+                </scene>
+            </service>
+
+
+            <!-- Declaration of the 2D scene service uses to create the TF editor which draw the range of transfer function define by the Scene2D_Shutter -->
+            <service uid="Scene2D" type="::scene2D::Render" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <inout key="viewport" uid="Viewport" />
+                <inout key="TFSelections" uid="TFSelectionsUID" />
+                <scene>
+
+                    <scene x="-1100" y="-1.1" width="2100" height="1.2" antialiasing="true" />
+
+                    <viewport id="view1" x="-500" y="-1.1" width="500" height="1.2" />
+
+                    <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                    <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
+                    <axis id="axeHistogramY" origin="0.0" scale="-0.0000025" scaleType="LINEAR" />
+
+                    <adaptor id="grid1" class="::scene2D::adaptor::Grid2D" objectId="self">
+                        <config xMin="-1000" xMax="1000" yMin="0" yMax="1" xSpacing="100" ySpacing="0.1" opacity="0.4" color="lightGray" xAxis="xAxis"
+                            yAxis="yAxis" zValue="2" viewportUID="viewport" />
+                    </adaptor>
+
+                    <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="image">
+                        <config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis"
+                            yAxis="yAxis" zValue="5" pointSize="12" viewportUID="viewport"
+                            selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                    </adaptor>
+
+                    <adaptor id="axisLeft" class="::scene2D::adaptor::Axis" objectId="self">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="4" color="cyan" unit="%" align="left" min="0" max="1" step="0.1" viewportUID="viewport" />
+                    </adaptor>
+
+                    <adaptor id="scaleValuesBottom" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                        <config min="-900" max="1500" interval="100" fontSize="6" align="bottom" unit="Hfd." viewportUID="viewport" color="darkGray" xAxis="xAxis" yAxis="yAxis"
+                            zValue="10" />
+                    </adaptor>
+
+                    <adaptor id="scaleValuesLeft" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                        <config min="0.0" max="1.0" interval="0.1" fontSize="6" align="left" unit="%" viewportUID="viewport" color="cyan" xAxis="xAxis" yAxis="yAxis" zValue="10" />
+                    </adaptor>
+
+                    <adaptor id="scaleValuesTop" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                        <config min="-900" max="1500" interval="100" fontSize="6" align="top" unit="Hfd." viewportUID="viewport" color="red" xAxis="xAxis" yAxis="yAxis" zValue="10" />
+                    </adaptor>
+
+                    <adaptor id="scaleValuesRight" class="::scene2D::adaptor::ScaleValues" objectId="self">
+                        <config min="0.0" max="1.0" interval="0.1" fontSize="6" align="right" unit="%" viewportUID="viewport" color="yellow" xAxis="xAxis" yAxis="yAxis" zValue="10" />
+                    </adaptor>
+
+                    <adaptor id="axisTestBottom" class="::scene2D::adaptor::Axis" objectId="self">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="11" min="-900.0" max="1500" align="bottom" color="red" tickSize="5" interval="100" viewportUID="viewport" />
+                    </adaptor>
+
+                    <adaptor id="axisTestTop" class="::scene2D::adaptor::Axis" objectId="self">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="11" min="-900.0" max="1500" align="top" color="green" tickSize="5" interval="100" viewportUID="viewport" />
+                    </adaptor>
+
+                    <adaptor id="axisTestLeft" class="::scene2D::adaptor::Axis" objectId="self">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="11" min="0" max="1.0" align="left" color="cyan" tickSize="5" interval="0.1" viewportUID="viewport" />
+                    </adaptor>
+
+                    <adaptor id="axisTestRight" class="::scene2D::adaptor::Axis" objectId="self">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="12" min="0" max="1.0" align="right" color="yellow" tickSize="5" interval="0.1" viewportUID="viewport" />
+                    </adaptor>
+
+                    <adaptor id="viewportUpdater" class="::scene2D::adaptor::ViewportUpdater" objectId="viewport">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="9" />
+                    </adaptor>
+
+                </scene>
+
+            </service>
+
+            <!-- Declaration of the shutter service uses to focus a range of the transfer function which will be draw by the Scene2D service. -->
+            <service uid="Scene2D_Shutter" type="::scene2D::Render" autoConnect="yes" >
+                <in key="image" uid="imageUID" />
+                <inout key="viewport" uid="Viewport" />
+                <inout key="TFSelections" uid="TFSelectionsUID" />
+                <scene>
+
+                    <scene x="-1100" y="-1.1" width="2100" height="1.2" />
+                    <viewport id="view1" x="-1100" y="-1.1" width="2100" height="1.2" />
+
+                    <axis id="xAxis" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                    <axis id="yAxis" origin="0.0" scale="-1.0" scaleType="LINEAR" />
+
+                    <adaptor id="grid1" class="::scene2D::adaptor::Grid2D" objectId="self">
+                        <config xMin="-1100" xMax="3000" yMin="0.1" yMax="1.7" xSpacing="500" ySpacing="0.2" color="lightGray" xAxis="xAxis" yAxis="yAxis"
+                            zValue="1" viewportUID="viewport"/>
+                    </adaptor>
+
+                    <axis id="axeHistogramY" origin="0.0" scale="-0.000005" scaleType="LINEAR" />
+
+                    <adaptor id="tf2" class="::scene2D::adaptor::TransferFunction" objectId="image">
+                        <config lineColor="lightGray" circleColor="lightGray" xAxis="xAxis"
+                            yAxis="yAxis" zValue="5" pointSize="12" viewportUID="viewport"
+                            selectedTFKey="SelectedTF" tfSelectionFwID="TFSelections" />
+                    </adaptor>
+
+                    <adaptor id="viewportRangeSelector" class="::scene2D::adaptor::ViewportRangeSelector" objectId="viewport">
+                        <config xAxis="xAxis" yAxis="yAxis" zValue="3" initialWidth="1000" initialPos="-100" />
+                    </adaptor>
+                </scene>
+            </service>
+
+            <connect>
+                <signal>imageUID/modified</signal>
+                <slot>fieldMgr/update</slot>
+            </connect>
+
+            <connect>
+                <signal>showScanEditor/toggled</signal>
+                <slot>sliceListEditor/setEnabled</slot>
+            </connect>
+
+            <start uid="fieldMgr" />
+            <start uid="IHM" />
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto02DataServiceBasic/rc/tuto.ico b/Samples/Examples/Ex01VolumeRendering/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto02DataServiceBasic/rc/tuto.ico
rename to Samples/Examples/Ex01VolumeRendering/rc/tuto.ico
diff --git a/Apps/Tuto02DataServiceBasic/CMakeLists.txt b/Samples/Examples/Ex02ImageMix/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto02DataServiceBasic/CMakeLists.txt
rename to Samples/Examples/Ex02ImageMix/CMakeLists.txt
diff --git a/Samples/Examples/Ex02ImageMix/Properties.cmake b/Samples/Examples/Ex02ImageMix/Properties.cmake
new file mode 100644
index 0000000..66372ae
--- /dev/null
+++ b/Samples/Examples/Ex02ImageMix/Properties.cmake
@@ -0,0 +1,26 @@
+
+set( NAME Ex02ImageMix )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( UNIQUE TRUE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    ctrlSelection
+    gui
+    guiQt
+    ioData
+    ioVTK
+    io
+    servicesReg
+    uiVisuQt
+    uiImageQt
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Ex02ImageMix)
diff --git a/Samples/Examples/Ex02ImageMix/rc/plugin.xml b/Samples/Examples/Ex02ImageMix/rc/plugin.xml
new file mode 100644
index 0000000..65c4068
--- /dev/null
+++ b/Samples/Examples/Ex02ImageMix/rc/plugin.xml
@@ -0,0 +1,376 @@
+<plugin id="Ex02ImageMix" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Ex02ImageMix</id>
+        <config>
+
+            <object type="::fwData::Composite">
+                <service uid="MainFrame" impl="::gui::frame::SDefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
+                    <gui>
+                        <frame>
+                            <name>Ex02ImageMix</name>
+                            <icon>@BUNDLE_PREFIX@/Ex02ImageMix_0-1/tuto.ico</icon>
+                            <minSize width="800" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="MenuBar" start="yes" />
+                        <view sid="mainView" start="yes" />
+                    </registry>
+                </service>
+                <service uid="MenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menu_File" start="yes" />
+                    </registry>
+                </service>
+                <service uid="mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="left" />
+                            <view align="center" />
+                            <view align="right" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="editorsView" start="yes" />
+                        <view sid="blendSceneView" start="yes" />
+                        <view sid="imagesView" start="yes" />
+                    </registry>
+                </service>
+                <service uid="editorsView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view proportion="0" />
+                            <view proportion="0" />
+                            <spacer/>
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="bgImgEditorsView" />
+                        <view sid="frontImgEditorsView" />
+                    </registry>
+                </service>
+
+                <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open Background Image" shortcut="Ctrl+O" />
+                            <menuItem name="Open Front Image" shortcut="Ctrl+I" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_openBackgroundFile" start="yes" />
+                        <menuItem sid="action_openFrontFile" start="yes" />
+                        <menuItem sid="action_quit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="action_openBackgroundFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="readerBackgroundImage" />
+                </service>
+                <service uid="action_openFrontFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="readerFrontImage" />
+                </service>
+                <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
+
+                <service uid="imagesView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view proportion="1" minWidth="300" />
+                            <view proportion="1" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="BgImgGenericScene" start="yes" />
+                        <view sid="FrontImgGenericScene" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="blendSceneView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view proportion="1" />
+                            <view proportion="0" minHeight="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="blendGenericScene" start="yes" />
+                        <view sid="blendSceneBottomView" start="yes" />
+                    </registry>
+                </service>
+
+
+                <service uid="blendSceneBottomView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="1" />
+                            <view proportion="0" minWidth="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="sliderIndexEditor" start="no" />
+                        <view sid="snapshotBlendSceneEditor" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="snapshotBlendSceneEditor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no"/>
+
+                <!-- backgroundImage description -->
+                <item key="backgroundImage">
+                    <object uid="backgroundImageUID" type="::fwData::Image">
+                        <service uid="readerBackgroundImage" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                            <type mode="reader" />
+                        </service>
+                    </object>
+                </item>
+
+                <!-- frontImage description -->
+                <item key="frontImage">
+                    <object uid="frontImageUID" type="::fwData::Image">
+                        <service uid="readerFrontImage" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                            <type mode="reader" />
+                        </service>
+                    </object>
+                </item>
+
+                <!-- CompositeVisu description -->
+                <item key="compositeVisu">
+                    <object uid="compositeVisu" type="::fwData::Composite">
+
+                        <service uid="updaterBackImgUID" impl="::ctrlSelection::updater::SObjFromUid" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
+                            <uid>backgroundImageUID</uid>
+                            <compositeKey>backgroundImage</compositeKey>
+                        </service>
+                        <service uid="updaterFrontImgUID" impl="::ctrlSelection::updater::SObjFromUid" type="::ctrlSelection::IUpdaterSrv" autoConnect="no">
+                            <uid>frontImageUID</uid>
+                            <compositeKey>frontImage</compositeKey>
+                        </service>
+
+                        <!-- Manager to start/stop/swap services when background/front images are added/deleted/swapped -->
+                        <service uid="manager" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
+                            <mode type="stop" />
+                            <config>
+                                <object id="backgroundImage" type="::fwData::Image">
+
+                                    <service uid="bgImgEditorsView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                                        <gui>
+                                            <layout type="::fwGui::LineLayoutManager">
+                                                <orientation value="vertical" />
+                                                <view proportion="0" caption="[background image] Pixel info" />
+                                                <view proportion="0" caption="[background image] Window Level" />
+                                            </layout>
+                                        </gui>
+                                        <registry>
+                                            <view sid="imageInfo" />
+                                            <view sid="windowLevel" />
+                                        </registry>
+                                    </service>
+                                    <!-- This service convert a simple fwData::Image to medical Image -->
+                                    <service uid="medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
+
+                                    <service uid="sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                                        <sliceIndex>axial</sliceIndex>
+                                    </service>
+
+                                    <!-- Editors of background image -->
+                                    <service uid="imageInfo" type="::gui::editor::IEditor" impl="::uiImage::ImageInfo" autoConnect="yes" />
+                                    <service uid="windowLevel" type="::gui::editor::IEditor" impl="::uiImage::WindowLevel" autoConnect="yes">
+                                        <config selectedTFKey="BgSelectedTF" tfSelectionFwID="TFSelections" />
+                                    </service>
+
+                                    <proxy channel="interaction_channel">
+                                        <slot>imageInfo/getInteraction</slot>
+                                    </proxy>
+                                </object>
+
+                                <object id="frontImage" type="::fwData::Image">
+                                    <service uid="frontImgEditorsView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                                        <gui>
+                                            <layout type="::fwGui::LineLayoutManager">
+                                                <orientation value="vertical" />
+                                                <view proportion="0" caption="[front image] Pixel info" />
+                                                <view proportion="0" caption="[front image] Image transparency" />
+                                                <view proportion="0" caption="[front image] Window Level" />
+                                            </layout>
+                                        </gui>
+                                        <registry>
+                                            <view sid="imageInfo2" />
+                                            <view sid="imageTransparency2" />
+                                            <view sid="windowLevel2" />
+                                        </registry>
+                                    </service>
+                                    <!-- This service convert a simple fwData::Image to medical Image -->
+                                    <service uid="medicalImageConverter2" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
+
+                                    <!-- Editors of front image -->
+                                    <service uid="imageInfo2" type="::gui::editor::IEditor" impl="::uiImage::ImageInfo" autoConnect="yes" />
+                                    <service uid="imageTransparency2" type="::gui::editor::IEditor" impl="::uiImage::ImageTransparency" autoConnect="yes">
+                                        <shortcut value="V" />
+                                    </service>
+                                    <service uid="windowLevel2" type="::gui::editor::IEditor" impl="::uiImage::WindowLevel" autoConnect="yes" >
+                                         <config selectedTFKey="FrontSelectedTF" tfSelectionFwID="TFSelections" />
+                                    </service>
+
+                                    <!-- Service to forward signal from backgroundImage to front image -->
+                                    <service uid="forwarderMsg" impl="::ctrlSelection::wrapper::SImageSignalForwarder" type="::ctrlSelection::IWrapperSrv" autoConnect="no">
+                                        <fromKey>compositeVisu[backgroundImage]</fromKey>
+                                        <forward>sliceIndexModified</forward>
+                                        <forward>sliceTypeModified</forward>
+                                    </service>
+
+                                    <proxy channel="interaction_channel2">
+                                        <slot>imageInfo2/getInteraction</slot>
+                                    </proxy>
+
+                                </object>
+
+                            </config>
+                        </service>
+
+                        <!-- Generic scene to show merging of backgroung and front images -->
+                        <service uid="blendGenericScene" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                                <vtkObject id="imageBlend" class="vtkImageBlend" />
+                                <renderer id="default" background="0.0" />
+
+                                <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="backgroundImage">
+                                    <config renderer="default" picker="picker" mode="2D" slices="1" sliceIndex="axial" vtkimagesource="imageBlend" />
+                                </adaptor>
+                                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                                </adaptor>
+                                <adaptor id="bgImagePicker" uid="bgImagePickerUID" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="backgroundImage">
+                                    <config renderer="default" picker="picker" />
+                                </adaptor>
+                                <adaptor id="frontImagePicker" uid="frontImagePickerUID" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="frontImage">
+                                    <config renderer="default" picker="picker" />
+                                </adaptor>
+                                <adaptor id="snapshot" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                                    <config renderer="default" />
+                                </adaptor>
+
+                                <!-- Adaptor to show background and front image merge in the same view. -->
+                                <adaptor id="imagesBlendAdaptor" class="::visuVTKAdaptor::ImagesBlend" objectId="self">
+                                    <config vtkimageregister="imageBlend">
+                                        <image objectId="backgroundImage" opacity="1.0" tfalpha="no"
+                                            selectedTFKey="BgSelectedTF" tfSelectionFwID="TFSelections" />
+                                        <image objectId="frontImage" opacity="1.0" tfalpha="yes"
+                                            selectedTFKey="FrontSelectedTF" tfSelectionFwID="TFSelections" />
+                                    </config>
+                                </adaptor>
+
+                                <!-- Adaptor to show the red cross and images pixel values informations in scene top left. -->
+                                <adaptor id="imagesProbeCursor" class="::visuVTKAdaptor::ImagesProbeCursor" objectId="self">
+                                    <config renderer="default" picker="picker">
+                                        <image objectId="backgroundImage" name="background" />
+                                        <image objectId="frontImage" name="front" />
+                                    </config>
+                                </adaptor>
+
+                                <connect>
+                                    <signal>snapshotBlendSceneEditor/snapped</signal>
+                                    <slot>snapshotUID/snap</slot>
+                                </connect>
+
+                                <proxy channel="interaction_channel" waitForKey="backgroundImage">
+                                    <signal>bgImagePickerUID/picked</signal>
+                                </proxy>
+
+
+                                <proxy channel="interaction_channel2" waitForKey="frontImage">
+                                    <signal>frontImagePickerUID/picked</signal>
+                                </proxy>
+                            </scene>
+                        </service>
+
+                        <!-- Generic scene for background image -->
+                        <service uid="BgImgGenericScene" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                                <renderer id="default" background="0.0" />
+
+                                <adaptor id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="backgroundImage">
+                                    <config renderer="default" picker="picker" mode="2D" slices="1" sliceIndex="axial"
+                                            selectedTFKey="BgSelectedTF" tfSelectionFwID="TFSelections" />
+                                </adaptor>
+                                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                                </adaptor>
+                                <adaptor id="imagePicker" uid="imagePickerUID" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="backgroundImage">
+                                    <config renderer="default" picker="picker" />
+                                </adaptor>
+
+                                <proxy channel="interaction_channel" waitForKey="backgroundImage">
+                                    <signal>imagePickerUID/picked</signal>
+                                </proxy>
+                            </scene>
+                        </service>
+
+                        <!-- Generic scene for front image -->
+                        <service uid="FrontImgGenericScene" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="picker" vtkclass="fwVtkCellPicker" />
+                                <renderer id="default" background="0.0" />
+
+                                <adaptor id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="frontImage">
+                                    <config renderer="default" picker="picker" mode="2D" slices="1" sliceIndex="axial"
+                                            selectedTFKey="FrontSelectedTF" tfSelectionFwID="TFSelections" />
+                                </adaptor>
+                                <adaptor id="interactor" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                    <config renderer="default" style="InteractorStyle2DForNegato" />
+                                </adaptor>
+                                <adaptor id="imagePicker2" uid="imagePickerUID2" class="::visuVTKAdaptor::ImagePickerInteractor" objectId="frontImage">
+                                    <config renderer="default" picker="picker" />
+                                </adaptor>
+
+                                <proxy channel="interaction_channel2" waitForKey="frontImage">
+                                    <signal>imagePickerUID2/picked</signal>
+                                </proxy>
+
+                            </scene>
+                        </service>
+                        <item key="TFSelectionsKey">
+                            <object uid="TFSelections" type="::fwData::Composite" />
+                        </item>
+
+                        <connect>
+                            <signal>backgroundImageUID/modified</signal>
+                            <slot>updaterBackImgUID/addOrSwap</slot>
+                        </connect>
+                        <connect>
+                            <signal>frontImageUID/modified</signal>
+                            <slot>updaterFrontImgUID/addOrSwap</slot>
+                        </connect>
+
+                    </object>
+                </item>
+
+                <start uid="MainFrame" />
+                <start uid="updaterBackImgUID" />
+                <start uid="updaterFrontImgUID" />
+                <start uid="manager" />
+
+            </object>
+
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto02DataServiceBasicCtrl/rc/tuto.ico b/Samples/Examples/Ex02ImageMix/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto02DataServiceBasicCtrl/rc/tuto.ico
rename to Samples/Examples/Ex02ImageMix/rc/tuto.ico
diff --git a/Apps/Tuto02DataServiceBasicCtrl/CMakeLists.txt b/Samples/Examples/Ex03Registration/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto02DataServiceBasicCtrl/CMakeLists.txt
rename to Samples/Examples/Ex03Registration/CMakeLists.txt
diff --git a/Samples/Examples/Ex03Registration/Properties.cmake b/Samples/Examples/Ex03Registration/Properties.cmake
new file mode 100644
index 0000000..3ad87e2
--- /dev/null
+++ b/Samples/Examples/Ex03Registration/Properties.cmake
@@ -0,0 +1,33 @@
+
+set( NAME Ex03Registration)
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    servicesReg
+    dataReg
+    gui
+    guiQt
+    io
+    fwlauncher
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    visuVTKVRAdaptor
+    ioVTK
+    ioITK
+    ioData
+    uiGenericQt
+    uiImageQt
+    uiVisu
+    uiVisuQt
+    ctrlSelection
+    uiMeasurement
+    uiMeasurementQt
+    appXml
+    basicRegistration
+    ioAtoms
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Ex03RegistrationConfig)
diff --git a/Samples/Examples/Ex03Registration/rc/icons/Add-landmark.png b/Samples/Examples/Ex03Registration/rc/icons/Add-landmark.png
new file mode 100644
index 0000000..33a4b2f
Binary files /dev/null and b/Samples/Examples/Ex03Registration/rc/icons/Add-landmark.png differ
diff --git a/Samples/Examples/Ex03Registration/rc/icons/Fusion-tmp.png b/Samples/Examples/Ex03Registration/rc/icons/Fusion-tmp.png
new file mode 100644
index 0000000..7d79cce
Binary files /dev/null and b/Samples/Examples/Ex03Registration/rc/icons/Fusion-tmp.png differ
diff --git a/Samples/Examples/Ex03Registration/rc/icons/View-landmark.png b/Samples/Examples/Ex03Registration/rc/icons/View-landmark.png
new file mode 100644
index 0000000..1951d6f
Binary files /dev/null and b/Samples/Examples/Ex03Registration/rc/icons/View-landmark.png differ
diff --git a/Samples/Examples/Ex03Registration/rc/icons/distance.png b/Samples/Examples/Ex03Registration/rc/icons/distance.png
new file mode 100644
index 0000000..bbb215e
Binary files /dev/null and b/Samples/Examples/Ex03Registration/rc/icons/distance.png differ
diff --git a/Samples/Examples/Ex03Registration/rc/icons/icon-load1.png b/Samples/Examples/Ex03Registration/rc/icons/icon-load1.png
new file mode 100644
index 0000000..2c2ca51
Binary files /dev/null and b/Samples/Examples/Ex03Registration/rc/icons/icon-load1.png differ
diff --git a/Samples/Examples/Ex03Registration/rc/icons/icon-load2.png b/Samples/Examples/Ex03Registration/rc/icons/icon-load2.png
new file mode 100644
index 0000000..ac07c7b
Binary files /dev/null and b/Samples/Examples/Ex03Registration/rc/icons/icon-load2.png differ
diff --git a/Apps/TutoGui/rc/icons/unreadable.png b/Samples/Examples/Ex03Registration/rc/icons/unreadable.png
similarity index 100%
copy from Apps/TutoGui/rc/icons/unreadable.png
copy to Samples/Examples/Ex03Registration/rc/icons/unreadable.png
diff --git a/Samples/Examples/Ex03Registration/rc/plugin.xml b/Samples/Examples/Ex03Registration/rc/plugin.xml
new file mode 100644
index 0000000..4a0280b
--- /dev/null
+++ b/Samples/Examples/Ex03Registration/rc/plugin.xml
@@ -0,0 +1,382 @@
+<!--
+             graphical application overview for each tab.
+
+
+Point list 1 Tab selected
+=======================================================================
+|                   toolBar                                            |
+|======================================================================|
+|| Point list 1 Tab ||  Point list 2 Tab| Registration Tab|            |
+|======================================================================|
+|                                                                      |
+|                                                                      |
+|                    multiView_negato1                                 |
+|                                                                      |
+========================================================================
+
+Point list 2 Tab selected
+
+=======================================================================
+|                   toolBar                                            |
+|======================================================================|
+| Point list 1 Tab ||  Point list 2 Tab || Registration Tab|           |
+|======================================================================|
+|                                                                      |
+|                    negato2                                           |
+|                                                                      |
+========================================================================
+
+Regsitration Tab selected
+
+=======================================================================
+|                   toolBar                                            |
+|======================================================================|
+| Point list 1 Tab |  Point list 2 Tab || Registration Tab||           |
+|======================================================================|
+|                                                                      |
+|                                                                      |
+|                    negato3                                           |
+|                                                                      |
+========================================================================
+
+Detail of the ToolBar
+=======================================================================================================================================
+| actionOpenFile | actionOpenMesh1 | actionOpenMesh2 | ActionNewLandmarkPL1 | ActionNewLandmarkPL2 | TransformAction | RegisterAction |                                                               |
+=======================================================================================================================================
+
+
+ This application allows to do registration from two meshes or from an image and a mesh.
+ Step 1 : The user loads a mesh or/and image in the first tab by using the button (actionOpenFile)
+          The first button is for loading an image (actionOpenFile) and the second is for loading a mesh (actionOpenMesh1).
+ Step 2 : The user loads a mesh in the second Tab by using the button with a face and a two on the icon (actionOpenMesh2).
+ Step 3 : The user put at least 3 points in the first tab named Point list 1 (ActionNewLandmarkPL1).
+ Step 4 : The user put at least 3 points in the second tab named Point list 2 (The numeber of points must be the same in the two Tabs) (ActionNewLandmarkPL2).
+ Step 5 : The user click on the register button (Yin_Yang symbol) to do the registration and visualize the result on the third tab (RegisterAction).
+
+ Nota : The button with a blue point on it is for doing a fixed rotation and a translation on the mesh loaded in second tab (TransformAction).
+ -->
+<plugin id="Ex03Registration" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Ex03RegistrationConfig</id>
+        <config>
+           <object type="::fwData::Composite">
+
+            <service uid="mainFrame" impl="::gui::frame::SDefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
+                <gui>
+                    <frame>
+                        <name>Ex03Registration</name>
+                        <minSize width="800" height="600" />
+                    </frame>
+                </gui>
+                <registry>
+                    <view sid="mainView" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                <gui>
+                    <layout type="::fwGui::CardinalLayoutManager">
+                        <view caption="Negato1" align="center" />
+                    </layout>
+                    <toolBar />
+                </gui>
+                <registry>
+                    <toolBar sid="toolBar" start="yes" />
+                    <view sid="multiView" start="yes" />
+                </registry>
+            </service>
+            <!-- service which create a toolbar -->
+            <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
+                <gui>
+                    <layout>
+                        <menuItem name="Load Image" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/icon-load1.png" />
+                        <menuItem name="Load Mesh1" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/icon-load1.png" />
+                        <separator />
+                        <menuItem name="Load Mesh2" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/icon-load2.png" />
+                        <separator />
+                        <menuItem name="New landmark PL1" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/Add-landmark.png" />
+                        <menuItem name="New landmark PL2" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/Add-landmark.png" />
+                        <separator />
+                        <menuItem name="Move" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/View-landmark.png" />
+                        <menuItem name="Register" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/Fusion-tmp.png" />
+                        <menuItem name="Quit" icon="@BUNDLE_PREFIX@/Ex03Registration_0-1/icons/unreadable.png"/>
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="actionOpenFile" start="yes" />
+                    <menuItem sid="actionOpenMesh1" start="yes" />
+                    <menuItem sid="actionOpenMesh2" start="yes" />
+                    <menuItem sid="ActionNewLandmarkPL1" start="yes" />
+                    <menuItem sid="ActionNewLandmarkPL2" start="yes" />
+                    <menuItem sid="TransformAction" start="yes" />
+                    <menuItem sid="RegisterAction" start="yes" />
+                    <menuItem sid="actionQuit" start="yes" />
+                </registry>
+            </service>
+
+            <!-- service which create the three tabs of the application -->
+            <service uid="multiView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                <gui>
+                    <layout type="::fwGui::TabLayoutManager" >
+                        <view caption="Point List 1" selected="yes" />
+                        <view caption="Point List 2" />
+                        <view caption="Registration" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="multiView_negato1" start="yes" />
+                    <view sid="negato2" start="yes" />
+                    <view sid="negato3" start="yes" />
+                </registry>
+            </service>
+
+            <!-- NEGATO 1 VIEW  (Content of the first Tab)-->
+            <service uid="multiView_negato1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager">
+                        <orientation value="vertical" />
+                        <view proportion="1" />
+                        <view proportion="0" minHeight="30" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="negato1" start="yes" />
+                    <view sid="multiView_negato1_bottom" start="yes" />
+                </registry>
+            </service>
+            <service uid="multiView_negato1_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager">
+                        <orientation value="horizontal" />
+                        <view proportion="0" minWidth="30" />
+                        <view proportion="1" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="snapshotNegato1Editor" start="yes" />
+                    <view sid="slider_negato1" start="no" />
+                </registry>
+            </service>
+            <service uid="snapshotNegato1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no"/>
+
+            <!-- Action to load an image in the Tab 1 (Point list 1)-->
+            <service uid="actionOpenFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <start uid="readerPathFile" />
+            </service>
+
+            <!-- Action to load a mesh in the Tab 1 (Point list 1) -->
+            <service uid="actionOpenMesh1" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <start uid="meshReader1" />
+            </service>
+            <!-- Action to load a mesh in the Tab 2 (Point list 2)  -->
+            <service uid="actionOpenMesh2" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <start uid="meshReader2" />
+            </service>
+
+            <!-- Action to do a fixed translation/rotation on mesh in Point list 2 -->
+            <service uid="TransformAction" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <start uid="TransformMesh" />
+            </service>
+
+            <!-- Action to do the registration -->
+            <service uid="RegisterAction" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <start uid="PLRegistration" />
+            </service>
+
+            <!-- Action to do Quit -->
+            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
+
+
+            <!-- GENERIC SCENE DEFINITION -->
+            <item key="visuConfig">
+                <object uid="VisuComposite" type="::fwData::Composite">
+
+                    <!-- Service which compute the registration -->
+                    <service uid="PLRegistration" type="::fwServices::IController" impl="::basicRegistration::SPointListRegistration" autoConnect="no">
+                        <registeredPoints compositeKey="pointList2" />
+                        <referencePoints compositeKey="pointList1" />
+                        <matrix compositeKey="registrationMatrix" />
+                    </service>
+
+                    <service uid="TransformMesh" type="::fwServices::IController" impl="::basicRegistration::STransformMesh" autoConnect="no"/>
+
+                    <!-- Generic Scene (Negato) for the first tab -->
+                    <service uid="negato1" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                        <scene>
+                            <picker id="negato1default" vtkclass="fwVtkCellPicker" />
+
+                            <renderer id="default" background="0.0" />
+
+                            <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                                <config renderer="default" />
+                            </adaptor>
+
+                            <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                <config renderer="default" style="InteractorStyle3DForNegato" />
+                            </adaptor>
+
+                            <adaptor id="MPRNegato1" class="::visuVTKAdaptor::NegatoMPR" objectId="myImage">
+                                <config renderer="default" picker="negato1default" slices="3" sliceIndex="axial" useColorTF="no" />
+                            </adaptor>
+
+                            <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="myImage">
+                                <config renderer="default" picker="negato1default" text="" />
+                            </adaptor>
+
+                            <adaptor id="MeshOnNegato1" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato1">
+                                <config renderer="default" picker="negato1default" />
+                            </adaptor>
+
+                            <adaptor id="pl1" class="::visuVTKAdaptor::LabeledPointList" objectId="pointList1">
+                                <config renderer="default" picker="negato1default" />
+                            </adaptor>
+                            
+                            <connect>
+                                <signal>snapshotNegato1Editor/snapped</signal>
+                                <slot>snapshotUID/snap</slot>
+                            </connect>
+
+                        </scene>
+                    </service>
+
+                    <!-- Generic Scene (Negato) for the second tab -->
+                    <service uid="negato2" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                        <scene>
+                            <picker id="negato2default" vtkclass="fwVtkCellPicker" />
+
+                            <renderer id="default" background="0.0" />
+
+                            <adaptor id="Interactor2" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                <config renderer="default" style="InteractorStyle3DForNegato" />
+                            </adaptor>
+
+                            <adaptor id="Tool" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato2">
+                                <config renderer="default" picker="negato2default" />
+                            </adaptor>
+
+                            <adaptor id="pl2" class="::visuVTKAdaptor::LabeledPointList" objectId="pointList2">
+                                <config renderer="default" picker="negato2default" />
+                            </adaptor>
+
+                        </scene>
+                    </service>
+
+                    <!-- Generic Scene (Negato) for the Third tab -->
+                    <service uid="negato3" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                        <scene>
+
+                            <picker id="negato3default" vtkclass="fwVtkCellPicker" />
+
+                            <renderer id="default" background="0.0" />
+
+                            <vtkObject id="vtkRegisterMatrix" class="vtkTransform" />
+
+                            <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                <config renderer="default" style="InteractorStyle3DForNegato" />
+                            </adaptor>
+
+                            <adaptor id="Tool" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato2">
+                                <config renderer="default" transform="vtkRegisterMatrix" />
+                            </adaptor>
+
+                            <adaptor id="Tool2" class="::visuVTKAdaptor::Mesh" objectId="meshOnNegato1">
+                                <config renderer="default" transform="vtkRegisterMatrix" />
+                            </adaptor>
+
+                            <adaptor id="MPRNegato3" class="::visuVTKAdaptor::NegatoMPR" objectId="myImage">
+                                <config renderer="default" picker="negato3default" slices="3" sliceIndex="axial" useColorTF="no" />
+                            </adaptor>
+
+                            <adaptor id="MatrixAdaptor" class="::visuVTKAdaptor::Transform" objectId="registrationMatrix">
+                                <config renderer="default" picker="" transform="vtkRegisterMatrix" />
+                            </adaptor>
+
+                        </scene>
+                    </service>
+
+                    <item key="myImage">
+                       <!-- Object to store the image loading in the first tab -->
+                        <object uid="myImage" type="::fwData::Image">
+
+                            <service uid="MedicalImageSrv" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
+
+                            <service uid="readerPathFile" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                <type mode="reader" />
+                                <selection mode="exclude" />
+                                <addSelection service="::ioXML::FwXMLGenericReaderService" />
+                            </service>
+
+                            <!-- Editors for Negato1 -->
+                            <service uid="slider_negato1" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
+                                <sliceIndex>axial</sliceIndex>
+                            </service>
+
+                        </object>
+                    </item>
+
+                    <item key="meshOnNegato1">
+                         <!-- Object to store the mesh loading in the first tab -->
+                        <object uid="meshOnNegato1" type="::fwData::Mesh">
+                            <service uid="meshReader1" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no" >
+                                <type mode="reader" />
+                                <selection mode="exclude" />
+                                <addSelection service="::ioXML::FwXMLGenericReaderService" />
+                            </service>
+                        </object>
+                    </item>
+
+                    <item key="meshOnNegato2">
+                        <!-- Object to store the mesh loading in the second tab -->
+                        <object uid="myToolMesh" type="::fwData::Mesh">
+                            <service uid="meshReader2" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no" >
+                                <type mode="reader" />
+                                <selection mode="exclude" />
+                                <addSelection service="::ioXML::FwXMLGenericReaderService" />
+                            </service>
+                        </object>
+                    </item>
+
+                    <item key="pointList1">
+                        <!-- Object to store the point put in the first tab -->
+                        <object type="::fwData::PointList">
+                            <service uid="ActionNewLandmarkPL1" type="::fwGui::IActionSrv" impl="::uiMeasurement::action::SAddLabeledPoint" autoConnect="no" />
+                        </object>
+                    </item>
+
+                    <item key="pointList2">
+                        <!-- Object to store the point put in the first tab -->
+                        <object type="::fwData::PointList">
+                            <service uid="ActionNewLandmarkPL2" type="::fwGui::IActionSrv" impl="::uiMeasurement::action::SAddLabeledPoint" autoConnect="no" />
+                        </object>
+                    </item>
+
+                    <item key="registrationMatrix">
+                        <!-- Object to store the registration matrix -->
+                        <object type="::fwData::TransformationMatrix3D">
+                            <matrix>
+                                1 0 0 0
+                                0 1 0 0
+                                0 0 1 0
+                                0 0 0 1
+                            </matrix>
+                        </object>
+                    </item>
+
+                </object>
+            </item>
+
+
+            <!-- START AND STOP SERVICES -->
+            <start uid="mainFrame" />
+            <start uid="MedicalImageSrv" />
+            <start uid="slider_negato1" />
+
+        </object>
+    </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto03DataService/CMakeLists.txt b/Samples/Examples/Ex04ImagesRegistration/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto03DataService/CMakeLists.txt
rename to Samples/Examples/Ex04ImagesRegistration/CMakeLists.txt
diff --git a/Samples/Examples/Ex04ImagesRegistration/Properties.cmake b/Samples/Examples/Ex04ImagesRegistration/Properties.cmake
new file mode 100644
index 0000000..65b3cfe
--- /dev/null
+++ b/Samples/Examples/Ex04ImagesRegistration/Properties.cmake
@@ -0,0 +1,28 @@
+
+set( NAME Ex04ImagesRegistration)
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    servicesReg
+    dataReg
+    gui
+    guiQt
+    io
+    fwlauncher
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    ioVTK
+    ioITK
+    ioData
+    uiImageQt
+    uiVisu
+    uiVisuQt
+    ctrlSelection
+    appXml
+    basicRegistration
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Ex04ImagesRegistrationConfig)
diff --git a/Samples/Examples/Ex04ImagesRegistration/rc/icons/icon-load1.png b/Samples/Examples/Ex04ImagesRegistration/rc/icons/icon-load1.png
new file mode 100644
index 0000000..2c2ca51
Binary files /dev/null and b/Samples/Examples/Ex04ImagesRegistration/rc/icons/icon-load1.png differ
diff --git a/Samples/Examples/Ex04ImagesRegistration/rc/icons/icon-load2.png b/Samples/Examples/Ex04ImagesRegistration/rc/icons/icon-load2.png
new file mode 100644
index 0000000..ac07c7b
Binary files /dev/null and b/Samples/Examples/Ex04ImagesRegistration/rc/icons/icon-load2.png differ
diff --git a/Samples/Examples/Ex04ImagesRegistration/rc/icons/save.png b/Samples/Examples/Ex04ImagesRegistration/rc/icons/save.png
new file mode 100644
index 0000000..daba865
Binary files /dev/null and b/Samples/Examples/Ex04ImagesRegistration/rc/icons/save.png differ
diff --git a/Apps/TutoGui/rc/icons/unreadable.png b/Samples/Examples/Ex04ImagesRegistration/rc/icons/unreadable.png
similarity index 100%
copy from Apps/TutoGui/rc/icons/unreadable.png
copy to Samples/Examples/Ex04ImagesRegistration/rc/icons/unreadable.png
diff --git a/Samples/Examples/Ex04ImagesRegistration/rc/plugin.xml b/Samples/Examples/Ex04ImagesRegistration/rc/plugin.xml
new file mode 100644
index 0000000..c702481
--- /dev/null
+++ b/Samples/Examples/Ex04ImagesRegistration/rc/plugin.xml
@@ -0,0 +1,410 @@
+<!--
+    graphical application overview for each tab.
+
+
+    Point list 1 Tab selected
+    =======================================================================
+    | toolBar |
+    |======================================================================|
+    || Point list 1 Tab || Point list 2 Tab| Registration Tab| |
+    |======================================================================|
+    | |
+    | |
+    | multiView_negato1 |
+    | |
+    ========================================================================
+
+    Point list 2 Tab selected
+
+    =======================================================================
+    | toolBar |
+    |======================================================================|
+    | Point list 1 Tab || Point list 2 Tab || Registration Tab| |
+    |======================================================================|
+    | |
+    | |
+    | multiView_negato2 |
+    | |
+    ========================================================================
+
+    Regsitration Tab selected
+
+    =======================================================================
+    | toolBar |
+    |======================================================================|
+    | Point list 1 Tab | Point list 2 Tab || Registration Tab|| |
+    |======================================================================|
+    | |
+    | |
+    | multiView_negato3 |
+    | |
+    ========================================================================
+
+    Detail of the ToolBar
+    =======================================================================
+    | openFile | openFile2 | RegisterAction | Quit | |
+    =======================================================================
+
+
+    This application allows to do registration from image and an image.
+    Step 1 : The user loads an image in the first tab by using the button (openFile).
+    Step 2 : The user loads an image in the second Tab by using the button (openFile2).
+    Step 3 : The user goes to the third tab and click on compute to see the result of the subtract between the two images.
+-->
+<plugin id="Ex04ImagesRegistration" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Ex04ImagesRegistrationConfig</id>
+        <config>
+            <object type="::fwData::Composite">
+
+                <service uid="mainFrame" impl="::gui::frame::SDefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
+                    <gui>
+                        <frame>
+                            <name>Ex04ImagesRegistration</name>
+                            <minSize width="800" height="600" />
+                        </frame>
+                    </gui>
+                    <registry>
+                        <view sid="mainView" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="mainView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view caption="Main view" align="center" />
+                        </layout>
+                        <toolBar />
+                    </gui>
+                    <registry>
+                        <toolBar sid="toolBar" start="yes" />
+                        <view sid="multiView" start="yes" />
+                    </registry>
+                </service>
+                <!-- service which create a toolbar -->
+                <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menuItem name="Load Image" icon="@BUNDLE_PREFIX@/Ex04ImagesRegistration_0-1/icons/icon-load1.png" />
+                            <separator />
+                            <menuItem name="Load Image2" icon="@BUNDLE_PREFIX@/Ex04ImagesRegistration_0-1/icons/icon-load2.png" />
+                            <separator />
+                            <menuItem name="Save Image" icon="@BUNDLE_PREFIX@/Ex04ImagesRegistration_0-1/icons/save.png" />
+                            <menuItem name="Quit" icon="@BUNDLE_PREFIX@/Ex04ImagesRegistration_0-1/icons/unreadable.png" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="openFile1" start="yes" />
+                        <menuItem sid="openFile2" start="yes" />
+                        <menuItem sid="saveFile" start="no" />
+                        <menuItem sid="actionQuit" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- service which create the three tabs of the application -->
+                <service uid="multiView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::TabLayoutManager">
+                            <view caption="Image 1" selected="yes" />
+                            <view caption="Image 2" />
+                            <view caption="Registration" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="multiView_negato1" start="yes" />
+                        <view sid="multiView_negato2" start="yes" />
+                        <view sid="registrationView" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- NEGATO 1 VIEW (Content of the first Tab) -->
+                <service uid="multiView_negato1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view proportion="1" />
+                            <view proportion="0" minHeight="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="negato1" start="yes" />
+                        <view sid="multiView_negato1_bottom" start="yes" />
+                    </registry>
+                </service>
+                <service uid="multiView_negato1_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="0" minWidth="30" />
+                            <view proportion="1" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="snapshotNegato1Editor" start="yes" />
+                        <view sid="slider_negato1" start="no" />
+                    </registry>
+                </service>
+                <service uid="snapshotNegato1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
+                <!-- NEGATO 2 VIEW (Content of the second Tab) -->
+                <service uid="multiView_negato2" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view proportion="1" />
+                            <view proportion="0" minHeight="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="negato2" start="yes" />
+                        <view sid="multiView_negato2_bottom" start="yes" />
+                    </registry>
+                </service>
+                <service uid="multiView_negato2_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="0" minWidth="30" />
+                            <view proportion="1" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="snapshotNegato2Editor" start="yes" />
+                        <view sid="slider_negato2" start="no" />
+                    </registry>
+                </service>
+                <service uid="snapshotNegato2Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
+                <!-- NEGATO 3 VIEW (Content of the third Tab) -->
+                <service uid="registrationView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        s
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="1" />
+                            <view proportion="0" minHeight="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="multiView_negato3" start="yes" />
+                        <view sid="paramEditor" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="multiView_negato3" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        s
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view proportion="1" />
+                            <view proportion="0" minHeight="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="negato3" start="yes" />
+                        <view sid="multiView_negato3_bottom" start="yes" />
+                    </registry>
+                </service>
+                <service uid="multiView_negato3_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="0" minWidth="30" />
+                            <view proportion="1" />
+                            <view proportion="0" minWidth="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="snapshotNegato3Editor" />
+                        <view sid="slider_negato3" />
+                    </registry>
+                </service>
+                <service uid="snapshotNegato3Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
+                <!-- ACTIONS -->
+                <!-- Action to load an image in the Tab 1 -->
+                <service uid="openFile1" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="readerFile1" />
+                </service>
+
+                <!-- Action to load an image in the Tab 2 -->
+                <service uid="openFile2" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="readerFile2" />
+                </service>
+
+                <!-- Action to do Quit -->
+                <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
+
+
+                <!-- GENERIC SCENE DEFINITION -->
+                <item key="visuConfig">
+                    <object uid="VisuComposite" type="::fwData::Composite">
+                        <service uid="paramEditor" type="::gui::editor::IEditor" impl="::basicRegistration::SImagesSubstract" autoConnect="no" />
+
+                        <service uid="manager" impl="::ctrlSelection::manager::SwapperSrv" type="::ctrlSelection::IManagerSrv" autoConnect="yes">
+                            <mode type="stop" />
+                            <config>
+                                <!-- Object to store the result of SImagesSubstract -->
+                                <object id="imageResult" type="::fwData::Image">
+
+                                    <service uid="MedicalImageSrv3" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="yes" />
+                                    <!-- Editors for Negato1 -->
+                                    <service uid="slider_negato3" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
+                                        <sliceIndex>axial</sliceIndex>
+                                    </service>
+                                    <!-- Action to save an image in the Tab 3 -->
+                                    <service uid="saveFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                                        <start uid="writerFile" />
+                                    </service>
+                                    <service uid="writerFile" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                        <type mode="writer" />
+                                    </service>
+
+                                </object>
+                            </config>
+                        </service>
+
+                        <!-- Generic Scene (Negato) for the first tab -->
+                        <service uid="negato1" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="negato1default" vtkclass="fwVtkCellPicker" />
+
+                                <renderer id="default" background="0.0" />
+
+                                <adaptor id="snapshot1" uid="snapshot1UID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                                    <config renderer="default" />
+                                </adaptor>
+
+                                <adaptor id="Interactor1" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                    <config renderer="default" style="InteractorStyle3DForNegato" />
+                                </adaptor>
+
+                                <adaptor id="MPRNegato1" class="::visuVTKAdaptor::NegatoMPR" objectId="image1">
+                                    <config renderer="default" picker="negato1default" slices="3" sliceIndex="axial" />
+                                </adaptor>
+
+                                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="image1">
+                                    <config renderer="default" picker="negato1default" text="" />
+                                </adaptor>
+
+                                <connect>
+                                    <signal>snapshotNegato1Editor/snapped</signal>
+                                    <slot>snapshot1UID/snap</slot>
+                                </connect>
+
+                            </scene>
+                        </service>
+
+                        <!-- Generic Scene (Negato) for the second tab -->
+                        <service uid="negato2" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="negato2default" vtkclass="fwVtkCellPicker" />
+
+                                <renderer id="default" background="0.0" />
+
+                                <adaptor id="snapshot2" uid="snapshot2UID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                                    <config renderer="default" />
+                                </adaptor>
+
+                                <adaptor id="Interactor2" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                    <config renderer="default" style="InteractorStyle3DForNegato" />
+                                </adaptor>
+
+                                <adaptor id="MPRNegato2" class="::visuVTKAdaptor::NegatoMPR" objectId="image2">
+                                    <config renderer="default" picker="negato2default" slices="3" sliceIndex="axial" />
+                                </adaptor>
+
+                                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="image2">
+                                    <config renderer="default" picker="negato2default" text="" />
+                                </adaptor>
+
+                                <connect>
+                                    <signal>snapshotNegato2Editor/snapped</signal>
+                                    <slot>snapshot2UID/snap</slot>
+                                </connect>
+
+                            </scene>
+                        </service>
+
+                        <!-- Generic Scene (Negato) for the Third tab -->
+                        <service uid="negato3" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+
+                                <picker id="negato3default" vtkclass="fwVtkCellPicker" />
+
+                                <renderer id="default" background="0.0" />
+
+                                <adaptor id="snapshot3" uid="snapshot3UID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                                    <config renderer="default" />
+                                </adaptor>
+
+                                <adaptor id="Interactor3" class="::visuVTKAdaptor::InteractorStyle" objectId="self">
+                                    <config renderer="default" style="InteractorStyle3DForNegato" />
+                                </adaptor>
+
+                                <adaptor id="MPRNegato3" class="::visuVTKAdaptor::NegatoMPR" objectId="imageResult">
+                                    <config renderer="default" picker="negato3default" slices="3" sliceIndex="axial" />
+                                </adaptor>
+
+                                <adaptor id="text" class="::visuVTKAdaptor::ImageText" objectId="imageResult">
+                                    <config renderer="default" picker="negato3default" text="" />
+                                </adaptor>
+
+                                <connect>
+                                    <signal>snapshotNegato3Editor/snapped</signal>
+                                    <slot>snapshot3UID/snap</slot>
+                                </connect>
+
+                            </scene>
+                        </service>
+
+                        <item key="image1">
+                            <!-- Object to store the image loading in the first tab -->
+                            <object uid="image1" type="::fwData::Image">
+
+                                <service uid="MedicalImageSrv1" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="yes" />
+
+                                <service uid="readerFile1" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                    <type mode="reader" />
+                                </service>
+
+                                <!-- Editors for Negato1 -->
+                                <service uid="slider_negato1" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
+                                    <sliceIndex>axial</sliceIndex>
+                                </service>
+                            </object>
+                        </item>
+
+                        <item key="image2">
+                            <!-- Object to store the image loading in the first tab -->
+                            <object uid="image2" type="::fwData::Image">
+
+                                <service uid="MedicalImageSrv2" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="yes" />
+
+                                <service uid="readerFile2" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                    <type mode="reader" />
+                                </service>
+
+                                <!-- Editors for Negato2 -->
+                                <service uid="slider_negato2" impl="::uiImage::SliceIndexPositionEditor" type="::gui::editor::IEditor" autoConnect="yes">
+                                    <sliceIndex>axial</sliceIndex>
+                                </service>
+                            </object>
+                        </item>
+                    </object>
+                </item>
+
+
+                <!-- START AND STOP SERVICES -->
+                <start uid="mainFrame" />
+                <start uid="MedicalImageSrv1" />
+                <start uid="MedicalImageSrv2" />
+                <start uid="manager" />
+                <start uid="slider_negato1" />
+                <start uid="slider_negato2" />
+            </object>
+        </config>
+    </extension>
+</plugin>
diff --git a/Samples/Tutorials/Tuto01Basic/CMakeLists.txt b/Samples/Tutorials/Tuto01Basic/CMakeLists.txt
new file mode 100644
index 0000000..c474db8
--- /dev/null
+++ b/Samples/Tutorials/Tuto01Basic/CMakeLists.txt
@@ -0,0 +1,3 @@
+fwLoadProperties()
+
+generic_install()
diff --git a/Samples/Tutorials/Tuto01Basic/Properties.cmake b/Samples/Tutorials/Tuto01Basic/Properties.cmake
new file mode 100644
index 0000000..657f862
--- /dev/null
+++ b/Samples/Tutorials/Tuto01Basic/Properties.cmake
@@ -0,0 +1,15 @@
+set( NAME Tuto01Basic ) # Name of the application
+set( VERSION 0.1 ) # Version of the application
+set( TYPE APP ) # Type APP represent "Application"
+set( DEPENDENCIES  ) # For an application we have no dependencies (libraries to link)
+set( REQUIREMENTS # The bundles used by this application
+    dataReg # to load the data registry
+    servicesReg # to load the service registry
+    gui # to load gui
+    guiQt # to load qt implementation of gui
+    fwlauncher # executable to run the application
+    appXml2 # to parse the application configuration
+)
+
+# Set the configuration to use : 'tutoBasicConfig'
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tutoBasicConfig) 
diff --git a/Samples/Tutorials/Tuto01Basic/rc/plugin.xml b/Samples/Tutorials/Tuto01Basic/rc/plugin.xml
new file mode 100644
index 0000000..816862d
--- /dev/null
+++ b/Samples/Tutorials/Tuto01Basic/rc/plugin.xml
@@ -0,0 +1,30 @@
+<!-- Application name and version (the version is automatically replaced by CMake
+     using the version defined in the Properties.cmake) -->
+<plugin id="Tuto01Basic" version="@DASH_VERSION@">
+
+    <!-- The bundles in requirements are automatically started when this 
+         Application is launched. -->
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+
+    <!-- Defines the App-config -->
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>tutoBasicConfig</id><!-- identifier of the configuration -->
+        <config>
+
+            <!-- Frame service -->
+            <service uid="myFrame" type="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>tutoBasicApplicationName</name>
+                        <icon>@BUNDLE_PREFIX@/Tuto01Basic_0-1/tuto.ico</icon>
+                        <minSize width="800" height="600" />
+                    </frame>
+                </gui>
+            </service>
+
+            <start uid="myFrame" /><!-- start the frame service -->
+
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto03DataService/rc/tuto.ico b/Samples/Tutorials/Tuto01Basic/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto03DataService/rc/tuto.ico
rename to Samples/Tutorials/Tuto01Basic/rc/tuto.ico
diff --git a/Apps/Tuto03DataServiceBis/CMakeLists.txt b/Samples/Tutorials/Tuto02DataServiceBasic/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto03DataServiceBis/CMakeLists.txt
rename to Samples/Tutorials/Tuto02DataServiceBasic/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto02DataServiceBasic/Properties.cmake b/Samples/Tutorials/Tuto02DataServiceBasic/Properties.cmake
new file mode 100644
index 0000000..c96cf4c
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasic/Properties.cmake
@@ -0,0 +1,20 @@
+
+set( NAME Tuto02DataServiceBasic )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io # contains the interface for reader and writer.
+    ioVTK # contains the reader and writer for VTK files (image and mesh).
+    visuVTK # loads VTK rendering library (fwRenderVTK).
+    visuVTKQt # containsthe vtk Renderer window interactor manager using Qt.
+    vtkSimpleNegato # contains a visualization service of medical image.
+    fwlauncher
+    appXml2
+)
+
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES tutoDataServiceBasicConfig)
diff --git a/Samples/Tutorials/Tuto02DataServiceBasic/rc/plugin.xml b/Samples/Tutorials/Tuto02DataServiceBasic/rc/plugin.xml
new file mode 100644
index 0000000..b3f80b7
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasic/rc/plugin.xml
@@ -0,0 +1,74 @@
+<plugin id="Tuto02DataServiceBasic" version="@DASH_VERSION@">
+
+    <!-- The bundles in requirements are automatically started when this 
+         Application is launched. -->
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>tutoDataServiceBasicConfig</id>
+        <config>
+
+            <!-- In tutoDataServiceBasic, the central data object is a ::fwData::Image. -->
+            <object uid="imageData" type="::fwData::Image" />
+
+            <!--
+                Description service of the GUI:
+                The ::gui::frame::SDefaultFrame service automatically positions the various
+                containers in the application main window.
+                Here, it declares a container for the 3D rendering service.
+            -->
+            <service uid="mainFrame" type="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>tutoDataServiceBasic</name>
+                        <icon>@BUNDLE_PREFIX@/Tuto02DataServiceBasic_0-1/tuto.ico</icon>
+                        <minSize width="800" height="600" />
+                    </frame>
+                </gui>
+                <registry>
+                    <!-- Associate the container for the rendering service. -->
+                    <view sid="myRendering" />
+                </registry>
+            </service>
+
+            <!--
+                Reading service:
+                The <file> tag defines the path of the image to load. Here, it is a relative
+                path from the repository in which you launch the application.
+            -->
+            <service uid="myReaderPathFile" type="::ioVTK::SImageReader">
+                <inout key="image" uid="imageData" />
+                <file>../../data/patient1.vtk</file>
+            </service>
+
+            <!--
+                Visualization service of a 3D medical image:
+                This service will render the 3D image.
+            -->
+            <service uid="myRendering" type="::vtkSimpleNegato::SRenderer">
+                <in key="image" uid="imageData" />
+            </service>
+
+            <!--
+                Definition of the starting order of the different services:
+                The frame defines the 3D scene container, so it must be started first.
+                The services will be stopped the reverse order compared to the starting one.
+            -->
+            <start uid="mainFrame" />
+            <start uid="myReaderPathFile" />
+            <start uid="myRendering" />
+
+            <!--
+                Definition of the service to update:
+                The reading service load the data on the update.
+                The render update must be called after the reading of the image.
+            -->
+            <update uid="myReaderPathFile" />
+            <update uid="myRendering" />
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto03DataServiceBis/rc/tuto.ico b/Samples/Tutorials/Tuto02DataServiceBasic/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto03DataServiceBis/rc/tuto.ico
rename to Samples/Tutorials/Tuto02DataServiceBasic/rc/tuto.ico
diff --git a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/CMakeLists.txt b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/CMakeLists.txt
new file mode 100644
index 0000000..3f821c5
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/CMakeLists.txt
@@ -0,0 +1,11 @@
+fwLoadProperties()
+
+find_package(Boost COMPONENTS system REQUIRED)
+
+fwInclude(
+    ${Boost_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Boost_SYSTEM_LIBRARY}
+)
diff --git a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/Properties.cmake b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/Properties.cmake
new file mode 100644
index 0000000..431e1aa
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/Properties.cmake
@@ -0,0 +1,24 @@
+
+set( NAME Tuto02DataServiceBasicCtrl )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( START ON )
+set( DEPENDENCIES
+    fwData
+    fwServices
+    fwCom
+    fwRuntime
+)
+set( REQUIREMENTS
+    io
+    gui
+    guiQt
+    dataReg
+    servicesReg
+    visuVTK
+    visuVTKQt
+    ioData
+    ioVTK
+    vtkSimpleNegato
+    fwlauncher
+)
diff --git a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/include/Tuto02DataServiceBasicCtrl/Plugin.hpp b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/include/Tuto02DataServiceBasicCtrl/Plugin.hpp
new file mode 100644
index 0000000..20aefb7
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/include/Tuto02DataServiceBasicCtrl/Plugin.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTO02DATASERVICEBASICCTRL_PLUGIN_HPP__
+#define __TUTO02DATASERVICEBASICCTRL_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+#include <fwCom/Connection.hpp>
+
+#include <fwData/Image.hpp>
+
+#include <fwServices/IService.hpp>
+
+#include "Tuto02DataServiceBasicCtrl/config.hpp"
+
+namespace Tuto02DataServiceBasicCtrl
+{
+
+/**
+ * @brief   This class is started when the bundles is loaded.
+ */
+class TUTO02DATASERVICEBASICCTRL_CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+public:
+    /// Constructor.
+    TUTO02DATASERVICEBASICCTRL_API Plugin() throw();
+
+    /// Destructor. Do nothing.
+    TUTO02DATASERVICEBASICCTRL_API ~Plugin() throw();
+
+    /// Overrides start method. .
+    TUTO02DATASERVICEBASICCTRL_API void start() throw(::fwRuntime::RuntimeException);
+
+    /// Overrides stop method. Do nothing
+    TUTO02DATASERVICEBASICCTRL_API void stop() throw();
+
+    TUTO02DATASERVICEBASICCTRL_API void initialize() throw( ::fwRuntime::RuntimeException );
+
+    TUTO02DATASERVICEBASICCTRL_API void uninitialize() throw();
+
+private:
+    ::fwData::Image::sptr m_image;
+
+    ::fwServices::IService::sptr m_frameSrv;
+    ::fwServices::IService::sptr m_renderSrv;
+    ::fwServices::IService::sptr m_readerSrv;
+};
+
+} // namespace Tuto02DataServiceBasicCtrl
+
+#endif // __TUTO02DATASERVICEBASICCTRL_PLUGIN_HPP__
diff --git a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/rc/plugin.xml b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/rc/plugin.xml
new file mode 100644
index 0000000..bd432ca
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/rc/plugin.xml
@@ -0,0 +1,9 @@
+<plugin id="Tuto02DataServiceBasicCtrl" class="::Tuto02DataServiceBasicCtrl::Plugin"  version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <library name="Tuto02DataServiceBasicCtrl" />
+    
+</plugin>
diff --git a/Apps/Tuto04ComChannel/rc/tuto.ico b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto04ComChannel/rc/tuto.ico
rename to Samples/Tutorials/Tuto02DataServiceBasicCtrl/rc/tuto.ico
diff --git a/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp
new file mode 100644
index 0000000..899464d
--- /dev/null
+++ b/Samples/Tutorials/Tuto02DataServiceBasicCtrl/src/Tuto02DataServiceBasicCtrl/Plugin.cpp
@@ -0,0 +1,104 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+
+#include "Tuto02DataServiceBasicCtrl/Plugin.hpp"
+
+
+namespace Tuto02DataServiceBasicCtrl
+{
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::Tuto02DataServiceBasicCtrl::Plugin");
+
+//------------------------------------------------------------------------------
+
+Plugin::Plugin() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::start() throw( ::fwRuntime::RuntimeException )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
+{
+    m_image = ::fwData::Image::New();
+
+    // Reader service
+    m_readerSrv = ::fwServices::add(m_image, "::io::IReader", "::ioVTK::SImageReader");
+    ::fwServices::IService::ConfigType readerCfg;
+    readerCfg.put("service.file", "./TutoData/patient1.vtk");
+    m_readerSrv->setConfiguration( readerCfg );
+    m_readerSrv->configure();
+
+    // Render service
+    m_renderSrv = ::fwServices::add(m_image, "::fwRender::IRender", "::vtkSimpleNegato::SRenderer",
+                                    "myRenderingTuto");
+    m_renderSrv->configure();
+
+    // Frame service
+    m_frameSrv = ::fwServices::add(m_image, "::fwGui::IFrameSrv", "::gui::frame::SDefaultFrame");
+
+    ::fwServices::IService::ConfigType frameConfig;
+
+    frameConfig.put("service.gui.frame.name", "tutoDataServiceBasic");
+    frameConfig.put("service.gui.frame.icon", std::string(
+                        BUNDLE_PREFIX) + "/Tuto02DataServiceBasicCtrl_0-1/tuto.ico");
+    frameConfig.put("service.gui.frame.minSize.<xmlattr>.width", "800");
+    frameConfig.put("service.gui.frame.minSize.<xmlattr>.height", "600");
+
+    frameConfig.put("service.registry.view.<xmlattr>.sid", "myRenderingTuto");
+
+    m_frameSrv->setConfiguration( frameConfig );
+    m_frameSrv->configure();
+
+    // Start app
+    m_frameSrv->start();
+    m_readerSrv->start();
+    m_renderSrv->start();
+
+    // Update
+    m_readerSrv->update();
+    m_renderSrv->update();
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::uninitialize() throw()
+{
+    m_renderSrv->stop();
+    m_readerSrv->stop();
+    m_frameSrv->stop();
+    ::fwServices::OSR::unregisterService( m_readerSrv );
+    ::fwServices::OSR::unregisterService( m_frameSrv );
+    ::fwServices::OSR::unregisterService( m_renderSrv );
+    m_image.reset();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace Tuto02DataServiceBasicCtrl
diff --git a/Apps/Tuto04ComChannel/CMakeLists.txt b/Samples/Tutorials/Tuto03DataService/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto04ComChannel/CMakeLists.txt
rename to Samples/Tutorials/Tuto03DataService/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto03DataService/Properties.cmake b/Samples/Tutorials/Tuto03DataService/Properties.cmake
new file mode 100644
index 0000000..1cc3f36
--- /dev/null
+++ b/Samples/Tutorials/Tuto03DataService/Properties.cmake
@@ -0,0 +1,21 @@
+
+set( NAME Tuto03DataService )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioVTK
+    uiIO # contains services to show dialogs for reader/writer selection
+    visuVTK
+    visuVTKQt
+    vtkSimpleNegato
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES tutoDataServiceConfig)
diff --git a/Samples/Tutorials/Tuto03DataService/rc/plugin.xml b/Samples/Tutorials/Tuto03DataService/rc/plugin.xml
new file mode 100644
index 0000000..06e8c66
--- /dev/null
+++ b/Samples/Tutorials/Tuto03DataService/rc/plugin.xml
@@ -0,0 +1,127 @@
+
+<plugin id="Tuto03DataService" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>tutoDataServiceConfig</id>
+        <config>
+
+            <!-- The root data object in tutoDataService is a ::fwData::Image. -->
+            <object type="::fwData::Image">
+
+                <!-- Frame service:
+                    The frame creates a container fot the rendering service and a menu bar.
+                    In this tutorial, the gui services will automatically start the services they register using the
+                    'start="yes"' attribute.
+                -->
+                <service uid="myFrame" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>tutoDataService</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto03DataService_0-1/tuto.ico</icon>
+                            <minSize width="800" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="myRendering" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Menu bar service:
+                    This service defines the list of the menus displayed in the menu bar.
+                    Here, we have only one menu: File
+                    Each <menu> declared into the <layout> tag, must have its associated <menu> into the <registry> tag.
+                    The <layout> tags defines the displayed information, whereas the <registry> tags defines the
+                    services information.
+                -->
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="myMenu" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Menu service:
+                    This service defines the actions displayed in the "File" menu.
+                    Here, it registers two actions: "Open file", and "Quit".
+                    As in the menu bar service, each <menuItem> declared into the <layout> tag, must have its
+                    associated <menuItem> into the <registry> tag.
+
+                    It's possible to associate specific attributes for <menuItem> to configure their style, shortcut...
+                    In this tutorial, the attribute 'specialAction' has the value "QUIT". On MS Windows, there's no
+                    impact, but on Mac OS, this value installs the menuItem in the system menu bar, and on Linux this
+                    value installs the default 'Quit' system icon in the menuItem.
+                -->
+                <service uid="myMenu" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open file" shortcut="Ctrl+O" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="actionOpenFile" start="yes" />
+                        <menuItem sid="actionQuit" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Quit action:
+                    The action service (::gui::action::SQuit) is a generic action that will close the application
+                    when the user click on the menuItem "Quit".
+                -->
+                <service uid="actionQuit" impl="::gui::action::SQuit" />
+
+                <!--
+                    Open file action:
+                    This service (::gui::action::StarterActionService) is a generic action, it starts and update the
+                    services given in the configuration when the user clicks on the action.
+                    Here, the reader selector will be called when the actions is clicked.
+                -->
+                <service uid="actionOpenFile" impl="::gui::action::SStarter">
+                    <start uid="myReaderPathFile" />
+                </service>
+
+                <!--
+                    Reader selector dialog:
+                    This is a generic service that show a dialog to display all the reader or writer available for its
+                    associated data. By default it is configured to show reader. (Note: if there is only one reading
+                    service, it is directly selected without dialog box.)
+                    Here, it the only reader available to read a ::fwData::Image is ::ioVTK::ImageReaderService (see
+                    Tuto02DataServiceBasic), so the selector will not be displayed.
+                    When the service was chosen, it is started, updated and stopped, so the data is read.
+                -->
+                <service uid="myReaderPathFile" impl="::uiIO::editor::SIOSelector" />
+
+                <!--
+                    3D visualization service of medical images:
+                    Here, the service attribute 'autoConnect="yes"' allows the rendering to listen the modification of
+                    the data image. So, when the image is loaded, the visualization will be updated.
+                -->
+                <service uid="myRendering" impl="::vtkSimpleNegato::SRenderer" autoConnect="yes" />
+
+                <!--
+                    Here, we only start the frame because all the others services are managed by the gui service:
+                    - the frame starts the menu bar and the redering service
+                    - the menu bar starts the menu services
+                    - the menus starts the actions
+                -->
+                <start uid="myFrame" />
+
+            </object>
+
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto05Mesher/rc/tuto.ico b/Samples/Tutorials/Tuto03DataService/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto05Mesher/rc/tuto.ico
rename to Samples/Tutorials/Tuto03DataService/rc/tuto.ico
diff --git a/Apps/Tuto05Mesher/CMakeLists.txt b/Samples/Tutorials/Tuto04SignalSlot/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto05Mesher/CMakeLists.txt
rename to Samples/Tutorials/Tuto04SignalSlot/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake b/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake
new file mode 100644
index 0000000..659c790
--- /dev/null
+++ b/Samples/Tutorials/Tuto04SignalSlot/Properties.cmake
@@ -0,0 +1,21 @@
+
+set( NAME Tuto04SignalSlot )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioVTK
+    uiIO
+    visuVTK
+    visuVTKQt
+    vtkSimpleMesh # contains a visualization service of mesh.
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES tutoSignalSlotConfig)
diff --git a/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml b/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml
new file mode 100644
index 0000000..c86a3b1
--- /dev/null
+++ b/Samples/Tutorials/Tuto04SignalSlot/rc/plugin.xml
@@ -0,0 +1,131 @@
+<plugin id="Tuto04SignalSlot" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>tutoSignalSlotConfig</id>
+        <config>
+
+            <!-- The main data object is ::fwData::Mesh. -->
+            <object type="::fwData::Mesh">
+
+                <service uid="myFrame" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>tutoSignalSlot</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto04SignalSlot_0-1/tuto.ico</icon>
+                            <minSize width="720" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="myDefaultView" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="myMenuFile" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Default view service:
+                    This service defines the view layout. The type '::fwGui::CardinalLayoutManager' represents a main
+                    central view and other views at the 'right', 'left', 'bottom' or 'top'.
+                    Here the application contains a central view at the right.
+
+                    Each <view> declared into the <layout> tag, must have its associated <view> into the <registry> tag.
+                    A minimum window height and a width are given to the two non-central views.
+                -->
+                <service uid="myDefaultView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view caption="Rendering 1" align="center" />
+                            <view caption="Rendering 2" align="right" minWidth="400" minHeight="100" />
+                            <view caption="Rendering 3" align="right" minWidth="400" minHeight="100" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="myRendering1" start="yes" />
+                        <view sid="myRendering2" start="yes" />
+                        <view sid="myRendering3" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="myMenuFile" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open file" shortcut="Ctrl+O" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="actionOpenFile" start="yes" />
+                        <menuItem sid="actionQuit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="actionOpenFile" impl="::gui::action::SStarter">
+                    <start uid="myReaderPathFile" />
+                </service>
+
+                <service uid="actionQuit" impl="::gui::action::SQuit" type="::fwGui::IActionSrv" />
+
+                <service uid="myReaderPathFile" impl="::uiIO::editor::SIOSelector">
+                    <type mode="reader" /><!-- mode is optional (by default it is "reader") -->
+                </service>
+
+                <!--
+                    Visualization services:
+                    We have three rendering service representing a 3D scene displaying the loaded mesh. The scene are
+                    shown in the windows defines in 'view' service.
+                -->
+                <service uid="myRendering1" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
+                <service uid="myRendering2" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
+                <service uid="myRendering3" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
+
+                <!--
+                    Each 3D scene owns a 3D camera that can be moved by the user on clicking in the scene.
+                    - When the camera moved, a signal 'camUpdated' is emitted with the new camera information (position,
+                    focal, view up).
+                    - To update the camera without clicking, you could called the slot 'updateCamPosition'
+
+                    Here, we connect each rendering service signal 'camUpdated' to the others service slot
+                    'updateCamPosition', so the cameras are synchronized in each scene.
+                -->
+                <connect>
+                    <signal>myRendering1/camUpdated</signal>
+                    <slot>myRendering2/updateCamPosition</slot>
+                    <slot>myRendering3/updateCamPosition</slot>
+                </connect>
+
+                <connect>
+                    <signal>myRendering2/camUpdated</signal>
+                    <slot>myRendering1/updateCamPosition</slot>
+                    <slot>myRendering3/updateCamPosition</slot>
+                </connect>
+
+                <connect>
+                    <signal>myRendering3/camUpdated</signal>
+                    <slot>myRendering2/updateCamPosition</slot>
+                    <slot>myRendering1/updateCamPosition</slot>
+                </connect>
+
+                <start uid="myFrame" />
+            </object>
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto05MesherB/rc/tuto.ico b/Samples/Tutorials/Tuto04SignalSlot/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto05MesherB/rc/tuto.ico
rename to Samples/Tutorials/Tuto04SignalSlot/rc/tuto.ico
diff --git a/Apps/Tuto05MesherB/CMakeLists.txt b/Samples/Tutorials/Tuto05Mesher/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto05MesherB/CMakeLists.txt
rename to Samples/Tutorials/Tuto05Mesher/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto05Mesher/Properties.cmake b/Samples/Tutorials/Tuto05Mesher/Properties.cmake
new file mode 100644
index 0000000..0395e47
--- /dev/null
+++ b/Samples/Tutorials/Tuto05Mesher/Properties.cmake
@@ -0,0 +1,23 @@
+
+set( NAME Tuto05Mesher )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioVTK
+    visuVTK
+    visuVTKQt
+    uiIO
+    vtkSimpleNegato
+    vtkSimpleMesh
+    opVTKMesh # provides services to generate a mesh from an image.
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES MesherConfig)
diff --git a/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml b/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml
new file mode 100644
index 0000000..9f88488
--- /dev/null
+++ b/Samples/Tutorials/Tuto05Mesher/rc/plugin.xml
@@ -0,0 +1,180 @@
+<plugin id="Tuto05Mesher" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>MesherConfig</id>
+        <config>
+
+
+            <!--
+                The main data object is ::fwData::Composite.
+                A Composite, can contains sub-objects associated to a key.
+            -->
+            <object type="::fwData::Composite">
+
+                <!-- Frame & View -->
+
+                <service uid="myFrame" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>Mesher</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto05Mesher_0-1/tuto.ico</icon>
+                            <minSize width="800" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="myDefaultView" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Default view service:
+                    The type '::fwGui::LineLayoutManager' represents a layout where the view are aligned
+                    horizontally or vertically (set orientation value 'horizontal' or 'vertical').
+                    It is possible to add a 'proportion' attribute for the <view> to defined the proportion
+                    used by the view compared to the others.
+                -->
+                <service uid="myDefaultView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view caption="Image view" />
+                            <view caption="Mesh view" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="RenderingImage" start="yes" />
+                        <view sid="RenderingMesh" start="yes" />
+                    </registry>
+                </service>
+
+
+                <!-- Menu Bar, Menus & Actions -->
+
+
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                            <menu name="Mesher" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menuFile" start="yes" />
+                        <menu sid="menuMesher" start="yes" />
+                    </registry>
+                </service>
+
+
+                <service uid="menuFile" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open image file" shortcut="Ctrl+O" />
+                            <menuItem name="Save image" />
+                            <separator />
+                            <menuItem name="Open mesh file" shortcut="Ctrl+M" />
+                            <menuItem name="Save mesh" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="actionOpenImageFile" start="yes" />
+                        <menuItem sid="actionSaveImageFile" start="yes" />
+                        <menuItem sid="actionOpenMeshFile" start="yes" />
+                        <menuItem sid="actionSaveMeshFile" start="yes" />
+                        <menuItem sid="actionQuit" start="yes" />
+                    </registry>
+                </service>
+
+
+                <service uid="menuMesher" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Compute Mesh (VTK)" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="actionCreateVTKMesh" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="actionQuit" impl="::gui::action::SQuit" />
+
+                <service uid="actionOpenImageFile" impl="::gui::action::SStarter">
+                    <start uid="readerPathImageFile" />
+                </service>
+
+                <service uid="actionSaveImageFile" impl="::gui::action::SStarter">
+                    <start uid="writerImageFile" />
+                </service>
+
+                <service uid="actionOpenMeshFile" impl="::gui::action::SStarter">
+                    <start uid="readerPathMeshFile" />
+                </service>
+
+                <service uid="actionSaveMeshFile" impl="::gui::action::SStarter">
+                    <start uid="writerMeshFile" />
+                </service>
+
+                <service uid="actionCreateVTKMesh" impl="::opVTKMesh::action::SMeshCreation">
+                    <image uid="myImageUID" />
+                    <mesh uid="myMeshUID" />
+                    <percentReduction value="0" />
+                </service>
+
+
+                <!-- Image object associated to the key 'myImage' -->
+                <item key="myImage">
+                    <object uid="myImageUID" type="::fwData::Image">
+
+                        <!--
+                            Services associated to the Image data :
+                            Visualization, reading and writing service creation.
+                        -->
+                        <service uid="RenderingImage" impl="::vtkSimpleNegato::SRenderer" autoConnect="yes" />
+
+                        <service uid="readerPathImageFile" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+
+                        <service uid="writerImageFile" impl="::uiIO::editor::SIOSelector">
+                            <type mode="writer" />
+                        </service>
+
+                    </object>
+                </item>
+
+                <!-- Mesh object associated to the key 'myMesh' -->
+                <item key="myMesh">
+                    <object uid="myMeshUID" type="::fwData::Mesh">
+
+                        <!--
+                            Services associated to the Mesh data :
+                            Visualization, reading and writing service creation.
+                        -->
+                        <service uid="RenderingMesh" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
+
+                        <service uid="readerPathMeshFile" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+
+                        <service uid="writerMeshFile" impl="::uiIO::editor::SIOSelector">
+                            <type mode="writer" />
+                        </service>
+
+                    </object>
+                </item>
+
+                <start uid="myFrame" />
+
+            </object>
+
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto05MesherC/rc/tuto.ico b/Samples/Tutorials/Tuto05Mesher/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto05MesherC/rc/tuto.ico
rename to Samples/Tutorials/Tuto05Mesher/rc/tuto.ico
diff --git a/Apps/Tuto05MesherC/CMakeLists.txt b/Samples/Tutorials/Tuto06Filter/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto05MesherC/CMakeLists.txt
rename to Samples/Tutorials/Tuto06Filter/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto06Filter/Properties.cmake b/Samples/Tutorials/Tuto06Filter/Properties.cmake
new file mode 100644
index 0000000..e4142a2
--- /dev/null
+++ b/Samples/Tutorials/Tuto06Filter/Properties.cmake
@@ -0,0 +1,22 @@
+
+set( NAME Tuto06Filter )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioVTK
+    uiIO
+    visuVTK
+    visuVTKQt
+    vtkSimpleNegato
+    opImageFilter # bundle containing the action to performs a threshold
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES FilterConfig)
diff --git a/Samples/Tutorials/Tuto06Filter/rc/plugin.xml b/Samples/Tutorials/Tuto06Filter/rc/plugin.xml
new file mode 100644
index 0000000..3ac46be
--- /dev/null
+++ b/Samples/Tutorials/Tuto06Filter/rc/plugin.xml
@@ -0,0 +1,130 @@
+<plugin id="Tuto06Filter" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>FilterConfig</id>
+        <config>
+
+            <!-- Root object -->
+            <object type="::fwData::Composite">
+
+                <!-- Windows & Main Menu -->
+                <service uid="myFrame" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>Filter</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto06Filter_0-1/tuto.ico</icon>
+                            <minSize width="720" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="myDefaultView" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                            <menu name="Filter" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menuFile" start="yes" />
+                        <menu sid="menuFilter" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="myDefaultView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="center" />
+                            <view align="right" minWidth="500" minHeight="100" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="RenderingImage1" start="yes" />
+                        <view sid="RenderingImage2" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- Menus -->
+                <service uid="menuFile" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open image file" shortcut="Ctrl+O" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="actionOpenImageFile" start="yes" />
+                        <menuItem sid="actionQuit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menuFilter" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Compute Image Filter" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="actionImageFilter" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- Actions -->
+                <service uid="actionQuit" impl="::gui::action::SQuit" />
+                <service uid="actionOpenImageFile" impl="::gui::action::SStarter" >
+                    <start uid="readerPathImageFile" />
+                </service>
+
+                <!--
+                    Filter action:
+                    This action applies a threshold filter. The source image is 'myImage1' and the
+                    output image is 'myImage2'.
+                    The two images are declared below.
+                 -->
+                <service uid="actionImageFilter" impl="::opImageFilter::action::SThreshold">
+                    <imageIn uid="myImage1" />
+                    <imageOut uid="myImage2" />
+                </service>
+
+                <!-- Image declaration: -->
+
+                <!--
+                    1st Image of the composite:
+                    This is the source image for the filtering.
+                -->
+                <item key="myImage1">
+                    <object uid="myImage1" type="::fwData::Image">
+                        <service uid="RenderingImage1" impl="::vtkSimpleNegato::SRenderer" autoConnect="yes" />
+                        <service uid="readerPathImageFile" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+                    </object>
+                </item>
+
+                <!--
+                    2nd Image of the composite:
+                    This is the output image for the filtering.
+                -->
+                <item key="myImage2">
+                    <object uid="myImage2" type="::fwData::Image">
+                        <service uid="RenderingImage2" impl="::vtkSimpleNegato::SRenderer" autoConnect="yes" />
+                    </object>
+                </item>
+
+                <start uid="myFrame" />
+
+            </object>
+
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto06Filter/rc/tuto.ico b/Samples/Tutorials/Tuto06Filter/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto06Filter/rc/tuto.ico
rename to Samples/Tutorials/Tuto06Filter/rc/tuto.ico
diff --git a/Apps/Tuto14MeshGenerator/CMakeLists.txt b/Samples/Tutorials/Tuto08GenericScene/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto14MeshGenerator/CMakeLists.txt
rename to Samples/Tutorials/Tuto08GenericScene/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto08GenericScene/Properties.cmake b/Samples/Tutorials/Tuto08GenericScene/Properties.cmake
new file mode 100644
index 0000000..559fca5
--- /dev/null
+++ b/Samples/Tutorials/Tuto08GenericScene/Properties.cmake
@@ -0,0 +1,25 @@
+
+set( NAME Tuto08GenericScene )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( UNIQUE TRUE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioData # contains reader/writer for mesh (.trian) or matrix (.trf)
+    ioVTK
+    uiIO
+    uiVisuQt # contains several editors for visualization
+    uiImageQt # contains several editors on image
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor # contains adaptors for the generic scene
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Tuto08GenericScene)
diff --git a/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml b/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml
new file mode 100644
index 0000000..e0386ee
--- /dev/null
+++ b/Samples/Tutorials/Tuto08GenericScene/rc/plugin.xml
@@ -0,0 +1,290 @@
+<!--
+    This tutorial shows a VTK scene containing a 3D image and a textured mesh.
+    To use this application, you should open a 3D image, a mesh and/or a 2D texture image.
+-->
+<plugin id="Tuto08GenericScene" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Tuto08GenericScene</id>
+        <config>
+
+            <object type="::fwData::Composite">
+                <service uid="MyIHM" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>Tuto08GenericScene</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto08GenericScene_0-1/tuto.ico</icon>
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="mainView" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- Status bar used to display the progress bar for reading -->
+                <service uid="progress_statusbar" impl="::gui::editor::SJobBar" />
+
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menu_File" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menu_File" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open image" shortcut="Ctrl+I" />
+                            <menuItem name="Open mesh" shortcut="Ctrl+M" />
+                            <menuItem name="Open texture" shortcut="Ctrl+T" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_openImage" start="yes" />
+                        <menuItem sid="action_openMesh" start="yes" />
+                        <menuItem sid="action_openTexture" start="yes" />
+                        <menuItem sid="action_quit" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- Actions to call readers -->
+                <service uid="action_openImage" impl="::gui::action::SStarter">
+                    <start uid="imageReader" />
+                </service>
+                <service uid="action_openMesh" impl="::gui::action::SStarter">
+                    <start uid="meshReader" />
+                </service>
+                <service uid="action_openTexture" impl="::gui::action::SStarter">
+                    <start uid="textureReader" />
+                </service>
+
+                <!-- Quit action -->
+                <service uid="action_quit" impl="::gui::action::SQuit" />
+
+                <!-- main view -->
+                <service uid="mainView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="center" />
+                            <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="genericScene" start="yes" />
+                        <view sid="editorsView" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- View for editors to update image visualization -->
+                <service uid="editorsView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="0" minWidth="30" />
+                            <view proportion="0" minWidth="50" />
+                            <view proportion="1" />
+                            <view proportion="0" minWidth="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="sliceListEditor" start="yes" />
+                        <view sid="showScanEditor" start="yes" />
+                        <view sid="sliderIndexEditor" start="yes" />
+                        <view sid="snapshotScene1Editor" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Editor used for scene snapshot:
+                    It allows to select the snapshot filename and emits a "snapped" signal with this path.
+                -->
+                <service uid="snapshotScene1Editor" impl="::uiVisu::SnapshotEditor" />
+
+                <!--
+                    Generic scene:
+                    This scene display a 3D image and a textured mesh.
+                -->
+                <service uid="genericScene" impl="::fwRenderVTK::SRender" autoConnect="yes">
+                    <scene>
+                        <!-- Image picker -->
+                        <picker id="myPicker" vtkclass="fwVtkCellPicker" />
+                        <!-- Renderer -->
+                        <renderer id="default" background="0.0" />
+
+                        <!-- Mesh adapor -->
+                        <adaptor id="meshAdaptor" class="::visuVTKAdaptor::Mesh" objectId="mesh">
+                            <config renderer="default" picker="" uvgen="sphere" texture="textureAdaptor" />
+                        </adaptor>
+
+                        <!-- Texture adaptor, used by mesh adaptor -->
+                        <adaptor id="textureAdaptor" class="::visuVTKAdaptor::Texture" objectId="textureImage">
+                            <config renderer="default" picker="" filtering="linear" wrapping="repeat" />
+                        </adaptor>
+
+                        <!-- 3D image negatoscope adaptor -->
+                        <adaptor id="imageAdaptor" uid="imageAdaptorUID" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                            <config renderer="default" picker="myPicker" mode="3d" slices="3" sliceIndex="axial" />
+                        </adaptor>
+
+                        <!-- Snapshot adaptor: create a snapshot of the scene. It has a slot "snap" that receives a path -->
+                        <adaptor id="snapshotAdaptor" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                            <config renderer="default" />
+                        </adaptor>
+
+                        <!--
+                            Connection for snapshot:
+                            connect the editor signal "snapped" to the adaptor slot "snap"
+                        -->
+                        <connect>
+                            <signal>snapshotScene1Editor/snapped</signal>
+                            <slot>snapshotUID/snap</slot>
+                        </connect>
+
+                        <!--
+                            Connection for 3D image slice:
+                            Connect the button (showScanEditor) signal "toggled" to the image adaptor (MPRNegatoScene3D)
+                            slot "showSlice", this signals/slots contains a boolean.
+                            The image slices will be show or hide when the button is checked/unchecked.
+
+                            The "waitForKey" attribut means that the signal and slot are connected only if the key
+                            "image" is present in the scene composite. It is recommanded to used because the adaptors
+                            exists only if the object is present.
+
+                        -->
+                        <connect waitForKey="image">
+                            <signal>showScanEditor/toggled</signal>
+                            <slot>imageAdaptorUID/showSlice</slot>
+                        </connect>
+
+                        <!--
+                            Connection for 3D image slice:
+                            Connect the menu button (sliceListEditor) signal "selected" to the image adaptor
+                            (MPRNegatoScene3D) slot "updateSliceMode", this signals/slots contains an integer.
+                            This integer defines the number of slice to show (0, 1 or 3).
+                        -->
+                        <connect waitForKey="image">
+                            <signal>sliceListEditor/selected</signal>
+                            <slot>imageAdaptorUID/updateSliceMode</slot>
+                        </connect>
+
+                    </scene>
+                </service>
+
+
+                <!-- *************************************************
+                                    Displayed objects
+                    ************************************************* -->
+
+                <!-- Image displayed in the scene -->
+                <item key="image">
+                    <object uid="imageUID" type="::fwData::Image">
+
+                        <service uid="imageReader" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+
+                        <!--
+                            Generic editor representing a menu button.
+                            It send signal with the current selected item.
+                        -->
+                        <service uid="sliceListEditor" impl="::guiQt::editor::SSelectionMenuButton">
+                            <toolTip>Manage slice visibility</toolTip><!-- button tooltip -->
+                            <selected>3</selected><!-- Default selection -->
+                            <items>
+                                <item text="One slice" value="1" /><!-- first item, if selected the emitted value is "1" -->
+                                <item text="three slices" value="3" /><!-- second item, if selected the emitted value is "1" -->
+                            </items>
+                        </service>
+                        <!--
+                            Generic editor representing a simple button with an icon.
+                            The button can be checkable. In this case it can have a second icon.
+                            - It emits a signal "clicked" when it is clicked.
+                            - It emits a signal "toggled" when it is checked/unchecked.
+
+                            Here, this editor is used to show or hide the image. It is connected to the image adaptor.
+                        -->
+                        <service uid="showScanEditor" impl="::guiQt::editor::SSignalButton">
+                            <config>
+                                <checkable>true</checkable>
+                                <icon>@BUNDLE_PREFIX@/media_0-1/icons/sliceHide.png</icon>
+                                <icon2>@BUNDLE_PREFIX@/media_0-1/icons/sliceShow.png</icon2>
+                                <iconWidth>40</iconWidth>
+                                <iconHeight>16</iconHeight>
+                                <checked>true</checked>
+                            </config>
+                        </service>
+
+                        <!-- Editor representing a slider to navigate into image slices -->
+                        <service uid="sliderIndexEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                            <sliceIndex>axial</sliceIndex>
+                        </service>
+
+                    </object>
+                </item>
+
+                <!-- texture displayed on the mesh -->
+                <item key="textureImage">
+                    <object uid="textureUID" type="::fwData::Image">
+                        <service uid="textureReader" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+                    </object>
+                </item>
+
+                <!-- Mesh displayed in the scene -->
+                <item key="mesh">
+                    <object uid="meshUID" type="::fwData::Mesh">
+                        <service uid="meshReader" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+                    </object>
+                </item>
+
+
+                <!-- Connects readers to status bar service -->
+                <connect>
+                    <signal>meshReader/jobCreated</signal>
+                    <slot>progress_statusbar/showJob</slot>
+                </connect>
+
+                <connect>
+                    <signal>imageReader/jobCreated</signal>
+                    <slot>progress_statusbar/showJob</slot>
+                </connect>
+
+                <connect>
+                    <signal>textureReader/jobCreated</signal>
+                    <slot>progress_statusbar/showJob</slot>
+                </connect>
+
+                <!--
+                    Connects showScanEditor signal "toggled" to sliceListEditor slot "setEnable", this signal and slot
+                    contains a boolean, so the sliceListEditor can be disabled when the image is not displayed.
+                -->
+                <connect>
+                    <signal>showScanEditor/toggled</signal>
+                    <slot>sliceListEditor/setEnabled</slot>
+                </connect>
+
+                <start uid="MyIHM" />
+                <start uid="progress_statusbar" />
+
+            </object>
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto07LoaderForExternalData/rc/tuto.ico b/Samples/Tutorials/Tuto08GenericScene/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto07LoaderForExternalData/rc/tuto.ico
rename to Samples/Tutorials/Tuto08GenericScene/rc/tuto.ico
diff --git a/Apps/Tuto15Multithread/CMakeLists.txt b/Samples/Tutorials/Tuto09MesherWithGenericScene/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto15Multithread/CMakeLists.txt
rename to Samples/Tutorials/Tuto09MesherWithGenericScene/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto09MesherWithGenericScene/Properties.cmake b/Samples/Tutorials/Tuto09MesherWithGenericScene/Properties.cmake
new file mode 100644
index 0000000..60854d2
--- /dev/null
+++ b/Samples/Tutorials/Tuto09MesherWithGenericScene/Properties.cmake
@@ -0,0 +1,26 @@
+
+set( NAME Tuto09MesherWithGenericScene )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( UNIQUE TRUE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioData
+    ioVTK
+    uiIO
+    uiVisuQt
+    uiReconstructionQt # contains editors to manage reconstructions
+    uiMedDataQt # contains editors to manage model series
+    visuVTKAdaptor
+    visuVTKQt
+    opVTKMesh
+    fwlauncher
+    appXml2
+)
+
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES Tuto09MesherWithGenericScene)
diff --git a/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml b/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml
new file mode 100644
index 0000000..1444740
--- /dev/null
+++ b/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/plugin.xml
@@ -0,0 +1,294 @@
+<!--
+    This tutorial shows a VTK scene containing a 3D image and a 3D model.
+    To use this application, you should open a 3D image mask of an organ. An used the mesher actions to creates a
+    reconstruction. Then, you can update the organ color, transparence, ... using the editors in the right.
+ -->
+<plugin id="Tuto09MesherWithGenericScene" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>Tuto09MesherWithGenericScene</id>
+        <config>
+
+            <!-- Objects declaration -->
+            <object uid="modelSeriesId" type="::fwMedData::ModelSeries" />
+            <object uid="imageId" type="::fwData::Image" />
+            <object uid="reconstructionId" type="::fwData::Reconstruction" src="deferred" />
+
+            <!-- *************************************************************************************************** -->
+            <!-- UI services -->
+            <!-- *************************************************************************************************** -->
+            <service uid="mainFrame" type="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>Tuto09MesherWithGenericScene</name>
+                        <icon>@BUNDLE_PREFIX@/Tuto09MesherWithGenericScene_0-1/tuto.ico</icon>
+                    </frame>
+                    <menuBar />
+                </gui>
+                <registry>
+                    <menuBar sid="menuBar" start="yes" />
+                    <view sid="mainView" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="menuBar" type="::gui::aspect::SDefaultMenuBar">
+                <gui>
+                    <layout>
+                        <menu name="File" />
+                        <menu name="Mesher" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menu sid="menu_File" start="yes" />
+                    <menu sid="menu_Mesher" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="mainView" type="::gui::view::SDefaultView">
+                <gui>
+                    <layout type="::fwGui::CardinalLayoutManager">
+                        <view align="center" minWidth="200" />
+                        <view align="right" minWidth="200" minHeight="200" position="0" />
+                        <view align="right" minWidth="200" minHeight="80" position="1" />
+                        <view align="right" minWidth="200" minHeight="200" position="2" />
+                        <view align="bottom" minHeight="30" resizable="no" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="genericScene" start="yes" />
+                    <view sid="listOrganEditor" start="yes" />
+                    <view sid="organMaterialEditor" start="no" />
+                    <view sid="representationEditor" start="no" />
+                    <view sid="sceneEditorsView" start="yes" />
+                </registry>
+            </service>
+            <service uid="sceneEditorsView" type="::gui::view::SDefaultView">
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager">
+                        <orientation value="horizontal" />
+                        <view proportion="0" minWidth="30" />
+                        <view proportion="0" minWidth="50" />
+                        <view proportion="1" />
+                        <view proportion="0" minWidth="30" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="sliceListEditor" start="yes" />
+                    <view sid="showScanEditor" start="yes" />
+                    <view sid="sliderIndexEditor" start="yes" />
+                    <view sid="snapshotScene1Editor" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="progress_statusbar" type="::gui::editor::SJobBar" />
+
+            <service uid="snapshotScene1Editor" type="::uiVisu::SnapshotEditor" />
+
+            <service uid="menu_File" type="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Open image" shortcut="Ctrl+O" />
+                        <menuItem name="Save meshes" shortcut="Ctrl+S" />
+                        <separator />
+                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="action_openImage" start="yes" />
+                    <menuItem sid="action_saveModelSeries" start="yes" />
+                    <menuItem sid="action_quit" start="yes" />
+                </registry>
+            </service>
+            <service uid="menu_Mesher" type="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Create Mesh 50" />
+                        <menuItem name="Create Mesh 80" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="action_createMesh50" start="yes" />
+                    <menuItem sid="action_createMesh80" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="action_openImage" type="::gui::action::SStarter">
+                <start uid="imageReader" />
+            </service>
+            <service uid="action_saveModelSeries" type="::gui::action::SStarter">
+                <start uid="modelSeriesWriter" />
+            </service>
+            <service uid="action_quit" type="::gui::action::SQuit" />
+
+            <service uid="action_createMesh50" type="::gui::action::SStarter">
+                <start_if_exists uid="mesher50ServiceUID" />
+            </service>
+            <service uid="action_createMesh80" type="::gui::action::SStarter">
+                <start_if_exists uid="mesher80ServiceUID" />
+            </service>
+            <service uid="sliceListEditor" type="::guiQt::editor::SSelectionMenuButton">
+                <toolTip>Manage slice visibility</toolTip>
+                <selected>3</selected>
+                <items>
+                    <item text="One slice" value="1" />
+                    <item text="three slices" value="3" />
+                </items>
+            </service>
+            <service uid="showScanEditor" type="::guiQt::editor::SSignalButton">
+                <config>
+                    <checkable>true</checkable>
+                    <icon>@BUNDLE_PREFIX@/media_0-1/icons/sliceHide.png</icon>
+                    <icon2>@BUNDLE_PREFIX@/media_0-1/icons/sliceShow.png</icon2>
+                    <iconWidth>40</iconWidth>
+                    <iconHeight>16</iconHeight>
+                    <checked>true</checked>
+                </config>
+            </service>
+
+            <service uid="listOrganEditor" type="::uiMedData::editor::SModelSeriesList" autoConnect="yes">
+                <in key="modelSeries" uid="modelSeriesId" />
+                <columns>
+                    <organ_name>@organ_name</organ_name>
+                </columns>
+            </service>
+
+            <service uid="sliderIndexEditor" type="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                <in key="image" uid="imageId" />
+                <sliceIndex>axial</sliceIndex>
+            </service>
+
+            <!-- *************************************************************************************************** -->
+            <!-- Meshers services -->
+            <!-- *************************************************************************************************** -->
+            <service uid="mesher50ServiceUID" type="::opVTKMesh::SVTKMesher">
+                <in key="image" uid="imageId" />
+                <inout key="modelSeries" uid="modelSeriesId" />
+                <config>
+                    <percentReduction>50</percentReduction>
+                </config>
+            </service>
+
+            <service uid="mesher80ServiceUID" type="::opVTKMesh::SVTKMesher">
+                <in key="image" uid="imageId" />
+                <inout key="modelSeries" uid="modelSeriesId" />
+                <config>
+                    <percentReduction>80</percentReduction>
+                </config>
+            </service>
+
+            <!-- *************************************************************************************************** -->
+            <!-- Reader services -->
+            <!-- *************************************************************************************************** -->
+            <service uid="modelSeriesWriter" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="modelSeriesId" />
+                <type mode="writer" />
+            </service>
+
+            <service uid="imageReader" type="::uiIO::editor::SIOSelector">
+                <inout key="target" uid="imageId" />
+                <type mode="reader" />
+            </service>
+
+            <!-- This service convert a simple fwData::Image to medical Image -->
+            <service uid="medicaImageConverter" type="::ctrlSelection::MedicalImageSrv" autoConnect="yes">
+                <inout key="image" uid="imageId" />
+            </service>
+
+            <service uid="updaterReconstUID" type="::ctrlSelection::updater::SObjFromSlot">
+                <out key="object" uid="reconstructionId" />
+            </service>
+
+            <service uid="organMaterialEditor" type="::uiReconstruction::OrganMaterialEditor" autoConnect="yes">
+                <inout key="reconstruction" uid="reconstructionId" />
+            </service>
+
+            <service uid="representationEditor" type="::uiReconstruction::RepresentationEditor" autoConnect="yes">
+                <inout key="reconstruction" uid="reconstructionId" />
+            </service>
+
+            <service uid="genericScene" type="::fwRenderVTK::SRender" autoConnect="yes" >
+                <in key="image" uid="imageId" />
+                <in key="modelSeries" uid="modelSeriesId" />
+                <scene>
+                    <picker id="myPicker" vtkclass="fwVtkCellPicker" />
+                    <renderer id="default" background="0.0" />
+                    <adaptor id="modelSeriesAdaptor" uid="modelSeriesAdaptorUid" class="::visuVTKAdaptor::ModelSeries" objectId="modelSeries">
+                        <config renderer="default" picker="" />
+                    </adaptor>
+                    <adaptor id="MPRNegato3D" uid="MPRNegatoScene3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                        <config renderer="default" picker="myPicker" mode="3D" slices="3" sliceIndex="axial" />
+                    </adaptor>
+                    <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                        <config renderer="default" />
+                    </adaptor>
+
+                    <proxy channel="modelSeriesNormalChannel">
+                        <slot>modelSeriesAdaptorUid/updateNormalMode</slot>
+                    </proxy>
+
+                        <!--
+                            Connection for snapshot:
+                            connect the editor signal "snapped" to the adaptor slot "snap"
+                        -->
+                        <connect>
+                            <signal>snapshotScene1Editor/snapped</signal>
+                            <slot>snapshotUID/snap</slot>
+                        </connect>
+
+                        <!--
+                            Connection for 3D image slice:
+                            Connect the button (showScanEditor) signal "toggled" to the image adaptor (MPRNegatoScene3D)
+                            slot "showSlice", this signals/slots contains a boolean.
+                            The image slices will be show or hide when the button is checked/unchecked.
+
+                            The "waitForKey" attribut means that the signal and slot are connected only if the key
+                            "image" is present in the scene composite. It is recommanded to used because the adaptors
+                            exists only if the object is present.
+
+                        -->
+                        <connect>
+                            <signal>showScanEditor/toggled</signal>
+                            <slot>MPRNegatoScene3D/showSlice</slot>
+                        </connect>
+
+                        <!--
+                            Connection for 3D image slice:
+                            Connect the menu button (sliceListEditor) signal "selected" to the image adaptor
+                            (MPRNegatoScene3D) slot "updateSliceMode", this signals/slots contains an integer.
+                            This integer defines the number of slice to show (0, 1 or 3).
+                        -->
+                        <connect>
+                            <signal>sliceListEditor/selected</signal>
+                            <slot>MPRNegatoScene3D/updateSliceMode</slot>
+                        </connect>
+                </scene>
+            </service>
+
+            <connect>
+                <signal>modelSeriesWriter/jobCreated</signal>
+                <slot>progress_statusbar/showJob</slot>
+            </connect>
+
+            <connect>
+                <signal>listOrganEditor/reconstructionSelected</signal>
+                <slot>updaterReconstUID/addOrSwap</slot>
+            </connect>
+
+            <connect channel="modelSeriesNormalChannel">
+                <signal>representationEditor/normalsModeModified</signal>
+            </connect>
+
+            <start uid="mainFrame" />
+            <start uid="progress_statusbar" />
+            <start uid="updaterReconstUID" />
+            <start uid="medicaImageConverter" />
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto08GenericScene/rc/tuto.ico b/Samples/Tutorials/Tuto09MesherWithGenericScene/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto08GenericScene/rc/tuto.ico
rename to Samples/Tutorials/Tuto09MesherWithGenericScene/rc/tuto.ico
diff --git a/Apps/TutoGui/CMakeLists.txt b/Samples/Tutorials/Tuto10MatrixTransformInGS/CMakeLists.txt
similarity index 100%
rename from Apps/TutoGui/CMakeLists.txt
rename to Samples/Tutorials/Tuto10MatrixTransformInGS/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto10MatrixTransformInGS/Properties.cmake b/Samples/Tutorials/Tuto10MatrixTransformInGS/Properties.cmake
new file mode 100644
index 0000000..41833e2
--- /dev/null
+++ b/Samples/Tutorials/Tuto10MatrixTransformInGS/Properties.cmake
@@ -0,0 +1,23 @@
+
+set( NAME Tuto10MatrixTransformInGS )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioData
+    ioVTK
+    uiIO
+    uiVisuQt
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Tuto10MatrixTransformInGS)
diff --git a/Apps/Tuto10MatrixTransformInGS/rc/cube.trian b/Samples/Tutorials/Tuto10MatrixTransformInGS/rc/cube.trian
similarity index 100%
rename from Apps/Tuto10MatrixTransformInGS/rc/cube.trian
rename to Samples/Tutorials/Tuto10MatrixTransformInGS/rc/cube.trian
diff --git a/Samples/Tutorials/Tuto10MatrixTransformInGS/rc/plugin.xml b/Samples/Tutorials/Tuto10MatrixTransformInGS/rc/plugin.xml
new file mode 100644
index 0000000..8cc232b
--- /dev/null
+++ b/Samples/Tutorials/Tuto10MatrixTransformInGS/rc/plugin.xml
@@ -0,0 +1,246 @@
+<!--
+    This tutorial explains how to perform matrix transformation using the generic scene.
+
+    To use this application, you need to load a mesh.
+-->
+<plugin id="Tuto10MatrixTransformInGS" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Tuto10MatrixTransformInGS</id>
+        <config>
+
+            <object type="::fwData::Composite">
+
+                <service uid="myFrame" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>Tuto10MatrixTransformInGS</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto10MatrixTransformInGS_0-1/tuto.ico</icon>
+                            <minSize width="800" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="mainView" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menu_File" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menu_File" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="OpenFile" shortcut="Ctrl+O" />
+                            <separator />
+                            <menuItem name="Quit" shortcut="Ctrl+Q" specialAction="QUIT" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_openFile" start="yes" />
+                        <menuItem sid="action_quit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="action_openFile" impl="::gui::action::SStarter">
+                    <start uid="myReaderPathFile" />
+                </service>
+
+                <service uid="action_quit" impl="::gui::action::SQuit" />
+
+                <service uid="mainView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="center" />
+                            <view align="bottom" minHeight="40" position="0" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="genericScene" start="yes" />
+                        <view sid="matrixEditor" start="yes" />
+                    </registry>
+                </service>
+
+                <!--
+                    Generic scene:
+                    This scene shows four times the same mesh but with a different matrix. It manages multiples
+                    transformation matrices.
+                -->
+                <service uid="genericScene" impl="::fwRenderVTK::SRender" autoConnect="yes">
+                    <scene>
+
+                        <renderer id="default" background="0.0" />
+
+                        <!-- Declare the vtk transform to use (it is optional) -->
+                        <vtkObject id="mat1" class="vtkTransform" />
+                        <vtkObject id="mat2" class="vtkTransform" />
+                        <vtkObject id="mat3" class="vtkTransform" />
+                        <vtkObject id="mat4" class="vtkTransform" />
+                        <vtkObject id="mat5" class="vtkTransform" />
+
+                        <!--
+                            Declare the mat6 as the concatenation of mat5, mat1 and mat4
+                            mat6 = mat5 x mat1 x mat4
+                        -->
+                        <vtkObject id="mat6" class="vtkTransform">
+                            <vtkTransform>
+                                <concatenate>mat5</concatenate>
+                                <concatenate>mat1</concatenate>
+                                <concatenate>mat4</concatenate>
+                            </vtkTransform>
+                        </vtkObject>
+
+                        <!-- mat7 = inv(mat5) x mat2 x mat5 x mat5 x mat5 x mat4 x mat4 -->
+                        <vtkObject id="mat7" class="vtkTransform">
+                            <vtkTransform>
+                                <concatenate inverse="yes">mat5</concatenate>
+                                <concatenate>mat2</concatenate>
+                                <concatenate>mat5</concatenate>
+                                <concatenate>mat5</concatenate>
+                                <concatenate>mat5</concatenate>
+                                <concatenate>mat4</concatenate>
+                                <concatenate>mat4</concatenate>
+                            </vtkTransform>
+                        </vtkObject>
+
+                        <!-- mat8 = mat3 x mat5 x mat4 x mat4 x mat4 -->
+                        <vtkObject id="mat8" class="vtkTransform">
+                            <vtkTransform>
+                                <concatenate>mat3</concatenate>
+                                <concatenate>mat5</concatenate>
+                                <concatenate>mat4</concatenate>
+                                <concatenate>mat4</concatenate>
+                                <concatenate>mat4</concatenate>
+                            </vtkTransform>
+                        </vtkObject>
+
+
+                        <!--
+                            Defines transform adaptors:
+                            This adaptor works on a ::fwData::TransformationMatrix3D and manages a vtkTransform. When
+                            the ::fwData::TransformationMatrix3D is modified, it updates the vtkTransform, and vice
+                            versa.
+                        -->
+                        <adaptor id="MatrixAdatorA" class="::visuVTKAdaptor::Transform" objectId="matrixA">
+                            <config renderer="default" picker="" transform="mat1" />
+                        </adaptor>
+
+                        <adaptor id="MatrixAdatorB" class="::visuVTKAdaptor::Transform" objectId="matrixB">
+                            <config renderer="default" picker="" transform="mat2" />
+                        </adaptor>
+
+                        <adaptor id="MatrixAdatorC" class="::visuVTKAdaptor::Transform" objectId="matrixC">
+                            <config renderer="default" picker="" transform="mat3" />
+                        </adaptor>
+
+                        <adaptor id="MatrixAdatorD" class="::visuVTKAdaptor::Transform" objectId="matrixD">
+                            <config renderer="default" picker="" transform="mat4" />
+                        </adaptor>
+
+                        <adaptor id="MatrixAdatorE" class="::visuVTKAdaptor::Transform" objectId="matrixE">
+                            <config renderer="default" picker="" transform="mat5" />
+                        </adaptor>
+
+                        <adaptor id="TMAdaptor1" class="::visuVTKAdaptor::Mesh" objectId="mesh">
+                            <config renderer="default" picker="" />
+                        </adaptor>
+
+                        <adaptor id="TMAdaptor2" class="::visuVTKAdaptor::Mesh" objectId="mesh">
+                            <config renderer="default" picker="" transform="mat6" />
+                        </adaptor>
+
+                        <adaptor id="TMAdaptor3" class="::visuVTKAdaptor::Mesh" objectId="mesh">
+                            <config renderer="default" picker="" transform="mat7" />
+                        </adaptor>
+
+                        <adaptor id="TMAdaptor4" class="::visuVTKAdaptor::Mesh" objectId="mesh">
+                            <config renderer="default" picker="" transform="mat8" />
+                        </adaptor>
+
+                    </scene>
+                </service>
+
+                <item key="matrixA">
+                    <object uid="matrixA" type="::fwData::TransformationMatrix3D">
+                        <matrix>
+                            <![CDATA[
+                                1 0 0 2
+                                0 1 0 0
+                                0 0 1 0
+                                0 0 0 1
+                            ]]>
+                        </matrix>
+                    </object>
+                </item>
+
+                <item key="matrixB">
+                    <object uid="matrixB" type="::fwData::TransformationMatrix3D">
+                        <matrix>
+                            <![CDATA[
+                                1 0 0 4
+                                0 1 0 0
+                                0 0 1 0
+                                0 0 0 1
+                            ]]>
+                        </matrix>
+                    </object>
+                </item>
+
+                <item key="matrixC">
+                    <object uid="matrixC" type="::fwData::TransformationMatrix3D">
+                        <matrix>
+                            <![CDATA[
+                                1 0 0 0
+                                0 1 0 0
+                                0 0 1 2
+                                0 0 0 1
+                            ]]>
+                        </matrix>
+                    </object>
+                </item>
+
+                <item key="matrixD">
+                    <object uid="matrixD" type="::fwData::TransformationMatrix3D">
+                        <matrix>
+                            <![CDATA[
+                                0.75 0    0    0
+                                0    0.75 0    0
+                                0    0    0.75 0
+                                0    0    0    1
+                            ]]>
+                        </matrix>
+                    </object>
+                </item>
+
+                <item key="matrixE">
+                    <object uid="matrixE" type="::fwData::TransformationMatrix3D">
+                        <service uid="matrixEditor" impl="::uiVisu::TransformationMatrixEditor" autoConnect="yes" />
+                    </object>
+                </item>
+
+                <item key="mesh">
+                    <object uid="mesh" type="::fwData::Mesh">
+                        <service uid="myReaderPathFile" impl="::uiIO::editor::SIOSelector" />
+                    </object>
+                </item>
+
+                <start uid="myFrame" />
+
+            </object>
+
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto09MesherWithGenericScene/rc/tuto.ico b/Samples/Tutorials/Tuto10MatrixTransformInGS/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto09MesherWithGenericScene/rc/tuto.ico
rename to Samples/Tutorials/Tuto10MatrixTransformInGS/rc/tuto.ico
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Samples/Tutorials/Tuto11LaunchBasicConfig/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Samples/Tutorials/Tuto11LaunchBasicConfig/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto11LaunchBasicConfig/Properties.cmake b/Samples/Tutorials/Tuto11LaunchBasicConfig/Properties.cmake
new file mode 100644
index 0000000..ba02377
--- /dev/null
+++ b/Samples/Tutorials/Tuto11LaunchBasicConfig/Properties.cmake
@@ -0,0 +1,22 @@
+
+set( NAME Tuto11LaunchBasicConfig )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioData
+    ioVTK
+    uiIO
+    visuVTK
+    visuVTKQt
+    vtkSimpleNegato
+    fwlauncher
+    appXml2
+)
+
+bundleParam(appXml2 PARAM_LIST config PARAM_VALUES TutoLaunchBasicConfig)
diff --git a/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/BasicFrameConfig.xml b/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/BasicFrameConfig.xml
new file mode 100644
index 0000000..529f87f
--- /dev/null
+++ b/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/BasicFrameConfig.xml
@@ -0,0 +1,45 @@
+<extension implements="::fwServices::registry::AppConfig2">
+    <id>BasicFrameConfig</id>
+    <parameters><!-- Declared the required parameters -->
+        <!--
+            CLOSE_CONFIG_CHANNEL is defined by SConfigLauncher. It allows to connect the frame signal "closed" to the
+            SConfigLauncher slot "stopConfig".
+            The default value "DummyChannel" is used if the paramter CLOSE_CONFIG_CHANNEL is not defined (for example if
+            the configuration is launched from another service.
+         -->
+        <param name="CLOSE_CONFIG_CHANNEL" default="DummyChannel" />
+        <!-- imageUid is defined by the previous configuration that called the SConfigLauncher. -->
+        <param name="imageUid" />
+    </parameters>
+    <config>
+
+        <object uid="${imageUid}" type="::fwData::Image" src="ref" />
+
+        <service uid="BasicViewerFrame" type="::gui::frame::SDefaultFrame">
+            <window onclose="notify" />
+            <gui>
+                <frame>
+                    <name>Basic frame config</name>
+                    <minSize width="900" height="600" />
+                </frame>
+            </gui>
+            <registry>
+                <view sid="SecondView" start="no" />
+            </registry>
+        </service>
+
+        <service uid="SecondView" type="::vtkSimpleNegato::SRenderer" autoConnect="yes" >
+            <in key="image" uid="${imageUid}" />
+        </service>
+
+        <connect channel="${CLOSE_CONFIG_CHANNEL}">
+            <signal>BasicViewerFrame/closed</signal>
+        </connect>
+
+        <start uid="BasicViewerFrame" />
+        <start uid="SecondView" />
+
+        <update uid="SecondView" />
+
+    </config>
+</extension>
diff --git a/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/plugin.xml b/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/plugin.xml
new file mode 100644
index 0000000..cd2e95c
--- /dev/null
+++ b/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/plugin.xml
@@ -0,0 +1,90 @@
+<plugin id="Tuto11LaunchBasicConfig" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <!-- Allows to include a xml file containing a sub-configuration -->
+    <xi:include href="BasicFrameConfig.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+
+    <extension implements="::fwServices::registry::AppConfig2">
+        <id>TutoLaunchBasicConfig</id>
+        <config>
+            <object uid="imageUid" type="::fwData::Image"/>
+
+            <service uid="mainFrame" type="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>Tuto 11 : Launch basic config</name>
+                        <icon>@BUNDLE_PREFIX@/Tuto11LaunchBasicConfig_0-1/tuto.ico</icon>
+                        <minSize width="800" height="600" />
+                    </frame>
+                    <menuBar />
+                </gui>
+                <registry>
+                    <menuBar sid="mainMenuBar" start="yes" />
+                    <view sid="mainView" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="mainMenuBar" type="::gui::aspect::SDefaultMenuBar">
+                <gui>
+                    <layout>
+                        <menu name="File" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menu sid="menuFile" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="menuFile" type="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Open file" shortcut="Ctrl+O" />
+                        <separator />
+                        <menuItem name="Launch Config" style="check" shortcut="Ctrl+L" />
+                        <separator />
+                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="actionOpenFile" start="yes" />
+                    <menuItem sid="actionLaunchConfig" start="yes" />
+                    <menuItem sid="actionQuit" start="yes" />
+                </registry>
+            </service>
+
+
+            <service uid="actionOpenFile" type="::gui::action::SStarter">
+                <start uid="myReaderPathFile" />
+            </service>
+
+            <service uid="actionQuit" type="::gui::action::SQuit" />
+
+            <!--
+                Configuration launcher:
+                This service allows to launch a sub-configuration.
+                The configuration is defined by its id.
+            -->
+            <service uid="actionLaunchConfig" type="::gui::action::SConfigLauncher">
+                <appConfig id="BasicFrameConfig" />
+                <!--
+                    replace ${imageUid} in the sub-config by the uid of the object with the key
+                    (ie. ${imageUid} is replaced by "imageUid")
+                -->
+                <inout key="imageUid" uid="imageUid" />
+            </service>
+
+            <service uid="myReaderPathFile" type="::uiIO::editor::SIOSelector" >
+                <in key="image" uid="imageUid" />
+            </service>
+            <service uid="mainView" type="::vtkSimpleNegato::SRenderer" autoConnect="yes" >
+                <in key="image" uid="imageUid" />
+            </service>
+
+            <start uid="mainFrame" />
+
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto10MatrixTransformInGS/rc/tuto.ico b/Samples/Tutorials/Tuto11LaunchBasicConfig/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto10MatrixTransformInGS/rc/tuto.ico
rename to Samples/Tutorials/Tuto11LaunchBasicConfig/rc/tuto.ico
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Samples/Tutorials/Tuto12Picker/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Samples/Tutorials/Tuto12Picker/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto12Picker/Properties.cmake b/Samples/Tutorials/Tuto12Picker/Properties.cmake
new file mode 100644
index 0000000..8168659
--- /dev/null
+++ b/Samples/Tutorials/Tuto12Picker/Properties.cmake
@@ -0,0 +1,26 @@
+
+set( NAME Tuto12Picker )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( UNIQUE TRUE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    ctrlSelection
+    gui
+    guiQt
+    ioData
+    ioVTK
+    io
+    servicesReg
+    uiVisuQt
+    uiImageQt
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Tuto12Picker)
diff --git a/Samples/Tutorials/Tuto12Picker/rc/plugin.xml b/Samples/Tutorials/Tuto12Picker/rc/plugin.xml
new file mode 100644
index 0000000..492940a
--- /dev/null
+++ b/Samples/Tutorials/Tuto12Picker/rc/plugin.xml
@@ -0,0 +1,202 @@
+<plugin id="Tuto12Picker" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Tuto12Picker</id>
+        <config>
+
+            <object type="::fwData::Composite">
+                <service uid="MyIHM" impl="::gui::frame::SDefaultFrame">
+                    <gui>
+                        <frame>
+                            <name>Tuto12Picker</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto12Picker_0-1/tuto.ico</icon>
+                            <minSize width="800" height="600" />
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="mainView" start="yes" />
+                    </registry>
+                </service>
+                <service uid="myMenuBar" impl="::gui::aspect::SDefaultMenuBar">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menu_File" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menu_File" impl="::gui::aspect::SDefaultMenu">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open image" shortcut="Ctrl+I" />
+                            <menuItem name="Open mesh" shortcut="Ctrl+M" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_openImage" start="yes" />
+                        <menuItem sid="action_openMesh" start="yes" />
+                        <menuItem sid="action_quit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="action_openImage" impl="::gui::action::SStarter">
+                    <start uid="imageReader" />
+                </service>
+                <service uid="action_openMesh" impl="::gui::action::SStarter">
+                    <start uid="meshReader" />
+                </service>
+                <service uid="action_quit" impl="::gui::action::SQuit" />
+
+                <service uid="mainView" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view caption="Picker world coordinate." proportion="0" />
+                            <view caption="Generic scene" border="11" proportion="1" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="pointView" start="yes" />
+                        <view sid="multiViewScene" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="multiViewScene" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="center" />
+                            <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="genericScene" start="yes" />
+                        <view sid="multiViewScene_bottom" start="yes" />
+                    </registry>
+                </service>
+
+
+                <service uid="multiViewScene_bottom" impl="::gui::view::SDefaultView">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="0" minWidth="30" />
+                            <view proportion="0" minWidth="50" />
+                            <view proportion="1" />
+                            <view proportion="0" minWidth="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="sliceListEditor" start="yes" />
+                        <view sid="showScanEditor" start="yes" />
+                        <view sid="sliderIndexEditor" start="yes" />
+                        <view sid="snapshotScene1Editor" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="snapshotScene1Editor" impl="::uiVisu::SnapshotEditor" />
+
+                <service uid="showScanEditor" impl="::guiQt::editor::SSignalButton">
+                    <config>
+                        <checkable>true</checkable>
+                        <icon>@BUNDLE_PREFIX@/media_0-1/icons/sliceHide.png</icon>
+                        <icon2>@BUNDLE_PREFIX@/media_0-1/icons/sliceShow.png</icon2>
+                        <iconWidth>40</iconWidth>
+                        <iconHeight>16</iconHeight>
+                        <checked>true</checked>
+                    </config>
+                </service>
+
+                <service uid="pointView" impl="::uiVisu::PointEditor" autoConnect="yes" />
+
+                <service uid="genericScene" impl="::fwRenderVTK::SRender" autoConnect="yes">
+                    <scene>
+                        <picker id="myPicker" vtkclass="fwVtkCellPicker" />
+
+                        <renderer id="default" background="0.0" />
+
+                        <adaptor id="meshAdaptor" class="::visuVTKAdaptor::Mesh" objectId="mesh">
+                            <config renderer="default" picker="" />
+                        </adaptor>
+
+                        <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                            <config renderer="default" picker="myPicker" mode="3D" slices="3" sliceIndex="axial" />
+                        </adaptor>
+                        <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                            <config renderer="default" />
+                        </adaptor>
+
+                        <adaptor id="pickerInteractor" uid="pickerInteractorUID" class="::visuVTKAdaptor::PickerInteractor" objectId="self">
+                            <config renderer="default" picker="myPicker" />
+                        </adaptor>
+
+                        <connect>
+                            <signal>snapshotScene1Editor/snapped</signal>
+                            <slot>snapshotUID/snap</slot>
+                        </connect>
+
+                        <connect>
+                            <signal>showScanEditor/toggled</signal>
+                            <slot>MPRNegatoScene3D/showSlice</slot>
+                        </connect>
+
+                        <connect>
+                            <signal>sliceListEditor/selected</signal>
+                            <slot>MPRNegatoScene3D/updateSliceMode</slot>
+                        </connect>
+
+                        <connect>
+                            <signal>pickerInteractorUID/picked</signal>
+                            <slot>pointView/getInteraction</slot>
+                        </connect>
+
+                    </scene>
+                </service>
+
+                <item key="mesh">
+                    <object uid="meshUID" type="::fwData::Mesh">
+                        <service uid="meshReader" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+                    </object>
+                </item>
+                <item key="image">
+                    <object uid="imageUID" type="::fwData::Image">
+                        <service uid="imageReader" impl="::uiIO::editor::SIOSelector">
+                            <type mode="reader" />
+                        </service>
+                        <!-- This service convert a simple fwData::Image to medical Image -->
+                        <service uid="medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" autoConnect="yes" />
+                        <service uid="sliceListEditor" impl="::guiQt::editor::SSelectionMenuButton">
+                            <toolTip>Manage slice visibility</toolTip>
+                            <selected>3</selected>
+                            <items>
+                                <item text="One slice" value="1" />
+                                <item text="three slices" value="3" />
+                            </items>
+                        </service>
+
+                        <service uid="sliderIndexEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                            <sliceIndex>axial</sliceIndex>
+                        </service>
+                    </object>
+                </item>
+
+                <start uid="MyIHM" />
+                <start uid="medicalImageConverter" />
+
+            </object>
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto11LaunchBasicConfig/rc/tuto.ico b/Samples/Tutorials/Tuto12Picker/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto11LaunchBasicConfig/rc/tuto.ico
rename to Samples/Tutorials/Tuto12Picker/rc/tuto.ico
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Samples/Tutorials/Tuto13Scene2D/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Samples/Tutorials/Tuto13Scene2D/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto13Scene2D/Properties.cmake b/Samples/Tutorials/Tuto13Scene2D/Properties.cmake
new file mode 100644
index 0000000..f2b31de
--- /dev/null
+++ b/Samples/Tutorials/Tuto13Scene2D/Properties.cmake
@@ -0,0 +1,18 @@
+
+set( NAME Tuto13Scene2D )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    uiVisu
+    uiVisuQt
+    scene2D
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES tutoScene2DConfig)
diff --git a/Samples/Tutorials/Tuto13Scene2D/rc/plugin.xml b/Samples/Tutorials/Tuto13Scene2D/rc/plugin.xml
new file mode 100644
index 0000000..d25e602
--- /dev/null
+++ b/Samples/Tutorials/Tuto13Scene2D/rc/plugin.xml
@@ -0,0 +1,78 @@
+
+<plugin id="Tuto13Scene2D" version="@DASH_VERSION@">
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>tutoScene2DConfig</id>
+        <config>
+            <object type="::fwData::Composite">
+
+                <service uid="mainFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::SDefaultFrame" autoConnect="no">
+                    <gui>
+                        <frame>
+                            <name>TutoScene132D</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto13Scene2D_0-1/tuto.ico</icon>
+                            <minSize width="800" height="600" />
+                        </frame>
+                    </gui>
+                    <registry>
+                        <view sid="GENERIC_UID_GlobalView" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="GENERIC_UID_GlobalView" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="vertical" />
+                            <view caption="Scene2D" />
+                            <view caption="FloatEditor" proportion="0" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="GENERIC_UID_Scene2D" start="no" />
+                        <view sid="GENERIC_UID_FloatEditor" start="no" />
+                    </registry>
+                </service>
+
+                <service uid="GENERIC_UID_Scene2D" impl="::scene2D::Render" type="::fwRender::IRender" autoConnect="yes">
+                    <scene>
+                        <viewport id="view1" x="-100" y="-100" width="200" height="200" />
+                        <axis id="axe1" origin="0.0" scale="1.0" scaleType="LINEAR" />
+                        <adaptor id="gridFromFloat" class="::scene2D::adaptor::GridFromFloat" objectId="data">
+                            <config xMin="-150" xMax="150" yMin="-150" yMax="150" xSpacing="10" ySpacing="10" color="green" zValue="2" xAxis="axe1" yAxis="axe1" />
+                        </adaptor>
+
+                        <adaptor id="square1" class="::scene2D::adaptor::Square" objectId="self">
+                            <config x="0" y="0" size="15" color="red" zValue="4" />
+                        </adaptor>
+
+                        <adaptor id="square2" class="::scene2D::adaptor::Square" objectId="self">
+                            <config x="20" y="20" size="30" color="blue" zValue="3" />
+                        </adaptor>
+
+                        <adaptor id="abscissa" class="::scene2D::adaptor::Line" objectId="self">
+                            <config x1="-100" x2="100" y1="0" y2="0" color="red" zValue="5" />
+                        </adaptor>
+
+                        <adaptor id="ordinate" class="::scene2D::adaptor::Line" objectId="self">
+                            <config x1="0" x2="0" y1="-100" y2="100" color="red" zValue="6" />
+                        </adaptor>
+                    </scene>
+                </service>
+
+                <item key="data">
+                    <object uid="GENERIC_UID_Float" type="::fwData::Float">
+                        <service uid="GENERIC_UID_FloatEditor" impl="::uiVisu::BasicFloatEditor" type="::gui::editor::IEditor" autoConnect="yes" />
+                    </object>
+                </item>
+
+                <start uid="mainFrame" />
+                <start uid="GENERIC_UID_Scene2D" />
+                <start uid="GENERIC_UID_FloatEditor" />
+
+            </object>
+        </config>
+    </extension>
+</plugin>
diff --git a/Apps/Tuto12Picker/rc/tuto.ico b/Samples/Tutorials/Tuto13Scene2D/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto12Picker/rc/tuto.ico
rename to Samples/Tutorials/Tuto13Scene2D/rc/tuto.ico
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Samples/Tutorials/Tuto14MeshGenerator/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Samples/Tutorials/Tuto14MeshGenerator/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto14MeshGenerator/Properties.cmake b/Samples/Tutorials/Tuto14MeshGenerator/Properties.cmake
new file mode 100644
index 0000000..e86be6f
--- /dev/null
+++ b/Samples/Tutorials/Tuto14MeshGenerator/Properties.cmake
@@ -0,0 +1,25 @@
+
+set( NAME Tuto14MeshGenerator )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( UNIQUE TRUE )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    ctrlSelection
+    gui
+    guiQt
+    ioData
+    ioVTK
+    io
+    servicesReg
+    uiVisuQt
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES Tuto14MeshGenerator)
diff --git a/Samples/Tutorials/Tuto14MeshGenerator/rc/plugin.xml b/Samples/Tutorials/Tuto14MeshGenerator/rc/plugin.xml
new file mode 100644
index 0000000..b8eaa0e
--- /dev/null
+++ b/Samples/Tutorials/Tuto14MeshGenerator/rc/plugin.xml
@@ -0,0 +1,229 @@
+<plugin id="Tuto14MeshGenerator" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>Tuto14MeshGenerator</id>
+        <config>
+
+            <object type="::fwData::Composite">
+                <service uid="MyIHM" impl="::gui::frame::SDefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
+                    <gui>
+                        <frame>
+                            <name>Tuto14MeshGenerator</name>
+                            <icon>@BUNDLE_PREFIX@/Tuto14MeshGenerator_0-1/tuto.ico</icon>
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="myMenuBar" start="yes" />
+                        <view sid="multiView_scene1" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="myMenuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                            <menu name="Modify" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menu_File" start="yes" />
+                        <menu sid="menu_Modifier" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open file" shortcut="Ctrl+O" />
+                            <menuItem name="Save file" shortcut="Ctrl+S" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_openFile" start="yes" />
+                        <menuItem sid="action_saveFile" start="yes" />
+                        <menuItem sid="action_quit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menu_Modifier" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menuItem name="Shake mesh point" shortcut="Q" />
+                            <separator />
+                            <menuItem name="Colorize mesh point" shortcut="U" />
+                            <menuItem name="Colorize mesh cells" shortcut="I" />
+                            <separator />
+                            <menuItem name="Compute point normals" shortcut="O" />
+                            <menuItem name="Compute cell normals" shortcut="P" />
+                            <separator />
+                            <menuItem name="Shake point normals" shortcut="L" />
+                            <menuItem name="Shake cell normals" shortcut="M" />
+                            <separator />
+                            <menuItem name="Show point normals" style="radio" shortcut="2" />
+                            <menuItem name="Show cell normals" style="radio" shortcut="1" />
+                            <menuItem name="Hide normals" style="radio" shortcut="0" />
+                            <separator />
+                            <menuItem name="Show point colors" style="radio" shortcut="4" />
+                            <menuItem name="Show cell colors" style="radio" shortcut="5" />
+                            <menuItem name="Hide colors" style="radio" shortcut="6" />
+                            <separator />
+                            <menuItem name="mesh deformation" shortcut="D" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_shakeMeshPoint" start="yes" />
+                        <menuItem sid="action_colorizeMeshPoints" start="yes" />
+                        <menuItem sid="action_colorizeMeshCells" start="yes" />
+                        <menuItem sid="action_computePointNormals" start="yes" />
+                        <menuItem sid="action_computeCellNormals" start="yes" />
+                        <menuItem sid="action_shakePointNormals" start="yes" />
+                        <menuItem sid="action_shakeCellNormals" start="yes" />
+                        <menuItem sid="action_showPointNormals" start="yes" />
+                        <menuItem sid="action_showCellNormals" start="yes" />
+                        <menuItem sid="action_hideNormals" start="yes" />
+                        <menuItem sid="action_showPointColors" start="yes" />
+                        <menuItem sid="action_showCellColors" start="yes" />
+                        <menuItem sid="action_hideColors" start="yes" />
+                        <menuItem sid="action_meshDeformation" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="progress_statusbar" impl="::gui::editor::SJobBar" autoConnect="no" />
+
+                <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="myReaderMesh" />
+                </service>
+                <service uid="action_saveFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="myWriterMesh" />
+                </service>
+                <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
+
+
+                <service uid="multiView_scene1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="center" />
+                            <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="genericScene" start="yes" />
+                    </registry>
+                </service>
+
+                <!-- CompositeVisu description -->
+                <item key="myCompositeVisu">
+                    <object uid="myCompositeVisu" type="::fwData::Composite">
+
+                        <service uid="genericScene" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="myPicker" vtkclass="fwVtkCellPicker" />
+
+                                <renderer id="default" background="0.0" />
+                                <adaptor id="myMeshAdaptor" uid="myMeshAdaptorUid" class="::visuVTKAdaptor::Mesh" objectId="myMesh">
+                                    <config renderer="default" picker="" />
+                                </adaptor>
+                                <adaptor id="myMeshNormalsAdaptor" uid="myMeshNormalsAdaptorUid" class="::visuVTKAdaptor::MeshNormals" objectId="myMesh">
+                                    <config renderer="default" picker="" normal="CELL" />
+                                </adaptor>
+                            </scene>
+                        </service>
+
+                        <item key="myMesh">
+                            <object type="::fwData::Mesh">
+                                <service uid="myReaderMesh" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                    <type mode="reader" />
+                                </service>
+                                <service uid="myWriterMesh" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                    <type mode="writer" />
+                                </service>
+                                <service uid="action_shakeMeshPoint" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ShakeMeshPoint" />
+                                </service>
+                                <service uid="action_colorizeMeshPoints" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ColorizeMeshPoints" />
+                                </service>
+                                <service uid="action_colorizeMeshCells" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ColorizeMeshCells" />
+                                </service>
+                                <service uid="action_computePointNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ComputePointNormals" />
+                                </service>
+                                <service uid="action_computeCellNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ComputeCellNormals" />
+                                </service>
+                                <service uid="action_shakePointNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ShakePointNormals" />
+                                </service>
+                                <service uid="action_shakeCellNormals" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="ShakeCellNormals" />
+                                </service>
+                                <service uid="action_showCellNormals" impl="::gui::action::SSlotCaller" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <state active="true" />
+                                    <slots>
+                                        <slot>myMeshNormalsAdaptorUid/showCellNormals</slot>
+                                    </slots>
+                                </service>
+                                <service uid="action_showPointNormals" impl="::gui::action::SSlotCaller" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <slots>
+                                        <slot>myMeshNormalsAdaptorUid/showPointNormals</slot>
+                                    </slots>
+                                </service>
+                                <service uid="action_hideNormals" impl="::gui::action::SSlotCaller" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <slots>
+                                        <slot>myMeshNormalsAdaptorUid/hideNormals</slot>
+                                    </slots>
+                                </service>
+
+                                <service uid="action_meshDeformation" impl="::ioData::action::SMeshModifier" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <config functor="MeshDeformation" />
+                                </service>
+
+                                <service uid="action_showPointColors" impl="::gui::action::SSlotCaller" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <slots>
+                                        <slot>myMeshAdaptorUid/showPointColors</slot>
+                                    </slots>
+                                </service>
+                                <service uid="action_showCellColors" impl="::gui::action::SSlotCaller" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <slots>
+                                        <slot>myMeshAdaptorUid/showCellColors</slot>
+                                    </slots>
+                                </service>
+                                <service uid="action_hideColors" impl="::gui::action::SSlotCaller" type="::fwGui::IActionSrv" autoConnect="no">
+                                    <slots>
+                                        <slot>myMeshAdaptorUid/hideColors</slot>
+                                    </slots>
+                                </service>
+
+                            </object>
+                        </item>
+
+                    </object>
+                </item>
+
+                <connect>
+                    <signal>myWriterMesh/jobCreated</signal>
+                    <slot>progress_statusbar/showJob</slot>
+                </connect>
+
+                <connect>
+                    <signal>myReaderMesh/jobCreated</signal>
+                    <slot>progress_statusbar/showJob</slot>
+                </connect>
+
+                <start uid="MyIHM" />
+                <start uid="progress_statusbar" />
+
+            </object>
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto13Scene2D/rc/tuto.ico b/Samples/Tutorials/Tuto14MeshGenerator/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto13Scene2D/rc/tuto.ico
rename to Samples/Tutorials/Tuto14MeshGenerator/rc/tuto.ico
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Samples/Tutorials/Tuto15Multithread/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Samples/Tutorials/Tuto15Multithread/CMakeLists.txt
diff --git a/Samples/Tutorials/Tuto15Multithread/Properties.cmake b/Samples/Tutorials/Tuto15Multithread/Properties.cmake
new file mode 100644
index 0000000..e3cea21
--- /dev/null
+++ b/Samples/Tutorials/Tuto15Multithread/Properties.cmake
@@ -0,0 +1,22 @@
+
+set( NAME Tuto15Multithread )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    gui
+    guiQt
+    io
+    ioData
+    ioVTK
+    uiIO
+    visuVTK
+    visuVTKQt
+    vtkSimpleMesh
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES tuto15MultithreadConfig)
diff --git a/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml b/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml
new file mode 100644
index 0000000..fdf9cfe
--- /dev/null
+++ b/Samples/Tutorials/Tuto15Multithread/rc/configurations/config.xml
@@ -0,0 +1,135 @@
+<extension implements="::fwServices::registry::AppConfig">
+    <id>tuto15MultithreadConfig</id>
+    <parameters>
+        <param name="GENERIC_UID" default="g" />
+    </parameters>
+    <config>
+
+        <object type="::fwData::Mesh">
+
+            <service uid="${GENERIC_UID}_frame" impl="::gui::frame::SDefaultFrame">
+                <gui>
+                    <frame>
+                        <name>Tuto15Multithread</name>
+                        <icon>@BUNDLE_PREFIX@/Tuto15Multithread_0-1/tuto.ico</icon>
+                        <minSize width="720" height="600" />
+                    </frame>
+                    <menuBar />
+                </gui>
+                <registry>
+                    <menuBar sid="${GENERIC_UID}_menuBar" start="yes" />
+                    <view sid="${GENERIC_UID}_view" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_menuBar" impl="::gui::aspect::SDefaultMenuBar">
+                <gui>
+                    <layout>
+                        <menu name="File" />
+                        <menu name="Deformation" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menu sid="${GENERIC_UID}_fileMenu" start="yes" />
+                    <menu sid="${GENERIC_UID}_deformationMenu" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_view" impl="::gui::view::SDefaultView">
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager">
+                        <orientation value="horizontal" />
+                        <view proportion="1" />
+                        <view proportion="1" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="${GENERIC_UID}_rendering1" start="yes" />
+                    <view sid="${GENERIC_UID}_rendering2" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_fileMenu" impl="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Open file" shortcut="Ctrl+O" />
+                        <separator />
+                        <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="${GENERIC_UID}_openFileAction" start="yes" />
+                    <menuItem sid="${GENERIC_UID}_quitAction" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="${GENERIC_UID}_deformationMenu" impl="::gui::aspect::SDefaultMenu">
+                <gui>
+                    <layout>
+                        <menuItem name="Start deformation" shortcut="Ctrl+D" />
+                        <menuItem name="Stop deformation" shortcut="Ctrl+F" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="${GENERIC_UID}_startDeformationAction" start="yes" />
+                    <menuItem sid="${GENERIC_UID}_stopDeformationAction" start="yes" />
+                </registry>
+            </service>
+
+
+            <service uid="${GENERIC_UID}_openFileAction" impl="::gui::action::SStarter">
+                <start uid="${GENERIC_UID}_reader" />
+            </service>
+
+            <service uid="${GENERIC_UID}_quitAction" impl="::gui::action::SQuit" />
+
+            <service uid="${GENERIC_UID}_startDeformationAction" impl="::gui::action::SSlotCaller">
+                <slots>
+                    <slot>${GENERIC_UID}_meshDeformation/startDeformation</slot>
+                </slots>
+            </service>
+
+            <service uid="${GENERIC_UID}_stopDeformationAction" impl="::gui::action::SSlotCaller">
+                <slots>
+                    <slot>${GENERIC_UID}_meshDeformation/stopDeformation</slot>
+                </slots>
+            </service>
+
+            <service uid="${GENERIC_UID}_reader" impl="::uiIO::editor::SIOSelector">
+                <type mode="reader" />
+            </service>
+
+            <!-- Visualization service for the first window. -->
+            <service uid="${GENERIC_UID}_rendering1" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
+
+
+            <!-- Visualization service for the second window -->
+            <service uid="${GENERIC_UID}_rendering2" impl="::vtkSimpleMesh::SRenderer" autoConnect="yes" />
+
+            <!--
+                Mesh deformation service:
+                This service runs a deformation method in another worker.
+                This method is called every 200 milliseconds.
+            -->
+            <service uid="${GENERIC_UID}_meshDeformation" impl="::vtkSimpleMesh::SSimpleMeshDeformation" worker="DEFORMATION_WORKER" />
+
+
+            <!-- Connect the signal slot of the service to receive the updating of camera position -->
+            <connect>
+                <signal>${GENERIC_UID}_rendering1/camUpdated</signal>
+                <slot>${GENERIC_UID}_rendering2/updateCamPosition</slot>
+            </connect>
+
+            <connect>
+                <signal>${GENERIC_UID}_rendering2/camUpdated</signal>
+                <slot>${GENERIC_UID}_rendering1/updateCamPosition</slot>
+            </connect>
+
+
+            <start uid="${GENERIC_UID}_frame" />
+            <start uid="${GENERIC_UID}_meshDeformation" />
+
+        </object>
+
+    </config>
+</extension>
diff --git a/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml b/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml
new file mode 100644
index 0000000..0f53bb2
--- /dev/null
+++ b/Samples/Tutorials/Tuto15Multithread/rc/plugin.xml
@@ -0,0 +1,10 @@
+<plugin id="Tuto15Multithread" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+
+    <xi:include href="configurations/config.xml" xmlns:xi="http://www.w3.org/2003/XInclude" />
+    
+</plugin>
diff --git a/Apps/Tuto14MeshGenerator/rc/tuto.ico b/Samples/Tutorials/Tuto15Multithread/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto14MeshGenerator/rc/tuto.ico
rename to Samples/Tutorials/Tuto15Multithread/rc/tuto.ico
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/CMakeLists.txt b/Samples/Tutorials/Tuto15MultithreadCtrl/CMakeLists.txt
new file mode 100644
index 0000000..12fc5ad
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/CMakeLists.txt
@@ -0,0 +1,8 @@
+fwLoadProperties()
+
+
+find_package (Boost COMPONENTS log REQUIRED)
+
+fwLink(
+    ${Boost_LOG_LIBRARY}
+)
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/Properties.cmake b/Samples/Tutorials/Tuto15MultithreadCtrl/Properties.cmake
new file mode 100644
index 0000000..82034e3
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/Properties.cmake
@@ -0,0 +1,20 @@
+
+set( NAME Tuto15MultithreadCtrl )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( START ON )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwDataTools
+    fwRuntime
+    fwServices
+    fwThread
+    fwTools
+)
+set( REQUIREMENTS
+    dataReg
+    servicesReg
+    fwlauncher
+)
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Namespace.hpp b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Namespace.hpp
new file mode 100644
index 0000000..5576361
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Namespace.hpp
@@ -0,0 +1,18 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTO15MULTITHREADCTRL_NAMESPACE_HPP__
+#define __TUTO15MULTITHREADCTRL_NAMESPACE_HPP__
+
+/**
+ * @brief       The namespace Tuto15MultithreadCtrl contains a few multithread example.
+ * @namespace   Tuto15MultithreadCtrl
+ */
+namespace Tuto15MultithreadCtrl
+{
+
+}
+#endif // __TUTO15MULTITHREADCTRL_NAMESPACE_HPP__
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Plugin.hpp b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Plugin.hpp
new file mode 100644
index 0000000..4c14ba4
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/Plugin.hpp
@@ -0,0 +1,45 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTO15MULTITHREADCTRL_PLUGIN_HPP__
+#define __TUTO15MULTITHREADCTRL_PLUGIN_HPP__
+
+#include "Tuto15MultithreadCtrl/config.hpp"
+
+#include <fwRuntime/Plugin.hpp>
+
+
+namespace Tuto15MultithreadCtrl
+{
+
+/**
+ * @brief Class call when bundle is started/stopped
+ */
+class TUTO15MULTITHREADCTRL_CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+
+public:
+
+    /// PLugin destructor
+    TUTO15MULTITHREADCTRL_API ~Plugin() throw();
+
+    /// This method is used by runtime to initialize the bundle.
+    TUTO15MULTITHREADCTRL_API void start() throw( ::fwRuntime::RuntimeException );
+
+    /// This method is used by runtime to stop the bundle.
+    TUTO15MULTITHREADCTRL_API void stop() throw();
+
+    TUTO15MULTITHREADCTRL_API void initialize() throw( ::fwRuntime::RuntimeException );
+
+    TUTO15MULTITHREADCTRL_API void uninitialize() throw();
+
+    TUTO15MULTITHREADCTRL_API int run() throw();
+
+};
+
+} // namespace Tuto15MultithreadCtrl
+
+#endif //__TUTO15MULTITHREADCTRL_PLUGIN_HPP__
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SIncrementArray.hpp b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SIncrementArray.hpp
new file mode 100644
index 0000000..7e8221f
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SIncrementArray.hpp
@@ -0,0 +1,68 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTO15MULTITHREADCTRL_SINCREMENTARRAY_HPP__
+#define __TUTO15MULTITHREADCTRL_SINCREMENTARRAY_HPP__
+
+#include "Tuto15MultithreadCtrl/config.hpp"
+
+#include <fwServices/IController.hpp>
+
+namespace fwThread
+{
+class Timer;
+}
+
+namespace Tuto15MultithreadCtrl
+{
+
+/**
+ * @brief This service increments all the values of a ::fwData::Array.
+ *
+ * This service provides a slot "startTimer" to call periodically the method "updating" that increment the values.
+ */
+class TUTO15MULTITHREADCTRL_CLASS_API SIncrementArray : public ::fwServices::IController
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SIncrementArray)(::fwServices::IController) );
+
+    TUTO15MULTITHREADCTRL_API SIncrementArray() throw();
+    TUTO15MULTITHREADCTRL_API virtual ~SIncrementArray() throw();
+
+    /// Set the timer period (in milliseconds)
+    void setPeriod( unsigned int period )
+    {
+        m_periodInMillisec = period;
+    }
+
+protected:
+
+    /// Initialize the timer
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Stop and reset the timer
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Increment all the values of the current array
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void configuring() throw(fwTools::Failed);
+
+    /// Slot: starts the timer
+    void startTimer();
+
+    SPTR( fwThread::Timer ) m_timer;
+
+    unsigned int m_periodInMillisec;
+
+};
+
+}  // namespace Tuto15MultithreadCtrl
+
+#endif  // __TUTO15MULTITHREADCTRL_SINCREMENTARRAY_HPP__
+
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SReadArray.hpp b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SReadArray.hpp
new file mode 100644
index 0000000..c429124
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SReadArray.hpp
@@ -0,0 +1,48 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTO15MULTITHREADCTRL_SREADARRAY_HPP__
+#define __TUTO15MULTITHREADCTRL_SREADARRAY_HPP__
+
+#include "Tuto15MultithreadCtrl/config.hpp"
+
+#include <fwServices/IController.hpp>
+
+
+namespace Tuto15MultithreadCtrl
+{
+
+/**
+ * @brief This service initializes a ::fwData::Array with 10 values (0 to 9).
+ */
+class TUTO15MULTITHREADCTRL_CLASS_API SReadArray : public ::fwServices::IController
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SReadArray)(::fwServices::IController) );
+
+    TUTO15MULTITHREADCTRL_API SReadArray() throw();
+    TUTO15MULTITHREADCTRL_API virtual ~SReadArray() throw();
+
+protected:
+
+    /// Do nothing
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Initialize the current ::fwData::Array with 10 values (0 to 9).
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void configuring() throw(fwTools::Failed);
+};
+
+}  // namespace Tuto15MultithreadCtrl
+
+#endif  // __TUTO15MULTITHREADCTRL_SREADARRAY_HPP__
+
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SShowArray.hpp b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SShowArray.hpp
new file mode 100644
index 0000000..a717462
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/include/Tuto15MultithreadCtrl/SShowArray.hpp
@@ -0,0 +1,50 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTO15MULTITHREADCTRL_SSHOWARRAY_HPP__
+#define __TUTO15MULTITHREADCTRL_SSHOWARRAY_HPP__
+
+#include "Tuto15MultithreadCtrl/config.hpp"
+
+#include <fwServices/IController.hpp>
+
+
+namespace Tuto15MultithreadCtrl
+{
+
+/**
+ * @brief This service displays the array values.
+ *
+ * @note To see the information, you need to activate log level "info".
+ */
+class TUTO15MULTITHREADCTRL_CLASS_API SShowArray : public ::fwServices::IController
+{
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (SShowArray)(::fwServices::IController) );
+
+    TUTO15MULTITHREADCTRL_API SShowArray() throw();
+    TUTO15MULTITHREADCTRL_API virtual ~SShowArray() throw();
+
+protected:
+
+    /// Do nothing
+    virtual void starting() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void stopping() throw(::fwTools::Failed);
+
+    /// Display the array values
+    virtual void updating() throw(::fwTools::Failed);
+
+    /// Do nothing
+    virtual void configuring() throw(fwTools::Failed);
+};
+
+}  // namespace Tuto15MultithShowCtrl
+
+#endif  // __TUTO15MULTITHREADCTRL_SSHOWARRAY_HPP__
+
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/rc/plugin.xml b/Samples/Tutorials/Tuto15MultithreadCtrl/rc/plugin.xml
new file mode 100644
index 0000000..2c6e5f2
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/rc/plugin.xml
@@ -0,0 +1,26 @@
+<plugin id="Tuto15MultithreadCtrl" class="::Tuto15MultithreadCtrl::Plugin" version="@DASH_VERSION@" >
+
+    <library name="Tuto15MultithreadCtrl" />
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::Tuto15MultithreadCtrl::SReadArray</service>
+        <object>::fwData::Array</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::Tuto15MultithreadCtrl::SShowArray</service>
+        <object>::fwData::Array</object>
+    </extension>
+
+    <extension implements="::fwServices::registry::ServiceFactory">
+        <type>::fwServices::IController</type>
+        <service>::Tuto15MultithreadCtrl::SIncrementArray</service>
+        <object>::fwData::Array</object>
+    </extension>
+
+</plugin>
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
new file mode 100644
index 0000000..a44dba0
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/Plugin.cpp
@@ -0,0 +1,160 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "Tuto15MultithreadCtrl/Plugin.hpp"
+#include "Tuto15MultithreadCtrl/SReadArray.hpp"
+
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/spyLog.hpp>
+
+#include <fwData/Array.hpp>
+#include <fwData/Object.hpp>
+
+#include <fwRuntime/profile/Profile.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+
+#include <fwServices/registry/ActiveWorkers.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+#include <fwServices/registry/ServiceFactory.hpp>
+
+#include <fwThread/Worker.hpp>
+
+#include <cmath>
+#include <functional>
+
+namespace Tuto15MultithreadCtrl
+{
+
+//-----------------------------------------------------------------------------
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::Tuto15MultithreadCtrl::Plugin");
+
+//-----------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::start() throw(::fwRuntime::RuntimeException)
+{
+    SLM_TRACE_FUNC();
+
+    ::fwRuntime::profile::getCurrentProfile()->setRunCallback(std::bind(&Plugin::run, this));
+
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+    SLM_TRACE_FUNC();
+}
+
+//-----------------------------------------------------------------------------
+
+void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::uninitialize() throw()
+{
+    SLM_TRACE_FUNC();
+}
+
+int Plugin::run() throw()
+{
+    ::fwData::Array::sptr array = ::fwData::Array::New();
+
+    ::fwServices::registry::ServiceFactory::sptr serviceFactory = ::fwServices::registry::ServiceFactory::getDefault();
+
+    // Create the 3 services to read, show and increment the values.
+    ::fwServices::IService::sptr srvRead =
+        serviceFactory->create("::fwServices::IController", "::Tuto15MultithreadCtrl::SReadArray");
+    ::fwServices::IService::sptr srvShow =
+        serviceFactory->create("::fwServices::IController", "::Tuto15MultithreadCtrl::SShowArray");
+    ::fwServices::IService::sptr srvIncrement =
+        serviceFactory->create("::fwServices::IController", "::Tuto15MultithreadCtrl::SIncrementArray");
+
+    // Register the services
+    ::fwServices::OSR::registerService(array, srvRead);
+    ::fwServices::OSR::registerService(array, srvShow);
+    ::fwServices::OSR::registerService(array, srvIncrement);
+
+    SLM_ASSERT("Failed to create service", srvRead);
+    SLM_ASSERT("Failed to create service", srvShow);
+    SLM_ASSERT("Failed to create service", srvIncrement);
+
+    // Create 3 workers for each service
+    ::fwThread::Worker::sptr worker1 = ::fwThread::Worker::New();
+    ::fwThread::Worker::sptr worker2 = ::fwThread::Worker::New();
+    ::fwThread::Worker::sptr worker3 = ::fwThread::Worker::New();
+
+    // Associate the workers to the services
+    srvRead->setWorker(worker1);
+    srvShow->setWorker(worker2);
+    srvIncrement->setWorker(worker3);
+
+    // Connect the array "modified" signal to the services show and increment.
+    auto sig = array->signal< ::fwData::Object::ModifiedSignalType>( ::fwData::Object::s_MODIFIED_SIG );
+
+    ::fwCom::Connection showConnection      = sig->connect(srvShow->slot( ::fwServices::IService::s_UPDATE_SLOT) );
+    ::fwCom::Connection incrementConnection = sig->connect(srvIncrement->slot( "startTimer" ) );
+
+    // Start the services
+    srvRead->start().wait();
+    srvShow->start().wait();
+    srvIncrement->start().wait();
+
+    // Update the reader
+    srvRead->update().wait();
+
+    unsigned long long count = 1<<30;
+    double d                 = 4<<2;
+
+    OSLM_INFO("Computing " << count << " square roots.");
+
+    for (unsigned long long i = 0; i < count; ++i)
+    {
+        d = std::sqrt(d);
+    }
+
+    OSLM_INFO("Done computing " << count << " square roots : " << d);
+
+
+    // Disconnect the signals and slots
+    showConnection.disconnect();
+    incrementConnection.disconnect();
+
+    // Stop the services
+    srvRead->stop().wait();
+    srvShow->stop().wait();
+    srvIncrement->stop().wait();
+
+    // Unregister the services
+    ::fwServices::OSR::unregisterService(srvRead);
+    ::fwServices::OSR::unregisterService(srvShow);
+    ::fwServices::OSR::unregisterService(srvIncrement);
+
+    srvRead.reset();
+    srvShow.reset();
+    srvIncrement.reset();
+
+    // Stop the workers
+    worker1->stop();
+    worker2->stop();
+    worker3->stop();
+
+    return 0;
+}
+
+
+} // namespace Tuto15MultithreadCtrl
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SIncrementArray.cpp b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SIncrementArray.cpp
new file mode 100644
index 0000000..fdf209d
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SIncrementArray.cpp
@@ -0,0 +1,102 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "Tuto15MultithreadCtrl/SIncrementArray.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Array.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwThread/Timer.hpp>
+
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+#include <functional>
+
+fwServicesRegisterMacro( ::fwServices::IController, ::Tuto15MultithreadCtrl::SIncrementArray, ::fwData::Array );
+
+namespace Tuto15MultithreadCtrl
+{
+
+static const ::fwCom::Slots::SlotKeyType s_START_TIMER_SLOT = "startTimer";
+
+SIncrementArray::SIncrementArray() throw() :
+    m_periodInMillisec(500)
+{
+    newSlot(s_START_TIMER_SLOT, &SIncrementArray::startTimer, this);
+}
+
+SIncrementArray::~SIncrementArray() throw()
+{
+}
+
+void SIncrementArray::starting() throw( ::fwTools::Failed )
+{
+    SLM_TRACE_FUNC();
+    m_timer = m_associatedWorker->createTimer();
+    m_timer->setFunction( std::bind(&SIncrementArray::updating, this) );
+    m_timer->setDuration( ::boost::chrono::milliseconds(m_periodInMillisec) );
+}
+
+void SIncrementArray::stopping() throw( ::fwTools::Failed )
+{
+    if (m_timer->isRunning())
+    {
+        m_timer->stop();
+    }
+    m_timer.reset();
+}
+
+void SIncrementArray::updating() throw( ::fwTools::Failed )
+{
+    ::fwData::Array::sptr array = this->getObject< ::fwData::Array >();
+    ::fwData::mt::ObjectWriteLock writeLock(array);
+
+    SLM_ASSERT("No array.", array);
+    SLM_ASSERT("Array : bad number of dimensions.", array->getNumberOfDimensions() == 1 );
+
+    const size_t arraySize = array->getSize()[0];
+
+    ::fwDataTools::helper::Array arrayHelper(array);
+
+    unsigned int* buffer = static_cast< unsigned int* >( arrayHelper.getBuffer() );
+
+    // Increment the array values
+    for (size_t i = 0; i < arraySize; i++)
+    {
+        ++buffer[i];
+    }
+
+    // Notify that the array is modified
+    ::fwData::Object::ModifiedSignalType::sptr sig
+        = array->signal< ::fwData::Object::ModifiedSignalType>( ::fwData::Object::s_MODIFIED_SIG );
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
+
+}
+
+void SIncrementArray::configuring() throw( ::fwTools::Failed )
+{
+
+}
+
+void SIncrementArray::startTimer()
+{
+    m_timer->start();
+}
+
+} // namespace Tuto15MultithreadCtrl
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SReadArray.cpp b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SReadArray.cpp
new file mode 100644
index 0000000..e600a85
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SReadArray.cpp
@@ -0,0 +1,70 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "Tuto15MultithreadCtrl/SReadArray.hpp"
+
+#include <fwCom/Signal.hxx>
+
+#include <fwData/Array.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwServices/macros.hpp>
+
+
+fwServicesRegisterMacro( ::fwServices::IController, ::Tuto15MultithreadCtrl::SReadArray, ::fwData::Array );
+
+namespace Tuto15MultithreadCtrl
+{
+
+SReadArray::SReadArray() throw()
+{
+}
+
+SReadArray::~SReadArray() throw()
+{
+}
+
+void SReadArray::starting() throw( ::fwTools::Failed )
+{
+}
+
+void SReadArray::stopping() throw( ::fwTools::Failed )
+{
+}
+
+void SReadArray::updating() throw( ::fwTools::Failed )
+{
+    ::fwData::Array::sptr array = this->getObject< ::fwData::Array >();
+    ::fwData::mt::ObjectWriteLock writeLock(array);
+    SLM_ASSERT("No array.", array);
+
+    // Initialize the array size and type
+    const int arraySize = 10;
+    ::fwData::Array::SizeType size(1, arraySize);
+    array->resize("uint32", size, 1, true);
+
+    // Fill the array values
+    ::fwDataTools::helper::Array arrayHelper(array);
+    unsigned int* buffer = static_cast< unsigned int* >( arrayHelper.getBuffer() );
+    for (unsigned int i = 0; i < arraySize; i++)
+    {
+        buffer[i] = i;
+    }
+
+    // Notify that the array is modified
+    ::fwData::Object::ModifiedSignalType::sptr sig
+        = array->signal< ::fwData::Object::ModifiedSignalType>( ::fwData::Object::s_MODIFIED_SIG );
+    sig->asyncEmit();
+}
+
+void SReadArray::configuring() throw( ::fwTools::Failed )
+{
+
+}
+
+} // namespace Tuto15MultithreadCtrl
diff --git a/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SShowArray.cpp b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SShowArray.cpp
new file mode 100644
index 0000000..8d1b33e
--- /dev/null
+++ b/Samples/Tutorials/Tuto15MultithreadCtrl/src/Tuto15MultithreadCtrl/SShowArray.cpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "Tuto15MultithreadCtrl/SShowArray.hpp"
+
+#include <fwData/Array.hpp>
+#include <fwData/mt/ObjectReadLock.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <iterator>
+#include <sstream>
+
+fwServicesRegisterMacro( ::fwServices::IController, ::Tuto15MultithreadCtrl::SShowArray, ::fwData::Array );
+
+namespace Tuto15MultithreadCtrl
+{
+
+SShowArray::SShowArray() throw()
+{
+}
+
+SShowArray::~SShowArray() throw()
+{
+}
+
+void SShowArray::starting() throw( ::fwTools::Failed )
+{
+}
+
+void SShowArray::stopping() throw( ::fwTools::Failed )
+{
+}
+
+void SShowArray::updating() throw( ::fwTools::Failed )
+{
+    ::fwData::Array::sptr array = this->getObject< ::fwData::Array >();
+    ::fwData::mt::ObjectReadLock readLock(array);
+    SLM_ASSERT("No array.", array);
+
+    ::fwDataTools::helper::Array arrayHelper(array);
+    unsigned int* buffer = static_cast< unsigned int* >( arrayHelper.getBuffer() );
+
+    std::stringstream str;
+    std::ostream_iterator<unsigned int> coutIter (str,", ");
+    std::copy(buffer, buffer+10, coutIter );
+    SLM_INFO("Buffer : " + str.str());
+}
+
+void SShowArray::configuring() throw( ::fwTools::Failed )
+{
+}
+
+} // namespace Tuto15MultithreadCtrl
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/Samples/Tutorials/TutoGui/CMakeLists.txt
similarity index 100%
copy from Apps/Tuto08GenericScene/CMakeLists.txt
copy to Samples/Tutorials/TutoGui/CMakeLists.txt
diff --git a/Samples/Tutorials/TutoGui/Properties.cmake b/Samples/Tutorials/TutoGui/Properties.cmake
new file mode 100644
index 0000000..7201184
--- /dev/null
+++ b/Samples/Tutorials/TutoGui/Properties.cmake
@@ -0,0 +1,16 @@
+
+set( NAME TutoGui )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( DEPENDENCIES  )
+set( REQUIREMENTS 
+    io
+    appXml
+    gui
+    guiQt
+    dataReg
+    servicesReg
+    fwlauncher
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES tutoGuiConfig)
diff --git a/Apps/TutoGui/rc/icons/important.png b/Samples/Tutorials/TutoGui/rc/icons/important.png
similarity index 100%
rename from Apps/TutoGui/rc/icons/important.png
rename to Samples/Tutorials/TutoGui/rc/icons/important.png
diff --git a/Apps/TutoGui/rc/icons/monkey.png b/Samples/Tutorials/TutoGui/rc/icons/monkey.png
similarity index 100%
rename from Apps/TutoGui/rc/icons/monkey.png
rename to Samples/Tutorials/TutoGui/rc/icons/monkey.png
diff --git a/Samples/Tutorials/TutoGui/rc/icons/pause.svg b/Samples/Tutorials/TutoGui/rc/icons/pause.svg
new file mode 100644
index 0000000..0f753bb
--- /dev/null
+++ b/Samples/Tutorials/TutoGui/rc/icons/pause.svg
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="pause.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="3.9645804"
+     inkscape:cx="-0.12107532"
+     inkscape:cy="75.008784"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1321"
+     inkscape:window-height="816"
+     inkscape:window-x="216"
+     inkscape:window-y="309"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="true"
+     showguides="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4048" />
+  </sodipodi:namedview>
+  <defs
+     id="defs3007">
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutM"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutM">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="fill-rule:evenodd;fill:#FFFFFF;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4313" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="TriangleOutL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="TriangleOutL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4292" />
+    </marker>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient5522">
+      <stop
+         id="stop5524"
+         offset="0"
+         style="stop-color:#00da00;stop-opacity:1;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="SquareL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="SquareL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         id="path4220" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4176" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4152" />
+    </marker>
+    <linearGradient
+       id="linearGradient3811"
+       inkscape:collect="always">
+      <stop
+         id="stop3813"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3815"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient3797">
+      <stop
+         id="stop3799"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="187.79788"
+       x2="310.13318"
+       y1="187.79788"
+       x1="296.21085"
+       id="linearGradient3817"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend5"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend5">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path9748" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mendi"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mendi">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path10835" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutMP"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutMP">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="stroke-width:1.0pt;marker-start:none;stroke:#000091;fill:#000091;fill-rule:evenodd"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path11676" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-237.3183,-121.94415)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3013"
+       y="272.52441"
+       x="246.47722"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         y="272.52441"
+         x="246.47722"
+         id="tspan3015"
+         sodipodi:role="line" /></text>
+    <rect
+       ry="9.9183826"
+       y="126.94415"
+       x="242.3183"
+       height="121.70744"
+       width="121.70744"
+       id="rect3023"
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <flowRoot
+       transform="translate(241.5368,126.16265)"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       id="flowRoot3761"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3763"><rect
+           y="3.5673711"
+           x="-35.860416"
+           height="148.9975"
+           width="213.39473"
+           id="rect3765" /></flowRegion><flowPara
+         id="flowPara3767" /></flowRoot>    <g
+       id="g4686">
+      <rect
+         ry="1.499209"
+         y="147.27481"
+         x="316.60403"
+         height="81.274155"
+         width="27.350019"
+         id="rect3884-7"
+         style="fill:#ff6600;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+      <rect
+         ry="1.499209"
+         y="147.04677"
+         x="262.39001"
+         height="81.274155"
+         width="27.350019"
+         id="rect3884-7-4"
+         style="fill:#ff6600;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    </g>
+  </g>
+</svg>
diff --git a/Samples/Tutorials/TutoGui/rc/icons/start.svg b/Samples/Tutorials/TutoGui/rc/icons/start.svg
new file mode 100644
index 0000000..c371c8b
--- /dev/null
+++ b/Samples/Tutorials/TutoGui/rc/icons/start.svg
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="start.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4016908"
+     inkscape:cx="27.229828"
+     inkscape:cy="66.087719"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1233"
+     inkscape:window-height="844"
+     inkscape:window-x="416"
+     inkscape:window-y="67"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0" />
+  <defs
+     id="defs3007">
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutM"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutM">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="fill-rule:evenodd;fill:#FFFFFF;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4313" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="TriangleOutL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="TriangleOutL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4292" />
+    </marker>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient5522">
+      <stop
+         id="stop5524"
+         offset="0"
+         style="stop-color:#00da00;stop-opacity:1;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="SquareL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="SquareL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         id="path4220" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4176" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4152" />
+    </marker>
+    <linearGradient
+       id="linearGradient3811"
+       inkscape:collect="always">
+      <stop
+         id="stop3813"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3815"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient3797">
+      <stop
+         id="stop3799"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="187.79788"
+       x2="310.13318"
+       y1="187.79788"
+       x1="296.21085"
+       id="linearGradient3817"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend5"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend5">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path9748" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mendi"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mendi">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path10835" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutMP"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutMP">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="stroke-width:1.0pt;marker-start:none;stroke:#000091;fill:#000091;fill-rule:evenodd"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path11676" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-237.3183,-121.94415)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3013"
+       y="272.52441"
+       x="246.47722"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         y="272.52441"
+         x="246.47722"
+         id="tspan3015"
+         sodipodi:role="line" /></text>
+    <rect
+       ry="9.9183826"
+       y="126.94415"
+       x="242.3183"
+       height="121.70744"
+       width="121.70744"
+       id="rect3023"
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <flowRoot
+       transform="translate(241.5368,126.16265)"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       id="flowRoot3761"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3763"><rect
+           y="3.5673711"
+           x="-35.860416"
+           height="148.9975"
+           width="213.39473"
+           id="rect3765" /></flowRegion><flowPara
+         id="flowPara3767" /></flowRoot>    <path
+       sodipodi:type="star"
+       style="fill:#00b300;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71371412;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="path12151"
+       sodipodi:sides="3"
+       sodipodi:cx="39.238323"
+       sodipodi:cy="83.729675"
+       sodipodi:r1="24.972391"
+       sodipodi:r2="12.486195"
+       sodipodi:arg1="0"
+       sodipodi:arg2="1.0471976"
+       inkscape:flatsided="true"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="m 64.210714,83.729675 -37.458586,21.626725 0,-43.25345 z"
+       transform="matrix(2.3380744,0,0,2.0908168,196.83308,12.73446)"
+       inkscape:transform-center-x="-14.596828" />
+  </g>
+</svg>
diff --git a/Samples/Tutorials/TutoGui/rc/icons/stop.svg b/Samples/Tutorials/TutoGui/rc/icons/stop.svg
new file mode 100644
index 0000000..39f4cee
--- /dev/null
+++ b/Samples/Tutorials/TutoGui/rc/icons/stop.svg
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:osb="http://www.openswatchbook.org/uri/2009/osb"
+   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="131.70744"
+   height="131.70744"
+   id="svg3005"
+   version="1.1"
+   inkscape:version="0.48.4 r9939"
+   sodipodi:docname="stop.svg">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4016908"
+     inkscape:cx="-4.8688622"
+     inkscape:cy="125.41782"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="963"
+     inkscape:window-height="689"
+     inkscape:window-x="355"
+     inkscape:window-y="82"
+     inkscape:window-maximized="0"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:snap-global="true"
+     showguides="true">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4048" />
+  </sodipodi:namedview>
+  <defs
+     id="defs3007">
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutM"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutM">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="fill-rule:evenodd;fill:#FFFFFF;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4313" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="TriangleOutL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="TriangleOutL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path4292" />
+    </marker>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient5522">
+      <stop
+         id="stop5524"
+         offset="0"
+         style="stop-color:#00da00;stop-opacity:1;" />
+    </linearGradient>
+    <marker
+       style="overflow:visible"
+       id="SquareL"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="SquareL">
+      <path
+         transform="scale(0.8)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         d="M -5.0,-5.0 L -5.0,5.0 L 5.0,5.0 L 5.0,-5.0 L -5.0,-5.0 z "
+         id="path4220" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round;"
+         id="path4176" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Lend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Lend">
+      <path
+         transform="scale(0.8) rotate(180) translate(12.5,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4152" />
+    </marker>
+    <linearGradient
+       id="linearGradient3811"
+       inkscape:collect="always">
+      <stop
+         id="stop3813"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         id="stop3815"
+         offset="1"
+         style="stop-color:#000000;stop-opacity:0;" />
+    </linearGradient>
+    <linearGradient
+       osb:paint="solid"
+       id="linearGradient3797">
+      <stop
+         id="stop3799"
+         offset="0"
+         style="stop-color:#000000;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       gradientUnits="userSpaceOnUse"
+       y2="187.79788"
+       x2="310.13318"
+       y1="187.79788"
+       x1="296.21085"
+       id="linearGradient3817"
+       xlink:href="#linearGradient3811"
+       inkscape:collect="always" />
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mend5"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mend5">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path9748" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow2Mendi"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow2Mendi">
+      <path
+         transform="scale(0.6) rotate(180) translate(0,0)"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         style="stroke-linejoin:round;font-size:12.0;fill-rule:evenodd;stroke:#000091;stroke-width:0.62500000;fill:#000091"
+         id="path10835" />
+    </marker>
+    <marker
+       style="overflow:visible"
+       id="EmptyTriangleOutMP"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="EmptyTriangleOutMP">
+      <path
+         transform="scale(0.4) translate(-4.5,0)"
+         style="stroke-width:1.0pt;marker-start:none;stroke:#000091;fill:#000091;fill-rule:evenodd"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         id="path11676" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata3010">
+    <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 />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     transform="translate(-237.3183,-121.94415)"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Calque 1">
+    <text
+       sodipodi:linespacing="125%"
+       id="text3013"
+       y="272.52441"
+       x="246.47722"
+       style="font-size:40px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans;-inkscape-font-specification:DejaVu Sans"
+       xml:space="preserve"><tspan
+         y="272.52441"
+         x="246.47722"
+         id="tspan3015"
+         sodipodi:role="line" /></text>
+    <rect
+       ry="9.9183826"
+       y="126.94415"
+       x="242.3183"
+       height="121.70744"
+       width="121.70744"
+       id="rect3023"
+       style="fill:none;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
+    <flowRoot
+       transform="translate(241.5368,126.16265)"
+       style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+       id="flowRoot3761"
+       xml:space="preserve"><flowRegion
+         id="flowRegion3763"><rect
+           y="3.5673711"
+           x="-35.860416"
+           height="148.9975"
+           width="213.39473"
+           id="rect3765" /></flowRegion><flowPara
+         id="flowPara3767" /></flowRoot>    <rect
+       style="fill:#374548;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       id="rect3884"
+       width="76.039978"
+       height="76.039978"
+       x="265.15204"
+       y="149.77788"
+       ry="1.4026577" />
+  </g>
+</svg>
diff --git a/Apps/TutoGui/rc/icons/system.png b/Samples/Tutorials/TutoGui/rc/icons/system.png
similarity index 100%
rename from Apps/TutoGui/rc/icons/system.png
rename to Samples/Tutorials/TutoGui/rc/icons/system.png
diff --git a/Apps/TutoGui/rc/icons/unreadable.png b/Samples/Tutorials/TutoGui/rc/icons/unreadable.png
similarity index 100%
rename from Apps/TutoGui/rc/icons/unreadable.png
rename to Samples/Tutorials/TutoGui/rc/icons/unreadable.png
diff --git a/Samples/Tutorials/TutoGui/rc/plugin.xml b/Samples/Tutorials/TutoGui/rc/plugin.xml
new file mode 100644
index 0000000..33768a9
--- /dev/null
+++ b/Samples/Tutorials/TutoGui/rc/plugin.xml
@@ -0,0 +1,285 @@
+<plugin id="TutoGui" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>tutoGuiConfig</id>
+        <config>
+
+        <object type="::fwData::Image">
+           <service uid="myFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::SDefaultFrame" autoConnect="no" >
+                <gui>
+                    <frame>
+                        <name>TutoGui</name>
+                        <icon>@BUNDLE_PREFIX@/TutoGui_0-1/tuto.ico</icon>
+                        <minSize width="800" height="600"/>
+                    </frame>
+                    <menuBar />
+                    <toolBar >
+                        <toolBitmapSize height= "32" width="32" />
+                    </toolBar>
+                </gui>
+                <registry>
+                    <menuBar sid="menuBar" start="yes" />
+                    <toolBar sid="toolBar" start="yes" />
+                    <view sid="view" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no" >
+                <gui>
+                    <layout>
+                        <menu name="My Menu"/>
+                        <menu name="My Menu 2"/>
+                        <menu name="My Menu 3"/>
+                    </layout>
+                </gui>
+                <registry>
+                    <menu sid="myMenu" start="yes" />
+                    <menu sid="myMenu2" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="toolBar" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no" >
+                <gui>
+                    <layout>
+                        <menuItem name="start" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/start.svg" />
+                        <menuItem name="pause" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/pause.svg" />
+                        <menuItem name="stop"  icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/stop.svg" />
+                        <separator />
+                        <menuItem name="My item 1" style="check" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/important.png" />
+                        <separator />
+                        <menuItem name="My item 2" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                        <menuItem name="My item 3" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                        <separator />
+                        <menuItem name="My item A" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                        <menuItem name="My item B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                        <separator />
+                        <menuItem name="start 2-3 / stop A-B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/important.png" />
+                        <menuItem name="start A-B / stop 2-3" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/important.png" />
+                        <spacer/>
+                        <menu name="Test Hide/Show" start="yes" />
+                        <menuItem name="Quit" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/unreadable.png"/>
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="start" start="yes" />
+                    <menuItem sid="pause" start="yes" />
+                    <menuItem sid="stop" start="yes" />
+                    <menuItem sid="item1" start="yes" />
+                    <menuItem sid="item2" start="no" />
+                    <menuItem sid="item3" start="no" />
+                    <menuItem sid="item4" start="no" />
+                    <menuItem sid="item5" start="no" />
+                    <menuItem sid="item16" start="yes" />
+                    <menuItem sid="item17" start="yes" />
+                    <menu sid="testHideShow" start="yes" />
+                    <menuItem sid="actionQuit" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="testHideShow" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no">
+                <gui>
+                    <layout>
+                        <menuItem name="Play" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/start.svg" />
+                        <menuItem name="Pause" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/pause.svg" />
+                        <menuItem name="Stop" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/stop.svg" />
+
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="start" start="no" />
+                    <menuItem sid="pause" start="no" />
+                    <menuItem sid="stop" start="no" />
+                </registry>
+            </service>
+
+            <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no" >
+                <gui>
+                    <layout>
+                        <menuItem name="My item 1" shortcut="1" style="check" />
+                        <separator />
+                        <menuItem name="My item 2" shortcut="2" style="radio" />
+                        <menuItem name="My item 3" shortcut="3" style="radio" />
+                        <separator />
+                        <menuItem name="My item A" shortcut="A" style="radio" />
+                        <menuItem name="My item B" shortcut="B" style="radio" />
+                        <separator />
+                        <menuItem name="Quit" shortcut="Ctrl+Q" specialAction="QUIT" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="item1" start="no" />
+                    <menuItem sid="item2" start="no" />
+                    <menuItem sid="item3" start="no" />
+                    <menuItem sid="item4" start="no" />
+                    <menuItem sid="item5" start="no" />
+                    <menuItem sid="actionQuit" start="no" />
+                </registry>
+            </service>
+
+            <service uid="myMenu2" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no" >
+                <gui>
+                    <layout>
+                        <menuItem name="My item 1" style="check" />
+                        <separator />
+                        <menuItem name="start 2-3 / stop A-B" style="radio" />
+                        <menuItem name="start A-B / stop 2-3" style="radio" />
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="item1" start="no" />
+                    <menuItem sid="item16" start="no" />
+                    <menuItem sid="item17" start="no" />
+                </registry>
+            </service>
+
+            <service uid="item1" type="::fwGui::IActionSrv" impl="::gui::action::SDoNothing" autoConnect="no">
+                <state active="true" />
+            </service>
+            <service uid="item2" type="::fwGui::IActionSrv" impl="::gui::action::SDoNothing" autoConnect="no" >
+                <state active="true" />
+            </service>
+            <service uid="item3" type="::fwGui::IActionSrv" impl="::gui::action::SDoNothing" autoConnect="no" />
+            <service uid="item4" type="::fwGui::IActionSrv" impl="::gui::action::SDoNothing" autoConnect="no" >
+                <state active="false" />
+            </service>
+            <service uid="item5" type="::fwGui::IActionSrv" impl="::gui::action::SDoNothing" autoConnect="no" >
+                <state active="true" />
+            </service>
+
+            <service uid="start" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                <slots>
+                    <slot>start/hide</slot>
+                    <slot>stop/setExecutable</slot>
+                    <slot>pause/show</slot>
+                </slots>
+            </service>
+
+            <service uid="stop" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                <state executable="false" />
+                <slots>
+                    <slot>start/show</slot>
+                    <slot>stop/setInexecutable</slot>
+                    <slot>pause/hide</slot>
+                </slots>
+            </service>
+
+            <service uid="pause" type="::fwGui::IActionSrv" impl="::gui::action::SSlotCaller" autoConnect="no">
+                <state active="true" visible="false" />
+                <slots>
+                    <slot>start/show</slot>
+                    <slot>pause/hide</slot>
+                </slots>
+            </service>
+
+            <service uid="item16" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <state active="true" />
+                <start uid="item2" />
+                <start uid="item3" />
+                <stop uid="item4" />
+                <stop uid="item5" />
+            </service>
+            <service uid="item17" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                <stop uid="item2" />
+                <stop uid="item3" />
+                <start uid="item4" />
+                <start uid="item5" />
+            </service>
+
+            <service uid="actionQuit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
+
+            <service uid="view" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="vertical" />
+                        <view caption="view1" />
+                        <view caption="view2" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view wid="myView" />
+                    <view sid="subView2" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="subView1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="horizontal" />
+                        <view caption="view3" />
+                        <view caption="view4" />
+                        <view caption="view5" />
+                    </layout>
+                </gui>
+                <registry>
+                    <parent wid="myView" />
+                    <view sid="subView3" start="yes" />
+                </registry>
+            </service>
+
+
+            <service uid="subView2" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
+                <gui>
+                    <layout type="::fwGui::CardinalLayoutManager" >
+                        <view caption="CardinalView1" align="center" />
+                        <view caption="CardinalView2" align="right" minWidth="400" />
+                        <view caption="CardinalView3" align="right" minWidth="400" />
+                    </layout>
+                </gui>
+                <registry>
+                    <view sid="view12" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="subView3" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
+                <gui>
+                    <layout type="::fwGui::TabLayoutManager" >
+                        <view caption="TabView1"  />
+                        <view caption="TabView2" selected="yes" />
+                        <view caption="TabView3" />
+                    </layout>
+                </gui>
+                <registry/>
+            </service>
+
+            <service uid="view12" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
+                <gui>
+                    <layout type="::fwGui::LineLayoutManager" >
+                        <orientation value="vertical" />
+                    </layout>
+                    <toolBar />
+                </gui>
+                <registry>
+                    <toolBar sid="toolbar2" start="yes" />
+                </registry>
+            </service>
+
+            <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no" >
+                <gui>
+                    <layout>
+                        <menuItem name="My item 2" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                        <menuItem name="My item 3" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                        <separator />
+                        <menuItem name="My item A" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                        <menuItem name="My item B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                    </layout>
+                </gui>
+                <registry>
+                    <menuItem sid="item2" />
+                    <menuItem sid="item3" />
+                    <menuItem sid="item4" />
+                    <menuItem sid="item5" />
+                </registry>
+            </service>
+
+            <start uid="myFrame" />
+            <start uid="subView1" />
+
+        </object>
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/Apps/Tuto15Multithread/rc/tuto.ico b/Samples/Tutorials/TutoGui/rc/tuto.ico
similarity index 100%
rename from Apps/Tuto15Multithread/rc/tuto.ico
rename to Samples/Tutorials/TutoGui/rc/tuto.ico
diff --git a/Samples/Tutorials/TutoTrianConverterCtrl/CMakeLists.txt b/Samples/Tutorials/TutoTrianConverterCtrl/CMakeLists.txt
new file mode 100644
index 0000000..758cfa4
--- /dev/null
+++ b/Samples/Tutorials/TutoTrianConverterCtrl/CMakeLists.txt
@@ -0,0 +1,5 @@
+fwLoadProperties()
+
+find_package (Boost COMPONENTS program_options REQUIRED)
+
+fwLink(${Boost_PROGRAM_OPTIONS_LIBRARIES})
diff --git a/Samples/Tutorials/TutoTrianConverterCtrl/Properties.cmake b/Samples/Tutorials/TutoTrianConverterCtrl/Properties.cmake
new file mode 100644
index 0000000..a1a7c2d
--- /dev/null
+++ b/Samples/Tutorials/TutoTrianConverterCtrl/Properties.cmake
@@ -0,0 +1,19 @@
+
+set( NAME TutoTrianConverterCtrl )
+set( VERSION 0.1 )
+set( TYPE APP )
+set( START ON )
+set( DEPENDENCIES
+    fwRuntime
+    fwServices
+    fwData
+    fwCore
+)
+set( REQUIREMENTS
+    io
+    gui
+    dataReg
+    servicesReg
+    ioVTK
+    ioData
+)
diff --git a/Samples/Tutorials/TutoTrianConverterCtrl/include/TutoTrianConverterCtrl/Namespace.hpp b/Samples/Tutorials/TutoTrianConverterCtrl/include/TutoTrianConverterCtrl/Namespace.hpp
new file mode 100644
index 0000000..2da3819
--- /dev/null
+++ b/Samples/Tutorials/TutoTrianConverterCtrl/include/TutoTrianConverterCtrl/Namespace.hpp
@@ -0,0 +1,17 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTOTRIANCONVERTERCTRL_NAMESPACE_HPP__
+#define __TUTOTRIANCONVERTERCTRL_NAMESPACE_HPP__
+
+/**
+ * @brief      The namespace tutoTrianConverterCtrl.
+ */
+namespace tutoTrianConverterCtrl
+{
+
+}
+#endif /* __TUTOTRIANCONVERTERCTRL_NAMESPACE_HPP__ */
diff --git a/Samples/Tutorials/TutoTrianConverterCtrl/include/TutoTrianConverterCtrl/Plugin.hpp b/Samples/Tutorials/TutoTrianConverterCtrl/include/TutoTrianConverterCtrl/Plugin.hpp
new file mode 100644
index 0000000..2361e85
--- /dev/null
+++ b/Samples/Tutorials/TutoTrianConverterCtrl/include/TutoTrianConverterCtrl/Plugin.hpp
@@ -0,0 +1,50 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __TUTOTRIANCONVERTERCTRL_PLUGIN_HPP__
+#define __TUTOTRIANCONVERTERCTRL_PLUGIN_HPP__
+
+#include <fwRuntime/Plugin.hpp>
+
+#include <fwData/Mesh.hpp>
+#include <fwServices/IService.hpp>
+
+#include "TutoTrianConverterCtrl/config.hpp"
+
+namespace TutoTrianConverterCtrl
+{
+
+/**
+ * @brief   This class is started when the bundles is loaded.
+ */
+class TUTOTRIANCONVERTERCTRL_CLASS_API Plugin : public ::fwRuntime::Plugin
+{
+public:
+    /// Constructor.
+    TUTOTRIANCONVERTERCTRL_API Plugin() throw();
+
+    /// Destructor. Do nothing.
+    TUTOTRIANCONVERTERCTRL_API ~Plugin() throw();
+
+    /// Overrides start method. .
+    TUTOTRIANCONVERTERCTRL_API void start() throw(::fwRuntime::RuntimeException);
+
+    /// Overrides stop method. Do nothing
+    TUTOTRIANCONVERTERCTRL_API void stop() throw();
+
+    TUTOTRIANCONVERTERCTRL_API void initialize() throw( ::fwRuntime::RuntimeException );
+
+    TUTOTRIANCONVERTERCTRL_API void uninitialize() throw();
+
+private:
+    ::fwData::Mesh::sptr m_mesh;
+    ::fwServices::IService::sptr m_writerSrv;
+    ::fwServices::IService::sptr m_readerSrv;
+};
+
+} // namespace TutoTrianConverterCtrl
+
+#endif // __TUTOTRIANCONVERTERCTRL_PLUGIN_HPP__
diff --git a/Samples/Tutorials/TutoTrianConverterCtrl/rc/plugin.xml b/Samples/Tutorials/TutoTrianConverterCtrl/rc/plugin.xml
new file mode 100644
index 0000000..9031b6e
--- /dev/null
+++ b/Samples/Tutorials/TutoTrianConverterCtrl/rc/plugin.xml
@@ -0,0 +1,8 @@
+<plugin id="TutoTrianConverterCtrl" class="::TutoTrianConverterCtrl::Plugin"  version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+
+    <library name="TutoTrianConverterCtrl" />
+
+</plugin>
diff --git a/Samples/Tutorials/TutoTrianConverterCtrl/src/TutoTrianConverterCtrl/Plugin.cpp b/Samples/Tutorials/TutoTrianConverterCtrl/src/TutoTrianConverterCtrl/Plugin.cpp
new file mode 100644
index 0000000..b7f0cc1
--- /dev/null
+++ b/Samples/Tutorials/TutoTrianConverterCtrl/src/TutoTrianConverterCtrl/Plugin.cpp
@@ -0,0 +1,135 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/positional_options.hpp>
+#include <boost/program_options/variables_map.hpp>
+
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <fwServices/op/Add.hpp>
+#include <fwServices/registry/AppConfig.hpp>
+
+#include "TutoTrianConverterCtrl/Plugin.hpp"
+
+namespace TutoTrianConverterCtrl
+{
+
+static ::fwRuntime::utils::GenericExecutableFactoryRegistrar<Plugin> registrar("::TutoTrianConverterCtrl::Plugin");
+
+//------------------------------------------------------------------------------
+
+Plugin::Plugin() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+Plugin::~Plugin() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::start() throw( ::fwRuntime::RuntimeException )
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::initialize() throw( ::fwRuntime::RuntimeException )
+{
+    namespace po = boost::program_options;
+
+    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
+    SLM_ASSERT("Profile is not initialized", profile);
+    ::fwRuntime::profile::Profile::ParamsContainer params = profile->getParams();
+
+    std::string trianMeshPath;
+    std::string vtkMeshPath;
+
+    po::options_description cmdline_options("TutoTrianConverterCtrl options");
+    cmdline_options.add_options()
+        ("trian", po::value(&trianMeshPath)->required(), "Path of trian mesh file to convert")
+        ("vtk", po::value(&vtkMeshPath)->required(), "Path of created vtk mesh file")
+    ;
+
+    po::positional_options_description p;
+    p.add("trian", 1)
+    .add("vtk", 2);
+
+    po::variables_map vm;
+
+    try
+    {
+        po::store(po::command_line_parser(params)
+                  .options(cmdline_options)
+                  .positional(p)
+                  .run(),
+                  vm);
+        po::notify(vm);
+    }
+    catch(po::error& e)
+    {
+        std::cerr << cmdline_options << std::endl << e.what() << std::endl;
+        return;
+    }
+
+    m_mesh      = ::fwData::Mesh::New();
+    m_readerSrv = ::fwServices::add(m_mesh, "::io::IReader",
+                                    "::ioData::MeshReaderService");
+    ::fwRuntime::EConfigurationElement::sptr readerCfg         = ::fwRuntime::EConfigurationElement::New( "service" );
+    ::fwRuntime::EConfigurationElement::sptr readerFilenameCfg = ::fwRuntime::EConfigurationElement::New( "file" );
+    readerFilenameCfg->setValue(trianMeshPath);
+    readerCfg->addConfigurationElement(readerFilenameCfg);
+    m_readerSrv->setConfiguration( readerCfg );
+    m_readerSrv->configure();
+
+    m_writerSrv = ::fwServices::add(m_mesh, "::io::IWriter",
+                                    "::ioVTK::SMeshWriter");
+    ::fwRuntime::EConfigurationElement::sptr writerCfg         = ::fwRuntime::EConfigurationElement::New( "service" );
+    ::fwRuntime::EConfigurationElement::sptr writerFilenameCfg = ::fwRuntime::EConfigurationElement::New( "file" );
+    writerFilenameCfg->setValue(vtkMeshPath);
+    writerCfg->addConfigurationElement(writerFilenameCfg);
+    m_writerSrv->setConfiguration( writerCfg );
+    m_writerSrv->configure();
+
+    m_readerSrv->start();
+    m_writerSrv->start();
+    m_readerSrv->update();
+    m_writerSrv->update();
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::stop() throw()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Plugin::uninitialize() throw()
+{
+    if (m_writerSrv)
+    {
+        m_writerSrv->stop();
+        ::fwServices::OSR::unregisterService( m_writerSrv );
+    }
+    if(m_readerSrv)
+    {
+        m_readerSrv->stop();
+        ::fwServices::OSR::unregisterService( m_readerSrv );
+    }
+    m_mesh.reset();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace TutoTrianConverterCtrl
diff --git a/Apps/Tuto06Filter/CMakeLists.txt b/Samples/Tutorials/TutoVectorField/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto06Filter/CMakeLists.txt
rename to Samples/Tutorials/TutoVectorField/CMakeLists.txt
diff --git a/Samples/Tutorials/TutoVectorField/Properties.cmake b/Samples/Tutorials/TutoVectorField/Properties.cmake
new file mode 100644
index 0000000..186e58d
--- /dev/null
+++ b/Samples/Tutorials/TutoVectorField/Properties.cmake
@@ -0,0 +1,26 @@
+
+set( NAME TutoVectorField )
+set( VERSION 0.1 )
+set( TYPE APP)
+set( UNIQUE TRUE )
+set( DEPENDENCIES)
+set( REQUIREMENTS
+    dataReg
+    ctrlSelection
+    gui
+    guiQt
+    ioData
+    ioVTK
+    io
+    servicesReg
+    uiVisuQt
+    uiImageQt
+    uiIO
+    visuVTK
+    visuVTKQt
+    visuVTKAdaptor
+    fwlauncher
+    appXml
+)
+
+bundleParam(appXml PARAM_LIST config PARAM_VALUES TutoVectorField)
diff --git a/Samples/Tutorials/TutoVectorField/rc/plugin.xml b/Samples/Tutorials/TutoVectorField/rc/plugin.xml
new file mode 100644
index 0000000..d9339e1
--- /dev/null
+++ b/Samples/Tutorials/TutoVectorField/rc/plugin.xml
@@ -0,0 +1,188 @@
+<plugin id="TutoVectorField" version="@DASH_VERSION@" >
+
+    <requirement id="dataReg" />
+    <requirement id="servicesReg" />
+    <requirement id="visuVTKQt" />
+
+    <extension implements="::fwServices::registry::AppConfig">
+        <id>TutoVectorField</id>
+        <config>
+
+
+            <object type="::fwData::Composite">
+                <service uid="IHM" impl="::gui::frame::SDefaultFrame" type="::fwGui::IFrameSrv" autoConnect="no">
+                    <gui>
+                        <frame>
+                            <name>TutoVectorField</name>
+                        </frame>
+                        <menuBar />
+                    </gui>
+                    <registry>
+                        <menuBar sid="menuBar" start="yes" />
+                        <view sid="multiView_scene1" start="yes" />
+                    </registry>
+                </service>
+                <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menu name="File" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menu sid="menu_File" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="menu_File" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no">
+                    <gui>
+                        <layout>
+                            <menuItem name="Open file" shortcut="Ctrl+O" />
+                            <menuItem name="Save file" shortcut="Ctrl+S" />
+                            <separator />
+                            <menuItem name="Quit" specialAction="QUIT" shortcut="Ctrl+Q" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <menuItem sid="action_openFile" start="yes" />
+                        <menuItem sid="action_saveFile" start="yes" />
+                        <menuItem sid="action_quit" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="action_openFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="readerPathFile" />
+                </service>
+                <service uid="action_saveFile" type="::fwGui::IActionSrv" impl="::gui::action::SStarter" autoConnect="no">
+                    <start uid="writerPathFile" />
+                </service>
+                <service uid="action_quit" type="::fwGui::IActionSrv" impl="::gui::action::SQuit" autoConnect="no" />
+
+                <service uid="multiView_scene1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::CardinalLayoutManager">
+                            <view align="center" />
+                            <view align="bottom" minWidth="400" minHeight="30" resizable="no" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="genericScene" start="yes" />
+                        <view sid="multiView_scene1_bottom" start="yes" />
+                    </registry>
+                </service>
+
+
+                <service uid="multiView_scene1_bottom" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no">
+                    <gui>
+                        <layout type="::fwGui::LineLayoutManager">
+                            <orientation value="horizontal" />
+                            <view proportion="0" minWidth="30" />
+                            <view proportion="0" minWidth="50" />
+                            <view proportion="1" />
+                            <view proportion="0" minWidth="30" />
+                        </layout>
+                    </gui>
+                    <registry>
+                        <view sid="sliceListEditor" start="yes" />
+                        <view sid="showScanEditor" start="yes" />
+                        <view sid="sliderIndexEditor" start="yes" />
+                        <view sid="snapshotScene1Editor" start="yes" />
+                    </registry>
+                </service>
+
+                <service uid="snapshotScene1Editor" type="::gui::editor::IEditor" impl="::uiVisu::SnapshotEditor" autoConnect="no" />
+
+                <!-- CompositeVisu description -->
+                <item key="compositeVisu">
+                    <object uid="compositeVisu" type="::fwData::Composite">
+
+
+                        <service uid="genericScene" impl="::fwRenderVTK::SRender" type="::fwRender::IRender" autoConnect="yes">
+                            <scene>
+                                <picker id="picker" vtkclass="fwVtkCellPicker" />
+
+                                <renderer id="default" background="0.5" />
+
+                                <adaptor uid="MPRNegatoScene3D" id="MPRNegato3D" class="::visuVTKAdaptor::NegatoMPR" objectId="image">
+                                    <config renderer="default" picker="picker" mode="3D" slices="3" sliceIndex="axial" />
+                                </adaptor>
+
+                                <adaptor uid="vectorFieldAdatpor" id="vectorFieldAdatporId" class="::visuVTKAdaptor::VectorField" objectId="image">
+                                    <config renderer="default" />
+                                </adaptor>
+
+                                <adaptor id="snapshot1" uid="snapshotUID" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                                    <config renderer="default" />
+                                </adaptor>
+
+                                <connect>
+                                    <signal>snapshotScene1Editor/snapped</signal>
+                                    <slot>snapshotUID/snap</slot>
+                                </connect>
+
+                                <connect waitForKey="image">
+                                    <signal>showScanEditor/toggled</signal>
+                                    <slot>MPRNegatoScene3D/showSlice</slot>
+                                </connect>
+
+                                <connect waitForKey="image">
+                                    <signal>sliceListEditor/selected</signal>
+                                    <slot>MPRNegatoScene3D/updateSliceMode</slot>
+                                </connect>
+                            </scene>
+                        </service>
+
+                        <item key="image">
+
+                            <object uid="image" type="::fwData::Image">
+
+                                <service uid="readerPathFile" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                    <type mode="reader" />
+                                </service>
+
+                                <service uid="writerPathFile" impl="::uiIO::editor::SIOSelector" type="::gui::editor::IDialogEditor" autoConnect="no">
+                                    <type mode="writer" />
+                                </service>
+
+                                <!-- This service convert a simple fwData::Image to medical Image -->
+                                <service uid="medicalImageConverter" impl="::ctrlSelection::MedicalImageSrv" type="::fwServices::IController" autoConnect="no" />
+
+                                <service uid="sliceListEditor" type="::gui::editor::IEditor" impl="::guiQt::editor::SSelectionMenuButton" autoConnect="no">
+                                    <toolTip>Manage slice visibility</toolTip>
+                                    <selected>3</selected>
+                                    <items>
+                                        <item text="One slice" value="1" />
+                                        <item text="three slices" value="3" />
+                                    </items>
+                                </service>
+                                <service uid="showScanEditor" type="::gui::editor::IEditor" impl="::guiQt::editor::SSignalButton" autoConnect="no">
+                                    <config>
+                                        <checkable>true</checkable>
+                                        <icon>@BUNDLE_PREFIX@/media_0-1/icons/sliceHide.png</icon>
+                                        <icon2>@BUNDLE_PREFIX@/media_0-1/icons/sliceShow.png</icon2>
+                                        <iconWidth>40</iconWidth>
+                                        <iconHeight>16</iconHeight>
+                                        <checked>true</checked>
+                                    </config>
+                                </service>
+                                <service uid="sliderIndexEditor" type="::gui::editor::IEditor" impl="::uiImage::SliceIndexPositionEditor" autoConnect="yes">
+                                    <sliceIndex>axial</sliceIndex>
+                                </service>
+
+                                <connect>
+                                    <signal>showScanEditor/toggled</signal>
+                                    <slot>sliceListEditor/setEnabled</slot>
+                                </connect>
+                            </object>
+                        </item>
+                    </object>
+                </item>
+
+                <start uid="IHM" />
+
+            </object>
+
+
+        </config>
+    </extension>
+
+</plugin>
diff --git a/SrcLib/ARLcore/CMakeLists.txt b/SrcLib/ARLcore/CMakeLists.txt
deleted file mode 100644
index abc3054..0000000
--- a/SrcLib/ARLcore/CMakeLists.txt
+++ /dev/null
@@ -1,48 +0,0 @@
-fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwTools
-)
-
-
-find_package( Boost REQUIRED )
-
-if(CLASSIC_INSTALL)
-    find_library( ANN_LIBRARY ANN )
-else()
-    find_library( ANN_LIBRARY ann )
-endif()
-find_path( ANN_INCLUDES  ANN/ANN.h)
-
-find_library(VGL_ALGO_LIBRARY   vgl_algo )
-find_library(VNL_ALGO_LIBRARY   vnl_algo )
-find_library(VNL_LIBRARY        vnl )
-find_library(VGL_LIBRARY        vgl )
-find_library(VCL_LIBRARY        vcl )
-find_library(V3P_NETLIB_LIBRARY v3p_netlib )
-find_library(NETLIB_LIBRARY     netlib )
-
-find_path( VNL_INCLUDE_PATH  vxl/core/vnl/vnl_alloc.h)
-
-fwForwardInclude(
-    ${Boost_INCLUDE_DIR}
-    ${ANN_INCLUDES}
-    ${VNL_INCLUDE_PATH}
-    ${VNL_INCLUDE_PATH}/vxl
-    ${VNL_INCLUDE_PATH}/vxl/core
-    ${VNL_INCLUDE_PATH}/vxl/vcl
-    )
-
-#add linked libraries
-fwLink(
-    ${ANN_LIBRARY}
-    ${VGL_ALGO_LIBRARY}
-    ${VNL_ALGO_LIBRARY}
-    ${VNL_LIBRARY}
-    ${VGL_LIBRARY}
-    ${VCL_LIBRARY}
-    ${V3P_NETLIB_LIBRARY}
-    ${NETLIB_LIBRARY}
-    )
-
-
diff --git a/SrcLib/ARLcore/CMakeLists.txt.old b/SrcLib/ARLcore/CMakeLists.txt.old
deleted file mode 100644
index fb0c8b2..0000000
--- a/SrcLib/ARLcore/CMakeLists.txt.old
+++ /dev/null
@@ -1,60 +0,0 @@
-#cmake version
-cmake_minimum_required(VERSION 2.8)
-
-project(ARLcore)
-
-set(TARGET_NAME ARLcore)
-
-file( GLOB_RECURSE SOURCES src/* )
-file( GLOB_RECURSE INCLUDES include/* )
-
-set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG ${CMAKE_CXX_FLAGS_DEBUG}" )
-
-find_package( Boost 1.40 REQUIRED )
-
-find_library( ANN_LIBRARY ANN )
-
-find_path( ANN_INCLUDES  ANN/ANN.h)
-
-find_library(VGL_ALGO_LIBRARY   vgl_algo )
-find_library(VNL_ALGO_LIBRARY   vnl_algo )
-find_library(VNL_LIBRARY        vnl )
-find_library(VGL_LIBRARY        vgl )
-find_library(VCL_LIBRARY        vcl )
-find_library(V3P_NETLIB_LIBRARY v3p_netlib )
-find_library(NETLIB_LIBRARY     netlib )
-
-find_path( VNL_INCLUDE_PATH  vxl/core/vnl/vnl_alloc.h)
-
-include_directories(
-    "include"
-    ${Boost_INCLUDE_DIR}
-
-    ${ANN_INCLUDES}
-
-    ${VNL_INCLUDE_PATH}
-    ${VNL_INCLUDE_PATH}/vxl
-    ${VNL_INCLUDE_PATH}/vxl/core
-    ${VNL_INCLUDE_PATH}/vxl/vcl
-    )
-
-#declaration of target
-add_library( ${TARGET_NAME} SHARED ${SOURCES} ${INCLUDES})
-
-#add linked libraries
-target_link_libraries(${TARGET_NAME}
-    ${ANN_LIBRARY}
-    ${VGL_ALGO_LIBRARY}
-    ${VNL_ALGO_LIBRARY}
-    ${VNL_LIBRARY}
-    ${VGL_LIBRARY}
-    ${VCL_LIBRARY}
-    ${V3P_NETLIB_LIBRARY}
-    ${NETLIB_LIBRARY}
-    )
-set_target_properties(
-    ${TARGET_NAME} PROPERTIES DEFINE_SYMBOL  "ARLCORE_EXPORTS" 
-    )
-set_target_properties(${TARGET_NAME} PROPERTIES OUTPUT_NAME ARLcore)
-set_target_properties(${TARGET_NAME} PROPERTIES VERSION 0.2)
-
diff --git a/SrcLib/ARLcore/Properties.cmake b/SrcLib/ARLcore/Properties.cmake
deleted file mode 100644
index 6d71597..0000000
--- a/SrcLib/ARLcore/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME ARLcore )
-set( VERSION 0.2 )
-set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwTools )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/ARLcore/bin/build.options b/SrcLib/ARLcore/bin/build.options
deleted file mode 100755
index effdfce..0000000
--- a/SrcLib/ARLcore/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-TYPE = 'shared'
-LIB     = ['fwTools_0-1' ,'fwCore_0-1' ]
-USE  = ['vxlVcl','vxlVnlAlgo','vxlVglAlgo','ann','boost']
-VERSION = '0-1'
diff --git a/SrcLib/ARLcore/include/arlcore/Calibration.h b/SrcLib/ARLcore/include/arlcore/Calibration.h
deleted file mode 100644
index 6d3485e..0000000
--- a/SrcLib/ARLcore/include/arlcore/Calibration.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_CALIBRATION_H
-#define _ARLCORE_CALIBRATION_H
-#include <arlcore/Common.h>
-
-#include <arlcore/Camera.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/Point.h>
-#include <arlcore/PointsList.h>
-
-namespace arlCore
-{
-    /**
-    * @brief Intrinsic camera parameter initialisation
-    * @param[in] models3D List of 3D models, one for each pose (the object has to be a plane)
-    * If the 3D model does not change in all the pose you can provide only one PointList that corresponds
-    * to the calibration object 3D points
-    * If your calibration object changes in each pose (for example because some points are occluded), you have to
-    * give for each pose the PointList corresponding to the calibration object that is used
-    * @param[in] points2D : PointList vector of 2D points extracted for each pose
-    * @param[in,out] camera : result of the calibration is written in arlcore::camera
-    * @param[out] extrinsic : this vector vnl_rigid_matrix contains for each object pose (after calibration)
-    * the rigid transformation between the camera frame and the object frame
-    * @param[in] optimiserParameters : optional parameter list not used here
-    * @param[out] log[0] gives the number of pose used in the calibration
-    * @param[out] log[i+1] provides the average reprojection error for the ith pose (sum_j euclidean_dist(reproj_j - extracted_j))
-    * @warning : this initialization fonction works for 3D objects which Z coordinates are 0 only.
-    */
-    ARLCORE_API bool initIntrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector < PointList::csptr >& points2D, Camera &, std::vector< vnl_rigid_matrix> &extrinsic,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log );
-
-    /**
-    * @brief Refinement of the camera intrinsic parameters
-    * @param[in] models3D List of 3D models, one for each pose
-    * If the 3D model does not change in all the N poses you can provide only one PointList that corresponds
-    * to the calibration object 3D points
-    * If your calibration object changes in each pose (for example because some points are occluded), you have to
-    * give for each pose the PointList corresponding to the calibration object that is used
-    * @param[in] points2D : PointList vector of 2D points extracted for each pose
-    * @param[in,out] camera : contains the initialization parameters and is modified after the calibration
-    * @param[in] nbParameters : corresponds to the model of camera that is used for the optimization
-    * if nbParameters = 8, the camera has the following parameters : fc1, fc2, cc1, cc2, k1, k2, k3, k4 are optimized
-    * if nbParameters = 6, the camera has the following parameters : fc1, fc2, cc1, cc2, k1, k2  are optimized (TODO not implemented)
-    * if nbParameters = 5, the camera has the following parameters : fc1, fc2, cc1, cc2, k1  are optimized (TODO not implemented)
-    * if nbParameters = 4, the camera has the following parameters : fc1, fc2, cc1, cc2  are optimized (TODO not implemented)
-    * @param[out] extrinsic : : this vector vnl_rigid_matrix contains for each object pose (after calibration)
-    * the rigid transformation between the camera frame and the object frame
-    * @param[in] optimiserParameters optional parameter for the optimiser
-    *               [0]=Optimization method (0=LEVENBERG-MARQUARDT ; 1=POWELL) Default=0
-    *               [1]=Verbose (0=false else true) Default=0
-    *               [2]=f tolerance Default=1e-6
-    *               [3]=x tolerance Default=1e-8
-    *               [4]=g tolerance Default=1e-5
-    * @param[out] log List
-    *               [0]=Average reprojection error RMS at the end of the optimization (sqrt(mean(sum_i reprojection_error)))
-    *               [1]=Average reprojection error RMS at the beginning of the optimization
-    *               [2]=Number of iteration to converge
-    *               [3]=Number of pose
-    *               [3+1]=Number of point for the first pose
-    *               [3+i]=Number of point for the ith pose
-    *               [3+N]=Number of point for the last pose
-    *               [3+N+1]=Number total of point
-    *               [3+N+2 -> 3+N+??]= Reprojection error for each of the points
-    *
-    */
-    ARLCORE_API bool refineIntrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector < PointList::csptr >& points2D, unsigned int nbParameters,
-        Camera &, std::vector< vnl_rigid_matrix> &, const std::vector<double> &optimiserParameters,
-        std::vector<double> &log );
-
-    /**
-    * @brief Compute the intrinsic parameters of a camera : Initialisation + Refinement
-    * @param[in] models3D List of 3D models, one for each pose
-    * If the 3D model does not change in all the pose you can provide only one PointList that corresponds
-    * to the calibration object 3D points
-    * If your calibration object changes in each pose (for example because some points are occluded), you have to
-    * give for each pose the PointList corresponding to the calibration object that is used
-    * @param[in] points2D : PointList vector of 2D points extracted for each pose
-    * @param[in,out] camera : contains the initialization parameters and is modified after the calibration
-    * @param[in] nbParameters : corresponds to the model of camera that is used for the optimization
-    * if nbParameters = 8, the camera has the following parameters : fc1, fc2, cc1, cc2, k1, k2, k3, k4 are optimized
-    * if nbParameters = 6, the camera has the following parameters : fc1, fc2, cc1, cc2, k1, k2  are optimized (TODO not implemented)
-    * if nbParameters = 5, the camera has the following parameters : fc1, fc2, cc1, cc2, k1  are optimized (TODO not implemented)
-    * if nbParameters = 4, the camera has the following parameters : fc1, fc2, cc1, cc2  are optimized (TODO not implemented)
-    * @param[out] extrinsic : : this vector vnl_rigid_matrix contains for each object pose (after calibration)
-    * the rigid transformation between the camera frame and the object frame
-    * @param[in] optimiserParameters optional parameter list that is used for the refinement method (see refineIntrinsicCalibration
-    * to understand how to fill it)
-    * log will contains the log of arlcore::initIntrinsicCalibration and arlcore::refineIntrinsicCalibration
-    * @param[out] log[0] gives the number of pose N used in the calibration
-    * @param[out] log[1 -> N] provides the average reprojection error for the ith pose during the initialization process
-    * @param[out] log[N+1] = Average reprojection error RMS at the end of the optimization
-    * @param[out] log[N+2] = Average reprojection error RMS at the beginning of the optimization
-    * @param[out] log[N+3] = Iteration number to converge
-    * @param[out] log[N+4] gives the number of pose N used in the calibration
-    * @param[out] log[N+4+i] gives the number of point of the ith pose
-    * @param[out] log[N+4+N] gives the number of point of the Nth pose
-    * @param[out] log[N+4+N+1 -> N+4+N+1 +?? ] Reprojection error for each of the points
-    */
-    ARLCORE_API bool intrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector < PointList::csptr >& points2D, unsigned int nbParameters,
-        Camera &, std::vector< vnl_rigid_matrix>& extrinsics, const std::vector<double>& optimiserParameters,
-        std::vector<double>& log );
-
-    /**
-    * @brief Initialisation of the extrinsic calibration between several cameras
-    * The parameter cameras is not changed !
-    * The rigid transformation from the calibration grid (for the ith pose) to the camera 0
-    * is given in extrinsics[i-1]
-    * The rigid transformation from the camera 0 frame to the jth camera frame is given in
-    * extrinsic[nbPose+j-1]
-    * @param[in] models3D List of 3D models points for each pose
-    * @param[in] listsPoints2D List of 2D points (reprojection of th 3D model points) detected for each pose for each camera
-    * @param[in] cameras List of cameras that we want to calibrate
-    * @param[out] extrinsics contains the transformation matrix from the camera 0 frame to the 3D model for each pose
-    * and is followed by the the transformation matrix from the camera 0 frame to camera j frame (computed using the pose 0 only)
-    * cf. Calibration.cpp to understand the criteria
-    * @param[in] optimiserParameters optional list of parameters for the planarHomography function used in the function
-    * @param[out] log[0] gives the number of pose used in the calibration
-    * @param[out] log List of results to check the estimation quality (TODO still not used now)
-    */
-    ARLCORE_API bool initExtrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector<std::vector<std::vector<Point::csptr > > >& listsPoints2D,
-        const std::vector<const Camera*>& cameras,
-        std::vector< vnl_rigid_matrix>& extrinsics,
-        const std::vector<double> &optimiserParameters,
-        std::vector<double> &log );
-
-    ARLCORE_API bool initExtrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector<std::vector<std::vector<Point::csptr > > >& listsPoints2D, const std::vector<Camera>& cameras,
-        std::vector< vnl_rigid_matrix>& extrinsics, const std::vector<double> &optimiserParameters, std::vector<double> &log );
-
-    /**
-    * @brief Refinement of the extrinsic calibration of several cameras
-    * @param[in] models3D List of 3D models, one for each pose
-    * @param[in] listsPoints2D List of 2D points (reprojection of th 3D model points) detected for each pose for each camera
-    * @param[in] cameras List of cameras that we want to calibrate (extrinsic parameters have to be identity)
-    * @param[out] extrinsics contains the transformation matrix from the camera 0 frame to the 3D model for each pose
-    * and is followed by the transformation matrix T_j from the camera 0 frame to camera j frame ( M_i^j = T_j * M_i^0)
-    * cf. Calibration.cpp to understand the criteria
-    * @param[in] optimiserParameters optional parameter for the optimiser
-    *               [0]=Optimization method (0=LEVENBERG-MARQUARDT ; 1=POWELL) Default=0
-    *               [1]=Verbose (0=false else true) Default=0
-    *               [2]=f tolerance Default=1e-6
-    *               [3]=x tolerance Default=1e-8
-    *               [4]=g tolerance Default=1e-5
-    * @param[out] log List
-    *               [0]=End error
-    *               [1]=Start error
-    *               [2,n+1]=Reprojection error for each of the n points
-    */
-    ARLCORE_API bool refineExtrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector<std::vector<std::vector<Point::csptr > > >& listsPoints2D, const std::vector<const Camera*>& cameras,
-        std::vector< vnl_rigid_matrix>& extrinsics, const std::vector<double> &optimiserParameters, std::vector<double> &log );
-
-    ARLCORE_API bool refineExtrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector<std::vector<std::vector<Point::csptr > > >& listsPoints2D, const std::vector<Camera>& cameras,
-        std::vector< vnl_rigid_matrix>& extrinsics, const std::vector<double> &optimiserParameters, std::vector<double> &log );
-
-    /**
-    * @brief Extrinsic calibration of several cameras
-    * @param[in] models3D List of 3D models, one for each pose
-    * @param[in] listsPoints2D List of 2D points (reprojection of th 3D model points) detected for each pose for each camera
-    * @param[in] cameras List of cameras that we want to calibrate (extrinsic parameters have to be identity)
-    * @param[out] extrinsics contains the transformation matrix from the camera 0 frame to the 3D model for each pose
-    * and is followed by the transformation matrix from the camera 0 frame to camera j frame (computed using the pose 0 only)
-    * cf. Calibration.cpp to understand the criteria
-    * @param[in] optimiserParameters optional parameter list that is used for the refinement method (see refineExtrinsicCalibration
-    * to understand how to fill it)
-    * @param[out] log[0] gives the number of pose used in the calibration
-    * @param[out] log List (identical to the arlcore::refineExtrinsicCalibration log)
-    *               [1]=End error
-    *               [2]=Start error
-    *               [3,n+1]=Reprojection error for each of the n points
-    */
-    ARLCORE_API bool extrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector<std::vector<std::vector<Point::csptr > > >& listsPoints2D, const std::vector<const Camera*>& cameras,
-        std::vector< vnl_rigid_matrix>& extrinsics, const std::vector<double> &optimiserParameters, std::vector<double> &log );
-
-    ARLCORE_API bool extrinsicCalibration(const std::vector< PointList::csptr >& models3D,
-        const std::vector<std::vector<std::vector<Point::csptr > > >& listsPoints2D, const std::vector<Camera>& cameras,
-        std::vector< vnl_rigid_matrix>& extrinsics, const std::vector<double> &optimiserParameters, std::vector<double> &log );
-
-} // namespace arlCore
-#endif // _ARLCORE_CALIBRATION_H
diff --git a/SrcLib/ARLcore/include/arlcore/Camera.h b/SrcLib/ARLcore/include/arlcore/Camera.h
deleted file mode 100644
index 0730f59..0000000
--- a/SrcLib/ARLcore/include/arlcore/Camera.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_CAMERA_H
-#define _ARLCORE_CAMERA_H
-#include <arlcore/Common.h>
-
-#include <string>
-
-#include <vnl/vnl_matrix_fixed.h>
-#include <vnl/vnl_vector_fixed.h>
-#include <vgl/vgl_point_2d.h>
-#include <vgl/vgl_point_3d.h>
-#include <vgl/vgl_line_2d.h>
-#include <vgl/vgl_plane_3d.h>
-
-#include <arlcore/Object.h>
-#include <arlcore/Point.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/Particle.h>
-#include <arlcore/MatrixR.h>
-
-namespace arlCore
-{
-    class PlaneSystem;
-    class Point;
-    /**
-     * @class   Camera
-     * @date    2007
-     * @brief   Parametres physiques d'une camera (intrinsèques et extrinsèques)
-     */
-    class Camera :  public Particle
-    {
-    public:
-        //! @brief Constructor
-        ARLCORE_API Camera( PlaneSystem &universe );
-
-        //! @brief Constructor
-        ARLCORE_API Camera( PlaneSystem &universe, const uint32HL &GUID );
-
-        //! @brief Constructor by copy
-        ARLCORE_API Camera( const Camera &c );
-
-        //! @brief Destructor
-        ARLCORE_API ~Camera( void );
-
-        //! @brief Affectation
-        ARLCORE_API Camera& operator=(const Camera&);
-
-        //! @brief Copy
-        ARLCORE_API void copy(const Camera&);
-
-        //! @brief Initialization with default parameters
-        ARLCORE_API void init( void );
-
-        //! @return Description of the current camera
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @brief Save the current camera into a file
-        ARLCORE_API bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @brief Load the current camera from a file
-        ARLCORE_API bool load( const std::string &fileName );
-
-        /**
-        * @brief Création d'une caméra synthétique
-        * @param[in] center Point vers lequel est oriente la camera
-        * @param[in] viewPoint Position du centre optique de la camera
-        * @param[in] intrinsicParams Parametres intrinseques = {fx;fy;cx;cy;k1;k2;p1;p2;k3;alphaC}
-        * (Selon le modele choisi - ici par defaut modele de zhang)
-        * @return False si le point de vue de la camera est identique au point qu'elle regarde, True sinon
-        */
-        ARLCORE_API bool syntheticCamera( Point::csptr  center , Point::csptr  viewPoint, const std::vector< double > &intrinsicParams);
-
-        /**
-        * @return Unique ID of calibration.
-        * If several cameras have the same ID, that means they share the same reference plane
-        * If equal to zero <=> Unique calibration reference
-        */
-        ARLCORE_API long int getCalibrationID( void ) const;
-
-        /**
-        * @brief Load appropriate parameters, functions of date and image size
-        * filename point to a file with references of all avalaible calibrations
-        */
-        ARLCORE_API bool loadParameters( const std::string &fileName, const long int date, unsigned int width, unsigned int height );
-
-        /**
-        * @brief Load appropriate parameters, functions of date and image size
-        * filename point to a file with references of all avalaible calibrations
-        * Old file format : Deprecated
-        */
-        ARLCORE_API bool loadOldParameters( const std::string &fileName, long int date, unsigned int width, unsigned int height );
-
-        //! @brief Set the extrinsic matrix with T
-        ARLCORE_API bool setExtrinsic( const vnl_rigid_matrix &T );
-
-        //! @return Extrinsic matrix
-        ARLCORE_API const vnl_rigid_matrix& getExtrinsic( void ) const;
-
-        //! @return Inverse of extrinsic matrix
-        ARLCORE_API const vnl_rigid_matrix& getInvExtrinsic( void ) const;
-
-        //! @return true, if intrinsic matrix is intialize
-        ARLCORE_API bool isIntrinsicCalibrated( void ) const;
-
-        //! @return Intrinsic matrix
-        ARLCORE_API const vnl_matrix_fixed<double,3,3>& getIntrinsicMatrix( void ) const;
-
-        //! @return Inverse of intrinsic matrix
-        ARLCORE_API const vnl_matrix_fixed<double,3,3>& getInvIntrinsicMatrix( void ) const;
-
-        //! @return Intrinsic vector = [fx,fy,cx,cy,kc0,kc1,kc2,kc3,kc4,alphaC)
-        ARLCORE_API const vnl_vector<double> getIntrinsicVector( void ) const;
-
-        //! @return Distortion vector = [k1,k2,p1,p2,k3]
-        ARLCORE_API const vnl_vector_fixed<double,5>& getDistortion( void ) const;
-
-        //! @return cx or u0 = x-coordinate of optical center
-        ARLCORE_API double getcx( void ) const;
-        ARLCORE_API void setcx( double );
-
-        //! @return cy or v0 = y-coordinate of optical center
-        ARLCORE_API double getcy( void ) const;
-        ARLCORE_API void setcy( double );
-
-        //! @return fx = x-coordinate of optical center
-        ARLCORE_API double getfx( void ) const;
-        ARLCORE_API void setfx( double );
-
-        //! @return fy = y-coordinate of optical center
-        ARLCORE_API double getfy( void ) const;
-        ARLCORE_API void setfy( double );
-
-        //! @return AlphaC or skew
-        ARLCORE_API double getAlphaC( void ) const;
-        ARLCORE_API void setAlphaC( double );
-
-        //! @return Distortion coefficients [0;4]
-        ARLCORE_API double getkc( unsigned int ) const;
-        ARLCORE_API bool setkc( unsigned int, double );
-
-        /**
-        * @brief Set completly or partially Intrinsic parameters with v in this order :
-        * fx,fy,cx,cy,k1,k2,p1,p2,k3,alphaC
-        * @return Number of set parameters
-        */
-        ARLCORE_API unsigned int setIntrinsic( const vnl_vector<double> &v );
-
-        //! @brief Getter for intermediate values
-        ARLCORE_API const vnl_matrix_fixed<double,2,3>& getQint( void ) const;
-        ARLCORE_API const vnl_matrix_fixed<double,2,3>& getQext( void ) const;
-        ARLCORE_API const vnl_vector_fixed<double,3>& getCint( void ) const;
-        ARLCORE_API const vnl_vector_fixed<double,3>& getCext( void ) const;
-        ARLCORE_API const vnl_vector_fixed<double,2>& getBint( void ) const;
-        ARLCORE_API const vnl_vector_fixed<double,2>& getBext( void ) const;
-
-        /**
-        * @brief 3D equation of the projective line in focal plane
-        * @param[in] focalPt2DH Homogen 2D point in focal plane
-        * @param[out] line3D 3D equation of the projective line
-        * @return True if the computation is possible
-        */
-        ARLCORE_API bool projectiveLine( const vnl_vector_fixed<double,3> &focalPt2DH, vgl_line_3d_2_points <double> &line3D ) const;
-
-        /**
-        * @brief Reprojection du point3D dans le repère de la caméra
-        * point2D est calculé dans le plan de la focale si focalPlane==true, dans le plan pixel sinon
-        * @param[in] point3DH Point 3D à reprojeter
-        * @param[out] point2D reprojeté
-        * @param[in] focalPlane True si le calcul est effectué dans le plan de la focal ou false dans le plan pixel
-        * @return True si le calcul est possible, false sinon (si le point2D est dans le plan de la focale par exemple)
-        */
-        ARLCORE_API bool project3DPoint( const vnl_vector_fixed<double,4>& point3DH, vnl_vector_fixed<double,2>& point2D, bool focalPlane=false) const;
-
-        /**
-        * @brief Reprojection du point3D dans le repère de la caméra
-        * point2D est calculé dans le plan de la focale si focalPlane==true, dans le plan pixel sinon
-        * @param[in] pt3D Point 3D à reprojeter
-        * @param[out] pt2D reprojeté
-        * @param[in] focalPlane True si le calcul est effectué dans le plan de la focal ou false dans le plan pixel
-        * @return True si le calcul est possible, false sinon (si le point2D est dans le plan de la focale par exemple)
-        */
-        ARLCORE_API bool project3DPoint( Point::csptr  pt3D, Point::sptr pt2D, bool focalPlane=false) const;
-
-        /**
-        * @brief Reprojection d'une liste de points 3D dans le repère de la caméra
-        * Les points 2D sont calculés dans le plan de la focale si focalPlane==true, dans le plan pixel sinon
-        * @param[in] list3D Liste de point 3D à reprojeter
-        * @param[out] list2D Liste de points 2D reprojetés
-        * @param[in] focalPlane True si le calcul est effectué dans le plan de la focal ou false dans le plan pixel
-        * @return Nombre de points 2D correctement reprojetés
-        */
-        ARLCORE_API unsigned int project3DPoint( PointList::csptr list3D, PointList::sptr list2D, bool FocalFrame=false) const;
-
-        //! @brief Undistort 2D pixel point
-        ARLCORE_API bool undistort2DPoint(Point::csptr  p2D, Point::sptr  p2D_undistorted) const;
-
-        //! @brief Set a 2D point from unitFocalPlane to pixelPlane
-        ARLCORE_API bool unitFocalPlaneToPixelPlane( const vgl_point_2d<double>&, vgl_point_2d<double>& ) const;
-
-        //! @brief Set a 2D point from  pixelPlane to unitFocalPlane with or without perfect distorsion evaluation
-        ARLCORE_API bool pixelPlaneToUnitFocalPlane( Point::csptr , Point::sptr , bool perfectDisto ) const;
-        ARLCORE_API bool pixelPlaneToUnitFocalPlane( Point::csptr , vnl_vector_fixed<double,3>&, bool perfectDisto ) const;
-        ARLCORE_API bool pixelPlaneToUnitFocalPlane( Point::csptr , vgl_point_2d<double>&, bool perfectDisto ) const;
-        ARLCORE_API bool pixelPlaneToUnitFocalPlane( Point::csptr , vgl_point_3d<double>&, bool perfectDisto ) const;
-        ARLCORE_API bool pixelPlaneToUnitFocalPlane( const vgl_point_2d<double>&, vgl_point_3d<double>&, bool perfectDisto ) const;
-
-        //! @brief Set a 3D point from focalframe to extrinsicFrame
-        ARLCORE_API bool focalFrameToExtrinsicFrame( const vnl_vector_fixed< double, 3 >&, vnl_vector_fixed< double, 3 >& ) const;
-        ARLCORE_API bool focalFrameToExtrinsicFrame( const vgl_point_3d< double >&, vgl_point_3d< double >& ) const;
-
-        /**
-        * @brief Calcul 2 points définis dans le plan pixel à partir d'une droite dans le plan focal
-        * @param[in] (a,b,c) l'equation d'une droite dans le plan focal, ax+by+c=0
-        * @param[in] (ROI1,ROI2) dans le plan pixel, coin supérieur gauche et inférieur droit
-        * @param[out] (ROI1,ROI2) dans le plan pixel, recoit les coordonnes des intersections avec la ROI
-        */
-        ARLCORE_API bool focalToPixelLine( double a, double b, double c, SPTR( Point ) ROI1, SPTR( Point ) ROI2 ) const;
-
-        /**
-        * @brief Calcul 2 points définis dans le plan pixel à partir d'une droite dans le plan focal
-        * @param[in] (a,b,c) l'equation d'une droite dans le plan focal, ax+by+c=0
-        * @param[in] org Origine dans le plan pixel
-        * @param[in] dst Destination dans le plan pixel
-        * @param[in] nbSegments [1,n] Nombre de segments constituant la droite. Si 0, évalue le nb max de segments pour la résolution
-        * @param[out] pl Recoit la liste des points en coordonnées pixel constituant chaque segment
-        */
-        ARLCORE_API bool focalToPixelLine( double a, double b, double c, CSPTR( Point ) org, CSPTR( Point ) dst, SPTR( PointList ) pl, unsigned int nbSegments=0 ) const;
-
-        /**
-        * @brief 3D equation in focal plane of a pixel line
-        * @param[in] line2D 2D line equation in pixel plane
-        * @param[out] line3D 3D line equation in focal plane
-        * @return True if the computation is possible
-        */
-        ARLCORE_API bool pixelToFocalLine( const vgl_line_2d<double> &line2D, vgl_line_3d_2_points <double> &line3D ) const;
-
-    private:
-        //! @brief Refresh precalculated data
-        void extCompute( void );
-
-        //! Universal ID for the physic's camera
-        uint32HL m_cameraGUID;
-        long int m_noCalibration;
-
-        vnl_rigid_matrix m_extrinsic; //!< Extrinsic matrix
-        vnl_matrix_fixed<double,3,3> m_intrinsicMatrix; //!< [fx 0 cx; 0 fy cy; 0 0 1]
-        vnl_vector_fixed<double,5> m_distortionCoeffs; //!< [k1, k2, p1, p2, k3]
-        double m_alphaC; //!< skew
-
-
-        //! Precalculated data. Redondant informations
-        vnl_matrix_fixed<double,2,3> m_Qint; //!< [ fx  0 cx ; 0 fy 0 ]
-        vnl_matrix_fixed<double,2,3> m_Qext; //!< extracted from the full projective 3x4 matrix (intrinsic x extrinsic)
-        vnl_vector_fixed<double,2> m_Bint;
-        vnl_vector_fixed<double,3> m_Cint;
-        vnl_vector_fixed<double,2> m_Bext;
-        vnl_vector_fixed<double,3> m_Cext;
-        vnl_rigid_matrix m_invExtrinsic; //!< Invert extrinsic matrix
-        vnl_matrix_fixed<double,3,3> m_invIntrinsicMatrix; //!< Invert intrinsic matrix
-        vnl_vector_fixed< double,3 > m_opticalCenterInExtrinsicFrame; //!< Position 3D du centre optique dans le rep�re extrins�que
-    };
-
-    /**
-    * @brief Compute epipolar line in focal plane
-    * @param[in] p Point in the focal plane of the 1st camera
-    * @param[in] PM Passage matrix from 1st camera to 2nd camera
-    * PM=camera2->getExtrinsic()).as_matrix()*vnl_matrix_inverse<double>(camera1->getExtrinsic());
-    * @return Equation of epipolar line in the focal plane of the 2nd camera, ax+by+c=0
-    */
-    ARLCORE_API bool getEpipolar(CSPTR( Point ) p, const vnl_matrix_fixed<double,4,4> &PM, double &a, double &b, double &c);
-    ARLCORE_API bool getEpipolar(CSPTR( Point ) p, const vnl_matrix_fixed<double,4,4> &PM, vgl_line_2d< double > &d);
-    ARLCORE_API bool getEpipolar(const vnl_vector_fixed<double,3> &p, const vnl_matrix_fixed<double,4,4> &PM, double &a, double &b, double &c);
-    ARLCORE_API bool getEpipolar(const vnl_vector_fixed<double,3> &p, const vnl_matrix_fixed<double,4,4> &PM, vgl_line_2d< double > &d);
-
-} // namespace arlCore
-#endif // _ARLCORE_CAMERA_H
diff --git a/SrcLib/ARLcore/include/arlcore/CameraList.h b/SrcLib/ARLcore/include/arlcore/CameraList.h
deleted file mode 100644
index c521720..0000000
--- a/SrcLib/ARLcore/include/arlcore/CameraList.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_CAMERALIST_H
-#define _ARLCORE_CAMERALIST_H
-#include <arlcore/Common.h>
-
-#include <vector>
-
-#include <arlcore/Camera.h>
-#include <arlcore/Particle.h>
-
-namespace arlCore
-{
-    class PlaneSystem;
-    /**
-     * @class   CameraList
-     * @date    06/2009
-     * @brief   List of physical cameras
-     */
-    class CameraList : public arlCore::Particle
-    {
-    public:
-        //! @brief Constructor
-        ARLCORE_API CameraList( PlaneSystem &universe );
-
-        //! @brief Destructor
-        ARLCORE_API ~CameraList( void );
-
-        //! @brief Add a new camera with its unique ID and its resolution
-        ARLCORE_API void addCamera( const uint32HL &GUID, unsigned int width, unsigned int heigth );
-        ARLCORE_API void push_back( const uint32HL &GUID, unsigned int width, unsigned int heigth );
-
-        //! @return Number of cameras
-        ARLCORE_API unsigned int size( void ) const;
-
-        //! @return Reference on the ith camera
-        ARLCORE_API const arlCore::Camera& operator[]( unsigned int i ) const;
-        ARLCORE_API arlCore::Camera& operator[]( unsigned int i );
-
-        //! @return Reference on the last camera
-        ARLCORE_API const arlCore::Camera& back( void ) const;
-        ARLCORE_API arlCore::Camera& back( void );
-
-        //! @return Reference on the list of cameras
-        ARLCORE_API const std::vector<Camera>& getList( void ) const;
-
-        /**
-        * @brief Calibrate cameras at the date
-        * @param[in] caliFile File with references on camera's parameters
-        * @param[in] date Current date, time
-        * @param[in] commonPlane for stereoscopic calibration
-        * @return Number of calibrated cameras
-        */
-        ARLCORE_API unsigned int calibrate( const std::string &calibFile, long int date );
-
-    private:
-        std::vector<Camera> m_cameras;
-        std::vector<unsigned int> m_widths;
-        std::vector<unsigned int> m_heigths;
-    };
-
-} // namespace arlCore
-#endif // _ARLCORE_CAMERALIST_H
diff --git a/SrcLib/ARLcore/include/arlcore/Colour.h b/SrcLib/ARLcore/include/arlcore/Colour.h
deleted file mode 100644
index 52669af..0000000
--- a/SrcLib/ARLcore/include/arlcore/Colour.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_COLOUR_H
-#define _ARLCORE_COLOUR_H
-#include <arlcore/Common.h>
-
-#include <string>
-
-#include <arlcore/Object.h>
-
-namespace arlCore
-{
-    /**
-     * @class   Colour
-     * @date    2007
-     * @brief   RGB colour
-     */
-    class Colour
-    {
-    public:
-        //! Constant colours
-        ARLCORE_API static const Colour Black;
-        ARLCORE_API static const Colour Red;
-        ARLCORE_API static const Colour Green;
-        ARLCORE_API static const Colour Blue;
-        ARLCORE_API static const Colour ElectricBlue;
-        ARLCORE_API static const Colour Yellow;
-        ARLCORE_API static const Colour Violet;
-        ARLCORE_API static const Colour White;
-
-        //! @brief Constructor (Default Black)
-        ARLCORE_API Colour( unsigned int R=0, unsigned int G=0, unsigned int B=0 );
-
-        //! @brief Copy constructor
-        ARLCORE_API Colour( const Colour & );
-
-        //! @brief Destructor
-        ARLCORE_API ~Colour( void );
-
-        //! @brief Affectation
-        ARLCORE_API Colour& operator=(const Colour&);
-
-        //! @brief Set a new colour
-        ARLCORE_API void setColour( const Colour& );
-
-        //! @brief Set a new colour
-        ARLCORE_API void setColour( unsigned int R, unsigned int G, unsigned int B );
-
-        //! @brief Set a new colour in function of the n value
-        ARLCORE_API void setMapColour( long int n );
-
-        //! @brief Get the current colour
-        ARLCORE_API void getColour( unsigned int &R, unsigned int &G, unsigned int &B ) const;
-
-        //! @return Description of the current colour
-        ARLCORE_API std::string getString() const;
-
-    private:
-        unsigned int m_R, m_G, m_B;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_COLOUR_H
diff --git a/SrcLib/ARLcore/include/arlcore/Command.h b/SrcLib/ARLcore/include/arlcore/Command.h
deleted file mode 100644
index ed1c40c..0000000
--- a/SrcLib/ARLcore/include/arlcore/Command.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_COMMAND_H
-#define _ARLCORE_COMMAND_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <string>
-#include <map>
-
-namespace arlCore
-{
-    class Command
-    {
-    /**
-     * @class   Command
-     * @date    04/2008
-     * @brief   User interactor
-     */
-    public:
-        ARLCORE_API Command( const std::string &fileName="" );
-
-        ARLCORE_API ~Command( void );
-
-        //! @return The value associated to a command
-        ARLCORE_API bool get( const std::string& commandName );
-
-        //! @brief Refresh with key values
-        ARLCORE_API bool refresh( void );
-
-    protected:
-        /**
-         * @brief Set to true the command
-         * @return false if the commandName doesn't exist
-         */
-        //ARLCORE_API bool set( const std::string& commandName );
-
-    private:
-        //! @brief Values
-        std::vector<bool> m_values;
-
-        //! @brief Index in m_values by command name
-        std::map< std::string, unsigned int > m_byName ;
-
-        //! @brief Index in m_values by key
-        std::map< char, unsigned int > m_byKey ;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_COMMAND_H
diff --git a/SrcLib/ARLcore/include/arlcore/Common.h b/SrcLib/ARLcore/include/arlcore/Common.h
deleted file mode 100644
index ae91568..0000000
--- a/SrcLib/ARLcore/include/arlcore/Common.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_COMMMON_H
-#define _ARLCORE_COMMMON_H
-
-//#include <float.h>
-#include <boost/cstdint.hpp>
-#include <fwTools/Object.hpp>
-#include <fwCore/macros.hpp>
-
-//#include <arlcore/Type.h>
-
-    /**
-     * @date    2007
-     * @brief   Directives de compilation
-     * Definition de constantes
-     */
-    #ifndef _WIN32
-        #ifndef CLK_TCK
-            #define CLK_TCK 1000.0
-        #endif
-    #endif //_WIN32
-
-    // COMPILATION OPTIONS
-    #define ANN // Lib=ANN.lib
-    //#undef ANN
-
-//  #define ARL_VERBOSE ARL_LOG_LEVEL_NONE
-    #define TMP_FILE "tmp.plt" // "c:/tmp/tmp.txt" // "/tmp/tmp.txt"
-    #define TMP_DIR "./" //"c:/tmp/" // "/tmp/"
-    #ifdef _WIN32
-    //  #define GNUPLOT_EXE "d:/gnuplot/bin/pgnuplot <tmp.txt"
-        //#define GNUPLOT_EXE "d:/gnuplot/bin/pgnuplot <tmp.txt"
-        #define GNUPLOT_EXE "d:/gnuplot/bin/wgnuplot tmp.plt"
-        //#define GNUPLOT_EXE "d:/gnuplot/bin/wgnuplot c:/tmp/tmp.txt"
-    #else // _WIN32
-        #define GNUPLOT_EXE "/usr/bin/gnuplot /tmp/tmp.plt"
-    #endif // _WIN32
-    #define GRAPHVIZ_EXE "\"c:/Program Files/ATT/Graphviz/bin/dotty.exe\""
-    #define GRAPHVIZ_TMP "tmpGraph.dot"
-
-#ifndef _ARLCORE_CONFIG_HPP_
-#ifdef _WIN32
-        #ifdef ARLCORE_EXPORTS
-        #define ARLCORE_API __declspec(dllexport)
-        #else // ARLCORE_EXPORTS
-        #define ARLCORE_API __declspec(dllimport)
-        #endif // ARLCORE_EXPORTS
-        #define ARLCORE_CLASS_API
-        #pragma warning(disable: 4290)
-    #pragma warning(disable: 4786)
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-        #ifdef ARLCORE_EXPORTS
-        #define ARLCORE_API __attribute__ ((visibility("default")))
-        #define ARLCORE_CLASS_API __attribute__ ((visibility("default")))
-        #else
-        #define ARLCORE_API __attribute__ ((visibility("hidden")))
-        #define ARLCORE_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-#else // _WIN32
-        #define ARLCORE_API
-        #define ARLCORE_CLASS_API
-#endif // _WIN32
-#endif // _ARLCORE_CONFIG_HPP_
-
-
-typedef struct
-{
-    ::boost::uint32_t Low; //UINT32
-    ::boost::uint32_t High; //UINT32
-}uint32HL;
-
-
-
-#endif // _ARLCORE_COMMMON_H
diff --git a/SrcLib/ARLcore/include/arlcore/FieldCorrection.h b/SrcLib/ARLcore/include/arlcore/FieldCorrection.h
deleted file mode 100644
index fd96b98..0000000
--- a/SrcLib/ARLcore/include/arlcore/FieldCorrection.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_FIELDCORRECTION_H
-#define _ARLCORE_FIELDCORRECTION_H
-#include <arlcore/Common.h>
-
-#include <string>
-
-#include <vnl/vnl_vector.h>
-
-#include <arlcore/MatrixR.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/Point.h>
-
-namespace arlCore
-{
-    /**
-     * @date    08/2008
-     * @brief   Correction d'un champs de vecteurs
-     */
-    class FieldCorrector
-    {
-    public:
-        //! @brief Default constructor
-        ARLCORE_API FieldCorrector( void );
-
-        //! @brief Constructor for particular degree
-        ARLCORE_API FieldCorrector( unsigned int degree );
-
-        //! @brief Copy constructor
-        ARLCORE_API FieldCorrector( const FieldCorrector& );
-
-        //! @brief Destructor
-        ARLCORE_API ~FieldCorrector( void );
-
-        //! @return Description of the field corrector
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @brief Set degree of the polynomial and initialize polynomial
-        ARLCORE_API bool setDegree( unsigned int degree );
-
-        //! @brief Get degree of the polynomial
-        ARLCORE_API unsigned int getDegree( void );
-
-        //! @brief Get number of parameters
-        ARLCORE_API unsigned int getNbParameters( void );
-
-        //! @brief Set parameters
-        ARLCORE_API bool setParameters( const vnl_vector<double> &parameters );
-
-        //! @brief Load parameters from a file
-        ARLCORE_API bool load( const std::string &fileName );
-
-        //! @brief Activ or deactiv correction
-        ARLCORE_API bool activCorrection( bool );
-
-        //! @brief Copy
-        ARLCORE_API bool copy( const FieldCorrector& );
-
-        //! @brief T2 receive T1 corrected. T1=distorded transformation T2=undistorded
-        ARLCORE_API bool correct( const vnl_rigid_matrix &T1, vnl_rigid_matrix &T2 ) const;
-
-        //! @brief P2 receive P1 corrected. P1=distorded point P2=undistorded
-        ARLCORE_API bool correct( CSPTR( Point ) P1, SPTR( Point ) P2 ) const;
-
-        //! @brief Correct the transformation T
-        ARLCORE_API bool correct( vnl_rigid_matrix &T ) const;
-
-    private:
-        vnl_vector<double> m_parameters;
-        unsigned int m_degree;
-        bool m_correction;
-    };
-
-    /**
-    * @brief Calibration of field of deformations
-    * @param[in] real Point list at the correct position
-    * @param[in] distorded Point list at the distorded position
-    * @param[in] degree Interpolation degree
-    * @param[out] parameters parameters of the polynomial
-    * @param[out] RMS Error of the optimization
-    */
-    ARLCORE_API bool fieldCalibration( CSPTR( PointList ) real, CSPTR( PointList ) distorded, unsigned int degree, vnl_vector<double> &parameters, double &RMS );
-
-} // namespace arlCore
-#endif // _ARLCORE_FIELDCORRECTION_H
diff --git a/SrcLib/ARLcore/include/arlcore/File.h b/SrcLib/ARLcore/include/arlcore/File.h
deleted file mode 100644
index dd33a31..0000000
--- a/SrcLib/ARLcore/include/arlcore/File.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_FILE_H
-#define _ARLCORE_FILE_H
-#include <arlcore/Common.h>
-
-#include <string>
-#include <vector>
-#include <fstream>
-
-#include <vnl/vnl_vector.h>
-
-namespace arlCore
-{
-    class File
-    {
-    /**
-     * @class   File
-     * @date    04/2008, 12/2008
-     * @brief   Normalized file
-     */
-    public:
-        //! @brief Constructor : Open the file
-        ARLCORE_API File( const std::string &fileName, const std::string &fileType );
-
-        //! @brief Destructor : Close the file
-        ARLCORE_API ~File( void );
-
-        //! @brief Close the file
-        ARLCORE_API void close( void );
-
-        //! @return Filetype or "" if error
-        ARLCORE_API static std::string getFiletype( const std::string &fileName );
-
-        /**
-         * @brief Load header : Verify the filetype & return the version
-         * @return Version. Error, if 0.0. (cf getError)
-         */
-        ARLCORE_API double readHeader( void );
-
-        //! @return Is the file correctly opened ?
-        ARLCORE_API bool isOK( void );
-
-        //! @return End of File ?
-        ARLCORE_API bool getEOF( void );
-
-        //! @brief Rewind at the beginning of the file
-        ARLCORE_API bool rewind( void );
-
-        //! @brief Record current position
-        ARLCORE_API bool recordCurrentPosition( void );
-
-        //! @brief Rewind at the recorded position
-        ARLCORE_API bool rewindRecordedPosition( void );
-
-        //! @return Version number
-        ARLCORE_API double getVersion( void );
-
-        //! @return Message of error
-        ARLCORE_API std::string getError( void );
-
-        //! @return Full filename (with path)
-        ARLCORE_API std::string getFullFilename( void );
-
-        //! @return Just filename (without path)
-        ARLCORE_API std::string getFilename( void );
-
-        //! @return Folder
-        ARLCORE_API std::string getFolder( void );
-
-        //! @return Extension of file (after dot)
-        ARLCORE_API std::string getExtension( void );
-
-        //! @brief Get next token, if it exists
-        ARLCORE_API bool getToken( std::string& token );
-
-        //! @brief Get T value
-        template <typename T>
-        inline bool get( T&v ){m_file>>v;return !getEOF();}
-
-        //! @brief Get std::vector<T>
-        template <typename T>
-        inline bool get( std::vector<T> &v )
-        {
-            unsigned int n;
-            if(!get(n)) return false;
-            else return get(v, n);
-        }
-
-        template <typename T>
-        inline bool get( std::vector<T> &v, unsigned int n )
-        {
-            unsigned int i;
-            v.resize(n);
-            for( i=0 ; i<n ; ++i ) 
-                m_file>>v[i];
-            return !getEOF();
-        }
-
-        //! @brief Get vnl_vector<T>
-        template <typename T>
-        inline bool get( vnl_vector<T> &v )
-        {
-            unsigned int n;
-            if(!get(n)) return false;
-            else return get(v, n);
-        }
-
-        template <typename T>
-        inline bool get( vnl_vector<T> &v, unsigned int n )
-        {
-            unsigned int i;
-            v.set_size(n);
-            for( i=0 ; i<n ; ++i ) 
-                m_file>>v[i];
-            return !getEOF();
-        }
-
-        //! @brief Get string value
-        ARLCORE_API std::string getString( void );
-
-        //! @brief Get string value
-        ARLCORE_API bool getString( std::string& );
-
-        //! @brief Get path relativly to current path
-        ARLCORE_API std::string getPath( void );
-
-        //! @return fstream
-        ARLCORE_API std::fstream& getStream( void );
-
-    protected:
-        //! @brief Save & print message of error
-        ARLCORE_API void setError( const std::string& );
-
-    private:
-        bool m_ok;
-        std::fstream m_file;
-        double m_version;
-        std::string m_fileType, m_error;
-        std::string m_fullFilename, m_folder, m_filename, m_extension;
-        long int m_position;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_FILE_H
diff --git a/SrcLib/ARLcore/include/arlcore/ICP.h b/SrcLib/ARLcore/include/arlcore/ICP.h
deleted file mode 100644
index 526fcdd..0000000
--- a/SrcLib/ARLcore/include/arlcore/ICP.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_ICP_H
-#define _ARLCORE_ICP_H
-#include <arlcore/Common.h>
-
-#include <vnl/vnl_vector.h>
-
-#include <arlcore/MatrixR.h>
-#include <arlcore/Mesh.h>
-#include <arlcore/PointsList.h>
-
-namespace arlCore
-{
-    class Point;
-    /**
-     * @date    04/2009
-     * @brief   Iterativ Closest Point registration between two point's clouds
-     */
-    class ICP
-    {
-    public:
-        /**
-        * @brief Constructor
-        * @param[in] model
-        * @param[in] cloud
-        * @param[in] justVisible If true, use only visible points
-        */
-        ARLCORE_API ICP( CSPTR( PointList ) model, CSPTR( PointList ) cloud, bool justVisible=true );
-
-        /**
-        * @brief Constructor
-        * @param[in] model
-        * @param[in] cloud
-        * @param[in] justVisible If true, use only visible cloud's points
-        */
-        ARLCORE_API ICP( CSPTR( Mesh ) model, CSPTR( PointList ) cloud, bool justVisible=true );
-
-        //! @brief Destructor
-        ARLCORE_API ~ICP( void );
-
-        //! @brief Optimise solution with Powell method
-        ARLCORE_API double optimisePowell( void );
-
-        //! @brief Optimise solution with Least Squares method
-        ARLCORE_API double optimiseLS( void );
-
-        //! @brief Initialize solution
-        ARLCORE_API void initSolution( const arlCore::vnl_rigid_matrix &M );
-
-        //! @return Reference on solution
-        ARLCORE_API const arlCore::vnl_rigid_matrix& getSolution( void ) const;
-
-        //! @brief Set option : Number max of iterations
-        ARLCORE_API bool setMaxIterations( unsigned int=500 );
-
-        //! @return Number of points of model
-        ARLCORE_API unsigned int getModelSize( void ) const;
-
-        //! @return Number of points of cloud
-        ARLCORE_API unsigned int getCloudSize( void ) const;
-
-        //! @return Number of iteration of the last calculation
-        ARLCORE_API unsigned int getNbIterations( void ) const;
-
-        //! @return Start error
-        ARLCORE_API double getStartError( void ) const;
-
-        //! @return End error
-        ARLCORE_API double getEndError( void ) const;
-
-        //! @brief Solve the registration
-        ARLCORE_API bool solve( void );
-
-        //! @return RMS
-        ARLCORE_API double computeError( void );
-
-        //! @brief Compute distance for each point of the cloud (visible or not depending on the option)
-        ARLCORE_API unsigned int computeDistances( std::vector<double> &distances );
-
-        //! @brief Set points with points of cloud and distance to the model in point's error
-        ARLCORE_API unsigned int computeDistances( SPTR( PointList ) points );
-
-        //! @brief Compute RMS with M as solution (used by optimizer)
-        ARLCORE_API double computeCriterion( const arlCore::vnl_rigid_matrix &M );
-
-        //! @brief Compute RMS with M as solution (used by optimizer)
-        ARLCORE_API double computeCriterion( const arlCore::vnl_rigid_matrix &M, vnl_vector< double > &fx );
-
-    protected:
-
-    private:
-        bool initialization( void );
-
-        // 2 modes : Point to SPTR( Point )  Point to Mesh
-        bool m_point2PointMode;
-        CSPTR( arlCore::Mesh ) m_modelMesh;
-        arlCore::PointList::csptr m_cloud;
-        bool m_initialization;
-        bool m_justVisible;
-        unsigned int m_dimension;
-        vnl_vector<double> m_modelGravity, m_cloudGravity;
-        unsigned int m_modelSize, m_cloudSize;
-#ifdef ANN
-        ANNpointArray m_modelPoints, m_cloudPoints;
-        ANNpointArray m_Pk, m_Yk, m_Pi;
-        ANNkd_tree* m_ANNtree;
-        int m_nbNN; // number of nearest neighbors
-        ANNidxArray m_nn_idx; // near neighbor indices
-        ANNdistArray m_squaredDists; // near neighbor distances
-#endif // ANN
-        vnl_matrix_fixed<double,3,3> m_rotInit;
-        vnl_vector_fixed<double,3> m_traInit;
-        arlCore::vnl_rigid_matrix m_solution;
-
-        unsigned int m_maxIterations;
-        unsigned int m_nbIterations;
-
-        double m_startError, m_endError;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_ICP_H
diff --git a/SrcLib/ARLcore/include/arlcore/MatrixR.h b/SrcLib/ARLcore/include/arlcore/MatrixR.h
deleted file mode 100644
index 72c4aaf..0000000
--- a/SrcLib/ARLcore/include/arlcore/MatrixR.h
+++ /dev/null
@@ -1,390 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_MATRIXR_H
-#define _ARLCORE_MATRIXR_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <string>
-
-#include <fwCore/macros.hpp>
-
-#include <vgl/vgl_line_3d_2_points.h>
-#include <vgl/vgl_line_segment_3d.h>
-
-#include <vnl/vnl_quaternion.h>
-#include <vnl/vnl_vector_fixed.h>
-#include <vnl/vnl_matrix_fixed.h>
-
-#include <arlcore/Object.h>
-#include <arlcore/vnl_rotation3d_matrix.h>
-
-namespace arlCore
-{
-    enum ARLCORE_REGISTER3D3D { ARLCORE_REGISTER3D3D_UNKNOWN, ARLCORE_REGISTER3D3D_LM, ARLCORE_REGISTER3D3D_POW, ARLCORE_REGISTER3D3D_GC, ARLCORE_REGISTER3D3D_NBTYPES };
-    static std::string ARLCORE_REGISTER3D3D_NAMES[ARLCORE_REGISTER3D3D_NBTYPES]={ "ARLCORE_REGISTER3D3D_UNKNOWN", "ARLCORE_REGISTER3D3D_LM",
-    "ARLCORE_REGISTER3D3D_POW", "ARLCORE_REGISTER3D3D_GC"};
-
-    enum ARLCORE_VRM_DISTANCE_METHOD { ARLCORE_VRM_DISTANCE_UNKNOWN, ARLCORE_VRM_DISTANCE_3AXIS, ARLCORE_VRM_DISTANCE_TRANSLATION,
-        ARLCORE_VRM_DISTANCE_OX, ARLCORE_VRM_DISTANCE_OY, ARLCORE_VRM_DISTANCE_OZ, ARLCORE_VRM_DISTANCE_NBTYPES};
-    static std::string ARLCORE_VRM_DISTANCE_METHOD_NAMES[ARLCORE_VRM_DISTANCE_NBTYPES]={ "ARLCORE_VRM_DISTANCE_UNKNOWN",
-        "ARLCORE_VRM_DISTANCE_3AXIS", "ARLCORE_VRM_DISTANCE_TRANSLATION",
-        "ARLCORE_VRM_DISTANCE_OX", "ARLCORE_VRM_DISTANCE_OY", "ARLCORE_VRM_DISTANCE_OZ" };
-
-    class Point;
-    class PointList;
-    class vnl_rigid_vector;
-    /**
-     * @date    2007
-     * @brief   Matrice de transformation rigide
-     */
-    class vnl_rigid_matrix: public vnl_matrix_fixed<double,4,4>, public Object
-    {
-    public:
-        //! @brief Default constructor : Identity
-        ARLCORE_API vnl_rigid_matrix( void );
-
-        //! @brief Copy constructor
-        ARLCORE_API vnl_rigid_matrix( const vnl_rigid_matrix& );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rigid_matrix( const vnl_rigid_vector& );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rigid_matrix( const vnl_matrix_fixed<double,4,4>& );
-
-        //! @brief Constructor by composition with a rotation matrix and a translation
-        ARLCORE_API vnl_rigid_matrix( const vnl_rotation3d_matrix &rotation, const vnl_vector_fixed<double,3> &translation);
-
-        //! @brief Constructor by loading
-        ARLCORE_API vnl_rigid_matrix( const std::string &fileName );
-
-        //! @brief Destructor
-        ARLCORE_API ~vnl_rigid_matrix( void );
-
-        //! @return Is it a valid rigid matrix : Homogen, real rotation matrix
-        ARLCORE_API bool isValid( void ) const;
-
-        //! @return Description of the current matrix
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @return Description of the current matrix for planesystem
-        ARLCORE_API std::string getText( void ) const;
-
-        //! @brief Save the current matrix in a file
-        ARLCORE_API bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @brief Save the current matrix in a file stream
-        ARLCORE_API bool save( std::fstream &f ) const;
-
-        //! @brief Load in the current matrix from a file
-        ARLCORE_API bool load( const std::string &fileName );
-
-        //! @brief Load in the current matrix from a file stream
-        ARLCORE_API bool load( std::fstream &f );
-
-        ARLCORE_API std::string serialize( void ) const;
-        ARLCORE_API bool virtual unserialize( std::stringstream &s ); // PROTECTED ?
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rigid_matrix& operator=( const vnl_rigid_matrix& );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rigid_matrix& operator=( const vnl_rigid_vector& );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rigid_matrix& operator=( const vnl_matrix_fixed<double,4,4>& );
-
-        /**
-         * @brief Gaussian noise on translation
-         * param[in] Xnoise Gaussian noise on X (mm)
-         * param[in] Ynoise Gaussian noise on Y (mm)
-         * param[in] Znoise Gaussian noise on Z (mm)
-         * @return Delta distance
-         */
-        ARLCORE_API double GaussianNoiseTranslation( double Xnoise, double Ynoise, double Znoise );
-
-        /**
-         * @brief Gaussian noise on translation
-         * param[in] Xnoise Gaussian noise on X axis (degrees)
-         * param[in] Ynoise Gaussian noise on Y axis (degrees)
-         * param[in] Znoise Gaussian noise on Z axis (degrees)
-         * @return Delta angle
-         */
-        ARLCORE_API double GaussianNoiseRotation( double Xnoise, double Ynoise, double Znoise );
-
-        /**
-         * @brief Compute several distance types between current transformation and T
-         * param[in] T Compared transformation
-         * param[in] method
-         * 3axis : RMS of distance between all unit vectors
-         * Translation : Distance between origins
-         * Ox : RMS of distances between origins and unit vector on Ox
-         * Oy : RMS of distances between origins and unit vector on Oy
-         * Oz : RMS of distances between origins and unit vector on Oz
-         * param[out] errors2 Each computed square distance
-         * @return Square of RMS of distances between unit vectors or <0 if error
-         */
-        ARLCORE_API double distance2( const vnl_rigid_matrix &T, ARLCORE_VRM_DISTANCE_METHOD method, std::vector<double> &errors ) const;
-        ARLCORE_API double distance2( const vnl_rigid_matrix &T, ARLCORE_VRM_DISTANCE_METHOD method ) const;
-
-        /**
-         * @brief Compute several distance types between current transformation and T like distance2
-         * @return RMS of distances between unit vectors or <0 if error
-         */
-        ARLCORE_API double distance( const vnl_rigid_matrix &T, ARLCORE_VRM_DISTANCE_METHOD method=ARLCORE_VRM_DISTANCE_3AXIS ) const;
-
-        /**
-         * @brief Compare current transformation Trf with T
-         * This means that we compute Trf * T^(-1) and extract the 2-norm of the translation
-         * and the angle of the rotation matrix
-         * @param[out] errorTranslation Distance, norm (mm)
-         * @param[out] errorRotation Angle (deg)
-         */
-        ARLCORE_API void compare( const vnl_rigid_matrix &T, double &errorTranslation, double &errorRotation ) const;
-
-        //! @brief The same as 'compare' with the inverse of the current matrix
-        ARLCORE_API void compareInverse( const vnl_rigid_matrix &T, double &errorTranslation, double &errorRotation ) const;
-
-        //! @brief Copy
-        ARLCORE_API bool copy( const vnl_rigid_matrix& );
-
-        //! @brief Copy
-        ARLCORE_API bool copy( const vnl_rigid_vector& );
-
-        //! @brief Copy
-        ARLCORE_API bool copy( const vnl_matrix_fixed<double,4,4>& );
-
-        //! @brief Set the current matrix to identity
-        ARLCORE_API bool setIdentity();
-
-        /**
-         * @brief Set a random rotation and translation
-         * The new origin is included in a cube of 'size' of side
-         */
-        ARLCORE_API void uniform_random( double size );
-
-        //! @return Translation part of the current matrix
-        ARLCORE_API vnl_vector_fixed<double,3> getTranslation( void ) const;
-
-        //! @return Homogen translation of the current matrix
-        ARLCORE_API vnl_vector_fixed<double,4> getHTranslation( void ) const;
-
-        //! @return Rotation vector of the current matrix
-        ARLCORE_API vnl_rotation3d_matrix getRotation( void ) const;
-
-        //! @return Rotation in quaternion
-        ARLCORE_API vnl_quaternion<double> getQuaternion( void ) const;
-
-        //! @brief Change the current translation
-        ARLCORE_API bool setTranslation( const vnl_vector_fixed<double,3> & );
-
-        //! @brief Change the current translation
-        ARLCORE_API bool setTranslation( double x, double y, double z );
-
-        //! @brief Change the x value of the current translation
-        ARLCORE_API bool setX( double x );
-
-        //! @brief Change the y value of the current translation
-        ARLCORE_API bool setY( double y );
-
-        //! @brief Change the z value of the current translation
-        ARLCORE_API bool setZ( double z );
-
-        //! @return x value of the current translation
-        ARLCORE_API double getX( void ) const;
-
-        //! @return y value of the current translation
-        ARLCORE_API double getY( void ) const;
-
-        //! @return z value of the current translation
-        ARLCORE_API double getZ( void ) const;
-
-        //! @brief Change the current rotation
-        ARLCORE_API bool setRotation( const vnl_rotation3d_matrix & );
-
-        //! @brief Change the current rotation
-        ARLCORE_API bool setQuaternion( const vnl_quaternion<double> & );
-
-        //! @return Current matrix = T1 * T2
-        ARLCORE_API bool mult( const vnl_rigid_matrix &T1 , const vnl_rigid_matrix &T2 );
-
-        /**
-         * @return Current matrix = invert(T)
-         * @remark Inverse operation is optimized for rigid transformation
-         */
-        ARLCORE_API bool invert( const vnl_rigid_matrix&T );
-
-        /**
-         * @brief Inverse the current matrix
-         * @remark Inverse operation is optimized for rigid transformation
-         */
-        ARLCORE_API bool invert( void );
-
-        //! @return The inverse of the current matrix
-        ARLCORE_API arlCore::vnl_rigid_matrix computeInverse( void ) const;
-
-        /**
-         * @brief The current matrix becomes the mean of listMatrix
-         * Use filter with the ARLCORE_TRF_FILTER_CONSTANT option
-         */
-        ARLCORE_API bool mean( const std::vector<arlCore::vnl_rigid_matrix> &listMatrix );
-
-        //! @brief Compute the angle (in degrees) between the planes OXY of the 2 planes
-        ARLCORE_API double getAngleOXY( void );
-
-        //! @brief Compute the angle (in degrees) between the planes OXZ of the 2 planes
-        ARLCORE_API double getAngleOXZ( void );
-
-        //! @brief Compute the angle (in degrees) between the planes OYZ of the 2 planes
-        ARLCORE_API double getAngleOYZ( void );
-
-
-        /**
-         * @brief Registration of 2 matching 3D points sets - Direct method
-         * Current matrix (this) = A->B
-         * Registration gives Bi = (this)*Ai with only pairs of visible points
-         * @param[in] computeRMS If true, compute RMS of registration (mm)
-         * Warning Only if size(A)==size(B) and with pairs of visible points
-         * @return False if size(A)!=size(B) or there are lesser than 3 pairs of visible points
-         */
-        ARLCORE_API bool register3D3D( CSPTR(PointList) A, CSPTR(PointList) B, bool computeRMS );
-
-        //! @brief Same method as the previous one
-        //ARLCORE_API bool register3D3D( const std::vector< CSPTR(Point)  > &A, const std::vector< CSPTR(Point) > &B, bool computeRMS );
-
-        /**
-         * @brief Iterative optimization of sum trp(TxA_i - B_i). sigma_3D_Bi^(-1) . (TxA_i - B_i)
-         * where sigma_3D_Bi is the covariance matrix of the B_i
-         * When using LM optimization, the number of residual must be superior than the number of unknown
-         * if not it returns the initialisation
-         * @param[in] a point list of the first model
-         * @param[in] b point list of the second model
-         * @param[in] ARLCORE_REGISTER3D3D method that can be used for the optimization (LM, powell or conjugate gradient)
-         * @param[in] optimiserParameters parameter for the optimization (TODO not used here)
-         * @param[out] log[0] = end_error of the optimization (TODO still has to be divided by the number of point and sqrt)
-         * @param[out] log[1] = start_error of the optimization (TODO still has to be divided by the number of point and sqrt)
-         */
-        ARLCORE_API bool register3D3DUncertainty( CSPTR(PointList) a, CSPTR(PointList) b, ARLCORE_REGISTER3D3D, std::vector<double> optimiserParameters, std::vector<double> &log/*, unsigned int numberOfPoints=0*/ );
-
-        /**
-         * @brief Evaluation of the register RMS and the standard deviation
-         * src & dst are 2 lists of matching points
-         * if n>0, the calculus is made with only the first n points
-         * if n==0, all points are used for the RMS evaluation
-         * @param[out] this->m_registerRMS contains after computation the registration RMS sqrt(mean(sum || Bi-T*Ai||^2))
-         * @param[out] this->m_registerStdDev contains after computation the standard deviation on the
-         * distance di between Bi and T*Ai : sqrt (sum (||di - average(di) ||^2)/ n) )
-         * @param[out] errors is a double vector that contains the distance between Bi and T*A_i for each point
-         */
-        ARLCORE_API bool RMS3D3D( CSPTR(PointList) src, CSPTR(PointList) dst, std::vector<double> &errors );
-
-        /**
-         * @brief Registration of two 3D points sets. The correspondences between the points
-         * are not known and are estimated in the function. The matching results is not available
-         * TODO add a variable to return the matching result
-         * @param[in] computeRMS If true compute registration RMS
-         * @param[in] gaussianError Std error estimated on measured 3D points (mm)
-         * @param[in] decimage ]0,1] 1:Use whole information 0.6:Use only 60% of information (faster)
-         * @param[out] B = this * A
-         */
-        ARLCORE_API bool register3D3DwithoutMatching( CSPTR(PointList) A, CSPTR(PointList) B, bool computeRMS=false, double gaussianError=0.0, double decimage=1.0 );
-
-        /**
-         * @brief Registration of 2 clouds of 3D points
-         * @param[in] Model Cloud of points of scanner for example
-         * @param[in] Acquisition Cloud of points of the surface issue of structured light for example
-         * param[out] firstRMS RMS a l'initialisation
-         * param[out] lastRMS RMS a la fin du recalage
-         * param[out] iterations Number of iterations
-         * param[in] justVisible If true, register with just visible points else with all points
-         * param[in] RMSMax Stop registration when the RMS is under 'RMSMax'
-         * param[in] iterationsMax Stop registration before 'iterationMax' iterations
-         * @return true if succeed
-         * @remark The current value of the matrix is used as an initialization
-         * If you don't know it, don't forget to set the matrix to identity
-         * Warning : Respect the order : Model / Point cloud
-         * Model devra etre surechantillonne
-         */
-        ARLCORE_API bool registerICP( CSPTR(PointList) Model, CSPTR(PointList) cloud,
-                        double &firstRMS, double &lastRMS, unsigned int &iterations, bool justVisible=false, double RMSMax=0.01, unsigned int iterationsMax=500 );
-
-        //! @brief Deprecated
-        ARLCORE_API bool oldRegisterICP( CSPTR(PointList) a, CSPTR(PointList) b,
-                        double &RMS, unsigned int &iterations, double RMSMax=0.01, unsigned int iterationsMax=500 );
-
-        //! @brief Compute matrix of changement of plane with cordinates of new Origin, unit X & Z
-        ARLCORE_API bool chgPlaneOXZ( CSPTR( Point ) O, CSPTR( Point ) X, CSPTR( Point ) Z );
-
-        //! @return pt2 <- this * pt1
-        ARLCORE_API bool trf( CSPTR( Point ) pt1, SPTR( Point ) pt2 ) const;
-
-        //! @return pt <- this * pt
-        ARLCORE_API bool trf( SPTR( Point ) pt ) const;
-
-        //! @return For each i, Bi <- this * Ai
-        ARLCORE_API unsigned int trf( CSPTR(PointList) A, SPTR(PointList) B ) const;
-
-        //! @return For each i, Ai <- this * Ai
-        ARLCORE_API unsigned int trf( SPTR(PointList) A ) const;
-
-        //! @return For each i, Bi <- this * Ai
-        ARLCORE_API unsigned int trf( const std::vector< CSPTR(Point) > &A, std::vector< CSPTR(Point) >&B ) const;
-
-        //! @return Change the plane of the line equation : line2 <- this * line1
-        ARLCORE_API bool trf( const vgl_line_3d_2_points<double> &line1, vgl_line_3d_2_points<double> &line2 ) const;
-
-        //! @return Change the plane of the line equation : line <- this * line
-        ARLCORE_API bool trf( vgl_line_3d_2_points<double> &line ) const;
-
-        //! @return Change the plane of the segment equation : line2 <- this * line1
-        ARLCORE_API bool trf( const vgl_line_segment_3d<double> &line1, vgl_line_segment_3d<double> &line2 ) const;
-
-        //! @return Change the plane of the segment equation : line <- this * line
-        ARLCORE_API bool trf( vgl_line_segment_3d<double> &line ) const;
-
-        /**
-         * @brief RMS (Root Mean Square) : Mean error from the computation of the matrix
-         * When the matrix is the result of a calibration or registration,...
-         */
-        ARLCORE_API double getRMS( void ) const;
-
-        //! @return Standard deviation associated to RMS
-        ARLCORE_API double getStdDev( void ) const;
-
-        //! @brief Set RMS
-        ARLCORE_API void setRMS( double RMS );
-
-        //! @brief Set standard deviation associated to RMS
-        ARLCORE_API void setStdDev( double stdDev );
-
-    private:
-        double m_registerRMS;
-        double m_registerStdDev;
-    };
-
-    //! @brief Rotation of thetaX around x-axis
-    ARLCORE_API vnl_matrix_fixed<double,4,4> rotX(double thetaX); // degree
-    //! @brief Rotation of thetaY around y-axis
-    ARLCORE_API vnl_matrix_fixed<double,4,4> rotY(double thetaY); // degree
-    //! @brief Rotation of thetaZ around z-axis
-    ARLCORE_API vnl_matrix_fixed<double,4,4> rotZ(double thetaZ); // degree
-    //! @brief Rotation of thetaX around x-axis, thetaY around y-axis and thetaZ around z-axis
-    ARLCORE_API vnl_matrix_fixed<double,4,4> rotXYZ(double thetaX, double thetaY, double thetaZ); // degree
-    //! @brief Rotation of alpha degrees around the vector U(x,y,z)
-    ARLCORE_API vnl_matrix_fixed<double,4,4> rotVecFromOrigin(double Ux, double Uy, double Uz, double alpha); // degree
-    //! @brief Rotation of alpha degrees around the vector U(x,y,z) from Point P(x,y,z)
-    ARLCORE_API vnl_matrix_fixed<double,4,4> rotVecFromPoint(double Px, double Py, double Pz, double Ux, double Uy, double Uz, double alpha); // degree
-
-    enum ARLCORE_TRF_FILTER_TYPE { ARLCORE_TRF_FILTER_CONSTANT, ARLCORE_TRF_FILTER_LINEAR, ARLCORE_TRF_FILTER_LOG, ARLCORE_TRF_FILTER_SQUARE, ARLCORE_TRF_FILTER_CUBIC  };
-
-    //! @brief Construit une transformation rigide en appliquant un filtre a une liste temporelle de transformations
-    // ARLCORE_TRF_FILTER_CONSTANT : No time filter, the result is the mean of transformations
-    ARLCORE_API unsigned int filter( const std::vector<const arlCore::vnl_rigid_matrix*> &list , ARLCORE_TRF_FILTER_TYPE, vnl_rigid_matrix &average );
-
-} // namespace arlCore
-#endif // _ARLCORE_MATRIXR_H
diff --git a/SrcLib/ARLcore/include/arlcore/Mesh.h b/SrcLib/ARLcore/include/arlcore/Mesh.h
deleted file mode 100644
index e3cbe16..0000000
--- a/SrcLib/ARLcore/include/arlcore/Mesh.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_MESH_H
-#define _ARLCORE_MESH_H
-
-#include <boost/make_shared.hpp>
-
-#include <fwCore/macros.hpp>
-#include <arlcore/Common.h>
-
-#include <vector>
-
-#include <vnl/vnl_vector_fixed.h>
-
-#ifdef ANN
-#include <ANN/ANN.h>
-#endif // ANN
-
-#include <arlcore/PointsList.h>
-
-namespace arlCore
-{
-    class Mesh : public fwTools::Object //VAG initially Mesh have no base class
-    {
-    /**
-     * @class   Mesh
-     * @date    04/2009
-     * @brief   List of triangular shapes
-     */
-    public:
-
-        fwCoreClassDefinitionsWithNFactoriesMacro( (Mesh)(::fwTools::Object),
-                                                   ((::boost::make_shared< Mesh > ,() ))
-                                                   );
-
-        //! @brief Constructor (Value of scalar for each point)
-        ARLCORE_API Mesh( double pointScalar=0.0 );
-
-        //! @brief Copy constructor
-        ARLCORE_API Mesh( const Mesh& );
-
-        //! @brief Constructor from file of triangles (see load)
-        ARLCORE_API Mesh( const std::string& fileName );
-
-        //! @brief Destructor
-        ARLCORE_API ~Mesh( void );
-
-        //! @brief Copy
-        ARLCORE_API void copy( const Mesh& );
-
-        //! @brief Clear
-        ARLCORE_API void clear( void );
-
-        //! @brief Add new triangle with 3 points
-        ARLCORE_API bool addTriangle( CSPTR( Point ) P1, CSPTR( Point ) P2, CSPTR( Point ) P3 );
-
-        //! @return Surface of the ith [0, n[ triangle else -1
-        ARLCORE_API double triangleSurface( unsigned int i ) const;
-
-        //! @return RMS distance between each point of all triangles
-        ARLCORE_API double getRMSDistance( void ) const;
-
-        //! @return Distance between a point and the mesh. NoTriangle for the closest [0, n[
-        ARLCORE_API double computeDistance( arlCore::Point::csptr, unsigned int &noTriangle ) const;
-        ARLCORE_API double computeDistance( arlCore::Point::csptr ) const;
-
-        //! @return Squared distance between a point and the mesh. NoTriangle for the closest [0, n[
-        ARLCORE_API double computeDistance2( arlCore::Point::csptr, unsigned int &noTriangle ) const;
-        ARLCORE_API double computeDistance2( arlCore::Point::csptr ) const;
-
-        //! @brief Generate a surface where altitude is on X-axis
-        ARLCORE_API bool generateX( double ySize, double zSize, double yStep, double zStep, double degree, double gaussianNoise, PointList::sptr summits );
-
-        //! @brief Generate a surface where altitude is on Y-axis
-        ARLCORE_API bool generateY( double xSize, double zSize, double xStep, double zStep, double degree, double gaussianNoise, PointList::sptr summits );
-
-        //! @brief Generate a surface where altitude is on Z-axis
-        ARLCORE_API bool generateZ( double xSize, double ySize, double xStep, double yStep, double degree, double gaussianNoise, PointList::sptr summits );
-
-        //! @brief Load a mesh from a file (.trian, .raw or Filetype=Surface, =Planes)
-        ARLCORE_API bool load( const std::string& fileName, double gaussianNoise=0.0 );
-
-        //! @brief Save a mesh in following formats : .trian, .raw
-        ARLCORE_API bool save( const std::string& fileName, bool overwrite=true ) const;
-
-        //! @brief Sample mesh with triangle sizes lesser than step (mm)
-        ARLCORE_API bool resampling( double step );
-
-        //! @return reference on the point list of triangles
-        ARLCORE_API arlCore::PointList::csptr getPointList( void ) const;
-
-        //! @return reference on the triangle list
-        ARLCORE_API const std::vector< vnl_vector_fixed<unsigned int, 3> >& getTriangles( void ) const;
-
-    private:
-        //! @brief Add new SPTR( Point )  return index of the point
-        unsigned int addPoint( arlCore::Point::csptr p, double gaussianNoise=0.0 );
-
-        //! @brief Add new triangle with points which references in m_pointList are (a,b,c)
-        bool addTriangle( unsigned int a, unsigned int b, unsigned int c );
-
-        //! @brief Get length of each side
-        vnl_vector_fixed<double,3> getLengths( unsigned int noTriangle ) const;
-
-        //! @brief Delete duplicate points
-        bool simplify( void );
-
-        //! @brief Generate a surface where altitude is on specific axis (X=0, Y=1, Z=2)
-        bool generate( unsigned int axis, double width, double length, double stepW, double stepL, double degree, double gaussianNoise, PointList::sptr summits );
-
-        bool releaseTriangle( unsigned int noTriangle );
-
-        unsigned int releasePoint( unsigned int noPoint );
-
-        unsigned int replacePointIndex( std::vector<unsigned int> oldIndex, unsigned int newIndex );
-
-        double m_pointScalar;
-        arlCore::PointList::sptr m_pointList;
-        std::vector< vnl_vector_fixed<unsigned int, 3> > m_triangles;
-        std::vector< unsigned int > m_nbReferences;
-        std::vector< unsigned int > m_freePoints;
-        std::vector< unsigned int > m_freeTriangles;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_MESH_H
diff --git a/SrcLib/ARLcore/include/arlcore/Misc.h b/SrcLib/ARLcore/include/arlcore/Misc.h
deleted file mode 100644
index e4b24a8..0000000
--- a/SrcLib/ARLcore/include/arlcore/Misc.h
+++ /dev/null
@@ -1,389 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_MISC_H
-#define _ARLCORE_MISC_H
-#include <arlcore/Common.h>
-
-
-#include <string>
-#include <vector>
-
-#include <vnl/vnl_math.h>
-#include <vnl/vnl_vector_fixed.h>
-
-#include <vgl/vgl_line_3d_2_points.h>
-
-#include <arlcore/Point.h>
-#include <arlcore/Camera.h>
-#include <arlcore/PointsList.h>
-
-namespace arlCore
-{
-    //const double Pi = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
-    const double DegToRad = vnl_math::pi/180.0;
-    const double RadToDeg = 180.0/vnl_math::pi;
-    //! @return if n is even
-    template <typename T> inline bool even( const T &n ){long int a=n/2; return (T)(a*2)==n;}
-
-    //! @brief swap 2 variables
-    template <typename T> inline void swap( T &a, T &b ){T c=a;a=b;b=c;}
-
-    class PointList;
-    /**
-     * @brief Fill pointlist with a 3D square grid. The first point to be built has (0,0,0)
-     * coordinates and the grid is filled firstly along X axis, then Y axis. For example, if
-     * nbPointsX = 3, squareSizeX = 2, nbPointsY = 2 and squareSizeX = 4, your pointList will be:
-     * 0 0 0
-     * 2 0 0
-     * 4 0 0
-     * 0 4 0
-     * 2 4 0
-     * 4 4 0
-     * @param[out]  pl PointList with the grid
-     * @param[in]   nbPointsX Number of points in x-axis
-     * @param[in]   squareSizeX Distance between 2 points in x-axis
-     * @param[in]   nbPointsY Number of points in y-axis
-     * @param[in]   squareSizeY Distance between 2 points in y-axis
-     * @param[in]   nbPointsZ Number of points in z-axis
-     * @param[in]   squareSizeZ Distance between 2 points in z-axis
-     * @return  Number of points of the grid
-     **/
-    ARLCORE_API unsigned int fillGrid( SPTR( PointList ) pl, unsigned int nbPointsX, double squareSizeX, unsigned int nbPointsY, double squareSizeY, unsigned int nbPointsZ=1, double squareSizeZ=0 );
-
-    //! @brief Plot a serie of pointlists
-    ARLCORE_API bool plot( const std::vector< const arlCore::PointList* >&, const std::string &options );
-
-    class vnl_rigid_matrix;
-    ARLCORE_API bool load( std::vector< vnl_rigid_matrix >&, const std::string &fileName, bool invert=false );
-    ARLCORE_API bool save( const std::vector< arlCore::vnl_rigid_matrix >&, const std::string &fileName, bool overwrite=true );
-
-    //! @brief Calibrate tip and orientation of a needle
-    ARLCORE_API bool needleCalibration( const std::vector< arlCore::vnl_rigid_matrix > &tip, arlCore::vnl_rigid_matrix &calibration, const std::vector< arlCore::vnl_rigid_matrix > &orientation, double &RMS );
-
-    ARLCORE_API unsigned int save( const std::vector<double>&, const std::string &filename, bool overwrite=true );
-
-    //! @brief Save list of vnl_vector with their names
-    ARLCORE_API unsigned int save( const std::vector< vnl_vector<double> >& q, vnl_vector<double> ratio, const std::vector< std::string > &names, const std::string &fileName, bool overwrite=true );
-    ARLCORE_API unsigned int save( const std::vector< vnl_vector<double> >& q, const std::string &filename, bool overwrite=true );
-
-    //! @brief Load list of vectors : FileType=Vectors, Tokens={Vector, Ratio}
-    ARLCORE_API unsigned int load( std::vector< vnl_vector<double> >&, const std::string &filename );
-    ARLCORE_API unsigned int load( std::vector< vnl_vector<double> >&, std::vector<std::string>&names, const std::string &filename );
-
-    //! @brief Load list of filenames : FileType=Filenames, Tokens={Name, Filename}
-    ARLCORE_API unsigned int load( std::vector< std::string >&, const std::string &filename );
-
-    //! @brief Save/Load vnl_matrix : FileType=Matrix, Tokens={Matrix}
-    ARLCORE_API bool save( const vnl_matrix<double>&, const std::string &filename, bool overwrite=true );
-    ARLCORE_API bool load( vnl_matrix<double>&, const std::string &filename );
-
-    /**
-     * @brief Compute RMS, mean & standard deviation from a list of double values
-     * @param[in] values List of values
-     * @param[in] square Set true if values are squared values
-     * @param[out] min
-     * @param[out] max
-     * @param[out] rms Root Mean Square
-     * @param[out] mean
-     * @param[out] stddev Standard Deviation
-     * @return Number of values
-     **/
-    ARLCORE_API unsigned int statistic( const std::vector<double>&values, double &min, double &max, double &rms, double &mean, double &stddev, bool square=false );
-
-    /**
-     * @brief Integrate a new error in a vector of 5 values
-     * @param[in/out] stat At beginning, should be fill with zeros
-     * @param[in] value Value to be added
-     * @param[in] square True if the value is a squared value
-     * @return Value
-     * @remark Use computeStat to extract statistic values
-     **/
-    ARLCORE_API double addValue( vnl_vector_fixed<double,5>& stat, double value, bool square=false );
-
-    /**
-     * @brief Compute statistic values from integrate stat vector
-     * @param[in] stat Contains integrate values of a statistic list
-     * @param[out] mean Mean value of the list
-     * @param[out] stdDev Standard deviation of the list
-     * @param[out] RMS Root mean square of the list
-     * @return Number of values used
-     **/
-    ARLCORE_API unsigned int computeStat( const vnl_vector_fixed<double,5>& stat, double &min, double &max, double &mean, double &stdDev, double &RMS );
-
-    //! @return Number of parameters of a polynomial (ie: 3 equations, degree 4 => 105 parameters)
-    ARLCORE_API unsigned int nbPolynomialParameters( unsigned int degree, unsigned int nbEquations );
-
-    //! @brief Compute result = Polynomial(data) with parameters of polynomial
-    ARLCORE_API bool computePolynomial( unsigned int degree, const vnl_vector<double> &parameters, const vnl_vector<double> &data, vnl_vector<double> &result );
-
-    //! @return Distance entre un point et une droite dans l'espace
-    ARLCORE_API double vgl_distance_point( const vgl_line_3d_2_points<double> &l, const vgl_point_3d<double> &p );
-
-    //! @return vgl_line_2d from slope (angle with horizontal) and rho (distance to origin)
-    ARLCORE_API vgl_line_2d<double> vglLine2d( double slope, double rho );
-
-    /**
-     * @brief Fit a 3D line from a list of 3D points
-     * @param[out] RMS of the distance of points to the line
-     **/
-    ARLCORE_API bool vgl_fit_line_3d( const std::vector< vgl_point_3d<double> > &points, vgl_line_3d_2_points<double> &line, double &RMS );
-
-    //! @brief One-parameter family of unit vectors that are orthogonal to vec, s=[0,1[
-    ARLCORE_API vgl_vector_3d<double> orthogonal_vectors( const vgl_vector_3d<double> &vec, double s);
-
-    //! @return if two bounding box are intersected
-    ARLCORE_API bool intersection( const vnl_vector_fixed<double, 6> &bound1, const vnl_vector_fixed<double, 6> &bound2 );
-
-    /**
-     * @brief From tip, top & width of a needle (pix.), return the list of points like a shape
-     * @param[in] shape 0=Quadrilateral (Tip R&L, Top L&R), 1=Triangular (Tip R&L, Top )
-     **/
-    ARLCORE_API unsigned int computeNeedleROI( CSPTR( Point ) tip, CSPTR( Point ) top, unsigned int width, std::vector<arlCore::Point::sptr > &corners, unsigned int shape=1 );
-
-    //! @brief Compute Video1Robot transformation. Return mean distance
-//  ARLCORE_API double computeVideo1Robot( const std::vector< arlCore::vnl_rigid_matrix > &M06, CSPTR( PointList ) tip, vnl_rigid_matrix &T, double &distance, double &stdDev );
-
-
-    //! @brief Compute Video2Robot transformation. Return X & RMS in pixels
-    ARLCORE_API double computeVideo2RobotX(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &Z,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        arlCore::vnl_rigid_matrix &X);
-
-    //! @brief Compute Video2Robot transformation. Return Z & RMS in pixels
-    ARLCORE_API double computeVideo2RobotZ(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &X,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        arlCore::vnl_rigid_matrix &Z);
-
-    //!
-    /**
-     * @brief Compute Chessboard2EndEffector & Video2Robot transformations
-     * @return X, Z & RMS in pixels
-     **/
-    ARLCORE_API double computeVideo2RobotXZ(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        arlCore::vnl_rigid_matrix &X,
-        arlCore::vnl_rigid_matrix &Z);
-
-
-    /**
-     * @brief Evaluate the error of reprojection with the pair of transformation X,Z from solve_AXXB
-     * Set X & Y matrix with the RMS and the Standard deviation of reprojection error
-     * @param[in,out] X Transformation from Robot plane to Tag plane
-     * @param[in,out] Z Transformation from Video plane to Robot plane
-     * @param[in] B Transformation list from Robot base to End effector
-     * @param[in] videoCams References on cameras used for computing Video-Tag transformations
-     * @param[in] models3DList 3D models (ie chessboard) for each pose
-     * @param[in] points2DList 2D detected points for each camera & each pose
-     * @param[out] errors List of reprojection errors (Use statistic to compute mean stddev,...)
-     * @return RMS of reprojection errors
-     **/
-    ARLCORE_API double evaluationAXXB(
-        const arlCore::vnl_rigid_matrix &X,
-        const arlCore::vnl_rigid_matrix &Z,
-        const std::vector< vnl_rigid_matrix > &B,
-        const std::vector< const arlCore::Camera* > &videoCams,
-        const std::vector< std::vector<arlCore::PointList::csptr > > &models3DList, //[Nbcams][NbPoses]
-        const std::vector< std::vector<arlCore::PointList::csptr > > &points2DList, //[Nbcams][NbPoses]
-        std::vector< double > &errors);
-
-} // namespace arlCore
-
-namespace arlRandom
-{
-    class Random
-    {
-    /**
-     * @class   Random
-     * @date    2007, 11/2008
-     * @brief   Randomize values
-     * @remark  While no initRandom has launched, random values are generate from random seeds
-     */
-    public:
-        //! @brief Initialize random generation from a file (only max values or all). Return 0 or seed if fail
-        ARLCORE_API static long int initRandom( const std::string &filename, long int max=-1 );
-
-        //! @brief Initialize random generation from a seed. If seed==0 return random seed else return seed
-        ARLCORE_API static long int initRandom( long int seed=0 );
-
-        //! @return Random double number between [min,max]
-        ARLCORE_API static double uniformDoubleRnd( double min=0.0, double max=1.0 );
-
-        //! @return Random integer number between [min,max]
-        ARLCORE_API static int uniformIntRnd( int min, int max ) ;
-
-        //! @return Random number : Gaussian law centered with a standard deviation 'std'
-        ARLCORE_API static double gaussianRnd( double std );
-
-        //! @brief Generate a file of n random numbers from a seed
-        ARLCORE_API static unsigned int generate( long int seed, const std::string &filename, long int n );
-
-    private:
-        static std::vector< double> m_randomTable;
-        static long int m_index;
-
-        //! @return Random value
-        static double privateRand( void );
-
-        //! @brief Initialization of random functions with a seed (if 0 random seed and return the seed)
-        static long int privateRndInit( long int seed=0 );
-
-        //! @return Random double number between [min,max]
-        static double privateUniformDoubleRnd( double min=0.0, double max=1.0 );
-
-        //! @return Random integer number between [min,max]
-        static int privateUniformIntRnd( int min, int max );
-
-        //! @return Random number : Gaussian law centered with a standard deviation 'std'
-        static double privateGaussianRnd( double std );
-    };
-
-    /**
-     * @brief Create a vector of random index included in [0 ; n-1]
-     * @param[in]   n Number of index
-     * @param[in]   m Shake only m index among n or if zero shake all
-     * @param[out]  v Vector of index included in [0 ; n-1]
-     *
-     * @return  Number of randomized index
-     * @remark Only m index are randomized among the n index
-     **/
-    ARLCORE_API unsigned int randomIndex( unsigned int n, std::vector<unsigned int> &v, unsigned int m=0 );
-} // namespace arlRandom
-
-namespace arlTime
-{
-    /**
-     * @date    2008
-     * @brief   Time functions
-     */
-
-    //! @return Value of now date
-    ARLCORE_API long int getNowDate( void );
-
-    //! @return Value of now time
-    ARLCORE_API long int getNowTime( void );
-
-    //! @brief Sleep during time in milliseconds
-    ARLCORE_API bool sleep( double time );
-
-} // namespace arlTime
-
-namespace arlString
-{
-    /**
-     * @date    2007
-     * @brief   Fonctions de traitements de chaines
-     */
-
-    //! @brief Replace character org by dst in string s & return number of replaced characters
-    ARLCORE_API unsigned int replace( std::string &s, char org, char dst );
-
-    /**
-     * @brief Convert a string in an another type
-     * @param[in] s String to convert
-     * @param[out] obj Object of type int or double
-     * @return  true if the conversion has been a success.
-     **/
-    ARLCORE_API bool valueOf(const std::string &s, int &obj);
-    ARLCORE_API bool valueOf(const std::string &s, unsigned int &obj);
-    ARLCORE_API bool valueOf(const std::string &s, double &obj);
-
-    ARLCORE_API unsigned int extractDoubles( const std::string &s, std::vector<double> &v, char separator=';' );
-    ARLCORE_API unsigned int extractInts( const std::string &s, std::vector<int> &v, char separator=';' );
-    ARLCORE_API unsigned int extractUInts( const std::string &s, std::vector<unsigned int> &v, char separator=';' );
-    ARLCORE_API unsigned int extractBools( const std::string &s, std::vector<bool> &v, char separator=';' );
-    ARLCORE_API bool extractIP( const std::string &s, unsigned int &IP1, unsigned int &IP2, unsigned int &IP3, unsigned int &IP4 );
-    ARLCORE_API bool extractIP( const std::string &s, std::string &IP, unsigned int &port );
-    ARLCORE_API bool extractExt( const std::string &s, std::string &ext );
-
-    /**
-     * @brief   Split a full path in a folder name, a filename and an extension name
-     * @param[in]   path The full path+file name
-     * @param[out]  folder Only folder name
-     * @param[out]  file Only filename
-     * @param[out]  ext Extension of the filename
-     *
-     * @return  true if the process has been a success.
-     **/
-    ARLCORE_API bool splitFilename( const std::string &path, std::string &folder, std::string &file, std::string &ext );
-
-    /**
-     * @brief   Set the string with the date as i.e. 2008-10-27-15-32-22 for October 27 2008 at 15h 32mn 22s
-     * @param[out]  s Will be set with full date string
-     * @param[in]   date
-     * @param[in]   separator Character between each number (ie : ' ' or '-')
-     **/
-    ARLCORE_API void getFullDateString( long int date, std::string &s, char separator );
-
-    /**
-     * @brief   Set the string with the date as i.e. 2008-10-27 for October 27 2008
-     * @param[out]  s Will be set with full date string
-     * @param[in]   date
-     * @param[in]   separator Character between each number (ie : ' ' or '-')
-     **/
-    ARLCORE_API void getDateString( long int date, std::string &s, char separator );
-
-        /**
-     * @brief   Set the string with the time as i.e. 15-32-22 for 15h 32mn 22s
-     * @param[out]  s Will be set with time string
-     * @param[in]   date
-     * @param[in]   separator Character between each number (ie : ' ' or '-')
-     **/
-    ARLCORE_API void getTimeString( long int time, std::string &s, char separator );
-
-} // namespace arlString
-
-namespace arlFile
-{
-    /**
-     * @date    2007
-     * @brief   Fonctions sur les fichiers
-     */
-
-    //! @return Does the file f exist ?
-    ARLCORE_API bool fileExist( const std::string &f );
-
-    //! @brief Create a directory on the filesystem
-    ARLCORE_API bool mkdir( const std::string & );
-
-    //! @brief Copy OriginFilename to DestinationFilename
-    ARLCORE_API bool fileCopy( const std::string &OriginFilename, const std::string &DestinationFilename );
-
-    //! @brief Convert .trian file to .vtk file
-    ARLCORE_API bool convertTrianToVtk( const std::string &trianFilename, const std::string &vtkFilename );
-
-} // namespace arlFile
-
-namespace arlSound
-{
-    /**
-     * @date    11/2008
-     * @brief   Sound functions
-     */
-    const double NOTE_A = 880.00; // LA
-    const double NOTE_B = 987.77; // SI
-    const double NOTE_C = 523.25; // DO
-    const double NOTE_D = 587.33; // RE
-    const double NOTE_E = 659.26; // MI
-    const double NOTE_F = 698.46; // FA
-    const double NOTE_G = 783.99; // SOL
-
-    //! @brief Play frequency during a time in ms
-    ARLCORE_API bool play( double frequency=NOTE_A, double time=100 );
-
-} // namespace arlSound
-#endif // _ARLCORE_MISC_H
diff --git a/SrcLib/ARLcore/include/arlcore/Object.h b/SrcLib/ARLcore/include/arlcore/Object.h
deleted file mode 100644
index 7373def..0000000
--- a/SrcLib/ARLcore/include/arlcore/Object.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_OBJECT_H
-#define _ARLCORE_OBJECT_H
-#include <fwTools/Object.hpp>
-
-#include <arlcore/Common.h>
-
-#include <sstream>
-#include <string>
-#include <iostream>
-#include <vector>
-
-namespace arlCore
-{
-    //! @brief All types of classes
-    enum ARLCORE_CLASS { ARLCORE_CLASS_OBJECT, ARLCORE_CLASS_PLANESYSTEM, ARLCORE_CLASS_CAMERA, ARLCORE_CLASS_TRACKER,
-                ARLCORE_CLASS_POINT, ARLCORE_CLASS_POINTLIST, ARLCORE_CLASS_TAG, ARLCORE_CLASS_TAGS,
-                ARLCORE_CLASS_MATRIXR, ARLCORE_CLASS_SCENE,
-                ARL_CLASS_SEQUENCE, ARL_CLASS_XML, ARL_CLASS_TOOL, ARL_CLASS_ROBOT, ARL_CLASS_IMAGE,
-                ARL_CLASS_VIDEO, ARL_CLASS_SERVER, ARL_CLASS_AURORA, ARL_CLASS_PILINE,
-                ARL3D_VTKACTOR,
-                ARLCORE_CLASS_NBTYPES };
-
-    static std::string ARLCORE_CLASS_NAMES[ARLCORE_CLASS_NBTYPES]={ "OBJECT", "PLANESYSTEM", "CAMERA", "TRACKER",
-                "POINT", "POINTLIST", "TAG", "TAGS", "MATRIXR", "SCENE",
-                "SEQUENCE", "XML", "TOOL", "ROBOT", "IMAGE", "VIDEO", "SERVER", "AURORA" };
-
-    //! @brief Avalaible levels of verbosity
-    enum ARLCORE_LOG_VERBOSE { ARLCORE_LOG_MUTE, ARLCORE_LOG_DISCREET, ARL_LOG_REGULAR, ARLCORE_LOG_GARRULOUS, ARLCORE_LOG_UNQUENCHABLE, ARLCORE_LOG_VERBOSE_NBTYPES };
-
-    const unsigned int FIRSTUPDATEINDEX = 1;
-    /**
-     * @class   Object
-     * @date    2007
-     * @brief   Classe de base
-     * Contient des informations temporelles, de validit� de l'objet, de Mutex
-     */
-    class Object : public ::fwTools::Object
-    {
-    public:
-        //! @brief Constructor
-        ARLCORE_API Object( ARLCORE_CLASS objectClass=ARLCORE_CLASS_OBJECT, const std::string &objectName="" );
-
-        //! @brief Constructor by copy
-        ARLCORE_API Object( const Object& );
-
-        //! @brief Affectation
-        ARLCORE_API Object& operator=( const Object& );
-
-        //! @brief Destructor
-        ARLCORE_API virtual ~Object( void );
-
-        //! @return The type of the current object
-        ARLCORE_API ARLCORE_CLASS getType( void ) const;
-
-        //! @return Description of the current object
-        ARLCORE_API virtual std::string getString( void ) const;
-
-        //! @brief Display the description of the current object
-        ARLCORE_API bool print( void ) const;
-
-        //! @brief Save the current object
-        ARLCORE_API virtual bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @brief Load the current object
-        ARLCORE_API virtual bool load( const std::string &fileName );
-
-        //! @brief Save the current object with a default name
-        ARLCORE_API bool save( void ) const;
-
-        //! @brief Serialize the current object
-        ARLCORE_API std::string virtual serialize( void ) const;
-
-        //! @brief Unserialize the current object
-        ARLCORE_API bool unserialize( const std::string & );
-
-        //! @return Is the object OK ?
-        ARLCORE_API bool isOK( void ) const;
-
-        //! @return Number of object of the current class
-        ARLCORE_API unsigned int getCounter( void ) const;
-
-        //! @return Numero of the object in order of creation [1,..[
-        ARLCORE_API unsigned int getNo( void ) const;
-
-        //! @return Date and Timestamp of the last modification of the current object
-        //! @todo Replace long int date and time by a appropriate structure of time
-        ARLCORE_API bool getTime( long int &date, long int &time ) const;
-        ARLCORE_API long int getDate( void ) const;
-        ARLCORE_API long int getTime( void ) const;
-        //ARLCORE_API pt::datetime getTime( void ) const;
-
-        //! @brief Initialize chronometer
-        ARLCORE_API bool startLap( void );
-
-        //! @return lap in seconds et initialize chronometer
-        ARLCORE_API double getLap( void );
-
-        //! @return number of iterations per second on the base of time of the last iteration
-        ARLCORE_API double getItPerSec( void );
-
-        //! @return If the date is not the same as the object one
-        ARLCORE_API bool isChanged( const long int &date, const long int &time ) const;
-
-        //! @return The update index which increment every update of the object
-        ARLCORE_API long int getUpdateIndex( void ) const;
-
-        //! @return The date is the same as the object one or the object date is invariable : (0,0)
-        ARLCORE_API bool isEquivalent( const long int &date, const long int &time ) const;
-
-        //ARLCORE_API bool isEquivalent( const long int &time ) const;
-        // Protected ??
-        ARLCORE_API bool setTime( void ); // Now
-        ARLCORE_API bool setTime( const long int &date, const long int &time );
-        ARLCORE_API bool setTime( const long int &time );
-
-        /**
-         * @brief Set object's time with the greater value
-         * @return true if the object time has changed
-         */
-        ARLCORE_API bool setMaxTime( long int date, long int time );
-
-        /**
-         * @brief Set object's time with the lesser value
-         * @return true if the object time has changed
-         */
-        ARLCORE_API bool setMinTime( long int date, long int time );
-
-        //! @return A default and unique filename for the current object
-        ARLCORE_API std::string getFileName( void )const;
-
-        //! @brief Setup 'updateIndex' if an extern modification occurs
-        ARLCORE_API void update( void );
-
-        //! @brief Set the level of verbosity for the current object
-        ARLCORE_API void setVerboseLevel( ARLCORE_LOG_VERBOSE );
-
-        //! @brief Get the level of verbosity of the current object
-        ARLCORE_LOG_VERBOSE getVerboseLevel( void );
-
-        /**
-         * @brief Set the level of verbosity for all objects of the class
-         * If it's set, it takes precedence over object's level
-         */
-        ARLCORE_API static void setStaticVerboseLevel( ARLCORE_LOG_VERBOSE );
-
-        //! @brief Get the global level of verbosity of the class
-        ARLCORE_API static ARLCORE_LOG_VERBOSE getStaticVerboseLevel( void );
-
-        /**
-         * @brief Reset the global level of verbosity for the class
-         * The local verbosity will take again the precedence
-         */
-        ARLCORE_API static void resetStaticVerboseLevel( void );
-
-
-        ARLCORE_API bool isWriteLocked( void ) const;
-        ARLCORE_API bool isReadLocked( void ) const;
-
-        ARLCORE_API unsigned int lockReadMutex( void );
-        ARLCORE_API unsigned int unlockReadMutex( void );
-
-    protected:
-        ARLCORE_API virtual bool unserialize( std::stringstream &s );
-
-        //! @brief Avalaible levels of seriousness for log messages
-        ARLCORE_API enum ARLCORE_LOG_SERIOUSNESS { ARLCORE_LOG_ERROR, ARLCORE_LOG_WARNING, ARLCORE_LOG_INFO_LEVEL2, ARLCORE_LOG_INFO_LEVEL1, ARLCORE_LOG_SERIOUSNESS_NBTYPES };
-        std::stringstream m_log;
-
-        //! @brief Display log information about the current object
-        ARLCORE_API void log( ARLCORE_LOG_SERIOUSNESS, const std::stringstream& ) const;
-        ARLCORE_API void log( ARLCORE_LOG_SERIOUSNESS, const std::string& ) const;
-        ARLCORE_API void log( ARLCORE_LOG_SERIOUSNESS, const char* ) const;
-        ARLCORE_API void log( ARLCORE_LOG_SERIOUSNESS );
-
-        ARLCORE_API bool setOK( bool b=true );
-
-        // Date et time of the last modification of the object
-        //pt:datetime m_time;
-        long int m_date, m_time;
-
-        ARLCORE_API bool lockWriteMutex( void );
-        ARLCORE_API bool unlockWriteMutex( void );
-
-        //ARLCORE_API void setUpdateIndex( long int );
-
-        //! @bchild classes can use it
-        void copy( const Object& o );
-
-    private:
-
-
-        //! @brief Class type of the object
-        ARLCORE_CLASS m_class;
-
-        //! @brief Name of the object
-        std::string m_name;
-
-        //! @brief Validity of the object
-        bool m_ok;
-
-        //! @brief Number of object for each class
-        static unsigned int m_counter[ARLCORE_CLASS_NBTYPES];
-
-        unsigned int m_no;
-        //datetime m_lapTime;
-        long int m_lapTime;
-        long int m_lapDate;
-
-        ARLCORE_LOG_VERBOSE m_verboseLevel;
-        static ARLCORE_LOG_VERBOSE m_staticVerboseLevel;
-
-        bool m_writeMutex;
-        int m_readMutex;
-        long int m_updateIndex;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_OBJECT_H
diff --git a/SrcLib/ARLcore/include/arlcore/Optimization.h b/SrcLib/ARLcore/include/arlcore/Optimization.h
deleted file mode 100644
index eee1e5d..0000000
--- a/SrcLib/ARLcore/include/arlcore/Optimization.h
+++ /dev/null
@@ -1,1088 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_OPTIMIZATION_H
-#define _ARLCORE_OPTIMIZATION_H
-
-#include <fwCore/macros.hpp>
-
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <vnl/vnl_cost_function.h>
-#include <vnl/vnl_least_squares_cost_function.h>
-#include <vnl/vnl_vector_fixed.h>
-#include <vnl/vnl_matrix_fixed.h>
-#include <vgl/vgl_point_3d.h>
-#include <vgl/vgl_line_3d_2_points.h>
-
-#include <arlcore/Point.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/Camera.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/PlaneSystem.h>
-#include <arlcore/ICP.h>
-
-namespace arlCore
-{
-    /**
-     * @date    2007
-     * @brief   Mother Class for observation
-     * @warning the observer provides informations on the optimisation only if it has
-     * been activated using setObserver()
-     */
-    class CostFunction
-    {
-    public:
-        //! @brief Constructor
-        ARLCORE_API CostFunction( void );
-
-        //! @brief Compute and return the criterion
-        ARLCORE_API virtual double getCriterion( const vnl_vector<double> &x );
-
-        //! @brief Activation of the observer on the optimiser
-        ARLCORE_API void setObserver( bool b );
-
-        //! @return Iteration Number
-        ARLCORE_API unsigned int getNbIterations( void ) const;
-
-        /**
-         * @brief This function will stack in a PointList ALL the criterion value computed
-         * in f . The points are 2 dimensional, x coordinates corresponds to the time
-         * in ms and y coordinates correponds to the criterion value
-         */
-        ARLCORE_API const PointList& getObservation( void ) const;
-
-        //! @brief Tool to visualize the criterion evolution
-        ARLCORE_API void plot( void ) const;
-
-        //! @return Last error
-        ARLCORE_API double getError( void ) const;
-
-        //! @brief Verify if returned solution & end error are correct
-        ARLCORE_API bool verify( const vnl_vector<double>& x, double endError );
-
-        // TODO Be private
-        double m_errorMin;
-        vnl_vector<double> m_solution;
-        bool m_firstIteration;
-
-    protected:
-        //! @brief This method has to be written at the end of f(x) of child classes (return observe(); ) to make work the observer
-        ARLCORE_API double observe( const vnl_vector<double> &x );
-
-        //! @brief Use this method as observe( void ), if criterion can't be evaluated
-        ARLCORE_API double error( const vnl_vector<double> &x );
-
-        bool m_observer;
-
-        //! @brief Point list that contains the criterion value along time (if observer is set to true)
-        PointList m_errorList;
-
-        //! @brief Iteration number
-        long int m_iterations;
-
-        long int m_time;
-
-        //! @brief Criterion value
-        double m_error;
-
-        static double m_errorMax;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Computation of the best plane P that fits a 3D point cloud M_i
-     * The class seeks P so that sum || dist(M_i , P) ||^2 is minimal
-     */
-    class OptimisePlane : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimisePlane();
-        ARLCORE_API ~OptimisePlane();
-        ARLCORE_API double f(vnl_vector< double > const &x);
-
-        ARLCORE_API void addPoint( const vgl_point_3d< double >&point );
-        ARLCORE_API void delPoint( unsigned int );
-        ARLCORE_API unsigned int size( void );
-
-        ARLCORE_API const std::vector< vgl_point_3d< double >* > &getPoints( void );
-
-    private:
-        std::vector< vgl_point_3d< double >* > m_points;
-    };
-
-    /**
-     * @date    04/2009
-     * @brief   Optimization of ICP criterion
-     */
-    class OptimiseICP : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseICP( arlCore::ICP& );
-        ARLCORE_API ~OptimiseICP();
-        double f(vnl_vector< double > const &x);
-
-    private:
-        arlCore::ICP& m_ICP;
-    };
-
-    /**
-     * @date    04/2009
-     * @brief   Optimization of ICP criterion with Least Squares method
-     */
-    class OptimiseICP_LS : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseICP_LS( arlCore::ICP&, UseGradient g );
-        ARLCORE_API ~OptimiseICP_LS();
-        void f(vnl_vector< double > const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector< double > const &x, vnl_matrix< double > &g);
-
-    private:
-        arlCore::ICP& m_ICP;
-    };
-
-    /**
-     * @date    2008
-     * @brief   Computation of the best line L that fits a 3D point cloud
-     * The class seeks L so that sum || dist(M_i , L) ||^2 is minimal
-     */
-    class Optimise3DLine : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API Optimise3DLine( const std::vector< vgl_point_3d<double> >& );
-        ARLCORE_API ~Optimise3DLine();
-        ARLCORE_API double f(vnl_vector< double > const &x);
-
-        ARLCORE_API unsigned int size( void );
-
-    private:
-        const std::vector< vgl_point_3d<double> > &m_points;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Being a point list P that lies on a sphere (circle), this class computes an estimation
-     * of the sphere (circle) center C. The function that is minimized is:
-     *
-     * sum || dist( estimated_radius , CP_i ) ||^2
-     *
-     * where radius is the average of the CP_i
-     */
-    class OptimisePivot : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimisePivot( PointList::csptr );
-        ARLCORE_API ~OptimisePivot();
-        ARLCORE_API double f(vnl_vector< double > const &x);
-        ARLCORE_API double getRadius( void );
-
-    private:
-        CSPTR( PointList ) m_points;
-        double m_radius;
-    };
-
-    /**
-     * @date    08/2008
-     * @brief   Détermine T en minimisant la variation de d
-     * Soit une pointe tenue par l'organe terminal et observée par des caméras stéréo
-     * Soit M06i, une liste de transformations entre la base du robot et l'organe terminal
-     * Soit TIPi(x,y), une liste de coordonnées d'une pointe dans le repère Video
-     * Soit l'inconnue T, transformation entre le repère video et la base du robot
-     * Critère d, la distance entre l'origine de l'organe terminal et la pointe
-     * Minimisation de Delta d avec di = || M06i.T.TIPi ||
-     */
-    class OptimiseVideoRobot1 : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobot1( const std::vector< arlCore::vnl_rigid_matrix > &M06, CSPTR( PointList ) Tip );
-        ARLCORE_API ~OptimiseVideoRobot1();
-        ARLCORE_API double f(vnl_vector< double > const &x);
-        ARLCORE_API double getDistance( void ); // d
-        ARLCORE_API double getStdDev( void ); // Standard deviation
-
-    private:
-        CSPTR( PointList ) m_tip;
-        const std::vector< arlCore::vnl_rigid_matrix > &m_M06;
-        double m_distance;
-        double m_stdDev;
-    };
-
-    /**
-     * @date    03/2009
-     * @brief   Base class for End effector->Chessboard (X) & Robot base->Video (Z) calibration
-     * Soit une liste de cameras calibrees (cam)
-     * Soit un modele 3D de mire
-     * Soit une liste de tranformations M06 entre la base du robot et l'organe terminal
-     * Soit des listes de points detectes sur chaque camera
-     * Critère Somme des distances au carre entre les points 3D reprojetes et detectes
-     * Points 3D dans le repere des cameras apres transformation Modele->cameras = inv(X)*inv(A)*inv(Z)
-     */
-    class OptimiseVideoRobot : public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobot( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList );
-        ARLCORE_API ~OptimiseVideoRobot();
-
-        ARLCORE_API double criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z );
-
-    protected:
-        bool criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &invZ, vnl_vector<double> &fx );
-
-    private:
-        const std::vector< arlCore::vnl_rigid_matrix > &m_M06;
-        const std::vector< std::vector< arlCore::PointList::csptr > > &m_chessboards; // [cam][pose][point]
-        const std::vector<const arlCore::Camera*> &m_cameras;
-        const std::vector< std::vector<arlCore::PointList::csptr > > &m_points2DList; // [cam][pose][point]
-    };
-
-    /**
-     * @date    02/2009
-     * @brief   Détermine X en minimisant l'erreur de reprojection
-     * Soit une liste de cameras calibrees (cam)
-     * Soit un modele 3D de mire
-     * Soit une liste de tranformations M06 entre la base du robot et l'organe terminal
-     * Soit des listes de points detectes sur chaque camera
-     * Soit l'inconnue X, transformation entre l'organe terminal et la mire
-     * Soit l'inconnue Z, transformation entre le repère video et la base du robot
-     * Critère Somme des distances au carre entre les points 3D reprojetes et detectes
-     * Points 3D dans le repere des cameras apres transformation Modele->cameras = inv(X)*inv(A)*inv(Z)
-     */
-    class OptimiseVideoRobotX : public vnl_cost_function, public OptimiseVideoRobot
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobotX( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const arlCore::vnl_rigid_matrix &Z,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList );
-        ARLCORE_API ~OptimiseVideoRobotX();
-        double f(vnl_vector< double > const &x);
-
-    private:
-        const arlCore::vnl_rigid_matrix &m_Z;
-    };
-
-    /**
-     * @date    08/2009
-     * @brief   OptimiseVideoRobotX with Least Squares method
-     */
-    class OptimiseVideoRobotX_LS : public vnl_least_squares_function, public OptimiseVideoRobot
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobotX_LS( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const arlCore::vnl_rigid_matrix &Z,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-                             unsigned int number_of_residuals=1, UseGradient g=use_gradient);
-        ARLCORE_API ~OptimiseVideoRobotX_LS();
-
-        void f(vnl_vector< double > const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector< double > const &x, vnl_matrix< double > &g);
-
-    private:
-        const arlCore::vnl_rigid_matrix &m_Z;
-    };
-
-    /**
-     * @date    02/2009
-     * @brief   Détermine Z en minimisant l'erreur de reprojection
-     * Soit une liste de cameras calibrees (cam)
-     * Soit un modele 3D de mire
-     * Soit une liste de tranformations M06 entre la base du robot et l'organe terminal
-     * Soit des listes de points detectes sur chaque camera
-     * Soit l'inconnue X, transformation entre l'organe terminal et la mire
-     * Soit l'inconnue Z, transformation entre le repère video et la base du robot
-     * Critère Somme des distances au carre entre les points 3D reprojetes et detectes
-     * Points 3D dans le repere des cameras apres transformation Modele->cameras = inv(X)*inv(A)*inv(Z)
-     */
-    class OptimiseVideoRobotZ : public vnl_cost_function, public OptimiseVideoRobot
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobotZ( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const arlCore::vnl_rigid_matrix &X,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList );
-        ARLCORE_API ~OptimiseVideoRobotZ();
-        double f(vnl_vector< double > const &x);
-
-    private:
-        const arlCore::vnl_rigid_matrix &m_X;
-    };
-
-    /**
-     * @date    08/2009
-     * @brief   OptimiseVideoRobotZ with Least Squares method
-     */
-    class OptimiseVideoRobotZ_LS : public vnl_least_squares_function, public OptimiseVideoRobot
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobotZ_LS( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const arlCore::vnl_rigid_matrix &X,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-                             unsigned int number_of_residuals=1, UseGradient g=use_gradient);
-        ARLCORE_API ~OptimiseVideoRobotZ_LS();
-
-        void f(vnl_vector< double > const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector< double > const &x, vnl_matrix< double > &g);
-
-    private:
-        const arlCore::vnl_rigid_matrix &m_X;
-    };
-
-    /**
-     * @date    03/2009
-     * @brief   Détermine X et Z en minimisant l'erreur de reprojection
-     * Soit une liste de cameras calibrees (cam)
-     * Soit un modele 3D de mire
-     * Soit une liste de tranformations M06 entre la base du robot et l'organe terminal
-     * Soit des listes de points detectes sur chaque camera
-     * Soit l'inconnue X, transformation entre l'organe terminal et la mire
-     * Soit l'inconnue Z, transformation entre le repère video et la base du robot
-     * Critère Somme des distances au carre entre les points 3D reprojetes et detectes
-     * Points 3D dans le repere des cameras apres transformation Modele->cameras = inv(X)*inv(A)*inv(Z)
-     */
-    class OptimiseVideoRobotXZ : public vnl_cost_function, public OptimiseVideoRobot
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobotXZ( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList );
-        ARLCORE_API ~OptimiseVideoRobotXZ();
-        double f(vnl_vector< double > const &x);
-    };
-
-    /**
-     * @date    03/2009
-     * @brief   OptimiseVideoRobotXZ with Least Squares method
-     */
-    class OptimiseVideoRobotXZ_LS : public vnl_least_squares_function, public OptimiseVideoRobot
-    {
-    public:
-        ARLCORE_API OptimiseVideoRobotXZ_LS( const std::vector< arlCore::vnl_rigid_matrix > &M06,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &models3D,
-                             const std::vector<const arlCore::Camera*> &cams,
-                             const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-                             unsigned int number_of_residuals=1, UseGradient g=use_gradient);
-        ARLCORE_API ~OptimiseVideoRobotXZ_LS();
-
-        void f(vnl_vector< double > const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector< double > const &x, vnl_matrix< double > &g);
-    };
-
-    /**
-     * @date    2007
-     * @brief   This class is used to perform a triangulation from N 2D visible points
-     * in N video images. Of course, the cameras need to be calibrated in the same frame.
-     * The criterion that is optimized is:
-     * sum || P_i(M) - m_i ||^2
-     * where P_i is the projective function of the i th camera, m_i the 2d coordinates
-     * of the point extracted in the i th image.
-     */
-    class OptimiseReprojection : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseReprojection(const std::vector<const Camera*> &cameras, const std::vector<Point::csptr> &points2D);
-        ARLCORE_API ~OptimiseReprojection();
-
-        double f(vnl_vector< double > const &point3D);
-
-    private:
-        const std::vector<const Camera*> &m_cameras;
-        const std::vector<Point::csptr>  &m_points2D;
-    };
-
-    /**
-     * @date    12/2008
-     * @brief   Solve Ax=xB equation by minimization of the reprojection
-     */
-/*  class AxxBReproj_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        AxxBReproj_cost_function(
-            const std::vector< vnl_rigid_matrix > &A,
-            const std::vector< vnl_rigid_matrix > &B,
-            const std::vector<const arlCore::Camera*> &videoCams,
-            const std::vector< PointList > &models3DList, //[pose]
-            const std::vector< std::vector<PointList> > &points2DList); //[cam][pose]
-
-        ~AxxBReproj_cost_function();
-
-        double f(vnl_vector< double > const &x);
-
-    private:
-        const std::vector< arlCore::vnl_rigid_matrix > &m_A_matrix;
-        const std::vector< arlCore::vnl_rigid_matrix > &m_B_matrix;
-        const std::vector<const arlCore::Camera*> &m_videoCams;
-        const std::vector< arlCore::PointList > &m_models3DList;
-        const std::vector< std::vector<arlCore::PointList> > &m_points2DList;
-    };*/
-
-    /**
-     * @date    09/2008
-     * @brief   AX=XB resolution by optimization of Dornaika method
-     */
-    class Dornaika_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API Dornaika_cost_function(const std::vector< vnl_rigid_matrix >&A, const std::vector< vnl_rigid_matrix >&B);
-        ARLCORE_API ~Dornaika_cost_function();
-
-        double f(vnl_vector< double > const &x);
-
-    private:
-        const std::vector< vnl_rigid_matrix > &m_A_matrix;
-        const std::vector< vnl_rigid_matrix > &m_B_matrix;
-    };
-
-    /**
-     * @date    09/2008
-     * @brief   AX=XB resolution by optimization of Dornaika method
-     */
-    class Dornaika_LS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API Dornaika_LS_cost_function(const std::vector< vnl_rigid_matrix >&A, const std::vector< vnl_rigid_matrix >&B,
-        unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g=use_gradient);
-        ARLCORE_API ~Dornaika_LS_cost_function();
-
-        void f(vnl_vector< double > const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector< double > const &x, vnl_matrix< double > &g);
-
-    private:
-        const std::vector< vnl_rigid_matrix > &m_A_matrix;
-        const std::vector< vnl_rigid_matrix > &m_B_matrix;
-    };
-
-    /**
-     * @date    09/2008
-     * @brief   Evaluation by polynomial method of a field of deformation
-     */
-    class Polynomial_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API Polynomial_cost_function( CSPTR( PointList ) real, CSPTR( PointList ) distorded, unsigned int degree );
-        ARLCORE_API ~Polynomial_cost_function();
-        double f(vnl_vector<double> const &x);
-
-        ARLCORE_API unsigned int getNbParameters();
-
-    private:
-        CSPTR( PointList ) m_real;
-        CSPTR( PointList ) m_distorded;
-        unsigned int m_nbEquations;
-        unsigned int m_degree;
-    };
-
-    /**
-     * @date    2007
-     * @brief   This class is used to perform a triangulation from N 2D visible points
-     * in N video images. Of course, the cameras need to be calibrated in the same frame.
-     * The criterion that is optimized is different from the one in the class
-     * arlcore::OptimiseReprojection, since in this case it takes into account the uncertainty
-     * of each 2D point. The uncertainty is given in the covariance matrix associated to
-     * each 2D point. If the covariance matrix are not filled, they are supposed to be identity.
-     * The criterion that is optimized is
-     * sum transpose( P_i(M) - m_i ) * cov_matrix_m_i^(-1) * ( P_i(M) - m_i )
-     * where P_i is the projective function of the i th camera, m_i the 2d coordinates
-     * of the point extracted in the i th image and cov_matrix_m_i the covariance matrix
-     * of the point m_i extracted in the i th video image.
-     * (Note: the covariance matrix is often anisotropic when the point extracted in the video
-     * image is the gravity center of an ellipsoid)
-     */
-    class OptimiseReprojectionUncertainty : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseReprojectionUncertainty(const std::vector<const Camera*> &cameras, const std::vector<Point::csptr> &points2D);
-        ARLCORE_API ~OptimiseReprojectionUncertainty();
-
-        double f (vnl_vector< double > const &point3D);
-
-    private:
-        const std::vector<const Camera*> &m_cameras;
-        const std::vector<Point::csptr>  &m_points2D;
-        std::vector< vnl_matrix_fixed<double,2,2> > m_inv_cov_matrix;
-
-    };
-
-    /**
-     * @date    2007
-     * @brief   Given a set of lines that should intersect in a unique point, but
-     * which are in reality very close, this class finds the closest point to
-     * each line. We optimize here the following criterion:
-     * sum dist(L_i, M)^2
-     *
-     * where M is the unknown 3D point, L_i are the lines which should intersect in a
-     * unique point and dist(L_i, M) compute the euclidean distance between the line L_i and M.
-     * This function is used for example in the triangulation method called
-     * ARLCORE_R3D_MULTI_LINES_APPROX and ARLCORE_R3D_MULTI_LINES_PERFECT
-     */
-    class OptimiseLineIntersection : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OptimiseLineIntersection(const std::vector< vgl_line_3d_2_points <double> >&lines);
-        ARLCORE_API ~OptimiseLineIntersection();
-
-        double f (vnl_vector< double > const &x);
-
-    private:
-        const std::vector< vgl_line_3d_2_points <double> >&m_lineList;
-    };
-
-    /**
-     * @date    2007
-     * @brief   This class perform a 3D/2D projective point registration called
-     * EPPC (see. S. Nicolau, X. Pennec, L. Soler, N. Ayache, An accuracy
-     * certified augmented reality system for therapy guidance. In ECCV04,
-     * LNCS 3023, 2004 P 79-91)
-     *
-     * Context of use:
-     * You have a rigid 3D point set \tilde{M_i} that are seen by N camera. The 3D
-     * point set coordinates are know in its own frame. This 3D point set is visible
-     * in N video images that are jointly calibrated. In each video
-     * image you extract the projection of \tilde{M_i} and obtain \tilde{m_j_i} where j indicates
-     * the camera number. Your purpose is to compute the rigid transformation
-     * between the camera frame and the 3D point own frame.
-     *
-     * Typically, this function is useful in augmented rality application (but not only).
-     * You are looking with several cameras at a patient on which several radio-opaque
-     * markers were stuck. The patient has been CT-scanned and markers are visible both
-     * in the CT image and in the video images. To superimpose the 3D model segmented
-     * in the CT scan, you need to estimate the rigid transformation between the CT
-     * frame and the camera frame.
-     *
-     * For this criterion to be interesting, the 3D point set must come
-     * from a measurement that is accurate but not too much. You need also to
-     * have an idea on your measure uncertainty (3D and 2D) and
-     * that they are different between the 3D points and the 2D points.
-     *
-     * We assume you know for each point \tilde{M_i} and \tilde{m_j_i} its covariance matrix.
-     * The criterion to be optimized is:
-     * sum transpose( M_i - \tilde{M_i)} ) * cov_matrix_M_i ^(-1) * ( M_i - \tilde{M_i)} )
-     * + sum_j sum_i transpose( P_j(T*M_i) - \tilde{m_i}) *cov_matrix_m_j_i ^(-1)*( P_j(T*M_i) - \tilde{m_i})
-     *
-     * where M_i are the PERFECT position of the 3D points M_i (which is not known
-     * but is estimated when optimizing the criterion). In this criterion, T and the M_i
-     * are the unknown. The optimization on the unknown is done iteratively.
-     *
-     * Since we are not (at first sight) interested by the 3D points estimation, the
-     * class provides only the transformation T at the end of the optimization.
-     * The function get3Derror provides the first term value during the optimization
-     * The function get2Derror provides the second term value during the optimization
-     * You can also ask for them at the end of the optimization.
-     * If you need the estimation of the 3D points, just add a function that
-     * gives back m_model3D.
-     */
-    class EPPC_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API EPPC_cost_function(const std::vector < const Camera *> &c,
-            const std::vector<Point::csptr > &model3D,
-            const std::vector< std::vector<Point::csptr> >&points2DList,
-            vnl_matrix_fixed<double,4,4> &trsf);
-        ARLCORE_API ~EPPC_cost_function(){}
-        double f (vnl_vector< double > const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-        ARLCORE_API double get3Derror() const {return m_3Derror(0,0);};
-        ARLCORE_API double get2Derror() const {return m_2Derror(0,0);};
-
-    private:
-        std::vector< vnl_matrix_fixed<double,3,3> > m_invCovMat3D;
-        std::vector< std::vector<vnl_matrix_fixed<double,2,2> > > m_invCovMat2D;
-        const std::vector<const Camera*> &m_cameras;
-        const std::vector< Point::csptr  > &m_model3D;
-        const std::vector< std::vector<Point::csptr> > &m_points2DList;
-        const vnl_matrix_fixed<double,4,4>  &m_trsf;
-        vnl_matrix_fixed<double,1,1> m_2Derror;
-        vnl_matrix_fixed<double,1,1> m_3Derror;
-    };
-
-    /**
-     * @date    2007
-     * @brief   EPPC cost function with Least Square method
-     */
-    class EPPC_LS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API EPPC_LS_cost_function(const std::vector < const Camera *> &c,
-            const std::vector<Point::csptr > &model3D,
-            const std::vector< std::vector<Point::csptr> >&points2DList,
-            vnl_matrix_fixed<double,4,4> &trsf,
-            unsigned int number_of_unknowns,
-            unsigned int number_of_residuals, UseGradient g=use_gradient);
-
-        ARLCORE_API ~EPPC_LS_cost_function(){}
-        void f(vnl_vector<double> const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector<double> const &x, vnl_matrix<double>& g);
-        ARLCORE_API double get3Derror() const {return m_3Derror(0,0);};
-        ARLCORE_API double get2Derror() const {return m_2Derror(0,0);};
-
-    private:
-        std::vector< vnl_matrix_fixed<double,3,3> > m_invCovMat3D;
-        std::vector< std::vector<vnl_matrix_fixed<double,2,2> > > m_invCovMat2D;
-        const std::vector<const Camera*> &m_cameras;
-        const std::vector< Point::csptr  > &m_model3D;
-        const std::vector< std::vector<Point::csptr> > &m_points2DList;
-        const vnl_matrix_fixed<double,4,4>  &m_trsf;
-        vnl_matrix_fixed<double,1,1> m_2Derror;
-        vnl_matrix_fixed<double,1,1> m_3Derror;
-    };
-
-    /**
-     * @date    2007
-     * @brief   ISPPC cost function
-     * The context of use of this class is the same than for EPPC, but in that case
-     * the noise on your 3D point is negligible with respect to the noise on your
-     * 2D points.
-     * If you have isotropic noise on the 2D points extraction, or if you want to
-     * neglect it, m_noise_feature must be set to false. Then you optimise the
-     * following criterion:
-     * sum_j sum_i ||P_j(T*M_i) - m_i||^2
-     *
-     * where M_i are the position of the 3D points, m_j_i is the projection of
-     * M_i in the j th camera, P_j is the projective function of the j th camera and
-     * T is the unknown (rigid transformation). This criterion typically corresponds
-     * to a 2D reprojection error (in pixel).
-     *
-     * If you have anisotropic noise, you optimize the following criterion:
-     * sum_j sum_i transpose( P_j(T*M_i) - m_i) *cov_matrix_m_j_i ^(-1)*( P_j(T*M_i) - m_i)
-     *
-     * where  cov_matrix_m_j_i is the covariance matrix of the i th point in the
-     * j th camera.
-     *
-     * TODO : verbose mode so that we can easily print out the criterion evolution
-     * during the minimization
-     */
-    class ISPPC_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API ISPPC_cost_function(const std::vector<const Camera *>&a,
-            const std::vector< vnl_vector_fixed<double,4> > &points3D,
-            const std::vector< std::vector<Point::csptr> > &points2D, bool noise_feature=false);
-
-        ARLCORE_API ~ISPPC_cost_function(){}
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-        ARLCORE_API double getNoiseFeature() const {return m_noise_feature;};
-        ARLCORE_API void   setNoiseFeature(bool feat) {m_noise_feature = feat;};
-
-    private:
-        const std::vector< vnl_vector_fixed<double,4> > &m_points3D;
-        const std::vector< std::vector<Point::csptr> > &m_points2D;
-        const std::vector<const Camera*> &m_cameras;
-        std::vector< std::vector<vnl_matrix_fixed<double,2,2> > > m_invCovMat2D;
-        bool m_noise_feature;//if the noise is isotropic, this bool is true and m_invCovMat2D is empty
-    };
-
-    /**
-     * @date    2007
-     * @brief   ISPPC cost function with Least Square method
-     */
-    class ISPPC_LS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API ISPPC_LS_cost_function(const std::vector<const Camera *>&a,
-            const std::vector< vnl_vector_fixed<double,4> > &points3D,
-            const std::vector< std::vector<Point::csptr> > &points2D,
-            unsigned int number_of_unknowns,
-            unsigned int number_of_residuals, UseGradient g=use_gradient, bool noise_feature = false);
-
-        ~ISPPC_LS_cost_function(){}
-        void f(vnl_vector<double> const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector<double> const &x, vnl_matrix<double>& g);
-        ARLCORE_API double getNoiseFeature() const {return m_noise_feature;};
-        ARLCORE_API void setNoiseFeature(bool feat) {m_noise_feature = feat;};
-
-    private:
-        const std::vector< vnl_vector_fixed<double,4> > &m_points3D;
-        const std::vector< std::vector<Point::csptr> > &m_points2D;
-        const std::vector<const Camera*> &m_cameras;
-        std::vector< std::vector<vnl_matrix_fixed<double,2,2> > > m_invCovMat2D;
-        bool m_noise_feature;//if the noise is isotropic, this bool is true and m_invCovMat2D is empty
-    };
-
-    /**
-     * @date    2007
-     * @brief   OSPPC cost function
-     * The context of use of this class is the same than for EPPC, but in that case
-     * the noise on your 3D point is negligible with respect to the noise on your
-     * 2D points. This criterion was introduced by Lu, C. Fast and Globally Convergent
-     * Pose Estimation from Video Images in Trans on PAMI 2000 vol 22(6) pp 610--622,
-     * and minimize the sum of the squared 3D distance between the 3D points and the
-     * half lines beginning from the optical center C and passing through
-     * the 2D points extracted from the video images.
-     *
-     * You optimise the following criterion:
-     * sum_j sum_i  || 1/{C_j m_j_i} ||^2 * || C_j(T * M_i) vect {C_j m_j_i} || ^2
-     *
-     * where M_i are the position of the 3D points, C_j is the optical center of
-     * the j th camera, m_j_i is the projection of M_i in the j th camera, C_j(T * M_i)
-     * is a vector between C_j and T*M_i, C_j m_j_i is a vector between C_j and M_j_i ,
-     * vect is the cross product between two vectors and T is the unknown (rigid
-     * transformation). This criterion typically corresponds to a 3D projection error
-     * in mm.
-     *
-     * TODO : verbose mode so that we can easily print out the criterion evolution
-     * during the minimization
-     */
-    class OSPPC_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OSPPC_cost_function(const std::vector<const Camera *>&a,
-            const std::vector< Point::csptr  > &points3D,
-            const std::vector< std::vector<Point::csptr> > &points2D);
-        ARLCORE_API ~OSPPC_cost_function(){};
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-
-    private:
-        const std::vector<Point::csptr > &m_points3D;
-        const std::vector< std::vector<Point::csptr> > &m_points2D;
-        const std::vector<const Camera*> &m_cameras;
-        std::vector< std::vector< vnl_vector_fixed<double,3> > > m_extPoints2D;
-    };
-
-    /**
-     * @date    2007
-     * @brief   OSPPC cost function with Least Square method
-     */
-    class OSPPC_LS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API OSPPC_LS_cost_function(const std::vector<const Camera*>&,
-            const std::vector<Point::csptr > &points3D,
-            const std::vector< std::vector<Point::csptr> > &points2D,
-            unsigned int number_of_unknowns,
-            unsigned int number_of_residuals, UseGradient g=use_gradient);
-        ARLCORE_API ~OSPPC_LS_cost_function(){};
-        void f(vnl_vector<double> const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector<double> const &x, vnl_matrix<double>& g);
-
-    private:
-        const std::vector<Point::csptr > &m_points3D;
-        const std::vector< std::vector<Point::csptr> > &m_points2D;
-        const std::vector<const Camera*> &m_cameras;
-        std::vector< std::vector< vnl_vector_fixed<double,3> > > m_extPoints2D;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Optimization intrinsic parameters of a camera according to the
-     * method of Z. Zhang. Flexible Camera Calibration by Viewing a Plane from
-     * Unknown Orientations in ICCV 99.
-     * The criterion that is optimised is Sum( Sum( ||Project(Tj * Mi) - mij||^2 ) )
-     * and the unknown are the intrinsic parameter (hidden in the function Project) :
-     * fx;fy;cx;cy;k1;k2;p1;p2;[k3;alphaC] : k3 and alphaC are not used
-     * For each pose, the pattern can be different (number of points, 3D position of points)
-     * It is assumed that all the points of each 3D model is visible in the video image
-     * Therefore, if a point of the 3D model is not seen in the video image, it has to be
-     * removed from the 3D model given to the function
-     */
-    class Intrinsic_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        Intrinsic_cost_function(unsigned int nbParameters=0);
-        ~Intrinsic_cost_function();
-        ARLCORE_API unsigned int getNbParameters( void ) const;
-        ARLCORE_API bool save( const std::string &fileName ) const;
-        ARLCORE_API unsigned int addPattern( const std::vector<Point::sptr >& points2D, const std::vector<Point::sptr >& model3D );
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-        ARLCORE_API void setVerbose( bool verbose = true );
-        ARLCORE_API std::vector<double> getReprojectionError( vnl_vector< double > const &x );
-
-    private:
-        unsigned int m_nbParameters;
-        PlaneSystem m_universe;
-        Camera *m_camera;
-        std::vector< PointList* > m_2DpatternsList;
-        std::vector< PointList* > m_3DpatternsList;
-        bool m_verbose;
-        bool m_available_reprojection_error;
-        std::vector<double> m_point_reprojection_error;
-
-    };
-
-    /**
-     * @date    2007
-     * @brief   Optimization intrinsic parameters with Levenberg optimization
-     * see Intrinsic_cost_function for more explanation
-     */
-    class IntrinsicLS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API IntrinsicLS_cost_function(unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g=use_gradient);
-        ARLCORE_API ~IntrinsicLS_cost_function();
-        ARLCORE_API unsigned int getNbParameters( void ) const;
-        ARLCORE_API bool save( const std::string &fileName ) const;
-        ARLCORE_API unsigned int addPattern( const std::vector<Point::sptr >& points2D, const std::vector<Point::sptr >& model3D );
-        void f(vnl_vector<double> const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector<double> const &x, vnl_matrix<double>& j);
-        ARLCORE_API void setVerbose( bool verbose = true );
-        ARLCORE_API void getReprojectionError( vnl_vector< double > const &x, vnl_vector< double > &fx );
-
-
-    private:
-        unsigned int m_nbParameters;
-        PlaneSystem m_universe;
-        Camera *m_camera;
-        std::vector< PointList* > m_2DpatternsList;
-        std::vector< PointList* > m_3DpatternsList;
-        bool m_verbose;
-//      double m_reproj_error;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Optimization of extrinsic parameters of several cameras
-     * This class optimize a criterion that allows to calibrate in a same
-     * frame several cameras that are looking at the same 3D model object in
-     * several positions.
-     * For more explanation on the criterion, cf. arlCore::refineExtrinsicCalibration
-     */
-    class Extrinsic_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        Extrinsic_cost_function(const std::vector<const Camera *>&a, unsigned int nou);
-        ~Extrinsic_cost_function();
-        double f(vnl_vector<double> const &x);
-        ARLCORE_API unsigned int addPattern( const std::vector<std::vector<Point::csptr > >& points2D, const std::vector<Point::csptr >& model3D );
-        //void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-        ARLCORE_API void setVerbose( bool verbose = true );
-        ARLCORE_API std::vector<double> getReprojectionError( vnl_vector< double > const &x );
-
-    private:
-        unsigned int m_nb3Dpoints;
-        std::vector< std::vector< std::vector< Point::csptr  > > > m_2DpatternsList;
-        std::vector< std::vector< Point::csptr  > >  m_3DpatternsList;
-        const std::vector<const Camera*> &m_cameras;
-        bool m_verbose;
-        bool m_available_reprojection_error;
-        std::vector<double> m_point_reprojection_error;
-
-    };
-
-    /**
-     * @date    2007
-     * @brief   Optimization extrinsic parameters with Levenberg Marquart optimization
-     * Note that the step variable in fgradf plays an important role in the convergence
-     * speed. 1e-8 seems to be an optimal value. The reason is still unknown. Setting
-     * this variable to 1e-12 or 1e-6 multiply the convergence time by a factor of 3
-     * or of 4 !
-     */
-    class ExtrinsicLS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API ExtrinsicLS_cost_function(const std::vector<const Camera *>&a,unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g=use_gradient);
-        ARLCORE_API ~ExtrinsicLS_cost_function();
-        void f(vnl_vector<double> const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector<double> const &x, vnl_matrix<double>& j);
-        ARLCORE_API unsigned int addPattern( const std::vector<std::vector<Point::csptr > >& points2D, const std::vector<Point::csptr >& model3D );
-        ARLCORE_API void setVerbose( bool verbose = true );
-        ARLCORE_API void getReprojectionError( vnl_vector< double > const &x, vnl_vector< double > &fx );
-    private:
-        unsigned int m_nb3Dpoints;
-
-        std::vector< std::vector< std::vector< Point::csptr  > > > m_2DpatternsList;
-        std::vector< std::vector< Point::csptr  > >  m_3DpatternsList;
-        const std::vector<const Camera*> &m_cameras;
-        bool m_verbose;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Optimization of the Sylvester equation AX=XB. To understand what is solved
-     * please refer to arlcore::vnl_rigid_matrix::solve_AXXB
-     * 2 criterions :
-     * 1st criterion that is minimized is sum_i || A_iX-XB_i ||^2 where the norm is the
-     * frobenius norm
-     * 2nd criterion : Strobl-Hirzinger
-     */
-    class AX_XB_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API AX_XB_cost_function(
-            const std::vector< vnl_rigid_matrix >&A,
-            const std::vector< vnl_rigid_matrix >&B,
-            double alpha = 1.0):
-        vnl_cost_function(6),
-        m_A_matrix(A),
-        m_B_matrix(B),
-        m_alpha(alpha){}
-
-        ARLCORE_API ~AX_XB_cost_function(){}
-
-        ARLCORE_API double criterion( const arlCore::vnl_rigid_matrix &X );
-        ARLCORE_API double getAlpha( const arlCore::vnl_rigid_matrix &X );
-        ARLCORE_API void setAlpha( double );
-
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-
-    private:
-        const std::vector< vnl_rigid_matrix > m_A_matrix;
-        const std::vector< vnl_rigid_matrix > m_B_matrix;
-        double m_alpha;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Optimization of the Sylvester equation AX=XB. To understand what is solved
-     * please refer to arlcore::vnl_rigid_matrix::solve_AXXB
-     * Criterion of Strobl-Hirzinger with BXA = Z
-     */
-/*  class AXB_Z_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API AXB_Z_cost_function(
-            const std::vector< vnl_rigid_matrix >&A,
-            const std::vector< vnl_rigid_matrix >&B,
-            double alpha = 1.0):
-        vnl_cost_function(12),
-        m_A_matrix(A),
-        m_B_matrix(B),
-        m_alpha(alpha){}
-
-        ARLCORE_API ~AXB_Z_cost_function(){}
-
-        ARLCORE_API double criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z );
-        ARLCORE_API double getAlpha( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z );
-        ARLCORE_API void setAlpha( double );
-
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-
-    private:
-        const std::vector< vnl_rigid_matrix > m_A_matrix;
-        const std::vector< vnl_rigid_matrix > m_B_matrix;
-        double m_alpha;
-    };*/
-
-    /**
-     * @date    2007
-     * @brief   Optimization of the AXBZ = 0 equation
-     * 4 Criterions
-     * 1) Minimization of sum_i || vnl_rigid_vector(A_iXB_iZ) ||^2 where the norm is the
-     * two norm. AXBZ should be identity so the rigid vector should be [0 0 0 0 0 0]
-     * 4) Criterion of Strobl-Hirzinger
-     */
-    class AXB_Z_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API AXB_Z_cost_function(
-            const std::vector< vnl_rigid_matrix >&A,
-            const std::vector< vnl_rigid_matrix >&B,
-            double alpha=1.0):
-        vnl_cost_function(12),
-        m_A_matrix(A),
-        m_B_matrix(B),
-        m_alpha(alpha){}
-
-        ARLCORE_API ~AXB_Z_cost_function(){}
-
-        ARLCORE_API double criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z );
-        ARLCORE_API double getAlpha( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z );
-        ARLCORE_API void setAlpha( double );
-
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-
-    private:
-        const std::vector< vnl_rigid_matrix > m_A_matrix;
-        const std::vector< vnl_rigid_matrix > m_B_matrix;
-        double m_alpha;
-    };
-
-    /**
-     * @date    2007
-     * @brief   The purpose of this class is to register 2 lists of matched
-     * 3D points. It minimizes the following 3D/3D registration criterion:
-     *
-     * sum_i  transpose(T* M_i - N_i) * Cov_M_i ^(-1) * (T* M_i - N_i)
-     *
-     * where M_i are the points to register on the N_i points, T the rigid transformation
-     * that is seeked, and Cov_M_i the covariance matrix that contains the uncertainty
-     * on M_i. This means that we consider that the N_i points are perfect and that the M_i
-     * observation are corrupted with a noise of covariance matrix Cov_M_i .
-     */
-    class register3D3DUncertainty_cost_function : public vnl_cost_function, public CostFunction
-    {
-    public:
-        ARLCORE_API register3D3DUncertainty_cost_function(CSPTR( PointList ) points3D_source,
-            CSPTR( PointList ) points3D_cible);
-
-        ARLCORE_API ~register3D3DUncertainty_cost_function(){}
-        double f(vnl_vector<double> const &x);
-        void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-
-    private:
-        CSPTR( PointList ) m_points3D_source, m_points3D_cible;
-        std::vector< vnl_matrix_fixed<double,3,3> > m_inv_cov_matrix;
-    };
-
-    /**
-     * @date    2007
-     * @brief   The purpose of this class is to register 2 lists of matched
-     * 3D points. See register3D3DUncertainty_cost_function for all informations.
-     * In this class we optimize with the Levenberg Marquardt method.
-     */
-    class register3D3DUncertainty_LS_cost_function : public vnl_least_squares_function, public CostFunction
-    {
-    public:
-        ARLCORE_API register3D3DUncertainty_LS_cost_function(CSPTR( PointList ) points3D_source,
-            CSPTR( PointList ) points3D_cible,
-            unsigned int number_of_unknowns,
-            unsigned int number_of_residuals, UseGradient g=use_gradient);
-
-        ARLCORE_API ~register3D3DUncertainty_LS_cost_function(){}
-        void f(vnl_vector<double> const &x, vnl_vector< double > &fx);
-        void gradf(vnl_vector<double> const &x, vnl_matrix<double>& g);
-
-    private:
-        CSPTR( PointList ) m_points3D_source, m_points3D_cible;
-        std::vector< vnl_matrix_fixed<double,3,3> > m_inv_cov_matrix;
-    };
-
-    /**
-     * @date    2007
-     * @brief   Compute the average of a rotation list using a geodesic norm on SO(3)
-     * It minimizes sum_i ||R_i - R_average ||^2  where R_average is the unknown
-     * and ||.|| is a riemannian distance
-     *
-     * TODO still not include in arlcore::vnl_rigid_matrix
-     */
-    class averageRotation_cost_function : public vnl_cost_function, public CostFunction
-    {
-     public:
-      ARLCORE_API averageRotation_cost_function(const std::vector< arlCore::vnl_rotation3d_matrix* > list):vnl_cost_function(6),
-      m_rotation_list(list){}
-      ARLCORE_API ~averageRotation_cost_function(){}
-      ARLCORE_API inline std::vector< arlCore::vnl_rotation3d_matrix* > get_matrix_list() const {return this->m_rotation_list;};
-      ARLCORE_API inline int get_nou() const {return this->number_of_unknowns;};
-      ARLCORE_API inline void set_nou(int a) {this->number_of_unknowns = a;};
-      ARLCORE_API inline void set_matrix_list(std::vector< arlCore::vnl_rotation3d_matrix* > a) {this->m_rotation_list = a;};
-
-      double f (vnl_vector< double > const &x);
-      void gradf(vnl_vector<double> const &x, vnl_vector<double>& g);
-
-      friend double sq_rieman_dist(arlCore::vnl_rotation3d_matrix, arlCore::vnl_rotation3d_matrix);
-
-    private:
-      std::vector< arlCore::vnl_rotation3d_matrix* > m_rotation_list;
-      int number_of_unknowns;
-    };
-
-} // namespace arlCore
-#endif // _ARLCORE_OPTIMIZATION_H
diff --git a/SrcLib/ARLcore/include/arlcore/Parameters.h b/SrcLib/ARLcore/include/arlcore/Parameters.h
deleted file mode 100644
index ecaec75..0000000
--- a/SrcLib/ARLcore/include/arlcore/Parameters.h
+++ /dev/null
@@ -1,154 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_PARAMETERS_H
-#define _ARLCORE_PARAMETERS_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <string>
-#include <map>
-#include <boost/any.hpp>
-
-namespace arlCore
-{
-    class Parameters
-    {
-    /**
-     * @class   Parameters
-     * @date    07/2007
-     * @brief   This class should be used with real time application only.
-     * The purpose of this class is to access/modify parameters (double or boolean)that are loaded 
-     * when an application is launched. It allows to read parameters that
-     * can modify the software behaviour. For example, in the case you use a tracking
-     * software with N cameras, you could indicate in a file how many cameras
-     * you want to use for your tracking. The functions in this class are devoted
-     * to help you doing such things. 
-     *  
-     */
-    public:
-        //! @brief Constructor
-        ARLCORE_API Parameters( const std::string &name="", const std::string &fileName="" );
-
-        //! @brief Desstructor
-        ARLCORE_API ~Parameters( void );
-
-        //! @brief Display the list of parameters
-        ARLCORE_API bool printParameters( void ) const;
-
-        //! @brief Reload value of parameters from current file
-        ARLCORE_API bool reloadParameters( void );
-
-        //! @brief Reload value of parameters from a new file
-        ARLCORE_API bool reloadParameters( const std::string &fileName );
-
-        //! @brief Save the list of parameters (Not yet implemented)
-        ARLCORE_API bool saveParameters( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @return True if the type of the no parameter is 'type'
-        ARLCORE_API bool getType( unsigned int no, const std::type_info &type ) const;
-
-        //! @return True if the type of the named parameter is 'type'
-        ARLCORE_API bool getType( const std::string &name, const std::type_info &type ) const;
-
-        //! @return Number of all parameters
-        ARLCORE_API unsigned int getNbParameters( void ) const;
-
-        //! @return Number of all bool parameters
-        ARLCORE_API unsigned int getNbBoolParameters( void ) const;
-
-        //! @return Number of all double parameters
-        ARLCORE_API unsigned int getNbDoubleParameters( void ) const;
-
-        /**
-         * @brief Set all parameters with their default values
-         * @return Number of parameters set
-         */
-        ARLCORE_API unsigned int setAllDefault( void );
-
-        /**
-         * @brief Set all bool parameters to b
-         * @return Number of parameters set
-         */
-        ARLCORE_API unsigned int setAllBoolParameters( bool b=true );
-
-        /**
-         * @brief Set all bool parameters to false
-         * @return Number of parameters set
-         */
-        ARLCORE_API unsigned int resetAllBoolParameters( void );
-
-        /**
-         * @brief Set all bool parameters with d
-         * @return Number of parameters set
-         */
-        ARLCORE_API unsigned int setAllDoubleParameters( double d );
-
-        /**
-         * @return Value of the parameter no if it's boolean
-         * @warning If the parameter no is not boolean, return false
-         */
-        ARLCORE_API bool getBool( unsigned int no ) const;
-        ARLCORE_API bool getBool( const std::string &name ) const;
-
-        /**
-         * @return Value of the parameter no if it's a double
-         * @warning If the parameter no is not a double, return 0.0
-         */
-        ARLCORE_API double getDouble( unsigned int no ) const;
-        ARLCORE_API double getDouble( const std::string &name ) const;
-
-        /**
-         * @brief Set the parameter no to b, if it exists and if it's boolean
-         * @return If the parameter was set
-         */
-        ARLCORE_API bool setBool( unsigned int no, bool b );
-        ARLCORE_API bool setBool( const std::string &name, bool b );
-
-        /**
-         * @brief Set the parameter no to d, if it exists and if it's a double
-         * @return If the parameter was set
-         */
-        ARLCORE_API bool setDouble( unsigned int no, double d );
-        ARLCORE_API bool setDouble( const std::string &name, double d ); 
-
-        //! @return Description of all parameters
-        ARLCORE_API std::string getString( void ) const;
-
-    protected:
-        //! @brief Used by child classes to initialize their own parameters
-        ARLCORE_API unsigned int init( const std::string[], const boost::any[], unsigned int nb );
-
-        //! @brief Used by child classes to initialize their own parameters from a file which name is m_paramFile
-        ARLCORE_API unsigned int load( void );
-
-    private:
-        //! @brief Clear all tables (i.e. before loading parameters)
-        void clear( void );
-
-        //! @brief Index from a name if it's exists
-        bool getIndex( const std::string &name, unsigned int &index ) const;
-
-        //! @brief Name of the file of parameters
-        std::string m_paramFile;
-
-        //! @brief Name of the list of parameters
-        std::string m_name;
-
-        //! @brief Description of each parameter
-        std::vector<std::string> m_paramNames;
-
-        //! @brief Values of each parameter
-        std::vector<boost::any> m_paramValues;
-
-        //! @brief Default values of each parameter
-        std::vector<boost::any> m_paramDefaults;
-
-        //! @brief Default values of each parameter
-        std::map< std::string, unsigned int > m_index ;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_PARAMETERS_H
diff --git a/SrcLib/ARLcore/include/arlcore/Particle.h b/SrcLib/ARLcore/include/arlcore/Particle.h
deleted file mode 100644
index 488234a..0000000
--- a/SrcLib/ARLcore/include/arlcore/Particle.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_PARTICLE_H
-#define _ARLCORE_PARTICLE_H
-#include <arlcore/Common.h>
-
-#include <string>
-#include <arlcore/PlaneSystem.h>
-
-namespace arlCore
-{
-    class ARLCORE_CLASS_API Particle : public Object
-    {
-    /**
-     * @class   Particle
-     * @date    2007
-     * @brief   Basic class that represents an object in space
-     */
-    public:
-        /**
-        * @brief Création of a particle that have its own frame in the universe
-        * The identity ID of the frame can be got using getPlane()
-        * The frame name is initialized with planeName
-        */
-        ARLCORE_API Particle( PlaneSystem &universe, const std::string &planeName="" );
-
-        //! @brief Constructor by copy
-        ARLCORE_API Particle( const Particle& );
-
-        //! @brief Affectation
-        ARLCORE_API Particle& operator=( const Particle& );
-
-        //! @brief Destruction de la particule avec libération du repère dans l'univers
-        ARLCORE_API virtual ~Particle( void );
-
-        //! @return Name of the particle
-        ARLCORE_API std::string getName( void ) const;
-
-        //! @return Description textuelle de la particule
-        ARLCORE_API virtual std::string getString( void ) const;
-
-        //! @return Référence sur l'univers qui contient la particule
-        ARLCORE_API PlaneSystem& getPlaneSystem( void ) const;
-
-        //! @return ID du repère de la particule dans l'univers
-        ARLCORE_API unsigned int getPlane( void ) const;
-
-    private:
-        // Univers dans lequel la particule est plongée
-        PlaneSystem &m_universe;
-
-        // ID du repère de la particule dans l'univers
-        unsigned int m_plane;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_PARTICLE_H
diff --git a/SrcLib/ARLcore/include/arlcore/PlaneSystem.h b/SrcLib/ARLcore/include/arlcore/PlaneSystem.h
deleted file mode 100644
index 1d2c0f9..0000000
--- a/SrcLib/ARLcore/include/arlcore/PlaneSystem.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_PLANE_SYSTEM_H
-#define _ARLCORE_PLANE_SYSTEM_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <string>
-
-#include <arlcore/Object.h>
-#include <arlcore/MatrixR.h>
-
-namespace arlCore
-{
-    class PlaneSystem : public Object
-    {
-    /**
-     * @class   PlaneSystem
-     * @date    2007
-     * @brief   Ensemble de reperes cartesiens lies par des transformations rigides
-     */
-    public:
-        //! Constant Used to reference unknown plane
-        ARLCORE_API static const unsigned int NoPlane;
-
-        //! @brief Create an empty PlaneSystem
-        ARLCORE_API PlaneSystem( const std::string &name="" );
-
-        //! @brief Destructor
-        ARLCORE_API ~PlaneSystem( void );
-
-        //! @return Description of the current plane system
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @brief Save the planeSystem : Not yet implemented
-        ARLCORE_API bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @brief Load a planeSystem : Not yet implemented
-        ARLCORE_API bool load( const std::string &fileName );
-
-        //! @brief Save graph of planeSystem for a graphviz visualization
-        ARLCORE_API unsigned int saveGraph( const std::string& ) const;
-
-        //! @brief Run a graphviz visualization
-        ARLCORE_API unsigned int printGraph( void ) const;
-
-        //! @brief Add the 3D plane in the PlaneSystem and return its ID [1,..[
-        ARLCORE_API unsigned int add3DPlane( const Object &o );
-        ARLCORE_API unsigned int add3DPlane( const std::string &s="" );
-        ARLCORE_API bool setPlaneName( unsigned int plane, const std::string &s );
-
-        //! @brief Release an anused plane in the graph
-        ARLCORE_API bool releasePlane( unsigned int plane );
-
-        //! @return The number of 3D planes in the PlaneSystem
-        ARLCORE_API unsigned int getNbPlanes( void ) const;
-
-        //! @return status of a plane number
-        ARLCORE_API bool getPlaneStatus( unsigned int plane ) const;
-
-        //! @return The ID of the 3D plane with the name [1,..[
-        ARLCORE_API bool getPlaneID( std::string name, unsigned int &ID ) const;
-
-        //! @return The name of the 3D plane  with the ID [1,..[
-        ARLCORE_API bool getPlaneName( unsigned int ID, std::string &name ) const;
-
-        //! @return Weight of the transformation at index
-        ARLCORE_API double getWeight( unsigned int index ) const;
-
-        //! @return Weight of the transformation (or inverse)
-        ARLCORE_API double getWeight( unsigned int plane1, unsigned int plane2 ) const;
-
-        /**
-        * @brief If it exists, set T with the transformation from Plane1 to Plane2
-        * @remark The age of the transformation is these of the older transformation in the path
-        */
-        ARLCORE_API bool getTrf( unsigned int Plane1, unsigned int Plane2, vnl_rigid_matrix &T, bool verbose=false );
-
-        /**
-        * @brief If it exists, set T with the transformation from Plane1 to Plane2
-        * If ageT is the age of the transformation and ageU, the age of the universe
-        * ageU-ageT should be lesser or equal than ageTolerance else return false
-        * @param[in] ageTolerance in milliseconds (ms). If <0.0, equivalent to infinity
-        * @remark If ageTolerance = 0, getTrf returns true only if the age of the transformation is exactly these of the planesystem
-        */
-        ARLCORE_API bool getTrf( unsigned int Plane1, unsigned int Plane2, vnl_rigid_matrix &T, double ageTolerance, bool verbose=false );
-
-        /**
-        * @brief If it exists, set T with the transformation from Plane1 to Plane2
-        * If ageT is the age of the transformation and ageR, the age composed with date and time
-        * ageR-ageT should be lesser or equal than ageTolerance
-        * @param[in] ageTolerance in milliseconds (ms)
-        * @remark If ageTolerance = 0, getTrf returns true only if the age of the transformation is exactly (date,time)
-        */
-        ARLCORE_API bool getTrf( unsigned int Plane1, unsigned int Plane2, vnl_rigid_matrix &T, long int date, long int time, double ageTolerance=0, bool verbose=false );
-
-        //! @brief Set the transformation from Plane1 and Plane2
-        ARLCORE_API bool setTrf( unsigned int plane1, unsigned int plane2, const vnl_rigid_matrix& T );
-
-        //! @brief Set and date the transformation from Plane1 and Plane2
-        ARLCORE_API bool setTrf( unsigned int Plane1, unsigned int Plane2, const vnl_rigid_matrix& T, long int date, long int time );
-
-        //! @brief Set to identity  and date the transformation from Plane1 and Plane2
-        ARLCORE_API bool setIdentity( unsigned int Plane1, unsigned int Plane2, const long int date=0, const long int time=0 );
-
-        //! @brief Reset the transformation from Plane1 and Plane2 and its inverse
-        ARLCORE_API bool resetTrf( unsigned int Plane1, unsigned int Plane2 );
-
-        //! @brief Reset all transformation around Plane
-        ARLCORE_API bool resetTrf( unsigned int Plane );
-
-        //! @return Distance between origins of Plane1 and Plane2, if the transformation exists
-        ARLCORE_API bool distance( unsigned int Plane1, unsigned int Plane2, double &dist/*, long int &date, long int &time*/ );
-
-        //! @brief Set pt2 with the coordinates in Plane2 of pt1 set in Plane1
-        ARLCORE_API bool chgPlane( unsigned int Plane1, CSPTR( Point ) pt1, unsigned int Plane2, SPTR( Point ) pt2);
-
-        //! @brief Set pt with the origin of Plane1 in the Plane2
-        ARLCORE_API bool getOrigin( unsigned int Plane1, unsigned int Plane2, SPTR( Point ) pt);
-
-    private:
-        class Path
-        {
-        /**
-        * @class    Path
-        * @date     04/2008
-        * @brief    Chemin dans un planesystem
-        */
-        public:
-            //! @brief Constructor
-            ARLCORE_API Path( const PlaneSystem& );
-
-            //! @brief Default constructor
-            ARLCORE_API Path( const Path& );
-
-            //! @brief Destructor
-            ARLCORE_API ~Path( void );
-
-            //! @return ith plane of the path else 0
-            ARLCORE_API unsigned int operator[]( unsigned int i ) const;
-
-            //! @brief Print the path
-            ARLCORE_API void print( void ) const;
-
-            //! @brief Number of planes in the path
-            ARLCORE_API unsigned int size( void ) const;
-
-            //! @brief Weight of the path (Sum of the Transformation's weight)
-            ARLCORE_API double weight( void ) const;
-
-            //! @brief Add a new plane and return the length
-            ARLCORE_API unsigned int push_back( unsigned int plane );
-
-            //! @brief Remove last plane and return if it was possible
-            ARLCORE_API bool pop_back( void );
-
-        private:
-            const PlaneSystem& m_universe;
-            std::vector< unsigned int > m_planes;
-            std::vector< double > m_weights;
-            double m_weight;
-        };
-
-        /**
-        * @brief States for each transformation
-        * STATE_UNDEFINED   : Transformation is undefined
-        * STATE_IDENTITY    : Identity
-        * STATE_CALIBRATION : Transformation is set by a user throw setTrf() at time(0,0)
-        * STATE_SET         : Transformation is set by a user throw setTrf() at a real time
-        * STATE_COMPUTED    : Transformation is deducted by the planesystem
-        */
-        enum ARL_PLANE_STATE { STATE_UNDEFINED, STATE_IDENTITY, STATE_CALIBRATION, STATE_SET, STATE_COMPUTED, NBSTATES };
-
-        /**
-        * @brief Mark the transformation in the direction Plane1 to Plane2
-        * @remark Tags used to mark the transformations which are in a path
-        * to solve a problem of cyclic path
-        */
-        void tag( unsigned int Plane1, unsigned int Plane2 );
-
-        //! @brief Untag the transformations Plane1 to Plane2
-        void untag( unsigned int Plane1, unsigned int Plane2 );
-
-        //! @return True if the transformation at index is tagged
-        bool isTagged( unsigned int index ) const;
-
-        //! @return True if the transformation Plane1 to Plane2 is tagged
-        bool isTagged( unsigned int Plane1, unsigned int Plane2 ) const;
-
-        //! @brief Untag all transformations of the universe
-        void untagAll( void );
-
-        //! @return untagged status at the index
-        ARL_PLANE_STATE getStatus( unsigned int index ) const;
-
-        //! @return untagged status at the index
-        ARL_PLANE_STATE getStatus( unsigned int Plane1, unsigned int Plane2 ) const;
-
-        //! @return True if Plane1 & 2 exist in the universe
-        bool outOfRange( unsigned int Plane1, unsigned int Plane2 ) const;
-
-        //! @return True if Plane exists in the universe
-        bool outOfRange( unsigned int Plane ) const;
-
-        //! @return The index in the table for the transformations from Plane1 to Plane2
-        unsigned int getIndex( unsigned int Plane1, unsigned int Plane2 ) const;
-
-        //! @return The index for the inverse transformation in the table
-        unsigned int getInvIndex( unsigned int index ) const;
-
-        /**
-        * @brief Find the path between Plane1 & Plane2 : Path get the list of all intermediate planes
-        * @return True if the path is found else false
-        * @remark Only transformations with correct date are considered except if date-time==0
-        * In this case, all valid transformations are considered
-        */
-        //bool findPath( unsigned int Plane1, unsigned int Plane2, std::vector< unsigned int > &path, long int date, long int time);
-        bool findPath( unsigned int Plane1, unsigned int Plane2, Path &path, long int date, long int time);
-
-        //! @brief NoPlaneDestination with its weight (for whoIsConnected)
-        typedef std::pair<unsigned int, double> PlaneWeight;
-
-        /**
-        * @brief Find all close neighbour planes of Plane which have a valid date-time
-        * @return The number of neigbour
-        */
-        unsigned int whoIsConnected( unsigned int connectedAt, unsigned int finalDestination, std::vector<PlaneWeight> &Planes, long int date, long int time, bool SetInv=false, bool Tag=false);
-
-        /**
-        * @brief Are two planes connected to each other at a specific time ?
-        *
-        * @param[in] plane1 Origin plane
-        * @param[in] plane2 Destination plane
-        * @param[in] SetInv Compute the inverse if set
-        * @param[in] Tag Tag the path if set
-        *
-        * @return true if the process has been a success.
-        *
-        * @remark Is there a transformation between the 2 planes Plane1->Plane2 ?
-        * Return true if there is a transformation in the direction Plane2->Plane1
-        * If SetInv is true, Plane1->Plane2 is computed as the inverse of Plane2->Plane1
-        * with the same state as Plane2->Plane1
-        * If Tag is true, the path is tagged
-        */
-        bool isConnected( unsigned int Plane1, unsigned int Plane2, long int date, long int time, bool SetInv=false, bool Tag=false);
-
-        //! @brief Set the transformation at index
-        bool setTrf( unsigned int index, const vnl_rigid_matrix& T, long int date, long int time );
-
-        //! @brief Compute the transformation between the first and the last of path
-        //bool setTrf( const std::vector< unsigned int > &path );
-        bool setTrf( const Path &path );
-
-        //! @brief Reset all deduced transformations related to the transformation at the index
-        void eraseComputedTrf( unsigned int index );
-
-        //! @brief List of matrix of all transformations between all planes. The diag is not used.
-        std::vector< vnl_rigid_matrix > m_trfTable;
-
-        //! @brief List of states of the transformations. The diag is not used.
-        std::vector<ARL_PLANE_STATE> m_trfState;
-
-        //! @brief List of states of the transformations. The diag is not used.
-        std::vector<double> m_trfWeight;
-
-        //! @brief List of names of each plane
-        std::vector<std::string> m_lstName;
-
-        //! @brief Status for each plane. True, if valid, false if it's released
-        std::vector<bool> m_status;
-        std::vector<unsigned int> m_releasedPlanes;
-    };
-
-    class TransformationFilter
-    {
-    public:
-        /**
-         * @brief Constructor
-         * @param[in] duration Duration of filter in milliseconds
-         * @param[in] type Filter type
-         */
-        ARLCORE_API TransformationFilter( const PlaneSystem&, long int duration, ARLCORE_TRF_FILTER_TYPE );
-
-        //! @brief Copy constructor
-        ARLCORE_API TransformationFilter( const TransformationFilter& );
-
-        //! @brief Destructor
-        ARLCORE_API ~TransformationFilter( void );
-
-        //! @brief Add a new transformation
-        ARLCORE_API void push_back( const vnl_rigid_matrix& );
-
-        //! @return Filtered transformation
-        ARLCORE_API unsigned int get( arlCore::vnl_rigid_matrix& );
-
-    private:
-        /**
-         * @brief Delete too old transformations
-         * @param[in] all if true, test all transformations else just the last
-         */
-        void timeCleaning( bool all=false );
-
-        void clear( void );
-
-        const PlaneSystem& m_universe;
-        long int m_duration;
-        long int m_lastTime;
-        ARLCORE_TRF_FILTER_TYPE m_filterType;
-        std::vector<const vnl_rigid_matrix*> m_trfList;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_PLANE_SYSTEM_H
diff --git a/SrcLib/ARLcore/include/arlcore/Player.h b/SrcLib/ARLcore/include/arlcore/Player.h
deleted file mode 100644
index 9b59646..0000000
--- a/SrcLib/ARLcore/include/arlcore/Player.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARL_PLAYER_H
-#define _ARL_PLAYER_H
-#include <arlcore/Common.h>
-
-#include <string>
-#include <fstream>
-
-namespace arlCore
-{
-    class Player
-    {
-    /**
-     * @class   Player
-     * @date    04/2008
-     * @brief   Abstract class for Player devices
-     */
-    public:
-        //! @brief Constructor
-        ARLCORE_API Player( void );
-
-        //! @brief Destructor
-        ARLCORE_API ~Player( void );
-
-        //! @return true if the player is ready
-        ARLCORE_API bool readyPlayer( void );
-
-        //! @return Number of recording that are read 
-        ARLCORE_API unsigned int initPlayer( const std::string &fileName );
-
-        //! @brief Return the complete path and the name of the header file 
-        ARLCORE_API bool getPlayerFilename( std::string &fileName );
-
-        //! @brief If true, do it again from the file beginning, once the end has been reached
-        ARLCORE_API bool setLoop( bool=true );
-
-        //! @return Return true if the file end has been reached
-        ARLCORE_API bool getEOF( void ) const;
-
-    protected:
-        virtual bool readHeader( const std::string &fileName )=0;
-        virtual unsigned int playNext( void )=0;
-
-        /**
-         * @brief A appeler En fin de fichier ou en cas d'anomalie
-         * @return Nombre d'enregistrements lus
-         */
-        ARLCORE_API unsigned int playEnd( void );
-        ARLCORE_API unsigned int setEOF( unsigned int n );
-        ARLCORE_API bool goAfterHeader( void );
-
-        std::string m_playerDirectory;
-        std::string m_playerFullName;
-        std::fstream m_playerHandle;
-
-    private:
-        long int m_afterHeader;
-        bool m_isReady;
-        bool m_eof;
-        bool m_loop;
-    };
-} // namespace ARLCORE
-#endif // _ARL_PLAYER_H
diff --git a/SrcLib/ARLcore/include/arlcore/Point.h b/SrcLib/ARLcore/include/arlcore/Point.h
deleted file mode 100644
index 40e9611..0000000
--- a/SrcLib/ARLcore/include/arlcore/Point.h
+++ /dev/null
@@ -1,364 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_POINT_H
-#define _ARLCORE_POINT_H
-
-#include <boost/make_shared.hpp>
-
-#include <fwCore/macros.hpp>
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <vnl/vnl_vector.h>
-#include <vnl/vnl_vector_fixed.h>
-#include <vnl/vnl_matrix.h>
-
-#include <fwTools/Object.hpp>
-
-#include <arlcore/Common.h>
-#include <arlcore/Object.h>
-#include <arlcore/Colour.h>
-#include <arlcore/vnl_covariance_matrix.h>
-
-namespace arlCore
-{
-    enum ARLCORE_POINT_SAVE_TYPE { ARLCORE_POINT_SAVE_FULL, ARLCORE_POINT_SAVE_LIGHT, ARLCORE_POINT_SAVE_GNUPLOT, ARLCORE_POINT_SAVE_VTK };
-
-    enum ARLCORE_SHAPE { ARLCORE_SHAPE_UNKNOWN, ARLCORE_SHAPE_CUBE, ARLCORE_SHAPE_SPHERE, ARLCORE_SHAPE_SPHERESURFACE, ARLCORE_SHAPE_SPHERE_CAP, ARLCORE_SHAPE_DISC,
-         ARLCORE_SHAPE_PLAINSQUARE, ARLCORE_SHAPE_CIRCLE, ARLCORE_SHAPE_EDGESQUARE, ARLCORE_SHAPE_SOLIDANGLE, ARLCORE_SHAPE_SOLIDANGLE_SURFACE, ARLCORE_SHAPE_CHESSBOARD, ARLCORE_SHAPE_NBSHAPES };
-    static std::string ARLCORE_SHAPE_NAMES[ARLCORE_SHAPE_NBSHAPES]={ "ARLCORE_SHAPE_UNKNOWN", "ARLCORE_SHAPE_CUBE", "ARLCORE_SHAPE_SPHERE", "ARLCORE_SHAPE_SPHERESURFACE", "ARLCORE_SHAPE_SPHERE_CAP", "ARLCORE_SHAPE_DISC", "ARLCORE_SHAPE_PLAINSQUARE", "ARLCORE_SHAPE_CIRCLE",
-         "ARLCORE_SHAPE_EDGESQUARE", "ARLCORE_SHAPE_SOLIDANGLE", "ARLCORE_SHAPE_SOLIDANGLE_SURFACE",", ARLCORE_SHAPE_CHESSBOARD"};
-
-    class Point : public  Object
-    {
-    /**
-     * @class   Point
-     * @date    2007
-     * @brief   Point with a dimension that can be specified by the user. This class allows
-     * to attribute several important properties to a point. Generally, these properties
-     * are used in image processing algorithms:
-     * - coordinates : corresponds to the N coordinates of the point
-     * - type : corresponds to what the point physically represents in the world. This can be
-     * a radio-opaque markers, a point detected from a structured light pattern, a point
-     * from an ARToolkit pattern...
-     * - confidence : in the case you are detecting points in an image and you want to associate
-     * a confidence value about its detection
-     * - status : gives an information on how the point life when the software is running
-     * - covariance matrix : you can associate a covariance matrix with to the point. This is
-     * very useful for registration alogrithm that takes into account the uncertainty on the point
-     * detection/reconstruction
-     * - visibility : when you are tracking a chessboard for example, this boolean can help you
-     * to indicate which point of the chessboard are visible or not. Then, you can select
-     * very easily the visible points only in your algorithms
-     */
-    public:
-
-
-        fwCoreClassDefinitionsWithNFactoriesMacro( (Point)(::fwTools::Object),
-                                                   ((::boost::make_shared< Point > ,() ))
-                                                   ((PointFactory ,((Point::csptr)) ))
-                                                   ((PointFactory ,((int)) ))
-                                                   ((PointFactory ,((double)) ((double)) ))
-                                                   ((PointFactory ,((double)) ((double)) ((double)) ))
-                                                   );
-
-        ARLCORE_API static Point::sptr PointFactory( Point::csptr p );
-        ARLCORE_API static Point::sptr PointFactory( int );
-        ARLCORE_API static Point::sptr PointFactory( double x, double y );
-        ARLCORE_API static Point::sptr PointFactory( double x, double y, double z );
-
-
-        /******* VAG transpose from Object ****/
-        //! @return Is the object OK ? VAG transpose from inheritance of Object
-        ARLCORE_API bool isOK( void ) const;
-        ARLCORE_API bool setOK( bool b=true );
-
-        //! @brief Setup 'updateIndex' if an extern modification occurs
-        ARLCORE_API void update( void );
-
-        //! @brief Type of point (Origin)
-        enum ARLCORE_POINT_TYPE { ARLCORE_POINT_TYPE_UNKNOWN, ARLCORE_POINT_TYPE_ARTK, ARLCORE_POINT_TYPE_MRO, ARLCORE_POINT_TYPE_CHESS, ARLCORE_POINT_TYPE_ROI, ARLCORE_POINT_TYPE_CLOUD, ARLCORE_POINT_TYPE_TIP, ARLCORE_POINT_TYPE_TOP, ARLCORE_POINT_TYPE_LINE, ARLCORE_POINT_TYPE_SIFT, ARLCORE_POINT_NBTYPES };
-
-        //! @brief Status of the point (Evolution)
-        enum ARLCORE_POINT_STATUS { ARLCORE_POINT_STATUS_UNKNOWN, ARLCORE_POINT_STATUS_DETECTED, ARLCORE_POINT_STATUS_SUBPIXEL, ARLCORE_POINT_STATUS_ESTIMATE, ARLCORE_POINT_STATUS_CLOUD, ARLCORE_POINT_REPROJECTION, ARLCORE_POINT_NBSTATUS };
-
-        //! @brief Constructor
-        ARLCORE_API Point( unsigned int dimension=3, ARLCORE_POINT_TYPE type=ARLCORE_POINT_TYPE_UNKNOWN, long int date=0, long int time=0 );
-
-        //! @brief 2D point constructor
-        ARLCORE_API Point( double x, double y, ARLCORE_POINT_TYPE type=ARLCORE_POINT_TYPE_UNKNOWN, long int date=0, long int time=0 );
-
-        //! @brief 3D point constructor
-        ARLCORE_API Point( double x, double y, double z, ARLCORE_POINT_TYPE type=ARLCORE_POINT_TYPE_UNKNOWN, long int date=0, long int time=0 );
-
-        //! @brief Copy constructor
-        ARLCORE_API Point( CSPTR( Point )  );
-
-        /**
-        * @brief Initialization : Set default value
-        * To change the dimension, you have to reinitialize the point with the new dimension
-        */
-        ARLCORE_API void init( unsigned int dim );
-
-        //! @brief Affectation
-        ARLCORE_API Point& operator=(CSPTR( Point ) );
-
-        //! @brief Copy p in the current point
-        ARLCORE_API void copy( CSPTR( Point )  p );
-
-        //! @brief Destructor
-        ARLCORE_API virtual ~Point( void );
-
-        //! @return Description of the current point
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @brief Save the current point
-        ARLCORE_API bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @brief Add the current point into an PointList open file stream
-        ARLCORE_API bool save( std::fstream &f, unsigned no=0, ARLCORE_POINT_SAVE_TYPE=ARLCORE_POINT_SAVE_FULL ) const;
-
-        //! @brief Add the current point into a SmartPointList open file stream
-        ARLCORE_API bool save( std::fstream &f, unsigned int cam,  SPTR(void) videoTag , int fringe ) const;
-
-        //! @brief Load a point
-        ARLCORE_API bool load( const std::string &fileName );
-
-        //! @brief Load a point from an open file stream
-        ARLCORE_API bool load( std::ifstream &f, int &no, unsigned int dim=0 );
-
-        //! @brief Load a point from an open SmartPointList file stream
-        ARLCORE_API bool load( std::ifstream &f, unsigned int &cam,  SPTR(void) tag, int &fringe );
-
-        //! @return Is the point visible?
-        ARLCORE_API bool isVisible() const;
-
-        //! @return Is the point visible?
-        ARLCORE_API bool getVisible() const;
-
-        //! @brief Set the visibility of the point
-        ARLCORE_API bool setVisible( bool );
-
-        //! @return Status of the point for internal or special usage
-        ARLCORE_API ARLCORE_POINT_STATUS getStatus() const;
-
-        //! @brief Set the status of the point
-        ARLCORE_API bool setStatus(ARLCORE_POINT_STATUS);
-
-        //! @brief Set the colour of the point
-        ARLCORE_API bool setColour(unsigned int r, unsigned int g, unsigned int b);
-
-        //! @brief Set the colour of the point
-        ARLCORE_API bool setColour(const Colour &c);
-
-        //! @return The colour of the point
-        ARLCORE_API bool getColour(unsigned int &r, unsigned int &g, unsigned int &b) const;
-
-        //! @return The colour of the point
-        ARLCORE_API bool getColour(const Colour &c) const;
-
-        //! @return The colour of the point
-        ARLCORE_API const Colour& getColour( void ) const;
-
-        //! @return Is the point colored ?
-        ARLCORE_API bool isColored() const;
-
-        // Accesses coordinates of the point
-        //! @return Value of the ième coordinate
-        ARLCORE_API double get( unsigned int i ) const;
-
-        //! @brief Set the ième coordinate with v
-        ARLCORE_API bool set( unsigned int i, double v );
-
-        //! @brief Set the current point with p if it has the same dimension
-        ARLCORE_API bool set( CSPTR( Point )  p );
-
-        //! @brief Fill all coordinates with v
-        ARLCORE_API void fill( double v );
-
-        /**
-        * @brief TODO Modifie la valeur du point en l'équipondérant avec p et les précédentes pondérations
-        * Pondérer n points à partir d'un point nul revient à calculer le point moyen
-        * @remark Utiliser set pour réinitialiser une nouvelle valeur non pondérée
-        */
-        ARLCORE_API bool pond( CSPTR( Point )  p );
-
-        /**
-        * @return Reference on statistic vector for each coordinates when using pond function
-        * @remark Use computeStat on each returned vector to extract statistic informations
-        */
-        ARLCORE_API const std::vector< vnl_vector_fixed<double,5> > &getStatistic( void );
-
-        //! @brief Ajoute les coordonnées du point p au point courant
-
-        ARLCORE_API bool add( CSPTR( Point )  p );
-
-        //! @return Value of the i th coordinate [0,size-1]
-        ARLCORE_API double operator[]( unsigned int i ) const;
-
-        //! @return 1st coordinate
-        ARLCORE_API double x( void ) const;
-
-        //! @return 2nd coordinate (0 if point dimension is below 2)
-        ARLCORE_API double y( void ) const;
-
-        //! @return 3rd coordinate (0 if point dimension is below 3)
-        ARLCORE_API double z( void ) const;
-
-        //! @brief Modify the 1st coordinate
-        ARLCORE_API bool x( double );
-
-        //! @brief Modify the 2nd coordinate
-        ARLCORE_API bool y( double );
-
-        //! @brief Modify the 3rd coordinate
-        ARLCORE_API bool z( double );
-
-        //! @return Return coordinates under vnl format
-        ARLCORE_API vnl_vector<double> getCoordinates() const;
-
-        //! @return Return homogeneous coordinates under vnl format
-        ARLCORE_API vnl_vector<double> getHCoordinates() const;
-
-        ARLCORE_API vnl_covariance_matrix& getCovMatrix();
-        ARLCORE_API const vnl_covariance_matrix& getCovMatrix() const;
-
-        //! @return Dimension of the point
-        ARLCORE_API unsigned int size( void ) const;
-
-        //! @return Return point type
-        ARLCORE_API ARLCORE_POINT_TYPE getType( void ) const;
-
-        //! @return Affecte le type du point
-        ARLCORE_API bool setType( ARLCORE_POINT_TYPE );
-
-        //! @return Return scalar associated to the point
-        ARLCORE_API double getScalar( void ) const;
-
-        //! @brief Modify scalar associated to the point
-        ARLCORE_API void setScalar( double );
-
-        //! @brief Normalize the point as a vector
-        ARLCORE_API void normalize( void );
-
-        //! @return Distance between *this and p if the dimension are the same
-        ARLCORE_API double distance( CSPTR( Point )  ) const;
-
-        //! @return Squared distance between *this and p if the dimension are the same
-        ARLCORE_API double distance2( CSPTR( Point )  ) const;
-
-        //! @brief Multiply each point coordinate with a scalar
-        ARLCORE_API bool mult( double scalaire );
-
-        //! @brief Compute the cross product of two 3D vectors and put the result in *this : *this = vec1 x vec2
-        ARLCORE_API bool cross_3D( CSPTR( Point )  vec1, CSPTR( Point )  vec2 );
-
-        //! @brief Dot product of 2 vectors : *this = vec1^T x vec2. *this is of dimension 1 ! (covariance matrix is computed as well)
-        ARLCORE_API bool dotProduct( CSPTR( Point )  vec1, CSPTR( Point )  vec2 );
-
-        //! @brief Point 1D = var1/var2 with computation of the covariance matrix
-        ARLCORE_API bool divide( CSPTR( Point )  var1, CSPTR( Point )  var2 );
-
-        //! @brief *this =  multiplication of a scalar (1D) with a vector vec (covariance matrix is computed as well)
-        ARLCORE_API bool multiply( CSPTR( Point )  scalar, CSPTR( Point )  vec );
-
-        // Stochastic and noised point
-        //! @brief Add a gaussian random noise with a std deviation (std) on the corrdinate 'index' of Point
-        ARLCORE_API bool addGaussianNoise( const unsigned int index, const double std );
-
-        //! @brief Add a gaussian random noise with a std deviation (std) on all coordinates
-        ARLCORE_API bool addGaussianNoise( const double std );
-
-        /**
-        * @brief Add a uniform random noise with a std deviation (std) on the corrdinate 'index' of Point
-        * The random variable is taken in the interval [-radius ; +radius]
-        */
-        ARLCORE_API void addUniformNoise( const unsigned int index, const double radius );
-
-        /**
-        * @brief Random creation of a point in a specified shape which is centred on *this
-        * For squared shape, the faces of the cube or the sides of the square are parallel to the axis
-        * Most of the function work whatever dimension the point has
-        * Planar shape have last cordinates to 0 (if dimension is above 3, then the point belongs to an hyperplan)
-        * @param size = Diameter of the sphere/circle or  Side of the cube/square or max value of the solid angle
-        * Below are indicated the possible shape:
-        * ARLCORE_SHAPE_CUBE
-        * ARLCORE_SHAPE_SPHERE
-        * ARLCORE_SHAPE_DISC
-        * ARLCORE_SHAPE_PLAINSQUARE
-        * ARLCORE_SHAPE_CIRCLE
-        * ARLCORE_SHAPE_EDGESQUARE
-        * ARLCORE_SHAPE_SOLIDANGLE : a random point in a solid angle oriented along the positiv Z axis
-        * According to the spherical coordinate system it chooses a point with r<size, 0< theta<2Pi,  0<phi<phi_max where
-        * phi_max = acos(1-omega/2/Pi). Here omega is the solid angle given in parameter of the function.
-        * ARLCORE_SHAPE_SOLIDANGLE_SURFACE : same as before but the point is randomly chosen on the surface cone
-        * corresponding to the solid angle
-        * ARLCORE_SHAPE_SPHERESURFACE : a random point on the surface of a sphere of radius size
-        * ARLCORE_SHAPE_SPHERE_CAP : a solid angle is defined along the positiv Z axis (the parameter
-        * of the solid angle is "angle"). A random point is chosen on the sphere cap of the solid angle
-        */
-        ARLCORE_API bool shapeRandom( ARLCORE_SHAPE, const double size, const double angle=0 );
-
-        ARLCORE_API void setError( double error );
-        ARLCORE_API double getError( void ) const;
-
-    private:
-        //! @brief Add the current point into an open file stream (PointList or SmartPointList)
-        ARLCORE_API bool save( std::fstream &f, bool ctf, unsigned int cam, SPTR(void) tag, int fringe, unsigned no, ARLCORE_POINT_SAVE_TYPE type ) const;
-
-        //! @brief Load a point from an open file stream (PointList or SmartPointList)
-        ARLCORE_API bool load( std::ifstream &f, unsigned int &cam, SPTR(void) tag, int &fringe, int &no, unsigned int dim=0 );
-
-        //! @brief Initialization to zero of the uncertainty matrix
-        bool initUncertainty( void );
-
-        ARLCORE_POINT_TYPE m_type;
-        double m_confidence;
-        bool m_visibility;
-        ARLCORE_POINT_STATUS m_status;
-        double m_scalar;
-
-        bool m_isColored;
-        Colour m_colour;
-
-        vnl_vector<double> m_coordinates;
-
-        double m_ponderation;
-        std::vector< vnl_vector_fixed<double,5> > m_stat;
-
-        // Erreur à la création du point
-        // 2D : Différence subpixel / 1ere estimation
-        // 3D : reconstruction
-        double m_error;
-
-        // Symmetric square matrix : anisotropic uncertainties
-        vnl_covariance_matrix m_covMatrix;
-
-        bool m_ok;//VAG
-    };
-
-    //! @return Distance between pt1 and pt2
-    ARLCORE_API double distance( CSPTR( Point ) pt1, CSPTR( Point ) pt2 );
-
-    /**
-    * @brief Si l est trié par y croissant, retourne l'indice du point de l dont l'ordonnée est la plus proche de y
-    * @param[in] indexInit Indice d'initialisation ou -1 s'il est inconnu
-    */
-    ARLCORE_API unsigned int closestY ( const std::vector< arlCore::Point::csptr >& l, double y, unsigned int index1=0, unsigned int index2=0, int indexInit=-1 );
-
-    /**
-    * @return Surface formée par les points.
-    * Très mal approximée par la somme des distances de tous les points
-    */
-    ARLCORE_API double surface( const std::vector< arlCore::Point::csptr >& );
-
-    // TODO Suppress PointsCont and replace them with PointsList
-//  typedef std::vector<Point> PointsCont;
-//  ARLCORE_API unsigned int load( PointsCont &list, const char *fileName, Point::ARLCORE_POINT_TYPE type = Point::ARLCORE_POINT_TYPE_UNKNOWN, long int date=0 );
-
-} // namespace arlCore
-#endif // _ARLCORE_POINT_H
diff --git a/SrcLib/ARLcore/include/arlcore/PointsList.h b/SrcLib/ARLcore/include/arlcore/PointsList.h
deleted file mode 100644
index 7535b0d..0000000
--- a/SrcLib/ARLcore/include/arlcore/PointsList.h
+++ /dev/null
@@ -1,343 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_POINTLIST_H
-#define _ARLCORE_POINTLIST_H
-
-#include <boost/make_shared.hpp>
-
-#include <arlcore/Common.h>
-
-#include <vector>
-
-#include <vgl/vgl_plane_3d.h>
-#include <vgl/vgl_homg_plane_3d.h>
-
-#ifdef ANN
-#include <ANN/ANN.h>
-#endif // ANN
-
-//#include <arlcore/Mutex.h>
-#include <arlcore/Point.h>
-#include <arlcore/MatrixR.h>
-
-#include <fwCore/macros.hpp>
-#include <fwTools/Object.hpp>
-
-
-namespace arlCore
-{
-    enum ARLCORE_SCE { ARLCORE_SCE_UNKNOWN, ARLCORE_SCE_ANALYTIC, ARLCORE_SCE_GEOMETRIC, ARLCORE_SCE_OPTIMIZATION, ARLCORE_SCE_4POINTS, ARLCORE_SCE_NBMETHOD };
-    static std::string ARLCORE_SCE_NAMES[ARLCORE_SCE_NBMETHOD]={ "ARLCORE_SCE_UNKNOWN", "ARLCORE_SCE_ANALYTIC", "ARLCORE_SCE_GEOMETRIC", "ARLCORE_SCE_OPTIMIZATION", "ARLCORE_SCE_4POINTS"};
-
-    //! Point container
-    /*!
-     * Points that are added to the contained must have the same dimension (by default 3)
-     *
-     */
-    class PointList : public  Object
-    {
-    /**
-     * @class   PointList
-     * @date    2007
-     * @brief   Point list with same dimensions. Added point are copied in the container.
-     * Point destruction are managed by PointList. This class has been created to manipulate
-     * easily a point list. Point list are used in most of registration algorithm (ISPPC, EPPC
-     * ICP, ARTAG).  You can find also some useful functions that provide you for example:
-     * - the best plane that fits your data
-     * - the best line that fits your data
-     * - decimation of the point cloud
-     * - a point cloud randomly chosen in a specific shape
-     * - if the points have been acquired on a surface that is a sphere, a function estimate
-     * the center of this sphere
-     * - other nice function...
-     */
-    public:
-
-
-        fwCoreClassDefinitionsWithNFactoriesMacro( (PointList)(::fwTools::Object),
-                                                   ((::boost::make_shared< PointList > ,() ))
-                                                   ((PointListFactory ,((int)) ))
-                                                   ((PointListFactory ,(( const std::vector< Point::csptr >&)) ))
-                                                 );
-        fwCoreAllowSharedFromThis();
-
-        ARLCORE_API static PointList::sptr PointListFactory( int );
-        ARLCORE_API static PointList::sptr PointListFactory( const std::vector< Point::csptr >& );
-
-        //! @brief Constructor : An empty list of points with dimension dim
-        ARLCORE_API PointList( unsigned int dim=3, const std::string &name="" );
-
-        //! @brief Copy constructor
-        ARLCORE_API PointList( const PointList& );
-
-        //! @brief Constructor with the list of points
-        ARLCORE_API PointList( const std::vector< Point::csptr >& list );
-
-        //! @brief Constructor : Fill the list of elements of 'l' which scalar is include in [scalarMin , scalarMax]
-        ARLCORE_API PointList( const std::vector< Point::csptr >& l, double scalarMin, double scalarMax );
-
-        //! @brief Affectation
-        ARLCORE_API PointList& operator=( const PointList& );
-
-        //! @brief Copy
-        ARLCORE_API void copy( const PointList& );
-
-        //! @brief Destructor
-        ARLCORE_API ~PointList( void );
-
-        ARLCORE_API std::string getString( void ) const;
-
-        /**
-         * @brief Save a file of points (arlPointList, gnuplot, .vtk)
-         * @remark See arlCore::ARLCORE_POINT_SAVE_TYPE
-         * @param[in] type Format of file
-         * @param[in] justVisible If true save just visible points else all of them
-         * @param[in] overwrite If true, overwrite file
-         */
-        ARLCORE_API bool save( const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type=ARLCORE_POINT_SAVE_FULL, bool justVisible=false, bool overwrite=true ) const;
-
-        /**
-         * @brief Load a file of points (arlPointList, .trian, .raw)
-         * @param[in] filename
-         * @param[in] step If .trian or .raw, reechantillonne les triangles avec un pas en mm
-         * @remark If step<=0, load only points of the triangle
-         */
-        ARLCORE_API bool load( const std::string &fileName, double step=0 );
-
-        //! @brief Fill the pointlist with origin of each transformation
-        ARLCORE_API unsigned int fill( const std::vector< arlCore::vnl_rigid_matrix >& );
-
-        //! @return Reference on the intern list of points
-        ARLCORE_API const std::vector< Point::sptr >& getList( void ) const;
-
-        //! @return A COPY PERF ?? VAG the intern list of points
-        ARLCORE_API const std::vector< Point::csptr > getListCopy( void ) const;
-
-        //! @return Reference on the ith point of the list
-        ARLCORE_API Point::sptr operator[]( unsigned int i );
-
-        //! @return Constant reference on the ith point of the list
-        ARLCORE_API Point::csptr operator[]( unsigned int i ) const;
-
-        //! @return Reference on the ith point of the list
-        ARLCORE_API Point::sptr get( unsigned int i );
-
-        //! @return Constant reference on the ith point of the list
-        ARLCORE_API Point::csptr get( unsigned int i ) const;
-
-        //! @return Reference on the last point of the list
-        ARLCORE_API Point::sptr back( void );
-
-        //! @return Constant reference on the last point of the list
-        ARLCORE_API Point::csptr back( void ) const;
-
-        //! @brief Push all points of l at the end of the current list
-        ARLCORE_API unsigned int push_back( CSPTR( PointList ) l );
-
-        //! @brief Push a point at the end of the list
-        ARLCORE_API bool push_back( CSPTR( Point) );
-
-        //! @brief Push the (x,y) 2D point at the end of the list
-        ARLCORE_API bool push_back( double x, double y );
-
-        //! @brief Push the (x,y,z) 3D point at the end of the list
-        ARLCORE_API bool push_back( double x, double y, double z );
-
-        //! @brief Delete the last point of the list
-        ARLCORE_API void pop_back( void );
-
-        //! @brief Clear the list and delete included points
-        ARLCORE_API void clear( void );
-
-        //! @brief Add a gaussian noise on all points of the list
-        ARLCORE_API unsigned int addGaussianNoise( double standardDeviation );
-
-        //! @return Dimension of the points of the list
-        ARLCORE_API unsigned int getDimension( void ) const;
-
-        /**
-         * @brief Set a new dimension of points if the list is empty
-         * @return False if the list is not empty
-         */
-        ARLCORE_API bool setDimension( unsigned int );
-
-        //! @return Number of points in the list
-        ARLCORE_API unsigned int size( void ) const;
-
-        //! @return Number of visible points in the list
-        ARLCORE_API unsigned int visibleSize( void ) const;
-
-#ifdef ANN
-        //! @brief Generate an ANNpointArray from the point list without the points 0
-        ARLCORE_API unsigned int generateANN( ANNpointArray& ) const;
-
-        // TODO : Use ANN kd_tree with ANNpointArray generated or updated
-#endif // ANN
-
-        /**
-         * @brief : Compute the bounding box of the point cloud, the gravity center and the min & max scalar
-         * boundingBox1 : Left inferior corner : Each minimum coordinates
-         * boundingBox2 : Right superior corner : Each maximum coordinates
-         * std : standard deviation of the point cloud
-         */
-        ARLCORE_API bool properties( SPTR(Point) gravity, SPTR(Point) boundingBox1, SPTR(Point) boundingBox2, double &minscalar, double &maxscalar, double  &std ) const;
-
-        /**
-         * @brief Find in the list the nearest point of pt
-         * pos : Position in the list of the found point
-         * distance : Distance between pt and the found point
-         * @return False if the list is empty
-         */
-        ARLCORE_API unsigned int findNearPoint( CSPTR(Point) pt, std::vector< unsigned int > &pos, double &distance, double scalar=-1.0 ) const;
-
-        /**
-         * @brief Return a point list randomly chosen in a specified shape
-         * param[in] nb : number of points you want
-         * param[in] type : shape in which the points will be chosen (see ARLCORE_SHAPE definition in Point.h)
-         * param[in] centre : Center of the shape
-         * param[in] size : Size of the shape
-         * param[in] angle : Angle of the shape or 0
-         * @return Number of generated points
-         * @remark See Point::shapeRandom for more details
-         */
-        ARLCORE_API unsigned int shapeRandom( unsigned int nb, ARLCORE_SHAPE type, CSPTR(Point) centre, const double size, const double angle=0 );
-
-        /**
-         * @brief The function randomly choose N points within the point list A and put them in *this
-         * param[in] A List you want to decimate
-         * param[in] n Number of point you want to keep
-         * @return Number of point in *this
-         */
-        ARLCORE_API unsigned int randomList( CSPTR( PointList ) A, unsigned int n );
-
-        /**
-         * @brief Compute the plane that best fits the points which m_scalar == scalar, if scalar = O,
-         * all the points are used. The method is based on an optimization. This should be improved
-         * using an SVD method (TODO ).
-         * Warning : Run only with 3D points
-         * @param[in] outliers = n = [0,1] Elimine n pourcent des points les plus loin, sauf au moins 3
-         * @param[out] rms Average distance between points and the computed plane
-         * @param[out] min Minimum distance between points and the computed plane
-         * @param[out] max Maximum distance between points and the computed plane
-         * @return Number of points used
-         */
-        ARLCORE_API unsigned int plane( vgl_plane_3d< double >& plane, double &rms, double &min, double &max, double scalar=0, double outliers=0.0 ) const;
-        ARLCORE_API unsigned int plane( vgl_homg_plane_3d< double >& plane, double &rms, double &min, double &max, double scalar=0, double outliers=0.0 ) const;
-
-        /**
-         * @brief From a cloud of 3D points that should be on a sphere cap
-         * this function estimate the sphere center
-         * @param[out] centerEstimation Result of the sphere center estimation
-         * @param[in] type 3 different methods : one is analytic, one is geometric and the last by optimization
-         * more explanations on the methods are provided in PointList.cpp
-         * @todo Compute the covariance on the estimation
-         */
-        ARLCORE_API bool sphereCenterEstimation( SPTR(Point) centerEstimation, double &radius, ARLCORE_SCE type, std::vector<double> &optimiser_parameter, std::vector<double> &log ) const;
-
-        /**
-         * @brief This method is used to estimate the center of a spheetre from several points on
-         * its surface. The method computes the circumcircle of a triangle and return
-         * 1) the center of this circle
-         * 2) the plane that contains this center
-         * The center of the sphere lies on the line that passes through the center of the circle
-         * and that is orthogonal to the plane
-         */
-        ARLCORE_API bool triangleCircumcircleOrthoLine( SPTR(Point)  centerEstimation, vgl_plane_3d< double > &trian_plane) const;
-
-        /**
-         * @brief This method computes from 2 lines (represented by the first (P1 P2) and second point pair (P3 P4) )
-         * the intersection. If the 2 lines does not intersect, it provides the closest point
-         * of the two lines. The method is taken from Paul Bourke on internet.
-         * This function computes the shortest line segment (Pa and Pb) between the two lines.
-         * This line segment being perpendicular to the two lines, this allows us to write
-         * two equations for the dot product as:
-         *  (Pa - Pb) dot (P2 - P1) = 0     and        (Pa - Pb) dot (P4 - P3) = 0
-         *
-         *  Since Pa lies on P1P2 it can be written Pa = P1 + mua (P2 - P1)
-         *  and Pb lies on P3P4 it can also be written : Pb = P3 + mub (P4 - P3)
-         *  where mua and mua are unknown coefficient that we want to solve
-         *
-         *  Expanding then the equation of the lines
-         *  ( P1 - P3 + mua (P2 - P1) - mub (P4 - P3) ) dot (P2 - P1) = 0
-         *  ( P1 - P3 + mua (P2 - P1) - mub (P4 - P3) ) dot (P4 - P3) = 0
-         *
-         *  Expanding these in terms of the coordinates (x,y,z) gives the following result:
-         *  d_1321 + mua d_2121 - mub d_4321 = 0
-         *  d_1343 + mua d_4321 - mub d_4343 = 0
-         *  where d_mnop = (xm - xn)(xo - xp) + (ym - yn)(yo - yp) + (zm - zn)(zo - zp)
-         *  Finally, solving for mua gives
-         *  mua = ( d_1343 d_4321 - d_1321 d_4343 ) / ( d_2121 d_4343 - d_4321 d_4321 )
-         *  and backsubstituting gives mub
-         *  mub = ( d_1343 + mua d_4321 ) / d_4343
-         *
-         *  log contains the length of the segment PaPb
-         *
-         */
-        ARLCORE_API bool twoLinesClosestPoint( SPTR(Point)  closestPoint, double &log) const;
-
-        //! @brief Compute the main direction of a point cloud with a least square fitting
-        ARLCORE_API bool directionEstimation( SPTR(Point) vector, double &RMS  );
-
-        /**
-         * @brief : Compute the gravity center of the point cloud and the covariance
-         * matrix of the points
-         * @param[out] pt : pt is modified and contains the information of gravity center and covariance
-         * @return Number of point that are used.
-         */
-        ARLCORE_API unsigned int statistic( Point::sptr  pt ) const;
-
-        /**
-         * @brief Visualize the pointlist with gnuplot
-         */
-        ARLCORE_API bool plot( const std::string &options="" ) const;
-        ARLCORE_API bool SLplot( void ) const;
-
-        /**
-         * @brief Apply to the point cloud a specific temporal behavior :
-         * points are collapsing toward the gravity center with gravity g
-         */
-        ARLCORE_API bool collapse( double g=1.0 );
-
-        /**
-         * @brief Calibration of a tag from several poses
-         * @param[in] tag
-         * @param[in] delta Variation on the criterion (Pourcentage)
-         * @param[out] xLength Length of the x-axis side
-         * @param[out] yLength Length of the y-axis side
-         * @param[in] nbMaxIterations
-         * @return Number of iterations
-         */
-        ARLCORE_API unsigned int tagCalibration( const std::vector<arlCore::PointList::sptr > &tag, double delta, unsigned int nbMaxIterations, double &xLength, double &yLength );
-
-    private:
-        unsigned int m_dimension;
-        std::vector< Point::sptr > m_pointList;
-#ifdef ANN
-        // TODO : If m_enableANNArray update m_ANNPointArray with each coordinate data_block()
-        std::vector< double* > m_ANNPointArray;
-        bool m_enableANNArray;
-#endif // ANN
-    };
-
-    ARLCORE_API bool save( const std::vector< Point::csptr > &pl, const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type=ARLCORE_POINT_SAVE_FULL, bool justVisible=false, bool overwrite=true );
-    ARLCORE_API bool save( const std::vector< Point::sptr > &pl, const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type=ARLCORE_POINT_SAVE_FULL, bool justVisible=false, bool overwrite=true );
-
-//  ARLCORE_API bool save( const std::vector<PointList>& lists, const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type=ARLCORE_POINT_SAVE_FULL, bool overwrite=true );
-
-    /**
-     * @brief : Compute the distance betwween the points p1 and p2
-     * p1 & p2 must have same dimension
-     * If p1 & p2 do not have same dimension, the smallest list size will be used
-     */
-    ARLCORE_API bool distance( CSPTR( PointList ) p1, CSPTR( PointList ) p2, std::vector<double> &distances );
-    ARLCORE_API unsigned int findNearPoint( const std::vector< Point::csptr >&, CSPTR(Point) pt, std::vector< unsigned int > &pos, double &distance, double scalar=-1.0);
-    //ARLCORE_API unsigned int findNearPoint( const std::vector< Point::sptr>&, CSPTR(Point) pt, std::vector< unsigned int > &pos, double &distance, double scalar=-1.0);
-    ARLCORE_API unsigned int statistic( const std::vector< Point::csptr>&, unsigned int dimension, Point::sptr  pt );
-    ARLCORE_API unsigned int statistic( const std::vector< Point::sptr>&, unsigned int dimension, Point::sptr  pt );
-    ARLCORE_API unsigned int matching3D3D( CSPTR( PointList ) a, CSPTR( PointList ) b, double gaussianError, double decimage, SPTR( PointList ) Va, SPTR( PointList ) Vb );
-} // namespace arlCore
-#endif // _ARLCORE_POINTLIST_H
diff --git a/SrcLib/ARLcore/include/arlcore/Reconst3D.h b/SrcLib/ARLcore/include/arlcore/Reconst3D.h
deleted file mode 100644
index 789007f..0000000
--- a/SrcLib/ARLcore/include/arlcore/Reconst3D.h
+++ /dev/null
@@ -1,256 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_RECONST3D_H
-#define _ARLCORE_RECONST3D_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <string>
-
-#include "vnl/vnl_matrix_fixed.h"
-#include "vnl/vnl_vector_fixed.h"
-
-#include <arlcore/MatrixR.h>
-#include <arlcore/Camera.h>
-#include <arlcore/PointsList.h>
-
-namespace arlCore
-{
-    /**
-    * @brief 3D triangulation methods that are available
-    */
-    enum ARLCORE_RECONSTRUCTION3D { ARLCORE_R3D_UNKNOWN,
-        ARLCORE_R3D_HORAUD_APPROX, ARLCORE_R3D_HORAUD_PERFECT,
-        ARLCORE_R3D_TWO_LINES_APPROX, ARLCORE_R3D_TWO_LINES_PERFECT,
-        ARLCORE_R3D_MULTI_LINES_APPROX, ARLCORE_R3D_MULTI_LINES_PERFECT,
-        ARLCORE_R3D_REPROJECTION_OPTIMIZATION, ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY,
-        ARLCORE_R3D_NBTYPE };
-
-    static std::string ARLCORE_RECONSTRUCTION3D_NAMES[ARLCORE_R3D_NBTYPE]={ "ARLCORE_R3D_UNKNOWN",
-        "ARLCORE_R3D_HORAUD_APPROX", "ARLCORE_R3D_HORAUD_PERFECT",
-        "ARLCORE_R3D_TWO_LINES_APPROX", "ARLCORE_R3D_TWO_LINES_PERFECT",
-        "ARLCORE_R3D_MULTI_LINES_APPROX", "ARLCORE_R3D_MULTI_LINES_PERFECT",
-        "ARLCORE_R3D_REPROJECTION_OPTIMIZATION", "ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY"};
-
-    /**
-    * @brief Compute the 3D position in the camera frame of a point M detected by N cameras
-    * The fonction uses 2 cameras or more. It depends on the method you choose.
-    * Put pixelFrame to true if the 2D points are given in the pixel frame (pixel coordinate)
-    * Put pixelFrame to false if the 2D points are given in the focal plane (3D real coordinate
-    * that are generally computed by multiplying the pixel coordinates with the inverse
-    * of the camera intrinsic matrix).
-    *
-    * @param[in] points2D : arlCore::Point list that corresponds to the image coordinates
-    * detected in each camera of the point we want to triangulate
-    * @param[in] point3D : triangulation result
-    * @param[in] camsList : camera list that is used for the reconstruction. The camera SHOULD
-    * be jointly calibrated. If not you will get absurd result. If a camera have not been
-    * intrinsically calibrated, you will get also absurd result. Consequently you should
-    * test your camera before using them (using method Camera::isIntrinsicCalibrated() )
-    *
-    * m_1,....,m_i,....,m_N are the points detected in the ith camera image (pixel coordinates)
-    * Using the distortion parameters of the camera we can compute the coordinates in pixel of
-    * the point M reprojections if there is no distortion. In that case, calling
-    * mc_1,....,mc_i,....,mc_N  the distortion-free point coordinates (in pixel), it is
-    * possible to accurately estimate the M position by computing the intersection of the back projected
-    * lines C_im_i (where C_i is the optical center of the ith camera).
-    *
-    * Almost all our algorithms ends by APPROX or PERFECT. APPROX means that the distortion
-    * correction has been performed using a simple and quick iterative algorithm (that
-    * genrally works when distortion is not too important). PERFECT corresponds to a more
-    * specialized algorithm (coming from VNL) that finds the roots of a polynome. The latter
-    * method is much slower (50 times and more...)
-    *
-    * ARLCORE_R3D_HORAUD : compute a triangulation from an analytic analysis that
-    * takes into account 2 cameras only (see R. Horaud.
-    * Vision par ordinateur: outils fondamentaux. Ed. Hermes. 1995)
-    * ARLCORE_R3D_TWO_LINES : compute a triangulation from the back projection of
-    * the lines C_1m_1 and C_2m_2 (the triangulated point is the point at an equal
-    * distance from C_1m_1 and C_2m_2).
-    * ARLCORE_R3D_MULTI_LINES : compute a triangulation from the back projection of
-    * all the lines C_im_i. The triangulated point P is the point that optimize
-    * the distance to all lines
-    * ARLCORE_R3D_REPROJECTION_OPTIMIZATION : compute a triangulation from the reprojection
-    * error in each image. The triangulated point P is the point that optimize
-    * the following criterion sum_i || P_i(P) - m_i||^2 where P_i is the projective
-    * function of the ith camera.
-    * ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY : same as before but the
-    * criterion takes into account the uncertainty on the m_i. We optimize:
-    * sum_i transpose(P_i(P) - m_i) * cov_m_i^(-1) * (P_i(P) - m_i) where
-    * cov_m_i is the covariance matrix of m_i
-    *
-    * @param[out] log Provide different values that depends on the chosen method :
-    *
-    * ARLCORE_R3D_TWO_LINES_APPROX and ARLCORE_R3D_TWO_LINES_PERFECT:
-    * log[0] : distance between the two reprojection lines (in mm)
-    *
-    * ARLCORE_R3D_MULTI_LINES_APPROX et ARLCORE_R3D_MULTI_LINES_PERFECT
-    * log[0] = average distance moyenne between the reconstructed point and all reprojected lines (in mm)
-    * log[1] = average distance moyenne between the initial point (before optimization) and all reprojected lines (in mm)
-    *
-    * ARLCORE_R3D_REPROJECTION_OPTIMIZATION and ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY :
-    * log[0] = average distance between the reconstructed point that is reprojected in the image and its detection in all images (pix)
-    * log[1] = average distance between the initial point that is reprojected in the image and its detection in all images (pix)
-    */
-    ARLCORE_API bool reconst3D( const std::vector<Point::csptr> &points2D, const std::vector< const Camera*> &camsList, SPTR( Point ) point3D,
-        ARLCORE_RECONSTRUCTION3D, unsigned int &plane, std::vector<double> &log, double errorMax=-1,  bool propagateCov=false, const bool pixelFrame=true);
-
-    ARLCORE_API bool reconst3D( const std::vector<Point::csptr> &list2D, const std::vector<Camera> &camsList, SPTR( Point ) point3D,
-        ARLCORE_RECONSTRUCTION3D, unsigned int &plane, std::vector<double> &log, double errorMax=-1,  bool propagateCov=false, const bool pixelFrame=true);
-    /**
-    * @brief This function computes the rigid transformation from the 3D model frame
-    * to the camera frame. In fact, the function firstly compute an homography that
-    * fits the N points of the 3D model to the N corresponding points detected in the
-    * video image. Since we compute an homography, this means that the 3D model has to
-    * be (almost) a plane and has to contain at least 4 points.
-    * Of course, 3D and 2D points must be perfectly matched:
-    * no NULL pointer and vector of same size
-    * @param[in] Camera : camera that looks to the planar object
-    * @param[in] points2D : list of 2D coordinates of the 3D model points detected in the video image
-    * @param[in] T : rigid transformation that corresponds to the passage matrix from the 3D model frame
-    * to the camera frame - (T * P_i = M_i where P_i are coordinates in the 3D model frame
-    * and M_i in the camera frame)
-    * @param[in] optimiser_parameters :  optimiser_parameters[0] and optimiser_parameters[1] must
-    * be defined before using the function. If optimiser_parameters[0] = 1, then, log[0] contains
-    * the average reprojection error and log[1] the norm of the first column of H (which should be equal to 1 !!).
-    * To apply the prenormalisation (which ensure a good calculation of the svd)
-    * optimiserParameters[1] must be set to 1.
-    *
-    */
-    ARLCORE_API bool planarHomographyRegistration_3D_2D( const Camera &, const std::vector< Point::csptr > &points2D, const std::vector< Point::csptr > &model3D,
-         vnl_rigid_matrix &T, const std::vector<double> &optimiser_parameters, std::vector<double> &log, bool verbose=false);
-
-//  ARLCORE_API bool planarHomographyRegistration_3D_2D( const Camera &, const std::vector< Point::sptr > &points2D, CSPTR( PointList ) model3D,
-//       vnl_rigid_matrix &T, const std::vector<double> &optimiser_parameters, std::vector<double> &log, bool verbose=false);
-
-    /**
-    * @brief From a general point of view, this function provides "the best" homography between
-    * two point sets in 2D. More specifically, it is used for camera calibration
-    * in order to find an estimation of the intrinsic parameters using several poses
-    * of a planar chessboard.
-    * The function finds H so that :
-    *       [u_i]       [X_i]
-    * m_i = [v_i] = H x [Y_i]
-    *       [ 1 ]       [ 1 ]
-    *
-    * where:
-    * @param[in] points2D : list of 2D coordinates of the point list 1
-    * @param[in] model3D  : list of 2D coordinates of the point list 1 (it can be also the list
-    * of 3D coordinates of the 3D model points from the chessboard with z=0)
-    * @param[in] H : homography 3x3 matrix
-    * @param[in] optimiser_parameters :  optimiser_parameters[0] and optimiser_parameters[1] must
-    * be defined before using the function. If optimiser_parameters[0] = 1, then, log[0] contains
-    * the average reprojection error
-    * To apply the prenormalisation (which ensure a good calculation of the svd)
-    * optimiserParameters[1] must be set to 1.
-    * Of course, the 2 point list must be perfectly matched:
-    * no NULL pointer and vector of same size
-    *
-    */
-    ARLCORE_API bool planarHomographyUnknownIntrinsic( const std::vector<Point::sptr> &points2D, const std::vector< Point::sptr > &model3D, vnl_matrix_fixed<double,3,3> &H, const std::vector<double> &optimiserParameters, std::vector<double> &log, bool verbose);
-
-    ARLCORE_API bool planarHomographyUnknownIntrinsic( CSPTR( PointList ) points2D, CSPTR( PointList ) model3D, vnl_matrix_fixed<double,3,3> &H, const std::vector<double> &optimiserParameters, std::vector<double> &log, bool verbose);
-
-    /**
-     * @brief 3D/2D registration method
-     * more informations about the theory can be found in
-     */
-    enum ARLCORE_PROJECTIVE_REGISTRATION { ARLCORE_PR_UNKNOWN,
-        ARLCORE_PR_ISPPC, ARLCORE_PR_ISPPC_LM, ARLCORE_PR_ISPPC_CG,
-        ARLCORE_PR_ISPPC_ANISOTROP, ARLCORE_PR_ISPPC_ANISOTROP_LM,
-        ARLCORE_PR_OSPPC, ARLCORE_PR_OSPPC_LM, ARLCORE_PR_OSPPC_CG,
-        ARLCORE_PR_EPPC, ARLCORE_PR_EPPC_LM,  ARLCORE_PR_EPPC_CG,
-        ARLCORE_PR_NBTYPES };
-    static std::string ARLCORE_PROJECTIVE_REGISTRATION_NAMES[ARLCORE_PR_NBTYPES]={ "ARLCORE_PR_UNKNOWN",
-        "ARLCORE_PR_ISPPC", "ARLCORE_PR_ISPPC_LM", "ARLCORE_PR_ISPPC_CG",
-        "ARLCORE_PR_ISPPC_ANISOTROP", "ARLCORE_PR_ISPPC_ANISOTROP_LM",
-        "ARLCORE_PR_OSPPC", "ARLCORE_PR_OSPPC_LM", "ARLCORE_PR_OSPPC_CG",
-        "ARLCORE_PR_EPPC", "ARLCORE_PR_EPPC_LM", "ARLCORE_PR_EPPC_CG" };
-
-    /**
-     * @brief
-     * Rigid registration of a 3D point set so that its reprojection on one image fits a 2D point set
-     *
-     * @param[in] Camera : camera that looks to the planar object.
-     *
-     * @param[in] model3D  : list of 3D coordinates of the 3D model
-     * @param[in] points2D : list of 2D reprojection of the 3D points on the video image
-     * @param[out] T : rigid transformation that contains the solution after computation
-     *
-     * TODO This function works if the 3D model is planar (because of the initialization) !
-     * TODO We have to retrieve this constraint
-     * TODO This function needs optimiserParameters and log
-     */
-    ARLCORE_API bool monoViewPointRegistration3D2D( const arlCore::Camera & ,
-        const std::vector<Point::csptr> &points2D, const std::vector<Point::sptr> &model3D,
-        arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION method,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log, bool verbose );
-
-    ARLCORE_API bool monoViewPointRegistration3D2D( const arlCore::Camera & ,
-        const std::vector<Point::csptr> &points2D, CSPTR( PointList ) model3D,
-        arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION method,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log, bool verbose );
-
-/**
- * @brief
- * Rigid registration of a 3D point set so that its reprojection on several images fits 2D point sets
- *
- * This function compute the rigid transformation that registers a 3D rigid object (defined
- * in its own frame)  in the world frame of several jointly calibrated camera (we call here
- * world frame the frame in which the camera were calibrated). Practically, this frame
- * corresponds to the position of a chessboard that has been used during the simultaneous
- * calibration of cameras.
- *
- * param[in] : cameras = camera vector used for the registration (it works also with one camera only). The camera SHOULD
- * be jointly calibrated. If not you will get absurd result. If a camera have not been
- * intrinsically calibrated, you will get also absurd result. Consequently you should
- * test your camera before using them (using method Camera::isIntrinsicCalibrated() )
- * param[in] : points2D = vector of vector of 2D points [j] detected in the camera [i]
- * param[in] : T = initialisation of the iterative registration
- * param[in] : methode = choice of the optimization criterion and method (more informations on each
- * criterion can be found in Optimization.h and in the following paper : S.Nicolau et.al. An Accuracy
- * Certified Augmented Reality System for Therapy Guidance. In Proc. of the 8th European Conference
- * on Computer Vision (ECCV 04), Part III, volume LNCS 3023, Prague, pages 79-91, May 2004)
- * param[in] : optimiserParameters = parameters for optimization function used (TODO still not used)
- *
- * param[out] : log
- *      EPPC:
- *           log[0] = criterion value at the end of optimization divided by the point number
- *           log[1] = criterion value at the beginning of optimization divided by the point number
- *           log[2] = part of the criterion value that corresponds to the 2D contribution (TODO not divided by the point number)
- *           log[3] = part of the criterion value that corresponds to the 3D contribution (TODO not divided by the point number)
- *           log[4] = stop criterion of the EPPC, corresponds to the distance between the 2 last transformations
- *      ISPPC & OSPPC:
- *           log[0] = criterion value at the end of optimization divided by the point number
- *           log[1] = criterion value at the beginning of optimization divided by the point number
- *
- * More information are given in Reconst3D.cpp
- *
- */
-
-    ARLCORE_API bool multiViewPointRegistration3D2D ( const std::vector< const Camera* >& ,
-        const std::vector< std::vector<Point::csptr> >& points2D, const std::vector<Point::csptr> &model3D,
-        arlCore::vnl_rigid_matrix &T, ARLCORE_PROJECTIVE_REGISTRATION,
-        const std::vector<double> &optimiserParameters, std::vector<double> &log, bool verbose);
-
-    ARLCORE_API bool multiViewPointRegistration3D2D ( const std::vector< Camera >& ,
-        const std::vector< std::vector<Point::csptr> >& points2D, const std::vector<Point::csptr> &model3D,
-        arlCore::vnl_rigid_matrix &T, ARLCORE_PROJECTIVE_REGISTRATION,
-        const std::vector<double> &optimiserParameters, std::vector<double> &log, bool verbose);
-
-    ARLCORE_API bool multiViewPointRegistration3D2D ( const std::vector< const Camera* >& ,
-        const std::vector< std::vector<Point::csptr> >& points2D, CSPTR( PointList ) model3D,
-        arlCore::vnl_rigid_matrix &T, ARLCORE_PROJECTIVE_REGISTRATION,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log, bool verbose);
-
-    ARLCORE_API bool multiViewPointRegistration3D2D ( const std::vector< Camera >& ,
-        const std::vector< std::vector<Point::csptr> >& points2D, CSPTR( PointList ) model3D,
-        arlCore::vnl_rigid_matrix &T, ARLCORE_PROJECTIVE_REGISTRATION,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log, bool verbose);
-
-} // namespace arlCore
-#endif // _ARLCORE_RECONST3D_H
diff --git a/SrcLib/ARLcore/include/arlcore/Recorder.h b/SrcLib/ARLcore/include/arlcore/Recorder.h
deleted file mode 100644
index 2560693..0000000
--- a/SrcLib/ARLcore/include/arlcore/Recorder.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARL_RECORDER_H
-#define _ARL_RECORDER_H
-#include <arlcore/Common.h>
-
-#include <string>
-#include <fstream>
-
-namespace arlCore
-{
-    class Recorder
-    {
-    /**
-     * @class   Recorder
-     * @date    04/2008
-     * @brief   Abstract class for recorder devices
-     */
-    public:
-        //! @brief Constructor
-        ARLCORE_API Recorder( void );
-
-        //! @brief Destructor
-        ARLCORE_API ~Recorder( void );
-
-        //! @brief Get the full pathname and header's filename
-        ARLCORE_API bool getRecorderFilename( std::string &fileName );
-
-        //! @brief Get the full pathname and header's filename
-        ARLCORE_API bool getRecorderDirectory( std::string &directory );
-
-        /**
-        * @brief Demarre l'enregistrement des images avant ou apres le traitement
-        * Si nbSnapshots n�gatif, l'enregistrement dure ind�finiment
-        * Si nbSnapshots positif, il est r�alis� n prises de vue, puis stopRecorder est activ�
-        * Si nbSnapshots nul, l'enregistrement s'arr�te
-        * Par d�faut, les donnees brutes sont enregistr�es pour une dur�e ind�termin�e
-        */
-        ARLCORE_API bool startRecorder( long int nbSnapshots=-1, bool afterRender=false );
-
-        /**
-        * @brief Arrete l'enregistrement, mais peut-�tre poursuivi avec un nouveau startRecorder
-        * Il sera poursuivi dans le meme repertoire, si un initRecorder n'est pas lanc� entre temps
-        */
-        ARLCORE_API bool stopRecorder( void );
-
-        //! @return True if it's recording
-        ARLCORE_API bool isRecording( void );
-
-        //! @brief Close recorder. You should call initRecorder to start again
-        ARLCORE_API void closeRecorder( void );
-
-    protected:
-        std::fstream m_recorderHandle;
-
-        std::string m_recorderDirectory;
-        std::string m_fullRecorderDirectory;
-        std::string m_recorderFullName;
-
-        bool m_recorderFlag;
-        bool m_recorderAfterRender;
-        long int m_nbSnapshots;
-    };
-} // namespace ARLCORE
-#endif // _ARL_RECORDER_H
diff --git a/SrcLib/ARLcore/include/arlcore/Scene.h b/SrcLib/ARLcore/include/arlcore/Scene.h
deleted file mode 100644
index 8a7f45d..0000000
--- a/SrcLib/ARLcore/include/arlcore/Scene.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_SCENE_H
-#define _ARLCORE_SCENE_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <map>
-
-#include <arlcore/PlaneSystem.h>
-#include <arlcore/Camera.h>
-#include <arlcore/CameraList.h>
-#include <arlcore/Point.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/Tags.h>
-
-namespace arlCore
-{
-    class SmartPointList;
-    class Scene
-    {
-    /**
-     * @class   Scene
-     * @date    2007
-     * @brief   Virtual scene generator
-     * A scene is a plane system with cameras and tags wich contain lists of point
-     * After setting cameras and tags in the scene, we can simulate the detection of the tag points
-     * on the image produced by the cameras.
-     * We can also apply a dynamic behavior to the points, as for example collapsing
-     *
-     * This class contains basic methods to create a virtual world. Practically, you have
-     * to define a new class (see in Scenes.h) that derives from Scene, and to write
-     * the specific methods you need for the virtual world you create for your experiment.
-     */
-    public:
-
-
-
-        //! @brief Constructor of an empty scene in the planesystem
-        ARLCORE_API Scene( PlaneSystem& );
-
-        //! @brief Destructor
-        ARLCORE_API ~Scene( void );
-
-        /**
-         * @brief This function add in the scene a Tag (3D object composed of a 3D point list) that is
-         * randomly generated from the parameter ARLCORE_SHAPE, centre and size (see the function
-         * PointList::shapeRandom() in PointList.h)
-         */
-        ARLCORE_API SPTR(Tag) addTag(unsigned int nbPoints, ARLCORE_SHAPE shapeType, CSPTR( Point ) centre, double size);
-
-        /**
-         * @brief
-         * Once a scene is created, this function creates "nbCams" camera in the world. The camera
-         * optical centers are randomly created in a sphere of radius "sphereRadius" and of center "centre".
-         * All the cameras are looking toward the Point "centre". Their orientation is chosen randomly as well.
-         * In order to avoid camera creation too close to "centre". Each camera is moved away from "centre"
-         * along the axis ("centre" camera_optical_center) with a magnitude of distMin. The intrinsic parameters
-         * of each camera are randomly chosen using "intrinsicParam" and "intrinsicRange":
-         * fx = intrinsicParam[0] + UniformNoise(intrinsic_range[0])
-         * fy = intrinsicParam[1] + UniformNoise(intrinsic_range[1])
-         * cx = intrinsicParam[2] + UniformNoise(intrinsic_range[2])
-         * cy = intrinsicParam[3] + UniformNoise(intrinsic_range[3])
-         * k1 = intrinsicParam[4] + UniformNoise(intrinsic_range[4])
-         * k2 = intrinsicParam[5] + UniformNoise(intrinsic_range[5])
-         * k3 = intrinsicParam[6] + UniformNoise(intrinsic_range[6])
-         * k4 = intrinsicParam[7] + UniformNoise(intrinsic_range[7])
-         */
-        ARLCORE_API virtual bool addCameras(unsigned int nbCams, CSPTR( Point ) centre, double sphereRadius, double distMin,
-            const std::vector<double> &intrinsicParam, const std::vector<double> &intrinsicRange);
-
-        /**
-         * @brief
-         * Once a scene is created, this function creates "nbCams" camera in the world. The camera
-         * optical centers are randomly created in a solid angle of angle "angleMin" and
-         * of radius "sphereRadius" and of center "centre".
-         * All the cameras are looking toward the Point "centre". Their orientation is chosen randomly as well.
-         * In order to avoid camera creation too close to "centre". Each camera is moved away from "centre"
-         * along the axis ("centre" camera_optical_center) with a magnitude of distMin. The intrinsic parameters
-         * of each camera are randomly chosen using "intrinsicParam" and "intrinsicRange":
-         * fx = intrinsicParam[0] + UniformNoise(intrinsic_range[0])
-         * fy = intrinsicParam[1] + UniformNoise(intrinsic_range[1])
-         * cx = intrinsicParam[2] + UniformNoise(intrinsic_range[2])
-         * cy = intrinsicParam[3] + UniformNoise(intrinsic_range[3])
-         * k1 = intrinsicParam[4] + UniformNoise(intrinsic_range[4])
-         * k2 = intrinsicParam[5] + UniformNoise(intrinsic_range[5])
-         * k3 = intrinsicParam[6] + UniformNoise(intrinsic_range[6])
-         * k4 = intrinsicParam[7] + UniformNoise(intrinsic_range[7])
-         */
-        ARLCORE_API virtual bool addCameras(unsigned int nbCams, CSPTR( Point ) centre, double sphereRadius, double distMin,
-            const std::vector<double> &intrinsicParam, const std::vector<double> &intrinsicRange, double angleMin);
-
-        //! @brief Visualise la scene avec gnuplot
-        ARLCORE_API bool plot( void ) const;
-
-        //! @brief Get the plane system id
-        ARLCORE_API PlaneSystem& getPlaneSystem( void );
-
-        //! @brief Get the number of camera in the scene
-        ARLCORE_API unsigned int getNbCameras( void ) const;
-
-        //! @brief Get a vector that contains pointer on each camera in the scene
-        ARLCORE_API const arlCore::CameraList& getCameras( void ) const;
-
-        //! @brief Get Tags in the scene
-        ARLCORE_API Tags& getTags( void );
-
-        /**
-         * @brief
-         * This function is fondamental, it provides in a SmartPointList "spl" the point 2D coordinates
-         * that corresponds to the projection of the points belonging to the Tag "tagNo" in the
-         * video image of the camera "cam".
-         *
-         * In case you want to add some noise to the coordinates you get (for evaluation purpose...),
-         * you can add it using the variable "gaussianNoise". It will add zero mean gaussian noise
-         * with std dev "gaussianNoise" on each point coordinate.
-         *
-         */
-        ARLCORE_API unsigned int detection( unsigned int cam, unsigned int tagNo, SPTR( SmartPointList ) spl, double gaussianNoise=0 );
-
-    protected:
-        ARLCORE_API Scene( PlaneSystem&, Tags::sptr );
-        ARLCORE_API virtual bool dynamicBehavior( unsigned int step );
-        ARLCORE_API virtual unsigned int detectionBehavior( unsigned int cam, SPTR( SmartPointList ) , std::vector< CSPTR(Tag) > &tags, std::map< CSPTR(Tag), unsigned int >& allTags );
-
-        Tags::sptr m_tags;
-
-    private:
-        arlCore::CameraList m_cameras;
-        PlaneSystem &m_universe;
-    };
-} // namespace ArlCore
-#endif // _ARLCORE_SCENE_H
diff --git a/SrcLib/ARLcore/include/arlcore/Scenes.h b/SrcLib/ARLcore/include/arlcore/Scenes.h
deleted file mode 100644
index a9e5c64..0000000
--- a/SrcLib/ARLcore/include/arlcore/Scenes.h
+++ /dev/null
@@ -1,191 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_SCENES_H
-#define _ARLCORE_SCENES_H
-#include <arlcore/Common.h>
-
-#include <arlcore/Scene.h>
-
-namespace arlCore
-{
-    /**
-     * @date    2007
-     * @brief   Scenes virtuelles specifiques
-     */
-
-    /**
-     * @brief : Scene for several unit test
-     * This scene is used for :
-     * arlCore::testRegistration3D3D
-     * arlCore::testProjectiveRegistration
-     * arlCore::testHomographyRegistration
-     * arlCore::testReconstructionPolyscopic
-     * arlCore::testEpipolarMatching
-     * arlCore::testReconstructionPolyscopicUncertainty
-     *
-     * It creates a scene with nbCamerasMax camera focusing at a point m_Centre randomly chosen in a cube of 300 mm edge
-     * (size_rand_mire = 300). The intrinsic camera parameter are randomly chosen as well and are defined in the Function.
-     * The number of camera cannot be below 2. The camera position are randomly chosen in a cube of 500 mm edge and
-     * the minimal distance between the camera and the focused point is 1000 (distance_mire_cam_min).
-     * The number of points "nbPoints2D" is randomly chosen so that it is comprised between 4 and nbPoints2DMax+4. This
-     * is necessary for most of the unit test. For some test (arlCore::testReconstructionPolyscopicUncertainty),
-     * we choose to create only 1 point to avoid correlation within the statistical tests. This can be done by
-     * setting nbPoints2DMax to 1.
-     *
-     * Two tags are generated: the first one contains "nbPoints2D" points randomly generated in a sphere
-     * centered in m_Centre and of radius "worldPointsSize". The second tag (used essentially for homography
-     * evaluation) is a flat cloud of "nbPoints2D" points generated in a square centered in (0,0,0). The edge
-     * of the square has a dimension equal to "worldPointsSize".
-     */
-    class SceneUnitTest : public Scene
-    {
-    public:
-        ARLCORE_API SceneUnitTest( PlaneSystem&, double worldPointsSize=200, unsigned int nbPoints2DMax=40 );
-        ARLCORE_API ~SceneUnitTest( void );
-        ARLCORE_API Point::csptr getCentre( void ) const;
-
-    private:
-
-        SceneUnitTest(); // purposely not implemented
-        Point::sptr m_Centre;
-    };
-
-    /**
-     * @brief : Scene for several unit test
-     * This scene is used for :
-     * arlCore::testInitIntrinsicCalibration
-     * arlCore::testIntrinsicCalibration
-     * arlCore::testInitExtrinsicCalibration
-     * arlCore::testExtrinsicCalibration
-     *
-     * @param[in] = PlaneSystem
-     * @param[in] = k_range (std dev on the distortion values that are randomly chosen)
-     * @param[in] = nbCameras_MAX
-     * @param[in] = nbPoses_MAX
-     *
-     * This scene generates one or several cameras which look(s) at a calibration object in several
-     * positions. It is used to validate the calibration algorithm implemented from Z. Zhang paper's
-     * (Flexible Camera Calibration by Viewing a Plane from Unknown Orientations in ICCV 99) for one
-     * camera and the calibration algorithm described in the PhD thesis of S. Nicolau (see Optimization.h
-     * to find the calibration criterion).
-     *
-     * The camera is randomly positioned in a sphere of radius "SphereRadius", looking at the point
-     * "Origin", with a minimal distance to "Origin" of "DistanceMin". The point "Origin" is randomly chosen
-     * in a cube centered in (0,0,0) withan edge of 100. The intrinsic parameters are chosen as follows:
-     * fx = 1000 + GaussianNoise(mean = 0, std dev = 200)
-     * fy = 1000 + GaussianNoise(mean = 0, std dev = 200)
-     * cx = 400 + GaussianNoise(mean = 0, std dev = 100)
-     * cy = 200 + GaussianNoise(mean = 0, std dev = 50)
-     * k1 = 0 + GaussianNoise(mean = 0, std dev = k_range[0])
-     * k2 = 0 + GaussianNoise(mean = 0, std dev = k_range[1])
-     * k3 = 0 + GaussianNoise(mean = 0, std dev = k_range[2])
-     * k4 = 0 + GaussianNoise(mean = 0, std dev = k_range[3])
-     *
-     * The number of pose is randomly chosen between 4 and nbPoses_MAX + 4
-     * The number of camera is randomly chosen between 1 and nbCameras_MAX +1 (if nbCameras_MAX = 1, then
-     * only one camera is created). Consequently, you have to avoid negative value for nbCameras_MAX (it
-     * is not tested).
-     *
-     * For each pose i the calibration object is different and the number of point is equal to
-     * ChessNbPoints[i]). The calibration object is flat (Z=0), and its points are randomly chosen in
-     * a square centered in (0,0,0) with an edge of "ChessSize"=120. Each pose corresponds to a Tag
-     * that is created in the scene.
-     */
-    class SceneUnitTestInitIntrinsicCalib : public Scene
-    {
-    public:
-        ARLCORE_API SceneUnitTestInitIntrinsicCalib( PlaneSystem& , std::vector<double> k_range, const unsigned int nbCameras_MAX, const unsigned int nbPoses_MAX);
-        ARLCORE_API ~SceneUnitTestInitIntrinsicCalib( void );
-        ARLCORE_API Point::csptr getCentre( void ) const;
-        ARLCORE_API const unsigned int getNbPoses( void ) const;
-        ARLCORE_API const unsigned int getChessNbPoints( unsigned int ) const;
-
-    private:
-        Point::sptr m_Centre;
-        unsigned int m_nbPoses;
-        std::vector<unsigned int> m_ChessNbPoints;
-    };
-
-
-    /**
-     * @brief : Scene for several unit test
-     * This scene is used to compare the performance of the following registration criterion :
-     * EPPC
-     * Isotropic and anisotropic ISPPC
-     * OSPPC
-     * Isotropic and anisotropic 3D/3D registration
-     *
-     * @param[in] = PlaneSystem
-     * @param[in] = parameters (allows to specify parameters of the generated scene)
-     * @param[in] = staticStatus (allows to specify which parameters of the scene is chosen once for all)
-     * @param[in] = noiseValues
-     * @param[out] = RSB_3D
-     * @param[out] = RSB_2D
-     *
-     * A set of cameras is created and they look at m_Centre (which is randomly chosen in an cube of
-     * size_rand_point_de_mire_camera and centered in (0,0,0) ). Their intrinsic parameters can
-     * be configured statically in the .cpp file using int_param and int_range.
-     * A 3D object is created in the world and a set of control point as well (2 Tags are
-     * then generated, the parameters of which are defined in the param[in] parameters).
-     *
-     * -The object to register contains parameters[0] points, but if staticStatus[0] == 0 the number
-     * of points is randomly chosen between 4 and parameters[0].
-     * -The scene contains parameters[1] camera, but if staticStatus[1] == 0 the number
-     * of points is randomly chosen between 2 and parameters[1].
-     * -The solid angle in which the camera are positioned is parameters[2] steradian (value should
-     * be comprised between 0 and 720), but if staticStatus[2] == 0, it is equal to 720.
-     * -The size of the shape in which the object points are randomly chosen is equal to
-     * parameters[3], but if staticStatus[3] == 0 it is randomly chosen between 20 and parameters[3].
-     * -The shape of the object is given by parameters[4] (see Point.h to learn the available shape and
-     * their associated number), but if staticStatus[4] == 0 the shape is randomly chosen between
-     * those available in [1...parameters[4] ]
-     * -The number of control points is given in parameters[5] points, but if staticStatus[0] == 0 the number
-     * of points is randomly chosen between 1 and parameters[5].
-     * -The size of the shape in which the control points are randomly chosen is equal to
-     * parameters[6], but if staticStatus[6] == 0 it is randomly chosen between 1 and parameters[6].
-     * -The distance between the registration and the control point is equal to
-     * parameters[7], but if staticStatus[7] == 0 it is randomly chosen between 50 and parameters[7].
-     * -The shape of the control points is given by parameters[8], but if staticStatus[8] == 0
-     * the shape is randomly chosen between those available in [1...parameters[8] ]
-     *
-     * noiseValues correspond to the std dev of the gaussian error that will be added:
-     * -to the x,y,z coordinates of the object
-     * -to the x,y coordinates of their reprojection in the video images
-     * RSB_3D and RSB_2D are the signal/noise ratio of the 3D object generated and of the
-     * 2D points projected in the video images. These values can only be computed after the
-     * scene generation and knowing the std dev that has corrupted the 3D and 2D data.
-     */
-    class SceneCriterionComparison : public Scene
-    {
-    public:
-        ARLCORE_API SceneCriterionComparison( PlaneSystem& , std::vector<double> parameters, std::vector<double> staticStatus,
-         std::vector<double> noiseValues, double RSB_3D, double RSB_2D  );
-        ARLCORE_API ~SceneCriterionComparison( void );
-        ARLCORE_API Point::csptr getCentre( void ) const;
-
-    private:
-        Point::sptr m_Centre;
-        Point::sptr m_ControlCentre;
-    };
-
-    /**
-     * @brief : Scene for Solve AXXB UnitTests
-     * 2 cameras with angle =
-     * Square of ...mm with 150 points at the distance of 1000 mm from cameras
-     */
-    class SceneAXXB : public Scene
-    {
-    public:
-        ARLCORE_API SceneAXXB( PlaneSystem&, unsigned int NbCameras=2 );
-        ARLCORE_API ~SceneAXXB( void );
-        ARLCORE_API Point::csptr getCentre( void ) const;
-
-    private:
-        Point::sptr m_Centre;
-    };
-} // namespace ArlCore
-#endif // _ARLCORE_SCENES_H
diff --git a/SrcLib/ARLcore/include/arlcore/SmartPointsList.h b/SrcLib/ARLcore/include/arlcore/SmartPointsList.h
deleted file mode 100644
index d1f3e3d..0000000
--- a/SrcLib/ARLcore/include/arlcore/SmartPointsList.h
+++ /dev/null
@@ -1,221 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_SMARTPOINTLIST_H
-#define _ARLCORE_SMARTPOINTLIST_H
-
-#include <boost/make_shared.hpp>
-
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <map>
-
-#include <arlcore/Point.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/Camera.h>
-
-namespace arlCore
-{
-    /**
-     * @date    2007
-     * @brief
-     *
-     * In a video image you may extract information of different nature.
-     * The purpose of this class is to contain the 2D coordinates of points detected/extracted
-     * from all video images and to associate each point to their origin: a point can belong
-     * to a point set representing an optical marker, a structured light fringe...
-     * In this class, a point set representing an object is called videoTag.
-     *
-     * When you are tracking several videoTag in a scene, you may want to get all the points
-     * of a particular videoTag in the camera number i. This class allows you to get efficiently
-     * this information. You can also ask for the reprojection in all cameras of a
-     * specific 3D point, or the reprojection of all videoTag in one (or all) camera...
-     *
-     * Briefly, this class provides efficient methods to get 2D points with respect to
-     * a videoTag, a camera, a 3D point, a fringe.
-     *
-     * Note that when you use structured light, a videoTag will contain the fringe number
-     * information as well. This means that you can ask the point list of a specific fringe
-     * only.
-     *
-     * French comments:
-     * Liste de points 2D ordonnés par camera, videoTag et numéro de franges
-     * Cette classe permet de stocker des points 2D associés à une camera et un videoTag
-     * Dans le cas de VideoTag de lumière structurée, le point est également associé à un no de frange
-     * SmartPointList permet d'extraire efficacement des listes de points selon différents filtres
-     * et ordonnancements.
-     * Elle est notamment utilisée pour stocker les points détectés dans les images video
-     */
-    class SmartPointList : public fwTools::Object
-    {
-    public:
-
-        fwCoreClassDefinitionsWithFactoryMacro( (SmartPointList)(::fwTools::Object),
-                                                (()),
-                                                ::boost::make_shared< SmartPointList >) ;
-        //! @brief Default constructor of an empty list
-        ARLCORE_API SmartPointList( void );
-
-        //! @brief Copy constructor
-        ARLCORE_API SmartPointList( CSPTR( SmartPointList ) );
-
-        //! @brief Affectation
-        ARLCORE_API SmartPointList& operator=( CSPTR( SmartPointList ) );
-
-        //! @brief Copy of smartpointlist in the current list
-        ARLCORE_API void copy( CSPTR( SmartPointList ) spl );
-
-        //! @brief Destructor of the list and all points
-        ARLCORE_API virtual ~SmartPointList( void );
-
-        //! @return Provide the coordinates of each point for each camera
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @brief Used by the developer only. Check that the object is not corrupted by point of bad dimension
-        ARLCORE_API bool integrity( void ) const;
-
-        //! @brief Save the smartpointlist in a file
-        ARLCORE_API bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        //! @brief Load a smartpointlist from a file
-        ARLCORE_API bool load( const std::string &fileName );
-
-        /**
-         * @brief Add a point in the list, tagged with a cam number, videoTag pointer and number of fringe
-         * VideoTag pointer and fringe number are optional
-         * @return Point's pointer in the SmartPointList
-         */
-        ARLCORE_API Point::csptr push_back( Point::csptr  pt, unsigned int cam,  SPTR(void) videoTag=  SPTR(void)(), int fringe=0 );
-
-        /**
-         * @brief Add a pointlist, tagged with a cam number, videoTag pointer and number of fringe
-         * VideoTag pointer and fringe number are optional
-         */
-        ARLCORE_API unsigned int push_back( const std::vector< arlCore::Point::csptr >&, unsigned int cam, SPTR(void) videoTag=  SPTR(void)(), int fringe=0 );
-
-        /**
-         * @brief Add a point in the list, tagged with a cam number, videoTag pointer and number of fringe
-         * VideoTag pointer and fringe number are optional
-         */
-        ARLCORE_API bool addPoint( Point::csptr , unsigned int cam, SPTR(void) videoTag , unsigned int tagNo );
-
-        /**
-         * @return Reference to a list of points tagged with a cam number, videoTag pointer and number of fringe
-         * VideoTag pointer and fringe number are optional
-         */
-        ARLCORE_API const std::vector< Point::csptr >& getList( unsigned int cam, SPTR(void) videoTag=  SPTR(void)() , int fringe=0 ) const;
-
-        /**
-         * @brief : If radius<0, find in the SmartPointList for the camera 'cam', the nearest point of (x,y)
-         * If radius>=0, find all points inside a circle centred in (x,y)
-         * @param found = References to points in the defined area
-         * @param distance = Distance to the nearest point
-         * @return Number of found points
-         * This function does not optimize the research method. Its complexity follows the number of point.
-         */
-        ARLCORE_API unsigned int findNearPoint(double x, double y, unsigned int cam, std::vector< Point::csptr > &found, double &distance, double radius=-1.0) const;
-
-        /**
-         * @brief 2D visible point for each camera corresponding to the 3D point number No of the videotag in several cameras
-         * @param[in] cams Cameras list
-         * @param[out] whichCams = Receive true for each camera when the point exists in
-         * @param[out] pl = List with only found points
-         * @return Number of found points
-         */
-        ARLCORE_API unsigned int getPointByCam( std::vector<Point::csptr>& pl, const std::vector<const arlCore::Camera*> &cams, SPTR(void) videoTag, unsigned int no, std::vector< bool >&whichCams) const;
-        ARLCORE_API unsigned int getPointByCam( std::vector<Point::csptr>& pl, const std::vector<arlCore::Camera> &cams, SPTR(void) videoTag, unsigned int no, std::vector< bool >&whichCams) const;
-        /**
-         * @brief List of 2D visible points for a cam and optionally the videoTag pointer
-         * When videoTag is not given, provide the point coordinates for all videoTag
-         * @return Number of points returned
-         */
-        ARLCORE_API unsigned int getPoints( std::vector<Point::csptr>& pl, unsigned int cam, SPTR(void) videoTag=  SPTR(void)() ) const;
-
-        /**
-         * @brief List of 2D points for a cam and optionally the videoTag pointer
-         * @return Number of points returned
-         */
-        ARLCORE_API unsigned int getPoints( PointList::sptr, unsigned int cam, SPTR(void) videoTag=  SPTR(void)() ) const;
-        ARLCORE_API unsigned int getInvisiblePoints( std::vector<Point::csptr>&, unsigned int cam, SPTR(void) t= SPTR(void)() ) const;
-
-        //! @brief Visible 2D point in the camera 'cam' which is the TagId point in VideoTag t
-        ARLCORE_API bool getPoint( Point::csptr&, unsigned int cam, SPTR(void) t, unsigned int TagId ) const;
-
-        //! @brief Clear the list and all points
-        ARLCORE_API bool clear( void );
-
-        //! @brief Number of points in the list tagged with the triplet (cam,videotag,fringe)
-        ARLCORE_API unsigned int size( unsigned int cam, SPTR(void) videoTag=  SPTR(void)(), int fringe=0 ) const;
-
-    protected:
-        //! @return A list among m_listOfLists or m_listsByCam in function of the triplet
-        std::vector< Point::csptr >& privateGetList( unsigned int cam, SPTR(void) videoTag= SPTR(void)(), int fringe=0 );
-
-        //! @return Hash code for the triplet : hashcode = hash(cam, videoTag, fringe)
-        double hash( unsigned int cam, SPTR(void) videoTag, int fringe=0 ) const;
-
-        //! @return the triplet for a hashcode :  (cam, videoTag, fringe) = unhash(hashcode)
-        bool unhash( double key, unsigned int &cam, SPTR(void) videoTag , int &fringe ) const;
-
-
-    private:
-        struct mapOrder
-        {
-            bool operator()(double d1, double d2) const
-            {return d1<d2;}
-        };
-        /**
-         * @brief Map of pairs ( hashcode , index in m_listOfLists )
-         * if a list with the triplet (cam, videotag, fringe) exists
-         * m_mapOfLists contains its index in m_listOfLists
-         */
-        std::map< double, unsigned int, mapOrder > m_mapOfLists;
-
-        /**
-         * @brief Contain a list of lists of points according to triplet association in m_mapOfLists
-         * The first element is always an empty list
-         */
-        std::vector< std::vector< Point::csptr > > m_listOfLists;
-
-        //! @brief Each element of the vector contained the complete list of points for a camera
-        std::vector< std::vector< Point::csptr > > m_listsByCam;
-    };
-
-    /**
-    * @brief Calcule les appariements epipolaires pour n cameras
-    * @param[in] cameras Liste des cameras
-    * @param[in] points2D Listes des points2D pour chaque camera
-    * @param[out] matching Liste des appariements. Contient une liste de pointeurs sur les points 2D de chaque camera. En cas de non appariement le pointeur est nul.
-    * @param[in] gaussianNoise Bruit moyen en pixels sur les points 2D détectés ou cliqués
-    * @return Nombre d'appariements
-    */
-    ARLCORE_API unsigned int epipolarMatching( const std::vector<Camera>& cameras, CSPTR( SmartPointList ) points2D, std::vector< std::vector<Point::csptr> >&matching, double gaussianNoise );
-
-/*  class SynchronizedList
-    {
-    public:
-
-        // Create an empty point
-        ARLCORE_API SynchronizedList( void );
-        ARLCORE_API ~SynchronizedList( void );
-
-        ARLCORE_API unsigned int size( void ) const;
-        ARLCORE_API unsigned int addList( const PointsCont &list );
-        ARLCORE_API long int operator []( unsigned int i ) const;
-        ARLCORE_API bool getLists( MultiPointsCont* &lists );
-
-        ARLCORE_API bool print( void ) const;
-
-    private:
-        void destroy( void );
-        unsigned int erase( long int time);
-
-        std::vector<long int> m_timeStamps;
-        MultiPointsCont m_lists;
-    };*/
-} // namespace arlCore
-#endif // _ARLCORE_SmartPointList_H
diff --git a/SrcLib/ARLcore/include/arlcore/Tag.h b/SrcLib/ARLcore/include/arlcore/Tag.h
deleted file mode 100644
index 42828e1..0000000
--- a/SrcLib/ARLcore/include/arlcore/Tag.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_TAG_H
-#define _ARLCORE_TAG_H
-
-#include <fwCore/macros.hpp>
-#include <arlcore/Common.h>
-
-#include <arlcore/Object.h>
-#include <arlcore/Particle.h>
-#include <arlcore/Parameters.h>
-#include <arlcore/PointsList.h>
-
-namespace arlCore
-{
-    enum ARLCORE_TAG_PARAMETERS { ARLCORE_TAGFLAG_REGISTRATION_ERROR_EVALUATION, ARLCORE_TAG_REGISTRATION_MAXERROR, ARLCORE_TAG_NBPARAMETERS };
-    static std::string ARLCORE_TAGPARAMETERS_NAMES[ARLCORE_TAG_NBPARAMETERS]={ "Registration error evaluation","Registration max error" };
-    static boost::any ARLCORE_TAGPARAMETERS_DEFAULTS[ARLCORE_TAG_NBPARAMETERS]={ true, 0.0 };
-
-    class PlaneSystem;
-
-    /**
-     * @date    2007
-     * @brief   Detection tag
-     */
-    class ARLCORE_CLASS_API Tag :  public Particle, public arlCore::Parameters
-    {
-    public:
-
-        fwCoreClassDefinitionsWithNFactoriesMacro( (Tag)(::fwTools::Object),
-                                                   ((TagFactory ,((arlCore::PlaneSystem &)) ((const std::string &)) ))
-                                                   ((TagFactory ,(( arlCore::PlaneSystem &)) ((PointList::csptr)) ))
-                                                 );
-
-        ARLCORE_API static Tag::sptr TagFactory( arlCore::PlaneSystem &universe, const std::string &name);
-        ARLCORE_API static Tag::sptr TagFactory( arlCore::PlaneSystem &universe, PointList::csptr );
-
-        /**
-        * @brief Type of registration
-        * ARL_TAG_REGISTRATION_3D3D : Registration with matching 3D point
-        * ARL_TAG_REGISTRATION_3DWO : Registration without matching 3D point
-        * ARL_TAG_REGISTRATION_ICP : ICP registration between 2 clouds of 3D points
-        */
-        enum ARLCORE_TAG_REGISTRATION_TYPE { ARLCORE_TAG_REGISTRATION_UNKNOWN, ARLCORE_TAG_REGISTRATION_NONE,
-                    ARLCORE_TAG_REGISTRATION_3D3D, ARLCORE_TAG_REGISTRATION_3DWO,
-                    ARLCORE_TAG_REGISTRATION_ICP, ARLCORE_TAG_REGISTRATION_NBTYPES };
-
-        //! @brief Constructor with a filename
-        ARLCORE_API Tag( arlCore::PlaneSystem &universe, const std::string &name );
-
-        //! @brief Constructor with a pointlist for tag's geometry
-        ARLCORE_API Tag( arlCore::PlaneSystem &universe, PointList::csptr );
-
-        //! @brief Destructor
-        ARLCORE_API ~Tag( void );
-
-        ARLCORE_API bool init( void );
-        ARLCORE_API std::string getString( void ) const;
-
-        //! @return Measure plane
-        ARLCORE_API unsigned int getMeasuresPlane() const;
-
-        //! @return Number of geometry points
-        ARLCORE_API unsigned int getNbPoints() const;
-
-        //! @return Reference on geometry's pointlist
-        ARLCORE_API arlCore::PointList::csptr getGeometry() const;
-
-        //! @return Reference on geometry's pointlist
-        ARLCORE_API arlCore::PointList::sptr getGeometry();
-
-        //! @return Reference on measures's pointlist
-        ARLCORE_API arlCore::PointList::csptr getMeasures() const;
-
-        //! @return Reference on measures's pointlist
-        ARLCORE_API arlCore::PointList::sptr getMeasures();
-
-        //! @return Registration type
-        ARLCORE_API ARLCORE_TAG_REGISTRATION_TYPE getRegistrationType( void );
-
-        //! @return Maximum error for registration
-        ARLCORE_API double getRegistrationMaxError( void );
-
-        //! @brief Set maximum error for registration
-        ARLCORE_API void setRegistrationMaxError( double error );
-
-        //! @brief Reset points visibilities, origin plane before new detection
-        ARLCORE_API void reset( void );
-
-        /**
-        * @brief Set a transformation between Tag's plane -> plane (ie : Video's plane)
-        * @param[in] plane Plane of the
-        * @param[in] T Transformation
-        * @param[in] reset If true, measures are all computed from T
-        * @param[in] date & time of the measure
-        * @return false if RMS>getRegistrationMaxError()
-        */
-        ARLCORE_API bool setRegistration( unsigned int plane, arlCore::vnl_rigid_matrix &T, long int date, long int time, bool reset );
-
-        ARLCORE_API double getPersistence( void ) const{return m_persistence;}
-        ARLCORE_API void setPersistence( double p ){m_persistence=p;}
-
-    protected:
-        PointList::sptr m_geometry; //3D
-        PointList::sptr m_measures; //3D
-        unsigned int m_measuresPlane;
-        ARLCORE_TAG_REGISTRATION_TYPE m_registrationType;
-        double m_registrationMaxError;
-        double m_persistence;
-
-    };
-} // namespace arlCore
-#endif // _ARLCORE_TAG_H
diff --git a/SrcLib/ARLcore/include/arlcore/Tags.h b/SrcLib/ARLcore/include/arlcore/Tags.h
deleted file mode 100644
index 0bd4bf4..0000000
--- a/SrcLib/ARLcore/include/arlcore/Tags.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_TAGS_H
-#define _ARLCORE_TAGS_H
-#include <arlcore/Common.h>
-
-#include <arlcore/PlaneSystem.h>
-#include <fwCore/macros.hpp>
-#include <arlcore/Tag.h>
-
-namespace arlCore
-{
-    class Object;
-    class Tags : public fwTools::Object
-    {
-    /**
-     * @class   Tags
-     * @date    2007
-     * @brief   Ensemble de tags de detection
-     */
-    public:
-
-        fwCoreClassDefinitionsWithNFactoriesMacro( (Tags)(::fwTools::Object),
-                                                   ((TagsFactory ,((arlCore::PlaneSystem &)) ((const std::string &)) ))
-                                                 );
-
-        ARLCORE_API static Tags::sptr TagsFactory( arlCore::PlaneSystem &universe, const std::string &name);
-
-        //! @brief Constructor
-        ARLCORE_API Tags( PlaneSystem &universe, const std::string &name="" );
-
-//        //! @brief Constructor by copy
-//        ARLCORE_API Tags( const Tags& );
-
-        //! @brief Affectation
-        //VAG ARLCORE_API Tags& operator=( const Tags& );
-
-        //! @brief Destructor
-        ARLCORE_API ~Tags( void);
-
-        ARLCORE_API std::string getString( void ) const;
-
-        ARLCORE_API bool save( const std::string &fileName, bool overwrite=true ) const;
-
-        ARLCORE_API bool load( const std::string &fileName );
-
-        virtual ARLCORE_API SPTR(Tag) addTag( CSPTR( PointList ) pl );
-
-        virtual ARLCORE_API bool delTag( CSPTR(Tag) );
-
-        ARLCORE_API Tag::csptr getTag( unsigned int index ) const;
-
-        ARLCORE_API SPTR(Tag) getTag( unsigned int index );
-
-        ARLCORE_API unsigned int size( void ) const;
-
-    protected:
-        ARLCORE_API bool reset( void );
-        ARLCORE_API bool copy(  CSPTR(Tags)  );
-        CSPTR(Tag) addTag( SPTR(Tag) );
-
-        PlaneSystem &m_universe;
-        std::vector< SPTR(Tag) > m_tags;
-    };
-} // namespace arlCore
-#endif // _ARLCORE_TAGS_H
diff --git a/SrcLib/ARLcore/include/arlcore/Tracker.h b/SrcLib/ARLcore/include/arlcore/Tracker.h
deleted file mode 100644
index b599d01..0000000
--- a/SrcLib/ARLcore/include/arlcore/Tracker.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_TRACKER_H
-#define _ARLCORE_TRACKER_H
-#include <arlcore/Common.h>
-
-#include <arlcore/Object.h>
-
-namespace arlCore
-{
-    class Tracker : public arlCore::Object
-    {
-    /**
-     * @class   Tracker
-     * @date    2007
-     * @brief   TODO commentaire ?? Tracker
-     */
-    public:
-        //! @brief Constructor
-        ARLCORE_API Tracker( const std::string &name="" );
-
-        //! @brief Destructor
-        ARLCORE_API ~Tracker( void );
-
-        //! @return Description of the current tracker
-        ARLCORE_API std::string getString( void ) const;
-
-    private:
-    };
-} // namespace arlCore
-#endif // _ARLCORE_TRACKER_H
diff --git a/SrcLib/ARLcore/include/arlcore/Type.h b/SrcLib/ARLcore/include/arlcore/Type.h
deleted file mode 100644
index 8987d4c..0000000
--- a/SrcLib/ARLcore/include/arlcore/Type.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_TYPE_H
-#define _ARLCORE_TYPE_H
-
-//const double PI = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;
-
-#if defined( _MSC_VER )
-
-// The Visual C++ debugger doesn't know string
-// larger than 255 char. STL often creates large
-// symbol. The following line cancels warning
-// created by Visual.
-#pragma warning (disable : 4786)
-
-// need a dll interface 
-// (Un classe de base ou une structure doit �tre d�clar�e avec 
-// le mot cl� __declspec(dllexport) pour qu'une fonction d'une 
-//classe d�riv�e soit export�e)
-#pragma warning (disable:4251)
-
-// The following line prevents from this file to
-// be included several times by the compiler with
-// Visual C++. This makes compiling quicker, but
-// must not be used when your file content may
-// change depending on some macro definitions. In
-// the general case, leave these lines as they
-// are.
-#pragma once
-
-#else
-
-#include <typeinfo>
-
-#endif
-
-#include <cassert>
-
-#ifdef __MACOSX__
-#include <sys/types.h>
-#include <stdint.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef _SINT64
-typedef int64_t sint64;
-#define _SINT64
-#endif
-#ifndef _UINT64
-typedef uint64_t uint64;
-#define _UINT64
-#endif
-#ifndef _SINT32
-typedef int32_t sint32;
-#define _SINT32
-#endif
-#ifndef _SINT16
-typedef int16_t sint16;
-#define _SINT16
-#endif
-#ifndef _SINT8
-typedef int8_t sint8;
-#define _SINT8
-#endif
-#ifndef _UINT32
-typedef uint32_t uint32;
-#define _UINT32
-#endif
-#ifndef _UINT16
-typedef uint16_t uint16;
-#define _UINT16
-#endif
-#ifndef _UINT8
-typedef uint8_t uint8;
-#define _UINT8
-#endif
-
-#ifdef __cplusplus
-}
-#endif
-
-#else
-#ifdef __STDC__
-typedef signed char int8;       // NB: non-ANSI compilers may not grok
-#else
-typedef char int8;
-#endif
-typedef unsigned char                           uint8;
-typedef unsigned short                          uint16;
-typedef short int16;
-#if defined(__alpha) || (defined(_MIPS_SZLONG) && _MIPS_SZLONG == 64)
-typedef int int32;
-typedef unsigned int uint32;    // sizeof (uint32) must == 4
-#else
-typedef long int32;
-typedef unsigned long uint32;   // sizeof (uint32) must == 4
-#endif
-typedef unsigned long long                      uint64;
-#endif
-
-typedef struct
-{
-    uint32 Low; //UINT32
-    uint32 High; //UINT32
-}uint32HL;
-
-// Use only when you decide to delegate size to compiler
-//typedef int       int;
-typedef unsigned int    uint; 
-typedef unsigned long   ulong;
-typedef unsigned short  ushort;
-typedef signed char     schar;
-#ifndef uchar
-    #ifndef _CV_H_
-        typedef unsigned char   uchar;
-    #endif
-#endif
-
-// For 64 bits
-// For MSVC : __int64
-//typedef long long int64;
-
-#endif // _ARLCORE_TYPE_H
diff --git a/SrcLib/ARLcore/include/arlcore/UncertaintyPropag.h b/SrcLib/ARLcore/include/arlcore/UncertaintyPropag.h
deleted file mode 100644
index dbcd226..0000000
--- a/SrcLib/ARLcore/include/arlcore/UncertaintyPropag.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_UNCERTAINTYPROPAG_H
-#define _ARLCORE_UNCERTAINTYPROPAG_H
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <string>
-
-#include <arlcore/Camera.h>
-#include <arlcore/Reconst3D.h>
-
-//#define DEFAULT_MODEL "synthe.CKeys1"
-//#define DEFAULT_SCENE "synthe.CKeys2"
-
-namespace arlCore
-{
-    /**
-     * @brief Compute the covariance of a 3D point which is reconstructed from several (at least 2) video
-     * image. Obviously, we consider that cameras are jointly calibrated. After computation, the covariance
-     * matrix of the 3D Point is updated. Do not forget that you MUST fill the covariance matrix of each
-     * 2D Point in list2D.
-     *
-     * Up to now, covariance computation is available for ARLCORE_R3D_REPROJECTION_OPTIMIZATION,
-     * ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY and ARLCORE_R3D_TWO_LINES_APPROX only.
-     *
-     * @param[in] list2D[i] : 2D detection of the 3D point in the i-th camera
-     * @param[in] camsList[i] : camera parameters of the i-th camera
-     * @param[in] point3D : 3D coordinates of the reconstructed point
-     * @param[in] methode : method used to recontruct the point in 3D (see Reconst3D.h)
-     * @param[out] log : still not used
-     * @param[in] pixelFrame : still not used
-     *
-     */
-    ARLCORE_API bool propagateCovarianceToReconst3D( const std::vector<arlCore::Point::csptr>&list2D, const std::vector<const arlCore::Camera*> &camsList,
-         SPTR( Point ) point3D, arlCore::ARLCORE_RECONSTRUCTION3D methode, std::vector<double> &log, const bool pixelFrame);
-
-    ARLCORE_API void WriteTableau ( char *nom, std::vector<double> tab, unsigned int n );
-    /**
-     * @brief Khi Square Validation for 3 dimensional data
-     *
-     */
-    ARLCORE_API double* KSValidation3D(char *index_file);
-    ARLCORE_API double CumulativeChi2_3(double mu2);
-
-    /**
-     * @brief Probabilistic tests and densities
-     *
-     */
-    ARLCORE_API double ProbKSTest(double alam); /* Kolmogorov-Smirnov probability */
-    ARLCORE_API double LnGamma(double xx); /* ln(Gamma(a,x)) */
-    ARLCORE_API double IncompleteGammaP(double a, double x);
-    ARLCORE_API double CumulativeChi2(double mu2, int n);
-
-    ARLCORE_API double IncompleteBetaI(register double a, register double b,register  double x);
-    ARLCORE_API double CumulativeFisher(double a, double b, double x);
-    ARLCORE_API double CumulativeHotelling(double p, double n, double x);
-
-    ARLCORE_API double SimpleKSTest( double *data, int n, double (*pdf)(double),
-                    double *d);/* Simple Kolmogorov-Smirnov test */
-    ARLCORE_API double DoubleKSTest( double *data1, int n1, double *data2, int n2,
-                double *d);/* DoubleKolmogorov-Smirnov test */
-} // namespace arlCore
-#endif //_ARLCORE_UNCERTAINTYPROPAG_H
diff --git a/SrcLib/ARLcore/include/arlcore/UnitTestArlCore.h b/SrcLib/ARLcore/include/arlcore/UnitTestArlCore.h
deleted file mode 100644
index 6fca564..0000000
--- a/SrcLib/ARLcore/include/arlcore/UnitTestArlCore.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _ARLCORE_UNITTEST_H
-#define _ARLCORE_UNITTEST_H
-
-//#ifdef _WIN32
-#include <arlcore/Common.h>
-
-#include <vector>
-#include <vnl/vnl_vector.h>
-
-namespace arlCore
-{
-/**
- * @Brief Tests sur les reconstructions 3D, recalages 3D/2D, 3D/3D
- */
-    // 3D Reconstruction
-    ARLCORE_API bool testReconstructionPolyscopic( long int nbIterations, double tolerance );//TODO rajouter le tirage des transformations aléatoires 
-    ARLCORE_API bool testReconstructionPolyscopicUncertainty( long int nbIterations, double tolerance);
-
-    // Calibration
-    ARLCORE_API bool testIntrinsicCalibration( long int nbIterations, double tolerance );
-    ARLCORE_API bool testInitIntrinsicCalibration( long int nbIterations, double tolerance );
-    ARLCORE_API bool testExtrinsicCalibration( long int nbIterations, double tolerance );
-    ARLCORE_API bool testInitExtrinsicCalibration( long int nbIterations, double tolerance );
-
-    // Matching
-    ARLCORE_API bool test3D3DMatching( long int nbIterations, double tolerance );
-    ARLCORE_API bool testEpipolarMatching( long int nbIterations, double tolerance );
-
-    /*
-     *@brief  Validate the 3D3D Point Registration algorithm available in MatrixR::register3D3D.
-     * Each iteration generates 2 point clouds of identical shape. The algorithm registers them
-     * minimizing the registration error sum || TxM_i - N_i ||^2 where T is the rigid transformation,
-     * M_i (N_i) the set of the 1st (2nd) point cloud. The accuracy of the found 
-     * rigid transformation is evaluated by comparing T and the ground truth
-     */ 
-    ARLCORE_API bool testRegistration3D3D( long int nbIterations, double tolerance );
-    /**
-     * @brief TODO
-     * 
-     */
-    ARLCORE_API bool testICPRegistration( long int nbIterations, double tolerance );
-    /**
-     * @brief Validate the 3D3D Point Registration algorithm available in MatrixR::register3D3DUncertainty
-     * Each iteration generates 2 point clouds of identical shape. The algorithm registers them
-     * minimizing the registration error sum ( TxM_i - N_i )^t * cov^(-1) * ( TxM_i - N_i )
-     *  where T is the rigid transformation M_i (N_i) the set of the 1st (2nd) point cloud. 
-     * The accuracy of the found rigid transformation is evaluated by comparing T and the ground truth
-     */
-    ARLCORE_API bool testRegistration3D3DUncertainty( long int nbIterations, double tolerance );
-    /**
-     * @brief TODO
-     * 
-     */
-    ARLCORE_API bool testRegistration3D3DwithoutMatching( long int nbIterations, double tolerance );
-
-    /**
-     * @brief Validate the 3D/2D point registration algorithms. A scene with several cameras is
-     * generated. The cameras are looking at an object positioned in camera space (3D point list M_i).
-     * The 2D reprojection of these 3D points in each camera are available. 
-     * A 3D model of this object in its own frame is available (3D point list_N_i).
-     * The Unit test compute the 3D 2D point registration between the model and the camera frame. For
-     * example, when the ISPPC criterion is used, we seek T so that sum || P_i(TxN_j) - m_i_j ||^2
-     * is minimal (where P_i is the projective function of the i-th camera, m_i_j the reprojection of
-     * the j-th point in the i-th camera.
-     * The accuracy of the found rigid transformation is evaluated by comparing T and the ground truth 
-     * 
-     */
-    ARLCORE_API bool testProjectiveRegistration( long int nbIterations, double tolerance );
-    ARLCORE_API bool testHomographyRegistration( long int nbIterations, double tolerance );
-
-    /**
-     * @brief TODO
-     * 
-     */
-    ARLCORE_API bool testRegistrationCriteriaComparison( long int nbIterations, std::vector<double> parameters, std::vector<double> staticStatus,std::vector< vnl_vector<double>* > , std::vector< vnl_vector<double>* > , std::vector< vnl_vector<double>* >   );
-
-    // Sphere Center Estimation from a 3D point cloud
-    ARLCORE_API bool testSphereCenterEstimation( long int nbIterations, double tolerance );
-    
-    // Others
-    ARLCORE_API bool testRigidTransfo( unsigned int nbIterations, double tolerance );
-    ARLCORE_API bool testPolynomialFieldDistortion( long int nbIterations, double tolerance );
-} // namespace arlCore
-
-//#endif // _WIN32
-
-#endif // _ARLCORE_UNITTEST_H
diff --git a/SrcLib/ARLcore/include/arlcore/vnl_covariance_matrix.h b/SrcLib/ARLcore/include/arlcore/vnl_covariance_matrix.h
deleted file mode 100644
index 8998332..0000000
--- a/SrcLib/ARLcore/include/arlcore/vnl_covariance_matrix.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VNL_COVARIANCE_VECTOR_H
-#define _VNL_COVARIANCE_VECTOR_H
-#include <arlcore/Common.h>
-
-#include <vnl/vnl_matrix.h>
-
-namespace arlCore
-{
-    class vnl_covariance_matrix : public vnl_matrix<double>
-    {
-    /**
-     * @class   vnl_covariance_vector
-     * @date    2007
-     * @brief   Covariance matrix
-     */
-    public:
-        //! @brief Constructor of a n x n covariance matrix filled with 0.0
-        ARLCORE_API vnl_covariance_matrix( unsigned int n );
-
-        //! @brief Default constructor of a 0 x 0 covariance matrix
-        ARLCORE_API vnl_covariance_matrix( void );
-
-        //! @brief Copy constructor
-        ARLCORE_API vnl_covariance_matrix( const vnl_covariance_matrix& );
-
-        //! @brief Destructor
-        ARLCORE_API ~vnl_covariance_matrix( void );
-
-        //! @brief Affectation (Get the new size)
-        ARLCORE_API vnl_covariance_matrix& operator=( const vnl_covariance_matrix& );
-
-        /**
-         * @brief Confidence ellipse for 2 x 2 matrix
-         * @result False if the matrix isn't a 2 x 2 matrix
-         */
-        ARLCORE_API bool errorEllipse( double &a2, double &b2, double &theta ) const;
-
-    private:
-        //! @brief Private copy
-        void copy_in( const vnl_covariance_matrix& );
-    };
-} // namespace arlCore
-#endif // _VNL_COVARIANCE_VECTOR_H
diff --git a/SrcLib/ARLcore/include/arlcore/vnl_rigid_vector.h b/SrcLib/ARLcore/include/arlcore/vnl_rigid_vector.h
deleted file mode 100644
index 71cdad0..0000000
--- a/SrcLib/ARLcore/include/arlcore/vnl_rigid_vector.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VNL_RIGID_VECTOR_H
-#define _VNL_RIGID_VECTOR_H
-#include <arlcore/Common.h>
-
-#include <vnl/vnl_vector_fixed.h>
-#include <vnl/vnl_vector.h>
-
-namespace arlCore
-{
-    class vnl_rigid_matrix;
-    class vnl_rotation3d_vector;
-    class vnl_rigid_vector : public vnl_vector_fixed<double,6>
-    {
-    /**
-     * @class   vnl_rigid_vector
-     * @date    2007
-     * @brief   Rigid transformation vector
-     * Vector representation, useful for optimization
-     * [0,3] : Rotation vector
-     * [4,6] : Translation vector
-     */
-    public:
-        //! @brief Default constructor
-        ARLCORE_API vnl_rigid_vector( void );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rigid_vector( const vnl_vector<double>& );
-
-        //! @brief Constructor by copy
-        ARLCORE_API vnl_rigid_vector( const vnl_rigid_vector& );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rigid_vector( const vnl_rigid_matrix& );
-
-        //! @brief Destructor
-        ARLCORE_API ~vnl_rigid_vector( void );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rigid_vector& operator=( const vnl_vector<double>& );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rigid_vector& operator=( const vnl_rigid_vector& );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rigid_vector& operator=( const vnl_rigid_matrix& );
-
-        //! @brief add a gaussian noise on each composant of vector
-        void addGaussianNoise( double std );
-
-        //! @return Rotation vector
-        ARLCORE_API vnl_rotation3d_vector getRotation3dVector( void ) const;
-
-        //! @return Translation vector
-        ARLCORE_API vnl_vector_fixed<double,3> getTranslation( void ) const;
-
-    private:
-        //! @brief Private copy
-        void copy_in( const vnl_vector<double>& );
-
-        //! @brief Private copy
-        void copy_in( const vnl_rigid_vector& );
-
-        //! @brief Private copy
-        void copy_in( const vnl_rigid_matrix& );
-    };
-} // namespace arlCore
-#endif // _VNL_RIGID_VECTOR_H
diff --git a/SrcLib/ARLcore/include/arlcore/vnl_rotation3d_matrix.h b/SrcLib/ARLcore/include/arlcore/vnl_rotation3d_matrix.h
deleted file mode 100644
index aa4b08a..0000000
--- a/SrcLib/ARLcore/include/arlcore/vnl_rotation3d_matrix.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VNL_ROTATION3D_MATRIX_H
-#define _VNL_ROTATION3D_MATRIX_H
-#include <arlcore/Common.h>
-
-#include <vnl/vnl_matrix_fixed.h>
-#include <vector>
-
-namespace arlCore
-{
-    class vnl_rotation3d_vector;
-    class vnl_rotation3d_matrix : public vnl_matrix_fixed<double,3,3>
-    {
-    /**
-     * @class   vnl_rotation3d_matrix
-     * @date    2007
-     * @brief   Matrice de rotation 3x3
-     * vnl_rotation3d_matrix sp�cialise une matrice quelconque 3x3
-     * Des m�thodes permettent de tester ses propri�t�s ou de trouver la matrice de rotation exacte la plus proche
-     */
-    public:
-        //! @brief Default constructor
-        ARLCORE_API vnl_rotation3d_matrix( void );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rotation3d_matrix( const vnl_rotation3d_vector& );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rotation3d_matrix( const vnl_matrix_fixed<double,3,3>& );
-
-        /**
-         * @Brief Constructor : Initialization by Euler angles
-         * Notations : cf http://mathworld.wolfram.com/EulerAngles.html
-         * @param phi = rotation about the z-axis
-         * @param theta = rotation about the x-axis [0,Pi]
-         * @param psy = rotation about z-axis(again)
-         */
-        ARLCORE_API vnl_rotation3d_matrix( double phi, double theta, double psy );
-
-        //! @brief Destructor
-        ARLCORE_API ~vnl_rotation3d_matrix( void );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rotation3d_matrix& operator=( const vnl_rotation3d_vector& );
-
-        //! @brief Affectation
-        ARLCORE_API vnl_rotation3d_matrix& operator=( const vnl_matrix_fixed<double,3,3>& );
-
-        //! @brief Conversion
-        ARLCORE_API vnl_matrix<double> as_matrix( void );
-
-        //! @brief Is it a correct rotation matrix ?
-        ARLCORE_API bool is_rotation( void ) const;
-
-        //! @brief If it's possible, current rotation matrix takes the closest real rotation in sense of Frobenius norm
-        ARLCORE_API bool closest_rotation( void );
-        
-        //! @brief compute the distance in riemannian sense between the current matrix and B
-        ARLCORE_API double sq_rieman_dist( const vnl_rotation3d_matrix &B );
-
-        //! @brief compute the gravity center of the rotation matrix list (in riemannian sense)
-        //  @out distance between the gravity center and the matrix list (TODO not implemented) 
-        ARLCORE_API double average_rotation3d ( const std::vector< vnl_rotation3d_matrix * > &);
-
-    private:
-        //! @brief Private copy
-        void copy_in( const vnl_rotation3d_vector& );
-
-        //! @brief Private copy
-        void copy_in( const vnl_matrix_fixed<double,3,3>& );
-    };
-} // namespace arlCore
-#endif // _VNL_ROTATION3D_MATRIX_H
diff --git a/SrcLib/ARLcore/include/arlcore/vnl_rotation3d_vector.h b/SrcLib/ARLcore/include/arlcore/vnl_rotation3d_vector.h
deleted file mode 100644
index 6d14be7..0000000
--- a/SrcLib/ARLcore/include/arlcore/vnl_rotation3d_vector.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VNL_ROTATION3D_VECTOR_H
-#define _VNL_ROTATION3D_VECTOR_H
-#include <arlcore/Common.h>
-
-#include <vnl/vnl_vector_fixed.h>
-
-namespace arlCore
-{
-    class vnl_rotation3d_matrix;
-    class vnl_rotation3d_vector : public vnl_vector_fixed<double,3>
-    {
-    /**
-     * @class   vnl_rotation3d_matrix
-     * @date    2007
-     * @brief   Vecteur rotation
-     * L'axe de rotation est d�termin� par la direction du vecteur
-     * L'angle est d�termin� par la norme du vecteur modulo 2Pi dans le sens direct
-     */
-    public:
-        //! @brief Default constructor
-        ARLCORE_API vnl_rotation3d_vector( void );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rotation3d_vector( double, double, double );
-
-        //! @brief Constructor
-        ARLCORE_API vnl_rotation3d_vector( const vnl_rotation3d_matrix& );
-
-        //! @brief Destructor
-        ARLCORE_API ~vnl_rotation3d_vector( void );
-
-        //! @brief Copy
-        ARLCORE_API vnl_rotation3d_vector& operator=( const vnl_rotation3d_matrix& );
-
-        /**
-        * @brief modulo
-        * Normalise la norme du vecteur dans l'intervalle [-Pi,Pi[
-        */
-        ARLCORE_API void modulo();
-
-        /**
-        * @brief Applique un bruit gaussien sur la direction et l'angle
-        * Gaussienne centr�e sur le vecteur rotation et d'�cart type std
-        */
-        ARLCORE_API void add_gaussian_noise( double std );
-
-        /**
-        * @brief Retourne un vecteur rotation al�atoire
-        * Direction et angle al�atoires et ind�pendants
-        */
-        ARLCORE_API void uniform_random( void );
-
-        /**
-        * @brief Retourne Theta en coordonn�es sph�riques
-        * In curvilinear coordinates, Theta is the azimuthal angle in the xy-plane from the x-axis in [0,2Pi[
-        * Ref : http://mathworld.wolfram.com/SphericalCoordinates.html
-        */
-        ARLCORE_API double getTheta( void );
-
-        /**
-        * @brief Retourne Theta en coordonn�es sph�riques
-        * In curvilinear coordinates, Phi is the polar angle in the z-axis in [0,Pi]
-        * Ref : http://mathworld.wolfram.com/SphericalCoordinates.html
-        */
-        ARLCORE_API double getPhi( void );
-
-    private:
-        //! @brief Private copy
-        bool copy_in ( const vnl_rotation3d_matrix& );
-    };
-} // namespace arlCore
-#endif // _VNL_ROTATION3D_VECTOR_H
diff --git a/SrcLib/ARLcore/src/arlcore/Calibration.cpp b/SrcLib/ARLcore/src/arlcore/Calibration.cpp
deleted file mode 100644
index b304300..0000000
--- a/SrcLib/ARLcore/src/arlcore/Calibration.cpp
+++ /dev/null
@@ -1,625 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Calibration.h>
-
-#include <vnl/algo/vnl_levenberg_marquardt.h>
-#include <vnl/algo/vnl_powell.h>
-#include <vnl/vnl_cross.h>
-#include <vnl/algo/vnl_matrix_inverse.h>
-
-#include <arlcore/Reconst3D.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/Optimization.h>
-#include <arlcore/vnl_rigid_vector.h>
-
-/**
- * @brief This method of intrinsic parameter initilisation is taken from the paper of Z. Zhang:
- * A Flexible New Technique for Camera Calibration in IEEE Transactions on Pattern Analysis
- * and Machine Intelligence Volume 22 ,  Issue 11  (November 2000) pages: 1330 - 1334
- *
- * The notations of the paper have been keeped
- */
-bool arlCore::initIntrinsicCalibration(const std::vector<arlCore::PointList::csptr> &model3DList, const std::vector <arlCore::PointList::csptr> &points2DList, arlCore::Camera &camera , std::vector< vnl_rigid_matrix> &liste_extrinsic, const std::vector<double> &optimiserParameters, std::vector<double> &log)
-{
-    assert(model3DList.size()>0 && points2DList.size()>0);
-    assert(model3DList.size()==1 || model3DList.size()==points2DList.size());
-    const bool Verbose = false;
-    std::vector< vnl_matrix_fixed<double,3,3> > liste_H(points2DList.size());
-    const unsigned int NbPoses=(unsigned int)points2DList.size();
-    unsigned int i, j;
-    std::vector< double> optimiserParameters_tmp;// to get the reprojection error of the homography
-    optimiserParameters_tmp.push_back(1.0);
-    log.push_back(model3DList.size());//log[0] contains the number of pose
-    for( i=0 ; i<NbPoses ; ++i )
-    {
-        if(model3DList.size()==1) j=0; else j=i;
-        std::vector<double> log_tmp;
-        planarHomographyUnknownIntrinsic( points2DList[i], model3DList[j], liste_H[i], optimiserParameters_tmp, log_tmp, true);
-        if(Verbose)
-        {
-            std::cerr<<"H["<<i<<"]=" << liste_H[i]/liste_H[i](2,2)<<std::endl;
-            std::cerr<<"Homography reprojection error="<< log_tmp[0] <<std::endl;
-        }
-        log.push_back(log_tmp[0]/model3DList[i]->size()); //log reprojection error after homography computation
-    }
-    ///////////////////////// v_12 , v_11 et v_22 are created /////////////////////////
-    std::vector< vnl_vector_fixed<double, 6> > v_12(NbPoses), v_11(NbPoses), v_22(NbPoses);
-    for( i=0 ; i<NbPoses ; ++i )
-    {// Vector are filled like in the Zhang's paper
-        v_11[i](0) = liste_H[i](0,0)*liste_H[i](0,0);
-        v_11[i](1) = liste_H[i](0,0)*liste_H[i](1,0) + liste_H[i](1,0)*liste_H[i](0,0);
-        v_11[i](2) = liste_H[i](1,0)*liste_H[i](1,0);
-        v_11[i](3) = liste_H[i](2,0)*liste_H[i](0,0) + liste_H[i](0,0)*liste_H[i](2,0);
-        v_11[i](4) = liste_H[i](2,0)*liste_H[i](1,0) + liste_H[i](1,0)*liste_H[i](2,0);
-        v_11[i](5) = liste_H[i](2,0)*liste_H[i](2,0);
-
-        v_12[i](0) = liste_H[i](0,0)*liste_H[i](0,1);
-        v_12[i](1) = liste_H[i](0,0)*liste_H[i](1,1) + liste_H[i](1,0)*liste_H[i](0,1);
-        v_12[i](2) = liste_H[i](1,0)*liste_H[i](1,1);
-        v_12[i](3) = liste_H[i](2,0)*liste_H[i](0,1) + liste_H[i](0,0)*liste_H[i](2,1);
-        v_12[i](4) = liste_H[i](2,0)*liste_H[i](1,1) + liste_H[i](1,0)*liste_H[i](2,1);
-        v_12[i](5) = liste_H[i](2,0)*liste_H[i](2,1);
-
-        v_22[i](0) = liste_H[i](0,1)*liste_H[i](0,1);
-        v_22[i](1) = liste_H[i](0,1)*liste_H[i](1,1) + liste_H[i](1,1)*liste_H[i](0,1);
-        v_22[i](2) = liste_H[i](1,1)*liste_H[i](1,1);
-        v_22[i](3) = liste_H[i](2,1)*liste_H[i](0,1) + liste_H[i](0,1)*liste_H[i](2,1);
-        v_22[i](4) = liste_H[i](2,1)*liste_H[i](1,1) + liste_H[i](1,1)*liste_H[i](2,1);
-        v_22[i](5) = liste_H[i](2,1)*liste_H[i](2,1);
-    }
-    vnl_matrix<double> V(2*NbPoses, 6);
-    for( i=0 ; i<NbPoses ; ++i )
-    {
-        V.set_row(2*i,v_12[i].as_vector() );
-        V.set_row(2*i+1, (v_11[i] - v_22[i]).as_vector() );
-    }
-    vnl_svd<double> svd(V);
-    vnl_vector_fixed<double, 6> b = svd.nullvector();
-    //Extraction des parametres intrinseques tjs selon le papier zhang b=[B11 B12 B22 B13 B23 B33]
-    //                                                                    b(0)b(1)b(2)b(3)b(4)b(5)
-    const double NearZero = 0.0; //FIXME
-    assert(fabs(b(0)*b(2)-b(1)*b(1))>NearZero);
-    if(fabs(b(0)*b(2)-b(1)*b(1))<=NearZero) return false;
-    const double cy = (b(1)*b(3) - b(0)*b(4))/ ( b(0)*b(2)-b(1)*b(1) );
-    assert(fabs(b(0))>NearZero);
-    if((fabs(b(0))<=NearZero)) return false;
-    const double landa = b(5)-(b(3)*b(3)+cy*( b(1)*b(3)-b(0)*b(4)) )/b(0);
-    // VAGTMP assert(landa/b(0)>=0.0);
-    if(landa/b(0)<0.0) return false;
-    const double fx = sqrt(landa/b(0));
-    // VAGTMP assert(landa*b(0)/( b(0)*b(2)-b(1)*b(1))>=0.0);
-    if(landa*b(0)/( b(0)*b(2)-b(1)*b(1))<0.0) return false;
-    const double fy = sqrt(landa*b(0)/( b(0)*b(2)-b(1)*b(1)));
-    // VAGTMP assert(fabs(landa)>NearZero);
-    if(fabs(landa)<=NearZero) return false;
-    const double skew = -b(1)*fx*fx*fy/landa;
-    // VAGTMP assert(fabs(fx)>NearZero);
-    if(fabs(fx)<=NearZero) return false;
-    const double cx = skew*cy/fx - b(3)*fx*fx/landa;
-    if(Verbose)
-    {
-        std::cerr << "solution intrinseque !"<<std::endl;
-        std::cerr << fx << "  " << skew << "  "<< cx <<std::endl;
-        std::cerr << " 0 " << fy << "  " << cy <<std::endl;
-        std::cerr << " 0   0  1 " <<std::endl;
-    }
-    camera.setfx(fx);
-    camera.setfy(fy);
-    camera.setcx(cx);
-    camera.setcy(cy);
-    if(liste_extrinsic.size()<NbPoses) liste_extrinsic.resize(NbPoses);
-    for( i=0; i<NbPoses; ++i )
-    {// Extraction des matrices extrinseques
-        vnl_matrix<double> camInv = vnl_matrix_inverse<double>(camera.getIntrinsicMatrix());
-        double new_landa = 1 /(camInv*liste_H[i].get_column(0)).two_norm() ;
-        vnl_vector<double> r1 = new_landa * ( camInv*liste_H[i].get_column(0) );
-        vnl_vector<double> r2 = new_landa * ( camInv*liste_H[i].get_column(1) );
-        vnl_vector<double> r3 = vnl_cross_3d(r1, r2);
-        vnl_vector<double> t  = new_landa * ( camInv*liste_H[i].get_column(2) );
-        vnl_matrix_fixed<double,3,3> rot;
-        rot.set_column(0, r1); rot.set_column(1, r2); rot.set_column(2, r3);
-        if(Verbose) std::cerr<<" vnl_matrix_fixed rot ="<< std::endl <<rot<<std::endl;
-        vnl_rotation3d_matrix true_rot(rot);
-        true_rot.closest_rotation();
-        if(Verbose) std::cerr<<" vnl_rotation3d_matrix rot ="<< std::endl <<true_rot<<std::endl;
-        liste_extrinsic[i].setRotation(true_rot);
-        liste_extrinsic[i].setTranslation(t(0), t(1), t(2) );
-    }
-    return true;
-}
-
-bool arlCore::refineIntrinsicCalibration(const std::vector<arlCore::PointList::csptr> &model3DList, const std::vector <arlCore::PointList::csptr> &points2DList, unsigned int nbParameters, arlCore::Camera &camera, std::vector< vnl_rigid_matrix> &liste_extrinsic, const std::vector<double> &optimiserParameters, std::vector<double> &log)
-{
-    assert(liste_extrinsic.size()==(unsigned int)points2DList.size());
-    if(liste_extrinsic.size()!=(unsigned int)points2DList.size()) return false;
-    bool Verbose_1 = false, Verbose_2 = false; // default
-    if(optimiserParameters.size()>1)
-    {
-        if(optimiserParameters[1] == 1)
-            Verbose_1 = true;
-        else if(optimiserParameters[1] == 2)
-        {
-            Verbose_1 = true;
-            Verbose_2 = true;
-        }
-    }
-    if(Verbose_1) std::cerr<<"debut refineIntrinsicCalibration "<<std::endl;
-    double Method = 0; // Default
-    if(optimiserParameters.size()>0) Method = optimiserParameters[0];
-
-    assert(nbParameters>0 && nbParameters<=8);
-    const unsigned int NbPoses=(unsigned int)points2DList.size();
-    assert(NbPoses>0);
-    assert(model3DList.size()==1 || model3DList.size()==points2DList.size());
-    unsigned int nbPointsTotal=0, i, j;
-    vnl_vector<double> init (nbParameters+6*(NbPoses));
-    init[0] = camera.getfx();
-    init[1] = camera.getfy();
-    init[2] = camera.getcx();
-    init[3] = camera.getcy();
-    init[4] = 0.0;
-    init[5] = 0.0;
-    init[6] = 0.0;
-    init[7] = 0.0;
-    for( i=0 ; i<NbPoses ; ++i )
-    {// On considere que le modèle peut avoir un nb de points différents sur chaque pose
-        if(model3DList.size()==1) j=0; else j=i;
-        assert(points2DList[i]->size()==model3DList[j]->size());
-        nbPointsTotal += model3DList[j]->size();
-        vnl_rigid_vector tmp(liste_extrinsic[i]);
-        for( j=0 ; j<6 ; ++j )
-            init[nbParameters + i*6 + j]=tmp[j];
-    }
-    if(Method == 0) // OPTIMIZATION WITH LEVENBERG-MARQUARDT
-    {
-        const unsigned int Unknowns = NbPoses*6+nbParameters;
-        const unsigned int Residuals = nbPointsTotal;
-        if(Residuals<Unknowns) return false;
-        arlCore::IntrinsicLS_cost_function LS_reprojection_f(Unknowns, Residuals, vnl_least_squares_function::use_gradient);
-        LS_reprojection_f.setVerbose(Verbose_2);
-        for( i=0 ; i<NbPoses ; ++i )
-        {
-            if(model3DList.size()==1) j=0; else j=i;
-            LS_reprojection_f.addPattern( points2DList[i]->getList(), model3DList[j]->getList() );
-        }
-        vnl_levenberg_marquardt refineIntrinsic(LS_reprojection_f);
-        //LS_reprojection_f.setObserver(true);
-        refineIntrinsic.set_trace(true);
-        //refineIntrinsic.set_check_derivatives(1);
-        if(optimiserParameters.size()>2) refineIntrinsic.set_f_tolerance(optimiserParameters[2]);
-        else refineIntrinsic.set_f_tolerance(1e-6); // Erreur de reprojection stable (sqrt(m_error)) � 1e-3 pr�s
-        if(optimiserParameters.size()>3)
-        {
-            if(optimiserParameters[3] == 0){}//1e-8 default
-            else {refineIntrinsic.set_x_tolerance(optimiserParameters[3]);}
-        }
-        if(optimiserParameters.size()>4)
-        {
-            if(optimiserParameters[4] == 0){}//1e-5 default
-            else {refineIntrinsic.set_g_tolerance(optimiserParameters[4]);}
-        }
-        if(Verbose_1)
-        {
-            std::cerr<<"f tolerance ="<<refineIntrinsic.get_f_tolerance()<<std::endl;
-            std::cerr<<"x tolerance ="<<refineIntrinsic.get_x_tolerance()<<std::endl;
-            std::cerr<<"g tolerance ="<<refineIntrinsic.get_g_tolerance()<<std::endl;
-            std::cerr<<"check derivative="<<refineIntrinsic.get_check_derivatives()<<std::endl;
-        }
-        refineIntrinsic.minimize_using_gradient(init);
-        if(Verbose_1)
-        {
-            //LS_reprojection_f.plot();
-            std::cerr <<"Average reprojection error RMS before optimization = ="<<refineIntrinsic.get_start_error()<<std::endl;
-            std::cerr <<"Average reprojection error RMS after optimization = ="<<refineIntrinsic.get_end_error()<<std::endl;
-            std::cerr <<"get_num_evaluations ="<<refineIntrinsic.get_num_evaluations()<<std::endl;
-            std::cerr <<"get_num_iterations ="<<refineIntrinsic.get_num_iterations()<<std::endl;
-        }
-        log.push_back(refineIntrinsic.get_end_error());//log
-        log.push_back(refineIntrinsic.get_start_error());//log
-        log.push_back(refineIntrinsic.get_num_iterations());//log
-        log.push_back(NbPoses);//log
-        for( i=0 ; i<NbPoses ; ++i )
-        {
-            log.push_back(model3DList[i]->size()); //log number of points for each pose
-            vnl_vector<double> vec(6);
-            for( j=0 ; j<6 ; ++j )
-                vec[j] = init[nbParameters + i*6 + j];
-            vnl_rigid_vector rigid_vec(vec);
-            liste_extrinsic[i] = vnl_rigid_matrix(rigid_vec);
-        }
-        vnl_vector< double> reprojection_error(nbPointsTotal);
-        LS_reprojection_f.getReprojectionError(init, reprojection_error);
-        //double sum=0;
-        log.push_back(nbPointsTotal);//log
-        for( i=0 ; i<nbPointsTotal ; ++i )
-            {
-                if(Verbose_1){std::cerr<<"reproj ("<<i<<")= "<<reprojection_error[i]<<std::endl;}
-                //sum+=reprojection_error[i]*reprojection_error[i];
-                log.push_back(reprojection_error[i]);//log
-            }
-        //std::cerr<<"rms ="<< sqrt(sum/ nbPointsTotal)<<std::endl;
-        camera.setfx(init[0]);
-        camera.setfy(init[1]);
-        camera.setcx(init[2]);
-        camera.setcy(init[3]);
-        camera.setAlphaC( 0.0 );
-        for( i=0 ; i<4 ; ++i )
-            camera.setkc( i, init[4+i] );
-    }
-    if(Method == 1) // OPTIMIZATION WITH POWELL
-    {
-        arlCore::Intrinsic_cost_function reprojection_f(NbPoses*6+nbParameters);
-        reprojection_f.setVerbose(Verbose_2);
-        for( i=0 ; i<NbPoses ; ++i )
-        {
-            if(model3DList.size()==1) j=0; else j=i;
-            reprojection_f.addPattern( points2DList[i]->getList(), model3DList[i]->getList() );
-        }
-        vnl_powell refineIntrinsic(&reprojection_f);
-        if(optimiserParameters.size()>2) refineIntrinsic.set_f_tolerance(optimiserParameters[2]);
-        else refineIntrinsic.set_f_tolerance(1e-10);
-        if(optimiserParameters.size()>3)
-        {
-            if(optimiserParameters[3] == 0){}//1e-8 default
-            else {refineIntrinsic.set_x_tolerance(optimiserParameters[3]);}
-        }
-        if(optimiserParameters.size()>4)
-        {
-            if(optimiserParameters[4] == 0){}//1e-5 default
-            else {refineIntrinsic.set_g_tolerance(optimiserParameters[4]);}
-        }
-        if(Verbose_1)
-        {
-            std::cerr<<"f tolerance ="<<refineIntrinsic.get_f_tolerance()<<std::endl;
-            std::cerr<<"x tolerance ="<<refineIntrinsic.get_x_tolerance()<<std::endl;
-            std::cerr<<"g tolerance ="<<refineIntrinsic.get_g_tolerance()<<std::endl;
-            std::cerr<<"check derivative="<<refineIntrinsic.get_check_derivatives()<<std::endl;
-        }
-        refineIntrinsic.minimize(init);
-        if(Verbose_1)
-        {
-            std::cerr <<"Average reprojection error RMS before optimization ="<<sqrt(refineIntrinsic.get_start_error())<<std::endl;
-            std::cerr <<"Average reprojection error RMS after optimization ="<<sqrt(refineIntrinsic.get_end_error())<<std::endl;
-            //reprojection_f.plot();
-            std::cerr <<"get_num_evaluations ="<<refineIntrinsic.get_num_evaluations()<<std::endl;
-            std::cerr <<"get_num_iterations ="<<refineIntrinsic.get_num_iterations()<<std::endl;
-        }
-        log.push_back(sqrt(refineIntrinsic.get_end_error()));//log
-        log.push_back(sqrt(refineIntrinsic.get_start_error()));//log
-        log.push_back(refineIntrinsic.get_num_iterations());//log
-        log.push_back(NbPoses);//log
-        for( i=0 ; i<NbPoses ; ++i )
-        {
-            log.push_back(model3DList[i]->size()); //log number of points for each pose
-            vnl_vector<double> vec(6);
-            for( j=0 ; j<6 ; ++j )
-                vec[j] = init[nbParameters + i*6 + j];
-            vnl_rigid_vector rigid_vec(vec);
-            liste_extrinsic[i] = vnl_rigid_matrix(rigid_vec);
-        }
-        std::vector< double> reprojection_error = reprojection_f.getReprojectionError(init);
-        //double sum=0;
-        log.push_back(nbPointsTotal);//log
-        for( i=0 ; i<nbPointsTotal ; ++i )
-            {
-                if(Verbose_1){std::cerr<<"reproj ("<<i<<")= "<<reprojection_error[i]<<std::endl;}
-                //sum+=reprojection_error[i]*reprojection_error[i];
-                log.push_back(reprojection_error[i]);
-            }
-        //std::cerr<<"rms ="<< sqrt(sum/ nbPointsTotal)<<std::endl;
-        camera.setfx(init[0]);
-        camera.setfy(init[1]);
-        camera.setcx(init[2]);
-        camera.setcy(init[3]);
-        camera.setAlphaC( 0.0 );
-        for( i=0 ; i<4 ; ++i )
-            camera.setkc( i, init[4+i] );
-    }
-    return true;
-}
-
-bool arlCore::intrinsicCalibration(const std::vector<arlCore::PointList::csptr> &model3DList, const std::vector <arlCore::PointList::csptr> &points2DList, unsigned int nbParameters, arlCore::Camera &camera, std::vector< vnl_rigid_matrix> &liste_extrinsic, const std::vector<double> &optimiserParameters, std::vector<double> &log)
-{
-    assert(model3DList.size()==points2DList.size());
-    //! @todo Assert( Au moins 4 points par pose )
-    std::vector<double> optimiserParametersInit, optimiserParametersRefine;// TODO the optimiserParameters should be filled independently
-    unsigned int i;
-    for( i=0 ; i<(unsigned int)optimiserParameters.size(); ++i )
-        optimiserParametersRefine.push_back(optimiserParameters[i]);
-
-    // FIXME : Initialisation possible uniquement si model3D plan et z==0
-    //! @todo Utiliser une autre initialisation si model3D non plan
-    //! @todo Si model3D plan et z!=0, calculer T le ramenant dans le plan oxy
-    if(initIntrinsicCalibration(model3DList, points2DList, camera, liste_extrinsic, optimiserParametersInit, log))
-    {
-        if(refineIntrinsicCalibration(model3DList, points2DList, nbParameters, camera, liste_extrinsic, optimiserParametersRefine, log))
-            return true;
-    }else
-    {
-        //! @todo Traiter le cas où l'initialisation ne fonctionne pas
-    }
-    return false;
-}
-
-/**
- * @brief  Initialization of the extrinsic parameter of a group of camera
- * A 3D model (chessboard...) is looked by ALL cameras and several poses of
- * the 3D model are recorded
- * We estimate here :
- * 1) the extrinsic transformations Te_k with respect to the first camera frame so that
- * sum ||P1(Te_k*Mk_i) - mk_i ||^2 is minimal. P1 is the projective function
- * of the first camera with extrinsic parameters AT IDENTITY !!
- * Mk_i are the 3D points of the model in his own frame for the k_th pose
- * mk_i are the 2D point reprojection which can be visible or not (then they are NULL) for the k_th pose
- * In the function, points which are not visible in the image are sorted and not considered when given to arlcore::planarHomography
- *
- * 2) transformations Ts_j between each camera frame with respect to the 1st camera frame, so that
- * sum ||Pj(Ts_j*Te_0*M0_i) - m0_j_i ||^2 is minimal. Pj corresponds to the projective function
- * of the j th camera with extrinsic parameters set to IDENTITY.
- * M0_i are the 3D points of the model in his own frame for the 0 th pose
- * m0_j_i are the 2D point reprojection of the 3D points for the 0 th pose of the camera j
- *
- * The estimation is realized from the pose nb 0. We could do better by averaging
- * the estimations on all poses but this seems not necessary.
- * c
- * In the algorithm the computed homography is then refined with ISPPC
- * TODO the optimisation criterion of refineExtrinsicCalibration allows to calibrate a polyscopic
- * system which field of view are not common. Nevertheless, the initilization supposes that 3D models 3D
- * are always visible in the 1st camera. This is a constraint we could remove
- */
-bool arlCore::initExtrinsicCalibration(const std::vector<PointList::csptr>& models3D, const std::vector<std::vector<std::vector<arlCore::Point::csptr > > >& liste_points2D, const std::vector<arlCore::Camera> &cameras, std::vector< arlCore::vnl_rigid_matrix> &init_rigid_trsf, const std::vector<double> &optimiserParameters, std::vector<double> &log )
-{
-    unsigned int i;
-    std::vector<const arlCore::Camera*> cams;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return initExtrinsicCalibration( models3D, liste_points2D, cams, init_rigid_trsf, optimiserParameters, log );
-}
-
-bool arlCore::initExtrinsicCalibration( const std::vector<PointList::csptr>& models3D,
-                                        const std::vector<std::vector<std::vector<arlCore::Point::csptr > > >& liste_points2D,
-                                        const std::vector<const arlCore::Camera*> &cameras,
-                                        std::vector< arlCore::vnl_rigid_matrix> &init_rigid_trsf,
-                                        const std::vector<double> &optimiserParameters,
-                                        std::vector<double> &log )
-{
-    const bool Verbose = false;
-    const unsigned int NbPoses = (unsigned int)models3D.size(), NbCameras = (unsigned int)liste_points2D[0].size();
-    log.push_back(NbPoses);
-    std::vector<double> log_homography, log_ISPPC;
-    // estimation of Te_i
-    std::vector<std::vector<arlCore::Point::csptr> > point_2D_visible_cam0(NbPoses), point_2D_visible_pose0(NbCameras-1);
-    std::vector<std::vector<arlCore::Point::csptr > > point_3D_visible_cam0(NbPoses), point_3D_visible_pose0(NbCameras-1);
-    std::vector<double> optimiserParametersISPPC;//not used here and have to be parameterized in the function (which is not good)
-    unsigned int i,j;
-    for( i=0 ; i<NbPoses ; ++i )//creation of the 2D point list and 3D point list without the invisible points
-        for( j=0 ; j<models3D[i]->size(); j++ )
-            if(liste_points2D[i][0][j]!= 0)
-            {
-                point_3D_visible_cam0[i].push_back( (*(models3D[i]))[j] );
-                point_2D_visible_cam0[i].push_back(liste_points2D[i][0][j]);
-            }
-    for( i=1 ; i<NbCameras ; ++i )
-        for( j=0 ; j<models3D[0]->size() ; j++ )
-            if(liste_points2D[0][i][j]!= 0)
-            {
-                //std::cerr<<"numero camera "<< i << "   numero point "<<j<<std::endl;
-                //std::cerr<<"models3D[0][j] " << models3D[0][j]->getCoordinates() <<std::endl;
-                //std::cerr<<"liste_points2D[0][i][j] " << liste_points2D[0][i][j]->getCoordinates() <<std::endl;
-                // point_3D_visible_pose0 contains a list of 3D model for the camera 2 -> N
-                // points that are not visible in the i th camera are not taken into account because of the if test
-                point_3D_visible_pose0[i-1].push_back( (*(models3D[0]))[j]);
-                // point_2D_visible_pose0 contains a list of 2D point reprojection of the model for the camera 2 -> N
-                point_2D_visible_pose0[i-1].push_back(liste_points2D[0][i][j]);
-            }
-    init_rigid_trsf.resize(NbCameras-1+NbPoses);
-    for( i=0 ; i<NbPoses ; ++i )// computation of the Te_k (contained in init_rigid_trsf)
-    {
-        arlCore::planarHomographyRegistration_3D_2D( *(cameras[0]), point_2D_visible_cam0[i], point_3D_visible_cam0[i], init_rigid_trsf[i], optimiserParameters, log_homography, false);
-        std::vector<const arlCore::Camera*> tmp_cam;
-        tmp_cam.push_back(cameras[0]);
-        std::vector<std::vector<arlCore::Point::csptr> > tmp_pts_2D;
-        tmp_pts_2D.push_back(point_2D_visible_cam0[i]);
-        arlCore::multiViewPointRegistration3D2D( tmp_cam, tmp_pts_2D, point_3D_visible_cam0[i], init_rigid_trsf[i], arlCore::ARLCORE_PR_ISPPC, optimiserParameters, log_ISPPC, false);
-    }
-    for( i=1 ; i<NbCameras ; ++i )
-    {
-        arlCore::planarHomographyRegistration_3D_2D( *(cameras[i]), point_2D_visible_pose0[i-1], point_3D_visible_pose0[i-1], init_rigid_trsf[NbPoses +i-1], optimiserParameters, log_homography, false);
-        //The transformation  T_calc_j (here init_rigid_trsf[NbPoses +i-1]) computed in the last step for cam i minimize the following criterion
-        //sum ||Pj(T_calc_j*M0_i) - m0_j_i ||^2 . On doit rendre Ts_j et Ts_j*Te_0 =T_calc_j
-        //std::cerr<< "HOMOGRAPHY init_rigid_trsf[NbPoses +j-1]="<<init_rigid_trsf[NbPoses +j-1]<< std::endl;
-        std::vector<const arlCore::Camera*> tmp_cam;
-        tmp_cam.push_back(cameras[i]);
-        std::vector<std::vector<arlCore::Point::csptr> > tmp_pts_2D;
-        tmp_pts_2D.push_back(point_2D_visible_pose0[i-1]);
-        arlCore::multiViewPointRegistration3D2D( tmp_cam, tmp_pts_2D, point_3D_visible_pose0[i-1], init_rigid_trsf[NbPoses +i-1], arlCore::ARLCORE_PR_ISPPC, optimiserParameters, log_ISPPC, false);
-        // now the transformation init_rigid_trsf[NbPoses +i-1] is refined
-        //std::cerr<< "ISPPC 3D2D init_rigid_trsf[NbPoses +i-1]="<<init_rigid_trsf[NbPoses +i-1]<< std::endl;
-        arlCore::vnl_rigid_matrix var;
-        var.invert( init_rigid_trsf[0] );
-        // Ts_j is computed as T_calc_j * Te_0 ^(-1)
-        init_rigid_trsf[NbPoses +i-1] = init_rigid_trsf[NbPoses +i-1] * var;
-    }
-    // TODO fill the log with log_homography and log_ISPPC
-    if(Verbose) std::cerr<<"Exit initExtrinsicCalibration "<<std::endl;
-    return true;
-}
-/**
- * @brief Refinement of the extrinsic calibration of several cameras
- * In:
- * liste_points2D : for each pose, for each camera, there is a 2D point list
- * models3D : 3D models point list (for each pose the 3D model can be different, but all points have to be seen by all camera, this has to be changed in the future)
- * cameras : intrinsic parameter list of all cameras (extrinsic parameter have to be identity)
- * init_rigid_trsf : estimated rigid transformation between each camera frame to the 3D model frame
- *
- * optimiserParameter : this works for powell and LM minimization
- * [0] = number of the optimization method (0 for LM, 1 for powell)
- * [1] = verbose mode on the reprojection error : if 1 then the reprojection error is displayed during optimization
- * [2] = f_tolerance : if 0 or nothing is given, default value is 1e-6
- * [3] = x_tolerance : if 0 or nothing is given, default value is 1e-8
- * [4] = g_tolerance : if 0 or nothing is given, default value is 1e-5
- *
- * Optimised criterion definition:
- * sum(pose k) sum(camera 1) sum(points i) ||P_1 (T_ek*Mi) - m_k_1_i ||^2
- * + sum(pose k) sum(camera j>1) sum(points i) ||P_j (T_j*T_ek*Mi) - m_k_j_i ||^2
- * where T_ek is the extrinsic transformation from 1 st camera to the 3D model in the k th pose
- * and T_j represents the transformation between the camera j optical center frame to the 1 st frame
- * WARNING : it is assumed that for each pose, the same number of point is seen by all camera
- * This constraint should be relaxed in the future
- *
- * Log[0] : final RMS reprojection error sqrt(mean squared residual)
- * Log[1] : begin RMS reprojection error sqrt(mean squared residual)
- * Log[2] ... Log[total number of residual+2] : list or reprojection error of ALL points
- * They are organized in the following way:
- * pose 0 camera 0 pt 1
- * pose 0 camera 0 pt 2
- * ..
- * pose 0 camera 0 pt nbmax of pattern 0
- * pose 0 camera 1 pt 1
- * pose 0 camera 1 pt 2
- * ..
- * pose 0 camera 1 pt nbmax of pattern 0
- * ..
- * pose 0 camera nb_total pt nbmax of pattern 0
- * pose 1 camera 0 pt 1 ...
- * pose 1 camera 0 pt nbmax of pattern 1
- * pose 1 camera 1 pt 1 ...
- * pose 1 camera 1 pt nbmax of pattern 1 ...
- * ..
- * pose 1 camera nb_total pt nbmax of pattern 1 ... etc
- */
-
-bool arlCore::refineExtrinsicCalibration( const std::vector<PointList::csptr>& models3D, const std::vector<std::vector<std::vector<arlCore::Point::csptr > > >& liste_points2D, const std::vector<arlCore::Camera> &cameras, std::vector< arlCore::vnl_rigid_matrix> &refine_rigid_trsf, const std::vector<double> &optimiserParameters, std::vector<double> &log )
-{
-    unsigned int i;
-    std::vector<const arlCore::Camera*> cams;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return refineExtrinsicCalibration( models3D, liste_points2D, cams, refine_rigid_trsf, optimiserParameters, log );
-}
-
-bool arlCore::refineExtrinsicCalibration( const std::vector<PointList::csptr>& models3D, const std::vector<std::vector<std::vector<arlCore::Point::csptr > > >& liste_points2D, const std::vector<const arlCore::Camera*> &cameras, std::vector< arlCore::vnl_rigid_matrix> &refine_rigid_trsf, const std::vector<double> &optimiserParameters, std::vector<double> &log )
-{
-    unsigned int method = 0; // Default
-    bool Verbose = false, Verbose_optim = false; // default
-    if(optimiserParameters.size()>1) Verbose_optim = (optimiserParameters[1]!=0.0);
-    if(Verbose) std::cerr<<"debut refineExtrinsicCalibration "<<std::endl;
-    if(optimiserParameters.size()>0) method = (unsigned int)optimiserParameters[0];
-    const unsigned int NbCameras = (unsigned int)cameras.size();
-    const unsigned int NbPoses = (unsigned int)models3D.size();
-    unsigned int i, j;
-    vnl_vector<double> init((NbCameras-1)*6+6*NbPoses);
-    std::vector<arlCore::vnl_rigid_matrix> solution((NbCameras-1)+NbPoses);
-    std::vector<arlCore::vnl_rigid_matrix> estimation((NbCameras-1)+NbPoses);
-    long unsigned int nbTotal2Dpoints = 0;
-    for( i=0 ; i<NbPoses ; ++i )
-        nbTotal2Dpoints+=models3D[i]->size()*NbCameras;
-    refine_rigid_trsf.resize(NbCameras-1+NbPoses);
-    for( i=0 ; i<NbCameras-1+NbPoses ; ++i )
-    {
-        arlCore::vnl_rigid_vector vec(refine_rigid_trsf[i]);
-        for( j=0 ; j<6 ; ++j )
-            init[6*i+j] = vec[j];
-    }
-    if(method == 0) // OPTIMIZATION WITH LEVENBERG-MARQUARDT
-    {
-        arlCore::ExtrinsicLS_cost_function Extrinsic_cost_func(cameras, (NbCameras-1)*6+6*NbPoses, nbTotal2Dpoints, vnl_least_squares_function::use_gradient);
-        Extrinsic_cost_func.setVerbose(Verbose_optim);
-        for( i=0 ; i<NbPoses ; ++i)
-            Extrinsic_cost_func.addPattern( liste_points2D[i], models3D[i]->getListCopy() ); //VAG FIXME PERF !!!
-        vnl_levenberg_marquardt refineExtrinsic(Extrinsic_cost_func);
-        refineExtrinsic.set_trace(true);
-        //refineExtrinsic.set_check_derivatives(1);
-        if(optimiserParameters.size()>2) refineExtrinsic.set_f_tolerance(optimiserParameters[2]);
-        else refineExtrinsic.set_f_tolerance(1e-6); // Erreur de reprojection stable (sqrt(m_error)) � 1e-3 pr�s
-        if(optimiserParameters.size()>3)
-        {
-            if(optimiserParameters[3] == 0){}//1e-8 default
-            else {refineExtrinsic.set_x_tolerance(optimiserParameters[3]);}
-        }
-        if(optimiserParameters.size()>4)
-        {
-            if(optimiserParameters[4] == 0){}//1e-5 default
-            else {refineExtrinsic.set_g_tolerance(optimiserParameters[4]);}
-        }
-        Extrinsic_cost_func.setObserver(true);
-        if(Verbose) std::cerr<<"debut minimize "<<std::endl;
-        refineExtrinsic.minimize_using_gradient(init);
-        if(Verbose) std::cerr<<"fin minimize "<<std::endl;
-        vnl_vector<double> reprojection_error(nbTotal2Dpoints);
-        Extrinsic_cost_func.getReprojectionError(init,reprojection_error);
-        log.push_back(refineExtrinsic.get_end_error());
-        log.push_back(refineExtrinsic.get_start_error());
-        for( i=0 ; i<nbTotal2Dpoints ; ++i )
-            log.push_back(reprojection_error[i]);
-    }
-    if(method == 1) // OPTIMIZATION WITH POWELL
-    {
-        arlCore::Extrinsic_cost_function Extrinsic_cost_func(cameras, (NbCameras-1)*6+6*NbPoses);
-        Extrinsic_cost_func.setVerbose(Verbose_optim);
-        for( i=0 ; i<NbPoses ; ++i)
-            Extrinsic_cost_func.addPattern( liste_points2D[i], models3D[i]->getListCopy() ); //VAG FIXME PERF !!!
-        vnl_powell refineExtrinsic(&Extrinsic_cost_func);
-        if(optimiserParameters.size()>2) refineExtrinsic.set_f_tolerance(optimiserParameters[2]);
-        else refineExtrinsic.set_f_tolerance(1e-6); // Erreur de reprojection stable (sqrt(m_error)) � 1e-3 pr�s
-        if(optimiserParameters.size()>3)
-        {
-            if(optimiserParameters[3] == 0){}//1e-8 default
-            else {refineExtrinsic.set_x_tolerance(optimiserParameters[3]);}
-        }
-        if(optimiserParameters.size()>4)
-        {
-            if(optimiserParameters[4] == 0){}//1e-5 default
-            else {refineExtrinsic.set_g_tolerance(optimiserParameters[4]);}
-        }
-        Extrinsic_cost_func.setObserver(true);
-        if(Verbose) std::cerr<<"debut minimize "<<std::endl;
-        refineExtrinsic.minimize(init);
-        if(Verbose) std::cerr<<"fin minimize "<<std::endl;
-        std::vector< double> reprojection_error = Extrinsic_cost_func.getReprojectionError(init);
-        log.push_back(refineExtrinsic.get_end_error());
-        log.push_back(refineExtrinsic.get_start_error());
-        for( i=0 ; i<nbTotal2Dpoints ; ++i )
-            log.push_back(reprojection_error[i]);
-    }
-//  Extrinsic_cost_func.plot();
-    for( i=0 ; i<NbCameras + NbPoses-1 ; ++i )
-    {
-        arlCore::vnl_rigid_vector vec;
-        for( j=0 ; j<6 ; ++j )
-            vec[j] = init[6*i+j];
-        arlCore::vnl_rigid_matrix var(vec);
-        refine_rigid_trsf[i] = var;
-    }
-    return true;
-}
-
-bool arlCore::extrinsicCalibration( const std::vector<PointList::csptr>& models3D, const std::vector<std::vector<std::vector<arlCore::Point::csptr > > >& liste_points2D, const std::vector<arlCore::Camera> &cameras, std::vector< arlCore::vnl_rigid_matrix> &refine_rigid_trsf, const std::vector<double> &optimiserParameters, std::vector<double> &log )
-{
-    unsigned int i;
-    std::vector<const arlCore::Camera*> cams;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return extrinsicCalibration( models3D, liste_points2D, cams, refine_rigid_trsf, optimiserParameters, log );
-}
-
-bool arlCore::extrinsicCalibration( const std::vector<PointList::csptr>& models3D, const std::vector<std::vector<std::vector<arlCore::Point::csptr > > >& liste_points2D, const std::vector<const arlCore::Camera*> &cameras, std::vector< arlCore::vnl_rigid_matrix> &refine_rigid_trsf, const std::vector<double> &optimiserParameters, std::vector<double> &log )
-{
-    std::vector<double> optimiserParametersInit, optimiserParametersRefine;// TODO the optimiserParameters should be filled independently
-    unsigned int i;
-    for( i=0 ; i<(unsigned int)optimiserParameters.size(); ++i )
-        optimiserParametersRefine.push_back(optimiserParameters[i]);
-    if(initExtrinsicCalibration(models3D, liste_points2D, cameras, refine_rigid_trsf, optimiserParametersInit, log ))
-    {
-        if(refineExtrinsicCalibration(models3D, liste_points2D, cameras, refine_rigid_trsf, optimiserParametersRefine, log))
-            return true;
-    }else
-    {
-        // TODO : Traiter le cas où l'initialisation ne fonctionne pas
-    }
-    return false;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Camera.cpp b/SrcLib/ARLcore/src/arlcore/Camera.cpp
deleted file mode 100644
index db84eb0..0000000
--- a/SrcLib/ARLcore/src/arlcore/Camera.cpp
+++ /dev/null
@@ -1,1137 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Camera.h>
-
-#include <sstream>
-#include <fstream>
-#include <vector>
-#include <time.h>
-
-#include <vxl/core/vxl_version.h>
-
-#include <vgl/vgl_point_2d.h>
-#include <vgl/vgl_homg_line_2d.h>
-#include <vgl/vgl_homg_point_2d.h>
-#include <vgl/vgl_homg_point_3d.h>
-#include <vgl/vgl_line_3d_2_points.h>
-//#ifdef __MACOSX__ // because vxl 1.11.0
-#if ( VXL_VERSION_MAJOR >= 1 ) && ( VXL_VERSION_MINOR >= 11 )
-#include <vgl/vgl_intersection.h>
-#endif
-#include <vgl/algo/vgl_homg_operators_2d.h>
-
-#include <vnl/vnl_vector.h>
-#include <vnl/vnl_real_npolynomial.h>
-#include <vnl/algo/vnl_rnpoly_solve.h>
-#include <vnl/algo/vnl_matrix_inverse.h>
-
-#include <arlcore/MatrixR.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/PlaneSystem.h>
-#include <arlcore/Reconst3D.h>
-#include <arlcore/Optimization.h>
-#include <arlcore/Misc.h>
-#include <arlcore/File.h>
-
-arlCore::Camera::Camera( PlaneSystem &universe ):
-//VAG Object(ARLCORE_CLASS_CAMERA),
-Particle( universe )
-{
-    m_cameraGUID.Low=0;
-    m_cameraGUID.High=0;
-    init();
-    universe.setPlaneName(getPlane(), universe.Object::getName());
-}
-
-arlCore::Camera::Camera( PlaneSystem &universe, const uint32HL &GUID ):
-//VAG Object(ARLCORE_CLASS_CAMERA),
-Particle( universe )
-{
-    m_cameraGUID.Low = GUID.Low;
-    m_cameraGUID.High = GUID.High;
-    init();
-    universe.setPlaneName(getPlane(),  universe.Object::getName());
-}
-
-arlCore::Camera::Camera( const arlCore::Camera& c ):
-//VAG Object( ARLCORE_CLASS_CAMERA, c.Object::getName() ),
-Particle( c.getPlaneSystem(), c.Particle::getName() )
-{
-    copy(c);
-    setName( c.Object::getName() );
-}
-
-arlCore::Camera& arlCore::Camera::operator=(const arlCore::Camera& c)
-{
-    copy(c);
-    return *this;
-}
-
-void arlCore::Camera::copy(const Camera& c)
-{
-    if(this==&c) return;
-    this->Object::copy(c);
-    m_cameraGUID = c.m_cameraGUID;
-    m_noCalibration = c.m_noCalibration;
-    m_extrinsic = c.m_extrinsic;
-    m_intrinsicMatrix = c.m_intrinsicMatrix;
-    m_distortionCoeffs = c.m_distortionCoeffs;
-    m_alphaC = c.m_alphaC;
-    m_Qint = c.m_Qint;
-    m_Qext = c.m_Qext;
-    m_Cint = c.m_Cint;
-    m_Cext = c.m_Cext;
-    m_Bint = c.m_Bint;
-    m_Bext = c.m_Bext;
-    m_invExtrinsic = c.m_invExtrinsic;
-    m_invIntrinsicMatrix = c.m_invIntrinsicMatrix;
-    m_opticalCenterInExtrinsicFrame = c.m_opticalCenterInExtrinsicFrame;
-    getPlaneSystem().setPlaneName(getPlane(), Object::getName());
-    Object::update();
-    return;
-}
-
-void arlCore::Camera::init( void )
-{
-    m_extrinsic.setIdentity();
-    m_invExtrinsic.setIdentity();
-    m_noCalibration=0;
-    m_Bint.fill(0.0); // FIXME Never changed, Never used
-    m_Bext.fill(0.0);
-    m_Cint.fill(0.0); // FIXME Never changed, Never used
-    m_Cint.put(2,1.0);
-    m_Cext.fill(0.0);
-    m_Qint.fill(0.0);
-    m_Qext.fill(0.0);
-    m_intrinsicMatrix.set_identity();
-    m_invIntrinsicMatrix.set_identity();
-    m_opticalCenterInExtrinsicFrame.fill(0.0);
-    m_alphaC=0;
-    m_distortionCoeffs.fill(0.0);
-    m_log << "CamRef " << m_cameraGUID.High << "-" << m_cameraGUID.Low;
-    setName(m_log.str());
-    m_log<<" created ("<<getNo()<<")";
-    log(ARLCORE_LOG_INFO_LEVEL2);
-}
-
-arlCore::Camera::~Camera( )
-{}
-
-std::string arlCore::Camera::getString( void ) const
-{
-    std::stringstream s;
-    s<<this->Object::getString();
-    s<<this->Particle::getString();
-    s<<"GUID : "<<m_cameraGUID.High<<"-"<<m_cameraGUID.Low;
-    s<<"\nCalibration #"<<m_noCalibration;
-    s<<"\nExtrinsic matrix :\n"<<m_extrinsic;
-    s<<"\nIntrinsic matrix :\n"<<m_intrinsicMatrix;
-    s<<"\nk1 : "<<m_distortionCoeffs[0];
-    s<<"\tk2 : "<<m_distortionCoeffs[1];
-    s<<"\tk3 : "<<m_distortionCoeffs[4];
-    s<<"\np1 : "<<m_distortionCoeffs[2];
-    s<<"\tp2 : "<<m_distortionCoeffs[3];
-    s<<"\tAlphaC : "<<m_alphaC<<"\n";
-    return s.str();
-}
-
-long int arlCore::Camera::getCalibrationID( void ) const
-{
-    return m_noCalibration;
-}
-
-bool arlCore::Camera::loadParameters( const std::string &fileName, long int date, unsigned int width, unsigned int height )
-{
-    std::string folder, file, ext;
-    arlString::splitFilename( fileName, folder, file, ext );
-    arlCore::File config(fileName, "Cameras");
-    const double Version = config.readHeader();
-    if(Version>0.0)
-    {
-        std::string token, filename, lastName;
-        unsigned int numero=0, xSize, ySize, year, month, day, hour, minute, second;
-        uint32HL GUID;
-        double rms;
-        bool sharedPlane = false;
-        time_t lastTime = 0;
-        while(config.getToken(token))
-        {
-            if(token=="GUID")
-            {
-                config.get(GUID.High);
-                config.get(GUID.Low);
-            }
-            if(token=="Resolution")
-            {
-                config.get(xSize);
-                config.get(ySize);
-            }
-            if(token=="Date")
-            {
-                config.get(year);
-                config.get(month);
-                config.get(day);
-            }
-            if(token=="SharedPlaneWithPreviousCamera")
-                sharedPlane = true;
-            if(token=="Time")
-            {
-                config.get(hour);
-                config.get(minute);
-                config.get(second);
-            }
-            if(token=="RMS") config.get(rms);
-            if(token=="Filename") config.getString(filename);
-            if(token=="End")
-            {
-                if(!sharedPlane) ++numero;
-                long int tps;
-                struct tm t;
-                t.tm_year = year - 1900; // years since 1900
-                t.tm_mon  = month - 1; // months since January - [0,11]
-                t.tm_mday = day; // day of the month - [1,31]
-                t.tm_hour = hour; // hours since midnight - [0,23]
-                t.tm_min  = minute; // minutes after the hour - [0,59]
-                t.tm_sec  = second; // seconds after the minute - [0,59]
-                // FIXME Arbitrairement mis a zero pour que le resultat soit repetable
-                // Est-ce pour autant correct ?
-                t.tm_wday = 0; // days since Sunday - [0,6]
-                t.tm_yday = 0; // days since January 1 - [0,365]
-                //The Daylight Saving Time flag (tm_isdst) is greater than zero if Daylight Saving Time is in effect,
-                //zero if Daylight Saving Time is not in effect, and less than zero if the information is not available
-                t.tm_isdst= 0; // daylight savings time flag
-                tps = (long int)mktime(&t);
-                //std::cout<<No<<":"<<tps<<" "<<Y<<" "<<M<<" "<<D<<" "<<H<<" "<<Mn<<" "<<S<<"\n";
-                // difftime(date2, date1) => If date1 avant date2 return +sec else -sec
-                if(m_cameraGUID.Low==GUID.Low && m_cameraGUID.High==GUID.High
-                    && tps<date && tps>=lastTime && xSize==width && ySize==height)
-                {
-                    lastTime = tps;
-                    if(folder=="") lastName = filename;
-                    else lastName = folder+"/"+filename;
-                    m_noCalibration = numero;
-                }
-                sharedPlane = false;
-            }
-        }
-        config.close();
-        if(lastTime!=0) return load(lastName);
-        std::cerr<<"Camera parameters of "<<m_cameraGUID.High<<"-"<<m_cameraGUID.Low<<" ("<<width<<","<<height<<") not found\n";
-        return false;
-    }else
-    {
-        config.close();
-        return loadOldParameters(fileName, date, width, height);
-    }
-}
-
-bool arlCore::Camera::loadOldParameters( const std::string &fileName, long int date, unsigned int width, unsigned int height )
-{
-    const unsigned int NBPARAMS = 13;
-    if(strcmp(fileName.c_str(),"")==0)
-    {
-        log(ARLCORE_LOG_ERROR,"loadParameters : Empty filename");
-        return false;
-    }
-    FILE* file = fopen( fileName.c_str(), "r" );
-    if( !file )
-    {
-        m_log<<"loadParameters:File \""<<fileName<<"\" doesn't exist";
-        log(ARLCORE_LOG_ERROR);
-        return false;
-    }
-    std::string path;
-    unsigned int pos = (unsigned int)fileName.find_last_of ("/");
-    if(pos!=std::string::npos) path = fileName.substr (0,pos+1);
-    else path="";
-    int n=NBPARAMS, Y, M, D, H, S, Mn, WH, HT;
-    float RMS;
-    long unsigned int No;
-    uint32HL GUID;
-    char name[500];
-    std::string lastName;
-    long int tps, lastTime=0;
-    struct tm t;
-    //Header : Numero is the same if 2 calibrations is calculated in the same 3D plane
-    fscanf(file, " Numero | High ID Low   |  Dim  |    Acquisition    |   RMS  |      Filename\n");
-    while(!feof(file) &&  n==NBPARAMS)
-    {
-        n=fscanf(file, "%ld %d %d %d %d %d %d %d %d %d %d %f %s\n",
-                 &No, &GUID.High, &GUID.Low, &WH, &HT, &Y, &M, &D, &H, &Mn, &S, &RMS, name );
-        if(n==NBPARAMS)
-        {
-            t.tm_year = Y - 1900; // years since 1900
-            t.tm_mon  = M - 1; // months since January - [0,11]
-            t.tm_mday = D; // day of the month - [1,31]
-            t.tm_hour = H; // hours since midnight - [0,23]
-            t.tm_min  = Mn; // minutes after the hour - [0,59]
-            t.tm_sec  = S; // seconds after the minute - [0,59]
-            // FIXME Arbitrairement mis a zero pour que le resultat soit repetable
-            // Est-ce pour autant correct ?
-            t.tm_wday = 0; // days since Sunday - [0,6]
-            t.tm_yday = 0; // days since January 1 - [0,365]
-            t.tm_isdst= 0; // daylight savings time flag
-            tps = (long int)mktime(&t);
-            //std::cout<<No<<":"<<tps<<" "<<Y<<" "<<M<<" "<<D<<" "<<H<<" "<<Mn<<" "<<S<<"\n";
-            if(m_cameraGUID.Low==GUID.Low && m_cameraGUID.High==GUID.High && tps<date && tps>=lastTime && WH==width && HT==height)
-            {
-                lastTime = tps;
-                lastName = path+name;
-                m_noCalibration = No;
-            }
-        }
-    }
-    fclose(file);
-    // TODO Si fichier non trouve, chercher le suivant ?
-    if(lastTime!=0) return load(lastName);
-    std::cerr<<"Camera parameters of "<<m_cameraGUID.Low<<"-"<<m_cameraGUID.High<<" ("<<width<<","<<height<<") not found\n";
-    return false;
-}
-
-bool arlCore::Camera::load( const std::string &fileName )
-{
-    std::ifstream f;
-    f.open (fileName.c_str(), std::fstream::in);
-    if(!f.is_open()) return false;
-    double M[5];
-    unsigned int i, j;
-    setOK(false);
-    for( i=0 ; i<4 ; ++i )
-        for( j=0; j<4; ++j )
-        {
-            f>>M[j];
-            m_extrinsic[i][j]=M[j];
-        }
-    // alpha values : Focale en X ; Focale en Y
-    for( i=0; i<5; ++i )
-        f>>M[i];
-    setfx(M[0]); // AlphaU
-    setfy(M[1]); // AlphaV
-    // Principal point : Position du centre optique u0 ; v0
-    setcx(M[2]); // u0
-    setcy(M[3]); // v0
-    setAlphaC(M[4]); // skew (Orthogonalité de la plaque CCD)
-    // Radial 1er ordre ; 2ème ordre ; Tangentiel 1er ordre ; 2ème ordre ; Radial 3ème ordre
-    for( i=0 ; i<5 ; ++i )
-    {
-        f>>M[i];
-        setkc(i,M[i]);
-    }
-    extCompute();
-    setOK(true);
-    m_log<<fileName<<" loaded";
-    log(ARLCORE_LOG_INFO_LEVEL2);
-    int fringe=0;
-    std::string token;
-    while(!f.eof())
-    {
-        f>>token;
-        if(token=="Fringe")
-        {
-            f>>fringe;
-            for( i=0 ; i<5 ; ++i )
-                f>>M[i];
-            vgl_plane_3d< double >p(M[0], M[1], M[2], M[3]);
-        }
-    }
-    f.close();
-    return true;
-}
-
-bool arlCore::Camera::save( const std::string &fileName, bool overwrite ) const
-{
-    if(strcmp(fileName.c_str(),"")==0) return false;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    FILE *file = fopen( fileName.c_str(), "w" );
-    unsigned int i, j;
-    for( i=0 ; i<4 ; ++i )
-    {
-        for( j=0; j<4; ++j )
-            fprintf(file, " %lf", m_extrinsic[i][j]);
-        fprintf(file, "\n");
-    }
-    // alpha values : Focale en X ; Focale en Y
-    fprintf( file, "%lf %lf\n", getfx(), getfy() );
-    // Principal point : Position du centre optique u0 ; v0
-    fprintf( file, "%lf %lf\n", getcx(), getcy() );
-    // alphaC=skew (Orthogonalité de la plaque CCD)
-    fprintf( file, "%lf\n",getAlphaC() );
-    // Radial 1er ordre ; 2ème ordre ; Tangentiel 1er ordre ; 2ème ordre ; Radial 3ème ordre
-    for( i=0 ; i<5 ; ++i )
-        fprintf( file, "%lf ", m_distortionCoeffs[i] );
-    fprintf( file, "0.0\n" );
-
-    fclose( file );
-    return true;
-}
-
-bool arlCore::Camera::isIntrinsicCalibrated( void ) const
-{
-    return !getIntrinsicMatrix().is_identity();
-}
-
-const vnl_matrix_fixed<double,3,3>& arlCore::Camera::getIntrinsicMatrix( void ) const
-{
-    return m_intrinsicMatrix;
-}
-
-const vnl_matrix_fixed<double,3,3>& arlCore::Camera::getInvIntrinsicMatrix( void ) const
-{
-    return m_invIntrinsicMatrix;
-}
-
-const vnl_vector<double> arlCore::Camera::getIntrinsicVector( void ) const
-{
-    vnl_vector<double> intrinsic(10);
-    intrinsic[0] = getfx();
-    intrinsic[1] = getfy();
-    intrinsic[2] = getcx();
-    intrinsic[3] = getcy();
-    intrinsic[4] = getkc(0);
-    intrinsic[5] = getkc(1);
-    intrinsic[6] = getkc(2);
-    intrinsic[7] = getkc(3);
-    intrinsic[8] = getkc(4);
-    intrinsic[9] = getAlphaC();
-    return intrinsic;
-}
-
-unsigned int arlCore::Camera::setIntrinsic( const vnl_vector<double> &p )
-{
-    unsigned int size = p.size();
-    if(size>0) setfx(p[0]);
-    if(size>1) setfy(p(1));
-    if(size>2) setcx(p(2));
-    if(size>3) setcy(p(3));
-    if(size>4) setkc(0,p(4));
-    if(size>5) setkc(1,p(5));
-    if(size>6) setkc(2,p(6));
-    if(size>7) setkc(3,p(7));
-    if(size>8) setkc(4,p(8));
-    if(size>9) setAlphaC(p(9));
-    if(size>9) return 10;
-    else return size;
-}
-
-const vnl_vector_fixed<double,5>& arlCore::Camera::getDistortion ( void )const
-{
-    return m_distortionCoeffs;
-}
-
-const arlCore::vnl_rigid_matrix& arlCore::Camera::getExtrinsic (void ) const
-{
-    return m_extrinsic;
-}
-
-const arlCore::vnl_rigid_matrix& arlCore::Camera::getInvExtrinsic (void ) const
-{
-    return m_invExtrinsic;
-}
-
-double arlCore::Camera::getcx() const
-{
-    return m_intrinsicMatrix(0,2);
-}
-
-void arlCore::Camera::setcx( double a)
-{
-    m_intrinsicMatrix(0,2)=a;
-    m_Qint.put(0,2,getcx());
-    m_invIntrinsicMatrix = vnl_matrix_inverse<double>(m_intrinsicMatrix.as_matrix());
-}
-
-double arlCore::Camera::getcy() const
-{
-    return m_intrinsicMatrix(1,2);
-}
-
-void arlCore::Camera::setcy( double a)
-{
-    m_intrinsicMatrix(1,2)=a;
-    m_Qint.put(1,2,getcy());
-    m_invIntrinsicMatrix = vnl_matrix_inverse<double>(m_intrinsicMatrix.as_matrix());
-}
-
-double arlCore::Camera::getfx() const
-{
-    return m_intrinsicMatrix(0,0);
-}
-
-void arlCore::Camera::setfx( double a)
-{
-    m_intrinsicMatrix(0,0)=a;
-    m_Qint.put(0,0,getfx());
-    m_invIntrinsicMatrix = vnl_matrix_inverse<double>(m_intrinsicMatrix.as_matrix());
-}
-
-double arlCore::Camera::getfy() const
-{
-    return m_intrinsicMatrix(1,1);
-}
-
-void arlCore::Camera::setfy( double a)
-{
-    m_intrinsicMatrix(1,1)=a;
-    m_Qint.put(1,1,getfy());
-    m_invIntrinsicMatrix = vnl_matrix_inverse<double>(m_intrinsicMatrix.as_matrix());
-}
-
-double arlCore::Camera::getAlphaC() const
-{
-    return m_alphaC;
-}
-
-void arlCore::Camera::setAlphaC( double a)
-{
-    m_alphaC=a;
-}
-
-double arlCore::Camera::getkc(unsigned int i) const
-{
-    if(i<5)
-        return m_distortionCoeffs.get(i);
-    else return 0.0;
-}
-
-bool arlCore::Camera::setkc(unsigned int i, double a)
-{
-    if(i>=5) return false;
-    m_distortionCoeffs.put(i,a);
-    return true;
-}
-
-void arlCore::Camera::extCompute(void)
-{
-    unsigned int i,j;
-    m_invExtrinsic.invert(getExtrinsic());
-    vnl_vector_fixed< double, 3 >opticalCenter(0.0,0.0,0.0);
-    focalFrameToExtrinsicFrame(opticalCenter,m_opticalCenterInExtrinsicFrame);
-
-    vnl_matrix_fixed<double,3,4> T;
-    T.fill(0.0);
-    T.put(0,0,getcx());
-    T.put(1,1,getcy());
-    T.put(0,2,getfx());
-    T.put(1,2,getfy());
-    T.put(2,2,1.0);
-//  for( i=0 ; i<2 ; ++i )  // FIXME INUTILE
-//      T.put(0,3,0.0);     // FIXME INUTILE
-    vnl_matrix_fixed<double,3,4> P = T * getExtrinsic();
-
-    m_Bext.put(0,P.get(0,3));
-    m_Bext.put(1,P.get(1,3));
-
-    m_Cext.put(0,P.get(2,0));
-    m_Cext.put(1,P.get(2,1));
-    m_Cext.put(2,P.get(2,2));
-
-    for( i=0 ; i<2 ; ++i ) // FIXME See definition : Qext<2,3>
-        for( j=0 ; j<2 ; ++j )
-            m_Qext.put(i,j,P.get(i,j));
-}
-
-const vnl_matrix_fixed<double,2,3>& arlCore::Camera::getQint( void ) const
-{
-    return m_Qint;
-}
-
-const vnl_matrix_fixed<double,2,3>& arlCore::Camera::getQext( void ) const
-{
-    return m_Qext;
-}
-
-const vnl_vector_fixed<double,3>& arlCore::Camera::getCint( void ) const
-{
-    return m_Cint;
-}
-
-const vnl_vector_fixed<double,3>& arlCore::Camera::getCext( void ) const
-{
-    return m_Cext;
-}
-
-const vnl_vector_fixed<double,2>& arlCore::Camera::getBint( void ) const
-{
-    return m_Bint;
-}
-
-const vnl_vector_fixed<double,2>& arlCore::Camera::getBext( void ) const
-{
-    return m_Bext;
-}
-
-bool arlCore::Camera::setExtrinsic( const vnl_rigid_matrix& T )
-{
-    m_extrinsic = T;
-    extCompute();
-    return true;
-}
-
-///////////////////////////FONCTIONS PROJECTIONS//////////////////////////
-unsigned int arlCore::Camera::project3DPoint(PointList::csptr list3D, PointList::sptr list2D, bool focalPlane) const
-{
-    list2D->clear();
-    list2D->setDimension(2);
-    Point::sptr point2D = Point::New(2);
-    unsigned int i, n=0;
-    for( i=0 ; i<list3D->size() ; ++i )
-        if(project3DPoint( (*list3D)[i] , point2D, focalPlane ) )
-        {
-            list2D->push_back(point2D);
-            ++n;
-        }
-        else
-        {
-            //std::cout<<"ERROR dans project3DPoint(PointList::csptr list3D, PointList& list2D, bool focalPlane)"<<std::endl;
-            //std::cerr<<"project3DPoint ERROR on "<<i<<"th point\n";
-        }
-    return n;
-}
-
-bool arlCore::Camera::project3DPoint(Point::csptr  pt3D, Point::sptr pt2D, bool focalPlane) const
-{
-    assert(pt3D->size()==3 && pt2D->size()==2);
-    if(pt3D->size()<3 || pt2D->size()<2) return false;
-    unsigned int i;
-    vnl_vector_fixed<double,4> point3D;
-    for( i=0 ; i<3 ; ++i )
-        point3D(i)=(*pt3D)[i];
-    point3D(3)=1.0;
-    vnl_vector_fixed<double,2> point2D;
-    if(project3DPoint (point3D, point2D, focalPlane))
-    {
-        for( i=0 ; i<2 ; ++i )
-            pt2D->set(i,point2D(i));
-        return true;
-    }else return false;
-}
-
-// Projection d'un point 3D sur le plan image (focalPlane=true) ou le plan pixel (focalPlane=false)
-// en fonction de la matrice de projection et des parametres de distortion de la camera
-// Les notations sont celles de la matlab camera calibration toolbox
-bool arlCore::Camera::project3DPoint(const vnl_vector_fixed<double,4> &point3D, vnl_vector_fixed<double,2> &pt2D, bool focalPlane) const
-{
-    double xn_x, xn_y, xd_x, xd_y, r2, r4, r6;
-    double radial_disto, tang_disto_x, tang_disto_y;
-    if(!focalPlane)
-    {
-        assert(point3D(3)==1.0);
-        // on applique la matrice extrinseque au point3D pour le placer dans le
-        // repere de la camera : Matrix4x4 * HVec4
-        vnl_vector_fixed<double,4> point3DRepCam = getExtrinsic() * point3D;
-        // on calcule les coordonnees normalisées de la projection de point3DRepCam
-        // dans le plan focal image de la caméra
-        if(point3DRepCam.get(2)==0)
-        {
-            //std::cout<<"ERROR dans project3DPoint(const vnl_vector_fixed<double,4> &point3D, vnl_vector_fixed<double,2> &pt2D, bool focalPlane)"<<std::endl;
-            return false;
-        }
-        assert(point3DRepCam.get(2)!=0); // Le point est dans le plan parallèle à la focale passant par le centre optique
-        xn_x = point3DRepCam.get(0)/point3DRepCam.get(2);
-        xn_y = point3DRepCam.get(1)/point3DRepCam.get(2);
-    }else
-    {
-        assert(point3D(2)==1.0); // Le point n'est pas dans le plan de la focale
-        xn_x = point3D(0);
-        xn_y = point3D(1);
-    }
-    // on calcule en avance r² = x²+y²
-    r2 = xn_x * xn_x + xn_y * xn_y;
-    r4 = r2*r2;
-    r6 = r4*r2;
-    // radial_disto = 1 + kc[0]* r2 + kc[1]* r4 + kc[4]* r6;
-    radial_disto = 1 + getkc(0)* r2 + getkc(1)* r4 + getkc(4)* r6;
-    tang_disto_x = 2 * getkc(2) * xn_x * xn_y + getkc(3) * (r2 + 2 * xn_x * xn_x);
-    tang_disto_y = getkc(2) * (r2 + 2 * xn_y * xn_y) + 2 * getkc(3) * xn_x * xn_y;
-    // en fait [ xd_x ] = (1+kc(1)*r² + kc(2)*r²*r² + kc(5)*r²*r²*r²)* [ xn_x ] + [ tang_disto_x ]
-    //         [ xd_y ]   (                                         )  [ xn_y ]   [ tang_disto_y ]
-    xd_x = radial_disto * xn_x + tang_disto_x;
-    xd_y = radial_disto * xn_y + tang_disto_y;
-    // application de la matrice intrinsèque
-    pt2D.put(0,getfx() * (xd_x + getAlphaC() * xd_y) + getcx());
-    pt2D.put(1,getfy() * xd_y + getcy());
-    return true;
-}
-
-bool arlCore::Camera::undistort2DPoint(Point::csptr  p2D, Point::sptr p2D_undistorted) const
-{
-    const double pixSquareMax = 1e-50;
-    const unsigned int IterationsMax = 50;
-    if(!p2D->isVisible() || p2D->size()<2) return false;
-    double pinit[3]={p2D->x(),p2D->y(),1.0};
-    vnl_vector<double> points2DH(3,3,pinit),points2DH_undistorted(3);
-    unsigned int i, nbIterations=0;
-    double xn_x, xn_y, xd_x, xd_y;
-    double radial_disto, tang_disto_x, tang_disto_y;
-    double r2, r4, r6, kc[5];
-    for( i=0 ; i<5 ; ++i )
-        kc[i] = getkc(i);
-    vnl_vector_fixed<double,3> result = getInvIntrinsicMatrix() * points2DH;
-    xn_x = result(0);
-    xn_y = result(1);
-    // prise en compte de la distorsion de manière non linéaire et non précise
-    // on calcule le point non-distordu en approximant la distorsion
-    if(true)
-    {   // on calcule en avance r² = x²+y²
-        double tmp_x = xn_x, tmp_y = xn_y;
-        r2 = xn_x * xn_x + xn_y * xn_y;
-        r4 = r2*r2;
-        r6 = r4*r2;
-        xd_x = xn_x;
-        xd_y = xn_y;
-        i=0;
-        do
-        {
-            ++nbIterations;
-            tmp_x = xn_x;
-            tmp_y = xn_y;
-            // calcul de la distortion à appliquer
-            radial_disto = 1 + kc[0]* r2 + kc[1]* r4 + kc[4]* r6;
-            tang_disto_x = 2 * kc[2] * xn_x * xn_y + kc[3] * (r2 + 2 * xn_x * xn_x);
-            tang_disto_y = kc[2] * (r2 + 2 * xn_y * xn_y) + 2 * kc[3] * xn_x * xn_y;
-            // en fait [ xd_x ] = (1+kc(1)*r² + kc(2)*r²*r² + kc(5)*r²*r²*r²)* [ xn_x ] + [ tang_disto_x ]
-            //         [ xd_y ]   (                                         )  [ xn_y ]   [ tang_disto_y ]
-            xn_x = (xd_x - tang_disto_x)/radial_disto;
-            xn_y = (xd_y - tang_disto_y)/radial_disto;
-            r2 = xn_x * xn_x + xn_y * xn_y;
-            r4 = r2*r2;
-            r6 = r4*r2;
-        }while( (tmp_x-xn_x)*(tmp_x-xn_x)*getfx()*getfx() + (tmp_y-xn_y)*(tmp_y-xn_y)*getfy()*getfy() > pixSquareMax && nbIterations<IterationsMax );
-        points2DH_undistorted.put(0, xn_x);
-        points2DH_undistorted.put(1, xn_y);
-        points2DH_undistorted.put(2, 1.0);
-        p2D_undistorted->set(0, (getIntrinsicMatrix() * points2DH_undistorted)(0));
-        p2D_undistorted->set(1, (getIntrinsicMatrix() * points2DH_undistorted)(1));
-        //cerr << "sans correction parfaite : " << result[i] << endl;
-    }
-    return true;
-}
-
-bool arlCore::Camera::projectiveLine( const vnl_vector_fixed<double,3> &focalPt2D, vgl_line_3d_2_points <double> &line ) const
-{
-    unsigned int i;
-    vnl_vector_fixed<double,4> m, m_cam, c_cam, C(0.0, 0.0, 0.0, 1.0);
-    for( i=0 ; i<3 ; ++i )
-        m[i] = focalPt2D[i];
-    m[3] = 1.0;
-    m_cam = getInvExtrinsic() * m;
-    c_cam = getInvExtrinsic() * C;
-    vgl_point_3d <double> m_cam_vgl(m_cam[0],m_cam[1],m_cam[2]);
-    vgl_point_3d <double> c_cam_vgl(c_cam[0],c_cam[1],c_cam[2]);
-    if(m_cam_vgl==c_cam_vgl) return false;
-    vgl_line_3d_2_points <double> line1(m_cam_vgl, c_cam_vgl);
-    line = line1;
-    return true;
-}
-
-bool arlCore::Camera::unitFocalPlaneToPixelPlane( const vgl_point_2d<double>&p1, vgl_point_2d<double>& p2 ) const
-{
-    double xn_x, xn_y, xd_x, xd_y, r2, r4, r6;
-    double radial_disto, tang_disto_x, tang_disto_y;
-    xn_x = p1.x();
-    xn_y = p1.y();
-    // on calcule en avance r² = x²+y²
-    r2 = xn_x*xn_x + xn_y*xn_y;
-    r4 = r2*r2;
-    r6 = r4*r2;
-    radial_disto = 1 + getkc(0) * r2 + getkc(1) * r4 + getkc(4) * r6;
-    tang_disto_x = 2 * getkc(2) * xn_x * xn_y + getkc(3) * (r2 + 2 * xn_x * xn_x);
-    tang_disto_y = 2 * getkc(3) * xn_x * xn_y + getkc(2) * (r2 + 2 * xn_y * xn_y);
-    // en fait [ xd_x ] = (1+kc(1)*r² + kc(2)*r²*r² + kc(5)*r²*r²*r²)* [ xn_x ] + [ tang_disto_x ]
-    //         [ xd_y ]   (                                         )  [ xn_y ]   [ tang_disto_y ]
-    xd_x = radial_disto * xn_x + tang_disto_x;
-    xd_y = radial_disto * xn_y + tang_disto_y;
-    // application de la matrice intrinsèque
-    p2.x()=getfx() * (xd_x + getAlphaC() * xd_y) + getcx();
-    p2.y()=getfy() * xd_y + getcy();
-    return true;
-}
-
-bool arlCore::Camera::pixelPlaneToUnitFocalPlane( Point::csptr p2D, Point::sptr p3D, bool perfectDisto ) const
-{
-    assert(p2D->size()==2);
-    assert(p3D->size()==3);
-    const double pixSquareMax = 1e-50;
-    const unsigned int IterationsMax = 50;
-    if(!p2D->isVisible() || p2D->size()<2) return false;
-    const double tol=1e-12;
-    p3D->fill(0.0);
-    if(p3D->size()>2) p3D->set(2, 1.0);
-    double pinit[3]={p2D->x(),p2D->y(),1.0};
-    vnl_vector<double> points2DH(3,3,pinit);
-    unsigned int i;
-    vnl_matrix_fixed<double,3,3> Intrinseq, var;
-    double xn_x, xn_y, xd_x, xd_y;
-    double radial_disto, tang_disto_x, tang_disto_y;
-    double r2, r4, r6, kc[5];
-    // DECLARATION DES VARIABLES NECESSAIRES A LA RESOLUTION POLYNOMIALE
-    vnl_real_npolynomial P1, P2;
-    vnl_vector< double > coef1(10), coef2(10);
-    vnl_matrix< unsigned int > power1(10,2), power2(10,2);
-    vcl_vector< vnl_vector< double > * > roots;
-    vcl_vector<vnl_real_npolynomial*> PolyToSolve;
-    for( i=0 ; i<5 ; ++i )
-        kc[i] = getkc(i);
-    vnl_vector_fixed<double,3> result = getInvIntrinsicMatrix() * points2DH;
-    xn_x = result(0);
-    xn_y = result(1);
-    // prise en compte de la distorsion de mani�re non lin�aire et non pr�cise
-    // on calcule le point non-distordu en approximant la distorsion
-    if(!perfectDisto)
-    {   // on calcule en avance r� = x�+y�
-        double tmp_x = xn_x, tmp_y = xn_y;
-        r2 = xn_x * xn_x + xn_y * xn_y;
-        r4 = r2*r2;
-        r6 = r4*r2;
-        xd_x = xn_x;
-        xd_y = xn_y;
-        i=0;
-        do
-        {
-            i++;
-            tmp_x = xn_x;
-            tmp_y = xn_y;
-            // calcul de la distortion � appliquer
-            radial_disto = 1 + kc[0]* r2 + kc[1]* r4 + kc[4]* r6;
-            tang_disto_x = 2 * kc[2] * xn_x * xn_y + kc[3] * (r2 + 2 * xn_x * xn_x);
-            tang_disto_y = kc[2] * (r2 + 2 * xn_y * xn_y) + 2 * kc[3] * xn_x * xn_y;
-            // en fait [ xd_x ] = (1+kc(1)*r� + kc(2)*r�*r� + kc(5)*r�*r�*r�)* [ xn_x ] + [ tang_disto_x ]
-            //         [ xd_y ]   (                                         )  [ xn_y ]   [ tang_disto_y ]
-            xn_x = (xd_x - tang_disto_x)/radial_disto;
-            xn_y = (xd_y - tang_disto_y)/radial_disto;
-            r2 = xn_x * xn_x + xn_y * xn_y;
-            r4 = r2*r2;
-            r6 = r4*r2;
-        }while( (tmp_x-xn_x)*(tmp_x-xn_x)*getfx()*getfx() + (tmp_y-xn_y)*(tmp_y-xn_y)*getfy()*getfy() > pixSquareMax && i<IterationsMax );
-        //cerr<< "NOMBRE D'ITERATIONS : " << i << endl;
-        p3D->set(0, xn_x);
-        p3D->set(1, xn_y);
-        //cerr << "sans correction parfaite : " << result[i] << endl;
-    }
-    // recherche des valeurs exactes non distordues avec une r�solution polynomiale
-    // xd = x + k[0]. x^3+ k[0].y^2.x +k[1]x^5 +2k[1]x^3y^2 +k[1]y^4.x +2.k[2]x.y +3k[3]x^2 +k[3]y^2
-    // yd = y + k[0]. y^3+ k[0].x^2.y +k[1]y^5 +2k[1]y^3x^2 +k[1]x^4.y +2.k[3]x.y +3k[2]y^2 +k[2]x^2
-    if(perfectDisto)
-    {
-        coef1.put(0 , 1.0);
-        coef1.put(1 , kc[0]);
-        coef1.put(2 , kc[0]);
-        coef1.put(3 , kc[1]);
-        coef1.put(4 , 2*kc[1]);
-        coef1.put(5 , kc[1]);
-        coef1.put(6 , 2*kc[2]);
-        coef1.put(7 , 3*kc[3]);
-        coef1.put(8 , kc[3]);
-        coef1.put(9 , -1.0 * xn_x);
-        coef2.put(0 , 1.0);
-        coef2.put(1 , kc[0]);
-        coef2.put(2 , kc[0]);
-        coef2.put(3 , kc[1]);
-        coef2.put(4 , 2*kc[1]);
-        coef2.put(5 , kc[1]);
-        coef2.put(6 , 2*kc[3]);
-        coef2.put(7 , 3*kc[2]);
-        coef2.put(8 , kc[2]);
-        coef2.put(9 , -1.0 * xn_y);
-        power1.put(0,0,1);power1.put(0,1,0);
-        power1.put(1,0,3);power1.put(1,1,0);
-        power1.put(2,0,1);power1.put(2,1,2);
-        power1.put(3,0,5);power1.put(3,1,0);
-        power1.put(4,0,3);power1.put(4,1,2);
-        power1.put(5,0,1);power1.put(5,1,4);
-        power1.put(6,0,1);power1.put(6,1,1);
-        power1.put(7,0,2);power1.put(7,1,0);
-        power1.put(8,0,0);power1.put(8,1,2);
-        power1.put(9,0,0);power1.put(9,1,0);
-        for( i=0 ; i<10 ; ++i )
-        {
-            power2.put(i, 0, power1(i,1));
-            power2.put(i, 1, power1(i,0));
-        }
-        P1.set(coef1,power1);
-        P2.set(coef2,power2);
-        PolyToSolve.push_back(&P1);
-        PolyToSolve.push_back(&P2);
-        vnl_rnpoly_solve Solve( PolyToSolve );
-        roots = Solve.realroots(tol);
-        if(roots.size()>0)
-        {   // Pas de racines : FIXME
-            p3D->set(0, roots[0]->get(0));
-            p3D->set(1, roots[0]->get(1));
-        }else std::cerr<<"Camera::pixelPlaneToUnitFocalPlane : No root\n";
-        PolyToSolve.clear();
-        roots.clear();
-    }
-    return true;
-}
-
-bool arlCore::Camera::pixelPlaneToUnitFocalPlane( Point::csptr p, vnl_vector_fixed<double,3>& r, bool perfectDisto ) const
-{
-    unsigned int i;
-    Point::sptr p2 = Point::New(3);
-    bool b=pixelPlaneToUnitFocalPlane(p, p2, perfectDisto);
-    for( i=0 ; i<3 ; ++i )
-        r.put(i, (*p2)[i]);
-    return b;
-}
-
-bool arlCore::Camera::pixelPlaneToUnitFocalPlane( Point::csptr p, vgl_point_3d<double>& r, bool perfectDisto ) const
-{
-    Point::sptr p2 = Point::New(3);
-    bool b=pixelPlaneToUnitFocalPlane(p, p2, perfectDisto);
-    r.set(p2->x(), p2->y(), p2->z());
-    return b;
-}
-
-bool arlCore::Camera::pixelPlaneToUnitFocalPlane( Point::csptr p, vgl_point_2d<double>& r, bool perfectDisto ) const
-{
-    Point::sptr p2 = Point::New(3);
-    bool b=pixelPlaneToUnitFocalPlane(p, p2, perfectDisto);
-    r.set(p2->x(), p2->y());
-    return b;
-}
-
-bool arlCore::Camera::pixelPlaneToUnitFocalPlane( const vgl_point_2d<double>& p, vgl_point_3d<double>& r, bool perfectDisto ) const
-{
-    return pixelPlaneToUnitFocalPlane(Point::New( p.x(), p.y() ), r, perfectDisto);
-}
-
-bool arlCore::Camera::focalFrameToExtrinsicFrame( const vnl_vector_fixed< double, 3 >& uff, vnl_vector_fixed< double, 3 >& ef ) const
-{
-    vnl_vector<double> point3DRepCam(4), point3D_H(4);
-    point3D_H.put(0,uff(0));
-    point3D_H.put(1,uff(1));
-    point3D_H.put(2,uff(2));
-    point3D_H.put(3,1.0);
-    point3DRepCam = getInvExtrinsic() * point3D_H;
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        ef.put(i, point3DRepCam(i));
-    return true;
-}
-
-bool arlCore::Camera::focalFrameToExtrinsicFrame( const vgl_point_3d< double >& uff, vgl_point_3d< double >& ef ) const
-{
-    vnl_vector<double> point3DRepCam(4), point3D_H(4);
-    point3D_H.put(0,uff.x());
-    point3D_H.put(1,uff.y());
-    point3D_H.put(2,uff.z());
-    point3D_H.put(3,1.0);
-    point3DRepCam = getInvExtrinsic() * point3D_H;
-    ef.set(point3DRepCam(0), point3DRepCam(1), point3DRepCam(2));
-    return true;
-}
-
-
-bool arlCore::Camera::focalToPixelLine( double a, double b, double c, arlCore::Point::sptr pt1, arlCore::Point::sptr pt2 ) const
-{
-    // FIXME : Cas gal actuel : Droite relativement horizontale : Intersection avec les bords gauche et droit de la ROI
-    // Traiter les autres cas : Intersection avec les bords haut et bas, pour les 2 points
-    // Soient G, bord gauche, D, droit, H Haut, B, Bas
-    // 7 cas : G-D G-H G-B H-B B-H H-D B-D, cas déjà traité : G-D
-    // Traiter d'urgence H-B B-H
-
-    // Si l'equation de la droite dans le plan focal est ax+by+c=0
-    // x = (u -u0)/alpha_u    et  y = (v -v0)/alpha_v
-    // calcul de l'ordonnée pour u=pt1->x
-    pt1->y( getfy()/b *(-1*a*pt1->x()/getfx() + a*getcx()/getfx() +b*getcy()/getfy() - c) );
-    // calcul de l'ordonnée pour u=pt2->x
-    pt2->y( getfy()/b *(-1*a*pt2->x()/getfx() + a*getcx()/getfx() +b*getcy()/getfy() - c) );
-    return true;
-}
-
-bool arlCore::Camera::focalToPixelLine( double a, double b, double c, arlCore::Point::csptr pixOrg, arlCore::Point::csptr pixDst, PointList::sptr pl, unsigned int nbSegments ) const
-{
-    const bool PerfectDisto = true;
-    unsigned int i, n=nbSegments;
-    pl->clear();
-    vgl_point_2d<double> focOrg, focDst, pixCur;
-    if(!pixelPlaneToUnitFocalPlane( pixOrg, focOrg, PerfectDisto )) return false;
-    if(!pixelPlaneToUnitFocalPlane( pixDst, focDst, PerfectDisto )) return false;
-    vnl_vector_fixed<double,2> AB( focDst.y()-focOrg.x(), focDst.y()-focOrg.y() );
-    if(n<1)
-    {
-        const double DeltaX = fabs(pixDst->x()-pixOrg->x());
-        const double DeltaY = fabs(pixDst->y()-pixOrg->y());
-        if(DeltaX>DeltaY) n = (unsigned int)DeltaX;
-        else n = (unsigned int)DeltaY;
-        if( n<1 ) return false;
-    }
-    const double Step = ((double)AB.two_norm()) / (double)n;
-    double next = Step;
-    const vnl_vector_fixed<double,2> N = AB.normalize();
-    pl->push_back(pixOrg);
-    for( i=0 ; i<n-1 ; ++i, next+=Step )
-    {
-        vgl_point_2d<double> focCur( focOrg.x()+next*N[0], focOrg.y()+next*N[1] );
-        if(!unitFocalPlaneToPixelPlane( focCur, pixCur )) return false;
-        pl->push_back( Point::New(pixCur.x(), pixCur.y()) );
-    }
-    pl->push_back(pixDst);
-    return true;
-}
-
-bool arlCore::Camera::pixelToFocalLine( const vgl_line_2d<double> &line2D, vgl_line_3d_2_points<double> &line3D ) const
-{
-    const bool PerfectDisto = true;
-    const vgl_vector_2d<double> Dir = line2D.direction();
-    const vgl_homg_line_2d<double> HLine(line2D);
-    const vgl_homg_point_2d<double> Center( getcx(), getcy() );
-    const vgl_homg_point_2d<double> Central2DHPoint = vgl_homg_operators_2d<double>::closest_point( HLine, Center );
-    const vgl_point_2d<double> Central2DPoint( Central2DHPoint );
-    vgl_point_3d<double> central3DPoint;
-    if(!pixelPlaneToUnitFocalPlane( Central2DPoint, central3DPoint, PerfectDisto )) return false;
-    assert(central3DPoint.z()==1.0);
-    vgl_point_3d<double> second3DPoint(central3DPoint);
-    second3DPoint.set(second3DPoint.x()+Dir.x(), second3DPoint.y()+Dir.y(), 1.0);
-    line3D = vgl_line_3d_2_points<double>( central3DPoint, second3DPoint );
-    return false;
-}
-
-bool arlCore::getEpipolar( arlCore::Point::csptr p, const vnl_matrix_fixed<double,4,4> &PM, double &a, double &b, double &c)
-{
-    if(p->size()<2) return false;
-    vnl_vector_fixed<double,3> v(p->x(),p->y(),1.0);
-    return getEpipolar( v, PM, a, b, c );
-}
-
-bool arlCore::getEpipolar(const vnl_vector_fixed<double,3> &point, const vnl_matrix_fixed<double,4,4> &PM, double &a, double &b, double &c)
-{   // PM=cams[1]->getExtrinsic()).as_matrix()*vnl_matrix_inverse<double>(cams[0]->getExtrinsic());
-    // Calcul la droite épipolaire dans la camera 1 du point de la caméra 0
-    // cf livre horaud p192 - La droite se situe dans le plan focal (x,y,1.0)
-    const double x = point(0);
-    const double y = point(1);
-    const double a1 = (PM(1,3)*PM(2,0) - PM(2,3)*PM(1,0));
-    const double a2 = (PM(1,3)*PM(2,1) - PM(2,3)*PM(1,1));
-    const double a3 = (PM(1,3)*PM(2,2) - PM(2,3)*PM(1,2));
-    a = a1*x + a2*y + a3;
-    const double b1 = (PM(2,3)*PM(0,0) - PM(0,3)*PM(2,0));
-    const double b2 = (PM(2,3)*PM(0,1) - PM(0,3)*PM(2,1));
-    const double b3 = (PM(2,3)*PM(0,2) - PM(0,3)*PM(2,2));
-    b = b1*x + b2*y + b3;
-    const double c1 = (PM(0,3)*PM(1,0) - PM(1,3)*PM(0,0));
-    const double c2 = (PM(0,3)*PM(1,1) - PM(1,3)*PM(0,1));
-    const double c3 = (PM(0,3)*PM(1,2) - PM(1,3)*PM(0,2));
-    c = c1*x + c2*y + c3;
-    return true;
-}
-
-bool arlCore::getEpipolar( arlCore::Point::csptr p, const vnl_matrix_fixed<double,4,4> &PM, vgl_line_2d< double > &d)
-{
-    if(p->size()<2) return false;
-    vnl_vector_fixed<double,3> v(p->x(),p->y(),1.0);
-    return getEpipolar( v, PM, d );
-}
-
-bool arlCore::getEpipolar(const vnl_vector_fixed<double,3> &point, const vnl_matrix_fixed<double,4,4> &PM, vgl_line_2d< double > &d)
-{
-    double a, b, c;
-    arlCore::getEpipolar(point, PM, a, b, c);
-    vgl_point_2d< double > vglPts2D[2];
-    if( b<-0.5 || b>0.5 )
-    {
-        vglPts2D[0].set(-100, (a*100.0-c)/b);
-        vglPts2D[1].set(+100, (-a*100-c)/b);
-    }
-    else
-    {
-        vglPts2D[0].set((b*100-c)/a, -100);
-        vglPts2D[1].set((-b*100-c)/a, +100);
-    }
-    vgl_line_2d< double > d1(vglPts2D[0],vglPts2D[1]);
-    d=d1;
-    return true;
-}
-
-// Methode : le vecteur [viewPoint;center] définit l'axe Z du repere lie au centre optique
-// de la camera. Pour choisir les axes X et Y (y en a pas de bon par defaut), il faut choisir
-// un vecteur dans le plan normal a [viewPoint;center] passant par viewPoint
-// l'equation de ce plan normal est ax+by+cz+d = 0
-// ou a = coord selon x du vecteur [viewPoint;center]
-// et b = coord selon y du vecteur [viewPoint;center]
-// et c = coord selon z du vecteur [viewPoint;center]
-// et d = -( a*viewPoint(x) + b*viewPoint(y) + c*viewPoint(z) )
-//
-// Ensuite on choisit arbitrairement un vecteur dans ce plan pour definir l'axe X
-// du repere centre optique : pour cela on choisit x=1 (si a!=0), y=1 (si b!=0)
-// z= (-d - ax - by)/c . Ca nous fournit un vecteur qu'on normalise.
-// On a donc definit un repere lie au centre optique. Reste a calculer la transformation
-// rigide entre ce repere et le repere monde. Pour cela, on effectue un recalage 3D3D
-// entre deux reperes. Simpliste !
-bool arlCore::Camera::syntheticCamera( Point::csptr center, Point::csptr viewPoint, const std::vector< double > & intrinsicParams)
-{
-    setOK(false);
-    assert(intrinsicParams.size()==10);
-    arlCore::Point::sptr  XaxisPoint = arlCore::Point::New(3);
-    arlCore::Point::sptr  ZaxisPoint = arlCore::Point::New(3);
-    arlCore::Point::sptr O_monde = arlCore::Point::New(0,0,0);
-    arlCore::Point::sptr Ox_monde = arlCore::Point::New(1,0,0);
-    arlCore::Point::sptr Oz_monde = arlCore::Point::New(0,0,1);
-
-    arlCore::PointList::sptr points_source  = arlCore::PointList::New();
-    arlCore::PointList::sptr points_cible   = arlCore::PointList::New();
-    vnl_vector_fixed<double,3> vecteur_normal, vecteur_Ox_camera;
-    double d=0, test_egalite;
-    unsigned int i;
-    test_egalite = (center->x()-viewPoint->x())*(center->x()-viewPoint->x())
-                 + (center->y()-viewPoint->y())*(center->y()-viewPoint->y())
-                 + (center->z()-viewPoint->z())*(center->z()-viewPoint->z());
-    if( test_egalite < 1e-4 ) //TODO si c des mm alors on devrait mettre 1 mm
-        return false;
-    // a<=>vecteur_normal[0], b<=>vecteur_normal[1] et c<=>vecteur_normal[2]
-    for( i=0 ; i<3 ; ++i )
-    {
-        vecteur_normal.put(i,(*center)[i] - (*viewPoint)[i]);
-        d += -vecteur_normal[i]*(*viewPoint)[i];
-    }
-    //std::cerr << "vecteur_normal = " <<  vecteur_normal << std::endl;
-    //std::cerr << "d = " <<  d << std::endl;
-    XaxisPoint->fill(1.0);
-    if( vecteur_normal[0] != 0 )
-        XaxisPoint->set(0, (-d-vecteur_normal[1]-vecteur_normal[2])/ vecteur_normal[0]);
-    else // Le vecteur normal est parallele au plan yOz du repere monde
-        if( vecteur_normal[1] != 0 )
-            XaxisPoint->set(1,(-d-vecteur_normal[2])/vecteur_normal[1]);
-        else // Le vecteur normal est parallele a l'axe Oz du repere monde
-            XaxisPoint->set(2,-d/vecteur_normal[2]);
-    // Creation du vecteur Ox dans repere optique
-    for( i=0 ; i<3 ; ++i )
-        vecteur_Ox_camera.put(i, (*XaxisPoint)[i]-(*viewPoint)[i]);
-    vecteur_Ox_camera.normalize();
-    vecteur_normal.normalize();
-    //std::cerr << "vecteur_Ox_camera normalise = " <<  vecteur_Ox_camera << std::endl;
-    for( i=0 ; i<3 ; ++i )
-    {
-        XaxisPoint->set(i, (*viewPoint)[i]+vecteur_Ox_camera[i]);
-        // Calcul du point sur l'axe z du repere optique eloigne de 1 unite du centre optique
-        ZaxisPoint->set(i, (*viewPoint)[i]+vecteur_normal[i]);
-    }
-    //std::cerr << "XaxisPoint = " <<  XaxisPoint->getString() << std::endl;
-    //std::cerr << "vecteur_normal normalise = " <<  vecteur_normal << std::endl;
-    //std::cerr << "ZaxisPoint = " <<  ZaxisPoint.getString() << std::endl;
-    // On a maintenant 3 points du repere optique (center, XaxisPoint, ZaxisPoint)
-    // a mettre en correspondance avec 3 points du repere monde
-    // Le recalage de ces 3 points nous fournit la transformation extrinseque recherchee
-    points_source->push_back( O_monde );
-    points_source->push_back( Ox_monde );
-    points_source->push_back( Oz_monde );
-    points_cible->push_back( viewPoint );
-    points_cible->push_back( XaxisPoint );
-    points_cible->push_back( ZaxisPoint );
-    vnl_rigid_matrix extrinsic_trsf;
-    extrinsic_trsf.register3D3D( points_cible, points_source, false );
-    //initialisation des parametres de la camera
-    setExtrinsic(extrinsic_trsf);
-    setfx(intrinsicParams[0]);
-    setfy(intrinsicParams[1]);
-    setcx(intrinsicParams[2]);
-    setcy(intrinsicParams[3]);
-    for( i=0 ; i<5 ; ++i )
-        setkc(i,intrinsicParams[4+i]);
-    setAlphaC(intrinsicParams[9]);
-    return setOK(true);
-}
diff --git a/SrcLib/ARLcore/src/arlcore/CameraList.cpp b/SrcLib/ARLcore/src/arlcore/CameraList.cpp
deleted file mode 100644
index 30287fa..0000000
--- a/SrcLib/ARLcore/src/arlcore/CameraList.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/CameraList.h>
-
-arlCore::CameraList::CameraList( PlaneSystem &universe ):
-Particle( universe, "Camera list" )
-{}
-
-arlCore::CameraList::~CameraList( void )
-{}
-
-void arlCore::CameraList::push_back( const uint32HL &GUID, unsigned int width, unsigned int heigth )
-{
-    m_widths.push_back(width);
-    m_heigths.push_back(heigth);
-    m_cameras.push_back( arlCore::Camera( getPlaneSystem(), GUID) );
-}
-
-void arlCore::CameraList::addCamera( const uint32HL &GUID, unsigned int width, unsigned int heigth )
-{
-    push_back( GUID, width, heigth );
-}
-
-unsigned int arlCore::CameraList::size( void ) const
-{
-    return (unsigned int)m_cameras.size();
-}
-
-const arlCore::Camera& arlCore::CameraList::operator[]( unsigned int i ) const
-{
-    return m_cameras[i];
-}
-
-const arlCore::Camera& arlCore::CameraList::back( void ) const
-{
-    return m_cameras.back();
-}
-
-arlCore::Camera& arlCore::CameraList::operator[]( unsigned int i )
-{
-    return m_cameras[i];
-}
-
-arlCore::Camera& arlCore::CameraList::back( void )
-{
-    return m_cameras.back();
-}
-
-const std::vector<arlCore::Camera>& arlCore::CameraList::getList( void ) const
-{
-    return m_cameras;
-}
-
-unsigned int arlCore::CameraList::calibrate( const std::string &calibFile, long int date )
-{
-    if(calibFile=="") return 0;
-    const unsigned int NbCameras = this->size();
-    unsigned int i, n=0;
-    std::vector<long int>calibrationNo( NbCameras );
-    for( i=0 ; i<NbCameras ; ++i )
-    {
-        if((*this)[i].loadParameters( calibFile, date, m_widths[i], m_heigths[i] )) ++n;
-        calibrationNo[i] = (*this)[i].getCalibrationID();
-        if( i==0 || ( calibrationNo[0]>0 && calibrationNo[i]>0 && calibrationNo[i]==calibrationNo[0] ))
-        {   // CommonPlane on first camera
-            // TODO Create a common plane by calibration ID ?
-            getPlaneSystem().setTrf( getPlane(), (*this)[i].getPlane(), (*this)[i].getExtrinsic() );
-        }
-    }
-    return n;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Colour.cpp b/SrcLib/ARLcore/src/arlcore/Colour.cpp
deleted file mode 100644
index 9c4b762..0000000
--- a/SrcLib/ARLcore/src/arlcore/Colour.cpp
+++ /dev/null
@@ -1,91 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Colour.h>
-#include <arlcore/Misc.h>
-
-const arlCore::Colour arlCore::Colour::Black( 0, 0, 0 );
-const arlCore::Colour arlCore::Colour::Red( 255, 0, 0 );
-const arlCore::Colour arlCore::Colour::Green( 0, 255, 0 );
-const arlCore::Colour arlCore::Colour::Blue( 0, 0, 255 );
-const arlCore::Colour arlCore::Colour::ElectricBlue( 0, 255, 255 );
-const arlCore::Colour arlCore::Colour::Yellow( 255, 255, 0 );
-const arlCore::Colour arlCore::Colour::Violet( 255, 0, 255 );
-const arlCore::Colour arlCore::Colour::White( 255, 255, 255 );
-
-arlCore::Colour::Colour( const Colour &c ):
-m_R(c.m_R),
-m_G(c.m_G),
-m_B(c.m_B)
-{}
-
-arlCore::Colour::Colour( unsigned int R, unsigned int G, unsigned int B ):
-m_R(R),
-m_G(G),
-m_B(B)
-{}
-
-arlCore::Colour::~Colour( void )
-{}
-
-arlCore::Colour& arlCore::Colour::operator=(const Colour& c)
-{
-    if(this==&c) return *this;
-    m_R = c.m_R;
-    m_G = c.m_G;
-    m_B = c.m_B;
-    return *this;
-}
-
-std::string arlCore::Colour::getString( void ) const    
-{
-    std::stringstream s;
-    s<<m_R<<","<<m_G<<","<<m_B;
-    return s.str();
-}
-
-void arlCore::Colour::setColour( const Colour &c )
-{
-    c.getColour(m_R,m_G,m_B);
-}
-
-void arlCore::Colour::setColour( unsigned int R, unsigned int G, unsigned int B )
-{
-    m_R=R;
-    m_G=G;
-    m_B=B;
-}
-
-void arlCore::Colour::setMapColour( long int n )
-{
-    static std::vector<arlCore::Colour> colours;
-    if(colours.size()==0)
-    {
-        colours.push_back(arlCore::Colour::Red);
-        colours.push_back(arlCore::Colour::Green);
-        colours.push_back(arlCore::Colour::Blue);
-        colours.push_back(arlCore::Colour::ElectricBlue);
-        colours.push_back(arlCore::Colour::Yellow);
-        colours.push_back(arlCore::Colour::Violet);
-        colours.push_back(arlCore::Colour::White);
-    }
-    long int i;
-    if(n<0) i = (-n)%colours.size();
-    else i = n%colours.size();
-    *this = colours[i];
-/*  int step = 30;
-    m_R=0,m_G=0,m_B=0;
-    if(n<0) m_B=255+step*n;
-    else m_R=255-step*n;
-    if(arlCore::even(n)) m_G=m_R, m_R=m_B, m_B=m_G;*/
-}
-
-void arlCore::Colour::getColour( unsigned int &R, unsigned int &G, unsigned int &B ) const
-{
-    R=m_R;
-    G=m_G;
-    B=m_B;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Command.cpp b/SrcLib/ARLcore/src/arlcore/Command.cpp
deleted file mode 100644
index dc69bb2..0000000
--- a/SrcLib/ARLcore/src/arlcore/Command.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Command.h>
-
-/*#include <sstream>
-#include <fstream>
-#include <iostream>
-*/
-#ifdef _WIN32
-#include <conio.h>
-#endif // _WIN32
-
-arlCore::Command::Command( const std::string &fileName )
-{}
-
-arlCore::Command::~Command( void )
-{}
-
-bool arlCore::Command::get( const std::string& commandName )
-{
-    std::map< std::string, unsigned int >::const_iterator it;
-    it = m_byName.find(commandName);
-    if( it==m_byName.end() ) return false;
-    const bool Persistent = false;
-    bool value = m_values[it->second];
-    if(!Persistent) m_values[it->second] = false;
-    return value;
-}
-
-bool arlCore::Command::refresh( void )
-{
-    char key;
-#ifdef _WIN32
-    if(kbhit()==0) return false;
-    key = getch();
-#else // _WIN32
-    // TODO Test keys for Linux
-    return false;
-#endif // _WIN32
-    std::map< char, unsigned int >::const_iterator it;
-    it = m_byKey.find(key);
-    if( it==m_byKey.end() ) return false;
-    const bool Switch = true;
-    bool value = m_values[it->second];
-    if(Switch) value = !value; else value = true;
-    m_values[it->second] = value;
-    return true;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/FieldCorrection.cpp b/SrcLib/ARLcore/src/arlcore/FieldCorrection.cpp
deleted file mode 100644
index 03aa7f9..0000000
--- a/SrcLib/ARLcore/src/arlcore/FieldCorrection.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/FieldCorrection.h>
-#include <fstream>
-#include <vnl/algo/vnl_powell.h>
-
-#include <arlcore/Misc.h>
-#include <arlcore/Optimization.h>
-
-arlCore::FieldCorrector::FieldCorrector( void ):
-m_degree( 0 ),
-m_correction( false )
-{}
-
-arlCore::FieldCorrector::FieldCorrector( unsigned int degree ):
-m_degree( degree ),
-m_correction( false )
-{
-    const unsigned int NbEquations = 3;
-    m_parameters.set_size(nbPolynomialParameters(degree, NbEquations));
-    m_parameters.fill(0.0);
-}
-
-arlCore::FieldCorrector::FieldCorrector( const FieldCorrector& O )
-{
-    copy(O);
-}
-
-bool arlCore::FieldCorrector::activCorrection( bool b )
-{
-    m_correction = b;
-    return m_correction;
-}
-
-arlCore::FieldCorrector::~FieldCorrector( void )
-{}
-
-bool arlCore::FieldCorrector::copy( const FieldCorrector& O )
-{
-    m_parameters = O.m_parameters;
-    m_degree = O.m_degree;
-    m_correction = O.m_correction;
-    return true;
-}
-
-std::string arlCore::FieldCorrector::getString( void ) const
-{
-    std::stringstream s;
-    s<<"Polynomial of degree "<<m_degree<<" Nb parameters="<<m_parameters.size()<<"\n";
-    s<<m_parameters<<"\n";
-    // TODO Display equations
-//  for( i=0 ; i<NbEquations ; ++i )
-//      s<<C[i]<<" + "<<C[i+3]<<"*Z + "<<C[i+6]<<"*Z*Z + "<<C[i+9]<<"*Y + "<<C[i+12]<<"*Y*Z + "<<C[i+15]<<"*Y*Y + "<<C[i+18]<<"*X + "<<C[i+21]<<"*X*Z + "<<C[i+24]<<"*X*Y + "<<C[i+27]<<"*X*X\n";
-    return s.str();
-}
-
-bool arlCore::FieldCorrector::setDegree( unsigned int degree )
-{
-    if(degree<1) return false;
-    const unsigned int NbEquations = 3;
-    m_degree = degree;
-    m_parameters.set_size(nbPolynomialParameters(m_degree, NbEquations));
-    m_parameters.fill(0.0);
-    return true;
-}
-
-unsigned int arlCore::FieldCorrector::getDegree( void )
-{
-    return m_degree;
-}
-
-unsigned int arlCore::FieldCorrector::getNbParameters( void )
-{
-    return m_parameters.size();
-}
-
-bool arlCore::FieldCorrector::setParameters( const vnl_vector<double> &parameters )
-{
-    if(parameters.size()!=getNbParameters())
-    {
-        const unsigned int NbEquations = 3;
-        unsigned int degree = 1;
-        while(nbPolynomialParameters(degree, NbEquations)!=parameters.size() && degree<10)
-        {
-            ++degree;
-        }
-        if(nbPolynomialParameters(degree, NbEquations)!=parameters.size()) return false;
-        setDegree(degree);
-    }
-    m_parameters = parameters;
-    return true;
-}
-
-bool arlCore::FieldCorrector::load( const std::string &fileName )
-{
-    unsigned int i;
-    std::fstream f;
-    f.open (fileName.c_str(), std::fstream::in);
-    if(!f.is_open()) return false;
-    unsigned int nbParameters;
-    f>>nbParameters;
-    vnl_vector<double> parameters(nbParameters);
-    for( i=0 ; i<nbParameters ; ++i )
-        f>>parameters[i];
-    f.close();
-    return setParameters(parameters);
-}
-
-bool arlCore::FieldCorrector::correct( Point::csptr P1, Point::sptr P2 ) const
-{   // P1=distorted P2=undistorded
-    assert(P1->size()==3 && P2->size()==3);
-    const unsigned int NbEquations = 3;
-    const bool Verbose = false;
-    P2->copy(P1);
-    if(!m_correction || P1->size()!=3 || P2->size()!=3) return false;
-    vnl_vector<double> coordinates(NbEquations), distorsion;
-    coordinates[0] = P1->x();
-    coordinates[1] = P1->y();
-    coordinates[2] = P1->z();
-    bool b = computePolynomial( m_degree, m_parameters, coordinates, distorsion );
-    if(b)
-    {
-        P2->x(coordinates[0]-distorsion[0]);
-        P2->y(coordinates[1]-distorsion[1]);
-        P2->z(coordinates[2]-distorsion[2]);
-        if(Verbose) std::cout<<"Distorsion correction : "<<distorsion<<"\n";
-    }
-    return b;
-}
-
-bool arlCore::FieldCorrector::correct( const vnl_rigid_matrix &T1, vnl_rigid_matrix &T2 ) const
-{   // T1=distorded T2=undistorded
-    const unsigned int NbEquations = 3;
-    const bool Verbose = true;
-    T2.copy(T1);
-    if(!m_correction) return false;
-    vnl_vector<double> coordinates(NbEquations), distorsion;
-    coordinates[0] = T1.getX();
-    coordinates[1] = T1.getY();
-    coordinates[2] = T1.getZ();
-    bool b = computePolynomial( m_degree, m_parameters, coordinates, distorsion );
-    if(b)
-    {
-        T2.setTranslation(coordinates[0]-distorsion[0], coordinates[1]-distorsion[1], coordinates[2]-distorsion[2]);
-        if(Verbose) std::cout<<"Distorsion correction : "<<distorsion<<"\n";
-    }
-    return b;
-}
-
-bool arlCore::FieldCorrector::correct( vnl_rigid_matrix &T ) const
-{
-    vnl_rigid_matrix T0;
-    if(!correct(T, T0)) return false;
-    T.copy(T0);
-    return true;
-}
-
-bool arlCore::fieldCalibration( PointList::csptr real, PointList::csptr distorded, unsigned int degree, vnl_vector<double> &parameters, double &RMS )
-{
-    if(degree<1) return false;
-    Polynomial_cost_function pcf( real, distorded, degree );
-    vnl_powell op(&pcf);
-    parameters.set_size(pcf.getNbParameters());
-    parameters.fill(0.0);
-    op.minimize(parameters);
-    RMS = op.get_end_error();
-    return true;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/File.cpp b/SrcLib/ARLcore/src/arlcore/File.cpp
deleted file mode 100644
index 140d3d4..0000000
--- a/SrcLib/ARLcore/src/arlcore/File.cpp
+++ /dev/null
@@ -1,195 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/File.h>
-
-#include <iostream>
-
-#include <arlcore/Misc.h>
-
-arlCore::File::File( const std::string &fullFileName, const std::string &fileType ):
-m_ok(false),
-m_version(0.0),
-m_fileType(fileType),
-m_error(""),
-m_fullFilename(fullFileName),
-m_position(0)
-{
-    if(m_fullFilename=="") return;
-    arlString::splitFilename( m_fullFilename, m_folder, m_filename, m_extension );
-    m_file.open(m_fullFilename.c_str(), std::fstream::in);
-    if(!m_file.is_open())
-    {
-        m_file.open(m_filename.c_str(), std::fstream::in);
-        if(!m_file.is_open())
-        {
-            std::stringstream s;
-            s<<m_fullFilename<<" doesn't exist\n";
-            setError(s.str());
-            return;
-        }
-    }
-    m_ok = true;
-}
-
-arlCore::File::~File( void )
-{
-    close();
-}
-
-void arlCore::File::close( void )
-{
-    m_file.close();
-}
-
-bool arlCore::File::isOK( void )
-{
-    return m_ok;
-}
-
-bool arlCore::File::getEOF( void )
-{
-    return m_file.eof();
-}
-
-
-bool arlCore::File::rewind( void )
-{
-    if(!m_file.is_open()) return false;
-    m_file.clear();
-    m_file.seekg(0, std::ios::beg);
-    return true;
-}
-
-bool arlCore::File::recordCurrentPosition( void )
-{
-    if(!m_file.is_open()) return false;
-    m_position = m_file.tellg();
-    return true;
-}
-
-
-bool arlCore::File::rewindRecordedPosition( void )
-{
-    if(!m_file.is_open() || m_position==0) return false;
-    m_file.seekg(m_position);
-    return true;
-}
-
-std::string arlCore::File::getError( void )
-{
-    return m_error;
-}
-
-double arlCore::File::getVersion( void )
-{
-    return m_version;
-}
-
-void arlCore::File::setError( const std::string &error )
-{
-    const bool Verbose = true;
-    m_error = error;
-    if(Verbose) std::cerr<<m_error<<"\n";
-}
-
-std::string arlCore::File::getFullFilename( void )
-{
-    return m_fullFilename;
-}
-
-std::string arlCore::File::getFilename( void )
-{
-    return m_filename;
-}
-
-std::string arlCore::File::getFolder( void )
-{
-    return m_folder;
-}
-
-std::string arlCore::File::getExtension( void )
-{
-    return m_extension;
-}
-
-double arlCore::File::readHeader( void )
-{
-    if(!isOK()) return 0.0;
-    std::stringstream s;
-    std::string token, text;
-    unsigned int n=0;
-    do
-    {
-        m_file>>token;
-        if(token=="FileType")
-        {
-            m_file>>text;
-            if(text!=m_fileType)
-            {
-                s<<"Filetype '"<<text<<"' unexpected ("<<m_fileType<<" requested)";
-                setError(s.str());
-                return m_version;
-            }
-            n=(n|1);
-        }
-        if(token=="Version") {m_file>>m_version; n=(n|2);}
-        if(m_file.eof())
-        {
-            s<<"End of file unexpected : "<<m_filename;
-            setError(s.str());
-            return m_version;
-        }
-    } while(n!=3);
-    return m_version;
-}
-
-bool arlCore::File::getToken( std::string& token )
-{
-    m_file>>token;
-    return !m_file.eof();
-}
-
-std::string arlCore::File::getString( void )
-{
-    std::string value;
-    m_file>>value;
-    return value;
-}
-
-bool arlCore::File::getString( std::string &value )
-{
-    m_file>>value;
-    return true;
-}
-
-std::string arlCore::File::getPath( void )
-{
-    std::stringstream s;
-    std::string value;
-    m_file>>value;
-    s<<getFolder()<<"/"<<value;
-    return s.str();
-}
-
-std::fstream& arlCore::File::getStream( void )
-{
-    return m_file;
-}
-
-std::string arlCore::File::getFiletype( const std::string &fileName )
-{
-    std::string token, fileType = "";
-    std::fstream file;
-    file.open(fileName.c_str(), std::fstream::in);
-    if(file.is_open())
-    {
-        file>>token;
-        if(token=="FileType")
-            file>>fileType;
-    }
-    return fileType;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/ICP.cpp b/SrcLib/ARLcore/src/arlcore/ICP.cpp
deleted file mode 100644
index a751483..0000000
--- a/SrcLib/ARLcore/src/arlcore/ICP.cpp
+++ /dev/null
@@ -1,533 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/ICP.h>
-
-#include <vnl/vnl_trace.h>
-#include <vnl/vnl_inverse.h>
-#include <vnl/vnl_transpose.h>
-
-#include <vnl/algo/vnl_symmetric_eigensystem.h>
-#include <vnl/algo/vnl_levenberg_marquardt.h>
-#include <vnl/algo/vnl_powell.h>
-
-#ifdef ANN
-#include <ANN/ANN.h>
-#endif // ANN
-
-#include <arlcore/Optimization.h>
-#include <arlcore/vnl_rigid_vector.h>
-
-arlCore::ICP::ICP( arlCore::PointList::csptr model, arlCore::PointList::csptr cloud, bool justVisible ):
-m_point2PointMode(true),
-m_modelMesh(),
-m_cloud(),
-m_initialization(false),
-m_justVisible(justVisible),
-m_modelSize(0),
-m_cloudSize(0),
-m_modelPoints(0),
-m_cloudPoints(0),
-m_Pk(0),
-m_Yk(0),
-m_Pi(0),
-m_ANNtree(0),
-m_nn_idx(0),
-m_squaredDists(0),
-m_maxIterations(50),
-m_nbIterations(0),
-m_startError(-1),
-m_endError(-1)
-{
-    m_solution.setIdentity();
-#ifdef ANN
-    const unsigned int m_dimension = model->getDimension();
-    assert(m_dimension==cloud->getDimension());
-    m_modelGravity.set_size(m_dimension);
-    m_cloudGravity.set_size(m_dimension);
-    unsigned int i, j, n;
-    if(justVisible) m_modelSize = model->visibleSize();
-    else m_modelSize = model->size();
-    if(m_modelSize<1) return;
-    m_modelPoints = annAllocPts( m_modelSize, m_dimension );
-    for( i=0, n=0 ; i<m_modelSize ; ++i )
-        if((*model)[i])
-            if(!justVisible || (justVisible && (*model)[i]->isVisible()))
-            {
-                for( j=0 ; j<m_dimension ; ++j )
-                    m_modelPoints[n][j]=(*model)[i]->get(j);
-                ++n;
-            }
-    m_modelSize = n;
-    if(justVisible) m_cloudSize = cloud->visibleSize();
-    else m_cloudSize = cloud->size();
-    if(m_modelSize<1 || m_cloudSize<1)
-    {
-        annDeallocPts( m_modelPoints );
-        m_modelPoints = 0;
-        return;
-    }
-    m_cloudPoints = annAllocPts( m_cloudSize, m_dimension );
-    for( i=0, n=0 ; i<m_cloudSize ; ++i )
-        if((*cloud)[i])
-            if(!justVisible || (justVisible && (*cloud)[i]->isVisible()))
-            {
-                for( j=0 ; j<m_dimension ; ++j )
-                    m_cloudPoints[n][j]=(*cloud)[i]->get(j);
-                ++n;
-            }
-    m_cloudSize = n;
-    if(m_cloudSize<1)
-    {
-        annDeallocPts( m_modelPoints );
-        annDeallocPts( m_cloudPoints );
-        m_modelPoints = 0;
-        m_cloudPoints = 0;
-        return;
-    }
-    m_Pk = annAllocPts( m_cloudSize, m_dimension );
-    m_Yk = annAllocPts( m_cloudSize, m_dimension );
-    m_Pi = annAllocPts( m_cloudSize, m_dimension );
-    const int BucketSize = 1;
-    m_ANNtree = new ANNkd_tree( m_modelPoints, m_modelSize, m_dimension, BucketSize, ANN_KD_SL_MIDPT );
-    m_nbNN = 1;
-    m_nn_idx = new ANNidx[m_nbNN];
-    m_squaredDists = new ANNdist[m_nbNN];
-#endif // ANN
-}
-
-arlCore::ICP::ICP( arlCore::Mesh::csptr model, arlCore::PointList::csptr cloud, bool justVisible ):
-m_point2PointMode(true),
-m_modelMesh(),
-m_cloud(),
-m_initialization(false),
-m_justVisible(justVisible),
-m_modelSize(0),
-m_cloudSize(0),
-m_modelPoints(0),
-m_cloudPoints(0),
-m_Pk(0),
-m_Yk(0),
-m_Pi(0),
-m_ANNtree(0),
-m_nn_idx(0),
-m_squaredDists(0),
-m_maxIterations(50),
-m_nbIterations(0),
-m_startError(-1),
-m_endError(-1)
-{
-    m_solution.setIdentity();
-    if(justVisible) m_modelSize = model->getPointList()->visibleSize();
-    else m_modelSize = model->getPointList()->size();
-    if(justVisible) m_cloudSize = cloud->visibleSize();
-    else m_cloudSize = cloud->size();
-}
-
-
-
-void arlCore::ICP::initSolution( const arlCore::vnl_rigid_matrix &M )
-{
-    m_solution = M;
-    initialization();
-}
-
-const arlCore::vnl_rigid_matrix& arlCore::ICP::getSolution( void ) const
-{
-    return m_solution;
-}
-
-arlCore::ICP::~ICP( void )
-{
-#ifdef ANN
-    if(m_ANNtree) delete m_ANNtree;
-    if(m_modelPoints) annDeallocPts( m_modelPoints );
-    if(m_cloudPoints) annDeallocPts( m_cloudPoints );
-    if(m_Pk) annDeallocPts( m_Pk );
-    if(m_Yk) annDeallocPts( m_Yk );
-    if(m_Pi) annDeallocPts( m_Pi );
-    if(m_nn_idx) delete[] m_nn_idx;
-    if(m_squaredDists) delete[] m_squaredDists;
-    annClose();
-#endif // ANN
-}
-
-bool arlCore::ICP::setMaxIterations( unsigned int n )
-{
-    if(n<1) return false;
-    m_maxIterations = n;
-    return true;
-}
-
-unsigned int arlCore::ICP::getModelSize( void ) const
-{
-    return m_modelSize;
-}
-
-unsigned int arlCore::ICP::getCloudSize( void ) const
-{
-    return m_cloudSize;
-}
-
-unsigned int arlCore::ICP::getNbIterations( void ) const
-{
-    return m_nbIterations;
-}
-
-double arlCore::ICP::getStartError( void ) const
-{
-    return m_startError;
-}
-
-double arlCore::ICP::getEndError( void ) const
-{
-    return m_endError;
-}
-
-double arlCore::ICP::optimisePowell( void )
-{
-    unsigned int i;
-    arlCore::OptimiseICP optimizer( *this );
-    //optimizer.setObserver(true);
-    vnl_powell powell(&optimizer);
-    const arlCore::vnl_rigid_vector V( m_solution );
-    vnl_vector<double> init(6);
-    for( i=0 ; i<6 ; ++i )
-        init(i) = V[i];
-    powell.minimize(init);
-    m_solution.copy(arlCore::vnl_rigid_vector(init));
-    m_startError = powell.get_start_error();
-    m_endError = powell.get_end_error();
-    m_nbIterations = powell.get_num_iterations();
-    //m_nbIterations = optimizer.getNbIterations();
-    m_solution.copy(arlCore::vnl_rigid_vector(init));
-    m_solution.setRMS(m_endError);
-    return m_endError;
-}
-
-double arlCore::ICP::optimiseLS( void )
-{
-    unsigned int i;
-    m_startError = m_endError;
-    arlCore::OptimiseICP_LS optimizer( *this, vnl_least_squares_function::use_gradient );
-    //optimizer.setObserver(true);
-    vnl_levenberg_marquardt lm(optimizer);
-    const arlCore::vnl_rigid_vector V( m_solution );
-    vnl_vector<double> init(6);
-    for( i=0 ; i<6 ; ++i )
-        init(i) = V[i];
-    lm.minimize_using_gradient(init);
-    //m_startError = lm.get_start_error();
-    //m_endError = lm.get_end_error();
-    m_nbIterations = lm.get_num_iterations();
-    //m_nbIterations = optimizer.getNbIterations();
-    m_solution.copy(arlCore::vnl_rigid_vector(init));
-    m_endError = computeCriterion( m_solution );
-    m_solution.setRMS(m_endError);
-    return m_endError;
-}
-
-double arlCore::ICP::computeCriterion( const arlCore::vnl_rigid_matrix &M )
-{
-    vnl_vector< double > fx;
-    return computeCriterion( M, fx );
-}
-
-double arlCore::ICP::computeCriterion( const arlCore::vnl_rigid_matrix &M, vnl_vector< double > &fx )
-{
-    vnl_vector<double> RMS(1, 0.0), nbPoints(1, 0.0);
-    const arlCore::vnl_rigid_matrix InvM = M.computeInverse();
-    unsigned int i, j, noTriangle;
-    double n = 0.0, result = 0.0;
-    if(m_point2PointMode)
-    {   // Points to points
-#ifdef ANN
-        const unsigned int Dimension = 3;
-        vnl_vector_fixed<double,3> traInit = InvM.getTranslation();
-        vnl_matrix_fixed<double,3,3> rotInit = InvM.getRotation();
-        const double Epsilon = 0.0;// Error bound
-        ANNpoint Pt = annAllocPt(Dimension); // Query point
-        for( i=0 ; i<m_cloudSize ; ++i )
-        {   // Search the matching point for every point of cloud
-            for( j=0 ; j<3; ++j )
-                Pt[j] = rotInit[j][0]*m_cloudPoints[i][0]+rotInit[j][1]*m_cloudPoints[i][1]+rotInit[j][2]*m_cloudPoints[i][2]+traInit[j];
-            m_ANNtree->annkSearch( Pt, m_nbNN, m_nn_idx, m_squaredDists, Epsilon );
-            if(fx.size()>i) fx[i] = m_squaredDists[0];
-            RMS[0] += m_squaredDists[0];
-        }
-        annDeallocPt(Pt);
-        n = (double)m_cloudSize;
-#endif // ANN
-    }else
-    {   // Point to mesh
-        assert(m_cloud!=0 && m_modelMesh!=0);
-        RMS.set_size((unsigned int)m_modelMesh->getTriangles().size());
-        RMS.fill(0.0);
-        nbPoints.set_size(RMS.size());
-        nbPoints.fill(0.0);
-        unsigned int i;
-        arlCore::Point::sptr point = arlCore::Point::New(3);
-        for( i=0 ; i<m_cloud->size() ; ++i )
-            if(m_cloud->get(i))
-                if(!m_justVisible || m_cloud->get(i)->isVisible())
-                {
-                    InvM.trf(m_cloud->get(i), point);
-                    const double SquaredDist = m_modelMesh->computeDistance2(point, noTriangle);
-                    if(SquaredDist>0.0)
-                    {
-                        RMS[noTriangle] += SquaredDist;
-                        if(fx.size()>i) fx[i] = SquaredDist;
-                        nbPoints[noTriangle] += 1;
-                    }
-                }
-    }
-    assert(nbPoints.size()==RMS.size());
-    if(RMS.size()==1)
-    {
-        if(nbPoints[0]>0) return sqrt(RMS[i]/nbPoints[i]);
-        else return -1.0;
-    }
-    for( i=0 ; i<RMS.size() ; ++i )
-        if(nbPoints[i]>0)
-        {
-            result += sqrt(RMS[i]/nbPoints[i]);
-            n += 1.0;
-        }
-    if(n>0) return result/n;
-    else return -1;
-}
-
-bool arlCore::ICP::initialization( void )
-{
-#ifdef ANN
-    if(m_cloudSize<1 || !m_point2PointMode) return false;
-    unsigned int i, j;
-    arlCore::vnl_rigid_matrix invS = m_solution.computeInverse();
-    m_traInit = invS.getTranslation();
-    m_rotInit = invS.getRotation();
-    m_cloudGravity.fill(0.0);
-    for( i=0 ; i<m_cloudSize ; ++i )
-        for( j=0 ; j<3; ++j )
-        {
-            m_Pi[i][j] = m_Pk[i][j] = m_rotInit[j][0]*m_cloudPoints[i][0]+m_rotInit[j][1]*m_cloudPoints[i][1]+m_rotInit[j][2]*m_cloudPoints[i][2]+m_traInit[j];
-            m_cloudGravity[j] += m_Pi[i][j];
-        }
-    m_cloudGravity /= (double)m_cloudSize;
-    m_initialization=true;
-    return true;
-#endif // ANN
-    return false;
-}
-
-bool arlCore::ICP::solve( void )
-{
-    const double Tau = 10e-8;
-    const bool Verbose = false;
-    m_startError = -1.0;
-    m_nbIterations = 0;
-#ifdef ANN
-    if(!m_point2PointMode) return false;
-    m_endError = FLT_MAX/2.0;
-    double previousRMS = FLT_MAX;
-    if(!m_initialization)
-        if(!initialization())
-            return false;
-//  http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/trans/tp/&toc=comp/trans/tp/1992/02/i2toc.xml&DOI=10.1109/34.121791
-//  http://ieeexplore.ieee.org/iel1/34/3469/00121791.pdf?tp=&arnumber=121791&isnumber=3469
-    unsigned int i, j, k;
-    vnl_quaternion<double> qr(0,0,0,1);
-    vnl_matrix_fixed<double,3,3> Id3, Ricp, Spy;
-    Id3.set_identity();
-    vnl_matrix_fixed<double,4,4> QSpy;
-    vnl_vector_fixed<double,3> Delta;
-    while( fabs(m_endError-previousRMS)>Tau && m_nbIterations<m_maxIterations ) //&& RMS>RMSMax )
-    {
-        ++m_nbIterations;
-        std::cout<<m_nbIterations<<" ";
-        previousRMS = m_endError;
-        computeError(); // step 1
-        if(m_startError<0) m_startError = m_endError;
-        // step 2
-        // Calculate the cross-variance matrix between m_Pk and Yo
-        // Cov( P0, m_Yk ) = 1/n*somme(P0*m_Yk') - ComP0*Comm_Yk'
-        Spy.set_identity();
-        for( i=0 ; i<m_cloudSize ; ++i )
-          for( j=0 ; j<3 ; ++j )
-            for( k=0 ; k<3 ; ++k )
-            Spy[j][k]+= m_Pi[i][j]*m_Yk[i][k];
-        for( i=0 ; i<3 ; ++i )
-          for( j=0 ; j<3 ; ++j )
-            Spy[i][j] = Spy[i][j]/(double)m_cloudSize - m_cloudGravity[i]*m_modelGravity[j];
-        // Delta = [A23 A31 A12] with Amn = Spy[m][n]-Spy[n][m]
-        Delta[0] = Spy[1][2]-Spy[2][1];
-        Delta[1] = Spy[2][0]-Spy[0][2];
-        Delta[2] = Spy[0][1]-Spy[1][0];
-        // calculate the symmetric 4x4 matrix needed to determine
-        // the max eigenvalue
-        QSpy[0][0] = vnl_trace( Spy );
-        for( i=1 ; i<4 ; ++i )
-        {
-            QSpy[i][0] = Delta[i-1];
-            for( j = 1; j < 4; ++j )
-            {
-                QSpy[0][j] = Delta[j-1];
-                QSpy[i][j] = Spy[i-1][j-1]+Spy[j-1][i-1] - QSpy[0][0]*Id3[i-1][j-1];
-            }
-        }
-        vnl_symmetric_eigensystem<double> eigQSpy(QSpy);
-        // Optimal rotation matrix calculate from the quaternion
-        // vector qr=[q0 q1 q2 q3] obtained by obtained the max eigen value
-        // http://paine.wiau.man.ac.uk/pub/doc_vxl/core/vnl/html/vnl__symmetric__eigensystem_8h.html
-        qr.update(eigQSpy.get_eigenvector(3));
-        qr = vnl_quaternion<double>(qr[1], qr[2], qr[3], qr[0]);
-        Ricp = vnl_transpose(qr.rotation_matrix_transpose()).asMatrix();
-        // Optimal translation vector Ticp T = ComY - Ricp.ComP
-        vnl_vector<double> TraTemp = m_modelGravity - Ricp*m_cloudGravity;
-        // step 3 : Application of the transformation
-        for( i=0 ; i<m_cloudSize ; ++i )
-          for( j=0 ; j<3 ; ++j )
-            m_Pk[i][j] = Ricp[j][0]*m_Pi[i][0] + Ricp[j][1]*m_Pi[i][1] + Ricp[j][2]*m_Pi[i][2] + TraTemp[j];
-    }
-    // Give the transformation from model ==> cloud
-    // First we add the first transformation to Rend
-    vnl_matrix_fixed<double,3,3> Rend = Ricp.transpose();
-    vnl_vector_fixed<double,3> Tend;
-    for( i=0 ; i<3 ; ++i )
-        Tend[i] = m_cloudGravity[i]-(Rend[i][0]*m_modelGravity[0]+Rend[i][1]*m_modelGravity[1]+Rend[i][2]*m_modelGravity[2]);
-    // Initial matrix [m_rotInit ; m_traInit ; 0 0 0 1]
-    // Found matrix [Rend ; Tend ; 0 0 0 1]
-    m_solution.vnl_matrix_fixed<double,4,4>::update(vnl_inverse(m_rotInit)*Rend);
-    m_solution.set_column(3,vnl_inverse(m_rotInit)*(Tend-m_traInit));
-    m_solution[3][3] = 1.0;
-    m_solution.setRMS( m_endError );
-    if(Verbose)
-    {
-        std::cout<<"ICP registration\n";
-        std::cout<<"First RMS="<<m_startError<<"\nLast RMS="<<m_endError<<"\nIterations="<<m_nbIterations<<"\nPtsModel="<<m_modelSize<<"\nPtsCloud="<<m_cloudSize<<"\n";
-        std::cout<<"Tau ="<<fabs(m_endError-previousRMS)<<"\n";
-        std::cout<<"Matrix ="<<m_solution<<"\n";
-    }
-    return true;
-#else // ANN
-    m_endError = -1.0;
-    return false;
-#endif // ANN
-}
-
-double arlCore::ICP::computeError( void )
-{
-#ifndef ANN
-    m_endError = -1.0;
-#else // ANN
-    if(m_point2PointMode)
-    {   // Points to points
-        unsigned int i, j;
-        m_endError = 0.0;
-        m_modelGravity.fill(0.0);
-        const double Epsilon = 0.0;// Error bound
-        for( i=0 ; i<m_cloudSize ; ++i )
-        {   // search the matching point for every point of cloud
-            m_ANNtree->annkSearch(
-                m_Pk[i],  // Query point
-                m_nbNN,   // Number of near neighbors
-                m_nn_idx, // Nearest neighbors (returned)
-                m_squaredDists,  // Distance for each neighbors (returned)
-                Epsilon );
-            for( j=0 ; j<3 ; ++j )
-                m_modelGravity[j] += m_Yk[i][j] = m_modelPoints[m_nn_idx[0]][j];
-            m_endError += m_squaredDists[0];
-        }
-        m_endError = sqrt(m_endError/(double)m_cloudSize);
-        m_modelGravity /= (double)m_cloudSize;
-    }
-#endif // ANN
-    if(!m_point2PointMode)
-    {   // Point to mesh
-        assert(m_cloud!=0 && m_modelMesh!=0);
-        unsigned int i;
-        double n = 0.0;
-        m_endError = 0.0;
-        const arlCore::vnl_rigid_matrix InvM = m_solution.computeInverse();
-        arlCore::Point::sptr point = arlCore::Point::New(3);;
-        assert(m_cloud!=0 && m_modelMesh!=0);
-        for( i=0 ; i<m_cloud->size() ; ++i )
-            if(m_cloud->get(i))
-                if(!m_justVisible || m_cloud->get(i)->isVisible())
-                {
-                    InvM.trf(m_cloud->get(i), point);
-                    m_endError += m_modelMesh->computeDistance2(point);
-                    ++n;
-                }
-        if(n!=0) m_endError = sqrt(m_endError/n);
-        else m_endError = -1.0;
-    }
-    return m_endError;
-}
-
-unsigned int arlCore::ICP::computeDistances( std::vector<double> &distances )
-{
-    distances.clear();
-    unsigned int i;
-    if(m_point2PointMode)
-    {   // Point to point
-#ifdef ANN
-        const double Epsilon = 0.0;
-        for( i=0 ; i<m_cloudSize ; ++i )
-        {
-            m_ANNtree->annkSearch( m_Pk[i], m_nbNN, m_nn_idx, m_squaredDists, Epsilon );
-            const double SquaredDistance = m_squaredDists[0];
-            const double Distance = sqrt(SquaredDistance);
-            distances.push_back(Distance);
-        }
-#endif // ANN
-    }else
-    {   // Point to mesh
-        assert(m_cloud!=0 && m_modelMesh!=0);
-        const arlCore::vnl_rigid_matrix InvM = m_solution.computeInverse();
-        arlCore::Point::sptr point = arlCore::Point::New(3);;
-        for( i=0 ; i<m_cloud->size() ; ++i )
-            if(m_cloud->get(i))
-                if(!m_justVisible || m_cloud->get(i)->isVisible())
-                {
-                    InvM.trf(m_cloud->get(i), point);
-                    distances.push_back(m_modelMesh->computeDistance(point));
-                }
-    }
-    return (unsigned int)distances.size();
-}
-
-unsigned int arlCore::ICP::computeDistances( arlCore::PointList::sptr points )
-{
-    unsigned int i;
-    std::vector<double> distances;
-    points->clear();
-    arlCore::Point::sptr point = arlCore::Point::New(3);;
-    if(m_point2PointMode)
-    {
-        computeDistances( distances );
-#ifdef ANN
-        for( i=0 ; i<distances.size() ; ++i )
-        {
-            point->x(m_Pk[i][0]), point->y(m_Pk[i][1]), point->z(m_Pk[i][2]);
-            point->setError(distances[i]);
-            points->push_back(point);
-        }
-#endif // ANN
-    }else
-    {   // Point to mesh
-        const arlCore::vnl_rigid_matrix InvM = m_solution.computeInverse();
-        assert(m_cloud && m_modelMesh);
-        for( i=0 ; i<m_cloud->size() ; ++i )
-            if(m_cloud->get(i))
-                if(!m_justVisible || m_cloud->get(i)->isVisible())
-                {
-                    InvM.trf(m_cloud->get(i), point);
-                    point->setError(m_modelMesh->computeDistance(point));
-                    points->push_back(point);
-                }
-    }
-    return (unsigned int)points->size();
-}
diff --git a/SrcLib/ARLcore/src/arlcore/MatrixR.cpp b/SrcLib/ARLcore/src/arlcore/MatrixR.cpp
deleted file mode 100644
index 26ee32c..0000000
--- a/SrcLib/ARLcore/src/arlcore/MatrixR.cpp
+++ /dev/null
@@ -1,1889 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/MatrixR.h>
-
-#include <fstream>
-#include <sstream>
-#include <iomanip>
-#include <math.h>
-#include <utility>
-
-#include <vnl/vnl_matrix_fixed.h>
-#include <vnl/vnl_transpose.h>
-#include <vnl/vnl_inverse.h>
-#include <vnl/vnl_trace.h>
-
-#include <vgl/vgl_plane_3d.h>
-#include <vgl/algo/vgl_homg_operators_3d.h>
-
-#include <vnl/algo/vnl_matrix_inverse.h>
-#include <vnl/algo/vnl_levenberg_marquardt.h>
-#include <vnl/algo/vnl_powell.h>
-#include <vnl/algo/vnl_conjugate_gradient.h>
-#include <vnl/algo/vnl_symmetric_eigensystem.h>
-
-#ifdef ANN
-#include <ANN/ANN.h>
-#endif // ANN
-
-#include <arlcore/PointsList.h>
-#include <arlcore/Misc.h>
-#include <arlcore/Optimization.h>
-#include <arlcore/vnl_rigid_vector.h>
-#include <arlcore/vnl_rotation3d_vector.h>
-
-arlCore::vnl_rigid_matrix::vnl_rigid_matrix( void ):
-vnl_matrix_fixed<double,4,4>(),
-Object(ARLCORE_CLASS_MATRIXR,"Unknown Matrix")
-{
-    setIdentity();
-    setTime(0, 0);
-    setOK(true); // FIXME
-}
-
-arlCore::vnl_rigid_matrix::vnl_rigid_matrix( const vnl_rigid_matrix& T ):
-vnl_matrix_fixed<double,4,4>(),
-Object(T)
-{
-    copy(T);
-}
-
-arlCore::vnl_rigid_matrix::vnl_rigid_matrix( const vnl_rigid_vector& T ):
-vnl_matrix_fixed<double,4,4>(),
-Object(ARLCORE_CLASS_MATRIXR,"Unknown Matrix")
-{
-    copy(T);
-}
-
-arlCore::vnl_rigid_matrix::vnl_rigid_matrix( const vnl_matrix_fixed<double,4,4>& T ):
-vnl_matrix_fixed<double,4,4>(),
-Object(ARLCORE_CLASS_MATRIXR,"Unknown Matrix")
-{
-    copy(T);
-}
-
-arlCore::vnl_rigid_matrix::vnl_rigid_matrix( const vnl_rotation3d_matrix &r, const vnl_vector_fixed<double,3> &t):
-vnl_matrix_fixed<double,4,4>(),
-Object(ARLCORE_CLASS_MATRIXR,"Unknown Matrix"),
-m_registerRMS(-1.0),
-m_registerStdDev(0.0)
-{
-    setTranslation( t );
-    setRotation( r );
-}
-
-arlCore::vnl_rigid_matrix::vnl_rigid_matrix( const std::string &fileName ):
-vnl_matrix_fixed<double,4,4>(),
-Object(ARLCORE_CLASS_MATRIXR,"Unknown Matrix")
-{
-    setIdentity();
-    setTime(0, 0);
-    load(fileName);
-}
-
-arlCore::vnl_rigid_matrix::~vnl_rigid_matrix( void )
-{}
-
-bool arlCore::vnl_rigid_matrix::isValid( void ) const
-{   //TODO : Complete the test
-    if(get(0,3)!=0.0 || get(1,3)!=0.0 || get(2,3)!=0 || get(3,3)!=1.0) return false;
-    return getRotation().is_rotation();
-}
-
-double arlCore::vnl_rigid_matrix::GaussianNoiseTranslation( double Xnoise, double Ynoise, double Znoise )
-{
-    if( Xnoise==0 && Ynoise==0 && Znoise==0 ) return 0.0;
-    unsigned int i;
-    std::vector< double > delta(3);
-    delta[0] = arlRandom::Random::gaussianRnd( Xnoise );
-    delta[1] = arlRandom::Random::gaussianRnd( Ynoise );
-    delta[2] = arlRandom::Random::gaussianRnd( Znoise );
-    for( i=0 ; i<3 ; ++i )
-        (*this)[i][3] += delta[i];
-    return sqrt(delta[0]*delta[0]+delta[1]*delta[1]+delta[2]*delta[2]);
-}
-
-double arlCore::vnl_rigid_matrix::GaussianNoiseRotation( double Xnoise, double Ynoise, double Znoise )
-{
-    if( Xnoise==0 && Ynoise==0 && Znoise==0 ) return 0.0;
-    const vnl_quaternion<double> q0 = getQuaternion();
-    vnl_vector_fixed<double,3> euler = q0.rotation_euler_angles();
-    euler[0] += arlRandom::Random::gaussianRnd( Xnoise )*arlCore::DegToRad;
-    euler[1] += arlRandom::Random::gaussianRnd( Ynoise )*arlCore::DegToRad;
-    euler[2] += arlRandom::Random::gaussianRnd( Znoise )*arlCore::DegToRad;
-    const vnl_quaternion<double> q1( euler[0], euler[1], euler[2] );
-    setQuaternion( q1 );
-    return fabs( (q1.angle()- q0.angle())*arlCore::RadToDeg );
-}
-
-double arlCore::vnl_rigid_matrix::distance( const vnl_rigid_matrix &T, ARLCORE_VRM_DISTANCE_METHOD method ) const
-{
-    const double Dist2 = distance2(T, method);
-    if(Dist2<0.0) return -1;
-    else return sqrt(Dist2);
-}
-
-double arlCore::vnl_rigid_matrix::distance2( const vnl_rigid_matrix &T, ARLCORE_VRM_DISTANCE_METHOD method ) const
-{
-    std::vector<double> errors2;
-    return distance2(T, method, errors2);
-}
-
-double arlCore::vnl_rigid_matrix::distance2( const vnl_rigid_matrix &T, ARLCORE_VRM_DISTANCE_METHOD method, std::vector<double> &errors2 ) const
-{
-    errors2.clear();
-    const double Unit = 1.0;
-    double distance2 = 0.0;
-    unsigned int i;
-    arlCore::Point::sptr o1 = arlCore::Point::New(0.0, 0.0, 0.0);
-    arlCore::Point::sptr o2 = arlCore::Point::New(0.0, 0.0, 0.0);
-    arlCore::Point::sptr u1 = arlCore::Point::New(Unit, 0.0, 0.0);
-    arlCore::Point::sptr u2 = arlCore::Point::New(Unit, 0.0, 0.0);
-    arlCore::Point::sptr v1 = arlCore::Point::New(0.0, Unit, 0.0);
-    arlCore::Point::sptr v2 = arlCore::Point::New(0.0, Unit, 0.0);
-    arlCore::Point::sptr w1 = arlCore::Point::New(0.0, 0.0, Unit);
-    arlCore::Point::sptr w2 = arlCore::Point::New(0.0, 0.0, Unit);
-    T.trf(o1);T.trf(u1);T.trf(v1);T.trf(w1);
-    trf(o2);trf(u2);trf(v2);trf(w2);
-    switch(method)
-    {
-    case ARLCORE_VRM_DISTANCE_3AXIS:
-        {
-            errors2.push_back(u1->distance2(u2));
-            errors2.push_back(v1->distance2(v2));
-            errors2.push_back(w1->distance2(w2));
-            break;
-        }
-    case ARLCORE_VRM_DISTANCE_TRANSLATION:
-        {
-            errors2.push_back(o1->distance2(o2));
-            break;
-        }
-    case ARLCORE_VRM_DISTANCE_OX:
-        {
-            errors2.push_back(o1->distance2(o2));
-            errors2.push_back(u1->distance2(u2));
-            break;
-        }
-    case ARLCORE_VRM_DISTANCE_OY:
-        {
-            errors2.push_back(o1->distance2(o2));
-            errors2.push_back(v1->distance2(v2));
-            break;
-        }
-    case ARLCORE_VRM_DISTANCE_OZ:
-        {
-            errors2.push_back(o1->distance2(o2));
-            errors2.push_back(w1->distance2(w2));
-            break;
-        }
-    default: break;
-    }
-    for( i=0 ; i<errors2.size() ; ++i )
-        distance2+=errors2[i];
-    if(errors2.size()>0) return distance2/(double)errors2.size();
-    else return -1;
-}
-
-void arlCore::vnl_rigid_matrix::compare( const vnl_rigid_matrix &T, double &errorTranslation, double &errorRotation ) const
-{
-    vnl_rigid_matrix TPrim;
-    TPrim.invert(T);
-    compareInverse(TPrim, errorTranslation, errorRotation);
-}
-
-void arlCore::vnl_rigid_matrix::compareInverse( const vnl_rigid_matrix &T, double &errorTranslation, double &errorRotation ) const
-{
-    vnl_rigid_matrix delta1, delta2;
-    delta1.mult(T, *this);
-    delta2.mult(*this, T);
-    errorTranslation = (delta1.getTranslation().two_norm() + delta2.getTranslation().two_norm())/2.0;
-
-    const unsigned int RotMethod = 2;
-    if( RotMethod==1 )
-    {   // Angle of quaternion
-        vnl_quaternion<double> q( delta1.extract(3,3) );
-        errorRotation = q.angle()*arlCore::RadToDeg;
-    }
-    if( RotMethod==2 )
-    {   // arcos( (trace(A*inv(B))-1)/2 )
-        const double Cosinus = ( vnl_trace( delta1.getRotation() )-1.0 )/2.0;
-        if( fabs(Cosinus) <= 1.0 )
-            errorRotation = acos(Cosinus)*arlCore::RadToDeg;
-        else errorRotation = 0.0;
-    }
-}
-
-void arlCore::vnl_rigid_matrix::uniform_random( double size )
-{
-    vnl_rotation3d_vector rot;
-    rot.uniform_random();
-    setRotation(vnl_rotation3d_matrix(rot));
-    put(0,3,arlRandom::Random::uniformDoubleRnd( -size/2, size/2 ));
-    put(1,3,arlRandom::Random::uniformDoubleRnd( -size/2, size/2 ));
-    put(2,3,arlRandom::Random::uniformDoubleRnd( -size/2, size/2 ));
-    Object::update();
-}
-
-bool arlCore::vnl_rigid_matrix::setTranslation( const vnl_vector_fixed<double,3> &v )
-{
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        put(i,3,v(i) );
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::setTranslation( double x, double y, double z )
-{
-    put(0,3,x);
-    put(1,3,y);
-    put(2,3,z);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::setX( double x )
-{
-    put(0,3,x);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::setY( double y )
-{
-    put(1,3,y);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::setZ( double z )
-{
-    put(2,3,z);
-    Object::update();
-    return true;
-}
-
-double arlCore::vnl_rigid_matrix::getX( void ) const
-{
-    return get(0,3);
-}
-
-double arlCore::vnl_rigid_matrix::getY( void ) const
-{
-    return get(1,3);
-}
-
-double arlCore::vnl_rigid_matrix::getZ( void ) const
-{
-    return get(2,3);
-}
-
-vnl_vector_fixed<double,3> arlCore::vnl_rigid_matrix::getTranslation( void ) const
-{
-    vnl_vector_fixed<double,3> V;
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        V.put(i,get(i,3));
-    return V;
-}
-
-vnl_vector_fixed<double,4> arlCore::vnl_rigid_matrix::getHTranslation( void ) const
-{
-    vnl_vector_fixed<double,4> V;
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        V.put(i,get(i,3));
-    V.put(3,1.0);
-    return V;
-}
-bool arlCore::vnl_rigid_matrix::setRotation( const vnl_rotation3d_matrix &v )
-{
-    vnl_matrix_fixed<double,4,4>::update(v);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::setQuaternion( const vnl_quaternion<double> &q )
-{   // See http://public.kitware.com/vxl/doc/release/core/vnl/html/classvnl__quaternion.html#vnl__quaterniona4
-    vnl_matrix_fixed<double,4,4>::update(q.rotation_matrix_transpose().transpose());
-    Object::update();
-    return true;
-}
-
-vnl_quaternion<double> arlCore::vnl_rigid_matrix::getQuaternion( void ) const
-{   // See http://public.kitware.com/vxl/doc/release/core/vnl/html/classvnl__quaternion.html#vnl__quaterniona4
-    return vnl_quaternion<double>(extract(3,3).transpose());
-}
-
-arlCore::vnl_rotation3d_matrix arlCore::vnl_rigid_matrix::getRotation( void ) const
-{
-    vnl_matrix_fixed<double,3,3>M = extract(3,3);
-    return M;
-}
-
-double arlCore::vnl_rigid_matrix::getRMS( void ) const
-{
-    return m_registerRMS;
-}
-
-double arlCore::vnl_rigid_matrix::getStdDev( void ) const
-{
-    return m_registerStdDev;
-}
-
-void arlCore::vnl_rigid_matrix::setRMS( double RMS )
-{
-    m_registerRMS = RMS;
-}
-
-void arlCore::vnl_rigid_matrix::setStdDev( double stdDev )
-{
-    m_registerStdDev = stdDev;
-}
-
-std::string arlCore::vnl_rigid_matrix::getString( void ) const
-{
-    std::stringstream s;
-    unsigned int i, j;
-    if(getDate()!=0 && getTime()!=0)
-        s<<"Date:"<<getDate()<<" Time:"<<getTime()<<"\n";
-    s<<"RMS:"<<m_registerRMS<<" stddev:"<<m_registerStdDev<<"\n";
-    for( i=0 ; i<4 ; ++i )
-    {
-        for( j=0 ; j<4 ; ++j )
-            s<<get(i,j)<<" ";
-        s<<"\n";
-    }
-    return s.str();
-}
-
-std::string arlCore::vnl_rigid_matrix::getText( void ) const
-{
-    std::stringstream s;
-    unsigned int i, j;
-    s<<"("<<getDate()<<"-"<<getTime()<<")RMS:"<<m_registerRMS<<"-EC:"<<m_registerStdDev<<"\\n";
-    for( i=0 ; i<4 ; ++i )
-    {
-        for( j=0 ; j<4 ; ++j )
-            s<<get(i,j)<<" ";
-        s<<"\\n";
-    }
-    return s.str();
-}
-
-bool arlCore::vnl_rigid_matrix::save( const std::string &fileName, bool overwrite ) const
-{
-    if(!isOK()) return false;
-    std::fstream f;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    f.open (fileName.c_str(), std::fstream::out);
-    if(!f.is_open()) return false;
-    f<<"FileType RigidMatrix\n";
-    f<<"Version 1.0\n";
-    bool b=save(f);
-    f.close();
-    f.flush();
-    return b;
-}
-
-bool arlCore::vnl_rigid_matrix::save( std::fstream &f ) const
-{
-    if(!f.is_open()) return false;
-    unsigned int i,j;
-    f<<"Date "<<getDate()<<"\nTime "<<getTime()<<"\nRMS "<<m_registerRMS<<"\nEC "<<m_registerStdDev<<"\n";
-    f<<"Matrix\n";
-    for( i=0 ; i<4 ; ++i )
-    {
-        for( j=0 ; j<4 ; ++j )
-            f<<std::setprecision(10)<<(double)get(i,j)<<"\t";
-        f<<"\n";
-    }
-    f<<"End\n";
-    f.flush();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::load( const std::string &fileName )
-{
-    if(fileName=="") return false;
-    std::fstream f;
-    std::string token, type;
-    unsigned int n=0;
-    double version;
-    f.open (fileName.c_str(), std::fstream::in);
-    bool matrixList = false;
-    if(!f.is_open()) return false;
-    do
-    {   // Reading header
-        f>>token;
-        if(token=="FileType")
-        {
-            f>>type;
-            matrixList = (type=="MatrixList");
-            if(type!="Matrix" && type!="RigidMatrix" && !matrixList) // Matrix deprecated
-            {
-                std::cerr<<type<<" : Filetype not expected (RigidMatrix or MatrixList)\n";
-                f.close();
-                return false;
-            }
-            n=(n|1);
-        }
-        if(token=="Version") {f>>version; n=(n|2);}
-        if(f.eof())
-        {
-            std::cerr<<"Matrix Loading Header error : "<<fileName<<"\n";
-            f.close();
-            return false;
-        }
-    }while(n!=3);
-    bool b = false;
-    if(matrixList)
-    {
-        std::vector<arlCore::vnl_rigid_matrix> listMatrix;
-        while(load(f)) listMatrix.push_back(*this);
-        bool b = mean(listMatrix);
-        setOK(b);
-        return b;
-    }else b=load(f);
-    f.close();
-    return b;
-}
-
-bool arlCore::vnl_rigid_matrix::load( std::fstream &f )
-{
-    unsigned int i,j;
-    double val;
-    bool b=false;
-    std::string token;
-    if(!f.is_open()) return false;
-    do
-    {
-        f>>token;
-        if(token=="Date") f>>m_date;
-        if(token=="Time") f>>m_time;
-        if(token=="RMS") f>>m_registerRMS;
-        if(token=="EC") f>>m_registerStdDev;
-        if(token=="Matrix")
-        {
-            for( i=0 ; i<4 ; ++i )
-                for( j=0 ; j<4 ; ++j )
-                {
-                    f>>val;
-                    put(i,j,val);
-                }
-            b=true;
-        }
-    }while(!f.eof() && token!="End");
-    Object::update();
-    return setOK(b);
-}
-
-std::string arlCore::vnl_rigid_matrix::serialize( void ) const
-{
-    std::stringstream s;
-    s<<Object::serialize();
-    unsigned int i,j;
-    for( i=0 ; i<4 ; ++i )
-        for( j=0 ; j<4 ; ++j )
-            s<<get(i,j)<<" ";
-    s<<m_registerRMS<<" "<<m_registerStdDev<<" ";
-    return s.str();
-}
-
-bool arlCore::vnl_rigid_matrix::unserialize( std::stringstream &s )
-{
-    Object::unserialize(s);
-    unsigned int i,j;
-    double v;
-    for( i=0 ; i<4 ; ++i )
-        for( j=0 ; j<4 ; ++j )
-        {
-            s>>v;
-            put(i,j,v);
-        }
-    s>>m_registerRMS>>m_registerStdDev;
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::copy( const vnl_rigid_matrix& T )
-{
-    unsigned int i, j;
-    for( i=0 ; i<4 ; ++i )
-        for( j=0 ; j<4 ; ++j )
-            put(i,j,T(i,j));
-    m_registerRMS=T.m_registerRMS;
-    m_registerStdDev=T.m_registerStdDev;
-    m_date=T.m_date;
-    m_time=T.m_time;
-    Object::update();
-    //setUpdateIndex(T.getUpdateIndex());
-    return setOK(T.isOK());
-}
-
-bool arlCore::vnl_rigid_matrix::copy( const vnl_rigid_vector& T )
-{
-    setTranslation(T.getTranslation());
-    setRotation(T.getRotation3dVector());
-    set_row(3,0.0);
-    put(3,3,1.0);
-    Object::update();
-    return setOK(true);
-}
-
-bool arlCore::vnl_rigid_matrix::copy( const vnl_matrix_fixed<double,4,4>& T )
-{
-    unsigned int i, j;
-    for( i=0 ; i<4 ; ++i )
-        for( j=0 ; j<4 ; ++j )
-            put(i,j,T(i,j));
-/*  m_registerRMS=0.0;
-    m_registerStdDev=0.0;
-    m_date=0;
-    m_time=0;*/
-    Object::update();
-    return setOK(true);
-}
-
-arlCore::vnl_rigid_matrix& arlCore::vnl_rigid_matrix::operator=( const vnl_rigid_matrix& T )
-{
-    if(this==&T) return *this;
-    arlCore::Object *a=this;
-    const arlCore::Object *b=&T;
-    *a = *b;
-    copy(T);
-    return *this;
-}
-
-arlCore::vnl_rigid_matrix& arlCore::vnl_rigid_matrix::operator=( const vnl_rigid_vector& T )
-{
-    copy(T);
-    return *this;
-}
-
-arlCore::vnl_rigid_matrix& arlCore::vnl_rigid_matrix::operator=( const vnl_matrix_fixed<double,4,4>& T )
-{
-    if(this==&T) return *this;
-    copy(T);
-    return *this;
-}
-
-bool arlCore::vnl_rigid_matrix::mult( const vnl_rigid_matrix& T1, const vnl_rigid_matrix& T2 )
-{
-    //vnl_matrix_fixed<double,4,4> M = T1 * T2;
-    copy(T1 * T2);
-    // timestamp with the older age
-    setMinTime(T1.getDate(), T1.getTime());
-    setMinTime(T2.getDate(), T2.getTime());
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::setIdentity()
-{
-    set_identity();
-    m_registerRMS=0.0;
-    m_registerStdDev=0.0;
-//  m_date=0;
-//  m_time=0;
-    Object::update();
-    return true;
-}
-
-arlCore::vnl_rigid_matrix arlCore::vnl_rigid_matrix::computeInverse( void ) const
-{
-    arlCore::vnl_rigid_matrix T;
-    T.invert(*this);
-    return T;
-}
-
-bool arlCore::vnl_rigid_matrix::invert( const vnl_rigid_matrix& T )
-{   // Transpose(Rotation)*Translation
-    unsigned int i,j;
-    vnl_matrix_fixed<double,3,3> tmp;
-    vnl_matrix_fixed<double,3,1> col, col2;
-    setTime(T.m_date, T.m_time);
-    m_registerRMS=T.m_registerRMS;
-    m_registerStdDev=T.m_registerStdDev;
-    for( i=0 ; i<3 ; ++i )
-        for( j=0 ; j<3 ; ++j )
-            tmp(i,j) = T(i,j);
-    for( i=0 ; i<3 ; ++i )
-        col(i,0) = T(i,3);
-    tmp.inplace_transpose();
-    col2 =  tmp.as_matrix() * col.as_matrix();
-    for( i=0 ; i<3 ; ++i )
-        for( j=0 ; j<3 ; ++j )
-            put(i,j,tmp(i,j));
-    for(i=0;i<3;i++)
-    {
-        put(i,3,-1* col2(i,0));
-        put(3,i,0.0);
-    }
-    put(3,3,1.0);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::invert( void )
-{   // Transpose(Rotation)*Translation
-    unsigned int i, j;
-    vnl_matrix_fixed<double,3,3> tmp;
-    vnl_matrix_fixed<double,3,1> col, col2;
-    for( i=0 ; i<3 ; i++ )
-        for( j=0 ; j<3 ; j++ )
-            tmp(i,j) = (*this)(i,j);
-    for( i=0 ; i<3 ; i++ )
-        col(i,0) = (*this)(i,3);
-    tmp.inplace_transpose();
-    col2 =  tmp.as_matrix() * col.as_matrix();
-    for( i=0 ; i<3 ; i++ )
-        for( j=0 ; j<3 ; j++ )
-            put(i,j,tmp(i,j));
-    for( i=0 ; i<3 ; i++ )
-    {
-        put(i,3,-1* col2(i,0));
-        put(3,i,0.0);
-    }
-    put(3,3,1.0);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::mean( const std::vector<arlCore::vnl_rigid_matrix> &list )
-{
-    unsigned int i, n;
-    std::vector<const arlCore::vnl_rigid_matrix*> listp;
-    for( i=0 ; i<list.size() ; ++i )
-        listp.push_back(&list[i]);
-    n = filter( listp , ARLCORE_TRF_FILTER_CONSTANT, *this );
-    return n>0;
-/*
-    * @brief The current matrix becomes the mean of listMatrix 1/N sum mat
-    * since the resulting 3x3 rotation part is no more a rotation, we apply the
-    * closest_rotation function to the rotation part to ensure it is a rotation
-    * TODO average with rotation vector
-    * TODO average with the function in averageRotation class in Optimisation.cpp
-
-    if(list.size()==0) return false;
-    fill(0.0);
-    unsigned int i, j, k;
-    double a;
-    for( i=0 ; i<list.size() ; ++i )
-    {
-        a=0;
-        for( j=0 ; j<4 ; ++j )
-            for( k=0 ; k<4 ; ++k )
-                put( j, k, get(j,k)+list[i].get(j,k) );
-    }
-    for( j=0 ; j<4 ; ++j )
-        for( k=0 ; k<4 ; ++k )
-            put( j, k, get(j,k)/i );
-
-    vnl_rotation3d_matrix rot = this->getRotation();
-    rot.closest_rotation();
-    this->setRotation(rot);
-    return true;*/
-}
-
-double arlCore::vnl_rigid_matrix::getAngleOXY( void )
-{
-    const vgl_point_3d<double> o( 0.0, 0.0, 0.0 );
-    const vgl_point_3d<double> u( 1.0, 0.0, 0.0 );
-    const vgl_point_3d<double> v( 0.0, 1.0, 0.0 );
-    const vgl_plane_3d<double> Plane1( o, u, v );
-    arlCore::Point::sptr o1 = arlCore::Point::New( 0.0, 0.0, 0.0 );
-    arlCore::Point::sptr u1 = arlCore::Point::New( 1.0, 0.0, 0.0 );
-    arlCore::Point::sptr v1 = arlCore::Point::New( 0.0, 1.0, 0.0 );
-    trf(o1);trf(u1);trf(v1);
-    const vgl_point_3d<double> o2(  o1->x(), o1->y(), o1->z() );
-    const vgl_point_3d<double> u2(  u1->x(), u1->y(), u1->z() );
-    const vgl_point_3d<double> v2(  v1->x(), v1->y(), v1->z() );
-    const vgl_plane_3d<double> Plane2( o2, u2, v2 );
-    const double Angle = fmod(vgl_homg_operators_3d<double>::plane_plane_angle(Plane1, Plane2), vnl_math::pi/2.0)*arlCore::RadToDeg;
-    return Angle;
-}
-
-double arlCore::vnl_rigid_matrix::getAngleOXZ( void )
-{
-    const vgl_point_3d<double> o( 0.0, 0.0, 0.0 );
-    const vgl_point_3d<double> u( 1.0, 0.0, 0.0 );
-    const vgl_point_3d<double> w( 0.0, 0.0, 1.0 );
-    const vgl_plane_3d<double> Plane1( o, u, w );
-    arlCore::Point::sptr o1 = arlCore::Point::New( 0.0, 0.0, 0.0 );
-    arlCore::Point::sptr u1 = arlCore::Point::New( 1.0, 0.0, 0.0 );
-    arlCore::Point::sptr w1 = arlCore::Point::New( 0.0, 0.0, 1.0 );
-    trf(o1);trf(u1);trf(w1);
-    const vgl_point_3d<double> o2(  o1->x(), o1->y(), o1->z() );
-    const vgl_point_3d<double> u2(  u1->x(), u1->y(), u1->z() );
-    const vgl_point_3d<double> w2(  w1->x(), w1->y(), w1->z() );
-    const vgl_plane_3d<double> Plane2( o2, u2, w2 );
-    const double Angle = fmod(vgl_homg_operators_3d<double>::plane_plane_angle(Plane1, Plane2), vnl_math::pi/2.0)*arlCore::RadToDeg;
-    return Angle;
-}
-
-double arlCore::vnl_rigid_matrix::getAngleOYZ( void )
-{
-    const vgl_point_3d<double> o( 0.0, 0.0, 0.0 );
-    const vgl_point_3d<double> v( 0.0, 1.0, 0.0 );
-    const vgl_point_3d<double> w( 0.0, 0.0, 1.0 );
-    const vgl_plane_3d<double> Plane1( o, v, w );
-    arlCore::Point::sptr o1 = arlCore::Point::New( 0.0, 0.0, 0.0 );
-    arlCore::Point::sptr v1 = arlCore::Point::New( 0.0, 1.0, 0.0 );
-    arlCore::Point::sptr w1 = arlCore::Point::New( 0.0, 0.0, 1.0 );
-    trf(o1);trf(v1);trf(w1);
-    const vgl_point_3d<double> o2(  o1->x(), o1->y(), o1->z() );
-    const vgl_point_3d<double> v2(  v1->x(), v1->y(), v1->z() );
-    const vgl_point_3d<double> w2(  w1->x(), w1->y(), w1->z() );
-    const vgl_plane_3d<double> Plane2( o2, v2, w2 );
-    const double Angle = fmod(vgl_homg_operators_3d<double>::plane_plane_angle(Plane1, Plane2), vnl_math::pi/2.0)*arlCore::RadToDeg;
-    return Angle;
-}
-
-bool arlCore::vnl_rigid_matrix::chgPlaneOXZ(  arlCore::Point::csptr O,  arlCore::Point::csptr X,  arlCore::Point::csptr Z )
-{
-    const arlCore::Point::csptr Oo = arlCore::Point::New(0.0, 0.0, 0.0);
-    const arlCore::Point::csptr Xo = arlCore::Point::New(1.0, 0.0, 0.0);
-    const arlCore::Point::csptr Zo = arlCore::Point::New(0.0, 0.0, 1.0);
-    PointList::sptr A = PointList::New();
-    PointList::sptr B = PointList::New();
-    A->push_back(Oo);
-    A->push_back(Xo);
-    A->push_back(Zo);
-    B->push_back(O);
-    B->push_back(X);
-    B->push_back(Z);
-    return register3D3D( A, B, false);
-}
-
-bool arlCore::vnl_rigid_matrix::trf( Point::csptr pt1, Point::sptr pt2 ) const
-{
-    assert(pt1->size()==3 && pt2->size()==3);
-    vnl_vector_fixed<double,4> p1,p2;
-    unsigned int i,j;
-    for( i=0 ; i<3 ; ++i )
-        p1.put(i,(*pt1)[i]);
-    p1.put(3,1.0);
-    p2=(*this)*p1;
-    for( i=0 ; i<3 ; ++i )
-        pt2->set(i,p2.get(i));
-    //compute uncertainty of pt2 wrt to pt1 uncertainty and this
-    vnl_matrix_fixed<double,3,3> C = this->getRotation() *  pt1->getCovMatrix() * vnl_transpose( this->getRotation() );
-    arlCore::vnl_covariance_matrix &cov_mat = pt2->getCovMatrix();
-    for( i=0 ; i<3 ; ++i )
-        for( j=0 ; j<3 ; ++j )
-            cov_mat.put(i,j,C[i][j]);
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::trf( Point::sptr pt ) const
-{
-    assert(pt->size()==3);
-    vnl_vector_fixed<double,4> p1,p2;
-    unsigned int i,j;
-    for( i=0 ; i<3 ; ++i )
-        p1.put(i,(*pt)[i]);
-    p1.put(3,1.0);
-    p2=(*this)*p1;
-    for( i=0 ; i<3 ; ++i )
-        pt->set(i,p2.get(i));
-
-    //compute uncertainty of pt2 wrt to pt1 uncertainty and this
-    vnl_matrix_fixed<double,3,3> res;
-    res = this->getRotation() *  pt->getCovMatrix() * vnl_transpose( this->getRotation() );
-
-    arlCore::vnl_covariance_matrix &cov_mat = pt->getCovMatrix();
-    for(i=0;i<3;++i)
-        for(j=0;j<3;++j)
-            cov_mat.put(i,j,res[i][j]);
-
-    return true;
-}
-
-unsigned int arlCore::vnl_rigid_matrix::trf(PointList::csptr l1, PointList::sptr l2 ) const
-{
-    l2->clear();
-    l2->setDimension(l2->getDimension());
-
-    unsigned int i;
-    for( i=0 ; i<l1->size() ; ++i )
-    {
-        Point::sptr P = Point::New(l1->getDimension());
-        if(trf( (*l1)[i] ,P))
-        {
-            l2->push_back(P);
-        }
-    }
-    return l2->size();
-}
-
-unsigned int arlCore::vnl_rigid_matrix::trf( PointList::sptr l1 ) const
-{
-    unsigned int i;
-    for( i=0 ; i<l1->size() ; ++i )
-        if( (*l1)[i] ) trf( (*l1)[i] );
-    return l1->size();
-}
-
-unsigned int arlCore::vnl_rigid_matrix::trf( const std::vector< Point::csptr > &l1, std::vector< Point::csptr > &l2 ) const
-{
-    unsigned int i;
-    for( i=0 ; i<l1.size() ; ++i )
-    {
-        Point::sptr p= Point::New();
-        if(trf( l1[i] ,p))
-            l2.push_back( Point::constCast(p) );
-    }
-    return (unsigned int)l2.size();
-}
-
-bool arlCore::vnl_rigid_matrix::trf( const vgl_line_3d_2_points<double> &line1, vgl_line_3d_2_points<double> &line2 ) const
-{
-    const vgl_point_3d<double> P1Line = line1.point1();
-    const vgl_point_3d<double> P2Line = line1.point2();
-    Point::sptr p1 = Point::New(3);
-    Point::sptr p2 = Point::New(3);
-    if(!trf(Point::New(P1Line.x(), P1Line.y(), P1Line.z()), p1)) return false;
-    if(!trf(Point::New(P2Line.x(), P2Line.y(), P2Line.z()), p2)) return false;
-    line2.set(vgl_point_3d<double>(p1->x(), p1->y(), p1->z()), vgl_point_3d<double>(p2->x(), p2->y(), p2->z()));
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::trf( vgl_line_3d_2_points<double> &line ) const
-{
-    const vgl_point_3d<double> P1Line = line.point1();
-    const vgl_point_3d<double> P2Line = line.point2();
-    Point::sptr p1 = Point::New(3);
-    Point::sptr p2 = Point::New(3);
-    if(!trf(Point::New(P1Line.x(), P1Line.y(), P1Line.z()), p1)) return false;
-    if(!trf(Point::New(P2Line.x(), P2Line.y(), P2Line.z()), p2)) return false;
-    line.set(vgl_point_3d<double>(p1->x(), p1->y(), p1->z()), vgl_point_3d<double>(p2->x(), p2->y(), p2->z()));
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::trf( const vgl_line_segment_3d<double> &line1, vgl_line_segment_3d<double> &line2 ) const
-{
-    const vgl_point_3d<double> P1Line = line1.point1();
-    const vgl_point_3d<double> P2Line = line1.point2();
-    Point::sptr p1 = Point::New(3);
-    Point::sptr p2 = Point::New(3);
-    if(!trf(Point::New(P1Line.x(), P1Line.y(), P1Line.z()), p1)) return false;
-    if(!trf(Point::New(P2Line.x(), P2Line.y(), P2Line.z()), p2)) return false;
-    line2.set(vgl_point_3d<double>(p1->x(), p1->y(), p1->z()), vgl_point_3d<double>(p2->x(), p2->y(), p2->z()));
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::trf( vgl_line_segment_3d<double> &line ) const
-{
-    const vgl_point_3d<double> P1Line = line.point1();
-    const vgl_point_3d<double> P2Line = line.point2();
-    Point::sptr p1 = Point::New(3);
-    Point::sptr p2 = Point::New(3);
-    if(!trf(Point::New(P1Line.x(), P1Line.y(), P1Line.z()), p1)) return false;
-    if(!trf(Point::New(P2Line.x(), P2Line.y(), P2Line.z()), p2)) return false;
-    line.set(vgl_point_3d<double>(p1->x(), p1->y(), p1->z()), vgl_point_3d<double>(p2->x(), p2->y(), p2->z()));
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::registerICP(PointList::csptr pointsListA,PointList::csptr pointsListB, double &firstRMS, double &lastRMS, unsigned int &iterations, bool justVisible, double RMSMax, unsigned int iterationsMax )
-{   //Model (scanner) = pointsListA ; Points cloud (Acquisition) = pointsListB
-    const bool Verbose = false;
-    firstRMS = -1.0;
-    lastRMS = -1.0;
-    m_registerRMS = -1.0;
-    m_registerStdDev = 0.0;
-    iterations = 0;
-#ifdef ANN
-//  http://csdl2.computer.org/persagen/DLAbsToc.jsp?resourcePath=/dl/trans/tp/&toc=comp/trans/tp/1992/02/i2toc.xml&DOI=10.1109/34.121791
-//  http://ieeexplore.ieee.org/iel1/34/3469/00121791.pdf?tp=&arnumber=121791&isnumber=3469
-    //  To be continued : Automatic initialization or using the current matrix for initialization
-    const unsigned int Dimension = pointsListA->getDimension();
-    assert(Dimension==pointsListB->getDimension());
-    const int    bs = 1; // Bucket size
-    const double tau = 10e-8;
-    ANNpointArray modelPoints, dataPoints;
-    ANNpointArray Pk,Yk,Pi;
-    ANNidxArray     nn_idx; // near neighbor indices
-    ANNdistArray    squaredDists; // near neighbor distances
-    double eps = 0.0;// Error bound
-    unsigned int i,j,k,n;
-    unsigned int modelSize;
-    if(justVisible) modelSize = pointsListA->visibleSize();
-    else modelSize = pointsListA->size();
-    if(modelSize<1) return false;
-    modelPoints = annAllocPts( modelSize, Dimension );
-    for( i=0, n=0 ; i<modelSize ; ++i )
-    {
-        if(!justVisible || (justVisible && (*pointsListA)[i]->isVisible()))
-        {
-            for( j=0 ; j<Dimension ; ++j )
-                modelPoints[n][j]=(*pointsListA)[i]->get(j);
-            ++n;
-        }
-    }
-    unsigned int acquisitionSize;
-    if(justVisible) acquisitionSize = pointsListB->visibleSize();
-    else acquisitionSize = pointsListB->size();
-    if(acquisitionSize<1)
-    {
-        annDeallocPts( modelPoints );
-        return false;
-    }
-    dataPoints = annAllocPts( acquisitionSize, Dimension );
-    for( i=0, n=0 ; i<acquisitionSize ; ++i )
-    {
-        if(!justVisible || (justVisible && (*pointsListB)[i]->isVisible()))
-        {
-            for( j=0 ; j<Dimension ; ++j )
-                dataPoints[n][j]=(*pointsListB)[i]->get(j);
-            ++n;
-        }
-    }
-    const int NbNN = 1;          // number of nearest neighbors
-    nn_idx = new ANNidx[NbNN];   // allocate near neigh indices
-    squaredDists = new ANNdist[NbNN];    // allocate near neighbor squaredDists
-   // ************* build the kdtree ************************
-   ANNkd_tree *the_tree = new ANNkd_tree( modelPoints,// data points
-                                          modelSize,// number of points
-                                          Dimension, // points dimension
-                                          bs, // Bucket size
-                                          ANN_KD_SL_MIDPT );
-    // ************* vectors allocation ************************
-    Pk = annAllocPts( acquisitionSize, Dimension );
-    Pi = annAllocPts( acquisitionSize, Dimension );
-    Yk = annAllocPts( acquisitionSize, Dimension );
-    // **************************************************************
-    // first transformation =>P0, icp release the matching between
-    // P0 and model point
-    // **************************************************************
-    vnl_vector<double> gravityP(Dimension,0.0);
-    vnl_matrix<double> Rot(3,3);
-    vnl_vector<double> Tra(3,0.0), TraTemp(3);
-    // Initialization
-    invert();
-    Tra = getTranslation();
-    Rot = getRotation();
-    vnl_quaternion<double> qr(0,0,0,1);
-    //Rot = vnl_transpose(qr.rotation_matrix_transpose()).asMatrix();
-    for( i=0 ; i<acquisitionSize ; ++i )
-        for( j=0 ; j<3; ++j )
-        {
-            Pi[i][j] = Pk[i][j] = Rot[j][0]*dataPoints[i][0]+Rot[j][1]*dataPoints[i][1]+Rot[j][2]*dataPoints[i][2]+Tra[j];
-            gravityP[j]+= Pi[i][j];
-        }
-    gravityP/= (double)acquisitionSize;
-    // ********************** ICP Initialisation ************************
-    // ** P={pi} points de données (Np) et X={xi} points de modèle (Nx) *
-    vnl_vector<double> gravityY(Dimension);
-    double oldRMS = FLT_MAX;
-    firstRMS = -1;
-    vnl_matrix<double> Id3(3,3);    Id3.set_identity();
-    vnl_matrix<double> Rend(3,3);   Rend.set_identity();
-    vnl_matrix<double> Spy(3,3);
-    vnl_vector<double> Delta (3);
-    vnl_matrix<double> QSpy(4,4);
-    vnl_matrix<double> Ricp (3,3);
-    vnl_symmetric_eigensystem<double> eigQSpy(QSpy);
-    lastRMS = FLT_MAX/2; // /2;
-    // ****************************** ICP algorithm ***************************
-    while( fabs(lastRMS-oldRMS)>tau && iterations<iterationsMax ) //&& RMS>RMSMax )
-    //while( iterations<iterationsMax ) //&& RMS>RMSMax )
-    {
-        ++iterations;
-        oldRMS = lastRMS;
-        lastRMS = 0.0;
-        Spy.set_identity();
-        gravityY.fill(0);
-        // step 1 :
-        // search the matching point for every data shape point
-        for( i=0 ; i<acquisitionSize ; ++i )
-          {
-            // ****************************************************
-            // step 1 :
-            // search the matching point for every data shape point
-            // ****************************************************
-             the_tree->annkSearch( Pk[i],  // query point
-                                   NbNN,      // number of near neighbors
-                                   nn_idx, // nearest neighbors (returned)
-                                   squaredDists,  // distance (returned)
-                                   eps );  // error bound
-            // ***************************************************
-            // calculate the center of mass for Y and query_point
-            // ***************************************************
-            for( j = 0; j < 3; j++ )
-              gravityY[j]+= Yk[i][j] = modelPoints[nn_idx[0]][j];
-            // Update the value of error
-            lastRMS += squaredDists[0];
-          } //end search matching for
-        // Calculate the new mean square point matching error
-        // LG lastRMS/=(double)AcquisitionSize;
-        lastRMS = sqrt(lastRMS/(double)acquisitionSize);
-        if(firstRMS<0) firstRMS = lastRMS;
-        // calculate the center of mass for Y and query_point
-        // by divise the sum by the number of point
-        gravityY/= (double)acquisitionSize;
-        // step 2
-        // Calculate the cross-variance matrix between Pk and Yo
-        // Cov( P0, Yk ) = 1/n*somme(P0*Yk') - ComP0*ComYk'
-        for( i=0 ; i<acquisitionSize ; ++i )
-          for( j=0 ; j<3 ; ++j )
-            for( k=0 ; k<3 ; ++k )
-            Spy[j][k]+= Pi[i][j]*Yk[i][k];
-        for( i=0 ; i<3 ; ++i )
-          for( j=0 ; j<3 ; ++j )
-            Spy[i][j] = Spy[i][j]/(double)acquisitionSize - gravityP[i]*gravityY[j];
-        // Delta = [A23 A31 A12] with Amn = Spy[m][n]-Spy[n][m]
-        Delta[0] = Spy[1][2]-Spy[2][1];
-        Delta[1] = Spy[2][0]-Spy[0][2];
-        Delta[2] = Spy[0][1]-Spy[1][0];
-        // calculate the symmetric 4x4 matrix needed to determine
-        // the max eigenvalue
-        QSpy[0][0] = vnl_trace( Spy ); // calculate the matrix trace
-        for( i=1 ; i<4 ; ++i )
-        {
-            QSpy[i][0] = Delta[i-1];
-            for( j = 1; j < 4; ++j )
-            {
-                QSpy[0][j] = Delta[j-1];
-                QSpy[i][j] = Spy[i-1][j-1]+Spy[j-1][i-1] - QSpy[0][0]*Id3[i-1][j-1];
-            }
-        }
-        // calculate the eigen value of QSpy
-        eigQSpy = vnl_symmetric_eigensystem<double>( QSpy );
-        // optimal Rotation matrix calculate from the quaternion
-        // vector qr=[q0 q1 q2 q3] obtained by obtained the max eigen value
-        // http://paine.wiau.man.ac.uk/pub/doc_vxl/core/vnl/html/vnl__symmetric__eigensystem_8h.html
-        qr.update(eigQSpy.get_eigenvector(3));
-        qr = vnl_quaternion<double>(qr[1], qr[2], qr[3], qr[0]);
-        Ricp = vnl_transpose(qr.rotation_matrix_transpose()).asMatrix();
-        // optimal translation vector Ticp T = ComY - Ricp.ComP
-        TraTemp = gravityY - Ricp*gravityP;
-        // step 3 : Application of the transformation
-        for( i=0 ; i<acquisitionSize ; ++i )
-          for( j=0 ; j<3 ; ++j )
-            Pk[i][j] = Ricp[j][0]*Pi[i][0] + Ricp[j][1]*Pi[i][1] + Ricp[j][2]*Pi[i][2] + TraTemp[j];
-    }// while
-    m_registerRMS = lastRMS;
-    // give the transformation from model data ==> acquisition data
-    // first we add the first transformation to Rend
-    // ******************************************************
-    // ***************** Changement *************************
-    // ******************************************************
-    Rend = Ricp.transpose();
-    vnl_vector<double> Tend(3);
-    for( i=0 ; i<3 ; ++i )
-        Tend[i] = gravityP[i]-(Rend[i][0]*gravityY[0]+Rend[i][1]*gravityY[1]+Rend[i][2]*gravityY[2]);
-    // matrice initiale [Rot Tra;0 0 0 1]
-    // matrice trouvee [Rend Tend;0 0 0 1]
-
-    /*this->vnl_matrix_fixed<double,4,4>::update(Rend*Rot);
-    this->set_column(3,Rend*Tra + Tend); //,0);
-    (*this)[3][3] = 1.0;*/
-    this->vnl_matrix_fixed<double,4,4>::update(vnl_inverse(Rot)*Rend);
-    this->set_column(3,vnl_inverse(Rot)*(Tend-Tra));
-    (*this)[3][3] = 1.0;
-    // ******************* free memory ******************
-    delete[] nn_idx;
-    delete[] squaredDists;
-    delete the_tree;
-    annDeallocPts( modelPoints );
-    annDeallocPts( dataPoints );
-    annDeallocPts( Pk );
-    annDeallocPts( Yk );
-    annDeallocPts( Pi );
-    annClose();
-    if(Verbose)
-    {
-        std::cout<<"ICP registration\n";
-        std::cout<<"firstRMS="<<firstRMS<<" lastRMS="<<lastRMS<<" Iterations="<<iterations<<" PtsModel="<<modelSize<<" PtsAcquisition="<<acquisitionSize<<"\n";
-        std::cout<<"Matrix ="<<*this<<"\n";
-    }
-    Object::update();
-    std::cout<<"Tau="<<fabs(lastRMS-oldRMS)*1e8<<"\n";
-    return true;
-#else // ANN
-    return false;
-#endif // ANN
-}
-
-/****************************************************************
-*
-*  Routine Name: rotate_dim4
-*  Purpose: Fonction utilisée uniquement par ma fonction spec
-
-*  Remarque : IL FAUT SUPPRIMER CETTE FONCTION ET LA REMPLACER PAR UNE FONCTION
-*  DE LA LIBRAIRIE VNL
-*****************************************************************/
-void rotate_dim4( double a[][4] , double tau , double s , int i , int j ,int k , int l )
-{
-   double g = a[i][j];
-   double h = a[k][l];
-   a[i][j] = g-s*(h+g*tau);
-   a[k][l] = h + s*(g-h*tau);
-   return;
-}
-
-/************************************************************************************
-*
-*  Routine Name: spec
-*  Purpose: This function returns the vectors and eigenvalues of a matrix
-*  Input: m            - matrix (double)
-*  Output: d,v         - eigenvalues and vector
-*
-*  Remarque : IL FAUT SUPPRIMER CETTE FONCTION ET LA REMPLACER PAR UNE FONCTION
-*  DE LA LIBRAIRIE VNL
-**************************************************************************************/
-void spec( const double m[4][4], double *d, double (*v)[4] )
-{
-    const unsigned int IT_MAX = 50;
-    register int i , j , ip , iq ;
-    double tresh,theta,tau,t,sm,s,h,g,c;
-    double a[4][4], b[4], z[4];
-    int p = 4;
-    for(i=0;i<4; i++)
-        for(j=0;j<4; j++)
-            if(i==j) v[i][j]=1.0; else v[i][j]=0.0;
-   for( ip=0 ; ip<p ; ip++ )
-      for( iq = 0 ; iq < p ; iq++ )
-         a[ip][iq] = m[ip][iq];
-   for( ip = 0 ; ip < p ; ip++ )
-   {
-      b[ip] = a[ip][ip];
-      d[ip] = a[ip][ip];
-      z[ip] = 0.0;
-   }
-   for( i = 0 ; i < IT_MAX/2 ; i++ )
-   {
-      sm = 0.0;
-      for( ip = 0 ; ip < p-1 ; ip++ )
-         for( iq = ip+1 ; iq < p ; iq++ )
-            sm += fabs(a[ip][iq]);
-      if( sm == 0.0 ) return;
-      if( i < 3 )  tresh = 0.2 * sm / (p*p);
-      else  tresh = 0.0;
-      for( ip = 0 ; ip < p-1 ; ip++ )
-      {
-         for( iq = ip+1 ; iq < p ; iq++ )
-         {
-            g = 100.0 * fabs(a[ip][iq]);
-            if(( i > 4 ) && ( fabs(d[ip]) + g == fabs(d[ip]) )
-                && ( fabs(d[iq]) + g == fabs(d[iq]) ))
-               a[ip][iq] = 0.0;
-            else if( fabs(a[ip][iq]) > tresh )
-            {
-               h = d[iq] - d[ip];
-               if( fabs(h) + g == fabs(h) )  t = a[ip][iq]/h;
-               else
-               {
-                  theta = 0.5 * h / a[ip][iq];
-                  t     = 1.0 / ( fabs(theta) + sqrt(1.0+theta*theta) );
-                  if( theta < 0 )
-                     t = -t;
-               }
-               c      = 1.0 / sqrt(1.0+t*t);
-               s      = t * c;
-               tau    = s / (1.0+c);
-               h      = t * a[ip][iq];
-               z[ip] += - h;
-               z[iq] +=   h;
-               d[ip] += - h;
-               d[iq] +=   h;
-               a[ip][iq] = 0.0;
-               for( j = 0 ; j <= ip-1 ; j++ )
-                  rotate_dim4( a , tau , s , j , ip , j , iq );
-               for( j = ip+1 ; j <= iq-1 ; j++ )
-                  rotate_dim4( a , tau , s , ip , j , j , iq );
-               for( j = iq+1; j < p ; j++ )
-                  rotate_dim4( a , tau , s , ip , j , iq , j );
-               for( j = 0 ; j < p ; j++ )
-                  rotate_dim4( v , tau , s , j , ip , j , iq );
-            }
-         }
-      }
-      for( ip = 0 ; ip < p ; ip++ )
-      {
-         b[ip] += z[ip];
-         d[ip]  = b[ip];
-         z[ip]  = 0.0;
-      }
-   }
-   return;
-}
-
-bool arlCore::vnl_rigid_matrix::oldRegisterICP(PointList::csptr pointsListA,PointList::csptr pointsListB, double &RMS, unsigned int &iterations, double RMSMax, unsigned int iterationsMax )
-{
-    return false;
-#ifdef ANN
-//  To be continued : Automatic initialization or using the current matrix for initialization
-    vgl_plane_3d< double >planeA, planeB;
-    double rms, min, max;
-    pointsListA->plane(planeA, rms, min, max);
-    pointsListB->plane(planeB, rms, min, max);
-    // Recaler planeA vers planeB et s'en servir comme initialisation
-/*  unsigned int ii;
-    vgl_point_3d< double > (*pt)[3];
-    OptimisePlane SLCalibration;
-    for( ii=0 ; ii<pointsListB.size() ; ++ii )
-    {
-        vgl_point_3d< double > vglPt((*pointsListA)[ii]->x(),(*pointsListA)[ii]->y(),(*pointsListA)[ii]->z());
-        SLCalibration.addData( vglPt);
-    }
-    if(SLCalibration.size()<3) return false;
-    SLCalibration.getPoint(0,pt[0]);
-    SLCalibration.getPoint(unsigned int(SLCalibration.size()/2),pt[1]);
-    SLCalibration.getPoint(SLCalibration.size()-1,pt[2]);
-    vnl_vector<double> planSolution(3);
-    vgl_plane_3d< double >plane(pt[0],pt[1],pt[2]);
-    if(plane.d()==0) // Problem, could we use the four parameters ?
-        return false;
-    planSolution(0)=plane.a()/plane.d();
-    planSolution(1)=plane.b()/plane.d();
-    planSolution(2)=plane.c()/plane.d();
-    if(SLCalibration.size()>3)
-    {
-        vnl_powell computeSLCalibration(&SLCalibration);
-        computeSLCalibration.minimize(planSolution);
-    }
-    double a=planSolution(0);
-    double b=planSolution(1);
-    double c=planSolution(2);
-    double d=1.0;//planSolution(3);
-
-    return false;*/
-#define  SQR( x ) ((x)*(x))
-    const unsigned int dim = 3;
-    //Model (scanner) = pointsListA ; Points cloud (Acquisition) = pointsListB
-    PointList::csptr plA = pointsListA;
-    PointList::csptr plB = pointsListB;
-/*  // Test with a simple translation
-    std::vector< Point::csptr > plB;
-    setIdentity();
-    (*this)[0][3]=0.5;
-    trf(plA,plB);
-*/
-    ANNpointArray modelPoints, dataPoints;
-    ANNpointArray Pk,Yk,Pi;
-    unsigned int i,j,k;
-    unsigned int modelSize, acquisitionSize;
-    ANNpoint gravityA = annAllocPt( dim, 0.0 );
-    modelSize=plA->size();
-    modelPoints = annAllocPts( modelSize, dim );
-    for( i=0 ; i<modelSize ; ++i )
-        //if((*plA)[i]->size()==dim)
-            for( j=0 ; j<dim ; ++j )
-                modelPoints[i][j]=(*plA)[i]->get(j);
-    acquisitionSize=plB->size();
-    dataPoints = annAllocPts( acquisitionSize, dim );
-    for( i=0 ; i<acquisitionSize ; ++i )
-    {
-        if((*plB)[i]->size()==dim)
-            for( j=0 ; j<dim ; ++j )
-            {
-                dataPoints[i][j]=(*plB)[i]->get(j);
-                gravityA[j]+= dataPoints[i][j];
-            }
-    }
-    for( i=0 ; i<dim ; ++i )
-        gravityA[i] /= (double)acquisitionSize;
-//  // ******************* Time chrono ******************
-//  // Calcul du temps d'éxécution du recalage en millisecondes
-//  DWORD dwStart = GetTickCount();
-    // ************* vectors allocation ************************
-    Pk = annAllocPts( acquisitionSize, dim );
-    Pi = annAllocPts( acquisitionSize, dim );
-    Yk = annAllocPts( acquisitionSize, dim );
-    // **************************************************************
-    // first transformation =>P0, icp release the matching between
-    // P0 and model point
-    // **************************************************************
-    ANNpoint gravityP = annAllocPt(dim, 0.0);
-    // FIXME : Voir probl�me d'initialisation !!!
-    vnl_matrix<double> Rot(3,3);
-    vnl_vector<double> Tra(3);
-    Tra.fill (0.0);
-    vnl_vector<double> qr(7);
-    qr[0] = 1.0;
-    for( i=1 ; i<4 ; ++i )
-        qr[i] = 0.0;
-    Rot[0][0] = pow(qr[0],2)+pow(qr[1],2)-pow(qr[2],2)-pow(qr[3],2);
-    Rot[0][1] = 2*(qr[1]*qr[2]-qr[0]*qr[3]);
-    Rot[0][2] = 2*(qr[1]*qr[3]+qr[0]*qr[2]);
-    Rot[1][0] = 2*(qr[1]*qr[2]+qr[0]*qr[3]);
-    Rot[1][1] = pow(qr[0],2)+pow(qr[2],2)-pow(qr[1],2)-pow(qr[3],2);
-    Rot[1][2] = 2*(qr[2]*qr[3]-qr[0]*qr[1]);
-    Rot[2][0] = 2*(qr[1]*qr[3]-qr[0]*qr[2]);
-    Rot[2][1] = 2*(qr[2]*qr[3]+qr[0]*qr[1]);
-    Rot[2][2] = pow(qr[0],2)+pow(qr[3],2)-pow(qr[1],2)-pow(qr[2],2);
-    for( i=0 ; i<acquisitionSize ; ++i )
-    {  //julie : on applique l'identit� � l'ensemble des points de l'acquisition
-        for( j=0 ; j<3; ++j )
-        {
-            Pi[i][j] = Pk[i][j] = Rot[j][0]*dataPoints[i][0]+Rot[j][1]*dataPoints[i][1]+Rot[j][2]*dataPoints[i][2]+Tra[j];
-            gravityP[j]+= Pi[i][j];
-        }
-    }
-    for( i=0 ; i<3; ++i )
-        gravityP[i]/= (double)acquisitionSize;
-    // ********************** ICP Initialisation ************************
-    // ** P={pi} points de donnees (Np) et X={xi} points de modele (Nx) *
-    ANNpoint gravityY = annAllocPt(dim, .0);
-    int index = 0;
-    RMS = FLT_MAX/2; //FLT_MAX defini dans Visual
-    double oldRMS = FLT_MAX, traSpy;
-    vnl_matrix<double> Id3(3,3);
-    Id3.set_identity();
-    vnl_matrix<double> Rend(3,3);
-    Rend.set_identity();
-    vnl_matrix<double> Spy(3,3);
-    vnl_vector<double> Delta (3);
-    double QSpy[4][4];
-    vnl_matrix<double> Ricp (3,3);
-    vnl_matrix<double> buffer_mul (3,3);
-    iterations = 0;
-    // ****************************** ICP algorithm ***************************
-    //while( fabs(RMS-oldRMS)>tau && iterations<iterationsMax && RMS>RMSMax )
-    while( iterations<iterationsMax && RMS>RMSMax )
-    {
-        ++iterations;
-        double testnorm2, norm2;
-        testnorm2 = FLT_MAX;
-        oldRMS = RMS;
-        RMS = 0.0;
-        max = -FLT_MAX;
-        Spy.set_identity();
-        for( i=0 ; i<3 ; ++i )
-            gravityY[i] = 0.0;
-        // step 1 :
-        // search the matching point for every data shape point
-        for( i=0; i<acquisitionSize; ++i )
-        {
-            for( j=0 ; j<modelSize ; ++j )
-            {
-                norm2=SQR(Pk[i][0]-modelPoints[j][0])+SQR(Pk[i][1]-modelPoints[j][1])+SQR(Pk[i][2]-modelPoints[j][2]);
-                if( norm2 < testnorm2 )
-                {
-                    testnorm2=norm2;
-                    for( k=0 ; k<3 ; ++k )
-                        Yk[i][k] = modelPoints[j][k];
-/*                  Yk[i][0] = modelPoints[j][0];
-                    Yk[i][1] = modelPoints[j][1];
-                    Yk[i][2] = modelPoints[j][2];*/
-                }
-            }
-            testnorm2=FLT_MAX;
-            for( j=0 ; j<3 ; ++j )
-                gravityY[j]+= Yk[i][j];
-            RMS+=sqrt(SQR(Pk[i][0]-Yk[i][0])+SQR(Pk[i][1]-Yk[i][1])+SQR(Pk[i][2]-Yk[i][2]));
-        } //end search matching for
-        // calculate the new mean square point matching error
-        RMS/=(double)acquisitionSize;
-        // calculate the center of mass for Y and query_point
-        // by divise the sum by the number of point
-        for( i=0 ; i<3 ; ++i )
-            gravityY[i] /= (double)acquisitionSize;
-        // step 2
-        // Calculate the cross-variance matrix between Pk and Yo
-        // Cov( P0, Yk ) = 1/n*somme(P0*Yk') - ComP0*ComYk'
-        for( i=0 ; i<acquisitionSize ; ++i )
-            for( j=0 ; j<3 ; ++j )
-                for( k=0 ; k<3 ; ++k )
-                    Spy[j][k]+= Pi[i][j]*Yk[i][k];
-/*          Spy[0][0]+= Pi[i][0]*Yk[i][0];
-            Spy[0][1]+= Pi[i][0]*Yk[i][1];
-            Spy[0][2]+= Pi[i][0]*Yk[i][2];
-            Spy[1][0]+= Pi[i][1]*Yk[i][0];
-            Spy[1][1]+= Pi[i][1]*Yk[i][1];
-            Spy[1][2]+= Pi[i][1]*Yk[i][2];
-            Spy[2][0]+= Pi[i][2]*Yk[i][0];
-            Spy[2][1]+= Pi[i][2]*Yk[i][1];
-            Spy[2][2]+= Pi[i][2]*Yk[i][2];*/
-        for( i=0 ; i<3 ; ++i )
-            for( j=0 ; j<3 ; ++j )
-                Spy[i][j] = Spy[i][j]/(double)acquisitionSize - gravityP[i]*gravityY[j];
-        // Delta = [A23 A31 A12] with Amn = Spy[m][n]-Spy[n][m]
-        Delta[0] = Spy[1][2]-Spy[2][1];
-        Delta[1] = Spy[2][0]-Spy[0][2];
-        Delta[2] = Spy[0][1]-Spy[1][0];
-        // calculate the matrix trace
-        traSpy = Spy[0][0]+Spy[1][1]+Spy[2][2];
-        // calculate the symmetric 4x4 matrix needed to determine
-        // the max eigenvalue
-        QSpy[0][0]=traSpy;
-        for( i=1 ; i<4 ; ++i )
-        {
-            QSpy[i][0] = Delta[i-1];
-            for( j=1 ; j<4; ++j )
-            {
-                QSpy[0][j] = Delta[j-1];
-                QSpy[i][j] = Spy[i-1][j-1]+Spy[j-1][i-1]-traSpy*Id3[i-1][j-1];
-            }
-        }
-        // calculate the eigen value of QSpy
-        double valeur_propre [4];
-        double vecteur_propre [4][4];
-        spec( QSpy, valeur_propre, vecteur_propre);
-        vnl_vector<double> Valp(4);
-        vnl_matrix<double> Vectp(4,4);
-        for(i=0;i<4; i++)
-            for(j=0;j<4; j++)
-            {
-                Valp[i]=valeur_propre[i];
-                Vectp[i][j]=vecteur_propre[i][j];
-            }
-        // optimal Rotation matrix calculate from the quaternion
-        // vector qr=[q0 q1 q2 q3] obtained by obtained the
-        // max eigen value
-        for( i = 0; i < 4; i++ )
-            if( Valp[i] > max )
-            {
-                max   = Valp[i];
-                index = i;
-            }
-        for( i=0 ; i<4 ; i++ )
-            qr[i] = Vectp[i][index];
-        // matrix determinate from the quaternion vector
-        Ricp[0][0] = pow(qr[0],2)+pow(qr[1],2)-pow(qr[2],2)-pow(qr[3],2);
-        Ricp[0][1] = 2*(qr[1]*qr[2]-qr[0]*qr[3]);
-        Ricp[0][2] = 2*(qr[1]*qr[3]+qr[0]*qr[2]);
-        Ricp[1][0] = 2*(qr[1]*qr[2]+qr[0]*qr[3]);
-        Ricp[1][1] = pow(qr[0],2)+pow(qr[2],2)-pow(qr[1],2)-pow(qr[3],2);
-        Ricp[1][2] = 2*(qr[2]*qr[3]-qr[0]*qr[1]);
-        Ricp[2][0] = 2*(qr[1]*qr[3]-qr[0]*qr[2]);
-        Ricp[2][1] = 2*(qr[2]*qr[3]+qr[0]*qr[1]);
-        Ricp[2][2] = pow(qr[0],2)+pow(qr[3],2)-pow(qr[1],2)-pow(qr[2],2);
-        // optimal translation vector Ticp T = ComY - Ricp.ComP
-        for( i=0 ; i<3 ; ++i )
-            qr[4+i] = gravityY[i]-(Ricp[i][0]*gravityP[0]+Ricp[i][1]*gravityP[1]+Ricp[i][2]*gravityP[2]);
-        // step 3 : Application the transformation
-        for( i=0 ; i<acquisitionSize ; ++i )
-            for( j=0 ; j<3 ; ++j )
-                Pk[i][j] = Ricp[j][0]*Pi[i][0]+Ricp[j][1]*Pi[i][1]+Ricp[j][2]*Pi[i][2]+qr[j+4];
-/*          Pk[i][0] = Ricp[0][0]*Pi[i][0]+Ricp[0][1]*Pi[i][1]+Ricp[0][2]*Pi[i][2]+qr[4];
-            Pk[i][1] = Ricp[1][0]*Pi[i][0]+Ricp[1][1]*Pi[i][1]+Ricp[1][2]*Pi[i][2]+qr[5];
-            Pk[i][2] = Ricp[2][0]*Pi[i][0]+Ricp[2][1]*Pi[i][1]+Ricp[2][2]*Pi[i][2]+qr[6];*/
-    } //end while
-    // give the transformation from model data ==> acquisition data
-    // first we add the first transformation to Rend
-    Rend = Ricp*Rot; // FIXME Voir Origine de Rot !!!
-    buffer_mul = Rend.transpose(); // ATTENTION : transpose au lieu de inverse!!!!!!!!!
-    for( i=0 ; i<3 ; ++i )
-    {
-        (*this)[3][i] = 0.0;
-        for( j=0 ; j<3 ; ++j )
-        {
-            (*this)[i][j] = buffer_mul[i][j];
-            Rend[i][j] = buffer_mul[i][j];
-        }
-    }
-    // translation vector = gravityA-Rend*gravityY
-    for( i=0 ; i<3 ; ++i )
-        (*this)[0][3] = gravityA[i]-(Rend[i][0]*gravityY[0]+Rend[i][1]*gravityY[1]+Rend[i][2]*gravityY[2]);
-//  (*this)[0][3] = gravityA[0]-(Rend[0][0]*gravityY[0]+Rend[0][1]*gravityY[1]+Rend[0][2]*gravityY[2]);
-//  (*this)[1][3] = gravityA[1]-(Rend[1][0]*gravityY[0]+Rend[1][1]*gravityY[1]+Rend[1][2]*gravityY[2]);
-//  (*this)[2][3] = gravityA[2]-(Rend[2][0]*gravityY[0]+Rend[2][1]*gravityY[1]+Rend[2][2]*gravityY[2]);
-    (*this)[3][3] = 1.0;
-    // ******************* Time chrono ******************
-//  DWORD dwEnd = GetTickCount();
-//  long dif = dwEnd-dwStart;
-    // destroy() ne marche pas sur toutes les matrices vnl_matrix
-    annDeallocPts( modelPoints );
-    annDeallocPts( dataPoints );
-    annDeallocPts( Pk );
-    annDeallocPts( Yk );
-    annDeallocPts( Pi );
-    //annDeallocPts( resu );
-    annDeallocPt( gravityA );
-    //annDeallocPt( gravityP );
-    //annDeallocPt( gravityY );
-    annClose();
-    m_registerRMS = RMS;
-    std::cout<<"ICP registration\n";
-    std::cout<<"RMS="<<RMS<<" Iterations="<<iterations<<" PtsModel="<<modelSize<<" PtsAcquisition="<<acquisitionSize<<"\n";
-    std::cout<<"Matrix ="<<*this<<"\n";
-    Object::update();
-    return true;
-#else // ANN
-    return false;
-#endif // ANN
-}
-
-void tensorProduct( const arlCore::Point& a, const arlCore::Point& b, vnl_matrix_fixed<double,3,3> &mat )
-{
-    unsigned int i, j;
-    for( i=0 ; i<3 ; ++i )
-        for( j=0 ; j<3 ; ++j )
-            mat.put(i,j, a[i]*b[j] );
-}
-
-template <typename T>
-bool internRegister3D3D( const T &src, const T &dst,  arlCore::vnl_rigid_matrix &mat, bool computeRMS )
-{   // Registration only with the visible points ** NEW METHOD **
-    //assert(src->size()==dst.size() && src->size()>=3);
-    if( src->size()!=dst->size() || src->size()<3 ) return false;
-    unsigned int i, j;
-    // Arun et al. direct solution technique
-    // Compute matrice H and mean vector
-    arlCore::Point meanA(0.0, 0.0, 0.0), meanB(0.0, 0.0, 0.0);
-    vnl_matrix_fixed<double,3,3> HMat, tempMat;
-    HMat.fill(0.0); tempMat.fill(0.0);
-    double n=0.0;
-    for( i=0 ; i<src->size() ; ++i )
-        if((*dst)[i]!=0 && (*src)[i]!=0)
-            if( (*dst)[i]->isVisible() && (*src)[i]->isVisible())
-            {
-                meanA.add( (*dst)[i]);
-                meanB.add( (*src)[i]);
-                tensorProduct( (*dst)[i], (*src)[i], tempMat);
-                HMat+=tempMat;
-                ++n;
-            }
-    if(n<3) return false;
-    meanA.mult(1/n);
-    meanB.mult(1/n);
-    // now compute K = sum(Tensors products) / N - tensorProduct( meanA, meanB )
-    // Divide H / N
-    HMat *= 1.0 / n;
-    tensorProduct( meanA, meanB, tempMat );
-    // Compute K = sum(Tensors products) / N - tensorProduct( meanA, meanB )
-    HMat -= tempMat;
-    arlCore::vnl_rotation3d_matrix RMat(HMat);
-    // calcul de la rotation la plus proche au sens de la norme de frobenius
-    RMat.closest_rotation();
-    // Compute translation = meanA - R * meanB
-    vnl_vector_fixed<double,3> vector_meanA, vector_meanB, translation;
-    for( i=0 ; i<3 ; ++i)
-    {
-        vector_meanA.put(i,meanA[i]);
-        vector_meanB.put(i,meanB[i]);
-    }
-    translation = vector_meanA - RMat*vector_meanB;
-    for( i=0 ; i<3 ; ++i)
-    {
-        mat[i][3] = translation[i];
-        mat[3][i] = 0.0f;
-        for( j=0 ; j<3 ; ++j)
-            mat.put( i,j, RMat(i,j) );
-    }
-    mat[3][3] = 1.0f;
-    if(computeRMS)
-    {
-        std::vector<double> errors;
-        mat.RMS3D3D( src, dst, errors );
-    }
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::register3D3D( PointList::csptr a, PointList::csptr b, bool computeRMS )
-{
-    m_registerRMS = -1;
-    m_registerStdDev = -1;
-    Object::update();
-    return internRegister3D3D( a, b, *this, computeRMS);
-}
-
-//bool arlCore::vnl_rigid_matrix::register3D3D( const std::vector< Point::csptr >& a, const std::vector< Point::csptr >& b, bool computeRMS )
-//{
-//    m_registerRMS = -1;
-//    m_registerStdDev = -1;
-//    Object::update();
-//    return internRegister3D3D(a, b, *this, computeRMS);
-//}
-
-bool arlCore::vnl_rigid_matrix::register3D3DUncertainty(PointList::csptr  a,PointList::csptr  b, arlCore::ARLCORE_REGISTER3D3D methode, std::vector<double> optimiserParameters, std::vector<double> &log/*, unsigned int numberOfPoints*/ )
-{
-    bool computeRMS = false;
-//  Object::update();
-//  return internRegister3D3D(a, b, numberOfPoints,*this);
-    vnl_vector<double> init(6);
-    arlCore::vnl_rigid_matrix T;
-//  for(unsigned int i = 0;i< b.size();i++)
-//  {
-//      const arlCore::vnl_covariance_matrix &cov_mat = b[i]->getCovMatrix();
-//      std::cerr<<"mat cov = " << cov_mat <<std::endl;
-//  }
-
-    //initialization computation
-    T.register3D3D(a,b,computeRMS/*,numberOfPoints*/);
-    arlCore::vnl_rigid_vector vec(T);
-    init = vec;
-
-    if(methode == arlCore::ARLCORE_REGISTER3D3D_LM)
-    {
-        arlCore::register3D3DUncertainty_LS_cost_function reg3D3D_LM(a, b, 6, /*numberOfPoints*/0, vnl_least_squares_function::use_gradient);
-        vnl_levenberg_marquardt computeReg3D3D_LM(reg3D3D_LM);
-        computeReg3D3D_LM.minimize_using_gradient(init);
-        log.push_back(computeReg3D3D_LM.get_end_error());
-        log.push_back(computeReg3D3D_LM.get_start_error());
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        (*this) = T;
-        return true;
-    }
-    if(methode == arlCore::ARLCORE_REGISTER3D3D_POW)
-    {
-        arlCore::register3D3DUncertainty_cost_function reg3D3D(a, b);
-        vnl_powell computeReg3D3D(&reg3D3D);
-        computeReg3D3D.minimize(init);
-        log.push_back(computeReg3D3D.get_end_error());
-        log.push_back(computeReg3D3D.get_start_error());
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        (*this) = T;
-        return true;
-    }
-    if(methode == arlCore::ARLCORE_REGISTER3D3D_GC)
-    {
-        arlCore::register3D3DUncertainty_cost_function reg3D3D(a, b);
-        vnl_conjugate_gradient computeReg3D3D(reg3D3D);
-        computeReg3D3D.minimize(init);
-        log.push_back(computeReg3D3D.get_end_error());
-        log.push_back(computeReg3D3D.get_start_error());
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        (*this) = T;
-        return true;
-    }
-    return false;
-}
-
-bool arlCore::vnl_rigid_matrix::RMS3D3D( PointList::csptr src, PointList::csptr dst, std::vector<double>& errors )
-{
-    m_registerRMS = 0.0, m_registerStdDev = 0.0;
-    assert(src->size()==dst->size());
-    if(src->size()!=dst->size()) return false;
-    errors.clear();
-    double err;
-    unsigned int i;
-    arlCore::Point::sptr A = arlCore::Point::New();
-    arlCore::Point::sptr B = arlCore::Point::New();
-    double distance_average = 0;
-    for( i=0 ; i<src->size() ; ++i )
-    {
-        if( (*src)[i]->isVisible() && (*dst)[i]->isVisible())
-        {
-            trf( (*src)[i] ,B );
-            err = B->distance( (*dst)[i] );
-            distance_average += err;
-            errors.push_back(err);
-            m_registerRMS += err*err;
-        }
-    }
-    const double n = (double)errors.size();
-    distance_average /= n;
-    m_registerRMS = sqrt(m_registerRMS/n);
-    for( i=0 ; i<n ; ++i )
-    {
-        err = (errors[i] - distance_average);
-        m_registerStdDev += err*err;
-    }
-    m_registerStdDev = sqrt(m_registerStdDev/n);
-    Object::update();
-    return true;
-}
-
-bool arlCore::vnl_rigid_matrix::register3D3DwithoutMatching( PointList::csptr a, PointList::csptr b, bool computeRMS, double gaussianError, double decimage )
-{   // b = T*a ; a=echantillon mesure ; b=modele reel
-    const bool Verbose = false;
-    if(a->size()<3 || b->size()<3) return false;
-    PointList::sptr Va = PointList::New();
-    PointList::sptr Vb = PointList::New();
-    const unsigned int NbMatching=arlCore::matching3D3D( a, b, gaussianError, decimage, Va, Vb );
-    if(NbMatching>2)
-        return register3D3D( Va, Vb, computeRMS );
-    else
-        if(Verbose) std::cout<<"3D/3D Matching Error\n";
-    return false;
-}
-
-// ****************** ROTATIONS ******************
-// TODO Integrate in vnl_rigid_matrix et vnl_rotation3d_matrix
-vnl_matrix_fixed<double,4,4> arlCore::rotX(double thetaX)
-{
-    const double Angle = thetaX * arlCore::DegToRad;
-    vnl_matrix_fixed<double,4,4> Rx;
-    Rx.set_identity();
-    //Rx = [1      0       0 0
-    //      0 cos(a) -sin(a) 0
-    //      0 sin(a)  cos(a) 0
-    //      0      0       0 1]
-    Rx[1][1] = Rx[2][2] = cos( Angle );
-    Rx[1][2] = -sin( Angle );
-    Rx[2][1] = -Rx[1][2];
-    return Rx;
-}
-
-vnl_matrix_fixed<double,4,4> arlCore::rotY(double thetaY)
-{
-    const double Angle = thetaY * arlCore::DegToRad;
-    vnl_matrix_fixed<double,4,4> Ry;
-    Ry.set_identity();
-    // Ry = [ cos(a) 0 sin(a) 0
-    //             0 1 0      0
-    //       -sin(a) 0 cos(a) 0
-    //             0 0 0      1]
-    Ry[0][0] = Ry[2][2]  = cos( Angle );
-    Ry[0][2] = sin( Angle );
-    Ry[2][0] = -Ry[0][2];
-    return Ry;
-}
-
-vnl_matrix_fixed<double,4,4> arlCore::rotZ(double thetaZ)
-{
-    const double Angle = thetaZ * arlCore::DegToRad;
-    vnl_matrix_fixed<double,4,4> Rz;
-    Rz.set_identity();
-    // Rz = [cos(a) -sin(a) 0 0
-    //       sin(a)  cos(a) 0 0
-    //            0       0 1 0
-    //            0       0 0 1]
-    Rz[0][0] = Rz[1][1] = cos( Angle );
-    Rz[0][1] = -sin( Angle );
-    Rz[1][0] = -Rz[0][1];
-    return Rz;
-}
-
-vnl_matrix_fixed<double,4,4> arlCore::rotXYZ(double thetaX, double thetaY, double thetaZ)
-{
-    const double AngleX = thetaX * arlCore::DegToRad;
-    const double AngleY = thetaY * arlCore::DegToRad;
-    const double AngleZ = thetaZ * arlCore::DegToRad;
-    vnl_matrix_fixed<double,4,4> R;
-    R.set_identity();
-    //R = [cos(z)cos(y)     sin(z)cos(x)-cos(z)sin(y)sin(x)     sin(z)sin(x)+cos(z)sin(y)cos(x) 0
-    //     -sin(z)cos(y)    cos(z)cos(x)+sin(z)sin(y)sin(x)     cos(z)sin(x)-sin(z)sin(y)cos(x) 0
-    //     -sin(y)          -cos(y)sin(x)                       cos(y)cos(x)                    0
-    //      0               0                                   0                               1]
-    R[0][0] = cos(AngleZ)*cos(AngleY);
-    R[0][1] = sin(AngleZ)*cos(AngleX)-cos(AngleZ)*sin(AngleY)*sin(AngleX);
-    R[0][2] = sin(AngleZ)*sin(AngleX)+cos(AngleZ)*sin(AngleY)*cos(AngleX);
-    R[1][0] = -sin(AngleZ)*cos(AngleY);
-    R[1][1] = cos(AngleZ)*cos(AngleX)+sin(AngleZ)*sin(AngleY)*sin(AngleX);
-    R[1][2] = cos(AngleZ)*sin(AngleX)-sin(AngleZ)*sin(AngleY)*cos(AngleX);
-    R[2][0] = -sin(AngleY);
-    R[2][1] = -cos(AngleY)*sin(AngleX);
-    R[2][2] = cos(AngleY)*cos(AngleX);
-    return R;
-}
-
-vnl_matrix_fixed<double,4,4> arlCore::rotVecFromOrigin(double Ux, double Uy, double Uz, double a)
-{
-    const double Alpha = a * arlCore::DegToRad;
-    const double Norm = sqrt(Ux*Ux+Uy*Uy+Uz*Uz);
-    vnl_matrix_fixed<double,4,4> R;
-    R.set_identity();
-    if(Norm==0.0) return R;
-    if(Norm!=1.0) Ux /= Norm, Uy /= Norm, Uz /= Norm;
-    const double Ux2 = Ux*Ux, Uy2 = Uy*Uy, Uz2 = Uz*Uz;
-    //R = [Ux²+cos(a)*(1-Ux²)           Ux*Uy*(1-cos(a))-Uz*sin(a)  Ux*Uz*(1-cos(a))+Uy*sin(a)  0
-    //     Ux*Uy*(1-cos(a))+Uz*sin(a)   Uy²+cos(a)*(1-Uy²)          Uy*Uz*(1-cos(a))-Ux*sin(a)  0
-    //     Ux*Uz*(1-cos(a))-Uy*sin(a)   Uy*Uz*(1-cos(a))+Ux*sin(a)  Uz²+cos(a)*(1-Uz²)          0
-    //      0                           0                           0                           1]
-    R[0][0] = Ux2+cos(Alpha)*(1-Ux2);
-    R[0][1] = Ux*Uy*(1-cos(Alpha))-Uz*sin(Alpha);
-    R[0][2] = Ux*Uz*(1-cos(Alpha))+Uy*sin(Alpha);
-    R[1][0] = Ux*Uy*(1-cos(Alpha))+Uz*sin(Alpha);
-    R[1][1] = Uy2+cos(Alpha)*(1-Uy2);
-    R[1][2] = Uy*Uz*(1-cos(Alpha))-Ux*sin(Alpha);
-    R[2][0] = Ux*Uz*(1-cos(Alpha))-Uy*sin(Alpha);
-    R[2][1] = Uy*Uz*(1-cos(Alpha))+Ux*sin(Alpha);
-    R[2][2] = Uz2+cos(Alpha)*(1-Uz2);
-    return R;
-}
-
-vnl_matrix_fixed<double,4,4> arlCore::rotVecFromPoint(double a, double b, double c, double u, double v, double w, double angle)
-{   // http://inside.mines.edu/~gmurray/ArbitraryAxisRotation/ArbitraryAxisRotation.html
-    const double Alpha = angle * arlCore::DegToRad;
-    const double L2 = u*u+v*v+w*w;
-    const double L = sqrt(L2);
-    unsigned int i, j;
-    vnl_matrix_fixed<double,4,4> R;
-    R.set_identity();
-    if(L==0.0) return R;
-    if(L!=1.0) u /= L, v /= L, w /= L;
-    const double u2 = u*u, v2 = v*v, w2 = w*w;
-    R[0][0] = u2+(v2+w2)*cos(Alpha);
-    R[0][1] = u*v*(1-cos(Alpha))-w*L*sin(Alpha);
-    R[0][2] = u*w*(1-cos(Alpha))+v*L*sin(Alpha);
-    R[0][3] = a*(v2+w2)-u*(b*v+c*w)+(u*(b*v+c*w)-a*(v2+w2))*cos(Alpha)+(b*w-c*v)*L*sin(Alpha);
-    R[1][0] = u*v*(1-cos(Alpha))+w*L*sin(Alpha);
-    R[1][1] = v2+(u2+w2)*cos(Alpha);
-    R[1][2] = v*w*(1-cos(Alpha))-u*L*sin(Alpha);
-    R[1][3] = b*(u2+w2)-v*(a*u+c*w)+(v*(a*u+c*w)-b*(u2+w2))*cos(Alpha)+(c*u-a*w)*L*sin(Alpha);
-    R[2][0] = u*w*(1-cos(Alpha))-v*L*sin(Alpha);;
-    R[2][1] = v*w*(1-cos(Alpha))+u*L*sin(Alpha);
-    R[2][2] = w2+(u2+v2)*cos(Alpha);;
-    R[2][3] = c*(u2+v2)-w*(a*u+b*v)+(w*(a*u+b*v)-c*(u2+v2))*cos(Alpha)+(a*v-b*u)*L*sin(Alpha);
-    for( i=0 ; i<3 ; ++i )
-        for( j=0 ; j<4 ; ++j )
-            R[i][j] /= L2;
-    return R;
-}
-
-// ****************** TRANSFORMATION FILTER ******************
-// time=[0,1]
-double getCoeff( double time, arlCore::ARLCORE_TRF_FILTER_TYPE filterType )
-{   // Default : ARLCORE_TRF_FILTER_CONSTANT
-    assert( time>=0.0 && time<=1.0 );
-    const double LogRange = 2.71828182845904523536 - 1.0;
-    switch(filterType)
-    {
-    case arlCore::ARLCORE_TRF_FILTER_LINEAR: return time;
-    case arlCore::ARLCORE_TRF_FILTER_LOG: return log(1.0+time*LogRange);
-    case arlCore::ARLCORE_TRF_FILTER_SQUARE: return time*time;
-    case arlCore::ARLCORE_TRF_FILTER_CUBIC: return time*time*time;
-    default: break;
-    }
-    return 1.0;
-}
-
-unsigned int arlCore::filter( const std::vector<const arlCore::vnl_rigid_matrix*> &list , ARLCORE_TRF_FILTER_TYPE type, vnl_rigid_matrix &average )
-{
-    const unsigned int Size = (unsigned int)list.size();
-    if(Size==0) return 0;
-    assert(list.back());
-    average.setTime(list.back()->getDate(), list.back()->getTime());
-    const double CurrentTime = (double)average.getTime(); // FIXME Planesystem time
-    assert(list[0]);
-    const double LastTime = (double)list[0]->getTime(); // FIXME Planesystem time - duration
-    const double RangeTime = CurrentTime - LastTime;
-    assert( RangeTime>=0.0 );
-    if(Size==1)
-    {
-        average.copy(*list[0]);
-        return Size;
-    }
-    vnl_quaternion<double>   Q;
-    vnl_vector_fixed<double,3>  T,euler, eulermean(0,0,0),Tmean(0,0,0);
-    vnl_rotation3d_matrix rot,rotinit;
-    double coeffTotal = 0.0, coeff;
-    unsigned int i;
-    for( i=0 ; i<Size ; ++i )
-    {
-        if(type==ARLCORE_TRF_FILTER_CONSTANT || RangeTime==0.0 ) coeff = 1.0;
-        else
-        {
-            const double time = list[i]->getTime();
-            assert( time>=LastTime && time<=CurrentTime );
-            coeff = getCoeff( (time-LastTime)/RangeTime, type);
-        }
-        assert(list[i]);
-        Q = list[i]->getQuaternion();
-        T = list[i]->getTranslation();
-        euler = Q.rotation_euler_angles();
-        eulermean+=euler*coeff;
-        Tmean+=T*coeff;
-        coeffTotal += coeff;
-    }
-    eulermean/=coeffTotal;
-    Tmean/=coeffTotal;
-    vnl_quaternion<double> q2(eulermean[0],eulermean[1],eulermean[2]);
-    rot = q2.rotation_matrix_transpose();
-    rot = rot.transpose();
-    average.setTranslation(Tmean);
-    average.setRotation(rot);
-    return Size;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Mesh.cpp b/SrcLib/ARLcore/src/arlcore/Mesh.cpp
deleted file mode 100644
index 79c98f9..0000000
--- a/SrcLib/ARLcore/src/arlcore/Mesh.cpp
+++ /dev/null
@@ -1,754 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Mesh.h>
-
-#include <fstream>
-#include <math.h>
-
-#include <vnl/vnl_math.h>
-
-#include <vgl/vgl_point_3d.h>
-#include <vgl/vgl_distance.h>
-#include <vgl/vgl_triangle_3d.h>
-#include <vgl/algo/vgl_homg_operators_3d.h>
-
-#include <arlcore/Misc.h>
-#include <arlcore/File.h>
-
-arlCore::Mesh::Mesh( double pointScalar ):
-m_pointScalar(pointScalar),
-m_pointList( arlCore::PointList::New() )
-{
-    m_pointList->setDimension(3);
-}
-
-arlCore::Mesh::Mesh( const Mesh& p )
-{
-    copy(p);
-}
-
-arlCore::Mesh::~Mesh( void )
-{}
-
-void arlCore::Mesh::copy( const Mesh& m )
-{
-    m_pointList = m.m_pointList;
-    m_triangles = m.m_triangles;
-    m_nbReferences = m.m_nbReferences;
-    // TODO Don't copy free points & triangles
-    m_freePoints = m.m_freePoints;
-    m_freeTriangles = m.m_freeTriangles;
-}
-
-void arlCore::Mesh::clear( void )
-{
-    m_pointList->clear();
-    m_triangles.clear();
-    m_nbReferences.clear();
-    m_freePoints.clear();
-    m_freeTriangles.clear();
-}
-
-arlCore::Mesh::Mesh( const std::string& fileName )
-{
-    load(fileName);
-}
-
-double arlCore::Mesh::getRMSDistance( void ) const
-{
-    double distance = 0.0;
-    unsigned int i, j;
-    const unsigned int Size = (unsigned int)m_triangles.size();
-    for( i=0 ; i<Size ; ++i )
-    {
-        vnl_vector_fixed<double,3> lengths = getLengths(i);
-        for( j=0 ; j<3 ; ++j )
-            distance += lengths[j]*lengths[j];
-    }
-    return sqrt(distance/(double)(Size*3));
-}
-
-double arlCore::Mesh::computeDistance2( Point::csptr p ) const
-{
-    unsigned int noTriangle;
-    const double D = computeDistance(p, noTriangle);
-    return D*D;
-}
-
-double arlCore::Mesh::computeDistance2( Point::csptr p, unsigned int &noTriangle ) const
-{
-    const double D = computeDistance(p, noTriangle);
-    return D*D;
-}
-
-double arlCore::Mesh::computeDistance( Point::csptr p ) const
-{
-    unsigned int noTriangle;
-    return computeDistance( p, noTriangle );
-}
-
-double arlCore::Mesh::computeDistance( Point::csptr p, unsigned int &noTriangle ) const
-{
-    const vgl_point_3d<double> VglPoint(p->x(), p->y(), p->z());
-    unsigned int i;
-    double distance = -1.0;
-    for( i=0 ; i<m_triangles.size() ; ++i )
-    {
-        Point::csptr P0 = (*m_pointList)[m_triangles[i][0]];
-        const vgl_point_3d<double> VglP0(P0->x(), P0->y(), P0->z());
-        Point::csptr P1 = (*m_pointList)[m_triangles[i][1]];
-        const vgl_point_3d<double> VglP1(P1->x(), P1->y(), P1->z());
-        Point::csptr P2 = (*m_pointList)[m_triangles[i][2]];
-        const vgl_point_3d<double> VglP2(P2->x(), P2->y(), P2->z());
-        const double D = vgl_triangle_3d_distance( VglPoint, VglP0, VglP1, VglP2 );
-        if(i==0) {distance = D, noTriangle = i;}
-        else if(D<distance) {distance = D, noTriangle = i;}
-    }
-    return distance;
-}
-
-arlCore::PointList::csptr arlCore::Mesh::getPointList( void ) const
-{
-    return m_pointList;
-}
-
-const std::vector< vnl_vector_fixed<unsigned int, 3> >& arlCore::Mesh::getTriangles( void ) const
-{
-    return m_triangles;
-}
-
-double arlCore::Mesh::triangleSurface( unsigned int i ) const
-{
-    if(i>=m_triangles.size()) return -1;
-    Point::csptr P0 = (*m_pointList)[m_triangles[i][0]];
-    const vgl_point_3d<double> VglP0(P0->x(), P0->y(), P0->z());
-    Point::csptr P1 = (*m_pointList)[m_triangles[i][1]];
-    const vgl_point_3d<double> VglP1(P1->x(), P1->y(), P1->z());
-    Point::csptr P2 = (*m_pointList)[m_triangles[i][2]];
-    const vgl_point_3d<double> VglP2(P2->x(), P2->y(), P2->z());
-    return vgl_triangle_3d_area( VglP0, VglP1, VglP2 );
-}
-
-bool arlCore::Mesh::generateX( double ySize, double zSize, double yStep, double zStep, double degree, double gaussianNoise, PointList::sptr summits )
-{
-    return generate( 0, ySize, zSize, yStep, zStep, degree, gaussianNoise, summits );
-}
-
-bool arlCore::Mesh::generateY( double xSize, double zSize, double xStep, double zStep, double degree, double gaussianNoise, PointList::sptr summits )
-{
-    return generate( 1, xSize, zSize, xStep, zStep, degree, gaussianNoise, summits );
-}
-
-bool arlCore::Mesh::generateZ( double xSize, double ySize, double xStep, double yStep, double degree, double gaussianNoise, PointList::sptr summits )
-{
-    return generate( 2, xSize, ySize, xStep, yStep, degree, gaussianNoise, summits );
-}
-
-bool arlCore::Mesh::generate( unsigned int axis, double width, double length, double stepW, double stepL, double degree, double gaussianNoise, PointList::sptr summits )
-{
-    clear();
-    const unsigned int Width = (unsigned int)(width/stepW);
-    const unsigned int Length = (unsigned int)(length/stepL);
-    if(Width<1 || Length<1) return false;
-    std::vector< std::vector<double> > grid(Width);
-    unsigned int i, j, k;
-    for( i=0 ; i<Width ; ++i )
-    {
-        const double Wi = (double)i*stepW;
-        grid[i].resize(Length);
-        for( j=0 ; j<Length ; ++j )
-        {
-            const double Li = (double)j*stepL;
-            bool end = false;
-            double altitude = 0.0;
-            vnl_vector<double> invDists(summits->size());
-            for( k=0 ; k<summits->size() && !end ; ++k )
-            {
-                double distance2;
-                switch(axis)
-                {
-                case 0:
-                    distance2 = (Wi-(*summits)[k]->y())*(Wi-(*summits)[k]->y())+(Li-(*summits)[k]->z())*(Li-(*summits)[k]->z());
-                    break;
-                case 1:
-                    distance2 = (Wi-(*summits)[k]->x())*(Wi-(*summits)[k]->x())+(Li-(*summits)[k]->z())*(Li-(*summits)[k]->z());
-                    break;
-                case 2:
-                    distance2 = (Wi-(*summits)[k]->x())*(Wi-(*summits)[k]->x())+(Li-(*summits)[k]->y())*(Li-(*summits)[k]->y());
-                    break;
-                default: return false;
-                }
-                const double Distance = sqrt(distance2);
-                const double DistancePow = pow(Distance, degree);
-                if(Distance<1e-8)
-                {
-                    altitude = (*summits)[k]->z();
-                    end = true;
-                }else invDists[k] = 1.0/DistancePow;
-            }
-            if(!end)
-            {
-                const double Sum = invDists.sum();
-                for( k=0 ; k<summits->size() ; ++k )
-                {
-                    const double Coeff = invDists[k]/Sum;
-                    altitude += (*summits)[k]->z()*Coeff;
-                }
-            }
-            grid[i][j]=altitude;
-        }
-    }
-    for( i=0 ; i<Width-1 ; ++i )
-    {
-        const double Width0 = (double)i*stepW;
-        const double Width1 = (double)(i+1)*stepW;
-        for( j=0 ; j<Length-1 ; ++j )
-        {
-
-            const double Length0 = (double)j*stepL;
-            const double Length1 = (double)(j+1)*stepL;
-            const double Alt0 = grid[i+0][j+0];
-            const double Alt1 = grid[i+1][j+0];
-            const double Alt2 = grid[i+1][j+1];
-            const double Alt3 = grid[i+0][j+1];
-            std::vector<unsigned int> index(4);
-            switch(axis)
-            {
-            case 0:
-                index[0] = addPoint(arlCore::Point::New(Alt0, Width0, Length0), gaussianNoise);
-                index[1] = addPoint(arlCore::Point::New(Alt1, Width1, Length0), gaussianNoise);
-                index[2] = addPoint(arlCore::Point::New(Alt2, Width1, Length1), gaussianNoise);
-                index[3] = addPoint(arlCore::Point::New(Alt3, Width0, Length1), gaussianNoise);
-                break;
-            case 1:
-                index[0] = addPoint(arlCore::Point::New(Width0, Alt0, Length0), gaussianNoise);
-                index[1] = addPoint(arlCore::Point::New(Width1, Alt1, Length0), gaussianNoise);
-                index[2] = addPoint(arlCore::Point::New(Width1, Alt2, Length1), gaussianNoise);
-                index[3] = addPoint(arlCore::Point::New(Width0, Alt3, Length1), gaussianNoise);
-                break;
-            case 2:
-                index[0] = addPoint(arlCore::Point::New(Width0, Length0, Alt0), gaussianNoise);
-                index[1] = addPoint(arlCore::Point::New(Width1, Length0, Alt1), gaussianNoise);
-                index[2] = addPoint(arlCore::Point::New(Width1, Length1, Alt2), gaussianNoise);
-                index[3] = addPoint(arlCore::Point::New(Width0, Length1, Alt3), gaussianNoise);
-                break;
-            default: return false;
-            }
-            addTriangle(index[0], index[1], index[2]);
-            addTriangle(index[0], index[2], index[3]);
-        }
-    }
-    return true;
-}
-
-bool arlCore::Mesh::load( const std::string& fileName, double gaussianNoise )
-{
-    clear();
-    if(fileName=="") return false;
-    std::string extractFolder, extractFile, ext;
-    arlString::splitFilename( fileName, extractFolder, extractFile, ext );
-    std::string filetype = File::getFiletype( fileName );
-    if(filetype=="Planes")
-    {
-        arlCore::File config(fileName, "Planes");
-        const double Version = config.readHeader();
-        if(Version>0.0)
-        {
-            std::vector< vgl_homg_plane_3d<double> > planes;
-            std::vector< double > planeRMS, planeMin, planeMax;
-            std::vector< unsigned int > planeN;
-            std::vector< vgl_homg_point_3d<double> > points;
-            unsigned int i, index;
-            std::string token, name;
-            while(config.getToken(token))
-            {
-                unsigned int p1, p2, p3;
-                double x, y, z, outliers=0.0, scalar=0.0;
-                if(token=="Planes")
-                {
-                    config.get(name);
-                    config.get(outliers);
-                    std::vector< vnl_vector<double> > vnlPoints;
-                    std::vector< std::string > names;
-                    std::stringstream ss;
-                    ss<<extractFolder<<"/"<<name;
-                    if(arlCore::load( vnlPoints, names, ss.str() ))
-                    {
-                        std::vector< arlCore::PointList > PL;
-                        for( i=0 ; i<vnlPoints.size() ; ++i )
-                        {
-                            if(arlString::valueOf(names[i], index))
-                            {
-                                if(PL.size()<=index) PL.resize(index+1);
-                                arlCore::Point::sptr pt = arlCore::Point::New(vnlPoints[i][0], vnlPoints[i][1], vnlPoints[i][2]);
-                                PL[index].push_back(pt);
-                            }
-                        }
-                        const unsigned int Size = (unsigned int)PL.size();
-                        planes.resize(Size);
-                        planeRMS.resize(Size);
-                        planeMin.resize(Size);
-                        planeMax.resize(Size);
-                        planeN.resize(Size);
-                        for( i=0 ; i<PL.size() ; ++i )
-                            planeN[i] = PL[i].plane( planes[i], planeRMS[i], planeMin[i], planeMax[i], scalar, outliers );
-                    }
-                }
-                if(token=="Point")
-                {
-                    config.get(index);
-                    if(points.size()<=index) points.resize(index+1);
-                    config.getToken(token);
-                    if(token=="Intersection")
-                    {
-                        config.get(p1);
-                        config.get(p2);
-                        config.get(p3);
-                        if(planes.size()>p1 && planes.size()>p2 && planes.size()>p3)
-                            points[index]=vgl_homg_point_3d<double>(planes[p1], planes[p2], planes[p3]);
-                    }
-                    if(token=="Coordinates")
-                    {
-                        config.get(x);
-                        config.get(y);
-                        config.get(z);
-                        points[index]=vgl_homg_point_3d<double>(x, y, z);
-                    }
-                }
-                if(token=="Triangle")
-                {
-                    config.get(p1);
-                    config.get(p2);
-                    config.get(p3);
-                    if(points.size()>p1 && points.size()>p2 && points.size()>p3)
-                    {
-                        points[p1].get_nonhomogeneous( x, y, z );
-                        const arlCore::Point::sptr Pt1 = arlCore::Point::New( x, y, z );
-                        points[p2].get_nonhomogeneous( x, y, z );
-                        const arlCore::Point::sptr Pt2= arlCore::Point::New( x, y, z );
-                        points[p3].get_nonhomogeneous( x, y, z );
-                        const arlCore::Point::sptr Pt3= arlCore::Point::New( x, y, z );
-                        addTriangle( Pt1, Pt2, Pt3 );
-                    }
-                }
-                double compareValue = 0.0;
-                const bool Compare = (token=="Compare");
-                if(Compare)
-                    config.get(compareValue);
-                if(token=="Display" || Compare)
-                {   // FIXME Find another way to display this informations
-                    config.getToken(token);
-                    if(token=="Point")
-                    {
-                        config.get(p1);
-                        if(points.size()>p1)
-                        {
-                            points[p1].get_nonhomogeneous( x, y, z );
-                            std::cout<<"Point "<<p1<<" = "<<x<<" "<<y<<" "<<z<<"\n";
-                        }
-                    }
-                    if(token=="Plane")
-                    {
-                        config.get(p1);
-                        if(planes.size()>p1)
-                        {
-                            std::cout<<"Plane "<<p1<<" RMS="<<planeRMS[p1]<<" Min="<<planeMin[p1];
-                            std::cout<<" Max="<<planeMax[p1]<<" n="<<planeN[p1];
-                            //std::cout<<" : "<<planes[p1];
-                            std::cout<<"\n";
-                        }
-                    }
-                    if(token=="PlaneAngle")
-                    {
-                        config.get(p1);
-                        config.get(p2);
-                        if(planes.size()>p1 && planes.size()>p2)
-                        {
-                            double angle = fmod(vgl_homg_operators_3d<double>::plane_plane_angle(planes[p1], planes[p2]), vnl_math::pi/2.0);
-                            if(angle>=vnl_math::pi/4.0) angle = vnl_math::pi/2.0 - angle;
-                            std::cout<<"Plane Angle "<<p1<<"-"<<p2<<" = "<<angle*arlCore::RadToDeg<<" deg";
-                            if(Compare) std::cout<<" (Delta="<<angle*arlCore::RadToDeg-compareValue<<")";
-                            std::cout<<"\n";
-                        }
-                    }
-                    if(token=="PointDistance")
-                    {
-                        config.get(p1);
-                        config.get(p2);
-                        if(points.size()>p1 && points.size()>p2)
-                        {
-                            const double Distance = vgl_distance(points[p1], points[p2]);
-                            std::cout<<"Point Distance "<<p1<<"-"<<p2<<" = "<<Distance<<" mm";
-                            if(Compare) std::cout<<" (Delta="<<Distance-compareValue<<")";
-                            std::cout<<"\n";
-                        }
-                    }
-                    if(token=="PointAngle")
-                    {
-                        config.get(p1);
-                        config.get(p2);
-                        config.get(p3);
-                        if(points.size()>p1 && points.size()>p2 && points.size()>p3)
-                        {
-                            double x1, x2, x3, y1, y2, y3, z1, z2, z3;
-                            points[p1].get_nonhomogeneous( x1, y1, z1 );
-                            points[p2].get_nonhomogeneous( x2, y2, z2 );
-                            points[p3].get_nonhomogeneous( x3, y3, z3 );
-                            vnl_vector_fixed<double, 3> dir1( x1-x2, y1-y2, z1-z2 );
-                            vnl_vector_fixed<double, 3> dir2( x3-x2, y3-y2, z3-z2 );
-                            dir1.normalize();
-                            dir2.normalize();
-                            double angle = vcl_acos( dot_product( dir1, dir2 ) );
-                            std::cout<<"Point Angle "<<p1<<"-"<<p2<<"-"<<p3<<" = "<<angle*arlCore::RadToDeg<<" deg";
-                            if(Compare) std::cout<<" (Delta="<<angle*arlCore::RadToDeg-compareValue<<")";
-                            std::cout<<"\n";                        }
-                    }
-                }
-            }
-        }
-        config.close();
-        return m_triangles.size()>0;
-    }
-    if(filetype=="Surface")
-    {
-        arlCore::File config(fileName, "Surface");
-        const double Version = config.readHeader();
-        if(Version>0.0)
-        {
-            arlCore::PointList::sptr summits = arlCore::PointList::New(); //VAG FIXME NB New(3)
-            unsigned int xSize=0, ySize=0;
-            double xStep = 1.0, yStep = 1.0, degree = 2.0, noise = 0.0;
-            vnl_vector<double> point(3);
-            std::string token, name;
-            while(config.getToken(token))
-            {
-                if(token=="Name") config.get(name);
-                // TODO Generate altitude on X or Y-axis
-                if(token=="XSize" || token=="Width") config.get(xSize);
-                if(token=="YSize" || token=="Length") config.get(ySize);
-                if(token=="XStep") config.get(xStep);
-                if(token=="YStep") config.get(yStep);
-                if(token=="Step")
-                {
-                    config.get(xStep);
-                    yStep = xStep;
-                }
-                if(token=="Degree") config.get(degree);
-                if(token=="GaussianNoise") config.get(noise);
-                if(token=="Summit")
-                    if(config.get(point, 3))
-                        summits->push_back( Point::New(point[0],point[1],point[2]) );
-            }
-            if(gaussianNoise>0.0) noise = gaussianNoise;
-            generateZ( xSize, ySize, xStep, yStep, degree, noise, summits );
-        }
-        config.close();
-        return m_triangles.size()>0;
-    }
-    std::ifstream file;
-    file.open (fileName.c_str(), std::fstream::in);
-    if(!file.is_open())
-    {
-        std::cerr<<"Mesh Loading error : "<<fileName<<"\n";
-        return false;
-    }
-    const bool Trian = (ext=="trian");
-    const bool Raw = (ext=="raw");
-    unsigned int i=0, a, b, c;
-    double x, y, z;
-    Point::sptr p = Point::New(3);
-    if(Trian)
-    {
-        unsigned int nbPts, nbTrian;
-        file>>nbPts;
-        for( ; i<nbPts ; ++i )
-        {
-            file>>x>>y>>z;
-            p->x(x);
-            p->y(y);
-            p->z(z);
-            addPoint(p, gaussianNoise);
-        }
-        file>>nbTrian;
-        for( i=0 ; i<nbTrian ; ++i )
-        {
-            file>>a>>b>>c>>x>>y>>z;
-            addTriangle(a, b, c);
-        }
-        file.close();
-        return m_triangles.size()>0;
-    }
-    if(Raw)
-    {
-        while(!file.eof())
-        {
-            file>>x>>y>>z;
-            p->x(x);
-            p->y(y);
-            p->z(z);
-            unsigned int index = addPoint(p, gaussianNoise);
-            if((i+1)%3==0) addTriangle(index-2, index-1, index);
-            ++i;
-        }
-        file.close();
-        return m_triangles.size()>0;
-    }
-    return false;
-}
-
-bool arlCore::Mesh::save( const std::string& fileName, bool overwrite ) const
-{
-    std::fstream file;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    file.open(fileName.c_str(), std::fstream::out);
-    if(!file.is_open()) return false;
-    std::string extractFolder, extractFile, ext;
-    arlString::splitFilename( fileName, extractFolder, extractFile, ext );
-    const bool Trian = (ext=="trian");
-    const bool Raw = (ext=="raw");
-    const bool Vtk = (ext=="vtk");
-    unsigned int i, j, k;
-    if(Trian)
-    {
-        file<<(unsigned int)m_pointList->size()<<"\n";
-        for( i=0 ; i<(unsigned int)m_pointList->size() ; ++i )
-        {
-            for( j=0 ; j<3 ; ++j )
-                file<<(*m_pointList)[i]->get(j)<<" ";
-            file<<"\n";
-        }
-        file<<(unsigned int)m_triangles.size()<<"\n";
-        for( i=0 ; i<(unsigned int)m_triangles.size() ; ++i )
-        {
-            for( j=0 ; j<3 ; ++j )
-                file<<m_triangles[i][j]<<" ";
-            file<<"-1 -1 -1\n";
-        }
-        file.close();
-        return true;
-    }
-    if(Raw)
-    {
-        for( i=0 ; i<(unsigned int)m_triangles.size() ; ++i )
-        {
-            for( j=0 ; j<3 ; ++j )
-                for( k=0 ; k<3 ; ++k )
-                    file<<(*m_pointList)[m_triangles[i][j]]->get(k)<<" ";
-            file<<"\n";
-        }
-        file.close();
-        return true;
-    }
-    if(Vtk)
-    {
-        file<<"# vtk DataFile Version 1.0\nFileName\nASCII\n\n";
-        //file<<DATASET UNSTRUCTURED_GRID";
-        file<<"DATASET POLYDATA";
-        file<<"\nPOINTS "<<(unsigned int)m_pointList->size()<<" double\n";
-        for( i=0 ; i<(unsigned int)m_pointList->size() ; ++i )
-        {
-            for( j=0 ; j<3 ; ++j )
-                file<<(*m_pointList)[i]->get(j)<<" ";
-            file<<"\n";
-        }
-
-        //file<<"\nCELLS ";
-        file<<"\nPOLYGONS ";
-        file<<(unsigned int)m_triangles.size()<<" "<<(unsigned int)m_triangles.size()*4<<"\n";
-        for( i=0 ; i<(unsigned int)m_triangles.size() ; ++i )
-        {
-            file<<"3 ";
-            for( j=0 ; j<3 ; ++j )
-                file<<m_triangles[i][j]<<" ";
-            file<<"\n";
-        }
-    /*  file<<"\nCELLS_TYPES "<<(unsigned int)m_triangles.size()<<"\n";
-        for( i=0 ; i<(unsigned int)m_triangles.size() ; ++i )
-            file<<"5\n";*/
-        file.close();
-        return true;
-    return true;
-    }
-    return false;
-}
-
-bool arlCore::Mesh::resampling( double step )
-{
-    if(step<=0) return false;
-    unsigned int i, j;
-    const double Tol = 2.0*step;
-    std::vector<arlCore::Point::sptr > points(3);
-    for( i=0 ; i<(unsigned int)m_triangles.size() ; )
-    {
-        vnl_vector_fixed<double,3> lengths = getLengths(i);
-        if((lengths[0]+lengths[1])>=Tol)
-        {
-            std::vector<unsigned int> index(6);
-            for( j=0 ; j<3 ; ++j )
-                index[j] = m_triangles[i][j];
-            const arlCore::Point::sptr A = (*m_pointList)[index[0]];
-            const arlCore::Point::sptr B = (*m_pointList)[index[1]];
-            const arlCore::Point::sptr C = (*m_pointList)[index[2]];
-            m_freeTriangles.push_back(i);
-            --m_nbReferences[m_triangles[i][0]];
-            --m_nbReferences[m_triangles[i][1]];
-            --m_nbReferences[m_triangles[i][2]];
-            for( j=0 ; j<3 ; ++j )
-            {
-                points[0]->set(j, ( (*A)[j]+(*B)[j])/2.0);
-                points[1]->set(j, ( (*B)[j]+(*C)[j])/2.0);
-                points[2]->set(j, ( (*C)[j]+(*A)[j])/2.0);
-            }
-            for( j=0 ; j<3 ; ++j )
-                index[3+j] = addPoint(points[j]);
-            addTriangle( index[0], index[3], index[5] );
-            addTriangle( index[3], index[1], index[4] );
-            addTriangle( index[4], index[2], index[5] );
-            addTriangle( index[5], index[3], index[4] );
-        }else ++i;
-    }
-    assert(m_freePoints.size()==0);
-    assert(m_freeTriangles.size()==0);
-    return true;
-}
-
-// Private methods
-
-unsigned int arlCore::Mesh::addPoint( Point::csptr p, double gaussianNoise )
-{
-    unsigned int index;
-    if(m_freePoints.size()>0)
-    {
-        index = m_freePoints.back();
-        m_freePoints.pop_back();
-        (*m_pointList)[index]->copy(p);
-    }else
-    {
-        index = m_pointList->size();
-        m_pointList->push_back(p);
-        m_pointList->back()->setScalar(m_pointScalar);
-        m_nbReferences.push_back(0);
-    }
-    if(gaussianNoise>0.0) (*m_pointList)[index]->addGaussianNoise(gaussianNoise);
-    return index;
-}
-
-unsigned int arlCore::Mesh::releasePoint( unsigned int noPoint )
-{
-    if(m_nbReferences[noPoint]<1) return 0;
-    --m_nbReferences[noPoint];
-    if(m_nbReferences[noPoint]<1)
-    {
-        m_freePoints.push_back(noPoint);
-        (*m_pointList)[noPoint]->setVisible(false);
-    }
-    return m_nbReferences[noPoint];
-}
-
-bool arlCore::Mesh::addTriangle( Point::csptr P1, Point::csptr P2, Point::csptr P3 )
-{
-    std::vector<unsigned int> index;
-    index.push_back(addPoint(P1));
-    index.push_back(addPoint(P2));
-    index.push_back(addPoint(P3));
-    return addTriangle(index[0], index[1], index[2]);
-}
-
-bool arlCore::Mesh::addTriangle( unsigned int a, unsigned int b, unsigned int c )
-{
-    if(m_freeTriangles.size()==0) m_triangles.push_back(vnl_vector_fixed<unsigned int, 3>(a,b,c));
-    else
-    {
-        unsigned int index = m_freeTriangles.back();
-        m_freeTriangles.pop_back();
-        m_triangles[index] = vnl_vector_fixed<unsigned int, 3>(a,b,c);
-    }
-    ++m_nbReferences[a];
-    ++m_nbReferences[b];
-    ++m_nbReferences[c];
-    return true;
-}
-
-bool arlCore::Mesh::releaseTriangle( unsigned int noTriangle )
-{
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        releasePoint(m_triangles[noTriangle][i]);
-    m_freeTriangles.push_back(noTriangle);
-    return true;
-}
-
-vnl_vector_fixed<double,3> arlCore::Mesh::getLengths( unsigned int noTriangle ) const
-{
-    vnl_vector_fixed<double,3> lengths;
-    assert(noTriangle<m_triangles.size());
-    const arlCore::Point::sptr A = (*m_pointList)[m_triangles[noTriangle][0]];
-    const arlCore::Point::sptr B = (*m_pointList)[m_triangles[noTriangle][1]];
-    const arlCore::Point::sptr C = (*m_pointList)[m_triangles[noTriangle][2]];
-    lengths[0] = A->distance(B);
-    lengths[1] = B->distance(C);
-    lengths[2] = C->distance(A);
-    return lengths;
-}
-
-bool arlCore::Mesh::simplify( void )
-{
-#ifndef ANN
-    return false;
-#else // ANN
-    unsigned int i, j;
-    const unsigned int Size = m_pointList->visibleSize();
-    const unsigned int Dimension = m_pointList->getDimension();
-    ANNpointArray ANNPoints = annAllocPts( Size, Dimension );
-    for( i=0 ; i<m_pointList->size() ; ++i )
-        for( j=0 ; j<Dimension ; ++j )
-            ANNPoints[i][j]=(*m_pointList)[i]->get(j);
-    const int BucketSize = 1;
-    ANNkd_tree* ANNtree = new ANNkd_tree( ANNPoints, Size, Dimension, BucketSize, ANN_KD_SL_MIDPT );
-    const double Epsilon = 1e-8;// Error bound
-    const double SquaredEpsilon = Epsilon*Epsilon;
-    ANNpoint ANNPt = annAllocPt(Dimension); // Query point
-    const unsigned int NbNeighbors = 20;
-    ANNidxArray Nn_idx = new ANNidx[NbNeighbors]; // near neighbor indices
-    ANNdistArray SquaredDists = new ANNdist[NbNeighbors]; // near neighbor distances
-    for( i=0 ; i<m_pointList->size() ; ++i )
-        if((*m_pointList)[i]->isVisible())
-        {
-            std::vector<unsigned int> oldIndex;
-            for( j=0 ; j<Dimension; ++j )
-                ANNPt[j] = (*m_pointList)[i]->get(j);
-            ANNtree->annkSearch( ANNPt, NbNeighbors, Nn_idx, SquaredDists, Epsilon );
-            // Cherche points les plus proches
-            for( j=0 ; j<NbNeighbors ; ++j )
-                if(SquaredDists[j]<=SquaredEpsilon)
-                {
-                     releasePoint(Nn_idx[j]);
-                     oldIndex.push_back(Nn_idx[j]);
-                }
-            replacePointIndex(oldIndex, i);
-        }
-    delete ANNtree;
-    annDeallocPt( ANNPt );
-    annDeallocPts( ANNPoints );
-    delete[] Nn_idx;
-    delete[] SquaredDists;
-    annClose();
-    return true;
-#endif // ANN
-}
-
-unsigned int arlCore::Mesh::replacePointIndex( std::vector<unsigned int> oldIndex, unsigned int newIndex )
-{   // Replace in m_triangles values of oldIndex by newIndex
-    unsigned int i, j, k, n=0;
-    const unsigned int OldIndexSize = (unsigned int)oldIndex.size();
-    for( i=0 ; i<m_triangles.size() ; ++i )
-        for( j=0 ; j<OldIndexSize ; ++j )
-            for( k=0 ; k<3 ; ++k )
-                if(m_triangles[i][k]==oldIndex[j])
-                    m_triangles[i][k] = newIndex;
-    return n;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Misc.cpp b/SrcLib/ARLcore/src/arlcore/Misc.cpp
deleted file mode 100644
index 0684b29..0000000
--- a/SrcLib/ARLcore/src/arlcore/Misc.cpp
+++ /dev/null
@@ -1,1383 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Misc.h>
-
-#ifdef _WIN32
-#include <windows.h>
-#else
-#include <unistd.h>
-#endif //_WIN32
-
-#include <stdlib.h>
-#include <time.h>
-#include <math.h>
-#include <fstream>
-
-#include <vcl/vcl_limits.h>
-
-#include <vnl/vnl_math.h>
-#include <vnl/vnl_cross.h>
-#include <vnl/algo/vnl_levenberg_marquardt.h>
-#include <vnl/algo/vnl_powell.h>
-
-#include <vgl/vgl_vector_3d.h>
-#include <vgl/vgl_line_2d.h>
-#include <vgl/vgl_box_3d.h>
-#include <vgl/vgl_intersection.h>
-
-#include <arlcore/vnl_rigid_vector.h>
-#include <arlcore/Optimization.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/File.h>
-
-unsigned int arlCore::fillGrid( arlCore::PointList::sptr pl, unsigned int nbPointsX, double squareSizeX, unsigned int nbPointsY, double squareSizeY, unsigned int nbPointsZ, double squareSizeZ )
-{
-/*  case  72 : chess[0]= 9;chess[1]=10;chess[2]= 4;chess[3]= 4;break;
-    case 132 : chess[0]=12;chess[1]=13;chess[2]=10;chess[3]=10;break;
-    case 140 : chess[0]=11;chess[1]=15;chess[2]=10;chess[3]=10;break;
-    case 192 : chess[0]=13;chess[1]=17;chess[2]=20;chess[3]=20;break;
-    case 462 : chess[0]=23;chess[1]=22;chess[2]=10;chess[3]=10;break;
-    case 418 : chess[0]=23;chess[1]=20;chess[2]=10;chess[3]=10;break;
-    case 825 : chess[0]=26;chess[1]=34;chess[2]=10;chess[3]=10;break;
-    // Mires robotique
-    case 667 : chess[0]=30;chess[1]=24;chess[2]=5;chess[3]=5;break;
-    case 154 : chess[0]=12;chess[1]=15;chess[2]=10;chess[3]=10;break;*/
-    pl->clear();
-    pl->setDimension(3);
-    unsigned int x, y, z;
-    for( z=0 ; z<nbPointsZ ; ++z )
-        for( y=0 ; y<nbPointsY ; ++y )
-            for( x=0 ; x<nbPointsX ; ++x )
-                pl->push_back(x*squareSizeX, y*squareSizeY, z*squareSizeZ);
-    return pl->size();
-}
-
-bool arlCore::plot( const std::vector< const arlCore::PointList* > &pl, const std::string &options )
-{
-    if(pl.size()<1) return false;
-    const bool JustVisible = false;
-    const bool Overwrite = true;
-    const std::string Title = "PointList";
-    unsigned int i;
-    std::fstream file;
-    file.open (TMP_FILE, std::fstream::out);
-    if(!file.is_open()) return false;
-    file<<"set title '"<<Title<<"'\n";
-    file<<options<<"\n";
-    if(pl[0]->getDimension()==3) file<<"s";
-    file<<"plot";
-    for( i=0 ; i<pl.size() ; ++i )
-    {
-        std::stringstream ss;
-        ss<<"Gnuplot-"<<i<<".dat";
-        if(pl[i]) pl[i]->save(ss.str(), ARLCORE_POINT_SAVE_GNUPLOT, JustVisible, Overwrite);
-        if(i==0) file<<" "; else file<<",";
-        file<<"\""<<ss.str()<<"\"";
-    }
-    file<<"\npause -1 \"Hit return to continue\"\n";
-    file.close();
-    system(GNUPLOT_EXE);
-    //exec(GNUPLOT_EXE, TMP_FILE );
-    return true;
-}
-
-unsigned int arlCore::nbPolynomialParameters( unsigned int degree, unsigned int nbEquations )
-{
-    return (degree+1)*(degree+2)*(degree+3)*nbEquations/6;
-}
-
-bool arlCore::computePolynomial( unsigned int degree, const vnl_vector<double> &parameters, const vnl_vector<double> &data, vnl_vector<double> &result )
-{
-    if(degree<1) return false;
-    const unsigned int NbEquations = 3;
-    const unsigned int NbParameters = nbPolynomialParameters(degree, NbEquations);
-    if(NbParameters!=parameters.size()) return false;
-    if(data.size()!=NbEquations) return false;
-    result.set_size(NbEquations);
-    result.fill(0.0);
-    unsigned int i, j, k, l, m=0;
-    for( i=0 ; i<=degree ; ++i )
-        for( j=0 ; j<=degree ; ++j )
-            for( k=0 ; k<=degree ; ++k )
-                if( i+j+k<=degree )
-                {
-                    for( l=0 ; l<NbEquations ; ++l )
-                    {
-                        assert(m+l<NbParameters);
-                        result[l] += parameters[m+l]*pow(data[0],(int)i)*pow(data[1],(int)j)*pow(data[2],(int)k);
-                    }
-                    m += NbEquations;
-                }
-    return true;
-}
-
-double arlCore::vgl_distance_point( const vgl_line_3d_2_points<double> &line, const vgl_point_3d<double> &p0 )
-{   //http://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html
-    vgl_point_3d<double> p1 = line.point1();
-    vgl_point_3d<double> p2 = line.point2();
-    vnl_vector_fixed<double,3> x0, x1, x2;
-    x0[0]=p0.x(), x0[1]=p0.y(), x0[2]=p0.z();
-    x1[0]=p1.x(), x1[1]=p1.y(), x1[2]=p1.z();
-    x2[0]=p2.x(), x2[1]=p2.y(), x2[2]=p2.z();
-    vnl_vector_fixed<double,3> a = vnl_cross_3d(x2-x1, x1-x0);
-    vnl_vector_fixed<double,3> b = x2-x1;
-    return a.two_norm()/b.two_norm();
-}
-
-vgl_line_2d<double> arlCore::vglLine2d( double slope, double rho )
-{
-    // FIXME Slope = slope-Pi/2
-    const double a = cos(slope), b = sin(slope);
-    const double x0 = a*rho, y0 = b*rho;
-    vgl_point_2d<double> p1(x0 + 100.0*(-b), y0 + 100.0*(a));
-    vgl_point_2d<double> p2(x0 - 100.0*(-b), y0 - 100.0*(a));
-    return vgl_line_2d<double>(p1, p2);
-}
-
-unsigned int arlCore::computeNeedleROI( Point::csptr Tip, Point::csptr Top, unsigned int width, std::vector<arlCore::Point::sptr > &corners, unsigned int shape )
-{   // shape 0=Rectangular shape 1=Triangular
-    Point::sptr corner = Point::New();
-    corners.clear();
-    arlCore::Point::sptr center =  arlCore::Point::New((Tip->x()+Top->x())/2.0, (Tip->y()+Top->y())/2.0);
-    vgl_vector_2d<double> tip2top(Top->x()-Tip->x(), Top->y()-Tip->y());
-    vgl_vector_2d<double> rot = rotated(tip2top, vnl_math::pi/2.0);
-    const vgl_vector_2d<double> Tip2corner = width * normalize(rot);
-    // First corner, orthogonal with the axis of the needle (Tip Right)
-    corner->x(Tip->x() + Tip2corner.x_);
-    corner->y(Tip->y() + Tip2corner.y_);
-    corners.push_back(corner);
-    // Second corner, central symmetry of first corner with Tip (Tip Left)
-    corner->x(2.0*Tip->x() - corners[0]->x());
-    corner->y(2.0*Tip->y() - corners[0]->y());
-    corners.push_back(corner);
-    switch(shape)
-    {
-        case 0: // Rectangular shape
-            // Third corner, central symmetry of first corner with Center of line Tip-Top (Top Left)
-            corner->x(2.0*center->x() - corners[0]->x());
-            corner->y(2.0*center->y() - corners[0]->y());
-            corners.push_back(corner);
-            // Fourth corner, central symmetry of 2st corner with Center of line Tip-Top (Top Right)
-            corner->x(2.0*center->x() - corners[1]->x());
-            corner->y(2.0*center->y() - corners[1]->y());
-            corners.push_back(corner);
-            break;
-        case 1: // Triangular shape
-            // Third corner, Top (Top Center)
-            corner->x(Top->x());
-            corner->y(Top->y());
-            corners.push_back(corner);
-            break;
-    }
-    return (unsigned int)corners.size();
-}
-/*
-double arlCore::computeVideo1Robot( const std::vector< arlCore::vnl_rigid_matrix > &M06, PointList::csptr tip, vnl_rigid_matrix &T, double &distance, double &stdDev )
-{
-    OptimiseVideoRobot1 OVR( M06, tip );
-    vnl_powell computeT( &OVR );
-    vnl_rigid_vector V( T );
-    vnl_vector<double> solution(6);
-    unsigned int i;
-    for( i=0 ; i<6 ; ++i )
-        solution[i] = V[i];
-    computeT.minimize( solution );
-    distance = OVR.getDistance();
-    stdDev = OVR.getStdDev();
-    for( i=0 ; i<6 ; ++i )
-        V[i] = solution[i];
-    T = V;
-    return distance;
-}*/
-
-
-double arlCore::computeVideo2RobotX(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &Z,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        arlCore::vnl_rigid_matrix &X )
-{
-    const bool Verbose = false;
-    unsigned int i, j;
-    // POWELL VERSION
-//  arlCore::OptimiseVideoRobotX OVR( M06, Z, model3D, cams, points2DList );
-//  vnl_powell Optimizer( &OVR );
-    // LEVENBERG MARQUARDT VERSION
-    unsigned int number_of_residuals = 0;
-    for( i=0 ; i<model3D.size() ; ++i )
-        for( j=0 ; j<model3D[i].size() ; ++j )
-            number_of_residuals += model3D[i][j]->size();
-    arlCore::OptimiseVideoRobotX_LS OVR( M06, Z, model3D, cams, points2DList, number_of_residuals, vnl_least_squares_function::use_gradient );
-    vnl_levenberg_marquardt Optimizer( OVR );
-    Optimizer.set_trace(true);
-//  Optimizer.set_check_derivatives(1);
-    Optimizer.set_f_tolerance(1e-6);
-    Optimizer.set_x_tolerance(1e-8);
-    Optimizer.set_g_tolerance(1e-6);
-    if(Verbose)
-    {
-        std::cerr<<"f tolerance ="<<Optimizer.get_f_tolerance()<<std::endl;
-        std::cerr<<"x tolerance ="<<Optimizer.get_x_tolerance()<<std::endl;
-        std::cerr<<"g tolerance ="<<Optimizer.get_g_tolerance()<<std::endl;
-        std::cerr<<"check derivative="<<Optimizer.get_check_derivatives()<<std::endl;
-    }
-    //********
-    vnl_rigid_vector V( X );
-    vnl_vector<double> solution(6);
-    for( i=0 ; i<6 ; ++i )
-        solution[i] = V[i];
-    //Optimizer.minimize( solution ); // POWELL VERSION
-    Optimizer.minimize_using_gradient( solution ); // LM VERSION
-    const double StartError = Optimizer.get_start_error();
-    const double EndError = Optimizer.get_end_error();
-    const double NbEvaluations = Optimizer.get_num_evaluations();
-    const double GetError = OVR.getError();
-    OVR.criterion(X,Z);
-    const double Criterion = OVR.getError();
-    if(Verbose)
-    {
-        std::cout<<"Start error = "<<StartError<<"\n";
-        std::cout<<"End error = "<<EndError<<"\n";
-        std::cout<<"Get error = "<<GetError<<"\n";
-        std::cout<<"Criterion = "<<Criterion<<"\n";
-        std::cout<<"Nb evaluations = "<<NbEvaluations<<"\n";
-    }
-    for( i=0 ; i<6 ; ++i )
-        V[i] = solution[i];
-    X = V;
-    return Criterion;
-}
-
-double arlCore::computeVideo2RobotZ(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &X,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        arlCore::vnl_rigid_matrix &Z )
-{
-    const bool Verbose = false;
-    unsigned int i, j;
-    // POWELL VERSION
-//  arlCore::OptimiseVideoRobotZ OVR( M06, X, model3D, cams, points2DList );
-//  vnl_powell Optimizer( &OVR );
-    // LEVENBERG MARQUARDT VERSION
-    unsigned int number_of_residuals = 0;
-    for( i=0 ; i<model3D.size() ; ++i )
-        for( j=0 ; j<model3D[i].size() ; ++j )
-            number_of_residuals += model3D[i][j]->size();
-    arlCore::OptimiseVideoRobotZ_LS OVR( M06, X, model3D, cams, points2DList, number_of_residuals, vnl_least_squares_function::use_gradient );
-    vnl_levenberg_marquardt Optimizer( OVR );
-    Optimizer.set_trace(true);
-//  Optimizer.set_check_derivatives(1);
-    Optimizer.set_f_tolerance(1e-6);
-    Optimizer.set_x_tolerance(1e-8);
-    Optimizer.set_g_tolerance(1e-6);
-    if(Verbose)
-    {
-        std::cerr<<"f tolerance ="<<Optimizer.get_f_tolerance()<<std::endl;
-        std::cerr<<"x tolerance ="<<Optimizer.get_x_tolerance()<<std::endl;
-        std::cerr<<"g tolerance ="<<Optimizer.get_g_tolerance()<<std::endl;
-        std::cerr<<"check derivative="<<Optimizer.get_check_derivatives()<<std::endl;
-    }
-    //********
-    vnl_rigid_vector V( Z );
-    vnl_vector<double> solution(6);
-    for( i=0 ; i<6 ; ++i )
-        solution[i] = V[i];
-    //Optimizer.minimize( solution ); // POWELL VERSION
-    Optimizer.minimize_using_gradient( solution ); // LM VERSION
-    const double StartError = Optimizer.get_start_error();
-    const double EndError = Optimizer.get_end_error();
-    const double NbEvaluations = Optimizer.get_num_evaluations();
-    const double GetError = OVR.getError();
-    OVR.criterion(X,Z);
-    const double Criterion = OVR.getError();
-    if(Verbose)
-    {
-        std::cout<<"Start error = "<<StartError<<"\n";
-        std::cout<<"End error = "<<EndError<<"\n";
-        std::cout<<"Get error = "<<GetError<<"\n";
-        std::cout<<"Criterion = "<<Criterion<<"\n";
-        std::cout<<"Nb evaluations = "<<NbEvaluations<<"\n";
-    }
-    for( i=0 ; i<6 ; ++i )
-        V[i] = solution[i];
-    Z = V;
-    return Criterion;
-}
-
-double arlCore::computeVideo2RobotXZ(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        arlCore::vnl_rigid_matrix &X,
-        arlCore::vnl_rigid_matrix &Z )
-{
-    const bool Verbose = false;
-    unsigned int i, j;
-    // POWELL VERSION
-//  arlCore::OptimiseVideoRobotXZ OVR( M06, model3D, cams, points2DList );
-//  vnl_powell Optimizer( &OVR );
-
-    // LEVENBERG MARQUARDT VERSION
-    unsigned int number_of_residuals = 0;
-    for( i=0 ; i<model3D.size() ; ++i )
-        for( j=0 ; j<model3D[i].size() ; ++j )
-            number_of_residuals += model3D[i][j]->size();
-    arlCore::OptimiseVideoRobotXZ_LS OVR( M06, model3D, cams, points2DList, number_of_residuals, vnl_least_squares_function::use_gradient );
-    vnl_levenberg_marquardt Optimizer( OVR );
-    Optimizer.set_trace(true);
-//  Optimizer.set_check_derivatives(1);
-    Optimizer.set_f_tolerance(1e-6);
-    Optimizer.set_x_tolerance(1e-8);
-    Optimizer.set_g_tolerance(1e-6);
-    if(Verbose)
-    {
-        std::cerr<<"f tolerance ="<<Optimizer.get_f_tolerance()<<std::endl;
-        std::cerr<<"x tolerance ="<<Optimizer.get_x_tolerance()<<std::endl;
-        std::cerr<<"g tolerance ="<<Optimizer.get_g_tolerance()<<std::endl;
-        std::cerr<<"check derivative="<<Optimizer.get_check_derivatives()<<std::endl;
-    }
-    //********
-    vnl_rigid_vector VX( X );
-    vnl_rigid_vector VZ( Z );
-    vnl_vector<double> solution(12);
-    for( i=0 ; i<6 ; ++i )
-    {
-        solution[i] = VX[i];
-        solution[i+6] = VZ[i];
-    }
-    //Optimizer.minimize( solution ); // POWELL VERSION
-    Optimizer.minimize_using_gradient( solution ); // LM VERSION
-    for( i=0 ; i<6 ; ++i )
-    {
-        VX[i] = solution[i];
-        VZ[i] = solution[i+6];
-    }
-    X = VX;
-    Z = VZ;
-    const double StartError = Optimizer.get_start_error();
-    const double EndError = Optimizer.get_end_error();
-    const double NbEvaluations = Optimizer.get_num_evaluations();
-    const double GetError = OVR.getError();
-    OVR.criterion(X,Z);
-    const double Criterion = OVR.getError();
-    if(Verbose)
-    {
-        std::cout<<"Start error = "<<StartError<<"\n";
-        std::cout<<"End error = "<<EndError<<"\n";
-        std::cout<<"Get error = "<<GetError<<"\n";
-        std::cout<<"Criterion = "<<Criterion<<"\n";
-        std::cout<<"Nb evaluations = "<<NbEvaluations<<"\n";
-    }
-    return Criterion;
-}
-
-
-// arlRandom
-std::vector< double> arlRandom::Random::m_randomTable;
-long int arlRandom::Random::m_index = 0;
-
-long int arlRandom::Random::initRandom( const std::string &filename, long int max )
-{
-    m_randomTable.clear();
-    m_index = 0;
-    std::fstream file;
-    file.open( filename.c_str(), std::fstream::in);
-    if(file.is_open())
-    {
-        double value = 0;
-        while(!file.eof() && (max<=0 || m_randomTable.size()<max))
-        {
-            file>>value;
-            m_randomTable.push_back(value);
-//          std::cout<<m_randomTable.size()<<" "<<value<<"\n";
-        }
-        file.close();
-    }
-    if(m_randomTable.size()>0) return 0;
-    else return privateRndInit();
-}
-
-long int arlRandom::Random::initRandom( long int seed )
-{
-    m_randomTable.clear();
-    return privateRndInit( seed );
-}
-
-double arlRandom::Random::uniformDoubleRnd( double min, double max )
-{
-    return privateUniformDoubleRnd( min, max );
-}
-
-int arlRandom::Random::uniformIntRnd( int min, int max )
-{
-    return privateUniformIntRnd( min, max );
-}
-
-double arlRandom::Random::gaussianRnd( double std )
-{
-    return privateGaussianRnd( std );
-}
-
-unsigned int arlRandom::Random::generate( long int seed, const std::string &filename, long int n )
-{
-    if(n<1) return 0;
-    std::ofstream file;
-    file.open(filename.c_str(), std::fstream::out);
-    if(!file.is_open()) return 0;
-    srand(seed);
-    long int i;
-    for( i=0 ; i<n-1 ; ++i )
-        file<<rand()<<"\n";
-    file<<rand();
-    file.close();
-    return n;
-}
-
-double arlRandom::Random::privateRand( void )
-{
-    if(m_randomTable.size()>0)
-    {
-        const double Value = m_randomTable[m_index];
-        ++m_index;
-        if(m_index>=(long int)m_randomTable.size()) m_index = 0;
-        return Value;
-    }else return rand();
-}
-
-long int arlRandom::Random::privateRndInit(long int seed)
-{   // TODO : Remplacer par vnl_random
-    long int f;
-    if(seed==0) f=(long int)time(NULL);
-    else f=seed;
-    srand(f);
-    return f;
-}
-
-double arlRandom::Random::privateUniformDoubleRnd( double min, double max )
-{
-    assert(min<=max);
-    const double r = privateRand();
-    const double d = RAND_MAX ;//+ 1.0;
-    const double rnd = min+(max-min)*r/d;
-    assert(rnd>=min && rnd<=max);
-    return rnd;
-}
-
-int arlRandom::Random::privateUniformIntRnd( int min, int max )
-{
-    assert(min<=max);
-    const double r = uniformDoubleRnd( (double)min, (double)max );
-    int rnd;
-    if(r<0) rnd = (int)ceil(r-0.5);
-    else rnd = (int)floor(r+0.5);
-    assert(rnd>=min && rnd<=max);
-    return rnd;
-}
-
-double arlRandom::Random::privateGaussianRnd( double std )
-{
-// cde essaye avec la librairie libpdf
-// vnl_vector<double> noise_sample( 1 );
-// pdf1d_gaussian noise_model(mean, variance);
-// pdf1d_gaussian_sampler noise_generator;
-// noise_generator.set_model(noise_model);
-// noise_generator.get_samples(noise_sample);
-// return noise_sample(0);
-    return(std*sqrt(-2.0*log(uniformDoubleRnd(1e-15,1.0)))*cos(2*vnl_math::pi*uniformDoubleRnd(1e-15,1.0)));
-}
-
-unsigned int arlRandom::randomIndex( unsigned int n, std::vector<unsigned int> &v, unsigned int m )
-{
-    unsigned int i, tmp, r;
-    if(m<n && m>0) r=m+1;   else r=n;
-    const unsigned int Max = n-1;
-    v.clear();
-    for( i=0 ; i<n ; ++i )
-        v.push_back(i);
-    for( i=0 ; i<r-1 ; ++i )
-    {
-        unsigned int index = arlRandom::Random::uniformIntRnd( i, Max );
-        if(index>i)
-        {
-            tmp = v[i];
-            v[i] = v[index];
-            v[index] = tmp;
-        }
-    }
-    return n;
-}
-
-// arlTime
-long int arlTime::getNowDate( void )
-{   // TODO : use pt::now();
-    return (long int)time(NULL);
-}
-
-long int arlTime::getNowTime( void )
-{   // TODO : use pt::now();
-    return (long int)((double)clock() / (double)CLK_TCK * 10000);
-}
-
-bool arlTime::sleep( double time )
-{
-#ifdef _WIN32
-    Sleep(time);
-#else
-    sleep(time);
-#endif
-    return true;
-}
-
-// arlString
-unsigned int arlString::replace( std::string &s, char org, char dst )
-{
-    unsigned int n=0;
-    if(org==dst) return n;
-    size_t found;
-    std::stringstream orgS, dstS;
-    orgS<<org;
-    dstS<<dst;
-    found=s.find_last_of(orgS.str());
-    while(found!=std::string::npos)
-    {
-        s.replace(found,1,dstS.str());
-        found=s.find_last_of(orgS.str());
-    }
-    return n;
-}
-
-bool arlString::splitFilename( const std::string &path, std::string &folder, std::string &fullFileName, std::string &ext )
-{
-    size_t found;
-    found=path.find_last_of("/\\");
-    if(found==std::string::npos)
-    {
-        folder = "";
-        fullFileName = path;
-    }
-    else
-    {
-        folder = path.substr(0,found);
-        fullFileName = path.substr(found+1);
-    }
-    found=fullFileName.find_last_of(".");
-    if(found==std::string::npos) ext = "";
-    else ext = fullFileName.substr(found+1);
-    return true;
-}
-
-bool arlString::extractExt( const std::string &path, std::string &ext )
-{
-    size_t found;
-    found=path.find_last_of(".");
-    if(found==std::string::npos) ext = "";
-    else ext = path.substr(found+1);
-    return true;
-}
-
-void arlString::getFullDateString( long int date, std::string &s, char separator )
-{
-    char name[19+1];
-    time_t tt = (time_t)date;
-    struct tm *t = localtime(&tt);
-    // TODO Use setfill ('0')<<setw(2) with std::stringstream
-    sprintf(name,"%04d%c%02d%c%02d%c%02d%c%02d%c%02d", t->tm_year+1900, separator, t->tm_mon+1, separator, t->tm_mday, separator, t->tm_hour, separator, t->tm_min, separator, t->tm_sec);
-    s = name;
-}
-
-void arlString::getDateString( long int date, std::string &s, char separator )
-{
-    char name[10+1];
-    time_t tt = (time_t)date;
-    struct tm *t = localtime(&tt);
-    // TODO Use setfill ('0')<<setw(2) with std::stringstream
-    sprintf(name,"%04d%c%02d%c%02d", t->tm_year+1900, separator, t->tm_mon+1, separator, t->tm_mday);
-    s = name;
-}
-
-void arlString::getTimeString( long int date, std::string &s, char separator )
-{
-    char name[8+1];
-    time_t tt = (time_t)date;
-    struct tm *t = localtime(&tt);
-    // TODO Use setfill ('0')<<setw(2) with std::stringstream
-    sprintf(name,"%02d%c%02d%c%02d", t->tm_hour, separator, t->tm_min, separator, t->tm_sec);
-    s = name;
-}
-
-template<typename T>
-bool convert(const std::string &s, T &obj)
-{
-    std::istringstream is(s);
-    return is >> obj;
-}
-
-bool arlString::valueOf(const std::string &s, unsigned int &obj)
-{
-    return convert(s,obj);
-}
-
-bool arlString::valueOf(const std::string &s, int &obj)
-{
-    return convert(s,obj);
-}
-
-bool arlString::valueOf(const std::string &s, double &obj)
-{
-    return convert(s,obj);
-}
-
-unsigned int arlString::extractDoubles( const std::string &s, std::vector<double> &v, char separator )
-{
-    v.clear();
-    if(s=="") return 0;
-    unsigned int pos = (unsigned int)s.find_last_of(separator);
-    if( pos==std::string::npos ) pos=0; else pos++;
-    if( pos>0 ) extractDoubles(s.substr(0,pos-1),v,separator);
-    // TODO Use convert
-    double d;
-    if( pos<s.length() && convert(s.substr(pos),d) ) v.push_back(d);
-    //if(pos<s.length()) v.push_back(atof(s.substr(pos).c_str()));
-    return (unsigned int)v.size();
-}
-
-unsigned int arlString::extractInts( const std::string &s, std::vector<int> &v, char separator )
-{
-    v.clear();
-    std::vector<double> vd;
-    unsigned int i, n=extractDoubles(s,vd,separator);
-    for( i=0 ; i<n ; i++ )
-        v.push_back((int)vd[i]);
-    return n;
-}
-
-unsigned int arlString::extractUInts( const std::string &s, std::vector<unsigned int> &v, char separator )
-{
-    v.clear();
-    std::vector<double> vd;
-    unsigned int i, n=extractDoubles(s,vd,separator);
-    for( i=0 ; i<n ; i++ )
-        v.push_back((unsigned int)vd[i]);
-    return n;
-}
-
-unsigned int arlString::extractBools( const std::string &s, std::vector<bool> &v, char separator )
-{
-    v.clear();
-    std::vector<double> vd;
-    unsigned int i, n=extractDoubles(s,vd,separator);
-    for( i=0 ; i<n ; i++ )
-        v.push_back(vd[i]>0);
-    return n;
-}
-
-bool arlString::extractIP( const std::string &s, unsigned int &IP1, unsigned int &IP2, unsigned int &IP3, unsigned int &IP4 )
-{
-    std::vector<unsigned int> v;
-    unsigned int n=extractUInts(s,v,'.');
-    if(n!=4) return false;
-    IP1 = v[0];
-    IP2 = v[1];
-    IP3 = v[2];
-    IP4 = v[3];
-    return true;
-}
-
-bool arlString::extractIP( const std::string &s, std::string &IP, unsigned int &port )
-{   // "192.168.3.69/8089"
-    if(s=="") return false;
-    unsigned int IP1, IP2, IP3, IP4, p=port, pos = (unsigned int)s.find_last_of('/');
-    if( pos==std::string::npos ) IP = s;
-    else
-    {
-        IP = s.substr(0,pos);
-        if(valueOf(s.substr(pos+1), p)) port=p;
-    }
-    return(extractIP(IP, IP1, IP2, IP3, IP4));
-}
-
-// arlFile
-bool arlFile::fileExist( const std::string &s )
-{
-    std::ifstream file;
-    file.open(s.c_str(), std::ifstream::in);
-    bool b=file.is_open();
-    file.close();
-    return b;
-}
-
-bool arlFile::mkdir( const std::string &s )
-{
-    std::string dir = s;
-    std::stringstream ss;
-    //FIXME for LINUX version
-    arlString::replace( dir, '/', '\\' );
-    ss<<"mkdir "<<dir;
-    system(ss.str().c_str());
-    return true;
-}
-
-bool arlFile::fileCopy( const std::string &OriginFilename, const std::string &DestinationFilename )
-{
-    std::string f1 = OriginFilename, f2 = DestinationFilename;
-    std::stringstream ss;
-    //FIXME for LINUX version
-    arlString::replace( f1, '/', '\\' );
-    arlString::replace( f2, '/', '\\' );
-    ss<<"copy "<<f1<<" "<<f2<<" /Y >system.txt";
-    system(ss.str().c_str());
-    return true;
-/*
-    std::ifstream inFile;
-    inFile.open(OriginFilename.c_str(), std::ifstream::in);
-    if(!inFile.is_open()) return false;
-    std::ofstream outFile;
-    outFile.open(DestinationFilename.c_str(), std::ifstream::out);
-    if(!outFile.is_open())
-    {
-        inFile.close();
-        return false;
-    }
-    inFile.seekg(0, std::ifstream::end);
-    const long BufferSize = inFile.tellg();
-    inFile.seekg(0);
-    char* buffer = new char[BufferSize];
-    inFile.read(buffer, BufferSize);
-    outFile.write(buffer, BufferSize);
-    outFile.close();
-    inFile.close();
-    delete[] buffer;
-    return true;*/
-}
-
-bool arlFile::convertTrianToVtk( const std::string &trianFilename, const std::string &vtkFilename )
-{
-    unsigned int i, nbPts, nbCells;
-    int a, b, c, d, e, f;
-    double x,y,z;
-    std::fstream fin, fout;
-    fin.open(trianFilename.c_str(), std::fstream::in);
-    if(!fin.is_open())
-    {
-        std::cerr<<"Trian file Loading error : "<<trianFilename<<"\n";
-        return false;
-    }
-    fout.open(vtkFilename.c_str(), std::fstream::out);
-    if(!fout.is_open())
-    {
-        std::cerr<<"VTK file Loading error : "<<vtkFilename<<"\n";
-        return false;
-    }
-    fin>>nbPts;
-    fout<<"# vtk DataFile Version 1.0\nFileName\nASCII\n\n";
-    //fout<<DATASET UNSTRUCTURED_GRID";
-    fout<<"DATASET POLYDATA";
-    fout<<"\nPOINTS "<<nbPts<<" double\n";
-    for( i=0 ; i<nbPts ; ++i )
-    {
-        fin>>x>>y>>z;
-        fout<<x<<" "<<y<<" "<<z<<"\n";
-    }
-    fin>>nbCells;
-    //fout<<"\nCELLS ";
-    fout<<"\nPOLYGONS ";
-    fout<<nbCells<<" "<<nbCells*4<<"\n";
-    for( i=0 ; i<nbCells ; ++i )
-    {
-        fin>>a>>b>>c>>d>>e>>f;
-        fout<<"3 "<<a<<" "<<b<<" "<<c<<"\n";
-    }
-/*  fout<<"\nCELLS_TYPES "<<nbCells<<"\n";
-    for( i=0 ; i<nbCells ; ++i )
-        fout<<"5\n";*/
-    return true;
-}
-
-bool arlSound::play( double frequency, double time )
-{
-#ifdef _WIN32
-    Beep( frequency, time );
-#else //_WIN32
-    std::cout<<"\a";
-#endif //_WIN32
-    return true;
-}
-
-unsigned int arlCore::save( const std::vector<double> &doubles, const std::string &fileName, bool overwrite )
-{
-    if(doubles.size()<1) return 0;
-    unsigned int i=0;
-    std::fstream f;
-    if(arlFile::fileExist(fileName) && !overwrite) return 0;
-    f.open (fileName.c_str(), std::fstream::out);
-    if(f.is_open())
-        for( ; i<doubles.size() ; ++i )
-            f<<doubles[i]<<"\n";
-    f.close();
-    f.flush();
-    return i;
-}
-
-unsigned int arlCore::save( const std::vector< vnl_vector<double> > &q, vnl_vector<double> ratio, const std::vector< std::string > &names, const std::string &fileName, bool overwrite )
-{
-    if(q.size()<1) return 0;
-    unsigned int i=0;
-    std::fstream f;
-    if(arlFile::fileExist(fileName) && !overwrite) return 0;
-    f.open (fileName.c_str(), std::fstream::out);
-    if(f.is_open())
-    {
-        f<<"FileType Vectors\nVersion 1.0\n\n";
-        f<<"Ratio "<<ratio.size()<<"\n"<<ratio<<"\n";
-        for( ; i<q.size() ; ++i )
-        {
-            if(names.size()>i) f<<"\nName "<<names[i]<<"\n";
-            f<<"Vector "<<q[i].size()<<"\n"<<q[i]<<"\n";
-        }
-    }
-    f.close();
-    f.flush();
-    return i;
-}
-
-unsigned int arlCore::save( const std::vector< vnl_vector<double> > &q, const std::string &fileName, bool overwrite )
-{
-    if(q.size()<1) return 0;
-    unsigned int i=0;
-    std::fstream f;
-    if(arlFile::fileExist(fileName) && !overwrite) return 0;
-    f.open (fileName.c_str(), std::fstream::out);
-    if(f.is_open())
-    {
-        f<<"FileType Vectors\nVersion 1.0\n\n";
-        for( ; i<q.size() ; ++i )
-            f<<"Vector "<<q[i].size()<<"\n"<<q[i]<<"\n";
-    }
-    f.close();
-    f.flush();
-    return i;
-}
-
-unsigned int arlCore::load( std::vector< vnl_vector<double> >&v, std::vector<std::string>&names, const std::string &filename )
-{
-    if(filename=="") return 0;
-    unsigned int i;
-    arlCore::File config(filename, "Vectors");
-    std::string name="";
-    vnl_vector<double> q, ratio, offset;
-    v.clear();
-    const double Version = config.readHeader();
-    if(Version>0.0)
-    {
-        std::string token;
-        while(config.getToken(token))
-        {
-            if(token=="Name") config.get(name);
-            if(token=="Offset")
-                config.get(offset);
-            if(token=="Ratio")
-                if(!config.get(ratio))
-                {
-                    ratio.set_size(1);
-                    ratio.fill(1.0);
-                }
-            if(token=="Vector")
-                if(config.get(q))
-                {
-                    for( i=0 ; i<offset.size() && i<q.size() ; ++i )
-                        q[i] += offset[i];
-                    if(ratio.size()==1)
-                        q *= ratio[0];
-                    if(ratio.size()>1)
-                        for( i=0 ; i<ratio.size() && i<q.size() ; ++i )
-                            q[i] *= ratio[i];
-                    v.push_back(q);
-                    names.push_back(name);
-                    name="";
-                }
-        }
-    }
-    config.close();
-    return (unsigned int)v.size();
-}
-
-unsigned int arlCore::load( std::vector< vnl_vector<double> >&v, const std::string &filename )
-{
-    std::vector<std::string> names;
-    return arlCore::load(v, names, filename);
-}
-
-unsigned int arlCore::load( std::vector< std::string >&v, const std::string &filename )
-{
-    if(filename=="") return 0;
-    std::string path, folder, file, ext;
-    arlString::splitFilename( filename, folder, file, ext );
-    arlCore::File config(filename, "Filenames");
-    const double Version = config.readHeader();
-    std::string name, string;
-    v.clear();
-    if(Version>0.0)
-    {
-        std::string token;
-        while(config.getToken(token))
-        {
-            if(token=="Name") config.get(name);
-            if(token=="Filename")
-                if(config.get(string))
-                {
-                    std::stringstream ss;
-                    if(folder!="") ss<<folder<<"/"<<string;
-                    else ss<<string;
-                    v.push_back(ss.str());
-                }
-        }
-    }
-    config.close();
-    return (unsigned int)v.size();
-}
-
-bool arlCore::save( const vnl_matrix<double>& matrix, const std::string &fileName, bool overwrite )
-{
-    if(matrix.size()<1) return false;
-    unsigned int i, j;
-    std::fstream f;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    f.open (fileName.c_str(), std::fstream::out);
-    if(f.is_open())
-    {
-        f<<"FileType Matrix\nVersion 1.0\n\n";
-        f<<"Matrix "<<matrix.rows()<<" "<<matrix.cols()<<"\n";
-        for( i=0 ; i<matrix.rows() ; ++i )
-        {
-            for( j=0 ; j<matrix.cols() ; ++j )
-                f<<matrix.get(i, j)<<" ";
-            f<<"\n";
-        }
-    }
-    f<<"End\n";
-    f.close();
-    f.flush();
-    return true;
-}
-
-bool arlCore::load( vnl_matrix<double>& matrix, const std::string &fileName )
-{
-    if(fileName=="") return false;
-    unsigned int i, j;
-    arlCore::File config(fileName, "Matrix");
-    const double Version = config.readHeader();
-    bool b = false;
-    if(Version>0.0)
-    {
-        std::string token;
-        while(config.getToken(token))
-        {
-            if(token=="Matrix")
-            {
-                unsigned int rows, cols;
-                config.get(rows);
-                config.get(cols);
-                if(rows!=matrix.rows() || cols!=matrix.columns())
-                    return false;
-                for( i=0 ; i<rows ; ++i )
-                    for( j=0 ; j<cols ; ++j )
-                    {
-                        double value;
-                        if(!config.get(value)) return false;
-                        matrix.put(i, j, value);
-                    }
-                b = true;
-            }
-        }
-    }
-    config.close();
-    return b;
-}
-
-double arlCore::evaluationAXXB( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z,
-            const std::vector< vnl_rigid_matrix > &M06,
-            const std::vector< const Camera* > &videoCams,
-            const std::vector< std::vector<arlCore::PointList::csptr > > &models3DList,
-            const std::vector< std::vector<arlCore::PointList::csptr > > &points2DList,
-            std::vector< double > &errors)
-{
-//  for(int i=0 ; i<videoCams.size() ; ++i )
-//      videoCams[i]->print();
-    errors.clear();
-    const unsigned int NbPoses = (unsigned int)M06.size();
-    const unsigned int NbCams = (unsigned int)videoCams.size();
-    unsigned int i, j, k;
-    double n=0.0, RMS=0.0;
-    assert(models3DList.size()==NbCams);
-    const arlCore::vnl_rigid_matrix InvZ = Z.computeInverse();
-    arlCore::Point::sptr pt2D= arlCore::Point::New(2);
-    arlCore::Point::sptr pt3D = arlCore::Point::New(3);
-    for( i=0 ; i<NbPoses ; ++i )
-    {   // Compute T = inv( X . M06i . inv(Z) )
-        arlCore::vnl_rigid_matrix T = X * M06[i] * InvZ;
-        T.invert();
-        for( j=0 ; j<NbCams ; ++j )
-            if(videoCams[j]!=0)
-            {
-                if(i==0)
-                {
-                    assert(points2DList[j].size()==models3DList[j].size());
-                    if(points2DList[j].size()!=models3DList[j].size()) std::cerr<<"AxxBReproj_cost_function : assert(points2DList[j].size()==models3DList[j].size());\n";
-                }
-                assert( (points2DList[j][i])->size()== (models3DList[j][i])->size() );
-                if(  (points2DList[j][i])->size()!= (models3DList[j][i])->size() ) std::cerr<<"AxxBReproj_cost_function : assert(points2DList[j][i].size()==models3DList[j][i].size());\n";
-                for( k=0 ; k<(models3DList[j][i])->size() ; ++k )
-                {
-                    T.trf( (*(points2DList[j][i]))[k] , pt3D);
-                    if(!videoCams[j]->project3DPoint( pt3D, pt2D )) std::cerr<<"AxxBReproj_cost_function : Reprojection Error\n";
-                    else
-                    {
-                        const double Dist2 = (*(points2DList[j][i]))[k]->distance2(pt2D);
-                        errors.push_back(sqrt(Dist2));
-                        RMS += Dist2;
-                        ++n;
-                    }
-                }
-            }
-    }
-    if(n>0.0) RMS = sqrt(RMS/n);
-    return RMS;
-}
-
-unsigned int arlCore::statistic( const std::vector<double> &v, double &min, double &max, double &rms, double &mean, double &stddev, bool square )
-{
-    unsigned int i;
-    rms=0.0, mean=0.0, stddev=0.0;
-    const unsigned int Size = (unsigned int)v.size();
-    if(Size<1) return Size;
-    const double N = (double)Size;
-    double value, value2;
-    for( i=0 ; i<Size ; ++i )
-    {
-        if(square) value2 = v[i], value = sqrt(v[i]);
-        else value = v[i], value2 = v[i]*v[i];
-        if(i==0) min = value, max = value;
-        else
-        {
-            if(value<min) min=value;
-            if(value>max) max=value;
-        }
-        mean += value;
-        rms += value2;
-    }
-    rms = sqrt(rms/N);
-    mean /= N;
-    for( i=0 ; i<Size ; ++i )
-        if(square) stddev += (sqrt(v[i])-mean)*(sqrt(v[i])-mean);
-        else stddev += (v[i]-mean)*(v[i]-mean);
-    stddev = sqrt(stddev/N);
-    return Size;
-}
-
-double arlCore::addValue( vnl_vector_fixed<double,5>& stat, double error, bool square )
-{   // stat = { n ; min ; max ; sum(error) ; sum(error²) }
-    double err=error, err2=error;
-    if(square) err=sqrt(error);
-    else err2 = error*error;
-    stat[0]++; // n
-    if(stat[0]==1)
-    {
-        stat[1]=err;
-        stat[2]=err;
-    }else
-    {
-        if(err<stat[1]) stat[1]=err;
-        if(err>stat[2]) stat[2]=err;
-    }
-    stat[3] += err;
-    stat[4] += err2;
-    return error;
-}
-
-unsigned int arlCore::computeStat( const vnl_vector_fixed<double,5>& stat, double &min, double &max, double &mean, double &stdDev, double &RMS )
-{   // stat = { n ; min ; max ; sum(error) ; sum(error²) }
-    const double N = stat[0];
-    min = stat[1];
-    max = stat[2];
-    if(N>0)
-    {
-        mean = stat[3]/N;
-        stdDev = sqrt(stat[4]/N-stat[3]*stat[3]/(N*N));
-        RMS = sqrt(stat[4]/N);
-    }
-    else
-    {
-        mean = 0.0;
-        stdDev = 0.0;
-        RMS = 0.0;
-    }
-    return (unsigned int)N;
-}
-
-bool arlCore::save( const std::vector< arlCore::vnl_rigid_matrix > &v, const std::string &fileName, bool overwrite )
-{
-    std::fstream file;
-    unsigned int i;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    file.open(fileName.c_str(), std::fstream::out);
-    if(!file.is_open()) return false;
-    file<<"FileType MatrixList\n";
-    file<<"Version 1.0\n";
-    for( i=0 ; i<v.size() ; ++i )
-        v[i].save(file);
-    file.close();
-    return true;
-}
-
-bool arlCore::load( std::vector< arlCore::vnl_rigid_matrix > &v, const std::string &fileName, bool invert )
-{
-    if(fileName=="") return false;
-    std::fstream file;
-    file.open(fileName.c_str(), std::fstream::in);
-    if(!file.is_open())
-    {
-        std::cerr<<"MatrixList Loading error : "<<fileName<<"\n";
-        return false;
-    }
-    unsigned int n=0;
-    std::string token,text;
-    double version;
-    do
-    {   // Reading header
-        file>>token;
-        if(token=="FileType")
-        {
-            file>>text;
-            if(text!="MatrixList") return false;
-            n=(n|1);
-        }
-        if(token=="Version") {file>>version; n=(n|2);}
-        if(file.eof())
-        {
-            std::cerr<<"MatrixList Loading Header error : "<<fileName<<"\n";
-            return false;
-        }
-    } while(n!=3);
-    v.clear();
-    vnl_rigid_matrix m;
-    bool b;
-    do
-    {
-        b=m.load(file);
-        if(b)
-        {
-            if(invert) m.invert();
-            v.push_back(m);
-        }
-    }while(b);
-    file.close();
-    return true;
-}
-
-bool arlCore::needleCalibration( const std::vector< arlCore::vnl_rigid_matrix >& tip, arlCore::vnl_rigid_matrix &calibration, const std::vector< arlCore::vnl_rigid_matrix > &orientation, double &RMS )
-{
-    // NEEDLE TIP CALIBRATION
-    // TODO Choose method
-    //ARLCORE_SCE_GEOMETRIC ARLCORE_SCE_ANALYTIC ARLCORE_SCE_OPTIMIZATION
-    const arlCore::ARLCORE_SCE methode = arlCore::ARLCORE_SCE_GEOMETRIC;
-    const bool Verbose = false;
-    RMS = -1;
-    unsigned int i;
-    Point::sptr center=Point::New(calibration.getX(), calibration.getY(), calibration.getZ());
-    double radius,a,b,c;
-    if(tip.size()>3)
-    {
-        PointList pl;
-        pl.fill(tip);
-        std::vector<double> optimiser_parameter, log;
-        if(!pl.sphereCenterEstimation(center, radius, methode, optimiser_parameter, log)) return false;
-        if(log.size()>0) RMS = log[0];
-        std::cout<<"Log sphereCenterEstimation : ";
-        for(i=0 ; i<log.size() ; ++i)
-            std::cout<<log[i]<<" ";
-        std::cout<<"\n";
-        if(Verbose) std::cout<<"Radius = "<<radius<<" Error = "<<RMS<<" center = "<<center->x()<<" "<<center->y()<<" "<<center->z()<<"\n";
-    }
-    // NEEDLE ORIENTATION CALIBRATION
-    double x = center->x(), y = center->y(), z = center->z();
-    radius = sqrt(x*x + y*y + z*z);
-    if(radius==0) return false;
-    Point::sptr  ptA1=Point::New(0,0,0);
-    Point::sptr  ptA2=Point::New(1,0,0);
-    Point::sptr  ptA3=Point::New(0,0,1);
-    Point::sptr  ptB1=Point::New(x,y,z);
-    Point::sptr  ptB2=Point::New(x-1,y-1,0);
-    Point::sptr  ptB3=Point::New(x,y,z);
-    // Equation du plan perpendiculaire � l'axe z de l'outil
-    // ax + by + cz + d = 0
-    if(orientation.size()<2)
-        a=x, b=y, c=z;
-    else
-    {
-        std::vector< vgl_point_3d<double> > points;
-        for( i=0 ; i<orientation.size() ; ++i )
-        {
-            vnl_rigid_matrix M;
-            Point::sptr p0 = Point::New(x,y,z);
-            M.invert(orientation[i]);
-            M.trf(p0);
-            points.push_back(vgl_point_3d<double>(p0->x(),p0->y(),p0->z()));
-        }
-        double lineRMS;
-        vgl_line_3d_2_points<double> line;
-        if(vgl_fit_line_3d( points, line, lineRMS ))
-        {
-            if(Verbose) std::cout<<"RMS line fit = "<<lineRMS<<"\n";
-            vgl_point_3d<double> vglp0=line.point1();
-            vgl_point_3d<double> vglp1=line.point2();
-            Point::sptr p0 = Point::New(vglp0.x(),vglp0.y(),vglp0.z());
-            Point::sptr p1 = Point::New(vglp1.x(),vglp1.y(),vglp1.z());
-            orientation[0].trf(p0);
-            orientation[0].trf(p1);
-            p0->mult(-1);
-            p1->add(p0);
-            p1->normalize();
-            a=p1->x();
-            b=p1->y();
-            c=p1->z();
-            ptB3->add(p1);
-        }else
-        {
-            lineRMS = 0.0;
-            vnl_rigid_matrix M;
-            Point::sptr p0 = Point::New(x,y,z);
-            Point::sptr p1 = Point::New(x,y,z);
-            M.invert(orientation[1]);
-            M.trf(p1);
-            orientation[0].trf(p1);
-            p0->mult(-1);
-            p1->add(p0);
-            p1->normalize();
-            a=p1->x();
-            b=p1->y();
-            c=p1->z();
-            ptB3->add(p1);
-        }
-        std::cout<<"Line RMS : "<<lineRMS<<"\n";
-    }
-    // d pour le plan passant par l'origine de l'outil (x,y,z)
-    double d = -(a*x + b*y + c*z);
-    if(orientation.size()<2)
-    {
-        ptB3->normalize();
-        ptB3->mult(radius-1.0);
-    }
-    // FIXME cas où c==0
-    ptB2->z((-a*ptB2->x()-b*ptB2->y()-d)/c);
-    ptA2->x(ptB2->distance(ptB1));
-
-    //std::vector< Point::csptr > A, B;
-    PointList::sptr A = PointList::New();
-    PointList::sptr B = PointList::New();
-//  vgl_point_3d<double> p0(points[0].x(), points[0].y(), points[0].z());
-//  vgl_point_3d<double> p0(points[1].x(), points[1].y(), points[1].z());
-//  std::cout<<ptA1.print()<<" "<<ptA2->print()<<" "<<ptA3.print();
-//  std::cout<<ptB1.print()<<" "<<ptB2->print()<<" "<<ptB3.print();
-
-    A->push_back(ptA1); B->push_back(ptB1);
-    A->push_back(ptA2); B->push_back(ptB2);
-    A->push_back(ptA3); B->push_back(ptB3);
-/*  if(!calibration.register3D3D( A, B, true )) return false;
-    if(Verbose)
-    {
-        std::vector<double> errors;
-        calibration.RMS3D3D( A, B, errors );
-    }
-    calibration.setRMS(RMS);
-    return true;*/
-    return calibration.register3D3D( A, B, true );
-}
-
-bool arlCore::vgl_fit_line_3d( const std::vector< vgl_point_3d<double> > &points, vgl_line_3d_2_points<double> &line, double &RMS )
-{
-    RMS = -1;
-    if(points.size()<2) return false;
-    if(points.size()==2)
-    {
-        line.set( points[0], points[1] );
-        RMS = 0.0;
-        return true;
-    }
-    vnl_vector<double> solution(6);
-    solution(0)=points[0].x();
-    solution(1)=points[0].y();
-    solution(2)=points[0].z();
-    solution(3)=points[1].x();
-    solution(4)=points[1].y();
-    solution(5)=points[1].z();
-    Optimise3DLine meanLine(points);
-    vnl_powell computeMeanLine(&meanLine);
-    computeMeanLine.minimize(solution);
-    const vgl_point_3d<double> Point1(solution[0], solution[1], solution[2]);
-    const vgl_point_3d<double> Point2(solution[3], solution[4], solution[5]);
-    line.set(Point1, Point2);
-    RMS = sqrt(computeMeanLine.get_end_error()/meanLine.size());
-    return true;
-}
-
-vgl_vector_3d<double> arlCore::orthogonal_vectors( const vgl_vector_3d<double> &vec, double s)
-{
-    //enforce parameter range
-    if(s<0.0) s=0.0;
-    if(s>1.0) s = 1.0;
-    //double tol = vgl_tolerance<double>::position;
-    double tol = vcl_numeric_limits<double>::epsilon();
-    double nx = vec.x_, ny = vec.y_, nz =  vec.z_;
-    double mnz = vcl_fabs(nz);
-    double two_pi = 2*vnl_math::pi;
-    double co = vcl_cos(two_pi*s), si = vcl_sin(two_pi*s);
-    //General case
-    if(mnz>tol)
-    {
-        double co = vcl_cos(two_pi*s), si = vcl_sin(two_pi*s);
-        double rx = nx/nz, ry = ny/nz;
-        double q = co*rx +si*ry;
-        double a = 1.0/vcl_sqrt(1+q*q);
-        double vx = a*co, vy = a*si;
-        double vz = -(rx*vx + ry*vy);
-        return vgl_vector_3d<double>(vx, vy, vz);
-    }
-    //Degenerate case, nz ~ 0
-    double r = nx/ny;
-    double a = 1/vcl_sqrt(1+co*co*r*r);
-    double vx = a*co, vz = a*si;
-    double vy = -a*co*r;
-    return vgl_vector_3d<double>(vx, vy, vz);
-}
-
-bool arlCore::intersection( const vnl_vector_fixed<double, 6> &bound1, const vnl_vector_fixed<double, 6> &bound2 )
-{
-    vgl_box_3d< double > box1, box2, intersection;
-    box1.set_min_x(bound1[0]);
-    box1.set_max_x(bound1[1]);
-    box1.set_min_y(bound1[2]);
-    box1.set_max_y(bound1[3]);
-    box1.set_min_z(bound1[4]);
-    box1.set_max_z(bound1[5]);
-
-    box2.set_min_x(bound2[0]);
-    box2.set_max_x(bound2[1]);
-    box2.set_min_y(bound2[2]);
-    box2.set_max_y(bound2[3]);
-    box2.set_min_z(bound2[4]);
-    box2.set_max_z(bound2[5]);
-
-    intersection = vgl_intersection ( box1, box2 );
-    return !intersection.is_empty();
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Object.cpp b/SrcLib/ARLcore/src/arlcore/Object.cpp
deleted file mode 100644
index 2fe1748..0000000
--- a/SrcLib/ARLcore/src/arlcore/Object.cpp
+++ /dev/null
@@ -1,383 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Object.h>
-
-#include <time.h>
-#include <iostream>
-#include <iomanip>
-#include <sstream>
-
-#include <arlcore/Misc.h>
-
-unsigned int arlCore::Object::m_counter[arlCore::ARLCORE_CLASS_NBTYPES];
-arlCore::ARLCORE_LOG_VERBOSE arlCore::Object::m_staticVerboseLevel=arlCore::ARLCORE_LOG_VERBOSE_NBTYPES;
-
-arlCore::Object::Object( ARLCORE_CLASS c, const std::string &name ):
-m_date( 0 ),
-m_time( 0 ),
-m_class( c ),
-m_name(name),
-m_ok( false ),
-m_verboseLevel( ARLCORE_LOG_MUTE ),
-m_writeMutex( false ),
-m_readMutex( 0 ),
-m_updateIndex( FIRSTUPDATEINDEX )
-{
-    m_no=++m_counter[m_class];
-}
-
-arlCore::Object::Object( const Object& o ):
-m_verboseLevel( ARLCORE_LOG_MUTE ),
-m_writeMutex( false ),
-m_readMutex( 0 )
-{
-    copy(o);
-    m_no=++m_counter[m_class];
-}
-
-arlCore::Object& arlCore::Object::operator=( const Object& o )
-{
-    copy(o);
-    return *this;
-}
-
-void arlCore::Object::copy( const Object& o )
-{
-    if(this!=&o)
-    {
-        m_verboseLevel=o.m_verboseLevel;
-        m_date=o.m_date;
-        m_time=o.m_time;
-        m_class=o.m_class;
-        m_name=o.m_name;
-        m_ok=o.m_ok;
-        m_updateIndex+=o.m_updateIndex;
-    }
-}
-
-arlCore::Object::~Object( void )
-{
-    assert(m_class<ARLCORE_CLASS_NBTYPES);
-    --m_counter[m_class];
-}
-
-arlCore::ARLCORE_CLASS arlCore::Object::getType( void ) const
-{
-    return m_class;
-}
-
-bool arlCore::Object::print( void ) const
-{
-    std::string s = getString();
-    std::cout<<s;
-    return true;
-}
-
-std::string arlCore::Object::getString( void ) const
-{
-    std::string c="UNKNOWN";
-    if(m_class<ARLCORE_CLASS_NBTYPES)
-        c=ARLCORE_CLASS_NAMES[m_class];
-    std::stringstream s;
-    s<<"_______________________________________________________________________________\n";
-    s<<"\""<<m_name<<"\" "<<c<<" class (#"<<m_no<<" / "<<m_counter[m_class]<<" object";
-    if(m_counter[m_class]>1) s<<"s";
-    s<<")";
-    if(m_ok) s<<"\nOK"; else s<<"\nKO";
-    s<<" - Timestamp : "<<m_date<<"-"<<m_time<<" ("<<this<<")";
-//  s<<" - Timestamp : "<<m_time<<" ("<<this<<")";
-    s<<"\nVerbose level : "<<m_verboseLevel;
-    s<<" - Update index : "<<m_updateIndex;
-    s<<"\nMutex : Read("<<m_readMutex<<") Write("<<m_writeMutex<<")\n";
-    s<<"_______________________________________________________________________________\n";
-    return s.str();
-}
-
-bool arlCore::Object::load( const std::string &fileName )
-{
-    return false;
-}
-
-bool arlCore::Object::save( const std::string &fileName, bool overwrite ) const
-{
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    return false;
-}
-
-bool arlCore::Object::save( void ) const
-{
-    return save( getFileName() );
-}
-
-std::string arlCore::Object::serialize( void ) const
-{
-    const unsigned int Precision = 15;
-    std::stringstream ss;
-    ss<<std::setprecision(Precision)<<m_ok<<" "<<m_date<<" "<<m_time<<" ";
-    return ss.str();
-}
-
-bool arlCore::Object::unserialize( std::stringstream& s )
-{
-    s>>m_ok>>m_date>>m_time;
-    update();
-    return true;
-}
-bool arlCore::Object::unserialize( const std::string &s )
-{
-    const unsigned int Precision = 15;
-    std::stringstream ss;
-    ss<<std::setprecision(Precision)<<s;
-    return unserialize( ss );
-}
-
-bool arlCore::Object::setOK( bool b )
-{
-    if(b!=m_ok)
-    {
-        m_ok = b;
-        update();
-    }
-    return m_ok;
-}
-
-bool arlCore::Object::isOK( void ) const
-{
-    return m_ok;
-}
-
-unsigned int arlCore::Object::getCounter( void ) const
-{
-    return m_counter[m_class];
-}
-
-unsigned int arlCore::Object::getNo( void ) const
-{
-    return m_no;
-}
-
-
-
-std::string arlCore::Object::getFileName( void )const
-{
-    std::stringstream s;
-    s<<"c:/"<<m_class<<"-"<<getNo();
-    s<<"-"<<m_date<<"-"<<m_time;
-    s<<".txt";
-    return s.str();
-}
-
-long int arlCore::Object::getUpdateIndex( void ) const
-{
-    return m_updateIndex;
-}
-
-void arlCore::Object::update( void )
-{
-    ++m_updateIndex;
-}
-
-bool arlCore::Object::getTime( long int &date, long int &time ) const
-{
-    date = m_date;
-    time = m_time;
-    return (date+time)!=0;
-}
-
-long int arlCore::Object::getDate( void ) const
-{
-    return m_date;
-}
-
-long int arlCore::Object::getTime( void ) const
-{
-    return m_time;
-}
-
-bool arlCore::Object::setTime( const long int &date, const long int &time )
-{
-    m_date = date;
-    m_time = time;
-    update();
-    return (m_date+m_time)!=0;
-}
-
-bool arlCore::Object::setTime( const long int &time )
-{
-    m_time = time;
-    update();
-    return (m_date+m_time)!=0;
-}
-
-bool arlCore::Object::setMaxTime( long int date, long int time )
-{
-    if (date>m_date || (date==m_date && time>m_time))
-    {
-        m_date = date;
-        m_time = time;
-        update();
-        return true;
-    }
-    return false;
-}
-
-bool arlCore::Object::setMinTime( long int date, long int time )
-{
-    if ((m_date==0 && m_time==0) || (date<m_date || (((date==m_date && time<m_time)) && (date!=0 || time!=0))))
-    {   // Never change if(date, time) is null
-        // Change always if object time is null or
-        // change if(date, time) lesser than object time
-        m_date = date;
-        m_time = time;
-        update();
-        return true;
-    }
-    return false;
-}
-
-bool arlCore::Object::setTime( void )
-{
-    m_date = arlTime::getNowDate();
-    m_time = arlTime::getNowTime();
-    update();
-    return (m_date+m_time)!=0;
-}
-
-bool arlCore::Object::startLap( void )
-{
-    m_lapDate = arlTime::getNowDate();
-    m_lapTime = arlTime::getNowTime();
-    update(); //?
-    return true;
-}
-
-double arlCore::Object::getLap( void )
-{   // Return lap in seconds
-    double b = (double)m_lapTime;
-    startLap();
-    double sec=0; //m_lapDate-a;
-    if(b>m_lapTime)
-        sec+=1.0-(b+(double)m_lapTime)/1000000.0; // FIXME
-    else
-        sec+=((double)m_lapTime-b)/((double)CLK_TCK*10); // FIXME
-    update(); //?
-    return sec;
-}
-
-double arlCore::Object::getItPerSec( void )
-{
-    return 1.0/getLap();
-}
-
-bool arlCore::Object::isChanged( const long int &date, const long int &time ) const
-{
-    return( date!=m_date || time!=m_time );
-}
-
-bool arlCore::Object::isEquivalent( const long int &date, const long int &time ) const
-{
-    return( date<=0  || time<0 || (m_date==0 && m_time==0) || (date==m_date && time==m_time) );
-}
-
-bool arlCore::Object::lockWriteMutex( void )
-{
-    if(isWriteLocked()) return false;
-    m_writeMutex=true;
-    return true;
-}
-
-bool arlCore::Object::unlockWriteMutex( void )
-{
-    setTime();
-    m_writeMutex = false;
-    return true;
-}
-
-unsigned int arlCore::Object::lockReadMutex( void )
-{
-    if(m_writeMutex) return false;
-    ++m_readMutex;
-    return m_readMutex;
-}
-
-unsigned int arlCore::Object::unlockReadMutex( void )
-{
-    if(m_readMutex>0) m_readMutex--;
-    return m_readMutex;
-}
-
-bool arlCore::Object::isWriteLocked( void ) const
-{
-    return(m_writeMutex || m_readMutex>0);
-}
-
-bool arlCore::Object::isReadLocked( void ) const
-{
-    return(m_readMutex>0);
-}
-
-void arlCore::Object::setVerboseLevel( ARLCORE_LOG_VERBOSE level )
-{
-    m_verboseLevel = level;
-}
-
-arlCore::ARLCORE_LOG_VERBOSE arlCore::Object::getVerboseLevel( void )
-{
-    return m_verboseLevel;
-}
-
-void arlCore::Object::setStaticVerboseLevel( ARLCORE_LOG_VERBOSE level )
-{
-    m_staticVerboseLevel = level;
-}
-
-arlCore::ARLCORE_LOG_VERBOSE arlCore::Object::getStaticVerboseLevel( void )
-{
-    return m_staticVerboseLevel;
-}
-
-void arlCore::Object::resetStaticVerboseLevel( void )
-{
-    m_staticVerboseLevel = ARLCORE_LOG_VERBOSE_NBTYPES;
-}
-
-void arlCore::Object::log( ARLCORE_LOG_SERIOUSNESS level, const std::stringstream& text ) const
-{
-    log(level, text.str().c_str());
-}
-
-void arlCore::Object::log( ARLCORE_LOG_SERIOUSNESS level, const std::string& text ) const
-{
-    log(level, text.c_str());
-}
-
-void arlCore::Object::log( ARLCORE_LOG_SERIOUSNESS level )
-{
-    log(level, m_log);
-    m_log.str("");
-}
-
-void arlCore::Object::log( ARLCORE_LOG_SERIOUSNESS level, const char* text ) const
-{
-    ARLCORE_LOG_VERBOSE verboseLevel;
-    if(m_staticVerboseLevel<ARLCORE_LOG_VERBOSE_NBTYPES)
-        verboseLevel=m_staticVerboseLevel;
-    else verboseLevel=m_verboseLevel;
-
-    if(verboseLevel<=(ARLCORE_LOG_VERBOSE)level) return;
-    if(level==ARLCORE_LOG_ERROR)
-        std::cout<<"<ERROR>";
-    if(level==ARLCORE_LOG_WARNING)
-        std::cout<<"<WARNING>";
-    if(level==ARLCORE_LOG_INFO_LEVEL2)
-        std::cout<<"<INFO2>";
-    if(level==ARLCORE_LOG_INFO_LEVEL1)
-        std::cout<<"<INFO1>";
-    std::cout<<"["<<ARLCORE_CLASS_NAMES[m_class]<<"]";
-    std::cout<<"["<<this<<"] ";
-    std::cout<<text<<"\n";
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Optimization.cpp b/SrcLib/ARLcore/src/arlcore/Optimization.cpp
deleted file mode 100644
index 4e1ad25..0000000
--- a/SrcLib/ARLcore/src/arlcore/Optimization.cpp
+++ /dev/null
@@ -1,2069 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Optimization.h>
-
-#include <time.h>
-
-#include <vnl/vnl_cross.h>
-#include <vnl/algo/vnl_matrix_inverse.h>
-
-#include <vgl/vgl_point_3d.h>
-#include <vgl/vgl_distance.h>
-#include <vgl/vgl_plane_3d.h>
-
-#include <arlcore/vnl_rotation3d_vector.h>
-#include <arlcore/vnl_rigid_vector.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/Camera.h>
-#include <arlcore/Misc.h>
-
-using namespace std;
-
-double arlCore::CostFunction::m_errorMax = 9e99;
-
-arlCore::CostFunction::CostFunction():
-m_errorMin(m_errorMax),
-m_firstIteration(true),
-m_observer(false),
-m_iterations(0)
-{}
-
-double arlCore::CostFunction::getCriterion( const vnl_vector<double> &x )
-{
-    m_error = m_errorMax;
-    return m_error;
-}
-
-void arlCore::CostFunction::setObserver( bool b )
-{
-    m_observer = b;
-    m_errorList.clear();
-    m_iterations = 0;
-}
-
-unsigned int arlCore::CostFunction::getNbIterations() const
-{
-    return m_iterations;
-}
-
-double arlCore::CostFunction::getError() const
-{
-    return m_error;
-}
-
-const arlCore::PointList& arlCore::CostFunction::getObservation() const
-{
-    return m_errorList;
-}
-
-double arlCore::CostFunction::error( const vnl_vector<double> &x )
-{
-    m_error = m_errorMax;
-    return observe(x);
-}
-
-double arlCore::CostFunction::observe( const vnl_vector<double> &x )
-{
-    if(m_firstIteration)
-    {
-        m_solution = x;
-        m_firstIteration = false;
-    }
-    if(m_error<m_errorMin)
-    {
-        m_errorMin = m_error;
-        m_solution = x;
-    }
-    if(m_observer)
-    {
-        long int now = clock ();// / (double)CLK_TCK * 10);
-        if(m_iterations==0)
-        {
-            m_time = now;
-            m_errorList.push_back(0.0, m_error);
-        }else m_errorList.push_back((double)(now-m_time), m_error);
-    }
-    ++m_iterations;
-    return m_error;
-}
-
-bool arlCore::CostFunction::verify( const vnl_vector<double> &x, double endError )
-{
-    bool b1 = (endError==getCriterion(x));
-    if(!b1) std::cout<<"Distorsion error/solution : "<<endError<<"*"<<getCriterion(x)<<"\n";
-    bool b2 = (endError==m_errorMin);
-    if(!b2) std::cout<<"Distorsion error min : "<<endError<<"*"<<m_errorMin<<"\n";
-    bool b3 = (x==m_solution);
-    if(!b3) std::cout<<"Distorsion solution : "<<x<<"*"<<m_solution<<"\n";
-    return b1 && b2 && b3;
-}
-
-void arlCore::CostFunction::plot() const
-{
-    std::string options = "set logscale y\n\
-        set title 'Optimization observer'\n\
-        set xlabel 'time (ms)'\n\
-        set ylabel 'error'\n";
-    m_errorList.plot( options );
-}
-
-// OptimiseICP
-arlCore::OptimiseICP::OptimiseICP( arlCore::ICP& icp):
-vnl_cost_function(6),
-m_ICP(icp)
-{}
-
-arlCore::OptimiseICP::~OptimiseICP(){}
-
-double arlCore::OptimiseICP::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==6);
-    m_error = m_ICP.computeCriterion(vnl_rigid_matrix(vnl_rigid_vector(x)));
-//  std::cout<<m_error<<" ";
-    return observe(x);
-}
-
-// OptimiseICP_LS
-arlCore::OptimiseICP_LS::OptimiseICP_LS( arlCore::ICP& icp, UseGradient g ):
-vnl_least_squares_function(6, icp.getCloudSize(), g),
-m_ICP(icp)
-{}
-
-arlCore::OptimiseICP_LS::~OptimiseICP_LS(){}
-
-void arlCore::OptimiseICP_LS::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==6);
-    assert(fx.size()==m_ICP.getCloudSize());
-    m_error = m_ICP.computeCriterion(vnl_rigid_matrix(vnl_rigid_vector(x)), fx);
-    //std::cout<<m_error<<" ";
-    observe(x);
-}
-
-void arlCore::OptimiseICP_LS::gradf(vnl_vector< double > const &x, vnl_matrix<double>& g)
-{
-    vnl_least_squares_function::fdgradf(x, g, 1e-8);
-}
-
-// OptimisePlane
-arlCore::OptimisePlane::OptimisePlane():
-vnl_cost_function(4)
-{}
-
-arlCore::OptimisePlane::~OptimisePlane()
-{
-    unsigned int i;
-    for( i=0 ; i<m_points.size() ; ++i )
-        if(m_points[i]!=0) delete m_points[i];
-}
-
-void arlCore::OptimisePlane::addPoint( const vgl_point_3d< double >&point )
-{
-    m_points.push_back(new vgl_point_3d< double >(point));
-}
-
-void arlCore::OptimisePlane::delPoint( unsigned int index )
-{
-    if(m_points.size()<=index) return;
-    if(m_points[index]!=0) delete m_points[index];
-    m_points[index]=0;
-}
-
-unsigned int arlCore::OptimisePlane::size( void )
-{
-    return (unsigned int)m_points.size();
-}
-
-const std::vector< vgl_point_3d< double >* > &arlCore::OptimisePlane::getPoints( void )
-{
-    return m_points;
-}
-
-double arlCore::OptimisePlane::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==4);
-    m_error=0.0;
-    vgl_plane_3d< double >p(x[0],x[1],x[2],x[3]);
-    unsigned int i;
-    for( i=0 ; i<m_points.size() ; i++ )
-        if(m_points[i]!=0)
-        {
-            const double Distance = vgl_distance(p, *(m_points[i]));
-            m_error += Distance*Distance;
-        }
-    return observe(x);
-}
-
-// Optimise3DLine
-arlCore::Optimise3DLine::Optimise3DLine(const std::vector< vgl_point_3d<double> >& pointList):
-vnl_cost_function(6),
-m_points(pointList)
-{}
-
-arlCore::Optimise3DLine::~Optimise3DLine()
-{}
-
-double arlCore::Optimise3DLine::f(vnl_vector< double > const &x)
-{
-    m_error=0.0;
-    vgl_line_3d_2_points<double> line;
-    vgl_point_3d<double>point1(x[0],x[1],x[2]);
-    vgl_point_3d<double>point2(x[3],x[4],x[5]);
-    line.set(point1, point2);
-    unsigned int i;
-    for( i=0 ; i<m_points.size() ; i++ )
-    {
-        double a = arlCore::vgl_distance_point( line, m_points[i] );
-        m_error += a*a;
-    }
-    return observe(x);
-}
-
-unsigned int arlCore::Optimise3DLine::size( void )
-{
-    return (unsigned int)m_points.size();
-}
-
-// OptimisePivot
-arlCore::OptimisePivot::OptimisePivot( PointList::csptr points ):
-vnl_cost_function(points->getDimension()),
-m_points(points),
-m_radius(0.0)
-{}
-
-arlCore::OptimisePivot::~OptimisePivot()
-{}
-
-double arlCore::OptimisePivot::getRadius( void )
-{
-    return m_radius;
-}
-
-double arlCore::OptimisePivot::f(vnl_vector< double > const &x)
-{
-    m_error=0.0;
-    unsigned int i;
-    vnl_vector<double> distances(m_points->size());
-    arlCore::Point::sptr center = arlCore::Point::New();
-    center->init(m_points->getDimension());
-    for( i=0 ; i<center->size() ; ++i )
-        center->set(i, x[i]);
-    for( i=0 ; i<m_points->size() ; i++ )
-        distances[i] = (*m_points)[i]->distance(center);
-    m_radius = distances.mean();
-    for( i=0 ; i<distances.size() ; ++i )
-        m_error += (distances[i]-m_radius)*(distances[i]-m_radius);
-    return observe(x);
-}
-
-// OptimiseVideoRobot1
-arlCore::OptimiseVideoRobot1::OptimiseVideoRobot1( const std::vector< arlCore::vnl_rigid_matrix > &M06, PointList::csptr Tip ):
-vnl_cost_function(6),
-m_tip(Tip),
-m_M06(M06),
-m_distance(0.0),
-m_stdDev(0.0)
-{
-    assert(M06.size()==m_tip->size());
-    assert(m_tip->getDimension()==3);
-}
-
-arlCore::OptimiseVideoRobot1::~OptimiseVideoRobot1()
-{}
-
-double arlCore::OptimiseVideoRobot1::getDistance( void )
-{
-    return m_distance;
-}
-
-double arlCore::OptimiseVideoRobot1::getStdDev( void )
-{
-    return m_stdDev;
-}
-
-double arlCore::OptimiseVideoRobot1::f(vnl_vector< double > const &x)
-{
-    const double ReconsErrorMax = -1;
-/*  static vnl_vector< double >xx;
-    static bool bb=false;
-    if(!bb)
-    {
-        bb=true;
-        xx=x;
-    }*/
-    m_error=0.0;
-    m_stdDev=0.0;
-    m_distance = 0.0;
-    unsigned int i;
-    double n = 0.0;
-    Point::sptr EndEffectorOrg= Point::New(3);
-    EndEffectorOrg->fill(0.0);
-    Point::sptr TipEndEffectorPlane = Point::New(3);
-    const vnl_rigid_vector V( x );
-    vnl_rigid_matrix T( V );
-    vnl_rigid_matrix video2EndEffector;
-    vnl_vector<double> distances((unsigned int)m_M06.size());
-    std::vector< vnl_vector<double> > coordinates(m_M06.size());
-    vnl_vector<double> meanCoordinates(3/*, 0.0*/);
-    meanCoordinates.fill(0.0);
-    for( i=0 ; i<m_M06.size() ; ++i )
-        if(ReconsErrorMax<0 || (*m_tip)[i]->getError()<ReconsErrorMax)
-        {
-            video2EndEffector.mult( m_M06[i], T );
-            video2EndEffector.trf( ((*m_tip)[i]), TipEndEffectorPlane );
-            coordinates[i] = TipEndEffectorPlane->getCoordinates();
-            meanCoordinates += coordinates[i];
-            distances[i]=EndEffectorOrg->distance(TipEndEffectorPlane);
-            m_distance += distances[i];
-            ++n;
-        }
-    if(n==0.0) return 0.0;
-    m_distance /= n;
-    for( i=0 ; i<distances.size() ; ++i )
-        if(ReconsErrorMax<0 || (*m_tip)[i]->getError()<ReconsErrorMax)
-        {
-            //const double Error = fabs(distances[i]-m_distance);
-            const double Error = (meanCoordinates-coordinates[i]).two_norm();
-            //std::cout<<"* "<<meanCoordinates<<" "<<coordinates[i]<<" "<<(meanCoordinates-coordinates[i]).two_norm()<<"\n";
-            //const double Error = (meanCoordinates-coordinates[i]).two_norm() + fabs(distances[i]-m_distance);
-            //std::cout<<"* "<<Error<<"\n";
-            m_error += Error*Error;
-        }
-    m_stdDev = sqrt(m_error/n);
-    return observe(x);
-}
-
-// OptimiseVideoRobot
-arlCore::OptimiseVideoRobot::OptimiseVideoRobot(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList ):
-m_M06(M06),
-m_chessboards(model3D),
-m_cameras(cams),
-m_points2DList(points2DList)
-{}
-
-arlCore::OptimiseVideoRobot::~OptimiseVideoRobot()
-{}
-
-double arlCore::OptimiseVideoRobot::criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z )
-{
-    vnl_vector<double> fx;
-    arlCore::vnl_rigid_matrix invZ = Z.computeInverse();
-    if(criterion(X,invZ,fx)) return m_error;
-    else return -1;
-}
-
-bool arlCore::OptimiseVideoRobot::criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &invZ, vnl_vector<double> &fx )
-{
-    fx.fill(0.0);
-    unsigned int i, j, k, index=0;
-    const unsigned int NbCams = (unsigned int)m_cameras.size();
-    assert(m_chessboards.size()==NbCams);
-    assert(m_points2DList.size()==NbCams);
-    const unsigned int NbPoses = (unsigned int)m_M06.size();
-    arlCore::Point::sptr  pt2D = arlCore::Point::New();
-    pt2D->init(2);
-    arlCore::Point::sptr  pt3D = arlCore::Point::New();
-    double n = 0.0;
-    m_error = 0.0;
-    for( j=0 ; j<NbPoses ; ++j )
-    {   // T = inv( X . M06i . inv(Z) )
-        arlCore::vnl_rigid_matrix T = X * m_M06[j] * invZ;
-        T.invert();
-        for( i=0 ; i<NbCams ; ++i )
-        {
-            assert(m_chessboards[i].size()==NbPoses);
-            const unsigned int NbPoints = m_chessboards[i][j]->size();
-            assert(m_points2DList[i][j]->size()==NbPoints);
-            for( k=0 ; k<NbPoints ; ++k, ++index )
-            {
-                T.trf( (*m_chessboards[i][j])[k], pt3D);
-                if(m_cameras[i]->project3DPoint(pt3D, pt2D))
-                {
-                    const double Error2 = pt2D->distance2( (*m_points2DList[i][j])[k]);
-                    m_error += Error2;
-                    if(index<fx.size()) fx[index] = Error2;
-                    ++n;
-                }
-            }
-        }
-    }
-    if(n>0) m_error = sqrt(m_error/n); else return false;
-    return true;
-}
-
-// OptimiseVideoRobotX
-arlCore::OptimiseVideoRobotX::OptimiseVideoRobotX(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &Z,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList ):
-vnl_cost_function(6),
-OptimiseVideoRobot(M06, model3D, cams, points2DList),
-m_Z(Z)
-{}
-
-arlCore::OptimiseVideoRobotX::~OptimiseVideoRobotX()
-{}
-
-double arlCore::OptimiseVideoRobotX::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==6);
-    const arlCore::vnl_rigid_vector V(x);
-    arlCore::vnl_rigid_matrix invZ(m_Z), X(V);
-    invZ.invert();
-    vnl_vector<double> fx;
-    if(!criterion(X, invZ, fx)) return error(x);
-    return observe(x);
-}
-
-// OptimiseVideoRobotX LS
-arlCore::OptimiseVideoRobotX_LS::OptimiseVideoRobotX_LS(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &Z,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        unsigned int number_of_residuals, UseGradient g ):
-vnl_least_squares_function(6, number_of_residuals, g),
-OptimiseVideoRobot(M06, model3D, cams, points2DList),
-m_Z(Z)
-{}
-
-arlCore::OptimiseVideoRobotX_LS::~OptimiseVideoRobotX_LS()
-{}
-
-void arlCore::OptimiseVideoRobotX_LS::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==6);
-    const arlCore::vnl_rigid_vector V(x);
-    arlCore::vnl_rigid_matrix invZ(m_Z), X(V);
-    invZ.invert();
-    if(!criterion(X, invZ, fx)) error(x);
-    observe(x);
-}
-
-void arlCore::OptimiseVideoRobotX_LS::gradf(vnl_vector< double > const &x, vnl_matrix<double>& g)
-{
-    vnl_least_squares_function::fdgradf(x, g, 1e-8);
-}
-
-// OptimiseVideoRobotZ
-arlCore::OptimiseVideoRobotZ::OptimiseVideoRobotZ(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &X,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList ):
-vnl_cost_function(6),
-OptimiseVideoRobot(M06, model3D, cams, points2DList),
-m_X(X)
-{}
-
-arlCore::OptimiseVideoRobotZ::~OptimiseVideoRobotZ()
-{}
-
-double arlCore::OptimiseVideoRobotZ::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==6);
-    const arlCore::vnl_rigid_vector V(x);
-    arlCore::vnl_rigid_matrix invZ(V), X(m_X);
-    invZ.invert();
-    vnl_vector<double> fx;
-    if(!criterion(X, invZ, fx)) return error(x);
-    return observe(x);
-}
-
-// OptimiseVideoRobotZ LS
-arlCore::OptimiseVideoRobotZ_LS::OptimiseVideoRobotZ_LS(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const arlCore::vnl_rigid_matrix &X,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        unsigned int number_of_residuals, UseGradient g ):
-vnl_least_squares_function(6, number_of_residuals, g),
-OptimiseVideoRobot(M06, model3D, cams, points2DList),
-m_X(X)
-{}
-
-arlCore::OptimiseVideoRobotZ_LS::~OptimiseVideoRobotZ_LS()
-{}
-
-void arlCore::OptimiseVideoRobotZ_LS::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==6);
-    const arlCore::vnl_rigid_vector V(x);
-    arlCore::vnl_rigid_matrix invZ(V), X(m_X);
-    invZ.invert();
-    if(!criterion(X, invZ, fx)) error(x);
-    observe(x);
-}
-
-void arlCore::OptimiseVideoRobotZ_LS::gradf(vnl_vector< double > const &x, vnl_matrix<double>& g)
-{
-    vnl_least_squares_function::fdgradf(x, g, 1e-8);
-}
-
-// OptimiseVideoRobotXZ
-arlCore::OptimiseVideoRobotXZ::OptimiseVideoRobotXZ(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList ):
-vnl_cost_function(12),
-OptimiseVideoRobot(M06, model3D, cams, points2DList)
-{}
-
-arlCore::OptimiseVideoRobotXZ::~OptimiseVideoRobotXZ()
-{}
-
-double arlCore::OptimiseVideoRobotXZ::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==12);
-    unsigned int i;
-    vnl_vector< double > x0(6), z0(6);
-    for( i=0 ; i<6 ; ++i )
-    {
-        x0[i] = x[i];
-        z0[i] = x[i+6];
-    }
-    const arlCore::vnl_rigid_vector VX(x0), VZ(z0);
-    arlCore::vnl_rigid_matrix X(VX), invZ(VZ);
-    invZ.invert();
-    vnl_vector<double> fx;
-    if(!criterion(X, invZ, fx)) return error(x);
-    return observe(x);
-}
-
-// OptimiseVideoRobotXZ LS
-arlCore::OptimiseVideoRobotXZ_LS::OptimiseVideoRobotXZ_LS(
-        const std::vector< arlCore::vnl_rigid_matrix > &M06,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &model3D,
-        const std::vector<const arlCore::Camera*> &cams,
-        const std::vector< std::vector< arlCore::PointList::csptr > > &points2DList,
-        unsigned int number_of_residuals, UseGradient g ):
-vnl_least_squares_function(12, number_of_residuals, g),
-OptimiseVideoRobot(M06, model3D, cams, points2DList)
-{}
-
-arlCore::OptimiseVideoRobotXZ_LS::~OptimiseVideoRobotXZ_LS()
-{}
-
-void arlCore::OptimiseVideoRobotXZ_LS::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==12);
-    unsigned int i;
-    vnl_vector< double > x0(6), z0(6);
-    for( i=0 ; i<6 ; ++i )
-    {
-        x0[i] = x[i];
-        z0[i] = x[i+6];
-    }
-    const arlCore::vnl_rigid_vector VX(x0), VZ(z0);
-    arlCore::vnl_rigid_matrix X(VX), invZ(VZ);
-    invZ.invert();
-    if(!criterion(X, invZ, fx)) error(x);
-    else observe(x);
-}
-
-void arlCore::OptimiseVideoRobotXZ_LS::gradf(vnl_vector< double > const &x, vnl_matrix<double>& g)
-{
-    vnl_least_squares_function::fdgradf(x, g, 1e-8);
-}
-
-// OptimiseReprojection
-arlCore::OptimiseReprojection::OptimiseReprojection(const vector<const arlCore::Camera*> &cameras, const vector<arlCore::Point::csptr> &points2D):
-vnl_cost_function(3),
-m_cameras(cameras),
-m_points2D(points2D)
-{}
-
-arlCore::OptimiseReprojection::~OptimiseReprojection(){}
-
-double arlCore::OptimiseReprojection::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==3);
-    vnl_vector_fixed<double,4> point3DH(x[0], x[1], x[2], 1.0);
-    vnl_vector_fixed<double,2> reprojPoint;
-    m_error = 0.0;
-    double errorX, errorY;
-    unsigned int i;
-    for( i=0 ; i<m_cameras.size() ; i++ )
-    {
-        assert(m_points2D[i]->size()==2);
-        m_cameras[i]->project3DPoint(point3DH, reprojPoint);
-        errorX = (reprojPoint(0)-m_points2D[i]->x());
-        errorY = (reprojPoint(1)-m_points2D[i]->y());
-        m_error += errorX*errorX + errorY*errorY;
-    }
-    return observe(x);
-}
-
-// AxxBReproj_cost_function
-/*arlCore::AxxBReproj_cost_function::AxxBReproj_cost_function(
-    const std::vector< arlCore::vnl_rigid_matrix > &A,
-    const std::vector< arlCore::vnl_rigid_matrix > &B,
-    const std::vector<const arlCore::Camera*> &videoCams,
-    const std::vector< arlCore::PointList::sptr > &models3DList,
-    const std::vector< std::vector<arlCore::PointList> > &points2DList):
-m_A_matrix(A),
-m_B_matrix(B),
-m_videoCams(videoCams),
-m_models3DList(models3DList), //[pose]
-m_points2DList(points2DList) //[cam][pose]
-{
-    assert(m_A_matrix.size()==m_B_matrix.size());
-    if(m_A_matrix.size()!=m_B_matrix.size()) std::cerr<<"AxxBReproj_cost_function : assert(m_A_matrix.size()==m_B_matrix.size());\n";
-    assert(points2DList.size()==m_videoCams.size());
-    if(points2DList.size()!=m_videoCams.size()) std::cerr<<"AxxBReproj_cost_function : assert(points2DList.size()==m_videoCams.size());\n";
-//  for(int i=0 ; i<m_videoCams.size() ; ++i )
-//      m_videoCams[i]->print();
-}
-
-arlCore::AxxBReproj_cost_function::~AxxBReproj_cost_function(){}
-
-double arlCore::AxxBReproj_cost_function::f(vnl_vector< double > const &v)
-{
-    const unsigned int NbPoses = 1;//m_A_matrix.size();
-    const unsigned int NbCams = m_videoCams.size();
-    m_error = 0.0;
-    const vnl_rigid_matrix X = arlCore::vnl_rigid_vector(v);
-    const vnl_rigid_matrix Z = arlCore::vnl_rigid_vector(v);
-    unsigned int i, j, k;
-    double n=0;
-    for( i=0 ; i<NbCams ; ++i )
-    {
-        assert(m_points2DList[i].size()==m_models3DList.size());
-        if(m_points2DList[i].size()!=m_models3DList.size()) std::cerr<<"AxxBReproj_cost_function : assert(points2DList[i].size()==m_models3DList.size());\n";
-        if(m_videoCams[i]!=0)
-            for( j=0 ; j<NbPoses ; ++j )
-            {
-                assert(m_points2DList[i][j].size()==m_models3DList[j].size());
-                if(m_points2DList[i][j].size()!=m_models3DList[j].size()) std::cerr<<"AxxBReproj_cost_function : assert(m_points2DList[i][j].size()==m_models3DList[j].size());\n";
-                vnl_rigid_matrix T = X;
-                arlCore::Point::sptr pt2D = arlCore::Point::New(2);, pt3D(3);
-                for( k=0 ; k<m_models3DList[j].size() ; ++k )
-                {
-                    T.trf(*(m_models3DList[j][k]), pt3D);
-                    if(!m_videoCams[i]->project3DPoint( pt3D, pt2D )) std::cerr<<"AxxBReproj_cost_function : Reprojection Error\n";
-                    else
-                    {
-                        m_error += m_points2DList[i][j][k]->distance(pt2D);
-                        ++n;
-                    }
-                }
-            }
-    }
-    if(n!=0.0) m_error /= n;
-    std::cout<<m_error<<"\n";
-    return observe(x);
-}*/
-
-// Dornaika_cost_function
-arlCore::Dornaika_cost_function::Dornaika_cost_function(const std::vector< vnl_rigid_matrix >&A, const std::vector< vnl_rigid_matrix >&B):
-vnl_cost_function(7),
-m_A_matrix(A),
-m_B_matrix(B){}
-
-arlCore::Dornaika_cost_function::~Dornaika_cost_function(){}
-
-double arlCore::Dornaika_cost_function::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==7);
-    const double Lambda1=1; // 1000
-    const double Lambda2=1; // 10
-    const unsigned int Lambda = 2000000;
-    unsigned int i, j;
-    m_error=0.0;
-    vnl_quaternion<double> q(x[0],x[1],x[2],x[3]);
-    vnl_vector_fixed<double,3> translation(x[4],x[5],x[6]);
-    vnl_rotation3d_matrix  rotA, rotB, rotX;
-    vnl_vector_fixed<double,3>  pi, piprime, sum2;
-    vnl_matrix_fixed<double,3,3> identite, sum1;
-    identite.set_identity();
-    sum1.fill(0.0);
-    sum2.fill(0.0);
-    vnl_rigid_matrix X;
-    double norme=0.0, frob;
-    for( i=0 ; i<m_A_matrix.size() ; ++i )
-    {
-        //extraction des vecteurs rotation et translation
-        X.setQuaternion(q);
-        rotX = X.extract(3,3);
-        rotB = m_B_matrix[i].getRotation();
-        pi = m_B_matrix[i].getTranslation();
-        rotA = m_A_matrix[i].getRotation();
-        piprime = m_A_matrix[i].getTranslation();
-        //mystere : si on normalise les vecteurs translation pi et piprime la rotation est juste
-        //calcul du premier terme
-        sum1 = rotX*rotB - rotA*rotX;
-        sum1 = sum1*sum1 ;
-        //calcul du  ( K - Id )
-        rotA = rotA - identite;
-        //rotation du vecteur translation de X
-        translation = rotA * translation;
-        //calcul du 2ieme terme
-        sum2 = rotX*pi - piprime - translation;
-        for( j=0 ; j<sum2.size() ; ++j )
-            sum2[j] = sum2[j]*sum2[j] ;
-        X.fill(0.0);
-        X.setRotation(sum1);
-        for( j=0 ; j<sum2.size() ; ++j )
-            m_error+=sum2[j]*Lambda2;
-        frob = X.frobenius_norm();
-        frob=frob*frob;
-        m_error+=frob*Lambda1;
-        translation[0] = x[4];
-        translation[1] = x[5];
-        translation[2] = x[6];
-    }
-    //calcul du terme qui assure que q est unitaire
-    for(i=0;i<q.size();i++)
-        norme+=(q[i]*q[i]);
-    norme =sqrt(norme);
-    m_error += (Lambda*(1- norme))*(Lambda*(1- norme));
-    return observe(x);
-}
-
-// Dornaika_LS_cost_function
-arlCore::Dornaika_LS_cost_function::Dornaika_LS_cost_function(const std::vector< vnl_rigid_matrix >&A, const std::vector< vnl_rigid_matrix >&B, unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g):
-vnl_least_squares_function(number_of_unknowns, number_of_residuals, g),
-m_A_matrix(A),
-m_B_matrix(B){}
-
-arlCore::Dornaika_LS_cost_function::~Dornaika_LS_cost_function(){}
-
-void arlCore::Dornaika_LS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-//  assert(x.size()==number_of_unknowns);
-    const double Lambda1=1;
-    const double Lambda2=1;
-    const unsigned int Lambda = 2000000; // 80000
-    unsigned int i, j;
-    m_error=0.0;
-    vnl_quaternion<double> q(x[0],x[1],x[2],x[3]);
-    vnl_vector_fixed<double,3> translation(x[4],x[5],x[6]);
-    vnl_rotation3d_matrix  rotA, rotB, rotX;
-    vnl_vector_fixed<double,3>  pi, piprime, sum2;
-    vnl_matrix_fixed<double,3,3> identite, sum1;
-    identite.set_identity();
-    sum1.fill(0.0);
-    sum2.fill(0.0);
-    vnl_rigid_matrix X;
-    double norme=0.0, frob, temp;
-    for( i=0 ; i<m_A_matrix.size()  ; ++i )
-    {
-        temp=0;
-        //extraction des vecteurs rotation et translation
-        X.setQuaternion(q);
-        rotX = X.extract(3,3);
-        rotB = m_B_matrix[i].getRotation();
-        pi = m_B_matrix[i].getTranslation();
-        rotA = m_A_matrix[i].getRotation();
-        piprime = m_A_matrix[i].getTranslation();
-        //calcul du premier terme
-        sum1 = rotX*rotB - rotA*rotX;
-        sum1 = sum1*sum1 ;
-        //calcul du  ( K - Id )
-        rotA = rotA - identite;
-        //rotation du vecteur translation de X
-        translation = rotA * translation;
-        //calcul du 2ieme terme
-        sum2 = rotX*pi - piprime - translation;
-        for( j=0 ; j<sum2.size() ; ++j )
-        {
-            sum2[j] = sum2[j]*sum2[j] ;
-            temp+=sum2[j]*Lambda2;
-        }
-        X.fill(0.0);
-        X.setRotation(sum1);
-        frob = X.frobenius_norm();
-        norme=0.0;
-        for(j=0;j<q.size();j++)
-            norme += (q[j]*q[j]);
-        norme = sqrt(norme);
-        fx[i] = temp+frob*frob*Lambda1+Lambda*(1- norme)*(Lambda*(1- norme));
-        m_error += fx[i];
-        translation[0] = x[4];
-        translation[1] = x[5];
-        translation[2] = x[6];
-    }
-    observe(x);
-}
-
-void arlCore::Dornaika_LS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& g)
-{
-    vnl_least_squares_function::fdgradf(x, g, 1e-8);
-}
-
-// Polynomial_cost_function
-arlCore::Polynomial_cost_function::Polynomial_cost_function( PointList::csptr real, PointList::csptr distorded, unsigned int degree ) :
-vnl_cost_function(nbPolynomialParameters(degree, m_nbEquations)),
-m_real(real),
-m_distorded(distorded),
-m_nbEquations(3),
-m_degree(degree){}
-
-arlCore::Polynomial_cost_function::~Polynomial_cost_function(){}
-
-double arlCore::Polynomial_cost_function::f( vnl_vector<double > const &x )
-{
-    assert(m_distorded->size()==m_real->size());
-    assert(nbPolynomialParameters(m_degree, m_nbEquations)==x.size());
-    m_error=0;
-    unsigned int i, j;
-    for( i=0 ; i<m_distorded->size() ; ++i )
-    {
-        vnl_vector<double> distorded(m_nbEquations), distorsion;
-        for( j=0 ; j<m_nbEquations ; ++j )
-            distorded[j] = (*m_distorded)[i]->get(j);
-        if(!computePolynomial( m_degree, x, distorded, distorsion ))
-            m_error += 10000;
-        else
-            for( j=0 ; j<m_nbEquations ; ++j )
-                m_error += (distorded[j]-distorsion[j]-(*m_real)[i]->get(j))*(distorded[j]-distorsion[j]-(*m_real)[i]->get(j));
-    }
-    return observe(x);
-}
-
-unsigned int arlCore::Polynomial_cost_function::getNbParameters()
-{
-    return nbPolynomialParameters(m_degree, m_nbEquations);
-}
-
-// OptimiseReprojectionUncertainty
-arlCore::OptimiseReprojectionUncertainty::OptimiseReprojectionUncertainty(const vector<const arlCore::Camera*> &cameras, const vector<arlCore::Point::csptr> &points2D):
-vnl_cost_function(3),
-m_cameras(cameras),
-m_points2D(points2D)
-{
-    unsigned int i;
-    //m_inv_cov_matrix.resize(m_cameras.size());
-    for( i=0 ; i<m_cameras.size() ; i++ )
-    {
-        vnl_matrix<double> tmp(2,2);
-        tmp = vnl_matrix_inverse<double>(points2D[i]->getCovMatrix());
-        m_inv_cov_matrix.push_back(tmp);
-    }
-}
-
-arlCore::OptimiseReprojectionUncertainty::~OptimiseReprojectionUncertainty(){}
-
-double arlCore::OptimiseReprojectionUncertainty::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==3);
-    vnl_vector_fixed<double,4> point3DH(x[0], x[1], x[2], 1.0);
-    vnl_vector_fixed<double,2> reprojPoint2D;
-    vnl_matrix_fixed<double,2,1> pointSubtraction;
-    vnl_matrix_fixed<double,1,1> error(0.0);
-    unsigned int i;
-    for( i=0 ; i<m_cameras.size() ; i++ )
-    {
-        assert(m_points2D[i]->size()==2);
-        m_cameras[i]->project3DPoint(point3DH, reprojPoint2D);
-        pointSubtraction[0][0] = reprojPoint2D[0]-m_points2D[i]->x();
-        pointSubtraction[1][0] = reprojPoint2D[1]-m_points2D[i]->y();
-        if(m_points2D[i]->getCovMatrix().is_zero())
-            error += pointSubtraction.transpose() * pointSubtraction;
-        else error += pointSubtraction.transpose().as_matrix() * ((m_inv_cov_matrix[i])) * pointSubtraction;
-        //std::cerr<<"mat cov  ="<<(m_inv_cov_matrix[i])<<std::endl;
-    }
-    m_error = error[0][0];
-    return observe(x);
-}
-
-// OptimiseLineIntersection
-arlCore::OptimiseLineIntersection::OptimiseLineIntersection(const std::vector< vgl_line_3d_2_points <double> > &lines):
-vnl_cost_function(3),
-m_lineList(lines){}
-
-arlCore::OptimiseLineIntersection::~OptimiseLineIntersection(){}
-
-double arlCore::OptimiseLineIntersection::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==3);
-    vgl_point_3d< double > vglPoint3D(x[0],x[1],x[2]);
-    m_error=0.0;
-    unsigned int i;
-    for( i=0 ; i<m_lineList.size() ; i++ )
-        m_error += vgl_distance(m_lineList[i], vglPoint3D);
-    return observe(x);
-}
-
-// EPPC
-arlCore::EPPC_cost_function::EPPC_cost_function(
-    const std::vector < const arlCore::Camera *> &c,
-    const std::vector<Point::csptr > &model3D,
-    const std::vector< std::vector<arlCore::Point::csptr> >&points2DList,
-    vnl_matrix_fixed<double,4,4> &trsf):
-vnl_cost_function(3*(unsigned int)model3D.size()),
-m_cameras(c),
-m_model3D(model3D),
-m_points2DList(points2DList),
-m_trsf(trsf)
-{
-    unsigned int i,j;
-    m_invCovMat3D.resize(model3D.size());
-    for( i=0 ; i<model3D.size() ; ++i )
-    {
-        if( model3D[i]->getCovMatrix().is_zero())
-            m_invCovMat3D[i].set_identity();
-        else
-            m_invCovMat3D[i] = vnl_matrix_inverse<double>(model3D[i]->getCovMatrix());
-    }
-    m_invCovMat2D.resize(points2DList.size());
-    for( i=0 ; i<points2DList.size() ; ++i )
-    {
-        m_invCovMat2D[i].resize(points2DList[i].size());
-        for( j=0 ; j<points2DList[i].size() ; ++j )
-        {
-            if( points2DList[i][j]->getCovMatrix().is_zero())
-                m_invCovMat2D[i][j].set_identity();
-            else
-                m_invCovMat2D[i][j] = vnl_matrix_inverse<double>(points2DList[i][j]->getCovMatrix());
-        }
-    }
-}
-
-double arlCore::EPPC_cost_function::f(vnl_vector< double > const &x)
-{
-    const unsigned int ModelSize = (unsigned int)m_model3D.size();
-    assert(x.size()==ModelSize*3);
-    std::vector< vnl_vector_fixed<double,4> > points3DRepereCam(ModelSize);
-    vnl_vector_fixed<double,4> points3DEstimes(1.0);
-    vnl_matrix<double> vector3Dsub(3,1);
-    vnl_matrix<double> vector2Dsub(2,1);
-    unsigned int i,j;
-    m_2Derror(0,0)=0.0;
-    m_3Derror(0,0)=0.0;
-    for( i=0 ; i<ModelSize ; ++i )
-    {
-        assert(m_model3D[i]->size()==3);
-        points3DEstimes.put(0, x[3*i]);
-        points3DEstimes.put(1, x[3*i+1]);
-        points3DEstimes.put(2, x[3*i+2]);
-        points3DRepereCam[i] = m_trsf * points3DEstimes;
-        for( j=0 ; j<3 ; ++j )
-            vector3Dsub.put(j, 0,  points3DEstimes(j) - m_model3D[i]->get(j) );
-        m_3Derror += vector3Dsub.transpose() * m_invCovMat3D[i] * (vector3Dsub);
-    }
-    for( i=0 ; i<m_cameras.size() ; ++i )
-    {
-        assert(m_points2DList[i].size()==ModelSize);
-        for(j=0 ; j<m_points2DList[i].size() ; ++j)
-            if(m_points2DList[i][j]!=0)
-            {
-                assert(m_points2DList[i][j]->size()==2);
-                if(m_points2DList[i][j]->isVisible())
-                {
-                    vnl_vector_fixed<double,2> projPoint2D, point2D(m_points2DList[i][j]->x(),m_points2DList[i][j]->y());
-                    m_cameras[i]->project3DPoint(points3DRepereCam[j], projPoint2D);
-                    vector2Dsub.set_column(0, projPoint2D - point2D);
-                    m_2Derror += vector2Dsub.transpose() * m_invCovMat2D[i][j] * vector2Dsub;
-                }
-            }
-    }
-    m_error = m_2Derror(0,0) + m_3Derror(0,0);
-    //std::cerr<<"erreur EPPC 2D :"<< m_2Derror(0,0)<<"    3D :"<< m_3Derror(0,0)<<std::endl;
-    return observe(x);
-}
-
-void arlCore::EPPC_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// EPPC LS
-arlCore::EPPC_LS_cost_function::EPPC_LS_cost_function(const std::vector < const Camera *> &c,
-                                                    const std::vector<Point::csptr > &model3D, const std::vector< std::vector<Point::csptr> >&points2DList,
-                                                    vnl_matrix_fixed<double,4,4> &trsf, unsigned int number_of_unknowns,
-                                                    unsigned int number_of_residuals, UseGradient g):
-vnl_least_squares_function(3*model3D.size(), number_of_residuals, g),
-m_cameras(c),
-m_model3D(model3D),
-m_points2DList(points2DList),
-m_trsf(trsf)
-{
-    unsigned int i,j;
-    m_invCovMat3D.resize(model3D.size());
-    for( i=0 ; i<model3D.size() ; ++i )
-    {
-        if( model3D[i]->getCovMatrix().is_zero())
-            m_invCovMat3D[i].set_identity();
-        else
-            m_invCovMat3D[i] = vnl_matrix_inverse<double>(model3D[i]->getCovMatrix());
-    }
-    m_invCovMat2D.resize(points2DList.size());
-    for( i=0 ; i<points2DList.size() ; ++i )
-    {
-        m_invCovMat2D[i].resize(points2DList[i].size());
-        for( j=0 ; j<points2DList[i].size() ; ++j )
-        {
-            if( points2DList[i][j]->getCovMatrix().is_zero())
-                m_invCovMat2D[i][j].set_identity();
-            else
-                m_invCovMat2D[i][j] = vnl_matrix_inverse<double>(points2DList[i][j]->getCovMatrix());
-        }
-    }
-}
-
-void arlCore::EPPC_LS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    const unsigned int ModelSize = (unsigned int)m_model3D.size();
-    assert(x.size()==ModelSize*3);
-    std::vector< vnl_vector_fixed<double,4> > points3DRepereCam(ModelSize);
-    vnl_vector_fixed<double,4> points3DEstimes(1.0);
-    vnl_matrix<double> vector3Dsub(3,1);
-    vnl_matrix<double> vector2Dsub(2,1);
-    unsigned int i,j, index=0;
-    m_2Derror(0,0)=0.0;
-    m_3Derror(0,0)=0.0;
-    for( i=0 ; i<ModelSize ; ++i )
-    {
-        assert(m_model3D[i]->size()==3);
-        points3DEstimes.put(0, x[3*i]);
-        points3DEstimes.put(1, x[3*i+1]);
-        points3DEstimes.put(2, x[3*i+2]);
-        points3DRepereCam[i] = m_trsf * points3DEstimes;
-        for( j=0 ; j<3 ; ++j )
-            vector3Dsub.put(j, 0,  points3DEstimes(j) - m_model3D[i]->get(j) );
-        m_3Derror += vector3Dsub.transpose() * m_invCovMat3D[i] * (vector3Dsub);
-        fx[index] = sqrt( (vector3Dsub.transpose() * m_invCovMat3D[i] * (vector3Dsub))(0,0) );
-        ++index;
-    }
-    for( i=0 ; i<m_cameras.size() ; ++i )
-    {
-        assert(m_points2DList[i].size()==ModelSize);
-        for(j=0 ; j<m_points2DList[i].size() ; ++j)
-        {
-            if(m_points2DList[i][j]!=0)
-            {
-                assert(m_points2DList[i][j]->size()==2);
-                if(m_points2DList[i][j]->isVisible())
-                {
-                    vnl_vector_fixed<double,2> point2D(m_points2DList[i][j]->x(),m_points2DList[i][j]->y());
-                    vnl_vector_fixed<double,2> projPoint2D;
-                    m_cameras[i]->project3DPoint(points3DRepereCam[j], projPoint2D);
-                    vector2Dsub.set_column(0, projPoint2D - point2D);
-                    m_2Derror += vector2Dsub.transpose() * m_invCovMat2D[i][j] * vector2Dsub;
-                    fx[index] = sqrt((vector2Dsub.transpose() * m_invCovMat2D[i][j] * vector2Dsub)(0,0));
-                }
-            }
-            ++index;
-        }
-    }
-    //std::cerr<<"erreur EPPC 2D :"<< m_2Derror(0,0)<<"    3D :"<< m_3Derror(0,0)<<std::endl;
-    m_error = m_2Derror(0,0) + m_3Derror(0,0);
-    observe(x);
-}
-
-void arlCore::EPPC_LS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// ISPPC
-arlCore::ISPPC_cost_function::ISPPC_cost_function(const std::vector<const Camera *>&a,
-            const std::vector< vnl_vector_fixed<double,4> > &points3D,
-            const std::vector< std::vector<Point::csptr> > &points2D, bool noise_feature):
-vnl_cost_function(6),
-m_points3D(points3D),
-m_points2D(points2D),
-m_cameras(a),
-m_noise_feature(noise_feature)
-{
-    if(m_noise_feature == true)
-    {
-        unsigned int i,j;
-        m_invCovMat2D.resize(points2D.size());
-        for( i=0 ; i<points2D.size() ; ++i )
-        {
-            assert(m_points3D.size()==m_points2D[i].size());
-            m_invCovMat2D[i].resize(points2D[i].size());
-            for( j=0 ; j<points2D[i].size() ; ++j )
-            {
-                if( points2D[i][j]->getCovMatrix().is_zero())
-                    m_invCovMat2D[i][j].set_identity();
-                else
-                    m_invCovMat2D[i][j] = vnl_matrix_inverse<double>(points2D[i][j]->getCovMatrix());
-            }
-        }
-    }
-}
-
-double arlCore::ISPPC_cost_function::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==6);
-    vnl_vector_fixed<double,2> projPoint2D;
-    unsigned int i,j;
-    m_error=0.0;
-    double errorX, errorY;
-    arlCore::vnl_rigid_vector vec(x);
-    arlCore::vnl_rigid_matrix trsf(vec);
-    if(!m_noise_feature)
-    {
-        for(i=0 ; i<m_cameras.size() ; ++i)
-        {
-            assert(m_points3D.size()==m_points2D[i].size());
-            for(j=0 ; j<m_points2D[i].size() ; ++j)
-                if(m_points2D[i][j]!=0)
-                    if(m_points2D[i][j]->isVisible())
-                    {
-                        vnl_vector_fixed<double,4> points3DRepereCam = trsf * m_points3D[j];
-                        if(m_cameras[i]->project3DPoint(points3DRepereCam, projPoint2D))
-                        {
-                            errorX = projPoint2D(0) - m_points2D[i][j]->x();
-                            errorY = projPoint2D(1) - m_points2D[i][j]->y();
-                            //std::cerr<< errorX << "  "<<errorY <<std::endl;
-                            m_error += errorX*errorX + errorY*errorY;
-                        }
-                    }
-        }
-    }
-    else
-    {
-        vnl_matrix<double> vector2Dsub(2,1);
-        vnl_matrix_fixed<double,1,1> matrix_2Derror;
-        matrix_2Derror.fill(0.0);
-        for(i=0 ; i<m_cameras.size() ; ++i)
-        {
-            assert(m_points3D.size()==m_points2D[i].size());
-            for(j=0 ; j<m_points2D[i].size() ; ++j)
-                if(m_points2D[i][j]!=0)
-                    if(m_points2D[i][j]->isVisible())
-                    {
-                        vnl_vector_fixed<double,4> points3DRepereCam = trsf * m_points3D[j];
-                        if(m_cameras[i]->project3DPoint(points3DRepereCam, projPoint2D))
-                        {
-                            vnl_vector_fixed<double,2> point2D(m_points2D[i][j]->x(),m_points2D[i][j]->y());
-                            vector2Dsub.set_column(0, projPoint2D - point2D);
-                            matrix_2Derror += vector2Dsub.transpose() * m_invCovMat2D[i][j] * vector2Dsub;
-                        }
-                    }
-        }
-        m_error = matrix_2Derror.get(0,0);
-    }
-    //std::cerr<<"error ISPPC POW= "<< m_error<<std::endl;
-    return observe(x);
-}
-void arlCore::ISPPC_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// ISPPC LS
-arlCore::ISPPC_LS_cost_function::ISPPC_LS_cost_function(const std::vector<const Camera *>&a,
-            const std::vector< vnl_vector_fixed<double,4> > &points3D,
-            const std::vector< std::vector<Point::csptr> > &points2D,
-            unsigned int number_of_unknowns,
-            unsigned int number_of_residuals, UseGradient g, bool noise_feature):
-vnl_least_squares_function(number_of_unknowns, number_of_residuals, g),
-m_points3D(points3D),
-m_points2D(points2D),
-m_cameras(a),
-m_noise_feature(noise_feature)
-{
-    if(m_noise_feature == true)
-    {
-        unsigned int i,j;
-        m_invCovMat2D.resize(points2D.size());
-        for( i=0 ; i<points2D.size() ; ++i )
-        {
-            m_invCovMat2D[i].resize(points2D[i].size());
-            for( j=0 ; j<points2D[i].size() ; ++j )
-            {
-                if( points2D[i][j]->getCovMatrix().is_zero())
-                    m_invCovMat2D[i][j].set_identity();
-                else
-                    m_invCovMat2D[i][j] = vnl_matrix_inverse<double>(points2D[i][j]->getCovMatrix());
-            }
-        }
-    }
-}
-
-// Il faut connaitre  l'avance le nombre de points visibles (comptabilis par index).
-// Ce nombre de points visibles doit tre donn en paramtre lors de la construction
-// de l'objet arlCore::ISPPC_LS_cost_function
-void arlCore::ISPPC_LS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==6);
-    vnl_vector_fixed<double,2> projPoint2D;
-    unsigned int i,j, index=0;
-    double errorX, errorY;
-    arlCore::vnl_rigid_vector vec(x);
-    arlCore::vnl_rigid_matrix trsf(vec);
-    m_error = 0.0;
-    if(m_noise_feature == false)
-    {
-        for(i=0 ; i<m_cameras.size() ; ++i)
-        {
-            assert(m_points3D.size()==m_points2D[i].size());
-            for(j=0 ; j<m_points2D[i].size() ; ++j)
-                if(m_points2D[i][j]!=0)
-                    if(m_points2D[i][j]->isVisible())
-                    {
-                        vnl_vector_fixed<double,4> points3DRepereCam = trsf * m_points3D[j];
-                        if(m_cameras[i]->project3DPoint(points3DRepereCam, projPoint2D))
-                        {
-                            errorX = projPoint2D(0)-m_points2D[i][j]->x();
-                            errorY = projPoint2D(1)-m_points2D[i][j]->y();
-                            fx[index] = sqrt(errorX *errorX + errorY*errorY);
-                            m_error += fx[index];
-                        }
-                        index++;
-                    }
-        }
-    }
-    else
-    {
-        vnl_matrix<double> vector2Dsub(2,1);
-        vnl_matrix_fixed<double,1,1> matrix_2Derror;
-        for(i=0 ; i<m_cameras.size() ; ++i)
-        {
-            assert(m_points3D.size()==m_points2D[i].size());
-            for(j=0 ; j<m_points2D[i].size() ; ++j)
-                if(m_points2D[i][j]!=0)
-                    if(m_points2D[i][j]->isVisible())
-                    {
-                        vnl_vector_fixed<double,4> points3DRepereCam = trsf * m_points3D[j];
-                        if(m_cameras[i]->project3DPoint(points3DRepereCam, projPoint2D))
-                        {
-                            vnl_vector_fixed<double,2> point2D(m_points2D[i][j]->x(),m_points2D[i][j]->y());
-                            vector2Dsub.set_column(0, projPoint2D - point2D);
-                            matrix_2Derror = vector2Dsub.transpose() * m_invCovMat2D[i][j] * vector2Dsub;
-                            //matrix_2Derror = vector2Dsub.transpose() * vector2Dsub;
-                            //toto +=  matrix_2Derror(0,0);
-                            fx[index] = sqrt(matrix_2Derror(0,0));
-                            m_error += fx[index];
-                        }
-                        index++;
-                    }
-        }
-    }
-    observe(x);
-}
-
-void arlCore::ISPPC_LS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// OSPPC
-arlCore::OSPPC_cost_function::OSPPC_cost_function(const std::vector<const arlCore::Camera *>&a,
-    const std::vector< Point::csptr  > &points3D,
-    const std::vector< std::vector<arlCore::Point::csptr> > &points2D):
-vnl_cost_function(6),
-m_points3D(points3D),
-m_points2D(points2D),
-m_cameras(a)
-{
-    unsigned int i,j;
-    m_extPoints2D.resize(m_cameras.size());
-    for( i=0 ; i<m_cameras.size() ; ++i )
-    {
-        m_extPoints2D[i].resize(m_points2D[i].size());
-        for( j=0 ; j<m_points2D[i].size() ; ++j )
-            if(m_points2D[i][j]!=0)
-                if(m_points2D[i][j]->isVisible())
-                    m_cameras[i]->pixelPlaneToUnitFocalPlane( m_points2D[i][j], m_extPoints2D[i][j], false );
-    }
-}
-
-double arlCore::OSPPC_cost_function::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==6);
-    m_error = 0.0;
-    unsigned int i,j;
-    vnl_vector_fixed<double,3> crossProduct;
-    vnl_vector_fixed<double,4> extPoints3D;
-    arlCore::vnl_rigid_vector vec(x);
-    arlCore::vnl_rigid_matrix trsf(vec);
-    for(i=0 ; i<m_cameras.size() ; ++i)
-    {
-        assert(m_points3D.size()==m_points2D[i].size());
-        for(j=0 ; j<m_points3D.size() ; ++j)
-            if(m_points2D[i][j]!=0)
-                if(m_points2D[i][j]->isVisible())
-                {   //Ce critere calcule la distance entre les demi-droites [Cimij) et les points T*Mj
-                    //On exprime d'abord le point mij dans le repere optique de la camera i
-                    //Puis on calcule les coordonnes de T*Mj dans le repere optique de la camera i
-                    //Puis on calcule cette distance en faisant le produit vectoriel [Cimij)xCiMj / norm([Cimij))= ||CiMj||sin(theta)
-                    extPoints3D = m_cameras[i]->getExtrinsic()* trsf * m_points3D[j]->getHCoordinates();
-                    crossProduct = vnl_cross_3d( m_extPoints2D[i][j], extPoints3D.extract(3) )/ m_extPoints2D[i][j].two_norm();
-                    m_error += crossProduct.squared_magnitude();
-                }
-    }
-    return observe(x);
-}
-
-void arlCore::OSPPC_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// OSPPC LS
-arlCore::OSPPC_LS_cost_function::OSPPC_LS_cost_function(const std::vector<const Camera *>&a,
-                                                        const std::vector< Point::csptr  > &points3D, const std::vector< std::vector<Point::csptr> > &points2D,
-    unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g):
-vnl_least_squares_function(number_of_unknowns, number_of_residuals, g),
-m_points3D(points3D),
-m_points2D(points2D),
-m_cameras(a)
-{
-    unsigned int i,j;
-    m_extPoints2D.resize(m_cameras.size());
-    for( i=0 ; i<m_cameras.size() ; ++i )
-    {
-        m_extPoints2D[i].resize(m_points2D[i].size());
-        for( j=0 ; j<m_points2D[i].size() ; ++j )
-            if(m_points2D[i][j]!=0)
-                if(m_points2D[i][j]->isVisible())
-                    m_cameras[i]->pixelPlaneToUnitFocalPlane( m_points2D[i][j], m_extPoints2D[i][j], false );
-    }
-}
-
-void arlCore::OSPPC_LS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==6);
-    unsigned int i,j, index=0;
-    vnl_vector_fixed<double,3> crossProduct;
-    vnl_vector_fixed<double,4> extPoints3D;
-    arlCore::vnl_rigid_vector vec(x);
-    arlCore::vnl_rigid_matrix trsf(vec);
-    m_error = 0.0;
-    for(i=0 ; i<m_cameras.size() ; ++i)
-    {
-        assert(m_points3D.size()==m_points2D[i].size());
-        for(j=0 ; j<m_points3D.size() ; ++j)
-        {
-            if(m_points2D[i][j]!=0)
-                if(m_points2D[i][j]->isVisible())
-                {   //Ce critere calcule la distance entre les demi-droites [Cimij) et les points T*Mj
-                    //On exprime d'abord le point mij dans le repere optique de la camera i
-                    //Puis on calcule les coordonnes de T*Mj dans le repere optique de la camera i
-                    //Puis on calcule cette distance en faisant le produit vectoriel [Cimij)xCiMj / norm([Cimij))= ||CiMj||sin(theta)
-                    extPoints3D = m_cameras[i]->getExtrinsic()* trsf * m_points3D[j]->getHCoordinates();
-                    crossProduct = vnl_cross_3d( m_extPoints2D[i][j], extPoints3D.extract(3) )/ m_extPoints2D[i][j].two_norm();
-                    fx[index]=sqrt(crossProduct.squared_magnitude());
-                    m_error += fx[index];
-                }
-            ++index;
-        }
-    }
-    observe(x);
-}
-
-void arlCore::OSPPC_LS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// INTRINSIC
-arlCore::Intrinsic_cost_function::Intrinsic_cost_function(unsigned int nbParameters):
-    m_nbParameters(nbParameters)//nb de parametres que l'on souhaite optimiser
-{
-    if(nbParameters==0 || nbParameters>8) m_nbParameters=8;
-    else m_nbParameters = nbParameters;
-    assert(m_nbParameters>=4);
-    m_camera = new Camera(m_universe);
-    m_verbose = false;
-    m_available_reprojection_error = false;
-}
-
-arlCore::Intrinsic_cost_function::~Intrinsic_cost_function()
-{
-    unsigned int i;
-    for( i=0 ; i<m_2DpatternsList.size() ; ++i )
-        if(m_2DpatternsList[i]!=0) delete m_2DpatternsList[i];
-    for( i=0 ; i<m_3DpatternsList.size() ; ++i )
-        if(m_3DpatternsList[i]!=0) delete m_3DpatternsList[i];
-    if(m_camera!=0) delete m_camera;
-}
-
-unsigned int arlCore::Intrinsic_cost_function::getNbParameters( void ) const
-{
-    return m_nbParameters;
-}
-
-bool arlCore::Intrinsic_cost_function::save( const std::string &fileName ) const
-{
-    if(m_camera==0) return false;
-    return m_camera->save(fileName);
-}
-
-unsigned int arlCore::Intrinsic_cost_function::addPattern( const std::vector<Point::sptr >& points2D, const std::vector<Point::sptr >& model3D )
-{// Call addPattern for each rigid pattern and each pose
-    assert(points2D.size()==model3D.size());
-    unsigned int i, size = (unsigned int)m_2DpatternsList.size();
-    PointList *patternsList2D = new PointList(2);
-    PointList *patternsList3D = new PointList(3);
-    for( i=0 ; i<points2D.size() ; ++i )
-        if(patternsList2D->push_back( points2D[i] ))
-            if(!patternsList3D->push_back( model3D[i] ))
-                patternsList2D->pop_back();
-    m_2DpatternsList.push_back(patternsList2D);
-    m_3DpatternsList.push_back(patternsList3D);
-    assert(m_2DpatternsList[size]->size()==m_3DpatternsList[size]->size());
-    assert(m_2DpatternsList.size()==m_3DpatternsList.size());
-    set_number_of_unknowns(m_nbParameters + 6 * m_2DpatternsList.size());
-    return(m_2DpatternsList[size]->size());
-}
-
-void arlCore::Intrinsic_cost_function::setVerbose(bool verbose)
-{m_verbose = verbose;}
-
-std::vector<double> arlCore::Intrinsic_cost_function::getReprojectionError( vnl_vector< double > const &x)
-{
-    m_available_reprojection_error = true;
-    f(x);
-    return m_point_reprojection_error;
-}
-
-double arlCore::Intrinsic_cost_function::f(vnl_vector< double > const &x)
-{
-    m_error = 0.0;
-    double errorX, errorY;
-    unsigned int i,j;
-    long int nbPoints = 0;
-    Point::sptr point2D = Point::New();
-    point2D->init(2);
-    m_camera->setIntrinsic(x.extract(m_nbParameters));
-    for( i=0 ; i<m_2DpatternsList.size() ; ++i )
-    {
-        arlCore::vnl_rigid_vector vec(x.extract(6,m_nbParameters+6*i));
-        arlCore::vnl_rigid_matrix Ti(vec);
-        m_camera->setExtrinsic(Ti);
-        for( j=0 ; j<m_2DpatternsList[i]->size() ; ++j,++nbPoints )
-            if(m_camera->project3DPoint( m_3DpatternsList[i]->get(j) , point2D))
-            {
-                errorX = point2D->x() - m_2DpatternsList[i]->get(j)->x();
-                errorY = point2D->y() - m_2DpatternsList[i]->get(j)->y();
-                m_error += errorX*errorX + errorY*errorY;
-                if(m_available_reprojection_error)
-                {
-                    m_point_reprojection_error.push_back(sqrt(errorX *errorX + errorY*errorY));
-                }
-            }
-            else // Focal plane
-                return error(x);
-    }
-    m_error /= nbPoints;
-    if(m_verbose){std::cerr<<"reprojection error= "<<sqrt(m_error)<<std::endl;}
-    return observe(x);
-}
-
-void arlCore::Intrinsic_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& g)
-{
-    fdgradf(x, g);
-}
-
-// INTRINSIC LS
-arlCore::IntrinsicLS_cost_function::IntrinsicLS_cost_function(unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g):
-    vnl_least_squares_function(number_of_unknowns, number_of_residuals, g)
-    //nbParameters = nb de parametre que l'on souhaite optimiser
-{
-    m_nbParameters = 8;
-//  assert(nbParameters<=10);//verifie la coherence du nombre de parametre estime
-//  if(nbParameters==0 || nbParameters>8) m_nbParameters=8;
-//  else m_nbParameters = nbParameters;
-//  assert(m_nbParameters>=4);
-    m_verbose = false;
-    m_camera = new Camera(m_universe);
-}
-
-arlCore::IntrinsicLS_cost_function::~IntrinsicLS_cost_function()
-{
-    unsigned int i;
-    for( i=0 ; i<m_2DpatternsList.size() ; ++i )
-        if(m_2DpatternsList[i]!=0) delete m_2DpatternsList[i];
-    for( i=0 ; i<m_3DpatternsList.size() ; ++i )
-        if(m_3DpatternsList[i]!=0) delete m_3DpatternsList[i];
-    if(m_camera!=0) delete m_camera;
-}
-
-unsigned int arlCore::IntrinsicLS_cost_function::getNbParameters( void ) const
-{
-    return m_nbParameters;
-}
-
-bool arlCore::IntrinsicLS_cost_function::save( const std::string &fileName ) const
-{
-    if(m_camera==0) return false;
-    return m_camera->save(fileName);
-}
-
-unsigned int arlCore::IntrinsicLS_cost_function::addPattern( const std::vector<Point::sptr >& points2D, const std::vector<Point::sptr >& model3D )
-{// faire addPattern pour chaque pattern rigide et chaque pose
-    assert(points2D.size()==model3D.size());
-    unsigned int i, size = (unsigned int)m_2DpatternsList.size();
-    PointList *patternsList2D = new PointList(2);
-    PointList *patternsList3D = new PointList(3);
-    for( i=0 ; i<points2D.size() ; ++i )
-        if(patternsList2D->push_back( points2D[i] ))
-            if(!patternsList3D->push_back( model3D[i] ))
-                patternsList2D->pop_back();
-    m_2DpatternsList.push_back(patternsList2D);
-    m_3DpatternsList.push_back(patternsList3D);
-    assert(m_2DpatternsList[size]->size()==m_3DpatternsList[size]->size());
-    assert(m_2DpatternsList.size()==m_3DpatternsList.size());
-    //set_number_of_unknowns(m_nbParameters + 6 * m_2DpatternsList.size());
-    return(m_2DpatternsList[size]->size());
-}
-
-void arlCore::IntrinsicLS_cost_function::getReprojectionError( vnl_vector< double > const &x, vnl_vector< double > &fx )
-{
-    f(x,fx);
-}
-
-void arlCore::IntrinsicLS_cost_function::setVerbose(bool verbose)
-{m_verbose = verbose;}
-
-void arlCore::IntrinsicLS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    m_error = 0.0;
-    unsigned int i,j;
-    long int index = 0, nbPoints = 0;
-    Point::sptr point2D = Point::New();
-    point2D->init(2);
-    m_camera->setIntrinsic(x.extract(m_nbParameters));
-    for( i=0 ; i<m_2DpatternsList.size() ; ++i )
-    {
-        arlCore::vnl_rigid_vector vec(x.extract(6,m_nbParameters+6*i));
-        arlCore::vnl_rigid_matrix Ti(vec);
-        m_camera->setExtrinsic(Ti);
-        for( j=0 ; j<m_2DpatternsList[i]->size() ; ++j,++index, ++nbPoints )
-            if(m_camera->project3DPoint( m_3DpatternsList[i]->get(j), point2D))
-            {
-                //fx[index + j] = point2D.distance(*(m_2DpatternsList[i]->get(j)));
-                fx[index] = point2D->distance( m_2DpatternsList[i]->get(j) );
-                m_error += fx[index]*fx[index];
-            }else
-            {   //! @todo Fixer le problme des singularits
-                //fx[index + j]=10000;
-                fx[index]=10000;
-                m_error += 10000;
-                std::cout<<"PlanFOCAL\n";
-            }
-        //index += m_2DpatternsList[i]->size();
-    }
-    m_error /= nbPoints;
-    observe(x);
-}
-
-void arlCore::IntrinsicLS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& j)
-{
-    const bool Verbose = false;
-    fdgradf(x, j, 1e-8);
-    if(Verbose)
-    {
-        std::cerr<<"calcul du gradient"<<std::endl;
-        std::cerr<<"reprojection error= "<<sqrt(m_error)<<std::endl;
-    }
-}
-
-// EXTRINSIC
-arlCore::Extrinsic_cost_function::Extrinsic_cost_function(const std::vector<const arlCore::Camera *>&a, unsigned int nou):
-vnl_cost_function(nou),
-m_cameras(a)
-{
-    m_verbose = false;
-    m_available_reprojection_error = false;
-}
-
-
-arlCore::Extrinsic_cost_function::~Extrinsic_cost_function(){}
-
-unsigned int arlCore::Extrinsic_cost_function::addPattern(const std::vector<std::vector<Point::csptr > >& points2D, const std::vector<Point::csptr >& model3D)
-{// faire addPattern pour chaque pattern rigide et chaque pose
-    //assert(points2D.size()==model3D.size());
-    unsigned int i, j;
-
-    std::vector<std::vector<Point::csptr > > patternsList2D;
-    std::vector< Point::csptr  > patternsList3D(model3D.size());
-    for( i=0 ; i<model3D.size() ; ++i )
-    {
-        patternsList3D[i] = model3D[i];
-//          if(patternsList2D->push_back(*(points2D[i])))
-//              if(!patternsList3D->push_back(*(model3D[i])))
-//                  patternsList2D->pop_back();
-    }
-    for( j=0 ; j<m_cameras.size() ; ++j )
-    {
-        std::vector<Point::csptr > tmp(points2D[j].size());
-        for( i=0 ; i<model3D.size() ; ++i )
-            tmp[i]=points2D[j][i];
-        patternsList2D.push_back(tmp);
-    }
-    m_2DpatternsList.push_back(patternsList2D);
-    m_3DpatternsList.push_back(patternsList3D);
-    //assert(m_2DpatternsList[size]->size()==m_3DpatternsList[size]->size());
-    //assert(m_2DpatternsList.size()==m_3DpatternsList.size());
-    //set_number_of_unknowns(m_nbParameters + 6 * m_2DpatternsList.size());
-    return(0);
-}
-
-void arlCore::Extrinsic_cost_function::setVerbose(bool verbose)
-{
-    m_verbose = verbose;
-}
-
-std::vector<double> arlCore::Extrinsic_cost_function::getReprojectionError(vnl_vector< double > const &x)
-{
-    m_available_reprojection_error = true;
-    f(x);
-    return m_point_reprojection_error;
-}
-
-double arlCore::Extrinsic_cost_function::f(vnl_vector< double > const &x)
-{
-    const unsigned int NbCameras = (unsigned int)m_cameras.size();
-    const unsigned int NbPoses = (unsigned int)m_3DpatternsList.size();
-    std::vector <arlCore::vnl_rigid_matrix> listTransfo(NbPoses + NbCameras -1);
-    vnl_vector_fixed<double,4> points3DRepereCam;
-    vnl_vector_fixed<double,2> projPoint2D;
-    unsigned int i,j,k,index=0;
-    m_error = 0.0;
-    double errorX, errorY;
-    // - il y a NbPoses Tei ie transformation entre les differentes poses de la mire
-    // et la camera 1
-    // - plus NbCameras-1 Tsj entre la camera 1 et les autres cameras
-    // TOTAL NbPoses + NbCameras -1 transformations a estimer
-    // par convention les NbPoses sont en premier dans le vnl_vector< double > x
-    for( i=0 ; i<NbPoses+NbCameras-1 ; ++i )
-    {
-        arlCore::vnl_rigid_vector rigid_vect;
-        for( j=0 ; j<6; ++j )
-            rigid_vect.put(j, x[6*i+j]);
-        listTransfo[i]=arlCore::vnl_rigid_matrix(rigid_vect);
-    }
-    //Calcul des coordonnes de points3d aprs application de la transfo recherche
-    for( i=0 ; i<NbPoses; ++i )
-        for( j=0 ; j<NbCameras; ++j )
-            for( k=0 ; k<m_3DpatternsList[i].size() ; ++k )
-            {
-                if(j==0) points3DRepereCam = listTransfo[i] * m_3DpatternsList[i][k]->getHCoordinates();
-                else points3DRepereCam = listTransfo[NbPoses-1+j] * listTransfo[i] * m_3DpatternsList[i][k]->getHCoordinates();
-                if(m_2DpatternsList[i][j][k]!=0)
-                {
-                    m_cameras[j]->project3DPoint(points3DRepereCam, projPoint2D);
-                    errorX = projPoint2D(0) - m_2DpatternsList[i][j][k]->x();
-                    errorY = projPoint2D(1) - m_2DpatternsList[i][j][k]->y();
-                    m_error += errorX *errorX + errorY*errorY;
-                    if(m_available_reprojection_error)
-                    {
-                        m_point_reprojection_error.push_back(sqrt(errorX *errorX + errorY*errorY));
-                        //std::cerr<<"hopla "<<errorX *errorX + errorY*errorY<<" "<<m_point_reprojection_error.size()<<"\n";
-                    }
-                    ++index;
-                }
-            }
-    m_error /= index;
-    if(m_verbose){std::cerr<<"reprojection error= "<<sqrt(m_error)<<std::endl;}
-    return observe(x);
-}
-
-//void arlCore::Extrinsic_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& g)
-//{
-//  fdgradf(x, g);
-//}
-
-// EXTRINSIC LS
-arlCore::ExtrinsicLS_cost_function::ExtrinsicLS_cost_function(const std::vector<const arlCore::Camera *>&a,unsigned int number_of_unknowns, unsigned int number_of_residuals, UseGradient g):
-    vnl_least_squares_function(number_of_unknowns, number_of_residuals, g),
-    m_cameras(a)
-{
-    m_verbose = false;
-}
-
-arlCore::ExtrinsicLS_cost_function::~ExtrinsicLS_cost_function(){}
-
-void arlCore::ExtrinsicLS_cost_function::setVerbose(bool verbose)
-{m_verbose = verbose;}
-
-unsigned int arlCore::ExtrinsicLS_cost_function::addPattern( const std::vector<std::vector<Point::csptr > >& points2D, const std::vector<Point::csptr >& model3D )
-{// faire addPattern pour chaque pattern rigide et chaque pose
-    //assert(points2D.size()==model3D.size());
-    unsigned int i, j;
-
-    std::vector<std::vector<Point::csptr > > patternsList2D;
-    std::vector< Point::csptr  > patternsList3D(model3D.size());
-    for( i=0 ; i<model3D.size() ; ++i )
-    {
-        patternsList3D[i] = model3D[i];
-//          if(patternsList2D->push_back(*(points2D[i])))
-//              if(!patternsList3D->push_back(*(model3D[i])))
-//                  patternsList2D->pop_back();
-    }
-    for( j=0 ; j<m_cameras.size() ; ++j )
-    {
-        std::vector<Point::csptr > tmp(points2D[j].size());
-        for( i=0 ; i<model3D.size() ; ++i )
-            tmp[i]=points2D[j][i];
-        patternsList2D.push_back(tmp);
-    }
-    m_2DpatternsList.push_back(patternsList2D);
-    m_3DpatternsList.push_back(patternsList3D);
-    //assert(m_2DpatternsList[size]->size()==m_3DpatternsList[size]->size());
-    //assert(m_2DpatternsList.size()==m_3DpatternsList.size());
-    //set_number_of_unknowns(m_nbParameters + 6 * m_2DpatternsList.size());
-    return 0;
-}
-
-void arlCore::ExtrinsicLS_cost_function::getReprojectionError( vnl_vector< double > const &x, vnl_vector< double > &fx )
-{
-    f(x,fx);
-}
-
-void arlCore::ExtrinsicLS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    long int index=0;// tmp_index=0;
-    //index increments for each 2D point visible in the video image.
-    //tmp_index is used in a loop and contain the number of visible 2D points for a video image
-    const unsigned int NbCameras = (unsigned int)m_cameras.size();
-    const unsigned int NbPoses = (unsigned int)m_3DpatternsList.size();
-    std::vector <arlCore::vnl_rigid_matrix> listTransfo(NbPoses+NbCameras-1);
-    vnl_vector_fixed<double,4> points3DRepereCam;
-    vnl_vector_fixed<double,2> projPoint2D;
-    unsigned int i,j,k;
-    m_error = 0.0;
-    double errorX, errorY;
-    // - il y a NbPoses Tei ie transformation entre les differentes poses de la mire
-    // et la camera 1
-    // - plus NbCameras-1 Tsj entre la camera 1 et les autres cameras
-    // TOTAL NbPoses + NbCameras -1 transformations a estimer
-    // par convention les NbPoses sont en premier dans le vnl_vector< double > x
-    for( i=0 ; i<NbPoses+NbCameras-1 ; ++i)
-    {
-        arlCore::vnl_rigid_vector rigid_vect;
-        for(j=0 ; j<6; ++j)
-            rigid_vect.put(j, x[6*i+j]);
-        listTransfo[i]=arlCore::vnl_rigid_matrix(rigid_vect);
-    }
-    for( i=0 ; i<NbPoses; ++i )
-        for( j=0 ; j<NbCameras; ++j )
-//      {
-            for( k=0 ; k<m_3DpatternsList[i].size() ; ++k )
-            {
-                if(j==0) points3DRepereCam = listTransfo[i] * m_3DpatternsList[i][k]->getHCoordinates();
-                else points3DRepereCam = listTransfo[NbPoses-1+j] * listTransfo[i] * m_3DpatternsList[i][k]->getHCoordinates();
-                if(m_2DpatternsList[i][j][k]!=0)
-                {
-                    m_cameras[j]->project3DPoint(points3DRepereCam, projPoint2D);//[i][j][k]);
-                    errorX  = projPoint2D(0) - m_2DpatternsList[i][j][k]->x();
-                    errorY  = projPoint2D(1) - m_2DpatternsList[i][j][k]->y();
-                    fx[index] = sqrt(errorX *errorX + errorY*errorY);
-                    m_error += fx[index]*fx[index];
-                    ++index;
-//                  ++tmp_index;
-                }
-            }
-//          index += tmp_index;
-//          tmp_index = 0;
-//      }
-
-    m_error /= index;
-    //std::cerr<<"erreur reprojection = "<<sqrt(m_error/index) <<"  " <<index<<std::endl;
-    observe(x);
-}
-
-void arlCore::ExtrinsicLS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-    if(m_verbose)
-    {
-        std::cerr<<"calcul du gradient"<<std::endl;
-        std::cerr<<"reprojection error= "<<sqrt(m_error)<<std::endl;
-    }
-}
-
-// AX=XB
-double arlCore::AX_XB_cost_function::f(vnl_vector< double > const &x)
-{
-    const bool Verbose = false;
-    assert(x.size()==6); //6
-    assert(m_A_matrix.size()==m_B_matrix.size());
-    arlCore::vnl_rigid_vector vX(x.extract(6));
-    arlCore::vnl_rigid_matrix mX(vX);
-    m_error = criterion( mX );
-    if(Verbose) cerr<<"error AX XB = "<<m_error/m_A_matrix.size()<<endl;
-    return observe(x);
-}
-
-double arlCore::AX_XB_cost_function::criterion( const arlCore::vnl_rigid_matrix &X )
-{
-    unsigned int i;
-    // 1=Norme de frobenius de AX-XB
-    // 2=Klaus Strobl & Gerd Hirzinger
-    const unsigned int Method = 2;
-    double error = 0.0, tErr, rErr;
-    for( i=0 ; i<m_A_matrix.size() ; ++i )
-    {
-        const vnl_rigid_matrix AX = m_A_matrix[i] * X;
-        const vnl_rigid_matrix XB = X * m_B_matrix[i];
-        AX.compare( XB, tErr, rErr );
-        const double TErr2 = tErr*tErr, RErr2 = rErr*rErr;
-        if(Method==1) error += (AX-XB).frobenius_norm();
-        if(Method==2) error += RErr2 + m_alpha*TErr2;
-    }
-    return error;
-}
-
-double arlCore::AX_XB_cost_function::getAlpha( const arlCore::vnl_rigid_matrix &X )
-{
-    const bool Verbose = false;
-    unsigned int i;
-    double tErr, rErr;
-    std::vector< double > translationErrors, rotationErrors;
-    for( i=0 ; i<m_A_matrix.size() ; ++i )
-    {
-        const vnl_rigid_matrix AX = m_A_matrix[i] * X;
-        const vnl_rigid_matrix XB = X * m_B_matrix[i];
-        AX.compare( XB, tErr, rErr );
-        translationErrors.push_back( tErr );
-        rotationErrors.push_back( rErr );
-    }
-    double min, max, rms, mean, stddev;
-    arlCore::statistic( translationErrors, min, max, rms, mean, stddev, false );
-    const double SigmaT = stddev;
-    arlCore::statistic( rotationErrors, min, max, rms, mean, stddev, false );
-    const double SigmaR = stddev;
-    if(SigmaR<1e-14) return 1.0;
-    const double Ratio = (SigmaT/SigmaR)*(SigmaT/SigmaR);
-    if(Verbose) std::cout<<"Ratio="<<Ratio<<" Sigma T"<<SigmaT<<" R"<<SigmaR<<"\n";
-    if(Ratio>1e-5) return 1.0/Ratio; else return 1.0;
-}
-
-void arlCore::AX_XB_cost_function::setAlpha( double alpha )
-{
-    m_alpha = alpha;
-}
-
-void arlCore::AX_XB_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// AXB_Z_cost_function
-double arlCore::AXB_Z_cost_function::criterion( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z )
-{
-    unsigned int i;
-    double error1 = 0.0, error2 = 0.0, error3 = 0.0, error4 = 0.0;
-    const arlCore::vnl_rigid_matrix invZ = Z.computeInverse();
-    assert( m_A_matrix.size()==m_B_matrix.size() );
-    for( i=0 ; i<m_A_matrix.size() ; ++i )
-    {
-        const arlCore::vnl_rigid_matrix AXB = m_A_matrix[i] * X * m_B_matrix[i];
-        // 1st Method : Optimization of A_iXB_i - Z
-        const vnl_matrix_fixed<double,4,4> Sum = AXB - Z.as_matrix() ;
-        error1 += Sum.frobenius_norm();
-
-        // 2nd Method : Optimization of sum_i
-        const arlCore::vnl_rigid_vector V( AXB * invZ );
-        error2 += V.as_vector().two_norm();
-
-        // 3rd Method : Optimization of distance2 between AXB & Z
-        error3 += AXB.distance2( Z, arlCore::ARLCORE_VRM_DISTANCE_3AXIS );
-
-        // 4th Method Klaus H. Strobl & Gerd Hirzinger
-        // Proceedings of the 2006 IEEE/RSJ International Conference on intelligent Robots and Systems
-        // October 9 -15, 2006, Beijing, China
-        double tErr, rErr;
-        AXB.compare( Z, tErr, rErr );
-        const double TErr2 = tErr*tErr, RErr2 = rErr*rErr;
-        error4 += RErr2 + m_alpha*TErr2;
-    }
-    return error4;
-}
-
-double arlCore::AXB_Z_cost_function::getAlpha( const arlCore::vnl_rigid_matrix &X, const arlCore::vnl_rigid_matrix &Z )
-{
-    unsigned int i;
-    double tErr, rErr;
-    std::vector< double > translationErrors, rotationErrors;
-    for( i=0 ; i<m_A_matrix.size() ; ++i )
-    {
-        const vnl_rigid_matrix BXA = m_B_matrix[i] * X * m_A_matrix[i];
-        BXA.compare( Z, tErr, rErr );
-        translationErrors.push_back( tErr );
-        rotationErrors.push_back( rErr );
-    }
-    double min, max, rms, mean, stddev;
-    arlCore::statistic( translationErrors, min, max, rms, mean, stddev, false );
-    const double SigmaT = stddev;
-    arlCore::statistic( rotationErrors, min, max, rms, mean, stddev, false );
-    const double SigmaR = stddev;
-    if(SigmaR<1e-14) return 1.0;
-    const double Ratio = (SigmaT/SigmaR)*(SigmaT/SigmaR);
-    std::cout<<"Ratio="<<Ratio<<" Sigma T"<<SigmaT<<" R"<<SigmaR<<"\n";
-    if(Ratio>1e-5) return 1.0/Ratio; else return 1.0;
-
-}
-
-double arlCore::AXB_Z_cost_function::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==12);
-    arlCore::vnl_rigid_vector vX(x.extract(6));
-    arlCore::vnl_rigid_vector vZ(x.extract(6,6));
-    arlCore::vnl_rigid_matrix X(vX);
-    arlCore::vnl_rigid_matrix Z(vZ);
-    m_error = criterion( X, Z );
-    //cerr<<"AXBZ = "<<m_error / (double)m_A_matrix.size()<<endl;
-    return observe(x);
-}
-
-void arlCore::AXB_Z_cost_function::setAlpha( double alpha )
-{
-    m_alpha = alpha;
-}
-
-void arlCore::AXB_Z_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    fdgradf(x, j, 1e-8);
-}
-
-// register3D3DUncertainty_cost_function
-arlCore::register3D3DUncertainty_cost_function::register3D3DUncertainty_cost_function(PointList::csptr points3D_source,
-            PointList::csptr points3D_cible):
-vnl_cost_function(6),
-m_points3D_source(points3D_source),
-m_points3D_cible(points3D_cible)
-{
-    assert(m_points3D_source->size()==m_points3D_cible->size());
-    unsigned int i;
-    //m_inv_cov_matrix.resize(m_cameras.size());
-    for( i=0 ; i<m_points3D_source->size() ; i++ )
-    {
-        vnl_matrix<double> tmp(3,3);
-        tmp = vnl_matrix_inverse<double>( (*points3D_cible)[i]->getCovMatrix());
-        m_inv_cov_matrix.push_back(tmp);
-    }
-}
-
-double arlCore::register3D3DUncertainty_cost_function::f(vnl_vector< double > const &x)
-{
-    assert(x.size()==6);
-    unsigned int i;
-    vnl_matrix_fixed<double,3,1> pointSubtraction;
-    vnl_matrix_fixed<double,1,1> error(0.0);
-    arlCore::vnl_rigid_vector vec(x);
-    arlCore::vnl_rigid_matrix trsf(vec);
-    m_error=0.0;
-    for(i=0 ; i<m_points3D_source->size() ; ++i)
-    {
-        arlCore::Point::sptr points3D_recale = arlCore::Point::New();
-        trsf.trf( (*m_points3D_source)[i], points3D_recale);
-        pointSubtraction[0][0] = (*points3D_recale)[0]-(*(*m_points3D_cible)[i])[0];
-        pointSubtraction[1][0] = (*points3D_recale)[1]-(*(*m_points3D_cible)[i])[1];
-        pointSubtraction[2][0] = (*points3D_recale)[2]-(*(*m_points3D_cible)[i])[2];
-        {
-            if( (*m_points3D_cible)[i]->getCovMatrix().is_zero())
-            {
-                error = pointSubtraction.transpose() * pointSubtraction;
-                m_error += error(0,0);
-                //std::cerr<<"covariance nulle"<<std::endl;
-            }
-            else
-            {
-                error = pointSubtraction.transpose().as_matrix() * ((m_inv_cov_matrix[i])) * pointSubtraction;
-                //error = pointSubtraction.transpose().as_matrix() * pointSubtraction;
-                m_error += error(0,0);
-            }
-            //std::cerr<<"mat cov  ="<<(m_inv_cov_matrix[i])<<std::endl;
-        }
-    }
-    return observe(x);
-}
-
-// register3D3DUncertainty_cost_function
-void arlCore::register3D3DUncertainty_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    //cerr<<"Calcul de gradf register3D3DUncertainty_LS_cost_function------------------"<<endl;
-    fdgradf(x, j, 1e-8);
-}
-
-
-arlCore::register3D3DUncertainty_LS_cost_function::register3D3DUncertainty_LS_cost_function(PointList::csptr points3D_source,
-            PointList::csptr points3D_cible,
-            unsigned int number_of_unknowns,
-            unsigned int number_of_residuals, UseGradient g):
-vnl_least_squares_function(number_of_unknowns, number_of_residuals, g),
-m_points3D_source(points3D_source),
-m_points3D_cible(points3D_cible)
-{
-    assert(m_points3D_source->size()==m_points3D_cible->size());
-    unsigned int i;
-    //m_inv_cov_matrix.resize(m_cameras.size());
-    for( i=0 ; i<m_points3D_source->size() ; i++ )
-    {
-        vnl_matrix<double> tmp(3,3);
-        tmp = vnl_matrix_inverse<double>( (*points3D_cible)[i]->getCovMatrix());
-        m_inv_cov_matrix.push_back(tmp);
-    }
-}
-void arlCore::register3D3DUncertainty_LS_cost_function::f(vnl_vector< double > const &x, vnl_vector< double > &fx)
-{
-    assert(x.size()==6);
-    unsigned int i;
-    vnl_matrix_fixed<double,3,1> pointSubtraction;
-    vnl_matrix_fixed<double,1,1> error(0.0);
-    arlCore::vnl_rigid_vector vec(x);
-    arlCore::vnl_rigid_matrix trsf(vec);
-
-    for(i=0 ; i<m_points3D_source->size() ; ++i)
-    {
-        arlCore::Point::sptr points3D_recale= arlCore::Point::New();
-        trsf.trf( (*m_points3D_source)[i] , points3D_recale);
-        pointSubtraction[0][0] = (*points3D_recale)[0]-(*(*m_points3D_cible)[i])[0];
-        pointSubtraction[1][0] = (*points3D_recale)[1]-(*(*m_points3D_cible)[i])[1];
-        pointSubtraction[2][0] = (*points3D_recale)[2]-(*(*m_points3D_cible)[i])[2];
-        {
-            if( (*m_points3D_cible)[i]->getCovMatrix().is_zero())
-            {
-                error = pointSubtraction.transpose() * pointSubtraction;
-                fx[i] = sqrt( error(0,0) );
-                //std::cerr<<"covariance nulle"<<std::endl;
-            }
-            else
-            {
-                error = pointSubtraction.transpose().as_matrix() * ((m_inv_cov_matrix[i])) * pointSubtraction;
-                //error = pointSubtraction.transpose().as_matrix() * pointSubtraction;
-                fx[i] = sqrt( error(0,0) );
-            }
-            //std::cerr<<"mat cov  ="<<(m_inv_cov_matrix[i])<<std::endl;
-        }
-    }
-    observe(x);
-}
-void arlCore::register3D3DUncertainty_LS_cost_function::gradf(vnl_vector< double > const &x, vnl_matrix<double>& j)
-{
-    //cerr<<"Calcul de gradf register3D3DUncertainty_LS_cost_function------------------"<<endl;
-    fdgradf(x, j, 1e-8);
-}
-
-// averageRotation_cost_function
-double arlCore::averageRotation_cost_function::f (vnl_vector< double > const &x)
-{
-//   vnl_vector_fixed<double,3> V_mean;
-    arlCore::vnl_rotation3d_vector tmp(x[0],x[1],x[2] );
-    arlCore::vnl_rotation3d_matrix M_mean(tmp);
-    unsigned int i;
-    m_error=0;
-    for(i=0;i<m_rotation_list.size();i++)
-        m_error+= M_mean.sq_rieman_dist(*(m_rotation_list[i]));
-    return observe(x);
-}
-
-void arlCore::averageRotation_cost_function::gradf(vnl_vector< double > const &x, vnl_vector<double>& j)
-{
-    //cerr<<"Calcul de gradf averageRotation------------------"<<endl;
-    fdgradf(x, j, 1e-8);
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Parameters.cpp b/SrcLib/ARLcore/src/arlcore/Parameters.cpp
deleted file mode 100644
index e20884d..0000000
--- a/SrcLib/ARLcore/src/arlcore/Parameters.cpp
+++ /dev/null
@@ -1,261 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Parameters.h>
-
-#include <assert.h>
-#include <sstream>
-#include <fstream>
-#include <iostream>
-
-arlCore::Parameters::Parameters( const std::string &name, const std::string &fileName ):
-m_paramFile(fileName),
-m_name(name)
-{}
-
-arlCore::Parameters::~Parameters( void )
-{
-    clear();
-}
-
-
-void arlCore::Parameters::clear( void )
-{
-    m_paramNames.clear();
-    m_paramValues.clear();
-    m_paramDefaults.clear();
-    m_index.clear();
-}
-
-bool arlCore::Parameters::printParameters( void ) const
-{
-    std::cout<<getString();
-    return true;
-}
-
-bool arlCore::Parameters::reloadParameters( void )
-{
-    return load()>0;
-}
-
-bool arlCore::Parameters::reloadParameters( const std::string &fileName )
-{
-    m_paramFile = fileName;
-    return load()>0;
-}
-
-std::string arlCore::Parameters::getString( void ) const
-{
-    // TODO Afficher le type et (true,false) si booleen
-    unsigned int i;
-    std::stringstream ss;
-    ss<<"_______________________________________________________________________________\n\n";
-    ss<<"Parameter list '"<<m_name<<"' : "<<getNbParameters()<<" parameters\n";
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        if( m_paramValues[i].type() == typeid(double) )
-            ss<<" "<<m_paramNames[i]<<" = "<<boost::any_cast<double>(m_paramValues[i])<<" [Dft:"<<boost::any_cast<double>(m_paramDefaults[i])<<"]\n";
-        else
-            if( m_paramValues[i].type() == typeid(bool) )
-                ss<<" "<<m_paramNames[i]<<" = "<<boost::any_cast<bool>(m_paramValues[i])<<" [Dft:"<<boost::any_cast<bool>(m_paramDefaults[i])<<"]\n";
-            else ss<<" Unknown type\n";
-    ss<<"_______________________________________________________________________________\n";
-    std::string s = ss.str();
-    return s;
-}
-
-bool arlCore::Parameters::getType( unsigned int no, const std::type_info &type ) const
-{
-    assert( no<m_paramValues.size() );
-    if( no>=m_paramValues.size() ) return false;
-    return (m_paramValues[no].type()==type);
-}
-
-bool arlCore::Parameters::getIndex( const std::string &name, unsigned int &index ) const
-{
-    std::map< std::string, unsigned int >::const_iterator it;
-    it = m_index.find(name);
-    assert( it!=m_index.end() );
-    if( it==m_index.end() ) return false;
-    index = it->second;
-    return true;
-}
-
-unsigned int arlCore::Parameters::getNbParameters( void ) const
-{
-    return (unsigned int)m_paramValues.size();
-}
-
-unsigned int arlCore::Parameters::getNbDoubleParameters( void ) const
-{
-    unsigned int i, n=0;
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        if( m_paramValues[i].type() == typeid(double) ) ++n;
-    return n;
-}
-
-unsigned int arlCore::Parameters::getNbBoolParameters( void ) const
-{
-    unsigned int i, n=0;
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        if( m_paramValues[i].type() == typeid(bool) ) ++n;
-    return n;
-}
-
-bool arlCore::Parameters::saveParameters( const std::string &fileName, bool overwrite ) const
-{
-    //! @todo
-    return false;
-}
-
-unsigned int arlCore::Parameters::setAllDefault( void )
-{
-    unsigned int i;
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        m_paramValues[i] = m_paramDefaults[i];
-    return i;
-}
-
-unsigned int arlCore::Parameters::setAllBoolParameters( bool v )
-{
-    unsigned int i;
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        if( m_paramValues[i].type() == typeid(bool) )
-            m_paramValues[i] = v;
-    return i;
-}
-
-unsigned int arlCore::Parameters::resetAllBoolParameters( void )
-{
-    unsigned int i;
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        if( m_paramValues[i].type() == typeid(bool) )
-            m_paramValues[i] = false;
-    return i;
-}
-
-unsigned int arlCore::Parameters::setAllDoubleParameters( double v )
-{
-    unsigned int i;
-    for( i=0 ; i<m_paramValues.size() ; ++i )
-        if( m_paramValues[i].type() == typeid(double) )
-            m_paramValues[i] = v;
-    return i;
-}
-
-//  protected:
-bool arlCore::Parameters::getBool( unsigned int no ) const
-{
-    if( !getType( no, typeid(bool) ) ) return false;
-    return boost::any_cast<bool>(m_paramValues[no]);
-}
-
-bool arlCore::Parameters::getBool( const std::string &name ) const
-{
-    unsigned int no;
-    if( !getIndex(name, no) ) return false;
-    if( !getType( no, typeid(bool) ) ) return false;
-    return boost::any_cast<bool>(m_paramValues[no]);
-}
-
-double arlCore::Parameters::getDouble( unsigned int no ) const
-{
-    if( !getType( no, typeid(double) ) ) return 0.0;
-    return boost::any_cast<double>(m_paramValues[no]);
-}
-
-double arlCore::Parameters::getDouble( const std::string &name ) const
-{
-    unsigned int no;
-    if( !getIndex(name, no) ) return 0.0;
-    if( !getType( no, typeid(double) ) ) return 0.0;
-    return boost::any_cast<double>(m_paramValues[no]);
-}
-
-bool arlCore::Parameters::setBool( unsigned int no, bool value )
-{
-    if( !getType( no, typeid(bool) ) ) return false;
-    m_paramValues[no] = value;
-    return true;
-}
-
-bool arlCore::Parameters::setBool( const std::string &name, bool value )
-{
-    unsigned int no;
-    if( !getIndex(name, no) ) return false;
-    if( !getType( no, typeid(bool) ) ) return false;
-    m_paramValues[no] = value;
-    return true;
-}
-
-bool arlCore::Parameters::setDouble( unsigned int no, double value )
-{
-    if( !getType( no, typeid(double) ) ) return false;
-    m_paramValues[no] = value;
-    return true;
-}
-
-bool arlCore::Parameters::setDouble( const std::string &name, double value )
-{
-    unsigned int no;
-    if( !getIndex(name, no) ) return false;
-    if( !getType( no, typeid(double) ) ) return false;
-    m_paramValues[no] = value;
-    return true;
-}
-
-unsigned int arlCore::Parameters::load( void )
-{
-    clear();
-    if(m_paramFile=="") return 0;
-    unsigned int n=0;
-    std::ifstream file;
-    file.open (m_paramFile.c_str(), std::fstream::in);
-    if(!file.is_open())
-    {
-        std::cerr<<"Parameters Loading error : "<<m_paramFile<<"\n";
-        return n;
-    }
-    std::string name, type, desc;
-    bool valueBool;
-    double valueDouble;
-    boost::any value;
-    while(!file.eof())
-    {
-        file>>name>>type;
-        if(type=="bool")
-        {
-            file>>valueBool;
-            m_paramValues.push_back(valueBool);
-            m_paramDefaults.push_back(valueBool);
-        }
-        if(type=="double")
-        {
-            file>>valueDouble;
-            m_paramValues.push_back(valueDouble);
-            m_paramDefaults.push_back(valueDouble);
-        }
-        m_index[name]=n;
-        std::getline(file, desc,'>');
-        std::getline(file, desc);
-        //file>>desc;
-        m_paramNames.push_back(desc);
-        ++n;
-    }
-    file.close();
-    return n;
-}
-
-unsigned int arlCore::Parameters::init( const std::string names[], const boost::any values[], unsigned int nb )
-{
-    unsigned int i;
-    for( i=0 ; i<nb ; ++i )
-    {
-        m_paramNames.push_back(names[i]);
-        m_paramValues.push_back(values[i]);
-        m_paramDefaults.push_back(values[i]);
-    }
-    return i;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Particle.cpp b/SrcLib/ARLcore/src/arlcore/Particle.cpp
deleted file mode 100644
index 9836998..0000000
--- a/SrcLib/ARLcore/src/arlcore/Particle.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Particle.h>
-
-arlCore::Particle::Particle( PlaneSystem &universe, const std::string &name ):
-m_universe( universe ),
-m_plane( universe.add3DPlane(name) )
-{}
-
-
-arlCore::Particle::Particle( const Particle& p ):
-m_universe( p.m_universe ),
-m_plane( p.m_plane )
-{}
-
-arlCore::Particle& arlCore::Particle::operator=( const Particle& p )
-{
-    m_universe = p.m_universe;;
-    m_plane = p.m_plane;
-    return *this;
-}
-
-arlCore::Particle::~Particle( void )
-{   // The particle's plane is released by the Planesystem
-    m_universe.releasePlane(m_plane);
-}
-
-std::string arlCore::Particle::getName( void ) const
-{   // The name of the particle
-    std::string name;
-    if(m_universe.getPlaneName(getPlane(), name)) return name;
-    else return "";
-}
-
-std::string arlCore::Particle::getString( void ) const
-{   // Particle's description
-    std::stringstream s;
-    s<<"Universe : \""<<m_universe.getName()<<"\" Plane : "<<m_plane<<"\n";
-    return s.str();
-}
-
-unsigned int arlCore::Particle::getPlane( void ) const
-{   // ID of the Particle's plane in the Planesystem
-    return m_plane;
-}
-
-arlCore::PlaneSystem& arlCore::Particle::getPlaneSystem( void ) const
-{   // Planesystem referency where the particle is dived
-    return m_universe;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/PlaneSystem.cpp b/SrcLib/ARLcore/src/arlcore/PlaneSystem.cpp
deleted file mode 100644
index 8458572..0000000
--- a/SrcLib/ARLcore/src/arlcore/PlaneSystem.cpp
+++ /dev/null
@@ -1,786 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/PlaneSystem.h>
-
-#include <fstream>
-#include <algorithm>
-#include <math.h>
-
-#include <arlcore/Misc.h>
-
-const unsigned int arlCore::PlaneSystem::NoPlane = 0;
-
-arlCore::PlaneSystem::PlaneSystem( const std::string &name ):
-Object(ARLCORE_CLASS_PLANESYSTEM, name)
-{
-    setOK(true);
-}
-
-arlCore::PlaneSystem::~PlaneSystem( void )
-{
-    m_trfTable.clear();
-    m_trfState.clear();
-    m_trfWeight.clear();
-    m_lstName.clear();
-    m_status.clear();
-}
-
-bool arlCore::PlaneSystem::setPlaneName( unsigned int plane, const std::string &name )
-{
-//  assert(!outOfRange(plane));
-//  if(outOfRange(plane)) return false;
-    assert(plane>0 && plane<=m_lstName.size());
-    if(plane<1 || plane>m_lstName.size()) return false;
-    m_lstName[plane-1]=name;
-    Object::update();
-    return true;
-}
-
-std::string arlCore::PlaneSystem::getString( void ) const
-{
-    std::stringstream s;
-    unsigned int i, j, index;
-    s<<Object::getString();
-    s<<"   ";
-    for( i=0 ; i<m_status.size() ; ++i )
-        if(m_status[i]) s<<" "<<i+1<<" "; else s<<"X"<<i+1<<"X";
-    s<<"\n";
-    for( i=0 ; i<m_status.size() ; ++i )
-    {
-        if(m_status[i]) s<<" "<<i+1<<" "; else s<<"X"<<i+1<<"X";
-            for( j=0 ; j<m_lstName.size() ; ++j )
-            {
-                index=getIndex(j+1,i+1);
-                switch(m_trfState[index])
-                {
-                case STATE_UNDEFINED:   s<<" ? ";break;
-                case STATE_SET:         s<<" O ";break;
-                case STATE_CALIBRATION: s<<" C ";break;
-                case STATE_IDENTITY:    s<<" 1 ";break;
-                case STATE_COMPUTED:    s<<" = ";break;
-                default: break;
-                }
-            }
-        s<<"\n";
-    }
-    // TODO : Fill the planeSystem description
-    return s.str();
-}
-
-bool arlCore::PlaneSystem::load( const std::string &fileName )
-{
-    if(fileName=="") return false;
-    //Object::update();
-    return false;
-}
-
-bool arlCore::PlaneSystem::save( const std::string &fileName, bool overwrite ) const
-{
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    // TODO : Save the planesystem in an appropriate format
-    return false;
-}
-
-unsigned int arlCore::PlaneSystem::printGraph( void ) const
-{
-    unsigned int n=saveGraph(GRAPHVIZ_TMP);
-    if(n>0)
-    {
-        std::string exe = GRAPHVIZ_EXE;
-        std::string tmp = GRAPHVIZ_TMP;
-        std::string cmd = exe + " ";
-        cmd = cmd +tmp;
-        system(cmd.c_str());
-    }
-    return n;
-}
-
-unsigned int arlCore::PlaneSystem::saveGraph( const std::string &name ) const
-{
-    const std::string ARL_PLANE_STATE_NAMES[NBSTATES]={ "Undefined","Identity","Calibration","Measure","Computed" };
-    long int date, time;
-    getTime(date, time);
-    std::fstream s;
-    s.open (name.c_str(), std::fstream::out);
-    unsigned int i,j,size=(unsigned int)m_lstName.size();
-    s<<"/*\n";
-    s<<" PlaneSystem Graph - Use Graphviz for display it\n";
-    s<<"http://www.graphviz.org\n";
-    s<<"*/\n";
-    s<<"digraph \""<<getName()<<"\" {labelloc =\"t\" label = \""<<getName()<<" at "<<date<<"-"<<time<<"\" node [fontname = \"Arial\" label = \"\\N\" shape = \"circle\" width = \"0.50000\" height = \"0.500000\" color = \"black\"]\n";
-    for( i=0 ; i<size ; ++i )
-    {
-        if(m_status[i])
-        {
-            s<<"\""<<i+1<<"\\n"<<m_lstName[i]<<"\"[style=filled, fillcolor=green];\n";
-            for( j=0 ; j<size ; ++j )
-            {
-                if(m_status[j] && j!=i)
-                {
-                    const unsigned int Index = getIndex(i+1, j+1);
-                    const unsigned int State = m_trfState[Index];
-                    if( State!=STATE_UNDEFINED )
-                    {
-                        const double Weight = m_trfWeight[Index];
-                        if(m_trfTable[Index].isEquivalent(date,time)) s<<"edge [color = \"black\"]\n";
-                        else s<<"edge [color = \"yellow\"]\n";
-                        s<<"\""<<i+1<<"\\n"<<m_lstName[i]<<"\" -> \""<<j+1<<"\\n"<<m_lstName[j]<<"\"";
-                        s<<" [label=\""<<ARL_PLANE_STATE_NAMES[State]<<" Weight="<<Weight<<" "<<m_trfTable[Index].getText()<<"\"];\n";
-                    }
-                }
-            }
-        } else s<<"\""<<i+1<<"\\n"<<m_lstName[i]<<"\"[style=filled, fillcolor=red];\n";
-    }
-    s<<"\n}\n";
-    s.close();
-    return size;
-}
-
-bool arlCore::PlaneSystem::getPlaneID( std::string name, unsigned int &ID ) const
-{
-    unsigned int i;
-    for( i=0 ; i<m_lstName.size() ; ++i )
-        if(m_lstName[i]==name && m_status[i])
-        {
-            ID=i+1;
-            return true;
-        }
-    return false;
-}
-
-bool arlCore::PlaneSystem::getPlaneName( unsigned int ID, std::string &name) const
-{
-    assert(!outOfRange(ID));
-    if(outOfRange(ID)) return false;
-    name = m_lstName[ID-1];
-    return true;
-}
-
-unsigned int arlCore::PlaneSystem::add3DPlane ( const Object &o )
-{   // ID [1,..[
-    return add3DPlane( o.getName() );
-}
-
-unsigned int arlCore::PlaneSystem::add3DPlane ( const std::string &name )
-{   // ID [1,..[
-    const bool FillReleasedPlanes = true;
-    unsigned int plane = 0;
-    Object::update();
-    if(FillReleasedPlanes && m_releasedPlanes.size()>0)
-    {
-        plane = m_releasedPlanes.back();
-        m_releasedPlanes.pop_back();
-        m_lstName[plane-1] = name;
-        m_status[plane-1] = true;
-    }else
-    {
-        m_lstName.push_back(name);
-        m_status.push_back(true);
-        unsigned int i;
-        plane = (unsigned int)m_lstName.size();
-        m_trfTable.resize(plane*plane);
-        for( i=(plane-1)*(plane-1) ; i<m_trfTable.size() ; ++i)
-        {
-            m_trfState.push_back(STATE_UNDEFINED);
-            m_trfWeight.push_back(-1);
-        }
-    }
-    assert(m_trfTable.size()==m_trfState.size());
-    assert(m_trfTable.size()==m_trfWeight.size());
-    return plane;
-}
-
-bool arlCore::PlaneSystem::getPlaneStatus( unsigned int plane ) const
-{
-    if(plane<1 || plane>m_status.size()) return false;
-    return m_status[plane-1];
-}
-
-unsigned int arlCore::PlaneSystem::getNbPlanes( void ) const
-{
-    /*
-    unsigned int i, n=0;
-    for( i=0 ; i<m_status.size() ; ++i )
-        if(m_status[i]) ++n
-    return n;
-    */
-    return (unsigned int)m_lstName.size();
-}
-
-bool arlCore::PlaneSystem::getTrf( unsigned int plane1, unsigned int plane2, vnl_rigid_matrix &T, bool verbose )
-{
-//  verbose = false;
-    // TODO : Manage the cases when there are many paths to reach plane2
-    // TODO : Prendre uniquement le chemin le plus r�cent, le plus court, celui de poids minimum
-    // TODO : Ne pas poursuivre dans les chemins incompatible avec la date
-//  assert(!outOfRange(plane1, plane2));
-    if(outOfRange(plane1, plane2))
-    {
-        T.setIdentity();
-        T.setTime(0, 0);
-        return false;
-    }
-//  Object::update(); // ?
-    const long int Date = 0, Time = 0; // FIXME
-    if(plane1 != plane2)
-    {
-        if(isConnected( plane1, plane2, Date, Time, true, false ))
-        {
-            if(verbose) std::cout<<"From "<<plane1<<" to "<<plane2<<"\n";
-            T = m_trfTable[getIndex(plane1, plane2)];
-            return true;
-        }
-        //std::vector< unsigned int >path;
-        PlaneSystem::Path path(*this);
-        bool b=findPath( plane1, plane2, path, Date, Time );
-        if(b)
-        {
-            if(verbose) path.print();
-            setTrf(path);
-            T = m_trfTable[getIndex(plane1, plane2)];
-        }else
-        {
-            T.setIdentity();
-            T.setTime(0, 0);
-        }
-        untagAll();
-        return b;
-    }
-    T.setIdentity();
-    T.setTime(getDate(), getTime());
-    return true;
-}
-
-bool arlCore::PlaneSystem::getTrf( unsigned int plane1, unsigned int plane2, vnl_rigid_matrix &T, long int date, long int time, double ageTolerance, bool verbose )
-{
-    if(!getTrf(plane1, plane2, T, verbose)) return false;
-    long int d,t;
-    T.getTime(d,t);
-    if(date!=d) return false;
-    return fabs((double)(time-t))<=ageTolerance*10;
-}
-
-bool arlCore::PlaneSystem::getTrf( unsigned int plane1, unsigned int plane2, vnl_rigid_matrix &T, double ageTolerance, bool verbose )
-{
-    if(!getTrf(plane1, plane2, T, verbose)) return false;
-    if(ageTolerance<0.0) return true;
-    long int d,t;
-    T.getTime(d,t);
-    if(d==0 && t==0) return true;
-    if(getDate()!=d) return false;
-    return fabs((double)(getTime()-t))<=ageTolerance*10;
-}
-
-bool arlCore::PlaneSystem::setTrf( unsigned int index, const vnl_rigid_matrix& T, long int date, long int time )
-{
-    const double CALIBRATION_WEIGHT = 1;
-    const double MEASURE_WEIGHT = 5;
-
-    assert( index<m_trfTable.size() );
-    Object::update();
-    m_trfTable[index].copy(T);
-    m_trfTable[index].setTime(date,time);
-    if(date==0 && time==0)
-    {   // TODO : Calculez la transfo inverse lorsque date=0 et time=0 : Validit� permanente
-        m_trfState[index] = STATE_CALIBRATION;
-        m_trfWeight[index] = CALIBRATION_WEIGHT;
-    }else
-    {   // TODO : Calculez la transfo inverse en m�me temps ?
-        m_trfState[index] = STATE_SET;
-        m_trfWeight[index] = MEASURE_WEIGHT;
-    }
-    eraseComputedTrf(index);
-    return true;
-}
-
-bool arlCore::PlaneSystem::setTrf( unsigned int plane1, unsigned int plane2, const vnl_rigid_matrix& T )
-{
-    assert(!outOfRange(plane1, plane2) && plane1!=plane2);
-    if(outOfRange(plane1, plane2) || plane1==plane2) return false;
-    m_trfState[getIndex(plane2, plane1)] = STATE_UNDEFINED;
-    return setTrf(getIndex(plane1, plane2), T, T.getDate(), T.getTime());
-}
-
-bool arlCore::PlaneSystem::setTrf( unsigned int plane1, unsigned int plane2, const vnl_rigid_matrix& T, long int date, long int time )
-{
-    assert(!outOfRange(plane1, plane2) && plane1!=plane2);
-    if(outOfRange(plane1, plane2) || plane1==plane2) return false;
-    m_trfState[getIndex(plane2, plane1)] = STATE_UNDEFINED;
-    return setTrf(getIndex(plane1, plane2), T, date, time);
-}
-
-bool arlCore::PlaneSystem::resetTrf( unsigned int plane1, unsigned int plane2 )
-{
-    assert(!outOfRange(plane1, plane2) && plane1!=plane2);
-    if(outOfRange(plane1, plane2) || plane1==plane2) return false;
-    unsigned int i = getIndex(plane1, plane2);
-    Object::update();
-    m_trfState[i] = STATE_UNDEFINED;
-    m_trfState[getIndex(plane2, plane1)] = STATE_UNDEFINED;
-    eraseComputedTrf(i);
-    return true;
-}
-
-bool arlCore::PlaneSystem::resetTrf( unsigned int plane )
-{
-    assert(!outOfRange(plane));
-    if(outOfRange(plane)) return false;
-    Object::update();
-    unsigned int i;
-    for( i=0 ; i<m_status.size() ; ++i )
-        if(m_status[i])
-        {
-            m_trfState[getIndex(plane,i+1)] = STATE_UNDEFINED;
-            m_trfState[getIndex(i+1,plane)] = STATE_UNDEFINED;
-        }
-    // FIXME eraseComputedTrf(?);
-    return true;
-}
-
-bool arlCore::PlaneSystem::setIdentity ( unsigned int plane1, unsigned int plane2, const long int date, const long int time )
-{
-    if(outOfRange(plane1, plane2) || plane1==plane2) return false;
-    assert(!outOfRange(plane1, plane2) && plane1!=plane2);
-    unsigned int index;
-    vnl_rigid_matrix T;
-    T.setIdentity();
-    T.setTime(date, time);
-    index = getIndex(plane1, plane2);
-    eraseComputedTrf(index);
-    Object::update();
-    m_trfTable[index].copy(T);
-    m_trfState[index] = STATE_IDENTITY;
-    m_trfWeight[index] = 0;
-    index = getIndex(plane2, plane1);
-    m_trfTable[index].copy(T);
-    m_trfState[index] = STATE_IDENTITY;
-    m_trfWeight[index] = 0;
-    return true;
-}
-
-void arlCore::PlaneSystem::eraseComputedTrf( unsigned int index )
-{   //TODO : [Optimisation] Passer � STATE_UNDEFINED uniquement les transfos d�duites de la transfo[index] modifi�e
-    unsigned int i;
-    for( i=0 ; i<m_trfState.size() ; ++i )
-        if(m_trfState[i]==STATE_COMPUTED || m_trfState[i]==STATE_COMPUTED+NBSTATES)
-            m_trfState[i] = STATE_UNDEFINED;
-}
-
-bool arlCore::PlaneSystem::releasePlane( unsigned int plane )
-{
-    if(!resetTrf( plane )) return false;
-    m_status[plane-1]=false;
-    m_releasedPlanes.push_back(plane);
-    return true;
-}
-
-bool arlCore::PlaneSystem::distance( unsigned int plane1, unsigned int plane2, double &dist/*, long int &date, long int &time*/ )
-{
-    dist=0;
-    vnl_rigid_matrix T;
-    if(!getTrf ( plane1, plane2, T/*, date, time*/ )) return false; // FIXME
-    dist=sqrt(T(0,3)*T(0,3)+T(1,3)*T(1,3)+T(2,3)*T(2,3));
-//  date = T.getDate();
-//  time = T.getTime();
-    return true;
-}
-
-bool arlCore::PlaneSystem::chgPlane( unsigned int plane1, Point::csptr pt1, unsigned int plane2, Point::sptr pt2)
-{   // Set pt2 with the coordinates in Plane2 of pt1 set in Plane1
-    arlCore::vnl_rigid_matrix T;
-    if(!getTrf( plane1, plane2, T)) return false;
-    return T.trf(pt1,pt2);
-}
-
-bool arlCore::PlaneSystem::getOrigin( unsigned int plane1, unsigned int plane2, Point::sptr pt)
-{   // Set pt with the origin of Plane1 in the Plane2
-    arlCore::vnl_rigid_matrix T;
-    if(!getTrf( plane1, plane2, T)) return false;
-    arlCore::Point::sptr origin = arlCore::Point::New(0.0, 0.0, 0.0);
-    return T.trf(origin, pt);
-}
-
-// PRIVATE FUNCTIONS
-bool arlCore::PlaneSystem::outOfRange( unsigned int plane1, unsigned int plane2 ) const
-{   // True if plane 1 or 2 is out of range
-    return (outOfRange(plane1) || outOfRange(plane2));
-}
-
-bool arlCore::PlaneSystem::outOfRange( unsigned int planeNo ) const
-{   // ID=[1,n]
-    if(planeNo<1 || planeNo>m_lstName.size()) return true;
-    return !m_status[planeNo-1];
-}
-
-unsigned int arlCore::PlaneSystem::getIndex( unsigned int plane1, unsigned int plane2 ) const
-{   // Organisation concentrique des index :
-    //    |  1  2  3  4 <- plane1
-    //    |===================
-    //  1 | 00 01 04 09 ...
-    //  2 | 03 02 05 10 ...
-    //  3 | 08 07 06 11 ...
-    //  4 | 15 14 13 12 ...
-    //  ^plane2
-    assert(!outOfRange(plane1, plane2));
-    unsigned int index;
-    if(plane2<=plane1)
-        index = (plane1-1)*(plane1-1)+(plane2-1);
-    else
-        index = (plane2*plane2)-plane1;
-    assert(index<m_trfState.size());
-    assert(index==getInvIndex(getInvIndex(index)));
-    return index;
-}
-
-unsigned int arlCore::PlaneSystem::getInvIndex( unsigned int index ) const
-{
-    unsigned int alpha = (unsigned int)sqrt((double)index);
-    ++alpha;
-    const unsigned int Diagonal = alpha*alpha-alpha;
-    return index+2*(Diagonal-index);
-}
-
-void arlCore::PlaneSystem::tag( unsigned int plane1, unsigned int plane2 )
-{
-    assert(!outOfRange(plane1) && !outOfRange(plane2));
-    const unsigned int Index = getIndex(plane1, plane2);
-    if(!isTagged(Index))
-    {
-        //Object::update();
-        m_trfState[Index] = (ARL_PLANE_STATE)(m_trfState[Index] + NBSTATES);
-    }
-    const unsigned int InvIndex = getIndex(plane2, plane1);
-    if(!isTagged(InvIndex))
-    {
-        //Object::update();
-        m_trfState[InvIndex] = (ARL_PLANE_STATE)(m_trfState[InvIndex] + NBSTATES);
-    }
-}
-
-arlCore::PlaneSystem::ARL_PLANE_STATE arlCore::PlaneSystem::getStatus( unsigned int plane1, unsigned int plane2 ) const
-{
-    assert(!outOfRange(plane1) && !outOfRange(plane2));
-    return getStatus( getIndex(plane1, plane2) );
-}
-
-arlCore::PlaneSystem::ARL_PLANE_STATE arlCore::PlaneSystem::getStatus( unsigned int index ) const
-{
-    assert( index<m_trfState.size() );
-    if(!isTagged(index)) return m_trfState[index];
-    return(ARL_PLANE_STATE)(m_trfState[index] - NBSTATES);
-}
-
-void arlCore::PlaneSystem::untag( unsigned int plane1, unsigned int plane2 )
-{
-    assert(!outOfRange(plane1) && !outOfRange(plane2));
-    const unsigned int Index = getIndex(plane1, plane2);
-    if(isTagged(Index))
-    {
-        //Object::update();
-        m_trfState[Index] = (ARL_PLANE_STATE)(m_trfState[Index] - NBSTATES);
-    }
-    const unsigned int InvIndex = getIndex(plane1, plane2);
-    if(isTagged(InvIndex))
-    {
-        //Object::update();
-        m_trfState[InvIndex] = (ARL_PLANE_STATE)(m_trfState[InvIndex] - NBSTATES);
-    }
-}
-
-bool arlCore::PlaneSystem::isTagged( unsigned int index ) const
-{
-    assert( index<m_trfState.size() );
-    return( m_trfState[index]>=NBSTATES );
-}
-
-bool arlCore::PlaneSystem::isTagged( unsigned int plane1, unsigned int plane2 ) const
-{
-    assert(!outOfRange(plane1) && !outOfRange(plane2));
-    return isTagged( getIndex(plane1, plane2) );
-}
-
-void arlCore::PlaneSystem::untagAll( void )
-{
-    unsigned int i;
-    bool b = false;
-    for( i=0 ; i<m_trfState.size() ; ++i )
-        if(m_trfState[i]>=NBSTATES)
-        {
-            b = true;
-            m_trfState[i] = (ARL_PLANE_STATE)(m_trfState[i] - NBSTATES);
-        }
-    //if(b) Object::update();
-}
-
-typedef std::pair<unsigned int, double> PlaneWeight;
-bool sortPlanes(const PlaneWeight& left, const PlaneWeight& right)
-{   // Ordre croissant des poids
-    return left.second < right.second;
-}
-
-bool arlCore::PlaneSystem::findPath( unsigned int plane1, unsigned int plane2, Path &path, long int date, long int time )
-{
-    assert(!outOfRange(plane1) && !outOfRange(plane2));
-    std::vector<PlaneWeight> Who;
-    unsigned int i, n = whoIsConnected(plane1, plane2, Who, date, time, true, true);
-    if(n==0) return false;
-    path.push_back(plane1);
-    for( i=0 ; i<n ; ++i )
-    {
-        if(Who[i].first==plane2)
-        {
-            path.push_back(plane2);
-            return true;
-        }
-        if(findPath(Who[i].first,plane2,path,date,time)) return true;
-    }
-    path.pop_back();
-    return false;
-}
-
-bool arlCore::PlaneSystem::setTrf( const Path &path )
-{
-    unsigned int i, n=path.size();
-    if(n<3) return false;
-//  Object::update();
-    vnl_rigid_matrix T = m_trfTable[getIndex(path[0], path[1])];
-    arlCore::Object O;
-    O.setTime(T.getDate(), T.getTime());
-    double RMSMax = T.getRMS();
-    double stdDevMax = T.getStdDev();
-    for( i=1 ; i<n-/*2*/1 ; ++i )
-    {
-        const vnl_rigid_matrix& M = m_trfTable[getIndex(path[i], path[i+1])];
-        O.setMinTime( M.getDate(), M.getTime() );
-        T.mult(M,T);
-        if(M.getStdDev()>stdDevMax) stdDevMax = M.getStdDev();
-        if(M.getRMS()>RMSMax) RMSMax = M.getRMS();
-    }
-/*  const vnl_rigid_matrix& M = m_trfTable[getIndex(path[n-2], path[n-1])];
-    O.setMinTime( M.getDate(), M.getTime() );
-    T.mult(M,T);
-    if(M.getStdDev()>stdDevMax) stdDevMax = M.getStdDev();
-    if(M.getRMS()>RMSMax) RMSMax = M.getRMS();*/
-    T.setRMS(RMSMax);
-    T.setStdDev(stdDevMax);
-    const unsigned int Index = getIndex(path[0],path[n-1]);
-    m_trfTable[Index].copy(T);
-    m_trfTable[Index].setTime(O.getDate(), O.getTime());
-    m_trfState[Index] = STATE_COMPUTED;
-    m_trfWeight[Index] = path.weight();
-    return true;
-}
-
-unsigned int arlCore::PlaneSystem::whoIsConnected( unsigned int connectedAt, unsigned int finalDestination, std::vector<PlaneWeight> &planes, long int date, long int time, bool SetInv, bool ToTag )
-{
-    assert(!outOfRange(connectedAt, finalDestination));
-    planes.clear();
-/*  if(isConnected(connectedAt, finalDestination, date, time, SetInv, ToTag))
-    {
-        planes.push_back(PlaneWeight(finalDestination, getWeight(connectedAt, finalDestination)));
-        return 1;
-    }*/
-    unsigned int i;
-    bool sort = false;
-    double firstWeight = -1;
-    for( i=1 ; i<=m_status.size() ; ++i )
-        if(/*i!=finalDestination && */m_status[i-1])
-            if(isConnected(connectedAt, i, date, time, SetInv, ToTag))
-            {
-                const double Weight = getWeight(connectedAt, i);
-                planes.push_back(PlaneWeight(i, Weight));
-                if(!sort)
-                {// Sort weights only if it exists at least two different weights
-                    if(firstWeight<0) firstWeight = Weight;
-                    else if(Weight!=firstWeight) sort = true;
-                }
-            }
-    if(sort) std::sort(planes.begin(), planes.end(), sortPlanes);
-    return (unsigned int)planes.size();
-}
-
-bool arlCore::PlaneSystem::isConnected( unsigned int plane1, unsigned int plane2, long int date, long int time, bool SetInv, bool ToTag )
-{
-    assert(!outOfRange(plane1) && !outOfRange(plane2));
-    if(outOfRange(plane1, plane2)) return false;
-    if(plane1==plane2 || isTagged(plane1,plane2) || isTagged(plane2,plane1)) return false;
-    unsigned int index = getIndex(plane1, plane2);
-    if(getStatus(index)!=STATE_UNDEFINED && getStatus(index)!=STATE_COMPUTED/* && m_trfTable[index].isEquivalent(date,time)*/)
-    {
-        if(ToTag) tag(plane1, plane2);
-        return true;
-    }
-    const unsigned int InvIndex = getIndex(plane2, plane1);
-    if(getStatus(InvIndex)!=STATE_UNDEFINED && getStatus(InvIndex)!=STATE_COMPUTED/* && m_trfTable[inv].isEquivalent(date,time)*/)
-    {
-        if(SetInv)
-        {
-//          Object::update();
-            if(m_trfTable[index].invert(m_trfTable[InvIndex]))
-            {
-                m_trfState[index] = getStatus(InvIndex);
-                m_trfWeight[index] = getWeight(InvIndex);
-            }
-        }
-        if(ToTag) tag(plane1,plane2);
-        return true;
-    }
-    return false;
-}
-
-// PATH IN PLANESYSTEM
-arlCore::PlaneSystem::Path::Path( const PlaneSystem& universe ):
-m_universe(universe),
-m_weight(0.0)
-{}
-
-arlCore::PlaneSystem::Path::Path( const Path& p ):
-m_universe(p.m_universe),
-m_weight(p.m_weight)
-{
-    unsigned int i;
-    for( i=0 ; i<m_planes.size() ; ++i )
-        m_planes.push_back(p.m_planes[i]);
-    for( i=0 ; i<m_weights.size() ; ++i )
-        m_weights.push_back(p.m_weights[i]);
-}
-
-arlCore::PlaneSystem::Path::~Path( void )
-{}
-
-unsigned int arlCore::PlaneSystem::Path::operator[]( unsigned int i ) const
-{
-    if( i<m_planes.size() )return m_planes[i];
-    return 0;
-}
-
-void arlCore::PlaneSystem::Path::print( void ) const
-{
-    if(size()>0)
-    {
-        unsigned int i;
-        std::cout<<"From "<<m_planes[0]<<" to "<<m_planes.back()<<"\n";
-        std::cout<<m_planes[0];
-        for( i=1 ; i<m_planes.size() ; ++i )
-            std::cout<<" -> ("<<m_weights[i-1]<<") -> "<<m_planes[i];
-        std::cout<<"\nSize = "<<size()<<" ; Weight = "<<weight()<<"\n";
-    }else std::cout<<"Empty path\n";
-}
-
-unsigned int arlCore::PlaneSystem::Path::size( void ) const
-{
-    return (unsigned int)m_planes.size();
-}
-
-double arlCore::PlaneSystem::Path::weight( void ) const
-{
-    return m_weight;
-}
-
-double arlCore::PlaneSystem::getWeight( unsigned int index ) const
-{
-    assert(index<m_trfWeight.size());
-    return m_trfWeight[index];
-}
-
-double arlCore::PlaneSystem::getWeight( unsigned int plane1, unsigned int plane2 ) const
-{
-    const double DefaultWeight = 1000.0;
-    unsigned int index = getIndex(plane1, plane2);
-    if(getStatus(index)!=STATE_UNDEFINED) return getWeight(index);
-    index = getIndex(plane2, plane1);
-    if(getStatus(index)!=STATE_UNDEFINED) return getWeight(index);
-    return DefaultWeight;
-}
-
-unsigned int arlCore::PlaneSystem::Path::push_back( unsigned int plane )
-{
-    // TODO Calcul Weight de m_planes.back() -> plane dans m_universe
-    m_planes.push_back(plane);
-    if(size()==1) return 1;
-    const unsigned int Previous = m_planes[size()-2];
-    const double Weight = m_universe.getWeight(Previous, plane);
-    m_weights.push_back(Weight);
-    m_weight += Weight;
-    return (unsigned int)m_planes.size();
-}
-
-bool arlCore::PlaneSystem::Path::pop_back( void )
-{
-    if(size()<1) return false;
-    m_planes.pop_back();
-    if(size()>0)
-    {
-        double weight = m_weights.back();
-        m_weights.pop_back();
-        m_weight -= weight;
-    }
-    return true;
-}
-
-// TRANSFORMATION FILTER
-arlCore::TransformationFilter::TransformationFilter( const PlaneSystem& universe, long int duration, ARLCORE_TRF_FILTER_TYPE type ):
-m_universe(universe),
-m_duration(duration*10), //ms
-m_lastTime(0),
-m_filterType(type)
-{}
-
-arlCore::TransformationFilter::TransformationFilter( const TransformationFilter& TF ):
-m_universe(TF.m_universe)
-{
-    unsigned int i;
-    m_lastTime = TF.m_lastTime;
-    m_duration = TF.m_duration;
-    m_filterType = TF.m_filterType;
-    for( i=0 ; i<TF.m_trfList.size() ; ++i )
-        push_back(*TF.m_trfList[i]);
-}
-
-arlCore::TransformationFilter::~TransformationFilter( void )
-{
-    clear();
-}
-
-void arlCore::TransformationFilter::clear( void )
-{
-    unsigned int i;
-    for( i=0 ; i<m_trfList.size() ; ++i )
-        delete(m_trfList[i]);
-    m_trfList.clear();
-    m_lastTime = 0;
-}
-
-void arlCore::TransformationFilter::push_back( const vnl_rigid_matrix& T )
-{   // Verifier continuite & croissance temporelle
-    if(T.getTime()<m_lastTime) clear();
-    m_lastTime = T.getTime();
-    vnl_rigid_matrix* M = new vnl_rigid_matrix(T);
-    m_trfList.push_back(M);
-}
-
-unsigned int arlCore::TransformationFilter::get( arlCore::vnl_rigid_matrix& T )
-{
-    timeCleaning();
-    return filter( m_trfList, m_filterType, T );
-}
-
-void arlCore::TransformationFilter::timeCleaning( bool all )
-{
-    std::vector<const arlCore::vnl_rigid_matrix*>::iterator it=m_trfList.begin();
-//  const long int date = m_universe.getDate();
-    const long int time = m_universe.getTime() - m_duration;
-    while( it!=m_trfList.end() )
-    {
-        if( (*it)->getTime()<time )
-        {
-            delete( *it );
-            m_trfList.erase(it);
-            ++it;
-        }else if(!all) return;
-    }
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Player.cpp b/SrcLib/ARLcore/src/arlcore/Player.cpp
deleted file mode 100644
index 4e628bf..0000000
--- a/SrcLib/ARLcore/src/arlcore/Player.cpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Player.h>
-
-arlCore::Player::Player( void ):
-m_playerDirectory(""),
-m_playerFullName(""),
-m_afterHeader(0),
-m_isReady(false),
-m_eof(false),
-m_loop(false)
-{}
-
-arlCore::Player::~Player( void )
-{
-    m_playerHandle.close();
-}
-
-bool arlCore::Player::readyPlayer( void )
-{
-    return m_isReady;
-}
-
-bool arlCore::Player::getPlayerFilename( std::string &fileName )
-{
-    if(m_isReady) fileName = m_playerFullName;
-    else fileName = "";
-    return m_isReady;
-}
-
-bool arlCore::Player::setLoop( bool loop )
-{
-    m_loop=loop;
-    return m_loop;
-}
-
-bool arlCore::Player::getEOF( void ) const
-{
-    return m_eof;
-}
-
-unsigned int arlCore::Player::initPlayer( const std::string &fileName )
-{
-    m_playerFullName = fileName;
-    m_afterHeader = 0;
-    if(!readHeader(fileName)) return 0;
-    m_afterHeader = m_playerHandle.tellg();
-    unsigned int n = playNext();
-    m_isReady = n>0;
-    m_eof = !m_isReady;
-    return n;
-}
-
-unsigned int arlCore::Player::setEOF( unsigned int n )
-{
-    m_eof = true;
-    return n;
-}
-
-unsigned int arlCore::Player::playEnd( void )
-{
-    unsigned int n = 0;
-    m_eof = !m_loop;
-    if(m_loop)
-    {
-        if(!goAfterHeader()) return 0;
-// ?        n = playNext();
-    }
-    return n;
-}
-
-bool arlCore::Player::goAfterHeader( void )
-{
-    if(m_afterHeader==0) return false;
-    m_playerHandle.clear();
-    m_playerHandle.seekg(0, std::ios::beg);
-    m_playerHandle.seekg(m_afterHeader);
-    return true;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Point.cpp b/SrcLib/ARLcore/src/arlcore/Point.cpp
deleted file mode 100644
index c7dfaa8..0000000
--- a/SrcLib/ARLcore/src/arlcore/Point.cpp
+++ /dev/null
@@ -1,1082 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Point.h>
-
-#include <fstream>
-#include <iomanip>
-#include <vnl/vnl_math.h>
-#include <vnl/vnl_vector_fixed.h>
-#include <vnl/vnl_matrix_fixed.h>
-#include <vnl/vnl_transpose.h>
-#include <vnl/vnl_cross.h>
-#include <vnl/vnl_cross_product_matrix.h>
-
-#include <arlcore/Misc.h>
-#include <arlcore/PointsList.h>
-
-arlCore::Point::Point( unsigned int dim, ARLCORE_POINT_TYPE type, long int date, long int time ):
-m_type(type),
-m_confidence(0),
-m_visibility(true),
-m_status(ARLCORE_POINT_STATUS_UNKNOWN),
-m_scalar(-1.0),
-m_isColored(false),
-m_colour(0,0,0),
-m_ponderation(1.0),
-m_error(-1.0)
-{
-    unsigned int i;
-    setOK(true);
-    //VAG setTime(date,time);
-    m_coordinates.set_size(dim);
-    m_coordinates.fill(0.0);
-    m_stat.resize(size());
-    for( i=0 ; i<size() ; ++i )
-        m_stat[i].fill(0.0);
-    initUncertainty();
-}
-
-arlCore::Point::Point( double x, double y, ARLCORE_POINT_TYPE type, long int date, long int time ):
-//VAG Object(ARLCORE_CLASS_POINT),
-m_type(type),
-m_confidence(0),
-m_visibility(true),
-m_status(ARLCORE_POINT_STATUS_UNKNOWN),
-m_scalar(-1.0),
-m_isColored(false),
-m_colour(0,0,0),
-m_ponderation(1.0),
-m_error(-1.0)
-{
-    unsigned int i;
-    //VAG  setTime(date,time);
-    m_coordinates.set_size(2);
-    m_coordinates.put(0,x);
-    m_coordinates.put(1,y);
-    m_stat.resize(size());
-    for( i=0 ; i<size() ; ++i )
-        m_stat[i].fill(0.0);
-    initUncertainty();
-    setOK(true);
-}
-
-arlCore::Point::Point( double x, double y, double z, ARLCORE_POINT_TYPE type, long int date, long int time ):
-//Object(ARLCORE_CLASS_POINT),
-m_type(type),
-m_confidence(0),
-m_visibility(true),
-m_status(ARLCORE_POINT_STATUS_UNKNOWN),
-m_scalar(-1.0),
-m_isColored(false),
-m_colour(0,0,0),
-m_ponderation(1.0),
-m_error(-1.0)
-{
-    unsigned int i;
-    //VAG setTime(date,time);
-    m_coordinates.set_size(3);
-    m_coordinates.put(0,x);
-    m_coordinates.put(1,y);
-    m_coordinates.put(2,z);
-    m_stat.resize(size());
-    for( i=0 ; i<size() ; ++i )
-        m_stat[i].fill(0.0);
-    initUncertainty();
-    setOK(true);
-}
-
-void arlCore::Point::init( unsigned int dim )
-{
-    modified();
-    unsigned int i;
-    //VAG setTime(date,time);
-    m_type=ARLCORE_POINT_TYPE_UNKNOWN;
-    m_confidence=0;
-    m_visibility=true;
-    m_status=ARLCORE_POINT_STATUS_UNKNOWN;
-    m_isColored=false;
-    m_colour.setColour(0,0,0);
-    m_scalar=-1.0;
-    m_coordinates.set_size(dim);
-    m_coordinates.fill(0.0);
-    m_covMatrix.set_size(dim,dim);
-    m_covMatrix.fill(0.0);
-    m_ponderation=1.0;
-    m_stat.resize(size());
-    for( i=0 ; i<size() ; ++i )
-        m_stat[i].fill(0.0);
-    m_error=-1.0;
-}
-
-
-arlCore::Point::sptr arlCore::Point::PointFactory( int dim )
-{
-    arlCore::Point::sptr point =::arlCore::Point::sptr( new Point( dim ) );
-    return point;
-}
-
-
-
-arlCore::Point::sptr arlCore::Point::PointFactory( arlCore::Point::csptr p )
-{
-    arlCore::Point::sptr point = ::arlCore::Point::sptr( new Point() );
-    point->copy(p);
-    return point;
-}
-
-
-arlCore::Point::sptr arlCore::Point::PointFactory( double x, double y )
-{
-    arlCore::Point::sptr point = ::arlCore::Point::sptr( new Point(x,y) );
-    return point;
-}
-
-
-
-arlCore::Point::sptr arlCore::Point::PointFactory( double x, double y, double z )
-{
-    arlCore::Point::sptr point = ::arlCore::Point::sptr( new Point(x,y,z) );
-    return point;
-}
-
-arlCore::Point::Point( arlCore::Point::csptr  p )
-// :VAG Object(ARLCORE_CLASS_POINT)
-{
-    copy(p);
-}
-
-arlCore::Point& arlCore::Point::operator=(arlCore::Point::csptr  p)
-{
-    copy(p);
-    return *this;
-}
-
-void arlCore::Point::copy(arlCore::Point::csptr  p)
-{
-    if( this== p.get() ) return;
-    //VAG arlCore::Object *a=this;
-    //VAG const arlCore::Object *b=&p;
-    //VAG *a = *b;
-    //VAGFIXME : copy helper of fwtools::Object:...Copy ?
-    unsigned int i,j,dim=p->size();
-    m_type = p->m_type;
-    m_confidence = p->m_confidence;
-    m_visibility = p->m_visibility;
-    m_status = p->m_status;
-    m_isColored = p->m_isColored;
-    m_colour = p->m_colour;
-    m_scalar = p->m_scalar;
-    m_ponderation = p->m_ponderation;
-    m_stat = p->m_stat;
-    m_error = p->m_error;
-    m_coordinates.set_size(dim);
-    m_stat.resize(size());
-    for( i=0 ; i<size() ; ++i )
-    {
-        m_coordinates.put(i,p->m_coordinates.get(i));
-        m_stat[i].fill(0.0);
-    }
-    m_covMatrix.set_size(dim,dim);
-    for( i=0 ; i<size() ; ++i)
-        for( j=0 ; j<size() ; ++j)
-            m_covMatrix.put(i,j,p->m_covMatrix.get(i,j));
-    modified();
-    return;
-}
-
-arlCore::Point::~Point( void )
-{}
-
-
-bool arlCore::Point::setOK( bool b )
-{
-    if(b!=m_ok)
-    {
-        m_ok = b;
-        modified();
-    }
-    return m_ok;
-}
-
-bool arlCore::Point::isOK( void ) const
-{
-    return m_ok;
-}
-
-
-
-
-
-std::string arlCore::Point::getString( void ) const
-{
-    std::string t;
-    switch(m_type)
-    {
-    case ARLCORE_POINT_TYPE_UNKNOWN : t="UNKNOWN";break;
-    case ARLCORE_POINT_TYPE_ARTK : t="ARTK";break;
-    case ARLCORE_POINT_TYPE_MRO : t="MRO";break;
-    case ARLCORE_POINT_TYPE_CHESS : t="CHESS";break;
-    case ARLCORE_POINT_TYPE_ROI : t="ROI";break;
-    case ARLCORE_POINT_TYPE_CLOUD : t="CLOUD";break;
-    case ARLCORE_POINT_TYPE_TIP : t="TIP";break;
-    case ARLCORE_POINT_TYPE_LINE : t="LINE";break;
-    case ARLCORE_POINT_TYPE_SIFT : t="SIFT";break;
-    default: break;
-    }
-    unsigned int i;
-    std::stringstream s;
-    s<<std::fixed<<std::setprecision(2);
-    for( i=0 ; i<size() ; ++i )
-        s<<get(i)<<" ";
-    if(m_visibility) s<<"Visible";
-    else s<<"Unvisible";
-    s<<" "<<t<<" Conf.="<<m_confidence;
-    if(m_isColored) s<<" colour("<<m_colour.getString()<<")";
-    else s<<" No colour";
-    if(m_scalar>0) s<<" scalar="<<m_scalar<<"mm";
-    switch(m_status)
-    {
-    case ARLCORE_POINT_STATUS_UNKNOWN : s<<" (Unknown)";break;
-    case ARLCORE_POINT_STATUS_DETECTED : s<<" (Detected)";break;
-    case ARLCORE_POINT_STATUS_SUBPIXEL : s<<" (Subpixel)";break;
-    case ARLCORE_POINT_STATUS_ESTIMATE : s<<" (Estimate)";break;
-    case ARLCORE_POINT_STATUS_CLOUD : s<<" (Cloud)";break;
-    case ARLCORE_POINT_REPROJECTION : s<<" (Reproj)";break;
-    default: break;
-    }
-    s<<" Error="<<m_error<<"\n";
-    //TODO Display m_covMatrix
-    return s.str();
-}
-
-bool arlCore::Point::save( const std::string &fileName, bool overwrite ) const
-{
-    if(!isOK()) return false;
-    std::fstream f;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    f.open(fileName.c_str(), std::fstream::out);
-    if(f.is_open()) f<<"Dimension "<<size()<<"\n";
-    bool b=save(f);
-    f.close();
-    f.flush();
-    return b;
-}
-
-bool arlCore::Point::save( std::fstream &f, unsigned int cam, SPTR(void) tag, int fringe ) const
-{
-    f<<"Dimension "<<size()<<"\n";
-    return save( f, true, cam, tag, fringe, 0 , ARLCORE_POINT_SAVE_FULL );
-}
-
-bool arlCore::Point::save( std::fstream &f, unsigned int no, ARLCORE_POINT_SAVE_TYPE type ) const
-{
-    return save( f, false, 0, SPTR(void)(), 0 , no, type );
-}
-
-bool arlCore::Point::save( std::fstream &f, bool ctf, unsigned int cam,  SPTR(void) tag, int fringe, unsigned no, ARLCORE_POINT_SAVE_TYPE type ) const
-{
-    if(!f.is_open()) return false;
-    unsigned int i,j,dim=size();
-    if(type==ARLCORE_POINT_SAVE_FULL)
-    {
-        if(ctf)
-        {
-            f<<"Camera "<<cam;
-            f<<"\nTag "<<tag;
-            f<<"\nFringe "<<fringe;
-        }
-        else f<<"Numero "<<no<<"";
-        f<<"\nVisibility "<<m_visibility;
-        //f<<"Status "<<""; //TODO
-        f<<"\nScalar "<<m_scalar;
-        f<<"\nConfidence "<<m_confidence;
-        f<<"\nError "<<m_error;
-        if(m_isColored)
-        {
-            unsigned int R,G,B;
-            m_colour.getColour(R,G,B);
-            f<<"\nColour "<<R<<" "<<G<<" "<<B;
-        }
-        f<<"\nCoordinates\n";
-        for( i=0 ; i<dim ; ++i )
-            f<<get(i)<<"\t";
-        f<<"\nUncertainty\n";
-        for( i=0 ; i<dim ; ++i )
-        {
-            for( j=0 ; j<dim ; ++j )
-                f<<m_covMatrix.get(i,j)<<"\t";
-            f<<"\n";
-        }
-        f<<"End\n";
-    }else
-    {
-        if(type==ARLCORE_POINT_SAVE_FULL ||type==ARLCORE_POINT_SAVE_LIGHT)
-            f<<"Numero "<<no<<" Coordinates ";
-        if(type==ARLCORE_POINT_SAVE_VTK)
-            for( i=0 ; i<3 ; ++i )
-                if(i<dim) f<<get(i)<<" "; else f<<"0.0 ";
-        else
-            for( i=0 ; i<dim ; ++i )
-                f<<get(i)<<" ";
-        if(type==ARLCORE_POINT_SAVE_FULL ||type==ARLCORE_POINT_SAVE_LIGHT)
-            f<<"End";
-        f<<"\n";
-    }
-    f.flush();
-    return true;
-}
-
-bool arlCore::Point::load( const std::string &fileName )
-{
-    if(fileName=="") return false;
-    std::ifstream f;
-    f.open (fileName.c_str(), std::fstream::in);
-    int no;
-    bool b=load(f,no);
-    f.close();
-    return b;
-}
-
-bool arlCore::Point::load( std::ifstream &f, int &no, unsigned int dim )
-{
-    unsigned int cam;
-    SPTR(void) tag;
-    int fringe;
-    return load( f, cam, tag, fringe, no, dim );
-}
-
-bool arlCore::Point::load( std::ifstream &f, unsigned int &cam, SPTR(void) tag, int &fringe )
-{
-    int no;
-    return load( f, cam, tag, fringe, no );
-}
-
-bool arlCore::Point::load( std::ifstream &f, unsigned int &cam, SPTR(void) tag, int &fringe, int &no, unsigned int dim )
-{
-    modified();
-    setOK(false);
-    if(!f.is_open()) return false;
-    init(dim);
-    no=-1;
-    unsigned int i,j;
-    std::string token,text;
-    double val; //,version;
-    bool b=false;
-    do
-    {
-        f>>token;
-        //if(token=="Version") f>>version;
-        if(token=="Visibility") f>>m_visibility;
-        //if(token=="Status") f>>""; //TODO
-        if(token=="Radius") f>>m_scalar; // Deprecated
-        if(token=="Scalar") f>>m_scalar;
-        if(token=="Confidence") f>>m_confidence;
-        if(token=="Error") f>>m_error;
-        if(token=="Numero") f>>no;
-        if(token=="Camera") f>>cam;
-        assert(false); // if(token=="Tag") f>> tag.get(); VAG serialisation of a pointer addr !!!!
-        if(token=="Fringe") f>>fringe;
-        if(token=="Name")
-        {
-            f>>text;
-            setName(text);
-        }
-        if(token=="Dimension")
-        {
-            if(dim>0) f>>i;
-            else
-            {
-                f>>dim;
-                m_coordinates.set_size(dim);
-                m_stat.resize(size());
-                for( i=0 ; i<size() ; ++i )
-                    m_stat[i].fill(0.0);
-                m_coordinates.fill(0.0);
-                m_covMatrix.set_size(dim,dim);
-                m_covMatrix.fill(0.0);
-            }
-        }
-        if(token=="Colour")
-        {
-            unsigned int R,G,B;
-            f>>R>>G>>B;
-            m_colour.setColour(R,G,B);
-            m_isColored=true;
-        }
-        if(token=="Coordinates" && dim>0)
-        {
-            for( i=0 ; i<dim ; ++i )
-            {
-                f>>val;
-                m_coordinates.put(i,val);
-            }
-            b=true;
-        }
-        if(token=="Uncertainty" && dim>0)
-        {
-            for( i=0 ; i<dim ; ++i )
-                for( j=0 ; j<dim ; ++j )
-                {
-                    f>>val;
-                    m_covMatrix.put(i,j,val);
-                }
-        }
-    }while(!f.eof() && token!="End");
-    setOK(b);
-    return b;
-}
-
-vnl_vector<double> arlCore::Point::getCoordinates() const
-{   //
-    return m_coordinates*m_ponderation;
-}
-
-vnl_vector<double> arlCore::Point::getHCoordinates() const
-{
-    unsigned int size = m_coordinates.size();
-    vnl_vector<double> homogene(size+1);
-    homogene.update(m_coordinates*m_ponderation);
-    homogene.put(size,1.0);
-    return homogene;
-}
-
-arlCore::vnl_covariance_matrix& arlCore::Point::getCovMatrix()
-{
-    modified(); //?
-    return m_covMatrix;
-}
-
-const arlCore::vnl_covariance_matrix& arlCore::Point::getCovMatrix() const
-{
-    return m_covMatrix;
-}
-
-bool arlCore::Point::isVisible() const
-{
-    return m_visibility;
-}
-
-bool arlCore::Point::getVisible() const
-{
-    return m_visibility;
-}
-
-bool arlCore::Point::setVisible(bool b)
-{
-    if(m_visibility!=b)
-    {
-        modified();
-        m_visibility=b;
-    }
-    return m_visibility;
-}
-
-arlCore::Point::ARLCORE_POINT_STATUS arlCore::Point::getStatus() const
-{
-    return m_status;
-}
-
-bool arlCore::Point::setStatus(ARLCORE_POINT_STATUS status)
-{
-    if(m_status!=status)
-    {
-        modified();
-        m_status=status;
-    }
-    return true;
-}
-
-bool arlCore::Point::setColour(unsigned int R, unsigned int G, unsigned int B)
-{
-    modified();
-    m_isColored=true;
-    m_colour.setColour(R,G,B);
-    return true;
-}
-
-bool arlCore::Point::setColour(const Colour &c)
-{
-    modified();
-    m_isColored=true;
-    m_colour.setColour(c);
-    return true;
-}
-
-bool arlCore::Point::getColour(unsigned int &R, unsigned int &G, unsigned int &B) const
-{
-    m_colour.getColour(R,G,B);
-    return m_isColored;
-}
-
-const arlCore::Colour & arlCore::Point::getColour( void ) const
-{
-    return m_colour;
-}
-
-bool arlCore::Point::isColored() const
-{
-    return m_isColored;
-}
-
-bool arlCore::Point::initUncertainty( void )
-{
-    unsigned int dim = size();
-    modified();
-    m_covMatrix.set_size(dim,dim);
-    m_covMatrix.fill(0.0);
-    return true;
-}
-
-double arlCore::Point::operator[]( unsigned int i ) const
-{
-    assert(i<size());
-    if(i<size()) return get(i);
-    else return 0.0;
-}
-
-/*double& arlCore::Point::operator []( unsigned int i )
-{
-    if(i<size()) return m_coordinates[i]*m_ponderation;
-    else throw(-1);
-}*/
-
-double arlCore::Point::get( unsigned int i ) const
-{
-    assert(i<size());
-    if(i<size()) return m_coordinates.get(i)*m_ponderation;
-    else return 0.0;
-}
-
-bool arlCore::Point::set( unsigned int i, double a )
-{
-    assert(i<size());
-    if(i>=size()) return false;
-    modified();
-    m_coordinates.put(i,a/m_ponderation); // FIXME
-    return true;
-}
-
-bool arlCore::Point::set( arlCore::Point::csptr  p )
-{
-    assert(p->size()==size());
-    if(p->size()!=size()) return false;
-    unsigned int i;
-    modified();
-    m_ponderation=1.0;
-    for( i=0 ; i<size() ; ++i )
-    {
-        m_coordinates.put(i,p->get(i));
-        m_stat[i].fill(0.0);
-    }
-    return true;
-}
-
-void arlCore::Point::fill( double a )
-{
-    unsigned int i;
-    modified();
-    m_coordinates.fill(a);
-//  for( i=0 ; i<m_coordinates.size() ; ++i )
-//      m_coordinates.put(i,a);
-    m_ponderation=1.0;
-    for( i=0 ; i<size() ; ++i )
-        m_stat[i].fill(0.0);
-}
-
-bool arlCore::Point::pond( arlCore::Point::csptr  p )
-{
-    if(p->size()!=size()) return false;
-    unsigned int i;
-    modified();
-    for( i=0 ; i<size() ; ++i )
-    {
-        m_coordinates.put(i,m_coordinates.get(i)+p->get(i));
-        arlCore::addValue(m_stat[i], p->get(i));
-    }
-    m_ponderation /= 1.0 + m_ponderation;
-    return true;
-}
-
-const std::vector< vnl_vector_fixed<double,5> >& arlCore::Point::getStatistic( void )
-{
-    return m_stat;
-}
-
-bool arlCore::Point::add( arlCore::Point::csptr  p )
-{
-    assert(p->size()==size());
-    if(p->size()!=size()) return false;
-    unsigned int i;
-    modified();
-    for( i=0 ; i<size() ; ++i )
-    {
-        m_coordinates.put(i,get(i)+p->get(i));
-        m_stat[i].fill(0.0);
-    }
-    m_ponderation = 1.0;
-    return true;
-}
-
-double arlCore::Point::x( void ) const
-{
-    assert(this->size()>0);
-    return get(0);
-}
-
-double arlCore::Point::y( void ) const
-{
-    assert(this->size()>1);
-    return get(1);
-}
-
-double arlCore::Point::z( void ) const
-{
-    assert(this->size()>2);
-    return get(2);
-}
-
-bool arlCore::Point::x( double a )
-{
-    assert(this->size()>0);
-    return set(0,a/m_ponderation); // FIXME
-}
-
-bool arlCore::Point::y( double a )
-{
-    assert(this->size()>1);
-    return set(1,a/m_ponderation); // FIXME
-}
-
-bool arlCore::Point::z( double a )
-{
-    assert(this->size()>2);
-    return set(2,a/m_ponderation); // FIXME
-}
-
-void arlCore::Point::normalize( void )
-{
-    unsigned int i;
-    Point::sptr Origin = Point::New(size());
-    const double Norm = distance(Origin);
-    for( i=0 ; i<size() ; ++i )
-    {
-        m_coordinates.put(i,get(i)/Norm);
-        m_stat[i].fill(0.0);
-    }
-    m_ponderation = 1.0;
-    modified();
-}
-
-unsigned int arlCore::Point::size( void ) const
-{
-    return m_coordinates.size();
-}
-
-arlCore::Point::ARLCORE_POINT_TYPE arlCore::Point::getType( void ) const
-{
-    return m_type;
-}
-
-bool arlCore::Point::setType( ARLCORE_POINT_TYPE type )
-{
-    if(type<ARLCORE_POINT_NBTYPES)
-    {
-        modified();
-        m_type=type;
-    }
-    return (type<ARLCORE_POINT_NBTYPES);
-}
-
-double arlCore::Point::getScalar( void ) const
-{
-    return m_scalar;
-}
-
-void arlCore::Point::setScalar( double scalar )
-{
-    modified();
-    m_scalar=scalar;
-}
-
-bool arlCore::Point::addGaussianNoise( const unsigned int index, const double std )
-{
-    if(index>=size()) return false;
-    set(index, get(index) + arlRandom::Random::gaussianRnd(std));
-    return true;
-}
-
-bool arlCore::Point::addGaussianNoise( const double std )
-{
-    unsigned int i;
-    for( i=0 ; i<size() ; ++i )
-        set(i, get(i) + arlRandom::Random::gaussianRnd(std));
-    return true;
-}
-
-void arlCore::Point::addUniformNoise( const unsigned int index, const double range )
-{
-    set(index, get(index)+arlRandom::Random::uniformDoubleRnd(-range, range));
-}
-/*
-void arlCore::Point::cubicRandom( const double side )
-{
-    unsigned int i;
-    for( i=0 ; i<size() ; ++i )
-        set(i, get(i)+arlRandom::Random::uniformDoubleRnd(-side/2,side/2));
-}
-
-void arlCore::Point::sphericRandom( const double radius )
-{
-    unsigned int i;
-    vnl_vector<double> vec(size());
-    do
-    {
-        for ( i=0 ; i<size() ; i++)
-            vec[i] = arlRandom::Random::uniformDoubleRnd(-1.0,1.0);
-    }while(vec.two_norm()>1.0);
-    for( i=0 ; i<size() ; ++i )
-        set(i, get(i)+vec[i]*radius);
-}*/
-
-bool arlCore::Point::shapeRandom( arlCore::ARLCORE_SHAPE type, const double size, const double angle )
-{
-    const unsigned int Dim = this->size();
-    vnl_vector<double> vec(Dim);
-    unsigned int i;
-    double a, theta, phi, fi_max;
-    switch(type)
-    {
-    case arlCore::ARLCORE_SHAPE_CUBE : // Size is the side of cube
-        for( i=0 ; i<Dim ; ++i )
-            set(i, get(i)+arlRandom::Random::uniformDoubleRnd(-size/2,size/2));
-        return true;
-    case arlCore::ARLCORE_SHAPE_SPHERE : // Size is the diameter
-        if(this->size()!=Dim) return false;
-        do
-        {
-            for ( i=0 ; i<Dim ; i++)
-                vec[i] = arlRandom::Random::uniformDoubleRnd(-1.0,1.0);
-        }while(vec.two_norm()>1.0);
-        for( i=0 ; i<Dim ; ++i )
-            set(i, get(i)+vec[i]*size/2);
-        return true;
-    case arlCore::ARLCORE_SHAPE_SPHERESURFACE :
-        if(this->size()!=Dim) return false;
-        theta = arlRandom::Random::uniformDoubleRnd(0,2*vnl_math::pi);
-        phi   = arlRandom::Random::uniformDoubleRnd(0, vnl_math::pi);
-        set(0, get(0) + size/2*sin(phi)*cos(theta) );
-        set(1, get(1) + size/2*sin(phi)*sin(theta) );
-        set(2, get(2) + size/2*cos(phi));
-        return true;
-    case arlCore::ARLCORE_SHAPE_SPHERE_CAP :
-        if(this->size()!=Dim) return false;
-        fi_max = acos(1-angle/2/vnl_math::pi);
-        theta = arlRandom::Random::uniformDoubleRnd(0,2*vnl_math::pi);
-        do
-        {
-            phi = arlRandom::Random::uniformDoubleRnd( 0, vnl_math::pi );
-        }while( phi > fi_max );
-        set(0, get(0) + size/2*sin(phi)*cos(theta) );
-        set(1, get(1) + size/2*sin(phi)*sin(theta) );
-        set(2, get(2) + size/2*cos(phi));
-        return true;
-    case arlCore::ARLCORE_SHAPE_DISC :
-        vec[Dim-1]=0.0;
-        do //le point tire appartient au plan xOy i.e. point.z() = 0.O
-        { //on ne boucle pas sur la derniere coordonnee
-            for ( i=0 ; i<Dim-1 ; i++)
-                vec[i] = arlRandom::Random::uniformDoubleRnd(-1.0,1.0);
-        }while(vec.two_norm()>1.0);
-        for( i=0 ; i<Dim ; ++i )
-            set(i, get(i)+vec[i]*size/2);
-        return true;
-    case arlCore::ARLCORE_SHAPE_PLAINSQUARE :
-        for( i=0 ; i<Dim-1 ; ++i )
-            set(i, get(i)+arlRandom::Random::uniformDoubleRnd(-size/2,size/2));
-        set(i, get(i) );
-        return true;
-    case arlCore::ARLCORE_SHAPE_CIRCLE :
-        if( Dim!=3 ) return false;
-        a = arlRandom::Random::uniformDoubleRnd(-vnl_math::pi,vnl_math::pi);
-        set(0, get(0) + cos(a)*size/2 );
-        set(1, get(1) + sin(a)*size/2 );
-        set(2, get(2));
-        return true;
-    case arlCore::ARLCORE_SHAPE_EDGESQUARE :
-        if( Dim!=3 ) return false;
-        for ( i=0 ; i<Dim ; i++)
-            vec[i] = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-        if(vec[1]<0.0) a=-1; else a=1;
-        if(vec[2] < 0.0)
-        {
-            set(0, get(0) + a*size/2 );
-            set(1, get(1) + vec[0] );
-        }
-        else
-        {
-            set(0, get(0) + vec[0] );
-            set(1, get(1) + a*size/2 );
-        }
-        set(2, get(2));
-        return true;
-    case arlCore::ARLCORE_SHAPE_SOLIDANGLE :
-        if( Dim!=3 ) return false;
-        double x,y,z,r;
-        double phi_max;
-        phi_max = acos(1.0-angle/2.0/vnl_math::pi);
-        do
-        {
-            x = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-            y = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-            z = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-            r = sqrt(x*x + y*y + z*z);
-            phi = acos(z/r);
-        }while( r>size/2 || phi > phi_max );
-        set(0, get(0) + x);
-        set(1, get(1) + y);
-        set(2, get(2) + z);
-        return true;
-    case arlCore::ARLCORE_SHAPE_SOLIDANGLE_SURFACE :
-        if( Dim!=3 ) return false;
-        fi_max = acos(1.0-angle/2.0/vnl_math::pi);
-        double xx,yy,zz,rr,fi;
-        do
-        {
-            xx = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-            yy = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-            zz = arlRandom::Random::uniformDoubleRnd(-size/2,size/2);
-
-            rr = sqrt(xx*xx + yy*yy + zz*zz);
-            fi = acos(zz/rr);
-        }while( rr>size/2 || fi > fi_max || fi < (fi_max - 0.01 ) );
-        set(0, get(0) + xx);
-        set(1, get(1) + yy);
-        set(2, get(2) + zz);
-        return true;
-    default: break;
-    }
-    return false;
-}
-
-double arlCore::Point::distance(arlCore::Point::csptr pt) const
-{   // Calcule la distance sur les dimensions communes
-    return ( sqrt(this->distance2(pt) ) );
-}
-
-double arlCore::Point::distance2(arlCore::Point::csptr pt) const
-{
-    unsigned int i,dim=size();
-    if(dim<pt->size()) dim=pt->size();
-    double dist = 0;
-    for(i=0 ; i<dim ; ++i)
-        dist += ((*this)[i]-(*pt)[i])*((*this)[i]-(*pt)[i]);
-    assert(dist>=0);
-    return (dist);
-}
-
-bool arlCore::Point::mult( double scalaire )
-{
-    modified();
-    m_coordinates *= scalaire;
-    return true;
-}
-
-bool arlCore::Point::cross_3D(arlCore::Point::csptr vec1, arlCore::Point::csptr vec2 )
-{
-    unsigned int i,j;
-    assert(this->size()==3 && vec1->size()==3 && vec2->size()==3);
-    vnl_vector_fixed<double,3> vnl_vec1((*vec1)[0], (*vec1)[1],(*vec1)[2]), vnl_vec2((*vec2)[0], (*vec2)[1],(*vec2)[2]), cross_prod;
-    vnl_matrix_fixed<double,3,3> Sx, Sy, res;
-    cross_prod = vnl_cross_3d(vnl_vec1, vnl_vec2);
-    for(i=0;i<3;i++)
-        this->set(i,cross_prod(i));
-    Sx = vnl_cross_product_matrix(vnl_vec1);
-    Sy = vnl_cross_product_matrix(vnl_vec2);
-    res = Sy * vec1->getCovMatrix() * vnl_transpose(Sy) + Sx * vec2->getCovMatrix() * vnl_transpose(Sx);
-    for(i=0;i<3;i++)
-        for(j=0;j<3;j++)
-            m_covMatrix.put(i, j, res(i,j) );
-    return true;
-}
-
-bool arlCore::Point::dotProduct(arlCore::Point::csptr  vec1, arlCore::Point::csptr  vec2)
-{
-    assert(this->size()==1);
-    assert(vec1->size()== vec2->size());
-    vnl_matrix<double> vnl_vec1(vec1->size(),1), vnl_vec2(vec1->size(),1);
-    vnl_matrix<double> res(1,1);
-    double dot = 0;
-    unsigned int i;
-    for( i=0 ; i<vec1->size( ); i++ )
-    {
-        dot+=(*vec1)[i]*(*vec2)[i];
-        vnl_vec1[i][0] = (*vec1)[i];
-        vnl_vec2[i][0] = (*vec2)[i];
-    }
-    this->set(0, dot);
-    res  = vnl_transpose(vnl_vec2) * vec1->getCovMatrix() * vnl_vec2
-         + vnl_transpose(vnl_vec1) * vec2->getCovMatrix() * vnl_vec1;
-    m_covMatrix.put(0, 0, res(0,0));
-    return true;
-}
-
-bool arlCore::Point::divide(arlCore::Point::csptr  var1, arlCore::Point::csptr  var2)
-{
-    assert(this->size()==1 && var1->size() ==1 && var2->size() ==1);
-    vnl_matrix<double> res(1,1);
-    //res = [1/y -x/y^2] * [sigma_x^2        0 ] * [  1/y ] = sigma_x^2 / y^2 + x^2/y^4 *sigma_y^2
-    //                     [0         sigma_y^2]   [-x/y^2]
-    res  = var1->getCovMatrix() / ((*var2)[0] * (*var2)[0]) +  var2->getCovMatrix()*((*var1)[0] * (*var1)[0])/((*var2)[0] * (*var2)[0]* (*var2)[0]* (*var2)[0]);
-    m_covMatrix.put(0, 0, res(0,0));
-    this->set(0, (*var1)[0]/(*var2)[0]);
-    return true;
-}
-
-bool arlCore::Point::multiply(arlCore::Point::csptr  scalar, arlCore::Point::csptr  vec)
-{
-    assert( this->size()== vec->size() );
-    assert( scalar->size()==1 );
-    vnl_matrix<double> res(vec->size(),vec->size()), jacobien(vec->size(),vec->size()+1), sigma(vec->size()+1,vec->size()+1);
-    unsigned int i,j;
-    for( i=0 ; i<vec->size() ; ++i )
-        this->set(i, (*scalar)[0] * (*vec)[i]);
-    sigma.fill(0);
-    sigma[0][0] = scalar->getCovMatrix()[0][0];
-    for( i=1 ; i<vec->size()+1 ; ++i )
-        for( j=1 ; j<vec->size()+1 ; ++j )
-        sigma[i][j] =  vec->getCovMatrix()[i-1][j-1];
-    //std::cerr<< "MATRIX\n"<<sigma;
-    jacobien.fill(0);
-    for( i=0 ; i<vec->size() ; ++i )
-        jacobien[i][0] = (*vec)[i];
-    for( i=0 ; i<vec->size() ; ++i )
-        jacobien[i][i+1] = (*scalar)[0];
-    //std::cerr<< "jacobien\n"<<jacobien;
-    res = jacobien * sigma * vnl_transpose(jacobien);
-    for( i=0 ; i<vec->size() ; ++i )
-        for( j=0 ; j<vec->size() ; ++j )
-            m_covMatrix.put(i, j, res(i,j));
-    return true;
-}
-
-void arlCore::Point::setError( double error )
-{
-    m_error = error;
-}
-
-double arlCore::Point::getError( void ) const
-{
-    return m_error;
-}
-
-// FONCTIONS DIVERSES : A TRIER
-/*unsigned int arlCore::load(PointsCont &list, const char *fileName, arlCore::Point::ARLCORE_POINT_TYPE type, long int date)
-{
-    unsigned int i, j, nbPoints = 0, serie=0, dim=0;
-    int n;
-    double a;
-    list.clear();
-    std::ifstream pFile(fileName);
-    std::string s;
-    if( pFile != 0 )
-    {
-        std::getline (pFile, s);
-        n = sscanf(s.c_str(),"%dDPoints\n",&dim);
-        while(!pFile.eof() && dim>0 && n==1)
-        {
-            std::getline (pFile, s);
-            n = sscanf(s.c_str(),"%d Points Serie %d\n",&nbPoints,&serie);
-            Point point(dim, type);
-            //TODO Lire tous les autres de la meme serie et moyenner
-            for( i=0 ; i<nbPoints && n==2 ; ++i )
-            {
-                for( j=0 ; j<dim ; ++j )
-                {
-                    pFile >> a;
-                    point.set(j,a);
-                }
-                point.setTime(serie,date);
-                list.push_back(point);
-            }
-            std::getline (pFile, s);
-        }
-        pFile.close();
-    }
-    return nbPoints;
-}
-*/
-double arlCore::distance( arlCore::Point::csptr pt1, arlCore::Point::csptr pt2)
-{
-    return pt1->distance(pt2);
-}
-
-double arlCore::surface( const std::vector< arlCore::Point::csptr >& ptList )
-{
-    //TODO : The next calculus is incorrect
-    // It's the sum of distances between all points
-    unsigned int i,j;
-    double s=0;
-    for( i=0 ; i<ptList.size() ; ++i )
-        for( j=i+1 ; j<ptList.size() ; ++j )
-            if(ptList[i]!=0 && ptList[j]!=0)
-                s+=ptList[i]->distance( ptList[j] );
-    return s;
-}
-
-unsigned int arlCore::closestY( const std::vector< arlCore::Point::csptr >&l, double y, unsigned int i1, unsigned int i2, int indexInit )
-{   // Si l est tri� par y croissant
-    const bool Verbose = false;
-/*#ifdef _DEBUG
-//  arlCore::save(l,"c:/ccc.txt",arlCore::ARLCORE_POINT_SAVE_GNUPLOT);
-    const bool lPasTrieCroissant = false;
-    const bool y_de_l_pas_continue_dans_Z = false;
-    unsigned int i;
-    double y0 = -99999999.99;
-    for( i=0 ; i<l.size() ; ++i )
-    {
-        // Verification de la croissance
-        if(l[i]->y()<y0) assert( lPasTrieCroissant );
-        // Verification de la continuite
-        if(i>0 && l[i]->y()!=y0+1)
-        {
-            std::cout<<"Discontinuite de l : "<<y0<<" - "<<l[i]->y()<<"\n";
-//          assert( y_de_l_pas_continue_dans_Z );
-        }
-        y0 = l[i]->y();
-    }
-#endif // _DEBUG*/
-    assert(l.size()>0);
-    if(Verbose) std::cout<<"Nb Points : "<<l.size();
-    unsigned int index[2],centre,intervalle,iterations=0,r;
-    index[0]=i1;
-    if(i2<=i1) index[1]=l.size()-1;
-    else index[1]=i2;
-    if(y<=l[index[0]]->y()) return index[0];
-    if(y>=l[index[1]]->y()) return index[1];
-    //if(index[1]>=l.size()) index[1]=l.size()-1;
-    intervalle=index[1]-index[0];
-    while(intervalle>1)
-    {
-        centre=index[0]+intervalle/2;
-        if(l[centre]->y()==y) return centre;
-        if(l[centre]->y()<y) index[0]=centre;
-        else index[1]=centre;
-        intervalle=index[1]-index[0];
-        ++iterations;
-    }
-    if(Verbose) std::cout<<" - ClosestY Nb iterations : "<<iterations<<"\n";
-    if(y-l[index[0]]->y()>l[index[1]]->y()-y) r=index[1];
-    else r=index[0];
-#ifdef _DEBUG
-    // Verification du bornage du resultat
-    if(y<l[r]->y())
-        if(r>0) assert(l[r-1]->y()<y);
-    if(y>l[r]->y())
-        if(r<l.size()-1) assert(l[r+1]->y()>y);
-#endif // _DEBUG
-    return r;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/PointsList.cpp b/SrcLib/ARLcore/src/arlcore/PointsList.cpp
deleted file mode 100644
index fdcbf87..0000000
--- a/SrcLib/ARLcore/src/arlcore/PointsList.cpp
+++ /dev/null
@@ -1,1477 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/PointsList.h>
-#include <arlcore/Point.h>
-
-#include <fstream>
-#include <iomanip>
-#include <algorithm>
-
-//#include <vgl/vgl_fit_plane_3d.h>
-#include <vgl/vgl_distance.h>
-#include <vgl/vgl_point_3d.h>
-
-#include <vnl/algo/vnl_powell.h>
-#include <vnl/vnl_matrix_fixed.h>
-#include <vnl/algo/vnl_matrix_inverse.h>
-#include <vnl/vnl_cross.h>
-
-#include <arlcore/Optimization.h>
-#include <arlcore/Misc.h>
-
-arlCore::PointList::PointList( unsigned int dim, const std::string &name )
-//VAG Object(ARLCORE_CLASS_POINTLIST)
-{
-    m_dimension=dim;
-//    m_pointList.reserve(dim);
-//    for (unsigned int i=0; i< dim; ++i )
-//    {
-//        m_pointList.push_back( Point::New() );
-//    }
-}
-
-arlCore::PointList::PointList( const arlCore::PointList& p )
-//VAG Object(ARLCORE_CLASS_POINTLIST)
-{
-    copy(p);
-}
-
-arlCore::PointList::PointList( const std::vector< arlCore::Point::csptr > &p )
-//VAG Object(ARLCORE_CLASS_POINTLIST)
-{
-    if(p.size()==0) m_dimension=3;
-    else
-    {
-        m_dimension=p[0]->size();
-        unsigned int i;
-        for( i=0 ; i<p.size() ; ++i )
-            if(p[i]!=0)
-                if(p[i]->size()==m_dimension) m_pointList.push_back(Point::New((p[i])));
-    }
-}
-
-arlCore::PointList::PointList( const std::vector< arlCore::Point::csptr > &p, double scalarMin, double scalarMax )
-//VAG Object(ARLCORE_CLASS_POINTLIST)
-{
-    if(p.size()==0) m_dimension=3;
-    else
-    {
-        m_dimension=p[0]->size();
-        unsigned int i;
-        for( i=0 ; i<p.size() ; ++i )
-            if(p[i]!=0)
-                if(p[i]->size()==m_dimension && p[i]->getScalar()>=scalarMin && p[i]->getScalar()<=scalarMax) m_pointList.push_back(Point::New((p[i])));
-    }
-}
-
-
-arlCore::PointList::sptr arlCore::PointList::PointListFactory( int size)
-{
-    PointList::sptr lpoint = ::arlCore::PointList::sptr( new PointList( size) );
-    return lpoint;
-}
-
-arlCore::PointList::sptr arlCore::PointList::PointListFactory( const std::vector< Point::csptr >& list )
-{
-    PointList::sptr lpoint = ::arlCore::PointList::sptr( new PointList( list ) );
-    return lpoint;
-}
-
-
-
-arlCore::PointList& arlCore::PointList::operator=( const PointList& p )
-{
-    copy(p);
-    return *this;
-}
-
-void arlCore::PointList::copy( const PointList& p )
-{
-    if(this==&p) return;
-//VAG    arlCore::Object *a=this;
-//VAG    const arlCore::Object *b=&p;
-//VAG    *a = *b;
-    clear();
-    unsigned int i;
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    m_dimension=p.m_dimension;
-    for( i=0 ; i<p.size() ; ++i )
-        m_pointList.push_back( Point::New(p.m_pointList[i]) );
-    unlockWriteMutex();
-    modified();
-}
-
-arlCore::PointList::~PointList( void )
-{
-    clear();
-}
-
-std::string arlCore::PointList::getString( void ) const
-{
-    std::stringstream s;
-    s<<"List of "<<(unsigned int)m_pointList.size()<<" points with dimension "<<getDimension()<<"\n";
-    unsigned int i;
-    for( i=0 ; i<m_pointList.size() ; ++i )
-        s<<m_pointList[i]->getString();
-    return s.str();
-}
-
-unsigned int arlCore::PointList::getDimension( void ) const
-{
-    return m_dimension;
-}
-
-bool arlCore::PointList::setDimension( unsigned int dim )
-{
-    if(size()!=0) return false;
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    m_dimension = dim;
-    unlockWriteMutex();
-    modified();
-    return true;
-}
-
-unsigned int arlCore::PointList::addGaussianNoise( double gaussianNoise )
-{
-    if(gaussianNoise<=0.0 || m_pointList.size()==0) return 0;
-    unsigned int i;
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    for( i=0 ; i<m_pointList.size() ; ++i )
-            m_pointList[i]->addGaussianNoise(gaussianNoise);
-    unlockWriteMutex();
-    modified();
-    return i;
-}
-
-unsigned int arlCore::PointList::fill( const std::vector< arlCore::vnl_rigid_matrix >& list )
-{
-    unsigned int i;
-    clear();
-    Point::sptr pt= Point::New();
-    for( i=0 ; i<list.size() ; ++i )
-    {
-        pt->fill(0.0);
-        list[i].trf( pt );
-        push_back(pt);
-    }
-    modified();
-    return i;
-}
-
-const std::vector< arlCore::Point::sptr >& arlCore::PointList::getList( void ) const
-{
-    return m_pointList;
-}
-
-
-const std::vector< arlCore::Point::csptr > arlCore::PointList::getListCopy( void ) const
-{
-    // VAG FIXME PERF
-    std::vector< arlCore::Point::csptr > res( m_pointList.size() );
-    std::copy( m_pointList.begin(), m_pointList.end(), res.begin() );
-    return res;
-}
-
-template <typename T>
-unsigned int internStatistic( const T &list, unsigned int dimension, arlCore::Point::sptr pt )
-{   // http://fr.wikipedia.org/wiki/Covariance
-    unsigned int i, j, k;
-    arlCore::Point::sptr mean = arlCore::Point::New(dimension);
-    mean->fill(0.0);
-    if(list.size()==0) return 0;
-    for( i=0 ; i<list.size() ; ++i )
-        for( j=0 ; j<dimension ; ++j )
-            if(list[i]->size()>j)
-                mean->set(j, (*mean)[j] + list[i]->get(j));
-    mean->mult(1.0/(double)list.size());
-    vnl_matrix<double> &covMatrix=mean->getCovMatrix();
-    covMatrix.fill(0.0);
-    //TODO some explanation on the formula are mandatory
-    for( i=0 ; i<list.size() ; ++i )
-        for( j=0 ; j<dimension ; ++j )
-            for( k=0 ; k<dimension ; ++k )
-                if(list[i]->size()>j && list[i]->size()>k)
-                    covMatrix[j][k] += (list[i]->get(j)- (*mean)[j])*(list[i]->get(k)-(*mean)[k]);
-    covMatrix /= list.size();
-    pt->copy(mean);
-    return (unsigned int)list.size();
-}
-
-unsigned int arlCore::statistic( const std::vector< Point::csptr > &list, unsigned int dimension, Point::sptr  pt )
-{
-    return internStatistic(list, dimension, pt);
-}
-
-unsigned int arlCore::statistic( const std::vector< Point::sptr > &list, unsigned int dimension, Point::sptr  pt )
-{
-    return internStatistic(list, dimension, pt);
-}
-
-unsigned int arlCore::PointList::statistic( Point::sptr  pt ) const
-{
-    assert(getDimension()>0);
-    return internStatistic(m_pointList, getDimension(), pt);
-}
-unsigned int arlCore::PointList::plane( vgl_homg_plane_3d< double >& homgPlane, double &rms, double &min, double &max, double scalar, double outliers ) const
-{
-    vgl_plane_3d<double> vglPlane;
-    unsigned int n = plane( vglPlane, rms, min, max, scalar, outliers );
-    homgPlane = vglPlane;
-    return n;
-}
-
-typedef std::pair<unsigned int, double> PlaneDistance;
-bool sortPoints(const PlaneDistance& left, const PlaneDistance& right)
-{   // Ordre decroissant des distances
-    return left.second > right.second;
-}
-
-unsigned int arlCore::PointList::plane( vgl_plane_3d< double >& plane, double &rms, double &min, double &max, double scalar, double outliers ) const
-{
-    if(outliers>1.0) outliers = 1.0;
-    // TODO Use #include <vgl_fit_plane_3d.h>
-    rms=-1, min=-1, max=-1;
-    if(m_dimension!=3) return 0;
-    vgl_point_3d< double > pt[3];
-    unsigned int i, j;
-//  for( i=0 ; i<3 ; ++i )
-//      pt[i].fill(0.0);
-    pt[0].set(0.0,0.0,0.0);
-    pt[1].set(0.0,0.0,0.0);
-    pt[2].set(0.0,0.0,0.0);
-    OptimisePlane meanPlane;
-    double n[3]={0.0,0.0,0.0};
-    for( i=0 ; i<size() ; ++i )
-    {
-        if(m_pointList[i]!=0)
-            if(scalar==0 || scalar==m_pointList[i]->getScalar())
-            {
-                vgl_point_3d< double > vglPt(m_pointList[i]->x(),m_pointList[i]->y(),m_pointList[i]->z());
-                meanPlane.addPoint( vglPt);
-                if(i<size()/3)
-                {
-                    n[0]++;
-                    pt[0].set(pt[0].x()+m_pointList[i]->x(), pt[0].y()+m_pointList[i]->y() , pt[0].z()+m_pointList[i]->z() );
-                }
-                if(i>=size()/3 && i<size()/3*2)
-                {
-                    n[1]++;
-                    pt[1].set(pt[1].x()+m_pointList[i]->x(), pt[1].y()+m_pointList[i]->y() , pt[1].z()+m_pointList[i]->z() );
-                }
-                if(i>=size()/3*2)
-                {
-                    n[2]++;
-                    pt[2].set(pt[2].x()+m_pointList[i]->x(), pt[2].y()+m_pointList[i]->y() , pt[2].z()+m_pointList[i]->z() );
-                }
-            }
-    }
-    if(meanPlane.size()<3) return 0;
-    for( i=0 ; i<3 ; ++i )
-        if(n[i]!=0) pt[i].set(pt[i].x()/n[i] , pt[i].y()/n[i] , pt[i].z()/n[i] );
-//  meanPlane.getPoint(0,pt[0]);
-//  meanPlane.getPoint(unsigned int(meanPlane.size()/2),pt[1]);
-//  meanPlane.getPoint(meanPlane.size()-1,pt[2]);
-    plane = vgl_plane_3d< double >(pt[0],pt[1],pt[2]);
-    if(meanPlane.size()==3) rms=0.0, min=0.0, max=0.0;
-    else
-    {
-        std::vector<PlaneDistance> distances;
-        vnl_vector<double> planSolution(4);
-        planSolution(0)=plane.a();
-        planSolution(1)=plane.b();
-        planSolution(2)=plane.c();
-        planSolution(3)=plane.d();
-        for( i=0 ; i<2 ; ++i )
-        {   //Erase outliers in the second iteration
-            if(i==1)
-            {
-                unsigned int n = distances.size()*outliers;
-                if(distances.size()-n < 3) n = distances.size()-3;
-                for( j=0 ; j<n ; ++j )
-                    meanPlane.delPoint(distances[j].first);
-            }
-            vnl_powell computeMeanPlane(&meanPlane);
-            computeMeanPlane.minimize(planSolution);
-            plane.set(planSolution(0),planSolution(1),planSolution(2),planSolution(3));
-            rms=sqrt(computeMeanPlane.get_end_error()/meanPlane.size());
-            const std::vector< vgl_point_3d< double >* > &points = meanPlane.getPoints();
-            distances.resize(points.size());
-            for( j=0 ; j<points.size() ; j++ )
-                if(points[j]!=0)
-                {
-                    distances[j].first = j;
-                    distances[j].second = vgl_distance(plane, *(points[j]));
-                    if(min<0 || distances[j].second<min) min=distances[j].second;
-                    if(max<0 || distances[j].second>max) max=distances[j].second;
-                }
-            std::sort(distances.begin(), distances.end(), sortPoints);
-        }
-    }
-    return meanPlane.size();
-}
-
-/*double arlCore::PointList::pivot( arlCore::Point::sptr center, double &error ) const
-{
-    unsigned int i;
-    const unsigned int Dim = getDimension();
-    center.init(Dim);
-    OptimisePivot pivot(*this);
-    vnl_vector<double> solution(Dim);
-    solution.fill(0.0);
-    vnl_powell computePivot(&pivot);
-    computePivot.minimize(solution);
-    for( i=0 ; i<Dim ; ++i )
-        center.set(i, solution[i]);
-    error = sqrt(computePivot.get_end_error()/size());
-    return pivot.getScalar();
-}*/
-
-///////////////////////////////////////////////////////////////////////////////////////
-//
-// We suppose that the points in the PointList are on a  sphere surface
-// This function provide an estimation of the sphere center and its radius from
-// the PointList. Three methods are now available:
-// ARLCORE_SCE_ANALYTIC, ARLCORE_SCE_GEOMETRIC, ARLCORE_SCE_OPTIMIZATION
-// How does ARLCORE_SCE_ANALYTIC work ?
-// the equation of a sphere is : (x-a)^2 + (y-b)^2 + ((z-c)^2 = R^2 where (a,b,c)
-// is the center of the sphere and R its radius.
-// By developing the parenthesis we can rewrite it:
-// x^2 +y^2 +z^2 + dx + ey + fz +g = R^2
-// where d = -2a  e = -2b  f = -2c  and a^2 + b^2 + c^2 -R^2 = g
-// Here we want to minimize : sum_i || x_i^2 +y_i^2 +z_i^2 + dx_i + ey_i + fz_i +g_i - R^2 ||^2
-// A direct derivation wrt the vector [d e f g]^T gives the following result:
-//
-// [d e f g] = -sum( (x_i^2 + y_i^2 + z_i^2)[x_i y_i z_i 1]) * inverse(sum(transpose([x_i y_i z_i 1]) . [x_i y_i z_i 1]) )
-//
-// ARLCORE_SCE_GEOMETRIC: theoretically, the sphere center should lie on each
-// plane P_i that is orthogonal to each point pair and intersecting their gravity
-// center. This method finds the point C that minimize the squared distance
-// between each mediator plane P_i and C.
-// argmin sum_i dist(C, P_i) = argmin sum_i ||ai*xc + bi*yc + ci*zc + d_i ||^2/ (a_i^2 + b_i^2 +c_i^2)
-//
-// ARLCORE_SCE_OPTIMIZATION :
-// here we use an iterative optimization to find C. The criterion that is optimized is:
-// sum_i dist(C, M_i)^2 where M_i are the points that belong to the sphere
-//
-// log[0] = sqrt( mean  (sum_i || estimated_radius_pt_i - estimated_radius ||^2) )
-// It corresponds to the average of the distance of the point cloud to the estimated sphere
-// log[1] = sqrt( mean  (sum_i || distance_to_sphere_pt_i - average_distance_to_sphere ||^2) )
-// It corresponds to the standard deviation of the distance to the sphere
-// log[2] = maximum distance of the point cloud to the estimated sphere
-////////////////////////////////////////////////////////////////////////////////////////
-bool arlCore::PointList::sphereCenterEstimation( arlCore::Point::sptr  centerEstimation, double &radius, arlCore::ARLCORE_SCE methode, std::vector<double> &optimiser_parameter, std::vector<double> &log) const
-{
-    const bool Verbose = false;
-    const unsigned int Size = size();
-    if (size() < 4)
-    {
-        std::cerr<<"Number of point is < 5 in arlCore::PointList::sphereCenterEstimation"<<std::endl;
-        assert(size() < 4);
-    }
-    if(methode==arlCore::ARLCORE_SCE_ANALYTIC)
-    {
-        vnl_matrix_fixed <double,4,4> matrix_sum(0.0);
-        vnl_matrix_fixed <double,1,4> xyz1(0.0), vector_sum(0.0), defg(0.0);
-        vnl_vector<double> radius_error( Size ), std_distance( Size );
-        unsigned int i;
-        for( i=0 ; i<Size ; ++i )
-        {
-            xyz1.put( 0, 0, get(i)->x() );
-            xyz1.put( 0, 1, (*this)[i]->y() );
-            xyz1.put( 0, 2, (*this)[i]->z() );
-            xyz1.put( 0, 3, 1.0 );
-            matrix_sum = matrix_sum.as_matrix() + xyz1.as_matrix().transpose() * xyz1;
-            vector_sum = vector_sum.as_matrix() + (xyz1(0,0)*xyz1(0,0) + xyz1(0,1)*xyz1(0,1) + xyz1(0,2)*xyz1(0,2))*xyz1.as_matrix();
-        }
-        defg = - vector_sum.as_matrix() * vnl_matrix_inverse<double> (matrix_sum.as_matrix());
-        double a = -1*defg(0,0)/2;
-        double b = -1*defg(0,1)/2;
-        double c = -1*defg(0,2)/2;
-        radius = sqrt( a*a + b*b + c*c - defg(0,3) );
-        centerEstimation->set( 0, a );
-        centerEstimation->set( 1, b );
-        centerEstimation->set( 2, c );
-        for( i=0 ; i<Size ; ++i )
-        {
-            radius_error[i] = fabs( get(i)->distance(centerEstimation) - radius );
-            if(Verbose) std::cerr<<"radius_error[i] = " <<radius_error[i]<<std::endl;
-        }
-        const double Mean = radius_error.mean();
-        for( i=0 ; i<Size ; ++i )
-            std_distance.put(i, radius_error[i] -  Mean );
-        log.clear();
-        log.push_back( radius_error.rms() );
-        centerEstimation->setError(log.back());
-        log.push_back( std_distance.rms() );
-        log.push_back( radius_error.max_value() );
-        return true;
-    }
-    if(methode==arlCore::ARLCORE_SCE_GEOMETRIC)
-    {
-        vnl_matrix_fixed <double,3,3> matrix_sum(0.0);
-        std::vector< vnl_matrix_fixed<double,1,3> > normal_vec;
-        vnl_vector<double>radius_error( Size ), std_distance( Size );
-        std::vector<double> dk;
-        vnl_matrix_fixed<double,1,3> vector_sum(0.0), center, tmp;
-        unsigned int i, j;
-        for( i=0 ; i<Size ; ++i )
-            for( j=0 ; j<Size ; ++j )
-                    if(j!=i)
-                    {
-                        tmp.put(0, 0, get(i)->x() - get(j)->x());
-                        tmp.put(0, 1, get(i)->y() - get(j)->y());
-                        tmp.put(0, 2, get(i)->z() - get(j)->z());
-                        normal_vec.push_back(tmp);
-                        dk.push_back( -1*(get(i)->x()*get(i)->x() + get(i)->y()*get(i)->y() + get(i)->z()*get(i)->z()
-                        - get(j)->x()*get(j)->x() - get(j)->y()*get(j)->y() - get(j)->z()*get(j)->z() ) /2 );
-                    }
-        if(Verbose) std::cerr<< "normal_vec size = " << (unsigned int)normal_vec.size()<<std::endl;
-        for( i=0 ; i<normal_vec.size() ; ++i )
-        {
-            matrix_sum =  matrix_sum + (normal_vec[i].as_matrix().transpose() * normal_vec[i])/( normal_vec[i](0,0)* normal_vec[i](0,0)
-            + normal_vec[i](0,1)* normal_vec[i](0,1) + normal_vec[i](0,2)* normal_vec[i](0,2) );
-
-            vector_sum = vector_sum + dk[i]/( normal_vec[i](0,0)* normal_vec[i](0,0) + normal_vec[i](0,1)* normal_vec[i](0,1)
-            + normal_vec[i](0,2)* normal_vec[i](0,2) ) * normal_vec[i];
-        }
-        center =  vector_sum.as_matrix() * vnl_matrix_inverse<double> (matrix_sum.as_matrix()) *(-1);
-        radius = 0;
-        centerEstimation->set(0, center(0,0) );
-        centerEstimation->set(1, center(0,1) );
-        centerEstimation->set(2, center(0,2) );
-        for( i = 0; i<Size; ++i)
-            radius += centerEstimation->distance( get(i) );
-        radius /= (double)Size;
-        for( i=0 ; i<Size ; ++i )
-        {
-            radius_error[i] = fabs(centerEstimation->distance( get(i) ) - radius);
-            //std::cerr<< "radius_error[i] = " <<radius_error[i]<<std::endl;
-        }
-        for( i=0 ; i<Size ; ++i )
-        {
-            std_distance[i] = radius_error.get(i)-radius_error.mean();
-        }
-        log.clear();
-        log.push_back( radius_error.rms() );
-        centerEstimation->setError(log.back());
-        log.push_back( std_distance.rms() );
-        log.push_back( radius_error.max_value() );
-        return true;
-    }
-    if(methode==arlCore::ARLCORE_SCE_OPTIMIZATION)
-    {
-        unsigned int i;
-        const unsigned int Dim = getDimension();
-        centerEstimation->init(Dim);
-        OptimisePivot pivot( const_cast< PointList *>(this)->getSptr() );
-        vnl_vector<double> solution(Dim);
-        solution.fill(0.0); // Initialisation
-        std::vector<double> tmpLog;
-        sphereCenterEstimation( centerEstimation, radius, ARLCORE_SCE_ANALYTIC, optimiser_parameter, tmpLog );
-        for( i=0 ; i<Dim ; ++i )
-            solution[i] = (*centerEstimation)[i];
-        vnl_powell computePivot(&pivot);
-        computePivot.minimize(solution);
-        for( i=0 ; i<Dim ; ++i )
-            centerEstimation->set(i, solution[i]);
-        double error = sqrt(computePivot.get_end_error()/Size);
-        radius = pivot.getRadius();
-        log.clear();
-        log.push_back( error );
-        centerEstimation->setError(log.back());
-        return true;
-    }
-    if(methode==arlCore::ARLCORE_SCE_4POINTS)
-    {
-        //computation of two lines which intersection in an estimation of
-        //the sphere center
-        vnl_vector<double>radius_error( Size ), std_distance( Size );
-        arlCore::PointList::sptr trian1, trian2, fourPoints;
-        trian1 =  arlCore::PointList::New();
-        trian2 =  arlCore::PointList::New();
-        fourPoints =  arlCore::PointList::New();
-
-        arlCore::Point::sptr line_center1, line_center2, line1_another_point, line2_another_point;
-        line_center1 =  arlCore::Point::New();
-        line_center2 =  arlCore::Point::New();
-        line1_another_point =  arlCore::Point::New();
-        line2_another_point =  arlCore::Point::New();
-        vgl_plane_3d< double > plane1, plane2;
-        for(int i=0; i<3;++i)
-        {
-            trian1->push_back( get(i) );
-            trian2->push_back( get(i+1) );
-        }
-        trian1->triangleCircumcircleOrthoLine(line_center1, plane1);
-        trian2->triangleCircumcircleOrthoLine(line_center2, plane2);
-        line1_another_point->set(0, (*line_center1)[0] + plane1.a());
-        line1_another_point->set(1, (*line_center1)[1] + plane1.b());
-        line1_another_point->set(2, (*line_center1)[2] + plane1.c());
-        line2_another_point->set(0, (*line_center2)[0] + plane2.a());
-        line2_another_point->set(1, (*line_center2)[1] + plane2.b());
-        line2_another_point->set(2, (*line_center2)[2] + plane2.c());
-        fourPoints->push_back(line_center1);
-        fourPoints->push_back(line1_another_point);
-        fourPoints->push_back(line_center2);
-        fourPoints->push_back(line2_another_point);
-        double line_error=0;
-        fourPoints->twoLinesClosestPoint( centerEstimation, line_error);
-//      std::cerr<< "line_error = "<< line_error<<std::endl;
-        radius = 0;
-        for( int i = 0; i<Size; ++i)
-            radius += centerEstimation->distance(get(i));
-        radius /= (double)Size;
-        for( int i=0 ; i<Size ; ++i )
-        {
-            radius_error[i] = fabs(centerEstimation->distance( get(i) ) - radius);
-            //std::cerr<< "radius_error[i] = " <<radius_error[i]<<std::endl;
-        }
-        for( int i=0 ; i<Size ; ++i )
-        {
-            std_distance[i] = radius_error.get(i)-radius_error.mean();
-        }
-        log.clear();
-        log.push_back( radius_error.rms() );
-        centerEstimation->setError(log.back());
-        log.push_back( std_distance.rms() );
-        log.push_back( radius_error.max_value() );
-        return true;
-    }
-    return false;
-}
-
-bool arlCore::PointList::triangleCircumcircleOrthoLine(Point::sptr centerEstimation, vgl_plane_3d< double > &trian_plane) const
-{
-    if (this->size() < 3)
-    {
-        std::cerr<<"in PointList::triangleCircumcircle Point list size in below 3"<<std::endl;
-        assert(this->size() < 3);
-    }
-    else
-    {
-        vgl_vector_3d< double > AB(this->get(0)->x() - this->get(1)->x(), this->get(0)->y() - this->get(1)->y(), this->get(0)->z() - this->get(1)->z());
-        vgl_vector_3d< double > AC(this->get(0)->x() - this->get(2)->x(), this->get(0)->y() - this->get(2)->y(), this->get(0)->z() - this->get(2)->z());
-
-        vgl_point_3d< double > A(this->get(0)->x(), this->get(0)->y(), this->get(0)->z());
-        vgl_point_3d< double > B(this->get(1)->x(), this->get(1)->y(), this->get(1)->z());
-        vgl_point_3d< double > C(this->get(2)->x(), this->get(2)->y(), this->get(2)->z());
-        vgl_point_3d< double > middle_AB( (A.x() + B.x())/2, (A.y() + B.y())/2, (A.z() + B.z())/2);
-        vgl_point_3d< double > middle_AC( (C.x() + A.x())/2, (C.y() + A.y())/2, (C.z() + A.z())/2);
-        vgl_plane_3d< double > first_plane(AB, middle_AB);
-        vgl_plane_3d< double > second_plane(AC, middle_AC);
-        vgl_plane_3d< double > triangle_plane(A, B, C);
-        vgl_point_3d< double > circumcircle_center(first_plane, second_plane, triangle_plane);
-
-        trian_plane = triangle_plane;
-
-        centerEstimation->set(0,circumcircle_center.x());
-        centerEstimation->set(1,circumcircle_center.y());
-        centerEstimation->set(2,circumcircle_center.z());
-    }
-    return true;
-}
-
-bool arlCore::PointList::twoLinesClosestPoint(Point::sptr closestPoint, double &log) const
-{
-    //p1 = pointlist[0]
-    //p2 = pointlist[1]
-    //p3 = pointlist[2]
-    //p4 = pointlist[3]
-    arlCore::Point::sptr pa =  arlCore::Point::New();
-    arlCore::Point::sptr pb =  arlCore::Point::New();
-    arlCore::Point::sptr p1 =  arlCore::Point::New( get(0) );
-    arlCore::Point::sptr p2 =  arlCore::Point::New( get(1) );
-    arlCore::Point::sptr p3 =  arlCore::Point::New( get(2) );
-    arlCore::Point::sptr p4 =  arlCore::Point::New( get(3) );
-
-    arlCore::Point::sptr p13 =  arlCore::Point::New();
-    arlCore::Point::sptr p43 =  arlCore::Point::New();
-    arlCore::Point::sptr p21 =  arlCore::Point::New();
-
-    double d1343,d4321,d1321,d4343,d2121;
-    double numer,denom, eps=1e-12;
-    p13->set(0, p1->x() - p3->x() );    p13->set(1, p1->y() - p3->y() );    p13->set(2, p1->z() - p3->z() );
-    p43->set(0, p4->x() - p3->x() );    p43->set(1, p4->y() - p3->y() );    p43->set(2, p4->z() - p3->z() );
-    if (fabs(p43->x())  < eps && fabs(p43->y())  < eps && fabs(p43->z())  < eps)
-        return(false);
-
-    p21->set(0, p2->x() - p1->x() );    p21->set(1, p2->y() - p1->y() );    p21->set(2, p2->z() - p1->z() );
-    if (fabs(p21->x())  < eps && fabs(p21->y())  < eps && fabs(p21->z())  < eps)
-       return(false);
-
-    d1343 = p13->x() * p43->x() + p13->y() * p43->y() + p13->z() * p43->z();
-    d4321 = p43->x() * p21->x() + p43->y() * p21->y() + p43->z() * p21->z();
-    d1321 = p13->x() * p21->x() + p13->y() * p21->y() + p13->z() * p21->z();
-    d4343 = p43->x() * p43->x() + p43->y() * p43->y() + p43->z() * p43->z();
-    d2121 = p21->x() * p21->x() + p21->y() * p21->y() + p21->z() * p21->z();
-
-    denom = d2121 * d4343 - d4321 * d4321;
-    if (fabs(denom) < eps)
-        return(false);
-    numer = d1343 * d4321 - d1321 * d4343;
-
-    double mua = numer / denom;
-    double mub = (d1343 + d4321 * (mua)) / d4343;
-    pa->set(0, p1->x() + mua * p21->x() );
-    pa->set(1, p1->y() + mua * p21->y() );
-    pa->set(2, p1->z() + mua * p21->z() );
-    pb->set(0, p3->x() + mub * p43->x() );
-    pb->set(1, p3->y() + mub * p43->y() );
-    pb->set(2, p3->z() + mub * p43->z() );
-//  std::cerr<<"I = " << pa.getCoordinates()<<std::endl;
-//  std::cerr<<"J = " << pb->getCoordinates()<<std::endl;
-    closestPoint->x(0.5*pa->x() + 0.5*pb->x());
-    closestPoint->y(0.5*pa->y() + 0.5*pb->y());
-    closestPoint->z(0.5*pa->z() + 0.5*pb->z());
-    log = pa->distance(pb);
-    return true;
-}
-
-unsigned int arlCore::PointList::shapeRandom( unsigned int nbPoints, ARLCORE_SHAPE type, Point::csptr centre, const double size, const double angle)
-{
-    m_pointList.clear();
-    if(type<=ARLCORE_SHAPE_UNKNOWN ||type>=ARLCORE_SHAPE_NBSHAPES) return 0;
-    unsigned int i, j;
-    if(type==ARLCORE_SHAPE_CHESSBOARD)
-    {   // nbPoints = Number of points by side of the square
-        if(centre->size()<2) return 0; // Point dimension at least = 2
-        const double Step = size/(double)(nbPoints-1);
-        arlCore::Point::sptr currentPoint = arlCore::Point::New(centre);
-        // firstPoint is the Upper left coin
-        const double Xorg = centre->x()-size/2.0;
-        const double Yorg = centre->y()-size/2.0;
-        for( i=0 ; i<nbPoints ; ++i )
-            for( j=0 ; j<nbPoints ; ++j )
-            {
-                currentPoint->x(Xorg + (double)i*Step);
-                currentPoint->y(Yorg + (double)j*Step);
-                push_back(currentPoint);
-            }
-        return nbPoints*nbPoints;
-    }
-    switch(type)
-    {
-    case ARLCORE_SHAPE_CUBE: setName("Random points in a cube");break;
-    case ARLCORE_SHAPE_SPHERE: setName("Random points in a sphere");break;
-    case ARLCORE_SHAPE_SPHERE_CAP: setName("Random points on a sphere cap");break;
-    case ARLCORE_SHAPE_DISC: setName("Random points on a disc");break;
-    case ARLCORE_SHAPE_PLAINSQUARE: setName("Random points on a plain square");break;
-    case ARLCORE_SHAPE_CIRCLE: setName("Random points on a circle");break;
-    case ARLCORE_SHAPE_EDGESQUARE: setName("Random points on a edge square");break;
-    case ARLCORE_SHAPE_SOLIDANGLE: setName("Random points in a solid angle");break;
-    case ARLCORE_SHAPE_SOLIDANGLE_SURFACE: setName("Random points on a solid angle surface");break;
-    default: break;
-    }
-    m_dimension=3;
-    for( i=0 ; i<nbPoints ; ++i )
-    {
-        arlCore::Point::sptr tmp=arlCore::Point::New(centre);
-        tmp->shapeRandom(type, size, angle);
-        push_back(tmp);
-    }
-    modified();
-    return nbPoints;
-}
-
-unsigned int arlCore::PointList::randomList( PointList::csptr A, unsigned int n )
-{
-    unsigned int i;
-    std::vector<unsigned int> v;
-    clear();
-    arlRandom::randomIndex( A->size(), v, n );
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    PointList::sptr Anc = PointList::constCast(A);
-    for( i=0 ; i<n ; ++i )
-        m_pointList.push_back( Point::New( (*Anc)[i]) ) ;
-    unlockWriteMutex();
-    modified();
-    return n;
-}
-
-bool arlCore::PointList::plot( const std::string &options ) const
-{
-    const bool JustVisible = false;
-    const bool Overwrite = true;
-    save("000000.dat", ARLCORE_POINT_SAVE_GNUPLOT, JustVisible, Overwrite);
-    std::fstream file;
-    file.open (TMP_FILE, std::fstream::out);
-    if(!file.is_open()) return false;
-    file<<"set title '"<<getName()<<"'\n";
-    file<<options<<"\n";
-    if(getDimension()==3) file<<"s";
-    file<<"plot ";
-    file<<"\"000000.dat\"\n";
-    file<<"pause -1 \"Hit return to continue\"\n";
-    file.close();
-    system(GNUPLOT_EXE);
-    //exec(GNUPLOT_EXE, TMP_FILE );
-    return true;
-}
-
-bool arlCore::PointList::SLplot( void ) const
-{
-    return false;
-    double rms, min, max;
-    int i;
-    vgl_plane_3d< double > p;
-    unsigned int n;
-    const bool JustVisible = false;
-    const bool Overwrite = true;
-    save("c:/000000.dat", ARLCORE_POINT_SAVE_GNUPLOT, JustVisible, Overwrite);
-    for( i=-30 ; i<30 ; ++i)
-    {
-        if(i!=0)
-        {
-            n=this->plane( p, rms, min, max, i);
-            if(n>3)
-            {
-                std::fstream file;
-                file.open ("c:/000000.dem", std::fstream::out);
-                file<<"set title 'Nuage de points & plans mdians\n";
-                file<<"splot ";
-                if(!file.is_open()) return false;
-                file<<"("<<p.a()<<"*x+("<<p.b()<<")*y+("<<p.d()<<"))/(-("<<p.c()<<")),";
-                file<<"\"c:/000000.dat\"\n";
-                file<<"pause -1 \"Hit return to continue\"\n";
-                file.close();
-                file.flush();
-                system ("d:/gnuplot/bin/wgnuplot c:/000000.dem" );
-            }
-        }
-    }
-    return true;
-}
-
-template <typename T>
-bool internSave( const T &pl, const std::string &fileName, const std::string &name, arlCore::ARLCORE_POINT_SAVE_TYPE type,  bool justVisible, bool overwrite )
-{
-    if(pl.size()==0) return false;
-    const unsigned int Dim = pl[0]->size();
-    unsigned int i, n;
-#ifdef _DEBUG
-    // List shoud contains points with the same dimension
-    for( i=0 ; i<pl.size() ; ++i )
-    {
-        if(pl[i]!=0)
-            if(pl[i]->isOK())
-            {
-                assert(pl[i]->size()==Dim);
-            }
-    }
-#endif // _DEBUG
-    std::fstream file;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    file.open(fileName.c_str(), std::fstream::out);
-    if(!file.is_open()) return false;
-    if(type==arlCore::ARLCORE_POINT_SAVE_FULL || type==arlCore::ARLCORE_POINT_SAVE_LIGHT)
-    {
-        file<<"FileType PointList\n";
-        file<<"Version 1.0\n";
-        file<<"Dimension "<<Dim<<"\n";
-    }
-    if(type==arlCore::ARLCORE_POINT_SAVE_GNUPLOT)
-        file<<"#ARL points list for GNUPLOT\n";
-    if(type==arlCore::ARLCORE_POINT_SAVE_VTK)
-    {
-        file<<"# vtk DataFile Version 3.1\n";
-        file<<name<<"\n";
-        file<<"ASCII\n";
-        file<<"DATASET UNSTRUCTURED_GRID\n\n";
-        file<<"POINTS "<<(unsigned int)pl.size()<<" double\n";
-    }
-    for( i=0, n=0 ; i<pl.size() ; ++i )
-        if(pl[i]!=0)
-            if(pl[i]->isOK())
-                if(!justVisible || pl[i]->isVisible())
-                {
-                    pl[i]->save(file, n, type);
-                    ++n;
-                }
-    if(type==arlCore::ARLCORE_POINT_SAVE_VTK)
-    {
-        file<<"\nCELLS 1 "<<(unsigned int)pl.size()+1<<"\n";
-        file<<(unsigned int)pl.size()<<"\t";
-        for( i=0 ; i<pl.size() ; ++i )
-            file<<i<<" ";
-        file<<"\n\nCELL_TYPES 1\n2\n";
-    }
-    file.close();
-    return true;
-}
-
-bool arlCore::PointList::save( const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type,  bool justVisible, bool overwrite ) const
-{
-    bool b = internSave( m_pointList, fileName, getName(), type, justVisible, overwrite );
-    if( b && type==arlCore::ARLCORE_POINT_SAVE_VTK )
-    {
-        unsigned int i;
-        std::fstream file;
-        file.open(fileName.c_str(), std::fstream::out | std::fstream::app);
-        if(!file.is_open()) return b;
-        file<<"\nPOINT_DATA "<<size();
-        file<<"\n\nSCALARS error double 1\nLOOKUP_TABLE default\n";
-        for( i=0 ; i<size() ; ++i )
-            if(m_pointList[i]!=0)
-                if(m_pointList[i]->isOK())
-                    file<<m_pointList[i]->getError()<<" ";
-        file<<"\nSCALARS scalar double 1\nLOOKUP_TABLE default\n";
-        for( i=0 ; i<size() ; ++i )
-            if(m_pointList[i]!=0)
-                if(m_pointList[i]->isOK())
-                    file<<m_pointList[i]->getScalar()<<" ";
-        file<<"\n\nSCALARS visible char 1\nLOOKUP_TABLE default\n";
-        for( i=0 ; i<size() ; ++i )
-            if(m_pointList[i]!=0)
-                if(m_pointList[i]->isOK())
-                {
-                    if(m_pointList[i]->isVisible())
-                        file<<"1 ";
-                    else file<<"0 ";
-                }
-        if(getDimension()==3)
-        {
-            file<<"\n\nTENSORS covariance double\n";
-            for( i=0 ; i<size() ; ++i )
-                if(m_pointList[i]!=0)
-                    if(m_pointList[i]->isOK())
-                        file<<m_pointList[i]->getCovMatrix()<<"\n";
-        }
-        file.close();
-    }
-    return b;
-}
-unsigned int addPoints( arlCore::PointList::sptr ptsList, double step )
-{
-    return 0;
-    // Reechantillonne le triangle form� par les 3 derniers points
-    unsigned int n=0;
-    const unsigned int Size = ptsList->size();
-    if(Size<3) return n;
-    arlCore::Point::csptr A = (*ptsList)[Size-1];
-    arlCore::Point::csptr B = (*ptsList)[Size-2];
-    arlCore::Point::csptr C = (*ptsList)[Size-3];
-    std::cout<<A->distance(B)<<"-";
-    std::cout<<C->distance(B)<<"-";
-    std::cout<<A->distance(C)<<"\n";
-    return n;
-}
-
-bool arlCore::PointList::load( const std::string &fileName, double step )
-{
-    if(fileName=="") return false;
-    std::ifstream file;
-    file.open (fileName.c_str(), std::fstream::in);
-    if(!file.is_open())
-    {
-        std::cerr<<"PointList Loading error : "<<fileName<<"\n";
-        return false;
-    }
-    std::string extractFolder, extractFile, ext;
-    arlString::splitFilename( fileName, extractFolder, extractFile, ext );
-    const bool Trian = (ext=="trian");
-    const bool Raw = (ext=="raw");
-    unsigned int i=0, n=0;
-    int no;
-    std::string token,text;
-    double version;
-    modified(); // TODO Optimize its position
-    m_pointList.clear();
-    if(Trian)
-    {
-        m_dimension = 3;
-        unsigned int nbPts;
-        double x,y,z;
-        file>>nbPts;
-        while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-        for( ; i<nbPts ; ++i )
-        {
-            file>>x>>y>>z;
-            Point::sptr p = Point::New();
-            p->x(x);
-            p->y(y);
-            p->z(z);
-            m_pointList.push_back( p );
-            if(step>0)
-                if((i+1)%3==0) addPoints( getSptr() , step);
-        }
-        unlockWriteMutex();
-        file.close();
-        return true;
-    }
-    if(Raw)
-    {
-        m_dimension = 3;
-        double x,y,z;
-        while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-        while(!file.eof())
-        {
-            file>>x>>y>>z;
-            Point::sptr p = Point::New();
-            p->x(x);
-            p->y(y);
-            p->z(z);
-            m_pointList.push_back( p );
-            if(step>0)
-                if((i+1)%3==0) addPoints( getSptr(), step);
-            ++i;
-        }
-        unlockWriteMutex();
-        file.close();
-        return true;
-    }
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    do
-    {   // Reading header
-        file>>token;
-        if(token=="FileType")
-        {
-            file>>text;
-            if(text!="PointList" && text!="PointsList")
-            {   // FIXME PointsList deprecated : to delete
-                unlockWriteMutex();
-                return false;
-            }
-            n=(n|1);
-        }
-        if(token=="Version") {file>>version; n=(n|2);}
-        if(token=="Dimension") {file>>m_dimension; n=(n|4);}
-        if(file.eof())
-        {
-            std::cerr<<"PointList Loading Header error : "<<fileName<<"\n";
-            unlockWriteMutex();
-            return false;
-        }
-    } while(n!=7);
-    unlockWriteMutex();
-    bool b;
-    do
-    {
-        Point::sptr p = Point::New();
-        b=p->load(file,no,m_dimension);
-        if(b)
-        {
-            if(no<0) push_back(p);
-            else
-            {
-                while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-                assert(no>=0);
-                for( i=size() ; i<=(unsigned int)no ; ++i )
-                    m_pointList.push_back( arlCore::Point::sptr() );
-                if( !m_pointList[no] )
-                    m_pointList[no]= p;
-                else m_pointList[no]->pond(p);
-                unlockWriteMutex();
-            }
-        }
-    }while(b);
-    file.close();
-    return true;
-}
-
-arlCore::Point::sptr arlCore::PointList::operator[]( unsigned int i )
-{   // FIXME Problem de validite de l'objet retourne
-    modified();
-    return get(i);
-}
-
-arlCore::Point::csptr arlCore::PointList::operator[]( unsigned int i ) const
-{   // FIXME Problem de validite de l'objet retourne
-    return get(i);
-}
-
-arlCore::Point::sptr arlCore::PointList::get( unsigned int i )
-{   // FIXME Problem de validite de l'objet retourne
-    if(i<0 || i>=size()) return arlCore::Point::sptr();
-    else return m_pointList[i];
-}
-
-arlCore::Point::csptr arlCore::PointList::get( unsigned int i ) const
-{
-    if(i<0 || i>=size()) return arlCore::Point::sptr();
-    arlCore::Point::csptr P = m_pointList[i];
-    return P;
-}
-
-arlCore::Point::sptr arlCore::PointList::back( void )
-{   // FIXME Problem de validite de l'objet retourne
-    if(size()<1) return arlCore::Point::sptr();
-    return get(size()-1);
-}
-
-arlCore::Point::csptr arlCore::PointList::back( void ) const
-{   // FIXME Problem de validite de l'objet retourne
-    if(size()<1) return arlCore::Point::sptr();
-    else return get(size()-1);
-}
-
-unsigned int arlCore::PointList::push_back(PointList::csptr p )
-{
-    unsigned int i,n=0;
-    for( i=0 ; i< p->size() ; ++i )
-        if(push_back(( (*p)[i]))) ++n;
-    modified();
-    return n;
-}
-
-bool arlCore::PointList::push_back( Point::csptr p )
-{
-    if(m_dimension!=p->size())
-        if(size()!=0) return false;
-    setDimension(p->size());
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    m_pointList.push_back( Point::constCast(p) );
-    unlockWriteMutex();
-    modified();
-    return true;
-}
-
-bool arlCore::PointList::push_back( double x, double y )
-{
-    if(m_dimension!=2)
-        if(size()!=0) return false;
-    setDimension(2);
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    arlCore::Point::sptr newPt = arlCore::Point::New();
-    newPt->init(2);
-    newPt->x(x); newPt->y(y);
-    m_pointList.push_back( newPt );
-    unlockWriteMutex();
-    modified();
-    return true;
-}
-
-bool arlCore::PointList::push_back( double x, double y, double z )
-{
-    if(m_dimension!=3)
-        if(size()!=0) return false;
-    setDimension(3);
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    arlCore::Point::sptr newPt = arlCore::Point::New();
-    newPt->x(x); newPt->y(y);newPt->z(z);
-    m_pointList.push_back( newPt );
-    unlockWriteMutex();
-    modified();
-    return true;
-}
-
-void arlCore::PointList::pop_back( void )
-{
-    if(m_pointList.size()<1) return;
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    m_pointList.pop_back();
-    unlockWriteMutex();
-    modified();
-}
-
-void arlCore::PointList::clear( void )
-{
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    m_pointList.clear();
-    unlockWriteMutex();
-    modified();
-}
-
-unsigned int arlCore::PointList::size( void ) const
-{
-    return (unsigned int)m_pointList.size();
-}
-
-unsigned int arlCore::PointList::visibleSize( void ) const
-{
-    unsigned int i, n=0;
-    for( i=0 ; i<m_pointList.size() ; ++i )
-        if(m_pointList[i])
-            if(m_pointList[i]->isVisible()) ++n;
-    return n;
-}
-
-bool arlCore::PointList::properties( arlCore::Point::sptr gravity, arlCore::Point::sptr boundingBox1, arlCore::Point::sptr boundingBox2,
-                        double &minScalar, double &maxScalar, double &std ) const
-
-{
-    if(size()<1) return false;
-    unsigned int i, j;
-    gravity->set(m_pointList[0]);
-    boundingBox1->init( getDimension() );
-    boundingBox2->init( getDimension() );
-    boundingBox1->set(m_pointList[0]);
-    boundingBox2->set(m_pointList[0]);
-    minScalar=m_pointList[0]->getScalar();
-    maxScalar=m_pointList[0]->getScalar();
-    for( i=1 ; i<size() ; ++i )
-    {
-        if(m_pointList[0]->getScalar()>maxScalar) maxScalar=m_pointList[0]->getScalar();
-        if(m_pointList[0]->getScalar()<minScalar) minScalar=m_pointList[0]->getScalar();
-        gravity->pond( m_pointList[i] );
-        for( j=0 ; j<m_dimension ; ++j )
-        {
-            if(m_pointList[i]->get(j)< (*boundingBox1)[j]) boundingBox1->set(j,m_pointList[i]->get(j));
-            if(m_pointList[i]->get(j)> (*boundingBox2)[j]) boundingBox2->set(j,m_pointList[i]->get(j));
-        }
-    }
-    vnl_vector<double> sub(size());
-    for( i=0 ; i<size() ; ++i )
-        sub(i) = m_pointList[i]->distance(gravity);
-    std = sub.rms();
-    return true;
-}
-
-#ifdef ANN
-unsigned int arlCore::PointList::generateANN( ANNpointArray& annArray ) const
-{
-    unsigned int i,j,n=0;
-    annDeallocPts( annArray );
-    annArray=annAllocPts(size(), getDimension());
-    for( i=0 ; i<size() ; ++i )
-        if(m_pointList[i]!=0)
-        {
-            ++n;
-            for( j=0 ; j<getDimension() ; ++j )
-                annArray[i][j]=m_pointList[i]->get(j);
-        }
-    return n;
-}
-#endif // ANN
-
-template <typename T>
-unsigned int internFindNearPoint( const T &from, arlCore::Point::csptr pt, std::vector< unsigned int > &pos, double &distMin, double scalar)
-{
-    pos.clear();
-    if(from.size()==0) return 0;
-    unsigned int i=0;
-    distMin = arlCore::distance( from[i] ,pt);
-    if(distMin<=scalar) pos.push_back(i);
-    for( i=1 ; i<from.size() ; ++i )
-    {
-        double d = arlCore::distance( from[i] ,pt);
-        if(d<=scalar) pos.push_back(i);
-        if(d<distMin) distMin=d;
-    }
-    return (unsigned int)pos.size();
-}
-
-unsigned int arlCore::findNearPoint( const std::vector<arlCore::Point::csptr> &from, Point::csptr pt, std::vector< unsigned int > &pos, double &distMin, double scalar)
-{
-    return internFindNearPoint(from, pt, pos, distMin, scalar);
-}
-/*
-unsigned int arlCore::findNearPoint( const std::vector<arlCore::Point::sptr> &from, Point::csptr pt, std::vector< unsigned int > &pos, double &distMin, double scalar)
-{
-    return internFindNearPoint(from, pt, pos, distMin, scalar);
-}*/
-
-unsigned int arlCore::PointList::findNearPoint(Point::csptr pt, std::vector< unsigned int > &pos, double &distMin, double scalar) const
-{
-    return internFindNearPoint(m_pointList, pt, pos, distMin, scalar);
-}
-
-bool arlCore::PointList::collapse( double g )
-{
-    Point::sptr gravity, boundingBox1, boundingBox2;
-    gravity = Point::New();
-    boundingBox1 = Point::New();
-    boundingBox2 = Point::New();
-    double minScalar, maxScalar, std;
-    unsigned int i,j;
-    properties( gravity, boundingBox1, boundingBox2, minScalar, maxScalar, std );
-    vnl_vector<double> vector(gravity->size());
-    while(!lockWriteMutex()) std::cerr<<"PointList write locked\n";
-    for( i=0 ; i<size() ; ++i )
-    {
-        vector = gravity->getCoordinates()-m_pointList[i]->getCoordinates();
-        vector.normalize();
-        for( j=0 ; j<m_pointList[i]->size() ; ++j )
-            m_pointList[i]->set(j,g*vector[j]+m_pointList[i]->get(j));
-
-    }
-    unlockWriteMutex();
-    modified();
-    return true;
-}
-
-unsigned int arlCore::PointList::tagCalibration( const std::vector<arlCore::PointList::sptr > &tagList, double delta, unsigned int nbMaxIterations, double &xLength, double &yLength )
-{   // TODO Code cleaning & code optimization
-    xLength = 0.0, yLength = 0.0;
-    assert(tagList.size()>0);
-    if(tagList.size()<1) return 0;
-    *this = *(tagList[0]);
-    if(tagList.size()==1) return 1;
-    unsigned int i, j, nbIterations=0;
-    double criterion=0;
-    arlCore::vnl_rigid_matrix T;
-    arlCore::PointList::sptr modelRegistration = arlCore::PointList::New() ;
-    std::vector< arlCore::PointList::sptr > regPL;
-    vnl_vector<double> mean1, mean2;
-    mean1.set_size(this->size());
-    mean2.set_size(tagList.size());
-    mean2.fill(0.0);
-    mean1.fill(0.0);
-    do{
-        ++nbIterations;
-        criterion=0;
-        for( i=0 ; i<tagList.size() ; ++i )
-        {
-            modelRegistration->clear();
-            T.register3D3D(tagList[i], getSptr() , false);
-            T.trf(tagList[i], modelRegistration);
-            arlCore::Point::sptr ref = arlCore::Point::New();
-            for( j=0 ; j<modelRegistration->size() ; ++j )
-            {
-                ref->x( get(j)->x() ); ref->y( get(j)->y() ); ref->y( get(j)->y() );
-                mean1[j] = (*modelRegistration)[j]->distance( ref );
-            }
-            const double M = mean1.mean();
-            criterion += abs((M - mean2[i]));
-            mean2[i] = M;
-            regPL.push_back(modelRegistration);
-        }
-        this->clear();
-        for( i=0 ; i<regPL[0]->size() ; ++i )
-        {
-            arlCore::PointList temp;
-            arlCore::Point::sptr moyenne;
-            arlCore::Point::sptr tmpPt =  arlCore::Point::New();
-            for( j=0 ; j<regPL.size() ; ++j )
-            {
-                tmpPt->x( regPL[j]->operator[](i)->x() );
-                //temp.push_back(arlCore::Point(regPL[j][i]->x(),regPL[j][i]->y(),regPL[j][i]->z()));
-            }
-            temp.statistic(moyenne);
-            this->push_back(moyenne);
-        }
-    }while(criterion>delta && nbIterations<nbMaxIterations);
-    if(this->size()>2)
-    {   // Frame choice
-        const unsigned int OrgPoint=3, XaxisPoint=2, YaxisPoint=0; // TODO Choisir d'autres reperes
-        arlCore::PointList::sptr modelAxis, unitAxis;
-        modelAxis = arlCore::PointList::New();
-        unitAxis = arlCore::PointList::New();
-        modelAxis->push_back( arlCore::Point::New( get(OrgPoint)->x(),get(OrgPoint)->y(),get(OrgPoint)->z()) );
-        modelAxis->push_back( arlCore::Point::New( get(XaxisPoint)->x(),get(XaxisPoint)->y(),get(XaxisPoint)->z()) );
-        xLength = get(OrgPoint)->distance(  get(XaxisPoint) );
-        modelAxis->push_back( arlCore::Point::New( get(YaxisPoint)->x(),get(YaxisPoint)->y(),get(YaxisPoint)->z()) );
-        yLength = get(OrgPoint)->distance( get(YaxisPoint) );
-        vnl_vector_fixed<double,3> pX, pY;
-        pX[0] = get(XaxisPoint)->x() - get(OrgPoint)->x();
-        pX[1] = get(XaxisPoint)->y() - get(OrgPoint)->y();
-        pX[2] = get(XaxisPoint)->z() - get(OrgPoint)->z();
-        pY[0] = get(YaxisPoint)->x() - get(OrgPoint)->x();
-        pY[1] = get(YaxisPoint)->y() - get(OrgPoint)->y();
-        pY[2] = get(YaxisPoint)->z() - get(OrgPoint)->z();
-        const double CosAlpha = dot_product(pX,pY)/(yLength*yLength);
-        const double SinAlpha = sqrt(1-(CosAlpha*CosAlpha));
-        unitAxis->push_back( arlCore::Point::New(0.0, 0.0, 0.0));
-        unitAxis->push_back(arlCore::Point::New(xLength, 0.0, 0.0));
-        unitAxis->push_back(arlCore::Point::New(yLength*CosAlpha, yLength*SinAlpha, 0.0));
-        T.register3D3D(modelAxis, unitAxis, true);
-        T.trf( getSptr() );
-    }
-    return nbIterations;
-}
-
-double smallerRatio( double gaussianError, const vnl_vector<double> &V )
-{   // Elements de V croissant. Ratio = Grand/Petit
-    assert(V.size()>1);
-    double ratio, min=DBL_MAX;
-    unsigned int i;//,j;
-    for( i=0 ; i<V.size()-1 ; ++i )
-    {
-        ratio = (V[i+1]-gaussianError)/(V[i]+gaussianError);
-        if(ratio<min) min=ratio;
-    }
-/*  {
-        std::cout<<V<<" ";
-        for( j=i+1 ; j<V.size() ; ++j )
-        {
-            std::cout<<V[j]/V[i]<<" ";
-            if(V[j]/V[i]<min) min=(V[j]-gaussianError)/(V[i]+gaussianError);
-        }
-        std::cout<<"\n";
-    }*/
-    return min;
-}
-
-bool shapesProperties( double gaussianError, const std::vector<vnl_vector<double> > &shapes, vnl_vector<double> &ratiosMin, vnl_vector<double> &perimeters )
-{
-    const bool Verbose = false;
-    if(shapes.size()<1) return false;
-    unsigned int i;
-//  std::vector< vnl_vector<unsigned int> >index;
-    if(Verbose) std::cerr<<"Nb de "<<shapes[0].size()<<"-formes : "<<(unsigned int)shapes.size()<<"\n";
-    ratiosMin.set_size((unsigned int)shapes.size());
-    perimeters.set_size((unsigned int)shapes.size());
-    for( i=0 ; i<(unsigned int)shapes.size() ; ++i )
-    {
-        ratiosMin[i] = smallerRatio(gaussianError, shapes[i]);
-        perimeters[i] = shapes[i].sum();
-//      std::cout<<"Shape "<<i<<" : Perimeter="<<perimeters[i]<<" - ratioMin="<<ratiosMin[i]<<"\n";
-    }
-    if(Verbose) std::cerr<<"Smaller Ratio : Min="<<ratiosMin.min_value()<<" Max="<<ratiosMin.max_value()<<" Mean="<<ratiosMin.mean()<<"\n";
-    if(Verbose) std::cerr<<"Perimeters : Min="<<perimeters.min_value()<<" Max="<<perimeters.max_value()<<" Mean="<<perimeters.mean()<<"\n";
-    return true;
-}
-
-double shapesMatching( double gaussianError, const std::vector<vnl_vector<double> >& V1, const std::vector<vnl_vector<double> >& V2, std::vector<std::pair<double, vnl_vector_fixed<unsigned int,2> > > &matching)
-{
-    if(V1.size()<=0 || V2.size()<=0) return 0.0;
-    unsigned int ShapeDim = V2[0].size();
-    vnl_vector<double> ratiosMin;
-    vnl_vector<double> perimeters;
-    shapesProperties(gaussianError,V2,ratiosMin,perimeters);
-    // Seuil mini du coefficient de discrimination des sommets
-    // Les 2 cts les plus similaires sont au moins x fois plus grand l'un que l'autre
-    const double DiscrSommetMin = ratiosMin.mean();
-//  if(DiscrSommetMin<DiscrSommetTol) DiscrSommetMin=DiscrSommetTol;
-    const unsigned int size = V1[0].size();
-    unsigned int i,j;
-    double realMax=-1;
-    for( i=0 ; i<V1.size() ; ++i )
-        for( j=0 ; j<V2.size() ; ++j )
-        {
-            assert(V1[i].size()==size && V2[j].size()==size);
-            //if(smallerRatio(V1[i])>=DiscrSommetMin && smallerRatio(V2[j])>=DiscrSommetMin)
-            if(ratiosMin[j]>=DiscrSommetMin)
-            {
-                vnl_vector_fixed<unsigned int,2> index(i,j);
-                double similarite = (V1[i]-V2[j]).rms();
-            //  if(similarite<3) std::cout<<similarite<<"\n";
-                if(similarite>realMax) realMax=similarite;
-                if(similarite<=gaussianError*2*ShapeDim) matching.push_back(std::make_pair(similarite,index));
-            }
-        }
-//  std::cout<<"Shape matching Real Max : "<<realMax<<" shapematching size="<<matching.size()<<"\n";
-    return realMax;
-}
-
-unsigned int generateTrianglesList( /*unsigned int shapeSize, */double decimage, arlCore::PointList::csptr points, std::vector<vnl_vector<double> > &shapes,  std::vector< vnl_vector<unsigned int> > &index )
-{
-    const bool Verbose = false;
-    const unsigned int ShapeSize = 3;
-    unsigned int step = (unsigned int)(1.0/decimage);
-    if(step<1) step=1;
-    const bool ImpossiblePath = true;
-    unsigned int i,j,k/*,l*/;
-    vnl_vector<unsigned int> ix(ShapeSize);
-    vnl_vector<double> sh(ShapeSize);
-//  std::vector<std::pair<double,unsigned int> > V0(ShapeSize);
-    for( i=0 ; i<points->size() ; i+=step )
-        for( j=i+1 ; j<points->size() ; j+=step )
-            for( k=j+1 ; k< points->size() ; k+=step )
-            {   // Ordonnancement des distances
-                const double d0 = arlCore::distance((*points)[i],(*points)[j] );
-                const double d1 = arlCore::distance((*points)[j],(*points)[k] );
-                const double d2 = arlCore::distance((*points)[k],(*points)[i] );
-/*              V0[0]=std::make_pair(d0,i);
-                V0[1]=std::make_pair(d1,j);
-                V0[2]=std::make_pair(d2,k);
-                std::sort( V0.begin(), V0.end() );
-                for( l=0 ; l<ShapeSize ; ++l )
-                {
-                    sh[l]=V0[l].first;
-                    ix(l)=V0[l].second;
-                }*/
-                if( d0<=d1 && d1<=d2 ) {sh[0]=d0,sh[1]=d1,sh[2]=d2,ix[0]=i,ix[1]=j,ix[2]=k;}
-                else if( d0<=d2 && d2<=d1 ) {sh[0]=d0,sh[1]=d2,sh[2]=d1,ix[0]=j,ix[1]=i,ix[2]=k;}
-                    else if( d1<=d0 && d0<=d2 ) {sh[0]=d1,sh[1]=d0,sh[2]=d2,ix[0]=k,ix[1]=j,ix[2]=i;}
-                        else if( d1<=d2 && d2<=d0 ) {sh[0]=d1,sh[1]=d2,sh[2]=d0,ix[0]=j,ix[1]=k,ix[2]=i;}
-                            else if( d2<=d0 && d0<=d1 ) {sh[0]=d2,sh[1]=d0,sh[2]=d1,ix[0]=k,ix[1]=i,ix[2]=j;}
-                                else if( d2<=d1 && d1<=d0 ) {sh[0]=d2,sh[1]=d1,sh[2]=d0,ix[0]=i,ix[1]=k,ix[2]=j;}
-                                    else assert(ImpossiblePath);
-                shapes.push_back(sh);
-                index.push_back(ix);
-            }
-    if(Verbose)
-    {   // Affichage de la liste de points, de segments et d'index
-        for( i=0 ; i<points->size() ; ++i )
-            std::cout<<i<<" : "<< (*points)[i]->getString()<<"\n";
-        for( i=0 ; i<shapes.size() ; ++i )
-            std::cout<<i<<" : "<<shapes[i]<<" Index : "<<index[i]<<"\n";
-    }
-    return (unsigned int)shapes.size();
-}
-
-unsigned int arlCore::matching3D3D( PointList::csptr a, PointList::csptr b, double gaussianError, double decimage,
-                                    PointList::sptr  Va, PointList::sptr  Vb )
-{   // b = T*a ; A=echantillon mesure ; B=modele reel
-    const bool Verbose = false;
-    const unsigned int ShapeDim = 3; // Triangle = 3 cotes
-    const double ProbaMin=10e-1;//10e-6;
-    const double NumericNoise=1e-13;
-    const double SimilariteMax=gaussianError*ShapeDim+NumericNoise; // mm
-
-    Va->clear(); Vb->clear();
-    assert(a->getDimension()==b->getDimension());
-    assert(a->size()>2 && b->size()>2);
-    unsigned int i,j;
-    std::vector<vnl_vector<double> > V1, V2;
-    std::vector< vnl_vector<unsigned int> >index1, index2;
-    generateTrianglesList( /*ShapeDim, */decimage, a, V1, index1 );
-    generateTrianglesList( /*ShapeDim, */decimage, b, V2, index2 );
-
-    std::vector<std::pair<double, vnl_vector_fixed<unsigned int,2> > > matching;
-    double simMax = shapesMatching( gaussianError, V1, V2, matching);
-    if(simMax<0) return 0;
-    // Tableau des probabilits d'appariement
-    vnl_matrix<double> matchingProb(a->size(),b->size());
-    matchingProb.fill(1.0);
-    double prob;
-    for( i=0 ; i<matching.size() ; ++i )
-        if(matching[i].first<SimilariteMax)
-        {
-            if(simMax==0) prob = 1.0; else prob = matching[i].first/simMax;
-            const unsigned int shape1Index = matching[i].second(0);
-            const unsigned int shape2Index = matching[i].second(1);
-            for( j=0 ; j<ShapeDim ; ++j )
-                matchingProb(index1[shape1Index](j),index2[shape2Index](j)) *= prob;
-        }
-    if(Verbose) std::cout<<matchingProb<<"\n";
-    for( i=0 ; i<a->size() ; ++i )
-    {
-        unsigned int indexMinR=0, indexMinC;
-        double pMin = 1.0;
-        vnl_vector<double> row=matchingProb.get_row(i);
-        for( j=0 ; j<row.size() ; ++j )
-            if(row(j)<pMin){pMin=row(j);indexMinR=j;}
-        if(pMin<ProbaMin)
-        {
-            vnl_vector<double> column=matchingProb.get_column(indexMinR);
-            pMin=1.0;indexMinC=0;
-            for( j=0 ; j<column.size() ; ++j )
-                if(column(j)<pMin){pMin=column(j);indexMinC=j;}
-            if(indexMinC==i) // Est-ce bijectif ?
-            {
-                Va->push_back( (*a)[i]);
-                Vb->push_back( (*b)[indexMinR]);
-            }
-        }
-    }
-    assert(Va->size()==Vb->size());
-    if(Verbose) std::cout<<"Matching 3D3D Nb matching : "<<(unsigned int)Va->size()<<"\n";
-    return (unsigned int)Va->size();
-}
-
-bool arlCore::distance( PointList::csptr p1, PointList::csptr p2, std::vector<double> &distances )
-{
-    if(p1->getDimension()!=p2->getDimension()) return false;
-    unsigned int i, size=p1->size();
-    if(p2->size()<size) size=p2->size();
-    for( i=0 ; i<size ; ++i )
-        if( (*p1)[i] && (*p2)[i] )
-            distances.push_back( (*p1)[i]->distance( (*p2)[i]));
-        else distances.push_back(-1);
-    return true;
-}
-
-bool arlCore::save( const  std::vector< Point::sptr  >&pl, const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type, bool justVisible, bool overwrite )
-{
-    return internSave( pl, fileName, std::string(""), type, justVisible, overwrite );
-}
-
-bool arlCore::save( const  std::vector< Point::csptr  >&pl, const std::string &fileName, ARLCORE_POINT_SAVE_TYPE type, bool justVisible, bool overwrite )
-{
-    return internSave( pl, fileName, std::string(""), type, justVisible, overwrite );
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Reconst3D.cpp b/SrcLib/ARLcore/src/arlcore/Reconst3D.cpp
deleted file mode 100644
index 54fb715..0000000
--- a/SrcLib/ARLcore/src/arlcore/Reconst3D.cpp
+++ /dev/null
@@ -1,1194 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Reconst3D.h>
-
-#include <vcl_vector.h>
-#include <vnl/vnl_real_npolynomial.h>
-#include <vnl/vnl_cross.h>
-#include <vnl/algo/vnl_rnpoly_solve.h>
-#include <vnl/algo/vnl_matrix_inverse.h>
-#include <vnl/algo/vnl_powell.h>
-#include <vnl/algo/vnl_levenberg_marquardt.h>
-#include <vnl/algo/vnl_conjugate_gradient.h>
-
-#include <arlcore/Optimization.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/Misc.h>
-#include <arlcore/vnl_rigid_vector.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/UncertaintyPropag.h>
-
-using namespace std;
-
-bool reconstruction3D( const vector<arlCore::Point::csptr> &points2D, const vector<const arlCore::Camera*> &cameras, arlCore::Point::sptr point3D, arlCore::ARLCORE_RECONSTRUCTION3D methode, vector<double> &log, const bool pixelFrame );
-
-/**
- * @brief 3D reconstruction of a point that is seen by several cameras
- */
-bool arlCore::reconst3D(const std::vector<arlCore::Point::csptr>&list2D, const std::vector<arlCore::Camera> &cameras, arlCore::Point::sptr point3D,
-            arlCore::ARLCORE_RECONSTRUCTION3D methode, unsigned int &plane, std::vector<double> &log, double errorMax, bool propagateCov, const bool pixelFrame)
-{
-    std::vector<const arlCore::Camera*> cams;
-    unsigned int i;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return reconst3D( list2D, cams, point3D, methode, plane, log, errorMax, propagateCov, pixelFrame);
-}
-
-bool arlCore::reconst3D( const std::vector<arlCore::Point::csptr>&list2D, const std::vector<const arlCore::Camera*> &camsList, arlCore::Point::sptr point3D,
-            arlCore::ARLCORE_RECONSTRUCTION3D methode, unsigned int &plane, std::vector<double> &log, double errorMax, bool propagateCov, const bool pixelFrame)
-{
-    assert(point3D->size()==3);
-    assert(camsList.size()>1);
-    plane = camsList[0]->getPlane();
-    arlCore::Point::sptr p3D = arlCore::Point::New(3);
-    //FIXME : Adapt code with mobile cameras : Set calibration parameters in the same plane
-    if(reconstruction3D(list2D, camsList, p3D, methode, log, pixelFrame))
-        if(errorMax<0 || errorMax>=log[0])
-        {
-            point3D->set(p3D);
-            point3D->setVisible(true);
-            point3D->setColour(1,2,3);
-            point3D->setError(p3D->getError());
-            if(propagateCov) propagateCovarianceToReconst3D(list2D, camsList, point3D, methode, log, pixelFrame);
-            else
-            {
-                arlCore::vnl_covariance_matrix &cov = point3D->getCovMatrix();
-                cov = p3D->getCovMatrix();
-            }
-    /*      unsigned int i;
-            std::cout<<"RECONST3D ERROR ("<<methode<<") : ";
-            for( i=0 ; i<log.size() ; ++i )
-                std::cout<<log[i];
-            std::cout<<"\n";*/
-            return true;
-        }
-    point3D->setError(-1.0);
-    return false;
-}
-
-/**
- *  @brief : Triangulation of a 3D point from 2D points detected in 2 video images (and only 2)
- * which coordinates are written in the optical frames of the cameras. These coordinates
- * are obtained with the function arlCore::pixelPlaneToUnitFocalPlane
- *
- * param[in] : focalPts2D1 = 3D coordinates in the optical unit frame associated to camera 1
- * of the 2D point detected in cam 1
- * param[in] : focalPts2D1 = 3D coordinates in the optical unit frame associated to camera 2
- * of the 2D point detected in cam 2
- * param[in] : PassageMatrix 4x4 matrix between cam 1 and cam 2
- * param[in] : methode = trinagulation method choice (Horaud or Lines)
- *
- */
-bool simpleRecons3D( arlCore::Point::sptr point3D, const vnl_vector_fixed<double,3>& focalPt2D1, const vnl_vector_fixed<double,3>& focalPt2D2,
-                    vnl_matrix_fixed<double,4,4>& PassageMatrix, arlCore::ARLCORE_RECONSTRUCTION3D methode, double &error )
-{
-    switch(methode)
-    {
-        case arlCore::ARLCORE_R3D_HORAUD_APPROX :
-        case arlCore::ARLCORE_R3D_HORAUD_PERFECT :
-        {// METHODE ANALYTIQUE DE HORAUD (la plus simple et la plus rapide)
-            const double &x  = focalPt2D1(0);
-            const double &y  = focalPt2D1(1);
-            const double &x_ = focalPt2D2(0);
-            const double &bx = PassageMatrix(0,3);
-            const double &bz = PassageMatrix(2,3);
-            long double alpha = x*PassageMatrix(0,0) + y*PassageMatrix(0,1) + PassageMatrix(0,2);
-            long double beta  = x*PassageMatrix(2,0) + y*PassageMatrix(2,1) + PassageMatrix(2,2);
-            assert(beta*x_-alpha!=0);
-            if(beta*x_-alpha==0) return false;
-            long double z = (bx - bz*x_) /(beta*x_ -alpha);
-            //FIXME : Instabilit� num�rique quand (beta*x_-alpha) tend vers 0
-            //Probl�me constat� � partir de 0.1
-            error=fabs(beta*x_-alpha)/z; // FIXME error grand quand le denominateur tend vers 0
-            point3D->x(x*z);
-            point3D->y(y*z);
-            point3D->z(z);
-            point3D->setError(error);
-            return true;
-        }
-        case arlCore::ARLCORE_R3D_TWO_LINES_PERFECT :
-        case arlCore::ARLCORE_R3D_TWO_LINES_APPROX :
-        {// METHODE ANALYTIQUE DU MILIEU DES DEUX DROITES (tres rapide)
-            vnl_vector_fixed<double,3> I, J, v, n1, n2, m1C1, m2C2, C1C2;
-            vnl_vector_fixed<double,4> var, C2, m2;
-            vnl_matrix_fixed<double,4,4> P;
-            double num, denom, landa1, landa2;
-            unsigned int i;
-            P =  vnl_matrix_inverse<double>(PassageMatrix.as_matrix() );
-            var.put(0, 0.0); var.put(1, 0.0); var.put(2, 0.0); var.put(3, 1.0);
-            C2 = P.as_matrix() * var.as_vector();
-            // C2 est exprimee dans le repere liée à la caméra 1
-            var.put(0, focalPt2D2(0));
-            var.put(1, focalPt2D2(1));
-            var.put(2, focalPt2D2(2));
-            var.put(3, 1.0);
-            m2 = P.as_matrix() *var.as_vector();
-            // m2 est exprimée dans le repère liee à la caméra 1
-            m1C1 = (-1.0)*focalPt2D1;
-            var  = C2 - m2;
-            m2C2.put(0, var(0)); m2C2.put(1, var(1)); m2C2.put(2, var(2));
-            C1C2.put(0, C2(0)); C1C2.put(1, C2(1)); C1C2.put(2, C2(2));
-            // Determination du premier point I sur la droite de reprojection
-            v = vnl_cross_3d(m1C1.as_vector() , m2C2.as_vector() );
-            n1= vnl_cross_3d(v.as_vector(), m1C1.as_vector() );
-            double dot1=0, dot2=0;
-            for(i=0;i<3;++i)
-            {
-                dot1 +=  C1C2(i) * n1(i);
-                dot2 +=  m2C2(i) * n1(i);
-            }
-            num   = -1*dot1;
-            denom = -1*dot2;
-            assert(denom!=0);
-            if(denom==0) return false;
-            landa1 = num/denom;
-            I.put(0, C2(0) - landa1* m2C2(0) );
-            I.put(1, C2(1) - landa1* m2C2(1) );
-            I.put(2, C2(2) - landa1* m2C2(2) );
-            // Determination du deuxieme point J sur la droite de reprojection
-            n2 = vnl_cross_3d(v, m2C2);
-            dot1 = dot2 =0;
-            for(i=0;i<3;++i)
-            {
-                dot1 +=  C1C2(i) * n2(i);
-                dot2 +=  m1C1(i) * n2(i);
-            }
-            num   = dot1;
-            denom = -1*dot2;
-            assert(denom!=0);
-            landa2 = num/denom;
-            J.put(0, -1* landa2* m1C1(0) );
-            J.put(1, -1* landa2* m1C1(1) );
-            J.put(2, -1* landa2* m1C1(2) );
-            // On prend le barycentre de I et J comme estimation de la reconstruction
-            point3D->x(0.5*I(0) + 0.5*J(0));
-            point3D->y(0.5*I(1) + 0.5*J(1));
-            point3D->z(0.5*I(2) + 0.5*J(2));
-            // Calcul des distances entre les droites par deux méthodes différentes
-            // Cette valeur permet de savoir si les deux droites correspondent bien a un point a reconstruire
-//          v.normalize();
-//          error = 0;
-//          for( i=0 ; i<3 ; ++i )
-//              error +=  v(i) * C1C2(i);
-            error = sqrt (fabs (vnl_vector_ssd(I,J) ));
-            point3D->setError(error);
-            return true;
-        }
-    default: break;
-    }
-    return false;
-}
-
-bool reconsReproj(const vector<arlCore::Point::csptr> &points2D, const vector<const arlCore::Camera*> &cameras, arlCore::Point::sptr point3D, arlCore::ARLCORE_RECONSTRUCTION3D methode, vector<double> &log);
-bool reconstruction3D( const vector<arlCore::Point::csptr> &points2D, const vector<const arlCore::Camera*> &cameras,
-        arlCore::Point::sptr point3D, arlCore::ARLCORE_RECONSTRUCTION3D methode, vector<double> &log, const bool pixelFrame )
-{
-    log.clear();
-    if( points2D.size() != cameras.size() ) return false;
-    if( cameras.size() < 2 ) return false;
-//  for(i=0; i< points2D.size(); ++i)
-//    if(points2D[i]->size() != 2)
-//      cerr <<"Pb : tous les points video n'ont pas la bonne dimension i.e. 2" << endl;
-//  if(point3D->size() != 3)
-//    cerr <<"Pb : le point resultat reconstruit n'a pas la bonne dimension i.e. 3" << endl;
-    std::vector< vnl_vector_fixed<double,3> >focalPts2D;
-    unsigned int i;
-    double error;
-    switch(methode)
-    {
-    case arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION :
-    case arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY :
-        assert(pixelFrame); // FIXME
-        return reconsReproj(points2D, cameras, point3D, methode, log);
-    case arlCore::ARLCORE_R3D_HORAUD_APPROX :
-    case arlCore::ARLCORE_R3D_TWO_LINES_APPROX :
-    case arlCore::ARLCORE_R3D_HORAUD_PERFECT :
-    case arlCore::ARLCORE_R3D_TWO_LINES_PERFECT :
-    {
-        bool perfect = (methode==arlCore::ARLCORE_R3D_HORAUD_PERFECT || methode==arlCore::ARLCORE_R3D_TWO_LINES_PERFECT);
-        focalPts2D.resize(2);
-        for( i=0 ; i<focalPts2D.size() ; ++i )
-            if(pixelFrame)
-            {
-                assert(points2D[i]->size()==2);
-                cameras[i]->pixelPlaneToUnitFocalPlane(  points2D[i] , focalPts2D[i], perfect );
-            }
-            else
-            {
-                focalPts2D[i].put(0,points2D[i]->x());
-                focalPts2D[i].put(1,points2D[i]->y());
-                focalPts2D[i].put(2,1.0);
-            }
-        vnl_matrix_fixed<double,4,4> PM1_2 = cameras[1]->getExtrinsic() * cameras[0]->getInvExtrinsic();
-        simpleRecons3D ( point3D, focalPts2D[0], focalPts2D[1], PM1_2, methode, error);
-        cameras[0]->getInvExtrinsic().trf(point3D);
-        log.push_back(error); // 1/denom pour Horaud ou la distance entre les 2 droites
-        return true;
-    }
-    case arlCore::ARLCORE_R3D_MULTI_LINES_APPROX :
-    case arlCore::ARLCORE_R3D_MULTI_LINES_PERFECT :
-    {
-        std::vector< vgl_line_3d_2_points <double> >lines;
-        vgl_line_3d_2_points <double>line;
-        focalPts2D.resize(points2D.size());
-        for( i=0 ; i<focalPts2D.size() ; ++i )
-        {
-            if(pixelFrame)
-            {
-                assert(points2D[i]->size()==2);
-                cameras[i]->pixelPlaneToUnitFocalPlane( points2D[i] , focalPts2D[i], methode==arlCore::ARLCORE_R3D_MULTI_LINES_PERFECT );
-            }
-            else
-            {
-                focalPts2D[i].put(0,points2D[i]->x());
-                focalPts2D[i].put(1,points2D[i]->y());
-                focalPts2D[i].put(2,1.0);
-            }
-            if(cameras[i]->projectiveLine(focalPts2D[i], line))
-                lines.push_back(line);
-        } // Initialisation
-        vnl_matrix_fixed<double,4,4> PM1_2 = cameras[1]->getExtrinsic() * cameras[0]->getInvExtrinsic();
-        if(!simpleRecons3D ( point3D, focalPts2D[0], focalPts2D[1], PM1_2, arlCore::ARLCORE_R3D_TWO_LINES_APPROX, error)) return false;;
-        cameras[0]->getInvExtrinsic().trf(point3D);
-        vnl_vector<double> point3DSolution = point3D->getCoordinates();
-        arlCore::OptimiseLineIntersection reconstruction(lines);
-        vnl_powell compute_reconstruction(&reconstruction);
-        compute_reconstruction.minimize(point3DSolution);
-        for( i=0; i< 3 ; ++i )
-            point3D->set(i,point3DSolution(i));
-        log.push_back(compute_reconstruction.get_end_error() / points2D.size()); // Distance moyenne aux droites
-        point3D->setError(log.back());
-        log.push_back(compute_reconstruction.get_start_error() / points2D.size());
-    return true;
-    }
-    default: break;
-    }
-    return false;
-}
-
-/**
- * @brief
- * Rigid registration of a 3D point set so that its reprojection on one image fits a 2D point set
- *
- * This function compute the rigid transformation that registers a 3D rigid object (defined
- * in its own frame)  in the world frame of one calibrated camera (we call here
- * world frame the frame in which the camera were calibrated). In fact, this function corresponds
- * to arlCore::projectivePointsRegistration_3D_2D used with only one camera, but we add
- * an initialization procedure before launching it (arlCore::planarHomographyRegistration_3D_2D).
- * TODO This function works if the 3D model is planar (because of the initialization) !
- * TODO We have to retrieve this constraint
- */
-bool arlCore::monoViewPointRegistration3D2D( const arlCore::Camera &cam , const std::vector<arlCore::Point::csptr > &points2D,
-        PointList::csptr model3D, arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION method,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log, bool verbose )
-{
-    return monoViewPointRegistration3D2D( cam, points2D, model3D->getList(), T, method, optimiserParameters , log, verbose );
-}
-
-bool arlCore::monoViewPointRegistration3D2D( const arlCore::Camera &cam , const std::vector<arlCore::Point::csptr > &points2D,
-        const std::vector< arlCore::Point::sptr > &model3D, arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION method,
-        const std::vector<double> &optimiserParameters , std::vector<double> &log, bool verbose )
-{
-    const bool Refinement = method!=arlCore::ARLCORE_PR_UNKNOWN;
-    assert(model3D.size()>=points2D.size());
-//  plane=cam.getPlane(); // FIXME Parametre redondant ?
-    unsigned int i;
-    std::vector<arlCore::Point::csptr> p2D;
-    std::vector<arlCore::Point::csptr> p3D;
-    for( i=0 ; i<points2D.size() ; ++i )
-        if(points2D[i])
-            if(points2D[i]->isVisible())
-            {
-                p2D.push_back(points2D[i]);
-                p3D.push_back(model3D[i]);
-            }
-//  std::vector<double> optimiserParameters, log;
-    // TODO : Injecter une tolerance dans multiViewPointRegistration3D2D et sortir si elle n'est pas respectée : tol
-//  tol=0; // FIXME
-    // FIXME Tester la planeite du modele. Si inf a une certaine tolerance return false;
-    if(arlCore::planarHomographyRegistration_3D_2D(cam, p2D, p3D, T, optimiserParameters, log, verbose))
-    {
-        if(Refinement)
-        {
-            vector<const arlCore::Camera*>cams;
-            cams.push_back(&cam);
-            std::vector< std::vector<arlCore::Point::csptr> > p_2D;
-            p_2D.push_back(p2D);
-            arlCore::multiViewPointRegistration3D2D(cams, p_2D, p3D, T, method, optimiserParameters, log, verbose);
-        }
-        return true;
-    }
-    return false;
-}
-
-/**
- * @brief
- * Rigid registration of a 3D point set so that its reprojection on several images fits 2D point sets
- *
- * This function compute the rigid transformation that registers a 3D rigid object (defined
- * in its own frame)  in the world frame of several jointly calibrated camera (we call here
- * world frame the frame in which the camera were calibrated). Practically, this frame
- * corresponds to the position of a chessboard that has been used during the simultaneous
- * calibration of cameras.
- *
- * param[in] : cameras = camera vector used for the registration (it works also with one camera only)
- * param[in] : points2D = vector of vector of 2D points [j] detected in the camera [i]
- * param[in] : T = initialisation of the iterative registration
- * param[in] : methode = choice of the optimization criterion and method (more informations on each
- * criterion can be found in Optimization.h and in the following paper : S.Nicolau et.al. An Accuracy
- * Certified Augmented Reality System for Therapy Guidance. In Proc. of the 8th European Conference
- * on Computer Vision (ECCV 04), Part III, volume LNCS 3023, Prague, pages 79-91, May 2004)
- * param[in] : optimiserParameters = parameters for optimization function used (TODO still not used)
- *
- * param[out] : log
- *      EPPC:
- *           log[0] = criterion value at the end of optimization divided by the point number
- *           log[1] = criterion value at the beginning of optimization divided by the point number
- *           log[2] = part of the criterion value that corresponds to the 2D contribution (TODO not divided by the point number)
- *           log[3] = part of the criterion value that corresponds to the 3D contribution (TODO not divided by the point number)
- *           log[4] = stop criterion of the EPPC, corresponds to the distance between the 2 last transformations
- *      ISPPC & OSPPC:
- *           log[0] = criterion value at the end of optimization divided by the point number
- *           log[1] = criterion value at the beginning of optimization divided by the point number
- *
- * ISPPC corrsponds to the minimization of the reprojection criterion in the camera : sum i ||P(T*Mi) - mi ||^2
- * This function can be launched for on eor several cameras. Obviously, an initialization is better than nothing
- * but it generally works correctly without one (then it is identity).
- * ISPPC and OSPPC assumes an isotropic noise for 2D detection in all images
- * ISPPC_ANISOTROP and EPPC use the point covariance matrix in the criterion formula
- *
- * The detailed formula of each criterion is given in Optimization.h
- *
- */
-bool  arlCore::multiViewPointRegistration3D2D( const vector<arlCore::Camera> &cameras, const vector< vector< arlCore::Point::csptr > > &points2D, PointList::csptr model3D, arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION methode, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    unsigned int i;
-    std::vector<const arlCore::Camera*> cams;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return multiViewPointRegistration3D2D( cams, points2D, model3D, T, methode, optimiserParameters, log, verbose);
-}
-
-bool  arlCore::multiViewPointRegistration3D2D( const vector<const arlCore::Camera*> &cameras, const vector< vector< arlCore::Point::csptr > > &points2D, PointList::csptr model3D, arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION methode, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    return multiViewPointRegistration3D2D( cameras, points2D, model3D->getListCopy(), T, methode, optimiserParameters, log, verbose); //VAG PERFORMANCE !!!
-}
-
-bool  arlCore::multiViewPointRegistration3D2D( const vector<arlCore::Camera> &cameras, const vector< vector< arlCore::Point::csptr > > &points2D, const std::vector< arlCore::Point::csptr > &model3D, arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION methode, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    unsigned int i;
-    std::vector<const arlCore::Camera*> cams;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return multiViewPointRegistration3D2D( cams, points2D, model3D, T, methode, optimiserParameters, log, verbose);
-}
-
-bool  arlCore::multiViewPointRegistration3D2D( const vector<const arlCore::Camera*> &cameras, const vector< vector< arlCore::Point::csptr > > &points2D, const std::vector< arlCore::Point::csptr > &model3D, arlCore::vnl_rigid_matrix &T, arlCore::ARLCORE_PROJECTIVE_REGISTRATION methode, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    //if(cameras.size()<2) return false;
-    const unsigned int Nb2DPointsMin = 3;
-    const double EPPCfTolerance = 1e-6;
-    const double EPPCxTolerance = 1e-6;
-    const unsigned int Model3DSize = (unsigned int)model3D.size();
-    bool b = false;
-    log.clear();
-    unsigned int i,j;
-    double RMS = -1.0;
-    vnl_vector< double > init(6);
-    double nbVisiblePoints = 0.0;
-    for( i=0 ; i<cameras.size() ; ++i )
-    {
-        assert(cameras[i]);
-        if(!cameras[i]->isIntrinsicCalibrated()) return b;
-//      assert(Model3DSize==points2D[i].size());
-        if(Model3DSize!=points2D[i].size()) return b;
-        for( j=0 ; j<points2D[i].size() ; ++j )
-            if( points2D[i][j]!=0 )
-                if(points2D[i][j]->isVisible())
-                    ++nbVisiblePoints;
-    }
-    if(nbVisiblePoints<Nb2DPointsMin) return b;
-    if(methode==arlCore::ARLCORE_PR_EPPC)
-    {
-        const double RMSTrsf = 1e-4;
-        const unsigned int nbIterationsMax = 10;
-        vnl_vector< double > init_pts3D(3*Model3DSize), init_pts3D_precedent(3*Model3DSize), init_precedent(6);
-        init = arlCore::vnl_rigid_vector (T);
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i ) // TODO : Factoriser dans toute la fonction (attention OSPPC)
-        {
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-            for( j=0 ; j<3 ; ++j )
-                init_pts3D[3*i+j] = (*model3D[i])[j];
-        }
-        arlCore::ISPPC_cost_function ISPPC(cameras,estime3D,points2D, true);
-        vnl_powell computeISPPC(&ISPPC);
-        computeISPPC.minimize(init);
-        arlCore::EPPC_cost_function EPPC(cameras,model3D,points2D,T);
-        vnl_powell computeEPPC(&EPPC);
-        computeEPPC.set_f_tolerance(EPPCfTolerance);
-        computeEPPC.set_x_tolerance(EPPCxTolerance);
-        computeISPPC.set_f_tolerance(EPPCfTolerance);
-        computeISPPC.set_x_tolerance(EPPCxTolerance);
-        unsigned int nbIterations=0;
-        log.resize(5);
-        do
-        {
-            T=arlCore::vnl_rigid_matrix (arlCore::vnl_rigid_vector(init));
-//          std::cerr<<"ITERATION POW EPPC : "<<nbIterations<<std::endl;
-//          std::cerr<<"transfo ="<<std::endl<<T<<std::endl;
-//          std::cerr<<"erreur debut = "<<computeISPPC.get_start_error()<<std::endl;
-//          std::cerr<<"erreur fin = "<<computeISPPC.get_end_error()<<std::endl;
-            //Estimation des points 3D parfaits avec T(k+1)
-            computeEPPC.minimize(init_pts3D);
-            if(nbIterations==0) log[1]=sqrt(computeEPPC.get_start_error()/nbVisiblePoints);
-            init_precedent = init;
-            for(i=0; i<Model3DSize; ++i)
-                for( j=0 ; j<3 ; ++j )
-                    estime3D[i].put(j, init_pts3D[3*i+j]);
-            computeISPPC.minimize(init);
-            ++nbIterations;
-        }while( (init-init_precedent).rms()>RMSTrsf && nbIterations<nbIterationsMax );
-        RMS = sqrt(computeEPPC.get_end_error()/nbVisiblePoints);
-        log[0] = RMS;
-        // FIXME Ponderer les erreurs suivantes
-        log[2] = EPPC.get2Derror();
-        log[3] = EPPC.get3Derror();
-        log[4] = RMSTrsf;
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_EPPC_LM)
-    {
-        const double RMSTrsf = 1e-4;
-        const unsigned int nbIterationsMax = 10;
-        vnl_vector< double > init_pts3D(3*Model3DSize), init_pts3D_precedent(3*Model3DSize), init_precedent(6);
-        init = arlCore::vnl_rigid_vector (T);
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-        {
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-            for( j=0 ; j<3 ; ++j )
-                init_pts3D[3*i+j] = (*model3D[i])[j];
-        }
-        arlCore::ISPPC_LS_cost_function ISPPC(cameras,estime3D,points2D, 6, nbVisiblePoints, vnl_least_squares_function::use_gradient, true);
-        vnl_levenberg_marquardt computeISPPC(ISPPC);
-        computeISPPC.minimize_using_gradient(init);
-        arlCore::EPPC_LS_cost_function EPPC(cameras,model3D,points2D,T, 3*Model3DSize, nbVisiblePoints+Model3DSize, vnl_least_squares_function::use_gradient);
-        vnl_levenberg_marquardt computeEPPC(EPPC);
-        computeEPPC.set_f_tolerance(EPPCfTolerance);
-        computeEPPC.set_x_tolerance(EPPCxTolerance);
-        unsigned int nbIterations=0;
-        log.resize(5);
-        do
-        {
-            //std::cerr<<"ITERATION LM EPPC : "<<nbIterations<<std::endl;
-            T=arlCore::vnl_rigid_matrix (arlCore::vnl_rigid_vector(init));
-            //Estimation des points 3D parfaits avec T(k+1)
-            computeEPPC.minimize_using_gradient(init_pts3D);
-            if(nbIterations==0) log[1]=sqrt(computeEPPC.get_start_error()/nbVisiblePoints);
-            init_precedent = init;
-            for(i=0; i<Model3DSize; ++i)
-                for( j=0 ; j<3 ; ++j )
-                    estime3D[i].put(j, init_pts3D[3*i+j]);
-            computeISPPC.minimize_using_gradient(init);
-            ++nbIterations;
-        }while( (init-init_precedent).rms()>RMSTrsf && nbIterations<nbIterationsMax );
-        RMS = computeEPPC.get_end_error();
-        log[0] = RMS;
-        // FIXME Ponderer les erreurs suivantes
-        log[2] = EPPC.get2Derror();
-        log[3] = EPPC.get3Derror();
-        log[4] = RMSTrsf;
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_EPPC_CG)
-    {
-        const double RMSTrsf = 1e-4;
-        const unsigned int nbIterationsMax = 5;
-        vnl_vector< double > init_pts3D(3*Model3DSize), init_pts3D_precedent(3*Model3DSize), init_precedent(6);
-        init = arlCore::vnl_rigid_vector (T);
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-        {
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-            for( j=0 ; j<3 ; ++j )
-                init_pts3D[3*i+j] = (*model3D[i])[j];
-        }
-        arlCore::ISPPC_cost_function ISPPC(cameras,estime3D,points2D);
-        vnl_conjugate_gradient computeISPPC(ISPPC);
-        computeISPPC.minimize(init);
-        arlCore::EPPC_cost_function EPPC(cameras,model3D,points2D,T);
-        vnl_conjugate_gradient computeEPPC(EPPC);
-        computeEPPC.set_f_tolerance(EPPCfTolerance);
-        computeEPPC.set_x_tolerance(EPPCxTolerance);
-        unsigned int nbIterations=0;
-        do
-        {
-            T=arlCore::vnl_rigid_matrix (arlCore::vnl_rigid_vector(init));
-            //Estimation des points 3D parfaits avec T(k+1)
-            computeEPPC.minimize(init_pts3D);
-            init_precedent = init;
-            for( i=0 ; i<Model3DSize ; ++i )
-                for( j=0 ; j<3 ; ++j )
-                    estime3D[i].put(j, init_pts3D[3*i+j]);
-            computeISPPC.minimize(init);
-            ++nbIterations;
-        }while( (init-init_precedent).rms()>RMSTrsf && nbIterations<nbIterationsMax );
-        RMS = computeEPPC.get_end_error();
-        log.push_back(RMS);
-        log.push_back(sqrt(computeEPPC.get_start_error()/nbVisiblePoints));
-        // FIXME Ponderer les erreurs suivantes
-        log.push_back(EPPC.get2Derror());
-        log.push_back(EPPC.get3Derror());
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_ISPPC)
-    {
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::ISPPC_cost_function ISPPC(cameras,estime3D,points2D, false);
-        init = vec;
-        vnl_powell computeISPPC(&ISPPC);
-        computeISPPC.minimize(init);
-        RMS = sqrt(computeISPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeISPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_ISPPC_LM)
-    {
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::ISPPC_LS_cost_function ISPPC(cameras,estime3D,points2D, 6, nbVisiblePoints, vnl_least_squares_function::use_gradient, false);
-        init = vec;
-        vnl_levenberg_marquardt computeISPPC(ISPPC);
-        computeISPPC.minimize_using_gradient(init);
-        RMS = sqrt(computeISPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeISPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_ISPPC_ANISOTROP)
-    {
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::ISPPC_cost_function ISPPC(cameras,estime3D,points2D, true);
-        init = vec;
-        vnl_powell computeISPPC(&ISPPC);
-        computeISPPC.minimize(init);
-        RMS = sqrt(computeISPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeISPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_ISPPC_ANISOTROP_LM)
-    {
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::ISPPC_LS_cost_function ISPPC(cameras,estime3D,points2D, 6, nbVisiblePoints, vnl_least_squares_function::use_gradient, true);
-        init = vec;
-        vnl_levenberg_marquardt computeISPPC(ISPPC);
-        computeISPPC.minimize_using_gradient(init);
-        RMS = sqrt(computeISPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeISPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_ISPPC_CG)
-    {
-        std::vector< vnl_vector_fixed<double,4> > estime3D(Model3DSize);
-        for( i=0 ; i<Model3DSize ; ++i )
-            estime3D[i] = vnl_vector_fixed<double,4>((*model3D[i])[0], (*model3D[i])[1], (*model3D[i])[2], 1.0);
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::ISPPC_cost_function ISPPC(cameras,estime3D,points2D);
-        init = vec;
-        vnl_conjugate_gradient computeISPPC(ISPPC);
-        computeISPPC.minimize(init);
-        RMS = sqrt(computeISPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeISPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-
-    if(methode==arlCore::ARLCORE_PR_OSPPC)
-    {
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::OSPPC_cost_function OSPPC(cameras,model3D,points2D);
-        init = vec;
-        vnl_powell computeOSPPC(&OSPPC);
-        computeOSPPC.minimize(init);
-        RMS = sqrt(computeOSPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeOSPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_OSPPC_LM)
-    {
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::OSPPC_LS_cost_function OSPPC(cameras,model3D,points2D, 6, nbVisiblePoints, vnl_least_squares_function::use_gradient);
-        init = vec;
-        vnl_levenberg_marquardt computeOSPPC(OSPPC);
-        computeOSPPC.minimize_using_gradient(init);
-        RMS = sqrt(computeOSPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeOSPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    if(methode==arlCore::ARLCORE_PR_OSPPC_CG)
-    {
-        arlCore::vnl_rigid_vector vec(T);
-        arlCore::OSPPC_cost_function OSPPC(cameras,model3D,points2D);
-        init = vec;
-        vnl_conjugate_gradient computeOSPPC(OSPPC);
-        computeOSPPC.minimize(init);
-        RMS = sqrt(computeOSPPC.get_end_error()/nbVisiblePoints);
-        log.push_back(RMS);
-        log.push_back(sqrt(computeOSPPC.get_start_error()/nbVisiblePoints));
-        vec = init;
-        T = arlCore::vnl_rigid_matrix(vec);
-        b= true;
-    }
-    T.setRMS(RMS);
-    T.setStdDev(0.0);
-    return b;
-}
-
-/**
- * @brief   HOMOGRAPHY WHEN THE INTRINSIC PARAMETERS ARE UNKNOWN
- * *****************************************************************************************
- * This function is necessary for camera calibration (see Zhang. Z. A flexible new technique for camera
- * calibration). The notations have been kept from his paper. The idea is that the point of the
- * chessboard model are projectively equivalent to the points detected in the video image.
- * Then it exist an homography 3x3 H so that (assuming points on the chessboard have a Z coordinate
- * equal to 0) :
- *
- *       [u_i]       [X_i]
- * m_i = [v_i] = H x [Y_i]
- *       [w_i]       [ 1 ]
- *
- *
- * From a general point of view, this function provides "the best" homography between
- * two point sets in 2D.
- * Considering the camera calibration problem, the H matrix corresponds to the multiplication of
- * the intrinsic matrix and the extrinsic matrix:
- * [u]   [ -  h1  - ]  [X]        [ | |  |] [X]                                                 [fc1 0   cc1]
- * [v] = [ -  h2  - ]x [Y] =A x   [r1 r2 t]x[Y]  where A is the intrinsic parameter matrix =    [0   fc2 cc2]
- * [w]   [ -  h3  - ]  [1]        [ | |  |] [1]                                                 [0   0    1 ]
- *
- * where [u v w]' are PIXEL coordinates and not REAL. To find A and the extrinsic matrix, several poses
- * of the chessboard are necessary.
- *
- * To find H, we seek the solution that minimize the following system:
- * [X1 Y1 1 0 0 0 -u1X1 -u1Y1 -u1 ]   [ | ]
- * [.                          .  ]   [ h1 ]
- * [Xi Yi 1 0 0 0 -uiXi -uiYi -ui ]   [ | ]
- * [.                          .  ]   [ | ]
- * [XN YN 1 0 0 0 -uNXN -uNYN -uN ]  x[ h2 ]  = 0
- * [0 0 0 X1 Y1 1 -v1X1 -v1Y1 -v1 ]   [ | ]
- * [.                          .  ]   [ | ]
- * [0 0 0 Xi Yi 1 -viXi -viYi -vi ]   [ h3 ]
- * [.                          .  ]   [ | ]
- * [0 0 0 XN YN 1 -vNXN -vNYN -vN ]   [ | ]
- *                                                                            [ - h1 -]
- * where the h vector corresponds to the homography matrix that fulfils m_i = [ - h2 -]M_i
- *                                                                            [ - h3 -]
- * M are the coordinates of the pattern points [X Y 1.0] in the pattern frame (note the pattern MUST be planar)
- * m are the coordinates of its correspoding 3D points in the video image
- * Since the homography matrix is defined up to a scale factor, the solution is given by a svd
- * of the big matrix. Then we obtain the eigen vector associated to the smallest eigen value.
- *
- * To obtain an evaluation of the homography estimation quality, put optimiserParameters[0] to 1.
- * In that case, log[0] contains the reprojection error.
- * To apply the prenormalisation (that ensure a good computation of the svd) detailed in R. Hartely.
- * "In defence of the 8 points algorithm", put optimiserParameters[1] to 1. In practice, this did not
- *  change our results...
- * ******************************************************************************************/
-template <typename Type>
-bool internPlanarHomographyUnknownIntrinsic( const Type &points2D, const Type &model3D, vnl_matrix_fixed<double,3,3> &H, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    bool normalize =false;
-    bool error_log=false;
-    //ATTENTION : Points2D and  model3D doivent �tre parfaitement appareill�s :
-    // Tailles identiques, pas de pointeur null
-    if(points2D.size()<4) return false;
-    assert(points2D.size()==model3D.size());
-    unsigned int i, size=(unsigned int)model3D.size();
-    vnl_matrix<double> P(3,3);
-    vnl_matrix_fixed<double,4,4> T_tmp;
-    vnl_matrix<double> a_matrix(size*2, 9);
-    if(optimiserParameters.size() > 0)
-        if(optimiserParameters[0] == 1)
-            error_log = true;
-    if(optimiserParameters.size() > 1)
-        if(optimiserParameters[1] == 1)
-            normalize = true;
-    // PRENORMALISATION DES DONNEES cf "In defence of the 8 points algorithm" et "Pose reconstruction with
-    // uncalibrated CT imaging device"
-    double meanX_model3D=0, meanY_model3D=0, scale_model3D=0;
-    double meanX_points2D=0, meanY_points2D=0, scale_points2D=0;
-    vnl_matrix_fixed<double,3,3> norm_mat_model3D, norm_mat_points2D;
-    if(normalize)
-    {
-        for( i=0 ; i<size ; ++i )// calcul des moyennes et des ecart-types
-        {
-            meanX_model3D += model3D[i]->x();
-            meanY_model3D += model3D[i]->y();
-            meanX_points2D += points2D[i]->x();
-            meanY_points2D += points2D[i]->y();
-        }
-        meanX_model3D /= size; meanY_model3D /= size;  meanX_points2D/=size ;  meanY_points2D/=size ;
-        for( i=0 ; i<size ; ++i )
-        {
-            scale_model3D += sqrt( (model3D[i]->x() - meanX_model3D)*(model3D[i]->x() - meanX_model3D) + (model3D[i]->y() - meanY_model3D)*(model3D[i]->y() - meanY_model3D));
-            scale_points2D += sqrt( (points2D[i]->x() - meanX_points2D)*(points2D[i]->x() - meanX_points2D) + (points2D[i]->y() - meanY_points2D)*(points2D[i]->y() - meanY_points2D));
-        }
-        scale_model3D /= (size * 1.414213562373);//1.41421356237310 = sqrt(2)
-        scale_points2D /= (size * 1.414213562373);
-        norm_mat_model3D.set_identity();   norm_mat_points2D.set_identity();
-        norm_mat_model3D(0,0) = norm_mat_model3D(1,1) = 1/scale_model3D;
-        norm_mat_points2D(0,0) = norm_mat_points2D(1,1) = 1/scale_points2D;
-        norm_mat_model3D(0,2) = -meanX_model3D/scale_model3D;
-        norm_mat_model3D(1,2) = -meanY_model3D/scale_model3D;
-        norm_mat_points2D(0,2) = -meanX_points2D/scale_points2D;
-        norm_mat_points2D(1,2) = -meanY_points2D/scale_points2D;
-    }
-    for( i=0 ; i<size ; ++i )
-    {
-        if(normalize)
-        {
-            a_matrix.put(i,0, (model3D[i]->x() - meanX_model3D)/scale_model3D);
-            a_matrix.put(i,1, (model3D[i]->y() - meanY_model3D)/scale_model3D);
-        }
-        else
-        {
-            a_matrix.put(i,0, model3D[i]->x());
-            a_matrix.put(i,1, model3D[i]->y());
-        }
-        a_matrix.put(i,2, 1.0);
-        a_matrix.put(i,3, 0.0);
-        a_matrix.put(i,4, 0.0);
-        a_matrix.put(i,5, 0.0);
-        if(normalize)
-        {
-            double scaled_pt2D = (points2D[i]->x() - meanX_points2D)/scale_points2D;
-            a_matrix.put(i,6, (model3D[i]->x() - meanX_model3D)/scale_model3D*(-1)* scaled_pt2D);
-            a_matrix.put(i,7, (model3D[i]->y() - meanY_model3D)/scale_model3D*(-1)* scaled_pt2D);
-            a_matrix.put(i,8, (-1)*scaled_pt2D);
-        }
-        else
-        {
-            a_matrix.put(i,6, model3D[i]->x()*(-1)* points2D[i]->x());
-            a_matrix.put(i,7, model3D[i]->y()*(-1)* points2D[i]->x());
-            a_matrix.put(i,8, (-1)*points2D[i]->x());
-        }
-    }
-    for( i=size ; i<2*size ; ++i )
-    {
-        a_matrix.put(i,0, 0.0);
-        a_matrix.put(i,1, 0.0);
-        a_matrix.put(i,2, 0.0);
-        if(normalize)
-        {
-            a_matrix.put(i,3, (model3D[i-size]->x() - meanX_model3D)/scale_model3D);
-            a_matrix.put(i,4, (model3D[i-size]->y() - meanY_model3D)/scale_model3D);
-        }
-        else
-        {
-            a_matrix.put(i,3, model3D[i-size]->x());
-            a_matrix.put(i,4, model3D[i-size]->y());
-        }
-        a_matrix.put(i,5, 1.0);
-        if(normalize)
-        {
-            double scaled_pt2D = (points2D[i-size]->y() - meanY_points2D)/scale_points2D;
-            a_matrix.put(i,6, (model3D[i-size]->x() - meanX_model3D)/scale_model3D*(-1)*scaled_pt2D);
-            a_matrix.put(i,7, (model3D[i-size]->y() - meanY_model3D)/scale_model3D*(-1)*scaled_pt2D);
-            a_matrix.put(i,8, (-1)*scaled_pt2D);
-        }
-        else
-        {
-            a_matrix.put(i,6, model3D[i-size]->x()*(-1)*points2D[i-size]->y());
-            a_matrix.put(i,7, model3D[i-size]->y()*(-1)*points2D[i-size]->y());
-            a_matrix.put(i,8, (-1)*points2D[i-size]->y());
-        }
-    }
-//  TODO tester si c plus rapide de passer par vnl_symmetric_eigensystem plutot que vnl_svd
-//  vnl_symmetric_eigensystem<double> objet(a_matrix.transpose()*a_matrix);
-//  cerr << "null vector = "<<objet.nullvector() << endl;
-//  vnl_matrix<double> PP(3,3);
-//  PP.set(objet.nullvector().data_block());
-//  PP/=PP.get_column(0).two_norm();
-//  cerr << "Matrice PP estimee " << endl << PP << endl;
-//
-    //a_matrix.normalize_rows();
-    vnl_svd<double> svd(a_matrix);
-    //cerr << "svd(a_matrix) U =" <<endl << svd.U() <<endl;cerr << "svd(a_matrix) V =" <<endl << svd.V() <<endl;cerr << "svd(a_matrix) W =" <<endl << svd.W() <<endl;
-    //cerr << "Vecteur propre associe a valeur singuliere minimale " << endl << svd.nullvector() << endl;
-    P.set(svd.nullvector().data_block());
-//  cerr << "Matrice P estimee " << endl << P << endl;
-    if(normalize){
-        vnl_matrix<double> tmp = vnl_matrix_inverse<double>(norm_mat_points2D);
-        P = tmp * P * norm_mat_model3D;
-    }
-    P/=P.get_column(0).two_norm();//TODO cette normalisation est-elle necessaire ?
-    // on teste si l'homographie estimee recale l'objet derriere la camera ou pas
-    // si c'est le cas alors on multiplie P par -1;
-    //cerr << "Matrice P estimee apres normalisation" << endl << P << endl;
-    vnl_vector_fixed<double,3> var_3D, test;
-    var_3D(0) = model3D[0]->x() ;
-    var_3D(1) = model3D[0]->y();
-    var_3D(2) = 1.0;
-    test = P * var_3D;
-    if(test[2] < 0.0) P*=-1.0;
-    //cerr << "Matrice P estimee " << endl << P << endl;
-    //cerr << "norme colonne 1=" <<P.get_column(0).two_norm() << endl;
-    //cerr << "norme colonne 2=" <<P.get_column(1).two_norm() << endl;
-//  if(fabs(P.get_column(1).two_norm() - 1.0) > 1e-2)//TODO evaluer la bonne valeur d'erreur (empirique pour l'instant)
-//  {
-//      T.set_identity();
-//      return false;
-//  }
-    H = P;
-    if(error_log)
-    {
-        double erreur_reprojection = 0;
-        log.clear();
-        for( i=0 ; i<size ; ++i )
-        {
-            arlCore::Point::sptr tmp2D = arlCore::Point::New(2);
-            vnl_vector_fixed<double,3> model3D_tmp, tmp3D;
-
-            model3D_tmp.put(0,model3D[i]->x());model3D_tmp.put(1,model3D[i]->y());model3D_tmp.put(2,1.0);
-            //std::cerr<<"model3D_tmp =" <<model3D_tmp<<std::endl;
-            tmp3D = H * model3D_tmp.as_vector();
-            tmp2D->set(0, tmp3D(0)/tmp3D(2));
-            tmp2D->set(1, tmp3D(1)/tmp3D(2));
-            //std::cerr<<"tmp2D =" <<tmp2D.getString()<<std::endl;
-            //std::cerr<<"points2D[i] =" <<points2D[i]->getString()<<std::endl;
-            erreur_reprojection += points2D[i]->distance(tmp2D);
-        }
-        log.push_back(erreur_reprojection/size);
-        //log.push_back(P.get_column(1).two_norm());
-    }
-    return true;
-}
-
-bool arlCore::planarHomographyUnknownIntrinsic( const vector<arlCore::Point::sptr> &points2D, const vector< arlCore::Point::sptr > &model3D, vnl_matrix_fixed<double,3,3> &H, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    return internPlanarHomographyUnknownIntrinsic( points2D, model3D, H, optimiserParameters, log, verbose);
-}
-
-bool arlCore::planarHomographyUnknownIntrinsic( arlCore::PointList::csptr points2D, arlCore::PointList::csptr model3D, vnl_matrix_fixed<double,3,3> &H, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    return internPlanarHomographyUnknownIntrinsic( *points2D, *model3D, H, optimiserParameters, log, verbose);
-}
-
-/**
- *
- * @brief PLANAR HOMOGRAPHY REGISTRATION METHOD
- *******************************************************************************************
- * We are looking for the rigid matrix R,t so that :
- * [u]   [ [     ][  ] ] [ [     ][ ] ] [X]  [ | |  |] [X]
- * [v] = [ [  Rw ][tw] ]x[ [  R  ][t] ] [Y] =[r1 r2 t]x[Y]
- * [w]   [ [     ][  ] ] [ [     ][ ] ] [0]  [ | |  |] [1]
- *       [ [0 0 0][1 ] ] [ [0 0 0][1] ] [1]
- *
- * where [u v w]' are the REAL coordinates (in the unit focal plane) - and not pixellic
- *                                                                  [ - h1 -]
- * we write the matrix [r1 r2 t] under the homographic matrix    H =[ - h2 -] with 8 degrees of freedom
- *                                                                  [ - h3 -]
- * then we seek the solution that minimize the systeme :
- * [X1 Y1 1 0 0 0 -u1X1 -u1Y1 -u1 ]   [ | ]
- * [.                          .  ]   [ h1 ]
- * [Xi Yi 1 0 0 0 -uiXi -uiYi -ui ]   [ | ]
- * [.                          .  ]   [ | ]
- * [XN YN 1 0 0 0 -uNXN -uNYN -uN ]  x[ h2 ]  = 0
- * [0 0 0 X1 Y1 1 -v1X1 -v1Y1 -v1 ]   [ | ]
- * [.                          .  ]   [ | ]
- * [0 0 0 Xi Yi 1 -viXi -viYi -vi ]   [ h3 ]
- * [.                          .  ]   [ | ]
- * [0 0 0 XN YN 1 -vNXN -vNYN -vN ]   [ | ]
- *                                                                            [ - h1 -]
- * where the h vector corresponds to the homographic matrix that fulfills m = [ - h2 -]M
- *                                                                            [ - h3 -]
- * and M are the coordinates of the points of the PLANAR pattern [X Y 1.0] in the pattern frame
- * and m are the coordinates of its match in the video image in the REAL WORLD (in the unit focal plane)
- * Since the homographic matrix is defined up to a scale factor , the solution is given by the svd
- * of the big matrix. Then, we get the eigen vector associated to the smallest eigen value.
- * Once H is computed, we multiply this matrix so that the first column is of unit norm.
- * we compute r1 x r2 to find the third vector of the pseudo rotation matrix
- * then we seek the closest rotation matrix of this matrix using an svd.
- * Finally, we multiply left the found matrix with the inverse extrinsic matrix of the camera
- * To obtain a quality evaluation of the homography estimation, optimiserParameters[0]
- * must be set to 1. In that case, log[0] contains the reprojection error and log[1]
- * the norm of the first column of H (which should be equal to 1 !!).
- *
- * To apply the prenormalisation (which ensure a good calculation of the svd), proposed in
- * "In defence of the 8 points algorithm" (R. Hartley), optimiserParameters[1] must be set to 1.
- *
- */
-template <typename Type>
-bool internPlanarHomographyRegistration_3D_2D( const arlCore::Camera &camera, const vector<arlCore::Point::csptr> &points2D, const Type &model3D, arlCore::vnl_rigid_matrix &T, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    //return true;
-    if(!camera.isIntrinsicCalibrated()) return false;
-    //ATTENTION : Points2D and  model3D doivent être parfaitement appareillés :
-    // Tailles identiques, pas de pointeur null
-    bool normalize =true;
-    bool error_log=false;
-    if(points2D.size()<4) return false;
-    assert(points2D.size()==model3D.size());
-    unsigned int i, size=(unsigned int)model3D.size();
-    std::vector<vnl_vector_fixed<double,3> > focalPoints(size);
-    vnl_matrix_fixed<double,3,3> P, mat_tmp;
-    arlCore::vnl_rigid_matrix T_tmp;
-    vnl_matrix<double> a_matrix(size*2, 9);
-    if(optimiserParameters.size() > 0)
-        if(optimiserParameters[0] == 1)
-            error_log = true;
-    if(optimiserParameters.size() > 1)
-        if(optimiserParameters[1] == 1)
-            normalize = true;
-    // PRENORMALISATION DES DONNEES cf "In defence of the 8 points algorithm" et "Pose reconstruction with
-    // uncalibrated CT imaging device"
-    double meanX_model3D=0, meanY_model3D=0, scale_model3D=0;
-    double meanX_points2D=0, meanY_points2D=0, scale_points2D=0;
-    vnl_matrix_fixed<double,3,3> norm_mat_model3D, norm_mat_points2D;
-    if(normalize)
-    {
-        for( i=0 ; i<size ; ++i )// calcul des moyennes et des ecart-types
-        {
-            assert(model3D[i]);
-            assert(points2D[i]);
-            meanX_model3D += model3D[i]->x();
-            meanY_model3D += model3D[i]->y();
-            meanX_points2D += points2D[i]->x();
-            meanY_points2D += points2D[i]->y();
-        }
-        meanX_model3D /= size; meanY_model3D /= size;  meanX_points2D/=size ;  meanY_points2D/=size ;
-        for( i=0 ; i<size ; ++i )
-        {
-            scale_model3D += sqrt( (model3D[i]->x() - meanX_model3D)*(model3D[i]->x() - meanX_model3D) + (model3D[i]->y() - meanY_model3D)*(model3D[i]->y() - meanY_model3D));
-            scale_points2D += sqrt( (points2D[i]->x() - meanX_points2D)*(points2D[i]->x() - meanX_points2D) + (points2D[i]->y() - meanY_points2D)*(points2D[i]->y() - meanY_points2D));
-        }
-        scale_model3D /= (size * 1.414213562373);//1.41421356237310 = sqrt(2)
-        scale_points2D /= (size * 1.414213562373);
-        norm_mat_model3D.set_identity();   norm_mat_points2D.set_identity();
-        norm_mat_model3D(0,0) = norm_mat_model3D(1,1) = 1/scale_model3D;
-        norm_mat_points2D(0,0) = norm_mat_points2D(1,1) = 1/scale_points2D;
-        norm_mat_model3D(0,2) = -meanX_model3D/scale_model3D;
-        norm_mat_model3D(1,2) = -meanY_model3D/scale_model3D;
-        norm_mat_points2D(0,2) = -meanX_points2D/scale_points2D;
-        norm_mat_points2D(1,2) = -meanY_points2D/scale_points2D;
-    }
-    for( i=0 ; i<size ; ++i )
-    {
-        assert(points2D[i]);
-        assert(model3D[i]);
-        camera.pixelPlaneToUnitFocalPlane( points2D[i], focalPoints[i], false );
-        if(normalize)
-        {
-            a_matrix.put(i,0, (model3D[i]->x() - meanX_model3D)/scale_model3D);
-            a_matrix.put(i,1, (model3D[i]->y() - meanY_model3D)/scale_model3D);
-        }
-        else
-        {
-            a_matrix.put(i,0, model3D[i]->x());
-            a_matrix.put(i,1, model3D[i]->y());
-        }
-        a_matrix.put(i,2, 1.0);
-        a_matrix.put(i,3, 0.0);
-        a_matrix.put(i,4, 0.0);
-        a_matrix.put(i,5, 0.0);
-        if(normalize)
-        {
-            double scaled_pt2D = (focalPoints[i](0) - meanX_points2D)/scale_points2D;
-            a_matrix.put(i,6, (model3D[i]->x() - meanX_model3D)/scale_model3D*(-1)* scaled_pt2D);
-            a_matrix.put(i,7, (model3D[i]->y() - meanY_model3D)/scale_model3D*(-1)* scaled_pt2D);
-            a_matrix.put(i,8, (-1)*scaled_pt2D);
-        }
-        else
-        {
-            a_matrix.put(i,6, model3D[i]->x()*(-1)*focalPoints[i](0));
-            a_matrix.put(i,7, model3D[i]->y()*(-1)*focalPoints[i](0));
-            a_matrix.put(i,8, (-1)*focalPoints[i](0));
-        }
-    }
-    for( i=size ; i<2*size ; ++i )
-    {
-        assert(model3D[i-size]);
-        a_matrix.put(i,0, 0.0);
-        a_matrix.put(i,1, 0.0);
-        a_matrix.put(i,2, 0.0);
-        if(normalize)
-        {
-            a_matrix.put(i,3, (model3D[i-size]->x() - meanX_model3D)/scale_model3D);
-            a_matrix.put(i,4, (model3D[i-size]->y() - meanY_model3D)/scale_model3D);
-        }
-        else
-        {
-            a_matrix.put(i,3, model3D[i-size]->x());
-            a_matrix.put(i,4, model3D[i-size]->y());
-        }
-        a_matrix.put(i,5, 1.0);
-        if(normalize)
-        {
-            double scaled_pt2D = (focalPoints[i-size](1) - meanY_points2D)/scale_points2D;
-            a_matrix.put(i,6, (model3D[i-size]->x() - meanX_model3D)/scale_model3D *(-1)* scaled_pt2D);
-            a_matrix.put(i,7, (model3D[i-size]->y() - meanY_model3D)/scale_model3D *(-1)* scaled_pt2D);
-            a_matrix.put(i,8, (-1)*scaled_pt2D);
-        }
-        else
-        {
-            a_matrix.put(i,6, model3D[i-size]->x()*(-1)*focalPoints[i-size](1));
-            a_matrix.put(i,7, model3D[i-size]->y()*(-1)*focalPoints[i-size](1));
-            a_matrix.put(i,8, (-1)*focalPoints[i-size](1));
-        }
-    }
-//  TODO tester si c plus rapide de passer par vnl_symmetric_eigensystem plutot que vnl_svd
-//  vnl_symmetric_eigensystem<double> objet(a_matrix.transpose()*a_matrix);
-//  cerr << "null vector = "<<objet.nullvector() << endl;
-//  cerr << "tAA = "<<a_matrix.transpose()*a_matrix << endl;
-//  vnl_matrix<double> PP(3,3);
-//  PP.set(objet.nullvector().data_block());
-//  PP/=PP.get_column(0).two_norm();
-//  cerr << "Matrice PP estimee " << endl << PP << endl;
-//
-    //a_matrix.normalize_rows();
-    vnl_svd<double> svd(a_matrix);
-    //cerr << "svd(a_matrix) U =" <<endl << svd.U() <<endl;cerr << "svd(a_matrix) V =" <<endl << svd.V() <<endl;cerr << "svd(a_matrix) W =" <<endl << svd.W() <<endl;
-    //cerr << "Vecteur propre associe a valeur singuliere minimale " << endl << svd.nullvector() << endl;
-    P.set(svd.nullvector().data_block());
-    if(normalize){
-        vnl_matrix<double> tmp = vnl_matrix_inverse<double>(norm_mat_points2D);
-        P = tmp * P.as_matrix() * norm_mat_model3D;
-    }
-    P/=P.get_column(0).two_norm();
-    // on teste si l'homographie estimee recale l'objet derriere la camera ou pas
-    // si c'est le cas alors on multiplie P par -1;
-    vnl_vector_fixed<double,3> var_3D, test;
-    var_3D(0) = model3D[0]->x() ;
-    var_3D(1) = model3D[0]->y();
-    var_3D(2) = 1.0;
-    test = P * var_3D;
-    if(test[2] < 0.0) P*=-1.0;
-    //cerr << "Matrice P estimee " << endl << P << endl;
-    //cerr << "norme colonne 1=" <<P.get_column(0).two_norm() << endl;
-    //cerr << "norme colonne 2=" <<P.get_column(1).two_norm() << endl;
-//  if(fabs(P.get_column(1).two_norm() - 1.0) > 1e-2)//TODO evaluer la bonne valeur d'erreur (empirique pour l'instant)
-//  {
-//      T.set_identity();
-//      return false;
-//  }
-    mat_tmp.set_column(0, P.get_column(0));
-    mat_tmp.set_column(1, P.get_column(1));
-    mat_tmp.set_column(2, vnl_cross_3d(P.get_column(0), P.get_column(1)));
-    arlCore::vnl_rotation3d_matrix rot_mat(mat_tmp);
-    rot_mat.closest_rotation();
-    T_tmp.set_identity();
-    T_tmp.setRotation(rot_mat);
-    for( i=0 ; i<3 ; ++i )
-        T_tmp.put(i,3, P(i,2));
-    T = camera.getInvExtrinsic() * T_tmp.as_matrix();
-    if(error_log)
-    {
-        double erreur_reprojection = 0;
-        log.clear();
-        for( i=0 ; i<size ; ++i )
-        {
-            arlCore::Point::sptr tmp3D = arlCore::Point::New(3);
-            arlCore::Point::sptr tmp2D = arlCore::Point::New(2);
-            T.trf( model3D[i] , tmp3D );
-            camera.project3DPoint( tmp3D, tmp2D );
-            erreur_reprojection += points2D[i]->distance(tmp2D);
-        }
-        log.push_back(erreur_reprojection/size);
-        log.push_back(P.get_column(1).two_norm());
-    }
-    return true;
-}
-
-bool arlCore::planarHomographyRegistration_3D_2D( const arlCore::Camera &camera, const vector<arlCore::Point::csptr> &points2D, const std::vector< arlCore::Point::csptr > &model3D, arlCore::vnl_rigid_matrix &T, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    return internPlanarHomographyRegistration_3D_2D( camera, points2D, model3D, T, optimiserParameters, log, verbose);
-}
-/*
-bool arlCore::planarHomographyRegistration_3D_2D( const arlCore::Camera &camera, const vector<arlCore::Point::sptr> &points2D, PointList::csptr model3D, arlCore::vnl_rigid_matrix &T, const vector<double> &optimiserParameters, vector<double> &log, bool verbose)
-{
-    return internPlanarHomographyRegistration_3D_2D( camera, points2D, model3D, T, optimiserParameters, log, verbose);
-}*/
-
-////////////////////////////////////////////////////////////////////////////////////////////////////////
-// en entree :
-// points2D : liste de arlCore::Point correspond aux coordonnees image (pts pixel) dans toutes les
-// cameras du point qu'on veut reconstruire
-// point3D : resultat de la reconstruction
-// methode : choix de la methode parmi (reprojection_optimisation ou reprojection_optimisation_uncertainty
-// log :qques valeurs importantes pour la qualite de la reconstruction
-//
-// reprojection_optimisation : methode iterative de reconstruction sans prise en compte de la
-// covariance sur les points 2D. Initialisation avec two_lines_approx
-// reprojection_optimisation_uncertainty : methode iterative de reconstruction avec prise en compte de la
-// covariance sur les points 2D. Initialisation avec two_lines_approx
-// En principe, methode la plus lente
-////////////////////////////////////////////////////////////////////////////////////////////////////////
-bool reconsReproj(const vector<arlCore::Point::csptr> &points2D, const vector<const arlCore::Camera*> &cameras, arlCore::Point::sptr point3D, arlCore::ARLCORE_RECONSTRUCTION3D methode, vector<double> &log)
-{
-    unsigned int i;
-    bool b=false;
-    vector<double> log_tmp;
-    reconstruction3D(points2D, cameras, point3D, arlCore::ARLCORE_R3D_TWO_LINES_APPROX, log_tmp, true);
-    vnl_vector<double> point3DSolution = point3D->getCoordinates();
-    // Methode iterative de reprojection optimale avec correction de la distorsion
-    if( methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION )
-    {
-        arlCore::OptimiseReprojection reconstruction(cameras, points2D);
-        vnl_powell compute_reconstruction(&reconstruction);
-        compute_reconstruction.minimize(point3DSolution);
-        log.push_back(compute_reconstruction.get_end_error() / points2D.size());
-        log.push_back(compute_reconstruction.get_start_error() / points2D.size() );
-        b=true;
-    }
-    // Methode iterative de reprojection optimale avec correction de la distorsion
-    // et prise en compte de la covariance
-    if( methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY )
-    {
-        arlCore::OptimiseReprojectionUncertainty reconstruction(cameras, points2D);
-        vnl_powell compute_reconstruction(&reconstruction);
-        compute_reconstruction.minimize(point3DSolution);
-        log.push_back(compute_reconstruction.get_end_error() / points2D.size() );
-        log.push_back(compute_reconstruction.get_start_error() / points2D.size() );
-        b=true;
-    }
-    for( i=0 ; i<3 ; ++i )
-        point3D->set(i,point3DSolution(i));
-    if(log.size()>0) point3D->setError(log[0]);
-    return b;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Recorder.cpp b/SrcLib/ARLcore/src/arlcore/Recorder.cpp
deleted file mode 100644
index 747bfdc..0000000
--- a/SrcLib/ARLcore/src/arlcore/Recorder.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Recorder.h>
-
-arlCore::Recorder::Recorder( void ):
-m_recorderDirectory(""),
-m_fullRecorderDirectory(""),
-m_recorderFullName(""),
-m_recorderFlag(false),
-m_recorderAfterRender(false),
-m_nbSnapshots(-1)
-{}
-
-arlCore::Recorder::~Recorder( void )
-{}
-
-bool arlCore::Recorder::getRecorderFilename( std::string &fileName )
-{
-    bool b = m_recorderHandle.is_open();
-    if(b) fileName = m_recorderFullName;
-    else fileName = "";
-    return b;
-}
-
-bool arlCore::Recorder::getRecorderDirectory( std::string &directory )
-{
-    bool b = m_recorderHandle.is_open();
-    if(b) directory = m_recorderDirectory;
-    else directory = "";
-    return b;
-}
-
-bool arlCore::Recorder::startRecorder( long int nbSnapshots, bool afterRender )
-{
-    m_nbSnapshots = nbSnapshots;
-    if( m_recorderHandle.is_open() && m_nbSnapshots!=0 )
-        m_recorderFlag=true;
-    else m_recorderFlag=false;
-    m_recorderAfterRender = afterRender;
-    return m_recorderFlag;
-}
-
-bool arlCore::Recorder::stopRecorder( void )
-{
-    m_recorderFlag=false;
-    return m_recorderFlag;
-}
-
-bool arlCore::Recorder::isRecording( void )
-{
-    return m_recorderFlag;
-}
-
-void arlCore::Recorder::closeRecorder( void )
-{
-    stopRecorder();
-    m_recorderHandle.close();
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Scene.cpp b/SrcLib/ARLcore/src/arlcore/Scene.cpp
deleted file mode 100644
index eabf34c..0000000
--- a/SrcLib/ARLcore/src/arlcore/Scene.cpp
+++ /dev/null
@@ -1,282 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Scene.h>
-
-#include <fstream>
-
-#include <arlcore/SmartPointsList.h>
-#include <arlcore/vnl_rotation3d_vector.h>
-
-arlCore::Scene::Scene( PlaneSystem &universe ):
-m_cameras(universe),
-m_universe(universe)
-{
-    m_tags = arlCore::Tags::New( universe , std::string() );
-}
-
-arlCore::Scene::Scene( PlaneSystem &universe, Tags::sptr tags ):
-m_cameras(universe),
-m_universe(universe)
-{
-    //VAG FIXMEm_tags->copy(tags);
-    assert(false); //VAG
-}
-
-arlCore::Scene::~Scene( void )
-{
-    assert(m_tags);
-}
-
-arlCore::Tag::sptr arlCore::Scene::addTag(unsigned int nbPoints, ARLCORE_SHAPE shapeType, Point::csptr centre, double size)
-{
-    PointList::sptr pointsMonde = PointList::New();
-    pointsMonde->shapeRandom(nbPoints, shapeType, centre, size);
-    return m_tags->addTag(pointsMonde);
-}
-
-bool arlCore::Scene::plot( void ) const
-{
-    assert(false); //VAG FIXME
-    /*
-    const bool JustVisible = false;
-    const bool Overwrite = true;
-    std::fstream f1,f2;
-    unsigned int i;
-    for( i=0 ; i<m_tags->size() ; ++i )
-        m_tags->getTag(i)->getGeometry().save("c:/000000.dat", ARLCORE_POINT_SAVE_GNUPLOT, JustVisible, Overwrite);
-    f1.open ("c:/000000.dat", std::fstream::out | std::fstream::app);
-    Point pt0(0.0, 0.0, 0.0),pt1(400.0, 0.0, 0.0),pt2(0.0, 300.0, 0.0), pt;
-    for( i=0 ; i<m_cameras.size() ; ++i )
-    {
-        m_cameras[i].getInvExtrinsic().trf(pt0, pt);
-        f1<<"\n"<<pt.x()<<" "<<pt.y()<<" "<<pt.z();
-        m_cameras[i].getInvExtrinsic().trf(pt1, pt);
-        f1<<"\n"<<pt.x()<<" "<<pt.y()<<" "<<pt.z();
-        m_cameras[i].getInvExtrinsic().trf(pt2, pt);
-        f1<<"\n"<<pt.x()<<" "<<pt.y()<<" "<<pt.z();
-    }
-    f1.close();
-    //TODO Afficher tous les tags avec des couleurs differentes
-    f2.open (TMP_FILE, std::fstream::out);
-    if(!f2.is_open()) return false;
-    f2<<"set title 'Scene'\n";
-    f2<<"splot \"c:/000000.dat\"\n";
-    for( i=0 ; i<m_cameras.size() ; ++i )
-    {
-        m_cameras[i].getInvExtrinsic().trf(pt0, pt);
-        f2<<"set label \""<<i+1<<"\" at "<<pt.x()<<","<<pt.y()<<","<<pt.z()<<"\n";
-        f2<<"set arrow "<<i+1<<" from "<<pt.x()<<","<<pt.y()<<","<<pt.z()<<" to 0,0,0\n";
-    }
-    f2<<"pause -1 \"Hit return to continue\"\n";
-    f2.close();
-    system(GNUPLOT_EXE );
-    //exec("d:/gnuplot/bin/wgnuplot", "c:/000000.dem" );
-
-    */
-    return true;
-}
-
-arlCore::PlaneSystem& arlCore::Scene::getPlaneSystem( void )
-{
-    return m_universe;
-}
-
-const arlCore::CameraList& arlCore::Scene::getCameras( void ) const
-{
-    return m_cameras;
-}
-
-unsigned int arlCore::Scene::getNbCameras( void ) const
-{
-    return (unsigned int)m_cameras.size();
-}
-
-
-/*bool arlCore::Scene::nextImages( unsigned int step )
-{
-    setTime();
-    unsigned int i;
-    for( i=0 ; i<m_cameras.size() ; ++i )
-        if(m_images[i]!=0) m_images[i]->fill(0);
-    return dynamicBehavior(step);
-}*/
-/*
-unsigned int arlCore::Scene::detection( unsigned int cam, arlCore::SmartPointList &spl, std::vector< const arlCore::Tag::sptr > &tagsDetected, std::map< const arlCore::Tag::sptr, unsigned int >& allTagsDetected )
-{
-    return detectionBehavior( cam, spl, tagsDetected, allTagsDetected );
-}*/
-
-bool arlCore::Scene::addCameras(unsigned int nbCameras, Point::csptr  centre,
-                            double sphereRadius, double distMin,
-                            const std::vector<double> &intrinsic_param,
-                            const std::vector<double> &intrinsic_range)
-{
-    unsigned int i, j;
-    // tirage des points de vue des cameras
-    // on tire d'abord sa position dans une sphere autour de centre
-    // puis on l'eloigne du point de mire de la distance distMin
-    PointList::sptr CameraPOV = PointList::New(3);
-    double scalar, dist;
-    CameraPOV->shapeRandom(nbCameras,ARLCORE_SHAPE_SPHERE, centre, sphereRadius);
-    //for( j=0 ; j<nb_camera ; ++j )
-        //cerr<< "CameraPOV 1= " << CameraPOV[j]->getString() << endl;
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        dist = (*CameraPOV)[i]->distance(centre);
-        scalar = (dist+distMin)/dist;
-        for( j=0 ; j<3 ; ++j )
-            (*CameraPOV)[i]->set(j,((*(*CameraPOV)[i])[j]- (*centre)[j])*scalar + (*centre)[j] );
-    }
-    //for( j=0 ; j<nb_camera ; ++j )
-        //cerr<< "CameraPOV 2= " << CameraPOV[j]->getString() << endl;
-    // tirage des parametres intrinseques
-    Point::sptr tmp_intrinsic = Point::New( (unsigned int)intrinsic_param.size() );
-    Point::sptr tmp_intrinsic_var = Point::New( (unsigned int)intrinsic_param.size() );
-
-    std::vector<Point::sptr> tirage_intrinsic;
-    for( i=0 ; i<intrinsic_param.size() ; ++i )
-        tmp_intrinsic->set(i,intrinsic_param[i]);
-    tmp_intrinsic_var = tmp_intrinsic;
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        for( j=0 ; j<intrinsic_param.size() ; ++j )
-            tmp_intrinsic_var->addUniformNoise(j, intrinsic_range[j]);
-        tirage_intrinsic.push_back(tmp_intrinsic_var);
-        tmp_intrinsic_var = tmp_intrinsic;
-        //cerr<< "tirage_intrinsic = " << tirage_intrinsic[j].getString() << endl;
-    }
-    // construction des cameras synthetiques
-    std::vector<double> intrinsic;
-    uint32HL GUID={0,0}; // FIXME
-    unsigned int width=800, heigth=600; // FIXME
-    for(i=0; i<nbCameras; i++)
-    {
-        intrinsic.clear();
-        for(j=0; j<intrinsic_param.size(); j++)
-            intrinsic.push_back( (*(tirage_intrinsic[i]))[j]);
-        m_cameras.push_back( GUID, width, heigth );
-        m_cameras[i].syntheticCamera( centre , (*CameraPOV)[i] , intrinsic);
-        //cerr<< "CameraPOV 3= " << CameraPOV[j]->getString() << endl;
-        //intrinsic.clear();
-        //cerr<< "CamParam ["<<i<<"]= " << CamParam[i]->getString() << endl;
-    }
-    for( i=1 ; i<m_cameras.size() ; ++i )
-        m_universe.setIdentity( m_cameras[i-1].getPlane(), m_cameras[i].getPlane() );
-    return true;
-}
-
-bool arlCore::Scene::addCameras(unsigned int nbCameras, Point::csptr  centre,
-                            double sphereRadius, double distMin,
-                            const std::vector<double> &intrinsic_param,
-                            const std::vector<double> &intrinsic_range,
-                            double angleMin)
-{
-    unsigned int i, j;
-    // tirage des points de vue des cameras
-    // on tire d'abord sa position dans une sphere autour de centre
-    // puis on l'eloigne du point de mire de la distance distMin
-    PointList::sptr CameraPOV = PointList::New(3);
-    PointList::sptr CameraPOV_before = PointList::New(3);
-    double scalar, dist;
-    CameraPOV_before->shapeRandom(nbCameras,ARLCORE_SHAPE_SOLIDANGLE, centre, sphereRadius, angleMin);
-    //for(j=0; j<nb_camera; j++)
-        //cerr<< "CameraPOV 1= " << CameraPOV[j]->getString() << endl;
-
-    // choose a random direction for the solid angle
-    vnl_vector_fixed<double,3> t_null(0,0,0);
-    vnl_rotation3d_vector random_vector;
-    random_vector.uniform_random();// a random rotation is created
-    vnl_rigid_matrix mat( (vnl_rotation3d_matrix) random_vector, t_null);//this rigid matrix with the random rotation is applied to CameraPOV_before
-    mat.trf(CameraPOV_before, CameraPOV);
-
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        dist = (*CameraPOV)[i]->distance(centre);
-        scalar = (dist+distMin)/dist;
-        for( j=0 ; j<3 ; ++j )
-            (*CameraPOV)[i]->set(j,((*(*CameraPOV)[i])[j]- (*centre)[j])*scalar + (*centre)[j] );
-    }
-    //for(j=0; j<nb_camera; j++)
-        //cerr<< "CameraPOV 2= " << CameraPOV[j]->getString() << endl;
-    // tirage des parametres intrinseques
-    Point::sptr tmp_intrinsic = Point::New((unsigned int)intrinsic_param.size());
-    Point::sptr tmp_intrinsic_var = Point::New((unsigned int)intrinsic_param.size());
-    std::vector<Point::sptr> tirage_intrinsic;
-    for( i=0 ; i<intrinsic_param.size() ; ++i )
-        tmp_intrinsic->set(i, intrinsic_param[i]);
-    tmp_intrinsic_var = tmp_intrinsic;
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        for( j=0 ; j<intrinsic_param.size() ; ++j )
-            tmp_intrinsic_var->addUniformNoise(j, intrinsic_range[j]);
-        tirage_intrinsic.push_back(tmp_intrinsic_var);
-        tmp_intrinsic_var = tmp_intrinsic;
-        //cerr<< "tirage_intrinsic = " << tirage_intrinsic[j].getString() << endl;
-    }
-    // construction des cameras synthetiques
-    uint32HL GUID={0,0}; // FIXME
-    unsigned int width=800, heigth=600; // FIXME
-    std::vector<double> intrinsic;
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        intrinsic.clear();
-        for( j=0 ; j<intrinsic_param.size() ; ++j )
-            intrinsic.push_back( (*(tirage_intrinsic[i]))[j]);
-//      m_cameras.push_back( Camera (m_universe) );
-        m_cameras.push_back( GUID, width, heigth );
-        m_cameras.back().syntheticCamera( centre ,  (*CameraPOV)[i] , intrinsic);
-        //cerr<< "CameraPOV 3= " << CameraPOV[j]->getString() << endl;
-        //intrinsic.clear();
-        //cerr<< "CamParam ["<<i<<"]= " << CamParam[i]->getString() << endl;
-    }
-    for( i=0 ; i<m_cameras.size()-1 ; ++i )
-        for( j=i+1 ; j<m_cameras.size() ; ++j )
-            m_universe.setIdentity(m_cameras[i].getPlane(),m_cameras[j].getPlane());
-    return true;
-}
-
-arlCore::Tags  &arlCore::Scene::getTags( void )
-{
-    return *m_tags;
-}
-
-bool arlCore::Scene::dynamicBehavior( unsigned int step )
-{
-    return false;
-}
-
-unsigned int arlCore::Scene::detectionBehavior( unsigned int cam, SmartPointList::sptr , std::vector< Tag::csptr > &tags, std::map< Tag::csptr, unsigned int >& allTags )
-{
-    return 0;
-}
-
-unsigned int arlCore::Scene::detection( unsigned int camNo, unsigned int tagNo, SmartPointList::sptr spl, double gaussianNoise )
-{
-    if(m_tags->size()<tagNo || camNo>m_cameras.size() || camNo==0 ) return 0;
-    unsigned int i;
-    Point::sptr pt= Point::New(2,Point::ARLCORE_POINT_TYPE_ARTK);
-    Point::sptr pt3D = Point::New(3) ;
-    pt->setStatus(Point::ARLCORE_POINT_STATUS_DETECTED);
-    const double ColorMin=50.0;
-    const double ColorStep=(255.0-ColorMin)/(double)(m_tags->size()+2);
-    if(m_tags->getTag(tagNo)==0) return 0;
-    assert(m_tags->getTag(tagNo)!=0);
-    PointList::sptr tagPoints=m_tags->getTag(tagNo)->getGeometry();
-    vnl_rigid_matrix T;
-    // const bool Transfo = m_universe.getTrf( m_tags->getTag(tagNo)->getPlane(), m_cameras[camNo-1].getPlane(), T );
-    //T.invert();
-    for( i=0 ; i<tagPoints->size() ; ++i )
-    {
-        T.trf( (*tagPoints)[i], pt3D);
-        m_cameras[camNo-1].project3DPoint( pt3D, pt);
-        const Colour color(0,ColorMin+ColorStep*(tagNo+1),0);
-        pt->setColour(color);
-        if(gaussianNoise>0) pt->addGaussianNoise(gaussianNoise);
-        spl->push_back(pt, camNo, m_tags->getTag(tagNo) );
-    }
-    return tagPoints->size();
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Scenes.cpp b/SrcLib/ARLcore/src/arlcore/Scenes.cpp
deleted file mode 100644
index 85ed2c9..0000000
--- a/SrcLib/ARLcore/src/arlcore/Scenes.cpp
+++ /dev/null
@@ -1,512 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Scenes.h>
-#include <arlcore/Point.h>
-
-#include <arlcore/Camera.h>
-#include <arlcore/Misc.h>
-#include <arlcore/SmartPointsList.h>
-#include <vnl/vnl_math.h>
-/**
- * This scene is used for :
- * arlCore::testRegistration3D3D
- * arlCore::testProjectiveRegistration
- * arlCore::testHomographyRegistration
- * arlCore::testReconstructionPolyscopic
- * arlCore::testEpipolarMatching
- * arlCore::testReconstructionPolyscopicUncertainty
- *
- * It creates a scene with nbCamerasMax camera, specific intrinsic camera parameter defined below and nbPoints2DMax points
- * The number of points is randomly chosen so that it is comprised between 4 and nbPoints2DMax+4. This is necessary for most
- * of the unit test. For some test (arlCore::testReconstructionPolyscopicUncertainty), we choose to create only 1 point
- * to avoid correlation within the statistical tests. This can be done by setting nbPoints2DMax to 1.
- */
-arlCore::SceneUnitTest::SceneUnitTest( arlCore::PlaneSystem &universe, double worldPointsSize, unsigned int nbPoints2DMax):
-Scene(universe)
-{
-    m_Centre = arlCore::Point::New();
-    assert(m_Centre);
-
-    const unsigned int NbCamerasMax = 10;
-    const double size_rand_mire=300, size_cam=500, distance_mire_cam_min = 1000;//, WorldPointsSize=200;
-    arlCore::Point::sptr ZERO_MONDE = arlCore::Point::New();
-    ZERO_MONDE->fill(0.0);
-
-    std::vector<double> int_param, int_range;
-    int_param.push_back(1000);//fx
-    int_param.push_back(1000);//fy
-    int_param.push_back(400);//cx
-    int_param.push_back(200);//cy
-    int_param.push_back(0.0);// int_param.push_back(1.0);//with distortion
-    int_param.push_back(0.0);// int_param.push_back(1.0);//with distortion
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-
-//  int_range.push_back(200.0);
-//  int_range.push_back(200.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(100.0);
-    int_range.push_back(50.0);
-//  int_range.push_back(0.7);
-//  int_range.push_back(1.0);
-//  int_range.push_back(0.01);
-//  int_range.push_back(0.01);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-
-    arlCore::Point::sptr tirage_camera= arlCore::Point::New();
-    tirage_camera->init(1);
-    tirage_camera->set(0, 0.0);
-    tirage_camera->addUniformNoise(0,(double)NbCamerasMax);
-    tirage_camera->set(0, ( (*tirage_camera)[0]+(double)NbCamerasMax )/2 );
-
-    unsigned int nbCameras = (unsigned int)floor( (*tirage_camera)[0]);
-    if( nbCameras<2 ) nbCameras=2;
-//  std::cerr<< "nbCameras = " << nbCameras << std::endl;
-
-    // tirage du point de mire des cameras dans un cube de dimension size_rand_mire
-    m_Centre->shapeRandom(arlCore::ARLCORE_SHAPE_CUBE, size_rand_mire);
-//  m_Centre.shapeRandom(arlCore::ARLCORE_SHAPE_CUBE, 0.01);
-//  std::cerr<< "point_mire = " << m_Centre.getString() << std::endl;
-//  addCameras(2, m_Centre, 0.1, distance_mire_cam_min, int_param, int_range);
-    addCameras(nbCameras, m_Centre, size_cam, distance_mire_cam_min, int_param, int_range);
-
-
-    /////////////////////////////////////////////////////////////////////////////////////////////////
-    // creation de points 3D autour du point mire
-    // point_monde = point dans un volume pour tester le recalage 3D/3D et ISPPC OSPPC et EPPC
-    // point_monde_plan = point dans le plan xOy pour tester le recalage homographique
-    // FONCTION(point_mire, nombre de points max, parametre de tirage, points tires, points tires bruites, param bruit)
-    arlCore::Point::sptr tirage_point = arlCore::Point::New(1);;
-
-    // il faut au moins 3 points pour le recalage 3D3D et 4 pour le calcul homographique
-    tirage_point->addUniformNoise(0,nbPoints2DMax/2);
-
-    unsigned int nbPoints = (unsigned int)floor( (*tirage_point)[0] + nbPoints2DMax/2 + 4);
-    if(nbPoints2DMax ==1) nbPoints = 1;
-    addTag(nbPoints, arlCore::ARLCORE_SHAPE_SPHERE, m_Centre, worldPointsSize);
-    addTag(nbPoints, arlCore::ARLCORE_SHAPE_PLAINSQUARE, ZERO_MONDE, worldPointsSize);
-}
-
-arlCore::SceneUnitTest::~SceneUnitTest()
-{}
-
-arlCore::Point::csptr arlCore::SceneUnitTest::getCentre( void ) const
-{
-    return m_Centre;
-}
-
-///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-// French information that can be found in Scenes.h :
-// Creation d'une scene avec une camera regardant nbPoses mires planes differentes en nb de points (m_ChessNbPoints[i])
-// le point regarde par la camera n'est pas exactement l'origine : c'est un pt aleatoire dans un cube de 100x100x100 autour
-// de l'origine.
-// Le parametre k_range correspond a l'etendu de l'erreur que l'on souhaite sur les parametres de distortion de la
-// camera creee. Ce parametre supplementaire permet de se servir de cette scene pour testIntrinsicCalibration
-// et pour testInitIntrinsicCalibration
-// Apres-coup j'ai rajoute un parametre supplementaire a la fonction: le nbre de camera MAX. Cela permet de se
-// servir de cette scene a la fois pour le calibrage intrinseque d'une camera et le calibrage extrinseque de
-// plusieurs cameras
-// Attention le nb de pose MAX est un nbre entier tire dans [0, nbPoses_MAX] + 4
-arlCore::SceneUnitTestInitIntrinsicCalib::SceneUnitTestInitIntrinsicCalib( arlCore::PlaneSystem &universe, std::vector<double> k_range, const unsigned int nbCameras_MAX, const unsigned int nbPoses_MAX):
-Scene(universe)
-{
-    m_Centre = arlCore::Point::New();
-    assert(m_Centre);
-
-    const double ChessSize = 120;
-    arlCore::Point::sptr Origin =  arlCore::Point::New();
-    Origin->fill(0.0);
-    arlCore::Point::sptr zero_monde =  arlCore::Point::New();
-    zero_monde->fill(0.0),
-
-//  Origin.cubicRandom(100);
-    Origin->shapeRandom(ARLCORE_SHAPE_CUBE, 100);
-    m_nbPoses = (unsigned int)floor( arlRandom::Random::uniformDoubleRnd(0.0, nbPoses_MAX) + 4);//
-    unsigned int nbCameras = (unsigned int)floor( arlRandom::Random::uniformDoubleRnd(0.0, nbCameras_MAX) + 1);
-    if(nbCameras_MAX == 1) nbCameras = 1;
-
-    arlCore::Point ChessNbPoints_tmp(m_nbPoses);
-    unsigned int i,k;
-
-    //ChessNbPoints_tmp.cubicRandom(ChessSize);//ChessNbPoints[i] contient le nb de points 3D de la ieme mire
-    ChessNbPoints_tmp.shapeRandom(ARLCORE_SHAPE_CUBE, ChessSize);//ChessNbPoints[i] contient le nb de points 3D de la ieme mire
-    for( i=0 ; i< m_nbPoses; ++i )
-    {
-        m_ChessNbPoints.push_back((unsigned int)(floor(ChessNbPoints_tmp[i] + ChessSize/2+20)));
-        //std::cerr<<"ChessNbPoints ="<<m_ChessNbPoints[i] <<std::endl;
-    }
-    const double SphereRadius = 200, DistanceMin = 1000;
-    std::vector<double> int_param, int_range;
-    int_param.push_back(1000);
-    int_param.push_back(1000);
-    int_param.push_back(400);
-    int_param.push_back(200);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-
-    int_range.push_back(200.0);
-    int_range.push_back(200.0);
-    int_range.push_back(100.0);
-    int_range.push_back(50.0);
-    int_range.push_back(k_range[0]);
-    int_range.push_back(k_range[1]);
-    int_range.push_back(k_range[2]);
-    int_range.push_back(k_range[3]);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-
-    //creation d'une camera sans distortion dont on recherche les parametres pour tester initIntrinsicCalibration
-    //Elle est orientee vers le point Origin(0,0,0)
-    addCameras(nbCameras, Origin, SphereRadius, DistanceMin, int_param, int_range);
-    //creation de m_nbPoses Tags qui contiennent ChessNbPoints[k] pts3D
-    for( k=0 ; k<m_nbPoses ; ++k )
-        addTag(m_ChessNbPoints[k], arlCore::ARLCORE_SHAPE_PLAINSQUARE, zero_monde, ChessSize);
-}
-
-arlCore::SceneUnitTestInitIntrinsicCalib::~SceneUnitTestInitIntrinsicCalib()
-{}
-
-arlCore::Point::csptr arlCore::SceneUnitTestInitIntrinsicCalib::getCentre( void ) const
-{
-    return m_Centre;
-}
-const unsigned int arlCore::SceneUnitTestInitIntrinsicCalib::getNbPoses(void) const
-{
-    return m_nbPoses;
-}
-
-const unsigned int arlCore::SceneUnitTestInitIntrinsicCalib::getChessNbPoints( unsigned int i) const
-{
-    return m_ChessNbPoints[i];
-}
-
-// In randomParam you should find in the following order:
-// number of point
-// number of camera
-// angle between the camera
-// size of the shape in which the 3D points are randomly chosen
-// shape of the random 3D points
-// number of control point
-// distance between the control point center and the registration point
-// size of the shape in which the control points are randomly chosen
-// shape of the random control points
-arlCore::SceneCriterionComparison::SceneCriterionComparison( arlCore::PlaneSystem &universe, std::vector<double> parameters,
- std::vector<double> staticStatus, std::vector<double> noiseValues, double RSB_3D, double RSB_2D ):
-Scene(universe)
-{
-    m_Centre = arlCore::Point::New();
-    assert(m_Centre);
-
-    bool calibration_endo = true;
-
-    unsigned int nbCameras, nbPoints, nbControlPoints;
-    double angleCameras, registrationPointsSize, controlPointsSize, distanceRegControlPoints;
-    const double size_rand_point_de_mire_camera=300, size_cam=500, distance_mire_cam_min = 1000;
-    arlCore::Point::sptr ZERO_MONDE = arlCore::Point::New();
-    arlCore::ARLCORE_SHAPE regPointShape, controlPointShape;
-
-    /////////////////////////////////////////////////////////////
-    // Determination of the number of point /////////////////////
-    if( parameters[0] < 3 && parameters[0] > 10000)
-    {
-        nbPoints = 4;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison nbPoints3DMax < 4 or >10000"<<std::endl;
-    }
-    else
-        if(staticStatus[0] != 0) nbPoints = (unsigned int)parameters[0];
-        else
-        {   // il faut au moins 3 points pour le recalage 3D3D et 4 pour le calcul homographique
-            nbPoints = (unsigned int)floor(arlRandom::Random::uniformDoubleRnd(4.0,  parameters[0]) );
-        }
-    std::cerr<<"Nombre de points du modele ="<<nbPoints<<std::endl;
-
-    ///////////////////////////////////////////////////////////////
-    //  Determination of the number of camera /////////////////////
-    if( parameters[1] < 2 && parameters[1] > 100)
-    {
-        nbCameras = 2;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison nbCameras < 2 or >100"<<std::endl;
-    }
-    else
-        if(staticStatus[1] != 0) nbCameras = (unsigned int)parameters[1];
-        else
-            nbCameras = (unsigned int)floor(arlRandom::Random::uniformDoubleRnd(2.0,  parameters[1]) );
-    std::cerr<<"Nombre de cameras ="<<nbCameras<<std::endl;
-
-    ////////////////////////////////////////////////////////////////////////
-    //  Determination of the angle between the cameras /////////////////////
-    if( parameters[2] < 0 && parameters[2] > 720)
-    {
-        angleCameras = 2*vnl_math::pi;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison angleCamera < 0 or >720"<<std::endl;
-    }
-    else
-        if(staticStatus[2] != 0) angleCameras = parameters[2]*vnl_math::pi/180;
-        else
-            angleCameras = 4*vnl_math::pi;//(unsigned int)floor(arlRandom::Random::uniformDoubleRnd(10.0,  parameters[2]) );
-    std::cerr<<"Angle entre les cameras ="<<angleCameras*180/vnl_math::pi<<std::endl;
-
-    ///////////////////////////////////////////////////////////////////////////////////////////////////////////
-    //  Determination of the size of the shape in which the 3D points are randomly chosen /////////////////////
-    if( parameters[3] < 0 && parameters[3] > 1500)
-    {
-        registrationPointsSize = 500;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison registrationPointsSize < 0 or >1500"<<std::endl;
-    }
-    else
-        if(staticStatus[3] != 0) registrationPointsSize = parameters[3];
-        else
-            registrationPointsSize = (unsigned int)floor(arlRandom::Random::uniformDoubleRnd(20.0,  parameters[3]) );
-    std::cerr<<"Dimension du volume de tirage des points 3D modele ="<<registrationPointsSize<<std::endl;
-
-    /////////////////////////////////////////////////////////////////////
-    //  Determination of the shape of the 3D points /////////////////////
-    if( parameters[4] < 1 && parameters[4] > (double)ARLCORE_SHAPE_NBSHAPES)
-    {
-        regPointShape = arlCore::ARLCORE_SHAPE_SPHERE;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison regPointShape < 1 or >ARLCORE_SHAPE_NBSHAPES"<<std::endl;
-    }
-    else
-        if(staticStatus[4] != 0) regPointShape = (arlCore::ARLCORE_SHAPE)(unsigned int) parameters[4];
-        else
-            regPointShape = (arlCore::ARLCORE_SHAPE)(unsigned int)floor(arlRandom::Random::uniformDoubleRnd(1.0,  parameters[4]) );
-    std::cerr<<"Forme du volume de tirage des points 3D modele ="<<arlCore::ARLCORE_SHAPE_NAMES[(int)parameters[4]]<<std::endl;
-
-    /////////////////////////////////////////////////////////////////////
-    // Determination of the number of control point /////////////////////
-    if( parameters[5] < 0 && parameters[5] > 50)
-    {
-        nbControlPoints = 10;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison nbControlPoints < 0 or >50"<<std::endl;
-    }
-    else
-        if(staticStatus[5] != 0) nbControlPoints = (unsigned int)parameters[5];
-        else
-            nbControlPoints = (unsigned int)floor(arlRandom::Random::uniformDoubleRnd(4,  parameters[5]) );
-    std::cerr<<"Nombre de points de controle ="<<nbControlPoints<<std::endl;
-
-    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
-    //  Determination of the size of the shape in which the control points are randomly chosen /////////////////////
-    if( parameters[6] < 0 && parameters[6] > 1500)
-    {
-        controlPointsSize = 500;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison controlPointsSize < 0 or >1500"<<std::endl;
-    }
-    else
-        if(staticStatus[6] != 0) controlPointsSize = parameters[6];
-        else
-            controlPointsSize =  (double)floor(arlRandom::Random::uniformDoubleRnd(20,  parameters[6]) );
-    std::cerr<<"Dimension du volume de tirage des points 3D controle ="<<controlPointsSize<<std::endl;
-
-    //////////////////////////////////////////////////////////////////////////////////////////////////////
-    //  Determination of the distance between the registration and the control point /////////////////////
-    if( parameters[7] < 0 && parameters[7] > 1500)
-    {
-        distanceRegControlPoints = 500;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison distanceRegControlPoints < 0 or >1500"<<std::endl;
-    }
-    else
-        if(staticStatus[7] != 0) distanceRegControlPoints = parameters[7];
-        else
-            distanceRegControlPoints =  (double)floor(arlRandom::Random::uniformDoubleRnd(50,  parameters[7]) );
-    std::cerr<<"Distance entre les points modele et les points controle ="<<distanceRegControlPoints<<std::endl;
-
-    //////////////////////////////////////////////////////////////////////////
-    //  Determination of the shape of the control points /////////////////////
-    if( parameters[8] < 1 && parameters[8] > (double)ARLCORE_SHAPE_NBSHAPES)
-    {
-        controlPointShape = arlCore::ARLCORE_SHAPE_SPHERE;
-        std::cerr<<"In SceneCriterionComparison::SceneCriterionComparison controlPointShape < 1 or >ARLCORE_SHAPE_NBSHAPES"<<std::endl;
-    }
-    else
-        if(staticStatus[8] != 0) controlPointShape = (arlCore::ARLCORE_SHAPE)(unsigned int) parameters[8];
-        else
-            controlPointShape = (arlCore::ARLCORE_SHAPE)(unsigned int)floor(arlRandom::Random::uniformDoubleRnd(1.0,  parameters[8]) );
-    std::cerr<<"Forme du volume de tirage des points 3D controle ="<<arlCore::ARLCORE_SHAPE_NAMES[(int)parameters[8]]<<std::endl;
-
-    std::vector<double> int_param, int_range;
-    int_param.push_back(1000);
-    int_param.push_back(1000);
-    int_param.push_back(400);
-    int_param.push_back(200);
-//  int_param.push_back(1.0);
-//  int_param.push_back(1.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-
-//  int_range.push_back(200.0);
-//  int_range.push_back(200.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);//100
-    int_range.push_back(0.0);//50
-//  int_range.push_back(0.7);
-//  int_range.push_back(1.0);
-//  int_range.push_back(0.01);
-//  int_range.push_back(0.01);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-
-//  std::cerr<< "nbCameras = " << nbCameras << std::endl;
-
-    // tirage du point de mire des cameras
-    m_Centre->shapeRandom(arlCore::ARLCORE_SHAPE_CUBE, size_rand_point_de_mire_camera);
-    m_ControlCentre = m_Centre;
-    m_ControlCentre->shapeRandom(arlCore::ARLCORE_SHAPE_SPHERESURFACE, distanceRegControlPoints);
-
-    if(calibration_endo == true)
-    {
-        m_Centre = ZERO_MONDE;
-        m_ControlCentre = ZERO_MONDE;
-    }
-//  std::cerr<< "point_mire = " << m_Centre.getString() << std::endl;
-    if(staticStatus[2] != 0)
-        addCameras(nbCameras, m_Centre, size_cam, distance_mire_cam_min, int_param, int_range, angleCameras);
-    else
-        addCameras(nbCameras, m_Centre, size_cam, distance_mire_cam_min, int_param, int_range);
-
-    if(calibration_endo == true)
-    {
-        unsigned int nbEndoscopePose = 10;
-        double angleVisuEndocam = 200;
-        double distance_chessbd_endocam_min = 60;
-        double size_endocam = 50;
-        int_param[0] = 250;
-        int_param[1] = 250;
-        int_param[2] = 300;
-        int_param[3] = 150;
-        addCameras(nbEndoscopePose, m_Centre, size_endocam, distance_chessbd_endocam_min, int_param, int_range, angleVisuEndocam);
-    }
-    /////////////////////////////////////////////////////////////////////////////////////////////////
-    // creation de points 3D autour du point mire
-    // creation des points de controle
-    addTag(nbPoints, regPointShape, m_Centre, registrationPointsSize);
-    addTag(nbControlPoints, controlPointShape, m_ControlCentre, controlPointsSize);
-
-    //////////////////////////////////////////////////////////////////////////////////////////////////
-    // calcul des RSB 3D et 2D
-    arlCore::PointList::sptr regPoints     = this->getTags().getTag(0)->getGeometry();
-    std::vector< arlCore::PointList::sptr > reprojection2D(nbCameras);
-    arlCore::SmartPointList::sptr  splMonde =  arlCore::SmartPointList::New();
-    unsigned int i;
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        this->detection( i+1, 0, splMonde, 0.0 );
-        splMonde->getPoints(reprojection2D[i], i+1, this->getTags().getTag(0));
-    }
-    for( i=0 ; i<5 ; ++i )
-    std::cerr<<"Noise values ="<<noiseValues[i]<<std::endl;
-
-    double c,d, std_3D=0, std_2D=0;
-    arlCore::Point::sptr gravity_3D=arlCore::Point::New();
-    arlCore::Point::sptr a=arlCore::Point::New();
-    arlCore::Point::sptr b=arlCore::Point::New();
-    arlCore::Point::sptr gravity_2D=arlCore::Point::New(); gravity_2D->init(2);
-    regPoints->properties(gravity_3D, a, b, c, d, std_3D);
-    RSB_3D = 10*log10( (std_3D/noiseValues[0] +std_3D/noiseValues[1]+std_3D/noiseValues[2])/3 );
-    std::cerr<<"RSB 3D = "<<10*log10(std_3D/noiseValues[0] +std_3D/noiseValues[1]+std_3D/noiseValues[2])<<std::endl;
-    for( i=0 ; i<nbCameras ; ++i)
-    {
-        double std_2D_ind;
-        reprojection2D[i]->properties( gravity_2D, a, b, c, d, std_2D_ind);
-        std_2D = sqrt( std_2D*std_2D + std_2D_ind*std_2D_ind );
-        std::cerr<<"RSB 2D["<<i<<"] = "<<10*log10( (std_2D/noiseValues[3]+std_2D/noiseValues[4])/2/nbCameras )<<std::endl;
-    }
-    RSB_2D = 10*log10( (std_2D/noiseValues[3]+std_2D/noiseValues[4])/2/nbCameras );
-}
-
-arlCore::Point::csptr arlCore::SceneCriterionComparison::getCentre( void ) const
-{
-    return m_Centre;
-}
-
-arlCore::SceneCriterionComparison::~SceneCriterionComparison()
-{}
-
-// SceneAXXB
-arlCore::SceneAXXB::SceneAXXB( arlCore::PlaneSystem &universe, unsigned int NbCameras ):
-Scene(universe)
-{
-    m_Centre = arlCore::Point::New();
-    assert(m_Centre);
-
-    // Chessboard
-    const unsigned int NbPoints = 13; // Number of points by side of the square
-    const double SquareEdgeSize = 200; // mm
-    // Cameras
-    const double size_rand_mire = 300; // mm
-    const double size_cam = 500; // mm
-    const double distance_mire_cam_min = 1000; // mm
-
-    arlCore::Point::sptr ZERO_MONDE = arlCore::Point::New();
-    ZERO_MONDE->fill( 0.0 );
-
-    std::vector<double> int_param, int_range;
-    int_param.push_back(1000);//fx
-    int_param.push_back(1000);//fy
-    int_param.push_back(400);//cx
-    int_param.push_back(200);//cy
-    int_param.push_back(0.0);// int_param.push_back(1.0);//with distortion
-    int_param.push_back(0.0);// int_param.push_back(1.0);//with distortion
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-    int_param.push_back(0.0);
-
-//  int_range.push_back(200.0);
-//  int_range.push_back(200.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(100.0);
-    int_range.push_back(50.0);
-//  int_range.push_back(0.7);
-//  int_range.push_back(1.0);
-//  int_range.push_back(0.01);
-//  int_range.push_back(0.01);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-    int_range.push_back(0.0);
-
-    // tirage du point de mire des cameras dans un cube de dimension size_rand_mire
-    m_Centre->shapeRandom(arlCore::ARLCORE_SHAPE_CUBE, size_rand_mire);
-    addCameras( NbCameras, m_Centre, size_cam, distance_mire_cam_min, int_param, int_range);
-
-    arlCore::Tag::sptr tag = addTag( NbPoints, arlCore::ARLCORE_SHAPE_CHESSBOARD, ZERO_MONDE, SquareEdgeSize);
-    tag->getGeometry()->save("c:/Chess.vtk",arlCore::ARLCORE_POINT_SAVE_VTK);
-    //addTag( 150, arlCore::ARLCORE_SHAPE_PLAINSQUARE, ZERO_MONDE, SquareEdgeSize);
-}
-
-arlCore::SceneAXXB::~SceneAXXB()
-{}
-
-arlCore::Point::csptr arlCore::SceneAXXB::getCentre( void ) const
-{
-    return m_Centre;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/SmartPointsList.cpp b/SrcLib/ARLcore/src/arlcore/SmartPointsList.cpp
deleted file mode 100644
index 6ca0b95..0000000
--- a/SrcLib/ARLcore/src/arlcore/SmartPointsList.cpp
+++ /dev/null
@@ -1,526 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/SmartPointsList.h>
-
-#include <fstream>
-#include <iomanip>
-#include <algorithm>
-
-#include <arlcore/PointsList.h>
-#include <arlcore/Misc.h>
-
-arlCore::SmartPointList::SmartPointList( void )
-{   // First is always an empty list
-    m_listOfLists.resize(1);
-}
-
-arlCore::SmartPointList::SmartPointList(SmartPointList::csptr  p)
-{
-        copy(p);
-}
-
-arlCore::SmartPointList& arlCore::SmartPointList::operator=(SmartPointList::csptr  p)
-{
-    copy(p);
-    return *this;
-}
-
-void arlCore::SmartPointList::copy(SmartPointList::csptr  p)
-{
-    if(this==p.get()) return;
-    assert(false); //VAG FIXME
-//  arlCore::Object *a=this;
-//  const arlCore::Object *b=&p;
-//  *a = *b;
-    clear();
-    // TODO : Fill this with p
-//      std::vector< std::vector< Point::csptr > > m_listOfLists;
-//      std::map< double, std::vector< Point::csptr > > m_mapOfLists;
-//      std::vector< std::vector< Point::csptr > > m_listsByCam
-}
-
-arlCore::SmartPointList::~SmartPointList( void )
-{
-    clear();
-}
-
-bool arlCore::SmartPointList::integrity( void ) const
-{
-    bool b=true;
-    b &= (m_listOfLists.size()==(m_mapOfLists.size()+1));
-    if(m_mapOfLists.size()>0) b &= (m_listsByCam.size()>0);
-    return b;
-}
-
-std::string arlCore::SmartPointList::getString( void ) const
-{
-    std::stringstream s;
-    unsigned int i,j;
-    for( i=0 ; i<m_listsByCam.size() ; ++i )
-    {
-        s<<"* Cam "<<i<<"\n";
-        for( j=0 ; j<m_listsByCam[i].size() ; ++j )
-        {
-            s<<m_listsByCam[i][j]->getString();
-        }
-    }
-    s<<"\n";
-    return s.str();
-}
-
-bool arlCore::SmartPointList::save( const std::string &fileName, bool overwrite ) const
-{
-    std::fstream file;
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    file.open(fileName.c_str(), std::fstream::out);
-    if(!file.is_open()) return false;
-    file<<"FileType SmartPointList\n";
-    file<<"Version 1.0\n";
-    unsigned int cam, i, n=0;
-    SPTR(void) tag;
-    int fringe;
-    std::map<double, unsigned int, mapOrder>::const_iterator it;
-    it = m_mapOfLists.begin();
-    while(it!=m_mapOfLists.end())
-    {
-        double key = (*it).first;
-        unhash(key, cam, tag, fringe);
-        unsigned int index = (*it).second;
-        for( i=0 ; i<m_listOfLists[index].size() ; ++i )
-            if(m_listOfLists[index][i]!=0)
-                if(m_listOfLists[index][i]->isOK())
-                    m_listOfLists[index][i]->save( file, cam, tag, fringe );
-        ++it, ++n;
-    }
-    assert(m_listOfLists.size()==n+1);
-    file.close();
-    return true;
-}
-bool arlCore::SmartPointList::load( const std::string &fileName )
-{
-    if(fileName=="") return false;
-    std::ifstream file;
-    file.open (fileName.c_str(), std::fstream::in);
-    if(!file.is_open())
-    {
-        std::cerr<<"SmartPointList Loading error : "<<fileName<<"\n";
-        return false;
-    }
-    unsigned int n=0;
-    std::string token,text;
-    double version;
-    clear();
-//  Object::update(); // TODO Optimize its position
-    Point::sptr p= Point::New();
-    do
-    {   // Reading header
-        file>>token;
-        if(token=="FileType")
-        {
-            file>>text;
-            if(text!="SmartPointList") return false;
-            n=(n|1);
-        }
-        if(token=="Version") {file>>version; n=(n|2);}
-        if(file.eof())
-        {
-            std::cerr<<"SmartPointList Loading Header error : "<<fileName<<"\n";
-            return false;
-        }
-    } while(n!=3);
-    bool b;
-    do
-    {
-        unsigned int cam;
-        SPTR(void) tag;
-        int fringe;
-        b=p->load(file, cam, tag, fringe);
-        if(b) push_back(p, cam, tag, fringe);
-    }while(b);
-    file.close();
-    return true;
-}
-unsigned int arlCore::SmartPointList::findNearPoint(double x, double y, unsigned int cam, std::vector< Point::csptr > &found, double &distance, double radius) const
-{
-    found.clear();
-    if(m_listsByCam.size()<cam) return 0;
-    Point::sptr pt = Point::New(x,y);
-    unsigned int i, n;
-    std::vector<unsigned int> pos;
-    n=arlCore::findNearPoint(m_listsByCam[cam-1], pt, pos, distance, radius);
-    for( i=0 ; i<pos.size() ; ++i )
-        found.push_back( m_listsByCam[cam-1][pos[i]] );
-    return (unsigned int)found.size();
-}
-/*
-const arlCore::Point* arlCore::SmartPointList::findNearPoint(const  arlCore::Point::sptr pt, double &distance) const
-{
-    if(m_listsByCam.size()<1) return 0;
-    const arlCore::Point* r=0;
-    double dist;
-    unsigned int pos;
-    if(arlCore::findNearPoint(m_listsByCam[0], pt, pos, dist))
-    {
-        r=m_listsByCam[0][pos];
-        distance=dist;
-    }
-    unsigned int i;
-    for( i=1 ; i<m_listsByCam.size() ; ++i )
-    {
-        if(arlCore::findNearPoint(m_listsByCam[i], pt, pos, dist))
-            if(r==0)
-            {
-                r=m_listsByCam[i][pos];
-                distance=dist;
-            }else
-            {
-                if(dist<distance)
-                {
-                    r=m_listsByCam[i][pos];
-                    distance=dist;
-                }
-            }
-    }
-    return 0;
-}*/
-
-arlCore::Point::csptr arlCore::SmartPointList::push_back( arlCore::Point::csptr pt, unsigned int cam, SPTR(void) tag, int fringe )
-{
-    if(cam<1) return arlCore::Point::csptr();
-    arlCore::Point::csptr p= Point::New(pt);
-    privateGetList(cam).push_back(p);
-    if(tag!=0)
-    {
-        privateGetList(cam,tag).push_back(p);
-        if(fringe!=0) privateGetList(cam,tag,fringe).push_back(p);
-    }
-    return p;
-}
-
-unsigned int arlCore::SmartPointList::push_back( const std::vector< arlCore::Point::csptr >& ptList, unsigned int cam, SPTR(void) tag, int fringe )
-{
-    unsigned int i, n = 0;
-    if(cam<1) return n;
-    std::vector< arlCore::Point::csptr >& camList = privateGetList(cam);
-    std::vector< arlCore::Point::csptr >& tagList = privateGetList(cam, tag);
-    std::vector< arlCore::Point::csptr >& frgList = privateGetList(cam, tag, fringe);
-    for( i=0 ; i<ptList.size() ; ++i )
-    {
-        if(ptList[i]!=0)
-        {
-            arlCore::Point::csptr p=  ptList[i] ;
-            ++n;
-            camList.push_back(p);
-            if(tag)
-            {
-                tagList.push_back(p);
-                if(fringe!=0) frgList.push_back(p);
-            }
-        }
-    }
-    return n;
-}
-
-bool arlCore::SmartPointList::addPoint( arlCore::Point::csptr pt, unsigned int cam, SPTR(void) tag, unsigned int tagNo )
-{
-    if(cam<1 || tag==0) return false;
-    unsigned int i;
-    std::vector< arlCore::Point::csptr > &pointList = privateGetList( cam, tag );
-    for( i=(unsigned int)pointList.size() ; i<tagNo+1 ; ++i )
-        pointList.push_back( arlCore::Point::sptr() );
-    if(pointList[tagNo]==0)
-    {
-        arlCore::Point::sptr p= Point::New(pt);
-        privateGetList(cam).push_back(p);
-        pointList[tagNo]=p;
-    } else arlCore::Point::constCast( pointList[tagNo])->copy(pt);
-    return true;
-}
-
-const double MaxFringes=100.0, MaxCams=10.0, HalfMaxFringes=MaxFringes/2.0;
-
-double arlCore::SmartPointList::hash( unsigned int cam, SPTR(void) tag, int fringe ) const
-{
-    long int p=(long int)tag.get();
-    double key=(double)p*MaxCams*MaxFringes+(HalfMaxFringes+(double)fringe)*MaxCams+(double)cam;
-    unsigned int c;
-    SPTR(void) t;
-    int f;
-    assert(unhash( key, c, t, f ));
-    // VAG FIXME assert(cam==c && tag.get()==t.get() && fringe==f);
-    // FIXME Test only in Debug mode
-    unhash( key, c, t, f );
-
-    //VAG if(cam!=c || tag.get()!=t.get() || fringe!=f)
-    //VAG    std::cout<<"*****UNHASH ERROR***** "<<cam<<","<<tag.get()<<","<<fringe<<" => "<<c<<","<<t<<","<<f<<" ****************\n";
-    return key;
-}
-
-bool arlCore::SmartPointList::unhash( double key, unsigned int &cam, SPTR(void) tag, int &fringe ) const
-{
-    long int t = (long int)(key/(MaxCams*MaxFringes));
-    //tag = (SPTR(void))t; VAG necessary ???? FIXME
-    key = key-t*MaxCams*MaxFringes;
-    int f = (int)(key/MaxCams);
-    fringe = f-(int)HalfMaxFringes;
-    cam = (int)key-f*(int)MaxCams;
-    return true;
-}
-
-std::vector< arlCore::Point::csptr >& arlCore::SmartPointList::privateGetList( unsigned int cam, SPTR(void) tag, int fringe )
-{
-    if(tag==0 && fringe==0)
-    {
-        assert(cam>0);
-        if(cam>m_listsByCam.size()) m_listsByCam.resize(cam);
-        assert(cam<=m_listsByCam.size());
-        //unsigned int n = (unsigned int)m_listsByCam[cam-1].size();
-        return m_listsByCam[cam-1];
-    }
-    unsigned int n;
-    double key = hash(cam, tag, fringe);
-    std::map< double, unsigned int, mapOrder >::iterator it;
-    it = m_mapOfLists.find(key);
-    if(it==m_mapOfLists.end())
-    {
-        n=(unsigned int)m_listOfLists.size();
-        m_listOfLists.resize(n+1);
-        m_mapOfLists[key]=n;
-    } else n=it->second;
-    assert(n<m_listOfLists.size());
-    return m_listOfLists[n];
-}
-
-const std::vector< arlCore::Point::csptr >& arlCore::SmartPointList::getList( unsigned int cam, SPTR(void) tag, int fringe ) const
-{
-    if(tag==0 && fringe==0 && cam>0 && cam <=m_listsByCam.size()) return m_listsByCam[cam-1];
-    std::map< double, unsigned int, mapOrder >::const_iterator it;
-    it = m_mapOfLists.find(hash(cam, tag, fringe));
-    if(it!=m_mapOfLists.end()) return m_listOfLists[it->second];
-    return m_listOfLists[0]; // Empty list
-}
-
-unsigned int arlCore::SmartPointList::getPointByCam( std::vector<arlCore::Point::csptr>&pl, const std::vector<arlCore::Camera> &cameras, SPTR(void) tag, unsigned int no, std::vector< bool >&whichCams ) const
-{
-    std::vector<const arlCore::Camera*> cams;
-    unsigned int i;
-    for( i=0 ; i<cameras.size() ; ++i )
-        cams.push_back(&cameras[i]);
-    return getPointByCam( pl, cams, tag, no, whichCams );
-}
-
-unsigned int arlCore::SmartPointList::getPointByCam( std::vector<arlCore::Point::csptr>&pl, const std::vector<const arlCore::Camera*> &cams, SPTR(void) tag, unsigned int no, std::vector< bool >&whichCams ) const
-{
-    pl.clear();
-    whichCams.resize(cams.size());
-    unsigned int cam;
-    for( cam=0 ; cam<whichCams.size() ; ++cam )
-    {
-        whichCams[cam]=false;
-        if(cams[cam]->isIntrinsicCalibrated())
-        {
-            const std::vector< arlCore::Point::csptr > &l=getList(cam+1,tag);
-            if(no<l.size())
-                if(l[no]!=0)
-                    if(l[no]->isVisible())
-                    {
-                        whichCams[cam]=true;
-                        pl.push_back( l[no] );
-                    }
-        }
-    }
-    return (unsigned int)pl.size();
-}
-
-bool arlCore::SmartPointList::getPoint( arlCore::Point::csptr &p, unsigned int cam, SPTR(void) t, unsigned int tagNo ) const
-{
-    if(cam<=0) return false;
-    const std::vector< arlCore::Point::csptr > &l=getList(cam,t);
-    if(tagNo>=l.size()) return false;
-    p=l[tagNo];
-    return p!=0;
-}
-
-unsigned int arlCore::SmartPointList::getPoints( std::vector< arlCore::Point::csptr >&pl, unsigned int cam, SPTR(void) t ) const
-{
-    pl.clear();
-    if(cam<=0) return 0;
-    const std::vector< arlCore::Point::csptr > &l=getList(cam,t);
-    unsigned int i;
-    for( i=0 ; i<l.size() ; ++i )
-        pl.push_back( l[i] );
-    return (unsigned int)pl.size();
-}
-
-unsigned int arlCore::SmartPointList::getPoints( arlCore::PointList::sptr pl, unsigned int cam, SPTR(void) t ) const
-{
-    pl->clear();
-    if(cam<=0) return 0;
-    const std::vector< arlCore::Point::csptr > &l=getList(cam,t);
-    unsigned int i;
-    for( i=0 ; i<l.size() ; ++i )
-        pl->push_back( l[i] );
-    return pl->size();
-}
-
-unsigned int arlCore::SmartPointList::getInvisiblePoints( std::vector< arlCore::Point::csptr >&pl, unsigned int cam, SPTR(void) t ) const
-{
-    pl.clear();
-    if(cam<=0) return 0;
-    const std::vector< arlCore::Point::csptr > &l=getList(cam,t);
-    unsigned int i;
-    for( i=0 ; i<l.size() ; ++i )
-        if(l[i]!=0)
-            if(!l[i]->isVisible())
-                pl.push_back(  l[i] );
-    return (unsigned int)pl.size();
-}
-
-bool arlCore::SmartPointList::clear( void )
-{
-    m_listsByCam.clear();
-    m_mapOfLists.clear();
-    m_listOfLists.clear();
-    m_listOfLists.resize(1);
-    return true;
-}
-
-unsigned int arlCore::SmartPointList::size( unsigned int cam, SPTR(void) tag, int fringe ) const
-{
-    return (unsigned int)getList( cam, tag, fringe ).size();
-}
-
-unsigned int arlCore::epipolarMatching( const std::vector<Camera>& cameras, SmartPointList::csptr spl, std::vector< std::vector<arlCore::Point::csptr> >&matching, double gaussianNoise )
-{
-    unsigned int nbCameras = (unsigned int)cameras.size();
-    if(nbCameras<2) return 0;
-    if(nbCameras>2) nbCameras=2;
-    // Bruit minimum lié aux incertitudes sur le calcul
-    const double NumericNoise = 1e-3;
-    // On retient que les points a une distance de la droite epipolaire < 'DistPixMax'
-    // Cette valeur est fonction du bruit estimé sur les points 2D
-    const double DistPixMax = 2*gaussianNoise+NumericNoise;
-    //const double DistPixMax = sqrt(2*gaussianNoise*gaussianNoise)+NumericNoise;
-    // Le second plus proche doit imperativement etre à plus de DistPixMin de la droite epipolaire
-    // Les voisins doivent être à l'extérieur de la zone d'incertitude
-    const double DistPixMin = DistPixMax;
-
-    // Elagage des points trop eloignes de la droite epipolaire
-    // Actuellement inutile car l'algo actuel prend en compte le premier et le second
-
-    // On retient que les 'Best'*100% points les plus proches de la droite epipolaire
-    // Garde au minimum les BestMin premiers quelque soit le pourcentage
-
-    // Cas avec 2 cameras - TODO : avec n cameras
-    // distanceTab[no point de la cam0][no point de la cam 1]
-    // vnl_vector_fixed<double,4> ={
-    // distance point cam1 a droite du point cam0 ,
-    // distance du second plus proche dans la cam1,
-    // distance point cam0 a droite du point cam1,
-    // distance du second plus proche dans la cam0
-    std::vector< std::vector< vnl_vector_fixed<double,4> > > distanceTab;
-    const vnl_vector_fixed<double,4> InitVector(DBL_MAX);
-
-    unsigned int i,j,k,l,n;
-    Point::sptr point3D = Point::New(3);
-    // Passage dans le plan de la focale
-    const bool PerfectDisto = true;
-    std::vector< PointList > focalPlanePoints(cameras.size());
-    std::vector< std::vector<arlCore::Point::csptr> >pixelPoints(cameras.size());
-    for( i=0 ; i<nbCameras ; ++i )
-    {
-        n = spl->getPoints( pixelPoints[i], i+1 );
-        // Cas avec 2 cameras - TODO : avec n cameras
-        if(i==0) distanceTab.resize(n);
-        if(i==1)
-            for( j=0 ; j<distanceTab.size() ; ++j )
-            {
-                distanceTab[j].resize(n);
-                for( k=0 ; k<n ; ++k )
-                    distanceTab[j][k]=InitVector;
-            }
-        for( j=0 ; j<n ; ++j )
-        {
-            arlCore::Point::constCast( pixelPoints[i][j] )->setScalar(-1); // Numero appariement pour visu
-            if(cameras[i].pixelPlaneToUnitFocalPlane(  pixelPoints[i][j] , point3D, PerfectDisto ))
-                focalPlanePoints[i].push_back(point3D);
-        }
-    }
-    // Calcul des droites epipolaires et des distances
-    // Constitution du graphe des appariements potentiels
-    double distance;
-    for( i=0 ; i<nbCameras ; ++i )
-        for( j=0 ; j<nbCameras ; ++j )
-            if(i!=j /*&& cameras[i]!=0 && cameras[j]!=0*/ )
-            {
-                vnl_matrix_fixed<double,4,4> PMi_j = cameras[j].getExtrinsic() * cameras[i].getInvExtrinsic();
-                for( k=0 ; k<focalPlanePoints[i].size() ; ++k )
-                {
-                    if(focalPlanePoints[j].size()>0)
-                    {
-                        std::vector< std::pair<double,unsigned int> > distances(focalPlanePoints[j].size());
-                        for( l=0 ; l<focalPlanePoints[j].size() ; ++l )
-                        {
-                            double a,b,c;
-                            if(getEpipolar( focalPlanePoints[i][k] , PMi_j, a, b, c))
-                            {
-                                distance = (a * focalPlanePoints[j][l]->x() + b * focalPlanePoints[j][l]->y() + c) / sqrt(a*a +b*b);
-                                distance = sqrt(distance*distance)*cameras[j].getfx();
-                                distances[l]=std::make_pair(distance,l);
-                            }else distances[l]=std::make_pair(DBL_MAX,l);
-                        }
-                        std::sort( distances.begin(), distances.end() );
-                        // On retient les Best*100% meilleurs points
-/*                      for( l=0 ; l<distances.size() ; ++l )
-                            if(l+1>BestMin && (l+1)/distances.size()>Best)
-                                distances[l].first = DBL_MAX;
-*/                      // Cas avec 2 cameras - TODO : avec n cameras
-                        if(i<2 && j<2)
-                        {
-                            unsigned int cam0,cam1,index;
-                            if(i==0) {cam0=k; cam1=distances[0].second; index=0;}
-                            if(i==1) {cam1=k; cam0=distances[0].second; index=2;}
-                            distanceTab[cam0][cam1](index)=distances[0].first;
-                            if(distances.size()>1)
-                                distanceTab[cam0][cam1](index+1)=distances[1].first;
-                            else distanceTab[cam0][cam1](index+1)=DBL_MAX;
-                            // Creer un arc de pixelPoints[i][k] vers pixelPoints[j][distance[l].second]
-                            // avec comme poids distance[l].first
-                        }
-                    }
-                }
-            }
-    // Elimination pour chaque point de chaque camera des liens multiples vers une autre meme camera
-    // Elimination prioritaire des points ayant le moins bon score
-    matching.clear();
-    for( i=0 ; i<distanceTab.size() ; ++i )
-    {   // Appariement Point i de la camera 0
-        double maxSecondDistance = 0; // Indice de confiance
-        int chosenPoint = -1;
-        for( j=0 ; j<distanceTab[i].size() ; ++j )
-        {
-            double minDistofsecond, meanDistToLine = (distanceTab[i][j](0)+distanceTab[i][j](2))/2;
-            if(distanceTab[i][j](1) < distanceTab[i][j](3))
-                minDistofsecond = distanceTab[i][j](1);
-            else minDistofsecond = distanceTab[i][j](3);
-            if(meanDistToLine<=DistPixMax)
-                if(minDistofsecond>DistPixMin && minDistofsecond>maxSecondDistance)
-                {
-                    maxSecondDistance=minDistofsecond;
-                    chosenPoint = j;
-                }
-        }
-        if(chosenPoint>=0)
-        {
-            matching.resize(matching.size()+1);
-            matching.back().push_back(pixelPoints[0][i]);
-            matching.back().push_back(pixelPoints[1][chosenPoint]);
-        }
-    }
-    // TODO Trier matching en fonction de la confiance : Les plus surs en premiers.
-    return (unsigned int)matching.size();
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Tag.cpp b/SrcLib/ARLcore/src/arlcore/Tag.cpp
deleted file mode 100644
index a70b6f1..0000000
--- a/SrcLib/ARLcore/src/arlcore/Tag.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Tag.h>
-
-#include <arlcore/PlaneSystem.h>
-
-arlCore::Tag::Tag( arlCore::PlaneSystem &universe, const std::string &name ):
-Particle( universe, name ),
-Parameters("Tag"),
-m_geometry( PointList::New() ),
-m_measures( PointList::New() ),
-m_measuresPlane( 0 ),
-m_registrationType( ARLCORE_TAG_REGISTRATION_UNKNOWN ),
-m_registrationMaxError(-1.0),
-m_persistence(-1)
-{
-    init();
-}
-
-arlCore::Tag::Tag( PlaneSystem &universe, PointList::csptr pl ):
-//VAG Object(arlCore::ARLCORE_CLASS_TAG, "Points cloud"),
-Particle( universe, "Points cloud" ),
-Parameters("Tag"),
-m_geometry( PointList::New() ),
-m_measures( PointList::New() ),
-m_measuresPlane( 0 ),
-m_registrationType( ARLCORE_TAG_REGISTRATION_3D3D ),
-m_registrationMaxError(-1.0),
-m_persistence(-1)
-{
-    init();
-    arlCore::Point::sptr p0 = arlCore::Point::New(0.0, 0.0, 0.0);
-    p0->setVisible(false);
-    unsigned int i;
-    for(i=0 ; i<pl->size() ; ++i)
-    {
-        m_geometry->push_back( (*pl)[i] );
-        m_measures->push_back(p0);
-    }
-    getPlaneSystem().setPlaneName(getPlane(), Object::getName());
-    //VAG FIXME setOK();
-}
-
-
-
-
-
-arlCore::Tag::sptr arlCore::Tag::TagFactory( arlCore::PlaneSystem &universe, const std::string &name)
-{
-    return arlCore::Tag::sptr(  new Tag(universe, name)  );
-}
-arlCore::Tag::sptr arlCore::Tag::TagFactory( arlCore::PlaneSystem &universe, arlCore::PointList::csptr pl )
-{
-    return arlCore::Tag::sptr( new Tag(universe,pl)  );
-}
-
-
-bool arlCore::Tag::init( void )
-{
-    Parameters::init( ARLCORE_TAGPARAMETERS_NAMES, ARLCORE_TAGPARAMETERS_DEFAULTS, ARLCORE_TAG_NBPARAMETERS );
-    return true;
-}
-
-arlCore::Tag::~Tag( void )
-{}
-
-std::string arlCore::Tag::getString( void ) const
-{
-    std::stringstream s;
-    //VAG FIXMEs<<this->Object::getString();
-    //VAG FIXMEs<<this->Particle::getString();
-    if(m_registrationMaxError<0)
-        s<<"No registration max error\n";
-    else s<<"Registration max error = "<<m_registrationMaxError<<"\n";
-    s<<"Measures plane "<<m_measuresPlane<<"\n";
-    return s.str();
-}
-
-unsigned int arlCore::Tag::getMeasuresPlane() const
-{
-    return m_measuresPlane;
-}
-
-unsigned int arlCore::Tag::getNbPoints() const
-{
-    return m_geometry->size();
-}
-
-arlCore::PointList::csptr  arlCore::Tag::getGeometry() const
-{
-    return m_geometry;
-}
-
-arlCore::PointList::sptr arlCore::Tag::getGeometry()
-{
-    return m_geometry;
-}
-
-arlCore::PointList::csptr  arlCore::Tag::getMeasures() const
-{
-    return m_measures;
-}
-
-arlCore::PointList::sptr arlCore::Tag::getMeasures()
-{
-    return m_measures;
-}
-
-arlCore::Tag::ARLCORE_TAG_REGISTRATION_TYPE arlCore::Tag::getRegistrationType( void )
-{
-    return m_registrationType;
-}
-
-double arlCore::Tag::getRegistrationMaxError( void )
-{
-    return m_registrationMaxError;
-}
-
-void arlCore::Tag::setRegistrationMaxError( double error )
-{
-    m_registrationMaxError=error;
-}
-
-void arlCore::Tag::reset( void )
-{
-    m_measuresPlane=0;
-    m_measures->clear();
-}
-
-bool arlCore::Tag::setRegistration( unsigned int plane, arlCore::vnl_rigid_matrix &T, long int date, long int time, bool reset )
-{
-    //VAG FIXME setTime(date,time);
-    //std::vector<double> errors;
-    //T.RMS3D3D( m_geometry, m_measures, errors);
-    const double Error = T.getRMS();
-    if(m_registrationMaxError>=0 && Error>m_registrationMaxError)
-    {
-        m_measuresPlane = arlCore::PlaneSystem::NoPlane;
-        getPlaneSystem().resetTrf( getPlane(), plane );
-        //VAG FIXME  m_log<<"REGISTRATION FAILED : RMS="<<Error<<" > RMSMax="<<m_registrationMaxError<<"\n";
-        //VAG FIXME  log(ARLCORE_LOG_WARNING);
-        return false;
-    }
-    if(reset) this->reset();
-    unsigned int i;
-    for( i=0 ; i<m_geometry->size() ; ++i )
-    {
-        if(i>=m_measures->size())
-        {
-            m_measures->push_back( (*m_geometry)[i]);
-            (*m_measures)[i]->setVisible(false);
-        }
-        if(!(*m_measures)[i]->isVisible())
-        {
-            assert(m_measures->size()>=i);
-            T.trf( (*m_geometry)[i],(*m_measures)[i]);
-            (*m_measures)[i]->setVisible(true);
-        }
-    }
-    bool b = getPlaneSystem().setTrf( getPlane(), plane, T, date,time );
-    if(b) m_measuresPlane=plane;
-    return b;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Tags.cpp b/SrcLib/ARLcore/src/arlcore/Tags.cpp
deleted file mode 100644
index e180674..0000000
--- a/SrcLib/ARLcore/src/arlcore/Tags.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Tags.h>
-
-#include <arlcore/Misc.h>
-
-//const long int ARLCORE_TAG_RANGES[2]={1000,100000};
-//const unsigned int MAXNBMARKERS=10;
-
-arlCore::Tags::Tags( arlCore::PlaneSystem &universe, const std::string &name ):
-m_universe(universe)
-{
-    setName(name);
-    //VAG FIXME setOK(true);
-}
-
-//arlCore::Tags::Tags( const Tags& t ):
-//Object(t),
-//m_universe(t.m_universe)
-//{
-//    copy(t);
-//}
-
-
-arlCore::Tags::sptr arlCore::Tags::TagsFactory( arlCore::PlaneSystem &universe, const std::string &name)
-{
-    return arlCore::Tags::sptr( new Tags(universe, name ) );
-}
-
-
-//VAG
-//arlCore::Tags& arlCore::Tags::operator=( const Tags& t )
-//{
-//    copy(t);
-//    return *this;
-//}
-
-arlCore::Tags::~Tags( void )
-{
-    reset();
-}
-
-bool arlCore::Tags::reset( void )
-{
-    unsigned int i;
-    for( i=0 ; i<m_tags.size() ; ++i )
-    {
-        assert(m_tags[i]!=0);
-    }
-    m_tags.clear();
-    return true;
-}
-
-bool arlCore::Tags::copy(  Tags::csptr t )
-{
-    //VAG FIXME
-    assert(false);
-    /* VAG
-    if(this==t.get()) return false;
-    reset();
-    arlCore::Object *a=this;
-    const arlCore::Object *b=&t;
-    *a = *b;
-    unsigned int i;
-    for( i=0 ; i<t.m_tags.size() ; ++i )
-        m_tags.push_back(new arlCore::Tag(*t.m_tags[i]));
-    */
-    return true;
-}
-
-unsigned int arlCore::Tags::size( void ) const
-{
-    return (unsigned int)m_tags.size();
-}
-
-std::string arlCore::Tags::getString( void ) const
-{
-    std::stringstream s;
-    unsigned int i;
-    // s<<this->Object::getString();
-    for( i=0 ; i<m_tags.size() ; ++i )
-        s<<m_tags[i]->getString();
-    return s.str();
-}
-
-bool arlCore::Tags::load( const std::string &fileName )
-{
-    if(fileName=="") return false;
-    return false;
-}
-
-bool arlCore::Tags::save( const std::string &fileName, bool overwrite ) const
-{
-    if(arlFile::fileExist(fileName) && !overwrite) return false;
-    // TODO
-    return false;
-}
-
-arlCore::Tag::csptr arlCore::Tags::getTag( unsigned int index ) const
-{
-    assert(index>=0 && index<m_tags.size());
-    if(index<0 || index>=m_tags.size()) return arlCore::Tag::sptr();
-    else return m_tags[index];
-}
-
-arlCore::Tag::sptr arlCore::Tags::getTag( unsigned int index )
-{
-    assert(index>=0 && index<m_tags.size());
-    if(index<0 || index>=m_tags.size()) return arlCore::Tag::sptr();
-    else return m_tags[index];
-}
-
-bool arlCore::Tags::delTag( arlCore::Tag::csptr T )
-{
-    if(T==0) return false;
-    std::vector< arlCore::Tag::sptr >::iterator it=m_tags.begin();
-    while( it!=m_tags.end() )
-        if(*it==T)
-        {
-            m_tags.erase(it);
-            return true;
-        }else ++it;
-    return false;
-}
-
-/*arlCore::Tag::csptr arlCore::Tags::addTag( const std::string &fileName )
-{
-    arlCore::Tag::sptr T=new arlCore::Tag(m_universe, fileName);
-    if(addTag(T)==0)
-    {
-        delete T;
-        m_log<<"Loading Tag \""<<fileName<<" failed";
-        log(ARL_LOG_WARNING);
-        return 0;
-    }
-    m_log<<"Tag \""<<fileName<<" is loaded";
-    log(ARL_LOG_INFO);
-    return T;
-}*/
-
-arlCore::Tag::sptr arlCore::Tags::addTag( arlCore::PointList::csptr pl )
-{
-    arlCore::Tag::sptr T= arlCore::Tag::New(m_universe, pl);
-    if(addTag(T)==0)
-    {
-        return arlCore::Tag::sptr();
-    }
-    return T;
-}
-
-arlCore::Tag::csptr arlCore::Tags::addTag( arlCore::Tag::sptr T )
-{
-    bool b=(T!=0);
-    // if(b) b=T->isOK(); VAG FIXME
-    if(!b) return arlCore::Tag::csptr();
-    m_tags.push_back(T);
-    return T;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/Tracker.cpp b/SrcLib/ARLcore/src/arlcore/Tracker.cpp
deleted file mode 100644
index 8e8520d..0000000
--- a/SrcLib/ARLcore/src/arlcore/Tracker.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/Tracker.h>
-
-arlCore::Tracker::Tracker( const std::string &name ):
-Object(arlCore::ARLCORE_CLASS_TRACKER, name)
-{}
-
-arlCore::Tracker::~Tracker( void )
-{}
-
-std::string arlCore::Tracker::getString( void ) const
-{
-    std::stringstream s;
-    s<<this->Object::getString();
-    return s.str();
-}
diff --git a/SrcLib/ARLcore/src/arlcore/UncertaintyPropag.cpp b/SrcLib/ARLcore/src/arlcore/UncertaintyPropag.cpp
deleted file mode 100644
index 90d7924..0000000
--- a/SrcLib/ARLcore/src/arlcore/UncertaintyPropag.cpp
+++ /dev/null
@@ -1,643 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/UncertaintyPropag.h>
-#include <stdlib.h>
-
-#include <stdlib.h>
-#include <cstdio>
-
-#include <vnl/algo/vnl_matrix_inverse.h>
-#include <vnl/vnl_transpose.h>
-
-#include <arlcore/Point.h>
-#include <arlcore/Misc.h>
-#include <arlcore/vnl_covariance_matrix.h>
-
-bool arlCore::propagateCovarianceToReconst3D( const std::vector<arlCore::Point::csptr>&list2D, const std::vector<const arlCore::Camera*> &camsList,
-     arlCore::Point::sptr point3D, arlCore::ARLCORE_RECONSTRUCTION3D methode, std::vector<double> &log, const bool pixelFrame)
-{
-    unsigned int i, l, perfect_reproj2D_nb=0;;
-    if(methode == arlCore::ARLCORE_R3D_TWO_LINES_PERFECT || methode == arlCore::ARLCORE_R3D_MULTI_LINES_APPROX || methode == arlCore::ARLCORE_R3D_MULTI_LINES_PERFECT)
-    {
-        const bool verbose=false;
-        if(verbose){std::cerr<<"point3D cov matrix= \n"<< point3D->getCovMatrix() <<std::endl;}
-
-        for(l=0;l<camsList.size();++l)
-            if( list2D[l]->getCovMatrix().is_zero() )
-                perfect_reproj2D_nb++;
-
-        if(perfect_reproj2D_nb > 1)// it means that 2 lines are perfect, then the cov matrix is zero
-        {
-            arlCore::vnl_covariance_matrix &cov_mat = point3D->getCovMatrix();
-            for(i=0;i<3;++i)
-                for(l=0;l<3;++l)
-                    cov_mat.put(i,l,0.0);// = Sigma_Point_Rec;
-            return true;
-        }
-
-        arlCore::vnl_covariance_matrix &cov_mat = point3D->getCovMatrix();
-        for(i=0;i<3;++i)
-            for(l=0;l<3;++l)
-                cov_mat.put(i,l,0.0);// = Sigma_Point_Rec;
-        return true;
-    }
-    if(methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION || methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY)
-    {
-        for(l=0;l<camsList.size();++l)
-            if( list2D[l]->getCovMatrix().is_zero() )
-                perfect_reproj2D_nb++;
-
-        if(perfect_reproj2D_nb > 1)// it means that 2 lines are perfect, then the cov matrix is zero
-        {
-            arlCore::vnl_covariance_matrix &cov_mat = point3D->getCovMatrix();
-            for(i=0;i<3;++i)
-                for(l=0;l<3;++l)
-                    cov_mat.put(i,l,0.0);// = Sigma_Point_Rec;
-            return true;
-        }
-    const bool verbose = false;
-    std::vector< vnl_matrix_fixed<double,2,3> > dml_dM(camsList.size());
-    std::vector< vnl_matrix_fixed<double,3,2> > dPhi_dml(camsList.size());
-    vnl_matrix_fixed<double,3,3> H, Hinv, Gamma, Sigma_Point_Rec;
-    H.fill(0.0);
-    Gamma.fill(0.0);
-
-    vnl_matrix_fixed<double,1,3> mat_Cint;
-    vnl_matrix_fixed<double,2,1> tmp_mat_2_1;
-    vnl_matrix_fixed<double,1,2> tilde_mi_sous_mi;
-    arlCore::Point::sptr tmp_arl_pt = arlCore::Point::New(3);
-    arlCore::Point::sptr p2D_undistorted = arlCore::Point::New(2);
-    double inner_product_Cl_Pil_M;
-
-    for(l=0;l<camsList.size();++l)
-    {
-        camsList[l]->undistort2DPoint( list2D[l], p2D_undistorted);
-        camsList[l]->getExtrinsic().trf(point3D,tmp_arl_pt);
-        inner_product_Cl_Pil_M = camsList[l]->getCint()[0] * (*tmp_arl_pt)[0]
-                                +camsList[l]->getCint()[1] * (*tmp_arl_pt)[1]
-                                +camsList[l]->getCint()[2] * (*tmp_arl_pt)[2];
-        if(verbose){std::cerr<<"inner= "<<inner_product_Cl_Pil_M<<std::endl;}
-        mat_Cint.set_row(0,camsList[l]->getCint());
-        tmp_mat_2_1.set_column(0,p2D_undistorted->getCoordinates());
-        if(verbose){std::cerr<<"mat_Cint= "<<mat_Cint<<std::endl;
-        std::cerr<<"tmp_mat_2_1= "<<tmp_mat_2_1<<std::endl;
-        std::cerr<<"tmp_arl_pt= "<<tmp_arl_pt->print()<<std::endl;}
-        if(verbose){std::cerr<<"Qint = "<<camsList[l]->getQint().as_matrix()<<std::endl;
-        std::cerr<<"tmp_mat_2_1 * mat_Cint "<<tmp_mat_2_1 * mat_Cint<<std::endl;}
-        //dml_dM[l] = (camsList[l]->getQint().as_matrix() + toto.as_matrix());// * camsList[l]->getExtrinsic().getRotation().as_matrix();
-        dml_dM[l] = (camsList[l]->getQint().as_matrix() - tmp_mat_2_1 * mat_Cint) * camsList[l]->getExtrinsic().getRotation();
-        dml_dM[l] /= inner_product_Cl_Pil_M;
-        if(verbose){std::cerr<<"dml_dM[l]= "<<dml_dM[l]<<std::endl;}
-
-        vnl_matrix_fixed<double,3,3> U;
-        arlCore::Point::sptr point3Dreproj= arlCore::Point::New(2);
-        camsList[l]->project3DPoint(point3D,point3Dreproj,false);
-        tilde_mi_sous_mi.set_row(0, p2D_undistorted->getCoordinates() - point3Dreproj->getCoordinates() );
-        if(methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION)
-        {
-            double sigma2D_2 = list2D[l]->getCovMatrix()(0,0);
-            if(verbose){std::cerr<<"mat cov="<<  list2D[l]->getCovMatrix()(0,0) <<" "<<list2D[l]->getCovMatrix()(1,1)<<"\n";}
-            // calcul de U + U.transpose NEGLIGEABLE !!
-            U = (camsList[l]->getExtrinsic().getRotation()).transpose().as_matrix() * (mat_Cint.transpose().as_matrix()) * tilde_mi_sous_mi.as_matrix() * dml_dM[l];
-            //std::cerr<<"U + U^t/sigma2D/<Cl|Pil*M>= "<<1/sigma2D_2/inner_product_Cl_Pil_M *(U+U.transpose())<<std::endl;
-            dPhi_dml[l] = -1/sigma2D_2 * dml_dM[l].transpose();
-            H += 1/sigma2D_2 * dml_dM[l].transpose() * dml_dM[l] + 1/sigma2D_2/inner_product_Cl_Pil_M *(U+U.transpose());
-            //std::cerr<<"H^l="<<H<<std::endl;
-            Gamma += sigma2D_2 * dPhi_dml[l] * dPhi_dml[l].transpose();
-        }
-        if(methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY)
-        {
-            vnl_matrix<double> sigma2D_inv = vnl_matrix_inverse<double>(list2D[l]->getCovMatrix());
-            // calcul de U + U.transpose NEGLIGEABLE !!
-            U = (camsList[l]->getExtrinsic().getRotation()).transpose().as_matrix() * (mat_Cint.transpose().as_matrix()) * tilde_mi_sous_mi.as_matrix() * sigma2D_inv * dml_dM[l];
-            //std::cerr<<"U + U^t/sigma2D/<Cl|Pil*M>= "<<1/sigma2D_2/inner_product_Cl_Pil_M *(U+U.transpose())<<std::endl;
-            dPhi_dml[l] = - dml_dM[l].transpose() * sigma2D_inv;
-            H += dml_dM[l].transpose()* sigma2D_inv * dml_dM[l] + 1/inner_product_Cl_Pil_M *(U+U.transpose());
-            //std::cerr<<"H^l="<<H<<std::endl;
-            Gamma += dPhi_dml[l] * list2D[l]->getCovMatrix() *dPhi_dml[l].transpose();
-        }
-    }
-    if(verbose){std::cerr<< "Hessian matrix ="<< H<<std::endl;}
-    Hinv = vnl_matrix_inverse<double>(H);
-    if(verbose){std::cerr<< "Hessian inv ="<< Hinv <<std::endl;
-    std::cerr<< "Gamma="<< Gamma <<std::endl;}
-    Sigma_Point_Rec  = Hinv * Gamma.as_matrix() * Hinv.transpose();
-    if(verbose){std::cerr<< "matrice covariance 3D = "<< Sigma_Point_Rec << std::endl;}
-    arlCore::vnl_covariance_matrix &cov_mat = point3D->getCovMatrix();
-    for(i=0;i<3;++i)
-        for(l=0;l<3;++l)
-            cov_mat.put(i,l,Sigma_Point_Rec[i][l]);// = Sigma_Point_Rec;
-    return true;
-    }//if(methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION || methode == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY)
-
-    if(methode == arlCore::ARLCORE_R3D_TWO_LINES_APPROX)
-    {
-        const bool verbose = false;
-        const bool verbose_cov = false;
-        //vnl_vector_fixed<double,3> I, J, m1C1, m2C2, C1C2, v, n1, n2;
-        vnl_vector_fixed<double,4> var, C2, m2;
-        arlCore::vnl_rigid_matrix P;//,PassageMatrix = camsList[1]->getExtrinsic() * camsList[0]->getInvExtrinsic();
-        //double num, denom, landa1, landa2;
-        unsigned int i, j;
-//      P =  vnl_matrix_inverse<double>(PassageMatrix.as_matrix() );
-        P = camsList[0]->getExtrinsic() * camsList[1]->getInvExtrinsic();
-        if(verbose_cov){std::cerr<<"Passage matrix =\n"<< P;}
-        arlCore::Point::sptr focal_m1 = arlCore::Point::New(3);
-        arlCore::Point::sptr focal_m2 = arlCore::Point::New(3);
-        camsList[0]->pixelPlaneToUnitFocalPlane( list2D[0], focal_m1, false );
-        camsList[1]->pixelPlaneToUnitFocalPlane( list2D[1], focal_m2, false );
-
-        arlCore::vnl_covariance_matrix &cov_mat_focal_m1 = focal_m1->getCovMatrix();
-        arlCore::vnl_covariance_matrix &cov_mat_focal_m2 = focal_m2->getCovMatrix();
-        vnl_matrix_fixed<double,3,3> tmp;
-
-        if(verbose_cov){std::cerr<<"cov_mat_m1 =\n"<<list2D[0]->getCovMatrix()<<"\n";
-        std::cerr<<"cov_mat_m2 =\n"<<list2D[1]->getCovMatrix()<<"\n";}
-
-        cov_mat_focal_m1.fill(0);
-        cov_mat_focal_m2.fill(0);tmp.fill(0);
-        cov_mat_focal_m1.put(0,0,(list2D[0]->getCovMatrix()[0][0]) / (camsList[0]->getfx()*camsList[0]->getfx()));
-        cov_mat_focal_m1.put(1,1,(list2D[0]->getCovMatrix()[1][1]) / (camsList[0]->getfy()*camsList[0]->getfy()));
-        tmp.put(0,0,(list2D[1]->getCovMatrix()[0][0]) / (camsList[1]->getfx()*camsList[1]->getfx()));
-        tmp.put(1,1,(list2D[1]->getCovMatrix()[1][1]) / (camsList[1]->getfy()*camsList[1]->getfy()));
-        if(verbose){std::cerr<<"tmp ="<< tmp <<"\n";}
-
-//      tmp = vnl_transpose(P.getRotation()) * tmp * P.getRotation();
-        tmp = P.getRotation() * tmp * vnl_transpose(P.getRotation() );
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_focal_m2.put(i,j,tmp[i][j]);// = Sigma_Point_Rec;
-
-        if(verbose_cov){std::cerr<<"cov_mat_focal_m1 =\n"<<cov_mat_focal_m1<<"\n";
-        std::cerr<<"cov_mat_focal_m2 =\n"<<cov_mat_focal_m2<<"\n";}
-
-        var.put(0, 0.0); var.put(1, 0.0); var.put(2, 0.0); var.put(3, 1.0);
-        C2 = P.as_matrix() * var.as_vector();
-        if(verbose){std::cerr<<"C2 ="<<C2<<"\n";}
-        // maintenant C2 est exprim�e dans le repere li�e � la cam�ra 1
-        var.put(0, (*focal_m2)[0]);
-        var.put(1, (*focal_m2)[1]);
-        var.put(2, (*focal_m2)[2]);
-        var.put(3, 1.0);
-        m2 = P.as_matrix() *var.as_vector();
-        if(verbose){std::cerr<<"m2 ="<<m2<<"\n";}
-        // maintenant m2 est exprim�e dans le repere li�e � la cam�ra 1
-        arlCore::Point::sptr m1C1 = arlCore::Point::New((-1.0)*(*focal_m1)[0], (-1.0)*(*focal_m1)[1], (-1.0)*(*focal_m1)[2]);
-        if(verbose){std::cerr<<"m1C1 ="<<m1C1->print()<<"\n";}
-        arlCore::vnl_covariance_matrix &cov_mat_m1C1 = m1C1->getCovMatrix();
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_m1C1.put(i,j,cov_mat_focal_m1[i][j]);
-
-        if(verbose_cov){std::cerr<<"cov_mat_focal_m1C1 =\n"<<cov_mat_m1C1<<"\n";}
-
-        var  = C2 - m2;
-        arlCore::Point::sptr m2C2 = arlCore::Point::New( C2[0] - m2[0], C2[1] - m2[1], C2[2] - m2[2]);
-        if(verbose){std::cerr<<"m2C2 ="<<m2C2->print()<<"\n";}
-        arlCore::vnl_covariance_matrix &cov_mat_m2C2 = m2C2->getCovMatrix();
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_m2C2.put(i,j,cov_mat_focal_m2[i][j]);
-
-        if(verbose_cov){std::cerr<<"cov_mat_focal_m2C2 =\n"<<cov_mat_m2C2<<"\n";}
-        //m2C2.put(0, var(0)); m2C2.put(1, var(1)); m2C2.put(2, var(2));
-        arlCore::Point::sptr C1C2 = arlCore::Point::New( C2[0], C2[1], C2[2]);
-        arlCore::vnl_covariance_matrix &cov_mat_C1C2 = C1C2->getCovMatrix();
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_C1C2.put(i,j,0.0);
-
-        if(verbose_cov){std::cerr<<"cov_mat_C1C2 =\n"<<cov_mat_C1C2<<"\n";}
-        //C1C2.put(0, C2(0)); C1C2.put(1, C2(1)); C1C2.put(2, C2(2));
-        // Determination du premier point I sur la droite de reprojection
-        //v = vnl_cross_3d(m1C1.as_vector() , m2C2.as_vector() );
-        arlCore::Point::sptr v  =  arlCore::Point::New(3);
-        arlCore::Point::sptr n1 =  arlCore::Point::New(3);
-        arlCore::Point::sptr n2 =  arlCore::Point::New(3);
-
-        v->cross_3D(m1C1 , m2C2);
-        if(verbose_cov){std::cerr<<"cov_mat_v =\n"<<v->getCovMatrix()<<"\n";}
-        //n1= vnl_cross_3d(v.as_vector(), m1C1.as_vector() );
-        n1->cross_3D(v, m1C1);
-        if(verbose){std::cerr<<"v ="<<v->print()<<"\n";
-        std::cerr<<"n1 ="<<n1->print()<<"\n";}
-        if(verbose_cov){std::cerr<<"cov_mat_n1 =\n"<<n1->getCovMatrix()<<"\n";}
-        //double dot1=0, dot2=0;
-        arlCore::Point::sptr dot1 =  arlCore::Point::New(1);
-        arlCore::Point::sptr dot2 =  arlCore::Point::New(1);
-        dot1->dotProduct(C1C2, n1);
-        dot2->dotProduct(m2C2, n1);
-        if(verbose){std::cerr<<"dot1="<< (*dot1)[0]<<"\n";std::cerr<<"cov_mat_dot1 =\n"<<dot1->getCovMatrix()<<"\n";
-        std::cerr<<"dot2="<< (*dot2)[0]<<"\n";std::cerr<<"cov_mat_dot2 =\n"<<dot2->getCovMatrix()<<"\n";}
-
-        assert( (*dot2)[0]!=0);
-        //landa1 = num/denom;
-        arlCore::Point::sptr landa1 = arlCore::Point::New(1);
-        landa1->divide(dot1,dot2);
-
-        arlCore::Point::sptr I = arlCore::Point::New(3);
-        arlCore::Point::sptr J = arlCore::Point::New(3);
-        arlCore::Point::sptr int_I = arlCore::Point::New(3);
-        arlCore::Point::sptr int_J = arlCore::Point::New(3);
-        int_I->multiply(landa1, m2C2);
-
-        I->set(0, C2(0) - (*landa1)[0]* (*m2C2)[0] );
-        I->set(1, C2(1) - (*landa1)[0]* (*m2C2)[1] );
-        I->set(2, C2(2) - (*landa1)[0]* (*m2C2)[2] );
-        arlCore::vnl_covariance_matrix &cov_mat_I = I->getCovMatrix();
-
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_I.put(i,j, int_I->getCovMatrix()[i][j]);
-//      for(i=0;i<3;++i)
-//          for(j=0;j<3;++j)
-//              cov_mat_I.put(i,j, landa1[0]*landa1[0]*m2C2.getCovMatrix()[i][j]);
-
-        if(verbose_cov){std::cerr<<"cov_mat_int_I =\n"<<int_I->getCovMatrix()<<"\n";
-        std::cerr<<"cov_mat_I =\n"<<I->getCovMatrix()<<"\n";}
-        // Determination du deuxieme point J sur la droite de reprojection
-        //n2 = vnl_cross_3d(v, m2C2);
-        n2->cross_3D(v, m2C2);
-        if(verbose){std::cerr<<"n2="<<n2->print()<<"\n";}
-//      dot1 = dot2 =0;
-//      for(i=0;i<3;++i)
-//      {
-//          dot1 +=  C1C2(i) * n2(i);
-//          dot2 +=  m1C1(i) * n2(i);
-//      }
-        dot1->dotProduct(C1C2, n2);
-        dot2->dotProduct(m1C1, n2);
-        //dot2.set(0, -1*dot2[0]);
-        if(verbose){std::cerr<<"dot1="<<(*dot1)[0]<<"\n";
-        std::cerr<<"dot2="<<(*dot2)[0]<<"\n";}
-        assert( (*dot2)[0]!=0);
-        arlCore::Point::sptr landa2 = arlCore::Point::New(1);
-//      landa2 = num/denom;
-        landa2->divide(dot1,dot2);
-        if(verbose){std::cerr<<"landa2="<< (*landa2)[0]<<"\n";}
-        int_J->multiply(landa2, m1C1);
-
-        J->set(0,  (*landa2)[0]* (*m1C1)[0] );
-        J->set(1,  (*landa2)[0]* (*m1C1)[1] );
-        J->set(2,  (*landa2)[0]* (*m1C1)[2] );
-        arlCore::vnl_covariance_matrix &cov_mat_J = J->getCovMatrix();
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_J.put(i,j, int_J->getCovMatrix()[i][j]);
-//      for(i=0;i<3;++i)
-//          for(j=0;j<3;++j)
-//              cov_mat_J.put(i,j, landa2[0]*landa2[0]*m1C1.getCovMatrix()[i][j]);
-
-        if(verbose_cov){std::cerr<<"cov_mat_J_int =\n"<<int_J->getCovMatrix()<<"\n";
-        std::cerr<<"cov_mat_J =\n"<<J->getCovMatrix()<<"\n";}
-        // On prend le barycentre de I et J comme estimation de la reconstruction
-        arlCore::Point::sptr point3D_rep_cam = arlCore::Point::New(3);;
-        point3D_rep_cam->x(0.5*(*I)[0] + 0.5*(*J)[0]);
-        point3D_rep_cam->y(0.5*(*I)[1] + 0.5*(*J)[1]);
-        point3D_rep_cam->z(0.5*(*I)[2] + 0.5*(*J)[2]);
-
-        if(verbose){std::cerr<<"point3D_rep_cam="<<point3D_rep_cam->print()<<"\n";}
-
-        arlCore::vnl_covariance_matrix &cov_mat_point3D = point3D->getCovMatrix();
-        vnl_matrix<double> toto(3,3);
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                toto.put(i,j, 0.5*0.5*I->getCovMatrix()[i][j] +  0.5*0.5*J->getCovMatrix()[i][j] );
-
-        if(verbose_cov){std::cerr<<"cov_mat_toto =\n"<< toto <<"\n";}
-
-        toto = camsList[0]->getInvExtrinsic().getRotation() * toto * camsList[0]->getExtrinsic().getRotation();
-//      toto = camsList[0]->getInvExtrinsic().getRotation() * toto;
-
-        for(i=0;i<3;++i)
-            for(j=0;j<3;++j)
-                cov_mat_point3D.put(i,j, toto[i][j]);
-        if(verbose_cov){std::cerr<<"cov_mat_point3D =\n"<< cov_mat_point3D <<"\n";}
-
-        if( cov_mat_point3D[0][0] < 0.0 || cov_mat_point3D[1][1] < 0.0 || cov_mat_point3D[2][2] < 0.0)
-            {std::cerr<<"Covariance Matrix has negative values "<<std::endl;assert(true);}
-    }
-    return true;
-}
-
-void arlCore::WriteTableau ( char *nom, std::vector<double> tab, unsigned int n)
-{
-    unsigned int  i;
-    FILE *f = fopen (nom, "w");
-    for( i=0 ; i<n ; ++i )
-        if(tab[i] != 0)
-    fprintf (f,"%1.8f\n", tab[i]);
-    fclose(f);
-}
-
-double arlCore::CumulativeChi2_3(double mu2)
-{   // Validation : KS test, mean and covar
-    return arlCore::IncompleteGammaP(3.0/2., mu2/2.);
-}
-
-double* arlCore::KSValidation3D(char* index_file)
-{
-    double I,*Itab,I2,ksp,ksdiff;
-    int N, i;
-    FILE *fd;
-    double *Result;
-    Result = new double[3];
-    /**************  ouverture du fichier passe en argument **********/
-    if((fd = fopen (index_file, "r")) == NULL)
-    {
-        fprintf (stderr, "no file %s\n", index_file);
-        assert(true);
-    }
-    N=0;
-    while( fscanf(fd,"%lg\n",&I) != EOF ) N++;
-        rewind(fd);
-    if( N==0)
-    {
-        fprintf (stderr, "le fichier est vide %s!!\n", index_file);
-        assert(true);
-    }
-    Itab = new double[N];
-    //    E_ISERR(FALSE,"Validation", "Allocation problem");
-    I = 0.0;
-    for(i=0;i<N;i++)
-    {
-        fscanf(fd,"%lg\n",Itab+i);
-        I += Itab[i];
-    }
-    I /= ((double) N);
-    I2 = 0;
-    for(i=0;i<N;i++)
-        I2 += (I-Itab[i])*(I-Itab[i]);
-    if( N > 1)
-        I2 /= ((double) N -1.);
-    /* KS test */
-    ksp = arlCore::SimpleKSTest( Itab, N, CumulativeChi2_3, &ksdiff);
-//  printf("*****************************************************************\n");
-//  printf("   Mean Val Index     -  Variance Val Index   - K-S significance \n");
-//  printf("   Expected: 3.0      -     %12.6g    -     0.01 / 1.0\n",sqrt(6.0));
-//  printf("       %12.6g    -     %12.6g   -    %12.6g\n",I,sqrt(I2),ksp);
-//  printf("*****************************************************************\n\n");
-    Result[0] = I;
-    Result[1] = sqrt(I2);
-    Result[2] = ksp;
-    /* fclose(fd); */
-    delete [] Itab;
-    //    K_Free( (void **) &Itab );
-    fclose(fd);
-    return(Result);
-}
-
-//////////////////////////////
-/************************************************************************/
-/* Probabilistic tests and densities */
-/************************************************************************/
-double arlCore::ProbKSTest(double alam)
-{   // Kolmogorov-Smirnov probability
-    const double EPS1 = 0.001;
-    const double EPS2 = 1.0e-12;
-    unsigned int i;
-    double fac=2.0,sum=0.0,term,termbf=0.0;
-    const double a2 = -2.0*alam*alam;
-    for( i=1 ; i<=100 ; ++i )
-    {
-        term=fac*exp(a2*i*i);
-        sum += term;
-        if( fabs(term)<=EPS1*termbf || fabs(term)<=EPS2*sum )
-            return sum;
-        fac = -fac;
-        termbf=fabs(term);
-    }
-    return 1.0;
-}
-double arlCore::LnGamma( double xx )
-{   // Log of Gamma Function (NRC : gammln)
-    double x,y,tmp,ser;
-    static double cof[6]=
-        {76.18009172947146, -86.50532032941677, 24.01409824083091,
-        -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5};
-    unsigned int i;
-    y=x=xx;
-    tmp=x+5.5;
-    tmp -= (x+0.5)*log(tmp);
-    ser=1.000000000190015;
-    for( i=0 ; i<6 ; ++i )
-        ser += cof[i]/++y;
-    return -tmp+log(2.5066282746310005*ser/x);
-}
-
-double IGammaCFraction(double a, double x)
-{   // Incomplete Gamma Function Continuous fraction estimation
-    const double FPMIN = 1.0e-30;
-    const double EPS = 3.0e-7;
-    const unsigned int ITMAX = 100;
-    int i;
-    double an,b,c,d,del,h;
-    const double gln = arlCore::LnGamma(a);
-    b=x+1.0-a;
-    c=1.0/FPMIN;
-    d=1.0/b;
-    h=d;
-    for( i=1 ; i<ITMAX ; ++i )
-    {
-        an = -i*(i-a);
-        b += 2.0;
-        d=an*d+b;
-        if(fabs(d) < FPMIN) d=FPMIN;
-        c=b+an/c;
-        if(fabs(c) < FPMIN) c=FPMIN;
-        d=1.0/d;
-        del=d*c;
-        h *= del;
-        if(fabs(del-1.0) < EPS) break;
-    }
-    //  E_ERR(i >= ITMAX, E_ERRNULL, -2.0, "IGammaCFraction(a,x)",   "a too large, ITMAX too small");
-    return(exp(-x+a*log(x)-(gln))*h);
-}
-
-double IGammaSeries(double a, double x)
-{   // Incomplete Gamma Function Series representation estimation
-    const double EPS = 3.0e-7;
-    const unsigned int ITMAX = 100;
-    unsigned int i;
-    double sum,del,ap, gamser;
-    if( x<=0.0 )
-    {
-        std::cerr<<"Error in IGammaSeries : x==0.0\n";
-        return 0.0;
-    }
-    //     {
-    //       E_ERR(x < 0.0, E_ERRNULL, -2.0,"IGammaSeries",
-    //      "x less than 0 in routine gser");
-    //       return 0.0;
-    //     }
-    else
-    {
-        const double gln = arlCore::LnGamma(a);
-        ap=a;
-        del=sum=1.0/a;
-        for( i=0 ; i<ITMAX ; ++i )
-        {
-            ++ap;
-            del *= x/ap;
-            sum += del;
-            if(fabs(del) < fabs(sum)*EPS)
-            {
-                gamser=sum*exp(-x+a*log(x)-(gln));
-                return gamser;
-            }
-        }
-    //     E_XERR(E_ERRNULL, -2.0, "IGammaSeries(a,x)",
-    //      "a too large, ITMAX too small");
-    }
-    return -2.0;
-}
-
-double arlCore::IncompleteGammaP(double a, double x)
-{   // Incomplete Gamma Function P(a,x)
-    // Cumulative pdf of chi^2_d : IncompleteGammaP(d/2, mu2/2)
-//   E_ERR (x < 0.0 || a <= 0.0, E_ERRNULL,-1.,
-//   "IncompleteGammaP", "Invalid arguments (must be positive)");
-    if(x < (a+1.0)) return IGammaSeries(a,x);
-    else return 1.0-IGammaCFraction(a,x);
-}
-
-double arlCore::CumulativeChi2(double mu2, int n)
-{   // Cumulative distribution of chi2_n(mu2)
-    return arlCore::IncompleteGammaP(n/2., mu2/2.);
-}
-
-double IBetaSeries(double a, double b, double x)
-{   // Continued fraction for Incomplete Beta Function   (NRC : betacf)
-    const unsigned int MAXIT = 100;
-    const double EPS = 3.0e-7;
-    const double FPMIN = 1.0e-30;
-    unsigned int m,m2;
-    double aa,c,d,del,h,qab,qam,qap;
-
-    qab=a+b;
-    qap=a+1.0;
-    qam=a-1.0;
-    c=1.0;
-    d=1.0-qab*x/qap;
-    if(fabs(d) < FPMIN) d=FPMIN;
-    d=1.0/d;
-    h=d;
-    for (m=1;m<=MAXIT;m++)
-    {
-        m2=2*m;
-        aa=m*(b-m)*x/((qam+m2)*(a+m2));
-        d=1.0+aa*d;
-        if(fabs(d) < FPMIN) d=FPMIN;
-        c=1.0+aa/c;
-        if(fabs(c) < FPMIN) c=FPMIN;
-        d=1.0/d;
-        h *= d*c;
-        aa = -(a+m)*(qab+m)*x/((a+m2)*(qap+m2));
-        d=1.0+aa*d;
-        if(fabs(d) < FPMIN) d=FPMIN;
-        c=1.0+aa/c;
-        if(fabs(c) < FPMIN) c=FPMIN;
-        d=1.0/d;
-        del=d*c;
-        h *= del;
-        if(fabs(del-1.0) < EPS) break;
-    }
-//   E_ERR(m > MAXIT, E_ERRNULL, -1,
-//  "IBetaSeries","a or b too big, or MAXIT too small in IBetaSeries");
-  return h;
-}
-
-double arlCore::IncompleteBetaI(register double a, register double b,register  double x)
-{   // Incomplete Beta Function Ix(a,b)  (NRC : betai)
-  register double bt;
-//   E_ERR (x < 0.0 || x > 1, E_ERRNULL,-1.,
-//   "IncompleteBetaI","Invalid x argument (must be between 0 and 1)");
-  if(x == 0.0 || x == 1.0)
-    bt=0.0;
-  else
-    bt=exp(LnGamma(a+b)-LnGamma(a)-LnGamma(b)+a*log(x)+b*log(1.0-x));
-  if(x < (a+1.0)/(a+b+2.0))
-    return bt*IBetaSeries(a,b,x)/a;
-  else
-    return 1.0-bt*IBetaSeries(b,a,1.0-x)/b;
-}
-
-double arlCore::CumulativeFisher(double a, double b, double x)
-{   // Cumulative distribution of Fisher-Snedecor F(a,b)(x)
-    return(1.0 - IncompleteBetaI(b/2., a/2., b/(b+a*x) ));
-}
-
-double CumulativeHotelling(double p, double n, double x)
-{   // Cumulative distribution for Hotelling's test :  F(p,n-p)(x)
-    return(1.0 - arlCore::IncompleteBetaI((n-p)/2., p/2., (n-p)/(n+p*(x-1.)) ));
-}
-
-int dcmp(double *a, double *b)
-{
-    if( *a<*b ) return(-1);
-    else if(*a > *b) return(+1);
-        else return(0);
-}
-
-//! @return maximum of 2 variables
-template <typename T> inline T max( const T& a, const T& b ){if(a>b) return a; else return b;}
-
-//! @return minimum of 2 variables
-template <typename T> inline T min( const T& a, const T& b ){if(a<b) return a; else return b;}
-
-double arlCore::SimpleKSTest( double *data, int n, double (*pdf)(double), double *d)
-{
-/*----------------------------------------------------------------------*/
-/* Simple Kolmogorov-Smirnov test : compare a set of n samples */
-/*  (stored in array data) with the (cumulative) pdf  */
-/* Output : d = maxdiff between distributions */
-/* Returned value = corresponding probability */
-/*----------------------------------------------------------------------*/
-    unsigned int i;
-    double dt, en, ff, fn, fo=0.0;
-    qsort( (void *) data,  n, sizeof(double), (int(*)(const void *, const void *)) dcmp);
-    en=n; // Pourquoi cette nouvelle variable?
-    *d=0.0;
-    for( i=0 ; i<n ; ++i )
-    {
-        fn = i/en; // Test Division par zero
-        ff = (*pdf)(data[i]);
-        dt = max(fabs(fo-ff),fabs(fn-ff));
-        if( dt>*d ) *d=dt;
-        fo=fn;
-    }
-    /* en=sqrt(en); */
-    /*return ProbKSTest((en+0.12+0.11/en)*(*d)); */
-    return ProbKSTest(sqrt(en)*(*d));
-}
-
-double arlCore::DoubleKSTest( double *data1, int n1, double *data2, int n2, double *d)
-{
-/*----------------------------------------------------------------------*/
-/* Double Kolmogorov-Smirnov test : compare the set of n1 samples data1 */
-/*   with the set of n2 samples data2 */
-/* Output : d = maxdiff between distributions */
-/* Returned value = corresponding probability */
-/*----------------------------------------------------------------------*/
-    int j1=0,j2=0;
-    double d1,d2,dt,en1,en2,en,fn1=0.0,fn2=0.0;
-    qsort( (void *) data1,  n1, sizeof(double),
-        (int(*)(const void *, const void *)) dcmp);
-    qsort( (void *) data2,  n2, sizeof(double),
-        (int(*)(const void *, const void *)) dcmp);
-    en1=n1;
-    en2=n2;
-    *d=0.0;
-    while(j1 < n1 && j2 < n2)
-    {
-        if((d1=data1[j1]) <= (d2=data2[j2])) fn1=j1++/en1;
-        if(d2 <= d1) fn2=j2++/en2;
-        if((dt=fabs(fn2-fn1)) > *d) *d=dt;
-    }
-    en=sqrt(en1*en2/(en1+en2));
-    return arlCore::ProbKSTest((en+0.12+0.11/en)*(*d));
-}
diff --git a/SrcLib/ARLcore/src/arlcore/UnitTestArlCore.cpp b/SrcLib/ARLcore/src/arlcore/UnitTestArlCore.cpp
deleted file mode 100644
index 8a25f67..0000000
--- a/SrcLib/ARLcore/src/arlcore/UnitTestArlCore.cpp
+++ /dev/null
@@ -1,1948 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/UnitTestArlCore.h>
-
-#include <vector>
-#include <string>
-#include <iostream>
-#include <fstream>
-#include <iomanip>
-#include <time.h>
-#include <iostream>
-#ifdef _WIN32
-  #include <conio.h> // kbhit & getch
-#endif //_WIN32
-
-#include <vnl/vnl_math.h>
-#include <vnl/algo/vnl_matrix_inverse.h>
-
-#include <arlcore/Misc.h>
-#include <arlcore/Camera.h>
-#include <arlcore/Calibration.h>
-#include <arlcore/FieldCorrection.h>
-#include <arlcore/Point.h>
-#include <arlcore/PointsList.h>
-#include <arlcore/SmartPointsList.h>
-#include <arlcore/PlaneSystem.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/Reconst3D.h>
-#include <arlcore/Optimization.h>
-#include <arlcore/UncertaintyPropag.h>
-#include <arlcore/vnl_rigid_vector.h>
-#include <arlcore/vnl_rotation3d_matrix.h>
-#include <arlcore/vnl_rotation3d_vector.h>
-#include <arlcore/Scenes.h>
-#include <arlcore/Mesh.h>
-#include <arlcore/ICP.h>
-
-static long int m_date;
-static long int m_time;
-
-void printHeader( const std::string &name, unsigned int nbIterations, double tolerance )
-{
-    const long int Seed = 1171888051;
-    std::cerr<<"\n************\n";
-    std::cerr<<"* Unit Test : "<<name<<"\n";
-    std::cerr<<"************\n";
-    std::cerr<<"* Iterations  = "<<nbIterations<<"\n";
-    std::cerr<<"* Tolerance   = "<<tolerance<<"\n";
-    if(!arlRandom::Random::initRandom("Random-100000000.txt",500000)==0)
-        std::cerr<<"* Random seed = Random-100000000.txt,500000\n";
-    else std::cerr<<"* Random seed = "<<arlRandom::Random::initRandom(Seed)<<"\n";
-    std::cerr<<"*\n";
-    m_date = arlTime::getNowDate();
-    m_time = arlTime::getNowTime();
-}
-
-bool printErrors( const std::string &name, const vnl_vector<double>& error, long int robustnessOK, long int robustnessTotal, double tolerance, bool Verbose=false)
-{
-    const unsigned int precision=4;
-    const double mean=error.mean();
-    double stdDev = 0;
-    unsigned int i;
-    for( i=0 ; i<error.size() ; ++i )
-        stdDev += (error[i]-mean)*(error[i]-mean);
-    if(error.size()>0) stdDev = sqrt(stdDev/error.size());
-    //Calcul de l'écart type plus elegant mais couteux en memoire
-    //vnl_vector<double> meanVect(error.size());
-    //meanVect.fill(mean);
-    //stdDev = (error-meanVect).rms();
-    bool test=true;
-    if(tolerance>=0) test=error.max_value()<=tolerance;
-    std::cerr<<std::setprecision(precision);
-    if(Verbose)
-        for( i=0; i<error.size() ; ++i )
-            std::cerr<<"* "<<name<<"["<<i<<"]="<<error[i]<<"\n";
-    std::cerr<<"* "<<name<<" : ";
-    if(tolerance>=0)
-    {
-        if(test) std::cerr<<"OK OK";
-        else std::cerr<<"ERROR";
-    }
-    std::cerr<<"\n*  Mean/Std = {"<<mean<<" , "<<stdDev<<"}\n";
-    std::cerr<<"*  Min/Max  = ["<<error.min_value()<<" , "<<error.max_value()<<"]\n";
-    double p=0;
-    if(robustnessTotal!=0) p=(double)robustnessOK*100.0/(double)robustnessTotal;
-    std::cerr<<"*  Robustness = "<<robustnessOK<<" / "<<robustnessTotal<<" = "<<p<<"%\n";
-    return test;
-}
-
-bool printErrors( const std::string &name, const vnl_vector_fixed<double,5>& stat, long int robustnessOK, long int robustnessTotal, double tolerance, bool Verbose=false)
-{
-    double min, max, mean, stdDev, RMS;
-    arlCore::computeStat( stat, min, max, mean, stdDev, RMS );
-    const unsigned int Precision=4;
-    const bool Test = max<tolerance;
-    std::cerr<<std::setprecision(Precision);
-    std::cerr<<"* "<<name<<" : ";
-    if(Test) std::cerr<<"OK OK\n";
-    else std::cerr<<"ERROR\n";
-    std::cerr<<"*  Mean/Std/RMS = {"<<mean<<" , "<<stdDev<<" , "<<RMS<<"}\n";
-    std::cerr<<"*  Min/Max  = ["<<min<<" , "<<max<<"]\n";
-    double p=0;
-    if(robustnessTotal!=0) p=(double)robustnessOK*100.0/(double)robustnessTotal;
-    std::cerr<<"*  Robustness = "<<robustnessOK<<" / "<<robustnessTotal<<" = "<<p<<"%\n";
-    return Test;
-}
-
-
-bool printFooter( unsigned int nbIterations, bool test )
-{
-    double b = (double)m_time;
-    m_date = arlTime::getNowDate();
-    m_time = arlTime::getNowTime();
-    double sec=0; //m_date-a;
-    if(b>m_time)
-        sec+=1.0-(b+(double)m_time)/1000000.0;
-    else
-        sec+=((double)m_time-b)/((double)CLK_TCK*10);
-    std::cerr<<"*\n";
-    std::cerr<<"*  Total Time = "<<sec<<" seconds\n";
-    std::cerr<<"*  Time/Iter. = "<<sec/nbIterations<<" seconds\n";
-    if(test) std::cerr<<"** OK OK OK OK OK OK OK OK";
-    else     std::cerr<<"** ERROR ERROR ERROR ERROR";
-    std::cerr<<"\n************\n";
-    return test;
-}
-
-// testRegistration3D3D
-bool arlCore::testRegistration3D3D( long int nbIterations, double tolerance )
-{
-    const bool Verbose = false;
-    const double VolumeSize = 500.0;
-    printHeader("Registration 3D/3D",nbIterations, tolerance);
-    vnl_vector<double> errorRotation(nbIterations);
-    vnl_vector<double> errorTranslation(nbIterations);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur )
-    {
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe);
-        const arlCore::PointList::sptr regPoints = scene.getTags().getTag(0)->getGeometry();
-        arlCore::PointList::sptr modelPoints = arlCore::PointList::New(3);
-        arlCore::vnl_rigid_matrix T1, T2;
-        T1.uniform_random(VolumeSize);
-        T1.trf(regPoints, modelPoints);
-//      unsigned int i;
-//      for( i=0 ; i<modelPoints->size() ; ++i )
-//          (*modelPoints)[i]->addGaussianNoise(GaussianNoise3D);
-        if(T2.register3D3D(regPoints, modelPoints, true))
-        {
-            ++robustnessOK;
-            T1.compare(T2, errorTranslation[compteur], errorRotation[compteur]);
-            //T2.RMS3D3D( modelPoints, regPoints, regPoints.size(),
-            //          erreur_recalage3D3D, errorVector[compteur], EC_3D3D);
-        }
-        ++robustnessTotal;
-    }//boucle compteur
-    bool test = printErrors("Erreur sur la translation",errorTranslation,robustnessOK,robustnessTotal,tolerance , Verbose);
-    test = printErrors("Erreur sur la rotation",errorRotation,robustnessOK,robustnessTotal,tolerance , Verbose ) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testICPRegistration
-bool arlCore::testICPRegistration( long int nbIterations, double tolerance )
-{
-    const bool Verbose = false;
-    const double VolumeSize = 10.0;
-    const double GaussianNoise3D = 0.0;
-    printHeader("ICP Registration",nbIterations, tolerance);
-    vnl_vector_fixed<double,5> errorRotation(0.0);
-    vnl_vector_fixed<double,5> errorTranslation(0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    arlCore::vnl_rigid_matrix T1, T2, Identity;
-    unsigned int i;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur )
-    {
-        const double Width=50, Length=50, Degree=2.0, ModelNoise=0.0;
-        arlCore::PointList::sptr summits = arlCore::PointList::New();
-        arlCore::Mesh meshModel(1.0);
-        double altitude = 10.0, modelXStep=0.2, modelZStep=0.2;
-        double cloudXStep = 0.1, cloudZStep = 2.0;
-        const double FringeWidth = cloudZStep/4.0;
-        unsigned int nbSummits = 8;
-       PointList::csptr model = meshModel.getPointList();
-        if(compteur==0) meshModel.load("G:/Mouse/ToSort/19052008-sd-ext.raw", GaussianNoise3D);
-        if(compteur>0 || meshModel.getPointList()->size()<1 )
-        {
-            for( i=0 ; i<nbSummits ; ++i )
-            {
-                const double X = arlRandom::Random::uniformDoubleRnd( 0, Width );
-                const double Z = arlRandom::Random::uniformDoubleRnd( 0, Length );
-                double Y = arlRandom::Random::uniformDoubleRnd( altitude/2, altitude );
-                if(i<4) Y = arlRandom::Random::uniformDoubleRnd( 0, altitude/2 );
-                summits->push_back(arlCore::Point::New(X, Y, Z));
-            }
-            meshModel.generateY( Width, Length, modelXStep, modelZStep, Degree, ModelNoise, summits );
-        }
-        std::stringstream modelName;
-        modelName<<"../Model"<<compteur<<".raw";
-        meshModel.save(modelName.str());
-        if(compteur==0) meshModel.resampling(.5);
-        //if(Verbose) std::cout<<compteur<<"\n";
-        // Set Random transformation
-        const double Phi = arlRandom::Random::uniformDoubleRnd( -15*arlCore::DegToRad, 15*arlCore::DegToRad );
-        const double Theta = arlRandom::Random::uniformDoubleRnd( -15*arlCore::DegToRad, 15*arlCore::DegToRad );
-        const double Psy = arlRandom::Random::uniformDoubleRnd( -15*arlCore::DegToRad, 15*arlCore::DegToRad );
-        vnl_rotation3d_matrix rot( Phi, Theta, Psy );
-        T1.setRotation(rot);
-        T1.put(0,3,arlRandom::Random::uniformDoubleRnd( -VolumeSize/2, VolumeSize/2 ));
-        T1.put(1,3,arlRandom::Random::uniformDoubleRnd( -VolumeSize/2, VolumeSize/2 ));
-        T1.put(2,3,arlRandom::Random::uniformDoubleRnd( -VolumeSize/2, VolumeSize/2 ));
-        //T1.uniform_random(VolumeSize);
-        //T1.trf(model, cloud);
-        if(Verbose) std::cout<<T1.getString();
-        arlCore::Mesh meshCloud(-1.0);
-        arlCore::PointList fringes(3);
-        const arlCore::PointList::sptr cloud = arlCore::PointList::New();
-        if(compteur==0)
-        {
-            arlCore::Point::sptr gravity =  arlCore::Point::New();
-            arlCore::Point::sptr boundingBox1 =  arlCore::Point::New();
-            arlCore::Point::sptr boundingBox2 =  arlCore::Point::New();
-            double minRadius, maxRadius, std;
-            model->properties( gravity, boundingBox1, boundingBox2, minRadius, maxRadius, std );
-            const double Ratio = (FringeWidth/2.0)/cloudZStep;
-            for( i=0 ; i<model->size() ; ++i )
-                if( (*model)[i])
-                {
-                    //if(Verbose) std::cout<<"Ratio = "<<Ratio<<"\n";
-                    arlCore::Point::sptr point = arlCore::Point::New( (*model)[i] );
-                    const double Z = point->z();
-                    int fringeNo = int(Z/cloudZStep);
-                    //if(Verbose) std::cout<<"FringeNo = "<<fringeNo<<"\n";
-                    point->setScalar(-fringeNo);
-                    double d = fabs((Z/cloudZStep)-(double)fringeNo);
-                    //if(Verbose) std::cout<<"d = "<<d<<"\n";
-                    if(d<=Ratio) fringes.push_back(point);
-                }
-            cloud->copy(fringes);
-        }else
-        {
-            meshCloud.generateY( Width, Length, cloudXStep, cloudZStep, Degree, GaussianNoise3D, summits );
-            cloud->copy( *(meshCloud.getPointList()) );
-        }
-        std::stringstream cloudName, cloudName2;
-        cloudName<<"../Cloud"<<compteur<<".raw";
-        cloudName2<<"../Cloud"<<compteur<<".pts";
-        if(compteur==0) fringes.save(cloudName2.str());
-        else meshCloud.save(cloudName.str());
-        if(Verbose) std::cout<<"Cloud ("<<cloud->size()<<") = "<<cloudName.str()<<"\n";
-        if(Verbose) std::cout<<"Model ("<<model->size()<<") = "<<modelName.str()<<"\n";
-        T2=T1;
-        std::stringstream trfName;
-        trfName<<"../init"<<compteur<<".trf";
-        T2.save(trfName.str());
-        //T2.invert();
-        const bool JustVisible = false;
-        const unsigned int NbIterationsMax = 500;
-        arlCore::ICP icp( model, cloud, JustVisible);
-        icp.setMaxIterations(NbIterationsMax);
-        icp.initSolution(T2);
-        //if(T2.registerICP( model, *cloud, firstRMS, lastRMS, iterations, JustVisible, RmsMax, NbIterationsMax ))
-        if(icp.solve())
-        {
-            double errorT, errorR;
-            ++robustnessOK;
-            Identity.compare(icp.getSolution(), errorT, errorR);
-            addValue(errorTranslation, errorT);
-            addValue(errorRotation, errorR);
-            if(Verbose)
-            {
-                std::cout<<"*** ICP Initialization\n";
-                std::cout<<"RMS = "<<icp.getStartError()<<" -> "<<icp.getEndError()<<"\n";
-                std::cout<<"Iterations = "<<icp.getNbIterations()<<"\n";
-                std::cout<<"Error Translation = "<<errorT<<"\n";
-                std::cout<<"Error Rotation = "<<errorR<<"\n";
-                std::cout<<icp.getSolution().getString()<<"\n";
-            }
-            icp.optimiseLS();
-            Identity.compare(icp.getSolution(), errorT, errorR);
-            if(Verbose)
-            {
-                std::cout<<"*** ICP LM optimisation\n";
-                std::cout<<"RMS = "<<icp.getStartError()<<" -> "<<icp.getEndError()<<"\n";
-                std::cout<<"Iterations = "<<icp.getNbIterations()<<"\n";
-                std::cout<<"Error Translation = "<<errorT<<"\n";
-                std::cout<<"Error Rotation = "<<errorR<<"\n";
-                std::cout<<icp.getSolution().getString()<<"\n";
-            }
-        }
-        ++robustnessTotal;
-    }//boucle compteur
-    std::string name="Translation error";
-    bool test = printErrors(name, errorTranslation, robustnessOK, robustnessTotal, tolerance);
-    name="Rotation error";
-    test = printErrors(name, errorRotation, robustnessOK, robustnessTotal, tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testRegistration3D3DUncertainty
-bool arlCore::testRegistration3D3DUncertainty( long int nbIterations, double tolerance )
-{
-    const double VolumeSize = 500.0;
-    printHeader("Registration Uncertainty 3D/3D",nbIterations, tolerance);
-    vnl_vector<double> errorRotation(nbIterations);
-    vnl_vector<double> errorTranslation(nbIterations);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    std::vector<double> log, opt_param;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur )
-    {
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe);
-       PointList::sptr worldPoints = scene.getTags().getTag(0)->getGeometry();
-        arlCore::PointList::sptr modelPoints= arlCore::PointList::New(3);
-        arlCore::vnl_rigid_matrix T1, T2;
-        T1.uniform_random(VolumeSize);
-        T1.trf(worldPoints, modelPoints);
-
-        double rangeGaussianNoise3D_x = arlRandom::Random::gaussianRnd(VolumeSize/100.0);
-        double rangeGaussianNoise3D_y = arlRandom::Random::gaussianRnd(VolumeSize/100.0);
-        double rangeGaussianNoise3D_z = arlRandom::Random::gaussianRnd(VolumeSize/100.0);
-        if(rangeGaussianNoise3D_x < 1e-3){rangeGaussianNoise3D_x = 0.1;}
-        if(rangeGaussianNoise3D_y < 1e-3){rangeGaussianNoise3D_y = 0.1;}
-        if(rangeGaussianNoise3D_z < 1e-3){rangeGaussianNoise3D_z = 0.1;}
-//      for(unsigned int i=0 ; i<modelPoints->size() ; ++i )
-//      {
-//          (*modelPoints)[i]->set(0, (*modelPoints)[i]->x() + arlRandom::Random::gaussianRnd(rangeGaussianNoise3D_x));
-//          (*modelPoints)[i]->set(1, (*modelPoints)[i]->y() + arlRandom::Random::gaussianRnd(rangeGaussianNoise3D_y));
-//          (*modelPoints)[i]->set(2, (*modelPoints)[i]->z() + arlRandom::Random::gaussianRnd(rangeGaussianNoise3D_z));
-//      }
-        // we fill the covariance matrix to check that the optimization process takes it into account
-        // we do not apply any noise on the data !! This is only done for uncertainty prediction
-        for( unsigned int i=0 ; i<modelPoints->size() ; ++i )
-        {
-            arlCore::vnl_covariance_matrix &cov_mat = (*modelPoints)[i]->getCovMatrix();
-            cov_mat.fill(0.0);
-            cov_mat.put(0,0,rangeGaussianNoise3D_x*rangeGaussianNoise3D_x);
-            cov_mat.put(1,1,rangeGaussianNoise3D_y*rangeGaussianNoise3D_y);
-            cov_mat.put(2,2,rangeGaussianNoise3D_z*rangeGaussianNoise3D_z);
-            //std::cerr<<"mat cov = " << cov_mat <<std::endl;
-        }
-
-        if(T2.register3D3DUncertainty(worldPoints, modelPoints, arlCore::ARLCORE_REGISTER3D3D_GC, opt_param, log/*, worldPoints.size()*/) )
-        {
-            ++robustnessOK;
-            T1.compare(T2, errorTranslation[compteur], errorRotation[compteur]);
-            //T2.RMS3D3D( modelPoints, worldPoints, worldPoints.size(),
-            //          erreur_recalage3D3D, errorVector[compteur], EC_3D3D);
-        }
-        ++robustnessTotal;
-    }//boucle compteur
-    bool test = printErrors("Erreur sur la translation",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur la rotation",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testProjectiveRegistration
-bool arlCore::testProjectiveRegistration( long int nbIterations, double tolerance )
-{
-    const double TransfVolumeSize = 500.0;
-    const double GaussianNoise2D = 0.0;
-    const unsigned int nbTypes = arlCore::ARLCORE_PR_NBTYPES;
-    printHeader("Projective registration",nbIterations, tolerance);
-    std::vector< vnl_vector_fixed<double,5> > errorRotation(nbTypes);
-    std::vector< vnl_vector_fixed<double,5> > errorTranslation(nbTypes);
-    std::vector<long int> robustnessOK(nbTypes), robustnessTotal(nbTypes);
-    double errorT, errorR;
-    long int compteur;
-    unsigned int enum_3D2D, i,j;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        //std::cerr<<"Iteration "<<compteur<<std::endl;
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe);
-        const arlCore::CameraList &cameras = scene.getCameras();
-        PointList::sptr worldPoints = scene.getTags().getTag(0)->getGeometry();
-        std::vector< std::vector<arlCore::Point::csptr> > reprojection2D(cameras.size());
-        arlCore::SmartPointList::sptr splMonde = arlCore::SmartPointList::New();
-        //std::cerr<<"Camera Number "<<cameras.size()<<std::endl;
-        //std::cerr<<"Point Number "<<worldPoints.size()<<std::endl;
-        for( j=0 ; j<cameras.size() ; ++j )
-        {
-            scene.detection( j+1, 0, splMonde, GaussianNoise2D );
-            splMonde->getPoints(reprojection2D[j], j+1, ::boost::dynamic_pointer_cast<void>(scene.getTags().getTag(0)) );
-        }
-        arlCore::vnl_rigid_matrix T1,T2;
-        T1.uniform_random(TransfVolumeSize);
-        arlCore::PointList::sptr modelPoints =arlCore::PointList::New(3);
-        T1.trf(worldPoints, modelPoints);
-        for(enum_3D2D=arlCore::ARLCORE_PR_UNKNOWN+1,i=0; enum_3D2D <arlCore::ARLCORE_PR_NBTYPES; ++enum_3D2D,++i)
-        {
-            if( enum_3D2D!=ARLCORE_PR_ISPPC_CG && enum_3D2D!=ARLCORE_PR_OSPPC_CG && enum_3D2D!=ARLCORE_PR_EPPC_CG )
-            {
-                //std::cerr<<"Method :"<<ARLCORE_PROJECTIVE_REGISTRATION_NAMES[enum_3D2D]<<std::endl;
-                if(compteur==0)
-                {
-                    errorTranslation[i].fill(0.0);
-                    errorRotation[i].fill(0.0);
-                    robustnessOK[i]=0;
-                    robustnessTotal[i]=0;
-                }
-                T2.setIdentity();
-                std::vector<double> log, param_optimisation;
-                if(arlCore::multiViewPointRegistration3D2D( cameras.getList(), reprojection2D, modelPoints,
-                    T2, (arlCore::ARLCORE_PROJECTIVE_REGISTRATION)enum_3D2D, param_optimisation, log, 0))
-                {
-                    T1.compareInverse(T2, errorT, errorR);
-                    addValue(errorTranslation[i], errorT);
-                    addValue(errorRotation[i], errorR);
-                    ++robustnessOK[i];
-                }
-                ++robustnessTotal[i];
-            }
-        }
-    }//boucle compteur
-    bool test=true;
-    for(enum_3D2D=arlCore::ARLCORE_PR_UNKNOWN+1,i=0; enum_3D2D <arlCore::ARLCORE_PR_NBTYPES; ++enum_3D2D,++i)
-    {
-        if( enum_3D2D!=ARLCORE_PR_ISPPC_CG && enum_3D2D!=ARLCORE_PR_OSPPC_CG && enum_3D2D!=ARLCORE_PR_EPPC_CG )
-        {
-            std::string name="Translation error ("+arlCore::ARLCORE_PROJECTIVE_REGISTRATION_NAMES[enum_3D2D]+")";
-            test = printErrors(name,errorTranslation[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-            name="Rotation error ("+arlCore::ARLCORE_PROJECTIVE_REGISTRATION_NAMES[enum_3D2D]+")";
-            test = printErrors(name,errorRotation[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-        }
-    }
-    return printFooter(nbIterations, test);
-}
-
-// testHomographyRegistration
-bool arlCore::testHomographyRegistration( long int nbIterations, double tolerance )
-{
-    const double VolumeSize = 500.0;
-    const double GaussianNoise2D = 0.0;
-    printHeader("Homography registration",nbIterations, tolerance);
-    vnl_vector_fixed<double,5> errorRotation(0.0);
-    vnl_vector_fixed<double,5> errorTranslation(0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    double errorT, errorR;
-    unsigned int i;
-    long int  compteur;
-    for(compteur=0;compteur<nbIterations;++compteur)
-    {
-        //std::cerr<<"Compteur ="<<compteur<<std::endl;
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe);
-        arlCore::Point::csptr centre=scene.getCentre();
-        const arlCore::CameraList &cameras = scene.getCameras();
-        arlCore::Tag::sptr tag_monde_plan = scene.getTags().getTag(1);
-        arlCore::PointList::sptr point_monde_plan = tag_monde_plan->getGeometry();
-        arlCore::vnl_rotation3d_vector random_rot_vec;
-        arlCore::Point translation(0,0,0),tmp_trf;
-        random_rot_vec.uniform_random();
-        translation.shapeRandom(ARLCORE_SHAPE_CUBE, VolumeSize);
-        arlCore::vnl_rotation3d_matrix random_rot_mat(random_rot_vec);
-        arlCore::vnl_rigid_matrix T1, T2;
-        T1.setRotation(random_rot_mat);
-        for( i=0 ; i<3 ; ++i )
-             T1.put(i,3, translation[i] );
-        arlCore::PointList::sptr point_plan_a_recaler = arlCore::PointList::New(3);
-            //on change la transfo de maniere a positionner les points dans le champ de vue des cameras
-        T1.put(0,3, centre->x() );T1.put(1,3, centre->y() );T1.put(2,3, centre->z() );
-        for(i=0; i<point_monde_plan->size(); ++i)
-        {//on met dans point_plan_a_recaler la position des points plans 3D dans le repere monde avec z=0
-            point_plan_a_recaler->push_back( (*point_monde_plan)[i] );
-            T1.trf( (*point_monde_plan)[i] );
-        }
-        T1.invert();
-        for( i=0 ; i<cameras.size() ; ++i)
-        {
-            std::vector<arlCore::Point::csptr> reprojection2D;
-            arlCore::SmartPointList::sptr splMonde = arlCore::SmartPointList::New();
-            scene.detection( i+1, 1, splMonde, GaussianNoise2D );
-            splMonde->getPoints(reprojection2D, i+1, tag_monde_plan);
-            std::vector<double> log, param_optimisation;
-            T2.setIdentity();
-            std::vector< arlCore::Point::csptr> tmp =  point_plan_a_recaler->getListCopy();
-            if( arlCore::planarHomographyRegistration_3D_2D(cameras[i], reprojection2D, tmp ,  T2, param_optimisation, log, true) ) //VAG FIXME PERF getListCopy()
-            {
-                T1.compareInverse(T2, errorT, errorR);
-                addValue(errorTranslation, errorT);
-                addValue(errorRotation, errorR);
-                ++robustnessOK;
-            }
-            ++robustnessTotal;
-        }
-    }//boucle compteur
-    bool test = printErrors("Erreur sur la translation",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur la rotation",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testReconstructionPolyscopic
-bool arlCore::testReconstructionPolyscopic( long int nbIterations, double tolerance)
-{
-    printHeader("Polyscopic reconstruction",nbIterations, tolerance);
-    const bool Verbose = false;
-    const double GaussianNoise2D=0.0;
-    std::vector<double> log;
-    std::vector<long int> robustnessOK, robustnessTotal;
-    arlCore::Point::sptr point_reconstruit = arlCore::Point::New();
-    long int compteur;
-    unsigned int i,j,k,enum_recons,plane=0;
-    std::vector< vnl_vector_fixed<double,5> > errorReproj;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        //std::cerr << "Iteration " << compteur <<std::endl;
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe);
-        const unsigned int NbCameras = (unsigned int)scene.getCameras().size();
-        const unsigned int NbPoints = (unsigned int)scene.getTags().getTag(0)->getGeometry()->size();
-        const std::vector<arlCore::Camera> &cameras = scene.getCameras().getList();
-        // creation de points 3D autour du point mire
-        // worldPoints = point dans un volume pour tester le recalage 3D/3D et ISPPC OSPPC et EPPC
-        // FONCTION(point_mire, nombre de points max, parametre de tirage, points tires, points tires bruites, param bruit)
-        const arlCore::Tag::sptr tag_monde = scene.getTags().getTag(0);
-        const arlCore::Tag::sptr tag_monde_plan = scene.getTags().getTag(1);
-       PointList::csptr worldPoints = tag_monde->getGeometry();
-        std::vector< std::vector<arlCore::Point::csptr> > reprojection2D(NbCameras);
-        arlCore::SmartPointList::sptr splMonde= arlCore::SmartPointList::New();
-        for( j=0 ; j<NbCameras ; ++j)
-        {
-            scene.detection( j+1, 0, splMonde, GaussianNoise2D );
-            splMonde->getPoints(reprojection2D[j], j+1, tag_monde);
-        }
-        for(enum_recons=arlCore::ARLCORE_R3D_UNKNOWN +1,k=0; enum_recons<arlCore::ARLCORE_R3D_NBTYPE; ++enum_recons,++k)
-        {
-            if(Verbose) std::cerr << "Changement de methode\n";
-            if( compteur==0 )
-            {
-                vnl_vector_fixed<double,5> tmp(0.0);
-                errorReproj.push_back(tmp);
-                robustnessOK.push_back(0);
-                robustnessTotal.push_back(0);
-            }
-            for( i=0 ; i<NbPoints ; ++i )
-            {
-                std::vector<arlCore::Point::csptr> pointList2D;
-                    for( j=0 ; j<NbCameras ; ++j )
-                        pointList2D.push_back(reprojection2D[j][i]);
-                    if( arlCore::reconst3D( pointList2D, cameras, point_reconstruit, (arlCore::ARLCORE_RECONSTRUCTION3D) enum_recons, plane, log) )
-                    {
-                        const double Error = point_reconstruit->distance( (*worldPoints)[i] );
-                        addValue(errorReproj[k], Error);
-                        if(Verbose) std::cerr << "Point reconstruit = "<< (*point_reconstruit)[0] <<" "<< (*point_reconstruit)[1] <<" "<<(*point_reconstruit)[2] <<"\n";
-                        ++robustnessOK[k];
-                    }
-                    ++robustnessTotal[k];
-            }
-        }
-    }//boucle compteur
-    bool test = true;
-    for(enum_recons=arlCore::ARLCORE_R3D_UNKNOWN+1,i=0; enum_recons<arlCore::ARLCORE_R3D_NBTYPE; ++enum_recons,++i)
-    {
-        std::string name="Reconstruction error ("+arlCore::ARLCORE_RECONSTRUCTION3D_NAMES[enum_recons]+")";
-        test = printErrors(name,errorReproj[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-    }
-    return printFooter(nbIterations, test);
-}
-
-// testReconstructionPolyscopicUncertainty
-bool arlCore::testReconstructionPolyscopicUncertainty( long int nbIterations, double tolerance)
-{
-    printHeader("Polyscopic reconstruction uncertainty",nbIterations, tolerance);
-    const bool Verbose = false;
-    const double rangeGaussianNoise2D_x=2.0, rangeGaussianNoise2D_y=2.0;
-    std::vector<double> log;
-    std::vector< std::vector<double> > index_mu(6);//(nbIterations);
-    std::vector< vnl_vector<double> > errorVector;
-    std::vector<long int> robustnessOK, robustnessTotal;
-    arlCore::Point::sptr point_reconstruit =  arlCore::Point::New();
-    long int compteur, nbpt=0;
-    unsigned int i,j,k,enum_recons,plane=0;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe,200,1);
-        const unsigned int nbCameras = (unsigned int)scene.getCameras().size();
-        const unsigned int nbPoints = scene.getTags().getTag(0)->getGeometry()->size();
-        const std::vector<arlCore::Camera> &cameras = scene.getCameras().getList();
-        // creation de points 3D autour du point mire
-        // worldPoints = point dans un volume pour tester le recalage 3D/3D et ISPPC OSPPC et EPPC
-        // FONCTION(point_mire, nombre de points max, parametre de tirage, points tires, points tires bruites, param bruit)
-        const arlCore::Tag::sptr tag_monde = scene.getTags().getTag(0);
-        const arlCore::Tag::sptr tag_monde_plan = scene.getTags().getTag(1);
-       PointList::csptr worldPoints = tag_monde->getGeometry();
-        std::vector< std::vector<arlCore::Point::sptr> > reprojection2D(nbCameras);
-        std::vector< std::vector<arlCore::Point::csptr> > reprojection2D_nonoise(nbCameras);
-        arlCore::SmartPointList::sptr  splMonde = arlCore::SmartPointList::New();
-        for( j=0 ; j<nbCameras ; ++j)
-        {
-            scene.detection( j+1, 0, splMonde, 0.0 );
-            splMonde->getPoints(reprojection2D_nonoise[j], j+1, tag_monde);
-            for( i=0 ; i<nbPoints ; ++i )
-            {
-                arlCore::Point::sptr tmp = arlCore::Point::New(2);
-                reprojection2D[j].push_back(tmp);
-            }
-        }
-        double GaussianNoise2D_x = arlRandom::Random::gaussianRnd(rangeGaussianNoise2D_x);
-        double GaussianNoise2D_y = arlRandom::Random::gaussianRnd(rangeGaussianNoise2D_y);
-        double GaussianNoise2D = 0.1;//arlRandom::Random::gaussianRnd(rangeGaussianNoise2D);
-//      std::cerr << "GaussianNoise2D_x["<<compteur<<"] =" << GaussianNoise2D_x<<std::endl;
-//      std::cerr << "GaussianNoise2D_y["<<compteur<<"] =" << GaussianNoise2D_y<<std::endl;
-        std::cerr << "GaussianNoise2D["<<compteur<<"] =" << GaussianNoise2D<<std::endl;
-//      for( j=0 ; j<nbCameras ; ++j)
-//          for( i=0 ; i<nbPoints ; ++i )
-//          {
-//              reprojection2D[j][i]->set(0, reprojection2D[j][i]->x() + arlRandom::Random::gaussianRnd(GaussianNoise2D_x));
-//              reprojection2D[j][i]->set(1, reprojection2D[j][i]->y() + arlRandom::Random::gaussianRnd(GaussianNoise2D_y));
-//              arlCore::vnl_covariance_matrix &cov_mat = reprojection2D[j][i]->getCovMatrix();
-//              cov_mat.put(0,0,GaussianNoise2D_x*GaussianNoise2D_x);
-//              cov_mat.put(1,0,0.0);
-//              cov_mat.put(0,1,0.0);
-//              cov_mat.put(1,1,GaussianNoise2D_y*GaussianNoise2D_y);
-//          }
-
-//      for(enum_recons=arlCore::ARLCORE_R3D_UNKNOWN +1,k=0; enum_recons<arlCore::ARLCORE_R3D_NBTYPE; ++enum_recons,++k)
-        for(enum_recons=arlCore::ARLCORE_R3D_TWO_LINES_APPROX ,k=0; enum_recons<=arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION; ++enum_recons,++k)
-//      for(enum_recons=arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION ,k=0; enum_recons<=arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY; ++enum_recons,++k)
-        {
-            if( compteur==0 )
-            {
-                vnl_vector<double> tmp(nbIterations);
-                errorVector.push_back(tmp);
-                robustnessOK.push_back(0);
-                robustnessTotal.push_back(0);
-            }
-
-            if(enum_recons == arlCore::ARLCORE_R3D_TWO_LINES_APPROX || enum_recons == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION)
-{
-            if(enum_recons == arlCore::ARLCORE_R3D_TWO_LINES_APPROX)
-            {
-                for( j=0 ; j<nbCameras ; ++j)
-                {
-                    for( i=0 ; i<nbPoints ; ++i )
-                    {
-                        //*reprojection2D[j][i] = *reprojection2D_nonoise[j][i];
-                        //std::cerr<<"reprojection2D_nonoise ="<<reprojection2D_nonoise[j][i]->x()<<" "<<reprojection2D_nonoise[j][i]->y()<<"\n";
-                        reprojection2D[j][i]->set(0, reprojection2D_nonoise[j][i]->x() + arlRandom::Random::gaussianRnd(GaussianNoise2D));
-                        reprojection2D[j][i]->set(1, reprojection2D_nonoise[j][i]->y() + arlRandom::Random::gaussianRnd(GaussianNoise2D));
-                        //std::cerr<<"reprojection2D="<<reprojection2D[j][i]->x()<<" "<<reprojection2D[j][i]->y()<<"\n";
-                        arlCore::vnl_covariance_matrix &cov_mat = reprojection2D[j][i]->getCovMatrix();
-                        cov_mat.put(0,0,GaussianNoise2D*GaussianNoise2D);
-                        cov_mat.put(1,0,0.0);
-                        cov_mat.put(0,1,0.0);
-                        cov_mat.put(1,1,GaussianNoise2D*GaussianNoise2D);
-                        //std::cerr<<"cov_mat="<<cov_mat<<"\n";
-                    }
-                }
-            }
-//          if(enum_recons == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION)
-//          {
-//              for( j=0 ; j<nbCameras ; ++j)
-//              {
-//                  for( i=0 ; i<nbPoints ; ++i )
-//                  {
-//                      //*reprojection2D[j][i] = *reprojection2D_nonoise[j][i];
-//                      //std::cerr<<"reprojection2D_nonoise ="<<reprojection2D_nonoise[j][i]->x()<<" "<<reprojection2D_nonoise[j][i]->y()<<"\n";
-//                      reprojection2D[j][i]->set(0, reprojection2D_nonoise[j][i]->x() + arlRandom::Random::gaussianRnd(GaussianNoise2D));
-//                      reprojection2D[j][i]->set(1, reprojection2D_nonoise[j][i]->y() + arlRandom::Random::gaussianRnd(GaussianNoise2D));
-//                      //std::cerr<<"reprojection2D="<<reprojection2D[j][i]->x()<<" "<<reprojection2D[j][i]->y()<<"\n";
-//                      arlCore::vnl_covariance_matrix &cov_mat = reprojection2D[j][i]->getCovMatrix();
-//                      cov_mat.put(0,0,GaussianNoise2D*GaussianNoise2D);
-//                      cov_mat.put(1,0,0.0);
-//                      cov_mat.put(0,1,0.0);
-//                      cov_mat.put(1,1,GaussianNoise2D*GaussianNoise2D);
-//                      //std::cerr<<"cov_mat="<<cov_mat<<"\n";
-//                  }
-//              }
-//          }
-            if(enum_recons == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY)
-            {
-                for( j=0 ; j<nbCameras ; ++j)
-                {
-                    for( i=0 ; i<nbPoints ; ++i )
-                    {
-                        //*reprojection2D[j][i] = *reprojection2D_nonoise[j][i];
-                        //std::cerr<<"reprojection2D_nonoise ="<<reprojection2D_nonoise[j][i]->x()<<" "<<reprojection2D_nonoise[j][i]->y()<<"\n";
-                        ((Point::sptr)reprojection2D[j][i])->set(0, reprojection2D_nonoise[j][i]->x() + arlRandom::Random::gaussianRnd(GaussianNoise2D_x));
-                        ((Point::sptr)reprojection2D[j][i])->set(1, reprojection2D_nonoise[j][i]->y() + arlRandom::Random::gaussianRnd(GaussianNoise2D_y));
-                        //std::cerr<<"reprojection2D="<<reprojection2D[j][i]->x()<<" "<<reprojection2D[j][i]->y()<<"\n";
-                        arlCore::vnl_covariance_matrix &cov_mat = ((Point::sptr)reprojection2D[j][i])->getCovMatrix();
-                        cov_mat.put(0,0,GaussianNoise2D_x*GaussianNoise2D_x);
-                        cov_mat.put(1,0,0.0);
-                        cov_mat.put(0,1,0.0);
-                        cov_mat.put(1,1,GaussianNoise2D_y*GaussianNoise2D_y);
-                        //std::cerr<<"cov_mat="<<cov_mat<<"\n";
-                    }
-                }
-
-            }
-            double reconstructionError = 0.0;
-            for( i=0 ; i<nbPoints ; ++i )
-            {
-                std::vector<arlCore::Point::csptr> pointList2D;
-                    for( j=0 ; j<nbCameras ; ++j )
-                        pointList2D.push_back(reprojection2D[j][i]);
-                    if(arlCore::reconst3D( pointList2D, cameras, point_reconstruit, (arlCore::ARLCORE_RECONSTRUCTION3D) enum_recons, plane, log))
-                    {
-//                      if(i==0)
-                        {
-                            vnl_matrix<double> soustraction(3,1);
-                            vnl_vector<double> tt(3);
-                            tt[0] = (*worldPoints)[i]->x();tt[1] = (*worldPoints)[i]->y();tt[2] = (*worldPoints)[i]->z();
-                            soustraction.set_column(0, point_reconstruit->getCoordinates() - tt);
-                            //std::cerr << "soustraction =\n"<<soustraction<<std::endl;
-                            //std::cerr << "cov matrice =\n"<<point_reconstruit.getCovMatrix()<<std::endl;
-                            //std::cerr << "trace cov matrice =\n"<<sqrt( point_reconstruit.getCovMatrix()[0][0] +point_reconstruit.getCovMatrix()[1][1]+point_reconstruit.getCovMatrix()[2][2])<<std::endl;
-//                          index_mu[compteur] = (soustraction.transpose() * vnl_matrix_inverse<double> (point_reconstruit.getCovMatrix()) * soustraction)(0,0);
-                            index_mu[k].push_back( (soustraction.transpose() * vnl_matrix_inverse<double> (point_reconstruit->getCovMatrix()) * soustraction)(0,0) );
-                            std::cerr << "index_mu["<<k<<"]["<<compteur<<"] =" << index_mu[k][compteur]<<std::endl;
-//                          std::cerr << "index_mu["<<compteur<<"] =" << index_mu[compteur]<<std::endl;
-                        }
-                        reconstructionError += point_reconstruit->distance( (*worldPoints)[i] );
-                        if(Verbose) std::cerr << "Point reconstruit = "<< (*point_reconstruit)[0] <<" "<< (*point_reconstruit)[1] <<" "<<(*point_reconstruit)[2] <<"\n";
-                        ++robustnessOK[k];
-                        ++nbpt;
-                    }
-                    ++robustnessTotal[k];
-            }
-            errorVector[k][compteur] = reconstructionError/(double)nbPoints;
-}
-        }
-    }//boucle compteur
-    for(enum_recons=arlCore::ARLCORE_R3D_TWO_LINES_APPROX ,k=0; enum_recons<=arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION; ++enum_recons,++k)
-    {
-        if(enum_recons == arlCore::ARLCORE_R3D_TWO_LINES_APPROX || enum_recons == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION)
-        {
-            std::cerr << "index_mu["<<k<<"] size =" << (unsigned int)index_mu[k].size()<<std::endl;
-            //for( i=0 ; i<index_mu[k].size() ; ++i )
-            //  std::cerr << "index_mu ["<<k<<"] =" << index_mu[k][i]<<std::endl;
-
-            if(enum_recons == arlCore::ARLCORE_R3D_TWO_LINES_APPROX)
-            {
-                arlCore::WriteTableau ( (char *)"PredictionSigma3D_ARLCORE_R3D_TWO_LINES_APPROX", index_mu[k], nbIterations);
-                arlCore::KSValidation3D(  (char *)"PredictionSigma3D_ARLCORE_R3D_TWO_LINES_APPROX" );
-            }
-
-            if(enum_recons == arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION)
-            {
-                arlCore::WriteTableau (   (char *)"PredictionSigma3D_ARLCORE_R3D_REPROJECTION_OPTIMIZATION", index_mu[k], nbIterations);
-                arlCore::KSValidation3D(  (char *)"PredictionSigma3D_ARLCORE_R3D_REPROJECTION_OPTIMIZATION" );
-            }
-
-        }
-    }
-
-    bool test = true;
-    for(enum_recons=arlCore::ARLCORE_R3D_UNKNOWN+1,i=0; enum_recons<arlCore::ARLCORE_R3D_NBTYPE; ++enum_recons,++i)
-    {
-        std::string name="Reconstruction error ("+arlCore::ARLCORE_RECONSTRUCTION3D_NAMES[enum_recons]+")";
-        test = printErrors(name,errorVector[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-    }
-    return printFooter(nbIterations, test);
-}
-
-// testEpipolarMatching
-bool arlCore::testEpipolarMatching( long int nbIterations, double tolerance )
-{
-    const double VolumeSize = 2000.0;
-    const double GaussianNoise2D = 0.0;
-    printHeader("Epipolar matching",nbIterations, tolerance);
-    arlCore::Point::sptr reprojection2D = arlCore::Point::New(2);
-    arlCore::Point::csptr p;
-    unsigned int i,j,k;
-    vnl_vector<double> corrects(nbIterations,0.0);
-    vnl_vector<double> nonCorrects(nbIterations,0.0);
-    vnl_vector<double> nonApparies(nbIterations,0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur )
-    {
-        const unsigned int NbPointsModel = (unsigned int)arlRandom::Random::uniformDoubleRnd( 10, 20 );
-        //TODO : Gerer outliers 2D
-        arlCore::PlaneSystem universe;
-        arlCore::SceneUnitTest scene(universe);
-        arlCore::SmartPointList::sptr spl = arlCore::SmartPointList::New();
-        arlCore::PointList::sptr worldPoints = arlCore::PointList::New();
-        worldPoints->shapeRandom(NbPointsModel, arlCore::ARLCORE_SHAPE_SPHERE,arlCore::Point::New(0.0,0.0,0.0), VolumeSize); //arlCore::ARLCORE_SHAPE_PLAINSQUARE
-        const std::vector<arlCore::Camera> &cameras = scene.getCameras().getList();
-        if(cameras.size()>=2)
-        {   // Il doit y a avoir au moins 2 cameras dans la scene
-            const unsigned int NbCameras = 2;
-            ++robustnessTotal;
-            std::vector< std::vector< arlCore::Point::csptr > > realMatching(worldPoints->size());
-            std::vector< std::vector<arlCore::Point::csptr> > matching;
-            // Creation du jeu d'essai
-            for( i=0 ; i<worldPoints->size() ; ++i )
-                for( j=0 ; j<NbCameras ; ++j )
-                {
-                    cameras[j].project3DPoint( (*worldPoints)[i], reprojection2D);
-                    reprojection2D->addGaussianNoise(GaussianNoise2D);
-                    p = spl->push_back( reprojection2D , j+1);
-                    realMatching[i].push_back(p);
-                }
-            arlCore::epipolarMatching( cameras, spl, matching, GaussianNoise2D );
-            if(matching.size()>0)
-            {   // Est-ce que les appariements obtenus sont corrects ?
-                ++robustnessOK;
-                for( i=0 ; i<matching.size() ; ++i )
-                {
-                    bool found = false;
-                    for( j=0 ; j<realMatching.size() && !found ; ++j )
-                    {
-                        bool b=true;
-                        for( k=0 ; k<NbCameras ; ++k )
-                            b=b && matching[i][k]==realMatching[j][k];
-                        found = found || b;
-                    }
-                    if(!found) ++nonCorrects[compteur]; else ++corrects[compteur];
-                }
-            }
-            nonApparies[compteur]=realMatching.size()-corrects[compteur];
-        }
-    }//boucle compteur
-    vnl_vector<double> total(nbIterations);
-    total=corrects+nonCorrects;
-    bool test = printErrors("Nombre d'appariements incorrects",nonCorrects,robustnessOK,robustnessTotal,tolerance);
-    printErrors("Proportion vrais appariements/total",element_quotient(corrects,total),robustnessOK,robustnessTotal,-1);
-    printErrors("Proportion faux appariements/total",element_quotient(nonCorrects,total),robustnessOK,robustnessTotal,-1);
-    printErrors("Proportion non apparies/total",element_quotient(nonApparies,total),robustnessOK,robustnessTotal,-1);
-    return printFooter(nbIterations, test);
-}
-
-// testInitIntrinsicCalibration
-bool arlCore::testInitIntrinsicCalibration( long int nbIterations, double tolerance )
-{
-    const unsigned int nb_Cameras_MAX = 1, nb_Poses_MAX=30;
-    printHeader("Intrinsic calibration initialization",nbIterations, tolerance);
-    vnl_vector_fixed<double,5> errorRotation(0.0);
-    vnl_vector_fixed<double,5> errorTranslation(0.0);
-    vnl_vector_fixed<double,5> errorIntrinsic(0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        arlCore::PlaneSystem universe;
-        std::vector<double> k_range(4);
-        k_range[0]=k_range[1]=k_range[2]=k_range[3]=0;
-        SceneUnitTestInitIntrinsicCalib scene(universe, k_range, nb_Cameras_MAX, nb_Poses_MAX);
-        const unsigned int nbPoses = scene.getNbPoses();
-        unsigned int i,j;
-        const std::vector< arlCore::Camera > &liste_camera = scene.getCameras().getList();
-        const arlCore::Camera &cam = liste_camera[0];
-        std::vector< arlCore::PointList::csptr > listeWorldPoints(nbPoses);
-        //listeWorldPoints[k] contient la geometrie 3D de Tag[k]
-        for( i=0 ; i<nbPoses ; ++i )
-        {
-           PointList::csptr worldPoints = scene.getTags().getTag(i)->getGeometry();
-           listeWorldPoints[i] = worldPoints ;
-        }
-        arlCore::vnl_rotation3d_matrix rot_mat;
-        std::vector< arlCore::vnl_rigid_matrix > liste_extrinsic_alea(nbPoses);
-        for( i=0 ; i<nbPoses ; ++i )
-        {   //creation de petites transformations appliquees au damier 3D
-            arlCore::vnl_rigid_matrix tmp;
-            tmp.uniform_random( 30 );
-            liste_extrinsic_alea[i] = tmp;
-        }//liste_extrinsic_alea[i] contient 1 transfo aleatoire representant un mouvement du Tag[i]
-        std::vector< arlCore::PointList::sptr > reprojection2DNC(nbPoses);
-        for( i=0 ; i<nbPoses ; ++i )//pour chaque position du damier on calcule les reprojections 2D
-            {   //on applique liste_extrinsic_alea[i] au Tag[i]
-                reprojection2DNC[i] = arlCore::PointList::New();
-                arlCore::PointList::sptr  modelPoints = arlCore::PointList::New(listeWorldPoints[i]->size() );
-                liste_extrinsic_alea[i].trf( listeWorldPoints[i] , modelPoints );
-                cam.project3DPoint(modelPoints, reprojection2DNC[i]);
-            }
-        //VAG FIXME PERF BEGIN
-        std::vector< arlCore::PointList::csptr > reprojection2D(nbPoses);
-        std::copy( reprojection2DNC.begin(),  reprojection2DNC.end(),  reprojection2D.begin() );
-        //VAG FIXME PERF END
-
-        vnl_matrix_fixed<double,3,3> mat_arrangee;
-        for( i=0 ; i<nbPoses ; ++i )// avec notre facon de creer le monde H[i] = IntrinsicMatrix * ExtrinsicMatrixModifie * liste_extrinsic_alea[i]
-        {//ExtrinsicMatrixModifie est la matrice 3x3 [r1 r2 t] ou r1 r2 et t sont les 1er, 2nd et 4ieme vecteur colonne de ExtrinsicMatrix
-            for( j=0 ; j<3 ; ++j)
-                {
-                    mat_arrangee(j,0) = (cam.getExtrinsic()* liste_extrinsic_alea[i])(j,0);
-                    mat_arrangee(j,1) = (cam.getExtrinsic()* liste_extrinsic_alea[i])(j,1);
-                    mat_arrangee(j,2) = (cam.getExtrinsic()* liste_extrinsic_alea[i])(j,3);
-                }
-                //std::cerr<<"matrice arrangee = "<<mat_arrangee<<std::endl;
-                //std::cerr<<"H[i] solution = "<<cam.getIntrinsicMatrix() * mat_arrangee/(cam.getIntrinsicMatrix() * mat_arrangee)(2,2)<<std::endl;
-        }
-        arlCore::Camera camera_init(universe);
-        std::vector< arlCore::vnl_rigid_matrix > extrinsic_init(nbPoses);
-        /////////////////////////INITIALISATION
-        std::vector<double> log, optimiser_parameters;
-        if(arlCore::initIntrinsicCalibration(listeWorldPoints, reprojection2D, camera_init, extrinsic_init, optimiser_parameters, log))
-        {   //Calcul des erreurs
-            double errorI, errorR=0 ,errorT=0;
-            errorI = fabs(camera_init.getfx()-cam.getfx())+fabs(camera_init.getfy()-cam.getfy())
-                            + fabs(camera_init.getcx()-cam.getcx())+fabs(camera_init.getcy()-cam.getcy());
-            for( i=0 ; i<nbPoses ; ++i )
-            {   //verification du calcul des matrices extrinseques
-                arlCore::vnl_rigid_vector realT(cam.getExtrinsic()*liste_extrinsic_alea[i]), estimateT(extrinsic_init[i]);
-                //std::cerr<<"extrinsic_init["<<i<<"]" << std::endl << extrinsic_init[i] <<std::endl;
-                //std::cerr<<"verite extrinsic["<<i<<"]"<< std::endl<<cam.getExtrinsic()*liste_extrinsic_alea[i]<<std::endl;
-                errorR += fabs(realT[0]- estimateT[0])+fabs(realT[1]- estimateT[1])+fabs(realT[2]- estimateT[2]);
-                errorT += fabs(realT[3]- estimateT[3])+fabs(realT[4]- estimateT[4])+fabs(realT[5]- estimateT[5]);
-            }
-            addValue(errorTranslation, errorT/3/nbPoses);
-            addValue(errorRotation, errorR/3/nbPoses);
-            addValue(errorIntrinsic, errorI);
-            ++robustnessOK;
-        }
-        ++robustnessTotal;
-    }//boucle compteur
-    bool test = printErrors("Erreurs sur la translation extrinseque",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur la rotation extrinseque",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    test = printErrors("Erreur sur les parametres intrinseques",errorIntrinsic,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testIntrinsicCalibration
-bool arlCore::testIntrinsicCalibration( long int nbIterations, double tolerance )
-{
-    const double GaussianNoise2D = 0.0;
-    const unsigned int nbParameters = 8, nb_Cameras_MAX=1, nb_Poses_MAX=30;
-    printHeader("Intrinsic calibration",nbIterations, tolerance);
-
-    vnl_vector_fixed<double,5> errorRotation(0.0);
-    vnl_vector_fixed<double,5> errorTranslation(0.0);
-    vnl_vector_fixed<double,5> errorIntrinsic(0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        //std::cerr<<"Compteur ="<<compteur<<std::endl;
-        arlCore::PlaneSystem universe;
-        std::vector<double> k_range(4);
-        k_range[0]=0.01;k_range[1]=0.01;k_range[2]=0.0001;k_range[3]=0.0001;
-//      k_range[0]=0.0;k_range[1]=0.0;k_range[2]=0.0;k_range[3]=0.0;
-
-        SceneUnitTestInitIntrinsicCalib scene(universe, k_range, nb_Cameras_MAX, nb_Poses_MAX);
-        const unsigned int nbPoses = scene.getNbPoses();
-        unsigned int i,k;
-
-        const arlCore::Camera &cam = scene.getCameras()[0];
-        std::vector< arlCore::PointList::csptr > listeWorldPoints;
-        listeWorldPoints.reserve(nbPoses);//listeWorldPoints[k] contient la geometrie 3D de Tag[k]
-        for( k=0 ; k<nbPoses ; ++k )
-        {
-           PointList::csptr worldPoints = scene.getTags().getTag(k)->getGeometry();
-           listeWorldPoints.push_back(  worldPoints );
-        }
-        arlCore::Point::sptr point2D = arlCore::Point::New(2);;
-        arlCore::vnl_rotation3d_matrix rot_mat;
-        std::vector< arlCore::vnl_rigid_matrix > liste_extrinsic_alea(nbPoses);
-        for( k=0 ; k<nbPoses ; ++k )
-        {   //creation de petites transformations appliquees au damier 3D
-            arlCore::vnl_rigid_matrix tmp;
-            tmp.uniform_random( 30 );
-            liste_extrinsic_alea[k] = tmp;
-        }//liste_extrinsic_alea[k] contient 1 transfo aleatoire représentant un mouvement du Tag[k]
-        std::vector< arlCore::PointList::sptr > reprojection2DNC(nbPoses);
-        std::vector< arlCore::PointList::sptr > reprojection2D_bruiteeNC(nbPoses);
-        for( k=0 ; k<nbPoses ; ++k )//pour chaque position du damier on calcule les reprojections 2D
-        {   //on applique liste_extrinsic_alea[k] au Tag[k]
-            reprojection2DNC[k] =  arlCore::PointList::New();
-            reprojection2D_bruiteeNC[k] =  arlCore::PointList::New();
-            arlCore::PointList::sptr modelPoints =  arlCore::PointList::New(listeWorldPoints[k]->size() );
-            liste_extrinsic_alea[k].trf(listeWorldPoints[k],modelPoints);
-            cam.project3DPoint(modelPoints, reprojection2DNC[k]);
-            cam.project3DPoint(modelPoints, reprojection2D_bruiteeNC[k]);
-        }
-        for( k=0 ; k<nbPoses ; ++k )//on rajoute du bruit 2D sur la variable reprojection2D_bruitee
-            for( i=0 ; i<scene.getChessNbPoints(k) ; ++i)//cela servira a initialiser imparfaitement pour refineIntrinsicCalibration
-            {
-                (*(reprojection2D_bruiteeNC[k]))[i]->addGaussianNoise(GaussianNoise2D);
-                //std::cerr<<"reprojection2D_bruitee["<<k<<"]["<<i<<"]="<<reprojection2D_bruitee[k][i]->getString() <<std::endl;
-                //std::cerr<<"reprojection2D["<<k<<"]["<<i<<"]="<<reprojection2D[k][i]->getString() <<std::endl;
-            }
-        vnl_matrix_fixed<double,3,3> mat_arrangee;
-        for( k=0 ; k<nbPoses ; ++k )// avec notre facon de creer le monde H[k] = IntrinsicMatrix * ExtrinsicMatrixModifie * liste_extrinsic_alea[k]
-        {//ExtrinsicMatrixModifie est la matrice 3x3 [r1 r2 t] ou r1 r2 et t sont les 1er, 2nd et 4ieme vecteur colonne de ExtrinsicMatrix
-            for( i=0 ; i<3 ; ++i)
-                {
-                    mat_arrangee(i,0) = (cam.getExtrinsic()* liste_extrinsic_alea[k])(i,0);
-                    mat_arrangee(i,1) = (cam.getExtrinsic()* liste_extrinsic_alea[k])(i,1);
-                    mat_arrangee(i,2) = (cam.getExtrinsic()* liste_extrinsic_alea[k])(i,3);
-                }
-//              std::cerr<<"matrice arrangee = "<<mat_arrangee<<std::endl;
-//              std::cerr<<"H[i] solution = "<<cam.getIntrinsicMatrix() * mat_arrangee/(cam.getIntrinsicMatrix() * mat_arrangee)(2,2)<<std::endl;
-        }
-        arlCore::Camera camera_init(universe);
-        std::vector< arlCore::vnl_rigid_matrix > extrinsic_init(nbPoses);
-        /////////////////////////INITIALISATION & RAFFINEMENT
-        std::vector<double> log, optimiser_parameters;
-        optimiser_parameters.push_back(0);//Optimisation method choice 0 =LM, 1=POWELL
-        optimiser_parameters.push_back(0);//Verbose choice
-//      optimiser_parameters.push_back(1e-10);//set f_tolerance
-
-        //VAG FIXME PERF BEGIN
-        std::vector< arlCore::PointList::csptr > reprojection2D_bruitee(nbPoses);
-        std::vector< arlCore::PointList::csptr > reprojection2D(nbPoses);
-        std::copy( reprojection2D_bruiteeNC.begin(),  reprojection2D_bruiteeNC.end(),  reprojection2D_bruitee.begin() );
-        std::copy( reprojection2DNC.begin(),  reprojection2DNC.end(),  reprojection2D.begin() );
-        //VAG FIXME PERF END
-        if(arlCore::initIntrinsicCalibration(listeWorldPoints, reprojection2D_bruitee, camera_init, extrinsic_init, optimiser_parameters, log))
-            if(arlCore::refineIntrinsicCalibration(listeWorldPoints, reprojection2D, nbParameters, camera_init, extrinsic_init, optimiser_parameters, log))
-            {   // Calcul des erreurs
-                double errorI, errorR=0 ,errorT=0;
-                errorI = fabs(camera_init.getfx()-cam.getfx())+fabs(camera_init.getfy()-cam.getfy())
-                        + fabs(camera_init.getcx()-cam.getcx())+fabs(camera_init.getcy()-cam.getcy())
-                        + fabs(camera_init.getkc(0)-cam.getkc(0))+fabs(camera_init.getkc(1)-cam.getkc(1))
-                        + fabs(camera_init.getkc(2)-cam.getkc(2))+fabs(camera_init.getkc(3)-cam.getkc(3));
-//              std::cerr<<"error intrinseque ="<<errorI<<std::endl;
-//              std::cerr<<"Solution   fx fy cx cy k1 k2 k3 k4 = "<<cam.getfx()<<" "<<cam.getfy()<<" "<<cam.getcx()<<" "<<cam.getcy()<<" "<<cam.getkc(0)<<" "<<cam.getkc(1)<<" "<<cam.getkc(2)<<" "<<cam.getkc(3)<<" "<<std::endl;
-//              std::cerr<<"Estimation fx fy cx cy k1 k2 k3 k4 = "<<camera_init.getfx()<<" "<<camera_init.getfy()<<" "<<camera_init.getcx()<<" "<<camera_init.getcy()<<" "<<camera_init.getkc(0)<<" "<<camera_init.getkc(1)<<" "<<camera_init.getkc(2)<<" "<<camera_init.getkc(3)<<" "<<std::endl;
-                for( k=0 ; k<nbPoses ; ++k )
-                {   //verification du calcul des matrices extrinseques
-                    arlCore::vnl_rigid_vector realT(cam.getExtrinsic()*liste_extrinsic_alea[k]), estimateT(extrinsic_init[k]);
-//                  std::cerr<<"extrinsic_init["<<k<<"]" << std::endl << extrinsic_init[k] <<std::endl;
-//                  std::cerr<<"verite extrinsic["<<k<<"]"<< std::endl<<cam.getExtrinsic()*liste_extrinsic_alea[k]<<std::endl;
-                    errorR += fabs(realT[0]- estimateT[0])+fabs(realT[1]- estimateT[1])+fabs(realT[2]- estimateT[2]);
-                    errorT += fabs(realT[3]- estimateT[3])+fabs(realT[4]- estimateT[4])+fabs(realT[5]- estimateT[5]);
-                }
-                addValue(errorTranslation, errorT/3/nbPoses);
-                addValue(errorRotation, errorR/3/nbPoses);
-                addValue(errorIntrinsic, errorI);
-                ++robustnessOK;
-            }
-            ++robustnessTotal;
-    }//boucle compteur
-    bool test = printErrors("Erreurs sur la translation extrinseque",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur la rotation extrinseque",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    test = printErrors("Erreur sur les parametres intrinseques",errorIntrinsic,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testInitExtrinsicCalibration
-bool arlCore::testInitExtrinsicCalibration( long int nbIterations, double tolerance )
-{
-// TODO : description du test unitaire
-// Ce test unitaire cree une scene contenant plusieurs cameras avec plusieurs poses
-// les cameras sont tires dans une sphere ayant pour centre un point proche de l'origine.
-// toutes les cameras sont orientes vers ce point (tire dans une sphere de rayon 100 autour de l'origine)
-// Les poses sont des objets plans avec Z=0 tires  autour de l'origine
-// pour simuler des poses, on applique a ces objets des transformation rigides aleatoires
-// avec un faible alea sur les translations (les trsf sont contenues dans liste_extrinsic_alea)
-// On calcule ensuite la reprojection des objets rigidement transformes dans les cameras
-// On lance alors les algorithmes de calibrage extrinseques et on les compare a la verite terrain.
-// Le calcul de la verite terrain se fait grace a la connaissance de la position de chaque camera
-// par rapport au repere monde et grace a la connaissance des trsf aleatoires appliques aux objets rigides de calibrage
-// On rappelle qu'on cherche a determiner :
-// 1) les poses extrinseques Te_k par rapport a la premiere camera tel que
-// sum ||P1(Te_k*Mk_i) - mk_i ||^2 soit minimal. P1 correspond a la fonction de projection
-// de la premiere camera avec des parametres extrinseque a l'identit� !!
-// Mk_i sont les pts 3D du modele dans son repere pour la pose k
-// mk_i sont les points 2D reprojetes visibles ET invisibles (ils sont alors NULL) pour la pose k
-//
-// 2) les transformations Ts_j entre les reperes de chaque camera par rapport a la premiere, tel que
-// sum ||Pj(Ts_j*Te_0*M0_i) - m0_j_i ||^2 soit minimal. Pj correspond a la fonction de projection
-// de la j ieme camera avec des parametres extrinseque a l'identit� aussi.
-// M0_i sont les pts 3D du modele dans son repere pour la pose 0 de la camera j
-// m0_j_i sont les pts 3D du modele dans son repere pour la pose 0 de la camera j
-//
-// Mk_i sont les points des modeles 3D originaux avant applications des trsf aleatoires
-// les points reprojetes correspondant dans chaque camera sont les:
-// mk_j_i = T_ext_cam_j * T_alea_k * Mk_i
-// En l'occurence la verite terrain des Te_k vaut  T_ext_cam_0 * T_alea_k (on rappelle que
-// les parametres intrinseques de chaque camera sont consideres a l'identite lors de l'optimisation du critere)
-//
-// la verite terrain des Ts_j peut se calculer a partir de la pose 0 uniquement (en supposant que
-// l'objet pose 0 est visible par toutes les cameras en meme temps) alors:
-// mk_j_i = T_ext_cam_j * T_alea_k * Mk_i = Ts_j * Te_0 = Ts_j * T_ext_cam_0 * T_alea_k * Mk_i
-// donc    T_ext_cam_j = Ts_j * T_ext_cam_0        donc     Ts_j  = T_ext_cam_j * T_ext_cam_0^(-1)
-    const double gaussianNoise2D = 0.0;
-    const unsigned int nb_Cameras_MAX = 10, nb_Poses_MAX=10;
-    printHeader("Extrinsic initialization calibration",nbIterations, tolerance);
-
-    vnl_vector_fixed<double,5> errorRotation(0.0);
-    vnl_vector_fixed<double,5> errorTranslation(0.0);
-    vnl_vector_fixed<double,5> errorIntrinsic(0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        arlCore::PlaneSystem universe;
-        std::vector<double> k_range(4);
-        k_range[0]=0.5;k_range[1]=1.0;k_range[2]=0.01;k_range[3]=0.01;
-
-        SceneUnitTestInitIntrinsicCalib scene(universe, k_range, nb_Cameras_MAX, nb_Poses_MAX);
-        const unsigned int nbPoses = scene.getNbPoses();
-        const unsigned int nbCameras = (unsigned int)scene.getCameras().size();
-        unsigned int i,j,k;
-        const std::vector< arlCore::Camera > &liste_camera = scene.getCameras().getList();
-        std::vector< arlCore::PointList::csptr > listeWorldPoints(nbPoses);//listeWorldPoints[k] contient la geometrie 3D de Tag[k]
-        for( k=0 ; k<nbPoses ; ++k )
-        {
-           PointList::csptr worldPoints = scene.getTags().getTag(k)->getGeometry();
-           assert( worldPoints );
-           assert( worldPoints->size() );
-           listeWorldPoints[k] = worldPoints;
-        }
-        arlCore::Point::sptr point2D = arlCore::Point::New(2);;
-        arlCore::vnl_rotation3d_matrix rot_mat;
-        std::vector< arlCore::vnl_rigid_matrix > liste_extrinsic_alea(nbPoses);
-        for( k=0 ; k<nbPoses ; ++k )
-        {   //creation de petites transformations appliquees au damier 3D
-            arlCore::vnl_rigid_matrix tmp;
-            tmp.uniform_random( 30 );
-            liste_extrinsic_alea[k] = tmp;
-//          std::cerr<<"liste_extrinsic_alea["<<k<<"]="<<liste_extrinsic_alea[k].getString()<<std::endl;
-        }//liste_extrinsic_alea[k] contient 1 transfo aleatoire reprzsentant un mouvement du Tag[k]
-        std::vector< std::vector< std::vector< arlCore::Point::csptr > > > reprojection2D(nbPoses);
-        for( k=0 ; k<nbPoses ; ++k)
-        {
-            reprojection2D[k].resize(nbCameras);
-            arlCore::PointList::sptr modelPoints =  arlCore::PointList::New(listeWorldPoints[k]->size() );
-            liste_extrinsic_alea[k].trf(listeWorldPoints[k],modelPoints);
-            for( j=0 ; j<nbCameras ; ++j )//pour chaque position du damier on calcule les reprojections 2D
-            {   //on applique liste_extrinsic_alea[k] au Tag[k]
-                reprojection2D[k][j].resize(listeWorldPoints[k]->size());
-//              std::cerr<<"listeWorldPoints[k].size()"<<listeWorldPoints[k].size()<<std::endl;
-//              std::cerr<<"reprojection2D["<<k<<"]["<<j<<"].size()"<<reprojection2D[k][j].size()<<std::endl;
-                for( i=0 ; i< listeWorldPoints[k]->size(); ++i )
-                {
-                    arlCore::Point::sptr pt = arlCore::Point::New(2);
-                    liste_camera[j].project3DPoint( (*modelPoints)[i],  pt );
-                    reprojection2D[k][j][i] = pt;
-                }
-            }
-        }
-        for( k=0 ; k<nbPoses ; ++k )//on rajoute du bruit 2D sur la variable reprojection2D_bruitee
-            for( j=0 ; j<nbCameras ; ++j )
-                for( i=0 ; i<scene.getChessNbPoints(k) ; ++i)//cela servira a initialiser imparfaitement pour refineIntrinsicCalibration
-                {
-                    arlCore::Point::constCast( reprojection2D[k][j][i] )->addGaussianNoise(gaussianNoise2D);
-                    //std::cerr<<"reprojection2D_bruitee["<<k<<"]["<<i<<"]="<<reprojection2D_bruitee[k][i]->getString() <<std::endl;
-                    //std::cerr<<"reprojection2D["<<k<<"]["<<i<<"]="<<reprojection2D[k][i]->getString() <<std::endl;
-                }
-        std::vector< arlCore::Camera > liste_camera_identity;
-        arlCore::vnl_rigid_matrix identity;
-        identity.set_identity();
-        for( j=0 ; j<nbCameras ; ++j )
-        {
-            liste_camera_identity.push_back(arlCore::Camera (liste_camera[j]));
-            liste_camera_identity[j].setExtrinsic(identity);
-        }
-        std::vector< arlCore::vnl_rigid_matrix> init_rigid_trsf((nbCameras-1)+nbPoses);
-        std::vector<double> log_init, optimiser_parameters;
-        //INITIALISATION DU CALIBRAGE
-//        //VAG FIXME PERF BEGIN
-//        std::vector< arlCore::PointList::csptr > reprojection2D(nbPoses);
-//        std::copy( reprojection2DNC.begin(),  reprojection2DNC.end(),  reprojection2D.begin() );
-//        //VAG FIXME PERF END
-        arlCore::initExtrinsicCalibration( listeWorldPoints, reprojection2D, liste_camera_identity, init_rigid_trsf, optimiser_parameters, log_init );
-        std::vector<arlCore::vnl_rigid_matrix> solution((nbCameras-1)+nbPoses);
-        for( k=0 ; k<nbPoses ; ++k )
-        {
-            arlCore::vnl_rigid_matrix var;
-            var.mult(liste_camera[0].getExtrinsic(), liste_extrinsic_alea[k]);
-            solution[k] = var;
-        }
-        for( i=1 ; i<nbCameras ; ++i )
-        {
-            arlCore::vnl_rigid_matrix var;
-            var.mult(liste_camera[i].getExtrinsic(), liste_camera[0].getInvExtrinsic());
-            solution[nbPoses+i-1] = var;
-        }
-        for( i=0 ; i<(nbCameras-1)+nbPoses ; ++i )
-        {
-            double error_t, error_r;
-            init_rigid_trsf[i].compare(solution[i], error_t, error_r);
-//          std::cerr<<"erreur t = "<< error_t << "   erreur r = "<< error_r<<std::endl;
-        }
-        double errorR=0 ,errorT=0;
-        for( i=0 ; i<(nbCameras-1)+nbPoses ; ++i )
-        {   //verification du calcul des matrices extrinseques
-            arlCore::vnl_rigid_vector realT(solution[i]), estimateT(init_rigid_trsf[i]);
-            //std::cerr<<"extrinsic_init["<<i<<"]" << std::endl << extrinsic_init[i] <<std::endl;
-            //std::cerr<<"verite extrinsic["<<i<<"]"<< std::endl<<cam.getExtrinsic()*liste_extrinsic_alea[i]<<std::endl;
-            errorR += fabs(realT[0]- estimateT[0])+fabs(realT[1]- estimateT[1])+fabs(realT[2]- estimateT[2]);
-            errorT += fabs(realT[3]- estimateT[3])+fabs(realT[4]- estimateT[4])+fabs(realT[5]- estimateT[5]);
-        }
-        addValue(errorTranslation, errorT/3/nbPoses);
-        addValue(errorRotation, errorR/3/nbPoses);
-        ++robustnessOK;
-        ++robustnessTotal;
-    }//boucle compteur
-    bool test = printErrors("Erreurs sur les translations extrinseques",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur les rotations extrinseques",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testExtrinsicCalibration
-bool arlCore::testExtrinsicCalibration( long int nbIterations, double tolerance )
-{
-// TODO description du test unitaire
-// A SAVOIR : visiblement l'algorithme de calibrage extrinseque a du mal a s'arreter
-// lorsqu'on cree plus de 8 cameras. Il faudra peut etre ajouter une condition temporelle
-// pour forcer l'algorithme a s'arreter lorsque les erreurs stagnent
-    const double gaussianNoise2D = 0.0;
-    const unsigned int nb_Cameras_MAX=8, nb_Poses_MAX=10;
-    printHeader("Extrinsic calibration",nbIterations, tolerance);
-
-    vnl_vector_fixed<double,5> errorRotation(0.0);
-    vnl_vector_fixed<double,5> errorTranslation(0.0);
-    vnl_vector_fixed<double,5> errorIntrinsic(0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        arlCore::PlaneSystem universe;
-        std::vector<double> k_range(4);
-        k_range[0]=0.5;k_range[1]=1.0;k_range[2]=0.01;k_range[3]=0.01;
-
-        SceneUnitTestInitIntrinsicCalib scene(universe, k_range, nb_Cameras_MAX, nb_Poses_MAX);
-        const unsigned int nbPoses = scene.getNbPoses();
-        const unsigned int nbCameras = (unsigned int)scene.getCameras().size();
-        unsigned int i,j,k;
-        const std::vector< arlCore::Camera > &liste_camera = scene.getCameras().getList();
-
-        std::vector< arlCore::PointList::csptr > listeWorldPoints(nbPoses);//listeWorldPoints[k] contient la geometrie 3D de Tag[k]
-        for( i=0 ; i<nbPoses ; ++i )
-        {
-           PointList::csptr worldPoints = scene.getTags().getTag(i)->getGeometry();
-            listeWorldPoints[i] = worldPoints;
-        }
-        arlCore::Point::sptr point2D = arlCore::Point::New(2);;
-        arlCore::vnl_rotation3d_matrix rot_mat;
-        std::vector< arlCore::vnl_rigid_matrix > liste_extrinsic_alea(nbPoses);
-
-        for( i=0 ; i<nbPoses ; ++i )
-        {   //creation de petites transformations appliquees au damier 3D
-            arlCore::vnl_rigid_matrix tmp;
-            tmp.uniform_random( 30 );
-            liste_extrinsic_alea[i] = tmp;
-//          std::cerr<<"liste_extrinsic_alea["<<i<<"]="<<liste_extrinsic_alea[i].getString()<<std::endl;
-        }//liste_extrinsic_alea[i] contient 1 transfo aleatoire représentant un mouvement du Tag[k]
-        std::vector< std::vector< std::vector< arlCore::Point::csptr > > > reprojection2D(nbPoses);
-        std::vector< std::vector< std::vector< arlCore::Point::csptr > > > reprojection2D_bruitee(nbPoses);
-        for( k=0 ; k<nbPoses ; ++k)
-        {
-            reprojection2D[k].resize(nbCameras);
-            reprojection2D_bruitee[k].resize(nbCameras);
-            arlCore::PointList::sptr modelPoints = arlCore::PointList::New( listeWorldPoints[k]->size() );
-            liste_extrinsic_alea[k].trf(listeWorldPoints[k],modelPoints);
-            for( j=0 ; j<nbCameras ; ++j )//pour chaque position du damier on calcule les reprojections 2D
-            {   //on applique liste_extrinsic_alea[k] au Tag[k]
-                reprojection2D[k][j].resize(listeWorldPoints[k]->size());
-//              std::cerr<<"listeWorldPoints[k].size()"<<listeWorldPoints[k].size()<<std::endl;
-//              std::cerr<<"reprojection2D["<<k<<"]["<<j<<"].size()"<<reprojection2D[k][j].size()<<std::endl;
-
-                reprojection2D_bruitee[k][j].resize(listeWorldPoints[k]->size());
-                for( i=0 ; i< listeWorldPoints[k]->size(); ++i )
-                {
-                    arlCore::Point::sptr p1 = arlCore::Point::New(2);
-                    arlCore::Point::sptr p2 = arlCore::Point::New(2);
-                    //std::cerr<<"*((*modelPoints)[i])"<<(*modelPoints)[i]->getString()<<std::endl;
-                    liste_camera[j].project3DPoint( (*modelPoints)[i] , p1 );
-                    reprojection2D[k][j][i] = p1;
-                    liste_camera[j].project3DPoint( (*modelPoints)[i] , p2 );
-                    reprojection2D_bruitee[k][j][i] = p2;
-                }
-            }
-        }
-        for( k=0 ; k<nbPoses ; ++k )//on rajoute du bruit 2D sur la variable reprojection2D_bruitee
-            for( j=0 ; j<nbCameras ; ++j )
-                for( i=0 ; i<scene.getChessNbPoints(k) ; ++i)//cela servira a initialiser imparfaitement pour refineIntrinsicCalibration
-                {
-                    arlCore::Point::constCast( reprojection2D_bruitee[k][j][i])->addGaussianNoise(gaussianNoise2D);
-                }
-
-
-        std::vector< const arlCore::Camera* > liste_camera_identity;
-        arlCore::vnl_rigid_matrix identity;
-        identity.set_identity();
-        for( j=0 ; j<nbCameras ; ++j )
-        {
-            arlCore::Camera *var=new arlCore::Camera (liste_camera[j]);
-            var->setExtrinsic(identity);
-            liste_camera_identity.push_back(var);
-        }
-
-        std::vector< arlCore::vnl_rigid_matrix> init_rigid_trsf((nbCameras-1)+nbPoses);
-        std::vector<double> log_init, optimiser_parameters;
-        const double Method = 0; // 0=LEVENBERG-MARQUARDT 1=POWELL
-        optimiser_parameters.push_back(Method);
-        //INITIALISATION DU CALIBRAGE
-        arlCore::initExtrinsicCalibration(listeWorldPoints, reprojection2D_bruitee, liste_camera_identity, init_rigid_trsf, optimiser_parameters, log_init );
-        arlCore::refineExtrinsicCalibration(listeWorldPoints, reprojection2D, liste_camera_identity, init_rigid_trsf, optimiser_parameters, log_init );
-        std::vector<arlCore::vnl_rigid_matrix> solution((nbCameras-1)+nbPoses);
-        for( i=0 ; i<nbPoses ; ++i )
-        {
-            arlCore::vnl_rigid_matrix var;
-            var.mult(liste_camera[0].getExtrinsic(), liste_extrinsic_alea[i]);
-            solution[i] = var;
-        }
-        for( i=1 ; i<nbCameras ; ++i )
-        {
-            arlCore::vnl_rigid_matrix var;
-            var.mult(liste_camera[i].getExtrinsic(), liste_camera[0].getInvExtrinsic());
-            solution[nbPoses+i-1] = var;
-        }
-        for( i=0 ; i<(nbCameras-1)+nbPoses ; ++i )
-        {
-            double error_t, error_r;
-            init_rigid_trsf[i].compare(solution[i], error_t, error_r);
-//          std::cerr<<"erreur t = "<< error_t << "   erreur r = "<< error_r<<std::endl;
-        }
-        double errorR=0 ,errorT=0;
-        for( i=0 ; i<(nbCameras-1)+nbPoses ; ++i )
-        {   //verification du calcul des matrices extrinseques
-            arlCore::vnl_rigid_vector realT(solution[i]), estimateT(init_rigid_trsf[i]);
-            //std::cerr<<"extrinsic_init["<<i<<"]" << std::endl << extrinsic_init[i] <<std::endl;
-            //std::cerr<<"verite extrinsic["<<i<<"]"<< std::endl<<cam.getExtrinsic()*liste_extrinsic_alea[i]<<std::endl;
-            errorR += fabs(realT[0]- estimateT[0])+fabs(realT[1]- estimateT[1])+fabs(realT[2]- estimateT[2]);
-            errorT += fabs(realT[3]- estimateT[3])+fabs(realT[4]- estimateT[4])+fabs(realT[5]- estimateT[5]);
-        }
-        addValue(errorTranslation, errorT/3/nbPoses);
-        addValue(errorRotation, errorR/3/nbPoses);
-        ++robustnessOK;
-    ++robustnessTotal;
-//boucle compteur
-    }
-
-    bool test = printErrors("Erreurs sur les translations extrinseques",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur les rotations extrinseques",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-
-    return 0;
-}
-
-// testRigidTransfo
-bool arlCore::testRigidTransfo( unsigned int nbIterations, double tolerance )
-{
-    printHeader("Transformations rigides",nbIterations, tolerance);
-    const bool Verbose = false;
-    const double cubicSize = 1000;
-    unsigned int i;
-    vnl_vector_fixed<double,5> error1(0.0), error2(0.0);
-    double errorT, errorR;
-    vnl_rigid_matrix m1;
-    for( i=0 ; i<nbIterations ; ++i )
-    {
-        vnl_rigid_vector v1(m1);
-        vnl_rigid_matrix m2(v1);
-        vnl_rigid_vector v2(m2);
-        vnl_rigid_matrix m3(v2);
-        m1.compare(m3, errorT, errorR);
-        addValue(error1, errorT);
-        addValue(error2, errorR);
-        bool error = (errorT>tolerance || errorR>tolerance);
-        if(error && Verbose) std::cerr<<m1.as_matrix()<<"\n";
-/*      if(error && Verbose) std::cerr<<v1.as_vector()<<"\n\n";
-        if(error && Verbose) std::cerr<<m2.as_matrix()<<"\n";
-        if(error && Verbose) std::cerr<<v2.as_vector()<<"\n\n";*/
-        if(error && Verbose) std::cerr<<m3.as_matrix()<<"\n";
-        if(error && Verbose) std::cerr<<"----------------------------\n";
-        m1.uniform_random(cubicSize);
-    }
-    bool test = true;
-    test = printErrors("Translation error",error1,0,0,tolerance,false) && test;
-    test = printErrors("Rotation error",error2,0,0,tolerance,false) && test;
-    return printFooter(nbIterations, test);
-}
-
-// testRegistration3D3DwithoutMatching
-bool arlCore::testRegistration3D3DwithoutMatching( long int nbIterations, double tolerance )
-{
-    // Constantes de recalage
-    const double GaussianNoise3D = 0.0;
-    const double decimage = 1.0;
-    // Constantes de cr�ation du phantom
-    const double TransfVolumeSize = 500.0;
-    const double VolumeSize = 400.0;
-    const unsigned int NbpointsModel = 10;
-    const unsigned int NbOutLiers = 2;
-    const double ProbaSousEchantillon = 0.8;
-    unsigned int i;
-    Point::sptr point3D = arlCore::Point::New(3);
-    printHeader("Registration 3D/3D without matching",nbIterations, tolerance);
-    vnl_vector<double> errorRotation(nbIterations,0.0);
-    vnl_vector<double> errorTranslation(nbIterations,0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur )
-    {
-        arlCore::PointList::sptr modelPoints = arlCore::PointList::New(3);
-        arlCore::PointList::sptr worldPoints = arlCore::PointList::New(3);
-        arlCore::PointList::sptr outLiers = arlCore::PointList::New(3);
-        modelPoints->shapeRandom(NbpointsModel, ARLCORE_SHAPE_SPHERE,arlCore::Point::New(0.0,0.0,0.0), VolumeSize); //ARLCORE_SHAPE_PLAINSQUARE
-        arlCore::vnl_rigid_matrix T1, T2;
-        T1.uniform_random(TransfVolumeSize);
-        for( i=0 ; i<modelPoints->size() ; ++i)
-            if(arlRandom::Random::uniformDoubleRnd( 0.0, 1.0 )<ProbaSousEchantillon)
-            {
-                T1.trf( (*modelPoints)[i] , point3D);
-                worldPoints->push_back(point3D);
-            }
-        for( i=0 ; i<worldPoints->size() ; ++i )
-            (*worldPoints)[i]->addGaussianNoise(GaussianNoise3D);
-        outLiers->shapeRandom(NbOutLiers, ARLCORE_SHAPE_SPHERE, arlCore::Point::New(0.0,0.0,0.0), VolumeSize);
-        worldPoints->push_back(outLiers);
-        if(T2.register3D3DwithoutMatching(modelPoints, worldPoints, true, GaussianNoise3D, decimage))
-        {
-            ++robustnessOK;
-            T1.compare(T2, errorTranslation[compteur], errorRotation[compteur]);
-        }
-        ++robustnessTotal;
-    }//boucle compteur
-    bool test = printErrors("Erreur sur la translation",errorTranslation,robustnessOK,robustnessTotal,tolerance);
-    test = printErrors("Erreur sur la rotation",errorRotation,robustnessOK,robustnessTotal,tolerance) && test;
-    return printFooter(nbIterations, test);
-}
-
-// test3D3DMatching
-bool arlCore::test3D3DMatching( long int nbIterations, double tolerance )
-{
-    // Constantes de matching
-    const double GaussianNoise3D = 0.0;
-    const double Decimage = 0.8;
-    // Constantes de creation du phantom
-    const double TransfVolumeSize = 500.0;
-    const double VolumeSize = 400.0;
-    const unsigned int NbpointsModel = 15;
-    const unsigned int NbOutLiers = 5;
-    const double ProbaSousEchantillon = 0.8;
-
-    unsigned int i,j;
-    Point::sptr point3D = Point::New(3);
-    printHeader("3D/3D matching",nbIterations, tolerance);
-    vnl_vector<double> corrects(nbIterations,0.0);
-    vnl_vector<double> nonCorrects(nbIterations,0.0);
-    vnl_vector<double> nonApparies(nbIterations,0.0);
-    long int robustnessOK=0, robustnessTotal=0;
-    long int compteur;
-    for( compteur=0 ; compteur<nbIterations ; ++compteur )
-    {
-        std::vector< arlCore::Point::csptr > realMatchingA, realMatchingB;
-        arlCore::PointList::sptr modelPoints = arlCore::PointList::New(3);
-        arlCore::PointList::sptr worldPoints = arlCore::PointList::New(3);
-        arlCore::PointList::sptr outLiers = arlCore::PointList::New(3);
-        modelPoints->shapeRandom(NbpointsModel, ARLCORE_SHAPE_SPHERE,arlCore::Point::New(0.0,0.0,0.0), VolumeSize); //ARLCORE_SHAPE_PLAINSQUARE
-        arlCore::vnl_rigid_matrix T1;
-        T1.uniform_random(TransfVolumeSize);
-        for( i=0 ; i<modelPoints->size() ; ++i)
-            if(arlRandom::Random::uniformDoubleRnd( 0.0, 1.0 )<ProbaSousEchantillon)
-            {
-                T1.trf( (*modelPoints)[i] , point3D);
-                realMatchingA.push_back( (*modelPoints)[i] );
-                worldPoints->push_back(point3D);
-                realMatchingB.push_back( worldPoints->back() );
-            }
-        for( i=0 ; i<worldPoints->size() ; ++i )
-            (*worldPoints)[i]->addGaussianNoise(GaussianNoise3D);
-        outLiers->shapeRandom(NbOutLiers, ARLCORE_SHAPE_SPHERE, arlCore::Point::New(0.0,0.0,0.0), VolumeSize);
-        worldPoints->push_back(outLiers);
-        arlCore::PointList::sptr Va =  arlCore::PointList::New();
-        arlCore::PointList::sptr Vb =  arlCore::PointList::New();
-        assert(realMatchingA.size()==realMatchingB.size());
-
-        if(arlCore::matching3D3D(modelPoints, worldPoints, GaussianNoise3D, Decimage, Va, Vb)>0)
-        {   // Est-ce que les appariements obtenus sont corrects ?
-            ++robustnessOK;
-            for( i=0 ; i<Va->size() ; ++i )
-            {
-                bool found = false;
-                for( j=0 ; j<realMatchingA.size() && !found ; ++j )
-                    found = found || (realMatchingA[j]==(*Va)[i] && realMatchingB[j]==(*Vb)[i]);
-                if(!found) ++nonCorrects[compteur]; else ++corrects[compteur];
-            }
-        }
-        nonApparies[compteur]=realMatchingA.size()-corrects[compteur];
-        ++robustnessTotal;
-    }//boucle compteur
-    vnl_vector<double> total(nbIterations);
-    total=corrects+nonCorrects;
-
-    bool test = printErrors("Nombre d'appariements incorrects",nonCorrects,robustnessOK,robustnessTotal,tolerance);
-    printErrors("Proportion vrais appariements/total",element_quotient(corrects,total),robustnessOK,robustnessTotal,-1);
-    printErrors("Proportion faux appariements/total",element_quotient(nonCorrects,total),robustnessOK,robustnessTotal,-1);
-    printErrors("Proportion non apparies/total",element_quotient(nonApparies,total),robustnessOK,robustnessTotal,-1);
-    return printFooter(nbIterations, test);
-}
-
-    // The 9 first parameters are used for the initialization of SceneCriterionComparison:
-    // number of point (parameters[0])
-    // number of camera  (parameters[1])
-    // angle between the camera  (parameters[2])
-    // size of the shape in which the 3D points are randomly chosen  (parameters[3])
-    // shape of the random 3D points  (parameters[4])
-    // number of control point  (parameters[5])
-    // distance between the control point center and the registration point   (parameters[6])
-    // size of the shape in which the control points are randomly chosen  (parameters[7])
-    // shape of the random control points   (parameters[8])
-    //
-    // Then the other parameters of the experiments (variable or static) are found at the end of the vector
-    // noise on 3D points (parameters[9][10][11])
-    // noise on 2D points (parameters[12][13])
-    // information on the initilisation rigid transformation (0=close to the solution; 1=identity; 2=randomly chosen)(parameters[14])
-bool arlCore::testRegistrationCriteriaComparison( long int nbIterations, std::vector<double> parameters, std::vector<double> staticStatus,
-                                                std::vector< vnl_vector<double>* > erreur_recalage_methode, std::vector< vnl_vector<double>* > duree_recalage_methode,
-                                                 std::vector< vnl_vector<double>* > robustesse_recalage_methode )
-{
-    const bool Verbose = false;
-    const unsigned int nbMethode = 12;
-    erreur_recalage_methode.resize(nbMethode);
-    duree_recalage_methode.resize(nbMethode);
-    robustesse_recalage_methode.resize(nbMethode);
-    const double TransfVolumeSize = 500.0;
-    const double rangeGaussianNoise3D_X = parameters[9], rangeGaussianNoise3D_Y = parameters[10], rangeGaussianNoise3D_Z = parameters[11];
-    const double rangeGaussianNoise2D_X = parameters[12], rangeGaussianNoise2D_Y = parameters[13];
-    double GaussianNoise3D_X, GaussianNoise3D_Y, GaussianNoise3D_Z, GaussianNoise2D_X, GaussianNoise2D_Y, RSB_3D=0.0, RSB_2D=0.0;
-    const unsigned int nbTypes = arlCore::ARLCORE_PR_NBTYPES;
-    //printHeader("Projective registration",nbIterations, tolerance);
-//  std::vector< vnl_vector<double> > erreur_recalage_methode(nbMethode);
-//  std::vector< vnl_vector<double> > duree_recalage_methode(nbMethode);
-    std::vector< vnl_vector_fixed<double,5> > errorRotation(nbTypes);
-    std::vector< vnl_vector_fixed<double,5> > errorTranslation(nbTypes);
-    std::vector<long int> robustnessOK(nbTypes), robustnessTotal(nbTypes);
-    long int compteur;
-    arlCore::Object registrationDuration;
-    unsigned int enum_3D2D, enum_3D3D, i, plane_reconstruction;
-    long int j;
-    std::vector<double> log_reconstruction, registrationError;
-    for( i=0 ; i<nbMethode ; ++i )
-    {
-        erreur_recalage_methode[i] = new vnl_vector<double>(nbIterations);
-        duree_recalage_methode[i] = new vnl_vector<double>(nbIterations);
-        robustesse_recalage_methode[i] = new vnl_vector<double>(nbIterations);
-    }
-    for( compteur=0 ; compteur<nbIterations ; ++compteur)
-    {
-        //std::cerr<<"ITERATION No "<<compteur<<std::endl;
-        //Scene creation
-        arlCore::PlaneSystem universe;
-        std::vector<double> noiseValues(5);
-        //do{
-        //Noise computation
-        if(staticStatus[9] == 0 && staticStatus[10] == 0 && staticStatus[11] == 0 ){
-        GaussianNoise3D_X = fabs(arlRandom::Random::gaussianRnd(rangeGaussianNoise3D_X));
-        GaussianNoise3D_Y = fabs(arlRandom::Random::gaussianRnd(rangeGaussianNoise3D_Y));
-        GaussianNoise3D_Z = fabs(arlRandom::Random::gaussianRnd(rangeGaussianNoise3D_Z));}
-        else{
-        GaussianNoise3D_X = rangeGaussianNoise3D_X;
-        GaussianNoise3D_Y = rangeGaussianNoise3D_Y;
-        GaussianNoise3D_Z = rangeGaussianNoise3D_Z;}
-        if(Verbose) std::cerr<<"GaussianNoise3D_X ="<<GaussianNoise3D_X<<std::endl<<"GaussianNoise3D_Y ="<<GaussianNoise3D_Y<<std::endl<<"GaussianNoise3D_Z ="<<GaussianNoise3D_Z<<std::endl;
-        if(staticStatus[12] == 0 && staticStatus[13] == 0){
-        GaussianNoise2D_X = fabs(arlRandom::Random::gaussianRnd(rangeGaussianNoise2D_X));
-        GaussianNoise2D_Y = fabs(arlRandom::Random::gaussianRnd(rangeGaussianNoise2D_Y));}
-        else{
-        GaussianNoise2D_X = rangeGaussianNoise2D_X;
-        GaussianNoise2D_Y = rangeGaussianNoise2D_Y;}
-        if(Verbose) std::cerr<<"GaussianNoise2D_X ="<<GaussianNoise2D_X<<std::endl<<"GaussianNoise2D_Y ="<<GaussianNoise2D_Y<<std::endl;
-        noiseValues[0] = GaussianNoise3D_X; noiseValues[1] = GaussianNoise3D_Y; noiseValues[2] = GaussianNoise3D_Z;
-        noiseValues[3] = GaussianNoise2D_X; noiseValues[4] = GaussianNoise2D_Y;
-        //arlCore::SceneCriterionComparison *scene_test=0;
-        //if(scene_test != 0)
-        //  delete scene_test;
-        //scene_test = new arlCore::SceneCriterionComparison(universe, parameters, staticStatus, noiseValues, RSB_3D, RSB_2D);
-        //}while(RSB_3D < 35 || RSB_2D < 35);exit(0);
-        arlCore::SceneCriterionComparison scene(universe, parameters, staticStatus, noiseValues, RSB_3D, RSB_2D);
-        const unsigned int nbCameras = (unsigned int)scene.getCameras().size();
-        const unsigned int nbModelPoints = scene.getTags().getTag(0)->getGeometry()->size();
-        const std::vector<arlCore::Camera> &cameras = scene.getCameras().getList();
-       PointList::csptr regPoints     = scene.getTags().getTag(0)->getGeometry();
-       PointList::csptr controlPoints = scene.getTags().getTag(1)->getGeometry();
-        std::vector< std::vector<arlCore::Point::csptr> >reprojection2D(cameras.size());
-        arlCore::SmartPointList::sptr  splMonde =  arlCore::SmartPointList::New();
-        for( i=0 ; i<cameras.size() ; ++i )
-        {
-            scene.detection( i+1, 0, splMonde, 0.0 );
-            splMonde->getPoints(reprojection2D[i], i+1, scene.getTags().getTag(0));
-        }
-        //Step 0 : creation of the seeked transformation T2 (= T1^-1 )
-        // creation of the initialisation
-        // application of T1 to modelPoints and controlModelPoints
-        arlCore::vnl_rigid_matrix T1,T2;
-        T1.uniform_random(TransfVolumeSize);
-        arlCore::PointList::sptr modelPoints= arlCore::PointList::New(3);
-        arlCore::PointList::sptr controlModelPoints= arlCore::PointList::New(3);
-
-        T1.trf(regPoints, modelPoints);
-        T1.trf(controlPoints, controlModelPoints);
-        T2.invert(T1);
-
-        std::vector< vnl_rigid_matrix > T_list; //list that contains the solution matrix
-        vnl_rigid_matrix trf_initialisation;
-        if(parameters[14] == 0)
-        {
-            trf_initialisation = T2;
-            trf_initialisation.setTranslation( trf_initialisation(0,3)+arlRandom::Random::uniformDoubleRnd(0,3), trf_initialisation(1,3)+arlRandom::Random::uniformDoubleRnd(0,3),trf_initialisation(2,3)+arlRandom::Random::uniformDoubleRnd(0,3));
-        }
-        if(parameters[14] == 1)
-            trf_initialisation.set_identity();
-        if(parameters[14] == 2)
-            trf_initialisation.uniform_random(TransfVolumeSize);
-
-        //Step 1 : creation of the noisy 3D points
-        arlCore::PointList::sptr modelPointsNoisy = arlCore::PointList::New(3);
-        for( i=0 ; i<modelPoints->size() ; ++i )
-        {
-            arlCore::Point::sptr tmp=arlCore::Point::New(3);
-            tmp->set(0, (*modelPoints)[i]->x() + arlRandom::Random::gaussianRnd(GaussianNoise3D_X) );
-            tmp->set(1, (*modelPoints)[i]->y() + arlRandom::Random::gaussianRnd(GaussianNoise3D_Y) );
-            tmp->set(2, (*modelPoints)[i]->z() + arlRandom::Random::gaussianRnd(GaussianNoise3D_Z) );
-            if(Verbose) std::cerr<<"modelPointsNoisy["<<i<<"]"<< (*modelPointsNoisy)[i]->getCoordinates()<<std::endl;
-            arlCore::vnl_covariance_matrix &cov_mat = tmp->getCovMatrix();
-            cov_mat.fill(0.0);
-            cov_mat.put(0,0,GaussianNoise3D_X*GaussianNoise3D_X);
-            cov_mat.put(1,1,GaussianNoise3D_Y*GaussianNoise3D_Y);
-            cov_mat.put(2,2,GaussianNoise3D_Z*GaussianNoise3D_Z);
-            if(Verbose) std::cerr<<"cov mat 3D["<<i<<"] ="<< tmp->getCovMatrix()<<std::endl;
-            modelPointsNoisy->push_back(tmp);
-        }
-        //Step 2 : creation of the noisy 2D points
-        std::vector< std::vector<arlCore::Point::csptr> > reprojection2DNoisy(cameras.size());
-        for( j=0 ; j<(long int)nbCameras ; ++j)
-        {
-            //reprojection2DNoisy[j].setDimension(2);
-            for( i=0 ; i<nbModelPoints ; ++i )
-            {
-                arlCore::Point::sptr tmp =  arlCore::Point::New(2);
-                tmp->set(0, reprojection2D[j][i]->x() + arlRandom::Random::gaussianRnd(GaussianNoise2D_X));
-                tmp->set(1, reprojection2D[j][i]->y() + arlRandom::Random::gaussianRnd(GaussianNoise2D_Y));
-                if(Verbose) std::cerr<<"reprojection2D["<<j<<"]["<<i<<"]"<<reprojection2D[j][i]->getCoordinates()<<std::endl;
-                if(Verbose) std::cerr<<"reprojection2DNoisy["<<j<<"]["<<i<<"]"<<reprojection2DNoisy[j][i]->getCoordinates()<<std::endl;
-                arlCore::vnl_covariance_matrix &cov_mat = tmp->getCovMatrix();
-                cov_mat.fill(0.0);
-                cov_mat.put(0,0,GaussianNoise2D_X*GaussianNoise2D_X);
-                cov_mat.put(1,1,GaussianNoise2D_Y*GaussianNoise2D_Y);
-                if(Verbose) std::cerr<<"cov mat 2D["<<i<<"] ="<< tmp->getCovMatrix()<<std::endl;
-                reprojection2DNoisy[j].push_back(tmp);
-            }
-        }
-        //Step 3 : reconstruction of the 2D points for 3D/3D registration
-        arlCore::PointList::sptr reconstructedPoints_Lines = arlCore::PointList::New(3);
-        arlCore::PointList::sptr reconstructedPoints_Opt = arlCore::PointList::New(3);
-        for( i=0 ; i<regPoints->size() ; ++i )
-        {
-            arlCore::Point::sptr tmp1 = arlCore::Point::New();
-            arlCore::Point::sptr tmp2 = arlCore::Point::New();
-            reconstructedPoints_Lines->push_back(tmp1);
-            reconstructedPoints_Opt->push_back(tmp2);
-            std::vector<Point::csptr> tmp_2D_point_list;
-            for( j=0 ; j<(long int)cameras.size() ; ++j )
-                tmp_2D_point_list.push_back(reprojection2DNoisy[j][i]);
-
-            registrationDuration.startLap();
-            reconst3D( tmp_2D_point_list, cameras, (*reconstructedPoints_Lines)[i], arlCore::ARLCORE_R3D_MULTI_LINES_APPROX, plane_reconstruction, log_reconstruction);
-            (*duree_recalage_methode[0])[compteur] = registrationDuration.getLap();
-            if(Verbose) std::cerr<<"(*reconstructedPoints_Lines)["<<i<<"]"<<(*reconstructedPoints_Lines)[i]->getCoordinates()<<std::endl;
-            registrationDuration.startLap();
-            reconst3D( tmp_2D_point_list, cameras, (*reconstructedPoints_Opt)[i]  , arlCore::ARLCORE_R3D_REPROJECTION_OPTIMIZATION_UNCERTAINTY, plane_reconstruction, log_reconstruction, -1, true);
-            (*duree_recalage_methode[1])[compteur] = registrationDuration.getLap();
-            (*duree_recalage_methode[2])[compteur] = registrationDuration.getLap();
-            (*duree_recalage_methode[3])[compteur] = registrationDuration.getLap();
-            if(Verbose) std::cerr<<"reconstructedPoints_Opt["<<i<<"]"<< (*reconstructedPoints_Opt)[i]->getCoordinates()<<std::endl;
-        }
-
-        //Step 4 : computation of the 3D/3D registration
-        T_list.push_back(trf_initialisation);
-        registrationDuration.startLap();
-        T_list[0].register3D3D(modelPointsNoisy, reconstructedPoints_Lines, true);
-        (*duree_recalage_methode[0])[compteur] += registrationDuration.getLap();// += because we take into account the time to reconstruct the points
-        if(T_list[0] == trf_initialisation)//check the robustness : has it converged or not ?
-                (*robustesse_recalage_methode[0])[compteur] = 1;
-
-        if(Verbose) std::cerr<<"T1 ="<<T1<<std::endl;
-        //std::cerr<<"T solution ="<<T2<<std::endl;
-        if(Verbose) std::cerr<<"T_list[0] ="<<T_list[0]<<std::endl;
-        T_list.push_back(trf_initialisation);
-        registrationDuration.startLap();
-        T_list[1].register3D3D(modelPointsNoisy, reconstructedPoints_Opt, true);
-        (*duree_recalage_methode[1])[compteur] += registrationDuration.getLap();// += because we take into account the time to reconstruct the points
-        if(T_list[1] == trf_initialisation)//check the robustness : has it converged or not ?
-                (*robustesse_recalage_methode[1])[compteur] = 1;
-        if(Verbose) std::cerr<<"Recalage 3D3D : methode directe"<<std::endl;
-        //std::cerr<<"T_list[1] ="<<T_list[1]<<std::endl;}
-
-        for(enum_3D3D = arlCore::ARLCORE_REGISTER3D3D_UNKNOWN+1,i=0; enum_3D3D <arlCore::ARLCORE_REGISTER3D3D_GC; ++enum_3D3D,++i)
-        {
-            std::vector< double > optimise_param, log_3D3D;
-            std::string name="Recalage 3D3D : methode "+arlCore::ARLCORE_REGISTER3D3D_NAMES[i+1];
-            if(Verbose) std::cerr<<name<<std::endl;
-            T_list.push_back(trf_initialisation);
-            registrationDuration.startLap();
-            T_list[2+i].register3D3DUncertainty(modelPointsNoisy, reconstructedPoints_Opt, (arlCore::ARLCORE_REGISTER3D3D)enum_3D3D, optimise_param, log_3D3D/*, modelPoints->size()*/ );
-            (*duree_recalage_methode[2+i])[compteur] += registrationDuration.getLap();// += because we take into account the time to reconstruct the points
-            if(Verbose)
-            {
-                for(j=0;j<(long int)log_3D3D.size();++j)
-                    std::cerr<<"log["<<j<<"] ="<<log_3D3D[j]<<std::endl;
-                std::cerr<<"T_list[2+i] ="<<T_list[2+i]<<std::endl;
-            }
-            if(T_list[2+i] == trf_initialisation)//check the robustness : has it converged or not ?
-                (*robustesse_recalage_methode[2+i])[compteur] = 1;
-        }
-        //Step 5 : computation of the 3D/2D registration
-        int offset = (int)T_list.size();
-        if(Verbose) std::cerr<<"T_list.size() ="<<(unsigned int)T_list.size()<<std::endl;
-        for(enum_3D2D=arlCore::ARLCORE_PR_UNKNOWN+1,i=0; enum_3D2D <arlCore::ARLCORE_PR_ISPPC_CG; ++enum_3D2D,++i)
-        //for(enum_3D2D=arlCore::ARLCORE_PR_UNKNOWN+1,i=0; enum_3D2D <arlCore::ARLCORE_PR_EPPC; ++enum_3D2D,++i)
-        {
-            std::string name="Recalage 3D2D : methode "+arlCore::ARLCORE_PROJECTIVE_REGISTRATION_NAMES[i+1];
-            if(Verbose) std::cerr<<name<<std::endl;
-            T_list.push_back(trf_initialisation);
-            //std::cerr<<"T_list[offset+i] ="<<T_list[offset+i]<<std::endl;
-            std::vector<double> log, param_optimisation;
-            registrationDuration.startLap();
-            arlCore::multiViewPointRegistration3D2D( cameras, reprojection2DNoisy ,  modelPointsNoisy ,
-                T_list[offset+i], (arlCore::ARLCORE_PROJECTIVE_REGISTRATION)enum_3D2D, param_optimisation, log, 1);
-            (*duree_recalage_methode[offset+i])[compteur] = registrationDuration.getLap();
-//          {
-//              T1.compareInverse(T2, errorT, errorR);
-//              addValue(errorTranslation[i], errorT);
-//              addValue(errorRotation[i], errorR);
-//              ++robustnessOK[i];
-//          }
-            if(Verbose)
-            {
-                for(j=0;j<(long int)log.size();++j)
-                    std::cerr<<"log["<<j<<"] ="<<log[j]<<std::endl;
-                std::cerr<<"T_list["<<offset+i<<"] ="<<T_list[offset+i]<<std::endl;
-            }
-            if(T_list[2+i] == trf_initialisation)//check the robustness : has it converged or not ?
-                (*robustesse_recalage_methode[2+i])[compteur] = 1;
-//          ++robustnessTotal[i];
-        }
-        //Step 6 : computation of registration error of each method using the control points
-        if(Verbose) std::cerr<< "CALCUL DES ERREURS "<<std::endl;
-        for(i=0;i<T_list.size();++i)
-        {
-            double error = 0;
-            arlCore::PointList::sptr temp_points = arlCore::PointList::New(3);
-            arlCore::Point::sptr toto = arlCore::Point::New(3);
-            for( j=0 ; j<(long int)controlModelPoints->size() ; ++j )
-                temp_points->push_back(toto);
-            T_list[i].trf(controlModelPoints,temp_points);
-            for( j=0 ; j<(long int)controlModelPoints->size() ; ++j )
-                error += (*temp_points)[j]->distance( (*controlPoints)[j] );
-            (*erreur_recalage_methode[i])[compteur] = error;
-            //std::cerr<< "Erreur de recalage methode ["<<i<<"]="<<registrationError[i] <<std::endl;
-        }
-    }//boucle compteur
-
-    for(enum_3D3D = arlCore::ARLCORE_REGISTER3D3D_UNKNOWN+1,i=0; enum_3D3D <arlCore::ARLCORE_REGISTER3D3D_GC; ++i)
-    {
-        if(i==0){
-        std::string name="Recalage 3D3D : methode directe avec reconstruction droite";
-        std::cerr<<name<<std::endl;}
-        else {if(i==1){
-        std::string name="Recalage 3D3D : methode directe avec reconstruction optimale";
-        std::cerr<<name<<std::endl;}
-        else{
-        std::string name="Recalage 3D3D : methode "+arlCore::ARLCORE_REGISTER3D3D_NAMES[i-1];
-        std::cerr<<name<<std::endl;++enum_3D3D;}}
-
-        vnl_vector<double> sub(nbIterations);
-        for( j=0 ; j<nbIterations ; ++j )
-        {
-            if(Verbose){std::cerr<< "Erreur de recalage methode ["<<i<<"]="<<(*erreur_recalage_methode[i])[j] <<std::endl;}
-            sub[j] = (*erreur_recalage_methode[i])[j] - erreur_recalage_methode[i]->mean();
-        }
-        std::cerr<< "Erreur MOYENNE de recalage methode ["<<i<<"]="<<erreur_recalage_methode[i]->mean() <<std::endl;
-        std::cerr<< "Erreur MAX de recalage methode ["<<i<<"]="<<erreur_recalage_methode[i]->max_value() <<std::endl;
-        std::cerr<< "Ecart-type de recalage methode ["<<i<<"]="<<sub.rms() <<std::endl;
-        std::cerr<<std::setprecision(10)<< "Duree MOYENNE de recalage methode ["<<i<<"]="<<duree_recalage_methode[i]->mean() <<std::endl<<std::endl;
-        std::cerr<< "Robustesse methode ["<<i<<"]="<<robustesse_recalage_methode[i]->sum() <<std::endl<<std::endl;
-    }
-    int offset2 = i;
-    std::cerr<<i<<std::endl;
-    //for(enum_3D2D=arlCore::ARLCORE_PR_UNKNOWN+1,i=0; enum_3D2D <arlCore::ARLCORE_PR_EPPC; ++enum_3D2D,++i)
-    for(enum_3D2D=arlCore::ARLCORE_PR_UNKNOWN+1,i=0; enum_3D2D <arlCore::ARLCORE_PR_ISPPC_CG; ++enum_3D2D,++i)
-    {
-        std::string name="Recalage 3D2D : methode "+arlCore::ARLCORE_PROJECTIVE_REGISTRATION_NAMES[i+1];
-        std::cerr<<name<<std::endl;
-        vnl_vector<double> sub(nbIterations);
-        for( j=0 ; j<nbIterations ; ++j)
-        {
-            if(Verbose){std::cerr<< "Erreur de recalage methode ["<<i<<"]="<<(*erreur_recalage_methode[i+offset2])[j] <<std::endl;}
-            sub[j] = (*erreur_recalage_methode[i+offset2])[j] - erreur_recalage_methode[i+offset2]->mean();
-        }
-        std::cerr<< "Erreur MOYENNE de recalage methode ["<<i<<"]="<<erreur_recalage_methode[i+offset2]->mean() <<std::endl;
-        std::cerr<< "Erreur MAX de recalage methode ["<<i<<"]="<<erreur_recalage_methode[i+offset2]->max_value() <<std::endl;
-        std::cerr<< "Ecart-type de recalage methode ["<<i<<"]="<<sub.rms() <<std::endl;
-        std::cerr<<std::setprecision(10)<< "Duree MOYENNE de recalage methode ["<<i<<"]="<<duree_recalage_methode[i+offset2]->mean() <<std::endl<<std::endl;
-        std::cerr<< "Robustesse methode ["<<i<<"]="<<robustesse_recalage_methode[i+offset2]->sum() <<std::endl<<std::endl;
-    }
-    bool test=true;
-//  for(enum_3D2D=arlCore::ARLCORE_PR_ISPPC,i=0; enum_3D2D <arlCore::ARLCORE_PR_NBTYPES; ++enum_3D2D,++i)
-//  {
-//      std::string name="Translation error ("+arlCore::ARLCORE_PROJECTIVE_REGISTRATION_NAMES[enum_3D2D]+")";
-//      //test = printErrors(name,errorTranslation[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-//      name="Rotation error ("+arlCore::ARLCORE_PROJECTIVE_REGISTRATION_NAMES[enum_3D2D]+")";
-//      //test = printErrors(name,errorRotation[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-//  }
-    return printFooter(nbIterations, test);
-}
-
-// testSphereCenterEstimation
-bool arlCore::testSphereCenterEstimation( long int nbIterations, double tolerance )
-{
-    const bool Verbose = false;
-    const double GaussianNoise3D = 0.0; //0.001;
-    std::vector< vnl_vector_fixed<double,5> >errorRadius;
-    printHeader("Sphere center estimation from sparse point on its surface",nbIterations, tolerance);
-    double error;
-    std::vector<long int> robustnessOK, robustnessTotal;
-    long int i, compteur;
-    unsigned int enum_method;
-    for(enum_method=arlCore::ARLCORE_SCE_UNKNOWN+1,i=0; enum_method <arlCore::ARLCORE_SCE_NBMETHOD; ++enum_method, ++i)
-    {
-        for( compteur=0 ; compteur<nbIterations ; ++compteur )
-        {
-            if( compteur==0 )
-            {
-                vnl_vector_fixed<double,5> tmp(0.0);
-                errorRadius.push_back(tmp);
-                robustnessOK.push_back(0);
-                robustnessTotal.push_back(0);
-            }
-            unsigned int nbPoints = (unsigned int)floor( arlRandom::Random::uniformDoubleRnd(4, 50) );
-            arlCore::PointList::sptr surface_points =  arlCore::PointList::New(3);
-            arlCore::PointList::sptr  surface_points_rotated = arlCore::PointList::New(3);
-
-            arlCore::Point::sptr center =  arlCore::Point::New(0,0,0);
-            arlCore::Point::sptr center_estimation =  arlCore::Point::New(0,0,0);
-            double diameter, angle, radius_estimation;
-            std::vector<double> optimiser_parameter, log;
-            arlCore::vnl_rigid_matrix T;
-            T.uniform_random(0.0);
-            diameter = arlRandom::Random::uniformDoubleRnd(20, 500);
-            angle =  arlRandom::Random::uniformDoubleRnd(10, 360);
-            center->shapeRandom(arlCore::ARLCORE_SHAPE_CUBE,1000);
-            if(Verbose) std::cerr<< "nbPoints = "<<nbPoints <<std::endl;
-            if(Verbose) std::cerr<< "diameter/2 = "<<diameter/2 <<std::endl;
-            surface_points->shapeRandom(nbPoints, arlCore::ARLCORE_SHAPE_SPHERE_CAP, center, diameter, angle );
-            T.trf(surface_points, surface_points_rotated);
-            T.trf(center);
-            //if(Verbose) std::cerr<< "centre = "<<center->print() <<std::endl;
-            for( unsigned int j=0 ; j<surface_points_rotated->size() ; ++j )
-                (*surface_points_rotated)[j]->addGaussianNoise(GaussianNoise3D);
-            arlCore::ARLCORE_SCE type = (arlCore::ARLCORE_SCE)enum_method;
-            if( surface_points_rotated->sphereCenterEstimation( center_estimation, radius_estimation, type, optimiser_parameter, log) )
-            {
-                ++robustnessOK[i];
-                //if(Verbose) std::cerr<< "centre_estimation = "<<center_estimation->print()<<std::endl;
-                error = center_estimation->distance(center);
-                addValue( errorRadius[i], error );
-    /*          std::cerr<< "Erreur d'estimation centre sphere = " <<error<<std::endl;
-                std::cerr<< "Rayon estime = " <<radius_estimation<<std::endl;
-                std::cerr<< "log[0] = " <<log[0]<<std::endl;
-                std::cerr<< "log[1] = " <<log[1]<<std::endl;
-                std::cerr<< "log[2] = " <<log[2]<<std::endl;*/
-            }
-            ++robustnessTotal[i];
-        }//boucle compteur
-    }
-    bool test = true;
-    for(enum_method=arlCore::ARLCORE_SCE_UNKNOWN+1,i=0; enum_method<arlCore::ARLCORE_SCE_NBMETHOD; ++enum_method,++i)
-    {
-        std::string name="Radius error ("+arlCore::ARLCORE_SCE_NAMES[enum_method]+")";
-        test = printErrors(name,errorRadius[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-    }
-    return printFooter(nbIterations, test);
-}
-
-// testPolynomialFieldDistortion
-bool arlCore::testPolynomialFieldDistortion( long int nbIterations, double tolerance )
-{
-    const double CubeRadius = 4.0;
-    std::vector< vnl_vector_fixed<double,5> >errorCorrection;
-    printHeader("Polynomial field distorsion",nbIterations, tolerance);
-    std::vector<long int> robustnessOK, robustnessTotal;
-    long int n=0, compteur;
-    unsigned int i, j, k;
-    unsigned int interpolationDegree, interpolationDegreeMin=2, interpolationDegreeMax=3;
-    assert(interpolationDegreeMin<=interpolationDegreeMax);
-    vnl_vector<double> coordinates(3), distorsion(3);
-    for( interpolationDegree=interpolationDegreeMin ; interpolationDegree<=interpolationDegreeMax ; ++interpolationDegree, ++n )
-    {
-
-        for( compteur=0 ; compteur<nbIterations ; ++compteur )
-        {
-            if( compteur==0 )
-            {
-                vnl_vector_fixed<double,5> tmp(0.0);
-                errorCorrection.push_back(tmp);
-                robustnessOK.push_back(0);
-                robustnessTotal.push_back(0);
-            }
-            const unsigned int NbEquations = 3;
-            arlCore::PointList::sptr real = arlCore::PointList::New();
-            vnl_vector_fixed<double,3> ResGrid(0.6);
-            for( i=2 ; i<CubeRadius/ResGrid[0] ; ++i )
-                for( j=2 ; j<CubeRadius/ResGrid[1] ; ++j )
-                    for( k=2 ; k<CubeRadius/ResGrid[2] ; ++k )
-                        real->push_back(arlCore::Point::New( ResGrid[0]*(double)i, ResGrid[1]*(double)j, ResGrid[2]*(double)k));
-            // Distorsion model
-            const unsigned int modelDegree = 2;
-            const double ModelNoise = 5.0;
-            vnl_vector<double>model(nbPolynomialParameters(modelDegree, NbEquations));
-            for( i=0 ; i<model.size() ; ++i )
-                model[i] = arlRandom::Random::gaussianRnd( ModelNoise );
-            //VAG arlCore::PointList::sptr distorded =  arlCore::PointList::New(real);
-            arlCore::PointList::sptr distorded =  arlCore::PointList::New( ); //VAG
-            distorded->copy( *real ); //VAG
-            for( i=0 ; i<real->size() ; ++i )
-            {
-                for( j=0 ; j<3 ; ++j )
-                    coordinates[j] = (*real)[i]->get(j);
-                arlCore::computePolynomial( modelDegree, model, coordinates, distorsion );
-                for( j=0 ; j<3 ; ++j )
-                    (*real)[i]->set(j, (*real)[i]->x() - distorsion[j]);
-            }
-            // Estimation of model of deformation from synthetic points
-            vnl_vector<double> parameters;
-            double RMS;
-            fieldCalibration( real, distorded, interpolationDegree, parameters, RMS );
-            // Correct points with estimated model
-            FieldCorrector fc( interpolationDegree );
-            fc.setParameters( parameters );
-            fc.activCorrection( true );
-            for( i=0 ; i<distorded->size() ; ++i )
-            {
-                arlCore::Point::sptr undistorded = arlCore::Point::New(3);
-                fc.correct( (*distorded)[i], undistorded );
-                addValue( errorCorrection[n], undistorded->distance( (*real)[i]) );
-
-            }
-            ++robustnessOK[n];
-            ++robustnessTotal[n];
-        }//boucle compteur
-    }
-    bool test = true;
-    for( i=0 ; i<=interpolationDegreeMax-interpolationDegreeMin ; ++i )
-    {
-        std::stringstream s;
-        s<<"Correction error for polynomial of degree "<<i+interpolationDegreeMin;
-        test = printErrors(s.str(),errorCorrection[i],robustnessOK[i],robustnessTotal[i],tolerance) && test;
-    }
-    return printFooter(nbIterations, test);
-}
-
diff --git a/SrcLib/ARLcore/src/arlcore/vnl_covariance_matrix.cpp b/SrcLib/ARLcore/src/arlcore/vnl_covariance_matrix.cpp
deleted file mode 100644
index 15f9d13..0000000
--- a/SrcLib/ARLcore/src/arlcore/vnl_covariance_matrix.cpp
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/vnl_covariance_matrix.h>
-
-arlCore::vnl_covariance_matrix::vnl_covariance_matrix( unsigned int n ):
-vnl_matrix<double>(n,n)
-{}
-
-arlCore::vnl_covariance_matrix::vnl_covariance_matrix( void ):
-vnl_matrix<double>(0,0)
-{}
-
-arlCore::vnl_covariance_matrix::vnl_covariance_matrix( const vnl_covariance_matrix& rv )
-{
-    copy_in(rv);
-}
-
-arlCore::vnl_covariance_matrix::~vnl_covariance_matrix( void )
-{}
-
-arlCore::vnl_covariance_matrix& arlCore::vnl_covariance_matrix::operator=( const arlCore::vnl_covariance_matrix& rv )
-{
-    copy_in(rv);
-    return *this;
-}
-
-void arlCore::vnl_covariance_matrix::copy_in( const vnl_covariance_matrix& rv )
-{
-    if(this==&rv) return;
-    unsigned int i,j;
-    for( i=0 ; i<rv.rows() ; ++i )
-        for( j=0 ; j<rv.columns() ; ++j )
-            put(i,j,rv.get(i,j));
-}
-
-bool arlCore::vnl_covariance_matrix::errorEllipse( double &a, double &b, double &theta ) const
-{   // http://ieeexplore.ieee.org/iel5/7695/21048/00977046.pdf
-    a=0,b=0,theta=0;
-    if(is_zero()) return true;
-    if(size()!=4) return false;
-    double sigma1P2 = get(0,0);
-    double sigma2P2 = get(1,1);
-    double sigma2 = sqrt(sigma2P2);
-    double sigma12P2 = get(0,1);
-    double sigma12 = sqrt(sigma12P2);
-    double sigma2P3  = sigma2P2*sigma2;
-    double x0 = sigma1P2-sigma2P2;
-    double x1 = 2*(sigma1P2*sigma2P2-sigma12P2);
-    double x2 = sigma1P2 + sigma2P2;
-    double x3 = sqrt(x0*x0+4*sigma12P2);
-    //! todo Fix cases of division by zero
-    a = sqrt(x1/(x2-x3));
-    b = sqrt(x1/(x2+x3));
-    theta = 0.5*atan((2*sigma12)/(sigma1P2-sigma2P3));
-    return true;
-}
diff --git a/SrcLib/ARLcore/src/arlcore/vnl_rigid_vector.cpp b/SrcLib/ARLcore/src/arlcore/vnl_rigid_vector.cpp
deleted file mode 100644
index 813fa3a..0000000
--- a/SrcLib/ARLcore/src/arlcore/vnl_rigid_vector.cpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/vnl_rigid_vector.h>
-
-#include <arlcore/vnl_rotation3d_vector.h>
-#include <arlcore/MatrixR.h>
-#include <arlcore/Misc.h>
-
-arlCore::vnl_rigid_vector::vnl_rigid_vector( void ):
-vnl_vector_fixed<double,6>()
-{}
-
-arlCore::vnl_rigid_vector::vnl_rigid_vector( const vnl_rigid_vector& rv ):
-vnl_vector_fixed<double,6>()
-{
-    copy_in(rv);
-}
-
-arlCore::vnl_rigid_vector::vnl_rigid_vector( const vnl_vector<double>& v ):
-vnl_vector_fixed<double,6>()
-{
-    copy_in(v);
-}
-
-arlCore::vnl_rigid_vector::vnl_rigid_vector( const vnl_rigid_matrix& rm ):
-vnl_vector_fixed<double,6>()
-{
-    copy_in(rm);
-}
-
-arlCore::vnl_rigid_vector::~vnl_rigid_vector( void )
-{}
-
-arlCore::vnl_rigid_vector& arlCore::vnl_rigid_vector::operator=( const vnl_vector<double>& v )
-{
-    copy_in(v);
-    return *this;
-}
-
-arlCore::vnl_rigid_vector& arlCore::vnl_rigid_vector::operator=( const vnl_rigid_vector& rv )
-{
-    copy_in(rv);
-    return *this;
-}
-
-arlCore::vnl_rigid_vector& arlCore::vnl_rigid_vector::operator=( const vnl_rigid_matrix& rm )
-{
-    copy_in(rm);
-    return *this;
-}
-
-void arlCore::vnl_rigid_vector::copy_in( const vnl_rigid_vector& rv )
-{
-    if(this==&rv) return;
-    unsigned int i;
-    for( i=0 ; i<6 ; ++i )
-        put(i,rv(i));
-}
-
-void arlCore::vnl_rigid_vector::copy_in( const vnl_rigid_matrix& rm )
-{
-    vnl_rotation3d_matrix rotationM = rm.getRotation();
-    vnl_rotation3d_vector rotationV( rotationM );
-    vnl_vector_fixed<double,3> translation = rm.getTranslation();
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        put(i,rotationV.get(i));
-    for( i=0 ; i<3 ; ++i )
-        put(i+3,translation.get(i));
-}
-
-void arlCore::vnl_rigid_vector::copy_in( const vnl_vector<double>& v )
-{
-    assert(v.size()==6);
-    unsigned int i;
-    for( i=0 ; i<6 ; ++i )
-        if(i<v.size()) put(i,v.get(i));
-        else put(i,0.0);
-}
-
-arlCore::vnl_rotation3d_vector arlCore::vnl_rigid_vector::getRotation3dVector( void ) const
-{
-    vnl_rotation3d_vector rv;
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        rv.put(i,get(i));
-    return rv;
-}
-
-vnl_vector_fixed<double,3> arlCore::vnl_rigid_vector::getTranslation( void ) const
-{
-    vnl_vector_fixed<double,3> translation;
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        translation.put(i,get(i+3));
-    return translation;
-}
-
-void arlCore::vnl_rigid_vector::addGaussianNoise( double std )
-{
-    unsigned int i;
-    for( i=0 ; i<6 ; ++i )
-        (*this)[i] += arlRandom::Random::gaussianRnd(std);
-}
diff --git a/SrcLib/ARLcore/src/arlcore/vnl_rotation3d_matrix.cpp b/SrcLib/ARLcore/src/arlcore/vnl_rotation3d_matrix.cpp
deleted file mode 100644
index a91d0ab..0000000
--- a/SrcLib/ARLcore/src/arlcore/vnl_rotation3d_matrix.cpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/vnl_rotation3d_matrix.h>
-
-#include <iostream>
-#include <math.h>
-
-#include <vnl/algo/vnl_svd.h>
-#include <vnl/algo/vnl_powell.h>
-#include <vnl/vnl_det.h>
-#include <vnl/vnl_trace.h>
-
-#include <arlcore/vnl_rotation3d_vector.h>
-#include <arlcore/Optimization.h>
-
-arlCore::vnl_rotation3d_matrix::vnl_rotation3d_matrix( void ):
-vnl_matrix_fixed<double,3,3>()
-{}
-
-arlCore::vnl_rotation3d_matrix::vnl_rotation3d_matrix( const vnl_rotation3d_vector& rv )
-{
-    copy_in(rv);
-}
-
-arlCore::vnl_rotation3d_matrix::vnl_rotation3d_matrix( double phi, double theta, double psy )
-{   // http://mathworld.wolfram.com/EulerAngles.html
-    put(0,0,cos(psy)*cos(phi)-cos(theta)*sin(phi)*sin(psy));
-    put(0,1,cos(psy)*sin(phi)+cos(theta)*cos(phi)*sin(psy));
-    put(0,2,sin(psy)*sin(theta));
-    put(1,0,-sin(psy)*cos(phi)-cos(theta)*sin(phi)*cos(psy));
-    put(1,1,-sin(psy)*sin(phi)+cos(theta)*cos(phi)*cos(psy));
-    put(1,2,cos(psy)*sin(theta));
-    put(2,0,sin(theta)*sin(phi));
-    put(2,1,-sin(theta)*cos(phi));
-    put(2,2,cos(theta)*1.0);
-}
-
-arlCore::vnl_rotation3d_matrix::~vnl_rotation3d_matrix( void )
-{}
-
-arlCore::vnl_rotation3d_matrix& arlCore::vnl_rotation3d_matrix::operator=( const vnl_rotation3d_vector& rv )
-{
-    copy_in(rv);
-    return *this;
-}
-
-arlCore::vnl_rotation3d_matrix::vnl_rotation3d_matrix( const vnl_matrix_fixed<double,3,3>& mat)
-{
-    copy_in(mat);
-}
-
-arlCore::vnl_rotation3d_matrix& arlCore::vnl_rotation3d_matrix::operator=( const vnl_matrix_fixed<double,3,3>& mat)
-{
-    copy_in(mat);
-    return *this;
-}
-
-bool arlCore::vnl_rotation3d_matrix::is_rotation( void ) const
-{
-    vnl_matrix_fixed<double,3,3> test_Identity;
-    test_Identity = (*this) * this->transpose(); //on verifie d'abord pour le produit
-    if( test_Identity.is_identity(1e-8) || fabs(vnl_det( *this ) -1) < 1e-6  ) return true;
-    else return false;
-}
-
-vnl_matrix<double> arlCore::vnl_rotation3d_matrix::as_matrix( void )
-{
-    vnl_matrix<double> tmp(3,3);
-    unsigned int i, j;
-    for(i=0; i<3; i++)
-        for(j=0; j<3; j++)
-             tmp(i,j) = (*this)(i,j);
-    return tmp;
-}
-
-bool arlCore::vnl_rotation3d_matrix::closest_rotation( void )
-{
-    unsigned int i,j, dim = 3;
-    double small_val = 1e-12; //TODO c'est 1e-6 en float, il faut trouver la relation et la generaliser
-    vnl_matrix_fixed<double,3,3> V, tmp2;
-    vnl_matrix<double> tmp(3,3);
-    tmp = this->as_matrix();
-    vnl_svd<double> svd_T_matrix( tmp );
-    V = svd_T_matrix.V();
-//  V.transpose();
-    tmp2 = svd_T_matrix.U() * V.transpose();
-//  this->Mul(U,V);  // R = U.Vtrp
-  double det = vnl_det( tmp2 );
-  // If s = det(U.Vtrp) id not +1 or -1 : error
-//  if( det_test >  small_val )
-//      {
-//      std::cout << "det = " << svd_T_matrix.determinant_magnitude() << "      |det|-1 = " << det_test << std::endl;
-//      std::cout << "IsValid : non unit determinant" <<std::endl;
-        //throw RotMat3D::ErrNonRotMat("LSQRot : non unit determinant");
-//      }
-  // If s = -1, we should multiply by s = -1 both the smallest
-  // singular value of diag and the corresponding ligne in R
-    if(det < 0.0)
-        {
-    // find smallest singular value
-    //    s = w(0);
-    //    Index i_dmax = 0;
-    //    for(i=1;i<dim;i++)
-    //      if( w(i) < s ) {
-    //        s = w(i);
-    //        i_dmax = i;
-    //      }
-
-    // in vxl : singular value are ranked from the largest to the smallest in svd_T_matrix.W()
-    // Multiply the sing. val and the corresponding row in V by -1
-//    w(i_dmax) *= -1.0;
-        for(i=0;i<dim;i++)
-            V(i,2) *= -1.0;
-        // and recompute the rotation
-        //this->Mul( U, V);  // R = U.Vtrp
-        tmp2 = svd_T_matrix.U() * V.transpose();
-    }
-    for(i=0; i<3; i++)
-        for(j=0; j<3; j++)
-             (*this)(i,j) = tmp2(i,j);
-  // Grep for the number of singular (0) values
-  {
-    // Find the max : dans la vxl smw = svd.W(3,3)
-    double smax = svd_T_matrix.W(0,0);
-//    for(i=0;i<dim;i++)
-//      if(w(i)>smax) smax = w(i);
-    // counting small singular values
-    int num = 0;
-    if( svd_T_matrix.W(0,0) < small_val )
-      num = dim;
-    else
-      for(i=0;i<dim;i++)
-        if( ( (double) svd_T_matrix.W(i,i)/100. + smax) == ((double) smax)) num++;
-//    if( num > 1)
-//      std::cout << "*** WARNING: Matrix has " << num << " null singular values" << std::endl;
-  }
-/* TODO Using residue
-  // compute the residue
-  {
-    double residue =0.0;
-    for(i=0;i<dim;i++)
-      residue += svd_T_matrix.W(i,i);
-    return residue;
-  }*/
-    return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////////////////////
-//
-// Cette fonction calcule la distance g�od�sique entre deux rotations
-// d(R1, R2) = 1/sqrt(2) || Log(R1^T * R2) || (norme de frobenius)
-// In : A matrice 3x3 de rotation
-// In : B matrice 3x3 de rotation
-// Out : Distance entre les deux matrices de rotation
-///////////////////////////////////////////////////////////////////////////////////////////////
-double arlCore::vnl_rotation3d_matrix::sq_rieman_dist ( const vnl_rotation3d_matrix &B )
-{
-//  const bool Verbose = false;
-    vnl_matrix<double> tmp(3,3), logAB(3,3);
-//  unsigned int i;
-//  if(Verbose)
-//  {
-//      for( i=0 ; i<3 ; ++i )
-//          fprintf(stderr," B %f %f %f \n",  B(i,0), B(i,1), B(i,2));
-//      fprintf(stderr,"\n Dans fonction rieman_dist \n");
-//  }
-    tmp = (this->as_matrix()).transpose() * B;
-//  if(Verbose)
-//      for( i=0 ; i<3 ; ++i )
-//          fprintf(stderr," tmp %f %f %f \n",  tmp(i,0), tmp(i,1), tmp(i,2));
-    double theta = 0.0;
-    if( fabs ( ( vnl_trace(tmp) - 1.0 )/2.0 ) <= 1.0)
-        theta = acos( ( vnl_trace(tmp) - 1.0 )/2.0 );
-//  else
-//  {
-//      if(Verbose) fprintf(stderr,"ATTENTION : dans sq_rieman_dist l'angle entre deux matrices de rotation est tellement proche de 0, qu'une erreur d'arrondi est peut-etre survenue (li� � la fonction acos qui n'est d�fini que dans [-1,1]). Par d�faut, toute valeur en dehors de cet intervalle est fix� � 1\n");
-//  }
-//  if(Verbose)
-//      fprintf(stderr,"trace = %1.14f ; theta = %g \n",vnl_trace(tmp), theta);
-
-    if(theta > 1e-6)
-    {
-        logAB = theta/(2*sin(theta)) * (tmp -tmp.transpose());
-//      if(Verbose)
-//          for( i=0 ; i<3 ; ++i )
-//              fprintf(stderr,"logAB %f %f %f \n",  logAB(i,0), logAB(i,1), logAB(i,2));
-
-        double dist_r = 0.5 *logAB.frobenius_norm() * logAB.frobenius_norm();
-//      if(Verbose)
-//      {
-//          fprintf(stderr,"dist_r = %f \n", dist_r);
-//          fprintf(stderr,"frobenius_norm = %f \n",logAB.frobenius_norm());
-//      }
-        return dist_r;
-    }
-    return 0.0;
-}
-
-double arlCore::vnl_rotation3d_matrix::average_rotation3d (const std::vector<vnl_rotation3d_matrix*> &rotation_list)
-{
-
-    arlCore::averageRotation_cost_function average_dist(rotation_list);
-    average_dist.set_matrix_list(rotation_list);
-    vnl_powell compute_average(&average_dist);
-    vnl_vector<double> vrot_solution(3);
-    vrot_solution(0)  = 0.0;  vrot_solution(1)  = 0.0;  vrot_solution(2)  = 0.0;
-    compute_average.minimize(vrot_solution);
-
-    std::cerr<<"Vecteur rotation moyen = "<<vrot_solution<<std::endl;
-    std::cerr<<"Erreur de d�but = "<< compute_average.get_start_error()<<std::endl;
-    std::cerr<<"Erreur de fin = "<< compute_average.get_end_error()<<std::endl;
-
-    arlCore::vnl_rotation3d_vector vec(vrot_solution(0),vrot_solution(1),vrot_solution(2));
-    vec.modulo();
-    arlCore::vnl_rotation3d_matrix average_rot_matrix(vec);
-    std::cerr << "Matrice de rotation moyenne" << std::endl << average_rot_matrix << std::endl;
-    return 0;
-}
-
-void arlCore::vnl_rotation3d_matrix::copy_in( const vnl_rotation3d_vector& rv )
-{   // Rotation Vector (a en radian) -> Rotation Matrix
-    double c, s, theta, k1, k2, theta2, aux;
-    unsigned int i, j;
-    theta2 = rv[0] * rv[0] + rv[1] * rv[1] + rv[2] * rv[2];
-    theta = sqrt(theta2);
-    if(theta > 1e-2 )
-    {
-        c = cos(theta);
-        s = sin(theta);
-        k1 = s / theta;
-        k2 = (1 - c) / theta2;
-    }
-    else
-    {   // Lim. Dev around theta = 0
-        k2 = 1.0/2.0 - theta2/24.0;
-        c = 1.0 - theta2*k2;
-        k1 = 1.0 - theta2/6;
-    }   // I + M*Mt
-    for ( i=0 ; i<3 ; ++i )
-        for ( j=0 ; j<=i ; ++j )
-        {
-            (*this)[i][j] = k2 * rv[i] * rv[j];
-            if(i != j) (*this)[j][i] = (*this)[i][j];
-            else (*this)[i][i] += c;
-        }
-    aux = k1 * rv[2];
-    (*this)[0][1] -= aux;
-    (*this)[1][0] += aux;
-    aux = k1 * rv[1];
-    (*this)[0][2] += aux;
-    (*this)[2][0] -= aux;
-    aux = k1 * rv[0];
-    (*this)[1][2] -= aux;
-    (*this)[2][1] += aux;
-}
-
-void arlCore::vnl_rotation3d_matrix::copy_in( const vnl_matrix_fixed<double,3,3>& mat )
-{
-    unsigned int i, j;
-    for(i=0;i<3;i++)
-        for(j=0;j<3;j++)
-            put(i,j, mat(i,j));
-}
diff --git a/SrcLib/ARLcore/src/arlcore/vnl_rotation3d_vector.cpp b/SrcLib/ARLcore/src/arlcore/vnl_rotation3d_vector.cpp
deleted file mode 100644
index 77997b3..0000000
--- a/SrcLib/ARLcore/src/arlcore/vnl_rotation3d_vector.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <arlcore/vnl_rotation3d_vector.h>
-
-#include <math.h>
-#include <iostream>
-#include <vnl/vnl_math.h>
-#include <vnl/vnl_matrix_fixed.h>
-
-#include <arlcore/vnl_rotation3d_matrix.h>
-#include <arlcore/Misc.h>
-
-arlCore::vnl_rotation3d_vector::vnl_rotation3d_vector( void ):
-vnl_vector_fixed<double,3>()
-{}
-
-arlCore::vnl_rotation3d_vector::vnl_rotation3d_vector( double a, double b, double c ):
-vnl_vector_fixed<double,3>(a,b,c)
-{}
-
-arlCore::vnl_rotation3d_vector::vnl_rotation3d_vector( const vnl_rotation3d_matrix& rm )
-{
-    copy_in(rm);
-}
-
-arlCore::vnl_rotation3d_vector::~vnl_rotation3d_vector( void )
-{}
-
-arlCore::vnl_rotation3d_vector& arlCore::vnl_rotation3d_vector::operator=( const vnl_rotation3d_matrix& rm )
-{
-    copy_in(rm);
-    return *this;
-}
-
-void arlCore::vnl_rotation3d_vector::modulo()
-{
-    double theta, var=0, k, a;
-    unsigned int i;
-    for( i=0 ; i<3 ; ++i )
-        var+=get(i)*get(i);
-    var = sqrt(var);
-    theta = ( var/(2*vnl_math::pi) - (int)(var/(2*vnl_math::pi)) ) * 2*vnl_math::pi;
-    if(var == 0) return;
-    else if(theta >= vnl_math::pi && theta < 2*vnl_math::pi)
-    {
-        theta -= 2*vnl_math::pi;
-        k = theta/var;
-    }
-    else k = theta/var;
-    for( i=0 ; i<3 ; ++i )
-    {
-        a=get(i);
-        put(i,k*a);
-    }
-}
-
-void arlCore::vnl_rotation3d_vector::uniform_random( void )
-{
-    double coef, norme, vec[3];
-    unsigned int i;
-    do
-    { 
-        norme = 0;
-        for( i=0 ; i<3 ; ++i )
-        {
-            vec[i] = arlRandom::Random::uniformDoubleRnd(-1.0, 1.0);
-            norme += vec[i]*vec[i];
-        }
-    }while( norme > 1 || norme < 0.05 );
-    coef = arlRandom::Random::uniformDoubleRnd(-vnl_math::pi, vnl_math::pi)/sqrt(norme);
-    for ( i=0 ; i<3 ; ++i ) 
-        put( i, vec[i]*coef );
-}
-
-double arlCore::vnl_rotation3d_vector::getTheta( void )
-{
-    if(get(0)!=0) return atan(get(1)/get(0));
-    std::cerr<<"x nul : Theta ind�termin�";
-    return 0;
-}
-
-double arlCore::vnl_rotation3d_vector::getPhi( void )
-{
-    double r=sqrt(get(0)*get(0)+get(1)*get(1)+get(2)*get(2));
-    if(r!=0) return acos(get(2)/r);
-    std::cerr<<"Le vecteur rotation est de norme nulle : Phi ind�termin�";
-    return 0;
-}
-
-void arlCore::vnl_rotation3d_vector::add_gaussian_noise( double std )
-{
-    //TODO Appliquer au vecteur rotation un bruit gaussien d'�cart type std
-    // sur la direction et sur l'angle(norme)
-}
-
-bool arlCore::vnl_rotation3d_vector::copy_in ( const vnl_rotation3d_matrix& rm )
-{   // Rotation Matrix -> Rotation Vector
-    int i,k;
-    double d, c, sq, theta, fact, sin_r[3];
-    c = 0.5 * (rm[0][0] + rm[1][1] + rm[2][2] - 1.0); // cos(theta)
-    d = fabs(c);
-    if(d>1.0) c /= d;
-    theta = acos(c);
-    if(theta<0.0) return false;
-    // E_ERRN( theta < 0.0, E_ERRNULL,"RM2RV","negative theta");
-    if(fabs(theta) <= 1e-5)
-    {   // R close to identity : DL around theta = 0
-        fact = 0.5 + theta*theta/12.0;
-        (*this)[0] = (rm[2][1] - rm[1][2]) * fact;
-        (*this)[1] = (rm[0][2] - rm[2][0]) * fact;
-        (*this)[2] = (rm[1][0] - rm[0][1]) * fact;
-    } 
-    else 
-        if(fabs(theta - vnl_math::pi) <= 1e-5) 
-        {   // R is close to a symetry : DL around theta = Pi
-            // set values with diag terms of n.nt
-            for( i=0 ; i<3 ; ++i )
-            {   // approx order 0
-                // c = (rm[i][i] - 1.0)*0.5;
-                sq=1.0+(rm[i][i]-1.0)/(1-c);
-                // 0 <=  [ sq = (n[i])^2 ] <= 1
-                if(sq<0.0) sq=0.0;
-                if(sq>1.0) sq=1.0;
-                (*this)[i]=sqrt(sq);
-            }
-            d = sqrt((*this)[0]*(*this)[0] + (*this)[1]*(*this)[1] +(*this)[2]*(*this)[2]); // K_norm((*this),3);
-            if(d==0) return false;
-            // K_mulscalvect(theta/d,(*this),(*this),3);
-            (*this)[0] *= theta/d;
-            (*this)[1] *= theta/d;
-            (*this)[2] *= theta/d;
-            if((*this)[0]<0.0) return false;
-            // E_ERRN( (*this)[0] < 0.0, E_ERRNULL,"RM2RV","negative square root");
-            // set signs with off-diag terms of n.nt
-            if((rm[0][1] + rm[1][0]) < 0.0) (*this)[1] = -(*this)[1];
-            if((rm[0][2] + rm[2][0]) < 0.0) (*this)[2] = -(*this)[2];
-            // determine wether r = +/- theta*n
-            sin_r[0] = (rm[2][1] - rm[1][2]);
-            sin_r[1] = (rm[0][2] - rm[2][0]);
-            sin_r[2] = (rm[1][0] - rm[0][1]);
-            // determine the most significant term
-            k=0;
-            if( fabs(sin_r[1]) > fabs(sin_r[k])) k=1;
-            if( fabs(sin_r[2]) > fabs(sin_r[k])) k=2;
-            // choose the sign
-            if( sin_r[k] * (*this)[k] < 0.0 )
-                // They do not have the same signs : r = -(*this)
-                for( k=0;k<3;++k)
-                    (*this)[k] = -(*this)[k];
-        }
-        else 
-        {   // At last no numerical problem
-            fact = 0.5 * theta / sin(theta);
-            (*this)[0] = (rm[2][1] - rm[1][2]) * fact;
-            (*this)[1] = (rm[0][2] - rm[2][0]) * fact;
-            (*this)[2] = (rm[1][0] - rm[0][1]) * fact;
-        }
-    return true;
-}
diff --git a/SrcLib/ARLcore/test/CMakeLists.txt b/SrcLib/ARLcore/test/CMakeLists.txt
deleted file mode 100644
index 6f11c0a..0000000
--- a/SrcLib/ARLcore/test/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-fwLoadProperties()
-
-find_package (Boost COMPONENTS date_time regex REQUIRED)
-find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
-
-
diff --git a/SrcLib/ARLcore/test/Properties.cmake b/SrcLib/ARLcore/test/Properties.cmake
deleted file mode 100644
index 180cea7..0000000
--- a/SrcLib/ARLcore/test/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME ARLcoreTest )
-set( VERSION  )
-set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwData fwComEd ARLcore )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/ARLcore/test/cppunit.options b/SrcLib/ARLcore/test/cppunit.options
deleted file mode 100644
index fc16318..0000000
--- a/SrcLib/ARLcore/test/cppunit.options
+++ /dev/null
@@ -1,10 +0,0 @@
-
-CLASSTEST=[
-    'CalibrationTest',
-    'RegistrationTest',
-    'GeometryTest',
-]
-
-USE = ['boost','boostDateTime', 'boostRegex']
-LIB = ['fwData_0-1','ARLcore_0-1','fwTools_0-1','fwCore_0-1','fwComEd_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/ARLcore/test/tu/include/CalibrationTest.hpp b/SrcLib/ARLcore/test/tu/include/CalibrationTest.hpp
deleted file mode 100644
index 455a992..0000000
--- a/SrcLib/ARLcore/test/tu/include/CalibrationTest.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __ARLCORE_UT_CALIBRATIONTEST_HPP__
-#define __ARLCORE_UT_CALIBRATIONTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace ARLcore
-{
-namespace ut
-{
-
-class CalibrationTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( CalibrationTest );
-    CPPUNIT_TEST( initIntrinsicCalibrationTest );
-    CPPUNIT_TEST( initExtrinsicCalibrationTest );
-    CPPUNIT_TEST( intrinsicCalibrationTest     );
-    CPPUNIT_TEST( extrinsicCalibrationTest     );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void initIntrinsicCalibrationTest();
-    void initExtrinsicCalibrationTest();
-    void intrinsicCalibrationTest();
-    void extrinsicCalibrationTest();
-
-
-};
-
-} //namespace ut
-} //namespace ARLCORE
-#endif //__ARLCORE_UT_CALIBRATIONTEST_HPP__
-
diff --git a/SrcLib/ARLcore/test/tu/include/GeometryTest.hpp b/SrcLib/ARLcore/test/tu/include/GeometryTest.hpp
deleted file mode 100644
index 5691cb5..0000000
--- a/SrcLib/ARLcore/test/tu/include/GeometryTest.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __ARLCORE_UT_GEOMETRYTEST_HPP__
-#define __ARLCORE_UT_GEOMETRYTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace ARLcore
-{
-namespace ut
-{
-
-class GeometryTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( GeometryTest );
-    CPPUNIT_TEST( ReconstructionPolyscopicTest );
-    CPPUNIT_TEST( SphereCenterEstimationTest );
-    CPPUNIT_TEST( RigidTransfoTest     );
-    CPPUNIT_TEST( EpipolarMatchingTest     );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-
-    void ReconstructionPolyscopicTest();
-    void SphereCenterEstimationTest();
-    void RigidTransfoTest();
-    void EpipolarMatchingTest();
-
-
-
-};
-
-} //namespace ut
-} //namespace ARLCORE
-#endif //__ARLCORE_UT_GEOMETRYTEST_HPP__
-
diff --git a/SrcLib/ARLcore/test/tu/include/RegistrationTest.hpp b/SrcLib/ARLcore/test/tu/include/RegistrationTest.hpp
deleted file mode 100644
index da2e9b6..0000000
--- a/SrcLib/ARLcore/test/tu/include/RegistrationTest.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __ARLCORE_UT_REGISTRATIONTEST_HPP__
-#define __ARLCORE_UT_REGISTRATIONTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace ARLcore
-{
-namespace ut
-{
-
-class RegistrationTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( RegistrationTest );
-    CPPUNIT_TEST( HomographyRegistrationTest );
-    CPPUNIT_TEST( ProjectiveRegistrationTest );
-    CPPUNIT_TEST( Registration3D3DTest     );
-    //CPPUNIT_TEST( ICPRegistrationTest     ); FIXME dataset
-    CPPUNIT_TEST( threeD3DMatchingTest );
-    CPPUNIT_TEST( registration3D3DwithoutMatchingTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void HomographyRegistrationTest();
-    void ProjectiveRegistrationTest();
-    void Registration3D3DTest();
-    void ICPRegistrationTest();
-    void threeD3DMatchingTest();
-    void registration3D3DwithoutMatchingTest();
-
-
-
-};
-
-} //namespace ut
-} //namespace ARLCORE
-#endif //__ARLCORE_UT_REGISTRATIONTEST_HPP__
-
diff --git a/SrcLib/ARLcore/test/tu/src/CalibrationTest.cpp b/SrcLib/ARLcore/test/tu/src/CalibrationTest.cpp
deleted file mode 100644
index 258629a..0000000
--- a/SrcLib/ARLcore/test/tu/src/CalibrationTest.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Boolean.hpp>
-
-#include "CalibrationTest.hpp"
-#include <arlcore/UnitTestArlCore.h>
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::ARLcore::ut::CalibrationTest );
-
-namespace ARLcore
-{
-namespace ut
-{
-
-void CalibrationTest::setUp()
-{
-    // Set up context before running a test.
-
-}
-void CalibrationTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-
-
-void CalibrationTest::initIntrinsicCalibrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL(true  , arlCore::testInitExtrinsicCalibration( 100, 1e-6 ) );
-}
-
-
-
-void CalibrationTest::initExtrinsicCalibrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL(true  ,  arlCore::testInitIntrinsicCalibration( 100, 1e-5 ) );
-}
-
-
-
-
-
-void CalibrationTest::intrinsicCalibrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL(true  ,  arlCore::testIntrinsicCalibration( 8, 1e-3 ) );
-}
-
-
-
-void CalibrationTest::extrinsicCalibrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL(true  ,  arlCore::testExtrinsicCalibration( 10, 1e-6 ) );
-}
-
-
-
-
-
-
-} //namespace ut
-} //namespace ARLcore
diff --git a/SrcLib/ARLcore/test/tu/src/GeometryTest.cpp b/SrcLib/ARLcore/test/tu/src/GeometryTest.cpp
deleted file mode 100644
index 971c804..0000000
--- a/SrcLib/ARLcore/test/tu/src/GeometryTest.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Boolean.hpp>
-
-#include "GeometryTest.hpp"
-#include <arlcore/UnitTestArlCore.h>
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::ARLcore::ut::GeometryTest );
-
-namespace ARLcore
-{
-namespace ut
-{
-
-void GeometryTest::setUp()
-{
-    // Set up context before running a test.
-
-}
-void GeometryTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-
-
-
-void GeometryTest::ReconstructionPolyscopicTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testReconstructionPolyscopic( 6, 10e-10 ) );
-}
-
-
-
-void GeometryTest::SphereCenterEstimationTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testSphereCenterEstimation( 5000, 1e-4 ) );
-}
-
-
-
-void GeometryTest::RigidTransfoTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testRigidTransfo( 1000000, 1e-5 ) );
-}
-
-
-
-void GeometryTest::EpipolarMatchingTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testRegistration3D3DwithoutMatching( 10000, 1e-5 ) );
-}
-
-
-
-
-} //namespace ut
-} //namespace ARLcore
diff --git a/SrcLib/ARLcore/test/tu/src/RegistrationTest.cpp b/SrcLib/ARLcore/test/tu/src/RegistrationTest.cpp
deleted file mode 100644
index 0b7df11..0000000
--- a/SrcLib/ARLcore/test/tu/src/RegistrationTest.cpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Boolean.hpp>
-
-#include "RegistrationTest.hpp"
-#include <arlcore/UnitTestArlCore.h>
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::ARLcore::ut::RegistrationTest );
-
-namespace ARLcore
-{
-namespace ut
-{
-
-void RegistrationTest::setUp()
-{
-    // Set up context before running a test.
-
-}
-void RegistrationTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-
-
-void RegistrationTest::HomographyRegistrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testHomographyRegistration( 10000, 1e-2 ) );
-}
-
-
-
-void RegistrationTest::ProjectiveRegistrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testProjectiveRegistration( 10, 1e-2 ) );
-}
-
-
-
-void RegistrationTest::Registration3D3DTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testRegistration3D3D( 15000, 1e-10 ) );
-}
-
-
-
-void RegistrationTest::ICPRegistrationTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testICPRegistration( 3, 1e-11 ) );
-}
-
-
-
-void RegistrationTest::threeD3DMatchingTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testRegistration3D3D( 15000, 1e-10 ) );
-}
-
-
-
-void RegistrationTest::registration3D3DwithoutMatchingTest()
-{
-    CPPUNIT_ASSERT_EQUAL( true, arlCore::testRegistration3D3DwithoutMatching( 10000, 1e-5 ) );
-}
-
-
-
-
-} //namespace ut
-} //namespace ARLcore
diff --git a/SrcLib/core/fwActivities/CMakeLists.txt b/SrcLib/core/fwActivities/CMakeLists.txt
index d21be97..0accad5 100644
--- a/SrcLib/core/fwActivities/CMakeLists.txt
+++ b/SrcLib/core/fwActivities/CMakeLists.txt
@@ -1,15 +1,5 @@
-
 fwLoadProperties()
 
-fwUseForwardInclude(
-    fwCore
-    fwMedData
-    fwRuntime
-    fwTools
-    )
-
-find_package (Boost COMPONENTS date_time REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
-
 
+find_package (Boost COMPONENTS regex REQUIRED)
+fwLink(${Boost_REGEX_LIBRARY})
diff --git a/SrcLib/core/fwActivities/COPYING b/SrcLib/core/fwActivities/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwActivities/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwActivities/COPYING.LESSER b/SrcLib/core/fwActivities/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwActivities/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwActivities/Properties.cmake b/SrcLib/core/fwActivities/Properties.cmake
index abb6c94..fde61c3 100644
--- a/SrcLib/core/fwActivities/Properties.cmake
+++ b/SrcLib/core/fwActivities/Properties.cmake
@@ -2,6 +2,5 @@
 set( NAME fwActivities )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwData fwDataCamp fwMedData fwRuntime fwTools )
+set( DEPENDENCIES fwCore fwData fwDataCamp fwMath fwMedData fwRuntime fwTools )
 set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwActivities/bin/build.options b/SrcLib/core/fwActivities/bin/build.options
deleted file mode 100644
index cb7ec8c..0000000
--- a/SrcLib/core/fwActivities/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-USE = ['boost', 'boostDateTime']
-LIB = [
-    'fwAtomConversion_0-1',
-    'fwData_0-1',
-    'fwMedData_0-1',
-    'fwRuntime_0-3',
-    'fwDataCamp_0-1',
-    'fwMath_0-1',
-    ]
diff --git a/SrcLib/core/fwActivities/include/fwActivities/IActivityValidator.hpp b/SrcLib/core/fwActivities/include/fwActivities/IActivityValidator.hpp
new file mode 100644
index 0000000..cb08608
--- /dev/null
+++ b/SrcLib/core/fwActivities/include/fwActivities/IActivityValidator.hpp
@@ -0,0 +1,84 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_IACTIVITYVALIDATOR_HPP__
+#define __FWACTIVITIES_IACTIVITYVALIDATOR_HPP__
+
+#include "fwActivities/config.hpp"
+#include "fwActivities/IValidator.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwMedData/ActivitySeries.hpp>
+
+namespace fwMedData
+{
+class ActivitySeries;
+}
+
+namespace fwActivities
+{
+
+/**
+ * @brief Base class for all fwActivities activity validator's classes.
+ *
+ * This validator allows to check if all the required data are valid for the activity.
+ */
+class FWACTIVITIES_CLASS_API IActivityValidator : public ::fwActivities::IValidator
+{
+
+public:
+
+    fwCoreNonInstanciableClassDefinitionsMacro( (IActivityValidator)(::fwActivities::IValidator) );
+
+
+    /// Does nothing.
+    FWACTIVITIES_API virtual ValidationType validate(
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector)currentSelection ) const
+    {
+        ValidationType validation;
+        validation.first  = true;
+        validation.second = "This validator does not validate this selection of data.";
+        return validation;
+    }
+
+    /**
+     * @brief Performs the validation of the given activity data.
+     * @return pair <isValid, errorMsg> : errorMsg is empty if the data are valid else it contains detailed error.
+     */
+    FWACTIVITIES_API virtual ValidationType validate(const CSPTR(::fwMedData::ActivitySeries) &activity ) const = 0;
+
+    /**
+     * @brief Checks if all the required data are present in the activity series.
+     * @return pair <isValid, errorMsg> : errorMsg is empty if the data are valid else it contains the list of missing
+     *         (or not valid) data.
+     */
+    FWACTIVITIES_API ValidationType checkRequirements(const CSPTR(::fwMedData::ActivitySeries) &activity) const;
+
+    /**
+     * @brief Checks if all the activity's AppConfig parameters are valid.
+     *
+     * It checks if the object described with "camp" path are present in the activity.
+     * @return pair <isValid, errorMsg> : errorMsg is empty if the data are valid else it contains the list of missing
+     *         (or not valid) data.
+     */
+    FWACTIVITIES_API ValidationType checkParameters(const CSPTR(::fwMedData::ActivitySeries) &activity) const;
+
+    /**
+     * @brief Calls the object validator if it is defined.
+     * @param object object to validate
+     * @param validatorImpl implementation of the validator to apply (if it is empty, check is assumed as valid).
+     * @return pair <isValid, errorMsg> : errorMsg is empty if the object is valid else it contains the detailed error.
+     * @see ::fwActivities::IObjectValidator
+     */
+    FWACTIVITIES_API ValidationType checkObject(const CSPTR(::fwData::Object) &object,
+                                                const std::string &validatorImpl) const;
+};
+
+} // namespace fwActivities
+
+#endif // __FWACTIVITIES_IACTIVITYVALIDATOR_HPP__
+
diff --git a/SrcLib/core/fwActivities/include/fwActivities/IBuilder.hpp b/SrcLib/core/fwActivities/include/fwActivities/IBuilder.hpp
index aba2680..a5a277d 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/IBuilder.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/IBuilder.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,8 +7,6 @@
 #ifndef __FWACTIVITIES_IBUILDER_HPP__
 #define __FWACTIVITIES_IBUILDER_HPP__
 
-#include <boost/enable_shared_from_this.hpp>
-
 #include <fwCore/base.hpp>
 #include <fwMedData/ActivitySeries.hpp>
 
@@ -32,7 +30,7 @@ namespace fwActivities
 class FWACTIVITIES_CLASS_API IBuilder : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     typedef ::fwActivities::builder::factory::Key Key;
     typedef ::fwMedData::ActivitySeries::ConfigIdType ConfigIdType;
@@ -64,10 +62,10 @@ public :
      * @return specific data ActivitySeries for the specified Activity.
      */
     FWACTIVITIES_API virtual ::fwMedData::ActivitySeries::sptr buildData(
-            const ::fwActivities::registry::ActivityInfo& activityInfo,
-            SPTR(::fwData::Vector) currentSelection ) const = 0;
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector) currentSelection ) const = 0;
 
-protected :
+protected:
 
     FWACTIVITIES_API virtual SPTR(::fwData::Vector) getType( SPTR(::fwData::Vector) currentSelection,
                                                              std::string type ) const;
diff --git a/SrcLib/core/fwActivities/include/fwActivities/IObjectValidator.hpp b/SrcLib/core/fwActivities/include/fwActivities/IObjectValidator.hpp
new file mode 100644
index 0000000..5c091fc
--- /dev/null
+++ b/SrcLib/core/fwActivities/include/fwActivities/IObjectValidator.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_IOBJECTVALIDATOR_HPP__
+#define __FWACTIVITIES_IOBJECTVALIDATOR_HPP__
+
+#include "fwActivities/config.hpp"
+#include "fwActivities/IValidator.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwMedData/ActivitySeries.hpp>
+
+namespace fwData
+{
+class Object;
+}
+
+namespace fwActivities
+{
+
+/**
+ * @brief Base class for all fwActivities data validator's classes.
+ *
+ * This validator works on one type of data. The validated data can be a single data, or a Vector or a Composite
+ * containing multiple data of the same type.
+ */
+class FWACTIVITIES_CLASS_API IObjectValidator : public ::fwActivities::IValidator
+{
+
+public:
+
+    fwCoreNonInstanciableClassDefinitionsMacro( (IObjectValidator)(::fwActivities::IValidator) );
+
+
+    /// Does nothing.
+    FWACTIVITIES_API virtual ValidationType validate(
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector)currentSelection ) const
+    {
+        ValidationType validation;
+        validation.first  = true;
+        validation.second = "This validator does not validate this selection of data.";
+        return validation;
+    }
+
+    /**
+     * @brief Performs the validation of the given data.
+     * @note  This data could be a single data, or a Vector or a Composite of one type of data.
+     */
+    FWACTIVITIES_API virtual ValidationType validate(const CSPTR(::fwData::Object) &currentData ) const = 0;
+
+};
+
+} // namespace fwActivities
+
+#endif // __FWACTIVITIES_IOBJECTVALIDATOR_HPP__
+
diff --git a/SrcLib/core/fwActivities/include/fwActivities/IValidator.hpp b/SrcLib/core/fwActivities/include/fwActivities/IValidator.hpp
index 1bee029..a5555a4 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/IValidator.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/IValidator.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,16 +7,13 @@
 #ifndef __FWACTIVITIES_IVALIDATOR_HPP__
 #define __FWACTIVITIES_IVALIDATOR_HPP__
 
-#include <boost/enable_shared_from_this.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwMedData/ActivitySeries.hpp>
-
+#include "fwActivities/config.hpp"
+#include "fwActivities/registry/Activities.hpp"
 #include "fwActivities/validator/factory/new.hpp"
 #include "fwActivities/validator/registry/detail.hpp"
-#include "fwActivities/registry/Activities.hpp"
 
-#include "fwActivities/config.hpp"
+#include <fwCore/base.hpp>
+#include <fwMedData/ActivitySeries.hpp>
 
 namespace fwData
 {
@@ -32,7 +29,7 @@ namespace fwActivities
 class FWACTIVITIES_CLASS_API IValidator : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     /**
      * @brief Defines validation result of an activity.
@@ -56,7 +53,7 @@ public :
         Registrar(std::string functorKey)
         {
             ::fwActivities::validator::registry::get()->addFactory( functorKey,
-                                                                  &::fwActivities::validator::factory::New<T> );
+                                                                    &::fwActivities::validator::factory::New<T> );
         }
     };
 
@@ -72,8 +69,8 @@ public :
      * @see IValidator::ValidationType
      */
     FWACTIVITIES_API virtual ValidationType validate(
-            const ::fwActivities::registry::ActivityInfo& activityInfo,
-            SPTR(::fwData::Vector) currentSelection ) const = 0;
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector) currentSelection ) const = 0;
 
 };
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeries.hpp b/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeries.hpp
index a36cd36..1d6d2eb 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeries.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeries.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWACTIVITIES_BUILDER_ACTIVITYSERIES_HPP_
-#define _FWACTIVITIES_BUILDER_ACTIVITYSERIES_HPP_
+#ifndef __FWACTIVITIES_BUILDER_ACTIVITYSERIES_HPP__
+#define __FWACTIVITIES_BUILDER_ACTIVITYSERIES_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -48,13 +48,13 @@ public:
      * @return ActivitySeries or null
      */
     FWACTIVITIES_API virtual ::fwMedData::ActivitySeries::sptr buildData(
-            const ::fwActivities::registry::ActivityInfo& activityInfo,
-            SPTR(::fwData::Vector) currentSelection ) const;
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector) currentSelection ) const;
 };
 
 } // namespace builder
 } // namespace fwActivities
 
-#endif /*_FWACTIVITIES_BUILDER_ACTIVITYSERIES_HPP_*/
+#endif /*__FWACTIVITIES_BUILDER_ACTIVITYSERIES_HPP__*/
 
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeriesInitData.hpp b/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeriesInitData.hpp
index 77f1c07..587effb 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeriesInitData.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/builder/ActivitySeriesInitData.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -42,8 +42,8 @@ public:
      * @see ::fwActivities::builder::ActivitySeries::buildData
      */
     FWACTIVITIES_API virtual ::fwMedData::ActivitySeries::sptr buildData(
-            const ::fwActivities::registry::ActivityInfo& activityInfo,
-            SPTR(::fwData::Vector) currentSelection ) const;
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector) currentSelection ) const;
 };
 
 } // namespace builder
diff --git a/SrcLib/core/fwActivities/include/fwActivities/builder/factory/new.hpp b/SrcLib/core/fwActivities/include/fwActivities/builder/factory/new.hpp
index 9c5a180..80bd26d 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/builder/factory/new.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/builder/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -35,17 +34,19 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwActivities::builder::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwActivities::builder::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 FWACTIVITIES_API SPTR( ::fwActivities::IBuilder ) New( const ::fwActivities::builder::registry::KeyType & classname );
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) builder = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) builder = std::make_shared< CLASSNAME >( Key() );
     return builder;
 }
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/builder/registry/detail.hpp b/SrcLib/core/fwActivities/include/fwActivities/builder/registry/detail.hpp
index 6da4c4e..191641b 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/builder/registry/detail.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/builder/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwActivities::IBuilder) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwActivities::IBuilder) (), KeyType > Type;
 
 FWACTIVITIES_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/builder/registry/macros.hpp b/SrcLib/core/fwActivities/include/fwActivities/builder/registry/macros.hpp
index 6d435d2..727adba 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/builder/registry/macros.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/builder/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWACTIVITIES_BUILDER_REGISTRY_MACRO_HPP__
-#define __FWACTIVITIES_BUILDER_REGISTRY_MACRO_HPP__
+#ifndef __FWACTIVITIES_BUILDER_REGISTRY_MACROS_HPP__
+#define __FWACTIVITIES_BUILDER_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/cat.hpp>
 
@@ -27,4 +27,4 @@ namespace registry
 } // end namespace builder
 } // end namespace fwActivities
 
-#endif /*__FWACTIVITIES_BUILDER_REGISTRY_MACRO_HPP__*/
+#endif /*__FWACTIVITIES_BUILDER_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwActivities/include/fwActivities/config.hpp b/SrcLib/core/fwActivities/include/fwActivities/config.hpp
deleted file mode 100644
index af61da0..0000000
--- a/SrcLib/core/fwActivities/include/fwActivities/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2013.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
-
-
-#ifndef _FWACTIVITIES_CONFIG_HPP_
-#define _FWACTIVITIES_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWACTIVITIES_EXPORTS
-            #define FWACTIVITIES_API __declspec(dllexport)
-        #else
-            #define FWACTIVITIES_API __declspec(dllimport)
-        #endif
-
-        #define FWACTIVITIES_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWACTIVITIES_EXPORTS
-            #define FWACTIVITIES_API __attribute__ ((visibility("default")))
-            #define FWACTIVITIES_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWACTIVITIES_API __attribute__ ((visibility("hidden")))
-            #define FWACTIVITIES_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWACTIVITIES_API
-        #define FWACTIVITIES_CLASS_API
-
-    #endif
-
-#endif //FWACTIVITIES_API
-
diff --git a/SrcLib/core/fwActivities/include/fwActivities/namespace.hpp b/SrcLib/core/fwActivities/include/fwActivities/namespace.hpp
index 51cce1f..e51e0fa 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/namespace.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,29 +13,16 @@
 namespace fwActivities
 {
 
-/**
- * @brief       The namespace fwActivities::builder contains the base interface for data ActivitySeries builder.
- * @namespace   fwActivities::builder
- * @date        2013.
- *
- */
+/// The namespace fwActivities::builder contains the base interface for data ActivitySeries builder.
 namespace builder
 {
 
-/**
- * @brief       Contains fwActivities::builder::registry details
- * @namespace   fwActivities::builder::registry
- * @date        2013
- */
+/// Contains fwActivities::builder::registry details
 namespace registry
 {
 } // namespace registry
 
-/**
- * @brief       Contains fwActivities::builder::factory utilities
- * @namespace   fwActivities::builder::factory
- * @date        2013
- */
+/// Contains fwActivities::builder::factory utilities
 namespace factory
 {
 } // namespace factory
@@ -45,27 +32,153 @@ namespace factory
 namespace validator
 {
 
-/**
- * @brief       Contains fwActivities::validator::registry details
- * @namespace   fwActivities::validator::registry
- * @date        2013
- */
+/// Contains fwActivities::validator::registry details
 namespace registry
 {
 } // namespace registry
 
 
-/**
- * @brief       Contains fwActivities::validator::factory utilities
- * @namespace   fwActivities::validator::factory
- * @date        2013
- */
+/// Contains fwActivities::validator::factory utilities
 namespace factory
 {
 } // namespace factory
 
 } // namespace validator
 
+/**
+ * @page Activity Activity configuration
+ *
+ * An activity is defined by the extension "::fwActivities::registry::Activities". It is used to launch an
+ * AppConfig with the selected data, it will create a new data ::fwMedData::ActivitySeries that inherits from a
+ * ::fwMedData::Series.
+ *
+ * The service ::activities::action::SActivityLauncher allows to launch an activity. Its role is to create the specific
+ * Activity associated with the selected data.
+ *
+ * This action should be followed by the service ::guiQt::editor::DynamicView : this service listens the action signals
+ * and launchs the activity in a new tab.
+ *
+ * - ::activities::action::SActivityLauncher uses the selected data to generate the activity.
+ * - ::guiQt::editor::DynamicView  displays the activity in the application.
+ * - ::fwData::Vector contains the set of selected data .
+ *
+ * @code{.xml}
+     <extension implements="::fwActivities::registry::Activities">
+         <id>myActivityId</id>
+         <title>3D Visu</title>
+         <desc>Activity description ...</desc>
+         <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png</icon>
+         <requirements>
+            <requirement name="param1" type="::fwData::Image" /> <!-- defaults : minOccurs = 1, maxOccurs = 1-->
+            <requirement name="param2" type="::fwData::Mesh" maxOccurs="3" >
+                <key>Item1</key>
+                <key>Item2</key>
+                <key>Item3</key>
+            </requirement>
+            <requirement name="param3" type="::fwData::Mesh" maxOccurs="*" container="vector" />
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="0" maxOccurs="2" />
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1">
+                 <desc>Description of the required data....</desc>
+                 <validator>::fwActivities::validator::ImageProperties</validator>
+            </requirement>
+            <requirement name="transformationMatrix" type="::fwData::TransformationMatrix3D" minOccurs="0" maxOccurs="1" create="true" />
+             <!-- ...-->
+         </requirements>
+         <builder>::fwActivities::builder::ActivitySeries</builder>
+         <validator>::fwActivities::validator::ImageProperties</validator><!-- pour fw4spl_0.9.2 -->
+         <appConfig id="myAppConfigId">
+            <parameters>
+                <parameter replace="registeredImageUid" by="@values.param1" />
+                <parameter replace="orientation" by="frontal" />
+                <!-- ...-->
+            </parameters>
+         </appConfig>
+     </extension>
+   @endcode
+ *
+ * The activity parameters are (in this order):
+ *
+ * - \b id: it is the activity unique identifier.
+ * - \b title: it is the activity title that will be displayed on the tab.
+ * - \b desc: it is the description of the activity. It is displayed by the SActivityLauncher when several activity can
+ *   be launched with the selected data.
+ * - \b icon: it is the path to the activity icon. It is displayed by the SActivityLauncher when several activity can be
+ *   launched with the selected data.
+ * - \b requirements: it is the list of the data required to launch the activity.
+ *     - \b requirement: a required data.
+ *         - \b name: key used to add the data in the activity Composite.
+ *         - \b type: the data type (ex: ``::fwMedData::ImageSeries``).
+ *         - \b minOccurs (optional, "1" by default): the minimum number of occurrences of this type of object in the
+ *           vector.
+ *         - \b maxOccurs (optional, "1" by default): the maximum number of occurrences of this type of object in the
+ *           vector.
+ *         - \b container (optional, "vector" or "composite", default: composite): container used to contain the data if
+ *           minOccurs or maxOccurs are not "1". if the container is "composite", you need to specify the "key" of each
+ *           object in the composite.
+ *         - \b create (optional, default "false"): if true and (minOccurrs == 0 && maxOccurs == 1), the data will be
+ *           automatically created if it is not present.
+ *         - \b desc (optional): description of the parameter
+ *         - \b validator (optional): validator to check if the associated data is well formed (inherited of
+ *           ::fwAtivities::IObjectValidator)
+ * - \b builder: implementation of the activity builder. The default builder is
+ *   ``::fwActivities::builder::ActivitySeries`` : it creates the ``::fwMedData::ActivitySeries`` and adds the required
+ *   data in its composite with de defined key.
+ *   The builder ``::fwActivities::builder::ActivitySeriesInitData`` allows, in addition to what the default builder
+ *   does, to create data when minOccurs == 0 et maxOccurs == 0.
+ * - \b validators (optional):  it defines the list of validator. If you need only one validator, you don't need the
+ *   "validators" tag (only "validator").
+ * - \b validator (optional): it allows to validate if the selected required object are correct for the activity.
+ *   For example, the validator ``::fwActivities::validator::ImageProperties`` checks that all the selected images
+ *   have the same size, spacing and origin.
+ * - \b appConfig: it defines the AppConfig to launch and its parameters
+ * - \b id: identifier of the AppConfig
+ * - \b parameters: list of the parameters required by the AppConfig
+ *    - \b parameter: defines a parameter
+ *          - \b replace: name of the parameter as defined in the AppConfig
+ *          - \b by: defines the string that will replace the parameter name. It should be a simple string (ex.
+ *               frontal) or define a sesh@ path (ex. @values.myImage). The root object of the sesh@ path if the
+ *               composite contained in the ActivitySeries.
+ *
+ * @section Validators Validators
+ *
+ * There is three types of validator :
+ *
+ * @subsection prebuild Pre-build validator
+ *
+ * This type of validators checks if the current selection of data is correct to build the activity. It inherits of
+ * ::fwActivities::IValidator and must implement the methods:
+ *
+ * @code {.cpp}
+   ValidationType validate(
+           const ::fwActivities::registry::ActivityInfo& activityInfo,
+           SPTR(::fwData::Vector) currentSelection ) const;
+   @endcode
+ *
+ * @subsection activity Activity validator
+ *
+ * This type of validator checks if the ::fwMedData::ActivitySeries is correct to launch its associated activity.
+ * It inherits of ::fwActivities::IActivityValidator and must implement the method:
+ *
+ * @code {.cpp}
+   ValidationType validate(const CSPTR(::fwMedData::ActivitySeries) &activity ) const;
+   @endcode
+ *
+ * The validator ::fwActivities::validator::DefaultActivity is applied if no other validator is defined. It checks if
+ * all the required objets are present in the series and if all the parameters delivered to the AppConfig are present.
+ *
+ * It provides some method useful to implement your own validator.
+ *
+ * @subsection object Object validator
+ *
+ * This type of validator checks if the required object is well formed. It can check a single object or a Vector or
+ * a Composite containing one type of object. It inherits of ::fwActivities::IObjectValidator and must implement the
+ * method:
+ *
+ * @code {.cpp}
+   ValidationType validate(const CSPTR(::fwData::Object) &currentData ) const;
+   @endcode
+ */
+
 } // namespace fwActivities
 
 #endif /* __FWACTIVITIES_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwActivities/include/fwActivities/registry/Activities.hpp b/SrcLib/core/fwActivities/include/fwActivities/registry/Activities.hpp
index af63955..8c59a07 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/registry/Activities.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/registry/Activities.hpp
@@ -1,10 +1,15 @@
-#ifndef _FWACTIVITIES_REGISTRY_ACTIVITIES_HPP_
-#define _FWACTIVITIES_REGISTRY_ACTIVITIES_HPP_
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_REGISTRY_ACTIVITIES_HPP__
+#define __FWACTIVITIES_REGISTRY_ACTIVITIES_HPP__
 
 #include <map>
 #include <string>
 
-#include <boost/make_shared.hpp>
 #include <boost/property_tree/ptree.hpp>
 
 #include <fwCore/BaseObject.hpp>
@@ -36,7 +41,9 @@ typedef ::boost::property_tree::ptree ConfigType;
 
 struct FWACTIVITIES_CLASS_API ActivityAppConfigParam
 {
-    ActivityAppConfigParam(){};
+    ActivityAppConfigParam()
+    {
+    }
     FWACTIVITIES_API ActivityAppConfigParam(const ConfigType &config);
 
     bool isSeshat() const
@@ -52,7 +59,9 @@ struct FWACTIVITIES_CLASS_API ActivityAppConfig
 {
     typedef std::vector< ActivityAppConfigParam > ActivityAppConfigParamsType;
 
-    ActivityAppConfig(){};
+    ActivityAppConfig()
+    {
+    }
     FWACTIVITIES_API ActivityAppConfig(const ConfigType &config);
 
     std::string id;
@@ -61,7 +70,9 @@ struct FWACTIVITIES_CLASS_API ActivityAppConfig
 
 struct FWACTIVITIES_CLASS_API ActivityRequirementKey
 {
-    ActivityRequirementKey(){};
+    ActivityRequirementKey()
+    {
+    }
     FWACTIVITIES_API ActivityRequirementKey(const ConfigType &config);
 
     std::string key;
@@ -70,29 +81,66 @@ struct FWACTIVITIES_CLASS_API ActivityRequirementKey
 
 struct FWACTIVITIES_CLASS_API ActivityRequirement
 {
-    ActivityRequirement(){};
+    ActivityRequirement()
+    {
+    }
     FWACTIVITIES_API ActivityRequirement(const ConfigType &config);
 
     typedef std::vector< ActivityRequirementKey > KeyType;
 
-    std::string name;
-    std::string type;
-    unsigned int minOccurs;
-    unsigned int maxOccurs;
-    KeyType keys;
+    std::string name; /// parameter name
+    std::string type; /// parameter type (ie. ::fwMedData::ImageSeries)
+    std::string container; /// data container if maxOccurs > 1 ("vector" or "composite", default: "composite")
+    std::string description; /// parameter description
+    std::string validator;  /// Implementation of data validator
+    unsigned int minOccurs; /// minimum number of data required
+    unsigned int maxOccurs; /// maximum number of data required
+    bool create; /// True if the data must be created if it is not present (only if minOccurs = 0 and maxOccurs = 1)
+    KeyType keys; /// Parameter key if the container == "composite"
 };
 
 /**
  * @brief Holds Activities configuration.
  *
- * Example :
- * @verbatim
+ * Activity parameters are (in this order) :
+ * - \b id : activity id
+ * - \b title : activity title (displayed in tab if tabinfo isn't specified)
+ * - \b tabinfo : activity title (displayed in tab)
+ * - \b desc : activity description
+ * - \b icon : path to the icon activity
+ * - \b requirements : required elements to launch specified activity (must be present in vector selection)
+ *   - \b requirement : a required element
+ *     - \b name : element key in ActivitySeries composite
+ *     - \b type : object type
+ *     - \b minOccurs (optional, default value = 1) : minimal number of object (with specified type) in vector
+ *     - \b maxOccurs (optional, default value = 1) : maximal number of object (with specified type) in vector
+ *       - \b key : if maxOccurs > 1, then you must defined keys for each objects
+ *     - \b container (optional, default value = composite) : container type (vector or composite) to store required
+ *       parameters
+ *     - \b create (optional) : true if the data must be created if it is not present (only available if minOccurs = 0
+ *       and maxOccurs = 1)
+ *     - \b desc (optional) : description of the requirement
+ *     - \b validator (optional) : validate the current data
+ * - \b builder (optional): implementation of builder associate to the activity, the builder creates ActivitySeries.
+ *   - default builder is ::fwActivities::builder::ActivitySeries
+ * - \b validator (optional): check if specified activity can be launched with selected objects
+ * - \b validators (optional) : defines validators implementations instantiated to validate activity launch
+ *   -  \b validator : implementation name for a validator
+ * - \b appConfig : defined AppConfig launched by this activity
+ *   - id : AppConfig id
+ *   - \b parameters : parameters required by the AppConfig
+ *     - \b parameter : defined an AppConfig parameter
+ *       - replace : parameter name to replace in AppConfig
+ *       - by : value to use for replacement (can be a string or sesh@ path)
+ *
+ * Example of activity configuration:
+ * @code{.xml}
     <extension implements="::fwActivities::registry::Activities">
         <id>3DVisualization</id>
         <title>3D Visu</title>
         <tabinfo>3D MPR - !values.modelSeries.patient.name</tabinfo>
         <desc>Activity description ...</desc>
-        <icon>Bundles/media_0-1/icons/icon-3D.png</icon>
+        <icon>@BUNDLE_PREFIX@/media_0-1/icons/icon-3D.png</icon>
         <requirements>
             <requirement name="param1" type="::fwData::Image" /> <!-- defaults : minOccurs = 1, maxOccurs = 1-->
             <requirement name="param2" type="::fwData::Mesh" maxOccurs="3" >
@@ -100,12 +148,19 @@ struct FWACTIVITIES_CLASS_API ActivityRequirement
                 <key>Item2</key>
                 <key>Item3</key>
             </requirement>
-            <requirement name="param3" type="::fwData::Mesh" maxOccurs="*" />
+            <requirement name="param3" type="::fwData::Mesh" maxOccurs="*" container="vector" />
             <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="0" maxOccurs="2" />
-            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1" />
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="1" maxOccurs="1">
+                 <desc>Description of the required data....</desc>
+                 <validator>::fwActivities::validator::ImageProperties</validator>
+            </requirement>
+            <requirement name="transformationMatrix" type="::fwData::TransformationMatrix3D" minOccurs="0" maxOccurs="1" create="true" />
             <!--# ...-->
         </requirements>
-        <builder impl="::fwMedData::ActivitySeriesBuilder" />
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <validators>
+            <validator>::fwActivities::validator::RelatedStudy</validator>
+        </validators>
         <appConfig id="3DVisualization">
             <parameters>
                 <parameter replace="registeredImageUid" by="@values.param1" />
@@ -114,7 +169,7 @@ struct FWACTIVITIES_CLASS_API ActivityRequirement
             </parameters>
         </appConfig>
     </extension>
- * @endverbatim
+ * @endcode
  */
 struct FWACTIVITIES_CLASS_API ActivityInfo
 {
@@ -123,7 +178,9 @@ struct FWACTIVITIES_CLASS_API ActivityInfo
     typedef std::map< std::string, MinMaxType > RequirementsMinMaxCount;
     typedef std::map< std::string, unsigned int > DataCountType;
 
-    ActivityInfo(){};
+    ActivityInfo()
+    {
+    }
 
     FWACTIVITIES_API ActivityInfo(const SPTR(::fwRuntime::Extension) &ext);
 
@@ -136,21 +193,25 @@ struct FWACTIVITIES_CLASS_API ActivityInfo
     std::string tabInfo;
     RequirementsType requirements;
     std::string builderImpl;
-    std::string validatorImpl;
+    std::string bundleId; ///< Identifier of the bundle containing the activity
+    std::string bundleVersion; ///< Version of the bundle containing the activity
+
+    /// Validator implementations
+    std::vector< std::string > validatorsImpl;
+
     ActivityAppConfig appConfig;
 
-protected:
+    protected:
 
-    RequirementsMinMaxCount m_requirementCount;
+        RequirementsMinMaxCount m_requirementCount;
 };
 
 
 /**
- * @class Activities
  * @brief This class allows to register all the configuration parameters which has the point extension
  *        "::activityReg::registry::Activities".
  *
- * @date 2012
+ * @see ::fwActivities::registry::ActivityInfo
  */
 class FWACTIVITIES_CLASS_API Activities : public ::fwCore::BaseObject
 {
@@ -158,7 +219,7 @@ class FWACTIVITIES_CLASS_API Activities : public ::fwCore::BaseObject
 public:
     typedef std::vector< ActivityInfo > ActivitiesType;
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Activities)(::fwCore::BaseObject), (()), new Activities ) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Activities)(::fwCore::BaseObject), (()), new Activities );
 
     /// Return the default global instance of Activities
     FWACTIVITIES_API static Activities::sptr getDefault();
@@ -217,7 +278,7 @@ public:
      */
     FWACTIVITIES_API void clearRegistry();
 
-protected :
+protected:
 
     typedef std::map< std::string, ActivityInfo > Registry;
 
@@ -240,6 +301,6 @@ protected :
 
 } // namespace fwActivities
 
-#endif // _FWACTIVITIES_REGISTRY_ACTIVITIES_HPP_
+#endif // __FWACTIVITIES_REGISTRY_ACTIVITIES_HPP__
 
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/registry/ActivityMsg.hpp b/SrcLib/core/fwActivities/include/fwActivities/registry/ActivityMsg.hpp
new file mode 100644
index 0000000..7dacb6e
--- /dev/null
+++ b/SrcLib/core/fwActivities/include/fwActivities/registry/ActivityMsg.hpp
@@ -0,0 +1,114 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_REGISTRY_ACTIVITYMSG_HPP__
+#define __FWACTIVITIES_REGISTRY_ACTIVITYMSG_HPP__
+
+#include "fwActivities/config.hpp"
+#include "fwActivities/registry/Activities.hpp"
+
+#include <fwMedData/ActivitySeries.hpp>
+
+namespace fwActivities
+{
+
+namespace registry
+{
+
+/**
+ * @class ActivityMsg
+ * @brief Activity information sent by signal to launch new activities in a tab.
+ */
+class FWACTIVITIES_CLASS_API ActivityMsg
+{
+
+public:
+
+    typedef ::fwActivities::registry::ActivityAppConfig::ActivityAppConfigParamsType ParametersType;
+    typedef std::map<std::string, std::string> ReplaceMapType;
+
+
+    FWACTIVITIES_API ActivityMsg(const ::fwMedData::ActivitySeries::sptr &series,
+                                 const ::fwActivities::registry::ActivityInfo & info,
+                                 const ParametersType& parameters);
+
+    FWACTIVITIES_API virtual ~ActivityMsg()
+    {
+    }
+
+    /// Return if the activity can be closed
+    bool isClosable() const
+    {
+        return m_closable;
+    }
+
+    /// Return activity title
+    const std::string &getTitle() const
+    {
+        return m_title;
+    }
+
+    /// Return tab identifier
+    const std::string &getTabID() const
+    {
+        return m_tabID;
+    }
+
+    /// Return appConfig identifier
+    const std::string &getAppConfigID() const
+    {
+        return m_appConfigID;
+    }
+
+    /// Return tab information
+    const std::string &getTabInfo() const
+    {
+        return m_tabInfo;
+    }
+
+    /// Return activity icon path
+    const std::string &getIconPath() const
+    {
+        return m_iconPath;
+    }
+
+    /// Return tooltip
+    const std::string &getToolTip() const
+    {
+        return m_tooltip;
+    }
+
+    /// Return activity series
+    const ::fwMedData::ActivitySeries::sptr &getActivitySeries() const
+    {
+        return m_series;
+    }
+
+    /// Return the map of the string association to replace in config
+    const ReplaceMapType & getReplaceMap() const
+    {
+        return m_replaceMap;
+    }
+
+private:
+
+    bool m_closable; /// Flag if activity is closable.
+    std::string m_title; ///< Activity title
+    std::string m_tabID; ///< Tab identifier
+    std::string m_appConfigID; ///< AppConfig id
+    std::string m_tabInfo; ///< tab information
+    std::string m_iconPath; ///< icon path
+    std::string m_tooltip; ///< tab tooltip
+    ::fwMedData::ActivitySeries::sptr m_series; ///< activity series
+    ReplaceMapType m_replaceMap; ///< map containing string to replace in activity configuration.
+};
+
+} // namespace registry
+
+} // namespace fwActivities
+
+#endif // __FWACTIVITIES_REGISTRY_ACTIVITYMSG_HPP__
+
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/DefaultActivity.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/DefaultActivity.hpp
new file mode 100644
index 0000000..143d7ff
--- /dev/null
+++ b/SrcLib/core/fwActivities/include/fwActivities/validator/DefaultActivity.hpp
@@ -0,0 +1,48 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_VALIDATOR_DEFAULTACTIVITY_HPP__
+#define __FWACTIVITIES_VALIDATOR_DEFAULTACTIVITY_HPP__
+
+#include "fwActivities/config.hpp"
+#include "fwActivities/IActivityValidator.hpp"
+
+#include <fwCore/base.hpp>
+
+namespace fwActivities
+{
+namespace validator
+{
+
+/**
+ * @brief Defines a validator which checks that activity requirements are valid.
+ *
+ * It checks if all the required data are present and if the appConfig parameters are found.
+ */
+class FWACTIVITIES_CLASS_API DefaultActivity : public ::fwActivities::IActivityValidator
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (DefaultActivity)(::fwActivities::IActivityValidator),
+                                            (()),
+                                            ::fwActivities::validator::factory::New< DefaultActivity > );
+
+
+    /// Constructor. Do nothing.
+    FWACTIVITIES_API DefaultActivity(::fwActivities::IValidator::Key key);
+
+    /// Destructor. Do nothing.
+    FWACTIVITIES_API virtual ~DefaultActivity();
+
+    /// Checks if all the required data are present and if the appConfig parameters are found.
+    FWACTIVITIES_API virtual IValidator::ValidationType validate(
+        const CSPTR(::fwMedData::ActivitySeries) &activitySeries ) const;
+};
+
+} // namespace validator
+} // namespace fwActivities
+
+#endif // __FWACTIVITIES_VALIDATOR_DEFAULTACTIVITY_HPP__
+
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/ImageProperties.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/ImageProperties.hpp
index d366c9f..fbe1ebd 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/validator/ImageProperties.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/validator/ImageProperties.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,11 +7,10 @@
 #ifndef __FWACTIVITIES_VALIDATOR_IMAGEPROPERTIES_HPP__
 #define __FWACTIVITIES_VALIDATOR_IMAGEPROPERTIES_HPP__
 
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include "fwActivities/IValidator.hpp"
 #include "fwActivities/config.hpp"
+#include "fwActivities/IObjectValidator.hpp"
+
+#include <fwCore/base.hpp>
 
 namespace fwActivities
 {
@@ -22,10 +21,10 @@ namespace validator
  * @brief Defines a validator which checks that properties of given images are the same.
  * @class ImageProperties.
  */
-class FWACTIVITIES_CLASS_API ImageProperties : public ::fwActivities::IValidator
+class FWACTIVITIES_CLASS_API ImageProperties : public ::fwActivities::IObjectValidator
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ImageProperties)(::fwActivities::IValidator),
+    fwCoreClassDefinitionsWithFactoryMacro( (ImageProperties)(::fwActivities::IObjectValidator),
                                             (()),
                                             ::fwActivities::validator::factory::New< ImageProperties > );
 
@@ -37,11 +36,19 @@ public:
     FWACTIVITIES_API virtual ~ImageProperties();
 
     /**
+     * @brief Validates if the given images have the same properties (origin, spacing, ...)
      * @see ::fwActivities::IValidator::validate
      */
     FWACTIVITIES_API virtual IValidator::ValidationType validate(
-            const ::fwActivities::registry::ActivityInfo& activityInfo,
-            SPTR(::fwData::Vector) currentSelection ) const;
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector) currentSelection ) const;
+
+    /**
+     * @brief Validates if the given images have the same properties (origin, spacing, ...)
+     * @note Given object must be a Vector or Composite of ImageSeries (or images)
+     * @see ::fwActivities::IValidator::validate
+     */
+    FWACTIVITIES_API virtual IValidator::ValidationType validate(const CSPTR(::fwData::Object) &currentObject ) const;
 };
 
 } // namespace validator
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/RelatedStudy.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/RelatedStudy.hpp
index bc74bc2..c3e26fc 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/validator/RelatedStudy.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/validator/RelatedStudy.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -40,8 +40,8 @@ public:
      * @see ::fwActivities::IValidator::validate
      */
     FWACTIVITIES_API virtual IValidator::ValidationType validate(
-            const ::fwActivities::registry::ActivityInfo& activityInfo,
-            SPTR(::fwData::Vector) currentSelection ) const;
+        const ::fwActivities::registry::ActivityInfo& activityInfo,
+        SPTR(::fwData::Vector) currentSelection ) const;
 };
 
 } // namespace validator
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/factory/new.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/factory/new.hpp
index 72c20be..8b3316e 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/validator/factory/new.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/validator/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -35,17 +34,20 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwActivities::validator::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwActivities::validator::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
-FWACTIVITIES_API SPTR( ::fwActivities::IValidator ) New( const ::fwActivities::validator::registry::KeyType & classname );
+FWACTIVITIES_API SPTR( ::fwActivities::IValidator ) New( const ::fwActivities::validator::registry::KeyType &
+                                                         classname );
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) validator = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) validator = std::make_shared< CLASSNAME >( Key() );
     return validator;
 }
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/registry/detail.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/registry/detail.hpp
index eecf4af..d3488c3 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/validator/registry/detail.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/validator/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwActivities::IValidator) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwActivities::IValidator) (), KeyType > Type;
 
 FWACTIVITIES_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwActivities/include/fwActivities/validator/registry/macros.hpp b/SrcLib/core/fwActivities/include/fwActivities/validator/registry/macros.hpp
index 9b11516..fa4439f 100644
--- a/SrcLib/core/fwActivities/include/fwActivities/validator/registry/macros.hpp
+++ b/SrcLib/core/fwActivities/include/fwActivities/validator/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWACTIVITIES_VALIDATOR_REGISTRY_MACRO_HPP__
-#define __FWACTIVITIES_VALIDATOR_REGISTRY_MACRO_HPP__
+#ifndef __FWACTIVITIES_VALIDATOR_REGISTRY_MACROS_HPP__
+#define __FWACTIVITIES_VALIDATOR_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/cat.hpp>
 
@@ -27,4 +27,4 @@ namespace registry
 } // end namespace validator
 } // end namespace fwActivities
 
-#endif /*__FWACTIVITIES_VALIDATOR_REGISTRY_MACRO_HPP__*/
+#endif /*__FWACTIVITIES_VALIDATOR_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwActivities/src/fwActivities/IActivityValidator.cpp b/SrcLib/core/fwActivities/src/fwActivities/IActivityValidator.cpp
new file mode 100644
index 0000000..cd29e6c
--- /dev/null
+++ b/SrcLib/core/fwActivities/src/fwActivities/IActivityValidator.cpp
@@ -0,0 +1,275 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwActivities/IActivityValidator.hpp"
+#include "fwActivities/IObjectValidator.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+
+namespace fwActivities
+{
+
+//------------------------------------------------------------------------------
+
+IValidator::ValidationType IActivityValidator::checkRequirements(const ::fwMedData::ActivitySeries::csptr &activity)
+const
+{
+    IValidator::ValidationType validation;
+    validation.first  = true;
+    validation.second = "";
+
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(activity->getActivityConfigId());
+
+    ::fwData::Composite::sptr composite = activity->getData();
+
+    for (::fwActivities::registry::ActivityRequirement req: info.requirements)
+    {
+        if ((req.minOccurs == 1 && req.maxOccurs == 1) ||
+            (req.minOccurs == 0 && req.maxOccurs == 0) ||
+            req.create)          // One object is required
+        {
+            ::fwData::Object::sptr obj = composite->at< ::fwData::Object >(req.name);
+            if (!obj)
+            {
+                validation.first   = false;
+                validation.second += "\n - The parameter '" + req.name + "' is required but is not defined.";
+            }
+            else if (obj->getClassname() != req.type)
+            {
+                validation.first   = false;
+                validation.second += "\n - The parameter '" + req.name + "' must be a '" + req.type + "'.";
+            }
+            else
+            {
+                IValidator::ValidationType val = this->checkObject(obj, req.validator);
+                if (!val.first)
+                {
+                    validation.first   = false;
+                    validation.second += "\n - The parameter '" + req.name + "' is not valid: " + val.second;
+                }
+            }
+        }
+        else if (req.container == "vector")
+        {
+            ::fwData::Vector::sptr vector = composite->at< ::fwData::Vector >(req.name);
+            if (!vector)
+            {
+                validation.first   = false;
+                validation.second += "\n - The parameter '" + req.name + "' must be a Vector of '" + req.type + "'.";
+            }
+            else
+            {
+                unsigned int nbObj = static_cast<unsigned int >(vector->size());
+                if (nbObj < req.minOccurs)
+                {
+                    validation.first   = false;
+                    validation.second += "\n - The parameter '" + req.name + "' must contain at least " +
+                                         std::to_string(req.minOccurs) + " objects.";
+                }
+                else if (nbObj > req.maxOccurs)
+                {
+                    validation.first   = false;
+                    validation.second += "\n - The parameter '" + req.name + "' must contain at most " +
+                                         std::to_string(req.maxOccurs) + " objects.";
+                }
+                else
+                {
+                    bool isValid = true;
+                    for (::fwData::Object::sptr obj : *vector)
+                    {
+                        if (!obj)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name +
+                                                 "' must contain valid objects of type '" + req.type + "'.";
+                            isValid = false;
+                        }
+                        if (obj->getClassname() != req.type)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name +
+                                                 "' must contain only objects of type '" + req.type + "'.";
+                            isValid = false;
+                        }
+                    }
+                    if (isValid)
+                    {
+                        IValidator::ValidationType val = this->checkObject(vector, req.validator);
+                        if (!val.first)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name + "' is not valid: " + val.second;
+                        }
+                    }
+                }
+            }
+        }
+        else // container == composite
+        {
+            ::fwData::Composite::sptr currentComposite = composite->at< ::fwData::Composite >(req.name);
+            if (!currentComposite)
+            {
+                validation.first   = false;
+                validation.second += "\n - The parameter '" + req.name + "' must be a Composite of '" +
+                                     req.type + "'.";
+            }
+            else
+            {
+                unsigned int nbObj = static_cast<unsigned int>(currentComposite->size());
+                if (nbObj < req.minOccurs)
+                {
+                    validation.first   = false;
+                    validation.second += "\n - The parameter '" + req.name + "' must contain at least " +
+                                         std::to_string(req.minOccurs) + " objects.";
+                }
+                else if (nbObj > req.maxOccurs)
+                {
+                    validation.first   = false;
+                    validation.second += "\n - The parameter '" + req.name + "' must contain at most " +
+                                         std::to_string(req.minOccurs) + " objects.";
+                }
+                else
+                {
+                    bool isValid = true;
+
+                    for (auto elt : *currentComposite)
+                    {
+                        std::string key = elt.first;
+                        ::fwData::Object::sptr obj = elt.second;
+                        ::fwActivities::registry::ActivityRequirementKey reqKey;
+                        bool keyIsFound = false;
+                        for (::fwActivities::registry::ActivityRequirementKey keyElt: req.keys)
+                        {
+                            if (key == keyElt.key)
+                            {
+                                reqKey     = keyElt;
+                                keyIsFound = true;
+                            }
+                        }
+                        if (!keyIsFound)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name +
+                                                 "' has an invalid key : '" + key + "'.";
+                            isValid = false;
+
+                        }
+                        else if (!obj)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name +
+                                                 "' must contain valid objects of type '" + req.type + "'.";
+                            isValid = false;
+                        }
+                        // FIXME We can not validate the type of object extracted with 'camp' path.
+                        else if (reqKey.path.empty() && obj->getClassname() != req.type)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name +
+                                                 "' must contain only objects of type '" + req.type + "'.";
+                            isValid = false;
+                        }
+                    }
+
+                    if (isValid)
+                    {
+                        IValidator::ValidationType val = this->checkObject(currentComposite, req.validator);
+                        if (!val.first)
+                        {
+                            validation.first   = false;
+                            validation.second += "\n - The parameter '" + req.name + "' is not valid: " + val.second;
+                        }
+
+                    }
+                }
+            }
+        }
+    }
+
+    return validation;
+}
+
+//------------------------------------------------------------------------------
+
+IValidator::ValidationType IActivityValidator::checkParameters(const ::fwMedData::ActivitySeries::csptr &activity) const
+{
+    IValidator::ValidationType validation;
+    validation.first  = true;
+    validation.second = "";
+
+    ::fwActivities::registry::ActivityInfo info;
+    info = ::fwActivities::registry::Activities::getDefault()->getInfo(activity->getActivityConfigId());
+
+    ::fwData::Composite::sptr composite = activity->getData();
+
+    // Check if all the activity config parameters are present
+    ::fwActivities::registry::ActivityAppConfig appConfigInfo = info.appConfig;
+    for (auto param : appConfigInfo.parameters)
+    {
+        if (param.isSeshat())
+        {
+            std::string path = param.by;
+            if (path.substr(0,1) == "!")
+            {
+                path.replace(0, 1, "@");
+            }
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(composite, path);
+            if (!obj)
+            {
+                validation.first   = false;
+                validation.second += "\n - invalid sesh@ path : '" + path + "'";
+            }
+        }
+    }
+
+    return validation;
+}
+
+//------------------------------------------------------------------------------
+
+IValidator::ValidationType IActivityValidator::checkObject(const ::fwData::Object::csptr &object,
+                                                           const std::string &validatorImpl) const
+{
+    ::fwActivities::IValidator::ValidationType validation;
+    validation.first  = true;
+    validation.second = "";
+
+    if (validatorImpl.empty())
+    {
+        validation.first  = true;
+        validation.second = "Validator implementation is empty, assuming it is valid.";
+    }
+    else
+    {
+        /// Process object validator
+        ::fwActivities::IValidator::sptr validator           = ::fwActivities::validator::factory::New(validatorImpl);
+        ::fwActivities::IObjectValidator::sptr dataValidator = ::fwActivities::IObjectValidator::dynamicCast(validator);
+
+        if (!dataValidator)
+        {
+            validation.first  = false;
+            validation.second = "Validator '" + validatorImpl + "' cannot be instantiated";
+        }
+        else
+        {
+            validation = dataValidator->validate(object);
+        }
+    }
+
+    return validation;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace fwActivities
+
diff --git a/SrcLib/core/fwActivities/src/fwActivities/IBuilder.cpp b/SrcLib/core/fwActivities/src/fwActivities/IBuilder.cpp
index 55aacf0..65a1c61 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/IBuilder.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/IBuilder.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include <fwData/Vector.hpp>
 
 #include "fwActivities/IBuilder.hpp"
@@ -21,7 +19,7 @@ namespace fwActivities
     SLM_ASSERT("currentSelection not instanced", currentSelection);
 
     ::fwData::Vector::sptr subSelection = ::fwData::Vector::New();
-    BOOST_FOREACH(::fwData::Vector::value_type obj, *currentSelection)
+    for(::fwData::Vector::value_type obj :  *currentSelection)
     {
         OSLM_ASSERT("Object not instanced in selection", obj);
         if(obj->isA(type))
diff --git a/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeries.cpp b/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeries.cpp
index ae704c8..83bd58b 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeries.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeries.cpp
@@ -1,16 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <boost/date_time/posix_time/posix_time.hpp>
+#include "fwActivities/builder/registry/macros.hpp"
+#include "fwActivities/builder/ActivitySeries.hpp"
 
 #include <fwData/Vector.hpp>
 #include <fwData/Composite.hpp>
 
+#include <fwDataCamp/getObject.hpp>
+
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Study.hpp>
 #include <fwMedData/Equipment.hpp>
@@ -18,10 +19,7 @@
 #include <fwTools/UUID.hpp>
 #include <fwTools/dateAndTime.hpp>
 
-#include <fwDataCamp/getObject.hpp>
-
-#include "fwActivities/builder/registry/macros.hpp"
-#include "fwActivities/builder/ActivitySeries.hpp"
+#include <boost/date_time/posix_time/posix_time.hpp>
 
 namespace fwActivities
 {
@@ -33,26 +31,28 @@ fwActivitiesBuilderRegisterMacro(::fwActivities::builder::ActivitySeries, "::fwA
 //-----------------------------------------------------------------------------
 
 ActivitySeries::ActivitySeries(::fwActivities::IBuilder::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ActivitySeries::~ActivitySeries()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ::fwData::Composite::sptr vectorToComposite(::fwData::Vector::sptr vector,
                                             const ::fwActivities::registry::ActivityRequirement &req)
 {
-    namespace ActReg = ::fwActivities::registry;
+    namespace ActReg                    = ::fwActivities::registry;
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
 
-    OSLM_ASSERT("Each possible items in requirement need to have a maching key", req.keys.size() >= req.maxOccurs );
+    OSLM_ASSERT("Each possible items in requirement need to have a matching key", req.keys.size() >= req.maxOccurs );
 
     ActReg::ActivityRequirement::KeyType::const_iterator iter = req.keys.begin();
 
-    BOOST_FOREACH(const ::fwData::Object::sptr &obj, *vector)
+    for(const ::fwData::Object::sptr &obj :  *vector)
     {
         const ActReg::ActivityRequirementKey &keyTag = (*iter++);
         if(keyTag.path.empty())
@@ -71,13 +71,13 @@ ActivitySeries::~ActivitySeries()
 //-----------------------------------------------------------------------------
 
 ::fwMedData::ActivitySeries::sptr ActivitySeries::buildData(
-        const ::fwActivities::registry::ActivityInfo& activityInfo,
-        ::fwData::Vector::sptr currentSelection ) const
+    const ::fwActivities::registry::ActivityInfo& activityInfo,
+    ::fwData::Vector::sptr currentSelection ) const
 {
     ::fwMedData::ActivitySeries::sptr actSeries = ::fwMedData::ActivitySeries::New();
 
     ::fwMedData::Series::sptr series;
-    BOOST_FOREACH(const ::fwData::Object::sptr& obj, *currentSelection)
+    for(const ::fwData::Object::sptr& obj :  *currentSelection)
     {
         series = ::fwMedData::Series::dynamicCast(obj);
         if(series)
@@ -106,7 +106,7 @@ ActivitySeries::~ActivitySeries()
     namespace ActReg = ::fwActivities::registry;
 
     ActReg::ActivityInfo::RequirementsType reqVect = activityInfo.requirements;
-    BOOST_FOREACH(const ActReg::ActivityRequirement& req, reqVect)
+    for(const ActReg::ActivityRequirement& req :  reqVect)
     {
         ::fwData::Vector::sptr vectorType = this->getType(currentSelection, req.type);
         // param is optional (minOccurs==0) or required (minOccurs==1), but is single (maxOccurs == 1)
@@ -115,9 +115,20 @@ ActivitySeries::~ActivitySeries()
             OSLM_ASSERT("No param name "<<req.name<<" with type "<<req.type, !vectorType->empty());
             (*data)[req.name] = (*vectorType)[0];
         }
-        else //optional single parameter
+        else
         {
-            (*data)[req.name] = vectorToComposite(vectorType, req);
+            SLM_ASSERT("Unknown specified container: '"+req.container+"'.",
+                       req.container.empty() ||
+                       req.container == "vector" ||
+                       req.container == "composite");
+            if(req.container == "vector")
+            {
+                (*data)[req.name] = vectorType;
+            }
+            else if(req.container == "composite" || req.container.empty())
+            {
+                (*data)[req.name] = vectorToComposite(vectorType, req);
+            }
         }
     }
 
diff --git a/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeriesInitData.cpp b/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeriesInitData.cpp
index 62d8027..1454a65 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeriesInitData.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/builder/ActivitySeriesInitData.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,32 +16,34 @@ namespace builder
 {
 
 fwActivitiesBuilderRegisterMacro(
-        ::fwActivities::builder::ActivitySeriesInitData, "::fwActivities::builder::ActivitySeriesInitData");
+    ::fwActivities::builder::ActivitySeriesInitData, "::fwActivities::builder::ActivitySeriesInitData");
 
 //-----------------------------------------------------------------------------
 
 ActivitySeriesInitData::ActivitySeriesInitData(::fwActivities::IBuilder::Key key)
     : fwActivities::builder::ActivitySeries(key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ActivitySeriesInitData::~ActivitySeriesInitData()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ::fwMedData::ActivitySeries::sptr ActivitySeriesInitData::buildData(
-        const ::fwActivities::registry::ActivityInfo& activityInfo,
-        ::fwData::Vector::sptr currentSelection ) const
+    const ::fwActivities::registry::ActivityInfo& activityInfo,
+    ::fwData::Vector::sptr currentSelection ) const
 {
     ::fwMedData::ActivitySeries::sptr actSeries = this->ActivitySeries::buildData(activityInfo, currentSelection);
-    ::fwData::Composite::sptr data = actSeries->getData();
+    ::fwData::Composite::sptr data              = actSeries->getData();
 
     namespace ActReg = ::fwActivities::registry;
 
     ActReg::ActivityInfo::RequirementsType reqVect = activityInfo.requirements;
-    BOOST_FOREACH(const ActReg::ActivityRequirement& req, reqVect)
+    for(const ActReg::ActivityRequirement& req :  reqVect)
     {
         if(req.maxOccurs == 0 && req.minOccurs == 0)
         {
diff --git a/SrcLib/core/fwActivities/src/fwActivities/builder/factory/new.cpp b/SrcLib/core/fwActivities/src/fwActivities/builder/factory/new.cpp
index 11537e9..ce05fed 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/builder/factory/new.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/builder/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwActivities/src/fwActivities/builder/registry/detail.cpp b/SrcLib/core/fwActivities/src/fwActivities/builder/registry/detail.cpp
index 78d96e7..9ad21dd 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/builder/registry/detail.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/builder/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace builder
 namespace registry
 {
 
-struct FwActivitiesBuilderRegistryInstantiatorTag {} ;
+struct FwActivitiesBuilderRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwActivities/src/fwActivities/registry/Activities.cpp b/SrcLib/core/fwActivities/src/fwActivities/registry/Activities.cpp
index 3928954..74e78c2 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/registry/Activities.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/registry/Activities.cpp
@@ -1,16 +1,21 @@
-#include <limits>
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/regex.hpp>
+#include "fwActivities/registry/Activities.hpp"
+
+#include <fwData/Vector.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/Runtime.hpp>
-#include <fwRuntime/helper.hpp>
 #include <fwRuntime/Convert.hpp>
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
 
-#include <fwData/Vector.hpp>
-
-#include "fwActivities/registry/Activities.hpp"
+#include <boost/foreach.hpp>
+#include <boost/regex.hpp>
+#include <limits>
 
 namespace fwActivities
 {
@@ -18,9 +23,14 @@ namespace registry
 {
 
 ActivityAppConfigParam::ActivityAppConfigParam(const ConfigType &config) :
-    replace(config.get<std::string>("<xmlattr>.replace")),
-    by(config.get<std::string>("<xmlattr>.by"))
+    replace(config.get<std::string>("<xmlattr>.replace"))
 {
+    by = config.get_optional<std::string>("<xmlattr>.uid").get_value_or("");
+    if(by.empty())
+    {
+        by = config.get<std::string>("<xmlattr>.by");
+    }
+
 }
 
 //-----------------------------------------------------------------------------
@@ -31,7 +41,7 @@ ActivityAppConfig::ActivityAppConfig(const ConfigType &config) :
     if(config.count("parameters") == 1 )
     {
         const ConfigType &configParameters = config.get_child("parameters");
-        BOOST_FOREACH( const ConfigType::value_type &v, configParameters.equal_range("parameter") )
+        BOOST_FOREACH( const ConfigType::value_type &v,  configParameters.equal_range("parameter") )
         {
             ActivityAppConfigParam parameter( v.second );
             parameters.push_back( parameter );
@@ -53,6 +63,9 @@ ActivityRequirementKey::ActivityRequirementKey(const ConfigType &config) :
 ActivityRequirement::ActivityRequirement(const ConfigType &config) :
     name(config.get<std::string>("<xmlattr>.name")),
     type(config.get<std::string>("<xmlattr>.type")),
+    container(config.get_optional<std::string>("<xmlattr>.container").get_value_or("")),
+    description(config.get_optional<std::string>("desc").get_value_or("")),
+    validator(config.get_optional<std::string>("validator").get_value_or("")),
     minOccurs(config.get_optional<unsigned int>("<xmlattr>.minOccurs").get_value_or(1)),
     maxOccurs(config.get_optional<unsigned int>("<xmlattr>.maxOccurs").get_value_or(1))
 {
@@ -66,9 +79,17 @@ ActivityRequirement::ActivityRequirement(const ConfigType &config) :
         this->maxOccurs = std::numeric_limits<unsigned int>::max();
     }
 
-    OSLM_ASSERT( "minOccurs value shall be equal or greater than 0 and lower or equal to maxOccurs (" << maxOccurs << ")",
-                 0 <= minOccurs && minOccurs <= maxOccurs);
-    OSLM_TRACE( "ActivityRequirement : " << name << " : " << type << ", " << minOccurs << "-" << maxOccurs );
+    std::string createStr = config.get_optional<std::string>("<xmlattr>.create").get_value_or("false");
+    SLM_ASSERT("'create' attribute must be 'true' or 'false'", createStr == "true" || createStr == "false");
+    create = (createStr == "true");
+    SLM_ASSERT("Create option is only available if minOccurs = 0 and maxOccurs = 1",
+               !create || (minOccurs == 0 && maxOccurs == 1));
+
+    OSLM_ASSERT(
+        "minOccurs value shall be equal or greater than 0 and lower or equal to maxOccurs (" << maxOccurs << ")",
+        0 <= minOccurs && minOccurs <= maxOccurs);
+    OSLM_TRACE( "ActivityRequirement : " << name << " : " << type << ", " << minOccurs << "-" << maxOccurs
+                                         << "(" << description << ")");
 }
 
 //-----------------------------------------------------------------------------
@@ -76,13 +97,13 @@ ActivityRequirement::ActivityRequirement(const ConfigType &config) :
 ActivityInfo::ActivityInfo(const SPTR(::fwRuntime::Extension) &ext) :
     id(ext->findConfigurationElement("id")->getValue()),
     title(ext->findConfigurationElement("title")->getValue()),
-    tabInfo(title),
     description(ext->findConfigurationElement("desc")->getValue()),
     icon(ext->findConfigurationElement("icon")->getValue()),
-    builderImpl(ext->findConfigurationElement("builder")->getValue()),
+    tabInfo(title),
+    bundleId(ext->getBundle()->getIdentifier()),
+    bundleVersion(ext->getBundle()->getVersion().string()),
     appConfig(::fwRuntime::Convert::toPropertyTree(ext->findConfigurationElement("appConfig")).get_child("appConfig"))
 {
-
     if(ext->findConfigurationElement("tabinfo"))
     {
         tabInfo = ext->findConfigurationElement("tabinfo")->getValue();
@@ -111,15 +132,42 @@ ActivityInfo::ActivityInfo(const SPTR(::fwRuntime::Extension) &ext) :
         }
     }
 
-    ::fwRuntime::ConfigurationElement::sptr validatorCfg = ext->findConfigurationElement("validator");
+    ::fwRuntime::ConfigurationElement::csptr builderCfg = ext->findConfigurationElement("builder");
+    if (builderCfg)
+    {
+        builderImpl = builderCfg->getValue();
+    }
+    else
+    {
+        builderImpl = "::fwActivities::builder::ActivitySeriesInitData";
+    }
+
+    // backward compatibility
+    ::fwRuntime::ConfigurationElement::csptr validatorCfg = ext->findConfigurationElement("validator");
     if(validatorCfg)
     {
         std::string validatorImplStr = validatorCfg->getValue();
         if(!validatorImplStr.empty())
         {
-            validatorImpl = validatorImplStr;
+            validatorsImpl.push_back( validatorImplStr );
         }
     }
+
+    ::fwRuntime::ConfigurationElement::sptr validatorsCfg = ext->findConfigurationElement("validators");
+    if( validatorsCfg )
+    {
+        auto validators = ::fwRuntime::Convert::toPropertyTree(validatorsCfg).get_child("validators");
+        BOOST_FOREACH( auto const &validator, validators.equal_range("validator") )
+        {
+            validatorsImpl.push_back( validator.second.get_value<std::string>() );
+        }
+    }
+
+    // Set Default validator if none is defined
+    if (validatorsImpl.empty())
+    {
+        validatorsImpl.push_back("::fwActivities::validator::DefaultActivity");
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -130,9 +178,9 @@ bool ActivityInfo::usableWith(DataCountType dataCounts) const
 
     if(ok)
     {
-        BOOST_FOREACH( const RequirementsMinMaxCount::value_type &reqCount, m_requirementCount )
+        for( const RequirementsMinMaxCount::value_type &reqCount :  m_requirementCount )
         {
-            const MinMaxType &reqMinMax = reqCount.second;
+            const MinMaxType &reqMinMax  = reqCount.second;
             DataCountType::iterator iter = dataCounts.find(reqCount.first);
             if (iter != dataCounts.end())
             {
@@ -152,7 +200,7 @@ bool ActivityInfo::usableWith(DataCountType dataCounts) const
 
         if(ok)
         {
-            BOOST_FOREACH( const DataCountType::value_type &dataCount, dataCounts )
+            for( const DataCountType::value_type &dataCount :  dataCounts )
             {
                 if(m_requirementCount.find(dataCount.first) == m_requirementCount.end())
                 {
@@ -181,7 +229,8 @@ Activities::sptr Activities::getDefault()
 //-----------------------------------------------------------------------------
 
 Activities::~Activities()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -197,14 +246,14 @@ void Activities::parseBundleInformation()
 void Activities::parseBundleInformation(const std::vector< SPTR( ::fwRuntime::Extension ) > &extensions)
 {
 
-    BOOST_FOREACH( const SPTR( ::fwRuntime::Extension ) &ext, extensions )
+    for( const SPTR( ::fwRuntime::Extension ) &ext :  extensions )
     {
         OSLM_DEBUG("Parsing <" << ext->getBundle()->getIdentifier() << "> Activities");
         ActivityInfo info(ext);
 
         ::fwCore::mt::WriteLock lock(m_registryMutex);
         SLM_ASSERT("The id " <<  info.id << "(" << info.title << ")"
-                << " already exists in the Activities registry", m_reg.find( info.id ) == m_reg.end());
+                             << " already exists in the Activities registry", m_reg.find( info.id ) == m_reg.end());
         m_reg.insert( Registry::value_type(info.id, info) );
     }
 }
@@ -212,7 +261,8 @@ void Activities::parseBundleInformation(const std::vector< SPTR( ::fwRuntime::Ex
 //-----------------------------------------------------------------------------
 
 Activities::Activities()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -239,7 +289,7 @@ std::vector< ActivityInfo > Activities::getInfos() const
 
     ::fwCore::mt::ReadLock lock(m_registryMutex);
 
-    BOOST_FOREACH( Registry::value_type val, m_reg )
+    for( Registry::value_type val :  m_reg )
     {
         infos.push_back( val.second );
     }
@@ -253,7 +303,7 @@ ActivityInfo::DataCountType Activities::getDataCount( const ::fwData::Vector::sp
 {
     ActivityInfo::DataCountType dataCount;
 
-    BOOST_FOREACH( const ::fwData::Object::sptr &obj, *data)
+    for( const ::fwData::Object::sptr &obj :  *data)
     {
         ++dataCount[obj->getClassname()];
     }
@@ -270,7 +320,7 @@ std::vector< ActivityInfo > Activities::getInfos( const ::fwData::Vector::sptr &
 
     ::fwCore::mt::ReadLock lock(m_registryMutex);
 
-    BOOST_FOREACH( const Registry::value_type &regValue, m_reg )
+    for( const Registry::value_type &regValue :  m_reg )
     {
         const ActivityInfo &activity = regValue.second;
         if (activity.usableWith(dataCount))
@@ -290,7 +340,7 @@ std::vector< std::string > Activities::getKeys() const
 
     ::fwCore::mt::ReadLock lock(m_registryMutex);
 
-    BOOST_FOREACH( Registry::value_type val, m_reg )
+    for( Registry::value_type val :  m_reg )
     {
         keys.push_back( val.first );
     }
@@ -304,7 +354,8 @@ const ActivityInfo Activities::getInfo( const std::string & extensionId ) const
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     Registry::const_iterator iter = m_reg.find( extensionId );
-    SLM_ASSERT("The id " <<  extensionId << " is not found in the application configuration parameter registry", iter != m_reg.end());
+    SLM_ASSERT("The id " <<  extensionId << " is not found in the application configuration parameter registry",
+               iter != m_reg.end());
     return iter->second;
 }
 
diff --git a/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp b/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp
new file mode 100644
index 0000000..9792f0b
--- /dev/null
+++ b/SrcLib/core/fwActivities/src/fwActivities/registry/ActivityMsg.cpp
@@ -0,0 +1,122 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwActivities/registry/ActivityMsg.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Object.hpp>
+#include <fwData/String.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+
+#include <fwTools/UUID.hpp>
+
+#include <boost/regex.hpp>
+
+namespace fwActivities
+{
+namespace registry
+{
+
+//-----------------------------------------------------------------------------
+
+ActivityMsg::ActivityMsg(const ::fwMedData::ActivitySeries::sptr &series,
+                         const ::fwActivities::registry::ActivityInfo & info,
+                         const ParametersType& parameters)
+{
+    SLM_ASSERT("ActivitySeries instantiation failed", series);
+
+    const std::string asUID = "AS_UID";
+
+    m_title       = info.title;
+    m_appConfigID = info.appConfig.id;
+    m_closable    = true;
+    m_tabID       = "TABID_" + ::fwTools::UUID::generateUUID();
+
+    if(info.tabInfo.empty())
+    {
+        m_tabInfo = info.title;
+    }
+    else
+    {
+        std::string newTabInfo = info.tabInfo;
+        ::boost::regex e("(!(([[:word:]]+\\.?)+[[:word:]]))");
+        ::boost::smatch what;
+        if(boost::regex_search(newTabInfo, what, e))
+        {
+            std::string submatch(what[1].first, what[1].second);
+
+            submatch.replace(0, 1, "@");
+
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(series->getData(), submatch);
+            OSLM_ASSERT("Invalid seshat path : '" << submatch <<"'", obj);
+
+            ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
+
+            std::string tabInfoSeshat;
+
+            if(stringParameter)
+            {
+                tabInfoSeshat = stringParameter->getValue();
+            }
+            else
+            {
+                OSLM_WARN("Seshat path '" << submatch << "' doesn't reference an fwData::String");
+            }
+
+            submatch.replace(0, 1, "!");
+            ::boost::algorithm::replace_all(newTabInfo, submatch, tabInfoSeshat);
+
+        }
+        m_tabInfo = newTabInfo;
+    }
+    m_iconPath = info.icon;
+    m_tooltip  = m_tabInfo;
+    m_series   = series;
+
+    namespace ActiReg = ::fwActivities::registry;
+    ActiReg::ActivityAppConfig::ActivityAppConfigParamsType params = info.appConfig.parameters;
+    params.reserve(params.size() + parameters.size() + 1);
+    params.insert(params.end(), parameters.begin(), parameters.end());
+    ActiReg::ActivityAppConfigParam asConfigParam;
+    asConfigParam.replace = asUID;
+    asConfigParam.by      = series->getID();
+    params.push_back(asConfigParam);
+    for(const ActiReg::ActivityAppConfigParam& param :  params)
+    {
+        if(!param.isSeshat())
+        {
+            m_replaceMap[param.replace] = param.by;
+        }
+        else
+        {
+            std::string parameterToReplace = param.by;
+            if (parameterToReplace.substr(0,1) == "!")
+            {
+                parameterToReplace.replace(0, 1, "@");
+            }
+
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(series->getData(), parameterToReplace);
+            OSLM_ASSERT("Invalid seshat path : '"<<param.by<<"'", obj);
+
+            ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
+
+            std::string parameterValue = obj->getID();
+
+            if(stringParameter && param.by.substr(0,1) == "!")
+            {
+                parameterValue = stringParameter->getValue();
+            }
+            m_replaceMap[param.replace] = parameterValue;
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace registry
+
+} // namespace fwActivities
diff --git a/SrcLib/core/fwActivities/src/fwActivities/validator/DefaultActivity.cpp b/SrcLib/core/fwActivities/src/fwActivities/validator/DefaultActivity.cpp
new file mode 100644
index 0000000..ad89ff2
--- /dev/null
+++ b/SrcLib/core/fwActivities/src/fwActivities/validator/DefaultActivity.cpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwActivities/validator/DefaultActivity.hpp"
+#include "fwActivities/validator/registry/macros.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+
+namespace fwActivities
+{
+namespace validator
+{
+
+fwActivitiesValidatorRegisterMacro(
+    ::fwActivities::validator::DefaultActivity, "::fwActivities::validator::DefaultActivity");
+
+//-----------------------------------------------------------------------------
+
+DefaultActivity::DefaultActivity(::fwActivities::IValidator::Key key)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+DefaultActivity::~DefaultActivity()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IValidator::ValidationType DefaultActivity::validate(const ::fwMedData::ActivitySeries::csptr &activitySeries ) const
+{
+    IValidator::ValidationType validation;
+
+    validation = IActivityValidator::checkRequirements(activitySeries);
+
+    if (validation.first)
+    {
+        validation = IActivityValidator::checkParameters(activitySeries);
+    }
+
+    return validation;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace validator
+} // namespace fwActivities
+
+
diff --git a/SrcLib/core/fwActivities/src/fwActivities/validator/ImageProperties.cpp b/SrcLib/core/fwActivities/src/fwActivities/validator/ImageProperties.cpp
index 928f003..00df799 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/validator/ImageProperties.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/validator/ImageProperties.cpp
@@ -1,11 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwData/Image.hpp>
 #include <fwData/Vector.hpp>
+#include <fwData/Composite.hpp>
 
 #include <fwMedData/ImageSeries.hpp>
 
@@ -20,29 +21,31 @@ namespace validator
 {
 
 fwActivitiesValidatorRegisterMacro(
-        ::fwActivities::validator::ImageProperties, "::fwActivities::validator::ImageProperties");
+    ::fwActivities::validator::ImageProperties, "::fwActivities::validator::ImageProperties");
 
 //-----------------------------------------------------------------------------
 
 ImageProperties::ImageProperties(::fwActivities::IValidator::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ImageProperties::~ImageProperties()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IValidator::ValidationType ImageProperties::validate(
-        const ::fwActivities::registry::ActivityInfo& activityInfo,
-        ::fwData::Vector::sptr currentSelection ) const
+    const ::fwActivities::registry::ActivityInfo& activityInfo,
+    ::fwData::Vector::sptr currentSelection ) const
 {
     IValidator::ValidationType validation;
 
     if(currentSelection->size() > 1)
     {
-        validation.first = true;
+        validation.first  = true;
         validation.second = "Input images have the same properties.";
 
         ::fwMedData::ImageSeries::sptr imgSeries0 = ::fwMedData::ImageSeries::dynamicCast((*currentSelection)[0]);
@@ -50,11 +53,11 @@ IValidator::ValidationType ImageProperties::validate(
         ::fwData::Image::sptr img0 = imgSeries0->getImage();
         SLM_ASSERT("Failed to retrieve image from image series", img0);
 
-        ::fwData::Image::SizeType size = img0->getSize();
+        ::fwData::Image::SizeType size       = img0->getSize();
         ::fwData::Image::SpacingType spacing = img0->getSpacing();
-        ::fwData::Image::OriginType origin = img0->getOrigin();
+        ::fwData::Image::OriginType origin   = img0->getOrigin();
 
-        ::fwData::Vector::ContainerType::const_iterator it; 
+        ::fwData::Vector::ContainerType::const_iterator it;
         for(it = currentSelection->begin() + 1; it != currentSelection->end(); ++it)
         {
             ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::dynamicCast(*it);
@@ -63,15 +66,15 @@ IValidator::ValidationType ImageProperties::validate(
             SLM_ASSERT("Failed to retrieve an image data", img);
 
             if (  size != img->getSize() ||
-                    !::fwMath::isContainerEqual< const ::fwData::Image::SpacingType >(spacing, img->getSpacing()) ||
-                    !::fwMath::isContainerEqual< const ::fwData::Image::OriginType >(origin, img->getOrigin()) )
+                  !::fwMath::isContainerEqual< const ::fwData::Image::SpacingType >(spacing, img->getSpacing()) ||
+                  !::fwMath::isContainerEqual< const ::fwData::Image::OriginType >(origin, img->getOrigin()) )
             {
                 std::string errorMsg = "Images in selection have not the same properties :\n";
-                errorMsg += (size != img->getSize()) ? "- size\n":"";
-                errorMsg += (spacing != img->getSpacing())?"- spacing\n":"";
-                errorMsg += (origin != img->getOrigin())?"- origin":"";
+                errorMsg += (size != img->getSize()) ? "- size\n" : "";
+                errorMsg += (spacing != img->getSpacing()) ? "- spacing\n" : "";
+                errorMsg += (origin != img->getOrigin()) ? "- origin" : "";
 
-                validation.first = false;
+                validation.first  = false;
                 validation.second = errorMsg;
 
                 break;
@@ -80,7 +83,7 @@ IValidator::ValidationType ImageProperties::validate(
     }
     else
     {
-        validation.first = true;
+        validation.first  = true;
         validation.second = "Only one data provided to check images properties, assuming validation as ok.";
     }
 
@@ -89,6 +92,116 @@ IValidator::ValidationType ImageProperties::validate(
 
 //-----------------------------------------------------------------------------
 
+IValidator::ValidationType ImageProperties::validate(const ::fwData::Object::csptr &currentData ) const
+{
+    IValidator::ValidationType validation;
+
+    ::fwData::Vector::csptr vector       = ::fwData::Vector::dynamicConstCast(currentData);
+    ::fwData::Composite::csptr composite = ::fwData::Composite::dynamicConstCast(currentData);
+
+    validation.first  = true;
+    validation.second = "Input images have the same properties.";
+
+    ::fwData::Image::csptr img0;
+
+    if (vector)
+    {
+        for (::fwData::Object::sptr obj : *vector)
+        {
+            ::fwMedData::ImageSeries::csptr imgSeries = ::fwMedData::ImageSeries::dynamicConstCast(obj);
+            ::fwData::Image::csptr img                = ::fwData::Image::dynamicConstCast(obj);
+            if (imgSeries)
+            {
+                img = imgSeries->getImage();
+            }
+
+            if (img)
+            {
+                if (!img0)
+                {
+                    img0 = img;
+                }
+                else
+                {
+                    if (  img0->getSize() != img->getSize() ||
+                          !::fwMath::isContainerEqual< const ::fwData::Image::SpacingType >(img0->getSpacing(),
+                                                                                            img->getSpacing()) ||
+                          !::fwMath::isContainerEqual< const ::fwData::Image::OriginType >(img0->getOrigin(),
+                                                                                           img->getOrigin()) )
+                    {
+                        std::string errorMsg = "Images in selection have not the same properties :\n";
+                        errorMsg += (img0->getSize() != img->getSize()) ? "- size\n" : "";
+                        errorMsg += (img0->getSpacing() != img->getSpacing()) ? "- spacing\n" : "";
+                        errorMsg += (img0->getOrigin() != img->getOrigin()) ? "- origin" : "";
+
+                        validation.first  = false;
+                        validation.second = errorMsg;
+
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                validation.first  = false;
+                validation.second = "Given data does not contain valid images.";
+            }
+        }
+    }
+    else if (composite)
+    {
+        for (auto elt : *composite)
+        {
+            ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::dynamicCast(elt.second);
+            ::fwData::Image::sptr img                = ::fwData::Image::dynamicCast(elt.second);
+            if (imgSeries)
+            {
+                img = imgSeries->getImage();
+            }
+
+            if (img)
+            {
+                if (!img0)
+                {
+                    img0 = img;
+                }
+                else
+                {
+                    if (  img0->getSize() != img->getSize() ||
+                          !::fwMath::isContainerEqual< const ::fwData::Image::SpacingType >(img0->getSpacing(),
+                                                                                            img->getSpacing()) ||
+                          !::fwMath::isContainerEqual< const ::fwData::Image::OriginType >(img0->getOrigin(),
+                                                                                           img->getOrigin()) )
+                    {
+                        std::string errorMsg = "Images in selection have not the same properties :\n";
+                        errorMsg += (img0->getSize() != img->getSize()) ? "- size\n" : "";
+                        errorMsg += (img0->getSpacing() != img->getSpacing()) ? "- spacing\n" : "";
+                        errorMsg += (img0->getOrigin() != img->getOrigin()) ? "- origin" : "";
+
+                        validation.first  = false;
+                        validation.second = errorMsg;
+
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                validation.first  = false;
+                validation.second = "Given data does not contain valid images.";
+            }
+        }
+    }
+    else
+    {
+        validation.first  = false;
+        validation.second = "Given data is not a Vector or Composite of images. The validation can not be performed.";
+    }
+    return validation;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace validator
 } // namespace fwActivities
 
diff --git a/SrcLib/core/fwActivities/src/fwActivities/validator/RelatedStudy.cpp b/SrcLib/core/fwActivities/src/fwActivities/validator/RelatedStudy.cpp
index e0e24af..14df2e8 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/validator/RelatedStudy.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/validator/RelatedStudy.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,50 +20,52 @@ namespace validator
 {
 
 fwActivitiesValidatorRegisterMacro(
-        ::fwActivities::validator::RelatedStudy, "::fwActivities::validator::RelatedStudy");
+    ::fwActivities::validator::RelatedStudy, "::fwActivities::validator::RelatedStudy");
 
 //-----------------------------------------------------------------------------
 
 RelatedStudy::RelatedStudy(::fwActivities::IValidator::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 RelatedStudy::~RelatedStudy()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IValidator::ValidationType RelatedStudy::validate(
-        const ::fwActivities::registry::ActivityInfo& activityInfo,
-        ::fwData::Vector::sptr currentSelection ) const
+    const ::fwActivities::registry::ActivityInfo& activityInfo,
+    ::fwData::Vector::sptr currentSelection ) const
 {
     IValidator::ValidationType validation;
 
     if(currentSelection->size() > 1)
     {
-        validation.first = true;
-        validation.second = "Selected series refer to the same study.";
+        validation.first  = true;
+        validation.second = "Selected series refers to the same study.";
 
         ::fwMedData::Series::sptr seriesRef = ::fwMedData::Series::dynamicCast((*currentSelection)[0]);
-        ::fwMedData::Study::sptr studyRef = seriesRef->getStudy();
+        ::fwMedData::Study::sptr studyRef   = seriesRef->getStudy();
 
         std::string instanceUIDRef = studyRef->getInstanceUID();
         ::boost::algorithm::trim(instanceUIDRef);
 
-        ::fwData::Vector::ContainerType::const_iterator it; 
+        ::fwData::Vector::ContainerType::const_iterator it;
         for(it = currentSelection->begin() + 1; it != currentSelection->end(); ++it)
         {
             ::fwMedData::Series::sptr series = ::fwMedData::Series::dynamicCast(*it);
-            ::fwMedData::Study::sptr study = series->getStudy();
+            ::fwMedData::Study::sptr study   = series->getStudy();
 
             std::string instanceUID = study->getInstanceUID();
             ::boost::algorithm::trim(instanceUID);
 
             if(instanceUIDRef != instanceUID)
             {
-                validation.first = false;
-                validation.second = "Selected series don't refer to the same study.";
+                validation.first  = false;
+                validation.second = "Selected series do not refer to the same study.";
 
                 break;
             }
@@ -71,7 +73,7 @@ IValidator::ValidationType RelatedStudy::validate(
     }
     else
     {
-        validation.first = true;
+        validation.first  = true;
         validation.second = "Only one series provided to check study affiliation, assuming validation as ok.";
     }
 
diff --git a/SrcLib/core/fwActivities/src/fwActivities/validator/factory/new.cpp b/SrcLib/core/fwActivities/src/fwActivities/validator/factory/new.cpp
index 0fab144..c5e433b 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/validator/factory/new.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/validator/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwActivities/src/fwActivities/validator/registry/detail.cpp b/SrcLib/core/fwActivities/src/fwActivities/validator/registry/detail.cpp
index 5ef34f9..93e5544 100644
--- a/SrcLib/core/fwActivities/src/fwActivities/validator/registry/detail.cpp
+++ b/SrcLib/core/fwActivities/src/fwActivities/validator/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace validator
 namespace registry
 {
 
-struct FwActivitiesValidatorRegistryInstantiatorTag {} ;
+struct FwActivitiesValidatorRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwActivities/test/CMakeLists.txt b/SrcLib/core/fwActivities/test/CMakeLists.txt
index 207087b..35626b0 100644
--- a/SrcLib/core/fwActivities/test/CMakeLists.txt
+++ b/SrcLib/core/fwActivities/test/CMakeLists.txt
@@ -1,10 +1,9 @@
 
 fwLoadProperties()
 
-find_package (Boost COMPONENTS date_time REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/core/fwActivities/test/Properties.cmake b/SrcLib/core/fwActivities/test/Properties.cmake
index a2097dd..816a469 100644
--- a/SrcLib/core/fwActivities/test/Properties.cmake
+++ b/SrcLib/core/fwActivities/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwActivitiesTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwData fwMedData fwActivities )
+set( DEPENDENCIES fwCore fwData fwMedData fwActivities fwRuntime fwTest)
 set( REQUIREMENTS  )
-
+set(CPPUNITTEST_OPTIONS WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/SrcLib/core/fwActivities/test/cppunit.options b/SrcLib/core/fwActivities/test/cppunit.options
deleted file mode 100644
index 4371241..0000000
--- a/SrcLib/core/fwActivities/test/cppunit.options
+++ /dev/null
@@ -1,9 +0,0 @@
-
-CLASSTEST=[
-          'ActivitySeriesBuilderTest',
-          'ActivityRegistryTest',
-          ]
-
-USE = ['boost', 'cppunit']
-LIB = ['fwData_0-1', 'fwMedData_0-1', 'fwActivities_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwActivities/test/tu/include/builder/ActivitySeriesBuilderTest.hpp b/SrcLib/core/fwActivities/test/tu/include/builder/ActivitySeriesBuilderTest.hpp
index c3623fb..728a578 100644
--- a/SrcLib/core/fwActivities/test/tu/include/builder/ActivitySeriesBuilderTest.hpp
+++ b/SrcLib/core/fwActivities/test/tu/include/builder/ActivitySeriesBuilderTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,11 +17,11 @@ namespace ut
 
 class ActivitySeriesBuilderTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ActivitySeriesBuilderTest );
+CPPUNIT_TEST_SUITE( ActivitySeriesBuilderTest );
 
-    CPPUNIT_TEST(builDataTest);
+CPPUNIT_TEST(builDataTest);
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwActivities/test/tu/include/registry/ActivityRegistryTest.hpp b/SrcLib/core/fwActivities/test/tu/include/registry/ActivityRegistryTest.hpp
index fa4b4c4..06dd3d6 100644
--- a/SrcLib/core/fwActivities/test/tu/include/registry/ActivityRegistryTest.hpp
+++ b/SrcLib/core/fwActivities/test/tu/include/registry/ActivityRegistryTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,25 +9,21 @@
 
 #include <cppunit/extensions/HelperMacros.h>
 
-
-namespace fwRuntime
-{
-struct Bundle;
-}
-
 namespace fwActivities
 {
 
 namespace ut
 {
 
+struct ActivityRegistryTestPimpl;
+
 class ActivityRegistryTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ActivityRegistryTest );
+CPPUNIT_TEST_SUITE( ActivityRegistryTest );
 
-    CPPUNIT_TEST(registryTest);
+CPPUNIT_TEST(registryTest);
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -38,8 +34,7 @@ public:
 
 protected:
 
-    SPTR( fwRuntime::Bundle ) m_bundle;
-    SPTR( fwActivities::registry::Activities ) m_activities;
+    SPTR( ActivityRegistryTestPimpl ) m_pimpl;
 };
 
 } //namespace ut
diff --git a/SrcLib/core/fwActivities/test/tu/include/validator/DefaultActivityTest.hpp b/SrcLib/core/fwActivities/test/tu/include/validator/DefaultActivityTest.hpp
new file mode 100644
index 0000000..f329fba
--- /dev/null
+++ b/SrcLib/core/fwActivities/test/tu/include/validator/DefaultActivityTest.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_UT_VALIDATOR_DEFAULTACTIVITYTEST_HPP__
+#define __FWACTIVITIES_UT_VALIDATOR_DEFAULTACTIVITYTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwCore/macros.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+
+namespace fwActivities
+{
+
+namespace ut
+{
+
+class DefaultActivityTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DefaultActivityTest );
+
+CPPUNIT_TEST(requirementsTest);
+CPPUNIT_TEST(parametersTest);
+CPPUNIT_TEST(objectTest);
+CPPUNIT_TEST(validatorTest);
+CPPUNIT_TEST(bigActivityTest);
+
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void parametersTest();
+    void requirementsTest();
+    void objectTest();
+    void validatorTest();
+    void bigActivityTest();
+
+protected:
+    SPTR( ::fwRuntime::Bundle ) m_bundle;
+};
+
+} //namespace ut
+} //namespace fwActivities
+
+#endif //__FWACTIVITIES_UT_VALIDATOR_DEFAULTACTIVITYTEST_HPP__
+
diff --git a/SrcLib/core/fwActivities/test/tu/include/validator/ImagePropertiesTest.hpp b/SrcLib/core/fwActivities/test/tu/include/validator/ImagePropertiesTest.hpp
new file mode 100644
index 0000000..2750f96
--- /dev/null
+++ b/SrcLib/core/fwActivities/test/tu/include/validator/ImagePropertiesTest.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWACTIVITIES_UT_VALIDATOR_IMAGEPROPERTIESTEST_HPP__
+#define __FWACTIVITIES_UT_VALIDATOR_IMAGEPROPERTIESTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwActivities
+{
+
+namespace ut
+{
+
+class ImagePropertiesTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( ImagePropertiesTest );
+
+CPPUNIT_TEST(propertiesTest);
+
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void propertiesTest();
+
+};
+
+} //namespace ut
+} //namespace fwActivities
+
+#endif //__FWACTIVITIES_UT_VALIDATOR_IMAGEPROPERTIESTEST_HPP__
+
diff --git a/SrcLib/core/fwActivities/test/tu/rc/tu_builder/plugin.xml b/SrcLib/core/fwActivities/test/tu/rc/tu_builder/plugin.xml
index eb1a56a..8f8428f 100644
--- a/SrcLib/core/fwActivities/test/tu/rc/tu_builder/plugin.xml
+++ b/SrcLib/core/fwActivities/test/tu/rc/tu_builder/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="tu_fwActivities" >
+<plugin id="tu_fwActivities"  version="@DASH_VERSION@" >
 
     <extension-point id="::fwActivities::registry::Activities" schema="activities.xsd"/>
 
diff --git a/SrcLib/core/fwActivities/test/tu/rc/tu_registry/plugin.xml b/SrcLib/core/fwActivities/test/tu/rc/tu_registry/plugin.xml
index 1f209f4..19c5af6 100644
--- a/SrcLib/core/fwActivities/test/tu/rc/tu_registry/plugin.xml
+++ b/SrcLib/core/fwActivities/test/tu/rc/tu_registry/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="tu_fwActivities" >
+<plugin id="tu_fwActivities"  version="@DASH_VERSION@" >
 
     <extension-point id="::fwActivities::registry::Activities" schema="activities.xsd"/>
 
diff --git a/SrcLib/core/fwActivities/test/tu/rc/tu_validator/plugin.xml b/SrcLib/core/fwActivities/test/tu/rc/tu_validator/plugin.xml
new file mode 100644
index 0000000..b9f8259
--- /dev/null
+++ b/SrcLib/core/fwActivities/test/tu/rc/tu_validator/plugin.xml
@@ -0,0 +1,99 @@
+<plugin id="tu_fwActivities" version="@DASH_VERSION@">
+
+    <extension-point id="::fwActivities::registry::Activities" schema="activities.xsd" />
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>Test0</id>
+        <title>Title Test0</title>
+        <desc>Desc Test0</desc>
+        <icon>Icon Test0</icon>
+        <requirements>
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries" minOccurs="1" maxOccurs="1" />
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries" minOccurs="0" maxOccurs="2">
+                <key>key1</key>
+                <key>key2</key>
+            </requirement>
+        </requirements>
+        <builder>::fwActivities::builder::ActivitySeries</builder>
+        <appConfig id="Test0">
+            <parameters>
+                <parameter replace="RefModel" by="@values.modelSeries" />
+                <parameter replace="RefImage" by="@values.imageSeries.image" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+    <extension implements="::fwActivities::registry::Activities">
+        <id>Test1</id>
+        <title>test 1</title>
+        <desc>This is test 1.</desc>
+        <icon>Icon</icon>
+        <requirements>
+            <requirement name="imageSeries" type="::fwMedData::ImageSeries"><!-- default: minOccurs="1" maxOccurs="1" -->
+                <desc>Image Series that could be displayed in a 3D scene.</desc>
+            </requirement>
+            <requirement name="modelSeries" type="::fwMedData::ModelSeries">
+                <desc>Organs segmented from the image series that could be displayed in the 3D scene.</desc>
+            </requirement>
+            <requirement name="vectorImage" type="::fwMedData::ImageSeries" minOccurs="2" maxOccurs="*" container="vector">
+                <desc>Some image series...</desc>
+                <validator>::fwActivities::validator::ImageProperties</validator>
+            </requirement>
+            <requirement name="vectorModel" type="::fwMedData::ModelSeries" minOccurs="2" maxOccurs="*" container="vector">
+                <desc>
+                <![CDATA[
+                Vector containing at least <b>two</b> model series.
+                ]]>
+                </desc>
+            </requirement>
+            <requirement name="transformationMatrix" type="::fwData::TransformationMatrix3D" minOccurs="0" maxOccurs="1" create="true">
+                <desc>
+                <![CDATA[
+                Optional <b>matrix</b>.
+                It will be automatically generated if not defined. <br />
+                New matrix is identity.
+                ]]>
+                </desc>
+            </requirement>
+            <requirement name="float" type="::fwData::Float" minOccurs="1" maxOccurs="1">
+                <desc>This is a ::fwData::Float, we can also have ::fwData::Integer and ::fwData::String.</desc>
+            </requirement>
+            <requirement name="int" type="::fwData::Integer" minOccurs="0" maxOccurs="0">
+                <desc>This is a ::fwData::Integer, it will be automatically created and cannot be updated by the user.</desc>
+            </requirement>
+            <requirement name="boolean" type="::fwData::Boolean" minOccurs="1" maxOccurs="1">
+                <desc>This is a boolean. I don't think it can be useful, but it exists ;)</desc>
+            </requirement>
+            <requirement name="String" type="::fwData::String" minOccurs="0" maxOccurs="4">
+                <desc>
+                <![CDATA[
+                Currently, it is not visible in the editor, but the following strings will be store into a <b>::fwData::Composite</b>
+                with the keys:<br />
+                - Item1 <br />
+                - Item2 <br />
+                - Item3 <br />
+                - Item4 <br />
+                ]]>
+                </desc>
+                <key>Item1</key>
+                <key>Item2</key>
+                <key>Item3</key>
+                <key>Item4</key>
+            </requirement>
+        </requirements>
+        <appConfig id="Test1Config">
+            <parameters>
+                <parameter replace="evalModelSeriesVectorUid" by="@values.vectorModel" />
+                <parameter replace="evalImageSeriesVectorUid" by="@values.vectorImage" />
+                <parameter replace="evalImageFisrtUid" by="@values.vectorImage.values.0.image" />
+                <parameter replace="imageUid" by="@values.imageSeries.image" />
+                <parameter replace="modelSeriesExpiUid" by="@values.modelSeries" />
+                <parameter replace="transformationMatrixUid" by="@values.transformationMatrix" />
+                <parameter replace="floatUid" by="!values.float" />
+                <parameter replace="intUid" by="@values.int" />
+            </parameters>
+        </appConfig>
+    </extension>
+
+</plugin>
+
diff --git a/SrcLib/core/fwActivities/test/tu/src/builder/ActivitySeriesBuilderTest.cpp b/SrcLib/core/fwActivities/test/tu/src/builder/ActivitySeriesBuilderTest.cpp
index 5d99ad5..e0c5705 100644
--- a/SrcLib/core/fwActivities/test/tu/src/builder/ActivitySeriesBuilderTest.cpp
+++ b/SrcLib/core/fwActivities/test/tu/src/builder/ActivitySeriesBuilderTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -34,13 +34,8 @@ namespace ut
 void ActivitySeriesBuilderTest::setUp()
 {
     // Set up context before running a test.
-#ifdef SPECIALINSTALL
-	::boost::filesystem::path plugin = std::string(SHAREPATH)+"tu_exec_fwActivities_0-0/tu_builder";
-#else
-	::boost::filesystem::path plugin = "share/tu_exec_fwActivities_0-0/tu_builder";
-#endif
-
-    m_bundle = ::fwRuntime::io::BundleDescriptorReader::createBundle(plugin);
+    ::boost::filesystem::path plugin = "share/tu_exec_fwActivities_0-0/tu_builder";
+    m_bundle                         = ::fwRuntime::io::BundleDescriptorReader::createBundle(plugin);
 
     m_activities = ::fwActivities::registry::Activities::New();
 
@@ -63,8 +58,8 @@ void ActivitySeriesBuilderTest::tearDown()
 
 void ActivitySeriesBuilderTest::builDataTest()
 {
-    ::fwData::Vector::sptr selection = ::fwData::Vector::New();
-    ::fwMedData::ImageSeries::sptr imgSeriesSelected = ::fwMedData::ImageSeries::New();
+    ::fwData::Vector::sptr selection                   = ::fwData::Vector::New();
+    ::fwMedData::ImageSeries::sptr imgSeriesSelected   = ::fwMedData::ImageSeries::New();
     ::fwMedData::ModelSeries::sptr modelSeriesSelected = ::fwMedData::ModelSeries::New();
     selection->getContainer().push_back(imgSeriesSelected);
     selection->getContainer().push_back(modelSeriesSelected);
@@ -97,7 +92,7 @@ void ActivitySeriesBuilderTest::builDataTest()
     CPPUNIT_ASSERT(obj == imgSeriesSelected);
 
     //set of param [0;2]
-    obj = (*dataActivity)[modelKey];
+    obj                                 = (*dataActivity)[modelKey];
     ::fwData::Composite::sptr composite = ::fwData::Composite::dynamicCast(obj);
     CPPUNIT_ASSERT_MESSAGE(modelKey + " param dynamicCast to fwData::Composite failed", composite);
     CPPUNIT_ASSERT_EQUAL(size_t(1), composite->size());
diff --git a/SrcLib/core/fwActivities/test/tu/src/registry/ActivityRegistryTest.cpp b/SrcLib/core/fwActivities/test/tu/src/registry/ActivityRegistryTest.cpp
index 1c6f075..5194c69 100644
--- a/SrcLib/core/fwActivities/test/tu/src/registry/ActivityRegistryTest.cpp
+++ b/SrcLib/core/fwActivities/test/tu/src/registry/ActivityRegistryTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -29,25 +29,30 @@ namespace fwActivities
 namespace ut
 {
 
+struct ActivityRegistryTestPimpl
+{
+    public:
+        SPTR(::fwRuntime::Bundle) bundle;
+        ::fwActivities::registry::Activities::sptr activities;
+};
+
 //------------------------------------------------------------------------------
 
 void ActivityRegistryTest::setUp()
 {
+    m_pimpl = std::make_shared< ActivityRegistryTestPimpl >();
 
-#ifdef SPECIALINSTALL
-	::boost::filesystem::path plugin = std::string(SHAREPATH)+"tu_exec_fwActivities_0-0/tu_registry";
-#else
-	::boost::filesystem::path plugin = "share/tu_exec_fwActivities_0-0/tu_registry";
-#endif
-    m_bundle = ::fwRuntime::io::BundleDescriptorReader::createBundle(plugin);
+    ::boost::filesystem::path plugin = "share/tu_exec_fwActivities_0-0/tu_registry";
+    m_pimpl->bundle                  = ::fwRuntime::io::BundleDescriptorReader::createBundle(plugin);
 
-    m_activities = fwActivities::registry::Activities::New();
+    m_pimpl->activities = fwActivities::registry::Activities::New();
 
-    ::fwRuntime::Bundle::ExtensionContainer extensionsSet( m_bundle->extensionsBegin(), m_bundle->extensionsEnd());
+    ::fwRuntime::Bundle::ExtensionContainer extensionsSet(
+        m_pimpl->bundle->extensionsBegin(), m_pimpl->bundle->extensionsEnd());
     std::vector< SPTR( ::fwRuntime::Extension ) > extensions(extensionsSet.begin(), extensionsSet.end());
-    m_activities->parseBundleInformation(extensions);
+    m_pimpl->activities->parseBundleInformation(extensions);
 
-    CPPUNIT_ASSERT_EQUAL( size_t(8) , extensions.size());
+    CPPUNIT_ASSERT_EQUAL( size_t(8), extensions.size());
 
     // Set up context before running a test.
 }
@@ -57,7 +62,7 @@ void ActivityRegistryTest::setUp()
 void ActivityRegistryTest::tearDown()
 {
     // Clean up after the test run.
-    m_bundle.reset();
+    m_pimpl.reset();
 }
 
 //------------------------------------------------------------------------------
@@ -79,7 +84,7 @@ void ActivityRegistryTest::registryTest()
 
     // 1 image
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(4), activities.size() );
@@ -91,7 +96,7 @@ void ActivityRegistryTest::registryTest()
 
     // 2 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(3), activities.size() );
@@ -101,7 +106,7 @@ void ActivityRegistryTest::registryTest()
 
     // 3 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(1), activities.size() );
@@ -109,7 +114,7 @@ void ActivityRegistryTest::registryTest()
 
     // 4 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(2), activities.size() );
@@ -118,7 +123,7 @@ void ActivityRegistryTest::registryTest()
 
     // 5 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(2), activities.size() );
@@ -127,7 +132,7 @@ void ActivityRegistryTest::registryTest()
 
     // 6 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(2), activities.size() );
@@ -136,7 +141,7 @@ void ActivityRegistryTest::registryTest()
 
     // 7 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(2), activities.size() );
@@ -145,7 +150,7 @@ void ActivityRegistryTest::registryTest()
 
     // 8 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(2), activities.size() );
@@ -154,7 +159,7 @@ void ActivityRegistryTest::registryTest()
 
     // 9 images
     v->getContainer().push_back( ::fwData::Image::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(1), activities.size() );
@@ -162,7 +167,7 @@ void ActivityRegistryTest::registryTest()
 
     // 9 images, 1 mesh
     v->getContainer().push_back( ::fwData::Mesh::New() );
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(0), activities.size() );
@@ -172,7 +177,7 @@ void ActivityRegistryTest::registryTest()
     v->getContainer().push_back( ::fwData::Image::New() );
     v->getContainer().push_back( ::fwData::Mesh::New() );
 
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(2), activities.size() );
@@ -184,7 +189,7 @@ void ActivityRegistryTest::registryTest()
     v->getContainer().push_back( ::fwMedData::ImageSeries::New() );
     v->getContainer().push_back( ::fwMedData::ModelSeries::New() );
 
-    activities = m_activities->getInfos(v);
+    activities = m_pimpl->activities->getInfos(v);
     std::sort(activities.begin(), activities.end(), activities_less_than_key());
 
     CPPUNIT_ASSERT_EQUAL( size_t(1), activities.size() );
diff --git a/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp b/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp
new file mode 100644
index 0000000..f00f6a6
--- /dev/null
+++ b/SrcLib/core/fwActivities/test/tu/src/validator/DefaultActivityTest.cpp
@@ -0,0 +1,501 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "validator/DefaultActivityTest.hpp"
+
+#include <fwActivities/IActivityValidator.hpp>
+#include <fwActivities/IValidator.hpp>
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/Float.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/String.hpp>
+#include <fwData/TransformationMatrix3D.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/Extension.hpp>
+#include <fwRuntime/io/BundleDescriptorReader.hpp>
+
+#include <fwTest/generator/Image.hpp>
+
+#include <cstdint>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwActivities::ut::DefaultActivityTest );
+
+namespace fwActivities
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::setUp()
+{
+    // Set up context before running a test.
+    // Set up context before running a test.
+    ::boost::filesystem::path plugin = "share/tu_exec_fwActivities_0-0/tu_validator";
+    m_bundle                         = ::fwRuntime::io::BundleDescriptorReader::createBundle(plugin);
+
+    ::fwRuntime::Bundle::ExtensionContainer extensionsSet( m_bundle->extensionsBegin(), m_bundle->extensionsEnd());
+    std::vector< SPTR( ::fwRuntime::Extension ) > extensions(extensionsSet.begin(), extensionsSet.end());
+    ::fwActivities::registry::Activities::getDefault()->parseBundleInformation(extensions);
+
+    CPPUNIT_ASSERT_EQUAL( size_t(2), extensions.size());
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::tearDown()
+{
+    // Clean up after the test run.
+    ::fwActivities::registry::Activities::getDefault()->clearRegistry();
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::requirementsTest()
+{
+    ::fwActivities::IValidator::sptr validator =
+        ::fwActivities::validator::factory::New("::fwActivities::validator::DefaultActivity");
+    CPPUNIT_ASSERT(validator);
+
+    ::fwActivities::IActivityValidator::sptr activityValidator =
+        ::fwActivities::IActivityValidator::dynamicCast(validator);
+    CPPUNIT_ASSERT(activityValidator);
+
+    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::New();
+    activitySeries->setActivityConfigId("Test0");
+
+    ::fwActivities::IValidator::ValidationType validation;
+
+    ::fwData::Composite::sptr data = ::fwData::Composite::New();
+    activitySeries->setData(data);
+
+    ::fwMedData::ImageSeries::sptr imageSeries  = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ImageSeries::sptr imageSeries2 = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries  = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries2 = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries3 = ::fwMedData::ModelSeries::New();
+    ::fwData::Composite::sptr modelCompo        = ::fwData::Composite::New();
+
+    {
+        // Empty data should NOT be valid
+        validation = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Empty data should NOT be valid", false, validation.first);
+    }
+    {
+        // data with only an image should NOT be valid
+        (*data)["imageSeries"] = imageSeries;
+
+        validation = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with only an image should NOT be valid", false, validation.first);
+    }
+    {
+        // data with an image and an empty model composite should be valid
+        (*data)["modelSeries"] = modelCompo;
+
+        validation = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and an empty model composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and a model in the composite should be valid
+        (*modelCompo)["key1"] = modelSeries;
+
+        validation = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and a model in the composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and two models in the composite should be valid
+        (*modelCompo)["key2"] = modelSeries2;
+
+        validation = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and two models in the composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and 3 models in the composite should NOT be valid
+        (*modelCompo)["key3"] = modelSeries2;
+
+        validation = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and 3 models in the composite should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // data with an image and an image in the model composite should NOT be valid
+        modelCompo->getContainer().erase("key3");
+        (*modelCompo)["key2"] = imageSeries;
+        validation            = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and an image in the model composite should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // data with a null image and a model in the composite should NOT be valid
+        modelCompo->getContainer().erase("key2");
+        (*data)["imageSeries"] = nullptr;
+        validation             = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with a null image and a model in the composite should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // data with a null image and a wrong key in the model composite should NOT be valid
+        (*modelCompo)["myKey"] = modelSeries2;
+        (*data)["imageSeries"] = imageSeries;
+        validation             = activityValidator->checkRequirements(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE(
+            "data with a null image and a wrong key in the model composite should NOT be valid",
+            false, validation.first);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::parametersTest()
+{
+    ::fwActivities::IValidator::sptr validator =
+        ::fwActivities::validator::factory::New("::fwActivities::validator::DefaultActivity");
+    CPPUNIT_ASSERT(validator);
+
+    ::fwActivities::IActivityValidator::sptr activityValidator =
+        ::fwActivities::IActivityValidator::dynamicCast(validator);
+    CPPUNIT_ASSERT(activityValidator);
+
+    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::New();
+    activitySeries->setActivityConfigId("Test0");
+
+    ::fwActivities::IValidator::ValidationType validation;
+
+    ::fwData::Composite::sptr data = ::fwData::Composite::New();
+    activitySeries->setData(data);
+
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::New();
+    ::fwData::Image::sptr img                  = ::fwData::Image::New();
+    ::fwTest::generator::Image::generateRandomImage(img, ::fwTools::Type::create<std::uint8_t>());
+    imageSeries->setImage(img);
+
+    ::fwMedData::ModelSeries::sptr modelSeries  = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries2 = ::fwMedData::ModelSeries::New();
+    ::fwData::Composite::sptr modelCompo        = ::fwData::Composite::New();
+
+    {
+        // Empty data should NOT be valid
+        validation = activityValidator->checkParameters(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Empty data should NOT be valid", false, validation.first);
+    }
+    {
+        // data with only an image should NOT be valid
+        (*data)["imageSeries"] = imageSeries;
+
+        validation = activityValidator->checkParameters(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with only an image should NOT be valid", false, validation.first);
+    }
+    {
+        // data with an image and an empty model composite should be valid
+        (*data)["modelSeries"] = modelCompo;
+
+        validation = activityValidator->checkParameters(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and an empty model composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and a model in the composite should be valid
+        (*modelCompo)["key1"] = modelSeries;
+
+        validation = activityValidator->checkParameters(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and a model in the composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and two models in the composite should be valid
+        (*modelCompo)["key2"] = modelSeries2;
+
+        validation = activityValidator->checkParameters(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and two models in the composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with a null image and a model in the composite should NOT be valid
+        (*data)["imageSeries"] = nullptr;
+        validation             = activityValidator->checkParameters(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with a null image and a model in the composite should NOT be valid",
+                                     false, validation.first);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::objectTest()
+{
+    ::fwActivities::IValidator::sptr validator =
+        ::fwActivities::validator::factory::New("::fwActivities::validator::DefaultActivity");
+    CPPUNIT_ASSERT(validator);
+
+    ::fwActivities::IActivityValidator::sptr activityValidator =
+        ::fwActivities::IActivityValidator::dynamicCast(validator);
+    CPPUNIT_ASSERT(activityValidator);
+
+    ::fwActivities::IValidator::ValidationType validation;
+
+    ::fwData::Image::sptr img1 = ::fwData::Image::New();
+    ::fwData::Image::sptr img2 = ::fwData::Image::New();
+    ::fwData::Image::sptr img3 = ::fwData::Image::New();
+    ::fwTest::generator::Image::generateRandomImage(img1, ::fwTools::Type::create<std::uint8_t>());
+    ::fwTest::generator::Image::generateImage(img2, img1->getSize(), img1->getSpacing(),
+                                              img1->getOrigin(), img1->getType());
+    ::fwTest::generator::Image::generateRandomImage(img3, ::fwTools::Type::create<std::uint8_t>());
+
+    ::fwData::Vector::sptr vector = ::fwData::Vector::New();
+    vector->getContainer().push_back(img1);
+    vector->getContainer().push_back(img2);
+
+    ::fwData::Vector::sptr vector2 = ::fwData::Vector::New();
+    vector2->getContainer().push_back(img1);
+    vector2->getContainer().push_back(img3);
+
+    {
+        // An empty validator implementation should be valid
+        validation = activityValidator->checkObject(img1, "");
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("An empty validator implementation should be valid", true, validation.first);
+    }
+    {
+        // An inexisting validator implementation should NOT be valid
+        validation = activityValidator->checkObject(img1, "::inexisting::validator");
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("An inexisting validator implementation should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // An existing validator implementation with valid data should be valid
+        validation = activityValidator->checkObject(vector, "::fwActivities::validator::ImageProperties");
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("An existing validator implementation with valid data should be valid",
+                                     true, validation.first);
+    }
+    {
+        // An existing validator implementation with invalid data should NOT be valid
+        validation = activityValidator->checkObject(vector2, "::fwActivities::validator::ImageProperties");
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("An existing validator implementation with invalid data should NOT be valid",
+                                     false, validation.first);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::validatorTest()
+{
+    ::fwActivities::IValidator::sptr validator =
+        ::fwActivities::validator::factory::New("::fwActivities::validator::DefaultActivity");
+    CPPUNIT_ASSERT(validator);
+
+    ::fwActivities::IActivityValidator::sptr activityValidator =
+        ::fwActivities::IActivityValidator::dynamicCast(validator);
+    CPPUNIT_ASSERT(activityValidator);
+
+    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::New();
+    activitySeries->setActivityConfigId("Test0");
+
+    ::fwActivities::IValidator::ValidationType validation;
+
+    ::fwData::Composite::sptr data = ::fwData::Composite::New();
+    activitySeries->setData(data);
+
+    ::fwMedData::ImageSeries::sptr imageSeries  = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ImageSeries::sptr imageSeries2 = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries  = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries2 = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries3 = ::fwMedData::ModelSeries::New();
+    ::fwData::Composite::sptr modelCompo        = ::fwData::Composite::New();
+
+    ::fwData::Image::sptr img = ::fwData::Image::New();
+    ::fwTest::generator::Image::generateRandomImage(img, ::fwTools::Type::create<std::uint8_t>());
+    imageSeries->setImage(img);
+
+    {
+        // Empty data should NOT be valid
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Empty data should NOT be valid", false, validation.first);
+    }
+    {
+        // data with only an image should NOT be valid
+        (*data)["imageSeries"] = imageSeries;
+
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with only an image should NOT be valid", false, validation.first);
+    }
+    {
+        // data with an image and an empty model composite should be valid
+        (*data)["modelSeries"] = modelCompo;
+
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and an empty model composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and a model in the composite should be valid
+        (*modelCompo)["key1"] = modelSeries;
+
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and a model in the composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and two models in the composite should be valid
+        (*modelCompo)["key2"] = modelSeries2;
+
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and two models in the composite should be valid",
+                                     true, validation.first);
+    }
+    {
+        // data with an image and 3 models in the composite should NOT be valid
+        (*modelCompo)["key3"] = modelSeries2;
+
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and 3 models in the composite should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // data with an image and an image in the model composite should NOT be valid
+        modelCompo->getContainer().erase("key3");
+        (*modelCompo)["key2"] = imageSeries;
+        validation            = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with an image and an image in the model composite should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // data with a null image and a model in the composite should NOT be valid
+        modelCompo->getContainer().erase("key2");
+        (*data)["imageSeries"] = nullptr;
+        validation             = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("data with a null image and a model in the composite should NOT be valid",
+                                     false, validation.first);
+    }
+    {
+        // data with a null image and a wrong key in the model composite should NOT be valid
+        (*modelCompo)["myKey"] = modelSeries2;
+        (*data)["imageSeries"] = imageSeries;
+        validation             = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE(
+            "data with a null image and a wrong key in the model composite should NOT be valid",
+            false, validation.first);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultActivityTest::bigActivityTest()
+{
+    ::fwActivities::IValidator::sptr validator =
+        ::fwActivities::validator::factory::New("::fwActivities::validator::DefaultActivity");
+    CPPUNIT_ASSERT(validator);
+
+    ::fwActivities::IActivityValidator::sptr activityValidator =
+        ::fwActivities::IActivityValidator::dynamicCast(validator);
+    CPPUNIT_ASSERT(activityValidator);
+
+    ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::New();
+    activitySeries->setActivityConfigId("Test1");
+
+    ::fwActivities::IValidator::ValidationType validation;
+
+    ::fwData::Composite::sptr data = ::fwData::Composite::New();
+    activitySeries->setData(data);
+
+    ::fwMedData::ImageSeries::sptr imageSeries1 = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ImageSeries::sptr imageSeries2 = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ImageSeries::sptr imageSeries3 = ::fwMedData::ImageSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries1 = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries2 = ::fwMedData::ModelSeries::New();
+    ::fwMedData::ModelSeries::sptr modelSeries3 = ::fwMedData::ModelSeries::New();
+
+    ::fwData::TransformationMatrix3D::sptr matrix = ::fwData::TransformationMatrix3D::New();
+
+    ::fwData::Float::sptr floatObj  = ::fwData::Float::New();
+    ::fwData::Integer::sptr intObj  = ::fwData::Integer::New();
+    ::fwData::Boolean::sptr boolObj = ::fwData::Boolean::New();
+
+    ::fwData::Composite::sptr compoStr = ::fwData::Composite::New();
+
+    (*compoStr)["Item1"] = ::fwData::String::New("myItem1");
+    (*compoStr)["Item2"] = ::fwData::String::New("myItem3");
+    (*compoStr)["Item3"] = ::fwData::String::New("myItem3");
+
+    ::fwData::Vector::sptr modelVector = ::fwData::Vector::New();
+    ::fwData::Vector::sptr imageVector = ::fwData::Vector::New();
+
+    ::fwData::Image::sptr img1 = ::fwData::Image::New();
+    ::fwData::Image::sptr img2 = ::fwData::Image::New();
+    ::fwData::Image::sptr img3 = ::fwData::Image::New();
+    ::fwTest::generator::Image::generateRandomImage(img1, ::fwTools::Type::create<std::uint8_t>());
+    ::fwTest::generator::Image::generateRandomImage(img2, ::fwTools::Type::create<std::uint8_t>());
+    ::fwTest::generator::Image::generateImage(img3, img2->getSize(), img2->getSpacing(),
+                                              img2->getOrigin(), img2->getType());
+    imageSeries1->setImage(img1);
+    imageSeries2->setImage(img2);
+    imageSeries3->setImage(img3);
+
+    modelVector->getContainer().push_back(modelSeries2);
+    modelVector->getContainer().push_back(modelSeries3);
+    imageVector->getContainer().push_back(imageSeries2);
+    imageVector->getContainer().push_back(imageSeries3);
+
+    (*data)["imageSeries"]          = imageSeries1;
+    (*data)["modelSeries"]          = modelSeries1;
+    (*data)["vectorImage"]          = imageVector;
+    (*data)["vectorModel"]          = modelVector;
+    (*data)["transformationMatrix"] = matrix;
+    (*data)["float"]                = floatObj;
+    (*data)["int"]                  = intObj;
+    (*data)["boolean"]              = boolObj;
+    (*data)["String"]               = compoStr;
+
+    {
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Activity with correct data should be valid", true, validation.first);
+    }
+    {
+        data->getContainer().erase("int");
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Activity without an autogenerated data should NOT be valid",
+                                     false, validation.first);
+        (*data)["int"] = intObj;
+    }
+    {
+        data->getContainer().erase("transformationMatrix");
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Activity without an autocreated data should NOT be valid",
+                                     false, validation.first);
+        (*data)["transformationMatrix"] = matrix;
+    }
+    {
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Activity with correct data should be valid", true, validation.first);
+    }
+    {
+        ::fwData::Image::SpacingType spacing(3, 45);
+        img3->setSpacing(spacing);
+        validation = activityValidator->validate(activitySeries);
+        CPPUNIT_ASSERT_EQUAL_MESSAGE("Activity with different image properties data should NOT be valid",
+                                     false, validation.first);
+        img3->setSpacing(img2->getSpacing());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwActivities
diff --git a/SrcLib/core/fwActivities/test/tu/src/validator/ImagePropertiesTest.cpp b/SrcLib/core/fwActivities/test/tu/src/validator/ImagePropertiesTest.cpp
new file mode 100644
index 0000000..3f9fa81
--- /dev/null
+++ b/SrcLib/core/fwActivities/test/tu/src/validator/ImagePropertiesTest.cpp
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "validator/ImagePropertiesTest.hpp"
+
+#include <fwActivities/IObjectValidator.hpp>
+#include <fwActivities/IValidator.hpp>
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwMedData/ActivitySeries.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/Extension.hpp>
+#include <fwRuntime/io/BundleDescriptorReader.hpp>
+
+#include <fwTest/generator/Image.hpp>
+
+#include <cstdint>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwActivities::ut::ImagePropertiesTest );
+
+namespace fwActivities
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void ImagePropertiesTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void ImagePropertiesTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void ImagePropertiesTest::propertiesTest()
+{
+    ::fwActivities::IValidator::sptr validator =
+        ::fwActivities::validator::factory::New("::fwActivities::validator::ImageProperties");
+    CPPUNIT_ASSERT(validator);
+
+    ::fwActivities::IObjectValidator::sptr objValidator = ::fwActivities::IObjectValidator::dynamicCast(validator);
+    CPPUNIT_ASSERT(objValidator);
+
+    {
+        ::fwData::Image::sptr img1 = ::fwData::Image::New();
+        ::fwData::Image::sptr img2 = ::fwData::Image::New();
+        ::fwTest::generator::Image::generateRandomImage(img1, ::fwTools::Type::create<std::uint8_t>());
+        ::fwTest::generator::Image::generateRandomImage(img2, ::fwTools::Type::create<std::uint8_t>());
+
+        ::fwData::Vector::sptr vector = ::fwData::Vector::New();
+        vector->getContainer().push_back(img1);
+        vector->getContainer().push_back(img2);
+
+        ::fwActivities::IValidator::ValidationType validation;
+
+        validation = objValidator->validate(vector);
+        CPPUNIT_ASSERT_EQUAL(false, validation.first);
+
+        ::fwData::Composite::sptr composite = ::fwData::Composite::New();
+        (*composite)["img1"]                = img1;
+        (*composite)["img2"]                = img2;
+
+        validation = objValidator->validate(vector);
+        CPPUNIT_ASSERT_EQUAL(false, validation.first);
+    }
+
+
+    {
+        ::fwData::Image::SizeType size(3, 100);
+        ::fwData::Image::sptr img1 = ::fwData::Image::New();
+        ::fwData::Image::sptr img2 = ::fwData::Image::New();
+
+        ::fwTest::generator::Image::generateRandomImage(img1, ::fwTools::Type::create<std::uint8_t>());
+
+        ::fwTest::generator::Image::generateImage(img2, img1->getSize(), img1->getSpacing(),
+                                                  img1->getOrigin(), img1->getType());
+
+        ::fwData::Vector::sptr vector = ::fwData::Vector::New();
+        vector->getContainer().push_back(img1);
+        vector->getContainer().push_back(img2);
+
+        ::fwActivities::IValidator::ValidationType validation;
+
+        validation = objValidator->validate(vector);
+        CPPUNIT_ASSERT_EQUAL(true, validation.first);
+
+        ::fwData::Composite::sptr composite = ::fwData::Composite::New();
+        (*composite)["img1"]                = img1;
+        (*composite)["img2"]                = img2;
+
+        validation = objValidator->validate(vector);
+        CPPUNIT_ASSERT_EQUAL(true, validation.first);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwActivities
diff --git a/SrcLib/core/fwAtomConversion/CMakeLists.txt b/SrcLib/core/fwAtomConversion/CMakeLists.txt
index af732ee..1169074 100644
--- a/SrcLib/core/fwAtomConversion/CMakeLists.txt
+++ b/SrcLib/core/fwAtomConversion/CMakeLists.txt
@@ -1,16 +1,3 @@
-
 fwLoadProperties()
 
-fwUseForwardInclude(
-    fwAtoms
-    fwCamp
-    fwCore
-    fwMemory
-    fwTools
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-
 
diff --git a/SrcLib/core/fwAtomConversion/bin/build.options b/SrcLib/core/fwAtomConversion/bin/build.options
deleted file mode 100644
index de44af4..0000000
--- a/SrcLib/core/fwAtomConversion/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-USE = ['boost','camp']
-LIB = ['fwData_0.1', 'fwAtoms_0.1', 'fwDataCamp_0.1']
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomToDataMappingVisitor.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomToDataMappingVisitor.hpp
index 2387e93..04fe35d 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomToDataMappingVisitor.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomToDataMappingVisitor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,11 +14,11 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomConversion
@@ -37,11 +37,11 @@ public:
 
     /// Constructor. Initializes visitor.
     FWATOMCONVERSION_API AtomToDataMappingVisitor(
-            SPTR(::fwData::Object) dataObj,
-            SPTR(::fwAtoms::Object) atomObj,
-            AtomVisitor::DataCacheType & cache,
-            const AtomVisitor::IReadPolicy &uuidPolicy
-            );
+        SPTR(::fwData::Object)dataObj,
+        SPTR(::fwAtoms::Object)atomObj,
+        AtomVisitor::DataCacheType & cache,
+        const AtomVisitor::IReadPolicy &uuidPolicy
+        );
 
     /// Destructor. Does nothing.
     FWATOMCONVERSION_API virtual ~AtomToDataMappingVisitor();
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomVisitor.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomVisitor.hpp
index dfdfdbb..ad977cf 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomVisitor.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/AtomVisitor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,7 +17,7 @@
 
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomConversion
@@ -45,20 +45,23 @@ public:
     /**
      * @brief This policy reuses the data associated with an existing uuid
      */
-    struct ReusePolicy: IReadPolicy
-    { FWATOMCONVERSION_API virtual SPTR(::fwData::Object) operator() (const std::string &uuid, const std::string &classname) const; };
+    struct ReusePolicy : IReadPolicy
+    { FWATOMCONVERSION_API virtual SPTR(::fwData::Object) operator() (const std::string &uuid,
+                                                                      const std::string &classname) const; };
 
     /**
      * @brief This policy changes data's uuid if it already exists
      */
-    struct ChangePolicy: IReadPolicy
-    { FWATOMCONVERSION_API virtual SPTR(::fwData::Object) operator() (const std::string &uuid, const std::string &classname) const; };
+    struct ChangePolicy : IReadPolicy
+    { FWATOMCONVERSION_API virtual SPTR(::fwData::Object) operator() (const std::string &uuid,
+                                                                      const std::string &classname) const; };
 
     /**
      * @brief This policy throws an exception if the loaded uuid is not available
      */
-    struct StrictPolicy: IReadPolicy
-    { FWATOMCONVERSION_API virtual SPTR(::fwData::Object) operator() (const std::string &uuid, const std::string &classname) const; };
+    struct StrictPolicy : IReadPolicy
+    { FWATOMCONVERSION_API virtual SPTR(::fwData::Object) operator() (const std::string &uuid,
+                                                                      const std::string &classname) const; };
     /** @} */
 
 
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/DataVisitor.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/DataVisitor.hpp
index 376a958..321b395 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/DataVisitor.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/DataVisitor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,12 +17,12 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomConversion
@@ -55,7 +55,7 @@ public:
      * Creates a new ::fwAtoms::Object. Sets : ID from dataObj UUID, meta info
      * CLASSNAME_METAINFO from dataObj classname() and add tag information from camp data
      */
-    FWATOMCONVERSION_API DataVisitor( SPTR(::fwData::Object) dataObj, AtomCacheType & cache );
+    FWATOMCONVERSION_API DataVisitor( SPTR(::fwData::Object)dataObj, AtomCacheType & cache );
 
     /// Destructor. Does nothing.
     FWATOMCONVERSION_API virtual ~DataVisitor();
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp
index f1d0b8e..234e3f0 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/camp/ValueMapper.hpp
@@ -1,12 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#ifndef __FWATOMCONVERSION_VALUEMAPPER_HPP__
-#define __FWATOMCONVERSION_VALUEMAPPER_HPP__
+#ifndef __FWATOMCONVERSION_CAMP_VALUEMAPPER_HPP__
+#define __FWATOMCONVERSION_CAMP_VALUEMAPPER_HPP__
 #include <camp/valuemapper.hpp>
 #include <fwAtoms/Blob.hpp>
 #include <fwMemory/BufferObject.hpp>
@@ -18,7 +18,7 @@ namespace camp_ext
 template <>
 struct ValueMapper< ::fwAtoms::Blob::sptr >
 {
-    typedef ::fwAtoms::Blob::sptr  ReturnType;
+    typedef ::fwAtoms::Blob::sptr ReturnType;
 
     static const int type = camp::userType;
 
@@ -62,4 +62,4 @@ struct ValueMapper< ::fwAtoms::Blob::sptr >
 }
 
 
-#endif /* __FWATOMCONVERSION_VALUEMAPPER_HPP__ */
+#endif /* __FWATOMCONVERSION_CAMP_VALUEMAPPER_HPP__ */
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/config.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/config.hpp
deleted file mode 100644
index 5bdb744..0000000
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWATOMCONVERSION_CONFIG_HPP_
-#define _FWATOMCONVERSION_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWATOMCONVERSION_EXPORTS
-            #define FWATOMCONVERSION_API __declspec(dllexport)
-        #else
-            #define FWATOMCONVERSION_API __declspec(dllimport)
-        #endif
-
-        #define FWATOMCONVERSION_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWATOMCONVERSION_EXPORTS
-            #define FWATOMCONVERSION_API __attribute__ ((visibility("default")))
-            #define FWATOMCONVERSION_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWATOMCONVERSION_API __attribute__ ((visibility("hidden")))
-            #define FWATOMCONVERSION_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWATOMCONVERSION_API
-        #define FWATOMCONVERSION_CLASS_API
-
-    #endif
-
-#endif //FWATOMCONVERSION_API
-
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/convert.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/convert.hpp
index 5d5ba8e..232b337 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/convert.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/convert.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,79 +13,79 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomConversion
 {
 
-    /**
-     * @brief Helper to convert a ::fwData::Object to a ::fwAtoms::Object
-     *
-     * @param data data object to convert
-     * @return Converted ::fwAtoms::Object
-     *
-     * @throw ::camp::ClassNotFound if data class is not found in camp world during visit
-     * @throw ::fwAtomConversion::exception::ConversionNotManaged if data has attribute type not managed by algorithm
-     *
-     * @note All data must be camped or mapped by a specific ::fwAtomConversion::mapper::Base
-     * @note fwData camp property names are used like key to store attributes in fwAtoms::Object
-     * @note sub objects multi-referenced in the fwData structure are represented by the same fwAtoms::Object
-     * ( also multi-referenced in fwAtoms structure )
-     * @note null ::fwData::Object::sptr are kept and are converted in null ::fwAtoms::Base::sptr
-     * @note Only std::vector of type fwData::Object::sptr, enum, bool, string, int or real are managed
-     * @note Only std::map with key value : string, int or real are managed
-     * @note Only std::map with type value : fwData::Object::sptr, bool, enum, string, int or real are managed
-     */
-    FWATOMCONVERSION_API SPTR(::fwAtoms::Object) convert( const SPTR(::fwData::Object) &data );
+/**
+ * @brief Helper to convert a ::fwData::Object to a ::fwAtoms::Object
+ *
+ * @param data data object to convert
+ * @return Converted ::fwAtoms::Object
+ *
+ * @throw ::camp::ClassNotFound if data class is not found in camp world during visit
+ * @throw ::fwAtomConversion::exception::ConversionNotManaged if data has attribute type not managed by algorithm
+ *
+ * @note All data must be camped or mapped by a specific ::fwAtomConversion::mapper::Base
+ * @note fwData camp property names are used like key to store attributes in fwAtoms::Object
+ * @note sub objects multi-referenced in the fwData structure are represented by the same fwAtoms::Object
+ * ( also multi-referenced in fwAtoms structure )
+ * @note null ::fwData::Object::sptr are kept and are converted in null ::fwAtoms::Base::sptr
+ * @note Only std::vector of type fwData::Object::sptr, enum, bool, string, int or real are managed
+ * @note Only std::map with key value : string, int or real are managed
+ * @note Only std::map with type value : fwData::Object::sptr, bool, enum, string, int or real are managed
+ */
+FWATOMCONVERSION_API SPTR(::fwAtoms::Object) convert( const SPTR(::fwData::Object) &data );
 
-    /**
-     * @brief Converts a ::fwData::Object to a ::fwAtoms::Object.
-     * @param dataObj data to convert
-     * @param cache   cache to register already converted data, used when a data is referenced multiple times.
-     * @return Returns the converted atom.
-     * @throw ::camp::ClassNotFound if data class is not found in camp world during visit
-     */
-    FWATOMCONVERSION_API SPTR(::fwAtoms::Object) convert( const SPTR(::fwData::Object) &dataObj,
-                                                          DataVisitor::AtomCacheType & cache );
+/**
+ * @brief Converts a ::fwData::Object to a ::fwAtoms::Object.
+ * @param dataObj data to convert
+ * @param cache   cache to register already converted data, used when a data is referenced multiple times.
+ * @return Returns the converted atom.
+ * @throw ::camp::ClassNotFound if data class is not found in camp world during visit
+ */
+FWATOMCONVERSION_API SPTR(::fwAtoms::Object) convert( const SPTR(::fwData::Object) &dataObj,
+                                                      DataVisitor::AtomCacheType & cache );
 
-    /**
-     * @brief Helper to convert a ::fwAtoms::Object to a ::fwData::Object
-     *
-     * @param atom atom to convert
-     * @param uuidPolicy AtomVisitor policy
-     * @return Converted ::fwData::Object
-     *
-     * @throw ::camp::ClassNotFound if data class is not found in camp world during visit
-     * @throw ::fwAtomConversion::exception::DataFactoryNotFound if the data class is not found in ::fwData::factory
-     * @throw ::fwAtomConversion::exception::DuplicatedDataUUID if the data uuid already exists in the system.
-     * @throw ::fwAtomConversion::exception::ConversionNotManaged if atom is not data compliant
-     *
-     * @note see notes of convert(::fwData::Object::sptr data) method
-     */
-    FWATOMCONVERSION_API SPTR(::fwData::Object) convert(
-                                        const SPTR(::fwAtoms::Object) &atom,
-                                        const AtomVisitor::IReadPolicy &uuidPolicy = AtomVisitor::ChangePolicy()
-                                        );
+/**
+ * @brief Helper to convert a ::fwAtoms::Object to a ::fwData::Object
+ *
+ * @param atom atom to convert
+ * @param uuidPolicy AtomVisitor policy
+ * @return Converted ::fwData::Object
+ *
+ * @throw ::camp::ClassNotFound if data class is not found in camp world during visit
+ * @throw ::fwAtomConversion::exception::DataFactoryNotFound if the data class is not found in ::fwData::factory
+ * @throw ::fwAtomConversion::exception::DuplicatedDataUUID if the data uuid already exists in the system.
+ * @throw ::fwAtomConversion::exception::ConversionNotManaged if atom is not data compliant
+ *
+ * @note see notes of convert(::fwData::Object::sptr data) method
+ */
+FWATOMCONVERSION_API SPTR(::fwData::Object) convert(
+    const SPTR(::fwAtoms::Object) &atom,
+    const AtomVisitor::IReadPolicy &uuidPolicy = AtomVisitor::ChangePolicy()
+    );
 
-    /**
-     * @brief Converts a ::fwAtoms::Object to a ::fwData::Object
-     *
-     * @param atomObj atom to convert
-     * @param cache  cache to register the atoms already converted, used when an atom is referenced multiple times
-     * @param uuidPolicy AtomVisitor policy
-     * @return Converted ::fwData::Object.
-     *
-     * @throw ::fwAtomConversion::exception::DataFactoryNotFound if the data class is not found in ::fwData::factory
-     * @throw ::fwAtomConversion::exception::DuplicatedDataUUID if the data uuid already exists in the system.
-     */
-    FWATOMCONVERSION_API SPTR(::fwData::Object) convert( const SPTR(::fwAtoms::Object) &atomObj,
-                                                         AtomVisitor::DataCacheType & cache,
-                                                         const AtomVisitor::IReadPolicy &uuidPolicy );
+/**
+ * @brief Converts a ::fwAtoms::Object to a ::fwData::Object
+ *
+ * @param atomObj atom to convert
+ * @param cache  cache to register the atoms already converted, used when an atom is referenced multiple times
+ * @param uuidPolicy AtomVisitor policy
+ * @return Converted ::fwData::Object.
+ *
+ * @throw ::fwAtomConversion::exception::DataFactoryNotFound if the data class is not found in ::fwData::factory
+ * @throw ::fwAtomConversion::exception::DuplicatedDataUUID if the data uuid already exists in the system.
+ */
+FWATOMCONVERSION_API SPTR(::fwData::Object) convert( const SPTR(::fwAtoms::Object) &atomObj,
+                                                     AtomVisitor::DataCacheType & cache,
+                                                     const AtomVisitor::IReadPolicy &uuidPolicy );
 
 } // end namespace fwAtomConversion
 
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ClassnameMismatch.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ClassnameMismatch.hpp
index f4a7959..c750736 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ClassnameMismatch.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ClassnameMismatch.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,9 @@ namespace exception
 /// Throw this exception when a new data is created with a specific uuid, but this data already exists in system
 struct FWATOMCONVERSION_CLASS_API ClassnameMismatch : ::fwCore::Exception
 {
-    FWATOMCONVERSION_API ClassnameMismatch( const std::string &err ) : ::fwCore::Exception(err) {}
+    FWATOMCONVERSION_API ClassnameMismatch( const std::string &err ) : ::fwCore::Exception(err)
+    {
+    }
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ConversionNotManaged.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ConversionNotManaged.hpp
index 0eaedd4..201b034 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ConversionNotManaged.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ConversionNotManaged.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,9 @@ namespace exception
 /// Throw this exception when a conversion between data and atom is not managed (error message explains the reasons)
 struct FWATOMCONVERSION_CLASS_API ConversionNotManaged : ::fwCore::Exception
 {
-    FWATOMCONVERSION_API ConversionNotManaged( const std::string &err ) : ::fwCore::Exception(err) {}
+    FWATOMCONVERSION_API ConversionNotManaged( const std::string &err ) : ::fwCore::Exception(err)
+    {
+    }
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DataFactoryNotFound.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DataFactoryNotFound.hpp
index 6a3adf1..90890e9 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DataFactoryNotFound.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DataFactoryNotFound.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,9 @@ namespace exception
 /// Throw this exception when an object classname is not found exception in ::fwData::factory.
 struct FWATOMCONVERSION_CLASS_API DataFactoryNotFound : ::fwCore::Exception
 {
-    FWATOMCONVERSION_API DataFactoryNotFound( const std::string &err ) : ::fwCore::Exception(err) {}
+    FWATOMCONVERSION_API DataFactoryNotFound( const std::string &err ) : ::fwCore::Exception(err)
+    {
+    }
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DuplicatedDataUUID.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DuplicatedDataUUID.hpp
index c556208..17407e7 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DuplicatedDataUUID.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/DuplicatedDataUUID.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,9 @@ namespace exception
 /// Throw this exception when a new data is created with a specific uuid, but this data already exists in system
 struct FWATOMCONVERSION_CLASS_API DuplicatedDataUUID : ::fwCore::Exception
 {
-    FWATOMCONVERSION_API DuplicatedDataUUID( const std::string &err ) : ::fwCore::Exception(err) {}
+    FWATOMCONVERSION_API DuplicatedDataUUID( const std::string &err ) : ::fwCore::Exception(err)
+    {
+    }
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/NullPointer.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/NullPointer.hpp
index 4e68cb4..cef7ea5 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/NullPointer.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/NullPointer.hpp
@@ -1,4 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +20,7 @@ namespace exception
 /// Null pointer exception.
 struct NullPointer : ::fwCore::Exception
 {
-    FWATOMCONVERSION_API NullPointer ( const std::string &err ) ;
+    FWATOMCONVERSION_API NullPointer ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ObjectNotFound.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ObjectNotFound.hpp
index 499e02c..c0df4c3 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ObjectNotFound.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/exception/ObjectNotFound.hpp
@@ -1,4 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +20,7 @@ namespace exception
 /// Object not found exception.
 struct ObjectNotFound : ::fwCore::Exception
 {
-    FWATOMCONVERSION_API ObjectNotFound ( const std::string &err ) ;
+    FWATOMCONVERSION_API ObjectNotFound ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Base.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Base.hpp
index d051ef8..6ba8a18 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Base.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Base.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,11 +16,11 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomConversion
@@ -45,13 +45,15 @@ public:
         Registrar(std::string functorKey)
         {
             ::fwAtomConversion::mapper::registry::get()->addFactory(
-                    functorKey,
-                    &::fwAtomConversion::mapper::factory::New<T>
-                    );
+                functorKey,
+                &::fwAtomConversion::mapper::factory::New<T>
+                );
         }
     };
 
-    virtual ~Base(){};
+    virtual ~Base()
+    {
+    }
 
     /**
      * @brief Convert a ::fwData::Object to a ::fwAtoms::Object.
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Graph.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Graph.hpp
index f4cb8dd..5e1ac2d 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Graph.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/Graph.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,12 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomConversion
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/factory/new.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/factory/new.hpp
index 5b8a1fe..ca4df21 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/factory/new.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,7 +8,6 @@
 #define __FWATOMCONVERSION_MAPPER_FACTORY_NEW_HPP__
 
 #include <string>
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -28,12 +27,12 @@ namespace factory
 template<class CLASSNAME > SPTR( CLASSNAME ) New();
 
 FWATOMCONVERSION_API SPTR(::fwAtomConversion::mapper::Base) New(
-        const ::fwAtomConversion::mapper::registry::KeyType & classname );
+    const ::fwAtomConversion::mapper::registry::KeyType & classname );
 
 
 template<class CLASSNAME > SPTR( CLASSNAME ) New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >();
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >();
     return obj;
 }
 
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/detail.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/detail.hpp
index c38fcff..fed1044 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/detail.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtomConversion::mapper::Base)() , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtomConversion::mapper::Base)(), KeyType > Type;
 
 FWATOMCONVERSION_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/macros.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/macros.hpp
index fbab716..2016a00 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/macros.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/mapper/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMCONVERSION_MAPPER_REGISTRY_MACRO_HPP__
-#define __FWATOMCONVERSION_MAPPER_REGISTRY_MACRO_HPP__
+#ifndef __FWATOMCONVERSION_MAPPER_REGISTRY_MACROS_HPP__
+#define __FWATOMCONVERSION_MAPPER_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/stringize.hpp>
 #include <boost/preprocessor/cat.hpp>
@@ -28,4 +28,4 @@ namespace registry
 } // end namespace mapper
 } // end namespace fwAtomConversion
 
-#endif /*__FWATOMCONVERSION_MAPPER_REGISTRY_MACRO_HPP__*/
+#endif /*__FWATOMCONVERSION_MAPPER_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/namespace.hpp b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/namespace.hpp
index fbe6b0c..91b10b9 100644
--- a/SrcLib/core/fwAtomConversion/include/fwAtomConversion/namespace.hpp
+++ b/SrcLib/core/fwAtomConversion/include/fwAtomConversion/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp
index cf7cade..e095fc0 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomToDataMappingVisitor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -41,7 +41,9 @@ public:
     NumericSimplePropertyVisitor( const ::fwAtoms::Numeric::sptr & typedAtom,
                                   ::camp::UserObject & campDataObj,
                                   const camp::SimpleProperty& property ) :
-        m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property) {}
+        m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property)
+    {
+    }
 
     void operator()( ::boost::blank & ) const
     {
@@ -75,7 +77,9 @@ public:
                                  ::camp::UserObject & campDataObj,
                                  const camp::ArrayProperty& property,
                                  unsigned int index ) :
-                 m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property), m_index(index) {}
+        m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property), m_index(index)
+    {
+    }
 
     void operator()( ::boost::blank & ) const
     {
@@ -129,7 +133,9 @@ public:
                                ::camp::UserObject & campDataObj,
                                const camp::MapProperty& property,
                                const std::string & key ) :
-        m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property), m_key(key) {}
+        m_typedAtom(typedAtom), m_campDataObj(campDataObj), m_property(property), m_key(key)
+    {
+    }
 
     void operator()( ::boost::blank & ) const
     {
@@ -151,19 +157,22 @@ public:
 //-----------------------------------------------------------------------------
 
 AtomToDataMappingVisitor::AtomToDataMappingVisitor(
-        ::fwData::Object::sptr dataObj,
-         ::fwAtoms::Object::sptr atomObj,
-          AtomVisitor::DataCacheType & cache,
-          const AtomVisitor::IReadPolicy &uuidPolicy)
- : m_dataObj(dataObj),
-   m_campDataObj( m_dataObj.get() ),
-   m_atomObj(atomObj),
-   m_cache(cache),
-   m_uuidPolicy(uuidPolicy)
-{}
+    ::fwData::Object::sptr dataObj,
+    ::fwAtoms::Object::sptr atomObj,
+    AtomVisitor::DataCacheType & cache,
+    const AtomVisitor::IReadPolicy &uuidPolicy)
+    : m_dataObj(dataObj),
+      m_campDataObj( m_dataObj.get() ),
+      m_atomObj(atomObj),
+      m_cache(cache),
+      m_uuidPolicy(uuidPolicy)
+{
+}
 
 
-AtomToDataMappingVisitor::~AtomToDataMappingVisitor(){}
+AtomToDataMappingVisitor::~AtomToDataMappingVisitor()
+{
+}
 
 
 void AtomToDataMappingVisitor::visit(const camp::SimpleProperty& property)
@@ -173,22 +182,22 @@ void AtomToDataMappingVisitor::visit(const camp::SimpleProperty& property)
 
     std::stringstream msg;
     msg << "Atom attribute is not well formed. Attribute '" << name << "' missing for data conversion";
-    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), ! atom );
+    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), !atom );
 
     switch( atom->type() )
     {
-    case ::fwAtoms::Base::NUMERIC :
-    {
-        ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( atom );
-        ::boost::apply_visitor( NumericSimplePropertyVisitor(typedAtom,m_campDataObj,property),
-                                typedAtom->getVariant() );
-        break;
-    }
-    default:
-    {
-        property.set( m_campDataObj, atom->getString() );
-        break;
-    }
+        case ::fwAtoms::Base::NUMERIC:
+        {
+            ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( atom );
+            ::boost::apply_visitor( NumericSimplePropertyVisitor(typedAtom,m_campDataObj,property),
+                                    typedAtom->getVariant() );
+            break;
+        }
+        default:
+        {
+            property.set( m_campDataObj, atom->getString() );
+            break;
+        }
     }
 
 }
@@ -201,7 +210,7 @@ void AtomToDataMappingVisitor::visit(const camp::EnumProperty& property)
 
     std::stringstream msg;
     msg << "Atom attribute is not well formed. Attribute '" << name << "' missing for data conversion";
-    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), ! atom );
+    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), !atom );
 
     property.set( m_campDataObj, atom->getString() );
 }
@@ -215,52 +224,52 @@ void AtomToDataMappingVisitor::visit(const camp::UserProperty& property)
     {
         switch( atom->type() )
         {
-        case ::fwAtoms::Base::BLOB :
-        {
-            ::fwAtoms::Blob::sptr blobAtom = ::fwAtoms::Blob::dynamicCast(atom);
-            ::fwMemory::BufferObject::sptr buffer;
-            buffer = ::camp_ext::ValueMapper< ::fwAtoms::Blob::sptr >::to(blobAtom);
-            FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged(
-                    "A blob cannot contain a null buffer pointer"),
-                    ! buffer );
-            property.set( m_campDataObj, ::camp::UserObject(buffer) );
-            break;
-        }
-        case ::fwAtoms::Base::OBJECT :
-        {
-            ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast(atom);
-            ::fwData::Object::sptr objectData = ::fwAtomConversion::convert( objectAtom, m_cache, m_uuidPolicy );
-            property.set( m_campDataObj, objectData );
-            break;
-        }
-        default :
-        {
-            std::stringstream msg;
-            msg << "Attribute of type '";
-            switch( atom->type() )
+            case ::fwAtoms::Base::BLOB:
             {
-            case ::fwAtoms::Base::BOOLEAN :
-                msg << "BOOLEAN";
-                break;
-            case ::fwAtoms::Base::STRING :
-                msg << "STRING";
-                break;
-            case ::fwAtoms::Base::NUMERIC :
-                msg << "NUMERIC";
+                ::fwAtoms::Blob::sptr blobAtom = ::fwAtoms::Blob::dynamicCast(atom);
+                ::fwMemory::BufferObject::sptr buffer;
+                buffer = ::camp_ext::ValueMapper< ::fwAtoms::Blob::sptr >::to(blobAtom);
+                FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged(
+                                           "A blob cannot contain a null buffer pointer"),
+                                       !buffer );
+                property.set( m_campDataObj, ::camp::UserObject(buffer) );
                 break;
-            case ::fwAtoms::Base::MAP :
-                msg << "MAP";
-                break;
-            case ::fwAtoms::Base::SEQUENCE :
-                msg << "SEQUENCE";
+            }
+            case ::fwAtoms::Base::OBJECT:
+            {
+                ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast(atom);
+                ::fwData::Object::sptr objectData  = ::fwAtomConversion::convert( objectAtom, m_cache, m_uuidPolicy );
+                property.set( m_campDataObj, objectData );
                 break;
+            }
             default:
+            {
+                std::stringstream msg;
+                msg << "Attribute of type '";
+                switch( atom->type() )
+                {
+                    case ::fwAtoms::Base::BOOLEAN:
+                        msg << "BOOLEAN";
+                        break;
+                    case ::fwAtoms::Base::STRING:
+                        msg << "STRING";
+                        break;
+                    case ::fwAtoms::Base::NUMERIC:
+                        msg << "NUMERIC";
+                        break;
+                    case ::fwAtoms::Base::MAP:
+                        msg << "MAP";
+                        break;
+                    case ::fwAtoms::Base::SEQUENCE:
+                        msg << "SEQUENCE";
+                        break;
+                    default:
+                        break;
+                }
+                msg <<"', are not supported in the data conversion process.";
+                FW_RAISE_EXCEPTION( exception::ConversionNotManaged(msg.str()) );
                 break;
             }
-            msg <<"', are not supported in the data conversion process.";
-            FW_RAISE_EXCEPTION( exception::ConversionNotManaged(msg.str()) );
-            break;
-        }
         }
     }
 }
@@ -273,11 +282,11 @@ void AtomToDataMappingVisitor::visit(const camp::ArrayProperty& property)
 
     std::stringstream msg;
     msg << "Atom attribute is not well formed. Attribute '" << name << "' missing for data conversion";
-    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), ! atom );
+    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), !atom );
 
     ::fwAtoms::Sequence::sptr seqAtom = ::fwAtoms::Sequence::dynamicCast(atom);
     unsigned int index = 0;
-    BOOST_FOREACH( ::fwAtoms::Base::sptr elemAtom, seqAtom->getValue() )
+    for( ::fwAtoms::Base::sptr elemAtom :  seqAtom->getValue() )
     {
         if (!elemAtom)
         {
@@ -298,66 +307,67 @@ void AtomToDataMappingVisitor::visit(const camp::ArrayProperty& property)
         {
             switch( elemAtom->type() )
             {
-            case ::fwAtoms::Base::BOOLEAN :
-            case ::fwAtoms::Base::STRING :
-            {
-                std::string value = elemAtom->getString();
-
-                if( property.dynamic() )
+                case ::fwAtoms::Base::BOOLEAN:
+                case ::fwAtoms::Base::STRING:
                 {
-                    property.insert( m_campDataObj, index, value );
+                    std::string value = elemAtom->getString();
+
+                    if( property.dynamic() )
+                    {
+                        property.insert( m_campDataObj, index, value );
+                    }
+                    else
+                    {
+                        property.set( m_campDataObj, index, value );
+                    }
+                    break;
                 }
-                else
+                case ::fwAtoms::Base::NUMERIC:
                 {
-                    property.set( m_campDataObj, index, value );
+                    ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( elemAtom );
+                    ::boost::apply_visitor( NumericArrayPropertyVisitor(typedAtom,m_campDataObj,property,index),
+                                            typedAtom->getVariant() );
+                    break;
                 }
-                break;
-            }
-            case ::fwAtoms::Base::NUMERIC :
-            {
-                ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( elemAtom );
-                ::boost::apply_visitor( NumericArrayPropertyVisitor(typedAtom,m_campDataObj,property,index),
-                                        typedAtom->getVariant() );
-                break;
-            }
 
-            case ::fwAtoms::Base::OBJECT :
-            {
-                ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast(elemAtom);
-                ::fwData::Object::sptr objectData = ::fwAtomConversion::convert( objectAtom, m_cache, m_uuidPolicy);
-
-                if( property.dynamic() )
-                {
-                    property.insert( m_campDataObj, index, objectData );
-                }
-                else
-                {
-                    property.set( m_campDataObj, index, objectData );
-                }
-                break;
-            }
-            default :
-            {
-                std::stringstream msg;
-                msg << "fwAtoms::Sequence elements of type '";
-                switch( elemAtom->type() )
+                case ::fwAtoms::Base::OBJECT:
                 {
-                case ::fwAtoms::Base::BLOB :
-                    msg << "BLOB";
-                    break;
-                case ::fwAtoms::Base::MAP :
-                    msg << "MAP";
-                    break;
-                case ::fwAtoms::Base::SEQUENCE :
-                    msg << "SEQUENCE";
+                    ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast(elemAtom);
+                    ::fwData::Object::sptr objectData  =
+                        ::fwAtomConversion::convert( objectAtom, m_cache, m_uuidPolicy);
+
+                    if( property.dynamic() )
+                    {
+                        property.insert( m_campDataObj, index, objectData );
+                    }
+                    else
+                    {
+                        property.set( m_campDataObj, index, objectData );
+                    }
                     break;
+                }
                 default:
+                {
+                    std::stringstream msg;
+                    msg << "fwAtoms::Sequence elements of type '";
+                    switch( elemAtom->type() )
+                    {
+                        case ::fwAtoms::Base::BLOB:
+                            msg << "BLOB";
+                            break;
+                        case ::fwAtoms::Base::MAP:
+                            msg << "MAP";
+                            break;
+                        case ::fwAtoms::Base::SEQUENCE:
+                            msg << "SEQUENCE";
+                            break;
+                        default:
+                            break;
+                    }
+                    msg <<"', are not supported in the data conversion process.";
+                    FW_RAISE_EXCEPTION( exception::ConversionNotManaged(msg.str()) );
                     break;
                 }
-                msg <<"', are not supported in the data conversion process.";
-                FW_RAISE_EXCEPTION( exception::ConversionNotManaged(msg.str()) );
-                break;
-            }
             }
         }
         ++index;
@@ -372,11 +382,11 @@ void AtomToDataMappingVisitor::visit(const camp::MapProperty& property)
 
     std::stringstream msg;
     msg << "Atom attribute is not well formed. Attribute '" << name << "' missing for data conversion";
-    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), ! atom );
+    FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged( msg.str() ), !atom );
 
     ::fwAtoms::Map::sptr mapAtom = ::fwAtoms::Map::dynamicCast(atom);
 
-    BOOST_FOREACH( ::fwAtoms::Map::ValueType elemAtom, mapAtom->getValue() )
+    for( ::fwAtoms::Map::ValueType elemAtom :  mapAtom->getValue() )
     {
         if (!elemAtom.second)
         {
@@ -390,49 +400,50 @@ void AtomToDataMappingVisitor::visit(const camp::MapProperty& property)
         {
             switch( elemAtom.second->type() )
             {
-            case ::fwAtoms::Base::BOOLEAN :
-            case ::fwAtoms::Base::STRING :
-            {
-                std::string value = elemAtom.second->getString();
-                property.set( m_campDataObj, elemAtom.first, value );
-                break;
-            }
-            case ::fwAtoms::Base::NUMERIC :
-            {
-                ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( elemAtom.second );
-                ::boost::apply_visitor( NumericMapPropertyVisitor(typedAtom,m_campDataObj,property,elemAtom.first),
-                                        typedAtom->getVariant() );
-                break;
-            }
-            case ::fwAtoms::Base::OBJECT :
-            {
-                ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast(elemAtom.second);
-                ::fwData::Object::sptr objectData = ::fwAtomConversion::convert( objectAtom, m_cache, m_uuidPolicy);
-                property.set( m_campDataObj, elemAtom.first, objectData );
-                break;
-            }
-            default :
-            {
-                std::stringstream msg;
-                msg << "fwAtoms::Map value elements of type '";
-                switch( elemAtom.second->type() )
+                case ::fwAtoms::Base::BOOLEAN:
+                case ::fwAtoms::Base::STRING:
                 {
-                case ::fwAtoms::Base::BLOB :
-                    msg << "BLOB";
+                    std::string value = elemAtom.second->getString();
+                    property.set( m_campDataObj, elemAtom.first, value );
                     break;
-                case ::fwAtoms::Base::MAP :
-                    msg << "MAP";
+                }
+                case ::fwAtoms::Base::NUMERIC:
+                {
+                    ::fwAtoms::Numeric::sptr typedAtom = ::fwAtoms::Numeric::dynamicCast( elemAtom.second );
+                    ::boost::apply_visitor( NumericMapPropertyVisitor(typedAtom,m_campDataObj,property,elemAtom.first),
+                                            typedAtom->getVariant() );
                     break;
-                case ::fwAtoms::Base::SEQUENCE :
-                    msg << "SEQUENCE";
+                }
+                case ::fwAtoms::Base::OBJECT:
+                {
+                    ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast(elemAtom.second);
+                    ::fwData::Object::sptr objectData  =
+                        ::fwAtomConversion::convert( objectAtom, m_cache, m_uuidPolicy);
+                    property.set( m_campDataObj, elemAtom.first, objectData );
                     break;
+                }
                 default:
+                {
+                    std::stringstream msg;
+                    msg << "fwAtoms::Map value elements of type '";
+                    switch( elemAtom.second->type() )
+                    {
+                        case ::fwAtoms::Base::BLOB:
+                            msg << "BLOB";
+                            break;
+                        case ::fwAtoms::Base::MAP:
+                            msg << "MAP";
+                            break;
+                        case ::fwAtoms::Base::SEQUENCE:
+                            msg << "SEQUENCE";
+                            break;
+                        default:
+                            break;
+                    }
+                    msg <<"', are not supported in the data conversion process.";
+                    FW_RAISE_EXCEPTION( exception::ConversionNotManaged(msg.str()) );
                     break;
                 }
-                msg <<"', are not supported in the data conversion process.";
-                FW_RAISE_EXCEPTION( exception::ConversionNotManaged(msg.str()) );
-                break;
-            }
             }
         }
     }
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomVisitor.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomVisitor.cpp
index 4358dd4..d77458e 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomVisitor.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/AtomVisitor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,10 +21,10 @@ namespace fwAtomConversion
     ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::UUID::get(uuid));
 
     FW_RAISE_EXCEPTION_IF(
-                          exception::ClassnameMismatch("Loaded object classname (" + classname
-                              + ") for UUID '" + uuid
-                              + "' does not match existing classname (" + obj->classname() + ")"  ),
-                          classname != obj->getClassname());
+        exception::ClassnameMismatch("Loaded object classname (" + classname
+                                     + ") for UUID '" + uuid
+                                     + "' does not match existing classname (" + obj->classname() + ")"  ),
+        classname != obj->getClassname());
 
     if (!obj)
     {
@@ -33,9 +33,9 @@ namespace fwAtomConversion
 
         FW_RAISE_EXCEPTION_IF(
             exception::DataFactoryNotFound(
-                    std::string("Unable to build '") + classname + "': the data factory may be missing.")
-                , ! obj
-                );
+                std::string("Unable to build '") + classname + "': the data factory may be missing.")
+            , !obj
+            );
         bool uuidIsSet = ::fwTools::UUID::set(obj, uuid);
 
         OSLM_ASSERT( "UUID '" << uuid << "' should not exist", uuidIsSet );
@@ -44,39 +44,41 @@ namespace fwAtomConversion
     return obj;
 }
 
-::fwData::Object::sptr AtomVisitor::ChangePolicy::operator()(const std::string &uuid, const std::string &classname) const
+::fwData::Object::sptr AtomVisitor::ChangePolicy::operator()(const std::string &uuid,
+                                                             const std::string &classname) const
 {
     ::fwData::Object::sptr obj = ::fwData::factory::New(classname);
     // uuid is set only if the given uuid is available
 
     FW_RAISE_EXCEPTION_IF(
         exception::DataFactoryNotFound(
-                std::string("Unable to build '") + classname + "': the data factory may be missing.")
-            , ! obj
-            );
+            std::string("Unable to build '") + classname + "': the data factory may be missing.")
+        , !obj
+        );
 
     ::fwTools::UUID::set(obj, uuid);
     return obj;
 }
 
-::fwData::Object::sptr AtomVisitor::StrictPolicy::operator()(const std::string &uuid, const std::string &classname) const
+::fwData::Object::sptr AtomVisitor::StrictPolicy::operator()(const std::string &uuid,
+                                                             const std::string &classname) const
 {
 
     ::fwData::Object::sptr obj = ::fwData::factory::New(classname);
 
     FW_RAISE_EXCEPTION_IF(
         exception::DataFactoryNotFound(
-                std::string("Unable to build '") + classname + "': the data factory may be missing.")
-            , ! obj
-            );
+            std::string("Unable to build '") + classname + "': the data factory may be missing.")
+        , !obj
+        );
 
     bool uuidIsSet = ::fwTools::UUID::set(obj, uuid);
 
     FW_RAISE_EXCEPTION_IF(
         exception::DuplicatedDataUUID(
-                std::string( "Try to create new data object '") + classname + "' with uuid '"
-                + uuid + "' but this uuid is already used."
-                ), ! uuidIsSet );
+            std::string( "Try to create new data object '") + classname + "' with uuid '"
+            + uuid + "' but this uuid is already used."
+            ), !uuidIsSet );
 
     return obj;
 
@@ -85,13 +87,15 @@ namespace fwAtomConversion
 
 
 AtomVisitor::AtomVisitor(const ::fwAtoms::Object::sptr &atomObj, DataCacheType & cache, const IReadPolicy &uuidPolicy)
-: m_atomObj ( atomObj ),
-  m_cache ( cache ),
-  m_uuidPolicy(uuidPolicy)
-{}
+    : m_atomObj ( atomObj ),
+      m_cache ( cache ),
+      m_uuidPolicy(uuidPolicy)
+{
+}
 
 AtomVisitor::~AtomVisitor()
-{}
+{
+}
 
 void AtomVisitor::visit()
 {
@@ -102,9 +106,9 @@ void AtomVisitor::visit()
 void AtomVisitor::processMetaInfos( const ::fwAtoms::Object::MetaInfosType & metaInfos )
 {
     const DataVisitor::ClassnameType& classname = metaInfos.find( DataVisitor::CLASSNAME_METAINFO )->second;
-    const ::fwTools::UUID::UUIDType& uuid = metaInfos.find( DataVisitor::ID_METAINFO )->second;
+    const ::fwTools::UUID::UUIDType& uuid       = metaInfos.find( DataVisitor::ID_METAINFO )->second;
 
-    m_dataObj = m_uuidPolicy(uuid, classname);
+    m_dataObj     = m_uuidPolicy(uuid, classname);
     m_cache[uuid] = m_dataObj;
 }
 
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp
index 6a623a1..fdd1473 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/DataVisitor.cpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <string>
 
-#include <boost/shared_ptr.hpp>
 #include <boost/utility/enable_if.hpp>
 
 #include <camp/class.hpp>
@@ -52,12 +51,13 @@ struct DataConversionValueVisitor : public ::camp::ValueVisitor< ::fwAtoms::Base
     DataVisitor::AtomCacheType & m_cache;
 
     DataConversionValueVisitor( DataVisitor::AtomCacheType & cache ) : m_cache(cache)
-    {}
+    {
+    }
 
     ::fwAtoms::Base::sptr operator()(camp::NoType value)
     {
         FW_RAISE_EXCEPTION( exception::ConversionNotManaged(
-                "Enter in void GetCampValueVisitor()(camp::NoType value) : case not managed" ) );
+                                "Enter in void GetCampValueVisitor()(camp::NoType value) : case not managed" ) );
         ::fwAtoms::Base::sptr val;
         return val;
     }
@@ -98,12 +98,12 @@ struct DataConversionValueVisitor : public ::camp::ValueVisitor< ::fwAtoms::Base
             if( classname == "::fwMemory::BufferObject" )
             {
                 ::fwMemory::BufferObject * ptr = value.get< ::fwMemory::BufferObject * >();
-                baseObj = ::fwAtoms::Blob::New( ptr->getSptr() );
+                baseObj                        = ::fwAtoms::Blob::New( ptr->getSptr() );
             }
             else
             {
                 // get fwData object
-                ::fwData::Object * ptr = value.get< ::fwData::Object * >();
+                ::fwData::Object * ptr         = value.get< ::fwData::Object * >();
                 ::fwData::Object::sptr dataObj = ptr->getSptr();
 
                 baseObj = ::fwAtomConversion::convert( dataObj, m_cache );
@@ -112,12 +112,12 @@ struct DataConversionValueVisitor : public ::camp::ValueVisitor< ::fwAtoms::Base
 
         return baseObj;
     }
- };
+};
 
 //-----------------------------------------------------------------------------
 
 DataVisitor::DataVisitor( ::fwData::Object::sptr dataObj, AtomCacheType & cache )
-: m_campDataObj( dataObj.get() ), m_cache( cache )
+    : m_campDataObj( dataObj.get() ), m_cache( cache )
 {
 
     // Create atom object
@@ -130,12 +130,12 @@ DataVisitor::DataVisitor( ::fwData::Object::sptr dataObj, AtomCacheType & cache
 
     // Fill atom object with tag
     const camp::Class& metaclass = ::camp::classByName(classname);
-    std::size_t tagCount = metaclass.tagCount();
+    std::size_t tagCount         = metaclass.tagCount();
     for ( std::size_t i = 0; i < tagCount; ++i )
     {
         const ::camp::Value & tag = metaclass.tagId(i);
         const ::camp::Value & val = metaclass.tag(tag);
-        m_atomObj->setMetaInfo( tag.to< std::string >() , val.to< std::string >() );
+        m_atomObj->setMetaInfo( tag.to< std::string >(), val.to< std::string >() );
     }
 
 }
@@ -143,7 +143,8 @@ DataVisitor::DataVisitor( ::fwData::Object::sptr dataObj, AtomCacheType & cache
 //-----------------------------------------------------------------------------
 
 DataVisitor::~DataVisitor()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -195,17 +196,17 @@ void DataVisitor::visit(const camp::MapProperty& property)
     {
         value = property.getElement(m_campDataObj, index);
 
-        first = value.first;
+        first  = value.first;
         second = value.second;
 
         DataConversionValueVisitor valVisitor(m_cache);
         valAtom = second.visit( valVisitor );
 
         FW_RAISE_EXCEPTION_IF(
-                exception::ConversionNotManaged("Not managed type for map key (only support string, int and real)"),
-                first.type() != ::camp::stringType &&
-                first.type() != ::camp::intType &&
-                first.type() != ::camp::realType );
+            exception::ConversionNotManaged("Not managed type for map key (only support string, int and real)"),
+            first.type() != ::camp::stringType &&
+            first.type() != ::camp::intType &&
+            first.type() != ::camp::realType );
         atom->insert( first.to< std::string >(), valAtom );
     }
 
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/convert.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/convert.cpp
index 3d125ad..76d484a 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/convert.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/convert.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/NullPointer.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/NullPointer.cpp
index 5e7f106..70711a5 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/NullPointer.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/NullPointer.cpp
@@ -1,4 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +16,8 @@ namespace exception
 {
 
 NullPointer::NullPointer ( const std::string &err ) : ::fwCore::Exception(err)
-{}
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/ObjectNotFound.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/ObjectNotFound.cpp
index bf8379f..05cc1da 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/ObjectNotFound.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/exception/ObjectNotFound.cpp
@@ -1,4 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +16,8 @@ namespace exception
 {
 
 ObjectNotFound::ObjectNotFound ( const std::string &err ) : ::fwCore::Exception(err)
-{}
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/Graph.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/Graph.cpp
index a329293..9d4cee9 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/Graph.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/Graph.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,6 +8,8 @@
 #include <fwAtoms/Map.hpp>
 #include <fwAtoms/Sequence.hpp>
 #include <fwData/Graph.hpp>
+#include <fwTools/UUID.hpp>
+
 
 #include "fwAtomConversion/mapper/Graph.hpp"
 #include "fwAtomConversion/mapper/registry/macros.hpp"
@@ -39,10 +41,12 @@ fwAtomConversionRegisterMacro( ::fwAtomConversion::mapper::Graph, ::fwData::Grap
 
     typedef ::fwData::Graph::ConnectionContainer GraphConnections;
     ::fwAtoms::Object::sptr value;
-    BOOST_FOREACH( GraphConnections::value_type elem, graph->getCRefConnections() )
+    for( GraphConnections::value_type elem :  graph->getCRefConnections() )
     {
         value = ::fwAtoms::Object::New();
 
+        value->setMetaInfo("ID_METAINFO", ::fwTools::UUID::generateUUID());
+
         value->setAttribute("edge", ::fwAtomConversion::convert(elem.first, cache));
         value->setAttribute("source", ::fwAtomConversion::convert(elem.second.first, cache));
         value->setAttribute("destination", ::fwAtomConversion::convert(elem.second.second, cache));
@@ -68,22 +72,24 @@ fwAtomConversionRegisterMacro( ::fwAtomConversion::mapper::Graph, ::fwData::Grap
     ::fwData::Graph::sptr graph = ::fwData::Graph::dynamicCast(data);
 
     ::fwAtoms::Sequence::sptr seqAtom = ::fwAtoms::Sequence::dynamicCast( atom->getAttribute("connections") );
-    BOOST_FOREACH( ::fwAtoms::Base::sptr elemAtom , seqAtom->getValue() )
+    for( ::fwAtoms::Base::sptr elemAtom  :  seqAtom->getValue() )
     {
         FW_RAISE_EXCEPTION_IF( exception::ConversionNotManaged(
-                "sub atoms stored in fwAtom::Sequence 'connections' must be atom objects"),
-                elemAtom->type() != ::fwAtoms::Base::OBJECT );
+                                   "sub atoms stored in fwAtom::Sequence 'connections' must be atom objects"),
+                               elemAtom->type() != ::fwAtoms::Base::OBJECT );
 
         ::fwAtoms::Object::sptr objectAtom = ::fwAtoms::Object::dynamicCast( elemAtom );
-
-        ::fwAtoms::Object::sptr edgeAtom = ::fwAtoms::Object::dynamicCast( objectAtom->getAttribute("edge") );
-        ::fwData::Edge::sptr edge = ::fwData::Edge::dynamicCast( ::fwAtomConversion::convert( edgeAtom, cache, uuidPolicy ) );
+        ::fwAtoms::Object::sptr edgeAtom   = ::fwAtoms::Object::dynamicCast( objectAtom->getAttribute("edge") );
+        ::fwData::Edge::sptr edge          =
+            ::fwData::Edge::dynamicCast( ::fwAtomConversion::convert( edgeAtom, cache, uuidPolicy ) );
 
         ::fwAtoms::Object::sptr srcAtom = ::fwAtoms::Object::dynamicCast( objectAtom->getAttribute("source") );
-        ::fwData::Node::sptr src = ::fwData::Node::dynamicCast( ::fwAtomConversion::convert( srcAtom, cache, uuidPolicy ) );
+        ::fwData::Node::sptr src        =
+            ::fwData::Node::dynamicCast( ::fwAtomConversion::convert( srcAtom, cache, uuidPolicy ) );
 
         ::fwAtoms::Object::sptr destAtom = ::fwAtoms::Object::dynamicCast( objectAtom->getAttribute("destination") );
-        ::fwData::Node::sptr dest = ::fwData::Node::dynamicCast( ::fwAtomConversion::convert( destAtom, cache, uuidPolicy ) );
+        ::fwData::Node::sptr dest        =
+            ::fwData::Node::dynamicCast( ::fwAtomConversion::convert( destAtom, cache, uuidPolicy ) );
 
         graph->addEdge( edge, src, dest );
     }
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/factory/new.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/factory/new.cpp
index 2262016..241a6da 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/factory/new.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/registry/detail.cpp b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/registry/detail.cpp
index f04a126..655faf4 100644
--- a/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/registry/detail.cpp
+++ b/SrcLib/core/fwAtomConversion/src/fwAtomConversion/mapper/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace mapper
 namespace registry
 {
 
-struct FwAtomConversionRegistryInstantiatorTag {} ;
+struct FwAtomConversionRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwAtomConversion/test/CMakeLists.txt b/SrcLib/core/fwAtomConversion/test/CMakeLists.txt
index 207087b..35626b0 100644
--- a/SrcLib/core/fwAtomConversion/test/CMakeLists.txt
+++ b/SrcLib/core/fwAtomConversion/test/CMakeLists.txt
@@ -1,10 +1,9 @@
 
 fwLoadProperties()
 
-find_package (Boost COMPONENTS date_time REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/core/fwAtomConversion/test/Properties.cmake b/SrcLib/core/fwAtomConversion/test/Properties.cmake
index e5f695e..a3cb055 100644
--- a/SrcLib/core/fwAtomConversion/test/Properties.cmake
+++ b/SrcLib/core/fwAtomConversion/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwAtomConversionTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwDataCamp fwAtomConversion )
+set( DEPENDENCIES fwCore fwTest fwTools fwDataCamp fwAtomConversion fwData fwMedData fwAtoms fwCamp)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwAtomConversion/test/cppunit.options b/SrcLib/core/fwAtomConversion/test/cppunit.options
deleted file mode 100644
index c2bc828..0000000
--- a/SrcLib/core/fwAtomConversion/test/cppunit.options
+++ /dev/null
@@ -1,12 +0,0 @@
-
-CLASSTEST=[
-    'ConversionTest'
-]
-
-LIB = ['fwTools_0-1',
-       'fwCore_0-1',
-       'fwTest_0-1',
-       'fwAtomConversion_0-1', 
-       'fwDataCamp_0-1'
-      ]
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwAtomConversion/test/tu/include/ConversionTest.hpp b/SrcLib/core/fwAtomConversion/test/tu/include/ConversionTest.hpp
index 1964b5f..14eb65b 100644
--- a/SrcLib/core/fwAtomConversion/test/tu/include/ConversionTest.hpp
+++ b/SrcLib/core/fwAtomConversion/test/tu/include/ConversionTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMCONVERSION_UT_METAHELPERTEST_HPP__
-#define __FWATOMCONVERSION_UT_METAHELPERTEST_HPP__
+#ifndef __FWATOMCONVERSION_UT_CONVERSIONTEST_HPP__
+#define __FWATOMCONVERSION_UT_CONVERSIONTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,22 +16,22 @@ namespace ut
 
 class ConversionTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ConversionTest );
-    CPPUNIT_TEST( dataToAtomTest );
-    CPPUNIT_TEST( materialConversionTest );
-    CPPUNIT_TEST( graphConversionTest );
-    CPPUNIT_TEST( tfConversionTest );
-    CPPUNIT_TEST( seriesDBConversionTest );
-    CPPUNIT_TEST( objectMultiReferencedTest );
-    CPPUNIT_TEST( recursiveObjectTest );
-    CPPUNIT_TEST( uuidExceptionTest );
-    CPPUNIT_TEST( uuidChangeTest );
-    CPPUNIT_TEST( uuidReuseTest );
-    CPPUNIT_TEST( dataFactoryNotFoundExceptionTest );
-    CPPUNIT_TEST( campFactoryNotFoundExceptionTest );
-    CPPUNIT_TEST( conversionNotManagedExceptionTest );
-    CPPUNIT_TEST( nullPtrManagmentTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ConversionTest );
+CPPUNIT_TEST( dataToAtomTest );
+CPPUNIT_TEST( materialConversionTest );
+CPPUNIT_TEST( graphConversionTest );
+CPPUNIT_TEST( tfConversionTest );
+CPPUNIT_TEST( seriesDBConversionTest );
+CPPUNIT_TEST( objectMultiReferencedTest );
+CPPUNIT_TEST( recursiveObjectTest );
+CPPUNIT_TEST( uuidExceptionTest );
+CPPUNIT_TEST( uuidChangeTest );
+CPPUNIT_TEST( uuidReuseTest );
+CPPUNIT_TEST( dataFactoryNotFoundExceptionTest );
+CPPUNIT_TEST( campFactoryNotFoundExceptionTest );
+CPPUNIT_TEST( conversionNotManagedExceptionTest );
+CPPUNIT_TEST( nullPtrManagmentTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
@@ -90,4 +90,4 @@ public:
 
 
 
-#endif // __FWATOMCONVERSION_UT_METAHELPERTEST_HPP__
+#endif // __FWATOMCONVERSION_UT_CONVERSIONTEST_HPP__
diff --git a/SrcLib/core/fwAtomConversion/test/tu/src/ConversionTest.cpp b/SrcLib/core/fwAtomConversion/test/tu/src/ConversionTest.cpp
index 50e7dc2..4562365 100644
--- a/SrcLib/core/fwAtomConversion/test/tu/src/ConversionTest.cpp
+++ b/SrcLib/core/fwAtomConversion/test/tu/src/ConversionTest.cpp
@@ -1,9 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "ConversionTest.hpp"
+
 #include <fwCore/log/SpyLogger.hpp>
 #include <fwTools/UUID.hpp>
 
@@ -46,8 +48,7 @@
 #include <fwAtomConversion/exception/DuplicatedDataUUID.hpp>
 #include <fwAtomConversion/exception/ConversionNotManaged.hpp>
 
-#include "ConversionTest.hpp"
-
+#include <functional>
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwAtomConversion::ut::ConversionTest );
 
@@ -60,7 +61,8 @@ namespace ut
 
 // Set up context before running a test.
 void ConversionTest::setUp()
-{};
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -76,11 +78,11 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(objRef, objComp);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
     }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
+    CPPUNIT_ASSERT_MESSAGE("Object Not equal", props->size() == 0 );
 }
 
 //-----------------------------------------------------------------------------
@@ -88,28 +90,28 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
 void ConversionTest::dataToAtomTest()
 {
     const ::fwData::Object::sptr VALUES[] = {
-            ::fwData::Integer::New(1337),
-            ::fwData::Float::New(),
-            ::fwData::String::New(),
-            ::fwData::Boolean::New(),
-            ::fwData::Vector::New(),
-            ::fwData::Color::New(1.4f, 0.9f, 1.1f, 1.67f),
-            ::fwData::Array::New(),
-            ::fwData::Image::New(),
-            ::fwData::Mesh::New(),
-            ::fwData::Material::New(),
-            ::fwData::Reconstruction::New(),
-            ::fwData::Composite::New(),
-            ::fwData::Point::New(),
-            ::fwData::PointList::New(),
-            ::fwData::TransformationMatrix3D::New(),
-            ::fwData::TransferFunction::New(),
-            ::fwData::Graph::New(),
+        ::fwData::Integer::New(1337),
+        ::fwData::Float::New(),
+        ::fwData::String::New(),
+        ::fwData::Boolean::New(),
+        ::fwData::Vector::New(),
+        ::fwData::Color::New(1.4f, 0.9f, 1.1f, 1.67f),
+        ::fwData::Array::New(),
+        ::fwData::Image::New(),
+        ::fwData::Mesh::New(),
+        ::fwData::Material::New(),
+        ::fwData::Reconstruction::New(),
+        ::fwData::Composite::New(),
+        ::fwData::Point::New(),
+        ::fwData::PointList::New(),
+        ::fwData::TransformationMatrix3D::New(),
+        ::fwData::TransferFunction::New(),
+        ::fwData::Graph::New(),
     };
 
     ::fwAtoms::Object::sptr atom;
 
-    BOOST_FOREACH ( fwData::Object::sptr  object, VALUES )
+    for ( fwData::Object::sptr object : VALUES )
     {
         atom = ::fwAtomConversion::convert(object);
 
@@ -119,55 +121,58 @@ void ConversionTest::dataToAtomTest()
         CPPUNIT_ASSERT_EQUAL( object->getClassname(),
                               atom->getMetaInfo( ::fwAtomConversion::DataVisitor::CLASSNAME_METAINFO ) );
 
-         //Test attribute type
-        BOOST_FOREACH( ::fwAtoms::Object::AttributesType::value_type elem, atom->getAttributes() )
+        //Test attribute type
+        for( ::fwAtoms::Object::AttributesType::value_type elem :  atom->getAttributes() )
         {
             std::string classname = atom->getMetaInfo( ::fwAtomConversion::DataVisitor::CLASSNAME_METAINFO );
-            if ( ! (  classname == "::fwData::Graph" &&
-                    elem.first == "connections" ) )
+            if ( !(  classname == "::fwData::Graph" &&
+                     elem.first == "connections" ) )
             {
-                int type = metaClass.property(elem.first).type();
+                int type              = metaClass.property(elem.first).type();
                 std::string attribute = metaClass.property(elem.first).name();
                 switch(type)
                 {
-                case camp::stringType:
-                    CPPUNIT_ASSERT(elem.second->isString());
-                    CPPUNIT_ASSERT(elem.second->isValue());
-                    break;
-                case camp::realType :
-                case camp::intType :
-                    CPPUNIT_ASSERT(elem.second->isNumeric());
-                    CPPUNIT_ASSERT(elem.second->isValue());
-                    break;
-                case camp::boolType :
-                    CPPUNIT_ASSERT(elem.second->isBoolean());
-                    CPPUNIT_ASSERT(elem.second->isValue());
-                    break;
-                case camp::userType:
-                    if( ( ( classname == "::fwData::Mesh" ) && ( attribute == "cell_colors" ) ) ||
+                    case camp::stringType:
+                        CPPUNIT_ASSERT(elem.second->isString());
+                        CPPUNIT_ASSERT(elem.second->isValue());
+                        break;
+                    case camp::realType:
+                    case camp::intType:
+                        CPPUNIT_ASSERT(elem.second->isNumeric());
+                        CPPUNIT_ASSERT(elem.second->isValue());
+                        break;
+                    case camp::boolType:
+                        CPPUNIT_ASSERT(elem.second->isBoolean());
+                        CPPUNIT_ASSERT(elem.second->isValue());
+                        break;
+                    case camp::userType:
+                        if( ( ( classname == "::fwData::Mesh" ) && ( attribute == "cell_colors" ) ) ||
                             ( ( classname == "::fwData::Mesh" ) && ( attribute == "cell_normals" ) ) ||
                             ( ( classname == "::fwData::Mesh" ) && ( attribute == "point_colors" ) ) ||
                             ( ( classname == "::fwData::Mesh" ) && ( attribute == "point_normals" ) ) ||
+                            ( ( classname == "::fwData::Mesh" ) && ( attribute == "cell_tex_coords" ) ) ||
+                            ( ( classname == "::fwData::Mesh" ) && ( attribute == "point_tex_coords" ) ) ||
+                            ( ( classname == "::fwData::Material" ) && ( attribute == "diffuse_texture" ) ) ||
                             ( ( classname == "::fwData::Reconstruction" ) && ( attribute == "image" ) ) ||
                             ( ( classname == "::fwData::Reconstruction" ) && ( attribute == "mesh" ) ) )
-                    {
-                        CPPUNIT_ASSERT(!elem.second);
-                    }
-                    else
-                    {
-                        CPPUNIT_ASSERT(elem.second->isObject() || elem.second->isBlob());
-                    }
-                    break;
-                case camp::mappingType:
-                    CPPUNIT_ASSERT(elem.second->isMapping());
-                    break;
-                case camp::enumType:
-                    CPPUNIT_ASSERT(elem.second->isString());
-                    CPPUNIT_ASSERT(elem.second->isValue());
-                    break;
-                case camp::arrayType:
-                    CPPUNIT_ASSERT(elem.second->isSequence());
-                    break;
+                        {
+                            CPPUNIT_ASSERT(!elem.second);
+                        }
+                        else
+                        {
+                            CPPUNIT_ASSERT(elem.second->isObject() || elem.second->isBlob());
+                        }
+                        break;
+                    case camp::mappingType:
+                        CPPUNIT_ASSERT(elem.second->isMapping());
+                        break;
+                    case camp::enumType:
+                        CPPUNIT_ASSERT(elem.second->isString());
+                        CPPUNIT_ASSERT(elem.second->isValue());
+                        break;
+                    case camp::arrayType:
+                        CPPUNIT_ASSERT(elem.second->isSequence());
+                        break;
                 }
             }
         }
@@ -178,18 +183,18 @@ void ConversionTest::dataToAtomTest()
 
 void ConversionTest::materialConversionTest()
 {
-    ::fwData::Color::sptr color = ::fwData::Color::New(0.2f, 1.2f, 1.3f, 0.9f);
+    ::fwData::Color::sptr color       = ::fwData::Color::New(0.2f, 1.2f, 1.3f, 0.9f);
     ::fwData::Material::sptr material = ::fwData::Material::New();
-    material->setAmbient(color);
+    material->setDiffuse(color);
 
     // Create Atom
     ::fwData::Material::sptr materialTmp;
-    materialTmp = ::fwData::Object::copy( material );
+    materialTmp                  = ::fwData::Object::copy( material );
     ::fwAtoms::Object::sptr atom = ::fwAtomConversion::convert( materialTmp );
     materialTmp.reset();
 
     // Create Data from Atom
-    ::fwData::Object::sptr materialRes = ::fwAtomConversion::convert(atom);
+    ::fwData::Object::sptr materialRes        = ::fwAtomConversion::convert(atom);
     ::fwData::Material::sptr materialResultat = ::fwData::Material::dynamicCast(materialRes);
 
     compare(material, materialResultat);
@@ -202,18 +207,18 @@ void ConversionTest::graphConversionTest()
     ::fwAtoms::Object::sptr atom;
     ::fwTools::UUID::UUIDType gID,n1ID,n2ID,n3ID,e12ID,e23ID;
     {
-        ::fwData::Graph::sptr g = ::fwData::Graph::New();
-        gID = ::fwTools::UUID::get(g);
-        ::fwData::Node::sptr  n1 = ::fwData::Node::New();
-        n1ID = ::fwTools::UUID::get(n1);
-        ::fwData::Node::sptr  n2 = ::fwData::Node::New();
-        n2ID = ::fwTools::UUID::get(n2);
-        ::fwData::Node::sptr  n3 = ::fwData::Node::New();
-        n3ID = ::fwTools::UUID::get(n3);
-        ::fwData::Edge::sptr  e12 = ::fwData::Edge::New();
-        e12ID = ::fwTools::UUID::get(e12);
-        ::fwData::Edge::sptr  e23 = ::fwData::Edge::New();
-        e23ID = ::fwTools::UUID::get(e23);
+        ::fwData::Graph::sptr g  = ::fwData::Graph::New();
+        gID                      = ::fwTools::UUID::get(g);
+        ::fwData::Node::sptr n1  = ::fwData::Node::New();
+        n1ID                     = ::fwTools::UUID::get(n1);
+        ::fwData::Node::sptr n2  = ::fwData::Node::New();
+        n2ID                     = ::fwTools::UUID::get(n2);
+        ::fwData::Node::sptr n3  = ::fwData::Node::New();
+        n3ID                     = ::fwTools::UUID::get(n3);
+        ::fwData::Edge::sptr e12 = ::fwData::Edge::New();
+        e12ID                    = ::fwTools::UUID::get(e12);
+        ::fwData::Edge::sptr e23 = ::fwData::Edge::New();
+        e23ID                    = ::fwTools::UUID::get(e23);
 
         // build graph
         g->addNode(n1);
@@ -238,50 +243,59 @@ void ConversionTest::graphConversionTest()
         atom = ::fwAtomConversion::convert( g );
     }
 
-   // Create Data from Atom
-   ::fwData::Graph::sptr newGraph = ::fwData::Graph::dynamicCast( ::fwAtomConversion::convert(atom) );
-
-   // nodes
-   ::fwData::Node::sptr n1, n2, n3;
-
-   // Test nodes
-   const ::fwData::Graph::NodeContainer & nodes = newGraph->getCRefNodes();
-   CPPUNIT_ASSERT_EQUAL_MESSAGE("Graph nodes size" ,  (size_t)3, nodes.size() );
-   BOOST_FOREACH( ::fwData::Node::sptr node, nodes )
-   {
-       ::fwTools::UUID::UUIDType nodeID = ::fwTools::UUID::get(node);
-       CPPUNIT_ASSERT_MESSAGE("Test node uuid" ,  nodeID == n1ID || nodeID == n2ID || nodeID == n3ID );
-       if (  nodeID == n1ID ) { n1 = node; }
-       else if  (  nodeID == n2ID ) { n2 = node; }
-       else if  (  nodeID == n3ID ) { n3 = node; }
-
-   }
-   CPPUNIT_ASSERT_MESSAGE("Test node n1" , n1 );
-   CPPUNIT_ASSERT_MESSAGE("Test node n2" , n2 );
-   CPPUNIT_ASSERT_MESSAGE("Test node n3" , n3 );
-
-   // Test edges
-   const ::fwData::Graph::ConnectionContainer & connections = newGraph->getCRefConnections();
-   CPPUNIT_ASSERT_EQUAL_MESSAGE("Graph connections size" ,  (size_t)2, connections.size() );
-   BOOST_FOREACH( ::fwData::Graph::ConnectionContainer::value_type elem , connections )
-   {
-       ::fwTools::UUID::UUIDType edgeID = ::fwTools::UUID::get(elem.first);
-       CPPUNIT_ASSERT_MESSAGE("Test edge uuid" ,  edgeID == e12ID || edgeID == e23ID );
-       if ( edgeID == e12ID )
-       {
-           CPPUNIT_ASSERT( newGraph->getSourceNode( elem.first ) == n1 );
-           CPPUNIT_ASSERT( newGraph->getDestinationNode( elem.first ) == n2 );
-
-           // test field
-           CPPUNIT_ASSERT( elem.first->getField("infoTest") );
-           CPPUNIT_ASSERT( elem.first->getField< ::fwData::String >("infoTest")->value() == "valueInfoTest" );
-       }
-       else
-       {
-           CPPUNIT_ASSERT( newGraph->getSourceNode( elem.first ) == n2 );
-           CPPUNIT_ASSERT( newGraph->getDestinationNode( elem.first ) == n3 );
-       }
-   }
+    // Create Data from Atom
+    ::fwData::Graph::sptr newGraph = ::fwData::Graph::dynamicCast( ::fwAtomConversion::convert(atom) );
+
+    // nodes
+    ::fwData::Node::sptr n1, n2, n3;
+
+    // Test nodes
+    const ::fwData::Graph::NodeContainer & nodes = newGraph->getCRefNodes();
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Graph nodes size",  (size_t)3, nodes.size() );
+    for( ::fwData::Node::sptr node :  nodes )
+    {
+        ::fwTools::UUID::UUIDType nodeID = ::fwTools::UUID::get(node);
+        CPPUNIT_ASSERT_MESSAGE("Test node uuid",  nodeID == n1ID || nodeID == n2ID || nodeID == n3ID );
+        if (  nodeID == n1ID )
+        {
+            n1 = node;
+        }
+        else if  (  nodeID == n2ID )
+        {
+            n2 = node;
+        }
+        else if  (  nodeID == n3ID )
+        {
+            n3 = node;
+        }
+
+    }
+    CPPUNIT_ASSERT_MESSAGE("Test node n1", n1 );
+    CPPUNIT_ASSERT_MESSAGE("Test node n2", n2 );
+    CPPUNIT_ASSERT_MESSAGE("Test node n3", n3 );
+
+    // Test edges
+    const ::fwData::Graph::ConnectionContainer & connections = newGraph->getCRefConnections();
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Graph connections size",  (size_t)2, connections.size() );
+    for( ::fwData::Graph::ConnectionContainer::value_type elem  :  connections )
+    {
+        ::fwTools::UUID::UUIDType edgeID = ::fwTools::UUID::get(elem.first);
+        CPPUNIT_ASSERT_MESSAGE("Test edge uuid",  edgeID == e12ID || edgeID == e23ID );
+        if ( edgeID == e12ID )
+        {
+            CPPUNIT_ASSERT( newGraph->getSourceNode( elem.first ) == n1 );
+            CPPUNIT_ASSERT( newGraph->getDestinationNode( elem.first ) == n2 );
+
+            // test field
+            CPPUNIT_ASSERT( elem.first->getField("infoTest") );
+            CPPUNIT_ASSERT( elem.first->getField< ::fwData::String >("infoTest")->value() == "valueInfoTest" );
+        }
+        else
+        {
+            CPPUNIT_ASSERT( newGraph->getSourceNode( elem.first ) == n2 );
+            CPPUNIT_ASSERT( newGraph->getDestinationNode( elem.first ) == n3 );
+        }
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -296,7 +310,7 @@ void ConversionTest::tfConversionTest()
     atom = ::fwAtomConversion::convert( tf );
 
     ::fwData::TransferFunction::sptr newTF =
-            ::fwData::TransferFunction::dynamicCast( ::fwAtomConversion::convert(atom) );
+        ::fwData::TransferFunction::dynamicCast( ::fwAtomConversion::convert(atom) );
 
     compare(tf, newTF);
 }
@@ -314,7 +328,7 @@ void ConversionTest::seriesDBConversionTest()
 
 
     ::fwMedData::SeriesDB::sptr newSdb =
-            ::fwMedData::SeriesDB::dynamicCast( ::fwAtomConversion::convert(atom) );
+        ::fwMedData::SeriesDB::dynamicCast( ::fwAtomConversion::convert(atom) );
 
     compare(sdb, newSdb);
 }
@@ -326,16 +340,17 @@ void ConversionTest::objectMultiReferencedTest()
     ::fwAtoms::Object::sptr atom;
     {
         ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-        ::fwData::String::sptr data = ::fwData::String::New();
-        composite->getContainer()["key1"] = data;
-        composite->getContainer()["key2"] = data;
+        ::fwData::String::sptr data         = ::fwData::String::New();
+        composite->getContainer()["key1"]   = data;
+        composite->getContainer()["key2"]   = data;
 
         // Create Atom
         atom = ::fwAtomConversion::convert( composite );
     }
 
     // Create Data from Atom
-    ::fwData::Composite::sptr newComposite = ::fwData::Composite::dynamicCast( ::fwAtomConversion::convert(atom) );
+    ::fwData::Composite::sptr newComposite =
+        ::fwData::Composite::dynamicCast( ::fwAtomConversion::convert(atom) );
     ::fwData::Composite::ContainerType & dataMap = newComposite->getContainer();
     CPPUNIT_ASSERT( dataMap.find("key1") != dataMap.end() );
     CPPUNIT_ASSERT( dataMap.find("key2") != dataMap.end() );
@@ -352,8 +367,8 @@ void ConversionTest::recursiveObjectTest()
     ::fwTools::UUID::UUIDType compositeID;
     {
         ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-        compositeID = ::fwTools::UUID::get( composite );
-        composite->getContainer()["key"] = composite;
+        compositeID                         = ::fwTools::UUID::get( composite );
+        composite->getContainer()["key"]    = composite;
         // Create Atom
         atom = ::fwAtomConversion::convert( composite );
 
@@ -361,10 +376,11 @@ void ConversionTest::recursiveObjectTest()
         composite->getContainer().erase("key");
     }
 
-    CPPUNIT_ASSERT( ! ::fwTools::UUID::exist( compositeID ) );
+    CPPUNIT_ASSERT( !::fwTools::UUID::exist( compositeID ) );
 
     // Create Data from Atom
-    ::fwData::Composite::sptr newComposite = ::fwData::Composite::dynamicCast( ::fwAtomConversion::convert(atom) );
+    ::fwData::Composite::sptr newComposite =
+        ::fwData::Composite::dynamicCast( ::fwAtomConversion::convert(atom) );
     ::fwData::Composite::ContainerType & dataMap = newComposite->getContainer();
     CPPUNIT_ASSERT( dataMap.find("key") != dataMap.end() );
     CPPUNIT_ASSERT( newComposite == dataMap["key"] );
@@ -377,15 +393,15 @@ void ConversionTest::dataFactoryNotFoundExceptionTest()
     ::fwAtoms::Object::sptr atom;
     {
         ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-        ::fwData::String::sptr data = ::fwData::String::New();
-        composite->getContainer()["key"] = data;
+        ::fwData::String::sptr data         = ::fwData::String::New();
+        composite->getContainer()["key"]    = data;
 
         // Create Atom
         atom = ::fwAtomConversion::convert( composite );
     }
 
     {
-        ::fwAtoms::Map::sptr map = ::fwAtoms::Map::dynamicCast( atom->getAttribute("values") );
+        ::fwAtoms::Map::sptr map    = ::fwAtoms::Map::dynamicCast( atom->getAttribute("values") );
         ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::dynamicCast( (*map)["key"] );
         obj->eraseMetaInfo( ::fwAtomConversion::DataVisitor::CLASSNAME_METAINFO );
         obj->setMetaInfo( ::fwAtomConversion::DataVisitor::CLASSNAME_METAINFO, "CHANGE::CLASNAME" );
@@ -402,14 +418,14 @@ void ConversionTest::uuidExceptionTest()
 {
     // Create data
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-    ::fwData::String::sptr data = ::fwData::String::New();
-    composite->getContainer()["key"] = data;
+    ::fwData::String::sptr data         = ::fwData::String::New();
+    composite->getContainer()["key"]    = data;
 
     // Create Atom
     ::fwAtoms::Object::sptr atom = ::fwAtomConversion::convert( composite );
 
     CPPUNIT_ASSERT_THROW( ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::StrictPolicy()),
-            ::fwAtomConversion::exception::DuplicatedDataUUID );
+                          ::fwAtomConversion::exception::DuplicatedDataUUID );
 }
 
 
@@ -419,8 +435,8 @@ void ConversionTest::uuidChangeTest()
 {
     // Create data
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-    ::fwData::String::sptr data = ::fwData::String::New();
-    composite->getContainer()["key"] = data;
+    ::fwData::String::sptr data         = ::fwData::String::New();
+    composite->getContainer()["key"]    = data;
 
     // Create Atom
     ::fwAtoms::Object::sptr atom = ::fwAtomConversion::convert( composite );
@@ -429,8 +445,8 @@ void ConversionTest::uuidChangeTest()
     ::fwData::String::sptr dataReloaded;
 
     compositeReloaded = ::fwData::Composite::dynamicCast(
-                            ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ChangePolicy())
-                            );
+        ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ChangePolicy())
+        );
     dataReloaded = ::fwData::String::dynamicCast((*compositeReloaded)["key"]);
 
     CPPUNIT_ASSERT( ::fwTools::UUID::get(composite) != ::fwTools::UUID::get(compositeReloaded) );
@@ -445,8 +461,8 @@ void ConversionTest::uuidReuseTest()
 {
     // Create data
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-    ::fwData::String::sptr data = ::fwData::String::New();
-    composite->getContainer()["key"] = data;
+    ::fwData::String::sptr data         = ::fwData::String::New();
+    composite->getContainer()["key"]    = data;
 
     // Create Atom
     ::fwAtoms::Object::sptr atom = ::fwAtomConversion::convert( composite );
@@ -456,8 +472,8 @@ void ConversionTest::uuidReuseTest()
     ::fwData::String::sptr dataReloaded;
 
     compositeReloaded = ::fwData::Composite::dynamicCast(
-                            ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ReusePolicy())
-                            );
+        ::fwAtomConversion::convert(atom, ::fwAtomConversion::AtomVisitor::ReusePolicy())
+        );
     dataReloaded = ::fwData::String::dynamicCast((*compositeReloaded)["key"]);
 
     CPPUNIT_ASSERT_EQUAL( composite, compositeReloaded );
@@ -469,13 +485,17 @@ void ConversionTest::uuidReuseTest()
 class ClassNotCamped : public ::fwData::Object
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithNFactoriesMacro( (ClassNotCamped)(::fwData::Object),
-       ((::fwData::factory::New< ClassNotCamped > ,() )) );
+                                               ((::fwData::factory::New< ClassNotCamped >,() )) );
 
-    ClassNotCamped(::fwData::Object::Key key){};
-    void cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache ){};
+    ClassNotCamped(::fwData::Object::Key key)
+    {
+    }
+    void cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache )
+    {
+    }
 
 };
 
@@ -496,7 +516,7 @@ void ConversionTest::nullPtrManagmentTest()
         ::fwAtoms::Object::sptr atom;
         {
             ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
-            CPPUNIT_ASSERT( ! mesh->getPointColorsArray() );
+            CPPUNIT_ASSERT( !mesh->getPointColorsArray() );
 
             // Create Atom
             atom = ::fwAtomConversion::convert( mesh );
@@ -507,7 +527,7 @@ void ConversionTest::nullPtrManagmentTest()
 
         ::fwData::Mesh::sptr newMesh = ::fwData::Mesh::dynamicCast( ::fwAtomConversion::convert(atom) );
         CPPUNIT_ASSERT( newMesh );
-        CPPUNIT_ASSERT( ! newMesh->getPointColorsArray() );
+        CPPUNIT_ASSERT( !newMesh->getPointColorsArray() );
     }
 
     // null shared ptr in map is managed
@@ -515,8 +535,8 @@ void ConversionTest::nullPtrManagmentTest()
         ::fwAtoms::Object::sptr atom;
         {
             ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-            composite->getContainer()["key1"] = ::fwData::String::New();
-            composite->getContainer()["key2"] = ::fwData::Object::sptr();
+            composite->getContainer()["key1"]   = ::fwData::String::New();
+            composite->getContainer()["key2"]   = ::fwData::Object::sptr();
 
             // Create Atom
             atom = ::fwAtomConversion::convert( composite );
@@ -526,16 +546,17 @@ void ConversionTest::nullPtrManagmentTest()
             ::fwAtoms::Map::sptr map = ::fwAtoms::Map::dynamicCast( atom->getAttribute("values") );
             CPPUNIT_ASSERT_EQUAL( (size_t)2, map->size() );
             CPPUNIT_ASSERT( map->find("key2") != map->end() );
-            CPPUNIT_ASSERT( ! (*map)["key2"] );
+            CPPUNIT_ASSERT( !(*map)["key2"] );
         }
 
-        ::fwData::Composite::sptr newComposite = ::fwData::Composite::dynamicCast( ::fwAtomConversion::convert(atom) );
+        ::fwData::Composite::sptr newComposite =
+            ::fwData::Composite::dynamicCast( ::fwAtomConversion::convert(atom) );
         ::fwData::Composite::ContainerType & dataMap = newComposite->getContainer();
         CPPUNIT_ASSERT( newComposite );
         CPPUNIT_ASSERT_EQUAL( (size_t)2, dataMap.size() );
         CPPUNIT_ASSERT( dataMap["key1"] );
         CPPUNIT_ASSERT( dataMap.find("key2") != dataMap.end() );
-        CPPUNIT_ASSERT( ! dataMap["key2"] );
+        CPPUNIT_ASSERT( !dataMap["key2"] );
     }
 
     // null shared ptr in vector is managed
@@ -553,15 +574,15 @@ void ConversionTest::nullPtrManagmentTest()
         {
             ::fwAtoms::Sequence::sptr seq = ::fwAtoms::Sequence::dynamicCast( atom->getAttribute("values") );
             CPPUNIT_ASSERT_EQUAL( (size_t)2, seq->size() );
-            CPPUNIT_ASSERT( ! (*seq)[1] );
+            CPPUNIT_ASSERT( !(*seq)[1] );
         }
 
-        ::fwData::Vector::sptr newVector = ::fwData::Vector::dynamicCast( ::fwAtomConversion::convert(atom) );
+        ::fwData::Vector::sptr newVector          = ::fwData::Vector::dynamicCast( ::fwAtomConversion::convert(atom) );
         ::fwData::Vector::ContainerType & dataVec = newVector->getContainer();
         CPPUNIT_ASSERT( newVector );
         CPPUNIT_ASSERT_EQUAL( (size_t)2, dataVec.size() );
         CPPUNIT_ASSERT( dataVec[0] );
-        CPPUNIT_ASSERT( ! dataVec[1] );
+        CPPUNIT_ASSERT( !dataVec[1] );
     }
 }
 
@@ -574,25 +595,29 @@ void ConversionTest::nullPtrManagmentTest()
 #define EMTPY_CLASS_API
 fwCampAutoDeclareDataMacro((fwAtomConversion)(ut)(ClassNotManaged),EMTPY_CLASS_API);
 
-namespace fwAtomConversion {
-namespace ut {
+namespace fwAtomConversion
+{
+namespace ut
+{
 
 class ClassNotManaged : public ::fwData::Object
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithNFactoriesMacro( (ClassNotManaged)(::fwData::Object),
-       ((::fwData::factory::New< ClassNotManaged > ,() )) );
+                                               ((::fwData::factory::New< ClassNotManaged >,() )) );
 
     fwCampMakeFriendDataMacro((fwAtomConversion)(ut)(ClassNotManaged));
 
     ClassNotManaged(::fwData::Object::Key key)
     {
         m_values.insert( std::make_pair( ::fwData::String::New(), 0.2 ) );
-    };
+    }
 
-    void cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache ){};
+    void cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache )
+    {
+    }
 
     std::map< ::fwData::String::sptr, double > m_values;
 
@@ -605,14 +630,16 @@ public :
 fwCampImplementDataMacro((fwAtomConversion)(ut)(ClassNotManaged))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwAtomConversion")
-        .base< ::fwData::Object>()
-        .property("values", &::fwAtomConversion::ut::ClassNotManaged::m_values);
+    .tag("object_version", "1")
+    .tag("lib_name", "fwAtomConversion")
+    .base< ::fwData::Object>()
+    .property("values", &::fwAtomConversion::ut::ClassNotManaged::m_values);
 }
 
-namespace fwAtomConversion {
-namespace ut {
+namespace fwAtomConversion
+{
+namespace ut
+{
 
 void ConversionTest::conversionNotManagedExceptionTest()
 {
diff --git a/SrcLib/core/fwAtoms/CMakeLists.txt b/SrcLib/core/fwAtoms/CMakeLists.txt
index 1c3a1fb..1169074 100644
--- a/SrcLib/core/fwAtoms/CMakeLists.txt
+++ b/SrcLib/core/fwAtoms/CMakeLists.txt
@@ -1,14 +1,3 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwMemory
-    fwTools
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-
 
 
diff --git a/SrcLib/core/fwAtoms/COPYING b/SrcLib/core/fwAtoms/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwAtoms/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwAtoms/COPYING.LESSER b/SrcLib/core/fwAtoms/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwAtoms/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwAtoms/bin/build.options b/SrcLib/core/fwAtoms/bin/build.options
deleted file mode 100644
index 82807f3..0000000
--- a/SrcLib/core/fwAtoms/bin/build.options
+++ /dev/null
@@ -1,5 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-
-USE = ['boost']
-LIB = ['fwCore_0.1','fwTools_0.1','fwMemory_0-1']
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Base.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Base.hpp
index 6800227..c91b7d3 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Base.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Base.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMS_BASE_BASE_HPP__
-#define __FWATOMS_BASE_BASE_HPP__
+#ifndef __FWATOMS_BASE_HPP__
+#define __FWATOMS_BASE_HPP__
 
 
 #include <string>
@@ -47,7 +47,8 @@ public:
         }
     };
 
-    typedef enum {
+    typedef enum
+    {
         BOOLEAN = 1,
         NUMERIC,
         STRING,
@@ -60,7 +61,9 @@ public:
     fwCoreNonInstanciableClassDefinitionsMacro( (Base)(::fwCore::BaseObject) );
     fwCoreAllowSharedFromThis();
 
-    virtual ~Base(){};
+    virtual ~Base()
+    {
+    }
 
     /**
      * @brief Returns a clone object
@@ -71,49 +74,73 @@ public:
      *@brief Test if the current base is a value or not (Value = {string;numeric;boolean})
      *@return the test result
      */
-    bool isValue() const {return (type() == BOOLEAN) || (type() == NUMERIC) || (type() == STRING);};
+    bool isValue() const
+    {
+        return (type() == BOOLEAN) || (type() == NUMERIC) || (type() == STRING);
+    }
 
     /**
      *@brief Test if the current base is a boolean
      *@return the test result
      */
-    bool isBoolean() const {return (type() == BOOLEAN);};
+    bool isBoolean() const
+    {
+        return (type() == BOOLEAN);
+    }
 
     /**
      *@brief Test if the current base is a Numeric (real or integer)
      *@return the test result
      */
-    bool isNumeric() const {return (type() == NUMERIC);};
+    bool isNumeric() const
+    {
+        return (type() == NUMERIC);
+    }
 
     /**
      *@brief Test if the current base is a string
      *@return the test result
      */
-    bool isString() const {return (type() == STRING);};
+    bool isString() const
+    {
+        return (type() == STRING);
+    }
 
     /**
      *@brief Test if the current base is a sequence
      *@return the test result
      */
-    bool isSequence() const {return (type() == SEQUENCE);};
+    bool isSequence() const
+    {
+        return (type() == SEQUENCE);
+    }
 
     /**
      *@brief Test if the current base is a mapping
      *@return the test result
      */
-    bool isMapping() const {return (type() == MAP);};
+    bool isMapping() const
+    {
+        return (type() == MAP);
+    }
 
     /**
      *@brief Test if the current base is a blob (a object with a buffer)
      *@return the test result
      */
-    bool isBlob() const {return (type() == BLOB);};
+    bool isBlob() const
+    {
+        return (type() == BLOB);
+    }
 
     /**
      *@brief Test if the current base is an object (representation of fwData)
      *@return the test result
      */
-    bool isObject() const {return (type() == OBJECT);};
+    bool isObject() const
+    {
+        return (type() == OBJECT);
+    }
 
     /**
      * @brief Return the string representation of a value.
@@ -126,15 +153,17 @@ public:
      */
     virtual AtomType type() const = 0;
 
-protected :
+protected:
     /**
      * @brief Constructor
      */
-    Base(){};
+    Base()
+    {
+    }
 
 };
 
 }
 
-#endif /* __FWATOMS_BASE_BASE_HPP__ */
+#endif /* __FWATOMS_BASE_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Blob.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Blob.hpp
index b56e155..ac5d288 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Blob.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Blob.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMS_BASE_BLOB_HPP__
-#define __FWATOMS_BASE_BLOB_HPP__
+#ifndef __FWATOMS_BLOB_HPP__
+#define __FWATOMS_BLOB_HPP__
 
 #include <fwMemory/BufferObject.hpp>
 
@@ -23,20 +23,22 @@ namespace fwAtoms
 class FWATOMS_CLASS_API Blob : public Base
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Blob)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Blob >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Blob)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Blob >);
 
     /**
      * @brief Constructor
      * @param key Private construction key
      */
     Blob(::fwAtoms::Base::Key key)
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
     virtual ~Blob()
-    {}
+    {
+    }
 
     /**
      * @brief create a new Blob shared ptr.
@@ -68,7 +70,10 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::BLOB;};
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::BLOB;
+    }
 
 protected:
 
@@ -79,5 +84,5 @@ protected:
 
 
 
-#endif /* _FWATOMS_BASE_BLOB_HPP_ */
+#endif /* __FWATOMS_BLOB_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Boolean.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Boolean.hpp
index 67515eb..aa8d81c 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Boolean.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Boolean.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWATOMS_BASE_BOOLEAN_HPP_
-#define _FWATOMS_BASE_BOOLEAN_HPP_
+#ifndef __FWATOMS_BOOLEAN_HPP__
+#define __FWATOMS_BOOLEAN_HPP__
 
 
 #include <string>
@@ -24,20 +24,22 @@ namespace fwAtoms
 class FWATOMS_CLASS_API Boolean : public Base
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Boolean)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Boolean > ) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Boolean)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Boolean > );
 
     /**
      * @brief Constructor
      * @param key Private construction key
      */
     Boolean(::fwAtoms::Base::Key key) : m_value(false)
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
     virtual ~Boolean()
-    {}
+    {
+    }
 
     FWATOMS_API virtual std::string getString() const;
 
@@ -65,9 +67,15 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::BOOLEAN;};
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::BOOLEAN;
+    }
 
-    bool getValue() const {return m_value;};
+    bool getValue() const
+    {
+        return m_value;
+    }
 
 protected:
 
@@ -92,5 +100,5 @@ protected:
 
 
 
-#endif /* _FWATOMS_BASE_BOOLEAN_HPP_ */
+#endif /* __FWATOMS_BOOLEAN_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Exception.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Exception.hpp
index 1dbbf47..7a5cdb6 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Exception.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Exception.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWATOMS_EXCEPTION_HPP_
-#define _FWATOMS_EXCEPTION_HPP_
+#ifndef __FWATOMS_EXCEPTION_HPP__
+#define __FWATOMS_EXCEPTION_HPP__
 
 #include <exception>
 #include <string>
@@ -39,5 +39,5 @@ struct FWATOMS_CLASS_API Exception : public ::fwCore::Exception
 
 } // namespace fwAtoms
 
-#endif // _FWATOMS_EXCEPTION_HPP_
+#endif // __FWATOMS_EXCEPTION_HPP__
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Map.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Map.hpp
index 4f14e1e..c378ba3 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Map.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Map.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMS_BASE_MAP_HPP_
-#define __FWATOMS_BASE_MAP_HPP_
+#ifndef __FWATOMS_MAP_HPP__
+#define __FWATOMS_MAP_HPP__
 
 
 #include <map>
@@ -25,14 +25,14 @@ namespace fwAtoms
  *
  * For exemple, this metadata is used to bind :
  * \li std::map
- * \li boost::unordered_map
+ * \li ::boost::unordered_map
  * \li fwData::Graph (a part)
  * \li boost graph
  */
 class FWATOMS_CLASS_API Map : public Base
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Map)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Map >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Map)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Map >);
 
     typedef std::map<std::string, Base::sptr> MapType;
 
@@ -63,13 +63,15 @@ public:
      * @param key Private construction key
      */
     Map(::fwAtoms::Base::Key key)
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
     virtual ~Map()
-    {}
+    {
+    }
 
     /**
      * @brief Insert a new value in the map.
@@ -77,49 +79,75 @@ public:
      * @param value the new value
      */
     std::pair<IteratorType, bool> insert(const std::string &key, const Base::sptr &value)
-    { return m_value.insert( ValueType(key, value) ); }
+    {
+        return m_value.insert( ValueType(key, value) );
+    }
 
     /**
      * @brief retrieve size of map
      * @return the map size
      */
-    size_t size() const {return m_value.size();}
+    size_t size() const
+    {
+        return m_value.size();
+    }
 
     /**
      *@brief Provide an iterator on the first element
      *@return An iterator on the first element, end() if map is empty.
      */
-    IteratorType begin(){return m_value.begin();}
+    IteratorType begin()
+    {
+        return m_value.begin();
+    }
 
     /**
      *@brief Provide a const iterator on the first element
      *@return An iterator on the first element, end() if map is empty.
      */
-    ConstIteratorType begin() const{return m_value.begin();}
+    ConstIteratorType begin() const
+    {
+        return m_value.begin();
+    }
 
     /**
      * @brief Return an iterator after the last element in the map
      */
-    IteratorType end(){return m_value.end();}
+    IteratorType end()
+    {
+        return m_value.end();
+    }
 
     /**
      * @brief Return a const iterator after the last element in the map
      */
-    ConstIteratorType end() const{return m_value.end();}
+    ConstIteratorType end() const
+    {
+        return m_value.end();
+    }
 
     //! clear the map
-    void  clear() {m_value.clear();}
+    void  clear()
+    {
+        m_value.clear();
+    }
 
     /**
      * @brief test if the map is empty
      * @return true if empty
      */
-    bool empty() const {return m_value.empty();}
+    bool empty() const
+    {
+        return m_value.empty();
+    }
 
     /**
      * @brief returns atom's map
      */
-    const MapType& getValue() const {return m_value;}
+    const MapType& getValue() const
+    {
+        return m_value;
+    }
 
 
     /**
@@ -128,7 +156,10 @@ public:
      * @return an iterator on value pointed by key if exist, else return
      * Map.end()
      */
-    MapType::const_iterator find(const std::string &key) const {return m_value.find(key);}
+    MapType::const_iterator find(const std::string &key) const
+    {
+        return m_value.find(key);
+    }
 
 
     /**
@@ -137,7 +168,10 @@ public:
      * @return the value associated with the key or an empty base if the key
      *         is not in the map.
      */
-    Base::sptr operator[](const std::string &key){return m_value[key];}
+    Base::sptr operator[](const std::string &key)
+    {
+        return m_value[key];
+    }
 
     /**
      * @brief Returns a clone object
@@ -147,15 +181,18 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::MAP;}
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::MAP;
+    }
 
 
 protected:
-     MapType m_value;
+    MapType m_value;
 };
 
 }
 
 
-#endif /* __FWATOMS_BASE_MAP_HPP_ */
+#endif /* __FWATOMS_MAP_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hpp
index 4d9db18..08976ec 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWATOMS_BASE_NUMERIC_HPP_
-#define _FWATOMS_BASE_NUMERIC_HPP_
+#ifndef __FWATOMS_NUMERIC_HPP__
+#define __FWATOMS_NUMERIC_HPP__
 
 #include <string>
 
@@ -21,13 +21,13 @@ namespace fwAtoms
 {
 
 /**
-* @brief Storing a  numeric value
-**/
+ * @brief Storing a  numeric value
+ **/
 class FWATOMS_CLASS_API Numeric : public Base
 {
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Numeric)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Numeric >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Numeric)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Numeric >);
 
 
     typedef enum
@@ -46,12 +46,15 @@ public:
      * @param key Private construction key
      */
     Numeric(::fwAtoms::Base::Key key)
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
-    virtual ~Numeric() {}
+    virtual ~Numeric()
+    {
+    }
 
 
     /**
@@ -70,19 +73,28 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::NUMERIC;}
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::NUMERIC;
+    }
 
     /**
      * @brief Returns currently held numeric type
      */
-    NumericType variantType() const {return static_cast< NumericType >(m_value.which());}
+    NumericType variantType() const
+    {
+        return static_cast< NumericType >(m_value.which());
+    }
 
     /**
      * @brief Returns const reference to numeric's variant
      *
      * @return
      */
-    const ValueType &getVariant() const {return m_value;}
+    const ValueType &getVariant() const
+    {
+        return m_value;
+    }
 
     /**
      * @brief Returns a string representing the currently held numeric value
@@ -132,5 +144,5 @@ protected:
 
 
 
-#endif /* _FWATOMS_BASE_NUMERIC_HPP_ */
+#endif /* __FWATOMS_NUMERIC_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hxx b/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hxx
index f61bb45..0207f8c 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hxx
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Numeric.hxx
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMS_BASE_NUMERIC_HXX__
-#define __FWATOMS_BASE_NUMERIC_HXX__
+#ifndef __FWATOMS_NUMERIC_HXX__
+#define __FWATOMS_NUMERIC_HXX__
 
 
 #include <boost/numeric/conversion/cast.hpp>
@@ -28,48 +28,48 @@ namespace fwAtoms
 
 class NumericSetter
 {
-    friend class Numeric;
+friend class Numeric;
 
 
-    template< typename T >
-    static void setValue( Numeric::ValueType &v,
-                          typename ::boost::enable_if_c<
-                         ::boost::is_same<
-                                typename ::boost::remove_reference< typename ::boost::remove_const <T>::type >::type,
-                                std::string
-                            >::value
+template< typename T >
+static void setValue( Numeric::ValueType &v,
+                      typename ::boost::enable_if_c<
+                          ::boost::is_same<
+                              typename ::boost::remove_reference< typename ::boost::remove_const <T>::type >::type,
+                              std::string
+                              >::value
 
                           , T>::type value )
-    {
-        v = Numeric::valueFromString(value);
-    }
+{
+    v = Numeric::valueFromString(value);
+}
 
 
-    template< typename T >
-    static void setValue( Numeric::ValueType &v,
-                          typename ::boost::enable_if_c<
-                         ::boost::mpl::and_< ::boost::is_signed<T>, ::boost::is_integral<T> >::value
+template< typename T >
+static void setValue( Numeric::ValueType &v,
+                      typename ::boost::enable_if_c<
+                          ::boost::mpl::and_< ::boost::is_signed<T>, ::boost::is_integral<T> >::value
                           , T>::type value )
-    {
-        v = static_cast< ::boost::int64_t>(value);
-    }
+{
+    v = static_cast< ::boost::int64_t>(value);
+}
 
 
-    template< typename T >
-    static void setValue( Numeric::ValueType &v,
-                          typename ::boost::enable_if_c<
-                         ::boost::mpl::and_< ::boost::is_unsigned<T>,::boost::is_integral<T> >::value
+template< typename T >
+static void setValue( Numeric::ValueType &v,
+                      typename ::boost::enable_if_c<
+                          ::boost::mpl::and_< ::boost::is_unsigned<T>,::boost::is_integral<T> >::value
                           , T>::type value )
-    {
-        v = static_cast< ::boost::uint64_t>(value);
-    }
+{
+    v = static_cast< ::boost::uint64_t>(value);
+}
 
-    template< typename T >
-    static void setValue( Numeric::ValueType &v,
-                          typename ::boost::enable_if_c< ::boost::is_floating_point<T>::value, T>::type value )
-    {
-        v = value;
-    }
+template< typename T >
+static void setValue( Numeric::ValueType &v,
+                      typename ::boost::enable_if_c< ::boost::is_floating_point<T>::value, T>::type value )
+{
+    v = value;
+}
 
 };
 
@@ -118,5 +118,5 @@ T Numeric::getValue() const
 
 }
 
-#endif
+#endif //__FWATOMS_NUMERIC_HXX__
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Object.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Object.hpp
index a3eeffa..fbf202a 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Object.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Object.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,7 +21,7 @@ namespace fwAtoms
 class FWATOMS_CLASS_API Object : public Base
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Object)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Object >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Object)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Object >);
 
     typedef std::map<std::string, Base::sptr> AttributesType;
     typedef std::map<std::string, std::string> MetaInfosType;
@@ -33,19 +33,24 @@ public:
      * @param key Private construction key
      */
     Object(::fwAtoms::Base::Key key)
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
     virtual ~Object()
-    {}
+    {
+    }
 
     //! Sets the attributes map
     FWATOMS_API void setAttributes(const AttributesType& attrs);
 
     //! Returns the internal map
-    const AttributesType& getAttributes() const {return m_attributes;}
+    const AttributesType& getAttributes() const
+    {
+        return m_attributes;
+    }
 
 
     //! Returns requested attribute if exists, empty sptr else.
@@ -85,7 +90,10 @@ public:
     FWATOMS_API std::string getMetaInfo(const std::string& key) const;
 
     //! Get internal metaInfo mapping
-    const MetaInfosType& getMetaInfos() const { return m_metaInfos; }
+    const MetaInfosType& getMetaInfos() const
+    {
+        return m_metaInfos;
+    }
 
     /**
      * @brief Removes a MetaInfo
@@ -107,17 +115,20 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::OBJECT;};
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::OBJECT;
+    }
 
 
 private:
 
-    MetaInfosType  m_metaInfos;
+    MetaInfosType m_metaInfos;
     AttributesType m_attributes;
 
 };
 
 }
 
-#endif /*  _FWATOMS_OBJECT_HPP_ */
+#endif /*  __FWATOMS_OBJECT_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Object.hxx b/SrcLib/core/fwAtoms/include/fwAtoms/Object.hxx
index edcafc0..359acac 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Object.hxx
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Object.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,7 +22,7 @@ template < typename OBJECT_TYPE >
 SPTR(OBJECT_TYPE) Object::getAttribute(const std::string& key) const
 {
     ::fwAtoms::Base::sptr base = this->getAttribute(key);
-    return ::boost::dynamic_pointer_cast< OBJECT_TYPE >(base);
+    return std::dynamic_pointer_cast< OBJECT_TYPE >(base);
 }
 
 }
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/Sequence.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/Sequence.hpp
index 738973e..d9fb3ed 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/Sequence.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/Sequence.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWATOMS_BASE_SEQUENCE_HPP_
-#define _FWATOMS_BASE_SEQUENCE_HPP_
+#ifndef __FWATOMS_SEQUENCE_HPP__
+#define __FWATOMS_SEQUENCE_HPP__
 
 #include <vector>
 
@@ -22,7 +22,7 @@ namespace fwAtoms
 class FWATOMS_CLASS_API Sequence : public Base
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Sequence)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Sequence > ) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Sequence)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< Sequence > );
 
     typedef std::vector<Base::sptr> SequenceType;
 
@@ -52,47 +52,82 @@ public:
      * @param key Private construction key
      */
     Sequence(::fwAtoms::Base::Key key)
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
     virtual ~Sequence()
-    {}
+    {
+    }
 
     /**
      * @brief push an atom in the sequence.
      */
-    void push_back(const Base::sptr &value){m_value.push_back(value);};
+    void push_back(const Base::sptr &value)
+    {
+        m_value.push_back(value);
+    }
 
     //! Begin of sequence iterator
-    IteratorType  begin(){return m_value.begin();}
+    IteratorType  begin()
+    {
+        return m_value.begin();
+    }
 
     //! End of sequence iterator
-    IteratorType  end() {return m_value.end();}
+    IteratorType  end()
+    {
+        return m_value.end();
+    }
 
     //! Begin of sequence const iterator
-    ConstIteratorType begin() const {return m_value.begin();}
+    ConstIteratorType begin() const
+    {
+        return m_value.begin();
+    }
 
     //! End of sequence const iterator
-    ConstIteratorType end() const {return m_value.end();}
+    ConstIteratorType end() const
+    {
+        return m_value.end();
+    }
 
 
     //! Returns the sequence size
-    size_type size() const {return m_value.size();}
+    size_type size() const
+    {
+        return m_value.size();
+    }
 
     //! clear the sequence
-    void  clear() {m_value.clear();}
+    void  clear()
+    {
+        m_value.clear();
+    }
 
     //! Test if the sequence is empty
-    bool empty() const {return m_value.empty();}
+    bool empty() const
+    {
+        return m_value.empty();
+    }
 
     //! Returns internal vector
-    const SequenceType& getValue() const{return m_value;};
+    const SequenceType& getValue() const
+    {
+        return m_value;
+    }
 
     //! access an element in position index
-    Base::sptr &operator[](unsigned int index){return m_value[index];}
-    const Base::sptr &operator[](unsigned int index) const {return m_value[index];}
+    Base::sptr &operator[](unsigned int index)
+    {
+        return m_value[index];
+    }
+    const Base::sptr &operator[](unsigned int index) const
+    {
+        return m_value[index];
+    }
 
     /**
      * @brief Returns a clone object
@@ -102,7 +137,10 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::SEQUENCE;};
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::SEQUENCE;
+    }
 
 
 protected:
@@ -110,5 +148,5 @@ protected:
 };
 
 }
-#endif
+#endif //__FWATOMS_SEQUENCE_HPP__
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/String.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/String.hpp
index 230fa2b..e273ff6 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/String.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/String.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWATOMS_BASE_STRING_HPP_
-#define _FWATOMS_BASE_STRING_HPP_
+#ifndef __FWATOMS_STRING_HPP__
+#define __FWATOMS_STRING_HPP__
 
 #include <string>
 
@@ -23,26 +23,37 @@ namespace fwAtoms
 class FWATOMS_CLASS_API String : public Base
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (String)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< String > ) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (String)(::fwAtoms::Base), (()), ::fwAtoms::factory::New< String > );
 
     /**
      * @brief Constructor
      * @param key Private construction key
      */
     String(::fwAtoms::Base::Key key) : m_value("")
-    {}
+    {
+    }
 
     /**
      * @brief   Destructor
      */
     virtual ~String()
-    {}
+    {
+    }
 
-    const std::string& getValue() const {return m_value;};
+    const std::string& getValue() const
+    {
+        return m_value;
+    }
 
-    void setValue( const std::string &value ){m_value=value;};
+    void setValue( const std::string &value )
+    {
+        m_value = value;
+    }
 
-    std::string getString() const {return m_value;};
+    std::string getString() const
+    {
+        return m_value;
+    }
 
     /**
      * @brief Construct a new Object represented a string.
@@ -59,7 +70,10 @@ public:
     /**
      * @brief returns Atom type
      */
-    ::fwAtoms::Base::AtomType type() const {return ::fwAtoms::Base::STRING;};
+    ::fwAtoms::Base::AtomType type() const
+    {
+        return ::fwAtoms::Base::STRING;
+    }
 
 
 protected:
@@ -71,5 +85,5 @@ protected:
 
 
 
-#endif /* _FWATOMS_BASE_STRING_HPP_ */
+#endif /* __FWATOMS_STRING_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/config.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/config.hpp
deleted file mode 100644
index 66506ab..0000000
--- a/SrcLib/core/fwAtoms/include/fwAtoms/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#ifndef _FWATOMS_CONFIG_HPP_
-#define _FWATOMS_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWATOMS_EXPORTS
-            #define FWATOMS_API __declspec(dllexport)
-        #else
-            #define FWATOMS_API __declspec(dllimport)
-        #endif
-
-        #define FWATOMS_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWATOMS_EXPORTS
-            #define FWATOMS_API __attribute__ ((visibility("default")))
-            #define FWATOMS_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWATOMS_API __attribute__ ((visibility("hidden")))
-            #define FWATOMS_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWATOMS_API
-        #define FWATOMS_CLASS_API
-
-    #endif
-
-#endif //FWATOMS_API
-
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/factory/namespace.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/factory/namespace.hpp
index 2478078..bce3f56 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/factory/namespace.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/factory/new.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/factory/new.hpp
index 8bd9b60..cfb84f8 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/factory/new.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -33,10 +32,12 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwAtoms::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwAtoms::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 
@@ -44,7 +45,7 @@ FWATOMS_API SPTR( ::fwAtoms::Base ) New( const ::fwAtoms::registry::KeyType & cl
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
     return obj;
 }
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/namespace.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/namespace.hpp
index 8d5cd15..4ea78ac 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/namespace.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C), 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWATOMS_NAMESPACE_HPP_
-#define _FWATOMS_NAMESPACE_HPP_
+#ifndef __FWATOMS_NAMESPACE_HPP__
+#define __FWATOMS_NAMESPACE_HPP__
 
 /**
  * @namespace   fwAtoms
@@ -25,5 +25,5 @@ namespace fwAtoms
 {
 }
 
-#endif /* _FWATOMS_NAMESPACE_HPP_ */
+#endif /* __FWATOMS_NAMESPACE_HPP__ */
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/registry/detail.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/registry/detail.hpp
index 44ef655..77902b0 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/registry/detail.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtoms::Base) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtoms::Base) (), KeyType > Type;
 
 FWATOMS_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/registry/macros.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/registry/macros.hpp
index 8eab1ad..95fcf0d 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/registry/macros.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMS_REGISTRY_MACRO_HPP__
-#define __FWATOMS_REGISTRY_MACRO_HPP__
+#ifndef __FWATOMS_REGISTRY_MACROS_HPP__
+#define __FWATOMS_REGISTRY_MACROS_HPP__
 
 #include "fwAtoms/registry/detail.hpp"
 
@@ -15,10 +15,10 @@ namespace registry
 {
 
 #define fwAtomsRegisterMacro( classname )                                  \
-    static ::fwAtoms::Base::Registrar< classname > s__factory__record__ ## __LINE__ ;
+    static ::fwAtoms::Base::Registrar< classname > s__factory__record__ ## __LINE__;
 
 } // end namespace registry
 } // end namespace fwAtoms
 
-#endif /*__FWATOMS_REGISTRY_MACRO_HPP__*/
+#endif /*__FWATOMS_REGISTRY_MACROS_HPP__*/
 
diff --git a/SrcLib/core/fwAtoms/include/fwAtoms/registry/namespace.hpp b/SrcLib/core/fwAtoms/include/fwAtoms/registry/namespace.hpp
index a02b3ef..d04b51c 100644
--- a/SrcLib/core/fwAtoms/include/fwAtoms/registry/namespace.hpp
+++ b/SrcLib/core/fwAtoms/include/fwAtoms/registry/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Base.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Base.cpp
index 100aa80..e88692d 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Base.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Base.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Blob.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Blob.cpp
index 7035f44..74fe04d 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Blob.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Blob.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Boolean.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Boolean.cpp
index edaeedf..25306f9 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Boolean.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Boolean.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Exception.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Exception.cpp
index 295d466..ea44a1e 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Exception.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Exception.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,12 +10,14 @@ namespace fwAtoms
 {
 
 Exception::Exception(const std::string &message) throw()
-: ::fwCore::Exception(message)
-{}
+    : ::fwCore::Exception(message)
+{
+}
 
 
 Exception::~Exception() throw()
-{}
+{
+}
 
 
 
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Map.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Map.cpp
index 94ecdb7..c508da2 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Map.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Map.cpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include "fwAtoms/registry/macros.hpp"
 #include "fwAtoms/Map.hpp"
+#include "fwAtoms/registry/macros.hpp"
 
 fwAtomsRegisterMacro( ::fwAtoms::Map );
 
@@ -19,7 +17,7 @@ namespace fwAtoms
 Base::sptr Map::clone() const
 {
     Map::sptr cloneMap = Map::New();
-    BOOST_FOREACH(const ValueType &elem, m_value)
+    for(const ValueType &elem :  m_value)
     {
         cloneMap->m_value.insert( ValueType(elem.first, elem.second->clone() ) );
     }
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Numeric.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Numeric.cpp
index 696cf70..a81deba 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Numeric.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Numeric.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,7 +46,7 @@ bool lexicalCast( Numeric::ValueType &v, const std::string &s )
     try
     {
         T val = ::boost::lexical_cast< T >( s );
-        v = val;
+        v  = val;
         ok = true;
     }
     catch ( const ::boost::bad_lexical_cast &)
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Object.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Object.cpp
index 7c42c45..1965ae4 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Object.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Object.cpp
@@ -1,17 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/type_traits.hpp>
-
-#include <fwCamp/UserObject.hpp>
-
 #include "fwAtoms/registry/macros.hpp"
 #include "fwAtoms/Object.hpp"
 
+#include <fwCamp/UserObject.hpp>
+
+#include <boost/type_traits.hpp>
 
 fwAtomsRegisterMacro( ::fwAtoms::Object );
 
@@ -51,7 +49,7 @@ Base::sptr Object::clone() const
     Object::sptr obj = Object::New();
     obj->m_metaInfos = m_metaInfos;
 
-    BOOST_FOREACH(const AttributesType::value_type& elem, m_attributes)
+    for(const AttributesType::value_type& elem :  m_attributes)
     {
         if ( elem.second )
         {
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/Sequence.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/Sequence.cpp
index b2876dd..c8ac064 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/Sequence.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/Sequence.cpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
-#include <boost/foreach.hpp>
-#include <boost/bind.hpp>
-
 #include "fwAtoms/registry/macros.hpp"
 #include "fwAtoms/Sequence.hpp"
 
+#include <algorithm>
+#include <functional>
+
 fwAtomsRegisterMacro( ::fwAtoms::Sequence );
 
 namespace fwAtoms
@@ -22,7 +21,8 @@ Base::sptr Sequence::clone() const
 {
     Sequence::sptr cloneSeq = Sequence::New();
     cloneSeq->m_value.resize(m_value.size());
-    std::transform(m_value.begin(), m_value.end(), cloneSeq->m_value.begin(), boost::bind(&::fwAtoms::Base::clone, _1));
+    std::transform(m_value.begin(), m_value.end(), cloneSeq->m_value.begin(),
+                   std::bind(&::fwAtoms::Base::clone, std::placeholders::_1));
     return cloneSeq;
 }
 
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/String.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/String.cpp
index f9f2957..4b64d59 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/String.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/String.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/factory/new.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/factory/new.cpp
index f069190..c9e3b0f 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/factory/new.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtoms/src/fwAtoms/registry/detail.cpp b/SrcLib/core/fwAtoms/src/fwAtoms/registry/detail.cpp
index de09fd3..d4cc3e6 100644
--- a/SrcLib/core/fwAtoms/src/fwAtoms/registry/detail.cpp
+++ b/SrcLib/core/fwAtoms/src/fwAtoms/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@ namespace fwAtoms
 namespace registry
 {
 
-struct FwAtomsRegistryInstantiatorTag {} ;
+struct FwAtomsRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwAtoms/test/CMakeLists.txt b/SrcLib/core/fwAtoms/test/CMakeLists.txt
index 207087b..35626b0 100644
--- a/SrcLib/core/fwAtoms/test/CMakeLists.txt
+++ b/SrcLib/core/fwAtoms/test/CMakeLists.txt
@@ -1,10 +1,9 @@
 
 fwLoadProperties()
 
-find_package (Boost COMPONENTS date_time REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/core/fwAtoms/test/Properties.cmake b/SrcLib/core/fwAtoms/test/Properties.cmake
index 8c9bbac..d2bc638 100644
--- a/SrcLib/core/fwAtoms/test/Properties.cmake
+++ b/SrcLib/core/fwAtoms/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwAtomsTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwAtoms )
+set( DEPENDENCIES fwCore fwTools fwAtoms fwMemory)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwAtoms/test/cppunit.options b/SrcLib/core/fwAtoms/test/cppunit.options
deleted file mode 100644
index 4224546..0000000
--- a/SrcLib/core/fwAtoms/test/cppunit.options
+++ /dev/null
@@ -1,10 +0,0 @@
-
-CLASSTEST=[
-    'AtomTest',
-    'NumericTest',
-    'BooleanTest',
-    'StringTest',
-]
-
-LIB = ['fwTools_0-1','fwCore_0-1', 'fwAtoms_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwAtoms/test/tu/include/AtomTest.hpp b/SrcLib/core/fwAtoms/test/tu/include/AtomTest.hpp
index 4f2be1c..1971676 100644
--- a/SrcLib/core/fwAtoms/test/tu/include/AtomTest.hpp
+++ b/SrcLib/core/fwAtoms/test/tu/include/AtomTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,12 +16,12 @@ namespace ut
 
 class AtomTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( AtomTest );
-    CPPUNIT_TEST( blobTest );
-    CPPUNIT_TEST( mapTest );
-    CPPUNIT_TEST( objectTest );
-    CPPUNIT_TEST( sequenceTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( AtomTest );
+CPPUNIT_TEST( blobTest );
+CPPUNIT_TEST( mapTest );
+CPPUNIT_TEST( objectTest );
+CPPUNIT_TEST( sequenceTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwAtoms/test/tu/include/BooleanTest.hpp b/SrcLib/core/fwAtoms/test/tu/include/BooleanTest.hpp
index 00b0b6f..80d6ceb 100644
--- a/SrcLib/core/fwAtoms/test/tu/include/BooleanTest.hpp
+++ b/SrcLib/core/fwAtoms/test/tu/include/BooleanTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class BooleanTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( BooleanTest );
-    CPPUNIT_TEST( conversion );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( BooleanTest );
+CPPUNIT_TEST( conversion );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwAtoms/test/tu/include/NumericTest.hpp b/SrcLib/core/fwAtoms/test/tu/include/NumericTest.hpp
index 894cebf..a0d1b39 100644
--- a/SrcLib/core/fwAtoms/test/tu/include/NumericTest.hpp
+++ b/SrcLib/core/fwAtoms/test/tu/include/NumericTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMS_UT_NUMERIC_HPP__
-#define __FWATOMS_UT_NUMERIC_HPP__
+#ifndef __FWATOMS_UT_NUMERICTEST_HPP__
+#define __FWATOMS_UT_NUMERICTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,12 +16,12 @@ namespace ut
 
 class NumericTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( NumericTest );
-    CPPUNIT_TEST( emptyTest );
-    CPPUNIT_TEST( intTest );
-    CPPUNIT_TEST( floatingTest );
-    CPPUNIT_TEST( mixedTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( NumericTest );
+CPPUNIT_TEST( emptyTest );
+CPPUNIT_TEST( intTest );
+CPPUNIT_TEST( floatingTest );
+CPPUNIT_TEST( mixedTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -40,5 +40,5 @@ public:
 
 
 
-#endif // __FWATOMS_UT_NUMERIC_HPP__
+#endif // __FWATOMS_UT_NUMERICTEST_HPP__
 
diff --git a/SrcLib/core/fwAtoms/test/tu/include/StringTest.hpp b/SrcLib/core/fwAtoms/test/tu/include/StringTest.hpp
index 12b28ad..321f627 100644
--- a/SrcLib/core/fwAtoms/test/tu/include/StringTest.hpp
+++ b/SrcLib/core/fwAtoms/test/tu/include/StringTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class StringTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( StringTest );
-    CPPUNIT_TEST( conversion );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( StringTest );
+CPPUNIT_TEST( conversion );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwAtoms/test/tu/src/AtomTest.cpp b/SrcLib/core/fwAtoms/test/tu/src/AtomTest.cpp
index 30df3fc..215710c 100644
--- a/SrcLib/core/fwAtoms/test/tu/src/AtomTest.cpp
+++ b/SrcLib/core/fwAtoms/test/tu/src/AtomTest.cpp
@@ -1,13 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <limits>
-
-#include <fwMemory/BufferObject.hpp>
+#include "AtomTest.hpp"
 
 #include <fwAtoms/Blob.hpp>
 #include <fwAtoms/Exception.hpp>
@@ -15,8 +12,9 @@
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
 #include <fwAtoms/Sequence.hpp>
-#include "AtomTest.hpp"
+#include <fwMemory/BufferObject.hpp>
 
+#include <limits>
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwAtoms::ut::AtomTest );
 
@@ -55,8 +53,8 @@ void AtomTest::mapTest()
 
     CPPUNIT_ASSERT_THROW(map->getString(), ::fwAtoms::Exception);
 
-    ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::New();
-    ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::New();
+    ::fwAtoms::Blob::sptr blob    = ::fwAtoms::Blob::New();
+    ::fwAtoms::Object::sptr obj   = ::fwAtoms::Object::New();
     ::fwAtoms::Sequence::sptr seq = ::fwAtoms::Sequence::New();
     map->insert("blob", blob);
     map->insert("object", obj);
@@ -82,8 +80,8 @@ void AtomTest::objectTest()
 
     CPPUNIT_ASSERT_THROW(obj->getString(), ::fwAtoms::Exception);
 
-    ::fwAtoms::Map::sptr map = ::fwAtoms::Map::New();
-    ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::New();
+    ::fwAtoms::Map::sptr map      = ::fwAtoms::Map::New();
+    ::fwAtoms::Blob::sptr blob    = ::fwAtoms::Blob::New();
     ::fwAtoms::Sequence::sptr seq = ::fwAtoms::Sequence::New();
 
     obj->setAttribute("blob", blob);
@@ -160,7 +158,7 @@ void AtomTest::sequenceTest()
     CPPUNIT_ASSERT_EQUAL( size_t(4), clone->size() );
 
 
-    ::fwAtoms::Sequence::ConstIteratorType iterSeq = seq->begin();
+    ::fwAtoms::Sequence::ConstIteratorType iterSeq   = seq->begin();
     ::fwAtoms::Sequence::ConstIteratorType iterClone = clone->begin();
 
     CPPUNIT_ASSERT_EQUAL( (*(iterClone++))->type(), (*(iterSeq++))->type() );
diff --git a/SrcLib/core/fwAtoms/test/tu/src/BooleanTest.cpp b/SrcLib/core/fwAtoms/test/tu/src/BooleanTest.cpp
index 584b37b..abda32c 100644
--- a/SrcLib/core/fwAtoms/test/tu/src/BooleanTest.cpp
+++ b/SrcLib/core/fwAtoms/test/tu/src/BooleanTest.cpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <limits>
+#include "BooleanTest.hpp"
 
 #include <fwAtoms/Boolean.hpp>
-#include "BooleanTest.hpp"
+
+#include <limits>
+
 
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwAtoms::ut::BooleanTest );
@@ -37,7 +38,7 @@ void BooleanTest::conversion()
 
     ::fwAtoms::Boolean::sptr meta;
 
-    BOOST_FOREACH ( bool BOOL, VALUES )
+    for ( bool BOOL : VALUES )
     {
         std::string res = BOOL ? "true" : "false";
 
diff --git a/SrcLib/core/fwAtoms/test/tu/src/NumericTest.cpp b/SrcLib/core/fwAtoms/test/tu/src/NumericTest.cpp
index 432422b..cf49aaf 100644
--- a/SrcLib/core/fwAtoms/test/tu/src/NumericTest.cpp
+++ b/SrcLib/core/fwAtoms/test/tu/src/NumericTest.cpp
@@ -1,22 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <limits>
-
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
+#include "NumericTest.hpp"
 
+#include <fwAtoms/Exception.hpp>
 
 #include <fwAtoms/Numeric.hpp>
 #include <fwAtoms/Numeric.hxx>
 
-#include <fwAtoms/Exception.hpp>
-
-#include "NumericTest.hpp"
-
+#include <boost/lexical_cast.hpp>
+#include <limits>
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwAtoms::ut::NumericTest );
 
@@ -103,7 +99,7 @@ void NumericTest::floatingTest()
     double d1 = 0.234;
     double d2 = std::numeric_limits< double >::max();
     double d3 = -42.4;
-    float  f1 = 4327.452359;
+    float f1  = 4327.452359;
 
     numeric = fwAtoms::Numeric::New(d1);
     CPPUNIT_ASSERT_EQUAL(::boost::lexical_cast<std::string>(VariantType(d1)), numeric->getString());
@@ -127,7 +123,7 @@ void NumericTest::floatingTest()
     CPPUNIT_ASSERT_EQUAL(f1, numeric->getValue<float>());
     CPPUNIT_ASSERT_EQUAL((double)f1, numeric->getValue<double>());
     CPPUNIT_ASSERT_THROW( numeric->getValue< char >(), boost::numeric::positive_overflow );
-};
+}
 
 //-----------------------------------------------------------------------------
 
@@ -146,9 +142,9 @@ public:
         fwAtoms::Numeric::sptr numeric = ::fwAtoms::Numeric::New(value);
         CPPUNIT_ASSERT_EQUAL(U(value), numeric->getValue<U>());
         CPPUNIT_ASSERT_EQUAL(
-                             ::boost::lexical_cast<std::string>(fwAtoms::Numeric::ValueType(value)),
-                             numeric->getString()
-                             );
+            ::boost::lexical_cast<std::string>(fwAtoms::Numeric::ValueType(value)),
+            numeric->getString()
+            );
 
         CPPUNIT_ASSERT_EQUAL(typeid(U).name(), numeric->getVariant().type().name());
     }
@@ -186,7 +182,7 @@ void NumericTest::mixedTest()
 
     };
 
-    BOOST_FOREACH ( fwAtoms::Numeric::ValueType &v, values )
+    for( fwAtoms::Numeric::ValueType &v : values )
     {
         boost::apply_visitor( variant_visitor(), v );
     }
diff --git a/SrcLib/core/fwAtoms/test/tu/src/StringTest.cpp b/SrcLib/core/fwAtoms/test/tu/src/StringTest.cpp
index 4298b07..ba88ff3 100644
--- a/SrcLib/core/fwAtoms/test/tu/src/StringTest.cpp
+++ b/SrcLib/core/fwAtoms/test/tu/src/StringTest.cpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <limits>
+#include "StringTest.hpp"
 
 #include <fwAtoms/String.hpp>
-#include "StringTest.hpp"
+
+#include <limits>
+
 
 
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwAtoms::ut::StringTest );
@@ -36,7 +37,7 @@ void StringTest::conversion()
     const std::string VALUES[] = {"", "azerty"};
     fwAtoms::String::sptr metaString;
 
-    BOOST_FOREACH ( std::string str, VALUES )
+    for ( std::string str: VALUES )
     {
         metaString = ::fwAtoms::String::New(str);
 
diff --git a/SrcLib/core/fwAtomsFilter/CMakeLists.txt b/SrcLib/core/fwAtomsFilter/CMakeLists.txt
index 1c3a1fb..1169074 100644
--- a/SrcLib/core/fwAtomsFilter/CMakeLists.txt
+++ b/SrcLib/core/fwAtomsFilter/CMakeLists.txt
@@ -1,14 +1,3 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwMemory
-    fwTools
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-
 
 
diff --git a/SrcLib/core/fwAtomsFilter/Properties.cmake b/SrcLib/core/fwAtomsFilter/Properties.cmake
index 6e92074..1197200 100644
--- a/SrcLib/core/fwAtomsFilter/Properties.cmake
+++ b/SrcLib/core/fwAtomsFilter/Properties.cmake
@@ -2,7 +2,9 @@
 set( NAME fwAtomsFilter )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES 
+set( DEPENDENCIES
+    fwCore
+    fwData
     fwAtoms
     fwAtomsPatch
     fwTools
diff --git a/SrcLib/core/fwAtomsFilter/bin/build.options b/SrcLib/core/fwAtomsFilter/bin/build.options
deleted file mode 100644
index 6a594b5..0000000
--- a/SrcLib/core/fwAtomsFilter/bin/build.options
+++ /dev/null
@@ -1,10 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-USE = ['boost']
-LIB = [
-    'fwAtoms_0-1',
-    'fwAtomsPatch_0-1',
-    'fwData_0-1',
-    'fwTools_0-1',
-    'fwActivities_0-1',
-    ]
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/IFilter.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/IFilter.hpp
index 7c422fa..a578d27 100644
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/IFilter.hpp
+++ b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/IFilter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,7 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomsFilter
@@ -33,7 +33,7 @@ class FWATOMSFILTER_CLASS_API IFilter : public ::fwCore::BaseObject
 {
 
 public:
-    /// Factory key used by IFilter implementations 
+    /// Factory key used by IFilter implementations
     typedef ::fwAtomsFilter::factory::Key Key;
 
     /**
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/config.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/config.hpp
deleted file mode 100644
index 0916ffa..0000000
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWATOMSFILTER_CONFIG_HPP_
-#define _FWATOMSFILTER_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWATOMSFILTER_EXPORTS
-            #define FWATOMSFILTER_API __declspec(dllexport)
-        #else
-            #define FWATOMSFILTER_API __declspec(dllimport)
-        #endif
-
-        #define FWATOMSFILTER_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWATOMSFILTER_EXPORTS
-            #define FWATOMSFILTER_API __attribute__ ((visibility("default")))
-            #define FWATOMSFILTER_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWATOMSFILTER_API __attribute__ ((visibility("hidden")))
-            #define FWATOMSFILTER_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWATOMSFILTER_API
-        #define FWATOMSFILTER_CLASS_API
-
-    #endif
-
-#endif //FWATOMSFILTER_API
-
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/factory/new.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/factory/new.hpp
index 8bd309e..badd464 100644
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/factory/new.hpp
+++ b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -34,20 +33,22 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwAtomsFilter::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwAtomsFilter::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 
 FWATOMSFILTER_API SPTR(::fwAtomsFilter::IFilter) New(
-        const ::fwAtomsFilter::registry::KeyType & classname );
+    const ::fwAtomsFilter::registry::KeyType & classname );
 
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
 
     return obj;
 }
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/functions.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/functions.hpp
index d1cea83..c168976 100644
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/functions.hpp
+++ b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/functions.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,15 +13,15 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 namespace fwAtomsFilter
 {
 
-    /**
-     * @brief Returns true if given atom matches a defined ::fwMedData::Series implementations.
-     * */
-    FWATOMSFILTER_API bool isSeriesKnown(const SPTR(::fwAtoms::Object)& series);
+/**
+ * @brief Returns true if given atom matches a defined ::fwMedData::Series implementations.
+ * */
+FWATOMSFILTER_API bool isSeriesKnown(const SPTR(::fwAtoms::Object)& series);
 
 } // namespace fwAtomsFilter
 
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/namespace.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/namespace.hpp
index f30b573..b34c4e5 100644
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/namespace.hpp
+++ b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSFILTER_FACTORY_NAMESPACE_HPP__
-#define __FWATOMSFILTER_FACTORY_NAMESPACE_HPP__
+#ifndef __FWATOMSFILTER_NAMESPACE_HPP__
+#define __FWATOMSFILTER_NAMESPACE_HPP__
 
 /**
  * @brief Proposes an API to filter atoms.
@@ -32,5 +32,5 @@ namespace registry
 
 } // namespace fwAtomsFilter
 
-#endif /* __FWATOMSFILTER_FACTORY_NAMESPACE_HPP__ */
+#endif /* __FWATOMSFILTER_NAMESPACE_HPP__ */
 
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/detail.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/detail.hpp
index 0488e81..b070235 100644
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/detail.hpp
+++ b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtomsFilter::IFilter) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtomsFilter::IFilter) (), KeyType > Type;
 
 FWATOMSFILTER_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/macros.hpp b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/macros.hpp
index d3c34ee..115114a 100644
--- a/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/macros.hpp
+++ b/SrcLib/core/fwAtomsFilter/include/fwAtomsFilter/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSFILTER_REGISTRY_MACRO_HPP__
-#define __FWATOMSFILTER_REGISTRY_MACRO_HPP__
+#ifndef __FWATOMSFILTER_REGISTRY_MACROS_HPP__
+#define __FWATOMSFILTER_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/cat.hpp>
 
@@ -19,11 +19,11 @@ namespace registry
 
 #define  fwAtomsFilterRegisterMacro( classname, objectKey )                                  \
     static ::fwAtomsFilter::IFilter::Registrar< classname >                  \
-    BOOST_PP_CAT(s__factory__record__object__, __LINE__) ( objectKey ) ;
+    BOOST_PP_CAT(s__factory__record__object__, __LINE__) ( objectKey );
 
 } // namespace registry
 
 } // namespace fwAtomsFilter
 
-#endif /*__FWATOMSFILTER_REGISTRY_MACRO_HPP__*/
+#endif /*__FWATOMSFILTER_REGISTRY_MACROS_HPP__*/
 
diff --git a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/IFilter.cpp b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/IFilter.cpp
index 6f156c2..f73deb6 100644
--- a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/IFilter.cpp
+++ b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/IFilter.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/factory/new.cpp b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/factory/new.cpp
index 00fbee9..094ba3c 100644
--- a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/factory/new.cpp
+++ b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/functions.cpp b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/functions.cpp
index e0610c2..0f3b4a0 100644
--- a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/functions.cpp
+++ b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/functions.cpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
-#include <string>
 
-#include <boost/foreach.hpp>
+#include "fwAtomsFilter/functions.hpp"
 
 #include <fwActivities/registry/Activities.hpp>
 
@@ -19,8 +17,8 @@
 
 #include <fwData/registry/detail.hpp>
 
-#include "fwAtomsFilter/functions.hpp"
-
+#include <algorithm>
+#include <string>
 
 namespace fwAtomsFilter
 {
@@ -30,13 +28,13 @@ bool isSeriesKnown(const SPTR(::fwAtoms::Object)& series)
     bool isKnown = false;
 
     namespace reg = ::fwActivities::registry;
-    reg::Activities::sptr registry = reg::Activities::getDefault();
+    reg::Activities::sptr registry                = reg::Activities::getDefault();
     const std::vector< reg::ActivityInfo >& infos = registry->getInfos();
 
     const std::string& classname = ::fwAtomsPatch::helper::getClassname(series);
 
-    SPTR(::fwData::registry::Type) objectRegistry = ::fwData::registry::get();
-    ::fwData::registry::Type::KeyVectorType keys = objectRegistry->getFactoryKeys();
+    SPTR(::fwData::registry::Type) objectRegistry           = ::fwData::registry::get();
+    ::fwData::registry::Type::KeyVectorType keys            = objectRegistry->getFactoryKeys();
     ::fwData::registry::Type::KeyVectorType::iterator itKey = std::find(keys.begin(), keys.end(), classname);
 
     if(itKey != keys.end())
@@ -46,7 +44,7 @@ bool isSeriesKnown(const SPTR(::fwAtoms::Object)& series)
             // Check if activity config id is known
             ::fwAtoms::String::sptr asId = series->getAttribute< ::fwAtoms::String >("activity_config_id");
 
-            BOOST_FOREACH(reg::ActivityInfo info, infos)
+            for(reg::ActivityInfo info :  infos)
             {
                 if(info.id == asId->getString())
                 {
diff --git a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/registry/detail.cpp b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/registry/detail.cpp
index dbea4a0..a9891c7 100644
--- a/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/registry/detail.cpp
+++ b/SrcLib/core/fwAtomsFilter/src/fwAtomsFilter/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@ namespace fwAtomsFilter
 namespace registry
 {
 
-struct FwDataRegistryInstantiatorTag {} ;
+struct FwDataRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwAtomsPatch/CMakeLists.txt b/SrcLib/core/fwAtomsPatch/CMakeLists.txt
index abee515..85878cf 100644
--- a/SrcLib/core/fwAtomsPatch/CMakeLists.txt
+++ b/SrcLib/core/fwAtomsPatch/CMakeLists.txt
@@ -1,11 +1,26 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwAtomConversion
-    fwAtoms
-    fwCore
-    fwTools
-)
 
 
+find_package(CAMP REQUIRED)
+if(NOT ANDROID)
+    find_package (Boost COMPONENTS log log_setup filesystem REQUIRED)
+endif()
+
+fwForwardInclude(
+    ${CAMP_INCLUDE_DIR}
+)
+
+if(NOT ANDROID)
+    fwLink(
+        ${CAMP_LIBRARIES}
+        ${Boost_LOG_LIBRARY}
+        ${Boost_LOG_SETUP_LIBRARY}
+        ${Boost_FILESYSTEM_LIBRARY}
+    )
+else()
+    fwLink(
+        ${CAMP_LIBRARIES}
+        log
+    )
+endif()
 
diff --git a/SrcLib/core/fwAtomsPatch/COPYING b/SrcLib/core/fwAtomsPatch/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwAtomsPatch/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwAtomsPatch/COPYING.LESSER b/SrcLib/core/fwAtomsPatch/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwAtomsPatch/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwAtomsPatch/Properties.cmake b/SrcLib/core/fwAtomsPatch/Properties.cmake
index 19b9731..c48a5a6 100644
--- a/SrcLib/core/fwAtomsPatch/Properties.cmake
+++ b/SrcLib/core/fwAtomsPatch/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwAtomsPatch )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwAtomConversion fwAtoms fwCore fwTools )
+set( DEPENDENCIES fwAtomConversion fwAtoms fwCore fwTools fwRuntime )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwAtomsPatch/bin/build.options b/SrcLib/core/fwAtomsPatch/bin/build.options
deleted file mode 100644
index 72bb38a..0000000
--- a/SrcLib/core/fwAtomsPatch/bin/build.options
+++ /dev/null
@@ -1,9 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-#USE = []
-LIB = [
-    'fwCore_0-1', 
-    'fwAtoms_0-1',
-    'fwAtomConversion_0-1',
-    'fwData_0-1'
-]
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IPatch.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IPatch.hpp
index a440529..358221a 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IPatch.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IPatch.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -48,8 +48,8 @@ public:
 
     /// Applies the patch to the specified object
     FWATOMSPATCH_API virtual void apply(const ::fwAtoms::Object::sptr& previous,
-             const ::fwAtoms::Object::sptr& current,
-             ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)=0;
+                                        const ::fwAtoms::Object::sptr& current,
+                                        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions) = 0;
 
     /// Returns the origin classname of the object
     FWATOMSPATCH_API virtual const std::string& getOriginClassname() const;
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/ISemanticPatch.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/ISemanticPatch.hpp
index 803ae90..6962d66 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/ISemanticPatch.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/ISemanticPatch.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_ISemanticPatch_HPP__
-#define __FWATOMSPATCH_ISemanticPatch_HPP__
+#ifndef __FWATOMSPATCH_ISEMANTICPATCH_HPP__
+#define __FWATOMSPATCH_ISEMANTICPATCH_HPP__
 
 #include <string>
 
@@ -18,7 +18,7 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomsPatch
@@ -56,17 +56,17 @@ public:
      * @pre previous and current objects must have the same classname and version.
      */
     FWATOMSPATCH_API virtual void apply(const SPTR(::fwAtoms::Object)& previous,
-             const SPTR(::fwAtoms::Object)& current,
-             ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+                                        const SPTR(::fwAtoms::Object)& current,
+                                        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
     /**
      * @brief Returns true if patch is applicable into the context from origin to target versions.
      * @note This method is thread safe.
      */
     FWATOMSPATCH_API virtual bool isApplicable(
-            const std::string& context,
-            const std::string& originVersion,
-            const std::string& targetVersion) const;
+        const std::string& context,
+        const std::string& originVersion,
+        const std::string& targetVersion) const;
 
 protected:
 
@@ -79,13 +79,14 @@ protected:
 
         Context(const std::string& context, const std::string& originVersion, const std::string& targetVersion)
             : m_context(context), m_originVersion(originVersion), m_targetVersion(targetVersion)
-        {}
+        {
+        }
 
         bool operator==(const Context& b) const
         {
             return m_context == b.m_context
-                && m_originVersion == b.m_originVersion
-                && m_targetVersion == b.m_targetVersion;
+                   && m_originVersion == b.m_originVersion
+                   && m_targetVersion == b.m_targetVersion;
         }
     };
 
@@ -114,4 +115,4 @@ protected:
 
 
 } //fwAtomsPatch
-#endif /* __FWATOMSPATCH_ISemanticPatch_HPP__ */
+#endif /* __FWATOMSPATCH_ISEMANTICPATCH_HPP__ */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralCreator.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralCreator.hpp
index 54e1ef6..3506e8b 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralCreator.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralCreator.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralPatch.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralPatch.hpp
index 83be1b5..bd696b9 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralPatch.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/IStructuralPatch.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/LinkDescriptor.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/LinkDescriptor.hpp
index e8b4888..aa94d1a 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/LinkDescriptor.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/LinkDescriptor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,8 +17,8 @@ namespace fwAtomsPatch
 {
 
 /**
-* @brief Link descriptor used to identify a link between two versions.
-**/
+ * @brief Link descriptor used to identify a link between two versions.
+ **/
 class FWATOMSPATCH_CLASS_API LinkDescriptor
 {
 
@@ -26,7 +26,8 @@ public:
 
     /// Struct used to compare two LinkDescriptor
     struct Compare {
-        bool operator() (LinkDescriptor a, LinkDescriptor b) const {
+        bool operator() (LinkDescriptor a, LinkDescriptor b) const
+        {
             return (a.m_originVersion+a.m_targetVersion) < (b.m_originVersion+b.m_targetVersion);
         }
     };
@@ -48,22 +49,40 @@ public:
     ~LinkDescriptor();
 
     /// Returns link weight.
-    int getWeight() const { return m_weight; }
+    int getWeight() const
+    {
+        return m_weight;
+    }
 
     /// Returns context name.
-    const std::string& getContext() const { return m_context; }
+    const std::string& getContext() const
+    {
+        return m_context;
+    }
 
     /// Returns origin version.
-    const std::string& getOriginVersion() const { return m_originVersion; }
+    const std::string& getOriginVersion() const
+    {
+        return m_originVersion;
+    }
 
     /// Returns target version.
-    const std::string& getTargetVersion() const { return m_targetVersion; }
+    const std::string& getTargetVersion() const
+    {
+        return m_targetVersion;
+    }
 
     /// Returns patcher classname.
-    const std::string& getPatcher() const { return m_patcher; }
+    const std::string& getPatcher() const
+    {
+        return m_patcher;
+    }
 
     /// Returns map of links between versions.
-    const LinksType& getLinks() const { return m_links; }
+    const LinksType& getLinks() const
+    {
+        return m_links;
+    }
 
 private:
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/PatchingManager.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/PatchingManager.hpp
index 8c9e805..b9f2ae0 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/PatchingManager.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/PatchingManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@
 
 namespace fwAtoms
 {
-    class Object;
+class Object;
 }
 
 namespace fwAtomsPatch
@@ -33,7 +33,7 @@ class FWATOMSPATCH_CLASS_API PatchingManager
 public:
 
     /// Default constructor
-    FWATOMSPATCH_API PatchingManager(SPTR(::fwAtoms::Object) object);
+    FWATOMSPATCH_API PatchingManager(SPTR(::fwAtoms::Object)object);
 
     /// Default destructor
     FWATOMSPATCH_API ~PatchingManager();
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/SemanticPatchDB.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/SemanticPatchDB.hpp
index a9e284d..f8157b1 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/SemanticPatchDB.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/SemanticPatchDB.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_SemanticPatchDB_HPP__
-#define __FWATOMSPATCH_SemanticPatchDB_HPP__
+#ifndef __FWATOMSPATCH_SEMANTICPATCHDB_HPP__
+#define __FWATOMSPATCH_SEMANTICPATCHDB_HPP__
 
 #include <string>
 #include <vector>
@@ -31,7 +31,7 @@ class FWATOMSPATCH_CLASS_API SemanticPatchDB
 {
 public:
 
-    typedef SPTR(SemanticPatchDB) sptr;
+    typedef SPTR (SemanticPatchDB) sptr;
     ///Typedef used to store the pair type/version of a data structure
     typedef std::pair< std::string, std::string > VersionIDType;
     ///Typedef used to store a list of contextual patches applicable on an object
@@ -51,33 +51,33 @@ public:
      * @param objOriginVersion origin version of the object.
      *
      * @return patch applicable for data patching, or empty pointer if no such patch found.
-     **/
+     */
     FWATOMSPATCH_API SPTR(::fwAtomsPatch::ISemanticPatch) getPatch(
-            const std::string& context,
-            const std::string& originVersion,
-            const std::string& targetVersion,
-            const std::string& objOriginClassname,
-            const std::string& objOriginVersion) const;
+        const std::string& context,
+        const std::string& originVersion,
+        const std::string& targetVersion,
+        const std::string& objOriginClassname,
+        const std::string& objOriginVersion) const;
 
-   /// Returns the number of patches.
-   FWATOMSPATCH_API size_t size() const;
+    /// Returns the number of patches.
+    FWATOMSPATCH_API size_t size() const;
 
-   /// Return default instance of SemanticPatchDB
-   FWATOMSPATCH_API static SemanticPatchDB::sptr getDefault();
+    /// Return default instance of SemanticPatchDB
+    FWATOMSPATCH_API static SemanticPatchDB::sptr getDefault();
 
-   /// Constructor. Does nothing.
-   FWATOMSPATCH_API SemanticPatchDB();
+    /// Constructor. Does nothing.
+    FWATOMSPATCH_API SemanticPatchDB();
 
-   /// Destructor. Does nothing.
-   FWATOMSPATCH_API virtual ~SemanticPatchDB();
+    /// Destructor. Does nothing.
+    FWATOMSPATCH_API virtual ~SemanticPatchDB();
 
 private:
 
-   /// Copy constructor. Does nothing.
-   FWATOMSPATCH_API SemanticPatchDB( const SemanticPatchDB &cpy );
+    /// Copy constructor. Does nothing.
+    FWATOMSPATCH_API SemanticPatchDB( const SemanticPatchDB &cpy );
 
-   /// Mutex to protect concurrent access for m_patches
-   mutable ::fwCore::mt::ReadWriteMutex m_mutex;
+    /// Mutex to protect concurrent access for m_patches
+    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
 
     /// Patches
     PatchesType m_patches;
@@ -89,5 +89,5 @@ private:
 
 } // fwAtomsPatch
 
-#endif /* __FWATOMSPATCH_SemanticPatchDB_HPP__ */
+#endif /* __FWATOMSPATCH_SEMANTICPATCHDB_HPP__ */
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralCreatorDB.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralCreatorDB.hpp
index ca1bb1d..8cbb139 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralCreatorDB.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralCreatorDB.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -34,7 +34,7 @@ class FWATOMSPATCH_CLASS_API StructuralCreatorDB
 {
 
 public:
-    typedef SPTR(StructuralCreatorDB) sptr;
+    typedef SPTR (StructuralCreatorDB) sptr;
     ///Typedef used to store the pair classname/version of a data structure
     typedef std::pair< std::string, std::string > VersionIDType;
     ///Typedef used to store all the structural creators
@@ -55,7 +55,7 @@ public:
      * @note This method is thread safe.
      */
     FWATOMSPATCH_API SPTR(::fwAtomsPatch::IStructuralCreator) getCreator(const std::string& classname,
-         const std::string& version);
+                                                                         const std::string& version);
 
     /**
      * @brief Creates a new object instance with given classname and version.
@@ -64,22 +64,31 @@ public:
 
     FWATOMSPATCH_API SPTR(::fwAtoms::Object) create(const std::string& classname, const std::string& version);
 
-   /// Returns the number of creators.
-   FWATOMSPATCH_API size_t size() const;
+    /// Returns the number of creators.
+    FWATOMSPATCH_API size_t size() const;
 
-   /// Returns the default instance of StructuralCreatorDB.
-   static StructuralCreatorDB::sptr getDefault() { return s_default; }
+    /// Returns the default instance of StructuralCreatorDB.
+    static StructuralCreatorDB::sptr getDefault()
+    {
+        return s_default;
+    }
 
-   /// Constructor
-   StructuralCreatorDB() {};
+    /// Constructor
+    StructuralCreatorDB()
+    {
+    }
 
     /// Destructor
-    ~StructuralCreatorDB() {};
+    ~StructuralCreatorDB()
+    {
+    }
 
 private:
 
     /// Copy constructor
-    StructuralCreatorDB( const StructuralCreatorDB &cpy ) {};
+    StructuralCreatorDB( const StructuralCreatorDB &cpy )
+    {
+    }
 
     /// Mutex to protect concurrent access for m_creators
     mutable ::fwCore::mt::ReadWriteMutex m_mutex;
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralPatchDB.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralPatchDB.hpp
index 2a9fa40..fd74755 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralPatchDB.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/StructuralPatchDB.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -32,7 +32,7 @@ class FWATOMSPATCH_CLASS_API StructuralPatchDB
 {
 
 public:
-    typedef SPTR(StructuralPatchDB) sptr;
+    typedef SPTR (StructuralPatchDB) sptr;
     ///Typedef used to store the pair classname/version of a data structure
     typedef std::pair< std::string, std::string > VersionIDType;
     ///Typedef used to store link to data structure
@@ -58,27 +58,36 @@ public:
      * @note This method is thread safe.
      */
     FWATOMSPATCH_API SPTR(::fwAtomsPatch::IStructuralPatch) getPatch(const std::string& originClassname,
-                                                                            const std::string& originVersion,
-                                                                            const std::string& targetClassname,
-                                                                            const std::string& targetVersion) const;
+                                                                     const std::string& originVersion,
+                                                                     const std::string& targetClassname,
+                                                                     const std::string& targetVersion) const;
 
     /// Retrieves number of patch.
-   FWATOMSPATCH_API size_t size() const;
+    FWATOMSPATCH_API size_t size() const;
 
-   /// Returns default instance.
-   static ::fwAtomsPatch::StructuralPatchDB::sptr getDefault() { return s_default; }
+    /// Returns default instance.
+    static ::fwAtomsPatch::StructuralPatchDB::sptr getDefault()
+    {
+        return s_default;
+    }
 
-   /// Constructor
-    StructuralPatchDB() {};
+    /// Constructor
+    StructuralPatchDB()
+    {
+    }
 
     /// Destructor
-    ~StructuralPatchDB() {};
+    ~StructuralPatchDB()
+    {
+    }
 
 private:
 
 
     /// Copy constructor
-    StructuralPatchDB( const StructuralPatchDB &cpy ) {};
+    StructuralPatchDB( const StructuralPatchDB &cpy )
+    {
+    }
 
     /// Mutex to protect concurrent access for m_patches
     mutable ::fwCore::mt::ReadWriteMutex m_mutex;
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionDescriptor.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionDescriptor.hpp
index c8f42fe..d946d63 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionDescriptor.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionDescriptor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,7 +30,8 @@ public:
      * @brief Struct used to compare two VersionDescriptor
      */
     struct Compare {
-        bool operator() (VersionDescriptor a, VersionDescriptor b) const {
+        bool operator() (VersionDescriptor a, VersionDescriptor b) const
+        {
             return a.getVersionName() < b.getVersionName();
         }
     };
@@ -56,13 +57,22 @@ public:
     ~VersionDescriptor();
 
     /// Returns context name.
-    const std::string& getContext() const { return m_context; }
+    const std::string& getContext() const
+    {
+        return m_context;
+    }
 
     /// Returns version name.
-    const std::string& getVersionName() const { return m_versionName; }
+    const std::string& getVersionName() const
+    {
+        return m_versionName;
+    }
 
     /// Returns versions.
-    const VersionsType& getVersions() const { return m_versions; }
+    const VersionsType& getVersions() const
+    {
+        return m_versions;
+    }
 
 private:
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsGraph.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsGraph.hpp
index 4782f2e..dbe5719 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsGraph.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsGraph.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,8 +24,8 @@ namespace fwAtomsPatch
 {
 
 /**
-* @brief Versions graph description.
-**/
+ * @brief Versions graph description.
+ **/
 class FWATOMSPATCH_CLASS_API VersionsGraph : public ::fwCore::BaseObject
 {
 
@@ -96,7 +96,7 @@ public:
      * (Do not rely on the versionID if returned bool is set to false).
      */
     FWATOMSPATCH_API LinkedVersionType getLinkedVersion(
-            const NodeIDType& originID, const NodeIDType& targetID, LinkDescriptor::VersionIDType current);
+        const NodeIDType& originID, const NodeIDType& targetID, LinkDescriptor::VersionIDType current);
 
     /**
      * @brief Get connected versions
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsManager.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsManager.hpp
index e3480d2..e3f7a51 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsManager.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/VersionsManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_VERSIONMANAGER_HPP__
-#define __FWATOMSPATCH_VERSIONMANAGER_HPP__
+#ifndef __FWATOMSPATCH_VERSIONSMANAGER_HPP__
+#define __FWATOMSPATCH_VERSIONSMANAGER_HPP__
 
 #include <map>
 #include <vector>
@@ -74,7 +74,9 @@ public:
     FWATOMSPATCH_API void buildLinkTable(const std::string& dirPath);
 
     /// Returns the default instance of VersionsManager
-    static SPTR(VersionsManager) getDefault() {return s_default; }
+    static SPTR(VersionsManager) getDefault() {
+        return s_default;
+    }
 
 private:
 
@@ -84,14 +86,14 @@ private:
      * @param filePath path to a .versions file
      */
     FWATOMSPATCH_API static ::fwAtomsPatch::VersionDescriptor getVersion(
-            const ::boost::filesystem::path& filePath);
+        const ::boost::filesystem::path& filePath);
 
     /**
      * @brief Loads a file containing links between objects versions.
      * @param filePath path to a .graphlink file
      */
     FWATOMSPATCH_API static ::fwAtomsPatch::LinkDescriptor getLink(
-            const ::boost::filesystem::path& filePath);
+        const ::boost::filesystem::path& filePath);
 
     /**
      * @brief Generates the versions graph.
@@ -114,7 +116,7 @@ private:
     /// Link table
     ListPathType m_linkTable;
 
-     /// Versions graphs
+    /// Versions graphs
     VersionsGraphMapType m_versionsGraphMap;
 
     /// Default instance of Versions Manager
@@ -123,4 +125,4 @@ private:
 
 } // fwAtomsPatch
 
-#endif /* _FWATOMSPATCH_VERSIONMANAGER_HPP_ */
+#endif /* __FWATOMSPATCH_VERSIONSMANAGER_HPP__ */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/Abstract.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/Abstract.hpp
index af3b564..1c19be8 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/Abstract.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/Abstract.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_CONDITION_ABSTRACT_HPP__
-#define __FWATOMSPATCH_CONDITION_ABSTRACT_HPP__
+#ifndef __FWATOMSPATCH_CONDITIONS_ABSTRACT_HPP__
+#define __FWATOMSPATCH_CONDITIONS_ABSTRACT_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -38,7 +38,9 @@ public:
     FWATOMSPATCH_API virtual bool test(::fwAtoms::Base::sptr old);
 
 protected:
-    Abstract() {};
+    Abstract()
+    {
+    }
     Abstract(::fwAtoms::Base::sptr defaultValue);
 
     ::fwAtoms::Base::sptr m_defaultValue;
@@ -50,4 +52,4 @@ protected:
 
 } // namespace fwAtomsPatch
 
-#endif /* __FWATOMSPATCH_CONDITION_ABSTRACT_HPP__ */
+#endif /* __FWATOMSPATCH_CONDITIONS_ABSTRACT_HPP__ */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/NumericOverflow.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/NumericOverflow.hpp
index 4b6dd97..de377bf 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/NumericOverflow.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/conditions/NumericOverflow.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -40,7 +40,9 @@ public:
 
 
 protected:
-    NumericOverflow() {};
+    NumericOverflow()
+    {
+    }
     NumericOverflow(::fwAtoms::Base::sptr defaultValue);
 
     ::fwAtoms::Numeric::sptr m_treshold;
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/config.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/config.hpp
deleted file mode 100644
index 320f3ba..0000000
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWATOMSPATCH_CONFIG_HPP_
-#define _FWATOMSPATCH_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWATOMSPATCH_EXPORTS
-            #define FWATOMSPATCH_API __declspec(dllexport)
-        #else
-            #define FWATOMSPATCH_API __declspec(dllimport)
-        #endif
-
-        #define FWATOMSPATCH_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWATOMSPATCH_EXPORTS
-            #define FWATOMSPATCH_API __attribute__ ((visibility("default")))
-            #define FWATOMSPATCH_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWATOMSPATCH_API __attribute__ ((visibility("hidden")))
-            #define FWATOMSPATCH_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWATOMSPATCH_API
-        #define FWATOMSPATCH_CLASS_API
-
-    #endif
-
-#endif //FWATOMSPATCH_API
-
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/BadExtension.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/BadExtension.hpp
index 0e9f8e5..4398fac 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/BadExtension.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/BadExtension.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,11 +18,13 @@ namespace exceptions
 /**
  * @brief Exception defining a wrong extension in a filename.
  */
-class BadExtension: public fwAtomsPatch::exceptions::Base
+class BadExtension : public fwAtomsPatch::exceptions::Base
 {
 public:
     BadExtension(const std::string& message);
-    virtual ~BadExtension() throw(){};
+    virtual ~BadExtension() throw()
+    {
+    }
 };
 
 } // namespace exceptions
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/Base.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/Base.hpp
index 9227414..bd88a80 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/Base.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/Base.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,11 +19,13 @@ namespace exceptions
 /**
  * @brief Base class of fwAtomsPatch exceptions
  */
-class Base: public fwCore::Exception
+class Base : public fwCore::Exception
 {
 public:
     Base(const std::string& message);
-    virtual ~Base() throw () {};
+    virtual ~Base() throw ()
+    {
+    }
 };
 
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/ImpossibleConversion.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/ImpossibleConversion.hpp
index d00f368..f66a726 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/ImpossibleConversion.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/ImpossibleConversion.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,11 +18,13 @@ namespace exceptions
 /**
  * @brief Reports an impossible conversion between data objects.
  */
-class ImpossibleConversion: public fwAtomsPatch::exceptions::Base
+class ImpossibleConversion : public fwAtomsPatch::exceptions::Base
 {
 public:
     ImpossibleConversion(const std::string& message);
-    virtual ~ImpossibleConversion() throw(){};
+    virtual ~ImpossibleConversion() throw()
+    {
+    }
 };
 
 } // namespace exceptions
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/MissingInformation.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/MissingInformation.hpp
index 29bd58c..8ecea02 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/MissingInformation.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/MissingInformation.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,11 +18,13 @@ namespace exceptions
 /**
  * @brief Reports an missing information required for data object patching.
  */
-class MissingInformation: public fwAtomsPatch::exceptions::Base
+class MissingInformation : public fwAtomsPatch::exceptions::Base
 {
 public:
     MissingInformation(const std::string& message);
-    virtual ~MissingInformation() throw(){};
+    virtual ~MissingInformation() throw()
+    {
+    }
 };
 
 } // namespace exceptions
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/UnknownVersion.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/UnknownVersion.hpp
index 4536ba8..a6f5a8e 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/UnknownVersion.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/exceptions/UnknownVersion.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,11 +18,13 @@ namespace exceptions
 /**
  * @brief Thrown when a given object version is unknown and can't be processed.
  */
-class UnknownVersion: public fwAtomsPatch::exceptions::Base
+class UnknownVersion : public fwAtomsPatch::exceptions::Base
 {
 public:
     UnknownVersion(const std::string& message);
-    virtual ~UnknownVersion() throw() {};
+    virtual ~UnknownVersion() throw()
+    {
+    }
 };
 
 } // namespace exceptions
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/Object.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/Object.hpp
index 59467f1..3aae7f4 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/Object.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/Object.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -35,27 +35,27 @@ public:
 
     /// Adds a new attribute in the current object
     FWATOMSPATCH_API void addAttribute(const std::string& name,
-                                      ::fwAtoms::Base::sptr value,
-                                      conditions::Abstract::sptr condition = conditions::Abstract::New());
+                                       ::fwAtoms::Base::sptr value,
+                                       conditions::Abstract::sptr condition = conditions::Abstract::New());
 
     /// Adds or replaces an attribute in the current object
     FWATOMSPATCH_API void addOrReplaceAttribute(const std::string& name,
-                                      ::fwAtoms::Base::sptr value,
-                                      conditions::Abstract::sptr condition = conditions::Abstract::New());
+                                                ::fwAtoms::Base::sptr value,
+                                                conditions::Abstract::sptr condition = conditions::Abstract::New());
 
     /// Removes an attribute
     FWATOMSPATCH_API void removeAttribute(const std::string& name,
-                                         conditions::Abstract::sptr condition = conditions::Abstract::New());
+                                          conditions::Abstract::sptr condition = conditions::Abstract::New());
 
     /// Replaces an attribute
     FWATOMSPATCH_API void replaceAttribute(const std::string& name,
-                                          ::fwAtoms::Base::sptr newValue,
-                                          conditions::Abstract::sptr condition = conditions::Abstract::New());
+                                           ::fwAtoms::Base::sptr newValue,
+                                           conditions::Abstract::sptr condition = conditions::Abstract::New());
 
     /// Renames an attribute.
     FWATOMSPATCH_API void renameAttribute(const std::string& name, const std::string& newName,
-                                         conditions::Abstract::sptr condition = conditions::Abstract::New()
-                                         );
+                                          conditions::Abstract::sptr condition = conditions::Abstract::New()
+                                          );
 
     /// Atom::Object getter
     FWATOMSPATCH_API ::fwAtoms::Object::sptr getObject() const;
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/functions.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/functions.hpp
index 5cdf9a2..2f74547 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/functions.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/helper/functions.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,32 +18,32 @@ namespace fwAtomsPatch
 {
 namespace helper
 {
-    /// Get classname of an object
-    FWATOMSPATCH_API std::string getClassname( const ::fwAtoms::Object::sptr & obj );
+/// Get classname of an object
+FWATOMSPATCH_API std::string getClassname( const ::fwAtoms::Object::sptr & obj );
 
-    /// Set classname of an object
-    FWATOMSPATCH_API void setClassname( const ::fwAtoms::Object::sptr & obj, const std::string & newClassname );
+/// Set classname of an object
+FWATOMSPATCH_API void setClassname( const ::fwAtoms::Object::sptr & obj, const std::string & newClassname );
 
-    /// Get version of an object
-    FWATOMSPATCH_API std::string getVersion( const ::fwAtoms::Object::sptr & obj );
+/// Get version of an object
+FWATOMSPATCH_API std::string getVersion( const ::fwAtoms::Object::sptr & obj );
 
-    /// Set version of an object
-    FWATOMSPATCH_API void setVersion( const ::fwAtoms::Object::sptr & obj, const std::string & newVersion );
+/// Set version of an object
+FWATOMSPATCH_API void setVersion( const ::fwAtoms::Object::sptr & obj, const std::string & newVersion );
 
-    /// Generates new id for the object (also creates it if it is missing )
-    FWATOMSPATCH_API void generateID( const ::fwAtoms::Object::sptr & obj );
+/// Generates new id for the object (also creates it if it is missing )
+FWATOMSPATCH_API void generateID( const ::fwAtoms::Object::sptr & obj );
 
-    /// Cleans object fields (also creates them if they are missing)
-    FWATOMSPATCH_API void cleanFields( const ::fwAtoms::Object::sptr & obj );
+/// Cleans object fields (also creates them if they are missing)
+FWATOMSPATCH_API void cleanFields( const ::fwAtoms::Object::sptr & obj );
 
-    /// Generates new UUID for object and child objects
-    FWATOMSPATCH_API void changeUID( const ::fwAtoms::Object::sptr & obj );
+/// Generates new UUID for object and child objects
+FWATOMSPATCH_API void changeUID( const ::fwAtoms::Object::sptr & obj );
 
-    /// Generates new UUID for map objects and child objects
-    FWATOMSPATCH_API void changeMapUID( const ::fwAtoms::Map::sptr & map );
+/// Generates new UUID for map objects and child objects
+FWATOMSPATCH_API void changeMapUID( const ::fwAtoms::Map::sptr & map );
 
-    /// Generates new UUID for seq objects and child objects
-    FWATOMSPATCH_API void changeSeqUID( const ::fwAtoms::Sequence::sptr & seq );
+/// Generates new UUID for seq objects and child objects
+FWATOMSPATCH_API void changeSeqUID( const ::fwAtoms::Sequence::sptr & seq );
 
 } //helper
 } //fwAtomHelper
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/Logger.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/Logger.hpp
index 24ff3c4..5019a56 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/Logger.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/Logger.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -55,7 +55,10 @@ public:
     /// Replace attribute message
     FWATOMSPATCH_API void replaceAttribute(const std::string& message);
 
-    static Logger &getLogger() {return s_logger;}
+    static Logger &getLogger()
+    {
+        return s_logger;
+    }
 
     FWATOMSPATCH_API static StreamPtrType getStream();
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/log.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/log.hpp
index 66b4250..50331ee 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/log.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/infos/log.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,31 +7,31 @@
 #ifndef __FWATOMSPATCH_INFOS_LOG_HPP__
 #define __FWATOMSPATCH_INFOS_LOG_HPP__
 
-#include <fwAtomsPatch/infos/Logger.hpp>
+#include "fwAtomsPatch/infos/Logger.hpp"
 
 /** @{ */
 # ifdef _DEBUG
 /** Info message macros for patch log. */
 #  define fwAtomsPatchInfoLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().info(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().info(message)
 /** Error message macros for patch log. */
 #  define fwAtomsPatchErrorLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().error(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().error(message)
 /** Bad cast message macros for patch log. */
 #  define fwAtomsPatchBadCastLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().badCast(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().badCast(message)
 /** Out of range message macros for patch log. */
 #  define fwAtomsPatchOutOfRangeLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().outOfRange(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().outOfRange(message)
 /** Add attribute message macros for patch log. */
 #  define fwAtomsPatchAddAttributeLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().addAttribute(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().addAttribute(message)
 /** Erase attribute message macros for patch log. */
 #  define fwAtomsPatchEraseAttributeLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().eraseAttribute(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().eraseAttribute(message)
 /** Replace attribute message macros for patch log. */
 #  define fwAtomsPatchReplaceAttributeLogMacro(message) \
-        ::fwAtomsPatch::infos::Logger::getLogger().replaceAttribute(message)
+    ::fwAtomsPatch::infos::Logger::getLogger().replaceAttribute(message)
 # else
 /** Info message macros for patch log. */
 #  define fwAtomsPatchInfoLogMacro(message) // nothing
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/namespace.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/namespace.hpp
index 1efe15b..f712825 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/namespace.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,65 +14,65 @@
 namespace fwAtomsPatch
 {
 
-    /**
-     * @brief Contains functions used to control patching process by defining conditions on objects.
-     * @namespace fwAtomsPatch::conditions
-     */
-    namespace conditions
-    {
-    }
+/**
+ * @brief Contains functions used to control patching process by defining conditions on objects.
+ * @namespace fwAtomsPatch::conditions
+ */
+namespace conditions
+{
+}
 
-    /**
-     * @brief Contains exceptions related to patching process.
-     * @namespace fwAtomsPatch::exceptions
-     */
-    namespace exceptions
-    {
-    }
+/**
+ * @brief Contains exceptions related to patching process.
+ * @namespace fwAtomsPatch::exceptions
+ */
+namespace exceptions
+{
+}
 
-    /**
-     * @brief Contains functions to facilitate object patching.
-     * @namespace fwAtomsPatch::helper
-     */
-    namespace helper
-    {
-    }
+/**
+ * @brief Contains functions to facilitate object patching.
+ * @namespace fwAtomsPatch::helper
+ */
+namespace helper
+{
+}
 
-    /**
-     * @brief Contains utilities to report informations about patching.
-     * @namespace fwAtomsPatch::infos
-     */
-    namespace infos
-    {
-    }
+/**
+ * @brief Contains utilities to report informations about patching.
+ * @namespace fwAtomsPatch::infos
+ */
+namespace infos
+{
+}
 
-    /**
-     * @brief Contains patchers allowing to transform objects using patches.
-     * @namespace fwAtomsPatch::patcher
-     */
-    namespace patcher
-    {
+/**
+ * @brief Contains patchers allowing to transform objects using patches.
+ * @namespace fwAtomsPatch::patcher
+ */
+namespace patcher
+{
 
-        /**
-         * @brief       Contains fwAtomsPatch::factory utilities
-         * @namespace   fwAtomsPatch::patcher::factory
-         * @date        2009-2013
-         */
-        namespace factory
-        {
-        } // namespace factory
+/**
+ * @brief       Contains fwAtomsPatch::factory utilities
+ * @namespace   fwAtomsPatch::patcher::factory
+ * @date        2009-2013
+ */
+namespace factory
+{
+}         // namespace factory
 
-        /**
-         * @brief       Contains fwAtomsPatch::regjstry utilities
-         * @namespace   fwAtomsPatch::patcher::registry
-         * @date        2009-2013
-         */
-        namespace registry
-        {
-        } // namespace registry
+/**
+ * @brief       Contains fwAtomsPatch::regjstry utilities
+ * @namespace   fwAtomsPatch::patcher::registry
+ * @date        2009-2013
+ */
+namespace registry
+{
+}         // namespace registry
 
 
-    } // namespace patcher
+}     // namespace patcher
 
 } // namespace fwAtomsPatch
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/DefaultPatcher.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/DefaultPatcher.hpp
index 9e82ce5..b60c324 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/DefaultPatcher.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/DefaultPatcher.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -42,7 +42,7 @@ class FWATOMSPATCH_CLASS_API DefaultPatcher : public IPatcher
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro((DefaultPatcher)(::fwAtomsPatch::patcher::IPatcher), (()),
-                ::fwAtomsPatch::patcher::factory::New< DefaultPatcher >);
+                                           ::fwAtomsPatch::patcher::factory::New< DefaultPatcher >);
 
     /// Constructor
     FWATOMSPATCH_API DefaultPatcher(::fwAtomsPatch::patcher::IPatcher::Key key);
@@ -52,9 +52,9 @@ public:
 
     /// Apply the patch to the specified object
     FWATOMSPATCH_API virtual ::fwAtoms::Object::sptr transformObject(::fwAtoms::Object::sptr object,
-            const std::string &context,
-            const std::string &currentVersion,
-            const std::string &targetVersion);
+                                                                     const std::string &context,
+                                                                     const std::string &currentVersion,
+                                                                     const std::string &targetVersion);
 
 protected:
 
@@ -75,11 +75,13 @@ protected:
 
     /// Apply structural patch.
     FWATOMSPATCH_API virtual ::fwAtoms::Object::sptr applyStructuralPatch(::fwAtoms::Object::sptr previous,
-            ::fwAtoms::Object::sptr current);
+                                                                          ::fwAtoms::Object::sptr current);
 
     /// Apply contextual patch.
     FWATOMSPATCH_API virtual ::fwAtoms::Object::sptr applyContextualPatch(::fwAtoms::Object::sptr previous,
-            ::fwAtoms::Object::sptr current);
+                                                                          ::fwAtoms::Object::sptr current);
+    /// Return true if the object is known in the target version
+    FWATOMSPATCH_API bool isKnown(const ::fwAtoms::Base::sptr& base);
 
     /// Type of the pass
     enum PassType { Structural, Contextual };
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/IPatcher.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/IPatcher.hpp
index bb551ff..6891722 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/IPatcher.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/IPatcher.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -42,7 +42,7 @@ class FWATOMSPATCH_CLASS_API IPatcher : public ::fwTools::Object
 
 public:
 
-    /// Factory key used by IPatcher implementations 
+    /// Factory key used by IPatcher implementations
     typedef ::fwAtomsPatch::patcher::factory::Key Key;
 
     /**
@@ -75,9 +75,9 @@ public:
 
     /// Transform the specified object
     FWATOMSPATCH_API virtual ::fwAtoms::Object::sptr transformObject(::fwAtoms::Object::sptr object,
-            const std::string &context,
-            const std::string &currentVersion,
-            const std::string &targetVersion)=0;
+                                                                     const std::string &context,
+                                                                     const std::string &currentVersion,
+                                                                     const std::string &targetVersion) = 0;
 
 };
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp
index 4e5118e..b8753d3 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_FACTORY_NAMESPACE_HPP__
-#define __FWATOMSPATCH_FACTORY_NAMESPACE_HPP__
+#ifndef __FWATOMSPATCH_PATCHER_FACTORY_NAMESPACE_HPP__
+#define __FWATOMSPATCH_PATCHER_FACTORY_NAMESPACE_HPP__
 
 
 namespace fwAtomsPatch
@@ -17,7 +17,7 @@ namespace patcher
 /**
  * @brief       Contains fwAtomsPatch::factory utilities
  * @namespace   factory
- * 
+ *
  * @date        2009-2013
  *
  */
@@ -29,4 +29,4 @@ namespace factory
 
 } // namespace fwAtomsPatch
 
-#endif /* __FWATOMSPATCH_FACTORY_NAMESPACE_HPP__ */
+#endif /* __FWATOMSPATCH_PATCHER_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/new.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/new.hpp
index ff45f99..b2b6b62 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/new.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/factory/new.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_FACTORY_NEW_HPP__
-#define __FWATOMSPATCH_FACTORY_NEW_HPP__
+#ifndef __FWATOMSPATCH_PATCHER_FACTORY_NEW_HPP__
+#define __FWATOMSPATCH_PATCHER_FACTORY_NEW_HPP__
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -37,20 +36,22 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwAtomsPatch::patcher::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwAtomsPatch::patcher::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 
 FWATOMSPATCH_API SPTR(::fwAtomsPatch::patcher::IPatcher) New(
-        const ::fwAtomsPatch::patcher::registry::KeyType & classname );
+    const ::fwAtomsPatch::patcher::registry::KeyType & classname );
 
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
 
     return obj;
 }
@@ -61,6 +62,6 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New()
 
 } // namespace fwAtomsPatch
 
-#endif /* __FWATOMSPATCH_FACTORY_NEW_HPP__ */
+#endif /* __FWATOMSPATCH_PATCHER_FACTORY_NEW_HPP__ */
 
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/detail.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/detail.hpp
index 31dcd82..a5b7c96 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/detail.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/detail.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_REGISTRY_DETAIL_HPP__
-#define __FWATOMSPATCH_REGISTRY_DETAIL_HPP__
+#ifndef __FWATOMSPATCH_PATCHER_REGISTRY_DETAIL_HPP__
+#define __FWATOMSPATCH_PATCHER_REGISTRY_DETAIL_HPP__
 
 #include <string>
 
@@ -27,7 +27,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtomsPatch::patcher::IPatcher) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwAtomsPatch::patcher::IPatcher) (), KeyType > Type;
 
 FWATOMSPATCH_API SPTR(Type) get();
 
@@ -37,6 +37,6 @@ FWATOMSPATCH_API SPTR(Type) get();
 
 } // namespace fwAtomsPatch
 
-#endif /* __FWATOMSPATCHE_REGISTRY_DETAIL_HPP__ */
+#endif /* __FWATOMSPATCH_PATCHER_REGISTRY_DETAIL_HPP__ */
 
 
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/macros.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/macros.hpp
index ceb1ce6..892b20a 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/macros.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_REGISTRY_MACRO_HPP__
-#define __FWATOMSPATCH_REGISTRY_MACRO_HPP__
+#ifndef __FWATOMSPATCH_PATCHER_REGISTRY_MACROS_HPP__
+#define __FWATOMSPATCH_PATCHER_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/cat.hpp>
 
@@ -23,7 +23,7 @@ namespace registry
 
 #define patcherRegisterMacro( classname, objectKey )                                  \
     static ::fwAtomsPatch::patcher::IPatcher::Registrar< classname >                  \
-    BOOST_PP_CAT(s__factory__record__object__, __LINE__) ( objectKey ) ;
+    BOOST_PP_CAT(s__factory__record__object__, __LINE__) ( objectKey );
 
 } // namespace registry
 
@@ -31,4 +31,4 @@ namespace registry
 
 } // namespace fwAtomsPatch
 
-#endif /*__FWATOMSPATCH_REGISTRY_MACRO_HPP__*/
+#endif /*__FWATOMSPATCH_PATCHER_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp
index d6aefec..6121bf0 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/patcher/registry/namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSPATCH_REGISTRY_NAMESPACE_HPP__
-#define __FWATOMSPATCH_REGISTRY_NAMESPACE_HPP__
+#ifndef __FWATOMSPATCH_PATCHER_REGISTRY_NAMESPACE_HPP__
+#define __FWATOMSPATCH_PATCHER_REGISTRY_NAMESPACE_HPP__
 
 
 namespace fwAtomsPatch
@@ -17,7 +17,7 @@ namespace patcher
 /**
  * @brief       fwAtomsPatch fwAtomsPatch::registry details
  * @namespace   registry
- * 
+ *
  * @date        2009-2013
  *
  */
@@ -29,4 +29,4 @@ namespace registry
 
 } // namespace fwAtomsPatch
 
-#endif /* __FWATOMSPATCH_REGISTRY_NAMESPACE_HPP__ */
+#endif /* __FWATOMSPATCH_PATCHER_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/types.hpp b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/types.hpp
index 1928fac..76e0ebe 100644
--- a/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/types.hpp
+++ b/SrcLib/core/fwAtomsPatch/include/fwAtomsPatch/types.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,14 +15,14 @@
 
 namespace fwAtomsPatch
 {
-    /// Key used in object meta infos to define an object classname.
-    static const std::string s_OBJ_CLASSNAME = ::fwAtomConversion::DataVisitor::CLASSNAME_METAINFO;
+/// Key used in object meta infos to define an object classname.
+static const std::string s_OBJ_CLASSNAME = ::fwAtomConversion::DataVisitor::CLASSNAME_METAINFO;
 
-    /// Key used in object meta infos to define an object version.
-    static const std::string s_OBJ_VERSION = "object_version";
+/// Key used in object meta infos to define an object version.
+static const std::string s_OBJ_VERSION = "object_version";
 
-    /// Key used in object meta infos to define an object ID.
-    static const std::string s_OBJ_ID  = ::fwAtomConversion::DataVisitor::ID_METAINFO;
+/// Key used in object meta infos to define an object ID.
+static const std::string s_OBJ_ID = ::fwAtomConversion::DataVisitor::ID_METAINFO;
 
 } // namespace fwAtomsPatch
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IPatch.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IPatch.cpp
index 2f4307e..d720b88 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IPatch.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IPatch.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,8 +23,8 @@ IPatch::~IPatch()
 
 IPatch::IPatch( const IPatch &cpy )
 {
-    m_originClassname =  cpy.getOriginClassname();
-    m_originVersion = cpy.getOriginVersion();
+    m_originClassname = cpy.getOriginClassname();
+    m_originVersion   = cpy.getOriginVersion();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/ISemanticPatch.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/ISemanticPatch.cpp
index 6f97af4..52d6bcb 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/ISemanticPatch.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/ISemanticPatch.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,14 +28,14 @@ ISemanticPatch::~ISemanticPatch()
 ISemanticPatch::ISemanticPatch( const ISemanticPatch &cpy ) : IPatch(cpy)
 {
     m_originClassname = cpy.getOriginClassname();
-    m_originVersion = cpy.getOriginVersion();
+    m_originVersion   = cpy.getOriginVersion();
 }
 
 // ----------------------------------------------------------------------------
 
 void ISemanticPatch::addContext(const std::string& context,
-                                  const std::string& originVersion,
-                                  const std::string& targetVersion)
+                                const std::string& originVersion,
+                                const std::string& targetVersion)
 {
     ::fwCore::mt::WriteLock lock(m_mutex);
     m_contexts.push_back(Context(context, originVersion, targetVersion));
@@ -44,8 +44,8 @@ void ISemanticPatch::addContext(const std::string& context,
 // ----------------------------------------------------------------------------
 
 bool ISemanticPatch::isApplicable(const std::string& context,
-            const std::string& originVersion,
-            const std::string& targetVersion) const
+                                  const std::string& originVersion,
+                                  const std::string& targetVersion) const
 {
     Context c(context, originVersion, targetVersion);
     ::fwCore::mt::ReadLock lock(m_mutex);
@@ -56,13 +56,13 @@ bool ISemanticPatch::isApplicable(const std::string& context,
 // ----------------------------------------------------------------------------
 
 void ISemanticPatch::apply(const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+                           const ::fwAtoms::Object::sptr& current,
+                           ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     OSLM_ASSERT("The type of the previous object ("
-            << ::fwAtomsPatch::helper::getClassname(previous) << "does not match"
-            "the required type (" << m_originClassname << ").",
-            ::fwAtomsPatch::helper::getClassname(previous) == m_originClassname);
+                << ::fwAtomsPatch::helper::getClassname(previous) << "does not match"
+                "the required type (" << m_originClassname << ").",
+                ::fwAtomsPatch::helper::getClassname(previous) == m_originClassname);
 
     OSLM_ASSERT("The version of the previous object (" << ::fwAtomsPatch::helper::getVersion(previous) <<
                 "does not match the required version (" << m_originVersion << ").",
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralCreator.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralCreator.cpp
index 7577ed2..f430756 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralCreator.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralCreator.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,8 +30,8 @@ IStructuralCreator::~IStructuralCreator()
 
 IStructuralCreator::IStructuralCreator( const IStructuralCreator &cpy )
 {
-    m_classname =  cpy.getObjectClassname();
-    m_version = cpy.getObjectVersion();
+    m_classname = cpy.getObjectClassname();
+    m_version   = cpy.getObjectVersion();
 }
 
 // ----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralPatch.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralPatch.cpp
index 26ff130..188dc0f 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralPatch.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/IStructuralPatch.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,10 +26,10 @@ IStructuralPatch::~IStructuralPatch()
 
 IStructuralPatch::IStructuralPatch( const IStructuralPatch &cpy ) : IPatch(cpy)
 {
-    m_originClassname =  cpy.getOriginClassname();
+    m_originClassname = cpy.getOriginClassname();
     m_targetClassname = cpy.getTargetClassname();
-    m_originVersion = cpy.getOriginVersion();
-    m_targetVersion = cpy.getTargetVersion();
+    m_originVersion   = cpy.getOriginVersion();
+    m_targetVersion   = cpy.getTargetVersion();
 }
 
 // ----------------------------------------------------------------------------
@@ -43,15 +43,17 @@ void IStructuralPatch::updateVersion(::fwAtoms::Object::sptr current)
 // ----------------------------------------------------------------------------
 
 void IStructuralPatch::apply(const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+                             const ::fwAtoms::Object::sptr& current,
+                             ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
-    OSLM_ASSERT("The type of the previous object (" << ::fwAtomsPatch::helper::getClassname(previous)
-            << ") does not match the required type (" << m_originClassname << ").",
-            ::fwAtomsPatch::helper::getClassname(previous) == m_originClassname);
-    OSLM_ASSERT("The version of the previous object (" << ::fwAtomsPatch::helper::getVersion(previous)
-            << ") does not match the required version (" << m_originVersion << ").",
-            ::fwAtomsPatch::helper::getVersion(previous) == m_originVersion);
+    OSLM_ASSERT("The type of the previous object (" << ::fwAtomsPatch::helper::getClassname(
+                    previous)
+                                                    << ") does not match the required type (" << m_originClassname << ").",
+                ::fwAtomsPatch::helper::getClassname(previous) == m_originClassname);
+    OSLM_ASSERT("The version of the previous object (" << ::fwAtomsPatch::helper::getVersion(
+                    previous)
+                                                       << ") does not match the required version (" << m_originVersion << ").",
+                ::fwAtomsPatch::helper::getVersion(previous) == m_originVersion);
 }
 
 // ----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/LinkDescriptor.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/LinkDescriptor.cpp
index 5352750..b254477 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/LinkDescriptor.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/LinkDescriptor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,7 +10,7 @@ namespace fwAtomsPatch
 {
 
 LinkDescriptor::LinkDescriptor() :
-        m_weight(1), m_context(""), m_originVersion(""), m_targetVersion("")
+    m_weight(1), m_context(""), m_originVersion(""), m_targetVersion("")
 {
 }
 
@@ -19,8 +19,8 @@ LinkDescriptor::LinkDescriptor() :
 LinkDescriptor::LinkDescriptor(const std::string& context, const std::string& originVersion,
                                const std::string& targetVersion, const std::string& patcher,
                                LinksType links, int weight) :
-        m_weight(weight), m_context(context), m_originVersion(originVersion), m_targetVersion(targetVersion),
-        m_patcher(patcher), m_links(links)
+    m_weight(weight), m_context(context), m_originVersion(originVersion), m_targetVersion(targetVersion),
+    m_patcher(patcher), m_links(links)
 {
 }
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/PatchingManager.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/PatchingManager.cpp
index cc811f3..b588c58 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/PatchingManager.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/PatchingManager.cpp
@@ -1,27 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include <fwAtoms/Object.hpp>
 
+#include "fwAtomsPatch/exceptions/ImpossibleConversion.hpp"
+#include "fwAtomsPatch/exceptions/MissingInformation.hpp"
 #include "fwAtomsPatch/infos/log.hpp"
-#include "fwAtomsPatch/VersionsManager.hpp"
-#include "fwAtomsPatch/VersionsGraph.hpp"
 #include "fwAtomsPatch/patcher/IPatcher.hpp"
-#include "fwAtomsPatch/exceptions/MissingInformation.hpp"
-#include "fwAtomsPatch/exceptions/ImpossibleConversion.hpp"
 #include "fwAtomsPatch/PatchingManager.hpp"
-
+#include "fwAtomsPatch/VersionsGraph.hpp"
+#include "fwAtomsPatch/VersionsManager.hpp"
 
 namespace fwAtomsPatch
 {
 
 PatchingManager::PatchingManager(::fwAtoms::Object::sptr object)
-: m_object(object)
+    : m_object(object)
 {
 }
 
@@ -35,7 +32,7 @@ PatchingManager::~PatchingManager()
 
 ::fwAtoms::Object::sptr PatchingManager::transformTo(const std::string& newVersion)
 {
-    const std::string& context = m_object->getMetaInfo("context");
+    const std::string& context        = m_object->getMetaInfo("context");
     const std::string& currentVersion = m_object->getMetaInfo("version_name");
 
     if(currentVersion == newVersion)
@@ -45,29 +42,29 @@ PatchingManager::~PatchingManager()
     }
 
     FW_RAISE_EXCEPTION_IF(
-            ::fwAtomsPatch::exceptions::MissingInformation("Context information is missing."),
-             context.empty());
+        ::fwAtomsPatch::exceptions::MissingInformation("Context information is missing."),
+        context.empty());
 
     FW_RAISE_EXCEPTION_IF(
-            ::fwAtomsPatch::exceptions::MissingInformation("Version information is missing."),
-             currentVersion.empty());
+        ::fwAtomsPatch::exceptions::MissingInformation("Version information is missing."),
+        currentVersion.empty());
 
 
     ::fwAtomsPatch::VersionsGraph::sptr versionsGraph;
     versionsGraph = ::fwAtomsPatch::VersionsManager::getDefault()->getGraph(context);
 
     FW_RAISE_EXCEPTION_IF( ::fwAtomsPatch::exceptions::ImpossibleConversion(
-            "There is no way to go from version '" + currentVersion + "' to version '" +
-            newVersion + "' for context '" + context +"'."), !versionsGraph);
+                               "There is no way to go from version '" + currentVersion + "' to version '" +
+                               newVersion + "' for context '" + context +"'."), !versionsGraph);
 
 
     ::fwAtomsPatch::VersionsGraph::VersionSeriesType series
-             = versionsGraph->shortestPath(currentVersion, newVersion);
+        = versionsGraph->shortestPath(currentVersion, newVersion);
 
     FW_RAISE_EXCEPTION_IF( ::fwAtomsPatch::exceptions::ImpossibleConversion(
-            "There is no way to go from version '" + currentVersion + "' to version '" +
-            newVersion + "' for context '" + context +"'."),
-            series.empty());
+                               "There is no way to go from version '" + currentVersion + "' to version '" +
+                               newVersion + "' for context '" + context +"'."),
+                           series.empty());
 
     ::fwAtomsPatch::VersionsGraph::NodeIDType currentVersionNode = versionsGraph->getNode(currentVersion);
 
@@ -76,17 +73,17 @@ PatchingManager::~PatchingManager()
 
     SLM_TRACE("[PATCHING] Starting...");
 
-    BOOST_FOREACH(::fwAtomsPatch::VersionsGraph::VersionSeriesType::value_type elt, series)
+    for(::fwAtomsPatch::VersionsGraph::VersionSeriesType::value_type elt :  series)
     {
         ::fwAtomsPatch::VersionsGraph::NodeIDType targetVersionNode = elt;
 
         //Retrieve versions names
         currentName = versionsGraph->getNode(currentVersionNode).getVersionName();
-        targetName = versionsGraph->getNode(targetVersionNode).getVersionName();
+        targetName  = versionsGraph->getNode(targetVersionNode).getVersionName();
 
         //Retrieve link
         const ::fwAtomsPatch::LinkDescriptor& link
-                = versionsGraph->getEdge(currentVersionNode, targetVersionNode);
+            = versionsGraph->getEdge(currentVersionNode, targetVersionNode);
 
         //Retrieve patcher
         patcher = ::fwAtomsPatch::patcher::factory::New(link.getPatcher());
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/SemanticPatchDB.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/SemanticPatchDB.cpp
index 7b1b2ee..3de6551 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/SemanticPatchDB.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/SemanticPatchDB.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
 
 #include "fwAtomsPatch/SemanticPatchDB.hpp"
 #include "fwAtomsPatch/ISemanticPatch.hpp"
@@ -13,22 +12,25 @@ namespace fwAtomsPatch
 {
 
 
-SemanticPatchDB::sptr SemanticPatchDB::s_default = ::boost::make_shared<SemanticPatchDB>();
+SemanticPatchDB::sptr SemanticPatchDB::s_default = std::make_shared<SemanticPatchDB>();
 
 // ----------------------------------------------------------------------------
 
 SemanticPatchDB::SemanticPatchDB()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 SemanticPatchDB::~SemanticPatchDB()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 SemanticPatchDB::SemanticPatchDB( const SemanticPatchDB &cpy )
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
@@ -42,11 +44,11 @@ void SemanticPatchDB::registerPatch(::fwAtomsPatch::ISemanticPatch::sptr patch)
 // ----------------------------------------------------------------------------
 
 ::fwAtomsPatch::ISemanticPatch::sptr SemanticPatchDB::getPatch(
-        const std::string& context,
-        const std::string& originVersion,
-        const std::string& targetVersion,
-        const std::string& objOriginClassname,
-        const std::string& objOriginVersion) const
+    const std::string& context,
+    const std::string& originVersion,
+    const std::string& targetVersion,
+    const std::string& objOriginClassname,
+    const std::string& objOriginVersion) const
 {
     VersionIDType origin = std::make_pair(objOriginClassname, objOriginVersion);
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralCreatorDB.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralCreatorDB.cpp
index b37dbf4..a87512e 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralCreatorDB.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralCreatorDB.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
 
 #include "fwAtomsPatch/infos/log.hpp"
 #include "fwAtomsPatch/IStructuralCreator.hpp"
@@ -13,7 +12,7 @@
 namespace fwAtomsPatch
 {
 
-StructuralCreatorDB::sptr StructuralCreatorDB::s_default = ::boost::make_shared<StructuralCreatorDB>();
+StructuralCreatorDB::sptr StructuralCreatorDB::s_default = std::make_shared<StructuralCreatorDB>();
 
 void StructuralCreatorDB::registerCreator(::fwAtomsPatch::IStructuralCreator::sptr creator)
 {
@@ -25,7 +24,7 @@ void StructuralCreatorDB::registerCreator(::fwAtomsPatch::IStructuralCreator::sp
 // ----------------------------------------------------------------------------
 
 ::fwAtomsPatch::IStructuralCreator::sptr StructuralCreatorDB::getCreator(const std::string& classname,
-     const std::string& version)
+                                                                         const std::string& version)
 {
     VersionIDType key = std::make_pair(classname, version);
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralPatchDB.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralPatchDB.cpp
index 468716d..6756cc6 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralPatchDB.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/StructuralPatchDB.cpp
@@ -1,23 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
 
 #include "fwAtomsPatch/StructuralPatchDB.hpp"
 
 namespace fwAtomsPatch
 {
 
-StructuralPatchDB::sptr StructuralPatchDB::s_default = ::boost::make_shared<StructuralPatchDB>();
+StructuralPatchDB::sptr StructuralPatchDB::s_default = std::make_shared<StructuralPatchDB>();
 
 void StructuralPatchDB::registerPatch(::fwAtomsPatch::IStructuralPatch::sptr patch)
 {
     VersionIDType source = std::make_pair(patch->getOriginClassname(), patch->getOriginVersion());
     VersionIDType target = std::make_pair(patch->getTargetClassname(), patch->getTargetVersion());
-    PatchKeyType key = std::make_pair(source, target);
+    PatchKeyType key     = std::make_pair(source, target);
     ::fwCore::mt::WriteLock lock(m_mutex);
     m_patches[key] = patch;
 }
@@ -25,13 +24,13 @@ void StructuralPatchDB::registerPatch(::fwAtomsPatch::IStructuralPatch::sptr pat
 // ----------------------------------------------------------------------------
 
 ::fwAtomsPatch::IStructuralPatch::sptr StructuralPatchDB::getPatch(const std::string& originClassname,
-    const std::string& originVersion,
-    const std::string& targetClassname,
-    const std::string& targetVersion) const
+                                                                   const std::string& originVersion,
+                                                                   const std::string& targetClassname,
+                                                                   const std::string& targetVersion) const
 {
     const VersionIDType source = std::make_pair(originClassname, originVersion);
     const VersionIDType target = std::make_pair(targetClassname, targetVersion);
-    const PatchKeyType key = std::make_pair(source, target);
+    const PatchKeyType key     = std::make_pair(source, target);
 
     ::fwCore::mt::ReadLock lock(m_mutex);
     PatchesType::const_iterator it = m_patches.find(key);
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionDescriptor.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionDescriptor.cpp
index 3cd4786..1a16dbc 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionDescriptor.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionDescriptor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,15 +10,15 @@ namespace fwAtomsPatch
 {
 
 VersionDescriptor::VersionDescriptor()
-: m_context(""), m_versionName("")
+    : m_context(""), m_versionName("")
 {
 }
 
 // ----------------------------------------------------------------------------
 
 VersionDescriptor::VersionDescriptor(
-        const std::string& context, const std::string& versionName, const VersionsType& versions)
-: m_context(context), m_versionName(versionName), m_versions(versions)
+    const std::string& context, const std::string& versionName, const VersionsType& versions)
+    : m_context(context), m_versionName(versionName), m_versions(versions)
 {
 }
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsGraph.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsGraph.cpp
index 8ecaee0..52d9190 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsGraph.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsGraph.cpp
@@ -1,9 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef WIN32
+// To fix problem in class boost::detail::stored_edge_property
+// Default constructor is a move constructor and no copy constructor is implemented
+// The instance of the class can not be copied.
+#define BOOST_NO_CXX11_RVALUE_REFERENCES
+#define BOOST_NO_CXX11_REF_QUALIFIERS
+#endif
 #include <algorithm>
 #include <boost/graph/graph_traits.hpp>
 #include <boost/graph/adjacency_list.hpp>
@@ -22,7 +29,7 @@ class VertexVisitor : public boost::default_bfs_visitor
 {
 public:
 
-    VertexVisitor(std::vector< std::string >* vector): m_vector(vector)
+    VertexVisitor(std::vector< std::string >* vector) : m_vector(vector)
     {
     }
 
@@ -32,7 +39,7 @@ public:
     }
 
 protected:
-  std::vector< std::string >* m_vector;
+    std::vector< std::string >* m_vector;
 };
 
 VersionsGraph::VersionsGraph()
@@ -66,7 +73,7 @@ void VersionsGraph::addEdge(EdgeType edge)
 // ----------------------------------------------------------------------------
 
 VersionsGraph::VersionSeriesType VersionsGraph::shortestPath(const std::string& origin,
-                                                    const std::string& target)
+                                                             const std::string& target)
 {
     NodeIDType originID = this->getNode(origin);
     NodeIDType targetID = this->getNode(target);
@@ -87,10 +94,13 @@ VersionsGraph::VersionSeriesType VersionsGraph::shortestPath(const NodeType& ori
 
     const NodeIDType& vOrig = m_nodes[origin];
     ::boost::dijkstra_shortest_paths(m_graph, vOrig,
-            ::boost::weight_map(get(&EdgeType::m_weight, m_graph))
-            .predecessor_map(&predecessor[0])
-            .distance_map(::boost::make_iterator_property_map(distances.begin(), ::boost::get(::boost::vertex_index, m_graph )))
-            );
+                                     ::boost::weight_map(get(&EdgeType::m_weight, m_graph))
+                                     .predecessor_map(&predecessor[0])
+                                     .distance_map(::boost::make_iterator_property_map(distances.begin(),
+                                                                                       ::boost::get(::boost::
+                                                                                                    vertex_index,
+                                                                                                    m_graph )))
+                                     );
 
     NodeIDType current = m_nodes[target];
 
@@ -142,18 +152,18 @@ VersionsGraph::EdgeType VersionsGraph::getEdge(const NodeIDType& origin, const N
     ::fwCore::mt::ReadLock lock(m_graphMutex);
     ::boost::tie(edgeID,success) = ::boost::edge(origin, target, m_graph);
     OSLM_ASSERT("There is no edge between '" << m_graph[origin].getVersionName() <<"' and '"
-            << m_graph[target].getVersionName() << "'.", success);
+                                             << m_graph[target].getVersionName() << "'.", success);
     return m_graph[edgeID];
 }
 
 // ----------------------------------------------------------------------------
 
 VersionsGraph::LinkedVersionType VersionsGraph::getLinkedVersion(
-        const NodeIDType& originID, const NodeIDType& targetID, LinkDescriptor::VersionIDType current)
+    const NodeIDType& originID, const NodeIDType& targetID, LinkDescriptor::VersionIDType current)
 {
     NodeType origin = this->getNode(originID);
     NodeType target = this->getNode(targetID);
-    EdgeType edge = this->getEdge(originID, targetID);
+    EdgeType edge   = this->getEdge(originID, targetID);
 
     bool success = false;
     LinkDescriptor::VersionIDType result;
@@ -164,7 +174,7 @@ VersionsGraph::LinkedVersionType VersionsGraph::getLinkedVersion(
     linkIt = links.find(current);
     if(linkIt != links.end())
     {
-        result = linkIt->second;
+        result  = linkIt->second;
         success = true;
     }
     //Implicit
@@ -177,7 +187,7 @@ VersionsGraph::LinkedVersionType VersionsGraph::getLinkedVersion(
             //Same type
             if(current.first == versIt->first)
             {
-                result = *versIt;
+                result  = *versIt;
                 success = true;
                 break;
             }
@@ -215,10 +225,10 @@ VersionsGraph::EdgeIDType VersionsGraph::createEdge(const EdgeType& edge)
     EdgeIDType newEdge;
     bool success = false;
     ::fwCore::mt::ReadLock lock(m_graphMutex);
-    ::boost::tie(newEdge, success) = ::boost::add_edge(origin,target,edge,m_graph);
+    ::boost::tie(newEdge, success) = ::boost::add_edge(origin, target, edge, m_graph);
 
     OSLM_ASSERT("Unable to create the edge between '" << edge.getOriginVersion() << "' "
-            "and '" << edge.getTargetVersion() << "'", success);
+                "and '" << edge.getTargetVersion() << "'", success);
 
     return newEdge;
 }
@@ -237,7 +247,8 @@ std::vector< std::string > VersionsGraph::getConnectedVersions(const std::string
         vector.erase(vector.begin());
     }
     catch ( ::fwAtomsPatch::exceptions::UnknownVersion & )
-    {}
+    {
+    }
 
     return vector;
 }
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsManager.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsManager.cpp
index b949ced..fea0161 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsManager.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/VersionsManager.cpp
@@ -1,30 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fstream>
+#include "fwAtomsPatch/VersionsManager.hpp"
+#include "fwAtomsPatch/exceptions/MissingInformation.hpp"
+#include "fwAtomsPatch/exceptions/BadExtension.hpp"
+#include "fwAtomsPatch/types.hpp"
+
+#include <fwCore/spyLog.hpp>
 
-#include <boost/foreach.hpp>
 #include <boost/filesystem.hpp>
-#include <boost/make_shared.hpp>
 #include <boost/property_tree/ptree.hpp>
 #include <boost/property_tree/json_parser.hpp>
 #include <boost/property_tree/exceptions.hpp>
 
 #include <camp/class.hpp>
 
-#include <fwCore/spyLog.hpp>
-
-#include "fwAtomsPatch/VersionsManager.hpp"
-#include "fwAtomsPatch/exceptions/MissingInformation.hpp"
-#include "fwAtomsPatch/exceptions/BadExtension.hpp"
-#include "fwAtomsPatch/types.hpp"
-
-
+#include <fstream>
 
-namespace fwAtomsPatch {
+namespace fwAtomsPatch
+{
 
 std::string getValue(const ::boost::property_tree::ptree& node, const std::string& name,
                      const ::boost::filesystem::path& filePath )
@@ -43,7 +40,7 @@ std::string getValue(const ::boost::property_tree::ptree& node, const std::strin
     return value;
 }
 
-SPTR(VersionsManager) VersionsManager::s_default = ::boost::make_shared<VersionsManager>();
+SPTR(VersionsManager) VersionsManager::s_default = std::make_shared<VersionsManager>();
 
 // ----------------------------------------------------------------------------
 
@@ -65,7 +62,7 @@ void VersionsManager::buildVersionTable(const std::string& dirPath)
     for (::boost::filesystem::recursive_directory_iterator end, dir(dirPath); dir != end; ++dir)
     {
         if(  !::boost::filesystem::is_directory(*dir)
-          && ::boost::filesystem::extension(*dir) == ".versions")
+             && ::boost::filesystem::extension(*dir) == ".versions")
         {
             m_versionTable.push_back((*dir).path());
         }
@@ -78,10 +75,10 @@ void VersionsManager::buildLinkTable(const std::string& dirPath)
 {
     ::fwCore::mt::WriteLock lock(m_linkMutex);
     for ( ::boost::filesystem::recursive_directory_iterator end, dir(dirPath);
-        dir != end; ++dir )
+          dir != end; ++dir )
     {
         if(  !::boost::filesystem::is_directory(*dir)
-          && ::boost::filesystem::extension(*dir) == ".graphlink")
+             && ::boost::filesystem::extension(*dir) == ".graphlink")
         {
             m_linkTable.push_back((*dir).path());
         }
@@ -94,7 +91,7 @@ void VersionsManager::generateNewFile(const ::boost::filesystem::path& filePath,
                                       const std::string& context, const std::string& versionName)
 {
     FW_RAISE_EXCEPTION_IF( ::fwAtomsPatch::exceptions::BadExtension(".versions file required"),
-            filePath.extension() != ".versions");
+                           filePath.extension() != ".versions");
 
     namespace pt = ::boost::property_tree;
     std::size_t classCount = ::camp::classCount();
@@ -107,7 +104,7 @@ void VersionsManager::generateNewFile(const ::boost::filesystem::path& filePath,
     for (int i = 0; i < classCount; ++i)
     {
         const ::camp::Class& metaclass = ::camp::classByIndex(i);
-        const std::string& className = metaclass.name();
+        const std::string& className   = metaclass.name();
 
         if (metaclass.hasTag(::fwAtomsPatch::s_OBJ_VERSION))
         {
@@ -125,7 +122,7 @@ void VersionsManager::generateNewFile(const ::boost::filesystem::path& filePath,
 ::fwAtomsPatch::VersionDescriptor VersionsManager::getVersion(const ::boost::filesystem::path& filePath)
 {
     FW_RAISE_EXCEPTION_IF( ::fwAtomsPatch::exceptions::BadExtension(".versions file required"),
-            filePath.extension() != ".versions");
+                           filePath.extension() != ".versions");
 
     namespace pt = ::boost::property_tree;
     pt::ptree root;
@@ -135,10 +132,10 @@ void VersionsManager::generateNewFile(const ::boost::filesystem::path& filePath,
     std::ifstream file(filePath.string().c_str());
     std::istream input(file.rdbuf());
     pt::json_parser::read_json(input, root);
-    const std::string& context = getValue(root, "context", filePath);
+    const std::string& context     = getValue(root, "context", filePath);
     const std::string& versionName = getValue(root, "version_name", filePath);
 
-    BOOST_FOREACH(pt::ptree::value_type &node, root.get_child("versions"))
+    for(pt::ptree::value_type &node :  root.get_child("versions"))
     {
         versionids[node.first] = std::string(node.second.data().c_str());
     }
@@ -153,7 +150,7 @@ void VersionsManager::generateNewFile(const ::boost::filesystem::path& filePath,
 ::fwAtomsPatch::LinkDescriptor VersionsManager::getLink(const ::boost::filesystem::path& filePath)
 {
     FW_RAISE_EXCEPTION_IF( ::fwAtomsPatch::exceptions::BadExtension(".graphlink file required"),
-            filePath.extension() != ".graphlink");
+                           filePath.extension() != ".graphlink");
 
     namespace pt = ::boost::property_tree;
     typedef std::vector< std::pair< std::string, std::string > > LinkType;
@@ -166,21 +163,21 @@ void VersionsManager::generateNewFile(const ::boost::filesystem::path& filePath,
     std::istream input(file.rdbuf());
     pt::json_parser::read_json(input, root);
 
-    const std::string& context = getValue(root, "context", filePath);
+    const std::string& context       = getValue(root, "context", filePath);
     const std::string& originVersion = getValue(root, "origin_version", filePath);
     const std::string& targetVersion = getValue(root, "target_version", filePath);
 
     const std::string& patcher = root.get("patcher", "DefaultPatcher");
 
-    BOOST_FOREACH(pt::ptree::value_type &child, root.get_child("links"))
+    for(pt::ptree::value_type &child :  root.get_child("links"))
     {
-        BOOST_FOREACH(pt::ptree::value_type &node, (child.second).get_child(""))
+        for(pt::ptree::value_type &node :  (child.second).get_child(""))
         {
             link.push_back(std::make_pair(node.first, node.second.data()));
         }
 
         FW_RAISE_EXCEPTION_IF(::fwAtomsPatch::exceptions::MissingInformation(
-                        "A link should contain an origin version and a target version."), link.size() != 2);
+                                  "A link should contain an origin version and a target version."), link.size() != 2);
 
         links[link[0]] = link[1];
 
@@ -200,7 +197,7 @@ void VersionsManager::generateVersionsGraph()
     {
         ::fwCore::mt::ReadLock versionLock(m_versionMutex);
         //For every versions
-        BOOST_FOREACH(VersionsManager::ListPathType::value_type elt, m_versionTable)
+        for(VersionsManager::ListPathType::value_type elt :  m_versionTable)
         {
             ::fwAtomsPatch::VersionDescriptor version = VersionsManager::getVersion(elt);
 
@@ -216,7 +213,7 @@ void VersionsManager::generateVersionsGraph()
     {
         ::fwCore::mt::ReadLock linkLock(m_linkMutex);
         //For every links
-        BOOST_FOREACH(VersionsManager::ListPathType::value_type elt, m_linkTable)
+        for(VersionsManager::ListPathType::value_type elt :  m_linkTable)
         {
             ::fwAtomsPatch::LinkDescriptor link = VersionsManager::getLink(elt);
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/Abstract.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/Abstract.cpp
index 888bc64..0b53f69 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/Abstract.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/Abstract.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,7 +13,9 @@ namespace conditions
 {
 
 Abstract::Abstract(::fwAtoms::Base::sptr defaultValue)
-    : m_defaultValue(defaultValue){}
+    : m_defaultValue(defaultValue)
+{
+}
 
 // ----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/NumericOverflow.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/NumericOverflow.cpp
index 52004df..024033a 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/NumericOverflow.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/conditions/NumericOverflow.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,7 +30,7 @@ void NumericOverflow::setTreshold(::fwAtoms::Numeric::sptr treshold)
 // ----------------------------------------------------------------------------
 
 bool NumericOverflow::test(::fwAtoms::Base::sptr old,
-                     ::fwAtoms::Base::sptr newValue)
+                           ::fwAtoms::Base::sptr newValue)
 {
     return this->test(newValue);
 }
@@ -41,7 +41,7 @@ bool NumericOverflow::test(::fwAtoms::Base::sptr value)
 {
     if(value->isNumeric())
     {
-        ::fwAtoms::Numeric::sptr numeric =  ::fwAtoms::Numeric::dynamicCast(value);
+        ::fwAtoms::Numeric::sptr numeric = ::fwAtoms::Numeric::dynamicCast(value);
         return numeric->getValue<double>() <= m_treshold->getValue<double>();
     }
     else
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/BadExtension.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/BadExtension.cpp
index c392227..385326a 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/BadExtension.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/BadExtension.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/Base.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/Base.cpp
index a2d0dea..49fd295 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/Base.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/Base.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/ImpossibleConversion.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/ImpossibleConversion.cpp
index 090f3be..542f747 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/ImpossibleConversion.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/ImpossibleConversion.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/MissingInformation.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/MissingInformation.cpp
index e4e1c21..1cfb6bc 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/MissingInformation.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/MissingInformation.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/UnknownVersion.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/UnknownVersion.cpp
index 1733bed..4cbc243 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/UnknownVersion.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/exceptions/UnknownVersion.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/Object.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/Object.cpp
index df29a92..04eb84c 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/Object.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/Object.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,8 +26,8 @@ Object::~Object()
 // ----------------------------------------------------------------------------
 
 void Object::addAttribute(const std::string& name,
-                ::fwAtoms::Base::sptr value,
-                conditions::Abstract::sptr condition)
+                          ::fwAtoms::Base::sptr value,
+                          conditions::Abstract::sptr condition)
 {
     if(m_object->getAttributes().find(name) == m_object->getAttributes().end())
     {
@@ -35,8 +35,8 @@ void Object::addAttribute(const std::string& name,
         {
             m_object->setAttribute(name, value);
             fwAtomsPatchAddAttributeLogMacro("'"
-                    + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                    + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
+                                             + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                             + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
         }
     }
     else
@@ -48,30 +48,30 @@ void Object::addAttribute(const std::string& name,
 // ----------------------------------------------------------------------------
 
 void Object::addOrReplaceAttribute(const std::string& name,
-                ::fwAtoms::Base::sptr value,
-                conditions::Abstract::sptr condition)
+                                   ::fwAtoms::Base::sptr value,
+                                   conditions::Abstract::sptr condition)
 {
     if(m_object->getAttributes().find(name) != m_object->getAttributes().end())
     {
         m_object->eraseAttribute(name);
         fwAtomsPatchEraseAttributeLogMacro("'"
-                + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
+                                           + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                           + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
     }
 
     if(condition->test(value))
     {
         m_object->setAttribute(name, value);
         fwAtomsPatchAddAttributeLogMacro("'"
-                + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
+                                         + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                         + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
     }
 }
 
 // ----------------------------------------------------------------------------
 
 void Object::removeAttribute(const std::string& name,
-                        conditions::Abstract::sptr condition)
+                             conditions::Abstract::sptr condition)
 {
     ::fwAtoms::Object::AttributesType::const_iterator it = m_object->getAttributes().find(name);
 
@@ -81,8 +81,8 @@ void Object::removeAttribute(const std::string& name,
         {
             m_object->eraseAttribute(name);
             fwAtomsPatchEraseAttributeLogMacro("'"
-                    + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                    + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
+                                               + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                               + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
         }
     }
     else
@@ -94,16 +94,16 @@ void Object::removeAttribute(const std::string& name,
 // ----------------------------------------------------------------------------
 
 void Object::replaceAttribute(const std::string& name,
-                          ::fwAtoms::Base::sptr newValue,
-                          conditions::Abstract::sptr condition)
+                              ::fwAtoms::Base::sptr newValue,
+                              conditions::Abstract::sptr condition)
 {
     ::fwAtoms::Object::AttributesType::const_iterator cIt = m_object->getAttributes().find(name);
 
     if(cIt != m_object->getAttributes().end())
     {
         fwAtomsPatchReplaceAttributeLogMacro("'"
-                + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
+                                             + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                             + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
 
         if(condition->test(cIt->second, newValue))
         {
@@ -113,8 +113,8 @@ void Object::replaceAttribute(const std::string& name,
         {
             m_object->setAttribute(name, condition->getDefaultValue());
             fwAtomsPatchOutOfRangeLogMacro("Value '" + name
-                                + "' is out of range, using default value : '"
-                                + condition->getDefaultValue()->getString() + "'");
+                                           + "' is out of range, using default value : '"
+                                           + condition->getDefaultValue()->getString() + "'");
         }
     }
     else
@@ -136,11 +136,11 @@ void Object::renameAttribute(const std::string& name, const std::string& newName
         {
             ::fwAtoms::Base::sptr base = m_object->getAttribute(name);
             fwAtomsPatchEraseAttributeLogMacro("'"
-                    + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                    + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
+                                               + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                               + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + name + "'");
             fwAtomsPatchAddAttributeLogMacro("'"
-                    + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
-                    + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + newName + "'");
+                                             + ::fwAtomsPatch::helper::getClassname(m_object) + "|"
+                                             + ::fwAtomsPatch::helper::getVersion(m_object) + "' : '" + newName + "'");
             m_object->setAttribute(newName, base);
             m_object->eraseAttribute(name);
         }
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/functions.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/functions.cpp
index 6d87d3c..4ad3310 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/functions.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/helper/functions.cpp
@@ -1,16 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwTools/UUID.hpp>
-
 #include "fwAtomsPatch/helper/functions.hpp"
 #include "fwAtomsPatch/types.hpp"
 
+#include <fwTools/UUID.hpp>
+
 namespace fwAtomsPatch
 {
 namespace helper
@@ -62,29 +60,29 @@ void cleanFields( const ::fwAtoms::Object::sptr & obj )
 
 void changeUID( const ::fwAtoms::Object::sptr & obj )
 {
-    BOOST_FOREACH( const ::fwAtoms::Object::AttributesType::value_type& elem, obj->getAttributes() )
+    for( const ::fwAtoms::Object::AttributesType::value_type& elem :  obj->getAttributes() )
     {
         if ( elem.second )
         {
             switch ( elem.second->type() )
             {
-            case ::fwAtoms::Base::SEQUENCE :
-            {
-                changeSeqUID( ::fwAtoms::Sequence::dynamicCast( elem.second ) );
-                break;
-            }
-            case ::fwAtoms::Base::MAP :
-            {
-                changeMapUID( ::fwAtoms::Map::dynamicCast( elem.second ) );
-                break;
-            }
-            case ::fwAtoms::Base::OBJECT :
-            {
-                changeUID( ::fwAtoms::Object::dynamicCast( elem.second ) );
-                break;
-            }
-            default :
-                break;
+                case ::fwAtoms::Base::SEQUENCE:
+                {
+                    changeSeqUID( ::fwAtoms::Sequence::dynamicCast( elem.second ) );
+                    break;
+                }
+                case ::fwAtoms::Base::MAP:
+                {
+                    changeMapUID( ::fwAtoms::Map::dynamicCast( elem.second ) );
+                    break;
+                }
+                case ::fwAtoms::Base::OBJECT:
+                {
+                    changeUID( ::fwAtoms::Object::dynamicCast( elem.second ) );
+                    break;
+                }
+                default:
+                    break;
             }
         }
     }
@@ -96,29 +94,29 @@ void changeUID( const ::fwAtoms::Object::sptr & obj )
 
 void changeMapUID( const ::fwAtoms::Map::sptr & map )
 {
-    BOOST_FOREACH( ::fwAtoms::Map::ValueType elem, map->getValue() )
+    for( ::fwAtoms::Map::ValueType elem :  map->getValue() )
     {
         if ( elem.second )
         {
             switch ( elem.second->type() )
             {
-            case ::fwAtoms::Base::SEQUENCE :
-            {
-                changeSeqUID( ::fwAtoms::Sequence::dynamicCast( elem.second ) );
-                break;
-            }
-            case ::fwAtoms::Base::MAP :
-            {
-                changeMapUID( ::fwAtoms::Map::dynamicCast( elem.second ) );
-                break;
-            }
-            case ::fwAtoms::Base::OBJECT :
-            {
-                changeUID( ::fwAtoms::Object::dynamicCast( elem.second ) );
-                break;
-            }
-            default :
-                break;
+                case ::fwAtoms::Base::SEQUENCE:
+                {
+                    changeSeqUID( ::fwAtoms::Sequence::dynamicCast( elem.second ) );
+                    break;
+                }
+                case ::fwAtoms::Base::MAP:
+                {
+                    changeMapUID( ::fwAtoms::Map::dynamicCast( elem.second ) );
+                    break;
+                }
+                case ::fwAtoms::Base::OBJECT:
+                {
+                    changeUID( ::fwAtoms::Object::dynamicCast( elem.second ) );
+                    break;
+                }
+                default:
+                    break;
             }
         }
     }
@@ -128,29 +126,29 @@ void changeMapUID( const ::fwAtoms::Map::sptr & map )
 
 void changeSeqUID( const ::fwAtoms::Sequence::sptr & seq )
 {
-    BOOST_FOREACH( ::fwAtoms::Base::sptr elem, seq->getValue() )
+    for( ::fwAtoms::Base::sptr elem :  seq->getValue() )
     {
         if ( elem )
         {
             switch ( elem->type() )
             {
-            case ::fwAtoms::Base::SEQUENCE :
-            {
-                changeSeqUID( ::fwAtoms::Sequence::dynamicCast( elem ) );
-                break;
-            }
-            case ::fwAtoms::Base::MAP :
-            {
-                changeMapUID( ::fwAtoms::Map::dynamicCast( elem ) );
-                break;
-            }
-            case ::fwAtoms::Base::OBJECT :
-            {
-                changeUID( ::fwAtoms::Object::dynamicCast( elem ) );
-                break;
-            }
-            default :
-                break;
+                case ::fwAtoms::Base::SEQUENCE:
+                {
+                    changeSeqUID( ::fwAtoms::Sequence::dynamicCast( elem ) );
+                    break;
+                }
+                case ::fwAtoms::Base::MAP:
+                {
+                    changeMapUID( ::fwAtoms::Map::dynamicCast( elem ) );
+                    break;
+                }
+                case ::fwAtoms::Base::OBJECT:
+                {
+                    changeUID( ::fwAtoms::Object::dynamicCast( elem ) );
+                    break;
+                }
+                default:
+                    break;
             }
         }
     }
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/infos/Logger.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/infos/Logger.cpp
index 6cba854..15fa880 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/infos/Logger.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/infos/Logger.cpp
@@ -1,81 +1,126 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwAtomsPatch/infos/Logger.hpp"
+
+#ifndef ANDROID
+#include <fwRuntime/profile/Profile.hpp>
+#include <fwTools/Os.hpp>
+
+#include <boost/filesystem.hpp>
 #include <boost/log/attributes.hpp>
 #include <boost/log/expressions.hpp>
+#include <boost/log/expressions/formatters/date_time.hpp>
+#include <boost/log/keywords/channel.hpp>
+#include <boost/log/sinks.hpp>
 #include <boost/log/sources/channel_logger.hpp>
+#include <boost/log/sources/global_logger_storage.hpp>
+#include <boost/log/support/date_time.hpp>
 #include <boost/log/trivial.hpp>
-#include <boost/log/sinks.hpp>
-#include <boost/parameter/keyword.hpp>
-#include <boost/log/keywords/channel.hpp>
 #include <boost/log/utility/setup/common_attributes.hpp>
-#include <boost/log/sources/global_logger_storage.hpp>
 #include <boost/log/utility/setup/file.hpp>
-#include <boost/log/expressions/formatters/date_time.hpp>
-#include <boost/log/support/date_time.hpp>
+#include <boost/parameter/keyword.hpp>
+#else
+#include <android/log.h>
+#endif
 
-#include "fwAtomsPatch/infos/Logger.hpp"
 
 namespace fwAtomsPatch
 {
 namespace infos
 {
 
-Logger::StreamPtrType Logger::s_stream = ::boost::make_shared< Logger::StreamType >();
-Logger Logger::s_logger;
+#ifndef ANDROID
 
 BOOST_LOG_GLOBAL_LOGGER(lg_channel,
                         ::boost::log::sources::channel_logger<std::string>);
 
 BOOST_LOG_GLOBAL_LOGGER_CTOR_ARGS(lg_channel,
                                   ::boost::log::sources::channel_logger_mt<std::string>,
-                                   (std::string("patch")));
+                                  (std::string("patch")));
 
+Logger::StreamPtrType Logger::s_stream = ::boost::make_shared< Logger::StreamType >();
+
+#else
+#define  LOG_TAG    "Logger"
+#define  LOGSTREAM(...)  __android_log_print(ANDROID_LOG_INFO,  LOG_TAG, __VA_ARGS__)
+
+Logger::StreamPtrType Logger::s_stream;
+
+#endif
+
+Logger Logger::s_logger;
 
 Logger::Logger()
 {
-    namespace expr = ::boost::log::expressions;
+
+#ifndef ANDROID
+    namespace expr     = ::boost::log::expressions;
     namespace keywords = ::boost::log::keywords;
 
+
+    namespace bfile = ::boost::filesystem;
+
+    //Create PATCH.log in a user data dir nammed fw4spl/appName/
+    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
+
+    //default name of application with no profile.xml
+    std::string appName = "default";
+
+    if(profile)
+    {
+        appName = profile->getName();
+    }
+
+    const bfile::path appPrefDir = ::fwTools::os::getUserDataDir("fw4spl", appName, true);
+
+    FW_RAISE_IF("Unable to define User's data directory", appPrefDir.empty());
+
+    if (!bfile::exists(appPrefDir))
+    {
+        bfile::create_directories(appPrefDir);
+    }
+
     ::boost::log::add_file_log (
-                // file name pattern
-                keywords::file_name = "PATCH.log",
-                // rotate files every 10 MiB...
-                keywords::rotation_size = 10 * 1024 * 1024,
-                // ...or at midnight
-                keywords::time_based_rotation = ::boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
-                // log record format
-                keywords::format = (
-                        expr::stream
-                        << "[" << expr::format_date_time< ::boost::posix_time::ptime >("TimeStamp", "%d.%m.%Y %H:%M:%S.%f")
-                        << "][" << expr::format_date_time< ::boost::posix_time::ptime >("Uptime", "%H:%M:%S.%f")
-                        << "][" << expr::attr< std::string >("Channel")
-                        << "] " << expr::smessage
-                ),
-                // auto-flush feature of the backend
-                keywords::auto_flush = true,
-                keywords::filter = (expr::attr< std::string >("Channel") == "patch")
-    );
+        // file name pattern
+        keywords::file_name = appPrefDir.string() + "/PATCH.log",
+        // rotate files every 10 MiB...
+        keywords::rotation_size = 10 * 1024 * 1024,
+        // ...or at midnight
+        keywords::time_based_rotation = ::boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
+        // log record format
+        keywords::format = (
+            expr::stream
+            << "[" << expr::format_date_time< ::boost::posix_time::ptime >("TimeStamp", "%d.%m.%Y %H:%M:%S.%f")
+            << "][" << expr::format_date_time< ::boost::posix_time::ptime >("Uptime", "%H:%M:%S.%f")
+            << "][" << expr::attr< std::string >("Channel")
+            << "] " << expr::smessage
+            ),
+        // auto-flush feature of the backend
+        keywords::auto_flush = true,
+        keywords::filter = (expr::attr< std::string >("Channel") == "patch")
+        );
 
     // Construct the sink
     typedef ::boost::log::sinks::synchronous_sink< ::boost::log::sinks::text_ostream_backend > text_sink;
-    boost::shared_ptr< text_sink > pSink = boost::make_shared< text_sink >();
+    ::boost::shared_ptr< text_sink > pSink = ::boost::make_shared< text_sink >();
 
     // Add a stream to write log to
     pSink->locked_backend()->add_stream(s_stream);
 
     // Register the sink in the logging core
     ::boost::log::core::get()->add_sink(pSink);
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 Logger::~Logger()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
@@ -88,49 +133,77 @@ Logger::StreamPtrType Logger::getStream()
 
 void Logger::error(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "PATCH_ERROR" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 void Logger::badCast(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "BADCAST" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 void Logger::outOfRange(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "OUTOFRANGE" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 void Logger::info(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "INFO" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 void Logger::addAttribute(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "ADD_ATTR" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 void Logger::eraseAttribute(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "ERASE_ATTR" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
 
 void Logger::replaceAttribute(const std::string& message)
 {
+#ifndef ANDROID
     BOOST_LOG_STREAM(lg_channel::get()) << "REPLACE_ATTR" << ": " << message;
+#else
+    LOGSTREAM("BADCAST: %s", message.c_str());
+#endif
 }
 
 // ----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/DefaultPatcher.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/DefaultPatcher.cpp
index 3eead31..171098f 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/DefaultPatcher.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/DefaultPatcher.cpp
@@ -1,25 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
 
-#include <fwAtoms/Numeric.hpp>
-#include <fwAtoms/Numeric.hxx>
-
-#include "fwAtomsPatch/infos/log.hpp"
-#include "fwAtomsPatch/types.hpp"
 #include "fwAtomsPatch/helper/functions.hpp"
-#include "fwAtomsPatch/VersionsManager.hpp"
+#include "fwAtomsPatch/infos/log.hpp"
 #include "fwAtomsPatch/IPatch.hpp"
-#include "fwAtomsPatch/IStructuralPatch.hpp"
-#include "fwAtomsPatch/StructuralPatchDB.hpp"
 #include "fwAtomsPatch/ISemanticPatch.hpp"
-#include "fwAtomsPatch/SemanticPatchDB.hpp"
-#include "fwAtomsPatch/patcher/registry/macros.hpp"
+#include "fwAtomsPatch/IStructuralPatch.hpp"
 #include "fwAtomsPatch/patcher/DefaultPatcher.hpp"
+#include "fwAtomsPatch/patcher/registry/macros.hpp"
+#include "fwAtomsPatch/SemanticPatchDB.hpp"
+#include "fwAtomsPatch/StructuralPatchDB.hpp"
+#include "fwAtomsPatch/types.hpp"
+#include "fwAtomsPatch/VersionDescriptor.hpp"
+#include "fwAtomsPatch/VersionsManager.hpp"
+
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+
 
 namespace fwAtomsPatch
 {
@@ -42,20 +43,20 @@ DefaultPatcher::~DefaultPatcher()
 //----------------------------------------------------------------------------
 
 ::fwAtoms::Object::sptr DefaultPatcher::transformObject(::fwAtoms::Object::sptr object,
-        const std::string &context,
-        const std::string &currentVersion,
-        const std::string &targetVersion)
+                                                        const std::string &context,
+                                                        const std::string &currentVersion,
+                                                        const std::string &targetVersion)
 {
-    m_object = object;
-    m_context = context;
-    m_versionsGraph = ::fwAtomsPatch::VersionsManager::getDefault()->getGraph(context);
+    m_object         = object;
+    m_context        = context;
+    m_versionsGraph  = ::fwAtomsPatch::VersionsManager::getDefault()->getGraph(context);
     m_currentVersion = m_versionsGraph->getNode(currentVersion);
-    m_targetVersion = m_versionsGraph->getNode(targetVersion);
+    m_targetVersion  = m_versionsGraph->getNode(targetVersion);
 
     fwAtomsPatchInfoLogMacro("Transform from version '"
-            + m_versionsGraph->getNode(m_currentVersion).getVersionName() + "' to '"
-            + m_versionsGraph->getNode(m_targetVersion).getVersionName() + "' in context '"
-            + m_context + "'");
+                             + m_versionsGraph->getNode(m_currentVersion).getVersionName() + "' to '"
+                             + m_versionsGraph->getNode(m_targetVersion).getVersionName() + "' in context '"
+                             + m_context + "'");
     fwAtomsPatchInfoLogMacro("Begin structural pass");
 
     // Structural
@@ -68,7 +69,7 @@ DefaultPatcher::~DefaultPatcher()
     // Contextual
     fwAtomsPatchInfoLogMacro("Begin contextual pass");
     m_cache.clear();
-    m_pass = Contextual;
+    m_pass                      = Contextual;
     ::fwAtoms::Object::sptr obj = this->processContextualObject(m_object);
     fwAtomsPatchInfoLogMacro("End contextual pass");
 
@@ -89,19 +90,23 @@ DefaultPatcher::~DefaultPatcher()
 
         // Cache update
         m_cache[current->getMetaInfo( ::fwAtomsPatch::s_OBJ_ID )] = newAtomObject;
-        m_newVersions[current] = newAtomObject;
+        m_newVersions[current]                                    = newAtomObject;
 
         // Set id
         newAtomObject->setMetaInfo( ::fwAtomsPatch::s_OBJ_ID,
-                current->getMetaInfo( ::fwAtomsPatch::s_OBJ_ID ));
+                                    current->getMetaInfo( ::fwAtomsPatch::s_OBJ_ID ));
 
         // Set meta Info
         newAtomObject->setMetaInfos(current->getMetaInfos());
 
         // Fetch all attributes and affect them in the new object.
-        BOOST_FOREACH( ::fwAtoms::Object::AttributesType::value_type elem, current->getAttributes() )
+        for( ::fwAtoms::Object::AttributesType::value_type elem :  current->getAttributes() )
         {
-            newAtomObject->setAttribute(elem.first, processBase(elem.second));
+            ::fwAtoms::Base::sptr obj = this->processBase(elem.second);
+            if(this->isKnown(obj))
+            {
+                newAtomObject->setAttribute(elem.first, obj);
+            }
         }
 
         return this->applyStructuralPatch(current, newAtomObject);
@@ -126,14 +131,14 @@ DefaultPatcher::~DefaultPatcher()
         m_cache[current->getMetaInfo( ::fwAtomsPatch::s_OBJ_ID )] = m_newVersions[current];
 
         // Fetch all attributes and affect them in the new object.
-        BOOST_FOREACH( ::fwAtoms::Object::AttributesType::value_type elem, current->getAttributes() )
+        for( ::fwAtoms::Object::AttributesType::value_type elem :  current->getAttributes() )
         {
             if ( elem.second )
             {
                 if(elem.second->isObject())
                 {
                     ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::dynamicCast(elem.second);
-                    m_newVersions[obj] = this->processContextualObject(obj);
+                    m_newVersions[obj]          = this->processContextualObject(obj);
                 }
                 else
                 {
@@ -157,7 +162,7 @@ DefaultPatcher::~DefaultPatcher()
 {
     ::fwAtoms::Base::sptr newBase;
 
-    if ( ! base )
+    if ( !base )
     {
         return newBase;
     }
@@ -177,12 +182,12 @@ DefaultPatcher::~DefaultPatcher()
     else if(base->isSequence())
     {
         ::fwAtoms::Sequence::sptr seq = ::fwAtoms::Sequence::dynamicCast(base);
-        newBase = this->processSequence(seq);
+        newBase                       = this->processSequence(seq);
     }
     else if(base->isMapping())
     {
         ::fwAtoms::Map::sptr map = ::fwAtoms::Map::dynamicCast(base);
-        newBase = this->processMapping(map);
+        newBase                  = this->processMapping(map);
     }
     else if(base->isString())
     {
@@ -199,7 +204,7 @@ DefaultPatcher::~DefaultPatcher()
     else if(base->isBlob())
     {
         ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::dynamicCast(base);
-        newBase = ::fwAtoms::Blob::New(blob->getBufferObject());
+        newBase                    = ::fwAtoms::Blob::New(blob->getBufferObject());
     }
 
 
@@ -216,12 +221,16 @@ DefaultPatcher::~DefaultPatcher()
     std::string key;
     ::fwAtoms::Base::sptr value;
 
-    BOOST_FOREACH( ::fwAtoms::Map::MapType::value_type elem, map->getValue() )
+    for( ::fwAtoms::Map::MapType::value_type elem :  map->getValue() )
     {
-        key = elem.first;
+        key   = elem.first;
         value = elem.second;
 
-        newMap->insert( key, this->processBase(value) );
+        ::fwAtoms::Base::sptr obj = this->processBase(value);
+        if (this->isKnown(obj))
+        {
+            newMap->insert( key,  obj);
+        }
     }
 
     return newMap;
@@ -234,9 +243,13 @@ DefaultPatcher::~DefaultPatcher()
     ::fwAtoms::Sequence::sptr newSeq = ::fwAtoms::Sequence::New();
 
     // Fetch all attributes and affect them in the new object
-    BOOST_FOREACH( ::fwAtoms::Base::sptr elem, seq->getValue() )
+    for( ::fwAtoms::Base::sptr elem :  seq->getValue() )
     {
-        newSeq->push_back(this->processBase(elem));
+        ::fwAtoms::Base::sptr obj = this->processBase(elem);
+        if (this->isKnown(obj))
+        {
+            newSeq->push_back(obj);
+        }
     }
 
     return newSeq;
@@ -245,7 +258,7 @@ DefaultPatcher::~DefaultPatcher()
 //----------------------------------------------------------------------------
 
 ::fwAtoms::Object::sptr DefaultPatcher::applyStructuralPatch(
-        ::fwAtoms::Object::sptr previous, ::fwAtoms::Object::sptr current)
+    ::fwAtoms::Object::sptr previous, ::fwAtoms::Object::sptr current)
 {
     if(previous)
     {
@@ -253,24 +266,24 @@ DefaultPatcher::~DefaultPatcher()
         fwAtomsPatch::LinkDescriptor::VersionIDType currentInfos;
         bool success;
         const std::string& classname = ::fwAtomsPatch::helper::getClassname(current);
-        const std::string& version = ::fwAtomsPatch::helper::getVersion(current);
+        const std::string& version   = ::fwAtomsPatch::helper::getVersion(current);
 
         ::boost::tie(currentInfos,success) = m_versionsGraph->getLinkedVersion(
-                m_currentVersion, m_targetVersion,
-                std::make_pair(classname, version) );
+            m_currentVersion, m_targetVersion,
+            std::make_pair(classname, version) );
 
         if(success)
         {
             // Get patch
             ::fwAtomsPatch::IStructuralPatch::sptr patch = ::fwAtomsPatch::StructuralPatchDB::getDefault()->getPatch(
-                    classname, version, currentInfos.first, currentInfos.second);
+                classname, version, currentInfos.first, currentInfos.second);
 
             if(patch)
             {
                 OSLM_TRACE("[SP] " << classname);
                 fwAtomsPatchInfoLogMacro("Apply structural patch to transform '" + classname
-                                                                + "|" + version + "' to '"
-                                  + currentInfos.first + "|" + currentInfos.second + "'");
+                                         + "|" + version + "' to '"
+                                         + currentInfos.first + "|" + currentInfos.second + "'");
                 // Applying a patch on current (the current object is modified)
                 patch->apply(previous, current, m_newVersions);
                 fwAtomsPatchInfoLogMacro("End structural patch");
@@ -278,7 +291,7 @@ DefaultPatcher::~DefaultPatcher()
             else
             {
                 fwAtomsPatchInfoLogMacro("Move object '" + classname + "|" + version + "' to '"
-                               + currentInfos.first + "|" + currentInfos.second + "'");
+                                         + currentInfos.first + "|" + currentInfos.second + "'");
                 ::fwAtomsPatch::helper::setClassname(current, currentInfos.first);
                 ::fwAtomsPatch::helper::setVersion(current, currentInfos.second);
             }
@@ -286,7 +299,7 @@ DefaultPatcher::~DefaultPatcher()
         else
         {
             fwAtomsPatchErrorLogMacro("No linked version found for object '" + classname
-                                                             + "' with version '" + version + "'");
+                                      + "' with version '" + version + "'");
         }
     }
 
@@ -296,28 +309,28 @@ DefaultPatcher::~DefaultPatcher()
 //----------------------------------------------------------------------------
 
 ::fwAtoms::Object::sptr DefaultPatcher::applyContextualPatch(
-        ::fwAtoms::Object::sptr previous, ::fwAtoms::Object::sptr current)
+    ::fwAtoms::Object::sptr previous, ::fwAtoms::Object::sptr current)
 {
     if(previous)
     {
         const std::string currentName = m_versionsGraph->getNode(m_currentVersion).getVersionName();
-        const std::string targetName = m_versionsGraph->getNode(m_targetVersion).getVersionName();
+        const std::string targetName  = m_versionsGraph->getNode(m_targetVersion).getVersionName();
 
         // Get patch
         ::fwAtomsPatch::SemanticPatchDB::sptr contextDB = ::fwAtomsPatch::SemanticPatchDB::getDefault();
-        ::fwAtomsPatch::ISemanticPatch::sptr patch =
-                contextDB->getPatch(m_context, currentName, targetName,
-                         ::fwAtomsPatch::helper::getClassname(previous),
-                         ::fwAtomsPatch::helper::getVersion(previous));
+        ::fwAtomsPatch::ISemanticPatch::sptr patch      =
+            contextDB->getPatch(m_context, currentName, targetName,
+                                ::fwAtomsPatch::helper::getClassname(previous),
+                                ::fwAtomsPatch::helper::getVersion(previous));
 
         if(patch)
         {
             OSLM_TRACE("[CP] " << ::fwAtomsPatch::helper::getClassname(current));
             fwAtomsPatchInfoLogMacro("Apply contextual patch to transform '"
-                    + ::fwAtomsPatch::helper::getClassname(previous)
-                    + "|" + ::fwAtomsPatch::helper::getVersion(previous) + "' to '"
-                    + ::fwAtomsPatch::helper::getClassname(current)
-                    + "|" + ::fwAtomsPatch::helper::getVersion(current) + "'");
+                                     + ::fwAtomsPatch::helper::getClassname(previous)
+                                     + "|" + ::fwAtomsPatch::helper::getVersion(previous) + "' to '"
+                                     + ::fwAtomsPatch::helper::getClassname(current)
+                                     + "|" + ::fwAtomsPatch::helper::getVersion(current) + "'");
 
             // Applying a patch on current (the current object is modified)
             patch->apply(previous, current, m_newVersions);
@@ -328,6 +341,33 @@ DefaultPatcher::~DefaultPatcher()
     return current;
 }
 
+//  ----------------------------------------------------------------------------
+
+bool DefaultPatcher::isKnown(const ::fwAtoms::Base::sptr& base)
+{
+    bool isKnown                             = false;
+    VersionsGraph::NodeType target           = m_versionsGraph->getNode(m_targetVersion);
+    VersionDescriptor::VersionsType versions = target.getVersions();
+    ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::dynamicCast(base);
+
+    if (!obj)
+    {
+        isKnown = true;
+    }
+    else
+    {
+        std::string classname = obj->getMetaInfo(::fwAtomsPatch::s_OBJ_CLASSNAME);
+
+        if (classname.empty() || versions.find(classname) != versions.end())
+        {
+            isKnown = true;
+        }
+    }
+    return isKnown;
+}
+
+//  ----------------------------------------------------------------------------
+
 } //  namespace patcher
 
 } //  namespace fwAtomsPatch
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/IPatcher.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/IPatcher.cpp
index c1f2625..b05949d 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/IPatcher.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/IPatcher.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/factory/new.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/factory/new.cpp
index c0d7713..fbb64ff 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/factory/new.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/registry/detail.cpp b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/registry/detail.cpp
index 0511785..88f06dd 100644
--- a/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/registry/detail.cpp
+++ b/SrcLib/core/fwAtomsPatch/src/fwAtomsPatch/patcher/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,7 +18,7 @@ namespace patcher
 namespace registry
 {
 
-struct FwDataRegistryInstantiatorTag {} ;
+struct FwDataRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwCamp/CMakeLists.txt b/SrcLib/core/fwCamp/CMakeLists.txt
index 7c3708f..2dbd0bb 100644
--- a/SrcLib/core/fwCamp/CMakeLists.txt
+++ b/SrcLib/core/fwCamp/CMakeLists.txt
@@ -1,14 +1,9 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
-find_package (CAMP REQUIRED)
+find_package(CAMP REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS}
     ${CAMP_INCLUDE_DIR}
-    )
-fwLink(
-    ${CAMP_LIBRARIES}
-    )
+)
+
+fwForwardLink(${CAMP_LIBRARIES})
 
diff --git a/SrcLib/core/fwCamp/bin/build.options b/SrcLib/core/fwCamp/bin/build.options
deleted file mode 100644
index 77addec..0000000
--- a/SrcLib/core/fwCamp/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-
-USE = ['boost', 'camp']
-LIB = [
-        'fwCore_0-1',
-      ]
diff --git a/SrcLib/core/fwCamp/include/fwCamp/Mapper/ArrayMapper.hpp b/SrcLib/core/fwCamp/include/fwCamp/Mapper/ArrayMapper.hpp
index c50fc40..fdce052 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/Mapper/ArrayMapper.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/Mapper/ArrayMapper.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -36,7 +36,7 @@ struct ArrayMapper<std::set<T> >
     static const T& get(const std::set<T>& arr, std::size_t index)
     {
         typename std::set<T>::const_iterator cIt = arr.begin();
-        for(int i =0;i < index; i++)
+        for(int i = 0; i < index; i++)
         {
             ++cIt;
         }
@@ -55,7 +55,7 @@ struct ArrayMapper<std::set<T> >
     static void remove(std::set<T>& arr, std::size_t index)
     {
         typename std::set<T>::const_iterator cIt = arr.begin();
-        for(int i =0;i < index; ++i)
+        for(int i = 0; i < index; ++i)
         {
             ++cIt;
         }
diff --git a/SrcLib/core/fwCamp/include/fwCamp/Mapper/ValueMapper.hpp b/SrcLib/core/fwCamp/include/fwCamp/Mapper/ValueMapper.hpp
index 3b56ceb..ba66b78 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/Mapper/ValueMapper.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/Mapper/ValueMapper.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCAMP_VALUEMAPPER_HPP__
-#define __FWCAMP_VALUEMAPPER_HPP__
+#ifndef __FWCAMP_MAPPER_VALUEMAPPER_HPP__
+#define __FWCAMP_MAPPER_VALUEMAPPER_HPP__
 
 #include <boost/lexical_cast.hpp>
 #include <boost/filesystem/path.hpp>
@@ -106,7 +106,7 @@ struct ValueMapper< ::boost::logic::tribool>
     template <typename T>
     static ::boost::logic::tribool from(const T& source)
     {
-        return wrapperTribbol<T>::get(source);;
+        return wrapperTribbol<T>::get(source);
     }
 };
 
@@ -122,11 +122,26 @@ struct ValueMapper< ::boost::posix_time::ptime >
         return boost::posix_time::to_simple_string(source);
     }
 
-    static ReturnType from(bool source)                    {CAMP_ERROR(camp::BadType(camp::boolType, camp::mapType<ReturnType>()));}
-    static ReturnType from(long source)                    {CAMP_ERROR(camp::BadType(camp::intType, camp::mapType<ReturnType>()));}
-    static ReturnType from(double source)                  {CAMP_ERROR(camp::BadType(camp::realType, camp::mapType<ReturnType>()));}
-    static ReturnType from(const camp::EnumObject& source) {CAMP_ERROR(camp::BadType(camp::enumType, camp::mapType<ReturnType>()));}
-    static ReturnType from(const camp::UserObject& source) {CAMP_ERROR(camp::BadType(camp::userType, camp::mapType<ReturnType>()));}
+    static ReturnType from(bool source)
+    {
+        CAMP_ERROR(camp::BadType(camp::boolType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(long source)
+    {
+        CAMP_ERROR(camp::BadType(camp::intType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(double source)
+    {
+        CAMP_ERROR(camp::BadType(camp::realType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(const camp::EnumObject& source)
+    {
+        CAMP_ERROR(camp::BadType(camp::enumType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(const camp::UserObject& source)
+    {
+        CAMP_ERROR(camp::BadType(camp::userType, camp::mapType<ReturnType>()));
+    }
     static ReturnType from(const std::string& source)
     {
         return boost::posix_time::time_from_string(source);
@@ -182,29 +197,44 @@ struct ValueMapper<unsigned char>
     static const int type = camp::stringType;
     static std::string to(unsigned char source)
     {
-        unsigned int intValue = boost::numeric_cast<unsigned int>(source);;
+        unsigned int intValue = boost::numeric_cast<unsigned int>(source);
 
         return boost::lexical_cast<std::string>(intValue);
     }
 
-    static unsigned char from(bool source)                    {return static_cast<unsigned char>(source);}
-    static unsigned char from(long source)                    {return static_cast<unsigned char>(source);}
-    static unsigned char from(double source)                  {return static_cast<unsigned char>(source);}
+    static unsigned char from(bool source)
+    {
+        return static_cast<unsigned char>(source);
+    }
+    static unsigned char from(long source)
+    {
+        return static_cast<unsigned char>(source);
+    }
+    static unsigned char from(double source)
+    {
+        return static_cast<unsigned char>(source);
+    }
     static unsigned char from(const std::string& source)
     {
         unsigned int intValue = boost::lexical_cast<unsigned int>(source);
         return boost::numeric_cast<unsigned char>(intValue);
     }
-    static unsigned char from(const camp::EnumObject& source) {return static_cast<unsigned char>(source.value());}
-    static unsigned char from(const camp::UserObject&)        {CAMP_ERROR(camp::BadType(camp::userType, camp::realType));}
+    static unsigned char from(const camp::EnumObject& source)
+    {
+        return static_cast<unsigned char>(source.value());
+    }
+    static unsigned char from(const camp::UserObject&)
+    {
+        CAMP_ERROR(camp::BadType(camp::userType, camp::realType));
+    }
 };
 
 //-----------------------------------------------------------------------------
 
 template <typename T>
-struct ValueMapper<boost::shared_ptr<T> >
+struct ValueMapper<std::shared_ptr<T> >
 {
-    typedef boost::shared_ptr<T> ReturnType;
+    typedef std::shared_ptr<T> ReturnType;
     static const int type = camp::userType;
     static const camp::UserObject to(const ReturnType& source)
     {
@@ -241,7 +271,7 @@ struct ValueMapper<boost::shared_ptr<T> >
         }
         catch(...)
         {
-            boost::shared_ptr<T> tmp;
+            std::shared_ptr<T> tmp;
             return tmp;
         }
         return result;
@@ -249,5 +279,5 @@ struct ValueMapper<boost::shared_ptr<T> >
 };
 }  // namespace camp_ext
 
-#endif /* __FWCAMP_VALUEMAPPER_HPP__ */
+#endif /* __FWCAMP_MAPPER_VALUEMAPPER_HPP__ */
 
diff --git a/SrcLib/core/fwCamp/include/fwCamp/UserObject.hpp b/SrcLib/core/fwCamp/include/fwCamp/UserObject.hpp
index a42de0d..bdaeec6 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/UserObject.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/UserObject.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -34,4 +34,5 @@ struct UserObjectRegistrar
 
 }
 
-#endif
+#endif //__FWCAMP_USEROBJECT_HPP__
+
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/ExtendedClassVisitor.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/ExtendedClassVisitor.hpp
index 64bf6e2..6af1dc8 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/ExtendedClassVisitor.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/ExtendedClassVisitor.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,15 +18,35 @@ class FWCAMP_CLASS_API ExtendedClassVisitor : public ClassVisitor
 {
 public:
 
-    virtual void visit(const Property& property){ClassVisitor::visit(property);};
-    virtual void visit(const SimpleProperty& property){ClassVisitor::visit(property);};
-    virtual void visit(const ArrayProperty& property){ClassVisitor::visit(property);};
-    virtual void visit(const EnumProperty& property){ClassVisitor::visit(property);};
-    virtual void visit(const UserProperty& property){ClassVisitor::visit(property);};
-    virtual void visit(const Function& function){ClassVisitor::visit(function);};
-
-
-    FWCAMP_API virtual void visit(const MapProperty& property){}
+    virtual void visit(const Property& property)
+    {
+        ClassVisitor::visit(property);
+    }
+    virtual void visit(const SimpleProperty& property)
+    {
+        ClassVisitor::visit(property);
+    }
+    virtual void visit(const ArrayProperty& property)
+    {
+        ClassVisitor::visit(property);
+    }
+    virtual void visit(const EnumProperty& property)
+    {
+        ClassVisitor::visit(property);
+    }
+    virtual void visit(const UserProperty& property)
+    {
+        ClassVisitor::visit(property);
+    }
+    virtual void visit(const Function& function)
+    {
+        ClassVisitor::visit(function);
+    }
+
+
+    FWCAMP_API virtual void visit(const MapProperty& property)
+    {
+    }
 
 
 };
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/MapMapper.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/MapMapper.hpp
index aba90bb..8818915 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/MapMapper.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/MapMapper.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,30 +19,30 @@ struct MapMapper
 };
 
 template <typename MAP>
-struct MapMapper< MAP , typename boost::enable_if_c<camp::isMapping<MAP>::value>::type >
+struct MapMapper< MAP, typename boost::enable_if_c<camp::isMapping<MAP>::value>::type >
 {
-   typedef MAP MapType;
-   typedef typename MapType::value_type ValueType;
-   typedef typename MapType::key_type KeyType;
-   typedef typename MapType::mapped_type MappedType;
-
-
-   static std::size_t size(const MapType& map)
-   {
-       return map.size();
-   }
-
-   static const ValueType& get(const MapType& map, std::size_t index)
-   {
-       typename MapType::const_iterator it = map.begin();
-       std::advance(it, index);
-       return *it;
-   }
-
-   static void set(MapType& map, const KeyType & key, const MappedType& value)
-   {
-       map[key] = value;
-   }
+    typedef MAP MapType;
+    typedef typename MapType::value_type ValueType;
+    typedef typename MapType::key_type KeyType;
+    typedef typename MapType::mapped_type MappedType;
+
+
+    static std::size_t size(const MapType& map)
+    {
+        return map.size();
+    }
+
+    static const ValueType& get(const MapType& map, std::size_t index)
+    {
+        typename MapType::const_iterator it = map.begin();
+        std::advance(it, index);
+        return *it;
+    }
+
+    static void set(MapType& map, const KeyType & key, const MappedType& value)
+    {
+        map[key] = value;
+    }
 };
 
 }  // namespace camp_ext
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/MapProperty.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/MapProperty.hpp
index 8d3ec53..c42650c 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/MapProperty.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/MapProperty.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/MapValueMapper.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/MapValueMapper.hpp
index 85f790e..dda6df3 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/MapValueMapper.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/MapValueMapper.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/customtype.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/customtype.hpp
index b0ac780..cf3624f 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/customtype.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/customtype.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCAMP_CAMP_TYPE_HPP__
-#define __FWCAMP_CAMP_TYPE_HPP__
+#ifndef __FWCAMP_CAMP_CUSTOMTYPE_HPP__
+#define __FWCAMP_CAMP_CUSTOMTYPE_HPP__
 
 namespace camp
 {
@@ -18,4 +18,4 @@ enum CustomType
 
 } //camp
 
-#endif /* __FWCAMP_CAMP_TYPE_HPP__ */
+#endif /* __FWCAMP_CAMP_CUSTOMTYPE_HPP__ */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hpp
index 12bd72f..4c40bcf 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCAMP_CAMP_MAPPROPERTYIMPL_HPP__
-#define __FWCAMP_CAMP_MAPPROPERTYIMPL_HPP__
+#ifndef __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HPP__
+#define __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HPP__
 
 #include "fwCamp/camp/MapValueMapper.hpp"
 #include "fwCamp/camp/MapMapper.hpp"
@@ -67,4 +67,4 @@ private:
 
 #include "fwCamp/camp/detail/MapPropertyImpl.hxx"
 
-#endif /* __FWCAMP_CAMP_MAPPROPERTYIMPL_HPP__ */
+#endif /* __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HPP__ */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx b/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx
index c2824e7..5617f7e 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/detail/MapPropertyImpl.hxx
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCAMP_CAMP_MAPPROPERTYIMPL_HXX__
-#define __FWCAMP_CAMP_MAPPROPERTYIMPL_HXX__
+#ifndef __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HXX__
+#define __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HXX__
 
 #include <camp/userobject.hpp>
 
@@ -20,7 +20,7 @@ namespace detail
 template <typename A>
 MapPropertyImpl<A>::MapPropertyImpl(const std::string& name, const A& accessor) :
     camp::MapProperty(name, camp::mapType<ValueType>())
-   ,m_accessor(accessor)
+    ,m_accessor(accessor)
 {
 }
 
@@ -32,10 +32,10 @@ std::size_t MapPropertyImpl<A>::getSize(const UserObject& object) const
 template <typename A>
 void MapPropertyImpl<A>::set(const UserObject& object, const Value& key, const Value& value) const
 {
-    const typename Mapper::KeyType& typedKey = key.to< typename Mapper::KeyType >();
+    const typename Mapper::KeyType& typedKey      = key.to< typename Mapper::KeyType >();
     const typename Mapper::MappedType& typedValue = value.to< typename Mapper::MappedType >();
 
-    Mapper::set(map(object), typedKey  ,typedValue );
+    Mapper::set(map(object), typedKey,typedValue );
 }
 
 
@@ -49,7 +49,7 @@ MapProperty::ValuePair MapPropertyImpl<A>::getElement(const UserObject& object,
 
 template <typename A>
 typename MapPropertyImpl<A>::MapType&
-MapPropertyImpl<A>::map(const UserObject& object) const
+MapPropertyImpl<A>::map(const UserObject &object) const
 {
     return m_accessor.get(object.get<typename A::ClassType>());
 }
@@ -67,4 +67,4 @@ struct PropertyMapper<A, camp::mappingType>
 } // namespace detail
 } // namespace camp
 
-#endif /* __FWCAMP_CAMP_MAPPROPERTYIMPL_HXX__*/
+#endif /* __FWCAMP_CAMP_DETAIL_MAPPROPERTYIMPL_HXX__*/
diff --git a/SrcLib/core/fwCamp/include/fwCamp/camp/traits.hpp b/SrcLib/core/fwCamp/include/fwCamp/camp/traits.hpp
index 81287a5..c6a4b72 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/camp/traits.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/camp/traits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,9 +24,9 @@ struct isMapping
     template <typename U> static camp::detail::TypeYes checkSptr(...);
 
     enum {value = (
-            sizeof(check< T >(0)) == sizeof(camp::detail::TypeYes)
-            && sizeof(checkSptr< T >(0)) == sizeof(camp::detail::TypeYes)
-            )  };
+              sizeof(check< T >(0)) == sizeof(camp::detail::TypeYes)
+              && sizeof(checkSptr< T >(0)) == sizeof(camp::detail::TypeYes)
+              )  };
 };
 
 
diff --git a/SrcLib/core/fwCamp/include/fwCamp/config.hpp b/SrcLib/core/fwCamp/include/fwCamp/config.hpp
deleted file mode 100644
index 8ac261d..0000000
--- a/SrcLib/core/fwCamp/include/fwCamp/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCAMP_CONFIG_HPP_
-#define _FWCAMP_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWCAMP_EXPORTS
-            #define FWCAMP_API __declspec(dllexport)
-        #else
-            #define FWCAMP_API __declspec(dllimport)
-        #endif
-
-        #define FWCAMP_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWCAMP_EXPORTS
-            #define FWCAMP_API __attribute__ ((visibility("default")))
-            #define FWCAMP_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWCAMP_API __attribute__ ((visibility("hidden")))
-            #define FWCAMP_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWCAMP_API
-        #define FWCAMP_CLASS_API
-
-    #endif
-
-#endif //FWCAMP_API
-
diff --git a/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp b/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp
index 60cebaa..d47da95 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwCamp
 /**
  * @brief       Contains fwCamp::factory utilities
  * @namespace   fwCamp::factory
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwCamp/include/fwCamp/factory/new.hpp b/SrcLib/core/fwCamp/include/fwCamp/factory/new.hpp
index 1083446..c50314f 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/factory/new.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwCore/macros.hpp>
 
@@ -25,7 +24,7 @@ FWCAMP_API SPTR( ::camp::UserObject ) New( const ::fwCamp::registry::KeyType & c
 
 template<class CLASSNAME > SPTR( ::camp::UserObject )  New(::fwTools::Object *object)
 {
-    SPTR(::camp::UserObject) obj = ::boost::make_shared< ::camp::UserObject >(*(dynamic_cast<CLASSNAME*>( object )));
+    SPTR(::camp::UserObject) obj = std::make_shared< ::camp::UserObject >(*(dynamic_cast<CLASSNAME*>( object )));
     return obj;
 }
 
diff --git a/SrcLib/core/fwCamp/include/fwCamp/macros.hpp b/SrcLib/core/fwCamp/include/fwCamp/macros.hpp
index 19a30b6..338dcca 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/macros.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCAMP__MACROS_HPP__
-#define __FWCAMP__MACROS_HPP__
+#ifndef __FWCAMP_MACROS_HPP__
+#define __FWCAMP_MACROS_HPP__
 
 #include <boost/preprocessor/seq/fold_left.hpp>
 
@@ -18,35 +18,37 @@
 #define __FWCAMP_CAT(_s_, _state_, _elem_) BOOST_PP_CAT(_state_, _elem_)
 #define __FWCAMP_NAMESPACE_CAT(_s_, _state_, _elem_) _state_::_elem_
 
-#define __FWCAMP_FUNC_SUFFIX(desc)\
+#define __FWCAMP_FUNC_SUFFIX(desc) \
     BOOST_PP_SEQ_FOLD_LEFT( __FWCAMP_CAT, BOOST_PP_SEQ_HEAD(desc), BOOST_PP_SEQ_TAIL(desc))
 
-#define __FWCAMP_NAMESPACE_NAME(desc)\
+#define __FWCAMP_NAMESPACE_NAME(desc) \
     ::BOOST_PP_SEQ_FOLD_LEFT( __FWCAMP_NAMESPACE_CAT, BOOST_PP_SEQ_HEAD(desc), BOOST_PP_SEQ_TAIL(desc))
 
 #define __FWCAMP_DECLARE_FUNC_NAME(desc)        BOOST_PP_CAT(fwCampDeclare, __FWCAMP_FUNC_SUFFIX(desc))
 #define __FWCAMP_DECLARE_LOCAL_FUNC_NAME(desc)  BOOST_PP_CAT(localDeclare, __FWCAMP_FUNC_SUFFIX(desc))
 
-#define __FWCAMP_CLASS_BUILDER_TYPE(desc)\
+#define __FWCAMP_CLASS_BUILDER_TYPE(desc) \
     camp::ClassBuilder< __FWCAMP_NAMESPACE_NAME(desc) >
 
-#define __FWCAMP_AUTO_TYPE_NONCOPYABLE(type, registerFunc)\
+#define __FWCAMP_AUTO_TYPE_NONCOPYABLE(type, registerFunc) \
     CAMP_TYPE_NONCOPYABLE( type)
 
 #define __FWCAMP__AUTO__DECLARE__MACRO(desc) \
-    void __FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &);\
+    void __FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &); \
     inline void __FWCAMP_DECLARE_LOCAL_FUNC_NAME(desc)() \
     { \
-        __FWCAMP_CLASS_BUILDER_TYPE(desc) builder = camp::Class::declare< __FWCAMP_NAMESPACE_NAME(desc) >(BOOST_PP_STRINGIZE( __FWCAMP_NAMESPACE_NAME(desc) ));\
-        __FWCAMP_DECLARE_FUNC_NAME(desc)(builder);\
+        __FWCAMP_CLASS_BUILDER_TYPE(desc) builder = \
+            camp::Class::declare< __FWCAMP_NAMESPACE_NAME(desc) >(BOOST_PP_STRINGIZE( __FWCAMP_NAMESPACE_NAME( \
+                                                                                          desc) )); \
+        __FWCAMP_DECLARE_FUNC_NAME(desc)(builder); \
     } \
     __FWCAMP_AUTO_TYPE_NONCOPYABLE(__FWCAMP_NAMESPACE_NAME(desc), __FWCAMP_DECLARE_LOCAL_FUNC_NAME(desc))
 
-#define __FWCAMP__REG_NAME(desc)\
-        BOOST_PP_CAT(__FWCAMP_FUNC_SUFFIX(desc), Reg)
+#define __FWCAMP__REG_NAME(desc) \
+    BOOST_PP_CAT(__FWCAMP_FUNC_SUFFIX(desc), Reg)
 
-#define __FWCAMP__USEROBJREG(desc)\
-        ::fwCamp::UserObjectRegistrar< __FWCAMP_NAMESPACE_NAME(desc)>
+#define __FWCAMP__USEROBJREG(desc) \
+    ::fwCamp::UserObjectRegistrar< __FWCAMP_NAMESPACE_NAME(desc)>
 //----------------------------------------------------------------------------
 
 
@@ -56,12 +58,12 @@
  * fwCampMakeFriendMacro((a)(b)(c)) expands to : Friend void ::fwCampDeclareabc(camp::ClassBuilder< ::a::b::c > &builder)
  */
 #define fwCampMakeFriendDataMacro(desc) \
-    friend void ::__FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &builder);\
+    friend void ::__FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &builder); \
 
 //----------------------------------------------------------------------------
 
 #define fwCampMakeFriendMacro(desc) \
-    friend void ::__FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &builder);\
+    friend void ::__FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &builder); \
 
 //----------------------------------------------------------------------------
 
@@ -70,18 +72,18 @@
 
 //----------------------------------------------------------------------------
 
-#define fwCampAutoDeclareDataMacro( desc , export) \
-    namespace fwCamp\
-    {\
-        template<typename T>\
-        struct UserObjectRegistrar;\
-    }\
+#define fwCampAutoDeclareDataMacro( desc, export) \
+    namespace fwCamp \
+    { \
+    template<typename T> \
+    struct UserObjectRegistrar; \
+    } \
     fwCorePredeclare(desc) \
     __FWCAMP__AUTO__DECLARE__MACRO(desc)
 
 //----------------------------------------------------------------------------
 
-#define fwCampAutoDeclareMacro( desc , export) \
+#define fwCampAutoDeclareMacro( desc, export) \
     fwCorePredeclare(desc) \
     export __FWCAMP__AUTO__DECLARE__MACRO(desc)
 
@@ -89,11 +91,12 @@
 
 
 #define fwCampAutoDeclareEnumMacro(desc) \
-    void __FWCAMP_DECLARE_FUNC_NAME(desc)(camp::EnumBuilder &);\
+    void __FWCAMP_DECLARE_FUNC_NAME(desc)(camp::EnumBuilder &); \
     inline void __FWCAMP_DECLARE_LOCAL_FUNC_NAME(desc)() \
     { \
-        camp::EnumBuilder builder = camp::Enum::declare< __FWCAMP_NAMESPACE_NAME(desc) >(BOOST_PP_STRINGIZE( __FWCAMP_NAMESPACE_NAME(desc) ));\
-        __FWCAMP_DECLARE_FUNC_NAME(desc)(builder);\
+        camp::EnumBuilder builder = \
+            camp::Enum::declare< __FWCAMP_NAMESPACE_NAME(desc) >(BOOST_PP_STRINGIZE( __FWCAMP_NAMESPACE_NAME(desc) )); \
+        __FWCAMP_DECLARE_FUNC_NAME(desc)(builder); \
     } \
     CAMP_TYPE(__FWCAMP_NAMESPACE_NAME(desc))
 
@@ -107,7 +110,7 @@
 
 
 #define fwCampImplementDataMacro(desc) \
-    static __FWCAMP__USEROBJREG(desc) __FWCAMP__REG_NAME(desc)(BOOST_PP_STRINGIZE( __FWCAMP_NAMESPACE_NAME(desc) ));\
+    static __FWCAMP__USEROBJREG(desc) __FWCAMP__REG_NAME(desc)(BOOST_PP_STRINGIZE( __FWCAMP_NAMESPACE_NAME(desc) )); \
     void __FWCAMP_DECLARE_FUNC_NAME(desc)(__FWCAMP_CLASS_BUILDER_TYPE(desc) &builder)
 
 //----------------------------------------------------------------------------
@@ -127,56 +130,56 @@
  * @param object the type of the main object ex: (fwData)(Mesh)
  * @param attribut the type of smart pointer attribut ex: (fwData)(Array)
  */
-#define fwCampDeclareAccessor(object, attribut)\
-namespace camp {\
-namespace detail {\
+#define fwCampDeclareAccessor(object, attribut) \
+    namespace camp { \
+    namespace detail { \
 \
-template <>\
-class Accessor1< __FWCAMP_NAMESPACE_NAME(object), SPTR( __FWCAMP_NAMESPACE_NAME(attribut) )& >\
-{\
-public:\
-    typedef SPTR( __FWCAMP_NAMESPACE_NAME(attribut) )& ReturnType ;\
-    typedef ObjectTraits< SPTR( __FWCAMP_NAMESPACE_NAME(attribut) )& > Traits;\
-    typedef Traits::DataType DataType;\
-    typedef __FWCAMP_NAMESPACE_NAME(object) ClassType;\
+    template <> \
+    class Accessor1< __FWCAMP_NAMESPACE_NAME(object), SPTR( __FWCAMP_NAMESPACE_NAME(attribut) )& > \
+    { \
+    public: \
+        typedef SPTR ( __FWCAMP_NAMESPACE_NAME (attribut) )& ReturnType; \
+        typedef ObjectTraits< SPTR( __FWCAMP_NAMESPACE_NAME(attribut) )& > Traits; \
+        typedef Traits::DataType DataType; \
+        typedef __FWCAMP_NAMESPACE_NAME (object) ClassType; \
 \
-    enum\
-    {\
-        canRead = true,\
-        canWrite = true\
-    };\
+        enum \
+        { \
+            canRead  = true, \
+            canWrite = true \
+        }; \
 \
-    template <typename F>\
-    Accessor1(F getter)\
-        : m_getter(getter)\
-    {\
-    }\
+        template <typename F> \
+        Accessor1(F getter) :              \
+            m_getter(getter) \
+        { \
+        } \
 \
-    ReturnHelper< ReturnType>::Type get(ClassType& objectptr) const\
-    {\
-        ReturnType ptr = m_getter(objectptr);\
-        return ReturnHelper< ReturnType>::get(ptr);\
-    }\
+        ReturnHelper< ReturnType>::Type get(ClassType& objectptr) const \
+        { \
+            ReturnType ptr = m_getter(objectptr); \
+            return ReturnHelper< ReturnType>::get(ptr); \
+        } \
 \
-    bool set(ClassType& objectptr, const Value& value) const\
-    {\
-        ReturnType ptr = m_getter(objectptr);\
-        ptr = __FWCAMP_NAMESPACE_NAME(attribut)::dynamicCast(value.to< DataType* >()->getSptr());\
-        return true;\
-    }\
+        bool set(ClassType& objectptr, const Value &value) const \
+        { \
+            ReturnType ptr = m_getter(objectptr); \
+            ptr = __FWCAMP_NAMESPACE_NAME(attribut) ::dynamicCast(((value.to< DataType* >()))->getSptr()); \
+            return true; \
+        } \
 \
-private:\
+    private: \
 \
-    boost::function< ReturnType (ClassType&)> m_getter;\
-};\
+        boost::function< ReturnType (ClassType&)> m_getter; \
+    }; \
 \
-}\
-}
+    } \
+    }
 
 
 
 
-#endif // __FWCAMP__MACROS_HPP__
+#endif // __FWCAMP_MACROS_HPP__
 
 
 
diff --git a/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp b/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp
index fc65e40..7b662da 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/namespace.hpp
@@ -1,15 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWCAMP_NAMESPACE_HPP__
+#define __FWCAMP_NAMESPACE_HPP__
+
 /**
  * @brief       All necessary for camp binding with simple types.
  * @namespace   fwCamp
- * 
+ *
  * @date        2009-2012
  */
 namespace fwCamp
 {
 }  // namespace fwCamp
+
+#endif //__FWCAMP_NAMESPACE_HPP__
diff --git a/SrcLib/core/fwCamp/include/fwCamp/registry/detail.hpp b/SrcLib/core/fwCamp/include/fwCamp/registry/detail.hpp
index 63392da..dd91b53 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/registry/detail.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,8 +14,14 @@
 
 #include "fwCamp/config.hpp"
 
-fwCorePredeclare((camp)(UserObject));
-fwCorePredeclare((fwTools)(Object));
+namespace camp
+{
+class UserObject;
+}
+namespace fwTools
+{
+class Object;
+}
 
 namespace fwCamp
 {
diff --git a/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp b/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp
index 53de9e5..36d5e7b 100644
--- a/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp
+++ b/SrcLib/core/fwCamp/include/fwCamp/registry/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwCamp
 /**
  * @brief       Contains fwCamp::registry details
  * @namespace   fwCamp::registry
- * 
+ *
  * @date        2009-2012
  */
 namespace registry
diff --git a/SrcLib/core/fwCamp/src/fwCamp/camp/MapProperty.cpp b/SrcLib/core/fwCamp/src/fwCamp/camp/MapProperty.cpp
index 2a05399..de0fc06 100644
--- a/SrcLib/core/fwCamp/src/fwCamp/camp/MapProperty.cpp
+++ b/SrcLib/core/fwCamp/src/fwCamp/camp/MapProperty.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,10 +11,11 @@
 namespace camp
 {
 
-MapProperty::MapProperty(const std::string& name, Type elementType):
-            Property(name, (::camp::Type) mappingType),
-            m_elementType(elementType)
-{}
+MapProperty::MapProperty(const std::string& name, Type elementType) :
+    Property(name, (::camp::Type) mappingType),
+    m_elementType(elementType)
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwCamp/src/fwCamp/factory/new.cpp b/SrcLib/core/fwCamp/src/fwCamp/factory/new.cpp
index d0243ab..3700b41 100644
--- a/SrcLib/core/fwCamp/src/fwCamp/factory/new.cpp
+++ b/SrcLib/core/fwCamp/src/fwCamp/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCamp/src/fwCamp/registry/detail.cpp b/SrcLib/core/fwCamp/src/fwCamp/registry/detail.cpp
index 94c8d03..e76aee4 100644
--- a/SrcLib/core/fwCamp/src/fwCamp/registry/detail.cpp
+++ b/SrcLib/core/fwCamp/src/fwCamp/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@ namespace fwCamp
 namespace registry
 {
 
-struct FwCampRegistryInstantiatorTag {} ;
+struct FwCampRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwCom/CMakeLists.txt b/SrcLib/core/fwCom/CMakeLists.txt
index ba6d654..15cd4c1 100644
--- a/SrcLib/core/fwCom/CMakeLists.txt
+++ b/SrcLib/core/fwCom/CMakeLists.txt
@@ -1,11 +1 @@
-
 fwLoadProperties()
-
-fwUseForwardInclude(fwCore fwThread)
-
-find_package (Boost COMPONENTS thread REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS} )
-fwLink(${Boost_LIBRARIES})
-
-
-
diff --git a/SrcLib/core/fwCom/COPYING b/SrcLib/core/fwCom/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwCom/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwCom/COPYING.LESSER b/SrcLib/core/fwCom/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwCom/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwCom/Properties.cmake b/SrcLib/core/fwCom/Properties.cmake
index d132c0d..ba91799 100644
--- a/SrcLib/core/fwCom/Properties.cmake
+++ b/SrcLib/core/fwCom/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwCom )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwThread )
+set( DEPENDENCIES fwCore fwThread fwTools)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwCom/bin/build.options b/SrcLib/core/fwCom/bin/build.options
deleted file mode 100644
index 2e83913..0000000
--- a/SrcLib/core/fwCom/bin/build.options
+++ /dev/null
@@ -1,10 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-USE = [
-    'boost',
-    'boostThread',
-    ]
-LIB = [
-    'fwCore_0-1',
-    'fwThread_0-1',
-    ]
diff --git a/SrcLib/core/fwCom/include/fwCom/Connection.hpp b/SrcLib/core/fwCom/include/fwCom/Connection.hpp
index 5175a12..746859e 100644
--- a/SrcLib/core/fwCom/include/fwCom/Connection.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/Connection.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,11 +20,13 @@ struct Connection
     struct Blocker
     {
         Blocker()
-        { }
+        {
+        }
 
         Blocker( Connection connection )
             : m_blocker(connection.getBlocker())
-        { }
+        {
+        }
 
         /// Unblock the related Connection.
         void reset()
@@ -32,15 +34,15 @@ struct Connection
             m_blocker.reset();
         }
 
-    protected:
-        SlotConnectionBase::BlockerSptrType m_blocker;
+        protected:
+            SlotConnectionBase::BlockerSptrType m_blocker;
     };
 
     Connection()
-    { }
+    {
+    }
 
-    Connection(const SlotConnectionBase::sptr &connection)
-        :m_connectionBase(connection)
+    Connection(const SlotConnectionBase::sptr &connection) : m_connectionBase(connection)
     {
     }
 
@@ -52,7 +54,7 @@ struct Connection
         {
             connection->disconnect();
         }
-    };
+    }
 
     /// Returns whether this Connection is expired or not.
     bool expired() const
@@ -60,21 +62,21 @@ struct Connection
         return m_connectionBase.expired();
     }
 
-protected:
+    protected:
 
-    /// Returns a Blocker.
-    SlotConnectionBase::BlockerSptrType getBlocker()
-    {
-        SlotConnectionBase::BlockerSptrType blocker;
-        SlotConnectionBase::sptr connection(m_connectionBase.lock());
-        if(connection)
+        /// Returns a Blocker.
+        SlotConnectionBase::BlockerSptrType getBlocker()
         {
-            blocker = connection->getBlocker();
+            SlotConnectionBase::BlockerSptrType blocker;
+            SlotConnectionBase::sptr connection(m_connectionBase.lock());
+            if(connection)
+            {
+                blocker = connection->getBlocker();
+            }
+            return blocker;
         }
-        return blocker;
-    }
 
-    SlotConnectionBase::wptr m_connectionBase;
+        SlotConnectionBase::wptr m_connectionBase;
 
 };
 
diff --git a/SrcLib/core/fwCom/include/fwCom/HasSignals.hpp b/SrcLib/core/fwCom/include/fwCom/HasSignals.hpp
index 105b405..c895118 100644
--- a/SrcLib/core/fwCom/include/fwCom/HasSignals.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/HasSignals.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCOM_HASIGNALS_HPP__
-#define __FWCOM_HASIGNALS_HPP__
+#ifndef __FWCOM_HASSIGNALS_HPP__
+#define __FWCOM_HASSIGNALS_HPP__
 
 #include "fwCom/config.hpp"
 #include "fwCom/Signals.hpp"
@@ -16,18 +16,22 @@ namespace fwCom
 struct SignalBase;
 
 /**
- * @class   HasSignals
  * @brief   This class proposes a mapping between a SignalKeyType and a SignalBase.
- * @date   2012.
  */
 class HasSignals
 {
 
 public:
 
-    typedef ::boost::shared_ptr< HasSignals > sptr;
+    typedef std::shared_ptr< HasSignals > sptr;
+    typedef std::shared_ptr< const HasSignals > csptr;
 
-    HasSignals(){}
+    HasSignals()
+    {
+    }
+    virtual ~HasSignals()
+    {
+    }
 
     SPTR( SignalBase ) signal( const Signals::SignalKeyType & key ) const
     {
@@ -37,17 +41,24 @@ public:
     template< typename SignalType >
     SPTR( SignalType ) signal( const Signals::SignalKeyType & key ) const
     {
-        SPTR( SignalType ) Signal = ::boost::dynamic_pointer_cast< SignalType >( this->signal(key) );
+        SPTR( SignalType ) Signal = std::dynamic_pointer_cast< SignalType >( this->signal(key) );
         return Signal;
     }
 
+    template<typename SignalType>
+    SPTR( SignalType ) newSignal(const Signals::SignalKeyType & key)
+    {
+        SPTR( SignalType ) sig = std::make_shared< SignalType > ();
+        m_signals(key, sig);
+        return sig;
+    }
 
 protected:
 
     /// Copy constructor forbidden
     HasSignals( const HasSignals& );
 
-    /// Copy operator forbiden
+    /// Copy operator forbidden
     HasSignals& operator=( const HasSignals& );
 
     Signals m_signals;
@@ -55,4 +66,4 @@ protected:
 
 } // namespace fwCom
 
-#endif // __FWCOM_HASIGNALS_HPP__
+#endif // __FWCOM_HASSIGNALS_HPP__
diff --git a/SrcLib/core/fwCom/include/fwCom/HasSlots.hpp b/SrcLib/core/fwCom/include/fwCom/HasSlots.hpp
index b4fdaf8..37bd4f9 100644
--- a/SrcLib/core/fwCom/include/fwCom/HasSlots.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/HasSlots.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,6 +9,7 @@
 
 #include "fwCom/config.hpp"
 #include "fwCom/Slots.hpp"
+#include "fwCom/util/convert_function_type.hpp"
 
 namespace fwCom
 {
@@ -16,18 +17,22 @@ namespace fwCom
 struct SlotBase;
 
 /**
- * @class   HasSlots
  * @brief   This class proposes a mapping between a SlotKeyType and a SlotBase.
- * @date   2012.
  */
 class HasSlots
 {
 
 public:
 
-    typedef ::boost::shared_ptr< HasSlots > sptr;
+    typedef std::shared_ptr< HasSlots > sptr;
+    typedef std::shared_ptr< const HasSlots > csptr;
 
-    HasSlots(){}
+    HasSlots()
+    {
+    }
+    virtual ~HasSlots()
+    {
+    }
 
     SPTR( SlotBase ) slot( const Slots::SlotKeyType & key ) const
     {
@@ -37,17 +42,20 @@ public:
     template< typename SlotType >
     SPTR( SlotType ) slot( const Slots::SlotKeyType & key ) const
     {
-        SPTR( SlotType ) slot = ::boost::dynamic_pointer_cast< SlotType >( this->slot(key) );
+        SPTR( SlotType ) slot = std::dynamic_pointer_cast< SlotType >( this->slot(key) );
         return slot;
     }
 
+    template<typename F, typename A>
+    SPTR(Slot< typename ::fwCom::util::convert_function_type< F >::type >) newSlot( const Slots::SlotKeyType & key, F f,
+                                                                                    A a );
 
 protected:
 
     /// Copy constructor forbidden
     HasSlots( const HasSlots& );
 
-    /// Copy operator forbiden
+    /// Copy operator forbidden
     HasSlots& operator=( const HasSlots& );
 
     Slots m_slots;
diff --git a/SrcLib/core/fwCom/include/fwCom/Signal.hpp b/SrcLib/core/fwCom/include/fwCom/Signal.hpp
index 5bf6c4b..cf17962 100644
--- a/SrcLib/core/fwCom/include/fwCom/Signal.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/Signal.hpp
@@ -1,8 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_SIGNAL_HPP__
 #define __FWCOM_SIGNAL_HPP__
 
@@ -12,10 +13,11 @@
 
 #include <boost/type_traits/is_same.hpp>
 
+#include <fwCom/SlotConnection.hpp>
 #include <fwCore/mt/types.hpp>
-
 #include "fwCom/SignalBase.hpp"
 
+
 namespace fwCom
 {
 
@@ -32,523 +34,30 @@ struct SlotRun;
  * @brief Signal implementation.
  * Template parameter T must always be void.
  */
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct Signal< R ( A1, A2, A3, A4, A5 ) > : SignalBase
+template < typename R, typename ... A >
+struct Signal< R (A ...) > : SignalBase
 {
     /**
      * @name Typedefs
      * @{ */
-    typedef R SignatureType( A1, A2, A3, A4, A5 );
+    typedef R SignatureType (A ...);
 
     typedef Signal< SignatureType > SelfType;
 
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
+    typedef SPTR ( SelfType ) sptr;
+    typedef WPTR ( SelfType ) wptr;
 
     typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
+    typedef SPTR ( SlotRunType )      SlotSptr;
 
     typedef std::pair< bool, SlotRunType* > PairType;
     typedef std::list< PairType* > SlotContainerType;
 
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
+    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ),
+                      std::owner_less< WPTR( SlotBase ) > > ConnectionMapType;
     /**  @} */
 
-    /// Constructs a new Signal of type Signal<R( A1, A2, A3, A4, A5 )>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
-
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
-
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-struct Signal< R ( A1, A2, A3, A4 ) > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2, A3, A4 );
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R( A1, A2, A3, A4 )>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A1 a1, A2 a2, A3 a3, A4 a4 ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A1 a1, A2 a2, A3 a3, A4 a4 ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
-
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
-
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-template < typename R, typename A1, typename A2, typename A3 >
-struct Signal< R ( A1, A2, A3 ) > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2, A3 );
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R( A1, A2, A3 )>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A1 a1, A2 a2, A3 a3 ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A1 a1, A2 a2, A3 a3 ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
-
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
-
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-template < typename R, typename A1, typename A2 >
-struct Signal< R ( A1, A2 ) > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2 );
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R( A1, A2 )>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A1 a1, A2 a2 ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A1 a1, A2 a2 ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
-
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
-
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-template < typename R, typename A1 >
-struct Signal< R ( A1 ) > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1 );
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R( A1 )>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A1 a1 ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A1 a1 ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
-
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
-
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-template < typename R>
-struct Signal< R () > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType();
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R()>.
+    /// Constructs a new Signal of type Signal<R(A...)>.
     static sptr New();
 
     /// Destructor : disconnects all remaining connections.
@@ -576,10 +85,10 @@ struct Signal< R () > : SignalBase
     void disconnectAll();
 
     /// Requests execution of slots with given arguments.
-    void emit() const;
+    void emit( A ... a ) const;
 
     /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit() const;
+    void asyncEmit( A ... a ) const;
 
     /// Returns number of connected slots.
     size_t getNumberOfConnections() const
@@ -595,140 +104,37 @@ struct Signal< R () > : SignalBase
      */
     Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
 
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-struct Signal< R (A...) > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType(A...);
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R(A...)>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A...a ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A...a ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
 
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
 
-protected:
+    protected:
 
-    template < typename F >
-    friend struct SlotConnection;
 
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
+        template < typename F >
+        friend struct SlotConnection;
+        /**
+         * @brief Connects the given slot.
+         * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
+         * returns a connection on success, otherwise try to connect
+         * the same slot with the type R (A1, A2, ..., Am).
+         *
+         * @throws BadSlot If given slot doesn't match signal type.
+         * @throws AlreadyConnected If given slot is already connected.
+         */
+        template< typename FROM_F >
+        Connection connect( SPTR( SlotBase ) slot );
 
-    /// Connected slots.
-    SlotContainerType m_slots;
+        /// Connected slots.
+        SlotContainerType m_slots;
 
-    /// Container of current connections.
-    ConnectionMapType m_connections;
+        /// Container of current connections.
+        ConnectionMapType m_connections;
 
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
+        mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
 
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
+    private:
+        BOOST_STATIC_ASSERT( (::boost::is_same<void, R>::value) );
 
 };
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
 
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/Signal.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/Signal.hpp.vrdc
deleted file mode 100644
index bf1e81a..0000000
--- a/SrcLib/core/fwCom/include/fwCom/Signal.hpp.vrdc
+++ /dev/null
@@ -1,138 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SIGNAL_HPP__
-#define __FWCOM_SIGNAL_HPP__
-
-#include <list>
-#include <map>
-#include <utility>
-
-#include <boost/type_traits/is_same.hpp>
-
-#include <fwCore/mt/types.hpp>
-
-#include "fwCom/SignalBase.hpp"
-
-namespace fwCom
-{
-
-struct SlotConnectionBase;
-struct SlotBase;
-
-template < typename F >
-struct Signal;
-
-template < typename F >
-struct SlotRun;
-
-/**
- * @brief Signal implementation.
- * Template parameter T must always be void.
- */
-template < typename R, typename ...A >
-struct Signal< R (A...) > : SignalBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType(A...);
-
-    typedef Signal< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotSptr;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    typedef std::list< PairType* > SlotContainerType;
-
-    typedef std::map< WPTR( SlotBase ), WPTR( SlotConnectionBase ) > ConnectionMapType;
-    /**  @} */
-
-    /// Constructs a new Signal of type Signal<R(A...)>.
-    static sptr New();
-
-    /// Destructor : disconnects all remaining connections.
-    ~Signal()
-    {
-        this->disconnectAll();
-    }
-
-    /**
-     * @brief Connects the given slot.
-     *
-     * @return an object managing the connection.
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    Connection connect ( SPTR( SlotBase ) slot );
-
-    /**
-     * @brief Disconnects the given slot.
-     * @throws BadSlot If given slot is not found in current connections.
-     */
-    void disconnect ( SPTR( SlotBase ) slot );
-
-    /// Disconnects all slots.
-    void disconnectAll();
-
-    /// Requests execution of slots with given arguments.
-    void emit( A...a ) const;
-
-    /// Requests asynchronous execution of slots with given arguments.
-    void asyncEmit( A...a ) const;
-
-    /// Returns number of connected slots.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_slots.size();
-    }
-
-
-    /**
-     * @brief Returns the connection handler matching given slot.
-     * @throws BadSlot if given slot is not connected and `throws` is true.
-     */
-    Connection getConnection( SPTR( SlotBase ) slot, bool throws = false );
-
-protected:
-
-    template < typename F >
-    friend struct SlotConnection;
-
-    /**
-     * @brief Connects the given slot.
-     * Tries to connect a slot of type R (A1, A2, ..., Am, An) :
-     * returns a connection on succes, otherwise try to connect
-     * the same slot with the type R (A1, A2, ..., Am).
-     *
-     * @throws BadSlot If given slot doesn't match signal type.
-     * @throws AlreadyConnected If given slot is already connected.
-     */
-    template< typename FROM_F >
-    Connection connect( SPTR( SlotBase ) slot );
-
-    /// Connected slots.
-    SlotContainerType m_slots;
-
-    /// Container of current connections.
-    ConnectionMapType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-
-private:
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-
-};
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SIGNAL_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/Signal.hxx b/SrcLib/core/fwCom/include/fwCom/Signal.hxx
index b342c94..488d593 100644
--- a/SrcLib/core/fwCom/include/fwCom/Signal.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/Signal.hxx
@@ -1,8 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_SIGNAL_HXX__
 #define __FWCOM_SIGNAL_HXX__
 
@@ -10,1205 +11,118 @@
 #error fwCom/Signal.hpp not included
 #endif
 
-#include <boost/foreach.hpp>
-#include <boost/function_types/function_arity.hpp>
-#include <boost/make_shared.hpp>
-
-#include "fwCom/exception/BadSlot.hpp"
 #include "fwCom/exception/AlreadyConnected.hpp"
-#include "fwCom/SlotConnection.hpp"
-#include "fwCom/SlotConnection.hxx"
+#include "fwCom/exception/BadSlot.hpp"
 #include "fwCom/Slot.hpp"
 #include "fwCom/Slot.hxx"
+#include "fwCom/SlotConnection.hpp"
+#include "fwCom/SlotConnection.hxx"
 #include "fwCom/util/remove_last_arg.hpp"
-#include "fwCom/util/log.hpp"
-
-
-namespace fwCom
-{
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-typename Signal< R ( A1, A2, A3, A4, A5 ) >::sptr Signal< R ( A1, A2, A3, A4, A5 ) >::New()
-{
-    return ::boost::make_shared< Signal< R ( A1, A2, A3, A4, A5 ) > > () ;
-}
-
-
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-typename Signal< R ( A1, A2, A3, A4 ) >::sptr Signal< R ( A1, A2, A3, A4 ) >::New()
-{
-    return ::boost::make_shared< Signal< R ( A1, A2, A3, A4 ) > > () ;
-}
-
-
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-typename Signal< R ( A1, A2, A3 ) >::sptr Signal< R ( A1, A2, A3 ) >::New()
-{
-    return ::boost::make_shared< Signal< R ( A1, A2, A3 ) > > () ;
-}
-
-
-
-
-template < typename R, typename A1, typename A2 >
-typename Signal< R ( A1, A2 ) >::sptr Signal< R ( A1, A2 ) >::New()
-{
-    return ::boost::make_shared< Signal< R ( A1, A2 ) > > () ;
-}
-
-
-
-
-template < typename R, typename A1 >
-typename Signal< R ( A1 ) >::sptr Signal< R ( A1 ) >::New()
-{
-    return ::boost::make_shared< Signal< R ( A1 ) > > () ;
-}
-
-
-
-
-template < typename R>
-typename Signal< R () >::sptr Signal< R () >::New()
-{
-    return ::boost::make_shared< Signal< R () > > () ;
-}
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-typename Signal< R (A...) >::sptr Signal< R (A...) >::New()
-{
-    return ::boost::make_shared< Signal< R (A...) > > () ;
-}
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-Connection Signal< R ( A1, A2, A3, A4, A5 ) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-Connection Signal< R ( A1, A2, A3, A4 ) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-Connection Signal< R ( A1, A2, A3 ) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-template < typename R, typename A1, typename A2 >
-Connection Signal< R ( A1, A2 ) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-template < typename R, typename A1 >
-Connection Signal< R ( A1 ) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-template < typename R>
-Connection Signal< R () >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-Connection Signal< R (A...) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-void Signal< R ( A1, A2, A3, A4, A5 ) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-void Signal< R ( A1, A2, A3, A4 ) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-void Signal< R ( A1, A2, A3 ) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-template < typename R, typename A1, typename A2 >
-void Signal< R ( A1, A2 ) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-template < typename R, typename A1 >
-void Signal< R ( A1 ) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
 
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-template < typename R>
-void Signal< R () >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-void Signal< R (A...) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-void Signal< R ( A1, A2, A3, A4, A5 ) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-void Signal< R ( A1, A2, A3, A4 ) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-void Signal< R ( A1, A2, A3 ) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-template < typename R, typename A1, typename A2 >
-void Signal< R ( A1, A2 ) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-template < typename R, typename A1 >
-void Signal< R ( A1 ) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-template < typename R>
-void Signal< R () >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-void Signal< R (A...) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-void Signal< R ( A1, A2, A3, A4, A5 ) >::emit( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run( a1, a2, a3, a4, a5 );
-        }
-    }
-}
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-void Signal< R ( A1, A2, A3, A4 ) >::emit( A1 a1, A2 a2, A3 a3, A4 a4 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run( a1, a2, a3, a4 );
-        }
-    }
-}
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-void Signal< R ( A1, A2, A3 ) >::emit( A1 a1, A2 a2, A3 a3 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run( a1, a2, a3 );
-        }
-    }
-}
-
-
-template < typename R, typename A1, typename A2 >
-void Signal< R ( A1, A2 ) >::emit( A1 a1, A2 a2 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run( a1, a2 );
-        }
-    }
-}
-
-
-template < typename R, typename A1 >
-void Signal< R ( A1 ) >::emit( A1 a1 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run( a1 );
-        }
-    }
-}
-
-
-template < typename R>
-void Signal< R () >::emit() const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run();
-        }
-    }
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-void Signal< R (A...) >::emit( A...a ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run(a...);
-        }
-    }
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-void Signal< R ( A1, A2, A3, A4, A5 ) >::asyncEmit( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun( a1, a2, a3, a4, a5 );
-        }
-    }
-}
-
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-void Signal< R ( A1, A2, A3, A4 ) >::asyncEmit( A1 a1, A2 a2, A3 a3, A4 a4 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun( a1, a2, a3, a4 );
-        }
-    }
-}
-
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-void Signal< R ( A1, A2, A3 ) >::asyncEmit( A1 a1, A2 a2, A3 a3 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun( a1, a2, a3 );
-        }
-    }
-}
-
-
-
-template < typename R, typename A1, typename A2 >
-void Signal< R ( A1, A2 ) >::asyncEmit( A1 a1, A2 a2 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun( a1, a2 );
-        }
-    }
-}
-
-
-
-template < typename R, typename A1 >
-void Signal< R ( A1 ) >::asyncEmit( A1 a1 ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun( a1 );
-        }
-    }
-}
-
-
-
-template < typename R>
-void Signal< R () >::asyncEmit() const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun();
-        }
-    }
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-void Signal< R (A...) >::asyncEmit( A...a ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun(a...);
-        }
-    }
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template< typename FROM_F >
-Connection Signal< R( A1, A2, A3, A4, A5 ) >::connect( SlotBase::sptr slot )
-{
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-
-        if(m_connections.find( slot ) != m_connections.end())
-        {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
-        }
-    }
-
-    typedef SlotConnection< void( A1, A2, A3, A4, A5 ) > ConnectionType;
-    Connection connection;
-
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
-    {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A1, A2, A3, A4, A5 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2, A3, A4, A5 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-        }
-    }
-    else if ( sigArity > slot->arity() )
-    {
-
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
-
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void ( A1, A2, A3, A4, A5 ) > >::New(wrappedSlot);
-            typename Signal< R( A1, A2, A3, A4, A5 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2, A3, A4, A5 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
-        }
-
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-    }
-
-    return connection;
-
-}
-
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-template< typename FROM_F >
-Connection Signal< R( A1, A2, A3, A4 ) >::connect( SlotBase::sptr slot )
-{
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-
-        if(m_connections.find( slot ) != m_connections.end())
-        {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
-        }
-    }
-
-    typedef SlotConnection< void( A1, A2, A3, A4 ) > ConnectionType;
-    Connection connection;
-
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
-    {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A1, A2, A3, A4 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2, A3, A4 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-        }
-    }
-    else if ( sigArity > slot->arity() )
-    {
-
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
-
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void ( A1, A2, A3, A4 ) > >::New(wrappedSlot);
-            typename Signal< R( A1, A2, A3, A4 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2, A3, A4 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
-        }
-
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-    }
-
-    return connection;
-
-}
-
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-template< typename FROM_F >
-Connection Signal< R( A1, A2, A3 ) >::connect( SlotBase::sptr slot )
-{
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-
-        if(m_connections.find( slot ) != m_connections.end())
-        {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
-        }
-    }
-
-    typedef SlotConnection< void( A1, A2, A3 ) > ConnectionType;
-    Connection connection;
-
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
-    {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A1, A2, A3 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2, A3 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-        }
-    }
-    else if ( sigArity > slot->arity() )
-    {
-
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
-
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void ( A1, A2, A3 ) > >::New(wrappedSlot);
-            typename Signal< R( A1, A2, A3 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2, A3 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
-        }
-
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-    }
-
-    return connection;
-
-}
-
-
-
-template < typename R, typename A1, typename A2 >
-template< typename FROM_F >
-Connection Signal< R( A1, A2 ) >::connect( SlotBase::sptr slot )
-{
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-
-        if(m_connections.find( slot ) != m_connections.end())
-        {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
-        }
-    }
-
-    typedef SlotConnection< void( A1, A2 ) > ConnectionType;
-    Connection connection;
-
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
-    {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A1, A2 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-        }
-    }
-    else if ( sigArity > slot->arity() )
-    {
-
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
-
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void ( A1, A2 ) > >::New(wrappedSlot);
-            typename Signal< R( A1, A2 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1, A2 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
-        }
-
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-    }
-
-    return connection;
-
-}
-
-
-
-template < typename R, typename A1 >
-template< typename FROM_F >
-Connection Signal< R( A1 ) >::connect( SlotBase::sptr slot )
-{
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-
-        if(m_connections.find( slot ) != m_connections.end())
-        {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
-        }
-    }
-
-    typedef SlotConnection< void( A1 ) > ConnectionType;
-    Connection connection;
-
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
-    {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A1 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-        }
-    }
-    else if ( sigArity > slot->arity() )
-    {
+#include <boost/function_types/function_arity.hpp>
 
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
+namespace fwCom
+{
 
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void ( A1 ) > >::New(wrappedSlot);
-            typename Signal< R( A1 ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A1 ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
+template < typename R, typename ... A >
+typename Signal< R (A ...) >::sptr Signal< R (A ...) >::New()
+{
+    return std::make_shared< Signal< R (A ...) > > ();
+}
+
+//-----------------------------------------------------------------------------
+
+template < typename R, typename ... A >
+Connection Signal< R (A ...) >::connect( SlotBase::sptr slot )
+{
+    return this->connect< SignatureType >(slot);
+}
+
+//-----------------------------------------------------------------------------
+
+template < typename R, typename ... A >
+void Signal< R (A ...) >::disconnect( SlotBase::sptr slot )
+{
+    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
+
+    ConnectionMapType::const_iterator iter = m_connections.find(slot);
+
+    if (iter != m_connections.end())
+    {
+        SlotConnectionBase::sptr connection ( iter->second.lock() );
+        SLM_ASSERT( "Connection has been previously destroyed", connection );
+        if (connection)
         {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
+            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+            connection->disconnectWeakLock();
+            // m_connections.erase(slot.get()); // done in connection->disconnect
         }
-
     }
     else
     {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
+        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
     }
-
-    return connection;
-
 }
 
+//-----------------------------------------------------------------------------
 
-
-template < typename R>
-template< typename FROM_F >
-Connection Signal< R() >::connect( SlotBase::sptr slot )
+template < typename R, typename ... A >
+void Signal< R (A ...) >::disconnectAll()
 {
+    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
+
+    ConnectionMapType connections = m_connections;
+
+    for( const typename ConnectionMapType::value_type &conn : connections )
     {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
+        SlotConnectionBase::sptr connection( conn.second.lock() );
 
-        if(m_connections.find( slot ) != m_connections.end())
+        if(connection)
         {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
+            connection->disconnectWeakLock();
         }
     }
+}
 
-    typedef SlotConnection< void() > ConnectionType;
-    Connection connection;
+//-----------------------------------------------------------------------------
 
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
+template < typename R, typename ... A >
+void Signal< R (A ...) >::emit( A ... a ) const
+{
+    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
+    typename SlotContainerType::const_iterator iter;
+    typename SlotContainerType::const_iterator end = m_slots.end();
+    for ( iter = m_slots.begin(); iter != end; ++iter )
     {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R() >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R() > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
+        if ((*iter)->first)
         {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
+            (*iter)->second->run(a ...);
         }
     }
-    else if ( sigArity > slot->arity() )
-    {
+}
 
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
+//-----------------------------------------------------------------------------
 
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void () > >::New(wrappedSlot);
-            typename Signal< R() >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R() > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
+template < typename R, typename ... A >
+void Signal< R (A ...) >::asyncEmit( A ... a ) const
+{
+    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
+    typename SlotContainerType::const_iterator iter;
+    typename SlotContainerType::const_iterator end = m_slots.end();
+    for ( iter = m_slots.begin(); iter != end; ++iter )
+    {
+        if ((*iter)->first)
         {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
+            (*iter)->second->asyncRun(a ...);
         }
-
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
     }
-
-    return connection;
-
 }
 
+//-----------------------------------------------------------------------------
 
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
+template < typename R, typename ... A >
 template< typename FROM_F >
-Connection Signal< R( A... ) >::connect( SlotBase::sptr slot )
+Connection Signal< R( A ... ) >::connect( SlotBase::sptr slot )
 {
     {
         ::fwCore::mt::ReadLock lock(m_connectionsMutex);
@@ -1219,18 +133,18 @@ Connection Signal< R( A... ) >::connect( SlotBase::sptr slot )
         }
     }
 
-    typedef SlotConnection< void( A... ) > ConnectionType;
+    typedef SlotConnection< void ( A ... ) > ConnectionType;
     Connection connection;
 
     unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
     if ( sigArity == slot->arity() )
     {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
+        SlotSptr slotToConnect = std::dynamic_pointer_cast< SlotRunType >(slot);
         if(slotToConnect)
         {
             ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A... ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A... ) > > ( this->shared_from_this() );
+            typename Signal< R( A ... ) >::sptr sig =
+                std::dynamic_pointer_cast < Signal< R( A ... ) > > ( this->shared_from_this() );
             typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
             slot->m_connections.insert(slotConnection);
             m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
@@ -1246,14 +160,14 @@ Connection Signal< R( A... ) >::connect( SlotBase::sptr slot )
     {
 
         typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
+        typename SPTR(WrappedSlotRunType) wrappedSlot = std::dynamic_pointer_cast< WrappedSlotRunType >(slot);
 
         if(wrappedSlot)
         {
             ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void (A...) > >::New(wrappedSlot);
-            typename Signal< R( A... ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A... ) > > ( this->shared_from_this() );
+            SlotSptr slotToConnect = Slot < Slot < void (A ...) > >::New(wrappedSlot);
+            typename Signal< R( A ... ) >::sptr sig =
+                std::dynamic_pointer_cast < Signal< R( A ... ) > > ( this->shared_from_this() );
             typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
             slot->m_connections.insert(slotConnection);
             m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
@@ -1272,180 +186,12 @@ Connection Signal< R( A... ) >::connect( SlotBase::sptr slot )
     }
 
     return connection;
-
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-Connection Signal< R( A1, A2, A3, A4, A5 ) >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
-}
-
-
-template < typename R, typename A1, typename A2, typename A3, typename A4 >
-Connection Signal< R( A1, A2, A3, A4 ) >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
-}
-
-
-template < typename R, typename A1, typename A2, typename A3 >
-Connection Signal< R( A1, A2, A3 ) >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
-}
-
-
-template < typename R, typename A1, typename A2 >
-Connection Signal< R( A1, A2 ) >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
-}
-
-
-template < typename R, typename A1 >
-Connection Signal< R( A1 ) >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
-}
-
-
-template < typename R>
-Connection Signal< R() >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
 }
 
+//-----------------------------------------------------------------------------
 
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename R, typename ...A >
-Connection Signal< R( A... ) >::getConnection( SlotBase::sptr slot, bool throws )
+template < typename R, typename ... A >
+Connection Signal< R( A ... ) >::getConnection( SlotBase::sptr slot, bool throws )
 {
     ::fwCore::mt::ReadLock lock(m_connectionsMutex);
     Connection connection;
@@ -1464,13 +210,11 @@ Connection Signal< R( A... ) >::getConnection( SlotBase::sptr slot, bool throws
         SlotConnectionBase::sptr slotConnection (iter->second);
         connection = Connection( slotConnection );
     }
-
     return connection;
-
 }
 
+//-----------------------------------------------------------------------------
 
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif /* __FWCOM_SIGNAL_HXX__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/Signal.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/Signal.hxx.vrdc
deleted file mode 100644
index 38dbfca..0000000
--- a/SrcLib/core/fwCom/include/fwCom/Signal.hxx.vrdc
+++ /dev/null
@@ -1,222 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SIGNAL_HXX__
-#define __FWCOM_SIGNAL_HXX__
-
-#ifndef __FWCOM_SIGNAL_HPP__
-#error fwCom/Signal.hpp not included
-#endif
-
-#include <boost/foreach.hpp>
-#include <boost/function_types/function_arity.hpp>
-#include <boost/make_shared.hpp>
-
-#include "fwCom/exception/BadSlot.hpp"
-#include "fwCom/exception/AlreadyConnected.hpp"
-#include "fwCom/SlotConnection.hpp"
-#include "fwCom/SlotConnection.hxx"
-#include "fwCom/Slot.hpp"
-#include "fwCom/Slot.hxx"
-#include "fwCom/util/remove_last_arg.hpp"
-#include "fwCom/util/log.hpp"
-
-
-namespace fwCom
-{
-
-
-
-template < typename R, typename ...A >
-typename Signal< R (A...) >::sptr Signal< R (A...) >::New()
-{
-    return ::boost::make_shared< Signal< R (A...) > > () ;
-}
-
-
-
-template < typename R, typename ...A >
-Connection Signal< R (A...) >::connect( SlotBase::sptr slot )
-{
-    return this->connect< SignatureType >(slot);
-}
-
-template < typename R, typename ...A >
-void Signal< R (A...) >::disconnect( SlotBase::sptr slot )
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter != m_connections.end())
-    {
-        SlotConnectionBase::sptr connection ( iter->second.lock() );
-        SLM_ASSERT( "Connection has been previously destroyed", connection );
-        if (connection)
-        {
-            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-            connection->disconnectWeakLock();
-            // m_connections.erase(slot.get()); // done in connection->disconnect
-        }
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-    }
-}
-
-
-template < typename R, typename ...A >
-void Signal< R (A...) >::disconnectAll()
-{
-    ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-
-    ConnectionMapType connections = m_connections;
-
-    BOOST_FOREACH( const typename ConnectionMapType::value_type &conn, connections )
-    {
-        SlotConnectionBase::sptr connection( conn.second.lock() );
-
-        if(connection)
-        {
-            connection->disconnectWeakLock();
-        }
-    }
-
-}
-
-template < typename R, typename ...A >
-void Signal< R (A...) >::emit( A...a ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("emit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->run(a...);
-        }
-    }
-}
-
-template < typename R, typename ...A >
-void Signal< R (A...) >::asyncEmit( A...a ) const
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    OSLM_COM("asyncEmit '"<< this->getID() <<"' sig ( nb connected slots = " << m_slots.size() << " )" );
-    typename SlotContainerType::const_iterator iter;
-    typename SlotContainerType::const_iterator end = m_slots.end();
-    for ( iter = m_slots.begin() ; iter != end; ++iter )
-    {
-        if ((*iter)->first)
-        {
-            (*iter)->second->asyncRun(a...);
-        }
-    }
-}
-
-
-template < typename R, typename ...A >
-template< typename FROM_F >
-Connection Signal< R( A... ) >::connect( SlotBase::sptr slot )
-{
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-
-        if(m_connections.find( slot ) != m_connections.end())
-        {
-            FW_RAISE_EXCEPTION( fwCom::exception::AlreadyConnected("Slot already connected") );
-        }
-    }
-
-    typedef SlotConnection< void( A... ) > ConnectionType;
-    Connection connection;
-
-    unsigned int sigArity = ::boost::function_types::function_arity< SignatureType >::value;
-    if ( sigArity == slot->arity() )
-    {
-        SlotSptr slotToConnect = boost::dynamic_pointer_cast< SlotRunType >(slot);
-        if(slotToConnect)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            typename Signal< R( A... ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A... ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slotToConnect);
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-        }
-    }
-    else if ( sigArity > slot->arity() )
-    {
-
-        typedef SlotRun< FROM_F > WrappedSlotRunType;
-        typename SPTR(WrappedSlotRunType) wrappedSlot = boost::dynamic_pointer_cast< WrappedSlotRunType >(slot);
-
-        if(wrappedSlot)
-        {
-            ::fwCore::mt::WriteLock lock(m_connectionsMutex);
-            SlotSptr slotToConnect = Slot < Slot < void (A...) > >::New(wrappedSlot);
-            typename Signal< R( A... ) >::sptr sig =
-                boost::dynamic_pointer_cast < Signal< R( A... ) > > ( this->shared_from_this() );
-            typename ConnectionType::sptr slotConnection = ConnectionType::New( sig, slot, slotToConnect );
-            slot->m_connections.insert(slotConnection);
-            m_connections.insert( typename ConnectionMapType::value_type( slot, slotConnection ) );
-            slotConnection->connectNoLock();
-            connection = Connection(slotConnection);
-        }
-        else
-        {
-            connection = this->connect< typename ::fwCom::util::remove_last_arg< FROM_F >::type >( slot );
-        }
-
-    }
-    else
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "Incompatible slot" ) );
-    }
-
-    return connection;
-
-}
-
-
-template < typename R, typename ...A >
-Connection Signal< R( A... ) >::getConnection( SlotBase::sptr slot, bool throws )
-{
-    ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-    Connection connection;
-
-    ConnectionMapType::const_iterator iter = m_connections.find(slot);
-
-    if (iter == m_connections.end() )
-    {
-        if(throws)
-        {
-            FW_RAISE_EXCEPTION( ::fwCom::exception::BadSlot( "No such slot connected" ) );
-        }
-    }
-    else
-    {
-        SlotConnectionBase::sptr slotConnection (iter->second);
-        connection = Connection( slotConnection );
-    }
-
-    return connection;
-
-}
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SIGNAL_HXX__ */
-
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SignalBase.hpp b/SrcLib/core/fwCom/include/fwCom/SignalBase.hpp
index a168531..0303657 100644
--- a/SrcLib/core/fwCom/include/fwCom/SignalBase.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/SignalBase.hpp
@@ -1,16 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 #ifndef __FWCOM_SIGNALBASE_HPP__
 #define __FWCOM_SIGNALBASE_HPP__
 
-#ifdef COM_LOG
-#include <boost/lexical_cast.hpp>
-#include <fwCore/mt/types.hpp>
-#endif
-
 #include <fwCore/BaseObject.hpp>
 
 #include "fwCom/config.hpp"
@@ -30,19 +25,17 @@ struct SignalBase : virtual fwCore::BaseObject
     /**
      * @name Typedefs
      * @{ */
-    typedef SPTR( SignalBase ) sptr;
-    typedef WPTR( SignalBase )   wptr;
+    typedef SPTR ( SignalBase ) sptr;
+    typedef WPTR ( SignalBase )   wptr;
     /**  @} */
 
     SignalBase()
     {
-#ifdef COM_LOG
-        ::fwCore::mt::ScopedLock lock(s_mutexCounter);
-        m_id = "Signal-" + ::boost::lexical_cast<std::string>(s_idCount++);
-#endif
-    };
+    }
 
-    virtual ~SignalBase(){};
+    virtual ~SignalBase()
+    {
+    }
 
     /**
      * @brief Connects the given slot.
@@ -59,44 +52,12 @@ struct SignalBase : virtual fwCore::BaseObject
     /// Returns number of connections.
     virtual size_t getNumberOfConnections() const = 0;
 
-protected:
-    /// Copy constructor forbidden
-    SignalBase( const SignalBase& );
-
-    /// Copy operator forbiden
-    SignalBase& operator=( const SignalBase& );
-
-#ifdef COM_LOG
-
-public :
-
-    typedef std::string IDType;
-
-    /// Gets current m_id
-    IDType getID() const
-    {
-        return m_id;
-    }
-
-    /// Sets new m_id
-    void setID( IDType newId )
-    {
-        m_id = newId;
-    }
-
-private :
-
-    /// Id of signal (not mandatory)
-    IDType m_id;
-
-    /// Id counter
-    FWCOM_API static size_t s_idCount;
-
-    /// Mutex to protect id counter
-    FWCOM_API static ::fwCore::mt::Mutex s_mutexCounter;
-
-#endif
+    protected:
+        /// Copy constructor forbidden
+        SignalBase( const SignalBase& );
 
+        /// Copy operator forbiden
+        SignalBase& operator=( const SignalBase& );
 };
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/Signals.hpp b/SrcLib/core/fwCom/include/fwCom/Signals.hpp
index 03b1fff..dfce2ac 100644
--- a/SrcLib/core/fwCom/include/fwCom/Signals.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/Signals.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,7 +22,7 @@ struct SignalBase;
  * @class   Signals
  * @brief   This class proposes a mapping between a SignalKeyType and a SignalBase.
  *
- * 
+ *
  * @date   2012.
  */
 class FWCOM_CLASS_API Signals
@@ -48,10 +48,7 @@ public:
     /// Returns all SignalKeyType registered in m_signals
     FWCOM_API SignalKeyContainerType getSignalKeys() const;
 
-#ifdef COM_LOG
-    /// Set new id for all signals using their key in m_signals, a prefix can be added
-    FWCOM_API void setID( const std::string prefix = "" );
-#endif
+
 
 protected:
 
diff --git a/SrcLib/core/fwCom/include/fwCom/Slot.hpp b/SrcLib/core/fwCom/include/fwCom/Slot.hpp
index be93509..f509fe5 100644
--- a/SrcLib/core/fwCom/include/fwCom/Slot.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/Slot.hpp
@@ -1,569 +1,103 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_SLOT_HPP__
 #define __FWCOM_SLOT_HPP__
 
-#include <boost/function.hpp>
-
 #include "fwCom/SlotCall.hpp"
-#include "fwCom/util/log.hpp"
+
+#include <boost/function.hpp>
 
 namespace fwCom
 {
 
 
 template< typename F >
-struct Slot;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct Slot< ::boost::function< R ( A1, A2, A3, A4, A5 ) > > : Slot< R ( A1, A2, A3, A4, A5 ) >
-{
-    typedef R SignatureType( A1, A2, A3, A4, A5 );
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A1, A2, A3, A4, A5 ) >(),  m_func(f)
-    { }
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func( a1, a2, a3, a4, a5 );
-    };
-
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func( a1, a2, a3, a4, a5 );
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-struct Slot< ::boost::function< R ( A1, A2, A3, A4 ) > > : Slot< R ( A1, A2, A3, A4 ) >
-{
-    typedef R SignatureType( A1, A2, A3, A4 );
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A1, A2, A3, A4 ) >(),  m_func(f)
-    { }
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4 ) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func( a1, a2, a3, a4 );
-    };
-
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4 ) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func( a1, a2, a3, a4 );
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-template<typename R, typename A1, typename A2, typename A3 >
-struct Slot< ::boost::function< R ( A1, A2, A3 ) > > : Slot< R ( A1, A2, A3 ) >
-{
-    typedef R SignatureType( A1, A2, A3 );
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A1, A2, A3 ) >(),  m_func(f)
-    { }
-
-    virtual void run( A1 a1, A2 a2, A3 a3 ) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func( a1, a2, a3 );
-    };
-
-    virtual R   call( A1 a1, A2 a2, A3 a3 ) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func( a1, a2, a3 );
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-template<typename R, typename A1, typename A2 >
-struct Slot< ::boost::function< R ( A1, A2 ) > > : Slot< R ( A1, A2 ) >
-{
-    typedef R SignatureType( A1, A2 );
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A1, A2 ) >(),  m_func(f)
-    { }
-
-    virtual void run( A1 a1, A2 a2 ) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func( a1, a2 );
-    };
-
-    virtual R   call( A1 a1, A2 a2 ) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func( a1, a2 );
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-template<typename R, typename A1 >
-struct Slot< ::boost::function< R ( A1 ) > > : Slot< R ( A1 ) >
-{
-    typedef R SignatureType( A1 );
-    typedef ::boost::function< SignatureType > FunctionType;
-
+class Slot;
 
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A1 ) >(),  m_func(f)
-    { }
-
-    virtual void run( A1 a1 ) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func( a1 );
-    };
-
-    virtual R   call( A1 a1 ) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func( a1 );
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-template<typename R>
-struct Slot< ::boost::function< R () > > : Slot< R () >
-{
-    typedef R SignatureType();
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R () >(),  m_func(f)
-    { }
-
-    virtual void run() const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func();
-    };
-
-    virtual R   call() const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func();
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-struct Slot< ::boost::function< R ( A... ) > > : Slot< R ( A... ) >
-{
-    typedef R SignatureType(A...);
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A... ) >(),  m_func(f)
-    { }
-
-    virtual void run(A...a) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func(a...);
-    };
+//-----------------------------------------------------------------------------
 
-    virtual R   call(A...a) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func(a...);
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct Slot< Slot< R ( A1, A2, A3, A4, A5 ) > > : Slot< boost::function < R ( A1, A2, A3, A4, A5 ) > >
-{
-
-
-    typedef R SignatureType ( A1, A2, A3, A4, A5 ) ;
-    typedef ::boost::function< SignatureType > FunctionType;
-
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R( A1, A2, A3, A4, A5 ) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-struct Slot< Slot< R ( A1, A2, A3, A4 ) > > : Slot< boost::function < R ( A1, A2, A3, A4 ) > >
+template<typename R, typename ... A >
+class Slot< R ( A ... ) > : public SlotCall< R (A ...) >
 {
+public:
+    typedef R SignatureType (A ...);
+    typedef Slot< SignatureType > SelfType;
+    typedef SPTR ( SelfType ) sptr;
+    typedef WPTR ( SelfType ) wptr;
 
+    Slot();
 
-    typedef R SignatureType ( A1, A2, A3, A4 ) ;
-    typedef ::boost::function< SignatureType > FunctionType;
-
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R( A1, A2, A3, A4 ) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-template<typename R, typename A1, typename A2, typename A3 >
-struct Slot< Slot< R ( A1, A2, A3 ) > > : Slot< boost::function < R ( A1, A2, A3 ) > >
-{
-
-
-    typedef R SignatureType ( A1, A2, A3 ) ;
-    typedef ::boost::function< SignatureType > FunctionType;
-
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R( A1, A2, A3 ) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-template<typename R, typename A1, typename A2 >
-struct Slot< Slot< R ( A1, A2 ) > > : Slot< boost::function < R ( A1, A2 ) > >
-{
-
-
-    typedef R SignatureType ( A1, A2 ) ;
-    typedef ::boost::function< SignatureType > FunctionType;
-
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R( A1, A2 ) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-template<typename R, typename A1 >
-struct Slot< Slot< R ( A1 ) > > : Slot< boost::function < R ( A1 ) > >
-{
-
-
-    typedef R SignatureType ( A1 ) ;
-    typedef ::boost::function< SignatureType > FunctionType;
-
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
     template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R( A1 ) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
+    static SPTR( Slot< R(A ...) > ) New( F f );
 
+    template< typename F, typename O >
+    static SPTR( Slot< R(A ...) > ) New( F f, O o );
 };
-template<typename R>
-struct Slot< Slot< R () > > : Slot< boost::function < R () > >
-{
-
-
-    typedef R SignatureType () ;
-    typedef ::boost::function< SignatureType > FunctionType;
 
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
 
-    template< typename F_IN >
-    static SPTR( Slot< R() > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
+//-----------------------------------------------------------------------------
 
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-struct Slot< Slot< R ( A... ) > > : Slot< boost::function < R ( A... ) > >
+template<typename R, typename ... A >
+class Slot< ::boost::function< R ( A ... ) > > : public Slot< R ( A ... ) >
 {
-
-
-    typedef R SignatureType ( A... ) ;
+public:
+    typedef R SignatureType (A ...);
     typedef ::boost::function< SignatureType > FunctionType;
 
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R(A...) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct Slot< R ( A1, A2, A3, A4, A5 ) > : SlotCall< R ( A1, A2, A3, A4, A5 ) >
-{
-    typedef R SignatureType( A1, A2, A3, A4, A5 );
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
 
-    Slot() : SlotCall< R ( A1, A2, A3, A4, A5 ) >()
+    template< typename FUNCTOR >
+    Slot( FUNCTOR f ) : Slot< R ( A ... ) >(),  m_func(f)
     {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A1, A2, A3, A4, A5 ) >();
     }
 
-    template< typename F >
-    static SPTR( Slot< R( A1, A2, A3, A4, A5 ) > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R( A1, A2, A3, A4, A5 ) > ) New( F f, O o ); //{}
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-struct Slot< R ( A1, A2, A3, A4 ) > : SlotCall< R ( A1, A2, A3, A4 ) >
-{
-    typedef R SignatureType( A1, A2, A3, A4 );
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-
-    Slot() : SlotCall< R ( A1, A2, A3, A4 ) >()
+    virtual ~Slot()
     {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A1, A2, A3, A4 ) >();
     }
 
-    template< typename F >
-    static SPTR( Slot< R( A1, A2, A3, A4 ) > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R( A1, A2, A3, A4 ) > ) New( F f, O o ); //{}
-
-};
-template<typename R, typename A1, typename A2, typename A3 >
-struct Slot< R ( A1, A2, A3 ) > : SlotCall< R ( A1, A2, A3 ) >
-{
-    typedef R SignatureType( A1, A2, A3 );
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-
-    Slot() : SlotCall< R ( A1, A2, A3 ) >()
+    virtual void run(A ... a) const
     {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A1, A2, A3 ) >();
+        m_func(a ...);
     }
 
-    template< typename F >
-    static SPTR( Slot< R( A1, A2, A3 ) > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R( A1, A2, A3 ) > ) New( F f, O o ); //{}
-
-};
-template<typename R, typename A1, typename A2 >
-struct Slot< R ( A1, A2 ) > : SlotCall< R ( A1, A2 ) >
-{
-    typedef R SignatureType( A1, A2 );
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-
-    Slot() : SlotCall< R ( A1, A2 ) >()
+    virtual R   call(A ... a) const
     {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A1, A2 ) >();
+        return m_func(a ...);
     }
 
-    template< typename F >
-    static SPTR( Slot< R( A1, A2 ) > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R( A1, A2 ) > ) New( F f, O o ); //{}
-
+protected:
+    FunctionType m_func;
 };
-template<typename R, typename A1 >
-struct Slot< R ( A1 ) > : SlotCall< R ( A1 ) >
-{
-    typedef R SignatureType( A1 );
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-
-    Slot() : SlotCall< R ( A1 ) >()
-    {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A1 ) >();
-    }
-
-    template< typename F >
-    static SPTR( Slot< R( A1 ) > ) New( F f ); //{}
 
-    template< typename F, typename O >
-    static SPTR( Slot< R( A1 ) > ) New( F f, O o ); //{}
+//-----------------------------------------------------------------------------
 
-};
-template<typename R>
-struct Slot< R () > : SlotCall< R () >
+template<typename R, typename ... A >
+class Slot< Slot< R ( A ... ) > > : public Slot< ::boost::function < R ( A ... ) > >
 {
-    typedef R SignatureType();
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
+public:
 
-    Slot() : SlotCall< R () >()
-    {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R () >();
-    }
+    typedef R SignatureType ( A ... );
+    typedef ::boost::function< SignatureType > FunctionType;
 
     template< typename F >
-    static SPTR( Slot< R() > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R() > ) New( F f, O o ); //{}
-
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-struct Slot< R ( A... ) > : SlotCall< R (A...) >
-{
-    typedef R SignatureType(A...);
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-
-    Slot() : SlotCall< R (A...) >()
-    {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A... ) >();
-    }
+    Slot( SPTR( SlotRun< F > )slot );
 
     template< typename F >
-    static SPTR( Slot< R(A...) > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R(A...) > ) New( F f, O o ); //{}
+    Slot( SPTR( Slot< F > )slot );
 
+    template< typename F >
+    static SPTR( Slot< R(A ...) > ) New( SPTR( SlotRun< F > ) slot );
 };
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4, typename Bindings5 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4, Bindings5  bindings5 ); //{}
-
-
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4 ); //{}
-
-
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3 ); //{}
-
-
-
-
-template<typename F, typename Bindings1, typename Bindings2 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings1  bindings1, Bindings2  bindings2 ); //{}
-
-
-
-
-template<typename F, typename Bindings1 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings1  bindings1 ); //{}
-
-
-
-
-template<typename F>
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f); //{}
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename F, typename ...Bindings>
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings ...bindings); //{}
 
+//-----------------------------------------------------------------------------
 
+template<typename F, typename ... Bindings>
+SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings ... bindings);
 
 
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif /* __FWCOM_SLOT_HPP__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/Slot.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/Slot.hpp.vrdc
deleted file mode 100644
index b206bef..0000000
--- a/SrcLib/core/fwCom/include/fwCom/Slot.hpp.vrdc
+++ /dev/null
@@ -1,105 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOT_HPP__
-#define __FWCOM_SLOT_HPP__
-
-#include <boost/function.hpp>
-
-#include "fwCom/SlotCall.hpp"
-#include "fwCom/util/log.hpp"
-
-namespace fwCom
-{
-
-
-template< typename F >
-struct Slot;
-
-template<typename R, typename ...A >
-struct Slot< ::boost::function< R ( A... ) > > : Slot< R ( A... ) >
-{
-    typedef R SignatureType(A...);
-    typedef ::boost::function< SignatureType > FunctionType;
-
-
-    template< typename FUNCTOR >
-        Slot( FUNCTOR f ) : Slot< R ( A... ) >(),  m_func(f)
-    { }
-
-    virtual void run(A...a) const
-    {
-        OSLM_COM("run '"<< this->getID() <<"' slot");
-        m_func(a...);
-    };
-    
-    virtual R   call(A...a) const
-    {
-        OSLM_COM("call '"<< this->getID() <<"'  slot");
-        return m_func(a...);
-    };
-
-
-protected:
-    FunctionType m_func;
-};
-
-
-
-
-template<typename R, typename ...A >
-struct Slot< Slot< R ( A... ) > > : Slot< boost::function < R ( A... ) > >
-{
-
-
-    typedef R SignatureType ( A... ) ;
-    typedef ::boost::function< SignatureType > FunctionType;
-
-    template< typename F >
-    Slot( SPTR( SlotRun< F > ) slot );
-    template< typename F >
-    Slot( SPTR( Slot< F > ) slot );
-
-    template< typename F_IN >
-    static SPTR( Slot< R(A...) > ) New( SPTR( SlotRun< F_IN > ) slot ); //{}
-
-};
-
-
-template<typename R, typename ...A >
-struct Slot< R ( A... ) > : SlotCall< R (A...) >
-{
-    typedef R SignatureType(A...);
-    typedef Slot< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-
-
-    Slot() : SlotCall< R (A...) >()
-    {
-        // 'this->' is needed by gcc 4.2
-        this->SlotBase::m_signature = SlotBase::getTypeName< R ( A... ) >();
-    }
-
-    template< typename F >
-    static SPTR( Slot< R(A...) > ) New( F f ); //{}
-
-    template< typename F, typename O >
-    static SPTR( Slot< R(A...) > ) New( F f, O o ); //{}
-
-};
-
-
-
-
-template<typename F, typename ...Bindings>
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, Bindings ...bindings); //{}
-
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOT_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/Slot.hxx b/SrcLib/core/fwCom/include/fwCom/Slot.hxx
index e02be1e..08be14c 100644
--- a/SrcLib/core/fwCom/include/fwCom/Slot.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/Slot.hxx
@@ -1,8 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_SLOT_HXX__
 #define __FWCOM_SLOT_HXX__
 
@@ -12,7 +13,6 @@
 
 #include <boost/function_types/function_arity.hpp>
 #include <boost/function_types/result_type.hpp>
-#include <boost/make_shared.hpp>
 #include <boost/static_assert.hpp>
 #include <boost/type_traits/is_same.hpp>
 
@@ -23,666 +23,87 @@
 
 namespace fwCom
 {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template< typename F >
-Slot< Slot< R ( A1, A2, A3, A4, A5 ) > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
-{
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-template< typename F >
-Slot< Slot< R ( A1, A2, A3, A4 ) > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
-{
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-template< typename F >
-Slot< Slot< R ( A1, A2, A3 ) > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
-{
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
 
+//-----------------------------------------------------------------------------
 
-template<typename R, typename A1, typename A2 >
-template< typename F >
-Slot< Slot< R ( A1, A2 ) > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
+template<typename R, typename ... A >
+Slot< R ( A ... ) >::Slot() : SlotCall< R (A ...) >()
 {
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
+    // 'this->' is needed by gcc 4.2
+    this->SlotBase::m_signature = SlotBase::getTypeName< R ( A ... ) >();
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-template<typename R, typename A1 >
-template< typename F >
-Slot< Slot< R ( A1 ) > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
+template<typename R, typename ... A >
+template<typename F>
+SPTR( Slot< R ( A ... ) > ) Slot< R ( A ... ) >::New( F f )
 {
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
+    return newSlot(f);
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-template<typename R>
-template< typename F >
-Slot< Slot< R () > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
+template<typename R, typename ... A >
+template<typename F, typename O>
+SPTR( Slot< R ( A ... ) > ) Slot< R ( A ... ) >::New( F f, O o )
 {
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
+    return newSlot(f, o);
 }
 
+//-----------------------------------------------------------------------------
+//-----------------------------------------------------------------------------
 
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
+template<typename R, typename ... A >
 template< typename F >
-Slot< Slot< R ( A... ) > >::Slot( SPTR( SlotRun< F > ) slot )
+Slot< Slot< R ( A ... ) > >::Slot( SPTR( SlotRun< F > )slot )
     : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
-{
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template< typename F >
-Slot< Slot< R ( A1, A2, A3, A4, A5 ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
-{
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-template< typename F >
-Slot< Slot< R ( A1, A2, A3, A4 ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
-{
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-template< typename F >
-Slot< Slot< R ( A1, A2, A3 ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
-{
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-
-template<typename R, typename A1, typename A2 >
-template< typename F >
-Slot< Slot< R ( A1, A2 ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
-{
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-
-template<typename R, typename A1 >
-template< typename F >
-Slot< Slot< R ( A1 ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
+          ::fwCom::util::AutoBind<
+              SignatureType,
+              ::boost::function_types::function_arity< F >::value
+              >::wrap( &SlotRun< F >::run, slot.get() ) )
 {
+    BOOST_STATIC_ASSERT( (::boost::is_same<void, R>::value) );
     this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-
-template<typename R>
-template< typename F >
-Slot< Slot< R () > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
-{
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
+template<typename R, typename ... A >
 template< typename F >
-Slot< Slot< R ( A... ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
+Slot< Slot< R ( A ... ) > >::Slot( SPTR( Slot< F > )slot ) : Slot< FunctionType >(
+                                                                 ::fwCom::util::AutoBind<
+                                                                     SignatureType,
+                                                                     ::boost::function_types::function_arity< F >::value
+                                                                     >::wrap( &Slot< F >::call, slot.get() ) )
 {
     this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename F, typename BINDING1, typename BINDING2, typename BINDING3, typename BINDING4, typename BINDING5 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING1  binding1, BINDING2  binding2, BINDING3  binding3, BINDING4  binding4, BINDING5  binding5 )
-{
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( 5 < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( 5 < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding1, binding2, binding3, binding4, binding5 );
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
-}
-
-
-template<typename F, typename BINDING1, typename BINDING2, typename BINDING3, typename BINDING4 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING1  binding1, BINDING2  binding2, BINDING3  binding3, BINDING4  binding4 )
-{
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( 4 < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( 4 < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding1, binding2, binding3, binding4 );
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
-}
-
-
-template<typename F, typename BINDING1, typename BINDING2, typename BINDING3 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING1  binding1, BINDING2  binding2, BINDING3  binding3 )
-{
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( 3 < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( 3 < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding1, binding2, binding3 );
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
 }
 
+//-----------------------------------------------------------------------------
 
-template<typename F, typename BINDING1, typename BINDING2 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING1  binding1, BINDING2  binding2 )
+template<typename R, typename ... A >
+template<typename F >
+SPTR(Slot< R( A ...  )>) Slot< Slot< R ( A ... )> >::New( SPTR( SlotRun< F > ) slot )
 {
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( 2 < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( 2 < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding1, binding2 );
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
+    assert (::boost::function_types::function_arity< F >::value <=
+            ::boost::function_types::function_arity< R ( A ... ) >::value);
+    return std::make_shared< Slot< Slot< R ( A ... ) > > >( slot );
 }
 
+//-----------------------------------------------------------------------------
 
-template<typename F, typename BINDING1 >
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING1  binding1 )
+template<typename F, typename ... BINDING>
+SPTR(Slot< typename ::fwCom::util::convert_function_type< F >::type >) newSlot(F f, BINDING ... binding)
 {
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( 1 < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( 1 < 2 ) );
-#endif
+    SLM_ASSERT( "Too many arguments", ( sizeof ... (binding) < 2 ) );
     typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding1 );
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
+    FunctionType func = ::fwCom::util::autobind(f, binding ...);
+    return std::make_shared< Slot< FunctionType > > ( func );
 }
 
+//-----------------------------------------------------------------------------
 
-template<typename F>
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f)
-{
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( 0 < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( 0 < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f);
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename F, typename ...BINDING>
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING ...binding)
-{
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( sizeof...(binding) < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( sizeof...(binding) < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding...);
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template<typename F>
-SPTR( Slot< R ( A1, A2, A3, A4, A5 ) > ) Slot< R ( A1, A2, A3, A4, A5 ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-template<typename F>
-SPTR( Slot< R ( A1, A2, A3, A4 ) > ) Slot< R ( A1, A2, A3, A4 ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-template<typename F>
-SPTR( Slot< R ( A1, A2, A3 ) > ) Slot< R ( A1, A2, A3 ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-template<typename R, typename A1, typename A2 >
-template<typename F>
-SPTR( Slot< R ( A1, A2 ) > ) Slot< R ( A1, A2 ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-template<typename R, typename A1 >
-template<typename F>
-SPTR( Slot< R ( A1 ) > ) Slot< R ( A1 ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-template<typename R>
-template<typename F>
-SPTR( Slot< R () > ) Slot< R () >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-template<typename F>
-SPTR( Slot< R ( A... ) > ) Slot< R ( A... ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template<typename F, typename O>
-SPTR( Slot< R ( A1, A2, A3, A4, A5 ) > ) Slot< R ( A1, A2, A3, A4, A5 ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-template<typename F, typename O>
-SPTR( Slot< R ( A1, A2, A3, A4 ) > ) Slot< R ( A1, A2, A3, A4 ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-template<typename F, typename O>
-SPTR( Slot< R ( A1, A2, A3 ) > ) Slot< R ( A1, A2, A3 ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-template<typename R, typename A1, typename A2 >
-template<typename F, typename O>
-SPTR( Slot< R ( A1, A2 ) > ) Slot< R ( A1, A2 ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-template<typename R, typename A1 >
-template<typename F, typename O>
-SPTR( Slot< R ( A1 ) > ) Slot< R ( A1 ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-template<typename R>
-template<typename F, typename O>
-SPTR( Slot< R () > ) Slot< R () >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-template<typename F, typename O>
-SPTR( Slot< R ( A... ) > ) Slot< R ( A... ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template<typename F_IN >
-SPTR( Slot< R ( A1, A2, A3, A4, A5 ) > ) Slot< Slot< R ( A1, A2, A3, A4, A5 ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A1, A2, A3, A4, A5 ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A1, A2, A3, A4, A5 ) > > > ( slot );
-}
-
-
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-template<typename F_IN >
-SPTR( Slot< R ( A1, A2, A3, A4 ) > ) Slot< Slot< R ( A1, A2, A3, A4 ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A1, A2, A3, A4 ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A1, A2, A3, A4 ) > > > ( slot );
-}
-
-
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-template<typename F_IN >
-SPTR( Slot< R ( A1, A2, A3 ) > ) Slot< Slot< R ( A1, A2, A3 ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A1, A2, A3 ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A1, A2, A3 ) > > > ( slot );
-}
-
-
-
-
-template<typename R, typename A1, typename A2 >
-template<typename F_IN >
-SPTR( Slot< R ( A1, A2 ) > ) Slot< Slot< R ( A1, A2 ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A1, A2 ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A1, A2 ) > > > ( slot );
-}
-
-
-
-
-template<typename R, typename A1 >
-template<typename F_IN >
-SPTR( Slot< R ( A1 ) > ) Slot< Slot< R ( A1 ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A1 ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A1 ) > > > ( slot );
-}
-
-
-
-
-template<typename R>
-template<typename F_IN >
-SPTR( Slot< R () > ) Slot< Slot< R () > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R () >::value
-        );
-    return boost::make_shared< Slot< Slot< R () > > > ( slot );
-}
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-template<typename F_IN >
-SPTR( Slot< R ( A... ) > ) Slot< Slot< R ( A... ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A... ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A... ) > > > ( slot );
-}
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif /* __FWCOM_SLOT_HXX__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/Slot.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/Slot.hxx.vrdc
deleted file mode 100644
index ef8bbad..0000000
--- a/SrcLib/core/fwCom/include/fwCom/Slot.hxx.vrdc
+++ /dev/null
@@ -1,112 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOT_HXX__
-#define __FWCOM_SLOT_HXX__
-
-#ifndef __FWCOM_SLOT_HPP__
-#error fwCom/Slot.hpp not included
-#endif
-
-#include <boost/function_types/function_arity.hpp>
-#include <boost/function_types/result_type.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits/is_same.hpp>
-
-#include "fwCom/util/AutoBind.hpp"
-#include "fwCom/util/AutoBind.hxx"
-
-#include "fwCom/SlotCall.hxx"
-
-namespace fwCom
-{
-
-
-
-template<typename R, typename ...A >
-template< typename F >
-Slot< Slot< R ( A... ) > >::Slot( SPTR( SlotRun< F > ) slot )
-    : Slot< FunctionType >(
-            ::fwCom::util::AutoBind<
-                    SignatureType,
-                    ::boost::function_types::function_arity< F >::value
-                >::wrap( &SlotRun< F >::run, slot.get() )
-                                                        )
-{
-    BOOST_STATIC_ASSERT( (boost::is_same<void, R>::value) );
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-template<typename R, typename ...A >
-template< typename F >
-Slot< Slot< R ( A... ) > >::Slot( SPTR( Slot< F > ) slot )
-: Slot< FunctionType >(
-        ::fwCom::util::AutoBind<
-                SignatureType,
-                ::boost::function_types::function_arity< F >::value
-            >::wrap( &Slot< F >::call, slot.get() )
-                                                    )
-{ 
-    this->setWorker(slot->getWorker());
-#ifdef COM_LOG
-    this->setID("wrapped_"+ slot->getID());
-#endif
-}
-
-
-
-
-template<typename F, typename ...BINDING>
-SPTR( Slot< typename ::fwCom::util::convert_function_type< F >::type > ) newSlot(F f, BINDING ...binding)
-{
-#ifndef BOOST_NO_VARIADIC_TEMPLATES
-    BOOST_STATIC_ASSERT( sizeof...(binding) < 2 );
-#else
-    SLM_ASSERT( "Too many arguments", ( sizeof...(binding) < 2 ) );
-#endif
-    typedef ::boost::function< typename ::fwCom::util::convert_function_type< F >::type > FunctionType;
-    FunctionType func = ::fwCom::util::autobind(f, binding...);
-    return ::boost::make_shared< Slot< FunctionType > > ( func );
-}
-
-template<typename R, typename ...A >
-template<typename F>
-SPTR( Slot< R ( A... ) > ) Slot< R ( A... ) >::New( F f )
-{
-    return newSlot(f);
-}
-
-
-template<typename R, typename ...A >
-template<typename F, typename O>
-SPTR( Slot< R ( A... ) > ) Slot< R ( A... ) >::New( F f, O o )
-{
-    return newSlot(f, o);
-}
-
-
-template<typename R, typename ...A >
-template<typename F_IN >
-SPTR( Slot< R ( A... ) > ) Slot< Slot< R ( A... ) > >::New( SPTR( SlotRun< F_IN > ) slot )
-{
-    assert (
-        ::boost::function_types::function_arity< F_IN >::value <= ::boost::function_types::function_arity< R ( A... ) >::value
-        );
-    return boost::make_shared< Slot< Slot< R ( A... ) > > > ( slot );
-}
-
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOT_HXX__ */
-
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp b/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp
index de8110c..5b9f634 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp
@@ -1,38 +1,43 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_SLOTBASE_HPP__
 #define __FWCOM_SLOTBASE_HPP__
 
-#include <set>
-#include <queue>
-
-#include <boost/foreach.hpp>
-#include <boost/thread/future.hpp>
-
-#ifdef COM_LOG
-#include <boost/lexical_cast.hpp>
-#endif
+#include "fwCom/config.hpp"
+#include "fwCom/util/convert_function_type.hpp"
 
-#include <fwCore/mt/types.hpp>
 #include <fwCore/BaseObject.hpp>
+#include <fwCore/mt/types.hpp>
 #include <fwCore/spyLog.hpp>
 
-#include "fwCom/config.hpp"
-#include "fwCom/util/convert_function_type.hpp"
+#include <boost/thread/future.hpp>
 
-fwCorePredeclare( (fwThread)(Worker) );
+#include <queue>
+#include <set>
+
+namespace fwThread
+{
+class Worker;
+}
 
 namespace fwCom
 {
 
+namespace util
+{
+template< typename T, typename R >
+struct WeakCall;
+}
+
 template< typename F >
 struct SlotRun;
 
 template< typename F >
-struct Slot;
+class Slot;
 
 struct SlotConnectionBase;
 
@@ -46,10 +51,10 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
      * @name typedefs
      * @{
      * Slot pointer types. */
-    typedef SPTR( SlotBase ) sptr;
-    typedef WPTR( SlotBase ) wptr;
-    typedef SPTR( SlotBase const ) csptr;
-    typedef WPTR( SlotBase const ) cwptr;
+    typedef SPTR ( SlotBase ) sptr;
+    typedef WPTR ( SlotBase ) wptr;
+    typedef SPTR ( SlotBase const ) csptr;
+    typedef WPTR ( SlotBase const ) cwptr;
 
     typedef std::string IDType;
     /**  @} */
@@ -60,7 +65,9 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
     /// Connections container type
     typedef std::set< CSPTR( SlotConnectionBase ) > ConnectionSetType;
 
-    virtual ~SlotBase() {};
+    virtual ~SlotBase()
+    {
+    }
 
     /**
      * @brief Returns Slot's arity.
@@ -72,7 +79,7 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
     }
 
     /// Sets Slot's Worker.
-    void setWorker(const SPTR(::fwThread::Worker) &worker)
+    void setWorker(const SPTR(::fwThread::Worker)& worker)
     {
         ::fwCore::mt::WriteLock lock(m_workerMutex);
 
@@ -93,9 +100,15 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
     /**
      * @name Run helpers
      * @{ */
-    template< typename A1, typename A2, typename A3 > void run(A1 a1, A2 a2, A3 a3) const;
-    template< typename A1, typename A2 > void run(A1 a1, A2 a2) const;
-    template< typename A1 > void run(A1 a1) const;
+    template< typename A1, typename A2, typename A3 >
+    void run(A1 a1, A2 a2, A3 a3) const;
+
+    template< typename A1, typename A2 >
+    void run(A1 a1, A2 a2) const;
+
+    template< typename A1 >
+    void run(A1 a1) const;
+
     FWCOM_API void run() const;
     /**  @} */
 
@@ -106,10 +119,17 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
     /**
      * @name Call helpers
      * @{ */
-    template< typename R, typename A1, typename A2, typename A3 > R call(A1 a1, A2 a2, A3 a3) const;
-    template< typename R, typename A1, typename A2 > R call(A1 a1, A2 a2) const;
-    template< typename R, typename A1 > R call(A1 a1) const;
-    template< typename R > R call() const;
+    template< typename R, typename A1, typename A2, typename A3 >
+    R call(A1 a1, A2 a2, A3 a3) const;
+
+    template< typename R, typename A1, typename A2 >
+    R call(A1 a1, A2 a2) const;
+
+    template< typename R, typename A1 >
+    R call(A1 a1) const;
+
+    template< typename R >
+    R call() const;
     /**  @} */
 
     /**
@@ -120,9 +140,15 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
     /**
      * @name Asynchronous run helpers
      * @{ */
-    template< typename A1, typename A2, typename A3 > VoidSharedFutureType asyncRun(A1 a1, A2 a2, A3 a3) const;
-    template< typename A1, typename A2 > VoidSharedFutureType asyncRun(A1 a1, A2 a2) const;
-    template< typename A1 > VoidSharedFutureType asyncRun(A1 a1) const;
+    template< typename A1, typename A2, typename A3 >
+    VoidSharedFutureType asyncRun(A1 a1, A2 a2, A3 a3) const;
+
+    template< typename A1, typename A2 >
+    VoidSharedFutureType asyncRun(A1 a1, A2 a2) const;
+
+    template< typename A1 >
+    VoidSharedFutureType asyncRun(A1 a1) const;
+
     FWCOM_API VoidSharedFutureType asyncRun() const;
     /**  @} */
 
@@ -134,10 +160,17 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
     /**
      * @name Asynchronous call helpers
      * @{ */
-    template< typename R, typename A1, typename A2, typename A3 > ::boost::shared_future< R > asyncCall(A1 a1, A2 a2, A3 a3) const;
-    template< typename R, typename A1, typename A2 > ::boost::shared_future< R > asyncCall(A1 a1, A2 a2) const;
-    template< typename R, typename A1 > ::boost::shared_future< R > asyncCall(A1 a1) const;
-    template< typename R > ::boost::shared_future< R > asyncCall() const;
+    template< typename R, typename A1, typename A2, typename A3 >
+    ::boost::shared_future< R > asyncCall(A1 a1, A2 a2, A3 a3) const;
+
+    template< typename R, typename A1, typename A2 >
+    ::boost::shared_future< R > asyncCall(A1 a1, A2 a2) const;
+
+    template< typename R, typename A1 >
+    ::boost::shared_future< R > asyncCall(A1 a1) const;
+
+    template< typename R >
+    ::boost::shared_future< R > asyncCall() const;
     /**  @} */
 
     /// Returns number of connections.
@@ -146,85 +179,56 @@ struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
         ::fwCore::mt::ReadLock lock(m_connectionsMutex);
         return m_connections.size();
     }
-protected:
+    protected:
 
-    /// Copy constructor forbidden
-    SlotBase( const SlotBase& );
+        /// Copy constructor forbidden
+        SlotBase( const SlotBase& );
 
-    /// Copy operator forbiden
-    SlotBase& operator=( const SlotBase& );
+        /// Copy operator forbidden
+        SlotBase& operator=( const SlotBase& );
 
-    /**
-     * @name SlotBase's friends
-     * @{ */
-    template < typename F >
-    friend struct SlotConnection;
+        /**
+         * @name SlotBase's friends
+         * @{ */
+        template < typename F >
+        friend struct SlotConnection;
 
-    template < typename F >
-    friend struct Signal;
-    /**  @} */
+        template < typename F >
+        friend struct Signal;
 
+        template< typename T, typename R >
+        friend struct util::WeakCall;
 
-    /// Returns F typeid name.
-    template < typename F >
-    std::string getTypeName() const
-    {
-        std::string signature = std::string("function_type(") + typeid(F).name() + ")";
-        return signature;
-    }
+        /**  @} */
 
-    SlotBase(unsigned int arity) : m_arity(arity)
-    {
-#ifdef COM_LOG
-        ::fwCore::mt::ScopedLock lock(s_mutexCounter);
-        m_id = "Slot-" + ::boost::lexical_cast<std::string>(s_idCount++);
-#endif
-    };
-
-
-    /// Slot's signature based on typeid.
-    std::string m_signature;
-
-    /// Slot's arity.
-    const unsigned int m_arity;
-
-    /// Slot's Worker.
-    SPTR(::fwThread::Worker) m_worker;
-
-    /// Container of current connections.
-    ConnectionSetType m_connections;
 
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-    mutable ::fwCore::mt::ReadWriteMutex m_workerMutex;
+        /// Returns F typeid name.
+        template < typename F >
+        std::string getTypeName() const
+        {
+            std::string signature = std::string("function_type(") + typeid(F).name() + ")";
+            return signature;
+        }
 
-#ifdef COM_LOG
+        SlotBase(unsigned int arity) : m_arity(arity)
+        {
+        }
 
-public:
-
-    /// Gets current m_id
-    IDType getID() const
-    {
-        return m_id;
-    }
-
-    /// Sets new m_id
-    void setID( IDType newId )
-    {
-        m_id = newId;
-    }
 
-private :
+        /// Slot's signature based on typeid.
+        std::string m_signature;
 
-    /// Id of signal (not mandatory)
-    IDType m_id;
+        /// Slot's arity.
+        const unsigned int m_arity;
 
-    /// Id counter
-    FWCOM_API static size_t s_idCount;
+        /// Slot's Worker.
+        SPTR(::fwThread::Worker) m_worker;
 
-    /// Mutex to protect id counter
-    FWCOM_API static ::fwCore::mt::Mutex s_mutexCounter;
+        /// Container of current connections.
+        ConnectionSetType m_connections;
 
-#endif
+        mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
+        mutable ::fwCore::mt::ReadWriteMutex m_workerMutex;
 };
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp.vrdc
deleted file mode 100644
index de8110c..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotBase.hpp.vrdc
+++ /dev/null
@@ -1,233 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTBASE_HPP__
-#define __FWCOM_SLOTBASE_HPP__
-
-#include <set>
-#include <queue>
-
-#include <boost/foreach.hpp>
-#include <boost/thread/future.hpp>
-
-#ifdef COM_LOG
-#include <boost/lexical_cast.hpp>
-#endif
-
-#include <fwCore/mt/types.hpp>
-#include <fwCore/BaseObject.hpp>
-#include <fwCore/spyLog.hpp>
-
-#include "fwCom/config.hpp"
-#include "fwCom/util/convert_function_type.hpp"
-
-fwCorePredeclare( (fwThread)(Worker) );
-
-namespace fwCom
-{
-
-template< typename F >
-struct SlotRun;
-
-template< typename F >
-struct Slot;
-
-struct SlotConnectionBase;
-
-/**
- * @brief Base class for Slot implementations.
- */
-struct FWCOM_CLASS_API SlotBase : virtual fwCore::BaseObject
-{
-
-    /**
-     * @name typedefs
-     * @{
-     * Slot pointer types. */
-    typedef SPTR( SlotBase ) sptr;
-    typedef WPTR( SlotBase ) wptr;
-    typedef SPTR( SlotBase const ) csptr;
-    typedef WPTR( SlotBase const ) cwptr;
-
-    typedef std::string IDType;
-    /**  @} */
-
-    /// SlotBase::asyncRun return type.
-    typedef ::boost::shared_future< void > VoidSharedFutureType;
-
-    /// Connections container type
-    typedef std::set< CSPTR( SlotConnectionBase ) > ConnectionSetType;
-
-    virtual ~SlotBase() {};
-
-    /**
-     * @brief Returns Slot's arity.
-     * The arity defines the number of parameters in Slot signature.
-     */
-    unsigned int arity() const
-    {
-        return m_arity;
-    }
-
-    /// Sets Slot's Worker.
-    void setWorker(const SPTR(::fwThread::Worker) &worker)
-    {
-        ::fwCore::mt::WriteLock lock(m_workerMutex);
-
-        m_worker = worker;
-    }
-
-    /// Returns Slot's Worker.
-    SPTR(::fwThread::Worker) getWorker() const
-    {
-        ::fwCore::mt::ReadLock lock(m_workerMutex);
-        return m_worker;
-    }
-
-    /**
-     * @brief  Run the Slot.
-     * @throw  BadRun if given arguments do not match the slot implementation
-     */
-    /**
-     * @name Run helpers
-     * @{ */
-    template< typename A1, typename A2, typename A3 > void run(A1 a1, A2 a2, A3 a3) const;
-    template< typename A1, typename A2 > void run(A1 a1, A2 a2) const;
-    template< typename A1 > void run(A1 a1) const;
-    FWCOM_API void run() const;
-    /**  @} */
-
-    /**
-     * @brief  Call the Slot (with return value).
-     * @throw  BadCall if given arguments do not match the slot implementation
-     */
-    /**
-     * @name Call helpers
-     * @{ */
-    template< typename R, typename A1, typename A2, typename A3 > R call(A1 a1, A2 a2, A3 a3) const;
-    template< typename R, typename A1, typename A2 > R call(A1 a1, A2 a2) const;
-    template< typename R, typename A1 > R call(A1 a1) const;
-    template< typename R > R call() const;
-    /**  @} */
-
-    /**
-     * @brief  Run the Slot asynchronously.
-     * @throw  BadRun if given arguments do not match the slot implementation
-     * @throws NoWorker if given worker is not valid.
-     */
-    /**
-     * @name Asynchronous run helpers
-     * @{ */
-    template< typename A1, typename A2, typename A3 > VoidSharedFutureType asyncRun(A1 a1, A2 a2, A3 a3) const;
-    template< typename A1, typename A2 > VoidSharedFutureType asyncRun(A1 a1, A2 a2) const;
-    template< typename A1 > VoidSharedFutureType asyncRun(A1 a1) const;
-    FWCOM_API VoidSharedFutureType asyncRun() const;
-    /**  @} */
-
-    /**
-     * @brief  Call the Slot asynchronously (with return value).
-     * @throw  BadCall if given arguments do not match the slot implementation
-     * @throws NoWorker if given worker is not valid.
-     */
-    /**
-     * @name Asynchronous call helpers
-     * @{ */
-    template< typename R, typename A1, typename A2, typename A3 > ::boost::shared_future< R > asyncCall(A1 a1, A2 a2, A3 a3) const;
-    template< typename R, typename A1, typename A2 > ::boost::shared_future< R > asyncCall(A1 a1, A2 a2) const;
-    template< typename R, typename A1 > ::boost::shared_future< R > asyncCall(A1 a1) const;
-    template< typename R > ::boost::shared_future< R > asyncCall() const;
-    /**  @} */
-
-    /// Returns number of connections.
-    size_t getNumberOfConnections() const
-    {
-        ::fwCore::mt::ReadLock lock(m_connectionsMutex);
-        return m_connections.size();
-    }
-protected:
-
-    /// Copy constructor forbidden
-    SlotBase( const SlotBase& );
-
-    /// Copy operator forbiden
-    SlotBase& operator=( const SlotBase& );
-
-    /**
-     * @name SlotBase's friends
-     * @{ */
-    template < typename F >
-    friend struct SlotConnection;
-
-    template < typename F >
-    friend struct Signal;
-    /**  @} */
-
-
-    /// Returns F typeid name.
-    template < typename F >
-    std::string getTypeName() const
-    {
-        std::string signature = std::string("function_type(") + typeid(F).name() + ")";
-        return signature;
-    }
-
-    SlotBase(unsigned int arity) : m_arity(arity)
-    {
-#ifdef COM_LOG
-        ::fwCore::mt::ScopedLock lock(s_mutexCounter);
-        m_id = "Slot-" + ::boost::lexical_cast<std::string>(s_idCount++);
-#endif
-    };
-
-
-    /// Slot's signature based on typeid.
-    std::string m_signature;
-
-    /// Slot's arity.
-    const unsigned int m_arity;
-
-    /// Slot's Worker.
-    SPTR(::fwThread::Worker) m_worker;
-
-    /// Container of current connections.
-    ConnectionSetType m_connections;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_connectionsMutex;
-    mutable ::fwCore::mt::ReadWriteMutex m_workerMutex;
-
-#ifdef COM_LOG
-
-public:
-
-    /// Gets current m_id
-    IDType getID() const
-    {
-        return m_id;
-    }
-
-    /// Sets new m_id
-    void setID( IDType newId )
-    {
-        m_id = newId;
-    }
-
-private :
-
-    /// Id of signal (not mandatory)
-    IDType m_id;
-
-    /// Id counter
-    FWCOM_API static size_t s_idCount;
-
-    /// Mutex to protect id counter
-    FWCOM_API static ::fwCore::mt::Mutex s_mutexCounter;
-
-#endif
-};
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTBASE_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx b/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx
index 79553f6..caacc31 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -29,7 +29,7 @@ namespace fwCom
 template< typename A1, typename A2, typename A3 >
 void SlotBase::run(A1 a1, A2 a2, A3 a3) const
 {
-    typedef SlotRun< void(A1, A2, A3) > SlotFuncType;
+    typedef SlotRun< void (A1, A2, A3) > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -42,10 +42,12 @@ void SlotBase::run(A1 a1, A2 a2, A3 a3) const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename A1, typename A2 >
 void SlotBase::run(A1 a1, A2 a2) const
 {
-    typedef SlotRun< void(A1, A2) > SlotFuncType;
+    typedef SlotRun< void (A1, A2) > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -58,10 +60,12 @@ void SlotBase::run(A1 a1, A2 a2) const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename A1 >
 void SlotBase::run(A1 a1) const
 {
-    typedef SlotRun< void(A1) > SlotFuncType;
+    typedef SlotRun< void (A1) > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -92,6 +96,8 @@ R SlotBase::call(A1 a1, A2 a2, A3 a3) const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename R, typename A1, typename A2 >
 R SlotBase::call(A1 a1, A2 a2) const
 {
@@ -108,6 +114,8 @@ R SlotBase::call(A1 a1, A2 a2) const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename R, typename A1 >
 R SlotBase::call(A1 a1) const
 {
@@ -124,6 +132,8 @@ R SlotBase::call(A1 a1) const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename R >
 R SlotBase::call() const
 {
@@ -142,7 +152,7 @@ R SlotBase::call() const
 template< typename A1, typename A2, typename A3 >
 SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1, A2 a2, A3 a3) const
 {
-    typedef SlotRun< void(A1, A2, A3) > SlotFuncType;
+    typedef SlotRun< void (A1, A2, A3) > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -150,15 +160,18 @@ SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1, A2 a2, A3 a3) const
     }
     else
     {
-        OSLM_ERROR(  "failed to asyncRun : " << m_signature << " with " << SlotBase::getTypeName< void(A1, A2, A3) >() );
+        OSLM_ERROR(  "failed to asyncRun : " << m_signature << " with " <<
+                     SlotBase::getTypeName< void(A1, A2, A3) >() );
         return this->asyncRun(a1,a2);
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename A1, typename A2 >
 SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1, A2 a2) const
 {
-    typedef SlotRun< void(A1, A2) > SlotFuncType;
+    typedef SlotRun< void (A1, A2) > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -171,10 +184,12 @@ SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1, A2 a2) const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename A1 >
 SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1) const
 {
-    typedef SlotRun< void(A1) > SlotFuncType;
+    typedef SlotRun< void (A1) > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -205,6 +220,8 @@ template< typename R, typename A1, typename A2, typename A3 >
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename R, typename A1, typename A2 >
 ::boost::shared_future< R > SlotBase::asyncCall(A1 a1, A2 a2) const
 {
@@ -221,6 +238,8 @@ template< typename R, typename A1, typename A2 >
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename R, typename A1 >
 ::boost::shared_future< R > SlotBase::asyncCall(A1 a1) const
 {
@@ -237,6 +256,8 @@ template< typename R, typename A1 >
     }
 }
 
+//-----------------------------------------------------------------------------
+
 template< typename R >
 ::boost::shared_future< R > SlotBase::asyncCall() const
 {
@@ -253,10 +274,7 @@ template< typename R >
     }
 }
 
-
-
-
-
+//-----------------------------------------------------------------------------
 
 } // namespace fwCom
 
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx.vrdc
deleted file mode 100644
index 79553f6..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotBase.hxx.vrdc
+++ /dev/null
@@ -1,265 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTBASE_HXX__
-#define __FWCOM_SLOTBASE_HXX__
-
-#ifndef __FWCOM_SLOTBASE_HPP__
-#error fwCom/SlotBase.hpp not included
-#endif
-
-#include <boost/function.hpp>
-
-#include <boost/function_types/function_arity.hpp>
-
-#include "fwCom/exception/BadCall.hpp"
-
-#include "fwCom/SlotRun.hpp"
-#include "fwCom/SlotRun.hxx"
-#include "fwCom/Slot.hpp"
-#include "fwCom/Slot.hxx"
-
-
-namespace fwCom
-{
-
-
-template< typename A1, typename A2, typename A3 >
-void SlotBase::run(A1 a1, A2 a2, A3 a3) const
-{
-    typedef SlotRun< void(A1, A2, A3) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1,a2,a3);
-    }
-    else
-    {
-        OSLM_ERROR( "failed to run : " << m_signature << " with " << SlotBase::getTypeName< void(A1, A2, A3) >() );
-        this->run(a1,a2);
-    }
-}
-
-template< typename A1, typename A2 >
-void SlotBase::run(A1 a1, A2 a2) const
-{
-    typedef SlotRun< void(A1, A2) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1,a2);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to run : " << m_signature << " with " << SlotBase::getTypeName< void(A1, A2) >() );
-        this->run(a1);
-    }
-}
-
-template< typename A1 >
-void SlotBase::run(A1 a1) const
-{
-    typedef SlotRun< void(A1) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->run(a1);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to run : " << m_signature << " with " << SlotBase::getTypeName< void(A1) >() );
-        return this->run();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-template< typename R, typename A1, typename A2, typename A3 >
-R SlotBase::call(A1 a1, A2 a2, A3 a3) const
-{
-    typedef Slot< R (A1, A2, A3) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1,a2,a3);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to call : " << m_signature << " with " << SlotBase::getTypeName< R(A1, A2, A3) >() );
-        return this->call<R>(a1,a2);
-    }
-}
-
-template< typename R, typename A1, typename A2 >
-R SlotBase::call(A1 a1, A2 a2) const
-{
-    typedef Slot< R(A1, A2) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1,a2);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to call : " << m_signature << " with " << SlotBase::getTypeName< R(A1, A2) >() );
-        return this->call<R>(a1);
-    }
-}
-
-template< typename R, typename A1 >
-R SlotBase::call(A1 a1) const
-{
-    typedef Slot< R(A1) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to call : " << m_signature << " with " << SlotBase::getTypeName< R(A1) >() );
-        return this->call<R>();
-    }
-}
-
-template< typename R >
-R SlotBase::call() const
-{
-    typedef Slot< R() > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call();
-    }
-    OSLM_ERROR( "failed to call : " + m_signature + " with " + SlotBase::getTypeName< R() >() );
-    FW_RAISE_EXCEPTION( ::fwCom::exception::BadCall( "Failed to find right signature for call" ) );
-}
-
-//------------------------------------------------------------------------------
-
-template< typename A1, typename A2, typename A3 >
-SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1, A2 a2, A3 a3) const
-{
-    typedef SlotRun< void(A1, A2, A3) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncRun(a1,a2,a3);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to asyncRun : " << m_signature << " with " << SlotBase::getTypeName< void(A1, A2, A3) >() );
-        return this->asyncRun(a1,a2);
-    }
-}
-
-template< typename A1, typename A2 >
-SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1, A2 a2) const
-{
-    typedef SlotRun< void(A1, A2) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncRun(a1,a2);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to asyncRun : " << m_signature << " with " << SlotBase::getTypeName< void(A1, A2) >() );
-        return this->asyncRun(a1);
-    }
-}
-
-template< typename A1 >
-SlotBase::VoidSharedFutureType SlotBase::asyncRun(A1 a1) const
-{
-    typedef SlotRun< void(A1) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncRun(a1);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to asyncRun : " << m_signature << " with " << SlotBase::getTypeName< void(A1) >() );
-        return this->asyncRun();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-template< typename R, typename A1, typename A2, typename A3 >
-::boost::shared_future< R > SlotBase::asyncCall(A1 a1, A2 a2, A3 a3) const
-{
-    typedef Slot< R(A1, A2, A3) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncCall(a1,a2,a3);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to asyncCall : " << m_signature << " with " << SlotBase::getTypeName< R(A1, A2, A3) >() );
-        return this->asyncCall<R>(a1,a2);
-    }
-}
-
-template< typename R, typename A1, typename A2 >
-::boost::shared_future< R > SlotBase::asyncCall(A1 a1, A2 a2) const
-{
-    typedef Slot< R(A1, A2) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncCall(a1,a2);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to asyncCall : " << m_signature << " with " << SlotBase::getTypeName< R(A1, A2) >() );
-        return this->asyncCall<R>(a1);
-    }
-}
-
-template< typename R, typename A1 >
-::boost::shared_future< R > SlotBase::asyncCall(A1 a1) const
-{
-    typedef Slot< R(A1) > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncCall(a1);
-    }
-    else
-    {
-        OSLM_ERROR(  "failed to asyncCall : " << m_signature << " with " << SlotBase::getTypeName< R(A1) >() );
-        return this->asyncCall<R>();
-    }
-}
-
-template< typename R >
-::boost::shared_future< R > SlotBase::asyncCall() const
-{
-    typedef Slot< R() > SlotFuncType;
-    const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->asyncCall();
-    }
-    else
-    {
-        OSLM_ERROR( "failed to asyncCall : " + m_signature + " with " + SlotBase::getTypeName< R() >() );
-        FW_RAISE_EXCEPTION( ::fwCom::exception::BadCall( "Failed to find right signature for asyncCall" ) );
-    }
-}
-
-
-
-
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTBASE_HXX__ */
-
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp b/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp
index 107017d..d9a2a13 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp
@@ -1,14 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_SLOTCALL_HPP__
 #define __FWCOM_SLOTCALL_HPP__
 
 #include "fwCom/SlotRun.hpp"
 
-fwCorePredeclare( (fwThread)(Worker) );
+namespace fwThread
+{
+class Worker;
+}
 
 namespace fwCom
 {
@@ -22,305 +26,32 @@ struct SlotCall;
  * @tparam R Slot's return type.
  * @tparam A Slot's arguments types.
  */
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct SlotCall< R ( A1, A2, A3, A4, A5 ) > : SlotRun< void ( A1, A2, A3, A4, A5 ) >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2, A3, A4, A5 );
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void ( A1, A2, A3, A4, A5 ) >() {}
-
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call( A1, A2, A3, A4, A5 ) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const;
-};
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-struct SlotCall< R ( A1, A2, A3, A4 ) > : SlotRun< void ( A1, A2, A3, A4 ) >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2, A3, A4 );
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void ( A1, A2, A3, A4 ) >() {}
-
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call( A1, A2, A3, A4 ) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2, A3 args3, A4 args4 ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A1 args1, A2 args2, A3 args3, A4 args4 ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4 ) const;
-};
-template< typename R, typename A1, typename A2, typename A3 >
-struct SlotCall< R ( A1, A2, A3 ) > : SlotRun< void ( A1, A2, A3 ) >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2, A3 );
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void ( A1, A2, A3 ) >() {}
-
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call( A1, A2, A3 ) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2, A3 args3 ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A1 args1, A2 args2, A3 args3 ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3 ) const;
-};
-template< typename R, typename A1, typename A2 >
-struct SlotCall< R ( A1, A2 ) > : SlotRun< void ( A1, A2 ) >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType( A1, A2 );
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void ( A1, A2 ) >() {}
-
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call( A1, A2 ) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2 ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A1 args1, A2 args2 ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A1 args1, A2 args2 ) const;
-};
-template< typename R, typename A1 >
-struct SlotCall< R ( A1 ) > : SlotRun< void ( A1 ) >
+template< typename R, typename ... A >
+struct SlotCall< R (A ...) > : SlotRun< void ( A ... ) >
 {
     /**
      * @name Typedefs
      * @{ */
-    typedef R SignatureType( A1 );
+    typedef R SignatureType (A ...);
     typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
+    typedef SPTR ( SelfType ) sptr;
+    typedef WPTR ( SelfType ) wptr;
     typedef ::boost::shared_future< R > SharedFutureType;
     /**  @} */
 
 
-    SlotCall() :  SlotRun< void ( A1 ) >() {}
+    SlotCall() :  SlotRun< void ( A ... ) >()
+    {
+    }
 
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call( A1 ) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A1 args1 ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A1 args1 ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A1 args1 ) const;
-};
-template< typename R>
-struct SlotCall< R () > : SlotRun< void () >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType();
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void () >() {}
+    virtual ~SlotCall()
+    {
+    }
 
     /**
      * @brief Call the Slot with the given parameters.
      */
-    virtual R call() const = 0;
+    virtual R call(A ...) const = 0;
 
     /**
      * @brief Call the Slot with the given parameters asynchronously.
@@ -332,7 +63,7 @@ struct SlotCall< R () > : SlotRun< void () >
      *
      * @throws NoWorker if given worker is not valid.
      */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker) const;
+    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker)& worker, A ... args ) const;
 
     /**
      * @brief Call the Slot with the given parameters asynchronously.
@@ -342,82 +73,20 @@ struct SlotCall< R () > : SlotRun< void () >
      * @return a shared_future object associated with Slot's call result.
      * @throws NoWorker if slot has no worker set.
      */
-    virtual SharedFutureType asyncCall() const;
+    virtual SharedFutureType asyncCall( A ... args ) const;
 
-protected:
+    protected:
 
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
+        template< typename WEAKCALL >
+        static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker)& worker, WEAKCALL f );
 
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall() const;
+        /**
+         * @brief Binds the given parameters to the call method within a R() function.
+         *
+         * @return a R() function.
+         */
+        virtual ::boost::function< R() > bindCall( A ... args  ) const;
 };
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename R, typename ...A >
-struct SlotCall< R (A...) > : SlotRun< void ( A... ) >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType(A...);
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void ( A... ) >() {}
-
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call(A...) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A... args ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A... args ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A...args  ) const;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
 
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp.vrdc
deleted file mode 100644
index d60aa6f..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotCall.hpp.vrdc
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTCALL_HPP__
-#define __FWCOM_SLOTCALL_HPP__
-
-#include "fwCom/SlotRun.hpp"
-
-fwCorePredeclare( (fwThread)(Worker) );
-
-namespace fwCom
-{
-
-template< typename F >
-struct SlotCall;
-
-/**
- * @brief Slot call interface (call with return value).
- *
- * @tparam R Slot's return type.
- * @tparam A Slot's arguments types.
- */
-template< typename R, typename ...A >
-struct SlotCall< R (A...) > : SlotRun< void ( A... ) >
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef R SignatureType(A...);
-    typedef SlotCall< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    typedef ::boost::shared_future< R > SharedFutureType;
-    /**  @} */
-
-
-    SlotCall() :  SlotRun< void ( A... ) >() {}
-
-    /**
-     * @brief Call the Slot with the given parameters.
-     */
-    virtual R call(A...) const = 0;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     *
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SharedFutureType asyncCall( const SPTR(::fwThread::Worker) &worker, A... args ) const;
-
-    /**
-     * @brief Call the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's call result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SharedFutureType asyncCall( A... args ) const;
-
-protected:
-
-    template< typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the call method within a R() function.
-     *
-     * @return a R() function.
-     */
-    virtual ::boost::function< R() > bindCall( A...args  ) const;
-};
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTCALL_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx b/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx
index 6c0e192..afdc9e0 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,506 +10,52 @@
 #error fwCom/SlotCall.hpp not included
 #endif
 
-#include <boost/thread/future.hpp>
+#include "fwCom/exception/NoWorker.hpp"
+#include "fwCom/util/WeakCall.hpp"
+#include "fwCom/SlotRun.hxx"
 
 #include <fwCore/mt/types.hpp>
 
 #include <fwThread/TaskHandler.hpp>
 #include <fwThread/Worker.hpp>
 
-#include "fwCom/exception/NoWorker.hpp"
-
-#include "fwCom/util/WeakCall.hpp"
-
-#include "fwCom/SlotRun.hxx"
-
-#include "fwCom/util/log.hpp"
+#include <boost/thread/future.hpp>
 
 namespace fwCom
 {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< R() > SlotCall< R ( A1, A2, A3, A4, A5 ) >::bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const
-{
-    return ::boost::bind( ( R (SlotCall< R ( A1, A2, A3, A4, A5 ) >::*)( A1, A2, A3, A4, A5 )const ) &SlotCall< R ( A1, A2, A3, A4, A5 ) >::call, this, args1, args2, args3, args4, args5 );
-}
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< R() > SlotCall< R ( A1, A2, A3, A4 ) >::bindCall( A1 args1, A2 args2, A3 args3, A4 args4 ) const
-{
-    return ::boost::bind( ( R (SlotCall< R ( A1, A2, A3, A4 ) >::*)( A1, A2, A3, A4 )const ) &SlotCall< R ( A1, A2, A3, A4 ) >::call, this, args1, args2, args3, args4 );
-}
-
-
-template< typename R, typename A1, typename A2, typename A3 >
-::boost::function< R() > SlotCall< R ( A1, A2, A3 ) >::bindCall( A1 args1, A2 args2, A3 args3 ) const
-{
-    return ::boost::bind( ( R (SlotCall< R ( A1, A2, A3 ) >::*)( A1, A2, A3 )const ) &SlotCall< R ( A1, A2, A3 ) >::call, this, args1, args2, args3 );
-}
-
-
-template< typename R, typename A1, typename A2 >
-::boost::function< R() > SlotCall< R ( A1, A2 ) >::bindCall( A1 args1, A2 args2 ) const
-{
-    return ::boost::bind( ( R (SlotCall< R ( A1, A2 ) >::*)( A1, A2 )const ) &SlotCall< R ( A1, A2 ) >::call, this, args1, args2 );
-}
-
-
-template< typename R, typename A1 >
-::boost::function< R() > SlotCall< R ( A1 ) >::bindCall( A1 args1 ) const
-{
-    return ::boost::bind( ( R (SlotCall< R ( A1 ) >::*)( A1 )const ) &SlotCall< R ( A1 ) >::call, this, args1 );
-}
-
-
-template< typename R>
-::boost::function< R() > SlotCall< R () >::bindCall() const
-{
-    return ::boost::bind( ( R (SlotCall< R () >::*)()const ) &SlotCall< R () >::call, this);
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename R, typename ...A >
-::boost::function< R() > SlotCall< R (A...) >::bindCall( A...args  ) const
-{
-    return ::boost::bind( ( R (SlotCall< R (A...) >::*)( A... )const ) &SlotCall< R (A...) >::call, this, args... );
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    typename SlotCall< R ( A1, A2, A3, A4, A5 ) >::SharedFutureType
-    SlotCall< R ( A1, A2, A3, A4, A5 ) >::asyncCall( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args1, args2, args3, args4, args5 ) ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args1, args2, args3, args4, args5 ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2, args3, args4, args5 )
-                        )
-                );
-}
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-    typename SlotCall< R ( A1, A2, A3, A4 ) >::SharedFutureType
-    SlotCall< R ( A1, A2, A3, A4 ) >::asyncCall( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2, A3 args3, A4 args4 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args1, args2, args3, args4 ) ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args1, args2, args3, args4 ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2, args3, args4 )
-                        )
-                );
-}
-
-
-
-template< typename R, typename A1, typename A2, typename A3 >
-    typename SlotCall< R ( A1, A2, A3 ) >::SharedFutureType
-    SlotCall< R ( A1, A2, A3 ) >::asyncCall( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2, A3 args3 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args1, args2, args3 ) ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args1, args2, args3 ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2, args3 )
-                        )
-                );
-}
-
-
-
-template< typename R, typename A1, typename A2 >
-    typename SlotCall< R ( A1, A2 ) >::SharedFutureType
-    SlotCall< R ( A1, A2 ) >::asyncCall( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args1, args2 ) ) );
 
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args1, args2 ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2 )
-                        )
-                );
-}
 
-
-
-template< typename R, typename A1 >
-    typename SlotCall< R ( A1 ) >::SharedFutureType
-    SlotCall< R ( A1 ) >::asyncCall( const ::fwThread::Worker::sptr &worker, A1 args1 ) const
+template< typename R, typename ... A >
+::boost::function< R() > SlotCall< R (A ...) >::bindCall( A ... args  ) const
 {
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args1 ) ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args1 ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1 )
-                        )
-                );
+    return ::boost::bind( ( R (SlotCall< R (A ...) >::*)( A ... ) const ) &SlotCall< R (A ...) >::call, this,
+                          args ... );
 }
 
+//-----------------------------------------------------------------------------
 
-
-template< typename R>
-    typename SlotCall< R () >::SharedFutureType
-    SlotCall< R () >::asyncCall( const ::fwThread::Worker::sptr &worker) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall() ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall(),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall()
-                        )
-                );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename R, typename ...A >
-    typename SlotCall< R (A...) >::SharedFutureType
-    SlotCall< R (A...) >::asyncCall( const ::fwThread::Worker::sptr &worker, A... args ) const
+template< typename R, typename ... A >
+typename SlotCall< R (A ...) >::SharedFutureType SlotCall< R (A ...) >::asyncCall(
+    const ::fwThread::Worker::sptr& worker, A ... args ) const
 {
     if(!worker)
     {
         FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
     }
 
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args... ) ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args... ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args... )
-                        )
-                );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-typename SlotCall< R ( A1, A2, A3, A4, A5 ) >::SharedFutureType
-SlotCall< R ( A1, A2, A3, A4, A5 ) >::asyncCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R ( A1, A2, A3, A4, A5 ) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args1, args2, args3, args4, args5 );
-    // return ufuture;
-
-    return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2, args3, args4, args5 ),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-typename SlotCall< R ( A1, A2, A3, A4 ) >::SharedFutureType
-SlotCall< R ( A1, A2, A3, A4 ) >::asyncCall( A1 args1, A2 args2, A3 args3, A4 args4 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R ( A1, A2, A3, A4 ) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args1, args2, args3, args4 );
-    // return ufuture;
-
     return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2, args3, args4 ),
-                        this->m_workerMutex
-                        )
-                );
+        worker,
+        ::fwCom::util::weakcall(
+            std::dynamic_pointer_cast< const SlotBase >(this->shared_from_this()),
+            this->bindCall( args ... )
+            )
+        );
 }
 
+//-----------------------------------------------------------------------------
 
-
-template< typename R, typename A1, typename A2, typename A3 >
-typename SlotCall< R ( A1, A2, A3 ) >::SharedFutureType
-SlotCall< R ( A1, A2, A3 ) >::asyncCall( A1 args1, A2 args2, A3 args3 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R ( A1, A2, A3 ) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args1, args2, args3 );
-    // return ufuture;
-
-    return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2, args3 ),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-
-template< typename R, typename A1, typename A2 >
-typename SlotCall< R ( A1, A2 ) >::SharedFutureType
-SlotCall< R ( A1, A2 ) >::asyncCall( A1 args1, A2 args2 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R ( A1, A2 ) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args1, args2 );
-    // return ufuture;
-
-    return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1, args2 ),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-
-template< typename R, typename A1 >
-typename SlotCall< R ( A1 ) >::SharedFutureType
-SlotCall< R ( A1 ) >::asyncCall( A1 args1 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R ( A1 ) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args1 );
-    // return ufuture;
-
-    return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args1 ),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-
-template< typename R>
-typename SlotCall< R () >::SharedFutureType
-SlotCall< R () >::asyncCall() const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R () >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker);
-    // return ufuture;
-
-    return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall(),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename R, typename ... A >
-typename SlotCall< R (A...) >::SharedFutureType
-SlotCall< R (A...) >::asyncCall(A... args) const
+typename SlotCall< R (A ...) >::SharedFutureType SlotCall< R (A ...) >::asyncCall(A ... args) const
 {
     ::fwCore::mt::ReadLock lock(this->m_workerMutex);
 
@@ -518,132 +64,21 @@ SlotCall< R (A...) >::asyncCall(A... args) const
         FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
     }
 
-    // typename SlotCall< R (A...) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args...);
-    // return ufuture;
-
     return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args... ),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R ( A1, A2, A3, A4, A5 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R ( A1, A2, A3, A4 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
+        this->m_worker,
+        ::fwCom::util::weakcall(
+            std::dynamic_pointer_cast< const SlotBase >(this->shared_from_this()),
+            this->bindCall( args ... ),
+            this->m_worker
+            )
+        );
 }
 
+//-----------------------------------------------------------------------------
 
-
-template< typename R, typename A1, typename A2, typename A3 >
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R ( A1, A2, A3 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename R, typename A1, typename A2 >
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R ( A1, A2 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename R, typename A1 >
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R ( A1 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename R>
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R () >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename R, typename ... A >
 template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R (A...) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
+::boost::shared_future< R > SlotCall< R (A ...) >::postWeakCall( const ::fwThread::Worker::sptr& worker, WEAKCALL f )
 {
     ::boost::packaged_task< R > task( f );
     ::boost::future< R > ufuture = task.get_future();
@@ -656,8 +91,6 @@ template< typename WEAKCALL >
 }
 
 
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif /* __FWCOM_SLOTCALL_HXX__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx.vrdc
deleted file mode 100644
index b6a00d6..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotCall.hxx.vrdc
+++ /dev/null
@@ -1,115 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTCALL_HXX__
-#define __FWCOM_SLOTCALL_HXX__
-
-#ifndef __FWCOM_SLOTCALL_HPP__
-#error fwCom/SlotCall.hpp not included
-#endif
-
-#include <boost/thread/future.hpp>
-
-#include <fwCore/mt/types.hpp>
-
-#include <fwThread/TaskHandler.hpp>
-#include <fwThread/Worker.hpp>
-
-#include "fwCom/exception/NoWorker.hpp"
-
-#include "fwCom/util/WeakCall.hpp"
-
-#include "fwCom/SlotRun.hxx"
-
-#include "fwCom/util/log.hpp"
-
-namespace fwCom
-{
-
-
-template< typename R, typename ...A >
-::boost::function< R() > SlotCall< R (A...) >::bindCall( A...args  ) const
-{
-    return ::boost::bind( ( R (SlotCall< R (A...) >::*)( A... )const ) &SlotCall< R (A...) >::call, this, args... );
-}
-
-template< typename R, typename ...A >
-    typename SlotCall< R (A...) >::SharedFutureType
-    SlotCall< R (A...) >::asyncCall( const ::fwThread::Worker::sptr &worker, A... args ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncCall '"<< this->getID() <<"' slot");
-    // ::boost::packaged_task<R>   task( ::fwCom::util::weakcall( this->shared_from_this(), this->bindCall( args... ) ) );
-
-    // ::boost::packaged_task< R > task(::fwCom::util::weakcall(
-    //                             this->shared_from_this(),
-    //                             this->bindCall( args... ),
-    //                             this->m_workerMutex ));
-
-    // ::boost::future< R > ufuture = task.get_future();
-    // ::boost::function< void() > f = ::fwThread::moveTaskIntoFunction(task);
-    // worker->post(f);
-
-    // return ::boost::move(ufuture);
-
-    return postWeakCall(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args... )
-                        )
-                );
-}
-
-
-template< typename R, typename ... A >
-typename SlotCall< R (A...) >::SharedFutureType
-SlotCall< R (A...) >::asyncCall(A... args) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    // typename SlotCall< R (A...) >::SharedFutureType ufuture;
-    // ufuture = this->asyncCall(this->m_worker, args...);
-    // return ufuture;
-
-    return postWeakCall(
-                this->m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindCall( args... ),
-                        this->m_workerMutex
-                        )
-                );
-}
-
-
-template< typename R, typename ... A >
-template< typename WEAKCALL >
-::boost::shared_future< R > SlotCall< R (A...) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTCALL_HXX__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp b/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp
index f964c2d..facbf28 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,6 +8,7 @@
 
 #include "fwCom/SlotConnectionBase.hpp"
 
+#include "fwCom/SlotBase.hpp"
 
 namespace fwCom
 {
@@ -18,420 +19,30 @@ struct Signal;
 template < typename F >
 struct SlotConnection;
 
-struct SlotBase;
-
 /**
  * @brief Slot connection implementation.
  * This class is for internal use purpose.
  */
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct SlotConnection< void ( A1, A2, A3, A4, A5 ) > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2, A3, A4, A5 );
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-template < typename A1, typename A2, typename A3, typename A4 >
-struct SlotConnection< void ( A1, A2, A3, A4 ) > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2, A3, A4 );
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-template < typename A1, typename A2, typename A3 >
-struct SlotConnection< void ( A1, A2, A3 ) > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2, A3 );
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-template < typename A1, typename A2 >
-struct SlotConnection< void ( A1, A2 ) > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2 );
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-template < typename A1 >
-struct SlotConnection< void ( A1 ) > : SlotConnectionBase
+template < typename ... A >
+struct SlotConnection< void (A ...) > : SlotConnectionBase
 {
     /**
      * @name Typedefs
      * @{ */
-    typedef void SignatureType( A1 );
+    typedef void SignatureType ( A ... );
     typedef SlotConnection< SignatureType > SelfType;
 
-    typedef SPTR( SelfType ) sptr;
+    typedef SPTR ( SelfType ) sptr;
 
     typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
+    typedef SPTR ( SignalType )      SignalSptrType;
+    typedef WPTR ( SignalType )      SignalWptrType;
 
     typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
+    typedef SPTR ( SlotWrapperType )  SlotWrapperSptrType;
 
     typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
+    typedef SPTR ( SlotRunType )      SlotRunSptrType;
 
     typedef std::pair< bool, SlotRunType* > PairType;
     /**  @} */
@@ -443,7 +54,7 @@ struct SlotConnection< void ( A1 ) > : SlotConnectionBase
     static sptr New( const SignalSptrType &signal,
                      const SPTR( SlotBase ) &slot,
                      const SlotWrapperSptrType &slotWrapper
-                    );
+                     );
 
     /// Disconnect the related slot.
     void disconnect();
@@ -461,252 +72,53 @@ struct SlotConnection< void ( A1 ) > : SlotConnectionBase
                     );
 
 
-protected:
+    protected:
 
-    template < typename F >
-    friend struct Signal;
+        template < typename F >
+        friend struct Signal;
 
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
+        /// Connect the related Signal and Slot together.
+        void connectNoLock();
 
 
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
+        /// *NOT THREAD SAFE* Disconnect the related signal.
+        void disconnectSignalNoLock(const SignalSptrType &sig);
 
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
+        /// *NOT THREAD SAFE* Disconnect the related slot.
+        void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
 
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
+        /// *NOT THREAD SAFE* Disconnect the related slot and signal.
+        void disconnectWeakLock();
 
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
+        /**
+         * @brief Returns a blocker on the connection.
+         * The connection is blocked until the returned shared pointer dies.
+         */
+        SlotConnectionBase::BlockerSptrType getBlocker();
 
-    /// Unblock this connection.
-    void unblock();
+        /// Unblock this connection.
+        void unblock();
 
-    /// Related Signal.
-    SignalWptrType m_signal;
+        /// Related Signal.
+        SignalWptrType m_signal;
 
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
+        /// Related Slot.
+        WPTR( SlotBase ) m_connectedSlot;
 
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
+        /// Slot wrapper.
+        SlotWrapperSptrType m_slotWrapper;
 
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
+        /**
+         * @brief Associates state of this connection to related Slot.
+         * If m_pair.first is false, the connection is blocked.
+         */
+        PairType m_pair;
 
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
+        /// Connection blocker.
+        SlotConnectionBase::BlockerWptrType m_weakBlocker;
 
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
+        mutable ::fwCore::mt::ReadWriteMutex m_mutex;
 };
-template <>
-struct SlotConnection< void () > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType();
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-struct SlotConnection< void (A...) > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A... );
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
 
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp.vrdc
deleted file mode 100644
index 7e9a3d3..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hpp.vrdc
+++ /dev/null
@@ -1,128 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTCONNECTION_HPP__
-#define __FWCOM_SLOTCONNECTION_HPP__
-
-#include "fwCom/SlotConnectionBase.hpp"
-
-
-namespace fwCom
-{
-
-template < typename F >
-struct Signal;
-
-template < typename F >
-struct SlotConnection;
-
-struct SlotBase;
-
-/**
- * @brief Slot connection implementation.
- * This class is for internal use purpose.
- */
-template < typename ...A >
-struct SlotConnection< void (A...) > : SlotConnectionBase
-{
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A... );
-    typedef SlotConnection< SignatureType > SelfType;
-
-    typedef SPTR( SelfType ) sptr;
-
-    typedef Signal< SignatureType > SignalType;
-    typedef SPTR( SignalType )      SignalSptrType;
-    typedef WPTR( SignalType )      SignalWptrType;
-
-    typedef SlotRun< SignatureType > SlotWrapperType;
-    typedef SPTR( SlotWrapperType )  SlotWrapperSptrType;
-
-    typedef SlotRun< SignatureType > SlotRunType;
-    typedef SPTR( SlotRunType )      SlotRunSptrType;
-
-    typedef std::pair< bool, SlotRunType* > PairType;
-    /**  @} */
-
-    /// Build a new connection with the given signal and slot.
-    static sptr New( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    static sptr New( const SignalSptrType &signal,
-                     const SPTR( SlotBase ) &slot,
-                     const SlotWrapperSptrType &slotWrapper
-                    );
-
-    /// Disconnect the related slot.
-    void disconnect();
-
-    ~SlotConnection();
-
-
-    /// Build a new connection with the given signal and slot.
-    SlotConnection( const SignalSptrType &signal, const SlotRunSptrType &slot );
-
-    /// Build a new connection with the given signal, slot and wrapper.
-    SlotConnection( const SignalSptrType &signal,
-                    const SPTR( SlotBase ) &slot,
-                    const SlotWrapperSptrType &slotWrapper
-                    );
-
-
-protected:
-
-    template < typename F >
-    friend struct Signal;
-
-    /// Connect the related Signal and Slot together.
-    void connectNoLock();
-
-
-    /// *NOT THREAD SAFE* Disconnect the related signal.
-    void disconnectSignalNoLock(const SignalSptrType &sig);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot.
-    void disconnectSlotNoLock(const SPTR( SlotBase ) &slot);
-
-    /// *NOT THREAD SAFE* Disconnect the related slot and signal.
-    void disconnectWeakLock();
-
-    /**
-     * @brief Returns a blocker on the connection.
-     * The connection is blocked until the returned shared pointer dies.
-     */
-    SlotConnectionBase::BlockerSptrType getBlocker();
-
-    /// Unblock this connection.
-    void unblock();
-
-    /// Related Signal.
-    SignalWptrType m_signal;
-
-    /// Related Slot.
-    WPTR( SlotBase ) m_connectedSlot;
-
-    /// Slot wrapper.
-    SlotWrapperSptrType m_slotWrapper;
-
-    /**
-     * @brief Associates state of this connection to related Slot.
-     * If m_pair.first is false, the connection is blocked.
-     */
-    PairType m_pair;
-
-    /// Connection blocker.
-    SlotConnectionBase::BlockerWptrType m_weakBlocker;
-
-    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
-};
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTCONNECTION_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx b/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx
index 7e10808..ae330de 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx
@@ -1,1409 +1,169 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTCONNECTION_HXX__
-#define __FWCOM_SLOTCONNECTION_HXX__
-
-#ifndef __FWCOM_SLOTCONNECTION_HPP__
-#error fwCom/SlotConnection.hpp not included
-#endif
-
-#include <boost/bind.hpp>
-#include <boost/make_shared.hpp>
-
-#include "fwCom/SlotBase.hpp"
-#include "fwCom/SlotRun.hpp"
-
-#include "fwCom/util/log.hpp"
-
-namespace fwCom
-{
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2, A3, A4, A5 ) > >  SlotConnection< void ( A1, A2, A3, A4, A5 ) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2, A3, A4 ) > >  SlotConnection< void ( A1, A2, A3, A4 ) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2, A3 ) > >  SlotConnection< void ( A1, A2, A3 ) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-template < typename A1, typename A2 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2 ) > >  SlotConnection< void ( A1, A2 ) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-template < typename A1 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1 ) > >  SlotConnection< void ( A1 ) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-
-inline ::boost::shared_ptr< SlotConnection< void () > >  SlotConnection< void () >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline ::boost::shared_ptr< SlotConnection< void (A...) > >  SlotConnection< void (A...) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2, A3, A4, A5 ) > > SlotConnection< void ( A1, A2, A3, A4, A5 ) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2, A3, A4 ) > > SlotConnection< void ( A1, A2, A3, A4 ) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2, A3 ) > > SlotConnection< void ( A1, A2, A3 ) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-template < typename A1, typename A2 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1, A2 ) > > SlotConnection< void ( A1, A2 ) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-template < typename A1 >
-inline ::boost::shared_ptr< SlotConnection< void ( A1 ) > > SlotConnection< void ( A1 ) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-
-inline ::boost::shared_ptr< SlotConnection< void () > > SlotConnection< void () >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline ::boost::shared_ptr< SlotConnection< void (A...) > > SlotConnection< void (A...) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline SlotConnection< void ( A1, A2, A3, A4, A5 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline SlotConnection< void ( A1, A2, A3, A4 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-template < typename A1, typename A2, typename A3 >
-inline SlotConnection< void ( A1, A2, A3 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-template < typename A1, typename A2 >
-inline SlotConnection< void ( A1, A2 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-template < typename A1 >
-inline SlotConnection< void ( A1 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-
-inline SlotConnection< void () >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline SlotConnection< void (A...) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline SlotConnection< void ( A1, A2, A3, A4, A5 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline SlotConnection< void ( A1, A2, A3, A4 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline SlotConnection< void ( A1, A2, A3 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-template < typename A1, typename A2 >
-inline SlotConnection< void ( A1, A2 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-template < typename A1 >
-inline SlotConnection< void ( A1 ) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-
-inline SlotConnection< void () >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline SlotConnection< void (A...) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline SlotConnection< void ( A1, A2, A3, A4, A5 ) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline SlotConnection< void ( A1, A2, A3, A4 ) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline SlotConnection< void ( A1, A2, A3 ) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-template < typename A1, typename A2 >
-inline SlotConnection< void ( A1, A2 ) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-template < typename A1 >
-inline SlotConnection< void ( A1 ) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-
-inline SlotConnection< void () >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline SlotConnection< void (A...) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline void SlotConnection< void ( A1, A2, A3, A4, A5 ) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline void SlotConnection< void ( A1, A2, A3, A4 ) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline void SlotConnection< void ( A1, A2, A3 ) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-template < typename A1, typename A2 >
-inline void SlotConnection< void ( A1, A2 ) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-template < typename A1 >
-inline void SlotConnection< void ( A1 ) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-
-inline void SlotConnection< void () >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline void SlotConnection< void (A...) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline void SlotConnection< void ( A1, A2, A3, A4, A5 ) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline void SlotConnection< void ( A1, A2, A3, A4 ) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline void SlotConnection< void ( A1, A2, A3 ) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-template < typename A1, typename A2 >
-inline void SlotConnection< void ( A1, A2 ) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-template < typename A1 >
-inline void SlotConnection< void ( A1 ) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-
-inline void SlotConnection< void () >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline void SlotConnection< void ( A1, A2, A3, A4, A5 ) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void ( A1, A2, A3, A4, A5 ) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void ( A1, A2, A3, A4, A5 ) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline void SlotConnection< void ( A1, A2, A3, A4 ) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void ( A1, A2, A3, A4 ) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void ( A1, A2, A3, A4 ) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline void SlotConnection< void ( A1, A2, A3 ) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void ( A1, A2, A3 ) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void ( A1, A2, A3 ) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-template < typename A1, typename A2 >
-inline void SlotConnection< void ( A1, A2 ) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void ( A1, A2 ) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void ( A1, A2 ) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-template < typename A1 >
-inline void SlotConnection< void ( A1 ) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void ( A1 ) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void ( A1 ) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-
-inline void SlotConnection< void () >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void () > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void () > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void (A...) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void (A...) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline void SlotConnection< void ( A1, A2, A3, A4, A5 ) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline void SlotConnection< void ( A1, A2, A3, A4 ) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-template < typename A1, typename A2, typename A3 >
-inline void SlotConnection< void ( A1, A2, A3 ) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-template < typename A1, typename A2 >
-inline void SlotConnection< void ( A1, A2 ) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-template < typename A1 >
-inline void SlotConnection< void ( A1 ) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-inline void SlotConnection< void () >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline void SlotConnection< void ( A1, A2, A3, A4, A5 ) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline void SlotConnection< void ( A1, A2, A3, A4 ) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline void SlotConnection< void ( A1, A2, A3 ) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-template < typename A1, typename A2 >
-inline void SlotConnection< void ( A1, A2 ) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-template < typename A1 >
-inline void SlotConnection< void ( A1 ) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-
-inline void SlotConnection< void () >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void ( A1, A2, A3, A4, A5 ) >::getBlocker()
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
-
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
-    {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-
-        blocker = m_weakBlocker.lock();
 
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void ( A1, A2, A3, A4, A5 ) >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
-
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
-    }
-    return blocker;
-}
+#ifndef __FWCOM_SLOTCONNECTION_HXX__
+#define __FWCOM_SLOTCONNECTION_HXX__
 
+#ifndef __FWCOM_SLOTCONNECTION_HPP__
+#error fwCom/SlotConnection.hpp not included
+#endif
 
+#include "fwCom/SlotRun.hpp"
 
+#include <boost/bind.hpp>
 
-template < typename A1, typename A2, typename A3, typename A4 >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void ( A1, A2, A3, A4 ) >::getBlocker()
+namespace fwCom
 {
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
 
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
-    {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
 
-        blocker = m_weakBlocker.lock();
+template < typename ... A >
+inline std::shared_ptr< SlotConnection< void (A ...) > >  SlotConnection< void (A ...) >::New(
+    const SignalSptrType& signal,
+    const SlotRunSptrType& slot
+    )
+{
+    return std::make_shared< SelfType >(signal, slot);
+}
 
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void ( A1, A2, A3, A4 ) >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
+//-----------------------------------------------------------------------------
 
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
-    }
-    return blocker;
+template < typename ... A >
+inline std::shared_ptr< SlotConnection< void (A ...) > > SlotConnection< void (A ...) >::New(
+    const SignalSptrType& signal,
+    const SlotBase::sptr& slot,
+    const SlotWrapperSptrType& slotWrapper
+    )
+{
+    return std::make_shared< SelfType >(signal, slot, slotWrapper);
 }
 
+//-----------------------------------------------------------------------------
 
+template < typename ... A >
+inline SlotConnection< void (A ...) >::SlotConnection(const SignalSptrType& signal,
+                                                      const SlotRunSptrType& slot)
+    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
+{
+}
 
+//-----------------------------------------------------------------------------
 
-template < typename A1, typename A2, typename A3 >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void ( A1, A2, A3 ) >::getBlocker()
+template < typename ... A >
+inline SlotConnection< void (A ...) >::SlotConnection(
+    const SignalSptrType& signal,
+    const SlotBase::sptr& slot,
+    const SlotWrapperSptrType& slotWrapper
+    )
+    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
 {
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
+}
 
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
-    {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+//-----------------------------------------------------------------------------
 
-        blocker = m_weakBlocker.lock();
+template < typename ... A >
+inline SlotConnection< void (A ...) >::~SlotConnection()
+{
+    this->disconnect();
+}
 
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void ( A1, A2, A3 ) >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
+//-----------------------------------------------------------------------------
 
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
-    }
-    return blocker;
+template < typename ... A >
+inline void SlotConnection< void (A ...) >::connectNoLock()
+{
+    SignalSptrType sig(m_signal);
+    sig->m_slots.push_back( &m_pair );
 }
 
+//-----------------------------------------------------------------------------
 
+template < typename ... A >
+inline void SlotConnection< void (A ...) >::disconnectSignalNoLock(const SignalSptrType& sig)
+{
+    sig->m_slots.remove( &m_pair );
+    sig->m_connections.erase(m_connectedSlot);
+}
 
+//-----------------------------------------------------------------------------
 
-template < typename A1, typename A2 >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void ( A1, A2 ) >::getBlocker()
+template < typename ... A >
+inline void SlotConnection< void (A ...) >::disconnectSlotNoLock(const SlotBase::sptr& slot)
 {
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
-
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
+    try
     {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-
-        blocker = m_weakBlocker.lock();
-
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void ( A1, A2 ) >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
-
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
+        std::shared_ptr< const SlotConnection< void (A ...) > > thisSptr =
+            std::dynamic_pointer_cast< const SlotConnection< void (A ...) > > ( this->shared_from_this() );
+        slot->m_connections.erase( thisSptr );
+    }
+    catch(const ::boost::bad_weak_ptr&)
+    {
+        // SlotConnection destruction is under way, no need to remove
+        // shared_ptr from connections
     }
-    return blocker;
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-template < typename A1 >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void ( A1 ) >::getBlocker()
+template < typename ... A >
+inline void SlotConnection< void (A ...) >::disconnect()
 {
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
-
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
-    {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-
-        blocker = m_weakBlocker.lock();
+    ::fwCore::mt::WriteLock lock(m_mutex);
 
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void ( A1 ) >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
+    SignalSptrType sig(m_signal.lock());
+    SlotBase::sptr slot(m_connectedSlot.lock());
 
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
+    if(sig)
+    {
+        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
+        this->disconnectSignalNoLock(sig);
     }
-    return blocker;
-}
 
+    m_slotWrapper.reset();
 
+    if(slot)
+    {
+        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
+        this->disconnectSlotNoLock(slot);
+    }
 
+    m_signal.reset();
+    m_connectedSlot.reset();
+}
 
+//-----------------------------------------------------------------------------
 
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void () >::getBlocker()
+template < typename ... A >
+inline void SlotConnection< void (A ...) >::disconnectWeakLock()
 {
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
-
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
-    {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-
-        blocker = m_weakBlocker.lock();
+    ::fwCore::mt::WriteLock lock(m_mutex);
 
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void () >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
+    SignalSptrType sig(m_signal.lock());
+    SlotBase::sptr slot(m_connectedSlot.lock());
 
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
+    if(sig)
+    {
+        this->disconnectSignalNoLock(sig);
     }
-    return blocker;
-}
 
+    m_slotWrapper.reset();
 
+    if(slot)
+    {
+        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
+        this->disconnectSlotNoLock(slot);
+    }
 
+    m_signal.reset();
+    m_connectedSlot.reset();
+}
 
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
+//-----------------------------------------------------------------------------
 
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void (A...) >::getBlocker()
+template < typename ... A >
+inline SlotConnectionBase::BlockerSptrType SlotConnection< void (A ...) >::getBlocker()
 {
     ::fwCore::mt::ReadToWriteLock lock(m_mutex);
 
@@ -1417,9 +177,9 @@ inline SlotConnectionBase::BlockerSptrType SlotConnection< void (A...) >::getBlo
         if(!blocker)
         {
             blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void (A...) >::unblock, this )
-                              );
+                (void*)NULL,
+                ::boost::bind( &SlotConnection< void (A ...) >::unblock, this )
+                );
             m_weakBlocker = blocker;
 
             // signal has to be locked : signal got a pointer on m_pair
@@ -1431,112 +191,10 @@ inline SlotConnectionBase::BlockerSptrType SlotConnection< void (A...) >::getBlo
     return blocker;
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline void SlotConnection< void ( A1, A2, A3, A4, A5 ) >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-inline void SlotConnection< void ( A1, A2, A3, A4 ) >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-
-template < typename A1, typename A2, typename A3 >
-inline void SlotConnection< void ( A1, A2, A3 ) >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-
-template < typename A1, typename A2 >
-inline void SlotConnection< void ( A1, A2 ) >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-
-template < typename A1 >
-inline void SlotConnection< void ( A1 ) >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-
-
-inline void SlotConnection< void () >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template < typename ...A >
-inline void SlotConnection< void (A...) >::unblock()
+template < typename ... A >
+inline void SlotConnection< void (A ...) >::unblock()
 {
     ::fwCore::mt::WriteLock lock(m_mutex);
     // signal has to be locked : signal got a pointer on m_pair
@@ -1545,12 +203,8 @@ inline void SlotConnection< void (A...) >::unblock()
     m_pair.first = true;
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif /* __FWCOM_SLOTCONNECTION_HXX__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx.vrdc
deleted file mode 100644
index ee6be8a..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotConnection.hxx.vrdc
+++ /dev/null
@@ -1,217 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTCONNECTION_HXX__
-#define __FWCOM_SLOTCONNECTION_HXX__
-
-#ifndef __FWCOM_SLOTCONNECTION_HPP__
-#error fwCom/SlotConnection.hpp not included
-#endif
-
-#include <boost/bind.hpp>
-#include <boost/make_shared.hpp>
-
-#include "fwCom/SlotBase.hpp"
-#include "fwCom/SlotRun.hpp"
-
-#include "fwCom/util/log.hpp"
-
-namespace fwCom
-{
-
-
-template < typename ...A >
-inline ::boost::shared_ptr< SlotConnection< void (A...) > >  SlotConnection< void (A...) >::New(
-                                                                const SignalSptrType &signal,
-                                                                const SlotRunSptrType &slot
-                                                                )
-{
-    return boost::make_shared< SelfType >(signal, slot);
-}
-
-
-
-template < typename ...A >
-inline ::boost::shared_ptr< SlotConnection< void (A...) > > SlotConnection< void (A...) >::New(
-                                                          const SignalSptrType &signal,
-                                                          const SlotBase::sptr &slot,
-                                                          const SlotWrapperSptrType &slotWrapper
-                                                        )
-{
-    return boost::make_shared< SelfType >(signal, slot, slotWrapper);
-}
-
-
-template < typename ...A >
-inline SlotConnection< void (A...) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotRunSptrType &slot
-                                                     )
-    : m_signal(signal), m_connectedSlot(slot), m_pair(true, slot.get())
-{ }
-
-template < typename ...A >
-inline SlotConnection< void (A...) >::SlotConnection(
-                                                     const SignalSptrType &signal,
-                                                     const SlotBase::sptr &slot,
-                                                     const SlotWrapperSptrType &slotWrapper
-                                                    )
-    : m_signal(signal), m_connectedSlot(slot), m_slotWrapper(slotWrapper), m_pair(true, slotWrapper.get())
-{ }
-
-
-template < typename ...A >
-inline SlotConnection< void (A...) >::~SlotConnection()
-{
-    this->disconnect();
-}
-
-
-
-
-
-
-template < typename ...A >
-inline void SlotConnection< void (A...) >::connectNoLock()
-{
-    SignalSptrType sig(m_signal);
-    sig->m_slots.push_back( &m_pair );
-    OSLM_COM("Connect '"<< sig->getID() <<"' sig <=> '"<< m_connectedSlot.lock()->getID() <<"' slot");
-}
-
-
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnectSignalNoLock(const SignalSptrType &sig)
-{
-    sig->m_slots.remove( &m_pair );
-    sig->m_connections.erase(m_connectedSlot);
-    OSLM_COM("Disconnect '"<< sig->getID() <<"' sig <=> '"  <<
-            (m_connectedSlot.expired() ? "<dead slot>" : m_connectedSlot.lock()->getID()) <<"' slot" );
-}
-
-
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnectSlotNoLock(const SlotBase::sptr &slot)
-{
-    try
-    {
-        boost::shared_ptr< const SlotConnection< void (A...) > > thisSptr =
-            boost::dynamic_pointer_cast< const SlotConnection< void (A...) > > ( this->shared_from_this() );
-        slot->m_connections.erase( thisSptr );
-        OSLM_COM("Disconnect '"
-                << (m_signal.expired() ? "<dead signal>" : m_signal.lock()->getID())
-                <<"' sig <=> '"  <<  slot->getID() <<"' slot" );
-    }
-    catch(const boost::bad_weak_ptr&)
-    {
-        // SlotConnection destruction is under way, no need to remove
-        // shared_ptr from connections
-    }
-}
-
-
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnect()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        ::fwCore::mt::WriteLock lock(sig->m_connectionsMutex);
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-template < typename ...A >
-inline void SlotConnection< void (A...) >::disconnectWeakLock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-
-    SignalSptrType sig(m_signal.lock());
-    SlotBase::sptr slot(m_connectedSlot.lock());
-
-    if(sig)
-    {
-        this->disconnectSignalNoLock(sig);
-    }
-
-    m_slotWrapper.reset();
-
-    if(slot)
-    {
-        ::fwCore::mt::WriteLock lock(slot->m_connectionsMutex);
-        this->disconnectSlotNoLock(slot);
-    }
-
-    m_signal.reset();
-    m_connectedSlot.reset();
-}
-
-
-
-template < typename ...A >
-inline SlotConnectionBase::BlockerSptrType SlotConnection< void (A...) >::getBlocker()
-{
-    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
-
-    SlotConnectionBase::BlockerSptrType blocker(m_weakBlocker.lock());
-    if( !blocker )
-    {
-        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
-
-        blocker = m_weakBlocker.lock();
-
-        if(!blocker)
-        {
-            blocker = SlotConnectionBase::BlockerSptrType(
-                              (void*)NULL,
-                              boost::bind( &SlotConnection< void (A...) >::unblock, this )
-                              );
-            m_weakBlocker = blocker;
-
-            // signal has to be locked : signal got a pointer on m_pair
-            SignalSptrType sig(m_signal);
-            ::fwCore::mt::ReadLock lock(sig->m_connectionsMutex);
-            m_pair.first = false;
-        }
-    }
-    return blocker;
-}
-
-
-
-template < typename ...A >
-inline void SlotConnection< void (A...) >::unblock()
-{
-    ::fwCore::mt::WriteLock lock(m_mutex);
-    // signal has to be locked : signal got a pointer on m_pair
-    SignalSptrType sig(m_signal);
-    ::fwCore::mt::ReadLock connectionLock(sig->m_connectionsMutex);
-    m_pair.first = true;
-}
-
-
-
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTCONNECTION_HXX__ */
-
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotConnectionBase.hpp b/SrcLib/core/fwCom/include/fwCom/SlotConnectionBase.hpp
index ff44449..c00aba0 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotConnectionBase.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/SlotConnectionBase.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,21 +17,23 @@ namespace fwCom
  * @brief Base class for Slot connection implementation.
  * This class is for internal use purpose.
  */
-struct SlotConnectionBase: virtual fwCore::BaseObject
+struct SlotConnectionBase : virtual fwCore::BaseObject
 {
     /**
      * @name Typedefs
      * @{ */
-    typedef ::boost::shared_ptr< SlotConnectionBase > sptr;
-    typedef ::boost::shared_ptr< SlotConnectionBase const > csptr;
-    typedef ::boost::weak_ptr< SlotConnectionBase > wptr;
-    typedef ::boost::weak_ptr< SlotConnectionBase const > cwptr;
+    typedef std::shared_ptr< SlotConnectionBase > sptr;
+    typedef std::shared_ptr< SlotConnectionBase const > csptr;
+    typedef std::weak_ptr< SlotConnectionBase > wptr;
+    typedef std::weak_ptr< SlotConnectionBase const > cwptr;
 
-    typedef boost::shared_ptr< void > BlockerSptrType;
-    typedef boost::weak_ptr< void >   BlockerWptrType;
+    typedef std::shared_ptr< void > BlockerSptrType;
+    typedef std::weak_ptr< void >   BlockerWptrType;
     /**  @} */
 
-    SlotConnectionBase(){}
+    SlotConnectionBase()
+    {
+    }
 
     /// Disconnect a Slot from this connection.
     virtual void disconnect() = 0;
@@ -39,27 +41,27 @@ struct SlotConnectionBase: virtual fwCore::BaseObject
     /// Returns a .. to block this connection.
     virtual BlockerSptrType getBlocker() = 0;
 
-protected:
+    protected:
 
-    /// Copy constructor forbidden
-    SlotConnectionBase( const SlotConnectionBase& );
+        /// Copy constructor forbidden
+        SlotConnectionBase( const SlotConnectionBase& );
 
-    /// Copy operator forbiden
-    SlotConnectionBase& operator=( const SlotConnectionBase& );
+        /// Copy operator forbidden
+        SlotConnectionBase& operator=( const SlotConnectionBase& );
 
-    /**
-     * @name SlotConnectionBase's friends
-     * @{ */
-    template < typename F >
-    friend struct Signal;
-    /**  @} */
+        /**
+         * @name SlotConnectionBase's friends
+         * @{ */
+        template < typename F >
+        friend struct Signal;
+        /**  @} */
 
-    /// *NOT THREAD SAFE* Disconnect a Slot from this connection.
-    virtual void disconnectWeakLock() = 0;
+        /// *NOT THREAD SAFE* Disconnect a Slot from this connection.
+        virtual void disconnectWeakLock() = 0;
 
 
-    /// *NOT THREAD SAFE* Connect the related Signal and Slot together.
-    virtual void connectNoLock() = 0;
+        /// *NOT THREAD SAFE* Connect the related Signal and Slot together.
+        virtual void connectNoLock() = 0;
 };
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp b/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp
index 8ee3955..c5f3711 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,10 @@
 
 #include "fwCom/SlotBase.hpp"
 
-fwCorePredeclare( (fwThread)(Worker) );
+namespace fwThread
+{
+class Worker;
+}
 
 namespace fwCom
 {
@@ -25,353 +28,22 @@ struct SlotRun;
  *
  * @tparam A Slot's arguments types.
  */
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct SlotRun< void ( A1, A2, A3, A4, A5 ) > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2, A3, A4, A5 );
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( 5 ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4, A5  a5 ) const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const;
-
-};
-template< typename A1, typename A2, typename A3, typename A4 >
-struct SlotRun< void ( A1, A2, A3, A4 ) > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2, A3, A4 );
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( 4 ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4 ) const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2, A3 args3, A4 args4 ) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( A1 args1, A2 args2, A3 args3, A4 args4 ) const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4 ) const;
-
-};
-template< typename A1, typename A2, typename A3 >
-struct SlotRun< void ( A1, A2, A3 ) > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2, A3 );
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( 3 ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run( A1  a1, A2  a2, A3  a3 ) const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2, A3 args3 ) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( A1 args1, A2 args2, A3 args3 ) const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3 ) const;
-
-};
-template< typename A1, typename A2 >
-struct SlotRun< void ( A1, A2 ) > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1, A2 );
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( 2 ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run( A1  a1, A2  a2 ) const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A1 args1, A2 args2 ) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( A1 args1, A2 args2 ) const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A1 args1, A2 args2 ) const;
-
-};
-template< typename A1 >
-struct SlotRun< void ( A1 ) > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType( A1 );
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( 1 ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run( A1  a1 ) const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A1 args1 ) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( A1 args1 ) const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A1 args1 ) const;
-
-};
-template<>
-struct SlotRun< void () > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType();
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( 0 ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run() const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun() const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun() const;
-
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename ... A >
-struct SlotRun< void (A...) > : SlotBase
+struct SlotRun< void (A ...) > : SlotBase
 {
 
     /**
      * @name Typedefs
      * @{ */
-    typedef void SignatureType(A...);
+    typedef void SignatureType (A ...);
     typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
+    typedef SPTR ( SelfType ) sptr;
+    typedef WPTR ( SelfType ) wptr;
     /**  @} */
 
-    SlotRun() : SlotBase( sizeof...(A) ) {}
+    SlotRun() : SlotBase( sizeof ... (A) )
+    {
+    }
 
     /**
      * @brief Run the Slot with the given parameters.
@@ -387,7 +59,7 @@ struct SlotRun< void (A...) > : SlotBase
      * @return a shared_future object associated with Slot's run result.
      * @throws NoWorker if given worker is not valid.
      */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A... args ) const;
+    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A ... args ) const;
 
     /**
      * @brief Run the Slot with the given parameters asynchronously.
@@ -397,23 +69,21 @@ struct SlotRun< void (A...) > : SlotBase
      * @return a shared_future object associated with Slot's run result.
      * @throws NoWorker if slot has no worker set.
      */
-    virtual SlotBase::VoidSharedFutureType asyncRun(A... args) const;
+    virtual SlotBase::VoidSharedFutureType asyncRun(A ... args) const;
 
-protected:
+    protected:
 
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
+        template< typename R, typename WEAKCALL >
+        static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
 
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A...args  ) const;
+        /**
+         * @brief Binds the given parameters to the run method within a void() function.
+         *
+         * @return a void() function.
+         */
+        virtual ::boost::function< void() > bindRun( A ... args  ) const;
 
 };
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
 
 
 } // namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp.vrdc
deleted file mode 100644
index 6ec41c2..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotRun.hpp.vrdc
+++ /dev/null
@@ -1,88 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTRUN_HPP__
-#define __FWCOM_SLOTRUN_HPP__
-
-#include <set>
-
-#include <boost/function.hpp>
-
-#include "fwCom/SlotBase.hpp"
-
-fwCorePredeclare( (fwThread)(Worker) );
-
-namespace fwCom
-{
-
-template< typename F >
-struct SlotRun;
-
-/**
- * @brief Slot run interface (call without return value).
- *
- * @tparam A Slot's arguments types.
- */
-template< typename ... A >
-struct SlotRun< void (A...) > : SlotBase
-{
-
-    /**
-     * @name Typedefs
-     * @{ */
-    typedef void SignatureType(A...);
-    typedef SlotRun< SignatureType > SelfType;
-    typedef SPTR( SelfType ) sptr;
-    typedef WPTR( SelfType ) wptr;
-    /**  @} */
-
-    SlotRun() : SlotBase( sizeof...(A) ) {}
-
-    /**
-     * @brief Run the Slot with the given parameters.
-     */
-    virtual void run(A ... a) const = 0;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     *
-     * @param worker Worker that will run the Slot.
-     * @param args run arguments.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if given worker is not valid.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun( const SPTR(::fwThread::Worker) &worker, A... args ) const;
-
-    /**
-     * @brief Run the Slot with the given parameters asynchronously.
-     * The execution of this slot will occur on it's own worker.
-     * @pre Slot's worker must be set.
-     *
-     * @return a shared_future object associated with Slot's run result.
-     * @throws NoWorker if slot has no worker set.
-     */
-    virtual SlotBase::VoidSharedFutureType asyncRun(A... args) const;
-
-protected:
-
-    template< typename R, typename WEAKCALL >
-    static ::boost::shared_future< R > postWeakCall( const SPTR(::fwThread::Worker) &worker, WEAKCALL f );
-
-    /**
-     * @brief Binds the given parameters to the run method within a void() function.
-     *
-     * @return a void() function.
-     */
-    virtual ::boost::function< void() > bindRun( A...args  ) const;
-
-};
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTRUN_HPP__ */
-
-
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx b/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx
index 980eb77..8a123d1 100644
--- a/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,415 +10,50 @@
 #error fwCom/SlotRun.hpp not included
 #endif
 
-#include <boost/thread/future.hpp>
+#include "fwCom/exception/NoWorker.hpp"
+#include "fwCom/util/WeakCall.hpp"
+#include "fwCom/SlotBase.hxx"
 
 #include <fwThread/TaskHandler.hpp>
 #include <fwThread/Worker.hpp>
 
 #include <fwCore/mt/types.hpp>
 
-#include "fwCom/exception/NoWorker.hpp"
-
-#include "fwCom/util/WeakCall.hpp"
-
-#include "fwCom/SlotBase.hxx"
-
-#include "fwCom/util/log.hpp"
+#include <boost/thread/future.hpp>
 
 namespace fwCom
 {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline ::boost::function< void() > SlotRun< void ( A1, A2, A3, A4, A5 ) >::bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A1, A2, A3, A4, A5 ) const ) &SelfType::run, this, args1, args2, args3, args4, args5 );
-}
 
-
-template< typename A1, typename A2, typename A3, typename A4 >
-inline ::boost::function< void() > SlotRun< void ( A1, A2, A3, A4 ) >::bindRun( A1 args1, A2 args2, A3 args3, A4 args4 ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A1, A2, A3, A4 ) const ) &SelfType::run, this, args1, args2, args3, args4 );
-}
-
-
-template< typename A1, typename A2, typename A3 >
-inline ::boost::function< void() > SlotRun< void ( A1, A2, A3 ) >::bindRun( A1 args1, A2 args2, A3 args3 ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A1, A2, A3 ) const ) &SelfType::run, this, args1, args2, args3 );
-}
-
-
-template< typename A1, typename A2 >
-inline ::boost::function< void() > SlotRun< void ( A1, A2 ) >::bindRun( A1 args1, A2 args2 ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A1, A2 ) const ) &SelfType::run, this, args1, args2 );
-}
-
-
-template< typename A1 >
-inline ::boost::function< void() > SlotRun< void ( A1 ) >::bindRun( A1 args1 ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A1 ) const ) &SelfType::run, this, args1 );
-}
-
-
-
-inline ::boost::function< void() > SlotRun< void () >::bindRun() const
-{
-    return ::boost::bind( ( void (SelfType::*)() const ) &SelfType::run, this);
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename ... A >
-inline ::boost::function< void() > SlotRun< void (A...) >::bindRun( A...args  ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A... ) const ) &SelfType::run, this, args... );
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void ( A1, A2, A3, A4, A5 ) >::asyncRun( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2, args3, args4, args5 )
-                        )
-                );
-}
-
-
-template< typename A1, typename A2, typename A3, typename A4 >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void ( A1, A2, A3, A4 ) >::asyncRun( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2, A3 args3, A4 args4 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2, args3, args4 )
-                        )
-                );
-}
-
-
-template< typename A1, typename A2, typename A3 >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void ( A1, A2, A3 ) >::asyncRun( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2, A3 args3 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2, args3 )
-                        )
-                );
-}
-
-
-template< typename A1, typename A2 >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void ( A1, A2 ) >::asyncRun( const ::fwThread::Worker::sptr &worker, A1 args1, A2 args2 ) const
+inline ::boost::function< void() > SlotRun< void (A ...) >::bindRun( A ... args  ) const
 {
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2 )
-                        )
-                );
+    return ::boost::bind( ( void (SelfType::*)( A ... ) const ) &SelfType::run, this, args ... );
 }
 
+//-----------------------------------------------------------------------------
 
-template< typename A1 >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void ( A1 ) >::asyncRun( const ::fwThread::Worker::sptr &worker, A1 args1 ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1 )
-                        )
-                );
-}
-
-
-
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void () >::asyncRun( const ::fwThread::Worker::sptr &worker) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun()
-                        )
-                );
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename ... A >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void (A...) >::asyncRun( const ::fwThread::Worker::sptr &worker, A... args ) const
+inline SlotBase::VoidSharedFutureType SlotRun< void (A ...) >::asyncRun(
+    const ::fwThread::Worker::sptr& worker, A ... args ) const
 {
     if(!worker)
     {
         FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
     }
 
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args... )
-                        )
-                );
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-inline SlotBase::VoidSharedFutureType SlotRun< void ( A1, A2, A3, A4, A5 ) >::asyncRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2, args3, args4, args5 ),
-                        this->m_workerMutex
-                        )
-                );
-
-}
-
-
-
-
-template< typename A1, typename A2, typename A3, typename A4 >
-inline SlotBase::VoidSharedFutureType SlotRun< void ( A1, A2, A3, A4 ) >::asyncRun( A1 args1, A2 args2, A3 args3, A4 args4 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2, args3, args4 ),
-                        this->m_workerMutex
-                        )
-                );
-
-}
-
-
-
-
-template< typename A1, typename A2, typename A3 >
-inline SlotBase::VoidSharedFutureType SlotRun< void ( A1, A2, A3 ) >::asyncRun( A1 args1, A2 args2, A3 args3 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2, args3 ),
-                        this->m_workerMutex
-                        )
-                );
-
-}
-
-
-
-
-template< typename A1, typename A2 >
-inline SlotBase::VoidSharedFutureType SlotRun< void ( A1, A2 ) >::asyncRun( A1 args1, A2 args2 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1, args2 ),
-                        this->m_workerMutex
-                        )
-                );
-
-}
-
-
-
-
-template< typename A1 >
-inline SlotBase::VoidSharedFutureType SlotRun< void ( A1 ) >::asyncRun( A1 args1 ) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args1 ),
-                        this->m_workerMutex
-                        )
-                );
-
-}
-
-
-
-
-
-inline SlotBase::VoidSharedFutureType SlotRun< void () >::asyncRun() const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
     return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun(),
-                        this->m_workerMutex
-                        )
-                );
-
+        worker,
+        ::fwCom::util::weakcall(
+            std::dynamic_pointer_cast< const SlotBase >(this->shared_from_this()),
+            this->bindRun( args ... )
+            )
+        );
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename ... A >
-inline SlotBase::VoidSharedFutureType SlotRun< void (A...) >::asyncRun(A... args) const
+inline SlotBase::VoidSharedFutureType SlotRun< void (A ...) >::asyncRun(A ... args) const
 {
     ::fwCore::mt::ReadLock lock(this->m_workerMutex);
 
@@ -427,133 +62,23 @@ inline SlotBase::VoidSharedFutureType SlotRun< void (A...) >::asyncRun(A... args
         FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
     }
 
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
     return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args... ),
-                        this->m_workerMutex
-                        )
-                );
-
+        m_worker,
+        ::fwCom::util::weakcall(
+            std::dynamic_pointer_cast< const SlotBase >(this->shared_from_this()),
+            this->bindRun( args ... ),
+            this->m_worker
+            )
+        );
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 // Copied from fwThread::Worker because of issues with gcc 4.2 and template
 // keyword
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void ( A1, A2, A3, A4, A5 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename A1, typename A2, typename A3, typename A4 >
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void ( A1, A2, A3, A4 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename A1, typename A2, typename A3 >
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void ( A1, A2, A3 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename A1, typename A2 >
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void ( A1, A2 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-template< typename A1 >
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void ( A1 ) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void () >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename ... A >
 template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void (A...) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
+::boost::shared_future< R > SlotRun< void (A ...) >::postWeakCall( const ::fwThread::Worker::sptr& worker, WEAKCALL f )
 {
     ::boost::packaged_task< R > task( f );
     ::boost::future< R > ufuture = task.get_future();
@@ -565,9 +90,8 @@ template< typename R, typename WEAKCALL >
     return ::boost::move(ufuture);
 }
 
+//-----------------------------------------------------------------------------
 
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif /* __FWCOM_SLOTRUN_HXX__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx.vrdc
deleted file mode 100644
index 907db9d..0000000
--- a/SrcLib/core/fwCom/include/fwCom/SlotRun.hxx.vrdc
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_SLOTRUN_HXX__
-#define __FWCOM_SLOTRUN_HXX__
-
-#ifndef __FWCOM_SLOTRUN_HPP__
-#error fwCom/SlotRun.hpp not included
-#endif
-
-#include <boost/thread/future.hpp>
-
-#include <fwThread/TaskHandler.hpp>
-#include <fwThread/Worker.hpp>
-
-#include <fwCore/mt/types.hpp>
-
-#include "fwCom/exception/NoWorker.hpp"
-
-#include "fwCom/util/WeakCall.hpp"
-
-#include "fwCom/SlotBase.hxx"
-
-#include "fwCom/util/log.hpp"
-
-namespace fwCom
-{
-
-template< typename ... A >
-inline ::boost::function< void() > SlotRun< void (A...) >::bindRun( A...args  ) const
-{
-    return ::boost::bind( ( void (SelfType::*)( A... ) const ) &SelfType::run, this, args... );
-}
-
-template< typename ... A >
-inline
-SlotBase::VoidSharedFutureType
-SlotRun< void (A...) >::asyncRun( const ::fwThread::Worker::sptr &worker, A... args ) const
-{
-    if(!worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("No valid worker.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-
-    return postWeakCall< void >(
-                worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args... )
-                        )
-                );
-}
-
-template< typename ... A >
-inline SlotBase::VoidSharedFutureType SlotRun< void (A...) >::asyncRun(A... args) const
-{
-    ::fwCore::mt::ReadLock lock(this->m_workerMutex);
-
-    if(!this->m_worker)
-    {
-        FW_RAISE_EXCEPTION( ::fwCom::exception::NoWorker("Slot has no worker set.") );
-    }
-
-    OSLM_COM("asyncRun '"<< this->getID() <<"' slot");
-    
-    return postWeakCall< void >(
-                m_worker,
-                ::fwCom::util::weakcall(
-                        this->shared_from_this(),
-                        this->bindRun( args... ),
-                        this->m_workerMutex
-                        )
-                );
-
-}
-
-
-
-// Copied from fwThread::Worker because of issues with gcc 4.2 and template
-// keyword
-template< typename ... A >
-template< typename R, typename WEAKCALL >
-::boost::shared_future< R > SlotRun< void (A...) >::postWeakCall( const ::fwThread::Worker::sptr &worker, WEAKCALL f )
-{
-    ::boost::packaged_task< R > task( f );
-    ::boost::future< R > ufuture = task.get_future();
-
-    ::boost::function< void () > ftask = ::fwThread::moveTaskIntoFunction(task);
-
-    worker->post(ftask);
-
-    return ::boost::move(ufuture);
-}
-
-
-} // namespace fwCom
-
-#endif /* __FWCOM_SLOTRUN_HXX__ */
-
-
-
-
diff --git a/SrcLib/core/fwCom/include/fwCom/Slots.hpp b/SrcLib/core/fwCom/include/fwCom/Slots.hpp
index 7e4ab89..3bc22fb 100644
--- a/SrcLib/core/fwCom/include/fwCom/Slots.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/Slots.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,10 @@
 #include "fwCore/macros.hpp"
 #include "fwCom/config.hpp"
 
-fwCorePredeclare( (fwThread)(Worker) );
+namespace fwThread
+{
+class Worker;
+}
 
 namespace fwCom
 {
@@ -22,13 +25,10 @@ namespace fwCom
 struct SlotBase;
 
 template< typename F >
-struct Slot;
+class Slot;
 
 /**
- * @class   Slots
  * @brief   This class proposes a mapping between a SlotKeyType and a SlotBase.
- *
- * @date   2012.
  */
 class FWCOM_CLASS_API Slots
 {
@@ -45,100 +45,29 @@ public:
     FWCOM_API virtual ~Slots();
 
     /// Registers SlotBase in m_slots
-    FWCOM_API Slots& operator()( const SlotKeyType &key, const SPTR( SlotBase ) &slot );
-
-    /// Registers Slot  in m_slots
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2, A3, A4, A5 ) >) slot ); //{}
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2, A3, A4 ) >) slot ); //{}
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2, A3 ) >) slot ); //{}
-
-
-template<typename R, typename A1, typename A2 >
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2 ) >) slot ); //{}
-
-
-template<typename R, typename A1 >
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R ( A1 ) >) slot ); //{}
-
-
-template<typename R>
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R () >) slot ); //{}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A>
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R (A...) >) slot ); //{}
+    FWCOM_API Slots& operator()( const SlotKeyType& key, const SPTR( SlotBase )& slot );
 
+    /// Registers Slot  in m_slots (defined here to avoid compiler error C2244)
+    template<typename R, typename ... A>
+    Slots& operator()( const SlotKeyType& key, SPTR(Slot< R (A ...) >)slot )
+    {
+        SPTR( SlotBase ) slotBase = std::dynamic_pointer_cast< SlotBase >( slot );
+        return this->operator()(key, slotBase);
+    }
 
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-/// Creates in intern a new slot from function and registers it in m_slots
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename F, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    Slots& operator()( const SlotKeyType &key, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{}
+    /// Creates in intern a new slot from function and registers it in m_slots
+    template<typename F, typename ... A>
+    Slots& operator()( const SlotKeyType& key, F f, A ... a );
 
-
-template<typename F, typename A1, typename A2, typename A3, typename A4 >
-    Slots& operator()( const SlotKeyType &key, F f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{}
-
-
-template<typename F, typename A1, typename A2, typename A3 >
-    Slots& operator()( const SlotKeyType &key, F f, A1 a1, A2 a2, A3 a3 ); //{}
-
-
-template<typename F, typename A1, typename A2 >
-    Slots& operator()( const SlotKeyType &key, F f, A1 a1, A2 a2 ); //{}
-
-
-template<typename F, typename A1 >
-    Slots& operator()( const SlotKeyType &key, F f, A1 a1 ); //{}
-
-
-template<typename F>
-    Slots& operator()( const SlotKeyType &key, F f); //{}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename F, typename ...A>
-    Slots& operator()( const SlotKeyType &key, F f, A...a ); //{}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-/// Returns the SlotBase associated to the key, if key does not exist, the ptr is null
+    /// Returns the SlotBase associated to the key, if key does not exist, the ptr is null
     FWCOM_API SPTR( SlotBase ) operator[]( const SlotKeyType &key ) const;
 
     /// Assigns the worker to all slots stored in m_slots
-    FWCOM_API void setWorker( const SPTR(::fwThread::Worker) &worker );
+    FWCOM_API void setWorker( const SPTR(::fwThread::Worker)& worker );
 
     /// Returns all SlotKeyType registered in m_slots
     FWCOM_API SlotKeyContainerType getSlotKeys() const;
 
-#ifdef COM_LOG
-    /// Set new id for all slots using their key in m_slots, a prefix can be added
-    FWCOM_API void setID( const std::string prefix = "" );
-#endif
-
 protected:
 
     /// Copy constructor forbidden
diff --git a/SrcLib/core/fwCom/include/fwCom/Slots.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/Slots.hpp.vrdc
deleted file mode 100644
index 7b32785..0000000
--- a/SrcLib/core/fwCom/include/fwCom/Slots.hpp.vrdc
+++ /dev/null
@@ -1,86 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOM_SLOTS_HPP__
-#define __FWCOM_SLOTS_HPP__
-
-#include <map>
-#include <vector>
-#include <string>
-
-#include "fwCore/macros.hpp"
-#include "fwCom/config.hpp"
-
-fwCorePredeclare( (fwThread)(Worker) );
-
-namespace fwCom
-{
-
-struct SlotBase;
-
-template< typename F >
-struct Slot;
-
-/**
- * @class   Slots
- * @brief   This class proposes a mapping between a SlotKeyType and a SlotBase.
- *
- * @date   2012.
- */
-class FWCOM_CLASS_API Slots
-{
-public:
-
-    typedef std::string SlotKeyType;
-    typedef std::map< SlotKeyType, SPTR( SlotBase ) > SlotMapType;
-    typedef std::vector < SlotKeyType > SlotKeyContainerType;
-
-    /// Constructor, does nothing
-    FWCOM_API Slots();
-
-    /// Constructor, check if all slots are disconnected
-    FWCOM_API virtual ~Slots();
-
-    /// Registers SlotBase in m_slots
-    FWCOM_API Slots& operator()( const SlotKeyType &key, const SPTR( SlotBase ) &slot );
-
-    /// Registers Slot  in m_slots
-    template<typename R, typename ...A>
-    Slots& operator()( const SlotKeyType &key, SPTR(Slot< R (A...) >) slot ); //{}
-
-    /// Creates in intern a new slot from function and registers it in m_slots
-    template<typename F, typename ...A>
-    Slots& operator()( const SlotKeyType &key, F f, A...a ); //{}
-
-    /// Returns the SlotBase associated to the key, if key does not exist, the ptr is null
-    FWCOM_API SPTR( SlotBase ) operator[]( const SlotKeyType &key ) const;
-
-    /// Assigns the worker to all slots stored in m_slots
-    FWCOM_API void setWorker( const SPTR(::fwThread::Worker) &worker );
-
-    /// Returns all SlotKeyType registered in m_slots
-    FWCOM_API SlotKeyContainerType getSlotKeys() const;
-
-#ifdef COM_LOG
-    /// Set new id for all slots using their key in m_slots, a prefix can be added
-    FWCOM_API void setID( const std::string prefix = "" );
-#endif
-
-protected:
-
-    /// Copy constructor forbidden
-    Slots( const Slots& );
-
-    /// Copy constructor forbidden
-    Slots& operator=( const Slots& );
-
-    /// Association < key , SPTR( SlotBase ) >
-    SlotMapType m_slots;
-};
-
-} // namespace fwCom
-
-#endif //__FWCOM_SLOTS_HPP__
diff --git a/SrcLib/core/fwCom/include/fwCom/Slots.hxx b/SrcLib/core/fwCom/include/fwCom/Slots.hxx
index 123248c..479f524 100644
--- a/SrcLib/core/fwCom/include/fwCom/Slots.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/Slots.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,164 +15,32 @@
 #include "fwCom/Slot.hpp"
 #include "fwCom/Slot.hxx"
 
-//-----------------------------------------------------------------------------
 
 namespace fwCom
 {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2, A3, A4, A5 ) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2, A3, A4 ) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-template<typename R, typename A1, typename A2, typename A3 >
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2, A3 ) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-template<typename R, typename A1, typename A2 >
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R ( A1, A2 ) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-template<typename R, typename A1 >
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R ( A1 ) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-template<typename R>
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R () >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A>
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R (A...) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename F, typename A1, typename A2, typename A3, typename A4, typename A5 >
-Slots& Slots::operator()( const SlotKeyType &key, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
+template<typename F, typename ... A>
+Slots& Slots::operator()( const SlotKeyType &key, F f, A ... a )
 {
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a1, a2, a3, a4, a5 ) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
+    SPTR( SlotBase ) slotBase = std::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a ...) );
+    return this->operator()(key, slotBase);
 }
 
+// Only define it when fwCom/HasSlots.hpp has been included
+// This saves us a file like fwCom/HasSlots.hxx
+#ifdef __FWCOM_HASSLOTS_HPP__
 
-
-template<typename F, typename A1, typename A2, typename A3, typename A4 >
-Slots& Slots::operator()( const SlotKeyType &key, F f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a1, a2, a3, a4 ) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
-}
-
-
-
-template<typename F, typename A1, typename A2, typename A3 >
-Slots& Slots::operator()( const SlotKeyType &key, F f, A1 a1, A2 a2, A3 a3 )
+template<typename F, typename A>
+SPTR(Slot< typename ::fwCom::util::convert_function_type< F >::type >)
+HasSlots::newSlot( const ::fwCom::Slots::SlotKeyType & key, F f, A a )
 {
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a1, a2, a3 ) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
+    auto slot = ::fwCom::newSlot(f, a);
+    this->m_slots(key, slot);
+    return slot;
 }
 
+#endif
 
-
-template<typename F, typename A1, typename A2 >
-Slots& Slots::operator()( const SlotKeyType &key, F f, A1 a1, A2 a2 )
-{
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a1, a2 ) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
-}
-
-
-
-template<typename F, typename A1 >
-Slots& Slots::operator()( const SlotKeyType &key, F f, A1 a1 )
-{
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a1 ) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
-}
-
-
-
-template<typename F>
-Slots& Slots::operator()( const SlotKeyType &key, F f)
-{
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename F, typename ...A>
-Slots& Slots::operator()( const SlotKeyType &key, F f, A...a )
-{
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a...) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } // namespace fwCom
 
 #endif //__FWCOM_SLOTS_HXX__
diff --git a/SrcLib/core/fwCom/include/fwCom/Slots.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/Slots.hxx.vrdc
deleted file mode 100644
index 23b28f7..0000000
--- a/SrcLib/core/fwCom/include/fwCom/Slots.hxx.vrdc
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOM_SLOTS_HXX__
-#define __FWCOM_SLOTS_HXX__
-
-
-#ifndef __FWCOM_SLOTS_HPP__
-#error fwCom/Slots.hpp not included
-#endif
-
-#include "fwCom/Slot.hpp"
-#include "fwCom/Slot.hxx"
-
-//-----------------------------------------------------------------------------
-
-namespace fwCom
-{
-
-template<typename R, typename ...A>
-Slots& Slots::operator()( const SlotKeyType &key, SPTR(Slot< R (A...) >) slot )
-{
-    SPTR( SlotBase ) slotBase = ::boost::dynamic_pointer_cast< SlotBase >( slot );
-    m_slots.insert( SlotMapType::value_type(key, slotBase) );
-    return *this;
-}
-
-template<typename F, typename ...A>
-Slots& Slots::operator()( const SlotKeyType &key, F f, A...a )
-{
-    SPTR( SlotBase ) slot = ::boost::dynamic_pointer_cast< SlotBase >( ::fwCom::newSlot(f, a...) );
-    m_slots.insert( SlotMapType::value_type(key, slot) );
-    return *this;
-}
-
-
-} // namespace fwCom
-
-#endif //__FWCOM_SLOTS_HXX__
diff --git a/SrcLib/core/fwCom/include/fwCom/config.hpp b/SrcLib/core/fwCom/include/fwCom/config.hpp
deleted file mode 100644
index 851d0c1..0000000
--- a/SrcLib/core/fwCom/include/fwCom/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2012.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWCOM_CONFIG_HPP_
-#define _FWCOM_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWCOM_EXPORTS
-            #define FWCOM_API __declspec(dllexport)
-        #else
-            #define FWCOM_API __declspec(dllimport)
-        #endif
-
-        #define FWCOM_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWCOM_EXPORTS
-            #define FWCOM_API __attribute__ ((visibility("default")))
-            #define FWCOM_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWCOM_API __attribute__ ((visibility("hidden")))
-            #define FWCOM_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWCOM_API
-        #define FWCOM_CLASS_API
-
-    #endif
-
-#endif //FWCOM_API
-
diff --git a/SrcLib/core/fwCom/include/fwCom/exception/AlreadyConnected.hpp b/SrcLib/core/fwCom/include/fwCom/exception/AlreadyConnected.hpp
index 69ca432..4c49a14 100644
--- a/SrcLib/core/fwCom/include/fwCom/exception/AlreadyConnected.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/exception/AlreadyConnected.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,7 @@ namespace exception
 /// Bad call exception.
 struct AlreadyConnected : ::fwCore::Exception
 {
-    FWCOM_API AlreadyConnected ( const std::string &err ) ;
+    FWCOM_API AlreadyConnected ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwCom/include/fwCom/exception/BadCall.hpp b/SrcLib/core/fwCom/include/fwCom/exception/BadCall.hpp
index 06b5418..f4226a7 100644
--- a/SrcLib/core/fwCom/include/fwCom/exception/BadCall.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/exception/BadCall.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,7 @@ namespace exception
 /// Bad call exception.
 struct BadCall : ::fwCore::Exception
 {
-    FWCOM_API BadCall ( const std::string &err ) ;
+    FWCOM_API BadCall ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwCom/include/fwCom/exception/BadRun.hpp b/SrcLib/core/fwCom/include/fwCom/exception/BadRun.hpp
index 841f493..7d044cc 100644
--- a/SrcLib/core/fwCom/include/fwCom/exception/BadRun.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/exception/BadRun.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,7 @@ namespace exception
 /// Bad run exception.
 struct BadRun : ::fwCore::Exception
 {
-    FWCOM_API BadRun ( const std::string &err ) ;
+    FWCOM_API BadRun ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwCom/include/fwCom/exception/BadSlot.hpp b/SrcLib/core/fwCom/include/fwCom/exception/BadSlot.hpp
index 70f770a..dd95411 100644
--- a/SrcLib/core/fwCom/include/fwCom/exception/BadSlot.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/exception/BadSlot.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,7 +19,7 @@ namespace exception
 /// Bad slot exception.
 struct BadSlot : ::fwCore::Exception
 {
-    FWCOM_API BadSlot ( const std::string &err ) ;
+    FWCOM_API BadSlot ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwCom/include/fwCom/exception/NoWorker.hpp b/SrcLib/core/fwCom/include/fwCom/exception/NoWorker.hpp
index 644b6cb..ef189a3 100644
--- a/SrcLib/core/fwCom/include/fwCom/exception/NoWorker.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/exception/NoWorker.hpp
@@ -1,10 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_EXCEPTION_NOWORKDER_HPP__
-#define __FWCOM_EXCEPTION_NOWORKDER_HPP__
+#ifndef __FWCOM_EXCEPTION_NOWORKER_HPP__
+#define __FWCOM_EXCEPTION_NOWORKER_HPP__
 
 #include <fwCore/Exception.hpp>
 
@@ -18,7 +18,7 @@ namespace exception
 /// No worker exception.
 struct NoWorker : ::fwCore::Exception
 {
-    FWCOM_API NoWorker ( const std::string &err ) ;
+    FWCOM_API NoWorker ( const std::string &err );
 };
 
 } // namespace exception
@@ -26,7 +26,7 @@ struct NoWorker : ::fwCore::Exception
 
 } // namespace fwCom
 
-#endif /* __FWCOM_EXCEPTION_NOWORKDER_HPP__ */
+#endif /* __FWCOM_EXCEPTION_NOWORKER_HPP__ */
 
 
 
diff --git a/SrcLib/core/fwCom/include/fwCom/exception/WorkerChanged.hpp b/SrcLib/core/fwCom/include/fwCom/exception/WorkerChanged.hpp
new file mode 100644
index 0000000..f4c5e3b
--- /dev/null
+++ b/SrcLib/core/fwCom/include/fwCom/exception/WorkerChanged.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#ifndef __FWCOM_EXCEPTION_WORKERCHANGED_HPP__
+#define __FWCOM_EXCEPTION_WORKERCHANGED_HPP__
+
+#include <fwCore/Exception.hpp>
+
+#include "fwCom/config.hpp"
+
+namespace fwCom
+{
+namespace exception
+{
+
+/// No worker exception.
+struct WorkerChanged : ::fwCore::Exception
+{
+    FWCOM_API WorkerChanged ( const std::string &err );
+};
+
+} // namespace exception
+
+
+} // namespace fwCom
+
+#endif /* __FWCOM_EXCEPTION_WORKERCHANGED_HPP__ */
+
+
+
diff --git a/SrcLib/core/fwCom/include/fwCom/helper/SigSlotConnection.hpp b/SrcLib/core/fwCom/include/fwCom/helper/SigSlotConnection.hpp
new file mode 100644
index 0000000..8212377
--- /dev/null
+++ b/SrcLib/core/fwCom/include/fwCom/helper/SigSlotConnection.hpp
@@ -0,0 +1,68 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCOM_HELPER_SIGSLOTCONNECTION_HPP__
+#define __FWCOM_HELPER_SIGSLOTCONNECTION_HPP__
+
+#include "fwCom/config.hpp"
+#include <fwCom/Connection.hpp>
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/HasSlots.hpp>
+
+#include <list>
+#include <utility>
+#include <vector>
+
+
+namespace fwCom
+{
+namespace helper
+{
+
+/**
+ * @brief  This class provides few tools to ease connect/disconnect between a signal emitter and a slot receiver.
+ */
+class FWCOM_CLASS_API SigSlotConnection
+{
+
+public:
+
+    typedef std::list< ::fwCom::Connection > ConnectionContainerType;
+
+    typedef std::pair< ::fwCom::Signals::SignalKeyType, ::fwCom::Slots::SlotKeyType > KeyConnectionType;
+
+    typedef std::vector< KeyConnectionType > KeyConnectionsType;
+
+    /// Constructor, do nothing
+    FWCOM_API SigSlotConnection();
+
+    /// Destructor, call disconnect()
+    FWCOM_API virtual ~SigSlotConnection();
+
+    /// Connect signal to slot, and register this new connection in  m_connections
+    FWCOM_API void connect(const ::fwCom::HasSignals::csptr& hasSignals, ::fwCom::Signals::SignalKeyType signalKey,
+                           const ::fwCom::HasSlots::csptr& hasSlots, ::fwCom::Slots::SlotKeyType slotKey );
+
+    /// Connect signals to slots, and register these new connections in  m_connections
+    FWCOM_API void connect(const ::fwCom::HasSignals::csptr& hasSignals, const ::fwCom::HasSlots::csptr& hasSlots,
+                           const KeyConnectionsType& keyConnections );
+
+    /// Add a connection
+    FWCOM_API void addConnection( ::fwCom::Connection connection );
+
+    /// Disconnect all registered connections and clear m_connections
+    FWCOM_API void disconnect();
+
+protected:
+
+    /// Connections storage
+    ConnectionContainerType m_connections;
+};
+
+} // end namespace helper
+} // end namespace fwCom
+
+#endif // __FWCOM_HELPER_SIGSLOTCONNECTION_HPP__
diff --git a/SrcLib/core/fwCom/include/fwCom/namespace.hpp b/SrcLib/core/fwCom/include/fwCom/namespace.hpp
index fe68d09..4654626 100644
--- a/SrcLib/core/fwCom/include/fwCom/namespace.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -96,7 +96,7 @@ namespace util
  *     result = slotBaseSum->call<int, int, int>(40,2);
  *     result = slotBaseLen->call<size_t, std::string>("R2D2");
  *
- * @subsection SlotAsync Asynchronous calls
+ * @subsection SlotAsyncCalls Asynchronous calls
  *
  * Slots are able to work with fwThread::Worker. If a Slot has a Worker, each
  * asynchronous execution request will be done in it's worker, otherwise
@@ -108,7 +108,7 @@ namespace util
  *     slotSum->setWorker(w);
  *     slotStart->setWorker(w);
  *
- * @subsubsection SlotAsync Asynchronous `run`
+ * @subsubsection SlotAsyncRun Asynchronous `run`
  *
  * `asyncRun` method returns a <a
  * href="http://www.boost.org/doc/libs/1_52_0/doc/html/thread/synchronization.html#thread.synchronization.futures">`boost::shared_future<
@@ -118,7 +118,7 @@ namespace util
  *     // do something else ...
  *     future.wait(); //ensures slotStart is finished before continuing
  *
- * @subsubsection SlotAsync Asynchronous `call`
+ * @subsubsection SlotAsyncCall Asynchronous `call`
  *
  * `asyncCall` method returns a <a
  * href="http://www.boost.org/doc/libs/1_52_0/doc/html/thread/synchronization.html#thread.synchronization.futures">
@@ -130,6 +130,14 @@ namespace util
  *     future.wait(); //ensures slotStart is finished before continuing
  *     int result = future.get();
  *
+ * @subsubsection SlotAsyncWeakCall WeakCalls
+ *
+ * Slots asynchronous execution has been made 'weak'. That does mean that when an
+ * async call/run is pending in a worker queue:
+ * - if the slot is detroyed before the execution of this call, the call will be canceled.
+ * - if the slot's worker is changed before the execution of this call, the
+ *   call will be canceled.
+ *
  *
  * @section Signals Signals
  *
@@ -242,4 +250,3 @@ namespace util
 } // namespace fwCom
 
 #endif /* __FWCOM_NAMESPACE_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp b/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp
index 3be846d..44ec2ff 100644
--- a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,9 +18,9 @@ namespace fwCom
 {
 
 
-    /**
-     * @brief util
-     */
+/**
+ * @brief util
+ */
 namespace util
 {
 
@@ -42,31 +42,9 @@ template< typename F >
 struct AutoBind< F, 0 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 
 };
 
@@ -76,31 +54,9 @@ template< typename F >
 struct AutoBind< F, 1 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -109,31 +65,9 @@ template< typename F >
 struct AutoBind< F, 2 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -142,31 +76,9 @@ template< typename F >
 struct AutoBind< F, 3 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -175,31 +87,9 @@ template< typename F >
 struct AutoBind< F, 4 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -208,31 +98,9 @@ template< typename F >
 struct AutoBind< F, 5 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -241,31 +109,9 @@ template< typename F >
 struct AutoBind< F, 6 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -274,31 +120,9 @@ template< typename F >
 struct AutoBind< F, 7 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -307,31 +131,9 @@ template< typename F >
 struct AutoBind< F, 8 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -340,31 +142,9 @@ template< typename F >
 struct AutoBind< F, 9 >
 {
     typedef typename convert_function_type< F >::type FunctionType;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template< typename W, typename A1, typename A2, typename A3 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2, A3 a3 ); //{};
-template< typename W, typename A1, typename A2 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1, A2 a2 ); //{};
-template< typename W, typename A1 >
-    static ::boost::function< FunctionType > wrap( W f, A1 a1 ); //{};
-template< typename W>
-    static ::boost::function< FunctionType > wrap( W f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 
+    template< typename W, typename ... A >
+    static ::boost::function< FunctionType > wrap( W f, A ... a );
 };
 
 
@@ -376,31 +156,8 @@ template< typename W, typename ...A >
  * If F is a member method pointer, autobind takes the object on wich we desire to call the method
  * as second argument.
  */
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename F, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ); //{};
-template <typename F, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2, A3 a3, A4 a4 ); //{};
-template <typename F, typename A1, typename A2, typename A3 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2, A3 a3 ); //{};
-template <typename F, typename A1, typename A2 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2 ); //{};
-template <typename F, typename A1 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1 ); //{};
-template <typename F>
-::boost::function< typename convert_function_type< F >::type > autobind(F f); //{};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename F, typename ...A >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A...a); //{};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
+template <typename F, typename ... A >
+::boost::function< typename convert_function_type< F >::type > autobind(F f, A ... a);
 
 
 
diff --git a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp.vrdc
deleted file mode 100644
index b000289..0000000
--- a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hpp.vrdc
+++ /dev/null
@@ -1,168 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_UTIL_AUTOBIND_HPP__
-#define __FWCOM_UTIL_AUTOBIND_HPP__
-
-#include <boost/function.hpp>
-
-#include "fwCom/util/convert_function_type.hpp"
-
-
-/**
- * @brief fwCom
- */
-namespace fwCom
-{
-
-
-    /**
-     * @brief util
-     */
-namespace util
-{
-
-
-/**
- * @class AutoBind
- * @brief Automatic binding class.
- * This class allow to bind automatically a function/method with the right number of arguments.
- *
- * @tparam F Desired binding signature.
- * @tparam PLACEHOLDERS_NB number of placeholders to use.
- */
-template< typename F, int PLACEHOLDERS_NB >
-struct AutoBind;
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 0 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 1 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 2 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 3 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 4 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 5 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 6 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 7 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 8 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/// AutoBind specialization.
-template< typename F >
-struct AutoBind< F, 9 >
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-
-template< typename W, typename ...A >
-    static ::boost::function< FunctionType > wrap( W f, A...a ); //{};
-};
-
-
-/**
- * @brief Automatic bind of given function 
- *
- * @return a boost function of type F if F is a function type, of type *F if F is a function pointer,
- * or of the corresponding function type if F is a member method pointer (like R (C::*)(A1, A2, ..))
- * If F is a member method pointer, autobind takes the object on wich we desire to call the method
- * as second argument.
- */
-template <typename F, typename ...A >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A...a); //{};
-
-
-
-} //namespace util
-
-} //namespace fwCom
-
-#endif /* __FWCOM_UTIL_AUTOBIND_HPP__ */
diff --git a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx b/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx
index 79508c2..b7435c8 100644
--- a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx
+++ b/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,833 +20,106 @@ namespace fwCom
 
 namespace util
 {
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f)
-{
-    return ::boost::bind( f);
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a... );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f)
-{
-    return ::boost::bind( f, _1 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f)
-{
-    return ::boost::bind( f, _1, _2 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2, _3 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2, _3 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f)
-{
-    return ::boost::bind( f, _1, _2, _3 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3, _4 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3, _4 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3, _4 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2, _3, _4 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2, _3, _4 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f)
-{
-    return ::boost::bind( f, _1, _2, _3, _4 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3, _4, _5 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3, _4, _5 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3, _4, _5 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2, _3, _4, _5 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2, _3, _4, _5 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f)
-{
-    return ::boost::bind( f, _1, _2, _3, _4, _5 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f)
-{
-    return ::boost::bind( f, _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3, _4, _5, _6, _7 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3, _4, _5, _6, _7 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3, _4, _5, _6, _7 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2, _3, _4, _5, _6, _7 );
-}
-
 
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2, _3, _4, _5, _6, _7 );
-}
-
-
-
-template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f)
-{
-    return ::boost::bind( f, _1, _2, _3, _4, _5, _6, _7 );
-}
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A...a )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6, _7 );
+    return ::boost::bind( f, a ... );
 }
 
+//-----------------------------------------------------------------------------
 
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
 template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1 );
 }
 
-
+//-----------------------------------------------------------------------------
 
 template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1, _2 );
 }
 
-
+//-----------------------------------------------------------------------------
 
 template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1, _2, _3 );
 }
 
-
+//-----------------------------------------------------------------------------
 
 template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A1 a1, A2 a2 )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a1, a2, _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1, _2, _3, _4 );
 }
 
-
+//-----------------------------------------------------------------------------
 
 template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A1 a1 )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a1, _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1, _2, _3, _4, _5 );
 }
 
-
+//-----------------------------------------------------------------------------
 
 template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f)
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1, _2, _3, _4, _5, _6 );
 }
 
+//-----------------------------------------------------------------------------
 
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A...a )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6, _7, _8 );
+    return ::boost::bind( f, a ..., _1, _2, _3, _4, _5, _6, _7 );
 }
 
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, a5, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    return ::boost::bind( f, a1, a2, a3, a4, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2, typename A3 >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A1 a1, A2 a2, A3 a3 )
-{
-    return ::boost::bind( f, a1, a2, a3, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1, typename A2 >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A1 a1, A2 a2 )
-{
-    return ::boost::bind( f, a1, a2, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
-
-template< typename F >
-template< typename W, typename A1 >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A1 a1 )
-{
-    return ::boost::bind( f, a1, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
+//-----------------------------------------------------------------------------
 
 template< typename F >
-template< typename W>
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f)
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A ... a )
 {
-    return ::boost::bind( f, _1, _2, _3, _4, _5, _6, _7, _8, _9 );
+    return ::boost::bind( f, a ..., _1, _2, _3, _4, _5, _6, _7, _8 );
 }
 
+//-----------------------------------------------------------------------------
 
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
 template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename F, typename A1, typename A2, typename A3, typename A4, typename A5 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 )
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a1, a2, a3, a4, a5 );
-}
-
-
-
-
-template <typename F, typename A1, typename A2, typename A3, typename A4 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2, A3 a3, A4 a4 )
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a1, a2, a3, a4 );
-}
-
-
-
-
-template <typename F, typename A1, typename A2, typename A3 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2, A3 a3 )
+template< typename W, typename ... A >
+::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A ... a )
 {
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a1, a2, a3 );
+    return ::boost::bind( f, a ..., _1, _2, _3, _4, _5, _6, _7, _8, _9 );
 }
 
+//-----------------------------------------------------------------------------
 
-
-
-template <typename F, typename A1, typename A2 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1, A2 a2 )
+template <typename F, typename ... A >
+::boost::function< typename convert_function_type< F >::type > autobind(F f, A ... a)
 {
     typedef typename convert_function_type< F >::type FunctionType;
     const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a1, a2 );
+    return AutoBind< F, arity >::wrap(f, a ...);
 }
 
 
-
-
-template <typename F, typename A1 >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A1 a1 )
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a1 );
-}
-
-
-
-
-template <typename F>
-::boost::function< typename convert_function_type< F >::type > autobind(F f)
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f);
-}
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename F, typename ...A >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A...a)
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a...);
-}
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
 } //namespace util
 
 } //namespace fwCom
diff --git a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx.vrdc b/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx.vrdc
deleted file mode 100644
index 5c93e7f..0000000
--- a/SrcLib/core/fwCom/include/fwCom/util/AutoBind.hxx.vrdc
+++ /dev/null
@@ -1,120 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_UTIL_AUTOBIND_HXX__
-#define __FWCOM_UTIL_AUTOBIND_HXX__
-
-#ifndef __FWCOM_UTIL_AUTOBIND_HPP__
-#error fwCom/util/AutoBind.hpp not included
-#endif
-
-#include <boost/bind.hpp>
-#include <boost/function_types/function_arity.hpp>
-
-
-namespace fwCom
-{
-
-
-namespace util
-{
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 0 >::FunctionType > AutoBind< F, 0 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a... );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 1 >::FunctionType > AutoBind< F, 1 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 2 >::FunctionType > AutoBind< F, 2 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 3 >::FunctionType > AutoBind< F, 3 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 4 >::FunctionType > AutoBind< F, 4 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 5 >::FunctionType > AutoBind< F, 5 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 6 >::FunctionType > AutoBind< F, 6 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 7 >::FunctionType > AutoBind< F, 7 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6, _7 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 8 >::FunctionType > AutoBind< F, 8 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6, _7, _8 );
-}
-
-
-template< typename F >
-template< typename W, typename ...A >
-::boost::function< typename AutoBind< F, 9 >::FunctionType > AutoBind< F, 9 >::wrap( W f, A...a )
-{
-    return ::boost::bind( f, a..., _1, _2, _3, _4, _5, _6, _7, _8, _9 );
-}
-
-
-template <typename F, typename ...A >
-::boost::function< typename convert_function_type< F >::type > autobind(F f, A...a)
-{
-    typedef typename convert_function_type< F >::type FunctionType;
-    const int arity = ::boost::function_types::function_arity< FunctionType >::value;
-    return AutoBind< F, arity >::wrap(f, a...);
-}
-
-
-
-} //namespace util
-
-} //namespace fwCom
-
-#endif /* __FWCOM_UTIL_AUTOBIND_HXX__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/util/WeakCall.hpp b/SrcLib/core/fwCom/include/fwCom/util/WeakCall.hpp
index a5d758f..bb335c4 100644
--- a/SrcLib/core/fwCom/include/fwCom/util/WeakCall.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/util/WeakCall.hpp
@@ -1,21 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWCOM_UTIL_WEAKCALL_HPP__
 #define __FWCOM_UTIL_WEAKCALL_HPP__
 
-#include <boost/function.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
+#include "fwCom/exception/WorkerChanged.hpp"
 
 #include <fwCore/mt/types.hpp>
+#include <fwCore/exceptionmacros.hpp>
 
-#ifdef COM_LOG
-#include "fwCom/SlotBase.hpp"
-#endif // COM_LOG
-#include "fwCom/util/log.hpp"
+#include <boost/function.hpp>
 
 namespace fwCom
 {
@@ -29,6 +26,8 @@ namespace util
  * callable only once.
  * A bad_weak_ptr exception is thrown if the weak_ptr is expired when operator()
  * is called
+ * A ::fwCom::exception::WorkerChanged exception is thrown if the target slot
+ * worker changed since weakcall request
  * @tparam T Stored object type.
  * @tparam R Stored function return type.
  */
@@ -36,95 +35,67 @@ template< typename T, typename R >
 struct WeakCall
 {
 
-    WeakCall( const ::boost::shared_ptr< T const > &ptr, ::boost::function< R() > f)
+    WeakCall( const std::shared_ptr< T const >& ptr, ::boost::function< R() > f)
         : m_weakPtr(ptr), m_func(f)
     {
-        OSLM_COM("WeakCall object : " << ptr->getFullClassname() );
-#ifdef COM_LOG
-        this->m_objectType = ptr->getFullClassname();
-        ::fwCom::SlotBase::csptr slot = ::boost::dynamic_pointer_cast< const ::fwCom::SlotBase >(ptr);
-        if(slot)
-        {
-            this->m_objectId = slot->getID();
-        }
-#endif // COM_LOG
+        SLM_TRACE("WeakCall object : " + ptr->getFullClassname() );
     }
 
-    WeakCall( const ::boost::shared_ptr< T const > &ptr, ::boost::function< R() > f, ::fwCore::mt::ReadWriteMutex& m)
-        : m_weakPtr(ptr), m_func(f), m_lock( ::boost::make_shared< ::fwCore::mt::ReadLock > (::boost::ref(m)) )
+    WeakCall( const std::shared_ptr< T const >& ptr, ::boost::function< R() > f,
+              const std::shared_ptr< ::fwThread::Worker >& m)
+        : m_weakPtr(ptr), m_func(f), m_worker( m )
     {
-        OSLM_COM("WeakCall object : " << ptr->getFullClassname() );
-#ifdef COM_LOG
-        this->m_objectType = ptr->getFullClassname();
-        ::fwCom::SlotBase::csptr slot = ::boost::dynamic_pointer_cast< const ::fwCom::SlotBase >(ptr);
-        if(slot)
-        {
-            this->m_objectId = slot->getID();
-        }
-#endif // COM_LOG
+        SLM_TRACE("WeakCall object : " + ptr->getFullClassname() );
     }
 
     ~WeakCall()
     {
-
     }
 
     R operator ()() const
     {
-        OSLM_COM("WeakCall : trying to execute WeakCall related to :"
-                 << this->m_objectType << ", " << this->m_objectId);
-
-        OSLM_COM_IF( "Failed to execute WeakCall related to :"
-                 << this->m_objectType << ", " << this->m_objectId,
-                 this->m_weakPtr.expired() );
-
-        ::boost::shared_ptr< T const > ptr(this->m_weakPtr.lock());
+        std::shared_ptr< T const > ptr(this->m_weakPtr.lock());
 
         if (!ptr)
         {
-            try
-            {
-                this->m_lock.reset();
-            }
-            catch(...)
-            {
-                // may throw an exception if pointed lock locks a destroyed mutex
-            }
+            m_worker.reset();
             // will throw an exception because m_weakPtr is expired
-            ::boost::shared_ptr< T const > ptr(this->m_weakPtr);
+            std::shared_ptr< T const > ptr(this->m_weakPtr);
         }
 
-        ::boost::shared_ptr< ::fwCore::mt::ReadLock > lock(this->m_lock);
+        ::fwCore::mt::ReadLock lock(ptr->m_workerMutex);
 
-        this->m_lock.reset();
+        std::shared_ptr< ::fwThread::Worker > worker = m_worker.lock();
+
+        if (worker && ptr->m_worker != worker)
+        {
+            //Worker changed since WeakCall creation
+            FW_RAISE_EXCEPTION(::fwCom::exception::WorkerChanged("Worker changed since WeakCall creation"));
+        }
 
         this->m_weakPtr.reset();
 
         return this->m_func();
     }
 
-protected:
-    mutable ::boost::weak_ptr< T const > m_weakPtr;
-    ::boost::function< R() > m_func;
-    mutable ::boost::shared_ptr< ::fwCore::mt::ReadLock > m_lock;
-
-#ifdef COM_LOG
-    std::string m_objectType;
-    std::string m_objectId;
-#endif // COM_LOG
+    protected:
+        mutable std::weak_ptr< T const > m_weakPtr;
+        ::boost::function< R() > m_func;
+        mutable std::weak_ptr< ::fwThread::Worker > m_worker;
 };
 
 
 /// Returns weak call from given object and function.
 template <typename T, typename R >
-WeakCall<T, R> weakcall( const ::boost::shared_ptr< T const > &ptr, ::boost::function< R() > f)
+WeakCall<T, R> weakcall( const std::shared_ptr< T const >& ptr, ::boost::function< R() > f)
 {
     return WeakCall<T, R>(ptr, f);
 }
 
 /// Returns weak call from given object, function and mutex.
 template <typename T, typename R >
-WeakCall<T, R> weakcall( const ::boost::shared_ptr< T const > &ptr, ::boost::function< R() > f, ::fwCore::mt::ReadWriteMutex& m)
+WeakCall<T, R> weakcall( const std::shared_ptr< T const >& ptr, ::boost::function< R() > f,
+                         const std::shared_ptr< ::fwThread::Worker >& m)
 {
     return WeakCall<T, R>(ptr, f, m);
 }
diff --git a/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp b/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp
index 708c7d8..c8d3456 100644
--- a/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,100 +22,18 @@ template <typename F>
 struct convert_function_type;
 
 /// Convert class member method type to equivalent function type.
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5 >
-struct convert_function_type< R (C::*) ( Args1, Args2, Args3, Args4, Args5 )  >
+template <typename R, typename C, typename ... Args >
+struct convert_function_type< R (C::*)( Args ... )  >
 {
-    typedef R type( Args1, Args2, Args3, Args4, Args5 ) ;
+    typedef R type ( Args ... );
 };
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4 >
-struct convert_function_type< R (C::*) ( Args1, Args2, Args3, Args4 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3 >
-struct convert_function_type< R (C::*) ( Args1, Args2, Args3 )  >
-{
-    typedef R type( Args1, Args2, Args3 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2 >
-struct convert_function_type< R (C::*) ( Args1, Args2 )  >
-{
-    typedef R type( Args1, Args2 ) ;
-};
-template <typename R, typename C, typename Args1 >
-struct convert_function_type< R (C::*) ( Args1 )  >
-{
-    typedef R type( Args1 ) ;
-};
-template <typename R, typename C>
-struct convert_function_type< R (C::*) ()  >
-{
-    typedef R type() ;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename R, typename C, typename ...Args >
-struct convert_function_type< R (C::*) ( Args... )  >
-{
-    typedef R type( Args... ) ;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
 
 /// Convert class const member method type to equivalent function type.
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5 >
-struct convert_function_type< R (C::*) ( Args1, Args2, Args3, Args4, Args5 ) const  >
+template <typename R, typename C, typename ... Args >
+struct convert_function_type< R (C::*)( Args ... ) const  >
 {
-    typedef R type( Args1, Args2, Args3, Args4, Args5 ) ;
+    typedef R type ( Args ... );
 };
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4 >
-struct convert_function_type< R (C::*) ( Args1, Args2, Args3, Args4 ) const  >
-{
-    typedef R type( Args1, Args2, Args3, Args4 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3 >
-struct convert_function_type< R (C::*) ( Args1, Args2, Args3 ) const  >
-{
-    typedef R type( Args1, Args2, Args3 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2 >
-struct convert_function_type< R (C::*) ( Args1, Args2 ) const  >
-{
-    typedef R type( Args1, Args2 ) ;
-};
-template <typename R, typename C, typename Args1 >
-struct convert_function_type< R (C::*) ( Args1 ) const  >
-{
-    typedef R type( Args1 ) ;
-};
-template <typename R, typename C>
-struct convert_function_type< R (C::*) () const  >
-{
-    typedef R type() ;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename R, typename C, typename ...Args >
-struct convert_function_type< R (C::*) ( Args... ) const  >
-{
-    typedef R type( Args... ) ;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
 
 /// Extract function type from a boost function.
 template <typename F>
diff --git a/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp.vrdc b/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp.vrdc
deleted file mode 100644
index 2d25ff3..0000000
--- a/SrcLib/core/fwCom/include/fwCom/util/convert_function_type.hpp.vrdc
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef __FWCOM_UTIL_CONVERT_FUNCTION_TYPE_HPP__
-#define __FWCOM_UTIL_CONVERT_FUNCTION_TYPE_HPP__
-
-#include <boost/function.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-
-
-namespace fwCom
-{
-
-
-namespace util
-{
-
-
-template <typename F>
-struct convert_function_type;
-
-/// Convert class member method type to equivalent function type.
-template <typename R, typename C, typename ...Args >
-struct convert_function_type< R (C::*) ( Args... )  >
-{
-    typedef R type( Args... ) ;
-};
-
-/// Convert class const member method type to equivalent function type.
-template <typename R, typename C, typename ...Args >
-struct convert_function_type< R (C::*) ( Args... ) const  >
-{
-    typedef R type( Args... ) ;
-};
-
-/// Extract function type from a boost function.
-template <typename F>
-struct convert_function_type< ::boost::function< F > >
-{
-    typedef F type;
-};
-
-/// Convert function pointer type to function type.
-template <typename F>
-struct convert_function_type
-{
-    typedef typename ::boost::remove_pointer<F>::type type;
-};
-
-
-} //namespace util
-
-} //namespace fwCom
-
-#endif /* __FWCOM_UTIL_CONVERT_FUNCTION_TYPE_HPP__ */
-
diff --git a/SrcLib/core/fwCom/include/fwCom/util/log.hpp b/SrcLib/core/fwCom/include/fwCom/util/log.hpp
deleted file mode 100644
index 366154e..0000000
--- a/SrcLib/core/fwCom/include/fwCom/util/log.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOM_UTIL_LOG_HPP_
-#define _FWCOM_UTIL_LOG_HPP_
-
-#include <fwCore/spyLog.hpp>
-
-/** @{ */
-# ifdef COM_LOG
-/** Communication message macros.  */
-#  define SLM_COM(message)                      \
-    SL_ERROR(_SPYLOG_SPYLOGGER_, message)
-/** Com stringstream message macros.  */
-#  define OSLM_COM(message)                     \
-    OSL_ERROR(_SPYLOG_SPYLOGGER_, message)
-/** Conditionnal com message macros.  */
-#  define SLM_COM_IF(message, cond)                     \
-    SL_ERROR_IF(_SPYLOG_SPYLOGGER_, message, cond)
-/** Conditionnal com stringstream message macros.  */
-#  define OSLM_COM_IF(message, cond)                    \
-    OSL_ERROR_IF(_SPYLOG_SPYLOGGER_, message, cond)
-# else
-/** Communication message macros.  */
-#  define SLM_COM(message) // nothing
-/** Com stringstream message macros.  */
-#  define OSLM_COM(message) // nothing
-/** Conditionnal com message macros.  */
-#  define SLM_COM_IF(message, cond) // nothing
-/** Conditionnal com stringstream message macros.  */
-#  define OSLM_COM_IF(message, cond) // nothing
-# endif
-/**  @} */
-
-#endif  // _FWCOM_UTIL_LOG_HPP_
diff --git a/SrcLib/core/fwCom/include/fwCom/util/remove_last_arg.hpp b/SrcLib/core/fwCom/include/fwCom/util/remove_last_arg.hpp
index b2da341..29e85fb 100644
--- a/SrcLib/core/fwCom/include/fwCom/util/remove_last_arg.hpp
+++ b/SrcLib/core/fwCom/include/fwCom/util/remove_last_arg.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,85 +21,87 @@ namespace util
  *
  * @tparam F Funtion type whereof to remove last argument
  */
-template < typename F > 
+template < typename F >
 struct remove_last_arg;
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 , typename A9 > 
+template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7,
+           typename A8, typename A9 >
 struct remove_last_arg< R(A1, A2, A3, A4, A5, A6, A7, A8, A9) >
 {
-    typedef R type(A1, A2, A3, A4, A5, A6, A7, A8);
+    typedef R type (A1, A2, A3, A4, A5, A6, A7, A8);
 };
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 , typename A4 , typename A5 , typename A6 , typename A7 , typename A8 > 
+template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7,
+           typename A8 >
 struct remove_last_arg< R(A1, A2, A3, A4, A5, A6, A7, A8) >
 {
-    typedef R type(A1, A2, A3, A4, A5, A6, A7);
+    typedef R type (A1, A2, A3, A4, A5, A6, A7);
 };
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 , typename A4 , typename A5 , typename A6 , typename A7 > 
+template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
 struct remove_last_arg< R(A1, A2, A3, A4, A5, A6, A7) >
 {
-    typedef R type(A1, A2, A3, A4, A5, A6);
+    typedef R type (A1, A2, A3, A4, A5, A6);
 };
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 , typename A4 , typename A5 , typename A6 > 
+template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
 struct remove_last_arg< R(A1, A2, A3, A4, A5, A6) >
 {
-    typedef R type(A1, A2, A3, A4, A5);
+    typedef R type (A1, A2, A3, A4, A5);
 };
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 , typename A4 , typename A5 > 
+template < typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
 struct remove_last_arg< R(A1, A2, A3, A4, A5) >
 {
-    typedef R type(A1, A2, A3, A4);
+    typedef R type (A1, A2, A3, A4);
 };
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 , typename A4 > 
+template < typename R, typename A1, typename A2, typename A3, typename A4 >
 struct remove_last_arg< R(A1, A2, A3, A4) >
 {
-    typedef R type(A1, A2, A3);
+    typedef R type (A1, A2, A3);
 };
 
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2, typename A3 > 
+template < typename R, typename A1, typename A2, typename A3 >
 struct remove_last_arg< R(A1, A2, A3) >
 {
-    typedef R type(A1, A2);
+    typedef R type (A1, A2);
 };
 
 /// remove_last_arg specialization.
-template < typename R, typename A1, typename A2 > 
+template < typename R, typename A1, typename A2 >
 struct remove_last_arg< R(A1, A2) >
 {
-    typedef R type(A1);
+    typedef R type (A1);
 };
 
 /// remove_last_arg specialization.
-template < typename R, typename A1 > 
+template < typename R, typename A1 >
 struct remove_last_arg< R(A1) >
 {
-    typedef R type();
+    typedef R type ();
 };
 
 
 /// remove_last_arg specialization.
-template < typename R > 
+template < typename R >
 struct remove_last_arg< R() >
 {
-    typedef R type();
+    typedef R type ();
 };
 
 
diff --git a/SrcLib/core/fwCom/scripts/test/unpacked.cpp b/SrcLib/core/fwCom/scripts/test/unpacked.cpp
deleted file mode 100644
index 6bcd5fc..0000000
--- a/SrcLib/core/fwCom/scripts/test/unpacked.cpp
+++ /dev/null
@@ -1,2123 +0,0 @@
-//  SLM_LOG
-#include <memory>
-#include <functional>
-#include <iostream>
-#include <map>
-#include <sstream>
-
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-#include <boost/function_types/function_arity.hpp>
-#include <boost/function_types/function_type.hpp>
-#include <boost/function_types/parameter_types.hpp>
-#include <boost/function_types/result_type.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/typeof/std/utility.hpp>
-#include <boost/utility/enable_if.hpp>
-
-#include <boost/algorithm/string/join.hpp>
-
-#include <boost/asio/io_service.hpp>
-#include <boost/thread.hpp>
-
-
-
-#include <boost/signals2/signal.hpp>
-
-
-template <typename F> struct convert_function_types;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5, typename Args6, typename Args7, typename Args8, typename Args9 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3, Args4, Args5, Args6, Args7, Args8, Args9 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4, Args5, Args6, Args7, Args8, Args9 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5, typename Args6, typename Args7, typename Args8 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3, Args4, Args5, Args6, Args7, Args8 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4, Args5, Args6, Args7, Args8 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5, typename Args6, typename Args7 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3, Args4, Args5, Args6, Args7 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4, Args5, Args6, Args7 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5, typename Args6 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3, Args4, Args5, Args6 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4, Args5, Args6 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4, typename Args5 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3, Args4, Args5 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4, Args5 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3, typename Args4 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3, Args4 )  >
-{
-    typedef R type( Args1, Args2, Args3, Args4 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2, typename Args3 >
-struct convert_function_types< R (C::*) ( Args1, Args2, Args3 )  >
-{
-    typedef R type( Args1, Args2, Args3 ) ;
-};
-template <typename R, typename C, typename Args1, typename Args2 >
-struct convert_function_types< R (C::*) ( Args1, Args2 )  >
-{
-    typedef R type( Args1, Args2 ) ;
-};
-template <typename R, typename C, typename Args1 >
-struct convert_function_types< R (C::*) ( Args1 )  >
-{
-    typedef R type( Args1 ) ;
-};
-template <typename R, typename C>
-struct convert_function_types< R (C::*) ()  >
-{
-    typedef R type() ;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename R, typename C, typename ...Args >
-struct convert_function_types< R (C::*) ( Args... )  >
-{
-    typedef R type( Args... ) ;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-
-template <typename F>
-struct convert_function_types< boost::function< F > >
-{
-    typedef F type;
-};
-
-template <typename F>
-struct convert_function_types
-{
-    typedef typename boost::remove_pointer<F>::type type;
-};
-
-//-----------------------------------------------------------------------------
-
-
-template < typename F, typename enable = void >
-struct function_types ;
-
-template < typename F>
-struct function_types <F, typename boost::enable_if<typename boost::is_function< F >::type >::type >
-{
-    typedef  F FunctionType;
-    enum { arity = boost::function_types::function_arity< FunctionType >::value } ;
-    typedef typename boost::function_types::result_type<FunctionType>::type result_type;
-    template < int ARG_NUMBER, bool check = false >
-    struct arg
-    {
-        BOOST_STATIC_ASSERT( (!check) || ARG_NUMBER < boost::function_types::function_arity< FunctionType >::value );
-        typedef typename boost::mpl::at_c<boost::function_types::parameter_types< FunctionType >,ARG_NUMBER>::type type;
-    };
-};
-
-
-
-//-----------------------------------------------------------------------------
-
-
-struct Slot
-{
-
-    struct bad_call { };
-    struct bad_run { };
-
-    virtual ~Slot(){};
-
-    template< typename A1, typename A2, typename A3 > void run(A1 a1, A2 a2, A3 a3);
-    template< typename A1, typename A2 > void run(A1 a1, A2 a2);
-    template< typename A1 > void run(A1 a1);
-    void run();
-
-    template< typename R, typename A1, typename A2, typename A3 > R call(A1 a1, A2 a2, A3 a3);
-    template< typename R, typename A1, typename A2 > R call(A1 a1, A2 a2);
-    template< typename R, typename A1 > R call(A1 a1);
-    template< typename R > R call();
-
-
-protected:
-    template < typename F >
-    std::string getTypeName()
-    {
-        std::string signature = std::string("type(") + typeid(F).name() + ")";
-        return signature;
-    }
-
-    std::string m_signature;
-
-};
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1 = boost::mpl::void_, typename A2 = boost::mpl::void_, typename A3 = boost::mpl::void_, typename A4 = boost::mpl::void_, typename A5 = boost::mpl::void_, typename A6 = boost::mpl::void_, typename A7 = boost::mpl::void_, typename A8 = boost::mpl::void_, typename A9 = boost::mpl::void_ >
-struct slot_args : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4, A5  a5, A6  a6, A7  a7, A8  a8, A9  a9 ) = 0;
-};
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-struct slot_args< A1, A2, A3, A4, A5, A6, A7, A8 , boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4, A5  a5, A6  a6, A7  a7, A8  a8 ) = 0;
-};
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-struct slot_args< A1, A2, A3, A4, A5, A6, A7 , boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4, A5  a5, A6  a6, A7  a7 ) = 0;
-};
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-struct slot_args< A1, A2, A3, A4, A5, A6 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4, A5  a5, A6  a6 ) = 0;
-};
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct slot_args< A1, A2, A3, A4, A5 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4, A5  a5 ) = 0;
-};
-template< typename A1, typename A2, typename A3, typename A4 >
-struct slot_args< A1, A2, A3, A4 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3, A4  a4 ) = 0;
-};
-template< typename A1, typename A2, typename A3 >
-struct slot_args< A1, A2, A3 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2, A3  a3 ) = 0;
-};
-template< typename A1, typename A2 >
-struct slot_args< A1, A2 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1, A2  a2 ) = 0;
-};
-template< typename A1 >
-struct slot_args< A1 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run( A1  a1 ) = 0;
-};
-template<>
-struct slot_args< boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_> : Slot
-{
-    virtual void run() = 0;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename ... A>
-struct slot_args : Slot
-{
-    virtual void run(A ... a) = 0;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1 = boost::mpl::void_ , typename A2 = boost::mpl::void_ , typename A3 = boost::mpl::void_ , typename A4 = boost::mpl::void_ , typename A5 = boost::mpl::void_ , typename A6 = boost::mpl::void_ , typename A7 = boost::mpl::void_ , typename A8 = boost::mpl::void_ , typename A9 = boost::mpl::void_  >
-struct slot_result : slot_args< A1, A2, A3, A4, A5, A6, A7, A8, A9 >
-{
-    virtual R call( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) = 0;
-};
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-struct slot_result<  R, A1, A2, A3, A4, A5, A6, A7, A8 , boost::mpl::void_ > : slot_args< A1, A2, A3, A4, A5, A6, A7, A8 >
-{
-    virtual R call( A1, A2, A3, A4, A5, A6, A7, A8 ) = 0;
-};
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-struct slot_result<  R, A1, A2, A3, A4, A5, A6, A7 , boost::mpl::void_, boost::mpl::void_ > : slot_args< A1, A2, A3, A4, A5, A6, A7 >
-{
-    virtual R call( A1, A2, A3, A4, A5, A6, A7 ) = 0;
-};
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-struct slot_result<  R, A1, A2, A3, A4, A5, A6 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args< A1, A2, A3, A4, A5, A6 >
-{
-    virtual R call( A1, A2, A3, A4, A5, A6 ) = 0;
-};
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct slot_result<  R, A1, A2, A3, A4, A5 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args< A1, A2, A3, A4, A5 >
-{
-    virtual R call( A1, A2, A3, A4, A5 ) = 0;
-};
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-struct slot_result<  R, A1, A2, A3, A4 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args< A1, A2, A3, A4 >
-{
-    virtual R call( A1, A2, A3, A4 ) = 0;
-};
-template< typename R, typename A1, typename A2, typename A3 >
-struct slot_result<  R, A1, A2, A3 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args< A1, A2, A3 >
-{
-    virtual R call( A1, A2, A3 ) = 0;
-};
-template< typename R, typename A1, typename A2 >
-struct slot_result<  R, A1, A2 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args< A1, A2 >
-{
-    virtual R call( A1, A2 ) = 0;
-};
-template< typename R, typename A1 >
-struct slot_result<  R, A1 , boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args< A1 >
-{
-    virtual R call( A1 ) = 0;
-};
-template< typename R>
-struct slot_result<  R, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_, boost::mpl::void_ > : slot_args<>
-{
-    virtual R call() = 0;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename R, typename ... A >
-struct slot_result : slot_args<A...>
-{
-    virtual R call(A...) = 0;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-
-
-
-
-template< typename F > struct SlotFunction;
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-struct SlotFunction< boost::function< R ( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) > > : SlotFunction< R ( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) >
-{
-    typedef R FunctorType ( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ) {        m_func( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ) { return m_func( a1, a2, a3, a4, a5, a6, a7, a8, a9 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-struct SlotFunction< boost::function< R ( A1, A2, A3, A4, A5, A6, A7, A8 ) > > : SlotFunction< R ( A1, A2, A3, A4, A5, A6, A7, A8 ) >
-{
-    typedef R FunctorType ( A1, A2, A3, A4, A5, A6, A7, A8 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ) {        m_func( a1, a2, a3, a4, a5, a6, a7, a8 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ) { return m_func( a1, a2, a3, a4, a5, a6, a7, a8 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-struct SlotFunction< boost::function< R ( A1, A2, A3, A4, A5, A6, A7 ) > > : SlotFunction< R ( A1, A2, A3, A4, A5, A6, A7 ) >
-{
-    typedef R FunctorType ( A1, A2, A3, A4, A5, A6, A7 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ) {        m_func( a1, a2, a3, a4, a5, a6, a7 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ) { return m_func( a1, a2, a3, a4, a5, a6, a7 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-struct SlotFunction< boost::function< R ( A1, A2, A3, A4, A5, A6 ) > > : SlotFunction< R ( A1, A2, A3, A4, A5, A6 ) >
-{
-    typedef R FunctorType ( A1, A2, A3, A4, A5, A6 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ) {        m_func( a1, a2, a3, a4, a5, a6 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ) { return m_func( a1, a2, a3, a4, a5, a6 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct SlotFunction< boost::function< R ( A1, A2, A3, A4, A5 ) > > : SlotFunction< R ( A1, A2, A3, A4, A5 ) >
-{
-    typedef R FunctorType ( A1, A2, A3, A4, A5 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) {        m_func( a1, a2, a3, a4, a5 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ) { return m_func( a1, a2, a3, a4, a5 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-struct SlotFunction< boost::function< R ( A1, A2, A3, A4 ) > > : SlotFunction< R ( A1, A2, A3, A4 ) >
-{
-    typedef R FunctorType ( A1, A2, A3, A4 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3, A4 a4 ) {        m_func( a1, a2, a3, a4 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3, A4 a4 ) { return m_func( a1, a2, a3, a4 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2, typename A3 >
-struct SlotFunction< boost::function< R ( A1, A2, A3 ) > > : SlotFunction< R ( A1, A2, A3 ) >
-{
-    typedef R FunctorType ( A1, A2, A3 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2, A3 a3 ) {        m_func( a1, a2, a3 ); };
-    virtual R   call( A1 a1, A2 a2, A3 a3 ) { return m_func( a1, a2, a3 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1, typename A2 >
-struct SlotFunction< boost::function< R ( A1, A2 ) > > : SlotFunction< R ( A1, A2 ) >
-{
-    typedef R FunctorType ( A1, A2 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1, A2 a2 ) {        m_func( a1, a2 ); };
-    virtual R   call( A1 a1, A2 a2 ) { return m_func( a1, a2 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R, typename A1 >
-struct SlotFunction< boost::function< R ( A1 ) > > : SlotFunction< R ( A1 ) >
-{
-    typedef R FunctorType ( A1 ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run( A1 a1 ) {        m_func( a1 ); };
-    virtual R   call( A1 a1 ) { return m_func( a1 ); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-template<typename R>
-struct SlotFunction< boost::function< R () > > : SlotFunction< R () >
-{
-    typedef R FunctorType () ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run() {        m_func(); };
-    virtual R   call() { return m_func(); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-struct SlotFunction< boost::function< R ( A... ) > > : SlotFunction< R ( A... ) >
-{
-    typedef R FunctorType ( A... ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run(A...a) {        m_func(a...); };
-    virtual R   call(A...a) { return m_func(a...); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-struct SlotFunction< R ( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) > : slot_result< R, A1, A2, A3, A4, A5, A6, A7, A8, A9 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-struct SlotFunction< R ( A1, A2, A3, A4, A5, A6, A7, A8 ) > : slot_result< R, A1, A2, A3, A4, A5, A6, A7, A8 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3, A4, A5, A6, A7, A8 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-struct SlotFunction< R ( A1, A2, A3, A4, A5, A6, A7 ) > : slot_result< R, A1, A2, A3, A4, A5, A6, A7 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3, A4, A5, A6, A7 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-struct SlotFunction< R ( A1, A2, A3, A4, A5, A6 ) > : slot_result< R, A1, A2, A3, A4, A5, A6 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3, A4, A5, A6 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-struct SlotFunction< R ( A1, A2, A3, A4, A5 ) > : slot_result< R, A1, A2, A3, A4, A5 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3, A4, A5 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2, typename A3, typename A4 >
-struct SlotFunction< R ( A1, A2, A3, A4 ) > : slot_result< R, A1, A2, A3, A4 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3, A4 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2, typename A3 >
-struct SlotFunction< R ( A1, A2, A3 ) > : slot_result< R, A1, A2, A3 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2, A3 ) >();
-    }
-
-};
-template<typename R, typename A1, typename A2 >
-struct SlotFunction< R ( A1, A2 ) > : slot_result< R, A1, A2 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1, A2 ) >();
-    }
-
-};
-template<typename R, typename A1 >
-struct SlotFunction< R ( A1 ) > : slot_result< R, A1 >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A1 ) >();
-    }
-
-};
-template<typename R>
-struct SlotFunction< R () > : slot_result< R>
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R () >();
-    }
-
-};
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename R, typename ...A >
-struct SlotFunction< R ( A... ) > : slot_result< R, A... >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A... ) >();
-    }
-
-};
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-
-
-
-
-
-
-
-template< typename A1, typename A2, typename A3 > void Slot::run(A1 a1, A2 a2, A3 a3)
-{
-    typedef slot_args< A1, A2, A3 > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1,a2,a3);
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void(A1, A2, A3) >()  << std::endl;
-        this->run(a1,a2);
-    }
-}
-template< typename A1, typename A2 > void Slot::run(A1 a1, A2 a2)
-{
-    typedef slot_args< A1, A2 > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1,a2);
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void(A1, A2) >()  << std::endl;
-        this->run(a1);
-    }
-}
-template< typename A1 > void Slot::run(A1 a1)
-{
-    typedef slot_args< A1 > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1);
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void(A1) >()  << std::endl;
-        this->run();
-    }
-}
-void Slot::run()
-{
-    typedef slot_args< > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run();
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void() >()  << std::endl;
-        throw Slot::bad_run();
-    }
-}
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3 > R Slot::call(A1 a1, A2 a2, A3 a3)
-{
-    typedef SlotFunction< R (A1, A2, A3) > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1,a2,a3);
-    }
-    else
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void(A1, A2, A3) >()  << std::endl;
-        return this->call<R>(a1,a2);
-    }
-}
-template< typename R, typename A1, typename A2 > R Slot::call(A1 a1, A2 a2)
-{
-    typedef SlotFunction< R(A1, A2) > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1,a2);
-    }
-    else
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void(A1, A2) >()  << std::endl;
-        return this->call<R>(a1);
-    }
-}
-template< typename R, typename A1 > R Slot::call(A1 a1)
-{
-    typedef SlotFunction< R(A1) > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1);
-    }
-    else
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void(A1) >()  << std::endl;
-        return this->call<R>();
-    }
-}
-template< typename R > R Slot::call()
-{
-    typedef slot_result< R > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void() >()  << std::endl;
-        return fun->call();
-    }
-    throw Slot::bad_call();
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-
-class Slots
-{
-public:
-    typedef std::string SlotKeyType;
-    typedef boost::shared_ptr< Slot > SlotPtr;
-    typedef std::map< SlotKeyType, SlotPtr > SlotMap;
-
-    Slots(){}
-    Slots( const SlotKeyType &key, SlotPtr slot )
-    {
-        (*this)(key, slot);
-    }
-
-
-    Slots& operator()( const SlotKeyType &key, SlotPtr slot )
-    {
-        m_slots.insert( SlotMap::value_type(key, slot) );
-        return *this;
-    }
-
-    SlotPtr operator()( const SlotKeyType &key )
-    {
-        SlotMap::iterator it = m_slots.find(key);
-
-        if(it != m_slots.end())
-        {
-            return it->second;
-        }
-
-        return SlotPtr();
-    }
-
-protected:
-    SlotMap m_slots;
-};
-
-
-
-
-//-----------------------------------------------------------------------------
-
-
-
-template<typename T>
-struct is_shared_ptr
-{
-    enum { value = false };
-};
-
-template<typename T>
-struct is_shared_ptr< boost::shared_ptr< T > >
-{
-    enum { value = true };
-};
-
-
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-// thread management
-
-
-void WorkerThread( boost::asio::io_service & io_service )
-{
-std::cout << "Thread " << boost::this_thread::get_id() <<" Start\n";
-io_service.run();
-std::cout << "Thread " << boost::this_thread::get_id() <<" Finish\n";
-}
-
-
-class Worker
-{
-public:
-    typedef ::boost::asio::io_service IOServiceType;
-    typedef ::boost::asio::io_service::work WorkType;
-    typedef ::boost::shared_ptr< WorkType > WorkPtrType;
-
-    Worker();
-    ~Worker();
-
-    template< typename Handler>
-    void post(Handler handler)
-    {
-        m_ioService.post(handler);
-    }
-
-protected:
-    Worker( const Worker& );
-    Worker& operator=( const Worker& );
-
-
-    IOServiceType m_ioService;
-    WorkPtrType m_work;
-    boost::thread m_thread;
-};
-
-Worker::Worker() :
-    m_ioService(),
-    m_work( ::boost::make_shared< WorkType >(boost::ref(m_ioService)) ),
-    m_thread( ::boost::bind(&WorkerThread, boost::ref(m_ioService)) )
-{
-}
-
-Worker::~Worker()
-{
-    m_work.reset();
-    m_ioService.stop();
-    m_thread.join();
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-template <typename R>
-struct TaskHandler
-{
-    TaskHandler(boost::packaged_task<R>& task) : m_Task(boost::move(task)) {}
-    TaskHandler(const TaskHandler& that) : m_Task(boost::move(that.m_Task)) {}
-
-    void operator ()() { this->m_Task(); }
-
-private:
-    mutable boost::packaged_task<R> m_Task;
-};
-
-
-template <typename R>
-inline boost::function< void() > moveTaskIntoFunction(boost::packaged_task<R>& task)
-{
-    return TaskHandler<R>(task);
-}
-
-
-
-
-
-class Method
-{
-public :
-
-
-    Method(Slots::SlotPtr slot) : m_slot(slot) {}
-
-    Slots::SlotPtr operator=(Slots::SlotPtr slot) { m_slot = slot ; return slot;}
-    Method& operator=(const Method &other) { m_slot = other.m_slot ; return *this;}
-    // template < typename SLOTPTR >
-    // Method( const SLOTPTR &slot, typename boost::enable_if_c< is_shared_ptr< SLOTPTR >::value >::type*x=0 )  : m_slot(slot) {}
-
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 0 >::type*x=0  ) { setSlot(f); }
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 1 >::type*x=0  ) { setSlot(f,_1); }
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 2 >::type*x=0  ) { setSlot(f,_1,_2); }
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 3 >::type*x=0  ) { setSlot(f,_1,_2,_3); }
-
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 0 >::type*x=0 ) { setSlot(f,o); }
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 1 >::type*x=0 ) { setSlot(f,o,_1); }
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 2 >::type*x=0 ) { setSlot(f,o,_1,_2); }
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 3 >::type*x=0 ) { setSlot(f,o,_1,_2,_3); }
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    void operator()( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6, args7, args8, args9 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    void operator()( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6, args7, args8 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    void operator()( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6, args7 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    void operator()( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-    void operator()( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4 >
-    void operator()( A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        m_slot->run( args1, args2, args3, args4 );
-    }
-
-template < typename A1, typename A2, typename A3 >
-    void operator()( A1 args1, A2 args2, A3 args3 )
-    {
-        m_slot->run( args1, args2, args3 );
-    }
-
-template < typename A1, typename A2 >
-    void operator()( A1 args1, A2 args2 )
-    {
-        m_slot->run( args1, args2 );
-    }
-
-template < typename A1 >
-    void operator()( A1 args1 )
-    {
-        m_slot->run( args1 );
-    }
-
-
-    void operator()()
-    {
-        m_slot->run();
-    }
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename ...A>
-    void operator()( A... args  )
-    {
-        m_slot->run( args... );
-    }
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    void run( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6, args7, args8, args9 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    void run( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6, args7, args8 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    void run( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6, args7 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    void run( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5, args6 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-    void run( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        m_slot->run( args1, args2, args3, args4, args5 );
-    }
-
-template < typename A1, typename A2, typename A3, typename A4 >
-    void run( A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        m_slot->run( args1, args2, args3, args4 );
-    }
-
-template < typename A1, typename A2, typename A3 >
-    void run( A1 args1, A2 args2, A3 args3 )
-    {
-        m_slot->run( args1, args2, args3 );
-    }
-
-template < typename A1, typename A2 >
-    void run( A1 args1, A2 args2 )
-    {
-        m_slot->run( args1, args2 );
-    }
-
-template < typename A1 >
-    void run( A1 args1 )
-    {
-        m_slot->run( args1 );
-    }
-
-
-    void run()
-    {
-        m_slot->run();
-    }
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename ...A>
-    void run( A... args  )
-    {
-        m_slot->run( args... );
-    }
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    R call( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        return m_slot->call<R>( args1, args2, args3, args4, args5, args6, args7, args8, args9 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    R call( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        return m_slot->call<R>( args1, args2, args3, args4, args5, args6, args7, args8 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    R call( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        return m_slot->call<R>( args1, args2, args3, args4, args5, args6, args7 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    R call( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        return m_slot->call<R>( args1, args2, args3, args4, args5, args6 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    R call( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        return m_slot->call<R>( args1, args2, args3, args4, args5 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4 >
-    R call( A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        return m_slot->call<R>( args1, args2, args3, args4 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3 >
-    R call( A1 args1, A2 args2, A3 args3 )
-    {
-        return m_slot->call<R>( args1, args2, args3 );
-    }
-
-
-
-template <typename R, typename A1, typename A2 >
-    R call( A1 args1, A2 args2 )
-    {
-        return m_slot->call<R>( args1, args2 );
-    }
-
-
-
-template <typename R, typename A1 >
-    R call( A1 args1 )
-    {
-        return m_slot->call<R>( args1 );
-    }
-
-
-
-template <typename R>
-    R call()
-    {
-        return m_slot->call<R>();
-    }
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename R, typename ...A>
-    R call( A... args  )
-    {
-        return m_slot->call<R>( args... );
-    }
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3, A4, A5, A6, A7, A8, A9 >( args1, args2, args3, args4, args5, args6, args7, args8, args9 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3, A4, A5, A6, A7, A8 >( args1, args2, args3, args4, args5, args6, args7, args8 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3, A4, A5, A6, A7 >( args1, args2, args3, args4, args5, args6, args7 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3, A4, A5, A6 >( args1, args2, args3, args4, args5, args6 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2, typename A3, typename A4, typename A5 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3, A4, A5 >( args1, args2, args3, args4, args5 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2, typename A3, typename A4 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3, A4 >( args1, args2, args3, args4 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2, typename A3 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2, A3 args3 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2, A3 >( args1, args2, args3 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1, typename A2 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1, A2 args2 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1, A2 >( args1, args2 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-template< typename A1 >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A1 args1 )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A1 >( args1 ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-    ::boost::shared_future< void > asyncRun( Worker &worker)
-    {
-        ::boost::packaged_task<void> task(  this->bindRun() );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename ...A >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A... args )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A... >( args... ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3, A4, A5, A6, A7, A8, A9 >( args1, args2, args3, args4, args5, args6, args7, args8, args9 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3, A4, A5, A6, A7, A8 >( args1, args2, args3, args4, args5, args6, args7, args8 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3, A4, A5, A6, A7 >( args1, args2, args3, args4, args5, args6, args7 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3, A4, A5, A6 >( args1, args2, args3, args4, args5, args6 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3, A4, A5 >( args1, args2, args3, args4, args5 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3, typename A4 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3, A4 >( args1, args2, args3, args4 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2, A3 args3 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2, A3 >( args1, args2, args3 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1, typename A2 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1, A2 args2 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1, A2 >( args1, args2 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R, typename A1 >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A1 args1 )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A1 >( args1 ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-template< typename R>
-    ::boost::shared_future< R > asyncCall( Worker &worker)
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R>() );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template< typename R, typename ...A >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A... args )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A... >( args... ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-Slots::SlotPtr slot(){return m_slot;};
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) ) &Method::run< A1, A2, A3, A4, A5, A6, A7, A8, A9 >, this, args1, args2, args3, args4, args5, args6, args7, args8, args9 );
-    }
-
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3, A4, A5, A6, A7, A8 ) ) &Method::run< A1, A2, A3, A4, A5, A6, A7, A8 >, this, args1, args2, args3, args4, args5, args6, args7, args8 );
-    }
-
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3, A4, A5, A6, A7 ) ) &Method::run< A1, A2, A3, A4, A5, A6, A7 >, this, args1, args2, args3, args4, args5, args6, args7 );
-    }
-
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3, A4, A5, A6 ) ) &Method::run< A1, A2, A3, A4, A5, A6 >, this, args1, args2, args3, args4, args5, args6 );
-    }
-
-
-template < typename A1, typename A2, typename A3, typename A4, typename A5 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3, A4, A5 ) ) &Method::run< A1, A2, A3, A4, A5 >, this, args1, args2, args3, args4, args5 );
-    }
-
-
-template < typename A1, typename A2, typename A3, typename A4 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3, A4 ) ) &Method::run< A1, A2, A3, A4 >, this, args1, args2, args3, args4 );
-    }
-
-
-template < typename A1, typename A2, typename A3 >
-    boost::function< void() > bindRun( A1 args1, A2 args2, A3 args3 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2, A3 ) ) &Method::run< A1, A2, A3 >, this, args1, args2, args3 );
-    }
-
-
-template < typename A1, typename A2 >
-    boost::function< void() > bindRun( A1 args1, A2 args2 )
-    {
-        return boost::bind( ( void (Method::*)( A1, A2 ) ) &Method::run< A1, A2 >, this, args1, args2 );
-    }
-
-
-template < typename A1 >
-    boost::function< void() > bindRun( A1 args1 )
-    {
-        return boost::bind( ( void (Method::*)( A1 ) ) &Method::run< A1 >, this, args1 );
-    }
-
-
-
-    boost::function< void() > bindRun()
-    {
-        return boost::bind( ( void (Method::*)() ) &Method::run, this);
-    }
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename ...A>
-    boost::function< void() > bindRun( A... args  )
-    {
-        return boost::bind( ( void (Method::*)(A...) ) &Method::run< A... >, this, args... );
-    }
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8, typename A9 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8, A9 args9 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3, A4, A5, A6, A7, A8, A9 ) ) &Method::call<R, A1, A2, A3, A4, A5, A6, A7, A8, A9 >, this, args1, args2, args3, args4, args5, args6, args7, args8, args9 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7, typename A8 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7, A8 args8 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3, A4, A5, A6, A7, A8 ) ) &Method::call<R, A1, A2, A3, A4, A5, A6, A7, A8 >, this, args1, args2, args3, args4, args5, args6, args7, args8 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6, typename A7 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6, A7 args7 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3, A4, A5, A6, A7 ) ) &Method::call<R, A1, A2, A3, A4, A5, A6, A7 >, this, args1, args2, args3, args4, args5, args6, args7 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5, typename A6 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5, A6 args6 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3, A4, A5, A6 ) ) &Method::call<R, A1, A2, A3, A4, A5, A6 >, this, args1, args2, args3, args4, args5, args6 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4, typename A5 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4, A5 args5 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3, A4, A5 ) ) &Method::call<R, A1, A2, A3, A4, A5 >, this, args1, args2, args3, args4, args5 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3, typename A4 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3, A4 args4 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3, A4 ) ) &Method::call<R, A1, A2, A3, A4 >, this, args1, args2, args3, args4 );
-    }
-
-
-
-template <typename R, typename A1, typename A2, typename A3 >
-    boost::function< R() > bindCall( A1 args1, A2 args2, A3 args3 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2, A3 ) ) &Method::call<R, A1, A2, A3 >, this, args1, args2, args3 );
-    }
-
-
-
-template <typename R, typename A1, typename A2 >
-    boost::function< R() > bindCall( A1 args1, A2 args2 )
-    {
-        return boost::bind( ( R (Method::*)( A1, A2 ) ) &Method::call<R, A1, A2 >, this, args1, args2 );
-    }
-
-
-
-template <typename R, typename A1 >
-    boost::function< R() > bindCall( A1 args1 )
-    {
-        return boost::bind( ( R (Method::*)( A1 ) ) &Method::call<R, A1 >, this, args1 );
-    }
-
-
-
-template <typename R>
-    boost::function< R() > bindCall()
-    {
-        return boost::bind( ( R (Method::*)() ) &Method::call<R>, this);
-    }
-
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template <typename R, typename ...A>
-    boost::function< R() > bindCall( A... args  )
-    {
-        return boost::bind( ( R (Method::*)(A...) ) &Method::call<R, A...>, this, args... );
-    }
-
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-protected:
-#ifdef BOOST_NO_VARIADIC_TEMPLATES
-//===============================================================================
-//===============================================================================
-//==================================== BEGIN ====================================
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4, typename Bindings5, typename Bindings6, typename Bindings7, typename Bindings8, typename Bindings9 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4, Bindings5  bindings5, Bindings6  bindings6, Bindings7  bindings7, Bindings8  bindings8, Bindings9  bindings9 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3, bindings4, bindings5, bindings6, bindings7, bindings8, bindings9 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4, typename Bindings5, typename Bindings6, typename Bindings7, typename Bindings8 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4, Bindings5  bindings5, Bindings6  bindings6, Bindings7  bindings7, Bindings8  bindings8 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3, bindings4, bindings5, bindings6, bindings7, bindings8 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4, typename Bindings5, typename Bindings6, typename Bindings7 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4, Bindings5  bindings5, Bindings6  bindings6, Bindings7  bindings7 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3, bindings4, bindings5, bindings6, bindings7 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4, typename Bindings5, typename Bindings6 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4, Bindings5  bindings5, Bindings6  bindings6 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3, bindings4, bindings5, bindings6 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4, typename Bindings5 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4, Bindings5  bindings5 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3, bindings4, bindings5 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3, typename Bindings4 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3, Bindings4  bindings4 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3, bindings4 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2, typename Bindings3 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2, Bindings3  bindings3 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2, bindings3 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1, typename Bindings2 > void setSlot(F f, Bindings1  bindings1, Bindings2  bindings2 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1, bindings2 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F, typename Bindings1 > void setSlot(F f, Bindings1  bindings1 )
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings1 ) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-template<typename F> void setSlot(F f)
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-//===================================== END =====================================
-//===============================================================================
-//===============================================================================
-
-#else  // BOOST_NO_VARIADIC_TEMPLATES
-template<typename F, typename ...Bindings> void setSlot(F f, Bindings ...bindings)
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings...) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-
-#endif  // BOOST_NO_VARIADIC_TEMPLATES
-Slots::SlotPtr m_slot;
-};
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-struct Event{};
-struct KeyEvent:Event{};
-
-struct has_slots
-{
-    Slots::SlotPtr slot( Slots::SlotKeyType key ){ return m_slots(key);};
-protected:
-    Slots m_slots;
-};
-
-//-----------------------------------------------------------------------------
-
-class A : public has_slots
-{
-
-public:
-    A()
-    {
-        has_slots::m_slots
-            ( "start"      , Method(&A::start      , this).slot() )
-            ( "update"     , Method(&A::update     , this).slot() )
-            ( "onEvent"    , Method(&A::onEvent    , this).slot() )
-            ( "onKeyPress" , Method(&A::onKeyPress , this).slot() )
-            ;
-
-    }
-    void start(){ std::cout<<"A::start"<<std::endl; }
-    void update(){ std::cout<<"A::update"<<std::endl; }
-    void onEvent( Event *e )
-    {
-        std::cout<<"A::onEvent "<< e <<std::endl;
-    }
-    void onKeyPress( KeyEvent *e )
-    {
-        std::cout<<"A::onKeyPress " << e <<std::endl;
-    }
-    void print( std::string msg ){ std::cout << "A::print " <<msg<<std::endl; }
-
-};
-
-//-----------------------------------------------------------------------------
-
-class B : public has_slots
-{
-public:
-    B()
-    {
-        has_slots::m_slots
-            ( "invoke", Method(&B::invoke, this).slot() )
-            ;
-
-    }
-    void invoke() { std::cout<<"B::invoke"<<std::endl; }
-
-    void print( std::string str ) { std::cout<< str <<std::endl; }
-};
-
-//-----------------------------------------------------------------------------
-
-
-int sum(int a, int b)
-{
-    return a + b;
-}
-
-void fe(Event*)
-{
-    std::cout << "fe " <<std::endl;
-}
-
-void fke(KeyEvent*)
-{
-    std::cout << "fke " <<std::endl;
-}
-
-
-int main(int argc, char* argv[])
-{
-
-    using namespace std;
-
-    A * a = new A();
-    B b;
-
-    Event e;
-    KeyEvent ke;
-
-    cout << "============ v2 ============" << endl;
-    // v2
-    {
-        Method call ( &A::start, a );
-        call();
-        call.call<void>();
-    }
-
-    {
-        Method call ( &B::invoke, &b );
-        call();
-        call.call<void>();
-        call.call<void>("toto", 3);
-        call.call<void>(true, Event());
-    }
-
-
-    {
-        Method call ( &A::onEvent, a );
-        call(&e);
-        call.run<Event*>(&ke);
-    }
-
-    {
-        Method call ( &sum );
-        call(5,7);
-        call(5,7,8);
-        call.run(5,7,8);
-        cout << "sum: " << call.call<int>(5,7) << endl;
-    }
-
-    {
-        Method call ( &A::onKeyPress, a );
-        call.run(&ke);
-    }
-
-    cout << "============ v3 ============" << endl;
-
-    // v3
-    {
-        Method call ( a->slot("start") );
-        call.run();
-        call.call<void>();
-
-        call = b.slot("invoke");
-
-        Method call2 = call;
-        call2.run();
-
-        call2 = call;
-        call2.run();
-
-        call = a->slot("update");
-        Method call3(call);
-        call3.run();
-    }
-
-    {
-        Method call ( b.slot("invoke") );
-        call();
-        call.call<void>();
-    }
-
-    {
-        Method call ( a->slot("onEvent") );
-        call.run(&e);
-        call.run<Event*>(&ke);
-    }
-
-    {
-        Method call ( a->slot("onKeyPress") );
-        call.run(&ke);
-
-        a->slot("onKeyPress")->run(&ke);
-    }
-
-
-    {
-
-        Slots slots;
-        slots
-            ( "sum_slot", Method( &sum ).slot() )
-            ;
-
-        Method call ( slots("sum_slot") ) ;
-
-        cout << "sum_slot: " << call.call<int>(44,66) << endl;
-    }
-
-
-    cout << "============ slot ============" << endl;
-
-    // direct slot
-    {
-        a->slot("start")->run(&ke);
-        a->slot("onEvent")->run(&e);
-        a->slot("onKeyPress")->run(&ke);
-        b.slot("invoke")->run();
-    }
-
-
-    cout << "============ signals ============" << endl;
-    // signal
-    {
-          boost::signals2::signal<void (Event*)> sig;
-
-          Method call1 ( &A::start, a );
-          Method call2 ( &B::invoke, &b );
-          Method call3 ( &A::onEvent, a );
-
-          sig.connect(boost::ref(call1));
-          sig.connect(boost::ref(call2));
-          sig.connect(boost::ref(call3));
-
-          sig( &e );
-    }
-
-
-    cout << "============ worker ============" << endl;
-    cout << "============ worker & async ============" << endl;
-
-    {
-        Method invoke ( &B::invoke, &b );
-        Method print ( &B::print, &b );
-        // call.call<void>();
-        // call.call<void>("toto", 3);
-        // call.call<void>(true, Event());
-
-        Worker w;
-
-        w.post(invoke);
-        w.post( boost::bind( &B::invoke, &b ) );
-        w.post( boost::bind( &B::print, &b, "iosrv") );
-
-        // print.bindRun(std::string("bind test"))();
-
-        // w.post(print.bindRun(std::string("bind test")));
-
-        w.post( boost::bind( &B::print, &b, "print : 1") );
-        w.post( boost::bind( &B::print, &b, "print : 2") );
-        w.post( boost::bind( &B::print, &b, "print : 3") );
-
-
-        Method sumFunc ( &sum );
-
-        Worker w1;
-        Worker w2;
-
-        boost::shared_future< int > future = sumFunc.asyncCall<int>(w1, 2,8);
-        cout << "sum.is_ready(): " << future.is_ready() << endl;
-
-        invoke.asyncRun(w1);
-        print.asyncRun(w1, std::string("async run w1 0"));
-        print.asyncRun(w1, std::string("async run w1 1"));
-        print.asyncRun(w1, std::string("async run w1 2"));
-        print.asyncRun(w1, std::string("async run w1 3"));
-        print.asyncRun(w1, std::string("async run w1 4"));
-        print.asyncRun(w1, std::string("async run w1 5"));
-
-
-        print.asyncRun(w2, std::string("async run w2 0"));
-        print.asyncRun(w2, std::string("async run w2 1"));
-        print.asyncRun(w2, std::string("async run w2 2"));
-        print.asyncRun(w2, std::string("async run w2 3"));
-        print.asyncRun(w2, std::string("async run w2 4"));
-        print.asyncRun(w2, std::string("async run w2 5"));
-
-
-
-        future.wait();
-        cout << "sum.is_ready(): " << future.is_ready() << endl;
-        cout << "sum.has_value(): " << future.has_value() << endl;
-        cout << "sum.has_exception(): " << future.has_exception() << endl;
-        cout << "sum: " << future.get() << endl;
-
-
-
-        print.asyncRun(w1, std::string("async run w1 with wait")).wait();
-        print.asyncRun(w2, std::string("async run w2 with wait")).wait();
-
-    }
-
-
-
-    delete a;
-    return 0;
-}
-
-/* Output :
-============ v2 ============
-A::start
-A::start
-B::invoke
-B::invoke
-B::invoke
-B::invoke
-A::onEvent 0x7fff5fbff500
-A::onEvent 0x7fff5fbff4f8
-sum: 12
-A::onKeyPress 0x7fff5fbff4f8
-============ v3 ============
-A::start
-A::start
-B::invoke
-B::invoke
-A::onEvent 0x7fff5fbff500
-A::onEvent 0x7fff5fbff4f8
-A::onKeyPress 0x7fff5fbff4f8
-A::onKeyPress 0x7fff5fbff4f8
-sum_slot: 110
-============ slot ============
-A::start
-A::onEvent 0x7fff5fbff500
-A::onKeyPress 0x7fff5fbff4f8
-B::invoke
-============ signals ============
-A::start
-B::invoke
-A::onEvent 0x7fff5fbff500
-
-*/
-
-
diff --git a/SrcLib/core/fwCom/scripts/test/variadic.cpp b/SrcLib/core/fwCom/scripts/test/variadic.cpp
deleted file mode 100644
index f39aa91..0000000
--- a/SrcLib/core/fwCom/scripts/test/variadic.cpp
+++ /dev/null
@@ -1,848 +0,0 @@
-//  SLM_LOG
-#include <memory>
-#include <functional>
-#include <iostream>
-#include <map>
-#include <sstream>
-
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-#include <boost/function_types/function_arity.hpp>
-#include <boost/function_types/function_type.hpp>
-#include <boost/function_types/parameter_types.hpp>
-#include <boost/function_types/result_type.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/typeof/std/utility.hpp>
-#include <boost/utility/enable_if.hpp>
-
-#include <boost/algorithm/string/join.hpp>
-
-#include <boost/asio/io_service.hpp>
-#include <boost/thread.hpp>
-
-
-
-#include <boost/signals2/signal.hpp>
-
-
-template <typename F> struct convert_function_types;
-
-template <typename R, typename C, typename ...Args >
-struct convert_function_types< R (C::*) ( Args... )  >
-{
-    typedef R type( Args... ) ;
-};
-
-template <typename F>
-struct convert_function_types< boost::function< F > >
-{
-    typedef F type;
-};
-
-template <typename F>
-struct convert_function_types
-{
-    typedef typename boost::remove_pointer<F>::type type;
-};
-
-//-----------------------------------------------------------------------------
-
-
-template < typename F, typename enable = void >
-struct function_types ;
-
-template < typename F>
-struct function_types <F, typename boost::enable_if<typename boost::is_function< F >::type >::type >
-{
-    typedef  F FunctionType;
-    enum { arity = boost::function_types::function_arity< FunctionType >::value } ;
-    typedef typename boost::function_types::result_type<FunctionType>::type result_type;
-    template < int ARG_NUMBER, bool check = false >
-    struct arg
-    {
-        BOOST_STATIC_ASSERT( (!check) || ARG_NUMBER < boost::function_types::function_arity< FunctionType >::value );
-        typedef typename boost::mpl::at_c<boost::function_types::parameter_types< FunctionType >,ARG_NUMBER>::type type;
-    };
-};
-
-
-
-//-----------------------------------------------------------------------------
-
-
-struct Slot
-{
-
-    struct bad_call { };
-    struct bad_run { };
-
-    virtual ~Slot(){};
-
-    template< typename A1, typename A2, typename A3 > void run(A1 a1, A2 a2, A3 a3);
-    template< typename A1, typename A2 > void run(A1 a1, A2 a2);
-    template< typename A1 > void run(A1 a1);
-    void run();
-
-    template< typename R, typename A1, typename A2, typename A3 > R call(A1 a1, A2 a2, A3 a3);
-    template< typename R, typename A1, typename A2 > R call(A1 a1, A2 a2);
-    template< typename R, typename A1 > R call(A1 a1);
-    template< typename R > R call();
-
-
-protected:
-    template < typename F >
-    std::string getTypeName()
-    {
-        std::string signature = std::string("type(") + typeid(F).name() + ")";
-        return signature;
-    }
-
-    std::string m_signature;
-
-};
-
-
-template< typename ... A>
-struct slot_args : Slot
-{
-    virtual void run(A ... a) = 0;
-};
-
-
-template< typename R, typename ... A >
-struct slot_result : slot_args<A...>
-{
-    virtual R call(A...) = 0;
-};
-
-
-
-
-template< typename F > struct SlotFunction;
-
-
-template<typename R, typename ...A >
-struct SlotFunction< boost::function< R ( A... ) > > : SlotFunction< R ( A... ) >
-{
-    typedef R FunctorType ( A... ) ;
-
-    template< typename FUNCTOR > SlotFunction( FUNCTOR f ) : m_func(f)
-    { }
-
-
-    virtual void run(A...a) {        m_func(a...); };
-    virtual R   call(A...a) { return m_func(a...); };
-protected:
-    boost::function< FunctorType > m_func;
-};
-
-
-
-template<typename R, typename ...A >
-struct SlotFunction< R ( A... ) > : slot_result< R, A... >
-{
-    SlotFunction()
-    {
-        // this-> needed by gcc 4.2
-        this->Slot::m_signature = Slot::getTypeName< R ( A... ) >();
-    }
-
-};
-
-
-
-
-
-
-
-template< typename A1, typename A2, typename A3 > void Slot::run(A1 a1, A2 a2, A3 a3)
-{
-    typedef slot_args< A1, A2, A3 > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1,a2,a3);
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void(A1, A2, A3) >()  << std::endl;
-        this->run(a1,a2);
-    }
-}
-template< typename A1, typename A2 > void Slot::run(A1 a1, A2 a2)
-{
-    typedef slot_args< A1, A2 > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1,a2);
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void(A1, A2) >()  << std::endl;
-        this->run(a1);
-    }
-}
-template< typename A1 > void Slot::run(A1 a1)
-{
-    typedef slot_args< A1 > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run(a1);
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void(A1) >()  << std::endl;
-        this->run();
-    }
-}
-void Slot::run()
-{
-    typedef slot_args< > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        fun->run();
-    }
-    else
-    {
-        std::cerr << "failed to run : " << m_signature << " with " << Slot::getTypeName< void() >()  << std::endl;
-        throw Slot::bad_run();
-    }
-}
-
-
-
-
-template< typename R, typename A1, typename A2, typename A3 > R Slot::call(A1 a1, A2 a2, A3 a3)
-{
-    typedef SlotFunction< R (A1, A2, A3) > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1,a2,a3);
-    }
-    else
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void(A1, A2, A3) >()  << std::endl;
-        return this->call<R>(a1,a2);
-    }
-}
-template< typename R, typename A1, typename A2 > R Slot::call(A1 a1, A2 a2)
-{
-    typedef SlotFunction< R(A1, A2) > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1,a2);
-    }
-    else
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void(A1, A2) >()  << std::endl;
-        return this->call<R>(a1);
-    }
-}
-template< typename R, typename A1 > R Slot::call(A1 a1)
-{
-    typedef SlotFunction< R(A1) > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        return fun->call(a1);
-    }
-    else
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void(A1) >()  << std::endl;
-        return this->call<R>();
-    }
-}
-template< typename R > R Slot::call()
-{
-    typedef slot_result< R > SlotFuncType;
-    SlotFuncType *fun = dynamic_cast< SlotFuncType* >(this);
-    if(fun)
-    {
-        std::cerr << "failed to call : " << m_signature << " with " << Slot::getTypeName< void() >()  << std::endl;
-        return fun->call();
-    }
-    throw Slot::bad_call();
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-
-
-class Slots
-{
-public:
-    typedef std::string SlotKeyType;
-    typedef boost::shared_ptr< Slot > SlotPtr;
-    typedef std::map< SlotKeyType, SlotPtr > SlotMap;
-
-    Slots(){}
-    Slots( const SlotKeyType &key, SlotPtr slot )
-    {
-        (*this)(key, slot);
-    }
-
-
-    Slots& operator()( const SlotKeyType &key, SlotPtr slot )
-    {
-        m_slots.insert( SlotMap::value_type(key, slot) );
-        return *this;
-    }
-
-    SlotPtr operator()( const SlotKeyType &key )
-    {
-        SlotMap::iterator it = m_slots.find(key);
-
-        if(it != m_slots.end())
-        {
-            return it->second;
-        }
-
-        return SlotPtr();
-    }
-
-protected:
-    SlotMap m_slots;
-};
-
-
-
-
-//-----------------------------------------------------------------------------
-
-
-
-template<typename T>
-struct is_shared_ptr
-{
-    enum { value = false };
-};
-
-template<typename T>
-struct is_shared_ptr< boost::shared_ptr< T > >
-{
-    enum { value = true };
-};
-
-
-//-----------------------------------------------------------------------------
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-// thread management
-
-
-void WorkerThread( boost::asio::io_service & io_service )
-{
-std::cout << "Thread " << boost::this_thread::get_id() <<" Start\n";
-io_service.run();
-std::cout << "Thread " << boost::this_thread::get_id() <<" Finish\n";
-}
-
-
-class Worker
-{
-public:
-    typedef ::boost::asio::io_service IOServiceType;
-    typedef ::boost::asio::io_service::work WorkType;
-    typedef ::boost::shared_ptr< WorkType > WorkPtrType;
-
-    Worker();
-    ~Worker();
-
-    template< typename Handler>
-    void post(Handler handler)
-    {
-        m_ioService.post(handler);
-    }
-
-protected:
-    Worker( const Worker& );
-    Worker& operator=( const Worker& );
-
-
-    IOServiceType m_ioService;
-    WorkPtrType m_work;
-    boost::thread m_thread;
-};
-
-Worker::Worker() :
-    m_ioService(),
-    m_work( ::boost::make_shared< WorkType >(boost::ref(m_ioService)) ),
-    m_thread( ::boost::bind(&WorkerThread, boost::ref(m_ioService)) )
-{
-}
-
-Worker::~Worker()
-{
-    m_work.reset();
-    m_ioService.stop();
-    m_thread.join();
-}
-
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-template <typename R>
-struct TaskHandler
-{
-    TaskHandler(boost::packaged_task<R>& task) : m_Task(boost::move(task)) {}
-    TaskHandler(const TaskHandler& that) : m_Task(boost::move(that.m_Task)) {}
-
-    void operator ()() { this->m_Task(); }
-
-private:
-    mutable boost::packaged_task<R> m_Task;
-};
-
-
-template <typename R>
-inline boost::function< void() > moveTaskIntoFunction(boost::packaged_task<R>& task)
-{
-    return TaskHandler<R>(task);
-}
-
-
-
-
-
-class Method
-{
-public :
-
-
-    Method(Slots::SlotPtr slot) : m_slot(slot) {}
-
-    Slots::SlotPtr operator=(Slots::SlotPtr slot) { m_slot = slot ; return slot;}
-    Method& operator=(const Method &other) { m_slot = other.m_slot ; return *this;}
-    // template < typename SLOTPTR >
-    // Method( const SLOTPTR &slot, typename boost::enable_if_c< is_shared_ptr< SLOTPTR >::value >::type*x=0 )  : m_slot(slot) {}
-
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 0 >::type*x=0  ) { setSlot(f); }
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 1 >::type*x=0  ) { setSlot(f,_1); }
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 2 >::type*x=0  ) { setSlot(f,_1,_2); }
-    template<typename F>
-    Method( F f, typename boost::enable_if_c< function_types< typename boost::remove_pointer<F>::type >::arity == 3 >::type*x=0  ) { setSlot(f,_1,_2,_3); }
-
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 0 >::type*x=0 ) { setSlot(f,o); }
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 1 >::type*x=0 ) { setSlot(f,o,_1); }
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 2 >::type*x=0 ) { setSlot(f,o,_1,_2); }
-    template<typename F, typename O >
-    Method( F f, O *o, typename boost::enable_if_c< function_types< typename convert_function_types< F >::type >::arity == 3 >::type*x=0 ) { setSlot(f,o,_1,_2,_3); }
-
-    template <typename ...A>
-    void operator()( A... args  )
-    {
-        m_slot->run( args... );
-    }
-    template <typename ...A>
-    void run( A... args  )
-    {
-        m_slot->run( args... );
-    }
-    template <typename R, typename ...A>
-    R call( A... args  )
-    {
-        return m_slot->call<R>( args... );
-    }
-
-
-    template< typename ...A >
-    ::boost::shared_future< void > asyncRun( Worker &worker, A... args )
-    {
-        ::boost::packaged_task<void> task(  this->bindRun< A... >( args... ) );
-        ::boost::future< void > ufuture = task.get_future();
-
-        boost::function< void () > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-    template< typename R, typename ...A >
-    ::boost::shared_future< R > asyncCall( Worker &worker, A... args )
-    {
-        ::boost::packaged_task<R> task( this->bindCall< R, A... >( args... ) );
-        ::boost::future< R > ufuture = task.get_future();
-
-        boost::function< void() > f = moveTaskIntoFunction(task);
-
-        worker.post(f);
-
-        return boost::move(ufuture);
-    }
-
-
-
-    Slots::SlotPtr slot(){return m_slot;};
-
-
-    template <typename ...A>
-    boost::function< void() > bindRun( A... args  )
-    {
-        return boost::bind( ( void (Method::*)(A...) ) &Method::run< A... >, this, args... );
-    }
-
-    template <typename R, typename ...A>
-    boost::function< R() > bindCall( A... args  )
-    {
-        return boost::bind( ( R (Method::*)(A...) ) &Method::call<R, A...>, this, args... );
-    }
-
-
-protected:
-    template<typename F, typename ...Bindings> void setSlot(F f, Bindings ...bindings)
-    {
-        typedef ::boost::function< typename convert_function_types< F >::type > FunctionType;
-        FunctionType func;
-        func = boost::bind(f, bindings...) ;
-        m_slot = boost::make_shared< SlotFunction< FunctionType > > ( func );
-    }
-
-    Slots::SlotPtr m_slot;
-};
-
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-
-struct Event{};
-struct KeyEvent:Event{};
-
-struct has_slots
-{
-    Slots::SlotPtr slot( Slots::SlotKeyType key ){ return m_slots(key);};
-protected:
-    Slots m_slots;
-};
-
-//-----------------------------------------------------------------------------
-
-class A : public has_slots
-{
-
-public:
-    A()
-    {
-        has_slots::m_slots
-            ( "start"      , Method(&A::start      , this).slot() )
-            ( "update"     , Method(&A::update     , this).slot() )
-            ( "onEvent"    , Method(&A::onEvent    , this).slot() )
-            ( "onKeyPress" , Method(&A::onKeyPress , this).slot() )
-            ;
-
-    }
-    void start(){ std::cout<<"A::start"<<std::endl; }
-    void update(){ std::cout<<"A::update"<<std::endl; }
-    void onEvent( Event *e )
-    {
-        std::cout<<"A::onEvent "<< e <<std::endl;
-    }
-    void onKeyPress( KeyEvent *e )
-    {
-        std::cout<<"A::onKeyPress " << e <<std::endl;
-    }
-    void print( std::string msg ){ std::cout << "A::print " <<msg<<std::endl; }
-
-};
-
-//-----------------------------------------------------------------------------
-
-class B : public has_slots
-{
-public:
-    B()
-    {
-        has_slots::m_slots
-            ( "invoke", Method(&B::invoke, this).slot() )
-            ;
-
-    }
-    void invoke() { std::cout<<"B::invoke"<<std::endl; }
-
-    void print( std::string str ) { std::cout<< str <<std::endl; }
-};
-
-//-----------------------------------------------------------------------------
-
-
-int sum(int a, int b)
-{
-    return a + b;
-}
-
-void fe(Event*)
-{
-    std::cout << "fe " <<std::endl;
-}
-
-void fke(KeyEvent*)
-{
-    std::cout << "fke " <<std::endl;
-}
-
-
-int main(int argc, char* argv[])
-{
-
-    using namespace std;
-
-    A * a = new A();
-    B b;
-
-    Event e;
-    KeyEvent ke;
-
-    cout << "============ v2 ============" << endl;
-    // v2
-    {
-        Method call ( &A::start, a );
-        call();
-        call.call<void>();
-    }
-
-    {
-        Method call ( &B::invoke, &b );
-        call();
-        call.call<void>();
-        call.call<void>("toto", 3);
-        call.call<void>(true, Event());
-    }
-
-
-    {
-        Method call ( &A::onEvent, a );
-        call(&e);
-        call.run<Event*>(&ke);
-    }
-
-    {
-        Method call ( &sum );
-        call(5,7);
-        call(5,7,8);
-        call.run(5,7,8);
-        cout << "sum: " << call.call<int>(5,7) << endl;
-    }
-
-    {
-        Method call ( &A::onKeyPress, a );
-        call.run(&ke);
-    }
-
-    cout << "============ v3 ============" << endl;
-
-    // v3
-    {
-        Method call ( a->slot("start") );
-        call.run();
-        call.call<void>();
-
-        call = b.slot("invoke");
-
-        Method call2 = call;
-        call2.run();
-
-        call2 = call;
-        call2.run();
-
-        call = a->slot("update");
-        Method call3(call);
-        call3.run();
-    }
-
-    {
-        Method call ( b.slot("invoke") );
-        call();
-        call.call<void>();
-    }
-
-    {
-        Method call ( a->slot("onEvent") );
-        call.run(&e);
-        call.run<Event*>(&ke);
-    }
-
-    {
-        Method call ( a->slot("onKeyPress") );
-        call.run(&ke);
-
-        a->slot("onKeyPress")->run(&ke);
-    }
-
-
-    {
-
-        Slots slots;
-        slots
-            ( "sum_slot", Method( &sum ).slot() )
-            ;
-
-        Method call ( slots("sum_slot") ) ;
-
-        cout << "sum_slot: " << call.call<int>(44,66) << endl;
-    }
-
-
-    cout << "============ slot ============" << endl;
-
-    // direct slot
-    {
-        a->slot("start")->run(&ke);
-        a->slot("onEvent")->run(&e);
-        a->slot("onKeyPress")->run(&ke);
-        b.slot("invoke")->run();
-    }
-
-
-    cout << "============ signals ============" << endl;
-    // signal
-    {
-          boost::signals2::signal<void (Event*)> sig;
-
-          Method call1 ( &A::start, a );
-          Method call2 ( &B::invoke, &b );
-          Method call3 ( &A::onEvent, a );
-
-          sig.connect(boost::ref(call1));
-          sig.connect(boost::ref(call2));
-          sig.connect(boost::ref(call3));
-
-          sig( &e );
-    }
-
-
-    cout << "============ worker ============" << endl;
-    cout << "============ worker & async ============" << endl;
-
-    {
-        Method invoke ( &B::invoke, &b );
-        Method print ( &B::print, &b );
-        // call.call<void>();
-        // call.call<void>("toto", 3);
-        // call.call<void>(true, Event());
-
-        Worker w;
-
-        w.post(invoke);
-        w.post( boost::bind( &B::invoke, &b ) );
-        w.post( boost::bind( &B::print, &b, "iosrv") );
-
-        // print.bindRun(std::string("bind test"))();
-
-        // w.post(print.bindRun(std::string("bind test")));
-
-        w.post( boost::bind( &B::print, &b, "print : 1") );
-        w.post( boost::bind( &B::print, &b, "print : 2") );
-        w.post( boost::bind( &B::print, &b, "print : 3") );
-
-
-        Method sumFunc ( &sum );
-
-        Worker w1;
-        Worker w2;
-
-        boost::shared_future< int > future = sumFunc.asyncCall<int>(w1, 2,8);
-        cout << "sum.is_ready(): " << future.is_ready() << endl;
-
-        invoke.asyncRun(w1);
-        print.asyncRun(w1, std::string("async run w1 0"));
-        print.asyncRun(w1, std::string("async run w1 1"));
-        print.asyncRun(w1, std::string("async run w1 2"));
-        print.asyncRun(w1, std::string("async run w1 3"));
-        print.asyncRun(w1, std::string("async run w1 4"));
-        print.asyncRun(w1, std::string("async run w1 5"));
-
-
-        print.asyncRun(w2, std::string("async run w2 0"));
-        print.asyncRun(w2, std::string("async run w2 1"));
-        print.asyncRun(w2, std::string("async run w2 2"));
-        print.asyncRun(w2, std::string("async run w2 3"));
-        print.asyncRun(w2, std::string("async run w2 4"));
-        print.asyncRun(w2, std::string("async run w2 5"));
-
-
-
-        future.wait();
-        cout << "sum.is_ready(): " << future.is_ready() << endl;
-        cout << "sum.has_value(): " << future.has_value() << endl;
-        cout << "sum.has_exception(): " << future.has_exception() << endl;
-        cout << "sum: " << future.get() << endl;
-
-
-
-        print.asyncRun(w1, std::string("async run w1 with wait")).wait();
-        print.asyncRun(w2, std::string("async run w2 with wait")).wait();
-
-    }
-
-
-
-    delete a;
-    return 0;
-}
-
-/* Output :
-============ v2 ============
-A::start
-A::start
-B::invoke
-B::invoke
-B::invoke
-B::invoke
-A::onEvent 0x7fff5fbff500
-A::onEvent 0x7fff5fbff4f8
-sum: 12
-A::onKeyPress 0x7fff5fbff4f8
-============ v3 ============
-A::start
-A::start
-B::invoke
-B::invoke
-A::onEvent 0x7fff5fbff500
-A::onEvent 0x7fff5fbff4f8
-A::onKeyPress 0x7fff5fbff4f8
-A::onKeyPress 0x7fff5fbff4f8
-sum_slot: 110
-============ slot ============
-A::start
-A::onEvent 0x7fff5fbff500
-A::onKeyPress 0x7fff5fbff4f8
-B::invoke
-============ signals ============
-A::start
-B::invoke
-A::onEvent 0x7fff5fbff500
-
-*/
-
-
diff --git a/SrcLib/core/fwCom/scripts/variadic_parser.py b/SrcLib/core/fwCom/scripts/variadic_parser.py
deleted file mode 100644
index 64f5fe5..0000000
--- a/SrcLib/core/fwCom/scripts/variadic_parser.py
+++ /dev/null
@@ -1,452 +0,0 @@
-# -*- coding: UTF8 -*-
-
-
-import collections
-import os
-import re
-
-from pyparsing import Word, alphas, OneOrMore, Literal, Optional, \
-        delimitedList, Group, nestedExpr, Forward, CharsNotIn, \
-        originalTextFor, printables, White
-
-try:
-    import watchdog
-except:
-    watchdog = None
-
-def flatten(l):
-    for el in l:
-        if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
-            for sub in flatten(el):
-                yield sub
-        else:
-            yield el
-
-
-
-def parse_variadic_templates(txt):
-    template_param_type = Word(alphas)
-    template_variadic = Literal('...')
-    template_id = Word(alphas)
-
-    template_variadic_param = Group(
-            template_param_type + template_variadic + template_id
-            )
-
-    template_param = Group( template_param_type + template_id )
-
-    # template_params = Group ( delimitedList( template_variadic_param | Optional(template_param) ) )
-    template_params = (
-            Optional( OneOrMore(template_param + ',') )
-            + template_variadic_param
-            + Optional( OneOrMore( ',' + template_param ) )
-            )
-
-    template_params_no_variadic = (
-            template_param + Optional( OneOrMore( ',' + template_param ) )
-            )
-
-    template_decl = Optional(
-            "template"
-            + Literal("<") + template_params_no_variadic +  Literal(">")
-            ) + "template" + Literal("<") + template_params +  Literal(">")
-
-    block_content = Forward()
-    block = nestedExpr('{', '}', content=block_content) + Literal(';') * (0,1)
-    block_content <<  ( CharsNotIn('{}') | block )
-
-    decl = originalTextFor( template_decl + CharsNotIn('{') + block )
-
-
-    template_file = Forward()
-    code_block = decl | White() | Word(printables)
-    template_file << ( Optional(OneOrMore(code_block)) | template_file)
-
-
-    parsed = template_file.parseString( txt )
-
-    return parsed
-
-
-def unpack_variadic_template(tpl, dim, max_dim=-1):
-
-    comma_reg = "(?P<comma>,?) *"
-    comma_sub = "" if dim == 0 else "\g<comma> "
-
-    comma_end_reg = "(?P<comma_end>,?) *"
-    comma_end_sub = "" if dim == 0 else "\g<comma_end> "
-
-    variadic_declaration = '(?P<var_decl_type>(typename|class)) *\.\.\. *(?P<var_decl_id>\w+)'
-
-    void = 'boost::mpl::void_'
-
-    subs = []
-    subs_nocomma = []
-
-    if max_dim == -1:
-        max_dim = dim
-
-    dim_diff = max_dim-dim
-
-    is_tpl_decl = False
-
-    # Add mpl::void_ elements to simulate variadic templates structs/classes
-    template_decl_reg = ("(?P<decl_part_1>template *<(?P<decl_args>(?P<pre_var_args>[^.>]*)"
-            + variadic_declaration +
-            "(?P<post_var_args>[^>.]*))>\s*(struct|class) *\w+)"
-                         "(?P<decl_part_2>\s*[^<:{]*\s*[:{])")
-
-
-    if dim < max_dim:
-        def template_decl_sub(m):
-            spec_args = ''.join(
-                        (
-                        m.group('pre_var_args'),
-                        )
-
-                        + ( (
-                        m.group('var_decl_id'), '... ',', '
-                        ) if dim != 0 else tuple() )
-
-                        +(
-                        ', '.join( (void, ) * dim_diff ),
-
-                        m.group('post_var_args'),
-                        )
-                    )
-
-            spec_args = spec_args.replace('typename','')
-            spec_args = spec_args.replace('class','')
-
-            sub = ''
-            sub += m.group('decl_part_1')
-
-            sub += '<' + spec_args + '>'
-            sub += m.group('decl_part_2') + ' '
-            return sub
-    else:
-        if re.search(template_decl_reg, tpl):
-            is_tpl_decl = True
-
-        def template_decl_sub(m):
-            sub = ''
-            part1 = m.group('decl_part_1')
-            part1 = re.sub(variadic_declaration, '\g<0> = '+ void, part1)
-            sub += part1
-            sub += m.group('decl_part_2') + ' '
-            return sub
-
-
-
-    r = range(1, dim+1)
-
-    variadic_declaration_reg = variadic_declaration
-    variadic_declaration_sub = '\g<var_decl_type> \g<var_decl_id>{0}'
-
-    if is_tpl_decl:
-        # need to match added default values
-        variadic_declaration_reg += '(?P<has_def_value> *=? *)(?P<def_value>[^>,)]+)'
-        variadic_declaration_sub += '\g<has_def_value>\g<def_value>'
-
-
-#comma for T... or t...
-    def variadic_expand(m):
-        sub = ''
-        if dim == 0 :
-            if m.group('comma') and m.group('comma_end'):
-                sub = ', '
-        else:
-            sub += m.group('comma') + ' '
-            sub += ', '.join((m.group('id')+"{0}").format(i) for i in r)
-            sub += m.group('comma_end') + ' '
-        return sub
-
-
-
-    subs += [
-
-# Add mpl::void_ elements to simulate variadic templates structs/classes
-            (template_decl_reg, template_decl_sub),
-
-#variadic declaration ( ...T )
-            (variadic_declaration_reg,
-                ', '.join(variadic_declaration_sub.format(i) for i in r)),
-
-#function apply ( some_func(a)... )
-            ('(?P<func>\w+) *\((?P<id>\w+)\) *\.\.\.',
-                ', '.join("\g<func>( \g<id>{0} )".format(i) for i in r)),
-
-# T...t
-            ('(?P<qual>(const *)?)(?P<type>\w+)(?P<qual2> *[&*]*) *\.\.\. *(?P<arg>\w+)',
-                ', '.join("\g<qual>\g<type>{0}\g<qual2> \g<arg>{0}".format(i) for i in r)),
-
-# T... or t...
-            # ('(?P<id>\w+) *\.\.\. *(?P<end_comma>,?)',
-            ('(?P<id>\w+) *\.\.\.',
-                variadic_expand
-                # ', '.join("\g<id>{0}".format(i) for i in r)
-                ),
-
-    ]
-
-    subs_nocomma += [
-#variadic sizeof
-            ('sizeof\.\.\.\(\w+\)', str(dim)),
-            ]
-
-
-    for reg, sub in subs_nocomma:
-            tpl = re.sub(reg, sub, tpl)
-
-    for reg, sub in subs:
-        if isinstance(sub, basestring):
-            tpl = re.sub(
-                    comma_reg + reg + comma_end_reg,
-                    comma_sub + sub + comma_end_sub,
-                    tpl)
-        else:
-            tpl = re.sub(
-                    # reg,
-                    comma_reg + reg + comma_end_reg,
-                    sub, tpl )
-
-
-    # keep template<> for struct & classes, remove others
-    def fix_bad_template(m):
-        sub = m.group('g1')
-        if re.search('(\\bstruct\\b|\\bclass\\b)', sub):
-            sub = m.expand('\g<0>')
-        return sub
-
-    tpl = re.sub('template *< *>(?P<g1>\s*.+)', fix_bad_template, tpl)
-
-    #Fixes bad empty '<>'. To protect goods '<>' inside blocks, use typedefs
-    def fix_bad_chevrons(m):
-        sub = m.group('part1')
-        if 'typedef' in sub:
-            sub += '<>'
-        sub += m.group('part2')
-        return sub
-
-    tpl = re.sub('(?P<part1>\s*(?!typedef).*(?<!template) *)< *>(?P<part2>[^{;]*;)', fix_bad_chevrons, tpl)
-
-    return tpl
-
-
-
-def get_unpacked_content( f, nb_args ):
-
-    txt = open(f,'r').read()
-
-
-    output = []
-
-    append = output.append
-
-    for p in parse_variadic_templates(txt):
-        if '...' in p:
-            append( '' + '\n' )
-            append( '#ifdef BOOST_NO_VARIADIC_TEMPLATES' + '\n' )
-            append( '//' + '='*79 + '\n' )
-            append( '//' + '='*79 + '\n' )
-            append( '//' + '='*36 + ' BEGIN ' + '='*36 + '\n' )
-            for i in reversed(range(nb_args+1)):
-                append( (unpack_variadic_template(p,i,nb_args)) + '\n' )
-            append( '//' + '='*37 + ' END ' + '='*37 + '\n' )
-            append( '//' + '='*79 + '\n' )
-            append( '//' + '='*79 + '\n' )
-            append( '' + '\n' )
-            append( '#else  // BOOST_NO_VARIADIC_TEMPLATES' + '\n' )
-            append(p + '\n' )
-            append( '#endif  // BOOST_NO_VARIADIC_TEMPLATES' + '\n' )
-        else:
-            append( p )
-
-    unpacked = ''.join(output)
-
-    return re.sub(' +$', '', unpacked, 0, re.M)
-
-
-
-
-
-
-
-def process_one_file(input_path, unpack_num, output_path = None):
-
-    result = get_unpacked_content(input_path, unpack_num)
-
-    if output_path:
-        open(output_path, 'wb').write(result)
-    else:
-        print result
-
-
-def process_dir(input_path, unpack_num, extension, force = False):
-    fname_end = '.' + extension
-    offset = 1+len(extension)
-    for dirpath, dirnames, filenames in os.walk(input_path):
-        for fname in filenames:
-            if fname.endswith(fname_end):
-                file_in = os.path.join(dirpath, fname)
-                file_out = os.path.join(dirpath, fname[:-offset])
-                t_in, t_out = 0,0
-                try:
-                    t_in = os.path.getmtime(file_in)
-                    t_out = os.path.getmtime(file_out)
-                except OSError:
-                    pass
-                if force or t_in >= t_out:
-                    print 'processing', file_in, '...'
-                    process_one_file(file_in, unpack_num, file_out)
-
-
-
-
-def main():
-
-    import argparse
-
-    desc = '''Aproximative processing of variadic templates.
-Generate a file emulating variadic templates with given number of argument.
-'''
-
-    parser = argparse.ArgumentParser( description=desc )
-
-    parser.add_argument('input_path', metavar='PATH', type=str,
-                    help='c++ file or dir to process')
-    parser.add_argument('-n', dest='num', type=int, default=9,
-            help='Max number of argument to emulate')
-
-    parser.add_argument('-o', dest='output_file', type=str, default=None,
-            help='output file')
-
-    parser.add_argument('-e', dest='extension', type=str, default='vrdc',
-            help='extension of files to parse')
-
-    parser.add_argument('-f', dest='force', action='store_true',
-            help='force file processing in directory')
-
-
-    if watchdog:
-        parser.add_argument('--watch','-w', action='store_true',
-                help='watch mode : run %(prog)s as daemon, watching changes '
-                'in specified file/dir')
-
-    options = parser.parse_args()
-
-    path_is_dir = os.path.isdir(options.input_path)
-
-    if path_is_dir:
-        if options.output_file is not None :
-            parser.error("-o is incompatible with directory processing")
-        process_dir(
-                options.input_path,
-                options.num,
-                options.extension,
-                options.force
-                )
-    else:
-        process_one_file(options.input_path, options.num, options.output_file)
-
-    if options.watch:
-        if path_is_dir:
-            print 'watching "{0}" ...'.format( options.input_path )
-        from watchdog.observers import Observer
-        from watchdog.events import PatternMatchingEventHandler
-        import Queue
-
-        events = Queue.Queue()
-
-        import signal
-
-
-        def keyboard_interrupt_handler(signal, frame):
-            print 'exiting ...'
-            keyboard_interrupt_handler.interupted = True
-
-        keyboard_interrupt_handler.interupted = False
-
-        signal.signal(signal.SIGINT, keyboard_interrupt_handler)
-
-        class ModifiedEventHandler(PatternMatchingEventHandler):
-
-            def __init__(self, extension):
-                super(ModifiedEventHandler, self).__init__(
-                        ['*.' + extension],
-                        ignore_directories=True
-                        )
-
-                self.extension = extension
-                self.offset = 1+len(extension)
-
-            def process(self, file_path):
-                output_path = file_path[:-self.offset]
-                events.put( (file_path, options.num, output_path) )
-
-            def on_created(self, event):
-                self.process(event.src_path)
-
-            def on_moved(self, event):
-                if event.dest_path.endswith(self.extension):
-                    self.process(event.dest_path)
-
-            def on_modified(self, event):
-                self.process(event.src_path)
-
-
-        event_handler = ModifiedEventHandler(options.extension)
-        observer = Observer()
-        observer.schedule(
-                event_handler,
-                path=options.input_path,
-                recursive=True
-                )
-        observer.start()
-
-        count = 0
-        while not keyboard_interrupt_handler.interupted:
-            try:
-                toProcess = events.get(True, 0.1)
-                count += 1
-                print '[{0}]'.format(count),'processing', \
-                        toProcess[0], '=>', toProcess[2]
-                process_one_file(*toProcess)
-                print '[{0}]'.format(count),'done'
-            except Queue.Empty:
-                pass
-
-        observer.stop()
-        observer.join()
-
-
-
-if __name__ == '__main__':
-    main()
-
-else:
-    import difflib
-    import sys
-    import unittest
-
-    class TestSequenceFunctions(unittest.TestCase):
-
-        def test_get_unpacked_content(self):
-            reference = open('test/unpacked.cpp').read()
-            result = get_unpacked_content('test/variadic.cpp', 9);
-
-
-            reference = reference.splitlines(True)
-            result = result.splitlines(True)
-
-            diff = ''.join(difflib.unified_diff(reference, result))
-
-            no_diff = '' == diff
-
-            if not no_diff:
-                sys.stderr.write(diff)
-
-            self.assertTrue(no_diff)
-
-
-
diff --git a/SrcLib/core/fwCom/src/fwCom/SignalBase.cpp b/SrcLib/core/fwCom/src/fwCom/SignalBase.cpp
index 07cde07..296fe6e 100644
--- a/SrcLib/core/fwCom/src/fwCom/SignalBase.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/SignalBase.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,10 +12,7 @@
 namespace fwCom
 {
 
-#ifdef COM_LOG
-size_t SignalBase::s_idCount = 0;
-::fwCore::mt::Mutex SignalBase::s_mutexCounter;
-#endif
+
 
 } // namespace fwCom
 
diff --git a/SrcLib/core/fwCom/src/fwCom/Signals.cpp b/SrcLib/core/fwCom/src/fwCom/Signals.cpp
index 9f3c1f6..2126181 100644
--- a/SrcLib/core/fwCom/src/fwCom/Signals.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/Signals.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #ifdef DEBUG
 #include "fwCore/spyLog.hpp"
 #endif
@@ -16,25 +14,32 @@
 namespace fwCom
 {
 
-Signals::Signals(){}
+Signals::Signals()
+{
+}
 
+//-----------------------------------------------------------------------------
 
 Signals::~Signals()
 {
 #ifdef DEBUG
-    BOOST_FOREACH( SignalMapType::value_type elem, m_signals )
+    for( SignalMapType::value_type elem :  m_signals )
     {
         OSLM_ASSERT( "Signal '"<< elem.first <<"' has connected slots", elem.second->getNumberOfConnections() == 0 );
     }
 #endif
 }
 
+//-----------------------------------------------------------------------------
+
 Signals& Signals::operator()( const SignalKeyType &key, const SignalBase::sptr &Signal )
 {
     m_signals.insert( SignalMapType::value_type(key, Signal) );
     return *this;
 }
 
+//-----------------------------------------------------------------------------
+
 SignalBase::sptr Signals::operator[]( const SignalKeyType &key ) const
 {
     SignalMapType::const_iterator it = m_signals.find(key);
@@ -47,32 +52,32 @@ SignalBase::sptr Signals::operator[]( const SignalKeyType &key ) const
     return SignalBase::sptr();
 }
 
+//-----------------------------------------------------------------------------
+
 Signals::SignalKeyContainerType Signals::getSignalKeys() const
 {
     Signals::SignalKeyContainerType SignalKeys;
-    BOOST_FOREACH( SignalMapType::value_type elem, m_signals )
+    for( SignalMapType::value_type elem :  m_signals )
     {
         SignalKeys.push_back(elem.first);
     }
     return SignalKeys;
 }
 
+//-----------------------------------------------------------------------------
+
 Signals::Signals( const Signals& )
-{}
+{
+}
+
+//-----------------------------------------------------------------------------
 
 Signals& Signals::operator=( const Signals& )
 {
     return *this;
 }
 
-#ifdef COM_LOG
-void Signals::setID( const std::string prefix )
-{
-    BOOST_FOREACH( SignalMapType::value_type elem, m_signals )
-    {
-        elem.second->setID( prefix + elem.first );
-    }
-}
-#endif
+//-----------------------------------------------------------------------------
+
 } // namespace fwCom
 
diff --git a/SrcLib/core/fwCom/src/fwCom/SlotBase.cpp b/SrcLib/core/fwCom/src/fwCom/SlotBase.cpp
index ceb6abe..e9339ac 100644
--- a/SrcLib/core/fwCom/src/fwCom/SlotBase.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/SlotBase.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,14 +13,9 @@
 namespace fwCom
 {
 
-#ifdef COM_LOG
-size_t SlotBase::s_idCount = 0;
-::fwCore::mt::Mutex SlotBase::s_mutexCounter;
-#endif
-
 void SlotBase::run() const
 {
-    typedef SlotRun< void() > SlotFuncType;
+    typedef SlotRun< void () > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
@@ -33,9 +28,11 @@ void SlotBase::run() const
     }
 }
 
+//-----------------------------------------------------------------------------
+
 SlotBase::VoidSharedFutureType SlotBase::asyncRun() const
 {
-    typedef SlotRun< void() > SlotFuncType;
+    typedef SlotRun< void () > SlotFuncType;
     const SlotFuncType *fun = dynamic_cast< const SlotFuncType* >(this);
     if(fun)
     {
diff --git a/SrcLib/core/fwCom/src/fwCom/Slots.cpp b/SrcLib/core/fwCom/src/fwCom/Slots.cpp
index d1c295b..b97b3ee 100644
--- a/SrcLib/core/fwCom/src/fwCom/Slots.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/Slots.cpp
@@ -1,47 +1,55 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwThread/Worker.hpp>
-
 #include "fwCom/Slot.hpp"
 #include "fwCom/Slot.hxx"
 
 #include "fwCom/Slots.hpp"
 
+#include <fwThread/Worker.hpp>
+
 namespace fwCom
 {
 
-Slots::Slots(){}
+Slots::Slots()
+{
+}
+
+//-----------------------------------------------------------------------------
 
 Slots::~Slots()
 {
 #ifdef DEBUG
-    BOOST_FOREACH( SlotMapType::value_type elem, m_slots )
+    for( SlotMapType::value_type elem :  m_slots )
     {
         SLM_ASSERT( "Slot '"<< elem.first <<"' has connected signals", elem.second->getNumberOfConnections() == 0 );
     }
 #endif
 }
 
+//-----------------------------------------------------------------------------
+
 void Slots::setWorker( const ::fwThread::Worker::sptr &worker )
 {
-    BOOST_FOREACH( SlotMapType::value_type elem, m_slots )
+    for( SlotMapType::value_type elem :  m_slots )
     {
         elem.second->setWorker(worker);
     }
 }
 
+//-----------------------------------------------------------------------------
+
 Slots& Slots::operator()( const SlotKeyType &key, const SlotBase::sptr &slot )
 {
     m_slots.insert( SlotMapType::value_type(key, slot) );
     return *this;
 }
 
+//-----------------------------------------------------------------------------
+
 SlotBase::sptr Slots::operator[]( const SlotKeyType &key ) const
 {
     SlotMapType::const_iterator it = m_slots.find(key);
@@ -54,33 +62,34 @@ SlotBase::sptr Slots::operator[]( const SlotKeyType &key ) const
     return SlotBase::sptr();
 }
 
+//-----------------------------------------------------------------------------
+
 Slots::SlotKeyContainerType Slots::getSlotKeys() const
 {
     Slots::SlotKeyContainerType slotKeys;
-    BOOST_FOREACH( SlotMapType::value_type elem, m_slots )
+    for( SlotMapType::value_type elem :  m_slots )
     {
         slotKeys.push_back(elem.first);
     }
     return slotKeys;
 }
 
+//-----------------------------------------------------------------------------
+
 Slots::Slots( const Slots& )
-{}
+{
+}
+
+//-----------------------------------------------------------------------------
 
 Slots& Slots::operator=( const Slots& )
 {
     return *this;
 }
 
-#ifdef COM_LOG
-void Slots::setID( const std::string prefix )
-{
-    BOOST_FOREACH( SlotMapType::value_type elem, m_slots )
-    {
-        elem.second->setID( prefix + elem.first );
-    }
-}
-#endif
+//-----------------------------------------------------------------------------
+
+
 
 } // namespace fwCom
 
diff --git a/SrcLib/core/fwCom/src/fwCom/exception/AlreadyConnected.cpp b/SrcLib/core/fwCom/src/fwCom/exception/AlreadyConnected.cpp
index 83b58b8..647ba4a 100644
--- a/SrcLib/core/fwCom/src/fwCom/exception/AlreadyConnected.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/exception/AlreadyConnected.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 AlreadyConnected::AlreadyConnected ( const std::string &err ) : ::fwCore::Exception(err)
-{} ;
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwCom/src/fwCom/exception/BadCall.cpp b/SrcLib/core/fwCom/src/fwCom/exception/BadCall.cpp
index a5c53f7..d1aaa40 100644
--- a/SrcLib/core/fwCom/src/fwCom/exception/BadCall.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/exception/BadCall.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 BadCall::BadCall ( const std::string &err ) : ::fwCore::Exception(err)
-{} ;
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwCom/src/fwCom/exception/BadRun.cpp b/SrcLib/core/fwCom/src/fwCom/exception/BadRun.cpp
index fca40b0..36f9166 100644
--- a/SrcLib/core/fwCom/src/fwCom/exception/BadRun.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/exception/BadRun.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 BadRun::BadRun ( const std::string &err ) : ::fwCore::Exception(err)
-{} ;
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwCom/src/fwCom/exception/BadSlot.cpp b/SrcLib/core/fwCom/src/fwCom/exception/BadSlot.cpp
index 3a8b715..fb97695 100644
--- a/SrcLib/core/fwCom/src/fwCom/exception/BadSlot.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/exception/BadSlot.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 BadSlot::BadSlot ( const std::string &err ) : ::fwCore::Exception(err)
-{} ;
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwCom/src/fwCom/exception/NoWorker.cpp b/SrcLib/core/fwCom/src/fwCom/exception/NoWorker.cpp
index ec76fa7..4d6d3c3 100644
--- a/SrcLib/core/fwCom/src/fwCom/exception/NoWorker.cpp
+++ b/SrcLib/core/fwCom/src/fwCom/exception/NoWorker.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 NoWorker::NoWorker ( const std::string &err ) : ::fwCore::Exception(err)
-{} ;
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwCom/src/fwCom/exception/WorkerChanged.cpp b/SrcLib/core/fwCom/src/fwCom/exception/WorkerChanged.cpp
new file mode 100644
index 0000000..2cd0c03
--- /dev/null
+++ b/SrcLib/core/fwCom/src/fwCom/exception/WorkerChanged.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwCore/Exception.hpp>
+
+#include "fwCom/config.hpp"
+#include "fwCom/exception/WorkerChanged.hpp"
+
+namespace fwCom
+{
+
+namespace exception
+{
+
+WorkerChanged::WorkerChanged ( const std::string &err ) : ::fwCore::Exception(err)
+{
+}
+
+} // namespace exception
+
+} // namespace fwCom
+
+
diff --git a/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp b/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp
new file mode 100644
index 0000000..1f583c4
--- /dev/null
+++ b/SrcLib/core/fwCom/src/fwCom/helper/SigSlotConnection.cpp
@@ -0,0 +1,125 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwCom/helper/SigSlotConnection.hpp"
+
+#include <fwCom/SignalBase.hpp>
+#include <fwCom/exception/AlreadyConnected.hpp>
+#include <fwCom/exception/BadSlot.hpp>
+
+#include <fwCore/spyLog.hpp>
+
+#include <fwTools/Object.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace fwCom
+{
+namespace helper
+{
+
+//-----------------------------------------------------------------------------
+
+SigSlotConnection::SigSlotConnection()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SigSlotConnection::~SigSlotConnection()
+{
+    this->disconnect();
+}
+
+//-----------------------------------------------------------------------------
+
+void SigSlotConnection::connect(const ::fwCom::HasSignals::csptr& hasSignals, ::fwCom::Signals::SignalKeyType signalKey,
+                                const ::fwCom::HasSlots::csptr& hasSlots, ::fwCom::Slots::SlotKeyType slotKey )
+{
+    try
+    {
+        ::fwCom::Connection connection = hasSignals->signal( signalKey )->connect( hasSlots->slot( slotKey ) );
+        m_connections.push_back(connection);
+    }
+    catch (::fwCom::exception::BadSlot& e)
+    {
+        OSLM_ERROR("Can't connect signal '" + signalKey + "' with slot '" + slotKey + "' : " << e.what() << ".");
+    }
+    catch (::fwCom::exception::AlreadyConnected& e)
+    {
+        const ::fwTools::Object::csptr source = ::fwTools::Object::dynamicConstCast(hasSignals);
+        auto sourceID                         = source ? source->getID() : "";
+
+        const ::fwTools::Object::csptr target = ::fwTools::Object::dynamicConstCast(hasSlots);
+        auto targetID                         = target ? target->getID() : "";
+
+        OSLM_ERROR("Can't connect signal '" + sourceID + "/" + signalKey + "' with slot '"
+                   + targetID + "/" + slotKey + "' : " << e.what() << ".");
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SigSlotConnection::connect(const ::fwCom::HasSignals::csptr& hasSignals,
+                                const ::fwCom::HasSlots::csptr& hasSlots,
+                                const KeyConnectionsType& keyConnections )
+{
+    SLM_ASSERT("Signal source is NULL", hasSignals);
+    SLM_ASSERT("Slot destination is NULL", hasSlots);
+
+    for( const KeyConnectionType& keys : keyConnections )
+    {
+        auto signal = hasSignals->signal( keys.first );
+        SLM_ASSERT("Signal '" + keys.first + "' not found.", signal);
+        auto slot = hasSlots->slot( keys.second );
+        SLM_ASSERT("Slot '" + keys.second + "' not found.", slot);
+
+        try
+        {
+            ::fwCom::Connection connection = signal->connect( slot );
+            m_connections.push_back(connection);
+        }
+        catch (::fwCom::exception::BadSlot& e)
+        {
+            OSLM_ERROR("Can't connect signal '" + keys.first + "' with slot '" + keys.second + "' : "
+                       << e.what() << ".");
+        }
+        catch (::fwCom::exception::AlreadyConnected& e)
+        {
+            const ::fwTools::Object::csptr source = ::fwTools::Object::dynamicConstCast(hasSignals);
+            auto sourceID                         = source ? source->getID() : "";
+
+            const ::fwTools::Object::csptr target = ::fwTools::Object::dynamicConstCast(hasSlots);
+            auto targetID                         = target ? target->getID() : "";
+
+            OSLM_ERROR("Can't connect signal '" + sourceID + "/" + keys.first + "' with slot '"
+                       + targetID + "/" + keys.second + "' : " << e.what() << ".");
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SigSlotConnection::addConnection( ::fwCom::Connection connection )
+{
+    m_connections.push_back(connection);
+}
+
+//-----------------------------------------------------------------------------
+
+void SigSlotConnection::disconnect()
+{
+    BOOST_REVERSE_FOREACH( ::fwCom::Connection& connection, m_connections )
+    {
+        connection.disconnect();
+    }
+    m_connections.clear();
+}
+
+//-----------------------------------------------------------------------------
+
+} // end namespace helper
+} // end namespace fwCom
diff --git a/SrcLib/core/fwCom/test/CMakeLists.txt b/SrcLib/core/fwCom/test/CMakeLists.txt
index cbbc9a5..bfd8112 100644
--- a/SrcLib/core/fwCom/test/CMakeLists.txt
+++ b/SrcLib/core/fwCom/test/CMakeLists.txt
@@ -1,10 +1,12 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS thread date_time REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+find_package(Boost COMPONENTS chrono REQUIRED)
+    
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+)
 
 
 
diff --git a/SrcLib/core/fwCom/test/cppunit.options b/SrcLib/core/fwCom/test/cppunit.options
deleted file mode 100644
index 34d66fc..0000000
--- a/SrcLib/core/fwCom/test/cppunit.options
+++ /dev/null
@@ -1,21 +0,0 @@
-CLASSTEST=[
-    'SlotTest',
-    'SignalTest',
-    'UtilTest',
-    'SlotsTest',
-    'SignalsTest',
-]
-
-USE = [
-    'boost',
-    'boostThread',
-    'boostDateTime',
-    'boostFilesystem',
-    ]
-LIB = [
-    'fwTest_0-1',
-    'fwCom_0-1',
-    'fwThread_0-1',
-    ]
-
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwCom/test/tu/include/SignalTest.hpp b/SrcLib/core/fwCom/test/tu/include/SignalTest.hpp
index ec00e6a..c6aa6ea 100644
--- a/SrcLib/core/fwCom/test/tu/include/SignalTest.hpp
+++ b/SrcLib/core/fwCom/test/tu/include/SignalTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,18 +16,18 @@ namespace ut
 
 class SignalTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SignalTest );
-
-    CPPUNIT_TEST( buildTest );
-    CPPUNIT_TEST( connectTest );
-    CPPUNIT_TEST( emitTest );
-    CPPUNIT_TEST( autoSlotDisconnectTest );
-    CPPUNIT_TEST( blockTest );
-    CPPUNIT_TEST( argumentLossTest );
-    CPPUNIT_TEST( asyncEmitTest );
-    CPPUNIT_TEST( asyncArgumentLossTest );
-
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SignalTest );
+
+CPPUNIT_TEST( buildTest );
+CPPUNIT_TEST( connectTest );
+CPPUNIT_TEST( emitTest );
+CPPUNIT_TEST( autoSlotDisconnectTest );
+CPPUNIT_TEST( blockTest );
+CPPUNIT_TEST( argumentLossTest );
+CPPUNIT_TEST( asyncEmitTest );
+CPPUNIT_TEST( asyncArgumentLossTest );
+
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwCom/test/tu/include/SignalsTest.hpp b/SrcLib/core/fwCom/test/tu/include/SignalsTest.hpp
index 55447e0..22e6dda 100644
--- a/SrcLib/core/fwCom/test/tu/include/SignalsTest.hpp
+++ b/SrcLib/core/fwCom/test/tu/include/SignalsTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,11 +16,11 @@ namespace ut
 
 class SignalsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( SignalsTest );
 
     CPPUNIT_TEST( buildTest );
     CPPUNIT_TEST( hasSignalsTest );
-    CPPUNIT_TEST( signalsIDTest );
 
     CPPUNIT_TEST_SUITE_END();
 
@@ -31,7 +31,6 @@ public:
 
     void buildTest();
     void hasSignalsTest();
-    void signalsIDTest();
 };
 
 } //namespace ut
diff --git a/SrcLib/core/fwCom/test/tu/include/SlotTest.hpp b/SrcLib/core/fwCom/test/tu/include/SlotTest.hpp
index ce198ff..4b3a487 100644
--- a/SrcLib/core/fwCom/test/tu/include/SlotTest.hpp
+++ b/SrcLib/core/fwCom/test/tu/include/SlotTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,17 +16,17 @@ namespace ut
 
 class SlotTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SlotTest );
+CPPUNIT_TEST_SUITE( SlotTest );
 
-    CPPUNIT_TEST( buildTest );
-    CPPUNIT_TEST( runTest );
-    CPPUNIT_TEST( callTest );
-    CPPUNIT_TEST( asyncTest );
-    CPPUNIT_TEST( slotBaseTest );
-    CPPUNIT_TEST( exceptionTest );
-    CPPUNIT_TEST( workerSwapTest );
+CPPUNIT_TEST( buildTest );
+CPPUNIT_TEST( runTest );
+CPPUNIT_TEST( callTest );
+CPPUNIT_TEST( asyncTest );
+CPPUNIT_TEST( slotBaseTest );
+CPPUNIT_TEST( exceptionTest );
+CPPUNIT_TEST( workerSwapTest );
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwCom/test/tu/include/SlotsTest.hpp b/SrcLib/core/fwCom/test/tu/include/SlotsTest.hpp
index fc91b68..d798b52 100644
--- a/SrcLib/core/fwCom/test/tu/include/SlotsTest.hpp
+++ b/SrcLib/core/fwCom/test/tu/include/SlotsTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,13 +16,13 @@ namespace ut
 
 class SlotsTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SlotsTest );
+CPPUNIT_TEST_SUITE( SlotsTest );
 
-    CPPUNIT_TEST( buildTest );
-    CPPUNIT_TEST( hasSlotsTest );
-    CPPUNIT_TEST( slotsIDTest );
+CPPUNIT_TEST( buildTest );
+CPPUNIT_TEST( hasSlotsTest );
+CPPUNIT_TEST( slotsIDTest );
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
diff --git a/SrcLib/core/fwCom/test/tu/include/UtilTest.hpp b/SrcLib/core/fwCom/test/tu/include/UtilTest.hpp
index bab069b..1b79dcc 100644
--- a/SrcLib/core/fwCom/test/tu/include/UtilTest.hpp
+++ b/SrcLib/core/fwCom/test/tu/include/UtilTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,13 +16,13 @@ namespace ut
 
 class UtilTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( UtilTest );
+CPPUNIT_TEST_SUITE( UtilTest );
 
-    CPPUNIT_TEST( autoBindTest );
-    CPPUNIT_TEST( convertFunctionTypeTest );
-    CPPUNIT_TEST( removeLastArgTest );
+CPPUNIT_TEST( autoBindTest );
+CPPUNIT_TEST( convertFunctionTypeTest );
+CPPUNIT_TEST( removeLastArgTest );
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwCom/test/tu/src/SignalTest.cpp b/SrcLib/core/fwCom/test/tu/src/SignalTest.cpp
index 86a503b..e647ca3 100644
--- a/SrcLib/core/fwCom/test/tu/src/SignalTest.cpp
+++ b/SrcLib/core/fwCom/test/tu/src/SignalTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -48,25 +48,25 @@ void SignalTest::tearDown()
 void SignalTest::buildTest ()
 {
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
         CPPUNIT_ASSERT( sig );
     }
 
     {
-        typedef void Signature(int);
+        typedef void Signature (int);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
         CPPUNIT_ASSERT( sig );
     }
 
     {
-        typedef void Signature(char, float);
+        typedef void Signature (char, float);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
         CPPUNIT_ASSERT( sig );
     }
 
     {
-        typedef void Signature(short, double, std::string);
+        typedef void Signature (short, double, std::string);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
         CPPUNIT_ASSERT( sig );
     }
@@ -82,23 +82,33 @@ struct SignalTestClass
         m_method1(false),
         m_method2(false),
         m_method3(false)
-    {}
+    {
+    }
 
-    void method0(){ m_method0 = true; }
+    void method0()
+    {
+        m_method0 = true;
+    }
 
-    void method00(){ m_method00 = true; }
+    void method00()
+    {
+        m_method00 = true;
+    }
 
-    float method1(float f){
+    float method1(float f)
+    {
         m_method1 = true;
         return 2*f;
     }
 
-    float method2(float f, int i){
+    float method2(float f, int i)
+    {
         m_method2 = true;
         return 2*f;
     }
 
-    float method3(float f, double d, std::string s){
+    float method3(float f, double d, std::string s)
+    {
         m_method3 = true;
         return 2*f;
     }
@@ -129,7 +139,7 @@ void SignalTest::connectTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         connection = sig->connect(slot0);
@@ -140,7 +150,7 @@ void SignalTest::connectTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float);
+        typedef void Signature (float);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         connection = sig->connect(slot1);
@@ -151,7 +161,7 @@ void SignalTest::connectTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float, int);
+        typedef void Signature (float, int);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         connection = sig->connect(slot2);
@@ -162,7 +172,7 @@ void SignalTest::connectTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float, double, std::string);
+        typedef void Signature (float, double, std::string);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         connection = sig->connect(slot3);
@@ -174,7 +184,7 @@ void SignalTest::connectTest()
 
     // Disconnect
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         connection = sig->connect(slot0);
@@ -186,7 +196,7 @@ void SignalTest::connectTest()
     }
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         sig->connect(slot0);
@@ -202,7 +212,7 @@ void SignalTest::connectTest()
     }
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         connection = sig->connect(slot0);
@@ -214,13 +224,13 @@ void SignalTest::connectTest()
     }
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         ::fwCom::Slot< void() >::sptr slot
             = ::fwCom::newSlot(&SignalTestClass::method0, &testObject);
 
-        connection = sig->connect(slot0);
+        connection                      = sig->connect(slot0);
         ::fwCom::Connection connection2 = sig->connect(slot);
 
         CPPUNIT_ASSERT(!connection.expired());
@@ -233,7 +243,7 @@ void SignalTest::connectTest()
     }
 
     {
-        typedef void Signature(std::string);
+        typedef void Signature (std::string);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         CPPUNIT_ASSERT_THROW( sig->connect(slot1), fwCom::exception::BadSlot);
@@ -242,7 +252,7 @@ void SignalTest::connectTest()
     }
 
     {
-        typedef void Signature(std::string);
+        typedef void Signature (std::string);
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
 
@@ -261,7 +271,7 @@ void SignalTest::connectTest()
     }
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
 
         sig->connect(slot0);
@@ -280,7 +290,7 @@ void SignalTest::emitTest()
     ::fwCom::Connection connection;
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         SignalTestClass testObject;
 
         ::fwCom::Slot< Signature >::sptr slot
@@ -299,7 +309,7 @@ void SignalTest::emitTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float);
+        typedef void Signature (float);
         SignalTestClass testObject;
 
         ::fwCom::Slot< float(float) >::sptr slot
@@ -319,7 +329,7 @@ void SignalTest::emitTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float, int);
+        typedef void Signature (float, int);
         SignalTestClass testObject;
 
         ::fwCom::Slot< float(float, int) >::sptr slot
@@ -339,7 +349,7 @@ void SignalTest::emitTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float, double, std::string);
+        typedef void Signature (float, double, std::string);
         SignalTestClass testObject;
 
         ::fwCom::Slot< float(float, double, std::string) >::sptr slot
@@ -363,7 +373,7 @@ void SignalTest::emitTest()
 
 void SignalTest::autoSlotDisconnectTest()
 {
-    typedef void Signature(float);
+    typedef void Signature (float);
     SignalTestClass testObject;
 
     ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
@@ -405,7 +415,7 @@ void SignalTest::autoSlotDisconnectTest()
 
 void SignalTest::argumentLossTest()
 {
-    typedef void Signature(float, double, std::string);
+    typedef void Signature (float, double, std::string);
     SignalTestClass testObject;
 
     ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
@@ -442,7 +452,7 @@ void SignalTest::argumentLossTest()
 
 void SignalTest::asyncArgumentLossTest()
 {
-    typedef void Signature(float, double, std::string);
+    typedef void Signature (float, double, std::string);
     SignalTestClass testObject;
 
     ::fwCom::Signal< Signature >::sptr sig = ::fwCom::Signal< Signature >::New();
@@ -485,7 +495,7 @@ void SignalTest::asyncArgumentLossTest()
 
 void SignalTest::blockTest()
 {
-    typedef void Signature(float, double, std::string);
+    typedef void Signature (float, double, std::string);
     SignalTestClass testObject;
 
     ::fwCom::Connection connection;
@@ -562,7 +572,7 @@ void SignalTest::asyncEmitTest()
     ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
 
     {
-        typedef void Signature();
+        typedef void Signature ();
         SignalTestClass testObject;
 
         ::fwCom::Slot< Signature >::sptr slot
@@ -584,7 +594,7 @@ void SignalTest::asyncEmitTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float);
+        typedef void Signature (float);
         SignalTestClass testObject;
 
         ::fwCom::Slot< float(float) >::sptr slot
@@ -607,7 +617,7 @@ void SignalTest::asyncEmitTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float, int);
+        typedef void Signature (float, int);
         SignalTestClass testObject;
 
         ::fwCom::Slot< float(float, int) >::sptr slot
@@ -630,7 +640,7 @@ void SignalTest::asyncEmitTest()
     CPPUNIT_ASSERT(connection.expired());
 
     {
-        typedef void Signature(float, double, std::string);
+        typedef void Signature (float, double, std::string);
         SignalTestClass testObject;
 
         ::fwCom::Slot< float(float, double, std::string) >::sptr slot
diff --git a/SrcLib/core/fwCom/test/tu/src/SignalsTest.cpp b/SrcLib/core/fwCom/test/tu/src/SignalsTest.cpp
index e111658..99a4a29 100644
--- a/SrcLib/core/fwCom/test/tu/src/SignalsTest.cpp
+++ b/SrcLib/core/fwCom/test/tu/src/SignalsTest.cpp
@@ -1,18 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "SignalsTest.hpp"
 
 #include <fwCom/HasSignals.hpp>
-#include <fwCom/Signals.hpp>
 #include <fwCom/Signal.hpp>
 #include <fwCom/Signal.hxx>
-
-#include "SignalsTest.hpp"
-
+#include <fwCom/Signals.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwCom::ut::SignalsTest );
@@ -41,12 +38,12 @@ void SignalsTest::buildTest()
     ::fwCom::Signal< void() >::sptr sig = ::fwCom::Signal< void() >::New();
     CPPUNIT_ASSERT( sig );
 
-    typedef void Signature(int, float);
+    typedef void Signature (int, float);
     ::fwCom::Signal< Signature >::sptr sig2 = ::fwCom::Signal< Signature >::New();
     CPPUNIT_ASSERT( sig2 );
 
     signals("sig", sig)
-           ("sig2", sig2);
+        ("sig2", sig2);
 
     CPPUNIT_ASSERT(sig == signals["sig"]);
     CPPUNIT_ASSERT(sig2 == signals["sig2"]);
@@ -59,15 +56,23 @@ void SignalsTest::buildTest()
 
 struct SignalsTestHasSignals : public HasSignals
 {
-    typedef ::fwCom::Signal< void()> SignalType;
+    typedef ::fwCom::Signal< void ()> SignalType;
 
     SignalsTestHasSignals()
     {
         SignalType::sptr signal = SignalType::New();
         HasSignals::m_signals("sig", signal);
-#ifdef COM_LOG
-        signal->setID("sig");
-#endif
+    }
+};
+
+struct SignalsTestHasSignals2 : public HasSignals
+{
+    typedef ::fwCom::Signal< void ()> SignalType;
+
+    SignalsTestHasSignals2()
+    {
+        SignalType::sptr sig = this->newSignal< SignalType >("sig");
+        CPPUNIT_ASSERT(sig);
     }
 };
 
@@ -81,7 +86,7 @@ struct SignalsTestA
 
     void changeStatus()
     {
-        m_val = ! m_val;
+        m_val = !m_val;
     }
 
     bool m_val;
@@ -90,42 +95,26 @@ struct SignalsTestA
 
 void SignalsTest::hasSignalsTest()
 {
-    SignalsTestHasSignals obj;
-    SignalsTestA srv;
-    Slot< void()>::sptr slot = ::fwCom::newSlot( &SignalsTestA::changeStatus, &srv );
-#ifdef COM_LOG
-    slot->setID("changeStatus");
-#endif
-    obj.signal("sig")->connect( slot );
-    obj.signal< SignalsTestHasSignals::SignalType >("sig")->emit();
-
-    CPPUNIT_ASSERT( srv.m_val );
-    obj.signal("sig")->disconnect( slot );
-}
-
-//-----------------------------------------------------------------------------
-
-void SignalsTest::signalsIDTest()
-{
-#ifdef COM_LOG
-    ::fwCom::Signals signals;
-
-    ::fwCom::Signal< void() >::sptr sig1 = ::fwCom::Signal< void() >::New();
-
-    typedef void Signature(int, float);
-    ::fwCom::Signal< Signature >::sptr sig2 = ::fwCom::Signal< Signature >::New();
-
-    signals("sig1", sig1)
-           ("sig2", sig2);
+    {
+        SignalsTestHasSignals obj;
+        SignalsTestA srv;
+        Slot< void()>::sptr slot = ::fwCom::newSlot( &SignalsTestA::changeStatus, &srv );
+        obj.signal("sig")->connect( slot );
+        obj.signal< SignalsTestHasSignals::SignalType >("sig")->emit();
+        CPPUNIT_ASSERT( srv.m_val );
+        obj.signal("sig")->disconnect( slot );
+    }
+    {
+        SignalsTestHasSignals2 obj;
+        SignalsTestA srv;
+        Slot< void()>::sptr slot = ::fwCom::newSlot( &SignalsTestA::changeStatus, &srv );
 
-    signals.setID();
-    CPPUNIT_ASSERT_EQUAL( std::string("sig1"), sig1->getID() );
-    CPPUNIT_ASSERT_EQUAL( std::string("sig2"), sig2->getID() );
+        obj.signal("sig")->connect( slot );
+        obj.signal< SignalsTestHasSignals2::SignalType >("sig")->emit();
 
-    signals.setID("prefix::");
-    CPPUNIT_ASSERT_EQUAL( std::string("prefix::sig1"), sig1->getID() );
-    CPPUNIT_ASSERT_EQUAL( std::string("prefix::sig2"), sig2->getID() );
-#endif
+        CPPUNIT_ASSERT( srv.m_val );
+        obj.signal("sig")->disconnect( slot );
+    }
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwCom/test/tu/src/SlotTest.cpp b/SrcLib/core/fwCom/test/tu/src/SlotTest.cpp
index c820ce4..16c1bf4 100644
--- a/SrcLib/core/fwCom/test/tu/src/SlotTest.cpp
+++ b/SrcLib/core/fwCom/test/tu/src/SlotTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -54,10 +54,15 @@ struct A
     A() :
         m_method0(false),
         m_method1(false)
-    {}
+    {
+    }
 
-    void method0(){ m_method0 = true; }
-    float method1(float f){
+    void method0()
+    {
+        m_method0 = true;
+    }
+    float method1(float f)
+    {
         m_method1 = true;
         return 2*f;
     }
@@ -81,26 +86,26 @@ void SlotTest::buildTest ()
     A a;
 
     ::fwCom::Slot< int (int, int) >::sptr slot1 = ::fwCom::newSlot( &sum );
-    ::fwCom::Slot< void () >::sptr        slot2 = ::fwCom::newSlot( &A::method0, &a );
-    ::fwCom::Slot< float (float) >::sptr  slot3 = ::fwCom::newSlot( &A::method1, &a  );
+    ::fwCom::Slot< void () >::sptr slot2        = ::fwCom::newSlot( &A::method0, &a );
+    ::fwCom::Slot< float (float) >::sptr slot3  = ::fwCom::newSlot( &A::method1, &a  );
 
     CPPUNIT_ASSERT( slot1 );
     CPPUNIT_ASSERT( slot2 );
     CPPUNIT_ASSERT( slot3 );
 
 
-    CPPUNIT_ASSERT_EQUAL( (unsigned int) 2 , slot1->arity() );
-    CPPUNIT_ASSERT_EQUAL( (unsigned int) 0 , slot2->arity() );
-    CPPUNIT_ASSERT_EQUAL( (unsigned int) 1 , slot3->arity() );
+    CPPUNIT_ASSERT_EQUAL( (unsigned int) 2, slot1->arity() );
+    CPPUNIT_ASSERT_EQUAL( (unsigned int) 0, slot2->arity() );
+    CPPUNIT_ASSERT_EQUAL( (unsigned int) 1, slot3->arity() );
 
 
 
     ::fwCom::SlotCall< int (int, int) >::sptr slotcall1
-        = ::boost::dynamic_pointer_cast< ::fwCom::SlotCall< int (int, int) > > ( slot1 );
-    ::fwCom::SlotCall< void () >::sptr          slotcall2
-        = ::boost::dynamic_pointer_cast< ::fwCom::SlotCall< void () >        > ( slot2 );
-    ::fwCom::SlotCall< float (float) >::sptr  slotcall3
-        = ::boost::dynamic_pointer_cast< ::fwCom::SlotCall< float (float) >  > ( slot3 );
+        = std::dynamic_pointer_cast< ::fwCom::SlotCall< int (int, int) > > ( slot1 );
+    ::fwCom::SlotCall< void () >::sptr slotcall2
+        = std::dynamic_pointer_cast< ::fwCom::SlotCall< void () >        > ( slot2 );
+    ::fwCom::SlotCall< float (float) >::sptr slotcall3
+        = std::dynamic_pointer_cast< ::fwCom::SlotCall< float (float) >  > ( slot3 );
 
     CPPUNIT_ASSERT( slotcall1 );
     CPPUNIT_ASSERT( slotcall2 );
@@ -109,11 +114,11 @@ void SlotTest::buildTest ()
 
 
     ::fwCom::SlotRun< void (int, int) >::sptr slotrun1
-        = ::boost::dynamic_pointer_cast< ::fwCom::SlotRun< void (int, int) > > ( slot1 );
-    ::fwCom::SlotRun< void () >::sptr          slotrun2
-        = ::boost::dynamic_pointer_cast< ::fwCom::SlotRun< void () >         > ( slot2 );
-    ::fwCom::SlotRun< void (float) >::sptr  slotrun3
-        = ::boost::dynamic_pointer_cast< ::fwCom::SlotRun< void (float) >    > ( slot3 );
+        = std::dynamic_pointer_cast< ::fwCom::SlotRun< void (int, int) > > ( slot1 );
+    ::fwCom::SlotRun< void () >::sptr slotrun2
+        = std::dynamic_pointer_cast< ::fwCom::SlotRun< void () >         > ( slot2 );
+    ::fwCom::SlotRun< void (float) >::sptr slotrun3
+        = std::dynamic_pointer_cast< ::fwCom::SlotRun< void (float) >    > ( slot3 );
 
     CPPUNIT_ASSERT( slotrun1 );
     CPPUNIT_ASSERT( slotrun2 );
@@ -121,9 +126,9 @@ void SlotTest::buildTest ()
 
 
 
-    ::fwCom::SlotBase::sptr slotbase1 = ::boost::dynamic_pointer_cast< ::fwCom::SlotBase > ( slot1 );
-    ::fwCom::SlotBase::sptr slotbase2 = ::boost::dynamic_pointer_cast< ::fwCom::SlotBase > ( slot2 );
-    ::fwCom::SlotBase::sptr slotbase3 = ::boost::dynamic_pointer_cast< ::fwCom::SlotBase > ( slot3 );
+    ::fwCom::SlotBase::sptr slotbase1 = std::dynamic_pointer_cast< ::fwCom::SlotBase > ( slot1 );
+    ::fwCom::SlotBase::sptr slotbase2 = std::dynamic_pointer_cast< ::fwCom::SlotBase > ( slot2 );
+    ::fwCom::SlotBase::sptr slotbase3 = std::dynamic_pointer_cast< ::fwCom::SlotBase > ( slot3 );
 
     CPPUNIT_ASSERT( slotbase1 );
     CPPUNIT_ASSERT( slotbase2 );
@@ -140,8 +145,8 @@ void SlotTest::runTest ()
     A a;
 
     ::fwCom::Slot< int (int, int) >::sptr slot1 = ::fwCom::newSlot( &sum );
-    ::fwCom::Slot< void () >::sptr        slot2 = ::fwCom::newSlot( &A::method0, &a );
-    ::fwCom::Slot< float (float) >::sptr  slot3 = ::fwCom::newSlot( &A::method1, &a );
+    ::fwCom::Slot< void () >::sptr slot2        = ::fwCom::newSlot( &A::method0, &a );
+    ::fwCom::Slot< float (float) >::sptr slot3  = ::fwCom::newSlot( &A::method1, &a );
 
     lastSumResult = 0;
     CPPUNIT_ASSERT( !a.m_method0 );
@@ -162,8 +167,8 @@ void SlotTest::callTest ()
     A a;
 
     ::fwCom::Slot< int (int, int) >::sptr slot1 = ::fwCom::newSlot( &sum );
-    ::fwCom::Slot< void () >::sptr        slot2 = ::fwCom::newSlot( &A::method0, &a );
-    ::fwCom::Slot< float (float) >::sptr  slot3 = ::fwCom::newSlot( &A::method1, &a );
+    ::fwCom::Slot< void () >::sptr slot2        = ::fwCom::newSlot( &A::method0, &a );
+    ::fwCom::Slot< float (float) >::sptr slot3  = ::fwCom::newSlot( &A::method1, &a );
 
     CPPUNIT_ASSERT_EQUAL( 42, slot1->call(40,2) );
     slot2->call();
@@ -179,8 +184,8 @@ void SlotTest::asyncTest ()
     A a;
 
     ::fwCom::Slot< int (int, int) >::sptr slot1 = ::fwCom::newSlot( &sum );
-    ::fwCom::Slot< void () >::sptr        slot2 = ::fwCom::newSlot( &A::method0, &a );
-    ::fwCom::Slot< float (float) >::sptr  slot3 = ::fwCom::newSlot( &A::method1, &a );
+    ::fwCom::Slot< void () >::sptr slot2        = ::fwCom::newSlot( &A::method0, &a );
+    ::fwCom::Slot< float (float) >::sptr slot3  = ::fwCom::newSlot( &A::method1, &a );
 
     fwThread::Worker::sptr w = fwThread::Worker::New();
 
@@ -198,8 +203,8 @@ void SlotTest::asyncTest ()
     CPPUNIT_ASSERT( a.m_method1 );
 
     lastSumResult = 0;
-    a.m_method0 = false;
-    a.m_method1 = false;
+    a.m_method0   = false;
+    a.m_method1   = false;
 
     boost::shared_future< int >   f1 = slot1->asyncCall(40,2);
     boost::shared_future< void >  f2 = slot2->asyncCall();
@@ -250,8 +255,8 @@ void SlotTest::slotBaseTest ()
     CPPUNIT_ASSERT( a.m_method1 );
 
     lastSumResult = 0;
-    a.m_method0 = false;
-    a.m_method1 = false;
+    a.m_method0   = false;
+    a.m_method1   = false;
 
     CPPUNIT_ASSERT_EQUAL( 42, slot1->call<int>(40,2) );
     slot2->call<void>();
@@ -261,8 +266,8 @@ void SlotTest::slotBaseTest ()
 
 
     lastSumResult = 0;
-    a.m_method0 = false;
-    a.m_method1 = false;
+    a.m_method0   = false;
+    a.m_method1   = false;
 
     fwThread::Worker::sptr w = fwThread::Worker::New();
 
@@ -279,8 +284,8 @@ void SlotTest::slotBaseTest ()
     CPPUNIT_ASSERT( a.m_method1 );
 
     lastSumResult = 0;
-    a.m_method0 = false;
-    a.m_method1 = false;
+    a.m_method0   = false;
+    a.m_method1   = false;
 
     boost::shared_future< int >   f1 = slot1->asyncCall<int>(40,2);
     boost::shared_future< void >  f2 = slot2->asyncCall<void>();
@@ -328,7 +333,7 @@ void SlotTest::exceptionTest ()
 
 struct B
 {
-    B() : m_threadId()
+    B() : m_threadId(), m_firstRun(true)
     {
     }
 
@@ -337,12 +342,15 @@ struct B
         ::fwCore::mt::WriteLock lock(m_mutex);
         ::boost::thread::id oldId = m_threadId;
         m_threadId = ::boost::this_thread::get_id();
+        m_firstRun = false;
 
         ::boost::this_thread::sleep_for( ::boost::chrono::seconds(nbSeconds));
 
         return oldId;
     }
 
+    bool m_firstRun;
+
     ::boost::thread::id m_threadId;
 
     ::fwCore::mt::ReadWriteMutex m_mutex;
@@ -351,8 +359,13 @@ struct B
 
 void SlotTest::workerSwapTest()
 {
+
+    // Tests if weak call gets interrupted when slot worker is changed while
+    // calls are pending.
+    bool exceptionThrown = false;
+    while(!exceptionThrown)
     {
-        typedef ::boost::thread::id Signature(const unsigned int);
+        typedef ::boost::thread::id Signature (const unsigned int);
 
         B b;
 
@@ -365,6 +378,42 @@ void SlotTest::workerSwapTest()
 
         m0->setWorker(w1);
         ::fwCom::Slot< Signature >::VoidSharedFutureType future1 = m0->asyncRun(1);
+        m0->setWorker(w2);
+
+        {
+            ::fwCore::mt::ReadLock lock(b.m_mutex);
+            if(b.m_threadId == ::boost::thread::id())
+            {
+                exceptionThrown = true;
+                CPPUNIT_ASSERT_THROW( future1.get(), fwCom::exception::WorkerChanged );
+            }
+            else
+            {
+                CPPUNIT_ASSERT(b.m_threadId == w1->getThreadId());
+            }
+        }
+    }
+
+    //Tests weakcalls to hold slot worker while running weakcall (asyncRun test)
+    {
+        typedef ::boost::thread::id Signature (const unsigned int);
+
+        B b;
+
+        ::fwThread::Worker::sptr w1 = ::fwThread::Worker::New();
+        ::fwThread::Worker::sptr w2 = ::fwThread::Worker::New();
+
+        ::fwCom::Slot< Signature >::sptr m0 = ::fwCom::newSlot( &B::waitSeconds, &b );
+
+        CPPUNIT_ASSERT(b.m_threadId == ::boost::thread::id());
+
+        m0->setWorker(w1);
+        ::fwCom::Slot< Signature >::VoidSharedFutureType future1 = m0->asyncRun(1);
+
+        // wait until we entered in slot's function
+        while(b.m_firstRun)
+        {
+        }
 
         m0->setWorker(w2);
         future1.wait();
@@ -377,9 +426,9 @@ void SlotTest::workerSwapTest()
         CPPUNIT_ASSERT(b.m_threadId == w2->getThreadId());
     }
 
-
+    //Tests weakcalls to hold slot worker while running weakcall (asyncCall test)
     {
-        typedef ::boost::thread::id Signature(const unsigned int);
+        typedef ::boost::thread::id Signature (const unsigned int);
 
         B b;
 
@@ -393,6 +442,11 @@ void SlotTest::workerSwapTest()
         m0->setWorker(w1);
         ::fwCom::Slot< Signature >::SharedFutureType future1 = m0->asyncCall(1);
 
+        // wait until we entered in slot's function
+        while(b.m_firstRun)
+        {
+        }
+
         m0->setWorker(w2);
         future1.wait();
         CPPUNIT_ASSERT(b.m_threadId == w1->getThreadId());
diff --git a/SrcLib/core/fwCom/test/tu/src/SlotsTest.cpp b/SrcLib/core/fwCom/test/tu/src/SlotsTest.cpp
index 982f7d6..917336e 100644
--- a/SrcLib/core/fwCom/test/tu/src/SlotsTest.cpp
+++ b/SrcLib/core/fwCom/test/tu/src/SlotsTest.cpp
@@ -1,21 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwTest/Exception.hpp>
+#include "SlotsTest.hpp"
 
-#include <fwThread/Worker.hpp>
+#include <fwCom/HasSlots.hpp>
 
 #include <fwCom/Slots.hpp>
 #include <fwCom/Slots.hxx>
-#include <fwCom/HasSlots.hpp>
-
-#include "SlotsTest.hpp"
+#include <fwTest/Exception.hpp>
 
+#include <fwThread/Worker.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwCom::ut::SlotsTest );
@@ -50,7 +47,8 @@ void slotsTestPrint(const std::string &str)
 struct SlotsTestBasic
 {
     SlotsTestBasic()
-    {}
+    {
+    }
 
     int sum(int a, int b)
     {
@@ -64,12 +62,12 @@ void SlotsTest::buildTest()
 {
     ::fwCom::Slots slots;
 
-    ::fwCom::Slot< int (int, int) >::sptr slot1 = ::fwCom::newSlot( &slotsTestSum );
+    ::fwCom::Slot< int (int, int) >::sptr slot1             = ::fwCom::newSlot( &slotsTestSum );
     ::fwCom::Slot< void (const std::string &) >::sptr slot2 = ::fwCom::newSlot( &slotsTestPrint );
 
-    slots("sum", ::boost::dynamic_pointer_cast< SlotBase >(slot1))
-         ("print", ::boost::dynamic_pointer_cast< SlotBase >(slot2))
-         ("another_key", slot1);
+    slots("sum", std::dynamic_pointer_cast< SlotBase >(slot1))
+        ("print", std::dynamic_pointer_cast< SlotBase >(slot2))
+        ("another_key", slot1);
 
     CPPUNIT_ASSERT(slot1 == slots["sum"]);
     CPPUNIT_ASSERT(slot2 == slots["print"]);
@@ -87,7 +85,7 @@ void SlotsTest::buildTest()
     slots.setWorker(worker);
 
     int count = 0;
-    BOOST_FOREACH(::fwCom::Slots::SlotKeyType key, slots.getSlotKeys())
+    for(::fwCom::Slots::SlotKeyType key :  slots.getSlotKeys())
     {
         ::fwCom::SlotBase::sptr slot = slots[key];
         CPPUNIT_ASSERT(worker == slot->getWorker());
@@ -100,13 +98,39 @@ void SlotsTest::buildTest()
 
 struct SlotsTestHasSlots : public HasSlots
 {
-    typedef Slot< int()> GetValueSlotType;
+    typedef Slot< int ()> GetValueSlotType;
 
     SlotsTestHasSlots()
     {
         GetValueSlotType::sptr slotGetValue = ::fwCom::newSlot( &SlotsTestHasSlots::getValue, this );
+
         HasSlots::m_slots("sum", &SlotsTestHasSlots::sum, this)
-                         ("getValue", slotGetValue );
+            ("getValue", slotGetValue );
+    }
+
+    int sum(int a, int b)
+    {
+        return a+b;
+    }
+
+    int getValue()
+    {
+        return 4;
+    }
+};
+
+//-----------------------------------------------------------------------------
+
+struct SlotsTestHasSlots2 : public HasSlots
+{
+    typedef Slot< int ()> GetValueSlotType;
+
+    SlotsTestHasSlots2()
+    {
+        newSlot( "sum", &SlotsTestHasSlots2::sum, this );
+
+        GetValueSlotType::sptr slot = newSlot( "getValue", &SlotsTestHasSlots2::getValue, this );
+        CPPUNIT_ASSERT(slot);
     }
 
     int sum(int a, int b)
@@ -127,28 +151,17 @@ void SlotsTest::hasSlotsTest()
     SlotsTestHasSlots obj;
     CPPUNIT_ASSERT_EQUAL(14, obj.slot("sum")->call<int>(5,9));
     CPPUNIT_ASSERT_EQUAL(4, obj.slot< SlotsTestHasSlots::GetValueSlotType >("getValue")->call());
+
+    SlotsTestHasSlots2 obj2;
+    CPPUNIT_ASSERT_EQUAL(14, obj2.slot("sum")->call<int>(5,9));
+    CPPUNIT_ASSERT_EQUAL(4, obj2.slot< SlotsTestHasSlots::GetValueSlotType >("getValue")->call());
 }
 
 //-----------------------------------------------------------------------------
 
 void SlotsTest::slotsIDTest()
 {
-#ifdef COM_LOG
-    ::fwCom::Slot< int (int, int) >::sptr slot1 = ::fwCom::newSlot( &slotsTestSum );
-    ::fwCom::Slot< void (const std::string &) >::sptr slot2 = ::fwCom::newSlot( &slotsTestPrint );
-
-    ::fwCom::Slots slots;
-    slots( "sum", slot1 )
-         ( "print", slot2 );
-
-    slots.setID();
-    CPPUNIT_ASSERT_EQUAL( std::string("sum"), slot1->getID() );
-    CPPUNIT_ASSERT_EQUAL( std::string("print"), slot2->getID() );
 
-    slots.setID("prefix::");
-    CPPUNIT_ASSERT_EQUAL( std::string("prefix::sum"), slot1->getID() );
-    CPPUNIT_ASSERT_EQUAL( std::string("prefix::print"), slot2->getID() );
-#endif
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwCom/test/tu/src/UtilTest.cpp b/SrcLib/core/fwCom/test/tu/src/UtilTest.cpp
index b87cdc3..9ad8ada 100644
--- a/SrcLib/core/fwCom/test/tu/src/UtilTest.cpp
+++ b/SrcLib/core/fwCom/test/tu/src/UtilTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -64,7 +64,7 @@ class C;
 
 void UtilTest::convertFunctionTypeTest ()
 {
-    typedef void (C::* CM2C) (int, float) const;
+    typedef void (C::* CM2C)(int, float) const;
     typedef void (C::* CM2) (int, float);
 
     typedef ::boost::function< void (int, float) > BF2;
@@ -84,13 +84,13 @@ void UtilTest::removeLastArgTest ()
 {
     typedef long long F9 (int*, double, float, char, double*, float*, char*, int, const char*);
     typedef long long F8 (int*, double, float, char, double*, float*, char*, int);
-    typedef long long F7 (int*, double, float, char, double*, float*, char*) ;
-    typedef long long F6 (int*, double, float, char, double*, float*) ;
-    typedef long long F5 (int*, double, float, char, double*) ;
-    typedef long long F4 (int*, double, float, char) ;
-    typedef long long F3 (int*, double, float) ;
-    typedef long long F2 (int*, double) ;
-    typedef long long F1 (int*) ;
+    typedef long long F7 (int*, double, float, char, double*, float*, char*);
+    typedef long long F6 (int*, double, float, char, double*, float*);
+    typedef long long F5 (int*, double, float, char, double*);
+    typedef long long F4 (int*, double, float, char);
+    typedef long long F3 (int*, double, float);
+    typedef long long F2 (int*, double);
+    typedef long long F1 (int*);
     typedef long long F0 ();
 
 
diff --git a/SrcLib/core/fwComEd/CMakeLists.txt b/SrcLib/core/fwComEd/CMakeLists.txt
deleted file mode 100644
index e11cb88..0000000
--- a/SrcLib/core/fwComEd/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-
-fwLoadProperties()
-fwUseForwardInclude(
-    fwCom
-    fwData
-    fwMedData
-    fwMemory
-    fwRuntime
-    fwServices
-    fwTools
-)
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-
-
-
-
-
diff --git a/SrcLib/core/fwComEd/COPYING b/SrcLib/core/fwComEd/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwComEd/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwComEd/COPYING.LESSER b/SrcLib/core/fwComEd/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwComEd/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwComEd/Properties.cmake b/SrcLib/core/fwComEd/Properties.cmake
deleted file mode 100644
index f0d4f56..0000000
--- a/SrcLib/core/fwComEd/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwComEd )
-set( VERSION 0.1 )
-set( TYPE LIBRARY )
-set( DEPENDENCIES fwCom fwCore fwData fwMath fwMedData fwMemory fwRuntime fwServices fwTools )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwComEd/bin/build.options b/SrcLib/core/fwComEd/bin/build.options
deleted file mode 100644
index 84c6407..0000000
--- a/SrcLib/core/fwComEd/bin/build.options
+++ /dev/null
@@ -1,13 +0,0 @@
-TYPE    = 'shared'
-VERSION = '0-1'
-USE     = [ 'boost' ]
-LIB     = [
-          'fwData_0-1',
-          'fwMedData_0-1',
-          'fwServices_0-1',
-          'fwCore_0-1',
-          'fwTools_0-1',
-          'fwRuntime_0-3'
-          ]
-
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/BooleanMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/BooleanMsg.hpp
deleted file mode 100644
index ceb0ace..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/BooleanMsg.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_BOOLEANMSG_HPP_
-#define _FWCOMED_BOOLEANMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for Boolean : store modification information
- * @class   BooleanMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API BooleanMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((BooleanMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< BooleanMsg > );
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API BooleanMsg(::fwServices::ObjectMsg::Key key);
-
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~BooleanMsg() throw();
-
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_BOOLEANMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/CameraMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/CameraMsg.hpp
deleted file mode 100644
index bc74ded..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/CameraMsg.hpp
+++ /dev/null
@@ -1,125 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_CAMERAMSG_HPP_
-#define _FWCOMED_CAMERAMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for Camera : store modification information
- * @class   CameraMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API CameraMsg : public ::fwServices::ObjectMsg
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((CameraMsg)(::fwServices::ObjectMsg), (( )) ,
-                                           ::fwServices::factory::message::New< CameraMsg > );
-
-
-    /// Event identifier used to inform that a new camera is created
-    FWCOMED_API static std::string NEW_CAMERA;
-
-    /// Event identifier used to inform that a the camera is moving
-    FWCOMED_API static std::string CAMERA_MOVING;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API CameraMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-    * @brief    Destuctor : does nothing.
-    */
-    FWCOMED_API virtual ~CameraMsg() throw();
-
-
-    /**
-     * @name    Camera position
-     */
-    // @{
-
-    /**
-     * @brief       Set the new camera position.
-     * @param[in]   _positionValue array containing the x,y,z coordinates of the camera
-     */
-    FWCOMED_API void setPositionCamera( const double _positionValue[3]);
-
-    /**
-     * @brief   Get the new camera position.
-     * @return  An array containing the x,y,z coordinates of the camera
-     */
-    FWCOMED_API const double* getPositionCamera( void )const;
-    //@}
-
-
-    /**
-     * @name    Camera focal
-     */
-    // @{
-
-    /**
-     * @brief       Set the new camera focal.
-     * @param[in]   _focalValue array containing the focal coordinates.
-     */
-    FWCOMED_API void setFocalCamera( const double _focalValue[4] );
-
-    /**
-     * @brief   Get the new camera focal.
-     * @return  An array containing the focal coordinates.
-     */
-    FWCOMED_API const double* getFocalCamera( void )const;
-    // @}
-
-
-    /**
-     * @name    Camera view up
-     */
-    // @{
-
-    /**
-     * @brief       Set the new camera view up.
-     * @param[in]   _viewUpValue array containing the view up coordinates.
-     */
-    FWCOMED_API void setViewUpCamera( const double _viewUpValue[3] );
-
-    /**
-     * @brief   Get the new camera view up.
-     * @return  An array containing the view up coordinates.
-     */
-    FWCOMED_API const double* getViewUpCamera( void )const;
-    //@}
-
-
-protected:
-
-    /**
-      * @brief used by operator<<(std::ostream & _sstream, IService& _service)
-      */
-    FWCOMED_API virtual void info(std::ostream &_sstream ) const;
-
-private:
-
-    double m_positionCamera[3]; ///< Camera position
-    double m_focalCamera[4];    ///< Camera focal
-    double m_viewUpCamera[3];   ///< Camera view up
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_CAMERAMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ColorMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ColorMsg.hpp
deleted file mode 100644
index 8ca19cc..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ColorMsg.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_COLORMSG_HPP_
-#define _FWCOMED_COLORMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for Color : store modification information
- * @class   ColorMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ColorMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((ColorMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< ColorMsg > );
-
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API ColorMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~ColorMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_COLORMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/CompositeMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/CompositeMsg.hpp
deleted file mode 100644
index 3f27a7f..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/CompositeMsg.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_COMPOSITEMSG_HPP_
-#define _FWCOMED_COMPOSITEMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-#include <fwData/Composite.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for Composite : store modification information
- * @class   CompositeMsg
- * 
- * @date    2005-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API CompositeMsg : public ::fwServices::ObjectMsg
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((CompositeMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< CompositeMsg > );
-
-    /// Event identifier used to inform that keys were added
-    FWCOMED_API static std::string ADDED_KEYS;
-
-    /// Event identifier used to inform that keys were removed
-    FWCOMED_API static std::string REMOVED_KEYS;
-
-    /// Event identifier used to inform that keys were changed
-    FWCOMED_API static std::string CHANGED_KEYS;
-
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API CompositeMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~CompositeMsg() throw();
-
-    /**
-     * @brief       This method add an object in the composite of added keys.
-     * @param[in]   _compositeKey : the key of the added object.
-     * @param[in]   _pNewObject   : the added object.
-     */
-    FWCOMED_API void appendAddedKey( std::string _compositeKey, ::fwData::Object::sptr _pNewObject );
-
-    /**
-     * @brief   Return the composite of the added keys.
-     */
-    FWCOMED_API ::fwData::Composite::sptr getAddedKeys() const;
-
-
-    /**
-     * @brief       This method add an object in the composite of removed keys.
-     * @param[in]   _compositeKey : the key of the removed object.
-     * @param[in]   _pOldObject   : the object which will be removed.
-     */
-    FWCOMED_API void appendRemovedKey( std::string _compositeKey, ::fwData::Object::sptr _pOldObject );
-
-    /**
-     * @brief   Return the composite of the removed keys.
-     */
-    FWCOMED_API ::fwData::Composite::sptr getRemovedKeys() const;
-
-    /**
-     * @brief       This method add an object in the composites of changed keys.
-     * @param[in]   _compositeKey : the key of the changed object.
-     * @param[in]   _pOldObject   : the old object which will be replaced.
-     * @param[in]   _pNewObject   : the new object.
-     */
-    FWCOMED_API void appendChangedKey( std::string _compositeKey, ::fwData::Object::sptr _pOldObject, ::fwData::Object::sptr _pNewObject );
-
-    /**
-     * @brief   Return the composite of the old changed keys (key which will be replaced).
-     */
-    FWCOMED_API ::fwData::Composite::sptr  getOldChangedKeys() const;
-
-    /**
-    * @brief   Return the composite of the new changed keys.
-    */
-    FWCOMED_API ::fwData::Composite::sptr  getNewChangedKeys() const;
-
-private :
-
-    ::fwData::Composite::sptr m_removedKeys;
-    ::fwData::Composite::sptr m_addedKeys;
-    ::fwData::Composite::sptr m_oldChangedKeys;
-    ::fwData::Composite::sptr m_newChangedKeys;
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_COMPOSITEMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/Dictionary.hpp b/SrcLib/core/fwComEd/include/fwComEd/Dictionary.hpp
deleted file mode 100644
index 538ebe7..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/Dictionary.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_DICTIONARY_HPP_
-#define _FWCOMED_DICTIONARY_HPP_
-
-#include <string>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-/**
- * @brief   Centralization of all identifiers used for communication and storage of dynamic attributes
- * @note    probably not dynamic enough but allows at least to have an overview of information that can be exchanged
- * 
-
- * @date    2007-2009.
- */
-struct FWCOMED_CLASS_API Dictionary
-{
-    /// position oriented IDs
-    FWCOMED_API const static std::string position;
-
-    /// visualization oriented IDs
-    /// @{
-    FWCOMED_API static const std::string localGui;
-    FWCOMED_API static const std::string m_axialSliceCountId;
-    FWCOMED_API static const std::string m_frontalSliceCountId;
-    FWCOMED_API static const std::string m_sagittalSliceCountId;
-    FWCOMED_API static const std::string m_axialSliceIndexId;
-    FWCOMED_API static const std::string m_frontalSliceIndexId;
-    FWCOMED_API static const std::string m_sagittalSliceIndexId;
-    FWCOMED_API static const std::string m_transferFunctionCompositeId;
-    FWCOMED_API static const std::string m_globalMatrixId;
-    FWCOMED_API static const std::string m_errorId;
-    FWCOMED_API static const std::string m_imageLandmarksId;
-    FWCOMED_API static const std::string m_imageDistancesId;
-    FWCOMED_API static const std::string m_commentId;
-    FWCOMED_API static const std::string m_colorId;
-    FWCOMED_API static const std::string m_labelId;         ///< to assign a label
-    FWCOMED_API static const std::string m_relatedServiceId; ///< to store uid (simple) of service which create the object
-    FWCOMED_API static const std::string m_imageLabelId;
-    FWCOMED_API static const std::string m_acquisitionCountId;
-    /// @}
-
-    /// processing oriented IDs
-    /// @{
-    FWCOMED_API static const std::string m_roi;
-    /// @}
-
-
-    /// processing oriented data
-    /// @{
-    FWCOMED_API static const std::string DATA_IS_LOCKED;
-    /// @}
-};
-
-}
-
-#endif /*_FWCOMED_DICTIONARY_HPP_*/
diff --git a/SrcLib/core/fwComEd/include/fwComEd/DictionaryOrganMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/DictionaryOrganMsg.hpp
deleted file mode 100644
index 9e179c4..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/DictionaryOrganMsg.hpp
+++ /dev/null
@@ -1,55 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_DICTIONARYORGANMSG_HPP_
-#define _FWCOMED_DICTIONARYORGANMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for DictionaryOrgan : store modification information
- * @class   DictionaryOrganMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API DictionaryOrganMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((DictionaryOrganMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                            ::fwServices::factory::message::New< DictionaryOrganMsg > );
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string ROI4ORGAN_EXP_IS_MODIFIED;
-    FWCOMED_API static std::string ROI4ORGAN_NODE_IS_MODIFIED;
-    FWCOMED_API static std::string MASK_DATA_NODE_IS_MODIFIED;
-    FWCOMED_API static std::string MESH_DATA_NODE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API DictionaryOrganMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~DictionaryOrganMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_DICTIONARYORGANMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/FloatMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/FloatMsg.hpp
deleted file mode 100644
index 2e71989..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/FloatMsg.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_FLOATMSG_HPP_
-#define _FWCOMED_FLOATMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for float field : store modification information
- * @class   FloatMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API FloatMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((FloatMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< FloatMsg >);
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API FloatMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~FloatMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_FloatMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/GraphMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/GraphMsg.hpp
deleted file mode 100644
index dbb39b0..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/GraphMsg.hpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_GRAPHMSG_HPP_
-#define _FWCOMED_GRAPHMSG_HPP_
-
-#include "boost/tuple/tuple.hpp"
-
-#include <fwData/Node.hpp>
-#include <fwData/Edge.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for Graph : store modification information
- * @class   GraphMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API GraphMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((GraphMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< GraphMsg >);
-
-    /**
-     * @name Event identifier
-     * @{
-     */
-    /// @brief Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_GRAPH;
-    FWCOMED_API static std::string CLEANING_GRAPH;
-    FWCOMED_API static std::string ADD_NODE;
-    FWCOMED_API static std::string REMOVE_NODE; // msg notified AFTER removing a node
-    FWCOMED_API static std::string REMOVING_NODE;  // msg notified TO REMOVE a node
-    FWCOMED_API static std::string ADD_EDGE; // msg notified AFTER adding an edge
-    FWCOMED_API static std::string ADDING_EDGE; // msg notified TO ADD an edge
-    FWCOMED_API static std::string REMOVE_EDGE;
-    FWCOMED_API static std::string SELECTED_NODE;
-    FWCOMED_API static std::string UNSELECTED_NODE;
-    FWCOMED_API static std::string SELECTED_OPERATOR;
-    FWCOMED_API static std::string EXECUTE_GRAPH;
-    FWCOMED_API static std::string CANCEL_EXECUTE_GRAPH;
-    FWCOMED_API static std::string CHANGED_NODE_STATE;
-    FWCOMED_API static std::string NODE_PROCESS_ERROR; // datainfo = node to process
-    FWCOMED_API static std::string NODE_PROCESS_WARN;  // datainfo = node to process
-    FWCOMED_API static std::string NODE_PROCESS_DONE;  // datainfo = node to process
-    FWCOMED_API static std::string NODE_PROCESS;       // datainfo = node to process
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API GraphMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : does nothing.
-      */
-    FWCOMED_API virtual ~GraphMsg() throw();
-
-    /// Add a ADD_NODE event with a dataInfo containing the node.
-    FWCOMED_API virtual void addedNode( ::fwData::Node::csptr node );
-    /// Return the added node contained in the dataInfo of ADD_NODE event
-    FWCOMED_API virtual ::fwData::Node::csptr getAddedNode() const;
-
-    /// Add a REMOVE_NODE event with a dataInfo containing the node.
-    FWCOMED_API virtual void removedNode( ::fwData::Node::csptr node );
-    /// Return the removed node contained in the dataInfo of REMOVE_NODE event
-    FWCOMED_API virtual ::fwData::Node::csptr getRemovedNode() const;
-
-    /// Add a REMOVING_NODE event with a dataInfo containing the node.
-    FWCOMED_API virtual void removingNode( ::fwData::Node::csptr node );
-    /// Return the removed node contained in the dataInfo of REMOVING_NODE event
-    FWCOMED_API virtual ::fwData::Node::csptr getRemovingNode() const;
-
-    /// Add a ADDING_EDGE event with a dataInfo containing the node.
-    FWCOMED_API virtual void addingEdge( ::fwData::Node::csptr nodeFrom, ::fwData::Node::csptr nodeTo, std::string outputPortId, std::string inputPortId );
-    /// Return the removed node contained in the dataInfo of ADDING_EDGE event
-    FWCOMED_API virtual ::boost::tuple< ::fwData::Node::csptr, ::fwData::Node::csptr, std::string, std::string > getAddingEdge() const;
-
-
-    /// Add a SELECTED_NODE event with a dataInfo containing the node.
-    FWCOMED_API virtual void selectedNode( ::fwData::Node::csptr node );
-    /// Return the selected node contained in the dataInfo of SELECTED_NODE event
-    FWCOMED_API virtual ::fwData::Node::csptr getSelectedNode() const;
-
-    /// Add a UNSELECTED_NODE event with a dataInfo containing the node.
-    FWCOMED_API virtual void unselectedNode( ::fwData::Node::csptr node );
-    /// Return the unselected node contained in the dataInfo of UNSELECTED_NODE event
-    FWCOMED_API virtual ::fwData::Node::csptr getUnselectedNode() const;
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_GRAPHMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/HistogramMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/HistogramMsg.hpp
deleted file mode 100644
index 28c9d14..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/HistogramMsg.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_FLOAT_MSG_HPP_
-#define _FWCOMED_FLOAT_MSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for histogram field.
- * @class   HistogramMsg
- * 
- * @date    2011.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API HistogramMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((HistogramMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< HistogramMsg >);
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API HistogramMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~HistogramMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_HISTOGRAM_MSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ImageMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ImageMsg.hpp
deleted file mode 100644
index e77e7cf..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ImageMsg.hpp
+++ /dev/null
@@ -1,123 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_IMAGEMSG_HPP_
-#define _FWCOMED_IMAGEMSG_HPP_
-
-#include <fwData/Object.hpp>
-#include <fwData/Integer.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for image : store modification information
- * @class   ImageMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ImageMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((ImageMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< ImageMsg > );
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_IMAGE;
-    FWCOMED_API static std::string BUFFER;
-    FWCOMED_API static std::string MODIFIED;
-    FWCOMED_API static std::string DIMENSION;
-    FWCOMED_API static std::string SPACING;
-    FWCOMED_API static std::string REGION;
-    FWCOMED_API static std::string PIXELTYPE;
-    FWCOMED_API static std::string LANDMARK;
-    FWCOMED_API static std::string NEW_DISTANCE;
-    FWCOMED_API static std::string DISTANCE;
-    FWCOMED_API static std::string DELETE_DISTANCE;
-    FWCOMED_API static std::string SLICE_INDEX;
-    FWCOMED_API static std::string ACTIVATE_SYNC_CROSS;
-    FWCOMED_API static std::string INACTIVATE_SYNC_CROSS;
-    FWCOMED_API static std::string CHANGE_SLICE_TYPE;
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-    FWCOMED_API static std::string TRANSPARENCY;
-    FWCOMED_API static std::string VISIBILITY;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API ImageMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : does nothing.
-     */
-    FWCOMED_API virtual ~ImageMsg() throw();
-
-    /**
-     * @brief Add a SLICE_INDEX even with the slice index position.
-     * @param[in] a : axial position
-     * @param[in] f : frontal position
-     * @param[in] s : sagittal position
-     * @param[in] _pDataInfo : message data info (optional)
-     */
-    FWCOMED_API void setSliceIndex(::fwData::Integer::sptr a, ::fwData::Integer::sptr f, ::fwData::Integer::sptr s, ::fwData::Object::sptr _pDataInfo = ::fwData::Object::sptr() );
-
-    /**
-     * @brief Get the slice index position.
-     * @pre   The message must have a SLICE_INDEX even
-     * @param[out] a : axial position
-     * @param[out] f : frontal position
-     * @param[out] s : sagittal position
-     */
-    FWCOMED_API void getSliceIndex(::fwData::Integer::sptr &a, ::fwData::Integer::sptr &f, ::fwData::Integer::sptr &s ) const;
-
-    /**
-     * @brief Get the window min and max.
-     * @pre   The message must have a WINDOWING even
-     * @param[out] min : window min
-     * @param[out] max : window max
-     */
-    FWCOMED_API void getWindowMinMax(::fwData::Integer::sptr min, ::fwData::Integer::sptr max ) const;
-
-    /**
-     * @brief Get the window and level .
-     * @pre   The message must have a WINDOWING even
-     * @param[out] : the window of the image tf
-     */
-    FWCOMED_API double getWindow() const;
-    /**
-     * @brief Get the level .
-     * @pre   The message must have a WINDOWING even
-     * @param[out] : the level of the image tf
-     */
-    FWCOMED_API double getLevel() const;
-
-protected:
-    /// Axial slice index
-    ::fwData::Integer::sptr m_axialIndex;
-    /// Frontal slice index
-    ::fwData::Integer::sptr m_frontalIndex;
-    /// Sagittal slice index
-    ::fwData::Integer::sptr m_sagittalIndex;
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_IMAGEMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/IntegerMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/IntegerMsg.hpp
deleted file mode 100644
index 09ff9dc..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/IntegerMsg.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_INTEGERMSG_HPP_
-#define _FWCOMED_INTEGERMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for integer field : store modification information
- * @class   IntegerMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API IntegerMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((IntegerMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< IntegerMsg > );
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API IntegerMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~IntegerMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_INTEGERMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/InteractionMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/InteractionMsg.hpp
deleted file mode 100644
index 463b30d..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/InteractionMsg.hpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_INTERACTIONMSG_HPP_
-#define _FWCOMED_INTERACTIONMSG_HPP_
-
-#include <fwData/Object.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/Point.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for interaction : store modification information
- * @class   InteractionMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API InteractionMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((InteractionMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< InteractionMsg > );
-
-    typedef ::fwData::Point::PointCoordType PointCoordType;
-
-    //typedef enum
-    //{
-        //KEY_UP    ,
-        //KEY_DOWN  ,
-        //MOUSE_UP  ,
-        //MOUSE_DOWN,
-        //MOUSE_MOVE
-    //} EventType;
-
-    //typedef enum
-    //{
-        //LEFT           = (1 << 0),
-        //MIDDLE         = (1 << 1),
-        //RIGHT          = (1 << 2),
-        //WHEEL_FORWARD  = (1 << 3),
-        //WHEEL_BACKWARD = (1 << 4),
-    //} MouseButtons;
-
-    typedef enum
-    {
-        NONE      = 0,
-        CTRL      = (1 << 0),
-        SHIFT     = (1 << 1),
-        //ALT     = (1 << 2),
-        //SUPER     = (1 << 3),
-        //APPLE_CMD = (1 << 4),
-    } Modifiers;
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string MOUSE_LEFT_UP;
-    FWCOMED_API static std::string MOUSE_RIGHT_UP;
-    FWCOMED_API static std::string MOUSE_MIDDLE_UP;
-    FWCOMED_API static std::string MOUSE_WHEELFORWARD_UP;
-    FWCOMED_API static std::string MOUSE_WHEELBACKWARD_UP;
-
-    FWCOMED_API static std::string MOUSE_LEFT_DOWN;
-    FWCOMED_API static std::string MOUSE_RIGHT_DOWN;
-    FWCOMED_API static std::string MOUSE_MIDDLE_DOWN;
-    FWCOMED_API static std::string MOUSE_WHEELFORWARD_DOWN;
-    FWCOMED_API static std::string MOUSE_WHEELBACKWARD_DOWN;
-
-    FWCOMED_API static std::string MOUSE_MOVE;
-
-    //FWCOMED_API static std::string KEY_UP;
-    //FWCOMED_API static std::string KEY_DOWN;
-
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API InteractionMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : does nothing.
-     */
-    FWCOMED_API virtual ~InteractionMsg() throw();
-
-    /// Set the state of the modifier k.
-    FWCOMED_API void setModifiersStatus(Modifiers k, bool state = true);
-    /// Get the state of the modifier k.
-    FWCOMED_API bool getModifiersStatus(Modifiers k) const;
-
-    /// Get the control status.
-    bool getControlStatus() const {return getModifiersStatus(CTRL);}
-    /// Get the shift status.
-    bool getShiftStatus() const {return getModifiersStatus(SHIFT);}
-
-    /**
-     * @brief Set the message event
-     * @note  An InteractionMsg can only handle one event.
-     */
-    FWCOMED_API void setEvent(std::string event);
-
-    /// Set the point coordinates of the event.
-    FWCOMED_API void setEventPoint(::fwData::Point::csptr point);
-    /// Set the point coordinates of the event.
-    FWCOMED_API void setEventPoint(PointCoordType x, PointCoordType y, PointCoordType z);
-
-    /// Return the point coordinates of the event.
-    FWCOMED_API ::fwData::Point::csptr getEventPoint() const;
-
-protected:
-
-    /// Event point coordinates
-    ::fwData::Point::sptr m_eventPoint;
-
-    /// Modifiers status
-    unsigned char m_modifiersStatus;
-
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_INTERACTIONMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/LocationMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/LocationMsg.hpp
deleted file mode 100644
index 77f139b..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/LocationMsg.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_LOCATIONMSG_HPP_
-#define _FWCOMED_LOCATIONMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for location object : store modification information
- * @class   LocationMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API LocationMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((LocationMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< LocationMsg > );
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string LOCATION_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API LocationMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~LocationMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_LOCATIONMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/MaterialMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/MaterialMsg.hpp
deleted file mode 100644
index b8c0dac..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/MaterialMsg.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_MATERIALMSG_HPP_
-#define _FWCOMED_MATERIALMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for material : store modification information
- * @class   MaterialMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API MaterialMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((MaterialMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< MaterialMsg >);
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string MATERIAL_IS_MODIFIED;
-    /// @}
-
-    /**
-     * @brief   Constructor : do nothing.
-     */
-    FWCOMED_API MaterialMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~MaterialMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_MATERIALMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/MeshMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/MeshMsg.hpp
deleted file mode 100644
index c3eaec8..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/MeshMsg.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_MESHMSG_HPP_
-#define _FWCOMED_MESHMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for Mesh : store modification information
- * @class   MeshMsg
- * 
- * @date    2011.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API MeshMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (MeshMsg)(::fwServices::ObjectMsg), (( )) ,
-                                            ::fwServices::factory::message::New< MeshMsg > );
-
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_MESH;
-    FWCOMED_API static std::string VERTEX_MODIFIED;
-    FWCOMED_API static std::string POINT_COLORS_MODIFIED;
-    FWCOMED_API static std::string CELL_COLORS_MODIFIED;
-    FWCOMED_API static std::string POINT_NORMALS_MODIFIED;
-    FWCOMED_API static std::string CELL_NORMALS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API MeshMsg(::fwServices::ObjectMsg::Key key);
-
-    /// Destructor. Do nothing.
-    FWCOMED_API virtual ~MeshMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_MESHMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ModelMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ModelMsg.hpp
deleted file mode 100644
index 54c60e7..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ModelMsg.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_MODELMSG_HPP_
-#define _FWCOMED_MODELMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for model : store modification information
- * @class   ModelMsg
- * 
- * @date    2007-2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ModelMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((ModelMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< ModelMsg >);
-
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_MODEL;
-
-    /**
-     * @brief   Constructor : does nothing.
-     */
-    FWCOMED_API ModelMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : does nothing.
-     */
-    FWCOMED_API virtual ~ModelMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_MODELMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ModelSeriesMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ModelSeriesMsg.hpp
deleted file mode 100644
index 83c64af..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ModelSeriesMsg.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_MODELSERIESMSG_HPP__
-#define __FWCOMED_MODELSERIESMSG_HPP__
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for model series : store modification information
- * @class   ModelSeriesMsg
- * @date    2013
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ModelSeriesMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((ModelSeriesMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< ModelSeriesMsg > );
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string ADD_RECONSTRUCTION;
-    FWCOMED_API static std::string REMOVED_RECONSTRUCTIONS;
-    FWCOMED_API static std::string SHOW_RECONSTRUCTIONS;
-    FWCOMED_API static std::string VISIBILITY;
-    FWCOMED_API static std::string NEW_RECONSTRUCTION_SELECTED;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API ModelSeriesMsg(::fwServices::ObjectMsg::Key key);
-
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~ModelSeriesMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //__FWCOMED_MODELSERIESMSG_HPP__
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/Namespace.hpp b/SrcLib/core/fwComEd/include/fwComEd/Namespace.hpp
deleted file mode 100644
index f59356c..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/Namespace.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWCOMEDNAMESPACE_HPP_
-#define FWCOMEDNAMESPACE_HPP_
-
-/**
- * @brief       This namespace fwComEd contains the classes used in communication edition like definition of message used in the FW4SPL.
- * @namespace   fwComEd
- * 
- * @date        2009-2010.
- *
- */
-namespace fwComEd
-{
-}
-#endif /* FWCOMEDNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwComEd/include/fwComEd/PlaneListMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/PlaneListMsg.hpp
deleted file mode 100644
index c47ea6d..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/PlaneListMsg.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PLANELISTMSG_HPP_
-#define _FWCOMED_PLANELISTMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for PlaneList : store modification information
- * @class   PlaneListMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API PlaneListMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((PlaneListMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< PlaneListMsg >);
-
-    /**
-     * @name Event identifier
-     * @{
-     */
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string ADD_PLANE;
-    FWCOMED_API static std::string REMOVE_PLANE;
-    FWCOMED_API static std::string PLANELIST_VISIBILITY;
-    FWCOMED_API static std::string PLANELIST_MODIFIED;
-    FWCOMED_API static std::string DESELECT_ALL_PLANES;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API PlaneListMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : does nothing.
-      */
-    FWCOMED_API virtual ~PlaneListMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_PLANELISTMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/PlaneMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/PlaneMsg.hpp
deleted file mode 100644
index c097b46..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/PlaneMsg.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PLANEMSG_HPP_
-#define _FWCOMED_PLANEMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for PlaneList : store modification information
- * @class   PlaneMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API PlaneMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((PlaneMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< PlaneMsg > );
-
-    /**
-     * @name Event identifier
-     * @{
-     */
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string PLANE_MODIFIED;
-    FWCOMED_API static std::string START_PLANE_INTERACTION;
-    FWCOMED_API static std::string DESELECT_PLANE;
-    FWCOMED_API static std::string WAS_SELECTED;
-    FWCOMED_API static std::string WAS_DESELECTED;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API PlaneMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : does nothing.
-      */
-    FWCOMED_API virtual ~PlaneMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_PLANEMSG_HPP_
-
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/PointListMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/PointListMsg.hpp
deleted file mode 100644
index abd8e8c..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/PointListMsg.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_POINTLISTMSG_HPP_
-#define _FWCOMED_POINTLISTMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for PointList : store modification information
- * @class   PointListMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API PointListMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((PointListMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< PointListMsg >);
-
-    /**
-     * @name Event identifier
-     * @{
-     */
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string ELEMENT_MODIFIED;
-    FWCOMED_API static std::string ELEMENT_ADDED;
-    FWCOMED_API static std::string ELEMENT_REMOVED;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API PointListMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~PointListMsg() throw();
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_POINTLISTMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/PointMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/PointMsg.hpp
deleted file mode 100644
index c06147e..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/PointMsg.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_POINTMSG_HPP_
-#define _FWCOMED_POINTMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for Point : store modification information
- * @class   PointMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API PointMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((PointMsg)(::fwServices::ObjectMsg), ( () ),
-                                            ::fwServices::factory::message::New< PointMsg > );
-
-    /**
-     * @name Event identifier
-     * @{
-     */
-    /// @brief Event identifier used to inform for modification
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-    FWCOMED_API static std::string POINT_IS_MODIFIED;
-    FWCOMED_API static std::string START_POINT_INTERACTION;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API PointMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : does nothing.
-      */
-    FWCOMED_API virtual ~PointMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_POINTMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ReconstructionMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ReconstructionMsg.hpp
deleted file mode 100644
index c9c3b57..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ReconstructionMsg.hpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_RECONSTRCUTIONMSG_HPP_
-#define _FWCOMED_RECONSTRCUTIONMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for reconstruction : store modification information
- * @class   ReconstructionMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ReconstructionMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((ReconstructionMsg)(::fwServices::ObjectMsg), ( () ),
-                                            ::fwServices::factory::message::New< ReconstructionMsg >);
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string MESH;
-    FWCOMED_API static std::string VISIBILITY;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API ReconstructionMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~ReconstructionMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_RECONSTRCUTIONMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ResectionDBMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ResectionDBMsg.hpp
deleted file mode 100644
index dbf8117..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ResectionDBMsg.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_RESECTIONDBMSG_HPP_
-#define _FWCOMED_RESECTIONDBMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwData/Resection.hpp>
-#include <fwData/ResectionDB.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for resectionDB : store modification information
- * @class   ResectionDBMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ResectionDBMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((ResectionDBMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< ResectionDBMsg >);
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// @brief Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_RESECTIONDB_SELECTED;
-    FWCOMED_API static std::string RESECTIONDB_SELECTED;
-    FWCOMED_API static std::string NEW_RESECTION_SELECTED;
-    FWCOMED_API static std::string NEW_SAFE_PART_SELECTED;
-    FWCOMED_API static std::string ADD_RESECTION;
-    FWCOMED_API static std::string ADD_SAFE_PART;
-    FWCOMED_API static std::string MODIFIED;
-    FWCOMED_API static std::string RESECTIONDB_INVALIDATED;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API ResectionDBMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~ResectionDBMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_RESECTIONDBMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/ResectionMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/ResectionMsg.hpp
deleted file mode 100644
index 14c9ee1..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/ResectionMsg.hpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_RESECTIONMSG_HPP_
-#define _FWCOMED_RESECTIONMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for resection : store modification information
- * @class   ResectionMsg
- * 
- * @date    2009
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API ResectionMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((ResectionMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< ResectionMsg >);
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// @brief Event identifier used to inform for modification
-    FWCOMED_API static std::string ADD_RECONSTRUCTION;
-    FWCOMED_API static std::string VISIBILITY;
-    FWCOMED_API static std::string NEW_RECONSTRUCTION_SELECTED;
-    FWCOMED_API static std::string MODIFIED;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API ResectionMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~ResectionMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_RESECTIONMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/SeriesDBMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/SeriesDBMsg.hpp
deleted file mode 100644
index c706a9e..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/SeriesDBMsg.hpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_SERIESDBMSG_HPP__
-#define __FWCOMED_SERIESDBMSG_HPP__
-
-#include <fwData/Vector.hpp>
-#include <fwMedData/Series.hpp>
-#include <fwMedData/SeriesDB.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for SeriesDB : store modification information
- * @class   SeriesDBMsg
- * @date    2005-2013.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API SeriesDBMsg : public ::fwServices::ObjectMsg
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((SeriesDBMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< SeriesDBMsg > );
-
-
-    /// Event identifier used to inform that Series were added
-    FWCOMED_API static std::string ADDED_OBJECTS;
-
-    /// Event identifier used to inform that Series were removed
-    FWCOMED_API static std::string REMOVED_OBJECTS;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API SeriesDBMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~SeriesDBMsg() throw();
-
-
-    /**
-     * @brief       This method add a Series in the vector of added Series.
-     * @param[in]   newSeries   : the added Series.
-     */
-    FWCOMED_API void appendAddedSeries( ::fwMedData::Series::sptr newSeries );
-
-    /**
-     * @brief   Return the vector of the added Series.
-     */
-    FWCOMED_API ::fwData::Vector::sptr getAddedSeries() const;
-
-
-    /**
-     * @brief       This method add a Series in SeriesDB of removed Series.
-     * @param[in]   oldSeries   : the Series which will be removed.
-     */
-    FWCOMED_API void appendRemovedSeries( ::fwMedData::Series::sptr oldSeries );
-
-    /**
-     * @brief   Return the vector of the removed Series.
-     */
-    FWCOMED_API ::fwData::Vector::sptr getRemovedSeries() const;
-
-private :
-
-    /// Stores removed object from SeriesDB
-    ::fwData::Vector::sptr m_removedSeries;
-
-    /// Stores new added object in SeriesDB
-    ::fwData::Vector::sptr m_addedSeries;
-};
-
-} // namespace fwComEd
-
-#endif //__FWCOMED_SERIESDBMSG_HPP__
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/SplineMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/SplineMsg.hpp
deleted file mode 100644
index e53e4be..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/SplineMsg.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_SPLINEMSG_HPP_
-#define _FWCOMED_SPLINEMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for Spline : store modification information
- * @class   SplineMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API SplineMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((SplineMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< SplineMsg > );
-
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_SPLINE;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API SplineMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~SplineMsg() throw();
-
-};
-
-} // namespace op
-
-#endif //_FWCOMED_SPLINEMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/StringMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/StringMsg.hpp
deleted file mode 100644
index 24b848b..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/StringMsg.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_STRINGMSG_HPP_
-#define _FWCOMED_STRINGMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for string field : store modification information
- * @class   StringMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API StringMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((StringMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< StringMsg >);
-
-    /// Event identifier used to inform that the value is modified.
-    FWCOMED_API static std::string VALUE_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API StringMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : do nothing
-      */
-    FWCOMED_API virtual ~StringMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_STRINGMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/TagMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/TagMsg.hpp
deleted file mode 100644
index 9c24d6e..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/TagMsg.hpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TAGMSG_HPP_
-#define _FWCOMED_TAGMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for Tag : store modification information
- * @class   TagMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API TagMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((TagMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< TagMsg >);
-
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string TAG_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API TagMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : do nothing.
-      */
-    FWCOMED_API virtual ~TagMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_TAGMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/TransferFunctionMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/TransferFunctionMsg.hpp
deleted file mode 100644
index a32cb78..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/TransferFunctionMsg.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TRANSFERFUNCTIONMSG_HPP_
-#define _FWCOMED_TRANSFERFUNCTIONMSG_HPP_
-
-#include <fwData/Object.hpp>
-#include <fwData/Integer.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for transfer function : store modification information
- * @class   TransferFunctionMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API TransferFunctionMsg : public ::fwServices::ObjectMsg
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro((TransferFunctionMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< TransferFunctionMsg >);
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string MODIFIED_POINTS;
-    FWCOMED_API static std::string WINDOWING;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API TransferFunctionMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : does nothing.
-     */
-    FWCOMED_API virtual ~TransferFunctionMsg() throw();
-
-    /**
-     * @brief Add a WINDOWING even with window and level.
-     * @param[in] level : level of the image tf
-     * @param[in] window : window of the image tf
-     */
-    FWCOMED_API void setWindowLevel( double window, double level );
-
-    /**
-     * @brief Get the window and level .
-     * @pre   The message must have a WINDOWING even
-     * @param[out] : the window of the image tf
-     */
-    FWCOMED_API double getWindow() const;
-    /**
-     * @brief Get the level .
-     * @pre   The message must have a WINDOWING even
-     * @param[out] : the level of the image tf
-     */
-    FWCOMED_API double getLevel() const;
-
-protected:
-
-    /// Windowing min
-    double m_level;
-    /// Windowing max
-    double m_window;
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_TRANSFERFUNCTIONMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/TransformationMatrix3DMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/TransformationMatrix3DMsg.hpp
deleted file mode 100644
index 9cc7f8d..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/TransformationMatrix3DMsg.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TRANSFORMATIONMATRIX3DMSG_HPP_
-#define _FWCOMED_TRANSFORMATIONMATRIX3DMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for TransformationMatrix3D : store modification information
- * @class   TransformationMatrix3DMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API TransformationMatrix3DMsg : public fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((TransformationMatrix3DMsg)(::fwServices::ObjectMsg), ( ( ) ),
-                                           ::fwServices::factory::message::New< TransformationMatrix3DMsg >);
-
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string MATRIX_IS_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API TransformationMatrix3DMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destuctor : do nothing.
-     */
-    FWCOMED_API virtual ~TransformationMatrix3DMsg() throw();
-
-};
-
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_TRANSFORMATIONMATRIX3DMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/TriangularMeshMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/TriangularMeshMsg.hpp
deleted file mode 100644
index 79e2506..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/TriangularMeshMsg.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TRIANGULARMESHMSG_HPP_
-#define _FWCOMED_TRIANGULARMESHMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for TriangularMesh : store modification information
- * @class   TriangularMeshMsg
- * 
- * @date    2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API TriangularMeshMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (TriangularMeshMsg)(::fwServices::ObjectMsg), (( )) ,
-                                             ::fwServices::factory::message::New< TriangularMeshMsg > );
-
-    /// Event identifier used to inform for modification
-    FWCOMED_API static std::string NEW_MESH;
-    FWCOMED_API static std::string VERTEX_MODIFIED;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API TriangularMeshMsg(::fwServices::ObjectMsg::Key key);
-
-    /// Destructor. Do nothing.
-    FWCOMED_API virtual ~TriangularMeshMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_TRIANGULARMESHMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/VectorMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/VectorMsg.hpp
deleted file mode 100644
index 8bba288..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/VectorMsg.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_VECTORMSG_HPP__
-#define __FWCOMED_VECTORMSG_HPP__
-
-#include <fwServices/ObjectMsg.hpp>
-#include <fwData/Vector.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object event message specialized for Vector : store modification information
- * @class   VectorMsg
- * 
- * @date    2005-2009.
- * @see     ::fwServices::ObjectMsg
- */
-class FWCOMED_CLASS_API VectorMsg : public ::fwServices::ObjectMsg
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((VectorMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< VectorMsg > );
-
-
-    /// Event identifier used to inform that objects were added
-    FWCOMED_API static std::string ADDED_OBJECTS;
-
-    /// Event identifier used to inform that objects were removed
-    FWCOMED_API static std::string REMOVED_OBJECTS;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API VectorMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWCOMED_API virtual ~VectorMsg() throw();
-
-
-    /**
-     * @brief       This method add an object in the vector of added objects.
-     * @param[in]   _pNewObject   : the added object.
-     */
-    FWCOMED_API void appendAddedObject( ::fwData::Object::sptr _pNewObject );
-
-    /**
-     * @brief   Return the vector of the added objects.
-     */
-    FWCOMED_API ::fwData::Vector::sptr getAddedObjects() const;
-
-
-    /**
-     * @brief       This method add an object in the vector of removed objects.
-     * @param[in]   _pOldObject   : the object which will be removed.
-     */
-    FWCOMED_API void appendRemovedObject( ::fwData::Object::sptr _pOldObject );
-
-    /**
-     * @brief   Return the vector of the removed objects.
-     */
-    FWCOMED_API ::fwData::Vector::sptr getRemovedObjects() const;
-
-private :
-
-    /// Stores removed object from the vector
-    ::fwData::Vector::sptr m_removedObjects;
-
-    /// Stores new added object in the vector
-    ::fwData::Vector::sptr m_addedObjects;
-};
-
-} // namespace fwComEd
-
-#endif //__FWCOMED_VECTORMSG_HPP__
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/VideoMsg.hpp b/SrcLib/core/fwComEd/include/fwComEd/VideoMsg.hpp
deleted file mode 100644
index 1e29128..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/VideoMsg.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_VIDEOMSG_HPP_
-#define _FWCOMED_VIDEOMSG_HPP_
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-/**
- * @brief   Object message specialized for Video : store modification information
- * @class   VideoMsg
- * 
- * @date    2007-2009.
- * @see     ::fwServices::ObjectMsg
- * @todo specialize it when Video class is clearly defined
- */
-class FWCOMED_CLASS_API VideoMsg : public ::fwServices::ObjectMsg
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro((VideoMsg)(::fwServices::ObjectMsg), ( () ),
-                                           ::fwServices::factory::message::New< VideoMsg >);
-
-    /**
-     * @name Event identifier
-     */
-    /// @{
-    /// Event identifier used to inform for modification
-    FWCOMED_API static  std::string VIDEO_IS_REFRESHED;
-    FWCOMED_API static  std::string VIDEO_IS_INITIALIZED;
-    /// @}
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWCOMED_API VideoMsg(::fwServices::ObjectMsg::Key key);
-
-    /**
-      * @brief  Destuctor : do nothing.
-      */
-    FWCOMED_API virtual ~VideoMsg() throw();
-
-};
-
-} // namespace fwComEd
-
-#endif //_FWCOMED_VIDEOMSG_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/export.hpp b/SrcLib/core/fwComEd/include/fwComEd/export.hpp
deleted file mode 100644
index b0592b2..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_CONFIG_HPP_
-#define _FWCOMED_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWCOMED_EXPORTS
-    #define FWCOMED_API __declspec(dllexport)
-    #else
-    #define FWCOMED_API __declspec(dllimport)
-    #endif
-    
-    #define FWCOMED_CLASS_API 
-
-    #pragma warning(disable: 4290)
-    
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWCOMED_EXPORTS
-        #define FWCOMED_API __attribute__ ((visibility("default")))
-        #define FWCOMED_CLASS_API __attribute__ ((visibility("default")))
-        #else
-        #define FWCOMED_API __attribute__ ((visibility("hidden")))
-        #define FWCOMED_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-#else
-
-    #define FWCOMED_API
-    #define FWCOMED_CLASS_API
-
-#endif
-
-
-#endif //_FWCOMED_CONFIG_HPP_
diff --git a/SrcLib/core/fwComEd/include/fwComEd/fieldHelper/MedicalImageHelpers.hpp b/SrcLib/core/fwComEd/include/fwComEd/fieldHelper/MedicalImageHelpers.hpp
deleted file mode 100644
index 20ec966..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/fieldHelper/MedicalImageHelpers.hpp
+++ /dev/null
@@ -1,399 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_FIELDHELPER_MEDICALIMAGEHELPERS_HPP_
-#define _FWCOMED_FIELDHELPER_MEDICALIMAGEHELPERS_HPP_
-
-#include <utility> // std::pair
-#include <numeric>
-
-
-#include <fwData/Image.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/Point.hpp>
-
-#include <fwTools/Dispatcher.hpp>
-#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
-#include <fwTools/IntrinsicTypes.hpp>
-#include <fwTools/NumericRoundCast.hxx>
-#include <fwServices/IService.hpp>
-
-#include "fwComEd/export.hpp"
-#include "fwComEd/helper/Image.hpp"
-
-namespace fwComEd
-{
-namespace fieldHelper
-{
-
-
-template <class T> struct bitwise_or : std::binary_function <T,T,T>
-{
-  T operator() (const T& x, const T& y) const
-    {return x|y;}
-};
-
-
-/**
- * @class   MedicalImageHelpers
- * @brief   This class contains helpers for medical image fields.
- * 
- * @date    2009.
- */
-class FWCOMED_CLASS_API MedicalImageHelpers
-{
-public :
-
-    /**
-     * @brief       Check if the image has a landmark field.
-     *
-     * If the image hasn't landmark field, it is added and the method return true.
-     *
-     * @param[in]   _pImg   image which must contains the field.
-     * @return      true if the field is added.
-     */
-    FWCOMED_API static bool checkLandmarks( ::fwData::Image::sptr _pImg );
-
-    /**
-     * @brief       Check if the image is valid.
-     *
-     * The image size must be > 1 for each dimension.
-     *
-     * @param[in]   _pImg   image checked.
-     * @return      true if the image is valid.
-     */
-    FWCOMED_API static bool checkImageValidity( ::fwData::Image::sptr _pImg );
-
-    /**
-     * @brief       Check if the image has slice index fields.
-     *
-     * If the image hasn't frontal, axial and sagittal slice index fields, they are added.
-     *
-     * @param       _pImg   image which must contains the field.
-     * @return      true if the fields are added.
-     */
-    FWCOMED_API static bool checkImageSliceIndex( ::fwData::Image::sptr _pImg );
-
-    /**
-     * @brief       Get the X,Y,Z slice position.
-     * @param[in]   _pImg   current image.
-     * @return      X,Y,Z  slice position of the current image if exist field exist
-     *              else install field and return (imgSizeX/2,imgSizeY/2,imgSizeZ/2).
-     */
-    FWCOMED_API static ::fwData::Point::sptr   getImageSliceIndices( ::fwData::Image::sptr _pImg );
-
-    /**
-     * @brief       Check if the image has a comment field.
-     *
-     * If the image has no comment field, this is added with default name ("Original image").
-     *
-     * @param[in]   _pImg image which contains the comment field.
-     * @return      true if the comment field is added.
-     */
-    FWCOMED_API static bool checkComment( ::fwData::Image::sptr _pImg );
-
-    /**
-     * @brief       Initialized an image to 0 from image source (same field, pixel type, buffer size...).
-     *
-     *
-     * @param[in]   imgSrc             image which gives information (field, pixel type, buffer size...).
-     * @param[in]   imgToInitialize    image to initialized (if not null).
-     *
-     * @return      Returns initialized image.
-     */
-    FWCOMED_API static ::fwData::Image::sptr initialize( ::fwData::Image::sptr imgSrc, ::fwData::Image::sptr imgToInitialize = ::fwData::Image::sptr());
-
-    /**
-     * @brief       Return true if the pixel value is null.
-     * @param[in] image : image containing the pixel
-     * @param[in] point : the coordinate of the pixel in the image.
-     */
-    template < typename INT_INDEX>
-    static bool isPixelNull(::fwData::Image::sptr image, INT_INDEX &point);
-
-    FWCOMED_API static bool isBufNull(const ::fwData::Image::BufferType *buf, const unsigned int len);
-
-
-    /**
-     * @brief Set a pixel value.
-     * @param[in] image : image containing the pixel
-     * @param[in] point : coordinate of the pixel
-     * @param[in] value : the pixel value
-     */
-    template < typename T , typename INT_INDEX>
-    static void setPixel(::fwData::Image::sptr image, INT_INDEX &point, T &value);
-
-    /**
-     * @brief Set a pixel value.
-     * @param[in] pImage : image containing the pixel
-     * @param[in] point : coordinate of the pixel
-     * @param[in] value : the pixel value
-     */
-    template < typename T >
-    static void setPixel(::fwData::Image::sptr pImage, ::fwData::Point::sptr point, T &value);
-
-
-    /**
-     * @brief Return a buffer of image type's size, containing 'value' casted to image data type
-     * @param[in] image : reference image
-     * @param[in] value : value to map
-     */
-    template < typename T >
-    static SPTR( ::fwData::Image::BufferType ) getPixelBufferInImageSpace(::fwData::Image::sptr image, T &value);
-
-
-    /**
-     * @brief Return minimum and maximum values contained in image. If image
-     * min or max value is out of MINMAXTYPE range, they are clamped to
-     * MINMAXTYPE capacity
-     * @param[in] _img : image
-     * @param[out] _min : minimum value
-     * @param[out] _max : maximum value
-     */
-    template < typename MINMAXTYPE >
-    static void getMinMax(const ::fwData::Image::sptr _img, MINMAXTYPE &_min, MINMAXTYPE &_max);
-
-};
-
-
-//------------------------------------------------------------------------------
-
-template < typename VALUE >
-class PixelCastAndSetFunctor
-{
-public:
-    class Param
-    {
-        public:
-        typedef VALUE ValueType;
-        typedef SPTR( ::fwData::Image::BufferType ) BufferTypeSptr;
-
-        Param(ValueType &v): value (v)
-        {};
-
-        const ValueType &value;
-        BufferTypeSptr res;
-    };
-
-    template < typename IMAGE >
-    void operator()( Param &param )
-    {
-        unsigned char imageTypeSize = sizeof(IMAGE);
-
-        IMAGE val = ::fwTools::numericRoundCast<IMAGE>(param.value);
-
-        ::fwData::Image::BufferType *buf = reinterpret_cast< ::fwData::Image::BufferType* > (&val);
-
-        SPTR( ::fwData::Image::BufferType ) res ( new ::fwData::Image::BufferType[imageTypeSize] );
-        std::copy(buf, buf+imageTypeSize, res.get());
-        param.res = res;
-    }
-
-};
-
-
-//------------------------------------------------------------------------------
-
-template < typename VALUE, typename INT_INDEX >
-class CastAndSetFunctor
-{
-public:
-    class Param
-    {
-        public:
-        typedef VALUE ValueType;
-        typedef INT_INDEX PointType;
-
-            Param(PointType &p, ValueType &v):
-                value (v), point(p)
-            {};
-
-        ::fwData::Image::sptr image;
-        const ValueType &value;
-        const PointType &point;
-    };
-
-    template < typename IMAGE >
-    void operator()( Param &param )
-    {
-        ::fwComEd::helper::Image imagehelper(param.image);
-        IMAGE * buffer = static_cast < IMAGE* > (imagehelper.getBuffer());
-        const INT_INDEX &p = param.point;
-        const ::fwData::Image::SizeType &size = param.image->getSize();
-        const int &sx = size[0];
-        const int &sy = size[1];
-        const int &offset = p[0] + sx*p[1] + p[2]*sx*sy;
-        *(buffer+offset) = ::fwTools::numericRoundCast<IMAGE>(param.value);
-    }
-
-};
-
-
-
-//------------------------------------------------------------------------------
-
-template < typename T >
-void MedicalImageHelpers::setPixel(::fwData::Image::sptr image, ::fwData::Point::sptr point, T &value)
-{
-    setPixel(image, point->getCoord(), value);
-}
-
-
-//------------------------------------------------------------------------------
-
-template < typename T , typename INT_INDEX>
-void MedicalImageHelpers::setPixel(::fwData::Image::sptr image, INT_INDEX &point, T &value)
-{
-    typename CastAndSetFunctor<T,INT_INDEX>::Param param(point, value);
-    param.image = image;
-
-    ::fwTools::DynamicType type = image->getPixelType();
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , CastAndSetFunctor<T, INT_INDEX> >::invoke( type, param );
-}
-
-
-
-//------------------------------------------------------------------------------
-
-template < typename T >
-SPTR( ::fwData::Image::BufferType ) MedicalImageHelpers::getPixelBufferInImageSpace(::fwData::Image::sptr image, T &value)
-{
-    typename PixelCastAndSetFunctor<T>::Param param(value);
-
-    ::fwTools::DynamicType type = image->getPixelType();
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , PixelCastAndSetFunctor<T> >::invoke( type, param );
-    return param.res;
-}
-
-
-
-//------------------------------------------------------------------------------
-
-template < typename INT_INDEX >
-class CastAndCheckFunctor
-{
-public:
-    class Param
-    {
-        public:
-        typedef INT_INDEX PointType;
-
-        Param(PointType &p, bool &b):
-            point(p), isNull(b)
-        {};
-
-        ::fwData::Image::sptr image;
-        const PointType &point;
-        bool &isNull;
-    };
-
-    template < typename IMAGE >
-    void operator()( Param &param )
-    {
-        ::fwComEd::helper::Image imagehelper(param.image);
-        IMAGE * buffer = static_cast < IMAGE* > (imagehelper.getBuffer());
-        const INT_INDEX &p = param.point;
-        const std::vector<boost::int32_t> &size = param.image->getCRefSize();
-        const int &sx = size[0];
-        const int &sy = size[1];
-        const int &offset = p[0] + sx*p[1] + p[2]*sx*sy;
-        param.isNull = (*(buffer+offset) == 0);
-    }
-
-};
-
-//------------------------------------------------------------------------------
-
-template < typename INT_INDEX>
-bool MedicalImageHelpers::isPixelNull(::fwData::Image::sptr image, INT_INDEX &point)
-{
-    ::fwComEd::helper::Image imageLock ( image );
-    const unsigned char imageTypeSize = image->getPixelType().sizeOf();
-    ::fwData::Image::BufferType *buf = static_cast< ::fwData::Image::BufferType *> (imageLock.getPixelBuffer(point[0], point[1], point[2]));
-
-    return isBufNull(buf, imageTypeSize);
-}
-
-//------------------------------------------------------------------------------
-
-template < typename T >
-class MinMaxFunctor
-{
-public:
-    class Param
-    {
-        public:
-
-        Param(::fwData::Image::sptr _img, T &_min, T &_max):
-            image(_img), min(_min), max(_max)
-        {};
-
-        ::fwData::Image::sptr image;
-        T &min;
-        T &max;
-    };
-
-    template < typename IMAGE >
-    void operator()( Param &param )
-    {
-        ::fwComEd::helper::Image imageLock ( param.image );
-        IMAGE * buffer = static_cast < IMAGE* > (imageLock.getBuffer());
-        const ::fwData::Image::SizeType &size = param.image->getSize();
-        ::fwData::Image::SizeType::value_type len = size[0]*size[1]*size[2];
-
-        T &min = param.min;
-        T &max = param.max;
-
-        typedef std::numeric_limits<IMAGE> ImgLimits;
-        IMAGE imin = ImgLimits::max();
-        IMAGE imax = (ImgLimits::is_integer || !ImgLimits::is_signed) ? ImgLimits::min() : - ImgLimits::max();
-
-        IMAGE * bufEnd = buffer + len;
-        IMAGE currentVoxel;
-
-        for (IMAGE * voxel = buffer; voxel < bufEnd; ++voxel )
-        {
-            currentVoxel = *voxel;
-
-            if ( currentVoxel < imin )
-            {
-                imin = currentVoxel;
-            }
-            else if (currentVoxel > imax)
-            {
-                imax = currentVoxel;
-            }
-        }
-
-        typedef std::numeric_limits<T> TLimits;
-        T minT =  (TLimits::is_integer || !ImgLimits::is_signed) ? TLimits::min() : - TLimits::max();
-        T maxT = TLimits::max();
-
-        min = ( imin < minT ) ? minT : static_cast< T > (imin) ;
-        max = ( imax > maxT ) ? maxT : static_cast< T > (imax) ;
-
-    }
-
-};
-
-
-template < typename MINMAXTYPE >
-void MedicalImageHelpers::getMinMax(const ::fwData::Image::sptr _img, MINMAXTYPE &_min, MINMAXTYPE &_max)
-{
-    typename MinMaxFunctor<MINMAXTYPE>::Param param(_img, _min, _max);
-
-    ::fwTools::DynamicType type = _img->getPixelType();
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , MinMaxFunctor<MINMAXTYPE> >::invoke( type, param );
-}
-
-
-
-} // fieldHelper
-} // fwComEd
-
-
-#endif // _FWCOMED_FIELDHELPER_MEDICALIMAGEHELPERS_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/fieldHelper/Namespace.hpp b/SrcLib/core/fwComEd/include/fwComEd/fieldHelper/Namespace.hpp
deleted file mode 100644
index 3d8622a..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/fieldHelper/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWCOMEDFIELDHELPERNAMESPACE_HPP_
-#define FWCOMEDFIELDHELPERNAMESPACE_HPP_
-
-namespace fwComEd
-{
-/**
- * @brief       This namespace fwComEd::fieldHelper contains several helpers for using field.
- * @namespace   fwComEd::fieldHelper
- * 
- * @date        2009-2010.
- *
- */
-namespace fieldHelper
-{
-}
-
-}
-#endif /* FWCOMEDFIELDHELPERNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Array.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Array.hpp
deleted file mode 100644
index 5d4372e..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Array.hpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_HELPER_ARRAY_HPP_
-#define _FWCOMED_HELPER_ARRAY_HPP_
-
-#include <fwTools/Type.hpp>
-#include <fwMemory/BufferObject.hpp>
-
-#include <fwData/Array.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-/**
- * @class   Array
- * @brief   Helper to manage array buffer. Lock the buffer before to modify it.
- * 
- * @date    2012
- */
-class FWCOMED_CLASS_API Array
-{
-
-public :
-    fwCoreClassDefinitionsWithFactoryMacro((Array), (((::fwData::Array::sptr))), new Array );
-
-
-    FWCOMED_API Array( ::fwData::Array::sptr array );
-
-    FWCOMED_API virtual ~Array();
-
-    /**
-     * @brief Setter for one item components of the array
-     *
-     * @param id Item id
-     * @param value Valid buffer of elements of type \<m_type\> with a length equal to \<m_nbOfComponents\> to be copied to array 'id'
-     */
-    FWCOMED_API virtual void setItem(const ::fwData::Array::IndexType &id, const void *value);
-
-    /**
-     * @brief Setter for one item component of the array
-     *
-     * @param id Item id
-     * @param component Component id to write data in.
-     * @param value Valid buffer of elements of type \<m_type\> with a length equal to \<m_nbOfComponents\> to be copied to array 'id', component n° 'component'
-     *
-     */
-    FWCOMED_API virtual void setItem(const ::fwData::Array::IndexType &id, const size_t component, const void *value);
-
-    ///
-    /**
-     * @brief Getter for a buffer item. pointer to the requested item in the buffer
-     *
-     * @param id Item id
-     * @param component Component id
-     *
-     * @return Pointer to the requested item in the buffer
-     */
-    FWCOMED_API virtual void* getItem(const ::fwData::Array::IndexType &id, const size_t component = 0);
-
-    /**
-     * @brief Typed version of getItem
-     *
-     * @tparam T Type in which the pointer will be returned
-     * @param id Item id
-     * @param component Component id
-     *
-     * @return Array buffer pointer casted to T
-     */
-    template< typename T > T* getItem(const ::fwData::Array::IndexType &id, const size_t component = 0);
-
-    /**
-     * @brief Copies the data into the buffer pointed by <value>
-     *
-     * @param id Item id
-     * @param[out] value Buffer to write into
-     */
-    FWCOMED_API virtual void getItem(const ::fwData::Array::IndexType &id, void *value) const;
-    FWCOMED_API virtual void getItem(const ::fwData::Array::IndexType &id, const size_t component, void *value) const;
-
-    /**
-     * @brief Getter for the array buffer
-     *
-     * @return Array's buffer, if exists, else NULL
-     * @{
-     */
-    FWCOMED_API virtual void *getBuffer();
-    FWCOMED_API virtual const void *getBuffer() const;
-    ///@}
-
-    /**
-     * @brief Setter for the array buffer.
-     *
-     * An existing buffer will be released if the array own it.
-     *
-     * @param buf            Buffer to set as Array's buffer
-     * @param takeOwnership  if true, the Array will manage allocation and destroy the buffer when needed.
-     * @param type           Type of the array view
-     * @param size           Size of the array view
-     * @param nbOfComponents Number of components of the array view, Min value : 1
-     */
-    FWCOMED_API void setBuffer( void *buf, bool takeOwnership,
-                                const ::fwTools::Type &type,
-                                const ::fwData::Array::SizeType &size,
-                                size_t nbOfComponents );
-
-    /// Returns the begining/end of the buffer interpreted as a char buffer
-    FWCOMED_API virtual char* begin();
-    FWCOMED_API virtual char* end();
-    FWCOMED_API virtual const char* begin() const;
-    FWCOMED_API virtual const char* end() const;
-
-
-    /// Returns the begining/end of the buffer, casted to T
-    template< typename T > T* begin();
-    template< typename T > T* end();
-
-    /**
-     * @brief Get a pointer to the value described by given parameters
-     *
-     * @param id Item id
-     * @param component Item component id
-     * @param sizeOfType size of a component
-     *
-     * @return buffer item pointer
-     * @{
-     */
-    FWCOMED_API char *getBufferPtr( const ::fwData::Array::IndexType &id, size_t component, size_t sizeOfType );
-    FWCOMED_API const char *getBufferPtr( const ::fwData::Array::IndexType &id, size_t component, size_t sizeOfType ) const;
-    ///@}
-
-    /// Returns a copy of current lock on array
-    FWCOMED_API ::fwMemory::BufferObject::Lock getLock() const;
-
-protected:
-
-    /**
-     * @brief Protected setter for the array buffer.
-     * An existing buffer will be released if the array own it.
-     *
-     * @param buf Buffer to set as Array's buffer
-     * @param takeOwnership if true, the Array will manage allocation and destroy the buffer when needed.
-     */
-    FWCOMED_API virtual void setBuffer(void *buf, bool takeOwnership = false);
-
-
-    ::fwData::Array::sptr m_array;
-    ::fwMemory::BufferObject::Lock m_lock;
-
-};
-
-template< typename T >
-T* Array::begin()
-{
-    return static_cast<T*>(this->getBuffer());
-}
-
-template< typename T >
-T* Array::end()
-{
-    return reinterpret_cast<T*> (static_cast<char*>(this->getBuffer()) + m_array->getSizeInBytes());
-}
-
-template< typename T >
-T* Array::getItem(const  ::fwData::Array::IndexType &id, const size_t component)
-{
-    return static_cast<T*> (this->getItem(id, component));
-}
-
-
-} // namespace helper
-
-} // namespace fwData
-
-#endif // _FWCOMED_HELPER_ARRAY_HPP_
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Composite.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Composite.hpp
deleted file mode 100644
index a5249f0..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Composite.hpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_HELPER_COMPOSITE_HPP_
-#define _FWCOMED_HELPER_COMPOSITE_HPP_
-
-#include <fwServices/IService.hpp>
-
-#include "fwComEd/export.hpp"
-#include "fwComEd/CompositeMsg.hpp"
-#include "fwData/Composite.hpp"
-
-
-
-namespace fwComEd
-{
-namespace helper
-{
-
-/**
- * @brief   Defines an helper to modify an ::fwData::Composite and create in parallel the message to announce this modification.
- * @struct  Composite
- * 
- * @date    2007-2009.
- */
-class FWCOMED_CLASS_API Composite
-{
-
-public :
-
-    /// Constructor. Initialize parameters.
-    FWCOMED_API Composite( ::fwData::Composite::wptr _composite );
-
-    /// Destrucotr. Do nothing.
-    FWCOMED_API ~Composite();
-
-    /**
-     * @brief Add an object in the composite.
-     * @param[in] _compositeKey key of the object in the composite.
-     * @param[in] _newObject    object to add in the composite
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void add( std::string _compositeKey, ::fwData::Object::sptr _newObject );
-
-    /**
-     * @brief Remove an object in the composite.
-     * @param[in] _compositeKey key of the object in the composite.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void remove( std::string _compositeKey );
-
-    /**
-     * @brief Clear all objects in the composite.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void clear();
-
-    /**
-     * @brief Replace an object in the composite.
-     * @param[in] _compositeKey key of the object in the composite.
-     * @param[in] _newObject    the new object to add in the composite.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void swap( std::string _compositeKey, ::fwData::Object::sptr _newObject );
-
-    /// Send the message of modification
-    FWCOMED_API void notify( ::fwServices::IService::sptr _serviceSource );
-
-private :
-
-    ::fwComEd::CompositeMsg::sptr m_compositeMsg;
-    ::fwData::Composite::wptr m_composite;
-};
-
-} // namespace helper
-} // namespace fwComEd
-
-#endif // _FWCOMED_HELPER_COMPOSITE_HPP_
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Field.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Field.hpp
deleted file mode 100644
index 2ff48b4..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Field.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_HELPER_FIELD_HPP_
-#define _FWCOMED_HELPER_FIELD_HPP_
-
-#include <fwServices/IService.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwData/Object.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-namespace helper
-{
-
-/**
- * @brief   Defines an helper to modify field on a ::fwData::Object and create a message notifying this modification.
- * 
- * @date    2007-2009.
- */
-class FWCOMED_CLASS_API Field
-{
-
-public :
-
-    /// Constructor. Initialize parameters.
-    FWCOMED_API Field( ::fwData::Object::sptr object );
-
-    /// Destructor. Do nothing.
-    FWCOMED_API ~Field();
-
-    /**
-     * @brief Returns a pointer of corresponding field. If field did not exist, it is set to defaultValue if defaultValue is not null.
-     * @param[in] name Field name
-     * @param[in] defaultValue default return value if field was not found
-     * @return pointer to corresponding field.
-     */
-    template< typename DATA_TYPE >
-    SPTR(DATA_TYPE) setDefaultField( const ::fwData::Object::FieldNameType& name, SPTR(DATA_TYPE) defaultValue );
-
-    /**
-     * @brief Register field with specified name. If the name does already exist, the matching field will be replaced.
-     */
-    FWCOMED_API void setField( const ::fwData::Object::FieldNameType & name, ::fwData::Object::sptr obj );
-
-    /**
-     * @brief Replace the field map content.
-     */
-    FWCOMED_API void setFields( const ::fwData::Object::FieldMapType & newFields );
-
-    /**
-     * @brief Updates the field map content with fieldMap. Duplicated name will be replaced.
-     */
-    FWCOMED_API void updateFields( const ::fwData::Object::FieldMapType & fieldMap );
-
-    /**
-     * @brief Removes field with specified name.
-     */
-    FWCOMED_API void removeField( const ::fwData::Object::FieldNameType &name );
-
-    /// Send the built message
-    FWCOMED_API void notify( ::fwServices::IService::sptr _serviceSource );
-
-protected:
-    FWCOMED_API void buildMessage(
-            const ::fwData::Object::FieldMapType &oldFields,
-            const ::fwData::Object::FieldMapType &newFields
-            );
-
-    ::fwServices::ObjectMsg::sptr m_objectMsg;
-
-    ::fwData::Object::wptr m_object;
-};
-
-
-
-template<typename DATA_TYPE>
-inline SPTR(DATA_TYPE) Field::setDefaultField(const fwData::Object::FieldNameType& name, SPTR(DATA_TYPE) defaultValue)
-{
-    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
-    ::fwData::Object::sptr object = m_object.lock();
-    ::fwData::Object::sptr field = object->getField(name);
-    if (!field)
-    {
-        m_objectMsg->appendAddedField(name, defaultValue);
-    }
-    return object->setDefaultField(name, defaultValue);
-}
-
-} // namespace helper
-} // namespace fwComEd
-
-#endif // _FWCOMED_HELPER_FIELD_HPP_
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Image.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Image.hpp
deleted file mode 100644
index 181bbaa..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Image.hpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_IMAGE_HPP_
-#define _FWCOMED_IMAGE_HPP_
-
-#include <fwData/Image.hpp>
-
-#include <fwServices/IService.hpp>
-
-#include "fwComEd/export.hpp"
-#include "fwComEd/ImageMsg.hpp"
-
-namespace fwComEd
-{
-namespace helper
-{
-
-/**
- * @brief   Defines an helper to modify an ::fwData::Image by adding few medical fields
- * and create in parallel the message to announce these modifications.
- * @struct  Image
- * 
- * @date    2007-20012.
- */
-class FWCOMED_CLASS_API Image
-{
-
-public :
-    fwCoreClassDefinitionsWithFactoryMacro((Image), (((::fwData::Image::sptr))), new Image );
-
-    typedef ::fwData::Image::SizeType SizeType;
-    typedef ::fwData::Image::IndexType IndexType;
-    typedef ::fwData::Image::BufferType BufferType;
-    typedef ::fwData::Image::BufferIndexType BufferIndexType;
-
-    /// Constructor. Initialize parameters.
-    FWCOMED_API Image( ::fwData::Image::sptr image );
-
-    /// Destrucotr. Do nothing.
-    FWCOMED_API virtual ~Image();
-
-    /**
-     * @brief Create landmark fields if not exist, NOT GENERATE MESSAGE.
-     *
-     * If the image hasn't landmark field, it is added and the method return true.
-     *
-     * @return true if the field is added.
-     */
-    FWCOMED_API bool createLandmarks();
-
-    /**
-     * @brief Create transfer function pool if the pool is not present, NOT GENERATE MESSAGE.
-     *
-     * If the image has not transfer functions, the pool is
-     * created and a grey level transfer function is added.
-     */
-    FWCOMED_API bool createTransferFunctionPool(::fwServices::IService::sptr serviceSource = ::fwServices::IService::sptr() );
-
-    /**
-     * @brief Create slice index if indexes are not present, NOT GENERATE MESSAGE.
-     *
-     * If the image hasn't frontal, axial and sagittal slice index fields, they are added.
-     *
-     * @return true if the fields are added.
-     */
-    FWCOMED_API bool createImageSliceIndex();
-
-    /// Send the message of modification
-    FWCOMED_API void notify( ::fwServices::IService::sptr _serviceSource );
-
-    /// Returns image buffer
-    FWCOMED_API void * getBuffer();
-
-    /** @{
-     * @brief Helpers for 3D images
-     */
-    FWCOMED_API void* getPixelBuffer( SizeType::value_type x, SizeType::value_type y, SizeType::value_type z );
-
-    FWCOMED_API void* getPixelBuffer( IndexType index );
-
-    FWCOMED_API void setPixelBuffer( IndexType index , Image::BufferType * pixBuf);
-
-    FWCOMED_API const std::string getPixelAsString(SizeType::value_type x,
-                                                   SizeType::value_type y,
-                                                   SizeType::value_type z );
-    // @}
-
-    /// Returns a copy of current lock on image
-    FWCOMED_API ::fwMemory::BufferObject::Lock getLock() const;
-
-private :
-
-    ::fwComEd::ImageMsg::sptr m_imageMsg;
-
-    ::fwData::Image::sptr m_image;
-
-    ::fwMemory::BufferObject::Lock m_lock;
-};
-
-} // helper
-} // fwComEd
-
-
-#endif // _FWCOMED_IMAGE_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/ImageGetter.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/ImageGetter.hpp
deleted file mode 100644
index 2a222ea..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/ImageGetter.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_IMAGEGETTER_HPP_
-#define _FWCOMED_IMAGEGETTER_HPP_
-
-#include <vector>
-
-#include <fwData/Image.hpp>
-
-#include <fwServices/IService.hpp>
-
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-
-template < typename SERVICE = ::fwServices::IService >
-class FWCOMED_CLASS_API ImageGetter
-{
-public:
-    fwCoreNonInstanciableClassDefinitionsMacro( (ImageGetter) );
-
-    ::fwData::Image::sptr getImage();
-};
-
-
-} //namespace helper
-
-} //namespace fwComEd
-
-#include "fwComEd/helper/ImageGetter.hxx"
-
-#endif // _FWCOMED_IMAGEGETTER_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/ImageGetter.hxx b/SrcLib/core/fwComEd/include/fwComEd/helper/ImageGetter.hxx
deleted file mode 100644
index 791f36f..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/ImageGetter.hxx
+++ /dev/null
@@ -1,31 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#ifndef _FWCOMED_IMAGEGETTER_HXX_
-#define _FWCOMED_IMAGEGETTER_HXX_
-
-#include <fwData/Image.hpp>
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-template < typename SERVICE >
-::fwData::Image::sptr ImageGetter< SERVICE >::getImage()
-{
-    SERVICE *image = dynamic_cast< SERVICE* > (this);
-    return image->template getObject< ::fwData::Image >();
-}
-
-} //namespace helper
-
-} //namespace fwComEd
-
-
-
-#endif // _FWCOMED_IMAGEGETTER_HXX_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/MedicalImageAdaptor.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/MedicalImageAdaptor.hpp
deleted file mode 100644
index 4b9c25b..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/MedicalImageAdaptor.hpp
+++ /dev/null
@@ -1,345 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_MEDICALIMAGEADAPTOR_HPP_
-#define _FWCOMED_MEDICALIMAGEADAPTOR_HPP_
-
-#include <vector>
-
-#include <fwCom/Connection.hpp>
-
-#include <fwData/Composite.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/String.hpp>
-#include <fwData/TransferFunction.hpp>
-
-#include <fwServices/helper/SigSlotConnection.hpp>
-
-#include "fwComEd/TransferFunctionMsg.hpp"
-#include "fwComEd/helper/ImageGetter.hpp"
-#include "fwComEd/export.hpp"
-
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-/**
- * @class   MedicalImageAdaptor
- * @brief   Helpers for medical image.
- * 
- * @date    2010
- */
-class FWCOMED_CLASS_API MedicalImageAdaptor
-{
-
-public:
-    fwCoreNonInstanciableClassDefinitionsMacro( (MedicalImageAdaptor) );
-
-
-    /// Image orientation
-    typedef enum {
-        X_AXIS = 0,
-        Y_AXIS,
-        Z_AXIS
-    } Orientation ;
-
-    /// Destructor. Do nothing.
-    FWCOMED_API virtual ~MedicalImageAdaptor();
-
-    /// Set the image orientation.
-    FWCOMED_API void setOrientation( Orientation orientation );
-
-    /// Return the image orientation.
-    Orientation getOrientation(){ return m_orientation; }
-
-
-
-    /**
-     * @brief Set the tf pool and the key that represents the current selection of TransferFunction.
-     */
-    FWCOMED_API void setTFParameters( ::fwData::Composite::sptr tfPool, std::string tfSelectionId );
-
-    /// Set TF Selection fwID
-    FWCOMED_API void setTFSelectionFwID( const std::string & fwid );
-
-    /// Get TF Selection fwID
-    FWCOMED_API const std::string & getTFSelectionFwID() const;
-
-    /// Set selected TF Key
-    FWCOMED_API void setSelectedTFKey( const std::string & key );
-
-    /// Get selected TF Key
-    FWCOMED_API const std::string & getSelectedTFKey() const;
-
-    /// Set selected TF Key and TF Selection fwID from config
-    FWCOMED_API void parseTFConfig( ::fwRuntime::ConfigurationElement::sptr configuration );
-
-    /// Get the window of the selected tf
-    FWCOMED_API double getWindow() const;
-
-    /// Set the window of the selected tf
-    FWCOMED_API void setWindow( double window );
-
-    /// Set the window level of the selected tf from window min/max
-    FWCOMED_API void setWindowLevel( double windowMin, double windowMax );
-
-    /// Get the level of the selected tf
-    FWCOMED_API double getLevel() const;
-
-    /// Set the level of the selected tf
-    FWCOMED_API void setLevel( double level );
-
-protected:
-
-
-    /// Constructor. Do nothing.
-    FWCOMED_API MedicalImageAdaptor(); // this class VISUVTKADAPTOR_CLASS_API must be specialized
-
-    /**
-     * @brief Set the orientation of the image.
-     * @param[in] orientation must be 0 (X_AXIS), 1 (Y_AXIS) or 2 (Z_AXIS).
-     */
-    FWCOMED_API void setOrientation( int orientation );
-
-    /**
-     * @brief Get the image spacing.
-     * @param[out] spacing : the image spacing
-     */
-    FWCOMED_API void getImageSpacing(double spacing[3]);
-
-    /**
-     * @brief Get the image origin.
-     * @param[out] origin : the image origin
-     */
-    FWCOMED_API void getImageOrigin(double origin[3]);
-
-    /**
-     * @brief Get the image data size (number of slices).
-     * @param[out] size : the image size
-     */
-    FWCOMED_API void getImageDataSize(int size[3]);
-
-    /**
-     * @brief Get the image size ( = dataSize * spacing ).
-     * @param[out] size : the image size
-     */
-    FWCOMED_API void getImageSize(double size[3]);
-
-    /**
-     * @brief Get the slice center
-     * @param[out] center : the slice center
-     */
-    FWCOMED_API void getCurrentSliceCenter(double center[3]);
-
-    // Retrieve the grey level from an image from physical world
-    //float getPixelvalue( double worldPosition[3]);
-
-    /**
-     * @brief Convert world coordinates to slice index coordinates
-     * @param[in] world : coordinate in the world
-     * @param[out] index : coordinate in the slice index
-     */
-    FWCOMED_API void worldToSliceIndex(const double world[3],int index[3] );
-
-    /**
-     * @brief Convert coordinates in the world to coordinates in the image
-     * @param[in] world : coordinate in the world
-     * @param[out] index : coordinate in the image
-     */
-    FWCOMED_API void worldToImageSliceIndex(const double world[3], int index[3] );
-
-    /**
-     * @brief Convert from world coordinates system to image coordinates system
-     * @param[in] index : coordinate in the image
-     * @param[out] world : coordinate in the world
-     */
-    FWCOMED_API void sliceIndexToWorld(const int index[3], double world[3] );
-
-    /**
-     * @brief Get the image spacing.
-     * @param[out] spacing : the image spacing
-     */
-    template< typename FLOAT_ARRAY_3 >
-    void getImageSpacing(FLOAT_ARRAY_3 spacing);
-
-    /**
-     * @brief Get the image data size (number of slices).
-     * @param[out] size : the image size
-     */
-    template< typename INT_INDEX >
-    void getImageDataSize(INT_INDEX size);
-
-    /**
-     * @brief Convert world coordinates to slice index coordinates
-     * @param[in] world : coordinate in the world
-     * @param[out] index : coordinate in the slice index
-     */
-    template< typename WORLD, typename INT_INDEX >
-    void worldToSliceIndex(const WORLD world, INT_INDEX index );
-
-    /**
-     * @brief Convert coordinates in the world to coordinates in the image
-     * @param[in] world : coordinate in the world
-     * @param[out] index : coordinate in the image
-     */
-    template< typename WORLD, typename INT_INDEX >
-    void worldToImageSliceIndex(const WORLD world, INT_INDEX index );
-
-
-
-
-    /**
-     * @brief Return the 4 points of the image plane
-     *
-     * - points are ordered in the following way : image origin is the first point
-     * - points are inserted using the preference follow X axis if exists, if not exists follow Y axis
-     * if Y axis is not present follow Z axis
-     */
-    FWCOMED_API void getPlane( double points[4][3], int sliceNumber );
-
-    /// Set the slice index
-    FWCOMED_API bool setSliceIndex(const int index[3]);
-    /// Get the slice index
-    FWCOMED_API void getSliceIndex(::fwData::Integer::sptr index[3]);
-
-    /// Get the current transfer function
-    FWCOMED_API ::fwData::TransferFunction::sptr getTransferFunction() const;
-
-    /// Get the current transfer function selection
-    FWCOMED_API ::fwData::Composite::sptr getTransferFunctionSelection() const;
-
-    /// Update the image information (slice index, min/max,...)
-    FWCOMED_API void updateImageInfos( ::fwData::Image::sptr image  );
-
-    /// Update the transfer function information
-    FWCOMED_API void updateTransferFunction( ::fwData::Image::sptr image, ::fwServices::IService::sptr srv );
-
-    /// Return the image
-    FWCOMED_API ::fwData::Image::sptr getImage();
-
-    /// Image orientation
-    Orientation m_orientation;
-
-    /// Current image
-    ::fwData::Image::wptr m_weakImage;
-
-    /// Axial slice index
-    ::fwData::Integer::sptr m_axialIndex;
-    /// Frontal slice index
-    ::fwData::Integer::sptr m_frontalIndex;
-    /// Sagittal slice index
-    ::fwData::Integer::sptr m_sagittalIndex;
-
-    // Install TF pool event handler (CHANGED_KEYS, ADDED_KEYS and REMOVED_KEYS)
-    FWCOMED_API void installTFSelectionEventHandler( ::fwServices::IService* srv );
-
-    // Install TF Observer ( com channel )
-    FWCOMED_API void installTFObserver( ::fwServices::IService::sptr srv );
-
-    // Remove TF Observer ( com channel )
-    FWCOMED_API void removeTFObserver();
-
-    FWCOMED_API bool upadteTFObserver(::fwServices::ObjectMsg::csptr msg, ::fwServices::IService::sptr srv);
-
-    // Helper to send a windowing notification in the current tf
-    FWCOMED_API ::fwComEd::TransferFunctionMsg::sptr notifyTFWindowing( ::fwServices::IService::sptr srv );
-
-private :
-
-    ::fwCom::Connection m_tfSelectionConnection;
-    ::fwCom::Connection m_tfConnection;
-
-    /// Transfer function selection
-    ::fwData::Composite::wptr m_tfSelection;
-
-    /// fwID of tf selections ( used during configuration )
-    std::string m_tfSelectionFwID;
-
-    /// Identifier of the key containing the current selection of TransferFunction in TFSelection
-    std::string m_selectedTFKey;
-
-};
-
-struct Image0 {} ;
-struct Image1 {} ;
-
-template < typename IMAGEID >
-class FWCOMED_CLASS_API MedicalImageAdaptorTpl : public MedicalImageAdaptor
-{};
-
-typedef MedicalImageAdaptorTpl<Image0> MedicalImageAdaptorImg0;
-typedef MedicalImageAdaptorTpl<Image1> MedicalImageAdaptorImg1;
-
-
-//------------------------------------------------------------------------------
-template< typename FLOAT_ARRAY_3 >
-void MedicalImageAdaptor::getImageSpacing(FLOAT_ARRAY_3 spacing)
-{
-    ::fwData::Image::sptr image = this->getImage();;
-
-    const ::fwData::Image::SpacingType imSpacing = image->getSpacing();
-    std::copy(imSpacing.begin(), imSpacing.end(), spacing);
-}
-
-//------------------------------------------------------------------------------
-template< typename INT_INDEX >
-void MedicalImageAdaptor::getImageDataSize(INT_INDEX size)
-{
-    ::fwData::Image::sptr image = this->getImage();
-
-    const ::fwData::Image::SizeType imSize = image->getSize();
-    std::copy(imSize.begin(), imSize.end(), size);
-}
-
-//------------------------------------------------------------------------------
-
-template< typename WORLD, typename INT_INDEX >
-void MedicalImageAdaptor::worldToSliceIndex(const WORLD world, INT_INDEX index )
-{
-    double spacing[3];
-    this->getImageSpacing(spacing);
-    double origin[3];
-    this->getImageOrigin(origin);
-    for ( int i=0 ; i<3 ; ++i )
-    {
-        index[i] = static_cast< int >( ( (world[i] - origin[i])/spacing[i] ) + ( ( (world[i] - origin[i])/spacing[i] ) >= 0 ? 0.5 : -0.5 ) );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-template< typename WORLD, typename INT_INDEX >
-void MedicalImageAdaptor::worldToImageSliceIndex(const WORLD world, INT_INDEX index )
-{
-    int imageSize[3];
-    this->getImageDataSize(imageSize);
-    this->worldToSliceIndex(world, index);
-
-    int idval;
-    for (int i = 0; i < 3; i++)
-    {
-        int max = imageSize[i]-1;
-        idval = index[i];
-        if (idval < 0)
-        {
-            index[i] = 0;
-        }
-        else if (idval > max)
-        {
-            index[i] = max;
-        }
-    }
-}
-
-} //namespace helper
-
-} //namespace fwComEd
-
-#endif // _FWCOMED_MEDICALIMAGEADAPTOR_HPP_
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Mesh.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Mesh.hpp
deleted file mode 100644
index 26be7dc..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Mesh.hpp
+++ /dev/null
@@ -1,229 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_HELPER_MESH_HPP_
-#define _FWCOMED_HELPER_MESH_HPP_
-
-#include <fwTools/Type.hpp>
-#include <fwMemory/BufferObject.hpp>
-
-#include <fwData/Mesh.hpp>
-
-#include "fwComEd/helper/Array.hpp"
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-/**
- * @class   Mesh
- * @brief   Helper to manage Mesh. Lock the mesh buffer before to modify it.
- * 
- * @date    2012
- */
-class FWCOMED_CLASS_API Mesh
-{
-public :
-    fwCoreClassDefinitionsWithFactoryMacro((Mesh), (((::fwData::Mesh::sptr))), new Mesh );
-
-    FWCOMED_API Mesh( ::fwData::Mesh::sptr mesh );
-
-    FWCOMED_API virtual ~Mesh();
-
-    /// Updates locks on all internal data Array of Mesh
-    FWCOMED_API void updateLock();
-
-    /**
-     * @brief Insert a point into the mesh.
-     * Reallocates the point array if needed.
-     *
-     * @param p point coordinates
-     *
-     * @return The id of the new point
-     *
-     * @throw ::fwData::Exception
-     */
-    FWCOMED_API  ::fwData::Mesh::Id insertNextPoint(const ::fwData::Mesh::PointValueType p[3])
-    throw(::fwData::Exception);
-
-    /**
-     * @brief Insert a point into the mesh.
-     * @see insertNextPoint
-     */
-    FWCOMED_API ::fwData::Mesh::Id insertNextPoint(::fwData::Mesh::PointValueType x,
-                                                   ::fwData::Mesh::PointValueType y,
-                                                   ::fwData::Mesh::PointValueType z) throw(::fwData::Exception);
-
-    /**
-      * @brief Set a point coordinates.
-      * The mesh must be allocated before calling this method.
-      *
-      * @param id point index
-      * @param p point coordinates
-      *
-      * @throw ::fwData::Exception
-      */
-     FWCOMED_API void setPoint(::fwData::Mesh::Id id, const ::fwData::Mesh::PointValueType p[3]);
-
-     /**
-      * @brief Set a point coordinates.
-      * @see setPoint
-      */
-     FWCOMED_API void setPoint(::fwData::Mesh::Id id,
-                               ::fwData::Mesh::PointValueType x,
-                               ::fwData::Mesh::PointValueType y,
-                               ::fwData::Mesh::PointValueType z);
-
-     /**
-      * @brief Set a point color.
-      *
-      * Depending on the type of allocated point-colors array (RGB or RGBA), 3
-      * or 4 points will be read from p.
-      * The color array must be allocated before calling this method.
-      *
-      * @param id point index
-      * @param c color
-      *
-      * @throw ::fwData::Exception
-      */
-     FWCOMED_API void setPointColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4]);
-
-     /**
-      * @brief Set a cell color.
-      *
-      * Depending on the type of allocated cell-colors array (RGB or RGBA), 3 or
-      * 4 points will be read from p.
-      * The color array must be allocated before calling this method.
-      *
-      * @param id cell index
-      * @param c color
-      *
-      * @throw ::fwData::Exception
-      */
-     FWCOMED_API void setCellColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4]);
-
-     /**
-      * @brief Set a point normal.
-      *
-      * The normal array must be allocated before calling this method.
-      *
-      * @param id point index
-      * @param n normal
-      *
-      * @throw ::fwData::Exception
-      */
-     FWCOMED_API void setPointNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3]);
-
-     /**
-      * @brief Set a cell normal.
-      *
-      * The normal array must be allocated before calling this method.
-      *
-      * @param id cell index
-      * @param n normal
-      *
-      * @throw ::fwData::Exception
-      */
-     FWCOMED_API void setCellNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3]);
-
-     /**
-      * @brief Insert a cell into the mesh.
-      *
-      * Reallocates the mesh concerned arrays if needed.
-      *
-      * @return The id of the new cell
-      *
-      * @throw ::fwData::Exception
-      */
-     FWCOMED_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellTypesEnum type,
-                                                   const ::fwData::Mesh::CellValueType *cell,
-                                                   size_t nb ) throw(::fwData::Exception);
-     /**
-      * @brief Insert a cell into the mesh.
-      * @see insertNextCell
-      */
-     FWCOMED_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p)  throw(::fwData::Exception);
-     /**
-      * @brief Insert a cell into the mesh.
-      * @see insertNextCell
-      */
-     FWCOMED_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p1,
-                                                   ::fwData::Mesh::CellValueType p2 ) throw(::fwData::Exception);
-     /**
-      * @brief Insert a cell into the mesh.
-      * @see insertNextCell
-      */
-     FWCOMED_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p1,
-                                                   ::fwData::Mesh::CellValueType p2,
-                                                   ::fwData::Mesh::CellValueType p3 ) throw(::fwData::Exception);
-     /**
-      * @brief Insert a cell into the mesh.
-      * @see insertNextCell
-      */
-     FWCOMED_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p1,
-                                                   ::fwData::Mesh::CellValueType p2,
-                                                   ::fwData::Mesh::CellValueType p3,
-                                                   ::fwData::Mesh::CellValueType p4 ) throw(::fwData::Exception);
-     /**
-      * @brief Insert a cell into the mesh.
-      * @see insertNextCell
-      */
-     template <typename T> ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellTypesEnum type,
-                                                             const T &pointsBegin,
-                                                             const T &pointsEnd ) throw(::fwData::Exception);
-
-
-
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::PointsMultiArrayType          getPoints() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::CellTypesMultiArrayType       getCellTypes() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::CellDataMultiArrayType        getCellData() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::CellDataOffsetsMultiArrayType getCellDataOffsets() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::PointColorsMultiArrayType     getPointColors() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::CellColorsMultiArrayType      getCellColors() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::PointNormalsMultiArrayType    getPointNormals() const;
-     /// Returns the internal corresponding array as a boost::multi_array_ref
-     FWCOMED_API ::fwData::Mesh::CellNormalsMultiArrayType     getCellNormals() const;
-
-     /// Returns the internal ::fwData::Mesh
-     FWCOMED_API ::fwData::Mesh::csptr getMesh() const;
-
-     /*!
-      * @brief Return true if the mesh is closed.
-      * The result is computed for each call.
-      */
-     FWCOMED_API bool isClosed();
-
-protected:
-
-    ::fwData::Mesh::sptr m_mesh;
-
-    ::fwComEd::helper::Array::sptr m_helperPoints;
-    ::fwComEd::helper::Array::sptr m_helperCellTypes;
-    ::fwComEd::helper::Array::sptr m_helperCellData;
-    ::fwComEd::helper::Array::sptr m_helperCellDataOffsets;
-    ::fwComEd::helper::Array::sptr m_helperPointColors;
-    ::fwComEd::helper::Array::sptr m_helperCellColors;
-    ::fwComEd::helper::Array::sptr m_helperPointNormals;
-    ::fwComEd::helper::Array::sptr m_helperCellNormals;
-
-};
-
-
-} // namespace helper
-
-} // namespace fwData
-
-#endif // _FWCOMED_HELPER_MESH_HPP_
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/MsgHelper.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/MsgHelper.hpp
deleted file mode 100644
index 0cc0171..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/MsgHelper.hpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_HELPER_MSGHELPER_HPP_
-#define _FWCOMED_HELPER_MSGHELPER_HPP_
-
-
-#include <fwServices/IService.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-/**
- * @class   MsgHelper
- * @brief   This class contains helpers for Messages.
- * 
- * @date    2010.
- */
-class FWCOMED_CLASS_API MsgHelper
-{
-public :
-
-    /**
-     * @brief       Creates associated ObjectMsg for the ::fwData::Object.
-     *
-     * @param[in]   _obj a specific ::fwData::Object.
-     * @return      ObjectMsg associated to the ::fwData::Object.
-     */
-    FWCOMED_API static ::fwServices::ObjectMsg::sptr createAssociatedMsg( ::fwData::Object::csptr _obj);
-
-    /**
-     * @brief       Returns associated ObjectMsg type for the ::fwData::Object.
-     *
-     * @param[in]   _obj a specific ::fwData::Object.
-     * @return      a std::string with the ObjectMsg type associated to the ::fwData::Object.
-     */
-    FWCOMED_API static const std::string getAssociatedMsgType( ::fwData::Object::csptr _obj);
-};
-
-} // helper
-} // fwComEd
-
-#endif /* _FWCOMED_HELPER_MSGHELPER_HPP_ */
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Namespace.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Namespace.hpp
deleted file mode 100644
index 40a6fdc..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWCOMEDHELPERNAMESPACE_HPP_
-#define FWCOMEDHELPERNAMESPACE_HPP_
-
-namespace fwComEd
-{
-/**
- * @brief       This namespace fwComEd::helper contains several helpers for using data like Image, Composite, Message.
- * @namespace   fwComEd::helper
- * 
- * @date        2009-2010.
- *
- */
-namespace helper
-{
-}
-
-}
-#endif /* FWCOMEDHELPERNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/SeriesDB.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/SeriesDB.hpp
deleted file mode 100644
index 877e980..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/SeriesDB.hpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_HELPER_SERIESDB_HPP__
-#define __FWCOMED_HELPER_SERIESDB_HPP__
-
-#include <fwServices/IService.hpp>
-
-#include <fwMedData/SeriesDB.hpp>
-
-#include "fwComEd/export.hpp"
-#include "fwComEd/SeriesDBMsg.hpp"
-
-
-
-namespace fwComEd
-{
-namespace helper
-{
-
-/**
- * @brief Defines an helper to modify an ::fwMedData::SeriesDB and create in parallel the message to announce this modification.
- * @class  SeriesDB
- * @date  2007-20013.
- */
-class FWCOMED_CLASS_API SeriesDB
-{
-
-public :
-
-    /// Constructor. Initialize parameters.
-    FWCOMED_API SeriesDB( ::fwMedData::SeriesDB::wptr seriesDB );
-
-    /// Destrucotr. Do nothing.
-    FWCOMED_API ~SeriesDB();
-
-    /**
-     * @brief Add a Series in the SeriesDB.
-     * @param[in] newSeries object to add in the SeriesDB
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void add( ::fwMedData::Series::sptr newSeries );
-
-    /**
-     * @brief Remove a Series in the SeriesDB.
-     * @param[in] oldSeries object to remove from the SeriesDB.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void remove( ::fwMedData::Series::sptr oldSeries );
-
-    /**
-     * @brief Clear all series in the SeriesDB.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void clear();
-
-    /**
-     * @brief Merge seriesDBIn all series from seriesDBIn to the SeriesDB.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void merge(::fwMedData::SeriesDB::sptr seriesDBIn);
-
-    /// Send the message of modification
-    FWCOMED_API void notify( ::fwServices::IService::sptr serviceSource, bool notifySource = false );
-
-private :
-
-    ::fwComEd::SeriesDBMsg::sptr m_seriesDBMsg;
-    ::fwMedData::SeriesDB::wptr m_seriesDB;
-};
-
-} // namespace helper
-} // namespace fwComEd
-
-#endif // __FWCOMED_HELPER_SERIESDB_HPP__
diff --git a/SrcLib/core/fwComEd/include/fwComEd/helper/Vector.hpp b/SrcLib/core/fwComEd/include/fwComEd/helper/Vector.hpp
deleted file mode 100644
index 7724720..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/helper/Vector.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_HELPER_VECTOR_HPP__
-#define __FWCOMED_HELPER_VECTOR_HPP__
-
-#include <fwServices/IService.hpp>
-
-#include <fwData/Vector.hpp>
-
-#include "fwComEd/export.hpp"
-#include "fwComEd/VectorMsg.hpp"
-
-
-
-namespace fwComEd
-{
-namespace helper
-{
-
-/**
- * @brief   Defines an helper to modify an ::fwData::Vector and create in parallel the message to announce this modification.
- * @class  Vector
- * 
- * @date    2007-20013.
- */
-class FWCOMED_CLASS_API Vector
-{
-
-public :
-
-    /// Constructor. Initialize parameters.
-    FWCOMED_API Vector( ::fwData::Vector::wptr vector );
-
-    /// Destrucotr. Do nothing.
-    FWCOMED_API ~Vector();
-
-    /**
-     * @brief Add an object in the vector.
-     * @param[in] _newObject    object to add in the vector
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void add( ::fwData::Object::sptr _newObject );
-
-    /**
-     * @brief Remove an object in the vector.
-     * @param[in] _oldObject object to remove from the vector.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void remove( ::fwData::Object::sptr _oldObject );
-
-    /**
-     * @brief Clear all objects in the vector.
-     *
-     * Prepare the message to announce the modification.
-     */
-    FWCOMED_API void clear();
-
-    /// Send the message of modification
-    FWCOMED_API void notify( ::fwServices::IService::sptr _serviceSource, bool notifySource=false );
-
-private :
-
-    ::fwComEd::VectorMsg::sptr m_vectorMsg;
-    ::fwData::Vector::wptr m_vector;
-};
-
-} // namespace helper
-} // namespace fwComEd
-
-#endif // __FWCOMED_HELPER_VECTOR_HPP__
diff --git a/SrcLib/core/fwComEd/include/fwComEd/parser/Composite.hpp b/SrcLib/core/fwComEd/include/fwComEd/parser/Composite.hpp
deleted file mode 100644
index f6adc79..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/parser/Composite.hpp
+++ /dev/null
@@ -1,79 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PARSER_COMPOSITE_HPP_
-#define _FWCOMED_PARSER_COMPOSITE_HPP_
-
-#include <fwTools/Failed.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwServices/IXMLParser.hpp>
-
-#include <fwServices/AppConfigManager.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-namespace parser
-{
-/**
- * @brief   Specific service for the construction of a Composite and its associated services from an XML-based description.
- * @class   Composite
- * 
-
- * @date    2007-2009
- * @see     ::fwServices::IXMLParser
- */
-class FWCOMED_CLASS_API Composite : public ::fwServices::IXMLParser
-{
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (Composite)(::fwServices::IXMLParser) ) ;
-
-    /**
-     * @brief   Constructor : does nothing.
-     */
-    Composite( ) {};
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    virtual ~Composite() {};
-
-    FWCOMED_API void createConfig( ::fwTools::Object::sptr _obj );
-
-    FWCOMED_API void startConfig();
-
-    FWCOMED_API void updateConfig();
-
-    FWCOMED_API void stopConfig();
-
-    FWCOMED_API void destroyConfig();
-
-protected:
-
-    /**
-     * @brief   Updating method : create composite object.
-     *
-     * Parse the composite configuration element to configure and add its objects.
-     */
-    FWCOMED_API virtual void updating( ) throw(fwTools::Failed) ;
-
-private :
-
-    /// To verify some conditions in xml file
-    bool refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement );
-
-    std::vector< ::fwServices::AppConfigManager::sptr > m_ctmContainer;
-};
-
-} //namespace parser
-} //namespace fwcomEd
-
-#endif /* _FWCOMED_PARSER_COMPOSITE_HPP_ */
diff --git a/SrcLib/core/fwComEd/include/fwComEd/parser/GenericField.hpp b/SrcLib/core/fwComEd/include/fwComEd/parser/GenericField.hpp
deleted file mode 100644
index 2c38322..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/parser/GenericField.hpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PARSER_GENERICFIELD_HPP_
-#define _FWCOMED_PARSER_GENERICFIELD_HPP_
-
-#include <fwTools/Failed.hpp>
-
-#include <fwTools/Object.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwServices/IXMLParser.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-namespace parser
-{
-/**
- * @brief   Specific service for the construction of a GenericField and its associated services from an XML-based description.
- * @class   TransformationMatrix3D
- * 
-
- * @date    2007-2009
- * @see     ::fwServices::IXMLParser
- */
-class FWCOMED_CLASS_API GenericField  : public ::fwServices::IXMLParser
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (GenericField)(::fwServices::IXMLParser) ) ;
-
-    /// Constructor : does nothing.
-    GenericField() {};
-
-    /// Destructor : does nothing.
-    virtual ~GenericField() {};
-
-    FWCOMED_API void createConfig( ::fwTools::Object::sptr _obj );
-protected:
-
-    /**
-     * @brief Updating method : create the process object.
-     *
-     * Parse the configuration element to configure inputs and outputs and add
-     * them in the process object.
-     */
-    FWCOMED_API virtual void updating( ) throw(fwTools::Failed) ;
-
-};
-
-class BooleanParser : public GenericField{
-public:
-    fwCoreServiceClassDefinitionsMacro ( (BooleanParser)(::fwServices::IXMLParser) ) ;
-};
-class IntegerParser : public GenericField{
-public:
-    fwCoreServiceClassDefinitionsMacro ( (IntegerParser)(::fwServices::IXMLParser) ) ;
-};
-class FloatParser : public GenericField{
-public:
-        fwCoreServiceClassDefinitionsMacro ( (FloatParser)(::fwServices::IXMLParser) ) ;
-};
-class StringParser : public GenericField{
-public:
-    fwCoreServiceClassDefinitionsMacro ( (StringParser)(::fwServices::IXMLParser) ) ;
-};
-
-} //namespace parser
-} //namespace fwComEd
-
-#endif // _FWCOMED_PARSER_GENERICFIELD_HPP_
diff --git a/SrcLib/core/fwComEd/include/fwComEd/parser/List.hpp b/SrcLib/core/fwComEd/include/fwComEd/parser/List.hpp
deleted file mode 100644
index 26e13b9..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/parser/List.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PARSER_LIST_HPP_
-#define _FWCOMED_PARSER_LIST_HPP_
-
-#include <fwTools/Failed.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwServices/IXMLParser.hpp>
-
-#include <fwServices/AppConfigManager.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-namespace parser
-{
-/**
- * @brief   Specific service for the construction of a List and its associated services from an XML-based description.
- * @class   List
- * 
-
- * @date    2007-2009
- * @see     ::fwServices::IXMLParser
- */
-class FWCOMED_CLASS_API List : public ::fwServices::IXMLParser
-{
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (List)(::fwServices::IXMLParser) ) ;
-
-    /**
-     * @brief   Constructor : does nothing.
-     */
-    List( ) {};
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    virtual ~List() {};
-
-    FWCOMED_API void createConfig( ::fwTools::Object::sptr _obj );
-
-    FWCOMED_API void startConfig();
-
-    FWCOMED_API void updateConfig();
-
-    FWCOMED_API void stopConfig();
-
-    FWCOMED_API void destroyConfig();
-
-protected:
-
-    /**
-     * @brief   Updating method : create List object.
-     *
-     * Parse the List configuration element to configure and add its objects.
-     */
-    FWCOMED_API virtual void updating( ) throw(fwTools::Failed) ;
-
-private :
-
-    /// To verify some conditions in xml file
-    bool refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement );
-
-    std::vector< ::fwServices::AppConfigManager::sptr > m_ctmContainer;
-};
-
-} //namespace parser
-} //namespace fwcomEd
-
-#endif /* _FWCOMED_PARSER_LIST_HPP_ */
-
diff --git a/SrcLib/core/fwComEd/include/fwComEd/parser/Object.hpp b/SrcLib/core/fwComEd/include/fwComEd/parser/Object.hpp
deleted file mode 100644
index 6c51c5a..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/parser/Object.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PARSER_OBJECT_HPP_
-#define _FWCOMED_PARSER_OBJECT_HPP_
-
-#include <fwTools/Object.hpp>
-#include <fwServices/IXMLParser.hpp>
-#include <fwServices/AppConfigManager.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-namespace parser
-{
-
-/**
- * @class Object
- * @brief Specific ::fwTools::Object parser. Does nothing as no IService method is specialized: IXMLParser base class methods are therefore considered.
- *
- * @note This implementation is only written to avoid the mixing both the service type IXMLParser and the ::fwTools::Object implementation (for homogeneity).
- * 
- */
-class FWCOMED_CLASS_API Object : public ::fwServices::IXMLParser
-{
-public :
-    fwCoreServiceClassDefinitionsMacro ( (Object)(::fwServices::IXMLParser) ) ;
-
-    FWCOMED_API Object( ) ;
-    FWCOMED_API virtual ~Object() ;
-
-    FWCOMED_API void createConfig( ::fwTools::Object::sptr _obj );
-    FWCOMED_API void startConfig();
-    FWCOMED_API void updateConfig();
-    FWCOMED_API void stopConfig();
-    FWCOMED_API void destroyConfig();
-
-protected :
-
-    bool refObjectValidator( ::fwRuntime::ConfigurationElement::csptr _cfgElement );
-    void updating() throw( fwTools::Failed );
-
-    std::vector< ::fwServices::AppConfigManager::sptr > m_ctmContainer;
-};
-
-} //namespace parser
-} //namespace fwComEd
-
-#endif /* _FWCOMED_PARSER_OBJECT_HPP_ */
diff --git a/SrcLib/core/fwComEd/include/fwComEd/parser/TransformationMatrix3D.hpp b/SrcLib/core/fwComEd/include/fwComEd/parser/TransformationMatrix3D.hpp
deleted file mode 100644
index b2ab6e5..0000000
--- a/SrcLib/core/fwComEd/include/fwComEd/parser/TransformationMatrix3D.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_PARSER_TRANSFORMATIONMATRIX3D_HPP_
-#define _FWCOMED_PARSER_TRANSFORMATIONMATRIX3D_HPP_
-
-#include <fwTools/Failed.hpp>
-
-#include <fwTools/Object.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwServices/IXMLParser.hpp>
-
-#include "fwComEd/export.hpp"
-
-namespace fwComEd
-{
-namespace parser
-{
-/**
- * @brief   Specific service for the construction of a TransformationMatrix3D and its associated services from an XML-based description.
- * @class   TransformationMatrix3D
- * 
-
- * @date    2007-2009
- * @see     ::fwServices::IXMLParser
- */
-class FWCOMED_CLASS_API TransformationMatrix3D : public ::fwServices::IXMLParser
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (TransformationMatrix3D)(::fwServices::IXMLParser) ) ;
-
-    /// Constructor : does nothing.
-    TransformationMatrix3D() {};
-
-    /// Destructor : does nothing.
-    virtual ~TransformationMatrix3D() {};
-
-    FWCOMED_API void createConfig( ::fwTools::Object::sptr _obj );
-protected:
-
-    /**
-     * @brief Updating method : create the process object.
-     *
-     * Parse the configuration element to configure inputs and outputs and add
-     * them in the process object.
-     */
-    FWCOMED_API virtual void updating( ) throw(fwTools::Failed) ;
-
-};
-
-} //namespace parser
-} //namespace fwComEd
-
-#endif // _FWCOMED_PARSER_TRANSFORMATIONMATRIX3D_HPP_
diff --git a/SrcLib/core/fwComEd/src/fwComEd/BooleanMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/BooleanMsg.cpp
deleted file mode 100644
index 1aaa611..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/BooleanMsg.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/BooleanMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::BooleanMsg );
-
-namespace fwComEd
-{
-
-
-//-----------------------------------------------------------------------------
-
-std::string BooleanMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-BooleanMsg::BooleanMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-BooleanMsg::~BooleanMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/CameraMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/CameraMsg.cpp
deleted file mode 100644
index 4bc1b33..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/CameraMsg.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/CameraMsg.hpp"
-
-//fwServicesMessageRegisterMacro( ::fwComEd::CameraMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string CameraMsg::NEW_CAMERA="NEW_CAMERA";
-std::string CameraMsg::CAMERA_MOVING="CAMERA_MOVING";
-
-//-----------------------------------------------------------------------------
-
-CameraMsg::CameraMsg(::fwServices::ObjectMsg::Key key)
-{
-    m_positionCamera[0] = 0.f;
-    m_positionCamera[1] = 0.f;
-    m_positionCamera[2] = 0.f;
-
-    m_focalCamera[0] = 0.f;
-    m_focalCamera[1] = 0.f;
-    m_focalCamera[2] = 0.f;
-    m_focalCamera[3] = 0.f;
-
-    m_viewUpCamera[0] = 0.f;
-    m_viewUpCamera[1] = 0.f;
-    m_viewUpCamera[2] = 0.f;
-}
-
-//-----------------------------------------------------------------------------
-
-CameraMsg::~CameraMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void CameraMsg::info(std::ostream &_sstream ) const
-{
-    this->ObjectMsg::info(_sstream) ;
-}
-
-//-----------------------------------------------------------------------------
-
-void CameraMsg::setPositionCamera( const double _positionValue[3]  )
-{
-    m_positionCamera[0] = _positionValue[0];
-    m_positionCamera[1] = _positionValue[1];
-    m_positionCamera[2] = _positionValue[2];
-}
-
-//-----------------------------------------------------------------------------
-
-const double* CameraMsg::getPositionCamera( void )const
-{
-    return m_positionCamera ;
-}
-
-//-----------------------------------------------------------------------------
-
-void CameraMsg::setFocalCamera( const double _focalValue[4] )
-{
-    m_focalCamera[0] = _focalValue[0];
-    m_focalCamera[1] = _focalValue[1];
-    m_focalCamera[2] = _focalValue[2];
-    m_focalCamera[3] = _focalValue[3];
-}
-
-//-----------------------------------------------------------------------------
-
-const double* CameraMsg::getFocalCamera( void )const
-{
-    return m_focalCamera ;
-}
-
-//-----------------------------------------------------------------------------
-
-void CameraMsg::setViewUpCamera( const double _viewUpValue[3] )
-{
-    m_viewUpCamera[0] = _viewUpValue[0];
-    m_viewUpCamera[1] = _viewUpValue[1];
-    m_viewUpCamera[2] = _viewUpValue[2];
-}
-
-//-----------------------------------------------------------------------------
-
-const double* CameraMsg::getViewUpCamera( void )const
-{
-    return m_viewUpCamera;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ColorMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ColorMsg.cpp
deleted file mode 100644
index 36969f8..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ColorMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/ColorMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::ColorMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string ColorMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-ColorMsg::ColorMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ColorMsg::~ColorMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/CompositeMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/CompositeMsg.cpp
deleted file mode 100644
index e37c6f5..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/CompositeMsg.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/spyLog.hpp>
-
-#include <fwData/Object.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/CompositeMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::CompositeMsg );
-
-namespace fwComEd
-{
-
-std::string CompositeMsg::ADDED_KEYS = "ADDED_KEYS";
-std::string CompositeMsg::REMOVED_KEYS = "REMOVED_KEYS";
-std::string CompositeMsg::CHANGED_KEYS = "CHANGED_KEYS";
-
-//-------------------------------------------------------------------------
-
-CompositeMsg::CompositeMsg(::fwServices::ObjectMsg::Key key)
-{
-    m_removedKeys    = ::fwData::Composite::New();
-    m_addedKeys      = ::fwData::Composite::New();
-    m_oldChangedKeys = ::fwData::Composite::New();
-    m_newChangedKeys = ::fwData::Composite::New();
-}
-
-//-------------------------------------------------------------------------
-
-CompositeMsg::~CompositeMsg() throw()
-{}
-
-//-------------------------------------------------------------------------
-
-void CompositeMsg::appendAddedKey( std::string _compositeKey, ::fwData::Object::sptr _pNewObject )
-{
-    if( ! this->hasEvent( ADDED_KEYS ) )
-    {
-        this->addEvent( ADDED_KEYS, m_addedKeys );
-    }
-
-    SLM_ASSERT("This composite key is already register", m_addedKeys->find(_compositeKey) == m_addedKeys->end() );
-
-    m_addedKeys->getContainer()[ _compositeKey ] = _pNewObject;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Composite::sptr CompositeMsg::getAddedKeys() const
-{
-    return m_addedKeys;
-}
-
-//-----------------------------------------------------------------------------
-
-void CompositeMsg::appendRemovedKey( std::string _compositeKey, ::fwData::Object::sptr _pOldObject )
-{
-    if( ! this->hasEvent( REMOVED_KEYS ) )
-    {
-        this->addEvent( REMOVED_KEYS, m_removedKeys );
-    }
-
-    SLM_ASSERT("This composite key is already register", m_removedKeys->find(_compositeKey) == m_removedKeys->end() );
-
-    m_removedKeys->getContainer()[ _compositeKey ] = _pOldObject;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Composite::sptr CompositeMsg::getRemovedKeys() const
-{
-    return m_removedKeys;
-}
-
-//-----------------------------------------------------------------------------
-
-void CompositeMsg::appendChangedKey( std::string _compositeKey, ::fwData::Object::sptr _pOldObject, ::fwData::Object::sptr _pNewObject )
-{
-    if( ! this->hasEvent( CHANGED_KEYS ) )
-    {
-        this->addEvent( CHANGED_KEYS, m_oldChangedKeys );
-    }
-
-    SLM_ASSERT("This composite key is already register", m_oldChangedKeys->find(_compositeKey) == m_oldChangedKeys->end() );
-
-    m_oldChangedKeys->getContainer()[ _compositeKey ] = _pOldObject;
-    m_newChangedKeys->getContainer()[ _compositeKey ] = _pNewObject;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Composite::sptr CompositeMsg::getOldChangedKeys() const
-{
-    return m_oldChangedKeys;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Composite::sptr CompositeMsg::getNewChangedKeys() const
-{
-    return m_newChangedKeys;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace op
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/Dictionary.cpp b/SrcLib/core/fwComEd/src/fwComEd/Dictionary.cpp
deleted file mode 100644
index 4947abe..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/Dictionary.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwComEd/Dictionary.hpp"
-
-namespace fwComEd
-{
-
-const std::string Dictionary::DATA_IS_LOCKED                 ( "DATA_IS_LOCKED" );
-
-const std::string Dictionary::position                       ( "position" );
-
-const std::string Dictionary::localGui                       ( "Local GUI" );
-const std::string Dictionary::m_axialSliceCountId            ( "Axial Slice Count" );
-const std::string Dictionary::m_frontalSliceCountId          ( "Frontal Slice Count" );
-const std::string Dictionary::m_sagittalSliceCountId         ( "Sagittal Slice Count" );
-const std::string Dictionary::m_axialSliceIndexId            ( "Axial Slice Index" );
-const std::string Dictionary::m_frontalSliceIndexId          ( "Frontal Slice Index" );
-const std::string Dictionary::m_sagittalSliceIndexId         ( "Sagittal Slice Index" );
-const std::string Dictionary::m_transferFunctionCompositeId  ( "m_transferFunctionCompositeId" );
-const std::string Dictionary::m_imageLandmarksId             ("m_imageLandmarksId");
-const std::string Dictionary::m_imageDistancesId             ("m_imageDistancesId");
-const std::string Dictionary::m_commentId                    ("m_commentId");
-const std::string Dictionary::m_labelId                      ("m_labelId");
-const std::string Dictionary::m_colorId                      ("m_colorId");
-const std::string Dictionary::m_relatedServiceId             ("m_relatedServiceId");
-const std::string Dictionary::m_imageLabelId                 ("m_imageLabelId");
-const std::string Dictionary::m_acquisitionCountId           ("m_acquisitionCountId");
-
-const std::string Dictionary::m_globalMatrixId               ("Global Matrix");
-const std::string Dictionary::m_errorId                      ("Error");
-
-const std::string Dictionary::m_roi                          ( "ROI" );
-
-}
diff --git a/SrcLib/core/fwComEd/src/fwComEd/DictionaryOrganMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/DictionaryOrganMsg.cpp
deleted file mode 100644
index 8827f1c..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/DictionaryOrganMsg.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/DictionaryOrganMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::DictionaryOrganMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string DictionaryOrganMsg::ROI4ORGAN_EXP_IS_MODIFIED  = "ROI4ORGAN_EXP_IS_MODIFIED" ;
-std::string DictionaryOrganMsg::ROI4ORGAN_NODE_IS_MODIFIED = "ROI4ORGAN_NODE_IS_MODIFIED" ;
-std::string DictionaryOrganMsg::MASK_DATA_NODE_IS_MODIFIED = "MASK_DATA_NODE_IS_MODIFIED" ;
-std::string DictionaryOrganMsg::MESH_DATA_NODE_IS_MODIFIED = "MESH_DATA_NODE_IS_MODIFIED" ;
-
-//-----------------------------------------------------------------------------
-
-DictionaryOrganMsg::DictionaryOrganMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-DictionaryOrganMsg::~DictionaryOrganMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/FloatMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/FloatMsg.cpp
deleted file mode 100644
index c5b98ae..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/FloatMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/FloatMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::FloatMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string FloatMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-FloatMsg::FloatMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-FloatMsg::~FloatMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/GraphMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/GraphMsg.cpp
deleted file mode 100644
index e7a39e4..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/GraphMsg.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/GraphMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::GraphMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string GraphMsg::NEW_GRAPH            = "NEW_GRAPH";
-std::string GraphMsg::CLEANING_GRAPH       = "CLEANING_GRAPH";
-std::string GraphMsg::ADD_NODE             = "ADD_NODE";
-std::string GraphMsg::REMOVE_NODE          = "REMOVE_NODE";
-std::string GraphMsg::REMOVING_NODE        = "REMOVING_NODE";
-std::string GraphMsg::ADD_EDGE             = "ADD_EDGE";
-std::string GraphMsg::ADDING_EDGE          = "ADDING_EDGE";
-std::string GraphMsg::REMOVE_EDGE          = "REMOVE_EDGE";
-std::string GraphMsg::SELECTED_NODE        = "SELECTED_NODE";
-std::string GraphMsg::UNSELECTED_NODE      = "UNSELECTED_NODE";
-std::string GraphMsg::SELECTED_OPERATOR    = "SELECTED_OPERATOR";
-std::string GraphMsg::EXECUTE_GRAPH        = "EXECUTE_GRAPH";
-std::string GraphMsg::CANCEL_EXECUTE_GRAPH = "CANCEL_EXECUTE_GRAPH";
-std::string GraphMsg::CHANGED_NODE_STATE   = "CHANGED_NODE_STATE";
-std::string GraphMsg::NODE_PROCESS_ERROR   = "NODE_PROCESS_ERROR";
-std::string GraphMsg::NODE_PROCESS_WARN    = "NODE_PROCESS_WARN";
-std::string GraphMsg::NODE_PROCESS_DONE    = "NODE_PROCESS_DONE";
-std::string GraphMsg::NODE_PROCESS         = "NODE_PROCESS";
-
-//-----------------------------------------------------------------------------
-
-GraphMsg::GraphMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-GraphMsg::~GraphMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-
-void GraphMsg::addedNode( ::fwData::Node::csptr node )
-{
-    addEvent( GraphMsg::ADD_NODE , node );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Node::csptr GraphMsg::getAddedNode() const
-{
-    return ::fwData::Node::dynamicConstCast( getDataInfo( GraphMsg::ADD_NODE ) );
-}
-
-//-----------------------------------------------------------------------------
-
-void GraphMsg::removedNode( ::fwData::Node::csptr node )
-{
-    addEvent( GraphMsg::REMOVE_NODE , node );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Node::csptr GraphMsg::getRemovedNode() const
-{
-    return ::fwData::Node::dynamicConstCast( getDataInfo( GraphMsg::REMOVE_NODE ) );
-}
-
-//-----------------------------------------------------------------------------
-
-void GraphMsg::removingNode( ::fwData::Node::csptr node )
-{
-    addEvent( GraphMsg::REMOVING_NODE , node );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Node::csptr GraphMsg::getRemovingNode() const
-{
-    return ::fwData::Node::dynamicConstCast( getDataInfo( GraphMsg::REMOVING_NODE ) );
-}
-
-//-----------------------------------------------------------------------------
-
-void GraphMsg::addingEdge( ::fwData::Node::csptr nodeFrom, ::fwData::Node::csptr nodeTo, std::string outputPortId, std::string inputPortId )
-{
-    ::fwData::Composite::sptr edgeInfo = ::fwData::Composite::New();
-    (*edgeInfo)["nodeFrom"] = ::fwData::Node::constCast( nodeFrom );
-    (*edgeInfo)["nodeTo"] = ::fwData::Node::constCast( nodeTo );
-    (*edgeInfo)["outputPortId"] = ::fwData::String::New( outputPortId );
-    (*edgeInfo)["inputPortId"] = ::fwData::String::New( inputPortId );
-    addEvent( GraphMsg::ADDING_EDGE , edgeInfo );
-}
-
-//-----------------------------------------------------------------------------
-
-::boost::tuple< ::fwData::Node::csptr, ::fwData::Node::csptr, std::string, std::string > GraphMsg::getAddingEdge() const
-{
-    ::fwData::Composite::csptr edgeInfoConst = ::fwData::Composite::dynamicConstCast( getDataInfo( GraphMsg::ADDING_EDGE ) );
-    ::fwData::Composite::sptr edgeInfo = ::fwData::Composite::constCast( edgeInfoConst );
-
-    ::fwData::Node::csptr nodeFrom = ::fwData::Node::dynamicConstCast( (*edgeInfo)["nodeFrom"] );
-    ::fwData::Node::csptr nodeTo = ::fwData::Node::dynamicConstCast( (*edgeInfo)["nodeTo"] );
-    std::string outputPortId = ::fwData::String::dynamicConstCast( (*edgeInfo)["outputPortId"] )->value();
-    std::string inputPortId = ::fwData::String::dynamicConstCast( (*edgeInfo)["inputPortId"] )->value();
-
-    return ::boost::make_tuple( nodeFrom, nodeTo, outputPortId, inputPortId);
-}
-
-//-----------------------------------------------------------------------------
-
-void GraphMsg::selectedNode( ::fwData::Node::csptr node )
-{
-    addEvent( GraphMsg::SELECTED_NODE , node );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Node::csptr GraphMsg::getSelectedNode() const
-{
-    return ::fwData::Node::dynamicConstCast( getDataInfo( GraphMsg::SELECTED_NODE ) );
-}
-
-//-----------------------------------------------------------------------------
-
-void GraphMsg::unselectedNode( ::fwData::Node::csptr node )
-{
-    addEvent( GraphMsg::UNSELECTED_NODE , node );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Node::csptr GraphMsg::getUnselectedNode() const
-{
-    return ::fwData::Node::dynamicConstCast( getDataInfo( GraphMsg::UNSELECTED_NODE ) );
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/HistorgramMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/HistorgramMsg.cpp
deleted file mode 100644
index b3b858b..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/HistorgramMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/HistogramMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::HistogramMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string HistogramMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-HistogramMsg::HistogramMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-HistogramMsg::~HistogramMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ImageMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ImageMsg.cpp
deleted file mode 100644
index f424773..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ImageMsg.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/ImageMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::ImageMsg );
-
-namespace fwComEd
-{
-
-std::string ImageMsg::NEW_IMAGE = "NEW_IMAGE";
-std::string ImageMsg::BUFFER = "BUFFER";
-std::string ImageMsg::MODIFIED = "MODIFIED";
-std::string ImageMsg::DIMENSION = "DIMENSION";
-std::string ImageMsg::SPACING = "SPACING";
-std::string ImageMsg::REGION = "REGION";
-std::string ImageMsg::PIXELTYPE = "PIXELTYPE";
-std::string ImageMsg::LANDMARK = "LANDMARK";
-std::string ImageMsg::DISTANCE = "DISTANCE";
-std::string ImageMsg::NEW_DISTANCE = "NEW_DISTANCE";
-std::string ImageMsg::DELETE_DISTANCE = "DELETE_DISTANCE";
-std::string ImageMsg::SLICE_INDEX = "SLICE_INDEX";
-std::string ImageMsg::ACTIVATE_SYNC_CROSS = "ACTIVATE_SYNC_CROSS";
-std::string ImageMsg::INACTIVATE_SYNC_CROSS = "INACTIVATE_SYNC_CROSS";
-std::string ImageMsg::CHANGE_SLICE_TYPE = "CHANGE_SLICE_TYPE";
-std::string ImageMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-std::string ImageMsg::TRANSPARENCY = "TRANSPARENCY";
-std::string ImageMsg::VISIBILITY = "VISIBILITY";
-
-//-----------------------------------------------------------------------------
-
-ImageMsg::ImageMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ImageMsg::~ImageMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ImageMsg::setSliceIndex(::fwData::Integer::sptr a, ::fwData::Integer::sptr f, ::fwData::Integer::sptr s, ::fwData::Object::sptr _pDataInfo )
-{
-    this->addEvent( ::fwComEd::ImageMsg::SLICE_INDEX, _pDataInfo );
-    m_axialIndex = a;
-    m_frontalIndex = f;
-    m_sagittalIndex = s;
-}
-
-//-----------------------------------------------------------------------------
-
-void ImageMsg::getSliceIndex(::fwData::Integer::sptr &a, ::fwData::Integer::sptr &f, ::fwData::Integer::sptr &s) const
-{
-    SLM_ASSERT( "SLICE_INDEX Event not found in msg", this->hasEvent( ::fwComEd::ImageMsg::SLICE_INDEX ));
-    a->setValue( m_axialIndex->getValue() );
-    f->setValue( m_frontalIndex->getValue() );
-    s->setValue( m_sagittalIndex->getValue() );
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/IntegerMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/IntegerMsg.cpp
deleted file mode 100644
index 6eaa4f9..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/IntegerMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/IntegerMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::IntegerMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string IntegerMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-IntegerMsg::IntegerMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-IntegerMsg::~IntegerMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/InteractionMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/InteractionMsg.cpp
deleted file mode 100644
index be005a9..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/InteractionMsg.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <limits>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/InteractionMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::InteractionMsg );
-
-namespace fwComEd
-{
-
-std::string InteractionMsg::MOUSE_LEFT_UP            = "MOUSE_LEFT_UP";
-std::string InteractionMsg::MOUSE_RIGHT_UP           = "MOUSE_RIGHT_UP";
-std::string InteractionMsg::MOUSE_MIDDLE_UP          = "MOUSE_MIDDLE_UP";
-std::string InteractionMsg::MOUSE_WHEELFORWARD_UP    = "MOUSE_WHEELFORWARD_UP";
-std::string InteractionMsg::MOUSE_WHEELBACKWARD_UP   = "MOUSE_WHEELBACKWARD_UP";
-std::string InteractionMsg::MOUSE_LEFT_DOWN          = "MOUSE_LEFT_DOWN";
-std::string InteractionMsg::MOUSE_RIGHT_DOWN         = "MOUSE_RIGHT_DOWN";
-std::string InteractionMsg::MOUSE_MIDDLE_DOWN        = "MOUSE_MIDDLE_DOWN";
-std::string InteractionMsg::MOUSE_WHEELFORWARD_DOWN  = "MOUSE_WHEELFORWARD_DOWN";
-std::string InteractionMsg::MOUSE_WHEELBACKWARD_DOWN = "MOUSE_WHEELBACKWARD_DOWN";
-std::string InteractionMsg::MOUSE_MOVE               = "MOUSE_MOVE";
-
-//-----------------------------------------------------------------------------
-
-InteractionMsg::InteractionMsg(::fwServices::ObjectMsg::Key key)
-{
-    m_eventPoint = ::fwData::Point::New();
-    m_modifiersStatus = NONE;
-}
-
-//-----------------------------------------------------------------------------
-
-InteractionMsg::~InteractionMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void InteractionMsg::setEvent(std::string event)
-{
-    SLM_ASSERT("InteractionMsg cannot handle several events in the same message",
-            m_eventId2DataInfo.size()==0 );
-    addEvent(event);
-}
-
-//-----------------------------------------------------------------------------
-
-void InteractionMsg::setModifiersStatus(Modifiers k, bool state)
-{
-    if (state)
-    {
-        m_modifiersStatus = static_cast<unsigned char>(m_modifiersStatus | k);
-    }
-    else
-    {
-        m_modifiersStatus = static_cast<unsigned char>( m_modifiersStatus & (std::numeric_limits<unsigned char>::max() - k));
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-bool InteractionMsg::getModifiersStatus(Modifiers k) const
-{
-    return m_modifiersStatus & k;
-}
-
-//-----------------------------------------------------------------------------
-
-void InteractionMsg::setEventPoint(::fwData::Point::csptr point)
-{
-    SLM_ASSERT("Null point pointer", point);
-    m_eventPoint = ::fwData::Object::copy(point);
-}
-
-//-----------------------------------------------------------------------------
-
-void InteractionMsg::setEventPoint(PointCoordType x, PointCoordType y, PointCoordType z)
-{
-    ::fwData::Point::PointCoordArrayType &coords = m_eventPoint->getRefCoord();
-    coords[0] = x;
-    coords[1] = y;
-    coords[2] = z;
-}
-
-
-//-----------------------------------------------------------------------------
-::fwData::Point::csptr InteractionMsg::getEventPoint() const
-{
-    return m_eventPoint;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/LocationMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/LocationMsg.cpp
deleted file mode 100644
index 9a265bc..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/LocationMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/LocationMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::LocationMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string LocationMsg::LOCATION_IS_MODIFIED = "LOCATION_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-LocationMsg::LocationMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-LocationMsg::~LocationMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/MaterialMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/MaterialMsg.cpp
deleted file mode 100644
index f7e546b..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/MaterialMsg.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/MaterialMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::MaterialMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-std::string MaterialMsg::MATERIAL_IS_MODIFIED = "MATERIAL_IS_MODIFIED";
-//-----------------------------------------------------------------------------
-
-MaterialMsg::MaterialMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-MaterialMsg::~MaterialMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/MeshMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/MeshMsg.cpp
deleted file mode 100644
index 70a41ad..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/MeshMsg.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/MeshMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::MeshMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string MeshMsg::NEW_MESH              = "NEW_MESH";
-std::string MeshMsg::VERTEX_MODIFIED       = "VERTEX_MODIFIED";
-std::string MeshMsg::POINT_COLORS_MODIFIED = "POINT_COLORS_MODIFIED";
-std::string MeshMsg::CELL_COLORS_MODIFIED  = "CELL_COLORS_MODIFIED";
-std::string MeshMsg::POINT_NORMALS_MODIFIED = "POINT_NORMALS_MODIFIED";
-std::string MeshMsg::CELL_NORMALS_MODIFIED  = "CELL_NORMALS_MODIFIED";
-
-
-//-----------------------------------------------------------------------------
-
-FWCOMED_API MeshMsg::MeshMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-MeshMsg::~MeshMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ModelMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ModelMsg.cpp
deleted file mode 100644
index 505b50a..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ModelMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/ModelMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::ModelMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string ModelMsg::NEW_MODEL = "NEW_MODEL";
-
-//-----------------------------------------------------------------------------
-
-ModelMsg::ModelMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ModelMsg::~ModelMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ModelSeriesMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ModelSeriesMsg.cpp
deleted file mode 100644
index 3a24c0c..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ModelSeriesMsg.cpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "fwComEd/ModelSeriesMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::ModelSeriesMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string ModelSeriesMsg::ADD_RECONSTRUCTION          = "ADD_RECONSTRUCTION";
-std::string ModelSeriesMsg::REMOVED_RECONSTRUCTIONS     = "REMOVED_RECONSTRUCTIONS";
-std::string ModelSeriesMsg::SHOW_RECONSTRUCTIONS        = "ShowReconstructions";
-std::string ModelSeriesMsg::VISIBILITY                  = "VISIBILITY";
-std::string ModelSeriesMsg::NEW_RECONSTRUCTION_SELECTED = "NEW_RECONSTRUCTION_SELECTED";
-
-//-----------------------------------------------------------------------------
-
-ModelSeriesMsg::ModelSeriesMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ModelSeriesMsg::~ModelSeriesMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/PlaneListMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/PlaneListMsg.cpp
deleted file mode 100644
index 79581fb..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/PlaneListMsg.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/PlaneListMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::PlaneListMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string PlaneListMsg::ADD_PLANE            = "PLANE_IS_ADDED";
-std::string PlaneListMsg::REMOVE_PLANE         = "REMOVE_PLANE";
-std::string PlaneListMsg::PLANELIST_VISIBILITY = "PLANELIST_VISIBILITY";
-std::string PlaneListMsg::PLANELIST_MODIFIED   = "PLANELIST_MODIFIED";
-std::string PlaneListMsg::DESELECT_ALL_PLANES  = "DESELECT_ALL_PLANES";
-
-//-----------------------------------------------------------------------------
-
-PlaneListMsg::PlaneListMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-PlaneListMsg::~PlaneListMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/PlaneMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/PlaneMsg.cpp
deleted file mode 100644
index eea0542..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/PlaneMsg.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/PlaneMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::PlaneMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string PlaneMsg::PLANE_MODIFIED          = "PLANE_MODIFIED";
-std::string PlaneMsg::START_PLANE_INTERACTION = "START_PLANE_INTERACTION";
-std::string PlaneMsg::DESELECT_PLANE          = "DESELECT_PLANE";
-std::string PlaneMsg::WAS_SELECTED            = "WAS_SELECTED";
-std::string PlaneMsg::WAS_DESELECTED          = "WAS_DESELECTED";
-
-//-----------------------------------------------------------------------------
-
-PlaneMsg::PlaneMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-PlaneMsg::~PlaneMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/PointListMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/PointListMsg.cpp
deleted file mode 100644
index be9ad2b..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/PointListMsg.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/PointListMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::PointListMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string PointListMsg::ELEMENT_MODIFIED = "ELEMENT_MODIFIED";
-std::string PointListMsg::ELEMENT_ADDED    = "ELEMENT_ADDED";
-std::string PointListMsg::ELEMENT_REMOVED  = "ELEMENT_REMOVED";
-
-//-----------------------------------------------------------------------------
-
-PointListMsg::PointListMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-PointListMsg::~PointListMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/PointMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/PointMsg.cpp
deleted file mode 100644
index 44bdff2..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/PointMsg.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/PointMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::PointMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string PointMsg::VALUE_IS_MODIFIED       = "VALUE_IS_MODIFIED";
-std::string PointMsg::POINT_IS_MODIFIED       = "POINT_IS_MODIFIED";
-std::string PointMsg::START_POINT_INTERACTION = "START_POINT_INTERACTION";
-
-//-----------------------------------------------------------------------------
-
-PointMsg::PointMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-PointMsg::~PointMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ReconstructionMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ReconstructionMsg.cpp
deleted file mode 100644
index d8e4f5b..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ReconstructionMsg.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/ReconstructionMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::ReconstructionMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-std::string ReconstructionMsg::MESH = "MESH";
-std::string ReconstructionMsg::VISIBILITY = "VISIBILITY";
-//-----------------------------------------------------------------------------
-
-ReconstructionMsg::ReconstructionMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ReconstructionMsg::~ReconstructionMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ResectionDBMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ResectionDBMsg.cpp
deleted file mode 100644
index d31742d..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ResectionDBMsg.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/ResectionDBMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::ResectionDBMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string ResectionDBMsg::NEW_RESECTIONDB_SELECTED = "NEW_RESECTIONDB_SELECTED";
-std::string ResectionDBMsg::RESECTIONDB_SELECTED     = "RESECTIONDB_SELECTED";
-std::string ResectionDBMsg::NEW_RESECTION_SELECTED   = "NEW_RESECTION_SELECTED";
-std::string ResectionDBMsg::NEW_SAFE_PART_SELECTED   = "NEW_SAFE_PART_SELECTED";
-std::string ResectionDBMsg::ADD_RESECTION            = "ADD_RESECTION";
-std::string ResectionDBMsg::ADD_SAFE_PART            = "ADD_SAFE_PART";
-std::string ResectionDBMsg::MODIFIED                 = "MODIFIED";
-std::string ResectionDBMsg::RESECTIONDB_INVALIDATED  = "RESECTIONDB_INVALIDATED";
-
-//-----------------------------------------------------------------------------
-
-ResectionDBMsg::ResectionDBMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ResectionDBMsg::~ResectionDBMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/ResectionMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/ResectionMsg.cpp
deleted file mode 100644
index 1a1d238..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/ResectionMsg.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/ResectionMsg.hpp"
-
-fwServicesMessageRegisterMacro(::fwComEd::ResectionMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string ResectionMsg::ADD_RECONSTRUCTION = "ADD_RECONSTRUCTION";
-std::string ResectionMsg::VISIBILITY = "VISIBILITY";
-std::string ResectionMsg::NEW_RECONSTRUCTION_SELECTED = "NEW_RECONSTRUCTION_SELECTED";
-std::string ResectionMsg::MODIFIED = "MODIFIED";
-
-
-//-----------------------------------------------------------------------------
-
-ResectionMsg::ResectionMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ResectionMsg::~ResectionMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/SeriesDBMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/SeriesDBMsg.cpp
deleted file mode 100644
index 388e560..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/SeriesDBMsg.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/SeriesDBMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::SeriesDBMsg );
-
-namespace fwComEd
-{
-
-std::string SeriesDBMsg::ADDED_OBJECTS = "ADDED_OBJECTS";
-std::string SeriesDBMsg::REMOVED_OBJECTS = "REMOVED_OBJECTS";
-
-//-------------------------------------------------------------------------
-
-SeriesDBMsg::SeriesDBMsg(::fwServices::ObjectMsg::Key key)
-{
-    m_removedSeries    = ::fwData::Vector::New();
-    m_addedSeries      = ::fwData::Vector::New();
-}
-
-//-------------------------------------------------------------------------
-
-SeriesDBMsg::~SeriesDBMsg() throw()
-{}
-
-//-------------------------------------------------------------------------
-
-void SeriesDBMsg::appendAddedSeries( ::fwMedData::Series::sptr newSeries )
-{
-    ::fwData::Vector::ContainerType& addedSeries = m_addedSeries->getContainer();
-    if( ! this->hasEvent( ADDED_OBJECTS ) )
-    {
-        this->addEvent( ADDED_OBJECTS, m_addedSeries );
-    }
-
-    SLM_ASSERT("This Series is already registered",
-               std::find(addedSeries.begin(), addedSeries.end(), newSeries) == addedSeries.end() );
-
-    addedSeries.push_back(newSeries);
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Vector::sptr SeriesDBMsg::getAddedSeries() const
-{
-    return m_addedSeries;
-}
-
-//-----------------------------------------------------------------------------
-
-void SeriesDBMsg::appendRemovedSeries( ::fwMedData::Series::sptr oldSeries )
-{
-    ::fwData::Vector::ContainerType& removedSeries = m_removedSeries->getContainer();
-    if( ! this->hasEvent( REMOVED_OBJECTS ) )
-    {
-        this->addEvent( REMOVED_OBJECTS, m_removedSeries );
-    }
-
-    SLM_ASSERT("This Series is already register",
-               std::find(removedSeries.begin(), removedSeries.end(), oldSeries) == removedSeries.end() );
-
-    removedSeries.push_back( oldSeries );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Vector::sptr SeriesDBMsg::getRemovedSeries() const
-{
-    return m_removedSeries;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace op
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/SplineMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/SplineMsg.cpp
deleted file mode 100644
index 244975f..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/SplineMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/SplineMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::SplineMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string SplineMsg::NEW_SPLINE="NEW_SPLINE";
-
-//-----------------------------------------------------------------------------
-
-SplineMsg::SplineMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-SplineMsg::~SplineMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/StringMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/StringMsg.cpp
deleted file mode 100644
index d662a80..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/StringMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/StringMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::StringMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string StringMsg::VALUE_IS_MODIFIED = "VALUE_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-StringMsg::StringMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-StringMsg::~StringMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/TagMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/TagMsg.cpp
deleted file mode 100644
index 8dfcc43..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/TagMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/TagMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::TagMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string TagMsg::TAG_IS_MODIFIED="TAG_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-TagMsg::TagMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-TagMsg::~TagMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/TransferFunctionMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/TransferFunctionMsg.cpp
deleted file mode 100644
index 7775ba3..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/TransferFunctionMsg.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/TransferFunctionMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::TransferFunctionMsg );
-
-namespace fwComEd
-{
-
-std::string TransferFunctionMsg::MODIFIED_POINTS = "MODIFIED_POINTS";
-std::string TransferFunctionMsg::WINDOWING = "WINDOWING";
-
-//-----------------------------------------------------------------------------
-
-TransferFunctionMsg::TransferFunctionMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-TransferFunctionMsg::~TransferFunctionMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void TransferFunctionMsg::setWindowLevel( double window, double level )
-{
-    this->addEvent( ::fwComEd::TransferFunctionMsg::WINDOWING );
-    m_level = level;
-    m_window = window;
-}
-
-//-----------------------------------------------------------------------------
-
-double TransferFunctionMsg::getWindow() const
-{
-    SLM_ASSERT( "WINDOWING Event not found in msg", this->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING ));
-    return(m_window);
-}
-
-//-----------------------------------------------------------------------------
-
-double TransferFunctionMsg::getLevel() const
-{
-    SLM_ASSERT( "WINDOWING Event not found in msg", this->hasEvent( ::fwComEd::TransferFunctionMsg::WINDOWING ));
-    return (m_level);
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/TransformationMatrix3DMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/TransformationMatrix3DMsg.cpp
deleted file mode 100644
index ca2c3b2..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/TransformationMatrix3DMsg.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/TransformationMatrix3DMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::TransformationMatrix3DMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string TransformationMatrix3DMsg::MATRIX_IS_MODIFIED = "MATRIX_IS_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-TransformationMatrix3DMsg::TransformationMatrix3DMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-TransformationMatrix3DMsg::~TransformationMatrix3DMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/TriangularMeshMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/TriangularMeshMsg.cpp
deleted file mode 100644
index 3a8adf6..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/TriangularMeshMsg.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/TriangularMeshMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::TriangularMeshMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string TriangularMeshMsg::NEW_MESH = "NEW_MESH";
-std::string TriangularMeshMsg::VERTEX_MODIFIED = "VERTEX_MODIFIED";
-
-//-----------------------------------------------------------------------------
-
-TriangularMeshMsg::TriangularMeshMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-TriangularMeshMsg::~TriangularMeshMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/VectorMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/VectorMsg.cpp
deleted file mode 100644
index 7ca3aa6..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/VectorMsg.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/spyLog.hpp>
-
-#include <fwData/Object.hpp>
-#include <fwData/Vector.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/VectorMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::VectorMsg );
-
-namespace fwComEd
-{
-
-std::string VectorMsg::ADDED_OBJECTS = "ADDED_OBJECTS";
-std::string VectorMsg::REMOVED_OBJECTS = "REMOVED_OBJECTS";
-
-//-------------------------------------------------------------------------
-
-VectorMsg::VectorMsg(::fwServices::ObjectMsg::Key key)
-{
-    m_removedObjects    = ::fwData::Vector::New();
-    m_addedObjects      = ::fwData::Vector::New();
-}
-
-//-------------------------------------------------------------------------
-
-VectorMsg::~VectorMsg() throw()
-{}
-
-//-------------------------------------------------------------------------
-
-void VectorMsg::appendAddedObject( ::fwData::Object::sptr _pNewObject )
-{
-    if( ! this->hasEvent( ADDED_OBJECTS ) )
-    {
-        this->addEvent( ADDED_OBJECTS, m_addedObjects );
-    }
-
-    SLM_ASSERT("This object is already registered",
-               std::find(m_addedObjects->begin(), m_addedObjects->end(), _pNewObject) == m_addedObjects->end() );
-
-    m_addedObjects->getContainer().push_back(_pNewObject);
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Vector::sptr VectorMsg::getAddedObjects() const
-{
-    return m_addedObjects;
-}
-
-//-----------------------------------------------------------------------------
-
-void VectorMsg::appendRemovedObject( ::fwData::Object::sptr _pOldObject )
-{
-    if( ! this->hasEvent( REMOVED_OBJECTS ) )
-    {
-        this->addEvent( REMOVED_OBJECTS, m_removedObjects );
-    }
-
-    SLM_ASSERT("This object is already register",
-               std::find(m_removedObjects->begin(), m_removedObjects->end(), _pOldObject) == m_removedObjects->end() );
-
-    m_removedObjects->getContainer().push_back( _pOldObject );
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Vector::sptr VectorMsg::getRemovedObjects() const
-{
-    return m_removedObjects;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace op
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/VideoMsg.cpp b/SrcLib/core/fwComEd/src/fwComEd/VideoMsg.cpp
deleted file mode 100644
index 1a869de..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/VideoMsg.cpp
+++ /dev/null
@@ -1,34 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/registry/message/macros.hpp>
-
-#include "fwComEd/VideoMsg.hpp"
-
-fwServicesMessageRegisterMacro( ::fwComEd::VideoMsg );
-
-namespace fwComEd
-{
-
-//-----------------------------------------------------------------------------
-
-std::string VideoMsg::VIDEO_IS_REFRESHED="VIDEO_IS_REFRESHED";
-std::string VideoMsg::VIDEO_IS_INITIALIZED="VIDEO_IS_INITIALIZED";
-
-//-----------------------------------------------------------------------------
-
-VideoMsg::VideoMsg(::fwServices::ObjectMsg::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-VideoMsg::~VideoMsg() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/fieldHelper/MedicalImageHelpers.cpp b/SrcLib/core/fwComEd/src/fwComEd/fieldHelper/MedicalImageHelpers.cpp
deleted file mode 100644
index d36b3fa..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/fieldHelper/MedicalImageHelpers.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Integer.hpp>
-#include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
-#include <fwData/PointList.hpp>
-#include <fwData/ResectionDB.hpp>
-
-#include <fwMath/MeshFunctions.hpp>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include "fwComEd/Dictionary.hpp"
-#include "fwComEd/fieldHelper/MedicalImageHelpers.hpp"
-
-namespace fwComEd
-{
-
-namespace fieldHelper
-{
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageHelpers::checkLandmarks( ::fwData::Image::sptr _pImg )
-{
-    bool fieldIsModified = false;
-
-    // Manage image landmarks
-    if ( ! _pImg->getField( ::fwComEd::Dictionary::m_imageLandmarksId ) )
-    {
-        ::fwData::PointList::sptr pl = ::fwData::PointList::New();
-        _pImg->setField( ::fwComEd::Dictionary::m_imageLandmarksId, pl );
-        fieldIsModified = true;
-    }
-
-    return fieldIsModified;
-}
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageHelpers::checkImageValidity( ::fwData::Image::sptr _pImg )
-{
-    SLM_TRACE_FUNC();
-
-    // Test if the image is allocated
-    bool dataImageIsAllocated = (_pImg != ::fwData::Image::sptr());
-
-    if (dataImageIsAllocated)
-    {
-        size_t nbDim = _pImg->getNumberOfDimensions();
-        dataImageIsAllocated &= nbDim > 1;
-
-        for ( size_t k = 0; dataImageIsAllocated && k < nbDim; ++k )
-        {
-            dataImageIsAllocated = dataImageIsAllocated && ( _pImg->getSize()[k] >= 1 );
-        }
-    }
-
-    return dataImageIsAllocated;
-}
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageHelpers::checkImageSliceIndex( ::fwData::Image::sptr _pImg )
-{
-    SLM_ASSERT("_pImg pointer null", _pImg);
-
-    bool fieldIsModified = false;
-
-    const ::fwData::Image::SizeType &imageSize = _pImg->getSize();
-
-    ::fwData::Integer::sptr axialIdx    = _pImg->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_axialSliceIndexId );
-    ::fwData::Integer::sptr frontalIdx  = _pImg->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_frontalSliceIndexId);
-    ::fwData::Integer::sptr sagittalIdx = _pImg->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_sagittalSliceIndexId );
-
-    // Manage image landmarks
-    if ( ! (axialIdx && frontalIdx && sagittalIdx) )
-    {
-        // Set value
-        axialIdx = ::fwData::Integer::New(-1);
-        _pImg->setField( ::fwComEd::Dictionary::m_axialSliceIndexId, axialIdx );
-
-        frontalIdx = ::fwData::Integer::New(-1);
-        _pImg->setField( ::fwComEd::Dictionary::m_frontalSliceIndexId, frontalIdx );
-
-        sagittalIdx = ::fwData::Integer::New(-1);
-        _pImg->setField( ::fwComEd::Dictionary::m_sagittalSliceIndexId, sagittalIdx );
-
-        fieldIsModified = true;
-    }
-
-
-    SLM_ASSERT (
-            "Information on image slice index is not correct, miss one of these fields : m_axialSliceIndexId, m_frontalSliceIndexId, m_sagittalSliceIndexId.",
-            axialIdx && frontalIdx && sagittalIdx
-            );
-
-    // Get value
-    if( axialIdx->value() < 0 ||  imageSize[2] < axialIdx->value() )
-    {
-        axialIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[2] / 2);
-        fieldIsModified = true;
-    }
-
-    if( frontalIdx->value() < 0 ||  imageSize[1] < frontalIdx->value() )
-    {
-        frontalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[1] / 2);
-        fieldIsModified = true;
-    }
-
-    if( sagittalIdx->value() < 0 ||  imageSize[0] < sagittalIdx->value() )
-    {
-        sagittalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[0] / 2);
-        fieldIsModified = true;
-    }
-
-
-    return fieldIsModified;
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Point::sptr   MedicalImageHelpers::getImageSliceIndices( ::fwData::Image::sptr _pImg )
-{
-    SLM_ASSERT("_pImg pointer null", _pImg);
-
-    ::fwData::Point::sptr point = ::fwData::Point::New();
-
-    MedicalImageHelpers::checkImageSliceIndex(_pImg);
-
-    point->getRefCoord()[0] = _pImg->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_sagittalSliceIndexId )->value();
-    point->getRefCoord()[1] = _pImg->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_frontalSliceIndexId  )->value();
-    point->getRefCoord()[2] = _pImg->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_axialSliceIndexId    )->value();
-
-    return point;
-}
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageHelpers::checkComment( ::fwData::Image::sptr _pImg )
-{
-    SLM_ASSERT("_pImg pointer null", _pImg);
-
-    bool fieldIsModified = false;
-
-    if ( ! _pImg->getField( ::fwComEd::Dictionary::m_commentId ) )
-    {
-        // Set value
-        ::fwData::String::sptr param = ::fwData::String::New("Original image");
-        _pImg->setField( ::fwComEd::Dictionary::m_commentId, param );
-        fieldIsModified = true;
-    }
-
-    return fieldIsModified;
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Image::sptr MedicalImageHelpers::initialize( ::fwData::Image::sptr imgSrc, ::fwData::Image::sptr imgToInitialize)
-{
-    SLM_ASSERT("Image source must be initialized", imgSrc);
-    SLM_ASSERT("Image source must be valid", MedicalImageHelpers::checkImageValidity(imgSrc));
-
-    if(!imgToInitialize)
-    {
-        imgToInitialize = ::fwData::Image::New();
-    }
-    ::fwData::Array::sptr imgData = imgSrc->getDataArray();
-    imgSrc->setDataArray(::fwData::Array::sptr(), false);
-
-    imgToInitialize = ::fwData::Object::copy(imgSrc);
-
-    imgSrc->setDataArray(imgData, false);
-
-    imgToInitialize->allocate();
-
-    return imgToInitialize;
-}
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageHelpers::isBufNull(const ::fwData::Image::BufferType *buf, const unsigned int len)
-{
-    bool isNull;
-    const ::fwData::Image::BufferType *ucbuf = static_cast< const ::fwData::Image::BufferType *> (buf);
-    isNull = 0 == std::accumulate(
-            ucbuf,
-            ucbuf+len,
-            0,
-            bitwise_or< ::fwData::Image::BufferType >()
-            );
-    return isNull;
-}
-
-//------------------------------------------------------------------------------
-
-} // fieldHelper
-} // fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/Array.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/Array.cpp
deleted file mode 100644
index fc98452..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/Array.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwComEd/helper/Array.hpp"
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-Array::Array( ::fwData::Array::sptr array ) : m_array (array)
-{
-    SLM_ASSERT("Array ptr is null.", array);
-    m_lock = array->getBufferObject()->lock();
-}
-
-//-----------------------------------------------------------------------------
-
-Array::~Array()
-{
-
-}
-
-//-----------------------------------------------------------------------------
-
-void *Array::getBuffer()
-{
-    return m_lock.getBuffer();
-}
-
-//-----------------------------------------------------------------------------
-
-const void *Array::getBuffer() const
-{
-    return m_lock.getBuffer();
-}
-
-//------------------------------------------------------------------------------
-
-void Array::setBuffer(void *buf, bool takeOwnership)
-{
-    if(m_array->getIsBufferOwner())
-    {
-        if(!m_array->getBufferObject()->isEmpty())
-        {
-            m_array->getBufferObject()->destroy();
-        }
-    }
-    else
-    {
-        ::fwMemory::BufferObject::sptr newBufferObject = ::fwMemory::BufferObject::New();
-        ::fwMemory::BufferObject::sptr oldBufferObject = m_array->getBufferObject();
-        oldBufferObject->swap(newBufferObject);
-    }
-    m_array->getBufferObject()->setBuffer(buf, (buf == NULL) ? 0 : m_array->getSizeInBytes());
-    m_array->setIsBufferOwner(takeOwnership);
-}
-
-//------------------------------------------------------------------------------
-
-void Array::setBuffer(
-        void *buf,
-        bool takeOwnership,
-        const ::fwTools::Type &type,
-        const  ::fwData::Array::SizeType &size,
-        size_t nbOfComponents )
-{
-    m_array->resize( type, size, nbOfComponents, false);
-    this->setBuffer(buf, takeOwnership);
-}
-
-//-----------------------------------------------------------------------------
-
-char *Array::begin()
-{
-    void *v = this->getBuffer();
-    return static_cast<char*>(v);
-}
-
-//------------------------------------------------------------------------------
-
-char *Array::end()
-{
-    return reinterpret_cast<char*> (static_cast<char*>(this->getBuffer()) + m_array->getSizeInBytes());
-}
-//------------------------------------------------------------------------------
-
-const char *Array::begin() const
-{
-    return static_cast<const char*>(this->getBuffer());
-}
-
-//------------------------------------------------------------------------------
-
-const char *Array::end() const
-{
-    return reinterpret_cast<const char*> (static_cast<const char*>(this->getBuffer()) + m_array->getSizeInBytes());
-}
-
-//-----------------------------------------------------------------------------
-
-char *Array::getBufferPtr( const ::fwData::Array::IndexType &id, size_t component, size_t sizeOfType )
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    size_t offset = m_array->getBufferOffset(id, component, sizeOf);
-    char *item = static_cast<char*>(this->getBuffer()) + offset;
-    return item;
-}
-
-//------------------------------------------------------------------------------
-
-const char *Array::getBufferPtr( const ::fwData::Array::IndexType &id, size_t component, size_t sizeOfType ) const
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    size_t offset = m_array->getBufferOffset(id, component, sizeOf);
-    const char *item = static_cast<const char*>(this->getBuffer()) + offset;
-    return item;
-}
-
-//------------------------------------------------------------------------------
-
-void Array::setItem(const ::fwData::Array::IndexType &id, const void *value)
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    const char *val  = static_cast<const char*>(value);
-    char *item = this->getBufferPtr(id, 0, sizeOf);
-    std::copy(val, val + m_array->getNumberOfComponents()*sizeOf, item);
-}
-//------------------------------------------------------------------------------
-
-
-void Array::setItem(const ::fwData::Array::IndexType &id, const size_t component, const void *value)
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    const char *val  = static_cast<const char*>(value);
-    char *item = this->getBufferPtr(id, component, sizeOf);
-    std::copy(val, val + sizeOf, item);
-}
-
-
-//------------------------------------------------------------------------------
-
-void *Array::getItem(const ::fwData::Array::IndexType &id, const size_t component)
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    char *item = this->getBufferPtr(id, component, sizeOf);
-    return item;
-}
-
-//------------------------------------------------------------------------------
-
-void Array::getItem(const ::fwData::Array::IndexType &id, void *value) const
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    const char *item = this->getBufferPtr(id, 0, sizeOf);
-    char *val  = static_cast<char*>(value);
-    std::copy(item, item + m_array->getNumberOfComponents()*sizeOf, val);
-}
-
-//------------------------------------------------------------------------------
-
-void Array::getItem(const ::fwData::Array::IndexType &id, const size_t component, void *value) const
-{
-    size_t sizeOf = m_array->getType().sizeOf();
-    const char *item = this->getBufferPtr(id, component, sizeOf);
-    char *val  = static_cast<char*>(value);
-    std::copy(item, item + m_array->getNumberOfComponents()*sizeOf, val);
-}
-
-//------------------------------------------------------------------------------
-
-::fwMemory::BufferObject::Lock Array::getLock() const
-{
-    return m_lock;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace helper
-
-} // namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/Composite.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/Composite.cpp
deleted file mode 100644
index bff5fc1..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/Composite.cpp
+++ /dev/null
@@ -1,117 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/bind.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include "fwComEd/helper/Composite.hpp"
-
-namespace fwComEd
-{
-namespace helper
-{
-
-//-----------------------------------------------------------------------------
-
-Composite::Composite( ::fwData::Composite::wptr _composite )
-    :   m_compositeMsg ( ::fwComEd::CompositeMsg::New() ),
-        m_composite ( _composite )
-{}
-
-//-----------------------------------------------------------------------------
-
-Composite::~Composite()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Composite::add( std::string _compositeKey, ::fwData::Object::sptr _newObject )
-{
-    OSLM_FATAL_IF( "Sorry the composite key " << _compositeKey << " must not exist in composite." , m_composite.lock()->find(_compositeKey) != m_composite.lock()->end() );
-
-    // Modify composite
-    m_composite.lock()->getContainer()[ _compositeKey ] = _newObject;
-
-    // Modify message
-    m_compositeMsg->appendAddedKey( _compositeKey, _newObject );
-
-}
-
-//-----------------------------------------------------------------------------
-
-void Composite::remove( std::string _compositeKey )
-{
-    OSLM_FATAL_IF( "Sorry the composite key " << _compositeKey << " must exist in composite." , m_composite.lock()->find(_compositeKey) == m_composite.lock()->end() );
-
-    // Get old object
-    ::fwData::Object::sptr objBackup = m_composite.lock()->getContainer()[ _compositeKey ];
-
-    // Modify composite
-    m_composite.lock()->getContainer().erase( _compositeKey );
-
-    // Modify message
-    m_compositeMsg->appendRemovedKey( _compositeKey, objBackup );
-
-}
-
-//-----------------------------------------------------------------------------
-
-void Composite::clear()
-{
-    ::fwData::Composite::sptr composite = m_composite.lock();
-    std::vector<std::string> vectKey;
-    std::transform( composite->begin(), composite->end(),
-                std::back_inserter(vectKey),
-                ::boost::bind(& ::fwData::Composite::value_type::first,_1) );
-
-    BOOST_FOREACH(std::string key, vectKey)
-    {
-        this->remove(key);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void Composite::swap( std::string _compositeKey, ::fwData::Object::sptr _newObject )
-{
-    OSLM_FATAL_IF( "Sorry the composite key " << _compositeKey << " must exist in composite." , m_composite.lock()->find(_compositeKey) == m_composite.lock()->end() );
-
-
-    // Get old object
-    ::fwData::Object::sptr objBackup = m_composite.lock()->getContainer()[ _compositeKey ];
-
-    if( objBackup != _newObject )
-    {
-        // Modify composite
-        m_composite.lock()->getContainer()[ _compositeKey ] = _newObject;
-
-        // Modify message
-        m_compositeMsg->appendChangedKey( _compositeKey, objBackup, _newObject );
-    }
-    else
-    {
-        OSLM_INFO("Cannot swap this object ( "<< _compositeKey <<" ) in composite because it is the same object. Do nothing (not notification)");
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void Composite::notify( ::fwServices::IService::sptr _serviceSource )
-{
-    if ( m_compositeMsg->getEventIds().size() > 0 )
-    {
-        ::fwServices::IEditionService::notify( _serviceSource, m_composite.lock(), m_compositeMsg , true );
-    }
-    SLM_INFO_IF("Sorry, this helper cannot notify his message because the message is empty.", m_compositeMsg->getEventIds().size() == 0);
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace helper
-} // namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/Field.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/Field.cpp
deleted file mode 100644
index 3fdb997..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/Field.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <algorithm>
-
-#include <boost/bind.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include "fwComEd/helper/Field.hpp"
-
-namespace fwComEd
-{
-namespace helper
-{
-
-//-----------------------------------------------------------------------------
-
-Field::Field( ::fwData::Object::sptr object )
-    :   m_objectMsg ( ::fwServices::ObjectMsg::New() ),
-        m_object ( object )
-{}
-
-//-----------------------------------------------------------------------------
-
-Field::~Field()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Field::setField(const fwData::Object::FieldNameType& name, fwData::Object::sptr obj)
-{
-    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
-    ::fwData::Object::sptr object = m_object.lock();
-    ::fwData::Object::sptr field = object->getField(name);
-    if (!field)
-    {
-        m_objectMsg->appendAddedField(name, obj);
-    }
-    else
-    {
-        m_objectMsg->appendChangedField(name, field, obj);
-    }
-    object->setField(name, obj);
-}
-
-//-----------------------------------------------------------------------------
-
-void Field::setFields( const fwData::Object::FieldMapType& newFields)
-{
-    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
-    ::fwData::Object::sptr object = m_object.lock();
-    const ::fwData::Object::FieldMapType oldFields  = object->getFields();
-    this->buildMessage(newFields,oldFields);
-    object->setFields(newFields);
-}
-
-//-----------------------------------------------------------------------------
-
-void Field::updateFields( const fwData::Object::FieldMapType& fieldMap)
-{
-    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
-    ::fwData::Object::sptr object = m_object.lock();
-    const ::fwData::Object::FieldMapType oldFields  = object->getFields();
-    this->buildMessage(fieldMap,oldFields);
-    object->updateFields(fieldMap);
-}
-
-//-----------------------------------------------------------------------------
-
-void Field::removeField(const fwData::Object::FieldNameType& name)
-{
-    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
-    ::fwData::Object::sptr object = m_object.lock();
-    ::fwData::Object::sptr field = object->getField(name);
-
-    if (field)
-    {
-        m_objectMsg->appendRemovedField(name, field);
-    }
-    object->removeField(name);
-}
-
-//-----------------------------------------------------------------------------
-
-void Field::notify(fwServices::IService::sptr _serviceSource)
-{
-    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
-    if ( m_objectMsg->getEventIds().size() > 0 )
-    {
-        ::fwServices::IEditionService::notify( _serviceSource, m_object.lock(), m_objectMsg , true );
-    }
-    SLM_INFO_IF("The message will not by notified because it has no event.", m_objectMsg->getEventIds().size() == 0);
-}
-
-//-----------------------------------------------------------------------------
-
-void Field::buildMessage(
-        const ::fwData::Object::FieldMapType &oldFields,
-        const ::fwData::Object::FieldMapType &newFields
-        )
-{
-    ::fwData::Object::FieldNameVectorType oldFieldNames;
-    ::fwData::Object::FieldNameVectorType newFieldNames;
-
-    std::transform(
-            oldFields.begin(), oldFields.end(),
-            std::back_inserter(oldFieldNames),
-            ::boost::bind(& ::fwData::Object::FieldMapType::value_type::first, _1)
-    );
-    std::transform(
-            newFields.begin(), newFields.end(),
-            std::back_inserter(newFieldNames),
-            ::boost::bind(& ::fwData::Object::FieldMapType::value_type::first, _1)
-    );
-
-    std::sort(oldFieldNames.begin(), oldFieldNames.end());
-    std::sort(newFieldNames.begin(), newFieldNames.end());
-
-    ::fwData::Object::FieldNameVectorType added;   // new - old
-    ::fwData::Object::FieldNameVectorType changed; // old & new
-    ::fwData::Object::FieldNameVectorType removed; // old - new
-
-    std::set_difference(
-            newFieldNames.begin(), newFieldNames.end(),
-            oldFieldNames.begin(), oldFieldNames.end(),
-            std::back_inserter(added)
-    );
-
-    std::set_intersection(
-            newFieldNames.begin(), newFieldNames.end(),
-            oldFieldNames.begin(), oldFieldNames.end(),
-            std::back_inserter(changed)
-    );
-
-    std::set_difference(
-            oldFieldNames.begin(), oldFieldNames.end(),
-            newFieldNames.begin(), newFieldNames.end(),
-            std::back_inserter(removed)
-    );
-
-    BOOST_FOREACH(const ::fwData::Object::FieldNameVectorType::value_type &fieldName, added)
-    {
-        m_objectMsg->appendAddedField(fieldName, newFields.find(fieldName)->second);
-    }
-
-    BOOST_FOREACH(const ::fwData::Object::FieldNameVectorType::value_type &fieldName, changed)
-    {
-        m_objectMsg->appendChangedField(
-                fieldName,
-                oldFields.find(fieldName)->second,
-                newFields.find(fieldName)->second
-                );
-    }
-
-    BOOST_FOREACH(const ::fwData::Object::FieldNameVectorType::value_type &fieldName, changed)
-    {
-        m_objectMsg->appendRemovedField(fieldName, oldFields.find(fieldName)->second);
-    }
-}
-
-} // namespace helper
-} // namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/Image.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/Image.cpp
deleted file mode 100644
index 0fb0b6d..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/Image.cpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/PointList.hpp>
-#include <fwData/TransferFunction.hpp>
-#include <fwData/Composite.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include "fwComEd/helper/Image.hpp"
-#include "fwComEd/helper/Field.hpp"
-#include "fwComEd/helper/Composite.hpp"
-#include "fwComEd/Dictionary.hpp"
-#include "fwComEd/fieldHelper/MedicalImageHelpers.hpp"
-
-namespace fwComEd
-{
-namespace helper
-{
-
-
-//-----------------------------------------------------------------------------
-
-Image::Image( ::fwData::Image::sptr image )
-    : m_imageMsg(::fwComEd::ImageMsg::New()),
-      m_image(image)
-{
-    if ( image )
-    {
-        m_lock = image->getDataArray()->getBufferObject()->lock();
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-Image::~Image()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Image::notify( ::fwServices::IService::sptr _serviceSource )
-{
-    if ( m_imageMsg->getEventIds().size() > 0 )
-    {
-        ::fwServices::IEditionService::notify( _serviceSource, m_image, m_imageMsg );
-    }
-    SLM_INFO_IF("Sorry, this helper cannot notify his message because the message is empty.", m_imageMsg->getEventIds().empty());
-}
-
-//------------------------------------------------------------------------------
-
-bool Image::createLandmarks()
-{
-    bool fieldIsCreated = false;
-
-    // Manage image landmarks
-    if ( ! m_image->getField( ::fwComEd::Dictionary::m_imageLandmarksId ) )
-    {
-        ::fwData::PointList::sptr pl = ::fwData::PointList::New();
-        m_image->setField( ::fwComEd::Dictionary::m_imageLandmarksId, pl );
-        fieldIsCreated = true;
-    }
-
-    return fieldIsCreated;
-}
-
-
-//------------------------------------------------------------------------------
-
-bool Image::createTransferFunctionPool(::fwServices::IService::sptr serviceSource)
-{
-    bool fieldIsCreated = false;
-    const std::string poolFieldName = ::fwComEd::Dictionary::m_transferFunctionCompositeId;
-    ::fwData::Composite::sptr tfPool;
-
-    tfPool = m_image->getField< ::fwData::Composite >(poolFieldName);
-    // Transfer functions
-    if ( ! tfPool )
-    {
-        tfPool = ::fwData::Composite::New();
-
-        // Set in selected image
-        ::fwComEd::helper::Field fieldHelper(m_image);
-        fieldHelper.setField(poolFieldName, tfPool);
-        if(serviceSource)
-        {
-            fieldHelper.notify(serviceSource);
-        }
-        // TF pool is modified
-        fieldIsCreated = true;
-    }
-
-    const std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
-    if(tfPool->find(defaultTFName) == tfPool->end())
-    {
-        ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::createDefaultTF();
-        if (m_image->getWindowWidth() != 0 )
-        {
-            tf->setWindow( m_image->getWindowWidth() );
-            tf->setLevel( m_image->getWindowCenter() );
-        }
-        else if(::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(m_image))
-        {
-            double min, max;
-            ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(m_image, min, max);
-            ::fwData::TransferFunction::TFValuePairType wlMinMax(min, max);
-            tf->setWLMinMax(wlMinMax);
-        }
-        // Set in TFPool
-        ::fwComEd::helper::Composite compositeHelper(tfPool);
-        compositeHelper.add(defaultTFName, tf);
-        if(serviceSource)
-        {
-            compositeHelper.notify(serviceSource);
-        }
-    }
-
-    return fieldIsCreated;
-}
-
-
-//------------------------------------------------------------------------------
-
-bool Image::createImageSliceIndex()
-{
-    bool fieldIsCreated = false;
-
-    const ::fwData::Image::SizeType &imageSize = m_image->getSize();
-
-    ::fwData::Integer::sptr axialIdx    = m_image->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_axialSliceIndexId );
-    ::fwData::Integer::sptr frontalIdx  = m_image->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_frontalSliceIndexId);
-    ::fwData::Integer::sptr sagittalIdx = m_image->getField< ::fwData::Integer >( ::fwComEd::Dictionary::m_sagittalSliceIndexId );
-
-    // Manage image slice index
-    if ( ! (axialIdx && frontalIdx && sagittalIdx) )
-    {
-        // Set value
-        axialIdx = ::fwData::Integer::New(-1);
-        m_image->setField( ::fwComEd::Dictionary::m_axialSliceIndexId, axialIdx );
-
-        frontalIdx = ::fwData::Integer::New(-1);
-        m_image->setField( ::fwComEd::Dictionary::m_frontalSliceIndexId, frontalIdx );
-
-        sagittalIdx = ::fwData::Integer::New(-1);
-        m_image->setField( ::fwComEd::Dictionary::m_sagittalSliceIndexId, sagittalIdx );
-
-        fieldIsCreated = true;
-    }
-
-
-    SLM_ASSERT (
-            "Information on image slice index is not correct, miss one of these fields : "
-            "m_axialSliceIndexId, m_frontalSliceIndexId, m_sagittalSliceIndexId.",
-            axialIdx && frontalIdx && sagittalIdx
-            );
-
-    // Get value
-    if( axialIdx->value() < 0 ||  imageSize[2] < axialIdx->value() )
-    {
-        axialIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[2] / 2);
-        fieldIsCreated = true;
-    }
-
-    if( frontalIdx->value() < 0 ||  imageSize[1] < frontalIdx->value() )
-    {
-        frontalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[1] / 2);
-        fieldIsCreated = true;
-    }
-
-    if( sagittalIdx->value() < 0 ||  imageSize[0] < sagittalIdx->value() )
-    {
-        sagittalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[0] / 2);
-        fieldIsCreated = true;
-    }
-
-    return fieldIsCreated;
-}
-
-//-----------------------------------------------------------------------------
-
-void * Image::getBuffer()
-{
-    return m_lock.getBuffer();
-}
-
-//------------------------------------------------------------------------------
-
-void* Image::getPixelBuffer( SizeType::value_type x, SizeType::value_type y, SizeType::value_type z )
-{
-    SizeType size = m_image->getSize();
-    IndexType offset = x + size[0]*y + z*size[0]*size[1];
-    return this->getPixelBuffer(offset);
-}
-
-//------------------------------------------------------------------------------
-
-void* Image::getPixelBuffer( IndexType index )
-{
-    ::boost::uint8_t imagePixelSize = m_image->getType().sizeOf();
-    BufferType * buf = static_cast < BufferType * > (this->getBuffer());
-    BufferIndexType bufIndex = index * imagePixelSize;
-    return buf + bufIndex;
-}
-
-//------------------------------------------------------------------------------
-
-void Image::setPixelBuffer( IndexType index , Image::BufferType * pixBuf)
-{
-    ::boost::uint8_t imagePixelSize = m_image->getType().sizeOf();
-    BufferType * buf = static_cast < BufferType * > (this->getPixelBuffer(index));
-
-    std::copy(pixBuf, pixBuf+imagePixelSize, buf);
-}
-
-//------------------------------------------------------------------------------
-
-const std::string Image::getPixelAsString(SizeType::value_type x,
-                                          SizeType::value_type y,
-                                          SizeType::value_type z )
-{
-    return m_image->getType().toString(this->getPixelBuffer(x,y,z));
-}
-
-//------------------------------------------------------------------------------
-
-::fwMemory::BufferObject::Lock Image::getLock() const
-{
-    return m_lock;
-}
-
-//------------------------------------------------------------------------------
-
-} // helper
-} // fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/MedicalImageAdaptor.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/MedicalImageAdaptor.cpp
deleted file mode 100644
index 256bb4d..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/MedicalImageAdaptor.cpp
+++ /dev/null
@@ -1,520 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/TransferFunction.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/CompositeMsg.hpp>
-
-#include "fwComEd/helper/MedicalImageAdaptor.hpp"
-#include "fwComEd/helper/Image.hpp"
-#include "fwComEd/helper/Composite.hpp"
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-//------------------------------------------------------------------------------
-
-MedicalImageAdaptor::MedicalImageAdaptor()
-    : m_orientation(Z_AXIS),
-      m_tfSelectionFwID(""),
-      m_selectedTFKey("")
-{}
-
-//------------------------------------------------------------------------------
-
-MedicalImageAdaptor::~MedicalImageAdaptor()
-{}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::getImageSpacing(double spacing[3])
-{
-    ::fwData::Image::sptr image = this->getImage();
-
-    const ::fwData::Image::SpacingType& imSpacing = image->getSpacing();
-    std::copy(imSpacing.begin(), imSpacing.end(), spacing);
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::getImageOrigin(double origin[3])
-{
-    ::fwData::Image::sptr image = this->getImage();;
-
-    std::copy(image->getOrigin().begin(), image->getOrigin().end(), origin);
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::getImageDataSize(int size[3])
-{
-    ::fwData::Image::sptr image = this->getImage();
-
-    const ::fwData::Image::SizeType& imSize = image->getSize();
-    std::copy(imSize.begin(), imSize.end(), size);
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::getImageSize(double size[3])
-{
-    ::fwData::Image::sptr image = this->getImage();;
-    double spacing[3];
-
-    const ::fwData::Image::SizeType& imSize = image->getSize();
-    std::copy(imSize.begin(), imSize.end(), size);
-    this->getImageSpacing(spacing);
-
-    size[0] *= spacing[0];
-    size[1] *= spacing[1];
-    size[2] *= spacing[2];
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::getCurrentSliceCenter(double center[3])
-{
-    ::fwData::Image::sptr image = this->getImage();;
-    double imageSize[3];
-    this->getImageSize(imageSize);
-    double origin[3];
-    this->getImageOrigin(origin);
-
-    ::fwData::Integer::sptr sliceIndex[3];
-    this->getSliceIndex(sliceIndex);
-    double index[3] = {sliceIndex[0]->value(), sliceIndex[1]->value(), sliceIndex[2]->value()};
-
-    center[0] = origin[0] + (imageSize[0]-1.)/ 2.;
-    center[1] = origin[1] + (imageSize[1]-1.)/ 2.;
-    center[2] = origin[2] + (imageSize[2]-1.)/ 2.;
-
-    double spacing[3];
-    this->getImageSpacing(spacing);
-    center[m_orientation] = origin[m_orientation] + index[m_orientation]*spacing[m_orientation];
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setOrientation( MedicalImageAdaptor::Orientation orientation )
-{
-    m_orientation = orientation;
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setOrientation( int orientation )
-{
-    OSLM_FATAL_IF(" orientation value must be  0,1 or 2 (value=" << orientation << ")" , orientation<0 || orientation>3);
-    m_orientation = static_cast< ::fwComEd::helper::MedicalImageAdaptor::Orientation >(orientation);
-}
-
-//------------------------------------------------------------------------------
-
-static const int indexZ[12] = { 0,2,4, 1,2,4,  1,3,4 ,0,3,4 };
-static const int indexY[12] = { 0,2,4, 1,2,4,  1,2,5 ,0,2,5 };
-static const int indexX[12] = { 0,2,4, 0,2,5,  0,3,5 ,0,3,4 };
-static const int *indexSet[3] = { indexX, indexY, indexZ  };
-void MedicalImageAdaptor::getPlane( double points[4][3] , int sliceNumber)
-{
-    ::fwData::Image::sptr image = this->getImage();;
-    double extent[6];
-    for (char i=0;  i<3; ++i )
-    {
-        extent[2*i]   =  0;
-        extent[2*i+1] = image->getSize()[i]*image->getSpacing()[i];
-    }
-    extent[2*m_orientation] = sliceNumber*image->getSpacing()[m_orientation];
-    extent[2*m_orientation+1] = sliceNumber*image->getSpacing()[m_orientation];
-
-    const int *extentIndex = indexSet[ m_orientation ];
-    for (int p=0; p<4 ; ++p)
-    {
-        for (int i=0; i<3 ; ++i)
-        {
-            points[p][i]= extent[ *(extentIndex++) ];
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::sliceIndexToWorld(const int index[3], double world[3] )
-{
-    double spacing[3];
-    this->getImageSpacing(spacing);
-    double origin[3];
-    this->getImageOrigin(origin);
-    for ( int i=0 ; i<3 ; ++i )
-    {
-        world[i] = static_cast<int>( (index[i]*spacing[i]) + 0.5*spacing[i] + origin[i] );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::worldToSliceIndex(const double world[3], int index[3] )
-{
-    double spacing[3];
-    this->getImageSpacing(spacing);
-    double origin[3];
-    this->getImageOrigin(origin);
-    for ( int i=0 ; i<3 ; ++i )
-    {
-        // nearest integer
-        index[i] = static_cast<int>( ( (world[i]-origin[i])/spacing[i] ) + ( ( (world[i]-origin[i])/spacing[i] ) >= 0 ? 0.5 : -0.5 ) );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::worldToImageSliceIndex(const double world[3], int index[3] )
-{
-    int imageSize[3];
-    this->getImageDataSize(imageSize);
-    this->worldToSliceIndex(world, index);
-
-    int idval;
-    for (int i = 0; i < 3; i++)
-    {
-        int max = imageSize[i]-1;
-        idval = index[i];
-        if (idval < 0)
-        {
-            index[i] = 0;
-        }
-        else if (idval > max)
-        {
-            index[i] = max;
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::getSliceIndex(::fwData::Integer::sptr index[3])
-{
-    index[0] = m_sagittalIndex;
-    index[1] = m_frontalIndex;
-    index[2] = m_axialIndex;
-}
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageAdaptor::setSliceIndex(const int index[3])
-{
-    bool isModified = false;
-    ::fwData::Image::sptr image = this->getImage();;
-
-    ::fwData::Integer::sptr sliceIndex[3];
-
-    this->getSliceIndex(sliceIndex);
-
-    if(    index[0] != sliceIndex[0]->value()
-        || index[1] != sliceIndex[1]->value()
-        || index[2] != sliceIndex[2]->value() )
-    {
-        sliceIndex[0]->value() = index[0];
-        sliceIndex[1]->value() = index[1];
-        sliceIndex[2]->value() = index[2];
-        isModified = true;
-    }
-    return isModified;
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::updateImageInfos( ::fwData::Image::sptr image )
-{
-    m_weakImage = image;
-    m_axialIndex    = image->setDefaultField(::fwComEd::Dictionary::m_axialSliceIndexId   , ::fwData::Integer::New(0));
-    m_frontalIndex  = image->setDefaultField(::fwComEd::Dictionary::m_frontalSliceIndexId , ::fwData::Integer::New(0));
-    m_sagittalIndex = image->setDefaultField(::fwComEd::Dictionary::m_sagittalSliceIndexId, ::fwData::Integer::New(0));
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::updateTransferFunction( ::fwData::Image::sptr image, ::fwServices::IService::sptr srv )
-{
-    if ( ! m_tfSelectionFwID.empty() )
-    {
-        if ( m_tfSelection.expired() )
-        {
-            ::fwData::Composite::sptr tfSelection = ::fwData::Composite::dynamicCast( ::fwTools::fwID::getObject( m_tfSelectionFwID ) );
-            OSLM_ASSERT( "Sorry, object with fwID " << m_tfSelectionFwID << " doesn't exist.", tfSelection );
-            OSLM_ASSERT( "Sorry, selectedTFKey must be defined, check your configuration.", ! m_selectedTFKey.empty() );
-            if ( tfSelection->find( m_selectedTFKey ) == tfSelection->end() )
-            {
-                ::fwData::TransferFunction::sptr tfGreyLevel = ::fwData::TransferFunction::createDefaultTF();
-                if (image->getWindowWidth() != 0 )
-                {
-                    tfGreyLevel->setWindow( image->getWindowWidth() );
-                    tfGreyLevel->setLevel( image->getWindowCenter() );
-                }
-                else if(::fwComEd::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
-                {
-                    double min, max;
-                    ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
-                    ::fwData::TransferFunction::TFValuePairType wlMinMax(min, max);
-                    tfGreyLevel->setWLMinMax(wlMinMax);
-                }
-
-                ::fwComEd::helper::Composite compositeHelper(tfSelection);
-                compositeHelper.add(m_selectedTFKey, tfGreyLevel);
-                compositeHelper.notify(srv);
-            }
-            m_tfSelection = tfSelection;
-        }
-    }
-    else
-    {
-        const std::string poolFieldName = ::fwComEd::Dictionary::m_transferFunctionCompositeId;
-        ::fwData::Composite::sptr tfSelection = image->getField< ::fwData::Composite >(poolFieldName);
-
-        if ( m_tfSelection.expired() || m_tfSelection.lock() != tfSelection )
-        {
-            const std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
-
-            ::fwComEd::helper::Image helper(image);
-            helper.createTransferFunctionPool(srv); // do nothing if image tf pool already exist
-
-            tfSelection = image->getField< ::fwData::Composite >(poolFieldName);
-
-            m_selectedTFKey = defaultTFName;
-            m_tfSelection = tfSelection;
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Composite::sptr MedicalImageAdaptor::getTransferFunctionSelection() const
-{
-    return m_tfSelection.lock();
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::TransferFunction::sptr MedicalImageAdaptor::getTransferFunction() const
-{
-    return ::fwData::TransferFunction::dynamicCast((*m_tfSelection.lock())[m_selectedTFKey]);
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Image::sptr MedicalImageAdaptor::getImage()
-{
-    SLM_ASSERT("Image weak pointer empty !", !m_weakImage.expired());
-    return m_weakImage.lock();
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setTFParameters( ::fwData::Composite::sptr tfPool, std::string tfSelectionId )
-{
-    if (!tfSelectionId.empty())
-    {
-        m_selectedTFKey = tfSelectionId;
-        m_tfSelection = tfPool;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setTFSelectionFwID( const std::string & fwid )
-{
-    m_tfSelectionFwID = fwid;
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setSelectedTFKey( const std::string & key )
-{
-    m_selectedTFKey = key;
-}
-
-//------------------------------------------------------------------------------
-
-const std::string & MedicalImageAdaptor::getTFSelectionFwID() const
-{
-    return m_tfSelectionFwID;
-}
-
-//------------------------------------------------------------------------------
-
-const std::string & MedicalImageAdaptor::getSelectedTFKey() const
-{
-    return m_selectedTFKey;
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::parseTFConfig( ::fwRuntime::ConfigurationElement::sptr configuration )
-{
-   SLM_ASSERT("Sorry, analyzed configuration is not conformed.", configuration->getName() == "config");
-   if ( configuration->hasAttribute("selectedTFKey") )
-   {
-       m_selectedTFKey = configuration->getAttributeValue("selectedTFKey");
-       SLM_FATAL_IF("'selectedTFKey' must not be empty", m_selectedTFKey.empty());
-   }
-   if ( configuration->hasAttribute("tfSelectionFwID") )
-   {
-       m_tfSelectionFwID = configuration->getAttributeValue("tfSelectionFwID");
-       SLM_FATAL_IF("'tfSelectionFwID' must not be empty", m_tfSelectionFwID.empty());
-   }
-}
-
-//------------------------------------------------------------------------------
-
-double MedicalImageAdaptor::getWindow() const
-{
-    return this->getTransferFunction()->getWindow();
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setWindow( double window )
-{
-    this->getTransferFunction()->setWindow( window );
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setWindowLevel( double windowMin, double windowMax )
-{
-    ::fwData::TransferFunction::TFValuePairType minMax(windowMin, windowMax);
-    this->getTransferFunction()->setWLMinMax( minMax );
-}
-
-//------------------------------------------------------------------------------
-
-double MedicalImageAdaptor::getLevel() const
-{
-    return this->getTransferFunction()->getLevel();
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::setLevel( double level )
-{
-    this->getTransferFunction()->setLevel( level );
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::installTFSelectionEventHandler( ::fwServices::IService* srv )
-{
-//   srv->addNewHandledEvent(::fwComEd::CompositeMsg::CHANGED_KEYS);
-//   srv->addNewHandledEvent(::fwComEd::CompositeMsg::ADDED_KEYS);
-//   srv->addNewHandledEvent(::fwComEd::CompositeMsg::REMOVED_KEYS);
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::installTFObserver( ::fwServices::IService::sptr srv )
-{
-    SLM_ASSERT( "TF connections already exist", m_tfSelectionConnection.expired() && m_tfConnection.expired());
-
-    m_tfSelectionConnection = this->getTransferFunctionSelection()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->
-                                connect(srv->slot(::fwServices::IService::s_RECEIVE_SLOT));
-
-    m_tfConnection = this->getTransferFunction()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                             srv->slot(::fwServices::IService::s_RECEIVE_SLOT));
-}
-
-//------------------------------------------------------------------------------
-
-void MedicalImageAdaptor::removeTFObserver()
-{
-    m_tfSelectionConnection.disconnect();
-    m_tfConnection.disconnect();
-}
-
-//------------------------------------------------------------------------------
-
-bool MedicalImageAdaptor::upadteTFObserver(::fwServices::ObjectMsg::csptr msg, ::fwServices::IService::sptr srv)
-{
-    bool needUpdate = false;
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(msg);
-    if(compositeMsg)
-    {
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::ADDED_KEYS ) )
-        {
-            ::fwData::Composite::sptr fields = compositeMsg->getAddedKeys();
-            ::fwData::Composite::iterator iter = fields->find(this->getSelectedTFKey());
-            if( iter != fields->end())
-            {
-                if (!m_tfConnection.expired())
-                {
-                    m_tfConnection.disconnect();
-                }
-
-                m_tfConnection = this->getTransferFunction()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                        srv->slot(::fwServices::IService::s_RECEIVE_SLOT));
-                needUpdate = true;
-            }
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::REMOVED_KEYS ) )
-        {
-            SLM_ASSERT( "Sorry, TF observer must exist", ! m_tfConnection.expired() );
-            ::fwData::Composite::sptr fields = compositeMsg->getRemovedKeys();
-            ::fwData::Composite::iterator iter = fields->find(this->getSelectedTFKey());
-            if( iter != fields->end())
-            {
-                m_tfConnection.disconnect();
-                needUpdate = true;
-            }
-        }
-
-        if ( compositeMsg->hasEvent( ::fwComEd::CompositeMsg::CHANGED_KEYS ) )
-        {
-            SLM_ASSERT( "Sorry, TF observer must exist", ! m_tfConnection.expired() );
-            ::fwData::Composite::sptr fields = compositeMsg->getNewChangedKeys();
-            ::fwData::Composite::iterator iter = fields->find(this->getSelectedTFKey());
-            if( iter != fields->end())
-            {
-                m_tfConnection.disconnect();
-                m_tfConnection = this->getTransferFunction()->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(
-                                        srv->slot(::fwServices::IService::s_RECEIVE_SLOT));
-                needUpdate = true;
-            }
-        }
-    }
-    return needUpdate;
-}
-
-//------------------------------------------------------------------------------
-
-::fwComEd::TransferFunctionMsg::sptr MedicalImageAdaptor::notifyTFWindowing( ::fwServices::IService::sptr srv )
-{
-    ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
-
-    // Fire the message
-    ::fwComEd::TransferFunctionMsg::sptr msg = ::fwComEd::TransferFunctionMsg::New();
-    msg->setWindowLevel( tf->getWindow(), tf->getLevel() );
-    ::fwServices::IEditionService::notify( srv, tf, msg );
-    return msg;
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace helper
-
-} //namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/Mesh.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/Mesh.cpp
deleted file mode 100644
index d84c648..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/Mesh.cpp
+++ /dev/null
@@ -1,359 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/assign/list_of.hpp>
-
-#include <fwMath/MeshFunctions.hpp>
-
-#include "fwComEd/helper/Mesh.hpp"
-
-using namespace boost::assign;
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-#define POINT_REALLOC_STEP 1000
-#define CELL_REALLOC_STEP 1000
-#define CELLDATA_REALLOC_STEP 1000
-
-Mesh::Mesh( ::fwData::Mesh::sptr mesh ) : m_mesh (mesh)
-{
-    SLM_ASSERT("Mesh ptr is null.", mesh);
-    this->updateLock();
-}
-
-//-----------------------------------------------------------------------------
-
-Mesh::~Mesh()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Mesh::updateLock()
-{
-    SLM_ASSERT("Mesh ptr is null.", m_mesh);
-    m_helperPoints          = ::fwComEd::helper::Array::New(m_mesh->getPointsArray());
-    m_helperCellTypes       = ::fwComEd::helper::Array::New(m_mesh->getCellTypesArray());
-    m_helperCellData        = ::fwComEd::helper::Array::New(m_mesh->getCellDataArray());
-    m_helperCellDataOffsets = ::fwComEd::helper::Array::New(m_mesh->getCellDataOffsetsArray());
-
-    ::fwData::Array::sptr pointColors  =  m_mesh->getPointColorsArray();
-    ::fwData::Array::sptr cellColors   =  m_mesh->getCellColorsArray();
-    ::fwData::Array::sptr pointNormals =  m_mesh->getPointNormalsArray();
-    ::fwData::Array::sptr cellNormals  =  m_mesh->getCellNormalsArray();
-
-    if(pointColors)
-    {
-        m_helperPointColors = ::fwComEd::helper::Array::New(pointColors);
-    }
-    if(cellColors)
-    {
-        m_helperCellColors = ::fwComEd::helper::Array::New(cellColors);
-    }
-    if(pointNormals)
-    {
-        m_helperPointNormals = ::fwComEd::helper::Array::New(pointNormals);
-    }
-    if(cellNormals)
-    {
-        m_helperCellNormals = ::fwComEd::helper::Array::New(cellNormals);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextPoint(const ::fwData::Mesh::PointValueType p[3]) throw(::fwData::Exception)
-{
-    ::fwData::Mesh::Id nbPoints = m_mesh->getNumberOfPoints();
-    ::fwData::Array::sptr points = m_mesh->getPointsArray();
-    size_t allocatedPts = points->empty() ? 0 : points->getSize().at(0);
-    if( allocatedPts <= nbPoints )
-    {
-        points->resize(list_of(allocatedPts + POINT_REALLOC_STEP), true);
-    }
-    m_helperPoints->setItem(list_of(nbPoints), p);
-    m_mesh->setNumberOfPoints(nbPoints+1);
-    return nbPoints;
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextPoint(::fwData::Mesh::PointValueType x,
-                                         ::fwData::Mesh::PointValueType y,
-                                         ::fwData::Mesh::PointValueType z) throw(::fwData::Exception)
-{
-    const ::fwData::Mesh::PointValueType p[3] = {x,y,z};
-    return this->insertNextPoint(p);
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::setPoint(::fwData::Mesh::Id id, const ::fwData::Mesh::PointValueType p[3])
-{
-    m_helperPoints->setItem(list_of(id), p);
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::setPoint(::fwData::Mesh::Id id,
-                    ::fwData::Mesh::PointValueType x,
-                    ::fwData::Mesh::PointValueType y,
-                    ::fwData::Mesh::PointValueType z )
-{
-    const ::fwData::Mesh::PointValueType p[3] = {x,y,z};
-    this->setPoint(id, p);
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::setPointColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4])
-{
-    m_helperPointColors->setItem(list_of(id), c);
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::setCellColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4])
-{
-    m_helperCellColors->setItem(list_of(id), c);
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::setPointNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3])
-{
-    m_helperPointNormals->setItem(list_of(id), n);
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::setCellNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3])
-{
-    m_helperCellNormals->setItem(list_of(id), n);
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellTypesEnum type,
-                                        const ::fwData::Mesh::CellValueType *cell,
-                                        size_t nb) throw(::fwData::Exception)
-{
-    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'NO_CELL'",
-            type != ::fwData::Mesh::NO_CELL || nb == 0);
-    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'POINT'",
-            type != ::fwData::Mesh::POINT || nb == 1);
-    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'EDGE'",
-            type != ::fwData::Mesh::EDGE || nb == 2);
-    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'TRIANGLE'",
-            type != ::fwData::Mesh::TRIANGLE || nb == 3);
-    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'QUAD'",
-            type != ::fwData::Mesh::QUAD || nb == 4);
-    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'POLY'",
-            type != ::fwData::Mesh::POLY || nb > 4);
-
-    ::fwData::Mesh::Id cellsDataSize = m_mesh->getCellDataSize();
-    ::fwData::Mesh::Id nbCells = m_mesh->getNumberOfCells();
-    ::fwData::Array::sptr cellTypes = m_mesh->getCellTypesArray();
-    ::fwData::Array::sptr cellDataOffsets = m_mesh->getCellDataOffsetsArray();
-    ::fwData::Array::sptr cellData = m_mesh->getCellDataArray();
-
-    size_t allocatedCellTypes       = cellTypes->empty() ? 0 : cellTypes->getSize().at(0);
-    size_t allocatedCellDataOffsets = cellDataOffsets->empty() ? 0 : cellDataOffsets->getSize().at(0);
-
-    if( allocatedCellTypes <= nbCells )
-    {
-        cellTypes->resize(list_of(allocatedCellTypes + CELL_REALLOC_STEP), true);
-    }
-    if( allocatedCellDataOffsets <= nbCells )
-    {
-        cellDataOffsets->resize(list_of(allocatedCellDataOffsets + CELL_REALLOC_STEP), true);
-    }
-
-
-    size_t allocatedCellData = cellData->empty() ? 0 : cellData->getSize().at(0);
-
-    if( allocatedCellData <= cellsDataSize + nb )
-    {
-        cellData->resize(list_of(allocatedCellData + CELLDATA_REALLOC_STEP), true);
-    }
-
-
-    const ::fwData::Mesh::CellTypes t[1] = {static_cast< ::fwData::Mesh::CellTypes >(type)};
-    m_helperCellTypes->setItem(list_of(nbCells), t);
-
-    ::fwData::Mesh::CellValueType *buf = reinterpret_cast< ::fwData::Mesh::CellValueType* >(
-            m_helperCellData->getBufferPtr(list_of(cellsDataSize), 0, sizeof(::fwData::Mesh::CellValueType))
-            );
-    std::copy(cell, cell+nb, buf);
-
-    const ::fwData::Mesh::CellDataOffsetType id[1] = {cellsDataSize};
-    m_helperCellDataOffsets->setItem(list_of(nbCells), id);
-
-
-    cellsDataSize += nb;
-    m_mesh->setCellDataSize(cellsDataSize);
-    m_mesh->setNumberOfCells(nbCells + 1);
-    return nbCells;
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p) throw(::fwData::Exception)
-{
-    ::fwData::Mesh::CellValueType point[1] = {p};
-    return this->insertNextCell(::fwData::Mesh::POINT, point, 1);
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p1,
-                                        ::fwData::Mesh::CellValueType p2) throw(::fwData::Exception)
-{
-    ::fwData::Mesh::CellValueType p[2] = {p1, p2};
-    return this->insertNextCell(::fwData::Mesh::EDGE, p, 2);
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p1,
-                                        ::fwData::Mesh::CellValueType p2,
-                                        ::fwData::Mesh::CellValueType p3) throw(::fwData::Exception)
-{
-    ::fwData::Mesh::CellValueType p[3] = {p1, p2, p3};
-    return this->insertNextCell(::fwData::Mesh::TRIANGLE, p, 3);
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p1,
-                                        ::fwData::Mesh::CellValueType p2,
-                                        ::fwData::Mesh::CellValueType p3,
-                                        ::fwData::Mesh::CellValueType p4) throw(::fwData::Exception)
-{
-    ::fwData::Mesh::CellValueType p[4] = {p1, p2, p3, p4};
-    return this->insertNextCell(::fwData::Mesh::QUAD, p, 4);
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::PointsMultiArrayType Mesh::getPoints() const
-{
-    return ::fwData::Mesh::PointsMultiArrayType(
-            static_cast< ::fwData::Mesh::PointsMultiArrayType::element* >(m_helperPoints->getBuffer()),
-            ::boost::extents[m_mesh->getNumberOfPoints()][3]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::CellTypesMultiArrayType Mesh::getCellTypes() const
-{
-    return ::fwData::Mesh::CellTypesMultiArrayType(
-            static_cast< ::fwData::Mesh::CellTypesMultiArrayType::element *> (m_helperCellTypes->getBuffer()),
-            boost::extents[m_mesh->getNumberOfCells()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::CellDataMultiArrayType Mesh::getCellData() const
-{
-    return ::fwData::Mesh::CellDataMultiArrayType(
-            static_cast< ::fwData::Mesh::CellDataMultiArrayType::element * >(m_helperCellData->getBuffer()),
-            ::boost::extents[m_mesh->getCellDataSize()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::CellDataOffsetsMultiArrayType Mesh::getCellDataOffsets() const
-{
-    return ::fwData::Mesh::CellDataOffsetsMultiArrayType(
-            static_cast< ::fwData::Mesh::CellDataOffsetsMultiArrayType::element *>(m_helperCellDataOffsets->getBuffer()),
-            ::boost::extents[m_mesh->getNumberOfCells()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::PointColorsMultiArrayType Mesh::getPointColors() const
-{
-    ::fwData::Array::sptr pointColors = m_mesh->getPointColorsArray();
-    return ::fwData::Mesh::PointColorsMultiArrayType(
-            static_cast< ::fwData::Mesh::PointColorsMultiArrayType::element *>(m_helperPointColors->getBuffer()),
-            ::boost::extents[m_mesh->getNumberOfPoints()][pointColors->getNumberOfComponents()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::CellColorsMultiArrayType Mesh::getCellColors() const
-{
-    ::fwData::Array::sptr cellColors = m_mesh->getCellColorsArray();
-    return ::fwData::Mesh::CellColorsMultiArrayType(
-            static_cast< ::fwData::Mesh::CellColorsMultiArrayType::element *>(m_helperCellColors->getBuffer()),
-            ::boost::extents[m_mesh->getNumberOfCells()][cellColors->getNumberOfComponents()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::PointNormalsMultiArrayType Mesh::getPointNormals() const
-{
-    ::fwData::Array::sptr pointNormals = m_mesh->getPointNormalsArray();
-    return ::fwData::Mesh::PointNormalsMultiArrayType(
-            static_cast< ::fwData::Mesh::PointNormalsMultiArrayType::element *>(m_helperPointNormals->getBuffer()),
-            ::boost::extents[m_mesh->getNumberOfPoints()][pointNormals->getNumberOfComponents()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::CellNormalsMultiArrayType Mesh::getCellNormals() const
-{
-    ::fwData::Array::sptr cellNormals = m_mesh->getCellNormalsArray();
-    return ::fwData::Mesh::CellNormalsMultiArrayType(
-            static_cast< ::fwData::Mesh::CellNormalsMultiArrayType::element *>(m_helperCellNormals->getBuffer()),
-            ::boost::extents[m_mesh->getNumberOfCells()][cellNormals->getNumberOfComponents()]
-            );
-}
-
-//------------------------------------------------------------------------------
-
-::fwData::Mesh::csptr Mesh::getMesh() const
-{
-    return m_mesh;
-}
-
-//------------------------------------------------------------------------------
-
-bool Mesh::isClosed()
-{
-    bool isClosed = false;
-
-    ::fwData::Mesh::Id cellDataSize = m_mesh->getCellDataSize();
-    ::fwData::Mesh::Id nbOfCells = m_mesh->getNumberOfCells();
-
-    ::fwData::Mesh::CellValueType* cellDataBegin = m_helperCellData->begin< ::fwData::Mesh::CellValueType >();
-    ::fwData::Mesh::CellValueType* cellDataEnd = cellDataBegin + cellDataSize;
-    ::fwData::Mesh::CellDataOffsetType* cellDataOffsetsBegin = m_helperCellDataOffsets->begin< ::fwData::Mesh::CellDataOffsetType >();
-    ::fwData::Mesh::CellDataOffsetType* cellDataOffsetsEnd = cellDataOffsetsBegin + nbOfCells;
-    ::fwData::Mesh::CellTypes* cellTypesBegin = m_helperCellTypes->begin< ::fwData::Mesh::CellTypes >();
-
-    isClosed = ::fwMath::isBorderlessSurface(cellDataBegin,
-                                             cellDataEnd, cellDataOffsetsBegin,
-                                             cellDataOffsetsEnd, cellTypesBegin );
-    return isClosed;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace helper
-
-} // namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/MsgHelper.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/MsgHelper.cpp
deleted file mode 100644
index cb34ca5..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/MsgHelper.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/factory/message/new.hpp>
-
-#include "fwComEd/helper/MsgHelper.hpp"
-
-namespace fwComEd
-{
-
-namespace helper
-{
-
-//------------------------------------------------------------------------------
-
-::fwServices::ObjectMsg::sptr MsgHelper::createAssociatedMsg( ::fwData::Object::csptr _obj)
-{
-    SLM_ASSERT("Object is NULL", _obj);
-    const std::string msgType = MsgHelper::getAssociatedMsgType(_obj);
-
-    ::fwServices::ObjectMsg::sptr objectMsg = ::fwServices::factory::message::New(msgType);
-    OSLM_ASSERT(msgType << " creation failed", objectMsg);
-
-    return objectMsg;
-}
-
-//------------------------------------------------------------------------------
-
-const std::string MsgHelper::getAssociatedMsgType( ::fwData::Object::csptr _obj)
-{
-    SLM_ASSERT("Object is NULL", _obj);
-    // default ObjectMsg type
-    std::string msgType = "::fwServices::ObjectMsg";
-    std::string objType = _obj->getLeafClassname();
-
-    // TODO: improve association system
-    std::string objMsgType = "::fwComEd::" + objType + "Msg";
-    // check if instantiation of msgType is possible, standard Factory stop application if type is unknown
-    ::fwServices::ObjectMsg::sptr objMsg = ::fwServices::factory::message::New( objMsgType ) ;
-    OSLM_WARN_IF("No specific ObjectMsg type found for Object "<<objType
-            << " type "<<objMsgType<<" is unknown.", !objMsg);
-    if(objMsg)
-    {
-        // Instantiation of msgType is possible
-        msgType = objMsgType;
-    }
-
-    return msgType;
-}
-
-//------------------------------------------------------------------------------
-
-} // helper
-} // fwComEd
-
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/SeriesDB.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/SeriesDB.cpp
deleted file mode 100644
index 7bc0087..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/SeriesDB.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwMedData/SeriesDB.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include "fwComEd/helper/SeriesDB.hpp"
-
-namespace fwComEd
-{
-namespace helper
-{
-
-//-----------------------------------------------------------------------------
-
-SeriesDB::SeriesDB( ::fwMedData::SeriesDB::wptr seriesDB )
-    :   m_seriesDBMsg ( ::fwComEd::SeriesDBMsg::New() ),
-        m_seriesDB ( seriesDB )
-{}
-
-//-----------------------------------------------------------------------------
-
-SeriesDB::~SeriesDB()
-{}
-
-//-----------------------------------------------------------------------------
-
-void SeriesDB::add( ::fwMedData::Series::sptr newSeries )
-{
-    ::fwMedData::SeriesDB::sptr seriesDB = m_seriesDB.lock();
-    OSLM_ASSERT( "The object " << newSeries->getID() << " must not exist in SeriesDB." ,
-                 std::find(seriesDB->begin(), seriesDB->end(), newSeries) == seriesDB->end());
-
-    // Modify SeriesDB
-    seriesDB->getContainer().push_back( newSeries );
-
-    // Modify message
-    m_seriesDBMsg->appendAddedSeries( newSeries );
-
-}
-
-//-----------------------------------------------------------------------------
-
-void SeriesDB::remove( ::fwMedData::Series::sptr oldSeries )
-{
-    ::fwMedData::SeriesDB::sptr seriesDB = m_seriesDB.lock();
-    ::fwMedData::SeriesDB::iterator iter = std::find(seriesDB->begin(), seriesDB->end(), oldSeries);
-    OSLM_ASSERT( "The object " << oldSeries->getID() << " must exist in SeriesDB." ,
-                 iter != seriesDB->end());
-
-    // Modify SeriesDB
-    seriesDB->getContainer().erase( iter );
-
-    // Modify message
-    m_seriesDBMsg->appendRemovedSeries( oldSeries );
-
-}
-
-//-----------------------------------------------------------------------------
-
-void SeriesDB::clear()
-{
-    ::fwMedData::SeriesDB::sptr seriesDB = m_seriesDB.lock();
-
-    while (!seriesDB->empty())
-    {
-        this->remove(seriesDB->front());
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void SeriesDB::merge(::fwMedData::SeriesDB::sptr seriesDBIn)
-{
-    ::fwMedData::SeriesDB::ContainerType& vectIn = seriesDBIn->getContainer();
-    BOOST_FOREACH(::fwMedData::Series::sptr series, vectIn)
-    {
-        this->add(series);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void SeriesDB::notify( ::fwServices::IService::sptr serviceSource, bool notifySource )
-{
-    if ( !m_seriesDBMsg->getEventIds().empty() )
-    {
-        ::fwServices::IEditionService::notify( serviceSource, m_seriesDB.lock(), m_seriesDBMsg , notifySource );
-    }
-    SLM_INFO_IF("Sorry, this helper cannot notify his message because the message is empty.",
-                m_seriesDBMsg->getEventIds().empty());
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace helper
-} // namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/helper/Vector.cpp b/SrcLib/core/fwComEd/src/fwComEd/helper/Vector.cpp
deleted file mode 100644
index d706571..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/helper/Vector.cpp
+++ /dev/null
@@ -1,92 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/bind.hpp>
-
-#include <fwData/Vector.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include "fwComEd/helper/Vector.hpp"
-
-namespace fwComEd
-{
-namespace helper
-{
-
-//-----------------------------------------------------------------------------
-
-Vector::Vector( ::fwData::Vector::wptr _vector )
-    :   m_vectorMsg ( ::fwComEd::VectorMsg::New() ),
-        m_vector ( _vector )
-{}
-
-//-----------------------------------------------------------------------------
-
-Vector::~Vector()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Vector::add( ::fwData::Object::sptr _newObject )
-{
-    ::fwData::Vector::sptr vector = m_vector.lock();
-    OSLM_ASSERT( "The object " << _newObject->getID() << " must not exist in vector." ,
-                   std::find(vector->begin(), vector->end(), _newObject) == vector->end());
-
-    // Modify vector
-    vector->getContainer().push_back(_newObject );
-
-    // Modify message
-    m_vectorMsg->appendAddedObject( _newObject );
-
-}
-
-//-----------------------------------------------------------------------------
-
-void Vector::remove( ::fwData::Object::sptr _oldObject )
-{
-    ::fwData::Vector::sptr vector = m_vector.lock();
-    ::fwData::Vector::iterator iter = std::find(vector->begin(), vector->end(), _oldObject);
-    OSLM_ASSERT( "The object " << _oldObject->getID() << " must exist in vector." ,
-                   iter != vector->end());
-
-    // Modify vector
-    vector->getContainer().erase( iter );
-
-    // Modify message
-    m_vectorMsg->appendRemovedObject( _oldObject );
-
-}
-
-//-----------------------------------------------------------------------------
-
-void Vector::clear()
-{
-    ::fwData::Vector::sptr vector = m_vector.lock();
-
-    while (!vector->empty())
-    {
-        this->remove(vector->front());
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void Vector::notify( ::fwServices::IService::sptr _serviceSource, bool notifySource )
-{
-    if ( m_vectorMsg->getEventIds().size() > 0 )
-    {
-        ::fwServices::IEditionService::notify( _serviceSource, m_vector.lock(), m_vectorMsg , notifySource );
-    }
-    SLM_INFO_IF("Sorry, this helper cannot notify his message because the message is empty.",
-                m_vectorMsg->getEventIds().size() == 0);
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace helper
-} // namespace fwComEd
diff --git a/SrcLib/core/fwComEd/src/fwComEd/parser/Composite.cpp b/SrcLib/core/fwComEd/src/fwComEd/parser/Composite.cpp
deleted file mode 100644
index 46adf92..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/parser/Composite.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include "fwComEd/parser/Composite.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::Composite, ::fwData::Composite );
-
-namespace fwComEd
-{
-namespace parser
-{
-
-//------------------------------------------------------------------------------
-
-bool Composite::refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement )
-{
-    bool isOk = true;
-
-    for(    ::fwRuntime::ConfigurationElement::Iterator configEltIter = _cfgElement->begin() ;
-            configEltIter != _cfgElement->end();
-            ++configEltIter)
-    {
-        std::string subElementName = (*configEltIter)->getName();
-        if(     subElementName != "service" &&
-                subElementName != "serviceList"    )
-        {
-            OSLM_ERROR("xml subelement \""<< subElementName <<"\" for element object is not supported for the moment when you use a reference on item composite.");
-            isOk = false;
-        }
-    }
-
-    return isOk;
-}
-
-//------------------------------------------------------------------------------
-
-void Composite::updating( ) throw( ::fwTools::Failed)
-{
-    SLM_FATAL("Sorry, this method is depreciated.");
-}
-
-//------------------------------------------------------------------------------
-
-void Composite::createConfig( ::fwTools::Object::sptr _obj )
-{
-    // Declaration of attributes values
-    const std::string OBJECT_BUILD_MODE = "src";
-    const std::string BUILD_OBJECT = "new";
-    const std::string GET_OBJECT = "ref";
-
-    ::fwData::Composite::sptr dataComposite = ::fwData::Composite::dynamicCast(_obj);
-    SLM_ASSERT("Sorry, object given in parameter is not a fwData::Composite",dataComposite);
-
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElement::csptr elem, m_cfg->getElements() )
-    {
-        if( elem->getName() == "item" )
-        {
-
-            // Test build mode
-            std::string buildMode = BUILD_OBJECT;
-
-            if ( elem->hasAttribute( OBJECT_BUILD_MODE ) )
-            {
-                buildMode = elem->getExistingAttributeValue( OBJECT_BUILD_MODE );
-                OSLM_ASSERT( "Sorry, buildMode \""<< buildMode <<"\" is not supported by the application.", buildMode == BUILD_OBJECT || buildMode == GET_OBJECT );
-            }
-
-            SLM_ASSERT( "Sorry, the xml element \"item\" must have an attribute named \"key\" .", elem->hasAttribute("key") );
-            std::string key = elem->getExistingAttributeValue("key");
-            SLM_ASSERT( "Sorry, the xml element \"item\" must have an attribute named \"key\" not empty.", ! key.empty() );
-            SLM_ASSERT( "Sorry, xml element item must have one (and only one) xml sub-element \"object\".", elem->size() == 1 && (*elem->getElements().begin())->getName() == "object" );
-
-            if( buildMode == BUILD_OBJECT )
-            {
-                // Test if key already exist in composite
-                OSLM_ASSERT("Sorry the key "<< key <<" already exists in the composite.", dataComposite->find( key ) == dataComposite->end() );
-
-                // Create and manage object config
-                ::fwServices::AppConfigManager::sptr ctm = ::fwServices::AppConfigManager::New();
-                ctm->setConfig( * ( elem->getElements().begin() ) );
-                m_ctmContainer.push_back( ctm );
-                ctm->create();
-                ::fwData::Object::sptr localObj = ctm->getConfigRoot< ::fwData::Object >();
-
-                // Add object
-                SLM_ASSERT("Sorry an ::fwData::Composite can contain only ::fwData::Object", localObj );
-                (*dataComposite)[ key ] = localObj;
-
-            }
-            else // if( buildMode == GET_OBJECT )
-            {
-                SLM_FATAL("ACH => Todo");
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Composite::startConfig()
-{
-    BOOST_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->start();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Composite::updateConfig()
-{
-    BOOST_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->update();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Composite::stopConfig()
-{
-    BOOST_REVERSE_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->stop();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Composite::destroyConfig()
-{
-    BOOST_REVERSE_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->destroy();
-    }
-    m_ctmContainer.clear();
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace parser
-} //namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/parser/GenericField.cpp b/SrcLib/core/fwComEd/src/fwComEd/parser/GenericField.cpp
deleted file mode 100644
index a4b03b1..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/parser/GenericField.cpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwData/GenericField.hpp>
-#include <fwData/Boolean.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/String.hpp>
-
-#include "fwComEd/parser/GenericField.hpp"
-
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::BooleanParser, ::fwData::Boolean );
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::IntegerParser, ::fwData::Integer );
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::FloatParser, ::fwData::Float );
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::StringParser, ::fwData::String );
-
-
-namespace fwComEd
-{
-namespace parser
-{
-
-//------------------------------------------------------------------------------
-
-void GenericField::updating( ) throw(fwTools::Failed)
-{
-    SLM_FATAL("Sorry, this method is depreciated.");
-}
-
-//------------------------------------------------------------------------------
-
-void GenericField::createConfig( ::fwTools::Object::sptr _obj )
-{
-    ::fwData::GenericFieldBase::sptr field = ::fwData::GenericFieldBase::dynamicCast( _obj );
-    SLM_ASSERT("GenericField not instanced", field);
-
-    ::fwRuntime::ConfigurationElementContainer configs = m_cfg->findAllConfigurationElement("value");
-    SLM_ASSERT("GenericField config must contain at most one tag <value>...</value>", configs.size() <= 1);
-
-    if ( configs.size() >= 1 )
-    {
-        ::fwRuntime::ConfigurationElement::sptr config = *configs.begin();
-        std::string input = config->getValue();
-        field->fromString(input);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace parser
-} //namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/parser/List.cpp b/SrcLib/core/fwComEd/src/fwComEd/parser/List.cpp
deleted file mode 100644
index f21993b..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/parser/List.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwData/List.hpp>
-
-#include "fwComEd/parser/List.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::List, ::fwData::List );
-
-namespace fwComEd
-{
-namespace parser
-{
-
-//------------------------------------------------------------------------------
-
-bool List::refObjectValidator( ::fwRuntime::ConfigurationElement::sptr _cfgElement )
-{
-    bool isOk = true;
-
-    for(    ::fwRuntime::ConfigurationElement::Iterator configEltIter = _cfgElement->begin() ;
-            configEltIter != _cfgElement->end();
-            ++configEltIter)
-    {
-        std::string subElementName = (*configEltIter)->getName();
-        if(     subElementName != "service" &&
-                subElementName != "serviceList"    )
-        {
-            OSLM_ERROR("xml subelement \""<< subElementName <<"\" for element object is not supported for the moment when you use a reference on item List.");
-            isOk = false;
-        }
-    }
-
-    return isOk;
-}
-
-//------------------------------------------------------------------------------
-
-void List::updating( ) throw(fwTools::Failed)
-{
-    SLM_FATAL("Sorry, this method is depreciated.");
-}
-
-//------------------------------------------------------------------------------
-
-void List::createConfig( ::fwTools::Object::sptr _obj )
-{
-    // Declaration of attributes values
-    const std::string OBJECT_BUILD_MODE = "src";
-    const std::string BUILD_OBJECT = "new";
-    const std::string GET_OBJECT = "ref";
-
-    ::fwData::List::sptr dataList = ::fwData::List::dynamicCast(_obj);
-    SLM_ASSERT("Sorry, object given in parameter is not a fwData::List",dataList);
-
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElement::csptr elem, m_cfg->getElements() )
-    {
-        if( elem->getName() == "item" )
-        {
-
-            // Test build mode
-            std::string buildMode = BUILD_OBJECT;
-
-
-            if ( elem->hasAttribute( OBJECT_BUILD_MODE ) )
-            {
-                buildMode = elem->getExistingAttributeValue( OBJECT_BUILD_MODE );
-                OSLM_ASSERT( "Sorry, buildMode \""<< buildMode <<"\" is not supported by the application.", buildMode == BUILD_OBJECT || buildMode == GET_OBJECT );
-            }
-
-            if( buildMode == BUILD_OBJECT )
-            {
-
-                // Create and manage object config
-                ::fwServices::AppConfigManager::sptr ctm = ::fwServices::AppConfigManager::New();
-                ctm->setConfig( * ( elem->getElements().begin() ) );
-                m_ctmContainer.push_back( ctm );
-                ctm->create();
-                ::fwData::Object::sptr localObj = ctm->getConfigRoot< ::fwData::Object >();
-
-                // Add object
-                SLM_ASSERT("Sorry an ::fwData::List can contain only ::fwData::Object", localObj );
-                dataList->getContainer().push_back( localObj );
-
-            }
-            else // if( buildMode == GET_OBJECT )
-            {
-                SLM_FATAL("ACH => Todo");
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void List::startConfig()
-{
-    BOOST_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->start();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void List::updateConfig()
-{
-    BOOST_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->update();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void List::stopConfig()
-{
-    BOOST_REVERSE_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->stop();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void List::destroyConfig()
-{
-    BOOST_REVERSE_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->destroy();
-    }
-    m_ctmContainer.clear();
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace parser
-} //namespace fwComEd
-
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/parser/Object.cpp b/SrcLib/core/fwComEd/src/fwComEd/parser/Object.cpp
deleted file mode 100644
index 02c1839..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/parser/Object.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Object.hpp>
-
-#include <fwServices/macros.hpp>
-
-#include "fwComEd/parser/Object.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser , ::fwComEd::parser::Object , ::fwData::Object ) ;
-
-namespace fwComEd
-{
-namespace parser
-{
-
-//------------------------------------------------------------------------------
-
-Object::Object( )
-{}
-
-//------------------------------------------------------------------------------
-
-Object::~Object()
-{}
-
-//------------------------------------------------------------------------------
-
-bool Object::refObjectValidator( ::fwRuntime::ConfigurationElement::csptr _cfgElement )
-{
-    bool isOk = true;
-
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElement::csptr elem, _cfgElement->getElements() )
-    {
-        std::string subElementName = elem->getName();
-        if(     subElementName != "service" &&
-                subElementName != "serviceList"    )
-        {
-            OSLM_ERROR("xml subelement \""<< subElementName <<"\" for element object is not supported for the moment when you use a reference on item composite.");
-            isOk = false;
-        }
-    }
-
-    return isOk;
-}
-
-//------------------------------------------------------------------------------
-
-void Object::updating( ) throw(fwTools::Failed)
-{
-    SLM_FATAL("Sorry, this method is depreciated");
-}
-
-
-//------------------------------------------------------------------------------
-
-void Object::createConfig( ::fwTools::Object::sptr _obj )
-{
-    // Declaration of attributes values
-    const std::string OBJECT_BUILD_MODE = "src";
-    const std::string BUILD_OBJECT = "new";
-    const std::string GET_OBJECT = "ref";
-
-    ::fwData::Object::sptr associatedObject = ::fwData::Object::dynamicCast(_obj);
-    SLM_ASSERT("associatedObject not instanced", associatedObject);
-
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElement::csptr elem, m_cfg->getElements() )
-    {
-
-        if( elem->getName() == "item" )
-        {
-            // Test build mode
-            std::string buildMode = BUILD_OBJECT;
-
-            if ( elem->hasAttribute( OBJECT_BUILD_MODE ) )
-            {
-                buildMode = elem->getExistingAttributeValue( OBJECT_BUILD_MODE );
-                OSLM_ASSERT( "Sorry, buildMode \""<< buildMode <<"\" is not supported by the application.", buildMode == BUILD_OBJECT || buildMode == GET_OBJECT );
-            }
-
-
-            SLM_ASSERT( "Sorry, the xml element \"item\" must have an attribute named \"key\" .", elem->hasAttribute("key") );
-            std::string key = elem->getExistingAttributeValue("key");
-            SLM_ASSERT( "Sorry, the xml element \"item\" must have an attribute named \"key\" not empty.", ! key.empty() );
-            SLM_ASSERT( "Sorry, xml element item must have one (and only one) xml sub-element \"object\".", elem->size() == 1 && (*(elem->getElements().begin()))->getName() == "object" );
-
-            if( buildMode == BUILD_OBJECT )
-            {
-                // Test if key already exist in object
-                OSLM_ASSERT("Sorry the key "<< key <<" already exists in the object.", !associatedObject->getField( key ) );
-
-                // Create and manage object config
-                ::fwServices::AppConfigManager::sptr ctm = ::fwServices::AppConfigManager::New();
-                ctm->setConfig( *(elem->getElements().begin()) );
-                m_ctmContainer.push_back( ctm );
-                ctm->create();
-                ::fwData::Object::sptr localObj = ctm->getConfigRoot< ::fwData::Object >();
-
-                // Add object
-                associatedObject->setField(key, localObj);
-            }
-            else // if( buildMode == GET_OBJECT )
-            {
-                SLM_FATAL("ACH => Todo");
-                // ToDo
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Object::startConfig()
-{
-    BOOST_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->start();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Object::updateConfig()
-{
-    BOOST_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->update();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Object::stopConfig()
-{
-    BOOST_REVERSE_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->stop();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Object::destroyConfig()
-{
-    BOOST_REVERSE_FOREACH( ::fwServices::AppConfigManager::sptr ctm, m_ctmContainer )
-    {
-        ctm->destroy();
-    }
-    m_ctmContainer.clear();
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace parser
-} //namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/src/fwComEd/parser/TransformationMatrix3D.cpp b/SrcLib/core/fwComEd/src/fwComEd/parser/TransformationMatrix3D.cpp
deleted file mode 100644
index 29ae279..0000000
--- a/SrcLib/core/fwComEd/src/fwComEd/parser/TransformationMatrix3D.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwServices/macros.hpp>
-#include <fwServices/Base.hpp>
-
-#include <fwData/TransformationMatrix3D.hpp>
-
-#include "fwComEd/parser/TransformationMatrix3D.hpp"
-
-fwServicesRegisterMacro( ::fwServices::IXMLParser, ::fwComEd::parser::TransformationMatrix3D, ::fwData::TransformationMatrix3D );
-
-namespace fwComEd
-{
-namespace parser
-{
-
-//------------------------------------------------------------------------------
-
-void TransformationMatrix3D::updating( ) throw(fwTools::Failed)
-{
-    SLM_FATAL("Sorry, this method is depreciated.");
-}
-
-//------------------------------------------------------------------------------
-
-void TransformationMatrix3D::createConfig( ::fwTools::Object::sptr _obj )
-{
-    ::fwData::TransformationMatrix3D::sptr matrix = ::fwData::TransformationMatrix3D::dynamicCast( _obj );
-    SLM_ASSERT("matrix not instanced", matrix);
-
-    BOOST_FOREACH( ::fwRuntime::ConfigurationElement::csptr elem, m_cfg->getElements() )
-    {
-        if ( elem->getName() == "matrix" )
-        {
-            std::string input = elem->getValue();
-            std::istringstream inputString( input );
-
-            matrix->getRefCoefficients().clear();
-            matrix->getRefCoefficients().reserve(16);
-
-            double coef;
-            for ( unsigned int k=0; k < 16; k++)
-            {
-                inputString >> coef;
-                matrix->getRefCoefficients().push_back( coef );
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace parser
-} //namespace fwComEd
-
diff --git a/SrcLib/core/fwComEd/test/CMakeLists.txt b/SrcLib/core/fwComEd/test/CMakeLists.txt
deleted file mode 100644
index 207087b..0000000
--- a/SrcLib/core/fwComEd/test/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-fwLoadProperties()
-
-find_package (Boost COMPONENTS date_time REQUIRED)
-find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
-
-
diff --git a/SrcLib/core/fwComEd/test/Properties.cmake b/SrcLib/core/fwComEd/test/Properties.cmake
deleted file mode 100644
index 447ac1b..0000000
--- a/SrcLib/core/fwComEd/test/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwComEdTest )
-set( VERSION  )
-set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwMedData fwServices fwComEd )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwComEd/test/cppunit.options b/SrcLib/core/fwComEd/test/cppunit.options
deleted file mode 100644
index d496f53..0000000
--- a/SrcLib/core/fwComEd/test/cppunit.options
+++ /dev/null
@@ -1,22 +0,0 @@
-CLASSTEST=[
-    'ConfigParserTest',
-    'CompositeMessageTest',
-    'FieldHelperTest',
-    'MessagesTest',
-    'VectorMsgTest',
-    'SeriesDBMsgTest',
-    ]
-
-USE = ['boost']
-LIB = [
-      'fwTools_0-1',
-      'fwCore_0-1',
-      'fwRuntime_0-3',
-      'fwData_0-1',
-      'fwMedData_0-1',
-      'fwServices_0-1',
-      'fwComEd_0-1',
-      'fwTest_0-1'
-      ]
-
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwComEd/test/tu/include/CompositeMessageTest.hpp b/SrcLib/core/fwComEd/test/tu/include/CompositeMessageTest.hpp
deleted file mode 100644
index 533c5ed..0000000
--- a/SrcLib/core/fwComEd/test/tu/include/CompositeMessageTest.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TU_COMPOSITEMESSAGETEST_HPP_
-#define _FWCOMED_TU_COMPOSITEMESSAGETEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
-
-namespace fwComEd
-{
-namespace ut
-{
-
-/**
- * @brief   Test ProcessObject building from a ConfigurationElement and composite message.
- * @see     ICompositeParser
- * @see     CompositeEditor
- * @see     CompositeMsg
- */
-class CompositeMessageTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( CompositeMessageTest );
-    CPPUNIT_TEST( testCompositeMessage );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    // fonctions de tests
-    /// Test the compositeMsg with sending and receiving the message in the test services
-    void testCompositeMessage();
-
-private:
-    /// Create a configurationElement to build the composite
-    ::fwRuntime::ConfigurationElement::sptr buildConfig();
-};
-
-} //namespace ut
-} //namespace fwComEd
-
-#endif // _FWCOMED_TU_COMPOSITEMESSAGETEST_HPP_
diff --git a/SrcLib/core/fwComEd/test/tu/include/ConfigParserTest.hpp b/SrcLib/core/fwComEd/test/tu/include/ConfigParserTest.hpp
deleted file mode 100644
index 2a399ba..0000000
--- a/SrcLib/core/fwComEd/test/tu/include/ConfigParserTest.hpp
+++ /dev/null
@@ -1,173 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TU_CONFIGPARSERTEST_HPP_
-#define _FWCOMED_TU_CONFIGPARSERTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
-
-
-namespace fwComEd
-{
-namespace ut
-{
-
-/**
- * @brief   Test ProcessObject building from a ConfigurationElement and composite message.
- * @see     ICompositeParser
- * @see     CompositeEditor
- * @see     CompositeMsg
- */
-class ConfigParserTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( ConfigParserTest );
-    CPPUNIT_TEST( testObjectCreationWithConfig );
-    CPPUNIT_TEST( testBuildComposite );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-
-    void setUp();
-    void tearDown();
-
-    /// test object with services creation from a configuration
-    void testObjectCreationWithConfig();
-
-    /// Test the composite building
-    void testBuildComposite();
-
-private:
-    /// Create a configurationElement to build an object
-    ::fwRuntime::ConfigurationElement::sptr buildObjectConfig();
-
-    /// Create a configurationElement to build the composite
-    ::fwRuntime::ConfigurationElement::sptr buildCompositeConfig();
-};
-
-
-/**
- * @brief   Service type for test.
- */
-class TestService : public ::fwServices::IService
-{
-public :
-    fwCoreServiceClassDefinitionsMacro ( (TestService)(::fwServices::IService) ) ;
-    TestService() throw()
-    :   m_isUpdated(false),
-        m_isUpdatedMessage(false)
-        {}
-
-    virtual ~TestService() throw() {}
-
-    /// return true if the service is updated with updating() method
-    bool getIsUpdated() { return m_isUpdated; }
-
-    /// return true if the service is updated with updating(msg) method
-    bool getIsUpdatedMessage() { return m_isUpdatedMessage; }
-
-    /// return the message receiving in updating(msg) method
-    ::fwServices::ObjectMsg::sptr getMessage() { return m_compoMsg; }
-
-    const std::string & getMessageEvent(){return m_messageEvent;}
-
-
-protected:
-    virtual void configuring() throw( ::fwTools::Failed ) {}
-    virtual void starting() throw(::fwTools::Failed) {}
-    virtual void stopping() throw(::fwTools::Failed) {}
-    virtual void updating() throw(::fwTools::Failed) {}
-    virtual void info( std::ostream &_sstream ) {_sstream << "TestService" ;}
-
-    bool m_isUpdated;
-    bool m_isUpdatedMessage;
-    std::string m_messageEvent;
-    ::fwServices::ObjectMsg::sptr m_compoMsg;
-};
-
-/**
- * @brief   Test service implementation for composite
- */
-class TestServiceImplementationComposite : public TestService
-{
-
-public :
-    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementationComposite)(::fwComEd::ut::TestService) ) ;
-    TestServiceImplementationComposite() throw() {};
-    virtual ~TestServiceImplementationComposite() throw() {};
-
-    virtual void configuring() throw( ::fwTools::Failed ) {};
-    virtual void starting() throw(::fwTools::Failed) {};
-    virtual void stopping() throw(::fwTools::Failed) {
-        SLM_TRACE_FUNC();
-    };
-    virtual void updating() throw(::fwTools::Failed) { m_isUpdated = true; };
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-    {
-        ::fwComEd::CompositeMsg::csptr compositeMessage = ::fwComEd::CompositeMsg::dynamicConstCast( _msg );
-        m_messageEvent.clear();
-
-        if (compositeMessage)
-        {
-            if( compositeMessage->hasEvent(::fwComEd::CompositeMsg::ADDED_KEYS))
-            {
-                m_messageEvent += ::fwComEd::CompositeMsg::ADDED_KEYS;
-            }
-            if( compositeMessage->hasEvent(::fwComEd::CompositeMsg::CHANGED_KEYS))
-            {
-                m_messageEvent += ::fwComEd::CompositeMsg::CHANGED_KEYS;
-            }
-            if( compositeMessage->hasEvent(::fwComEd::CompositeMsg::REMOVED_KEYS))
-            {
-                m_messageEvent += ::fwComEd::CompositeMsg::REMOVED_KEYS;
-            }
-
-            m_isUpdatedMessage = true;
-            m_compoMsg = ::boost::const_pointer_cast< ::fwServices::ObjectMsg >( _msg ) ;
-        }
-    };
-};
-
-/**
- * @brief   Test service implementation for image
- */
-class TestServiceImplementationImage : public TestService
-{
-
-public :
-    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementationImage)(::fwComEd::ut::TestService) ) ;
-    TestServiceImplementationImage() throw() {};
-    virtual ~TestServiceImplementationImage() throw() {};
-
-    virtual void configuring() throw( ::fwTools::Failed ) {};
-    virtual void starting() throw(::fwTools::Failed) {};
-    virtual void stopping() throw(::fwTools::Failed) {};
-    virtual void updating() throw(::fwTools::Failed) { m_isUpdated = true; };
-    virtual void receiving( ::boost::shared_ptr< const ::fwServices::ObjectMsg > _msg ) throw(::fwTools::Failed)
-    {
-        ::fwComEd::ImageMsg::csptr imageMessage = ::fwComEd::ImageMsg::dynamicConstCast( _msg );
-        if (imageMessage && imageMessage->hasEvent(::fwComEd::ImageMsg::SLICE_INDEX))
-        {
-            // if receiving a imageMsg : tag service is updated
-            m_isUpdatedMessage = true;
-            m_compoMsg = ::boost::const_pointer_cast< ::fwServices::ObjectMsg >( _msg ) ;
-        }
-    };
-};
-
-} //namespace ut
-} //namespace fwComEd
-
-#endif // _FWCOMED_TU_CONFIGPARSERTEST_HPP_
diff --git a/SrcLib/core/fwComEd/test/tu/include/FieldHelperTest.hpp b/SrcLib/core/fwComEd/test/tu/include/FieldHelperTest.hpp
deleted file mode 100644
index 3698a83..0000000
--- a/SrcLib/core/fwComEd/test/tu/include/FieldHelperTest.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TU_FIELDHELPERTEST_HPP_
-#define _FWCOMED_TU_FIELDHELPERTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-namespace fwComEd
-{
-namespace ut
-{
-
-/**
- * @brief   Test ProcessObject building from a ConfigurationElement and composite message.
- * @see     ICompositeParser
- * @see     CompositeEditor
- * @see     CompositeMsg
- */
-class FieldHelperTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( FieldHelperTest );
-    CPPUNIT_TEST( testHelper );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    // fonctions de tests
-    /// Test the compositeMsg with sending and receiving the message in the test services
-    void testHelper();
-
-};
-
-
-} //namespace ut
-} //namespace fwComEd
-
-#endif // _FWCOMED_TU_FIELDHELPERTEST_HPP_
diff --git a/SrcLib/core/fwComEd/test/tu/include/MessagesTest.hpp b/SrcLib/core/fwComEd/test/tu/include/MessagesTest.hpp
deleted file mode 100644
index 59bf2e8..0000000
--- a/SrcLib/core/fwComEd/test/tu/include/MessagesTest.hpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCOMED_TU_MESSAGESTEST_HPP_
-#define _FWCOMED_TU_MESSAGESTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwCore/base.hpp>
-
-namespace fwComEd
-{
-namespace ut
-{
-
-/**
- * @brief   Test specified object messages.
- */
-class MessagesTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MessagesTest );
-    CPPUNIT_TEST( testFloatMsg );
-    CPPUNIT_TEST( testImageMsg );
-    CPPUNIT_TEST( messageCreationTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    // fonctions de tests
-
-    /// test FloatMsg
-    void testFloatMsg();
-
-    /// test ImageMsg
-    void testImageMsg();
-
-    void messageCreationTest();
-};
-
-} //namespace ut
-} //namespace fwComEd
-
-#endif // _FWCOMED_TU_MESSAGESTEST_HPP_
diff --git a/SrcLib/core/fwComEd/test/tu/include/SeriesDBMsgTest.hpp b/SrcLib/core/fwComEd/test/tu/include/SeriesDBMsgTest.hpp
deleted file mode 100644
index 95bee69..0000000
--- a/SrcLib/core/fwComEd/test/tu/include/SeriesDBMsgTest.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_TU_SERIESDBMSGTEST_HPP__
-#define __FWCOMED_TU_SERIESDBMSGTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwComEd/SeriesDBMsg.hpp>
-
-#include "ConfigParserTest.hpp"
-
-namespace fwComEd
-{
-namespace ut
-{
-
-/**
- * @brief   Tests for SeriesDBMsg.
- */
-class SeriesDBMsgTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( SeriesDBMsgTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST( seriesDBHelperTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void basicTest();
-
-    void seriesDBHelperTest();
-
-};
-
-class SSeriesDBTest : public ::fwComEd::ut::TestService
-{
-
-public:
-    virtual ~SSeriesDBTest() throw() {};
-
-    fwCoreServiceClassDefinitionsMacro ( (SSeriesDBTest)(::fwComEd::ut::TestService) ) ;
-
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-    {
-        m_isUpdated = true;
-        m_seriesDBMsg = ::fwComEd::SeriesDBMsg::dynamicConstCast( _msg ) ;
-    }
-
-    ::fwComEd::SeriesDBMsg::csptr m_seriesDBMsg;
-};
-
-} //namespace ut
-} //namespace fwComEd
-
-#endif // __FWCOMED_TU_SERIESDBMSGTEST_HPP__
diff --git a/SrcLib/core/fwComEd/test/tu/include/VectorMsgTest.hpp b/SrcLib/core/fwComEd/test/tu/include/VectorMsgTest.hpp
deleted file mode 100644
index c75df80..0000000
--- a/SrcLib/core/fwComEd/test/tu/include/VectorMsgTest.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWCOMED_TU_VECTORMSGTEST_HPP__
-#define __FWCOMED_TU_VECTORMSGTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwCore/base.hpp>
-
-#include "ConfigParserTest.hpp"
-
-namespace fwComEd
-{
-namespace ut
-{
-
-/**
- * @brief   Tests for VectorMsg.
- */
-class VectorMsgTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( VectorMsgTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST( vectorHelperTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void basicTest();
-
-    void vectorHelperTest();
-
-};
-
-class SVectorTest : public ::fwComEd::ut::TestService
-{
-
-public:
-    virtual ~SVectorTest() throw() {};
-
-    fwCoreServiceClassDefinitionsMacro ( (SVectorTest)(::fwComEd::ut::TestService) ) ;
-
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-    {
-        m_isUpdated = true;
-        m_vectMsg = ::fwComEd::VectorMsg::dynamicConstCast( _msg ) ;
-    }
-
-    ::fwComEd::VectorMsg::csptr m_vectMsg;
-};
-
-} //namespace ut
-} //namespace fwComEd
-
-#endif // __FWCOMED_TU_VECTORMSGTEST_HPP__
diff --git a/SrcLib/core/fwComEd/test/tu/src/CompositeMessageTest.cpp b/SrcLib/core/fwComEd/test/tu/src/CompositeMessageTest.cpp
deleted file mode 100644
index 1437132..0000000
--- a/SrcLib/core/fwComEd/test/tu/src/CompositeMessageTest.cpp
+++ /dev/null
@@ -1,225 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/chrono/duration.hpp>
-
-#include <fwData/Composite.hpp>
-#include <fwData/Image.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
-
-#include <fwTest/Exception.hpp>
-
-#include "ConfigParserTest.hpp"
-#include "CompositeMessageTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwComEd::ut::CompositeMessageTest );
-
-namespace fwComEd
-{
-namespace ut
-{
-
-static ::fwTest::Exception fwTestException(""); // force link with fwTest
-
-//------------------------------------------------------------------------------
-
-void CompositeMessageTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void CompositeMessageTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void CompositeMessageTest::testCompositeMessage()
-{
-    ::fwServices::registry::ActiveWorkers::sptr activeWorkers = ::fwServices::registry::ActiveWorkers::getDefault();
-    activeWorkers->initRegistry();
-
-    const std::string objAUUID = "imageUUID";
-    const std::string service1UUID = "service1UUID";
-    const std::string service2UUID = "service2UUID";
-
-    // build composite
-    ::fwRuntime::ConfigurationElement::sptr config = buildConfig() ;
-
-    // Create the object and its services from the configuration
-    ::fwServices::AppConfigManager::sptr configManager = ::fwServices::AppConfigManager::New();
-    configManager->setConfig( config );
-    configManager->create();
-    ::fwData::Composite::sptr compo = configManager->getConfigRoot< ::fwData::Composite >();
-
-    ::fwData::Object::sptr image = compo->getContainer()[objAUUID];
-
-    // get service 1
-    ::fwComEd::ut::TestService::sptr serviceCompo;
-    serviceCompo = ::fwComEd::ut::TestService::dynamicCast( ::fwServices::get(service1UUID) );
-    CPPUNIT_ASSERT(serviceCompo);
-
-    // get service 2
-    ::fwComEd::ut::TestService::sptr serviceCompo2;
-    serviceCompo2 = ::fwComEd::ut::TestService::dynamicCast( ::fwServices::get(service2UUID) );
-    CPPUNIT_ASSERT(serviceCompo2);
-
-    // start services
-    configManager->start();
-    CPPUNIT_ASSERT(serviceCompo->isStarted());
-    CPPUNIT_ASSERT(serviceCompo2->isStarted());
-
-    // register communication channel
-    ::fwServices::helper::SigSlotConnection::sptr helper = ::fwServices::helper::SigSlotConnection::New();
-    helper->connect( compo, serviceCompo, serviceCompo->getObjSrvConnections() );
-    helper->connect( compo, serviceCompo2, serviceCompo2->getObjSrvConnections() );
-
-    ::fwComEd::CompositeMsg::sptr compoMsg;
-    compoMsg = ::fwComEd::CompositeMsg::New();
-    compoMsg->appendAddedKey(objAUUID, image);
-    ::fwServices::IEditionService::notify(serviceCompo2, compo, compoMsg);
-
-    // Wait a little notification system
-    ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-    // test message is received
-    CPPUNIT_ASSERT(serviceCompo->getIsUpdatedMessage());
-    CPPUNIT_ASSERT(!serviceCompo2->getIsUpdatedMessage());
-    CPPUNIT_ASSERT_EQUAL(::fwComEd::CompositeMsg::ADDED_KEYS, serviceCompo->getMessageEvent());
-
-    ::fwData::Composite::sptr addedKeys = compoMsg->getAddedKeys();
-    CPPUNIT_ASSERT((*addedKeys).find(objAUUID) != (*addedKeys).end());
-    CPPUNIT_ASSERT_EQUAL(image, (*addedKeys)[objAUUID]);
-
-
-    ::fwData::Object::sptr newImage = ::fwData::Image::New();
-    compoMsg = ::fwComEd::CompositeMsg::New();
-    compoMsg->appendChangedKey(objAUUID, image, newImage);
-    ::fwServices::IEditionService::notify(serviceCompo2, compo, compoMsg);
-
-    // Wait a little notification system
-    ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-    // test message is received
-    CPPUNIT_ASSERT(serviceCompo->getIsUpdatedMessage());
-    CPPUNIT_ASSERT(!serviceCompo2->getIsUpdatedMessage());
-    CPPUNIT_ASSERT_EQUAL(::fwComEd::CompositeMsg::CHANGED_KEYS, serviceCompo->getMessageEvent());
-
-    ::fwData::Composite::sptr oldChangedKeys = compoMsg->getOldChangedKeys();
-    ::fwData::Composite::sptr newChangedKeys = compoMsg->getNewChangedKeys();
-    CPPUNIT_ASSERT((*oldChangedKeys).find(objAUUID) != (*oldChangedKeys).end() );
-    CPPUNIT_ASSERT_EQUAL(image, (*oldChangedKeys)[objAUUID]);
-    CPPUNIT_ASSERT((*newChangedKeys).find(objAUUID) != (*newChangedKeys).end() );
-    CPPUNIT_ASSERT_EQUAL(newImage, (*newChangedKeys)[objAUUID]);
-
-
-    compoMsg = ::fwComEd::CompositeMsg::New();
-    compoMsg->appendRemovedKey(objAUUID, image);
-    ::fwServices::IEditionService::notify(serviceCompo2, compo, compoMsg);
-
-    // Wait a little notification system
-    ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-    // test message is received
-    CPPUNIT_ASSERT(serviceCompo->getIsUpdatedMessage());
-    CPPUNIT_ASSERT(!serviceCompo2->getIsUpdatedMessage());
-    CPPUNIT_ASSERT_EQUAL(::fwComEd::CompositeMsg::REMOVED_KEYS, serviceCompo->getMessageEvent());
-
-    ::fwData::Composite::sptr removedKeys = compoMsg->getRemovedKeys();
-    CPPUNIT_ASSERT((*removedKeys).find(objAUUID) != (*removedKeys).end());
-    CPPUNIT_ASSERT_EQUAL(image, (*removedKeys)[objAUUID]);
-
-
-
-    // unregister communication channel
-    helper->disconnect();
-    helper.reset();
-
-    // stop services
-    configManager->stopAndDestroy();
-
-    activeWorkers->clearRegistry();
-}
-
-//------------------------------------------------------------------------------
-
-::boost::shared_ptr< ::fwRuntime::ConfigurationElement > CompositeMessageTest::buildConfig()
-{
-    // Composite
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object")) ;
-    cfg->setAttributeValue( "uid" , "compositeUUID") ;
-    cfg->setAttributeValue( "type" , "::fwData::Composite") ;
-
-
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > itemA = cfg->addConfigurationElement("item");
-     itemA->setAttributeValue( "key" , "imageUUID") ;
-
-
-    // composite object : image
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > objA = itemA->addConfigurationElement("object");
-    objA->setAttributeValue( "uid" , "imageUUID") ;
-    objA->setAttributeValue( "type" , "::fwData::Image") ;
-
-    // image's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > imageService = objA->addConfigurationElement("service");
-    imageService->setAttributeValue( "uid" , "myImageService" ) ;
-    imageService->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > imageService2 = objA->addConfigurationElement("service");
-    imageService2->setAttributeValue( "uid" , "myImageService2" ) ;
-    imageService2->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > itemB = cfg->addConfigurationElement("item");
-     itemB->setAttributeValue( "key" , "videoUUID") ;
-
-
-    // composite object : video
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > objB = itemB->addConfigurationElement("object");
-    objB->setAttributeValue( "uid" , "videoUUID") ;
-    //objB->setAttributeValue( "id" , "videoUUID") ;
-    objB->setAttributeValue( "type" , "::fwData::Video") ;
-
-    // composite's service 1
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > service = cfg->addConfigurationElement("service");
-    service->setAttributeValue( "uid" , "service1UUID" ) ;
-    service->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationComposite" ) ;
-
-    // start / stop / update on service 1
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > start = cfg->addConfigurationElement("start");
-    start->setAttributeValue( "uid" , "service1UUID" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > update = cfg->addConfigurationElement("update");
-    update->setAttributeValue( "uid" , "service1UUID" ) ;
-
-    // composite's service 2
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
-    service2->setAttributeValue( "uid" , "service2UUID" ) ;
-    service2->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationComposite" ) ;
-
-    // start / stop / update on service 2
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > start2 = cfg->addConfigurationElement("start");
-    start2->setAttributeValue( "uid" , "service2UUID" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > update2 = cfg->addConfigurationElement("update");
-    update2->setAttributeValue( "uid" , "service2UUID" ) ;
-
-    return cfg ;
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwComEd
diff --git a/SrcLib/core/fwComEd/test/tu/src/ConfigParserTest.cpp b/SrcLib/core/fwComEd/test/tu/src/ConfigParserTest.cpp
deleted file mode 100644
index a8d0f5d..0000000
--- a/SrcLib/core/fwComEd/test/tu/src/ConfigParserTest.cpp
+++ /dev/null
@@ -1,238 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Composite.hpp>
-#include <fwData/Image.hpp>
-#include <fwData/Video.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
-
-#include "ConfigParserTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwComEd::ut::ConfigParserTest );
-
-//------------------------------------------------------------------------------
-
-fwServicesRegisterMacro( ::fwComEd::ut::TestService , ::fwComEd::ut::TestServiceImplementationComposite , ::fwData::Composite ) ;
-fwServicesRegisterMacro( ::fwComEd::ut::TestService , ::fwComEd::ut::TestServiceImplementationImage , ::fwData::Image ) ;
-
-namespace fwComEd
-{
-namespace ut
-{
-
-void ConfigParserTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigParserTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigParserTest::testObjectCreationWithConfig()
-{
-    const std::string objectUUID = "objectUUID";
-    const std::string serviceUUID1 = "myTestService1";
-    const std::string serviceUUID2 = "myTestService2";
-
-    // Create object configuration
-    ::fwRuntime::ConfigurationElement::sptr config = buildObjectConfig() ;
-
-    // Create the object and its services from the configuration
-    ::fwServices::AppConfigManager::sptr configManager = ::fwServices::AppConfigManager::New();
-    configManager->setConfig( config );
-    configManager->create();
-    ::fwData::Image::sptr image = configManager->getConfigRoot< ::fwData::Image >();
-
-    // Test object uid
-    CPPUNIT_ASSERT_EQUAL(objectUUID, image->getID());
-
-    // Test if object's service is created
-    CPPUNIT_ASSERT( ::fwServices::OSR::has(image, "::fwComEd::ut::TestService"));
-
-    // Test start services
-    configManager->start();
-    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID1)->isStarted() );
-    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID2)->isStarted() );
-
-    // Test update services
-    configManager->update();
-    CPPUNIT_ASSERT( ::fwComEd::ut::TestService::dynamicCast( ::fwServices::get(serviceUUID1) )->getIsUpdated() );
-    CPPUNIT_ASSERT( ::fwComEd::ut::TestService::dynamicCast( ::fwServices::get(serviceUUID2) )->getIsUpdated() == false );
-
-    // Test stop services
-    configManager->stop();
-    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID1)->isStopped() );
-    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID2)->isStopped() );
-
-    configManager->destroy();
-}
-
-//------------------------------------------------------------------------------
-
-void ConfigParserTest::testBuildComposite()
-{
-    const std::string compositeUUID = "compositeUUID";
-    const std::string objAUUID = "imageUUID";
-    const std::string objBUUID = "videoUUID";
-    const std::string serviceUUID1 = "myTestService1";
-    const std::string objAType = "::fwData::Image";
-
-    // build composite from ConfigurationElement
-    ::boost::shared_ptr< ::fwRuntime::ConfigurationElement > config = buildCompositeConfig() ;
-
-    // Create the object and its services from the configuration
-    ::fwServices::AppConfigManager::sptr configManager = ::fwServices::AppConfigManager::New();
-    configManager->setConfig( config );
-    configManager->create();
-    ::fwData::Composite::sptr compo = configManager->getConfigRoot< ::fwData::Composite >();
-
-    // test composite
-    CPPUNIT_ASSERT_EQUAL(compositeUUID, compo->getID());
-
-    // test composite objects
-    CPPUNIT_ASSERT(compo->getContainer().size() > 0);
-
-    CPPUNIT_ASSERT(compo->find(objAUUID) != compo->end());
-
-    CPPUNIT_ASSERT_EQUAL(objAType, compo->getContainer()[objAUUID]->className());
-
-    ::fwData::Video::sptr video = ::fwData::Video::dynamicCast(compo->getContainer()[objBUUID]);
-    CPPUNIT_ASSERT_EQUAL(objBUUID, video->getID());
-
-    // test composite services
-    ::fwData::Image::sptr image = ::fwData::Image::dynamicCast(compo->getContainer()[objAUUID]);
-    CPPUNIT_ASSERT_EQUAL(objAUUID, image->getID());
-    CPPUNIT_ASSERT( ::fwServices::OSR::has(image, "::fwComEd::ut::TestService"));
-
-    CPPUNIT_ASSERT( ::fwServices::OSR::has(compo, "::fwComEd::ut::TestService"));
-
-    /// test start/update/stop service
-    configManager->start();
-    CPPUNIT_ASSERT(::fwServices::get(serviceUUID1)->isStarted());
-
-    configManager->update();
-    CPPUNIT_ASSERT(::fwComEd::ut::TestService::dynamicCast(::fwServices::get(serviceUUID1))->getIsUpdated());
-
-    configManager->stop();
-    CPPUNIT_ASSERT(::fwServices::get(serviceUUID1)->isStopped());
-
-    configManager->destroy();
-}
-
-//------------------------------------------------------------------------------
-
-::fwRuntime::ConfigurationElement::sptr ConfigParserTest::buildObjectConfig()
-{
-    // Configuration on fwTools::Object which uid is objectUUID
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object")) ;
-    cfg->setAttributeValue( "uid" , "objectUUID") ;
-    cfg->setAttributeValue( "type" , "::fwData::Image") ;
-
-    // Object's service A
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
-    serviceA->setAttributeValue( "uid" , "myTestService1" ) ;
-    serviceA->setAttributeValue( "type" , "::fwComEd::ut::TestService" ) ;
-    serviceA->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-
-    // Object's service B
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
-    serviceB->setAttributeValue( "uid" , "myTestService2" ) ;
-    serviceB->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-
-    // Start method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
-    startA->setAttributeValue( "uid" , "myTestService1" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
-    startB->setAttributeValue( "uid" , "myTestService2" ) ;
-
-    // Update method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
-    updateA->setAttributeValue( "uid" , "myTestService1" ) ;
-
-    return cfg ;
-}
-
-//------------------------------------------------------------------------------
-
-::fwRuntime::ConfigurationElement::sptr ConfigParserTest::buildCompositeConfig()
-{
-    // Composite
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object")) ;
-    cfg->setAttributeValue( "uid" , "compositeUUID") ;
-    cfg->setAttributeValue( "type" , "::fwData::Composite") ;
-
-
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > itemA = cfg->addConfigurationElement("item");
-     itemA->setAttributeValue( "key" , "imageUUID") ;
-
-
-    // composite object : image
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > objA = itemA->addConfigurationElement("object");
-    objA->setAttributeValue( "uid" , "imageUUID") ;
-    objA->setAttributeValue( "type" , "::fwData::Image") ;
-
-    // image's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > imageService = objA->addConfigurationElement("service");
-    imageService->setAttributeValue( "uid" , "myImageService" ) ;
-    imageService->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > imageService2 = objA->addConfigurationElement("service");
-    imageService2->setAttributeValue( "uid" , "myImageService2" ) ;
-    imageService2->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > itemB = cfg->addConfigurationElement("item");
-     itemB->setAttributeValue( "key" , "videoUUID") ;
-
-
-    // composite object : video
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > objB = itemB->addConfigurationElement("object");
-    objB->setAttributeValue( "uid" , "videoUUID") ;
-    //objB->setAttributeValue( "id" , "videoUUID") ;
-    objB->setAttributeValue( "type" , "::fwData::Video") ;
-
-    // composite's service 1
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > service = cfg->addConfigurationElement("service");
-    service->setAttributeValue( "uid" , "myTestService1" ) ;
-    service->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationComposite" ) ;
-
-    // start / stop / update on service 1
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > start = cfg->addConfigurationElement("start");
-    start->setAttributeValue( "uid" , "myTestService1" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > update = cfg->addConfigurationElement("update");
-    update->setAttributeValue( "uid" , "myTestService1" ) ;
-
-    // composite's service 2
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
-    service2->setAttributeValue( "uid" , "myTestService2" ) ;
-    service2->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationComposite" ) ;
-
-    // start / stop / update on service 2
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > start2 = cfg->addConfigurationElement("start");
-    start2->setAttributeValue( "uid" , "myTestService2" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > update2 = cfg->addConfigurationElement("update");
-    update2->setAttributeValue( "uid" , "myTestService2" ) ;
-
-    return cfg ;
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwComEd
diff --git a/SrcLib/core/fwComEd/test/tu/src/FieldHelperTest.cpp b/SrcLib/core/fwComEd/test/tu/src/FieldHelperTest.cpp
deleted file mode 100644
index 65095c9..0000000
--- a/SrcLib/core/fwComEd/test/tu/src/FieldHelperTest.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/String.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/ObjectMsg.hpp>
-
-#include <fwComEd/helper/Field.hpp>
-
-#include "ConfigParserTest.hpp"
-#include "FieldHelperTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwComEd::ut::FieldHelperTest );
-
-namespace fwComEd
-{
-namespace ut
-{
-
-//------------------------------------------------------------------------------
-
-void FieldHelperTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void FieldHelperTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void FieldHelperTest::testHelper()
-{
-    const std::string FIELD_ID1 = "FIELD_ID1";
-    const std::string FIELD_ID2 = "FIELD_ID2";
-    const std::string FIELD_ID3 = "FIELD_ID3";
-
-    ::fwData::Object::sptr nullobj;
-    ::fwData::Object::sptr obj = ::fwData::String::New();
-    ::fwData::Object::sptr fieldObj1 = ::fwData::String::New();
-    ::fwData::Object::sptr fieldObj2 = ::fwData::String::New();
-
-    {
-        ::fwComEd::helper::Field fieldHelper(obj);
-        fieldHelper.setField(FIELD_ID1, fieldObj1);
-        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj1);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == nullobj);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
-    }
-
-    ::fwData::Object::FieldMapType localFields = obj->getFields();
-    ::fwData::Object::FieldMapType localFieldsBackup = obj->getFields();
-    localFields.insert( ::fwData::Object::FieldMapType::value_type(FIELD_ID2,fieldObj2));
-
-    {
-        ::fwComEd::helper::Field fieldHelper(obj);
-        fieldHelper.updateFields(localFields);
-        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(2));
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj1);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == fieldObj2);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
-    }
-
-    {
-        ::fwComEd::helper::Field fieldHelper(obj);
-        fieldHelper.setFields(localFieldsBackup);
-        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj1);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == nullobj);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
-    }
-
-    {
-        ::fwComEd::helper::Field fieldHelper(obj);
-        fieldHelper.setField(FIELD_ID1, fieldObj2);
-        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj2);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == nullobj);
-        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwComEd
diff --git a/SrcLib/core/fwComEd/test/tu/src/MessagesTest.cpp b/SrcLib/core/fwComEd/test/tu/src/MessagesTest.cpp
deleted file mode 100644
index 1001e3d..0000000
--- a/SrcLib/core/fwComEd/test/tu/src/MessagesTest.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Object.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/Image.hpp>
-
-#include <fwComEd/FloatMsg.hpp>
-#include <fwComEd/ImageMsg.hpp>
-#include <fwComEd/helper/MsgHelper.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "MessagesTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwComEd::ut::MessagesTest );
-
-namespace fwComEd
-{
-namespace ut
-{
-
-//------------------------------------------------------------------------------
-
-void MessagesTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void MessagesTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void MessagesTest::testFloatMsg()
-{
-    // create message
-    ::fwComEd::FloatMsg::sptr floatMsg = ::fwComEd::FloatMsg::New();
-    floatMsg->addEvent(::fwComEd::FloatMsg::VALUE_IS_MODIFIED);
-
-    // check Event
-    CPPUNIT_ASSERT(floatMsg->hasEvent(::fwComEd::FloatMsg::VALUE_IS_MODIFIED));
-}
-
-//------------------------------------------------------------------------------
-
-void MessagesTest::testImageMsg()
-{
-    const std::string MYMODIF1 = ::fwComEd::ImageMsg::BUFFER;
-    const std::string MYMODIF2 = ::fwComEd::ImageMsg::SLICE_INDEX;
-
-    ::fwData::Integer::sptr intField = ::fwData::Integer::New(23);
-    ::fwData::Image::sptr image = ::fwData::Image::New();
-
-    // create message
-    ::fwComEd::ImageMsg::sptr imageMsg = ::fwComEd::ImageMsg::New();
-    imageMsg->addEvent(MYMODIF1);
-    imageMsg->addEvent(MYMODIF2, intField);
-
-    // check Event
-    CPPUNIT_ASSERT(imageMsg->hasEvent(MYMODIF1));
-    CPPUNIT_ASSERT(imageMsg->hasEvent(MYMODIF2));
-
-    // check data info
-    ::fwData::Object::sptr obj = ::fwData::Object::constCast(imageMsg->getDataInfo(MYMODIF2));
-    ::fwData::Integer::sptr intField2 = ::fwData::Integer::dynamicCast(obj);
-    CPPUNIT_ASSERT(intField2);
-    CPPUNIT_ASSERT_EQUAL(intField, intField2);
-}
-
-//------------------------------------------------------------------------------
-
-void MessagesTest::messageCreationTest()
-{
-    ::fwData::Image::sptr image = ::fwData::Image::New();
-    ::fwServices::ObjectMsg::sptr msg = ::fwComEd::helper::MsgHelper::createAssociatedMsg(image);
-    CPPUNIT_ASSERT(msg);
-    CPPUNIT_ASSERT(::fwComEd::ImageMsg::dynamicCast(msg));
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwComEd
diff --git a/SrcLib/core/fwComEd/test/tu/src/SeriesDBMsgTest.cpp b/SrcLib/core/fwComEd/test/tu/src/SeriesDBMsgTest.cpp
deleted file mode 100644
index 22cbac8..0000000
--- a/SrcLib/core/fwComEd/test/tu/src/SeriesDBMsgTest.cpp
+++ /dev/null
@@ -1,202 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/chrono/duration.hpp>
-
-#include <fwMedData/Series.hpp>
-#include <fwMedData/ImageSeries.hpp>
-#include <fwMedData/ModelSeries.hpp>
-#include <fwMedData/SeriesDB.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include <fwComEd/helper/SeriesDB.hpp>
-
-#include "SeriesDBMsgTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwComEd::ut::SeriesDBMsgTest );
-
-
-fwServicesRegisterMacro( ::fwComEd::ut::TestService , ::fwComEd::ut::SSeriesDBTest , ::fwMedData::SeriesDB ) ;
-
-namespace fwComEd
-{
-namespace ut
-{
-
-//------------------------------------------------------------------------------
-
-void SeriesDBMsgTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void SeriesDBMsgTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void SeriesDBMsgTest::basicTest()
-{
-    ::fwMedData::ImageSeries::sptr series1 = ::fwMedData::ImageSeries::New();
-    ::fwMedData::ModelSeries::sptr series2 = ::fwMedData::ModelSeries::New();
-
-    ::fwComEd::SeriesDBMsg::sptr msg = ::fwComEd::SeriesDBMsg::New();
-    msg->appendAddedSeries(series1);
-    msg->appendAddedSeries(series2);
-
-    CPPUNIT_ASSERT(msg->hasEvent(::fwComEd::SeriesDBMsg::ADDED_OBJECTS));
-
-    ::fwData::Vector::sptr vecAddedObj = msg->getAddedSeries();
-    CPPUNIT_ASSERT(std::find(vecAddedObj->begin(), vecAddedObj->end(), series1) != vecAddedObj->end());
-    CPPUNIT_ASSERT(std::find(vecAddedObj->begin(), vecAddedObj->end(), series2) != vecAddedObj->end());
-
-    ::fwComEd::SeriesDBMsg::sptr msg2 = ::fwComEd::SeriesDBMsg::New();
-    msg2->appendRemovedSeries(series1);
-    msg2->appendRemovedSeries(series2);
-
-    CPPUNIT_ASSERT(msg2->hasEvent(::fwComEd::SeriesDBMsg::REMOVED_OBJECTS));
-
-    ::fwData::Vector::sptr vecRemovedObj = msg2->getRemovedSeries();
-    CPPUNIT_ASSERT(std::find(vecRemovedObj->begin(), vecRemovedObj->end(), series1) != vecRemovedObj->end());
-    CPPUNIT_ASSERT(std::find(vecRemovedObj->begin(), vecRemovedObj->end(), series2) != vecRemovedObj->end());
-}
-
-//------------------------------------------------------------------------------
-
-void SeriesDBMsgTest::seriesDBHelperTest()
-{
-    ::fwServices::registry::ActiveWorkers::sptr activeWorkers = ::fwServices::registry::ActiveWorkers::getDefault();
-    activeWorkers->initRegistry();
-
-    ::fwMedData::ImageSeries::sptr series1 = ::fwMedData::ImageSeries::New();
-    ::fwMedData::ModelSeries::sptr series2 = ::fwMedData::ModelSeries::New();
-
-    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
-
-    ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
-    ::fwServices::IService::sptr srv = srvFactory->create("::fwComEd::ut::SSeriesDBTest");
-    ::fwServices::OSR::registerService(seriesDB, srv);
-    ::fwComEd::ut::SSeriesDBTest::sptr testSrv = ::fwComEd::ut::SSeriesDBTest::dynamicCast(srv);
-
-    srv->start().wait();
-
-    ::fwServices::helper::SigSlotConnection::sptr helper = ::fwServices::helper::SigSlotConnection::New();
-    helper->connect( seriesDB, srv, srv->getObjSrvConnections() );
-
-    // Test add series
-    {
-        ::fwComEd::helper::SeriesDB seriesDBHelper(seriesDB);
-
-        seriesDBHelper.add(series1);
-        CPPUNIT_ASSERT_EQUAL((size_t) 1, seriesDB->size());
-        seriesDBHelper.add(series2);
-        CPPUNIT_ASSERT_EQUAL((size_t) 2, seriesDB->size());
-
-        CPPUNIT_ASSERT(std::find(seriesDB->begin(), seriesDB->end(), series1) != seriesDB->end());
-        CPPUNIT_ASSERT(std::find(seriesDB->begin(), seriesDB->end(), series2) != seriesDB->end());
-
-        seriesDBHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr addedObjects = testSrv->m_seriesDBMsg->getAddedSeries();
-
-        CPPUNIT_ASSERT(std::find(addedObjects->begin(), addedObjects->end(), series1) != addedObjects->end());
-        CPPUNIT_ASSERT(std::find(addedObjects->begin(), addedObjects->end(), series2) != addedObjects->end());
-    }
-
-    // Test remove series
-    {
-        ::fwComEd::helper::SeriesDB seriesDBHelper(seriesDB);
-
-        seriesDBHelper.remove(series1);
-        CPPUNIT_ASSERT_EQUAL((size_t) 1, seriesDB->size());
-        seriesDBHelper.remove(series2);
-        CPPUNIT_ASSERT_EQUAL((size_t) 0, seriesDB->size());
-
-        seriesDBHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr removedObjects = testSrv->m_seriesDBMsg->getRemovedSeries();
-
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), series1) != removedObjects->end());
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), series2) != removedObjects->end());
-    }
-
-    seriesDB->getContainer().push_back(series1);
-    seriesDB->getContainer().push_back(series2);
-
-    // Test clear series
-    {
-        ::fwComEd::helper::SeriesDB seriesDBHelper(seriesDB);
-
-        seriesDBHelper.clear();
-        CPPUNIT_ASSERT_EQUAL((size_t) 0, seriesDB->size());
-
-        seriesDBHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr removedObjects = testSrv->m_seriesDBMsg->getRemovedSeries();
-
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), series1) != removedObjects->end());
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), series2) != removedObjects->end());
-    }
-
-    seriesDB->getContainer().push_back(series1);
-    seriesDB->getContainer().push_back(series2);
-
-    // Test merge SeriesDB
-    {
-        ::fwMedData::ImageSeries::sptr series3 = ::fwMedData::ImageSeries::New();
-        ::fwMedData::SeriesDB::sptr localSeriesDB = ::fwMedData::SeriesDB::New();
-        localSeriesDB->getContainer().push_back(series3);
-
-        ::fwComEd::helper::SeriesDB seriesDBHelper(seriesDB);
-        seriesDBHelper.merge(localSeriesDB);
-
-        CPPUNIT_ASSERT_EQUAL((size_t) 3, seriesDB->size());
-
-        seriesDBHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr addedObjects = testSrv->m_seriesDBMsg->getAddedSeries();
-
-        CPPUNIT_ASSERT(std::find(addedObjects->begin(), addedObjects->end(), series3) != addedObjects->end());
-    }
-
-    srv->stop().wait();
-    ::fwServices::OSR::unregisterService(srv);
-
-    activeWorkers->clearRegistry();
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwComEd
diff --git a/SrcLib/core/fwComEd/test/tu/src/VectorMsgTest.cpp b/SrcLib/core/fwComEd/test/tu/src/VectorMsgTest.cpp
deleted file mode 100644
index 25e6224..0000000
--- a/SrcLib/core/fwComEd/test/tu/src/VectorMsgTest.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/chrono/duration.hpp>
-
-#include <fwData/Object.hpp>
-#include <fwData/Vector.hpp>
-#include <fwData/String.hpp>
-
-#include <fwServices/IService.hpp>
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include <fwComEd/VectorMsg.hpp>
-#include <fwComEd/helper/Vector.hpp>
-
-#include "VectorMsgTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwComEd::ut::VectorMsgTest );
-
-
-fwServicesRegisterMacro( ::fwComEd::ut::TestService , ::fwComEd::ut::SVectorTest , ::fwData::Vector ) ;
-
-namespace fwComEd
-{
-namespace ut
-{
-
-//------------------------------------------------------------------------------
-
-void VectorMsgTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void VectorMsgTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void VectorMsgTest::basicTest()
-{
-    ::fwData::String::sptr str1 = ::fwData::String::New("Str1");
-    ::fwData::String::sptr str2 = ::fwData::String::New("Str2");
-
-    ::fwComEd::VectorMsg::sptr msg = ::fwComEd::VectorMsg::New();
-    msg->appendAddedObject(str1);
-    msg->appendAddedObject(str2);
-
-    CPPUNIT_ASSERT(msg->hasEvent(::fwComEd::VectorMsg::ADDED_OBJECTS));
-
-    ::fwData::Vector::sptr vecAddedObj = msg->getAddedObjects();
-    CPPUNIT_ASSERT(std::find(vecAddedObj->begin(), vecAddedObj->end(), str1) != vecAddedObj->end());
-    CPPUNIT_ASSERT(std::find(vecAddedObj->begin(), vecAddedObj->end(), str2) != vecAddedObj->end());
-
-    ::fwComEd::VectorMsg::sptr msg2 = ::fwComEd::VectorMsg::New();
-    msg2->appendRemovedObject(str1);
-    msg2->appendRemovedObject(str2);
-
-    CPPUNIT_ASSERT(msg2->hasEvent(::fwComEd::VectorMsg::REMOVED_OBJECTS));
-
-    ::fwData::Vector::sptr vecRemovedObj = msg2->getRemovedObjects();
-    CPPUNIT_ASSERT(std::find(vecRemovedObj->begin(), vecRemovedObj->end(), str1) != vecRemovedObj->end());
-    CPPUNIT_ASSERT(std::find(vecRemovedObj->begin(), vecRemovedObj->end(), str2) != vecRemovedObj->end());
-}
-
-//------------------------------------------------------------------------------
-
-void VectorMsgTest::vectorHelperTest()
-{
-    ::fwServices::registry::ActiveWorkers::sptr activeWorkers = ::fwServices::registry::ActiveWorkers::getDefault();
-    activeWorkers->initRegistry();
-
-
-    ::fwData::String::sptr str1 = ::fwData::String::New("Str1");
-    ::fwData::String::sptr str2 = ::fwData::String::New("Str2");
-
-    ::fwData::Vector::sptr vector = ::fwData::Vector::New();
-
-    ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
-    ::fwServices::IService::sptr srv = srvFactory->create("::fwComEd::ut::SVectorTest");
-    ::fwServices::OSR::registerService(vector, srv);
-    ::fwComEd::ut::SVectorTest::sptr testSrv = ::fwComEd::ut::SVectorTest::dynamicCast(srv);
-
-    srv->start().wait();
-
-    ::fwServices::helper::SigSlotConnection::sptr helper = ::fwServices::helper::SigSlotConnection::New();
-    helper->connect( vector, srv, srv->getObjSrvConnections() );
-
-    {
-        ::fwComEd::helper::Vector vectorHelper(vector);
-
-        vectorHelper.add(str1);
-        CPPUNIT_ASSERT_EQUAL((size_t) 1, vector->size());
-        vectorHelper.add(str2);
-        CPPUNIT_ASSERT_EQUAL((size_t) 2, vector->size());
-
-        CPPUNIT_ASSERT(std::find(vector->begin(), vector->end(), str1) != vector->end());
-        CPPUNIT_ASSERT(std::find(vector->begin(), vector->end(), str2) != vector->end());
-
-        vectorHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr addedObjects = testSrv->m_vectMsg->getAddedObjects();
-
-        CPPUNIT_ASSERT(std::find(addedObjects->begin(), addedObjects->end(), str1) != addedObjects->end());
-        CPPUNIT_ASSERT(std::find(addedObjects->begin(), addedObjects->end(), str2) != addedObjects->end());
-    }
-
-    {
-        ::fwComEd::helper::Vector vectorHelper(vector);
-
-        vectorHelper.remove(str1);
-        CPPUNIT_ASSERT_EQUAL((size_t) 1, vector->size());
-        vectorHelper.remove(str2);
-        CPPUNIT_ASSERT_EQUAL((size_t) 0, vector->size());
-
-        vectorHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr removedObjects = testSrv->m_vectMsg->getRemovedObjects();
-
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), str1) != removedObjects->end());
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), str2) != removedObjects->end());
-    }
-
-    vector->getContainer().push_back(str1);
-    vector->getContainer().push_back(str2);
-
-    {
-        ::fwComEd::helper::Vector vectorHelper(vector);
-
-        vectorHelper.clear();
-        CPPUNIT_ASSERT_EQUAL((size_t) 0, vector->size());
-
-        vectorHelper.notify(srv, true);
-
-        // Wait a little notification system
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(500) );
-
-        CPPUNIT_ASSERT(testSrv->getIsUpdated());
-
-        ::fwData::Vector::sptr removedObjects = testSrv->m_vectMsg->getRemovedObjects();
-
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), str1) != removedObjects->end());
-        CPPUNIT_ASSERT(std::find(removedObjects->begin(), removedObjects->end(), str2) != removedObjects->end());
-    }
-
-    srv->stop().wait();;
-    ::fwServices::OSR::unregisterService(srv);
-
-    activeWorkers->clearRegistry();
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwComEd
diff --git a/SrcLib/core/fwCommand/CMakeLists.txt b/SrcLib/core/fwCommand/CMakeLists.txt
index b5a63ab..e81a34c 100644
--- a/SrcLib/core/fwCommand/CMakeLists.txt
+++ b/SrcLib/core/fwCommand/CMakeLists.txt
@@ -1,14 +1,7 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwData
-    fwServices
-    fwTools
-)
-
-find_package (Boost COMPONENTS signals REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
+
+
+find_package(Boost COMPONENTS signals REQUIRED)
+fwLink(${Boost_SIGNALS_LIBRARY})
 
 
diff --git a/SrcLib/core/fwCommand/COPYING b/SrcLib/core/fwCommand/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwCommand/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwCommand/COPYING.LESSER b/SrcLib/core/fwCommand/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwCommand/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwCommand/Properties.cmake b/SrcLib/core/fwCommand/Properties.cmake
index ca028f9..6fbbd2e 100644
--- a/SrcLib/core/fwCommand/Properties.cmake
+++ b/SrcLib/core/fwCommand/Properties.cmake
@@ -2,6 +2,13 @@
 set( NAME fwCommand )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwData fwServices fwTools )
+set( DEPENDENCIES
+    fwCom
+    fwData
+    fwDataTools
+    fwServices
+    fwTools
+    fwCore
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwCommand/bin/build.options b/SrcLib/core/fwCommand/bin/build.options
deleted file mode 100644
index 781e198..0000000
--- a/SrcLib/core/fwCommand/bin/build.options
+++ /dev/null
@@ -1,5 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-
-USE = ['boost','boostSignals']
-LIB = ['fwTools_0-1','fwData_0-1','fwServices_0-1','fwComEd_0-1']
diff --git a/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp b/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp
index 02ab412..77786df 100755
--- a/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/Empty.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCOMMAND_EMPTY_HPP_
-#define _FWCOMMAND_EMPTY_HPP_
+#ifndef __FWCOMMAND_EMPTY_HPP__
+#define __FWCOMMAND_EMPTY_HPP__
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -24,7 +23,7 @@ namespace fwCommand
 class FWCOMMAND_CLASS_API Empty : public ICommand
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Empty)(ICommand), (( )), ::boost::make_shared< Empty > );
+    fwCoreClassDefinitionsWithFactoryMacro( (Empty)(ICommand), (( )), std::make_shared< Empty > );
 
     // Overrides.
     FWCOMMAND_API const boost::uint32_t  getSize() const;
@@ -44,4 +43,4 @@ public:
 } // namespace fwCommand
 
 
-#endif //#ifndef _FWCOMMAND_EMPTY_HPP_
+#endif // __FWCOMMAND_EMPTY_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp b/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp
index ff390a3..f561713 100755
--- a/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/ICommand.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCOMMAND_ICOMMAND_H
-#define _FWCOMMAND_ICOMMAND_H
+#ifndef __FWCOMMAND_ICOMMAND_HPP__
+#define __FWCOMMAND_ICOMMAND_HPP__
 
 #include <exception>
 #include <string>
@@ -32,18 +32,20 @@ namespace fwCommand
 class FWCOMMAND_CLASS_API ICommand : public ::fwTools::Object
 {
 
-protected :
+protected:
 
     ::fwServices::IService::wptr m_serviceNotifier;
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (ICommand)(::fwTools::Object) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (ICommand)(::fwTools::Object) );
 
     /**
      * @brief Virtual destructor.
      */
-    virtual ~ICommand() {};
+    virtual ~ICommand()
+    {
+    }
 
     /**
      * @brief Retrieves the memory footprint of the command.
@@ -67,13 +69,19 @@ public :
      */
     FWCOMMAND_API virtual const std::string getDescription( void ) const = 0;
 
-    void setNotifier( ::fwServices::IService::sptr serviceNotifier ) { m_serviceNotifier = serviceNotifier; }
+    void setNotifier( ::fwServices::IService::sptr serviceNotifier )
+    {
+        m_serviceNotifier = serviceNotifier;
+    }
 
-    ::fwServices::IService::sptr getNotifier() { return m_serviceNotifier.lock(); }
+    ::fwServices::IService::sptr getNotifier()
+    {
+        return m_serviceNotifier.lock();
+    }
 };
 
 
 } // namespace fwCommand
 
 
-#endif //#ifndef _FWCOMMAND_ICOMMAND_H
+#endif // __FWCOMMAND_ICOMMAND_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp b/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp
index eed456e..e40f16d 100755
--- a/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/Manager.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWFWCOMMAND_MANAGER_HPP_
-#define _FWFWCOMMAND_MANAGER_HPP_
+#ifndef __FWCOMMAND_MANAGER_HPP__
+#define __FWCOMMAND_MANAGER_HPP__
 
 #include <deque>
 #include <boost/cstdint.hpp>
-#include <boost/make_shared.hpp>
 
 #include <fwTools/Object.hpp>
 #include <fwTools/macros.hpp>
@@ -30,9 +29,11 @@ class FWCOMMAND_CLASS_API Manager : public ::fwTools::Object
 public:
 
     fwCoreClassDefinitionsWithNFactoriesMacro( (Manager)(::fwTools::Object),
-           ((::boost::make_shared< Manager > ,() ))
-           ((ManagerFactory ,((::boost::uint32_t)) ((::boost::uint32_t)) ((::boost::uint32_t))  ))
-           );
+                                               ((std::make_shared< Manager >,() ))
+                                                   ((ManagerFactory,
+                                                     ((::boost::uint32_t))((::boost::uint32_t)) (
+                                                         (::boost::uint32_t))  ))
+                                               );
 
     /**
      * @brief Default constructor.
@@ -46,9 +47,12 @@ public:
      * @remarks The latest queued command is ignored by the memory usage counter in order to ensure that the latest command could always being stored in the history.
      * @remarks The maximum memory used by the history is maxUndoMemory + maxCommandMemory.
      */
-    FWCOMMAND_API Manager( const ::boost::uint32_t  maxUndoLevel = 0, const ::boost::uint32_t  maxUndoMemory = 0, const ::boost::uint32_t  maxCommandMemory = 1024*1024*32 /* 32 MB */);
+    FWCOMMAND_API Manager( const ::boost::uint32_t maxUndoLevel = 0, const ::boost::uint32_t maxUndoMemory = 0,
+                           const ::boost::uint32_t maxCommandMemory = 1024*1024*32 /* 32 MB */);
 
-    FWCOMMAND_API static sptr ManagerFactory( const ::boost::uint32_t  maxUndoLevel, const ::boost::uint32_t  maxUndoMemory , const ::boost::uint32_t  maxCommandMemory);
+    FWCOMMAND_API static sptr ManagerFactory( const ::boost::uint32_t maxUndoLevel,
+                                              const ::boost::uint32_t maxUndoMemory,
+                                              const ::boost::uint32_t maxCommandMemory);
 
     /**
      * @brief Destructor.
@@ -105,17 +109,26 @@ public:
     /**
      * @brief Returns the maximum number of undo that could be stored in the history.
      */
-    const ::boost::uint32_t  getMaxUndoLevel() const { return m_maxUndoLevel; }
+    const ::boost::uint32_t  getMaxUndoLevel() const
+    {
+        return m_maxUndoLevel;
+    }
 
     /**
      * @brief Returns the maximum memory that could be used by the history.
      */
-    const ::boost::uint32_t  getMaxUndoMemory() const { return m_maxUndoMemory; }
+    const ::boost::uint32_t  getMaxUndoMemory() const
+    {
+        return m_maxUndoMemory;
+    }
 
     /**
      * @brief Returns the maximum memory that could be used by a single command.
      */
-    const ::boost::uint32_t  getMaxCommandMemory() const { return m_maxCommandMemory; }
+    const ::boost::uint32_t  getMaxCommandMemory() const
+    {
+        return m_maxCommandMemory;
+    }
 
     /**
      * @brief Returns the number of commands that can be un-done.
@@ -146,7 +159,7 @@ protected:
     /**
      * @brief  Maximum number of undo that could be stored in the history.
      */
-    ::boost::uint32_t  m_maxUndoLevel;
+    ::boost::uint32_t m_maxUndoLevel;
 
     /**
      * @brief Maximum number of bytes that could be used by the history.
@@ -183,4 +196,4 @@ protected:
 } // namespace fwCommand
 
 
-#endif //#ifndef _FWCOMMAND_MANAGER_HPP_
+#endif // __FWCOMMAND_MANAGER_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp b/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp
index 65fb137..f8c89d3 100755
--- a/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/PaintCommand.hpp
@@ -1,22 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCOMMAND_PAINTCOMMAND_HPP_
-#define _FWCOMMAND_PAINTCOMMAND_HPP_
+#ifndef __FWCOMMAND_PAINTCOMMAND_HPP__
+#define __FWCOMMAND_PAINTCOMMAND_HPP__
 
-#include <boost/cstdint.hpp>
-#include <boost/make_shared.hpp>
-
-#include <fwTools/macros.hpp>
+#include "fwCommand/ICommand.hpp"
 
 #include <fwData/Image.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include "fwCommand/ICommand.hpp"
+#include <fwTools/macros.hpp>
+
+#include <boost/cstdint.hpp>
 
 namespace fwCommand
 {
@@ -27,7 +26,7 @@ namespace fwCommand
 class FWCOMMAND_CLASS_API PaintCommand : public ICommand
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (PaintCommand)(ICommand), (( )), ::boost::make_shared< PaintCommand > );
+    fwCoreClassDefinitionsWithFactoryMacro( (PaintCommand)(ICommand), (( )), std::make_shared< PaintCommand > );
 
     FWCOMMAND_API PaintCommand();
 
@@ -44,19 +43,21 @@ public:
     FWCOMMAND_API const std::string getDescription( void ) const;
 
     /// Register paint voxel on image
-    FWCOMMAND_API void paint( ::fwData::Image::BufferIndexType index, ::fwData::Image::BufferType oldValue, ::fwData::Image::BufferType newValue );
+    FWCOMMAND_API void paint( ::fwData::Image::BufferIndexType index, ::fwData::Image::BufferType oldValue,
+                              ::fwData::Image::BufferType newValue );
 
 
-    FWCOMMAND_API void prePaint( ::fwData::Image::IndexType x, ::fwData::Image::IndexType y, ::fwData::Image::IndexType z );
+    FWCOMMAND_API void prePaint( ::fwData::Image::IndexType x, ::fwData::Image::IndexType y,
+                                 ::fwData::Image::IndexType z );
     FWCOMMAND_API void prePaint( ::fwData::Image::IndexType index );
 
     FWCOMMAND_API void postPaint();
 
-    FWCOMMAND_API void setImage( ::fwData::Image::sptr  image );
+    FWCOMMAND_API void setImage( ::fwData::Image::sptr image );
 
-private :
+private:
 
-     void notifyImageModification();
+    void notifyImageModification();
 
     /**
      * @brief Typedef for the index containers.
@@ -71,17 +72,17 @@ private :
     /**
      * @brief The index container
      */
-    IndexContainer  m_commandIndexContainer;
+    IndexContainer m_commandIndexContainer;
 
     /**
      * @brief The color container
      */
-    ColorContainer  m_commandColorContainer;
+    ColorContainer m_commandColorContainer;
 
     /// Working image
-    ::fwData::Image::wptr         m_image;
+    ::fwData::Image::wptr m_image;
     /// Helper on Working image
-    ::fwComEd::helper::Image::sptr m_imageHelper;
+    ::fwDataTools::helper::Image::sptr m_imageHelper;
 
     ::fwData::Image::IndexType m_currentPrepaintIndex;
     std::vector< ::fwData::Image::BufferType > m_currentPrepaintBuff;
@@ -92,4 +93,4 @@ private :
 } // namespace fwCommand
 
 
-#endif //#ifndef _FWCOMMAND_PAINTCOMMAND_HPP_
+#endif //__FWCOMMAND_PAINTCOMMAND_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp b/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp
index 92a65e9..2a4f471 100755
--- a/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp
+++ b/SrcLib/core/fwCommand/include/fwCommand/UndoRedoManager.hpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWFWCOMMAND_UNDOREDOMANAGER_HPP_
-#define _FWFWCOMMAND_UNDOREDOMANAGER_HPP_
+#ifndef __FWCOMMAND_UNDOREDOMANAGER_HPP__
+#define __FWCOMMAND_UNDOREDOMANAGER_HPP__
 
 #include <deque>
 
-#include <boost/signal.hpp>
-#include <boost/signals/connection.hpp>
-#include <boost/make_shared.hpp>
+#include <boost/signals2/signal.hpp>
+#include <boost/signals2/connection.hpp>
 #include <boost/cstdint.hpp>
 
 #include <fwTools/Object.hpp>
@@ -33,10 +32,11 @@ namespace fwCommand
 class FWCOMMAND_CLASS_API UndoRedoManager : public ::fwTools::Object
 {
 public:
-    typedef ::boost::signal<void (std::string)>  SignalType;
-    typedef ::boost::signals::connection         ConnectionType;
+    typedef ::boost::signals2::signal<void (std::string)>  SignalType;
+    typedef ::boost::signals2::connection ConnectionType;
 
-    fwCoreClassDefinitionsWithFactoryMacro( (UndoRedoManager)(::fwTools::Object), (( )), ::boost::make_shared< UndoRedoManager > );
+    fwCoreClassDefinitionsWithFactoryMacro( (UndoRedoManager)(::fwTools::Object), (( )),
+                                            std::make_shared< UndoRedoManager > );
 
     /// Return the unique Instance, create it if required at first access
     FWCOMMAND_API static UndoRedoManager::sptr getDefault();
@@ -144,12 +144,12 @@ protected:
     Manager::sptr m_currentManager;
 
 
-private :
-    SignalType  m_sig;
+private:
+    SignalType m_sig;
 };
 
 
 } // namespace fwCommand
 
 
-#endif //#ifndef _FWCOMMAND_MANAGER_HPP_
+#endif // __FWCOMMAND_UNDOREDOMANAGER_HPP__
diff --git a/SrcLib/core/fwCommand/include/fwCommand/config.hpp b/SrcLib/core/fwCommand/include/fwCommand/config.hpp
deleted file mode 100644
index 3d7abe6..0000000
--- a/SrcLib/core/fwCommand/include/fwCommand/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWCOMMAND_CONFIG_HPP_
-#define _FWCOMMAND_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWCOMMAND_EXPORTS
-            #define FWCOMMAND_API __declspec(dllexport)
-        #else
-            #define FWCOMMAND_API __declspec(dllimport)
-        #endif
-
-        #define FWCOMMAND_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWCOMMAND_EXPORTS
-            #define FWCOMMAND_API __attribute__ ((visibility("default")))
-            #define FWCOMMAND_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWCOMMAND_API __attribute__ ((visibility("hidden")))
-            #define FWCOMMAND_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWCOMMAND_API
-        #define FWCOMMAND_CLASS_API
-
-    #endif
-
-#endif //FWCOMMAND_API
-
diff --git a/SrcLib/core/fwCommand/include/fwCommand/namespace.hpp b/SrcLib/core/fwCommand/include/fwCommand/namespace.hpp
new file mode 100644
index 0000000..04420d9
--- /dev/null
+++ b/SrcLib/core/fwCommand/include/fwCommand/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCOMMAND_NAMESPACE_HPP__
+#define __FWCOMMAND_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace fwCommand contains classes describing and managing commands.
+ * @namespace fwCommand
+ **/
+
+namespace fwCommand
+{
+
+} // namespace fwCommand
+
+#endif // __FWCOMMAND_NAMESPACE_HPP__
diff --git a/SrcLib/core/fwCommand/src/fwCommand/Empty.cpp b/SrcLib/core/fwCommand/src/fwCommand/Empty.cpp
index bb0c197..784435e 100755
--- a/SrcLib/core/fwCommand/src/fwCommand/Empty.cpp
+++ b/SrcLib/core/fwCommand/src/fwCommand/Empty.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@ namespace fwCommand
 
 //-----------------------------------------------------------------------------
 
-const boost::uint32_t  Empty::getSize() const
+const boost::uint32_t Empty::getSize() const
 {
     return sizeof(*this);
 }
@@ -20,12 +20,14 @@ const boost::uint32_t  Empty::getSize() const
 //-----------------------------------------------------------------------------
 
 void Empty::apply()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void Empty::unapply()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwCommand/src/fwCommand/Manager.cpp b/SrcLib/core/fwCommand/src/fwCommand/Manager.cpp
index 19ca0d8..6c048e7 100755
--- a/SrcLib/core/fwCommand/src/fwCommand/Manager.cpp
+++ b/SrcLib/core/fwCommand/src/fwCommand/Manager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,11 +18,12 @@ namespace fwCommand
 
 //-----------------------------------------------------------------------------
 
-Manager::Manager( const ::boost::uint32_t maxUndoLevel, const ::boost::uint32_t maxUndoMemory, const ::boost::uint32_t maxCommandMemory )
-: m_maxUndoLevel  ( maxUndoLevel  ),
-  m_maxUndoMemory ( maxUndoMemory ),
-  m_maxCommandMemory (maxCommandMemory),
-  m_usedMemory ( 0 )
+Manager::Manager( const ::boost::uint32_t maxUndoLevel, const ::boost::uint32_t maxUndoMemory,
+                  const ::boost::uint32_t maxCommandMemory )
+    : m_maxUndoLevel  ( maxUndoLevel  ),
+      m_maxUndoMemory ( maxUndoMemory ),
+      m_maxCommandMemory (maxCommandMemory),
+      m_usedMemory ( 0 )
 {
     m_listCmd.push_back( Empty::New() );
     m_lastCmd = m_listCmd.end();
@@ -31,19 +32,21 @@ Manager::Manager( const ::boost::uint32_t maxUndoLevel, const ::boost::uint32_t
 
 //-----------------------------------------------------------------------------
 
-Manager::sptr Manager::ManagerFactory( const ::boost::uint32_t  maxUndoLevel, const ::boost::uint32_t  maxUndoMemory, const ::boost::uint32_t  maxCommandMemory)
+Manager::sptr Manager::ManagerFactory( const ::boost::uint32_t maxUndoLevel, const ::boost::uint32_t maxUndoMemory,
+                                       const ::boost::uint32_t maxCommandMemory)
 {
     ::fwCommand::Manager::sptr manager = ::fwCommand::Manager::New();
-    manager->m_maxUndoLevel = maxUndoLevel;
-    manager->m_maxUndoMemory = maxUndoMemory;
-    manager->m_maxCommandMemory = maxCommandMemory;
+    manager->m_maxUndoLevel            = maxUndoLevel;
+    manager->m_maxUndoMemory           = maxUndoMemory;
+    manager->m_maxCommandMemory        = maxCommandMemory;
     return manager;
 }
 
 //-----------------------------------------------------------------------------
 
 Manager::~Manager() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -154,7 +157,7 @@ void Manager::clear()
     m_listCmd.clear();
     m_listCmd.push_back( Empty::New() );
     m_usedMemory = 0;
-    m_lastCmd = m_listCmd.begin();
+    m_lastCmd    = m_listCmd.begin();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwCommand/src/fwCommand/PaintCommand.cpp b/SrcLib/core/fwCommand/src/fwCommand/PaintCommand.cpp
index 696159e..3265847 100755
--- a/SrcLib/core/fwCommand/src/fwCommand/PaintCommand.cpp
+++ b/SrcLib/core/fwCommand/src/fwCommand/PaintCommand.cpp
@@ -1,23 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-/** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwServices/IEditionService.hpp>
-
-#include <fwComEd/ImageMsg.hpp>
-
 #include "fwCommand/PaintCommand.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
 namespace fwCommand
 {
@@ -25,25 +15,27 @@ namespace fwCommand
 
 //-----------------------------------------------------------------------------
 PaintCommand::PaintCommand() : ICommand()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-const boost::uint32_t  PaintCommand::getSize() const
+const boost::uint32_t PaintCommand::getSize() const
 {
     SLM_ASSERT("Index size not correspond to color size.",
-            m_commandIndexContainer.size() == m_commandColorContainer.size() );
-    const ::boost::uint32_t sizeOf = static_cast<boost::uint32_t>(sizeof(::fwData::Image::BufferIndexType) + 2*sizeof(::fwData::Image::BufferType));
+               m_commandIndexContainer.size() == m_commandColorContainer.size() );
+    const ::boost::uint32_t sizeOf =
+        static_cast<boost::uint32_t>(sizeof(::fwData::Image::BufferIndexType) + 2*sizeof(::fwData::Image::BufferType));
 
     return static_cast< ::boost::uint32_t >(sizeof(*this) + m_commandIndexContainer.size()*sizeOf );
 }
 
 //-----------------------------------------------------------------------------
 
-void PaintCommand::setImage( ::fwData::Image::sptr  image )
+void PaintCommand::setImage( ::fwData::Image::sptr image )
 {
-    m_image = image;
-    m_imageHelper = ::fwComEd::helper::Image::New(image);
+    m_image       = image;
+    m_imageHelper = ::fwDataTools::helper::Image::New(image);
     //We assume that during all the command construction, the image do not
     //change and is not destroyed, so we can keep a reference to it buffer
 //    m_buffer = static_cast< ::fwData::Image::BufferType* >( image->getBuffer() );
@@ -55,9 +47,9 @@ void PaintCommand::setImage( ::fwData::Image::sptr  image )
 void PaintCommand::prePaint( ::fwData::Image::IndexType x, ::fwData::Image::IndexType y, ::fwData::Image::IndexType z )
 {
     ::fwData::Image::sptr image = m_image.lock();
-    const ::fwData::Image::SizeType &size = image->getSize();
-    const int &sx = size[0];
-    const int &sy = size[1];
+    const ::fwData::Image::SizeType& size  = image->getSize();
+    const int& sx                          = size[0];
+    const int& sy                          = size[1];
     const ::fwData::Image::IndexType index = x + sx*y + z*sx*sy;
     this->prePaint(index);
 }
@@ -71,18 +63,19 @@ void PaintCommand::prePaint( ::fwData::Image::IndexType index )
 
     m_currentPrepaintIndex = index;
     SLM_ASSERT("currentPrepaintBuff must be empty. Forgot a postPaint call ?", m_currentPrepaintBuff.empty());
-    ::fwData::Image::BufferType *pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
-    ::fwData::Image::BufferType *buf  = pixels + index*imageTypeSize;
-    std::copy(buf, buf+imageTypeSize, std::back_insert_iterator<std::vector< ::fwData::Image::BufferType > >(m_currentPrepaintBuff));
+    ::fwData::Image::BufferType* pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
+    ::fwData::Image::BufferType* buf    = pixels + index*imageTypeSize;
+    std::copy(buf, buf+imageTypeSize,
+              std::back_insert_iterator<std::vector< ::fwData::Image::BufferType > >(m_currentPrepaintBuff));
 }
 
 //-----------------------------------------------------------------------------
 
 void PaintCommand::postPaint()
 {
-    ::fwData::Image::sptr image = m_image.lock();
-    ::fwData::Image::BufferType *pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
-    ::fwData::Image::BufferType *buf  = pixels + m_currentPrepaintIndex;
+    ::fwData::Image::sptr image         = m_image.lock();
+    ::fwData::Image::BufferType* pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
+    ::fwData::Image::BufferType* buf    = pixels + m_currentPrepaintIndex;
 
     unsigned int imageTypeSize = image->getPixelType().sizeOf();
     ::fwData::Image::BufferIndexType bufIndex = m_currentPrepaintIndex * imageTypeSize;
@@ -96,7 +89,8 @@ void PaintCommand::postPaint()
 
 //-----------------------------------------------------------------------------
 
-void PaintCommand::paint( ::fwData::Image::BufferIndexType index, ::fwData::Image::BufferType oldValue, ::fwData::Image::BufferType newValue )
+void PaintCommand::paint( ::fwData::Image::BufferIndexType index, ::fwData::Image::BufferType oldValue,
+                          ::fwData::Image::BufferType newValue )
 {
     m_commandIndexContainer.push_back(index);
     m_commandColorContainer.push_back( std::make_pair(oldValue,newValue) );
@@ -107,13 +101,13 @@ void PaintCommand::paint( ::fwData::Image::BufferIndexType index, ::fwData::Imag
 void PaintCommand::apply()
 {
     // start image editing
-    ::fwData::Image::BufferType *pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
+    ::fwData::Image::BufferType* pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
     SLM_ASSERT("commandIndexContainer and commandColorContainer must have same size",
-                m_commandColorContainer.size() == m_commandIndexContainer.size());
+               m_commandColorContainer.size() == m_commandIndexContainer.size());
 
     // do each voxel modification
     ColorContainer::const_iterator indexC( m_commandColorContainer.begin() );
-    BOOST_FOREACH(::fwData::Image::BufferIndexType index, m_commandIndexContainer)
+    for(::fwData::Image::BufferIndexType index :  m_commandIndexContainer)
     {
         pixels[ index ] = indexC->second;
         ++indexC;
@@ -126,13 +120,13 @@ void PaintCommand::apply()
 void PaintCommand::unapply()
 {
     // start image editing
-    ::fwData::Image::BufferType *pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
+    ::fwData::Image::BufferType* pixels = static_cast< ::fwData::Image::BufferType* >( m_imageHelper->getBuffer() );
     SLM_ASSERT("commandIndexContainer and commandColorContainer must have same size",
-                m_commandColorContainer.size() == m_commandIndexContainer.size());
+               m_commandColorContainer.size() == m_commandIndexContainer.size());
 
     // do each voxel modification
     ColorContainer::const_iterator indexC( m_commandColorContainer.begin() );
-    BOOST_FOREACH(::fwData::Image::BufferIndexType index, m_commandIndexContainer)
+    for(::fwData::Image::BufferIndexType index :  m_commandIndexContainer)
     {
         pixels[ index ] = indexC->first;
         ++indexC;
@@ -152,11 +146,16 @@ const std::string PaintCommand::getDescription() const
 
 void PaintCommand::notifyImageModification()
 {
-    if ( ! this->m_serviceNotifier.expired() )
+    if ( !this->m_serviceNotifier.expired() )
     {
-        ::fwComEd::ImageMsg::sptr msg = ::fwComEd::ImageMsg::New();
-        msg->addEvent( fwComEd::ImageMsg::BUFFER );
-        ::fwServices::IEditionService::notify( this->getNotifier(), m_image.lock(), msg );
+        auto sig = m_image.lock()->signal< ::fwData::Image::BufferModifiedSignalType >(
+            ::fwData::Image::s_BUFFER_MODIFIED_SIG);
+        {
+            auto slot = this->m_serviceNotifier.lock()->slot< ::fwServices::IService::UpdateSlotType >(
+                ::fwServices::IService::s_UPDATE_SLOT );
+            ::fwCom::Connection::Blocker block(sig->getConnection(slot));
+            sig->asyncEmit();
+        }
     }
 }
 
diff --git a/SrcLib/core/fwCommand/src/fwCommand/UndoRedoManager.cpp b/SrcLib/core/fwCommand/src/fwCommand/UndoRedoManager.cpp
index 899f1f3..c6a2c85 100755
--- a/SrcLib/core/fwCommand/src/fwCommand/UndoRedoManager.cpp
+++ b/SrcLib/core/fwCommand/src/fwCommand/UndoRedoManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,12 +28,14 @@ UndoRedoManager::sptr UndoRedoManager::getDefault()
 //-----------------------------------------------------------------------------
 
 UndoRedoManager::UndoRedoManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 UndoRedoManager::~UndoRedoManager() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwCore/CMakeLists.txt b/SrcLib/core/fwCore/CMakeLists.txt
index 2bd0bad..d1c817f 100644
--- a/SrcLib/core/fwCore/CMakeLists.txt
+++ b/SrcLib/core/fwCore/CMakeLists.txt
@@ -1,13 +1,28 @@
+fwLoadProperties()
 
-fwLib (fwCore 0.1)
-
+if(ANDROID)
+    find_package (Boost COMPONENTS thread system filesystem date_time chrono REQUIRED)
+else()
+    find_package (Boost COMPONENTS thread system filesystem date_time log log_setup REQUIRED)
+endif()
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+fwForwardLink(
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_DATE_TIME_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+    ${Boost_THREAD_LIBRARY}
+)
 
+if(ANDROID)
+fwLink(
+        log
+)
 
-find_package (Boost COMPONENTS regex filesystem date_time chrono log log_setup REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
+else()
+fwLink(
+    ${Boost_LOG_LIBRARY}
+    ${Boost_LOG_SETUP_LIBRARY}
+)
+endif()
 
-unset(Boost_LIBRARIES)
-find_package (Boost COMPONENTS thread system REQUIRED)
-fwForwardLink(${Boost_LIBRARIES})
 
diff --git a/SrcLib/core/fwCore/COPYING b/SrcLib/core/fwCore/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwCore/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwCore/COPYING.LESSER b/SrcLib/core/fwCore/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwCore/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwCore/bin/build.options b/SrcLib/core/fwCore/bin/build.options
deleted file mode 100644
index 66a982c..0000000
--- a/SrcLib/core/fwCore/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-TYPE    = 'shared'
-USE     = ['boost', 'boostThread', 'boostLog', 'boostLogSetup']
-
-VERSION = '0-1'
diff --git a/SrcLib/core/fwCore/include/fwCore/BaseObject.hpp b/SrcLib/core/fwCore/include/fwCore/BaseObject.hpp
index d09368a..48b417a 100644
--- a/SrcLib/core/fwCore/include/fwCore/BaseObject.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/BaseObject.hpp
@@ -1,36 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCORE_BASEOBJECT_HPP
-#define __FWCORE_BASEOBJECT_HPP
+#ifndef __FWCORE_BASEOBJECT_HPP__
+#define __FWCORE_BASEOBJECT_HPP__
 
 
-#include <boost/enable_shared_from_this.hpp>
-
 #include "fwCore/macros.hpp"
 #include "fwCore/config.hpp"
 
+//keep it first to prevent nasty warns in MSVC
+#include <boost/config.hpp>
+
 namespace fwCore
 {
 
 /**
  * @brief Base class for all FW4SPL's classes
  */
-class FWCORE_CLASS_API BaseObject : public ::boost::enable_shared_from_this<BaseObject>
+class FWCORE_CLASS_API BaseObject : public std::enable_shared_from_this<BaseObject>
 {
 
-public :
+public:
     fwCoreNonInstanciableClassDefinitionsMacro( (BaseObject) );
 
-protected :
-    virtual ~BaseObject(){};
-    using ::boost::enable_shared_from_this<BaseObject>::shared_from_this;
+protected:
+    virtual ~BaseObject()
+    {
+    }
+    using std::enable_shared_from_this<BaseObject>::shared_from_this;
 };
 
 } // namespace fwCore
 
-#endif // __FWCORE_BASEOBJECT_HPP
+#endif // __FWCORE_BASEOBJECT_HPP__
 
diff --git a/SrcLib/core/fwCore/include/fwCore/Demangler.hpp b/SrcLib/core/fwCore/include/fwCore/Demangler.hpp
index 0f9acdb..24f5008 100644
--- a/SrcLib/core/fwCore/include/fwCore/Demangler.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/Demangler.hpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#ifndef _FWCORE_DEMANGLER_HPP_
-#define _FWCORE_DEMANGLER_HPP_
+#ifndef __FWCORE_DEMANGLER_HPP__
+#define __FWCORE_DEMANGLER_HPP__
 
 #include <string>
 #include <typeinfo>
@@ -16,15 +15,15 @@
 namespace fwCore
 {
 
- /**
-  * @brief typeid, string or object name demangler.
-  *
-  * getClassname() is an alias for getRootedClassname()
-  *
-  * @warning getRootedClassname() use on fundamentals types (int, float, ...)
-  * will give a bad result ( ex: \::int )
-  *
-  */
+/**
+ * @brief typeid, string or object name demangler.
+ *
+ * getClassname() is an alias for getRootedClassname()
+ *
+ * @warning getRootedClassname() use on fundamentals types (int, float, ...)
+ * will give a bad result ( ex: \::int )
+ *
+ */
 class FWCORE_CLASS_API Demangler
 {
 public:
@@ -53,7 +52,9 @@ public:
      *
      * @param s object which type has to be demangled
      */
-    template<typename T> Demangler(T &s): m_name(typeid(s).name()) {};
+    template<typename T> Demangler(T &s) : m_name(typeid(s).name())
+    {
+    }
 
     /**
      * @brief Destructor
@@ -121,10 +122,10 @@ protected:
 
 
 
- /**
-  * @brief Type demangler.
-  * Use Demangler class to get a demangled string for the type T.
-  */
+/**
+ * @brief Type demangler.
+ * Use Demangler class to get a demangled string for the type T.
+ */
 template <class T>
 class TypeDemangler : public Demangler
 {
@@ -137,7 +138,9 @@ public:
      * @brief Constructor
      * @tparam T Type to demangle
      */
-    TypeDemangler<T>()  : Demangler(typeid(T)) {};
+    TypeDemangler()  : Demangler(typeid(T))
+    {
+    }
 
     /**  @} */
 };
@@ -154,20 +157,38 @@ public:
  *
  * @{ */
 template <class T>
-inline std::string getLeafClassname()   { return TypeDemangler<T>().getLeafClassname();   } ;
+inline std::string getLeafClassname()
+{
+    return TypeDemangler<T>().getLeafClassname();
+}
 template <class T>
-inline std::string getFullClassname()   { return TypeDemangler<T>().getFullClassname();   } ;
+inline std::string getFullClassname()
+{
+    return TypeDemangler<T>().getFullClassname();
+}
 template <class T>
-inline std::string getClassname()       { return TypeDemangler<T>().getClassname();       } ;
+inline std::string getClassname()
+{
+    return TypeDemangler<T>().getClassname();
+}
 template <class T>
-inline std::string getRootedClassname() { return TypeDemangler<T>().getRootedClassname(); } ;
+inline std::string getRootedClassname()
+{
+    return TypeDemangler<T>().getRootedClassname();
+}
 
 template <class T>
-inline std::string getFullNamespace()   { return TypeDemangler<T>().getFullNamespace();   } ;
+inline std::string getFullNamespace()
+{
+    return TypeDemangler<T>().getFullNamespace();
+}
 template <class T>
-inline std::string getRootedNamespace() { return TypeDemangler<T>().getRootedNamespace(); } ;
+inline std::string getRootedNamespace()
+{
+    return TypeDemangler<T>().getRootedNamespace();
+}
 /**  @} */
 
 } // namespace fwCore
 
-#endif // _FWCORE_DEMANGLER_HPP_
+#endif // __FWCORE_DEMANGLER_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/Exception.hpp b/SrcLib/core/fwCore/include/fwCore/Exception.hpp
index 83c5728..fb3c083 100644
--- a/SrcLib/core/fwCore/include/fwCore/Exception.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/Exception.hpp
@@ -1,12 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#ifndef _FWCORE_EXCEPTION_HPP_
-#define _FWCORE_EXCEPTION_HPP_
+#ifndef __FWCORE_EXCEPTION_HPP__
+#define __FWCORE_EXCEPTION_HPP__
 
 
 #include <stdexcept>
@@ -30,4 +30,4 @@ public:
 
 } //namespace fwCore
 
-#endif //_FWCORE_EXCEPTION_FWEXCEPTION_HPP_
+#endif //__FWCORE_EXCEPTION_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/HiResClock.hpp b/SrcLib/core/fwCore/include/fwCore/HiResClock.hpp
index ae83f80..6a0024c 100644
--- a/SrcLib/core/fwCore/include/fwCore/HiResClock.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/HiResClock.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCORE_HIRESCLOCK_HPP_
-#define _FWCORE_HIRESCLOCK_HPP_
+#ifndef __FWCORE_HIRESCLOCK_HPP__
+#define __FWCORE_HIRESCLOCK_HPP__
 
 #include "fwCore/config.hpp"
 
@@ -49,4 +49,4 @@ FWCORE_API HiResClockType getTimeInSec();
 
 } //namespace fwCore
 
-#endif // _FWCORE_HIRESCLOCK_HPP_
+#endif // __FWCORE_HIRESCLOCK_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/HiResTimer.hpp b/SrcLib/core/fwCore/include/fwCore/HiResTimer.hpp
index bfa6bfa..6879297 100644
--- a/SrcLib/core/fwCore/include/fwCore/HiResTimer.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/HiResTimer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCORE_HIRESTIMER_HPP_
-#define _FWCORE_HIRESTIMER_HPP_
+#ifndef __FWCORE_HIRESTIMER_HPP__
+#define __FWCORE_HIRESTIMER_HPP__
 
 #ifdef WIN32
 #include <windows.h>
@@ -28,7 +28,7 @@ namespace fwCore
 class FWCORE_CLASS_API HiResTimer : public BaseObject
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (HiResTimer)(BaseObject), (()), new HiResTimer) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (HiResTimer)(BaseObject), (()), new HiResTimer);
 
     /**
      * @name Constructor/Destructor
@@ -56,7 +56,7 @@ public:
      * @param initial_value Initial value in microseconds from which the timer
      * will start to count.
      */
-    FWCORE_API void   reset(::fwCore::HiResClock::HiResClockType initial_value=0.);
+    FWCORE_API void   reset(::fwCore::HiResClock::HiResClockType initial_value = 0.);
 
 
     /**
@@ -101,9 +101,9 @@ private:
     /**
      * @brief timer status.
      */
-    bool   m_stopped;
+    bool m_stopped;
 };
 
 } //namespace fwCore
 
-#endif // _FWCORE_HIRESTIMER_HPP_
+#endif // __FWCORE_HIRESTIMER_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/LogicStamp.hpp b/SrcLib/core/fwCore/include/fwCore/LogicStamp.hpp
index 257fe9d..08c3bd0 100644
--- a/SrcLib/core/fwCore/include/fwCore/LogicStamp.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/LogicStamp.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCORE_LOGICSTAMP_HPP
-#define __FWCORE_LOGICSTAMP_HPP
+#ifndef __FWCORE_LOGICSTAMP_HPP__
+#define __FWCORE_LOGICSTAMP_HPP__
 
 #include "fwCore/base.hpp"
 #include "fwCore/HiResClock.hpp"
@@ -37,7 +37,7 @@ public:
     FWCORE_API LogicStamp()
     {
         this->m_modifiedLogicalTime = 0;
-    };
+    }
 
     /**  @} */
 
@@ -54,7 +54,7 @@ public:
     FWCORE_API LogicStampType getLogicStamp() const
     {
         return this->m_modifiedLogicalTime;
-    };
+    }
 
 
     /**
@@ -65,7 +65,7 @@ public:
     FWCORE_API bool operator>(const LogicStamp& ls) const
     {
         return ( this->m_modifiedLogicalTime > ls.m_modifiedLogicalTime );
-    };
+    }
 
     /**
      * @brief Lesser than operator for LogicStamp.
@@ -75,7 +75,7 @@ public:
     FWCORE_API bool operator<(const LogicStamp& ls) const
     {
         return ( this->m_modifiedLogicalTime < ls.m_modifiedLogicalTime );
-    };
+    }
 
     /**
      * @brief Cast operator for LogicStamp.
@@ -83,7 +83,7 @@ public:
     FWCORE_API operator LogicStampType() const
     {
         return this->m_modifiedLogicalTime;
-    };
+    }
 
 
 private:
@@ -97,5 +97,5 @@ private:
 
 } //namespace fwCore
 
-#endif // __FWCORE_LOGICSTAMP_HPP
+#endif // __FWCORE_LOGICSTAMP_HPP__
 
diff --git a/SrcLib/core/fwCore/include/fwCore/Namespace.hpp b/SrcLib/core/fwCore/include/fwCore/Namespace.hpp
index 8ff890e..814bf74 100644
--- a/SrcLib/core/fwCore/include/fwCore/Namespace.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,7 +10,7 @@
 /**
  * @brief       This namespace fwCore provides common foundations for FW4SPL.
  * @namespace   fwCore
- * 
+ *
  * @date        2009-2010
  *
  */
diff --git a/SrcLib/core/fwCore/include/fwCore/Profiling.hpp b/SrcLib/core/fwCore/include/fwCore/Profiling.hpp
new file mode 100644
index 0000000..23c4105
--- /dev/null
+++ b/SrcLib/core/fwCore/include/fwCore/Profiling.hpp
@@ -0,0 +1,213 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWCORE_PROFILING_HPP__
+#define __FWCORE_PROFILING_HPP__
+
+#include "fwCore/HiResTimer.hpp"
+#include "fwCore/spyLog.hpp"
+
+// Define FW_PROFILING_DISABLED before including this header if you need to disable profiling output
+
+namespace fwCore
+{
+
+/**
+ * @brief This class holds a timer. It displays elapsed time at destruction.
+ */
+class fwProfileScope
+{
+public:
+    fwProfileScope(const char* label) :
+        m_label(label)
+    {
+        m_timer.start();
+    }
+
+    ~fwProfileScope()
+    {
+        m_timer.stop();
+
+        std::stringstream log;
+        log << "TIMER : " << m_label << " = " << m_timer.getElapsedTimeInMilliSec() << " ms.";
+        ::fwCore::log::SpyLogger::getSpyLogger().info(log.str(), __FILE__, __LINE__);
+    }
+
+    /// Timer
+    ::fwCore::HiResTimer m_timer;
+    /// Timer label
+    const char* m_label;
+};
+
+/**
+ * @brief This class holds a timer. It allows to compute the elapsed time between two profiling scopes.
+ */
+class fwProfileFrameTimer
+{
+public:
+    fwProfileFrameTimer(double interval) :
+        m_interval(interval),
+        m_average(0),
+        m_count(0)
+    {
+        m_timer.start();
+    }
+
+    bool tick()
+    {
+        m_average = m_timer.getElapsedTimeInMilliSec() / ++m_count;
+        return m_timer.getElapsedTimeInMilliSec() >= m_interval * 1000;
+    }
+
+    bool tick(::fwCore::HiResClock::HiResClockType time)
+    {
+        m_average = (m_average * m_count + time) / (m_count + 1);
+        ++m_count;
+        return m_timer.getElapsedTimeInMilliSec() >= m_interval * 1000;
+    }
+
+    void reset()
+    {
+        m_count   = 0;
+        m_average = 0;
+        m_timer.reset();
+    }
+
+    /// Timer
+    ::fwCore::HiResTimer m_timer;
+    /// Timer label
+    double m_interval;
+    /// Actual elapsed time average
+    double m_average;
+    /// Number of calls, used to compute the average
+    unsigned int m_count;
+};
+
+/**
+ * @brief This class holds a timer. It displays elapsed time at destruction every N seconds.
+ */
+class fwProfileScopeAvg
+{
+public:
+    fwProfileScopeAvg(const char* label, fwProfileFrameTimer& frameTimer) :
+        m_label(label),
+        m_frameTimer(frameTimer)
+    {
+        m_timer.start();
+    }
+
+    ~fwProfileScopeAvg()
+    {
+        m_timer.stop();
+
+        if( m_frameTimer.tick(m_timer.getElapsedTimeInMilliSec()) )
+        {
+            std::stringstream log;
+            log << "TIMER (avg over " << m_frameTimer.m_interval << "s) : " << m_label <<
+                " = " << m_frameTimer.m_average << " ms.";
+            ::fwCore::log::SpyLogger::getSpyLogger().info(log.str(), __FILE__, __LINE__);
+            m_frameTimer.reset();
+        }
+    }
+
+    /// Timer
+    ::fwCore::HiResTimer m_timer;
+    /// Timer label
+    const char* m_label;
+    /// Timer used to get the elapsed time between two profiling scopes
+    fwProfileFrameTimer& m_frameTimer;
+};
+
+/**
+ * @brief This class is used to compute the elapsed time between two profiling scopes.
+ */
+class fwProfileFrame
+{
+public:
+    fwProfileFrame(const char* label, fwProfileFrameTimer& frameTimer) :
+        m_label(label),
+        m_frameTimer(frameTimer)
+    {
+        std::stringstream log;
+        log << "FRAME : " << m_label << " = " << m_frameTimer.m_timer.getElapsedTimeInMilliSec() << " ms.";
+        ::fwCore::log::SpyLogger::getSpyLogger().info(log.str(), __FILE__, __LINE__);
+        m_frameTimer.reset();
+    }
+
+    ~fwProfileFrame()
+    {
+    }
+
+    /// Timer label
+    const char* m_label;
+    /// Timer used to get the elapsed time between two profiling scopes
+    fwProfileFrameTimer& m_frameTimer;
+};
+
+/**
+ * @brief This class is used to compute the elapsed time between two profiling scopes every N seconds.
+ */
+class fwProfileFrameAvg
+{
+public:
+    fwProfileFrameAvg(const char* label, fwProfileFrameTimer& frameTimer) :
+        m_label(label),
+        m_frameTimer(frameTimer)
+    {
+        if( m_frameTimer.tick() )
+        {
+            std::stringstream log;
+            log << "FRAME (avg over " << m_frameTimer.m_interval << "s) : " << m_label <<
+                " = " << m_frameTimer.m_average << " ms.";
+            ::fwCore::log::SpyLogger::getSpyLogger().info(log.str(), __FILE__, __LINE__);
+            m_frameTimer.reset();
+        }
+    }
+
+    ~fwProfileFrameAvg()
+    {
+    }
+
+    /// Timer label
+    const char* m_label;
+    /// Timer used to get the elapsed time between two profiling scopes
+    fwProfileFrameTimer& m_frameTimer;
+};
+
+#ifndef FW_PROFILING_DISABLED
+
+/// Display the elapsed time inside a code block
+#define FW_PROFILE(_label) \
+    ::fwCore::fwProfileScope BOOST_PP_CAT( profiler, __LINE__ ) (_label);
+
+/// Display the elapsed time inside a code block, every N seconds
+#define FW_PROFILE_AVG(_label, interval) \
+    static ::fwCore::fwProfileFrameTimer BOOST_PP_CAT( frameTimer, __LINE__ ) (interval); \
+    ::fwCore::fwProfileScopeAvg BOOST_PP_CAT( profiler, __LINE__ ) (_label, BOOST_PP_CAT( frameTimer, __LINE__ ));
+
+/// Display the elapsed time between two calls of a code block
+#define FW_PROFILE_FRAME(_label) \
+    static ::fwCore::fwProfileFrameTimer BOOST_PP_CAT( frameTimer, __LINE__ ) (0); \
+    ::fwCore::fwProfileFrame BOOST_PP_CAT( profiler, __LINE__ ) (_label, BOOST_PP_CAT( frameTimer, __LINE__ ));
+
+/// Display the elapsed time between two calls of a code block, every N seconds
+#define FW_PROFILE_FRAME_AVG(_label, interval) \
+    static ::fwCore::fwProfileFrameTimer BOOST_PP_CAT( frameTimer, __LINE__ ) (interval); \
+    ::fwCore::fwProfileFrameAvg BOOST_PP_CAT( profiler, __LINE__ ) (_label, BOOST_PP_CAT( frameTimer, __LINE__ ));
+
+#else // FW_PROFILING_DISABLED
+
+#define FW_PROFILE(_label)
+#define FW_PROFILE_AVG(_label, interval)
+#define FW_PROFILE_FRAME(_label)
+#define FW_PROFILE_FRAME_AVG(_label, interval)
+
+#endif // FW_PROFILING_DISABLED
+
+} //namespace fwCore
+
+
+#endif // __FWCORE_PROFILING_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/TimeStamp.hpp b/SrcLib/core/fwCore/include/fwCore/TimeStamp.hpp
index f1e79d7..95d1255 100644
--- a/SrcLib/core/fwCore/include/fwCore/TimeStamp.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/TimeStamp.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCORE_TIMESTAMP_HPP
-#define __FWCORE_TIMESTAMP_HPP
+#ifndef __FWCORE_TIMESTAMP_HPP__
+#define __FWCORE_TIMESTAMP_HPP__
 
 #include "fwCore/base.hpp"
 #include "fwCore/HiResClock.hpp"
@@ -21,7 +21,7 @@ class FWCORE_CLASS_API TimeStamp : public BaseObject
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (TimeStamp)(BaseObject), (()), new TimeStamp) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (TimeStamp)(BaseObject), (()), new TimeStamp);
 
     /**
      * @brief Type used in logical typestamp.
@@ -38,7 +38,7 @@ public:
     {
         this->m_modifiedTime = 0;
         this->m_lifePeriod   = 0;
-    };
+    }
 
     /**  @} */
 
@@ -55,7 +55,7 @@ public:
     FWCORE_API TimeStampType getTimeStamp() const
     {
         return this->m_modifiedTime;
-    };
+    }
 
 
 
@@ -67,7 +67,7 @@ public:
     FWCORE_API bool operator>(const TimeStamp& ts) const
     {
         return ( this->m_modifiedTime > ts.m_modifiedTime );
-    };
+    }
 
     /**
      * @brief Lesser than operator for TimeStamp.
@@ -77,7 +77,7 @@ public:
     FWCORE_API bool operator<(const TimeStamp& ts) const
     {
         return ( this->m_modifiedTime < ts.m_modifiedTime );
-    };
+    }
 
     /**
      * @brief Cast operator for TimeStamp.
@@ -85,7 +85,7 @@ public:
     FWCORE_API operator TimeStampType() const
     {
         return this->m_modifiedTime;
-    };
+    }
 
 
     /**
@@ -96,7 +96,7 @@ public:
     FWCORE_API void setLifePeriod(TimeStampType period)
     {
         m_lifePeriod = period;
-    };
+    }
 
     /**
      * @brief Getter for the life period
@@ -106,7 +106,7 @@ public:
     FWCORE_API TimeStampType getLifePeriod() const
     {
         return m_lifePeriod;
-    };
+    }
 
 
     /**
@@ -137,4 +137,4 @@ private:
 
 } //namespace fwCore
 
-#endif // __FWCORE_TIMESTAMP_HPP
+#endif // __FWCORE_TIMESTAMP_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/base.hpp b/SrcLib/core/fwCore/include/fwCore/base.hpp
index 0d5c6c1..40fb1bf 100644
--- a/SrcLib/core/fwCore/include/fwCore/base.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/base.hpp
@@ -1,21 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-/** 
+/**
  * @file fwCore/base.hpp
  * @brief This file includes the minimal tools to work with FW4SPL.
  *
- * 
+ *
  */
-//#ifndef __FWCORE_BASE_HPP
-//#define __FWCORE_BASE_HPP
+//#ifndef __FWCORE_BASE_HPP__
+//#define __FWCORE_BASE_HPP__
 
 #include <fwCore/BaseObject.hpp>
 #include <fwCore/macros.hpp>
 #include <fwCore/spyLog.hpp>
 #include <fwCore/exceptionmacros.hpp>
 
-//#endif //__FWCORE_BASE_HPP
+//#endif //__FWCORE_BASE_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/concept_checks.hpp b/SrcLib/core/fwCore/include/fwCore/concept_checks.hpp
index 1916967..81ff5d6 100644
--- a/SrcLib/core/fwCore/include/fwCore/concept_checks.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/concept_checks.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,10 +8,10 @@
  * @file fwCore/concept_checks.hpp
  * @brief This file defines some fw4spl concept checks.
  *
- * 
+ *
  */
-#ifndef __FWCORE_CONCEPT_CHECK_HPP
-#define __FWCORE_CONCEPT_CHECK_HPP
+#ifndef __FWCORE_CONCEPT_CHECKS_HPP__
+#define __FWCORE_CONCEPT_CHECKS_HPP__
 
 #include <boost/concept_check.hpp>
 
@@ -27,22 +27,22 @@ namespace concepts
 template <class X>
 struct SharedPtrTypedef
 {
- public:
-
-    BOOST_CONCEPT_USAGE(SharedPtrTypedef)
-    {
-        typename X::sptr::element_type *a=0;
-        X *b=0;
-        FwCoreNotUsedMacro(a);
-        FwCoreNotUsedMacro(b);
-        same_type(a,b);
-    }
-
- private:
-
-    // Type deduction will fail unless the arguments have the same type.
-    template <typename T>
-    void same_type(T *, T *);
+    public:
+
+        BOOST_CONCEPT_USAGE(SharedPtrTypedef)
+        {
+            typename X::sptr::element_type *a = 0;
+            X *b = 0;
+            FwCoreNotUsedMacro(a);
+            FwCoreNotUsedMacro(b);
+            same_type(a,b);
+        }
+
+    private:
+
+        // Type deduction will fail unless the arguments have the same type.
+        template <typename T>
+        void same_type(T *, T *);
 };
 
 
@@ -50,4 +50,4 @@ struct SharedPtrTypedef
 
 } // namespace fwCore
 
-#endif //__FWCORE_CONCEPT_CHECK_HPP
+#endif //__FWCORE_CONCEPT_CHECKS_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/config.hpp b/SrcLib/core/fwCore/include/fwCore/config.hpp
deleted file mode 100644
index 066297e..0000000
--- a/SrcLib/core/fwCore/include/fwCore/config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWCORE_CONFIG_HPP_
-#define _FWCORE_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWCORE_EXPORTS
-    #define FWCORE_API __declspec(dllexport)
-    #else
-    #define FWCORE_API __declspec(dllimport)
-    #endif
-
-    #define FWCORE_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWCORE_EXPORTS
-    #define FWCORE_API __attribute__ ((visibility("default")))
-    #define FWCORE_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWCORE_API __attribute__ ((visibility("hidden")))
-    //#define FWCORE_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWCORE_API
-    #define FWCORE_CLASS_API
-    #endif
-
-#else
-
-    #define FWCORE_API
-    #define FWCORE_CLASS_API
-
-#endif
-
-
-#endif //_FWCORE_CONFIG_HPP_
diff --git a/SrcLib/core/fwCore/include/fwCore/exceptionmacros.hpp b/SrcLib/core/fwCore/include/fwCore/exceptionmacros.hpp
index 7a7048a..b38bdc1 100644
--- a/SrcLib/core/fwCore/include/fwCore/exceptionmacros.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/exceptionmacros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCORE_EXCEPTION_MACRO_HPP_
-# define _FWCORE_EXCEPTION_MACRO_HPP_
+#ifndef __FWCORE_EXCEPTIONMACROS_HPP__
+#define __FWCORE_EXCEPTIONMACROS_HPP__
 
 # include <boost/exception/exception.hpp>
 # include <boost/throw_exception.hpp>
@@ -27,8 +27,8 @@
 
 # define __FWCORE_EXCEPTION_INFO(excep)         \
     "Exception: <"                              \
-    << __FWCORE_EXCEPTION_GETCLASSNAME(excep)   \
-    << ">: " << excep.what()
+        << __FWCORE_EXCEPTION_GETCLASSNAME(excep)   \
+        << ">: " << excep.what()
 
 // --------------------------------------------------------------------------------
 
@@ -54,16 +54,16 @@
     __FWCORE_EXCEPT_RAISE_EXCEPTION_MSG(__FWCORE_EXCEPTION_CLASS, msg)
 
 # define __FWCORE_EXCEPT_RAISE_EXCEPTION_IF(excep, cond)        \
-    __FWCORE_IF(cond, __FWCORE_EXCEPT_RAISE_EXCEPTION(excep);)
+    __FWCORE_IF(cond, __FWCORE_EXCEPT_RAISE_EXCEPTION(excep); )
 
 # define __FWCORE_EXCEPT_RAISE_IF(msg, cond)            \
-    __FWCORE_IF(cond, __FWCORE_EXCEPT_RAISE(msg);)
+    __FWCORE_IF(cond, __FWCORE_EXCEPT_RAISE(msg); )
 
 # define __FWCORE_EXCEPT_FORWARD_EXCEPTION(excep)       \
     BOOST_THROW_EXCEPTION(excep)
 
 # define __FWCORE_EXCEPT_FORWARD_EXCEPTION_IF(excep, cond)    \
-    __FWCORE_IF(cond, BOOST_THROW_EXCEPTION(excep);)
+    __FWCORE_IF(cond, BOOST_THROW_EXCEPTION(excep); )
 
 // -----------------------------------------------------------------------------
 
@@ -117,4 +117,4 @@
         __FWCORE_EXCEPT_FORWARD_EXCEPTION_IF(excep, cond);               \
         )
 
-#endif  // _FWCORE_EXCEPTION_MACRO_HPP_
+#endif  // __FWCORE_EXCEPTIONMACROS_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/log/Namespace.hpp b/SrcLib/core/fwCore/include/fwCore/log/Namespace.hpp
index eab42e2..748c006 100644
--- a/SrcLib/core/fwCore/include/fwCore/log/Namespace.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/log/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@ namespace fwCore
 /**
  * @brief       This namespace fwCore::log provides common foundations for log in FW4SPL.
  * @namespace   fwCore::log
- * 
+ *
  * @date        2012.
  */
 namespace log
diff --git a/SrcLib/core/fwCore/include/fwCore/log/ScopedMessage.hpp b/SrcLib/core/fwCore/include/fwCore/log/ScopedMessage.hpp
index a61a097..2a6d790 100644
--- a/SrcLib/core/fwCore/include/fwCore/log/ScopedMessage.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/log/ScopedMessage.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCORE_LOG_SCOPEDMESSAGE_HPP_
-#define _FWCORE_LOG_SCOPEDMESSAGE_HPP_
+#ifndef __FWCORE_LOG_SCOPEDMESSAGE_HPP__
+#define __FWCORE_LOG_SCOPEDMESSAGE_HPP__
 
 #include <string>
 
@@ -26,30 +26,32 @@ class SpyLogger;
  * Generate a scoped trace message with an enter and a leave message, and the
  * time elapsed between the two messages.
  *
- * 
+ *
  */
-class FWCORE_CLASS_API ScopedMessage: public ::fwCore::BaseObject
+class FWCORE_CLASS_API ScopedMessage : public ::fwCore::BaseObject
 {
 
 public:
 
     FWCORE_API ScopedMessage( const char * _file, int _line, std::string enterMessage, std::string leaveMessage = "");
 
-    void use(){}; // avoid compiler warnings like "variable X never used"
+    void use()
+    {
+    }             // avoid compiler warnings like "variable X never used"
 
     FWCORE_API virtual ~ScopedMessage();
 
 protected:
 
     const char * m_file;
-    int          m_line;
-    std::string  m_baseMsg;
-    std::string  m_leave;
+    int m_line;
+    std::string m_baseMsg;
+    std::string m_leave;
 
-    ::fwCore::HiResTimer  m_timer;
+    ::fwCore::HiResTimer m_timer;
 };
 
 } // namespace log
 } // namespace fwCore
 
-#endif // _FWCORE_LOG_SCOPEDMESSAGE_HPP_
+#endif // __FWCORE_LOG_SCOPEDMESSAGE_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/log/SpyLogger.hpp b/SrcLib/core/fwCore/include/fwCore/log/SpyLogger.hpp
index 7d98d0d..f144a59 100644
--- a/SrcLib/core/fwCore/include/fwCore/log/SpyLogger.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/log/SpyLogger.hpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWCORE_LOG_SPYLOGGER_HPP_
-#define _FWCORE_LOG_SPYLOGGER_HPP_
+#ifndef __FWCORE_LOG_SPYLOGGER_HPP__
+#define __FWCORE_LOG_SPYLOGGER_HPP__
 
 #include <iostream>
 #include <string>
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwCore/BaseObject.hpp"
 #include "fwCore/config.hpp"
@@ -23,12 +22,12 @@ namespace log
 /**
  * @brief   Implements the SpyLogger.
  *
- * 
+ *
  */
 class SpyLogger : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     enum LevelType
     {
@@ -64,9 +63,12 @@ public :
 
     FWCORE_API void log(const std::string & mes, const char * file = 0, int line = -1);
 
-    static SpyLogger &getSpyLogger() {return s_spyLogger;}
+    static SpyLogger &getSpyLogger()
+    {
+        return s_spyLogger;
+    }
 
-protected :
+protected:
 
 
     FWCORE_API SpyLogger ();
@@ -78,4 +80,4 @@ protected :
 } // namespace log
 } // namespace fwCore
 
-#endif // _FWCORE_LOG_SPYLOGGER_HPP_
+#endif // __FWCORE_LOG_SPYLOGGER_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/macros.hpp b/SrcLib/core/fwCore/include/fwCore/macros.hpp
index 1405294..9734968 100644
--- a/SrcLib/core/fwCore/include/fwCore/macros.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/macros.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,9 +12,7 @@
  */
 
 #include <string>
-
-#include <boost/shared_ptr.hpp>
-#include <boost/weak_ptr.hpp>
+#include <memory>
 
 #include <boost/preprocessor/cat.hpp>
 #include <boost/preprocessor/comparison/equal.hpp>
@@ -52,9 +50,10 @@
 #define __FWCORE_TYPEDEF_SELF_NAME               SelfType
 #define __FWCORE_TYPEDEF_SHARED_PTR_NAME         sptr
 #define __FWCORE_TYPEDEF_WEAK_PTR_NAME           wptr
+#define __FWCORE_TYPEDEF_UNIQUE_PTR_NAME         uptr
 #define __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME   csptr
 #define __FWCORE_TYPEDEF_WEAK_PTR_CONST_NAME     cwptr
-#define __FWCORE_TYPEDEF_SHARED_PTR_FACTORY_NAME NewSptr
+#define __FWCORE_TYPEDEF_UNIQUE_PTR_CONST_NAME   cuptr
 #define __FWCORE_FACTORY_NAME                    New
 #define __FWCORE_TYPEDEF_SUPERCLASS_NAME         BaseClass
 #define __FWCORE_TYPEDEF_ROOTCLASS_NAME          RootClass
@@ -63,7 +62,6 @@
 #define __FWCORE_CONST_CAST_FUNC_NAME            constCast
 #define __FWCORE_SPTR_FROM_THIS_FUNC_NAME        getSptr
 #define __FWCORE_CONST_SPTR_FROM_THIS_FUNC_NAME  getConstSptr
-#define __FWCORE_SHARED_PTR_FACTORY_CLASSNAME    __SelfNewSptr__
 #define __FWCORE_ARG_NAME                        __var
 /** @endcond */
 
@@ -73,13 +71,17 @@
  * @{ */
 
 /** Expand to shared_ptr < _cls_ > */
-#define SPTR(_cls_)  ::boost::shared_ptr < _cls_ >
+#define SPTR(_cls_)  std::shared_ptr < _cls_ >
 /** Expand to shared_ptr < const _cls_ > */
-#define CSPTR(_cls_) ::boost::shared_ptr < const _cls_ >
+#define CSPTR(_cls_) std::shared_ptr < const _cls_ >
 /** Expand to weak_ptr < _cls_ > */
-#define WPTR(_cls_)  ::boost::weak_ptr   < _cls_ >
+#define WPTR(_cls_)  std::weak_ptr   < _cls_ >
 /** Expand to weak_ptr < const _cls_ > */
-#define CWPTR(_cls_) ::boost::weak_ptr   < const _cls_ >
+#define CWPTR(_cls_) std::weak_ptr   < const _cls_ >
+/** Expand to unique_ptr < _cls_ > */
+#define UPTR(_cls_)  std::unique_ptr < _cls_ >
+/** Expand to unique_ptr < const _cls_ > */
+#define CUPTR(_cls_) std::unique_ptr < const _cls_ >
 /**  @} */
 
 
@@ -92,43 +94,52 @@
 #define __FWCORE_GET_ARGS_TYPES(_args_) BOOST_PP_SEQ_TRANSFORM(__FWCORE_GET_NTH_ELEM_III, 0, _args_)
 #define __FWCORE_GET_ARG_DEFAULT_IF_HAS_ONE(arg)             \
     BOOST_PP_EXPR_IF(                                        \
-            BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(arg), 2 ),     \
+        BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(arg), 2 ),     \
             =                                                \
             )                                                \
     BOOST_PP_EXPAND(                                         \
-            BOOST_PP_IF(                                     \
-                BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(arg), 2 ), \
-                BOOST_PP_SEQ_ELEM, __FWCORE_NOTHING_2        \
-                )                                            \
-                (1,arg)                                      \
-                )
+        BOOST_PP_IF(                                     \
+            BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(arg), 2 ), \
+            BOOST_PP_SEQ_ELEM, __FWCORE_NOTHING_2        \
+            )                                            \
+        (1,arg)                                      \
+        )
 
 
-#define __FWCORE_SEQ_IS_EMPTY_SINGLE(_seq_) BOOST_PP_AND( BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(_seq_), 1), BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_ELEM(0,_seq_)), 0) )
+#define __FWCORE_SEQ_IS_EMPTY_SINGLE(_seq_) BOOST_PP_AND( BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(_seq_), 1), \
+                                                          BOOST_PP_EQUAL(BOOST_PP_SEQ_SIZE(BOOST_PP_SEQ_ELEM(0,_seq_)), \
+                                                                         0) )
 #define __FWCORE_SEQ_IS_NOT_EMPTY_SINGLE(_seq_) BOOST_PP_NOT(__FWCORE_SEQ_IS_EMPTY_SINGLE(_seq_))
 
 /*
  * __FWCORE_GENERATE_ARGS( ((a)) ((b)) ((c)(default)) ) expands to  (a __var, ) (b __var, ) (c __var, = default) where __var is defined by __FWCORE_ARG_NAME
  */
 #define __FWCORE_ADD_ARG_NAME_AND_VALUE_III(s, _data_, _elem_)                                                                 \
-    BOOST_PP_EXPR_IF(_data_, (BOOST_PP_SEQ_ELEM(0,_elem_) __FWCORE_ARG_NAME ,  __FWCORE_GET_ARG_DEFAULT_IF_HAS_ONE(_elem_) ) )
+    BOOST_PP_EXPR_IF(_data_, \
+                     (BOOST_PP_SEQ_ELEM(0,_elem_) __FWCORE_ARG_NAME,  __FWCORE_GET_ARG_DEFAULT_IF_HAS_ONE(_elem_) ) )
 #define __FWCORE_GENERATE_ARGS(_args_)                                                                                                                                   \
     BOOST_PP_IF(                                                                                                                                                         \
-            __FWCORE_SEQ_IS_EMPTY_SINGLE(_args_),                                                                                                                        \
-            (),                                                                                                                                                          \
-            BOOST_PP_EXPR_IF(__FWCORE_SEQ_IS_NOT_EMPTY_SINGLE(_args_),BOOST_PP_SEQ_TRANSFORM)  (__FWCORE_ADD_ARG_NAME_AND_VALUE_III, BOOST_PP_SEQ_SIZE(_args_), _args_ ) \
-            )
+        __FWCORE_SEQ_IS_EMPTY_SINGLE(_args_),                                                                                                                        \
+        (),                                                                                                                                                          \
+        BOOST_PP_EXPR_IF(__FWCORE_SEQ_IS_NOT_EMPTY_SINGLE(_args_), \
+                         BOOST_PP_SEQ_TRANSFORM)  (__FWCORE_ADD_ARG_NAME_AND_VALUE_III, BOOST_PP_SEQ_SIZE(_args_), \
+                                                   _args_ ) \
+        )
 
 
 /*
  * __FWCORE_GENERATE_TYPED_NUMBERED_TUPLE( ((a)) ((b)) ((c)(default)) ) expands to  (a __var0, b __var1, c __var2 = default)  or to () if _args_ is an empty boost_pp sequence
  */
-#define __FWCORE_ADD_ID(_r_, _data_, _i_, _elem_) BOOST_PP_IF(_data_, ( BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2, 0, _elem_), _i_) BOOST_PP_TUPLE_ELEM(2, 1, _elem_)), ())
+#define __FWCORE_ADD_ID(_r_, _data_, _i_, _elem_) BOOST_PP_IF(_data_, \
+                                                              ( BOOST_PP_CAT( BOOST_PP_TUPLE_ELEM(2, 0, _elem_), \
+                                                                              _i_) BOOST_PP_TUPLE_ELEM(2, 1, \
+                                                                                                       _elem_)), ())
 #define __FWCORE_GENERATE_TYPED_NUMBERED_TUPLE(_args_)                                                                            \
     BOOST_PP_IF(                                                                                                                  \
         __FWCORE_SEQ_IS_EMPTY_SINGLE(_args_),                                                                                     \
         (),                                                                                                                       \
-        BOOST_PP_SEQ_TO_TUPLE(BOOST_PP_SEQ_FOR_EACH_I(__FWCORE_ADD_ID, BOOST_PP_SEQ_SIZE(_args_),__FWCORE_GENERATE_ARGS(_args_))) \
+        BOOST_PP_SEQ_TO_TUPLE(BOOST_PP_SEQ_FOR_EACH_I(__FWCORE_ADD_ID, BOOST_PP_SEQ_SIZE(_args_), \
+                                                      __FWCORE_GENERATE_ARGS(_args_))) \
         )
 
 
@@ -137,104 +148,10 @@
  */
 #define __FWCORE_GENERATE_NUMBERED_TUPLE(_args_)                                 \
     BOOST_PP_IF(                                                                 \
-            __FWCORE_SEQ_IS_EMPTY_SINGLE(_args_),                                \
-            (),                                                                  \
-            (BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(_args_), __FWCORE_ARG_NAME)) \
-            )
-
-/*
- * __FWCORE_GENERATE_CONSTRUCTOR(_factory_, _classname_, superclassname, _args_)
- *
- *  - _args_ is a boost_pp sequence of (0, 1 or 2)-elem sequences
- *
- *  expands to  _classname_ (_args_) : superclassname ( _factory_ (_args_) ) {}
- *
- *  ex: __FWCORE_GENERATE_CONSTRUCTOR( new obj, MyClass, MySuperClass, ((int)) ((float)(5.))  )
- *  expands to : MyClass(int __var0, float __var2 = 5.) : MySuperClass( new obj(__var0, __var1)) {}
- *
- *  ex: __FWCORE_GENERATE_CONSTRUCTOR( new obj, MyClass, MySuperClass, ((int)) ((string)) )
- *  expands to : MyClass(int __var0, string __var2) : MySuperClass( new obj(__var0, __var1)) {}
- *
- *  and: __FWCORE_GENERATE_CONSTRUCTOR( new obj, MyClass, MySuperClass, ())
- *  expands to : MyClass() : MySuperClass( new obj()) {}
- *
- */
-#define __FWCORE_GENERATE_CONSTRUCTOR( _factory_, _classname_, superclassname, _args_ )                                                   \
-    _classname_ __FWCORE_GENERATE_TYPED_NUMBERED_TUPLE(_args_) : superclassname ( _factory_ __FWCORE_GENERATE_NUMBERED_TUPLE(_args_) ) {}
-
-
-/*
- * __FWCORE_GENERATE_ONE_CONSTRUCTOR_III(_r_, _data_, _args_)
- *
- * wrapper of __FWCORE_GENERATE_CONSTRUCTOR for __FWCORE_GENERATE_CONSTRUCTORS_IV needs
- * _args_ : ( boost-needed, (factory) (classname) (superclassname), _args_)
- */
-#define __FWCORE_GENERATE_ONE_CONSTRUCTOR_III(_r_, _data_, _args_)                                                                 \
-     __FWCORE_GENERATE_CONSTRUCTOR( BOOST_PP_SEQ_ELEM(0,_data_),BOOST_PP_SEQ_ELEM(1,_data_),BOOST_PP_SEQ_ELEM(2,_data_), _args_) ;
-
-/*
- * __FWCORE_GENERATE_CONSTRUCTORS_IV( _factory_, _classname_, superclassname, _args_ )
- *
- * generates a constructor for each item of _args_ using "_factory_"
- *
- */
-#define __FWCORE_GENERATE_CONSTRUCTORS_IV( _factory_, _classname_, superclassname, _args_ )                          \
-    BOOST_PP_SEQ_FOR_EACH(__FWCORE_GENERATE_ONE_CONSTRUCTOR_III, (_factory_) (_classname_) (superclassname), _args_)
-
-
-/*
- * __FWCORE_GENERATE_ONE_CONSTRUCTOR_WITH_N_FACTORIES_III(_r_, _data_, _factory_args_)
- *
- * wrapper of __FWCORE_GENERATE_CONSTRUCTOR for __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES_III usage
- *
- * _factory_args_ format : (factory, ((type1)) ((type2)) ... ((typeN)) )
- */
-#define __FWCORE_GENERATE_ONE_CONSTRUCTOR_WITH_N_FACTORIES_III(_r_, _data_, _factory_args_) \
-     __FWCORE_GENERATE_CONSTRUCTOR(                                                         \
-             BOOST_PP_TUPLE_ELEM(2,0,_factory_args_),                                       \
-             BOOST_PP_SEQ_ELEM(0,_data_),                                                   \
-             BOOST_PP_SEQ_ELEM(1,_data_),                                                   \
-             BOOST_PP_TUPLE_ELEM(2,1,_factory_args_)                                        \
-             );
-
-/*
- * __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES_III( _classname_, superclassname, _factories_args_ )
- *
- * generates a constructor for each item of _args_ using a different specified factory
- *
- * ex. of _factories_args_ : ((new obj, () )) ((new objFromInt, ((int)) ))
- *
- */
-#define __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES_III( _classname_, superclassname, _factories_args_ )                        \
-    BOOST_PP_SEQ_FOR_EACH(__FWCORE_GENERATE_ONE_CONSTRUCTOR_WITH_N_FACTORIES_III, (_classname_) (superclassname), _factories_args_)
-
-
-/*
- * __FWCORE_GENERATE_CONSTRUCTORS( _classname_ , _factory_, _args_ )
- *
- * Wrapper for __FWCORE_GENERATE_CONSTRUCTORS_IV
- *
- */
-#define __FWCORE_GENERATE_CONSTRUCTORS( _classname_ , _factory_, _args_) \
-    __FWCORE_GENERATE_CONSTRUCTORS_IV(                                   \
-            _factory_,                                                   \
-            __FWCORE_SHARED_PTR_FACTORY_CLASSNAME,                       \
-            __FWCORE_TYPEDEF_SHARED_PTR_NAME,                            \
-            _args_                                                       \
-            )
-
-/*
- * __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES( _classname_ , _factories_args_ )
- *
- * Wrapper for __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES_III *
- */
-#define __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES( _classname_ , _factories_args_ ) \
-    __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES_III(                                  \
-            __FWCORE_SHARED_PTR_FACTORY_CLASSNAME,                                        \
-            __FWCORE_TYPEDEF_SHARED_PTR_NAME,                                             \
-            _factories_args_                                                              \
-            )
-
+        __FWCORE_SEQ_IS_EMPTY_SINGLE(_args_),                                \
+        (),                                                                  \
+        (BOOST_PP_ENUM_PARAMS(BOOST_PP_SEQ_SIZE(_args_), __FWCORE_ARG_NAME)) \
+        )
 
 
 /*
@@ -242,13 +159,13 @@
  */
 #define __FWCORE_GENERATE_FACTORY( _factory_, _args_ )                                                           \
     static __FWCORE_TYPEDEF_SHARED_PTR_NAME __FWCORE_FACTORY_NAME __FWCORE_GENERATE_TYPED_NUMBERED_TUPLE(_args_) \
-        {                                                                                                        \
-            return __FWCORE_TYPEDEF_SHARED_PTR_NAME (_factory_ __FWCORE_GENERATE_NUMBERED_TUPLE(_args_)) ;       \
-        }
+    {                                                                                                        \
+        return __FWCORE_TYPEDEF_SHARED_PTR_NAME (_factory_ __FWCORE_GENERATE_NUMBERED_TUPLE(_args_));       \
+    }
 
 
 #define __FWCORE_GENERATE_ONE_FACTORY(_r_, _data_, _args_)             \
-     __FWCORE_GENERATE_FACTORY( BOOST_PP_SEQ_ELEM(0,_data_), _args_) ;
+    __FWCORE_GENERATE_FACTORY( BOOST_PP_SEQ_ELEM(0,_data_), _args_);
 
 
 #define __FWCORE_GENERATE_FACTORIES( _factory_, _args_ )                      \
@@ -256,7 +173,7 @@
 
 
 #define __FWCORE_GENERATE_ONE_FACTORY_WITH_N_FACTORIES(_r_, _data_, _factory_args_)                                \
-    __FWCORE_GENERATE_FACTORY( BOOST_PP_TUPLE_ELEM(2,0,_factory_args_), BOOST_PP_TUPLE_ELEM(2,1,_factory_args_)) ;
+    __FWCORE_GENERATE_FACTORY( BOOST_PP_TUPLE_ELEM(2,0,_factory_args_), BOOST_PP_TUPLE_ELEM(2,1,_factory_args_));
 
 
 #define __FWCORE_GENERATE_FACTORIES_WITH_N_FACTORIES_I( _factories_args_ )                                    \
@@ -278,7 +195,8 @@
  * if the sequence containt only 1 element, __FWCORE_GET_SUPERCLASSNAME returns the 1st
  */
 #define __FWCORE_GET_CLASSNAME( _seq_ ) BOOST_PP_SEQ_ELEM(0, _seq_)
-#define __FWCORE_GET_SUPERCLASSNAME( _seq_ ) BOOST_PP_SEQ_ELEM( BOOST_PP_IF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(_seq_), 2 ), 1, 0), _seq_)
+#define __FWCORE_GET_SUPERCLASSNAME( _seq_ ) BOOST_PP_SEQ_ELEM( BOOST_PP_IF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(_seq_), \
+                                                                                             2 ), 1, 0), _seq_)
 
 
 /*
@@ -289,53 +207,60 @@
  */
 #define __FWCORE_CLASS_TYPEDEFS(_classinfo_)                                                               \
     /** Self type  */                                                                                      \
-    typedef __FWCORE_GET_CLASSNAME(_classinfo_) __FWCORE_TYPEDEF_SELF_NAME;                                \
+    typedef __FWCORE_GET_CLASSNAME (_classinfo_) __FWCORE_TYPEDEF_SELF_NAME;                                \
     /** Type of base class  */                                                                             \
-    typedef  BOOST_PP_IF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(_classinfo_), 2 ),                             \
-                                        __FWCORE_GET_SUPERCLASSNAME(_classinfo_),                          \
-                                        __FWCORE_TYPEDEF_SELF_NAME                                         \
-                                        ) __FWCORE_TYPEDEF_SUPERCLASS_NAME ;                               \
+    typedef  BOOST_PP_IF ( BOOST_PP_EQUAL ( BOOST_PP_SEQ_SIZE(_classinfo_), 2 ),                             \
+                           __FWCORE_GET_SUPERCLASSNAME (_classinfo_),                          \
+                           __FWCORE_TYPEDEF_SELF_NAME                                         \
+                           ) __FWCORE_TYPEDEF_SUPERCLASS_NAME;                               \
                                                                                                            \
-    typedef  BOOST_PP_IF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(_classinfo_), 2 ),                             \
-                                        __FWCORE_TYPEDEF_SUPERCLASS_NAME::__FWCORE_TYPEDEF_ROOTCLASS_NAME, \
-                                        __FWCORE_TYPEDEF_SELF_NAME                                         \
-                                        ) __FWCORE_TYPEDEF_ROOTCLASS_NAME ;                                \
+    typedef  BOOST_PP_IF ( BOOST_PP_EQUAL ( BOOST_PP_SEQ_SIZE(_classinfo_), 2 ),                             \
+                           __FWCORE_TYPEDEF_SUPERCLASS_NAME::__FWCORE_TYPEDEF_ROOTCLASS_NAME, \
+                           __FWCORE_TYPEDEF_SELF_NAME                                         \
+                           ) __FWCORE_TYPEDEF_ROOTCLASS_NAME;                                \
     /** Shared pointer type  */                                                                            \
     typedef SPTR ( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_SHARED_PTR_NAME;                          \
     /** Weak pointer type  */                                                                              \
     typedef WPTR ( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_WEAK_PTR_NAME;                            \
+    /** Unique pointer type  */                                                                            \
+    typedef UPTR ( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_UNIQUE_PTR_NAME;                          \
     /** Const shared pointer type  */                                                                      \
-    typedef CSPTR( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME;                    \
+    typedef CSPTR ( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME;                   \
     /** Const weak pointer type  */                                                                        \
-    typedef CWPTR( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_WEAK_PTR_CONST_NAME
+    typedef CWPTR ( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_WEAK_PTR_CONST_NAME;                     \
+    /** Const unique pointer type  */                                                                      \
+    typedef CUPTR ( __FWCORE_TYPEDEF_SELF_NAME ) __FWCORE_TYPEDEF_UNIQUE_PTR_CONST_NAME;
 
 /*
  * Cast definition for casting from baseclassname and derived to _classname_
  */
 #define __FWCORE_GENERATE_CAST(_classname_, _baseclassname_)                                                                             \
     /** @brief Cast to dynamic shared pointer   */                                                                                       \
-    template< class BASETYPE > static __FWCORE_TYPEDEF_SHARED_PTR_NAME __FWCORE_DYNAMIC_CAST_FUNC_NAME ( BASETYPE const &p )             \
+    template< class BASETYPE > static __FWCORE_TYPEDEF_SHARED_PTR_NAME __FWCORE_DYNAMIC_CAST_FUNC_NAME ( \
+        BASETYPE const &p )             \
     {                                                                                                                                    \
-        return ::boost::dynamic_pointer_cast< _classname_ >(p);                                                                          \
+        return std::dynamic_pointer_cast< _classname_ >(p);                                                                          \
     };                                                                                                                                   \
     /** @brief Const shared pointer cast to dynamic pointer */                                                                           \
-    template< class BASETYPE > static __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME __FWCORE_DYNAMIC_CONST_CAST_FUNC_NAME ( BASETYPE const &p ) \
+    template< class BASETYPE > static __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME __FWCORE_DYNAMIC_CONST_CAST_FUNC_NAME ( \
+        BASETYPE const &p ) \
     {                                                                                                                                    \
-        return ::boost::dynamic_pointer_cast< const _classname_ >(p);                                                                    \
+        return std::dynamic_pointer_cast< const _classname_ >(p);                                                                    \
     };                                                                                                                                   \
     /** @brief Cast to const shared pointer */                                                                                           \
-    static __FWCORE_TYPEDEF_SHARED_PTR_NAME __FWCORE_CONST_CAST_FUNC_NAME ( __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME const &p )            \
+    static __FWCORE_TYPEDEF_SHARED_PTR_NAME __FWCORE_CONST_CAST_FUNC_NAME ( \
+        __FWCORE_TYPEDEF_SHARED_PTR_CONST_NAME const &p )            \
     {                                                                                                                                    \
-        return ::boost::const_pointer_cast< _classname_ >(p);                                                                            \
+        return std::const_pointer_cast< _classname_ >(p);                                                                            \
     }
 
 
 #define __FWCORE_PREDECLARE(_s_, _state_, _elem_) \
-     BOOST_PP_IF(                                 \
-                BOOST_PP_EQUAL( _s_, 2 ),         \
-                class _elem_; ,                   \
-                namespace _elem_ { _state_ }      \
-               )
+    BOOST_PP_IF(                                 \
+        BOOST_PP_EQUAL( _s_, 2 ),         \
+        class _elem_; ,                   \
+        namespace _elem_ { _state_ }      \
+        )
 
 // @endcond
 
@@ -395,35 +320,35 @@
     /** @{ */                                                                                    \
     /** @brief return object's classname given by ::fwCore::Demangler::getLeafClassname()  */    \
     virtual const std::string& getLeafClassname()   const                                        \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getLeafClassname());};      \
-    static  const std::string& leafClassname()                                                   \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getLeafClassname<SelfType>());};             \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getLeafClassname()); };      \
+    static const std::string& leafClassname()                                                   \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getLeafClassname<SelfType>()); };             \
     /** @brief return object's classname given by ::fwCore::Demangler::getClassname()  */        \
     virtual const std::string& getClassname() const                                              \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getClassname<SelfType>());};          \
-    static  const std::string& classname()                                                       \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getClassname<SelfType>());};                 \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getClassname<SelfType>()); };          \
+    static const std::string& classname()                                                       \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getClassname<SelfType>()); };                 \
     /** @brief return object's classname given by ::fwCore::Demangler::getFullClassname()  */    \
     virtual const std::string& getFullClassname()   const                                        \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getFullClassname());};      \
-    static  const std::string& fullClassname()                                                   \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getFullClassname<SelfType>());};             \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getFullClassname()); };      \
+    static const std::string& fullClassname()                                                   \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getFullClassname<SelfType>()); };             \
     /** @brief return object's classname given by ::fwCore::Demangler::getRootedClassname()  */  \
     virtual const std::string& getRootedClassname() const                                        \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getRootedClassname());};    \
-    static  const std::string& rootedClassname()                                                 \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getRootedClassname<SelfType>());};           \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getRootedClassname()); };    \
+    static const std::string& rootedClassname()                                                 \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getRootedClassname<SelfType>()); };           \
                                                                                                  \
     /** @brief return object's namespace given by ::fwCore::Demangler::getFullClassname()  */    \
     virtual const std::string& getFullNamespace()   const                                        \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getFullClassname());};      \
-    static  const std::string& fullNamespace()                                                   \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getFullClassname<SelfType>());};             \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getFullClassname()); };      \
+    static const std::string& fullNamespace()                                                   \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getFullClassname<SelfType>()); };             \
     /** @brief return object's namespace given by ::fwCore::Demangler::getRootedNamespace()  */  \
     virtual const std::string& getRootedNamespace() const                                        \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getRootedClassname());}     \
-    static  const std::string& rootedNamespace()                                                 \
-    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getRootedClassname<SelfType>());}            \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::Demangler(*this).getRootedClassname()); }     \
+    static const std::string& rootedNamespace()                                                 \
+    { __FWCORE_STATIC_CACHE(std::string,  ::fwCore::getRootedClassname<SelfType>()); }            \
     /** @} */
 
 /**
@@ -442,7 +367,9 @@
         {                                                                                                                                  \
             return true;                                                                                                                   \
         }                                                                                                                                  \
-        return BOOST_PP_IF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE(_classinfo_), 2 ), __FWCORE_TYPEDEF_SUPERCLASS_NAME::isTypeOf(type), false); \
+        return BOOST_PP_IF( BOOST_PP_EQUAL( BOOST_PP_SEQ_SIZE( \
+                                                _classinfo_), 2 ), __FWCORE_TYPEDEF_SUPERCLASS_NAME::isTypeOf( \
+                                type), false); \
     }                                                                                                                                      \
     virtual bool isA(const std::string &type) const                                                                                         \
     {                                                                                                                                      \
@@ -456,17 +383,25 @@ class ClassFactory;
 class Factory;
 }
 
-namespace boost{
-namespace serialization{
+namespace boost
+{
+namespace serialization
+{
 class access;
-}}
+}
+}
 
-namespace boost{
-namespace python{
-namespace objects {
+namespace boost
+{
+namespace python
+{
+namespace objects
+{
 template <class, class>
 struct pointer_holder;
-}}}
+}
+}
+}
 
 /**
  * @brief Generate common code for friend class Factory
@@ -474,9 +409,7 @@ struct pointer_holder;
 #define fwCoreFriendClassFactoryMacro()                                      \
     friend class ::boost::serialization::access;                             \
     template<class, class>                                                   \
-    friend struct ::boost::python::objects::pointer_holder;                  \
-    template<typename _FWCORE_CHECKED_DELETE_T_ >                            \
-    friend void ::boost::checked_delete(_FWCORE_CHECKED_DELETE_T_ *x);       \
+    friend struct ::boost::python::objects::pointer_holder;   \
     template<class, class, class>                                            \
     friend class ::fwTools::ClassFactory;                                    \
     friend class ::fwTools::Factory;
@@ -502,17 +435,8 @@ struct pointer_holder;
  */
 #define fwCoreClassDefinitionsWithFactoryMacro(_classinfo_, _parameters_, _factory_)                     \
     __FWCORE_CLASS_TYPEDEFS(_classinfo_);                                                                \
-    friend class __FWCORE_SHARED_PTR_FACTORY_CLASSNAME;                                                  \
-    /* @cond */                                                                                          \
-    class __FWCORE_SHARED_PTR_FACTORY_CLASSNAME: public __FWCORE_TYPEDEF_SHARED_PTR_NAME                 \
-    {                                                                                                    \
-        public:                                                                                          \
-          __FWCORE_GENERATE_CONSTRUCTORS (__FWCORE_GET_CLASSNAME(_classinfo_), _factory_, _parameters_); \
-    };                                                                                                   \
-    /* @endcond */                                                                                       \
-    /** Specialized version of shared_ptr (alias to shared_ptr< __FWCORE_GET_CLASSNAME(_classinfo_) > )  \
+    /** Specialized version of shared_ptr (alias to shared_ptr< __FWCORE_GET_CLASSNAME(_classinfo_) > ) \
      * with embeded factory for __FWCORE_GET_CLASSNAME(_classinfo_). */                                  \
-    typedef  __FWCORE_SHARED_PTR_FACTORY_CLASSNAME __FWCORE_TYPEDEF_SHARED_PTR_FACTORY_NAME;             \
     /* @cond */                                                                                          \
     /* @endcond */                                                                                       \
     __FWCORE_GENERATE_FACTORIES_WITH_ONE_FACTORY (_factory_, _parameters_);                              \
@@ -540,17 +464,8 @@ struct pointer_holder;
  */
 #define fwCoreClassDefinitionsWithNFactoriesMacro(_classinfo_, _factories_args_)                                    \
     __FWCORE_CLASS_TYPEDEFS(_classinfo_);                                                                           \
-    friend class __FWCORE_SHARED_PTR_FACTORY_CLASSNAME;                                                             \
-    /* @cond */                                                                                                     \
-    class __FWCORE_SHARED_PTR_FACTORY_CLASSNAME: public __FWCORE_TYPEDEF_SHARED_PTR_NAME                            \
-    {                                                                                                               \
-        public:                                                                                                     \
-          __FWCORE_GENERATE_CONSTRUCTORS_WITH_N_FACTORIES (__FWCORE_GET_CLASSNAME(_classinfo_), _factories_args_);  \
-    } ;                                                                                                             \
-    /* @endcond */                                                                                                  \
-    /** Specialized version of shared_ptr (alias to shared_ptr< __FWCORE_GET_CLASSNAME(_classinfo_) > )             \
+    /** Specialized version of shared_ptr (alias to shared_ptr< __FWCORE_GET_CLASSNAME(_classinfo_) > ) \
      * with embeded factory for __FWCORE_GET_CLASSNAME(_classinfo_). */                                             \
-    typedef __FWCORE_SHARED_PTR_FACTORY_CLASSNAME __FWCORE_TYPEDEF_SHARED_PTR_FACTORY_NAME;                         \
     /* @cond */                                                                                                     \
                                                                                                                     \
     __FWCORE_GENERATE_FACTORIES_WITH_N_FACTORIES (_factories_args_);                                                \
diff --git a/SrcLib/core/fwCore/include/fwCore/mt/Namespace.hpp b/SrcLib/core/fwCore/include/fwCore/mt/Namespace.hpp
index bb21bc6..546e670 100644
--- a/SrcLib/core/fwCore/include/fwCore/mt/Namespace.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/mt/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@ namespace fwCore
 /**
  * @brief       This namespace fwCore::mt provides common foundations for multithread in FW4SPL.
  * @namespace   fwCore::mt
- * 
+ *
  * @date        2012.
  */
 namespace mt
diff --git a/SrcLib/core/fwCore/include/fwCore/mt/types.hpp b/SrcLib/core/fwCore/include/fwCore/mt/types.hpp
index bb43f28..5b583b3 100644
--- a/SrcLib/core/fwCore/include/fwCore/mt/types.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/mt/types.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCore/include/fwCore/spyLog.hpp b/SrcLib/core/fwCore/include/fwCore/spyLog.hpp
index 671f557..4b15a80 100644
--- a/SrcLib/core/fwCore/include/fwCore/spyLog.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/spyLog.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -33,11 +33,11 @@
  * FATAL macros have a particular behavior : the application is aborted after
  * the message was logged.
  *
- * 
+ *
  */
 
-#ifndef _FWCORE_SPYLOG_HPP_
-# define _FWCORE_SPYLOG_HPP_
+#ifndef __FWCORE_SPYLOG_HPP__
+#define __FWCORE_SPYLOG_HPP__
 
 # define SPYLOG_ABORT() std::abort()
 
@@ -84,7 +84,7 @@
 # define OSL_LOG(log, loglevel, message) __FWCORE_EXPR_BLOCK(   \
         std::stringstream oslStr;                               \
         oslStr << message;                                      \
-        SL_##loglevel(log, oslStr.str());                       \
+        SL_ ## loglevel(log, oslStr.str());                       \
         )
 
 // -----------------------------------------------------------------------------
@@ -135,10 +135,10 @@
         OSL_LOG(log, TRACE, message);                           \
         )
 #  define SL_TRACE_IF(log, message, cond) __FWCORE_TRACE_IF_ENABLED(    \
-        __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__);)      \
+        __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__); )      \
         )
 #  define OSL_TRACE_IF(log, message, cond) __FWCORE_TRACE_IF_ENABLED(   \
-        __FWCORE_IF(cond, OSL_LOG(log, TRACE, message);)                \
+        __FWCORE_IF(cond, OSL_LOG(log, TRACE, message); )                \
         )
 
 
@@ -149,73 +149,84 @@
         OSL_LOG(log, DEBUG, message);                           \
         )
 #  define SL_DEBUG_IF(log, message, cond) __FWCORE_DEBUG_IF_ENABLED(  \
-      __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__);)      \
-      )
+        __FWCORE_IF(cond, log.debug(message, __FILE__, __LINE__); )      \
+        )
 #define OSL_DEBUG_IF(log, message, cond) __FWCORE_DEBUG_IF_ENABLED(   \
-      __FWCORE_IF(cond, OSL_LOG(log, DEBUG, message);)                \
-      )
+        __FWCORE_IF(cond, OSL_LOG(log, DEBUG, message); )                \
+        )
 
 
 #define SL_INFO(log, message) __FWCORE_INFO_IF_ENABLED(       \
-      log.info(message, __FILE__, __LINE__);                  \
-      )
+        log.info(message, __FILE__, __LINE__);                  \
+        )
 #define OSL_INFO(log, message) __FWCORE_INFO_IF_ENABLED(      \
-      OSL_LOG(log, INFO, message);                            \
-      )
+        OSL_LOG(log, INFO, message);                            \
+        )
 #define SL_INFO_IF(log, message, cond) __FWCORE_INFO_IF_ENABLED(      \
-      __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__);)      \
-      )
+        __FWCORE_IF(cond, log.info(message, __FILE__, __LINE__); )      \
+        )
 #define OSL_INFO_IF(log, message, cond) __FWCORE_INFO_IF_ENABLED(     \
-      __FWCORE_IF(cond, OSL_LOG(log, INFO, message);)                 \
-      )
+        __FWCORE_IF(cond, OSL_LOG(log, INFO, message); )                 \
+        )
 
 
 #define SL_WARN(log, message) __FWCORE_WARN_IF_ENABLED(       \
-      log.warn(message, __FILE__, __LINE__);                  \
-      )
+        log.warn(message, __FILE__, __LINE__);                  \
+        )
 #define OSL_WARN(log, message) __FWCORE_WARN_IF_ENABLED(      \
-      OSL_LOG(log, WARN, message);                            \
-      )
+        OSL_LOG(log, WARN, message);                            \
+        )
 #define SL_WARN_IF(log, message, cond) __FWCORE_WARN_IF_ENABLED(      \
-      __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__);)      \
-      )
+        __FWCORE_IF(cond, log.warn(message, __FILE__, __LINE__); )      \
+        )
 #define OSL_WARN_IF(log, message, cond) __FWCORE_WARN_IF_ENABLED(     \
-      __FWCORE_IF(cond, OSL_LOG(log, WARN, message);)                 \
-      )
+        __FWCORE_IF(cond, OSL_LOG(log, WARN, message); )                 \
+        )
 
 
 #define SL_ERROR(log, message) __FWCORE_ERROR_IF_ENABLED(     \
-      log.error(message, __FILE__, __LINE__);                 \
-      )
+        log.error(message, __FILE__, __LINE__);                 \
+        )
 #define OSL_ERROR(log, message) __FWCORE_ERROR_IF_ENABLED(    \
-      OSL_LOG(log, ERROR, message);                           \
-      )
+        OSL_LOG(log, ERROR, message);                           \
+        )
 #define SL_ERROR_IF(log, message, cond) __FWCORE_ERROR_IF_ENABLED(    \
-      __FWCORE_IF(cond, log.trace(message, __FILE__, __LINE__);)      \
-      )
+        __FWCORE_IF(cond, log.error(message, __FILE__, __LINE__); )      \
+        )
 #define OSL_ERROR_IF(log, message, cond) __FWCORE_ERROR_IF_ENABLED(   \
-        __FWCORE_IF(cond, OSL_LOG(log, ERROR, message);)              \
+        __FWCORE_IF(cond, OSL_LOG(log, ERROR, message); )              \
         )
 
 
 #define SL_FATAL(log, message) __FWCORE_FATAL_IF_ENABLED(     \
-      log.fatal(message, __FILE__, __LINE__);                 \
-      SPYLOG_ABORT();                                         \
-      )
+        log.fatal(message, __FILE__, __LINE__);                 \
+        SPYLOG_ABORT();                                         \
+        )
 #define OSL_FATAL(log, message) __FWCORE_FATAL_IF_ENABLED(    \
-      OSL_LOG(log, FATAL, message);                           \
-      SPYLOG_ABORT();                                         \
-      )
+        OSL_LOG(log, FATAL, message);                           \
+        SPYLOG_ABORT();                                         \
+        )
 #define SL_FATAL_IF(log, message, cond) __FWCORE_FATAL_IF_ENABLED(    \
-      __FWCORE_IF(cond, SL_FATAL(log, message);)                      \
-      )
+        __FWCORE_IF(cond, SL_FATAL(log, message); )                      \
+        )
 #define OSL_FATAL_IF(log, message, cond) __FWCORE_FATAL_IF_ENABLED(   \
-        __FWCORE_IF(cond, OSL_FATAL(log, message);)                   \
+        __FWCORE_IF(cond, OSL_FATAL(log, message); )                   \
         )
 
 // -----------------------------------------------------------------------------
 
 # ifdef _DEBUG
+#  ifdef WIN32
+#  define SL_ASSERT(log, message, cond) __FWCORE_EXPR_BLOCK(                                            \
+        __FWCORE_IF(!(cond),                                                                            \
+                    std::stringstream oslStr1;                                                          \
+                    oslStr1 << "Assertion '" <<                                                         \
+                    #cond << "' failed.\n" << message;                                                  \
+                    log.fatal(oslStr1.str(), __FILE__, __LINE__);                                       \
+                    _CrtDbgReport(_CRT_ASSERT, __FILE__, __LINE__, NULL, "%s", oslStr1.str().c_str());  \
+                    __debugbreak();                                                                     \
+                    ))
+#  else
 #  define SL_ASSERT(log, message, cond) __FWCORE_EXPR_BLOCK(            \
         __FWCORE_IF(!(cond),                                            \
                     std::stringstream oslStr1;                          \
@@ -223,14 +234,15 @@
                     #cond << "' failed: " << message;                   \
                     log.fatal(oslStr1.str(), __FILE__, __LINE__);       \
                     SPYLOG_ABORT();                                     \
-            ))
+                    ))
+#  endif
 
 #  define OSL_ASSERT(log, message, cond) __FWCORE_EXPR_BLOCK(   \
         __FWCORE_IF(!(cond),                                    \
                     std::stringstream oslStr;                   \
                     oslStr << message;                          \
                     SL_ASSERT(log, oslStr.str(), cond);         \
-            ))
+                    ))
 # else
 #  define SL_ASSERT(log, message, cond) // empty
 #  define OSL_ASSERT(log, message, cond) // empty
@@ -316,7 +328,7 @@
 /** @{ */
 /** Log message macros.  */
 #define OSLM_LOG(message)                                          \
-         __FWCORE_EXPR_BLOCK(                                      \
+    __FWCORE_EXPR_BLOCK(                                      \
         std::stringstream stream;                                  \
         stream << message;                                         \
         _SPYLOG_SPYLOGGER_.log(stream.str(), __FILE__, __LINE__);  \
@@ -363,4 +375,4 @@
 /**  @} */
 
 
-#endif  // _FWCORE_SPYLOG_HPP_
+#endif  // __FWCORE_SPYLOG_HPP__
diff --git a/SrcLib/core/fwCore/include/fwCore/util/FactoryRegistry.hpp b/SrcLib/core/fwCore/include/fwCore/util/FactoryRegistry.hpp
index 8f6edb3..d33e3d2 100644
--- a/SrcLib/core/fwCore/include/fwCore/util/FactoryRegistry.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/util/FactoryRegistry.hpp
@@ -1,24 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCORE_UTIL_FACTORY_HPP__
-#define __FWCORE_UTIL_FACTORY_HPP__
+#ifndef __FWCORE_UTIL_FACTORYREGISTRY_HPP__
+#define __FWCORE_UTIL_FACTORYREGISTRY_HPP__
 
+#include "fwCore/mt/types.hpp"
+
+#include <functional>
 #include <map>
 #include <string>
 #include <vector>
 
-#include <boost/bind.hpp>
-#include <boost/function.hpp>
-#include <boost/functional/factory.hpp>
-#include <boost/functional/value_factory.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include "fwCore/mt/types.hpp"
-
 namespace fwCore
 {
 namespace util
@@ -29,7 +24,7 @@ namespace util
  * @note This class is thread safe.
  */
 template < typename FACTORY_SIGNATURE, typename KEY_TYPE = std::string,
-         typename FACTORY_HOLDER = ::boost::function< FACTORY_SIGNATURE > >
+           typename FACTORY_HOLDER                       = std::function< FACTORY_SIGNATURE > >
 class FactoryRegistryBase
 {
 public:
@@ -40,7 +35,13 @@ public:
     typedef std::map< KeyType, FactoryType > RegistryType;
     typedef std::vector<KeyType> KeyVectorType;
 
-    FactoryRegistryBase(){}
+    FactoryRegistryBase()
+    {
+    }
+
+    virtual ~FactoryRegistryBase()
+    {
+    }
 
     /**
      * @brief Add a factory to the registry.
@@ -76,8 +77,8 @@ public:
         ::fwCore::mt::ReadLock lock(m_mutex);
         KeyVectorType vectKeys;
         std::transform( m_registry.begin(), m_registry.end(),
-                std::back_inserter(vectKeys),
-                ::boost::bind(& RegistryType::value_type::first,_1) );
+                        std::back_inserter(vectKeys),
+                        std::bind(&RegistryType::value_type::first, std::placeholders::_1) );
         return vectKeys;
     }
 
@@ -90,17 +91,17 @@ protected:
 /**
  * @brief FactoryRegistry is a class used to store factories and create instance object with these factories.
  */
-template <typename F, typename KEY_TYPE = std::string, typename FACTORY_HOLDER = ::boost::function< F > >
+template <typename F, typename KEY_TYPE = std::string, typename FACTORY_HOLDER = std::function< F > >
 class FactoryRegistry;
 
 template< typename RETURN_TYPE, typename KEY_TYPE, typename FACTORY_HOLDER >
 class FactoryRegistry< RETURN_TYPE (), KEY_TYPE, FACTORY_HOLDER > :
-        public FactoryRegistryBase < RETURN_TYPE (), KEY_TYPE >
+    public FactoryRegistryBase < RETURN_TYPE (), KEY_TYPE >
 {
-    typedef RETURN_TYPE (FactorySignatureType)();
-    typedef FACTORY_HOLDER FactoryType;
-    typedef RETURN_TYPE ReturnType;
-    typedef KEY_TYPE KeyType;
+typedef RETURN_TYPE (FactorySignatureType)();
+typedef FACTORY_HOLDER FactoryType;
+typedef RETURN_TYPE ReturnType;
+typedef KEY_TYPE KeyType;
 
 public:
 
@@ -123,13 +124,13 @@ public:
 
 template< typename RETURN_TYPE, typename ARG1_TYPE, typename KEY_TYPE, typename FACTORY_HOLDER >
 class FactoryRegistry< RETURN_TYPE (ARG1_TYPE), KEY_TYPE, FACTORY_HOLDER > :
-            public FactoryRegistryBase < RETURN_TYPE (ARG1_TYPE), KEY_TYPE >
+    public FactoryRegistryBase < RETURN_TYPE (ARG1_TYPE), KEY_TYPE >
 {
-    typedef RETURN_TYPE (FactorySignatureType)(ARG1_TYPE);
-    typedef FACTORY_HOLDER FactoryType;
-    typedef RETURN_TYPE ReturnType;
-    typedef ARG1_TYPE Arg1Type;
-    typedef KEY_TYPE KeyType;
+typedef RETURN_TYPE (FactorySignatureType)(ARG1_TYPE);
+typedef FACTORY_HOLDER FactoryType;
+typedef RETURN_TYPE ReturnType;
+typedef ARG1_TYPE Arg1Type;
+typedef KEY_TYPE KeyType;
 
 public:
 
@@ -152,4 +153,4 @@ public:
 } //namespace util
 } //namespace fwCore
 
-#endif /* __FWCORE_UTIL_FACTORY_HPP__ */
+#endif /* __FWCORE_UTIL_FACTORYREGISTRY_HPP__ */
diff --git a/SrcLib/core/fwCore/include/fwCore/util/LazyInstantiator.hpp b/SrcLib/core/fwCore/include/fwCore/util/LazyInstantiator.hpp
index ef73216..aac381b 100644
--- a/SrcLib/core/fwCore/include/fwCore/util/LazyInstantiator.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/util/LazyInstantiator.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,8 +7,6 @@
 #ifndef __FWCORE_UTIL_LAZYINSTANTIATOR_HPP__
 #define __FWCORE_UTIL_LAZYINSTANTIATOR_HPP__
 
-#include <boost/make_shared.hpp>
-#include <boost/shared_ptr.hpp>
 #include <boost/thread/once.hpp>
 #include <boost/noncopyable.hpp>
 
@@ -19,7 +17,7 @@ namespace fwCore
 namespace util
 {
 
-struct LazyInstantiatorDefaultTag {} ;
+struct LazyInstantiatorDefaultTag {};
 
 /**
  * @brief A base class for lazy instantiation, constructed on first demand.
@@ -33,7 +31,7 @@ public:
 
     typedef INSTANCE_TYPE InstanceType;
     typedef TAG TagType;
-    typedef ::boost::shared_ptr<InstanceType> InstanceSptrType;
+    typedef std::shared_ptr<InstanceType> InstanceSptrType;
 
     /// Returns the singleton instance. This method is thread safe.
     static InstanceSptrType getInstance()
@@ -57,7 +55,7 @@ protected:
         static InstanceSptrType s_instance;
         if(!s_instance)
         {
-            s_instance = ::boost::make_shared< InstanceType >();
+            s_instance = std::make_shared< InstanceType >();
         }
         return s_instance;
     }
diff --git a/SrcLib/core/fwCore/include/fwCore/util/Namespace.hpp b/SrcLib/core/fwCore/include/fwCore/util/Namespace.hpp
index 06eaf4d..9ab3522 100644
--- a/SrcLib/core/fwCore/include/fwCore/util/Namespace.hpp
+++ b/SrcLib/core/fwCore/include/fwCore/util/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@ namespace fwCore
 /**
  * @brief       This namespace fwCore::util provides generic utilities for FW4SPL.
  * @namespace   fwCore::util
- * 
+ *
  * @date        2012.
  */
 namespace util
diff --git a/SrcLib/core/fwCore/src/fwCore/Demangler.cpp b/SrcLib/core/fwCore/src/fwCore/Demangler.cpp
index 74c50b8..a45bd28 100644
--- a/SrcLib/core/fwCore/src/fwCore/Demangler.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/Demangler.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,25 +25,28 @@ namespace fwCore
 
 
 Demangler::Demangler(const std::type_info &t) : m_name(t.name())
-{ }
+{
+}
 
 
 Demangler::Demangler(const std::string &s) : m_name(s)
-{ }
+{
+}
 
 
 Demangler::~Demangler()
-{ }
+{
+}
 
 
 std::string Demangler::getLeafClassname() const
 {
     std::string demangled(this->demangle());
 
-    size_t lt_pos = demangled.find(LT);
+    size_t lt_pos     = demangled.find(LT);
     size_t colons_pos = demangled.rfind(COLONS, lt_pos);
 
-    colons_pos = (colons_pos == std::string::npos)? 0 : colons_pos+COLONS.size();
+    colons_pos = (colons_pos == std::string::npos) ? 0 : colons_pos+COLONS.size();
     return demangled.replace(0,colons_pos,"");
 }
 
@@ -73,7 +76,7 @@ std::string Demangler::getFullNamespace() const
 {
     std::string demangled(this->demangle());
 
-    size_t lt_pos = demangled.find(LT);
+    size_t lt_pos     = demangled.find(LT);
     size_t colons_pos = demangled.rfind(COLONS, lt_pos);
 
     if(colons_pos == std::string::npos)
@@ -108,27 +111,33 @@ std::string Demangler::demangle(  ) const
     }
     return res;
 #else
-   static std::vector<std::string> keywords;
-   typedef std::vector<std::string>::iterator keyword_iterator;
-   if ( keywords.empty() )
-   {
-      keywords.push_back("__cdecl");
-      keywords.push_back("class ");
-      keywords.push_back("enum ");
-      keywords.push_back("struct ");
-      keywords.push_back("union ");
-   }
-   std::string res(mangled);
-   for (keyword_iterator iter = keywords.begin(); iter != keywords.end(); ++iter )
-   {
-      while (res.find(*iter) != std::string::npos)
-         res = res.replace(res.find(*iter), iter->size(), "");
-      while (res.find(" *") != std::string::npos)
-         res = res.replace(res.find(" *"), 2, "*");
-      while (res.find(" &") != std::string::npos)
-         res = res.replace(res.find(" &"), 2, "&");
-   }
-   return res;
+    static std::vector<std::string> keywords;
+    typedef std::vector<std::string>::iterator keyword_iterator;
+    if ( keywords.empty() )
+    {
+        keywords.push_back("__cdecl");
+        keywords.push_back("class ");
+        keywords.push_back("enum ");
+        keywords.push_back("struct ");
+        keywords.push_back("union ");
+    }
+    std::string res(mangled);
+    for (keyword_iterator iter = keywords.begin(); iter != keywords.end(); ++iter )
+    {
+        while (res.find(*iter) != std::string::npos)
+        {
+            res = res.replace(res.find(*iter), iter->size(), "");
+        }
+        while (res.find(" *") != std::string::npos)
+        {
+            res = res.replace(res.find(" *"), 2, "*");
+        }
+        while (res.find(" &") != std::string::npos)
+        {
+            res = res.replace(res.find(" &"), 2, "&");
+        }
+    }
+    return res;
 #endif
 }
 
diff --git a/SrcLib/core/fwCore/src/fwCore/Exception.cpp b/SrcLib/core/fwCore/src/fwCore/Exception.cpp
index bf1b495..db410fe 100644
--- a/SrcLib/core/fwCore/src/fwCore/Exception.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/Exception.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCore/src/fwCore/HiResClock.cpp b/SrcLib/core/fwCore/src/fwCore/HiResClock.cpp
index d42c537..e6202e9 100644
--- a/SrcLib/core/fwCore/src/fwCore/HiResClock.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/HiResClock.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCore/src/fwCore/HiResTimer.cpp b/SrcLib/core/fwCore/src/fwCore/HiResTimer.cpp
index 708f496..5949cbd 100644
--- a/SrcLib/core/fwCore/src/fwCore/HiResTimer.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/HiResTimer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -36,7 +36,8 @@ void HiResTimer::stop()
     m_endTimeInMicroSec = ::fwCore::HiResClock::getTimeInMicroSec();
 }
 
-void HiResTimer::reset(::fwCore::HiResClock::HiResClockType initial_value){
+void HiResTimer::reset(::fwCore::HiResClock::HiResClockType initial_value)
+{
     bool wasStopped = m_stopped;
     if (!wasStopped)
     {
@@ -54,7 +55,9 @@ void HiResTimer::reset(::fwCore::HiResClock::HiResClockType initial_value){
 ::fwCore::HiResClock::HiResClockType HiResTimer::getElapsedTimeInMicroSec()
 {
     if(!m_stopped)
+    {
         m_endTimeInMicroSec = ::fwCore::HiResClock::getTimeInMicroSec();
+    }
 
     return m_cumulTimeInMicroSec + (m_endTimeInMicroSec - m_startTimeInMicroSec);
 }
diff --git a/SrcLib/core/fwCore/src/fwCore/LogicStamp.cpp b/SrcLib/core/fwCore/src/fwCore/LogicStamp.cpp
index c11b53e..0400500 100644
--- a/SrcLib/core/fwCore/src/fwCore/LogicStamp.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/LogicStamp.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCore/src/fwCore/TimeStamp.cpp b/SrcLib/core/fwCore/src/fwCore/TimeStamp.cpp
index 3534ae4..5811b4a 100644
--- a/SrcLib/core/fwCore/src/fwCore/TimeStamp.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/TimeStamp.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwCore/src/fwCore/log/ScopedMessage.cpp b/SrcLib/core/fwCore/src/fwCore/log/ScopedMessage.cpp
index 54e22b4..ead474a 100644
--- a/SrcLib/core/fwCore/src/fwCore/log/ScopedMessage.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/log/ScopedMessage.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -38,7 +38,8 @@ ScopedMessage::ScopedMessage( const char * _file, int _line, std::string enterMe
 ScopedMessage::~ScopedMessage()
 {
     std::stringstream oslStr;
-    oslStr << "[LEAVING SCOPE] "<<  m_baseMsg << "'leavemessage':'" << m_leave <<"','elapsed':"<<  m_timer.getElapsedTimeInMilliSec() << "}";
+    oslStr << "[LEAVING SCOPE] "<<  m_baseMsg << "'leavemessage':'" << m_leave <<"','elapsed':"<<
+        m_timer.getElapsedTimeInMilliSec() << "}";
     SpyLogger::getSpyLogger().trace(oslStr.str(), m_file, m_line);
 }
 
diff --git a/SrcLib/core/fwCore/src/fwCore/log/SpyLogger.cpp b/SrcLib/core/fwCore/src/fwCore/log/SpyLogger.cpp
index 5a4ae3e..87b29cb 100644
--- a/SrcLib/core/fwCore/src/fwCore/log/SpyLogger.cpp
+++ b/SrcLib/core/fwCore/src/fwCore/log/SpyLogger.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,6 +8,7 @@
 #pragma warning(disable : 4996) // warning for sprintf() in Boost.log
 #endif // _MSC_VER
 
+#ifndef ANDROID
 #include <boost/log/core.hpp>
 #include <boost/log/attributes.hpp>
 #include <boost/log/sinks/sink.hpp>
@@ -24,6 +25,9 @@
 #include <boost/log/attributes/current_thread_id.hpp>
 #include <boost/log/attributes/current_process_id.hpp>
 #include <boost/log/attributes/timer.hpp>
+#else
+#include <android/log.h>
+#endif
 
 #include "fwCore/macros.hpp"
 #include "fwCore/log/SpyLogger.hpp"
@@ -35,16 +39,27 @@ namespace log
 
 SpyLogger SpyLogger::s_spyLogger;
 
+#ifndef ANDROID
 BOOST_LOG_GLOBAL_LOGGER(lg, ::boost::log::sources::severity_logger_mt< ::boost::log::trivial::severity_level >);
 BOOST_LOG_GLOBAL_LOGGER_DEFAULT(lg, ::boost::log::sources::severity_logger_mt< ::boost::log::trivial::severity_level >);
+#else
+#define  LOG_TAG    "SpyLogger"
+#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,  LOG_TAG, __VA_ARGS__)
+#define  LOGD(...)  __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
+#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__)
+#define  LOGF(...)  __android_log_print(ANDROID_LOG_FATAL, LOG_TAG, __VA_ARGS__)
+#define  LOGW(...)  __android_log_print(ANDROID_LOG_WARN,  LOG_TAG, __VA_ARGS__)
+#endif
 
 //-----------------------------------------------------------------------------
 
 SpyLogger::SpyLogger()
 {
+#ifndef ANDROID
     ::boost::log::add_common_attributes();
     ::boost::log::core::get()
-        ->add_global_attribute("Uptime", ::boost::log::attributes::timer());
+    ->add_global_attribute("Uptime", ::boost::log::attributes::timer());
+#endif
 }
 
 //-----------------------------------------------------------------------------
@@ -62,25 +77,27 @@ void SpyLogger::createBasicConfiguration()
 
 void SpyLogger::addStreamAppender( std::ostream &os, LevelType level )
 {
-    namespace expr = ::boost::log::expressions;
+#ifndef ANDROID
+    namespace expr     = ::boost::log::expressions;
     namespace keywords = ::boost::log::keywords;
 
     typedef ::boost::posix_time::ptime::time_duration_type DurationType;
 
     ::boost::log::add_console_log (
-            os,
-            keywords::format = (
-                    expr::stream << "["
-                    << expr::attr<unsigned int>("LineID")
-                    << "][" <<  expr::format_date_time< DurationType >("Uptime", "%H:%M:%S.%f")
-                    << "][" << expr::attr< ::boost::log::trivial::severity_level >("Severity")
-                    << "] " << expr::smessage
+        os,
+        keywords::format = (
+            expr::stream << "["
+                         << expr::attr<unsigned int>("LineID")
+                         << "][" <<  expr::format_date_time< DurationType >("Uptime", "%H:%M:%S.%f")
+                         << "][" << expr::attr< ::boost::log::trivial::severity_level >("Severity")
+                         << "] " << expr::smessage
             ),
-            keywords::filter = expr::attr< ::boost::log::trivial::severity_level >("Severity") >=
-                static_cast < ::boost::log::trivial::severity_level > (level),
-            // auto-flush feature of the backend
-            keywords::auto_flush = true
-    );
+        keywords::filter = expr::attr< ::boost::log::trivial::severity_level >("Severity") >=
+                           static_cast < ::boost::log::trivial::severity_level > (level),
+        // auto-flush feature of the backend
+        keywords::auto_flush = true
+        );
+#endif
 }
 
 //-----------------------------------------------------------------------------
@@ -93,93 +110,125 @@ void SpyLogger::addStreamAppender( std::ostream &os, LevelType level )
 
 void SpyLogger::addFileAppender(const std::string & logFile, LevelType level)
 {
-    namespace expr = ::boost::log::expressions;
+#ifndef ANDROID
+    namespace expr     = ::boost::log::expressions;
     namespace keywords = ::boost::log::keywords;
 
     typedef ::boost::posix_time::ptime::time_duration_type DurationType;
 
     ::boost::log::add_file_log (
-            // file name pattern
-            keywords::file_name = logFile,
-            // rotate files every 10 MiB...
-            keywords::rotation_size = 10 * 1024 * 1024,
-            // ...or at midnight
-            keywords::time_based_rotation = ::boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
-            // log record format
-            keywords::format = (
-                    expr::stream
-                    << "[" << expr::format_date_time< ::boost::posix_time::ptime >("TimeStamp", "%d.%m.%Y %H:%M:%S.%f")
-                    << "][" << expr::format_date_time< DurationType >("Uptime", "%H:%M:%S.%f")
-                    << "][" << expr::attr< ::boost::log::attributes::current_process_id::value_type >("ProcessID")
-                    << "][" << expr::attr< ::boost::log::attributes::current_thread_id::value_type >("ThreadID")
-                    << "][" << expr::attr< ::boost::log::trivial::severity_level >("Severity")
-                    << "] " << expr::smessage
-                ),
-            keywords::filter = expr::attr< ::boost::log::trivial::severity_level >("Severity") >=
-                static_cast < ::boost::log::trivial::severity_level > (level),
-            // auto-flush feature of the backend
-            keywords::auto_flush = true
-    );
+        // file name pattern
+        keywords::file_name = logFile,
+        // rotate files every 10 MiB...
+        keywords::rotation_size = 10 * 1024 * 1024,
+        // ...or at midnight
+        keywords::time_based_rotation = ::boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
+        // log record format
+        keywords::format = (
+            expr::stream
+            << "[" << expr::format_date_time< ::boost::posix_time::ptime >("TimeStamp", "%d.%m.%Y %H:%M:%S.%f")
+            << "][" << expr::format_date_time< DurationType >("Uptime", "%H:%M:%S.%f")
+            << "][" << expr::attr< ::boost::log::attributes::current_process_id::value_type >("ProcessID")
+            << "][" << expr::attr< ::boost::log::attributes::current_thread_id::value_type >("ThreadID")
+            << "][" << expr::attr< ::boost::log::trivial::severity_level >("Severity")
+            << "] " << expr::smessage
+            ),
+        keywords::filter = expr::attr< ::boost::log::trivial::severity_level >("Severity") >=
+                           static_cast < ::boost::log::trivial::severity_level > (level),
+        // auto-flush feature of the backend
+        keywords::auto_flush = true
+        );
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::setLevel(LevelType level)
 {
+#ifndef ANDROID
     ::boost::log::core::get()->set_filter
     (
         ::boost::log::expressions::attr< ::boost::log::trivial::severity_level >("Severity")
-                                            >= static_cast < ::boost::log::trivial::severity_level > (level)
+        >= static_cast < ::boost::log::trivial::severity_level > (level)
     );
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::trace(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::trace) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::trace) << file << ":" << line << ": "<< mes;
+#else
+    LOGI("t: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::debug(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::debug) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::debug) << file << ":" << line << ": "<< mes;
+#else
+    LOGI("i: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::info(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::info) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::info) << file << ":" << line << ": "<< mes;
+#else
+    LOGI("i: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::warn(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::warning) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::warning) << file << ":" << line << ": "<< mes;
+#else
+    LOGW("w: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::error(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::error) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::error) << file << ":" << line << ": "<< mes;
+#else
+    LOGE("e: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::fatal(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::fatal) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::fatal) << file << ":" << line << ": "<< mes;
+#else
+    LOGF("f: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
 
 void SpyLogger::log(const std::string & mes, const char * file, int line)
 {
-    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::error) << file << ":" << line << ": "<< mes ;
+#ifndef ANDROID
+    BOOST_LOG_SEV(lg::get(), ::boost::log::trivial::error) << file << ":" << line << ": "<< mes;
+#else
+    LOGI("i: %s(%d): %s", file, line, mes.c_str());
+#endif
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwCore/test/CMakeLists.txt b/SrcLib/core/fwCore/test/CMakeLists.txt
index 56fe3ca..8e41a0f 100644
--- a/SrcLib/core/fwCore/test/CMakeLists.txt
+++ b/SrcLib/core/fwCore/test/CMakeLists.txt
@@ -1,10 +1,23 @@
-
 fwLoadProperties()
 
-find_package (Boost COMPONENTS thread date_time filesystem REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+find_package(Boost COMPONENTS chrono regex REQUIRED)
+    
+fwInclude(
+    ${CPPUNIT_INCLUDE_DIR}
+)
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+    ${Boost_REGEX_LIBRARY}
+)
+if(NOT WIN32 AND NOT APPLE)
+    # missing link on Debian with system lib
+    fwLink(
+        pthread
+    )
+endif()
+
 
 
 
diff --git a/SrcLib/core/fwCore/test/cppunit.options b/SrcLib/core/fwCore/test/cppunit.options
deleted file mode 100644
index 1e664b0..0000000
--- a/SrcLib/core/fwCore/test/cppunit.options
+++ /dev/null
@@ -1,4 +0,0 @@
-CLASSTEST=['LazyInstantiatorTest','FactoryRegistryTest','SpyLogTest']
-USE = ['boost','boostThread','boostDateTime','boostFilesystem']
-LIB = ['fwCore_0-1', 'fwTest_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwCore/test/tu/include/FactoryRegistryTest.hpp b/SrcLib/core/fwCore/test/tu/include/FactoryRegistryTest.hpp
index 18596e9..ce36de6 100644
--- a/SrcLib/core/fwCore/test/tu/include/FactoryRegistryTest.hpp
+++ b/SrcLib/core/fwCore/test/tu/include/FactoryRegistryTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWCORE_UT_FATORYREGISTRYTEST_HPP__
-#define __FWCORE_UT_FATORYREGISTRYTEST_HPP__
+#ifndef __FWCORE_UT_FACTORYREGISTRYTEST_HPP__
+#define __FWCORE_UT_FACTORYREGISTRYTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,12 +16,12 @@ namespace ut
 
 class FactoryRegistryTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( FactoryRegistryTest );
-    CPPUNIT_TEST( pointerTest );
-    CPPUNIT_TEST( valueTest );
-    CPPUNIT_TEST( argTest );
-    CPPUNIT_TEST( threadSafetyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( FactoryRegistryTest );
+CPPUNIT_TEST( pointerTest );
+CPPUNIT_TEST( valueTest );
+CPPUNIT_TEST( argTest );
+CPPUNIT_TEST( threadSafetyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -37,4 +37,4 @@ public:
 
 } //namespace ut
 } //namespace fwCore
-#endif //__FWCORE_UT_FATORYREGISTRYTEST_HPP__
+#endif //__FWCORE_UT_FACTORYREGISTRYTEST_HPP__
diff --git a/SrcLib/core/fwCore/test/tu/include/LazyInstantiatorTest.hpp b/SrcLib/core/fwCore/test/tu/include/LazyInstantiatorTest.hpp
index 1da5fad..197e6a3 100644
--- a/SrcLib/core/fwCore/test/tu/include/LazyInstantiatorTest.hpp
+++ b/SrcLib/core/fwCore/test/tu/include/LazyInstantiatorTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,10 @@ namespace ut
 
 class LazyInstantiatorTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( LazyInstantiatorTest );
-    CPPUNIT_TEST( lazyTest );
-    CPPUNIT_TEST( threadSafetyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( LazyInstantiatorTest );
+CPPUNIT_TEST( lazyTest );
+CPPUNIT_TEST( threadSafetyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwCore/test/tu/include/SpyLogTest.hpp b/SrcLib/core/fwCore/test/tu/include/SpyLogTest.hpp
index 5df806f..4b9b78d 100644
--- a/SrcLib/core/fwCore/test/tu/include/SpyLogTest.hpp
+++ b/SrcLib/core/fwCore/test/tu/include/SpyLogTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,10 +18,10 @@ namespace ut
 
 class SpyLogTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SpyLogTest );
-    CPPUNIT_TEST( logMessageTest );
-    CPPUNIT_TEST( threadSafetyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SpyLogTest );
+CPPUNIT_TEST( logMessageTest );
+CPPUNIT_TEST( threadSafetyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwCore/test/tu/src/FactoryRegistryTest.cpp b/SrcLib/core/fwCore/test/tu/src/FactoryRegistryTest.cpp
index eb42d17..126f42f 100644
--- a/SrcLib/core/fwCore/test/tu/src/FactoryRegistryTest.cpp
+++ b/SrcLib/core/fwCore/test/tu/src/FactoryRegistryTest.cpp
@@ -1,24 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <exception>
-
-#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
-#include <boost/thread.hpp>
-#include <boost/chrono/duration.hpp>
+#include "FactoryRegistryTest.hpp"
 
 #include <fwCore/util/LazyInstantiator.hpp>
 #include <fwCore/util/FactoryRegistry.hpp>
 #include <fwCore/mt/types.hpp>
 #include <fwCore/spyLog.hpp>
 
-#include "FactoryRegistryTest.hpp"
-
+#include <functional>
+#include <iostream>
+#include <exception>
+#include <thread>
+#include <chrono>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwCore::ut::FactoryRegistryTest );
@@ -43,7 +40,7 @@ void FactoryRegistryTest::tearDown()
 class ObjectTest
 {
 public:
-    typedef ::boost::shared_ptr< ObjectTest > sptr;
+    typedef std::shared_ptr< ObjectTest > sptr;
 
     ObjectTest() : m_name("ObjectTest")
     {
@@ -51,7 +48,7 @@ public:
         ++s_counter;
     }
 
-    ObjectTest(std::string name) : m_name(name)
+    ObjectTest(const std::string& name) : m_name(name)
     {
         ::fwCore::mt::ScopedLock lock(s_mutex);
         ++s_counter;
@@ -60,12 +57,13 @@ public:
     ObjectTest(int msec) : m_name("ObjectTest+sleep")
     {
         ::fwCore::mt::ScopedLock lock(s_mutex);
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(msec));
+        std::this_thread::sleep_for( std::chrono::milliseconds(msec));
         ++s_counter;
     }
 
     virtual ~ObjectTest()
-    {}
+    {
+    }
 
     virtual std::string getName() const
     {
@@ -76,20 +74,21 @@ public:
     static int s_counter;
     static ::fwCore::mt::Mutex s_mutex;
 };
+
 int ObjectTest::s_counter = 0;
 ::fwCore::mt::Mutex ObjectTest::s_mutex;
 
 class DerivedObjectTest : public ObjectTest
 {
 public:
-    typedef ::boost::shared_ptr< DerivedObjectTest > sptr;
+    typedef std::shared_ptr< DerivedObjectTest > sptr;
 
     DerivedObjectTest() : ObjectTest()
     {
         m_name = "DerivedObjectTest";
     }
 
-    DerivedObjectTest(std::string name)  : ObjectTest(name)
+    DerivedObjectTest(const std::string& name)  : ObjectTest(name)
     {
     }
 
@@ -106,10 +105,16 @@ void FactoryRegistryTest::pointerTest()
 
     typedef ::fwCore::util::FactoryRegistry< ObjectTest::sptr() > FactoryType;
     FactoryType objectTestFactory;
-    objectTestFactory.addFactory("ObjectTest", ::boost::factory<ObjectTest::sptr>());
-    objectTestFactory.addFactory("DerivedObjectTest", ::boost::factory<DerivedObjectTest::sptr>());
-
-    FactoryType::KeyVectorType keys = ::boost::assign::list_of("ObjectTest") ("DerivedObjectTest");
+    objectTestFactory.addFactory("ObjectTest", []() -> ObjectTest::sptr
+            {
+                return std::make_shared<ObjectTest>();
+            });
+    objectTestFactory.addFactory("DerivedObjectTest", []() -> DerivedObjectTest::sptr
+            {
+                return std::make_shared<DerivedObjectTest>();
+            });
+
+    FactoryType::KeyVectorType keys = {"ObjectTest", "DerivedObjectTest"};
     std::sort(keys.begin(), keys.end());
     FactoryType::KeyVectorType vectKeys = objectTestFactory.getFactoryKeys();
     std::sort(vectKeys.begin(), vectKeys.end());
@@ -145,8 +150,14 @@ void FactoryRegistryTest::valueTest()
     ObjectTest::s_counter = 0;
 
     ::fwCore::util::FactoryRegistry< ObjectTest() > objectTestFactory;
-    objectTestFactory.addFactory("ObjectTest", ::boost::value_factory<ObjectTest>());
-    objectTestFactory.addFactory("DerivedObjectTest", ::boost::value_factory<DerivedObjectTest>());
+    objectTestFactory.addFactory("ObjectTest", []() -> ObjectTest
+            {
+                return ObjectTest();
+            });
+    objectTestFactory.addFactory("DerivedObjectTest", []() -> DerivedObjectTest
+            {
+                return DerivedObjectTest();
+            });
 
     ObjectTest objectTest1 = objectTestFactory.create("ObjectTest");
     CPPUNIT_ASSERT_EQUAL(1, ObjectTest::s_counter);
@@ -176,8 +187,14 @@ void FactoryRegistryTest::argTest()
     ObjectTest::s_counter = 0;
 
     ::fwCore::util::FactoryRegistry< ObjectTest::sptr(std::string) > objectTestFactory;
-    objectTestFactory.addFactory("ObjectTest", ::boost::factory<ObjectTest::sptr>());
-    objectTestFactory.addFactory("DerivedObjectTest", ::boost::factory<DerivedObjectTest::sptr>());
+    objectTestFactory.addFactory("ObjectTest", [](const std::string& name) -> ObjectTest::sptr
+            {
+                return std::make_shared<ObjectTest>(name);
+            });
+    objectTestFactory.addFactory("DerivedObjectTest", [](const std::string& name) -> DerivedObjectTest::sptr
+            {
+                return std::make_shared<DerivedObjectTest>(name);
+            });
 
     std::string objTest1("ObjectTest1");
     std::string objTest2("ObjectTest2");
@@ -208,17 +225,18 @@ typedef ::fwCore::util::FactoryRegistry< ObjectTest::sptr(int) > ThreadSafetyTes
 struct UseFactoryThread
 {
 
-    typedef ::boost::shared_ptr< UseFactoryThread > sptr;
+    typedef std::shared_ptr< UseFactoryThread > sptr;
     typedef std::vector< ObjectTest::sptr > ObjectVectorType;
 
     UseFactoryThread( const ThreadSafetyTestFactoryType &factory, std::string objType = "ObjectTest" ) :
         m_factory(factory), m_objectType(objType)
-    {}
+    {
+    }
 
     void run()
     {
         int duration = 20;
-        for (int i=0; i< s_NBOBJECTS; ++i)
+        for (int i = 0; i< s_NBOBJECTS; ++i)
         {
             OSLM_WARN( "building 1 " << m_objectType << "... " );
             m_objects.push_back( m_factory.create(m_objectType, duration) );
@@ -237,24 +255,28 @@ const int UseFactoryThread::s_NBOBJECTS = 10;
 
 struct PopulateRegistryThread
 {
-    typedef ::boost::shared_ptr< PopulateRegistryThread > sptr;
+    typedef std::shared_ptr< PopulateRegistryThread > sptr;
     typedef std::vector< ObjectTest::sptr > ObjectVectorType;
 
     PopulateRegistryThread( ThreadSafetyTestFactoryType &factory ) :
         m_factory(factory)
-    {}
+    {
+    }
 
     void run()
     {
-        for (int i=0; i< s_NBREGISTRYITEMS; ++i)
+        for (int i = 0; i< s_NBREGISTRYITEMS; ++i)
         {
             std::stringstream ss;
-            ss << "PopulateFactoryThreadObject-" << ::boost::this_thread::get_id() <<"-" << i ;
+            ss << "PopulateFactoryThreadObject-" << std::this_thread::get_id() <<"-" << i;
             std::string name = ss.str();
-            OSLM_WARN( "adding " << name << "... " );
-            m_factory.addFactory(name, ::boost::factory<ObjectTest::sptr>());
-            OSLM_WARN( "added " << name << "... " );
-            ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(1));
+            SLM_WARN( "adding " + name + "... " );
+            m_factory.addFactory(name, [](int msec) -> ObjectTest::sptr
+                    {
+                        return std::make_shared<ObjectTest>(msec);
+                    });
+            SLM_WARN( "added " + name + "... " );
+            std::this_thread::sleep_for( std::chrono::milliseconds(1));
         }
 
     }
@@ -271,56 +293,58 @@ void FactoryRegistryTest::threadSafetyTest()
     ObjectTest::s_counter = 0;
 
     ThreadSafetyTestFactoryType objectTestFactory;
-    objectTestFactory.addFactory("ObjectTest", ::boost::factory<ObjectTest::sptr>());
-    objectTestFactory.addFactory("DerivedObjectTest", ::boost::factory<DerivedObjectTest::sptr>());
+    objectTestFactory.addFactory("ObjectTest", [](int msec) -> ObjectTest::sptr
+            {
+                return std::make_shared<ObjectTest>(msec);
+            });
+    objectTestFactory.addFactory("DerivedObjectTest", [](int msec) -> DerivedObjectTest::sptr
+            {
+                return std::make_shared<DerivedObjectTest>(msec);
+            });
 
     const int NB_THREAD(10);
 
     typedef std::vector < UseFactoryThread::sptr > UseFactoryThreadVector;
-    ::boost::thread_group tg;
+    std::vector< std::thread > tg;
 
     UseFactoryThreadVector objects;
     for(size_t i = 0; i < NB_THREAD; i++)
     {
         UseFactoryThread::sptr uft;
-        ::boost::thread* t;
 
-        uft = ::boost::make_shared<UseFactoryThread>(objectTestFactory);
-        t = new ::boost::thread(::boost::bind(&UseFactoryThread::run, uft) );
-        tg.add_thread(t);
+        uft = std::make_shared<UseFactoryThread>(objectTestFactory);
+        tg.push_back(std::thread(std::bind(&UseFactoryThread::run, uft) ));
         objects.push_back(uft);
 
-        uft = ::boost::make_shared<UseFactoryThread>(objectTestFactory, "DerivedObjectTest");
-        t = new ::boost::thread(::boost::bind(&UseFactoryThread::run, uft) );
-        tg.add_thread(t);
+        uft = std::make_shared<UseFactoryThread>(objectTestFactory, "DerivedObjectTest");
+        tg.push_back(std::thread(std::bind(&UseFactoryThread::run, uft) ));
         objects.push_back(uft);
     }
 
     for(size_t i = 0; i < NB_THREAD; i++)
     {
         PopulateRegistryThread::sptr pft;
-        ::boost::thread* t;
 
-        pft = ::boost::make_shared<PopulateRegistryThread>(::boost::ref(objectTestFactory));
-        t = new ::boost::thread(::boost::bind(&PopulateRegistryThread::run, pft) );
-        tg.add_thread(t);
+        pft = std::make_shared<PopulateRegistryThread>(::boost::ref(objectTestFactory));
+        tg.push_back(std::thread(std::bind(&PopulateRegistryThread::run, pft) ));
     }
 
+    for(auto& t : tg)
+    {
+        t.join();
+    }
 
-    tg.join_all();
-
-    BOOST_FOREACH(UseFactoryThreadVector::value_type uft, objects)
+    for(const UseFactoryThreadVector::value_type& uft :  objects)
     {
         CPPUNIT_ASSERT_EQUAL(size_t(UseFactoryThread::s_NBOBJECTS), uft->m_objects.size());
     }
 
     CPPUNIT_ASSERT_EQUAL(NB_THREAD * UseFactoryThread::s_NBOBJECTS * 2, ObjectTest::s_counter);
     CPPUNIT_ASSERT_EQUAL(
-                         size_t(NB_THREAD * PopulateRegistryThread::s_NBREGISTRYITEMS + 2),
-                         objectTestFactory.getFactoryKeys().size()
-                         );
+        size_t(NB_THREAD * PopulateRegistryThread::s_NBREGISTRYITEMS + 2),
+        objectTestFactory.getFactoryKeys().size()
+        );
     ObjectTest::s_counter = 0;
-
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwCore/test/tu/src/LazyInstantiatorTest.cpp b/SrcLib/core/fwCore/test/tu/src/LazyInstantiatorTest.cpp
index eea7e28..68efcf0 100644
--- a/SrcLib/core/fwCore/test/tu/src/LazyInstantiatorTest.cpp
+++ b/SrcLib/core/fwCore/test/tu/src/LazyInstantiatorTest.cpp
@@ -1,20 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <exception>
-
-#include <boost/thread.hpp>
-#include <boost/chrono/duration.hpp>
+#include "LazyInstantiatorTest.hpp"
 
 #include <fwCore/util/LazyInstantiator.hpp>
 #include <fwCore/mt/types.hpp>
 
-#include "LazyInstantiatorTest.hpp"
-
+#include <chrono>
+#include <exception>
+#include <iostream>
+#include <thread>
+#include <vector>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwCore::ut::LazyInstantiatorTest );
@@ -42,13 +41,13 @@ template < int SLEEP = 0 >
 class StaticCounter
 {
 public:
-    typedef ::boost::shared_ptr< StaticCounter > sptr;
+    typedef std::shared_ptr< StaticCounter > sptr;
 
     StaticCounter()
     {
         ::fwCore::mt::ScopedLock lock(s_mutex);
         ++s_counter;
-        ::boost::this_thread::sleep_for( ::boost::chrono::seconds(SLEEP));
+        std::this_thread::sleep_for( std::chrono::seconds(SLEEP));
     }
 
     static int s_counter;
@@ -61,7 +60,7 @@ int StaticCounter<SLEEP>::s_counter = 0;
 template < int SLEEP >
 ::fwCore::mt::Mutex StaticCounter<SLEEP>::s_mutex;
 
-struct second_counter{};
+struct second_counter {};
 
 //-----------------------------------------------------------------------------
 
@@ -87,20 +86,21 @@ void LazyInstantiatorTest::lazyTest()
 
 //-----------------------------------------------------------------------------
 
-struct thread_counter_tag {} ;
+struct thread_counter_tag {};
 
 struct CounterThread
 {
     typedef StaticCounter<5> CounterType;
-    typedef ::boost::shared_ptr< CounterThread > sptr;
+    typedef std::shared_ptr< CounterThread > sptr;
 
     CounterThread()
-    {}
+    {
+    }
 
     void run ()
     {
         CounterType::sptr counter;
-        counter = ::fwCore::util::LazyInstantiator< CounterType , thread_counter_tag >::getInstance();
+        counter = ::fwCore::util::LazyInstantiator< CounterType, thread_counter_tag >::getInstance();
     }
 };
 
@@ -111,14 +111,16 @@ void LazyInstantiatorTest::threadSafetyTest()
     const int NB_THREAD(100);
     CounterThread::CounterType::s_counter = 0;
 
-    ::boost::thread_group tg;
+    std::vector< std::thread > tg;
     for(size_t i = 0; i <= NB_THREAD; i++)
     {
-        CounterThread::sptr ct = ::boost::make_shared<CounterThread>();
-        ::boost::thread* t  = new ::boost::thread(::boost::bind(&CounterThread::run, ct) );
-        tg.add_thread(t);
+        CounterThread::sptr ct = std::make_shared<CounterThread>();
+        tg.push_back(std::thread(std::bind(&CounterThread::run, ct) ));
+    }
+    for(auto& t : tg)
+    {
+        t.join();
     }
-    tg.join_all();
 
     CounterThread::CounterType::sptr counter;
     counter = ::fwCore::util::LazyInstantiator< CounterThread::CounterType, thread_counter_tag >::getInstance();
diff --git a/SrcLib/core/fwCore/test/tu/src/SpyLogTest.cpp b/SrcLib/core/fwCore/test/tu/src/SpyLogTest.cpp
index c3cc529..d01c837 100644
--- a/SrcLib/core/fwCore/test/tu/src/SpyLogTest.cpp
+++ b/SrcLib/core/fwCore/test/tu/src/SpyLogTest.cpp
@@ -1,31 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <exception>
-#include <streambuf>
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/fstream.hpp>
-#include <boost/thread.hpp>
-#include <boost/foreach.hpp>
-#include <boost/regex.hpp>
-#include <boost/make_shared.hpp>
-
-#include <boost/algorithm/string.hpp>
-#include <boost/algorithm/string/regex.hpp>
-#include <boost/algorithm/string/regex_find_format.hpp>
+#include "SpyLogTest.hpp"
 
 #include <fwCore/spyLog.hpp>
 #include <fwCore/mt/types.hpp>
 
 #include <fwTest/Exception.hpp>
 
-#include "SpyLogTest.hpp"
+#include <boost/regex.hpp>
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/regex.hpp>
+#include <boost/algorithm/string/regex_find_format.hpp>
 
+#include <iostream>
+#include <exception>
+#include <streambuf>
+#include <thread>
+#include <string>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwCore::ut::SpyLogTest );
@@ -87,22 +82,23 @@ void SpyLogTest::logMessageTest()
 
 struct LogProducerThread
 {
-    typedef ::boost::shared_ptr< LogProducerThread > sptr;
+    typedef std::shared_ptr< LogProducerThread > sptr;
     typedef std::vector< std::string > LogContainerType;
 
     LogProducerThread()
-    {}
+    {
+    }
 
     void run(LogContainerType& logs, size_t nbLogs, size_t offset)
     {
         ::fwCore::log::SpyLogger& log = ::fwCore::log::SpyLogger::getSpyLogger();
-        for(size_t i=offset; i < nbLogs + offset; ++i)
+        for(size_t i = offset; i < nbLogs + offset; ++i)
         {
             std::stringstream ss;
             ss << "msg n ";
             ss.width(10);
             ss.fill('0');
-            ss << i ;
+            ss << i;
             logs[i] = ss.str();
             log.fatal(logs[i], __FILE__, __LINE__);
         }
@@ -113,38 +109,40 @@ struct LogProducerThread
 
 struct RegexLogCompare
 {
-  bool operator() (std::string a, std::string b)
-  {
-      ::boost::regex re(".*(msg n [[:digit:]]+)$");
-      ::boost::smatch matchA;
-      ::boost::smatch matchB;
-      bool doMatchA = boost::regex_match(a, matchA, re);
-      bool doMatchB = boost::regex_match(b, matchB, re);
-      CPPUNIT_ASSERT_MESSAGE( std::string("Regex do not match ") + a, doMatchA);
-      CPPUNIT_ASSERT_MESSAGE( std::string("Regex do not match ") + b, doMatchB);
-
-      std::string strA(matchA[1].first, matchA[1].second);
-      std::string strB(matchB[1].first, matchB[1].second);
-
-      return strA < strB;
-  }
+    bool operator() (std::string a, std::string b)
+    {
+        boost::regex re(".*(msg n [[:digit:]]+)$");
+        boost::smatch matchA;
+        boost::smatch matchB;
+        bool doMatchA = boost::regex_match(a, matchA, re);
+        bool doMatchB = boost::regex_match(b, matchB, re);
+        CPPUNIT_ASSERT_MESSAGE( std::string("Regex do not match ") + a, doMatchA);
+        CPPUNIT_ASSERT_MESSAGE( std::string("Regex do not match ") + b, doMatchB);
+
+        std::string strA(matchA[1].first, matchA[1].second);
+        std::string strB(matchB[1].first, matchB[1].second);
+
+        return strA < strB;
+    }
 } regex_compare;
 
 void SpyLogTest::threadSafetyTest()
 {
     m_ostream.clear();
-    const size_t NB_THREAD(100);
-    const size_t NB_LOG(100);
+    const size_t NB_THREAD(20);
+    const size_t NB_LOG(20);
     LogProducerThread::LogContainerType logs(NB_THREAD * NB_LOG, "test");
-    ::boost::thread_group tg;
+    std::vector< std::thread > tg;
     for(size_t i = 0; i < NB_THREAD; ++i)
     {
-        LogProducerThread::sptr ct = ::boost::make_shared<LogProducerThread>();
-        size_t offset = i * NB_LOG;
-        ::boost::thread* t  = new ::boost::thread(::boost::bind(&LogProducerThread::run, ct, boost::ref(logs), NB_LOG, offset) );
-        tg.add_thread(t);
+        LogProducerThread::sptr ct = std::make_shared<LogProducerThread>();
+        size_t offset              = i * NB_LOG;
+        tg.push_back(std::thread(std::bind(&LogProducerThread::run, ct, std::ref(logs), NB_LOG, offset) ));
+    }
+    for(auto& t : tg)
+    {
+        t.join();
     }
-    tg.join_all();
 
     LogProducerThread::LogContainerType logMessages = this->logToVector(m_ostream);
 
@@ -157,11 +155,12 @@ void SpyLogTest::threadSafetyTest()
 std::vector<std::string> SpyLogTest::logToVector(const std::stringstream &logsStream)
 {
     std::vector<std::string> lines;
-    ::boost::split_regex(lines, logsStream.str(), ::boost::regex("\r?\n"));
-
-    if(lines.back().empty())
+    std::string line;
+    std::istringstream input;
+    input.str(logsStream.str());
+    while(std::getline(input, line))
     {
-        lines.pop_back();
+        lines.push_back(line);
     }
     return lines;
 }
@@ -179,19 +178,19 @@ void SpyLogTest::checkLog(const std::vector<std::string> &logMessagesRef, const
     const std::string fileLinePattern("([0-9]+: )");
     const std::string messagePattern("(.*)$");
 
-    ::boost::regex re(
-                linePattern
-                + timePattern
-                + levelPattern
-                + filePattern
-                + fileLinePattern
-                + messagePattern );
+    boost::regex re(
+        linePattern
+        + timePattern
+        + levelPattern
+        + filePattern
+        + fileLinePattern
+        + messagePattern );
 
-    ::boost::smatch match;
+    boost::smatch match;
     std::string regexMessage;
-    size_t i=0;
+    size_t i = 0;
 
-    BOOST_FOREACH(const std::string &log, logMessages)
+    for(const std::string &log :  logMessages)
     {
         bool doMatch = boost::regex_match(log, match, re);
 
diff --git a/SrcLib/core/fwData/CMakeLists.txt b/SrcLib/core/fwData/CMakeLists.txt
index f45665f..15cd4c1 100644
--- a/SrcLib/core/fwData/CMakeLists.txt
+++ b/SrcLib/core/fwData/CMakeLists.txt
@@ -1,17 +1 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCamp
-    fwCom
-    fwCore
-    fwMath
-    fwMemory
-    fwTools
-)
-
-find_package (Boost COMPONENTS date_time REQUIRED)
-
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-fwLink(${Boost_LIBRARIES})
-
diff --git a/SrcLib/core/fwData/COPYING b/SrcLib/core/fwData/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwData/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwData/COPYING.LESSER b/SrcLib/core/fwData/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwData/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwData/Properties.cmake b/SrcLib/core/fwData/Properties.cmake
index ca99c0a..262dc83 100644
--- a/SrcLib/core/fwData/Properties.cmake
+++ b/SrcLib/core/fwData/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwData )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCamp fwCom fwCore fwMath fwMemory fwTools )
+set( DEPENDENCIES fwCom fwMemory fwTools )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwData/bin/build.options b/SrcLib/core/fwData/bin/build.options
deleted file mode 100644
index 6ff51d0..0000000
--- a/SrcLib/core/fwData/bin/build.options
+++ /dev/null
@@ -1,6 +0,0 @@
-TYPE    = 'shared'
-LIB     = ['fwTools_0-1' , 'fwMath_0-1', 'fwCamp_0-1', 'fwCom_0-1','fwMemory_0-1']
-USE     = ['boost', 'boostDateTime',]
-VERSION = '0-1'
-
-
diff --git a/SrcLib/core/fwData/include/fwData/Array.hpp b/SrcLib/core/fwData/include/fwData/Array.hpp
index fbc9396..ab4dd36 100644
--- a/SrcLib/core/fwData/include/fwData/Array.hpp
+++ b/SrcLib/core/fwData/include/fwData/Array.hpp
@@ -1,40 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_ARRAY_HPP_
-#define _FWDATA_ARRAY_HPP_
-
-#include <fwTools/Type.hpp>
-#include <fwMemory/BufferObject.hpp>
+#ifndef __FWDATA_ARRAY_HPP__
+#define __FWDATA_ARRAY_HPP__
 
 #include "fwData/Exception.hpp"
-
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <fwTools/Type.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
 fwCampAutoDeclareDataMacro((fwData)(Array), FWDATA_API);
 
 namespace fwData
 {
 
 /**
- * @class   Array
  * @brief   Provides a way to manage a view on a multidimentionnal array.
+ *
  * If the array own his buffer, it will perform the allocation, reallocation,
- * destruction of the buffer. Else, this class will provide a array "view" of the
+ * destruction of the buffer. Else, this class will provide an array "view" of the
  * buffer
- * 
- * @date    2011.
+ *
  */
 class FWDATA_CLASS_API Array : public ::fwData::Object
 {
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Array)(::fwData::Object), (()), ::fwData::factory::New< Array >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Array)(::fwData::Object), (()), ::fwData::factory::New< Array >);
 
     fwCampMakeFriendDataMacro((fwData)(Array));
 
@@ -92,11 +91,14 @@ public :
      *
      * @throw ::fwData::Exception
      */
-    FWDATA_API virtual size_t resize(const ::fwTools::Type &type, const SizeType &size, size_t nbOfComponents, bool reallocate = false) throw(::fwData::Exception);
+    FWDATA_API virtual size_t resize(const ::fwTools::Type &type, const SizeType &size, size_t nbOfComponents,
+                                     bool reallocate = false) throw(::fwData::Exception);
 
     /// Aliases to the resize method
-    FWDATA_API virtual size_t resize(const std::string &type, const SizeType &size, size_t nbOfComponents, bool reallocate = false) throw(::fwData::Exception);
-    FWDATA_API virtual size_t resize(const SizeType &size, size_t nbOfComponents, bool reallocate = false) throw(::fwData::Exception);
+    FWDATA_API virtual size_t resize(const std::string &type, const SizeType &size, size_t nbOfComponents,
+                                     bool reallocate = false) throw(::fwData::Exception);
+    FWDATA_API virtual size_t resize(const SizeType &size, size_t nbOfComponents, bool reallocate =
+                                         false) throw(::fwData::Exception);
     FWDATA_API virtual size_t resize(const SizeType &size, bool reallocate = false) throw(::fwData::Exception);
 
     /**
@@ -211,7 +213,8 @@ public :
      *
      * @return buffer offset
      */
-    FWDATA_API size_t getBufferOffset( const ::fwData::Array::IndexType &id, size_t component, size_t sizeOfType ) const;
+    FWDATA_API size_t getBufferOffset( const ::fwData::Array::IndexType &id, size_t component,
+                                       size_t sizeOfType ) const;
 
     /**
      * @brief Compute strides for given parameters
@@ -224,7 +227,10 @@ public :
      */
     FWDATA_API static OffsetType computeStrides( SizeType size, size_t nbOfComponents, size_t sizeOfType );
 
-    fwDataGetSetSptrMacro(BufferObject, ::fwMemory::BufferObject::sptr);
+    ::fwMemory::BufferObject::sptr getBufferObject () const;
+
+    void setBufferObject (const ::fwMemory::BufferObject::sptr& val);
+
 
     /// Exchanges the content of the Array with the content of _source.
     FWDATA_API void swap( Array::sptr _source );
@@ -238,14 +244,31 @@ protected:
 
     OffsetType m_strides;
     ::fwTools::Type m_type;
-    ::fwMemory::BufferObject::sptr m_attrBufferObject;
+    ::fwMemory::BufferObject::sptr m_bufferObject;
     SizeType m_size;
     size_t m_nbOfComponents;
     bool m_isBufferOwner;
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline ::fwMemory::BufferObject::sptr Array::getBufferObject () const
+{
+    return m_bufferObject;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Array::setBufferObject (const ::fwMemory::BufferObject::sptr& val)
+{
+    m_bufferObject = val;
+}
+
+//-----------------------------------------------------------------------------
+
 
 } // namespace fwData
 
-#endif // _FWDATA_ARRAY_HPP_
+#endif // __FWDATA_ARRAY_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Boolean.hpp b/SrcLib/core/fwData/include/fwData/Boolean.hpp
index dd2d05f..952ead3 100644
--- a/SrcLib/core/fwData/include/fwData/Boolean.hpp
+++ b/SrcLib/core/fwData/include/fwData/Boolean.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_BOOLEAN_HPP_
-#define _FWDATA_BOOLEAN_HPP_
+#ifndef __FWDATA_BOOLEAN_HPP__
+#define __FWDATA_BOOLEAN_HPP__
 
 #include "fwData/GenericField.hpp"
 #include "fwData/config.hpp"
@@ -17,18 +17,15 @@ namespace fwData
 {
 
 /**
- * @class   Boolean
- * @brief   This class contains a boolean value
+ * @brief This class contains a boolean value.
  *
  * Boolean object is essentially used as a field in other objects.
- *
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Boolean : public GenericField< bool >
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Boolean)(::fwData::Object),( ((const bool)(false)) ), GenericFieldFactory< Boolean >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Boolean)(::fwData::Object),( ((const bool)(false)) ),
+                                            GenericFieldFactory< Boolean >);
     fwCampMakeFriendDataMacro((fwData)(Boolean));
 
     /**
@@ -48,10 +45,9 @@ public:
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-protected:
-
 };
 
 } // namespace fwData
 
-#endif // _FWDATA_BOOLEAN_HPP_
+#endif // __FWDATA_BOOLEAN_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Camera.hpp b/SrcLib/core/fwData/include/fwData/Camera.hpp
deleted file mode 100644
index 8debea6..0000000
--- a/SrcLib/core/fwData/include/fwData/Camera.hpp
+++ /dev/null
@@ -1,160 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATA_CAMERA_HPP_
-#define _FWDATA_CAMERA_HPP_
-
-#include <utility>
-
-#include <boost/cstdint.hpp>
-#include <boost/array.hpp>
-
-#include "fwData/Object.hpp"
-#include "fwData/TransformationMatrix3D.hpp"
-#include "fwData/factory/new.hpp"
-
-
-fwCampAutoDeclareDataMacro((fwData)(Camera), FWDATA_API);
-
-namespace fwData
-{
-/**
- * @class   Camera
- * @brief   This class defines a camera object.
- * 
- * @date    2007-2009.
- */
-class FWDATA_CLASS_API Camera : public Object
-{
-public:
-    fwCampMakeFriendDataMacro((fwData)(Camera));
-    fwCoreClassDefinitionsWithFactoryMacro(
-            (Camera)(::fwData::Object),
-            (()),
-            ::fwData::factory::New< Camera >);
-
-    typedef struct
-    {
-        unsigned long Low;
-        unsigned long High;
-    } uint32HL;
-
-    typedef ::boost::array<double, 5> DistArray;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWDATA_API Camera( ::fwData::Object::Key key );
-
-    /**
-     * @brief destructor
-     */
-    FWDATA_API virtual ~Camera() throw();
-
-    /// @brief set the extrinsic transformation matrix
-    void setExtrinsicCameraTransformation(
-            ::fwData::TransformationMatrix3D::sptr transMat)
-    { m_extrinsicMatrix = transMat; }
-
-    /// @brief set the intrinsic transformation matrix
-    void setIntrinsicCameraTransformation(
-            ::fwData::TransformationMatrix3D::sptr transMat)
-    { m_intrinsicMatrix = transMat; }
-
-    /// @brief get the extrinsic transformation matrix
-    ::fwData::TransformationMatrix3D::sptr
-     getExtrinsicCameraTransformation() const
-    { return m_extrinsicMatrix; };
-
-    /// @brief get the intrinsic transformation matrix
-    ::fwData::TransformationMatrix3D::sptr
-     getIntrinsicCameraTransformation() const
-    { return m_intrinsicMatrix; };
-
-    /// @return cx or u0 = x-coordinate of optical center
-    ::fwData::TransformationMatrix3D::TM3DType getCx() const
-    { return m_intrinsicMatrix->getCoefficient(0, 2); };
-
-    /// @return cy or v0 = y-coordinate of optical center
-    ::fwData::TransformationMatrix3D::TM3DType getCy() const
-    { return m_intrinsicMatrix->getCoefficient(1, 2); };
-
-    /// @brief set cx or u0 = x-coordinate of optical center
-    void setCx(::fwData::TransformationMatrix3D::TM3DType cx)
-    { m_intrinsicMatrix->setCoefficient(0, 2, cx); };
-
-    /// @brief set cy or v0 = y-coordinate of optical center
-    void setCy(::fwData::TransformationMatrix3D::TM3DType cy)
-    { m_intrinsicMatrix->setCoefficient(1, 2, cy); };
-
-    /// @return fx = x-coordinate of optical center
-    ::fwData::TransformationMatrix3D::TM3DType getFx() const
-    { return m_intrinsicMatrix->getCoefficient(0, 0); };
-
-    /// @brief set fx = x-coordinate of optical center
-    void setFx(::fwData::TransformationMatrix3D::TM3DType fx)
-    { m_intrinsicMatrix->setCoefficient(0, 0, fx); };
-
-    /// @return fy = y-coordinate of optical center
-    ::fwData::TransformationMatrix3D::TM3DType getFy() const
-    { return m_intrinsicMatrix->getCoefficient(1, 1); };
-
-    /// @brief set fy = y-coordinate of optical center
-    void setFy(::fwData::TransformationMatrix3D::TM3DType fy)
-    { m_intrinsicMatrix->setCoefficient(1, 1, fy); };
-
-    FWDATA_API void setDistortionCoefficient(
-            double k1, double k2, double p1, double p2, double k3);
-    fwDataGetSetCRefMacro(DistortionCoefficient, DistArray);
-
-    fwDataGetSetMacro(Skew, double);
-
-    /// @brief get flag if data is available
-    bool &dataAvailable()
-    { return m_dataAvailable; }
-
-    /**
-     * @brief get universal ID for the physic's camera
-     */
-    std::pair< bool, uint32HL > getCameraGUID() const
-                { return m_cameraGUID; };
-
-    /**
-     * @brief set universal ID for the physic's camera
-     */
-    FWDATA_API void setCameraGUID(uint32HL _cameraGUID);
-
-    /// Defines deep copy
-    FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
-
-protected:
-
-    /// extrinsic matrix
-    ::fwData::TransformationMatrix3D::sptr m_extrinsicMatrix;
-
-    /// intrinsic matrix
-    ::fwData::TransformationMatrix3D::sptr m_intrinsicMatrix;
-
-    /**
-     * Image distortion coefficients (radial and tangential distortions,
-     * [k1, k2, p1, p2, k3])
-     */
-    DistArray m_attrDistortionCoefficient;
-
-    /// skew coefficient (angle between the x and y pixel axes)
-    double m_attrSkew;
-
-    //! Universal ID for the physic's camera
-    std::pair< bool, uint32HL > m_cameraGUID;
-
-    //! flag if data is available
-    bool m_dataAvailable;
-};
-
-} // namespace fwData
-
-#endif // _FWDATA_CAMERA_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/Color.hpp b/SrcLib/core/fwData/include/fwData/Color.hpp
index 401ab84..4f374e1 100644
--- a/SrcLib/core/fwData/include/fwData/Color.hpp
+++ b/SrcLib/core/fwData/include/fwData/Color.hpp
@@ -1,41 +1,40 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_COLOR_HPP_
-#define _FWDATA_COLOR_HPP_
-
-#include <boost/array.hpp>
+#ifndef __FWDATA_COLOR_HPP__
+#define __FWDATA_COLOR_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <array>
+
 fwCampAutoDeclareDataMacro((fwData)(Color), FWDATA_API);
 
 namespace fwData
 {
 /**
- * @class   Color
  * @brief   This class defines color object.
- * 
- * @date    2007-2009.
  */
 
 class FWDATA_CLASS_API Color : public Object
 {
 
-public :
+public:
 
     typedef float ColorType;
-    typedef ::boost::array<ColorType,4> ColorArray;
+    typedef std::array<ColorType,4> ColorArray;
 
     fwCoreClassDefinitionsWithNFactoriesMacro( (Color)(::fwData::Object),
-       ((::fwData::factory::New< Color > ,() ))
-       ((ColorFactory ,((ColorType)) ((ColorType)(1.0)) ((ColorType) (1.0)) ((ColorType)(1.0)) ))
-       );
+                                               ((::fwData::factory::New< Color >,() ))
+                                                   ((ColorFactory,
+                                                     ((ColorType))((ColorType)(1.0)) ((ColorType) (1.0)) ((ColorType)(
+                                                                                                              1.0)) ))
+                                               );
 
     fwCampMakeFriendDataMacro((fwData)(Color));
 
@@ -54,24 +53,28 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    fwGettersSettersDocMacro(RGBA, vRGBA, ColorArray, the array of color values (red, green, blue, alpha).);
+    /** Get/Set the array of color values (red, green, blue, alpha).
+     *  @name ColorArray accessor
+     *  @{  */
+    const ColorArray getRGBA() const;
+    ColorArray& getRefRGBA();
+    const ColorArray& getCRefRGBA() const;
+    void setRGBA(const ColorArray&  _vRGBA);
+    /** @} */
 
     ///@{
-    ///@brief set RGBA color
-    ///@param[in] red
-    ///@param[in] green
-    ///@param[in] blue
-    ///@param[in] alpha
-    FWDATA_API void setRGBA( const ColorType red, const ColorType green, const ColorType blue, const ColorType alpha=1.0 );
+    /// Set RGBA color
+    FWDATA_API void setRGBA( const ColorType red, const ColorType green, const ColorType blue,
+                             const ColorType alpha = 1.0 );
 
     ///@brief set RGBA from hexadecimal format (\#ffffff)
     ///@param[in] hexaColor c hexadecimal format (\#ffffff)
     FWDATA_API void setRGBA( std::string hexaColor );
     ///@}
 
-    /** @name color attributes accessor */
-    /**@brief Get editable reference to color attributes
-     * @{
+    /** @name color attributes accessor
+     *  @brief Get editable reference to color attributes
+     *  @{
      */
     FWDATA_API ColorType  &red();
     FWDATA_API ColorType  &green();
@@ -82,25 +85,53 @@ public :
     /**@brief Get read-only reference to color attributes
      * @{
      */
-    FWDATA_API const ColorType  &red()   const ;
-    FWDATA_API const ColorType  &green() const ;
-    FWDATA_API const ColorType  &blue()  const ;
+    FWDATA_API const ColorType  &red()   const;
+    FWDATA_API const ColorType  &green() const;
+    FWDATA_API const ColorType  &blue()  const;
     FWDATA_API const ColorType  &alpha() const;
     //@}
 
-protected :
+protected:
 
 
     FWDATA_API static sptr ColorFactory(ColorType red, ColorType green, ColorType blue, ColorType alpha);
 
     //! RGBA of the image (in terms of points)
-    ColorArray  m_vRGBA;
+    ColorArray m_vRGBA;
+
+}; // end class Color
+
+//-----------------------------------------------------------------------------
 
+inline const Color::ColorArray Color::getRGBA() const
+{
+    return m_vRGBA;
+}
 
+//-----------------------------------------------------------------------------
 
-}; // end class Color
+inline Color::ColorArray& Color::getRefRGBA()
+{
+    return this->m_vRGBA;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Color::ColorArray& Color::getCRefRGBA() const
+{
+    return this->m_vRGBA;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Color::setRGBA(const Color::ColorArray&  _vRGBA)
+{
+    this->m_vRGBA = _vRGBA;
+}
+
+//-----------------------------------------------------------------------------
 
 } // end namespace fwData
 
 
-#endif // _FWDATA_COLOR_HPP_
+#endif // __FWDATA_COLOR_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/Composite.hpp b/SrcLib/core/fwData/include/fwData/Composite.hpp
index ba69f2b..a390903 100644
--- a/SrcLib/core/fwData/include/fwData/Composite.hpp
+++ b/SrcLib/core/fwData/include/fwData/Composite.hpp
@@ -1,35 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_COMPOSITE_HPP_
-#define _FWDATA_COMPOSITE_HPP_
+#ifndef __FWDATA_COMPOSITE_HPP__
+#define __FWDATA_COMPOSITE_HPP__
 
-#include <map>
-
-#include <boost/shared_ptr.hpp>
 
 #include "fwData/config.hpp"
-
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-// boost 1.47 issue with FOREACH
-#include <boost/version.hpp>
-#if BOOST_VERSION >= 104700
-#include <boost/foreach.hpp>
+#include <map>
 
 namespace fwData
-{ class Composite; }
-
-inline boost::mpl::true_ * boost_foreach_is_noncopyable( ::fwData::Composite *&, BOOST_FOREACH_TAG_DEFAULT )
-{ return 0; }
-
-#endif //BOOST_VERSION >= 104700
-
+{
+class Composite;
+}
 
 
 fwCampAutoDeclareDataMacro((fwData)(Composite), FWDATA_API);
@@ -39,19 +30,15 @@ namespace fwData
 {
 
 /**
- * @class   Composite
- * @brief   This class defines a composite object.
+ * @brief This class defines a composite object.
  *
  * Composite contains a map of ::fwData::Object.
- *
- * 
- * @date    2007-2009.
  */
 
 class FWDATA_CLASS_API Composite : public Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Composite)(::fwData::Object), (()), ::fwData::factory::New< Composite >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Composite)(::fwData::Object), (()), ::fwData::factory::New< Composite >);
     fwCampMakeFriendDataMacro((fwData)(Composite));
 
     typedef std::map< std::string, ::fwData::Object::sptr > ContainerType;
@@ -87,34 +74,33 @@ public:
     FWDATA_API virtual ~Composite();
 
 
-    IteratorType begin() { return m_attrContainer.begin(); }
-    IteratorType end()   { return m_attrContainer.end(); }
-    ConstIteratorType begin() const { return m_attrContainer.begin(); }
-    ConstIteratorType end()   const { return m_attrContainer.end(); }
+    IteratorType begin();
+    IteratorType end();
+    ConstIteratorType begin() const;
+    ConstIteratorType end()   const;
 
-    ReverseIteratorType rbegin() { return m_attrContainer.rbegin(); }
-    ReverseIteratorType rend()   { return m_attrContainer.rend(); }
-    ConstReverseIteratorType rbegin() const { return m_attrContainer.rbegin(); }
-    ConstReverseIteratorType rend()   const { return m_attrContainer.rend(); }
+    ReverseIteratorType rbegin();
+    ReverseIteratorType rend();
+    ConstReverseIteratorType rbegin() const;
+    ConstReverseIteratorType rend()   const;
 
-    bool empty() const { return m_attrContainer.empty(); }
-    SizeType size() const { return m_attrContainer.size(); }
+    bool empty() const;
+    SizeType size() const;
 
-    mapped_type& operator[] ( KeyType n )
-    {return this->m_attrContainer[n];}
+    mapped_type& operator[] ( KeyType n );
 
-    IteratorType find ( const KeyType& x ) { return m_attrContainer.find(x); }
-    ConstIteratorType find ( const KeyType& x ) const { return m_attrContainer.find(x); }
+    IteratorType find ( const KeyType& x );
+    ConstIteratorType find ( const KeyType& x ) const;
 
-    SizeType count ( const KeyType& x ) const { return m_attrContainer.count(x); }
+    SizeType count ( const KeyType& x ) const;
     /// @}
 
 
-
     /// @brief get/set the map of std::string/::fwData::Object
     /// @{
-    ContainerType &getContainer(){ return m_attrContainer; };
-    fwDataGetSetCRefMacro(Container, ContainerType);
+    ContainerType &getContainer();
+    const ContainerType &getContainer () const;
+    void setContainer (const ContainerType &val);
     /// @}
 
 
@@ -126,36 +112,243 @@ public:
 
     /// Method to initialize a ::fwData::Composite from a std::map< string, X >
     template< class DATATYPE >
-    void setDataContainer( const std::map< std::string, SPTR(DATATYPE) > & map )
-    {
-        this->getContainer().clear();
-        this->getContainer().insert( map.begin(), map.end() );
-    }
+    void setDataContainer( const std::map< std::string, SPTR(DATATYPE) > & map );
 
     /// Method to get a std::map< string, X > from ::fwData::Composite
     template< class DATATYPE >
-    std::map< std::string, SPTR(DATATYPE) > getDataContainer() const
-    {
-        std::map< std::string, SPTR(DATATYPE) > map;
-        SPTR(DATATYPE) castedData;
-        BOOST_FOREACH( ::fwData::Composite::value_type elem, *this )
-        {
-            castedData = ::boost::dynamic_pointer_cast<DATATYPE>( elem.second );
-            OSLM_ASSERT("DynamicCast "<< ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()<<" failed", castedData);
-            map[elem.first] = castedData;
-        }
-
-        return map;
-    }
+    std::map< std::string, SPTR(DATATYPE) > getDataContainer() const;
+
+    /**
+     * @brief Returns object in composite associated with the key.
+     *  If no such object exists, a null object is returned.
+     *
+     *  @param key the key of the object to find
+     *
+     *  @return requested object in composite associated with the key
+     */
+    template< class DATATYPE >
+    SPTR(DATATYPE) at(const std::string& key);
+
+    /**
+     * @brief Returns object in composite associated with the key.
+     *  If no such object exists, a null object is returned.
+     *
+     *  @param key the key of the object to find
+     *
+     *  @return requested object in composite associated with the key
+     */
+    template< class DATATYPE >
+    CSPTR(DATATYPE) at(const std::string& key) const;
+
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when objects are added
+    typedef ::fwCom::Signal< void (ContainerType) > AddedObjectsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_ADDED_OBJECTS_SIG;
+
+    /// Type of signal when objects are changed (newObjects, oldObjects)
+    typedef ::fwCom::Signal< void (ContainerType, ContainerType) > ChangedObjectsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_CHANGED_OBJECTS_SIG;
+
+    /// Type of signal when objects are removed
+    typedef ::fwCom::Signal< void (ContainerType) > RemovedObjectsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_REMOVED_OBJECTS_SIG;
+    /**
+     * @}
+     */
 
 protected:
-    ContainerType m_attrContainer;
+    ContainerType m_container;
 };
 
+//-----------------------------------------------------------------------------
 
-} //namespace fwData
+inline Composite::IteratorType Composite::begin()
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::IteratorType Composite::end()
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ConstIteratorType Composite::begin() const
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ConstIteratorType Composite::end() const
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ReverseIteratorType Composite::rbegin()
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ReverseIteratorType Composite::rend()
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ConstReverseIteratorType Composite::rbegin() const
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ConstReverseIteratorType Composite::rend() const
+{
+    return m_container.rend();
+}
 
+//-----------------------------------------------------------------------------
 
+inline bool Composite::empty() const
+{
+    return m_container.empty();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::SizeType Composite::size() const
+{
+    return m_container.size();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::mapped_type &Composite::operator[](Composite::KeyType n)
+{
+    return this->m_container[n];
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::IteratorType Composite::find(const Composite::KeyType &x)
+{
+    return m_container.find(x);
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ConstIteratorType Composite::find(const Composite::KeyType &x) const
+{
+    return m_container.find(x);
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::SizeType Composite::count(const Composite::KeyType &x) const
+{
+    return m_container.count(x);
+}
+
+//-----------------------------------------------------------------------------
+
+inline Composite::ContainerType &Composite::getContainer()
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Composite::ContainerType &Composite::getContainer () const
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Composite::setContainer (const Composite::ContainerType &val)
+{
+    m_container = val;
+}
+
+//-----------------------------------------------------------------------------
+
+template< class DATATYPE >
+inline void Composite::setDataContainer( const std::map< std::string, SPTR(DATATYPE) > & map )
+{
+    this->getContainer().clear();
+    this->getContainer().insert( map.begin(), map.end() );
+}
+
+//-----------------------------------------------------------------------------
+
+template< class DATATYPE >
+inline std::map< std::string, SPTR(DATATYPE) > Composite::getDataContainer() const
+{
+    std::map< std::string, SPTR(DATATYPE) > map;
+    SPTR(DATATYPE) castData;
+    for( ::fwData::Composite::value_type elem : *this )
+    {
+        castData = std::dynamic_pointer_cast<DATATYPE>( elem.second );
+        OSLM_ASSERT("DynamicCast "<< ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()<<" failed", castData);
+        map[elem.first] = castData;
+    }
+
+    return map;
+}
+
+//-----------------------------------------------------------------------------
+
+template< class DATATYPE >
+SPTR(DATATYPE) Composite::at(const std::string& key)
+{
+    SPTR(DATATYPE) castData;
+    ::fwData::Composite::iterator iter = this->find(key);
+    if(iter != this->end())
+    {
+        castData = std::dynamic_pointer_cast<DATATYPE>(iter->second);
+        SLM_TRACE_IF("DynamicCast "+ ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()+" failed", !castData);
+    }
+    else
+    {
+        SLM_TRACE( "Object '" + key + "' not found.");
+    }
+    return castData;
+}
+
+//-----------------------------------------------------------------------------
+
+template< class DATATYPE >
+CSPTR(DATATYPE) Composite::at(const std::string& key) const
+{
+    CSPTR(DATATYPE) castData;
+    ::fwData::Composite::const_iterator iter = this->find(key);
+    if(iter != this->end())
+    {
+        castData = std::dynamic_pointer_cast<DATATYPE>(iter->second);
+        SLM_TRACE_IF("DynamicCast "+ ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()+" failed", !castData);
+    }
+    else
+    {
+        SLM_TRACE( "Object '" + key + "' not found.");
+    }
+    return castData;
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwData
 
-#endif /* _FWDATA_COMPOSITE_HPP_ */
+#endif /* __FWDATA_COMPOSITE_HPP__ */
 
diff --git a/SrcLib/core/fwData/include/fwData/Edge.hpp b/SrcLib/core/fwData/include/fwData/Edge.hpp
index 95bf229..a5df72a 100644
--- a/SrcLib/core/fwData/include/fwData/Edge.hpp
+++ b/SrcLib/core/fwData/include/fwData/Edge.hpp
@@ -1,41 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_EDGE_HPP_
-#define _FWDATA_EDGE_HPP_
-
-#include <utility>
+#ifndef __FWDATA_EDGE_HPP__
+#define __FWDATA_EDGE_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <utility>
+
 fwCampAutoDeclareDataMacro((fwData)(Edge), FWDATA_API);
 
 namespace fwData
 {
 /**
- * @class   Edge
- * @brief   This class defines an edge object.
+ * @brief This class defines an edge object.
  *
- * An edge is reprensented by a to identifier ("from" and "to") and a nature.
- *
- * 
- * @date    2007-2009.
+ * An edge is represented by a to identifier ("from" and "to") and a nature.
  */
 class FWDATA_CLASS_API Edge : public ::fwData::Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Edge)(::fwData::Object), (()), ::fwData::factory::New< Edge >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Edge)(::fwData::Object), (()), ::fwData::factory::New< Edge >);
     fwCampMakeFriendDataMacro((fwData)(Edge));
 
     FWDATA_API static std::string NATURE_FLOW;
     FWDATA_API static std::string NATURE_DATA;
 
-
     /**
      * @brief Constructor
      * @param key Private construction key
@@ -71,7 +66,7 @@ public:
     /// @brief return "to" identifier
     FWDATA_API std::string getToPortID() const;
 
-    /// @brief return "to or from" identifier accroding to upStream
+    /// @brief return "to or from" identifier according to upStream
     FWDATA_API std::string getPortID(bool upStream) const;
 
     /// @brief Set edge nature ("FLOW" , "FWDATA")
@@ -80,7 +75,7 @@ public:
     /// @brief Get edge nature ("FLOW" , "FWDATA")
     FWDATA_API const std::string &getNature() const;
 
-protected :
+protected:
 
     std::string m_fromPortIdentifier; // "ID_SIZEX" , ...
     std::string m_toPortIdentifier; // "ID_SIZEX" , ...
@@ -89,4 +84,5 @@ protected :
 
 } // namespace fwData
 
-#endif // _FWDATA_EDGE_HPP_
+#endif // __FWDATA_EDGE_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Exception.hpp b/SrcLib/core/fwData/include/fwData/Exception.hpp
index 3fc8308..7030e93 100644
--- a/SrcLib/core/fwData/include/fwData/Exception.hpp
+++ b/SrcLib/core/fwData/include/fwData/Exception.hpp
@@ -1,29 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_EXCEPTION_HPP_
-#define _FWDATA_EXCEPTION_HPP_
-
-#include <exception>
-#include <string>
+#ifndef __FWDATA_EXCEPTION_HPP__
+#define __FWDATA_EXCEPTION_HPP__
 
 #include "fwCore/Exception.hpp"
 #include "fwData/config.hpp"
 
+#include <exception>
+#include <string>
+
 namespace fwData
 {
 
 /**
- * @brief   Implements data exception class
- * @class   Exception
- * 
- * @date    2007-2009.
+ * @brief   Implements data exception class.
  */
-struct FWDATA_CLASS_API Exception : public ::fwCore::Exception
+class FWDATA_CLASS_API Exception : public ::fwCore::Exception
 {
+public:
 
     /**
      * @brief       Constructor
@@ -36,10 +34,9 @@ struct FWDATA_CLASS_API Exception : public ::fwCore::Exception
      * @brief   Destructor : do nothing.
      */
     FWDATA_API ~Exception() throw();
-
-
 };
 
 } // namespace fwData
 
-#endif // _FWDATA_EXCEPTION_HPP_
+#endif // __FWDATA_EXCEPTION_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Float.hpp b/SrcLib/core/fwData/include/fwData/Float.hpp
index cfc6956..102aeb3 100644
--- a/SrcLib/core/fwData/include/fwData/Float.hpp
+++ b/SrcLib/core/fwData/include/fwData/Float.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_FLOAT_HPP_
-#define _FWDATA_FLOAT_HPP_
+#ifndef __FWDATA_FLOAT_HPP__
+#define __FWDATA_FLOAT_HPP__
 
 #include "fwData/GenericField.hpp"
 
@@ -20,18 +20,15 @@ namespace fwData
 {
 
 /**
- * @class   Float
- * @brief   This class contains an float value
+ * @brief   This class contains an float value.
  *
  * Float object is essentially used as a field in other objects.
- *
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Float : public GenericField< float >
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Float)(::fwData::Object),( ((const float)(0.0f)) ), GenericFieldFactory< Float >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Float)(::fwData::Object),( ((const float)(0.0f)) ),
+                                            GenericFieldFactory< Float >);
 
 
     fwCampMakeFriendDataMacro((fwData)(Float));
@@ -61,4 +58,4 @@ protected:
 
 } // namespace fwData
 
-#endif // _FWDATA_FLOAT_HPP_
+#endif // __FWDATA_FLOAT_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/GenericField.hpp b/SrcLib/core/fwData/include/fwData/GenericField.hpp
index 43594b6..ac83fa4 100644
--- a/SrcLib/core/fwData/include/fwData/GenericField.hpp
+++ b/SrcLib/core/fwData/include/fwData/GenericField.hpp
@@ -1,35 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_GENERICFIELD_HPP_
-#define _FWDATA_GENERICFIELD_HPP_
-
-#include <string>
-
-#include <boost/lexical_cast.hpp>
-
-#include <fwCore/base.hpp>
+#ifndef __FWDATA_GENERICFIELD_HPP__
+#define __FWDATA_GENERICFIELD_HPP__
 
 #include "fwData/factory/new.hpp"
 #include "fwData/config.hpp"
 #include "fwData/GenericFieldBase.hpp"
 
+#include <fwCore/base.hpp>
+
+#include <boost/lexical_cast.hpp>
+
+#include <string>
+
 namespace fwData
 {
 
 /**
- * @class   GenericField
  * @brief   Generic "field" object template.
  *
  * A generic object contains a value.
  *
  * @see     ::fwData::Float, ::fwData::Boolean, ::fwData::Integer
- *
- * 
- * @date    2007-2009.
  */
 template< typename T >
 class FWDATA_CLASS_API GenericField : public GenericFieldBase
@@ -41,70 +37,82 @@ public:
     typedef T ValueType;
 
     /// @brief Get the value (mutable version).
-    T& value() throw() { return m_value; }
+    T& value() throw()
+    {
+        return m_value;
+    }
 
     /// @brief Get the value (constant version).
-    const T& value() const throw() { return m_value; }
+    const T& value() const throw()
+    {
+        return m_value;
+    }
 
     /// @brief set the value
-    void setValue(const T &newValue) throw() { m_value = newValue; }
+    void setValue(const T &newValue) throw()
+    {
+        m_value = newValue;
+    }
 
     /// @brief get the value
-    T getValue() const throw() { return m_value; }
+    T getValue() const throw()
+    {
+        return m_value;
+    }
 
     /// @brief Conversion to a scalar type.
     operator T() throw() { return m_value; }
 
     bool operator== (const GenericFieldBase &lf)
     {
-        const ::fwData::GenericField<T> &gField =  dynamic_cast< const ::fwData::GenericField<T> & >(lf);
+        const ::fwData::GenericField<T> &gField = dynamic_cast< const ::fwData::GenericField<T> & >(lf);
         SLM_ASSERT("GenericField must have same ValueType.", &gField );
         return ( this->m_value == gField.value() );
     }
 
     bool operator!= (const GenericFieldBase &lf )
     {
-        const ::fwData::GenericField<T> &gField =  dynamic_cast< const ::fwData::GenericField<T> & >(lf);
+        const ::fwData::GenericField<T> &gField = dynamic_cast< const ::fwData::GenericField<T> & >(lf);
         SLM_ASSERT("GenericField must have same ValueType.", &gField);
         return ( this->m_value != gField.value() );
     }
 
     bool operator< (const GenericFieldBase &lf )
     {
-        const ::fwData::GenericField<T> &gField =  dynamic_cast< const ::fwData::GenericField<T> & >(lf);
+        const ::fwData::GenericField<T> &gField = dynamic_cast< const ::fwData::GenericField<T> & >(lf);
         SLM_ASSERT("GenericField must have same ValueType.", &gField);
         return ( this->m_value < gField.value() );
     }
 
     bool operator> (const GenericFieldBase &lf)
     {
-        const ::fwData::GenericField<T> &gField =  dynamic_cast< const ::fwData::GenericField<T> & >(lf);
+        const ::fwData::GenericField<T> &gField = dynamic_cast< const ::fwData::GenericField<T> & >(lf);
         SLM_ASSERT("GenericField must have same ValueType.", &gField);
         return ( this->m_value > gField.value() );
     }
 
     bool operator<= (const GenericFieldBase &lf)
     {
-        const ::fwData::GenericField<T> &gField =  dynamic_cast< const ::fwData::GenericField<T> & >(lf);
+        const ::fwData::GenericField<T> &gField = dynamic_cast< const ::fwData::GenericField<T> & >(lf);
         SLM_ASSERT("GenericField must have same ValueType.", &gField);
         return ( this->m_value <= gField.value() );
     }
 
     bool operator>= (const GenericFieldBase &lf )
     {
-        const ::fwData::GenericField<T> &gField =  dynamic_cast< const ::fwData::GenericField<T> & >(lf);
+        const ::fwData::GenericField<T> &gField = dynamic_cast< const ::fwData::GenericField<T> & >(lf);
         SLM_ASSERT("GenericField must have same ValueType.", &gField);
         return ( this->m_value >= gField.value() );
     }
 
     virtual ::std::string toString() const
     {
-       return ::boost::lexical_cast< ::std::string >(this->m_value);
+        return ::boost::lexical_cast< ::std::string >(this->m_value);
     }
 
     virtual void fromString(const ::std::string &_value)
     {
-       this->m_value = ::boost::lexical_cast< T >(_value);
+        this->m_value = ::boost::lexical_cast< T >(_value);
     }
 
 protected:
@@ -119,14 +127,17 @@ protected:
      * @brief Constructor.
      * @param[in] value The initial value.
      */
-    GenericField( const T value = T( ) ) throw()
-    :   m_value( value )
-    {}
+    GenericField( const T value = T( ) ) throw() :
+        m_value( value )
+    {
+    }
 
     /**
      * @brief Destructor.
      */
-    virtual ~GenericField() throw() {}
+    virtual ~GenericField() throw()
+    {
+    }
 
     virtual std::ostream & toOStream( std::ostream &_os ) const
     {
@@ -143,7 +154,7 @@ template< typename GT >
 typename GT::sptr GenericField<T>::GenericFieldFactory(const typename GT::ValueType value)
 {
     typename GT::sptr field;
-    field = ::fwData::factory::New< GT >();
+    field          = ::fwData::factory::New< GT >();
     field->value() = value;
     return field;
 }
@@ -152,7 +163,7 @@ template< typename T >
 typename GenericField<T>::sptr GenericField<T>::GenericFieldFactory(const T value)
 {
     typename GenericField<T>::sptr field;
-    field = GenericFieldFactory< GenericField<T> >(value);
+    field          = GenericFieldFactory< GenericField<T> >(value);
     field->value() = value;
     return field;
 }
@@ -160,4 +171,5 @@ typename GenericField<T>::sptr GenericField<T>::GenericFieldFactory(const T valu
 
 } // namespace fwData
 
-#endif // _FWDATA_GENERICFIELD_HPP_
+#endif // __FWDATA_GENERICFIELD_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/GenericFieldBase.hpp b/SrcLib/core/fwData/include/fwData/GenericFieldBase.hpp
index 924523c..ee6c352 100644
--- a/SrcLib/core/fwData/include/fwData/GenericFieldBase.hpp
+++ b/SrcLib/core/fwData/include/fwData/GenericFieldBase.hpp
@@ -1,29 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_GENERICFIELDBASE_HPP_
-#define _FWDATA_GENERICFIELDBASE_HPP_
+#ifndef __FWDATA_GENERICFIELDBASE_HPP__
+#define __FWDATA_GENERICFIELDBASE_HPP__
 
-#include <string>
-#include <ostream>
+#include "fwData/config.hpp"
+#include "fwData/Object.hpp"
 
 #include <fwCore/base.hpp>
 
-
-#include "fwData/config.hpp"
-#include "fwData/Object.hpp"
+#include <string>
+#include <ostream>
 
 namespace fwData
 {
 
 /**
- * @class   GenericFieldBase
- *
- * 
- * @date    2009-2010.
+ * @brief GenericFieldBase define common operation on simple data.
  */
 class FWDATA_CLASS_API GenericFieldBase : public Object
 {
@@ -39,14 +35,14 @@ public:
     FWDATA_API virtual bool operator>= (const GenericFieldBase &lf ) = 0;
     FWDATA_API friend std::ostream& operator<<( std::ostream &, const GenericFieldBase & );
 
-    FWDATA_API virtual ::std::string toString() const = 0;
+    FWDATA_API virtual ::std::string toString() const               = 0;
     FWDATA_API virtual void fromString(const ::std::string &_value) = 0;
 
 
-private :
+private:
     FWDATA_API virtual std::ostream & toOStream( std::ostream &_os ) const = 0;
 };
 
 } // namespace fwData
 
-#endif // _FWDATA_GENERICFIELDBASE_HPP_
+#endif // __FWDATA_GENERICFIELDBASE_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/Graph.hpp b/SrcLib/core/fwData/include/fwData/Graph.hpp
index adf4a66..ed6480f 100644
--- a/SrcLib/core/fwData/include/fwData/Graph.hpp
+++ b/SrcLib/core/fwData/include/fwData/Graph.hpp
@@ -1,14 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_GRAPH_HPP_
-#define _FWDATA_GRAPH_HPP_
-
-#include <map>
-#include <set>
+#ifndef __FWDATA_GRAPH_HPP__
+#define __FWDATA_GRAPH_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
@@ -16,26 +13,25 @@
 #include "fwData/Edge.hpp"
 #include "fwData/Node.hpp"
 
+#include <map>
+#include <set>
 
 fwCampAutoDeclareDataMacro((fwData)(Graph), FWDATA_API);
 
-namespace fwData {
+namespace fwData
+{
 /**
- * @class   Graph
  * @brief   This class defines a graph object.
  *
  * A graph is represented by connections between Edge and Node.
- *
+
  * @see     ::fwData::Edge, ::fwData::Node
- *
- *
- * @date    2007-2009.
  */
-
-class FWDATA_CLASS_API Graph : public ::fwData::Object {
+class FWDATA_CLASS_API Graph : public ::fwData::Object
+{
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Graph)(::fwData::Object), (()), ::fwData::factory::New< Graph >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Graph)(::fwData::Object), (()), ::fwData::factory::New< Graph >);
 
     fwCampMakeFriendDataMacro((fwData)(Graph));
 
@@ -74,7 +70,7 @@ public:
     /**
      * @brief remove a node
      *
-     * @return true on sucess
+     * @return true on success
      */
     FWDATA_API bool removeNode( Node::csptr _node);
 
@@ -117,7 +113,7 @@ public:
                                 Node::csptr _nodeDestination,
                                 std::string _nodeDestinationInputPortID,
                                 std::string _EdgeNature
-                             );
+                                );
 
     /**
      * @brief remove an edge
@@ -178,8 +174,8 @@ public:
      * @return the vector of all edges with correct nature and portID where _node is a source/destination node
      */
     FWDATA_API std::vector< Edge::sptr > getEdges(const Node::csptr &_node, bool _upStream,
-                                                  const std::string &_nature="",
-                                                  const std::string &_portID="");
+                                                  const std::string &_nature = "",
+                                                  const std::string &_portID = "");
 
     /**
      * @brief Get a vector of nodes
@@ -191,9 +187,9 @@ public:
      *
      * @return the vector of all nodes associated with _node
      */
-    FWDATA_API  std::vector< ::fwData::Node::sptr > getNodes( const ::fwData::Node::csptr &node, bool upStream,
-                                                              const std::string &nature="",
-                                                              const std::string &portID="" );
+    FWDATA_API std::vector< ::fwData::Node::sptr > getNodes( const ::fwData::Node::csptr &node, bool upStream,
+                                                             const std::string &nature = "",
+                                                             const std::string &portID = "" );
 
     /**
      * @return Number of nodes
@@ -219,7 +215,7 @@ public:
     /// Updated signal key
     FWDATA_API static const ::fwCom::Signals::SignalKeyType s_UPDATED_SIG;
 
-protected :
+protected:
 
     NodeContainer m_nodes;
     ConnectionContainer m_connections;
@@ -228,6 +224,7 @@ protected :
     UpdatedSignalType::sptr m_sigUpdated;
 };
 
-}
+} // namespace fwData
+
+#endif // __FWDATA_GRAPH_HPP__
 
-#endif // _FWDATA_GRAPH_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/Histogram.hpp b/SrcLib/core/fwData/include/fwData/Histogram.hpp
index 7163e4e..e542574 100644
--- a/SrcLib/core/fwData/include/fwData/Histogram.hpp
+++ b/SrcLib/core/fwData/include/fwData/Histogram.hpp
@@ -1,18 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_HISTOGRAM_HPP_
-#define _FWDATA_HISTOGRAM_HPP_
+#ifndef __FWDATA_HISTOGRAM_HPP__
+#define __FWDATA_HISTOGRAM_HPP__
 
 #include "fwData/factory/new.hpp"
 #include "fwData/Object.hpp"
 
 #include "fwData/config.hpp"
 
-#include <boost/shared_ptr.hpp>
 
 fwCampAutoDeclareDataMacro((fwData)(Histogram), FWDATA_API);
 
@@ -21,11 +20,7 @@ namespace fwData
 
 
 /**
- * @class   Histogram
- * @brief   This class defines the histogram of an image.
- *
- * 
- * @date    2011.
+ * @brief This class defines the histogram of an image.
  */
 class FWDATA_CLASS_API Histogram : public Object
 {
@@ -91,35 +86,176 @@ public:
      */
     FWDATA_API bool isInRange( float _pixel );
 
-    fwGettersSettersDocMacro(BinsWidth, binsWidth, float, bins width);
-    fwGettersSettersDocMacro(Values, values, fwHistogramValues, histogram values);
-    fwGettersSettersDocMacro(MinValue, minValue, float, minimum value within the histogram);
-    fwGettersSettersDocMacro(MaxValue, maxValue, float, maximum value within the histogram);
+    /** @name bins width accessor
+     *  @brief Get/Set bins width
+     *  @{
+     */
+    const float  getBinsWidth() const;
+    float & getRefBinsWidth();
+    const float& getCRefBinsWidth() const;
+    void setBinsWidth(float _binsWidth);
+    /// @}
 
-protected:
+    /** @name histogram values accessor
+     *  @brief Get/Set histogram values
+     *  @{
+     */
+    const fwHistogramValues getValues() const;
+    fwHistogramValues& getRefValues();
+    const fwHistogramValues & getCRefValues() const;
+    void setCRefValues(const fwHistogramValues & _values);
+    /// @}
 
-    /**
-     * @brief Histogram values.
+    /** @name minimum value within the histogram
+     *  @brief Get/Set minimum value within the histogram
+     *  @{
      */
-    fwHistogramValues m_values;
+    const float getMinValue () const;
+    float& getRefMinValue ();
+    const float& getCRefMinValue () const;
+    void setMinValue (float _minValue);
+    /// @}
 
-    /**
-     * @brief The pixel width of the bins (a default value is set to 1).
+    /** @name maximum value within the histogram
+     *  @brief Get/Set maximum value within the histogram
+     *  @{
      */
+    const float getMaxValue() const;
+    float& getRefMaxValue();
+    const float& getCRefMaxValue() const;
+    void setMaxValue(float _maxValue);
+    /// @}
+
+protected:
+
+    /// Histogram values.
+    fwHistogramValues m_values;
+
+    /// The pixel width of the bins (a default value is set to 1).
     float m_binsWidth;
 
-    /**
-     * @brief The minimum pixel value within the histogram (a default value is set to 0).
-     */
+    /// The minimum pixel value within the histogram (a default value is set to 0).
     float m_minValue;
 
-    /**
-     * @brief The maximum pixel value within the histogram (a default value is set to 100).
-     */
+    /// The maximum pixel value within the histogram (a default value is set to 100).
     float m_maxValue;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const float Histogram::getBinsWidth() const
+{
+    return m_binsWidth;
+}
+
+//-----------------------------------------------------------------------------
+
+inline float & Histogram::getRefBinsWidth()
+{
+    return this->m_binsWidth;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const float& Histogram::getCRefBinsWidth() const
+{
+    return this->m_binsWidth;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Histogram::setBinsWidth(float _binsWidth)
+{
+    this->m_binsWidth = _binsWidth;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Histogram::fwHistogramValues Histogram::getValues() const
+{
+    return m_values;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Histogram::fwHistogramValues& Histogram::getRefValues()
+{
+    return this->m_values;
 }
 
-#endif // _FWDATA_HISTOGRAM_HPP_
+//-----------------------------------------------------------------------------
+
+inline const Histogram::fwHistogramValues & Histogram::getCRefValues() const
+{
+    return this->m_values;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Histogram::setCRefValues(const Histogram::fwHistogramValues & _values)
+{
+    this->m_values = _values;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const float Histogram::getMinValue () const
+{
+    return m_minValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline float& Histogram::getRefMinValue ()
+{
+    return this->m_minValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const float& Histogram::getCRefMinValue () const
+{
+    return this->m_minValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Histogram::setMinValue (float _minValue)
+{
+    this->m_minValue = _minValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const float Histogram::getMaxValue() const
+{
+    return m_maxValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline float& Histogram::getRefMaxValue()
+{
+    return this->m_maxValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const float& Histogram::getCRefMaxValue() const
+{
+    return this->m_maxValue;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Histogram::setMaxValue(float _maxValue)
+{
+    this->m_maxValue = _maxValue;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace fwData
+
+#endif // __FWDATA_HISTOGRAM_HPP__
 
diff --git a/SrcLib/core/fwData/include/fwData/Image.hpp b/SrcLib/core/fwData/include/fwData/Image.hpp
index dda7982..411d87b 100644
--- a/SrcLib/core/fwData/include/fwData/Image.hpp
+++ b/SrcLib/core/fwData/include/fwData/Image.hpp
@@ -1,46 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_IMAGE_HPP_
-#define _FWDATA_IMAGE_HPP_
+#ifndef __FWDATA_IMAGE_HPP__
+#define __FWDATA_IMAGE_HPP__
 
-#include <vector>
+#include "fwData/Array.hpp"
+#include "fwData/factory/new.hpp"
+#include "fwData/Object.hpp"
 
-#include <boost/shared_array.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/cstdint.hpp>
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
 #include <fwTools/Type.hpp>
 #include <fwTools/DynamicType.hpp>
 
-#include "fwData/Object.hpp"
-#include "fwData/Array.hpp"
-#include "fwData/factory/new.hpp"
-
-fwCampAutoDeclareDataMacro((fwData)(Image), FWDATA_API);
-
+#include <boost/shared_array.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/cstdint.hpp>
 
+#include <vector>
 
+fwCampAutoDeclareDataMacro((fwData)(Image), FWDATA_API);
 
 namespace fwData
 {
 
+class Point;
+class PointList;
+
 /**
- * @class   Image
- * @brief   This class defines an image
+ * @brief This class defines an image
  *
  * An image contains a buffer and is defined by some parameters (size, spacing, pixel type, ...)
- *
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Image : public Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Image)(::fwData::Object), (()), ::fwData::factory::New< Image > ) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Image)(::fwData::Object), (()), ::fwData::factory::New< Image > );
     fwCoreAllowSharedFromThis();
     fwCampMakeFriendDataMacro((fwData)(Image));
 
@@ -94,37 +93,44 @@ public:
 
     FWDATA_API const SpacingType &getSpacing() const;
     FWDATA_API void setSpacing(const SpacingType &spacing);
-    // @}
+    /// @}
 
     /** @{
-     * @brief get/set image origin
+     *  @brief get/set image origin
      */
     FWDATA_API const OriginType &getOrigin() const;
     FWDATA_API void setOrigin(const OriginType &origin);
-    // @}
+    /// @}
 
     /** @{
      * @brief get/set image size
      */
     FWDATA_API const SizeType &getSize() const;
     FWDATA_API void setSize(const SizeType &size);
-    // @}
+    /// @}
 
-    /**
-     * @brief Get/set prefered window center
+    /** @{
+     *  @brief Get/set preferred window center
      */
-    fwDataGetSetMacro(WindowCenter, double);
+    double  getWindowCenter () const;
 
-    /**
-     * @brief Get/set prefered window width
-     */
-    fwDataGetSetMacro(WindowWidth , double);
+    void setWindowCenter (double val);
+    /// @}
 
+    /** @{
+     *  @brief Get/set preferred window width
+     */
+    double  getWindowWidth () const;
+    void setWindowWidth (double val);
+    /// @}
 
-    /**
-     * @brief Get/set prefered window center
+    /** @{
+     *  @brief Get/set preferred window center
      */
-    fwDataGetSetMacro(NumberOfComponents, size_t);
+    size_t  getNumberOfComponents() const;
+
+    void setNumberOfComponents(size_t val);
+    /// @}
 
     /**
      * @brief set data array
@@ -144,7 +150,7 @@ public:
     FWDATA_API void setType(::fwTools::Type type);
     FWDATA_API void setType(const std::string &type);
     FWDATA_API ::fwTools::Type getType() const;
-    // @}
+    /// @}
 
     /// get a DynamicType for retrocompatibility
     FWDATA_API ::fwTools::DynamicType getPixelType() const;
@@ -163,16 +169,68 @@ public:
     FWDATA_API size_t allocate(SizeType::value_type x, SizeType::value_type y,  SizeType::value_type z,
                                const ::fwTools::Type &type, size_t numberOfComponents = 1) throw(::fwData::Exception);
     FWDATA_API size_t allocate(const SizeType &size, const ::fwTools::Type &type, size_t numberOfComponents = 1)
-        throw(::fwData::Exception);
-    // @}
+    throw(::fwData::Exception);
+    /// @}
 
 
-     /// @brief return image size in bytes
+    /// @brief return image size in bytes
     FWDATA_API size_t getSizeInBytes() const;
-     /// @brief return allocated image size in bytes
-    size_t getAllocatedSizeInBytes() const;
+    /// @brief return allocated image size in bytes
+    FWDATA_API size_t getAllocatedSizeInBytes() const;
+
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when image's buffer is added
+    typedef ::fwCom::Signal< void () > BufferModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_BUFFER_MODIFIED_SIG;
 
-protected :
+    /// Type of signal when a landmark is added
+    typedef ::fwCom::Signal< void (SPTR(::fwData::Point)) > LandmarkAddedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_LANDMARK_ADDED_SIG;
+
+    /// Type of signal when a landmark is removed
+    typedef ::fwCom::Signal< void (SPTR(::fwData::Point)) > LandmarkRemovedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_LANDMARK_REMOVED_SIG;
+
+    /// Type of signal when a distance is added
+    typedef ::fwCom::Signal< void (bool) > LandmarkDisplayedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_LANDMARK_DISPLAYED_SIG;
+
+    /// Type of signal when a distance is added
+    typedef ::fwCom::Signal< void (bool) > DistanceDisplayedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_DISTANCE_DISPLAYED_SIG;
+
+    /// Type of signal when a distance is added
+    typedef ::fwCom::Signal< void (SPTR(::fwData::PointList)) > DistanceAddedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_DISTANCE_ADDED_SIG;
+
+    /// Type of signal when a distance is removed
+    typedef ::fwCom::Signal< void (SPTR(::fwData::PointList)) > DistanceRemovedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_DISTANCE_REMOVED_SIG;
+
+    /// Type of signal when slice index is modified (axial index, frontal index, sagittal index)
+    typedef ::fwCom::Signal< void (int, int, int) > SliceIndexModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_SLICE_INDEX_MODIFIED_SIG;
+
+    /// Type of signal when slice type is modified (from slice type, to slice type)
+    typedef ::fwCom::Signal< void (int, int) > SliceTypeModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_SLICE_TYPE_MODIFIED_SIG;
+
+    /// Type of signal when visibility is modified
+    typedef ::fwCom::Signal< void (bool) > VisibilityModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_VISIBILITY_MODIFIED_SIG;
+
+    /// Type of signal when visibility is modified
+    typedef ::fwCom::Signal< void () > TransparencyModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_TRANSPARENCY_MODIFIED_SIG;
+
+    /**
+     * @}
+     */
+
+protected:
 
     //! Size of the image (in terms of points)
     SizeType m_size;
@@ -188,19 +246,62 @@ protected :
 
     //! Preferred window center/with
     ///@{
-    double m_attrWindowCenter;
-    double m_attrWindowWidth;
+    double m_windowCenter;
+    double m_windowWidth;
     ///@}
 
     //! Number of components
-    size_t m_attrNumberOfComponents;
+    size_t m_numberOfComponents;
 
     //! image buffer
     ::fwData::Array::sptr m_dataArray;
 };
 
+//-----------------------------------------------------------------------------
+
+inline double Image::getWindowCenter () const
+{
+    return m_windowCenter;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Image::setWindowCenter (double val)
+{
+    m_windowCenter = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline double Image::getWindowWidth () const
+{
+    return m_windowWidth;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Image::setWindowWidth (double val)
+{
+    m_windowWidth = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline size_t Image::getNumberOfComponents() const
+{
+    return m_numberOfComponents;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Image::setNumberOfComponents(size_t val)
+{
+    m_numberOfComponents = val;
+}
+
+//-----------------------------------------------------------------------------
 
 } // namespace fwData
 
-#endif //_FWDATA_IMAGE_HPP_
+#endif // __FWDATA_IMAGE_HPP__
 
diff --git a/SrcLib/core/fwData/include/fwData/Integer.hpp b/SrcLib/core/fwData/include/fwData/Integer.hpp
index 74e99e4..493b53e 100644
--- a/SrcLib/core/fwData/include/fwData/Integer.hpp
+++ b/SrcLib/core/fwData/include/fwData/Integer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_INTEGER_HPP_
-#define _FWDATA_INTEGER_HPP_
+#ifndef __FWDATA_INTEGER_HPP__
+#define __FWDATA_INTEGER_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/GenericField.hpp"
@@ -18,18 +18,14 @@ namespace fwData
 {
 
 /**
- * @class   Integer
- * @brief   This class contains an integer value
- *
+ * @brief   This class contains an integer value.
  * Integer object is essentially used as a field in other objects.
- *
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Integer : public GenericField< int >
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Integer)(::fwData::Object),( ((const int)(0)) ), GenericFieldFactory< Integer >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Integer)(::fwData::Object),( ((const int)(0)) ),
+                                            GenericFieldFactory< Integer >);
     fwCampMakeFriendDataMacro((fwData)(Integer));
 
     /**
@@ -52,6 +48,5 @@ public:
 
 } // namespace fwData
 
+#endif // __FWDATA_INTEGER_HPP__
 
-
-#endif // _FWDATA_INTEGER_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/Line.hpp b/SrcLib/core/fwData/include/fwData/Line.hpp
index 2f54bf6..e9d957a 100644
--- a/SrcLib/core/fwData/include/fwData/Line.hpp
+++ b/SrcLib/core/fwData/include/fwData/Line.hpp
@@ -1,37 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_LINE_HPP_
-#define _FWDATA_LINE_HPP_
-
-#include <vector>
-#include <utility>
+#ifndef __FWDATA_LINE_HPP__
+#define __FWDATA_LINE_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/Point.hpp"
 
+#include <vector>
+#include <utility>
+
 fwCampAutoDeclareDataMacro((fwData)(Line), FWDATA_API);
 
 namespace fwData
 {
 /**
- * @class   Line
- * @brief   This class defines a Line defined by two points.
- * @see     ::fwData::Line
- * 
- * @date    2007-2009.
+ * @brief This class defines a Line defined by two points.
  */
 class FWDATA_CLASS_API Line : public Object
 {
 
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro( (Line)(::fwData::Object),
-        (()), ::fwData::factory::New< Line >) ;
+                                            (()), ::fwData::factory::New< Line >);
 
 
     /**
@@ -51,20 +47,93 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    FWDATA_API void setValue( ::fwData::Point::sptr _position, ::fwData::Point::sptr  _direction);
+    FWDATA_API void setValue(const ::fwData::Point::sptr& _position, const ::fwData::Point::sptr&  _direction);
 
-    /// Points container
-    fwGettersSettersDocMacro(Position, position, ::fwData::Point::sptr, a point positon);
-    fwGettersSettersDocMacro(Direction, direction, ::fwData::Point::sptr, a point direction);
+    /** @{
+     *  @brief get/set point position
+     */
+    const ::fwData::Point::sptr getPosition() const;
+    ::fwData::Point::sptr& getRefPosition();
+    const ::fwData::Point::sptr& getCRefPosition() const;
+    void setPosition(const ::fwData::Point::sptr& _position);
+    /// @}
+
+    /** @{
+     *  @brief get/set point direction
+     */
+    const ::fwData::Point::sptr getDirection () const;
+    ::fwData::Point::sptr & getRefDirection ();
+    const ::fwData::Point::sptr & getCRefDirection () const;
+    void setDirection (const ::fwData::Point::sptr& _direction);
+    /// @}
 
-protected :
+protected:
 
     //! Points container
     ::fwData::Point::sptr m_position;
     ::fwData::Point::sptr m_direction;
 
-}; // end class Line
+}; // class Line
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::Point::sptr Line::getPosition() const
+{
+    return m_position;
+}
+
+//-----------------------------------------------------------------------------
+
+inline ::fwData::Point::sptr& Line::getRefPosition()
+{
+    return this->m_position;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::Point::sptr& Line::getCRefPosition() const
+{
+    return this->m_position;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Line::setPosition(const ::fwData::Point::sptr& _position)
+{
+    this->m_position = _position;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::Point::sptr Line::getDirection () const
+{
+    return m_direction;
+}
+
+//-----------------------------------------------------------------------------
+
+inline ::fwData::Point::sptr & Line::getRefDirection ()
+{
+    return this->m_direction;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::Point::sptr & Line::getCRefDirection () const
+{
+    return this->m_direction;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Line::setDirection (const ::fwData::Point::sptr& _direction)
+{
+    this->m_direction = _direction;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace fwData
 
-} // end namespace fwData
+#endif // __FWDATA_LINE_HPP__
 
-#endif // _FWDATA_LINE_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/List.hpp b/SrcLib/core/fwData/include/fwData/List.hpp
index 40fe802..73f1175 100644
--- a/SrcLib/core/fwData/include/fwData/List.hpp
+++ b/SrcLib/core/fwData/include/fwData/List.hpp
@@ -1,42 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_LIST_HPP_
-#define _FWDATA_LIST_HPP_
-
-#include <list>
-#include <boost/shared_ptr.hpp>
+#ifndef __FWDATA_LIST_HPP__
+#define __FWDATA_LIST_HPP__
 
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/config.hpp"
 
+#include <list>
+
 fwCampAutoDeclareDataMacro((fwData)(List), FWDATA_API);
 
 namespace fwData
 {
 
-
-
 /**
- * @class   List
- * @brief   This class defines a list of objects.
+ * @brief This class defines a list of objects.
  *
  * List contains a list of ::fwData::Object.
- *
- * 
- * @date    2007-2009.
  */
-
 class FWDATA_CLASS_API List : public Object
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (List)(::fwData::Object), (()), ::fwData::factory::New< List >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (List)(::fwData::Object), (()), ::fwData::factory::New< List >);
 
 
     fwCampMakeFriendDataMacro((fwData)(List));
@@ -72,29 +64,30 @@ public:
 
     typedef List Container;
 
-    IteratorType begin() { return m_attrContainer.begin(); }
-    IteratorType end()   { return m_attrContainer.end(); }
-    ConstIteratorType begin() const { return m_attrContainer.begin(); }
-    ConstIteratorType end()   const { return m_attrContainer.end(); }
+    IteratorType begin();
+    IteratorType end();
+    ConstIteratorType begin() const;
+    ConstIteratorType end()   const;
 
-    ReverseIteratorType rbegin() { return m_attrContainer.rbegin(); }
-    ReverseIteratorType rend()   { return m_attrContainer.rend(); }
-    ConstReverseIteratorType rbegin() const { return m_attrContainer.rbegin(); }
-    ConstReverseIteratorType rend()   const { return m_attrContainer.rend(); }
+    ReverseIteratorType rbegin();
+    ReverseIteratorType rend();
+    ConstReverseIteratorType rbegin() const;
+    ConstReverseIteratorType rend()   const;
 
-    bool empty() const { return m_attrContainer.empty(); }
-    SizeType size() const { return m_attrContainer.size(); }
+    bool empty() const;
+    SizeType size() const;
 
-    ReferenceType front(){ return m_attrContainer.front(); }
-    ReferenceType back(){ return m_attrContainer.back(); }
-    ConstReferenceType front() const{ return m_attrContainer.front(); }
-    ConstReferenceType back() const{ return m_attrContainer.back(); }
+    ReferenceType front();
+    ReferenceType back();
+    ConstReferenceType front() const;
+    ConstReferenceType back() const;
     /// @}
 
     /// @brief get/set the list of ::fwData::Object
     /// @{
-    ContainerType &getContainer(){ return m_attrContainer; };
-    fwDataGetSetCRefMacro(Container, ContainerType);
+    ContainerType &getContainer();
+    const ContainerType &getContainer () const;
+    void setContainer (const ContainerType &val);
     /// @}
 
 
@@ -106,9 +99,131 @@ public:
 
 protected:
 
-    ContainerType m_attrContainer;
+    ContainerType m_container;
 };
+
+//-----------------------------------------------------------------------------
+
+inline List::IteratorType List::begin()
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::IteratorType List::end()
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ConstIteratorType List::begin() const
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ConstIteratorType List::end() const
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ReverseIteratorType List::rbegin()
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ReverseIteratorType List::rend()
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ConstReverseIteratorType List::rbegin() const
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ConstReverseIteratorType List::rend() const
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool List::empty() const
+{
+    return m_container.empty();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::SizeType List::size() const
+{
+    return m_container.size();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ReferenceType List::front()
+{
+    return m_container.front();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ReferenceType List::back()
+{
+    return m_container.back();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ConstReferenceType List::front() const
+{
+    return m_container.front();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ConstReferenceType List::back() const
+{
+    return m_container.back();
+}
+
+//-----------------------------------------------------------------------------
+
+inline List::ContainerType &List::getContainer()
+{
+    return m_container;
 }
 
-#endif /* _FWDATA_LIST_HPP_ */
+//-----------------------------------------------------------------------------
+
+inline const List::ContainerType &List::getContainer () const
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void List::setContainer (const List::ContainerType &val)
+{                                                                                                                                                                                         \
+    m_container = val;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace fwData
+
+#endif /* __FWDATA_LIST_HPP__ */
 
diff --git a/SrcLib/core/fwData/include/fwData/Material.hpp b/SrcLib/core/fwData/include/fwData/Material.hpp
index cded6b2..834fa71 100644
--- a/SrcLib/core/fwData/include/fwData/Material.hpp
+++ b/SrcLib/core/fwData/include/fwData/Material.hpp
@@ -1,36 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _DATA_MATERIAL_HPP_
-#define _DATA_MATERIAL_HPP_
-
+#ifndef __FWDATA_MATERIAL_HPP__
+#define __FWDATA_MATERIAL_HPP__
 
 #include "fwData/Object.hpp"
 #include "fwData/Color.hpp"
+#include "fwData/Image.hpp"
 #include "fwData/factory/new.hpp"
 
 fwCampAutoDeclareDataMacro((fwData)(Material), FWDATA_API);
 
 namespace fwData
 {
+
 /**
- * @class   Material
- * @brief   This class defines a material. A material is represented by an ambient color and a diffuse color
- * @see     ::fwData::Color
- *
- * 
- * @date    2007-2009.
+ * @brief This class defines a material. A material is represented by an ambient color and a diffuse color.
+ * @see ::fwData::Color
  */
-
 class FWDATA_CLASS_API Material : public Object
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Material)(::fwData::Object), (()), ::fwData::factory::New< Material >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Material)(::fwData::Object), (()), ::fwData::factory::New< Material >);
     fwCampMakeFriendDataMacro((fwData)(Material));
 
 
@@ -50,8 +46,8 @@ public:
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
     /**
-    * @brief returns editable ambient color
-    */
+     * @brief returns editable ambient color
+     */
     FWDATA_API Color::sptr ambient() const;
 
     /**
@@ -59,11 +55,11 @@ public:
      *
      * @param ambient color
      */
-    FWDATA_API void setAmbient(Color::sptr ambient);
+    FWDATA_API void setAmbient(const Color::sptr& ambient);
 
     /**
-    * @brief returns editable diffuse color
-    */
+     * @brief returns editable diffuse color
+     */
     FWDATA_API Color::sptr diffuse() const;
 
     /**
@@ -71,58 +67,301 @@ public:
      *
      * @param diffuse color
      */
-    FWDATA_API void setDiffuse(Color::sptr diffuse);
+    FWDATA_API void setDiffuse(const Color::sptr& diffuse);
+
+    /**
+     * @brief returns editable diffuse texture
+     */
+    FWDATA_API Image::sptr getDiffuseTexture() const;
+
+    /**
+     * @brief Setter for diffuse texture
+     *
+     * @param diffuseTexture texture
+     */
+    FWDATA_API void setDiffuseTexture(const Image::sptr& diffuseTexture);
 
     /**
      * @brief Options
      */
     typedef enum
     {
-        MODE_STANDARD = 1,
-        MODE_NORMALS  = 2,
-    } OPTIONS_MODE;
+        STANDARD      = 1,
+        NORMALS       = 2,
+        CELLS_NORMALS = 3,
+    } OptionsType;
 
     /**
      * @brief Shading models
      */
     typedef enum
     {
-        MODE_FLAT    = 1,
-        MODE_GOURAUD = 2,//MODE_FLAT<<1 -> 10
-        MODE_PHONG   = 4,//MODE_FLAT<<2 -> 100
-    } SHADING_MODE;
+        AMBIENT = 0,
+        FLAT    = 1,
+        GOURAUD = 2, //FLAT<<1 -> 10
+        PHONG   = 4, //FLAT<<2 -> 100
+    } ShadingType;
 
     /**
      * @brief Representation models
      */
     typedef enum
     {
-        MODE_SURFACE   = 1, //1
-        MODE_POINT     = 2, //MODE_SURFACE<<1 -> 10
-        MODE_WIREFRAME = 4, //MODE_SURFACE<<2 -> 100
-        MODE_EDGE      = 5, //MODE_SURFACE|MODE_WIREFRAME -> 101
-    } REPRESENTATION_MODE;
+        SURFACE   = 1, //1
+        POINT     = 2, //SURFACE<<1 -> 10
+        WIREFRAME = 4, //SURFACE<<2 -> 100
+        EDGE      = 5, //SURFACE|WIREFRAME -> 101
+    } RepresentationType;
 
 
+    /**
+     * @brief Texture filtering types
+     */
+    typedef enum
+    {
+        NEAREST,
+        LINEAR,
+    } FilteringType;
+
+    /**
+     * @brief Texture wrapping types
+     */
+    typedef enum
+    {
+        CLAMP,
+        REPEAT,
+    } WrappingType;
 
+    /** @{
+     *  @brief get/set the shading models(flat, gouraud, phong)
+     */
+    const ShadingType getShadingMode() const;
+    ShadingType& getRefShadingMode();
+    const ShadingType & getCRefShadingMode() const;
+    void setShadingMode(ShadingType _shadingMode);
+    /// @}
+
+    /** @{
+     *  @brief get/set the representation models (edge, point, wireframe, surface)
+     */
+    const RepresentationType getRepresentationMode() const;
+    RepresentationType& getRefRepresentationMode();
+    const RepresentationType& getCRefRepresentationMode() const;
+    void setRepresentationMode(RepresentationType _representationMode);
+    /// @}
+
+    /** @{
+     *  @brief get/set the option representation (Standard, normals)
+     */
+    const OptionsType  getOptionsMode () const;
+    OptionsType& getRefOptionsMode ();
+    const OptionsType& getCRefOptionsMode () const;
+    void setOptionsMode (OptionsType _optionsMode);
+    /// @}
+
+    /** @{
+     *  @brief get/set the texture filtering
+     */
+    const FilteringType getDiffuseTextureFiltering() const;
+    FilteringType& getRefDiffuseTextureFiltering();
+    const FilteringType& getCRefDiffuseTextureFiltering() const;
+    void setDiffuseTextureFiltering(FilteringType _diffuseTextureFiltering);
+    /// @}
+
+    /** @{
+     *  @brief get/set the texture wrapping
+     */
+    const WrappingType  getDiffuseTextureWrapping () const;
+    WrappingType & getRefDiffuseTextureWrapping ();
+    const WrappingType & getCRefDiffuseTextureWrapping () const;
+    void setDiffuseTextureWrapping (WrappingType _diffuseTextureWrapping);
+    /// @}
 
-    fwGettersSettersDocMacro(ShadingMode, shadingMode, SHADING_MODE, the shading models(flat, gouraud, phong).);
-    fwGettersSettersDocMacro(RepresentationMode, representationMode, REPRESENTATION_MODE, the representation models(edge, point, wireframe, surface).);
-    fwGettersSettersDocMacro(OptionsMode, optionsMode, OPTIONS_MODE, the option representation (Standard, normals).);
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when a texture is added
+    typedef ::fwCom::Signal< void (::fwData::Image::sptr) > AddedTextureSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_ADDED_TEXTURE_SIG;
 
+    /// Type of signal when a texture is removed
+    typedef ::fwCom::Signal< void (::fwData::Image::sptr) > RemovedTextureSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_REMOVED_TEXTURE_SIG;
+    /**
+     * @}
+     */
 
+protected:
 
-protected :
+    /// Shading mode (flat, Gouraud, Phong)
+    ShadingType m_shadingMode;
 
+    /// Fill mode (flat, wireframe, point)
+    RepresentationType m_representationMode;
 
-    SHADING_MODE m_shadingMode;
-    REPRESENTATION_MODE m_representationMode;
-    OPTIONS_MODE m_optionsMode;
+    /// Options mode (display normals or not)
+    OptionsType m_optionsMode;
 
+    /// Ambient color
     Color::sptr m_ambient;
+
+    /// Diffuse color
     Color::sptr m_diffuse;
+
+    /// Diffuse texture
+    Image::sptr m_diffuseTexture;
+
+    /// Filtering for diffuse texture
+    FilteringType m_diffuseTextureFiltering;
+
+    /// Wrapping for diffuse texture
+    WrappingType m_diffuseTextureWrapping;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const Material::ShadingType Material::getShadingMode() const
+{
+    return m_shadingMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Material::ShadingType& Material::getRefShadingMode()
+{
+    return this->m_shadingMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::ShadingType & Material::getCRefShadingMode() const
+{
+    return this->m_shadingMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Material::setShadingMode(ShadingType _shadingMode)
+{
+    this->m_shadingMode = _shadingMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::RepresentationType Material::getRepresentationMode() const
+{
+    return m_representationMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Material::RepresentationType& Material::getRefRepresentationMode()
+{
+    return this->m_representationMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::RepresentationType& Material::getCRefRepresentationMode() const
+{
+    return this->m_representationMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Material::setRepresentationMode(RepresentationType _representationMode)
+{
+    this->m_representationMode = _representationMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::OptionsType Material::getOptionsMode () const
+{
+    return m_optionsMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Material::OptionsType& Material::getRefOptionsMode ()
+{
+    return this->m_optionsMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::OptionsType& Material::getCRefOptionsMode () const
+{
+    return this->m_optionsMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Material::setOptionsMode (OptionsType _optionsMode)
+{
+    this->m_optionsMode = _optionsMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::FilteringType Material::getDiffuseTextureFiltering() const
+{
+    return m_diffuseTextureFiltering;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Material::FilteringType& Material::getRefDiffuseTextureFiltering()
+{
+    return this->m_diffuseTextureFiltering;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::FilteringType& Material::getCRefDiffuseTextureFiltering() const
+{
+    return this->m_diffuseTextureFiltering;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Material::setDiffuseTextureFiltering(FilteringType _diffuseTextureFiltering)
+{
+    this->m_diffuseTextureFiltering = _diffuseTextureFiltering;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::WrappingType Material::getDiffuseTextureWrapping () const
+{
+    return m_diffuseTextureWrapping;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Material::WrappingType & Material::getRefDiffuseTextureWrapping ()
+{
+    return this->m_diffuseTextureWrapping;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Material::WrappingType & Material::getCRefDiffuseTextureWrapping () const
+{
+    return this->m_diffuseTextureWrapping;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Material::setDiffuseTextureWrapping (WrappingType _diffuseTextureWrapping)
+{
+    this->m_diffuseTextureWrapping = _diffuseTextureWrapping;
+}
+
+//-----------------------------------------------------------------------------
+
 } //namespace fwData
 
-#endif /* _DATA_MATERIAL_HPP_ */
+#endif /* __FWDATA_MATERIAL_HPP__ */
+
diff --git a/SrcLib/core/fwData/include/fwData/Mesh.hpp b/SrcLib/core/fwData/include/fwData/Mesh.hpp
index 8c29480..e407d85 100644
--- a/SrcLib/core/fwData/include/fwData/Mesh.hpp
+++ b/SrcLib/core/fwData/include/fwData/Mesh.hpp
@@ -1,23 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_MESH_HPP_
-#define _FWDATA_MESH_HPP_
+#ifndef __FWDATA_MESH_HPP__
+#define __FWDATA_MESH_HPP__
 
-#include <camp/class.hpp>
-
-#include <fwCore/macros.hpp>
-#include <boost/cstdint.hpp>
-#include <boost/multi_array.hpp>
 #include "fwData/Array.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/factory/new.hpp"
-
 #include "fwData/config.hpp"
-#include "fwData/Array.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <boost/cstdint.hpp>
+#include <boost/multi_array.hpp>
 
 fwCampAutoDeclareDataMacro((fwData)(Mesh), FWDATA_API);
 
@@ -25,11 +23,7 @@ namespace fwData
 {
 
 /**
- * @class   Mesh
- * @brief   Data holding a geometric structure composed of points, lines,
- * triangles, quads or polygons
- * 
- * @date    2011.
+ * @brief   Data holding a geometric structure composed of points, lines, triangles, quads or polygons.
  *
  * It is the new structure that represent mesh in fw4spl. For the moment, this new structure is available
  * to register mesh with triangle cells, with quad cells or with triangle and quad cells. Peharps, in future
@@ -39,8 +33,10 @@ namespace fwData
  *
  * An array (m_points) which contains point coord (x,y,z) \n
  * An array (m_cellTypes) which contains cell type (TRIAN or QUAD for the moment) \n
- * An array (m_cellData) which contains point indexes in m_points used to create cells, 3 indexes are necessary to create a triangle cell, 4 for quad cell. \n
- * An array (m_cellDataOffsets) which contains indexes relative to m_cellData, to retrieve the first point necessary to the cell creation. \n
+ * An array (m_cellData) which contains point indexes in m_points used to create cells, 3 indexes are necessary to
+ * create a triangle cell, 4 for quad cell. \n
+ * An array (m_cellDataOffsets) which contains indexes relative to m_cellData, to retrieve the first point necessary
+ * to the cell creation. \n
  *
  * Example : \n
  * m_points.size = number of mesh points  * 3 \n
@@ -48,7 +44,8 @@ namespace fwData
  * m_cellTypes.size = number of mesh cells \n
  * m_cellTypes = [TRIANGLE, TRIANGLE, QUAD, QUAD, TRIANGLE ... ] \n
  * m_cellDataOffsets.size = number of mesh cells \n
- * m_cellDataOffsets = [0, 3, 6, 10, 14, ... ] ( offset shifting in  m_cellData = +3 if triangle cell rr +4 if quad cell ) \n
+ * m_cellDataOffsets = [0, 3, 6, 10, 14, ... ] (offset shifting in  m_cellData = +3 if triangle cell rr +4 if quad cell)
+ * \n
  * number of mesh cells * 3 (if only triangle cell) < m_cellData.size < number of mesh cells * 4 (if only quad cell) \n
  * m_cellData = [0, 1, 2, 0, 1, 3, 0, 1, 3, 5... ] ( correspond to point id ) \n
  *
@@ -78,7 +75,7 @@ class FWDATA_CLASS_API Mesh : public ::fwData::Object
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Mesh)(::fwData::Object), (()), ::fwData::factory::New< Mesh >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Mesh)(::fwData::Object), (()), ::fwData::factory::New< Mesh >);
 
 
     fwCampMakeFriendDataMacro((fwData)(Mesh));
@@ -88,7 +85,8 @@ public:
     typedef boost::uint64_t Id;
 
 
-    typedef enum {
+    typedef enum
+    {
         NO_CELL = 0,
         POINT,
         EDGE,
@@ -98,27 +96,41 @@ public:
         TETRA
     } CellTypesEnum;
 
-    typedef enum {
-        RGB = 3,
+    typedef enum
+    {
+        RGB  = 3,
         RGBA = 4
     } ColorArrayTypes;
 
-    typedef float          PointValueType;
+    typedef float PointValueType;
     typedef boost::uint8_t ColorValueType;
-    typedef float          NormalValueType;
-    typedef Id             CellValueType;
-    typedef Id             CellDataOffsetType;
+    typedef float NormalValueType;
+    typedef float TexCoordValueType;
+    typedef Id CellValueType;
+    typedef Id CellDataOffsetType;
     typedef boost::uint8_t CellTypes;
 
-    typedef boost::multi_array_ref<PointValueType    , 2> PointsMultiArrayType;
-    typedef boost::multi_array_ref<CellTypes         , 1> CellTypesMultiArrayType;
-    typedef boost::multi_array_ref<CellValueType     , 1> CellDataMultiArrayType;
+    typedef boost::multi_array_ref<PointValueType, 2> PointsMultiArrayType;
+    typedef boost::multi_array_ref<CellTypes, 1> CellTypesMultiArrayType;
+    typedef boost::multi_array_ref<CellValueType, 1> CellDataMultiArrayType;
     typedef boost::multi_array_ref<CellDataOffsetType, 1> CellDataOffsetsMultiArrayType;
-    typedef boost::multi_array_ref<ColorValueType    , 2> PointColorsMultiArrayType;
-    typedef boost::multi_array_ref<ColorValueType    , 2> CellColorsMultiArrayType;
-    typedef boost::multi_array_ref<NormalValueType   , 2> PointNormalsMultiArrayType;
-    typedef boost::multi_array_ref<NormalValueType   , 2> CellNormalsMultiArrayType;
-
+    typedef boost::multi_array_ref<ColorValueType, 2> PointColorsMultiArrayType;
+    typedef boost::multi_array_ref<ColorValueType, 2> CellColorsMultiArrayType;
+    typedef boost::multi_array_ref<NormalValueType, 2> PointNormalsMultiArrayType;
+    typedef boost::multi_array_ref<NormalValueType, 2> CellNormalsMultiArrayType;
+    typedef boost::multi_array_ref<TexCoordValueType, 2> PointTexCoordsMultiArrayType;
+    typedef boost::multi_array_ref<TexCoordValueType, 2> CellTexCoordsMultiArrayType;
+
+    typedef boost::const_multi_array_ref<PointValueType, 2> ConstPointsMultiArrayType;
+    typedef boost::const_multi_array_ref<CellTypes, 1> ConstCellTypesMultiArrayType;
+    typedef boost::const_multi_array_ref<CellValueType, 1> ConstCellDataMultiArrayType;
+    typedef boost::const_multi_array_ref<CellDataOffsetType, 1> ConstCellDataOffsetsMultiArrayType;
+    typedef boost::const_multi_array_ref<ColorValueType, 2> ConstPointColorsMultiArrayType;
+    typedef boost::const_multi_array_ref<ColorValueType, 2> ConstCellColorsMultiArrayType;
+    typedef boost::const_multi_array_ref<NormalValueType, 2> ConstPointNormalsMultiArrayType;
+    typedef boost::const_multi_array_ref<NormalValueType, 2> ConstCellNormalsMultiArrayType;
+    typedef boost::const_multi_array_ref<TexCoordValueType, 2> ConstPointTexCoordsMultiArrayType;
+    typedef boost::const_multi_array_ref<TexCoordValueType, 2> ConstCellTexCoordsMultiArrayType;
 
     /**
      * @brief Constructor
@@ -127,7 +139,7 @@ public:
     FWDATA_API Mesh(::fwData::Object::Key key);
 
     /// Destructor
-    FWDATA_API virtual ~Mesh() ;
+    FWDATA_API virtual ~Mesh();
 
     /// Defines shallow copy
     FWDATA_API void shallowCopy( const Object::csptr& _source );
@@ -151,7 +163,7 @@ public:
      * @throw ::fwData::Exception
      */
     FWDATA_API size_t allocate(size_t nbPts, size_t nbCells, size_t nbCellsData = 0)
-        throw(::fwData::Exception);
+    throw(::fwData::Exception);
 
     /// Allocates normals array according to the number of points of the mesh.
     FWDATA_API size_t allocatePointNormals() throw(::fwData::Exception);
@@ -159,12 +171,18 @@ public:
     /// Allocates colors array according to the number of points of the mesh.
     FWDATA_API size_t allocatePointColors(ColorArrayTypes t) throw(::fwData::Exception);
 
+    /// Allocates texCoords array according to the number of points of the mesh.
+    FWDATA_API size_t allocatePointTexCoords() throw(::fwData::Exception);
+
     /// Allocates normals array according to the number of cells of the mesh.
     FWDATA_API size_t allocateCellNormals() throw(::fwData::Exception);
 
     /// Allocates colors array according to the number of cells of the mesh.
     FWDATA_API size_t allocateCellColors(ColorArrayTypes t) throw(::fwData::Exception);
 
+    /// Allocates texCoords array according to the number of cells of the mesh.
+    FWDATA_API size_t allocateCellTexCoords() throw(::fwData::Exception);
+
 
     /**
      * @brief Adjust mesh memory usage
@@ -182,21 +200,25 @@ public:
     FWDATA_API bool adjustAllocatedMemory() throw(::fwData::Exception);
 
     /// Sets the internal corresponding array
-    FWDATA_API void setPointsArray           (::fwData::Array::sptr array);
+    FWDATA_API void setPointsArray           (const ::fwData::Array::sptr& array);
+    /// Sets the internal corresponding array
+    FWDATA_API void setCellTypesArray        (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setCellTypesArray        (::fwData::Array::sptr array);
+    FWDATA_API void setCellDataArray         (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setCellDataArray         (::fwData::Array::sptr array);
+    FWDATA_API void setCellDataOffsetsArray  (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setCellDataOffsetsArray  (::fwData::Array::sptr array);
+    FWDATA_API void setPointColorsArray      (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setPointColorsArray      (::fwData::Array::sptr array);
+    FWDATA_API void setCellColorsArray       (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setCellColorsArray       (::fwData::Array::sptr array);
+    FWDATA_API void setPointNormalsArray     (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setPointNormalsArray     (::fwData::Array::sptr array);
+    FWDATA_API void setCellNormalsArray      (const ::fwData::Array::sptr& array);
     /// Sets the internal corresponding array
-    FWDATA_API void setCellNormalsArray      (::fwData::Array::sptr array);
+    FWDATA_API void setPointTexCoordsArray   (const ::fwData::Array::sptr& array);
+    /// Sets the internal corresponding array
+    FWDATA_API void setCellTexCoordsArray    (const ::fwData::Array::sptr& array);
 
     /// Returns the internal corresponding array
     FWDATA_API ::fwData::Array::sptr getPointsArray           () const;
@@ -214,6 +236,10 @@ public:
     FWDATA_API ::fwData::Array::sptr getPointNormalsArray     () const;
     /// Returns the internal corresponding array
     FWDATA_API ::fwData::Array::sptr getCellNormalsArray      () const;
+    /// Returns the internal corresponding array
+    FWDATA_API ::fwData::Array::sptr getPointTexCoordsArray   () const;
+    /// Returns the internal corresponding array
+    FWDATA_API ::fwData::Array::sptr getCellTexCoordsArray    () const;
 
     /**
      * @brief Clear mesh points.
@@ -237,10 +263,13 @@ public:
     /// Remove corresponding array, memory is freed.
     FWDATA_API void clearPointColors();
     /// Remove corresponding array, memory is freed.
+    FWDATA_API void clearPointTexCoords();
+    /// Remove corresponding array, memory is freed.
     FWDATA_API void clearCellNormals();
     /// Remove corresponding array, memory is freed.
     FWDATA_API void clearCellColors();
-
+    /// Remove corresponding array, memory is freed.
+    FWDATA_API void clearCellTexCoords();
 
     /// Set number of points.
     FWDATA_API void setNumberOfPoints(Id nb);
@@ -288,6 +317,58 @@ public:
     /// Return all array names stock in the mesh array-map
     FWDATA_API std::vector<std::string> getDataArrayNames() const;
 
+
+    /***
+     * @name Signals
+     * @{
+     */
+
+    /// Type of signal when vertex are modified
+    typedef ::fwCom::Signal< void () > VertexModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigVertexModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_VERTEX_MODIFIED_SIG;
+
+    /// Type of signal when point colors are modified
+    typedef ::fwCom::Signal< void () > PointColorsModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigPointColorsModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_POINT_COLORS_MODIFIED_SIG;
+
+    /// Type of signal when cell colors are modified
+    typedef ::fwCom::Signal< void () > CellColorsModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigCellColorsModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_CELL_COLORS_MODIFIED_SIG;
+
+    /// Type of signal when point normals are modified
+    typedef ::fwCom::Signal< void () > PointNormalsModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigPointNormalsModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_POINT_NORMALS_MODIFIED_SIG;
+
+    /// Type of signal when cell normals are modified
+    typedef ::fwCom::Signal< void () > CellNormalsModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigCellNormalsModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_CELL_NORMALS_MODIFIED_SIG;
+
+    /// Type of signal when point tex coords are modified
+    typedef ::fwCom::Signal< void () > PointTexCoordsModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigPointTexCoorddModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_POINT_TEX_COORDS_MODIFIED_SIG;
+
+    /// Type of signal when cell tex coords are modified
+    typedef ::fwCom::Signal< void () > CellTexCoordsModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigCellTexCoorddModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_CELL_TEX_COORDS_MODIFIED_SIG;
+
+    /**
+     * @}
+     */
+
 protected:
 
     /**
@@ -310,12 +391,14 @@ protected:
      * This array contains points : [ x1 y1 z1 x2 y2 z2 ... xn yn zn ]
      */
     ::fwData::Array::sptr m_points;
+
     /**
      * @brief Cell types array : 1-components 1-dimension uint8 array, size = m_nbCells.
      *
      * This array each cell type : [ TRIANGLE QUAD QUAD ... TRIANGLE TRIANGLE QUAD ]
      */
     ::fwData::Array::sptr m_cellTypes;
+
     /**
      * @brief Cell data array : 1-components 1-dimension uint64 array, size = m_cellsDataSize.
      *
@@ -325,6 +408,7 @@ protected:
      * This array contains point indexes (index in m_points) : [ TRIAN_ID1, TRIAN_ID2, TRIAN_ID3, QUAD_ID1, QUAD_ID2, QUAD_ID3, QUAD_ID4, ... ]
      */
     ::fwData::Array::sptr m_cellData;
+
     /**
      * @brief Cell data offsets array : 1-components 1-dimension uint64 array, size = m_nbCells.
      *
@@ -334,24 +418,28 @@ protected:
      * This array contains cell indexes m_cellData : [ INDEX_TRIAN_1, INDEX_QUAD_1, INDEX_QUAD_2 ...  ]
      */
     ::fwData::Array::sptr m_cellDataOffsets;
+
     /**
      * @brief point colors array : 3 or 4-components 1-dimension float array, size = m_nbPoints.
      *
      * This array contains point colors : [ R1 G1 B1 R2 G2 B2 ... ] or [ R1 G1 B1 A1 R2 G2 B2 A2 ... ]
      */
     ::fwData::Array::sptr m_pointColors;
+
     /**
      * @brief Mesh point array : 3 or 4-components 1-dimension uint8_t array, size = m_nbCells.
      *
      * This array contains cell colors : [ R1 G1 B1 R2 G2 B2 ... ] or [ R1 G1 B1 A1 R2 G2 B2 A2 ... ]
      */
     ::fwData::Array::sptr m_cellColors;
+
     /**
      * @brief Mesh point array : 3-components 1-dimension uint8_t array, size = m_nbPoints.
      *
      * This array contains point normals : [ nx1 ny1 nz1 nx2 ny2 nz2 ... ]
      */
     ::fwData::Array::sptr m_pointNormals;
+
     /**
      * @brief Mesh point array : 3-components 1-dimension float array, size = m_nbCells.
      *
@@ -359,10 +447,25 @@ protected:
      */
     ::fwData::Array::sptr m_cellNormals;
 
+    /**
+     * @brief Mesh texCoord array : 2-components 1-dimension float array, size = m_nbPoints.
+     *
+     * This array contains point texCoords : [ tx1 ty1 tx2 ty2 ... ]
+     */
+    ::fwData::Array::sptr m_pointTexCoords;
+
+    /**
+     * @brief Mesh texCoord array : 2-components 1-dimension float array, size = m_nbCells.
+     *
+     * This array contains cell texCoords : [ tx1 ty1 tx2 ty2 ... ]
+     */
+    ::fwData::Array::sptr m_cellTexCoords;
+
     /// Array map where you can add few additional arrays registered thanks to a key to perform/conserve some specific analysis.
     ArrayMapType m_arrayMap;
 };
 
 } // namespace fwData
 
-#endif // _FWDATA_MESH_HPP_
+#endif // __FWDATA_MESH_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Model.hpp b/SrcLib/core/fwData/include/fwData/Model.hpp
deleted file mode 100644
index 03a3677..0000000
--- a/SrcLib/core/fwData/include/fwData/Model.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATA_MODEL_HPP_
-#define _FWDATA_MODEL_HPP_
-
-#include <map>
-#include <boost/shared_ptr.hpp>
-
-#include "fwData/config.hpp"
-
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-#include "fwData/TriangularMesh.hpp"
-#include "fwData/Material.hpp"
-
-fwCampAutoDeclareDataMacro((fwData)(Model), FWDATA_API);
-
-namespace fwData
-{
-
-
-/**
- * @class   Model
- * @brief   This model class focusses on 3D model such as meshes
- *
- * A model is represented by a triangular mesh and a material
- *
- * @see     ::fwData::TriangularMesh, ::fwData::Material
- *
- * 
- * @date    2007-2009.
- */
-class FWDATA_CLASS_API Model : public Object
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Model)(::fwData::Object), (()), ::fwData::factory::New< Model >) ;
-
-    fwCampMakeFriendDataMacro((fwData)(Model));
-
-    /// mesh and material container
-    typedef std::map< ::fwData::TriangularMesh::sptr , ::fwData::Material::sptr  > Container ;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWDATA_API Model(::fwData::Object::Key key);
-
-    /**
-     * @brief destructor
-     */
-    FWDATA_API virtual ~Model() throw();
-
-    /**
-     * @brief returns editable mesh container
-     */
-    FWDATA_API Container &getRefMap() ;
-
-    /**
-     * @brief returns read-only mesh container
-     */
-    FWDATA_API const Container &getCRefMap() const ;
-
-    /// Defines shallow copy
-    FWDATA_API void shallowCopy( const Object::csptr& _source );
-
-    /// Defines deep copy
-    FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
-
-protected:
-
-    Container m_map;
-};
-
-} // namespace fwData
-
-#endif // _FWDATA_MODEL_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/Namespace.hpp b/SrcLib/core/fwData/include/fwData/Namespace.hpp
deleted file mode 100644
index c5fefc8..0000000
--- a/SrcLib/core/fwData/include/fwData/Namespace.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWDATANAMESPACE_HPP_
-#define FWDATANAMESPACE_HPP_
-
-/**
- * @brief       This namespace fwData contains the representation of the data objects used in the framework.
- * @namespace   fwData
- * 
- * @date        2009-2010.
- *
- */
-namespace fwData
-{
-}
-#endif /* FWDATANAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwData/include/fwData/Node.hpp b/SrcLib/core/fwData/include/fwData/Node.hpp
index 18fce3f..199e6b7 100644
--- a/SrcLib/core/fwData/include/fwData/Node.hpp
+++ b/SrcLib/core/fwData/include/fwData/Node.hpp
@@ -1,41 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_NODE_HPP_
-#define _FWDATA_NODE_HPP_
-
-#include <vector>
-
-#include <boost/shared_ptr.hpp>
+#ifndef __FWDATA_NODE_HPP__
+#define __FWDATA_NODE_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/Port.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <vector>
+
 fwCampAutoDeclareDataMacro((fwData)(Node), FWDATA_API);
 
 namespace fwData
 {
+
 /**
- * @class   Node
- * @brief   This class defines a node
- *
+ * @brief This class defines a node.
  * A node is represented by input and output ports.
- *
- * @see     ::fwData::Port
- *
- *
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Node : public ::fwData::Object
 {
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Node)(::fwData::Object), (()), ::fwData::factory::New< Node >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Node)(::fwData::Object), (()), ::fwData::factory::New< Node >);
     fwCampMakeFriendDataMacro((fwData)(Node));
 
     /// Port container
@@ -54,10 +46,10 @@ public:
     FWDATA_API virtual ~Node();
 
     /// Add an input port
-    FWDATA_API void addInputPort(::fwData::Port::sptr port);
+    FWDATA_API void addInputPort(const ::fwData::Port::sptr& port);
 
     /// Add an output port
-    FWDATA_API void addOutputPort(::fwData::Port::sptr port);
+    FWDATA_API void addOutputPort(const ::fwData::Port::sptr& port);
 
     /// Get the container of input ports
     FWDATA_API PortContainer & getInputPorts();
@@ -66,7 +58,7 @@ public:
     FWDATA_API PortContainer & getOutputPorts();
 
     /// Set object to the node
-    FWDATA_API void setObject( ::fwData::Object::sptr object );
+    FWDATA_API void setObject(const ::fwData::Object::sptr& object );
 
     /// Get node object
     FWDATA_API ::fwData::Object::sptr getObject() const;
@@ -79,7 +71,7 @@ public:
      *
      * @return input or output port with given identifier
      */
-    FWDATA_API Port::sptr findPort(const std::string &_identifier, /*const std::string &type,*/ bool _modeInput) const;
+    FWDATA_API Port::sptr findPort(const std::string &_identifier, bool _modeInput) const;
 
     /// Defines shallow copy
     FWDATA_API void shallowCopy( const Object::csptr& _source );
@@ -90,7 +82,7 @@ public:
     /// Updated signal key
     FWDATA_API static const ::fwCom::Signals::SignalKeyType s_UPDATED_SIG;
 
-protected :
+protected:
 
     /// node object
     ::fwData::Object::sptr m_object;
@@ -107,4 +99,5 @@ protected :
 
 } // namespace fwData
 
-#endif // _FWDATA_NODE_HPP_
+#endif // __FWDATA_NODE_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Object.hpp b/SrcLib/core/fwData/include/fwData/Object.hpp
index 3ba775a..8e8bba1 100644
--- a/SrcLib/core/fwData/include/fwData/Object.hpp
+++ b/SrcLib/core/fwData/include/fwData/Object.hpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_OBJECT_HPP_
-#define _FWDATA_OBJECT_HPP_
+#ifndef __FWDATA_OBJECT_HPP__
+#define __FWDATA_OBJECT_HPP__
 
-#include <boost/unordered_map.hpp>
-#include <string>
-
-#include <boost/enable_shared_from_this.hpp>
+#include "fwData/factory/new.hpp"
+#include "fwData/registry/detail.hpp"
+#include "fwData/config.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwCore/mt/types.hpp>
@@ -29,38 +28,35 @@
 
 #include <fwCom/HasSignals.hpp>
 #include <fwCom/Signal.hpp>
-#include <fwCom/Signal.hxx>
 
-#include "fwData/factory/new.hpp"
-#include "fwData/registry/detail.hpp"
-
-#include "fwData/macros.hpp"
-#include "fwData/config.hpp"
+#include <boost/unordered_map.hpp>
+#include <string>
 
 fwCampAutoDeclareDataMacro((fwData)(Object), FWDATA_API);
 
-fwCorePredeclare( (fwServices)(ObjectMsg) );
-
 namespace fwData
 {
 
 
 /**
  * @brief   Base class for each data object.
+ *
  * Each object can optionally embed sub-object with string identifier. We name this concept a Field.
  * An Object containing a field name "dummy" corresponds to having a labeledObject with label "dummy" and
  * containing a specific Object. When accessing to this object with getField("dummy") we get the specific Object
- *
- * 
- * @date    2007-2009.
  */
-class FWDATA_CLASS_API Object  : public ::fwTools::Object, public ::fwTools::DynamicAttributes< ::fwData::Object >,
+class FWDATA_CLASS_API Object  : public ::fwTools::Object,
+                                 public ::fwTools::DynamicAttributes< ::fwData::Object >,
                                  public ::fwCom::HasSignals
 {
 public:
 
     typedef ::fwData::factory::Key Key;
 
+    fwCoreNonInstanciableClassDefinitionsMacro( (Object)(::fwTools::Object) );
+    fwCoreAllowSharedFromThis();
+    fwCampMakeFriendDataMacro((fwData)(Object));
+
     /**
      * @brief Class used to register a class factory in factory registry.
      * This class defines also the object factory ( 'create' )
@@ -77,11 +73,32 @@ public:
         }
     };
 
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal m_sigModified
+    typedef ::fwCom::Signal< void () > ModifiedSignalType;
 
+    /// Key in m_signals map of signal m_sigModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_MODIFIED_SIG;
+
+    typedef std::map<std::string, ::fwData::Object::sptr> FieldsContainerType;
+    /// Type of signal when objects are added
+    typedef ::fwCom::Signal< void (FieldsContainerType) > AddedFieldsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_ADDED_FIELDS_SIG;
+
+    /// Type of signal when objects are changed (newObjects, oldObjects)
+    typedef ::fwCom::Signal< void (FieldsContainerType, FieldsContainerType) > ChangedFieldsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_CHANGED_FIELDS_SIG;
+
+    /// Type of signal when objects are removed
+    typedef ::fwCom::Signal< void (FieldsContainerType) > RemovedFieldsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_REMOVED_FIELDS_SIG;
+    /**
+     * @}
+     */
 
-    fwCoreNonInstanciableClassDefinitionsMacro( (Object)(::fwTools::Object) );
-    fwCoreAllowSharedFromThis();
-    fwCampMakeFriendDataMacro((fwData)(Object));
 
     typedef std::string FieldNameType;
     typedef std::vector<FieldNameType> FieldNameVectorType;
@@ -95,7 +112,8 @@ public:
      * @param[in] defaultValue Default value
      * @return defaultValue if field is not found
      */
-    FWDATA_API ::fwData::Object::sptr getField( const FieldNameType & name, ::fwData::Object::sptr defaultValue = ::fwData::Object::sptr() ) const;
+    FWDATA_API ::fwData::Object::sptr getField( const FieldNameType & name,
+                                                ::fwData::Object::sptr defaultValue = ::fwData::Object::sptr() ) const;
 
     /**
      * @brief Returns a pointer of corresponding field.
@@ -103,7 +121,7 @@ public:
      * @return pointer to corresponding field, nullptr if field is not found.
      */
     template< typename DATA_TYPE >
-    SPTR(DATA_TYPE) getField( const FieldNameType& name ) const;
+    SPTR(DATA_TYPE) getField( const FieldNameType &name ) const;
 
     /**
      * @brief Returns a pointer of corresponding field.
@@ -112,7 +130,7 @@ public:
      * @return pointer to corresponding field, defaultValue if field is not found.
      */
     template< typename DATA_TYPE >
-    SPTR(DATA_TYPE) getField( const FieldNameType& name, SPTR(DATA_TYPE) defaultValue ) const;
+    SPTR(DATA_TYPE) getField( const FieldNameType &name, SPTR(DATA_TYPE) defaultValue ) const;
 
     /**
      * @brief Returns a pointer of corresponding field. If field did not exist, it is set to defaultValue if defaultValue is not null.
@@ -121,7 +139,7 @@ public:
      * @return pointer to corresponding field.
      */
     template< typename DATA_TYPE >
-    SPTR(DATA_TYPE) setDefaultField( const FieldNameType& name, SPTR(DATA_TYPE) defaultValue );
+    SPTR(DATA_TYPE) setDefaultField( const FieldNameType &name, SPTR(DATA_TYPE) defaultValue );
 
     /**
      * @brief Returns a pointer of corresponding field (null if non exist).
@@ -156,7 +174,7 @@ public:
      * @brief Removes field with specified name.
      * @param[in] name Field name
      */
-    FWDATA_API void removeField( const FieldNameType & name ) ;
+    FWDATA_API void removeField( const FieldNameType & name );
 
     /**
      * @brief Updates the field map content with fieldMap. Duplicated name will be replaced.
@@ -202,24 +220,12 @@ public:
     //-----------------------------------------------------------------------------
 
     /// Returns the object's mutex.
-    ::fwCore::mt::ReadWriteMutex &getMutex() { return m_mutex; }
-
-    FWDATA_API virtual ~Object() ;
-
-    /// Type of signal m_sigObjectModified
-    typedef ::fwCom::Signal< void ( CSPTR( ::fwServices::ObjectMsg ) ) > ObjectModifiedSignalType;
-
-    /// Key in m_signals map of signal m_sigObjectModified
-    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_OBJECT_MODIFIED_SIG;
+    ::fwCore::mt::ReadWriteMutex &getMutex() const
+    {
+        return m_mutex;
+    }
 
-#ifdef COM_LOG
-    /**
-      * @brief Set a newID  for the object, the oldest one is released.
-      * @warning Cannot set a empty ID.
-      * @note This method is thread-safe. This method is used to better trace communication between signals and slots
-      */
-    FWDATA_API void setID( ::fwTools::fwID::IDType newID );
-#endif
+    FWDATA_API virtual ~Object();
 
 protected:
 
@@ -242,10 +248,7 @@ protected:
     FieldMapType m_fields;
 
     /// Mutex to protect object access.
-    ::fwCore::mt::ReadWriteMutex m_mutex;
-
-    /// Signal that emits ObjectMsg when object is modified
-    ObjectModifiedSignalType::sptr m_sigObjectModified;
+    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
 };
 
 
@@ -277,29 +280,29 @@ SPTR(DATA_TYPE) Object::copy(const SPTR(DATA_TYPE) &source)
 //-----------------------------------------------------------------------------
 
 template< typename DATA_TYPE >
-SPTR(DATA_TYPE) Object::getField( const FieldNameType& name ) const
+SPTR(DATA_TYPE) Object::getField( const FieldNameType &name ) const
 {
     ::fwData::Object::sptr field;
-    field = this->getField( name, field );
-    SPTR(DATA_TYPE) result  = DATA_TYPE::dynamicCast( field );
+    field                  = this->getField( name, field );
+    SPTR(DATA_TYPE) result = DATA_TYPE::dynamicCast( field );
     return result;
 }
 
 //-----------------------------------------------------------------------------
 
 template< typename DATA_TYPE >
-SPTR(DATA_TYPE) Object::getField( const FieldNameType& name, SPTR(DATA_TYPE) defaultValue ) const
+SPTR(DATA_TYPE) Object::getField( const FieldNameType &name, SPTR(DATA_TYPE) defaultValue ) const
 {
     ::fwData::Object::sptr field = defaultValue;
-    field = this->getField( name, field );
-    SPTR(DATA_TYPE) result  = DATA_TYPE::dynamicCast( field );
+    field                        = this->getField( name, field );
+    SPTR(DATA_TYPE) result       = DATA_TYPE::dynamicCast( field );
     return result;
 }
 
 //-----------------------------------------------------------------------------
 
 template< typename DATA_TYPE >
-SPTR(DATA_TYPE) Object::setDefaultField( const FieldNameType& name, SPTR(DATA_TYPE) defaultValue )
+SPTR(DATA_TYPE) Object::setDefaultField( const FieldNameType &name, SPTR(DATA_TYPE) defaultValue )
 {
     SPTR(DATA_TYPE) result = getField< DATA_TYPE >(name);
     if( !result && defaultValue)
@@ -312,4 +315,4 @@ SPTR(DATA_TYPE) Object::setDefaultField( const FieldNameType& name, SPTR(DATA_TY
 
 } // namespace fwData
 
-#endif //_FWDATA_OBJECT_HPP_
+#endif //__FWDATA_OBJECT_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/ObjectLock.hpp b/SrcLib/core/fwData/include/fwData/ObjectLock.hpp
index d32ee94..d2cfdb1 100644
--- a/SrcLib/core/fwData/include/fwData/ObjectLock.hpp
+++ b/SrcLib/core/fwData/include/fwData/ObjectLock.hpp
@@ -1,37 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_OBJECTLOCK_HPP_
-#define _FWDATA_OBJECTLOCK_HPP_
+#ifndef __FWDATA_OBJECTLOCK_HPP__
+#define __FWDATA_OBJECTLOCK_HPP__
 
-#include <vector>
 
 #include "fwData/Image.hpp"
 #include "fwData/Array.hpp"
 #include "fwData/Mesh.hpp"
 #include "fwData/Reconstruction.hpp"
-
 #include "fwData/config.hpp"
 
+#include <vector>
+
 namespace fwData
 {
 
 
 /**
- * @class  ObjectLock
- * @brief  A simple helper to lock specific object, manages : Image, Mesh and Array.
- * 
- * @date   2007-2012.
+ * @brief A simple helper to lock specific object, manages : Image, Mesh and Array.
  */
 class FWDATA_CLASS_API ObjectLock
 {
 
-public :
+public:
 
-    ObjectLock(){}
+    ObjectLock()
+    {
+    }
 
     FWDATA_API ObjectLock( const ObjectLock & );
     FWDATA_API ObjectLock( ::fwData::Object::sptr obj );
@@ -39,7 +38,7 @@ public :
     FWDATA_API ~ObjectLock();
 
     FWDATA_API ObjectLock & operator=(const ObjectLock & );
-private :
+private:
 
 
     typedef std::vector< ::fwMemory::BufferObject::Lock > LocksType;
@@ -56,4 +55,4 @@ private :
 
 } // fwData
 
-#endif // _FWDATA_OBJECTLOCK_HPP_
+#endif // __FWDATA_OBJECTLOCK_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/Plane.hpp b/SrcLib/core/fwData/include/fwData/Plane.hpp
index 2d2606f..549909a 100644
--- a/SrcLib/core/fwData/include/fwData/Plane.hpp
+++ b/SrcLib/core/fwData/include/fwData/Plane.hpp
@@ -1,40 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_PLANE_HPP_
-#define _FWDATA_PLANE_HPP_
-
-#include <vector>
-
-#include <fwMath/IntrasecTypes.hpp>
+#ifndef __FWDATA_PLANE_HPP__
+#define __FWDATA_PLANE_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/Point.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <vector>
+
 fwCampAutoDeclareDataMacro((fwData)(Plane), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   Plane
  * @brief   This class defines a plane defined by tree points.
  * @see     ::fwData::Point
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Plane : public Object
 {
 
-public :
-    fwCoreClassDefinitionsWithFactoryMacro( (Plane)(::fwData::Object),
-        (()), ::fwData::factory::New< Plane >) ;
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (Plane)(::fwData::Object), (()), ::fwData::factory::New< Plane >);
 
     fwCampMakeFriendDataMacro((fwData)(Plane));
 
-    typedef ::boost::array< ::fwData::Point::sptr, 3> PointContainer;
+    typedef std::array< ::fwData::Point::sptr, 3> PointContainer;
 
 
     /**
@@ -52,30 +49,42 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    /*
-     * @brief Compare method
-     *
-     * Compare plane normal and distance from origin
-     */
-    FWDATA_API bool operator==( const Plane & _plane ) ;
-
-    /// get the plane coordinate
-    fwPlane getPlane() const {return m_plane;};
-
     /// Re-initialize the plane with 3 points
-    FWDATA_API void setValue(::fwData::Point::sptr _point1, ::fwData::Point::sptr _point2, ::fwData::Point::sptr _point3);
+    FWDATA_API void setValue(::fwData::Point::sptr _point1, ::fwData::Point::sptr _point2,
+                             ::fwData::Point::sptr _point3);
 
-    /// Compute plane normal and distance from points coordinates
-    FWDATA_API void computePlaneFromPoints();
-
-    /// Points container
-    fwGettersSettersDocMacro(Points, vPoints, PointContainer, a container of all points);
+    /** @{
+     *  @brief get/set points container
+     */
+    const PointContainer getPoints() const;
+    PointContainer& getRefPoints();
+    const PointContainer& getCRefPoints() const;
+    void setPoints(const PointContainer _vPoints);
+    void setCRefPoints(const PointContainer& _vPoints);
+    /// @}
+
+    /** @{
+     *  @brief get/set flag if the plane is an intersection one (else an union one)
+     */
+    bool getIsIntersection () const;
+    bool& getRefIsIntersection ();
+    const bool& getCRefIsIntersection () const;
+    void setIsIntersection(bool _isIntersection);
+    /// @}
 
-    fwGettersSettersDocMacro(IsIntersection, isIntersection, bool, flag if the plane is an intersection one (else an union one));
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Signal emitted when plane is selected/deselected
+    typedef ::fwCom::Signal< void (bool) > SelectedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_SELECTED_SIG;
+    /**
+     * @}
+     */
 
-protected :
+protected:
 
-    fwPlane m_plane;
     //! Points container
     PointContainer m_vPoints;
 
@@ -84,6 +93,72 @@ protected :
 
 }; // end class Plane
 
+//-----------------------------------------------------------------------------
+
+inline const Plane::PointContainer Plane::getPoints() const
+{
+    return m_vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Plane::PointContainer& Plane::getRefPoints()
+{
+    return this->m_vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Plane::PointContainer& Plane::getCRefPoints() const
+{
+    return this->m_vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Plane::setPoints(const Plane::PointContainer _vPoints)
+{
+    this->m_vPoints = _vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Plane::setCRefPoints(const Plane::PointContainer& _vPoints)
+{
+    this->m_vPoints = _vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool Plane::getIsIntersection () const
+{
+    return m_isIntersection;
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool& Plane::getRefIsIntersection ()
+{
+    return this->m_isIntersection;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const bool& Plane::getCRefIsIntersection () const
+{
+    return this->m_isIntersection;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Plane::setIsIntersection(bool _isIntersection)
+{
+    this->m_isIntersection = _isIntersection;
+}
+
+//-----------------------------------------------------------------------------
+
 } // end namespace fwData
 
-#endif // _FWDATA_PLANE_HPP_
+#endif // __FWDATA_PLANE_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/PlaneList.hpp b/SrcLib/core/fwData/include/fwData/PlaneList.hpp
index 492565c..31ef24c 100644
--- a/SrcLib/core/fwData/include/fwData/PlaneList.hpp
+++ b/SrcLib/core/fwData/include/fwData/PlaneList.hpp
@@ -1,35 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_PLANELIST_HPP_
-#define _FWDATA_PLANELIST_HPP_
+#ifndef __FWDATA_PLANELIST_HPP__
+#define __FWDATA_PLANELIST_HPP__
 
-#include <vector>
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/Plane.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <vector>
+
 fwCampAutoDeclareDataMacro((fwData)(PlaneList), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   PlaneList
- * @brief   This class defines a list of planes
+ * @brief   This class defines a list of planes.
  * @see     ::fwData::Point
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API PlaneList : public Object
 {
 
-public :
-    fwCoreClassDefinitionsWithFactoryMacro( (PlaneList)(::fwData::Object),
-        (()), ::fwData::factory::New< PlaneList >) ;
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (PlaneList)(::fwData::Object), (()), ::fwData::factory::New< PlaneList >);
 
     fwCampMakeFriendDataMacro((fwData)(PlaneList));
 
@@ -51,19 +51,72 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    // Looking for duplicate plan
-    FWDATA_API void deleteDuplicatedPlan(void);
+    /** @{
+     *  @brief get/set container of all planes
+     */
+    const PlaneListContainer  getPlanes () const;
+    PlaneListContainer & getRefPlanes ();
+    const PlaneListContainer & getCRefPlanes () const;
+    void setPlanes (const PlaneListContainer& _vPlanes);
+    /// @}
 
-    /// Planes container
-    fwGettersSettersDocMacro(Planes, vPlanes, PlaneListContainer, a container of all planes);
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Signal emitted when a plane is added
+    typedef ::fwCom::Signal< void (::fwData::Plane::sptr) > PlaneAddedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_PLANE_ADDED_SIG;
 
-protected :
+    /// Signal emitted when a plane is removed
+    typedef ::fwCom::Signal< void (::fwData::Plane::sptr) > PlaneRemovedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_PLANE_REMOVED_SIG;
+
+    /// Signal emitted when the visibility changed
+    typedef ::fwCom::Signal< void (bool) > VisibilityModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_VISIBILITY_MODIFIED_SIG;
+    /**
+     * @}
+     */
+
+protected:
 
     //! Planes container
     PlaneListContainer m_vPlanes;
 
 }; // end class PlaneList
 
+//-----------------------------------------------------------------------------
+
+inline const PlaneList::PlaneListContainer PlaneList::getPlanes () const
+{
+    return m_vPlanes;
+}
+
+//-----------------------------------------------------------------------------
+
+inline PlaneList::PlaneListContainer & PlaneList::getRefPlanes ()
+{
+    return this->m_vPlanes;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const PlaneList::PlaneListContainer & PlaneList::getCRefPlanes () const
+{
+    return this->m_vPlanes;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void PlaneList::setPlanes (const PlaneList::PlaneListContainer& _vPlanes)
+{
+    this->m_vPlanes = _vPlanes;
+}
+
+//-----------------------------------------------------------------------------
+
 } // end namespace fwData
 
-#endif // _FWDATA_PLANELIST_HPP_
+#endif // __FWDATA_PLANELIST_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Point.hpp b/SrcLib/core/fwData/include/fwData/Point.hpp
index d7a0bd2..fd25e47 100644
--- a/SrcLib/core/fwData/include/fwData/Point.hpp
+++ b/SrcLib/core/fwData/include/fwData/Point.hpp
@@ -1,48 +1,44 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_POINT_HPP_
-#define _FWDATA_POINT_HPP_
-
-#include <fwMath/IntrasecTypes.hpp>
+#ifndef __FWDATA_POINT_HPP__
+#define __FWDATA_POINT_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <array>
+
 fwCampAutoDeclareDataMacro((fwData)(Point), FWDATA_API);
 
 
 namespace fwData
 {
 /**
- * @class   Point
  * @brief   This class define a 3D point.
- * 
- * @date    2007-2009.
  */
-
-
 class FWDATA_CLASS_API Point : public Object
 {
 
-public :
+public:
+
+    typedef double PointCoordType;
+    typedef std::array<double, 3> PointCoordArrayType;
 
     fwCoreClassDefinitionsWithNFactoriesMacro( (Point)(::fwData::Object),
-       ((::fwData::factory::New< Point > ,() ))
-       ((PointFactory ,((float)) ((float)(0.0)) ((float) (0.0)) ))
-       ((PointFactory ,((Point::sptr)) ))
-       );
+                                               ((::fwData::factory::New< Point >,() ))
+                                                   ((PointFactory,((float))((float)(0.0f)) ((float) (0.0f)) ))
+                                                   ((PointFactory,((double))((double)(0.0)) ((double) (0.0)) ))
+                                                   ((PointFactory,((const PointCoordArrayType &)) ))
+                                                   ((PointFactory,((Point::sptr)) ))
+                                               );
 
     fwCampMakeFriendDataMacro((fwData)(Point));
 
-    typedef double PointCoordType;
-    typedef fwVec3d PointCoordArrayType;
-
-
     /**
      * @brief Constructor
      * @param key Private construction key
@@ -58,20 +54,58 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    /// Coordinates of point
-    fwGettersSettersDocMacro(Coord, vCoord, fwVec3d, point coordinates. );
+    /// @brief get/set point coordinates
+    /// @{
+    const PointCoordArrayType  getCoord () const;
+    PointCoordArrayType& getRefCoord ();
+    const PointCoordArrayType & getCRefCoord() const;
+    void setCoord(const PointCoordArrayType& _vCoord);
+    /// @}
 
-protected :
+protected:
 
     /// Point factory
     FWDATA_API static Point::sptr PointFactory(float x, float y, float z);
-    FWDATA_API static Point::sptr PointFactory( Point::sptr p );
+    FWDATA_API static Point::sptr PointFactory(double x, double y, double z);
+    FWDATA_API static Point::sptr PointFactory(const PointCoordArrayType& coord);
+    FWDATA_API static Point::sptr PointFactory(Point::sptr p);
 
     /// point coordinates
     PointCoordArrayType m_vCoord;
 
 }; // end class Point
 
+//-----------------------------------------------------------------------------
+
+inline const Point::PointCoordArrayType Point::getCoord () const
+{
+    return m_vCoord;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Point::PointCoordArrayType& Point::getRefCoord ()
+{
+    return this->m_vCoord;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Point::PointCoordArrayType & Point::getCRefCoord() const
+{
+    return this->m_vCoord;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Point::setCoord(const PointCoordArrayType & _vCoord)
+{
+    this->m_vCoord = _vCoord;
+}
+
+//-----------------------------------------------------------------------------
+
 } // end namespace fwData
 
-#endif // _FWDATA_POINT_HPP_
+#endif // __FWDATA_POINT_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/PointList.hpp b/SrcLib/core/fwData/include/fwData/PointList.hpp
index ef3a7b7..17ce694 100644
--- a/SrcLib/core/fwData/include/fwData/PointList.hpp
+++ b/SrcLib/core/fwData/include/fwData/PointList.hpp
@@ -1,36 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_POINT_LIST_HPP_
-#define _FWDATA_POINT_LIST_HPP_
+#ifndef __FWDATA_POINTLIST_HPP__
+#define __FWDATA_POINTLIST_HPP__
 
-#include <vector>
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/Point.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <vector>
+
 fwCampAutoDeclareDataMacro((fwData)(PointList), FWDATA_API);
 
 namespace fwData
 {
 /**
- * @class   PointList
- * @brief   This class defines a list of points
+ * @brief   This class defines a list of points.
  * @see     ::fwData::Point
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API PointList : public Object
 {
 
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro( (PointList)(::fwData::Object),
-        (()), ::fwData::factory::New< PointList >) ;
+                                            (()), ::fwData::factory::New< PointList >);
 
     fwCampMakeFriendDataMacro((fwData)(PointList));
 
@@ -52,16 +53,80 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    /// Points container
-    fwGettersSettersDocMacro(Points, vPoints, PointListContainer, a container of all points);
+    /// @brief get/set points container
+    /// @{
+    const PointListContainer  getPoints () const;
+
+    PointListContainer & getRefPoints ();
+
+    const PointListContainer & getCRefPoints () const;
+
+    void setPoints (const PointListContainer & _vPoints);
+
+    ///Push back a ::fwData::Point in the pointlist
+    void pushBack(const ::fwData::Point::sptr&);
+    /// @}
 
-protected :
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Signal emitted when a Point is added
+    typedef ::fwCom::Signal< void (::fwData::Point::sptr) > PointAddedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_POINT_ADDED_SIG;
+
+    /// Signal emitted when a Point is removed
+    typedef ::fwCom::Signal< void (::fwData::Point::sptr) > PointRemovedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_POINT_REMOVED_SIG;
+    /**
+     * @}
+     */
+
+protected:
 
     //! Points container
     PointListContainer m_vPoints;
 
 }; // end class PointList
 
+//-----------------------------------------------------------------------------
+
+inline const PointList::PointListContainer PointList::getPoints () const
+{
+    return m_vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline PointList::PointListContainer & PointList::getRefPoints ()
+{
+    return this->m_vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const PointList::PointListContainer & PointList::getCRefPoints () const
+{
+    return this->m_vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void PointList::setPoints (const PointList::PointListContainer & _vPoints)
+{
+    this->m_vPoints = _vPoints;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void PointList::pushBack(const ::fwData::Point::sptr& p)
+{
+    this->m_vPoints.push_back(p);
+}
+
+//-----------------------------------------------------------------------------
+
 } // end namespace fwData
 
-#endif // _FWDATA_POINT_LIST_HPP_
+#endif // __FWDATA_POINTLIST_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Port.hpp b/SrcLib/core/fwData/include/fwData/Port.hpp
index cdd31d0..820074a 100644
--- a/SrcLib/core/fwData/include/fwData/Port.hpp
+++ b/SrcLib/core/fwData/include/fwData/Port.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_PORT_HPP_
-#define _FWDATA_PORT_HPP_
+#ifndef __FWDATA_PORT_HPP__
+#define __FWDATA_PORT_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
@@ -16,15 +16,12 @@ fwCampAutoDeclareDataMacro((fwData)(Port), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   Port
- * @brief   A port is defined by an identifier and a type.
- * 
- * @date    2007-2009.
+ * @brief A port is defined by an identifier and a type.
  */
 class FWDATA_CLASS_API Port : public ::fwData::Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Port)(::fwData::Object), (()), ::fwData::factory::New< Port >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Port)(::fwData::Object), (()), ::fwData::factory::New< Port >);
 
     /**
      * @brief Constructor
@@ -35,11 +32,35 @@ public:
     /// Destructor
     FWDATA_API virtual ~Port();
 
-    fwGettersSettersDocMacro(Identifier, identifier, std::string,the port identifier (example : "ID_SIZEX", "THRESHOLD_LOW") );
+    /**
+     * @{
+     * @brief Retrieve the identifier.
+     */
+    const std::string  getIdentifier () const;
+    std::string & getRefIdentifier ();
+    const std::string & getCRefIdentifier () const;
+    void setIdentifier (const std::string _identifier);
+    void setCRefIdentifier (const std::string & _identifier);
+    /// @}
+
+    /**
+     * @{
+     * @brief Retrieve the type.
+     */
 
-    fwGettersSettersDocMacro(Type, type, std::string, the port type (example : "Image", "Mesh", a %data className));
+    const std::string  getType () const;
+    std::string & getRefType ();
+    const std::string & getCRefType () const;
+    void setType (const std::string _type);
+    void setCRefType (const std::string & _type);
+    /// @}
 
+    /**
+     * @{
+     * @brief Retrieve the input data.
+     */
     fwCampMakeFriendDataMacro((fwData)(Port));
+    /// @}
 
     /// Defines shallow copy
     FWDATA_API void shallowCopy( const Object::csptr& _source );
@@ -47,14 +68,87 @@ public:
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-protected :
+protected:
 
     //! port identifier
-    std::string  m_identifier; // example "ID_SIZEX", "THRESHOLD_LOW"
+    std::string m_identifier;  // example "ID_SIZEX", "THRESHOLD_LOW"
     //! port type
-    std::string  m_type ; // example "Image, Mesh" un className de data
+    std::string m_type;   // example "Image, Mesh" un className de data
 };
 
+//-----------------------------------------------------------------------------
+
+inline const std::string Port::getIdentifier () const
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & Port::getRefIdentifier ()
+{
+    return this->m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & Port::getCRefIdentifier () const
+{
+    return this->m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Port::setIdentifier (const std::string _identifier)
+{
+    this->m_identifier = _identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Port::setCRefIdentifier (const std::string & _identifier)
+{
+    this->m_identifier = _identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string Port::getType () const
+{
+    return m_type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & Port::getRefType ()
+{
+    return this->m_type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & Port::getCRefType () const
+{
+    return this->m_type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Port::setType (const std::string _type)
+{
+    this->m_type = _type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Port::setCRefType (const std::string & _type)
+{
+    this->m_type = _type;
 }
 
-#endif // _FWDATA_PORT_HPP_
+//-----------------------------------------------------------------------------
+
+} // namespace fwData
+
+#endif // __FWDATA_PORT_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/ProcessObject.hpp b/SrcLib/core/fwData/include/fwData/ProcessObject.hpp
index 9ee4a6e..37bbee3 100644
--- a/SrcLib/core/fwData/include/fwData/ProcessObject.hpp
+++ b/SrcLib/core/fwData/include/fwData/ProcessObject.hpp
@@ -1,35 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_PROCESSOBJECT_HPP_
-#define _FWDATA_PROCESSOBJECT_HPP_
-
-#include <map>
-#include <vector>
+#ifndef __FWDATA_PROCESSOBJECT_HPP__
+#define __FWDATA_PROCESSOBJECT_HPP__
 
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
-fwCorePredeclare( (fwData)(Field) );
+#include <map>
+#include <vector>
+
+namespace fwData
+{
+class Field;
+}
 
 
 fwCampAutoDeclareDataMacro((fwData)(ProcessObject), FWDATA_API);
 
 namespace fwData
 {
+
 /**
- * @class   ProcessObject
- * @brief   Provides the notion of Process Object: object having inputs and outputs
- * 
- * @date    2007-2009.
+ * @brief Provides the notion of Process Object: object having inputs and outputs.
  */
 class FWDATA_CLASS_API ProcessObject : public Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ProcessObject)(::fwData::Object), (()), ::fwData::factory::New< ProcessObject >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ProcessObject)(::fwData::Object), (()),
+                                            ::fwData::factory::New< ProcessObject >);
 
 
     fwCampMakeFriendDataMacro((fwData)(ProcessObject));
@@ -42,7 +44,7 @@ public:
      * @brief Constructor
      * @param key Private construction key
      */
-    FWDATA_API ProcessObject(::fwData::Object::Key key) ;
+    FWDATA_API ProcessObject(::fwData::Object::Key key);
 
     /**
      * @brief   Destructor
@@ -62,10 +64,7 @@ public:
      * @return null sptr if input is not found
      */
     template< class OBJECTTYPE >
-    typename OBJECTTYPE::sptr getInput(const ParamNameType& name)
-    {
-        return OBJECTTYPE::dynamicCast( this->getInput( name ) ) ;
-    }
+    typename OBJECTTYPE::sptr getInput(const ParamNameType& name);
 
     /**
      * @brief Retrieves the output data associated with specified name (null if non exist).
@@ -80,16 +79,25 @@ public:
      * @return null sptr if output is not found
      */
     template< class OBJECTTYPE >
-    typename OBJECTTYPE::sptr getOutput(const ParamNameType& name)
-    {
-        return OBJECTTYPE::dynamicCast( this->getOutput( name ) ) ;
-    }
+    typename OBJECTTYPE::sptr getOutput(const ParamNameType& name);
 
-    /// Retrieve the input data
-    fwDataGetSetCRefMacro(Inputs, ProcessObjectMapType);
+    /**
+     * @{
+     * @brief Retrieve the input data.
+     */
+    const ProcessObjectMapType &getInputs () const;
 
-    /// Retrieve the output data
-    fwDataGetSetCRefMacro(Outputs, ProcessObjectMapType);
+    void setInputs (const ProcessObjectMapType &val);
+    /// @}
+
+    /**
+     * @{
+     * @briefRetrieve the output data.
+     */
+    const ProcessObjectMapType &getOutputs () const;
+
+    void setOutputs (const ProcessObjectMapType &val);
+    /// @}
 
     /**
      * @brief Register input value with specified name.
@@ -163,13 +171,61 @@ protected:
     FWDATA_API void clearParams(ProcessObjectMapType& params);
 
     /// Inputs values map
-    ProcessObjectMapType m_attrInputs;
+    ProcessObjectMapType m_inputs;
 
     /// Outputs values map
-    ProcessObjectMapType m_attrOutputs;
+    ProcessObjectMapType m_outputs;
 };
 
+//-----------------------------------------------------------------------------
+
+
+template< class OBJECTTYPE >
+inline typename OBJECTTYPE::sptr ProcessObject::getInput(const ProcessObject::ParamNameType& name)
+{
+    return OBJECTTYPE::dynamicCast( this->getInput( name ) );
+}
+
+//-----------------------------------------------------------------------------
+
+template< class OBJECTTYPE >
+inline typename OBJECTTYPE::sptr ProcessObject::getOutput(const ProcessObject::ParamNameType& name)
+{
+    return OBJECTTYPE::dynamicCast( this->getOutput( name ) );
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ProcessObject::ProcessObjectMapType &ProcessObject::getInputs () const
+{
+    return m_inputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ProcessObject::setInputs (const ProcessObject::ProcessObjectMapType &val)
+{
+    m_inputs = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ProcessObject::ProcessObjectMapType &ProcessObject::getOutputs () const
+{
+    return m_outputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ProcessObject::setOutputs (const ProcessObject::ProcessObjectMapType &val)
+{
+    m_outputs = val;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace fwData
 
 
-#endif //_FWDATA_PROCESSOBJECT_HPP_
+#endif // __FWDATA_PROCESSOBJECT_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/ROITraits.hpp b/SrcLib/core/fwData/include/fwData/ROITraits.hpp
index 060ca84..ff58328 100644
--- a/SrcLib/core/fwData/include/fwData/ROITraits.hpp
+++ b/SrcLib/core/fwData/include/fwData/ROITraits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,9 +7,9 @@
 #ifndef __FWDATA_ROITRAITS_HPP__
 #define __FWDATA_ROITRAITS_HPP__
 
+#include "fwData/factory/new.hpp"
 #include "fwData/Node.hpp"
 #include "fwData/StructureTraits.hpp"
-#include "fwData/factory/new.hpp"
 
 
 fwCampAutoDeclareDataMacro((fwData)(ROITraits), FWDATA_API);
@@ -17,10 +17,7 @@ fwCampAutoDeclareDataMacro((fwData)(ROITraits), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   ROITraits
  * @brief   This class defines ROI traits.
- * 
- * @date    2007-2011.
  *
  * A ROI traits contains :
  *  - an identifier
@@ -34,7 +31,7 @@ namespace fwData
 class FWDATA_CLASS_API ROITraits : public ::fwData::Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ROITraits)(::fwData::Object), (()), ::fwData::factory::New< ROITraits >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ROITraits)(::fwData::Object), (()), ::fwData::factory::New< ROITraits >);
     fwCampMakeFriendDataMacro((fwData)(ROITraits));
 
     /**
@@ -48,18 +45,35 @@ public:
      */
     FWDATA_API virtual ~ROITraits();
 
-    fwGettersSettersDocMacro(Identifier, identifier, std::string, the ROIs identifier);
+    /**
+     * @{
+     * @brief Get/Set value of the ROIs identifier.
+     */
+    const std::string  getIdentifier() const;
+    std::string & getRefIdentifier();
+    const std::string & getCRefIdentifier() const;
+    void setIdentifier(const std::string& _identifier);
+    /// @}
 
-    fwGettersSettersDocMacro(EvaluatedExp, evaluatedExp, StructureTraits::ROIExpression, the ROI evaluated expression);
+    /**
+     * @{
+     * @brief Get/Set value of the ROI evaluated expression.
+     */
+    const StructureTraits::ROIExpression  getEvaluatedExp () const;
+    StructureTraits::ROIExpression & getRefEvaluatedExp ();
+    const StructureTraits::ROIExpression & getCRefEvaluatedExp () const;
+    void setEvaluatedExp (const StructureTraits::ROIExpression _evaluatedExp);
+    void setCRefEvaluatedExp (const StructureTraits::ROIExpression & _evaluatedExp);
+    /// @}
 
     /// Set the ROI mask node used for ROI
-    FWDATA_API void setMaskOpNode( ::fwData::Node::sptr maskOpNode );
+    FWDATA_API void setMaskOpNode(const ::fwData::Node::sptr& maskOpNode );
 
     /// Get the ROI mask node used for ROI, the only case where sptr can be null is when m_evaluatedExp correspond to "W" ( W <=> World <=> no roi constraint ).
     FWDATA_API ::fwData::Node::sptr getMaskOpNode();
 
     /// Set the associated structure traits
-    FWDATA_API void setStructureTraits( ::fwData::StructureTraits::sptr structureTraits );
+    FWDATA_API void setStructureTraits(const ::fwData::StructureTraits::sptr& structureTraits );
 
     /// Get the associated structure traits
     FWDATA_API ::fwData::StructureTraits::sptr getStructureTraits();
@@ -82,6 +96,72 @@ private:
     StructureTraits::ROIExpression m_evaluatedExp;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const std::string ROITraits::getIdentifier() const
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & ROITraits::getRefIdentifier()
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & ROITraits::getCRefIdentifier() const
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ROITraits::setIdentifier(const std::string& _identifier)
+{
+    m_identifier = _identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::ROIExpression ROITraits::getEvaluatedExp () const
+{
+    return m_evaluatedExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline StructureTraits::ROIExpression & ROITraits::getRefEvaluatedExp ()
+{
+    return m_evaluatedExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::ROIExpression & ROITraits::getCRefEvaluatedExp () const
+{
+    return m_evaluatedExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ROITraits::setEvaluatedExp (const StructureTraits::ROIExpression _evaluatedExp)
+{
+    m_evaluatedExp = _evaluatedExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ROITraits::setCRefEvaluatedExp (const StructureTraits::ROIExpression & _evaluatedExp)
+{
+    m_evaluatedExp = _evaluatedExp;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace fwData
 
 #endif // __FWDATA_ROITRAITS_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Reconstruction.hpp b/SrcLib/core/fwData/include/fwData/Reconstruction.hpp
index 1530cda..f7d642c 100755
--- a/SrcLib/core/fwData/include/fwData/Reconstruction.hpp
+++ b/SrcLib/core/fwData/include/fwData/Reconstruction.hpp
@@ -1,16 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_RECONSTRUCTION_HPP_
-#define _FWDATA_RECONSTRUCTION_HPP_
+#ifndef __FWDATA_RECONSTRUCTION_HPP__
+#define __FWDATA_RECONSTRUCTION_HPP__
 
-#include "fwData/Object.hpp"
+#include "fwData/config.hpp"
 #include "fwData/factory/new.hpp"
+#include "fwData/Object.hpp"
 
-#include "fwData/config.hpp"
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
 fwCampAutoDeclareDataMacro((fwData)(Reconstruction), FWDATA_API);
 
@@ -22,18 +24,15 @@ class Material;
 class Mesh;
 
 /**
- * @class Reconstruction
- * @brief This class defines a reconstruction object
- *
- * A reconstruction is represented by a triangular mesh, a material and an image.
+ * @brief This class defines a reconstruction object.
  *
- * @see ::fwData::Image, ::fwData::Mesh, ::fwData::Material
+ * A reconstruction is represented by a mesh, a material and an image (mask).
  */
-
 class FWDATA_CLASS_API Reconstruction : public Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Reconstruction)(::fwData::Object), (()), ::fwData::factory::New< Reconstruction >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Reconstruction)(::fwData::Object), (()),
+                                            ::fwData::factory::New< Reconstruction >);
 
     fwCoreAllowSharedFromThis()
 
@@ -54,30 +53,85 @@ public:
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
+    /// Constant to inform that mask volume has not been computed yet.
+    FWDATA_API static const double s_NO_COMPUTED_MASK_VOLUME;
 
-    // Generator result---------------------------------------------------------
-    fwGettersSettersDocMacro(IsVisible, bIsVisible, bool, the visibility of the reconstruction (true if visible));
+    /**
+     * @{
+     * @brief Get/Set value of the bIsVisible.
+     */
+    const bool  getIsVisible () const;
+    void setIsVisible (const bool _bIsVisible);
+    /// @}
 
-    fwGettersSettersDocMacro(OrganName, sOrganName, std::string, organ name);
+    /**
+     * @{
+     * @brief Get/Set value of the organName.
+     */
+    const std::string  getOrganName () const;
+    std::string & getRefOrganName ();
+    const std::string & getCRefOrganName () const;
+    void setOrganName (const std::string& _sOrganName);
+    /// @}
 
-    fwGettersSettersDocMacro(StructureType, sStructureType, std::string, structure type);
+    /**
+     * @{
+     * @brief Get/Set value of the structureType.
+     */
+    const std::string  getStructureType () const;
+    std::string & getRefStructureType ();
+    const std::string & getCRefStructureType () const;
+    void setStructureType (const std::string& _sStructureType);
+    /// @}
 
     /**
      * @brief Get/Set the image associated with the acquisition
      */
-    fwDataGetSetSptrMacro(Image, SPTR(::fwData::Image));
+    SPTR(::fwData::Image)  getImage () const;
+    void setImage (const SPTR(::fwData::Image)& val);
 
     /**
      * @brief Get/Set the mesh associated with the acquisition
      */
-    fwDataGetSetSptrMacro(Mesh, SPTR(::fwData::Mesh));
+    SPTR(::fwData::Mesh) getMesh () const;
+    void setMesh(const SPTR(::fwData::Mesh)& val);
+    /// @}
 
     /**
      * @brief Get/Set the material associated with the acquisition
      */
-    fwDataGetSetSptrMacro(Material, SPTR(::fwData::Material));
+    SPTR(::fwData::Material) getMaterial () const;
+    void setMaterial (const SPTR(::fwData::Material)& val);
+    /// @}
+
+    /**
+     * @brief Get/Set the volume from mask
+     */
+    double  getComputedMaskVolume () const;
+    void setComputedMaskVolume (double val);
+    /// @}
+
+    /***
+     * @name Signals
+     * @{
+     */
+
+    /// Type of signal when the mesh pointer has changed, mesh parameter is used to store old mesh
+    typedef ::fwCom::Signal< void (SPTR( ::fwData::Mesh ) ) > MeshChangedSignalType;
+
+    /// Key in m_signals map of signal m_sigMeshModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_MESH_CHANGED_SIG;
+
+    /// Type of signal when mesh is modified
+    typedef ::fwCom::Signal< void () > VisibilityModifiedSignalType;
+
+    /// Key in m_signals map of signal m_sigVisibilityModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_VISIBILITY_MODIFIED_SIG;
+    /**
+     * @}
+     */
 
-protected :
+protected:
 
     //! true if this reconstruction is visible
     bool m_bIsVisible;
@@ -92,16 +146,162 @@ protected :
 
 
     //! Reconstruction's material
-    SPTR(::fwData::Material) m_attrMaterial;
+    SPTR(::fwData::Material) m_material;
 
     //! Reconstruction's mask
-    SPTR(::fwData::Image) m_attrImage;
+    SPTR(::fwData::Image) m_image;
 
     //! Reconstruction's mesh
-    SPTR(::fwData::Mesh) m_attrMesh;
+    SPTR(::fwData::Mesh) m_mesh;
+
+    //! Reconstruction's mask volume
+    double m_computedMaskVolume;
+
+    /**
+     * @name Signals
+     * @{
+     */
+
+    /// Signal emitted when mesh changed, mesh parameter is used to store old mesh
+    MeshChangedSignalType::sptr m_sigMeshChanged;
+
+    /// Signal emitted  when visibility is modified
+    VisibilityModifiedSignalType::sptr m_sigVisibilityModified;
+    /**
+     * @}
+     */
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline const bool Reconstruction::getIsVisible () const
+{
+    return m_bIsVisible;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setIsVisible (const bool _bIsVisible)
+{
+    m_bIsVisible = _bIsVisible;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string Reconstruction::getOrganName () const
+{
+    return m_sOrganName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & Reconstruction::getRefOrganName ()
+{
+    return m_sOrganName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & Reconstruction::getCRefOrganName () const
+{
+    return m_sOrganName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setOrganName (const std::string& _sOrganName)
+{
+    m_sOrganName = _sOrganName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string Reconstruction::getStructureType () const
+{
+    return m_sStructureType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & Reconstruction::getRefStructureType ()
+{
+    return this->m_sStructureType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & Reconstruction::getCRefStructureType () const
+{
+    return this->m_sStructureType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setStructureType (const std::string& _sStructureType)
+{
+    this->m_sStructureType = _sStructureType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwData::Image)  Reconstruction::getImage () const
+{
+    return m_image;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setImage (const SPTR(::fwData::Image)& val)
+{
+    m_image = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwData::Mesh) Reconstruction::getMesh () const
+{
+    return m_mesh;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setMesh(const SPTR(::fwData::Mesh)& val)
+{
+    m_mesh = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwData::Material) Reconstruction::getMaterial () const
+{
+    return m_material;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setMaterial (const SPTR(::fwData::Material)& val)
+{
+    m_material = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline double Reconstruction::getComputedMaskVolume () const
+{
+    return m_computedMaskVolume;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Reconstruction::setComputedMaskVolume (double val)
+{
+    m_computedMaskVolume = val;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace fwData
 
-#endif // _FWDATA_RECONSTRUCTION_HPP_
+#endif // __FWDATA_RECONSTRUCTION_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/ReconstructionTraits.hpp b/SrcLib/core/fwData/include/fwData/ReconstructionTraits.hpp
index 4a788f2..ff4516d 100644
--- a/SrcLib/core/fwData/include/fwData/ReconstructionTraits.hpp
+++ b/SrcLib/core/fwData/include/fwData/ReconstructionTraits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,18 +7,17 @@
 #ifndef __FWDATA_RECONSTRUCTIONTRAITS_HPP__
 #define __FWDATA_RECONSTRUCTIONTRAITS_HPP__
 
+#include "fwData/factory/new.hpp"
 #include "fwData/Node.hpp"
 #include "fwData/StructureTraits.hpp"
-#include "fwData/factory/new.hpp"
 
 fwCampAutoDeclareDataMacro((fwData)(ReconstructionTraits), FWDATA_API);
+
 namespace fwData
 {
+
 /**
- * @class   ReconstructionTraits
- * @brief   This class defines Reconstruction traits.
- * 
- * @date    2007-20011.
+ * @brief This class defines Reconstruction traits.
  *
  * A ReconstructionTraits contains :
  *  - an identifier
@@ -31,7 +30,8 @@ namespace fwData
 class FWDATA_CLASS_API ReconstructionTraits : public ::fwData::Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ReconstructionTraits)(::fwData::Object), (()), ::fwData::factory::New< ReconstructionTraits >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ReconstructionTraits)(::fwData::Object), (()),
+                                            ::fwData::factory::New< ReconstructionTraits >);
     fwCampMakeFriendDataMacro((fwData)(ReconstructionTraits));
 
     /**
@@ -45,22 +45,30 @@ public:
      */
     FWDATA_API virtual ~ReconstructionTraits();
 
-    fwGettersSettersDocMacro(Identifier, identifier, std::string, the ROIs identifier);
+    /**
+     * @{
+     * @brief Get/Set value of the identifier.
+     */
+    const std::string  getIdentifier () const;
+    std::string & getRefIdentifier ();
+    const std::string & getCRefIdentifier () const;
+    void setIdentifier (const std::string& _identifier);
+    /// @}
 
     /// Set the reconstruction operator mask node
-    FWDATA_API void setMaskOpNode( ::fwData::Node::sptr maskOpNode );
+    FWDATA_API void setMaskOpNode(const ::fwData::Node::sptr& maskOpNode );
 
     /// Get the reconstruction operator mask node. Return a null pointer if the mask node is not defined.
     FWDATA_API ::fwData::Node::sptr getMaskOpNode();
 
     /// Set the reconstruction operator mesh node.
-    FWDATA_API void setMeshOpNode( ::fwData::Node::sptr meshOpNode );
+    FWDATA_API void setMeshOpNode(const ::fwData::Node::sptr& meshOpNode );
 
     /// Get the reconstruction operator mesh node. Return a null pointer if the mesh node is not defined.
     FWDATA_API ::fwData::Node::sptr getMeshOpNode();
 
     /// Set the associated structure traits
-    FWDATA_API void setStructureTraits( ::fwData::StructureTraits::sptr structureTraits );
+    FWDATA_API void setStructureTraits(const ::fwData::StructureTraits::sptr& structureTraits );
 
     /// Get the associated structure traits
     FWDATA_API ::fwData::StructureTraits::sptr getStructureTraits();
@@ -84,6 +92,37 @@ private:
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline const std::string ReconstructionTraits::getIdentifier () const
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & ReconstructionTraits::getRefIdentifier ()
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & ReconstructionTraits::getCRefIdentifier () const
+{
+    return m_identifier;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ReconstructionTraits::setIdentifier (const std::string& _identifier)
+{
+    m_identifier = _identifier;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace fwData
 
 #endif // __FWDATA_RECONSTRUCTIONTRAITS_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/Resection.hpp b/SrcLib/core/fwData/include/fwData/Resection.hpp
index 8f3eea7..69e110a 100644
--- a/SrcLib/core/fwData/include/fwData/Resection.hpp
+++ b/SrcLib/core/fwData/include/fwData/Resection.hpp
@@ -1,41 +1,40 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_RESECTION_HPP_
-#define _FWDATA_RESECTION_HPP_
-
-#include <vector>
+#ifndef __FWDATA_RESECTION_HPP__
+#define __FWDATA_RESECTION_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/factory/new.hpp"
-#include "fwData/Reconstruction.hpp"
 #include "fwData/PlaneList.hpp"
+#include "fwData/Reconstruction.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <vector>
 
 fwCampAutoDeclareDataMacro((fwData)(Resection), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   Resection
- * @brief   This class defines a resection
- * 
- * @date    2007-2009.
+ * @brief This class defines a resection.
  */
 class FWDATA_CLASS_API Resection : public ::fwData::Object
 {
 
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro( (Resection)(::fwData::Object),
-        (()), ::fwData::factory::New< Resection >) ;
+                                            (()), ::fwData::factory::New< Resection >);
 
     fwCampMakeFriendDataMacro((fwData)(Resection));
 
     typedef std::vector< ::fwData::Reconstruction::sptr > ResectionInputs;
     typedef std::vector< ::fwData::Reconstruction::sptr > ResectionOutputs;
 
-
     /**
      * @brief Constructor
      * @param key Private construction key
@@ -51,22 +50,98 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-    /// PlaneList
-    fwGettersSettersDocMacro(PlaneList, planeList, ::fwData::PlaneList::sptr, the plane list);
-    /// Inputs
-    fwGettersSettersDocMacro(Inputs, vInputs, ResectionInputs, the resection inputs);
-    /// Outputs
-    fwGettersSettersDocMacro(Outputs, vOutputs, ResectionOutputs, the resection outputs);
+    /**
+     * @{
+     * @brief Get/Set value of the planeList.
+     */
+    const ::fwData::PlaneList::sptr  getPlaneList () const;
+    ::fwData::PlaneList::sptr & getRefPlaneList ();
+    const ::fwData::PlaneList::sptr & getCRefPlaneList () const;
+    void setPlaneList (const ::fwData::PlaneList::sptr& _planeList);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the inputs.
+     */
+    const ResectionInputs  getInputs () const;
+    ResectionInputs & getRefInputs ();
+    const ResectionInputs & getCRefInputs () const;
+    void setInputs (const ResectionInputs _vInputs);
+    void setCRefInputs (const ResectionInputs & _vInputs);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the outputs.
+     */
+    const ResectionOutputs  getOutputs () const;
+    ResectionOutputs & getRefOutputs ();
+    const ResectionOutputs & getCRefOutputs () const;
+    void setOutputs (const ResectionOutputs _vOutputs);
+    void setCRefOutputs (const ResectionOutputs & _vOutputs);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the IsSafePart.
+     */
+    const bool  getIsSafePart () const;
+    void setIsSafePart (const bool _isSafePart);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the name.
+     */
+    const std::string  getName () const;
+    std::string & getRefName ();
+    const std::string & getCRefName () const;
+    void setName (const std::string _name);
+    void setCRefName (const std::string & _name);
+
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the IsVisible.
+     */
+    const bool  getIsVisible () const;
+    void setIsVisible (const bool _isVisible);
+
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the IsValid.
+     */
+    const bool  getIsValid () const;
+    void setIsValid (const bool _isValid);
+
+    /// @}
+
+    /***
+     * @name Signals
+     * @{
+     */
+
+    /// Type of signal when a reconstruction is added
+    typedef ::fwCom::Signal< void () > ReconstructionAddedSignalType;
 
-    fwGettersSettersDocMacro(IsSafePart, isSafePart, bool, the flag if the part is safe);
+    /// Key in m_signals map of signal m_sigReconstructionAdded
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_RECONSTRUCTION_ADDED_SIG;
 
-    fwGettersSettersDocMacro(Name, name, std::string, the resection name);
+    /// Type of signal when the resection visibility is modified
+    typedef ::fwCom::Signal< void () > VisibilityModifiedSignalType;
 
-    fwGettersSettersDocMacro(IsVisible, isVisible, bool, the flag if the resection is visible);
+    /// Key in m_signals map of signal m_sigVisibilityModified
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_VISIBILITY_MODIFIED_SIG;
 
-    fwGettersSettersDocMacro(IsValid, isValid, bool, the flag if the resection is valid);
+    /**
+     * @}
+     */
 
-protected :
+protected:
 
     //! Resection name
     std::string m_name;
@@ -89,8 +164,201 @@ protected :
     //! flag if the resection is visible
     bool m_isVisible;
 
+private:
+
+    /**
+     * @name Signals attributes
+     * @{
+     */
+    /// Signal emitted when a reconstruction is added
+    ReconstructionAddedSignalType::sptr m_sigReconstructionAdded;
+
+    /// Signal emitted when the resection visibility is modified
+    VisibilityModifiedSignalType::sptr m_sigVisibilityModified;
+    /**
+     * @}
+     */
+
 }; // end class Resection
 
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::PlaneList::sptr Resection::getPlaneList () const
+{
+    return m_planeList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline ::fwData::PlaneList::sptr & Resection::getRefPlaneList ()
+{
+    return m_planeList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::PlaneList::sptr & Resection::getCRefPlaneList () const
+{
+    return m_planeList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setPlaneList (const ::fwData::PlaneList::sptr& _planeList)
+{
+    m_planeList = _planeList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Resection::ResectionInputs Resection::getInputs () const
+{
+    return m_vInputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Resection::ResectionInputs & Resection::getRefInputs ()
+{
+    return m_vInputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Resection::ResectionInputs & Resection::getCRefInputs () const
+{
+    return m_vInputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setInputs (const Resection::ResectionInputs _vInputs)
+{
+    m_vInputs = _vInputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setCRefInputs (const Resection::ResectionInputs & _vInputs)
+{
+    m_vInputs = _vInputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Resection::ResectionOutputs Resection::getOutputs () const
+{
+    return m_vOutputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline Resection::ResectionOutputs & Resection::getRefOutputs ()
+{
+    return m_vOutputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Resection::ResectionOutputs & Resection::getCRefOutputs () const
+{
+    return m_vOutputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setOutputs (const Resection::ResectionOutputs _vOutputs)
+{
+    m_vOutputs = _vOutputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setCRefOutputs (const Resection::ResectionOutputs & _vOutputs)
+{
+    m_vOutputs = _vOutputs;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const bool Resection::getIsSafePart () const
+{
+    return m_isSafePart;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setIsSafePart (const bool _isSafePart)
+{
+    m_isSafePart = _isSafePart;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string Resection::getName () const
+{
+    return m_name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & Resection::getRefName ()
+{
+    return m_name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & Resection::getCRefName () const
+{
+    return m_name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setName (const std::string _name)
+{
+    m_name = _name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setCRefName (const std::string & _name)
+{
+    m_name = _name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const bool Resection::getIsVisible () const
+{
+    return m_isVisible;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setIsVisible (const bool _isVisible)
+{
+    m_isVisible = _isVisible;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const bool Resection::getIsValid () const
+{
+    return m_isValid;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Resection::setIsValid (const bool _isValid)
+{
+    m_isValid = _isValid;
+}
+
+//-----------------------------------------------------------------------------
+
 } // end namespace fwData
 
-#endif // _FWDATA_RESECTION_HPP_
+#endif // __FWDATA_RESECTION_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/ResectionDB.hpp b/SrcLib/core/fwData/include/fwData/ResectionDB.hpp
index 49a2583..831add1 100644
--- a/SrcLib/core/fwData/include/fwData/ResectionDB.hpp
+++ b/SrcLib/core/fwData/include/fwData/ResectionDB.hpp
@@ -1,35 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_RESECTIONDB_HPP_
-#define _FWDATA_RESECTIONDB_HPP_
-
-#include <boost/cstdint.hpp>
+#ifndef __FWDATA_RESECTIONDB_HPP__
+#define __FWDATA_RESECTIONDB_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/Resection.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <boost/cstdint.hpp>
+
 fwCampAutoDeclareDataMacro((fwData)(ResectionDB), FWDATA_API);
 
 namespace fwData
 {
 /**
- * @class   ResectionDB
  * @brief   This class defines a resection container.
  *
  * @see     ::fwData::Resection
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API ResectionDB : public Object
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ResectionDB)(::fwData::Object), (()), ::fwData::factory::New< ResectionDB >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ResectionDB)(::fwData::Object), (()),
+                                            ::fwData::factory::New< ResectionDB >);
     fwCampMakeFriendDataMacro((fwData)(ResectionDB));
 
     /**
@@ -58,24 +59,108 @@ public:
     /**
      * @brief add resection
      */
-    FWDATA_API void addResection( ::fwData::Resection::sptr resection );
+    FWDATA_API void addResection(const ::fwData::Resection::sptr& resection );
 
-    fwDataGetSetCRefMacro(Resections, ResectionContainerType);
+    /**
+     * @{
+     * @brief Get/Set value of the resections.
+     */
+    const ResectionContainerType &getResections () const;
+    void setResections (const ResectionContainerType &val);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the safe resection.
+     */
+    const ::fwData::Resection::sptr  getSafeResection() const;
+    ::fwData::Resection::sptr & getRefSafeResection();
+    const ::fwData::Resection::sptr & getCRefSafeResection() const;
+    void setSafeResection(const ::fwData::Resection::sptr& _safeResection);
+    /// @}
 
-    fwGettersSettersDocMacro(SafeResection, safeResection, ::fwData::Resection::sptr, Get the safe part of the resections);
+
+    /***
+     * @name Signals
+     * @{
+     */
+
+    /// Type of signal when the safe part is added
+    typedef ::fwCom::Signal< void () > SafePartAddedSignalType;
+
+    /// Key in m_signals map of signal m_sigSafePartAdded
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_SAFE_PART_ADDED_SIG;
+
+    /// Type of signal when a resection is added
+    typedef ::fwCom::Signal< void () > ResectionAddedSignalType;
+
+    /// Key in m_signals map of signal m_sigResectionAdded
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_RESECTION_ADDED_SIG;
+
+    /**
+     * @}
+     */
 
 protected:
 
     ::fwData::Resection::sptr m_safeResection;
 
-    ResectionContainerType m_attrResections;
+    ResectionContainerType m_resections;
+
+private:
+
+    /// Signal emitted when the safe part is added
+    SafePartAddedSignalType::sptr m_sigSafePartAdded;
+
+    /// Signal emitted when a resection is added
+    ResectionAddedSignalType::sptr m_sigResectionAdded;
 };
 
-}//end namespace fwData
+//-----------------------------------------------------------------------------
+
+inline const ResectionDB::ResectionContainerType &ResectionDB::getResections () const
+{
+    return m_resections;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ResectionDB::setResections (const ResectionDB::ResectionContainerType &val)
+{
+    m_resections = val;
+}
+
+//-----------------------------------------------------------------------------
 
+inline const ::fwData::Resection::sptr ResectionDB::getSafeResection() const
+{
+    return m_safeResection;
+}
+
+//-----------------------------------------------------------------------------
+
+inline ::fwData::Resection::sptr & ResectionDB::getRefSafeResection()
+{
+    return m_safeResection;
+}
+
+//-----------------------------------------------------------------------------
 
+inline const ::fwData::Resection::sptr & ResectionDB::getCRefSafeResection() const
+{
+    return m_safeResection;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ResectionDB::setSafeResection(const ::fwData::Resection::sptr& _safeResection)
+{
+    m_safeResection = _safeResection;
+}
 
+//-----------------------------------------------------------------------------
 
-#endif // _FWDATA_RESECTIONDB_HPP_
+} // namespace fwData
 
+#endif // __FWDATA_RESECTIONDB_HPP__
 
diff --git a/SrcLib/core/fwData/include/fwData/Spline.hpp b/SrcLib/core/fwData/include/fwData/Spline.hpp
index d4ee6ad..987f483 100644
--- a/SrcLib/core/fwData/include/fwData/Spline.hpp
+++ b/SrcLib/core/fwData/include/fwData/Spline.hpp
@@ -1,31 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_SPLINE_HPP_
-#define _FWDATA_SPLINE_HPP_
-
-#include <vector>
-#include <boost/cstdint.hpp>
+#ifndef __FWDATA_SPLINE_HPP__
+#define __FWDATA_SPLINE_HPP__
 
+#include "fwData/Color.hpp"
 #include "fwData/config.hpp"
 #include "fwData/factory/new.hpp"
-#include "fwData/Color.hpp"
+
+#include <boost/cstdint.hpp>
+#include <vector>
+
 
 namespace fwData
 {
+
 /**
- * @class   Spline
- * @brief   This class defines a spline object.
- * 
- * @date    2007-2009.
+ * @brief This class defines a spline object.
  */
 class FWDATA_CLASS_API Spline : public Object
 {
-public :
-    fwCoreClassDefinitionsWithFactoryMacro( (Spline)(::fwData::Object), (()), ::fwData::factory::New< Spline >) ;
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (Spline)(::fwData::Object), (()), ::fwData::factory::New< Spline >);
 
     /**
      * @struct point
@@ -43,21 +42,21 @@ public :
 
         point &operator=( const point & _point )
         {
-            this->id = _point.id;
-            this->p[0] = _point.p[0];
-            this->p[1] = _point.p[1];
-            this->p[2] = _point.p[2];
+            this->id        = _point.id;
+            this->p[0]      = _point.p[0];
+            this->p[1]      = _point.p[1];
+            this->p[2]      = _point.p[2];
             this->normal[0] = _point.normal[0];
             this->normal[1] = _point.normal[1];
             this->normal[2] = _point.normal[2];
             this->isVisible = _point.isVisible;
-            c = ::fwData::Object::copy( _point.c );
+            c               = ::fwData::Object::copy( _point.c );
             return(*this);
-        };
+        }
     };
 
     /// 3D %point container
-    typedef std::vector< point > Points ;
+    typedef std::vector< point > Points;
 
     /**
      * @brief Constructor
@@ -68,32 +67,159 @@ public :
     /**
      * @brief destructor
      */
-    FWDATA_API virtual ~Spline() ;
+    FWDATA_API virtual ~Spline();
 
     /**
      * @brief returns editable point container
      */
-    FWDATA_API Points &points() ;
+    FWDATA_API Points &points();
 
-    fwGettersSettersDocMacro(Radius, radius, double, radius value);
+    /**
+     * @{
+     * @brief Get/Set value of the radius.
+     */
+    const double  getRadius () const;
+    double & getRefRadius ();
+    const double & getCRefRadius () const;
+    void setRadius(double _radius);
+    /// @}
 
-    fwGettersSettersDocMacro(NbSides, nbSides, int, number of slices);
+    /**
+     * @{
+     * @brief Get/Set value of the number of slices.
+     */
+    const int  getNbSides () const;
+    int & getRefNbSides ();
+    const int & getCRefNbSides () const;
+    void setNbSides (const int _nbSides);
+    void setCRefNbSides (const int & _nbSides);
+    /// @}
 
-    fwGettersSettersDocMacro(IdSpline, idSpline, int, spline identifier);
+    /**
+     * @{
+     * @brief Get/Set value of the spline identifier.
+     */
+    const int  getIdSpline () const;
+    int & getRefIdSpline ();
+    const int & getCRefIdSpline () const;
+    void setIdSpline (const int _idSpline);
+    void setCRefIdSpline (const int & _idSpline);
+    /// @}
 
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-protected :
+protected:
 
     /// Points container
-    Points      m_points ;
-    double      m_radius;
-    int         m_nbSides;
-    int         m_idSpline;
+    Points m_points;
+    double m_radius;
+    int m_nbSides;
+    int m_idSpline;
+
+};
 
-} ;
+//-----------------------------------------------------------------------------
 
+inline const double Spline::getRadius () const
+{
+    return m_radius;
 }
 
-#endif // _FWDATA_SPLINE_HPP_
+//-----------------------------------------------------------------------------
+
+inline double & Spline::getRefRadius ()
+{
+    return m_radius;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const double & Spline::getCRefRadius () const
+{
+    return m_radius;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Spline::setRadius(double _radius)
+{
+    m_radius = _radius;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const int Spline::getNbSides () const
+{
+    return m_nbSides;
+}
+
+//-----------------------------------------------------------------------------
+
+inline int & Spline::getRefNbSides ()
+{
+    return this->m_nbSides;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const int & Spline::getCRefNbSides () const
+{
+    return m_nbSides;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Spline::setNbSides (const int _nbSides)
+{
+    m_nbSides = _nbSides;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Spline::setCRefNbSides (const int & _nbSides)
+{
+    m_nbSides = _nbSides;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const int Spline::getIdSpline () const
+{
+    return m_idSpline;
+}
+
+//-----------------------------------------------------------------------------
+
+inline int & Spline::getRefIdSpline ()
+{
+    return m_idSpline;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const int & Spline::getCRefIdSpline () const
+{
+    return m_idSpline;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Spline::setIdSpline (const int _idSpline)
+{
+    m_idSpline = _idSpline;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Spline::setCRefIdSpline (const int & _idSpline)
+{
+    m_idSpline = _idSpline;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace fwData
+
+#endif // __FWDATA_SPLINE_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/String.hpp b/SrcLib/core/fwData/include/fwData/String.hpp
index 2f78c9c..e21869e 100644
--- a/SrcLib/core/fwData/include/fwData/String.hpp
+++ b/SrcLib/core/fwData/include/fwData/String.hpp
@@ -1,34 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_STRING_HPP_
-#define _FWDATA_STRING_HPP_
+#ifndef __FWDATA_STRING_HPP__
+#define __FWDATA_STRING_HPP__
 
 
-#include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/GenericField.hpp"
+#include "fwData/Object.hpp"
 
 fwCampAutoDeclareDataMacro((fwData)(String), FWDATA_API);
 
 namespace fwData
 {
+
 /**
- * @class   String
- * @brief   This class contains an std::string value
+ * @brief This class contains an std::string value.
  *
  * String object is essentially used as a field in other objects.
- *
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API String : public GenericField< std::string >
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (String)(::fwData::Object), ( ((const std::string)("")) ), GenericFieldFactory< String >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (String)(::fwData::Object), ( ((const std::string)("")) ),
+                                            GenericFieldFactory< String >);
     fwCampMakeFriendDataMacro((fwData)(String));
 
     /**
@@ -50,8 +48,7 @@ public:
 
 };
 
+} // namespace fwData
 
+#endif /* __FWDATA_STRING_HPP__ */
 
-}
-
-#endif /*_FWDATA_STRING_HPP_*/
diff --git a/SrcLib/core/fwData/include/fwData/StructureTraits.hpp b/SrcLib/core/fwData/include/fwData/StructureTraits.hpp
index 42b19e0..f41d151 100644
--- a/SrcLib/core/fwData/include/fwData/StructureTraits.hpp
+++ b/SrcLib/core/fwData/include/fwData/StructureTraits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,8 +8,8 @@
 #define __FWDATA_STRUCTURETRAITS_HPP__
 
 #include "fwData/Color.hpp"
-#include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
+#include "fwData/Object.hpp"
 
 
 fwCampAutoDeclareDataMacro((fwData)(StructureTraits), FWDATA_API);
@@ -17,10 +17,7 @@ fwCampAutoDeclareDataMacro((fwData)(StructureTraits), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   StructureTraits
- * @brief   This class defines structure traits.
- * 
- * @date    2007-2011.
+ * @brief This class defines structure traits.
  *
  * A structure traits contains :
  *  - [required] a type (ie. Skin, Liver, ...)
@@ -34,7 +31,8 @@ namespace fwData
 class FWDATA_CLASS_API StructureTraits : public ::fwData::Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (StructureTraits)(::fwData::Object), (()), ::fwData::factory::New< StructureTraits >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (StructureTraits)(::fwData::Object), (()),
+                                            ::fwData::factory::New< StructureTraits >);
     fwCampMakeFriendDataMacro((fwData)(StructureTraits));
 
     /// Defines structure categories
@@ -76,27 +74,118 @@ public:
     /// Destructor. Does nothing.
     FWDATA_API virtual ~StructureTraits();
 
-    fwGettersSettersDocMacro(Type, type, std::string, the structure type);
+    /**
+     * @{
+     * @brief Get/Set value of the structure type.
+     */
+    const std::string  getType () const;
+    std::string & getRefType ();
+    const std::string & getCRefType () const;
+    void setType (const std::string & _type);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the categories.
+     */
+    const CategoryContainer getCategories () const;
+    CategoryContainer & getRefCategories ();
+    const CategoryContainer & getCRefCategories () const;
+    void setCategories (const CategoryContainer _categories);
+    void setCRefCategories (const CategoryContainer & _categories);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the class.
+     */
+    const StructureClass getClass () const;
+    StructureClass & getRefClass ();
+    const StructureClass & getCRefClass () const;
+    void setClass (const StructureClass _class);
+    void setCRefClass (const StructureClass & _class);
+    /// @}
+
+    /**
+     * @{
+     * @brief Get/Set value of the nativeExp.
+     */
+    const ROIExpression  getNativeExp () const;
+    ROIExpression & getRefNativeExp ();
+    const ROIExpression & getCRefNativeExp () const;
+    void setNativeExp (const ROIExpression _nativeExp);
+    void setCRefNativeExp (const ROIExpression & _nativeExp);
+    /// @}
 
-    fwGettersSettersDocMacro(Categories, categories, CategoryContainer, the structure type);
+    /**
+     * @{
+     * @brief Get/Set value of the nativeGeometricExp.
+     */
+    const ROIExpression  getNativeGeometricExp () const;
+    ROIExpression & getRefNativeGeometricExp ();
+    const ROIExpression & getCRefNativeGeometricExp () const;
+    void setNativeGeometricExp (const ROIExpression _nativeGeometricExp);
+    void setCRefNativeGeometricExp (const ROIExpression & _nativeGeometricExp);
 
-    fwGettersSettersDocMacro(Class, class, StructureClass, the structure class);
+    /// @}
 
-    fwGettersSettersDocMacro(NativeExp, nativeExp, ROIExpression, the native ROI expression);
+    /**
+     * @{
+     * @brief Get/Set value of the attachmentType.
+     */
+    const std::string  getAttachmentType () const;
+    std::string & getRefAttachmentType ();
+    const std::string & getCRefAttachmentType () const;
+    void setAttachmentType (const std::string _attachmentType);
+    void setCRefAttachmentType (const std::string & _attachmentType);
 
-    fwGettersSettersDocMacro(NativeGeometricExp, nativeGeometricExp, ROIExpression, the native geometric ROI expression);
+    /// @}
 
-    fwGettersSettersDocMacro(AttachmentType, attachmentType, std::string, structure attachment type if class is LESION or FUNCTIONAL);
+    /**
+     * @{
+     * @brief Get/Set value of the color.
+     */
+    const ::fwData::Color::sptr  getColor () const;
+    ::fwData::Color::sptr & getRefColor ();
+    const ::fwData::Color::sptr & getCRefColor () const;
+    void setColor (const ::fwData::Color::sptr _color);
+    void setCRefColor (const ::fwData::Color::sptr & _color);
+    /// @}
 
-    fwGettersSettersDocMacro(Color, color, ::fwData::Color::sptr, structure default color);
+    /**
+     * @{
+     * @brief Get/Set value of the anatomicRegion.
+     */
 
-    /// Get Organ dicom Designation.
+    const std::string  getAnatomicRegion () const;
+    std::string & getRefAnatomicRegion ();
+    const std::string & getCRefAnatomicRegion () const;
+    void setAnatomicRegion (const std::string _anatomicRegion);
+    void setCRefAnatomicRegion (const std::string & _anatomicRegion);
+    /// @}
 
-    fwGettersSettersDocMacro(AnatomicRegion, anatomicRegion, std::string, Dicom anatomic region);
+    /**
+     * @{
+     * @brief Get/Set value of the propertyCategory.
+     */
+    const std::string  getPropertyCategory () const;
+    std::string & getRefPropertyCategory ();
+    const std::string & getCRefPropertyCategory () const;
+    void setPropertyCategory (const std::string _propertyCategory);
+    void setCRefPropertyCategory (const std::string & _propertyCategory);
 
-    fwGettersSettersDocMacro(PropertyCategory, propertyCategory, std::string, Dicom property category);
+    /// @}
 
-    fwGettersSettersDocMacro(PropertyType, propertyType, std::string, Dicom property type);
+    /**
+     * @{
+     * @brief Get/Set value of the propertyType.
+     */
+    const std::string  getPropertyType () const;
+    std::string & getRefPropertyType ();
+    const std::string & getCRefPropertyType () const;
+    void setPropertyType (const std::string _propertyType);
+    void setCRefPropertyType (const std::string & _propertyType);
+    /// @}
 
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
@@ -134,6 +223,352 @@ private:
     std::string m_propertyType;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const std::string StructureTraits::getType () const
+{
+    return m_type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & StructureTraits::getRefType ()
+{
+    return m_type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & StructureTraits::getCRefType () const
+{
+    return m_type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setType (const std::string & _type)
+{
+    m_type = _type;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::CategoryContainer StructureTraits::getCategories () const
+{
+    return m_categories;
+}
+
+//-----------------------------------------------------------------------------
+
+inline StructureTraits::CategoryContainer & StructureTraits::getRefCategories ()
+{
+    return m_categories;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::CategoryContainer & StructureTraits::getCRefCategories () const
+{
+    return m_categories;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCategories (const StructureTraits::CategoryContainer _categories)
+{
+    m_categories = _categories;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefCategories (const StructureTraits::CategoryContainer & _categories)
+{
+    m_categories = _categories;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::StructureClass StructureTraits::getClass () const
+{
+    return m_class;
+}
+
+//-----------------------------------------------------------------------------
+
+inline StructureTraits::StructureClass & StructureTraits::getRefClass ()
+{
+    return m_class;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::StructureClass & StructureTraits::getCRefClass () const
+{
+    return m_class;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setClass (const StructureTraits::StructureClass _class)
+{
+    m_class = _class;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefClass (const StructureTraits::StructureClass & _class)
+{
+    m_class = _class;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::ROIExpression StructureTraits::getNativeExp () const
+{
+    return m_nativeExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline StructureTraits::ROIExpression & StructureTraits::getRefNativeExp ()
+{
+    return m_nativeExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::ROIExpression & StructureTraits::getCRefNativeExp () const
+{
+    return m_nativeExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setNativeExp (const StructureTraits::ROIExpression _nativeExp)
+{
+    m_nativeExp = _nativeExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefNativeExp (const StructureTraits::ROIExpression & _nativeExp)
+{
+    m_nativeExp = _nativeExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::ROIExpression StructureTraits::getNativeGeometricExp () const
+{
+    return m_nativeGeometricExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline StructureTraits::ROIExpression & StructureTraits::getRefNativeGeometricExp ()
+{
+    return m_nativeGeometricExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const StructureTraits::ROIExpression & StructureTraits::getCRefNativeGeometricExp () const
+{
+    return m_nativeGeometricExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setNativeGeometricExp (const StructureTraits::ROIExpression _nativeGeometricExp)
+{
+    m_nativeGeometricExp = _nativeGeometricExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefNativeGeometricExp (const StructureTraits::ROIExpression & _nativeGeometricExp)
+{
+    m_nativeGeometricExp = _nativeGeometricExp;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string StructureTraits::getAttachmentType () const
+{
+    return m_attachmentType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & StructureTraits::getRefAttachmentType ()
+{
+    return m_attachmentType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & StructureTraits::getCRefAttachmentType () const
+{
+    return m_attachmentType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setAttachmentType (const std::string _attachmentType)
+{
+    m_attachmentType = _attachmentType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefAttachmentType (const std::string & _attachmentType)
+{
+    m_attachmentType = _attachmentType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::Color::sptr StructureTraits::getColor () const
+{
+    return m_color;
+}
+
+//-----------------------------------------------------------------------------
+
+inline ::fwData::Color::sptr & StructureTraits::getRefColor ()
+{
+    return m_color;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::Color::sptr & StructureTraits::getCRefColor () const
+{
+    return m_color;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setColor (const ::fwData::Color::sptr _color)
+{
+    m_color = _color;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefColor (const ::fwData::Color::sptr & _color)
+{
+    m_color = _color;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string StructureTraits::getAnatomicRegion () const
+{
+    return m_anatomicRegion;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & StructureTraits::getRefAnatomicRegion ()
+{
+    return m_anatomicRegion;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & StructureTraits::getCRefAnatomicRegion () const
+{
+    return m_anatomicRegion;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setAnatomicRegion (const std::string _anatomicRegion)
+{
+    m_anatomicRegion = _anatomicRegion;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefAnatomicRegion (const std::string & _anatomicRegion)
+{
+    m_anatomicRegion = _anatomicRegion;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string StructureTraits::getPropertyCategory () const
+{
+    return m_propertyCategory;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & StructureTraits::getRefPropertyCategory ()
+{
+    return m_propertyCategory;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & StructureTraits::getCRefPropertyCategory () const
+{
+    return m_propertyCategory;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setPropertyCategory (const std::string _propertyCategory)
+{
+    m_propertyCategory = _propertyCategory;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefPropertyCategory (const std::string & _propertyCategory)
+{
+    m_propertyCategory = _propertyCategory;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string StructureTraits::getPropertyType () const
+{
+    return m_propertyType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & StructureTraits::getRefPropertyType ()
+{
+    return m_propertyType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & StructureTraits::getCRefPropertyType () const
+{
+    return m_propertyType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setPropertyType (const std::string _propertyType)
+{
+    m_propertyType = _propertyType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void StructureTraits::setCRefPropertyType (const std::string & _propertyType)
+{
+    m_propertyType = _propertyType;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace fwData
 
 #endif // __FWDATA_STRUCTURETRAITS_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/StructureTraitsDictionary.hpp b/SrcLib/core/fwData/include/fwData/StructureTraitsDictionary.hpp
index 4beabed..a29c7fb 100644
--- a/SrcLib/core/fwData/include/fwData/StructureTraitsDictionary.hpp
+++ b/SrcLib/core/fwData/include/fwData/StructureTraitsDictionary.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,7 @@ fwCampAutoDeclareDataMacro((fwData)(StructureTraitsDictionary), FWDATA_API);
 namespace fwData
 {
 /**
- * @class   StructureTraitsDictionary
- * @brief   This class defines a dictionary of structure traits.
- * 
- * @date    2007-2011.
+ * @brief This class defines a dictionary of structure traits.
  *
  * @note The dictionary cannot contain two structure with the same type.
  * @see StructureTraits
@@ -27,7 +24,8 @@ namespace fwData
 class FWDATA_CLASS_API StructureTraitsDictionary : public ::fwData::Object
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (StructureTraitsDictionary)(::fwData::Object), (()), ::fwData::factory::New< StructureTraitsDictionary >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (StructureTraitsDictionary)(::fwData::Object), (()),
+                                            ::fwData::factory::New< StructureTraitsDictionary >);
     fwCampMakeFriendDataMacro((fwData)(StructureTraitsDictionary));
 
     typedef std::vector<std::string> StructureTypeNameContainer;
@@ -79,3 +77,4 @@ private:
 } // namespace fwData
 
 #endif // __FWDATA_STRUCTURETRAITSDICTIONARY_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/StructureTraitsHelper.hpp b/SrcLib/core/fwData/include/fwData/StructureTraitsHelper.hpp
index 4cec9d6..15e246c 100644
--- a/SrcLib/core/fwData/include/fwData/StructureTraitsHelper.hpp
+++ b/SrcLib/core/fwData/include/fwData/StructureTraitsHelper.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,25 +7,21 @@
 #ifndef __FWDATA_STRUCTURETRAITSHELPER_HPP__
 #define __FWDATA_STRUCTURETRAITSHELPER_HPP__
 
-#include <boost/bimap/bimap.hpp>
-
-#include <fwData/StructureTraits.hpp>
-
 #include "fwData/config.hpp"
+#include "fwData/StructureTraits.hpp"
+
+#include <boost/bimap/bimap.hpp>
 
 namespace fwData
 {
+
 /**
- * @class   StructureTraitsHelper
- * @brief   This class defines some helper for the structure traits.
- * 
- * @date    2007-20011.
+ * @brief This class defines some helper for the structure traits.
  */
-
 class FWDATA_CLASS_API StructureTraitsHelper
 {
 
-public :
+public:
 
     typedef ::boost::bimaps::bimap< ::fwData::StructureTraits::StructureClass, std::string > ClassTranslatorType;
     /// Map to translate structure class (string vs enum)
diff --git a/SrcLib/core/fwData/include/fwData/Tag.hpp b/SrcLib/core/fwData/include/fwData/Tag.hpp
index d5d3822..c88b535 100644
--- a/SrcLib/core/fwData/include/fwData/Tag.hpp
+++ b/SrcLib/core/fwData/include/fwData/Tag.hpp
@@ -1,37 +1,33 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_TAG_HPP_
-#define _FWDATA_TAG_HPP_
-
-
-#include <vector>
+#ifndef __FWDATA_TAG_HPP__
+#define __FWDATA_TAG_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/PointList.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <vector>
+
 fwCampAutoDeclareDataMacro((fwData)(Tag), FWDATA_API);
 
 namespace fwData
 {
+
 /**
- * @class   Tag
- * @brief   This class represent a tag. A tag contains a list of points.
- *
+ * @brief This class represent a tag. A tag contains a list of points.
  * @see ::fwData::PointList
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Tag : public Object
 {
 
-public :
-    fwCoreClassDefinitionsWithFactoryMacro( (Tag)(::fwData::Object), (()), ::fwData::factory::New< Tag >) ;
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (Tag)(::fwData::Object), (()), ::fwData::factory::New< Tag >);
 
 
     /**
@@ -45,11 +41,37 @@ public :
 
     fwCampMakeFriendDataMacro((fwData)(Tag));
 
-    fwGettersSettersDocMacro(PointList, pointList, ::fwData::PointList::sptr, the list of points )
+    /**
+     * @{
+     * @brief Get/Set value of the pointList.
+     */
+    const ::fwData::PointList::sptr  getPointList () const;
+    ::fwData::PointList::sptr & getRefPointList ();
+    const ::fwData::PointList::sptr & getCRefPointList () const;
+    void setPointList (const ::fwData::PointList::sptr & _pointList);
+    /// @}
 
-    fwGettersSettersDocMacro(Type, sType, std::string, the type of tag)
+    /**
+     * @{
+     * @brief Get/Set value of the Type.
+     */
+    const std::string  getType () const;
+    std::string & getRefType ();
+    const std::string & getCRefType () const;
+    void setType (const std::string _sType);
+    void setCRefType (const std::string & _sType);
+    /// @}
 
-    fwGettersSettersDocMacro(Size, size, double, the size of the tag)
+    /**
+     * @{
+     * @brief Get/Set value of the Tag size.
+     */
+    const double  getSize () const;
+    double & getRefSize ();
+    const double & getCRefSize () const;
+    void setSize (const double _size);
+    void setCRefSize (const double & _size);
+    /// @}
 
     /// Defines shallow copy
     FWDATA_API void shallowCopy( const Object::csptr& source );
@@ -57,10 +79,10 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& source, DeepCopyCacheType &cache);
 
-protected :
+protected:
 
     /// list of points
-    ::fwData::PointList::sptr  m_pointList;
+    ::fwData::PointList::sptr m_pointList;
 
     /// type of tag
     std::string m_sType;
@@ -70,7 +92,108 @@ protected :
 
 }; // end class Tag
 
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::PointList::sptr Tag::getPointList () const
+{
+    return m_pointList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline ::fwData::PointList::sptr & Tag::getRefPointList ()
+{
+    return this->m_pointList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ::fwData::PointList::sptr & Tag::getCRefPointList () const
+{
+    return this->m_pointList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Tag::setPointList (const ::fwData::PointList::sptr & _pointList)
+{
+    this->m_pointList = _pointList;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string Tag::getType () const
+{
+    return m_sType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline std::string & Tag::getRefType ()
+{
+    return m_sType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string & Tag::getCRefType () const
+{
+    return m_sType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Tag::setType (const std::string _sType)
+{
+    this->m_sType = _sType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Tag::setCRefType (const std::string & _sType)
+{
+    this->m_sType = _sType;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const double Tag::getSize () const
+{
+    return m_size;
+}
+
+//-----------------------------------------------------------------------------
+
+inline double & Tag::getRefSize ()
+{
+    return m_size;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const double & Tag::getCRefSize () const
+{
+    return m_size;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Tag::setSize (const double _size)
+{
+    m_size = _size;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Tag::setCRefSize (const double & _size)
+{
+    m_size = _size;
+}
+
+//-----------------------------------------------------------------------------
+
 } // end namespace fwData
 
 
-#endif // _FWDATA_TAG_HPP_
+#endif // __FWDATA_TAG_HPP__
+
diff --git a/SrcLib/core/fwData/include/fwData/TransferFunction.hpp b/SrcLib/core/fwData/include/fwData/TransferFunction.hpp
index bd1b89d..28a6831 100644
--- a/SrcLib/core/fwData/include/fwData/TransferFunction.hpp
+++ b/SrcLib/core/fwData/include/fwData/TransferFunction.hpp
@@ -1,40 +1,40 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_TRANSFERFUNCTION_HPP_
-#define _FWDATA_TRANSFERFUNCTION_HPP_
-
-#include <vector>
-#include <map>
-#include <limits>
+#ifndef __FWDATA_TRANSFERFUNCTION_HPP__
+#define __FWDATA_TRANSFERFUNCTION_HPP__
 
 #include "fwData/config.hpp"
-#include "fwData/macros.hpp"
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <vector>
+#include <map>
+#include <limits>
+
 fwCampAutoDeclareDataMacro((fwData)(TransferFunction), FWDATA_API);
 
 namespace fwData
 {
+
 /**
- * @class   TransferFunction
- * @brief   This class defines a transfer function.
+ * @brief This class defines a transfer function.
  *
  * A transfer function is composed of some points which have a color and a value.
- *
- * 
- * @date    2007-2009.
  */
-
 class FWDATA_CLASS_API TransferFunction : public Object
 {
-public :
 
-    fwCoreClassDefinitionsWithFactoryMacro( (TransferFunction)(::fwData::Object), (()), ::fwData::factory::New< TransferFunction >) ;
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro( (TransferFunction)(::fwData::Object), (()),
+                                            ::fwData::factory::New< TransferFunction >);
 
     /// Macro for deep and shallow copies
 
@@ -62,7 +62,7 @@ public :
             g = 0.0;
             b = 0.0;
             a = 0.0;
-        };
+        }
 
         TFColor( ColorType _r, ColorType _g, ColorType _b, ColorType _a )
         {
@@ -70,12 +70,12 @@ public :
             g = _g;
             b = _b;
             a = _a;
-        };
+        }
 
         inline bool operator== (const TFColor& _color) const
         {
             return (r == _color.r && g == _color.g && b == _color.b && a == _color.a);
-        };
+        }
 
     };
 
@@ -165,57 +165,182 @@ public :
     FWDATA_API const TFColor& getTFColor( TFValueType value ) const;
 
     /// Interpolation mode
-    fwDataGetSetMacro(InterpolationMode, InterpolationMode);
+    InterpolationMode  getInterpolationMode () const;
+
+    void setInterpolationMode (InterpolationMode val);
 
     /// Level
-    fwDataGetSetMacro(Level, double);
+    double  getLevel () const;
+    void setLevel (double val);
 
     /// Window
-    fwDataGetSetMacro(Window, double);
+    double getWindow () const;
+    void setWindow (double val);
 
     /// Transfert function name
-    fwDataGetSetCRefMacro(Name, std::string);
+    const std::string &getName () const;
+    void setName (const std::string &val);
 
     /// is TF clamped
-    fwDataGetSetMacro(IsClamped, bool);
+    bool  getIsClamped () const;
+    void setIsClamped (bool val);
 
     /// set the TF background color when tf 'IsClamped' is true
-    fwDataGetSetCRefMacro(BackgroundColor, TFColor);
+    const TFColor &getBackgroundColor () const;
+    void setBackgroundColor (const TFColor &val);
 
     /// Default transfer function name
     FWDATA_API static const std::string s_DEFAULT_TF_NAME;
 
-private :
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when points are modified
+    typedef ::fwCom::Signal< void () > PointsModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_POINTS_MODIFIED_SIG;
+
+    /// Type of signal when window-level is modified (window, level)
+    typedef ::fwCom::Signal< void (double, double) > WindowingModifiedSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_WINDOWING_MODIFIED_SIG;
+    /**
+     * @}
+     */
+
+private:
 
     /// Current visualization level
-    double m_attrLevel;
+    double m_level;
 
     /// Current visualization window
-    double m_attrWindow;
+    double m_window;
 
     ///  Function transfer name.
-    std::string m_attrName;
+    std::string m_name;
 
     /// The recommended background color to use this TF.
-    TFColor m_attrBackgroundColor;
+    TFColor m_backgroundColor;
 
     /// The Transfer function data.
     TFDataType m_tfData;
 
     /// The current interpolation mode.
-    InterpolationMode m_attrInterpolationMode;
+    InterpolationMode m_interpolationMode;
 
     /**
      *  @brief Defines interpolation mode on extremities
      *
      *  if m_isClamped == true then after extremity point, the returned TF color is TFColor(0,0,0,0).
      *  if m_isClamped == false then after extremity point, the returned TF color is one of the extremity color value.
-    **/
-    bool m_attrIsClamped;
+     **/
+    bool m_isClamped;
+
+}; // class TransferFunction
+
+//-----------------------------------------------------------------------------
+
+inline TransferFunction::TFColor TransferFunction::getInterpolatedColor( TFValueType value ) const
+{
+    TFColor color;
+
+    if(m_interpolationMode == LINEAR)
+    {
+        color = this->getLinearColor(value);
+    }
+    else if(m_interpolationMode == NEAREST)
+    {
+        color = this->getNearestColor(value);
+    }
+    return color;
+}
+
+//-----------------------------------------------------------------------------
+
+inline TransferFunction::InterpolationMode TransferFunction::getInterpolationMode () const
+{
+    return m_interpolationMode;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransferFunction::setInterpolationMode (InterpolationMode val)
+{
+    m_interpolationMode = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline double TransferFunction::getLevel () const
+{
+    return m_level;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransferFunction::setLevel (double val)
+{
+    m_level = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline double TransferFunction::getWindow () const
+{
+    return m_window;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransferFunction::setWindow (double val)
+{
+    m_window = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const std::string &TransferFunction::getName () const
+{
+    return m_name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransferFunction::setName (const std::string &val)
+{
+    m_name = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool TransferFunction::getIsClamped () const
+{
+    return m_isClamped;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransferFunction::setIsClamped (bool val)
+{
+    m_isClamped = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const TransferFunction::TFColor &TransferFunction::getBackgroundColor () const
+{
+    return m_backgroundColor;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransferFunction::setBackgroundColor (const TFColor &val)
+{
+    m_backgroundColor = val;
+}
 
-}; // end class TransferFunction
+//-----------------------------------------------------------------------------
 
-} // end namespace fwData
+} // namespace fwData
 
+#endif // __FWDATA_TRANSFERFUNCTION_HPP__
 
-#endif // _FWDATA_TRANSFERFUNCTION_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp b/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp
index 58d656b..fdf6e0c 100644
--- a/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp
+++ b/SrcLib/core/fwData/include/fwData/TransformationMatrix3D.hpp
@@ -1,43 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_TRANSFORMATIONMATRIX3D_HPP_
-#define _FWDATA_TRANSFORMATIONMATRIX3D_HPP_
+#ifndef __FWDATA_TRANSFORMATIONMATRIX3D_HPP__
+#define __FWDATA_TRANSFORMATIONMATRIX3D_HPP__
 
-#include <vector>
+#include "fwData/factory/new.hpp"
+#include "fwData/Object.hpp"
+
+#include <array>
 #include <iostream>
 #include <assert.h>
 
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-
 fwCampAutoDeclareDataMacro((fwData)(TransformationMatrix3D), FWDATA_API);
 
 namespace fwData
 {
 
 /**
- * @class   TransformationMatrix3D
- * @brief   This class represents a 3D transformation matrix (4x4)
- * 
- * @date    2007-2009.
+ * @brief This class represents a 3D transformation matrix (4x4).
  */
 class FWDATA_CLASS_API TransformationMatrix3D : public Object
 {
 
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro( (TransformationMatrix3D)(::fwData::Object),
-            (()), ::fwData::factory::New< TransformationMatrix3D >) ;
+                                            (()), ::fwData::factory::New< TransformationMatrix3D >);
 
     fwCampMakeFriendDataMacro((fwData)(TransformationMatrix3D));
 
     typedef double TM3DType;
-    typedef std::vector<TM3DType> TMCoefArray;
-
-    //duplication methods
+    typedef std::array<TM3DType, 16> TMCoefArray;
 
     /**
      * @brief Constructor
@@ -54,26 +49,28 @@ public :
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-
-    fwGettersSettersDocMacro(Coefficients, vCoefficients, TMCoefArray, the elements of the matrix)
+    /// Getters/setters
+    TMCoefArray & getRefCoefficients ();
+    const TMCoefArray & getCoefficients () const;
+    void setCoefficients (const TMCoefArray& _vCoefficients);
 
     /**
      * @{
      * @brief Get/Set value of the coefficient in the given position (matrix[l][c])
      */
-    FWDATA_API double getCoefficient(int l, int c) const;
-    FWDATA_API void setCoefficient(int l, int c, TM3DType val);
+    FWDATA_API TM3DType getCoefficient(size_t l, size_t c) const;
+    FWDATA_API void setCoefficient(size_t l, size_t c, TM3DType val);
     /// @}
 
     /// maximum size of the matrix (MATRIX_SIZE x MATRIX_SIZE)
-    static const int MATRIX_SIZE = 4;
+    static const size_t MATRIX_SIZE = 4;
 
     /// Print the coefficients of the matrix
     friend std::ostream& operator<<(std::ostream& s, const TransformationMatrix3D& mat)
     {
-        for(int l = 0; l < MATRIX_SIZE; l++)
+        for(size_t l = 0; l < MATRIX_SIZE; l++)
         {
-            for(int c = 0; c < MATRIX_SIZE; c++)
+            for(size_t c = 0; c < MATRIX_SIZE; c++)
             {
                 s << mat.getCoefficient(l, c) << "\t";
             }
@@ -82,12 +79,52 @@ public :
         return s;
     }
 
-protected :
+protected:
 
     //! Matrix coefficient number (4x4). m_vCoefficients[0] to m_vCoefficients[3] is the first row of the matrix
     TMCoefArray m_vCoefficients;
 };
 
-}; // namespace fwData
+//-----------------------------------------------------------------------------
+
+inline TransformationMatrix3D::TMCoefArray &TransformationMatrix3D::getRefCoefficients()
+{
+    return this->m_vCoefficients;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const TransformationMatrix3D::TMCoefArray &TransformationMatrix3D::getCoefficients() const
+{
+    return this->m_vCoefficients;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void TransformationMatrix3D::setCoefficients(const TransformationMatrix3D::TMCoefArray& _vCoefficients)
+{
+    this->m_vCoefficients = _vCoefficients;
+}
+
+//------------------------------------------------------------------------------
+
+inline TransformationMatrix3D::TM3DType TransformationMatrix3D::getCoefficient(size_t l, size_t c) const
+{
+    size_t pos = l * MATRIX_SIZE + c;
+    return m_vCoefficients.at(pos);
+}
+
+//------------------------------------------------------------------------------
+
+inline void TransformationMatrix3D::setCoefficient(size_t l, size_t c, TransformationMatrix3D::TM3DType val)
+{
+    size_t pos = l * MATRIX_SIZE + c;
+    m_vCoefficients.at(pos) = val;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace fwData
+
+#endif // __FWDATA_TRANSFORMATIONMATRIX3D_HPP__
 
-#endif // _FWDATA_TRANSFORMATIONMATRIX3D_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/TriangularMesh.hpp b/SrcLib/core/fwData/include/fwData/TriangularMesh.hpp
deleted file mode 100644
index 24657c9..0000000
--- a/SrcLib/core/fwData/include/fwData/TriangularMesh.hpp
+++ /dev/null
@@ -1,133 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATA_TRIANGULARMESH_HPP_
-#define _FWDATA_TRIANGULARMESH_HPP_
-
-#include <vector>
-
-#include <boost/function.hpp>
-
-#include <fwMath/IntrasecTypes.hpp>
-
-#include "fwData/config.hpp"
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-
-fwCampAutoDeclareDataMacro((fwData)(TriangularMesh), FWDATA_API);
-namespace fwData
-{
-/**
- * @class     TriangularMesh
- * @brief     This class defines a mesh.
- *
- * A mesh is represented by a container of 3D points and a container of cells.
- * A cell contains indices of the three points related to a triangular cell.
- *
- * 
- * @date    2007-2009.
- */
-class FWDATA_CLASS_API TriangularMesh : public Object
-{
-public :
-    fwCoreClassDefinitionsWithFactoryMacro( (TriangularMesh)(::fwData::Object), (()), ::fwData::factory::New< TriangularMesh >) ;
-
-    fwCampMakeFriendDataMacro((fwData)(TriangularMesh));
-
-    /// 3D point container
-    typedef std::vector< std::vector< float > >         PointContainer ;
-    typedef const std::vector< std::vector< float > >   ConstPointContainer ;
-
-    /// A cell contains indices of the three points related to a triangular cell
-    typedef std::vector< std::vector< int > >           CellContainer ;
-    typedef const std::vector< std::vector< int > >     ConstCellContainer ;
-
-    /**
-     * Typedef using for pointer function
-     */
-    typedef ::boost::function<void      ( ::fwData::TriangularMesh*, int, float, float, float ) > set1ValueFunc;
-    typedef ::boost::function<double*   ( ::fwData::TriangularMesh*, int)  > get1ValueFunc;
-    typedef ::boost::function<void      ( ::fwData::TriangularMesh*, int, int, int, int ) > set1IndexFunc;
-    typedef ::boost::function<const int ( ::fwData::TriangularMesh* ) > get1IndexFunc;
-    typedef ::boost::function<void      ( ::fwData::TriangularMesh*, int, float, float, float ) > set1NormalFunc;
-    typedef ::boost::function<const int ( ::fwData::TriangularMesh* ) > get1NormalFunc;
-    typedef ::boost::function<const int ( ::fwData::TriangularMesh* ) > getNumPointsFunc;
-    typedef ::boost::function<const int ( ::fwData::TriangularMesh* ) > getNumCellsFunc;
-
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWDATA_API TriangularMesh(::fwData::Object::Key key);
-
-    /**
-     * @brief destructor
-     */
-    FWDATA_API virtual ~TriangularMesh() ;
-
-    /// Defines shallow copy
-    FWDATA_API void shallowCopy( const Object::csptr& _source );
-
-    /// Defines deep copy
-    FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
-
-    /**
-     * @brief returns editable point container
-     */
-    FWDATA_API PointContainer &points() ;
-
-    /**
-     * @brief returns point container
-     */
-    FWDATA_API ConstPointContainer &points() const;
-
-    /**
-     * @brief returns editable cell container
-     */
-    FWDATA_API CellContainer &cells() ;
-
-    /**
-     * @brief returns cell container
-     */
-    FWDATA_API ConstCellContainer &cells() const;
-
-    /**
-     * Clear the point container
-     */
-    FWDATA_API void clearPoints();
-
-    /**
-     * Clear the cell container
-     */
-    FWDATA_API void clearCells();
-
-    FWDATA_API void setOneVectorInPointList(int _iIndex, float _fX, float _fY, float _fZ);
-
-    FWDATA_API void setOneIndexInIndexList(int _iIndex, int _p1, int _p2, int _p3);
-
-    FWDATA_API double* getOneVectorFromPointList(int _pt) const;
-
-    FWDATA_API int getOneIndexFromIndexList(void) const;
-
-    FWDATA_API void setOneVectorInNormalList(int x, float, float, float);
-
-    FWDATA_API int getOneIndexFromNormalList(void) const;
-
-    FWDATA_API size_t getNumPoints(void) const ;
-
-    FWDATA_API size_t getNumCells(void) const ;
-
-protected :
-
-    PointContainer m_points ;
-    CellContainer  m_cells ;
-
-} ;
-
-}
-
-#endif //_FWDATA_TRIANGULARMESH_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/Vector.hpp b/SrcLib/core/fwData/include/fwData/Vector.hpp
index f1047e2..65166f6 100644
--- a/SrcLib/core/fwData/include/fwData/Vector.hpp
+++ b/SrcLib/core/fwData/include/fwData/Vector.hpp
@@ -1,21 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_VECTOR_HPP_
-#define _FWDATA_VECTOR_HPP_
-
-#include <vector>
-#include <boost/shared_ptr.hpp>
-#include <camp/class.hpp>
+#ifndef __FWDATA_VECTOR_HPP__
+#define __FWDATA_VECTOR_HPP__
 
 #include "fwData/Object.hpp"
 #include "fwData/factory/new.hpp"
 #include "fwData/config.hpp"
 
-fwCorePredeclare((fwData)(Vector))
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <vector>
+
+namespace fwData
+{
+class Vector;
+}
 
 fwCampAutoDeclareDataMacro((fwData)(Vector), FWDATA_API);
 
@@ -23,21 +27,16 @@ namespace fwData
 {
 
 /**
- * @class   Vector
- * @brief   This class defines a vector of objects.
+ * @brief This class defines a vector of objects.
  *
  * Vector contains a vector of ::fwData::Object.
- *
- * 
- * @date    2007-2009.
  */
-
 class FWDATA_CLASS_API Vector : public Object
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Vector)(::fwData::Object), (()), ::fwData::factory::New< Vector >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Vector)(::fwData::Object), (()), ::fwData::factory::New< Vector >);
     fwCampMakeFriendDataMacro((fwData)(Vector));
 
     typedef std::vector< Object::sptr > ContainerType;
@@ -71,40 +70,36 @@ public:
 
     typedef Vector Container;
 
-    IteratorType begin() { return m_attrContainer.begin(); }
-    IteratorType end()   { return m_attrContainer.end(); }
-    ConstIteratorType begin() const { return m_attrContainer.begin(); }
-    ConstIteratorType end()   const { return m_attrContainer.end(); }
+    IteratorType begin();
+    IteratorType end();
+    ConstIteratorType begin() const;
+    ConstIteratorType end()   const;
 
-    ReverseIteratorType rbegin() { return m_attrContainer.rbegin(); }
-    ReverseIteratorType rend()   { return m_attrContainer.rend(); }
-    ConstReverseIteratorType rbegin() const { return m_attrContainer.rbegin(); }
-    ConstReverseIteratorType rend()   const { return m_attrContainer.rend(); }
+    ReverseIteratorType rbegin();
+    ReverseIteratorType rend();
+    ConstReverseIteratorType rbegin() const;
+    ConstReverseIteratorType rend()   const;
 
-    bool empty() const { return m_attrContainer.empty(); }
-    SizeType size() const { return m_attrContainer.size(); }
+    bool empty() const;
+    SizeType size() const;
 
-    ValueType front(){ return m_attrContainer.front(); }
-    ValueType back(){ return m_attrContainer.back(); }
+    ValueType front() const;
+    ValueType back() const;
 
-    ReferenceType operator[] ( size_type n )
-    {return this->m_attrContainer[n];}
-    ConstReferenceType operator[] ( size_type n ) const
-    {return this->m_attrContainer[n];}
+    ReferenceType operator[] ( size_type n );
+    ConstReferenceType operator[] ( size_type n ) const;
 
-    ReferenceType at ( SizeType n ) {return m_attrContainer.at(n);}
-    ConstReferenceType at ( SizeType n ) const {return m_attrContainer.at(n);}
+    ReferenceType at ( SizeType n );
+    ConstReferenceType at ( SizeType n ) const;
     /// @}
 
     /// @brief get/set the vector of ::fwData::Object
     /// @{
-    ContainerType &getContainer(){ return m_attrContainer; };
-    fwDataGetSetCRefMacro(Container, ContainerType);
+    ContainerType &getContainer();
+    const ContainerType &getContainer () const;
+    void setContainer (const ContainerType &val);
     /// @}
 
-
-
-
     /// Defines shallow copy
     FWDATA_API void shallowCopy( const Object::csptr& _source );
 
@@ -113,34 +108,195 @@ public:
 
     /// Method to initialize a ::fwData::Vector from a std::vector
     template< class DATATYPE >
-    void setDataContainer( const std::vector< SPTR(DATATYPE) > & vec )
-    {
-        this->m_attrContainer.clear();
-        std::copy( vec.begin(), vec.end(), std::back_inserter(this->getContainer()) );
-    }
+    void setDataContainer( const std::vector< SPTR(DATATYPE) > & vec );
 
     /// Method to get a std::vector from ::fwData::Vector
     template< class DATATYPE >
-    std::vector< SPTR(DATATYPE) > getDataContainer() const
-    {
-        std::vector< SPTR(DATATYPE) > vec;
-        vec.reserve( this->size() );
-        SPTR(DATATYPE) castedData;
-        BOOST_FOREACH( ::fwData::Object::sptr data, this->getContainer() )
-        {
-            castedData = ::boost::dynamic_pointer_cast<DATATYPE>( data );
-            OSLM_ASSERT("DynamicCast "<< ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()<<" failed", castedData);
-            vec.push_back( castedData );
-        }
-
-        return vec;
-    }
+    std::vector< SPTR(DATATYPE) > getDataContainer() const;
+
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when objects are added
+    typedef ::fwCom::Signal< void (ContainerType) > AddedObjectsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_ADDED_OBJECTS_SIG;
+
+    /// Type of signal when objects are removed
+    typedef ::fwCom::Signal< void (ContainerType) > RemovedObjectsSignalType;
+    FWDATA_API static const ::fwCom::Signals::SignalKeyType s_REMOVED_OBJECTS_SIG;
+    /**
+     * @}
+     */
 
 protected:
 
-    ContainerType m_attrContainer;
+    ContainerType m_container;
 };
-} //namespace fwData
 
-#endif /* _FWDATA_VECTOR_HPP_ */
+//-----------------------------------------------------------------------------
+
+inline Vector::IteratorType Vector::begin()
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::IteratorType Vector::end()
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ConstIteratorType Vector::begin() const
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ConstIteratorType Vector::end() const
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ReverseIteratorType Vector::rbegin()
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ReverseIteratorType Vector::rend()
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ConstReverseIteratorType Vector::rbegin() const
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ConstReverseIteratorType Vector::rend() const
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool Vector::empty() const
+{
+    return m_container.empty();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::SizeType Vector::size() const
+{
+    return m_container.size();
+}
+
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ValueType Vector::front() const
+{
+    return m_container.front();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ValueType Vector::back() const
+{
+    return m_container.back();
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ReferenceType Vector::operator[](Vector::size_type n)
+{
+    return this->m_container[n];
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ConstReferenceType Vector::operator[](Vector::size_type n) const
+{
+    return this->m_container[n];
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ReferenceType Vector::at(Vector::SizeType n)
+{
+    return m_container.at(n);
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ConstReferenceType Vector::at(Vector::SizeType n) const
+{
+    return m_container.at(n);
+}
+
+//-----------------------------------------------------------------------------
+
+inline Vector::ContainerType &Vector::getContainer()
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const Vector::ContainerType &Vector::getContainer () const
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Vector::setContainer (const Vector::ContainerType &val)
+{
+    m_container = val;
+}
+
+//-----------------------------------------------------------------------------
+
+template< class DATATYPE >
+inline void Vector::setDataContainer( const std::vector< SPTR(DATATYPE) > & vec )
+{
+    m_container.clear();
+    std::copy( vec.begin(), vec.end(), std::back_inserter(this->getContainer()) );
+}
+
+//-----------------------------------------------------------------------------
+
+template< class DATATYPE >
+inline std::vector< SPTR(DATATYPE) > Vector::getDataContainer() const
+{
+    std::vector< SPTR(DATATYPE) > vec;
+    vec.reserve( this->size() );
+    SPTR(DATATYPE) castedData;
+    for(const ::fwData::Object::sptr& data : this->getContainer() )
+    {
+        castedData = std::dynamic_pointer_cast<DATATYPE>( data );
+        OSLM_ASSERT("DynamicCast "<< ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()<<" failed", castedData);
+        vec.push_back( castedData );
+    }
+
+    return vec;
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwData
 
+#endif /* __FWDATA_VECTOR_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/Video.hpp b/SrcLib/core/fwData/include/fwData/Video.hpp
deleted file mode 100644
index c38e880..0000000
--- a/SrcLib/core/fwData/include/fwData/Video.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATA_VIDEO_HPP_
-#define _FWDATA_VIDEO_HPP_
-
-#include <boost/cstdint.hpp>
-
-#include <fwCore/mt/types.hpp>
-
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-#include "fwData/Camera.hpp"
-#include "fwData/TransformationMatrix3D.hpp"
-
-fwCampAutoDeclareDataMacro((fwData)(Video), FWDATA_API);
-
-namespace fwData
-{
-
-/**
- * @brief   This class focuses on video
- * @note    This version is done for test purposes (augmented reality and visualization) and will have to be accurately design
- * @note    Information to be stored here does not necessarily concern video buffer.
- * 
- * @date    2007-2009.
- * @todo    implement appropriate API
- */
-class FWDATA_CLASS_API Video : public Object
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Video)(::fwData::Object), (()), ::fwData::factory::New< Video >) ;
-
-    fwCampMakeFriendDataMacro((fwData)(Video));
-
-    typedef ::boost::uint8_t VideoType;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWDATA_API Video(::fwData::Object::Key key);
-
-    /**
-     * @brief destructor
-     */
-    FWDATA_API virtual ~Video() throw();
-
-    /// @brief Get the buffer size along X axis
-    ::boost::uint32_t  getXSize() const { return m_ui32XSize; };
-
-    /// @brief Get the buffer size along Y axis
-    ::boost::uint32_t  getYSize() const { return m_ui32YSize; };
-
-    /// @brief Get the number of bits per pixel
-    VideoType  getBPP() const { return m_ui8BPP; };
-
-    /// @brief Get the address of the image buffer
-    VideoType  * getImageBuffer() const { return m_pImageBuffer; };
-
-    /// @brief Get the camera associated with the video
-    ::fwData::Camera::sptr getCamera() const { return m_camera; };
-
-    /// @brief Return True if the data is available
-    FWDATA_API bool &dataAvailable();
-
-    /// @brief Get value of the last modification
-    FWDATA_API ::boost::uint64_t getLastModified();
-
-    /**
-     * @brief Increments the count of modification
-     */
-    FWDATA_API void Modified();
-
-    /// Defines deep copy
-    FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
-
-    //! The buffer size along X axis
-    ::boost::uint32_t  m_ui32XSize;
-
-    //! The buffer size along Y axis
-    ::boost::uint32_t  m_ui32YSize;
-
-    //! The number of bit by pixel
-    VideoType  m_ui8BPP;
-
-    //! The address of the image buffer
-    VideoType  * m_pImageBuffer;
-
-protected :
-
-    /// Flag if the video is available
-    bool m_dataAvailable;
-
-    /// Value of the last modification (incremented by Modified() method
-    ::boost::uint64_t m_lastModified;
-
-    /// Camera
-    ::fwData::Camera::sptr m_camera;
-};
-
-} // namespace fwData
-
-
-#endif // _FWDATA_VIDEO_HPP_
diff --git a/SrcLib/core/fwData/include/fwData/camp/mapper.hpp b/SrcLib/core/fwData/include/fwData/camp/mapper.hpp
index 04eed5d..301c25f 100644
--- a/SrcLib/core/fwData/include/fwData/camp/mapper.hpp
+++ b/SrcLib/core/fwData/include/fwData/camp/mapper.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,11 +7,11 @@
 #ifndef __FWDATA_CAMP_MAPPER_HPP__
 #define __FWDATA_CAMP_MAPPER_HPP__
 
- #include <boost/algorithm/string.hpp>
+#include "fwData/TransferFunction.hpp"
 
 #include <fwCamp/Mapper/ValueMapper.hpp>
 
-#include "fwData/TransferFunction.hpp"
+#include <boost/algorithm/string.hpp>
 
 namespace camp_ext
 {
@@ -23,7 +23,7 @@ struct ValueMapper< ::fwData::TransferFunction::TFColor >
     static const int type = camp::stringType;
     static const std::string to(const ReturnType& source)
     {
-        std::string result ="";
+        std::string result = "";
 
         std::string current = boost::lexical_cast< std::string>(source.r);
         result += current;
@@ -33,22 +33,37 @@ struct ValueMapper< ::fwData::TransferFunction::TFColor >
         result += current;
         result += ";";
 
-        current =  boost::lexical_cast< std::string>(source.b);
+        current = boost::lexical_cast< std::string>(source.b);
         result += current;
         result += ";";
 
-        current =  boost::lexical_cast< std::string>(source.a);
+        current = boost::lexical_cast< std::string>(source.a);
         result += current;
         result += ";";
 
         return result;
     }
 
-    static ReturnType from(bool source)                    {CAMP_ERROR(camp::BadType(camp::boolType, camp::mapType<ReturnType>()));}
-    static ReturnType from(long source)                    {CAMP_ERROR(camp::BadType(camp::intType, camp::mapType<ReturnType>()));}
-    static ReturnType from(double source)                  {CAMP_ERROR(camp::BadType(camp::realType, camp::mapType<ReturnType>()));}
-    static ReturnType from(const camp::EnumObject& source) {CAMP_ERROR(camp::BadType(camp::enumType, camp::mapType<ReturnType>()));}
-    static ReturnType from(const camp::UserObject& source) {CAMP_ERROR(camp::BadType(camp::userType, camp::mapType<ReturnType>()));}
+    static ReturnType from(bool source)
+    {
+        CAMP_ERROR(camp::BadType(camp::boolType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(long source)
+    {
+        CAMP_ERROR(camp::BadType(camp::intType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(double source)
+    {
+        CAMP_ERROR(camp::BadType(camp::realType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(const camp::EnumObject& source)
+    {
+        CAMP_ERROR(camp::BadType(camp::enumType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(const camp::UserObject& source)
+    {
+        CAMP_ERROR(camp::BadType(camp::userType, camp::mapType<ReturnType>()));
+    }
     static ReturnType from(const std::string& source)
     {
         std::vector< std::string> result;
@@ -73,4 +88,4 @@ struct ValueMapper< ::fwData::TransferFunction::TFColor >
 
 } //camp_ext
 
-#endif /* __FWDATA_CAMPMAPPER_HPP_ _*/
+#endif /* __FWDATA_CAMP_MAPPER_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/config.hpp b/SrcLib/core/fwData/include/fwData/config.hpp
deleted file mode 100644
index 25f793f..0000000
--- a/SrcLib/core/fwData/include/fwData/config.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATA_CONFIG_HPP_
-#define _FWDATA_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWDATA_EXPORTS
-    #define FWDATA_API __declspec(dllexport)
-    #define FWDATA_TEMPLATE_API
-    #else
-    #define FWDATA_API __declspec(dllimport)
-    #define FWDATA_TEMPLATE_API extern
-    #endif
-
-    #define FWDATA_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWDATA_EXPORTS
-    #define FWDATA_API __attribute__ ((visibility("default")))
-    #define FWDATA_CLASS_API __attribute__ ((visibility("default")))
-    #define FWDATA_TEMPLATE_API extern
-    #else
-    #define FWDATA_API __attribute__ ((visibility("hidden")))
-    #define FWDATA_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWDATA_TEMPLATE_API extern
-    #endif
-
-#else
-
-    #define FWDATA_API
-    #define FWDATA_CLASS_API
-    #define FWDATA_TEMPLATE_API extern
-
-#endif
-
-#endif //FWDATA_CONFIG_API
diff --git a/SrcLib/core/fwData/include/fwData/factory/namespace.hpp b/SrcLib/core/fwData/include/fwData/factory/namespace.hpp
deleted file mode 100644
index b6ab4b5..0000000
--- a/SrcLib/core/fwData/include/fwData/factory/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_FACTORY_NAMESPACE_HPP__
-#define __FWDATA_FACTORY_NAMESPACE_HPP__
-
-
-namespace fwData
-{
-
-/**
- * @brief       Contains fwData::factory utilities
- * @namespace   fwData::factory
- * 
- * @date        2009-2012
- *
- */
-namespace factory
-{
-} // namespace factory
-
-} // namespace fwData
-
-#endif /* __FWDATA_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/factory/new.hpp b/SrcLib/core/fwData/include/fwData/factory/new.hpp
index ebab9f2..dffe59e 100644
--- a/SrcLib/core/fwData/include/fwData/factory/new.hpp
+++ b/SrcLib/core/fwData/include/fwData/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,15 +7,14 @@
 #ifndef __FWDATA_FACTORY_NEW_HPP__
 #define __FWDATA_FACTORY_NEW_HPP__
 
-#include <string>
 
-#include <boost/make_shared.hpp>
+#include "fwData/config.hpp"
+#include "fwData/registry/detail.hpp"
 
 #include <fwTools/macros.hpp>
 #include <fwTools/DynamicAttributes.hxx>
 
-#include "fwData/config.hpp"
-#include "fwData/registry/detail.hpp"
+#include <string>
 
 namespace fwData
 {
@@ -34,10 +33,13 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
+private:
     template<typename CLASSNAME>
     friend SPTR( CLASSNAME ) fwData::factory::New();
 
-    Key(){};
+    Key()
+    {
+    }
 };
 
 
@@ -46,14 +48,12 @@ FWDATA_API SPTR( ::fwData::Object ) New( const ::fwData::registry::KeyType & cla
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
 
     ::fwTools::DynamicAttributesBase *dynAttr = obj.get();
     dynAttr->__FWTOOLS_ATTRIBUTES_REGISTER_FUNC_NAME();
 
-#ifdef COM_LOG
-    obj->setID(obj->getID());
-#endif
+
 
     return obj;
 }
diff --git a/SrcLib/core/fwData/include/fwData/location/Folder.hpp b/SrcLib/core/fwData/include/fwData/location/Folder.hpp
index ba8224d..efe47a4 100644
--- a/SrcLib/core/fwData/include/fwData/location/Folder.hpp
+++ b/SrcLib/core/fwData/include/fwData/location/Folder.hpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _DATA_LOCATION_FOLDER_HPP_
-#define _DATA_LOCATION_FOLDER_HPP_
-
-
-#include <boost/filesystem.hpp>
+#ifndef __FWDATA_LOCATION_FOLDER_HPP__
+#define __FWDATA_LOCATION_FOLDER_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/location/ILocation.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <boost/filesystem.hpp>
+
 
 fwCampAutoDeclareDataMacro((fwData)(location)(Folder), FWDATA_API);
 
@@ -22,20 +21,17 @@ namespace fwData
 namespace location
 {
 /**
- * @class Folder
  * @brief This class defines a folder location.
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API Folder  : public ILocation
 {
 public:
 
     fwCoreClassDefinitionsWithNFactoriesMacro(
-            (Folder)(ILocation),
-            ((::fwData::factory::New< Folder > ,() ))
-            ((FolderFactory ,((::boost::filesystem::path)) ((bool)(false)) ))
-    );
+        (Folder)(ILocation),
+        ((::fwData::factory::New< Folder >,() ))
+            ((FolderFactory,((::boost::filesystem::path))((bool)(false)) ))
+        );
 
     fwCampMakeFriendDataMacro((fwData)(location)(Folder));
 
@@ -63,9 +59,9 @@ public:
     /// @brief Get the flag if folder location is recursive
     FWDATA_API bool getRecursive();
 
-protected :
+protected:
 
-    FWDATA_API static sptr FolderFactory(PathType path, bool recursive=false );
+    FWDATA_API static sptr FolderFactory(PathType path, bool recursive = false );
 
     /// %Folder path
     PathType m_folder;
@@ -80,9 +76,6 @@ protected :
  * @brief This class is derived by reader/writer.
  *
  * Reader/Writer classes should only need to implement get/setLocation
- *
- * 
- * @date    2007-2009.
  */
 template<class RW> // reader or writer class should only need to implement get/setLocation
 struct enableFolder
@@ -120,16 +113,16 @@ struct enableFolder
         return getLocation<Folder>(m_rw)->getRecursive();
     }
 
-private :
-    /// Not implemented must use constructor with one parameter
-    enableFolder();
+    private:
+        /// Not implemented must use constructor with one parameter
+        enableFolder();
 
-    /// Reader or writer
-    RW *m_rw;
+        /// Reader or writer
+        RW *m_rw;
 
 };
 
 }
 }
 
-#endif /* _DATA_LOCATION_FOLDER_HPP_ */
+#endif /* __FWDATA_LOCATION_FOLDER_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/location/ILocation.hpp b/SrcLib/core/fwData/include/fwData/location/ILocation.hpp
index c258bc8..e714818 100644
--- a/SrcLib/core/fwData/include/fwData/location/ILocation.hpp
+++ b/SrcLib/core/fwData/include/fwData/location/ILocation.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_LOCATION_HPP_
-#define _FWDATA_LOCATION_HPP_
+#ifndef __FWDATA_LOCATION_ILOCATION_HPP__
+#define __FWDATA_LOCATION_ILOCATION_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/Object.hpp"
@@ -16,16 +16,12 @@ namespace fwData
 /**
  * @namespace ::fwData::location
  * @brief This namespace contains the classes which define a %location ( fileSystem, directory(IES) etc.... ).
- * 
- * @date    2007-2009.
- *
  */
 namespace location
 {
 
 /**
  * @brief Abstract class to define a %location ( fileSystem, directory(IES) etc.... )
- *
  * @note cannot be instantiated but derived class OK
  * @see Folder, MultiFiles, SingleFile
  */
@@ -69,10 +65,10 @@ inline typename LOCATION::sptr getLocation(RW *rw)
 template<class LOCATION, class RW >
 inline bool have(RW *rw)
 {
-    return LOCATION::dynamicCast( rw->getLocation() );
+    return (LOCATION::dynamicCast( rw->getLocation() )) ? true : false;
 }
 
 }
 }
 
-#endif /* LOCATION_HPP_ */
+#endif /* __FWDATA_LOCATION_ILOCATION_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/location/MultiFiles.hpp b/SrcLib/core/fwData/include/fwData/location/MultiFiles.hpp
index d27f7d2..025ccaa 100644
--- a/SrcLib/core/fwData/include/fwData/location/MultiFiles.hpp
+++ b/SrcLib/core/fwData/include/fwData/location/MultiFiles.hpp
@@ -1,33 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_LOCATION_MULTIFILES_HPP_
-#define _FWDATA_LOCATION_MULTIFILES_HPP_
-
-#include <vector>
-#include <boost/filesystem/path.hpp>
+#ifndef __FWDATA_LOCATION_MULTIFILES_HPP__
+#define __FWDATA_LOCATION_MULTIFILES_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/location/ILocation.hpp"
 
+#include <boost/filesystem/path.hpp>
+#include <vector>
 
 namespace fwData
 {
 namespace location
 {
 /**
- * @class MultiFiles
  * @brief This class defines a multi files location.
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API MultiFiles  : public ILocation
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (MultiFiles)(ILocation), (()),  ::fwData::factory::New< MultiFiles > ) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (MultiFiles)(ILocation), (()),  ::fwData::factory::New< MultiFiles > );
 
     /// Constructor
     FWDATA_API MultiFiles( ::fwData::Object::Key key );
@@ -44,7 +40,7 @@ public:
     /// Defines deep copy
     FWDATA_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType &cache);
 
-protected :
+protected:
 
     /// file system paths
     VectPathType m_paths;
@@ -56,9 +52,6 @@ protected :
  * @brief This class is derived by reader/writer.
  *
  * Reader/Writer classes should only need to implement get/setLocation
- *
- * 
- * @date 2007-2009.
  */
 template<class RW> // reader or writer class should only need to implement get/setLocation
 struct enableMultiFiles
@@ -84,13 +77,13 @@ struct enableMultiFiles
         return getLocation<MultiFiles>(m_rw)->getPaths();
     }
 
-private :
-    /// Not implemented must use constructor with one parameter
-    enableMultiFiles();
-    RW *m_rw;
+    private:
+        /// Not implemented must use constructor with one parameter
+        enableMultiFiles();
+        RW *m_rw;
 };
 
 }
 }
 
-#endif /* _FWDATA_LOCATION_MULTIFILES_HPP_ */
+#endif /* __FWDATA_LOCATION_MULTIFILES_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/location/Namespace.hpp b/SrcLib/core/fwData/include/fwData/location/Namespace.hpp
deleted file mode 100644
index 70be21b..0000000
--- a/SrcLib/core/fwData/include/fwData/location/Namespace.hpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWDATALOCATIONNAMESPACE_HPP_
-#define FWDATALOCATIONNAMESPACE_HPP_
-
-namespace fwData
-{
-/**
- * @brief       This namespace fwData::location contains the representation of the data objects oriented to fileSystem locations (folder, file...).
- * @namespace   fwData::location
- * 
- * @date        2009-2010.
- *
- */
-namespace location
-{
-}
-}
-#endif /* FWDATALOCATIONNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwData/include/fwData/location/SingleFile.hpp b/SrcLib/core/fwData/include/fwData/location/SingleFile.hpp
index 3f2c7be..1cda984 100644
--- a/SrcLib/core/fwData/include/fwData/location/SingleFile.hpp
+++ b/SrcLib/core/fwData/include/fwData/location/SingleFile.hpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_LOCATION_SINGLEFILE_HPP_
-#define _FWDATA_LOCATION_SINGLEFILE_HPP_
-
-
-#include <boost/filesystem.hpp>
+#ifndef __FWDATA_LOCATION_SINGLEFILE_HPP__
+#define __FWDATA_LOCATION_SINGLEFILE_HPP__
 
 #include "fwData/config.hpp"
 #include "fwData/location/ILocation.hpp"
 #include "fwData/factory/new.hpp"
 
+#include <boost/filesystem.hpp>
+
 fwCampAutoDeclareDataMacro((fwData)(location)(SingleFile), FWDATA_API);
 
 
@@ -22,19 +21,16 @@ namespace fwData
 namespace location
 {
 /**
- * @class SingleFile
  * @brief This class defines a single file %location.
- * 
- * @date    2007-2009.
  */
 class FWDATA_CLASS_API SingleFile  : public ILocation
 {
 public:
     fwCoreClassDefinitionsWithNFactoriesMacro(
-            (SingleFile)(ILocation),
-            ((::fwData::factory::New< SingleFile > ,() ))
-            ((SingleFileFactory ,((::boost::filesystem::path)) ))
-    );
+        (SingleFile)(ILocation),
+        ((::fwData::factory::New< SingleFile >,() ))
+            ((SingleFileFactory,((::boost::filesystem::path)) ))
+        );
 
 
     /// Constructor
@@ -58,7 +54,7 @@ public:
     /// Get file system path
     FWDATA_API PathType getPath() const;
 
-protected :
+protected:
 
     FWDATA_API static sptr SingleFileFactory(PathType path);
 
@@ -72,9 +68,6 @@ protected :
  * @brief This class is derived by reader/writer.
  *
  * Reader/Writer classes should only need to implement get/setLocation
- *
- * 
- * @date    2007-2009.
  */
 template<typename RW> // reader or writer class should only need to implement get/setLocation
 struct enableSingleFile
@@ -100,14 +93,14 @@ struct enableSingleFile
         return (getLocation<SingleFile>(m_rw))->getPath();
     }
 
-private :
-    /// Not implemented must use constructor with one parameter
-    enableSingleFile();
-    RW *m_rw;
+    private:
+        /// Not implemented must use constructor with one parameter
+        enableSingleFile();
+        RW *m_rw;
 
 };
 
 }
 }
 
-#endif /* _FWDATA_LOCATION_SINGLEFILE_HPP_ */
+#endif /* __FWDATA_LOCATION_SINGLEFILE_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/macros.hpp b/SrcLib/core/fwData/include/fwData/macros.hpp
deleted file mode 100644
index e3652df..0000000
--- a/SrcLib/core/fwData/include/fwData/macros.hpp
+++ /dev/null
@@ -1,237 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_MACROS_HPP__
-#define __FWDATA_MACROS_HPP__
-
-#include <boost/mpl/assert.hpp>
-#include <boost/mpl/or.hpp>
-#include <boost/preprocessor/cat.hpp>
-#include <boost/type_traits/is_class.hpp>
-#include <boost/type_traits/is_enum.hpp>
-#include <boost/type_traits/is_fundamental.hpp>
-
-#include <fwCore/macros.hpp>
-/**
- * @file fwData/macros.hpp
- * @brief fwData specific macros.
- *
- * 
- */
-
-
-namespace fwData
-{
-template<typename T>
-struct is_smart_ptr : ::boost::mpl::false_ { };
-
-template<typename T>
-struct is_smart_ptr< SPTR(T) > : ::boost::mpl::true_ { };
-
-template<typename T>
-struct is_smart_ptr< WPTR(T) > : ::boost::mpl::true_ { };
-
-} //namespace fwData
-
-/*
- * macros used for getters/setters
- *
- * funcName : name of the function ("Firstname" for getFirstname() function)
- * var : name of the variable without "m_" ("firstname" for m_firstname variable)
- * type : type of the variable (float, std::string, ...)
- * text : comment used in doxygen
- */
-//-----------------------------------
-// Getter/Setter macros
-//-----------------------------------
-#define __FWDATA_CLASS_ATTRIBUTE_PREFIX m_
-#define __FWDATA_GENERATED_ATTRIBUTE_PREFIX attr
-
-//-----------------------------------
-
-#define fwDataGetMacro(attrName, attrType)                                                    \
-attrType get##attrName () const                                                               \
-{                                                                                             \
-BOOST_MPL_ASSERT(                                                                             \
-        ( boost::mpl::or_< boost::is_fundamental< attrType > , boost::is_enum< attrType > > ) \
-        /* This macro is intended to be used with fundamental types. */                       \
-        );                                                                                    \
-    return BOOST_PP_CAT(                                                                      \
-                       __FWDATA_CLASS_ATTRIBUTE_PREFIX,                                       \
-                       BOOST_PP_CAT(__FWDATA_GENERATED_ATTRIBUTE_PREFIX,attrName)             \
-                       );                                                                     \
-}
-
-#define fwDataSetMacro(attrName, attrType)                                                    \
-void set##attrName (attrType val)                                                             \
-{                                                                                             \
-BOOST_MPL_ASSERT(                                                                             \
-        ( boost::mpl::or_< boost::is_fundamental< attrType > , boost::is_enum< attrType > > ) \
-        /* This macro is intended to be used with fundamental types. */                       \
-        );                                                                                    \
-    BOOST_PP_CAT(                                                                             \
-                __FWDATA_CLASS_ATTRIBUTE_PREFIX,                                              \
-                BOOST_PP_CAT(__FWDATA_GENERATED_ATTRIBUTE_PREFIX,attrName)                    \
-                ) = val;                                                                      \
-}
-
-#define fwDataGetSptrMacro(attrName, attrType)                                       \
-attrType get##attrName () const                                                      \
-{                                                                                    \
-BOOST_MPL_ASSERT(                                                                    \
-        ( ::fwData::is_smart_ptr< attrType > )                                       \
-        /* This macro is intended to be used with smart_ptr types. */                \
-        );                                                                           \
-    return BOOST_PP_CAT(                                                             \
-                        __FWDATA_CLASS_ATTRIBUTE_PREFIX,                             \
-                        BOOST_PP_CAT( __FWDATA_GENERATED_ATTRIBUTE_PREFIX, attrName) \
-                        );                                                           \
-}
-
-#define fwDataSetSptrMacro(attrName, attrType)                               \
-void set##attrName (attrType val)                                            \
-{                                                                            \
-BOOST_MPL_ASSERT(                                                            \
-        ( ::fwData::is_smart_ptr< attrType > )                               \
-        /* This macro is intended to be used with smart_ptr types. */        \
-        );                                                                   \
-    BOOST_PP_CAT(                                                            \
-                __FWDATA_CLASS_ATTRIBUTE_PREFIX,                             \
-                BOOST_PP_CAT( __FWDATA_GENERATED_ATTRIBUTE_PREFIX, attrName) \
-                ) = val;                                                     \
-}
-
-//-----------------------------------
-
-#define fwDataGetCRefMacro(attrName, attrType)                                                     \
-const attrType &get##attrName () const                                                             \
-{                                                                                                  \
-BOOST_MPL_ASSERT(                                                                                  \
-        ( boost::is_class< attrType > )                                                            \
-        /* This macro is intended to be used with non fundamental types and non smart-pointers. */ \
-        );                                                                                         \
-    return BOOST_PP_CAT(                                                                           \
-                        __FWDATA_CLASS_ATTRIBUTE_PREFIX,                                           \
-                        BOOST_PP_CAT(__FWDATA_GENERATED_ATTRIBUTE_PREFIX, attrName)                \
-                        );                                                                         \
-}
-
-#define fwDataSetCRefMacro(attrName, attrType)                                                     \
-void set##attrName (const attrType &val)                                                           \
-{                                                                                                  \
-BOOST_MPL_ASSERT(                                                                                  \
-        ( boost::is_class< attrType > )                                                            \
-        /* This macro is intended to be used with non fundamental types and non smart-pointers. */ \
-        );                                                                                         \
-    BOOST_PP_CAT(                                                                                  \
-                __FWDATA_CLASS_ATTRIBUTE_PREFIX,                                                   \
-                BOOST_PP_CAT(__FWDATA_GENERATED_ATTRIBUTE_PREFIX, attrName)                        \
-                ) = val;                                                                           \
-}
-
-//-----------------------------------
-
-#define fwDataGetSetMacro(attrName, attrType) \
-    /** @{ */                                 \
-    fwDataGetMacro(attrName, attrType)        \
-    fwDataSetMacro(attrName, attrType)        \
-    /** @}  */
-
-#define fwDataGetSetSptrMacro(attrName, attrType) \
-    /** @{ */                                     \
-    fwDataGetSptrMacro(attrName, attrType)        \
-    fwDataSetSptrMacro(attrName, attrType)        \
-    /** @}  */
-
-#define fwDataGetSetCRefMacro(attrName, attrType) \
-    /** @{ */                                     \
-    fwDataGetCRefMacro(attrName, attrType)        \
-    fwDataSetCRefMacro(attrName, attrType)        \
-    /** @}  */
-
-
-
-//-----------------------------------
-// Old Getter/Setter macros
-//-----------------------------------
-
-#define fwGettersSettersMacro(funcName, var, type) \
-    /** @name funcName accessor      */            \
-    /** @{                           */            \
-    fwGettersMacro(funcName, var, type);           \
-    fwSettersMacro(funcName, var, type);           \
-    /**@}                            */
-
-#define fwGettersSettersDocMacro(funcName, var, type, text ) \
-    /** text                         */                      \
-    /** @name funcName accessor      */                      \
-    /** Get/Set text                 */                      \
-    /** @{                           */                      \
-    fwGettersMacro(funcName, var, type);                     \
-    fwSettersMacro(funcName, var, type);                     \
-    /**@}                            */
-
-//-----------------------------------
-// Setter
-//-----------------------------------
-#define fwSettersMacro(funcName, var, type) \
-    fwSetMacro(funcName, var, type);        \
-    fwSetCRefMacro(funcName, var, type);
-
-//-----------------------------------
-//
-#define fwSetMacro(funcName, var, type)    \
-    void set##funcName (const type _##var) \
-    {                                      \
-        this->m_##var = _##var;            \
-    }
-
-//-----------------------------------
-//
-#define fwSetCRefMacro(funcName, var, type)      \
-    void setCRef##funcName (const type & _##var) \
-    {                                            \
-        this->m_##var = _##var;                  \
-    }
-
-//-----------------------------------
-
-
-//-----------------------------------
-// Getter
-//-----------------------------------
-#define fwGettersMacro(funcName, var, type) \
-    fwGetMacro(funcName, var, type);        \
-    fwGetRefMacro(funcName, var, type);     \
-    fwGetCRefMacro(funcName, var, type);
-
-
-//-----------------------------------
-//
-#define fwGetMacro(funcName, var, type) \
-    const type get##funcName () const   \
-    {                                   \
-        return m_##var;                 \
-    }
-
-//-----------------------------------
-//
-#define fwGetRefMacro(funcName, var, type) \
-    type & getRef##funcName ()             \
-    {                                      \
-        return this->m_##var;              \
-    }
-
-//-----------------------------------
-//
-#define fwGetCRefMacro(funcName, var, type) \
-    const type & getCRef##funcName () const \
-    {                                       \
-        return this->m_##var;               \
-    }
-
-#endif //__FWDATA_MACROS_HPP__
-
diff --git a/SrcLib/core/fwData/include/fwData/mt/Namespace.hpp b/SrcLib/core/fwData/include/fwData/mt/Namespace.hpp
deleted file mode 100644
index 5e523b3..0000000
--- a/SrcLib/core/fwData/include/fwData/mt/Namespace.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_MT_NAMESPACE_HPP__
-#define __FWDATA_MT_NAMESPACE_HPP__
-
-
-namespace fwData
-{
-/**
- * @brief       This namespace fwData::mt contains helper to lock object for multi-threading.
- * @namespace   fwData::mt
- * 
- * @date        2012.
- *
- */
-namespace mt
-{
-
-}
-}
-#endif /* __FWDATA_MT_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwData/include/fwData/mt/ObjectReadLock.hpp b/SrcLib/core/fwData/include/fwData/mt/ObjectReadLock.hpp
index 51d8825..70719fc 100644
--- a/SrcLib/core/fwData/include/fwData/mt/ObjectReadLock.hpp
+++ b/SrcLib/core/fwData/include/fwData/mt/ObjectReadLock.hpp
@@ -1,39 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_MT_OBJECTREADLOCK_HPP_
-#define _FWDATA_MT_OBJECTREADLOCK_HPP_
-
-#include <fwCore/mt/types.hpp>
+#ifndef __FWDATA_MT_OBJECTREADLOCK_HPP__
+#define __FWDATA_MT_OBJECTREADLOCK_HPP__
 
 #include "fwData/Object.hpp"
-
 #include "fwData/config.hpp"
 
+#include <fwCore/mt/types.hpp>
+
 namespace fwData
 {
 namespace mt
 {
 
 /**
- * @class  ObjectReadLock
  * @brief  A helper to lock object on read mode.
- * 
- * @date   2012.
  */
 class FWDATA_CLASS_API ObjectReadLock
 {
 
-public :
+public:
 
     /**
      * @brief Constructor : owns an read lock on object mutex.
      * If adopt_lock==false : the mutex is not locked (call lock() to lock mutex)
      */
-    FWDATA_API ObjectReadLock( ::fwData::Object::sptr obj, bool lock=true );
+    FWDATA_API ObjectReadLock( ::fwData::Object::csptr obj, bool lock = true );
 
     /// Destructor. Does nothing
     FWDATA_API ~ObjectReadLock();
@@ -44,7 +40,7 @@ public :
     /// Releases lock on object mutex
     FWDATA_API void unlock();
 
-private :
+private:
 
     /// lock on object mutex
     ::fwCore::mt::ReadLock m_lock;
@@ -53,4 +49,4 @@ private :
 } // mt
 } // fwData
 
-#endif // _FWDATA_MT_OBJECTREADLOCK_HPP_
+#endif // __FWDATA_MT_OBJECTREADLOCK_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/mt/ObjectReadToWriteLock.hpp b/SrcLib/core/fwData/include/fwData/mt/ObjectReadToWriteLock.hpp
index be096e8..a39f45f 100644
--- a/SrcLib/core/fwData/include/fwData/mt/ObjectReadToWriteLock.hpp
+++ b/SrcLib/core/fwData/include/fwData/mt/ObjectReadToWriteLock.hpp
@@ -1,39 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_MT_OBJECTREADTOWRITELOCK_HPP_
-#define _FWDATA_MT_OBJECTREADTOWRITELOCK_HPP_
-
-#include <fwCore/mt/types.hpp>
+#ifndef __FWDATA_MT_OBJECTREADTOWRITELOCK_HPP__
+#define __FWDATA_MT_OBJECTREADTOWRITELOCK_HPP__
 
 #include "fwData/Object.hpp"
-
 #include "fwData/config.hpp"
 
+#include <fwCore/mt/types.hpp>
+
 namespace fwData
 {
 namespace mt
 {
 
 /**
- * @class  ObjectReadToWriteLock
  * @brief  A helper to lock object on upgradable mode.
- * 
- * @date   2012.
  */
 class FWDATA_CLASS_API ObjectReadToWriteLock
 {
 
-public :
+public:
 
     /**
      * @brief Constructor : owns an upgradable lock on object mutex.
      * If adopt_lock==false : the mutex is not locked (call lock() to lock mutex)
      */
-    FWDATA_API ObjectReadToWriteLock( ::fwData::Object::sptr obj, bool lock=true );
+    FWDATA_API ObjectReadToWriteLock( ::fwData::Object::sptr obj, bool lock = true );
 
     /// Destructor. Does nothing
     FWDATA_API ~ObjectReadToWriteLock();
@@ -50,7 +46,7 @@ public :
     /// Downgrade exclusive lock to upgradable lock
     FWDATA_API void downgrade();
 
-private :
+private:
 
     /// lock on object mutex
     ::fwCore::mt::ReadToWriteLock m_lock;
@@ -60,4 +56,4 @@ private :
 } // mt
 } // fwData
 
-#endif // _FWDATA_MT_OBJECTREADTOWRITELOCK_HPP_
+#endif // __FWDATA_MT_OBJECTREADTOWRITELOCK_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/mt/ObjectWriteLock.hpp b/SrcLib/core/fwData/include/fwData/mt/ObjectWriteLock.hpp
index a29067a..efa9610 100644
--- a/SrcLib/core/fwData/include/fwData/mt/ObjectWriteLock.hpp
+++ b/SrcLib/core/fwData/include/fwData/mt/ObjectWriteLock.hpp
@@ -1,39 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATA_MT_OBJECTWRITELOCK_HPP_
-#define _FWDATA_MT_OBJECTWRITELOCK_HPP_
-
-#include <fwCore/mt/types.hpp>
+#ifndef __FWDATA_MT_OBJECTWRITELOCK_HPP__
+#define __FWDATA_MT_OBJECTWRITELOCK_HPP__
 
 #include "fwData/Object.hpp"
-
 #include "fwData/config.hpp"
 
+#include <fwCore/mt/types.hpp>
+
 namespace fwData
 {
 namespace mt
 {
 
 /**
- * @class  ObjectWriteLock
  * @brief  A helper to lock object on exclusive mode.
- * 
- * @date   2012.
  */
 class FWDATA_CLASS_API ObjectWriteLock
 {
 
-public :
+public:
 
     /**
      * @brief Constructor : owns an exclusive lock on object mutex.
      * If adopt_lock==false : the mutex is not locked (call lock() to lock mutex)
      */
-    FWDATA_API ObjectWriteLock( ::fwData::Object::sptr obj, bool adopt_lock=true );
+    FWDATA_API ObjectWriteLock( ::fwData::Object::sptr obj, bool adopt_lock = true );
 
     /// Destructor. Does nothing
     FWDATA_API ~ObjectWriteLock();
@@ -44,7 +40,7 @@ public :
     /// Releases lock on object mutex
     FWDATA_API void unlock();
 
-private :
+private:
 
     /// lock on object mutex
     ::fwCore::mt::WriteLock m_lock;
@@ -53,4 +49,4 @@ private :
 } // mt
 } // fwData
 
-#endif // _FWDATA_MT_OBJECTWRITELOCK_HPP_
+#endif // __FWDATA_MT_OBJECTWRITELOCK_HPP__
diff --git a/SrcLib/core/fwData/include/fwData/namespace.hpp b/SrcLib/core/fwData/include/fwData/namespace.hpp
new file mode 100644
index 0000000..cb41d55
--- /dev/null
+++ b/SrcLib/core/fwData/include/fwData/namespace.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATA_NAMESPACE_HPP__
+#define __FWDATA_NAMESPACE_HPP__
+
+/**
+ * @brief Contains the representation of the data objects used in the framework.
+ * @namespace fwData
+ */
+namespace fwData
+{
+
+/**
+ * @brief Contains the representation of the data objects oriented to fileSystem locations (folder, file, etc).
+ * @namespace fwData::location
+ */
+namespace location
+{
+} // namespace location
+
+/**
+ * @brief Contains helper to lock object for multi-threading.
+ * @namespace fwData::mt
+ */
+namespace mt
+{
+} // namespace mt
+
+/**
+ * @brief Contains fwData::registry details.
+ * @namespace fwData::registry
+ */
+namespace registry
+{
+} // namespace registry
+
+
+/**
+ * @brief Contains fwData::factory utilities.
+ * @namespace fwData::factory
+ */
+namespace factory
+{
+} // namespace factory
+
+
+
+} // namespace fwData
+
+#endif /* __FWDATA_NAMESPACE_HPP__ */
+
diff --git a/SrcLib/core/fwData/include/fwData/registry/detail.hpp b/SrcLib/core/fwData/include/fwData/registry/detail.hpp
index 8d621fe..068c322 100644
--- a/SrcLib/core/fwData/include/fwData/registry/detail.hpp
+++ b/SrcLib/core/fwData/include/fwData/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,12 +7,12 @@
 #ifndef __FWDATA_REGISTRY_DETAIL_HPP__
 #define __FWDATA_REGISTRY_DETAIL_HPP__
 
-#include <string>
+#include "fwData/config.hpp"
 
 #include <fwCore/macros.hpp>
 #include <fwCore/util/FactoryRegistry.hpp>
 
-#include "fwData/config.hpp"
+#include <string>
 
 namespace fwData
 {
@@ -24,7 +24,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwData::Object) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwData::Object) (), KeyType > Type;
 
 FWDATA_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwData/include/fwData/registry/macros.hpp b/SrcLib/core/fwData/include/fwData/registry/macros.hpp
index 7dd3bfb..9c8f20a 100644
--- a/SrcLib/core/fwData/include/fwData/registry/macros.hpp
+++ b/SrcLib/core/fwData/include/fwData/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATA_REGISTRY_MACRO_HPP__
-#define __FWDATA_REGISTRY_MACRO_HPP__
+#ifndef __FWDATA_REGISTRY_MACROS_HPP__
+#define __FWDATA_REGISTRY_MACROS_HPP__
 
 #include "fwData/registry/detail.hpp"
 
@@ -13,11 +13,10 @@ namespace fwData
 {
 namespace registry
 {
-
 #define fwDataRegisterMacro( classname )                                  \
-    static ::fwData::Object::Registrar< classname > s__factory__record__ ## __LINE__ ;
+    static ::fwData::Object::Registrar< classname > BOOST_PP_CAT(s__factory__record__, __LINE__);
 
 } // end namespace registry
 } // end namespace fwData
 
-#endif /*__FWDATA_REGISTRY_MACRO_HPP__*/
+#endif /*__FWDATA_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwData/include/fwData/registry/namespace.hpp b/SrcLib/core/fwData/include/fwData/registry/namespace.hpp
deleted file mode 100644
index b5b089a..0000000
--- a/SrcLib/core/fwData/include/fwData/registry/namespace.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_REGISTRY_NAMESPACE_HPP__
-#define __FWDATA_REGISTRY_NAMESPACE_HPP__
-
-
-namespace fwData
-{
-
-/**
- * @brief       Contains fwData::registry details
- * @namespace   fwData::registry
- * 
- * @date        2009-2012
- *
- */
-namespace registry
-{
-} // namespace registry
-
-} // namespace fwData
-
-#endif /* __FWDATA_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwData/src/fwData/Array.cpp b/SrcLib/core/fwData/src/fwData/Array.cpp
index cfe8ef2..66f7b28 100644
--- a/SrcLib/core/fwData/src/fwData/Array.cpp
+++ b/SrcLib/core/fwData/src/fwData/Array.cpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
-#include <cstdlib>
-#include <functional>
-#include <numeric>
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Array.hpp"
 
+#include <algorithm>
+#include <cstdlib>
+#include <functional>
+#include <numeric>
 
 namespace fwData
 {
@@ -21,15 +20,17 @@ namespace fwData
 fwDataRegisterMacro( ::fwData::Array );
 
 inline size_t computeSize(
-        size_t elementSize,
-        const ::fwData::Array::SizeType &size,
-        size_t nbOfComponents )
+    size_t elementSize,
+    const ::fwData::Array::SizeType &size,
+    size_t nbOfComponents )
 {
     size_t total = 0;
     if (!size.empty())
     {
-        total = elementSize;
-        total *= std::accumulate (size.begin(), size.end(), nbOfComponents, std::multiplies< ::fwData::Array::SizeType::value_type >() );
+        total  = elementSize;
+        total *=
+            std::accumulate (size.begin(),
+                             size.end(), nbOfComponents, std::multiplies< ::fwData::Array::SizeType::value_type >() );
     }
     return total;
 }
@@ -40,7 +41,7 @@ inline size_t computeSize(
     strides.reserve(size.size());
 
     size_t currentStride = sizeOfType*nbOfComponents;
-    BOOST_FOREACH(SizeType::value_type s, size)
+    for(const SizeType::value_type& s : size)
     {
         strides.push_back(currentStride);
         currentStride *= s;
@@ -50,10 +51,10 @@ inline size_t computeSize(
 
 //------------------------------------------------------------------------------
 
-Array::Array( ::fwData::Object::Key key ):
+Array::Array( ::fwData::Object::Key key ) :
     m_strides(0),
     m_type(),
-    m_attrBufferObject(::fwMemory::BufferObject::New()),
+    m_bufferObject(::fwMemory::BufferObject::New()),
     m_size(0),
     m_nbOfComponents(0),
     m_isBufferOwner(true)
@@ -74,7 +75,7 @@ void Array::swap( Array::sptr _source )
     m_fields.swap(_source->m_fields);
     m_strides.swap(_source->m_strides);
     m_size.swap(_source->m_size);
-    m_attrBufferObject->swap(_source->m_attrBufferObject);
+    m_bufferObject->swap(_source->m_bufferObject);
 
     std::swap(m_type, _source->m_type);
     std::swap(m_nbOfComponents, _source->m_nbOfComponents);
@@ -87,18 +88,18 @@ void Array::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Array::csptr other = Array::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
     this->clear();
 
-    if( !other->m_attrBufferObject->isEmpty() )
+    if( !other->m_bufferObject->isEmpty() )
     {
-        ::fwMemory::BufferObject::Lock lockerDest(m_attrBufferObject);
+        ::fwMemory::BufferObject::Lock lockerDest(m_bufferObject);
         this->resize(other->m_type, other->m_size, other->m_nbOfComponents, true);
         char * buffDest = static_cast< char * >( lockerDest.getBuffer() );
-        ::fwMemory::BufferObject::Lock lockerSource(other->m_attrBufferObject);
+        ::fwMemory::BufferObject::Lock lockerSource(other->m_bufferObject);
         char * buffSrc = static_cast< char * >( lockerSource.getBuffer() );
         std::copy(buffSrc, buffSrc+other->getSizeInBytes(), buffDest );
     }
@@ -114,34 +115,34 @@ void Array::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 //------------------------------------------------------------------------------
 
 size_t Array::resize(
-        const ::fwTools::Type &type,
-        const SizeType &size,
-        size_t nbOfComponents,
-        bool reallocate
-        ) throw(::fwData::Exception)
+    const ::fwTools::Type &type,
+    const SizeType &size,
+    size_t nbOfComponents,
+    bool reallocate
+    ) throw(::fwData::Exception)
 {
     nbOfComponents = (nbOfComponents == 0) ? 1 : nbOfComponents;
     size_t bufSize = computeSize(type.sizeOf(), size, nbOfComponents);
 
-    if(reallocate && (m_isBufferOwner || m_attrBufferObject->isEmpty()))
+    if(reallocate && (m_isBufferOwner || m_bufferObject->isEmpty()))
     {
-        if(m_attrBufferObject->isEmpty())
+        if(m_bufferObject->isEmpty())
         {
-            m_attrBufferObject->allocate(bufSize);
+            m_bufferObject->allocate(bufSize);
         }
         else
         {
-            m_attrBufferObject->reallocate(bufSize);
+            m_bufferObject->reallocate(bufSize);
         }
         m_isBufferOwner = true;
     }
     else if(reallocate && !m_isBufferOwner)
     {
         FW_RAISE_EXCEPTION_MSG( ::fwData::Exception,
-                "Tried to reallocate a not-owned Buffer.");
+                                "Tried to reallocate a not-owned Buffer.");
     }
 
-    m_strides = computeStrides(size, nbOfComponents, type.sizeOf());
+    m_strides        = computeStrides(size, nbOfComponents, type.sizeOf());
     m_type           = type;
     m_size           = size;
     m_nbOfComponents = nbOfComponents;
@@ -164,7 +165,8 @@ size_t Array::resize(const SizeType &size, bool reallocate) throw(::fwData::Exce
 }
 //------------------------------------------------------------------------------
 
-size_t Array::resize(const std::string &type, const SizeType &size, size_t nbOfComponents, bool reallocate) throw(::fwData::Exception)
+size_t Array::resize(const std::string &type, const SizeType &size, size_t nbOfComponents,
+                     bool reallocate) throw(::fwData::Exception)
 {
     ::fwTools::Type fwType = ::fwTools::Type::create(type);
     return this->resize( fwType, size, nbOfComponents, reallocate);
@@ -174,11 +176,11 @@ size_t Array::resize(const std::string &type, const SizeType &size, size_t nbOfC
 
 void Array::clear()
 {
-    if ( ! this->m_attrBufferObject->isEmpty() )
+    if ( !this->m_bufferObject->isEmpty() )
     {
         if(m_isBufferOwner)
         {
-            this->m_attrBufferObject->destroy();
+            this->m_bufferObject->destroy();
         }
         m_strides.clear();
         m_type = ::fwTools::Type();
@@ -236,11 +238,11 @@ void Array::setNumberOfComponents(size_t nb)
 {
     m_nbOfComponents = (nb == 0) ? 1 : nb;
     this->resize(
-            m_type,
-            m_size,
-            m_nbOfComponents,
-            (m_isBufferOwner && !m_attrBufferObject->isEmpty())
-            );
+        m_type,
+        m_size,
+        m_nbOfComponents,
+        (m_isBufferOwner && !m_bufferObject->isEmpty())
+        );
 }
 
 //------------------------------------------------------------------------------
@@ -283,11 +285,11 @@ void Array::setType(const ::fwTools::Type &type)
 {
     m_type = type;
     this->resize(
-            m_type,
-            m_size,
-            m_nbOfComponents,
-            (m_isBufferOwner && !m_attrBufferObject->isEmpty())
-            );
+        m_type,
+        m_size,
+        m_nbOfComponents,
+        (m_isBufferOwner && !m_bufferObject->isEmpty())
+        );
 }
 
 
@@ -303,13 +305,14 @@ void Array::setType(const ::fwTools::Type &type)
 size_t Array::getBufferOffset( const ::fwData::Array::IndexType &id, size_t component, size_t sizeOfType ) const
 {
     OSLM_ASSERT(
-            "Given index has " << id.size() << " dimensions, but Array has " << m_size.size() << "dimensions.",
-            id.size() == m_size.size()
-            );
+        "Given index has " << id.size() << " dimensions, but Array has " << m_size.size() << "dimensions.",
+        id.size() == m_size.size()
+        );
 
     OffsetType offsets(id.size());
 
-    std::transform(id.begin(), id.end(), m_strides.begin(), offsets.begin(), std::multiplies<OffsetType::value_type>() );
+    std::transform(id.begin(), id.end(), m_strides.begin(), offsets.begin(),
+                   std::multiplies<OffsetType::value_type>() );
 
     size_t offset;
     offset = std::accumulate(offsets.begin(), offsets.end(), size_t(0));
@@ -321,4 +324,4 @@ size_t Array::getBufferOffset( const ::fwData::Array::IndexType &id, size_t comp
 
 //------------------------------------------------------------------------------
 
-}//namespace fwData
+} //namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Boolean.cpp b/SrcLib/core/fwData/src/fwData/Boolean.cpp
index 32f4381..6ab5332 100644
--- a/SrcLib/core/fwData/src/fwData/Boolean.cpp
+++ b/SrcLib/core/fwData/src/fwData/Boolean.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,22 +18,23 @@ namespace fwData
 
 //------------------------------------------------------------------------------
 
-Boolean::Boolean( ::fwData::Object::Key key  ) throw()
-:   GenericField< bool >( false )
-{}
+Boolean::Boolean( ::fwData::Object::Key key  ) throw() : GenericField< bool >( false )
+{
+}
 
 //------------------------------------------------------------------------------
 
 Boolean::~Boolean() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 void Boolean::shallowCopy(const Object::csptr &_source )
 {
     Boolean::csptr other = Boolean::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_value = other->m_value;
 }
@@ -44,8 +45,8 @@ void Boolean::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &ca
 {
     Boolean::csptr other = Boolean::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_value = other->m_value;
 }
diff --git a/SrcLib/core/fwData/src/fwData/Camera.cpp b/SrcLib/core/fwData/src/fwData/Camera.cpp
deleted file mode 100644
index 8700a3b..0000000
--- a/SrcLib/core/fwData/src/fwData/Camera.cpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-
-#include "fwData/registry/macros.hpp"
-#include "fwData/Exception.hpp"
-#include "fwData/Video.hpp"
-#include "fwData/Camera.hpp"
-
-fwDataRegisterMacro(::fwData::Camera);
-
-namespace fwData
-{
-
-Camera::Camera( ::fwData::Object::Key key )
-    : m_attrSkew(0.0), m_dataAvailable(false)
-{
-    SLM_TRACE_FUNC();
-
-    m_extrinsicMatrix = ::fwData::TransformationMatrix3D::New();
-    m_intrinsicMatrix = ::fwData::TransformationMatrix3D::New();
-
-    uint32HL def = { 0, 0 };
-    m_cameraGUID = std::make_pair(false, def);
-}
-
-// -------------------------------------------------------------------------
-
-Camera::~Camera() throw()
-{ SLM_TRACE_FUNC(); }
-
-// -------------------------------------------------------------------------
-
-void Camera::setCameraGUID(uint32HL cameraGUID)
-{
-    m_cameraGUID.first = true;
-    m_cameraGUID.second = cameraGUID;
-}
-
-// -------------------------------------------------------------------------
-
-void Camera::setDistortionCoefficient(double k1, double k2,
-                                      double p1, double p2, double k3)
-{
-    m_attrDistortionCoefficient[0] = k1;
-    m_attrDistortionCoefficient[1] = k2;
-    m_attrDistortionCoefficient[2] = p1;
-    m_attrDistortionCoefficient[3] = p2;
-    m_attrDistortionCoefficient[4] = k3;
-}
-
-//------------------------------------------------------------------------------
-
-void Camera::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &cache)
-{
-    Camera::csptr other = Camera::dynamicConstCast(source);
-    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
-    this->fieldDeepCopy( source, cache );
-
-    OSLM_FATAL("Not implemented." );
-}
-
-} // namespace fwData
-
diff --git a/SrcLib/core/fwData/src/fwData/Color.cpp b/SrcLib/core/fwData/src/fwData/Color.cpp
index 341b9df..a6017e1 100644
--- a/SrcLib/core/fwData/src/fwData/Color.cpp
+++ b/SrcLib/core/fwData/src/fwData/Color.cpp
@@ -1,39 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
-
-
 #include "fwData/Color.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::Color );
+
 namespace fwData
 {
+
 //------------------------------------------------------------------------------
 
 Color::Color ( ::fwData::Object::Key key )
 {
-    SLM_TRACE_FUNC();
-    m_vRGBA[0] = 1.0;
-    m_vRGBA[1] = 1.0;
-    m_vRGBA[2] = 1.0;
-    m_vRGBA[3] = 1.0;
+    m_vRGBA.fill(1.0);
 }
 
 //------------------------------------------------------------------------------
-Color::sptr Color::ColorFactory(Color::ColorType red, Color::ColorType green, Color::ColorType blue, Color::ColorType alpha)
+
+Color::sptr Color::ColorFactory(Color::ColorType red, Color::ColorType green, Color::ColorType blue,
+                                Color::ColorType alpha)
 {
     Color::sptr color = ::fwData::Color::New();
-    color->m_vRGBA[0] = red;
-    color->m_vRGBA[1] = green;
-    color->m_vRGBA[2] = blue;
-    color->m_vRGBA[3] = alpha;
+    color->m_vRGBA = {red, green, blue, alpha};
     return color;
 }
 
@@ -41,18 +36,16 @@ Color::sptr Color::ColorFactory(Color::ColorType red, Color::ColorType green, Co
 
 Color::~Color ()
 {
-    SLM_TRACE_FUNC();
 }
 
-
 //------------------------------------------------------------------------------
 
 void Color::shallowCopy(const Object::csptr &_source )
 {
     Color::csptr other = Color::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_vRGBA = other->m_vRGBA;
 }
@@ -63,8 +56,8 @@ void Color::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Color::csptr other = Color::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_vRGBA = other->m_vRGBA;
 }
@@ -73,26 +66,23 @@ void Color::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 
 void Color::setRGBA( const ColorType red, const ColorType green, const ColorType blue, const ColorType alpha )
 {
-    m_vRGBA[0] = red;
-    m_vRGBA[1] = green;
-    m_vRGBA[2] = blue;
-    m_vRGBA[3] = alpha;
+    m_vRGBA = {red, green, blue, alpha};
 }
 
 //------------------------------------------------------------------------------
 
-void Color::setRGBA( std::string  hexaColor )
+void Color::setRGBA( std::string hexaColor )
 {
     OSLM_ASSERT(
-            "Color string should start with '#' and followed by 6 ou 8 "
-            "hexadecimal digits. Given color : " << hexaColor ,
-            hexaColor[0] == '#'
-                && ( hexaColor.length() == 7 || hexaColor.length() == 9)
-            );
+        "Color string should start with '#' and followed by 6 ou 8 "
+        "hexadecimal digits. Given color : " << hexaColor,
+        hexaColor[0] == '#'
+        && ( hexaColor.length() == 7 || hexaColor.length() == 9)
+        );
 
-    std::string redString = hexaColor.substr(1, 2);
+    std::string redString   = hexaColor.substr(1, 2);
     std::string greenString = hexaColor.substr(3, 2);
-    std::string blueString = hexaColor.substr(5, 2);
+    std::string blueString  = hexaColor.substr(5, 2);
     int r,g,b, a = 255;
 
     std::istringstream iss;
@@ -114,7 +104,6 @@ void Color::setRGBA( std::string  hexaColor )
     }
 
     this->setRGBA(r/255.0f, g/255.0f, b/255.0f, a/255.0f);
-
 }
 
 //------------------------------------------------------------------------------
@@ -123,32 +112,37 @@ Color::ColorType  &Color::red()
 {
     return m_vRGBA[0];
 }
+
 Color::ColorType  &Color::green()
 {
     return m_vRGBA[1];
 }
+
 Color::ColorType  &Color::blue()
 {
     return m_vRGBA[2];
 }
+
 Color::ColorType  &Color::alpha()
 {
     return m_vRGBA[3];
 }
 
-
 const Color::ColorType  &Color::red() const
 {
     return m_vRGBA[0];
 }
+
 const Color::ColorType  &Color::green() const
 {
     return m_vRGBA[1];
 }
+
 const Color::ColorType  &Color::blue() const
 {
     return m_vRGBA[2];
 }
+
 const Color::ColorType  &Color::alpha() const
 {
     return m_vRGBA[3];
diff --git a/SrcLib/core/fwData/src/fwData/Composite.cpp b/SrcLib/core/fwData/src/fwData/Composite.cpp
index ef261b4..797d403 100644
--- a/SrcLib/core/fwData/src/fwData/Composite.cpp
+++ b/SrcLib/core/fwData/src/fwData/Composite.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
-#include <boost/foreach.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
+#include "fwData/Composite.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include "fwData/Composite.hpp"
+#include <algorithm>
 
 
 fwDataRegisterMacro( ::fwData::Composite );
@@ -19,31 +19,37 @@ fwDataRegisterMacro( ::fwData::Composite );
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType Composite::s_ADDED_OBJECTS_SIG   = "addedObjects";
+const ::fwCom::Signals::SignalKeyType Composite::s_CHANGED_OBJECTS_SIG = "changedObjects";
+const ::fwCom::Signals::SignalKeyType Composite::s_REMOVED_OBJECTS_SIG = "removedObjects";
+
+//------------------------------------------------------------------------------
 
 Composite::Composite( ::fwData::Object::Key key )
 {
-    SLM_TRACE_FUNC();
+    newSignal< AddedObjectsSignalType >(s_ADDED_OBJECTS_SIG);
+    newSignal< ChangedObjectsSignalType >(s_CHANGED_OBJECTS_SIG);
+    newSignal< RemovedObjectsSignalType >(s_REMOVED_OBJECTS_SIG);
 }
 
+//------------------------------------------------------------------------------
 
 Composite::~Composite()
 {
-    SLM_TRACE_FUNC();
 }
 
-
 //------------------------------------------------------------------------------
 
 void Composite::shallowCopy(const Object::csptr &_source )
 {
     Composite::csptr other = Composite::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    m_attrContainer.clear();
+    m_container.clear();
 
-    m_attrContainer = other->m_attrContainer;
+    m_container = other->m_container;
 }
 
 //------------------------------------------------------------------------------
@@ -52,15 +58,15 @@ void Composite::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &
 {
     Composite::csptr other = Composite::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_attrContainer.clear();
+    m_container.clear();
 
-    BOOST_FOREACH(const ValueType &elem, *other)
+    for(const ValueType &elem : *other)
     {
-        m_attrContainer.insert( ValueType(elem.first, ::fwData::Object::copy(elem.second, cache) ) );
+        m_container.insert( ValueType(elem.first, ::fwData::Object::copy(elem.second, cache) ) );
     }
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/Edge.cpp b/SrcLib/core/fwData/src/fwData/Edge.cpp
index bca17a4..23b0fa2 100644
--- a/SrcLib/core/fwData/src/fwData/Edge.cpp
+++ b/SrcLib/core/fwData/src/fwData/Edge.cpp
@@ -1,23 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Edge.hpp"
 
 fwDataRegisterMacro( ::fwData::Edge );
-namespace fwData {
+
+namespace fwData
+{
+
 std::string Edge::NATURE_FLOW = "flow";
 std::string Edge::NATURE_DATA = "data";
 
 //------------------------------------------------------------------------------
 
 Edge::Edge( ::fwData::Object::Key key ) :
-    m_fromPortIdentifier("not defined"), m_toPortIdentifier("not defined"), m_nature("not defined")
+    m_fromPortIdentifier("not defined"),
+    m_toPortIdentifier("not defined"),
+    m_nature("not defined")
 {
     SLM_TRACE_FUNC();
 }
@@ -34,14 +38,14 @@ Edge::~Edge()
 void Edge::setIdentifiers(const std::string & fromPortIndentifier, const std::string & toPortIndentifier)
 {
     m_fromPortIdentifier = fromPortIndentifier;
-    m_toPortIdentifier = toPortIndentifier;
+    m_toPortIdentifier   = toPortIndentifier;
 }
 
 //------------------------------------------------------------------------------
 
 std::pair<std::string,std::string> Edge::getIdentifiers() const
 {
-    return make_pair(m_fromPortIdentifier , m_toPortIdentifier);
+    return make_pair(m_fromPortIdentifier, m_toPortIdentifier);
 }
 
 //------------------------------------------------------------------------------
@@ -63,14 +67,14 @@ std::string Edge::getToPortID() const
 
 std::string Edge::getPortID(bool upStream) const
 {
-    return upStream?m_fromPortIdentifier:m_toPortIdentifier;
+    return upStream ? m_fromPortIdentifier : m_toPortIdentifier;
 }
 
 //------------------------------------------------------------------------------
 
 void Edge::setNature(std::string nature)
 {
-    m_nature =  nature;
+    m_nature = nature;
 }
 
 //------------------------------------------------------------------------------
@@ -85,13 +89,13 @@ void Edge::shallowCopy(const Object::csptr &_source )
 {
     Edge::csptr other = Edge::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldShallowCopy( _source );
     m_fromPortIdentifier = other->m_fromPortIdentifier;
-    m_toPortIdentifier = other->m_toPortIdentifier;
-    m_nature = other->m_nature;
+    m_toPortIdentifier   = other->m_toPortIdentifier;
+    m_nature             = other->m_nature;
 }
 
 //------------------------------------------------------------------------------
@@ -100,12 +104,12 @@ void Edge::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 {
     Edge::csptr other = Edge::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_fromPortIdentifier = other->m_fromPortIdentifier;
-    m_toPortIdentifier = other->m_toPortIdentifier;
-    m_nature = other->m_nature;
+    m_toPortIdentifier   = other->m_toPortIdentifier;
+    m_nature             = other->m_nature;
 
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/Exception.cpp b/SrcLib/core/fwData/src/fwData/Exception.cpp
index 0f7eff6..af58216 100644
--- a/SrcLib/core/fwData/src/fwData/Exception.cpp
+++ b/SrcLib/core/fwData/src/fwData/Exception.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,14 +9,15 @@
 namespace fwData
 {
 
-Exception::Exception(const std::string &message) throw()
-: ::fwCore::Exception(message)
-{}
+Exception::Exception(const std::string &message) throw() : ::fwCore::Exception(message)
+{
+}
 
 
 Exception::~Exception() throw()
-{}
+{
+}
+
 
 
-    
 } // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Float.cpp b/SrcLib/core/fwData/src/fwData/Float.cpp
index 5f2627e..af7dd9b 100644
--- a/SrcLib/core/fwData/src/fwData/Float.cpp
+++ b/SrcLib/core/fwData/src/fwData/Float.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,29 +15,32 @@ fwDataRegisterMacro( ::fwData::Float );
 
 namespace fwData
 {
+
 //------------------------------------------------------------------------------
 
 Float::Float( ) throw()
-{}
-
+{
+}
 
 //------------------------------------------------------------------------------
 
 Float::Float( ::fwData::Object::Key key ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 Float::~Float() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 void Float::shallowCopy(const Object::csptr &_source )
 {
     Float::csptr other = Float::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_value = other->m_value;
 }
@@ -48,8 +51,8 @@ void Float::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Float::csptr other = Float::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_value = other->m_value;
 }
diff --git a/SrcLib/core/fwData/src/fwData/GenericFieldBase.cpp b/SrcLib/core/fwData/src/fwData/GenericFieldBase.cpp
index 630a993..8c2ef1f 100644
--- a/SrcLib/core/fwData/src/fwData/GenericFieldBase.cpp
+++ b/SrcLib/core/fwData/src/fwData/GenericFieldBase.cpp
@@ -1,14 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
 #include "fwData/GenericFieldBase.hpp"
 
-
-namespace fwData 
+namespace fwData
 {
 
 std::ostream& operator<<( std::ostream &_os, const ::fwData::GenericFieldBase &lf )
diff --git a/SrcLib/core/fwData/src/fwData/Graph.cpp b/SrcLib/core/fwData/src/fwData/Graph.cpp
index c0bad03..b38c094 100644
--- a/SrcLib/core/fwData/src/fwData/Graph.cpp
+++ b/SrcLib/core/fwData/src/fwData/Graph.cpp
@@ -1,33 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
-
-
-#include <fwCom/Signal.hpp>
-#include <fwCom/Signal.hxx>
-#include <fwCom/Signals.hpp>
-
-
-#include <boost/foreach.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Edge.hpp"
 #include "fwData/Port.hpp"
 #include "fwData/Node.hpp"
 #include "fwData/Graph.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <utility>
+
 fwDataRegisterMacro( ::fwData::Graph );
 
 namespace fwData
 {
 
-const bool Graph::UP_STREAM = true;
+const bool Graph::UP_STREAM   = true;
 const bool Graph::DOWN_STREAM = false;
 
 const ::fwCom::Signals::SignalKeyType Graph::s_UPDATED_SIG = "updated";
@@ -42,16 +37,15 @@ Graph::Graph(::fwData::Object::Key key) :
     // Register
     m_signals( s_UPDATED_SIG,  m_sigUpdated);
 
-#ifdef COM_LOG
-    ::fwCom::HasSignals::m_signals.setID();
-#endif
+
 
 }
 
 //------------------------------------------------------------------------------
 
 Graph::~Graph()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -90,9 +84,9 @@ const Graph::NodeContainer &Graph::getCRefNodes() const
 
 bool Graph::haveConnectedEdges(Node::csptr node ) const
 {
-    for ( ConnectionContainer::const_iterator i=m_connections.begin() ; i !=  m_connections.end() ; ++i )
+    for(const auto&  connection : m_connections)
     {
-        if ( i->second.first == node ||  i->second.second == node)
+        if ( connection.second.first == node ||  connection.second.second == node)
         {
             return true;
         }
@@ -103,18 +97,18 @@ bool Graph::haveConnectedEdges(Node::csptr node ) const
 //------------------------------------------------------------------------------
 
 Edge::sptr Graph::makeConnection(
-        Node::csptr nodeSource,
-        std::string nodeSourceOutputPortID,
-        Node::csptr nodeDestination,
-        std::string nodeDestinationInputPortID,
-        std::string EdgeNature )
+    Node::csptr nodeSource,
+    std::string nodeSourceOutputPortID,
+    Node::csptr nodeDestination,
+    std::string nodeDestinationInputPortID,
+    std::string EdgeNature )
 {
     ::fwData::Edge::sptr nEdge = ::fwData::Edge::New();
     nEdge->setIdentifiers( nodeSourceOutputPortID, nodeDestinationInputPortID );
     nEdge->setNature( EdgeNature );
     if ( addEdge( nEdge, nodeSource, nodeDestination ) )
     {
-          return nEdge;// success return new Edge
+        return nEdge;  // success return new Edge
     }
     else
     {
@@ -131,26 +125,26 @@ bool Graph::addEdge(Edge::sptr edge, Node::csptr nodeSource, Node::csptr nodeDes
     {
         return false; // edge already stored
     }
-    // node registred ?
+    // node registered ?
     if (m_nodes.find( Node::constCast(nodeSource) ) ==  m_nodes.end() )
     {
         return false; // node already stored
     }
-    // node registred ?
+    // node registered ?
     if ( m_nodes.find( Node::constCast(nodeDestination) ) ==  m_nodes.end() )
     {
         return false; // node already stored
     }
 
-    // test port existance
+    // test port existence
     Port::sptr sourcePort = nodeSource->findPort( edge->getIdentifiers().first, DOWN_STREAM );
     if ( !sourcePort )
     {
         return false; // port doesn't exist
     }
 
-    // test port existance
-    Port::sptr sourceDest= nodeDestination->findPort( edge->getIdentifiers().second , UP_STREAM );
+    // test port existence
+    Port::sptr sourceDest = nodeDestination->findPort( edge->getIdentifiers().second, UP_STREAM );
     if ( !sourceDest )
     {
         return false; // port doesn't exist
@@ -233,21 +227,21 @@ std::vector< Edge::sptr > Graph::getEdges( const Node::csptr &node, bool upStrea
                                            const std::string &portID
                                            )
 {
-    SLM_ASSERT("Node " + node->getID()  + " not found in graph", m_nodes.find( Node::constCast(node) ) != m_nodes.end());
+    SLM_ASSERT("Node " + node->getID()  + " not found in graph", m_nodes.find( Node::constCast(node) ) !=
+               m_nodes.end());
     SLM_ASSERT("Port " + portID  + " not found on node" + node->getID(),
                portID.empty() || node->findPort(portID, upStream));
 
     std::vector< Edge::sptr > result;
     result.reserve(4);
 
-    ConnectionContainer::const_iterator end = m_connections.end();
-    for ( ConnectionContainer::const_iterator i=m_connections.begin(); i != end; ++i )
+    for(const auto&  connection : m_connections)
     {
-        const Edge::sptr &edge = i->first;
-        const Node::sptr &nodeFrom = i->second.first;
-        const Node::sptr &nodeTo = i->second.second;
+        const Edge::sptr &edge     = connection.first;
+        const Node::sptr &nodeFrom = connection.second.first;
+        const Node::sptr &nodeTo   = connection.second.second;
 
-        bool isConnectedEdge = ( upStream ? nodeTo : nodeFrom ) == node ;
+        bool isConnectedEdge = ( upStream ? nodeTo : nodeFrom ) == node;
         if( !isConnectedEdge)
         {
             continue;
@@ -259,7 +253,7 @@ std::vector< Edge::sptr > Graph::getEdges( const Node::csptr &node, bool upStrea
             continue;
         }
 
-        bool isCorrectNature =  nature.empty() || edge->getNature() == nature;
+        bool isCorrectNature = nature.empty() || edge->getNature() == nature;
         if( !isCorrectNature)
         {
             continue;
@@ -273,18 +267,16 @@ std::vector< Edge::sptr > Graph::getEdges( const Node::csptr &node, bool upStrea
 
 //------------------------------------------------------------------------------
 
-std::vector< ::fwData::Node::sptr >
-Graph::getNodes(
-        const ::fwData::Node::csptr &node,
-        bool upStream,
-        const std::string &nature,
-        const std::string &portID )
+std::vector< ::fwData::Node::sptr > Graph::getNodes( const ::fwData::Node::csptr &node,
+                                                     bool upStream,
+                                                     const std::string &nature,
+                                                     const std::string &portID )
 {
     std::vector< Edge::sptr > edges;
     edges = getEdges( node, upStream, nature, portID);
 
     std::vector< Node::sptr > nodes;
-    BOOST_FOREACH( Edge::sptr edge, edges )
+    for(const Edge::sptr& edge : edges )
     {
         Node::sptr distantNode;
         distantNode = ( upStream ? m_connections[edge].first : m_connections[edge].second );
@@ -332,10 +324,10 @@ void Graph::shallowCopy(const Object::csptr &_source )
 {
     Graph::csptr other = Graph::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    m_nodes = other->m_nodes;
+    m_nodes       = other->m_nodes;
     m_connections = other->m_connections;
 }
 
@@ -345,32 +337,32 @@ void Graph::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Graph::csptr other = Graph::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
     std::map< ::fwData::Node::sptr, ::fwData::Node::sptr > correspondenceBetweenNodes;
     typedef std::pair< Edge::sptr,  std::pair<  Node::sptr,  Node::sptr > > ConnectionContainerElt;
 
     m_nodes.clear();
-    BOOST_FOREACH(const ::fwData::Node::sptr &node, other->m_nodes)
+    for(const ::fwData::Node::sptr &node : other->m_nodes)
     {
         ::fwData::Node::sptr newNode = ::fwData::Object::copy(node, cache);
-        bool addOK =this->addNode(newNode);
+        bool addOK = this->addNode(newNode);
         OSLM_ASSERT("Node "<<newNode->getID() <<" can't be added ", addOK );
         FwCoreNotUsedMacro(addOK);
         correspondenceBetweenNodes.insert(std::make_pair(node, newNode));
     }
 
     m_connections.clear();
-    BOOST_FOREACH(const ConnectionContainerElt &connection, other->m_connections)
+    for(const ConnectionContainerElt &connection : other->m_connections)
     {
         // Edge deep copy .
-        ::fwData::Edge::sptr newEdge = ::fwData::Object::copy(connection.first, cache);
+        ::fwData::Edge::sptr newEdge  = ::fwData::Object::copy(connection.first, cache);
         ::fwData::Node::sptr oldNode1 = (connection.second).first;
         ::fwData::Node::sptr oldNode2 = (connection.second).second;
         if ((correspondenceBetweenNodes.find(Node::constCast(oldNode1))!= correspondenceBetweenNodes.end())
-             && (correspondenceBetweenNodes.find(Node::constCast(oldNode2)) != correspondenceBetweenNodes.end()))
+            && (correspondenceBetweenNodes.find(Node::constCast(oldNode2)) != correspondenceBetweenNodes.end()))
         {
             // Add new Edge
             this->addEdge(newEdge, correspondenceBetweenNodes[oldNode1], correspondenceBetweenNodes[oldNode2]);
diff --git a/SrcLib/core/fwData/src/fwData/Histogram.cpp b/SrcLib/core/fwData/src/fwData/Histogram.cpp
index acd1f75..a3e8a1f 100644
--- a/SrcLib/core/fwData/src/fwData/Histogram.cpp
+++ b/SrcLib/core/fwData/src/fwData/Histogram.cpp
@@ -1,14 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
-#include <fwData/Image.hpp>
-
+#include "fwData/Image.hpp"
 #include "fwData/Histogram.hpp"
 
 
@@ -18,9 +16,9 @@ fwDataRegisterMacro( ::fwData::Histogram );
 namespace fwData
 {
 
-Histogram::Histogram(::fwData::Object::Key key) : m_binsWidth(1),
-                                                  m_minValue(0),
-                                                  m_maxValue(100)
+Histogram::Histogram(::fwData::Object::Key key) : m_binsWidth(1.f),
+                                                  m_minValue(0.f),
+                                                  m_maxValue(100.f)
 {
 }
 
@@ -37,12 +35,12 @@ void Histogram::shallowCopy(const Object::csptr &_source )
 {
     Histogram::csptr other = Histogram::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    m_values = other->m_values;
-    m_minValue = other->m_minValue;
-    m_maxValue = other->m_maxValue;
+    m_values    = other->m_values;
+    m_minValue  = other->m_minValue;
+    m_maxValue  = other->m_maxValue;
     m_binsWidth = other->m_binsWidth;
 }
 
@@ -52,17 +50,17 @@ void Histogram::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &
 {
     Histogram::csptr other = Histogram::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_minValue = other->m_minValue;
-    m_maxValue = other->m_maxValue;
+    m_minValue  = other->m_minValue;
+    m_maxValue  = other->m_maxValue;
     m_binsWidth = other->m_binsWidth;
 
     m_values.clear();
 
-    BOOST_FOREACH( long value, other->m_values )
+    for(long value : other->m_values )
     {
         m_values.push_back( value );
     }
@@ -85,8 +83,8 @@ void Histogram::initialize( float _min, float _max, float _binsWidth )
 {
     SLM_ASSERT("The minimum value can't be greater than the maximum value", _min <= _max);
 
-    m_minValue = _min;
-    m_maxValue = _max;
+    m_minValue  = _min;
+    m_maxValue  = _max;
     m_binsWidth = _binsWidth;
 
     m_values.clear();
diff --git a/SrcLib/core/fwData/src/fwData/Image.cpp b/SrcLib/core/fwData/src/fwData/Image.cpp
index 59354a1..e9deac5 100644
--- a/SrcLib/core/fwData/src/fwData/Image.cpp
+++ b/SrcLib/core/fwData/src/fwData/Image.cpp
@@ -1,30 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <numeric>
-#include <functional>
-#include <algorithm>
-#include <sstream>
-
-#include <fwCore/base.hpp>
-
-#include <boost/lexical_cast.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <climits>
-#include <fwTools/DynamicType.hpp>
-#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
 
+#include "fwData/Image.hpp"
+#include "fwData/registry/macros.hpp"
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include "fwData/registry/macros.hpp"
+#include <fwCore/base.hpp>
 
-#include "fwData/Image.hpp"
+#include <fwTools/DynamicType.hpp>
+#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
+
+#include <climits>
+#include <numeric>
+#include <functional>
+#include <algorithm>
+#include <sstream>
 
 //------------------------------------------------------------------------------
 
@@ -35,15 +33,39 @@ fwDataRegisterMacro( ::fwData::Image );
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType Image::s_BUFFER_MODIFIED_SIG       = "bufferModified";
+const ::fwCom::Signals::SignalKeyType Image::s_LANDMARK_ADDED_SIG        = "landmarkAdded";
+const ::fwCom::Signals::SignalKeyType Image::s_LANDMARK_REMOVED_SIG      = "landmarkRemoved";
+const ::fwCom::Signals::SignalKeyType Image::s_LANDMARK_DISPLAYED_SIG    = "landmarkDisplayed";
+const ::fwCom::Signals::SignalKeyType Image::s_DISTANCE_ADDED_SIG        = "distanceAdded";
+const ::fwCom::Signals::SignalKeyType Image::s_DISTANCE_REMOVED_SIG      = "distanceRemoved";
+const ::fwCom::Signals::SignalKeyType Image::s_DISTANCE_DISPLAYED_SIG    = "distanceDisplayed";
+const ::fwCom::Signals::SignalKeyType Image::s_SLICE_INDEX_MODIFIED_SIG  = "sliceIndexModified";
+const ::fwCom::Signals::SignalKeyType Image::s_SLICE_TYPE_MODIFIED_SIG   = "sliceTypeModified";
+const ::fwCom::Signals::SignalKeyType Image::s_VISIBILITY_MODIFIED_SIG   = "visibilityModified";
+const ::fwCom::Signals::SignalKeyType Image::s_TRANSPARENCY_MODIFIED_SIG = "transparencyModified";
+
 //------------------------------------------------------------------------------
 
 Image::Image(::fwData::Object::Key key) :
-        m_type(),
-        m_attrWindowCenter(0),
-        m_attrWindowWidth(0),
-        m_attrNumberOfComponents(1),
-        m_dataArray( ::fwData::Array::New() )
-{}
+    m_type(),
+    m_windowCenter(0.),
+    m_windowWidth(0.),
+    m_numberOfComponents(1),
+    m_dataArray( ::fwData::Array::New() )
+{
+    newSignal< BufferModifiedSignalType >(s_BUFFER_MODIFIED_SIG);
+    newSignal< LandmarkAddedSignalType >(s_LANDMARK_ADDED_SIG);
+    newSignal< LandmarkRemovedSignalType >(s_LANDMARK_REMOVED_SIG);
+    newSignal< LandmarkDisplayedSignalType >(s_LANDMARK_DISPLAYED_SIG);
+    newSignal< DistanceDisplayedSignalType >(s_DISTANCE_DISPLAYED_SIG);
+    newSignal< DistanceAddedSignalType >(s_DISTANCE_ADDED_SIG);
+    newSignal< DistanceRemovedSignalType >(s_DISTANCE_REMOVED_SIG);
+    newSignal< SliceIndexModifiedSignalType >(s_SLICE_INDEX_MODIFIED_SIG);
+    newSignal< SliceTypeModifiedSignalType >(s_SLICE_TYPE_MODIFIED_SIG);
+    newSignal< VisibilityModifiedSignalType >(s_VISIBILITY_MODIFIED_SIG);
+    newSignal< TransparencyModifiedSignalType >(s_TRANSPARENCY_MODIFIED_SIG);
+}
 
 //------------------------------------------------------------------------------
 
@@ -58,14 +80,14 @@ void Image::shallowCopy(const Object::csptr &_source )
 {
     Image::csptr other = Image::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
     // Assign
     copyInformation( other );
 
-    m_dataArray  = other->m_dataArray;
+    m_dataArray = other->m_dataArray;
 }
 
 //-----------------------------------------------------------------------------
@@ -74,8 +96,8 @@ void Image::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Image::csptr other = Image::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
     // Assign
@@ -98,7 +120,7 @@ void Image::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 
 void Image::setDataArray(::fwData::Array::sptr array, bool copyArrayInfo)
 {
-    if( ! array )
+    if( !array )
     {
         array = ::fwData::Array::New();
     }
@@ -120,8 +142,8 @@ size_t Image::allocate() throw(::fwData::Exception)
         m_dataArray = ::fwData::Array::New();
     }
 
-    OSLM_ASSERT( "NumberOfComponents must be > 0", m_attrNumberOfComponents > 0 );
-    return m_dataArray->resize(m_type, m_size, m_attrNumberOfComponents, true);
+    SLM_ASSERT( "NumberOfComponents must be > 0", m_numberOfComponents > 0 );
+    return m_dataArray->resize(m_type, m_size, m_numberOfComponents, true);
 }
 
 //------------------------------------------------------------------------------
@@ -129,20 +151,20 @@ size_t Image::allocate() throw(::fwData::Exception)
 size_t Image::allocate(SizeType::value_type x, SizeType::value_type y,  SizeType::value_type z,
                        const ::fwTools::Type &type, size_t numberOfComponents) throw(::fwData::Exception)
 {
-    m_size = boost::assign::list_of(x)(y)(z);
-    m_type = type;
-    m_attrNumberOfComponents = numberOfComponents;
+    m_size               = { x, y, z};
+    m_type               = type;
+    m_numberOfComponents = numberOfComponents;
     return allocate();
 }
 
 //------------------------------------------------------------------------------
 
 size_t Image::allocate(const SizeType &size, const ::fwTools::Type &type, size_t numberOfComponents)
-    throw(::fwData::Exception)
+throw(::fwData::Exception)
 {
-    m_size = size;
-    m_type = type;
-    m_attrNumberOfComponents = numberOfComponents;
+    m_size               = size;
+    m_type               = type;
+    m_numberOfComponents = numberOfComponents;
     return allocate();
 }
 
@@ -153,29 +175,37 @@ size_t Image::allocate(const SizeType &size, const ::fwTools::Type &type, size_t
     typedef std::map<std::string, ::fwTools::DynamicType> DynamicTypeMapType;
 
     static DynamicTypeMapType dynamicTypeMap = ::boost::assign::map_list_of
-        (::fwTools::Type().string() , ::fwTools::DynamicType() )
-        ("uint8" , ::fwTools::makeDynamicType<std::string>("unsigned char")  )
-        ("uint16", ::fwTools::makeDynamicType<std::string>("unsigned short") )
-        ("uint32", ::fwTools::makeDynamicType<std::string>("unsigned int")   )
-        ("int8" ,  ::fwTools::makeDynamicType<std::string>("signed char")    )
-        ("int16",  ::fwTools::makeDynamicType<std::string>("signed short")   )
-        ("int32",  ::fwTools::makeDynamicType<std::string>("signed int")     )
-        ("float",  ::fwTools::makeDynamicType<std::string>("float")          )
-        ("double", ::fwTools::makeDynamicType<std::string>("double")         )
+                                                   (::fwTools::Type().string(), ::fwTools::DynamicType() )
+                                                   ("uint8", ::fwTools::makeDynamicType<std::string>("unsigned char")  )
+                                                   ("uint16",
+                                                   ::fwTools::makeDynamicType<std::string>("unsigned short") )
+                                                   ("uint32",
+                                                   ::fwTools::makeDynamicType<std::string>("unsigned int")   )
+                                                   ("int8",  ::fwTools::makeDynamicType<std::string>("signed char")    )
+                                                   ("int16",
+                                                   ::fwTools::makeDynamicType<std::string>("signed short")   )
+                                                   ("int32",
+                                                   ::fwTools::makeDynamicType<std::string>("signed int")     )
+                                                   ("float",
+                                                   ::fwTools::makeDynamicType<std::string>("float")          )
+                                                   ("double",
+                                                   ::fwTools::makeDynamicType<std::string>("double")         )
 
 //special case for dynamic type : 64bits integers was not managed by dynamic type.
 #if ( INT_MAX < LONG_MAX )
-        ("uint64", ::fwTools::makeDynamicType<std::string>("unsigned long")  )
-        ("int64",  ::fwTools::makeDynamicType<std::string>("signed long")    )
+                                               ("uint64", ::fwTools::makeDynamicType<std::string>("unsigned long")  )
+                                                   ("int64",
+                                                   ::fwTools::makeDynamicType<std::string>("signed long")    )
 #else
-        ("uint32", ::fwTools::makeDynamicType<std::string>("unsigned long")  )
-        ("int32",  ::fwTools::makeDynamicType<std::string>("signed long")    )
-        ("uint64", ::fwTools::DynamicType() )
-        ("int64",  ::fwTools::DynamicType() )
+                                               ("uint32", ::fwTools::makeDynamicType<std::string>("unsigned long")  )
+                                                   ("int32",
+                                                   ::fwTools::makeDynamicType<std::string>("signed long")    )
+                                                   ("uint64", ::fwTools::DynamicType() )
+                                                   ("int64",  ::fwTools::DynamicType() )
 #endif
-        ;
+    ;
 
-    ::fwTools::DynamicType dtype = dynamicTypeMap[getType().string()] ;
+    ::fwTools::DynamicType dtype = dynamicTypeMap[getType().string()];
     return dtype;
 }
 
@@ -193,7 +223,6 @@ void Image::setType(::fwTools::Type type)
     m_type = type;
 }
 
-
 //------------------------------------------------------------------------------
 
 void Image::setType(const std::string &type)
@@ -205,13 +234,13 @@ void Image::setType(const std::string &type)
 
 void Image::copyInformation( Image::csptr _source )
 {
-    m_size                   = _source->m_size;
-    m_type                   = _source->m_type;
-    m_spacing                = _source->m_spacing;
-    m_origin                 = _source->m_origin;
-    m_attrWindowCenter       = _source->m_attrWindowCenter;
-    m_attrWindowWidth        = _source->m_attrWindowWidth;
-    m_attrNumberOfComponents = _source->m_attrNumberOfComponents;
+    m_size               = _source->m_size;
+    m_type               = _source->m_type;
+    m_spacing            = _source->m_spacing;
+    m_origin             = _source->m_origin;
+    m_windowCenter       = _source->m_windowCenter;
+    m_windowWidth        = _source->m_windowWidth;
+    m_numberOfComponents = _source->m_numberOfComponents;
 }
 
 //------------------------------------------------------------------------------
@@ -221,7 +250,6 @@ size_t Image::getNumberOfDimensions() const
     return m_size.size();
 }
 
-
 //------------------------------------------------------------------------------
 
 const Image::SpacingType & Image::getSpacing() const
@@ -229,7 +257,6 @@ const Image::SpacingType & Image::getSpacing() const
     return m_spacing;
 }
 
-
 //------------------------------------------------------------------------------
 
 void Image::setSpacing(const SpacingType &spacing)
@@ -272,13 +299,12 @@ size_t Image::getSizeInBytes() const
     SLM_TRACE_FUNC();
 
     size_t size = std::accumulate(
-                                  m_size.begin(), m_size.end(),
-                                  static_cast<size_t>(m_type.sizeOf()) * m_attrNumberOfComponents,
-                                  std::multiplies< size_t > () );
+        m_size.begin(), m_size.end(),
+        static_cast<size_t>(m_type.sizeOf()) * m_numberOfComponents,
+        std::multiplies< size_t > () );
     return size;
 }
 
-
 //------------------------------------------------------------------------------
 
 size_t Image::getAllocatedSizeInBytes() const
diff --git a/SrcLib/core/fwData/src/fwData/Integer.cpp b/SrcLib/core/fwData/src/fwData/Integer.cpp
index f74b21d..e8b277b 100644
--- a/SrcLib/core/fwData/src/fwData/Integer.cpp
+++ b/SrcLib/core/fwData/src/fwData/Integer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,12 +19,14 @@ namespace fwData
 //------------------------------------------------------------------------------
 
 Integer::Integer(::fwData::Object::Key key ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 Integer::~Integer() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -32,8 +34,8 @@ void Integer::shallowCopy(const Object::csptr &_source )
 {
     Integer::csptr other = Integer::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_value = other->m_value;
 }
@@ -44,8 +46,8 @@ void Integer::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &ca
 {
     Integer::csptr other = Integer::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_value = other->m_value;
 }
diff --git a/SrcLib/core/fwData/src/fwData/Line.cpp b/SrcLib/core/fwData/src/fwData/Line.cpp
index d72df87..2d18850 100644
--- a/SrcLib/core/fwData/src/fwData/Line.cpp
+++ b/SrcLib/core/fwData/src/fwData/Line.cpp
@@ -1,17 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
-
-
 #include "fwData/Line.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::Line );
 
 namespace fwData
@@ -37,10 +35,10 @@ void Line::shallowCopy(const Object::csptr &_source )
 {
     Line::csptr other = Line::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    m_position = other->m_position;
+    m_position  = other->m_position;
     m_direction = other->m_direction;
 }
 
@@ -50,17 +48,18 @@ void Line::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 {
     Line::csptr other = Line::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
-    m_position = ::fwData::Object::copy( other->m_position, cache );
+    m_position  = ::fwData::Object::copy( other->m_position, cache );
     m_direction = ::fwData::Object::copy( other->m_direction, cache );
 }
 
 //------------------------------------------------------------------------------
 
-void Line::setValue( ::fwData::Point::sptr _position, ::fwData::Point::sptr  _direction) {
-    m_position = _position;
+void Line::setValue(const ::fwData::Point::sptr& _position, const ::fwData::Point::sptr&  _direction)
+{
+    m_position  = _position;
     m_direction = _direction;
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/List.cpp b/SrcLib/core/fwData/src/fwData/List.cpp
index 009abc7..676c9bb 100644
--- a/SrcLib/core/fwData/src/fwData/List.cpp
+++ b/SrcLib/core/fwData/src/fwData/List.cpp
@@ -1,16 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
-
 #include "fwData/List.hpp"
 
-
 fwDataRegisterMacro( ::fwData::List );
 
 namespace fwData
@@ -36,10 +33,10 @@ void List::shallowCopy(const Object::csptr &_source )
 {
     List::csptr other = List::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    m_attrContainer = other->m_attrContainer;
+    m_container = other->m_container;
 }
 
 //------------------------------------------------------------------------------
@@ -48,14 +45,14 @@ void List::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 {
     List::csptr other = List::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_attrContainer.clear();
-    BOOST_FOREACH(const ContainerType::value_type &obj, other->m_attrContainer)
+    m_container.clear();
+    for(const ContainerType::value_type &obj : other->m_container)
     {
-        m_attrContainer.push_back( ::fwData::Object::copy(obj, cache) );
+        m_container.push_back( ::fwData::Object::copy(obj, cache) );
     }
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/Material.cpp b/SrcLib/core/fwData/src/fwData/Material.cpp
index 2bdf254..6069222 100644
--- a/SrcLib/core/fwData/src/fwData/Material.cpp
+++ b/SrcLib/core/fwData/src/fwData/Material.cpp
@@ -1,12 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Material.hpp"
 
 fwDataRegisterMacro( ::fwData::Material );
@@ -14,13 +16,24 @@ fwDataRegisterMacro( ::fwData::Material );
 namespace fwData
 {
 
+//------------------------------------------------------------------------------
+
+const ::fwCom::Signals::SignalKeyType Material::s_ADDED_TEXTURE_SIG   = "addedTexture";
+const ::fwCom::Signals::SignalKeyType Material::s_REMOVED_TEXTURE_SIG = "removedTexture";
+
+//------------------------------------------------------------------------------
+
 Material::Material(::fwData::Object::Key key) :
-    m_shadingMode(MODE_PHONG),
-    m_representationMode(MODE_SURFACE),
-    m_optionsMode(MODE_STANDARD),
-    m_ambient( Color::New() ),
-    m_diffuse( Color::New() )
+    m_shadingMode(PHONG),
+    m_representationMode(SURFACE),
+    m_optionsMode(STANDARD),
+    m_ambient( Color::New(0.05f, 0.05f, 0.05f, 1.f) ),
+    m_diffuse( Color::New() ),
+    m_diffuseTextureFiltering(NEAREST),
+    m_diffuseTextureWrapping(REPEAT)
 {
+    newSignal< AddedTextureSignalType >(s_ADDED_TEXTURE_SIG);
+    newSignal< RemovedTextureSignalType >(s_REMOVED_TEXTURE_SIG);
 }
 
 //------------------------------------------------------------------------------
@@ -35,16 +48,19 @@ void Material::shallowCopy(const Object::csptr &_source )
 {
     Material::csptr other = Material::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
-    m_ambient = other->m_ambient;
-    m_diffuse = other->m_diffuse;
+    m_ambient        = other->m_ambient;
+    m_diffuse        = other->m_diffuse;
+    m_diffuseTexture = other->m_diffuseTexture;
 
-    m_shadingMode = other->m_shadingMode;
-    m_representationMode = other->m_representationMode;
-    m_optionsMode = other->m_optionsMode;
+    m_shadingMode             = other->m_shadingMode;
+    m_representationMode      = other->m_representationMode;
+    m_optionsMode             = other->m_optionsMode;
+    m_diffuseTextureFiltering = other->m_diffuseTextureFiltering;
+    m_diffuseTextureWrapping  = other->m_diffuseTextureWrapping;
 }
 
 //------------------------------------------------------------------------------
@@ -53,46 +69,63 @@ void Material::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &c
 {
     Material::csptr other = Material::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_ambient = ::fwData::Object::copy( other->m_ambient, cache );
-    m_diffuse = ::fwData::Object::copy( other->m_diffuse, cache );
+    m_ambient        = ::fwData::Object::copy( other->m_ambient, cache );
+    m_diffuse        = ::fwData::Object::copy( other->m_diffuse, cache );
+    m_diffuseTexture = ::fwData::Object::copy( other->m_diffuseTexture, cache );
 
-    m_shadingMode = other->m_shadingMode;
-    m_representationMode = other->m_representationMode;
-    m_optionsMode = other->m_optionsMode;
+    m_shadingMode             = other->m_shadingMode;
+    m_representationMode      = other->m_representationMode;
+    m_optionsMode             = other->m_optionsMode;
+    m_diffuseTextureFiltering = other->m_diffuseTextureFiltering;
+    m_diffuseTextureWrapping  = other->m_diffuseTextureWrapping;
 }
 
 //------------------------------------------------------------------------------
 
 Color::sptr Material::ambient() const
 {
-    return m_ambient ;
+    return m_ambient;
 }
 
 //------------------------------------------------------------------------------
 
 Color::sptr Material::diffuse() const
 {
-    return m_diffuse ;
+    return m_diffuse;
+}
+
+//------------------------------------------------------------------------------
+
+Image::sptr Material::getDiffuseTexture() const
+{
+    return m_diffuseTexture;
 }
 
 //------------------------------------------------------------------------------
 
-void Material::setAmbient(Color::sptr ambient)
+void Material::setAmbient(const Color::sptr& ambient)
 {
     m_ambient = ambient;
 }
 
 //------------------------------------------------------------------------------
 
-void Material::setDiffuse(Color::sptr diffuse)
+void Material::setDiffuse(const Color::sptr& diffuse)
 {
     m_diffuse = diffuse;
 }
 
 //------------------------------------------------------------------------------
 
+void Material::setDiffuseTexture(const Image::sptr& diffuseTexture)
+{
+    m_diffuseTexture = diffuseTexture;
 }
+
+//------------------------------------------------------------------------------
+
+} //namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Mesh.cpp b/SrcLib/core/fwData/src/fwData/Mesh.cpp
index 7a663d7..8dda590 100644
--- a/SrcLib/core/fwData/src/fwData/Mesh.cpp
+++ b/SrcLib/core/fwData/src/fwData/Mesh.cpp
@@ -1,22 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwData/Mesh.hpp"
 
-#include <cstdlib>
-#include <functional>
-#include <numeric>
-
-#include <boost/bind.hpp>
-#include <boost/assign/list_of.hpp>
+#include <fwCom/Signal.hxx>
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-#include "fwData/Mesh.hpp"
 
-using namespace boost::assign;
+#include <functional>
+#include <cstdlib>
+#include <functional>
+#include <numeric>
 
 namespace fwData
 {
@@ -30,15 +28,36 @@ fwDataRegisterMacro( ::fwData::Mesh );
 
 //------------------------------------------------------------------------------
 
-Mesh::Mesh(::fwData::Object::Key key) : m_nbPoints(0), m_nbCells(0),  m_cellsDataSize(0)
+const ::fwCom::Signals::SignalKeyType Mesh::s_VERTEX_MODIFIED_SIG           = "vertexModified";
+const ::fwCom::Signals::SignalKeyType Mesh::s_POINT_COLORS_MODIFIED_SIG     = "pointColorsModified";
+const ::fwCom::Signals::SignalKeyType Mesh::s_CELL_COLORS_MODIFIED_SIG      = "cellColorsModified";
+const ::fwCom::Signals::SignalKeyType Mesh::s_POINT_NORMALS_MODIFIED_SIG    = "pointNormalsModified";
+const ::fwCom::Signals::SignalKeyType Mesh::s_CELL_NORMALS_MODIFIED_SIG     = "cellNormalsModified";
+const ::fwCom::Signals::SignalKeyType Mesh::s_POINT_TEX_COORDS_MODIFIED_SIG = "pointTexCoordsModified";
+const ::fwCom::Signals::SignalKeyType Mesh::s_CELL_TEX_COORDS_MODIFIED_SIG  = "cellTexCoordsModified";
+
+//------------------------------------------------------------------------------
+
+Mesh::Mesh(::fwData::Object::Key key) : m_nbPoints(0),
+                                        m_nbCells(0),
+                                        m_cellsDataSize(0)
 {
+    newSignal<VertexModifiedSignalType>(s_VERTEX_MODIFIED_SIG);
+    newSignal<PointColorsModifiedSignalType>(s_POINT_COLORS_MODIFIED_SIG);
+    newSignal<CellColorsModifiedSignalType>(s_CELL_COLORS_MODIFIED_SIG);
+    newSignal<PointNormalsModifiedSignalType>(s_POINT_NORMALS_MODIFIED_SIG);
+    newSignal<CellNormalsModifiedSignalType>(s_CELL_NORMALS_MODIFIED_SIG);
+    newSignal<PointTexCoordsModifiedSignalType>(s_POINT_TEX_COORDS_MODIFIED_SIG);
+    newSignal<CellTexCoordsModifiedSignalType>(s_CELL_TEX_COORDS_MODIFIED_SIG);
+
     this->initArrays();
 }
 
 //------------------------------------------------------------------------------
 
 Mesh::~Mesh()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -46,15 +65,15 @@ void Mesh::initArrays()
 {
     if (!m_points)
     {
-        m_points          = ::fwData::Array::New();
+        m_points = ::fwData::Array::New();
     }
     if (!m_cellTypes)
     {
-        m_cellTypes       = ::fwData::Array::New();
+        m_cellTypes = ::fwData::Array::New();
     }
     if (!m_cellData)
     {
-        m_cellData        = ::fwData::Array::New();
+        m_cellData = ::fwData::Array::New();
     }
     if (!m_cellDataOffsets)
     {
@@ -80,25 +99,27 @@ void Mesh::shallowCopy(const Object::csptr &_source )
 {
     Mesh::csptr other = Mesh::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
-    m_nbPoints        = other->m_nbPoints;
-    m_nbCells         = other->m_nbCells;
-    m_cellsDataSize   = other->m_cellsDataSize;
+    m_nbPoints      = other->m_nbPoints;
+    m_nbCells       = other->m_nbCells;
+    m_cellsDataSize = other->m_cellsDataSize;
 
     m_points          = other->m_points;
     m_cellTypes       = other->m_cellTypes;
     m_cellData        = other->m_cellData;
     m_cellDataOffsets = other->m_cellDataOffsets;
 
-    m_pointColors     = other->m_pointColors;
-    m_cellColors      = other->m_cellColors;
-    m_pointNormals    = other->m_pointNormals;
-    m_cellNormals     = other->m_cellNormals;
+    m_pointColors    = other->m_pointColors;
+    m_cellColors     = other->m_cellColors;
+    m_pointNormals   = other->m_pointNormals;
+    m_cellNormals    = other->m_cellNormals;
+    m_cellTexCoords  = other->m_cellTexCoords;
+    m_pointTexCoords = other->m_pointTexCoords;
 
-    m_arrayMap        = other->m_arrayMap;
+    m_arrayMap = other->m_arrayMap;
 }
 
 //------------------------------------------------------------------------------
@@ -107,8 +128,8 @@ void Mesh::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 {
     Mesh::csptr other = Mesh::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !other );
     this->fieldDeepCopy( _source, cache );
 
     m_nbPoints      = other->m_nbPoints;
@@ -123,13 +144,15 @@ void Mesh::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
     m_cellDataOffsets = ::fwData::Object::copy( other->m_cellDataOffsets, cache );
 
     //Object::copy returns a null object if source object is null
-    m_pointColors  = ::fwData::Object::copy( other->m_pointColors , cache );
-    m_cellColors   = ::fwData::Object::copy( other->m_cellColors  , cache );
-    m_pointNormals = ::fwData::Object::copy( other->m_pointNormals, cache );
-    m_cellNormals  = ::fwData::Object::copy( other->m_cellNormals , cache );
+    m_pointColors    = ::fwData::Object::copy( other->m_pointColors, cache );
+    m_cellColors     = ::fwData::Object::copy( other->m_cellColors, cache );
+    m_pointNormals   = ::fwData::Object::copy( other->m_pointNormals, cache );
+    m_cellNormals    = ::fwData::Object::copy( other->m_cellNormals, cache );
+    m_cellTexCoords  = ::fwData::Object::copy( other->m_cellTexCoords, cache );
+    m_pointTexCoords = ::fwData::Object::copy( other->m_pointTexCoords, cache );
 
     m_arrayMap.clear();
-    BOOST_FOREACH(ArrayMapType::value_type element, other->m_arrayMap)
+    for(const ArrayMapType::value_type& element : other->m_arrayMap)
     {
         m_arrayMap[element.first] = ::fwData::Object::copy(element.second, cache);
     }
@@ -142,15 +165,15 @@ size_t Mesh::allocate(size_t nbPts, size_t nbCells, size_t nbCellsData) throw(::
 {
     if (nbCellsData == 0)
     {
-        nbCellsData = 3*nbCells;
+        nbCellsData = 3 * nbCells;
     }
 
     size_t allocatedSize = 0;
 
-    allocatedSize += m_points->resize         ( list_of(nbPts)      , true);
-    allocatedSize += m_cellTypes->resize      ( list_of(nbCells)    , true);
-    allocatedSize += m_cellData->resize       ( list_of(nbCellsData), true);
-    allocatedSize += m_cellDataOffsets->resize( list_of(nbCells)    , true);
+    allocatedSize += m_points->resize( {nbPts}, true );
+    allocatedSize += m_cellTypes->resize( {nbCells}, true );
+    allocatedSize += m_cellData->resize( {nbCellsData}, true );
+    allocatedSize += m_cellDataOffsets->resize( {nbCells}, true );
 
     return allocatedSize;
 }
@@ -160,11 +183,11 @@ size_t Mesh::allocate(size_t nbPts, size_t nbCells, size_t nbCellsData) throw(::
 size_t Mesh::allocatePointNormals() throw(::fwData::Exception)
 {
     size_t allocatedSize = 0;
-    if (! m_pointNormals )
+    if (!m_pointNormals )
     {
-        m_pointNormals  = ::fwData::Array::New();
+        m_pointNormals = ::fwData::Array::New();
     }
-    allocatedSize += m_pointNormals->resize( ::fwTools::Type::create<NormalValueType>(), list_of(m_nbPoints), 3, true);
+    allocatedSize += m_pointNormals->resize( ::fwTools::Type::create<NormalValueType>(), {size_t(m_nbPoints)}, 3, true);
     return allocatedSize;
 }
 
@@ -174,11 +197,26 @@ size_t Mesh::allocatePointColors(ColorArrayTypes t) throw(::fwData::Exception)
 {
     OSLM_ASSERT("Bad ColorArrayTypes : " << t, t == RGB || t == RGBA);
     size_t allocatedSize = 0;
-    if (! m_pointColors )
+    if (!m_pointColors )
     {
-        m_pointColors  = ::fwData::Array::New();
+        m_pointColors = ::fwData::Array::New();
     }
-    allocatedSize += m_pointColors->resize( ::fwTools::Type::create<ColorValueType>(), list_of(m_nbPoints), t, true);
+    allocatedSize += m_pointColors->resize( ::fwTools::Type::create<ColorValueType>(), {size_t(m_nbPoints)}, t, true);
+    return allocatedSize;
+}
+
+//------------------------------------------------------------------------------
+
+size_t Mesh::allocatePointTexCoords() throw(::fwData::Exception)
+{
+    size_t allocatedSize = 0;
+    if (!m_pointTexCoords )
+    {
+        m_pointTexCoords = ::fwData::Array::New();
+    }
+    allocatedSize += m_pointTexCoords->resize( ::fwTools::Type::create<TexCoordValueType>(), {size_t(
+                                                                                                  m_nbPoints)}, 2,
+                                               true);
     return allocatedSize;
 }
 
@@ -187,11 +225,11 @@ size_t Mesh::allocatePointColors(ColorArrayTypes t) throw(::fwData::Exception)
 size_t Mesh::allocateCellNormals() throw(::fwData::Exception)
 {
     size_t allocatedSize = 0;
-    if (! m_cellNormals )
+    if (!m_cellNormals )
     {
-        m_cellNormals  = ::fwData::Array::New();
+        m_cellNormals = ::fwData::Array::New();
     }
-    allocatedSize += m_cellNormals->resize( ::fwTools::Type::create<NormalValueType>(), list_of(m_nbCells), 3, true);
+    allocatedSize += m_cellNormals->resize( ::fwTools::Type::create<NormalValueType>(), {size_t(m_nbCells)}, 3, true);
     return allocatedSize;
 }
 
@@ -201,11 +239,25 @@ size_t Mesh::allocateCellColors(ColorArrayTypes t) throw(::fwData::Exception)
 {
     OSLM_ASSERT("Bad ColorArrayTypes : " << t, t == RGB || t == RGBA);
     size_t allocatedSize = 0;
-    if (! m_cellColors )
+    if (!m_cellColors )
+    {
+        m_cellColors = ::fwData::Array::New();
+    }
+    allocatedSize += m_cellColors->resize( ::fwTools::Type::create<ColorValueType>(), {size_t(m_nbCells)}, t, true);
+    return allocatedSize;
+}
+
+//------------------------------------------------------------------------------
+
+size_t Mesh::allocateCellTexCoords() throw(::fwData::Exception)
+{
+    size_t allocatedSize = 0;
+    if (!m_cellTexCoords )
     {
-        m_cellColors  = ::fwData::Array::New();
+        m_cellTexCoords = ::fwData::Array::New();
     }
-    allocatedSize += m_cellColors->resize( ::fwTools::Type::create<ColorValueType>(), list_of(m_nbCells), t, true);
+    allocatedSize +=
+        m_cellTexCoords->resize( ::fwTools::Type::create<TexCoordValueType>(), {size_t(m_nbCells)}, 2, true);
     return allocatedSize;
 }
 
@@ -215,143 +267,173 @@ bool Mesh::adjustAllocatedMemory() throw(::fwData::Exception)
 {
     size_t oldAllocatedSize = this->getAllocatedSizeInBytes();
 
-    if(! m_points)
+    if(!m_points)
     {
         this->initArrays();
     }
 
-    m_points->resize(list_of(m_nbPoints), true);
-    m_cellTypes->resize(list_of(m_nbCells), true);
-    m_cellData->resize(list_of(m_cellsDataSize), true);
-    m_cellDataOffsets->resize(list_of(m_nbCells), true);
-    m_pointColors  && (m_pointColors->resize(list_of(m_nbPoints), true));
-    m_cellColors   && (m_cellColors->resize(list_of(m_nbCells), true));
-    m_pointNormals && (m_pointNormals->resize(list_of(m_nbPoints), true));
-    m_cellNormals  && (m_cellNormals->resize(list_of(m_nbCells), true));
+    m_points->resize({size_t(m_nbPoints)}, true);
+    m_cellTypes->resize({size_t(m_nbCells)}, true);
+    m_cellData->resize({size_t(m_cellsDataSize)}, true);
+    m_cellDataOffsets->resize({size_t(m_nbCells)}, true);
+
+    m_pointColors    && (m_pointColors->resize({size_t(m_nbPoints)}, true));
+    m_cellColors     && (m_cellColors->resize({size_t(m_nbCells)}, true));
+    m_pointNormals   && (m_pointNormals->resize({size_t(m_nbPoints)}, true));
+    m_cellNormals    && (m_cellNormals->resize({size_t(m_nbCells)}, true));
+    m_pointTexCoords && (m_pointTexCoords->resize({size_t(m_nbPoints)}, true));
+    m_cellTexCoords  && (m_cellTexCoords->resize({size_t(m_nbCells)}, true));
 
 
     size_t newAllocatedSize = this->getAllocatedSizeInBytes();
-    SLM_ASSERT(
-            "Error adjusting memory : allocated size: " << newAllocatedSize
-            << " != data size : " << this->getDataSizeInBytes(),
-            newAllocatedSize == this->getDataSizeInBytes());
+    SLM_ASSERT("Error adjusting memory : allocated size: " << newAllocatedSize
+                                                           << " != data size : " << this->getDataSizeInBytes(),
+               newAllocatedSize == this->getDataSizeInBytes());
     return oldAllocatedSize != newAllocatedSize;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setPointsArray (::fwData::Array::sptr array)
+void Mesh::setPointsArray(const ::fwData::Array::sptr& array)
 {
     m_points = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setCellTypesArray (::fwData::Array::sptr array)
+void Mesh::setCellTypesArray(const ::fwData::Array::sptr& array)
 {
     m_cellTypes = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setCellDataArray (::fwData::Array::sptr array)
+void Mesh::setCellDataArray (const ::fwData::Array::sptr& array)
 {
     m_cellData = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setCellDataOffsetsArray (::fwData::Array::sptr array)
+void Mesh::setCellDataOffsetsArray(const ::fwData::Array::sptr& array)
 {
     m_cellDataOffsets = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setPointColorsArray (::fwData::Array::sptr array)
+void Mesh::setPointColorsArray(const ::fwData::Array::sptr& array)
 {
     m_pointColors = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setCellColorsArray (::fwData::Array::sptr array)
+void Mesh::setCellColorsArray(const ::fwData::Array::sptr& array)
 {
     m_cellColors = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setPointNormalsArray (::fwData::Array::sptr array)
+void Mesh::setPointNormalsArray(const ::fwData::Array::sptr& array)
 {
     m_pointNormals = array;
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::setCellNormalsArray (::fwData::Array::sptr array)
+void Mesh::setCellNormalsArray(const ::fwData::Array::sptr& array)
 {
     m_cellNormals = array;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getPointsArray () const
+void Mesh::setPointTexCoordsArray(const ::fwData::Array::sptr& array)
+{
+    m_pointTexCoords = array;
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setCellTexCoordsArray(const ::fwData::Array::sptr& array)
+{
+    m_cellTexCoords = array;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Array::sptr Mesh::getPointsArray() const
 {
     return m_points;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getCellTypesArray () const
+::fwData::Array::sptr Mesh::getCellTypesArray() const
 {
     return m_cellTypes;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getCellDataArray () const
+::fwData::Array::sptr Mesh::getCellDataArray() const
 {
     return m_cellData;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getCellDataOffsetsArray () const
+::fwData::Array::sptr Mesh::getCellDataOffsetsArray() const
 {
     return m_cellDataOffsets;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getPointColorsArray () const
+::fwData::Array::sptr Mesh::getPointColorsArray() const
 {
     return m_pointColors;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getCellColorsArray () const
+::fwData::Array::sptr Mesh::getCellColorsArray() const
 {
     return m_cellColors;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getPointNormalsArray () const
+::fwData::Array::sptr Mesh::getPointNormalsArray() const
 {
     return m_pointNormals;
 }
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Mesh::getCellNormalsArray () const
+::fwData::Array::sptr Mesh::getCellNormalsArray() const
 {
     return m_cellNormals;
 }
 
 //------------------------------------------------------------------------------
 
+::fwData::Array::sptr Mesh::getPointTexCoordsArray() const
+{
+    return m_pointTexCoords;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Array::sptr Mesh::getCellTexCoordsArray() const
+{
+    return m_cellTexCoords;
+}
+
+//------------------------------------------------------------------------------
+
 void Mesh::clearPoints()
 {
     m_nbPoints = 0;
@@ -361,7 +443,7 @@ void Mesh::clearPoints()
 
 void Mesh::clearCells()
 {
-    m_nbCells = 0;
+    m_nbCells       = 0;
     m_cellsDataSize = 0;
 }
 
@@ -371,8 +453,10 @@ void Mesh::clear()
 {
     this->clearPointNormals();
     this->clearPointColors();
+    this->clearPointTexCoords();
     this->clearCellNormals();
     this->clearCellColors();
+    this->clearCellTexCoords();
 
     m_points->clear();
     m_cellData->clear();
@@ -400,6 +484,13 @@ void Mesh::clearPointColors()
 
 //------------------------------------------------------------------------------
 
+void Mesh::clearPointTexCoords()
+{
+    m_pointTexCoords.reset();
+}
+
+//------------------------------------------------------------------------------
+
 void Mesh::clearCellNormals()
 {
     m_cellNormals.reset();
@@ -414,6 +505,13 @@ void Mesh::clearCellColors()
 
 //------------------------------------------------------------------------------
 
+void Mesh::clearCellTexCoords()
+{
+    m_cellTexCoords.reset();
+}
+
+//------------------------------------------------------------------------------
+
 void Mesh::setNumberOfPoints(Mesh::Id nb)
 {
     m_nbPoints = nb;
@@ -469,6 +567,8 @@ size_t Mesh::getDataSizeInBytes() const
     m_cellColors      && (size += m_cellColors->getElementSizeInBytes() * m_nbCells);
     m_pointNormals    && (size += m_pointNormals->getElementSizeInBytes() * m_nbPoints);
     m_cellNormals     && (size += m_cellNormals->getElementSizeInBytes() * m_nbCells);
+    m_pointTexCoords  && (size += m_pointTexCoords->getElementSizeInBytes() * m_nbPoints);
+    m_cellTexCoords   && (size += m_cellTexCoords->getElementSizeInBytes() * m_nbCells);
 
     return size;
 }
@@ -487,6 +587,8 @@ size_t Mesh::getAllocatedSizeInBytes() const
     m_cellColors      && (size += m_cellColors->getSizeInBytes());
     m_pointNormals    && (size += m_pointNormals->getSizeInBytes());
     m_cellNormals     && (size += m_cellNormals->getSizeInBytes());
+    m_pointTexCoords  && (size += m_pointTexCoords->getSizeInBytes());
+    m_cellTexCoords   && (size += m_cellTexCoords->getSizeInBytes());
 
     return size;
 }
@@ -517,8 +619,8 @@ std::vector<std::string> Mesh::getDataArrayNames() const
 {
     std::vector<std::string> vectNames;
     std::transform( m_arrayMap.begin(), m_arrayMap.end(),
-            std::back_inserter(vectNames),
-            ::boost::bind(& ArrayMapType::value_type::first,_1) );
+                    std::back_inserter(vectNames),
+                    std::bind(&ArrayMapType::value_type::first, std::placeholders::_1) );
     return vectNames;
 }
 
@@ -531,4 +633,4 @@ void Mesh::removeDataArray(const std::string &name)
 
 //------------------------------------------------------------------------------
 
-}//namespace fwData
+} //namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Model.cpp b/SrcLib/core/fwData/src/fwData/Model.cpp
deleted file mode 100644
index 7fef7ae..0000000
--- a/SrcLib/core/fwData/src/fwData/Model.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwData/registry/macros.hpp"
-#include "fwData/Exception.hpp"
-
-#include "fwData/Model.hpp"
-
-fwDataRegisterMacro( ::fwData::Model );
-namespace fwData
-{
-Model::Model(::fwData::Object::Key key)
-{}
-
-//------------------------------------------------------------------------------
-
-Model::~Model() throw()
-{
-    m_map.clear();
-}
-
-//------------------------------------------------------------------------------
-
-Model::Container &Model::getRefMap()
-{
-    return m_map ;
-}
-
-//------------------------------------------------------------------------------
-
-const Model::Container &Model::getCRefMap() const
-{
-    return m_map ;
-}
-
-//------------------------------------------------------------------------------
-
-void Model::shallowCopy(const Object::csptr &_source )
-{
-    Model::csptr other = Model::dynamicConstCast(_source);
-    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
-    this->fieldShallowCopy( _source );
-
-    m_map.clear();
-    m_map = other->m_map;
-}
-
-//------------------------------------------------------------------------------
-
-void Model::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache)
-{
-    Model::csptr other = Model::dynamicConstCast(_source);
-    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
-    this->fieldDeepCopy( _source, cache );
-
-    m_map.clear();
-    for(    Model::Container::const_iterator iter = other->getCRefMap().begin();
-            iter != other->getCRefMap().end();
-            ++iter )
-    {
-        ::fwData::TriangularMesh::sptr newTrian;
-        ::fwData::Material::sptr newMaterial;
-
-        newTrian = ::fwData::Object::copy(iter->first, cache);
-        newMaterial = ::fwData::Object::copy(iter->second, cache);
-        m_map[newTrian] = newMaterial;
-    }
-}
-
-} // namespace fwData
-
diff --git a/SrcLib/core/fwData/src/fwData/Node.cpp b/SrcLib/core/fwData/src/fwData/Node.cpp
index 36f540d..e2028c9 100644
--- a/SrcLib/core/fwData/src/fwData/Node.cpp
+++ b/SrcLib/core/fwData/src/fwData/Node.cpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
+//FIXME :This needs to be include first for GCC
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+//
+#include "fwData/Node.hpp"
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Port.hpp"
 
-#include "fwData/Node.hpp"
-
 fwDataRegisterMacro( ::fwData::Node );
 
 namespace fwData
@@ -22,14 +22,11 @@ const ::fwCom::Signals::SignalKeyType Node::s_UPDATED_SIG = "updated";
 
 //------------------------------------------------------------------------------
 
-Node::Node(::fwData::Object::Key key):
+Node::Node(::fwData::Object::Key key) :
     m_sigUpdated(UpdatedSignalType::New())
 {
     m_signals( s_UPDATED_SIG,  m_sigUpdated);
 
-#ifdef COM_LOG
-    ::fwCom::HasSignals::m_signals.setID();
-#endif
 
 }
 
@@ -42,14 +39,14 @@ Node::~Node()
 
 //------------------------------------------------------------------------------
 
-void Node::addInputPort(::fwData::Port::sptr port)
+void Node::addInputPort(const ::fwData::Port::sptr& port)
 {
     m_inputs.push_back(port);
 }
 
 //------------------------------------------------------------------------------
 
-void Node::addOutputPort(::fwData::Port::sptr port)
+void Node::addOutputPort(const ::fwData::Port::sptr& port)
 {
     m_outputs.push_back(port);
 }
@@ -70,7 +67,7 @@ Node::PortContainer & Node::getOutputPorts()
 
 //------------------------------------------------------------------------------
 
-void Node::setObject( ::fwData::Object::sptr object )
+void Node::setObject(const ::fwData::Object::sptr& object )
 {
     m_object = object;
 }
@@ -84,25 +81,25 @@ void Node::setObject( ::fwData::Object::sptr object )
 
 //------------------------------------------------------------------------------
 
-Port::sptr Node::findPort(const std::string &identifier, /*const std::string &type,*/ bool modeInput) const
+Port::sptr Node::findPort(const std::string &identifier, bool modeInput) const
 {
     if ( modeInput)
     {
-        for ( PortContainer::const_iterator i = m_inputs.begin() ; i != m_inputs.end() ; ++i )
+        for ( const auto& input : m_inputs)
         {
-            if ( (*i)->getIdentifier() == identifier)
+            if ( input->getIdentifier() == identifier)
             {
-                return *i;
+                return input;
             }
         }
     }
     else
     {
-        for ( PortContainer::const_iterator i = m_outputs.begin() ; i != m_outputs.end() ; ++i )
+        for ( const auto& output : m_outputs )
         {
-            if ( (*i)->getIdentifier() == identifier)
+            if ( output->getIdentifier() == identifier)
             {
-                return *i;
+                return output;
             }
         }
     }
@@ -115,8 +112,8 @@ void Node::shallowCopy(const Object::csptr &_source )
 {
     Node::csptr other = Node::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !other );
     this->fieldShallowCopy( _source );
 
     m_inputs.clear();
@@ -125,15 +122,15 @@ void Node::shallowCopy(const Object::csptr &_source )
     if( other->getObject())
     {
         ::fwTools::Object::sptr object = ::fwData::factory::New( other->getObject()->getClassname() );
-        OSLM_ASSERT("Sorry, instantiate "<<other->getObject()->getClassname()<< " failed", object );
+        OSLM_ASSERT("The instantiation of '"<<other->getObject()->getClassname()<< "' failed", object );
         m_object = ::fwData::Object::dynamicCast(object);
         m_object->shallowCopy( other->m_object );
     }
-    BOOST_FOREACH(::fwData::Port::sptr port, other->m_inputs)
+    for(const ::fwData::Port::sptr& port : other->m_inputs)
     {
         this->addInputPort( ::fwData::Object::copy(port) );
     }
-    BOOST_FOREACH(::fwData::Port::sptr port, other->m_outputs)
+    for(const ::fwData::Port::sptr& port : other->m_outputs)
     {
         this->addOutputPort( ::fwData::Object::copy(port) );
     }
@@ -145,8 +142,8 @@ void Node::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 {
     Node::csptr other = Node::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
     m_inputs.clear();
@@ -154,13 +151,13 @@ void Node::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 
     m_object = ::fwData::Object::copy( other->m_object, cache );
 
-    BOOST_FOREACH(const ::fwData::Port::sptr &port, other->m_inputs)
+    for(const ::fwData::Port::sptr &port : other->m_inputs)
     {
         ::fwData::Port::sptr newPort;
         newPort = ::fwData::Object::copy(port, cache);
         this->addInputPort(newPort);
     }
-    BOOST_FOREACH(const ::fwData::Port::sptr &port, other->m_outputs)
+    for(const ::fwData::Port::sptr &port : other->m_outputs)
     {
         ::fwData::Port::sptr newPort;
         newPort = ::fwData::Object::copy(port, cache);
diff --git a/SrcLib/core/fwData/src/fwData/Object.cpp b/SrcLib/core/fwData/src/fwData/Object.cpp
index 2ad590e..8bad623 100644
--- a/SrcLib/core/fwData/src/fwData/Object.cpp
+++ b/SrcLib/core/fwData/src/fwData/Object.cpp
@@ -1,42 +1,44 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/bind.hpp>
-
+//FIXME :This needs to be include first for GCC
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+//
 #include "fwData/factory/new.hpp"
 #include "fwData/Object.hpp"
 
+#include <functional>
 
 namespace fwData
 {
 
 //------------------------------------------------------------------------------
 
-const ::fwCom::Signals::SignalKeyType Object::s_OBJECT_MODIFIED_SIG = "objectModified";
+const ::fwCom::Signals::SignalKeyType Object::s_MODIFIED_SIG       = "modified";
+const ::fwCom::Signals::SignalKeyType Object::s_ADDED_FIELDS_SIG   = "addedFields";
+const ::fwCom::Signals::SignalKeyType Object::s_CHANGED_FIELDS_SIG = "changedFields";
+const ::fwCom::Signals::SignalKeyType Object::s_REMOVED_FIELDS_SIG = "removedFields";
 
 //------------------------------------------------------------------------------
 
 Object::Object()
 {
-    // Init
-    m_sigObjectModified = ObjectModifiedSignalType::New();
-
-    // Register
-    m_signals( s_OBJECT_MODIFIED_SIG,  m_sigObjectModified);
+    newSignal< ModifiedSignalType >(s_MODIFIED_SIG);
+    newSignal< AddedFieldsSignalType >(s_ADDED_FIELDS_SIG);
+    newSignal< ChangedFieldsSignalType >(s_CHANGED_FIELDS_SIG);
+    newSignal< RemovedFieldsSignalType >(s_REMOVED_FIELDS_SIG);
 
-#ifdef COM_LOG
-    ::fwCom::HasSignals::m_signals.setID();
-#endif
 }
 
 //------------------------------------------------------------------------------
 
 Object::~Object()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -71,8 +73,8 @@ Object::FieldNameVectorType Object::getFieldNames() const
 {
     FieldNameVectorType names;
     std::transform( m_fields.begin(), m_fields.end(),
-            std::back_inserter(names),
-            ::boost::bind(& FieldMapType::value_type::first, _1) );
+                    std::back_inserter(names),
+                    std::bind(&FieldMapType::value_type::first, std::placeholders::_1) );
     return names;
 }
 
@@ -113,7 +115,6 @@ void Object::updateFields( const FieldMapType & fieldMap )
     m_fields.insert(fieldMap.begin(), fieldMap.end());
 }
 
-
 //-----------------------------------------------------------------------------
 
 void Object::fieldShallowCopy(const ::fwData::Object::csptr &source)
@@ -142,7 +143,7 @@ void Object::fieldDeepCopy(const ::fwData::Object::csptr &source, DeepCopyCacheT
 {
     m_fields.clear();
     const ::fwData::Object::FieldMapType &sourceFields = source->getFields();
-    BOOST_FOREACH(const ::fwData::Object::FieldMapType::value_type &elt, sourceFields)
+    for(const ::fwData::Object::FieldMapType::value_type &elt : sourceFields)
     {
         this->setField(elt.first, ::fwData::Object::copy(elt.second, cache));
     }
@@ -153,7 +154,7 @@ void Object::fieldDeepCopy(const ::fwData::Object::csptr &source, DeepCopyCacheT
 void Object::shallowCopy(const ::fwData::Object::csptr &source )
 {
     FwCoreNotUsedMacro(source);
-    OSLM_FATAL("shallowCopy not implemented for : " << this->getClassname() );
+    SLM_FATAL("shallowCopy not implemented for : " + this->getClassname() );
 }
 
 //-----------------------------------------------------------------------------
@@ -191,19 +192,6 @@ void Object::shallowCopy(const ::fwData::Object::csptr &source )
 
 //-----------------------------------------------------------------------------
 
-#ifdef COM_LOG
-void Object::setID( ::fwTools::fwID::IDType newID )
-{
-    if( ! this->hasID() ||
-        this->getID( ::fwTools::fwID::MUST_EXIST ) != newID )
-    {
-        this->::fwTools::fwID::setID( newID );
-    }
 
-    std::string lightID = this->getLightID( ::fwTools::fwID::MUST_EXIST );
-
-    ::fwCom::HasSignals::m_signals.setID( lightID + "::" );
-}
-#endif
 
 } // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/ObjectLock.cpp b/SrcLib/core/fwData/src/fwData/ObjectLock.cpp
index 9847a59..67d6d23 100644
--- a/SrcLib/core/fwData/src/fwData/ObjectLock.cpp
+++ b/SrcLib/core/fwData/src/fwData/ObjectLock.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwMemory/BufferObject.hpp>
-
 #include "fwData/ObjectLock.hpp"
 
+#include <fwMemory/BufferObject.hpp>
+
 namespace fwData
 {
 
@@ -25,7 +25,7 @@ ObjectLock::~ObjectLock()
 ObjectLock::ObjectLock(const ObjectLock & objectLock)
 {
     m_objects = objectLock.m_objects;
-    m_locks = objectLock.m_locks;
+    m_locks   = objectLock.m_locks;
 }
 
 //-----------------------------------------------------------------------------
@@ -36,7 +36,7 @@ ObjectLock & ObjectLock::operator=(const ObjectLock & objectLock)
     m_objects.clear();
 
     m_objects = objectLock.m_objects;
-    m_locks = objectLock.m_locks;
+    m_locks   = objectLock.m_locks;
 
     return *this;
 }
@@ -47,7 +47,7 @@ void ObjectLock::lock( ::fwData::Array::sptr array, LocksType & locks )
 {
     if ( array )
     {
-        locks.push_back( array->getBufferObject()->lock() ) ;
+        locks.push_back( array->getBufferObject()->lock() );
         m_objects.push_back(array);
     }
 }
@@ -58,7 +58,7 @@ void ObjectLock::lock( ::fwData::Image::sptr image, LocksType & locks )
 {
     if ( image )
     {
-        this->lock( image->getDataArray(), locks ) ;
+        this->lock( image->getDataArray(), locks );
     }
 }
 
@@ -68,15 +68,15 @@ void ObjectLock::lock( ::fwData::Mesh::sptr mesh, LocksType & locks )
 {
     if ( mesh )
     {
-        this->lock( mesh->getPointsArray(), locks ) ;
-        this->lock( mesh->getCellDataArray(), locks ) ;
-        this->lock( mesh->getCellDataOffsetsArray(), locks ) ;
-        this->lock( mesh->getCellTypesArray(), locks ) ;
-
-        this->lock( mesh->getCellColorsArray(), locks ) ;
-        this->lock( mesh->getPointColorsArray(), locks ) ;
-        this->lock( mesh->getCellNormalsArray(), locks ) ;
-        this->lock( mesh->getPointNormalsArray(), locks ) ;
+        this->lock( mesh->getPointsArray(), locks );
+        this->lock( mesh->getCellDataArray(), locks );
+        this->lock( mesh->getCellDataOffsetsArray(), locks );
+        this->lock( mesh->getCellTypesArray(), locks );
+
+        this->lock( mesh->getCellColorsArray(), locks );
+        this->lock( mesh->getPointColorsArray(), locks );
+        this->lock( mesh->getCellNormalsArray(), locks );
+        this->lock( mesh->getPointNormalsArray(), locks );
     }
 }
 
@@ -86,8 +86,8 @@ void ObjectLock::lock( ::fwData::Reconstruction::sptr rec, LocksType & locks )
 {
     if ( rec )
     {
-        this->lock( rec->getImage(), locks ) ;
-        this->lock( rec->getMesh(), locks ) ;
+        this->lock( rec->getImage(), locks );
+        this->lock( rec->getMesh(), locks );
     }
 }
 
@@ -96,20 +96,20 @@ void ObjectLock::lock( ::fwData::Reconstruction::sptr rec, LocksType & locks )
 ObjectLock::ObjectLock( ::fwData::Object::sptr obj )
 {
     ::fwData::Image::sptr image = ::fwData::Image::dynamicCast( obj );
-    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast( obj );
+    ::fwData::Mesh::sptr mesh   = ::fwData::Mesh::dynamicCast( obj );
     ::fwData::Array::sptr array = ::fwData::Array::dynamicCast( obj );
 
     if( image )
     {
-        this->lock( image, m_locks ) ;
+        this->lock( image, m_locks );
     }
     else if ( mesh )
     {
-        this->lock( mesh, m_locks ) ;
+        this->lock( mesh, m_locks );
     }
     else if ( array )
     {
-        this->lock( array, m_locks ) ;
+        this->lock( array, m_locks );
     }
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/Plane.cpp b/SrcLib/core/fwData/src/fwData/Plane.cpp
index 389e4e9..522977d 100644
--- a/SrcLib/core/fwData/src/fwData/Plane.cpp
+++ b/SrcLib/core/fwData/src/fwData/Plane.cpp
@@ -1,23 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
-#include <fwMath/PlaneFunctions.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/Plane.hpp"
 
-#define EPSILON 0.00000001
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
 
 fwDataRegisterMacro( ::fwData::Plane );
 
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType Plane::s_SELECTED_SIG = "selected";
+
 //------------------------------------------------------------------------------
 
 Plane::Plane (::fwData::Object::Key key) : m_isIntersection(true)
@@ -25,12 +27,15 @@ Plane::Plane (::fwData::Object::Key key) : m_isIntersection(true)
     m_vPoints[0] = ::fwData::Point::New();
     m_vPoints[1] = ::fwData::Point::New();
     m_vPoints[2] = ::fwData::Point::New();
+
+    newSignal< SelectedSignalType >(s_SELECTED_SIG);
 }
 
 //------------------------------------------------------------------------------
 
 Plane::~Plane ()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -38,11 +43,10 @@ void Plane::shallowCopy(const Object::csptr &_source )
 {
     Plane::csptr other = Plane::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_vPoints = other->m_vPoints;
-    m_plane = other->m_plane;
 }
 
 //------------------------------------------------------------------------------
@@ -51,46 +55,21 @@ void Plane::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Plane::csptr other = Plane::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_vPoints[0] = ::fwData::Object::copy(other->m_vPoints[0], cache);
     m_vPoints[1] = ::fwData::Object::copy(other->m_vPoints[1], cache);
     m_vPoints[2] = ::fwData::Object::copy(other->m_vPoints[2], cache);
-    m_plane = other->m_plane;
 }
 
 //------------------------------------------------------------------------------
 
-bool Plane::operator==( const Plane & _plane )
-{
-    bool result = false;
-    float dx = float(m_plane[0] - _plane.getPlane()[0] );
-    float dy = float(m_plane[1] - _plane.getPlane()[1] );
-    float dz = float(m_plane[2] - _plane.getPlane()[2] );
-    float dd = float(m_plane[3] - _plane.getPlane()[3] );
-
-    if (fabs(dx) < EPSILON && fabs(dy) < EPSILON && fabs(dz) < EPSILON && fabs(dd) < EPSILON)
-    {
-        result = true;
-    }
-    return result;
-}
-//------------------------------------------------------------------------------
-
 void Plane::setValue(::fwData::Point::sptr _point1, ::fwData::Point::sptr _point2, ::fwData::Point::sptr _point3)
 {
     m_vPoints[0] = _point1;
     m_vPoints[1] = _point2;
     m_vPoints[2] = _point3;
-    this->computePlaneFromPoints();
-}
-
-//------------------------------------------------------------------------------
-
-void Plane::computePlaneFromPoints()
-{
-    ::fwMath::setValues(m_plane, m_vPoints[0]->getCRefCoord(), m_vPoints[1]->getCRefCoord(), m_vPoints[2]->getCRefCoord());
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/PlaneList.cpp b/SrcLib/core/fwData/src/fwData/PlaneList.cpp
index c07823c..b4fb7a0 100644
--- a/SrcLib/core/fwData/src/fwData/PlaneList.cpp
+++ b/SrcLib/core/fwData/src/fwData/PlaneList.cpp
@@ -1,25 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/PlaneList.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::PlaneList );
 
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType PlaneList::s_PLANE_ADDED_SIG         = "planeAdded";
+const ::fwCom::Signals::SignalKeyType PlaneList::s_PLANE_REMOVED_SIG       = "planeRemoved";
+const ::fwCom::Signals::SignalKeyType PlaneList::s_VISIBILITY_MODIFIED_SIG = "visibilityModified";
+
 //------------------------------------------------------------------------------
 
 PlaneList::PlaneList(::fwData::Object::Key key)
 {
     SLM_TRACE_FUNC();
+    newSignal< PlaneAddedSignalType >(s_PLANE_ADDED_SIG);
+    newSignal< PlaneRemovedSignalType >(s_PLANE_REMOVED_SIG);
+    newSignal< VisibilityModifiedSignalType >(s_VISIBILITY_MODIFIED_SIG);
 }
 
 //------------------------------------------------------------------------------
@@ -35,8 +45,8 @@ void PlaneList::shallowCopy(const Object::csptr &_source )
 {
     PlaneList::csptr other = PlaneList::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !other );
     this->fieldShallowCopy( _source );
 
     this->m_vPlanes = other->m_vPlanes;
@@ -48,43 +58,18 @@ void PlaneList::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &
 {
     PlaneList::csptr other = PlaneList::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !other );
     this->fieldDeepCopy( _source, cache );
 
     this->m_vPlanes.clear();
-    for (   PlaneList::PlaneListContainer::const_iterator iter = other->m_vPlanes.begin();
-            iter != other->m_vPlanes.end();
-            ++iter )
+    for(const ::fwData::Plane::sptr& plane : other->m_vPlanes)
     {
-        Plane::sptr newPlane;
-        newPlane = ::fwData::Object::copy(*iter, cache);
+        Plane::sptr newPlane = ::fwData::Object::copy(plane, cache);
         this->m_vPlanes.push_back( newPlane );
     }
 }
 
-//------------------------------------------------------------------------------
-
-void PlaneList::deleteDuplicatedPlan(void)
-{
-    ::fwData::PlaneList::PlaneListContainer::iterator iter = this->m_vPlanes.begin();
-    ::fwData::PlaneList::PlaneListContainer::iterator iter2 ;
-    if(this->m_vPlanes.size() > 1)
-    {
-        for ( iter = this->m_vPlanes.begin(); iter != this->m_vPlanes.end(); ++iter )
-        {
-            PlaneList::PlaneListContainer::iterator iter2 =iter+1;
-            while(iter2 != this->m_vPlanes.end())
-            {
-                if(*(iter->get()) == *(iter2->get()))
-                    this->m_vPlanes.erase(iter2);
-                else
-                    ++iter2;
-            }
-        }
-    }
-}
-
 } // namespace fwData
 
 
diff --git a/SrcLib/core/fwData/src/fwData/Point.cpp b/SrcLib/core/fwData/src/fwData/Point.cpp
index 90503fb..7ed3698 100644
--- a/SrcLib/core/fwData/src/fwData/Point.cpp
+++ b/SrcLib/core/fwData/src/fwData/Point.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/Point.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::Point );
 
 namespace fwData
@@ -37,6 +37,26 @@ Point::sptr Point::PointFactory(float x, float y, float z)
 
 //------------------------------------------------------------------------------
 
+Point::sptr Point::PointFactory(double x, double y, double z)
+{
+    Point::sptr point = ::fwData::Point::New();
+    point->m_vCoord[0] = x;
+    point->m_vCoord[1] = y;
+    point->m_vCoord[2] = z;
+    return point;
+}
+
+//------------------------------------------------------------------------------
+
+Point::sptr Point::PointFactory(const PointCoordArrayType& coord)
+{
+    Point::sptr point = ::fwData::Point::New();
+    point->m_vCoord = coord;
+    return point;
+}
+
+//------------------------------------------------------------------------------
+
 Point::sptr Point::PointFactory( Point::sptr p )
 {
     Point::sptr point = ::fwData::Point::New();
@@ -49,7 +69,8 @@ Point::sptr Point::PointFactory( Point::sptr p )
 //------------------------------------------------------------------------------
 
 Point::~Point ()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -57,8 +78,8 @@ void Point::shallowCopy(const Object::csptr &_source )
 {
     Point::csptr other = Point::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_vCoord = other->m_vCoord;
 }
@@ -69,8 +90,8 @@ void Point::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cach
 {
     Point::csptr other = Point::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_vCoord = other->m_vCoord;
 }
diff --git a/SrcLib/core/fwData/src/fwData/PointList.cpp b/SrcLib/core/fwData/src/fwData/PointList.cpp
index 75d9d6c..f2931d0 100644
--- a/SrcLib/core/fwData/src/fwData/PointList.cpp
+++ b/SrcLib/core/fwData/src/fwData/PointList.cpp
@@ -1,31 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/PointList.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::PointList );
 
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType PointList::s_POINT_ADDED_SIG   = "pointAdded";
+const ::fwCom::Signals::SignalKeyType PointList::s_POINT_REMOVED_SIG = "pointRemoved";
+
 //------------------------------------------------------------------------------
 
 PointList::PointList(::fwData::Object::Key key)
-{}
+{
+    newSignal<PointAddedSignalType>(s_POINT_ADDED_SIG);
+    newSignal<PointRemovedSignalType>(s_POINT_REMOVED_SIG);
+}
 
 //------------------------------------------------------------------------------
 
 PointList::~PointList()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -33,8 +41,8 @@ void PointList::shallowCopy(const Object::csptr &_source )
 {
     PointList::csptr other = PointList::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
     m_vPoints = other->m_vPoints;
@@ -46,12 +54,12 @@ void PointList::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &
 {
     PointList::csptr other = PointList::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
     m_vPoints.clear();
-    BOOST_FOREACH(PointListContainer::value_type point, other->m_vPoints )
+    for(const PointListContainer::value_type& point : other->m_vPoints )
     {
         Point::sptr newPoint = Point::New();
         newPoint = ::fwData::Object::copy(point, cache);
diff --git a/SrcLib/core/fwData/src/fwData/Port.cpp b/SrcLib/core/fwData/src/fwData/Port.cpp
index 265265e..167808b 100644
--- a/SrcLib/core/fwData/src/fwData/Port.cpp
+++ b/SrcLib/core/fwData/src/fwData/Port.cpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Port.hpp"
 
 fwDataRegisterMacro( ::fwData::Port );
@@ -15,13 +14,16 @@ namespace fwData
 {
 //------------------------------------------------------------------------------
 
-Port::Port(::fwData::Object::Key key) : m_identifier("IDNOTdefined") , m_type("TypeNotDefined")
-{}
+Port::Port(::fwData::Object::Key key) : m_identifier("IDNOTdefined"),
+                                        m_type("TypeNotDefined")
+{
+}
 
 //------------------------------------------------------------------------------
 
 Port::~Port()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -29,12 +31,12 @@ void Port::shallowCopy(const Object::csptr &_source )
 {
     Port::csptr other = Port::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
     m_identifier = other->m_identifier;
-    m_type = other->m_type;
+    m_type       = other->m_type;
 }
 
 //------------------------------------------------------------------------------
@@ -43,12 +45,12 @@ void Port::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache
 {
     Port::csptr other = Port::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
     m_identifier = other->m_identifier;
-    m_type = other->m_type;
+    m_type       = other->m_type;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/ProcessObject.cpp b/SrcLib/core/fwData/src/fwData/ProcessObject.cpp
index d268295..09b148f 100644
--- a/SrcLib/core/fwData/src/fwData/ProcessObject.cpp
+++ b/SrcLib/core/fwData/src/fwData/ProcessObject.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/bind.hpp>
 
-#include <fwCore/base.hpp>
-#include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/ProcessObject.hpp"
+#include "fwData/registry/macros.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <functional>
 
 fwDataRegisterMacro( ::fwData::ProcessObject );
 
@@ -21,12 +21,14 @@ namespace fwData
 //------------------------------------------------------------------------------
 
 ProcessObject::ProcessObject(::fwData::Object::Key key)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ProcessObject::~ProcessObject()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -45,14 +47,14 @@ ProcessObject::~ProcessObject()
 
 ::fwData::Object::sptr ProcessObject::getInput(const ParamNameType& name)
 {
-    return this->getValue(name, m_attrInputs);
+    return this->getValue(name, m_inputs);
 }
 
 //------------------------------------------------------------------------------
 
 ::fwData::Object::sptr ProcessObject::getOutput(const ParamNameType& name)
 {
-    return this->getValue(name, m_attrOutputs);
+    return this->getValue(name, m_outputs);
 }
 
 //------------------------------------------------------------------------------
@@ -71,14 +73,14 @@ void ProcessObject::setValue(const ParamNameType& name, ::fwData::Object::sptr o
 
 void ProcessObject::setInputValue(const ParamNameType& name, ::fwData::Object::sptr object)
 {
-    this->setValue(name, object, m_attrInputs);
+    this->setValue(name, object, m_inputs);
 }
 
 //------------------------------------------------------------------------------
 
 void ProcessObject::setOutputValue(const ParamNameType& name, ::fwData::Object::sptr object)
 {
-    this->setValue(name, object, m_attrOutputs);
+    this->setValue(name, object, m_outputs);
 }
 
 //------------------------------------------------------------------------------
@@ -87,8 +89,8 @@ ProcessObject::ParamNameVectorType ProcessObject::getParamNames(const ProcessObj
 {
     ParamNameVectorType names;
     std::transform( params.begin(), params.end(),
-            std::back_inserter(names),
-            ::boost::bind(& ProcessObjectMapType::value_type::first, _1) );
+                    std::back_inserter(names),
+                    std::bind(&ProcessObjectMapType::value_type::first, std::placeholders::_1) );
     return names;
 }
 
@@ -96,28 +98,28 @@ ProcessObject::ParamNameVectorType ProcessObject::getParamNames(const ProcessObj
 
 ProcessObject::ParamNameVectorType ProcessObject::getInputsParamNames() const
 {
-    return this->getParamNames(m_attrInputs);
+    return this->getParamNames(m_inputs);
 }
 
 //------------------------------------------------------------------------------
 
 ProcessObject::ParamNameVectorType ProcessObject::getOutputsParamNames() const
 {
-    return this->getParamNames(m_attrOutputs);
+    return this->getParamNames(m_outputs);
 }
 
 //------------------------------------------------------------------------------
 
 void ProcessObject::clearInputs()
 {
-    this->clearParams(m_attrOutputs);
+    this->clearParams(m_outputs);
 }
 
 //------------------------------------------------------------------------------
 
 void ProcessObject::clearOutputs()
 {
-    this->clearParams(m_attrInputs);
+    this->clearParams(m_inputs);
 }
 
 //------------------------------------------------------------------------------
@@ -133,12 +135,12 @@ void ProcessObject::shallowCopy(const Object::csptr &source )
 {
     ProcessObject::csptr other = ProcessObject::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( source );
 
-    m_attrInputs = other->m_attrInputs;
-    m_attrOutputs = other->m_attrOutputs;
+    m_inputs  = other->m_inputs;
+    m_outputs = other->m_outputs;
 }
 
 //-----------------------------------------------------------------------------
@@ -147,21 +149,21 @@ void ProcessObject::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheTyp
 {
     ProcessObject::csptr other = ProcessObject::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
 
     this->clearInputs();
     this->clearOutputs();
 
-    BOOST_FOREACH(ProcessObjectMapType::value_type elt, other->m_attrInputs)
+    for(const ProcessObjectMapType::value_type& elt : other->m_inputs)
     {
-        m_attrInputs[elt.first] = ::fwData::Object::copy(elt.second, cache);
+        m_inputs[elt.first] = ::fwData::Object::copy(elt.second, cache);
     }
 
-    BOOST_FOREACH(ProcessObjectMapType::value_type elt, other->m_attrOutputs)
+    for(const ProcessObjectMapType::value_type& elt : other->m_outputs)
     {
-        m_attrOutputs[elt.first] = ::fwData::Object::copy(elt.second, cache);
+        m_outputs[elt.first] = ::fwData::Object::copy(elt.second, cache);
     }
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/ROITraits.cpp b/SrcLib/core/fwData/src/fwData/ROITraits.cpp
index 6586daf..82e5f05 100644
--- a/SrcLib/core/fwData/src/fwData/ROITraits.cpp
+++ b/SrcLib/core/fwData/src/fwData/ROITraits.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/ROITraits.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::ROITraits );
 
 namespace fwData
@@ -18,16 +18,18 @@ namespace fwData
 //------------------------------------------------------------------------------
 
 ROITraits::ROITraits(::fwData::Object::Key key)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ROITraits::~ROITraits()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void ROITraits::setMaskOpNode( ::fwData::Node::sptr maskOpNode )
+void ROITraits::setMaskOpNode(const ::fwData::Node::sptr& maskOpNode )
 {
     m_maskOpNode = maskOpNode;
 }
@@ -46,7 +48,7 @@ void ROITraits::setMaskOpNode( ::fwData::Node::sptr maskOpNode )
 
 //------------------------------------------------------------------------------
 
-void ROITraits::setStructureTraits( ::fwData::StructureTraits::sptr structureTraits )
+void ROITraits::setStructureTraits(const ::fwData::StructureTraits::sptr& structureTraits )
 {
     m_structureTraits = structureTraits;
 }
@@ -64,8 +66,8 @@ void ROITraits::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &c
 {
     ROITraits::csptr other = ROITraits::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
 
     OSLM_FATAL("Not implemented." );
diff --git a/SrcLib/core/fwData/src/fwData/Reconstruction.cpp b/SrcLib/core/fwData/src/fwData/Reconstruction.cpp
index 65ec350..6115137 100644
--- a/SrcLib/core/fwData/src/fwData/Reconstruction.cpp
+++ b/SrcLib/core/fwData/src/fwData/Reconstruction.cpp
@@ -1,34 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
 
-#include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Image.hpp"
-#include "fwData/Mesh.hpp"
 #include "fwData/Material.hpp"
-
+#include "fwData/Mesh.hpp"
 #include "fwData/Reconstruction.hpp"
+#include "fwData/registry/macros.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwCore/base.hpp>
 
 fwDataRegisterMacro( ::fwData::Reconstruction );
 namespace fwData
 {
 
+const double Reconstruction::s_NO_COMPUTED_MASK_VOLUME = -1.;
+
+const ::fwCom::Signals::SignalKeyType Reconstruction::s_MESH_CHANGED_SIG        = "meshModified";
+const ::fwCom::Signals::SignalKeyType Reconstruction::s_VISIBILITY_MODIFIED_SIG = "visibilityModified";
+
 //------------------------------------------------------------------------------
 
 Reconstruction::Reconstruction(::fwData::Object::Key key) :
     m_bIsVisible(false),
     m_sOrganName(""),
     m_sStructureType(""),
-    m_attrMaterial( ::fwData::factory::New< ::fwData::Material>() )
+    m_material( ::fwData::factory::New< ::fwData::Material>() ),
+    m_computedMaskVolume(Reconstruction::s_NO_COMPUTED_MASK_VOLUME)
 {
-    SLM_TRACE_FUNC();
+    m_sigMeshChanged        = MeshChangedSignalType::New();
+    m_sigVisibilityModified = VisibilityModifiedSignalType::New();
+    m_signals(s_MESH_CHANGED_SIG, m_sigMeshChanged)
+        (s_VISIBILITY_MODIFIED_SIG, m_sigVisibilityModified);
 }
 
 //------------------------------------------------------------------------------
@@ -44,17 +55,19 @@ void Reconstruction::shallowCopy(const Object::csptr &_source )
 {
     Reconstruction::csptr other = Reconstruction::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
-    m_bIsVisible            = other->m_bIsVisible;
-    m_sOrganName            = other->m_sOrganName;
-    m_sStructureType        = other->m_sStructureType;
+    m_bIsVisible     = other->m_bIsVisible;
+    m_sOrganName     = other->m_sOrganName;
+    m_sStructureType = other->m_sStructureType;
+
+    m_material = other->m_material;
+    m_image    = other->m_image;
+    m_mesh     = other->m_mesh;
 
-    m_attrMaterial = other->m_attrMaterial;
-    m_attrImage    = other->m_attrImage;
-    m_attrMesh     = other->m_attrMesh;
+    m_computedMaskVolume = other->m_computedMaskVolume;
 }
 
 //------------------------------------------------------------------------------
@@ -63,17 +76,19 @@ void Reconstruction::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheT
 {
     Reconstruction::csptr other = Reconstruction::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_bIsVisible            = other->m_bIsVisible;
-    m_sOrganName            = other->m_sOrganName;
-    m_sStructureType        = other->m_sStructureType;
+    m_bIsVisible     = other->m_bIsVisible;
+    m_sOrganName     = other->m_sOrganName;
+    m_sStructureType = other->m_sStructureType;
+
+    m_material = ::fwData::Object::copy(other->m_material, cache);
+    m_image    = ::fwData::Object::copy(other->m_image, cache);
+    m_mesh     = ::fwData::Object::copy(other->m_mesh, cache);
 
-    m_attrMaterial = ::fwData::Object::copy(other->m_attrMaterial, cache);
-    m_attrImage    = ::fwData::Object::copy(other->m_attrImage, cache);
-    m_attrMesh     = ::fwData::Object::copy(other->m_attrMesh, cache);
+    m_computedMaskVolume = other->m_computedMaskVolume;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/ReconstructionTraits.cpp b/SrcLib/core/fwData/src/fwData/ReconstructionTraits.cpp
index 83710c5..a8230f4 100644
--- a/SrcLib/core/fwData/src/fwData/ReconstructionTraits.cpp
+++ b/SrcLib/core/fwData/src/fwData/ReconstructionTraits.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
-
 #include "fwData/ReconstructionTraits.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/registry/macros.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::ReconstructionTraits );
 
 namespace fwData
@@ -17,7 +17,7 @@ namespace fwData
 
 //------------------------------------------------------------------------------
 
-void ReconstructionTraits::setMaskOpNode( ::fwData::Node::sptr maskOpNode )
+void ReconstructionTraits::setMaskOpNode(const ::fwData::Node::sptr& maskOpNode )
 {
     m_maskOpNode = maskOpNode;
 }
@@ -32,22 +32,21 @@ void ReconstructionTraits::setMaskOpNode( ::fwData::Node::sptr maskOpNode )
 
 //------------------------------------------------------------------------------
 
-void ReconstructionTraits::setMeshOpNode( ::fwData::Node::sptr meshOpNode )
+void ReconstructionTraits::setMeshOpNode(const ::fwData::Node::sptr& meshOpNode )
 {
-    m_meshOpNode =  meshOpNode;
+    m_meshOpNode = meshOpNode;
 }
 
 //------------------------------------------------------------------------------
 
 ::fwData::Node::sptr ReconstructionTraits::getMeshOpNode()
 {
-
     return m_meshOpNode;
 }
 
 //------------------------------------------------------------------------------
 
-void ReconstructionTraits::setStructureTraits( ::fwData::StructureTraits::sptr structureTraits )
+void ReconstructionTraits::setStructureTraits(const ::fwData::StructureTraits::sptr& structureTraits )
 {
     m_structureTraits = structureTraits;
 }
@@ -62,13 +61,15 @@ void ReconstructionTraits::setStructureTraits( ::fwData::StructureTraits::sptr s
 //------------------------------------------------------------------------------
 
 ReconstructionTraits::ReconstructionTraits(::fwData::Object::Key key)
-{}
+{
+}
 
 
 //------------------------------------------------------------------------------
 
 ReconstructionTraits::~ReconstructionTraits()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -76,11 +77,11 @@ void ReconstructionTraits::cachedDeepCopy(const Object::csptr &source, DeepCopyC
 {
     ReconstructionTraits::csptr other = ReconstructionTraits::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
 
-    OSLM_FATAL("Not implemented." );
+    SLM_FATAL("Not implemented." );
 }
 
 } // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Resection.cpp b/SrcLib/core/fwData/src/fwData/Resection.cpp
index 5924b40..563fb61 100644
--- a/SrcLib/core/fwData/src/fwData/Resection.cpp
+++ b/SrcLib/core/fwData/src/fwData/Resection.cpp
@@ -1,36 +1,46 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/Resection.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::Resection );
 
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType Resection::s_RECONSTRUCTION_ADDED_SIG = "reconstructionAdded";
+const ::fwCom::Signals::SignalKeyType Resection::s_VISIBILITY_MODIFIED_SIG  = "pointTexCoordsModified";
+
 //------------------------------------------------------------------------------
 
-Resection::Resection (::fwData::Object::Key key)
-: m_isSafePart(true),
-  m_isValid(false),
-  m_isVisible(true)
+Resection::Resection (::fwData::Object::Key key) : m_isSafePart(true),
+                                                   m_isValid(false),
+                                                   m_isVisible(true)
 {
-    m_planeList = ::fwData::PlaneList::New();
+    m_planeList              = ::fwData::PlaneList::New();
+    m_sigReconstructionAdded = ReconstructionAddedSignalType::New();
+    m_sigVisibilityModified  = VisibilityModifiedSignalType::New();
+
+    m_signals( s_RECONSTRUCTION_ADDED_SIG,  m_sigReconstructionAdded)
+        ( s_VISIBILITY_MODIFIED_SIG,  m_sigVisibilityModified);
 }
 
 //------------------------------------------------------------------------------
 
 Resection::~Resection ()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -38,17 +48,17 @@ void Resection::shallowCopy(const Object::csptr &_source )
 {
     Resection::csptr other = Resection::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 
-    m_name = other->m_name;
+    m_name       = other->m_name;
     m_isSafePart = other->m_isSafePart;
-    m_isValid = other->m_isValid;
-    m_isVisible = other->m_isVisible;
-    m_planeList = other->m_planeList;
-    m_vInputs = other->m_vInputs;
-    m_vOutputs = other->m_vOutputs;
+    m_isValid    = other->m_isValid;
+    m_isVisible  = other->m_isVisible;
+    m_planeList  = other->m_planeList;
+    m_vInputs    = other->m_vInputs;
+    m_vOutputs   = other->m_vOutputs;
 }
 
 //------------------------------------------------------------------------------
@@ -57,24 +67,24 @@ void Resection::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &
 {
     Resection::csptr other = Resection::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 
-    m_name = other->m_name;
+    m_name       = other->m_name;
     m_isSafePart = other->m_isSafePart;
-    m_isValid = other->m_isValid;
-    m_isVisible = other->m_isVisible;
-    m_planeList = ::fwData::Object::copy(other->m_planeList, cache);
+    m_isValid    = other->m_isValid;
+    m_isVisible  = other->m_isVisible;
+    m_planeList  = ::fwData::Object::copy(other->m_planeList, cache);
 
     this->m_vInputs.clear();
-    BOOST_FOREACH(const ResectionInputs::value_type &resec, other->m_vInputs)
+    for(const ResectionInputs::value_type &resec : other->m_vInputs)
     {
         m_vInputs.push_back( ::fwData::Object::copy(resec, cache) );
     }
 
     this->m_vOutputs.clear();
-    BOOST_FOREACH(const ResectionOutputs::value_type &resec, other->m_vOutputs)
+    for(const ResectionOutputs::value_type &resec : other->m_vOutputs)
     {
         m_vOutputs.push_back( ::fwData::Object::copy(resec, cache) );
     }
diff --git a/SrcLib/core/fwData/src/fwData/ResectionDB.cpp b/SrcLib/core/fwData/src/fwData/ResectionDB.cpp
index 7cdb51b..d0898a1 100644
--- a/SrcLib/core/fwData/src/fwData/ResectionDB.cpp
+++ b/SrcLib/core/fwData/src/fwData/ResectionDB.cpp
@@ -1,29 +1,42 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/ResectionDB.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::ResectionDB );
 
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType ResectionDB::s_RESECTION_ADDED_SIG = "resectionAdded";
+const ::fwCom::Signals::SignalKeyType ResectionDB::s_SAFE_PART_ADDED_SIG = "safePartAdded";
+
 //------------------------------------------------------------------------------
 
 ResectionDB::ResectionDB(::fwData::Object::Key key)
-{}
+{
+    m_sigResectionAdded = ResectionAddedSignalType::New();
+    m_sigSafePartAdded  = SafePartAddedSignalType::New();
+
+    m_signals( s_RESECTION_ADDED_SIG,  m_sigResectionAdded)
+        ( s_SAFE_PART_ADDED_SIG,  m_sigSafePartAdded);
+}
 
 //------------------------------------------------------------------------------
 
 ResectionDB::~ResectionDB()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -31,8 +44,8 @@ void ResectionDB::shallowCopy(const Object::csptr &_source )
 {
     ResectionDB::csptr other = ResectionDB::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
 }
 
@@ -42,8 +55,8 @@ void ResectionDB::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType
 {
     ResectionDB::csptr other = ResectionDB::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
 }
 
@@ -51,14 +64,14 @@ void ResectionDB::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType
 
 ResectionDB::ResectionContainerType::size_type ResectionDB::getNumberOfResections() const
 {
-    return m_attrResections.size();
+    return m_resections.size();
 }
 
 //------------------------------------------------------------------------------
 
-void ResectionDB::addResection( ::fwData::Resection::sptr resection )
+void ResectionDB::addResection(const ::fwData::Resection::sptr& resection )
 {
-    m_attrResections.push_back( resection );
+    m_resections.push_back( resection );
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/Spline.cpp b/SrcLib/core/fwData/src/fwData/Spline.cpp
index 92ae88f..58087f5 100644
--- a/SrcLib/core/fwData/src/fwData/Spline.cpp
+++ b/SrcLib/core/fwData/src/fwData/Spline.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -32,7 +32,7 @@ Spline::~Spline()
 
 Spline::Points &Spline::points()
 {
-    return m_points ;
+    return m_points;
 }
 
 //------------------------------------------------------------------------------
@@ -41,11 +41,11 @@ void Spline::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &cach
 {
     Spline::csptr other = Spline::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
 
-    OSLM_FATAL("Not implemented." );
+    SLM_FATAL("Not implemented." );
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/String.cpp b/SrcLib/core/fwData/src/fwData/String.cpp
index f235276..7348f70 100644
--- a/SrcLib/core/fwData/src/fwData/String.cpp
+++ b/SrcLib/core/fwData/src/fwData/String.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,12 +18,14 @@ namespace fwData
 //------------------------------------------------------------------------------
 
 String::String(::fwData::Object::Key key ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 String::~String() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -31,8 +33,8 @@ void String::shallowCopy(const Object::csptr &_source )
 {
     String::csptr other = String::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_value = other->m_value;
 }
@@ -43,8 +45,8 @@ void String::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cac
 {
     String::csptr other = String::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_value = other->m_value;
 }
diff --git a/SrcLib/core/fwData/src/fwData/StructureTraits.cpp b/SrcLib/core/fwData/src/fwData/StructureTraits.cpp
index 25b9420..ac609e8 100644
--- a/SrcLib/core/fwData/src/fwData/StructureTraits.cpp
+++ b/SrcLib/core/fwData/src/fwData/StructureTraits.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/StructureTraits.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::StructureTraits );
 
 namespace fwData
@@ -26,7 +26,8 @@ StructureTraits::StructureTraits(::fwData::Object::Key key) : m_anatomicRegion("
 //------------------------------------------------------------------------------
 
 StructureTraits::~StructureTraits ()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -34,11 +35,11 @@ void StructureTraits::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheT
 {
     StructureTraits::csptr other = StructureTraits::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
 
-    OSLM_FATAL("Not implemented." );
+    SLM_FATAL("Not implemented." );
 }
 
 } // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/StructureTraitsDictionary.cpp b/SrcLib/core/fwData/src/fwData/StructureTraitsDictionary.cpp
index 635f099..b385d0f 100644
--- a/SrcLib/core/fwData/src/fwData/StructureTraitsDictionary.cpp
+++ b/SrcLib/core/fwData/src/fwData/StructureTraitsDictionary.cpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/bind.hpp>
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/StructureTraitsDictionary.hpp"
 
+#include <fwCore/base.hpp>
+
+#include <functional>
+
 fwDataRegisterMacro( ::fwData::StructureTraitsDictionary );
 
 namespace fwData
@@ -20,18 +20,21 @@ namespace fwData
 //------------------------------------------------------------------------------
 
 StructureTraitsDictionary::StructureTraitsDictionary (::fwData::Object::Key key)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 StructureTraitsDictionary::~StructureTraitsDictionary ()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 StructureTraits::sptr StructureTraitsDictionary::getStructure(std::string type)
 {
-    OSLM_ASSERT("Structure of type '" << type << "' not found", m_structureTraitsMap.find(type) != m_structureTraitsMap.end());
+    SLM_ASSERT("Structure of type '" + type + "' not found",
+               m_structureTraitsMap.find(type) != m_structureTraitsMap.end());
     return m_structureTraitsMap[type];
 }
 
@@ -39,19 +42,28 @@ StructureTraits::sptr StructureTraitsDictionary::getStructure(std::string type)
 
 void StructureTraitsDictionary::addStructure(StructureTraits::sptr structureTraits)
 {
-    std::string type = structureTraits->getType();
+    std::string type                            = structureTraits->getType();
     StructureTraits::StructureClass structClass = structureTraits->getClass();
-    std::string attachment = structureTraits->getAttachmentType();
-    FW_RAISE_IF("Structure of type '" << type << "' already exist", m_structureTraitsMap.find(type) != m_structureTraitsMap.end());
+    std::string attachment                      = structureTraits->getAttachmentType();
+
+    FW_RAISE_IF("Structure of type '" << type << "' already exist",
+                m_structureTraitsMap.find(type) != m_structureTraitsMap.end());
+
     FW_RAISE_IF("Structure of class '" << structClass << "' can not have attachment",
-            !(attachment.empty() || structClass == StructureTraits::LESION || structClass == StructureTraits::FUNCTIONAL) );
+                !(attachment.empty() || structClass == StructureTraits::LESION || structClass ==
+                  StructureTraits::FUNCTIONAL) );
+
     FW_RAISE_IF("Structure attachment '" << attachment << "' not found in dictionary",
-            !(attachment.empty() || m_structureTraitsMap.find(attachment) != m_structureTraitsMap.end() ) );
+                !(attachment.empty() || m_structureTraitsMap.find(attachment) != m_structureTraitsMap.end() ) );
+
     FW_RAISE_IF("Structure attachment '" << attachment << "' must be of class ORGAN",
-            !(attachment.empty() || m_structureTraitsMap[attachment]->getClass() == StructureTraits::ORGAN ) );
+                !(attachment.empty() || m_structureTraitsMap[attachment]->getClass() == StructureTraits::ORGAN ) );
+
     FW_RAISE_IF("Structure must have at least one category",
-            structureTraits->getCategories().empty());
-    FW_RAISE_IF("Wrong structure type '" << type<< "', a type cannot contain space" , structureTraits->getType().find(" ") != std::string::npos );
+                structureTraits->getCategories().empty());
+
+    FW_RAISE_IF("Wrong structure type '" << type<< "', a type cannot contain space",
+                structureTraits->getType().find(" ") != std::string::npos );
 
     m_structureTraitsMap[type] = structureTraits;
 }
@@ -62,8 +74,8 @@ StructureTraitsDictionary::StructureTypeNameContainer StructureTraitsDictionary:
 {
     StructureTypeNameContainer vectNames;
     std::transform( m_structureTraitsMap.begin(), m_structureTraitsMap.end(),
-            std::back_inserter(vectNames),
-            ::boost::bind(& StructureTraitsMapType::value_type::first,_1) );
+                    std::back_inserter(vectNames),
+                    std::bind(&StructureTraitsMapType::value_type::first, std::placeholders::_1) );
     return vectNames;
 }
 
@@ -73,8 +85,8 @@ void StructureTraitsDictionary::shallowCopy(const Object::csptr &source )
 {
     StructureTraitsDictionary::csptr other = StructureTraitsDictionary::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( source );
     m_structureTraitsMap = other->m_structureTraitsMap;
 }
@@ -85,11 +97,11 @@ void StructureTraitsDictionary::cachedDeepCopy(const Object::csptr &source, Deep
 {
     StructureTraitsDictionary::csptr other = StructureTraitsDictionary::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
     m_structureTraitsMap.clear();
-    BOOST_FOREACH(StructureTraitsMapType::value_type elt, other->m_structureTraitsMap)
+    for(const StructureTraitsMapType::value_type& elt : other->m_structureTraitsMap)
     {
         m_structureTraitsMap[elt.first] = ::fwData::Object::copy(elt.second, cache);
     }
diff --git a/SrcLib/core/fwData/src/fwData/StructureTraitsHelper.cpp b/SrcLib/core/fwData/src/fwData/StructureTraitsHelper.cpp
index e7af2f7..cfe946e 100644
--- a/SrcLib/core/fwData/src/fwData/StructureTraitsHelper.cpp
+++ b/SrcLib/core/fwData/src/fwData/StructureTraitsHelper.cpp
@@ -1,40 +1,43 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign.hpp>
 
 #include "fwData/StructureTraitsHelper.hpp"
 
+#include <boost/assign.hpp>
+
 namespace fwData
 {
 
 //------------------------------------------------------------------------------
 
-const StructureTraitsHelper::CategoryTranslatorType StructureTraitsHelper::s_CATEGORYTRANSLATOR = ::boost::assign::list_of< StructureTraitsHelper::CategoryTranslatorType::relation >
-                                                           ( ::fwData::StructureTraits::BODY,               std::string("Body"))
-                                                           ( ::fwData::StructureTraits::HEAD,               std::string("Head"))
-                                                           ( ::fwData::StructureTraits::NECK,               std::string("Neck"))
-                                                           ( ::fwData::StructureTraits::THORAX,             std::string("Thorax"))
-                                                           ( ::fwData::StructureTraits::ABDOMEN,            std::string("Abdomen"))
-                                                           ( ::fwData::StructureTraits::PELVIS,             std::string("Pelvis"))
-                                                           ( ::fwData::StructureTraits::ARM,                std::string("Arm"))
-                                                           ( ::fwData::StructureTraits::LEG,                std::string("Leg"))
-                                                           ( ::fwData::StructureTraits::LIVER_SEGMENTS,     std::string("Liver_segments"))
-                                                           ( ::fwData::StructureTraits::OTHER,              std::string("Other"));
+const StructureTraitsHelper::CategoryTranslatorType StructureTraitsHelper::s_CATEGORYTRANSLATOR =
+    ::boost::assign::list_of< StructureTraitsHelper::CategoryTranslatorType::relation >
+        ( ::fwData::StructureTraits::BODY,               std::string("Body"))
+        ( ::fwData::StructureTraits::HEAD,               std::string("Head"))
+        ( ::fwData::StructureTraits::NECK,               std::string("Neck"))
+        ( ::fwData::StructureTraits::THORAX,             std::string("Thorax"))
+        ( ::fwData::StructureTraits::ABDOMEN,            std::string("Abdomen"))
+        ( ::fwData::StructureTraits::PELVIS,             std::string("Pelvis"))
+        ( ::fwData::StructureTraits::ARM,                std::string("Arm"))
+        ( ::fwData::StructureTraits::LEG,                std::string("Leg"))
+        ( ::fwData::StructureTraits::LIVER_SEGMENTS,     std::string("Liver_segments"))
+        ( ::fwData::StructureTraits::OTHER,              std::string("Other"));
 
 //------------------------------------------------------------------------------
 
-const StructureTraitsHelper::ClassTranslatorType StructureTraitsHelper::s_CLASSTRANSLATOR = ::boost::assign::list_of< StructureTraitsHelper::ClassTranslatorType::relation >
-                                                           ( ::fwData::StructureTraits::TOOL,          std::string("Tool"))
-                                                           ( ::fwData::StructureTraits::ENVIRONMENT,   std::string("Environment"))
-                                                           ( ::fwData::StructureTraits::VESSEL,        std::string("Vessel"))
-                                                           ( ::fwData::StructureTraits::LESION,        std::string("Lesion"))
-                                                           ( ::fwData::StructureTraits::ORGAN,         std::string("Organ"))
-                                                           ( ::fwData::StructureTraits::FUNCTIONAL,    std::string("Functional"))
-                                                           ( ::fwData::StructureTraits::NO_CONSTRAINT, std::string("No_constraint"));
+const StructureTraitsHelper::ClassTranslatorType StructureTraitsHelper::s_CLASSTRANSLATOR =
+    ::boost::assign::list_of< StructureTraitsHelper::ClassTranslatorType::relation >
+        ( ::fwData::StructureTraits::TOOL,          std::string("Tool"))
+        ( ::fwData::StructureTraits::ENVIRONMENT,   std::string("Environment"))
+        ( ::fwData::StructureTraits::VESSEL,        std::string("Vessel"))
+        ( ::fwData::StructureTraits::LESION,        std::string("Lesion"))
+        ( ::fwData::StructureTraits::ORGAN,         std::string("Organ"))
+        ( ::fwData::StructureTraits::FUNCTIONAL,    std::string("Functional"))
+        ( ::fwData::StructureTraits::NO_CONSTRAINT, std::string("No_constraint"));
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwData/src/fwData/Tag.cpp b/SrcLib/core/fwData/src/fwData/Tag.cpp
index a280dc9..a5a3fc7 100644
--- a/SrcLib/core/fwData/src/fwData/Tag.cpp
+++ b/SrcLib/core/fwData/src/fwData/Tag.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/Tag.hpp"
 
+#include <fwCore/base.hpp>
+
 fwDataRegisterMacro( ::fwData::Tag );
 
 namespace fwData
@@ -17,7 +17,8 @@ namespace fwData
 //------------------------------------------------------------------------------
 
 Tag::Tag(::fwData::Object::Key key) : m_size(0.5)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -35,13 +36,12 @@ void Tag::shallowCopy(const Object::csptr &source )
 {
     Tag::csptr other = Tag::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( source );
-    m_sType = other->m_sType;
-    m_size = other->m_size;
+    m_sType     = other->m_sType;
+    m_size      = other->m_size;
     m_pointList = other->m_pointList;
-
 }
 
 //------------------------------------------------------------------------------
@@ -50,11 +50,11 @@ void Tag::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &cache)
 {
     Tag::csptr other = Tag::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
-    m_sType = other->m_sType;
-    m_size = other->m_size;
+    m_sType     = other->m_sType;
+    m_size      = other->m_size;
     m_pointList = ::fwData::Object::copy(other->m_pointList, cache);
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/TransferFunction.cpp b/SrcLib/core/fwData/src/fwData/TransferFunction.cpp
index 57802bc..aceca0c 100644
--- a/SrcLib/core/fwData/src/fwData/TransferFunction.cpp
+++ b/SrcLib/core/fwData/src/fwData/TransferFunction.cpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/bind.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwTools/Type.hpp>
-
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
 #include "fwData/TransferFunction.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwCore/base.hpp>
+#include <fwTools/Type.hpp>
+
+#include <functional>
 
 fwDataRegisterMacro( ::fwData::TransferFunction );
 
@@ -23,10 +25,16 @@ namespace fwData
 
 const std::string TransferFunction::s_DEFAULT_TF_NAME = "CT-GreyLevel";
 
+const ::fwCom::Signals::SignalKeyType TransferFunction::s_POINTS_MODIFIED_SIG    = "pointsModified";
+const ::fwCom::Signals::SignalKeyType TransferFunction::s_WINDOWING_MODIFIED_SIG = "windowingModified";
+
 //------------------------------------------------------------------------------
 
 TransferFunction::TransferFunction(::fwData::Object::Key key)
 {
+    newSignal< PointsModifiedSignalType >(s_POINTS_MODIFIED_SIG);
+    newSignal< WindowingModifiedSignalType >(s_WINDOWING_MODIFIED_SIG);
+
     this->initTF();
 }
 
@@ -34,13 +42,13 @@ TransferFunction::TransferFunction(::fwData::Object::Key key)
 
 void TransferFunction::initTF()
 {
-    m_attrLevel = 0;
-    m_attrWindow = 100;
+    m_level  = 0;
+    m_window = 100;
 
-    m_attrName = "";
+    m_name = "";
 
-    m_attrInterpolationMode = TransferFunction::LINEAR;
-    m_attrIsClamped = true;
+    m_interpolationMode = TransferFunction::LINEAR;
+    m_isClamped         = true;
 
     m_tfData.clear();
 }
@@ -61,7 +69,8 @@ fwData::TransferFunction::sptr TransferFunction::createDefaultTF()
 //------------------------------------------------------------------------------
 
 TransferFunction::~TransferFunction()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -70,8 +79,8 @@ TransferFunction::TFValueVectorType TransferFunction::getTFValues() const
     TFValueVectorType values;
     values.reserve(m_tfData.size());
     std::transform( m_tfData.begin(), m_tfData.end(),
-            std::back_inserter(values),
-            ::boost::bind(& TFDataType::value_type::first, _1) );
+                    std::back_inserter(values),
+                    std::bind(&TFDataType::value_type::first, std::placeholders::_1) );
     return values;
 }
 
@@ -81,12 +90,12 @@ TransferFunction::TFValueVectorType TransferFunction::getScaledValues() const
 {
     TFValueVectorType values;
     values.reserve(m_tfData.size());
-    TFValuePairType minMax = this->getMinMaxTFValues();
+    TFValuePairType minMax       = this->getMinMaxTFValues();
     TFValuePairType windowMinMax = this->getWLMinMax();
 
-    const double scale = m_attrWindow / (minMax.second - minMax.first);
+    const double scale = m_window / (minMax.second - minMax.first);
 
-    BOOST_FOREACH(const TFDataType::value_type &data, m_tfData)
+    for(const TFDataType::value_type &data : m_tfData)
     {
         const double value = (data.first - minMax.first) * scale + windowMinMax.first;
         values.push_back(value);
@@ -100,9 +109,9 @@ TransferFunction::TFValueVectorType TransferFunction::getScaledValues() const
 TransferFunction::TFValuePairType
 TransferFunction::getMinMaxTFValues() const
 {
-    OSLM_ASSERT("It must have at least one value.", m_tfData.size()>= 1);
+    SLM_ASSERT("It must have at least one value.", m_tfData.size()>= 1);
     TFValuePairType minMax;
-    minMax.first = m_tfData.begin()->first;
+    minMax.first  = m_tfData.begin()->first;
     minMax.second = (m_tfData.rbegin())->first;
     return minMax;
 }
@@ -113,9 +122,9 @@ TransferFunction::TFValuePairType
 TransferFunction::getWLMinMax() const
 {
     TFValuePairType minMax;
-    double halfWindow = m_attrWindow/2.f;
-    minMax.first = m_attrLevel - halfWindow;
-    minMax.second = m_attrLevel + halfWindow;;
+    double halfWindow = m_window/2.f;
+    minMax.first  = m_level - halfWindow;
+    minMax.second = m_level + halfWindow;
     return minMax;
 }
 
@@ -123,9 +132,9 @@ TransferFunction::getWLMinMax() const
 
 void TransferFunction::setWLMinMax(const TFValuePairType& minMax)
 {
-    m_attrWindow = minMax.second - minMax.first;
-    double halfWindow = m_attrWindow/2.f;
-    m_attrLevel = halfWindow + minMax.first;
+    m_window = minMax.second - minMax.first;
+    double halfWindow = m_window/2.f;
+    m_level = halfWindow + minMax.first;
 }
 
 //------------------------------------------------------------------------------
@@ -133,12 +142,12 @@ void TransferFunction::setWLMinMax(const TFValuePairType& minMax)
 TransferFunction::TFValueType TransferFunction::getNearestValue( TFValueType value ) const
 {
     OSLM_ASSERT("It must have at least one value.", m_tfData.size()>= 1);
-    std::pair<double, double> minMax  = ::fwTools::Type::s_DOUBLE.minMax<double>();
-    double previousValue = minMax.first;
-    double nextValue = minMax.second;
+    std::pair<double, double> minMax = ::fwTools::Type::s_DOUBLE.minMax<double>();
+    double previousValue             = minMax.first;
+    double nextValue                 = minMax.second;
 
     TFValueType val;
-    BOOST_FOREACH(const TFDataType::value_type &data, m_tfData)
+    for(const TFDataType::value_type &data : m_tfData)
     {
         if(value < data.first )
         {
@@ -210,8 +219,8 @@ TransferFunction::TFColorVectorType TransferFunction::getTFColors() const
 {
     TFColorVectorType colors;
     std::transform( m_tfData.begin(), m_tfData.end(),
-            std::back_inserter(colors),
-            ::boost::bind(& TFDataType::value_type::second, _1) );
+                    std::back_inserter(colors),
+                    std::bind(&TFDataType::value_type::second, std::placeholders::_1) );
     return colors;
 }
 
@@ -220,16 +229,19 @@ TransferFunction::TFColorVectorType TransferFunction::getTFColors() const
 TransferFunction::TFColor TransferFunction::getNearestColor( TFValueType value ) const
 {
     OSLM_ASSERT("It must have at least one value.", m_tfData.size()>= 1);
-    std::pair<double, double> minMax  = ::fwTools::Type::s_DOUBLE.minMax<double>();
-    double previousValue = minMax.first;
-    double nextValue = minMax.second;
+
+    double min = std::numeric_limits<double>::min();
+    double max = std::numeric_limits<double>::max();
+
+    double previousValue = min;
+    double nextValue     = max;
 
     TFColor blackColor(0.0, 0.0, 0.0, 0.0);
     TFColor color;
     TFColor previousColor = blackColor;
-    TFColor nextColor = blackColor;
+    TFColor nextColor     = blackColor;
 
-    BOOST_FOREACH(const TFDataType::value_type &data, m_tfData)
+    for(const TFDataType::value_type &data : m_tfData)
     {
         if(value < data.first )
         {
@@ -243,9 +255,9 @@ TransferFunction::TFColor TransferFunction::getNearestColor( TFValueType value )
             previousColor = data.second;
         }
     }
-    if(previousValue == minMax.first)
+    if(previousValue == min)
     {
-        if(m_attrIsClamped)
+        if(m_isClamped)
         {
             color = blackColor;
         }
@@ -254,9 +266,9 @@ TransferFunction::TFColor TransferFunction::getNearestColor( TFValueType value )
             color = nextColor;
         }
     }
-    else if(nextValue == minMax.second)
+    else if(nextValue == max)
     {
-        if(m_attrIsClamped && (value != previousValue))
+        if(m_isClamped && (value != previousValue))
         {
             color = blackColor;
         }
@@ -285,16 +297,18 @@ TransferFunction::TFColor TransferFunction::getNearestColor( TFValueType value )
 TransferFunction::TFColor TransferFunction::getLinearColor( TFValueType value ) const
 {
     OSLM_ASSERT("It must have at least one value.", m_tfData.size()>= 1);
-    std::pair<double, double> minMax  = ::fwTools::Type::s_DOUBLE.minMax<double>();
-    double previousValue = minMax.first;
-    double nextValue = minMax.second;
+
+    double min           = std::numeric_limits<double>::min();
+    double max           = std::numeric_limits<double>::max();
+    double previousValue = min;
+    double nextValue     = max;
 
     TFColor blackColor(0.0, 0.0, 0.0, 0.0);
     TFColor color;
     TFColor previousColor = blackColor;
-    TFColor nextColor = blackColor;
+    TFColor nextColor     = blackColor;
 
-    BOOST_FOREACH(const TFDataType::value_type &data, m_tfData)
+    for(const TFDataType::value_type &data : m_tfData)
     {
         if(value < data.first )
         {
@@ -308,9 +322,9 @@ TransferFunction::TFColor TransferFunction::getLinearColor( TFValueType value )
             previousColor = data.second;
         }
     }
-    if(previousValue == minMax.first)
+    if(previousValue == min)
     {
-        if(m_attrIsClamped)
+        if(m_isClamped)
         {
             color = blackColor;
         }
@@ -319,9 +333,9 @@ TransferFunction::TFColor TransferFunction::getLinearColor( TFValueType value )
             color = nextColor;
         }
     }
-    else if(nextValue == minMax.second)
+    else if(nextValue == max)
     {
-        if(m_attrIsClamped && (value != previousValue))
+        if(m_isClamped && (value != previousValue))
         {
             color = blackColor;
         }
@@ -333,33 +347,16 @@ TransferFunction::TFColor TransferFunction::getLinearColor( TFValueType value )
     else
     {
         // Interpolate the color.
-        double distanceToNextValue = nextValue - value;
-        double distanceToPreviousValue = value - previousValue;
-        double distance = nextValue - previousValue;
-        double coefPrevious = 1.0 - (distanceToPreviousValue/distance);
-        double coefNext = 1.0 - (distanceToNextValue/distance);
-
-        color.r =  coefPrevious*previousColor.r + coefNext*nextColor.r;
-        color.g =  coefPrevious*previousColor.g + coefNext*nextColor.g;
-        color.b =  coefPrevious*previousColor.b + coefNext*nextColor.b;
-        color.a =  coefPrevious*previousColor.a + coefNext*nextColor.a;
-    }
-    return color;
-}
-
-//------------------------------------------------------------------------------
-
-TransferFunction::TFColor TransferFunction::getInterpolatedColor( TFValueType value ) const
-{
-    TFColor color;
-
-    if(m_attrInterpolationMode == LINEAR)
-    {
-        color = this->getLinearColor(value);
-    }
-    else if(m_attrInterpolationMode == NEAREST)
-    {
-        color = this->getNearestColor(value);
+        const double distanceToNextValue     = nextValue - value;
+        const double distanceToPreviousValue = value - previousValue;
+        const double distance                = 1.0 / (nextValue - previousValue);
+        const double coefPrevious            = 1.0 - (distanceToPreviousValue * distance);
+        const double coefNext                = 1.0 - (distanceToNextValue * distance);
+
+        color.r = coefPrevious*previousColor.r + coefNext*nextColor.r;
+        color.g = coefPrevious*previousColor.g + coefNext*nextColor.g;
+        color.b = coefPrevious*previousColor.b + coefNext*nextColor.b;
+        color.a = coefPrevious*previousColor.a + coefNext*nextColor.a;
     }
     return color;
 }
@@ -369,7 +366,7 @@ TransferFunction::TFColor TransferFunction::getInterpolatedColor( TFValueType va
 const TransferFunction::TFColor& TransferFunction::getTFColor( TFValueType value ) const
 {
     TFDataType::const_iterator itr = m_tfData.find(value);
-    SLM_ASSERT("Sorry not defined in the TF.", itr != m_tfData.end());
+    OSLM_ASSERT("The value "<< value <<" is not defined in the transfer function.", itr != m_tfData.end());
     return itr->second;
 }
 //------------------------------------------------------------------------------
@@ -378,16 +375,16 @@ void TransferFunction::shallowCopy(const Object::csptr &_source )
 {
     TransferFunction::csptr other = TransferFunction::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    this->m_attrLevel = other->m_attrLevel;
-    this->m_attrWindow = other->m_attrWindow;
-    this->m_attrName =other->m_attrName;
-    this->m_attrBackgroundColor = other->m_attrBackgroundColor;
-    this->m_tfData = other->m_tfData;
-    this->m_attrInterpolationMode = other->m_attrInterpolationMode;
-    this->m_attrIsClamped = other->m_attrIsClamped;
+    this->m_level             = other->m_level;
+    this->m_window            = other->m_window;
+    this->m_name              = other->m_name;
+    this->m_backgroundColor   = other->m_backgroundColor;
+    this->m_tfData            = other->m_tfData;
+    this->m_interpolationMode = other->m_interpolationMode;
+    this->m_isClamped         = other->m_isClamped;
 }
 
 //------------------------------------------------------------------------------
@@ -396,16 +393,16 @@ void TransferFunction::cachedDeepCopy(const Object::csptr &_source, DeepCopyCach
 {
     TransferFunction::csptr other = TransferFunction::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
-    this->m_attrLevel = other->m_attrLevel;
-    this->m_attrWindow = other->m_attrWindow;
-    this->m_attrName =other->m_attrName;
-    this->m_attrBackgroundColor = other->m_attrBackgroundColor;
-    this->m_tfData = other->m_tfData;
-    this->m_attrInterpolationMode = other->m_attrInterpolationMode;
-    this->m_attrIsClamped = other->m_attrIsClamped;
+    this->m_level             = other->m_level;
+    this->m_window            = other->m_window;
+    this->m_name              = other->m_name;
+    this->m_backgroundColor   = other->m_backgroundColor;
+    this->m_tfData            = other->m_tfData;
+    this->m_interpolationMode = other->m_interpolationMode;
+    this->m_isClamped         = other->m_isClamped;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/TransformationMatrix3D.cpp b/SrcLib/core/fwData/src/fwData/TransformationMatrix3D.cpp
index bd16f0c..f897635 100644
--- a/SrcLib/core/fwData/src/fwData/TransformationMatrix3D.cpp
+++ b/SrcLib/core/fwData/src/fwData/TransformationMatrix3D.cpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwData/registry/macros.hpp"
 #include "fwData/Exception.hpp"
-
 #include "fwData/TransformationMatrix3D.hpp"
 
 fwDataRegisterMacro( ::fwData::TransformationMatrix3D );
@@ -16,23 +15,21 @@ namespace fwData
 
 //------------------------------------------------------------------------------
 
-TransformationMatrix3D::TransformationMatrix3D(::fwData::Object::Key key) :
-                        m_vCoefficients(16)
+TransformationMatrix3D::TransformationMatrix3D(::fwData::Object::Key key)
 {
-    //default init
-    for(int l = 0; l < 4; l++)
-        for(int c = 0; c < 4; c++){
-            if(l==c)
-                setCoefficient(l, c, 1);
-            else
-                setCoefficient(l, c, 0);
-        }
+    //default initialization
+    m_vCoefficients.fill(0.);
+    for(size_t t = 0; t < MATRIX_SIZE; ++t)
+    {
+        m_vCoefficients[t*MATRIX_SIZE + t] = 1.;
+    }
 }
 
 //------------------------------------------------------------------------------
 
 TransformationMatrix3D::~TransformationMatrix3D()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -40,8 +37,8 @@ void TransformationMatrix3D::shallowCopy(const Object::csptr &_source )
 {
     TransformationMatrix3D::csptr other = TransformationMatrix3D::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     m_vCoefficients = other->m_vCoefficients;
 }
@@ -52,30 +49,12 @@ void TransformationMatrix3D::cachedDeepCopy(const Object::csptr &_source, DeepCo
 {
     TransformationMatrix3D::csptr other = TransformationMatrix3D::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     m_vCoefficients = other->m_vCoefficients;
 }
 
 //------------------------------------------------------------------------------
 
-double TransformationMatrix3D::getCoefficient(int l, int c) const
-{
-    unsigned int pos = l * MATRIX_SIZE + c;
-    assert(pos < m_vCoefficients.size());
-    return m_vCoefficients.at(pos);
-}
-
-//------------------------------------------------------------------------------
-
-void TransformationMatrix3D::setCoefficient(int l, int c, TransformationMatrix3D::TM3DType val)
-{
-    unsigned int pos = l * MATRIX_SIZE + c;
-    assert(pos < m_vCoefficients.size());
-    m_vCoefficients.at(pos)= val ;
-}
-
-//------------------------------------------------------------------------------
-
 } // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/TriangularMesh.cpp b/SrcLib/core/fwData/src/fwData/TriangularMesh.cpp
deleted file mode 100644
index 14d4521..0000000
--- a/SrcLib/core/fwData/src/fwData/TriangularMesh.cpp
+++ /dev/null
@@ -1,163 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwData/registry/macros.hpp"
-#include "fwData/Exception.hpp"
-
-#include "fwData/TriangularMesh.hpp"
-
-
-fwDataRegisterMacro( ::fwData::TriangularMesh );
-namespace fwData
-{
-
-TriangularMesh::TriangularMesh(::fwData::Object::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-TriangularMesh::~TriangularMesh()
-{
-    m_points.clear();
-    m_cells.clear();
-}
-
-//-----------------------------------------------------------------------------
-
-void TriangularMesh::shallowCopy(const Object::csptr &_source )
-{
-    TriangularMesh::csptr other = TriangularMesh::dynamicConstCast(_source);
-    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
-    this->fieldShallowCopy( _source );
-    this->m_points = other->m_points;
-    this->m_cells = other->m_cells;
-}
-
-//-----------------------------------------------------------------------------
-
-void TriangularMesh::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cache)
-{
-    TriangularMesh::csptr other = TriangularMesh::dynamicConstCast(_source);
-    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
-    this->fieldDeepCopy( _source, cache );
-    this->m_points = other->m_points;
-    this->m_cells = other->m_cells;
-}
-
-//-----------------------------------------------------------------------------
-
-TriangularMesh::PointContainer &TriangularMesh::points()
-{
-    return m_points ;
-}
-
-//-----------------------------------------------------------------------------
-
-TriangularMesh::ConstPointContainer &TriangularMesh::points() const
-{
-    return m_points ;
-}
-
-//-----------------------------------------------------------------------------
-
-TriangularMesh::CellContainer &TriangularMesh::cells()
-{
-    return m_cells ;
-}
-
-//-----------------------------------------------------------------------------
-
-TriangularMesh::ConstCellContainer &TriangularMesh::cells() const
-{
-    return m_cells ;
-}
-
-//-----------------------------------------------------------------------------
-
-void TriangularMesh::setOneVectorInPointList(int _iIndex, float _fX, float _fY, float _fZ)
-{
-    assert( (0 <= _iIndex) );
-    if ( ((PointContainer::size_type)_iIndex) >= m_points.size() )// Resize if necessary
-        m_points.resize( _iIndex + 1 );
-    std::vector<float> v(3);
-    m_points[_iIndex] = v;
-    m_points[_iIndex][0] = _fX;
-    m_points[_iIndex][1] = _fY;
-    m_points[_iIndex][2] = _fZ;
-}
-
-//-----------------------------------------------------------------------------
-
-void TriangularMesh::setOneIndexInIndexList(int _iIndex, int _p1, int _p2, int _p3)
-{
-    assert( (0 <= _iIndex) );
-    if ( ((CellContainer::size_type)_iIndex) >= m_cells.size() )// Resize if necessary
-        m_cells.resize( _iIndex + 1 );
-    std::vector<int> v(3);
-    m_cells[_iIndex] = v;
-    m_cells[_iIndex][0] = _p1;
-    m_cells[_iIndex][1] = _p2;
-    m_cells[_iIndex][2] = _p3;
-}
-
-//-----------------------------------------------------------------------------
-
-double* TriangularMesh::getOneVectorFromPointList(int _pt) const
-{
-    double *vec  = new double[3];
-    vec[0] = (double) m_points[_pt][0];
-    vec[1] =  (double) m_points[_pt][1];
-    vec[2] =  (double) m_points[_pt][2];
-    return vec;
-}
-
-//-----------------------------------------------------------------------------
-
-int TriangularMesh::getOneIndexFromIndexList(void) const { return 0; } //FIXME
-
-void TriangularMesh::setOneVectorInNormalList(int x, float, float, float) { x = 0; } //FIXME
-
-int TriangularMesh::getOneIndexFromNormalList(void) const { return 1; } //FIXME
-
-//-----------------------------------------------------------------------------
-
- size_t TriangularMesh::getNumPoints() const
-{
-    return m_points.size();
-}
-
-//-----------------------------------------------------------------------------
-
-size_t TriangularMesh::getNumCells() const
-{
-    return m_cells.size();
-}
-
-//-----------------------------------------------------------------------------
-
-void TriangularMesh::clearPoints()
-{
-    PointContainer emptyVector; // Size=0 and capacity=0
-    m_points.clear();
-    // The swap reinitialize the size value and capacity to 0
-    m_points.swap(emptyVector);
-}
-
-//-----------------------------------------------------------------------------
-
-void TriangularMesh::clearCells()
-{
-    CellContainer emptyVector; //Size=0 and capacity=0
-    m_cells.clear();
-    // The swap reinitialize the size value and capacity to 0
-    m_cells.swap(emptyVector);
-}
-
-} // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/Vector.cpp b/SrcLib/core/fwData/src/fwData/Vector.cpp
index 904f507..6f23239 100644
--- a/SrcLib/core/fwData/src/fwData/Vector.cpp
+++ b/SrcLib/core/fwData/src/fwData/Vector.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,20 +8,30 @@
 #include "fwData/Exception.hpp"
 #include "fwData/Vector.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
 fwDataRegisterMacro( ::fwData::Vector );
 
 namespace fwData
 {
 
+const ::fwCom::Signals::SignalKeyType Vector::s_ADDED_OBJECTS_SIG   = "addedObjects";
+const ::fwCom::Signals::SignalKeyType Vector::s_REMOVED_OBJECTS_SIG = "removedObjects";
+
 //------------------------------------------------------------------------------
 
 Vector::Vector(::fwData::Object::Key key)
-{}
+{
+    newSignal< AddedObjectsSignalType >(s_ADDED_OBJECTS_SIG);
+    newSignal< RemovedObjectsSignalType >(s_REMOVED_OBJECTS_SIG);
+}
 
 //------------------------------------------------------------------------------
 
 Vector::~Vector()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -29,10 +39,10 @@ void Vector::shallowCopy(const Object::csptr &_source )
 {
     Vector::csptr other = Vector::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
-    m_attrContainer = other->m_attrContainer;
+    m_container = other->m_container;
 }
 
 //------------------------------------------------------------------------------
@@ -41,14 +51,14 @@ void Vector::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &cach
 {
     Vector::csptr other = Vector::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
-    m_attrContainer.clear();
-    m_attrContainer.reserve(other->m_attrContainer.size());
-    BOOST_FOREACH(const ContainerType::value_type &obj, other->m_attrContainer)
+    m_container.clear();
+    m_container.reserve(other->m_container.size());
+    for(const ContainerType::value_type &obj : other->m_container)
     {
-        m_attrContainer.push_back( ::fwData::Object::copy(obj, cache) );
+        m_container.push_back( ::fwData::Object::copy(obj, cache) );
     }
 }
 
diff --git a/SrcLib/core/fwData/src/fwData/Video.cpp b/SrcLib/core/fwData/src/fwData/Video.cpp
deleted file mode 100644
index e0044c9..0000000
--- a/SrcLib/core/fwData/src/fwData/Video.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/base.hpp>
-#include "fwData/registry/macros.hpp"
-#include "fwData/Exception.hpp"
-
-#include "fwData/Video.hpp"
-
-fwDataRegisterMacro( ::fwData::Video );
-namespace fwData
-{
-//------------------------------------------------------------------------------
-
-Video::Video(::fwData::Object::Key key) :
-        m_ui32XSize(0),
-        m_ui32YSize(0),
-        m_ui8BPP(1),
-        m_pImageBuffer(0),
-        m_dataAvailable(false),
-        m_lastModified(0)
-{
-    m_camera = ::fwData::Camera::New();
-}
-
-//------------------------------------------------------------------------------
-
-Video::~Video() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-bool &Video::dataAvailable()
-{
-    return m_dataAvailable;
-}
-
-//------------------------------------------------------------------------------
-
-::boost::uint64_t Video::getLastModified()
-{
-    return m_lastModified;
-}
-
-//------------------------------------------------------------------------------
-
-void Video::Modified()
-{
-    m_lastModified++;
-}
-
-//------------------------------------------------------------------------------
-
-void Video::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &cache)
-{
-    Video::csptr other = Video::dynamicConstCast(source);
-    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
-    this->fieldDeepCopy( source, cache );
-
-    OSLM_FATAL("Not implemented." );
-}
-
-
-} // namespace fwData
diff --git a/SrcLib/core/fwData/src/fwData/factory/new.cpp b/SrcLib/core/fwData/src/fwData/factory/new.cpp
index adf5a6e..857ce3d 100644
--- a/SrcLib/core/fwData/src/fwData/factory/new.cpp
+++ b/SrcLib/core/fwData/src/fwData/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwData/src/fwData/location/Folder.cpp b/SrcLib/core/fwData/src/fwData/location/Folder.cpp
index 16261a6..b650e36 100644
--- a/SrcLib/core/fwData/src/fwData/location/Folder.cpp
+++ b/SrcLib/core/fwData/src/fwData/location/Folder.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,12 +19,14 @@ namespace location
 //------------------------------------------------------------------------------
 
 Folder::Folder( ::fwData::Object::Key key )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 Folder::~Folder()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -42,8 +44,8 @@ void Folder::shallowCopy(const Object::csptr &_source )
 {
     Folder::csptr other = Folder::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     this->m_folder = other->m_folder;
 }
@@ -54,8 +56,8 @@ void Folder::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType &cac
 {
     Folder::csptr other = Folder::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     this->m_folder = other->m_folder;
 }
diff --git a/SrcLib/core/fwData/src/fwData/location/ILocation.cpp b/SrcLib/core/fwData/src/fwData/location/ILocation.cpp
index a706fcb..6f31ca6 100644
--- a/SrcLib/core/fwData/src/fwData/location/ILocation.cpp
+++ b/SrcLib/core/fwData/src/fwData/location/ILocation.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,12 +14,14 @@ namespace location
 //------------------------------------------------------------------------------
 
 ILocation::ILocation()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ILocation::~ILocation()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwData/src/fwData/location/MultiFiles.cpp b/SrcLib/core/fwData/src/fwData/location/MultiFiles.cpp
index aa2b0ed..201d6bb 100644
--- a/SrcLib/core/fwData/src/fwData/location/MultiFiles.cpp
+++ b/SrcLib/core/fwData/src/fwData/location/MultiFiles.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,12 +22,14 @@ namespace location
 //------------------------------------------------------------------------------
 
 MultiFiles::MultiFiles( ::fwData::Object::Key key )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 MultiFiles::~MultiFiles()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -49,8 +51,8 @@ void MultiFiles::cachedDeepCopy(const Object::csptr &source, DeepCopyCacheType &
 {
     MultiFiles::csptr other = MultiFiles::dynamicConstCast(source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (source?source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (source ? source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( source, cache );
 
     OSLM_FATAL("Not implemented." );
diff --git a/SrcLib/core/fwData/src/fwData/location/SingleFile.cpp b/SrcLib/core/fwData/src/fwData/location/SingleFile.cpp
index 2860777..e300b1d 100644
--- a/SrcLib/core/fwData/src/fwData/location/SingleFile.cpp
+++ b/SrcLib/core/fwData/src/fwData/location/SingleFile.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,12 +24,14 @@ namespace location
 //------------------------------------------------------------------------------
 
 SingleFile::SingleFile( ::fwData::Object::Key key )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SingleFile::~SingleFile()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -37,8 +39,8 @@ void SingleFile::shallowCopy(const Object::csptr &_source )
 {
     SingleFile::csptr other = SingleFile::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldShallowCopy( _source );
     this->m_path = other->m_path;
 }
@@ -49,8 +51,8 @@ void SingleFile::cachedDeepCopy(const Object::csptr &_source, DeepCopyCacheType
 {
     SingleFile::csptr other = SingleFile::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
     this->fieldDeepCopy( _source, cache );
     this->m_path = other->m_path;
 }
diff --git a/SrcLib/core/fwData/src/fwData/mt/ObjectReadLock.cpp b/SrcLib/core/fwData/src/fwData/mt/ObjectReadLock.cpp
index 14521ce..d02ce09 100644
--- a/SrcLib/core/fwData/src/fwData/mt/ObjectReadLock.cpp
+++ b/SrcLib/core/fwData/src/fwData/mt/ObjectReadLock.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/thread/locks.hpp>
-
 #include "fwData/mt/ObjectReadLock.hpp"
 
+#include <boost/thread/locks.hpp>
+
 namespace fwData
 {
 namespace mt
@@ -15,7 +15,7 @@ namespace mt
 
 //-----------------------------------------------------------------------------
 
-ObjectReadLock::ObjectReadLock(::fwData::Object::sptr obj, bool lock)
+ObjectReadLock::ObjectReadLock(::fwData::Object::csptr obj, bool lock)
 {
     if (lock)
     {
@@ -30,7 +30,8 @@ ObjectReadLock::ObjectReadLock(::fwData::Object::sptr obj, bool lock)
 //-----------------------------------------------------------------------------
 
 ObjectReadLock::~ObjectReadLock()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwData/src/fwData/mt/ObjectReadToWriteLock.cpp b/SrcLib/core/fwData/src/fwData/mt/ObjectReadToWriteLock.cpp
index 7ce26f1..96e7ee6 100644
--- a/SrcLib/core/fwData/src/fwData/mt/ObjectReadToWriteLock.cpp
+++ b/SrcLib/core/fwData/src/fwData/mt/ObjectReadToWriteLock.cpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/thread/locks.hpp>
-#include <boost/make_shared.hpp>
-
 #include "fwData/mt/ObjectReadToWriteLock.hpp"
 
+#include <boost/thread/locks.hpp>
+
 namespace fwData
 {
 namespace mt
@@ -31,7 +30,8 @@ ObjectReadToWriteLock::ObjectReadToWriteLock(::fwData::Object::sptr obj, bool lo
 //-----------------------------------------------------------------------------
 
 ObjectReadToWriteLock::~ObjectReadToWriteLock()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -51,7 +51,7 @@ void ObjectReadToWriteLock::unlock()
 
 void ObjectReadToWriteLock::upgrade()
 {
-    m_upgradedLock = ::boost::make_shared< ::fwCore::mt::UpgradeToWriteLock >(::boost::ref(m_lock));
+    m_upgradedLock = std::make_shared< ::fwCore::mt::UpgradeToWriteLock >(::boost::ref(m_lock));
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/src/fwData/mt/ObjectWriteLock.cpp b/SrcLib/core/fwData/src/fwData/mt/ObjectWriteLock.cpp
index 022a49a..ec5e77d 100644
--- a/SrcLib/core/fwData/src/fwData/mt/ObjectWriteLock.cpp
+++ b/SrcLib/core/fwData/src/fwData/mt/ObjectWriteLock.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/thread/locks.hpp>
-
 #include "fwData/mt/ObjectWriteLock.hpp"
 
+#include <boost/thread/locks.hpp>
+
 namespace fwData
 {
 namespace mt
@@ -30,7 +30,8 @@ ObjectWriteLock::ObjectWriteLock(::fwData::Object::sptr obj, bool adopt_lock)
 //-----------------------------------------------------------------------------
 
 ObjectWriteLock::~ObjectWriteLock()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwData/src/fwData/registry/detail.cpp b/SrcLib/core/fwData/src/fwData/registry/detail.cpp
index 0762319..8cc3e37 100644
--- a/SrcLib/core/fwData/src/fwData/registry/detail.cpp
+++ b/SrcLib/core/fwData/src/fwData/registry/detail.cpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/util/LazyInstantiator.hpp>
-
 #include "fwData/registry/detail.hpp"
 
+#include <fwCore/util/LazyInstantiator.hpp>
 
 namespace fwData
 {
@@ -15,7 +14,7 @@ namespace fwData
 namespace registry
 {
 
-struct FwDataRegistryInstantiatorTag {} ;
+struct FwDataRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwData/test/CMakeLists.txt b/SrcLib/core/fwData/test/CMakeLists.txt
index 207087b..bd3ff4b 100644
--- a/SrcLib/core/fwData/test/CMakeLists.txt
+++ b/SrcLib/core/fwData/test/CMakeLists.txt
@@ -1,10 +1,14 @@
-
 fwLoadProperties()
 
-find_package (Boost COMPONENTS date_time REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+
+find_package(Boost COMPONENTS chrono REQUIRED)
+
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+)
 
 
 
diff --git a/SrcLib/core/fwData/test/Properties.cmake b/SrcLib/core/fwData/test/Properties.cmake
index b525f19..0041d5d 100644
--- a/SrcLib/core/fwData/test/Properties.cmake
+++ b/SrcLib/core/fwData/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwDataTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwComEd )
+set( DEPENDENCIES fwCore fwTest fwTools fwData )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwData/test/cppunit.options b/SrcLib/core/fwData/test/cppunit.options
deleted file mode 100644
index 405d831..0000000
--- a/SrcLib/core/fwData/test/cppunit.options
+++ /dev/null
@@ -1,34 +0,0 @@
-
-CLASSTEST=[
-    'ArrayTest',
-    'BooleanTest',
-    'CameraTest',
-    'ColorTest',
-    'CompositeTest',
-    'CopyTest',
-    'EdgeTest',
-    'FloatTest',
-    'GraphTest',
-    'ImageTest',
-    'IntegerTest',
-    'IsTypeOfTest',
-    'MaterialTest',
-    'MacrosTest',
-    'MeshTest',
-    'ModelTest',
-    'ObjectTest',
-    'ProcessObjectTest',
-    'ReconstructionTest',
-    'ReconstructionTraitsTest',
-    'ROITraitsTest',
-    'StringTest',
-    'StructureTraitsDictionaryTest',
-    'TransferFunctionTest',
-    'TransformationMatrix3DTest',
-    'VideoTest',
-    'MTLockTest',
-]
-
-USE = ['boost','boostDateTime', 'boostRegex']
-LIB = ['fwData_0-1','fwTools_0-1','fwCore_0-1','fwComEd_0-1','fwTest_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwData/test/tu/include/ArrayTest.hpp b/SrcLib/core/fwData/test/tu/include/ArrayTest.hpp
index 910a2af..266f7a2 100644
--- a/SrcLib/core/fwData/test/tu/include/ArrayTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ArrayTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class ArrayTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ArrayTest );
     CPPUNIT_TEST( allocation );
     CPPUNIT_TEST( resize );
diff --git a/SrcLib/core/fwData/test/tu/include/BooleanTest.hpp b/SrcLib/core/fwData/test/tu/include/BooleanTest.hpp
index 1f53ad4..8561a3f 100644
--- a/SrcLib/core/fwData/test/tu/include/BooleanTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/BooleanTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class BooleanTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( BooleanTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/CameraTest.hpp b/SrcLib/core/fwData/test/tu/include/CameraTest.hpp
deleted file mode 100644
index cd882d3..0000000
--- a/SrcLib/core/fwData/test/tu/include/CameraTest.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_UT_CAMERATEST_HPP__
-#define __FWDATA_UT_CAMERATEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace fwData
-{
-namespace ut
-{
-
-class CameraTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( CameraTest );
-    CPPUNIT_TEST( methode1 );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void methode1();
-};
-
-} //namespace ut
-} //namespace fwData
-#endif //__FWDATA_UT_CAMERATEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/include/ColorTest.hpp b/SrcLib/core/fwData/test/tu/include/ColorTest.hpp
index 784d94d..dcbfff1 100644
--- a/SrcLib/core/fwData/test/tu/include/ColorTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ColorTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATA_UT_ColorTEST_HPP__
-#define __FWDATA_UT_ColorTEST_HPP__
+#ifndef __FWDATA_UT_COLORTEST_HPP__
+#define __FWDATA_UT_COLORTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,6 +16,7 @@ namespace ut
 
 class ColorTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ColorTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST( methode2 );
@@ -31,4 +32,5 @@ public:
 };
 } //namespace ut
 } //namespace fwData
-#endif //__FWDATA_UT_ColorTEST_HPP__
+
+#endif //__FWDATA_UT_COLORTEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/include/CompositeTest.hpp b/SrcLib/core/fwData/test/tu/include/CompositeTest.hpp
index f57b8a6..0ef1b4e 100644
--- a/SrcLib/core/fwData/test/tu/include/CompositeTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/CompositeTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class CompositeTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( CompositeTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST( setGetContainerTest );
diff --git a/SrcLib/core/fwData/test/tu/include/CopyTest.hpp b/SrcLib/core/fwData/test/tu/include/CopyTest.hpp
index 776da1a..0fddbe7 100644
--- a/SrcLib/core/fwData/test/tu/include/CopyTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/CopyTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,64 +9,64 @@
 
 #include <cppunit/extensions/HelperMacros.h>
 
-#define __FWDATA_UT_FIELD_DEEP_COPY_MACRO(ObjType)                                                                    \
-    {                                                                                                                 \
-    OSLM_WARN("Testing : " << #ObjType);                                                                              \
-    ObjType::sptr object = ObjType::New();                                                                            \
-    ObjType::sptr deepCopyObject;                                                                                     \
-                                                                                                                      \
-    ObjType::sptr field1 = ObjType::New();                                                                            \
-    ObjType::sptr field2 = ObjType::New();                                                                            \
-    ObjType::sptr field3 = ObjType::New();                                                                            \
-                                                                                                                      \
-    object->setField("F1", field1);                                                                                   \
-    object->setField("F2", field2);                                                                                   \
-    object->setField("F3", field3);                                                                                   \
-                                                                                                                      \
-    deepCopyObject = ::fwData::Object::copy(object);                                                                  \
-    CPPUNIT_ASSERT_EQUAL( object->getClassname(), deepCopyObject->getClassname() );                                   \
-    CPPUNIT_ASSERT_EQUAL( object->getFields().size(), deepCopyObject->getFields().size() );                           \
-    CPPUNIT_ASSERT( object->getField("F1") != deepCopyObject->getField("F1") );                                       \
-    CPPUNIT_ASSERT( object->getField("F2") != deepCopyObject->getField("F2") );                                       \
-    CPPUNIT_ASSERT( object->getField("F3") != deepCopyObject->getField("F3") );                                       \
-                                                                                                                      \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F1")->getClassname(), deepCopyObject->getField("F1")->getClassname() );   \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F2")->getClassname(), deepCopyObject->getField("F2")->getClassname() );   \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F3")->getClassname(), deepCopyObject->getField("F3")->getClassname() );   \
+#define __FWDATA_UT_FIELD_DEEP_COPY_MACRO(ObjType)                                                                        \
+    {                                                                                                                     \
+        OSLM_WARN("Testing : " << #ObjType);                                                                              \
+        ObjType::sptr object = ObjType::New();                                                                            \
+        ObjType::sptr deepCopyObject;                                                                                     \
+                                                                                                                          \
+        ObjType::sptr field1 = ObjType::New();                                                                            \
+        ObjType::sptr field2 = ObjType::New();                                                                            \
+        ObjType::sptr field3 = ObjType::New();                                                                            \
+                                                                                                                          \
+        object->setField("F1", field1);                                                                                   \
+        object->setField("F2", field2);                                                                                   \
+        object->setField("F3", field3);                                                                                   \
+                                                                                                                          \
+        deepCopyObject = ::fwData::Object::copy(object);                                                                  \
+        CPPUNIT_ASSERT_EQUAL( object->getClassname(), deepCopyObject->getClassname() );                                   \
+        CPPUNIT_ASSERT_EQUAL( object->getFields().size(), deepCopyObject->getFields().size() );                           \
+        CPPUNIT_ASSERT( object->getField("F1") != deepCopyObject->getField("F1") );                                       \
+        CPPUNIT_ASSERT( object->getField("F2") != deepCopyObject->getField("F2") );                                       \
+        CPPUNIT_ASSERT( object->getField("F3") != deepCopyObject->getField("F3") );                                       \
+                                                                                                                          \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F1")->getClassname(), deepCopyObject->getField("F1")->getClassname() );   \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F2")->getClassname(), deepCopyObject->getField("F2")->getClassname() );   \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F3")->getClassname(), deepCopyObject->getField("F3")->getClassname() );   \
     }
 
 #define __FWDATA_UT_FIELD_COPY_MACRO(ObjType)                                                                        \
     {                                                                                                                \
-    OSLM_WARN("Testing : " << #ObjType);                                                                             \
-    ObjType::sptr object = ObjType::New();                                                                           \
-    ObjType::sptr deepCopyObject = ObjType::New();                                                                   \
-    ObjType::sptr shallowCopyObject = ObjType::New();                                                                \
+        OSLM_WARN("Testing : " << #ObjType);                                                                         \
+        ObjType::sptr object            = ObjType::New();                                                            \
+        ObjType::sptr deepCopyObject    = ObjType::New();                                                            \
+        ObjType::sptr shallowCopyObject = ObjType::New();                                                            \
                                                                                                                      \
-    ObjType::sptr field1 = ObjType::New();                                                                           \
-    ObjType::sptr field2 = ObjType::New();                                                                           \
-    ObjType::sptr field3 = ObjType::New();                                                                           \
+        ObjType::sptr field1 = ObjType::New();                                                                       \
+        ObjType::sptr field2 = ObjType::New();                                                                       \
+        ObjType::sptr field3 = ObjType::New();                                                                       \
                                                                                                                      \
-    object->setField("F1", field1);                                                                                  \
-    object->setField("F2", field2);                                                                                  \
-    object->setField("F3", field3);                                                                                  \
+        object->setField("F1", field1);                                                                              \
+        object->setField("F2", field2);                                                                              \
+        object->setField("F3", field3);                                                                              \
                                                                                                                      \
-    deepCopyObject = ::fwData::Object::copy(object);                                                                 \
-    CPPUNIT_ASSERT_EQUAL( object->getClassname(), deepCopyObject->getClassname() );                                  \
-    CPPUNIT_ASSERT_EQUAL( object->getFields().size(), deepCopyObject->getFields().size() );                          \
-    CPPUNIT_ASSERT( object->getField("F1") != deepCopyObject->getField("F1") );                                      \
-    CPPUNIT_ASSERT( object->getField("F2") != deepCopyObject->getField("F2") );                                      \
-    CPPUNIT_ASSERT( object->getField("F3") != deepCopyObject->getField("F3") );                                      \
+        deepCopyObject = ::fwData::Object::copy(object);                                                             \
+        CPPUNIT_ASSERT_EQUAL( object->getClassname(), deepCopyObject->getClassname() );                              \
+        CPPUNIT_ASSERT_EQUAL( object->getFields().size(), deepCopyObject->getFields().size() );                      \
+        CPPUNIT_ASSERT( object->getField("F1") != deepCopyObject->getField("F1") );                                  \
+        CPPUNIT_ASSERT( object->getField("F2") != deepCopyObject->getField("F2") );                                  \
+        CPPUNIT_ASSERT( object->getField("F3") != deepCopyObject->getField("F3") );                                  \
                                                                                                                      \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F1")->getClassname(), deepCopyObject->getField("F1")->getClassname() );  \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F2")->getClassname(), deepCopyObject->getField("F2")->getClassname() );  \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F3")->getClassname(), deepCopyObject->getField("F3")->getClassname() );  \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F1")->getClassname(), deepCopyObject->getField("F1")->getClassname() );  \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F2")->getClassname(), deepCopyObject->getField("F2")->getClassname() );  \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F3")->getClassname(), deepCopyObject->getField("F3")->getClassname() );  \
                                                                                                                      \
-    shallowCopyObject->shallowCopy(object);                                                                          \
-    CPPUNIT_ASSERT_EQUAL( object->getClassname(), shallowCopyObject->getClassname() );                               \
-    CPPUNIT_ASSERT_EQUAL( object->getFields().size(), shallowCopyObject->getFields().size() );                       \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F1"), shallowCopyObject->getField("F1") );                               \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F2"), shallowCopyObject->getField("F2") );                               \
-    CPPUNIT_ASSERT_EQUAL( object->getField("F3"), shallowCopyObject->getField("F3") );                               \
+        shallowCopyObject->shallowCopy(object);                                                                      \
+        CPPUNIT_ASSERT_EQUAL( object->getClassname(), shallowCopyObject->getClassname() );                           \
+        CPPUNIT_ASSERT_EQUAL( object->getFields().size(), shallowCopyObject->getFields().size() );                   \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F1"), shallowCopyObject->getField("F1") );                           \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F2"), shallowCopyObject->getField("F2") );                           \
+        CPPUNIT_ASSERT_EQUAL( object->getField("F3"), shallowCopyObject->getField("F3") );                           \
     }
 
 
@@ -77,6 +77,7 @@ namespace ut
 
 class CopyTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( CopyTest );
     CPPUNIT_TEST( fieldCopyTest );
     CPPUNIT_TEST( severalReferencesCopyTest );
diff --git a/SrcLib/core/fwData/test/tu/include/EdgeTest.hpp b/SrcLib/core/fwData/test/tu/include/EdgeTest.hpp
index a15d549..6eab197 100644
--- a/SrcLib/core/fwData/test/tu/include/EdgeTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/EdgeTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class EdgeTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( EdgeTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/FloatTest.hpp b/SrcLib/core/fwData/test/tu/include/FloatTest.hpp
index a9e11c5..8834dd1 100644
--- a/SrcLib/core/fwData/test/tu/include/FloatTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/FloatTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class FloatTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( FloatTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/GraphTest.hpp b/SrcLib/core/fwData/test/tu/include/GraphTest.hpp
index e914ae8..f9f3ae6 100755
--- a/SrcLib/core/fwData/test/tu/include/GraphTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/GraphTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,8 +14,10 @@ namespace fwData
 namespace ut
 {
 
-class GraphTest : public CPPUNIT_NS::TestFixture {
+class GraphTest : public CPPUNIT_NS::TestFixture
+{
 
+private:
     CPPUNIT_TEST_SUITE( GraphTest );
     CPPUNIT_TEST( normalCase );
     CPPUNIT_TEST( limitCase1 );
diff --git a/SrcLib/core/fwData/test/tu/include/ImageTest.hpp b/SrcLib/core/fwData/test/tu/include/ImageTest.hpp
index a655e17..2ffcfba 100644
--- a/SrcLib/core/fwData/test/tu/include/ImageTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ImageTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class ImageTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ImageTest );
     CPPUNIT_TEST( testGetterSetter );
     CPPUNIT_TEST( testAllocation );
diff --git a/SrcLib/core/fwData/test/tu/include/IntegerTest.hpp b/SrcLib/core/fwData/test/tu/include/IntegerTest.hpp
index b234847..72a3d13 100644
--- a/SrcLib/core/fwData/test/tu/include/IntegerTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/IntegerTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class IntegerTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( IntegerTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/IsTypeOfTest.hpp b/SrcLib/core/fwData/test/tu/include/IsTypeOfTest.hpp
index 152986e..2b94009 100644
--- a/SrcLib/core/fwData/test/tu/include/IsTypeOfTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/IsTypeOfTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class IsTypeOfTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( IsTypeOfTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/MTLockTest.hpp b/SrcLib/core/fwData/test/tu/include/MTLockTest.hpp
index 57b8b56..d3bb9f2 100644
--- a/SrcLib/core/fwData/test/tu/include/MTLockTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/MTLockTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,6 +18,7 @@ namespace ut
 
 class MTLockTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( MTLockTest );
     CPPUNIT_TEST( lockTest );
     CPPUNIT_TEST( multipleLockTest );
diff --git a/SrcLib/core/fwData/test/tu/include/MacrosTest.hpp b/SrcLib/core/fwData/test/tu/include/MacrosTest.hpp
deleted file mode 100644
index 37416f9..0000000
--- a/SrcLib/core/fwData/test/tu/include/MacrosTest.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_UT_MACROSTEST_HPP__
-#define __FWDATA_UT_MACROSTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace fwData
-{
-namespace ut
-{
-
-class MacrosTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MacrosTest );
-    CPPUNIT_TEST( getterSetterTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-
-    void setUp();
-    void tearDown();
-
-    void getterSetterTest();
-};
-} //namespace ut
-} //namespace fwData
-
-#endif //__FWDATA_UT_MACROSTEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/include/MaterialTest.hpp b/SrcLib/core/fwData/test/tu/include/MaterialTest.hpp
index 1e079b3..51c7c71 100644
--- a/SrcLib/core/fwData/test/tu/include/MaterialTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/MaterialTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class MaterialTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( MaterialTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/MeshTest.hpp b/SrcLib/core/fwData/test/tu/include/MeshTest.hpp
index 6c41096..08a8b01 100644
--- a/SrcLib/core/fwData/test/tu/include/MeshTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/MeshTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,12 @@ namespace ut
 
 class MeshTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( MeshTest );
     CPPUNIT_TEST( allocation );
     CPPUNIT_TEST( insertion );
     CPPUNIT_TEST( colorsNormals );
+    CPPUNIT_TEST( texCoords );
     CPPUNIT_TEST( addingArray );
     CPPUNIT_TEST( copy );
     CPPUNIT_TEST_SUITE_END();
@@ -32,6 +34,7 @@ public:
     void allocation();
     void insertion();
     void colorsNormals();
+    void texCoords();
     void addingArray();
     void copy();
 };
diff --git a/SrcLib/core/fwData/test/tu/include/ModelTest.hpp b/SrcLib/core/fwData/test/tu/include/ModelTest.hpp
deleted file mode 100644
index e7a462c..0000000
--- a/SrcLib/core/fwData/test/tu/include/ModelTest.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_UT_MODELTEST_HPP__
-#define __FWDATA_UT_MODELTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace fwData
-{
-namespace ut
-{
-
-class ModelTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( ModelTest );
-    CPPUNIT_TEST( methode1 );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void methode1();
-};
-} //namespace ut
-} //namespace fwData
-#endif //__FWDATA_UT_MODELTEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/include/ObjectTest.hpp b/SrcLib/core/fwData/test/tu/include/ObjectTest.hpp
index 75366bf..3ccae10 100644
--- a/SrcLib/core/fwData/test/tu/include/ObjectTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ObjectTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class ObjectTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ObjectTest );
     CPPUNIT_TEST( fieldTest );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/PointListTest.hpp b/SrcLib/core/fwData/test/tu/include/PointListTest.hpp
new file mode 100644
index 0000000..e2a97e1
--- /dev/null
+++ b/SrcLib/core/fwData/test/tu/include/PointListTest.hpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATA_UT_POINTLISTTEST_HPP__
+#define __FWDATA_UT_POINTLISTTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwData
+{
+namespace ut
+{
+/**
+ * @brief The PointListTest class
+ * This class is used to test ::fwData::PointList
+ */
+class PointListTest : public CPPUNIT_NS::TestFixture
+{
+private:
+    CPPUNIT_TEST_SUITE( PointListTest );
+    CPPUNIT_TEST( copyTest );
+    CPPUNIT_TEST( getterTest );
+    CPPUNIT_TEST( setterTest );
+    CPPUNIT_TEST( pushTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+    void copyTest();
+    void getterTest();
+    void setterTest();
+    void pushTest();
+
+};
+
+} //namespace ut
+} //namespace fwData
+#endif //__FWDATA_UT_POINTLISTTEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/include/ProcessObjectTest.hpp b/SrcLib/core/fwData/test/tu/include/ProcessObjectTest.hpp
index a782b9d..26f0615 100644
--- a/SrcLib/core/fwData/test/tu/include/ProcessObjectTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ProcessObjectTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,14 +16,19 @@ namespace ut
 
 class ProcessObjectTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ProcessObjectTest );
     CPPUNIT_TEST( constructeur );
     CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
-    void setUp(){};
-    void tearDown(){};
+    void setUp()
+    {
+    }
+    void tearDown()
+    {
+    }
 
     void constructeur();
 };
diff --git a/SrcLib/core/fwData/test/tu/include/ROITraitsTest.hpp b/SrcLib/core/fwData/test/tu/include/ROITraitsTest.hpp
index 5e7fb4f..fd11e01 100644
--- a/SrcLib/core/fwData/test/tu/include/ROITraitsTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ROITraitsTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class ROITraitsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ROITraitsTest );
     CPPUNIT_TEST( creation );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/ReconstructionTest.hpp b/SrcLib/core/fwData/test/tu/include/ReconstructionTest.hpp
index 34f09a5..36f574a 100644
--- a/SrcLib/core/fwData/test/tu/include/ReconstructionTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ReconstructionTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class ReconstructionTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ReconstructionTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST( methode2 );
diff --git a/SrcLib/core/fwData/test/tu/include/ReconstructionTraitsTest.hpp b/SrcLib/core/fwData/test/tu/include/ReconstructionTraitsTest.hpp
index 6e6477b..b6fb76c 100644
--- a/SrcLib/core/fwData/test/tu/include/ReconstructionTraitsTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/ReconstructionTraitsTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class ReconstructionTraitsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( ReconstructionTraitsTest );
     CPPUNIT_TEST( creation );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/StringTest.hpp b/SrcLib/core/fwData/test/tu/include/StringTest.hpp
index d7a6c38..3b50213 100644
--- a/SrcLib/core/fwData/test/tu/include/StringTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/StringTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class StringTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( StringTest );
     CPPUNIT_TEST( methode1 );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/StructureTraitsDictionaryTest.hpp b/SrcLib/core/fwData/test/tu/include/StructureTraitsDictionaryTest.hpp
index 1d05605..c87eed9 100644
--- a/SrcLib/core/fwData/test/tu/include/StructureTraitsDictionaryTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/StructureTraitsDictionaryTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class StructureTraitsDictionaryTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( StructureTraitsDictionaryTest );
     CPPUNIT_TEST( testAddingStructure );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwData/test/tu/include/TransferFunctionTest.hpp b/SrcLib/core/fwData/test/tu/include/TransferFunctionTest.hpp
index 583e9fc..27742c9 100644
--- a/SrcLib/core/fwData/test/tu/include/TransferFunctionTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/TransferFunctionTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,6 +18,7 @@ namespace ut
 
 class TransferFunctionTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( TransferFunctionTest );
     CPPUNIT_TEST( constructorTest );
     CPPUNIT_TEST( defaultTfTest );
diff --git a/SrcLib/core/fwData/test/tu/include/TransformationMatrix3DTest.hpp b/SrcLib/core/fwData/test/tu/include/TransformationMatrix3DTest.hpp
index 82c1213..518d54a 100644
--- a/SrcLib/core/fwData/test/tu/include/TransformationMatrix3DTest.hpp
+++ b/SrcLib/core/fwData/test/tu/include/TransformationMatrix3DTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATA_UT_TRANSFORMATION3DMATRIXTEST_HPP__
-#define __FWDATA_UT_TRANSFORMATION3DMATRIXTEST_HPP__
+#ifndef __FWDATA_UT_TRANSFORMATIONMATRIX3DTEST_HPP__
+#define __FWDATA_UT_TRANSFORMATIONMATRIX3DTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,10 @@ namespace ut
 
 class TransformationMatrix3DTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( TransformationMatrix3DTest );
-    CPPUNIT_TEST( methode1 );
-    CPPUNIT_TEST( methode2 );
+    CPPUNIT_TEST( getterSetterByCoef );
+    CPPUNIT_TEST( getterSetterByArray );
     CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -26,10 +27,11 @@ public:
     void setUp();
     void tearDown();
 
-    void methode1();
-    void methode2();
+    void getterSetterByCoef();
+    void getterSetterByArray();
 };
 
 } //namespace ut
 } //namespace fwData
-#endif //__FWDATA_UT_TRANSFORMATION3DMATRIXTEST_HPP__
+
+#endif //__FWDATA_UT_TRANSFORMATIONMATRIX3DTEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/include/VideoTest.hpp b/SrcLib/core/fwData/test/tu/include/VideoTest.hpp
deleted file mode 100644
index 886cc73..0000000
--- a/SrcLib/core/fwData/test/tu/include/VideoTest.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_UT_VIDEOTEST_HPP__
-#define __FWDATA_UT_VIDEOTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace fwData
-{
-namespace ut
-{
-
-class VideoTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( VideoTest );
-    CPPUNIT_TEST( methode1 );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void methode1();
-};
-
-} //namespace ut
-} //namespace fwData
-#endif //__FWDATA_UT_VIDEOTEST_HPP__
diff --git a/SrcLib/core/fwData/test/tu/src/ArrayTest.cpp b/SrcLib/core/fwData/test/tu/src/ArrayTest.cpp
index d65804b..6bd53c7 100644
--- a/SrcLib/core/fwData/test/tu/src/ArrayTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ArrayTest.cpp
@@ -1,20 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
-#include <boost/assign/std/vector.hpp>
-
-#include <fwData/Array.hpp>
-
-#include <fwComEd/helper/Array.hpp>
-
 #include "ArrayTest.hpp"
 
+#include <fwData/Array.hpp>
 
-using namespace boost::assign;
+#include <fwDataTools/helper/Array.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::ArrayTest );
@@ -44,7 +38,7 @@ void ArrayTest::tearDown()
 void ArrayTest::allocation()
 {
     ::fwData::Array::sptr array = ::fwData::Array::New();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
     CPPUNIT_ASSERT(array->empty());
     CPPUNIT_ASSERT(arrayHelper.getBuffer() == NULL);
@@ -52,8 +46,7 @@ void ArrayTest::allocation()
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(0), array->getSizeInBytes());
 
     const size_t NB_COMPONENT = 2;
-    ::fwData::Array::SizeType size;
-    size += 10,100;
+    ::fwData::Array::SizeType size = {10, 100};
 
     array->resize("uint32", size, NB_COMPONENT, true);
     CPPUNIT_ASSERT(arrayHelper.getBuffer() != NULL);
@@ -64,7 +57,10 @@ void ArrayTest::allocation()
     CPPUNIT_ASSERT_EQUAL(size[1], array->getSize()[1]);
     CPPUNIT_ASSERT_EQUAL(NB_COMPONENT, array->getNumberOfComponents());
     CPPUNIT_ASSERT_EQUAL(true, array->getIsBufferOwner());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(8)(80));
+    {
+        ::fwData::Array::OffsetType stride = {8, 80};
+        CPPUNIT_ASSERT(array->getStrides() == stride);
+    }
     CPPUNIT_ASSERT(array->getType().string() == "uint32");
     CPPUNIT_ASSERT(array->getType().sizeOf() == 4);
 
@@ -74,9 +70,9 @@ void ArrayTest::allocation()
     CPPUNIT_ASSERT(  array->empty() );
     CPPUNIT_ASSERT(  arrayHelper.getBuffer() == NULL );
 
-    char *buffer = new char[1000];
+    char* buffer = new char[1000];
 
-    for (int i=0 ; i<1000; i++)
+    for (int i = 0; i<1000; i++)
     {
         buffer[i] = i;
     }
@@ -86,16 +82,19 @@ void ArrayTest::allocation()
 
     arrayHelper.setBuffer(buffer, false, ::fwTools::Type::create("uint8"), size, 1);
 
-    CPPUNIT_ASSERT_EQUAL(  (size_t)1, array->getBufferOffset(list_of(1)(0), 0, 4));
+    CPPUNIT_ASSERT_EQUAL(  (size_t)1, array->getBufferOffset({1, 0}, 0, 4));
     CPPUNIT_ASSERT_EQUAL(  (size_t)1, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)1*10*100, array->getSizeInBytes());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(1)(10));
-    CPPUNIT_ASSERT_EQUAL(  buffer[0], *(arrayHelper.getItem< char >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  buffer[10], *(arrayHelper.getItem< char >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL(  buffer[999], *(arrayHelper.getItem< char >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL(  buffer[326], *(arrayHelper.getItem< char >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL(  buffer[947], *(arrayHelper.getItem< char >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL(  buffer[238], *(arrayHelper.getItem< char >(list_of(8)(23))));
+    {
+        ::fwData::Array::OffsetType stride = {1, 10};
+        CPPUNIT_ASSERT(array->getStrides() == stride);
+    }
+    CPPUNIT_ASSERT_EQUAL(  buffer[0], *(arrayHelper.getItem< char >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  buffer[10], *(arrayHelper.getItem< char >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL(  buffer[999], *(arrayHelper.getItem< char >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL(  buffer[326], *(arrayHelper.getItem< char >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL(  buffer[947], *(arrayHelper.getItem< char >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL(  buffer[238], *(arrayHelper.getItem< char >({8, 23})));
     CPPUNIT_ASSERT_EQUAL(false, array->getIsBufferOwner());
 
     array->clear();
@@ -108,11 +107,10 @@ void ArrayTest::allocation()
 void ArrayTest::resize()
 {
     ::fwData::Array::sptr array = ::fwData::Array::New();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
     const size_t NB_COMPONENT = 1;
-    ::fwData::Array::SizeType size;
-    size += 10,100;
+    ::fwData::Array::SizeType size {10, 100};
 
     array->resize("uint32", size, NB_COMPONENT, true);
 
@@ -120,83 +118,97 @@ void ArrayTest::resize()
     // CPPUNIT_ASSERT(array->begin<unsigned int>() != NULL);
 
     unsigned int count = 0;
-    unsigned int *iter = arrayHelper.begin<unsigned int>();
+    unsigned int* iter = arrayHelper.begin<unsigned int>();
 
     // CPPUNIT_ASSERT(iter != NULL);
-    for (; iter != arrayHelper.end<unsigned int>() ; ++iter)
+    for (; iter != arrayHelper.end<unsigned int>(); ++iter)
     {
         *iter = count++;
     }
 
-    CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getBufferOffset(list_of(1)(0), 0, 4));
+    CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getBufferOffset({1, 0}, 0, 4));
     CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4*10*100, array->getSizeInBytes());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(4)(40));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(8)(23))));
+    {
+        ::fwData::Array::OffsetType stride = {4, 40};
+        CPPUNIT_ASSERT(array->getStrides() == stride);
+    }
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({8, 23})));
 
-    ::fwData::Array::SizeType newSize;
-    newSize += 100,10;
+    ::fwData::Array::SizeType newSize = {100,10};
 
     array->resize(newSize);
     CPPUNIT_ASSERT(newSize == array->getSize());
-    CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getBufferOffset(list_of(1)(0), 0, 4));
+    CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getBufferOffset({1, 0}, 0, 4));
     CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getElementSizeInBytes());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(4)(400));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(10)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(99)(9))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(26)(3))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(47)(9))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(38)(2))));
+    {
+        ::fwData::Array::OffsetType stride = {4, 400};
+        CPPUNIT_ASSERT(array->getStrides() == stride);
+    }
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({10, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({99, 9})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({26, 3})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({47, 9})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({38, 2})));
 
     newSize.clear();
-    newSize += 25,40;
+    newSize = {25,40};
 
     array->resize(newSize);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getElementSizeInBytes());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(4)(100));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(10)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(24)(39))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(1)(13))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(22)(37))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(13)(9))));
+    {
+        ::fwData::Array::OffsetType stride = {4, 100};
+        CPPUNIT_ASSERT(array->getStrides() == stride);
+    }
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({10, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({24, 39})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({1, 13})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({22, 37})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({13, 9})));
 
     newSize.clear();
-    newSize += 100;
+    newSize = {100};
 
     const size_t nbComponant = 10;
     array->resize(newSize, nbComponant, false);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)40, array->getElementSizeInBytes());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(40));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0), 0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(0), 10)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(99), 9)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(32), 6)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(94), 7)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(23), 8)));
+    {
+        ::fwData::Array::OffsetType stride = {40};
+        CPPUNIT_ASSERT(array->getStrides() == stride);
+    }
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0}, 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({0}, 10)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({99}, 9)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({32}, 6)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({94}, 7)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({23}, 8)));
 
     newSize.clear();
-    newSize += 10, 100;
+    newSize = {10, 100};
 
     array->resize("uint16", newSize, 2, false);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)2*100*10*2, array->getSizeInBytes());
-    CPPUNIT_ASSERT(array->getStrides() == list_of(4)(40) );
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(8)(23))));
+    {
+        ::fwData::Array::OffsetType stride = {4, 40};
+        CPPUNIT_ASSERT(array->getStrides() == stride );
+    }
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({8, 23})));
 }
 
 //-----------------------------------------------------------------------------
@@ -204,123 +216,121 @@ void ArrayTest::resize()
 void ArrayTest::reallocate()
 {
     ::fwData::Array::sptr array = ::fwData::Array::New();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
     const size_t NB_COMPONENT = 1;
-    ::fwData::Array::SizeType size;
-    size += 10,100;
+    ::fwData::Array::SizeType size = {10,100};
 
     array->resize("uint32", size, NB_COMPONENT, true);
     // CPPUNIT_ASSERT(array->getBuffer() != NULL);
     // CPPUNIT_ASSERT(array->begin<unsigned int>() != NULL);
 
     unsigned int count = 0;
-    unsigned int *iter = arrayHelper.begin<unsigned int>();
-    for (; iter != arrayHelper.end<unsigned int>() ; ++iter)
+    unsigned int* iter = arrayHelper.begin<unsigned int>();
+    for (; iter != arrayHelper.end<unsigned int>(); ++iter)
     {
         *iter = count++;
     }
     CPPUNIT_ASSERT_EQUAL(  (size_t)4*10*100, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(8)(23))));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({8, 23})));
 
-    ::fwData::Array::SizeType newSize;
-    newSize += 100,100;
+    ::fwData::Array::SizeType newSize = {100,100};
 
     array->resize(newSize, NB_COMPONENT, true);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4*100*100, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(10)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(99)(9))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(26)(3))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(47)(9))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(38)(2))));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({10, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({99, 9})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({26, 3})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({47, 9})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({38, 2})));
 
     unsigned int value = 1859;
-    arrayHelper.setItem(list_of(50)(90), &value);
-    CPPUNIT_ASSERT_EQUAL(  value, *(arrayHelper.getItem< unsigned int >(list_of(50)(90))));
+    arrayHelper.setItem({50, 90}, &value);
+    CPPUNIT_ASSERT_EQUAL(  value, *(arrayHelper.getItem< unsigned int >({50, 90})));
 
     unsigned int value2 = 25464;
-    arrayHelper.setItem(list_of(99)(99), &value2);
-    CPPUNIT_ASSERT_EQUAL(  value2, *(arrayHelper.getItem< unsigned int >(list_of(99)(99))));
+    arrayHelper.setItem({99, 99}, &value2);
+    CPPUNIT_ASSERT_EQUAL(  value2, *(arrayHelper.getItem< unsigned int >({99, 99})));
 
     array->resize("uint32", newSize, 2, true);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4*100*100*2, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0), 0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(5)(0), 0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(99)(4), 1)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(63)(1), 0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(73)(4), 1)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(19)(1), 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0}, 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({5, 0}, 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({99, 4}, 1)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({63, 1}, 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({73, 4}, 1)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({19, 1}, 0)));
 
-    CPPUNIT_ASSERT_EQUAL(  value, *(arrayHelper.getItem< unsigned int >(list_of(25)(45), 0)));
+    CPPUNIT_ASSERT_EQUAL(  value, *(arrayHelper.getItem< unsigned int >({25, 45}, 0)));
 
-    CPPUNIT_ASSERT_EQUAL(  value2, *(arrayHelper.getItem< unsigned int >(list_of(99)(49), 1)));
+    CPPUNIT_ASSERT_EQUAL(  value2, *(arrayHelper.getItem< unsigned int >({99, 49}, 1)));
 
     unsigned int value3 = 45643;
-    arrayHelper.setItem(list_of(35)(48), 0, &value3);
-    CPPUNIT_ASSERT_EQUAL(  value3, *(arrayHelper.getItem< unsigned int >(list_of(35)(48), 0)));
+    arrayHelper.setItem({35, 48}, 0, &value3);
+    CPPUNIT_ASSERT_EQUAL(  value3, *(arrayHelper.getItem< unsigned int >({35, 48}, 0)));
 
     unsigned int value4 = 16165;
-    arrayHelper.setItem(list_of(99)(99), 1, &value4);
-    CPPUNIT_ASSERT_EQUAL(  value4, *(arrayHelper.getItem< unsigned int >(list_of(99)(99), 1)));
+    arrayHelper.setItem({99, 99}, 1, &value4);
+    CPPUNIT_ASSERT_EQUAL(  value4, *(arrayHelper.getItem< unsigned int >({99, 99}, 1)));
 
 
     newSize.clear();
-    newSize += 10, 100;
+    newSize = {10, 100};
 
     array->resize(newSize, NB_COMPONENT, true);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4*10*100, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(8)(23))));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({8, 23})));
 
     array->setNumberOfComponents(2);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)8, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)4*10*100*2, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(5)(0),0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >(list_of(9)(49), 1)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(3)(16), 0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >(list_of(3)(47), 1)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(9)(11), 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({5, 0},0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)999, *(arrayHelper.getItem< unsigned int >({9, 49}, 1)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({3, 16}, 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)947, *(arrayHelper.getItem< unsigned int >({3, 47}, 1)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({9, 11}, 0)));
 
     array->setType(::fwTools::Type::create("uint16"));
     CPPUNIT_ASSERT_EQUAL(  (size_t)2*2, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)2*10*100*2, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)0, *(arrayHelper.getItem< ::boost::uint16_t >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)10, *(arrayHelper.getItem< ::boost::uint16_t >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)999, *(arrayHelper.getItem< ::boost::uint16_t >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)326, *(arrayHelper.getItem< ::boost::uint16_t >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)947, *(arrayHelper.getItem< ::boost::uint16_t >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)238, *(arrayHelper.getItem< ::boost::uint16_t >(list_of(8)(23))));
+    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)0, *(arrayHelper.getItem< ::boost::uint16_t >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)10, *(arrayHelper.getItem< ::boost::uint16_t >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)999, *(arrayHelper.getItem< ::boost::uint16_t >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)326, *(arrayHelper.getItem< ::boost::uint16_t >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)947, *(arrayHelper.getItem< ::boost::uint16_t >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)238, *(arrayHelper.getItem< ::boost::uint16_t >({8, 23})));
 
     array->setNumberOfComponents(1);
     CPPUNIT_ASSERT(newSize == array->getSize());
     CPPUNIT_ASSERT_EQUAL(  (size_t)2, array->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  (size_t)2*10*100, array->getSizeInBytes());
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >(list_of(0)(2),0)));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >(list_of(2)(65))));
-    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >(list_of(6)(47), 0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)0, *(arrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)10, *(arrayHelper.getItem< unsigned int >({0, 2},0)));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)326, *(arrayHelper.getItem< unsigned int >({2, 65})));
+    CPPUNIT_ASSERT_EQUAL(  (unsigned int)238, *(arrayHelper.getItem< unsigned int >({6, 47}, 0)));
 
     ::boost::uint16_t val;
-    arrayHelper.getItem(list_of(2)(65), &val);
+    arrayHelper.getItem({2, 65}, &val);
     CPPUNIT_ASSERT_EQUAL(  (::boost::uint16_t)326, val);
 
-    char * charValue = arrayHelper.getBufferPtr(list_of(6)(47), 0, array->getType().sizeOf());
+    char* charValue = arrayHelper.getBufferPtr({6, 47}, 0, array->getType().sizeOf());
     CPPUNIT_ASSERT_EQUAL( (unsigned int)238, *(reinterpret_cast<unsigned int*>(charValue)));
 
     array->clear();
@@ -332,19 +342,18 @@ void ArrayTest::reallocate()
 void ArrayTest::copy()
 {
     ::fwData::Array::sptr array = ::fwData::Array::New();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
     const size_t NB_COMPONENT = 1;
-    ::fwData::Array::SizeType size;
-    size += 10,100;
+    ::fwData::Array::SizeType size = {10,100};
 
     array->resize("uint32", size, NB_COMPONENT, true);
     CPPUNIT_ASSERT(arrayHelper.getBuffer() != NULL);
     CPPUNIT_ASSERT(arrayHelper.begin<unsigned int>() != NULL);
 
     unsigned int count = 0;
-    unsigned int *iter = arrayHelper.begin<unsigned int>();
-    for (; iter != arrayHelper.end<unsigned int>() ; ++iter)
+    unsigned int* iter = arrayHelper.begin<unsigned int>();
+    for (; iter != arrayHelper.end<unsigned int>(); ++iter)
     {
         *iter = count++;
     }
@@ -353,21 +362,28 @@ void ArrayTest::copy()
     ::fwData::Array::sptr deepCopyArray;
     deepCopyArray = ::fwData::Object::copy(array);
 
-    ::fwComEd::helper::Array deepCopyArrayHelper(deepCopyArray);
+    ::fwDataTools::helper::Array deepCopyArrayHelper(deepCopyArray);
 
     // check deepCopy
-    CPPUNIT_ASSERT_EQUAL(  array->getBufferOffset(list_of(1)(0), 0, 4), deepCopyArray->getBufferOffset(list_of(1)(0), 0, 4));
+    CPPUNIT_ASSERT_EQUAL(  array->getBufferOffset({1, 0}, 0, 4),
+                           deepCopyArray->getBufferOffset({1, 0}, 0, 4));
     CPPUNIT_ASSERT_EQUAL(  array->getElementSizeInBytes(), deepCopyArray->getElementSizeInBytes());
     CPPUNIT_ASSERT_EQUAL(  array->getSizeInBytes(), deepCopyArray->getSizeInBytes());
     CPPUNIT_ASSERT(array->getStrides() == deepCopyArray->getStrides());
     CPPUNIT_ASSERT(array->getSize() == deepCopyArray->getSize());
-    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >(list_of(0)(0))) , *(deepCopyArrayHelper.getItem< unsigned int >(list_of(0)(0))));
-    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >(list_of(0)(1))) , *(deepCopyArrayHelper.getItem< unsigned int >(list_of(0)(1))));
-    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >(list_of(9)(99))), *(deepCopyArrayHelper.getItem< unsigned int >(list_of(9)(99))));
-    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >(list_of(6)(32))), *(deepCopyArrayHelper.getItem< unsigned int >(list_of(6)(32))));
-    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >(list_of(7)(94))), *(deepCopyArrayHelper.getItem< unsigned int >(list_of(7)(94))));
-    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >(list_of(8)(23))), *(deepCopyArrayHelper.getItem< unsigned int >(list_of(8)(23))));
-    CPPUNIT_ASSERT_EQUAL( true , deepCopyArray->getIsBufferOwner());
+    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >({0, 0})),
+                          *(deepCopyArrayHelper.getItem< unsigned int >({0, 0})));
+    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >({0, 1})),
+                          *(deepCopyArrayHelper.getItem< unsigned int >({0, 1})));
+    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >({9, 99})),
+                          *(deepCopyArrayHelper.getItem< unsigned int >({9, 99})));
+    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >({6, 32})),
+                          *(deepCopyArrayHelper.getItem< unsigned int >({6, 32})));
+    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >({7, 94})),
+                          *(deepCopyArrayHelper.getItem< unsigned int >({7, 94})));
+    CPPUNIT_ASSERT_EQUAL( *(arrayHelper.getItem< unsigned int >({8, 23})),
+                          *(deepCopyArrayHelper.getItem< unsigned int >({8, 23})));
+    CPPUNIT_ASSERT_EQUAL( true, deepCopyArray->getIsBufferOwner());
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwData/test/tu/src/BooleanTest.cpp b/SrcLib/core/fwData/test/tu/src/BooleanTest.cpp
index 22ffb74..7949d06 100644
--- a/SrcLib/core/fwData/test/tu/src/BooleanTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/BooleanTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -29,17 +29,17 @@ void BooleanTest::tearDown()
 
 void BooleanTest::methode1()
 {
-    const bool TRUE_VALUE  = true ;
-    const bool FALSE_VALUE = ! TRUE_VALUE ;
+    const bool TRUE_VALUE  = true;
+    const bool FALSE_VALUE = !TRUE_VALUE;
 
     ::fwData::Boolean::sptr p1 = ::fwData::Boolean::New( TRUE_VALUE );
     ::fwData::Boolean::sptr p2 = ::fwData::Boolean::New( FALSE_VALUE );
 
     // check
-    CPPUNIT_ASSERT_EQUAL(TRUE_VALUE , ::fwData::Boolean::New( TRUE_VALUE )->value());
+    CPPUNIT_ASSERT_EQUAL(TRUE_VALUE, ::fwData::Boolean::New( TRUE_VALUE )->value());
     CPPUNIT_ASSERT_EQUAL(FALSE_VALUE, ::fwData::Boolean::New( FALSE_VALUE )->value());
 
-    CPPUNIT_ASSERT_EQUAL(TRUE_VALUE , p1->value());
+    CPPUNIT_ASSERT_EQUAL(TRUE_VALUE, p1->value());
     CPPUNIT_ASSERT_EQUAL(FALSE_VALUE, p2->value());
 
 }
diff --git a/SrcLib/core/fwData/test/tu/src/CameraTest.cpp b/SrcLib/core/fwData/test/tu/src/CameraTest.cpp
deleted file mode 100644
index b9324a8..0000000
--- a/SrcLib/core/fwData/test/tu/src/CameraTest.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <exception>
-#include <vector>
-#include <ostream>
-#include <map>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-#include <fwData/Camera.hpp>
-#include "CameraTest.hpp"
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::CameraTest );
-
-namespace fwData
-{
-namespace ut
-{
-
-void CameraTest::setUp()
-{
-    // Set up context before running a test.
-
-}
-void CameraTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-void CameraTest::methode1() //test des attributs
-{
-    //-----------test values
-    const double CX = 3.0;
-    const double CY = 2.0;
-    const double FX = 0.5;
-    const double FY = 1.3;
-
-    ::fwData::Camera::sptr camera = ::fwData::Camera::New();
-
-    camera->setCx(CX);
-    camera->setCy(CY);
-    camera->setFx(FX);
-    camera->setFy(FY);
-
-    CPPUNIT_ASSERT_EQUAL(camera->getCx(),  CX ) ;
-    CPPUNIT_ASSERT_EQUAL(camera->getCy(),  CY ) ;
-    CPPUNIT_ASSERT_EQUAL(camera->getFx(),  FX ) ;
-    CPPUNIT_ASSERT_EQUAL(camera->getFy(),  FY ) ;
-}
-
-} //namespace ut
-} //namespace fwData
diff --git a/SrcLib/core/fwData/test/tu/src/ColorTest.cpp b/SrcLib/core/fwData/test/tu/src/ColorTest.cpp
index 18100dd..924d001 100644
--- a/SrcLib/core/fwData/test/tu/src/ColorTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ColorTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -65,7 +65,7 @@ void ColorTest::methode2()
     array[2] = B;
     array[3] = A;
 
-    color->setCRefRGBA(array);
+    color->setRGBA(array);
 
     CPPUNIT_ASSERT_EQUAL(color->getRGBA()[0], R);
     CPPUNIT_ASSERT_EQUAL(color->getRGBA()[1], G);
diff --git a/SrcLib/core/fwData/test/tu/src/CompositeTest.cpp b/SrcLib/core/fwData/test/tu/src/CompositeTest.cpp
index 465a79a..da33090 100644
--- a/SrcLib/core/fwData/test/tu/src/CompositeTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/CompositeTest.cpp
@@ -1,11 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
-#include <boost/foreach.hpp>
+#include "CompositeTest.hpp"
 
 #include <fwData/Composite.hpp>
 #include <fwData/Boolean.hpp>
@@ -13,8 +12,7 @@
 #include <fwData/Integer.hpp>
 #include <fwData/String.hpp>
 
-#include "CompositeTest.hpp"
-
+#include <utility>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::CompositeTest );
@@ -38,11 +36,11 @@ void CompositeTest::methode1()
 {
     typedef ::fwData::Composite::value_type pair_type;
     const pair_type PAIRS[] = {
-        std::make_pair( "Composite"    , ::fwData::Composite::New()    ),
-        std::make_pair( "boolean true" , ::fwData::Boolean::New(true)  ),
+        std::make_pair( "Composite", ::fwData::Composite::New()    ),
+        std::make_pair( "boolean true", ::fwData::Boolean::New(true)  ),
         std::make_pair( "boolean false", ::fwData::Boolean::New(false) ),
-        std::make_pair( "float"        , ::fwData::Float::New(3.14f)   ),
-        std::make_pair( "integer"      , ::fwData::Integer::New(404)   )
+        std::make_pair( "float", ::fwData::Float::New(3.14f)   ),
+        std::make_pair( "integer", ::fwData::Integer::New(404)   )
     };
 
     ::fwData::Composite::ContainerType stdmap;
@@ -51,7 +49,7 @@ void CompositeTest::methode1()
 
     CPPUNIT_ASSERT( composite->size() == 0 );
 
-    BOOST_FOREACH( pair_type p, PAIRS)
+    for( pair_type p : PAIRS)
     {
         composite->getContainer()[p.first] = p.second;
     }
@@ -60,17 +58,17 @@ void CompositeTest::methode1()
 
     CPPUNIT_ASSERT( composite->size() == stdmap.size() );
 
-    BOOST_FOREACH( pair_type p, *composite)
+    for( pair_type p : *composite)
     {
         CPPUNIT_ASSERT( composite->getContainer()[p.first] == (*composite)[p.first] );
         CPPUNIT_ASSERT(                 stdmap[p.first] == (*composite)[p.first] );
     }
 
 
-    CPPUNIT_ASSERT_EQUAL( true ,  ::fwData::Boolean::dynamicCast((*composite)[ "boolean true" ])->value()  ) ;
-    CPPUNIT_ASSERT_EQUAL( false,  ::fwData::Boolean::dynamicCast((*composite)[ "boolean false" ])->value() ) ;
-    CPPUNIT_ASSERT_EQUAL( 3.14f ,   ::fwData::Float::dynamicCast((*composite)[ "float" ])->value()         ) ;
-    CPPUNIT_ASSERT_EQUAL( 404  ,  ::fwData::Integer::dynamicCast((*composite)[ "integer" ])->value()       ) ;
+    CPPUNIT_ASSERT_EQUAL( true,  ::fwData::Boolean::dynamicCast((*composite)[ "boolean true" ])->value()  );
+    CPPUNIT_ASSERT_EQUAL( false,  ::fwData::Boolean::dynamicCast((*composite)[ "boolean false" ])->value() );
+    CPPUNIT_ASSERT_EQUAL( 3.14f,   ::fwData::Float::dynamicCast((*composite)[ "float" ])->value()         );
+    CPPUNIT_ASSERT_EQUAL( 404,  ::fwData::Integer::dynamicCast((*composite)[ "integer" ])->value()       );
 
     //-----------test values
     const std::string STR = "toto";
diff --git a/SrcLib/core/fwData/test/tu/src/CopyTest.cpp b/SrcLib/core/fwData/test/tu/src/CopyTest.cpp
index ef98858..ced5835 100644
--- a/SrcLib/core/fwData/test/tu/src/CopyTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/CopyTest.cpp
@@ -1,15 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
-#include <boost/assign/std/vector.hpp>
-
 #include <fwData/Array.hpp>
 #include <fwData/Boolean.hpp>
-#include <fwData/Camera.hpp>
 #include <fwData/Color.hpp>
 #include <fwData/Composite.hpp>
 #include <fwData/Edge.hpp>
@@ -22,7 +18,6 @@
 #include <fwData/List.hpp>
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
-#include <fwData/Model.hpp>
 #include <fwData/Node.hpp>
 #include <fwData/Object.hpp>
 #include <fwData/Plane.hpp>
@@ -43,9 +38,7 @@
 #include <fwData/Tag.hpp>
 #include <fwData/TransferFunction.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
-#include <fwData/TriangularMesh.hpp>
 #include <fwData/Vector.hpp>
-#include <fwData/Video.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/MultiFiles.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -53,8 +46,6 @@
 #include "CopyTest.hpp"
 
 
-using namespace boost::assign;
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::CopyTest);
 
@@ -107,13 +98,10 @@ void CopyTest::fieldCopyTest()
     __FWDATA_UT_FIELD_COPY_MACRO(::fwData::String);
     __FWDATA_UT_FIELD_COPY_MACRO(::fwData::TransferFunction);
     __FWDATA_UT_FIELD_COPY_MACRO(::fwData::TransformationMatrix3D);
-    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::TriangularMesh);
     __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Vector);
 
 //Not implemented !?
-//    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Camera);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Edge);
-//    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Model);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Node);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Object);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Port);
@@ -124,7 +112,6 @@ void CopyTest::fieldCopyTest()
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::StructureTraits);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::StructureTraitsDictionary);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Tag);
-//    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::Video);
 //    __FWDATA_UT_FIELD_COPY_MACRO(::fwData::location::MultiFiles);
 
 }
@@ -133,7 +120,7 @@ void CopyTest::fieldCopyTest()
 
 void CopyTest::severalReferencesCopyTest()
 {
-    ::fwData::Integer::sptr integer = ::fwData::Integer::New(42);
+    ::fwData::Integer::sptr integer     = ::fwData::Integer::New(42);
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
 
     (*composite)["A"] = integer;
@@ -185,8 +172,8 @@ void CopyTest::severalReferencesCopyTest()
 void CopyTest::recursiveCopyTest()
 {
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-    ::fwData::Vector::sptr vector = ::fwData::Vector::New();
-    ::fwData::List::sptr list = ::fwData::List::New();
+    ::fwData::Vector::sptr vector       = ::fwData::Vector::New();
+    ::fwData::List::sptr list           = ::fwData::List::New();
 
     ::fwData::Composite::sptr compositeCopy;
     ::fwData::Vector::sptr vectorCopy;
@@ -252,8 +239,8 @@ void CopyTest::recursiveCopyTest()
 
 
     compositeCopy = ::fwData::Object::copy(composite);
-    vectorCopy = ::fwData::Object::copy(vector);
-    listCopy = ::fwData::Object::copy(list);
+    vectorCopy    = ::fwData::Object::copy(vector);
+    listCopy      = ::fwData::Object::copy(list);
 
 
 
@@ -283,8 +270,8 @@ void CopyTest::recursiveCopyTest()
 
     //composite->list->vector->composite
     {
-        ::fwData::List::sptr insideList = L((*compositeCopy)["A"]);
-        ::fwData::Vector::sptr insideVector = V(insideList->front());
+        ::fwData::List::sptr insideList           = L((*compositeCopy)["A"]);
+        ::fwData::Vector::sptr insideVector       = V(insideList->front());
         ::fwData::Composite::sptr insideComposite = C(insideVector->front());
 
         CPPUNIT_ASSERT_EQUAL(compositeCopy, insideComposite );
@@ -298,9 +285,9 @@ void CopyTest::recursiveCopyTest()
 
     //list->vector->composite->list
     {
-        ::fwData::Vector::sptr insideVector = V(listCopy->front());
+        ::fwData::Vector::sptr insideVector       = V(listCopy->front());
         ::fwData::Composite::sptr insideComposite = C(insideVector->front());
-        ::fwData::List::sptr insideList = L((*insideComposite)["A"]);
+        ::fwData::List::sptr insideList           = L((*insideComposite)["A"]);
 
         CPPUNIT_ASSERT_EQUAL(listCopy, insideList );
         CPPUNIT_ASSERT_EQUAL(insideVector, V(insideList->front()) );
@@ -313,8 +300,8 @@ void CopyTest::recursiveCopyTest()
     //vector->composite->list->vector
     {
         ::fwData::Composite::sptr insideComposite = C(vectorCopy->front());
-        ::fwData::List::sptr insideList = L((*insideComposite)["A"]);
-        ::fwData::Vector::sptr insideVector = V(insideList->front());
+        ::fwData::List::sptr insideList           = L((*insideComposite)["A"]);
+        ::fwData::Vector::sptr insideVector       = V(insideList->front());
 
         CPPUNIT_ASSERT_EQUAL(vectorCopy, insideVector );
         CPPUNIT_ASSERT_EQUAL(insideComposite, C(insideVector->front()) );
@@ -347,13 +334,13 @@ void CopyTest::recursiveCopyTest()
     compositeCopy = ::fwData::Object::copy(composite);
 
     {
-        ::fwData::List::sptr   insideList  = L((*compositeCopy)["A"]);
+        ::fwData::List::sptr insideList    = L((*compositeCopy)["A"]);
         ::fwData::Vector::sptr fieldVector = V(compositeCopy->getField("F1"));
 
         ::fwData::Composite::sptr insideComposite = C(fieldVector->front());
-        ::fwData::List::sptr fieldList = L(fieldVector->getField("F1"));
+        ::fwData::List::sptr fieldList            = L(fieldVector->getField("F1"));
 
-        ::fwData::Vector::sptr insideVector = V(fieldList->front());
+        ::fwData::Vector::sptr insideVector      = V(fieldList->front());
         ::fwData::Composite::sptr fieldComposite = C(fieldList->getField("F1"));
 
 
diff --git a/SrcLib/core/fwData/test/tu/src/EdgeTest.cpp b/SrcLib/core/fwData/test/tu/src/EdgeTest.cpp
index 0c5d4e0..e914508 100644
--- a/SrcLib/core/fwData/test/tu/src/EdgeTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/EdgeTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwData/test/tu/src/FloatTest.cpp b/SrcLib/core/fwData/test/tu/src/FloatTest.cpp
index 45b021e..990821d 100644
--- a/SrcLib/core/fwData/test/tu/src/FloatTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/FloatTest.cpp
@@ -1,16 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <boost/foreach.hpp>
-#include <limits>
+#include "FloatTest.hpp"
 
 #include <fwData/Float.hpp>
 
-#include "FloatTest.hpp"
+#include <limits>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::FloatTest );
@@ -33,16 +31,16 @@ void FloatTest::tearDown()
 
 void FloatTest::methode1()
 {
-    const float VALUES[]  = { -3.141592f, 0.f, 2.04f, 10, std::numeric_limits< float >::infinity() };
-    const float NAN_VALUES[]  = {
+    const float VALUES[]     = { -3.141592f, 0.f, 2.04f, 10, std::numeric_limits< float >::infinity() };
+    const float NAN_VALUES[] = {
         std::numeric_limits< float >::quiet_NaN(),
         std::numeric_limits< float >::signaling_NaN()
-    } ;
+    };
 
-    BOOST_FOREACH ( float VALUE, VALUES )
+    for( float VALUE : VALUES )
     {
         ::fwData::Float::sptr f0 = ::fwData::Float::New();
-        f0->value() = VALUE;
+        f0->value()              = VALUE;
         ::fwData::Float::sptr f1 = ::fwData::Float::New( VALUE );
 
         CPPUNIT_ASSERT_EQUAL( VALUE, f0->value() );
@@ -50,10 +48,10 @@ void FloatTest::methode1()
         CPPUNIT_ASSERT_EQUAL( VALUE, ::fwData::Float::New( VALUE )->value() );
     }
 
-    BOOST_FOREACH ( float VALUE, NAN_VALUES )
+    for( float VALUE : NAN_VALUES )
     {
         ::fwData::Float::sptr f0 = ::fwData::Float::New();
-        f0->value() = VALUE;
+        f0->value()              = VALUE;
         ::fwData::Float::sptr f1 = ::fwData::Float::New( VALUE );
 
         CPPUNIT_ASSERT( !( VALUE == f0->value() ) );
diff --git a/SrcLib/core/fwData/test/tu/src/GraphTest.cpp b/SrcLib/core/fwData/test/tu/src/GraphTest.cpp
index 5f4d3ae..8b675c0 100755
--- a/SrcLib/core/fwData/test/tu/src/GraphTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/GraphTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -120,28 +120,28 @@ void GraphTest::limitCase1()
     CPPUNIT_ASSERT_EQUAL( (size_t)0, g->getNbEdges() );
 
     success = g->addNode(n1);
-    CPPUNIT_ASSERT_EQUAL( success ,  true );
+    CPPUNIT_ASSERT_EQUAL( success,  true );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)0, g->getNbEdges() );
 
     success = g->addNode(n1);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)0, g->getNbEdges() );
 
     success = g->addNode(n2);
-    CPPUNIT_ASSERT_EQUAL( success ,  true );
+    CPPUNIT_ASSERT_EQUAL( success,  true );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)0, g->getNbEdges() );
 
 
     success = g->addEdge(e1,n1,n2);
-    CPPUNIT_ASSERT_EQUAL( success ,  true );
+    CPPUNIT_ASSERT_EQUAL( success,  true );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
     success = g->addEdge(e1,n1,n2);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
@@ -152,12 +152,12 @@ void GraphTest::limitCase1()
     n3->addOutputPort( p3 );
 
     success = g->addEdge(e1,n3,n2);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
     success = g->addEdge(e1,n1,n3);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
@@ -165,7 +165,7 @@ void GraphTest::limitCase1()
     e2->setIdentifiers("sizex","BADID");
 
     success = g->addEdge(e2,n1,n2);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
@@ -173,7 +173,7 @@ void GraphTest::limitCase1()
     e3->setIdentifiers("BADID","threshold");
 
     success = g->addEdge(e3,n1,n2);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
@@ -184,7 +184,7 @@ void GraphTest::limitCase1()
     n4->addInputPort( p4 );
 
     success = g->addNode( n4 );
-    CPPUNIT_ASSERT_EQUAL( success ,  true );
+    CPPUNIT_ASSERT_EQUAL( success,  true );
     CPPUNIT_ASSERT_EQUAL( (size_t)3, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
@@ -196,7 +196,7 @@ void GraphTest::limitCase1()
     e4->setIdentifiers("sizex","threshold");
 
     success = g->addEdge(e4,n1,n4);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)3, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 }
@@ -231,7 +231,7 @@ void GraphTest::limitCase2()
 
     bool success;
     success = g->removeNode(n1);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
@@ -240,7 +240,7 @@ void GraphTest::limitCase2()
 
 
     success = g->removeEdge(e2);
-    CPPUNIT_ASSERT_EQUAL( success ,  false );
+    CPPUNIT_ASSERT_EQUAL( success,  false );
     CPPUNIT_ASSERT_EQUAL( (size_t)2, g->getNbNodes() );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, g->getNbEdges() );
 
diff --git a/SrcLib/core/fwData/test/tu/src/ImageTest.cpp b/SrcLib/core/fwData/test/tu/src/ImageTest.cpp
index f2ca5c2..0f877a6 100644
--- a/SrcLib/core/fwData/test/tu/src/ImageTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ImageTest.cpp
@@ -1,24 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <exception>
-#include <vector>
-#include <ostream>
-#include <map>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
+#include "ImageTest.hpp"
 
 #include <fwData/Image.hpp>
 #include <fwData/Reconstruction.hpp>
 
-#include <fwComEd/helper/Image.hpp>
-#include <fwComEd/helper/Array.hpp>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include "ImageTest.hpp"
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+#include <exception>
+#include <iostream>
+#include <map>
+#include <ostream>
+#include <vector>
 
 
 // Registers the fixture into the 'registry'
@@ -47,16 +47,16 @@ void ImageTest::tearDown()
 
 void ImageTest::testGetterSetter()
 {
-    const size_t DIMENSION = 2 ;
-    ::fwTools::Type TYPE = ::fwTools::Type::create("int16")  ;
-    double CREFSPACING = 2.5 ;
-    std::vector<double> VECTORSPACING(DIMENSION, CREFSPACING) ;
-    double CREFORIGIN = 2.7 ;
-    std::vector<double> VECTORORIGIN(DIMENSION, CREFORIGIN)     ;
-    ::boost::int32_t CREFSIZE = 42 ;
-    ::fwData::Image::SizeType VECTORSIZE(DIMENSION, CREFSIZE)  ;
-    const double WINDOWCENTER = 10.10 ;
-    const double WINDOWWIDTH = 11.34 ;
+    const size_t DIMENSION = 2;
+    ::fwTools::Type TYPE = ::fwTools::Type::create("int16");
+    double CREFSPACING = 2.5;
+    std::vector<double> VECTORSPACING(DIMENSION, CREFSPACING);
+    double CREFORIGIN = 2.7;
+    std::vector<double> VECTORORIGIN(DIMENSION, CREFORIGIN);
+    ::boost::int32_t CREFSIZE = 42;
+    ::fwData::Image::SizeType VECTORSIZE(DIMENSION, CREFSIZE);
+    const double WINDOWCENTER = 10.10;
+    const double WINDOWWIDTH  = 11.34;
 
     // process
     ::fwData::Image::sptr img1 = ::fwData::Image::New();
@@ -89,9 +89,9 @@ void ImageTest::testGetterSetter()
 
 void ImageTest::testAllocation()
 {
-    const ::boost::uint8_t DIMENSION = 3 ;
-    ::fwTools::Type TYPE = ::fwTools::Type::create("int16")  ;
-    ::fwData::Image::SizeType VECTORSIZE(DIMENSION)  ;
+    const ::boost::uint8_t DIMENSION = 3;
+    ::fwTools::Type TYPE = ::fwTools::Type::create("int16");
+    ::fwData::Image::SizeType VECTORSIZE(DIMENSION);
     VECTORSIZE[0] = 14;
     VECTORSIZE[1] = 15;
     VECTORSIZE[2] = 26;
@@ -135,13 +135,13 @@ void ImageTest::testAllocation()
 
 void ImageTest::testReallocation()
 {
-    const ::boost::uint8_t DIMENSION = 3 ;
-    ::fwTools::Type TYPE1 = ::fwTools::Type::create("int16")  ;
-    ::fwTools::Type TYPE2 = ::fwTools::Type::create("int64")  ;
-    ::fwTools::Type TYPE3 = ::fwTools::Type::create("uint8")  ;
-    ::fwData::Image::SizeType VECTORSIZE1(DIMENSION, 10)  ;
-    ::fwData::Image::SizeType VECTORSIZE2(DIMENSION, 20)  ;
-    ::fwData::Image::SizeType VECTORSIZE3(DIMENSION, 5)  ;
+    const ::boost::uint8_t DIMENSION = 3;
+    ::fwTools::Type TYPE1 = ::fwTools::Type::create("int16");
+    ::fwTools::Type TYPE2 = ::fwTools::Type::create("int64");
+    ::fwTools::Type TYPE3 = ::fwTools::Type::create("uint8");
+    ::fwData::Image::SizeType VECTORSIZE1(DIMENSION, 10);
+    ::fwData::Image::SizeType VECTORSIZE2(DIMENSION, 20);
+    ::fwData::Image::SizeType VECTORSIZE3(DIMENSION, 5);
     size_t SIZE1 = 10*10*10*TYPE1.sizeOf();
     size_t SIZE2 = 20*20*20*TYPE2.sizeOf();
     size_t SIZE3 = 5*5*5*TYPE3.sizeOf();
@@ -214,11 +214,11 @@ void ImageTest::testPixelType()
 void ImageTest::testSetGetPixel()
 {
     ::fwData::Image::sptr img = ::fwData::Image::New();
-    ::fwComEd::helper::Image imgHelper(img);
+    ::fwDataTools::helper::Image imgHelper(img);
 
-    const ::boost::uint8_t DIMENSION = 3 ;
-    ::fwTools::Type TYPE = ::fwTools::Type::create("int16")  ;
-    ::fwData::Image::SizeType VECTORSIZE(DIMENSION)  ;
+    const ::boost::uint8_t DIMENSION = 3;
+    ::fwTools::Type TYPE = ::fwTools::Type::create("int16");
+    ::fwData::Image::SizeType VECTORSIZE(DIMENSION);
     VECTORSIZE[0] = 10;
     VECTORSIZE[1] = 20;
     VECTORSIZE[2] = 30;
@@ -226,27 +226,28 @@ void ImageTest::testSetGetPixel()
     img->allocate(VECTORSIZE, TYPE);
 
     ::fwData::Array::sptr array = img->getDataArray();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
     // test 1 : use getPixelBuffer
     short count = 0;
-    short *iter = arrayHelper.begin<short>();
-    for (; iter != arrayHelper.end<short>() ; ++iter)
+    short* iter = arrayHelper.begin<short>();
+    for (; iter != arrayHelper.end<short>(); ++iter)
     {
         *iter = count++;
     }
 
-    for (unsigned int x=0 ; x<VECTORSIZE[0] ; ++x)
+    for (unsigned int x = 0; x<VECTORSIZE[0]; ++x)
     {
-        for (unsigned int y=0 ; y<VECTORSIZE[1] ; ++y)
+        for (unsigned int y = 0; y<VECTORSIZE[1]; ++y)
         {
-            for (unsigned int z=0 ; z<VECTORSIZE[2] ; ++z)
+            for (unsigned int z = 0; z<VECTORSIZE[2]; ++z)
             {
                 short val = static_cast<short>(x+y*VECTORSIZE[0]+z*VECTORSIZE[0]*VECTORSIZE[1]);
                 ::fwData::Image::IndexType index = val;
                 CPPUNIT_ASSERT_EQUAL(val, *reinterpret_cast<short*>(imgHelper.getPixelBuffer(x,y,z)));
                 CPPUNIT_ASSERT_EQUAL(val, *reinterpret_cast<short*>(imgHelper.getPixelBuffer(index)));
-                ::fwData::Image::BufferType* buffer = reinterpret_cast< ::fwData::Image::BufferType* >(imgHelper.getBuffer());
+                ::fwData::Image::BufferType* buffer =
+                    reinterpret_cast< ::fwData::Image::BufferType* >(imgHelper.getBuffer());
                 CPPUNIT_ASSERT_EQUAL(val, *reinterpret_cast<short*>(imgHelper.getPixelBuffer(index)));
 
                 std::stringstream ss;
@@ -257,11 +258,11 @@ void ImageTest::testSetGetPixel()
     }
 
     // test 2 : use setPixelBuffer
-    for (unsigned int x=0 ; x<VECTORSIZE[0] ; ++x)
+    for (unsigned int x = 0; x<VECTORSIZE[0]; ++x)
     {
-        for (unsigned int y=0 ; y<VECTORSIZE[1] ; ++y)
+        for (unsigned int y = 0; y<VECTORSIZE[1]; ++y)
         {
-            for (unsigned int z=0 ; z<VECTORSIZE[2] ; ++z)
+            for (unsigned int z = 0; z<VECTORSIZE[2]; ++z)
             {
                 ::fwData::Image::IndexType index = x+y*VECTORSIZE[0]+z*VECTORSIZE[0]*VECTORSIZE[1];
                 short val = static_cast<short>(index * 2);
@@ -271,8 +272,8 @@ void ImageTest::testSetGetPixel()
     }
 
     count = 0;
-    iter = arrayHelper.begin<short>();
-    for (; iter != arrayHelper.end<short>() ; ++iter)
+    iter  = arrayHelper.begin<short>();
+    for (; iter != arrayHelper.end<short>(); ++iter)
     {
         CPPUNIT_ASSERT_EQUAL(static_cast<short>(count++ *2), *iter);
     }
diff --git a/SrcLib/core/fwData/test/tu/src/IntegerTest.cpp b/SrcLib/core/fwData/test/tu/src/IntegerTest.cpp
index 209ee10..7054054 100644
--- a/SrcLib/core/fwData/test/tu/src/IntegerTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/IntegerTest.cpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <limits>
+#include "IntegerTest.hpp"
 
 #include <fwData/Integer.hpp>
 
-#include "IntegerTest.hpp"
+#include <limits>
 
 
 // Registers the fixture into the 'registry'
@@ -32,21 +31,21 @@ void IntegerTest::tearDown()
 
 void IntegerTest::methode1()
 {
-    const int VALUES[]  = {
+    const int VALUES[] = {
         std::numeric_limits< int >::min(),
         -1654, 0, 123456,
         std::numeric_limits< int >::max()
     };
 
-    BOOST_FOREACH ( int VALUE, VALUES )
+    for ( int VALUE : VALUES )
     {
         ::fwData::Integer::sptr i0 = ::fwData::Integer::New();
-        i0->value() = VALUE;
+        i0->value()                = VALUE;
         ::fwData::Integer::sptr i1 = ::fwData::Integer::New( VALUE );
 
-        CPPUNIT_ASSERT_EQUAL( VALUE , i0->value() );
-        CPPUNIT_ASSERT_EQUAL( VALUE , i1->value() );
-        CPPUNIT_ASSERT_EQUAL( VALUE , ::fwData::Integer::New( VALUE )->value() );
+        CPPUNIT_ASSERT_EQUAL( VALUE, i0->value() );
+        CPPUNIT_ASSERT_EQUAL( VALUE, i1->value() );
+        CPPUNIT_ASSERT_EQUAL( VALUE, ::fwData::Integer::New( VALUE )->value() );
     }
 }
 
diff --git a/SrcLib/core/fwData/test/tu/src/IsTypeOfTest.cpp b/SrcLib/core/fwData/test/tu/src/IsTypeOfTest.cpp
index b529dd6..260a41b 100644
--- a/SrcLib/core/fwData/test/tu/src/IsTypeOfTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/IsTypeOfTest.cpp
@@ -1,11 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
-#include <boost/foreach.hpp>
+#include "IsTypeOfTest.hpp"
 
 #include <fwData/Composite.hpp>
 #include <fwData/Boolean.hpp>
@@ -14,7 +13,7 @@
 #include <fwData/Image.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include "IsTypeOfTest.hpp"
+#include <utility>
 
 
 // Registers the fixture into the 'registry'
@@ -37,11 +36,11 @@ void IsTypeOfTest::tearDown()
 
 void IsTypeOfTest::methode1()
 {
-    ::fwData::Composite::sptr dataComposite = ::fwData::Composite::New();
-    ::fwData::Boolean::sptr dataBoolean = ::fwData::Boolean::New();
-    ::fwData::Float::sptr dataFloat = ::fwData::Float::New();
-    ::fwData::Integer::sptr dataInteger = ::fwData::Integer::New();
-    ::fwData::Image::sptr dataImage = ::fwData::Image::New();
+    ::fwData::Composite::sptr dataComposite               = ::fwData::Composite::New();
+    ::fwData::Boolean::sptr dataBoolean                   = ::fwData::Boolean::New();
+    ::fwData::Float::sptr dataFloat                       = ::fwData::Float::New();
+    ::fwData::Integer::sptr dataInteger                   = ::fwData::Integer::New();
+    ::fwData::Image::sptr dataImage                       = ::fwData::Image::New();
     ::fwData::TransferFunction::sptr dataTransferFunction = ::fwData::TransferFunction::New();
 
     ::fwData::Composite::isTypeOf         ( "::fwData::Object" );
@@ -58,40 +57,40 @@ void IsTypeOfTest::methode1()
     ::fwData::Image::isTypeOf             ( "::fwData::Image"             );
     ::fwData::TransferFunction::isTypeOf  ( "::fwData::TransferFunction"  );
 
-    CPPUNIT_ASSERT( dataComposite        ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( dataBoolean          ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( dataFloat            ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( dataInteger          ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( dataImage            ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( dataTransferFunction ->isA("::fwData::Object") );
-
-    CPPUNIT_ASSERT( dataComposite        ->isA("::fwData::Composite") );
-    CPPUNIT_ASSERT( dataBoolean          ->isA("::fwData::Boolean") );
-    CPPUNIT_ASSERT( dataFloat            ->isA("::fwData::Float") );
-    CPPUNIT_ASSERT( dataInteger          ->isA("::fwData::Integer") );
-    CPPUNIT_ASSERT( dataImage            ->isA("::fwData::Image") );
-    CPPUNIT_ASSERT( dataTransferFunction ->isA("::fwData::TransferFunction") );
-
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataComposite)        ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataBoolean)          ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataFloat)            ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataInteger)          ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataImage)            ->isA("::fwData::Object") );
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataTransferFunction) ->isA("::fwData::Object") );
-
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataComposite         )->isA( "::fwData::Composite"         ) ) ;
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataBoolean           )->isA( "::fwData::Boolean"           ) ) ;
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataFloat             )->isA( "::fwData::Float"             ) ) ;
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataInteger           )->isA( "::fwData::Integer"           ) ) ;
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataImage             )->isA( "::fwData::Image"             ) ) ;
-    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataTransferFunction  )->isA( "::fwData::TransferFunction"  ) ) ;
-
-    CPPUNIT_ASSERT( ! dataComposite        ->isA("::fwData::Image") );
-    CPPUNIT_ASSERT( ! dataBoolean          ->isA("::fwData::Image") );
-    CPPUNIT_ASSERT( ! dataFloat            ->isA("::fwData::Image") );
-    CPPUNIT_ASSERT( ! dataInteger          ->isA("::fwData::Image") );
-    CPPUNIT_ASSERT( ! dataImage            ->isA("::fwData::Boolean") );
-    CPPUNIT_ASSERT( ! dataTransferFunction ->isA("::fwData::Image") );
+    CPPUNIT_ASSERT( dataComposite->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( dataBoolean->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( dataFloat->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( dataInteger->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( dataImage->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( dataTransferFunction->isA("::fwData::Object") );
+
+    CPPUNIT_ASSERT( dataComposite->isA("::fwData::Composite") );
+    CPPUNIT_ASSERT( dataBoolean->isA("::fwData::Boolean") );
+    CPPUNIT_ASSERT( dataFloat->isA("::fwData::Float") );
+    CPPUNIT_ASSERT( dataInteger->isA("::fwData::Integer") );
+    CPPUNIT_ASSERT( dataImage->isA("::fwData::Image") );
+    CPPUNIT_ASSERT( dataTransferFunction->isA("::fwData::TransferFunction") );
+
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataComposite)->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataBoolean)->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataFloat)->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataInteger)->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataImage)->isA("::fwData::Object") );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast(dataTransferFunction)->isA("::fwData::Object") );
+
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataComposite         )->isA( "::fwData::Composite"         ) );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataBoolean           )->isA( "::fwData::Boolean"           ) );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataFloat             )->isA( "::fwData::Float"             ) );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataInteger           )->isA( "::fwData::Integer"           ) );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataImage             )->isA( "::fwData::Image"             ) );
+    CPPUNIT_ASSERT( ::fwData::Object::dynamicCast( dataTransferFunction  )->isA( "::fwData::TransferFunction"  ) );
+
+    CPPUNIT_ASSERT( !dataComposite->isA("::fwData::Image") );
+    CPPUNIT_ASSERT( !dataBoolean->isA("::fwData::Image") );
+    CPPUNIT_ASSERT( !dataFloat->isA("::fwData::Image") );
+    CPPUNIT_ASSERT( !dataInteger->isA("::fwData::Image") );
+    CPPUNIT_ASSERT( !dataImage->isA("::fwData::Boolean") );
+    CPPUNIT_ASSERT( !dataTransferFunction->isA("::fwData::Image") );
 }
 
 } //namespace ut
diff --git a/SrcLib/core/fwData/test/tu/src/MTLockTest.cpp b/SrcLib/core/fwData/test/tu/src/MTLockTest.cpp
index f50c1ec..678d0ae 100644
--- a/SrcLib/core/fwData/test/tu/src/MTLockTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/MTLockTest.cpp
@@ -1,12 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <boost/foreach.hpp>
-#include <boost/chrono/duration.hpp>
+#include "MTLockTest.hpp"
 
 #include <fwData/mt/ObjectReadLock.hpp>
 #include <fwData/mt/ObjectWriteLock.hpp>
@@ -14,7 +12,10 @@
 
 #include <fwTest/helper/Thread.hpp>
 
-#include "MTLockTest.hpp"
+#include <boost/bind.hpp>
+#include <boost/thread.hpp>
+#include <boost/chrono.hpp>
+#include <functional>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::MTLockTest );
@@ -44,7 +45,7 @@ void MTLockTest::tearDown()
 void MTLockTest::lockTest()
 {
 
-    ::fwTest::helper::Thread thread(::boost::bind(&MTLockTest::runLock, this));
+    ::fwTest::helper::Thread thread(std::bind(&MTLockTest::runLock, this));
 
     CPPUNIT_ASSERT(thread.timedJoin(2000));
 
@@ -92,8 +93,8 @@ void MTLockTest::runLock()
 
 void MTLockTest::multipleLockTest()
 {
-    ::fwTest::helper::Thread thread(::boost::bind(&MTLockTest::runMultipleLock1, this));
-    ::fwTest::helper::Thread thread2(::boost::bind(&MTLockTest::runMultipleLock2, this));
+    ::fwTest::helper::Thread thread(std::bind(&MTLockTest::runMultipleLock1, this));
+    ::fwTest::helper::Thread thread2(std::bind(&MTLockTest::runMultipleLock2, this));
 
     CPPUNIT_ASSERT(thread.timedJoin(2500));
     CPPUNIT_ASSERT(thread2.timedJoin(2500));
diff --git a/SrcLib/core/fwData/test/tu/src/MacrosTest.cpp b/SrcLib/core/fwData/test/tu/src/MacrosTest.cpp
deleted file mode 100644
index 16955c6..0000000
--- a/SrcLib/core/fwData/test/tu/src/MacrosTest.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vector>
-#include <sstream>
-#include <boost/foreach.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/function_types/result_type.hpp>
-#include <boost/function_types/function_type.hpp>
-#include <boost/function_types/member_function_pointer.hpp>
-
-#include <boost/typeof/typeof.hpp>
-
-#include <fwTools/random/Generator.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/macros.hpp>
-
-#include "MacrosTest.hpp"
-
-#define __FWDATA_UT_TEST_RETURN_TYPE(Func, ExpectedType)                                            \
-{                                                                                                   \
-    typedef BOOST_TYPEOF(&Func) F;                                                                  \
-    typedef ::boost::function_types::result_type< F >::type R;                                      \
-    typedef ::boost::is_same<ExpectedType, R >::type IsFuncOfExpectedType;                          \
-    std::stringstream ss;                                                                           \
-    ss << "Expected type : " << #ExpectedType << " (typeid: "                                       \
-            << typeid(ExpectedType).name() << "), got typeid: "                                     \
-            << ( ( ::boost::is_const< ::boost::remove_reference<R>::type >::value) ? " const " : "")\
-            << typeid(R).name()  << ( ( ::boost::is_reference<R>::value) ? " &" : "")               \
-            ;                                                                                       \
-    CPPUNIT_ASSERT_MESSAGE( ss.str(), IsFuncOfExpectedType::value );                                \
-}
-
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::MacrosTest );
-
-namespace fwData
-{
-namespace ut
-{
-
-class MyObjectTest
-{
-public:
-
-    typedef std::vector< float > VectFloatType;
-
-    fwDataGetSetMacro(ValInt, int)
-
-    fwDataGetSetCRefMacro(VectFloat, VectFloatType)
-
-    fwDataGetSetSptrMacro(Object, ::fwData::Object::sptr)
-
-    int m_attrValInt;
-    VectFloatType m_attrVectFloat;
-    ::fwData::Object::sptr m_attrObject;
-};
-
-void MacrosTest::setUp()
-{
-    // Set up context before running a test.
-
-}
-void MacrosTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-void MacrosTest::getterSetterTest()
-{
-    __FWDATA_UT_TEST_RETURN_TYPE(MyObjectTest::getValInt, int);
-    __FWDATA_UT_TEST_RETURN_TYPE(MyObjectTest::getVectFloat,  const MyObjectTest::VectFloatType &);
-    __FWDATA_UT_TEST_RETURN_TYPE(MyObjectTest::getObject, ::fwData::Object::sptr);
-
-    int valInt = ::fwTools::random::getValue(-100, 100);
-    MyObjectTest::VectFloatType vectFloat(100, 0);
-    ::fwTools::random::fillContainer(0.f, 100.f, vectFloat);
-    ::fwData::Object::sptr object = ::fwData::Float::New();
-
-    MyObjectTest objTest;
-    objTest.setValInt(valInt);
-    objTest.setVectFloat(vectFloat);
-    objTest.setObject(object);
-
-    CPPUNIT_ASSERT_EQUAL(valInt, objTest.getValInt() );
-    CPPUNIT_ASSERT(vectFloat == objTest.getVectFloat() );
-    CPPUNIT_ASSERT_EQUAL(object, objTest.getObject() );
-}
-
-} //namespace ut
-} //namespace fwData
-
diff --git a/SrcLib/core/fwData/test/tu/src/MaterialTest.cpp b/SrcLib/core/fwData/test/tu/src/MaterialTest.cpp
index 9085fff..092d742 100644
--- a/SrcLib/core/fwData/test/tu/src/MaterialTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/MaterialTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwData/test/tu/src/MeshTest.cpp b/SrcLib/core/fwData/test/tu/src/MeshTest.cpp
index be15329..2f61d94 100644
--- a/SrcLib/core/fwData/test/tu/src/MeshTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/MeshTest.cpp
@@ -1,23 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
-#include <boost/assign/std/vector.hpp>
-#include <boost/cstdint.hpp>
+#include "MeshTest.hpp"
 
 #include <fwData/Mesh.hpp>
 #include <fwData/ObjectLock.hpp>
 
-#include <fwComEd/helper/Mesh.hpp>
-#include <fwComEd/helper/Array.hpp>
-
-#include "MeshTest.hpp"
-
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Mesh.hpp>
 
-using namespace boost::assign;
+#include <boost/cstdint.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::MeshTest );
@@ -44,8 +39,8 @@ void MeshTest::tearDown()
 void MeshTest::allocation()
 {
     ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
-    size_t pointSize = 3000;
-    size_t cellSize = 2000;
+    size_t pointSize    = 3000;
+    size_t cellSize     = 2000;
     size_t cellDataSize = 8000;
     mesh->allocate(pointSize, cellSize, cellDataSize);
     CPPUNIT_ASSERT_EQUAL(pointSize, mesh->getPointsArray()->getSize()[0]);
@@ -54,30 +49,35 @@ void MeshTest::allocation()
 
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(4), mesh->getPointsArray()->getType().sizeOf());
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), mesh->getPointsArray()->getNumberOfComponents());
-    size_t pointAllocatedSize = pointSize * mesh->getPointsArray()->getNumberOfComponents() * mesh->getPointsArray()->getType().sizeOf();
+    size_t pointAllocatedSize = pointSize * mesh->getPointsArray()->getNumberOfComponents() *
+                                mesh->getPointsArray()->getType().sizeOf();
     CPPUNIT_ASSERT_EQUAL(pointAllocatedSize, mesh->getPointsArray()->getSizeInBytes());
 
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(1), mesh->getCellTypesArray()->getType().sizeOf());
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), mesh->getCellTypesArray()->getNumberOfComponents());
-    size_t cellTypeAllocatedSize = cellSize * mesh->getCellTypesArray()->getNumberOfComponents() * mesh->getCellTypesArray()->getType().sizeOf();
+    size_t cellTypeAllocatedSize = cellSize * mesh->getCellTypesArray()->getNumberOfComponents() *
+                                   mesh->getCellTypesArray()->getType().sizeOf();
     CPPUNIT_ASSERT_EQUAL(cellTypeAllocatedSize, mesh->getCellTypesArray()->getSizeInBytes());
 
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(8), mesh->getCellDataOffsetsArray()->getType().sizeOf());
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), mesh->getCellDataOffsetsArray()->getNumberOfComponents());
-    size_t cellDataOffsetsAllocatedSize = cellSize * mesh->getCellDataOffsetsArray()->getNumberOfComponents() * mesh->getCellDataOffsetsArray()->getType().sizeOf();
+    size_t cellDataOffsetsAllocatedSize = cellSize * mesh->getCellDataOffsetsArray()->getNumberOfComponents() *
+                                          mesh->getCellDataOffsetsArray()->getType().sizeOf();
     CPPUNIT_ASSERT_EQUAL(cellDataOffsetsAllocatedSize, mesh->getCellDataOffsetsArray()->getSizeInBytes());
 
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(8), mesh->getCellDataArray()->getType().sizeOf());
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), mesh->getCellDataArray()->getNumberOfComponents());
-    size_t cellDataAllocatedSize = cellDataSize * mesh->getCellDataArray()->getNumberOfComponents() * mesh->getCellDataArray()->getType().sizeOf();
+    size_t cellDataAllocatedSize = cellDataSize * mesh->getCellDataArray()->getNumberOfComponents() *
+                                   mesh->getCellDataArray()->getType().sizeOf();
     CPPUNIT_ASSERT_EQUAL(cellDataAllocatedSize, mesh->getCellDataArray()->getSizeInBytes());
 
-    CPPUNIT_ASSERT_EQUAL(pointAllocatedSize + cellSize + cellDataOffsetsAllocatedSize + cellDataAllocatedSize , mesh->getAllocatedSizeInBytes());
+    CPPUNIT_ASSERT_EQUAL(pointAllocatedSize + cellSize + cellDataOffsetsAllocatedSize + cellDataAllocatedSize,
+                         mesh->getAllocatedSizeInBytes());
 
     CPPUNIT_ASSERT_EQUAL((::fwData::Mesh::Id) 0, mesh->getNumberOfPoints());
     CPPUNIT_ASSERT_EQUAL((::fwData::Mesh::Id) 0, mesh->getNumberOfCells());
 
-    ::fwComEd::helper::Mesh helper(mesh);
+    ::fwDataTools::helper::Mesh helper(mesh);
     helper.insertNextPoint(10, 20, 30);
     helper.insertNextPoint(10, 10, 10);
     helper.insertNextPoint(20, 20, 10);
@@ -90,30 +90,47 @@ void MeshTest::allocation()
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfPoints()), mesh->getPointNormalsArray()->getSize()[0]);
     mesh->allocatePointColors(::fwData::Mesh::RGB);
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfPoints()), mesh->getPointColorsArray()->getSize()[0]);
+    mesh->allocatePointTexCoords();
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfPoints()), mesh->getPointTexCoordsArray()->getSize()[0]);
 
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(4), mesh->getPointNormalsArray()->getType().sizeOf());
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), mesh->getPointNormalsArray()->getNumberOfComponents());
-    size_t pointNormalsAllocatedSize = mesh->getNumberOfPoints() * mesh->getPointNormalsArray()->getNumberOfComponents() * mesh->getPointNormalsArray()->getType().sizeOf();
+    CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(1), mesh->getPointColorsArray()->getType().sizeOf());
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(3), mesh->getPointColorsArray()->getNumberOfComponents());
+    CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(4), mesh->getPointTexCoordsArray()->getType().sizeOf());
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(2), mesh->getPointTexCoordsArray()->getNumberOfComponents());
+
+    size_t pointNormalsAllocatedSize = mesh->getNumberOfPoints() *
+                                       mesh->getPointNormalsArray()->getNumberOfComponents() *
+                                       mesh->getPointNormalsArray()->getType().sizeOf();
     CPPUNIT_ASSERT_EQUAL(pointNormalsAllocatedSize, mesh->getPointNormalsArray()->getSizeInBytes());
-
-    size_t pointColorsAllocatedSize = mesh->getNumberOfPoints() * mesh->getPointColorsArray()->getNumberOfComponents() * mesh->getPointColorsArray()->getType().sizeOf();
-    CPPUNIT_ASSERT_EQUAL(pointAllocatedSize + cellSize + cellDataOffsetsAllocatedSize + cellDataAllocatedSize + pointNormalsAllocatedSize + pointColorsAllocatedSize, mesh->getAllocatedSizeInBytes());
+    size_t pointColorsAllocatedSize = mesh->getNumberOfPoints() * mesh->getPointColorsArray()->getNumberOfComponents() *
+                                      mesh->getPointColorsArray()->getType().sizeOf();
+    CPPUNIT_ASSERT_EQUAL(pointColorsAllocatedSize, mesh->getPointColorsArray()->getSizeInBytes());
+    size_t pointTexCoordsAllocatedSize = mesh->getNumberOfPoints() *
+                                         mesh->getPointTexCoordsArray()->getNumberOfComponents() *
+                                         mesh->getPointTexCoordsArray()->getType().sizeOf();
+    CPPUNIT_ASSERT_EQUAL(pointTexCoordsAllocatedSize, mesh->getPointTexCoordsArray()->getSizeInBytes());
+    CPPUNIT_ASSERT_EQUAL(
+        pointAllocatedSize + cellSize + cellDataOffsetsAllocatedSize + cellDataAllocatedSize + pointNormalsAllocatedSize + pointColorsAllocatedSize + pointTexCoordsAllocatedSize,
+        mesh->getAllocatedSizeInBytes());
 
     mesh->allocateCellNormals();
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfCells()), mesh->getCellNormalsArray()->getSize()[0]);
     mesh->allocateCellColors(::fwData::Mesh::RGBA);
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfCells()), mesh->getCellColorsArray()->getSize()[0]);
+    mesh->allocateCellTexCoords();
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfCells()), mesh->getCellTexCoordsArray()->getSize()[0]);
 
     size_t oldsize = mesh->getAllocatedSizeInBytes();
-    bool adjusted = mesh->adjustAllocatedMemory();
+    bool adjusted  = mesh->adjustAllocatedMemory();
     size_t newSize = mesh->getAllocatedSizeInBytes();
     CPPUNIT_ASSERT_EQUAL(true, adjusted);
     CPPUNIT_ASSERT(oldsize > newSize);
 
     CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfPoints()), mesh->getPointsArray()->getSize()[0]);
-    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfPoints()), mesh->getPointsArray()->getSize()[0]);
-    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfCells()) , mesh->getCellTypesArray()->getSize()[0]);
-    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getCellDataSize()  ), mesh->getCellDataArray()->getSize()[0]);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getNumberOfCells()), mesh->getCellTypesArray()->getSize()[0]);
+    CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(mesh->getCellDataSize()), mesh->getCellDataArray()->getSize()[0]);
 
     mesh->clear();
     CPPUNIT_ASSERT_EQUAL((::fwData::Mesh::Id) 0, mesh->getNumberOfPoints());
@@ -121,15 +138,15 @@ void MeshTest::allocation()
     CPPUNIT_ASSERT_EQUAL((::fwData::Mesh::Id) 0, mesh->getCellDataSize());
     CPPUNIT_ASSERT_EQUAL((size_t) 0, mesh->getDataSizeInBytes());
 
-    ::fwData::Mesh::Id nbPoints = 300;
-    ::fwData::Mesh::Id nbCells = 200;
+    ::fwData::Mesh::Id nbPoints        = 300;
+    ::fwData::Mesh::Id nbCells         = 200;
     ::fwData::Mesh::Id newCellDataSize = 500;
     mesh->setNumberOfPoints(nbPoints);
     mesh->setNumberOfCells(nbCells);
     mesh->setCellDataSize(newCellDataSize);
-    oldsize = mesh->getAllocatedSizeInBytes();
+    oldsize  = mesh->getAllocatedSizeInBytes();
     adjusted = mesh->adjustAllocatedMemory();
-    newSize = mesh->getAllocatedSizeInBytes();
+    newSize  = mesh->getAllocatedSizeInBytes();
     CPPUNIT_ASSERT_EQUAL(true, adjusted);
     CPPUNIT_ASSERT(oldsize < newSize);
 
@@ -147,7 +164,7 @@ void MeshTest::allocation()
 void MeshTest::insertion()
 {
     ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
-    ::fwComEd::helper::Mesh helper(mesh);
+    ::fwDataTools::helper::Mesh helper(mesh);
     helper.insertNextPoint(10, 20, 30);
     helper.insertNextPoint(10, 10, 10);
     helper.insertNextPoint(20, 20, 10);
@@ -207,10 +224,10 @@ void MeshTest::insertion()
 
 
     ::fwData::Array::sptr array = mesh->getPointsArray();
-    ::fwComEd::helper::Array arrayHelper(array);
-    CPPUNIT_ASSERT_EQUAL(*(arrayHelper.getItem< ::fwData::Mesh::PointValueType >(list_of(4),0)), pointArray[4][0]);
-    CPPUNIT_ASSERT_EQUAL(*(arrayHelper.getItem< ::fwData::Mesh::PointValueType >(list_of(4),1)), pointArray[4][1]);
-    CPPUNIT_ASSERT_EQUAL(*(arrayHelper.getItem< ::fwData::Mesh::PointValueType >(list_of(4),2)), pointArray[4][2]);
+    ::fwDataTools::helper::Array arrayHelper(array);
+    CPPUNIT_ASSERT_EQUAL(*(arrayHelper.getItem< ::fwData::Mesh::PointValueType >({4},0)), pointArray[4][0]);
+    CPPUNIT_ASSERT_EQUAL(*(arrayHelper.getItem< ::fwData::Mesh::PointValueType >({4},1)), pointArray[4][1]);
+    CPPUNIT_ASSERT_EQUAL(*(arrayHelper.getItem< ::fwData::Mesh::PointValueType >({4},2)), pointArray[4][2]);
 }
 
 //-----------------------------------------------------------------------------
@@ -218,7 +235,7 @@ void MeshTest::insertion()
 void MeshTest::colorsNormals()
 {
     ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
-    ::fwComEd::helper::Mesh helper(mesh);
+    ::fwDataTools::helper::Mesh helper(mesh);
     helper.insertNextPoint(10, 20, 30);
     helper.insertNextPoint(10, 10, 10);
     helper.insertNextPoint(20, 20, 10);
@@ -246,9 +263,9 @@ void MeshTest::colorsNormals()
     ::fwData::Mesh::PointColorsMultiArrayType pointColorArray = helper.getPointColors();
 
     ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
-    for (int id=0 ; id< nbPoints ; id++)
+    for (int id = 0; id< nbPoints; id++)
     {
-        for (int c=0 ; c < 4 ; c++)
+        for (int c = 0; c < 4; c++)
         {
             pointColorArray[id][c] = id * 10 + c;
         }
@@ -267,9 +284,9 @@ void MeshTest::colorsNormals()
     ::fwData::Mesh::CellNormalsMultiArrayType cellNormalArray = helper.getCellNormals();
 
     ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
-    for (int id=0 ; id< nbCells ; id++)
+    for (int id = 0; id< nbCells; id++)
     {
-        for (int n=0 ; n < 3 ; n++)
+        for (int n = 0; n < 3; n++)
         {
             cellNormalArray[id][n] = id + n/10.f;
         }
@@ -286,24 +303,75 @@ void MeshTest::colorsNormals()
 
 //-----------------------------------------------------------------------------
 
+void MeshTest::texCoords()
+{
+    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+    ::fwDataTools::helper::Mesh helper(mesh);
+    helper.insertNextPoint(10, 20, 30);
+    helper.insertNextPoint(10, 10, 10);
+    helper.insertNextPoint(20, 20, 10);
+    helper.insertNextPoint(30, 30, 10);
+    helper.insertNextPoint(15, 20, 35);
+    helper.insertNextPoint(20, 20, 10);
+    helper.insertNextPoint(20, 63, 17);
+    helper.insertNextPoint(27, 83, 52);
+
+    helper.insertNextCell(1, 2);
+    helper.insertNextCell(1, 3, 4);
+    helper.insertNextCell(1, 2, 5, 4);
+
+    ::fwData::Mesh::CellValueType p[4] = {3, 6, 5, 1};
+    helper.insertNextCell(::fwData::Mesh::QUAD, p, 4);
+
+    ::fwData::Mesh::CellValueType p2[6] = {1, 3, 5, 7, 2, 6};
+    helper.insertNextCell(::fwData::Mesh::POLY, p2, 6);
+
+    ::fwData::Mesh::CellValueType p3[5] = {7, 2, 5, 4, 3};
+    helper.insertNextCell(::fwData::Mesh::POLY, p3, 5);
+
+    mesh->allocateCellTexCoords();
+    helper.updateLock();
+    ::fwData::Mesh::CellTexCoordsMultiArrayType cellTexCoordArray = helper.getCellTexCoords();
+
+    ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
+    for (int id = 0; id< nbCells; id++)
+    {
+        for (int n = 0; n < 2; n++)
+        {
+            cellTexCoordArray[id][n] = id + n/10.f;
+        }
+    }
+    CPPUNIT_ASSERT_EQUAL(0.0f, cellTexCoordArray[0][0]);
+    CPPUNIT_ASSERT_EQUAL(2.1f, cellTexCoordArray[2][1]);
+    CPPUNIT_ASSERT_EQUAL(4.1f, cellTexCoordArray[4][1]);
+    CPPUNIT_ASSERT_EQUAL(5.0f, cellTexCoordArray[5][0]);
+
+    ::fwData::Mesh::TexCoordValueType TexCoord[3] = {0.9f, 0.4f};
+    helper.setCellTexCoord(4, TexCoord);
+    CPPUNIT_ASSERT_EQUAL(0.9f, cellTexCoordArray[4][0]);
+    CPPUNIT_ASSERT_EQUAL(0.4f, cellTexCoordArray[4][1]);
+}
+
+//-----------------------------------------------------------------------------
+
 void MeshTest::addingArray()
 {
     ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
 
     ::fwData::Mesh::Id nbPoints = 60;
-    ::fwData::Mesh::Id nbCells = 20;
+    ::fwData::Mesh::Id nbCells  = 20;
 
     // Add point array
     ::fwData::Array::sptr pointArray = ::fwData::Array::New();
 
-    pointArray->resize(::fwTools::Type::create< ::fwData::Mesh::PointValueType >() , list_of(nbPoints), 3, true);
-    ::fwComEd::helper::Array pointArrayHelper(pointArray);
+    pointArray->resize(::fwTools::Type::create< ::fwData::Mesh::PointValueType >(), {nbPoints}, 3, true);
+    ::fwDataTools::helper::Array pointArrayHelper(pointArray);
 
     ::fwData::Mesh::PointValueType count = 0;
-    ::fwData::Mesh::PointValueType *iter = pointArrayHelper.begin< ::fwData::Mesh::PointValueType >();
-    for (; iter != pointArrayHelper.end< ::fwData::Mesh::PointValueType >() ; ++iter)
+    ::fwData::Mesh::PointValueType* iter = pointArrayHelper.begin< ::fwData::Mesh::PointValueType >();
+    for (; iter != pointArrayHelper.end< ::fwData::Mesh::PointValueType >(); ++iter)
     {
-        for (int i=0 ; i<3 ; i++)
+        for (int i = 0; i<3; i++)
         {
             *iter = count + i/10.0f;
         }
@@ -315,44 +383,47 @@ void MeshTest::addingArray()
 
     CPPUNIT_ASSERT_EQUAL(nbPoints, mesh->getNumberOfPoints());
 
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
     ::fwData::Mesh::Id id = meshHelper.insertNextPoint(50, 50, 50);
     CPPUNIT_ASSERT_EQUAL(nbPoints, id);
     nbPoints++;
     CPPUNIT_ASSERT_EQUAL(nbPoints, mesh->getNumberOfPoints());
 
     ::fwData::Mesh::PointsMultiArrayType pointMultiArray = meshHelper.getPoints();
-    CPPUNIT_ASSERT_EQUAL(*(pointArrayHelper.getItem< ::fwData::Mesh::PointValueType >(list_of(0),0)), pointMultiArray[0][0]);
-    CPPUNIT_ASSERT_EQUAL(*(pointArrayHelper.getItem< ::fwData::Mesh::PointValueType >(list_of(12),2)), pointMultiArray[12][2]);
-    CPPUNIT_ASSERT_EQUAL(*(pointArrayHelper.getItem< ::fwData::Mesh::PointValueType >(list_of(45),1)), pointMultiArray[45][1]);
+    CPPUNIT_ASSERT_EQUAL(*(pointArrayHelper.getItem< ::fwData::Mesh::PointValueType >({0},0)),
+                         pointMultiArray[0][0]);
+    CPPUNIT_ASSERT_EQUAL(*(pointArrayHelper.getItem< ::fwData::Mesh::PointValueType >({12},2)),
+                         pointMultiArray[12][2]);
+    CPPUNIT_ASSERT_EQUAL(*(pointArrayHelper.getItem< ::fwData::Mesh::PointValueType >({45},1)),
+                         pointMultiArray[45][1]);
 
 
     // add cells arrays
-    ::fwData::Array::sptr cellTypeArray = ::fwData::Array::New();
+    ::fwData::Array::sptr cellTypeArray       = ::fwData::Array::New();
     ::fwData::Array::sptr cellDataOffsetArray = ::fwData::Array::New();
-    ::fwData::Array::sptr cellDataArray = ::fwData::Array::New();
+    ::fwData::Array::sptr cellDataArray       = ::fwData::Array::New();
 
 
-    cellTypeArray->resize(::fwTools::Type::create< ::fwData::Mesh::CellTypes >() , list_of(nbCells), 1, true);
-    cellDataOffsetArray->resize(::fwTools::Type::create< ::fwData::Mesh::CellDataOffsetType >() , list_of(nbCells), 1, true);
-    cellDataArray->resize(::fwTools::Type::create< ::fwData::Mesh::CellValueType >() , list_of(nbCells*3), 1, true);
+    cellTypeArray->resize(::fwTools::Type::create< ::fwData::Mesh::CellTypes >(), {nbCells}, 1, true);
+    cellDataOffsetArray->resize(::fwTools::Type::create< ::fwData::Mesh::CellDataOffsetType >(), {nbCells}, 1, true);
+    cellDataArray->resize(::fwTools::Type::create< ::fwData::Mesh::CellValueType >(), {nbCells*3}, 1, true);
 
-    ::fwComEd::helper::Array cellTypeArrayHelper(cellTypeArray);
-    ::fwComEd::helper::Array cellDataOffsetArrayHelper(cellDataOffsetArray);
-    ::fwComEd::helper::Array cellDataArrayHelper(cellDataArray);
+    ::fwDataTools::helper::Array cellTypeArrayHelper(cellTypeArray);
+    ::fwDataTools::helper::Array cellDataOffsetArrayHelper(cellDataOffsetArray);
+    ::fwDataTools::helper::Array cellDataArrayHelper(cellDataArray);
 
     ::fwData::Mesh::CellValueType counter = 0;
-    for (int id = 0 ; id<nbCells ; id++)
+    for (int id = 0; id<nbCells; id++)
     {
         ::fwData::Mesh::CellTypes type = static_cast< ::fwData::Mesh::CellTypes >(::fwData::Mesh::TRIANGLE);
-        cellTypeArrayHelper.setItem(list_of(id), &type);
+        cellTypeArrayHelper.setItem({size_t(id)}, &type);
 
         ::fwData::Mesh::CellDataOffsetType offset = id*3;
-        cellDataOffsetArrayHelper.setItem(list_of(id), &offset);
+        cellDataOffsetArrayHelper.setItem({size_t(id)}, &offset);
 
         ::fwData::Mesh::CellValueType cell[3] = { counter, counter+1, counter+2 };
-        counter += 3;
-        cellDataArrayHelper.setItem(list_of(offset), &cell);
+        counter                              += 3;
+        cellDataArrayHelper.setItem({offset}, &cell);
     }
     mesh->setCellTypesArray(cellTypeArray);
     mesh->setCellDataOffsetsArray(cellDataOffsetArray);
@@ -367,34 +438,43 @@ void MeshTest::addingArray()
     CPPUNIT_ASSERT_EQUAL(nbCells, mesh->getNumberOfCells());
 
     ::fwData::Mesh::CellTypesMultiArrayType cellTypesMultiArray = meshHelper.getCellTypes();
-    CPPUNIT_ASSERT_EQUAL(*(cellTypeArrayHelper.getItem< ::fwData::Mesh::CellTypes >(list_of(0))) , cellTypesMultiArray[0]);
-    CPPUNIT_ASSERT_EQUAL(*(cellTypeArrayHelper.getItem< ::fwData::Mesh::CellTypes >(list_of(12))), cellTypesMultiArray[12]);
-    CPPUNIT_ASSERT_EQUAL(*(cellTypeArrayHelper.getItem< ::fwData::Mesh::CellTypes >(list_of(18))), cellTypesMultiArray[18]);
+    CPPUNIT_ASSERT_EQUAL(*(cellTypeArrayHelper.getItem< ::fwData::Mesh::CellTypes >({0})),
+                         cellTypesMultiArray[0]);
+    CPPUNIT_ASSERT_EQUAL(*(cellTypeArrayHelper.getItem< ::fwData::Mesh::CellTypes >({12})),
+                         cellTypesMultiArray[12]);
+    CPPUNIT_ASSERT_EQUAL(*(cellTypeArrayHelper.getItem< ::fwData::Mesh::CellTypes >({18})),
+                         cellTypesMultiArray[18]);
 
     ::fwData::Mesh::CellDataOffsetsMultiArrayType cellDataOffsetsMultiArray = meshHelper.getCellDataOffsets();
-    CPPUNIT_ASSERT_EQUAL(*(cellDataOffsetArrayHelper.getItem< ::fwData::Mesh::CellDataOffsetType >(list_of(0))) , cellDataOffsetsMultiArray[0]);
-    CPPUNIT_ASSERT_EQUAL(*(cellDataOffsetArrayHelper.getItem< ::fwData::Mesh::CellDataOffsetType >(list_of(12))), cellDataOffsetsMultiArray[12]);
-    CPPUNIT_ASSERT_EQUAL(*(cellDataOffsetArrayHelper.getItem< ::fwData::Mesh::CellDataOffsetType >(list_of(18))), cellDataOffsetsMultiArray[18]);
+    CPPUNIT_ASSERT_EQUAL(*(cellDataOffsetArrayHelper.getItem< ::fwData::Mesh::CellDataOffsetType >({0})),
+                         cellDataOffsetsMultiArray[0]);
+    CPPUNIT_ASSERT_EQUAL(*(cellDataOffsetArrayHelper.getItem< ::fwData::Mesh::CellDataOffsetType >({12})),
+                         cellDataOffsetsMultiArray[12]);
+    CPPUNIT_ASSERT_EQUAL(*(cellDataOffsetArrayHelper.getItem< ::fwData::Mesh::CellDataOffsetType >({18})),
+                         cellDataOffsetsMultiArray[18]);
 
 
-    ::fwData::Mesh::CellDataOffsetType offset0  = cellTypesMultiArray[0] ;
+    ::fwData::Mesh::CellDataOffsetType offset0  = cellTypesMultiArray[0];
     ::fwData::Mesh::CellDataOffsetType offset12 = cellTypesMultiArray[12];
     ::fwData::Mesh::CellDataOffsetType offset18 = cellTypesMultiArray[18];
 
     ::fwData::Mesh::CellDataMultiArrayType cellDataMultiArray = meshHelper.getCellData();
-    CPPUNIT_ASSERT_EQUAL(*(cellDataArrayHelper.getItem< ::fwData::Mesh::CellValueType >(list_of(offset0))) , cellDataMultiArray[offset0]);
-    CPPUNIT_ASSERT_EQUAL(*(cellDataArrayHelper.getItem< ::fwData::Mesh::CellValueType >(list_of(offset12))), cellDataMultiArray[offset12]);
-    CPPUNIT_ASSERT_EQUAL(*(cellDataArrayHelper.getItem< ::fwData::Mesh::CellValueType >(list_of(offset18))), cellDataMultiArray[offset18]);
+    CPPUNIT_ASSERT_EQUAL(*(cellDataArrayHelper.getItem< ::fwData::Mesh::CellValueType >({offset0})),
+                         cellDataMultiArray[offset0]);
+    CPPUNIT_ASSERT_EQUAL(*(cellDataArrayHelper.getItem< ::fwData::Mesh::CellValueType >({offset12})),
+                         cellDataMultiArray[offset12]);
+    CPPUNIT_ASSERT_EQUAL(*(cellDataArrayHelper.getItem< ::fwData::Mesh::CellValueType >({offset18})),
+                         cellDataMultiArray[offset18]);
 }
 
 //-----------------------------------------------------------------------------
 
 void MeshTest::copy()
 {
-    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+    ::fwData::Mesh::sptr mesh            = ::fwData::Mesh::New();
     ::fwData::Mesh::sptr shallowCopyMesh = ::fwData::Mesh::New();
 
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
 
     meshHelper.insertNextPoint(10, 20, 30);
     meshHelper.insertNextPoint(10, 10, 10);
@@ -419,30 +499,31 @@ void MeshTest::copy()
     meshHelper.insertNextCell(::fwData::Mesh::POLY, p3, 5);
 
     mesh->allocatePointColors(::fwData::Mesh::RGBA);
+    mesh->allocatePointTexCoords();
     meshHelper.updateLock();
-    ::fwData::Mesh::PointColorsMultiArrayType pointColorArray = meshHelper.getPointColors();
 
     // check deep copy
     ::fwData::Mesh::sptr deepCopyMesh;
     deepCopyMesh = ::fwData::Object::copy(mesh);
-    ::fwComEd::helper::Mesh deepCopyMeshHelper(deepCopyMesh);
+    ::fwDataTools::helper::Mesh deepCopyMeshHelper(deepCopyMesh);
 
     CPPUNIT_ASSERT_EQUAL(mesh->getNumberOfPoints(), deepCopyMesh->getNumberOfPoints());
-    CPPUNIT_ASSERT_EQUAL(mesh->getNumberOfCells() , deepCopyMesh->getNumberOfCells());
-    CPPUNIT_ASSERT_EQUAL(mesh->getCellDataSize()  , deepCopyMesh->getCellDataSize());
+    CPPUNIT_ASSERT_EQUAL(mesh->getNumberOfCells(), deepCopyMesh->getNumberOfCells());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellDataSize(), deepCopyMesh->getCellDataSize());
 
     CPPUNIT_ASSERT(mesh->getPointsArray()->getSize()          == deepCopyMesh->getPointsArray()->getSize());
     CPPUNIT_ASSERT(mesh->getCellTypesArray()->getSize()       == deepCopyMesh->getCellTypesArray()->getSize());
     CPPUNIT_ASSERT(mesh->getCellDataOffsetsArray()->getSize() == deepCopyMesh->getCellDataOffsetsArray()->getSize());
     CPPUNIT_ASSERT(mesh->getCellDataArray()->getSize()        == deepCopyMesh->getCellDataArray()->getSize());
     CPPUNIT_ASSERT(mesh->getPointColorsArray()->getSize()     == deepCopyMesh->getPointColorsArray()->getSize());
+    CPPUNIT_ASSERT(mesh->getPointTexCoordsArray()->getSize()  == deepCopyMesh->getPointTexCoordsArray()->getSize());
 
-    ::fwData::Mesh::PointsMultiArrayType meshPointArray = meshHelper.getPoints();
+    ::fwData::Mesh::PointsMultiArrayType meshPointArray         = meshHelper.getPoints();
     ::fwData::Mesh::PointsMultiArrayType deepCopyMeshPointArray = deepCopyMeshHelper.getPoints();
 
-    for (int i=0 ; i< mesh->getNumberOfPoints() ; i++)
+    for (int i = 0; i< mesh->getNumberOfPoints(); i++)
     {
-        for (int j=0 ; j < 3 ; j++)
+        for (int j = 0; j < 3; j++)
         {
             CPPUNIT_ASSERT_EQUAL(meshPointArray[i][j], deepCopyMeshPointArray[i][j]);
         }
@@ -451,17 +532,19 @@ void MeshTest::copy()
     //check shallow copy
     shallowCopyMesh->shallowCopy(mesh);
     CPPUNIT_ASSERT_EQUAL(mesh->getNumberOfPoints(), shallowCopyMesh->getNumberOfPoints());
-    CPPUNIT_ASSERT_EQUAL(mesh->getNumberOfCells() , shallowCopyMesh->getNumberOfCells());
-    CPPUNIT_ASSERT_EQUAL(mesh->getCellDataSize()  , shallowCopyMesh->getCellDataSize());
+    CPPUNIT_ASSERT_EQUAL(mesh->getNumberOfCells(), shallowCopyMesh->getNumberOfCells());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellDataSize(), shallowCopyMesh->getCellDataSize());
 
-    CPPUNIT_ASSERT_EQUAL(mesh->getPointsArray()         , shallowCopyMesh->getPointsArray());
-    CPPUNIT_ASSERT_EQUAL(mesh->getCellTypesArray()      , shallowCopyMesh->getCellTypesArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getPointsArray(), shallowCopyMesh->getPointsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellTypesArray(), shallowCopyMesh->getCellTypesArray());
     CPPUNIT_ASSERT_EQUAL(mesh->getCellDataOffsetsArray(), shallowCopyMesh->getCellDataOffsetsArray());
-    CPPUNIT_ASSERT_EQUAL(mesh->getCellDataArray()       , shallowCopyMesh->getCellDataArray());
-    CPPUNIT_ASSERT_EQUAL(mesh->getPointColorsArray()    , shallowCopyMesh->getPointColorsArray());
-    CPPUNIT_ASSERT_EQUAL(mesh->getPointNormalsArray()   , shallowCopyMesh->getPointNormalsArray());
-    CPPUNIT_ASSERT_EQUAL(mesh->getCellColorsArray()     , shallowCopyMesh->getCellColorsArray());
-    CPPUNIT_ASSERT_EQUAL(mesh->getCellNormalsArray()    , shallowCopyMesh->getCellNormalsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellDataArray(), shallowCopyMesh->getCellDataArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getPointColorsArray(), shallowCopyMesh->getPointColorsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getPointNormalsArray(), shallowCopyMesh->getPointNormalsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getPointTexCoordsArray(), shallowCopyMesh->getPointTexCoordsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellColorsArray(), shallowCopyMesh->getCellColorsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellNormalsArray(), shallowCopyMesh->getCellNormalsArray());
+    CPPUNIT_ASSERT_EQUAL(mesh->getCellTexCoordsArray(), shallowCopyMesh->getCellTexCoordsArray());
 }
 
 } //namespace ut
diff --git a/SrcLib/core/fwData/test/tu/src/ModelTest.cpp b/SrcLib/core/fwData/test/tu/src/ModelTest.cpp
deleted file mode 100644
index 93c2154..0000000
--- a/SrcLib/core/fwData/test/tu/src/ModelTest.cpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <exception>
-#include <vector>
-#include <ostream>
-#include <map>
-#include <boost/date_time/posix_time/posix_time.hpp>
-
-#include <fwData/Model.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Material.hpp>
-#include "ModelTest.hpp"
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::ModelTest );
-
-namespace fwData
-{
-namespace ut
-{
-
-void ModelTest::setUp()
-{
-    // Set up context before running a test.
-
-}
-void ModelTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-void ModelTest::methode1()
-{
-    //-----------test values
-    ::fwData::TriangularMesh::sptr tri = ::fwData::TriangularMesh::New();
-    ::fwData::Material::sptr mat = ::fwData::Material::New();
-
-    ::fwData::Model::sptr model = ::fwData::Model::New();
-
-    model->getRefMap()[tri] = mat;
-
-    CPPUNIT_ASSERT(model->getRefMap().find(tri) != model->getRefMap().end());
-    CPPUNIT_ASSERT_EQUAL(model->getRefMap()[tri], mat);
-}
-
-} //namespace ut
-} //namespace fwData
diff --git a/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp b/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp
index b6bca1b..ab57348 100644
--- a/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ObjectTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -42,7 +42,7 @@ void ObjectTest::fieldTest()
     const std::string FIELD_ID3 = "FIELD_ID3";
 
     ::fwData::Object::sptr nullobj;
-    ::fwData::Object::sptr obj = ::fwData::Float::New();
+    ::fwData::Object::sptr obj       = ::fwData::Float::New();
     ::fwData::Object::sptr fieldObj1 = ::fwData::Float::New();
     ::fwData::Object::sptr fieldObj2 = ::fwData::Float::New();
 
@@ -54,7 +54,7 @@ void ObjectTest::fieldTest()
     CPPUNIT_ASSERT_EQUAL(obj->getField(FIELD_ID2), nullobj);
     CPPUNIT_ASSERT_EQUAL(obj->getField(FIELD_ID3), nullobj);
 
-    ::fwData::Object::FieldMapType localFields = obj->getFields();
+    ::fwData::Object::FieldMapType localFields       = obj->getFields();
     ::fwData::Object::FieldMapType localFieldsBackup = obj->getFields();
     localFields.insert( ::fwData::Object::FieldMapType::value_type(FIELD_ID2,fieldObj2));
 
diff --git a/SrcLib/core/fwData/test/tu/src/PointListTest.cpp b/SrcLib/core/fwData/test/tu/src/PointListTest.cpp
new file mode 100644
index 0000000..e6ed3a6
--- /dev/null
+++ b/SrcLib/core/fwData/test/tu/src/PointListTest.cpp
@@ -0,0 +1,137 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwData/PointList.hpp>
+#include <fwData/Point.hpp>
+
+#include "PointListTest.hpp"
+
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::PointListTest );
+
+
+namespace fwData
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void PointListTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void PointListTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void PointListTest::copyTest()
+{
+    ::fwData::PointList::sptr pl1 = ::fwData::PointList::New();
+    ::fwData::PointList::sptr pl2 = ::fwData::PointList::New();
+    ::fwData::PointList::sptr pl3 = ::fwData::PointList::New();
+
+    ::fwData::Point::sptr point1 = ::fwData::Point::New(1.0f, 2.0f, 3.0f);
+
+    pl1->pushBack(point1);
+
+    CPPUNIT_ASSERT_NO_THROW( pl2->shallowCopy(pl1) );
+
+    CPPUNIT_ASSERT_EQUAL(pl1->getPoints()[0],pl2->getPoints()[0]);
+
+}
+
+//------------------------------------------------------------------------------
+
+void PointListTest::getterTest()
+{
+    ::fwData::PointList::sptr pl1 = ::fwData::PointList::New();
+    ::fwData::Point::sptr point1  = ::fwData::Point::New(1.0f, 2.0f, 3.0f);
+
+    pl1->pushBack(point1);
+
+    ::fwData::Point::sptr point2 = pl1->getPoints()[0];
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[0], point2->getCoord()[0], 10e-6);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[1], point2->getCoord()[1], 10e-6);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[2], point2->getCoord()[2], 10e-6);
+
+    ::fwData::PointList::PointListContainer & container = pl1->getRefPoints();
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[0], container[0]->getCoord()[0], 10e-6);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[1], container[0]->getCoord()[1], 10e-6);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[2], container[0]->getCoord()[2], 10e-6);
+
+    const ::fwData::PointList::PointListContainer & ccontainer = pl1->getCRefPoints();
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[0], ccontainer[0]->getCoord()[0], 10e-6);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[1], ccontainer[0]->getCoord()[1], 10e-6);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point1->getCoord()[2], ccontainer[0]->getCoord()[2], 10e-6);
+
+}
+
+//------------------------------------------------------------------------------
+
+void PointListTest::setterTest()
+{
+    ::fwData::PointList::sptr pl1 = ::fwData::PointList::New();
+    ::fwData::Point::sptr point1  = ::fwData::Point::New(1.0f, 2.0f, 3.0f);
+    ::fwData::Point::sptr point2  = ::fwData::Point::New(4.0f, 5.0f, 6.0f);
+
+    std::vector< ::fwData::Point::sptr > vec;
+    vec.push_back(point1);
+    vec.push_back(point2);
+
+    CPPUNIT_ASSERT_NO_THROW( pl1->setPoints(vec) );
+
+    ::fwData::PointList::PointListContainer & container = pl1->getRefPoints();
+
+    for(unsigned p = 0; p < vec.size(); ++p)
+    {
+        for(unsigned int i = 0; i< 3; ++i)
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(vec[p]->getCoord()[i], container[p]->getCoord()[i], 10e-6);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void PointListTest::pushTest()
+{
+    ::fwData::PointList::sptr pl1 = ::fwData::PointList::New();
+    ::fwData::Point::sptr point1  = ::fwData::Point::New(1.0f, 2.0f, 3.0f);
+    ::fwData::Point::sptr point2  = ::fwData::Point::New(4.0f, 5.0f, 6.0f);
+
+    std::vector< ::fwData::Point::sptr > vec;
+    vec.push_back(point1);
+    vec.push_back(point2);
+
+    CPPUNIT_ASSERT_NO_THROW( pl1->pushBack(point1) );
+    CPPUNIT_ASSERT_NO_THROW( pl1->pushBack(point2) );
+
+    ::fwData::PointList::PointListContainer & container = pl1->getRefPoints();
+
+    for(unsigned p = 0; p < vec.size(); ++p)
+    {
+        for(unsigned int i = 0; i< 3; ++i)
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(vec[p]->getCoord()[i], container[p]->getCoord()[i], 10e-6);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwData
diff --git a/SrcLib/core/fwData/test/tu/src/ProcessObjectTest.cpp b/SrcLib/core/fwData/test/tu/src/ProcessObjectTest.cpp
index ffd3bfe..3bd8286 100644
--- a/SrcLib/core/fwData/test/tu/src/ProcessObjectTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ProcessObjectTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,8 +22,8 @@ void ProcessObjectTest::constructeur()
     const std::string IMAGEID2 = "myImage2";
     const std::string FIELDID1 = "myField1";
     const std::string FIELDID2 = "myField2";
-    ::fwData::Image::sptr image1 = ::fwData::Image::New();
-    ::fwData::Image::sptr image2 = ::fwData::Image::New();
+    ::fwData::Image::sptr image1   = ::fwData::Image::New();
+    ::fwData::Image::sptr image2   = ::fwData::Image::New();
     ::fwData::Integer::sptr field1 = ::fwData::Integer::New(3);
     ::fwData::Integer::sptr field2 = ::fwData::Integer::New(8);
 
diff --git a/SrcLib/core/fwData/test/tu/src/ROITraitsTest.cpp b/SrcLib/core/fwData/test/tu/src/ROITraitsTest.cpp
index b0ae0cc..107b2cd 100644
--- a/SrcLib/core/fwData/test/tu/src/ROITraitsTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ROITraitsTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,7 +30,7 @@ void ROITraitsTest::tearDown()
 
 void ROITraitsTest::creation()
 {
-    const std::string ID = "roiID";
+    const std::string ID  = "roiID";
     const std::string EXP = "skin_0";
     ::fwData::ROITraits::sptr roiTraits = ::fwData::ROITraits::New();
     roiTraits->setIdentifier(ID);
diff --git a/SrcLib/core/fwData/test/tu/src/ReconstructionTest.cpp b/SrcLib/core/fwData/test/tu/src/ReconstructionTest.cpp
index 80d7b87..2eaaab1 100644
--- a/SrcLib/core/fwData/test/tu/src/ReconstructionTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ReconstructionTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -42,22 +42,19 @@ void ReconstructionTest::tearDown()
 
 void ReconstructionTest::methode1() //test des setters et getters
 {
-    const bool ISVISIBLE        = true ;
-    const std::string CREFORGANNAME     = "OrganName" ;
-    const std::string CREFSTRUCTURETYPE     = "StructureType" ;
+    const bool ISVISIBLE                = true;
+    const std::string CREFORGANNAME     = "OrganName";
+    const std::string CREFSTRUCTURETYPE = "StructureType";
 
     // process
     ::fwData::Reconstruction::sptr p1 = ::fwData::Reconstruction::New();
 
     p1->setIsVisible( ISVISIBLE );
-    p1->setCRefOrganName( CREFORGANNAME );
-    p1->setCRefStructureType( CREFSTRUCTURETYPE );
+    p1->setOrganName( CREFORGANNAME );
+    p1->setStructureType( CREFSTRUCTURETYPE );
 
     // check
     CPPUNIT_ASSERT_EQUAL(p1->getIsVisible(), ISVISIBLE);
-    CPPUNIT_ASSERT_EQUAL(p1->getCRefIsVisible(), ISVISIBLE);
-    CPPUNIT_ASSERT_EQUAL(p1->getRefIsVisible(), ISVISIBLE);
-
 
     CPPUNIT_ASSERT_EQUAL(p1->getOrganName(), CREFORGANNAME);
     CPPUNIT_ASSERT_EQUAL(p1->getCRefOrganName(), CREFORGANNAME);
@@ -73,22 +70,19 @@ void ReconstructionTest::methode1() //test des setters et getters
 
 void ReconstructionTest::methode2()
 {
-    const bool ISVISIBLE        = true ;
-    const std::string CREFORGANNAME     = "OrganName" ;
-    const std::string CREFSTRUCTURETYPE     = "StructureType" ;
+    const bool ISVISIBLE                = true;
+    const std::string CREFORGANNAME     = "OrganName";
+    const std::string CREFSTRUCTURETYPE = "StructureType";
 
     // process
     ::fwData::Reconstruction::sptr p1 = ::fwData::Reconstruction::New();
 
-    p1->setCRefIsVisible( ISVISIBLE );
-    p1->setCRefOrganName( CREFORGANNAME );
-    p1->setCRefStructureType( CREFSTRUCTURETYPE );
+    p1->setIsVisible( ISVISIBLE );
+    p1->setOrganName( CREFORGANNAME );
+    p1->setStructureType( CREFSTRUCTURETYPE );
 
     // check
     CPPUNIT_ASSERT_EQUAL(p1->getIsVisible(), ISVISIBLE);
-    CPPUNIT_ASSERT_EQUAL(p1->getCRefIsVisible(), ISVISIBLE);
-    CPPUNIT_ASSERT_EQUAL(p1->getRefIsVisible(), ISVISIBLE);
-
 
     CPPUNIT_ASSERT_EQUAL(p1->getOrganName(), CREFORGANNAME);
     CPPUNIT_ASSERT_EQUAL(p1->getCRefOrganName(), CREFORGANNAME);
@@ -104,10 +98,10 @@ void ReconstructionTest::methode2()
 void ReconstructionTest::image()
 {
     ::fwData::Reconstruction::sptr p1 = ::fwData::Reconstruction::New();
-    ::fwData::Image::sptr i1(::fwData::Image::New()) ;
+    ::fwData::Image::sptr i1(::fwData::Image::New());
 
-    p1->setImage(i1) ;
-    CPPUNIT_ASSERT_EQUAL(p1->getImage(), i1 ) ;
+    p1->setImage(i1);
+    CPPUNIT_ASSERT_EQUAL(p1->getImage(), i1 );
 }
 
 } //namespace ut
diff --git a/SrcLib/core/fwData/test/tu/src/ReconstructionTraitsTest.cpp b/SrcLib/core/fwData/test/tu/src/ReconstructionTraitsTest.cpp
index d7a15c9..93501c6 100644
--- a/SrcLib/core/fwData/test/tu/src/ReconstructionTraitsTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/ReconstructionTraitsTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,7 +30,7 @@ void ReconstructionTraitsTest::tearDown()
 
 void ReconstructionTraitsTest::creation()
 {
-    const std::string ID = "roiID";
+    const std::string ID  = "roiID";
     const std::string EXP = "skin_0";
     ::fwData::ReconstructionTraits::sptr recTraits = ::fwData::ReconstructionTraits::New();
     recTraits->setIdentifier(ID);
diff --git a/SrcLib/core/fwData/test/tu/src/StringTest.cpp b/SrcLib/core/fwData/test/tu/src/StringTest.cpp
index 5365814..ab5d1b9 100644
--- a/SrcLib/core/fwData/test/tu/src/StringTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/StringTest.cpp
@@ -1,14 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwData/String.hpp>
 #include "StringTest.hpp"
 
+#include <fwData/String.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::StringTest );
@@ -30,17 +28,17 @@ void StringTest::tearDown()
 
 void StringTest::methode1()
 {
-    const std::string VALUES[]  = { "", "chaine_caractere" };
+    const std::string VALUES[] = { "", "chaine_caractere" };
 
-    BOOST_FOREACH ( std::string VALUE, VALUES )
+    for( std::string VALUE : VALUES )
     {
         ::fwData::String::sptr s0 = ::fwData::String::New();
-        s0->value() = VALUE;
+        s0->value()               = VALUE;
         ::fwData::String::sptr s1 = ::fwData::String::New( VALUE );
 
-        CPPUNIT_ASSERT_EQUAL( VALUE , s0->value() );
-        CPPUNIT_ASSERT_EQUAL( VALUE , s1->value() );
-        CPPUNIT_ASSERT_EQUAL( VALUE , ::fwData::String::New( VALUE )->value() );
+        CPPUNIT_ASSERT_EQUAL( VALUE, s0->value() );
+        CPPUNIT_ASSERT_EQUAL( VALUE, s1->value() );
+        CPPUNIT_ASSERT_EQUAL( VALUE, ::fwData::String::New( VALUE )->value() );
     }
 }
 
diff --git a/SrcLib/core/fwData/test/tu/src/StructureTraitsDictionaryTest.cpp b/SrcLib/core/fwData/test/tu/src/StructureTraitsDictionaryTest.cpp
index b49495b..7f8441d 100644
--- a/SrcLib/core/fwData/test/tu/src/StructureTraitsDictionaryTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/StructureTraitsDictionaryTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -31,7 +31,7 @@ void StructureTraitsDictionaryTest::tearDown()
 void StructureTraitsDictionaryTest::testAddingStructure()
 {
     ::fwData::StructureTraitsDictionary::sptr structDico = ::fwData::StructureTraitsDictionary::New();
-    ::fwData::StructureTraits::sptr skin = ::fwData::StructureTraits::New();
+    ::fwData::StructureTraits::sptr skin                 = ::fwData::StructureTraits::New();
     std::string skinType = "Skin";
     skin->setType(skinType);
     skin->setClass(::fwData::StructureTraits::ENVIRONMENT);
diff --git a/SrcLib/core/fwData/test/tu/src/TransferFunctionTest.cpp b/SrcLib/core/fwData/test/tu/src/TransferFunctionTest.cpp
index d5c9d63..77b69fc 100644
--- a/SrcLib/core/fwData/test/tu/src/TransferFunctionTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/TransferFunctionTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -42,13 +42,13 @@ void TransferFunctionTest::tearDown()
 void TransferFunctionTest::constructorTest()
 {
     // Expected value.
-    double expectedLevel = 0.0;
-    double expectedWindow = 100.0;
-    std::string expectedName = "";
+    double expectedLevel                                          = 0.0;
+    double expectedWindow                                         = 100.0;
+    std::string expectedName                                      = "";
     TransferFunction::InterpolationMode expectedInterpolationMode = TransferFunction::LINEAR;
-    bool expectedIsClamped = true;
-    TransferFunction::TFColor expectedBackgroundColor = TransferFunction::TFColor();
-    size_t expectedSize = 0;
+    bool expectedIsClamped                                        = true;
+    TransferFunction::TFColor expectedBackgroundColor             = TransferFunction::TFColor();
+    size_t expectedSize                                           = 0;
 
     ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::New();
 
@@ -68,14 +68,14 @@ void TransferFunctionTest::constructorTest()
 void TransferFunctionTest::defaultTfTest()
 {
     // Expected default value.
-    double expectedLevel = 0.0;
+    double expectedLevel  = 0.0;
     double expectedWindow = 100.0;
 
-    std::string expectedName = TransferFunction::s_DEFAULT_TF_NAME;
+    std::string expectedName                                      = TransferFunction::s_DEFAULT_TF_NAME;
     TransferFunction::InterpolationMode expectedInterpolationMode = TransferFunction::LINEAR;
-    bool expectedIsClamped = false;
-    TransferFunction::TFColor expectedBackgroundColor = TransferFunction::TFColor();
-    size_t expectedSize = 2;
+    bool expectedIsClamped                                        = false;
+    TransferFunction::TFColor expectedBackgroundColor             = TransferFunction::TFColor();
+    size_t expectedSize                                           = 2;
 
     ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::createDefaultTF();
 
@@ -105,12 +105,12 @@ void TransferFunctionTest::classicGetSetTest()
     const TransferFunction::TFDataType& data = tf->getTFData();
 
     TransferFunction::TFDataType::const_iterator itr = data.begin();
-    TransferFunction::TFValueType key1 =  itr->first;
-    TransferFunction::TFValueType key2 = (++itr)->first;
+    TransferFunction::TFValueType key1               = itr->first;
+    TransferFunction::TFValueType key2               = (++itr)->first;
 
     TransferFunction::TFDataType::const_iterator itrColor = data.begin();
-    TransferFunction::TFColor color1 = itrColor->second;
-    TransferFunction::TFColor color2 = (++itrColor)->second;
+    TransferFunction::TFColor color1                      = itrColor->second;
+    TransferFunction::TFColor color2                      = (++itrColor)->second;
 
     CPPUNIT_ASSERT(expectedKey1 == key1);
     CPPUNIT_ASSERT(expectedKey2 == key2);
@@ -124,8 +124,8 @@ void TransferFunctionTest::classicGetSetTest()
     // Test getTFValues()
     TransferFunction::TFValueVectorType values = tf->getTFValues();
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Wrong key value", expectedKey1 , values[0], 0.0);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Wrong key value", expectedKey2 , values[1], 0.0);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Wrong key value", expectedKey1, values[0], 0.0);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Wrong key value", expectedKey2, values[1], 0.0);
 
     // Test getTFColors()
     TransferFunction::TFColorVectorType colors = tf->getTFColors();
@@ -136,7 +136,7 @@ void TransferFunctionTest::classicGetSetTest()
     // Test erase
     tf->eraseTFValue( 1.0 );
     CPPUNIT_ASSERT_EQUAL( (size_t)1, tf->getTFData().size() );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Wrong key value", expectedKey1 , tf->getTFValues()[0], 0.0);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE("Wrong key value", expectedKey1, tf->getTFValues()[0], 0.0);
 
     // Test clear()
     tf->clear();
@@ -224,10 +224,10 @@ void TransferFunctionTest::checkTFColor( ::fwData::TransferFunction::sptr tf )
     CPPUNIT_ASSERT_EQUAL( 150.0, tf->getMinMaxTFValues().second );
 
     const TransferFunction::TFValueVectorType & values = tf->getTFValues();
-    CPPUNIT_ASSERT_EQUAL( values[0] , -40.33  );
-    CPPUNIT_ASSERT_EQUAL( values[1] , -0.2    );
-    CPPUNIT_ASSERT_EQUAL( values[2] , 3.0      );
-    CPPUNIT_ASSERT_EQUAL( values[3] , 150.0     );
+    CPPUNIT_ASSERT_EQUAL( values[0], -40.33  );
+    CPPUNIT_ASSERT_EQUAL( values[1], -0.2    );
+    CPPUNIT_ASSERT_EQUAL( values[2], 3.0      );
+    CPPUNIT_ASSERT_EQUAL( values[3], 150.0     );
 
     CPPUNIT_ASSERT( ::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getTFColor( -40.33 ) );
     CPPUNIT_ASSERT( ::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getTFColor( -0.2   ) );
@@ -236,7 +236,8 @@ void TransferFunctionTest::checkTFColor( ::fwData::TransferFunction::sptr tf )
 
 
 
-    CPPUNIT_ASSERT_EQUAL( std::string("fieldStringValue"), ::fwData::String::dynamicCast( tf->getField( "fieldStringKey" ) )->value() );
+    CPPUNIT_ASSERT_EQUAL( std::string("fieldStringValue"),
+                          ::fwData::String::dynamicCast( tf->getField( "fieldStringKey" ) )->value() );
 }
 
 //------------------------------------------------------------------------------
@@ -247,10 +248,10 @@ void TransferFunctionTest::setTFDataTest()
 
     tf->clear();
     ::fwData::TransferFunction::TFDataType tfData;
-    tfData[-40.33]  = ::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4 );
-    tfData[3]       = ::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4 );
-    tfData[-0.2]    = ::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4 );
-    tfData[150]     = ::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9 );
+    tfData[-40.33] = ::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4 );
+    tfData[3]      = ::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4 );
+    tfData[-0.2]   = ::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4 );
+    tfData[150]    = ::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9 );
     tf->setTFData( tfData );
 
     this->checkTFColor(tf);
@@ -272,30 +273,36 @@ void TransferFunctionTest::linearColorTest()
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.0, 0.0, 0.0, 0.0) == tf->getLinearColor(200) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getLinearColor(-40.33) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getLinearColor(150) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.6, 0.65) == tf->getLinearColor(((150.0-3.0)/2.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.6,
+                                                        0.65) == tf->getLinearColor(((150.0-3.0)/2.0)+3) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getLinearColor(-0.2) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getLinearColor(3) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.75, 0.525) == tf->getLinearColor(((150.0-3.0)/4.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.75, 0.525) == tf->getLinearColor(
+                       ((150.0-3.0)/4.0)+3) );
 
     tf->setInterpolationMode(TransferFunction::LINEAR);
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.0, 0.0, 0.0, 0.0) == tf->getInterpolatedColor(-120) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.0, 0.0, 0.0, 0.0) == tf->getInterpolatedColor(200) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getInterpolatedColor(-40.33) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getInterpolatedColor(150) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.6, 0.65) == tf->getInterpolatedColor(((150.0-3.0)/2.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.6,
+                                                        0.65) == tf->getInterpolatedColor(((150.0-3.0)/2.0)+3) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getInterpolatedColor(-0.2) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getInterpolatedColor(3) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.75, 0.525) == tf->getInterpolatedColor(((150.0-3.0)/4.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.75,
+                                                        0.525) == tf->getInterpolatedColor(((150.0-3.0)/4.0)+3) );
 
     tf->setIsClamped(false);
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getLinearColor(-120) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getLinearColor(200) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getLinearColor(-40.33) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getLinearColor(150) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.6, 0.65) == tf->getLinearColor(((150.0-3.0)/2.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.6,
+                                                        0.65) == tf->getLinearColor(((150.0-3.0)/2.0)+3) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getLinearColor(-0.2) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getLinearColor(3) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.75, 0.525) == tf->getLinearColor(((150.0-3.0)/4.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.75, 0.525) == tf->getLinearColor(
+                       ((150.0-3.0)/4.0)+3) );
 
 
 }
@@ -316,30 +323,36 @@ void TransferFunctionTest::nearestColorTest()
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.0, 0.0, 0.0, 0.0) == tf->getNearestColor(200) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getNearestColor(-40.33) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getNearestColor(150) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getNearestColor(((150.0-3.0)/2.0)+3 + 0.1) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3,
+                                                        0.9) == tf->getNearestColor(((150.0-3.0)/2.0)+3 + 0.1) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getNearestColor(-0.2) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getNearestColor(3) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getNearestColor(((150.0-3.0)/4.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9,
+                                                        0.4) == tf->getNearestColor(((150.0-3.0)/4.0)+3) );
 
     tf->setInterpolationMode(TransferFunction::NEAREST);
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.0, 0.0, 0.0, 0.0) == tf->getInterpolatedColor(-120) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.0, 0.0, 0.0, 0.0) == tf->getInterpolatedColor(200) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getInterpolatedColor(-40.33) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getInterpolatedColor(150) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getInterpolatedColor(((150.0-3.0)/2.0)+3 + 0.1) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3,
+                                                        0.9) == tf->getInterpolatedColor(((150.0-3.0)/2.0)+3 + 0.1) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getInterpolatedColor(-0.2) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getInterpolatedColor(3) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getInterpolatedColor(((150.0-3.0)/4.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9,
+                                                        0.4) == tf->getInterpolatedColor(((150.0-3.0)/4.0)+3) );
 
     tf->setIsClamped(false);
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getNearestColor(-120) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getNearestColor(200) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.9, 0.2, 0.3, 0.4) == tf->getNearestColor(-40.33) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getNearestColor(150) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3, 0.9) == tf->getNearestColor(((150.0-3.0)/2.0)+3 + 0.1) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.3,
+                                                        0.9) == tf->getNearestColor(((150.0-3.0)/2.0)+3 + 0.1) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.9, 0.3, 0.4) == tf->getNearestColor(-0.2) );
     CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getNearestColor(3) );
-    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9, 0.4) == tf->getNearestColor(((150.0-3.0)/4.0)+3) );
+    CPPUNIT_ASSERT(::fwData::TransferFunction::TFColor( 0.1, 0.2, 0.9,
+                                                        0.4) == tf->getNearestColor(((150.0-3.0)/4.0)+3) );
 
 }
 
diff --git a/SrcLib/core/fwData/test/tu/src/TransformationMatrix3DTest.cpp b/SrcLib/core/fwData/test/tu/src/TransformationMatrix3DTest.cpp
index fc82d28..ff2afd7 100644
--- a/SrcLib/core/fwData/test/tu/src/TransformationMatrix3DTest.cpp
+++ b/SrcLib/core/fwData/test/tu/src/TransformationMatrix3DTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -31,34 +31,88 @@ void TransformationMatrix3DTest::tearDown()
 
 //------------------------------------------------------------------------------
 
-void TransformationMatrix3DTest::methode1()
+void TransformationMatrix3DTest::getterSetterByCoef()
 {
-    double COEFFICIENTS = 1 ;
-    // process
-    ::fwData::TransformationMatrix3D::sptr p1 = ::fwData::TransformationMatrix3D::New();
-
-    // check
-    CPPUNIT_ASSERT_EQUAL(p1->getCoefficients().back(),  COEFFICIENTS);
-    CPPUNIT_ASSERT_EQUAL(p1->getCRefCoefficients().back(),  COEFFICIENTS);
-    CPPUNIT_ASSERT_EQUAL(p1->getRefCoefficients().back(),   COEFFICIENTS);
+    double identity[] = { 1., 0., 0., 0.,
+                          0., 1., 0., 0.,
+                          0., 0., 1., 0.,
+                          0., 0., 0., 1.};
+
+    ::fwData::TransformationMatrix3D::sptr mat = ::fwData::TransformationMatrix3D::New();
+
+    // Check default initialization
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            CPPUNIT_ASSERT_EQUAL(mat->getCoefficient(i, j), identity[i * 4 + j]);
+        }
+    }
+
+    // Call setter and check getter
+    double coefs[] = { 2, -2, .3, .12,
+                       4, 8.9, 4.2, 1.2,
+                       7.8, -12.1, 2.3, 1.2,
+                       .3, 1.21, -3.1, 1.2};
+
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            mat->setCoefficient(i, j, coefs[i * 4 + j]);
+        }
+    }
+
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            CPPUNIT_ASSERT_EQUAL(mat->getCoefficient(i, j), coefs[i * 4 + j]);
+        }
+    }
 }
 
 //------------------------------------------------------------------------------
 
-void TransformationMatrix3DTest::methode2()
+void TransformationMatrix3DTest::getterSetterByArray()
 {
-    double COEFFICIENTS = 4 ;
-    std::vector<double> VECTORCOEFFICIENTS ;
-    VECTORCOEFFICIENTS.push_back( COEFFICIENTS ) ;
-
-    // process
-    ::fwData::TransformationMatrix3D::sptr p1 = ::fwData::TransformationMatrix3D::New();
-    p1->setCRefCoefficients(VECTORCOEFFICIENTS) ;
-
-    // check
-    CPPUNIT_ASSERT_EQUAL(p1->getCoefficients().back(),  COEFFICIENTS) ;
-    CPPUNIT_ASSERT_EQUAL(p1->getCRefCoefficients().back(),  COEFFICIENTS) ;
-    CPPUNIT_ASSERT_EQUAL(p1->getRefCoefficients().back(),   COEFFICIENTS) ;
+    ::fwData::TransformationMatrix3D::TMCoefArray identity = { 1., 0., 0., 0.,
+                                                               0., 1., 0., 0.,
+                                                               0., 0., 1., 0.,
+                                                               0., 0., 0., 1.};
+
+    ::fwData::TransformationMatrix3D::sptr mat = ::fwData::TransformationMatrix3D::New();
+
+    // Check default initialization
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            CPPUNIT_ASSERT_EQUAL(mat->getCoefficient(i, j), identity[i * 4 + j]);
+        }
+    }
+
+    // Call setter and check getter
+    ::fwData::TransformationMatrix3D::TMCoefArray coefs = { 2, -2, .3, .12,
+                                                            4, 8.9, 4.2, 1.2,
+                                                            7.8, -12.1, 2.3, 1.2,
+                                                            .3, 1.21, -3.1, 1.2};
+
+    mat->setCoefficients(coefs);
+
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            CPPUNIT_ASSERT_EQUAL(mat->getCoefficient(i, j), coefs[i * 4 + j]);
+        }
+    }
+
+    const ::fwData::TransformationMatrix3D::TMCoefArray& coefs2 = mat->getCoefficients();
+    for (size_t i = 0; i < 16; ++i)
+    {
+        CPPUNIT_ASSERT_EQUAL(coefs2[i], coefs[i]);
+    }
 }
 
 } //namespace ut
diff --git a/SrcLib/core/fwData/test/tu/src/VideoTest.cpp b/SrcLib/core/fwData/test/tu/src/VideoTest.cpp
deleted file mode 100644
index fd00090..0000000
--- a/SrcLib/core/fwData/test/tu/src/VideoTest.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Video.hpp>
-#include "VideoTest.hpp"
-
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwData::ut::VideoTest );
-
-namespace fwData
-{
-namespace ut
-{
-
-void VideoTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void VideoTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void VideoTest::methode1()
-{
-    ::boost::uint32_t VALUE   = 0 ;
-    ::boost::uint8_t VALUE1   = 1 ;
-
-    // process
-    ::fwData::Video::sptr video = ::fwData::Video::New();
-
-    // check
-    CPPUNIT_ASSERT_EQUAL(video->getXSize(), VALUE);
-    CPPUNIT_ASSERT_EQUAL(video->getYSize(), VALUE);
-    CPPUNIT_ASSERT_EQUAL(video->getBPP(),  VALUE1);
-}
-
-} //namespace ut
-} //namespace fwData
-
diff --git a/SrcLib/core/fwDataCamp/CMakeLists.txt b/SrcLib/core/fwDataCamp/CMakeLists.txt
index e25dfaa..1c29206 100644
--- a/SrcLib/core/fwDataCamp/CMakeLists.txt
+++ b/SrcLib/core/fwDataCamp/CMakeLists.txt
@@ -1,12 +1,2 @@
-
 fwLoadProperties()
 
-fwUseForwardInclude(
-    fwCamp
-    fwCore
-    fwData
-    fwMedData
-    fwMemory
-    )
-
-
diff --git a/SrcLib/core/fwDataCamp/Properties.cmake b/SrcLib/core/fwDataCamp/Properties.cmake
index 2f0e626..3f7c35d 100644
--- a/SrcLib/core/fwDataCamp/Properties.cmake
+++ b/SrcLib/core/fwDataCamp/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwDataCamp )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCamp fwCore fwData fwMedData fwMemory )
+set( DEPENDENCIES fwData fwMedData )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataCamp/bin/build.options b/SrcLib/core/fwDataCamp/bin/build.options
deleted file mode 100644
index 23a7057..0000000
--- a/SrcLib/core/fwDataCamp/bin/build.options
+++ /dev/null
@@ -1,3 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-LIB = ['fwCamp_0-1', 'fwData_0-1', 'fwMedData_0-1','fwMemory_0-1']
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Array.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Array.hpp
index e79468e..56847d9 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Array.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Array.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Camera.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Camera.hpp
deleted file mode 100644
index b6a1d61..0000000
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Camera.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATACAMP_CAMERA_HPP__
-#define __FWDATACAMP_CAMERA_HPP__
-
-#include <fwCamp/macros.hpp>
-#include <fwData/Camera.hpp>
-
-#include "fwDataCamp/config.hpp"
-
-fwCampDeclareAccessor((fwData)(Camera), (fwData)(TransformationMatrix3D));
-
-#endif /* __FWDATACAMP_CAMERA_HPP__ */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Image.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Image.hpp
index a519d04..12723d2 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Image.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Image.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Line.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Line.hpp
index dfa88d6..4ec0730 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Line.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Line.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Material.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Material.hpp
index a825ff8..79336ce 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Material.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Material.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,10 +12,13 @@
 
 #include "fwDataCamp/config.hpp"
 
-fwCampAutoDeclareEnumMacro((fwData)(Material)(SHADING_MODE));
-fwCampAutoDeclareEnumMacro((fwData)(Material)(REPRESENTATION_MODE));
-fwCampAutoDeclareEnumMacro((fwData)(Material)(OPTIONS_MODE));
+fwCampAutoDeclareEnumMacro((fwData)(Material)(ShadingType));
+fwCampAutoDeclareEnumMacro((fwData)(Material)(RepresentationType));
+fwCampAutoDeclareEnumMacro((fwData)(Material)(OptionsType));
+fwCampAutoDeclareEnumMacro((fwData)(Material)(FilteringType));
+fwCampAutoDeclareEnumMacro((fwData)(Material)(WrappingType));
 
 fwCampDeclareAccessor((fwData)(Material), (fwData)(Color));
+fwCampDeclareAccessor((fwData)(Material), (fwData)(Image));
 
 #endif /* __FWDATACAMP_MATERIAL_HPP__ */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Mesh.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Mesh.hpp
index 96db582..32dff03 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Mesh.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Mesh.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Node.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Node.hpp
index 1604fe4..761ac29 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Node.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Node.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/ROITraits.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/ROITraits.hpp
index 8db88b4..2164d00 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/ROITraits.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/ROITraits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Reconstruction.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Reconstruction.hpp
index 2519436..b6de973 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Reconstruction.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Reconstruction.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/ReconstructionTraits.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/ReconstructionTraits.hpp
index 6635d93..986d29f 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/ReconstructionTraits.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/ReconstructionTraits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Resection.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Resection.hpp
index e10d703..dc88360 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Resection.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Resection.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/ResectionDB.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/ResectionDB.hpp
index 91b1977..4255c8a 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/ResectionDB.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/ResectionDB.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/StructureTraits.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/StructureTraits.hpp
index 116644d..77296b9 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/StructureTraits.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/StructureTraits.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Tag.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Tag.hpp
index 98e9ad9..6080b86 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Tag.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Tag.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/TransferFunction.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/TransferFunction.hpp
index 608eb85..09c321f 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/TransferFunction.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/TransferFunction.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Version.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Version.hpp
index 5d85e36..54d5256 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Version.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/Version.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/Video.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/Video.hpp
deleted file mode 100644
index 76ef0af..0000000
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/Video.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATACAMP_VIDEO_HPP__
-#define __FWDATACAMP_VIDEO_HPP__
-
-#include <fwCamp/macros.hpp>
-#include <fwData/Video.hpp>
-
-#include "fwDataCamp/config.hpp"
-
-fwCampDeclareAccessor((fwData)(Video), (fwData)(Camera));
-
-#endif /* __FWDATACAMP_VIDEO_HPP__ */
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/autoload.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/autoload.hpp
index 6feea48..cbeeac0 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/autoload.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/autoload.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,6 @@
 
 #include <fwData/Array.hpp>
 #include <fwData/Boolean.hpp>
-#include <fwData/Camera.hpp>
 #include <fwData/Color.hpp>
 #include <fwData/Composite.hpp>
 #include <fwData/Edge.hpp>
@@ -25,7 +24,6 @@
 #include <fwData/List.hpp>
 #include <fwData/Material.hpp>
 #include <fwData/Mesh.hpp>
-#include <fwData/Model.hpp>
 #include <fwData/Plane.hpp>
 #include <fwData/PlaneList.hpp>
 #include <fwData/Point.hpp>
@@ -43,7 +41,6 @@
 #include <fwData/Tag.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/Vector.hpp>
-#include <fwData/Video.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/SingleFile.hpp>
 
@@ -69,9 +66,11 @@ struct runner
         localDeclarefwDataArray();
         localDeclarefwDataImage();
         localDeclarefwDataMesh();
-        localDeclarefwDataMaterialOPTIONS_MODE();
-        localDeclarefwDataMaterialREPRESENTATION_MODE();
-        localDeclarefwDataMaterialSHADING_MODE();
+        localDeclarefwDataMaterialOptionsType();
+        localDeclarefwDataMaterialRepresentationType();
+        localDeclarefwDataMaterialShadingType();
+        localDeclarefwDataMaterialFilteringType();
+        localDeclarefwDataMaterialWrappingType();
         localDeclarefwDataMaterial();
         localDeclarefwDataReconstruction();
         localDeclarefwDataComposite();
@@ -95,15 +94,12 @@ struct runner
         localDeclarefwDataPlaneList();
         localDeclarefwDataResection();
         localDeclarefwDataResectionDB();
-        localDeclarefwDataCamera();
         localDeclarefwDataHistogram();
         localDeclarefwDataLine();
         localDeclarefwDataList();
         localDeclarefwDatalocationSingleFile();
-        localDeclarefwDataModel();
         localDeclarefwDataProcessObject();
         localDeclarefwDataTag();
-        localDeclarefwDataVideo();
     }
 
     static runner r;
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/config.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/config.hpp
deleted file mode 100644
index 7d982c4..0000000
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/config.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATACAMP_CONFIG_HPP_
-#define _FWDATACAMP_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWDATACAMP_EXPORTS
-            #define FWDATACAMP_API __declspec(dllexport)
-             #define FWDATACAMP_TEMPLATE_API extern "C++"
-        #else
-            #define FWDATACAMP_API __declspec(dllimport)
-            #define FWDATACAMP_TEMPLATE_API extern "C++"
-        #endif
-
-        #define FWDATACAMP_CLASS_API
-        
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWDATACAMP_EXPORTS
-            #define FWDATACAMP_API __attribute__ ((visibility("default")))
-            #define FWDATACAMP_CLASS_API __attribute__ ((visibility("default")))
-            #define FWDATACAMP_TEMPLATE_API extern "C++"
-        #else
-            #define FWDATACAMP_API __attribute__ ((visibility("hidden")))
-            #define FWDATACAMP_CLASS_API __attribute__ ((visibility("hidden")))
-            #define FWDATACAMP_TEMPLATE_API extern "C++"
-        #endif
-
-    #else
-
-        #define FWDATACAMP_API
-        #define FWDATACAMP_CLASS_API
-        #define FWDATACAMP_TEMPLATE_API extern "C++"
-
-    #endif
-
-#endif //FWDATACAMP_API
-
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/NullPointer.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/NullPointer.hpp
index bf4c469..80cd23e 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/NullPointer.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/NullPointer.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ namespace exception
 /// Null pointer exception.
 struct NullPointer : ::fwCore::Exception
 {
-    FWDATACAMP_API NullPointer ( const std::string &err ) ;
+    FWDATACAMP_API NullPointer ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/ObjectNotFound.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/ObjectNotFound.hpp
index f958b75..c717b04 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/ObjectNotFound.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/exception/ObjectNotFound.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ namespace exception
 /// Object not found exception.
 struct ObjectNotFound : ::fwCore::Exception
 {
-    FWDATACAMP_API ObjectNotFound ( const std::string &err ) ;
+    FWDATACAMP_API ObjectNotFound ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/getObject.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/getObject.hpp
index e3668c1..812cd96 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/getObject.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/getObject.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/macros.hpp>
 
@@ -17,7 +16,7 @@
 
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwDataCamp
@@ -33,20 +32,20 @@ namespace fwDataCamp
  * @throw ::fwDataCamp::exception::NullPointer
  * @throw ::fwDataCamp::exception::ObjectNotFound
  */
-FWDATACAMP_API SPTR(::fwData::Object) getObject( SPTR(::fwData::Object) object,
-                                                          const std::string & path,
-                                                          bool raiseException = false);
+FWDATACAMP_API SPTR(::fwData::Object) getObject( CSPTR(::fwData::Object) object,
+                                                 const std::string & path,
+                                                 bool raiseException = false);
 
 /**
  * @see fwDataCamp.getObject
  */
 template< class DATATYPE >
-SPTR(DATATYPE) getObject( SPTR(::fwData::Object) object,
-                             const std::string & path,
-                             bool raiseException = false )
+SPTR(DATATYPE) getObject( CSPTR(::fwData::Object) object,
+                          const std::string & path,
+                          bool raiseException = false )
 {
     SPTR(::fwData::Object) subObject = getObject( object, path, raiseException );
-    SPTR(DATATYPE) casteDdata = ::boost::dynamic_pointer_cast<DATATYPE>( subObject );
+    SPTR(DATATYPE) casteDdata        = ::std::dynamic_pointer_cast<DATATYPE>( subObject );
     return casteDdata;
 }
 
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/namespace.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/namespace.hpp
index 7bd4968..e64aea7 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/namespace.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,7 +13,7 @@
 /**
  * @brief This namespace contains data object descriptions used for introspection.
  * @namespace fwDataCamp
- * @date 2012-2013.
+ * @date 2012-2015.
  */
 namespace fwDataCamp
 {
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/CompareObjects.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/CompareObjects.hpp
index 2142d50..a5a782b 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/CompareObjects.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/CompareObjects.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@
 
 namespace fwData
 {
-    class Object;
+class Object;
 }
 
 namespace fwDataCamp
@@ -58,19 +58,27 @@ public:
 
     /// Returns the reference object.
     SPTR(::fwData::Object) getReferenceObject() const
-    { return m_objRef; }
+    {
+        return m_objRef;
+    }
 
     /// Returns the compared object.
     SPTR(::fwData::Object) getComparedObject() const
-    { return m_objComp; }
+    {
+        return m_objComp;
+    }
 
     /// Returns reference object properties.
     const PropsMapType& getReferenceProps() const
-    { return m_propsRef; }
+    {
+        return m_propsRef;
+    }
 
     /// Returns compared object properties.
     const PropsMapType& getComparedProps() const
-    { return m_propsComp; }
+    {
+        return m_propsComp;
+    }
 
     /**
      * @brief Returns the differences found between comparison of reference and compared objects.
@@ -79,7 +87,9 @@ public:
      * compared object as value.
      */
     SPTR(PropsMapType) getDifferences() const
-    { return m_props; }
+    {
+        return m_props;
+    }
 
     /**
      * @brief Process to the comparison between reference object and compared object.
@@ -93,9 +103,8 @@ public:
      *
      * @throw ::fwCore::Exception if classnames of reference and compared objects are different
      */
-    FWDATACAMP_API void compare(
-            SPTR(::fwData::Object) objRef, SPTR(::fwData::Object) objComp)
-        throw(::fwCore::Exception);
+    FWDATACAMP_API void compare(SPTR(::fwData::Object) objRef,
+                                SPTR(::fwData::Object) objComp) throw(::fwCore::Exception);
 
     /// Property value for differences map meaning a missing property.
     FWDATACAMP_API static const std::string s_MISSING_PROPERTY;
@@ -112,18 +121,18 @@ private:
      * @param props properties map of parent object to complete with child ones
      */
     CompareObjects(
-            const ::camp::UserObject& obj,
-            const std::string& prefix,
-            SPTR(PropsMapType) props = SPTR(PropsMapType)(new PropsMapType));
+        const ::camp::UserObject& obj,
+        const std::string& prefix,
+        SPTR(PropsMapType)props = SPTR(PropsMapType)(new PropsMapType));
 
     /// Returns the path of the given property within object.
     std::string getPath(const std::string& property) const;
 
     /// Reference object properties.
-    PropsMapType  m_propsRef;
+    PropsMapType m_propsRef;
 
     /// Compared object properties.
-    PropsMapType  m_propsComp;
+    PropsMapType m_propsComp;
 
     /// Reflection in camp world of currently introspected object
     ::camp::UserObject m_campObj;
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/GetObject.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/GetObject.hpp
index c3af548..13bbe3a 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/GetObject.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/GetObject.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,21 +21,21 @@ namespace visitor
 {
 
 /**
- * @brief Check if object introspection process mathes a given path. 
+ * @brief Check if object introspection process mathes a given path.
  */
 struct PathVisitor
 {
     /**
      * @name Typedefs
      * @{ */
-    typedef ::boost::shared_ptr<PathVisitor> sptr;
+    typedef std::shared_ptr<PathVisitor> sptr;
     typedef std::vector<std::string> ObjectsNamesType;
     /**  @} */
 
     /**
      * @brief Constructor.
      *
-     * @param path 
+     * @param path
      */
     PathVisitor(const std::string& path)
     {
@@ -47,7 +47,7 @@ struct PathVisitor
      */
     void merge(PathVisitor::sptr pathVisitor)
     {
-        const ObjectsNamesType& vectObjFound =  pathVisitor->m_vectObjFound;
+        const ObjectsNamesType& vectObjFound = pathVisitor->m_vectObjFound;
         m_vectObjFound.reserve(m_vectObjFound.size() + vectObjFound.size());
         m_vectObjFound.insert(m_vectObjFound.end(), vectObjFound.begin(), vectObjFound.end());
     }
@@ -64,21 +64,18 @@ struct PathVisitor
         return m_vectObj == m_vectObjFound;
     }
 
-private:
+    private:
 
-    /// Path elements to introspect.
-    ObjectsNamesType m_vectObj;
+        /// Path elements to introspect.
+        ObjectsNamesType m_vectObj;
 
-    /// Introspected path elements.
-    ObjectsNamesType m_vectObjFound;
+        /// Introspected path elements.
+        ObjectsNamesType m_vectObjFound;
 
 };
 
 /**
- * @class   GetObject
  * @brief   This class is an helper to introspect a data and find an object (contained into this data) from a normalized path.
- *
- * @date    2013.
  */
 class FWDATACAMP_CLASS_API GetObject : public ::camp::ExtendedClassVisitor
 {
@@ -91,7 +88,7 @@ public:
      * @param object data object containing child object to retrieve
      * @param subObjPath normalized path targeting child object to retrieve
      */
-    FWDATACAMP_API GetObject( ::fwData::Object::sptr object, const std::string & subObjPath );
+    FWDATACAMP_API GetObject( ::fwData::Object::csptr object, const std::string& subObjPath );
 
     FWDATACAMP_API virtual ~GetObject();
 
@@ -122,7 +119,7 @@ public:
         return m_pathVisitor;
     }
 
-private :
+private:
 
     /*
      * @brief Parses m_newSubObjPath, returns the substring until the first dot ( property name, key map or
@@ -131,7 +128,7 @@ private :
     std::string getNextPropertyName();
 
     /// Object given in constructor which will introspected
-    ::fwData::Object::sptr m_object;
+    ::fwData::Object::csptr m_object;
 
     /// Path of final object wanted from m_object
     const std::string m_subObjPath;
diff --git a/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/RecursiveLock.hpp b/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/RecursiveLock.hpp
index 1be5cf8..7b3e309 100644
--- a/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/RecursiveLock.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwDataCamp/visitor/RecursiveLock.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,12 +17,12 @@
 
 namespace fwData
 {
-    class Object;
+class Object;
 
-    namespace mt
-    {
-        class ObjectReadLock;
-    }
+namespace mt
+{
+class ObjectReadLock;
+}
 }
 
 
@@ -56,8 +56,8 @@ public:
      * @param object data object (containing child data objects) to lock recursively
      * @param locks container of previously acquired locks
      */
-    FWDATACAMP_API RecursiveLock( SPTR(::fwData::Object) object,
-                                  SPTR(LockVectType) locks = SPTR(LockVectType)(new LockVectType()));
+    FWDATACAMP_API RecursiveLock( SPTR(::fwData::Object)object,
+                                  SPTR(LockVectType)locks = SPTR(LockVectType)(new LockVectType()));
 
     FWDATACAMP_API virtual ~RecursiveLock();
 
@@ -72,7 +72,7 @@ public:
     FWDATACAMP_API virtual void visit(const camp::MapProperty& property);
     /**  @} */
 
-private :
+private:
 
     /// Locks associated object recursively (called by constructor).
     void lock();
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
index d4a98bb..8e6a052 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ActivitySeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/DicomSeries.hpp b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/DicomSeries.hpp
new file mode 100644
index 0000000..4481a22
--- /dev/null
+++ b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/DicomSeries.hpp
@@ -0,0 +1,23 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATACAMP_DICOMSERIES_HPP__
+#define __FWMEDDATACAMP_DICOMSERIES_HPP__
+
+#include "fwMedData/DicomSeries.hpp"
+#include "fwMedData/config.hpp"
+
+#include "fwMedData/DicomSeries.hpp"
+#include "fwMedData/config.hpp"
+
+#include <fwCamp/macros.hpp>
+#include <fwData/Array.hpp>
+
+fwCampAutoDeclareEnumMacro((fwMedData)(DicomSeries)(DICOM_AVAILABILITY));
+
+fwCampDeclareAccessor((fwMedData)(DicomSeries), (fwData)(Array));
+
+#endif // __FWMEDDATACAMP_DICOMSERIES_HPP__
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp
index 28bf7af..a18f4a4 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/ImageSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp
index 9ad9c41..3c2e5c3 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/Series.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp
index 9c46805..1a67087 100644
--- a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp
+++ b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/autoload.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,14 +11,16 @@
 
 
 #include <fwMedData/ActivitySeries.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/ModelSeries.hpp>
-#include <fwMedData/Equipment.hpp>
-#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
 
+#include <fwMedDataCamp/DicomSeries.hpp>
 
 namespace fwMedDataCamp
 {
@@ -35,6 +37,8 @@ struct runner
         localDeclarefwMedDataImageSeries();
         localDeclarefwMedDataModelSeries();
         localDeclarefwMedDataActivitySeries();
+        localDeclarefwMedDataDicomSeriesDICOM_AVAILABILITY();
+        localDeclarefwMedDataDicomSeries();
     }
 
     static runner r;
diff --git a/SrcLib/core/fwDataCamp/include/fwMedDataCamp/namespace.hpp b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/namespace.hpp
new file mode 100644
index 0000000..42c13e5
--- /dev/null
+++ b/SrcLib/core/fwDataCamp/include/fwMedDataCamp/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATACAMP_NAMESPACE_HPP__
+#define __FWMEDDATACAMP_NAMESPACE_HPP__
+
+/**
+ * @brief This namespace contains medical data object descriptions used for introspection.
+ * @namespace fwMedDataCamp
+ **/
+
+namespace fwMedDataCamp
+{
+
+} // namespace fwMedDataCamp
+
+#endif // __FWMEDDATACAMP_NAMESPACE_HPP__
diff --git a/SrcLib/core/fwDataCamp/src/autoload.cpp b/SrcLib/core/fwDataCamp/src/autoload.cpp
index d12b559..bef8e37 100644
--- a/SrcLib/core/fwDataCamp/src/autoload.cpp
+++ b/SrcLib/core/fwDataCamp/src/autoload.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Array.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Array.cpp
index 8d4b7a4..509863b 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Array.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Array.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,13 +16,13 @@
 fwCampImplementDataMacro((fwData)(Array))
 {
     builder.base< ::fwData::Object>()
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .property("strides", &::fwData::Array::m_strides)
-        .property("size", &::fwData::Array::m_size)
-        .property("type", &::fwData::Array::m_type)
-        .property("nb_of_components", &::fwData::Array::m_nbOfComponents)
-        .property("buffer", &::fwData::Array::m_attrBufferObject)
-        .property("isOwner", &::fwData::Array::m_isBufferOwner)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .property("strides", &::fwData::Array::m_strides)
+    .property("size", &::fwData::Array::m_size)
+    .property("type", &::fwData::Array::m_type)
+    .property("nb_of_components", &::fwData::Array::m_nbOfComponents)
+    .property("buffer", &::fwData::Array::m_bufferObject)
+    .property("isOwner", &::fwData::Array::m_isBufferOwner)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Boolean.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Boolean.cpp
index a0db2bf..516576e 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Boolean.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Boolean.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,9 +10,9 @@
 fwCampImplementDataMacro((fwData)(Boolean))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object >()
-        .property("value",  (bool fwData::Boolean::*) &fwData::Boolean::m_value)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object >()
+    .property("value",  (bool fwData::Boolean::*) &fwData::Boolean::m_value)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Camera.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Camera.cpp
deleted file mode 100644
index 6394ba9..0000000
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Camera.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCamp/UserObject.hpp>
-#include "fwDataCamp/Camera.hpp"
-
-fwCampImplementDataMacro((fwData)(Camera))
-{
-    builder.base< ::fwData::Object>()
-        .tag("object_version", "2")
-        .tag("lib_name", "fwData")
-        .property("extrinsic_matric",&::fwData::Camera::m_extrinsicMatrix)
-        .property("intrinsic_matrix",&::fwData::Camera::m_intrinsicMatrix)
-        .property("data_available",&::fwData::Camera::m_dataAvailable)
-        .property("skew",&::fwData::Camera::m_attrSkew)
-        .property("distortion_coefficient",&::fwData::Camera::m_attrDistortionCoefficient)
-        ;
-}
-
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Color.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Color.cpp
index ba3bea5..b487cef 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Color.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Color.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,10 +10,10 @@
 fwCampImplementDataMacro((fwData)(Color))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("rgba", &::fwData::Color::m_vRGBA)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("rgba", &::fwData::Color::m_vRGBA)
+    ;
 }
 
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Composite.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Composite.cpp
index ca9153f..6aaa4e9 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Composite.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Composite.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,9 +13,9 @@
 fwCampImplementDataMacro((fwData)(Composite))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("values", &::fwData::Composite::m_attrContainer)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("values", &::fwData::Composite::m_container)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Edge.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Edge.cpp
index a7c3ac6..1743b60 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Edge.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Edge.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,11 +11,11 @@
 fwCampImplementDataMacro((fwData)(Edge))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("nature", &::fwData::Edge::m_nature)
-        .property("to_identifier", &::fwData::Edge::m_toPortIdentifier)
-        .property("from_identifier", &::fwData::Edge::m_fromPortIdentifier)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("nature", &::fwData::Edge::m_nature)
+    .property("to_identifier", &::fwData::Edge::m_toPortIdentifier)
+    .property("from_identifier", &::fwData::Edge::m_fromPortIdentifier)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Float.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Float.cpp
index 28e73db..b182b76 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Float.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Float.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(Float))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object >()
-        .property("value", (float fwData::Float::*) &fwData::Float::m_value)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object >()
+    .property("value", (float fwData::Float::*) &fwData::Float::m_value)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Graph.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Graph.cpp
index 9bd9a62..9d3f1ac 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Graph.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Graph.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,8 +13,8 @@
 fwCampImplementDataMacro((fwData)(Graph))
 {
     builder.base< ::fwData::Object>()
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .property("nodes", &::fwData::Graph::m_nodes);
-        //.property("connections", &::fwData::Graph::m_connections);
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .property("nodes", &::fwData::Graph::m_nodes);
+    //.property("connections", &::fwData::Graph::m_connections);
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Histogram.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Histogram.cpp
index 7c24d1e..2d4aa87 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Histogram.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Histogram.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,11 +10,11 @@
 fwCampImplementDataMacro((fwData)(Histogram))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .property("value",&::fwData::Histogram::m_values)
-        .property("bins_width",&::fwData::Histogram::m_binsWidth)
-        .property("min_value",&::fwData::Histogram::m_minValue)
-        .property("max_value",&::fwData::Histogram::m_maxValue)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .property("value",&::fwData::Histogram::m_values)
+    .property("bins_width",&::fwData::Histogram::m_binsWidth)
+    .property("min_value",&::fwData::Histogram::m_minValue)
+    .property("max_value",&::fwData::Histogram::m_maxValue)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Image.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Image.cpp
index 0549ca8..3b4e111 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Image.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Image.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,13 +14,16 @@
 fwCampImplementDataMacro((fwData)(Image))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("size", &::fwData::Image::m_size)
-        .property("type", &::fwData::Image::m_type)
-        .property("spacing", &::fwData::Image::m_spacing)
-        .property("origin", &::fwData::Image::m_origin)
-        .property("array", &::fwData::Image::m_dataArray)
-        ;
+    .tag("object_version", "2")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("size", &::fwData::Image::m_size)
+    .property("type", &::fwData::Image::m_type)
+    .property("spacing", &::fwData::Image::m_spacing)
+    .property("origin", &::fwData::Image::m_origin)
+    .property("array", &::fwData::Image::m_dataArray)
+    .property("nb_components", &::fwData::Image::m_numberOfComponents)
+    .property("window_center", &::fwData::Image::m_windowCenter)
+    .property("window_width", &::fwData::Image::m_windowWidth)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Integer.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Integer.cpp
index 84e0278..b715e5e 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Integer.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Integer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(Integer))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object >()
-        .property("value", (int fwData::Integer::*) &fwData::Integer::m_value)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object >()
+    .property("value", (int fwData::Integer::*) &fwData::Integer::m_value)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Line.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Line.cpp
index be60144..fc96a52 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Line.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Line.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(Line))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .property("position", &::fwData::Line::m_position)
-        .property("direction", &::fwData::Line::m_direction)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .property("position", &::fwData::Line::m_position)
+    .property("direction", &::fwData::Line::m_direction)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/List.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/List.cpp
index 90a4f72..897b2f6 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/List.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/List.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,8 +11,8 @@
 fwCampImplementDataMacro((fwData)(List))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .property("values", &::fwData::List::m_attrContainer)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .property("values", &::fwData::List::m_container)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Material.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Material.cpp
index 789edb5..7d2f5d5 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Material.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Material.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,42 +10,61 @@
 fwCampImplementDataMacro((fwData)(Material))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("shading_mode",&::fwData::Material::m_shadingMode)
-        .property("representation_mode",&::fwData::Material::m_representationMode)
-        .property("options_mode", &::fwData::Material::m_optionsMode)
-        .property("ambient",&::fwData::Material::m_ambient)
-        .property("diffuse",  &::fwData::Material::m_diffuse)
-        ;
+    .tag("object_version", "4")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("shading_mode",&::fwData::Material::m_shadingMode)
+    .property("representation_mode",&::fwData::Material::m_representationMode)
+    .property("options_mode", &::fwData::Material::m_optionsMode)
+    .property("ambient",&::fwData::Material::m_ambient)
+    .property("diffuse", &::fwData::Material::m_diffuse)
+    .property("diffuse_texture", &::fwData::Material::m_diffuseTexture)
+    .property("diffuse_texture_filtering", &::fwData::Material::m_diffuseTextureFiltering)
+    .property("diffuse_texture_wrapping", &::fwData::Material::m_diffuseTextureWrapping)
+    ;
+}
 
+fwCampImplementEnumMacro((fwData)(Material)(OptionsType))
+{
+    builder
+    .value("STANDARD", ::fwData::Material::STANDARD)
+    .value("NORMALS", ::fwData::Material::NORMALS)
+    .value("CELLS_NORMALS", ::fwData::Material::CELLS_NORMALS)
+    ;
 }
 
-fwCampImplementEnumMacro((fwData)(Material)(OPTIONS_MODE))
+fwCampImplementEnumMacro((fwData)(Material)(ShadingType))
 {
     builder
-        .value("STANDARD", ::fwData::Material::MODE_STANDARD)
-        .value("NORMALS", ::fwData::Material::MODE_NORMALS)
-        ;
+    .value("AMBIENT", ::fwData::Material::AMBIENT)
+    .value("FLAT", ::fwData::Material::FLAT)
+    .value("GOURAUD", ::fwData::Material::GOURAUD)
+    .value("PHONG", ::fwData::Material::PHONG)
+    ;
 }
 
-fwCampImplementEnumMacro((fwData)(Material)(SHADING_MODE))
+fwCampImplementEnumMacro((fwData)(Material)(RepresentationType))
 {
     builder
-        .value("FLAT", ::fwData::Material::MODE_FLAT)
-        .value("GOURAUD", ::fwData::Material::MODE_GOURAUD)
-        .value("PHONG", ::fwData::Material::MODE_PHONG)
-        ;
+    .value("SURFACE",  ::fwData::Material::SURFACE)
+    .value("POINT",  ::fwData::Material::POINT )
+    .value("WIREFRAME",  ::fwData::Material::WIREFRAME)
+    .value("EDGE",  ::fwData::Material::EDGE)
+    ;
 }
 
-fwCampImplementEnumMacro((fwData)(Material)(REPRESENTATION_MODE))
+fwCampImplementEnumMacro((fwData)(Material)(FilteringType))
 {
     builder
-        .value("SURFACE",  ::fwData::Material::MODE_SURFACE)
-        .value("POINT",  ::fwData::Material::MODE_POINT )
-        .value("WIREFRAME",  ::fwData::Material::MODE_WIREFRAME)
-        .value("EDGE",  ::fwData::Material::MODE_EDGE)
-        ;
+    .value("NEAREST", ::fwData::Material::NEAREST)
+    .value("LINEAR", ::fwData::Material::LINEAR)
+    ;
 }
 
+fwCampImplementEnumMacro((fwData)(Material)(WrappingType))
+{
+    builder
+    .value("CLAMP", ::fwData::Material::CLAMP)
+    .value("REPEAT", ::fwData::Material::REPEAT)
+    ;
+}
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Mesh.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Mesh.cpp
index dabb8de..c7001fb 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Mesh.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Mesh.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,19 +10,22 @@
 fwCampImplementDataMacro((fwData)(Mesh))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("nb_points"        , &::fwData::Mesh::m_nbPoints)
-        .property("nb_cells"         , &::fwData::Mesh::m_nbCells)
-        .property("cells_data_size"   , &::fwData::Mesh::m_cellsDataSize)
-        .property("points"          , &::fwData::Mesh::m_points)
-        .property("cell_types"       , &::fwData::Mesh::m_cellTypes)
-        .property("cell_data"       , &::fwData::Mesh::m_cellData)
-        .property("cell_data_offsets" , &::fwData::Mesh::m_cellDataOffsets)
-        .property("point_colors"     , &::fwData::Mesh::m_pointColors)
-        .property("cell_colors"      , &::fwData::Mesh::m_cellColors)
-        .property("point_normals"    , &::fwData::Mesh::m_pointNormals)
-        .property("cell_normals"     , &::fwData::Mesh::m_cellNormals)
-        ;
+    .tag("object_version", "3")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("nb_points", &::fwData::Mesh::m_nbPoints)
+    .property("nb_cells", &::fwData::Mesh::m_nbCells)
+    .property("cells_data_size", &::fwData::Mesh::m_cellsDataSize)
+    .property("points", &::fwData::Mesh::m_points)
+    .property("cell_types", &::fwData::Mesh::m_cellTypes)
+    .property("cell_data", &::fwData::Mesh::m_cellData)
+    .property("cell_data_offsets", &::fwData::Mesh::m_cellDataOffsets)
+    .property("point_colors", &::fwData::Mesh::m_pointColors)
+    .property("cell_colors", &::fwData::Mesh::m_cellColors)
+    .property("point_normals", &::fwData::Mesh::m_pointNormals)
+    .property("cell_normals", &::fwData::Mesh::m_cellNormals)
+    .property("point_tex_coords", &::fwData::Mesh::m_pointTexCoords)
+    .property("cell_tex_coords", &::fwData::Mesh::m_cellTexCoords)
+    .property("array_map", &::fwData::Mesh::m_arrayMap)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Model.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Model.cpp
deleted file mode 100644
index 0ba221e..0000000
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Model.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Model.hpp>
-
-#include <fwCamp/UserObject.hpp>
-
-fwCampImplementDataMacro((fwData)(Model))
-{
-    builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        // .property("map", &::fwData::Model::m_map)
-        ;
-}
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Node.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Node.cpp
index c522f0b..f0e19c3 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Node.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Node.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,12 +10,12 @@
 fwCampImplementDataMacro((fwData)(Node))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("object", &::fwData::Node::m_object)
-        .property("inputs", &::fwData::Node::m_inputs)
-        .property("outputs", &::fwData::Node::m_outputs)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("object", &::fwData::Node::m_object)
+    .property("inputs", &::fwData::Node::m_inputs)
+    .property("outputs", &::fwData::Node::m_outputs)
+    ;
 }
 
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Object.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Object.cpp
index 92087aa..1b7ef60 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Object.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Object.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,8 +11,8 @@
 fwCampImplementDataMacro((fwData)(Object))
 {
     builder
-        .property("fields", &::fwData::Object::m_fields)
-        .function("classname", (std::string (fwData::Object::*)() const) &::fwData::Object::className)
-        .function("is_a", (bool (fwData::Object::*)(const std::string &) const) &::fwData::Object::isA)
-        ;
+    .property("fields", &::fwData::Object::m_fields)
+    .function("classname", (std::string (fwData::Object::*)() const) &::fwData::Object::className)
+    .function("is_a", (bool (fwData::Object::*)(const std::string &) const) &::fwData::Object::isA)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Plane.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Plane.cpp
index ab26f81..b6381d5 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Plane.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Plane.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,11 +11,10 @@
 fwCampImplementDataMacro((fwData)(Plane))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("plane", &::fwData::Plane::m_plane)
-        .property("points", &::fwData::Plane::m_vPoints)
-        .property("intersection", &::fwData::Plane::m_isIntersection)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("points", &::fwData::Plane::m_vPoints)
+    .property("intersection", &::fwData::Plane::m_isIntersection)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/PlaneList.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/PlaneList.cpp
index 3f549d9..322b85a 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/PlaneList.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/PlaneList.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,8 +11,8 @@
 fwCampImplementDataMacro((fwData)(PlaneList))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("planes", &::fwData::PlaneList::m_vPlanes);
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("planes", &::fwData::PlaneList::m_vPlanes);
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/PointList.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/PointList.cpp
index 799ced6..bf72c18 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/PointList.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/PointList.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(PointList))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("points", &::fwData::PointList::m_vPoints)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("points", &::fwData::PointList::m_vPoints)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Points.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Points.cpp
index 17684e7..db6805a 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Points.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Points.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,8 +11,8 @@
 fwCampImplementDataMacro((fwData)(Point))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
     .base< ::fwData::Object>()
     .property("coord", &::fwData::Point::m_vCoord);
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Port.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Port.cpp
index c644488..06e4b73 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Port.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Port.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,10 +11,10 @@
 fwCampImplementDataMacro((fwData)(Port))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("identifier", &::fwData::Port::m_identifier)
-        .property("type", &::fwData::Port::m_type)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("identifier", &::fwData::Port::m_identifier)
+    .property("type", &::fwData::Port::m_type)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/ProcessObject.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/ProcessObject.cpp
index 8e47308..d306b57 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/ProcessObject.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/ProcessObject.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,10 +11,10 @@
 fwCampImplementDataMacro((fwData)(ProcessObject))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object >()
-        .property("inputs", &fwData::ProcessObject::m_attrInputs)
-        .property("outputs", &fwData::ProcessObject::m_attrOutputs)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object >()
+    .property("inputs", &fwData::ProcessObject::m_inputs)
+    .property("outputs", &fwData::ProcessObject::m_outputs)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/ROITraits.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/ROITraits.cpp
index d33671e..a577899 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/ROITraits.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/ROITraits.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,12 +10,12 @@
 fwCampImplementDataMacro((fwData)(ROITraits))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("name", &::fwData::ROITraits::m_identifier)
-        .property("firstname", &::fwData::ROITraits::m_evaluatedExp)
-        .property("node", &::fwData::ROITraits::m_structureTraits)
-        .property("traits", &::fwData::ROITraits::m_maskOpNode)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("name", &::fwData::ROITraits::m_identifier)
+    .property("firstname", &::fwData::ROITraits::m_evaluatedExp)
+    .property("node", &::fwData::ROITraits::m_structureTraits)
+    .property("traits", &::fwData::ROITraits::m_maskOpNode)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Reconstruction.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Reconstruction.cpp
index b111b26..26005b5 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Reconstruction.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Reconstruction.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,14 +10,15 @@
 fwCampImplementDataMacro((fwData)(Reconstruction))
 {
     builder
-        .tag("object_version", "2")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("is_visible", &::fwData::Reconstruction::m_bIsVisible)
-        .property("organ_name", &::fwData::Reconstruction::m_sOrganName)
-        .property("structure_type", &::fwData::Reconstruction::m_sStructureType)
-        .property("material", &::fwData::Reconstruction::m_attrMaterial)
-        .property("image", &::fwData::Reconstruction::m_attrImage)
-        .property("mesh", &::fwData::Reconstruction::m_attrMesh)
-        ;
+    .tag("object_version", "3")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("is_visible", &::fwData::Reconstruction::m_bIsVisible)
+    .property("organ_name", &::fwData::Reconstruction::m_sOrganName)
+    .property("structure_type", &::fwData::Reconstruction::m_sStructureType)
+    .property("material", &::fwData::Reconstruction::m_material)
+    .property("image", &::fwData::Reconstruction::m_image)
+    .property("mesh", &::fwData::Reconstruction::m_mesh)
+    .property("volume", &::fwData::Reconstruction::m_computedMaskVolume)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/ReconstructionTraits.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/ReconstructionTraits.cpp
index 5dcc4c1..a1bc773 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/ReconstructionTraits.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/ReconstructionTraits.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,12 +10,12 @@
 fwCampImplementDataMacro((fwData)(ReconstructionTraits))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("name", &::fwData::ReconstructionTraits::m_identifier)
-        .property("mesh_node", &::fwData::ReconstructionTraits::m_meshOpNode)
-        .property("mask_node", &::fwData::ReconstructionTraits::m_maskOpNode)
-        .property("traits", &::fwData::ReconstructionTraits::m_structureTraits)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("name", &::fwData::ReconstructionTraits::m_identifier)
+    .property("mesh_node", &::fwData::ReconstructionTraits::m_meshOpNode)
+    .property("mask_node", &::fwData::ReconstructionTraits::m_maskOpNode)
+    .property("traits", &::fwData::ReconstructionTraits::m_structureTraits)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Resection.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Resection.cpp
index d91d25f..ade2e31 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Resection.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Resection.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,15 +10,15 @@
 fwCampImplementDataMacro((fwData)(Resection))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("name", &::fwData::Resection::m_name)
-        .property("plane_list", &::fwData::Resection::m_planeList)
-        .property("inputs", &::fwData::Resection::m_vInputs)
-        .property("outputs", &::fwData::Resection::m_vOutputs)
-        .property("is_safe_part", &::fwData::Resection::m_isSafePart)
-        .property("is_valid", &::fwData::Resection::m_isValid)
-        .property("is_visible", &::fwData::Resection::m_isVisible)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("name", &::fwData::Resection::m_name)
+    .property("plane_list", &::fwData::Resection::m_planeList)
+    .property("inputs", &::fwData::Resection::m_vInputs)
+    .property("outputs", &::fwData::Resection::m_vOutputs)
+    .property("is_safe_part", &::fwData::Resection::m_isSafePart)
+    .property("is_valid", &::fwData::Resection::m_isValid)
+    .property("is_visible", &::fwData::Resection::m_isVisible)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/ResectionDB.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/ResectionDB.cpp
index 5929fbc..79cbc85 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/ResectionDB.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/ResectionDB.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,10 +10,10 @@
 fwCampImplementDataMacro((fwData)(ResectionDB))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("safe_resection", &::fwData::ResectionDB::m_safeResection)
-        .property("resections", &::fwData::ResectionDB::m_attrResections)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("safe_resection", &::fwData::ResectionDB::m_safeResection)
+    .property("resections", &::fwData::ResectionDB::m_resections)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/String.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/String.cpp
index e166cf9..8ba3ea5 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/String.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/String.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(String))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object >()
-        .property("value", (std::string fwData::String::*) &fwData::String::m_value)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object >()
+    .property("value", (std::string fwData::String::*) &fwData::String::m_value)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraits.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraits.cpp
index 1651064..87d704b 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraits.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraits.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,47 +10,47 @@
 fwCampImplementDataMacro((fwData)(StructureTraits))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("property_type", &::fwData::StructureTraits::m_propertyType)
-        .property("type", &::fwData::StructureTraits::m_type)
-        .property("categories", &::fwData::StructureTraits::m_categories)
-        .property("color", &::fwData::StructureTraits::m_color)
-        .property("class", &::fwData::StructureTraits::m_class)
-        .property("native_exp", &::fwData::StructureTraits::m_nativeExp)
-        .property("native_geomertic_exp", &::fwData::StructureTraits::m_nativeGeometricExp)
-        .property("attachment_type", &::fwData::StructureTraits::m_attachmentType)
-        .property("anatomic_region", &::fwData::StructureTraits::m_anatomicRegion)
-        .property("property_category", &::fwData::StructureTraits::m_propertyCategory)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("property_type", &::fwData::StructureTraits::m_propertyType)
+    .property("type", &::fwData::StructureTraits::m_type)
+    .property("categories", &::fwData::StructureTraits::m_categories)
+    .property("color", &::fwData::StructureTraits::m_color)
+    .property("class", &::fwData::StructureTraits::m_class)
+    .property("native_exp", &::fwData::StructureTraits::m_nativeExp)
+    .property("native_geomertic_exp", &::fwData::StructureTraits::m_nativeGeometricExp)
+    .property("attachment_type", &::fwData::StructureTraits::m_attachmentType)
+    .property("anatomic_region", &::fwData::StructureTraits::m_anatomicRegion)
+    .property("property_category", &::fwData::StructureTraits::m_propertyCategory)
+    ;
 }
 
 fwCampImplementEnumMacro((fwData)(StructureTraits)(Category))
 {
     builder
-        .value("BODY",  ::fwData::StructureTraits::BODY)
-        .value("HEAD",  ::fwData::StructureTraits::HEAD )
-        .value("NECK",  ::fwData::StructureTraits::NECK)
-        .value("THORAX",  ::fwData::StructureTraits::THORAX)
-        .value("ABDOMEN",  ::fwData::StructureTraits::ABDOMEN)
-        .value("PELVIS",  ::fwData::StructureTraits::PELVIS)
-        .value("ARM",  ::fwData::StructureTraits::ARM)
-        .value("LEG",  ::fwData::StructureTraits::LEG)
-        .value("LIVER_SEGMENTS",  ::fwData::StructureTraits::LIVER_SEGMENTS)
-        .value("OTHER",  ::fwData::StructureTraits::OTHER)
-        ;
+    .value("BODY",  ::fwData::StructureTraits::BODY)
+    .value("HEAD",  ::fwData::StructureTraits::HEAD )
+    .value("NECK",  ::fwData::StructureTraits::NECK)
+    .value("THORAX",  ::fwData::StructureTraits::THORAX)
+    .value("ABDOMEN",  ::fwData::StructureTraits::ABDOMEN)
+    .value("PELVIS",  ::fwData::StructureTraits::PELVIS)
+    .value("ARM",  ::fwData::StructureTraits::ARM)
+    .value("LEG",  ::fwData::StructureTraits::LEG)
+    .value("LIVER_SEGMENTS",  ::fwData::StructureTraits::LIVER_SEGMENTS)
+    .value("OTHER",  ::fwData::StructureTraits::OTHER)
+    ;
 }
 
 fwCampImplementEnumMacro((fwData)(StructureTraits)(StructureClass))
 {
     builder
-        .value("TOOL",  ::fwData::StructureTraits::TOOL)
-        .value("ENVIRONMENT",  ::fwData::StructureTraits::ENVIRONMENT )
-        .value("VESSEL",  ::fwData::StructureTraits::VESSEL)
-        .value("LESION",  ::fwData::StructureTraits::LESION)
-        .value("ORGAN",  ::fwData::StructureTraits::ORGAN)
-        .value("FUNCTIONAL",  ::fwData::StructureTraits::FUNCTIONAL)
-        .value("NO_CONSTRAINT",  ::fwData::StructureTraits::NO_CONSTRAINT)
-        ;
+    .value("TOOL",  ::fwData::StructureTraits::TOOL)
+    .value("ENVIRONMENT",  ::fwData::StructureTraits::ENVIRONMENT )
+    .value("VESSEL",  ::fwData::StructureTraits::VESSEL)
+    .value("LESION",  ::fwData::StructureTraits::LESION)
+    .value("ORGAN",  ::fwData::StructureTraits::ORGAN)
+    .value("FUNCTIONAL",  ::fwData::StructureTraits::FUNCTIONAL)
+    .value("NO_CONSTRAINT",  ::fwData::StructureTraits::NO_CONSTRAINT)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraitsDictionary.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraitsDictionary.cpp
index 3003c72..3a685f0 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraitsDictionary.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/StructureTraitsDictionary.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(StructureTraitsDictionary))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("structureTraits", &::fwData::StructureTraitsDictionary::m_structureTraitsMap)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("structureTraits", &::fwData::StructureTraitsDictionary::m_structureTraitsMap)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Tag.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Tag.cpp
index 9bd1482..0919d66 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Tag.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Tag.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,11 +10,11 @@
 fwCampImplementDataMacro((fwData)(Tag))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("point_list", &::fwData::Tag::m_pointList)
-        .property("type", &::fwData::Tag::m_sType)
-        .property("size", &::fwData::Tag::m_size)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("point_list", &::fwData::Tag::m_pointList)
+    .property("type", &::fwData::Tag::m_sType)
+    .property("size", &::fwData::Tag::m_size)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/TransferFunction.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/TransferFunction.cpp
index b56ac2c..e7e9c8c 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/TransferFunction.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/TransferFunction.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,23 +12,23 @@
 fwCampImplementDataMacro((fwData)(TransferFunction))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("level", &::fwData::TransferFunction::m_attrLevel)
-        .property("window", &::fwData::TransferFunction::m_attrWindow)
-        .property("name", &::fwData::TransferFunction::m_attrName)
-        .property("background_color", &::fwData::TransferFunction::m_attrBackgroundColor)
-        .property("tf_data", &::fwData::TransferFunction::m_tfData)
-        .property("interpolation_mode", &::fwData::TransferFunction::m_attrInterpolationMode)
-        .property("is_clamped", &::fwData::TransferFunction::m_attrIsClamped)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("level", &::fwData::TransferFunction::m_level)
+    .property("window", &::fwData::TransferFunction::m_window)
+    .property("name", &::fwData::TransferFunction::m_name)
+    .property("background_color", &::fwData::TransferFunction::m_backgroundColor)
+    .property("tf_data", &::fwData::TransferFunction::m_tfData)
+    .property("interpolation_mode", &::fwData::TransferFunction::m_interpolationMode)
+    .property("is_clamped", &::fwData::TransferFunction::m_isClamped)
+    ;
 }
 
 fwCampImplementEnumMacro((fwData)(TransferFunction)(InterpolationMode))
 {
     builder
-        .value("LINEAR",  ::fwData::TransferFunction::LINEAR)
-        .value("NEAREST",  ::fwData::TransferFunction::NEAREST)
-        ;
+    .value("LINEAR",  ::fwData::TransferFunction::LINEAR)
+    .value("NEAREST",  ::fwData::TransferFunction::NEAREST)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/TransformationMatrix3D.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/TransformationMatrix3D.cpp
index c8c7496..f295cf8 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/TransformationMatrix3D.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/TransformationMatrix3D.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,9 @@
 fwCampImplementDataMacro((fwData)(TransformationMatrix3D))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("coefficient", &::fwData::TransformationMatrix3D::m_vCoefficients)
-        ;
+    .tag("object_version", "2")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("coefficient", &::fwData::TransformationMatrix3D::m_vCoefficients)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Vector.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Vector.cpp
index 2802c4c..3f9af2a 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Vector.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Vector.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,8 +11,8 @@
 fwCampImplementDataMacro((fwData)(Vector))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("values", &::fwData::Vector::m_attrContainer);
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("values", &::fwData::Vector::m_container);
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Version.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Version.cpp
index 76ee82d..d3fd110 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Version.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/Version.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,5 +8,5 @@
 
 namespace fwDataCamp
 {
-    const int Version::s_CURRENT_VERSION = 1;
+const int Version::s_CURRENT_VERSION = 1;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/Video.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/Video.cpp
deleted file mode 100644
index 215da6a..0000000
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/Video.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCamp/UserObject.hpp>
-#include "fwDataCamp/Video.hpp"
-
-fwCampImplementDataMacro((fwData)(Video))
-{
-    builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object >()
-        .property("data_available",&fwData::Video::m_dataAvailable)
-        .property("last_modified",&fwData::Video::m_lastModified)
-        .property("camera",&fwData::Video::m_camera)
-        ;
-}
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/NullPointer.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/NullPointer.cpp
index 547b887..f4a6095 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/NullPointer.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/NullPointer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 NullPointer::NullPointer ( const std::string &err ) : ::fwCore::Exception(err)
-{}
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/ObjectNotFound.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/ObjectNotFound.cpp
index b7e6a85..bc86363 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/ObjectNotFound.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/exception/ObjectNotFound.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 ObjectNotFound::ObjectNotFound ( const std::string &err ) : ::fwCore::Exception(err)
-{}
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/getObject.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/getObject.cpp
index e5033c6..f00d139 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/getObject.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/getObject.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,13 +16,13 @@
 namespace fwDataCamp
 {
 
-::fwData::Object::sptr getObject( ::fwData::Object::sptr object,
-                                     const std::string &path,
-                                     bool raiseException )
+::fwData::Object::sptr getObject( ::fwData::Object::csptr object,
+                                  const std::string& path,
+                                  bool raiseException )
 {
     SLM_FATAL_IF( "Path for desired object is empty.", path.empty() );
     SLM_FATAL_IF( "Path for desired object doesn't start with '@'.", path[0] != '@' );
-    const std::string objectPath =  path.substr( 1 );
+    const std::string objectPath = path.substr( 1 );
     ::fwDataCamp::visitor::GetObject visitor( object, objectPath );
     ::fwData::Object::sptr subObject;
     try
@@ -35,8 +35,8 @@ namespace fwDataCamp
     }
 
     FW_RAISE_EXCEPTION_IF(
-            ::fwDataCamp::exception::ObjectNotFound("Object '" + path + "' not found."),
-            !visitor.objectsFound() && raiseException);
+        ::fwDataCamp::exception::ObjectNotFound("Object '" + path + "' not found."),
+        !visitor.objectsFound() && raiseException);
 
     return subObject;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/location/Folder.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/location/Folder.cpp
index e7b4c57..fea909c 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/location/Folder.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/location/Folder.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,10 +12,10 @@
 fwCampImplementDataMacro((fwData)(location)(Folder))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .base< ::fwData::Object>()
-        .property("folder", &::fwData::location::Folder::m_folder)
-        .property("recursive", &::fwData::location::Folder::m_isRecursive)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .base< ::fwData::Object>()
+    .property("folder", &::fwData::location::Folder::m_folder)
+    .property("recursive", &::fwData::location::Folder::m_isRecursive)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/location/SingleFile.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/location/SingleFile.cpp
index 4d2b520..7151a59 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/location/SingleFile.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/location/SingleFile.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,8 +10,8 @@
 fwCampImplementDataMacro((fwData)(location)(SingleFile))
 {
     builder.base< ::fwData::Object>()
-        .tag("object_version", "1")
-        .tag("lib_name", "fwData")
-        .property("path", &::fwData::location::SingleFile::m_path)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwData")
+    .property("path", &::fwData::location::SingleFile::m_path)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/CompareObjects.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/CompareObjects.cpp
index afdafe0..4655121 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/CompareObjects.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/CompareObjects.cpp
@@ -1,22 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <string>
-
-#include <boost/foreach.hpp>
-#include <boost/functional/hash.hpp>
+#include "fwDataCamp/visitor/CompareObjects.hpp"
 
 #include <fwCore/Exception.hpp>
-
 #include <fwData/camp/mapper.hpp>
-
 #include <fwMemory/BufferObject.hpp>
 
-#include "fwDataCamp/visitor/CompareObjects.hpp"
-
+#include <boost/functional/hash.hpp>
+#include <string>
 
 namespace fwDataCamp
 {
@@ -34,11 +29,13 @@ struct PropertyVisitor : public camp::ValueVisitor< PropType >
     SPTR(CompareObjects::PropsMapType) m_props;
 
     PropertyVisitor(std::string prefix) : m_prefix(prefix)
-    {}
+    {
+    }
 
-    PropertyVisitor(std::string prefix, SPTR(CompareObjects::PropsMapType) props)
+    PropertyVisitor(std::string prefix, SPTR(CompareObjects::PropsMapType)props)
         : m_prefix(prefix), m_props(props)
-    {}
+    {
+    }
 
     PropType operator()(camp::NoType value)
     {
@@ -62,12 +59,12 @@ struct PropertyVisitor : public camp::ValueVisitor< PropType >
 
     PropType operator()(const std::string& value)
     {
-        return std::make_pair(m_prefix, ::boost::lexical_cast<std::string>(value));
+        return std::make_pair(m_prefix, value);
     }
 
     PropType operator()(const camp::EnumObject& value)
     {
-        return std::make_pair(value.name(), value.name());
+        return std::make_pair(m_prefix, value.name());
     }
 
     PropType operator()(const camp::UserObject& value)
@@ -93,8 +90,8 @@ struct PropertyVisitor : public camp::ValueVisitor< PropType >
                     ::fwMemory::BufferObject::Lock lock = bo->lock();
                     if(lock.getBuffer())
                     {
-                        char* buffer = static_cast< char* >(lock.getBuffer());
-                        std::size_t seed = 0;
+                        char* buffer               = static_cast< char* >(lock.getBuffer());
+                        std::size_t seed           = 0;
                         const std::size_t buffsize = bo->getSize();
                         for(size_t i = 0; i < buffsize; ++i)
                         {
@@ -128,13 +125,16 @@ CompareObjects::CompareObjects()
 //-----------------------------------------------------------------------------
 
 CompareObjects::CompareObjects(
-        const ::camp::UserObject& obj, const std::string& prefix, SPTR(PropsMapType) props)
+    const ::camp::UserObject& obj, const std::string& prefix, SPTR(PropsMapType)props)
     : m_campObj(obj), m_prefix(prefix), m_props(props)
-{}
+{
+}
+
 //-----------------------------------------------------------------------------
 
 CompareObjects::~CompareObjects()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -157,8 +157,15 @@ void CompareObjects::visit(const camp::SimpleProperty& property)
 void CompareObjects::visit(const camp::EnumProperty& property)
 {
     SLM_TRACE_FUNC();
-    m_props->insert(m_props->end(),
-            std::make_pair(getPath(property.name()), ""));
+    const std::string name ( property.name() );
+    ::camp::Value elemValue = property.get(m_campObj);
+
+    PropertyVisitor visitor(getPath(name), m_props);
+    PropType pt = elemValue.visit(visitor);
+    if(!pt.first.empty())
+    {
+        m_props->insert(m_props->end(), pt);
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -169,13 +176,11 @@ void CompareObjects::visit(const camp::MapProperty& property)
     const std::string name(property.name());
     OSLM_DEBUG("MapProperty name = " << name);
 
-    OSLM_DEBUG( "Ok MapProperty name =" << name );
-
     std::pair< ::camp::Value, ::camp::Value > value;
     std::string mapKey;
     for (unsigned int i = 0; i < property.getSize(m_campObj); ++i)
     {
-        value = property.getElement(m_campObj, i);
+        value  = property.getElement(m_campObj, i);
         mapKey = value.first.to< std::string >();
         PropertyVisitor visitor(getPath(name + "." + mapKey), m_props);
         PropType pt = value.second.visit(visitor);
@@ -244,18 +249,18 @@ std::string CompareObjects::getPath(const std::string& property) const
 
 //-----------------------------------------------------------------------------
 
-void CompareObjects::compare(SPTR(::fwData::Object) objRef, SPTR(::fwData::Object) objComp)
-    throw (::fwCore::Exception)
+void CompareObjects::compare(SPTR(::fwData::Object)objRef, SPTR(::fwData::Object)objComp)
+throw (::fwCore::Exception)
 {
     if(objRef->getClassname() != objComp->getClassname())
     {
         std::stringstream ss;
         ss << "Classnames mismatch : '" << objRef->getClassname() << "' (reference object) vs. '"
-            << objComp->getClassname() << "' (compared object)";
+           << objComp->getClassname() << "' (compared object)";
         throw ::fwCore::Exception(ss.str());
     }
 
-    m_objRef = objRef;
+    m_objRef  = objRef;
     m_objComp = objComp;
 
     SLM_ASSERT("Reference object not defined", m_objRef);
@@ -272,7 +277,7 @@ void CompareObjects::compare(SPTR(::fwData::Object) objRef, SPTR(::fwData::Objec
     m_propsComp = ::boost::move(*m_props);
     m_props->clear();
 
-    BOOST_FOREACH(PropsMapType::value_type prop, m_propsComp)
+    for(PropsMapType::value_type prop :  m_propsComp)
     {
         if(m_propsRef.find(prop.first) != m_propsRef.end())
         {
@@ -287,7 +292,7 @@ void CompareObjects::compare(SPTR(::fwData::Object) objRef, SPTR(::fwData::Objec
         }
     }
 
-    BOOST_FOREACH(PropsMapType::value_type prop, m_propsRef)
+    for(PropsMapType::value_type prop :  m_propsRef)
     {
         if(m_propsComp.find(prop.first) == m_propsComp.end() && m_props->find(prop.first) == m_props->end())
         {
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/GetObject.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/GetObject.cpp
index b885f7d..631006a 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/GetObject.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/GetObject.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/shared_ptr.hpp>
 #include <boost/utility/enable_if.hpp>
 
 #include <fwData/camp/mapper.hpp>
@@ -29,9 +28,10 @@ struct GetCampValueVisitor : public camp::ValueVisitor< ::fwData::Object::sptr >
     std::string m_subObjPath;
     PathVisitor::sptr m_pathVisitor;
 
-    GetCampValueVisitor( const std::string & subObjPath, PathVisitor::sptr pathVisitor) :
+    GetCampValueVisitor( const std::string& subObjPath, PathVisitor::sptr pathVisitor) :
         m_subObjPath(subObjPath), m_pathVisitor(pathVisitor)
-    {}
+    {
+    }
 
     ::fwData::Object::sptr operator()(camp::NoType value)
     {
@@ -73,47 +73,49 @@ struct GetCampValueVisitor : public camp::ValueVisitor< ::fwData::Object::sptr >
         const camp::Class& metaclass = value.getClass();
         if ( value.pointer() )
         {
-            if ( ! m_subObjPath.empty() )
+            if ( !m_subObjPath.empty() )
             {
-                OSLM_DEBUG( "visit class= '" << metaclass.name() << "' ( classname = '"<< value.call("classname") <<"' )" );
-                ::fwData::Object * ptr = value.get< ::fwData::Object * >();
+                OSLM_DEBUG( "visit class= '" << metaclass.name() << "' ( classname = '"<< value.call(
+                                "classname") <<"' )" );
+                ::fwData::Object* ptr = value.get< ::fwData::Object* >();
                 ::fwDataCamp::visitor::GetObject visitor( ptr->getSptr(), m_subObjPath );
                 val = visitor.get();
                 m_pathVisitor->merge(visitor.getPathVisitor());
             }
             else
             {
-                ::fwData::Object * ptr = value.get< ::fwData::Object * >();
-                val = ptr->getSptr();
+                ::fwData::Object* ptr = value.get< ::fwData::Object* >();
+                val                   = ptr->getSptr();
             }
         }
         else
         {
             FW_RAISE_EXCEPTION( ::fwDataCamp::exception::NullPointer(
-                    "Object '" + metaclass.name() + "' not instanced.")
-            );
+                                    "Object '" + metaclass.name() + "' not instanced.")
+                                );
         }
 
         return val;
     }
- };
+};
 
 //-----------------------------------------------------------------------------
 
-GetObject::GetObject( ::fwData::Object::sptr object, const std::string & subObjPath ) :
-        m_object(object), m_subObjPath(subObjPath),
-        m_newSubObjPath(subObjPath),
-        m_pathVisitor(::boost::make_shared<PathVisitor>(subObjPath))
+GetObject::GetObject( ::fwData::Object::csptr object, const std::string& subObjPath ) :
+    m_object(object), m_subObjPath(subObjPath),
+    m_newSubObjPath(subObjPath),
+    m_pathVisitor(std::make_shared<PathVisitor>(subObjPath))
 {
     SLM_FATAL_IF("Cannot retrieve an object with an empty path.", subObjPath.empty());
-    m_campObj = camp::UserObject( object.get() );
+    m_campObj      = camp::UserObject( *object );
     m_propertyName = this->getNextPropertyName();
 }
 
 //-----------------------------------------------------------------------------
 
 GetObject::~GetObject()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -138,7 +140,7 @@ void GetObject::visit(const camp::EnumProperty& property)
 {
     SLM_TRACE_FUNC();
     OSLM_FATAL_IF( "EnumProperty is not still managed : name =" <<  property.name(),
-            property.name() == m_propertyName );
+                   property.name() == m_propertyName );
 }
 
 //-----------------------------------------------------------------------------
@@ -158,7 +160,7 @@ void GetObject::visit(const camp::MapProperty& property)
         std::string mapKey;
         for (unsigned int var = 0; var < property.getSize(m_campObj); ++var)
         {
-            value = property.getElement(m_campObj, var);
+            value  = property.getElement(m_campObj, var);
             mapKey = value.first.to< std::string >();
             if ( key == mapKey )
             {
@@ -185,10 +187,23 @@ void GetObject::visit(const camp::ArrayProperty& property)
 
         size_t index = ::boost::lexical_cast< size_t >( key );
 
-        ::camp::Value elemValue = property.get( m_campObj, index );
+        m_pathVisitor->addObject(key);
+
+        // If the index is out of range, camp throws an exception
+        // We need to catch it because this means we failed to reach the object
+        ::camp::Value elemValue;
+        try
+        {
+            elemValue = property.get( m_campObj, index );
+        }
+        catch(::camp::OutOfRange e)
+        {
+            FW_RAISE_EXCEPTION_MSG( ::fwDataCamp::exception::NullPointer,
+                                    "Index '" << index << "' not found in array property '" << name << "'.");
+        }
+
         GetCampValueVisitor visitor(m_newSubObjPath, m_pathVisitor);
         m_subObject = elemValue.visit( visitor );
-        m_pathVisitor->addObject(key);
     }
 }
 
@@ -225,12 +240,12 @@ std::string GetObject::getNextPropertyName()
     std::string nextItem;
     if ( dotPos != std::string::npos )
     {
-        nextItem = m_newSubObjPath.substr( 0, dotPos );
+        nextItem        = m_newSubObjPath.substr( 0, dotPos );
         m_newSubObjPath = m_newSubObjPath.substr( dotPos+1 );
     }
     else
     {
-        nextItem = m_newSubObjPath;
+        nextItem        = m_newSubObjPath;
         m_newSubObjPath = "";
     }
     OSLM_DEBUG( "nextItem = " << nextItem );
diff --git a/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/RecursiveLock.cpp b/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/RecursiveLock.cpp
index a77fd23..734f8af 100644
--- a/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/RecursiveLock.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwDataCamp/visitor/RecursiveLock.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/shared_ptr.hpp>
-#include <boost/make_shared.hpp>
 
 #include <fwCore/mt/types.hpp>
 
@@ -30,26 +28,33 @@ struct LockVisitor : public camp::ValueVisitor< void >
 {
     SPTR(RecursiveLock::LockVectType) m_locks;
 
-    LockVisitor(SPTR(RecursiveLock::LockVectType) locks) : m_locks(locks)
-    {}
+    LockVisitor(SPTR(RecursiveLock::LockVectType)locks) : m_locks(locks)
+    {
+    }
 
     void operator()(camp::NoType value)
-    {}
+    {
+    }
 
     void operator()(bool value)
-    {}
+    {
+    }
 
     void operator()(long value)
-    {}
+    {
+    }
 
     void operator()(double value)
-    {}
+    {
+    }
 
     void operator()(const std::string& value)
-    {}
+    {
+    }
 
     void operator()(const camp::EnumObject& value)
-    {}
+    {
+    }
 
     void operator()(const camp::UserObject& value)
     {
@@ -61,30 +66,30 @@ struct LockVisitor : public camp::ValueVisitor< void >
             {
                 if( value.call("is_a", ::camp::Args("::fwData::Object")).to<bool>() )
                 {
-                    ::fwData::Object * ptr = value.get< ::fwData::Object * >();
+                    ::fwData::Object * ptr     = value.get< ::fwData::Object * >();
                     ::fwData::Object::sptr obj = ptr->getSptr();
                     ::fwDataCamp::visitor::RecursiveLock visitor( obj, m_locks );
                 }
                 else if( value.call("is_a", ::camp::Args("::fwMemory::BufferObject")).to<bool>() )
                 {
-                    ::fwMemory::BufferObject * ptr = value.get< ::fwMemory::BufferObject * >();
+                    ::fwMemory::BufferObject * ptr    = value.get< ::fwMemory::BufferObject * >();
                     ::fwMemory::BufferObject::sptr bo = ptr->getSptr();
                     SPTR(::fwCore::mt::ReadLock) lock
-                            = SPTR(::fwCore::mt::ReadLock)(new ::fwCore::mt::ReadLock(bo->getMutex()));
+                        = SPTR(::fwCore::mt::ReadLock)(new ::fwCore::mt::ReadLock(bo->getMutex()));
                     m_locks->push_back(lock);
                 }
             }
         }
     }
- };
+};
 
 //-----------------------------------------------------------------------------
 
-RecursiveLock::RecursiveLock( ::fwData::Object::sptr object, SPTR(LockVectType) locks ) :
-        m_object(object), m_locks(locks)
+RecursiveLock::RecursiveLock( ::fwData::Object::sptr object, SPTR(LockVectType)locks ) :
+    m_object(object), m_locks(locks)
 {
     SPTR(::fwCore::mt::ReadLock) lock
-            = SPTR(::fwCore::mt::ReadLock)(new ::fwCore::mt::ReadLock(m_object->getMutex()));
+        = SPTR(::fwCore::mt::ReadLock)(new ::fwCore::mt::ReadLock(m_object->getMutex()));
     m_locks->push_back(lock);
     m_campObj = camp::UserObject( object.get() );
     this->lock();
@@ -93,17 +98,20 @@ RecursiveLock::RecursiveLock( ::fwData::Object::sptr object, SPTR(LockVectType)
 //-----------------------------------------------------------------------------
 
 RecursiveLock::~RecursiveLock()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void RecursiveLock::visit(const camp::SimpleProperty& property)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void RecursiveLock::visit(const camp::EnumProperty& property)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -120,13 +128,13 @@ void RecursiveLock::visit(const camp::MapProperty& property)
     {
         value = property.getElement(m_campObj, var);
 
-        first = value.first;
+        first  = value.first;
         second = value.second;
 
         SLM_ASSERT("Not managed type for map key.",
-                first.type() == ::camp::stringType ||
-                first.type() == ::camp::intType ||
-                first.type() == ::camp::realType );
+                   first.type() == ::camp::stringType ||
+                   first.type() == ::camp::intType ||
+                   first.type() == ::camp::realType );
 
         if ( second.type() == ::camp::userType )
         {
@@ -173,7 +181,6 @@ void RecursiveLock::visit(const camp::UserProperty& property)
 
 void RecursiveLock::visit(const camp::Function& function)
 {
-    SLM_TRACE_FUNC();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
index 133cf98..6f3e29c 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ActivitySeries.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,10 @@
 fwCampImplementDataMacro((fwMedData)(ActivitySeries))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwActivities")
-        .base< ::fwMedData::Series>()
-        .property("activity_config_id", &::fwMedData::ActivitySeries::m_attrActivityConfigId)
-        .property("data", &::fwMedData::ActivitySeries::m_attrData)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwActivities")
+    .base< ::fwMedData::Series>()
+    .property("activity_config_id", &::fwMedData::ActivitySeries::m_activityConfigId)
+    .property("data", &::fwMedData::ActivitySeries::m_data)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp
new file mode 100644
index 0000000..caae450
--- /dev/null
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/DicomSeries.cpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwMedDataCamp/DicomSeries.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwCamp/UserObject.hpp>
+
+//------------------------------------------------------------------------------
+
+fwCampImplementDataMacro((fwMedData)(DicomSeries))
+{
+    builder
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwMedData::Series>()
+    .property("dicom_availability", &::fwMedData::DicomSeries::m_dicomAvailability)
+    .property("number_of_instances", &::fwMedData::DicomSeries::m_numberOfInstances)
+    .property("local_dicom_paths", &::fwMedData::DicomSeries::m_localDicomPaths)
+    .property("dicom_binaries", &::fwMedData::DicomSeries::m_dicomBinaries)
+    .property("sop_class_uids", &::fwMedData::DicomSeries::m_SOPClassUIDs)
+    .property("computed_tag_values", &::fwMedData::DicomSeries::m_computedTagValues)
+    .property("first_instance_number", &::fwMedData::DicomSeries::m_firstInstanceNumber)
+    ;
+}
+
+
+fwCampImplementEnumMacro((fwMedData)(DicomSeries)(DICOM_AVAILABILITY))
+{
+    builder
+    .value("NONE",  ::fwMedData::DicomSeries::NONE)
+    .value("PATHS",  ::fwMedData::DicomSeries::PATHS)
+    .value("BINARIES",  ::fwMedData::DicomSeries::BINARIES)
+    .value("BLOB",  ::fwMedData::DicomSeries::BLOB)
+    ;
+}
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp
index 2fb9300..51a17cc 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Equipment.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,9 +13,9 @@
 fwCampImplementDataMacro((fwMedData)(Equipment))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwData::Object>()
-        .property("institution_name", &::fwMedData::Equipment::m_attrInstitutionName)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwData::Object>()
+    .property("institution_name", &::fwMedData::Equipment::m_institutionName)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
index a8b56af..f54c4ae 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ImageSeries.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@
 fwCampImplementDataMacro((fwMedData)(ImageSeries))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwMedData::Series>()
-        .property("image", &::fwMedData::ImageSeries::m_attrImage)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwMedData::Series>()
+    .property("image", &::fwMedData::ImageSeries::m_image)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp
index d7e0602..64a4588 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/ModelSeries.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,9 +14,9 @@
 fwCampImplementDataMacro((fwMedData)(ModelSeries))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwMedData::Series>()
-        .property("reconstruction_db", &::fwMedData::ModelSeries::m_attrReconstructionDB)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwMedData::Series>()
+    .property("reconstruction_db", &::fwMedData::ModelSeries::m_reconstructionDB)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp
index 9a88006..06b7037 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Patient.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,12 +13,12 @@
 fwCampImplementDataMacro((fwMedData)(Patient))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwData::Object>()
-        .property("name", &::fwMedData::Patient::m_attrName)
-        .property("patient_id", &::fwMedData::Patient::m_attrPatientId)
-        .property("birth_date", &::fwMedData::Patient::m_attrBirthdate)
-        .property("sex", &::fwMedData::Patient::m_attrSex)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwData::Object>()
+    .property("name", &::fwMedData::Patient::m_name)
+    .property("patient_id", &::fwMedData::Patient::m_patientId)
+    .property("birth_date", &::fwMedData::Patient::m_birthdate)
+    .property("sex", &::fwMedData::Patient::m_sex)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp
index 80cd28e..e5ebb7f 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Series.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,17 +18,17 @@
 fwCampImplementDataMacro((fwMedData)(Series))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwData::Object>()
-        .property("patient", &::fwMedData::Series::m_attrPatient)
-        .property("study", &::fwMedData::Series::m_attrStudy)
-        .property("equipment", &::fwMedData::Series::m_attrEquipment)
-        .property("instance_uid", &::fwMedData::Series::m_attrInstanceUID)
-        .property("modality", &::fwMedData::Series::m_attrModality)
-        .property("date", &::fwMedData::Series::m_attrDate)
-        .property("time", &::fwMedData::Series::m_attrTime)
-        .property("performing_physicians_name", &::fwMedData::Series::m_attrPerformingPhysiciansName)
-        .property("description", &::fwMedData::Series::m_attrDescription)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwData::Object>()
+    .property("patient", &::fwMedData::Series::m_patient)
+    .property("study", &::fwMedData::Series::m_study)
+    .property("equipment", &::fwMedData::Series::m_equipment)
+    .property("instance_uid", &::fwMedData::Series::m_instanceUID)
+    .property("modality", &::fwMedData::Series::m_modality)
+    .property("date", &::fwMedData::Series::m_date)
+    .property("time", &::fwMedData::Series::m_time)
+    .property("performing_physicians_name", &::fwMedData::Series::m_performingPhysiciansName)
+    .property("description", &::fwMedData::Series::m_description)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp
index 535eae5..7459127 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/SeriesDB.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,9 +14,9 @@
 fwCampImplementDataMacro((fwMedData)(SeriesDB))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwData::Object>()
-        .property("values", &::fwMedData::SeriesDB::m_attrContainer)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwData::Object>()
+    .property("values", &::fwMedData::SeriesDB::m_container)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp
index dbbe407..7a8af34 100644
--- a/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp
+++ b/SrcLib/core/fwDataCamp/src/fwMedDataCamp/Study.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,14 +13,14 @@
 fwCampImplementDataMacro((fwMedData)(Study))
 {
     builder
-        .tag("object_version", "1")
-        .tag("lib_name", "fwMedData")
-        .base< ::fwData::Object>()
-        .property("instance_uid", &::fwMedData::Study::m_attrInstanceUID)
-        .property("date", &::fwMedData::Study::m_attrDate)
-        .property("time", &::fwMedData::Study::m_attrTime)
-        .property("referring_physician_name", &::fwMedData::Study::m_attrReferringPhysicianName)
-        .property("description", &::fwMedData::Study::m_attrDescription)
-        .property("patient_age", &::fwMedData::Study::m_attrPatientAge)
-        ;
+    .tag("object_version", "1")
+    .tag("lib_name", "fwMedData")
+    .base< ::fwData::Object>()
+    .property("instance_uid", &::fwMedData::Study::m_instanceUID)
+    .property("date", &::fwMedData::Study::m_date)
+    .property("time", &::fwMedData::Study::m_time)
+    .property("referring_physician_name", &::fwMedData::Study::m_referringPhysicianName)
+    .property("description", &::fwMedData::Study::m_description)
+    .property("patient_age", &::fwMedData::Study::m_patientAge)
+    ;
 }
diff --git a/SrcLib/core/fwDataCamp/test/CMakeLists.txt b/SrcLib/core/fwDataCamp/test/CMakeLists.txt
index c7bb8af..dddc271 100644
--- a/SrcLib/core/fwDataCamp/test/CMakeLists.txt
+++ b/SrcLib/core/fwDataCamp/test/CMakeLists.txt
@@ -1,10 +1,13 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
-
+find_package(CAMP REQUIRED)
+
+fwInclude(
+    ${CAMP_INCLUDE_DIR}
+    ${CPPUNIT_INCLUDE_DIR}
+)
+fwLink(
+    ${CAMP_LIBRARIES}
+    ${CPPUNIT_LIBRARY}
+)
 
diff --git a/SrcLib/core/fwDataCamp/test/Properties.cmake b/SrcLib/core/fwDataCamp/test/Properties.cmake
index 4eb8ba7..b0a7fa8 100644
--- a/SrcLib/core/fwDataCamp/test/Properties.cmake
+++ b/SrcLib/core/fwDataCamp/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwDataCampTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwAtoms fwAtomConversion fwDataCamp )
+set( DEPENDENCIES fwCore fwTest fwTools fwAtoms fwAtomConversion fwDataCamp fwMedData fwData)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataCamp/test/cppunit.options b/SrcLib/core/fwDataCamp/test/cppunit.options
deleted file mode 100644
index f927969..0000000
--- a/SrcLib/core/fwDataCamp/test/cppunit.options
+++ /dev/null
@@ -1,15 +0,0 @@
-
-CLASSTEST=[
-    'GetObjectTest',
-    'ObjectTest',
-    'RecursiveLockTest',
-    'CompareObjectsTest',
-]
-
-LIB = [
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwDataCamp_0-1',
-       'fwTest_0-1',
-       ]
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/CompareObjectsTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/CompareObjectsTest.hpp
index 9b0f851..5676657 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/CompareObjectsTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/CompareObjectsTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,14 +16,14 @@ namespace ut
 
 class CompareObjectsTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( CompareObjectsTest );
-    CPPUNIT_TEST( compareSeriesDBTest );
-    CPPUNIT_TEST( compareImageTest );
-    CPPUNIT_TEST( compareReconstructionTest );
-    CPPUNIT_TEST( compareBufferTest );
-    CPPUNIT_TEST( compareEmpty );
-    CPPUNIT_TEST( exceptionTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( CompareObjectsTest );
+CPPUNIT_TEST( compareSeriesDBTest );
+CPPUNIT_TEST( compareImageTest );
+CPPUNIT_TEST( compareReconstructionTest );
+CPPUNIT_TEST( compareBufferTest );
+CPPUNIT_TEST( compareEmpty );
+CPPUNIT_TEST( exceptionTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/DataCampHelper.hpp b/SrcLib/core/fwDataCamp/test/tu/include/DataCampHelper.hpp
index 19ff9fc..22a953e 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/DataCampHelper.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/DataCampHelper.hpp
@@ -1,27 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __DATACAMPHELPER_HPP__
-#define __DATACAMPHELPER_HPP__
+#ifndef __FWDATACAMP_UT_DATACAMPHELPER_HPP__
+#define __FWDATACAMP_UT_DATACAMPHELPER_HPP__
 
 #include <fwData/Object.hpp>
 
 namespace DataCampHelper
 {
-    typedef std::vector<std::string> PropertiesNameType;
+typedef std::vector<std::string> PropertiesNameType;
 
-    void visitProperties(const std::string& className, const PropertiesNameType& vecProp);
+void visitProperties(const std::string& className, const PropertiesNameType& vecProp);
 
-    void compareSimplePropertyValue(::fwData::Object::sptr obj,
-                                           const std::string& propertyPath,
-                                           const std::string& value);
+void compareSimplePropertyValue(::fwData::Object::sptr obj,
+                                const std::string& propertyPath,
+                                const std::string& value);
 
-    void compareObjectPropertyValue(::fwData::Object::sptr obj,
-                                           const std::string& propertyPath,
-                                           ::fwData::Object::sptr value);
+void compareObjectPropertyValue(::fwData::Object::sptr obj,
+                                const std::string& propertyPath,
+                                ::fwData::Object::sptr value);
 }
 
-#endif // __DATACAMPHELPER_HPP__
+#endif // __FWDATACAMP_UT_DATACAMPHELPER_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/GetObjectTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/GetObjectTest.hpp
index 38c3df7..b6681c3 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/GetObjectTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/GetObjectTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,10 @@ namespace ut
 
 class GetObjectTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( GetObjectTest );
-    CPPUNIT_TEST( getTest );
-    CPPUNIT_TEST( invalidPathTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( GetObjectTest );
+CPPUNIT_TEST( getTest );
+CPPUNIT_TEST( invalidPathTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/ObjectTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/ObjectTest.hpp
index 390f1d7..be9ff3d 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/ObjectTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/ObjectTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class ObjectTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ObjectTest );
-    CPPUNIT_TEST( callFunctionTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ObjectTest );
+CPPUNIT_TEST( callFunctionTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/RecursiveLockTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/RecursiveLockTest.hpp
index 119fb8f..6d68c5c 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/RecursiveLockTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/RecursiveLockTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,6 +16,7 @@ namespace ut
 
 class RecursiveLockTest :  public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( RecursiveLockTest );
     CPPUNIT_TEST( lockTest );
     CPPUNIT_TEST_SUITE_END();
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp
index cdd7bdd..be88fdf 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ActivitySeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_ACTIVITYSERIESTEST_HPP__
-#define __FWMEDDATACAMP_UT_ACTIVITYSERIESTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_ACTIVITYSERIESTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_ACTIVITYSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class ActivitySeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ActivitySeriesTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ActivitySeriesTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_ACTIVITYSERIESTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_ACTIVITYSERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp
new file mode 100644
index 0000000..c46b296
--- /dev/null
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/DicomSeriesCampTest.hpp
@@ -0,0 +1,35 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwMedDataCamp
+{
+namespace ut
+{
+
+class DicomSeriesCampTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomSeriesCampTest );
+CPPUNIT_TEST(propertiesTest);
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void propertiesTest();
+};
+
+} //namespace ut
+} //namespace fwMedDataCamp
+
+#endif //__FWDATACAMP_UT_FWMEDDATACAMP_DICOMSERIESCAMPTEST_HPP__
+
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp
index e4698ea..3552b37 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/EquipmentTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_EQUIPMENTTEST_HPP__
-#define __FWMEDDATACAMP_UT_EQUIPMENTTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_EQUIPMENTTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_EQUIPMENTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class EquipmentTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( EquipmentTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( EquipmentTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_EQUIPMENTTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_EQUIPMENTTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp
index e69dec2..5d668dd 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ImageSeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_IMAGESERIESTEST_HPP__
-#define __FWMEDDATACAMP_UT_IMAGESERIESTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_IMAGESERIESTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_IMAGESERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class ImageSeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageSeriesTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageSeriesTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_IMAGESERIESTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_IMAGESERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp
index 6110963..166b208 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/ModelSeriesTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_MODELSERIESTEST_HPP__
-#define __FWMEDDATACAMP_UT_MODELSERIESTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_MODELSERIESTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_MODELSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class ModelSeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ModelSeriesTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ModelSeriesTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_MODELSERIESTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_MODELSERIESTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
index 5b7c54d..f903e3b 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/PatientTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_PATIENTTEST_HPP__
-#define __FWMEDDATACAMP_UT_PATIENTTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class PatientTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( PatientTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( PatientTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_PATIENTTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_PATIENTTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp
index 8eba020..b9d771a 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/SeriesDBTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_SERIESDBTEST_HPP__
-#define __FWMEDDATACAMP_UT_SERIESDBTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_SERIESDBTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_SERIESDBTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class SeriesDBTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesDBTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_SERIESDBTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_SERIESDBTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp
index 9151705..d0d2929 100644
--- a/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp
+++ b/SrcLib/core/fwDataCamp/test/tu/include/fwMedDataCamp/StudyTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATACAMP_UT_STUDYTEST_HPP__
-#define __FWMEDDATACAMP_UT_STUDYTEST_HPP__
+#ifndef __FWDATACAMP_UT_FWMEDDATACAMP_STUDYTEST_HPP__
+#define __FWDATACAMP_UT_FWMEDDATACAMP_STUDYTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class StudyTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( StudyTest );
-    CPPUNIT_TEST( propertiesTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( StudyTest );
+CPPUNIT_TEST( propertiesTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwMedDataCamp
 
-#endif // __FWMEDDATACAMP_UT_STUDYTEST_HPP__
+#endif // __FWDATACAMP_UT_FWMEDDATACAMP_STUDYTEST_HPP__
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp
index e271a4a..515687d 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/CompareObjectsTest.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/Exception.hpp>
 
@@ -54,7 +53,7 @@ void CompareObjectsTest::tearDown()
 
 void CompareObjectsTest::compareSeriesDBTest()
 {
-    ::fwMedData::SeriesDB::sptr seriesDBRef = ::fwTest::generator::SeriesDB::createSeriesDB(1, 1, 1);
+    ::fwMedData::SeriesDB::sptr seriesDBRef  = ::fwTest::generator::SeriesDB::createSeriesDB(1, 1, 1);
     ::fwMedData::SeriesDB::sptr seriesDBComp = ::fwData::Object::copy< ::fwMedData::SeriesDB >(seriesDBRef);
 
     {
@@ -98,18 +97,18 @@ void CompareObjectsTest::compareSeriesDBTest()
 
 void CompareObjectsTest::compareImageTest()
 {
-    ::fwTools::Type type = ::fwTools::Type::create< float >();
+    ::fwTools::Type type      = ::fwTools::Type::create< float >();
     ::fwData::Image::sptr img = ::fwData::Image::New();
     ::fwTest::generator::Image::generateRandomImage(img, type);
 
     ::fwData::Image::sptr imgComp = ::fwData::Object::copy(img);
 
     ::fwData::Image::SpacingType spacing = imgComp->getSpacing();
-    spacing[0] = 42;
+    spacing[0]                           = 42;
     imgComp->setSpacing(spacing);
 
     ::fwData::Image::OriginType origin = imgComp->getOrigin();
-    origin[2] = 1664;
+    origin[2]                          = 1664;
     imgComp->setOrigin(origin);
 
     visitor::CompareObjects visitor;
@@ -154,10 +153,10 @@ void CompareObjectsTest::compareReconstructionTest()
 
 void CompareObjectsTest::compareBufferTest()
 {
-    ::fwData::Image::sptr imgRef = ::fwData::Image::New();
+    ::fwData::Image::sptr imgRef  = ::fwData::Image::New();
     ::fwData::Image::sptr imgComp = ::fwData::Image::New();
 
-    ::fwTools::Type typeRef = ::fwTools::Type::create< float >();
+    ::fwTools::Type typeRef  = ::fwTools::Type::create< float >();
     ::fwTools::Type typeComp = ::fwTools::Type::create< double >();
 
     {
@@ -186,11 +185,11 @@ void CompareObjectsTest::compareBufferTest()
 
 void CompareObjectsTest::compareEmpty()
 {
-    ::fwData::Composite::sptr compRef = ::fwData::Composite::New();
+    ::fwData::Composite::sptr compRef  = ::fwData::Composite::New();
     ::fwData::Composite::sptr compComp = ::fwData::Composite::New();
 
     (*compRef)["float"] = ::fwData::Float::New(0.0f);
-    (*compComp)["int"] = ::fwData::Integer::New(0);
+    (*compComp)["int"]  = ::fwData::Integer::New(0);
 
     visitor::CompareObjects visitor;
     visitor.compare(compComp, compRef);
@@ -207,7 +206,7 @@ void CompareObjectsTest::compareEmpty()
 
 void CompareObjectsTest::exceptionTest()
 {
-    ::fwData::Image::sptr img = ::fwData::Image::New();
+    ::fwData::Image::sptr img      = ::fwData::Image::New();
     ::fwMedData::Study::sptr study = ::fwMedData::Study::New();
 
     visitor::CompareObjects visitor;
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/DataCampHelper.cpp b/SrcLib/core/fwDataCamp/test/tu/src/DataCampHelper.cpp
index af246b2..bf96611 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/DataCampHelper.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/DataCampHelper.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,10 +23,10 @@ void visitProperties(const std::string& className, const PropertiesNameType& vec
 {
     const ::camp::Class& metaClass = ::camp::classByName(className);
     CPPUNIT_ASSERT_EQUAL( vecProp.size(), metaClass.propertyCount());
-    BOOST_FOREACH(const std::string& property, vecProp)
+    for(const std::string& property :  vecProp)
     {
         CPPUNIT_ASSERT_MESSAGE("Missing property "+ property+" in "+className,
-                              metaClass.hasProperty(property));
+                               metaClass.hasProperty(property));
     }
 }
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp
index 8ff8438..e5e9e71 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/GetObjectTest.cpp
@@ -1,24 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/Image.hpp>
+#include <fwData/Composite.hpp>
 #include <fwData/Float.hpp>
-#include <fwData/String.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/Reconstruction.hpp>
-#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataCamp/getObject.hpp>
+#include <fwDataCamp/exception/NullPointer.hpp>
+#include <fwDataCamp/exception/ObjectNotFound.hpp>
 
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/Patient.hpp>
 
 #include <fwTest/generator/Image.hpp>
 
-#include <fwDataCamp/getObject.hpp>
-#include <fwDataCamp/exception/NullPointer.hpp>
-#include <fwDataCamp/exception/ObjectNotFound.hpp>
-
 #include "GetObjectTest.hpp"
 
 
@@ -33,7 +35,8 @@ namespace ut
 
 // Set up context before running a test.
 void GetObjectTest::setUp()
-{};
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -52,20 +55,22 @@ void GetObjectTest::getTest()
     ::fwData::Image::sptr img2 = ::fwData::Image::New();
     ::fwTest::generator::Image::generateRandomImage(img2, ::fwTools::Type::create("uint8"));
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-    composite->getContainer()["img1"] = img1;
-    composite->getContainer()["img2"] = img2;
-    ::fwData::Object::sptr subObj1 = ::fwDataCamp::getObject( composite, "@values.img2" );
-    CPPUNIT_ASSERT_MESSAGE("Image must be equal" , subObj1 == img2);
+    composite->getContainer()["img1"]   = img1;
+    composite->getContainer()["img2"]   = img2;
+    ::fwData::Object::sptr subObj1      = ::fwDataCamp::getObject( composite, "@values.img2" );
+    CPPUNIT_ASSERT_MESSAGE("Image must be equal", subObj1 == img2);
 
     // Visit 2
     ::fwData::Float::sptr zspacing = ::fwDataCamp::getObject< ::fwData::Float >( composite, "@values.img2.spacing.2" );
-    CPPUNIT_ASSERT_MESSAGE("spacing must be equal" , img2->getSpacing()[2] - 0.001 < zspacing->value() && zspacing->value() < img2->getSpacing()[2] + 0.001 );
+    CPPUNIT_ASSERT_MESSAGE("spacing must be equal",
+                           img2->getSpacing()[2] - 0.001 < zspacing->value() &&
+                           zspacing->value() < img2->getSpacing()[2] + 0.001 );
 
     // Visit 3
     ::fwMedData::Patient::sptr patient1 = ::fwMedData::Patient::New();
     patient1->setName( "toto" );
-    ::fwData::String::sptr str= ::fwDataCamp::getObject< ::fwData::String >( patient1, "@name" );
-    CPPUNIT_ASSERT_MESSAGE("Name must be equal" , patient1->getName() == str->value() );
+    ::fwData::String::sptr str = ::fwDataCamp::getObject< ::fwData::String >( patient1, "@name" );
+    CPPUNIT_ASSERT_MESSAGE("Name must be equal", patient1->getName() == str->value() );
 
     // Visit 4
     composite->setField("toto", img1);
@@ -79,11 +84,27 @@ void GetObjectTest::getTest()
 void GetObjectTest::invalidPathTest()
 {
     ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-    ::fwData::String::sptr text = ::fwData::String::New("Text");
-    (*composite)["string"] = text;
+    ::fwData::String::sptr text         = ::fwData::String::New("Text");
+    (*composite)["string"]              = text;
+    ::fwData::Integer::sptr intValue    = ::fwData::Integer::New(321);
+    ::fwData::Float::sptr floatValue    = ::fwData::Float::New(1.234f);
+    ::fwData::Vector::sptr vector       = ::fwData::Vector::New();
+    ::fwData::Image::sptr img           = ::fwData::Image::New();
+    ::fwTest::generator::Image::generateRandomImage(img, ::fwTools::Type::create("int16"));
+
+    auto& internalVector = vector->getContainer();
+    internalVector.push_back(intValue);
+    internalVector.push_back(floatValue);
+    internalVector.push_back(img);
+    (*composite)["vector"] = vector;
 
+    // no exception version
     ::fwData::Object::sptr obj = ::fwDataCamp::getObject( composite, "@values.string" );
-    CPPUNIT_ASSERT_MESSAGE("fwData::String must be equal" , obj ==  text );
+    CPPUNIT_ASSERT_MESSAGE("fwData::String must be equal", obj ==  text );
+
+    // with exception version
+    obj = ::fwDataCamp::getObject( composite, "@values.string", true );
+    CPPUNIT_ASSERT_MESSAGE("fwData::String must be equal", obj ==  text );
 
     // no exception version
     ::fwData::Object::sptr invalidObj = ::fwDataCamp::getObject( composite, "@values.invalidPath", false );
@@ -91,22 +112,57 @@ void GetObjectTest::invalidPathTest()
 
     // exception version : path is invalid
     CPPUNIT_ASSERT_THROW(
-            ::fwDataCamp::getObject( composite, "@values.invalidPath", true ),
-             ::fwDataCamp::exception::ObjectNotFound
-    );
-    CPPUNIT_ASSERT_EQUAL(size_t(1), composite->size() );
-
-
-     ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::New();
-     // no exception version
-     invalidObj = ::fwDataCamp::getObject( imgSeries, "@image.type", false );
-     CPPUNIT_ASSERT_MESSAGE("Object must not exist", !invalidObj );
-
-     // exception version : path exist, but image object is null
-     CPPUNIT_ASSERT_THROW(
-             ::fwDataCamp::getObject( imgSeries, "@image.type", true ),
-              ::fwDataCamp::exception::NullPointer
-     );
+        ::fwDataCamp::getObject( composite, "@values.invalidPath", true ),
+        ::fwDataCamp::exception::ObjectNotFound
+        );
+    CPPUNIT_ASSERT_EQUAL(size_t(2), composite->size() );
+
+    ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::New();
+    // no exception version
+    invalidObj = ::fwDataCamp::getObject( imgSeries, "@image.type", false );
+    CPPUNIT_ASSERT_MESSAGE("Object must not exist", !invalidObj );
+
+    // exception version : path exist, but image object is null
+    CPPUNIT_ASSERT_THROW(
+        ::fwDataCamp::getObject( imgSeries, "@image.type", true ),
+        ::fwDataCamp::exception::NullPointer
+        );
+
+    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+    /// Vector tests
+
+    // no exception version
+    obj = ::fwDataCamp::getObject( composite, "@values.vector.values.0" );
+    CPPUNIT_ASSERT_MESSAGE("fwData::Integer must be equal", obj ==  intValue );
+
+    // with exception version
+    obj = ::fwDataCamp::getObject( composite, "@values.vector.values.0", true );
+    CPPUNIT_ASSERT_MESSAGE("fwData::Integer must be equal", obj ==  intValue );
+
+    /// This is important to test vectors subobjects properties to ensure the visitor path is correct
+
+    // no exception version
+    obj                            = ::fwDataCamp::getObject( composite, "@values.vector.values.2.spacing.2" );
+    ::fwData::Float::sptr zspacing = ::std::dynamic_pointer_cast< ::fwData::Float >(obj);
+    CPPUNIT_ASSERT_MESSAGE("spacing must be equal",
+                           img->getSpacing()[2] - 0.001 < zspacing->value() &&
+                           zspacing->value() < img->getSpacing()[2] + 0.001 );
+
+    // with exception version
+    obj      = ::fwDataCamp::getObject( composite, "@values.vector.values.2.spacing.2", true );
+    zspacing = ::std::dynamic_pointer_cast< ::fwData::Float >(obj);
+    CPPUNIT_ASSERT_MESSAGE("spacing must be equal",
+                           img->getSpacing()[2] - 0.001 < zspacing->value() &&
+                           zspacing->value() < img->getSpacing()[2] + 0.001 );
+
+    // out of bounds, no exception version
+    invalidObj = ::fwDataCamp::getObject( composite, "@values.vector.values.2.spacing.15", false );
+    CPPUNIT_ASSERT_MESSAGE("Object must not exist", !invalidObj );
+
+    // out of bounds, with exception version
+    CPPUNIT_ASSERT_THROW( ::fwDataCamp::getObject( composite, "@values.vector.values.2.spacing.15", true ),
+                          ::fwDataCamp::exception::NullPointer);
+
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/ObjectTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/ObjectTest.cpp
index 9ae290a..5feaf15 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/ObjectTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/ObjectTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,7 +22,8 @@ namespace ut
 
 // Set up context before running a test.
 void ObjectTest::setUp()
-{};
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/RecursiveLockTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/RecursiveLockTest.cpp
index b360f8b..ce87289 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/RecursiveLockTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/RecursiveLockTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,8 @@ namespace ut
 
 // Set up context before running a test.
 void RecursiveLockTest::setUp()
-{};
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -41,7 +42,7 @@ void RecursiveLockTest::lockTest()
     {
         ::fwData::Image::sptr image = ::fwData::Image::New();
         ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type::create("int16"));
-        ::fwData::Array::sptr array = image->getDataArray();
+        ::fwData::Array::sptr array       = image->getDataArray();
         ::fwMemory::BufferObject::sptr bo = array->getBufferObject();
 
         {
@@ -63,11 +64,11 @@ void RecursiveLockTest::lockTest()
         ::fwData::Image::sptr img2 = ::fwData::Image::New();
         ::fwTest::generator::Image::generateRandomImage(img2, ::fwTools::Type::create("uint8"));
         ::fwData::Composite::sptr composite = ::fwData::Composite::New();
-        composite->getContainer()["img1"] = img1;
-        composite->getContainer()["img2"] = img2;
+        composite->getContainer()["img1"]   = img1;
+        composite->getContainer()["img2"]   = img2;
 
-        ::fwData::Array::sptr array1 = img1->getDataArray();
-        ::fwData::Array::sptr array2 = img2->getDataArray();
+        ::fwData::Array::sptr array1       = img1->getDataArray();
+        ::fwData::Array::sptr array2       = img2->getDataArray();
         ::fwMemory::BufferObject::sptr bo1 = array1->getBufferObject();
         ::fwMemory::BufferObject::sptr bo2 = array2->getBufferObject();
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp
index 59f5f53..da75630 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ActivitySeriesTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -43,17 +43,17 @@ void ActivitySeriesTest::propertiesTest()
     const ::fwMedData::ActivitySeries::ConfigIdType activity_config_id = "Visu2D";
 
     const ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                       ("patient")
-                                                                       ("study")
-                                                                       ("equipment")
-                                                                       ("instance_uid")
-                                                                       ("modality")
-                                                                       ("date")
-                                                                       ("time")
-                                                                       ("performing_physicians_name")
-                                                                       ("description")
-                                                                       ("activity_config_id")
-                                                                       ("data");
+                                                                    ("patient")
+                                                                    ("study")
+                                                                    ("equipment")
+                                                                    ("instance_uid")
+                                                                    ("modality")
+                                                                    ("date")
+                                                                    ("time")
+                                                                    ("performing_physicians_name")
+                                                                    ("description")
+                                                                    ("activity_config_id")
+                                                                    ("data");
 
     ::fwData::Composite::sptr data = ::fwData::Composite::New();
 
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp
new file mode 100644
index 0000000..11707b0
--- /dev/null
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/DicomSeriesCampTest.cpp
@@ -0,0 +1,145 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DataCampHelper.hpp"
+#include "fwMedDataCamp/DicomSeriesCampTest.hpp"
+
+#include <fwData/Array.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+#include <fwTools/System.hpp>
+#include <fwTools/Type.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/filesystem/operations.hpp>
+
+#include <fstream>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::DicomSeriesCampTest );
+
+namespace fwMedDataCamp
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesCampTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesCampTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesCampTest::propertiesTest()
+{
+    const std::string instance_uid               = "123456789";
+    const std::string modality                   = "CT";
+    const std::string date                       = "20130214";
+    const std::string time                       = "143328";
+    const std::string performing_physicians_name = "John Doe";
+    const std::string description                = "description";
+    //DicomSeries
+    const std::string dicom_availability  = "PATHS";
+    const std::string number_of_instances = "100";
+    ::DataCampHelper::PropertiesNameType dataProperties = ::boost::assign::list_of("fields")
+                                                              ("dicom_availability")
+                                                              ("number_of_instances")
+                                                              ("local_dicom_paths")
+                                                              ("dicom_binaries")
+                                                              ("patient")
+                                                              ("study")
+                                                              ("equipment")
+                                                              ("instance_uid")
+                                                              ("modality")
+                                                              ("date")
+                                                              ("time")
+                                                              ("performing_physicians_name")
+                                                              ("description")
+                                                              ("sop_class_uids")
+                                                              ("computed_tag_values")
+                                                              ("first_instance_number");
+
+
+    ::fwData::Array::sptr binary   = ::fwData::Array::New();
+    ::boost::filesystem::path path = "mypath";
+
+    ::fwMedData::DicomValuesType performing_physicians_names;
+    performing_physicians_names.push_back(performing_physicians_name);
+
+    ::fwMedData::DicomSeries::sptr obj = ::fwMedData::DicomSeries::New();
+    obj->setInstanceUID(instance_uid);
+    obj->setModality(modality);
+    obj->setDate(date);
+    obj->setTime(time);
+    obj->setPerformingPhysiciansName(performing_physicians_names);
+    obj->setDescription(description);
+    obj->setNumberOfInstances(100);
+    obj->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+    obj->addDicomPath(42, path);
+    obj->addBinary(path.string(),binary);
+    obj->addSOPClassUID("1.2.840.10008.5.1.4.1.1.2");
+    obj->addComputedTagValue("(0020,0100)", "1664");
+    obj->setFirstInstanceNumber(1);
+
+
+    ::DataCampHelper::visitProperties(obj->getClassname(), dataProperties);
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@instance_uid", instance_uid);
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@modality", modality);
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@date", date);
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@time", time);
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@performing_physicians_name.0", performing_physicians_names[0]);
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@description", description);
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@patient", obj->getPatient());
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@study", obj->getStudy());
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@equipment", obj->getEquipment());
+
+    // Dicom availability
+    //TODO: Enum are not supported yet, so we cannot make unit tests on this part...
+    //::DataCampHelper::compareSimplePropertyValue(obj, "@dicom_availability", std::string("PATH"));
+
+    // Number of instances
+    ::std::stringstream ss;
+    ss << obj->getNumberOfInstances();
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@number_of_instances", ss.str());
+
+    // Local dicom paths
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@local_dicom_paths.42", "mypath");
+
+    // Dicom binaries
+    ::DataCampHelper::compareObjectPropertyValue(obj, "@dicom_binaries.mypath", obj->getDicomBinaries().at("mypath"));
+
+    // SOP class UID
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@sop_class_uids.0", "1.2.840.10008.5.1.4.1.1.2");
+    // SOP class UID
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@sop_class_uids.0", "1.2.840.10008.5.1.4.1.1.2");
+
+    // Computed tag values
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@computed_tag_values.(0020,0100)", "1664");
+
+    // First instance number
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@first_instance_number", "1");
+    // Computed tag values
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@computed_tag_values.(0020,0100)", "1664");
+
+    // First instance number
+    ::DataCampHelper::compareSimplePropertyValue(obj, "@first_instance_number", "1");
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwMedDataCamp
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp
index 54f4835..57392fc 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/EquipmentTest.cpp
@@ -1,19 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/std/vector.hpp>
-
 #include <fwDataCamp/Version.hpp>
 #include <fwMedData/Equipment.hpp>
 
 #include "fwMedDataCamp/EquipmentTest.hpp"
 #include "DataCampHelper.hpp"
 
-using namespace ::boost::assign;
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataCamp::ut::EquipmentTest );
 
@@ -38,9 +34,8 @@ void EquipmentTest::tearDown()
 
 void EquipmentTest::propertiesTest()
 {
-    const std::string institution_name = "IHU Strasbourg / IRCAD";
-    const ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                       ("institution_name");
+    const std::string institution_name                        = "IHU Strasbourg / IRCAD";
+    const ::DataCampHelper::PropertiesNameType dataProperties = {"fields", "institution_name"};
 
     ::fwMedData::Equipment::sptr obj = ::fwMedData::Equipment::New();
     obj->setInstitutionName(institution_name);
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
index 6d8b6a9..1978075 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ImageSeriesTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -47,23 +47,23 @@ void ImageSeriesTest::tearDown()
 
 void ImageSeriesTest::propertiesTest()
 {
-    const std::string instance_uid = "123456789";
-    const std::string modality = "CT";
-    const std::string date = "20130214";
-    const std::string time = "143328";
-    const std::string performing_physicians_name = "John Doe";
-    const std::string description = "description";
+    const std::string instance_uid                            = "123456789";
+    const std::string modality                                = "CT";
+    const std::string date                                    = "20130214";
+    const std::string time                                    = "143328";
+    const std::string performing_physicians_name              = "John Doe";
+    const std::string description                             = "description";
     const ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                        ("image")
-                                                                        ("patient")
-                                                                        ("study")
-                                                                        ("equipment")
-                                                                        ("instance_uid")
-                                                                        ("modality")
-                                                                        ("date")
-                                                                        ("time")
-                                                                        ("performing_physicians_name")
-                                                                        ("description");
+                                                                    ("image")
+                                                                    ("patient")
+                                                                    ("study")
+                                                                    ("equipment")
+                                                                    ("instance_uid")
+                                                                    ("modality")
+                                                                    ("date")
+                                                                    ("time")
+                                                                    ("performing_physicians_name")
+                                                                    ("description");
 
     ::fwData::Image::sptr img = ::fwData::Image::New();
     ::fwTest::generator::Image::generateRandomImage(img, ::fwTools::Type::create("uint8"));
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp
index c91034a..b38e3a1 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/ModelSeriesTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -43,23 +43,23 @@ void ModelSeriesTest::tearDown()
 
 void ModelSeriesTest::propertiesTest()
 {
-    const std::string instance_uid = "123456789";
-    const std::string modality = "CT";
-    const std::string date = "20130214";
-    const std::string time = "143328";
+    const std::string instance_uid               = "123456789";
+    const std::string modality                   = "CT";
+    const std::string date                       = "20130214";
+    const std::string time                       = "143328";
     const std::string performing_physicians_name = "John Doe";
-    const std::string description = "description";
+    const std::string description                = "description";
     ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                  ("reconstruction_db")
-                                                                  ("patient")
-                                                                  ("study")
-                                                                  ("equipment")
-                                                                  ("instance_uid")
-                                                                  ("modality")
-                                                                  ("date")
-                                                                  ("time")
-                                                                  ("performing_physicians_name")
-                                                                  ("description");
+                                                              ("reconstruction_db")
+                                                              ("patient")
+                                                              ("study")
+                                                              ("equipment")
+                                                              ("instance_uid")
+                                                              ("modality")
+                                                              ("date")
+                                                              ("time")
+                                                              ("performing_physicians_name")
+                                                              ("description");
 
     ::fwMedData::ModelSeries::ReconstructionVectorType recDB;
     recDB.push_back(::fwData::Reconstruction::New());
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp
index 4611967..67e9056 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/PatientTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -38,15 +38,15 @@ void PatientTest::tearDown()
 
 void PatientTest::propertiesTest()
 {
-    const std::string name = "Patient Name";
-    const std::string patient_id = "42";
-    const std::string birth_date = "19830214";
-    const std::string sex = "M";
+    const std::string name                                    = "Patient Name";
+    const std::string patient_id                              = "42";
+    const std::string birth_date                              = "19830214";
+    const std::string sex                                     = "M";
     const ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                       ("name")
-                                                                       ("patient_id")
-                                                                       ("birth_date")
-                                                                       ("sex");
+                                                                    ("name")
+                                                                    ("patient_id")
+                                                                    ("birth_date")
+                                                                    ("sex");
 
     ::fwMedData::Patient::sptr obj = ::fwMedData::Patient::New();
     obj->setName(name);
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp
index 4f23134..9dff983 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/SeriesDBTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,8 +11,9 @@
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/SeriesDB.hpp>
 
-#include <fwAtoms/Sequence.hpp>
 #include <fwAtomConversion/convert.hpp>
+
+#include <fwAtoms/Sequence.hpp>
 #include <fwDataCamp/getObject.hpp>
 
 #include "fwMedDataCamp/SeriesDBTest.hpp"
@@ -45,7 +46,7 @@ void SeriesDBTest::tearDown()
 void SeriesDBTest::propertiesTest()
 {
     const ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                       ("values");
+                                                                    ("values");
 
     ::fwMedData::SeriesDB::sptr obj = ::fwMedData::SeriesDB::New();
     ::fwMedData::SeriesDB::ContainerType vectSeries;
@@ -59,7 +60,7 @@ void SeriesDBTest::propertiesTest()
     ::DataCampHelper::compareObjectPropertyValue(obj, "@values.1", vectSeries[1]);
     ::DataCampHelper::compareObjectPropertyValue(obj, "@values.2", vectSeries[2]);
 
-    ::fwAtoms::Object::sptr metaObject = ::fwAtomConversion::convert(obj);
+    ::fwAtoms::Object::sptr metaObject      = ::fwAtomConversion::convert(obj);
     ::fwAtoms::Object::AttributesType attrs = metaObject->getAttributes();
 
     CPPUNIT_ASSERT_MESSAGE("Attributes values not found in SeriesDB atom",
diff --git a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp
index 6bffd2c..9516cfd 100644
--- a/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp
+++ b/SrcLib/core/fwDataCamp/test/tu/src/fwMedDataCamp/StudyTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -38,19 +38,19 @@ void StudyTest::tearDown()
 
 void StudyTest::propertiesTest()
 {
-    const std::string instance_uid = "123456789";
-    const std::string date = "20130214";
-    const std::string time = "143328";
-    const std::string referring_physician_name = "John Doe";
-    const std::string description = "description";
-    const std::string patient_age = "42";
+    const std::string instance_uid                            = "123456789";
+    const std::string date                                    = "20130214";
+    const std::string time                                    = "143328";
+    const std::string referring_physician_name                = "John Doe";
+    const std::string description                             = "description";
+    const std::string patient_age                             = "42";
     const ::DataCampHelper::PropertiesNameType dataProperties = list_of("fields")
-                                                                       ("instance_uid")
-                                                                       ("date")
-                                                                       ("time")
-                                                                       ("referring_physician_name")
-                                                                       ("description")
-                                                                       ("patient_age");
+                                                                    ("instance_uid")
+                                                                    ("date")
+                                                                    ("time")
+                                                                    ("referring_physician_name")
+                                                                    ("description")
+                                                                    ("patient_age");
 
     ::fwMedData::Study::sptr obj = ::fwMedData::Study::New();
     obj->setInstanceUID(instance_uid);
diff --git a/SrcLib/core/fwDataIO/CMakeLists.txt b/SrcLib/core/fwDataIO/CMakeLists.txt
index df27ddf..1b362df 100644
--- a/SrcLib/core/fwDataIO/CMakeLists.txt
+++ b/SrcLib/core/fwDataIO/CMakeLists.txt
@@ -1,15 +1,13 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwData
-    fwTools
-)
+
 
 #racy compatibility
 add_definitions(-DPRJ_NAME=\"${NAME}\")
 
-find_package (Boost COMPONENTS filesystem REQUIRED)
-find_package( ZLIB REQUIRED )
+find_package(ZLIB REQUIRED )
+
 fwInclude(${ZLIB_INCLUDE_DIRS})
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES} ${ZLIB_LIBRARIES})
+
+fwLink(
+    ${ZLIB_LIBRARIES}
+)
diff --git a/SrcLib/core/fwDataIO/COPYING b/SrcLib/core/fwDataIO/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwDataIO/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwDataIO/COPYING.LESSER b/SrcLib/core/fwDataIO/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwDataIO/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwDataIO/Properties.cmake b/SrcLib/core/fwDataIO/Properties.cmake
index 5edc282..d9aeec0 100644
--- a/SrcLib/core/fwDataIO/Properties.cmake
+++ b/SrcLib/core/fwDataIO/Properties.cmake
@@ -2,6 +2,12 @@
 set( NAME fwDataIO )
 set( VERSION 0.2 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwCore fwData fwDataTools fwMath fwTools )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwDataTools
+    fwTools
+    fwJobs
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataIO/bin/build.options b/SrcLib/core/fwDataIO/bin/build.options
deleted file mode 100644
index 13dd635..0000000
--- a/SrcLib/core/fwDataIO/bin/build.options
+++ /dev/null
@@ -1,15 +0,0 @@
-TYPE = 'shared'
-
-LIB  = [
-        'fwRuntime_0-3',
-        'fwData_0-1',
-        'fwTools_0-1',
-        'fwCore_0-1',
-        'fwServices_0-1',
-        'fwMath_0-1',
-        'fwDataTools_0-1',
-        'fwComEd_0-1'
-        ]
-USE  = ['boost','boostFilesystem','libxml2','z']
-
-VERSION = '0-2'
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp
index 62b0544..c2a7c46 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWDATAIONAMESPACE_HPP_
-#define FWDATAIONAMESPACE_HPP_
+#ifndef __FWDATAIO_NAMESPACE_HPP__
+#define __FWDATAIO_NAMESPACE_HPP__
 
 /**
  * @brief       This namespace fwDataIO contains reader and writer for severals data of the framework.
  * @namespace   fwDataIO
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace fwDataIO
 {
 }
-#endif /* FWDATAIONAMESPACE_HPP_ */
+#endif /* __FWDATAIO_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/config.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/config.hpp
deleted file mode 100644
index 6cd48c8..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/config.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATAIO_CONFIG_HPP_
-#define _FWDATAIO_CONFIG_HPP_
-
-#include <assert.h>
-
-#ifdef _WIN32
-
-    #ifdef FWDATAIO_EXPORTS
-    #define FWDATAIO_API __declspec(dllexport)
-    #define FWDATAIO_TEMPLATE_API 
-    #else
-    #define FWDATAIO_API __declspec(dllimport)
-    #define FWDATAIO_TEMPLATE_API extern "C++"
-    #endif
-
-    #define FWDATAIO_CLASS_API
-
-    #pragma warning(disable: 4290)
-    #pragma warning(disable: 4267) // disable warning 'argument'�: conversion de 'size_t' en 'unsigned int', perte possible de donn�es
-    #pragma warning(disable: 4800) // disable warning C4800: 'const int'�: valeur forc�e � la valeur bool�enne 'true' ou 'false' (avertissement sur les performances)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWDATAIO_EXPORTS
-    #define FWDATAIO_API __attribute__ ((visibility("default")))
-    #define FWDATAIO_CLASS_API __attribute__ ((visibility("default")))
-    #define FWDATAIO_TEMPLATE_API extern "C++"
-    #else
-    #define FWDATAIO_API __attribute__ ((visibility("hidden")))
-    #define FWDATAIO_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWDATAIO_TEMPLATE_API extern "C++"
-    #endif
-
-#else
-
-    #define FWDATAIO_API
-    #define FWDATAIO_CLASS_API
-    #define FWDATAIO_TEMPLATE_API extern "C++"
-
-#endif
-
-#endif //_FWDATAIO_CONFIG_HPP_
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/ArrayReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/ArrayReader.hpp
index b201129..dd13cf7 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/ArrayReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/ArrayReader.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_ARRAYREADER_HPP_
-#define _FWDATAIO_READER_ARRAYREADER_HPP_
+#ifndef __FWDATAIO_READER_ARRAYREADER_HPP__
+#define __FWDATAIO_READER_ARRAYREADER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Array.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -24,16 +23,16 @@ namespace reader
 /**
  * @brief   Array Reader. Read file format .raw
  * @class   ArrayReader
- * 
+ *
  * @date    2011
  *
  * Ircad reader to read a ::fwData::Array on filesystem in a raw format.
  */
 class FWDATAIO_CLASS_API ArrayReader :  public GenericObjectReader< ::fwData::Array >,
-                                                public ::fwData::location::enableSingleFile< IObjectReader >
+                                        public ::fwData::location::enableSingleFile< IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ArrayReader)(GenericObjectReader< ::fwData::Array>),
                                            (()),
@@ -58,4 +57,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_ARRAYREADER_HPP_
+#endif // __FWDATAIO_READER_ARRAYREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/DictionaryReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/DictionaryReader.hpp
index c7d1251..4e0034c 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/DictionaryReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/DictionaryReader.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_DICTIONARY_HPP_
-#define _FWDATAIO_READER_DICTIONARY_HPP_
+#ifndef __FWDATAIO_READER_DICTIONARYREADER_HPP__
+#define __FWDATAIO_READER_DICTIONARYREADER_HPP__
 
-#include <boost/shared_ptr.hpp>
 #include <boost/filesystem.hpp>
 
 #include <fwData/StructureTraitsDictionary.hpp>
@@ -16,8 +15,9 @@
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/reader/GenericObjectReader.hpp"
 
-namespace fwData {
-    class StructureTraitsDictionary;
+namespace fwData
+{
+class StructureTraitsDictionary;
 }
 
 namespace fwDataIO
@@ -29,24 +29,25 @@ namespace reader
 /**
  * @brief   Dictionary reader. Read file with .dic extension.
  * @class   DictionaryReader
- * 
+ *
  * @date    2011
  *
  * Ircad reader to read a ::fwData::StructureTraitsDictionary on filesystem which the file format
  * is .dic. This is an ascii file the structure of each line is defined on the first line of this file.
  */
-class FWDATAIO_CLASS_API DictionaryReader:
-   public GenericObjectReader< ::fwData::StructureTraitsDictionary>,
-   public ::fwData::location::enableSingleFile< IObjectReader >
+class FWDATAIO_CLASS_API DictionaryReader :
+    public GenericObjectReader< ::fwData::StructureTraitsDictionary>,
+    public ::fwData::location::enableSingleFile< IObjectReader >
 
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (DictionaryReader)(GenericObjectReader< ::fwData::StructureTraitsDictionary >),
-                                            (()),
-                                            ::fwDataIO::reader::factory::New< DictionaryReader >
-                                            );
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (DictionaryReader)(GenericObjectReader< ::fwData::StructureTraitsDictionary >),
+        (()),
+        ::fwDataIO::reader::factory::New< DictionaryReader >
+        );
 
     /// Constructor. Do nothing .
     FWDATAIO_API DictionaryReader(::fwDataIO::reader::IObjectReader::Key key);
@@ -68,4 +69,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_DICTIONARY_HPP_
+#endif // __FWDATAIO_READER_DICTIONARYREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/GenericObjectReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/GenericObjectReader.hpp
index 9b89a8d..4835ba5 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/GenericObjectReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/GenericObjectReader.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_GENERICOBJECTREADER_HPP_
-#define _FWDATAIO_READER_GENERICOBJECTREADER_HPP_
+#ifndef __FWDATAIO_READER_GENERICOBJECTREADER_HPP__
+#define __FWDATAIO_READER_GENERICOBJECTREADER_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/reader/IObjectReader.hpp"
@@ -21,7 +20,7 @@ namespace reader
 /**
  * @brief   generic class for all object readers.
  * @class   GenericObjectReader
- * 
+ *
  * @date    2009
  *
  * This class adds 2 methods to the API of IObjectReader. This
@@ -30,10 +29,10 @@ namespace reader
  * already cast.
  */
 template<class DATATYPE>
-class  GenericObjectReader  : virtual public ::fwDataIO::reader::IObjectReader
+class GenericObjectReader : virtual public ::fwDataIO::reader::IObjectReader
 {
 
-public :
+public:
 
     /// the object type related
     typedef DATATYPE DataType;
@@ -41,12 +40,19 @@ public :
     fwCoreNonInstanciableClassDefinitionsMacro( (GenericObjectReader<DATATYPE>)(::fwDataIO::reader::IObjectReader) );
 
     /// Constructor. Do nothing.
-    GenericObjectReader(){};
+    GenericObjectReader()
+    {
+    }
 
-    virtual std::string extension() {return ("");}
+    virtual std::string extension()
+    {
+        return ("");
+    }
 
     /// Destructor. Do nothing.
-    virtual ~GenericObjectReader(){};
+    virtual ~GenericObjectReader()
+    {
+    }
 
     /**
      * @brief m_object setter.
@@ -56,7 +62,7 @@ public :
      */
     virtual void setObject( ::fwTools::Object::sptr obj )
     {
-        assert ( ::boost::dynamic_pointer_cast< DataType >( obj ) );
+        assert ( std::dynamic_pointer_cast< DataType >( obj ) );
         m_object = obj;
     }
 
@@ -66,9 +72,9 @@ public :
      *
      * This method automatic cast object in correct DataType.
      */
-    virtual ::boost::shared_ptr< DataType > getConcreteObject()
+    virtual std::shared_ptr< DataType > getConcreteObject()
     {
-        return ::boost::dynamic_pointer_cast< DataType >( getObject() );
+        return std::dynamic_pointer_cast< DataType >( getObject() );
     }
 
 };
@@ -78,4 +84,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_GENERICOBJECTREADER_HPP_
+#endif // __FWDATAIO_READER_GENERICOBJECTREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzArrayReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzArrayReader.hpp
index 751a59d..c383e43 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzArrayReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzArrayReader.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_GZARRAYREADER_HPP_
-#define _FWDATAIO_READER_GZARRAYREADER_HPP_
+#ifndef __FWDATAIO_READER_GZARRAYREADER_HPP__
+#define __FWDATAIO_READER_GZARRAYREADER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Array.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -24,17 +23,17 @@ namespace reader
 /**
  * @brief   Array Reader. Read file format .raw.gz
  * @class   GzArrayReader
- * 
+ *
  * @date    2011
  *
  * Ircad reader to read a ::fwData::Array on filesystem which the file format
  * is .raw.gz. This format is basic. The buffer is writen in a file with zlib.
  */
 class FWDATAIO_CLASS_API GzArrayReader :  public GenericObjectReader< ::fwData::Array >,
-                                                public ::fwData::location::enableSingleFile< IObjectReader >
+                                          public ::fwData::location::enableSingleFile< IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((GzArrayReader)(GenericObjectReader< ::fwData::Array>),
                                            (()),
@@ -59,4 +58,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_GZARRAYREADER_HPP_
+#endif // __FWDATAIO_READER_GZARRAYREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzBufferImageReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzBufferImageReader.hpp
index 17e4bde..58c4ebd 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzBufferImageReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/GzBufferImageReader.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_GZBUFFER_HPP_
-#define _FWDATAIO_READER_GZBUFFER_HPP_
+#ifndef __FWDATAIO_READER_GZBUFFERIMAGEREADER_HPP__
+#define __FWDATAIO_READER_GZBUFFERIMAGEREADER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Image.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -25,7 +24,7 @@ namespace reader
 /**
  * @brief   Image Reader. Read file format .raw.gz
  * @class   GzBufferImageReader
- * 
+ *
  * @date    2009
  *
  * Ircad reader to read a ::fwData::Image on filesystem which the file format
@@ -35,7 +34,7 @@ class FWDATAIO_CLASS_API GzBufferImageReader :  public GenericObjectReader< ::fw
                                                 public ::fwData::location::enableSingleFile< IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((GzBufferImageReader)(GenericObjectReader< ::fwData::Image>),
                                            (()),
@@ -61,4 +60,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_GZBUFFER_HPP_
+#endif // __FWDATAIO_READER_GZBUFFERIMAGEREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/IObjectReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/IObjectReader.hpp
index 4d884f6..8d925ab 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/IObjectReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/IObjectReader.hpp
@@ -1,13 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_IOBJECTREADER_HPP_
-#define _FWDATAIO_READER_IOBJECTREADER_HPP_
+#ifndef __FWDATAIO_READER_IOBJECTREADER_HPP__
+#define __FWDATAIO_READER_IOBJECTREADER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwDataIO/config.hpp"
+#include "fwDataIO/reader/factory/new.hpp"
+#include "fwDataIO/reader/registry/detail.hpp"
 
 #include <fwCore/base.hpp>
 
@@ -15,9 +17,12 @@
 
 #include <fwData/location/ILocation.hpp>
 
-#include "fwDataIO/config.hpp"
-#include "fwDataIO/reader/factory/new.hpp"
-#include "fwDataIO/reader/registry/detail.hpp"
+#include <fwJobs/IJob.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <cstdint>
+#include <functional>
 
 namespace fwDataIO
 {
@@ -28,7 +33,7 @@ namespace reader
 /**
  * @brief   Base class for all object readers.
  * @class   IObjectReader
- * 
+ *
  * @date    2009
  *
  * This class defines the API to use basic object readers. This reader is not
@@ -40,10 +45,13 @@ namespace reader
 class FWDATAIO_CLASS_API IObjectReader : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     fwCoreNonInstanciableClassDefinitionsMacro( (IObjectReader) );
 
+    typedef std::function< void ( std::uint64_t /*progress*/) > ProgressCallback;
+    typedef std::function< void ( ) > CancelCallback;
+
     typedef ::fwDataIO::reader::factory::Key Key;
 
     /**
@@ -98,9 +106,21 @@ public :
      */
     FWDATAIO_API virtual ::fwData::location::ILocation::sptr getLocation();
 
-    FWDATAIO_API virtual std::string  extension()=0;
+    FWDATAIO_API virtual std::string  extension() = 0;
+
+    /**
+     * @brief Requests reader abortion.
+     */
+    FWDATAIO_API void cancel();
+
+    /// Returns the internal job
+    FWDATAIO_API virtual SPTR(::fwJobs::IJob) getJob() const
+    {
+        return nullptr;
+    }
+
 
-protected :
+protected:
 
     /// Constructor. Do nothing.
     FWDATAIO_API IObjectReader();
@@ -125,4 +145,4 @@ protected :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_IOBJECTREADER_HPP_
+#endif // __FWDATAIO_READER_IOBJECTREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/MeshReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/MeshReader.hpp
index 3010d5b..d059d94 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/MeshReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/MeshReader.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_MESH_HPP_
-#define _FWDATAIO_READER_MESH_HPP_
+#ifndef __FWDATAIO_READER_MESHREADER_HPP__
+#define __FWDATAIO_READER_MESHREADER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Mesh.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -16,8 +15,9 @@
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/reader/GenericObjectReader.hpp"
 
-namespace fwData {
-    class Mesh;
+namespace fwData
+{
+class Mesh;
 }
 
 namespace fwDataIO
@@ -29,7 +29,7 @@ namespace reader
 /**
  * @brief   Mesh reader. Read file format .trian
  * @class   MeshReader
- * 
+ *
  * @date    2011
  *
  * Load trian file into fwData::Mesh
@@ -39,7 +39,7 @@ class FWDATAIO_CLASS_API MeshReader :
     public ::fwData::location::enableSingleFile< IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (MeshReader)(GenericObjectReader< ::fwData::Mesh >),
                                             (()),
@@ -64,4 +64,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_READER_MESH_HPP_
+#endif // __FWDATAIO_READER_MESHREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp
index d2fe952..39525b1 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWDATAIOREADERNAMESPACE_HPP_
-#define FWDATAIOREADERNAMESPACE_HPP_
+#ifndef __FWDATAIO_READER_NAMESPACE_HPP__
+#define __FWDATAIO_READER_NAMESPACE_HPP__
 
 namespace fwDataIO
 {
 /**
  * @brief       This namespace fwDataIO::reader contains reader for several data of the framework.
  * @namespace   fwDataIO::reader
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace reader
 
 }
 }
-#endif /* FWDATAIOREADERNAMESPACE_HPP_ */
+#endif /* __FWDATAIO_READER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/TagReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/TagReader.hpp
index ae4b0b3..0cb8517 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/TagReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/TagReader.hpp
@@ -1,22 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_READER_TAG_HPP_
-#define _FWDATAIO_READER_TAG_HPP_
+#ifndef __FWDATAIO_READER_TAGREADER_HPP__
+#define __FWDATAIO_READER_TAGREADER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/location/SingleFile.hpp>
 
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/reader/GenericObjectReader.hpp"
 
-namespace fwData {
-    class Tag;
+namespace fwData
+{
+class Tag;
 }
 
 namespace fwDataIO
@@ -28,7 +28,7 @@ namespace reader
 /**
  * @brief   Tag Reader. Read file format .tag
  * @class   TagReader
- * 
+ *
  * @date    2009
  *
  * Ircad reader to read a ::fwData::Tag on filesystem which the file format
@@ -39,11 +39,11 @@ class FWDATAIO_CLASS_API TagReader :
     public ::fwData::location::enableSingleFile< IObjectReader >
 {
 
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro( (TagReader)(GenericObjectReader< ::fwData::Tag >),
                                             (()),
                                             ::fwDataIO::reader::factory::New< TagReader >
-                                           );
+                                            );
     /// Constructor. Do nothing.
     FWDATAIO_API TagReader(::fwDataIO::reader::IObjectReader::Key key);
 
@@ -62,4 +62,4 @@ public :
 
 } // namespace fwDataIO
 
-#endif // _FWDATAIO_READER_TAG_HPP_
+#endif // __FWDATAIO_READER_TAGREADER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/TransformationMatrix3DReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/TransformationMatrix3DReader.hpp
index 7addd9a..53c78e9 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/TransformationMatrix3DReader.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/TransformationMatrix3DReader.hpp
@@ -1,27 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef  _DATAIO_READER_TRANSFORMATIONMATRIXREADER3D_HPP_
-#define  _DATAIO_READER_TRANSFORMATIONMATRIXREADER3D_HPP_
+#ifndef  __FWDATAIO_READER_TRANSFORMATIONMATRIX3DREADER_HPP__
+#define  __FWDATAIO_READER_TRANSFORMATIONMATRIX3DREADER_HPP__
 
-#include <boost/shared_ptr.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/location/SingleFile.hpp>
 
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/reader/GenericObjectReader.hpp"
 
-namespace fwDataIO {
+namespace fwDataIO
+{
 
-namespace reader {
+namespace reader
+{
 
 /**
  * @brief   Reader for transformation of 3D Matrix. Read file format .trf
  * @class   TransformationMatrix3DReader
- * 
+ *
  * @date    2009
  *
  * Ircad reader to read a ::fwData::TransformationMatrix3D on filesystem which the file format
@@ -34,7 +35,8 @@ class FWDATAIO_CLASS_API TransformationMatrix3DReader :
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((TransformationMatrix3DReader)(GenericObjectReader< ::fwData::TransformationMatrix3D >),
+    fwCoreClassDefinitionsWithFactoryMacro((TransformationMatrix3DReader)(GenericObjectReader< ::fwData::
+                                                                                               TransformationMatrix3D >),
                                            (()),
                                            ::fwDataIO::reader::factory::New< TransformationMatrix3DReader >
                                            );
@@ -57,4 +59,4 @@ public:
 
 }
 
-#endif /*  _DATAIO_READER_TRANSFORMATIONMATRIXREADER3D_HPP_ */
+#endif /*  __FWDATAIO_READER_TRANSFORMATIONMATRIX3DREADER_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/TriangularMeshReader.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/TriangularMeshReader.hpp
deleted file mode 100644
index 4374bda..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/TriangularMeshReader.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATAIO_READER_TRIANGULARMESH_HPP_
-#define _FWDATAIO_READER_TRIANGULARMESH_HPP_
-
-#include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include "fwDataIO/config.hpp"
-#include "fwDataIO/reader/GenericObjectReader.hpp"
-
-namespace fwData {
-    class TriangularMesh;
-}
-
-namespace fwDataIO
-{
-
-namespace reader
-{
-
-/**
- * @brief   Mesh reader. Read file format .trian
- * @class   TriangularMeshReader
- * 
- * @date    2009
- *
- * Ircad reader to read a ::fwData::TriangularMesh on filesystem which the file format
- * is .trian. This format is basic. This is an ascii file which contains : 1) nb of points
- * 2) list of points (x,y,z). Line numbers represent index of point in vector 3) nb of triangles
- * 4) list of triangles with index of points and normals ( often set a -1 )
- */
-class FWDATAIO_CLASS_API TriangularMeshReader :
-    public GenericObjectReader< ::fwData::TriangularMesh>,
-    public ::fwData::location::enableSingleFile< IObjectReader >
-{
-
-public :
-
-    fwCoreClassDefinitionsWithFactoryMacro( (TriangularMeshReader)(GenericObjectReader< ::fwData::TriangularMesh >),
-                                            (()),
-                                            ::fwDataIO::reader::factory::New< TriangularMeshReader >
-                                            );
-
-    /// Constructor. Do nothing.
-    FWDATAIO_API TriangularMeshReader(::fwDataIO::reader::IObjectReader::Key key);
-
-    /// Destructor. Do nothing.
-    FWDATAIO_API virtual ~TriangularMeshReader();
-
-    /// Read the file with standard iostream API.
-    FWDATAIO_API virtual void read();
-
-    FWDATAIO_API std::string  extension();
-
-};
-
-} // namespace reader
-
-} // namespace fwDataIO
-
-
-#endif // _FWDATAIO_READER_TRIANGULARMESH_HPP_
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp
index daa62d0..e7ce2a4 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace reader
 /**
  * @brief       Contains fwDataIO::reader::factory utilities
  * @namespace   fwDataIO::reader::factory
- * 
+ *
  * @date        2009-2012
  *
  */
@@ -27,4 +27,4 @@ namespace factory
 } // namespace reader
 } // namespace fwDataIO
 
-#endif /* __FWDATA_FACTORY_NAMESPACE_HPP__ */
+#endif /* __FWDATAIO_READER_FACTORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/new.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/new.hpp
index 3488544..2d63a61 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/new.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 #include <fwTools/DynamicAttributes.hxx>
@@ -36,10 +35,12 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwDataIO::reader::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwDataIO::reader::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 
@@ -48,7 +49,7 @@ FWDATAIO_API SPTR( ::fwDataIO::reader::IObjectReader ) New( const ::fwDataIO::re
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
 
     return obj;
 }
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/detail.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/detail.hpp
index 86621d8..ced7e8d 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/detail.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwDataIO::reader::IObjectReader) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwDataIO::reader::IObjectReader) (), KeyType > Type;
 
 FWDATAIO_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/macros.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/macros.hpp
index 167db49..1863a6a 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/macros.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATAIO_READER_REGISTRY_MACRO_HPP__
-#define __FWDATAIO_READER_REGISTRY_MACRO_HPP__
+#ifndef __FWDATAIO_READER_REGISTRY_MACROS_HPP__
+#define __FWDATAIO_READER_REGISTRY_MACROS_HPP__
 
 #include "fwData/registry/detail.hpp"
 
@@ -17,10 +17,10 @@ namespace registry
 {
 
 #define fwDataIOReaderRegisterMacro( classname )                                  \
-    static ::fwDataIO::reader::IObjectReader::Registrar< classname > s__factory__record__ ## __LINE__ ;
+    static ::fwDataIO::reader::IObjectReader::Registrar< classname > s__factory__record__ ## __LINE__;
 
 } // end namespace registry
 } // end namespace reader
 } // end namespace fwDataIO
 
-#endif /*__FWDATAIO_READER_REGISTRY_MACRO_HPP__*/
+#endif /*__FWDATAIO_READER_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp
index 7d58be9..7a29ccd 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/reader/registry/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace reader
 /**
  * @brief       Contains fwDataIO::reader::registry details
  * @namespace   fwDataIO::reader::registry
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/ArrayWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/ArrayWriter.hpp
index 1cfaf62..a4d7295 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/ArrayWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/ArrayWriter.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_WRITER_ARRAYWRITER_HPP_
-#define _FWDATAIO_WRITER_ARRAYWRITER_HPP_
+#ifndef __FWDATAIO_WRITER_ARRAYWRITER_HPP__
+#define __FWDATAIO_WRITER_ARRAYWRITER_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Array.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -23,16 +22,16 @@ namespace writer
 /**
  * @brief   Array Writer. Write file format .raw
  * @class   ArrayWriter
- * 
+ *
  * @date    2011
  *
  * Ircad writer to write a ::fwData::Array on filesystem in a raw format
  */
 class FWDATAIO_CLASS_API ArrayWriter :  public GenericObjectWriter< ::fwData::Array >,
-                                                public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
+                                        public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ArrayWriter)(GenericObjectWriter< ::fwData::Array>),
                                            (()),
@@ -57,4 +56,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_WRITER_ARRAYWRITER_HPP_
+#endif // __FWDATAIO_WRITER_ARRAYWRITER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/GenericObjectWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/GenericObjectWriter.hpp
index c5dec5d..3bcafe2 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/GenericObjectWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/GenericObjectWriter.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_WRITER_GENERICOBJECTWRITER_HPP_
-#define _FWDATAIO_WRITER_GENERICOBJECTWRITER_HPP_
+#ifndef __FWDATAIO_WRITER_GENERICOBJECTWRITER_HPP__
+#define __FWDATAIO_WRITER_GENERICOBJECTWRITER_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwDataIO/config.hpp"
 #include "fwDataIO/writer/IObjectWriter.hpp"
@@ -21,7 +20,7 @@ namespace writer
 /**
  * @brief   generic class for all object writers.
  * @class   GenericObjectWriter
- * 
+ *
  * @date    2009
  *
  * This class adds 2 methods to the API of IObjectWriter. This
@@ -30,10 +29,10 @@ namespace writer
  * already cast.
  */
 template<class DATATYPE>
-class GenericObjectWriter  : public ::fwDataIO::writer::IObjectWriter
+class GenericObjectWriter : public ::fwDataIO::writer::IObjectWriter
 {
 
-public :
+public:
 
     /// the object type related
     typedef DATATYPE DataType;
@@ -41,10 +40,14 @@ public :
     fwCoreNonInstanciableClassDefinitionsMacro( (GenericObjectWriter<DATATYPE>)(::fwDataIO::writer::IObjectWriter) );
 
     /// Constructor. Do nothing.
-    GenericObjectWriter() {};
+    GenericObjectWriter()
+    {
+    }
 
     /// Destructor. Do nothing.
-    virtual ~GenericObjectWriter() {};
+    virtual ~GenericObjectWriter()
+    {
+    }
 
     /**
      * @brief m_object setter.
@@ -54,7 +57,7 @@ public :
      */
     virtual void  setObject( ::fwTools::Object::sptr obj)
     {
-        assert ( ::boost::dynamic_pointer_cast< DataType >( obj ) );
+        assert ( std::dynamic_pointer_cast< DataType >( obj ) );
         m_object = obj;
     }
 
@@ -64,9 +67,9 @@ public :
      *
      * This method automatic cast object in correct DataType.
      */
-    virtual ::boost::shared_ptr< DataType >  getConcreteObject()
+    virtual std::shared_ptr< DataType >  getConcreteObject()
     {
-        return ::boost::dynamic_pointer_cast< DataType >( getObject() );
+        return std::dynamic_pointer_cast< DataType >( getObject() );
     }
 
 };
@@ -76,4 +79,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_WRITER_GENERICOBJECTWRITER_HPP_
+#endif // __FWDATAIO_WRITER_GENERICOBJECTWRITER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzArrayWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzArrayWriter.hpp
index 80383c7..d49746b 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzArrayWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzArrayWriter.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_WRITER_GZARRAYWRITER_HPP_
-#define _FWDATAIO_WRITER_GZARRAYWRITER_HPP_
+#ifndef __FWDATAIO_WRITER_GZARRAYWRITER_HPP__
+#define __FWDATAIO_WRITER_GZARRAYWRITER_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Array.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -23,17 +22,17 @@ namespace writer
 /**
  * @brief   Array Writer. Write file format .raw.gz
  * @class   GzArrayWriter
- * 
+ *
  * @date    2011
  *
  * Ircad writer to write a ::fwData::Array on filesystem which the file format
  * is .raw.gz. This format is basic. The buffer is written in a file with zlib.
  */
 class FWDATAIO_CLASS_API GzArrayWriter :  public GenericObjectWriter< ::fwData::Array >,
-                                                public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
+                                          public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((GzArrayWriter)(GenericObjectWriter< ::fwData::Array>),
                                            (()),
@@ -58,4 +57,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_WRITER_GZARRAYWRITER_HPP_
+#endif // __FWDATAIO_WRITER_GZARRAYWRITER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzBufferImageWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzBufferImageWriter.hpp
index e2c0cf1..83274ca 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzBufferImageWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/GzBufferImageWriter.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_WRITER_GZBUFFER_HPP_
-#define _FWDATAIO_WRITER_GZBUFFER_HPP_
+#ifndef __FWDATAIO_WRITER_GZBUFFERIMAGEWRITER_HPP__
+#define __FWDATAIO_WRITER_GZBUFFERIMAGEWRITER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Image.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -25,17 +24,18 @@ namespace writer
 /**
  * @brief   Image Writer. Write file format .raw.gz
  * @class   GzBufferImageWriter
- * 
+ *
  * @date    2009
  *
  * Ircad writer to write a ::fwData::Image on filesystem which the file format
  * is .raw.gz. This format is basic. The buffer is writen in a file with zlib.
  */
 class FWDATAIO_CLASS_API GzBufferImageWriter :  public GenericObjectWriter< ::fwData::Image >,
-                                                public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
+                                                public ::fwData::location::enableSingleFile< ::fwDataIO::writer::
+                                                                                             IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((GzBufferImageWriter)(GenericObjectWriter< ::fwData::Image>),
                                            (()),
@@ -61,4 +61,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_WRITER_GZBUFFER_HPP_
+#endif // __FWDATAIO_WRITER_GZBUFFERIMAGEWRITER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/IObjectWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/IObjectWriter.hpp
index 6da900e..5628bc9 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/IObjectWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/IObjectWriter.hpp
@@ -1,13 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_WRITER_IOBJECTWRITER_HPP_
-#define _FWDATAIO_WRITER_IOBJECTWRITER_HPP_
+#ifndef __FWDATAIO_WRITER_IOBJECTWRITER_HPP__
+#define __FWDATAIO_WRITER_IOBJECTWRITER_HPP__
 
-#include <boost/filesystem/path.hpp>
+
+#include "fwDataIO/config.hpp"
+#include "fwDataIO/writer/factory/new.hpp"
+#include "fwDataIO/writer/registry/detail.hpp"
 
 #include <fwCore/base.hpp>
 
@@ -15,9 +18,12 @@
 
 #include <fwData/location/ILocation.hpp>
 
-#include "fwDataIO/config.hpp"
-#include "fwDataIO/writer/factory/new.hpp"
-#include "fwDataIO/writer/registry/detail.hpp"
+#include <fwJobs/IJob.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <cstdint>
+
 
 namespace fwDataIO
 {
@@ -28,7 +34,7 @@ namespace writer
 /**
  * @brief   Base class for all object writers.
  * @class   IObjectWriter
- * 
+ *
  * @date    2009
  *
  * This class defines the API to use basic object writers. This writer is not
@@ -41,10 +47,12 @@ namespace writer
 class FWDATAIO_CLASS_API IObjectWriter : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     fwCoreNonInstanciableClassDefinitionsMacro( (IObjectWriter) );
 
+    typedef std::function< void ( std::uint64_t /*progress*/) > ProgressCallback;
+    typedef std::function< void ( ) > CancelCallback;
 
     typedef ::fwDataIO::writer::factory::Key Key;
 
@@ -106,9 +114,20 @@ public :
      * The extension can be empty (for a repository for example) or must return a string BEGINNING WITH A DOT
      * by default be empty
      */
-    FWDATAIO_API virtual std::string  extension()=0;
+    FWDATAIO_API virtual std::string  extension() = 0;
+
+    /**
+     * @brief Requests writer abortion.
+     */
+    FWDATAIO_API virtual void cancel();
+
+    /// Returns the internal job, nullptr by default
+    FWDATAIO_API virtual SPTR(::fwJobs::IJob) getJob() const
+    {
+        return nullptr;
+    }
 
-protected :
+protected:
 
     /// Constructor. Do nothing.
     FWDATAIO_API IObjectWriter();
@@ -136,4 +155,4 @@ protected :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_WRITER_IOBJECTWRITER_HPP_
+#endif // __FWDATAIO_WRITER_IOBJECTWRITER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/MeshWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/MeshWriter.hpp
index df28a93..4eee184 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/MeshWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/MeshWriter.hpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_WRITER_MESHWRITER_HPP_
-#define _FWDATAIO_WRITER_MESHWRITER_HPP_
+#ifndef __FWDATAIO_WRITER_MESHWRITER_HPP__
+#define __FWDATAIO_WRITER_MESHWRITER_HPP__
 
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Mesh.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -25,7 +24,7 @@ namespace writer
 /**
  * @brief   Mesh writer. Write file format .trian
  * @class   MeshWriter
- * 
+ *
  * @date    2011
  *
  * Ircad writer to write a ::fwData::Mesh (with only triangular cells) on filesystem which the file format
@@ -40,7 +39,7 @@ class FWDATAIO_CLASS_API MeshWriter :
     public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((MeshWriter)(GenericObjectWriter< ::fwData::Mesh >),
                                            (()),
@@ -68,4 +67,4 @@ public :
 } // namespace fwDataIO
 
 
-#endif // _FWDATAIO_WRITER_MESHWRITER_HPP_
+#endif // __FWDATAIO_WRITER_MESHWRITER_HPP__
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp
index 5ddf488..8dbd60c 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWDATAIOWRITERNAMESPACE_HPP_
-#define FWDATAIOWRITERNAMESPACE_HPP_
+#ifndef __FWDATAIO_WRITER_NAMESPACE_HPP__
+#define __FWDATAIO_WRITER_NAMESPACE_HPP__
 
 namespace fwDataIO
 {
 /**
  * @brief       This namespace fwDataIO::writer contains writer for severals data of the framework.
  * @namespace   fwDataIO::writer
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace writer
 
 }
 }
-#endif /* FWDATAIOWRITERNAMESPACE_HPP_ */
+#endif /* __FWDATAIO_WRITER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/TransformationMatrix3DWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/TransformationMatrix3DWriter.hpp
index 53d3c3a..41c3893 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/TransformationMatrix3DWriter.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/TransformationMatrix3DWriter.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _DATAIO_READER_TRANSFORMATIONMATRIX3DWRITER_HPP_
-#define _DATAIO_READER_TRANSFORMATIONMATRIX3DWRITER_HPP_
+#ifndef __FWDATAIO_WRITER_TRANSFORMATIONMATRIX3DWRITER_HPP__
+#define __FWDATAIO_WRITER_TRANSFORMATIONMATRIX3DWRITER_HPP__
 
-#include <boost/shared_ptr.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/location/SingleFile.hpp>
 
@@ -16,14 +15,16 @@
 #include "fwDataIO/writer/GenericObjectWriter.hpp"
 
 
-namespace fwDataIO {
+namespace fwDataIO
+{
 
-namespace writer {
+namespace writer
+{
 
 /**
  * @brief   Writer for transformation of 3D Matrix. Write file format .trf
  * @class   TransformationMatrix3DWriter
- * 
+ *
  * @date    2009
  *
  * Ircad writer to write a ::fwData::TransformationMatrix3D on filesystem which the file format
@@ -36,10 +37,11 @@ class FWDATAIO_CLASS_API TransformationMatrix3DWriter :
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (TransformationMatrix3DWriter)(GenericObjectWriter< ::fwData::TransformationMatrix3D >),
+    fwCoreClassDefinitionsWithFactoryMacro( (TransformationMatrix3DWriter)(GenericObjectWriter< ::fwData::
+                                                                                                TransformationMatrix3D >),
                                             (()),
                                             ::fwDataIO::writer::factory::New< TransformationMatrix3DWriter >
-                                           );
+                                            );
     /// Constructor. Do nothing.
     FWDATAIO_API TransformationMatrix3DWriter(::fwDataIO::writer::IObjectWriter::Key key);
 
@@ -58,4 +60,4 @@ public:
 
 }
 
-#endif /* _DATAIO_READER_TRANSFORMATIONMATRIX3DWRITER_HPP_ */
+#endif /* __FWDATAIO_WRITER_TRANSFORMATIONMATRIX3DWRITER_HPP__ */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/TriangularMeshWriter.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/TriangularMeshWriter.hpp
deleted file mode 100644
index 44a77fa..0000000
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/TriangularMeshWriter.hpp
+++ /dev/null
@@ -1,70 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATAIO_WRITER_TRIANGULARMESH_HPP_
-#define _FWDATAIO_WRITER_TRIANGULARMESH_HPP_
-
-#include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
-
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include "fwDataIO/config.hpp"
-#include "fwDataIO/writer/GenericObjectWriter.hpp"
-
-namespace fwData {
-    class TriangularMesh;
-}
-
-namespace fwDataIO
-{
-
-namespace writer
-{
-
-/**
- * @brief   Mesh writer. Write file format .trian
- * @class   TriangularMeshWriter
- * 
- * @date    2009
- *
- * Ircad writer to write a ::fwData::TriangularMesh on filesystem which the file format
- * is .trian. This format is basic. This is an ascii file which contains : 1) nb of points
- * 2) list of points (x,y,z). Line numbers represent index of point in vector 3) nb of triangles
- * 4) list of triangles with index of points and normals ( often set a -1 )
- */
-class FWDATAIO_CLASS_API TriangularMeshWriter :
-    public GenericObjectWriter< ::fwData::TriangularMesh>,
-    public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
-{
-
-public :
-
-    fwCoreClassDefinitionsWithFactoryMacro((TriangularMeshWriter)(GenericObjectWriter< ::fwData::TriangularMesh >),
-                                           (()),
-                                           ::fwDataIO::writer::factory::New< TriangularMeshWriter >
-                                           );
-    /// Constructor. Do nothing.
-    FWDATAIO_API TriangularMeshWriter(::fwDataIO::writer::IObjectWriter::Key key);
-
-    /// Destructor. Do nothing.
-    FWDATAIO_API virtual ~TriangularMeshWriter();
-
-    /// Write the file with standard iostream API.
-    FWDATAIO_API virtual void write();
-
-    /// Defines extension supported by this reader ".trian"
-    FWDATAIO_API virtual std::string  extension();
-
-};
-
-} // namespace writer
-
-} // namespace fwDataIO
-
-
-#endif // _FWDATAIO_WRITER_TRIANGULARMESH_HPP_
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp
index 53144b1..4c76afa 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace writer
 /**
  * @brief       Contains fwDataIO::writer::factory utilities
  * @namespace   fwDataIO::reader::factory
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/new.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/new.hpp
index 5f95036..798f800 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/new.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 #include <fwTools/DynamicAttributes.hxx>
@@ -36,10 +35,12 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwDataIO::writer::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwDataIO::writer::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 
@@ -48,7 +49,7 @@ FWDATAIO_API SPTR( ::fwDataIO::writer::IObjectWriter ) New( const ::fwDataIO::wr
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
 
     return obj;
 }
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/detail.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/detail.hpp
index dbc9a95..1adc40c 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/detail.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwDataIO::writer::IObjectWriter) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwDataIO::writer::IObjectWriter) (), KeyType > Type;
 
 FWDATAIO_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/macros.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/macros.hpp
index 71c80e3..02069a8 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/macros.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATAIO_WRITER_REGISTRY_MACRO_HPP__
-#define __FWDATAIO_WRITER_REGISTRY_MACRO_HPP__
+#ifndef __FWDATAIO_WRITER_REGISTRY_MACROS_HPP__
+#define __FWDATAIO_WRITER_REGISTRY_MACROS_HPP__
 
 #include "fwData/registry/detail.hpp"
 
@@ -17,10 +17,10 @@ namespace registry
 {
 
 #define fwDataIOWriterRegisterMacro( classname )                                  \
-    static ::fwDataIO::writer::IObjectWriter::Registrar< classname > s__factory__record__ ## __LINE__ ;
+    static ::fwDataIO::writer::IObjectWriter::Registrar< classname > s__factory__record__ ## __LINE__;
 
 } // end namespace registry
 } // end namespace writer
 } // end namespace fwDataIO
 
-#endif /*__FWDATAIO_WRITER_REGISTRY_MACRO_HPP__*/
+#endif /*__FWDATAIO_WRITER_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp
index 60014d4..d5f5ef5 100644
--- a/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp
+++ b/SrcLib/core/fwDataIO/include/fwDataIO/writer/registry/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace writer
 /**
  * @brief       Contains fwDataIO::writer::registry details
  * @namespace   fwDataIO::reader::registry
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/ArrayReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/ArrayReader.cpp
index f4725a4..545ab67 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/ArrayReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/ArrayReader.cpp
@@ -1,20 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fstream>
-#include <iostream>
+#include "fwDataIO/reader/ArrayReader.hpp"
 
-#include <boost/cstdint.hpp>
+#include "fwDataIO/reader/registry/macros.hpp"
 
 #include <fwCore/Exception.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwDataTools/helper/Array.hpp>
 
-#include "fwDataIO/reader/ArrayReader.hpp"
-#include "fwDataIO/reader/registry/macros.hpp"
+#include <boost/cstdint.hpp>
+
+#include <fstream>
+#include <iostream>
 
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::ArrayReader );
@@ -28,13 +29,16 @@ namespace reader
 
 //------------------------------------------------------------------------------
 
-ArrayReader::ArrayReader(::fwDataIO::reader::IObjectReader::Key key) : ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
+ArrayReader::ArrayReader(::fwDataIO::reader::IObjectReader::Key key) : ::fwData::location::enableSingleFile<
+                                                                           IObjectReader >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 ArrayReader::~ArrayReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -44,10 +48,10 @@ void ArrayReader::read()
     ::boost::filesystem::path file = ::fwData::location::SingleFile::dynamicCast(m_location)->getPath();
 
     ::fwData::Array::sptr array = this->getConcreteObject();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
 
     size_t arraySizeInBytes = array->resize(array->getSize());
-    char* buff = arrayHelper.begin();
+    char* buff              = arrayHelper.begin();
 
     std::ifstream fs(file.string().c_str(), std::ios::in|std::ios::binary|std::ios::ate);
 
@@ -57,7 +61,7 @@ void ArrayReader::read()
     fs.seekg(0, std::ios::beg);
 
     FW_RAISE_IF(file << ": Bad file size, expected: " << arraySizeInBytes << ", was: " << fileSize,
-            arraySizeInBytes - fileSize != 0);
+                arraySizeInBytes - fileSize != 0);
 
     fs.read(buff, arraySizeInBytes);
 
@@ -66,7 +70,7 @@ void ArrayReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  ArrayReader::extension()
+std::string ArrayReader::extension()
 {
     return (".raw");
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/DictionaryReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/DictionaryReader.cpp
index 9962670..e806d45 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/DictionaryReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/DictionaryReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@
 #include <sstream>
 
 #ifdef DEBUG
-  static std::stringstream spiritDebugStream;
+static std::stringstream spiritDebugStream;
   #define BOOST_SPIRIT_DEBUG_OUT spiritDebugStream
   #define BOOST_SPIRIT_DEBUG
 #endif
@@ -29,8 +29,7 @@
 #include <boost/spirit/include/phoenix_core.hpp>
 #include <boost/spirit/include/phoenix_operator.hpp>
 #include <boost/spirit/include/phoenix_bind.hpp>
-#include <boost/spirit/home/phoenix/statement/sequence.hpp>
-#include <boost/spirit/home/phoenix/container.hpp>
+#include <boost/spirit/include/phoenix_statement.hpp>
 #include <boost/spirit/include/phoenix_stl.hpp>
 
 #include <boost/fusion/include/adapt_struct.hpp>
@@ -79,19 +78,19 @@ struct line
 BOOST_FUSION_ADAPT_STRUCT(
     ::fwDataIO::line,
     (std::string, type)
-    (double, red)
-    (double, green)
-    (double, blue)
-    (double, alpha)
-    (std::string, catgegory)
-    (std::string, organClass)
-    (std::string, attachment)
-    (std::string, nativeExp)
-    (std::string, nativeExpGeo)
-    (std::string, anatomicRegion)
-    (std::string, propertyCategory)
-    (std::string, propertyType)
-)
+        (double, red)
+        (double, green)
+        (double, blue)
+        (double, alpha)
+        (std::string, catgegory)
+        (std::string, organClass)
+        (std::string, attachment)
+        (std::string, nativeExp)
+        (std::string, nativeExpGeo)
+        (std::string, anatomicRegion)
+        (std::string, propertyCategory)
+        (std::string, propertyType)
+    )
 
 //------------------------------------------------------------------------------
 
@@ -106,7 +105,7 @@ inline std::string trim ( std::string &s )
 std::string  reformatString(std::string& expr)
 {
     std::string trimStr = ::boost::algorithm::trim_copy(expr);
-    std::string result =  ::boost::algorithm::to_upper_copy(trimStr.substr(0,1))
+    std::string result  = ::boost::algorithm::to_upper_copy(trimStr.substr(0,1))
                           + ::boost::algorithm::to_lower_copy(trimStr.substr(1));
     return (result);
 }
@@ -119,7 +118,7 @@ std::string getValues(const MapType & m)
 {
     std::stringstream str;
     typedef typename MapType::const_iterator const_iterator;
-    const_iterator iter  = m.begin();
+    const_iterator iter = m.begin();
     str << "( " << iter->first;
     for(; iter != m.end(); ++iter )
     {
@@ -133,7 +132,7 @@ std::string getValues(const MapType & m)
 namespace fwDataIO
 {
 
-namespace qi = boost::spirit::qi;
+namespace qi    = boost::spirit::qi;
 namespace ascii = boost::spirit::ascii;
 
 
@@ -157,61 +156,61 @@ struct line_parser : qi::grammar<Iterator, std::vector <line>() >
 
         error.clear();
 
-        lines = +( line[phx::push_back(qi::_val, qi::_1)] | comment ) >> eoi  ;
-        comment =  *blank >> lit('#') >> *(char_- eol)>> +qi::eol;
+        lines   = +( line[phx::push_back(qi::_val, qi::_1)] | comment ) >> eoi;
+        comment = *blank >> lit('#') >> *(char_- eol)>> +qi::eol;
 
         line = trimmedString >> lit(';')
-                  >> omit[*blank]>> lit('(')
-                    >>  dbl   >> lit(',')
-                    >>  dbl   >> lit(',')
-                    >>  dbl   >> lit(',')
-                    >>  dbl
-                >> lit(')') >> omit[*blank]
-                >> lit(';')
-                >>  stringSet >> lit(';')
-                >>  trimmedString >> lit(';')
-                >>  trimmedString >> lit(';')
-                >>  trimmedStringExpr >> lit(';')
-                >>  trimmedStringExpr >> lit(';')
-                >>  trimmedString >> lit(';')
-                >>  trimmedString >> lit(';')
-                >>  trimmedString
-                >> +qi::eol;
-
-        trimmedString =   str[qi::_val = phx::bind(trim, qi::_1)] ;
-        str =   *( (alnum|char_("_"))[qi::_val += qi::_1] | blank[qi::_val += " "]) ;
-
-        trimmedStringExpr =   stringExpr[qi::_val = phx::bind(trim, qi::_1)] ;
-        stringExpr =   *( (alnum|char_("()_,.+-"))[qi::_val += qi::_1] | blank[qi::_val += " "] ) ;
-
-        stringSet =   stringWithComma[qi::_val = phx::bind(trim, qi::_1)] ;
-        stringWithComma =   *( (alnum| char_(",_"))[qi::_val += qi::_1] | blank[qi::_val += " "] ) ;
+               >> omit[*blank]>> lit('(')
+               >>  dbl   >> lit(',')
+               >>  dbl   >> lit(',')
+               >>  dbl   >> lit(',')
+               >>  dbl
+               >> lit(')') >> omit[*blank]
+               >> lit(';')
+               >>  stringSet >> lit(';')
+               >>  trimmedString >> lit(';')
+               >>  trimmedString >> lit(';')
+               >>  trimmedStringExpr >> lit(';')
+               >>  trimmedStringExpr >> lit(';')
+               >>  trimmedString >> lit(';')
+               >>  trimmedString >> lit(';')
+               >>  trimmedString
+               >> +qi::eol;
+
+        trimmedString = str[qi::_val = phx::bind(trim, qi::_1)];
+        str           = *( (alnum|char_("_"))[qi::_val += qi::_1] | blank[qi::_val += " "]);
+
+        trimmedStringExpr = stringExpr[qi::_val = phx::bind(trim, qi::_1)];
+        stringExpr        = *( (alnum|char_("()_,.+-"))[qi::_val += qi::_1] | blank[qi::_val += " "] );
+
+        stringSet       = stringWithComma[qi::_val = phx::bind(trim, qi::_1)];
+        stringWithComma = *( (alnum| char_(",_"))[qi::_val += qi::_1] | blank[qi::_val += " "] );
 
 
         dbl = omit[*blank] >> double_ >> omit[*blank];
 
     #ifdef BOOST_SPIRIT_DEBUG
-      BOOST_SPIRIT_DEBUG_NODE(comment);
-      BOOST_SPIRIT_DEBUG_NODE(trimmedString);
-      BOOST_SPIRIT_DEBUG_NODE(trimmedStringExpr);
-      BOOST_SPIRIT_DEBUG_NODE(stringSet);
-      BOOST_SPIRIT_DEBUG_NODE(dbl);
-      BOOST_SPIRIT_DEBUG_NODE(line);
-      BOOST_SPIRIT_DEBUG_NODE(lines);
-      SLM_DEBUG(spiritDebugStream.str());
-      spiritDebugStream.str( std::string() );
+        BOOST_SPIRIT_DEBUG_NODE(comment);
+        BOOST_SPIRIT_DEBUG_NODE(trimmedString);
+        BOOST_SPIRIT_DEBUG_NODE(trimmedStringExpr);
+        BOOST_SPIRIT_DEBUG_NODE(stringSet);
+        BOOST_SPIRIT_DEBUG_NODE(dbl);
+        BOOST_SPIRIT_DEBUG_NODE(line);
+        BOOST_SPIRIT_DEBUG_NODE(lines);
+        SLM_DEBUG(spiritDebugStream.str());
+        spiritDebugStream.str( std::string() );
     #endif
 
-      qi::on_error< qi::fail>
-      (
-              line
-              , phx::ref( (std::ostream &)error )
-                    << phx::val("Error! Expecting ")
-                    << qi::_4                      // what failed?
-                    << phx::val(" here: \"")
-                    << phx::construct<std::string>(qi::_3, qi::_2)   // iterators to error-pos, end
-                    << phx::val("\"")
-                    << std::endl
+        qi::on_error< qi::fail>
+        (
+            line
+            , phx::ref( (std::ostream &)error )
+            << phx::val("Error! Expecting ")
+            << qi::_4                              // what failed?
+            << phx::val(" here: \"")
+            << phx::construct<std::string>(qi::_3, qi::_2)           // iterators to error-pos, end
+            << phx::val("\"")
+            << std::endl
         );
 
     }
@@ -246,12 +245,12 @@ std::pair<bool,std::string> parse(Iterator first,  Iterator last, std::string& b
     typedef ::fwDataIO::line_parser<iterator_type> line_parser;
 
     iterator_type iter = buf.begin();
-    iterator_type end = buf.end();
+    iterator_type end  = buf.end();
 
     line_parser grammar; // Our grammar
 
-    bool result = phrase_parse(iter, end, grammar,  space - blank - eol, lines);
-    bool success =  result && (iter == end);
+    bool result     = phrase_parse(iter, end, grammar,  space - blank - eol, lines);
+    bool success    = result && (iter == end);
     std::string msg = grammar.error.str();
     return std::make_pair( success, msg );
 }
@@ -266,15 +265,16 @@ DictionaryReader::DictionaryReader(::fwDataIO::reader::IObjectReader::Key key)
 //------------------------------------------------------------------------------
 
 DictionaryReader::~DictionaryReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void DictionaryReader::read()
 {
     SLM_TRACE_FUNC();
-    assert( ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
-    ::boost::filesystem::path path = ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
+    assert( std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
+    ::boost::filesystem::path path = std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
 
     OSLM_INFO( "[DictionaryReader::read] dictionary file: " << path.string());
     SLM_ASSERT("Empty path for dictionary file", !path.empty());
@@ -285,7 +285,7 @@ void DictionaryReader::read()
     std::ifstream file;
     file.open(path.string().c_str(), std::ios::binary );
 
-    std::string errorOpen  = "Unable to open " + path.string();
+    std::string errorOpen = "Unable to open " + path.string();
     FW_RAISE_IF(errorOpen, !file.is_open());
 
     file.seekg (0, std::ios::end);
@@ -309,28 +309,33 @@ void DictionaryReader::read()
     // File the dictionary Structure
     ::fwData::StructureTraitsDictionary::sptr structDico = getConcreteObject();
 
-    BOOST_FOREACH(::fwDataIO::line line, dicolines)
+    for(::fwDataIO::line line :  dicolines)
     {
         ::fwData::StructureTraits::sptr newOrgan = ::fwData::StructureTraits::New();
         newOrgan->setType(line.type);
 
         std::string classReformated = reformatString(line.organClass);
-        ::fwData::StructureTraitsHelper::ClassTranslatorType::right_const_iterator strClassIter = ::fwData::StructureTraitsHelper::s_CLASSTRANSLATOR.right.find(classReformated);
+        ::fwData::StructureTraitsHelper::ClassTranslatorType::right_const_iterator strClassIter =
+            ::fwData::StructureTraitsHelper::s_CLASSTRANSLATOR.right.find(classReformated);
         std::string availableValues = getValues(::fwData::StructureTraitsHelper::s_CLASSTRANSLATOR.right);
         error = "Organ class " + classReformated + " isn't available. Authorized type are " + availableValues;
         FW_RAISE_IF(error, !(strClassIter != ::fwData::StructureTraitsHelper::s_CLASSTRANSLATOR.right.end()));
         newOrgan->setClass(strClassIter->second);
 
-        newOrgan->setColor(::fwData::Color::New(line.red/255.0f, line.green/255.0f, line.blue/255.0f, line.alpha/100.0f));
+        newOrgan->setColor(::fwData::Color::New(line.red/255.0f, line.green/255.0f, line.blue/255.0f,
+                                                line.alpha/100.0f));
         std::vector<std::string> categorylist;
         ::boost::algorithm::split( categorylist, line.catgegory, ::boost::algorithm::is_any_of(",") );
         ::fwData::StructureTraits::CategoryContainer categories;
-        BOOST_FOREACH(std::string category, categorylist)
+        for(std::string category :  categorylist)
         {
             std::string catReformated = reformatString(category);
-            ::fwData::StructureTraitsHelper::CategoryTranslatorType::right_const_iterator strCategoryIter = ::fwData::StructureTraitsHelper::s_CATEGORYTRANSLATOR.right.find(catReformated);
-            availableValues = getValues(::fwData::StructureTraitsHelper::s_CATEGORYTRANSLATOR.right);
-            error = "Category " + catReformated + " isn't available. Authorized type are " + availableValues;
+            ::fwData::StructureTraitsHelper::CategoryTranslatorType::right_const_iterator strCategoryIter =
+                ::fwData::StructureTraitsHelper::s_CATEGORYTRANSLATOR.right.find(catReformated);
+            availableValues = getValues(
+                ::fwData::StructureTraitsHelper::s_CATEGORYTRANSLATOR.right);
+            error =
+                "Category " + catReformated + " isn't available. Authorized type are " + availableValues;
             FW_RAISE_IF(error, !(strCategoryIter != ::fwData::StructureTraitsHelper::s_CATEGORYTRANSLATOR.right.end()));
             categories.push_back(strCategoryIter->second);
         }
@@ -347,7 +352,7 @@ void DictionaryReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  DictionaryReader::extension()
+std::string DictionaryReader::extension()
 {
     SLM_TRACE_FUNC();
     return (".dic");
@@ -355,14 +360,9 @@ std::string  DictionaryReader::extension()
 
 //------------------------------------------------------------------------------
 
-::boost::filesystem::path  DictionaryReader::getDefaultDictionaryPath()
+::boost::filesystem::path DictionaryReader::getDefaultDictionaryPath()
 {
-#ifdef SPECIALINSTALL
-	std::string share_path = SHAREPATH;
-#else
-	std::string share_path = "./share/";
-#endif
-    std::string dicoPath = std::string(share_path) + PRJ_NAME +"_"+ FWDATAIO_VER + "/OrganDictionary.dic";
+    std::string dicoPath = std::string("./share/") + PRJ_NAME +"_"+ FWDATAIO_VER + "/OrganDictionary.dic";
     return dicoPath;
 }
 
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzArrayReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzArrayReader.cpp
index 72d1f5e..f1f6128 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzArrayReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzArrayReader.cpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <boost/cstdint.hpp>
+#include "fwDataIO/reader/GzArrayReader.hpp"
+
+#include "fwDataIO/reader/registry/macros.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
 
 #include <zlib.h>
 
-#include <fwComEd/helper/Array.hpp>
+#include <boost/cstdint.hpp>
 
-#include "fwDataIO/reader/GzArrayReader.hpp"
-#include "fwDataIO/reader/registry/macros.hpp"
+#include <iostream>
 
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::GzArrayReader );
@@ -27,13 +29,15 @@ namespace reader
 //------------------------------------------------------------------------------
 
 GzArrayReader::GzArrayReader(::fwDataIO::reader::IObjectReader::Key key) :
-        ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
+    ::fwData::location::enableSingleFile< IObjectReader >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 GzArrayReader::~GzArrayReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -46,7 +50,7 @@ void GzArrayReader::read()
 
     ::fwData::Array::sptr array = this->getConcreteObject();
     size_t arraySizeInBytes = array->resize(array->getSize());
-    ::fwComEd::helper::Array helper(array);
+    ::fwDataTools::helper::Array helper(array);
     void* buff = helper.getBuffer();
 
     gzFile rawFile = gzopen(file.string().c_str(), "rb");
@@ -54,7 +58,7 @@ void GzArrayReader::read()
     {
         gzclose(rawFile);
         std::string str = "Unable to open ";
-        str+= file.string();
+        str += file.string();
         throw std::ios_base::failure(str);
     }
 
@@ -63,14 +67,14 @@ void GzArrayReader::read()
     if ( uncompressedBytesReaded != arraySizeInBytes )
     {
         std::string str = "Unable to read ";
-        str+= file.string();
+        str += file.string();
         throw std::ios_base::failure(str);
     }
 }
 
 //------------------------------------------------------------------------------
 
-std::string  GzArrayReader::extension()
+std::string GzArrayReader::extension()
 {
     return (".raw.gz");
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp
index b974290..dfd4998 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/GzBufferImageReader.cpp
@@ -1,22 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <boost/cstdint.hpp>
+#include "fwDataIO/reader/GzBufferImageReader.hpp"
 
-#include <zlib.h>
+#include "fwDataIO/reader/registry/macros.hpp"
 
-#include <fwData/Object.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Object.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include "fwDataIO/reader/GzBufferImageReader.hpp"
-#include "fwDataIO/reader/registry/macros.hpp"
+#include <zlib.h>
+
+#include <boost/cstdint.hpp>
+
+#include <iostream>
 
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::GzBufferImageReader );
@@ -30,13 +32,17 @@ namespace reader
 
 //------------------------------------------------------------------------------
 
-GzBufferImageReader::GzBufferImageReader(::fwDataIO::reader::IObjectReader::Key key) : ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
+GzBufferImageReader::GzBufferImageReader(::fwDataIO::reader::IObjectReader::Key key) : ::fwData::location::
+                                                                                       enableSingleFile< IObjectReader >(
+                                                                                           this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 GzBufferImageReader::~GzBufferImageReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -51,8 +57,8 @@ void GzBufferImageReader::read()
     size_t imageSizeInBytes = image->getSizeInBytes();
 
     image->allocate();
-    ::fwComEd::helper::Image helper(image);
-    char *ptr = static_cast<char*>(helper.getBuffer());
+    ::fwDataTools::helper::Image helper(image);
+    char* ptr = static_cast<char*>(helper.getBuffer());
 
     gzFile rawFile = gzopen(file.string().c_str(), "rb");
 
@@ -60,7 +66,7 @@ void GzBufferImageReader::read()
     if ( rawFile == 0 )
     {
         std::string str = "Unable to open ";
-        str+= file.string();
+        str += file.string();
         throw std::ios_base::failure(str);
     }
 
@@ -77,14 +83,14 @@ void GzBufferImageReader::read()
     if ( uncompressedbytesreaded == -1 )
     {
         std::string str = "Unable to read ";
-        str+= file.string();
+        str += file.string();
         throw std::ios_base::failure(str);
     }
 }
 
 //------------------------------------------------------------------------------
 
-std::string  GzBufferImageReader::extension()
+std::string GzBufferImageReader::extension()
 {
     return (".raw.gz");
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/IObjectReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/IObjectReader.cpp
index 67b7c8a..69aab94 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/IObjectReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/IObjectReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,12 +17,14 @@ namespace reader
 //------------------------------------------------------------------------------
 
 IObjectReader::IObjectReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 IObjectReader::~IObjectReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -35,8 +37,9 @@ void IObjectReader::setObject( ::fwTools::Object::sptr _pObject )
 
 ::fwTools::Object::sptr IObjectReader::getObject()
 {
-    assert( !m_object.expired() );
-    return m_object.lock();
+    auto object = m_object.lock();
+    SLM_ASSERT( "Object is null", object );
+    return object;
 }
 
 //------------------------------------------------------------------------------
@@ -55,6 +58,18 @@ void IObjectReader::setLocation( const ::fwData::location::ILocation::sptr _loca
 
 //------------------------------------------------------------------------------
 
+void IObjectReader::cancel()
+{
+    auto job = this->getJob();
+    if ( job )
+    {
+        job->cancel();
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
 } // namespace reader
 
 } // namespace fwDataIO
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp
index 3f25214..71170f0 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/MeshReader.cpp
@@ -1,35 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <fstream>
-
-#include <boost/cstdint.hpp>
-#include <boost/foreach.hpp>
+#include "fwDataIO/reader/MeshReader.hpp"
 
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/home/phoenix/statement/sequence.hpp>
-#include <boost/spirit/home/phoenix/container.hpp>
-#include <boost/spirit/home/phoenix/bind/bind_member_function.hpp>
-#include <boost/spirit/home/phoenix/core/argument.hpp>
-#include <boost/spirit/home/phoenix/operator/bitwise.hpp>
+#include "fwDataIO/reader/registry/macros.hpp"
 
-#include <fwData/Object.hpp>
-#include <fwData/TriangularMesh.hpp>
 #include <fwData/Mesh.hpp>
+#include <fwData/Object.hpp>
 #include <fwData/location/SingleFile.hpp>
 
-#include <fwComEd/helper/Mesh.hpp>
-#include <fwComEd/helper/Array.hpp>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Mesh.hpp>
 
-#include "fwDataIO/reader/MeshReader.hpp"
-#include "fwDataIO/reader/registry/macros.hpp"
+#include <boost/cstdint.hpp>
+#include <boost/spirit/include/phoenix_bind.hpp>
+#include <boost/spirit/include/phoenix_core.hpp>
+#include <boost/spirit/include/phoenix_operator.hpp>
+#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/spirit/include/phoenix_stl.hpp>
+#include <boost/spirit/include/qi.hpp>
 
+#include <fstream>
+#include <iostream>
 
 fwDataIOReaderRegisterMacro( ::fwDataIO::reader::MeshReader );
 
@@ -43,14 +38,18 @@ namespace reader
 //------------------------------------------------------------------------------
 
 struct cell_data_offset_generator {
-        ::fwData::Mesh::CellDataOffsetType current;
-        cell_data_offset_generator() {current=0;}
-        int operator()() {
-            ::fwData::Mesh::CellDataOffsetType res = current;
-            current += 3;
-            return res;
-        }
-} ;
+    ::fwData::Mesh::CellDataOffsetType current;
+    cell_data_offset_generator()
+    {
+        current = 0;
+    }
+    int operator()()
+    {
+        ::fwData::Mesh::CellDataOffsetType res = current;
+        current += 3;
+        return res;
+    }
+};
 
 //------------------------------------------------------------------------------
 
@@ -86,98 +85,104 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
     ::fwData::Array::sptr cellDataOffsetsArray = mesh->getCellDataOffsetsArray();
     ::fwData::Array::sptr cellNormalsArray     = mesh->getCellNormalsArray();
 
-    fwComEd::helper::Array pointHelper(pointArray);
-    fwComEd::helper::Array cellDataHelper(cellDataArray);
-    fwComEd::helper::Array cellNormalsHelper(cellNormalsArray);
-    fwComEd::helper::Array cellDataOffsetsHelper(cellDataOffsetsArray);
-    fwComEd::helper::Array cellTypesHelper(cellTypesArray);
+    ::fwDataTools::helper::Array pointHelper(pointArray);
+    ::fwDataTools::helper::Array cellDataHelper(cellDataArray);
+    ::fwDataTools::helper::Array cellNormalsHelper(cellNormalsArray);
+    ::fwDataTools::helper::Array cellDataOffsetsHelper(cellDataOffsetsArray);
+    ::fwDataTools::helper::Array cellTypesHelper(cellTypesArray);
 
 
     ::fwData::Array::SizeType pointArraySize;
     ::fwData::Array::SizeType cellArraySize;
 
-    ::fwData::Mesh::PointValueType  *pointArrayBuffer       = 0;
-    ::fwData::Mesh::CellValueType   *cellDataArrayBuffer    = 0;
-    ::fwData::Mesh::NormalValueType *cellNormalsArrayBuffer = 0;
+    ::fwData::Mesh::PointValueType* pointArrayBuffer        = 0;
+    ::fwData::Mesh::CellValueType* cellDataArrayBuffer      = 0;
+    ::fwData::Mesh::NormalValueType* cellNormalsArrayBuffer = 0;
 
     bool r = phrase_parse(first, last,
 
-        //  Begin grammar
-        (
-            ulong_long
-            [
-                ref(nbPoints) = _1,
-                phx::bind(&::fwData::Mesh::setNumberOfPoints, *mesh, _1),
-                phx::push_back(phx::ref(pointArraySize),phx::ref(nbPoints)),
-                phx::bind(&::fwData::Array::resize, *pointArray, phx::ref(pointArraySize), true) ,
-                ref(pointArrayBuffer) = phx::bind(&::fwComEd::helper::Array::begin< ::fwData::Mesh::PointValueType >, pointHelper )
-            ]
-
-            >> repeat(ref(nbPoints))
-            [
-                (float_ >> float_ >> float_)
-                [
-                    *ref(pointArrayBuffer)++ = _1,
-                    *ref(pointArrayBuffer)++ = _2,
-                    *ref(pointArrayBuffer)++ = _3
-                ]
-            ]
-
-            >> ulong_long
-            [
-                ref(nbCells) = _1,
-                phx::bind(&::fwData::Mesh::setNumberOfCells, *mesh, _1),
-                phx::bind(&::fwData::Mesh::setCellDataSize, *mesh, _1*3),
-                phx::bind(&::fwData::Mesh::adjustAllocatedMemory, *mesh),
-                ref(cellDataArrayBuffer) = phx::bind(&::fwComEd::helper::Array::begin< ::fwData::Mesh::CellValueType >, cellDataHelper ),
-                ref(cellNormalsArrayBuffer) = phx::bind(&::fwComEd::helper::Array::begin< ::fwData::Mesh::NormalValueType >, cellNormalsHelper )
-            ]
-
-            >> repeat(ref(nbCells))
-            [
-                (int_ >> int_ >> int_ >> float_ >> float_ >> float_)
-                [
-                    *ref(cellDataArrayBuffer)++ = _1,
-                    *ref(cellDataArrayBuffer)++ = _2,
-                    *ref(cellDataArrayBuffer)++ = _3,
-                    *ref(cellNormalsArrayBuffer)++ = _4,
-                    *ref(cellNormalsArrayBuffer)++ = _5,
-                    *ref(cellNormalsArrayBuffer)++ = _6
-                ]
-            ]
-        ),
-        //  End grammar
-
-        space
-        );
+                          //  Begin grammar
+                          (
+                              ulong_long
+                              [
+                                  ref(nbPoints) = _1,
+                                  phx::bind(&::fwData::Mesh::setNumberOfPoints, mesh, _1),
+                                  phx::push_back(phx::ref(pointArraySize),phx::ref(nbPoints)),
+                                  phx::bind(&::fwData::Array::resize, pointArray, phx::ref(pointArraySize), true),
+                                  ref(pointArrayBuffer) =
+                                      phx::bind(&::fwDataTools::helper::Array::begin< ::fwData::Mesh::PointValueType >,
+                                                &pointHelper )
+                              ]
+
+                              >> repeat(ref(nbPoints))
+                              [
+                                  (float_ >> float_ >> float_)
+                                  [
+                                      *ref(pointArrayBuffer)++ = _1,
+                                      *ref(pointArrayBuffer)++ = _2,
+                                      *ref(pointArrayBuffer)++ = _3
+                                  ]
+                              ]
+
+                              >> ulong_long
+                              [
+                                  ref(nbCells) = _1,
+                                  phx::bind(&::fwData::Mesh::setNumberOfCells, mesh, _1),
+                                  phx::bind(&::fwData::Mesh::setCellDataSize, mesh, _1*3),
+                                  phx::bind(&::fwData::Mesh::adjustAllocatedMemory, mesh),
+                                  ref(cellDataArrayBuffer) =
+                                      phx::bind(&::fwDataTools::helper::Array::begin< ::fwData::Mesh::CellValueType >,
+                                                &cellDataHelper ),
+                                  ref(cellNormalsArrayBuffer) =
+                                      phx::bind(&::fwDataTools::helper::Array::begin< ::fwData::Mesh::NormalValueType >,
+                                                &cellNormalsHelper )
+                              ]
+
+                              >> repeat(ref(nbCells))
+                              [
+                                  (int_ >> int_ >> int_ >> float_ >> float_ >> float_)
+                                  [
+                                      *ref(cellDataArrayBuffer)++ = _1,
+                                      *ref(cellDataArrayBuffer)++ = _2,
+                                      *ref(cellDataArrayBuffer)++ = _3,
+                                      *ref(cellNormalsArrayBuffer)++ = _4,
+                                      *ref(cellNormalsArrayBuffer)++ = _5,
+                                      *ref(cellNormalsArrayBuffer)++ = _6
+                                  ]
+                              ]
+                          ),
+                          //  End grammar
+
+                          space
+                          );
 
     std::fill(
-            cellTypesHelper.begin< ::fwData::Mesh::CellTypes >(),
-            cellTypesHelper.end< ::fwData::Mesh::CellTypes >(),
-            static_cast< ::fwData::Mesh::CellTypes >(::fwData::Mesh::TRIANGLE)
-            );
+        cellTypesHelper.begin< ::fwData::Mesh::CellTypes >(),
+        cellTypesHelper.end< ::fwData::Mesh::CellTypes >(),
+        static_cast< ::fwData::Mesh::CellTypes >(::fwData::Mesh::TRIANGLE)
+        );
 
 
     cell_data_offset_generator cellDataOffsetGenerator;
 
     std::generate(
-            cellDataOffsetsHelper.begin< ::fwData::Mesh::CellDataOffsetType >(),
-            cellDataOffsetsHelper.end< ::fwData::Mesh::CellDataOffsetType >(),
-            cellDataOffsetGenerator
-            );
+        cellDataOffsetsHelper.begin< ::fwData::Mesh::CellDataOffsetType >(),
+        cellDataOffsetsHelper.end< ::fwData::Mesh::CellDataOffsetType >(),
+        cellDataOffsetGenerator
+        );
 
 
 
     // Check if normals array is filled of -1. values
     const float normalBadValue = -1.f;
-    float normal = normalBadValue;
-    int &n = *reinterpret_cast<int*>(&normal);
+    float normal               = normalBadValue;
+    int& n                     = *reinterpret_cast<int*>(&normal);
 
     std::for_each(
-            cellNormalsHelper.begin< int >(),
-            cellNormalsHelper.end< int >(),
-            ref(n) &= boost::phoenix::arg_names::arg1
-            );
+        cellNormalsHelper.begin< int >(),
+        cellNormalsHelper.end< int >(),
+        ref(n) &= boost::phoenix::arg_names::arg1
+        );
 
     if (normal == -1)
     {
@@ -186,7 +191,9 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
     }
 
     if (first != last) // fail if we didn't get a full match
+    {
         return false;
+    }
     return r;
 
 }
@@ -196,23 +203,25 @@ bool parseTrian2(Iterator first, Iterator last, ::fwData::Mesh::sptr mesh)
 //------------------------------------------------------------------------------
 
 MeshReader::MeshReader(::fwDataIO::reader::IObjectReader::Key key)
-: ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
+    : ::fwData::location::enableSingleFile< IObjectReader >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 MeshReader::~MeshReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void MeshReader::read()
 {
-    assert( ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
-    ::boost::filesystem::path path = ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
+    assert( std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
+    ::boost::filesystem::path path = std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
 
-    OSLM_TRACE( "Trian file: " << path.string());
-    SLM_ASSERT("Empty path for TriangularMesh file", !path.empty() );
+    SLM_TRACE( "Trian file: " + path.string());
+    SLM_ASSERT("Empty path for Trian file", !path.empty() );
 
 
     size_t length;
@@ -223,7 +232,7 @@ void MeshReader::read()
 
     if (!file.is_open())
     {
-        OSLM_ERROR( "Trian file loading error for " << path.string());
+        SLM_ERROR( "Trian file loading error for " + path.string());
         throw std::ios_base::failure("Unable to open " + path.string());
     }
 
@@ -234,7 +243,7 @@ void MeshReader::read()
 
     //buffer = new char [length];
     buf.resize(length);
-    char *buffer = &buf[0];
+    char* buffer = &buf[0];
 
     file.read (buffer, length);
     file.close();
@@ -254,7 +263,7 @@ void MeshReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  MeshReader::extension()
+std::string MeshReader::extension()
 {
     return (".trian");
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp
index f8f4508..e61be53 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TagReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -33,26 +33,29 @@ namespace reader
 //------------------------------------------------------------------------------
 
 TagReader::TagReader(::fwDataIO::reader::IObjectReader::Key key)
-: ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
+    : ::fwData::location::enableSingleFile< IObjectReader >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 TagReader::~TagReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void TagReader::read()
 {
-    assert( ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
-    ::boost::filesystem::path path = ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
+    assert( ::std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
+    ::boost::filesystem::path path =
+        ::std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
 
 
     OSLM_INFO( "[TagReader::read] Tag file: " << path);
     assert( path.empty() ==  false );
 
-    ::boost::shared_ptr< ::fwData::Tag > tag = getConcreteObject();
+    ::std::shared_ptr< ::fwData::Tag > tag = getConcreteObject();
 
     std::fstream file;
     file.open(path.string().c_str(), std::fstream::in);
@@ -60,7 +63,7 @@ void TagReader::read()
     {
         OSLM_ERROR( "Tag file loading error for " << path.string());
         std::string str = "Unable to open ";
-        str+= path.string();
+        str += path.string();
         throw std::ios_base::failure(str);
     }
 
@@ -77,25 +80,24 @@ void TagReader::read()
         {
             int nbPts;
             double x,y,z;
-            double radius=0.0;
+            double radius = 0.0;
             file>>x>>y>>z;
             file>>nbPts;
             tag->setType(type);
-            for(int i=0; i < nbPts; i++)
+            for(int i = 0; i < nbPts; i++)
             {
                 ::fwData::Point::sptr p;
-//              ::fwData::Point::PointCoordArray vPoint;
                 fwVec3d vPoint;
                 file>>vPoint[0]>>vPoint[1]>>vPoint[2]>>radius;
-                p->setCRefCoord(vPoint);
+                p->setCoord(vPoint);
                 tag->getRefPointList()->getRefPoints().push_back(p);
             }
         }
         else
         {
-            OSLM_ERROR( "Tag file loading error for " << path.string() <<" with type "<<type);
+            SLM_ERROR( "Tag file loading error for " + path.string() + " with type " + type);
             std::string str = "Unable to open ";
-            str+= path.string();
+            str += path.string();
             throw std::ios_base::failure(str);
         }
     }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TransformationMatrix3DReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TransformationMatrix3DReader.cpp
index 9fa7853..bdaee6f 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TransformationMatrix3DReader.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TransformationMatrix3DReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,35 +24,36 @@ namespace reader
 {
 
 TransformationMatrix3DReader::TransformationMatrix3DReader(::fwDataIO::reader::IObjectReader::Key key) :
-        ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
+    ::fwData::location::enableSingleFile< IObjectReader >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 TransformationMatrix3DReader::~TransformationMatrix3DReader()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void TransformationMatrix3DReader::read()
 {
-    assert( ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
-    ::boost::filesystem::path file = ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
+    assert( ::std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
+    ::boost::filesystem::path file =
+        ::std::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
 
-    assert( ::boost::filesystem::exists(file) ) ;
+    assert( ::boost::filesystem::exists(file) );
 
     std::ifstream inFile(file.string().c_str(), std::ifstream::in );
     assert( inFile.good() );
 
     char readedValue = 0;
     double value;
-    this->getConcreteObject()->getRefCoefficients().clear();
-    this->getConcreteObject()->getRefCoefficients().reserve(16);
 
     while ( !inFile.eof() && readedValue<16 )
     {
         inFile >> value;
-        this->getConcreteObject()->getRefCoefficients().push_back( value );
+        this->getConcreteObject()->getRefCoefficients()[readedValue] = value;
         readedValue++;
     }
 
@@ -61,7 +62,7 @@ void TransformationMatrix3DReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  TransformationMatrix3DReader::extension()
+std::string TransformationMatrix3DReader::extension()
 {
     return (".trf");
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TriangularMeshReader.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/TriangularMeshReader.cpp
deleted file mode 100644
index 3e2e400..0000000
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/TriangularMeshReader.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/cstdint.hpp>
-
-#include <boost/spirit/include/qi.hpp>
-#include <boost/spirit/include/phoenix_core.hpp>
-#include <boost/spirit/include/phoenix_operator.hpp>
-#include <boost/spirit/home/phoenix/statement/sequence.hpp>
-#include <boost/spirit/home/phoenix/container.hpp>
-
-#include <fwData/Object.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/location/SingleFile.hpp>
-
-#include "fwDataIO/reader/TriangularMeshReader.hpp"
-#include "fwDataIO/reader/registry/macros.hpp"
-
-
-fwDataIOReaderRegisterMacro( ::fwDataIO::reader::TriangularMeshReader );
-
-
-namespace fwDataIO
-{
-
-namespace reader
-{
-
-
-template <typename Iterator>
-bool parseTrian(Iterator first, Iterator last, ::fwData::TriangularMesh::PointContainer &points, ::fwData::TriangularMesh::CellContainer &cells)
-{
-    using boost::spirit::qi::ulong_long;
-    using boost::spirit::qi::int_;
-    using boost::spirit::qi::float_;
-    using boost::spirit::qi::phrase_parse;
-    using boost::spirit::qi::_1;
-    using boost::spirit::qi::_2;
-    using boost::spirit::qi::_3;
-    using boost::spirit::qi::repeat;
-    using boost::spirit::ascii::space;
-    using boost::phoenix::push_back;
-    using boost::phoenix::ref;
-    namespace phx = boost::phoenix;
-
-    unsigned long long int nbPoints;
-    unsigned long long int nbCells;
-
-    ::fwData::TriangularMesh::PointContainer::value_type point(3);
-    float &pa = point[0];
-    float &pb = point[1];
-    float &pc = point[2];
-    ::fwData::TriangularMesh::CellContainer::value_type cell(3);
-    int &ca = cell[0];
-    int &cb = cell[1];
-    int &cc = cell[2];
-
-    bool r = phrase_parse(first, last,
-
-        //  Begin grammar
-        (
-            ulong_long[ phx::ref(nbPoints) = _1, phx::reserve(phx::ref(points), phx::ref(nbPoints)) ] >>
-            repeat(phx::ref(nbPoints))[ (float_ >> float_ >> float_)[phx::ref(pa) = _1, phx::ref(pb) = _2, phx::ref(pc) = _3, phx::push_back(phx::ref(points),phx::ref(point))] ] >>
-            ulong_long[ phx::ref(nbCells) = _1, phx::reserve(phx::ref(cells), phx::ref(nbCells)) ] >>
-            repeat(phx::ref(nbCells))[ (int_ >> int_ >> int_ >> "-1 -1 -1")[phx::ref(ca) = _1, phx::ref(cb) = _2, phx::ref(cc) = _3, phx::push_back(phx::ref(cells),phx::ref(cell))]  ]
-            // An alternative for >> "-1 -1 -1" is: >> int_  >> int_  >> int_
-            // but this is a little bit less efficient, since every file should
-            // currently contain -1 -1 -1 as normal's values
-        ),
-        //  End grammar
-
-        space
-        );
-
-    if (first != last) // fail if we didn't get a full match
-        return false;
-    return r;
-
-}
-
-
-//------------------------------------------------------------------------------
-
-TriangularMeshReader::TriangularMeshReader(::fwDataIO::reader::IObjectReader::Key key)
-: ::fwData::location::enableSingleFile< IObjectReader >(this)
-{}
-
-//------------------------------------------------------------------------------
-
-TriangularMeshReader::~TriangularMeshReader()
-{}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReader::read()
-{
-    assert( ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location) );
-    ::boost::filesystem::path path = ::boost::dynamic_pointer_cast< ::fwData::location::SingleFile >(m_location)->getPath();
-
-    OSLM_INFO( "[TriangularMeshReader::read] Trian file: " << path.string());
-    SLM_ASSERT("Empty path for TriangularMesh file", !path.empty() );
-
-
-    size_t length;
-    //char *buffer;
-    std::string buf;
-    std::ifstream file;
-    file.open(path.string().c_str(), std::ios::binary );
-
-    if (!file.is_open())
-    {
-        OSLM_ERROR( "Trian file loading error for " << path.string());
-        throw std::ios_base::failure("Unable to open " + path.string());
-    }
-
-
-    file.seekg (0, std::ios::end);
-    length = file.tellg();
-    file.seekg (0, std::ios::beg);
-
-    //buffer = new char [length];
-    buf.resize(length);
-    char *buffer = &buf[0];
-
-    file.read (buffer, length);
-    file.close();
-
-
-    ::fwData::TriangularMesh::sptr triMesh = getConcreteObject();
-
-    ::fwData::TriangularMesh::PointContainer newPoints;
-    ::fwData::TriangularMesh::CellContainer  newCells;
-    ::fwData::TriangularMesh::PointContainer &points = triMesh->points();
-    ::fwData::TriangularMesh::CellContainer  &cells  = triMesh->cells();
-
-    //Free TriangularMesh memory
-    triMesh->clearCells();
-    triMesh->clearPoints();
-
-    if (!parseTrian(buffer, buffer+length, newPoints, newCells))
-    {
-        OSLM_ERROR( "Bad file format : " << path.string());
-        throw std::ios_base::failure("Unable to open " + path.string() + " : Bad file format.");
-    }
-
-    points.swap(newPoints);
-    cells.swap(newCells);
-
-
-    //delete buffer;
-
-}
-
-//------------------------------------------------------------------------------
-
-std::string  TriangularMeshReader::extension()
-{
-    return (".trian");
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace reader
-} // namespace fwDataIO
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/factory/new.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/factory/new.cpp
index 5338d43..8b05b86 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/factory/new.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/reader/registry/detail.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/reader/registry/detail.cpp
index 8f20baa..37b8258 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/reader/registry/detail.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/reader/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,7 +17,7 @@ namespace reader
 namespace registry
 {
 
-struct FwDataIOReaderRegistryInstantiatorTag {} ;
+struct FwDataIOReaderRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/ArrayWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/ArrayWriter.cpp
index b71a97c..03461a1 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/ArrayWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/ArrayWriter.cpp
@@ -1,19 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fstream>
-#include <iostream>
+#include "fwDataIO/writer/ArrayWriter.hpp"
 
-#include <boost/filesystem/path.hpp>
-#include <boost/cstdint.hpp>
+#include "fwDataIO/writer/registry/macros.hpp"
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwDataTools/helper/Array.hpp>
 
-#include "fwDataIO/writer/ArrayWriter.hpp"
-#include "fwDataIO/writer/registry/macros.hpp"
+#include <boost/cstdint.hpp>
+#include <boost/filesystem/path.hpp>
+
+#include <fstream>
+#include <iostream>
 
 
 fwDataIOWriterRegisterMacro( ::fwDataIO::writer::ArrayWriter);
@@ -26,13 +27,15 @@ namespace writer
 //------------------------------------------------------------------------------
 
 ArrayWriter::ArrayWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{}
+    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 ArrayWriter::~ArrayWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -43,7 +46,7 @@ void ArrayWriter::write()
 
     ::fwData::Array::sptr array = this->getConcreteObject();
     size_t arraySizeInBytes = array->getSizeInBytes();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
     char* buff = arrayHelper.begin();
 
     std::ofstream fs(file.string().c_str(), std::ios::binary|std::ios::trunc);
@@ -57,7 +60,7 @@ void ArrayWriter::write()
 
 //------------------------------------------------------------------------------
 
-std::string  ArrayWriter::extension()
+std::string ArrayWriter::extension()
 {
     return ".raw";
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzArrayWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzArrayWriter.cpp
index d61d76b..4260a14 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzArrayWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzArrayWriter.cpp
@@ -1,19 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <boost/filesystem/path.hpp>
-#include <boost/cstdint.hpp>
+#include "fwDataIO/writer/GzArrayWriter.hpp"
+
+#include "fwDataIO/writer/registry/macros.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
 
 #include <zlib.h>
 
-#include <fwComEd/helper/Array.hpp>
+#include <boost/cstdint.hpp>
+#include <boost/filesystem/path.hpp>
 
-#include "fwDataIO/writer/GzArrayWriter.hpp"
-#include "fwDataIO/writer/registry/macros.hpp"
+#include <iostream>
 
 
 fwDataIOWriterRegisterMacro( ::fwDataIO::writer::GzArrayWriter);
@@ -26,13 +28,15 @@ namespace writer
 //------------------------------------------------------------------------------
 
 GzArrayWriter::GzArrayWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{}
+    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 GzArrayWriter::~GzArrayWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -47,12 +51,12 @@ void GzArrayWriter::write()
     if ( rawFile == 0 )
     {
         std::string str = "GzArrayWriter::write unable to open ";
-        str+= getFile().string();
+        str += getFile().string();
         gzclose(rawFile);
         throw std::ios_base::failure(str);
     }
 
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
     // file is OK : process now
     size_t arraySizeInBytes = array->getSizeInBytes();
 
@@ -61,14 +65,14 @@ void GzArrayWriter::write()
     if ( uncompressedbyteswrited != arraySizeInBytes )
     {
         std::string str = "GzArrayWriter::write unable to write ";
-        str+=  getFile().string();
+        str += getFile().string();
         throw std::ios_base::failure(str);
     }
 }
 
 //------------------------------------------------------------------------------
 
-std::string  GzArrayWriter::extension()
+std::string GzArrayWriter::extension()
 {
     return ".raw.gz";
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp
index d87e2a5..cca54c0 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/GzBufferImageWriter.cpp
@@ -1,20 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <boost/cstdint.hpp>
+#include "fwDataIO/writer/GzBufferImageWriter.hpp"
+
+#include "fwDataIO/writer/registry/macros.hpp"
 
-#include <zlib.h>
-#include <fwData/Object.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Object.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
-#include "fwDataIO/writer/GzBufferImageWriter.hpp"
-#include "fwDataIO/writer/registry/macros.hpp"
+#include <zlib.h>
+
+#include <boost/cstdint.hpp>
+
+#include <iostream>
 
 
 fwDataIOWriterRegisterMacro( ::fwDataIO::writer::GzBufferImageWriter);
@@ -29,13 +32,15 @@ namespace writer
 //------------------------------------------------------------------------------
 
 GzBufferImageWriter::GzBufferImageWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{}
+    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 GzBufferImageWriter::~GzBufferImageWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -44,7 +49,7 @@ void GzBufferImageWriter::write()
     assert( getFile().empty() ==  false );
 
     ::fwData::Image::sptr image = getConcreteObject();
-    OSLM_TRACE( "GzBufferImageWriter::write()" << image.get() << " " << image->className()) ;
+    OSLM_TRACE( "GzBufferImageWriter::write()" << image.get() << " " << image->className());
 
     /// test if can open archive
     gzFile rawFile = gzopen( getFile().string().c_str(), "wb1");
@@ -52,23 +57,23 @@ void GzBufferImageWriter::write()
     if ( rawFile == 0 )
     {
         std::string str = "GzBufferImageWriter::write unable to open ";
-        str+= getFile().string();
+        str += getFile().string();
         gzclose(rawFile);
         throw std::ios_base::failure(str);
     }
 
-    ::fwComEd::helper::Image imageHelper(image);
+    ::fwDataTools::helper::Image imageHelper(image);
 
     // file is OK : process now
     size_t imageSizeInBytes = image->getSizeInBytes();
 
-    char *ptr = static_cast<char*>(imageHelper.getBuffer());
+    char* ptr           = static_cast<char*>(imageHelper.getBuffer());
     size_t writtenBytes = 0;
 
     int uncompressedbyteswrited;
 
     while ( writtenBytes < imageSizeInBytes
-           && (uncompressedbyteswrited = gzwrite(rawFile, ptr+writtenBytes, imageSizeInBytes-writtenBytes)) > 0 )
+            && (uncompressedbyteswrited = gzwrite(rawFile, ptr+writtenBytes, imageSizeInBytes-writtenBytes)) > 0 )
     {
         writtenBytes += uncompressedbyteswrited;
     }
@@ -80,14 +85,14 @@ void GzBufferImageWriter::write()
     if ( uncompressedbyteswrited != 0 && writtenBytes==imageSizeInBytes)
     {
         std::string str = "GzBufferImageWriter::write unable to write ";
-        str+=  getFile().string();
+        str += getFile().string();
         throw std::ios_base::failure(str);
     }
 }
 
 //------------------------------------------------------------------------------
 
-std::string  GzBufferImageWriter::extension()
+std::string GzBufferImageWriter::extension()
 {
     return ".raw.gz";
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/IObjectWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/IObjectWriter.cpp
index e08bf42..76587ea 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/IObjectWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/IObjectWriter.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,6 +7,8 @@
 
 #include "fwDataIO/writer/IObjectWriter.hpp"
 
+#include <fwJobs/IJob.hpp>
+
 namespace fwDataIO
 {
 
@@ -16,12 +18,14 @@ namespace writer
 //------------------------------------------------------------------------------
 
 IObjectWriter::IObjectWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 IObjectWriter::~IObjectWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -32,7 +36,7 @@ void IObjectWriter::setObject( ::fwTools::Object::sptr _pObject )
 
 //------------------------------------------------------------------------------
 
-::fwTools::Object::sptr  IObjectWriter::getObject()
+::fwTools::Object::sptr IObjectWriter::getObject()
 {
     assert( !m_object.expired() );
     return m_object.lock();
@@ -54,13 +58,25 @@ void IObjectWriter::setLocation( const ::fwData::location::ILocation::sptr _loca
 
 //------------------------------------------------------------------------------
 
-std::string  IObjectWriter::extension()
+std::string IObjectWriter::extension()
 {
     return std::string();
 }
 
 //------------------------------------------------------------------------------
 
+void IObjectWriter::cancel()
+{
+    auto job = this->getJob();
+    if ( job )
+    {
+        job->cancel();
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
 } // namespace writer
 
 } // namespace fwDataIO
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/MeshWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/MeshWriter.cpp
index e633cb0..a79757e 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/MeshWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/MeshWriter.cpp
@@ -1,21 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <fstream>
-
-#include <boost/cstdint.hpp>
+#include "fwDataIO/writer/MeshWriter.hpp"
 
-#include <fwComEd/helper/Mesh.hpp>
-#include <fwComEd/helper/Array.hpp>
+#include "fwDataIO/writer/registry/macros.hpp"
 
 #include <fwDataTools/Mesh.hpp>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Mesh.hpp>
 
-#include "fwDataIO/writer/MeshWriter.hpp"
-#include "fwDataIO/writer/registry/macros.hpp"
+#include <boost/cstdint.hpp>
+
+#include <fstream>
+#include <iostream>
 
 fwDataIOWriterRegisterMacro( ::fwDataIO::writer::MeshWriter );
 
@@ -29,13 +29,15 @@ namespace writer
 //------------------------------------------------------------------------------
 
 MeshWriter::MeshWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{}
+    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 MeshWriter::~MeshWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -45,7 +47,8 @@ void MeshWriter::write()
     assert( getFile().empty() ==  false );
 
     ::fwData::Mesh::sptr mesh = this->getConcreteObject();
-    FW_RAISE_IF("Can't convert this Mesh to TriangularMesh", !::fwDataTools::Mesh::hasUniqueCellType(mesh, ::fwData::Mesh::TRIANGLE));
+    FW_RAISE_IF("Can't convert this Mesh to Trian file",
+                !::fwDataTools::Mesh::hasUniqueCellType(mesh, ::fwData::Mesh::TRIANGLE));
 
     std::fstream file;
     file.open(getFile().string().c_str(), std::fstream::out);
@@ -55,31 +58,31 @@ void MeshWriter::write()
     {
         OSLM_ERROR( "Trian file writing error for " << getFile().string());
         std::string str = "Unable to write ";
-        str+= getFile().string();
+        str += getFile().string();
         throw std::ios_base::failure(str);
     }
 
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
 
     size_t i, nbPts, nbCells;
-    nbPts = mesh->getNumberOfPoints();
+    nbPts                                       = mesh->getNumberOfPoints();
     ::fwData::Mesh::PointsMultiArrayType points = meshHelper.getPoints();
     file<<nbPts<<std::endl;
-    for( i=0 ; i<nbPts ; ++i )
+    for( i = 0; i<nbPts; ++i )
     {
         file << points[i][0] << " " << points[i][1] << " " << points[i][2] << std::endl;
     }
 
-    nbCells = mesh->getNumberOfCells();
+    nbCells                     = mesh->getNumberOfCells();
     ::fwData::Array::sptr cells = mesh->getCellDataArray();
 
-    ::fwComEd::helper::Array cellsArrayHelper(cells);
+    ::fwDataTools::helper::Array cellsArrayHelper(cells);
 
     FW_RAISE_IF("Not able to write " << cells->getType().string() << " cell type in trian file.",
-            cells->getType() != ::fwTools::Type::create< ::boost::uint64_t >());
+                cells->getType() != ::fwTools::Type::create< ::boost::uint64_t >());
 
-    ::boost::uint64_t *cellBuf = cellsArrayHelper.begin< ::boost::uint64_t >();
-    ::boost::uint64_t *cellBufEnd = cellBuf + 3*nbCells;
+    ::boost::uint64_t* cellBuf    = cellsArrayHelper.begin< ::boost::uint64_t >();
+    ::boost::uint64_t* cellBufEnd = cellBuf + 3*nbCells;
 
     SLM_ASSERT("Wrong CellDataMultiArray size", cells->getNumberOfElements() >= nbCells*3);
     file << nbCells << std::endl;
@@ -87,23 +90,23 @@ void MeshWriter::write()
     ::fwData::Array::sptr normals = mesh->getCellNormalsArray();
 
     if(normals
-            && !normals->empty()
-            && normals->getType() == ::fwTools::Type::create<float>()
-            && normals->getNumberOfComponents() == 3
-            && normals->getNumberOfDimensions() == 1
-            && nbCells == normals->getSize().at(0)
-            )
+       && !normals->empty()
+       && normals->getType() == ::fwTools::Type::create<float>()
+       && normals->getNumberOfComponents() == 3
+       && normals->getNumberOfDimensions() == 1
+       && nbCells == normals->getSize().at(0)
+       )
     {
-        ::fwComEd::helper::Array normalsArrayHelper(normals);
-        float *normalBuf = normalsArrayHelper.begin< float >();
+        ::fwDataTools::helper::Array normalsArrayHelper(normals);
+        float* normalBuf = normalsArrayHelper.begin< float >();
 
         while (cellBuf != cellBufEnd)
         {
-            file << (*cellBuf++) << " " ;
-            file << (*cellBuf++) << " " ;
-            file << (*cellBuf++) << " " ;
-            file << (*normalBuf++) << " " ;
-            file << (*normalBuf++) << " " ;
+            file << (*cellBuf++) << " ";
+            file << (*cellBuf++) << " ";
+            file << (*cellBuf++) << " ";
+            file << (*normalBuf++) << " ";
+            file << (*normalBuf++) << " ";
             file << (*normalBuf++) << std::endl;
         }
     }
@@ -121,7 +124,7 @@ void MeshWriter::write()
 
 //------------------------------------------------------------------------------
 
-std::string  MeshWriter::extension()
+std::string MeshWriter::extension()
 {
     return ".trian";
 }
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/TransformationMatrix3DWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/TransformationMatrix3DWriter.cpp
index c461e40..7f28bdf 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/TransformationMatrix3DWriter.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/TransformationMatrix3DWriter.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -27,13 +27,15 @@ namespace writer
 //------------------------------------------------------------------------------
 
 TransformationMatrix3DWriter::TransformationMatrix3DWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{}
+    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+{
+}
 
 //------------------------------------------------------------------------------
 
 TransformationMatrix3DWriter::~TransformationMatrix3DWriter()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -46,18 +48,21 @@ void TransformationMatrix3DWriter::write()
         OSLM_ERROR( "Trf file writing error for " << getFile());
         return;
     }
-    ::std::vector< double > mat = this->getConcreteObject()->getRefCoefficients();
-    ::std::vector< double >::iterator iter;
-    int i=0;
-    for (iter = mat.begin() ; iter!= mat.end() ; ++iter)
+    ::fwData::TransformationMatrix3D::TMCoefArray mat = this->getConcreteObject()->getRefCoefficients();
+    int i = 0;
+    for (auto val : mat)
     {
-        OSLM_TRACE("MATRIX : " << (*iter));
-        file << (*iter);
+        OSLM_TRACE("MATRIX : " << val);
+        file << val;
         i++;
         if (i%4 == 0 && i!=16)
+        {
             file << std::endl;
+        }
         else
+        {
             file << " ";
+        }
     }
 
     file.close();
@@ -65,7 +70,7 @@ void TransformationMatrix3DWriter::write()
 
 //------------------------------------------------------------------------------
 
-std::string  TransformationMatrix3DWriter::extension()
+std::string TransformationMatrix3DWriter::extension()
 {
     static std::string ext(".trf");
     return ext;
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/TriangularMeshWriter.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/TriangularMeshWriter.cpp
deleted file mode 100644
index 0a62eed..0000000
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/TriangularMeshWriter.cpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/cstdint.hpp>
-
-#include <fwData/Object.hpp>
-#include <fwData/TriangularMesh.hpp>
-
-#include "fwDataIO/writer/TriangularMeshWriter.hpp"
-#include "fwDataIO/writer/registry/macros.hpp"
-
-fwDataIOWriterRegisterMacro( ::fwDataIO::writer::TriangularMeshWriter );
-
-
-namespace fwDataIO
-{
-
-namespace writer
-{
-
-//------------------------------------------------------------------------------
-
-TriangularMeshWriter::TriangularMeshWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{}
-
-//------------------------------------------------------------------------------
-
-TriangularMeshWriter::~TriangularMeshWriter()
-{}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriter::write()
-{
-    OSLM_INFO( "[TriangularMeshReader::read] Trian file: " << getFile());
-    assert( getFile().empty() ==  false );
-
-    ::fwData::TriangularMesh::sptr triMesh = getConcreteObject();
-
-    std::fstream file;
-    file.open(getFile().string().c_str(), std::fstream::out);
-    if (!file.is_open())
-    {
-        OSLM_ERROR( "Trian file writing error for " << getFile().string());
-        std::string str = "Unable to write ";
-        str+= getFile().string();
-        throw std::ios_base::failure(str);
-    }
-
-    unsigned int i, nbPts, nbCells;
-    nbPts = triMesh->points().size();
-    file<<nbPts<<std::endl;
-    for( i=0 ; i<nbPts ; ++i )
-    {
-        std::vector< float > point = triMesh->points().at(i);
-        file<<point[0]<<" "<<point[1]<<" "<<point[2]<<std::endl;
-    }
-
-    nbCells = triMesh->cells().size();
-    file<<nbCells<<std::endl;
-    for( i=0 ; i<nbCells ; ++i )
-    {
-        std::vector< int > cell = triMesh->cells().at(i);
-        file<<cell[0]<<" "<<cell[1]<<" "<<cell[2]<<" "<<-1<<" "<<-1<<" "<<-1<<std::endl;
-    }
-    file.close();
-}
-
-//------------------------------------------------------------------------------
-
-std::string  TriangularMeshWriter::extension()
-{
-    return ".trian";
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace writer
-
-} // namespace fwDataIO
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/factory/new.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/factory/new.cpp
index 3c7dd58..c1f9786 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/factory/new.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwDataIO/src/fwDataIO/writer/registry/detail.cpp b/SrcLib/core/fwDataIO/src/fwDataIO/writer/registry/detail.cpp
index 9bf11e5..19a0457 100644
--- a/SrcLib/core/fwDataIO/src/fwDataIO/writer/registry/detail.cpp
+++ b/SrcLib/core/fwDataIO/src/fwDataIO/writer/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,7 +17,7 @@ namespace writer
 namespace registry
 {
 
-struct FwDataIOWriterRegistryInstantiatorTag {} ;
+struct FwDataIOWriterRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwDataIO/test/CMakeLists.txt b/SrcLib/core/fwDataIO/test/CMakeLists.txt
index 3c42cc6..415590c 100644
--- a/SrcLib/core/fwDataIO/test/CMakeLists.txt
+++ b/SrcLib/core/fwDataIO/test/CMakeLists.txt
@@ -1,10 +1,14 @@
-
 fwLoadProperties()
 
 find_package (Boost COMPONENTS regex REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(
+    ${CPPUNIT_INCLUDE_DIR}
+)
+fwLink(
+    ${Boost_REGEX_LIBRARY}
+    ${CPPUNIT_LIBRARY}
+)
 
 
 
diff --git a/SrcLib/core/fwDataIO/test/Properties.cmake b/SrcLib/core/fwDataIO/test/Properties.cmake
index 161399a..f4bff19 100644
--- a/SrcLib/core/fwDataIO/test/Properties.cmake
+++ b/SrcLib/core/fwDataIO/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwDataIOTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataIO )
+set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataIO fwDataTools)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataIO/test/cppunit.options b/SrcLib/core/fwDataIO/test/cppunit.options
deleted file mode 100644
index 2fc73b1..0000000
--- a/SrcLib/core/fwDataIO/test/cppunit.options
+++ /dev/null
@@ -1,8 +0,0 @@
-CLASSTEST=[
-          'TrianTest',
-          'MeshTrianTest',
-          'DictionaryReaderTest',
-          ]
-USE = ['boost', 'boostRegex']
-LIB = ['fwTools_0-1','fwCore_0-1','fwData_0-1','fwDataIO_0-2','fwTest_0-1']
-CONSOLE='yes'
diff --git a/SrcLib/core/fwDataIO/test/tu/include/DictionaryReaderTest.hpp b/SrcLib/core/fwDataIO/test/tu/include/DictionaryReaderTest.hpp
index 417c0b1..476875e 100644
--- a/SrcLib/core/fwDataIO/test/tu/include/DictionaryReaderTest.hpp
+++ b/SrcLib/core/fwDataIO/test/tu/include/DictionaryReaderTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_TEST_TU_DICTIONARYREADERTEST_HPP_
-#define _FWDATAIO_TEST_TU_DICTIONARYREADERTEST_HPP_
+#ifndef __FWDATAIO_UT_DICTIONARYREADERTEST_HPP__
+#define __FWDATAIO_UT_DICTIONARYREADERTEST_HPP__
 
 #include <boost/filesystem/operations.hpp>
 
@@ -21,13 +21,13 @@ namespace ut
  */
 class DictionaryReaderTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( DictionaryReaderTest );
-    CPPUNIT_TEST( test_1 );
-    CPPUNIT_TEST( test_2 );
-    CPPUNIT_TEST( test_3 );
-    CPPUNIT_TEST( test_4 );
-    CPPUNIT_TEST( test_5 );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( DictionaryReaderTest );
+CPPUNIT_TEST( test_1 );
+CPPUNIT_TEST( test_2 );
+CPPUNIT_TEST( test_3 );
+CPPUNIT_TEST( test_4 );
+CPPUNIT_TEST( test_5 );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -53,4 +53,4 @@ protected:
 } //namespace ut
 } //namespace fwDataIO
 
-#endif //_FWDATAIO_TEST_TU_DICTIONARYREADERTEST_HPP_
+#endif //__FWDATAIO_UT_DICTIONARYREADERTEST_HPP__
diff --git a/SrcLib/core/fwDataIO/test/tu/include/FileNameParser.hpp b/SrcLib/core/fwDataIO/test/tu/include/FileNameParser.hpp
index c8b7b1f..ea80dfa 100644
--- a/SrcLib/core/fwDataIO/test/tu/include/FileNameParser.hpp
+++ b/SrcLib/core/fwDataIO/test/tu/include/FileNameParser.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_TEST_TU_FILENAMEPARSER_HPP_
-#define _FWDATAIO_TEST_TU_FILENAMEPARSER_HPP_
+#ifndef __FWDATAIO_UT_FILENAMEPARSER_HPP__
+#define __FWDATAIO_UT_FILENAMEPARSER_HPP__
 
 #include <boost/spirit/include/qi.hpp>
 #include <boost/spirit/include/phoenix_core.hpp>
@@ -27,19 +27,20 @@ bool parseMeshFileName(const std::string &name, T &points, T &cells)
     namespace phx = boost::phoenix;
 
     std::string::const_iterator first = name.begin();
-    std::string::const_iterator last = name.end();
+    std::string::const_iterator last  = name.end();
 
     bool r = phrase_parse(first, last,
-            ("Mesh-" >> ulong_long >> "-" >> ulong_long >> "pts-" >> ulong_long >> "cells.trian")[ phx::ref(points) = _2, phx::ref(cells) = _3 ],
-            space);
+                          ("Mesh-" >> ulong_long >> "-" >> ulong_long >> "pts-" >> ulong_long >>
+                           "cells.trian")[ phx::ref(points) = _2, phx::ref(cells) = _3 ],
+                          space);
 
     if (first != last) // fail if we didn't get a full match
     {
-            return false;
+        return false;
     }
 
     return r;
 }
 
 
-#endif //_FWDATAIO_TEST_TU_FILENAMEPARSER_HPP_
+#endif //__FWDATAIO_UT_FILENAMEPARSER_HPP__
diff --git a/SrcLib/core/fwDataIO/test/tu/include/MeshTrianTest.hpp b/SrcLib/core/fwDataIO/test/tu/include/MeshTrianTest.hpp
index 12999d1..3310e7a 100644
--- a/SrcLib/core/fwDataIO/test/tu/include/MeshTrianTest.hpp
+++ b/SrcLib/core/fwDataIO/test/tu/include/MeshTrianTest.hpp
@@ -1,18 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_TEST_TU_MESHTRIANTEST_HPP_
-#define _FWDATAIO_TEST_TU_MESHTRIANTEST_HPP_
+#ifndef __FWDATAIO_UT_MESHTRIANTEST_HPP__
+#define __FWDATAIO_UT_MESHTRIANTEST_HPP__
+
+#include <fwData/Mesh.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
 
 #include <boost/filesystem/operations.hpp>
 
 #include <cppunit/extensions/HelperMacros.h>
 
-#include <fwRuntime/EConfigurationElement.hpp>
-
 namespace fwDataIO
 {
 namespace ut
@@ -23,10 +25,10 @@ namespace ut
  */
 class MeshTrianTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( MeshTrianTest );
-    CPPUNIT_TEST( testSimpleMesh );
-    CPPUNIT_TEST( testMeshWithCellNormals );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( MeshTrianTest );
+CPPUNIT_TEST( testSimpleMesh );
+CPPUNIT_TEST( testMeshWithCellNormals );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -45,4 +47,4 @@ public:
 } //namespace ut
 } //namespace fwDataIO
 
-#endif //_FWDATAIO_TEST_TU_MESHTRIANTEST_HPP_
+#endif //__FWDATAIO_UT_MESHTRIANTEST_HPP__
diff --git a/SrcLib/core/fwDataIO/test/tu/include/TrianTest.hpp b/SrcLib/core/fwDataIO/test/tu/include/TrianTest.hpp
index 9574163..c60cf16 100644
--- a/SrcLib/core/fwDataIO/test/tu/include/TrianTest.hpp
+++ b/SrcLib/core/fwDataIO/test/tu/include/TrianTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATAIO_TEST_TU_TRIANTEST_HPP_
-#define _FWDATAIO_TEST_TU_TRIANTEST_HPP_
+#ifndef __FWDATAIO_UT_TRIANTEST_HPP__
+#define __FWDATAIO_UT_TRIANTEST_HPP__
 
 #include <boost/filesystem/operations.hpp>
 
@@ -23,11 +23,11 @@ namespace ut
  */
 class TrianTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( TrianTest );
-    CPPUNIT_TEST( test_1 );
-    CPPUNIT_TEST( test_2 );
-    CPPUNIT_TEST( file_load_test );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( TrianTest );
+CPPUNIT_TEST( test_1 );
+CPPUNIT_TEST( test_2 );
+CPPUNIT_TEST( file_load_test );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -50,4 +50,4 @@ protected:
 } //namespace ut
 } //namespace fwDataIO
 
-#endif //_FWDATAIO_TEST_TU_TRIANTEST_HPP_
+#endif //__FWDATAIO_UT_TRIANTEST_HPP__
diff --git a/SrcLib/core/fwDataIO/test/tu/src/DictionaryReaderTest.cpp b/SrcLib/core/fwDataIO/test/tu/src/DictionaryReaderTest.cpp
index 4955806..2a03c33 100644
--- a/SrcLib/core/fwDataIO/test/tu/src/DictionaryReaderTest.cpp
+++ b/SrcLib/core/fwDataIO/test/tu/src/DictionaryReaderTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -116,7 +116,7 @@ void DictionaryReaderTest::test_2()
 
 void DictionaryReaderTest::test_3()
 {
-    m_tmpDictionaryFilePath = ::fwTools::System::getTemporaryFolder() / "NoDictionary.dic";
+    m_tmpDictionaryFilePath                              = ::fwTools::System::getTemporaryFolder() / "NoDictionary.dic";
     ::fwData::StructureTraitsDictionary::sptr structDico = ::fwData::StructureTraitsDictionary::New();
     // Get data from file.
     ::fwDataIO::reader::DictionaryReader::sptr dictionaryReader = ::fwDataIO::reader::DictionaryReader::New();
diff --git a/SrcLib/core/fwDataIO/test/tu/src/MeshTrianTest.cpp b/SrcLib/core/fwDataIO/test/tu/src/MeshTrianTest.cpp
index e6d6e7c..887deeb 100644
--- a/SrcLib/core/fwDataIO/test/tu/src/MeshTrianTest.cpp
+++ b/SrcLib/core/fwDataIO/test/tu/src/MeshTrianTest.cpp
@@ -1,25 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <iomanip>
-#include <fstream>
+#include "MeshTrianTest.hpp"
 
-#include <fwTools/System.hpp>
-#include <fwData/Mesh.hpp>
+#include <fwDataIO/reader/MeshReader.hpp>
+#include <fwDataIO/writer/MeshWriter.hpp>
 
-#include <fwTest/generator/Mesh.hpp>
 #include <fwDataTools/Mesh.hpp>
+#include <fwDataTools/helper/Array.hpp>
 
-#include <fwDataIO/reader/MeshReader.hpp>
-#include <fwDataIO/writer/MeshWriter.hpp>
+#include <fwTest/generator/Mesh.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwTools/System.hpp>
 
-#include "MeshTrianTest.hpp"
+#include <fstream>
+#include <iomanip>
+#include <iostream>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataIO::ut::MeshTrianTest );
@@ -49,7 +48,7 @@ void MeshTrianTest::testSimpleMesh()
 {
     ::boost::filesystem::path trianPath = ::fwTools::System::getTemporaryFolder() / "test.trian";
 
-    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+    ::fwData::Mesh::sptr mesh  = ::fwData::Mesh::New();
     ::fwData::Mesh::sptr mesh2 = ::fwData::Mesh::New();
     ::fwTest::generator::Mesh::generateTriangleMesh(mesh);
     ::fwDataTools::Mesh::shakePoint(mesh);
@@ -79,7 +78,7 @@ void MeshTrianTest::testMeshWithCellNormals()
 {
     ::boost::filesystem::path trianPath = ::fwTools::System::getTemporaryFolder() / "test.trian";
 
-    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+    ::fwData::Mesh::sptr mesh  = ::fwData::Mesh::New();
     ::fwData::Mesh::sptr mesh2 = ::fwData::Mesh::New();
     ::fwTest::generator::Mesh::generateTriangleMesh(mesh);
     ::fwDataTools::Mesh::shakePoint(mesh);
@@ -107,35 +106,36 @@ void MeshTrianTest::testMeshWithCellNormals()
 //------------------------------------------------------------------------------
 
 #define COMPAREBUFFER(type, buff1, buff2)                             \
-{                                                                     \
-    CPPUNIT_ASSERT( (!buff1 && !buff2) || (buff1 && buff2));          \
-    if(buff1)                                                         \
-    {                                                                 \
-        CPPUNIT_ASSERT(buff1->getSize() == buff2->getSize());         \
-        ::fwComEd::helper::Array helper1(buff1);                      \
-        ::fwComEd::helper::Array helper2(buff2);                      \
+    {                                                                     \
+        CPPUNIT_ASSERT( (!buff1 && !buff2) || (buff1 && buff2));          \
+        if(buff1)                                                         \
+        {                                                                 \
+            CPPUNIT_ASSERT(buff1->getSize() == buff2->getSize());         \
+            ::fwDataTools::helper::Array helper1(buff1);                      \
+            ::fwDataTools::helper::Array helper2(buff2);                      \
                                                                       \
-        type *iter1 = helper1.begin<type>();                          \
-        type *iter2 = helper2.begin<type>();                          \
+            type* iter1 = helper1.begin<type>();                          \
+            type* iter2 = helper2.begin<type>();                          \
                                                                       \
-        for (; iter1 != helper1.end<type>() ; ++iter1, ++iter2)       \
-        {                                                             \
-            CPPUNIT_ASSERT_DOUBLES_EQUAL(*iter1, *iter2, 0.000001);   \
-        }                                                             \
-    }                                                                 \
-}
+            for (; iter1 != helper1.end<type>(); ++iter1, ++iter2)       \
+            {                                                             \
+                CPPUNIT_ASSERT_DOUBLES_EQUAL(*iter1, *iter2, 0.000001);   \
+            }                                                             \
+        }                                                                 \
+    }
 
 //------------------------------------------------------------------------------
 
 void MeshTrianTest::compareMesh(::fwData::Mesh::sptr mesh1, ::fwData::Mesh::sptr mesh2)
 {
     CPPUNIT_ASSERT_EQUAL(mesh1->getNumberOfPoints(), mesh2->getNumberOfPoints());
-    CPPUNIT_ASSERT_EQUAL(mesh1->getNumberOfCells() , mesh2->getNumberOfCells());
-    CPPUNIT_ASSERT_EQUAL(mesh1->getCellDataSize()  , mesh2->getCellDataSize());
+    CPPUNIT_ASSERT_EQUAL(mesh1->getNumberOfCells(), mesh2->getNumberOfCells());
+    CPPUNIT_ASSERT_EQUAL(mesh1->getCellDataSize(), mesh2->getCellDataSize());
 
     COMPAREBUFFER(::fwData::Mesh::PointValueType, mesh1->getPointsArray(), mesh2->getPointsArray());
     COMPAREBUFFER(::fwData::Mesh::CellTypes, mesh1->getCellTypesArray(), mesh2->getCellTypesArray());
-    COMPAREBUFFER(::fwData::Mesh::CellDataOffsetType, mesh1->getCellDataOffsetsArray(), mesh2->getCellDataOffsetsArray());
+    COMPAREBUFFER(::fwData::Mesh::CellDataOffsetType, mesh1->getCellDataOffsetsArray(),
+                  mesh2->getCellDataOffsetsArray());
     COMPAREBUFFER(::fwData::Mesh::CellValueType, mesh1->getCellDataArray(), mesh2->getCellDataArray());
     COMPAREBUFFER(::fwData::Mesh::ColorValueType, mesh1->getPointColorsArray(), mesh2->getPointColorsArray());
     COMPAREBUFFER(::fwData::Mesh::ColorValueType, mesh1->getCellColorsArray(), mesh2->getCellColorsArray());
diff --git a/SrcLib/core/fwDataIO/test/tu/src/TrianTest.cpp b/SrcLib/core/fwDataIO/test/tu/src/TrianTest.cpp
deleted file mode 100644
index 26b22e8..0000000
--- a/SrcLib/core/fwDataIO/test/tu/src/TrianTest.cpp
+++ /dev/null
@@ -1,196 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <fstream>
-
-#include <boost/regex.hpp>
-
-#include <fwTools/System.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Mesh.hpp>
-
-#include <fwDataIO/reader/TriangularMeshReader.hpp>
-#include <fwDataIO/writer/TriangularMeshWriter.hpp>
-#include <fwDataIO/reader/IObjectReader.hpp>
-
-#include <fwTest/Data.hpp>
-
-#include "FileNameParser.hpp"
-#include "TrianTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataIO::ut::TrianTest );
-
-namespace fwDataIO
-{
-namespace ut
-{
-
-static const unsigned int NBPTS   = 100;
-static const unsigned int NBCELLS = 100;
-
-//------------------------------------------------------------------------------
-
-void TrianTest::setUp()
-{
-    // Set up context before running a test.
-    m_tmpTrianPath1 = ::fwTools::System::getTemporaryFolder() / "TrianTest1.trian";
-    m_tmpTrianPath2 = ::fwTools::System::getTemporaryFolder() / "TrianTest2.trian";
-
-    this->generateTrian(m_tmpTrianPath1);
-
-    CPPUNIT_ASSERT(::boost::filesystem::exists(m_tmpTrianPath1));
-}
-
-//------------------------------------------------------------------------------
-
-void TrianTest::tearDown()
-{
-    // Clean up after the test run.
-    if( ::boost::filesystem::exists(m_tmpTrianPath1))
-    {
-        bool suppr = ::boost::filesystem::remove(m_tmpTrianPath1);
-        CPPUNIT_ASSERT(suppr);
-    }
-    if( ::boost::filesystem::exists(m_tmpTrianPath2))
-    {
-        bool suppr = ::boost::filesystem::remove(m_tmpTrianPath2);
-        CPPUNIT_ASSERT(suppr);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void TrianTest::test_1()
-{
-    ::fwData::TriangularMesh::sptr trianMesh = ::fwData::TriangularMesh::New();
-    ::fwDataIO::reader::TriangularMeshReader::sptr reader = ::fwDataIO::reader::TriangularMeshReader::New();
-
-    reader->setObject(trianMesh);
-    reader->setFile(m_tmpTrianPath1);
-    reader->read();
-
-    CPPUNIT_ASSERT_EQUAL((size_t)NBPTS, trianMesh->getNumPoints());
-    CPPUNIT_ASSERT_EQUAL((size_t)NBCELLS, trianMesh->getNumCells());
-}
-
-//------------------------------------------------------------------------------
-
-void TrianTest::test_2()
-{
-    ::fwData::TriangularMesh::sptr trianMesh1 = ::fwData::TriangularMesh::New();
-    ::fwData::TriangularMesh::sptr trianMesh2 = ::fwData::TriangularMesh::New();
-
-    ::fwDataIO::reader::TriangularMeshReader::sptr reader = ::fwDataIO::reader::TriangularMeshReader::New();
-    ::fwDataIO::writer::TriangularMeshWriter::sptr writer = ::fwDataIO::writer::TriangularMeshWriter::New();
-
-    reader->setObject(trianMesh1);
-    reader->setFile(m_tmpTrianPath1);
-    reader->read();
-
-    writer->setObject(trianMesh1);
-    writer->setFile(m_tmpTrianPath2);
-    writer->write();
-
-    reader->setObject(trianMesh2);
-    reader->setFile(m_tmpTrianPath2);
-    reader->read();
-
-    CPPUNIT_ASSERT_EQUAL((size_t)NBPTS, trianMesh1->getNumPoints());
-    CPPUNIT_ASSERT_EQUAL((size_t)NBCELLS, trianMesh1->getNumCells());
-    CPPUNIT_ASSERT_EQUAL(trianMesh1->getNumCells(),  trianMesh2->getNumCells());
-    CPPUNIT_ASSERT_EQUAL(trianMesh1->getNumPoints(), trianMesh2->getNumPoints());
-    CPPUNIT_ASSERT(trianMesh1->points() == trianMesh2->points());
-    CPPUNIT_ASSERT(trianMesh1->cells()  == trianMesh2->cells());
-}
-
-//------------------------------------------------------------------------------
-
-void TrianTest::file_load_test()
-{
-
-    // test parseMeshFileName
-    unsigned long long nbPts, nbCells;
-    std::string testFileName("Mesh-00-002502pts-005000cells.trian");
-    parseMeshFileName( testFileName, nbPts, nbCells );
-    CPPUNIT_ASSERT_EQUAL(2502ULL, nbPts);
-    CPPUNIT_ASSERT_EQUAL(5000ULL, nbCells);
-
-    const ::boost::filesystem::path trian_path( ::fwTest::Data::dir() / "fw4spl/trian/" );
-    const boost::regex fileNameFilter( "Mesh-\\d+-\\d+pts-\\d+cells\\.trian" );
-
-    typedef std::vector< ::boost::filesystem::path > FileVector;
-    FileVector files;
-
-    // find every files matching <fileNameFilter> pattern
-    boost::filesystem::directory_iterator iter( trian_path );
-    boost::filesystem::directory_iterator end_itr;
-    boost::smatch what;
-    for( ; iter != end_itr; ++iter )
-    {
-        if( !boost::filesystem::is_regular_file( iter->status() )
-                || !boost::regex_match( iter->path().filename().string(), what, fileNameFilter ) )
-        {
-            continue;
-        }
-        files.push_back( iter->path() );
-    }
-
-    CPPUNIT_ASSERT_MESSAGE("Missing trian files", !files.empty() );
-
-    FileVector::const_iterator fIter = files.begin();
-    FileVector::const_iterator fEndIter = files.end();
-
-    for (; fIter != fEndIter; ++fIter)
-    {
-        ::boost::filesystem::path trianFile = *fIter;
-        OSLM_TRACE("Testing: " << trianFile);
-
-        CPPUNIT_ASSERT_MESSAGE(
-                "Failed parsing mesh filename" + trianFile.filename().string(),
-                parseMeshFileName( trianFile.filename().string(), nbPts, nbCells )
-                );
-
-        ::fwData::TriangularMesh::sptr trianMesh = ::fwData::TriangularMesh::New();
-        ::fwDataIO::reader::TriangularMeshReader::sptr reader = ::fwDataIO::reader::TriangularMeshReader::New();
-
-        reader->setObject(trianMesh);
-        reader->setFile(trianFile);
-        reader->read();
-
-        CPPUNIT_ASSERT_EQUAL_MESSAGE(trianFile.string(), (size_t)nbPts, trianMesh->getNumPoints());
-        CPPUNIT_ASSERT_EQUAL_MESSAGE("File : " +  trianFile.string(), (size_t)nbCells, trianMesh->getNumCells());
-    }
-}
-//------------------------------------------------------------------------------
-
-void TrianTest::generateTrian(::boost::filesystem::path trianFile)
-{
-    std::fstream file;
-    file.open(trianFile.string().c_str(), std::fstream::out);
-    CPPUNIT_ASSERT(file.is_open());
-
-    unsigned int i;
-    file<<NBPTS<<std::endl;
-    for( i=0 ; i<NBPTS ; ++i )
-    {
-        file<<i<<" "<<i+1<<" "<<i+2<<std::endl;
-    }
-
-    file<<NBCELLS<<std::endl;
-    for( i=0 ; i<NBCELLS ; ++i )
-    {
-        file<<i%NBPTS<<" "<<(i+1)%NBPTS<<" "<<(i+2)%NBPTS<<" "<<-1<<" "<<-1<<" "<<-1<<std::endl;
-    }
-
-    file.close();
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwDataIO
diff --git a/SrcLib/core/fwDataTools/CMakeLists.txt b/SrcLib/core/fwDataTools/CMakeLists.txt
index 2f92937..b95df6b 100644
--- a/SrcLib/core/fwDataTools/CMakeLists.txt
+++ b/SrcLib/core/fwDataTools/CMakeLists.txt
@@ -1,14 +1,7 @@
-
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwCore
-    fwData
-    fwMath
-    fwTools
-)
 
-find_package (Boost COMPONENTS thread REQUIRED)
-fwForwardInclude(${fwCore_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
+find_package(GLM REQUIRED)
 
+fwForwardInclude(
+    ${GLM_INCLUDE_DIR}
+)
diff --git a/SrcLib/core/fwDataTools/Properties.cmake b/SrcLib/core/fwDataTools/Properties.cmake
index 7d603a1..3c61362 100644
--- a/SrcLib/core/fwDataTools/Properties.cmake
+++ b/SrcLib/core/fwDataTools/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwDataTools )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwCore fwData fwMath fwTools )
+set( DEPENDENCIES fwData fwMath fwRuntime)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataTools/bin/build.options b/SrcLib/core/fwDataTools/bin/build.options
deleted file mode 100644
index 69f8ec7..0000000
--- a/SrcLib/core/fwDataTools/bin/build.options
+++ /dev/null
@@ -1,9 +0,0 @@
-TYPE    = 'shared'
-VERSION = '0-1'
-LIB = [
-      'fwCore_0-1',
-      'fwData_0-1',
-      'fwComEd_0-1'
-      ]
-USE = ['boost', 'boostThread']
-
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/AlgoMeshDeformation.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/AlgoMeshDeformation.hpp
index 3ce2dc2..d9c01aa 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/AlgoMeshDeformation.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/AlgoMeshDeformation.hpp
@@ -1,20 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_ALGOMESHDEFORMATION_HPP_
-#define _FWDATATOOLS_ALGOMESHDEFORMATION_HPP_
+#ifndef __FWDATATOOLS_ALGOMESHDEFORMATION_HPP__
+#define __FWDATATOOLS_ALGOMESHDEFORMATION_HPP__
 
-#include <fwTools/Failed.hpp>
+#include "fwDataTools/config.hpp"
+#include <fwDataTools/helper/Mesh.hpp>
 
 #include <fwData/Array.hpp>
 #include <fwData/Mesh.hpp>
 
-#include <fwComEd/helper/Mesh.hpp>
-
-#include "fwDataTools/export.hpp"
+#include <fwTools/Failed.hpp>
 
 
 namespace fwDataTools
@@ -39,8 +38,8 @@ public:
      * @brief Initialize algorithm's parameters.
      */
     FWDATATOOLS_API void setParam( ::fwData::Mesh::sptr _mesh,
-            const unsigned int _step,
-            const unsigned int _amplitude);
+                                   const unsigned int _step,
+                                   const unsigned int _amplitude);
 
     /**
      * @brief Initialize the simulated acquisition.
@@ -53,14 +52,14 @@ public:
     FWDATATOOLS_API void computeSimu();
 
     /// Compute deformation or init algo if necessary
-    FWDATATOOLS_API  void computeDeformation( ::fwData::Mesh::sptr _mesh,
-            const unsigned int _nbStep,
-            const unsigned int _amplitude );
+    FWDATATOOLS_API void computeDeformation( ::fwData::Mesh::sptr _mesh,
+                                             const unsigned int _nbStep,
+                                             const unsigned int _amplitude );
 
 private:
 
     ::fwData::Mesh::wptr m_mesh;
-    ::fwComEd::helper::Mesh::sptr m_meshHelper;
+    ::fwDataTools::helper::Mesh::sptr m_meshHelper;
     ::fwData::Array::sptr m_originPoints;
 
     unsigned int m_amplitude;
@@ -84,5 +83,5 @@ private:
 
 }   // namespace fwDataTools
 
-#endif  // _FWDATATOOLS_ALGOMESHDEFORMATION_HPP_
+#endif  // __FWDATATOOLS_ALGOMESHDEFORMATION_HPP__
 
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/Color.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/Color.hpp
new file mode 100644
index 0000000..ae3d177
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/Color.hpp
@@ -0,0 +1,36 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_COLOR_HPP__
+#define __FWDATATOOLS_COLOR_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <string>
+#include <cstdint>
+
+namespace fwDataTools
+{
+
+/**
+ * @brief   This class contains helper to manipulate colors.
+ * @class   Color
+ */
+class Color
+{
+public:
+
+    /**
+     * @brief Convert a color coded as an hexadecimal string into an array of four bytes (RGBA)
+     * @param _hexaColor[in] Color string that start with '#' and followed by 6 ou 8 hexadecimal digits (ex: #FF81EC)
+     * @param _rgba[out] RGBA values
+     */
+    FWDATATOOLS_API static void hexaStringToRGBA( const std::string& _hexaColor, std::uint8_t _rgba[4] );
+};
+
+} // end namespace fwDataTools
+
+#endif // __FWDATATOOLS_COLOR_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/Image.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/Image.hpp
index 30d713c..6f1b68a 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/Image.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/Image.hpp
@@ -1,23 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_IMAGE_HPP_
-#define _FWDATATOOLS_IMAGE_HPP_
+#ifndef __FWDATATOOLS_IMAGE_HPP__
+#define __FWDATATOOLS_IMAGE_HPP__
 
-#include <fwCore/base.hpp>
+#include "fwDataTools/config.hpp"
+#include <fwDataTools/helper/Array.hpp>
 
-#include <fwTools/Type.hpp>
+#include <fwCore/base.hpp>
 
 #include <fwData/Image.hpp>
 
 #include <fwMath/Compare.hpp>
 
-#include <fwComEd/helper/Array.hpp>
-
-#include "fwDataTools/export.hpp"
+#include <fwTools/Type.hpp>
 
 namespace fwDataTools
 {
@@ -25,12 +24,11 @@ namespace fwDataTools
 
 /**
  * @brief   This class contains helper to generate and compare images.
- * @class   Image
  */
 class Image
 {
 
-public :
+public:
 
     /**
      * @brief Apply roi to image
@@ -62,31 +60,31 @@ public :
 template<typename IMG_DEST_TYPE, typename MASK_TYPE>
 void Image::mergeMask(::fwData::Image::sptr imgDest, ::fwData::Image::sptr mask, IMG_DEST_TYPE val )
 {
-    typedef IMG_DEST_TYPE  ImgDestType;
+    typedef IMG_DEST_TYPE ImgDestType;
     typedef MASK_TYPE MaskType;
     SLM_ASSERT( "Image dest has not correct type", imgDest->getType().isOfType< ImgDestType >());
     SLM_ASSERT( "Image mask has not correct type", mask->getType().isOfType< MaskType >());
 
     SLM_ASSERT( "Images have not the same size", imgDest->getSize() == mask->getSize() );
     SLM_ASSERT( "Images have not the same spacing",
-            ::fwMath::isContainerEqual(imgDest->getSpacing(), mask->getSpacing()) );
+                ::fwMath::isContainerEqual(imgDest->getSpacing(), mask->getSpacing()) );
     SLM_ASSERT( "Images have not the same origin",
-            ::fwMath::isContainerEqual(imgDest->getOrigin(), mask->getOrigin()) );
+                ::fwMath::isContainerEqual(imgDest->getOrigin(), mask->getOrigin()) );
 
     ::fwData::Array::sptr imgData;
     ::fwData::Array::sptr maskData;
-    imgData = imgDest->getDataArray();
+    imgData  = imgDest->getDataArray();
     maskData = mask->getDataArray();
 
-    ::fwComEd::helper::Array imgHelper(imgData);
-    ::fwComEd::helper::Array maskHelper(maskData);
+    ::fwDataTools::helper::Array imgHelper(imgData);
+    ::fwDataTools::helper::Array maskHelper(maskData);
 
-    ImgDestType *imgIt = imgHelper.begin<ImgDestType>();
-    MaskType *maskIt = maskHelper.begin<MaskType>();
+    ImgDestType* imgIt = imgHelper.begin<ImgDestType>();
+    MaskType* maskIt   = maskHelper.begin<MaskType>();
 
-    const ImgDestType *imgEnd = imgIt + maskData->getNumberOfElements();
+    const ImgDestType* imgEnd = imgIt + maskData->getNumberOfElements();
 
-    for ( ; imgIt != imgEnd ; ++imgIt, ++maskIt)
+    for (; imgIt != imgEnd; ++imgIt, ++maskIt)
     {
         if (*maskIt != 0)
         {
@@ -97,4 +95,4 @@ void Image::mergeMask(::fwData::Image::sptr imgDest, ::fwData::Image::sptr mask,
 
 } // namespace fwDataTools
 
-#endif // _FWDATATOOLS_IMAGE_HPP_
+#endif // __FWDATATOOLS_IMAGE_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/Mesh.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/Mesh.hpp
index 378a5a4..2b158f9 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/Mesh.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/Mesh.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,16 +7,14 @@
 #ifndef __FWDATATOOLS_MESH_HPP__
 #define __FWDATATOOLS_MESH_HPP__
 
+#include "fwDataTools/Vector.hxx"
+#include "fwDataTools/config.hpp"
+#include <fwDataTools/helper/Mesh.hpp>
+
 #include <fwCore/base.hpp>
 
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/Mesh.hpp>
-
-#include <fwComEd/helper/Mesh.hpp>
-
-#include "fwDataTools/Vector.hxx"
-#include "fwDataTools/export.hpp"
+#include <fwData/TransformationMatrix3D.hpp>
 
 namespace fwDataTools
 {
@@ -24,12 +22,11 @@ namespace fwDataTools
 
 /**
  * @brief   This helper generates a mesh using specified structure (quad or triangle).
- * @class   Mesh
  */
 class Mesh
 {
 
-public :
+public:
 
     typedef std::map<Point, ::fwData::Mesh::Id> PointsMapType;
 
@@ -99,24 +96,6 @@ public :
     FWDATATOOLS_API static void colorizeMeshCells(::fwData::Mesh::sptr mesh);
 
     /**
-     * @brief Convert fwData::Mesh to fwData::TriangularMesh structure.
-     *
-     * @param[in]   mesh fwData::Mesh mesh to convert.
-     * @param[out]  trian fwData::TriangularMesh destination for the converted mesh.
-     *
-     * @pre Mesh must contains only triangular cells.
-     */
-    FWDATATOOLS_API static void toTriangularMesh(::fwData::Mesh::sptr mesh, ::fwData::TriangularMesh::sptr trian);
-
-    /**
-     * @brief Convert fwData::TriangularMesh to fwData::Mesh structure.
-     *
-     * @param[in]  trian fwData::TriangularMesh triangular mesh to convert.
-     * @param[out] mesh fwData::Mesh destination for the converted triangular mesh.
-     */
-    FWDATATOOLS_API static void fromTriangularMesh(::fwData::TriangularMesh::sptr trian, ::fwData::Mesh::sptr mesh);
-
-    /**
      * @brief
      *
      * @param[in]  mesh fwData::Mesh mesh structure to find cell type.
@@ -125,7 +104,7 @@ public :
     FWDATATOOLS_API static bool hasUniqueCellType(::fwData::Mesh::sptr mesh, ::fwData::Mesh::CellTypes cell);
 
     /// Applied a transformation 4x4 on mesh
-    FWDATATOOLS_API static void transform( ::fwData::Mesh::sptr mesh, ::fwData::TransformationMatrix3D::sptr t );
+    FWDATATOOLS_API static void transform( ::fwData::Mesh::sptr mesh, ::fwData::TransformationMatrix3D::csptr t );
 
 };
 
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/Namespace.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/Namespace.hpp
index 5d8cfde..45cb058 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/Namespace.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/Namespace.hpp
@@ -1,20 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWDATATOOLS_HPP_
-#define FWDATATOOLS_HPP_
+#ifndef __FWDATATOOLS_NAMESPACE_HPP__
+#define __FWDATATOOLS_NAMESPACE_HPP__
 
 /**
- * @brief       The namespace fwDataTools contains classes which provide helpers to manipulate fwData::Object.
- * @namespace   fwDataTools
- * 
- * @date        2009-2011.
- *
+ * @brief       The namespace fwDataTools contains classes which provide helpers to manipulate fwData::Object. *
  */
 namespace fwDataTools
 {
 }
-#endif /* FWDATATOOLS_HPP_ */
+#endif /* __FWDATATOOLS_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/PickingInfo.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/PickingInfo.hpp
new file mode 100644
index 0000000..0fbf926
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/PickingInfo.hpp
@@ -0,0 +1,65 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_PICKINGINFO_HPP__
+#define __FWDATATOOLS_PICKINGINFO_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwCore/HiResClock.hpp>
+
+#include <cstdint>
+
+namespace fwDataTools
+{
+
+/// Structure to store picking information
+struct  PickingInfo
+{
+    enum Modifier
+    {
+        NONE  = 0,
+        CTRL  = 1,
+        SHIFT = 2,
+    };
+
+    enum class Event : std::int8_t
+    {
+        MOUSE_LEFT_UP = 0,
+        MOUSE_RIGHT_UP,
+        MOUSE_MIDDLE_UP,
+        MOUSE_WHEELFORWARD,
+        MOUSE_LEFT_DOWN,
+        MOUSE_RIGHT_DOWN,
+        MOUSE_MIDDLE_DOWN,
+        MOUSE_WHEELBACKWARD,
+        MOUSE_MOVE,
+        KEY_PRESS,
+    };
+
+    /// Position clicked in world coordinates
+    double m_worldPos[3];
+    /// Id of the cell
+    int m_cellId = -1;
+    /// Id of the closest point
+    int m_closestPointId = -1;
+    /// Mouse event
+    Event m_eventId = Event::MOUSE_LEFT_UP;
+    /// Modifier mask
+    std::int8_t m_modifierMask = 0;
+    /// Key event
+    char m_keyPressed = 0;
+
+    ::fwCore::HiResClock::HiResClockType m_timestamp;
+
+    FWDATATOOLS_API PickingInfo();
+
+};
+
+}
+
+#endif // __FWDATATOOLS_PICKINGINFO_HPP__
+
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/TransferFunction.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/TransferFunction.hpp
index 028dd27..c011fc2 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/TransferFunction.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/TransferFunction.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_TRANSFERFUNCTION_HPP_
-#define _FWDATATOOLS_TRANSFERFUNCTION_HPP_
+#ifndef __FWDATATOOLS_TRANSFERFUNCTION_HPP__
+#define __FWDATATOOLS_TRANSFERFUNCTION_HPP__
 
 #include <fwCore/base.hpp>
 
 #include <fwData/TransferFunction.hpp>
 
-#include "fwDataTools/export.hpp"
+#include "fwDataTools/config.hpp"
 
 namespace fwDataTools
 {
@@ -24,7 +24,7 @@ namespace fwDataTools
 class TransferFunction
 {
 
-public :
+public:
 
     /**
      * @brief Generate a drawing tf with value between 0 and 255.
@@ -42,4 +42,4 @@ protected:
 
 } // namespace fwDataTools
 
-#endif // _FWDATATOOLS_TRANSFERFUNCTION_HPP_
+#endif // __FWDATATOOLS_TRANSFERFUNCTION_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/TransformationMatrix3D.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/TransformationMatrix3D.hpp
index 2d5be8a..a87b5ff 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/TransformationMatrix3D.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/TransformationMatrix3D.hpp
@@ -1,9 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
- 
+
 #ifndef __FWDATATOOLS_TRANSFORMATIONMATRIX3D_HPP__
 #define __FWDATATOOLS_TRANSFORMATIONMATRIX3D_HPP__
 
@@ -11,13 +11,14 @@
 #include <fwData/TransformationMatrix3D.hpp>
 #include <fwData/Point.hpp>
 
-#include "fwDataTools/export.hpp"
+#include "fwDataTools/config.hpp"
+
+#include <glm/mat4x4.hpp>
 
 namespace fwDataTools
 {
 /**
  * @brief   TransformationMatrix3D performs matrices computations.
- * @class   TransformationMatrix3D
  */
 class TransformationMatrix3D
 {
@@ -25,37 +26,88 @@ public:
 
     /**
      * @brief Invert a matrix.
-     * @param[in] trf_input Input matrix
-     * @param[out] trf_output Inverted matrix.
+     * @param[in] _input Input matrix
+     * @param[out] _output Inverted matrix.
      */
-    FWDATATOOLS_API static bool invert(::fwData::TransformationMatrix3D::sptr trf_input,
-            ::fwData::TransformationMatrix3D::sptr trf_output);
+    FWDATATOOLS_API static bool invert(const ::fwData::TransformationMatrix3D::csptr& _input,
+                                       ::fwData::TransformationMatrix3D::sptr& _output);
 
     /**
      * @brief Multiply two matrices.
-     * @param[in] ftrf_A First matrix.
-     * @param[in] fTrf_B Second matrix.
-     * @param[out] fTrf_C Output matrix.
+     * @param[in] trfA First matrix.
+     * @param[in] trfB Second matrix.
+     * @param[out] _output Output matrix.
      */
-    FWDATATOOLS_API static void multiply(::fwData::TransformationMatrix3D::sptr fTrf_A,
-            ::fwData::TransformationMatrix3D::sptr fTrf_B, ::fwData::TransformationMatrix3D::sptr fTrf_C);
+    FWDATATOOLS_API static void multiply(const ::fwData::TransformationMatrix3D::csptr& _trfA,
+                                         const::fwData::TransformationMatrix3D::csptr& _trfB,
+                                         ::fwData::TransformationMatrix3D::sptr& _output);
 
     /**
      * @brief Set the matrix to identity.
-     * @param[in/out] trf Matrix we want to set to identity.
+     * @param[in,out] _trf Matrix we want to set to identity.
      */
-    FWDATATOOLS_API static void identity(::fwData::TransformationMatrix3D::sptr trf);
+    FWDATATOOLS_API static void identity(::fwData::TransformationMatrix3D::sptr& _trf);
 
     /**
      * @brief Multiply a point and a matrix.
-     * @param[in] trf Matrix.
-     * @param[in] input Input point.
-     * @param[out] output Output point.
+     * @param[in] _trf Matrix.
+     * @param[in] _input Input point.
+     * @param[out] _output Output point.
      */
-    FWDATATOOLS_API static void multiply(::fwData::TransformationMatrix3D::sptr trf,
-            ::fwData::Point::sptr input, ::fwData::Point::sptr output);
+    FWDATATOOLS_API static void multiply(const ::fwData::TransformationMatrix3D::csptr& _trf,
+                                         const ::fwData::Point::csptr& _input, ::fwData::Point::sptr& _output);
 
+    /**
+     * @brief Multiply a point and a matrix.
+     * @param[in] _trf input ::fwData::TransformationMatrix3D.
+     * @return GLM matrix.
+     */
+    FWDATATOOLS_API static ::glm::dmat4x4 getMatrixFromTF3D(const ::fwData::TransformationMatrix3D::csptr& _trf);
+
+    /**
+     * @brief Multiply a point and a matrix.
+     * @param[in] _trf output ::fwData::TransformationMatrix3D.
+     * @param[out] _input Input GLM matrix.
+     */
+    FWDATATOOLS_API static void setTF3DFromMatrix(::fwData::TransformationMatrix3D::sptr& _trf,
+                                                  const ::glm::dmat4x4& _input);
 };
+
+// ----------------------------------------------------------------------------
+
+inline ::glm::dmat4x4 TransformationMatrix3D::getMatrixFromTF3D(const ::fwData::TransformationMatrix3D::csptr& _trf)
+{
+    // TransformationMatrix3D is stored row-major
+    // glm matrices are stored column-major
+    const auto& coefs = _trf->getCoefficients();
+
+    ::glm::dmat4x4 mat(coefs[0], coefs[4], coefs[8], coefs[12],
+                       coefs[1], coefs[5], coefs[9], coefs[13],
+                       coefs[2], coefs[6], coefs[10], coefs[14],
+                       coefs[3], coefs[7], coefs[11], coefs[15]);
+
+    return mat;
+}
+
+// ----------------------------------------------------------------------------
+
+inline void TransformationMatrix3D::setTF3DFromMatrix(::fwData::TransformationMatrix3D::sptr& _trf,
+                                                      const ::glm::dmat4x4& _input)
+{
+    // TransformationMatrix3D is stored row-major
+    // glm matrices are stored column-major
+    auto& coefs = _trf->getRefCoefficients();
+    for (size_t i = 0; i < 4; ++i)
+    {
+        const size_t rowDst          = i * 4;
+        const ::glm::length_t rowSrc = static_cast< ::glm::length_t>(i);
+        for (size_t j = 0; j < 4; ++j)
+        {
+            const ::glm::length_t colSrc = static_cast< ::glm::length_t>(j);
+            coefs[rowDst + j] = _input[colSrc][rowSrc];
+        }
+    }
+}
 } // namespace fwDataTools
 
 #endif // __FWDATATOOLS_TRANSFORMATIONMATRIX3D_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/Vector.hxx b/SrcLib/core/fwDataTools/include/fwDataTools/Vector.hxx
index d766d31..14c693e 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/Vector.hxx
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/Vector.hxx
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_VECTOR_HPP_
-#define _FWDATATOOLS_VECTOR_HPP_
+#ifndef __FWDATATOOLS_VECTOR_HXX__
+#define __FWDATATOOLS_VECTOR_HXX__
 
 #include <fwCore/base.hpp>
 
+#include <cmath>
 
 namespace fwDataTools
 {
@@ -22,18 +23,21 @@ public:
     float z;
 
     Point() : x(0.), y(0.), z(0.)
-    {}
+    {
+    }
     Point(const float p[3]) : x(p[0]), y(p[1]), z(p[2])
-    {}
+    {
+    }
 
     Point(float _x, float _y, float _z) : x(_x), y(_y), z(_z)
-    {}
+    {
+    }
 
     bool operator<(const Point& pt) const
     {
         return (   this->x < pt.x
-                ||(this->x == pt.x && this->y < pt.y)
-                ||(this->x == pt.x && this->y == pt.y && this->z < pt.z) );
+                   ||(this->x == pt.x && this->y < pt.y)
+                   ||(this->x == pt.x && this->y == pt.y && this->z < pt.z) );
     }
 };
 
@@ -47,37 +51,51 @@ public:
     T z;
 
     Vector() : x(0.), y(0.), z(0.)
-    {}
+    {
+    }
 
     Vector(const Vector& v) : x(v.x), y(v.y), z(v.z)
-    {}
+    {
+    }
     Vector(const Point& p1, const Point& p2) : x(p2.x-p1.x), y(p2.y-p1.y), z(p2.z-p1.z)
-    {}
+    {
+    }
     Vector(T _x, T _y, T _z) : x(_x), y(_y), z(_z)
-    {}
+    {
+    }
 
 
     bool operator<(const Vector& v) const
     {
         return (   x < v.x
-                ||(x == v.x && y < v.y)
-                ||(x == v.x && y == v.y && z < v.z) );
+                   ||(x == v.x && y < v.y)
+                   ||(x == v.x && y == v.y && z < v.z) );
     }
 
     void operator=(const Vector& v)
-    { x = v.x; y = v.y; z = v.z; }
+    {
+        x = v.x; y = v.y; z = v.z;
+    }
 
     void operator-=(const Vector& v)
-    { x -= v.x; y -= v.y; z -= v.z; }
+    {
+        x -= v.x; y -= v.y; z -= v.z;
+    }
 
     void operator+=(const Vector& v)
-    { x += v.x; y += v.y; z += v.z; }
+    {
+        x += v.x; y += v.y; z += v.z;
+    }
 
     void operator*=(const float val)
-    { x = val*x; y = val*y; z = val*z; }
+    {
+        x = val*x; y = val*y; z = val*z;
+    }
 
     void operator/=(const float val)
-    { x = x/val; y = y/val; z = z/val; }
+    {
+        x = x/val; y = y/val; z = z/val;
+    }
 
     T norm2()
     {
@@ -102,12 +120,12 @@ public:
         return v;
     }
 
-    T dot(Vector &v)
+    T dot(Vector& v)
     {
         return x*v.x + y*v.y + z*v.z;
     }
 
-    void crossWith(const Vector &v)
+    void crossWith(const Vector& v)
     {
         T _x = y * v.z - z * v.y;
         T _y = z * v.x - x * v.z;
@@ -117,7 +135,7 @@ public:
         z = _z;
     }
 
-    Vector cross(const Vector &v)
+    Vector cross(const Vector& v)
     {
         Vector res(*this);
         res.crossWith(v);
@@ -127,5 +145,5 @@ public:
 
 } // namespace fwDataTools
 
-#endif // _FWDATATOOLS_VECTOR_HPP_
+#endif // __FWDATATOOLS_VECTOR_HXX__
 
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/export.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/export.hpp
deleted file mode 100644
index d46780f..0000000
--- a/SrcLib/core/fwDataTools/include/fwDataTools/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATATOOLS_CONFIG_HPP_
-#define _FWDATATOOLS_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWDATATOOLS_EXPORTS
-    #define FWDATATOOLS_API __declspec(dllexport)
-    #else
-    #define FWDATATOOLS_API __declspec(dllimport)
-    #endif
-    
-    #define FWDATATOOLS_CLASS_API
-
-    #pragma warning(disable: 4290)
-    
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWDATATOOLS_EXPORTS
-        #define FWDATATOOLS_API __attribute__ ((visibility("default")))
-        #define FWDATATOOLS_CLASS_API __attribute__ ((visibility("default")))
-        #else
-        #define FWDATATOOLS_API __attribute__ ((visibility("hidden")))
-        #define FWDATATOOLS_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-#else
-
-    #define FWDATATOOLS_API
-    #define FWDATATOOLS_CLASS_API
-
-#endif
-
-
-#endif //_FWDATATOOLS_CONFIG_HPP_
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/Image.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/Image.hpp
new file mode 100644
index 0000000..b4194e5
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/Image.hpp
@@ -0,0 +1,65 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_FIELDHELPER_IMAGE_HPP__
+#define __FWDATATOOLS_FIELDHELPER_IMAGE_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <string>
+
+namespace fwDataTools
+{
+namespace fieldHelper
+{
+/**
+ * @brief   Centralization of all identifiers used for communication and storage of dynamic attributes
+ * @note    probably not dynamic enough but allows at least to have an overview of information that can be exchanged
+ */
+struct FWDATATOOLS_CLASS_API Image
+{
+    /// position oriented IDs
+    FWDATATOOLS_API const static std::string position;
+
+    /// visualization oriented IDs
+    /// @{
+    FWDATATOOLS_API static const std::string localGui;
+    FWDATATOOLS_API static const std::string m_axialSliceCountId;
+    FWDATATOOLS_API static const std::string m_frontalSliceCountId;
+    FWDATATOOLS_API static const std::string m_sagittalSliceCountId;
+    FWDATATOOLS_API static const std::string m_axialSliceIndexId;
+    FWDATATOOLS_API static const std::string m_frontalSliceIndexId;
+    FWDATATOOLS_API static const std::string m_sagittalSliceIndexId;
+    FWDATATOOLS_API static const std::string m_transferFunctionCompositeId;
+    FWDATATOOLS_API static const std::string m_globalMatrixId;
+    FWDATATOOLS_API static const std::string m_errorId;
+    FWDATATOOLS_API static const std::string m_imageLandmarksId;
+    FWDATATOOLS_API static const std::string m_imageDistancesId;
+    FWDATATOOLS_API static const std::string m_commentId;
+    FWDATATOOLS_API static const std::string m_colorId;
+    FWDATATOOLS_API static const std::string m_labelId;         ///< to assign a label
+    FWDATATOOLS_API static const std::string m_relatedServiceId; ///< to store uid (simple) of service which create the object
+    FWDATATOOLS_API static const std::string m_imageLabelId;
+    FWDATATOOLS_API static const std::string m_acquisitionCountId;
+    /// @}
+
+    /// processing oriented IDs
+    /// @{
+    FWDATATOOLS_API static const std::string m_roi;
+    /// @}
+
+
+    /// processing oriented data
+    /// @{
+    FWDATATOOLS_API static const std::string DATA_IS_LOCKED;
+    /// @}
+};
+
+} // fieldHelper
+
+}
+
+#endif /*__FWDATATOOLS_FIELDHELPER_IMAGE_HPP__*/
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp
new file mode 100644
index 0000000..2187ac2
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/MedicalImageHelpers.hpp
@@ -0,0 +1,404 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_FIELDHELPER_MEDICALIMAGEHELPERS_HPP__
+#define __FWDATATOOLS_FIELDHELPER_MEDICALIMAGEHELPERS_HPP__
+
+#include "fwDataTools/config.hpp"
+#include "fwDataTools/helper/Image.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/Point.hpp>
+
+#include <fwTools/Dispatcher.hpp>
+#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
+#include <fwTools/IntrinsicTypes.hpp>
+#include <fwTools/NumericRoundCast.hxx>
+
+#include <numeric>
+#include <utility> // std::pair
+
+namespace fwDataTools
+{
+namespace fieldHelper
+{
+
+
+template <class T> struct bitwise_or : std::binary_function <T,T,T>
+{
+    T operator() (const T& x, const T& y) const
+    {
+        return x|y;
+    }
+};
+
+
+/**
+ * @brief   This class contains helpers for medical image fields.
+ */
+class FWDATATOOLS_CLASS_API MedicalImageHelpers
+{
+public:
+
+    /**
+     * @brief       Check if the image has a landmark field.
+     *
+     * If the image hasn't landmark field, it is added and the method return true.
+     *
+     * @param[in]   _pImg   image which must contains the field.
+     * @return      true if the field is added.
+     */
+    FWDATATOOLS_API static bool checkLandmarks( ::fwData::Image::sptr _pImg );
+
+    /**
+     * @brief       Check if the image is valid.
+     *
+     * The image size must be > 1 for each dimension.
+     *
+     * @param[in]   _pImg   image checked.
+     * @return      true if the image is valid.
+     */
+    FWDATATOOLS_API static bool checkImageValidity( ::fwData::Image::csptr _pImg );
+
+    /**
+     * @brief       Check if the image has slice index fields.
+     *
+     * If the image hasn't frontal, axial and sagittal slice index fields, they are added.
+     *
+     * @param       _pImg   image which must contains the field.
+     * @return      true if the fields are added.
+     */
+    FWDATATOOLS_API static bool checkImageSliceIndex( ::fwData::Image::sptr _pImg );
+
+    /**
+     * @brief       Get the X,Y,Z slice position.
+     * @param[in]   _pImg   current image.
+     * @return      X,Y,Z  slice position of the current image if exist field exist
+     *              else install field and return (imgSizeX/2,imgSizeY/2,imgSizeZ/2).
+     */
+    FWDATATOOLS_API static ::fwData::Point::sptr   getImageSliceIndices( ::fwData::Image::sptr _pImg );
+
+    /**
+     * @brief       Check if the image has a comment field.
+     *
+     * If the image has no comment field, this is added with default name ("Original image").
+     *
+     * @param[in]   _pImg image which contains the comment field.
+     * @return      true if the comment field is added.
+     */
+    FWDATATOOLS_API static bool checkComment( ::fwData::Image::sptr _pImg );
+
+    /**
+     * @brief       Initialized an image to 0 from image source (same field, pixel type, buffer size...).
+     *
+     *
+     * @param[in]   imgSrc             image which gives information (field, pixel type, buffer size...).
+     * @param[in]   imgToInitialize    image to initialized (if not null).
+     *
+     * @return      Returns initialized image.
+     */
+    FWDATATOOLS_API static ::fwData::Image::sptr initialize( ::fwData::Image::sptr imgSrc,
+                                                             ::fwData::Image::sptr imgToInitialize =
+                                                                 ::fwData::Image::sptr());
+
+    /**
+     * @brief       Return true if the pixel value is null.
+     * @param[in] image : image containing the pixel
+     * @param[in] point : the coordinate of the pixel in the image.
+     */
+    template < typename INT_INDEX>
+    static bool isPixelNull(::fwData::Image::sptr image, INT_INDEX& point);
+
+    FWDATATOOLS_API static bool isBufNull(const ::fwData::Image::BufferType* buf, const unsigned int len);
+
+
+    /**
+     * @brief Set a pixel value.
+     * @param[in] image : image containing the pixel
+     * @param[in] point : coordinate of the pixel
+     * @param[in] value : the pixel value
+     */
+    template < typename T, typename INT_INDEX>
+    static void setPixel(::fwData::Image::sptr image, INT_INDEX& point, T& value);
+
+    /**
+     * @brief Set a pixel value.
+     * @param[in] pImage : image containing the pixel
+     * @param[in] point : coordinate of the pixel
+     * @param[in] value : the pixel value
+     */
+    template < typename T >
+    static void setPixel(::fwData::Image::sptr pImage, ::fwData::Point::sptr point, T& value);
+
+
+    /**
+     * @brief Return a buffer of image type's size, containing 'value' casted to image data type
+     * @param[in] image : reference image
+     * @param[in] value : value to map
+     */
+    template < typename T >
+    static SPTR( ::fwData::Image::BufferType ) getPixelBufferInImageSpace(::fwData::Image::sptr image, T &value);
+
+
+    /**
+     * @brief Return minimum and maximum values contained in image. If image
+     * min or max value is out of MINMAXTYPE range, they are clamped to
+     * MINMAXTYPE capacity
+     * @param[in] _img : image
+     * @param[out] _min : minimum value
+     * @param[out] _max : maximum value
+     */
+    template < typename MINMAXTYPE >
+    static void getMinMax(const ::fwData::Image::sptr _img, MINMAXTYPE& _min, MINMAXTYPE& _max);
+
+};
+
+
+//------------------------------------------------------------------------------
+
+template < typename VALUE >
+class PixelCastAndSetFunctor
+{
+public:
+    class Param
+    {
+    public:
+        typedef VALUE ValueType;
+        typedef SPTR ( ::fwData::Image::BufferType ) BufferTypeSptr;
+
+        Param(ValueType& v) : value (v)
+        {
+        }
+
+        const ValueType& value;
+        BufferTypeSptr res;
+    };
+
+    template < typename IMAGE >
+    void operator()( Param& param )
+    {
+        unsigned char imageTypeSize = sizeof(IMAGE);
+
+        IMAGE val = ::fwTools::numericRoundCast<IMAGE>(param.value);
+
+        ::fwData::Image::BufferType* buf = reinterpret_cast< ::fwData::Image::BufferType* > (&val);
+
+        SPTR( ::fwData::Image::BufferType ) res ( new ::fwData::Image::BufferType[imageTypeSize] );
+        std::copy(buf, buf+imageTypeSize, res.get());
+        param.res = res;
+    }
+
+};
+
+
+//------------------------------------------------------------------------------
+
+template < typename VALUE, typename INT_INDEX >
+class CastAndSetFunctor
+{
+public:
+    class Param
+    {
+    public:
+        typedef VALUE ValueType;
+        typedef INT_INDEX PointType;
+
+        Param(PointType& p, ValueType& v) :
+            value (v), point(p)
+        {
+        }
+
+        ::fwData::Image::sptr image;
+        const ValueType& value;
+        const PointType& point;
+    };
+
+    template < typename IMAGE >
+    void operator()( Param& param )
+    {
+        ::fwDataTools::helper::Image imagehelper(param.image);
+        IMAGE* buffer                         = static_cast < IMAGE* > (imagehelper.getBuffer());
+        const INT_INDEX& p                    = param.point;
+        const ::fwData::Image::SizeType& size = param.image->getSize();
+        const int& sx                         = size[0];
+        const int& sy                         = size[1];
+        const int& offset                     = p[0] + sx*p[1] + p[2]*sx*sy;
+        *(buffer+offset) = ::fwTools::numericRoundCast<IMAGE>(param.value);
+    }
+
+};
+
+
+
+//------------------------------------------------------------------------------
+
+template < typename T >
+void MedicalImageHelpers::setPixel(::fwData::Image::sptr image, ::fwData::Point::sptr point, T& value)
+{
+    setPixel(image, point->getCoord(), value);
+}
+
+
+//------------------------------------------------------------------------------
+
+template < typename T, typename INT_INDEX>
+void MedicalImageHelpers::setPixel(::fwData::Image::sptr image, INT_INDEX& point, T& value)
+{
+    typename CastAndSetFunctor<T,INT_INDEX>::Param param(point, value);
+    param.image = image;
+
+    ::fwTools::DynamicType type = image->getPixelType();
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, CastAndSetFunctor<T, INT_INDEX> >::invoke( type, param );
+}
+
+
+
+//------------------------------------------------------------------------------
+
+template < typename T >
+SPTR( ::fwData::Image::BufferType ) MedicalImageHelpers::getPixelBufferInImageSpace(::fwData::Image::sptr image,
+                                                                                    T &value)
+{
+    typename PixelCastAndSetFunctor<T>::Param param(value);
+
+    ::fwTools::DynamicType type = image->getPixelType();
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, PixelCastAndSetFunctor<T> >::invoke( type, param );
+    return param.res;
+}
+
+
+
+//------------------------------------------------------------------------------
+
+template < typename INT_INDEX >
+class CastAndCheckFunctor
+{
+public:
+    class Param
+    {
+    public:
+        typedef INT_INDEX PointType;
+
+        Param(PointType& p, bool& b) :
+            point(p), isNull(b)
+        {
+        }
+
+        ::fwData::Image::sptr image;
+        const PointType& point;
+        bool& isNull;
+    };
+
+    template < typename IMAGE >
+    void operator()( Param& param )
+    {
+        ::fwDataTools::helper::Image imagehelper(param.image);
+        IMAGE* buffer                           = static_cast < IMAGE* > (imagehelper.getBuffer());
+        const INT_INDEX& p                      = param.point;
+        const std::vector<boost::int32_t>& size = param.image->getCRefSize();
+        const int& sx                           = size[0];
+        const int& sy                           = size[1];
+        const int& offset                       = p[0] + sx*p[1] + p[2]*sx*sy;
+        param.isNull = (*(buffer+offset) == 0);
+    }
+
+};
+
+//------------------------------------------------------------------------------
+
+template < typename INT_INDEX>
+bool MedicalImageHelpers::isPixelNull(::fwData::Image::sptr image, INT_INDEX& point)
+{
+    ::fwDataTools::helper::Image imageLock ( image );
+    const unsigned char imageTypeSize = image->getPixelType().sizeOf();
+    ::fwData::Image::BufferType* buf =
+        static_cast< ::fwData::Image::BufferType*> (imageLock.getPixelBuffer(point[0], point[1], point[2]));
+
+    return isBufNull(buf, imageTypeSize);
+}
+
+//------------------------------------------------------------------------------
+
+template < typename T >
+class MinMaxFunctor
+{
+public:
+    class Param
+    {
+    public:
+
+        Param(::fwData::Image::sptr _img, T& _min, T& _max) :
+            image(_img), min(_min), max(_max)
+        {
+        }
+
+        ::fwData::Image::sptr image;
+        T& min;
+        T& max;
+    };
+
+    template < typename IMAGE >
+    void operator()( Param& param )
+    {
+        ::fwDataTools::helper::Image imageLock ( param.image );
+        IMAGE* buffer                         = static_cast < IMAGE* > (imageLock.getBuffer());
+        const ::fwData::Image::SizeType& size = param.image->getSize();
+        ::fwData::Image::SizeType::value_type len = size[0]*size[1]*size[2];
+
+        T& min = param.min;
+        T& max = param.max;
+
+        typedef std::numeric_limits<IMAGE> ImgLimits;
+        IMAGE imin = ImgLimits::max();
+        IMAGE imax = (ImgLimits::is_integer || !ImgLimits::is_signed) ? ImgLimits::min() : -ImgLimits::max();
+
+        IMAGE* bufEnd = buffer + len;
+        IMAGE currentVoxel;
+
+        for (IMAGE* voxel = buffer; voxel < bufEnd; ++voxel )
+        {
+            currentVoxel = *voxel;
+
+            if ( currentVoxel < imin )
+            {
+                imin = currentVoxel;
+            }
+            else if (currentVoxel > imax)
+            {
+                imax = currentVoxel;
+            }
+        }
+
+        typedef std::numeric_limits<T> TLimits;
+        T minT = (TLimits::is_integer || !ImgLimits::is_signed) ? TLimits::min() : -TLimits::max();
+        T maxT = TLimits::max();
+
+        min = ( imin < minT ) ? minT : static_cast< T > (imin);
+        max = ( imax > maxT ) ? maxT : static_cast< T > (imax);
+
+    }
+
+};
+
+
+template < typename MINMAXTYPE >
+void MedicalImageHelpers::getMinMax(const ::fwData::Image::sptr _img, MINMAXTYPE& _min, MINMAXTYPE& _max)
+{
+    typename MinMaxFunctor<MINMAXTYPE>::Param param(_img, _min, _max);
+
+    ::fwTools::DynamicType type = _img->getPixelType();
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, MinMaxFunctor<MINMAXTYPE> >::invoke( type, param );
+}
+
+
+
+} // fieldHelper
+} // fwDataTools
+
+
+#endif // __FWDATATOOLS_FIELDHELPER_MEDICALIMAGEHELPERS_HPP__
+
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/Namespace.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/Namespace.hpp
new file mode 100644
index 0000000..dd86619
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/fieldHelper/Namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_FIELDHELPER_NAMESPACE_HPP__
+#define __FWDATATOOLS_FIELDHELPER_NAMESPACE_HPP__
+
+namespace fwDataTools
+{
+/**
+ * @brief       This namespace fwDataTools::fieldHelper contains several helpers for using field.
+ */
+namespace fieldHelper
+{
+}
+
+}
+#endif /* __FWDATATOOLS_FIELDHELPER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Array.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Array.hpp
new file mode 100644
index 0000000..ac0683f
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Array.hpp
@@ -0,0 +1,184 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_ARRAY_HPP__
+#define __FWDATATOOLS_HELPER_ARRAY_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwData/Array.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/Type.hpp>
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+/**
+ * @brief   Helper to manage array buffer. Lock the buffer before to modify it.
+ */
+class FWDATATOOLS_CLASS_API Array
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro((Array), (((::fwData::Array::sptr))), new Array );
+
+
+    FWDATATOOLS_API Array( ::fwData::Array::sptr array );
+
+    FWDATATOOLS_API virtual ~Array();
+
+    /**
+     * @brief Setter for one item components of the array
+     *
+     * @param id Item id
+     * @param value Valid buffer of elements of type \<m_type\> with a length equal to \<m_nbOfComponents\> to be copied to array 'id'
+     */
+    FWDATATOOLS_API virtual void setItem(const ::fwData::Array::IndexType& id, const void* value);
+
+    /**
+     * @brief Setter for one item component of the array
+     *
+     * @param id Item id
+     * @param component Component id to write data in.
+     * @param value Valid buffer of elements of type \<m_type\> with a length equal to \<m_nbOfComponents\> to be copied to array 'id', component n° 'component'
+     *
+     */
+    FWDATATOOLS_API virtual void setItem(const ::fwData::Array::IndexType& id, const size_t component,
+                                         const void* value);
+
+    ///
+    /**
+     * @brief Getter for a buffer item. pointer to the requested item in the buffer
+     *
+     * @param id Item id
+     * @param component Component id
+     *
+     * @return Pointer to the requested item in the buffer
+     */
+    FWDATATOOLS_API virtual void* getItem(const ::fwData::Array::IndexType& id, const size_t component = 0);
+
+    /**
+     * @brief Typed version of getItem
+     *
+     * @tparam T Type in which the pointer will be returned
+     * @param id Item id
+     * @param component Component id
+     *
+     * @return Array buffer pointer casted to T
+     */
+    template< typename T > T* getItem(const ::fwData::Array::IndexType& id, const size_t component = 0);
+
+    /**
+     * @brief Copies the data into the buffer pointed by <value>
+     *
+     * @param id Item id
+     * @param[out] value Buffer to write into
+     */
+    FWDATATOOLS_API virtual void getItem(const ::fwData::Array::IndexType& id, void* value) const;
+    FWDATATOOLS_API virtual void getItem(const ::fwData::Array::IndexType& id, const size_t component,
+                                         void* value) const;
+
+    /**
+     * @brief Getter for the array buffer
+     *
+     * @return Array's buffer, if exists, else NULL
+     * @{
+     */
+    FWDATATOOLS_API virtual void* getBuffer();
+    FWDATATOOLS_API virtual const void* getBuffer() const;
+    ///@}
+
+    /**
+     * @brief Setter for the array buffer.
+     *
+     * An existing buffer will be released if the array own it.
+     *
+     * @param buf            Buffer to set as Array's buffer
+     * @param takeOwnership  if true, the Array will manage allocation and destroy the buffer when needed.
+     * @param type           Type of the array view
+     * @param size           Size of the array view
+     * @param nbOfComponents Number of components of the array view, Min value : 1
+     */
+    FWDATATOOLS_API void setBuffer( void* buf, bool takeOwnership,
+                                    const ::fwTools::Type& type,
+                                    const ::fwData::Array::SizeType& size,
+                                    size_t nbOfComponents );
+
+    /// Returns the begining/end of the buffer interpreted as a char buffer
+    FWDATATOOLS_API virtual char* begin();
+    FWDATATOOLS_API virtual char* end();
+    FWDATATOOLS_API virtual const char* begin() const;
+    FWDATATOOLS_API virtual const char* end() const;
+
+
+    /// Returns the begining/end of the buffer, casted to T
+    template< typename T > T* begin();
+    template< typename T > T* end();
+
+    /**
+     * @brief Get a pointer to the value described by given parameters
+     *
+     * @param id Item id
+     * @param component Item component id
+     * @param sizeOfType size of a component
+     *
+     * @return buffer item pointer
+     * @{
+     */
+    FWDATATOOLS_API char* getBufferPtr( const ::fwData::Array::IndexType& id, size_t component, size_t sizeOfType );
+    FWDATATOOLS_API const char* getBufferPtr( const ::fwData::Array::IndexType& id, size_t component,
+                                              size_t sizeOfType ) const;
+    ///@}
+
+    /// Returns a copy of current lock on array
+    FWDATATOOLS_API ::fwMemory::BufferObject::Lock getLock() const;
+
+protected:
+
+    /**
+     * @brief Protected setter for the array buffer.
+     * An existing buffer will be released if the array own it.
+     *
+     * @param buf Buffer to set as Array's buffer
+     * @param takeOwnership if true, the Array will manage allocation and destroy the buffer when needed.
+     */
+    FWDATATOOLS_API virtual void setBuffer(void* buf, bool takeOwnership = false);
+
+
+    ::fwData::Array::sptr m_array;
+    ::fwMemory::BufferObject::Lock m_lock;
+
+};
+
+template< typename T >
+T* Array::begin()
+{
+    return static_cast<T*>(this->getBuffer());
+}
+
+template< typename T >
+T* Array::end()
+{
+    return reinterpret_cast<T*> (static_cast<char*>(this->getBuffer()) + m_array->getSizeInBytes());
+}
+
+template< typename T >
+T* Array::getItem(const  ::fwData::Array::IndexType& id, const size_t component)
+{
+    return static_cast<T*> (this->getItem(id, component));
+}
+
+
+} // namespace helper
+
+} // namespace fwData
+
+#endif // __FWDATATOOLS_HELPER_ARRAY_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/ArrayGetter.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/ArrayGetter.hpp
new file mode 100644
index 0000000..a06bfd5
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/ArrayGetter.hpp
@@ -0,0 +1,132 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_ARRAYGETTER_HPP__
+#define __FWDATATOOLS_HELPER_ARRAYGETTER_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwData/Array.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/Type.hpp>
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+/**
+ * @brief   Helper to manage array buffer. Lock the buffer before to modify it.
+ *
+ */
+class FWDATATOOLS_CLASS_API ArrayGetter
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro((ArrayGetter), (((::fwData::Array::sptr))), new ArrayGetter );
+
+
+    FWDATATOOLS_API ArrayGetter( ::fwData::Array::csptr array );
+
+    FWDATATOOLS_API virtual ~ArrayGetter();
+
+    ///
+    /**
+     * @brief Getter for a buffer item. pointer to the requested item in the buffer
+     *
+     * @param id Item id
+     * @param component Component id
+     *
+     * @return Pointer to the requested item in the buffer
+     */
+    FWDATATOOLS_API virtual const void* getItem(const ::fwData::Array::IndexType& id, const size_t component = 0) const;
+
+    /**
+     * @brief Typed version of getItem
+     *
+     * @tparam T Type in which the pointer will be returned
+     * @param id Item id
+     * @param component Component id
+     *
+     * @return Array buffer pointer casted to T
+     */
+    template< typename T > const T* getItem(const ::fwData::Array::IndexType& id, const size_t component = 0) const;
+
+    /**
+     * @brief Copies the data into the buffer pointed by <value>
+     *
+     * @param id Item id
+     * @param[out] value Buffer to write into
+     */
+    FWDATATOOLS_API virtual void getItem(const ::fwData::Array::IndexType& id, void* value) const;
+    FWDATATOOLS_API virtual void getItem(const ::fwData::Array::IndexType& id, const size_t component,
+                                         void* value) const;
+
+    /**
+     * @brief Getter for the array buffer
+     *
+     * @return Array's buffer, if exists, else NULL
+     */
+    FWDATATOOLS_API virtual const void* getBuffer() const;
+
+    /// Returns the begining/end of the buffer interpreted as a char buffer
+    FWDATATOOLS_API virtual const char* begin() const;
+    FWDATATOOLS_API virtual const char* end() const;
+
+
+    /// Returns the begining/end of the buffer, casted to T
+    template< typename T > const T* begin() const;
+    template< typename T > const T* end() const;
+
+    /**
+     * @brief Get a pointer to the value described by given parameters
+     *
+     * @param id Item id
+     * @param component Item component id
+     * @param sizeOfType size of a component
+     *
+     * @return buffer item pointer
+     */
+    FWDATATOOLS_API const char* getBufferPtr( const ::fwData::Array::IndexType& id, size_t component,
+                                              size_t sizeOfType ) const;
+
+    /// Returns a copy of current lock on array
+    FWDATATOOLS_API ::fwMemory::BufferObject::Lock getLock() const;
+
+protected:
+
+    ::fwData::Array::csptr m_array;
+    ::fwMemory::BufferObject::Lock m_lock;
+
+};
+
+template< typename T >
+const T* ArrayGetter::begin() const
+{
+    return static_cast<const T*>(this->getBuffer());
+}
+
+template< typename T >
+const T* ArrayGetter::end() const
+{
+    return reinterpret_cast<const T*> (static_cast<const char*>(this->getBuffer()) + m_array->getSizeInBytes());
+}
+
+template< typename T >
+const T* ArrayGetter::getItem(const  ::fwData::Array::IndexType& id, const size_t component) const
+{
+    return static_cast<const T*> (this->getItem(id, component));
+}
+
+
+} // namespace helper
+
+} // namespace fwData
+
+#endif // __FWDATATOOLS_HELPER_ARRAYGETTER_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Composite.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Composite.hpp
new file mode 100644
index 0000000..e361ae0
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Composite.hpp
@@ -0,0 +1,90 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_COMPOSITE_HPP__
+#define __FWDATATOOLS_HELPER_COMPOSITE_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include "fwData/Composite.hpp"
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+/**
+ * @brief   Defines an helper to modify an ::fwData::Composite and create in parallel the message to announce this modification.
+ */
+class FWDATATOOLS_CLASS_API Composite
+{
+
+public:
+
+    /// Constructor. Initialize parameters.
+    FWDATATOOLS_API Composite( ::fwData::Composite::wptr _composite );
+
+    /// Destrucotr. Do nothing.
+    FWDATATOOLS_API ~Composite();
+
+    /**
+     * @brief Add an object in the composite.
+     * @param[in] _compositeKey key of the object in the composite.
+     * @param[in] _newObject    object to add in the composite
+     *
+     * Prepare the message to announce the modification.
+     */
+    FWDATATOOLS_API void add( std::string _compositeKey, ::fwData::Object::sptr _newObject );
+
+    /**
+     * @brief Remove an object in the composite.
+     * @param[in] _compositeKey key of the object in the composite.
+     *
+     * Prepare the message to announce the modification.
+     */
+    FWDATATOOLS_API void remove( std::string _compositeKey );
+
+    /**
+     * @brief Clear all objects in the composite.
+     *
+     * Prepare the message to announce the modification.
+     */
+    FWDATATOOLS_API void clear();
+
+    /**
+     * @brief Replace an object in the composite.
+     * @param[in] _compositeKey key of the object in the composite.
+     * @param[in] _newObject    the new object to add in the composite.
+     *
+     * Prepare the message to announce the modification.
+     */
+    FWDATATOOLS_API void swap( std::string _compositeKey, ::fwData::Object::sptr _newObject );
+
+    /**
+     * @brief Send the message of modification
+     * @param _serviceSource service used to send the message
+     * @param _allowLoops if true, the _serviceSource will receive the message
+     */
+    FWDATATOOLS_API void notify();
+
+private:
+
+    /// Map of added objects, send on notify
+    ::fwData::Composite::ContainerType m_addedObjects;
+    /// Map of new changed objects, send on notify
+    ::fwData::Composite::ContainerType m_newChangedObjects;
+    /// Map of old changed objects, send on notify
+    ::fwData::Composite::ContainerType m_oldChangedObjects;
+    /// Map of removed objects, send on notify
+    ::fwData::Composite::ContainerType m_removedObjects;
+    /// Composite to add/remove/change objects
+    ::fwData::Composite::wptr m_composite;
+};
+
+} // namespace helper
+} // namespace fwDataTools
+
+#endif // __FWDATATOOLS_HELPER_COMPOSITE_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Field.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Field.hpp
new file mode 100644
index 0000000..3254bb9
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Field.hpp
@@ -0,0 +1,102 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_FIELD_HPP__
+#define __FWDATATOOLS_HELPER_FIELD_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwData/Object.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+/**
+ * @brief   Defines a helper to modify field on a ::fwData::Object and create a message notifying this modification.
+ */
+class FWDATATOOLS_CLASS_API Field
+{
+
+public:
+
+    /// Constructor. Initialize parameters.
+    FWDATATOOLS_API Field( ::fwData::Object::sptr object );
+
+    /// Destructor. Do nothing.
+    FWDATATOOLS_API ~Field();
+
+    /**
+     * @brief Returns a pointer of corresponding field. If field did not exist, it is set to defaultValue if defaultValue is not null.
+     * @param[in] name Field name
+     * @param[in] defaultValue default return value if field was not found
+     * @return pointer to corresponding field.
+     */
+    template< typename DATA_TYPE >
+    SPTR(DATA_TYPE) setDefaultField( const ::fwData::Object::FieldNameType& name, SPTR(DATA_TYPE) defaultValue );
+
+    /**
+     * @brief Register field with specified name. If the name does already exist, the matching field will be replaced.
+     */
+    FWDATATOOLS_API void setField( const ::fwData::Object::FieldNameType& name, ::fwData::Object::sptr obj );
+
+    /**
+     * @brief Replace the field map content.
+     */
+    FWDATATOOLS_API void setFields( const ::fwData::Object::FieldMapType& newFields );
+
+    /**
+     * @brief Updates the field map content with fieldMap. Duplicated name will be replaced.
+     */
+    FWDATATOOLS_API void updateFields( const ::fwData::Object::FieldMapType& fieldMap );
+
+    /**
+     * @brief Removes field with specified name.
+     */
+    FWDATATOOLS_API void removeField( const ::fwData::Object::FieldNameType& name );
+
+    /// Send the built message
+    FWDATATOOLS_API void notify();
+
+protected:
+    FWDATATOOLS_API void buildMessage(
+        const ::fwData::Object::FieldMapType& oldFields,
+        const ::fwData::Object::FieldMapType& newFields
+        );
+
+    /// Map of added objects, send on notify
+    ::fwData::Object::FieldsContainerType m_addedFields;
+    /// Map of new changed objects, send on notify
+    ::fwData::Object::FieldsContainerType m_newChangedFields;
+    /// Map of old changed objects, send on notify
+    ::fwData::Object::FieldsContainerType m_oldChangedFields;
+    /// Map of removed objects, send on notify
+    ::fwData::Object::FieldsContainerType m_removedFields;
+    /// Composite to add/remove/change objects
+
+    ::fwData::Object::wptr m_object;
+};
+
+
+
+template<typename DATA_TYPE>
+inline SPTR(DATA_TYPE) Field::setDefaultField(const fwData::Object::FieldNameType& name, SPTR(DATA_TYPE) defaultValue)
+{
+    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
+    ::fwData::Object::sptr object = m_object.lock();
+    ::fwData::Object::sptr field  = object->getField(name);
+    if (!field)
+    {
+        m_addedFields[name] = defaultValue;
+    }
+    return object->setDefaultField(name, defaultValue);
+}
+
+} // namespace helper
+} // namespace fwDataTools
+
+#endif // __FWDATATOOLS_HELPER_FIELD_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Image.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Image.hpp
new file mode 100644
index 0000000..cbaaa2b
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Image.hpp
@@ -0,0 +1,104 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_IMAGE_HPP__
+#define __FWDATATOOLS_HELPER_IMAGE_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+/**
+ * @brief   Defines an helper to modify an ::fwData::Image by adding few medical fields
+ * and create in parallel the message to announce these modifications.
+ */
+class FWDATATOOLS_CLASS_API Image
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro((Image), (((::fwData::Image::sptr))), new Image );
+
+    typedef ::fwData::Image::SizeType SizeType;
+    typedef ::fwData::Image::IndexType IndexType;
+    typedef ::fwData::Image::BufferType BufferType;
+    typedef ::fwData::Image::BufferIndexType BufferIndexType;
+
+    /// Constructor. Initialize parameters.
+    FWDATATOOLS_API Image( ::fwData::Image::sptr image );
+
+    /// Destrucotr. Do nothing.
+    FWDATATOOLS_API virtual ~Image();
+
+    /**
+     * @brief Create landmark fields if not exist, NOT GENERATE MESSAGE.
+     *
+     * If the image hasn't landmark field, it is added and the method return true.
+     *
+     * @return true if the field is added.
+     */
+    FWDATATOOLS_API bool createLandmarks();
+
+    /**
+     * @brief Create transfer function pool if the pool is not present, NOT GENERATE MESSAGE.
+     *
+     * If the image has not transfer functions, the pool is
+     * created and a grey level transfer function is added.
+     */
+    FWDATATOOLS_API bool createTransferFunctionPool();
+
+    /**
+     * @brief Create slice index if indexes are not present, NOT GENERATE MESSAGE.
+     *
+     * If the image hasn't frontal, axial and sagittal slice index fields, they are added.
+     *
+     * @return true if the fields are added.
+     */
+    FWDATATOOLS_API bool createImageSliceIndex();
+
+    /// Send the message of modification
+    FWDATATOOLS_API void notify();
+
+    /// Returns image buffer
+    FWDATATOOLS_API void* getBuffer();
+
+    /** @{
+     * @brief Helpers for 3D images
+     */
+    FWDATATOOLS_API void* getPixelBuffer( SizeType::value_type x, SizeType::value_type y, SizeType::value_type z );
+
+    FWDATATOOLS_API void* getPixelBuffer( IndexType index );
+
+    FWDATATOOLS_API void setPixelBuffer( IndexType index, Image::BufferType* pixBuf);
+
+    FWDATATOOLS_API const std::string getPixelAsString(SizeType::value_type x,
+                                                       SizeType::value_type y,
+                                                       SizeType::value_type z );
+    // @}
+
+    /// Returns a copy of current lock on image
+    FWDATATOOLS_API ::fwMemory::BufferObject::Lock getLock() const;
+
+private:
+
+    ::fwData::Image::sptr m_image;
+
+    ::fwMemory::BufferObject::Lock m_lock;
+
+    /// modification flags
+    bool m_sliceModified;
+};
+
+} // helper
+} // fwDataTools
+
+
+#endif // __FWDATATOOLS_HELPER_IMAGE_HPP__
+
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/ImageGetter.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/ImageGetter.hpp
new file mode 100644
index 0000000..a6d017f
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/ImageGetter.hpp
@@ -0,0 +1,65 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_IMAGEGETTER_HPP__
+#define __FWDATATOOLS_HELPER_IMAGEGETTER_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+/**
+ * @brief   Defines an helper to modify an ::fwData::Image by adding few medical fields
+ * and create in parallel the message to announce these modifications.
+ */
+class FWDATATOOLS_CLASS_API ImageGetter
+{
+
+public:
+    typedef ::fwData::Image::SizeType SizeType;
+    typedef ::fwData::Image::IndexType IndexType;
+    typedef ::fwData::Image::BufferType BufferType;
+    typedef ::fwData::Image::BufferIndexType BufferIndexType;
+
+    /// Constructor. Initialize parameters.
+    FWDATATOOLS_API ImageGetter( ::fwData::Image::csptr image );
+
+    /// Destrucotr. Do nothing.
+    FWDATATOOLS_API virtual ~ImageGetter();
+
+    /// Returns image buffer
+    FWDATATOOLS_API void* getBuffer() const;
+
+    /** @{
+     * @brief Helpers for 3D images
+     */
+    FWDATATOOLS_API void* getPixelBuffer( SizeType::value_type x, SizeType::value_type y,
+                                          SizeType::value_type z ) const;
+
+    FWDATATOOLS_API void* getPixelBuffer( IndexType index ) const;
+
+    FWDATATOOLS_API const std::string getPixelAsString(SizeType::value_type x,
+                                                       SizeType::value_type y,
+                                                       SizeType::value_type z ) const;
+    // @}
+
+private:
+
+    ::fwData::Image::csptr m_image;
+
+    ::fwMemory::BufferObject::Lock m_lock;
+};
+
+} // helper
+} // fwDataTools
+
+#endif // __FWDATATOOLS_HELPER_IMAGEGETTER_HPP__
+
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/MedicalImageAdaptor.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/MedicalImageAdaptor.hpp
new file mode 100644
index 0000000..49ae0c3
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/MedicalImageAdaptor.hpp
@@ -0,0 +1,406 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_MEDICALIMAGEADAPTOR_HPP__
+#define __FWDATATOOLS_HELPER_MEDICALIMAGEADAPTOR_HPP__
+
+#include "fwDataTools/helper/ImageGetter.hpp"
+#include "fwDataTools/config.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/String.hpp>
+#include <fwData/TransferFunction.hpp>
+
+// We could skip this dependency to runtime by using a pTree
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <vector>
+
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+/**
+ * @brief   Helpers for medical image.
+ */
+class FWDATATOOLS_CLASS_API MedicalImageAdaptor
+{
+
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (MedicalImageAdaptor) );
+
+
+    /// Image orientation
+    typedef enum
+    {
+        X_AXIS = 0,
+        Y_AXIS,
+        Z_AXIS
+    } Orientation;
+
+    /// Destructor. Do nothing.
+    FWDATATOOLS_API virtual ~MedicalImageAdaptor();
+
+    /// Set the image orientation.
+    FWDATATOOLS_API virtual void setOrientation( Orientation orientation );
+
+    /// Return the image orientation.
+    Orientation getOrientation() const
+    {
+        return m_orientation;
+    }
+
+    /// Set TF Selection fwID
+    FWDATATOOLS_API void setTFSelectionFwID( const std::string& fwid );
+
+    /// Get TF Selection fwID
+    FWDATATOOLS_API const std::string& getTFSelectionFwID() const;
+
+    /// Set TF Selection fwID
+    FWDATATOOLS_API void setTransferFunctionSelection( ::fwData::Composite::wptr selection );
+
+    /// Set selected TF Key
+    FWDATATOOLS_API void setSelectedTFKey( const std::string& key );
+
+    /// Get selected TF Key
+    FWDATATOOLS_API const std::string& getSelectedTFKey() const;
+
+    /// Set selected TF Key and TF Selection fwID from config
+    FWDATATOOLS_API void parseTFConfig( ::fwRuntime::ConfigurationElement::sptr configuration );
+
+    /// Get the window of the selected tf
+    FWDATATOOLS_API double getWindow() const;
+
+    /// Set the window of the selected tf
+    FWDATATOOLS_API void setWindow( double window );
+
+    /// Set the window level of the selected tf from window min/max
+    FWDATATOOLS_API void setWindowLevel( double windowMin, double windowMax );
+
+    /// Get the level of the selected tf
+    FWDATATOOLS_API double getLevel() const;
+
+    /// Set the level of the selected tf
+    FWDATATOOLS_API void setLevel( double level );
+
+protected:
+
+
+    /// Constructor. Do nothing.
+    FWDATATOOLS_API MedicalImageAdaptor(); // this class VISUVTKADAPTOR_CLASS_API must be specialized
+
+    /**
+     * @brief Set the orientation of the image.
+     * @param[in] orientation must be 0 (X_AXIS), 1 (Y_AXIS) or 2 (Z_AXIS).
+     */
+    FWDATATOOLS_API void setOrientation( int orientation );
+
+    /**
+     * @brief Get the image spacing.
+     * @param[out] spacing : the image spacing
+     */
+    FWDATATOOLS_API void getImageSpacing(double spacing[3]);
+
+    /**
+     * @brief Get the image origin.
+     * @param[out] origin : the image origin
+     */
+    FWDATATOOLS_API void getImageOrigin(double origin[3]);
+
+    /**
+     * @brief Get the image data size (number of slices).
+     * @param[out] size : the image size
+     */
+    FWDATATOOLS_API void getImageDataSize(int size[3]);
+
+    /**
+     * @brief Get the image size ( = dataSize * spacing ).
+     * @param[out] size : the image size
+     */
+    FWDATATOOLS_API void getImageSize(double size[3]);
+
+    /**
+     * @brief Get the slice center
+     * @param[out] center : the slice center
+     */
+    FWDATATOOLS_API void getCurrentSliceCenter(double center[3]);
+
+    // Retrieve the grey level from an image from physical world
+    //float getPixelvalue( double worldPosition[3]);
+
+    /**
+     * @brief Convert world coordinates to slice index coordinates
+     * @param[in] world : coordinate in the world
+     * @param[out] index : coordinate in the slice index
+     */
+    FWDATATOOLS_API void worldToSliceIndex(const double world[3],int index[3] );
+
+    /**
+     * @brief Convert coordinates in the world to coordinates in the image
+     * @param[in] world : coordinate in the world
+     * @param[out] index : coordinate in the image
+     */
+    FWDATATOOLS_API void worldToImageSliceIndex(const double world[3], int index[3] );
+
+    /**
+     * @brief Convert from world coordinates system to image coordinates system
+     * @param[in] index : coordinate in the image
+     * @param[out] world : coordinate in the world
+     */
+    FWDATATOOLS_API void sliceIndexToWorld(const int index[3], double world[3] );
+
+    /**
+     * @brief Get the image spacing.
+     * @param[out] spacing : the image spacing
+     */
+    template< typename FLOAT_ARRAY_3 >
+    void getImageSpacing(FLOAT_ARRAY_3 spacing);
+
+    /**
+     * @brief Get the image data size (number of slices).
+     * @param[out] size : the image size
+     */
+    template< typename INT_INDEX >
+    void getImageDataSize(INT_INDEX size);
+
+    /**
+     * @brief Convert world coordinates to slice index coordinates
+     * @param[in] world : coordinate in the world
+     * @param[out] index : coordinate in the slice index
+     */
+    template< typename WORLD, typename INT_INDEX >
+    void worldToSliceIndex(const WORLD world, INT_INDEX index );
+
+    /**
+     * @brief Convert coordinates in the world to coordinates in the image
+     * @param[in] world : coordinate in the world
+     * @param[out] index : coordinate in the image
+     */
+    template< typename WORLD, typename INT_INDEX >
+    void worldToImageSliceIndex(const WORLD world, INT_INDEX index );
+
+
+
+
+    /**
+     * @brief Return the 4 points of the image plane
+     *
+     * - points are ordered in the following way : image origin is the first point
+     * - points are inserted using the preference follow X axis if exists, if not exists follow Y axis
+     * if Y axis is not present follow Z axis
+     */
+    FWDATATOOLS_API void getPlane( double points[4][3], int sliceNumber );
+
+    /// Set the slice index
+    FWDATATOOLS_API bool setSliceIndex(const int index[3]);
+    /// Get the slice index
+    FWDATATOOLS_API void getSliceIndex(::fwData::Integer::sptr index[3]);
+
+    /// Get the current transfer function
+    FWDATATOOLS_API ::fwData::TransferFunction::sptr getTransferFunction() const;
+
+    /// Get the current transfer function selection
+    FWDATATOOLS_API ::fwData::Composite::sptr getTransferFunctionSelection() const;
+
+    /// Update the image information (slice index, min/max,...)
+    FWDATATOOLS_API void updateImageInfos( ::fwData::Image::sptr image  );
+
+    /// Update the transfer function information
+    FWDATATOOLS_API void updateTransferFunction( ::fwData::Image::sptr image );
+
+    /// Return the image
+    FWDATATOOLS_API ::fwData::Image::sptr getImage();
+
+    /// Image orientation
+    Orientation m_orientation;
+
+    /// Current image
+    ::fwData::Image::wptr m_weakImage;
+
+    /// Axial slice index
+    ::fwData::Integer::sptr m_axialIndex;
+    /// Frontal slice index
+    ::fwData::Integer::sptr m_frontalIndex;
+    /// Sagittal slice index
+    ::fwData::Integer::sptr m_sagittalIndex;
+
+    /**
+     * @name Connections to transfer function
+     * @{
+     */
+
+    /// Install connections to listen TF modifications
+    FWDATATOOLS_API void installTFConnections();
+
+    /// Remove the TF connections
+    FWDATATOOLS_API void removeTFConnections();
+
+    /**
+     *  @brief Called when transfer function points are modified.
+     *
+     *  It must be reimplemented to upadte TF.
+     */
+    FWDATATOOLS_API virtual void updatingTFPoints();
+
+    /**
+     *  @brief Called when transfer function windowing is modified.
+     *
+     *  It must be reimplemented to upadte TF.
+     */
+    FWDATATOOLS_API virtual void updatingTFWindowing(double window, double level);
+
+    /**
+     * @brief Install the slots to managed TF modifications.
+     *
+     * Creates slots to listen TF selection Composite and TransferFunction signals.
+     *
+     * @warning It must be called in the service constructor
+     */
+    FWDATATOOLS_API void installTFSlots(::fwCom::HasSlots* hasslots);
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects, ::fwData::Composite::ContainerType oldObjects);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: called when transfer function points are modified
+    void updateTFPoints();
+
+    /// Slot: called when transfer function windowing is modified
+    void updateTFWindowing(double window, double level);
+
+    typedef ::fwCom::Slot<void (::fwData::Composite::ContainerType)> AddedObjectsSlotType;
+    typedef ::fwCom::Slot<void (::fwData::Composite::ContainerType,
+                                ::fwData::Composite::ContainerType)> ChangedObjectsSlotType;
+    typedef ::fwCom::Slot<void (::fwData::Composite::ContainerType)> RemovedObjectsSlotType;
+    typedef ::fwCom::Slot<void ()> UpdateTFPointsSlotType;
+    typedef ::fwCom::Slot<void (double, double)> UpdateTFWindowingSlotType;
+
+    /// Slot called when objects are added into the composite
+    AddedObjectsSlotType::sptr m_slotAddedObjects;
+
+    /// Slot called when objects are changed into the composite
+    ChangedObjectsSlotType::sptr m_slotChangedObjects;
+
+    /// Slot called when objects are removed from the composite
+    RemovedObjectsSlotType::sptr m_slotRemovedObjects;
+
+    /// Slot called when transfer function points are modified
+    UpdateTFPointsSlotType::sptr m_slotUpdateTFPoints;
+
+    /// Slot called when transfer function windowing is modified
+    UpdateTFWindowingSlotType::sptr m_slotUpdateTFWindowing;
+    /**
+     * @}
+     */
+
+private:
+
+    ::fwCom::helper::SigSlotConnection m_tfSelectionConnections;
+    ::fwCom::helper::SigSlotConnection m_tfConnections;
+
+    /// Transfer function selection
+    ::fwData::Composite::wptr m_tfSelection;
+
+    /// fwID of tf selections ( used during configuration )
+    std::string m_tfSelectionFwID;
+
+    /// Identifier of the key containing the current selection of TransferFunction in TFSelection
+    std::string m_selectedTFKey;
+};
+
+struct Image0 {};
+struct Image1 {};
+
+template < typename IMAGEID >
+class FWDATATOOLS_CLASS_API MedicalImageAdaptorTpl : public MedicalImageAdaptor
+{
+};
+
+typedef MedicalImageAdaptorTpl<Image0> MedicalImageAdaptorImg0;
+typedef MedicalImageAdaptorTpl<Image1> MedicalImageAdaptorImg1;
+
+
+//------------------------------------------------------------------------------
+template< typename FLOAT_ARRAY_3 >
+void MedicalImageAdaptor::getImageSpacing(FLOAT_ARRAY_3 spacing)
+{
+    ::fwData::Image::sptr image = this->getImage();
+
+    const ::fwData::Image::SpacingType imSpacing = image->getSpacing();
+    std::copy(imSpacing.begin(), imSpacing.end(), spacing);
+}
+
+//------------------------------------------------------------------------------
+template< typename INT_INDEX >
+void MedicalImageAdaptor::getImageDataSize(INT_INDEX size)
+{
+    ::fwData::Image::sptr image = this->getImage();
+
+    const ::fwData::Image::SizeType imSize = image->getSize();
+    std::copy(imSize.begin(), imSize.end(), size);
+}
+
+//------------------------------------------------------------------------------
+
+template< typename WORLD, typename INT_INDEX >
+void MedicalImageAdaptor::worldToSliceIndex(const WORLD world, INT_INDEX index )
+{
+    double spacing[3];
+    this->getImageSpacing(spacing);
+    double origin[3];
+    this->getImageOrigin(origin);
+    for ( int i = 0; i<3; ++i )
+    {
+        index[i] =
+            static_cast< int >( ( (world[i] - origin[i])/spacing[i] ) +
+                                ( ( (world[i] - origin[i])/spacing[i] ) >= 0 ? 0.5 : -0.5 ) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+template< typename WORLD, typename INT_INDEX >
+void MedicalImageAdaptor::worldToImageSliceIndex(const WORLD world, INT_INDEX index )
+{
+    int imageSize[3];
+    this->getImageDataSize(imageSize);
+    this->worldToSliceIndex(world, index);
+
+    int idval;
+    for (int i = 0; i < 3; i++)
+    {
+        int max = imageSize[i]-1;
+        idval = index[i];
+        if (idval < 0)
+        {
+            index[i] = 0;
+        }
+        else if (idval > max)
+        {
+            index[i] = max;
+        }
+    }
+}
+
+} //namespace helper
+
+} //namespace fwDataTools
+
+#endif // __FWDATATOOLS_HELPER_MEDICALIMAGEADAPTOR_HPP__
+
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Mesh.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Mesh.hpp
new file mode 100644
index 0000000..ad6aca2
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Mesh.hpp
@@ -0,0 +1,257 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_MESH_HPP__
+#define __FWDATATOOLS_HELPER_MESH_HPP__
+
+#include "fwDataTools/config.hpp"
+#include "fwDataTools/helper/Array.hpp"
+
+#include <fwData/Mesh.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/Type.hpp>
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+/**
+ * @brief   Helper to manage Mesh. Lock the mesh buffer before to modify it.
+ */
+class FWDATATOOLS_CLASS_API Mesh
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro((Mesh), (((::fwData::Mesh::sptr))), new Mesh );
+
+    FWDATATOOLS_API Mesh( ::fwData::Mesh::sptr mesh );
+
+    FWDATATOOLS_API virtual ~Mesh();
+
+    /// Updates locks on all internal data Array of Mesh
+    FWDATATOOLS_API void updateLock();
+
+    /**
+     * @brief Insert a point into the mesh.
+     * Reallocates the point array if needed.
+     *
+     * @param p point coordinates
+     *
+     * @return The id of the new point
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API  ::fwData::Mesh::Id insertNextPoint(const ::fwData::Mesh::PointValueType p[3])
+    throw(::fwData::Exception);
+
+    /**
+     * @brief Insert a point into the mesh.
+     * @see insertNextPoint
+     */
+    FWDATATOOLS_API ::fwData::Mesh::Id insertNextPoint(::fwData::Mesh::PointValueType x,
+                                                       ::fwData::Mesh::PointValueType y,
+                                                       ::fwData::Mesh::PointValueType z) throw(::fwData::Exception);
+
+    /**
+     * @brief Set a point coordinates.
+     * The mesh must be allocated before calling this method.
+     *
+     * @param id point index
+     * @param p point coordinates
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setPoint(::fwData::Mesh::Id id, const ::fwData::Mesh::PointValueType p[3]);
+
+    /**
+     * @brief Set a point coordinates.
+     * @see setPoint
+     */
+    FWDATATOOLS_API void setPoint(::fwData::Mesh::Id id,
+                                  ::fwData::Mesh::PointValueType x,
+                                  ::fwData::Mesh::PointValueType y,
+                                  ::fwData::Mesh::PointValueType z);
+
+    /**
+     * @brief Set a point color.
+     *
+     * Depending on the type of allocated point-colors array (RGB or RGBA), 3
+     * or 4 points will be read from p.
+     * The color array must be allocated before calling this method.
+     *
+     * @param id point index
+     * @param c color
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setPointColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4]);
+
+    /**
+     * @brief Set a cell color.
+     *
+     * Depending on the type of allocated cell-colors array (RGB or RGBA), 3 or
+     * 4 points will be read from p.
+     * The color array must be allocated before calling this method.
+     *
+     * @param id cell index
+     * @param c color
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setCellColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4]);
+
+    /**
+     * @brief Set a point normal.
+     *
+     * The normal array must be allocated before calling this method.
+     *
+     * @param id point index
+     * @param n normal
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setPointNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3]);
+
+    /**
+     * @brief Set a cell normal.
+     *
+     * The normal array must be allocated before calling this method.
+     *
+     * @param id cell index
+     * @param n normal
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setCellNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3]);
+
+    /**
+     * @brief Set a point texCoord.
+     *
+     * The texCoord array must be allocated before calling this method.
+     *
+     * @param id point index
+     * @param t texCoord
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setPointTexCoord(::fwData::Mesh::Id id, const ::fwData::Mesh::TexCoordValueType t[2]);
+
+    /**
+     * @brief Set a cell texCoord.
+     *
+     * The texCoord array must be allocated before calling this method.
+     *
+     * @param id cell index
+     * @param t texCoord
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API void setCellTexCoord(::fwData::Mesh::Id id, const ::fwData::Mesh::TexCoordValueType t[2]);
+
+    /**
+     * @brief Insert a cell into the mesh.
+     *
+     * Reallocates the mesh concerned arrays if needed.
+     *
+     * @return The id of the new cell
+     *
+     * @throw ::fwData::Exception
+     */
+    FWDATATOOLS_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellTypesEnum type,
+                                                      const ::fwData::Mesh::CellValueType* cell,
+                                                      size_t nb ) throw(::fwData::Exception);
+    /**
+     * @brief Insert a cell into the mesh.
+     * @see insertNextCell
+     */
+    FWDATATOOLS_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p)  throw(::fwData::Exception);
+    /**
+     * @brief Insert a cell into the mesh.
+     * @see insertNextCell
+     */
+    FWDATATOOLS_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p1,
+                                                      ::fwData::Mesh::CellValueType p2 ) throw(::fwData::Exception);
+    /**
+     * @brief Insert a cell into the mesh.
+     * @see insertNextCell
+     */
+    FWDATATOOLS_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p1,
+                                                      ::fwData::Mesh::CellValueType p2,
+                                                      ::fwData::Mesh::CellValueType p3 ) throw(::fwData::Exception);
+    /**
+     * @brief Insert a cell into the mesh.
+     * @see insertNextCell
+     */
+    FWDATATOOLS_API ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellValueType p1,
+                                                      ::fwData::Mesh::CellValueType p2,
+                                                      ::fwData::Mesh::CellValueType p3,
+                                                      ::fwData::Mesh::CellValueType p4 ) throw(::fwData::Exception);
+    /**
+     * @brief Insert a cell into the mesh.
+     * @see insertNextCell
+     */
+    template <typename T> ::fwData::Mesh::Id insertNextCell(::fwData::Mesh::CellTypesEnum type,
+                                                            const T& pointsBegin,
+                                                            const T& pointsEnd ) throw(::fwData::Exception);
+
+
+
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::PointsMultiArrayType          getPoints() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::CellTypesMultiArrayType       getCellTypes() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::CellDataMultiArrayType        getCellData() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::CellDataOffsetsMultiArrayType getCellDataOffsets() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::PointColorsMultiArrayType     getPointColors() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::CellColorsMultiArrayType      getCellColors() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::PointNormalsMultiArrayType    getPointNormals() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::CellNormalsMultiArrayType     getCellNormals() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::PointTexCoordsMultiArrayType  getPointTexCoords() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::CellTexCoordsMultiArrayType   getCellTexCoords() const;
+
+    /// Returns the internal ::fwData::Mesh
+    FWDATATOOLS_API ::fwData::Mesh::csptr getMesh() const;
+
+    /*!
+     * @brief Return true if the mesh is closed.
+     * The result is computed for each call.
+     */
+    FWDATATOOLS_API bool isClosed();
+
+protected:
+
+    ::fwData::Mesh::sptr m_mesh;
+
+    ::fwDataTools::helper::Array::sptr m_helperPoints;
+    ::fwDataTools::helper::Array::sptr m_helperCellTypes;
+    ::fwDataTools::helper::Array::sptr m_helperCellData;
+    ::fwDataTools::helper::Array::sptr m_helperCellDataOffsets;
+    ::fwDataTools::helper::Array::sptr m_helperPointColors;
+    ::fwDataTools::helper::Array::sptr m_helperCellColors;
+    ::fwDataTools::helper::Array::sptr m_helperPointNormals;
+    ::fwDataTools::helper::Array::sptr m_helperCellNormals;
+    ::fwDataTools::helper::Array::sptr m_helperPointTexCoords;
+    ::fwDataTools::helper::Array::sptr m_helperCellTexCoords;
+
+};
+
+
+} // namespace helper
+
+} // namespace fwData
+
+#endif // __FWDATATOOLS_HELPER_MESH_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/MeshGetter.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/MeshGetter.hpp
new file mode 100644
index 0000000..f9e9802
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/MeshGetter.hpp
@@ -0,0 +1,87 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_MESHGETTER_HPP__
+#define __FWDATATOOLS_HELPER_MESHGETTER_HPP__
+
+#include "fwDataTools/config.hpp"
+#include "fwDataTools/helper/ArrayGetter.hpp"
+
+#include <fwData/Mesh.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/Type.hpp>
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+/**
+ * @brief   Helper to manage Mesh. Lock the mesh buffer before to modify it.
+ */
+class FWDATATOOLS_CLASS_API MeshGetter
+{
+public:
+    FWDATATOOLS_API MeshGetter( ::fwData::Mesh::csptr mesh );
+
+    FWDATATOOLS_API virtual ~MeshGetter();
+
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstPointsMultiArrayType          getPoints() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstCellTypesMultiArrayType       getCellTypes() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstCellDataMultiArrayType        getCellData() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstCellDataOffsetsMultiArrayType getCellDataOffsets() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstPointColorsMultiArrayType     getPointColors() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstCellColorsMultiArrayType      getCellColors() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstPointNormalsMultiArrayType    getPointNormals() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstCellNormalsMultiArrayType     getCellNormals() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstPointTexCoordsMultiArrayType  getPointTexCoords() const;
+    /// Returns the internal corresponding array as a boost::multi_array_ref
+    FWDATATOOLS_API ::fwData::Mesh::ConstCellTexCoordsMultiArrayType   getCellTexCoords() const;
+
+    /// Returns the internal ::fwData::Mesh
+    FWDATATOOLS_API ::fwData::Mesh::csptr getMesh() const;
+
+    /*!
+     * @brief Return true if the mesh is closed.
+     * The result is computed for each call.
+     */
+    FWDATATOOLS_API bool isClosed();
+
+protected:
+
+    ::fwData::Mesh::csptr m_mesh;
+
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperPoints;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperCellTypes;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperCellData;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperCellDataOffsets;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperPointColors;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperCellColors;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperPointNormals;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperCellNormals;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperPointTexCoords;
+    ::fwDataTools::helper::ArrayGetter::uptr m_helperCellTexCoords;
+
+};
+
+
+} // namespace helper
+
+} // namespace fwData
+
+#endif // __FWDATATOOLS_HELPER_MESHGETTER_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Namespace.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Namespace.hpp
new file mode 100644
index 0000000..bade2ec
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_NAMESPACE_HPP__
+#define __FWDATATOOLS_HELPER_NAMESPACE_HPP__
+
+namespace fwDataTools
+{
+/**
+ * @brief    This namespace fwDataTools::helper contains several helpers for using data like Image, Composite, Message.
+ */
+namespace helper
+{
+}
+
+}
+#endif /* __FWDATATOOLS_HELPER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/helper/Vector.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Vector.hpp
new file mode 100644
index 0000000..696c097
--- /dev/null
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/helper/Vector.hpp
@@ -0,0 +1,69 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_HELPER_VECTOR_HPP__
+#define __FWDATATOOLS_HELPER_VECTOR_HPP__
+
+#include "fwDataTools/config.hpp"
+
+#include <fwData/Vector.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+/**
+ * @brief   Defines an helper to modify an ::fwData::Vector and create in parallel the message to announce this modification.
+ */
+class FWDATATOOLS_CLASS_API Vector
+{
+
+public:
+
+    /// Constructor. Initialize parameters.
+    FWDATATOOLS_API Vector( ::fwData::Vector::wptr vector );
+
+    /// Destrucotr. Do nothing.
+    FWDATATOOLS_API ~Vector();
+
+    /**
+     * @brief Add an object in the vector.
+     * @param[in] _newObject    object to add in the vector
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWDATATOOLS_API void add( ::fwData::Object::sptr _newObject );
+
+    /**
+     * @brief Remove an object in the vector.
+     * @param[in] _oldObject object to remove from the vector.
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWDATATOOLS_API void remove( ::fwData::Object::sptr _oldObject );
+
+    /**
+     * @brief Clear all objects in the vector.
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWDATATOOLS_API void clear();
+
+    /// Send the signal of modification
+    FWDATATOOLS_API void notify();
+
+private:
+
+    ::fwData::Vector::ContainerType m_addedObjects;
+    ::fwData::Vector::ContainerType m_removedObjects;
+    ::fwData::Vector::wptr m_vector;
+};
+
+} // namespace helper
+} // namespace fwDataTools
+
+#endif // __FWDATATOOLS_HELPER_VECTOR_HPP__
diff --git a/SrcLib/core/fwDataTools/include/fwDataTools/thread/RegionThreader.hpp b/SrcLib/core/fwDataTools/include/fwDataTools/thread/RegionThreader.hpp
index c4ad892..e80eba2 100644
--- a/SrcLib/core/fwDataTools/include/fwDataTools/thread/RegionThreader.hpp
+++ b/SrcLib/core/fwDataTools/include/fwDataTools/thread/RegionThreader.hpp
@@ -1,20 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_THREAD_REGIONTHREADER_HPP_
-#define _FWDATATOOLS_THREAD_REGIONTHREADER_HPP_
+#ifndef __FWDATATOOLS_THREAD_REGIONTHREADER_HPP__
+#define __FWDATATOOLS_THREAD_REGIONTHREADER_HPP__
 
 #include <algorithm>
 #include <cstddef>
 #include <limits>
-
-#include <boost/bind.hpp>
-#include <boost/foreach.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/thread.hpp>
+#include <thread>
+#include <vector>
 
 namespace fwDataTools
 {
@@ -29,29 +26,33 @@ class RegionThreader
 public:
 
     RegionThreader()
-        : m_nbThread( (::boost::thread::hardware_concurrency() > 1) ? ::boost::thread::hardware_concurrency() : 1 )
-    {}
+        : m_nbThread( (std::thread::hardware_concurrency() > 1) ? std::thread::hardware_concurrency() : 1 )
+    {
+    }
 
     RegionThreader(size_t nbThread, bool capped = true)
-        : m_nbThread( std::min( capped ? ::boost::thread::hardware_concurrency() : std::numeric_limits<size_t>::max() , (nbThread > 1) ? nbThread : 1) )
-    {}
+        : m_nbThread( std::min( capped ? std::thread::hardware_concurrency() : std::numeric_limits<size_t>::max(),
+                                (nbThread > 1) ? nbThread : 1) )
+    {
+    }
 
     template<typename T> void operator()(T func, const size_t dataSize)
     {
-        std::vector< ::boost::thread* > threads;
+        std::vector< std::thread* > threads;
 
-        const size_t step = (dataSize / m_nbThread) + 1;
+        const size_t step  = (dataSize / m_nbThread) + 1;
         size_t regionBegin = 0;
-        size_t threadId = 0;
+        size_t threadId    = 0;
 
         if (m_nbThread > 1)
         {
             for (; regionBegin < dataSize; regionBegin += step, ++threadId)
             {
-                threads.push_back(new ::boost::thread(func, regionBegin, std::min( dataSize,  regionBegin + step), threadId ));
+                threads.push_back(new std::thread(func, regionBegin, std::min( dataSize,  regionBegin + step),
+                                                  threadId ));
             }
 
-            BOOST_FOREACH( ::boost::thread *thread, threads)
+            for( std::thread *thread: threads)
             {
                 thread->join();
                 delete thread;
@@ -64,7 +65,10 @@ public:
         }
     }
 
-    size_t numberOfThread() { return m_nbThread; };
+    size_t numberOfThread()
+    {
+        return m_nbThread;
+    }
 
 protected:
 
@@ -76,5 +80,5 @@ protected:
 }   // namespace fwDataTools
 
 
-#endif //_FWDATATOOLS_THREAD_REGIONTHREADER_HPP_
+#endif //__FWDATATOOLS_THREAD_REGIONTHREADER_HPP__
 
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/AlgoMeshDeformation.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/AlgoMeshDeformation.cpp
index 2d0ad63..d1eb654 100644
--- a/SrcLib/core/fwDataTools/src/fwDataTools/AlgoMeshDeformation.cpp
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/AlgoMeshDeformation.cpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwDataTools/AlgoMeshDeformation.hpp"
 
-#include <fwTools/NumericRoundCast.hxx>
+#include "fwDataTools/Mesh.hpp"
+#include <fwDataTools/helper/Array.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwTools/NumericRoundCast.hxx>
 
-#include "fwDataTools/AlgoMeshDeformation.hpp"
-#include "fwDataTools/Mesh.hpp"
 
 namespace fwDataTools
 {
@@ -19,42 +18,44 @@ namespace fwDataTools
 //-----------------------------------------------------------------------------
 
 AlgoMeshDeformation::AlgoMeshDeformation() throw() :
-        m_amplitude(40),
-        m_step(0),
-        m_direction(1),
-        m_nbPoints(0),
-        m_nbCells(0),
-        m_yCenter(0),
-        m_nbStep(0)
-{}
+    m_amplitude(40),
+    m_step(0),
+    m_direction(1),
+    m_nbPoints(0),
+    m_nbCells(0),
+    m_yCenter(0),
+    m_nbStep(0)
+{
+}
 
 //-----------------------------------------------------------------------------
 
 AlgoMeshDeformation::~AlgoMeshDeformation() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void AlgoMeshDeformation::setParam(
-            ::fwData::Mesh::sptr _mesh,
-            const unsigned int _nbStep,
-            const unsigned int _amplitude)
+    ::fwData::Mesh::sptr _mesh,
+    const unsigned int _nbStep,
+    const unsigned int _amplitude)
 {
     SLM_TRACE_FUNC();
-    m_mesh = _mesh;
-    m_nbStep = _nbStep;
+    m_mesh      = _mesh;
+    m_nbStep    = _nbStep;
     m_amplitude = _amplitude;
     m_direction = 1;
 
     m_nbPoints = _mesh->getNumberOfPoints();
-    m_nbCells = _mesh->getNumberOfCells();
+    m_nbCells  = _mesh->getNumberOfCells();
 }
 
 //-----------------------------------------------------------------------------
 
 void AlgoMeshDeformation::computeDeformation( ::fwData::Mesh::sptr _mesh,
-        const unsigned int _nbStep,
-        const unsigned int _amplitude )
+                                              const unsigned int _nbStep,
+                                              const unsigned int _amplitude )
 {
     if (    m_mesh.expired() ||
             m_nbPoints != _mesh->getNumberOfPoints() ||
@@ -76,14 +77,14 @@ void AlgoMeshDeformation::initSimu()
 {
     SLM_TRACE_FUNC();
     m_originPoints = ::fwData::Object::copy( m_mesh.lock()->getPointsArray() );
-    m_step = 0;
+    m_step         = 0;
 
-    if ( ! m_mesh.lock()->getPointColorsArray() )
+    if ( !m_mesh.lock()->getPointColorsArray() )
     {
         ::fwDataTools::Mesh::colorizeMeshPoints( m_mesh.lock() );
     }
 
-    m_meshHelper = ::fwComEd::helper::Mesh::New(m_mesh.lock());
+    m_meshHelper = ::fwDataTools::helper::Mesh::New(m_mesh.lock());
 
     float max = std::numeric_limits<float>::min();
     float min = std::numeric_limits<float>::max();
@@ -93,8 +94,14 @@ void AlgoMeshDeformation::initSimu()
     for(unsigned int i = 0; i < m_nbPoints; ++i)
     {
         coord = points[i][1];
-        if ( coord < min ) { min = coord; }
-        if ( coord > max ) { max = coord; }
+        if ( coord < min )
+        {
+            min = coord;
+        }
+        if ( coord > max )
+        {
+            max = coord;
+        }
     }
 
     m_yCenter = (max - min) / 2 + min;
@@ -105,7 +112,7 @@ void AlgoMeshDeformation::initSimu()
 void AlgoMeshDeformation::computeSimu()
 {
     SLM_TRACE_FUNC();
-    m_step+=m_direction;
+    m_step += m_direction;
     if ( m_step == m_nbStep )
     {
         m_direction = -1;
@@ -117,15 +124,15 @@ void AlgoMeshDeformation::computeSimu()
 
     const float scale = m_step / (float) m_nbStep;
 
-    ::fwComEd::helper::Array originPointsHelper(m_originPoints);
+    ::fwDataTools::helper::Array originPointsHelper(m_originPoints);
 
-    ::fwData::Mesh::PointsMultiArrayType points = m_meshHelper->getPoints();
+    ::fwData::Mesh::PointsMultiArrayType points      = m_meshHelper->getPoints();
     ::fwData::Mesh::PointColorsMultiArrayType colors = m_meshHelper->getPointColors();
 
     ::fwData::Mesh::PointsMultiArrayType opoints =
-            ::fwData::Mesh::PointsMultiArrayType(
+        ::fwData::Mesh::PointsMultiArrayType(
             static_cast< ::fwData::Mesh::PointsMultiArrayType::element* >(originPointsHelper.getBuffer()),
-            boost::extents[m_nbPoints][3] );
+            ::boost::extents[m_nbPoints][3] );
 
     for(unsigned int i = 0; i < m_nbPoints; ++i)
     {
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/Color.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/Color.cpp
new file mode 100644
index 0000000..9a8bc0b
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/Color.cpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/Color.hpp"
+
+#include <fwCore/exceptionmacros.hpp>
+#include "fwCore/spyLog.hpp"
+
+#include <sstream>
+
+namespace fwDataTools
+{
+
+//------------------------------------------------------------------------------
+
+void Color::hexaStringToRGBA( const std::string& _hexaColor, std::uint8_t _rgba[4] )
+{
+    FW_RAISE_IF(
+        "Color string should start with '#' and followed by 6 ou 8 "
+        "hexadecimal digits. Given color : " + _hexaColor,
+        _hexaColor[0] != '#'
+        || ( _hexaColor.length() != 7 && _hexaColor.length() != 9)
+        );
+
+    std::string redString   = _hexaColor.substr(1, 2);
+    std::string greenString = _hexaColor.substr(3, 2);
+    std::string blueString  = _hexaColor.substr(5, 2);
+    int r,g,b,a = 255;
+
+    std::istringstream iss;
+    iss.str (redString);
+    iss >> std::hex >> r;
+    iss.clear();
+    iss.str (greenString);
+    iss >> std::hex >> g;
+    iss.clear();
+    iss.str (blueString);
+    iss >> std::hex >> b;
+
+    _rgba[3] = 255;
+    if (_hexaColor.length() == 9)
+    {
+        std::string alphaString = _hexaColor.substr(7, 2);
+        iss.clear();
+        iss.str (alphaString);
+        iss >> std::hex >> a;
+    }
+
+    _rgba[0] = static_cast< std::uint8_t >(r);
+    _rgba[1] = static_cast< std::uint8_t >(g);
+    _rgba[2] = static_cast< std::uint8_t >(b);
+    _rgba[3] = static_cast< std::uint8_t >(a);
+}
+
+//------------------------------------------------------------------------------
+
+} // end namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/Image.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/Image.cpp
index dea8acb..af60595 100644
--- a/SrcLib/core/fwDataTools/src/fwDataTools/Image.cpp
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/Image.cpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwDataTools/Image.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
+
 #include <fwTools/Combinatory.hpp>
-#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
 #include <fwTools/Dispatcher.hpp>
+#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
 #include <fwTools/IntrinsicTypes.hpp>
 
-#include <fwComEd/helper/Array.hpp>
-
-#include "fwDataTools/Image.hpp"
-
-
 namespace fwDataTools
 {
 
@@ -31,12 +30,12 @@ template<typename IMAGE_TYPE>
 struct RoiApplyer
 {
     template<typename ROI_TYPE>
-    void operator()( RoiApplyerParam & p )
+    void operator()( RoiApplyerParam& p )
     {
         typedef IMAGE_TYPE ImgType;
-        typedef ROI_TYPE   RoiType;
+        typedef ROI_TYPE RoiType;
 
-        SLM_ASSERT( "Null image pointer" , p.img && p.roi);
+        SLM_ASSERT( "Null image pointer", p.img && p.roi);
 
         ::fwData::Array::sptr imgData;
         ::fwData::Array::sptr roiData;
@@ -44,21 +43,21 @@ struct RoiApplyer
         roiData = p.roi->getDataArray();
 
 
-        ::fwComEd::helper::Array imgHelper(imgData);
-        ::fwComEd::helper::Array roiHelper(roiData);
-        SLM_ASSERT( "Null data array pointer" , imgData && roiData);
-        SLM_ASSERT( "Null data buffers" , imgHelper.getBuffer() && roiHelper.getBuffer());
+        ::fwDataTools::helper::Array imgHelper(imgData);
+        ::fwDataTools::helper::Array roiHelper(roiData);
+        SLM_ASSERT( "Null data array pointer", imgData && roiData);
+        SLM_ASSERT( "Null data buffers", imgHelper.getBuffer() && roiHelper.getBuffer());
 
-        ImgType *imIt = imgHelper.begin<ImgType>();
-        RoiType *roiIt = roiHelper.begin<RoiType>();
+        ImgType* imIt  = imgHelper.begin<ImgType>();
+        RoiType* roiIt = roiHelper.begin<RoiType>();
 
-        const ImgType *imEnd = imIt + imgData->getNumberOfElements();
+        const ImgType* imEnd = imIt + imgData->getNumberOfElements();
 
-        for ( ; imIt != imEnd ; ++imIt, ++roiIt)
+        for (; imIt != imEnd; ++imIt, ++roiIt)
         {
             if (*roiIt == 0)
             {
-                *imIt = 0;
+                * imIt = 0;
             }
         }
     }
@@ -69,9 +68,9 @@ struct RoiApplyer
 struct RoiApplyerCaller
 {
     template<typename IMAGE_TYPE>
-    void operator()( RoiApplyerParam & p )
+    void operator()( RoiApplyerParam& p )
     {
-        ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , RoiApplyer<IMAGE_TYPE> >::invoke( p.roi->getPixelType() , p );
+        ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, RoiApplyer<IMAGE_TYPE> >::invoke( p.roi->getPixelType(), p );
     }
 };
 
@@ -89,7 +88,7 @@ void Image::applyRoi( ::fwData::Image::sptr image, ::fwData::Image::sptr roi )
     param.roi = roi;
 
     // Due to link failure, we use two dispatcher calls instead of one with a cross-product type list
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, RoiApplyerCaller >::invoke( image->getPixelType() , param );
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, RoiApplyerCaller >::invoke( image->getPixelType(), param );
 }
 
 
@@ -110,9 +109,9 @@ struct RoiTester
 {
 
     template<typename ROI_TYPE>
-    void operator()( RoiTesterParam & p )
+    void operator()( RoiTesterParam& p )
     {
-        bool &result = p.result;
+        bool& result = p.result;
         result = true;
 
         typedef IMAGE_TYPE ImgType;
@@ -122,24 +121,25 @@ struct RoiTester
         ::fwData::Array::sptr imgRoiApplyedData;
         ::fwData::Array::sptr roiData;
 
-        imgData = p.img->getDataArray();
+        imgData           = p.img->getDataArray();
         imgRoiApplyedData = p.imgRoiApplyed->getDataArray();
-        roiData = p.roi->getDataArray();
+        roiData           = p.roi->getDataArray();
 
-        ::fwComEd::helper::Array imgHelper(imgData);
-        ::fwComEd::helper::Array roiHelper(roiData);
-        ::fwComEd::helper::Array imgRoiApplyedHelper(imgRoiApplyedData);
+        ::fwDataTools::helper::Array imgHelper(imgData);
+        ::fwDataTools::helper::Array roiHelper(roiData);
+        ::fwDataTools::helper::Array imgRoiApplyedHelper(imgRoiApplyedData);
 
         SLM_ASSERT( "Null data array pointer", imgData && roiData && imgRoiApplyedData);
-        SLM_ASSERT( "Null data buffers", imgHelper.getBuffer() && roiHelper.getBuffer() && imgRoiApplyedHelper.getBuffer() );
+        SLM_ASSERT( "Null data buffers",
+                    imgHelper.getBuffer() && roiHelper.getBuffer() && imgRoiApplyedHelper.getBuffer() );
 
-        ImgType *imIt     = imgHelper.begin<ImgType>();
-        ImgType *imRoiIt  = imgRoiApplyedHelper.begin<ImgType>();
-        RoiType *roiIt    = roiHelper.begin<RoiType>();
+        ImgType* imIt    = imgHelper.begin<ImgType>();
+        ImgType* imRoiIt = imgRoiApplyedHelper.begin<ImgType>();
+        RoiType* roiIt   = roiHelper.begin<RoiType>();
 
-        const ImgType *imEnd = imIt + imgData->getNumberOfElements();
+        const ImgType* imEnd = imIt + imgData->getNumberOfElements();
 
-        for ( ; result && imIt != imEnd ; ++imIt, ++roiIt, ++imRoiIt)
+        for (; result && imIt != imEnd; ++imIt, ++roiIt, ++imRoiIt)
         {
             result = result && ( (*roiIt == 0) ? (*imRoiIt == 0) : (*imIt == *imRoiIt) );
         }
@@ -151,9 +151,9 @@ struct RoiTester
 struct RoiTesterCaller
 {
     template<typename IMAGE_TYPE>
-    void operator()( RoiTesterParam & p )
+    void operator()( RoiTesterParam& p )
     {
-        ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , RoiTester<IMAGE_TYPE> >::invoke( p.roi->getPixelType() , p );
+        ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, RoiTester<IMAGE_TYPE> >::invoke( p.roi->getPixelType(), p );
     }
 };
 
@@ -163,15 +163,15 @@ bool Image::isRoiApplyed( ::fwData::Image::sptr image, ::fwData::Image::sptr roi
 {
     SLM_ASSERT( "Null image pointers", image && imgRoiApplyed && roi);
     SLM_ASSERT( "Images have different size",
-            image->getSize() == imgRoiApplyed->getSize() && image->getSize() == roi->getSize());
+                image->getSize() == imgRoiApplyed->getSize() && image->getSize() == roi->getSize());
 
     RoiTesterParam param;
-    param.img = image;
+    param.img           = image;
     param.imgRoiApplyed = imgRoiApplyed;
-    param.roi = roi;
+    param.roi           = roi;
 
     // Due to link failure, we use two dispatcher calls instead of one with a cross-product type list
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, RoiTesterCaller >::invoke( image->getPixelType() , param );
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, RoiTesterCaller >::invoke( image->getPixelType(), param );
 
     return param.result;
 }
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/Mesh.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/Mesh.cpp
index e1585ae..22cf284 100644
--- a/SrcLib/core/fwDataTools/src/fwDataTools/Mesh.cpp
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/Mesh.cpp
@@ -1,23 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/type_traits/make_unsigned.hpp>
-
-#include <map>
-
-#include <cstdlib>
-#include <ctime>
+#include "fwDataTools/Mesh.hpp"
 
-#include <boost/foreach.hpp>
+#include "fwDataTools/thread/RegionThreader.hpp"
 
 #include <fwTools/NumericRoundCast.hxx>
 
-#include "fwDataTools/thread/RegionThreader.hpp"
-#include "fwDataTools/Mesh.hpp"
-
+#include <cstdlib>
+#include <ctime>
+#include <functional>
+#include <map>
 
 namespace fwDataTools
 {
@@ -39,98 +35,13 @@ void Mesh::initRand()
 
 //------------------------------------------------------------------------------
 
-void Mesh::toTriangularMesh(::fwData::Mesh::sptr mesh, ::fwData::TriangularMesh::sptr trian)
-{
-    FW_RAISE_IF("Can't convert this Mesh to TriangularMesh", !Mesh::hasUniqueCellType(mesh, ::fwData::Mesh::TRIANGLE));
-
-    // Clear the container cells and set its capacity to 0
-    trian->clearCells();
-    // Clear the container points and set its capacity to 0
-    trian->clearPoints();
-
-    ::fwComEd::helper::Mesh meshHelper(mesh);
-
-    size_t numberOfPoints = mesh->getNumberOfPoints();
-    std::vector<float> vPoint(3, 0.0);
-    trian->points().resize(numberOfPoints, vPoint);
-
-    ::fwData::Mesh::PointsMultiArrayType points = meshHelper.getPoints();
-    typedef boost::make_unsigned< ::fwData::Mesh::PointsMultiArrayType::index >::type PointTypesIndex;
-    for (PointTypesIndex i = 0; i != numberOfPoints; ++i)
-    {
-        ::fwData::TriangularMesh::PointContainer::value_type &point = trian->points()[i];
-        for (PointTypesIndex j = 0; j != 3; ++j)
-        {
-            point[j] = points[i][j];
-        }
-    }
-
-    size_t numberOfCells = mesh->getNumberOfCells();
-    std::vector<int> vCell(3, 0);
-    trian->cells().resize(numberOfCells, vCell);
-
-    ::fwData::Mesh::CellDataMultiArrayType cells = meshHelper.getCellData();
-    typedef boost::make_unsigned< ::fwData::Mesh::CellDataMultiArrayType::index >::type CellTypesIndex;
-    size_t cellsSize = numberOfCells*3;
-    SLM_ASSERT("Wrong CellDataMultiArray size", cells.size() == cellsSize);
-    for (CellTypesIndex i = 0; i < cellsSize; i+=3)
-    {
-        ::fwData::TriangularMesh::CellContainer::value_type &vCells = trian->cells()[i/3];
-        vCells[0] = ::fwTools::numericRoundCast<int>(cells[i]);
-        vCells[1] = ::fwTools::numericRoundCast<int>(cells[i+1]);
-        vCells[2] = ::fwTools::numericRoundCast<int>(cells[i+2]);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Mesh::fromTriangularMesh(::fwData::TriangularMesh::sptr trian, ::fwData::Mesh::sptr mesh)
-{
-    ::fwData::TriangularMesh::PointContainer& vPoints = trian->points();
-    ::fwData::TriangularMesh::CellContainer& vCells = trian->cells();
-
-    mesh->clear();
-    mesh->allocate(vPoints.size(), vCells.size(), vCells.size()*3);
-
-    ::fwComEd::helper::Mesh meshHelper(mesh);
-
-    ::fwData::Array::sptr pointsArray = mesh->getPointsArray();
-    ::fwData::Array::sptr cellsArray = mesh->getCellDataArray();
-    ::fwData::Array::sptr cellDataOffsetArray = mesh->getCellDataOffsetsArray();
-    ::fwData::Array::sptr cellTypeArray = mesh->getCellTypesArray();
-
-    SLM_ASSERT("Wrong CellTypeArray dim", cellTypeArray->getSize().size()==1);
-    SLM_ASSERT("Wrong CellTypeArray size", cellTypeArray->getSize()[0]==vCells.size());
-    SLM_ASSERT("Wrong pointsArray dim", pointsArray->getSize().size()==1);
-    SLM_ASSERT("Wrong pointsArray size", pointsArray->getSize()[0]==vPoints.size());
-    SLM_ASSERT("Wrong cellsArray dim", cellsArray->getSize().size()==1);
-    SLM_ASSERT("Wrong cellsArray size", cellsArray->getSize()[0]==vCells.size()*3);
-    SLM_ASSERT("Wrong cellDataOffsetArray dim", cellDataOffsetArray->getSize().size()==1);
-    SLM_ASSERT("Wrong cellDataOffsetArray size", cellDataOffsetArray->getSize()[0]==vCells.size());
-
-    //Initialized pointsArray
-    for(size_t i=0; i<vPoints.size(); i++)
-    {
-        meshHelper.insertNextPoint(vPoints[i][0], vPoints[i][1], vPoints[i][2]);
-    }
-
-    //Initialized cellsArray
-    for(size_t i=0; i<vCells.size(); i++)
-    {
-        meshHelper.insertNextCell(vCells[i][0], vCells[i][1], vCells[i][2]);
-    }
-    mesh->adjustAllocatedMemory();
-}
-
-//------------------------------------------------------------------------------
-
 bool Mesh::hasUniqueCellType(::fwData::Mesh::sptr mesh, ::fwData::Mesh::CellTypes cell)
 {
     bool res = true;
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
     ::fwData::Mesh::CellTypesMultiArrayType cellTypes = meshHelper.getCellTypes();
 
-    BOOST_FOREACH(::fwData::Mesh::CellTypes type, cellTypes)
+    for(::fwData::Mesh::CellTypes type :  cellTypes)
     {
         if(type != cell)
         {
@@ -145,7 +56,7 @@ bool Mesh::hasUniqueCellType(::fwData::Mesh::sptr mesh, ::fwData::Mesh::CellType
 typedef boost::multi_array_ref<Point, 1> PointsMultiArrayType;
 
 
-Vector<float> &computeTriangleNormal(const Point &p1, const Point &p2, const Point &p3, Vector<float> &n)
+Vector<float>& computeTriangleNormal(const Point& p1, const Point& p2, const Point& p3, Vector<float>& n)
 {
     n = Vector<float>(p1, p2);
     Vector<float> v(p1, p3);
@@ -156,11 +67,12 @@ Vector<float> &computeTriangleNormal(const Point &p1, const Point &p2, const Poi
 
 //------------------------------------------------------------------------------
 
-Vector<float> &computeTriangleNormal( const PointsMultiArrayType &points, const ::fwData::Mesh::CellValueType *cell, Vector<float> &n)
+Vector<float>& computeTriangleNormal( const PointsMultiArrayType& points, const ::fwData::Mesh::CellValueType* cell,
+                                      Vector<float>& n)
 {
-    const Point &p1 = points[cell[0]];
-    const Point &p2 = points[cell[1]];
-    const Point &p3 = points[cell[2]];
+    const Point& p1 = points[cell[0]];
+    const Point& p2 = points[cell[1]];
+    const Point& p3 = points[cell[2]];
 
     computeTriangleNormal(p1, p2, p3, n);
     return n;
@@ -168,16 +80,17 @@ Vector<float> &computeTriangleNormal( const PointsMultiArrayType &points, const
 
 //------------------------------------------------------------------------------
 
-Vector<float> &computeCellNormal( const PointsMultiArrayType &points, const ::fwData::Mesh::CellValueType *cell, size_t cellSize, Vector<float> &n)
+Vector<float>& computeCellNormal( const PointsMultiArrayType& points, const ::fwData::Mesh::CellValueType* cell,
+                                  size_t cellSize, Vector<float>& n)
 {
     n = Vector<float>();
     Vector<float> v;
 
-    for (size_t i=0; i< cellSize; ++i)
+    for (size_t i = 0; i< cellSize; ++i)
     {
-        const Point &p1 = points[cell[i  ]];
-        const Point &p2 = points[cell[(i+1)% cellSize]];
-        const Point &p3 = points[cell[(i+2)% cellSize]];
+        const Point& p1 = points[cell[i  ]];
+        const Point& p2 = points[cell[(i+1)% cellSize]];
+        const Point& p3 = points[cell[(i+2)% cellSize]];
 
         computeTriangleNormal(p1, p2, p3, n);
 
@@ -191,40 +104,42 @@ Vector<float> &computeCellNormal( const PointsMultiArrayType &points, const ::fw
 
 //------------------------------------------------------------------------------
 
-void generateRegionCellNormals(::fwComEd::helper::Mesh::sptr meshHelper, const ::fwData::Mesh::Id regionMin, const ::fwData::Mesh::Id regionMax)
+void generateRegionCellNormals(::fwDataTools::helper::Mesh::sptr meshHelper, const ::fwData::Mesh::Id regionMin,
+                               const ::fwData::Mesh::Id regionMax)
 {
     ::fwData::Mesh::csptr mesh = meshHelper->getMesh();
-    ::fwComEd::helper::Array pointArrayHelper(mesh->getPointsArray());
-    ::fwComEd::helper::Array cellNormalsArrayHelper(mesh->getCellNormalsArray());
+    ::fwDataTools::helper::Array pointArrayHelper(mesh->getPointsArray());
+    ::fwDataTools::helper::Array cellNormalsArrayHelper(mesh->getCellNormalsArray());
 
     PointsMultiArrayType point = PointsMultiArrayType(
-            static_cast<PointsMultiArrayType::element*>(pointArrayHelper.getBuffer()),
-            ::boost::extents[mesh->getNumberOfPoints()]
-            );
+        static_cast<PointsMultiArrayType::element*>(pointArrayHelper.getBuffer()),
+        ::boost::extents[mesh->getNumberOfPoints()]
+        );
 
 
-    ::fwData::Mesh::CellTypesMultiArrayType       cellTypes       = meshHelper->getCellTypes();
-    ::fwData::Mesh::CellDataMultiArrayType        cellData        = meshHelper->getCellData();
+    ::fwData::Mesh::CellTypesMultiArrayType cellTypes             = meshHelper->getCellTypes();
+    ::fwData::Mesh::CellDataMultiArrayType cellData               = meshHelper->getCellData();
     ::fwData::Mesh::CellDataOffsetsMultiArrayType cellDataOffsets = meshHelper->getCellDataOffsets();
 
     const Vector<float> vZero;
     ::fwData::Mesh::CellTypes type;
     ::fwData::Mesh::CellDataOffsetType offset;
-    ::fwData::Mesh::CellValueType *cell;
+    ::fwData::Mesh::CellValueType* cell;
     ::fwData::Mesh::Id cellLen = 0;
 
     const ::fwData::Mesh::Id numberOfCells = mesh->getNumberOfCells();
-    const ::fwData::Mesh::Id cellDataSize = mesh->getCellDataSize();
+    const ::fwData::Mesh::Id cellDataSize  = mesh->getCellDataSize();
 
-    Vector< ::fwData::Mesh::NormalValueType > *normals = cellNormalsArrayHelper.begin< Vector< ::fwData::Mesh::NormalValueType > >();
+    Vector< ::fwData::Mesh::NormalValueType >* normals =
+        cellNormalsArrayHelper.begin< Vector< ::fwData::Mesh::NormalValueType > >();
 
     for(::fwData::Mesh::Id i = regionMin; i<regionMax; ++i)
     {
-        Vector<float> &n = normals[i];
+        Vector<float>& n = normals[i];
 
-        type = cellTypes[i];
+        type   = cellTypes[i];
         offset = cellDataOffsets[i];
-        cell = &cellData[offset];
+        cell   = &cellData[offset];
         switch (type)
         {
             case 0:
@@ -233,18 +148,18 @@ void generateRegionCellNormals(::fwComEd::helper::Mesh::sptr meshHelper, const :
                 n = vZero;
                 break;
             case 3:
-                {
-                    computeTriangleNormal(point, cell, n);
-                }
-                break;
+            {
+                computeTriangleNormal(point, cell, n);
+            }
+            break;
             case 4:
             case 5:
-                {
-                    const ::fwData::Mesh::Id i1 = i+1;
-                    cellLen = (( i1 < numberOfCells )? cellDataOffsets[i1]:cellDataSize) - cellDataOffsets[i];
+            {
+                const ::fwData::Mesh::Id i1 = i+1;
+                cellLen = (( i1 < numberOfCells ) ? cellDataOffsets[i1] : cellDataSize) - cellDataOffsets[i];
 
-                    computeCellNormal(point, cell, cellLen, n);
-                }
+                computeCellNormal(point, cell, cellLen, n);
+            }
         }
     }
 }
@@ -253,7 +168,7 @@ void generateRegionCellNormals(::fwComEd::helper::Mesh::sptr meshHelper, const :
 
 
 template <typename T>
-void vectorSum( std::vector< std::vector<T> > &vectors, size_t regionMin, size_t regionMax )
+void vectorSum( std::vector< std::vector<T> >& vectors, size_t regionMin, size_t regionMax )
 {
     if (vectors.empty())
     {
@@ -262,7 +177,7 @@ void vectorSum( std::vector< std::vector<T> > &vectors, size_t regionMin, size_t
 
     typename std::vector< std::vector<T> >::iterator vIter = vectors.begin();
 
-    std::vector<T> &res = vectors[0];
+    std::vector<T>& res = vectors[0];
 
     for (++vIter; vIter != vectors.end(); ++vIter)
     {
@@ -282,11 +197,12 @@ void Mesh::generateCellNormals(::fwData::Mesh::sptr mesh)
     if(numberOfCells > 0)
     {
         mesh->allocateCellNormals();
-        ::fwComEd::helper::Mesh::sptr meshHelper;
-        meshHelper = ::fwComEd::helper::Mesh::New(mesh);
+        ::fwDataTools::helper::Mesh::sptr meshHelper;
+        meshHelper = ::fwDataTools::helper::Mesh::New(mesh);
 
         ::fwDataTools::thread::RegionThreader rt((numberOfCells >= 200000) ? 4 : 1);
-        rt( ::boost::bind(&generateRegionCellNormals, meshHelper, _1, _2), numberOfCells );
+        rt( std::bind(&generateRegionCellNormals, meshHelper, std::placeholders::_1, std::placeholders::_2),
+            numberOfCells );
     }
 }
 
@@ -295,37 +211,40 @@ void Mesh::generateCellNormals(::fwData::Mesh::sptr mesh)
 typedef std::vector< std::vector< unsigned char > > CharVectors;
 typedef std::vector< std::vector< float > > FloatVectors;
 
-void generateRegionCellNormalsByPoints(FloatVectors &normalsData, CharVectors &normalCounts, size_t dataId,
-        ::fwComEd::helper::Mesh::sptr meshHelper, const ::fwData::Mesh::Id regionMin, const ::fwData::Mesh::Id regionMax)
+void generateRegionCellNormalsByPoints(FloatVectors& normalsData, CharVectors& normalCounts, size_t dataId,
+                                       ::fwDataTools::helper::Mesh::sptr meshHelper, const ::fwData::Mesh::Id regionMin,
+                                       const ::fwData::Mesh::Id regionMax)
 {
     ::fwData::Mesh::csptr mesh = meshHelper->getMesh();
-    FloatVectors::value_type &normalsResults = normalsData[dataId];
-    CharVectors::value_type  &normalCount    = normalCounts[dataId];
+    FloatVectors::value_type& normalsResults = normalsData[dataId];
+    CharVectors::value_type& normalCount     = normalCounts[dataId];
 
     const ::fwData::Mesh::Id nbOfPoints = mesh->getNumberOfPoints();
     normalsResults.resize(3*nbOfPoints, 0.f);
     normalCount.resize(nbOfPoints, 0);
 
-    ::fwData::Mesh::CellTypesMultiArrayType       cellTypes       = meshHelper->getCellTypes();
-    ::fwData::Mesh::CellDataMultiArrayType        cellData        = meshHelper->getCellData();
+    ::fwData::Mesh::CellTypesMultiArrayType cellTypes             = meshHelper->getCellTypes();
+    ::fwData::Mesh::CellDataMultiArrayType cellData               = meshHelper->getCellData();
     ::fwData::Mesh::CellDataOffsetsMultiArrayType cellDataOffsets = meshHelper->getCellDataOffsets();
 
 
     ::fwData::Mesh::CellTypes type;
     ::fwData::Mesh::CellDataOffsetType offset;
-    ::fwData::Mesh::CellValueType *cell;
+    ::fwData::Mesh::CellValueType* cell;
     ::fwData::Mesh::Id cellLen = 0;
 
     const ::fwData::Mesh::Id numberOfCells = mesh->getNumberOfCells();
-    const ::fwData::Mesh::Id cellDataSize = mesh->getCellDataSize();
+    const ::fwData::Mesh::Id cellDataSize  = mesh->getCellDataSize();
 
-    ::fwComEd::helper::Array arrayHelper(mesh->getCellNormalsArray());
-    Vector< ::fwData::Mesh::NormalValueType > *normals = arrayHelper.begin< Vector< ::fwData::Mesh::NormalValueType > >();
-    Vector< ::fwData::Mesh::NormalValueType > *normalResults = reinterpret_cast< Vector< ::fwData::Mesh::NormalValueType > * >( &(*normalsResults.begin()));
+    ::fwDataTools::helper::Array arrayHelper(mesh->getCellNormalsArray());
+    Vector< ::fwData::Mesh::NormalValueType >* normals =
+        arrayHelper.begin< Vector< ::fwData::Mesh::NormalValueType > >();
+    Vector< ::fwData::Mesh::NormalValueType >* normalResults =
+        reinterpret_cast< Vector< ::fwData::Mesh::NormalValueType >* >( &(*normalsResults.begin()));
 
 
-    ::fwData::Mesh::CellValueType *pointId;
-    ::fwData::Mesh::CellValueType *cellEnd;
+    ::fwData::Mesh::CellValueType* pointId;
+    ::fwData::Mesh::CellValueType* cellEnd;
 
     for(::fwData::Mesh::Id i = regionMin; i<regionMax; ++i)
     {
@@ -344,18 +263,18 @@ void generateRegionCellNormalsByPoints(FloatVectors &normalsData, CharVectors &n
                 cellLen = type;
                 break;
             case 5:
-                {
-                    const ::fwData::Mesh::Id i1 = i+1;
-                    cellLen = (( i1 < numberOfCells )? cellDataOffsets[i1]:cellDataSize) - cellDataOffsets[i];
-                }
+            {
+                const ::fwData::Mesh::Id i1 = i+1;
+                cellLen = (( i1 < numberOfCells ) ? cellDataOffsets[i1] : cellDataSize) - cellDataOffsets[i];
+            }
         }
 
         cellEnd = cell + cellLen;
 
         for(pointId = cell; pointId != cellEnd; ++pointId)
         {
-            Vector< ::fwData::Mesh::NormalValueType > &res = normalResults[*pointId];
-            res += normals[i];
+            Vector< ::fwData::Mesh::NormalValueType >& res = normalResults[*pointId];
+            res                   += normals[i];
             normalCount[*pointId] += 1;
         }
 
@@ -364,13 +283,16 @@ void generateRegionCellNormalsByPoints(FloatVectors &normalsData, CharVectors &n
 
 //------------------------------------------------------------------------------
 
-void normalizeRegionCellNormalsByPoints(FloatVectors::value_type &normalsData, CharVectors::value_type &normalCount,
-        ::fwData::Mesh::sptr mesh, const ::fwData::Mesh::Id regionMin, const ::fwData::Mesh::Id regionMax)
+void normalizeRegionCellNormalsByPoints(FloatVectors::value_type& normalsData, CharVectors::value_type& normalCount,
+                                        ::fwData::Mesh::sptr mesh, const ::fwData::Mesh::Id regionMin,
+                                        const ::fwData::Mesh::Id regionMax)
 {
-    Vector< ::fwData::Mesh::NormalValueType > *normalSum = reinterpret_cast< Vector< ::fwData::Mesh::NormalValueType > * >( &(*normalsData.begin()) );
+    Vector< ::fwData::Mesh::NormalValueType >* normalSum =
+        reinterpret_cast< Vector< ::fwData::Mesh::NormalValueType >* >( &(*normalsData.begin()) );
 
-    ::fwComEd::helper::Array arrayHelper(mesh->getPointNormalsArray());
-    Vector< ::fwData::Mesh::NormalValueType > *normals = arrayHelper.begin< Vector< ::fwData::Mesh::NormalValueType > >();
+    ::fwDataTools::helper::Array arrayHelper(mesh->getPointNormalsArray());
+    Vector< ::fwData::Mesh::NormalValueType >* normals =
+        arrayHelper.begin< Vector< ::fwData::Mesh::NormalValueType > >();
 
     for ( ::fwData::Mesh::Id i = regionMin; i < regionMax; ++i)
     {
@@ -400,38 +322,41 @@ void Mesh::generatePointNormals(::fwData::Mesh::sptr mesh)
 
         mesh->allocatePointNormals();
 
-        ::fwComEd::helper::Mesh::sptr meshHelper;
-        meshHelper = ::fwComEd::helper::Mesh::New(mesh);
+        ::fwDataTools::helper::Mesh::sptr meshHelper;
+        meshHelper = ::fwDataTools::helper::Mesh::New(mesh);
 
         ::fwDataTools::thread::RegionThreader rt((nbOfPoints >= 100000) ? 4 : 1);
 
 
         FloatVectors normalsData(rt.numberOfThread());
-        CharVectors  normalCounts(rt.numberOfThread());
+        CharVectors normalCounts(rt.numberOfThread());
 
-        rt( ::boost::bind(&generateRegionCellNormalsByPoints,
-                          ::boost::ref(normalsData),
-                          ::boost::ref(normalCounts),
-                          _3, meshHelper, _1, _2),
-                          numberOfCells);
+        rt( std::bind(&generateRegionCellNormalsByPoints,
+                      ::boost::ref(normalsData),
+                      ::boost::ref(normalCounts),
+                      std::placeholders::_3,
+                      meshHelper,
+                      std::placeholders::_1,
+                      std::placeholders::_2),
+            numberOfCells);
 
-        rt( ::boost::bind(&vectorSum<FloatVectors::value_type::value_type>,
-                          ::boost::ref(normalsData),
-                          _1, _2),
-                          nbOfPoints*3);
+        rt( std::bind(&vectorSum<FloatVectors::value_type::value_type>,
+                      ::boost::ref(normalsData),
+                      std::placeholders::_1, std::placeholders::_2),
+            nbOfPoints*3);
 
 
-        rt( ::boost::bind(&vectorSum<CharVectors::value_type::value_type>,
-                          ::boost::ref(normalCounts),
-                          _1, _2),
-                          nbOfPoints);
+        rt( std::bind(&vectorSum<CharVectors::value_type::value_type>,
+                      ::boost::ref(normalCounts),
+                      std::placeholders::_1, std::placeholders::_2),
+            nbOfPoints);
 
 
-        rt( boost::bind( &normalizeRegionCellNormalsByPoints,
-                         ::boost::ref(normalsData[0]),
-                         ::boost::ref(normalCounts[0]),
-                          mesh, _1, _2),
-                         nbOfPoints);
+        rt( std::bind( &normalizeRegionCellNormalsByPoints,
+                       ::boost::ref(normalsData[0]),
+                       ::boost::ref(normalCounts[0]),
+                       mesh, std::placeholders::_1, std::placeholders::_2),
+            nbOfPoints);
 
         meshHelper.reset();
         mesh->setCellNormalsArray(oldCellNormals);
@@ -458,26 +383,26 @@ void Mesh::shakeNormals(::fwData::Array::sptr array)
 {
 
     if(array
-            && array->getType() == ::fwTools::Type::create<float>()
-            && !array->empty()
-            && array->getNumberOfComponents() == 3
-            && array->getNumberOfDimensions() == 1
-            )
+       && array->getType() == ::fwTools::Type::create<float>()
+       && !array->empty()
+       && array->getNumberOfComponents() == 3
+       && array->getNumberOfDimensions() == 1
+       )
     {
-        ::fwComEd::helper::Array arrayHelper(array);
-        void *buf;
+        ::fwDataTools::helper::Array arrayHelper(array);
+        void* buf;
         buf = arrayHelper.getBuffer();
-                const ::fwData::Mesh::Id nbOfNormals = array->getSize().at(0);
+        const ::fwData::Mesh::Id nbOfNormals = array->getSize().at(0);
         typedef boost::multi_array_ref<Vector<float>, 1> NormalsMultiArrayType;
         NormalsMultiArrayType normals = NormalsMultiArrayType(
-                static_cast<NormalsMultiArrayType::element*>(buf),
-                boost::extents[nbOfNormals]
-                );
+            static_cast<NormalsMultiArrayType::element*>(buf),
+            ::boost::extents[nbOfNormals]
+            );
 
         ::fwDataTools::thread::RegionThreader rt((nbOfNormals >= 150000) ? 4 : 1);
-        rt( ::boost::bind(&regionShakeNormals<NormalsMultiArrayType>,
-                           boost::ref(normals),
-                           _1, _2),
+        rt( std::bind(&regionShakeNormals<NormalsMultiArrayType>,
+                      std::ref(normals),
+                      std::placeholders::_1, std::placeholders::_2),
             nbOfNormals);
     }
 }
@@ -502,7 +427,7 @@ void Mesh::colorizeMeshPoints(::fwData::Mesh::sptr mesh)
 {
     mesh->allocatePointColors(::fwData::Mesh::RGB);
 
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
 
     ::fwData::Mesh::ColorValueType color[4];
     size_t numberOfPoints = mesh->getNumberOfPoints();
@@ -520,7 +445,7 @@ void Mesh::colorizeMeshCells(::fwData::Mesh::sptr mesh)
 {
     mesh->allocateCellColors(::fwData::Mesh::RGBA);
 
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
 
     ::fwData::Mesh::ColorValueType color[4];
     size_t numberOfCells = mesh->getNumberOfCells();
@@ -538,12 +463,12 @@ void Mesh::colorizeMeshCells(::fwData::Mesh::sptr mesh)
 
 void Mesh::shakePoint(::fwData::Mesh::sptr mesh)
 {
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
 
     size_t nbPts = mesh->getNumberOfPoints();
     ::fwData::Mesh::PointsMultiArrayType points = meshHelper.getPoints();
     RandFloat randFloat;
-    for(size_t i=0 ; i<nbPts ; ++i )
+    for(size_t i = 0; i<nbPts; ++i )
     {
         points[i][0] += randFloat()*5;
         points[i][1] += randFloat()*5;
@@ -553,29 +478,29 @@ void Mesh::shakePoint(::fwData::Mesh::sptr mesh)
 
 //------------------------------------------------------------------------------
 
-void Mesh::transform( ::fwData::Mesh::sptr mesh, ::fwData::TransformationMatrix3D::sptr t )
- {
+void Mesh::transform( ::fwData::Mesh::sptr mesh, ::fwData::TransformationMatrix3D::csptr t )
+{
     size_t nbPts = mesh->getNumberOfPoints();
-    ::fwComEd::helper::Mesh meshHelper(mesh);
+    ::fwDataTools::helper::Mesh meshHelper(mesh);
     ::fwData::Mesh::PointsMultiArrayType points = meshHelper.getPoints();
     ::fwData::Mesh::PointValueType x, y, z, xp, yp, zp, factor;
-    for(size_t i=0 ; i<nbPts ; ++i )
+    for(size_t i = 0; i<nbPts; ++i )
     {
-        x = points[i][0];
-        y = points[i][1];
-        z = points[i][2];
-        xp     = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(0,0) * x
-                                                                               + t->getCoefficient(0,1) * y
-                                                                               + t->getCoefficient(0,2) * z
-                                                                               + t->getCoefficient(0,3));
-        yp     = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(1,0) * x
-                                                                               + t->getCoefficient(1,1) * y
-                                                                               + t->getCoefficient(1,2) * z
-                                                                               + t->getCoefficient(1,3));
-        zp     = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(2,0) * x
-                                                                               + t->getCoefficient(2,1) * y
-                                                                               + t->getCoefficient(2,2) * z
-                                                                               + t->getCoefficient(2,3));
+        x  = points[i][0];
+        y  = points[i][1];
+        z  = points[i][2];
+        xp = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(0,0) * x
+                                                                           + t->getCoefficient(0,1) * y
+                                                                           + t->getCoefficient(0,2) * z
+                                                                           + t->getCoefficient(0,3));
+        yp = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(1,0) * x
+                                                                           + t->getCoefficient(1,1) * y
+                                                                           + t->getCoefficient(1,2) * z
+                                                                           + t->getCoefficient(1,3));
+        zp = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(2,0) * x
+                                                                           + t->getCoefficient(2,1) * y
+                                                                           + t->getCoefficient(2,2) * z
+                                                                           + t->getCoefficient(2,3));
         factor = ::fwTools::numericRoundCast< ::fwData::Mesh::PointValueType >(t->getCoefficient(3,0) * x
                                                                                + t->getCoefficient(3,1) * y
                                                                                + t->getCoefficient(3,2) * z
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/PickingInfo.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/PickingInfo.cpp
new file mode 100644
index 0000000..29c5873
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/PickingInfo.cpp
@@ -0,0 +1,21 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/PickingInfo.hpp"
+
+namespace fwDataTools
+{
+
+PickingInfo::PickingInfo()
+{
+    m_worldPos[0] = 0.;
+    m_worldPos[1] = 0.;
+    m_worldPos[2] = 0.;
+
+}
+
+}
+
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/TransferFunction.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/TransferFunction.cpp
index 23e27f8..5c43913 100644
--- a/SrcLib/core/fwDataTools/src/fwDataTools/TransferFunction.cpp
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/TransferFunction.cpp
@@ -1,16 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <map>
-
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
-
 #include "fwDataTools/TransferFunction.hpp"
 
+#include <boost/assign/list_of.hpp>
+#include <map>
 
 namespace fwDataTools
 {
@@ -31,263 +28,263 @@ void TransferFunction::generateDrawingTF(::fwData::TransferFunction::sptr tf)
 {
     typedef ::fwData::TransferFunction::TFColor TFColorType;
     static const ::fwData::TransferFunction::TFDataType dataType =
-            ::boost::assign::map_list_of
-                    (0.0 , TFColorType(0/255.0f  , 0/255.0f  , 0/255.0f       , 0/255.0f))
-                    (1.0 , TFColorType(255/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (2.0 , TFColorType(0/255.0f  , 0/255.0f  , 150/255.0f     , 255/255.0f))
-                    (3.0 , TFColorType(255/255.0f, 100/255.0f, 0/255.0f       , 255/255.0f))
-                    (4.0 , TFColorType(0/255.0f  , 255/255.0f, 0/255.0f       , 255/255.0f))
-                    (5.0 , TFColorType(255/255.0f, 255/255.0f, 0/255.0f       , 255/255.0f))
-                    (6.0 , TFColorType(150/255.0f, 0/255.0f  , 150/255.0f     , 255/255.0f))
-                    (7.0 , TFColorType(0/255.0f  , 255/255.0f, 255/255.0f     , 255/255.0f))
-                    (8.0 , TFColorType(150/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (9.0 , TFColorType(0/255.0f  , 150/255.0f, 0/255.0f       , 255/255.0f))
-                    (10.0, TFColorType(255/255.0f, 177/255.0f, 177/255.0f     , 255/255.0f))
-                    (11.0, TFColorType(0/255.0f  , 150/255.0f, 150/255.0f     , 255/255.0f))
-                    (12.0, TFColorType(255/255.0f, 0/255.0f  , 255/255.0f     , 255/255.0f))
-                    (13.0, TFColorType(150/255.0f, 150/255.0f, 0/255.0f       , 255/255.0f))
-                    (14.0, TFColorType(135/255.0f, 135/255.0f, 81/255.0f      , 255/255.0f))
-                    (15.0, TFColorType(255/255.0f, 255/255.0f, 177/255.0f     , 255/255.0f))
-                    (16.0, TFColorType(177/255.0f, 177/255.0f, 255/255.0f     , 255/255.0f))
-                    (17.0, TFColorType(255/255.0f, 200/255.0f, 50/255.0f      , 255/255.0f))
-                    (18.0, TFColorType(255/255.0f, 177/255.0f, 255/255.0f     , 255/255.0f))
-                    (19.0, TFColorType(177/255.0f, 255/255.0f, 255/255.0f     , 255/255.0f))
-                    (20.0, TFColorType(255/255.0f, 50/255.0f , 50/255.0f      , 255/255.0f))
-                    (21.0, TFColorType(245/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (22.0, TFColorType(0/255.0f  , 0/255.0f  , 142/255.0f     , 255/255.0f))
-                    (23.0, TFColorType(245/255.0f, 95/255.0f , 0/255.0f       , 255/255.0f))
-                    (24.0, TFColorType(0/255.0f  , 245/255.0f, 0/255.0f       , 255/255.0f))
-                    (25.0, TFColorType(245/255.0f, 245/255.0f, 0/255.0f       , 255/255.0f))
-                    (26.0, TFColorType(142/255.0f, 0/255.0f  , 142/255.0f     , 255/255.0f))
-                    (27.0, TFColorType(0/255.0f  , 245/255.0f, 245/255.0f     , 255/255.0f))
-                    (28.0, TFColorType(142/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (29.0, TFColorType(0/255.0f  , 142/255.0f, 0/255.0f       , 255/255.0f))
-                    (30.0, TFColorType(245/255.0f, 169/255.0f, 169/255.0f     , 255/255.0f))
-                    (31.0, TFColorType(0/255.0f  , 142/255.0f, 142/255.0f     , 255/255.0f))
-                    (32.0, TFColorType(245/255.0f, 0/255.0f  , 245/255.0f     , 255/255.0f))
-                    (33.0, TFColorType(142/255.0f, 142/255.0f, 0/255.0f       , 255/255.0f))
-                    (34.0, TFColorType(169/255.0f, 245/255.0f, 169/255.0f     , 255/255.0f))
-                    (35.0, TFColorType(245/255.0f, 245/255.0f, 169/255.0f     , 255/255.0f))
-                    (36.0, TFColorType(169/255.0f, 169/255.0f, 245/255.0f     , 255/255.0f))
-                    (37.0, TFColorType(245/255.0f, 192/255.0f, 46/255.0f      , 255/255.0f))
-                    (38.0, TFColorType(245/255.0f, 169/255.0f, 245/255.0f     , 255/255.0f))
-                    (39.0, TFColorType(169/255.0f, 245/255.0f, 245/255.0f     , 255/255.0f))
-                    (40.0, TFColorType(245/255.0f, 46/255.0f , 46/255.0f      , 255/255.0f))
-                    (41.0, TFColorType(235/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (42.0, TFColorType(0/255.0f  , 0/255.0f  , 134/255.0f     , 255/255.0f))
-                    (43.0, TFColorType(235/255.0f, 90/255.0f , 0/255.0f       , 255/255.0f))
-                    (44.0, TFColorType(0/255.0f  , 235/255.0f, 0/255.0f       , 255/255.0f))
-                    (45.0, TFColorType(235/255.0f, 235/255.0f, 0/255.0f       , 255/255.0f))
-                    (46.0, TFColorType(134/255.0f, 0/255.0f  , 134/255.0f     , 255/255.0f))
-                    (47.0, TFColorType(0/255.0f  , 235/255.0f, 235/255.0f     , 255/255.0f))
-                    (48.0, TFColorType(134/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (49.0, TFColorType(0/255.0f  , 134/255.0f, 0/255.0f       , 255/255.0f))
-                    (50.0, TFColorType(235/255.0f, 161/255.0f, 161/255.0f     , 255/255.0f))
-                    (51.0, TFColorType(0/255.0f  , 134/255.0f, 134/255.0f     , 255/255.0f))
-                    (52.0, TFColorType(235/255.0f, 0/255.0f  , 235/255.0f     , 255/255.0f))
-                    (53.0, TFColorType(134/255.0f, 134/255.0f, 0/255.0f       , 255/255.0f))
-                    (54.0, TFColorType(161/255.0f, 235/255.0f, 161/255.0f     , 255/255.0f))
-                    (55.0, TFColorType(235/255.0f, 235/255.0f, 161/255.0f     , 255/255.0f))
-                    (56.0, TFColorType(161/255.0f, 161/255.0f, 235/255.0f     , 255/255.0f))
-                    (57.0, TFColorType(235/255.0f, 184/255.0f, 42/255.0f      , 255/255.0f))
-                    (58.0, TFColorType(235/255.0f, 161/255.0f, 235/255.0f     , 255/255.0f))
-                    (59.0, TFColorType(161/255.0f, 235/255.0f, 235/255.0f     , 255/255.0f))
-                    (60.0, TFColorType(235/255.0f, 42/255.0f , 42/255.0f      , 255/255.0f))
-                    (61.0, TFColorType(225/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (62.0, TFColorType(0/255.0f  , 0/255.0f  , 126/255.0f     , 255/255.0f))
-                    (63.0, TFColorType(225/255.0f, 85/255.0f , 0/255.0f       , 255/255.0f))
-                    (64.0, TFColorType(0/255.0f  , 225/255.0f, 0/255.0f       , 255/255.0f))
-                    (65.0, TFColorType(225/255.0f, 225/255.0f, 0/255.0f       , 255/255.0f))
-                    (66.0, TFColorType(126/255.0f, 0/255.0f  , 126/255.0f     , 255/255.0f))
-                    (67.0, TFColorType(0/255.0f  , 225/255.0f, 225/255.0f     , 255/255.0f))
-                    (68.0, TFColorType(126/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (69.0, TFColorType(0/255.0f  , 126/255.0f, 0/255.0f       , 255/255.0f))
-                    (70.0, TFColorType(225/255.0f, 153/255.0f, 153/255.0f     , 255/255.0f))
-                    (71.0, TFColorType(0/255.0f  , 126/255.0f, 126/255.0f     , 255/255.0f))
-                    (72.0, TFColorType(225/255.0f, 0/255.0f  , 225/255.0f     , 255/255.0f))
-                    (73.0, TFColorType(126/255.0f, 126/255.0f, 0/255.0f       , 255/255.0f))
-                    (74.0, TFColorType(153/255.0f, 225/255.0f, 153/255.0f     , 255/255.0f))
-                    (75.0, TFColorType(225/255.0f, 225/255.0f, 153/255.0f     , 255/255.0f))
-                    (76.0, TFColorType(153/255.0f, 153/255.0f, 225/255.0f     , 255/255.0f))
-                    (77.0, TFColorType(225/255.0f, 176/255.0f, 38/255.0f      , 255/255.0f))
-                    (78.0, TFColorType(225/255.0f, 153/255.0f, 225/255.0f     , 255/255.0f))
-                    (79.0, TFColorType(153/255.0f, 225/255.0f, 225/255.0f     , 255/255.0f))
-                    (80.0, TFColorType(225/255.0f, 38/255.0f , 38/255.0f      , 255/255.0f))
-                    (81.0, TFColorType(215/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (82.0, TFColorType(0/255.0f  , 0/255.0f  , 118/255.0f     , 255/255.0f))
-                    (83.0, TFColorType(215/255.0f, 80/255.0f , 0/255.0f       , 255/255.0f))
-                    (84.0, TFColorType(0/255.0f  , 215/255.0f, 0/255.0f       , 255/255.0f))
-                    (85.0, TFColorType(215/255.0f, 215/255.0f, 0/255.0f       , 255/255.0f))
-                    (86.0, TFColorType(118/255.0f, 0/255.0f  , 118/255.0f     , 255/255.0f))
-                    (87.0, TFColorType(0/255.0f  , 215/255.0f, 215/255.0f     , 255/255.0f))
-                    (88.0, TFColorType(118/255.0f, 0/255.0f  , 0/255.0f       , 255/255.0f))
-                    (89.0, TFColorType(0/255.0f  , 118/255.0f, 0/255.0f       , 255/255.0f))
-                    (90.0, TFColorType(215/255.0f, 145/255.0f, 145/255.0f     , 255/255.0f))
-                    (91.0, TFColorType(0/255.0f  , 118/255.0f, 118/255.0f     , 255/255.0f))
-                    (92.0, TFColorType(215/255.0f, 0/255.0f  , 215/255.0f     , 255/255.0f))
-                    (93.0, TFColorType(118/255.0f, 118/255.0f, 0/255.0f       , 255/255.0f))
-                    (94.0, TFColorType(145/255.0f, 215/255.0f, 145/255.0f     , 255/255.0f))
-                    (95.0, TFColorType(215/255.0f, 215/255.0f, 145/255.0f     , 255/255.0f))
-                    (96.0, TFColorType(145/255.0f, 145/255.0f, 215/255.0f     , 255/255.0f))
-                    (97.0, TFColorType(215/255.0f, 168/255.0f, 34/255.0f      , 255/255.0f))
-                    (98.0, TFColorType(215/255.0f, 145/255.0f, 215/255.0f     , 255/255.0f))
-                    (99.0, TFColorType(145/255.0f, 215/255.0f, 215/255.0f     , 255/255.0f))
-                    (100.0, TFColorType(215/255.0f, 34/255.0f , 34/255.0f     , 255/255.0f))
-                    (101.0, TFColorType(205/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (102.0, TFColorType(0/255.0f  , 0/255.0f  , 110/255.0f    , 255/255.0f))
-                    (103.0, TFColorType(205/255.0f, 75/255.0f , 0/255.0f      , 255/255.0f))
-                    (104.0, TFColorType(0/255.0f  , 205/255.0f, 0/255.0f      , 255/255.0f))
-                    (105.0, TFColorType(205/255.0f, 205/255.0f, 0/255.0f      , 255/255.0f))
-                    (106.0, TFColorType(110/255.0f, 0/255.0f  , 110/255.0f    , 255/255.0f))
-                    (107.0, TFColorType(0/255.0f  , 205/255.0f, 205/255.0f    , 255/255.0f))
-                    (108.0, TFColorType(110/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (109.0, TFColorType(0/255.0f  , 110/255.0f, 0/255.0f      , 255/255.0f))
-                    (110.0, TFColorType(205/255.0f, 137/255.0f, 137/255.0f    , 255/255.0f))
-                    (111.0, TFColorType(0/255.0f  , 110/255.0f, 110/255.0f    , 255/255.0f))
-                    (112.0, TFColorType(205/255.0f, 0/255.0f  , 205/255.0f    , 255/255.0f))
-                    (113.0, TFColorType(110/255.0f, 110/255.0f, 0/255.0f      , 255/255.0f))
-                    (114.0, TFColorType(137/255.0f, 205/255.0f, 137/255.0f    , 255/255.0f))
-                    (115.0, TFColorType(205/255.0f, 205/255.0f, 137/255.0f    , 255/255.0f))
-                    (116.0, TFColorType(137/255.0f, 137/255.0f, 205/255.0f    , 255/255.0f))
-                    (117.0, TFColorType(205/255.0f, 160/255.0f, 30/255.0f     , 255/255.0f))
-                    (118.0, TFColorType(205/255.0f, 137/255.0f, 205/255.0f    , 255/255.0f))
-                    (119.0, TFColorType(137/255.0f, 205/255.0f, 205/255.0f    , 255/255.0f))
-                    (120.0, TFColorType(205/255.0f, 30/255.0f , 30/255.0f     , 255/255.0f))
-                    (121.0, TFColorType(195/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (122.0, TFColorType(0/255.0f  , 0/255.0f  , 102/255.0f    , 255/255.0f))
-                    (123.0, TFColorType(195/255.0f, 70/255.0f , 0/255.0f      , 255/255.0f))
-                    (124.0, TFColorType(0/255.0f  , 195/255.0f, 0/255.0f      , 255/255.0f))
-                    (125.0, TFColorType(195/255.0f, 195/255.0f, 0/255.0f      , 255/255.0f))
-                    (126.0, TFColorType(102/255.0f, 0/255.0f  , 102/255.0f    , 255/255.0f))
-                    (127.0, TFColorType(0/255.0f  , 195/255.0f, 195/255.0f    , 255/255.0f))
-                    (128.0, TFColorType(102/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (129.0, TFColorType(0/255.0f  , 102/255.0f, 0/255.0f      , 255/255.0f))
-                    (130.0, TFColorType(195/255.0f, 129/255.0f, 129/255.0f    , 255/255.0f))
-                    (131.0, TFColorType(0/255.0f  , 102/255.0f, 102/255.0f    , 255/255.0f))
-                    (132.0, TFColorType(195/255.0f, 0/255.0f  , 195/255.0f    , 255/255.0f))
-                    (133.0, TFColorType(102/255.0f, 102/255.0f, 0/255.0f      , 255/255.0f))
-                    (134.0, TFColorType(129/255.0f, 195/255.0f, 129/255.0f    , 255/255.0f))
-                    (135.0, TFColorType(195/255.0f, 195/255.0f, 129/255.0f    , 255/255.0f))
-                    (136.0, TFColorType(129/255.0f, 129/255.0f, 195/255.0f    , 255/255.0f))
-                    (137.0, TFColorType(195/255.0f, 152/255.0f, 26/255.0f     , 255/255.0f))
-                    (138.0, TFColorType(195/255.0f, 129/255.0f, 195/255.0f    , 255/255.0f))
-                    (139.0, TFColorType(129/255.0f, 195/255.0f, 195/255.0f    , 255/255.0f))
-                    (140.0, TFColorType(195/255.0f, 26/255.0f , 26/255.0f     , 255/255.0f))
-                    (141.0, TFColorType(185/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (142.0, TFColorType(0/255.0f  , 0/255.0f  , 94/255.0f     , 255/255.0f))
-                    (143.0, TFColorType(185/255.0f, 65/255.0f , 0/255.0f      , 255/255.0f))
-                    (144.0, TFColorType(0/255.0f  , 185/255.0f, 0/255.0f      , 255/255.0f))
-                    (145.0, TFColorType(185/255.0f, 185/255.0f, 0/255.0f      , 255/255.0f))
-                    (146.0, TFColorType(94/255.0f , 0/255.0f  , 94/255.0f     , 255/255.0f))
-                    (147.0, TFColorType(0/255.0f  , 185/255.0f, 185/255.0f    , 255/255.0f))
-                    (148.0, TFColorType(94/255.0f , 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (149.0, TFColorType(0/255.0f  , 94/255.0f , 0/255.0f      , 255/255.0f))
-                    (150.0, TFColorType(185/255.0f, 121/255.0f, 121/255.0f    , 255/255.0f))
-                    (151.0, TFColorType(0/255.0f  , 94/255.0f , 94/255.0f     , 255/255.0f))
-                    (152.0, TFColorType(185/255.0f, 0/255.0f  , 185/255.0f    , 255/255.0f))
-                    (153.0, TFColorType(94/255.0f , 94/255.0f , 0/255.0f      , 255/255.0f))
-                    (154.0, TFColorType(121/255.0f, 185/255.0f, 121/255.0f    , 255/255.0f))
-                    (155.0, TFColorType(185/255.0f, 185/255.0f, 121/255.0f    , 255/255.0f))
-                    (156.0, TFColorType(121/255.0f, 121/255.0f, 185/255.0f    , 255/255.0f))
-                    (157.0, TFColorType(185/255.0f, 144/255.0f, 22/255.0f     , 255/255.0f))
-                    (158.0, TFColorType(185/255.0f, 121/255.0f, 185/255.0f    , 255/255.0f))
-                    (159.0, TFColorType(121/255.0f, 185/255.0f, 185/255.0f    , 255/255.0f))
-                    (160.0, TFColorType(185/255.0f, 22/255.0f , 22/255.0f     , 255/255.0f))
-                    (161.0, TFColorType(175/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (162.0, TFColorType(0/255.0f  , 0/255.0f  , 86/255.0f     , 255/255.0f))
-                    (163.0, TFColorType(175/255.0f, 60/255.0f , 0/255.0f      , 255/255.0f))
-                    (164.0, TFColorType(0/255.0f  , 175/255.0f, 0/255.0f      , 255/255.0f))
-                    (165.0, TFColorType(175/255.0f, 175/255.0f, 0/255.0f      , 255/255.0f))
-                    (166.0, TFColorType(86/255.0f , 0/255.0f  , 86/255.0f     , 255/255.0f))
-                    (167.0, TFColorType(0/255.0f  , 175/255.0f, 175/255.0f    , 255/255.0f))
-                    (168.0, TFColorType(86/255.0f , 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (169.0, TFColorType(0/255.0f  , 86/255.0f , 0/255.0f      , 255/255.0f))
-                    (170.0, TFColorType(175/255.0f, 113/255.0f, 113/255.0f    , 255/255.0f))
-                    (171.0, TFColorType(0/255.0f  , 86/255.0f , 86/255.0f     , 255/255.0f))
-                    (172.0, TFColorType(175/255.0f, 0/255.0f  , 175/255.0f    , 255/255.0f))
-                    (173.0, TFColorType(86/255.0f , 86/255.0f , 0/255.0f      , 255/255.0f))
-                    (174.0, TFColorType(113/255.0f, 175/255.0f, 113/255.0f    , 255/255.0f))
-                    (175.0, TFColorType(175/255.0f, 175/255.0f, 113/255.0f    , 255/255.0f))
-                    (176.0, TFColorType(113/255.0f, 113/255.0f, 175/255.0f    , 255/255.0f))
-                    (177.0, TFColorType(175/255.0f, 136/255.0f, 18/255.0f     , 255/255.0f))
-                    (178.0, TFColorType(175/255.0f, 113/255.0f, 175/255.0f    , 255/255.0f))
-                    (179.0, TFColorType(113/255.0f, 175/255.0f, 175/255.0f    , 255/255.0f))
-                    (180.0, TFColorType(175/255.0f, 18/255.0f , 18/255.0f     , 255/255.0f))
-                    (181.0, TFColorType(165/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (182.0, TFColorType(0/255.0f  , 0/255.0f  , 78/255.0f     , 255/255.0f))
-                    (183.0, TFColorType(165/255.0f, 55/255.0f , 0/255.0f      , 255/255.0f))
-                    (184.0, TFColorType(0/255.0f  , 165/255.0f, 0/255.0f      , 255/255.0f))
-                    (185.0, TFColorType(165/255.0f, 165/255.0f, 0/255.0f      , 255/255.0f))
-                    (186.0, TFColorType(78/255.0f , 0/255.0f  , 78/255.0f     , 255/255.0f))
-                    (187.0, TFColorType(0/255.0f  , 165/255.0f, 165/255.0f    , 255/255.0f))
-                    (188.0, TFColorType(78/255.0f , 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (189.0, TFColorType(0/255.0f  , 78/255.0f , 0/255.0f      , 255/255.0f))
-                    (190.0, TFColorType(165/255.0f, 105/255.0f, 105/255.0f    , 255/255.0f))
-                    (191.0, TFColorType(0/255.0f  , 78/255.0f , 78/255.0f     , 255/255.0f))
-                    (192.0, TFColorType(165/255.0f, 0/255.0f  , 165/255.0f    , 255/255.0f))
-                    (193.0, TFColorType(78/255.0f , 78/255.0f , 0/255.0f      , 255/255.0f))
-                    (194.0, TFColorType(105/255.0f, 165/255.0f, 105/255.0f    , 255/255.0f))
-                    (195.0, TFColorType(165/255.0f, 165/255.0f, 105/255.0f    , 255/255.0f))
-                    (196.0, TFColorType(105/255.0f, 105/255.0f, 165/255.0f    , 255/255.0f))
-                    (197.0, TFColorType(165/255.0f, 128/255.0f, 14/255.0f     , 255/255.0f))
-                    (198.0, TFColorType(165/255.0f, 105/255.0f, 165/255.0f    , 255/255.0f))
-                    (199.0, TFColorType(105/255.0f, 165/255.0f, 165/255.0f    , 255/255.0f))
-                    (200.0, TFColorType(165/255.0f, 14/255.0f , 14/255.0f     , 255/255.0f))
-                    (201.0, TFColorType(155/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (202.0, TFColorType(0/255.0f  , 0/255.0f  , 70/255.0f     , 255/255.0f))
-                    (203.0, TFColorType(155/255.0f, 50/255.0f , 0/255.0f      , 255/255.0f))
-                    (204.0, TFColorType(0/255.0f  , 155/255.0f, 0/255.0f      , 255/255.0f))
-                    (205.0, TFColorType(155/255.0f, 155/255.0f, 0/255.0f      , 255/255.0f))
-                    (206.0, TFColorType(70/255.0f , 0/255.0f  , 70/255.0f     , 255/255.0f))
-                    (207.0, TFColorType(0/255.0f  , 155/255.0f, 155/255.0f    , 255/255.0f))
-                    (208.0, TFColorType(70/255.0f , 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (209.0, TFColorType(0/255.0f  , 70/255.0f , 0/255.0f      , 255/255.0f))
-                    (210.0, TFColorType(155/255.0f, 97/255.0f , 97/255.0f     , 255/255.0f))
-                    (211.0, TFColorType(0/255.0f  , 70/255.0f , 70/255.0f     , 255/255.0f))
-                    (212.0, TFColorType(155/255.0f, 0/255.0f  , 155/255.0f    , 255/255.0f))
-                    (213.0, TFColorType(70/255.0f , 70/255.0f , 0/255.0f      , 255/255.0f))
-                    (214.0, TFColorType(97/255.0f , 155/255.0f, 97/255.0f     , 255/255.0f))
-                    (215.0, TFColorType(155/255.0f, 155/255.0f, 97/255.0f     , 255/255.0f))
-                    (216.0, TFColorType(97/255.0f , 97/255.0f , 155/255.0f    , 255/255.0f))
-                    (217.0, TFColorType(155/255.0f, 120/255.0f, 10/255.0f     , 255/255.0f))
-                    (218.0, TFColorType(155/255.0f, 97/255.0f , 155/255.0f    , 255/255.0f))
-                    (219.0, TFColorType(97/255.0f , 155/255.0f, 155/255.0f    , 255/255.0f))
-                    (220.0, TFColorType(155/255.0f, 10/255.0f , 10/255.0f     , 255/255.0f))
-                    (221.0, TFColorType(145/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (222.0, TFColorType(0/255.0f  , 0/255.0f  , 62/255.0f     , 255/255.0f))
-                    (223.0, TFColorType(145/255.0f, 45/255.0f , 0/255.0f      , 255/255.0f))
-                    (224.0, TFColorType(0/255.0f  , 145/255.0f, 0/255.0f      , 255/255.0f))
-                    (225.0, TFColorType(145/255.0f, 145/255.0f, 0/255.0f      , 255/255.0f))
-                    (226.0, TFColorType(62/255.0f , 0/255.0f  , 62/255.0f     , 255/255.0f))
-                    (227.0, TFColorType(0/255.0f  , 145/255.0f, 145/255.0f    , 255/255.0f))
-                    (228.0, TFColorType(62/255.0f , 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (229.0, TFColorType(0/255.0f  , 62/255.0f , 0/255.0f      , 255/255.0f))
-                    (230.0, TFColorType(145/255.0f, 89/255.0f , 89/255.0f     , 255/255.0f))
-                    (231.0, TFColorType(0/255.0f  , 62/255.0f , 62/255.0f     , 255/255.0f))
-                    (232.0, TFColorType(145/255.0f, 0/255.0f  , 145/255.0f    , 255/255.0f))
-                    (233.0, TFColorType(62/255.0f , 62/255.0f , 0/255.0f      , 255/255.0f))
-                    (234.0, TFColorType(89/255.0f , 145/255.0f, 89/255.0f     , 255/255.0f))
-                    (235.0, TFColorType(145/255.0f, 145/255.0f, 89/255.0f     , 255/255.0f))
-                    (236.0, TFColorType(89/255.0f , 89/255.0f , 145/255.0f    , 255/255.0f))
-                    (237.0, TFColorType(145/255.0f, 112/255.0f, 6/255.0f      , 255/255.0f))
-                    (238.0, TFColorType(145/255.0f, 89/255.0f , 145/255.0f    , 255/255.0f))
-                    (239.0, TFColorType(89/255.0f , 145/255.0f, 145/255.0f    , 255/255.0f))
-                    (240.0, TFColorType(145/255.0f, 6/255.0f  , 6/255.0f      , 255/255.0f))
-                    (241.0, TFColorType(135/255.0f, 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (242.0, TFColorType(0/255.0f  , 0/255.0f  , 54/255.0f     , 255/255.0f))
-                    (243.0, TFColorType(135/255.0f, 40/255.0f , 0/255.0f      , 255/255.0f))
-                    (244.0, TFColorType(0/255.0f  , 135/255.0f, 0/255.0f      , 255/255.0f))
-                    (245.0, TFColorType(135/255.0f, 135/255.0f, 0/255.0f      , 255/255.0f))
-                    (246.0, TFColorType(54/255.0f , 0/255.0f  , 54/255.0f     , 255/255.0f))
-                    (247.0, TFColorType(0/255.0f  , 135/255.0f, 135/255.0f    , 255/255.0f))
-                    (248.0, TFColorType(54/255.0f , 0/255.0f  , 0/255.0f      , 255/255.0f))
-                    (249.0, TFColorType(0/255.0f  , 54/255.0f , 0/255.0f      , 255/255.0f))
-                    (250.0, TFColorType(135/255.0f, 81/255.0f , 81/255.0f     , 255/255.0f))
-                    (251.0, TFColorType(0/255.0f  , 54/255.0f , 54/255.0f     , 255/255.0f))
-                    (252.0, TFColorType(135/255.0f, 0/255.0f  , 135/255.0f    , 255/255.0f))
-                    (253.0, TFColorType(54/255.0f , 54/255.0f , 0/255.0f      , 255/255.0f))
-                    (254.0, TFColorType(81/255.0f , 135/255.0f, 81/255.0f     , 255/255.0f))
-                    (255.0, TFColorType(177/255.0f, 255/255.0f, 177/255.0f    , 255/255.0f));
+        ::boost::assign::map_list_of
+            (0.0, TFColorType(0/255.0f, 0/255.0f, 0/255.0f, 0/255.0f))
+            (1.0, TFColorType(255/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (2.0, TFColorType(0/255.0f, 0/255.0f, 150/255.0f, 255/255.0f))
+            (3.0, TFColorType(255/255.0f, 100/255.0f, 0/255.0f, 255/255.0f))
+            (4.0, TFColorType(0/255.0f, 255/255.0f, 0/255.0f, 255/255.0f))
+            (5.0, TFColorType(255/255.0f, 255/255.0f, 0/255.0f, 255/255.0f))
+            (6.0, TFColorType(150/255.0f, 0/255.0f, 150/255.0f, 255/255.0f))
+            (7.0, TFColorType(0/255.0f, 255/255.0f, 255/255.0f, 255/255.0f))
+            (8.0, TFColorType(150/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (9.0, TFColorType(0/255.0f, 150/255.0f, 0/255.0f, 255/255.0f))
+            (10.0, TFColorType(255/255.0f, 177/255.0f, 177/255.0f, 255/255.0f))
+            (11.0, TFColorType(0/255.0f, 150/255.0f, 150/255.0f, 255/255.0f))
+            (12.0, TFColorType(255/255.0f, 0/255.0f, 255/255.0f, 255/255.0f))
+            (13.0, TFColorType(150/255.0f, 150/255.0f, 0/255.0f, 255/255.0f))
+            (14.0, TFColorType(135/255.0f, 135/255.0f, 81/255.0f, 255/255.0f))
+            (15.0, TFColorType(255/255.0f, 255/255.0f, 177/255.0f, 255/255.0f))
+            (16.0, TFColorType(177/255.0f, 177/255.0f, 255/255.0f, 255/255.0f))
+            (17.0, TFColorType(255/255.0f, 200/255.0f, 50/255.0f, 255/255.0f))
+            (18.0, TFColorType(255/255.0f, 177/255.0f, 255/255.0f, 255/255.0f))
+            (19.0, TFColorType(177/255.0f, 255/255.0f, 255/255.0f, 255/255.0f))
+            (20.0, TFColorType(255/255.0f, 50/255.0f, 50/255.0f, 255/255.0f))
+            (21.0, TFColorType(245/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (22.0, TFColorType(0/255.0f, 0/255.0f, 142/255.0f, 255/255.0f))
+            (23.0, TFColorType(245/255.0f, 95/255.0f, 0/255.0f, 255/255.0f))
+            (24.0, TFColorType(0/255.0f, 245/255.0f, 0/255.0f, 255/255.0f))
+            (25.0, TFColorType(245/255.0f, 245/255.0f, 0/255.0f, 255/255.0f))
+            (26.0, TFColorType(142/255.0f, 0/255.0f, 142/255.0f, 255/255.0f))
+            (27.0, TFColorType(0/255.0f, 245/255.0f, 245/255.0f, 255/255.0f))
+            (28.0, TFColorType(142/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (29.0, TFColorType(0/255.0f, 142/255.0f, 0/255.0f, 255/255.0f))
+            (30.0, TFColorType(245/255.0f, 169/255.0f, 169/255.0f, 255/255.0f))
+            (31.0, TFColorType(0/255.0f, 142/255.0f, 142/255.0f, 255/255.0f))
+            (32.0, TFColorType(245/255.0f, 0/255.0f, 245/255.0f, 255/255.0f))
+            (33.0, TFColorType(142/255.0f, 142/255.0f, 0/255.0f, 255/255.0f))
+            (34.0, TFColorType(169/255.0f, 245/255.0f, 169/255.0f, 255/255.0f))
+            (35.0, TFColorType(245/255.0f, 245/255.0f, 169/255.0f, 255/255.0f))
+            (36.0, TFColorType(169/255.0f, 169/255.0f, 245/255.0f, 255/255.0f))
+            (37.0, TFColorType(245/255.0f, 192/255.0f, 46/255.0f, 255/255.0f))
+            (38.0, TFColorType(245/255.0f, 169/255.0f, 245/255.0f, 255/255.0f))
+            (39.0, TFColorType(169/255.0f, 245/255.0f, 245/255.0f, 255/255.0f))
+            (40.0, TFColorType(245/255.0f, 46/255.0f, 46/255.0f, 255/255.0f))
+            (41.0, TFColorType(235/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (42.0, TFColorType(0/255.0f, 0/255.0f, 134/255.0f, 255/255.0f))
+            (43.0, TFColorType(235/255.0f, 90/255.0f, 0/255.0f, 255/255.0f))
+            (44.0, TFColorType(0/255.0f, 235/255.0f, 0/255.0f, 255/255.0f))
+            (45.0, TFColorType(235/255.0f, 235/255.0f, 0/255.0f, 255/255.0f))
+            (46.0, TFColorType(134/255.0f, 0/255.0f, 134/255.0f, 255/255.0f))
+            (47.0, TFColorType(0/255.0f, 235/255.0f, 235/255.0f, 255/255.0f))
+            (48.0, TFColorType(134/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (49.0, TFColorType(0/255.0f, 134/255.0f, 0/255.0f, 255/255.0f))
+            (50.0, TFColorType(235/255.0f, 161/255.0f, 161/255.0f, 255/255.0f))
+            (51.0, TFColorType(0/255.0f, 134/255.0f, 134/255.0f, 255/255.0f))
+            (52.0, TFColorType(235/255.0f, 0/255.0f, 235/255.0f, 255/255.0f))
+            (53.0, TFColorType(134/255.0f, 134/255.0f, 0/255.0f, 255/255.0f))
+            (54.0, TFColorType(161/255.0f, 235/255.0f, 161/255.0f, 255/255.0f))
+            (55.0, TFColorType(235/255.0f, 235/255.0f, 161/255.0f, 255/255.0f))
+            (56.0, TFColorType(161/255.0f, 161/255.0f, 235/255.0f, 255/255.0f))
+            (57.0, TFColorType(235/255.0f, 184/255.0f, 42/255.0f, 255/255.0f))
+            (58.0, TFColorType(235/255.0f, 161/255.0f, 235/255.0f, 255/255.0f))
+            (59.0, TFColorType(161/255.0f, 235/255.0f, 235/255.0f, 255/255.0f))
+            (60.0, TFColorType(235/255.0f, 42/255.0f, 42/255.0f, 255/255.0f))
+            (61.0, TFColorType(225/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (62.0, TFColorType(0/255.0f, 0/255.0f, 126/255.0f, 255/255.0f))
+            (63.0, TFColorType(225/255.0f, 85/255.0f, 0/255.0f, 255/255.0f))
+            (64.0, TFColorType(0/255.0f, 225/255.0f, 0/255.0f, 255/255.0f))
+            (65.0, TFColorType(225/255.0f, 225/255.0f, 0/255.0f, 255/255.0f))
+            (66.0, TFColorType(126/255.0f, 0/255.0f, 126/255.0f, 255/255.0f))
+            (67.0, TFColorType(0/255.0f, 225/255.0f, 225/255.0f, 255/255.0f))
+            (68.0, TFColorType(126/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (69.0, TFColorType(0/255.0f, 126/255.0f, 0/255.0f, 255/255.0f))
+            (70.0, TFColorType(225/255.0f, 153/255.0f, 153/255.0f, 255/255.0f))
+            (71.0, TFColorType(0/255.0f, 126/255.0f, 126/255.0f, 255/255.0f))
+            (72.0, TFColorType(225/255.0f, 0/255.0f, 225/255.0f, 255/255.0f))
+            (73.0, TFColorType(126/255.0f, 126/255.0f, 0/255.0f, 255/255.0f))
+            (74.0, TFColorType(153/255.0f, 225/255.0f, 153/255.0f, 255/255.0f))
+            (75.0, TFColorType(225/255.0f, 225/255.0f, 153/255.0f, 255/255.0f))
+            (76.0, TFColorType(153/255.0f, 153/255.0f, 225/255.0f, 255/255.0f))
+            (77.0, TFColorType(225/255.0f, 176/255.0f, 38/255.0f, 255/255.0f))
+            (78.0, TFColorType(225/255.0f, 153/255.0f, 225/255.0f, 255/255.0f))
+            (79.0, TFColorType(153/255.0f, 225/255.0f, 225/255.0f, 255/255.0f))
+            (80.0, TFColorType(225/255.0f, 38/255.0f, 38/255.0f, 255/255.0f))
+            (81.0, TFColorType(215/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (82.0, TFColorType(0/255.0f, 0/255.0f, 118/255.0f, 255/255.0f))
+            (83.0, TFColorType(215/255.0f, 80/255.0f, 0/255.0f, 255/255.0f))
+            (84.0, TFColorType(0/255.0f, 215/255.0f, 0/255.0f, 255/255.0f))
+            (85.0, TFColorType(215/255.0f, 215/255.0f, 0/255.0f, 255/255.0f))
+            (86.0, TFColorType(118/255.0f, 0/255.0f, 118/255.0f, 255/255.0f))
+            (87.0, TFColorType(0/255.0f, 215/255.0f, 215/255.0f, 255/255.0f))
+            (88.0, TFColorType(118/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (89.0, TFColorType(0/255.0f, 118/255.0f, 0/255.0f, 255/255.0f))
+            (90.0, TFColorType(215/255.0f, 145/255.0f, 145/255.0f, 255/255.0f))
+            (91.0, TFColorType(0/255.0f, 118/255.0f, 118/255.0f, 255/255.0f))
+            (92.0, TFColorType(215/255.0f, 0/255.0f, 215/255.0f, 255/255.0f))
+            (93.0, TFColorType(118/255.0f, 118/255.0f, 0/255.0f, 255/255.0f))
+            (94.0, TFColorType(145/255.0f, 215/255.0f, 145/255.0f, 255/255.0f))
+            (95.0, TFColorType(215/255.0f, 215/255.0f, 145/255.0f, 255/255.0f))
+            (96.0, TFColorType(145/255.0f, 145/255.0f, 215/255.0f, 255/255.0f))
+            (97.0, TFColorType(215/255.0f, 168/255.0f, 34/255.0f, 255/255.0f))
+            (98.0, TFColorType(215/255.0f, 145/255.0f, 215/255.0f, 255/255.0f))
+            (99.0, TFColorType(145/255.0f, 215/255.0f, 215/255.0f, 255/255.0f))
+            (100.0, TFColorType(215/255.0f, 34/255.0f, 34/255.0f, 255/255.0f))
+            (101.0, TFColorType(205/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (102.0, TFColorType(0/255.0f, 0/255.0f, 110/255.0f, 255/255.0f))
+            (103.0, TFColorType(205/255.0f, 75/255.0f, 0/255.0f, 255/255.0f))
+            (104.0, TFColorType(0/255.0f, 205/255.0f, 0/255.0f, 255/255.0f))
+            (105.0, TFColorType(205/255.0f, 205/255.0f, 0/255.0f, 255/255.0f))
+            (106.0, TFColorType(110/255.0f, 0/255.0f, 110/255.0f, 255/255.0f))
+            (107.0, TFColorType(0/255.0f, 205/255.0f, 205/255.0f, 255/255.0f))
+            (108.0, TFColorType(110/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (109.0, TFColorType(0/255.0f, 110/255.0f, 0/255.0f, 255/255.0f))
+            (110.0, TFColorType(205/255.0f, 137/255.0f, 137/255.0f, 255/255.0f))
+            (111.0, TFColorType(0/255.0f, 110/255.0f, 110/255.0f, 255/255.0f))
+            (112.0, TFColorType(205/255.0f, 0/255.0f, 205/255.0f, 255/255.0f))
+            (113.0, TFColorType(110/255.0f, 110/255.0f, 0/255.0f, 255/255.0f))
+            (114.0, TFColorType(137/255.0f, 205/255.0f, 137/255.0f, 255/255.0f))
+            (115.0, TFColorType(205/255.0f, 205/255.0f, 137/255.0f, 255/255.0f))
+            (116.0, TFColorType(137/255.0f, 137/255.0f, 205/255.0f, 255/255.0f))
+            (117.0, TFColorType(205/255.0f, 160/255.0f, 30/255.0f, 255/255.0f))
+            (118.0, TFColorType(205/255.0f, 137/255.0f, 205/255.0f, 255/255.0f))
+            (119.0, TFColorType(137/255.0f, 205/255.0f, 205/255.0f, 255/255.0f))
+            (120.0, TFColorType(205/255.0f, 30/255.0f, 30/255.0f, 255/255.0f))
+            (121.0, TFColorType(195/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (122.0, TFColorType(0/255.0f, 0/255.0f, 102/255.0f, 255/255.0f))
+            (123.0, TFColorType(195/255.0f, 70/255.0f, 0/255.0f, 255/255.0f))
+            (124.0, TFColorType(0/255.0f, 195/255.0f, 0/255.0f, 255/255.0f))
+            (125.0, TFColorType(195/255.0f, 195/255.0f, 0/255.0f, 255/255.0f))
+            (126.0, TFColorType(102/255.0f, 0/255.0f, 102/255.0f, 255/255.0f))
+            (127.0, TFColorType(0/255.0f, 195/255.0f, 195/255.0f, 255/255.0f))
+            (128.0, TFColorType(102/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (129.0, TFColorType(0/255.0f, 102/255.0f, 0/255.0f, 255/255.0f))
+            (130.0, TFColorType(195/255.0f, 129/255.0f, 129/255.0f, 255/255.0f))
+            (131.0, TFColorType(0/255.0f, 102/255.0f, 102/255.0f, 255/255.0f))
+            (132.0, TFColorType(195/255.0f, 0/255.0f, 195/255.0f, 255/255.0f))
+            (133.0, TFColorType(102/255.0f, 102/255.0f, 0/255.0f, 255/255.0f))
+            (134.0, TFColorType(129/255.0f, 195/255.0f, 129/255.0f, 255/255.0f))
+            (135.0, TFColorType(195/255.0f, 195/255.0f, 129/255.0f, 255/255.0f))
+            (136.0, TFColorType(129/255.0f, 129/255.0f, 195/255.0f, 255/255.0f))
+            (137.0, TFColorType(195/255.0f, 152/255.0f, 26/255.0f, 255/255.0f))
+            (138.0, TFColorType(195/255.0f, 129/255.0f, 195/255.0f, 255/255.0f))
+            (139.0, TFColorType(129/255.0f, 195/255.0f, 195/255.0f, 255/255.0f))
+            (140.0, TFColorType(195/255.0f, 26/255.0f, 26/255.0f, 255/255.0f))
+            (141.0, TFColorType(185/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (142.0, TFColorType(0/255.0f, 0/255.0f, 94/255.0f, 255/255.0f))
+            (143.0, TFColorType(185/255.0f, 65/255.0f, 0/255.0f, 255/255.0f))
+            (144.0, TFColorType(0/255.0f, 185/255.0f, 0/255.0f, 255/255.0f))
+            (145.0, TFColorType(185/255.0f, 185/255.0f, 0/255.0f, 255/255.0f))
+            (146.0, TFColorType(94/255.0f, 0/255.0f, 94/255.0f, 255/255.0f))
+            (147.0, TFColorType(0/255.0f, 185/255.0f, 185/255.0f, 255/255.0f))
+            (148.0, TFColorType(94/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (149.0, TFColorType(0/255.0f, 94/255.0f, 0/255.0f, 255/255.0f))
+            (150.0, TFColorType(185/255.0f, 121/255.0f, 121/255.0f, 255/255.0f))
+            (151.0, TFColorType(0/255.0f, 94/255.0f, 94/255.0f, 255/255.0f))
+            (152.0, TFColorType(185/255.0f, 0/255.0f, 185/255.0f, 255/255.0f))
+            (153.0, TFColorType(94/255.0f, 94/255.0f, 0/255.0f, 255/255.0f))
+            (154.0, TFColorType(121/255.0f, 185/255.0f, 121/255.0f, 255/255.0f))
+            (155.0, TFColorType(185/255.0f, 185/255.0f, 121/255.0f, 255/255.0f))
+            (156.0, TFColorType(121/255.0f, 121/255.0f, 185/255.0f, 255/255.0f))
+            (157.0, TFColorType(185/255.0f, 144/255.0f, 22/255.0f, 255/255.0f))
+            (158.0, TFColorType(185/255.0f, 121/255.0f, 185/255.0f, 255/255.0f))
+            (159.0, TFColorType(121/255.0f, 185/255.0f, 185/255.0f, 255/255.0f))
+            (160.0, TFColorType(185/255.0f, 22/255.0f, 22/255.0f, 255/255.0f))
+            (161.0, TFColorType(175/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (162.0, TFColorType(0/255.0f, 0/255.0f, 86/255.0f, 255/255.0f))
+            (163.0, TFColorType(175/255.0f, 60/255.0f, 0/255.0f, 255/255.0f))
+            (164.0, TFColorType(0/255.0f, 175/255.0f, 0/255.0f, 255/255.0f))
+            (165.0, TFColorType(175/255.0f, 175/255.0f, 0/255.0f, 255/255.0f))
+            (166.0, TFColorType(86/255.0f, 0/255.0f, 86/255.0f, 255/255.0f))
+            (167.0, TFColorType(0/255.0f, 175/255.0f, 175/255.0f, 255/255.0f))
+            (168.0, TFColorType(86/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (169.0, TFColorType(0/255.0f, 86/255.0f, 0/255.0f, 255/255.0f))
+            (170.0, TFColorType(175/255.0f, 113/255.0f, 113/255.0f, 255/255.0f))
+            (171.0, TFColorType(0/255.0f, 86/255.0f, 86/255.0f, 255/255.0f))
+            (172.0, TFColorType(175/255.0f, 0/255.0f, 175/255.0f, 255/255.0f))
+            (173.0, TFColorType(86/255.0f, 86/255.0f, 0/255.0f, 255/255.0f))
+            (174.0, TFColorType(113/255.0f, 175/255.0f, 113/255.0f, 255/255.0f))
+            (175.0, TFColorType(175/255.0f, 175/255.0f, 113/255.0f, 255/255.0f))
+            (176.0, TFColorType(113/255.0f, 113/255.0f, 175/255.0f, 255/255.0f))
+            (177.0, TFColorType(175/255.0f, 136/255.0f, 18/255.0f, 255/255.0f))
+            (178.0, TFColorType(175/255.0f, 113/255.0f, 175/255.0f, 255/255.0f))
+            (179.0, TFColorType(113/255.0f, 175/255.0f, 175/255.0f, 255/255.0f))
+            (180.0, TFColorType(175/255.0f, 18/255.0f, 18/255.0f, 255/255.0f))
+            (181.0, TFColorType(165/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (182.0, TFColorType(0/255.0f, 0/255.0f, 78/255.0f, 255/255.0f))
+            (183.0, TFColorType(165/255.0f, 55/255.0f, 0/255.0f, 255/255.0f))
+            (184.0, TFColorType(0/255.0f, 165/255.0f, 0/255.0f, 255/255.0f))
+            (185.0, TFColorType(165/255.0f, 165/255.0f, 0/255.0f, 255/255.0f))
+            (186.0, TFColorType(78/255.0f, 0/255.0f, 78/255.0f, 255/255.0f))
+            (187.0, TFColorType(0/255.0f, 165/255.0f, 165/255.0f, 255/255.0f))
+            (188.0, TFColorType(78/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (189.0, TFColorType(0/255.0f, 78/255.0f, 0/255.0f, 255/255.0f))
+            (190.0, TFColorType(165/255.0f, 105/255.0f, 105/255.0f, 255/255.0f))
+            (191.0, TFColorType(0/255.0f, 78/255.0f, 78/255.0f, 255/255.0f))
+            (192.0, TFColorType(165/255.0f, 0/255.0f, 165/255.0f, 255/255.0f))
+            (193.0, TFColorType(78/255.0f, 78/255.0f, 0/255.0f, 255/255.0f))
+            (194.0, TFColorType(105/255.0f, 165/255.0f, 105/255.0f, 255/255.0f))
+            (195.0, TFColorType(165/255.0f, 165/255.0f, 105/255.0f, 255/255.0f))
+            (196.0, TFColorType(105/255.0f, 105/255.0f, 165/255.0f, 255/255.0f))
+            (197.0, TFColorType(165/255.0f, 128/255.0f, 14/255.0f, 255/255.0f))
+            (198.0, TFColorType(165/255.0f, 105/255.0f, 165/255.0f, 255/255.0f))
+            (199.0, TFColorType(105/255.0f, 165/255.0f, 165/255.0f, 255/255.0f))
+            (200.0, TFColorType(165/255.0f, 14/255.0f, 14/255.0f, 255/255.0f))
+            (201.0, TFColorType(155/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (202.0, TFColorType(0/255.0f, 0/255.0f, 70/255.0f, 255/255.0f))
+            (203.0, TFColorType(155/255.0f, 50/255.0f, 0/255.0f, 255/255.0f))
+            (204.0, TFColorType(0/255.0f, 155/255.0f, 0/255.0f, 255/255.0f))
+            (205.0, TFColorType(155/255.0f, 155/255.0f, 0/255.0f, 255/255.0f))
+            (206.0, TFColorType(70/255.0f, 0/255.0f, 70/255.0f, 255/255.0f))
+            (207.0, TFColorType(0/255.0f, 155/255.0f, 155/255.0f, 255/255.0f))
+            (208.0, TFColorType(70/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (209.0, TFColorType(0/255.0f, 70/255.0f, 0/255.0f, 255/255.0f))
+            (210.0, TFColorType(155/255.0f, 97/255.0f, 97/255.0f, 255/255.0f))
+            (211.0, TFColorType(0/255.0f, 70/255.0f, 70/255.0f, 255/255.0f))
+            (212.0, TFColorType(155/255.0f, 0/255.0f, 155/255.0f, 255/255.0f))
+            (213.0, TFColorType(70/255.0f, 70/255.0f, 0/255.0f, 255/255.0f))
+            (214.0, TFColorType(97/255.0f, 155/255.0f, 97/255.0f, 255/255.0f))
+            (215.0, TFColorType(155/255.0f, 155/255.0f, 97/255.0f, 255/255.0f))
+            (216.0, TFColorType(97/255.0f, 97/255.0f, 155/255.0f, 255/255.0f))
+            (217.0, TFColorType(155/255.0f, 120/255.0f, 10/255.0f, 255/255.0f))
+            (218.0, TFColorType(155/255.0f, 97/255.0f, 155/255.0f, 255/255.0f))
+            (219.0, TFColorType(97/255.0f, 155/255.0f, 155/255.0f, 255/255.0f))
+            (220.0, TFColorType(155/255.0f, 10/255.0f, 10/255.0f, 255/255.0f))
+            (221.0, TFColorType(145/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (222.0, TFColorType(0/255.0f, 0/255.0f, 62/255.0f, 255/255.0f))
+            (223.0, TFColorType(145/255.0f, 45/255.0f, 0/255.0f, 255/255.0f))
+            (224.0, TFColorType(0/255.0f, 145/255.0f, 0/255.0f, 255/255.0f))
+            (225.0, TFColorType(145/255.0f, 145/255.0f, 0/255.0f, 255/255.0f))
+            (226.0, TFColorType(62/255.0f, 0/255.0f, 62/255.0f, 255/255.0f))
+            (227.0, TFColorType(0/255.0f, 145/255.0f, 145/255.0f, 255/255.0f))
+            (228.0, TFColorType(62/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (229.0, TFColorType(0/255.0f, 62/255.0f, 0/255.0f, 255/255.0f))
+            (230.0, TFColorType(145/255.0f, 89/255.0f, 89/255.0f, 255/255.0f))
+            (231.0, TFColorType(0/255.0f, 62/255.0f, 62/255.0f, 255/255.0f))
+            (232.0, TFColorType(145/255.0f, 0/255.0f, 145/255.0f, 255/255.0f))
+            (233.0, TFColorType(62/255.0f, 62/255.0f, 0/255.0f, 255/255.0f))
+            (234.0, TFColorType(89/255.0f, 145/255.0f, 89/255.0f, 255/255.0f))
+            (235.0, TFColorType(145/255.0f, 145/255.0f, 89/255.0f, 255/255.0f))
+            (236.0, TFColorType(89/255.0f, 89/255.0f, 145/255.0f, 255/255.0f))
+            (237.0, TFColorType(145/255.0f, 112/255.0f, 6/255.0f, 255/255.0f))
+            (238.0, TFColorType(145/255.0f, 89/255.0f, 145/255.0f, 255/255.0f))
+            (239.0, TFColorType(89/255.0f, 145/255.0f, 145/255.0f, 255/255.0f))
+            (240.0, TFColorType(145/255.0f, 6/255.0f, 6/255.0f, 255/255.0f))
+            (241.0, TFColorType(135/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (242.0, TFColorType(0/255.0f, 0/255.0f, 54/255.0f, 255/255.0f))
+            (243.0, TFColorType(135/255.0f, 40/255.0f, 0/255.0f, 255/255.0f))
+            (244.0, TFColorType(0/255.0f, 135/255.0f, 0/255.0f, 255/255.0f))
+            (245.0, TFColorType(135/255.0f, 135/255.0f, 0/255.0f, 255/255.0f))
+            (246.0, TFColorType(54/255.0f, 0/255.0f, 54/255.0f, 255/255.0f))
+            (247.0, TFColorType(0/255.0f, 135/255.0f, 135/255.0f, 255/255.0f))
+            (248.0, TFColorType(54/255.0f, 0/255.0f, 0/255.0f, 255/255.0f))
+            (249.0, TFColorType(0/255.0f, 54/255.0f, 0/255.0f, 255/255.0f))
+            (250.0, TFColorType(135/255.0f, 81/255.0f, 81/255.0f, 255/255.0f))
+            (251.0, TFColorType(0/255.0f, 54/255.0f, 54/255.0f, 255/255.0f))
+            (252.0, TFColorType(135/255.0f, 0/255.0f, 135/255.0f, 255/255.0f))
+            (253.0, TFColorType(54/255.0f, 54/255.0f, 0/255.0f, 255/255.0f))
+            (254.0, TFColorType(81/255.0f, 135/255.0f, 81/255.0f, 255/255.0f))
+            (255.0, TFColorType(177/255.0f, 255/255.0f, 177/255.0f, 255/255.0f));
     return dataType;
 }
 
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/TransformationMatrix3D.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/TransformationMatrix3D.cpp
index cd8bb24..6312577 100644
--- a/SrcLib/core/fwDataTools/src/fwDataTools/TransformationMatrix3D.cpp
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/TransformationMatrix3D.cpp
@@ -1,106 +1,101 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
- 
-#include <boost/numeric/ublas/matrix.hpp>
-#include <boost/numeric/ublas/lu.hpp>
-#include <boost/numeric/ublas/io.hpp>
 
 #include "fwDataTools/TransformationMatrix3D.hpp"
+#include <glm/matrix.hpp>
+#include <glm/gtc/type_ptr.hpp>
 
 namespace fwDataTools
 {
 
-bool TransformationMatrix3D::invert(::fwData::TransformationMatrix3D::sptr trf_input,
-        ::fwData::TransformationMatrix3D::sptr trf_output)
+bool TransformationMatrix3D::invert(const ::fwData::TransformationMatrix3D::csptr& _input,
+                                    ::fwData::TransformationMatrix3D::sptr& _output)
 {
-    OSLM_INFO("Inverting matrix. Input:" << std::endl << *trf_input);
-    ::boost::numeric::ublas::matrix< ::fwData::TransformationMatrix3D::TM3DType, ::boost::numeric::ublas::row_major,
-            ::fwData::TransformationMatrix3D::TMCoefArray > mx_input(4, 4, trf_input->getCRefCoefficients()), mx_output(4,
-            4, trf_output->getCRefCoefficients());
+    // Normally we should transpose matrices since GLM uses a column-major layout and FW4SPL uses row-major layout
+    // However the transposition has a cost and inversion does not care about the layout, so we skip it
+    const ::glm::dmat4x4 mat        = ::glm::make_mat4<double>(_input->getCoefficients().data());
+    const ::glm::dmat4x4 matInverse = ::glm::inverse(mat);
 
-    // create a permutation matrix for the LU-factorization
-    ::boost::numeric::ublas::permutation_matrix< std::size_t > mx_perm(mx_input.size1());
-
-    // perform LU-factorization
-    int res = ::boost::numeric::ublas::lu_factorize(mx_input, mx_perm);
-    if (res != 0)
+    auto& coefs = _output->getRefCoefficients();
+    for (size_t i = 0; i < 4; ++i)
     {
-        SLM_INFO("Cannot compute.");
-        return false;
-    }
-
-    // create identity matrix of "inverse"
-    mx_output.assign(
-            ::boost::numeric::ublas::identity_matrix< ::fwData::TransformationMatrix3D::TM3DType >(mx_input.size1()));
-
-    // backsubstitute to get the inverse
-    ::boost::numeric::ublas::lu_substitute(mx_input, mx_perm, mx_output);
-
-    for (int i = 0; i < 4; ++i)
-    {
-        for (int j = 0; j < 4; ++j)
+        const size_t rowDst          = i * 4;
+        const ::glm::length_t rowSrc = static_cast< ::glm::length_t>(i);
+        for (size_t j = 0; j < 4; ++j)
         {
-            trf_output->setCoefficient(i, j, mx_output(i, j));
+            const ::glm::length_t colSrc = static_cast< ::glm::length_t>(j);
+            coefs[rowDst+j] = matInverse[rowSrc][colSrc];
         }
     }
-    OSLM_INFO("Output:" << std::endl << *trf_output);
+
     return true;
 }
 
 // ----------------------------------------------------------------------------
 
-void TransformationMatrix3D::multiply(::fwData::TransformationMatrix3D::sptr fTrf_A,
-        ::fwData::TransformationMatrix3D::sptr fTrf_B, ::fwData::TransformationMatrix3D::sptr fTrf_C)
+void TransformationMatrix3D::multiply(const ::fwData::TransformationMatrix3D::csptr& _trfA,
+                                      const ::fwData::TransformationMatrix3D::csptr& _trfB,
+                                      ::fwData::TransformationMatrix3D::sptr& _output)
 {
-    ::boost::numeric::ublas::matrix< ::fwData::TransformationMatrix3D::TM3DType, ::boost::numeric::ublas::row_major,
-            ::fwData::TransformationMatrix3D::TMCoefArray > mx_a(4, 4, fTrf_A->getCRefCoefficients()), mx_b(4, 4,
-            fTrf_B->getCRefCoefficients()), mx_c(4, 4);
+    // Normally we should transpose matrices since GLM uses a column-major layout and FW4SPL uses row-major layout
+    // However the transposition has a cost, so it is faster to not transpose them
+    // and perform the inverse multiplication
+    const ::glm::dmat4x4 matA = ::glm::make_mat4<double>(_trfA->getCoefficients().data());
+    const ::glm::dmat4x4 matB = ::glm::make_mat4<double>(_trfB->getCoefficients().data());
 
-    mx_c = ::boost::numeric::ublas::prod(mx_a, mx_b);
+    const ::glm::dmat4x4 matC = matB * matA;
 
-    for (int i = 0; i < 4; ++i)
+    auto& coefs = _output->getRefCoefficients();
+    for (size_t i = 0; i < 4; ++i)
     {
-        for (int j = 0; j < 4; ++j)
+        const size_t rowDst          = i * 4;
+        const ::glm::length_t rowSrc = static_cast< ::glm::length_t>(i);
+        for (size_t j = 0; j < 4; ++j)
         {
-            fTrf_C->setCoefficient(i, j, mx_c(i, j));
+            const ::glm::length_t colSrc = static_cast< ::glm::length_t>(j);
+            coefs[rowDst + j] = matC[rowSrc][colSrc];
         }
     }
 }
 
 // ----------------------------------------------------------------------------
 
-void TransformationMatrix3D::identity(::fwData::TransformationMatrix3D::sptr trf)
+void TransformationMatrix3D::identity(::fwData::TransformationMatrix3D::sptr& _trf)
 {
-    for (int i = 0; i < 4; ++i)
+    for (size_t i = 0; i < 4; ++i)
     {
-        for (int j = 0; j < 4; ++j)
+        for (size_t j = 0; j < 4; ++j)
         {
-            trf->setCoefficient(i, j, i == j ? 1 : 0);
+            _trf->setCoefficient(i, j, i == j ? 1 : 0);
         }
     }
 }
 
 // ----------------------------------------------------------------------------
 
-void TransformationMatrix3D::multiply(::fwData::TransformationMatrix3D::sptr trf,
-            ::fwData::Point::sptr input, ::fwData::Point::sptr output)
+void TransformationMatrix3D::multiply(const ::fwData::TransformationMatrix3D::csptr& _trf,
+                                      const ::fwData::Point::csptr& _input, ::fwData::Point::sptr& _output)
 {
-    ::boost::numeric::ublas::matrix< ::fwData::TransformationMatrix3D::TM3DType, ::boost::numeric::ublas::row_major,
-            ::fwData::TransformationMatrix3D::TMCoefArray > mx(4, 4, trf->getCRefCoefficients());
+    // Normally we should transpose matrices since GLM uses a column-major layout and FW4SPL uses row-major layout
+    // However the transposition has a cost, so it is faster to not transpose them
+    // and perform the inverse multiplication
+    const ::glm::dmat4x4 mat = ::glm::make_mat4<double>(_trf->getCoefficients().data());
 
-    ::boost::array<double, 3> inCoord = input->getCRefCoord();
-    ::boost::numeric::ublas::vector< double > in(4), out(4);
+    const auto& inCoord = _input->getCRefCoord();
+    ::glm::dvec4 in;
     in[0] = inCoord[0];
     in[1] = inCoord[1];
     in[2] = inCoord[2];
     in[3] = 1;
 
-    out = ::boost::numeric::ublas::prod(mx, in);
-    ::boost::array<double, 3> res = {{ out[0], out[1], out[2] }};
-    output->setCoord(res);
+    ::glm::dvec4 out = in * mat;
+    std::array<double, 3> res = {{ out[0], out[1], out[2] }};
+    _output->setCoord(res);
 }
 
+// ----------------------------------------------------------------------------
+
 } // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/fieldHelper/Image.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/fieldHelper/Image.cpp
new file mode 100644
index 0000000..c2d21ef
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/fieldHelper/Image.cpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/fieldHelper/Image.hpp"
+
+namespace fwDataTools
+{
+
+namespace fieldHelper
+{
+
+const std::string Image::DATA_IS_LOCKED                 ( "DATA_IS_LOCKED" );
+
+const std::string Image::position                       ( "position" );
+
+const std::string Image::localGui                       ( "Local GUI" );
+const std::string Image::m_axialSliceCountId            ( "Axial Slice Count" );
+const std::string Image::m_frontalSliceCountId          ( "Frontal Slice Count" );
+const std::string Image::m_sagittalSliceCountId         ( "Sagittal Slice Count" );
+const std::string Image::m_axialSliceIndexId            ( "Axial Slice Index" );
+const std::string Image::m_frontalSliceIndexId          ( "Frontal Slice Index" );
+const std::string Image::m_sagittalSliceIndexId         ( "Sagittal Slice Index" );
+const std::string Image::m_transferFunctionCompositeId  ( "m_transferFunctionCompositeId" );
+const std::string Image::m_imageLandmarksId             ("m_imageLandmarksId");
+const std::string Image::m_imageDistancesId             ("m_imageDistancesId");
+const std::string Image::m_commentId                    ("m_commentId");
+const std::string Image::m_labelId                      ("m_labelId");
+const std::string Image::m_colorId                      ("m_colorId");
+const std::string Image::m_relatedServiceId             ("m_relatedServiceId");
+const std::string Image::m_imageLabelId                 ("m_imageLabelId");
+const std::string Image::m_acquisitionCountId           ("m_acquisitionCountId");
+
+const std::string Image::m_globalMatrixId               ("Global Matrix");
+const std::string Image::m_errorId                      ("Error");
+
+const std::string Image::m_roi                          ( "ROI" );
+
+} // fieldHelper
+
+}
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/fieldHelper/MedicalImageHelpers.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/fieldHelper/MedicalImageHelpers.cpp
new file mode 100644
index 0000000..0858fa4
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/fieldHelper/MedicalImageHelpers.cpp
@@ -0,0 +1,208 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/fieldHelper/MedicalImageHelpers.hpp"
+
+#include "fwDataTools/fieldHelper/Image.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Integer.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/ResectionDB.hpp>
+#include <fwData/String.hpp>
+
+#include <fwMath/MeshFunctions.hpp>
+
+namespace fwDataTools
+{
+
+namespace fieldHelper
+{
+
+//------------------------------------------------------------------------------
+
+bool MedicalImageHelpers::checkLandmarks( ::fwData::Image::sptr _pImg )
+{
+    bool fieldIsModified = false;
+
+    // Manage image landmarks
+    if ( !_pImg->getField( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId ) )
+    {
+        ::fwData::PointList::sptr pl = ::fwData::PointList::New();
+        _pImg->setField( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId, pl );
+        fieldIsModified = true;
+    }
+
+    return fieldIsModified;
+}
+
+//------------------------------------------------------------------------------
+
+bool MedicalImageHelpers::checkImageValidity( ::fwData::Image::csptr _pImg )
+{
+    SLM_TRACE_FUNC();
+
+    // Test if the image is allocated
+    bool dataImageIsAllocated = (_pImg != ::fwData::Image::sptr());
+
+    if (dataImageIsAllocated)
+    {
+        size_t nbDim = _pImg->getNumberOfDimensions();
+        dataImageIsAllocated &= nbDim > 1;
+
+        for ( size_t k = 0; dataImageIsAllocated && k < nbDim; ++k )
+        {
+            dataImageIsAllocated = dataImageIsAllocated && ( _pImg->getSize()[k] >= 1 );
+        }
+    }
+
+    return dataImageIsAllocated;
+}
+
+//------------------------------------------------------------------------------
+
+bool MedicalImageHelpers::checkImageSliceIndex( ::fwData::Image::sptr _pImg )
+{
+    SLM_ASSERT("_pImg pointer null", _pImg);
+
+    bool fieldIsModified = false;
+
+    const ::fwData::Image::SizeType& imageSize = _pImg->getSize();
+
+    ::fwData::Integer::sptr axialIdx = _pImg->getField< ::fwData::Integer >(
+        ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId );
+    ::fwData::Integer::sptr frontalIdx = _pImg->getField< ::fwData::Integer >(
+        ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId);
+    ::fwData::Integer::sptr sagittalIdx = _pImg->getField< ::fwData::Integer >(
+        ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId );
+
+    // Manage image landmarks
+    if ( !(axialIdx && frontalIdx && sagittalIdx) )
+    {
+        // Set value
+        axialIdx = ::fwData::Integer::New(-1);
+        _pImg->setField( ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, axialIdx );
+
+        frontalIdx = ::fwData::Integer::New(-1);
+        _pImg->setField( ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, frontalIdx );
+
+        sagittalIdx = ::fwData::Integer::New(-1);
+        _pImg->setField( ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, sagittalIdx );
+
+        fieldIsModified = true;
+    }
+
+
+    SLM_ASSERT (
+        "Information on image slice index is not correct, miss one of these fields : m_axialSliceIndexId, m_frontalSliceIndexId, m_sagittalSliceIndexId.",
+        axialIdx && frontalIdx && sagittalIdx
+        );
+
+    // Get value
+    if( axialIdx->value() < 0 ||  imageSize[2] < axialIdx->value() )
+    {
+        axialIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[2] / 2);
+        fieldIsModified   = true;
+    }
+
+    if( frontalIdx->value() < 0 ||  imageSize[1] < frontalIdx->value() )
+    {
+        frontalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[1] / 2);
+        fieldIsModified     = true;
+    }
+
+    if( sagittalIdx->value() < 0 ||  imageSize[0] < sagittalIdx->value() )
+    {
+        sagittalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[0] / 2);
+        fieldIsModified      = true;
+    }
+
+
+    return fieldIsModified;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Point::sptr MedicalImageHelpers::getImageSliceIndices( ::fwData::Image::sptr _pImg )
+{
+    SLM_ASSERT("_pImg pointer null", _pImg);
+
+    ::fwData::Point::sptr point = ::fwData::Point::New();
+
+    MedicalImageHelpers::checkImageSliceIndex(_pImg);
+
+    point->getRefCoord()[0] =
+        _pImg->getField< ::fwData::Integer >( ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId )->value();
+    point->getRefCoord()[1] =
+        _pImg->getField< ::fwData::Integer >( ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId  )->value();
+    point->getRefCoord()[2] =
+        _pImg->getField< ::fwData::Integer >( ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId    )->value();
+
+    return point;
+}
+
+//------------------------------------------------------------------------------
+
+bool MedicalImageHelpers::checkComment( ::fwData::Image::sptr _pImg )
+{
+    SLM_ASSERT("_pImg pointer null", _pImg);
+
+    bool fieldIsModified = false;
+
+    if ( !_pImg->getField( ::fwDataTools::fieldHelper::Image::m_commentId ) )
+    {
+        // Set value
+        ::fwData::String::sptr param = ::fwData::String::New("Original image");
+        _pImg->setField( ::fwDataTools::fieldHelper::Image::m_commentId, param );
+        fieldIsModified = true;
+    }
+
+    return fieldIsModified;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Image::sptr MedicalImageHelpers::initialize( ::fwData::Image::sptr imgSrc,
+                                                       ::fwData::Image::sptr imgToInitialize)
+{
+    SLM_ASSERT("Image source must be initialized", imgSrc);
+    SLM_ASSERT("Image source must be valid", MedicalImageHelpers::checkImageValidity(imgSrc));
+
+    if(!imgToInitialize)
+    {
+        imgToInitialize = ::fwData::Image::New();
+    }
+    ::fwData::Array::sptr imgData = imgSrc->getDataArray();
+    imgSrc->setDataArray(::fwData::Array::sptr(), false);
+
+    imgToInitialize = ::fwData::Object::copy(imgSrc);
+
+    imgSrc->setDataArray(imgData, false);
+
+    imgToInitialize->allocate();
+
+    return imgToInitialize;
+}
+
+//------------------------------------------------------------------------------
+
+bool MedicalImageHelpers::isBufNull(const ::fwData::Image::BufferType* buf, const unsigned int len)
+{
+    bool isNull;
+    const ::fwData::Image::BufferType* ucbuf = static_cast< const ::fwData::Image::BufferType*> (buf);
+    isNull = 0 == std::accumulate(
+        ucbuf,
+        ucbuf+len,
+        0,
+        bitwise_or< ::fwData::Image::BufferType >()
+        );
+    return isNull;
+}
+
+//------------------------------------------------------------------------------
+
+} // fieldHelper
+} // fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/Array.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Array.cpp
new file mode 100644
index 0000000..6602fb9
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Array.cpp
@@ -0,0 +1,185 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/Array.hpp"
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+Array::Array( ::fwData::Array::sptr array ) : m_array (array)
+{
+    SLM_ASSERT("Array ptr is null.", array);
+    m_lock = array->getBufferObject()->lock();
+}
+
+//-----------------------------------------------------------------------------
+
+Array::~Array()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void* Array::getBuffer()
+{
+    return m_lock.getBuffer();
+}
+
+//-----------------------------------------------------------------------------
+
+const void* Array::getBuffer() const
+{
+    return m_lock.getBuffer();
+}
+
+//------------------------------------------------------------------------------
+
+void Array::setBuffer(void* buf, bool takeOwnership)
+{
+    if(m_array->getIsBufferOwner())
+    {
+        if(!m_array->getBufferObject()->isEmpty())
+        {
+            m_array->getBufferObject()->destroy();
+        }
+    }
+    else
+    {
+        ::fwMemory::BufferObject::sptr newBufferObject = ::fwMemory::BufferObject::New();
+        ::fwMemory::BufferObject::sptr oldBufferObject = m_array->getBufferObject();
+        oldBufferObject->swap(newBufferObject);
+    }
+    m_array->getBufferObject()->setBuffer(buf, (buf == NULL) ? 0 : m_array->getSizeInBytes());
+    m_array->setIsBufferOwner(takeOwnership);
+}
+
+//------------------------------------------------------------------------------
+
+void Array::setBuffer(
+    void* buf,
+    bool takeOwnership,
+    const ::fwTools::Type& type,
+    const  ::fwData::Array::SizeType& size,
+    size_t nbOfComponents )
+{
+    m_array->resize( type, size, nbOfComponents, false);
+    this->setBuffer(buf, takeOwnership);
+}
+
+//-----------------------------------------------------------------------------
+
+char* Array::begin()
+{
+    void* v = this->getBuffer();
+    return static_cast<char*>(v);
+}
+
+//------------------------------------------------------------------------------
+
+char* Array::end()
+{
+    return reinterpret_cast<char*> (static_cast<char*>(this->getBuffer()) + m_array->getSizeInBytes());
+}
+//------------------------------------------------------------------------------
+
+const char* Array::begin() const
+{
+    return static_cast<const char*>(this->getBuffer());
+}
+
+//------------------------------------------------------------------------------
+
+const char* Array::end() const
+{
+    return reinterpret_cast<const char*> (static_cast<const char*>(this->getBuffer()) + m_array->getSizeInBytes());
+}
+
+//-----------------------------------------------------------------------------
+
+char* Array::getBufferPtr( const ::fwData::Array::IndexType& id, size_t component, size_t sizeOfType )
+{
+    size_t sizeOf = m_array->getType().sizeOf();
+    size_t offset = m_array->getBufferOffset(id, component, sizeOf);
+    char* item    = static_cast<char*>(this->getBuffer()) + offset;
+    return item;
+}
+
+//------------------------------------------------------------------------------
+
+const char* Array::getBufferPtr( const ::fwData::Array::IndexType& id, size_t component, size_t sizeOfType ) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    size_t offset    = m_array->getBufferOffset(id, component, sizeOf);
+    const char* item = static_cast<const char*>(this->getBuffer()) + offset;
+    return item;
+}
+
+//------------------------------------------------------------------------------
+
+void Array::setItem(const ::fwData::Array::IndexType& id, const void* value)
+{
+    size_t sizeOf   = m_array->getType().sizeOf();
+    const char* val = static_cast<const char*>(value);
+    char* item      = this->getBufferPtr(id, 0, sizeOf);
+    std::copy(val, val + m_array->getNumberOfComponents()*sizeOf, item);
+}
+//------------------------------------------------------------------------------
+
+
+void Array::setItem(const ::fwData::Array::IndexType& id, const size_t component, const void* value)
+{
+    size_t sizeOf   = m_array->getType().sizeOf();
+    const char* val = static_cast<const char*>(value);
+    char* item      = this->getBufferPtr(id, component, sizeOf);
+    std::copy(val, val + sizeOf, item);
+}
+
+
+//------------------------------------------------------------------------------
+
+void* Array::getItem(const ::fwData::Array::IndexType& id, const size_t component)
+{
+    size_t sizeOf = m_array->getType().sizeOf();
+    char* item    = this->getBufferPtr(id, component, sizeOf);
+    return item;
+}
+
+//------------------------------------------------------------------------------
+
+void Array::getItem(const ::fwData::Array::IndexType& id, void* value) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    const char* item = this->getBufferPtr(id, 0, sizeOf);
+    char* val        = static_cast<char*>(value);
+    std::copy(item, item + m_array->getNumberOfComponents()*sizeOf, val);
+}
+
+//------------------------------------------------------------------------------
+
+void Array::getItem(const ::fwData::Array::IndexType& id, const size_t component, void* value) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    const char* item = this->getBufferPtr(id, component, sizeOf);
+    char* val        = static_cast<char*>(value);
+    std::copy(item, item + m_array->getNumberOfComponents()*sizeOf, val);
+}
+
+//------------------------------------------------------------------------------
+
+::fwMemory::BufferObject::Lock Array::getLock() const
+{
+    return m_lock;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace helper
+
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/ArrayGetter.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/ArrayGetter.cpp
new file mode 100644
index 0000000..658c15f
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/ArrayGetter.cpp
@@ -0,0 +1,99 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/ArrayGetter.hpp"
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+ArrayGetter::ArrayGetter( ::fwData::Array::csptr array ) : m_array (array)
+{
+    SLM_ASSERT("Array ptr is null.", array);
+    m_lock = array->getBufferObject()->lock();
+}
+
+//-----------------------------------------------------------------------------
+
+ArrayGetter::~ArrayGetter()
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+const void* ArrayGetter::getBuffer() const
+{
+    return m_lock.getBuffer();
+}
+
+//------------------------------------------------------------------------------
+
+const char* ArrayGetter::begin() const
+{
+    return static_cast<const char*>(this->getBuffer());
+}
+
+//------------------------------------------------------------------------------
+
+const char* ArrayGetter::end() const
+{
+    return reinterpret_cast<const char*> (static_cast<const char*>(this->getBuffer()) + m_array->getSizeInBytes());
+}
+
+//-----------------------------------------------------------------------------
+
+const char* ArrayGetter::getBufferPtr( const ::fwData::Array::IndexType& id, size_t component, size_t sizeOfType ) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    size_t offset    = m_array->getBufferOffset(id, component, sizeOf);
+    const char* item = static_cast<const char*>(this->getBuffer()) + offset;
+    return item;
+}
+
+//------------------------------------------------------------------------------
+
+const void* ArrayGetter::getItem(const ::fwData::Array::IndexType& id, const size_t component) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    const char* item = this->getBufferPtr(id, component, sizeOf);
+    return item;
+}
+
+//------------------------------------------------------------------------------
+
+void ArrayGetter::getItem(const ::fwData::Array::IndexType& id, void* value) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    const char* item = this->getBufferPtr(id, 0, sizeOf);
+    char* val        = static_cast<char*>(value);
+    std::copy(item, item + m_array->getNumberOfComponents()*sizeOf, val);
+}
+
+//------------------------------------------------------------------------------
+
+void ArrayGetter::getItem(const ::fwData::Array::IndexType& id, const size_t component, void* value) const
+{
+    size_t sizeOf    = m_array->getType().sizeOf();
+    const char* item = this->getBufferPtr(id, component, sizeOf);
+    char* val        = static_cast<char*>(value);
+    std::copy(item, item + m_array->getNumberOfComponents()*sizeOf, val);
+}
+
+//------------------------------------------------------------------------------
+
+::fwMemory::BufferObject::Lock ArrayGetter::getLock() const
+{
+    return m_lock;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace helper
+
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/Composite.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Composite.cpp
new file mode 100644
index 0000000..11e94b7
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Composite.cpp
@@ -0,0 +1,142 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/Composite.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Composite.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+//-----------------------------------------------------------------------------
+
+Composite::Composite( ::fwData::Composite::wptr _composite ) :
+    m_composite ( _composite )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Composite::~Composite()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Composite::add( std::string _compositeKey, ::fwData::Object::sptr _newObject )
+{
+    OSLM_FATAL_IF( "The composite key " << _compositeKey << " does not exist in the composite, this is the key of the"
+                   "object to be added.",
+                   m_composite.lock()->find(_compositeKey) != m_composite.lock()->end() );
+
+    // Modify composite
+    m_composite.lock()->getContainer()[ _compositeKey ] = _newObject;
+
+    m_addedObjects[_compositeKey] = _newObject;
+
+}
+
+//-----------------------------------------------------------------------------
+
+void Composite::remove( std::string _compositeKey )
+{
+    OSLM_FATAL_IF( "The composite key " << _compositeKey << " does not exist in the composite, this is the key of the"
+                   "object to be removed.",
+                   m_composite.lock()->find(_compositeKey) == m_composite.lock()->end() );
+
+    // Get old object
+    ::fwData::Object::sptr objBackup = m_composite.lock()->getContainer()[ _compositeKey ];
+
+    // Modify composite
+    m_composite.lock()->getContainer().erase( _compositeKey );
+
+    m_removedObjects[_compositeKey] = objBackup;
+
+}
+
+//-----------------------------------------------------------------------------
+
+void Composite::clear()
+{
+    ::fwData::Composite::sptr composite = m_composite.lock();
+    std::vector<std::string> vectKey;
+    std::transform( composite->begin(), composite->end(),
+                    std::back_inserter(vectKey),
+                    std::bind(&::fwData::Composite::value_type::first, std::placeholders::_1) );
+
+    for(std::string key :  vectKey)
+    {
+        this->remove(key);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void Composite::swap( std::string _compositeKey, ::fwData::Object::sptr _newObject )
+{
+    OSLM_FATAL_IF( "The composite key " << _compositeKey << " does not exist in the composite, this is the key of the"
+                   "object to be swapped.",
+                   m_composite.lock()->find(_compositeKey) == m_composite.lock()->end() );
+
+
+    // Get old object
+    ::fwData::Object::sptr objBackup = m_composite.lock()->getContainer()[ _compositeKey ];
+
+    if( objBackup != _newObject )
+    {
+        // Modify composite
+        m_composite.lock()->getContainer()[ _compositeKey ] = _newObject;
+
+        m_newChangedObjects[_compositeKey] = _newObject;
+        m_oldChangedObjects[_compositeKey] = objBackup;
+    }
+    else
+    {
+        OSLM_INFO(
+            "Cannot swap this object ( "<< _compositeKey <<
+            " ) in composite because it is the same object. Do nothing (not notification)");
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void Composite::notify()
+{
+    if ( !m_addedObjects.empty() )
+    {
+        auto sig = m_composite.lock()->signal< ::fwData::Composite::AddedObjectsSignalType >(
+            ::fwData::Composite::s_ADDED_OBJECTS_SIG);
+
+        sig->asyncEmit(m_addedObjects);
+    }
+    if ( !m_newChangedObjects.empty() && !m_oldChangedObjects.empty() )
+    {
+        auto sig = m_composite.lock()->signal< ::fwData::Composite::ChangedObjectsSignalType >(
+            ::fwData::Composite::s_CHANGED_OBJECTS_SIG);
+
+        sig->asyncEmit(m_newChangedObjects, m_oldChangedObjects);
+    }
+    if ( !m_removedObjects.empty() )
+    {
+        auto sig = m_composite.lock()->signal< ::fwData::Composite::RemovedObjectsSignalType >(
+            ::fwData::Composite::s_REMOVED_OBJECTS_SIG);
+
+        sig->asyncEmit(m_removedObjects);
+    }
+    OSLM_INFO_IF("No changes were found on the composite '" + m_composite.lock()->getID() + "', nothing to notify.",
+                 m_addedObjects.empty() && m_newChangedObjects.empty() && m_removedObjects.empty());
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace helper
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/Field.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Field.cpp
new file mode 100644
index 0000000..d2ae6c6
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Field.cpp
@@ -0,0 +1,187 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#include "fwDataTools/helper/Field.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Object.hpp>
+
+#include <algorithm>
+#include <functional>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+//-----------------------------------------------------------------------------
+
+Field::Field( ::fwData::Object::sptr object )
+    : m_object ( object )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Field::~Field()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Field::setField(const fwData::Object::FieldNameType& name, fwData::Object::sptr obj)
+{
+    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
+    ::fwData::Object::sptr object = m_object.lock();
+    ::fwData::Object::sptr field  = object->getField(name);
+    if (!field)
+    {
+        m_addedFields[name] = obj;
+    }
+    else
+    {
+        m_newChangedFields[name] = obj;
+        m_oldChangedFields[name] = field;
+    }
+    object->setField(name, obj);
+}
+
+//-----------------------------------------------------------------------------
+
+void Field::setFields( const fwData::Object::FieldMapType& newFields)
+{
+    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
+    ::fwData::Object::sptr object = m_object.lock();
+    const ::fwData::Object::FieldMapType oldFields = object->getFields();
+    this->buildMessage(newFields,oldFields);
+    object->setFields(newFields);
+}
+
+//-----------------------------------------------------------------------------
+
+void Field::updateFields( const fwData::Object::FieldMapType& fieldMap)
+{
+    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
+    ::fwData::Object::sptr object = m_object.lock();
+    const ::fwData::Object::FieldMapType oldFields = object->getFields();
+    this->buildMessage(fieldMap,oldFields);
+    object->updateFields(fieldMap);
+}
+
+//-----------------------------------------------------------------------------
+
+void Field::removeField(const fwData::Object::FieldNameType& name)
+{
+    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
+    ::fwData::Object::sptr object = m_object.lock();
+    ::fwData::Object::sptr field  = object->getField(name);
+
+    if (field)
+    {
+        m_removedFields[name] = field;
+    }
+    object->removeField(name);
+}
+
+//-----------------------------------------------------------------------------
+
+void Field::notify()
+{
+    SLM_ASSERT("Field helper need a non-null object pointer", !m_object.expired());
+
+    if ( !m_addedFields.empty() )
+    {
+        auto sig = m_object.lock()->signal< ::fwData::Object::AddedFieldsSignalType >(
+            ::fwData::Object::s_ADDED_FIELDS_SIG);
+
+        sig->asyncEmit(m_addedFields);
+    }
+    if ( !m_newChangedFields.empty() && !m_oldChangedFields.empty() )
+    {
+        auto sig = m_object.lock()->signal< ::fwData::Object::ChangedFieldsSignalType >(
+            ::fwData::Object::s_CHANGED_FIELDS_SIG);
+
+        sig->asyncEmit(m_newChangedFields, m_oldChangedFields);
+    }
+    if ( !m_removedFields.empty() )
+    {
+        auto sig = m_object.lock()->signal< ::fwData::Object::RemovedFieldsSignalType >(
+            ::fwData::Object::s_REMOVED_FIELDS_SIG);
+
+        sig->asyncEmit(m_removedFields);
+    }
+    OSLM_INFO_IF("No changes were found on the fields of the object '" + m_object.lock()->getID()
+                 + "', nothing to notify.",
+                 m_addedFields.empty() && m_newChangedFields.empty() && m_removedFields.empty());
+}
+
+//-----------------------------------------------------------------------------
+
+void Field::buildMessage(const ::fwData::Object::FieldMapType& oldFields,
+                         const ::fwData::Object::FieldMapType& newFields)
+{
+    ::fwData::Object::FieldNameVectorType oldFieldNames;
+    ::fwData::Object::FieldNameVectorType newFieldNames;
+
+    std::transform(
+        oldFields.begin(), oldFields.end(),
+        std::back_inserter(oldFieldNames),
+        std::bind(&::fwData::Object::FieldMapType::value_type::first, std::placeholders::_1)
+        );
+    std::transform(
+        newFields.begin(), newFields.end(),
+        std::back_inserter(newFieldNames),
+        std::bind(&::fwData::Object::FieldMapType::value_type::first, std::placeholders::_1)
+        );
+
+    std::sort(oldFieldNames.begin(), oldFieldNames.end());
+    std::sort(newFieldNames.begin(), newFieldNames.end());
+
+    ::fwData::Object::FieldNameVectorType added;   // new - old
+    ::fwData::Object::FieldNameVectorType changed; // old & new
+    ::fwData::Object::FieldNameVectorType removed; // old - new
+
+    std::set_difference(
+        newFieldNames.begin(), newFieldNames.end(),
+        oldFieldNames.begin(), oldFieldNames.end(),
+        std::back_inserter(added)
+        );
+
+    std::set_intersection(
+        newFieldNames.begin(), newFieldNames.end(),
+        oldFieldNames.begin(), oldFieldNames.end(),
+        std::back_inserter(changed)
+        );
+
+    std::set_difference(
+        oldFieldNames.begin(), oldFieldNames.end(),
+        newFieldNames.begin(), newFieldNames.end(),
+        std::back_inserter(removed)
+        );
+
+    for(const ::fwData::Object::FieldNameVectorType::value_type& fieldName :  added)
+    {
+        m_addedFields[fieldName] = newFields.find(fieldName)->second;
+    }
+
+    for(const ::fwData::Object::FieldNameVectorType::value_type& fieldName :  changed)
+    {
+        m_newChangedFields[fieldName] = newFields.find(fieldName)->second;
+        m_oldChangedFields[fieldName] = oldFields.find(fieldName)->second;
+    }
+
+    for(const ::fwData::Object::FieldNameVectorType::value_type& fieldName :  changed)
+    {
+        m_removedFields[fieldName] = oldFields.find(fieldName)->second;
+    }
+}
+
+} // namespace helper
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/Image.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Image.cpp
new file mode 100644
index 0000000..794b600
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Image.cpp
@@ -0,0 +1,251 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/fieldHelper/Image.hpp"
+#include "fwDataTools/helper/Image.hpp"
+
+#include "fwDataTools/fieldHelper/MedicalImageHelpers.hpp"
+#include "fwDataTools/helper/Composite.hpp"
+#include "fwDataTools/helper/Field.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/TransferFunction.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+
+//-----------------------------------------------------------------------------
+
+Image::Image( ::fwData::Image::sptr image ) :
+    m_image(image),
+    m_sliceModified(false)
+{
+    if ( image )
+    {
+        m_lock = image->getDataArray()->getBufferObject()->lock();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+Image::~Image()
+{
+}
+
+//------------------------------------------------------------------------------
+
+bool Image::createLandmarks()
+{
+    bool fieldIsCreated = false;
+
+    // Manage image landmarks
+    if ( !m_image->getField( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId ) )
+    {
+        ::fwData::PointList::sptr pl = ::fwData::PointList::New();
+        m_image->setField( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId, pl );
+        fieldIsCreated = true;
+    }
+
+    return fieldIsCreated;
+}
+
+
+//------------------------------------------------------------------------------
+
+bool Image::createTransferFunctionPool()
+{
+    bool fieldIsCreated             = false;
+    const std::string poolFieldName = ::fwDataTools::fieldHelper::Image::m_transferFunctionCompositeId;
+    ::fwData::Composite::sptr tfPool;
+
+    tfPool = m_image->getField< ::fwData::Composite >(poolFieldName);
+    // Transfer functions
+    if ( !tfPool )
+    {
+        tfPool = ::fwData::Composite::New();
+
+        // Set in selected image
+        ::fwDataTools::helper::Field fieldHelper(m_image);
+        fieldHelper.setField(poolFieldName, tfPool);
+        fieldHelper.notify();
+
+        // TF pool is modified
+        fieldIsCreated = true;
+    }
+
+    const std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
+    if(tfPool->find(defaultTFName) == tfPool->end())
+    {
+        ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::createDefaultTF();
+        if (m_image->getWindowWidth() != 0 )
+        {
+            tf->setWindow( m_image->getWindowWidth() );
+            tf->setLevel( m_image->getWindowCenter() );
+        }
+        else if(::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(m_image))
+        {
+            double min, max;
+            ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(m_image, min, max);
+            ::fwData::TransferFunction::TFValuePairType wlMinMax(min, max);
+            tf->setWLMinMax(wlMinMax);
+        }
+        // Set in TFPool
+        ::fwDataTools::helper::Composite compositeHelper(tfPool);
+        compositeHelper.add(defaultTFName, tf);
+        compositeHelper.notify();
+    }
+
+    return fieldIsCreated;
+}
+
+
+//------------------------------------------------------------------------------
+
+bool Image::createImageSliceIndex()
+{
+    bool fieldIsCreated = false;
+
+    const ::fwData::Image::SizeType& imageSize = m_image->getSize();
+
+    ::fwData::Integer::sptr axialIdx = m_image->getField< ::fwData::Integer >(
+        ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId );
+    ::fwData::Integer::sptr frontalIdx = m_image->getField< ::fwData::Integer >(
+        ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId);
+    ::fwData::Integer::sptr sagittalIdx = m_image->getField< ::fwData::Integer >(
+        ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId );
+
+    // Manage image slice index
+    if ( !(axialIdx && frontalIdx && sagittalIdx) )
+    {
+        // Set value
+        axialIdx = ::fwData::Integer::New(-1);
+        m_image->setField( ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, axialIdx );
+
+        frontalIdx = ::fwData::Integer::New(-1);
+        m_image->setField( ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, frontalIdx );
+
+        sagittalIdx = ::fwData::Integer::New(-1);
+        m_image->setField( ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, sagittalIdx );
+
+        fieldIsCreated = true;
+    }
+
+
+    SLM_ASSERT (
+        "Information on image slice index is not correct, miss one of these fields : "
+        "m_axialSliceIndexId, m_frontalSliceIndexId, m_sagittalSliceIndexId.",
+        axialIdx && frontalIdx && sagittalIdx
+        );
+
+    // Get value
+    if( axialIdx->value() < 0 || static_cast< int>(imageSize[2]) < axialIdx->value() )
+    {
+        axialIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[2] / 2);
+        fieldIsCreated    = true;
+    }
+
+    if( frontalIdx->value() < 0 || static_cast< int>(imageSize[1]) < frontalIdx->value() )
+    {
+        frontalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[1] / 2);
+        fieldIsCreated      = true;
+    }
+
+    if( sagittalIdx->value() < 0 || static_cast< int>(imageSize[0]) < sagittalIdx->value() )
+    {
+        sagittalIdx->value() = static_cast< ::fwData::Integer::ValueType >(imageSize[0] / 2);
+        fieldIsCreated       = true;
+    }
+
+    m_sliceModified |= fieldIsCreated;
+    return fieldIsCreated;
+}
+
+//-----------------------------------------------------------------------------
+
+void Image::notify()
+{
+    if(m_sliceModified)
+    {
+        auto axialIdx = m_image->getField< ::fwData::Integer >(
+            ::fwDataTools::fieldHelper::Image::m_axialSliceIndexId );
+        auto frontalIdx = m_image->getField< ::fwData::Integer >(
+            ::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId);
+        auto sagittalIdx = m_image->getField< ::fwData::Integer >(
+            ::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId );
+        auto sig = m_image->signal< ::fwData::Image::SliceIndexModifiedSignalType >(
+            ::fwData::Image::s_SLICE_INDEX_MODIFIED_SIG);
+        sig->asyncEmit(axialIdx->getValue(), frontalIdx->getValue(), sagittalIdx->getValue());
+    }
+
+    auto sig = m_image->signal< ::fwData::Image::ModifiedSignalType >( ::fwData::Image::s_MODIFIED_SIG);
+    sig->asyncEmit();
+}
+
+
+//-----------------------------------------------------------------------------
+
+void* Image::getBuffer()
+{
+    return m_lock.getBuffer();
+}
+
+//------------------------------------------------------------------------------
+
+void* Image::getPixelBuffer( SizeType::value_type x, SizeType::value_type y, SizeType::value_type z )
+{
+    SizeType size    = m_image->getSize();
+    IndexType offset = x + size[0]*y + z*size[0]*size[1];
+    return this->getPixelBuffer(offset);
+}
+
+//------------------------------------------------------------------------------
+
+void* Image::getPixelBuffer( IndexType index )
+{
+    ::boost::uint8_t imagePixelSize = m_image->getType().sizeOf();
+    BufferType* buf          = static_cast < BufferType* > (this->getBuffer());
+    BufferIndexType bufIndex = index * imagePixelSize;
+    return buf + bufIndex;
+}
+
+//------------------------------------------------------------------------------
+
+void Image::setPixelBuffer( IndexType index, Image::BufferType* pixBuf)
+{
+    ::boost::uint8_t imagePixelSize = m_image->getType().sizeOf();
+    BufferType* buf = static_cast < BufferType* > (this->getPixelBuffer(index));
+
+    std::copy(pixBuf, pixBuf+imagePixelSize, buf);
+}
+
+//------------------------------------------------------------------------------
+
+const std::string Image::getPixelAsString(SizeType::value_type x,
+                                          SizeType::value_type y,
+                                          SizeType::value_type z )
+{
+    return m_image->getType().toString(this->getPixelBuffer(x,y,z));
+}
+
+//------------------------------------------------------------------------------
+
+::fwMemory::BufferObject::Lock Image::getLock() const
+{
+    return m_lock;
+}
+
+//------------------------------------------------------------------------------
+
+} // helper
+} // fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/ImageGetter.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/ImageGetter.cpp
new file mode 100644
index 0000000..dda14c6
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/ImageGetter.cpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/ImageGetter.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/TransferFunction.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+//-----------------------------------------------------------------------------
+
+ImageGetter::ImageGetter( ::fwData::Image::csptr ImageGetter )
+    : m_image(ImageGetter)
+{
+    if ( ImageGetter )
+    {
+        m_lock = ImageGetter->getDataArray()->getBufferObject()->lock();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+ImageGetter::~ImageGetter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void* ImageGetter::getBuffer() const
+{
+    return m_lock.getBuffer();
+}
+
+//------------------------------------------------------------------------------
+
+void* ImageGetter::getPixelBuffer( SizeType::value_type x, SizeType::value_type y, SizeType::value_type z ) const
+{
+    SizeType size    = m_image->getSize();
+    IndexType offset = x + size[0]*y + z*size[0]*size[1];
+    return this->getPixelBuffer(offset);
+}
+
+//------------------------------------------------------------------------------
+
+void* ImageGetter::getPixelBuffer( IndexType index ) const
+{
+    ::boost::uint8_t ImageGetterPixelSize = m_image->getType().sizeOf();
+    BufferType* buf          = static_cast < BufferType* > (this->getBuffer());
+    BufferIndexType bufIndex = index * ImageGetterPixelSize;
+    return buf + bufIndex;
+}
+
+//------------------------------------------------------------------------------
+
+const std::string ImageGetter::getPixelAsString(SizeType::value_type x,
+                                                SizeType::value_type y,
+                                                SizeType::value_type z ) const
+{
+    return m_image->getType().toString(this->getPixelBuffer(x,y,z));
+}
+
+//------------------------------------------------------------------------------
+
+} // helper
+} // fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/MedicalImageAdaptor.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/MedicalImageAdaptor.cpp
new file mode 100644
index 0000000..8128848
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/MedicalImageAdaptor.cpp
@@ -0,0 +1,556 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/MedicalImageAdaptor.hpp"
+
+#include "fwDataTools/fieldHelper/Image.hpp"
+#include "fwDataTools/fieldHelper/MedicalImageHelpers.hpp"
+#include "fwDataTools/helper/Composite.hpp"
+#include "fwDataTools/helper/Image.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Image.hpp>
+#include <fwData/TransferFunction.hpp>
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT         = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT      = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT      = "removeObjects";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_TF_POINTS_SLOT    = "updateTFPoints";
+static const ::fwCom::Slots::SlotKeyType s_UPDATE_TF_WINDOWING_SLOT = "updateTFWindowing";
+
+//------------------------------------------------------------------------------
+
+MedicalImageAdaptor::MedicalImageAdaptor()
+    : m_orientation(Z_AXIS),
+      m_tfSelectionFwID(""),
+      m_selectedTFKey("")
+{
+}
+
+//------------------------------------------------------------------------------
+
+MedicalImageAdaptor::~MedicalImageAdaptor()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::getImageSpacing(double spacing[3])
+{
+    ::fwData::Image::sptr image = this->getImage();
+
+    const ::fwData::Image::SpacingType& imSpacing = image->getSpacing();
+    std::copy(imSpacing.begin(), imSpacing.end(), spacing);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::getImageOrigin(double origin[3])
+{
+    ::fwData::Image::sptr image = this->getImage();
+
+    std::copy(image->getOrigin().begin(), image->getOrigin().end(), origin);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::getImageDataSize(int size[3])
+{
+    ::fwData::Image::sptr image = this->getImage();
+
+    const ::fwData::Image::SizeType& imSize = image->getSize();
+    std::copy(imSize.begin(), imSize.end(), size);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::getImageSize(double size[3])
+{
+    ::fwData::Image::sptr image = this->getImage();
+    double spacing[3];
+
+    const ::fwData::Image::SizeType& imSize = image->getSize();
+    std::copy(imSize.begin(), imSize.end(), size);
+    this->getImageSpacing(spacing);
+
+    size[0] *= spacing[0];
+    size[1] *= spacing[1];
+    size[2] *= spacing[2];
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::getCurrentSliceCenter(double center[3])
+{
+    ::fwData::Image::sptr image = this->getImage();
+    double imageSize[3];
+    this->getImageSize(imageSize);
+    double origin[3];
+    this->getImageOrigin(origin);
+
+    ::fwData::Integer::sptr sliceIndex[3];
+    this->getSliceIndex(sliceIndex);
+    double index[3] = {
+        static_cast<double>(sliceIndex[0]->value()),
+        static_cast<double>(sliceIndex[1]->value()),
+        static_cast<double>(sliceIndex[2]->value())
+    };
+
+    center[0] = origin[0] + (imageSize[0]-1.)/ 2.;
+    center[1] = origin[1] + (imageSize[1]-1.)/ 2.;
+    center[2] = origin[2] + (imageSize[2]-1.)/ 2.;
+
+    double spacing[3];
+    this->getImageSpacing(spacing);
+    center[m_orientation] = origin[m_orientation] + index[m_orientation]*spacing[m_orientation];
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setOrientation( MedicalImageAdaptor::Orientation orientation )
+{
+    m_orientation = orientation;
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setOrientation( int orientation )
+{
+    OSLM_ASSERT("orientation value must be  0,1 or 2 (value = " << orientation << ")",
+                orientation == 0 || orientation == 1 || orientation == 2);
+    this->setOrientation(static_cast< ::fwDataTools::helper::MedicalImageAdaptor::Orientation >(orientation));
+}
+
+//------------------------------------------------------------------------------
+
+static const int indexZ[12]   = { 0,2,4, 1,2,4,  1,3,4,0,3,4 };
+static const int indexY[12]   = { 0,2,4, 1,2,4,  1,2,5,0,2,5 };
+static const int indexX[12]   = { 0,2,4, 0,2,5,  0,3,5,0,3,4 };
+static const int* indexSet[3] = { indexX, indexY, indexZ  };
+void MedicalImageAdaptor::getPlane( double points[4][3], int sliceNumber)
+{
+    ::fwData::Image::sptr image = this->getImage();
+    double extent[6];
+    for (char i = 0; i<3; ++i )
+    {
+        extent[2*i]   = 0;
+        extent[2*i+1] = image->getSize()[i]*image->getSpacing()[i];
+    }
+    extent[2*m_orientation]   = sliceNumber*image->getSpacing()[m_orientation];
+    extent[2*m_orientation+1] = sliceNumber*image->getSpacing()[m_orientation];
+
+    const int* extentIndex = indexSet[ m_orientation ];
+    for (int p = 0; p<4; ++p)
+    {
+        for (int i = 0; i<3; ++i)
+        {
+            points[p][i] = extent[ *(extentIndex++) ];
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::sliceIndexToWorld(const int index[3], double world[3] )
+{
+    double spacing[3];
+    this->getImageSpacing(spacing);
+    double origin[3];
+    this->getImageOrigin(origin);
+    for ( int i = 0; i<3; ++i )
+    {
+        world[i] = static_cast<int>( (index[i]*spacing[i]) + 0.5*spacing[i] + origin[i] );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::worldToSliceIndex(const double world[3], int index[3] )
+{
+    double spacing[3];
+    this->getImageSpacing(spacing);
+    double origin[3];
+    this->getImageOrigin(origin);
+    for ( int i = 0; i<3; ++i )
+    {
+        // nearest integer
+        index[i] =
+            static_cast<int>( ( (world[i]-origin[i])/spacing[i] ) +
+                              ( ( (world[i]-origin[i])/spacing[i] ) >= 0 ? 0.5 : -0.5 ) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::worldToImageSliceIndex(const double world[3], int index[3] )
+{
+    int imageSize[3];
+    this->getImageDataSize(imageSize);
+    this->worldToSliceIndex(world, index);
+
+    int idval;
+    for (int i = 0; i < 3; i++)
+    {
+        int max = imageSize[i]-1;
+        idval = index[i];
+        if (idval < 0)
+        {
+            index[i] = 0;
+        }
+        else if (idval > max)
+        {
+            index[i] = max;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::getSliceIndex(::fwData::Integer::sptr index[3])
+{
+    index[0] = m_sagittalIndex;
+    index[1] = m_frontalIndex;
+    index[2] = m_axialIndex;
+}
+
+//------------------------------------------------------------------------------
+
+bool MedicalImageAdaptor::setSliceIndex(const int index[3])
+{
+    bool isModified = false;
+    ::fwData::Image::sptr image = this->getImage();
+
+    ::fwData::Integer::sptr sliceIndex[3];
+
+    this->getSliceIndex(sliceIndex);
+
+    if(    index[0] != sliceIndex[0]->value()
+           || index[1] != sliceIndex[1]->value()
+           || index[2] != sliceIndex[2]->value() )
+    {
+        sliceIndex[0]->value() = index[0];
+        sliceIndex[1]->value() = index[1];
+        sliceIndex[2]->value() = index[2];
+        isModified             = true;
+    }
+    return isModified;
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::updateImageInfos( ::fwData::Image::sptr image )
+{
+    m_weakImage  = image;
+    m_axialIndex = image->setDefaultField(::fwDataTools::fieldHelper::Image::m_axialSliceIndexId, ::fwData::Integer::New(
+                                              0));
+    m_frontalIndex = image->setDefaultField(::fwDataTools::fieldHelper::Image::m_frontalSliceIndexId, ::fwData::Integer::New(
+                                                0));
+    m_sagittalIndex = image->setDefaultField(::fwDataTools::fieldHelper::Image::m_sagittalSliceIndexId, ::fwData::Integer::New(
+                                                 0));
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::updateTransferFunction( ::fwData::Image::sptr image )
+{
+    if ( !m_tfSelectionFwID.empty() )
+    {
+        ::fwData::Composite::sptr tfSelection = m_tfSelection.lock();
+
+        OSLM_ASSERT( "The object with the fwID '" + m_tfSelectionFwID + "' doesn't exist.", tfSelection );
+        OSLM_ASSERT( "The selectedTFKey must be defined, check your configuration.", !m_selectedTFKey.empty() );
+        if ( tfSelection->find( m_selectedTFKey ) == tfSelection->end() )
+        {
+            ::fwData::TransferFunction::sptr tfGreyLevel = ::fwData::TransferFunction::createDefaultTF();
+            if (image->getWindowWidth() != 0 )
+            {
+                tfGreyLevel->setWindow( image->getWindowWidth() );
+                tfGreyLevel->setLevel( image->getWindowCenter() );
+            }
+            else if(::fwDataTools::fieldHelper::MedicalImageHelpers::checkImageValidity(image))
+            {
+                double min, max;
+                ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
+                ::fwData::TransferFunction::TFValuePairType wlMinMax(min, max);
+                tfGreyLevel->setWLMinMax(wlMinMax);
+            }
+
+            ::fwDataTools::helper::Composite compositeHelper(tfSelection);
+            compositeHelper.add(m_selectedTFKey, tfGreyLevel);
+            compositeHelper.notify();
+        }
+        m_tfSelection = tfSelection;
+    }
+    else
+    {
+        const std::string poolFieldName = ::fwDataTools::fieldHelper::Image::m_transferFunctionCompositeId;
+        ::fwData::Composite::sptr tfSelection = image->getField< ::fwData::Composite >(poolFieldName);
+
+        if ( m_tfSelection.expired() || m_tfSelection.lock() != tfSelection )
+        {
+            const std::string defaultTFName = ::fwData::TransferFunction::s_DEFAULT_TF_NAME;
+
+            ::fwDataTools::helper::Image helper(image);
+            helper.createTransferFunctionPool(); // do nothing if image tf pool already exist
+
+            tfSelection = image->getField< ::fwData::Composite >(poolFieldName);
+
+            m_selectedTFKey = defaultTFName;
+            m_tfSelection   = tfSelection;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Composite::sptr MedicalImageAdaptor::getTransferFunctionSelection() const
+{
+    return m_tfSelection.lock();
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::TransferFunction::sptr MedicalImageAdaptor::getTransferFunction() const
+{
+    return ::fwData::TransferFunction::dynamicCast((*m_tfSelection.lock())[m_selectedTFKey]);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Image::sptr MedicalImageAdaptor::getImage()
+{
+    SLM_ASSERT("Image weak pointer empty !", !m_weakImage.expired());
+    return m_weakImage.lock();
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setTFSelectionFwID( const std::string& fwid )
+{
+    m_tfSelectionFwID = fwid;
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setSelectedTFKey( const std::string& key )
+{
+    m_selectedTFKey = key;
+}
+
+//------------------------------------------------------------------------------
+
+const std::string& MedicalImageAdaptor::getTFSelectionFwID() const
+{
+    return m_tfSelectionFwID;
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setTransferFunctionSelection(fwData::Composite::wptr selection)
+{
+    m_tfSelection = selection;
+}
+
+//------------------------------------------------------------------------------
+
+const std::string& MedicalImageAdaptor::getSelectedTFKey() const
+{
+    return m_selectedTFKey;
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::parseTFConfig( ::fwRuntime::ConfigurationElement::sptr configuration )
+{
+    SLM_ASSERT("The analyzed configuration is not conformed.", configuration->getName() == "config");
+    if ( configuration->hasAttribute("selectedTFKey") )
+    {
+        m_selectedTFKey = configuration->getAttributeValue("selectedTFKey");
+        SLM_FATAL_IF("'selectedTFKey' must not be empty", m_selectedTFKey.empty());
+    }
+    if ( configuration->hasAttribute("tfSelectionFwID") )
+    {
+        m_tfSelectionFwID = configuration->getAttributeValue("tfSelectionFwID");
+        SLM_FATAL_IF("'tfSelectionFwID' must not be empty", m_tfSelectionFwID.empty());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+double MedicalImageAdaptor::getWindow() const
+{
+    return this->getTransferFunction()->getWindow();
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setWindow( double window )
+{
+    this->getTransferFunction()->setWindow( window );
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setWindowLevel( double windowMin, double windowMax )
+{
+    ::fwData::TransferFunction::TFValuePairType minMax(windowMin, windowMax);
+    this->getTransferFunction()->setWLMinMax( minMax );
+}
+
+//------------------------------------------------------------------------------
+
+double MedicalImageAdaptor::getLevel() const
+{
+    return this->getTransferFunction()->getLevel();
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::setLevel( double level )
+{
+    this->getTransferFunction()->setLevel( level );
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::installTFConnections()
+{
+    ::fwData::Composite::sptr tfComposite = this->getTransferFunctionSelection();
+    SLM_ASSERT( "Missing transfer function selection composite",tfComposite);
+
+    ::fwCom::Connection connection;
+    connection = tfComposite->signal(::fwData::Composite::s_ADDED_OBJECTS_SIG)->connect(m_slotAddedObjects);
+    m_tfSelectionConnections.addConnection(connection);
+    connection = tfComposite->signal(::fwData::Composite::s_CHANGED_OBJECTS_SIG)->connect(m_slotChangedObjects);
+    m_tfSelectionConnections.addConnection(connection);
+    connection = tfComposite->signal(::fwData::Composite::s_REMOVED_OBJECTS_SIG)->connect(m_slotRemovedObjects);
+    m_tfSelectionConnections.addConnection(connection);
+
+    ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
+
+    connection = tf->signal(::fwData::TransferFunction::s_POINTS_MODIFIED_SIG)->connect(m_slotUpdateTFPoints);
+    m_tfConnections.addConnection(connection);
+    connection = tf->signal(::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG)->connect(m_slotUpdateTFWindowing);
+    m_tfConnections.addConnection(connection);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::removeTFConnections()
+{
+    m_tfSelectionConnections.disconnect();
+    m_tfConnections.disconnect();
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::addObjects(::fwData::Composite::ContainerType objects)
+{
+    ::fwData::Composite::iterator iter = objects.find(this->getSelectedTFKey());
+    if( iter != objects.end())
+    {
+        ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
+        ::fwCom::Connection connection;
+        connection = tf->signal(::fwData::TransferFunction::s_POINTS_MODIFIED_SIG)->connect(
+            m_slotUpdateTFPoints);
+        m_tfConnections.addConnection(connection);
+        connection = tf->signal(::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG)->connect(
+            m_slotUpdateTFWindowing);
+        m_tfConnections.addConnection(connection);
+
+        this->updateTFPoints();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::changeObjects(::fwData::Composite::ContainerType newObjects,
+                                        ::fwData::Composite::ContainerType oldObjects)
+{
+    ::fwData::Composite::iterator iter = newObjects.find(this->getSelectedTFKey());
+    if( iter != newObjects.end())
+    {
+        m_tfConnections.disconnect();
+        ::fwData::TransferFunction::sptr tf = this->getTransferFunction();
+        ::fwCom::Connection connection;
+        connection = tf->signal(::fwData::TransferFunction::s_POINTS_MODIFIED_SIG)->connect(
+            m_slotUpdateTFPoints);
+        m_tfConnections.addConnection(connection);
+        connection = tf->signal(::fwData::TransferFunction::s_WINDOWING_MODIFIED_SIG)->connect(
+            m_slotUpdateTFWindowing);
+        m_tfConnections.addConnection(connection);
+
+        this->updateTFPoints();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::removeObjects(::fwData::Composite::ContainerType objects)
+{
+    ::fwData::Composite::iterator iter = objects.find(this->getSelectedTFKey());
+    if( iter != objects.end())
+    {
+        m_tfConnections.disconnect();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::installTFSlots(::fwCom::HasSlots* hasslots)
+{
+    m_slotAddedObjects      = hasslots->newSlot(s_ADD_OBJECTS_SLOT, &MedicalImageAdaptor::addObjects, this);
+    m_slotChangedObjects    = hasslots->newSlot(s_CHANGE_OBJECTS_SLOT, &MedicalImageAdaptor::changeObjects, this);
+    m_slotRemovedObjects    = hasslots->newSlot(s_REMOVE_OBJECTS_SLOT, &MedicalImageAdaptor::removeObjects, this);
+    m_slotUpdateTFPoints    = hasslots->newSlot(s_UPDATE_TF_POINTS_SLOT, &MedicalImageAdaptor::updateTFPoints, this);
+    m_slotUpdateTFWindowing =
+        hasslots->newSlot(s_UPDATE_TF_WINDOWING_SLOT, &MedicalImageAdaptor::updateTFWindowing, this);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::updateTFPoints()
+{
+    this->updatingTFPoints();
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::updateTFWindowing(double window, double level)
+{
+    this->updatingTFWindowing(window, level);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::updatingTFPoints()
+{
+    SLM_ASSERT("This methods (updatingTFPoints) must be reimplemented in subclass to manage TF modifications", false);
+}
+
+//------------------------------------------------------------------------------
+
+void MedicalImageAdaptor::updatingTFWindowing(double window, double level)
+{
+    SLM_ASSERT("This methods (updatingTFWindowing) must be reimplemented in subclass to manage TF modifications",
+               false);
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace helper
+
+} //namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/Mesh.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Mesh.cpp
new file mode 100644
index 0000000..877efda
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Mesh.cpp
@@ -0,0 +1,408 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/Mesh.hpp"
+
+#include <fwMath/MeshFunctions.hpp>
+
+#include <boost/assign/list_of.hpp>
+
+using namespace boost::assign;
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+#define POINT_REALLOC_STEP 1000
+#define CELL_REALLOC_STEP 1000
+#define CELLDATA_REALLOC_STEP 1000
+
+Mesh::Mesh( ::fwData::Mesh::sptr mesh ) : m_mesh (mesh)
+{
+    SLM_ASSERT("Mesh ptr is null.", mesh);
+    this->updateLock();
+}
+
+//-----------------------------------------------------------------------------
+
+Mesh::~Mesh()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Mesh::updateLock()
+{
+    SLM_ASSERT("Mesh ptr is null.", m_mesh);
+    m_helperPoints          = ::fwDataTools::helper::Array::New(m_mesh->getPointsArray());
+    m_helperCellTypes       = ::fwDataTools::helper::Array::New(m_mesh->getCellTypesArray());
+    m_helperCellData        = ::fwDataTools::helper::Array::New(m_mesh->getCellDataArray());
+    m_helperCellDataOffsets = ::fwDataTools::helper::Array::New(m_mesh->getCellDataOffsetsArray());
+
+    ::fwData::Array::sptr pointColors    = m_mesh->getPointColorsArray();
+    ::fwData::Array::sptr cellColors     = m_mesh->getCellColorsArray();
+    ::fwData::Array::sptr pointNormals   = m_mesh->getPointNormalsArray();
+    ::fwData::Array::sptr cellNormals    = m_mesh->getCellNormalsArray();
+    ::fwData::Array::sptr pointTexCoords = m_mesh->getPointTexCoordsArray();
+    ::fwData::Array::sptr cellTexCoords  = m_mesh->getCellTexCoordsArray();
+
+    if(pointColors)
+    {
+        m_helperPointColors = ::fwDataTools::helper::Array::New(pointColors);
+    }
+    if(cellColors)
+    {
+        m_helperCellColors = ::fwDataTools::helper::Array::New(cellColors);
+    }
+    if(pointNormals)
+    {
+        m_helperPointNormals = ::fwDataTools::helper::Array::New(pointNormals);
+    }
+    if(cellNormals)
+    {
+        m_helperCellNormals = ::fwDataTools::helper::Array::New(cellNormals);
+    }
+    if(pointTexCoords)
+    {
+        m_helperPointTexCoords = ::fwDataTools::helper::Array::New(pointTexCoords);
+    }
+    if(cellTexCoords)
+    {
+        m_helperCellTexCoords = ::fwDataTools::helper::Array::New(cellTexCoords);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextPoint(const ::fwData::Mesh::PointValueType p[3]) throw(::fwData::Exception)
+{
+    ::fwData::Mesh::Id nbPoints  = m_mesh->getNumberOfPoints();
+    ::fwData::Array::sptr points = m_mesh->getPointsArray();
+    size_t allocatedPts = points->empty() ? 0 : points->getSize().at(0);
+    if( allocatedPts <= nbPoints )
+    {
+        points->resize(list_of(allocatedPts + POINT_REALLOC_STEP), true);
+    }
+    m_helperPoints->setItem(list_of(nbPoints), p);
+    m_mesh->setNumberOfPoints(nbPoints+1);
+    return nbPoints;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextPoint(::fwData::Mesh::PointValueType x,
+                                         ::fwData::Mesh::PointValueType y,
+                                         ::fwData::Mesh::PointValueType z) throw(::fwData::Exception)
+{
+    const ::fwData::Mesh::PointValueType p[3] = {x,y,z};
+    return this->insertNextPoint(p);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setPoint(::fwData::Mesh::Id id, const ::fwData::Mesh::PointValueType p[3])
+{
+    m_helperPoints->setItem(list_of(id), p);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setPoint(::fwData::Mesh::Id id,
+                    ::fwData::Mesh::PointValueType x,
+                    ::fwData::Mesh::PointValueType y,
+                    ::fwData::Mesh::PointValueType z )
+{
+    const ::fwData::Mesh::PointValueType p[3] = {x,y,z};
+    this->setPoint(id, p);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setPointColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4])
+{
+    m_helperPointColors->setItem(list_of(id), c);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setCellColor(::fwData::Mesh::Id id, const ::fwData::Mesh::ColorValueType c[4])
+{
+    m_helperCellColors->setItem(list_of(id), c);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setPointNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3])
+{
+    m_helperPointNormals->setItem(list_of(id), n);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setCellNormal(::fwData::Mesh::Id id, const ::fwData::Mesh::NormalValueType n[3])
+{
+    m_helperCellNormals->setItem(list_of(id), n);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setPointTexCoord(::fwData::Mesh::Id id, const ::fwData::Mesh::TexCoordValueType t[2])
+{
+    m_helperPointTexCoords->setItem(list_of(id), t);
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::setCellTexCoord(::fwData::Mesh::Id id, const ::fwData::Mesh::TexCoordValueType t[2])
+{
+    m_helperCellTexCoords->setItem(list_of(id), t);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellTypesEnum type,
+                                        const ::fwData::Mesh::CellValueType* cell,
+                                        size_t nb) throw(::fwData::Exception)
+{
+    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'NO_CELL'",
+               type != ::fwData::Mesh::NO_CELL || nb == 0);
+    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'POINT'",
+               type != ::fwData::Mesh::POINT || nb == 1);
+    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'EDGE'",
+               type != ::fwData::Mesh::EDGE || nb == 2);
+    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'TRIANGLE'",
+               type != ::fwData::Mesh::TRIANGLE || nb == 3);
+    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'QUAD'",
+               type != ::fwData::Mesh::QUAD || nb == 4);
+    SLM_ASSERT("Bad number of points ("<< nb << ") for cell type: 'POLY'",
+               type != ::fwData::Mesh::POLY || nb > 4);
+
+    ::fwData::Mesh::Id cellsDataSize      = m_mesh->getCellDataSize();
+    ::fwData::Mesh::Id nbCells            = m_mesh->getNumberOfCells();
+    ::fwData::Array::sptr cellTypes       = m_mesh->getCellTypesArray();
+    ::fwData::Array::sptr cellDataOffsets = m_mesh->getCellDataOffsetsArray();
+    ::fwData::Array::sptr cellData        = m_mesh->getCellDataArray();
+
+    size_t allocatedCellTypes       = cellTypes->empty() ? 0 : cellTypes->getSize().at(0);
+    size_t allocatedCellDataOffsets = cellDataOffsets->empty() ? 0 : cellDataOffsets->getSize().at(0);
+
+    if( allocatedCellTypes <= nbCells )
+    {
+        cellTypes->resize(list_of(allocatedCellTypes + CELL_REALLOC_STEP), true);
+    }
+    if( allocatedCellDataOffsets <= nbCells )
+    {
+        cellDataOffsets->resize(list_of(allocatedCellDataOffsets + CELL_REALLOC_STEP), true);
+    }
+
+
+    size_t allocatedCellData = cellData->empty() ? 0 : cellData->getSize().at(0);
+
+    if( allocatedCellData <= cellsDataSize + nb )
+    {
+        cellData->resize(list_of(allocatedCellData + CELLDATA_REALLOC_STEP), true);
+    }
+
+
+    const ::fwData::Mesh::CellTypes t[1] = {static_cast< ::fwData::Mesh::CellTypes >(type)};
+    m_helperCellTypes->setItem(list_of(nbCells), t);
+
+    ::fwData::Mesh::CellValueType* buf = reinterpret_cast< ::fwData::Mesh::CellValueType* >(
+        m_helperCellData->getBufferPtr(list_of(cellsDataSize), 0, sizeof(::fwData::Mesh::CellValueType))
+        );
+    std::copy(cell, cell+nb, buf);
+
+    const ::fwData::Mesh::CellDataOffsetType id[1] = {cellsDataSize};
+    m_helperCellDataOffsets->setItem(list_of(nbCells), id);
+
+
+    cellsDataSize += nb;
+    m_mesh->setCellDataSize(cellsDataSize);
+    m_mesh->setNumberOfCells(nbCells + 1);
+    return nbCells;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p) throw(::fwData::Exception)
+{
+    ::fwData::Mesh::CellValueType point[1] = {p};
+    return this->insertNextCell(::fwData::Mesh::POINT, point, 1);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p1,
+                                        ::fwData::Mesh::CellValueType p2) throw(::fwData::Exception)
+{
+    ::fwData::Mesh::CellValueType p[2] = {p1, p2};
+    return this->insertNextCell(::fwData::Mesh::EDGE, p, 2);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p1,
+                                        ::fwData::Mesh::CellValueType p2,
+                                        ::fwData::Mesh::CellValueType p3) throw(::fwData::Exception)
+{
+    ::fwData::Mesh::CellValueType p[3] = {p1, p2, p3};
+    return this->insertNextCell(::fwData::Mesh::TRIANGLE, p, 3);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::Id Mesh::insertNextCell(::fwData::Mesh::CellValueType p1,
+                                        ::fwData::Mesh::CellValueType p2,
+                                        ::fwData::Mesh::CellValueType p3,
+                                        ::fwData::Mesh::CellValueType p4) throw(::fwData::Exception)
+{
+    ::fwData::Mesh::CellValueType p[4] = {p1, p2, p3, p4};
+    return this->insertNextCell(::fwData::Mesh::QUAD, p, 4);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::PointsMultiArrayType Mesh::getPoints() const
+{
+    return ::fwData::Mesh::PointsMultiArrayType(
+        static_cast< ::fwData::Mesh::PointsMultiArrayType::element* >(m_helperPoints->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][3]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::CellTypesMultiArrayType Mesh::getCellTypes() const
+{
+    return ::fwData::Mesh::CellTypesMultiArrayType(
+        static_cast< ::fwData::Mesh::CellTypesMultiArrayType::element*> (m_helperCellTypes->getBuffer()),
+        boost::extents[m_mesh->getNumberOfCells()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::CellDataMultiArrayType Mesh::getCellData() const
+{
+    return ::fwData::Mesh::CellDataMultiArrayType(
+        static_cast< ::fwData::Mesh::CellDataMultiArrayType::element* >(m_helperCellData->getBuffer()),
+        ::boost::extents[m_mesh->getCellDataSize()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::CellDataOffsetsMultiArrayType Mesh::getCellDataOffsets() const
+{
+    return ::fwData::Mesh::CellDataOffsetsMultiArrayType(
+        static_cast< ::fwData::Mesh::CellDataOffsetsMultiArrayType::element*>(m_helperCellDataOffsets->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::PointColorsMultiArrayType Mesh::getPointColors() const
+{
+    ::fwData::Array::sptr pointColors = m_mesh->getPointColorsArray();
+    return ::fwData::Mesh::PointColorsMultiArrayType(
+        static_cast< ::fwData::Mesh::PointColorsMultiArrayType::element*>(m_helperPointColors->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][pointColors->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::CellColorsMultiArrayType Mesh::getCellColors() const
+{
+    ::fwData::Array::sptr cellColors = m_mesh->getCellColorsArray();
+    return ::fwData::Mesh::CellColorsMultiArrayType(
+        static_cast< ::fwData::Mesh::CellColorsMultiArrayType::element*>(m_helperCellColors->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()][cellColors->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::PointNormalsMultiArrayType Mesh::getPointNormals() const
+{
+    ::fwData::Array::sptr pointNormals = m_mesh->getPointNormalsArray();
+    return ::fwData::Mesh::PointNormalsMultiArrayType(
+        static_cast< ::fwData::Mesh::PointNormalsMultiArrayType::element*>(m_helperPointNormals->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][pointNormals->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::CellNormalsMultiArrayType Mesh::getCellNormals() const
+{
+    ::fwData::Array::sptr cellNormals = m_mesh->getCellNormalsArray();
+    return ::fwData::Mesh::CellNormalsMultiArrayType(
+        static_cast< ::fwData::Mesh::CellNormalsMultiArrayType::element*>(m_helperCellNormals->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()][cellNormals->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::PointTexCoordsMultiArrayType Mesh::getPointTexCoords() const
+{
+    ::fwData::Array::sptr pointTexCoords = m_mesh->getPointTexCoordsArray();
+    return ::fwData::Mesh::PointTexCoordsMultiArrayType(
+        static_cast< ::fwData::Mesh::PointTexCoordsMultiArrayType::element*>(m_helperPointTexCoords->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][pointTexCoords->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::CellTexCoordsMultiArrayType Mesh::getCellTexCoords() const
+{
+    ::fwData::Array::sptr cellTexCoords = m_mesh->getCellTexCoordsArray();
+    return ::fwData::Mesh::CellTexCoordsMultiArrayType(
+        static_cast< ::fwData::Mesh::CellTexCoordsMultiArrayType::element*>(m_helperCellTexCoords->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()][cellTexCoords->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::csptr Mesh::getMesh() const
+{
+    return m_mesh;
+}
+
+//------------------------------------------------------------------------------
+
+bool Mesh::isClosed()
+{
+    bool isClosed = false;
+
+    ::fwData::Mesh::Id cellDataSize = m_mesh->getCellDataSize();
+    ::fwData::Mesh::Id nbOfCells    = m_mesh->getNumberOfCells();
+
+    ::fwData::Mesh::CellValueType* cellDataBegin =
+        m_helperCellData->begin< ::fwData::Mesh::CellValueType >();
+    ::fwData::Mesh::CellValueType* cellDataEnd               = cellDataBegin + cellDataSize;
+    ::fwData::Mesh::CellDataOffsetType* cellDataOffsetsBegin =
+        m_helperCellDataOffsets->begin< ::fwData::Mesh::CellDataOffsetType >();
+    ::fwData::Mesh::CellDataOffsetType* cellDataOffsetsEnd = cellDataOffsetsBegin + nbOfCells;
+    ::fwData::Mesh::CellTypes* cellTypesBegin              = m_helperCellTypes->begin< ::fwData::Mesh::CellTypes >();
+
+    isClosed = ::fwMath::isBorderlessSurface(cellDataBegin,
+                                             cellDataEnd, cellDataOffsetsBegin,
+                                             cellDataOffsetsEnd, cellTypesBegin );
+    return isClosed;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace helper
+
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/MeshGetter.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/MeshGetter.cpp
new file mode 100644
index 0000000..c104ae0
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/MeshGetter.cpp
@@ -0,0 +1,213 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/MeshGetter.hpp"
+
+#include <fwMath/MeshFunctions.hpp>
+
+#include <boost/assign/list_of.hpp>
+
+using namespace boost::assign;
+
+namespace fwDataTools
+{
+
+namespace helper
+{
+
+#define POINT_REALLOC_STEP 1000
+#define CELL_REALLOC_STEP 1000
+#define CELLDATA_REALLOC_STEP 1000
+
+MeshGetter::MeshGetter( ::fwData::Mesh::csptr mesh ) : m_mesh (mesh)
+{
+    typedef::fwDataTools::helper::ArrayGetter ArrayGetter;
+    SLM_ASSERT("Mesh ptr is null.", mesh);
+
+    SLM_ASSERT("Mesh ptr is null.", m_mesh);
+    m_helperPoints          = ArrayGetter::uptr( new ArrayGetter(m_mesh->getPointsArray()));
+    m_helperCellTypes       = ArrayGetter::uptr( new ArrayGetter(m_mesh->getCellTypesArray()));
+    m_helperCellData        = ArrayGetter::uptr( new ArrayGetter(m_mesh->getCellDataArray()));
+    m_helperCellDataOffsets = ArrayGetter::uptr( new ArrayGetter(m_mesh->getCellDataOffsetsArray()));
+
+    ::fwData::Array::sptr pointColors    = m_mesh->getPointColorsArray();
+    ::fwData::Array::sptr cellColors     = m_mesh->getCellColorsArray();
+    ::fwData::Array::sptr pointNormals   = m_mesh->getPointNormalsArray();
+    ::fwData::Array::sptr cellNormals    = m_mesh->getCellNormalsArray();
+    ::fwData::Array::sptr pointTexCoords = m_mesh->getPointTexCoordsArray();
+    ::fwData::Array::sptr cellTexCoords  = m_mesh->getCellTexCoordsArray();
+
+    if(pointColors)
+    {
+        m_helperPointColors = ArrayGetter::uptr( new ArrayGetter(pointColors));
+    }
+    if(cellColors)
+    {
+        m_helperCellColors = ArrayGetter::uptr( new ArrayGetter(cellColors));
+    }
+    if(pointNormals)
+    {
+        m_helperPointNormals = ArrayGetter::uptr( new ArrayGetter(pointNormals));
+    }
+    if(cellNormals)
+    {
+        m_helperCellNormals = ArrayGetter::uptr( new ArrayGetter(cellNormals));
+    }
+    if(pointTexCoords)
+    {
+        m_helperPointTexCoords = ArrayGetter::uptr( new ArrayGetter(pointTexCoords));
+    }
+    if(cellTexCoords)
+    {
+        m_helperCellTexCoords = ArrayGetter::uptr( new ArrayGetter(cellTexCoords));
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+MeshGetter::~MeshGetter()
+{
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstPointsMultiArrayType MeshGetter::getPoints() const
+{
+    return ::fwData::Mesh::ConstPointsMultiArrayType(
+        static_cast< const ::fwData::Mesh::PointsMultiArrayType::element* >(m_helperPoints->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][3]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstCellTypesMultiArrayType MeshGetter::getCellTypes() const
+{
+    return ::fwData::Mesh::ConstCellTypesMultiArrayType(
+        static_cast< const ::fwData::Mesh::CellTypesMultiArrayType::element*> (m_helperCellTypes->getBuffer()),
+        boost::extents[m_mesh->getNumberOfCells()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstCellDataMultiArrayType MeshGetter::getCellData() const
+{
+    return ::fwData::Mesh::ConstCellDataMultiArrayType(
+        static_cast< const ::fwData::Mesh::CellDataMultiArrayType::element* >(m_helperCellData->getBuffer()),
+        ::boost::extents[m_mesh->getCellDataSize()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstCellDataOffsetsMultiArrayType MeshGetter::getCellDataOffsets() const
+{
+    return ::fwData::Mesh::ConstCellDataOffsetsMultiArrayType(
+        static_cast< const ::fwData::Mesh::CellDataOffsetsMultiArrayType::element*>(m_helperCellDataOffsets->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstPointColorsMultiArrayType MeshGetter::getPointColors() const
+{
+    ::fwData::Array::sptr pointColors = m_mesh->getPointColorsArray();
+    return ::fwData::Mesh::ConstPointColorsMultiArrayType(
+        static_cast< const ::fwData::Mesh::PointColorsMultiArrayType::element*>(m_helperPointColors->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][pointColors->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstCellColorsMultiArrayType MeshGetter::getCellColors() const
+{
+    ::fwData::Array::sptr cellColors = m_mesh->getCellColorsArray();
+    return ::fwData::Mesh::ConstCellColorsMultiArrayType(
+        static_cast< const ::fwData::Mesh::CellColorsMultiArrayType::element*>(m_helperCellColors->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()][cellColors->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstPointNormalsMultiArrayType MeshGetter::getPointNormals() const
+{
+    ::fwData::Array::sptr pointNormals = m_mesh->getPointNormalsArray();
+    return ::fwData::Mesh::ConstPointNormalsMultiArrayType(
+        static_cast< const ::fwData::Mesh::PointNormalsMultiArrayType::element*>(m_helperPointNormals->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][pointNormals->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstCellNormalsMultiArrayType MeshGetter::getCellNormals() const
+{
+    ::fwData::Array::sptr cellNormals = m_mesh->getCellNormalsArray();
+    return ::fwData::Mesh::ConstCellNormalsMultiArrayType(
+        static_cast< const ::fwData::Mesh::CellNormalsMultiArrayType::element*>(m_helperCellNormals->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()][cellNormals->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstPointTexCoordsMultiArrayType MeshGetter::getPointTexCoords() const
+{
+    ::fwData::Array::sptr pointTexCoords = m_mesh->getPointTexCoordsArray();
+    return ::fwData::Mesh::ConstPointTexCoordsMultiArrayType(
+        static_cast< const ::fwData::Mesh::PointTexCoordsMultiArrayType::element*>(m_helperPointTexCoords->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfPoints()][pointTexCoords->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::ConstCellTexCoordsMultiArrayType MeshGetter::getCellTexCoords() const
+{
+    ::fwData::Array::sptr cellTexCoords = m_mesh->getCellTexCoordsArray();
+    return ::fwData::Mesh::ConstCellTexCoordsMultiArrayType(
+        static_cast< const ::fwData::Mesh::CellTexCoordsMultiArrayType::element*>(m_helperCellTexCoords->getBuffer()),
+        ::boost::extents[m_mesh->getNumberOfCells()][cellTexCoords->getNumberOfComponents()]
+        );
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::csptr MeshGetter::getMesh() const
+{
+    return m_mesh;
+}
+
+//------------------------------------------------------------------------------
+
+bool MeshGetter::isClosed()
+{
+    bool isClosed = false;
+
+    ::fwData::Mesh::Id cellDataSize = m_mesh->getCellDataSize();
+    ::fwData::Mesh::Id nbOfCells    = m_mesh->getNumberOfCells();
+
+    auto cellDataBegin        = m_helperCellData->begin< ::fwData::Mesh::CellValueType >();
+    auto cellDataEnd          = cellDataBegin + cellDataSize;
+    auto cellDataOffsetsBegin = m_helperCellDataOffsets->begin< ::fwData::Mesh::CellDataOffsetType >();
+    auto cellDataOffsetsEnd   = cellDataOffsetsBegin + nbOfCells;
+    auto cellTypesBegin       = m_helperCellTypes->begin< ::fwData::Mesh::CellTypes >();
+
+    isClosed = ::fwMath::isBorderlessSurface(cellDataBegin,
+                                             cellDataEnd, cellDataOffsetsBegin,
+                                             cellDataOffsetsEnd, cellTypesBegin );
+    return isClosed;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace helper
+
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/src/fwDataTools/helper/Vector.cpp b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Vector.cpp
new file mode 100644
index 0000000..32102ce
--- /dev/null
+++ b/SrcLib/core/fwDataTools/src/fwDataTools/helper/Vector.cpp
@@ -0,0 +1,100 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDataTools/helper/Vector.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Vector.hpp>
+
+#include <boost/bind.hpp>
+
+namespace fwDataTools
+{
+namespace helper
+{
+
+//-----------------------------------------------------------------------------
+
+Vector::Vector( ::fwData::Vector::wptr _vector ) :
+    m_vector ( _vector )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Vector::~Vector()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Vector::add( ::fwData::Object::sptr _newObject )
+{
+    ::fwData::Vector::sptr vector = m_vector.lock();
+    OSLM_ASSERT( "The object " << _newObject->getID() << " must not exist in vector.",
+                 std::find(vector->begin(), vector->end(), _newObject) == vector->end());
+
+    // Modify vector
+    vector->getContainer().push_back(_newObject );
+
+    m_addedObjects.push_back(_newObject);
+}
+
+//-----------------------------------------------------------------------------
+
+void Vector::remove( ::fwData::Object::sptr _oldObject )
+{
+    ::fwData::Vector::sptr vector   = m_vector.lock();
+    ::fwData::Vector::iterator iter = std::find(vector->begin(), vector->end(), _oldObject);
+    OSLM_ASSERT( "The object " << _oldObject->getID() << " must exist in vector.",
+                 iter != vector->end());
+
+    // Modify vector
+    vector->getContainer().erase( iter );
+
+    m_removedObjects.push_back(_oldObject);
+
+}
+
+//-----------------------------------------------------------------------------
+
+void Vector::clear()
+{
+    ::fwData::Vector::sptr vector = m_vector.lock();
+
+    while (!vector->empty())
+    {
+        this->remove(vector->front());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void Vector::notify()
+{
+    if ( !m_addedObjects.empty() )
+    {
+        auto sig = m_vector.lock()->signal< ::fwData::Vector::AddedObjectsSignalType >(
+            ::fwData::Vector::s_ADDED_OBJECTS_SIG);
+        sig->asyncEmit(m_addedObjects);
+    }
+    if ( !m_removedObjects.empty() )
+    {
+        auto sig = m_vector.lock()->signal< ::fwData::Vector::RemovedObjectsSignalType >(
+            ::fwData::Vector::s_REMOVED_OBJECTS_SIG);
+        sig->asyncEmit(m_removedObjects);
+    }
+    OSLM_INFO_IF("No changes were found on the vector '" + m_vector.lock()->getID() + "', nothing to notify.",
+                 m_addedObjects.empty() && m_removedObjects.empty());
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace helper
+} // namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/test/CMakeLists.txt b/SrcLib/core/fwDataTools/test/CMakeLists.txt
index 207087b..3881996 100644
--- a/SrcLib/core/fwDataTools/test/CMakeLists.txt
+++ b/SrcLib/core/fwDataTools/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS date_time REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/core/fwDataTools/test/Properties.cmake b/SrcLib/core/fwDataTools/test/Properties.cmake
index b19b0b2..7f53aad 100644
--- a/SrcLib/core/fwDataTools/test/Properties.cmake
+++ b/SrcLib/core/fwDataTools/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwDataToolsTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataCamp fwDataTools )
+set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataCamp fwDataTools)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwDataTools/test/cppunit.options b/SrcLib/core/fwDataTools/test/cppunit.options
deleted file mode 100644
index 4075864..0000000
--- a/SrcLib/core/fwDataTools/test/cppunit.options
+++ /dev/null
@@ -1,17 +0,0 @@
-CLASSTEST=[
-          'MeshTest',
-          'ImageTest',
-          'TransformationMatrix3DTest',
-          ]
-
-USE = ['boost']
-LIB = [
-      'fwData_0-1',
-      'fwDataCamp_0-1',
-      'fwTools_0-1',
-      'fwCore_0-1',
-      'fwDataTools_0-1',
-      'fwTest_0-1',
-      ]
-CONSOLE = 'yes'
-LOGLEVEL='trace'
diff --git a/SrcLib/core/fwDataTools/test/tu/include/ColorTest.hpp b/SrcLib/core/fwDataTools/test/tu/include/ColorTest.hpp
new file mode 100644
index 0000000..0412859
--- /dev/null
+++ b/SrcLib/core/fwDataTools/test/tu/include/ColorTest.hpp
@@ -0,0 +1,34 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_UT_COLORTEST_HPP__
+#define __FWDATATOOLS_UT_COLORTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDataTools
+{
+namespace ut
+{
+
+class ColorTest : public CPPUNIT_NS::TestFixture
+{
+private:
+    CPPUNIT_TEST_SUITE( ColorTest );
+    CPPUNIT_TEST( hexaStringToRGBA );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void hexaStringToRGBA();
+};
+} //namespace ut
+} //namespace fwDataTools
+
+#endif //__FWDATATOOLS_UT_COLORTEST_HPP__
diff --git a/SrcLib/core/fwDataTools/test/tu/include/FieldHelperTest.hpp b/SrcLib/core/fwDataTools/test/tu/include/FieldHelperTest.hpp
new file mode 100644
index 0000000..c68544a
--- /dev/null
+++ b/SrcLib/core/fwDataTools/test/tu/include/FieldHelperTest.hpp
@@ -0,0 +1,45 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDATATOOLS_UT_FIELDHELPERTEST_HPP__
+#define __FWDATATOOLS_UT_FIELDHELPERTEST_HPP__
+
+#include <fwCore/base.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDataTools
+{
+namespace ut
+{
+
+/**
+ * @brief   Test ProcessObject building from a ConfigurationElement and composite message.
+ * @see     ICompositeParser
+ * @see     CompositeEditor
+ */
+class FieldHelperTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( FieldHelperTest );
+CPPUNIT_TEST( testHelper );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    // fonctions de tests
+    /// Test the compositeMsg with sending and receiving the message in the test services
+    void testHelper();
+
+};
+
+
+} //namespace ut
+} //namespace fwDataTools
+
+#endif // __FWDATATOOLS_UT_FIELDHELPERTEST_HPP__
diff --git a/SrcLib/core/fwDataTools/test/tu/include/ImageTest.hpp b/SrcLib/core/fwDataTools/test/tu/include/ImageTest.hpp
index bd4b226..d028dd7 100644
--- a/SrcLib/core/fwDataTools/test/tu/include/ImageTest.hpp
+++ b/SrcLib/core/fwDataTools/test/tu/include/ImageTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWDATATOOLS_TEST_TU_IMAGETEST_HPP_
-#define _FWDATATOOLS_TEST_TU_IMAGETEST_HPP_
+#ifndef __FWDATATOOLS_UT_IMAGETEST_HPP__
+#define __FWDATATOOLS_UT_IMAGETEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -22,9 +22,9 @@ namespace ut
  */
 class ImageTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageTest );
-    CPPUNIT_TEST( roiApplyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageTest );
+CPPUNIT_TEST( roiApplyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -39,4 +39,4 @@ public:
 } //namespace ut
 } //namespace fwDataTools
 
-#endif //_FWDATATOOLS_TEST_TU_IMAGETEST_HPP_
+#endif //__FWDATATOOLS_UT_IMAGETEST_HPP__
diff --git a/SrcLib/core/fwDataTools/test/tu/include/MeshTest.hpp b/SrcLib/core/fwDataTools/test/tu/include/MeshTest.hpp
deleted file mode 100644
index d8db59d..0000000
--- a/SrcLib/core/fwDataTools/test/tu/include/MeshTest.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWDATATOOLS_TEST_TU_MESHTEST_HPP_
-#define _FWDATATOOLS_TEST_TU_MESHTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwData/Mesh.hpp>
-#include <fwData/TriangularMesh.hpp>
-#include <fwData/Array.hpp>
-
-namespace fwDataTools
-{
-namespace ut
-{
-
-/**
- * @brief Test many methods to create mesh.
- */
-class MeshTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( MeshTest );
-    CPPUNIT_TEST( testMeshToTriangularMesh );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void testMeshToTriangularMesh();
-
-};
-
-} //namespace ut
-} //namespace fwDataTools
-
-#endif //_FWDATATOOLS_TEST_TU_MESHTEST_HPP_
diff --git a/SrcLib/core/fwDataTools/test/tu/include/TransformationMatrix3DTest.hpp b/SrcLib/core/fwDataTools/test/tu/include/TransformationMatrix3DTest.hpp
index 9d602cc..f665ea0 100644
--- a/SrcLib/core/fwDataTools/test/tu/include/TransformationMatrix3DTest.hpp
+++ b/SrcLib/core/fwDataTools/test/tu/include/TransformationMatrix3DTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDATATOOLS_TEST_TU_TRANSFORMATIONMATRIX3DTEST_HPP__
-#define __FWDATATOOLS_TEST_TU_TRANSFORMATIONMATRIX3DTEST_HPP__
+#ifndef __FWDATATOOLS_UT_TRANSFORMATIONMATRIX3DTEST_HPP__
+#define __FWDATATOOLS_UT_TRANSFORMATIONMATRIX3DTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -22,10 +22,11 @@ namespace ut
  */
 class TransformationMatrix3DTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( TransformationMatrix3DTest );
-    CPPUNIT_TEST( identityMatrixTest );
-    CPPUNIT_TEST( matrixTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( TransformationMatrix3DTest );
+CPPUNIT_TEST( identityMatrixTest );
+CPPUNIT_TEST( matrixTest );
+CPPUNIT_TEST( glmGetterSetterTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -35,10 +36,11 @@ public:
 
     void identityMatrixTest();
     void matrixTest();
+    void glmGetterSetterTest();
 
 };
 
 } //namespace ut
 } //namespace fwDataTools
 
-#endif //__FWDATATOOLS_TEST_TU_TRANSFORMATIONMATRIX3DTEST_HPP__
+#endif //__FWDATATOOLS_UT_TRANSFORMATIONMATRIX3DTEST_HPP__
diff --git a/SrcLib/core/fwDataTools/test/tu/src/ColorTest.cpp b/SrcLib/core/fwDataTools/test/tu/src/ColorTest.cpp
new file mode 100644
index 0000000..9d3bc44
--- /dev/null
+++ b/SrcLib/core/fwDataTools/test/tu/src/ColorTest.cpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ColorTest.hpp"
+
+#include <fwCore/Exception.hpp>
+#include <fwDataTools/Color.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataTools::ut::ColorTest );
+
+namespace fwDataTools
+{
+namespace ut
+{
+
+void ColorTest::setUp()
+{
+    // Set up context before running a test.
+
+}
+void ColorTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+void ColorTest::hexaStringToRGBA()
+{
+    const std::string strColor1 = "#ff0527";
+    std::uint8_t color1[4];
+    CPPUNIT_ASSERT_NO_THROW(::fwDataTools::Color::hexaStringToRGBA(strColor1, color1));
+
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(255), color1[0]);
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(5),   color1[1]);
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(39),  color1[2]);
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(255), color1[3]);
+
+    const std::string strColor2 = "#45a5bc28";
+    std::uint8_t color2[4];
+    CPPUNIT_ASSERT_NO_THROW(::fwDataTools::Color::hexaStringToRGBA(strColor2, color2));
+
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(69),  color2[0]);
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(165), color2[1]);
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(188), color2[2]);
+    CPPUNIT_ASSERT_EQUAL(static_cast< std::uint8_t >(40),  color2[3]);
+
+    const std::string strColor3 = "45a5bc28";
+    std::uint8_t color3[4];
+    CPPUNIT_ASSERT_THROW(::fwDataTools::Color::hexaStringToRGBA(strColor3, color3), ::fwCore::Exception);
+
+    const std::string strColor4 = "45a58";
+    CPPUNIT_ASSERT_THROW(::fwDataTools::Color::hexaStringToRGBA(strColor4, color3), ::fwCore::Exception);
+
+    const std::string strColor5 = "#45a564928";
+    CPPUNIT_ASSERT_THROW(::fwDataTools::Color::hexaStringToRGBA(strColor5, color3), ::fwCore::Exception);
+}
+
+} //namespace ut
+} //namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/test/tu/src/FieldHelperTest.cpp b/SrcLib/core/fwDataTools/test/tu/src/FieldHelperTest.cpp
new file mode 100644
index 0000000..09dd6b9
--- /dev/null
+++ b/SrcLib/core/fwDataTools/test/tu/src/FieldHelperTest.cpp
@@ -0,0 +1,92 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "FieldHelperTest.hpp"
+
+#include <fwData/String.hpp>
+
+#include <fwDataTools/helper/Field.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataTools::ut::FieldHelperTest );
+
+namespace fwDataTools
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void FieldHelperTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void FieldHelperTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void FieldHelperTest::testHelper()
+{
+    const std::string FIELD_ID1 = "FIELD_ID1";
+    const std::string FIELD_ID2 = "FIELD_ID2";
+    const std::string FIELD_ID3 = "FIELD_ID3";
+
+    ::fwData::Object::sptr nullobj;
+    ::fwData::Object::sptr obj       = ::fwData::String::New();
+    ::fwData::Object::sptr fieldObj1 = ::fwData::String::New();
+    ::fwData::Object::sptr fieldObj2 = ::fwData::String::New();
+
+    {
+        ::fwDataTools::helper::Field fieldHelper(obj);
+        fieldHelper.setField(FIELD_ID1, fieldObj1);
+        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj1);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == nullobj);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
+    }
+
+    ::fwData::Object::FieldMapType localFields       = obj->getFields();
+    ::fwData::Object::FieldMapType localFieldsBackup = obj->getFields();
+    localFields.insert( ::fwData::Object::FieldMapType::value_type(FIELD_ID2,fieldObj2));
+
+    {
+        ::fwDataTools::helper::Field fieldHelper(obj);
+        fieldHelper.updateFields(localFields);
+        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(2));
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj1);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == fieldObj2);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
+    }
+
+    {
+        ::fwDataTools::helper::Field fieldHelper(obj);
+        fieldHelper.setFields(localFieldsBackup);
+        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj1);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == nullobj);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
+    }
+
+    {
+        ::fwDataTools::helper::Field fieldHelper(obj);
+        fieldHelper.setField(FIELD_ID1, fieldObj2);
+        CPPUNIT_ASSERT_EQUAL(obj->getFields().size(), size_t(1));
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID1) == fieldObj2);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID2) == nullobj);
+        CPPUNIT_ASSERT(obj->getField(FIELD_ID3) == nullobj);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/test/tu/src/ImageTest.cpp b/SrcLib/core/fwDataTools/test/tu/src/ImageTest.cpp
index 49db930..ae177e8 100644
--- a/SrcLib/core/fwDataTools/test/tu/src/ImageTest.cpp
+++ b/SrcLib/core/fwDataTools/test/tu/src/ImageTest.cpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <sstream>
-#include <fwTools/Type.hpp>
+#include "ImageTest.hpp"
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwDataTools/Image.hpp>
+#include <fwDataTools/helper/Array.hpp>
 
 #include <fwTest/generator/Image.hpp>
-#include <fwDataTools/Image.hpp>
 
-#include "ImageTest.hpp"
+#include <fwTools/Type.hpp>
+
+#include <sstream>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataTools::ut::ImageTest );
@@ -53,12 +54,12 @@ void ImageTest::roiApplyTest()
         ::fwTools::Type roiType(roiTypeName);                                                           \
         ::fwData::Image::sptr imageRef;                                                                 \
         ::fwData::Image::sptr image = ::fwData::Image::New();                                                                 \
-        ::fwData::Image::sptr roi = ::fwData::Image::New();                                                                   \
+        ::fwData::Image::sptr roi   = ::fwData::Image::New();                                                                   \
                                                                                                         \
         ::fwTest::generator::Image::generateRandomImage(image, imageType);                                    \
-        ::fwData::Image::SizeType    size = image->getSize();                                           \
+        ::fwData::Image::SizeType size       = image->getSize();                                           \
         ::fwData::Image::SpacingType spacing = image->getSpacing();                                     \
-        ::fwData::Image::OriginType  origin = image->getOrigin();                                       \
+        ::fwData::Image::OriginType origin   = image->getOrigin();                                       \
         ::fwTest::generator::Image::generateImage(roi, size, spacing, origin, roiType);                       \
                                                                                                         \
         imageRef = ::fwData::Object::copy(image);                                                       \
@@ -68,7 +69,7 @@ void ImageTest::roiApplyTest()
         imgData = image->getDataArray();                                                                \
         roiData = roi->getDataArray();                                                                  \
                                                                                                         \
-        ::fwComEd::helper::Array roiDataHelper(roiData);                                                \
+        ::fwDataTools::helper::Array roiDataHelper(roiData);                                                \
                                                                                                         \
         CPPUNIT_ASSERT(imgData);                                                                        \
         CPPUNIT_ASSERT(imgData->getNumberOfElements());                                                 \
@@ -78,8 +79,8 @@ void ImageTest::roiApplyTest()
                                                                                                         \
         ::fwTest::generator::Image::randomizeArray(roi->getDataArray());                                      \
                                                                                                         \
-        char *begin = roiDataHelper.begin();                                                            \
-        char *end   = roiDataHelper.end();                                                              \
+        char* begin = roiDataHelper.begin();                                                            \
+        char* end   = roiDataHelper.end();                                                              \
         size_t part = (end - begin)/3;                                                                  \
                                                                                                         \
         std::fill(begin, begin + part, 0);                                                              \
@@ -98,26 +99,26 @@ void ImageTest::roiApplyTest()
     TestRoiApplyMacro( "int8", "uint16");
     TestRoiApplyMacro( "int8", "uint32");
 
-    TestRoiApplyMacro( "int16" , "int8"  );
-    TestRoiApplyMacro( "int16" , "int16" );
-    TestRoiApplyMacro( "int16" , "int32" );
-    TestRoiApplyMacro( "int16" , "uint8" );
-    TestRoiApplyMacro( "int16" , "uint16");
-    TestRoiApplyMacro( "int16" , "uint32");
-
-    TestRoiApplyMacro( "int32" , "int8"  );
-    TestRoiApplyMacro( "int32" , "int16" );
-    TestRoiApplyMacro( "int32" , "int32" );
-    TestRoiApplyMacro( "int32" , "uint8" );
-    TestRoiApplyMacro( "int32" , "uint16");
-    TestRoiApplyMacro( "int32" , "uint32");
-
-    TestRoiApplyMacro( "uint8" , "int8"  );
-    TestRoiApplyMacro( "uint8" , "int16" );
-    TestRoiApplyMacro( "uint8" , "int32" );
-    TestRoiApplyMacro( "uint8" , "uint8" );
-    TestRoiApplyMacro( "uint8" , "uint16");
-    TestRoiApplyMacro( "uint8" , "uint32");
+    TestRoiApplyMacro( "int16", "int8"  );
+    TestRoiApplyMacro( "int16", "int16" );
+    TestRoiApplyMacro( "int16", "int32" );
+    TestRoiApplyMacro( "int16", "uint8" );
+    TestRoiApplyMacro( "int16", "uint16");
+    TestRoiApplyMacro( "int16", "uint32");
+
+    TestRoiApplyMacro( "int32", "int8"  );
+    TestRoiApplyMacro( "int32", "int16" );
+    TestRoiApplyMacro( "int32", "int32" );
+    TestRoiApplyMacro( "int32", "uint8" );
+    TestRoiApplyMacro( "int32", "uint16");
+    TestRoiApplyMacro( "int32", "uint32");
+
+    TestRoiApplyMacro( "uint8", "int8"  );
+    TestRoiApplyMacro( "uint8", "int16" );
+    TestRoiApplyMacro( "uint8", "int32" );
+    TestRoiApplyMacro( "uint8", "uint8" );
+    TestRoiApplyMacro( "uint8", "uint16");
+    TestRoiApplyMacro( "uint8", "uint32");
 
     TestRoiApplyMacro( "uint16", "int8"  );
     TestRoiApplyMacro( "uint16", "int16" );
diff --git a/SrcLib/core/fwDataTools/test/tu/src/MeshTest.cpp b/SrcLib/core/fwDataTools/test/tu/src/MeshTest.cpp
deleted file mode 100644
index 089f625..0000000
--- a/SrcLib/core/fwDataTools/test/tu/src/MeshTest.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwDataCamp/visitor/CompareObjects.hpp>
-
-#include <fwTest/generator/Mesh.hpp>
-#include <fwDataTools/Mesh.hpp>
-
-#include "MeshTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataTools::ut::MeshTest );
-
-namespace fwDataTools
-{
-namespace ut
-{
-
-//-----------------------------------------------------------------------------
-
-void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
-{
-    ::fwDataCamp::visitor::CompareObjects visitor;
-    visitor.compare(objRef, objComp);
-    SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
-    {
-        OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
-    }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
-}
-
-//------------------------------------------------------------------------------
-
-void MeshTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void MeshTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void MeshTest::testMeshToTriangularMesh()
-{
-    ::fwData::Mesh::sptr mesh1 = ::fwData::Mesh::New();
-    ::fwTest::generator::Mesh::generateTriangleMesh(mesh1);
-    ::fwDataTools::Mesh::shakePoint(mesh1);
-    mesh1->adjustAllocatedMemory();
-
-    ::fwData::TriangularMesh::sptr trian = ::fwData::TriangularMesh::New();
-    ::fwDataTools::Mesh::toTriangularMesh(mesh1, trian);
-
-    ::fwData::Mesh::sptr mesh2 = ::fwData::Mesh::New();
-    ::fwDataTools::Mesh::fromTriangularMesh(trian, mesh2);
-
-    compare(mesh1, mesh2);
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwDataTools
diff --git a/SrcLib/core/fwDataTools/test/tu/src/TransformationMatrix3DTest.cpp b/SrcLib/core/fwDataTools/test/tu/src/TransformationMatrix3DTest.cpp
index 303bbb1..5b9425c 100644
--- a/SrcLib/core/fwDataTools/test/tu/src/TransformationMatrix3DTest.cpp
+++ b/SrcLib/core/fwDataTools/test/tu/src/TransformationMatrix3DTest.cpp
@@ -1,18 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <sstream>
-#include <cmath>
-#include <fwTools/Type.hpp>
+#include "TransformationMatrix3DTest.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#define FW_PROFILING_DISABLED
+#include <fwCore/Profiling.hpp>
 
 #include <fwDataTools/TransformationMatrix3D.hpp>
 
-#include "TransformationMatrix3DTest.hpp"
+#include <glm/gtc/type_ptr.hpp>
+#include <sstream>
+#include <cmath>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDataTools::ut::TransformationMatrix3DTest );
@@ -42,16 +45,18 @@ bool isIdentity(::fwData::TransformationMatrix3D::sptr tm)
 {
     bool isIdentity = true;
 
-    for (int i=0 ; i<4 ; ++i)
+    for (size_t i = 0; i<4; ++i)
     {
-        for (int j=0 ; j<4 ; ++j)
+        for (size_t j = 0; j<4; ++j)
         {
-            isIdentity &= (i==j?1.:0.) == tm->getCoefficient(i,j);
+            isIdentity &= (i==j ? 1. : 0.) == tm->getCoefficient(i,j);
         }
     }
     return isIdentity;
 }
 
+//------------------------------------------------------------------------------
+
 void TransformationMatrix3DTest::identityMatrixTest()
 {
     ::fwData::TransformationMatrix3D::sptr tm1 = ::fwData::TransformationMatrix3D::New();
@@ -69,18 +74,50 @@ void TransformationMatrix3DTest::identityMatrixTest()
     CPPUNIT_ASSERT(isIdentity(tm1));
     CPPUNIT_ASSERT(isIdentity(tm2));
 
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwDataTools::TransformationMatrix3D::multiply");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            ::fwDataTools::TransformationMatrix3D::multiply(tm1, tm2, tm3);
+        }
+    }
+#else
     ::fwDataTools::TransformationMatrix3D::multiply(tm1, tm2, tm3);
+#endif
     CPPUNIT_ASSERT(isIdentity(tm3));
 
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwDataTools::TransformationMatrix3D::invert");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            ::fwDataTools::TransformationMatrix3D::invert(tm1, tm4);
+        }
+    }
+#else
     ::fwDataTools::TransformationMatrix3D::invert(tm1, tm4);
+#endif
     CPPUNIT_ASSERT(isIdentity(tm4));
 
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwDataTools::TransformationMatrix3D::multiply");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            ::fwDataTools::TransformationMatrix3D::multiply(tm1, p1, p2);
+        }
+    }
+#else
     ::fwDataTools::TransformationMatrix3D::multiply(tm1, p1, p2);
+#endif
     CPPUNIT_ASSERT_EQUAL(p1->getCoord()[0], p2->getCoord()[0]);
     CPPUNIT_ASSERT_EQUAL(p1->getCoord()[1], p2->getCoord()[1]);
     CPPUNIT_ASSERT_EQUAL(p1->getCoord()[2], p2->getCoord()[2]);
 }
 
+//------------------------------------------------------------------------------
+
 void TransformationMatrix3DTest::matrixTest()
 {
     ::fwData::TransformationMatrix3D::sptr tm1 = ::fwData::TransformationMatrix3D::New();
@@ -90,15 +127,15 @@ void TransformationMatrix3DTest::matrixTest()
 
     ::fwDataTools::TransformationMatrix3D::identity(tm2);
 
-    ::fwData::TransformationMatrix3D::TMCoefArray tm1Coefs(16);
-    for (int i=0 ; i<16 ; ++i)
+    ::fwData::TransformationMatrix3D::TMCoefArray tm1Coefs;
+    for (int i = 0; i<16; ++i)
     {
-        tm1Coefs[i]=i+1;
+        tm1Coefs[i] = i+1;
     }
 
-    for (int i=0 ; i<4 ; ++i)
+    for (int i = 0; i<4; ++i)
     {
-        for (int j=0 ; j<4 ; ++j)
+        for (int j = 0; j<4; ++j)
         {
             tm2->setCoefficient(i,j, fabs(static_cast<double>(i-j)) + 1);
         }
@@ -106,16 +143,14 @@ void TransformationMatrix3DTest::matrixTest()
     tm1->setCoefficients(tm1Coefs);
     tm4->setCoefficients(tm1Coefs);
 
-    ::fwData::Point::sptr p1 = ::fwData::Point::New(1.0f, 2.3f, 5.1f);
-    ::fwData::Point::sptr p2 = ::fwData::Point::New();
-
+    // Test matrix-matrix multiplication
     ::fwDataTools::TransformationMatrix3D::multiply(tm1, tm2, tm3);
-    for (int i=0 ; i<4 ; ++i)
+    for (size_t i = 0; i<4; ++i)
     {
-        for (int j=0 ; j<4 ; ++j)
+        for (size_t j = 0; j<4; ++j)
         {
             double val = 0;
-            for (int k=0 ; k<4 ; ++k)
+            for (size_t k = 0; k<4; ++k)
             {
                 val += tm1->getCoefficient(i,k)*tm2->getCoefficient(k,j);
             }
@@ -123,6 +158,7 @@ void TransformationMatrix3DTest::matrixTest()
         }
     }
 
+    // Test invert
     ::fwDataTools::TransformationMatrix3D::invert(tm2, tm4);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.4, tm4->getCoefficient(0,0), 0.00001);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,  tm4->getCoefficient(0,1), 0.00001);
@@ -141,6 +177,37 @@ void TransformationMatrix3DTest::matrixTest()
     CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5,  tm4->getCoefficient(3,2), 0.00001);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.4, tm4->getCoefficient(3,3), 0.00001);
 
+    ::fwData::TransformationMatrix3D::TMCoefArray tm2Coefs = { 3.1, 1., -7.9689, 4.9,
+                                                               5., -21., -1.3646, 14.4,
+                                                               9., -7.2, -23.36, 79.04,
+                                                               0.1, -3., -1.234, -49.94 };
+    tm2->setCoefficients(tm2Coefs);
+    ::fwDataTools::TransformationMatrix3D::invert(tm2, tm4);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.885131908604589, tm4->getCoefficient(0,0), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.190212289294002, tm4->getCoefficient(0,1), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.29581348830958, tm4->getCoefficient(0,2), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.326489683580158, tm4->getCoefficient(0,3), 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.185258037237573, tm4->getCoefficient(1,0), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.00768780306376934, tm4->getCoefficient(1,1), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.0586854220133396, tm4->getCoefficient(1,2), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.0769210199757416, tm4->getCoefficient(1,3), 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.232796743379289, tm4->getCoefficient(2,0), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0724476129133489, tm4->getCoefficient(2,1), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.118830425964518, tm4->getCoefficient(2,2), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.144341353618837, tm4->getCoefficient(2,3), 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.015108772570731, tm4->getCoefficient(3,0), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.000947451265806253, tm4->getCoefficient(3,1), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00586927638865189, tm4->getCoefficient(3,2), 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.0124903619956978, tm4->getCoefficient(3,3), 0.0001);
+
+    // Test matrix-vector multiplication
+    ::fwData::Point::sptr p1 = ::fwData::Point::New(1.0f, 2.3f, 5.1f);
+    ::fwData::Point::sptr p2 = ::fwData::Point::New();
+
     ::fwDataTools::TransformationMatrix3D::multiply(tm1, p1, p2);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(24.9,  p2->getCoord()[0], 0.00001);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(62.5,  p2->getCoord()[1], 0.00001);
@@ -154,5 +221,70 @@ void TransformationMatrix3DTest::matrixTest()
 
 //------------------------------------------------------------------------------
 
+void TransformationMatrix3DTest::glmGetterSetterTest()
+{
+    ::fwData::TransformationMatrix3D::TMCoefArray coefs = { 2, -2, .3, .12,
+                                                            4, 8.9, 4.2, 1.2,
+                                                            7.8, -12.1, 2.3, 1.2,
+                                                            .3, 1.21, -3.1, 1.2};
+
+    ::fwData::TransformationMatrix3D::sptr mat = ::fwData::TransformationMatrix3D::New();
+    mat->setCoefficients(coefs);
+
+    // Test getter
+    ::glm::dmat4x4 glmMat;
+
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwDataTools::TransformationMatrix3D::getMatrixFromTF3D");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            glmMat = ::fwDataTools::TransformationMatrix3D::getMatrixFromTF3D(mat);
+        }
+    }
+#else
+    glmMat = ::fwDataTools::TransformationMatrix3D::getMatrixFromTF3D(mat);
+#endif
+
+    // TransformationMatrix3D is stored row-major
+    // glm matrices are stored column-major
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            CPPUNIT_ASSERT_EQUAL(glmMat[i][j], coefs[i + j * 4]);
+        }
+    }
+
+    // Test setter
+    double coefs2[] = { 11, -2, -.3, -.74,
+                        .214, 82.9, 9.2, -5.2,
+                        17.8, -2.1, 2.3, 1.2,
+                        .13, 0.1, -0.1, 0.2};
+
+    glmMat = ::glm::make_mat4<double>(coefs2);
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwDataTools::TransformationMatrix3D::setTF3DFromMatrix");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            ::fwDataTools::TransformationMatrix3D::setTF3DFromMatrix(mat, glmMat);
+        }
+    }
+#else
+    ::fwDataTools::TransformationMatrix3D::setTF3DFromMatrix(mat, glmMat);
+#endif
+
+    for (size_t i = 0; i < 4; ++i)
+    {
+        for (size_t j = 0; j < 4; ++j)
+        {
+            CPPUNIT_ASSERT_EQUAL(mat->getCoefficient(i, j), coefs2[i + j * 4]);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace ut
 } //namespace fwDataTools
diff --git a/Apps/Tuto08GenericScene/CMakeLists.txt b/SrcLib/core/fwDicomTools/CMakeLists.txt
similarity index 100%
rename from Apps/Tuto08GenericScene/CMakeLists.txt
rename to SrcLib/core/fwDicomTools/CMakeLists.txt
diff --git a/SrcLib/core/fwDicomTools/Properties.cmake b/SrcLib/core/fwDicomTools/Properties.cmake
new file mode 100644
index 0000000..e4b6f8a
--- /dev/null
+++ b/SrcLib/core/fwDicomTools/Properties.cmake
@@ -0,0 +1,6 @@
+
+set( NAME fwDicomTools )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES fwCore fwMedData fwTools )
+set( REQUIREMENTS )
diff --git a/SrcLib/core/fwDicomTools/include/fwDicomTools/Image.hpp b/SrcLib/core/fwDicomTools/include/fwDicomTools/Image.hpp
new file mode 100644
index 0000000..c9ca5ef
--- /dev/null
+++ b/SrcLib/core/fwDicomTools/include/fwDicomTools/Image.hpp
@@ -0,0 +1,85 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMTOOLS_IMAGE_HPP__
+#define __FWDICOMTOOLS_IMAGE_HPP__
+
+#include "fwDicomTools/config.hpp"
+
+#include <fwTools/Type.hpp>
+
+#include <stdint.h>
+
+namespace fwDicomTools
+{
+
+/**
+ * @brief DICOM Image Helper
+ */
+class FWDICOMTOOLS_CLASS_API Image
+{
+public:
+
+    /**
+     * @brief Constructor
+     * @param[in] samplesPerPixel Samples per pixel
+     * @param[in] bitsAllocated Bits allocated
+     * @param[in] bitsStored Bits stored
+     * @param[in] highBit High bit
+     * @param[in] pixelRepresentation Pixel representation
+     * @param[in] rescaleSlope Rescale slope
+     * @param[in] rescaleIntercept Rescale intercept
+     */
+    FWDICOMTOOLS_API Image(
+        unsigned short samplesPerPixel,
+        unsigned short bitsAllocated,
+        unsigned short bitsStored,
+        unsigned short highBit,
+        unsigned short pixelRepresentation,
+        double rescaleSlope,
+        double rescaleIntercept);
+
+    /// Destructor
+    FWDICOMTOOLS_API virtual ~Image();
+
+    /// Find Image Type
+    FWDICOMTOOLS_API ::fwTools::Type findImageTypeFromMinMaxValues() const;
+
+protected:
+
+    /// Return minimum possible value of the pixel
+    FWDICOMTOOLS_API int64_t getPixelMin() const;
+
+    /// Return maximum possible value of the pixel
+    FWDICOMTOOLS_API int64_t getPixelMax() const;
+
+    /// Samples per pixel
+    unsigned short m_samplesPerPixel;
+
+    /// Bits allocated
+    unsigned short m_bitsAllocated;
+
+    /// Bits stored
+    unsigned short m_bitsStored;
+
+    /// High bit
+    unsigned short m_highBit;
+
+    /// Pixel representation
+    unsigned short m_pixelRepresentation;
+
+    /// Rescale slope
+    double m_rescaleSlope;
+
+    /// Rescale Intercept
+    double m_rescaleIntercept;
+
+};
+
+} //fwDicomTools
+
+
+#endif /* __FWDICOMTOOLS_IMAGE_HPP__ */
diff --git a/SrcLib/core/fwDicomTools/include/fwDicomTools/Series.hpp b/SrcLib/core/fwDicomTools/include/fwDicomTools/Series.hpp
new file mode 100644
index 0000000..35866a6
--- /dev/null
+++ b/SrcLib/core/fwDicomTools/include/fwDicomTools/Series.hpp
@@ -0,0 +1,54 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMTOOLS_SERIES_HPP__
+#define __FWDICOMTOOLS_SERIES_HPP__
+
+#include "fwDicomTools/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwMedData
+{
+class ImageSeries;
+class ModelSeries;
+}
+
+namespace fwDicomTools
+{
+
+/**
+ * @brief DICOM Series Helper
+ */
+class FWDICOMTOOLS_CLASS_API Series
+{
+public:
+    /**
+     * @brief Convert a DicomSeries to an ImageSeries
+     * @param[in] series DicomSeries that must be converted
+     */
+    FWDICOMTOOLS_API static SPTR(::fwMedData::ImageSeries) convertToImageSeries(
+        const SPTR(::fwMedData::DicomSeries)& series);
+
+    /**
+     * @brief Convert a DicomSeries to a ModelSeries
+     * @param[in] series DicomSeries that must be converted
+     */
+    FWDICOMTOOLS_API static SPTR(::fwMedData::ModelSeries) convertToModelSeries(
+        const SPTR(::fwMedData::DicomSeries)& series);
+
+
+};
+
+} //fwDicomTools
+
+
+#endif /* __FWDICOMTOOLS_SERIES_HPP__ */
diff --git a/SrcLib/core/fwDicomTools/include/fwDicomTools/namespace.hpp b/SrcLib/core/fwDicomTools/include/fwDicomTools/namespace.hpp
new file mode 100644
index 0000000..a921d1d
--- /dev/null
+++ b/SrcLib/core/fwDicomTools/include/fwDicomTools/namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMTOOLS_NAMESPACE_HPP__
+#define __FWDICOMTOOLS_NAMESPACE_HPP__
+
+/// fwDicomTools contains general tools to handle DICOM format
+namespace fwDicomTools
+{
+
+} //namespace fwDicomTools
+
+#endif /* __FWDICOMTOOLS_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwDicomTools/src/fwDicomTools/Image.cpp b/SrcLib/core/fwDicomTools/src/fwDicomTools/Image.cpp
new file mode 100644
index 0000000..c74b557
--- /dev/null
+++ b/SrcLib/core/fwDicomTools/src/fwDicomTools/Image.cpp
@@ -0,0 +1,153 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomTools/Image.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+namespace fwDicomTools
+{
+
+Image::Image(
+    unsigned short samplesPerPixel,
+    unsigned short bitsAllocated,
+    unsigned short bitsStored,
+    unsigned short highBit,
+    unsigned short pixelRepresentation,
+    double rescaleSlope,
+    double rescaleIntercept) :
+    m_samplesPerPixel(samplesPerPixel),
+    m_bitsAllocated(bitsAllocated),
+    m_bitsStored(bitsStored),
+    m_highBit(highBit),
+    m_pixelRepresentation(pixelRepresentation),
+    m_rescaleSlope(rescaleSlope),
+    m_rescaleIntercept(rescaleIntercept)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Image::~Image()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+::fwTools::Type Image::findImageTypeFromMinMaxValues() const
+{
+    ::fwTools::Type result = ::fwTools::Type::s_UNSPECIFIED_TYPE;
+
+    // Bool & Monochrome values
+    if(m_bitsAllocated == 1 && m_pixelRepresentation == 0)
+    {
+        result = ::fwTools::Type::s_INT8;
+    }
+    else
+    {
+        // Double
+        if(m_rescaleSlope != (int) m_rescaleSlope || m_rescaleIntercept != (int) m_rescaleIntercept)
+        {
+            result = ::fwTools::Type::s_DOUBLE;
+        }
+        else
+        {
+            const double min = m_rescaleSlope * (double)this->getPixelMin() + m_rescaleIntercept;
+            const double max = m_rescaleSlope * (double)this->getPixelMax() + m_rescaleIntercept;
+
+            SLM_ASSERT("Min must be lower than max.", min <= max );
+            SLM_ASSERT("Min and max values must be of type int64_t.", min == (int64_t)min && max == (int64_t)max );
+
+            // Unsigned values
+            if(min >= 0)
+            {
+                if( max <= std::numeric_limits<uint8_t>::max() )
+                {
+                    result = ::fwTools::Type::s_UINT8;
+                }
+                else if( max <= std::numeric_limits<uint16_t>::max() )
+                {
+                    result = ::fwTools::Type::s_UINT16;
+                }
+                else if( max <= std::numeric_limits<uint32_t>::max() )
+                {
+                    result = ::fwTools::Type::s_UINT32;
+                }
+                else
+                {
+                    SLM_ASSERT("Unable to determine the pixel format.", 0 );
+                }
+            }
+            // Signed values
+            else
+            {
+
+                if( max <= std::numeric_limits<int8_t>::max() && min >= std::numeric_limits<int8_t>::min() )
+                {
+                    result = ::fwTools::Type::s_INT8;
+                }
+                else if( max <= std::numeric_limits<int16_t>::max() && min >= std::numeric_limits<int16_t>::min() )
+                {
+                    result = ::fwTools::Type::s_INT16;
+                }
+                else if( max <= std::numeric_limits<int32_t>::max() && min >= std::numeric_limits<int32_t>::min() )
+                {
+                    result = ::fwTools::Type::s_INT32;
+                }
+                else
+                {
+                    SLM_ASSERT("Unable to determine the pixel format.", 0 );
+                }
+            }
+
+        }
+
+    }
+
+    return result;
+}
+
+//-----------------------------------------------------------------------------
+
+int64_t Image::getPixelMin() const
+{
+    SLM_ASSERT("The number of bits allocated must be known", m_bitsAllocated);
+    SLM_ASSERT("The number of bits stored must be less than 33.", m_bitsStored <= 32);
+
+    if(m_pixelRepresentation == 1)
+    {
+        return (int64_t)(~(((1ull << m_bitsStored) - 1) >> 1));
+    }
+    else if(m_pixelRepresentation == 0)
+    {
+        return 0;
+    }
+
+    SLM_ASSERT("Unable to determine minimum value of pixel", 0);
+    return 0;
+}
+
+//-----------------------------------------------------------------------------
+
+int64_t Image::getPixelMax() const
+{
+    SLM_ASSERT("The number of bits allocated must be known", m_bitsAllocated);
+    SLM_ASSERT("The number of bits stored must be less than 33.", m_bitsStored <= 32);
+
+    if(m_pixelRepresentation == 1)
+    {
+        return (int64_t)(((1ull << m_bitsStored) - 1) >> 1);
+    }
+    else if(m_pixelRepresentation == 0)
+    {
+        return (int64_t)((1ull << m_bitsStored) - 1);
+    }
+
+    SLM_ASSERT("Unable to determine maximum value of pixel", 0);
+    return 0;
+}
+
+} //fwDicomTools
diff --git a/SrcLib/core/fwDicomTools/src/fwDicomTools/Series.cpp b/SrcLib/core/fwDicomTools/src/fwDicomTools/Series.cpp
new file mode 100644
index 0000000..90eb657
--- /dev/null
+++ b/SrcLib/core/fwDicomTools/src/fwDicomTools/Series.cpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomTools/Series.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+
+namespace fwDicomTools
+{
+
+// ----------------------------------------------------------------------------
+
+::fwMedData::ImageSeries::sptr Series::convertToImageSeries(const ::fwMedData::DicomSeries::sptr& series)
+{
+    ::fwMedData::ImageSeries::sptr result = ::fwMedData::ImageSeries::New();
+    result->setPatient(series->getPatient());
+    result->setStudy(series->getStudy());
+    result->setEquipment(series->getEquipment());
+    result->setInstanceUID(series->getInstanceUID());
+    result->setModality(series->getModality());
+    result->setDate(series->getDate());
+    result->setTime(series->getTime());
+    result->setDescription(series->getDescription());
+    result->setPerformingPhysiciansName(series->getPerformingPhysiciansName());
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+::fwMedData::ModelSeries::sptr Series::convertToModelSeries(const ::fwMedData::DicomSeries::sptr& series)
+{
+    ::fwMedData::ModelSeries::sptr result = ::fwMedData::ModelSeries::New();
+    result->setPatient(series->getPatient());
+    result->setStudy(series->getStudy());
+    result->setEquipment(series->getEquipment());
+    result->setInstanceUID(series->getInstanceUID());
+    result->setModality(series->getModality());
+    result->setDate(series->getDate());
+    result->setTime(series->getTime());
+    result->setDescription(series->getDescription());
+    result->setPerformingPhysiciansName(series->getPerformingPhysiciansName());
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+} //fwDicomTools
diff --git a/SrcLib/core/fwGui/CMakeLists.txt b/SrcLib/core/fwGui/CMakeLists.txt
index ce623c4..1169074 100644
--- a/SrcLib/core/fwGui/CMakeLists.txt
+++ b/SrcLib/core/fwGui/CMakeLists.txt
@@ -1,14 +1,3 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwData
-    fwRuntime
-    fwServices
-    fwTools
-)
-
-
-find_package (Boost REQUIRED)
-fwForwardInclude(${Boost_INCLUDE_DIRS})
 
 
diff --git a/SrcLib/core/fwGui/COPYING b/SrcLib/core/fwGui/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwGui/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwGui/COPYING.LESSER b/SrcLib/core/fwGui/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwGui/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwGui/Properties.cmake b/SrcLib/core/fwGui/Properties.cmake
index 6535809..7cbe7b2 100644
--- a/SrcLib/core/fwGui/Properties.cmake
+++ b/SrcLib/core/fwGui/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwGui )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwData fwRuntime fwServices fwTools )
+set( DEPENDENCIES fwCore fwData fwRuntime fwServices fwTools fwCom fwThread fwLog)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwGui/bin/build.options b/SrcLib/core/fwGui/bin/build.options
deleted file mode 100644
index 4dd59b5..0000000
--- a/SrcLib/core/fwGui/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-USE     = ['boost']
-LIB     = ['fwData_0-1', 'fwTools_0-1', 'fwCore_0-1','fwServices_0-1']
-TYPE    = 'shared'
-VERSION = '0-1'
diff --git a/SrcLib/core/fwGui/include/fwGui/ActionCallbackBase.hpp b/SrcLib/core/fwGui/include/fwGui/ActionCallbackBase.hpp
index e77792f..8d8911a 100644
--- a/SrcLib/core/fwGui/include/fwGui/ActionCallbackBase.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/ActionCallbackBase.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_ACTIONCALLBACKBASE_HPP_
-#define _FWGUI_ACTIONCALLBACKBASE_HPP_
+#ifndef __FWGUI_ACTIONCALLBACKBASE_HPP__
+#define __FWGUI_ACTIONCALLBACKBASE_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -18,14 +18,14 @@ namespace fwGui
 /**
  * @brief   Defines the menu item callback.
  * @class   ActionCallbackBase
- * 
+ *
  * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API ActionCallbackBase : public ::fwGui::IMenuItemCallback
 {
 
-public :
+public:
 
     fwCoreNonInstanciableClassDefinitionsMacro( (ActionCallbackBase)(::fwGui::IMenuItemCallback) )
 
@@ -53,12 +53,12 @@ protected:
     /**
      * @brief   Constructor.
      */
-    FWGUI_API ActionCallbackBase() ;
+    FWGUI_API ActionCallbackBase();
 
     /**
      * @brief   Destructor. Do nothing.
      */
-    FWGUI_API virtual ~ActionCallbackBase() ;
+    FWGUI_API virtual ~ActionCallbackBase();
 
 private:
     std::string m_sid;
@@ -67,6 +67,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_ACTIONCALLBACKBASE_HPP_*/
+#endif /*__FWGUI_ACTIONCALLBACKBASE_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/Application.hpp b/SrcLib/core/fwGui/include/fwGui/Application.hpp
index 9ba77d3..4f2c4ce 100644
--- a/SrcLib/core/fwGui/include/fwGui/Application.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/Application.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_APPLICATION_HPP_
-#define _FWGUI_APPLICATION_HPP_
+#ifndef __FWGUI_APPLICATION_HPP__
+#define __FWGUI_APPLICATION_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -18,7 +18,7 @@ namespace fwGui
 /**
  * @brief   Gives access to the underlayed application part
  * @class   Application
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -36,14 +36,18 @@ protected:
     /// Application factory, returning the registered instance of Application. Manage a Singleton.
     FWGUI_API static Application::sptr factory();
 
-    Application(){};
-    virtual ~Application(){};
+    Application()
+    {
+    }
+    virtual ~Application()
+    {
+    }
 
 
 };
 
 } // namespace fwGui
 
-#endif /*_FWGUI_APPLICATION_HPP_*/
+#endif /*__FWGUI_APPLICATION_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/Cursor.hpp b/SrcLib/core/fwGui/include/fwGui/Cursor.hpp
index 4afceff..f4b1859 100644
--- a/SrcLib/core/fwGui/include/fwGui/Cursor.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/Cursor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_CURSOR_HPP_
-#define _FWGUI_CURSOR_HPP_
+#ifndef __FWGUI_CURSOR_HPP__
+#define __FWGUI_CURSOR_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -19,7 +19,7 @@ namespace fwGui
  * @brief   Defines the generic cursor for IHM.
  * Use the Delegate design pattern
  * @class   Cursor
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -50,6 +50,6 @@ protected:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_CURSOR_HPP_*/
+#endif /*__FWGUI_CURSOR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/GuiBaseObject.hpp b/SrcLib/core/fwGui/include/fwGui/GuiBaseObject.hpp
index 58682df..24e6a04 100644
--- a/SrcLib/core/fwGui/include/fwGui/GuiBaseObject.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/GuiBaseObject.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,9 +7,6 @@
 #ifndef __FWGUI_GUIBASEOBJECT_HPP__
 #define __FWGUI_GUIBASEOBJECT_HPP__
 
-
-#include <boost/enable_shared_from_this.hpp>
-
 #include <fwCore/base.hpp>
 
 #include "fwGui/factory/new.hpp"
@@ -25,7 +22,7 @@ namespace fwGui
 class FWGUI_CLASS_API GuiBaseObject : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     typedef ::fwGui::factory::Key Key;
 
@@ -47,13 +44,17 @@ public :
 
     fwCoreNonInstanciableClassDefinitionsMacro( (GuiBaseObject)(::fwCore::BaseObject) );
 
-protected :
+protected:
     /**
      * @name Constructor/Destructor
      * @{ */
 
-    GuiBaseObject(){};
-    virtual ~GuiBaseObject(){};
+    GuiBaseObject()
+    {
+    }
+    virtual ~GuiBaseObject()
+    {
+    }
 
     /**  @} */
 
diff --git a/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp b/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp
index 96ddffd..ea129d0 100644
--- a/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/GuiRegistry.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_GUIREGISTRY_HPP_
-#define _FWGUI_GUIREGISTRY_HPP_
+#ifndef __FWGUI_GUIREGISTRY_HPP__
+#define __FWGUI_GUIREGISTRY_HPP__
 
 
 #include "fwGui/GuiBaseObject.hpp"
@@ -22,33 +22,33 @@ namespace fwGui
 /**
  * @brief   This class contains helpers to manage all fwContainer in the application.
  * @class   GuiRegistry
- * 
+ *
  * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API GuiRegistry : public ::fwGui::GuiBaseObject
 {
 
-public :
+public:
 
-    typedef std::map< std::string , ::fwGui::container::fwContainer::sptr > ContainerMapType;
-    typedef std::map< std::string , ::fwGui::container::fwMenuBar::sptr >   MenuBarMapType;
-    typedef std::map< std::string , ::fwGui::container::fwToolBar::sptr >   ToolBarMapType;
-    typedef std::map< std::string , ::fwGui::container::fwMenu::sptr >      MenuMapType;
+    typedef std::map< std::string, ::fwGui::container::fwContainer::sptr > ContainerMapType;
+    typedef std::map< std::string, ::fwGui::container::fwMenuBar::sptr >   MenuBarMapType;
+    typedef std::map< std::string, ::fwGui::container::fwToolBar::sptr >   ToolBarMapType;
+    typedef std::map< std::string, ::fwGui::container::fwMenu::sptr >      MenuMapType;
     typedef std::vector< std::string >                           ParentSidsType;
-    typedef std::map< std::string , ParentSidsType > ActionToParentMapType;
+    typedef std::map< std::string, ParentSidsType > ActionToParentMapType;
 
     fwCoreNonInstanciableClassDefinitionsMacro( (GuiRegistry)(::fwGui::GuiBaseObject) )
 
     /**
      * @brief   Constructor.
      */
-    FWGUI_API GuiRegistry() ;
+    FWGUI_API GuiRegistry();
 
     /**
      * @brief   Destructor. Do nothing.
      */
-    FWGUI_API virtual ~GuiRegistry() ;
+    FWGUI_API virtual ~GuiRegistry();
 
     //-----------------------------------------------------------------------------
 
@@ -205,23 +205,29 @@ public :
      * Call parent service actionServiceSetExecutable() method
      */
     FWGUI_API static void actionServiceSetExecutable(std::string actionSid, bool isExecutable);
+
+    /**
+     * @brief Method called when the action service is visible or not.
+     * Call parent service actionServiceSetVisible() method
+     */
+    FWGUI_API static void actionServiceSetVisible(std::string actionSid, bool isVisible);
     ///@}
 
-protected :
+protected:
 
-    static ContainerMapType       m_globalSIDToFwContainer;
-    static ContainerMapType       m_globalWIDToFwContainer;
-    static MenuBarMapType         m_globalSIDToFwMenuBar;
-    static ToolBarMapType         m_globalSIDToFwToolBar;
-    static MenuMapType            m_globalSIDToFwMenu;
+    static ContainerMapType m_globalSIDToFwContainer;
+    static ContainerMapType m_globalWIDToFwContainer;
+    static MenuBarMapType m_globalSIDToFwMenuBar;
+    static ToolBarMapType m_globalSIDToFwToolBar;
+    static MenuMapType m_globalSIDToFwMenu;
 
     /// Parent sid can be Menu sid or ToolBar sid
-    static ActionToParentMapType  m_actionSIDToParentSID;
+    static ActionToParentMapType m_actionSIDToParentSID;
 
 };
 
 } // namespace fwGui
 
-#endif /*_FWGUI_GUIREGISTRY_HPP_*/
+#endif /*__FWGUI_GUIREGISTRY_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IActionSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IActionSrv.hpp
index 4242d57..141eb4f 100644
--- a/SrcLib/core/fwGui/include/fwGui/IActionSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IActionSrv.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IACTIONSRV_HPP_
-#define _FWGUI_IACTIONSRV_HPP_
-
-#include <fwServices/IService.hpp>
+#ifndef __FWGUI_IACTIONSRV_HPP__
+#define __FWGUI_IACTIONSRV_HPP__
 
 #include "fwGui/config.hpp"
-
 #include "fwGui/registrar/ActionRegistrar.hpp"
 
+#include <fwCom/Slots.hpp>
+
+#include <fwServices/IService.hpp>
+
 namespace fwGui
 {
 
@@ -20,17 +21,56 @@ namespace fwGui
  * @brief   Defines the service interface managing the menu items.
  * @class   IActionSrv
  *
- * @date    2009-2010.
- *
  */
 class FWGUI_CLASS_API IActionSrv : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IActionSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IActionSrv)(::fwServices::IService) );
     fwCoreAllowSharedFromThis();
 
+    /**
+     * @name Slots Keys
+     * @{
+     */
+    /// Slot to activate/deactivate the action
+    static const ::fwCom::Slots::SlotKeyType s_SET_IS_ACTIVE_SLOT;
+
+    /// Slot to activate the action
+    static const ::fwCom::Slots::SlotKeyType s_ACTIVATE_SLOT;
+
+    /// Slot to desactivate the action
+    static const ::fwCom::Slots::SlotKeyType s_DEACTIVATE_SLOT;
+
+    /// Slot to enable/disable the action
+    static const ::fwCom::Slots::SlotKeyType s_SET_IS_EXECUTABLE_SLOT;
+
+    /// Slot to enable the action
+    static const ::fwCom::Slots::SlotKeyType s_SET_EXECUTABLE_SLOT;
+
+    /// Slot to disable the action
+    static const ::fwCom::Slots::SlotKeyType s_SET_INEXECUTABLE_SLOT;
+    /**
+     * @}
+     */
+
+    /// Slot to show/hide the action
+    typedef ::fwCom::Slot< void (bool) >  SetVisibleSlotType;
+    static const ::fwCom::Slots::SlotKeyType s_SET_VISIBLE_SLOT;
+
+    /// Slot to disable the action
+    typedef ::fwCom::Slot< void () >  ShowSlotType;
+    static const ::fwCom::Slots::SlotKeyType s_SHOW_SLOT;
+
+    /// Slot to disable the action
+    typedef ::fwCom::Slot< void () >  HideSlotType;
+    static const ::fwCom::Slots::SlotKeyType s_HIDE_SLOT;
+
+    /**
+     * @}
+     */
+
     /// Method called when the action service is stopping
     FWGUI_API void actionServiceStopping();
 
@@ -40,18 +80,44 @@ public :
     /// Set the action service is active/inactive.
     FWGUI_API virtual void setIsActive(bool isActive);
 
+    /// Set the action service is active.
+    FWGUI_API virtual void activate();
+
+    /// Set the action service is not active.
+    FWGUI_API virtual void deactivate();
+
     /// Return true if action service is active.
     FWGUI_API bool getIsActive();
 
     /// Return true if action 'check' feedback is inverted.
-    bool getActiveStateValue(){ return m_activeStateValue; };
+    bool getActiveStateValue()
+    {
+        return m_activeStateValue;
+    }
 
     /// Set the action service executable or not.
-    FWGUI_API void setIsExecutable(bool isExecutable);
+    FWGUI_API virtual void setIsExecutable(bool isExecutable);
+
+    /// Set the action service executable.
+    FWGUI_API virtual void setExecutable();
+
+    /// Set the action service not executable.
+    FWGUI_API virtual void setInexecutable();
 
     /// Return action service is executable.
     FWGUI_API bool getIsExecutable();
 
+    /// Show or hide the action.
+    FWGUI_API void setVisible(bool isVisible);
+
+    /// Show the action.
+    FWGUI_API void show();
+
+    /// Hide the action.
+    FWGUI_API void hide();
+
+    FWGUI_API bool isVisible();
+
     /**
      * @brief Confirm that the action must be executed.
      *
@@ -62,11 +128,11 @@ public :
      */
     FWGUI_API bool confirmAction();
 
-protected :
+protected:
 
-    FWGUI_API IActionSrv() ;
+    FWGUI_API IActionSrv();
 
-    FWGUI_API virtual ~IActionSrv() ;
+    FWGUI_API virtual ~IActionSrv();
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
@@ -74,17 +140,19 @@ protected :
      * @brief Initialize the action.
      *
      * Example of configuration
-     * @verbatim
-           <service uid="item" type="::fwGui::IActionSrv" impl="::gui::action::NothingActionSrv" autoConnect="no" >
-              <state active="false" executable="false" inverse="true" />
+     * @code{.xml}
+           <service uid="item" type="::fwGui::IActionSrv" impl="::gui::action::SDoNothing" autoConnect="no" >
+              <state active="false" executable="false" inverse="true" visible="true" />
               <confirmation value="yes" message="..." />
            </service>
-       @endverbatim
+       @endcode
      * - \<state active="false" executable="false" /\> : fix the state of the action in the menu and Toolbar.
      *   - \b executable not mandatory (Default value true ) : allows to enable/disable the execution of the action.
      *     If the action appears in the interface it will be enable/disable.
      *   - \b active not mandatory (Default value false ):
      *     If the action appears in the interface it will be check/uncheck.
+     *   - \b visible not mandatory (Default value true ):
+     *     If true, the action is visible in the interface (and if the action is associated to a menu and/or a toolbar).
      *   - \b inverse not mandatory (Default value true) : allow to invert the state of the action (if "check")
      * - \<confirmation value="yes" message="..." /\> : configure if the action must be confirm by user before to execute it.
      *   - \b value : if true the action will show a confirmation message before to be executed.
@@ -97,12 +165,13 @@ protected :
 
 private:
 
-    ::fwGui::registrar::ActionRegistrar::sptr    m_registrar;
+    ::fwGui::registrar::ActionRegistrar::sptr m_registrar;
 
     /// Value for which the action will be considered 'active'
     bool m_activeStateValue;
     bool m_isActive;
     bool m_isExecutable;
+    bool m_isVisible;
     bool m_confirmAction;
     std::string m_confirmMessage;
     std::string m_defaultButton;
@@ -129,6 +198,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IACTIONSRV_HPP_*/
+#endif /*__FWGUI_IACTIONSRV_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IApplication.hpp b/SrcLib/core/fwGui/include/fwGui/IApplication.hpp
index b3fdd4f..7682b75 100644
--- a/SrcLib/core/fwGui/include/fwGui/IApplication.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IApplication.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IAPPLICATION_HPP_
-#define _FWGUI_IAPPLICATION_HPP_
+#ifndef __FWGUI_IAPPLICATION_HPP__
+#define __FWGUI_IAPPLICATION_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -16,7 +16,7 @@ namespace fwGui
 /**
  * @brief   Defines the application manipulation API.
  * @class   IApplication
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -33,12 +33,21 @@ public:
     /// Tells the application to exit with a returncode
     FWGUI_API virtual void exit( int returncode ) = 0;
 
+    /// Sets if confirmation is required when exiting application
+    void setConfirm(bool confirm)
+    {
+        m_confirm = confirm;
+    }
+
     typedef std::string FactoryRegistryKeyType;
     FWGUI_API static const FactoryRegistryKeyType REGISTRY_KEY;
 
+protected:
+    /// Asks confirmation before exiting application.
+    bool m_confirm;
 };
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IAPPLICATION_HPP_*/
+#endif /*__FWGUI_IAPPLICATION_HPP__*/
 
diff --git a/SrcLib/core/fwGui/include/fwGui/ICursor.hpp b/SrcLib/core/fwGui/include/fwGui/ICursor.hpp
index 2b6a52a..c3b236a 100644
--- a/SrcLib/core/fwGui/include/fwGui/ICursor.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/ICursor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_ICURSOR_HPP_
-#define _FWGUI_ICURSOR_HPP_
+#ifndef __FWGUI_ICURSOR_HPP__
+#define __FWGUI_ICURSOR_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -16,7 +16,7 @@ namespace fwGui
 /**
  * @brief   Defines the generic cursor for IHM.
  * @class   ICursor
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -26,7 +26,8 @@ public:
     fwCoreNonInstanciableClassDefinitionsMacro( (ICursor)(::fwGui::GuiBaseObject) )
 
     /// Cursor type
-    typedef enum {
+    typedef enum
+    {
         DEFAULT,
         BUSY,
         WAIT,
@@ -52,6 +53,6 @@ public:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_ICURSOR_HPP_*/
+#endif /*__FWGUI_ICURSOR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IFrameSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IFrameSrv.hpp
index 6a85a6a..b399bd8 100644
--- a/SrcLib/core/fwGui/include/fwGui/IFrameSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IFrameSrv.hpp
@@ -1,79 +1,120 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IFRAMESRV_HPP_
-#define _FWGUI_IFRAMESRV_HPP_
+#ifndef __FWGUI_IFRAMESRV_HPP__
+#define __FWGUI_IFRAMESRV_HPP__
 
-#include <fwServices/IService.hpp>
 
 #include "fwGui/config.hpp"
 #include "fwGui/container/fwContainer.hpp"
-
 #include "fwGui/registrar/ViewRegistrar.hpp"
 #include "fwGui/layoutManager/IFrameLayoutManager.hpp"
 #include "fwGui/builder/IMenuBarBuilder.hpp"
 #include "fwGui/builder/IToolBarBuilder.hpp"
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
+
+#include <fwServices/IService.hpp>
+
 namespace fwGui
 {
 
 /**
  * @brief   Defines the service interface managing a frame.
- * @class   IFrameSrv
- * 
- * @date    2009-2010.
  *
+ * @section Slots Slots
+ *
+ * - \b setVisible(bool isVisible) : this slot shows the container (if isVisible = true) or hides it.
+ * - \b show() : this slot shows the container.
+ * - \b hide() : this slot hides the container.
+ *
+ * @section XML Example of XML configuration
+ *
+ * Example of configuration
+ * @code{.xml}
+   <service uid="mainFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::SDefaultFrame" autoConnect="no">
+     <window onclose="notify" />
+     <gui>
+         <frame>
+             <name>My App</name>
+             <icon>@BUNDLE_PREFIX@/myApp_1-0/icon.ico</icon>
+             <minSize width="800" height="600" />
+             <style mode="MODAL" />
+         </frame>
+         <toolBar />
+         <menuBar />
+     </gui>
+     <registry>
+         <toolBar sid="toolbar1" start="yes" />
+         <menuBar sid="menubar1" start="yes" />
+         <view sid="myView" start="yes" />
+     </registry>
+   </service>
+   @endcode
+ * - \<window onclose="notify" /\> : defines what to do when the frame is closed
+ *   - \b exit (by default) : the application is closed. Use it for the main frame.
+ *   - \b notify : send signal 'closed'
+ *   - \b message : a confirmation dialog appears asking user to confirm closing application
+ * - \<frame\> : defines the frame name, icon, size and style.
+ *   - \b style : defines frame style (modal, always on top, etc.), not mandatory.
+ *     Allowed values are MODAL, STAY_ON_TOP and DEFAULT (default value).
+ * - The toolBar section isn't mandatory.
+ * - The menuBar section isn't mandatory.
+
  */
 class FWGUI_CLASS_API IFrameSrv : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IFrameSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IFrameSrv)(::fwServices::IService) );
 
     /// Get widget defined for progress bar
     FWGUI_API static ::fwGui::container::fwContainer::sptr getProgressWidget();
 
-protected :
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Signal emitted when frame is closed and onclose policy is notify
+    static const ::fwCom::Signals::SignalKeyType s_CLOSED_SIG;
+    typedef ::fwCom::Signal< void ()> ClosedSignalType;
+    /**
+     * @}
+     */
+
+    /**
+     * @name Slots Keys
+     * @{
+     */
+
+    /// Slot to show/hide the container
+    static const ::fwCom::Slots::SlotKeyType s_SET_VISIBLE_SLOT;
 
-    FWGUI_API IFrameSrv() ;
+    /// Slot to show the container
+    static const ::fwCom::Slots::SlotKeyType s_SHOW_SLOT;
+
+    /// Slot to hide the container
+    static const ::fwCom::Slots::SlotKeyType s_HIDE_SLOT;
+    /**
+     * @}
+     */
 
-    FWGUI_API virtual ~IFrameSrv() ;
+
+protected:
+
+    FWGUI_API IFrameSrv();
+
+    FWGUI_API virtual ~IFrameSrv();
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
     /**
      * @brief Initialize frame managers.
      *
-     * Example of configuration
-     * @verbatim
-        <service uid="mainFrame" type="::fwGui::IFrameSrv" impl="::gui::frame::DefaultFrame" autoConnect="no">
-            <window onclose="notify" />
-            <gui>
-                <frame>
-                    <name>My App</name>
-                    <icon>Bundles/myApp_1-0/icon.ico</icon>
-                    <minSize width="800" height="600" />
-                </frame>
-                <toolBar />
-                <menuBar />
-            </gui>
-            <registry>
-                <toolBar sid="toolbar1" start="yes" />
-                <menuBar sid="menubar1" start="yes" />
-                <view sid="myView" start="yes" />
-            </registry>
-        </service>
-      @endverbatim
-     * - \<window onclose="notify" /\> : defines what to do when the frame is closed
-     *   - \b exit (by default) : the application is closed. Use it for the main frame.
-     *   - \b notify : notifies service's object with WINDOW_CLOSED event.
-     * - \<frame\> : defines the frame name, icon, size.
-     * - The toolBar section isn't mandatory.
-     * - The menuBar section isn't mandatory.
-     *
      * @see ::fwGui::registrar::ViewRegistrar::initialize(), ::fwGui::layoutManager::IFrameLayoutManager::initialize(),
      *      ::fwGui::builder::IToolBarBuilder::initialize(), ::fwGui::builder::IMenuBarBuilder::initialize()
      */
@@ -87,22 +128,31 @@ protected :
 
     FWGUI_API static const std::string CLOSE_POLICY_EXIT;
     FWGUI_API static const std::string CLOSE_POLICY_NOTIFY;
+    FWGUI_API static const std::string CLOSE_POLICY_MESSAGE;
 
     /// Static reference on a widget defined for progress bar installation
     FWGUI_API static ::fwGui::container::fwContainer::wptr m_progressWidget;
 
 private:
 
+    /// SLOT: show/hide the container
+    void setVisible(bool isVisible);
+    /// SLOT: show the container
+    void show();
+    /// SLOT: hide the container
+    void hide();
+
     void onCloseExit();
     void onCloseNotify();
+    void onCloseMessage();
     void initializeLayoutManager( ::fwRuntime::ConfigurationElement::sptr layoutConfig );
     void initializeMenuBarBuilder( ::fwRuntime::ConfigurationElement::sptr menuBarConfig );
     void initializeToolBarBuilder( ::fwRuntime::ConfigurationElement::sptr toolBarConfig );
 
     ::fwGui::layoutManager::IFrameLayoutManager::sptr m_frameLayoutManager;
-    ::fwGui::registrar::ViewRegistrar::sptr           m_viewRegistrar;
-    ::fwGui::builder::IMenuBarBuilder::sptr           m_menuBarBuilder;
-    ::fwGui::builder::IToolBarBuilder::sptr           m_toolBarBuilder;
+    ::fwGui::registrar::ViewRegistrar::sptr m_viewRegistrar;
+    ::fwGui::builder::IMenuBarBuilder::sptr m_menuBarBuilder;
+    ::fwGui::builder::IToolBarBuilder::sptr m_toolBarBuilder;
 
     ConfigurationType m_registrarConfig;
     ConfigurationType m_frameConfig;
@@ -113,10 +163,13 @@ private:
     bool m_hasToolBar;
 
     std::string m_closePolicy;
+
+    /// Signal emitted when frame is closed and onclose mode is message
+    ClosedSignalType::sptr m_sigClosed;
 };
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IFRAMESRV_HPP_*/
+#endif /*__FWGUI_IFRAMESRV_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp
index 3dcaa4e..3fa97ec 100644
--- a/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IGuiContainerSrv.hpp
@@ -1,94 +1,118 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IGUICONTAINERSRV_HPP_
-#define _FWGUI_IGUICONTAINERSRV_HPP_
-
-#include <fwServices/IService.hpp>
+#ifndef __FWGUI_IGUICONTAINERSRV_HPP__
+#define __FWGUI_IGUICONTAINERSRV_HPP__
 
 #include "fwGui/config.hpp"
 #include "fwGui/container/fwContainer.hpp"
-
 #include "fwGui/registrar/ViewRegistrar.hpp"
 #include "fwGui/layoutManager/IViewLayoutManager.hpp"
 #include "fwGui/builder/IToolBarBuilder.hpp"
 #include "fwGui/builder/IContainerBuilder.hpp"
+#include "fwGui/builder/ISlideViewBuilder.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwServices/IService.hpp>
+
 
 namespace fwGui
 {
 
 /**
  * @brief   Defines the service interface managing the layout.
- * @class   IGuiContainerSrv
- * 
- * @date    2009-2010.
+ *
+ * @section Slots Slots
+ *
+ * - \b setEnabled(bool isEnabled) : this slot enables the container (if isEnabled = true) or disables it.
+ * - \b enable() : this slot enables the container.
+ * - \b disable() : this slot disables the container
+ * - \b setVisible(bool isVisible) : this slot shows the container (if isVisible = true) or hides it.
+ * - \b show() : this slot shows the container.
+ * - \b hide() : this slot hides the container.
+ *
+ * @section XML Example of XML configuration
+ *
+ * @code{.xml}
+   <service uid="subView1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
+       <gui>
+           <layout type="::fwGui::LineLayoutManager" >
+               <orientation value="horizontal" />
+               <view caption="view3" />
+               <view caption="view4" />
+               <view caption="view5" />
+           </layout>
+           <toolBar />
+           <slideView />
+           <slideView align="top" size="200" opacity="1.0">
+               <styleSheet>color: blue; background-color: yellow</styleSheet>
+           </slideView>
+       </gui>
+       <registry>
+           <parent wid="myView" />
+           <toolBar sid="toolbar1" start="yes" />
+           <view sid="subView3" start="yes" />
+           <view wid="subView4" />
+           <view sid="subView5" />
+           <slideView sid="slideView1" start="yes />
+           <slideView wid="slideView2" />
+        </registry>
+   </service>
+   @endcode
+ *  - \<layout type="::fwGui::LineLayoutManager" \> : give the type of layout.
+ *    - \b type {::fwGui::LineLayoutManager | ::fwGui::CardinalLayoutManager | ::fwGui::TabLayoutManager |
+ *              ::fwGui::ToolboxLayoutManager} :
+ *     - \b ::fwGui::LineLayoutManager : all views will be on the same line or column (it depends of the orientation
+ *           value attribute)
+ *           @see ::fwGui::layoutManager::LineLayoutManagerBase
+ *     - \b ::fwGui::CardinalLayoutManager : all views will be added around a central view define by the align attribute.
+ *           @see ::fwGui::layoutManager::CardinalLayoutManagerBase
+ *     - \b ::fwGui::TabLayoutManager : all views will be draw as tab.
+ *           @see ::fwGui::layoutManager::TabLayoutManagerBase
+ *     - \b ::fwGui::ToolboxLayoutManager : all views will be draw in toolbox.
+ *           @see ::fwGui::layoutManager::ToolboxLayoutManagerBase
+ *  - \b toolBar: defines the toolBar configuration.
+ *           @see ::fwGui::builder::IToolBarBuilder
+ *  - \b slideView: defines a slide view.
+ *           @see ::fwGui::builder::ISlideViewBuilder
+ *
+ * @note The layout and registry sections can be empty. In this case no subview will be created.
+ *
+ * @warning
+ * - The order of the view in each section (gui and registry) must be the same.\n
+ *   For example: the view caption "view3" will be connected with the service which have the sid = "subView3" and so one
+ *   (it also could be a wid).
+ *
  *
  */
 class FWGUI_CLASS_API IGuiContainerSrv : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IGuiContainerSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IGuiContainerSrv)(::fwServices::IService) );
 
     FWGUI_API ::fwGui::container::fwContainer::sptr getContainer();
 
     FWGUI_API void setParent(std::string wid);
 
-protected :
+protected:
 
-    FWGUI_API IGuiContainerSrv() ;
+    FWGUI_API IGuiContainerSrv();
 
-    FWGUI_API virtual ~IGuiContainerSrv() ;
+    FWGUI_API virtual ~IGuiContainerSrv();
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
     /**
      * @brief Initialize managers.
      *
-     * Example of configuration
-     * @verbatim
-        <service uid="subView1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
-            <gui>
-                <layout type="::fwGui::LineLayoutManager" >
-                    <orientation value="horizontal" />
-                    <view caption="view3" />
-                    <view caption="view4" />
-                    <view caption="view5" />
-                </layout>
-                <toolBar />
-            </gui>
-            <registry>
-                <parent wid="myView" />
-                <toolBar sid="toolbar1" start="yes" />
-                <view sid="subView3" start="yes" />
-                <view wid="subView4" />
-                <view sid="subView5" />
-            </registry>
-        </service>
-      @endverbatim
-     *  - \<layout type="::fwGui::LineLayoutManager" \> : give the type of layout.
-     *    - \b type {::fwGui::LineLayoutManager |::fwGui::CardinalLayoutManager |::fwGui::TabLayoutManager |::fwGui::ToolboxLayoutManager} :
-     *     - \b ::fwGui::LineLayoutManager : all views will be on the same line or column (it depends of the orientation value attribute)
-     *           @see ::fwGui::layoutManager::LineLayoutManagerBase
-     *     - \b ::fwGui::CardinalLayoutManager : all views will be added around a central view define by the align attribute.
-     *           @see ::fwGui::layoutManager::CardinalLayoutManagerBase
-     *     - \b ::fwGui::TabLayoutManager : all views will be draw as tab.
-     *           @see ::fwGui::layoutManager::TabLayoutManagerBase
-     *     - \b ::fwGui::ToolboxLayoutManager : all views will be draw in toolbox.
-     *           @see ::fwGui::layoutManager::ToolboxLayoutManagerBase
-     *  - The toolBar section isn't mandatory.
-     *
-     * @note The layout and registry sections can be empty. In this case no subview will be created.
-     *
-     * @warning
-     * - The order of the view in each section (gui and registry) must be the same.\n
-     *   For example: the view caption "view3" will be connected with the service which have the sid = "subView3" and so one (it also could be a wid).
-     *
-     * @see ::fwGui::registrar::ViewRegistrar::initialize(), ::fwGui::layoutManager::IViewLayoutManager::initialize(), ::fwGui::builder::IToolBarBuilder::initialize()
+       @see ::fwGui::registrar::ViewRegistrar::initialize(), ::fwGui::layoutManager::IViewLayoutManager::initialize(), ::fwGui::builder::IToolBarBuilder::initialize()
      */
     FWGUI_API void initialize();
 
@@ -102,27 +126,70 @@ protected :
     /// Stops sub-views and toobar services. Destroys view, sub-views and toolbar containers.
     FWGUI_API void destroy();
 
+    /**
+     * @name Slots Keys
+     * @{
+     */
+    /// Slot to enable/disable the action
+    FWGUI_API static const ::fwCom::Slots::SlotKeyType s_SET_ENABLED_SLOT;
+
+    /// Slot to enable the container
+    FWGUI_API static const ::fwCom::Slots::SlotKeyType s_ENABLE_SLOT;
+
+    /// Slot to disable the container
+    FWGUI_API static const ::fwCom::Slots::SlotKeyType s_DISABLE_SLOT;
+
+    /// Slot to show/hide the container
+    FWGUI_API static const ::fwCom::Slots::SlotKeyType s_SET_VISIBLE_SLOT;
+
+    /// Slot to show the container
+    FWGUI_API static const ::fwCom::Slots::SlotKeyType s_SHOW_SLOT;
+
+    /// Slot to hide the container
+    FWGUI_API static const ::fwCom::Slots::SlotKeyType s_HIDE_SLOT;
+    /**
+     * @}
+     */
+
 private:
 
+    typedef std::vector< ::fwGui::builder::ISlideViewBuilder::sptr > SlideViewContainerType;
+
+    /// SLOT: enable/disable the container
+    void setEnabled(bool isEnabled);
+    /// SLOT: enable the container
+    void enable();
+    /// SLOT: disable the container
+    void disable();
+    /// SLOT: show/hide the container
+    void setVisible(bool isVisible);
+    /// SLOT: show the container
+    void show();
+    /// SLOT: hide the container
+    void hide();
+
     void initializeLayoutManager( ::fwRuntime::ConfigurationElement::sptr layoutConfig );
     void initializeToolBarBuilder( ::fwRuntime::ConfigurationElement::sptr toolBarConfig );
+    void initializeSlideViewBuilder( ::fwRuntime::ConfigurationElement::sptr slideViewConfig );
 
     bool m_viewLayoutManagerIsCreated;
     ::fwGui::layoutManager::IViewLayoutManager::sptr m_viewLayoutManager;
 
-    ::fwGui::registrar::ViewRegistrar::sptr    m_viewRegistrar;
-    ::fwGui::builder::IToolBarBuilder::sptr    m_toolBarBuilder;
-    ::fwGui::builder::IContainerBuilder::sptr  m_containerBuilder;
+    ::fwGui::registrar::ViewRegistrar::sptr m_viewRegistrar;
+    ::fwGui::builder::IToolBarBuilder::sptr m_toolBarBuilder;
+    ::fwGui::builder::IContainerBuilder::sptr m_containerBuilder;
+    SlideViewContainerType m_slideViewBuilders;
 
     ConfigurationType m_viewRegistrarConfig;
     ConfigurationType m_viewLayoutConfig;
     ConfigurationType m_toolBarConfig;
+    ConfigurationType m_slideViewConfig;
 
     bool m_hasToolBar;
 };
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IGUICONTAINERSRV_HPP_*/
+#endif /*__FWGUI_IGUICONTAINERSRV_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IMenuBarSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IMenuBarSrv.hpp
index dbe4fff..cefbb97 100644
--- a/SrcLib/core/fwGui/include/fwGui/IMenuBarSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IMenuBarSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IMENUBARSRV_HPP_
-#define _FWGUI_IMENUBARSRV_HPP_
+#ifndef __FWGUI_IMENUBARSRV_HPP__
+#define __FWGUI_IMENUBARSRV_HPP__
 
 #include <fwServices/IService.hpp>
 
@@ -21,16 +21,16 @@ namespace fwGui
 /**
  * @brief   Defines the service interface managing the menu bar.
  * @class   IMenuBarSrv
- * 
+ *
  * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API IMenuBarSrv : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IMenuBarSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IMenuBarSrv)(::fwServices::IService) );
 
     /// Method called when a menu service is stopping
     FWGUI_API void menuServiceStopping(std::string menuSrvSID);
@@ -38,11 +38,11 @@ public :
     /// Method called when a menu service is starting
     FWGUI_API void menuServiceStarting(std::string menuSrvSID);
 
-protected :
+protected:
 
-    FWGUI_API IMenuBarSrv() ;
+    FWGUI_API IMenuBarSrv();
 
-    FWGUI_API virtual ~IMenuBarSrv() ;
+    FWGUI_API virtual ~IMenuBarSrv();
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
@@ -50,8 +50,8 @@ protected :
      * @brief Initialize the layout and registry managers.
      *
      * Example of configuration
-     * @verbatim
-      <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
+     * @code{.xml}
+       <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no" >
           <gui>
               <layout>
                   <menu name="My Menu"/>
@@ -62,8 +62,8 @@ protected :
               <menu sid="myMenu" start="yes" />
               <menu sid="myMenu2" start="yes" />
           </registry>
-      </service>
-       @endverbatim
+       </service>
+       @endcode
      *  - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
      *  - \<registry\> \</registry\> : (mandatory) describe the service management.
      *
@@ -88,7 +88,7 @@ private:
     void initializeLayoutManager( ::fwRuntime::ConfigurationElement::sptr layoutConfig );
 
     ::fwGui::layoutManager::IMenuBarLayoutManager::sptr m_layoutManager;
-    ::fwGui::registrar::MenuBarRegistrar::sptr    m_registrar;
+    ::fwGui::registrar::MenuBarRegistrar::sptr m_registrar;
 
     ConfigurationType m_registrarConfig;
     ConfigurationType m_layoutConfig;
@@ -99,6 +99,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IMENUBARSRV_HPP_*/
+#endif /*__FWGUI_IMENUBARSRV_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IMenuItemCallback.hpp b/SrcLib/core/fwGui/include/fwGui/IMenuItemCallback.hpp
index ece53bd..4fc87b9 100644
--- a/SrcLib/core/fwGui/include/fwGui/IMenuItemCallback.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IMenuItemCallback.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IMENUITEMCALLBACK_HPP_
-#define _FWGUI_IMENUITEMCALLBACK_HPP_
+#ifndef __FWGUI_IMENUITEMCALLBACK_HPP__
+#define __FWGUI_IMENUITEMCALLBACK_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -16,26 +16,26 @@ namespace fwGui
 /**
  * @brief   Defines the menu item callback.
  * @class   IMenuItemCallback
- * 
+ *
  * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API IMenuItemCallback : public ::fwGui::GuiBaseObject
 {
 
-public :
+public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (IMenuItemCallback)(::fwGui::GuiBaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (IMenuItemCallback)(::fwGui::GuiBaseObject) );
 
     /**
      * @brief  Called method when callback is executed.
      */
-    FWGUI_API virtual void execute() =0;
+    FWGUI_API virtual void execute() = 0;
 
 };
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IMENUITEMCALLBACK_HPP_*/
+#endif /*__FWGUI_IMENUITEMCALLBACK_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IMenuSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IMenuSrv.hpp
index 28dee2a..3ce1260 100644
--- a/SrcLib/core/fwGui/include/fwGui/IMenuSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IMenuSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IMENUSRV_HPP_
-#define _FWGUI_IMENUSRV_HPP_
+#ifndef __FWGUI_IMENUSRV_HPP__
+#define __FWGUI_IMENUSRV_HPP__
 
 #include <fwServices/IService.hpp>
 
@@ -20,16 +20,16 @@ namespace fwGui
 /**
  * @brief   Defines the service interface managing the menu.
  * @class   IMenuSrv
- * 
+ *
  * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API IMenuSrv : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IMenuSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IMenuSrv)(::fwServices::IService) );
 
     /// Method called when an action service is stopping
     FWGUI_API void actionServiceStopping(std::string actionSrvSID);
@@ -43,11 +43,14 @@ public :
     /// Method called when the action service is executable
     FWGUI_API void actionServiceSetExecutable(std::string actionSrvSID, bool isExecutable);
 
-protected :
+    /// Method called when the action service is visible
+    FWGUI_API void actionServiceSetVisible(std::string actionSrvSID, bool isVisible);
+
+protected:
 
-    FWGUI_API IMenuSrv() ;
+    FWGUI_API IMenuSrv();
 
-    FWGUI_API virtual ~IMenuSrv() ;
+    FWGUI_API virtual ~IMenuSrv();
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
@@ -55,10 +58,10 @@ protected :
      * @brief Initialize the layout and registry managers.
      *
      * Example of configuration
-     * @verbatim
-        <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
+     * @code{.xml}
+        <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no" >
             <gui>
-                <layout>
+                <layout hideAction="false">
                     <menuItem name="My item 1" shortcut="1" style="check" />
                     <separator />
                     <menuItem name="My item 2" shortcut="2" style="radio" />
@@ -77,8 +80,10 @@ protected :
                 <menuItem sid="actionQuit" start="no" />
             </registry>
         </service>
-       @endverbatim
+       @endcode
      * - \<gui\> \</gui\> : (mandatory) describe the interface of the service. It must contain a layout section.
+     *   - \<layout\> \</layout\> : (mandatory) describe the layout of the service
+     *     - \b hideAction: (optional, default=false): if true, the actions are hidden when they are stopped.
      * - \<registry\> \</registry\> : (mandatory) describe the service management.
      *   - \<menuItem\> represents IActionSrv
      *   - \<menu\> represents IMenuSrv
@@ -104,7 +109,7 @@ private:
     void initializeLayoutManager( ::fwRuntime::ConfigurationElement::sptr layoutConfig );
 
     ::fwGui::layoutManager::IMenuLayoutManager::sptr m_layoutManager;
-    ::fwGui::registrar::MenuRegistrar::sptr    m_registrar;
+    ::fwGui::registrar::MenuRegistrar::sptr m_registrar;
 
     ConfigurationType m_registrarConfig;
     ConfigurationType m_layoutConfig;
@@ -115,6 +120,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_IMENUSRV_HPP_*/
+#endif /*__FWGUI_IMENUSRV_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/IToolBarSrv.hpp b/SrcLib/core/fwGui/include/fwGui/IToolBarSrv.hpp
index 57fe22c..8a4e890 100644
--- a/SrcLib/core/fwGui/include/fwGui/IToolBarSrv.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/IToolBarSrv.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_ITOOLBARSRV_HPP_
-#define _FWGUI_ITOOLBARSRV_HPP_
+#ifndef __FWGUI_ITOOLBARSRV_HPP__
+#define __FWGUI_ITOOLBARSRV_HPP__
 
 #include <fwServices/IService.hpp>
 
@@ -19,17 +19,13 @@ namespace fwGui
 
 /**
  * @brief   Defines the service interface managing the toolBar.
- * @class   IToolBarSrv
- * 
- * @date    2009-2010.
- *
  */
 class FWGUI_CLASS_API IToolBarSrv : public ::fwServices::IService
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IToolBarSrv)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IToolBarSrv)(::fwServices::IService) );
 
     /// Method called when an action service is stopping
     FWGUI_API void actionServiceStopping(std::string actionSrvSID);
@@ -43,11 +39,14 @@ public :
     /// Method called when the action service is executable
     FWGUI_API void actionServiceSetExecutable(std::string actionSrvSID, bool isExecutable);
 
-protected :
+    /// Method called when the action service is visible
+    FWGUI_API void actionServiceSetVisible(std::string actionSrvSID, bool isVisible);
 
-    FWGUI_API IToolBarSrv() ;
+protected:
 
-    FWGUI_API virtual ~IToolBarSrv() ;
+    FWGUI_API IToolBarSrv();
+
+    FWGUI_API virtual ~IToolBarSrv();
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
 
@@ -55,15 +54,15 @@ protected :
      * @brief Initialize the layout and registry managers.
      *
      * Example of configuration
-     * @verbatim
-       <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no" >
+     * @code{.xml}
+       <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no" >
            <gui>
-               <layout>
-                   <menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                   <menuItem name="My item 3" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
+               <layout hideAction="false">
+                   <menuItem name="My item 2" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                   <menuItem name="My item 3" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
                    <separator />
-                   <menuItem name="My item A" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                   <menuItem name="My item B" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
+                   <menuItem name="My item A" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                   <menuItem name="My item B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
                    <separator />
                    <menu name="My menu" />
                    <separator />
@@ -79,12 +78,14 @@ protected :
                <editor sid="editor" />
            </registry>
        </service>
-       @endverbatim
-     *   - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
-     *   - \<registry\> \</registry\> : (mandatory) describe the service management.
-     *     - \<menuItem\> represents IActionSrv
-     *     - \<menu\> represents IMenuSrv
-     *     - \<editor\> represents container service (IEditor, IView, ...)
+       @endcode
+     * - \<gui\> \</gui\> : (mandatory) describe the interface of the service.
+     *   - \<layout\> \</layout\> : (mandatory) describe the layout of the service
+     *     - \b hideAction: (optional, default=false): if true, the actions are hidden when they are stopped.
+     * - \<registry\> \</registry\> : (mandatory) describe the service management.
+     *   - \<menuItem\> represents IActionSrv
+     *   - \<menu\> represents IMenuSrv
+     *   - \<editor\> represents container service (IEditor, IView, ...)
      *
      *   @warning
      *   - The number of item in the gui section must be EQUAL to the registry section.
@@ -106,7 +107,7 @@ private:
     void initializeLayoutManager( ::fwRuntime::ConfigurationElement::sptr layoutConfig );
 
     ::fwGui::layoutManager::IToolBarLayoutManager::sptr m_layoutManager;
-    ::fwGui::registrar::ToolBarRegistrar::sptr    m_registrar;
+    ::fwGui::registrar::ToolBarRegistrar::sptr m_registrar;
 
     ConfigurationType m_registrarConfig;
     ConfigurationType m_layoutConfig;
@@ -117,6 +118,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUI_ITOOLBARSRV_HPP_*/
+#endif /*__FWGUI_ITOOLBARSRV_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/Namespace.hpp
index ec55f07..5eb7eed 100644
--- a/SrcLib/core/fwGui/include/fwGui/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUINAMESPACE_HPP_
-#define FWGUINAMESPACE_HPP_
+#ifndef __FWGUI_NAMESPACE_HPP__
+#define __FWGUI_NAMESPACE_HPP__
 
 /**
  * @brief      The namespace fwGui contains the base interface for IHM services.
  * @namespace  fwGui
- * 
+ *
  * @date       2009-2010.
  *
  */
 namespace fwGui
 {
 }
-#endif /* FWGUINAMESPACE_HPP_ */
+#endif /* __FWGUI_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/backend.hpp b/SrcLib/core/fwGui/include/fwGui/backend.hpp
new file mode 100644
index 0000000..f210b59
--- /dev/null
+++ b/SrcLib/core/fwGui/include/fwGui/backend.hpp
@@ -0,0 +1,21 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUI_BACKEND_HPP__
+#define __FWGUI_BACKEND_HPP__
+
+#include "fwGui/config.hpp"
+
+namespace fwGui
+{
+
+FWGUI_API bool isBackendLoaded();
+
+} // namespace fwGui
+
+#endif /*__FWGUI_BACKEND_HPP__*/
+
+
diff --git a/SrcLib/core/fwGui/include/fwGui/builder/IContainerBuilder.hpp b/SrcLib/core/fwGui/include/fwGui/builder/IContainerBuilder.hpp
index 0028842..25c8e27 100644
--- a/SrcLib/core/fwGui/include/fwGui/builder/IContainerBuilder.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/builder/IContainerBuilder.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_BUILDER_ICONTAINERBUILDER_HPP_
-#define _FWGUI_BUILDER_ICONTAINERBUILDER_HPP_
+#ifndef __FWGUI_BUILDER_ICONTAINERBUILDER_HPP__
+#define __FWGUI_BUILDER_ICONTAINERBUILDER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -21,7 +21,7 @@ namespace builder
 /**
  * @brief   Defines the interface class  for the container builder.
  * @class   IContainerBuilder
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -76,6 +76,6 @@ protected:
 } // namespace builder
 } // namespace fwGui
 
-#endif /*_FWGUI_BUILDER_ICONTAINERBUILDER_HPP_*/
+#endif /*__FWGUI_BUILDER_ICONTAINERBUILDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/builder/IMenuBarBuilder.hpp b/SrcLib/core/fwGui/include/fwGui/builder/IMenuBarBuilder.hpp
index 3a516f7..f7d4339 100644
--- a/SrcLib/core/fwGui/include/fwGui/builder/IMenuBarBuilder.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/builder/IMenuBarBuilder.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_BUILDER_IMENUBARBUILDER_HPP_
-#define _FWGUI_BUILDER_IMENUBARBUILDER_HPP_
+#ifndef __FWGUI_BUILDER_IMENUBARBUILDER_HPP__
+#define __FWGUI_BUILDER_IMENUBARBUILDER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -22,7 +22,7 @@ namespace builder
 /**
  * @brief   Defines the interface class  for the menubar builder.
  * @class   IMenuBarBuilder
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -74,6 +74,6 @@ protected:
 } // namespace builder
 } // namespace fwGui
 
-#endif /*_FWGUI_BUILDER_IMENUBARBUILDER_HPP_*/
+#endif /*__FWGUI_BUILDER_IMENUBARBUILDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/builder/ISlideViewBuilder.hpp b/SrcLib/core/fwGui/include/fwGui/builder/ISlideViewBuilder.hpp
new file mode 100644
index 0000000..1e07050
--- /dev/null
+++ b/SrcLib/core/fwGui/include/fwGui/builder/ISlideViewBuilder.hpp
@@ -0,0 +1,98 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUI_BUILDER_ISLIDEVIEWBUILDER_HPP__
+#define __FWGUI_BUILDER_ISLIDEVIEWBUILDER_HPP__
+
+#include "fwGui/GuiBaseObject.hpp"
+#include "fwGui/container/fwContainer.hpp"
+#include "fwGui/config.hpp"
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+namespace fwGui
+{
+
+namespace builder
+{
+
+/**
+ * @brief   Defines the interface class for the slide view builder.
+ *
+ * Example of configuration
+ * @code{.xml}
+    <slideView align="top" size="200" opacity="1.0">
+        <styleSheet>color: blue; background-color: yellow</styleSheet>
+    </slideView>
+   @endcode
+ *      - \b align (optional, default=left) : defines the widget side ('left', 'right', 'top' or 'bottom')
+ *      - \b size (optional, default=200) : defines the widget width or height (width if side is 'left' or 'right' and
+ *           height if side is 'top' or 'bottom')
+ *      - \b opacity (optional, default=1.0) : defines the widget opacity
+ *      - \b styleSheet (optional) : defines the style of the widget (see Qt style sheets
+ *           http://doc.qt.io/qt-5/stylesheet-examples.html )
+ */
+class FWGUI_CLASS_API ISlideViewBuilder : public ::fwGui::GuiBaseObject
+{
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (ISlideViewBuilder)(::fwGui::GuiBaseObject) )
+
+    typedef std::string RegistryKeyType;
+
+    FWGUI_API const static RegistryKeyType REGISTRY_KEY;
+
+    enum Aligment
+    {
+        TOP,
+        BOTTOM,
+        RIGHT,
+        LEFT
+    };
+
+
+    /// Constructor. Do nothing.
+    FWGUI_API ISlideViewBuilder();
+
+    /// Destructor. Do nothing.
+    FWGUI_API virtual ~ISlideViewBuilder();
+
+    /**
+     * @brief Returns the builded tool bar.
+     */
+    FWGUI_API virtual ::fwGui::container::fwContainer::sptr getContainer() const;
+
+    /**
+     * @brief Initialize the tool bar.
+     */
+    FWGUI_API virtual void initialize( ::fwRuntime::ConfigurationElement::sptr configuration);
+
+    /**
+     * @brief Instantiate layout with parent toolBar.
+     * @pre LayoutManager must be initialized before.
+     * @pre parent toolBar must be instanced.
+     */
+    FWGUI_API virtual void createContainer( ::fwGui::container::fwContainer::sptr parent ) = 0;
+
+    /**
+     * @brief Destroy local layout with sub containers.
+     * @pre services using this sub containers must be stopped before.
+     */
+    FWGUI_API virtual void destroyContainer() = 0;
+
+protected:
+
+    ::fwGui::container::fwContainer::sptr m_container;
+
+    int m_size;
+    double m_opacity;
+    Aligment m_aligment;
+    std::string m_styleSheet;
+};
+
+} // namespace builder
+} // namespace fwGui
+
+#endif /*__FWGUI_BUILDER_ISLIDEVIEWBUILDER_HPP__*/
diff --git a/SrcLib/core/fwGui/include/fwGui/builder/IToolBarBuilder.hpp b/SrcLib/core/fwGui/include/fwGui/builder/IToolBarBuilder.hpp
index 5ddb7d8..cf55451 100644
--- a/SrcLib/core/fwGui/include/fwGui/builder/IToolBarBuilder.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/builder/IToolBarBuilder.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_BUILDER_ITOOLBARBUILDER_HPP_
-#define _FWGUI_BUILDER_ITOOLBARBUILDER_HPP_
+#ifndef __FWGUI_BUILDER_ITOOLBARBUILDER_HPP__
+#define __FWGUI_BUILDER_ITOOLBARBUILDER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -23,7 +23,7 @@ namespace builder
 /**
  * @brief   Defines the interface class  for the toolbar builder.
  * @class   IToolBarBuilder
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -60,11 +60,11 @@ public:
      * @brief Initialize the tool bar.
      *
      * Example of configuration
-     * @verbatim
+     * @code{.xml}
         <toolBar align="top">
             <toolBitmapSize height= "50" width="50" />
         </toolBar>
-       @endverbatim
+       @endcode
         - \b align : toolbar alignment (top, bottom, left, right)
      *  - \<toolBitmapSize height= "50" width="50"/\> : give the size of the icon.
      */
@@ -98,6 +98,6 @@ protected:
 } // namespace builder
 } // namespace fwGui
 
-#endif /*_FWGUI_BUILDER_ITOOLBARBUILDER_HPP_*/
+#endif /*__FWGUI_BUILDER_ITOOLBARBUILDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp
index 103adc7..d98bbb6 100644
--- a/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/builder/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIBUILDERNAMESPACE_HPP_
-#define FWGUIBUILDERNAMESPACE_HPP_
+#ifndef __FWGUI_BUILDER_NAMESPACE_HPP__
+#define __FWGUI_BUILDER_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
  * @brief       The namespace fwGui::builder contains the base interface for GUI elements builder.
  * @namespace   fwGui::builder
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace builder
 
 }
 }
-#endif /* FWGUIBUILDERNAMESPACE_HPP_ */
+#endif /* __FWGUI_BUILDER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/config.hpp b/SrcLib/core/fwGui/include/fwGui/config.hpp
deleted file mode 100644
index e807b8f..0000000
--- a/SrcLib/core/fwGui/include/fwGui/config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-
-#ifndef _FWGUI_CONFIG_HPP_
-#define _FWGUI_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWGUI_EXPORTS
-    #define FWGUI_API __declspec(dllexport)
-    #else
-    #define FWGUI_API __declspec(dllimport)
-    #endif
-
-    #define FWGUI_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWGUI_EXPORTS
-    #define FWGUI_API __attribute__ ((visibility("default")))
-    #define FWGUI_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWGUI_API __attribute__ ((visibility("hidden")))
-    //#define FWGUI_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWGUI_API 
-    #define FWGUI_CLASS_API 
-    #endif
-
-#else
-
-    #define FWGUI_API
-    #define FWGUI_CLASS_API
-
-#endif
-
-#endif //_FWGUI_CONFIG_HPP_
diff --git a/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp
index 9976bfc..ef6d006 100644
--- a/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/container/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUICONTAINERNAMESPACE_HPP_
-#define FWGUICONTAINERNAMESPACE_HPP_
+#ifndef __FWGUI_CONTAINER_NAMESPACE_HPP__
+#define __FWGUI_CONTAINER_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
  * @brief       The namespace fwGui::container contains the base interface for GUI containers (toolbar, menu, menuBar...).
  * @namespace   fwGui::container
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace container
 
 }
 }
-#endif /* FWGUICONTAINERNAMESPACE_HPP_ */
+#endif /* __FWGUI_CONTAINER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/container/fwContainer.hpp b/SrcLib/core/fwGui/include/fwGui/container/fwContainer.hpp
index 92262fc..4626dc0 100644
--- a/SrcLib/core/fwGui/include/fwGui/container/fwContainer.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/container/fwContainer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_FWCONTAINER_HPP_
-#define _FWGUI_FWCONTAINER_HPP_
+#ifndef __FWGUI_CONTAINER_FWCONTAINER_HPP__
+#define __FWGUI_CONTAINER_FWCONTAINER_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -17,7 +17,7 @@ namespace container
 /**
  * @brief   Defines the generic container for IHM.
  * @class   fwContainer
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -26,19 +26,20 @@ class FWGUI_CLASS_API fwContainer : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (fwContainer)(::fwGui::GuiBaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (fwContainer)(::fwGui::GuiBaseObject) );
 
-    FWGUI_API virtual void clean() = 0;
+    FWGUI_API virtual void clean()            = 0;
     FWGUI_API virtual void destroyContainer() = 0;
-    FWGUI_API virtual bool isShownOnScreen() = 0;
+    FWGUI_API virtual bool isShownOnScreen()  = 0;
 
     FWGUI_API virtual void setVisible(bool isVisible) = 0;
+    FWGUI_API virtual void setEnabled(bool isEnabled) = 0;
 
 };
 
 } // namespace container
 } // namespace fwGui
 
-#endif /*_FWGUI_FWCONTAINER_HPP_*/
+#endif /*__FWGUI_CONTAINER_FWCONTAINER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/container/fwMenu.hpp b/SrcLib/core/fwGui/include/fwGui/container/fwMenu.hpp
index 75ae702..f0fbd7e 100644
--- a/SrcLib/core/fwGui/include/fwGui/container/fwMenu.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/container/fwMenu.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_FWMENU_HPP_
-#define _FWGUI_FWMENU_HPP_
+#ifndef __FWGUI_CONTAINER_FWMENU_HPP__
+#define __FWGUI_CONTAINER_FWMENU_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -17,7 +17,7 @@ namespace container
 /**
  * @brief   Defines the menu for IHM.
  * @class   fwMenuBar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -26,15 +26,15 @@ class FWGUI_CLASS_API fwMenu : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (fwMenu)(::fwGui::GuiBaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (fwMenu)(::fwGui::GuiBaseObject) );
 
-    FWGUI_API virtual void clean() = 0;
+    FWGUI_API virtual void clean()            = 0;
     FWGUI_API virtual void destroyContainer() = 0;
 
 };
 } // namespace container
 } // namespace fwGui
 
-#endif /*_FWGUI_FWMENU_HPP_*/
+#endif /*__FWGUI_CONTAINER_FWMENU_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/container/fwMenuBar.hpp b/SrcLib/core/fwGui/include/fwGui/container/fwMenuBar.hpp
index df2ecbf..4b92111 100644
--- a/SrcLib/core/fwGui/include/fwGui/container/fwMenuBar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/container/fwMenuBar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_FWMENUBAR_HPP_
-#define _FWGUI_FWMENUBAR_HPP_
+#ifndef __FWGUI_CONTAINER_FWMENUBAR_HPP__
+#define __FWGUI_CONTAINER_FWMENUBAR_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -17,7 +17,7 @@ namespace container
 /**
  * @brief   Defines the menu bar for IHM.
  * @class   fwMenuBar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -26,15 +26,15 @@ class FWGUI_CLASS_API fwMenuBar : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (fwMenuBar)(::fwGui::GuiBaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (fwMenuBar)(::fwGui::GuiBaseObject) );
 
-    FWGUI_API virtual void clean() = 0;
+    FWGUI_API virtual void clean()            = 0;
     FWGUI_API virtual void destroyContainer() = 0;
 
 };
 } // namespace container
 } // namespace fwGui
 
-#endif /*_FWGUI_FWMENUBAR_HPP_*/
+#endif /*__FWGUI_CONTAINER_FWMENUBAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/container/fwMenuItem.hpp b/SrcLib/core/fwGui/include/fwGui/container/fwMenuItem.hpp
index 7b9e2f4..3303ef2 100644
--- a/SrcLib/core/fwGui/include/fwGui/container/fwMenuItem.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/container/fwMenuItem.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_FWMENUITEM_HPP_
-#define _FWGUI_FWMENUITEM_HPP_
+#ifndef __FWGUI_CONTAINER_FWMENUITEM_HPP__
+#define __FWGUI_CONTAINER_FWMENUITEM_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -17,7 +17,7 @@ namespace container
 /**
  * @brief   Defines the menu item for IHM.
  * @class   fwMenuItem
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -26,15 +26,15 @@ class FWGUI_CLASS_API fwMenuItem : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (fwMenuItem)(::fwGui::GuiBaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (fwMenuItem)(::fwGui::GuiBaseObject) );
 
-    FWGUI_API virtual void clean() = 0;
+    FWGUI_API virtual void clean()            = 0;
     FWGUI_API virtual void destroyContainer() = 0;
 
 };
 } // namespace container
 } // namespace fwGui
 
-#endif /*_FWGUI_FWMENUITEM_HPP_*/
+#endif /*__FWGUI_CONTAINER_FWMENUITEM_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/container/fwToolBar.hpp b/SrcLib/core/fwGui/include/fwGui/container/fwToolBar.hpp
index bafb696..18d5012 100644
--- a/SrcLib/core/fwGui/include/fwGui/container/fwToolBar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/container/fwToolBar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_FWTOOLBAR_HPP_
-#define _FWGUI_FWTOOLBAR_HPP_
+#ifndef __FWGUI_CONTAINER_FWTOOLBAR_HPP__
+#define __FWGUI_CONTAINER_FWTOOLBAR_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/config.hpp"
@@ -17,7 +17,7 @@ namespace container
 /**
  * @brief   Defines the tool bar for IHM.
  * @class   fwToolBar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -26,15 +26,15 @@ class FWGUI_CLASS_API fwToolBar : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro ( (fwToolBar)(::fwGui::GuiBaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro ( (fwToolBar)(::fwGui::GuiBaseObject) );
 
-    FWGUI_API virtual void clean() = 0;
+    FWGUI_API virtual void clean()            = 0;
     FWGUI_API virtual void destroyContainer() = 0;
 
 };
 } // namespace container
 } // namespace fwGui
 
-#endif /*_FWGUI_FWTOOLBAR_HPP_*/
+#endif /*__FWGUI_CONTAINER_FWTOOLBAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/IInputDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/IInputDialog.hpp
index af25ba3..8461439 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/IInputDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/IInputDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IINPUTDIALOG_HPP_
-#define _FWGUI_IINPUTDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_IINPUTDIALOG_HPP__
+#define __FWGUI_DIALOG_IINPUTDIALOG_HPP__
 
 #include <string>
 
@@ -19,7 +19,7 @@ namespace dialog
 /**
  * @brief   Defines the generic input dialog box for IHM.
  * @class   IInputDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -55,6 +55,6 @@ public:
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_IINPUTDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_IINPUTDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/ILocationDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/ILocationDialog.hpp
index 4cce4fc..cd759ea 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/ILocationDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/ILocationDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_ILOCATIONDIALOG_HPP_
-#define _FWGUI_ILOCATIONDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_ILOCATIONDIALOG_HPP__
+#define __FWGUI_DIALOG_ILOCATIONDIALOG_HPP__
 
 #include <boost/filesystem.hpp>
 
@@ -24,7 +24,7 @@ namespace dialog
 /**
  * @brief   Defines the generic file/folder selector dialog for IHM.
  * @class   LocationDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -35,14 +35,16 @@ public:
 
     fwCoreNonInstanciableClassDefinitionsMacro( (ILocationDialog)(::fwGui::GuiBaseObject) )
 
-    typedef enum {
-        NONE            = 0,
-        READ            = 1 << 1,
-        WRITE           = 1 << 2,
-        FILE_MUST_EXIST = 1 << 3,
+    typedef enum
+    {
+        NONE                = 0,
+        READ                = 1 << 1,
+            WRITE           = 1 << 2,
+            FILE_MUST_EXIST = 1 << 3,
     } Options;
 
-    typedef enum {
+    typedef enum
+    {
         SINGLE_FILE,
         FOLDER,
         MULTI_FILES
@@ -76,10 +78,10 @@ public:
     FWGUI_API virtual void saveDefaultLocation(::fwData::location::ILocation::sptr loc);
 
     /// set the type of location for the dialog (SINGLE_FILE, FORLDER, MULTI_FILES)
-    FWGUI_API virtual void setType( Types type ) =0;
+    FWGUI_API virtual void setType( Types type ) = 0;
 
     /// allow to set option to the file dialog mode=READ/WRITE , check=FILE_MUST_EXIST
-    FWGUI_API virtual ILocationDialog& setOption( Options option) =0;
+    FWGUI_API virtual ILocationDialog& setOption( Options option) = 0;
 
     /**
      * @brief specify some filtering when browsing files:
@@ -87,7 +89,7 @@ public:
      * @param[in] wildcardList a string of extension (glob syntax) separated by spaces
      * example : addFilter("images","*.png *.jpg")
      */
-    FWGUI_API virtual void addFilter(const std::string &filterName, const std::string &wildcardList )=0;
+    FWGUI_API virtual void addFilter(const std::string &filterName, const std::string &wildcardList ) = 0;
 
     /**
      * Display the dialog
@@ -95,6 +97,9 @@ public:
      */
     FWGUI_API virtual ::fwData::location::ILocation::sptr show() = 0;
 
+    /// Gets the current extension file selection
+    FWGUI_API virtual std::string getCurrentSelection() const = 0;
+
 protected:
 
     FWGUI_API void readConfig();
@@ -112,6 +117,6 @@ private:
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_ILOCATIONDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_ILOCATIONDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/ILoggerDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/ILoggerDialog.hpp
new file mode 100644
index 0000000..7dc6d7b
--- /dev/null
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/ILoggerDialog.hpp
@@ -0,0 +1,73 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUI_DIALOG_ILOGGERDIALOG_HPP__
+#define __FWGUI_DIALOG_ILOGGERDIALOG_HPP__
+
+#include <string>
+#include <vector>
+
+#include <fwGui/GuiBaseObject.hpp>
+#include <fwLog/Logger.hpp>
+
+#include "fwGui/config.hpp"
+
+namespace fwGui
+{
+namespace dialog
+{
+
+/**
+ * @brief ILoggerDialog is used to display a dialog message and a set of logs
+ */
+class FWGUI_CLASS_API ILoggerDialog : public ::fwGui::GuiBaseObject
+{
+
+public:
+
+    fwCoreNonInstanciableClassDefinitionsMacro( (ILoggerDialog)(::fwGui::GuiBaseObject) );
+
+    typedef std::string FactoryRegistryKeyType;
+
+    /// This *unique* key should  be used *for all* factory for specific Selector(qt,wx,...)
+    FWGUI_API static const FactoryRegistryKeyType REGISTRY_KEY;
+
+    /**
+     * @brief Constructor
+     */
+    FWGUI_API ILoggerDialog();
+
+    /// Destructor
+    FWGUI_API virtual ~ILoggerDialog();
+
+    /**
+     * @brief Set the dialog title.
+     * @param[in] title Dialog title
+     */
+    FWGUI_API virtual void setTitle(const std::string& title) = 0;
+
+    /**
+     * @brief Set the dialog message.
+     * @param[in] message Dialog message
+     */
+    FWGUI_API virtual void setMessage(const std::string& message) = 0;
+
+    /**
+     * @brief Set the dialog logger.
+     * @param[in] logger Dialog logger
+     */
+    FWGUI_API virtual void setLogger(const ::fwLog::Logger::sptr& logger) = 0;
+
+    /**
+     * @brief Show the dialog and return whether the user has selected the Ok or Cancel button
+     */
+    FWGUI_API virtual bool show() = 0;
+};
+
+} //namespace dialog
+} //namespace fwGui
+
+#endif /*__FWGUI_DIALOG_ILOGGERDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/IMessageDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/IMessageDialog.hpp
index 7e62e42..258fd07 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/IMessageDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/IMessageDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IMESSAGEBOX_HPP_
-#define _FWGUI_IMESSAGEBOX_HPP_
+#ifndef __FWGUI_DIALOG_IMESSAGEDIALOG_HPP__
+#define __FWGUI_DIALOG_IMESSAGEDIALOG_HPP__
 
 #include <string>
 
@@ -31,7 +31,8 @@ public:
     fwCoreNonInstanciableClassDefinitionsMacro( (IMessageDialog)(::fwGui::GuiBaseObject) )
 
     /// Icon type
-    typedef enum {
+    typedef enum
+    {
         CRITICAL,
         WARNING,
         INFO,
@@ -40,15 +41,16 @@ public:
     } Icons;
 
     /// Buttons type
-    typedef enum {
+    typedef enum
+    {
         NOBUTTON = 0, // invalid
 
-        OK     = 1 << 1,
-        YES    = 1 << 2,
-        NO     = 1 << 3,
-        CANCEL = 1 << 4,
+        OK         = 1 << 1,
+            YES    = 1 << 2,
+            NO     = 1 << 3,
+            CANCEL = 1 << 4,
 
-        YES_NO = YES | NO
+            YES_NO = YES | NO
     } Buttons;
 
     /// Constructor. Do nothing.
@@ -67,10 +69,10 @@ public:
     FWGUI_API virtual void setMessage(const std::string &msg) = 0;
 
     /// Set the icon (CRITICAL, WARNING, INFO or QUESTION)
-    FWGUI_API virtual void setIcon( Icons icon) =0;
+    FWGUI_API virtual void setIcon( Icons icon) = 0;
 
     /// Add a button (OK, YES_NO, YES, NO, CANCEL)
-    FWGUI_API virtual void addButton(Buttons button )=0;
+    FWGUI_API virtual void addButton(Buttons button ) = 0;
 
     /// Set the default button
     FWGUI_API virtual void setDefaultButton(Buttons button) = 0;
@@ -83,6 +85,6 @@ public:
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_IMESSAGEBOX_HPP_*/
+#endif /*__FWGUI_DIALOG_IMESSAGEDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/IMultiSelectorDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/IMultiSelectorDialog.hpp
index 612b31c..f16c526 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/IMultiSelectorDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/IMultiSelectorDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUI_IMULTISELECTORDIALOG_HPP_
-#define FWGUI_IMULTISELECTORDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_IMULTISELECTORDIALOG_HPP__
+#define __FWGUI_DIALOG_IMULTISELECTORDIALOG_HPP__
 
 #include <map>
 #include <vector>
@@ -23,7 +23,7 @@ namespace dialog
 /**
  * @brief   IMultiSelectorDialog allows the choice of some elements among several (_selections)
  * @class   IMultiSelectorDialog
- * 
+ *
  * @date    2009-2010.
  */
 class FWGUI_CLASS_API IMultiSelectorDialog : public ::fwGui::GuiBaseObject
@@ -42,7 +42,7 @@ public:
     /**
      * @brief Constructor builds a selector proposing a string list
      */
-    FWGUI_API IMultiSelectorDialog() ;
+    FWGUI_API IMultiSelectorDialog();
 
     /// Destructor. Do nothing.
     FWGUI_API virtual ~IMultiSelectorDialog();
@@ -69,4 +69,4 @@ public:
 } //namespace dialog
 } //namespace fwGui
 
-#endif /*FWGUI_IMULTISELECTORDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_IMULTISELECTORDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/IProgressDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/IProgressDialog.hpp
index 1ce2786..03e3e9a 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/IProgressDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/IProgressDialog.hpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IPROGRESSDIALOG_HPP_
-#define _FWGUI_IPROGRESSDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_IPROGRESSDIALOG_HPP__
+#define __FWGUI_DIALOG_IPROGRESSDIALOG_HPP__
 
 #include <string>
 #include <boost/function.hpp>
-#include <boost/signals.hpp>
+#include <boost/signals2.hpp>
 
 #include <fwData/location/ILocation.hpp>
 
@@ -24,11 +24,12 @@ namespace dialog
  * @brief   Defines the generic Progress dialog for IHM.
  * @todo    add methods for behavior like autoClose, flying window or in status bar
  * @class   IProgressDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
-class FWGUI_CLASS_API IProgressDialog : public ::fwGui::GuiBaseObject, public ::boost::signals::trackable // to autoDisconnect if handler is destroyed before the notifier
+class FWGUI_CLASS_API IProgressDialog : public ::fwGui::GuiBaseObject,
+                                        public ::boost::signals2::trackable                                // to autoDisconnect if handler is destroyed before the notifier
 {
 
 public:
@@ -56,15 +57,26 @@ public:
 
     FWGUI_API virtual void setCancelCallback(CancelCallbackType callback);
 
-    virtual void setCancelRaiseException(bool raise){m_raise = raise;};
+    virtual void setCancelRaiseException(bool raise)
+    {
+        m_raise = raise;
+    }
 
-    virtual bool getCanceled(){return m_canceled;};
+    virtual bool getCanceled()
+    {
+        return m_canceled;
+    }
 
-    virtual void hideCancelButton() {};
+    virtual void hideCancelButton()
+    {
+    }
 
-    virtual void setProcessUserEvents(bool process){m_processUserEvents = process;}
+    virtual void setProcessUserEvents(bool process)
+    {
+        m_processUserEvents = process;
+    }
 
-protected :
+protected:
 
     FWGUI_API virtual void cancelPressed();
 
@@ -72,13 +84,14 @@ protected :
     bool m_canceled;
     bool m_raise;
     ///progress bar's current value: [0-100]
-    int  m_value;
+    int m_value;
     bool m_processUserEvents;
 
-protected :
+protected:
     static sptr progressDialogFactory()
     {
-        ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(::fwGui::dialog::IProgressDialog::REGISTRY_KEY);
+        ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(
+            ::fwGui::dialog::IProgressDialog::REGISTRY_KEY);
         ::fwGui::dialog::IProgressDialog::sptr progressDlg = ::fwGui::dialog::IProgressDialog::dynamicCast(guiObj);
         return progressDlg;
     }
@@ -88,6 +101,6 @@ protected :
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_LOCATIONDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_IPROGRESSDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/IPulseProgressDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/IPulseProgressDialog.hpp
index d9c44d1..d0ff009 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/IPulseProgressDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/IPulseProgressDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_IPULSEPROGRESSDIALOG_HPP_
-#define _FWGUI_IPULSEPROGRESSDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_IPULSEPROGRESSDIALOG_HPP__
+#define __FWGUI_DIALOG_IPULSEPROGRESSDIALOG_HPP__
 
 #include <string>
 #include <boost/function.hpp>
@@ -23,7 +23,7 @@ namespace dialog
  * @brief   Defines the generic Progress dialog for IHM.
  * @todo    add methods for behavior like autoClose, flying window or in status bar
  * @class   IPulseProgressDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -69,6 +69,6 @@ protected:
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_IPULSEPROGRESSDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_IPULSEPROGRESSDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/ISelectorDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/ISelectorDialog.hpp
index 2c946b4..8ac052a 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/ISelectorDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/ISelectorDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUI_ISELECTORDIALOG_HPP_
-#define FWGUI_ISELECTORDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_ISELECTORDIALOG_HPP__
+#define __FWGUI_DIALOG_ISELECTORDIALOG_HPP__
 
 #include <vector>
 
@@ -22,7 +22,7 @@ namespace dialog
 /**
  * @brief   ISelectorDialog allows the choice of an element among several (_selections)
  * @class   ISelectorDialog
- * 
+ *
  * @date    2009-2010.
  */
 class FWGUI_CLASS_API ISelectorDialog : public ::fwGui::GuiBaseObject
@@ -40,7 +40,7 @@ public:
     /**
      * @brief Constructor builds a selector proposing a string list
      */
-    FWGUI_API ISelectorDialog() ;
+    FWGUI_API ISelectorDialog();
 
     /// Destructor. Do nothing.
     FWGUI_API virtual ~ISelectorDialog();
@@ -67,4 +67,4 @@ public:
 } //namespace dialog
 } //namespace fwGui
 
-#endif /*FWGUI_ISELECTORDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_ISELECTORDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/InputDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/InputDialog.hpp
index 7347c6b..e48004a 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/InputDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/InputDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_INPUTDIALOG_HPP_
-#define _FWGUI_INPUTDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_INPUTDIALOG_HPP__
+#define __FWGUI_DIALOG_INPUTDIALOG_HPP__
 
 #include "fwGui/GuiBaseObject.hpp"
 #include "fwGui/dialog/IInputDialog.hpp"
@@ -20,17 +20,17 @@ namespace dialog
  * @brief   Defines the generic input dialog for IHM.
  * Use the Delegate design pattern
  * @class   InputDialog
- * 
+ *
  * @date    2009-2010.
  *
  * Example of use:
- * @verbatim
-  ::fwGui::dialog::InputDialog inputDlg;
-  inputDlg.setTitle("Identification dialog");
-  inputDlg.setMessage("Enter Pin Code: ");
-  inputDlg.setInput ("<Enter your code here>");
-  std::string inputText = inputDlg.getInput();
-  @endverbatim
+ * @code{.xml}
+   ::fwGui::dialog::InputDialog inputDlg;
+   inputDlg.setTitle("Identification dialog");
+   inputDlg.setMessage("Enter Pin Code: ");
+   inputDlg.setInput ("<Enter your code here>");
+   std::string inputText = inputDlg.getInput();
+   @endcode
  */
 class FWGUI_CLASS_API InputDialog : public ::fwGui::dialog::IInputDialog
 {
@@ -47,19 +47,20 @@ public:
      * @param text the input text in the input field
      * @return Returns text in the input field
      */
-    FWGUI_API static std::string showInputDialog(const std::string& title, const std::string& message, const std::string &text = "");
+    FWGUI_API static std::string showInputDialog(const std::string& title, const std::string& message,
+                                                 const std::string &text = "");
 
 
     /** @brief Constructor. Create the implementation of the specific input dialog box.
      *
      * Example of use:
-     * @verbatim
-      ::fwGui::dialog::InputDialog inputDlg;
-      inputDlg.setTitle("Identification dialog");
-      inputDlg.setMessage("Enter Pin Code: ");
-      inputDlg.setInput ("<Enter your code here>");
-      std::string inputText = inputDlg.getInput();
-     @endverbatim
+     * @code{.xml}
+       ::fwGui::dialog::InputDialog inputDlg;
+       inputDlg.setTitle("Identification dialog");
+       inputDlg.setMessage("Enter Pin Code: ");
+       inputDlg.setInput ("<Enter your code here>");
+       std::string inputText = inputDlg.getInput();
+       @endcode
      */
     FWGUI_API InputDialog();
 
@@ -96,6 +97,6 @@ protected:
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_INPUTDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_INPUTDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/LocationDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/LocationDialog.hpp
index caec5ab..81d8d55 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/LocationDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/LocationDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_LOCATIONDIALOG_HPP_
-#define _FWGUI_LOCATIONDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_LOCATIONDIALOG_HPP__
+#define __FWGUI_DIALOG_LOCATIONDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -20,10 +20,10 @@ namespace dialog
  * @brief   Defines the generic file/folder selector dialog for IHM.
  *
  * Use the Delegate design pattern. The specific implementation selection is ensured by fwGuiRegisterMacro.
- * The specific implementation are in fwWX and fwQT libraries.
+ * The specific implementation are in fwGuiWX and fwGuiQT libraries.
  *
  * @class   LocationDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -32,7 +32,8 @@ class FWGUI_CLASS_API LocationDialog : public ILocationDialog
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (LocationDialog)(::fwGui::dialog::ILocationDialog), (()), new LocationDialog );
+    fwCoreClassDefinitionsWithFactoryMacro( (LocationDialog)(::fwGui::dialog::ILocationDialog), (()),
+                                            new LocationDialog );
 
     /// Will instantiate the concrete implementation
     FWGUI_API LocationDialog();
@@ -74,7 +75,9 @@ public:
     /// Save the specified default location for the dialog in preferences (if available)
     FWGUI_API void saveDefaultLocation(::fwData::location::ILocation::sptr loc);
 
-protected :
+    /// Gets the current extension file selection
+    FWGUI_API std::string getCurrentSelection() const;
+protected:
 
     ::fwGui::dialog::ILocationDialog::sptr m_implementation;
 };
@@ -82,6 +85,6 @@ protected :
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_LOCATIONDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_LOCATIONDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/LoggerDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/LoggerDialog.hpp
new file mode 100644
index 0000000..fa6b976
--- /dev/null
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/LoggerDialog.hpp
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUI_DIALOG_LOGGERDIALOG_HPP__
+#define __FWGUI_DIALOG_LOGGERDIALOG_HPP__
+
+#include <fwCore/base.hpp>
+#include <fwLog/Logger.hpp>
+
+#include "fwGui/config.hpp"
+#include "fwGui/dialog/ILoggerDialog.hpp"
+
+namespace fwGui
+{
+namespace dialog
+{
+/**
+ * @brief ILoggerDialog is used to display a dialog message and a set of logs
+ * Use the Delegate design pattern. The specific implementation selection is ensured by fwGuiRegisterMacro.
+ * The specific implementation is fwQt libraries
+ */
+class FWGUI_CLASS_API LoggerDialog : public ILoggerDialog
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro( (LoggerDialog)(::fwGui::dialog::ILoggerDialog), (()), new LoggerDialog );
+
+    /**
+     * Opens a default logger dialog with the specified title, message and logs.
+     * @param[in] title Title of the dialog
+     * @param[in] message Message of the dialog
+     * @param[in] logger Logger of the dialog
+     * @return Returns true or false whether the user has selected the OK or CANCEL button
+     */
+    FWGUI_API static bool showLoggerDialog(const std::string& title, const std::string& message,
+                                           const ::fwLog::Logger::sptr& logger);
+
+    /// Constructor that will instantiate the concrete implementation
+    FWGUI_API LoggerDialog();
+
+    /// Destructor
+    FWGUI_API virtual ~LoggerDialog();
+
+    /**
+     * Constructor. Create a selector with the specified title, message and logs.
+     * @param[in] title Title of the dialog
+     * @param[in] message Message of the dialog
+     * @param[in] logger Logger of the dialog
+     */
+    FWGUI_API LoggerDialog(const std::string& title, const std::string& message,
+                           const ::fwLog::Logger::sptr& logger);
+
+    /**
+     * @brief Set the dialog title.
+     * @param[in] title Dialog title
+     */
+    FWGUI_API virtual void setTitle(const std::string& title);
+
+    /**
+     * @brief Set the dialog message.
+     * @param[in] message Dialog message
+     */
+    FWGUI_API virtual void setMessage(const std::string& message);
+
+    /**
+     * @brief Set the dialog logger.
+     * @param[in] logger Dialog logger
+     */
+    FWGUI_API virtual void setLogger(const ::fwLog::Logger::sptr& logger);
+
+    /**
+     * @brief Show the dialog and return whether the user has selected the Ok or Cancel button
+     */
+    FWGUI_API virtual bool show();
+
+protected:
+
+    ::fwGui::dialog::ILoggerDialog::sptr m_implementation;
+
+};
+
+} // namespace dialog
+} // namespace fwGui
+
+#endif /*__FWGUI_DIALOG_LOGGERDIALOG_HPP__*/
+
+
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/MessageDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/MessageDialog.hpp
index 57839fb..3259934 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/MessageDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/MessageDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_MESSAGEBOX_HPP_
-#define _FWGUI_MESSAGEBOX_HPP_
+#ifndef __FWGUI_DIALOG_MESSAGEDIALOG_HPP__
+#define __FWGUI_DIALOG_MESSAGEDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -20,16 +20,13 @@ namespace dialog
  * @brief   Defines the generic message box for IHM.
  * Use the Delegate design pattern.
  * @class   MessageDialog
- *
- * @date    2009-2010.
- *
  */
 class FWGUI_CLASS_API MessageDialog : public ::fwGui::dialog::IMessageDialog
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (MessageDialog)(::fwGui::dialog::IMessageDialog), (()), new MessageDialog );
+    fwCoreClassDefinitionsWithFactoryMacro((MessageDialog)(::fwGui::dialog::IMessageDialog), (()), new MessageDialog);
 
     /**
      * Opens a default message box with the specified title, text and icon.
@@ -39,7 +36,8 @@ public:
      * @param icon Icon of the message box (CRITICAL, WARNING, INFO or QUESTION)
      * @return Returns the button enum value corresponding to the pressed button
      */
-    FWGUI_API static IMessageDialog::Buttons showMessageDialog(const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon = INFO);
+    FWGUI_API static IMessageDialog::Buttons showMessageDialog(
+        const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon = INFO);
 
     /// Constructor. Create the implementation of the specific message box
     FWGUI_API MessageDialog();
@@ -52,7 +50,8 @@ public:
      * @param message Message of the message box
      * @param icon Icon of the message box (CRITICAL, WARNING, INFO or QUESTION)
      */
-    FWGUI_API MessageDialog(const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon = INFO);
+    FWGUI_API MessageDialog(
+        const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon = INFO);
 
     /// Destructor. Do nothing
     FWGUI_API virtual ~MessageDialog();
@@ -84,6 +83,6 @@ protected:
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_MESSAGEBOX_HPP_*/
+#endif /*__FWGUI_DIALOG_MESSAGEDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/MultiSelectorDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/MultiSelectorDialog.hpp
index 9ae43e7..f69d0b3 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/MultiSelectorDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/MultiSelectorDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_MULTISELECTORDIALOG_HPP_
-#define _FWGUI_MULTISELECTORDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_MULTISELECTORDIALOG_HPP__
+#define __FWGUI_DIALOG_MULTISELECTORDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -20,9 +20,9 @@ namespace dialog
  * @brief   MultiSelectorDialog allows the choice of some element among several (_selections)
  *
  * Use the Delegate design pattern. The specific implementation selection is ensured by fwGuiRegisterMacro
- * The specific implementation are in fwWX and fwQT libraries
+ * The specific implementation are in fwGuiWX and fwGuiQT libraries
  * @class   MultiSelectorDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -31,7 +31,8 @@ class FWGUI_CLASS_API MultiSelectorDialog : public IMultiSelectorDialog
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (MultiSelectorDialog)(::fwGui::dialog::IMultiSelectorDialog), (()), new MultiSelectorDialog );
+    fwCoreClassDefinitionsWithFactoryMacro( (MultiSelectorDialog)(::fwGui::dialog::IMultiSelectorDialog), (()),
+                                            new MultiSelectorDialog );
 
     /// will instanciate the concrete implementation
     FWGUI_API MultiSelectorDialog();
@@ -50,7 +51,7 @@ public:
     /// Set the message
     FWGUI_API virtual void setMessage(const std::string &msg);
 
-protected :
+protected:
 
     ::fwGui::dialog::IMultiSelectorDialog::sptr m_implementation;
 
@@ -59,6 +60,6 @@ protected :
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_MULTISELECTORDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_MULTISELECTORDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp
index ec5b22b..21165e7 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIDIALOGNAMESPACE_HPP_
-#define FWGUIDIALOGNAMESPACE_HPP_
+#ifndef __FWGUI_DIALOG_NAMESPACE_HPP__
+#define __FWGUI_DIALOG_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
  * @brief       The namespace fwGui::dialog contains the base interface for GUI dialog elements.
  * @namespace   fwGui::dialog
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace dialog
 
 }
 }
-#endif /* FWGUIDIALOGNAMESPACE_HPP_ */
+#endif /* __FWGUI_DIALOG_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/ProgressDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/ProgressDialog.hpp
index f5989ce..e6681ef 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/ProgressDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/ProgressDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_ProgressDialog_HPP_
-#define _FWGUI_ProgressDialog_HPP_
+#ifndef __FWGUI_DIALOG_PROGRESSDIALOG_HPP__
+#define __FWGUI_DIALOG_PROGRESSDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -19,10 +19,8 @@ namespace dialog
 /**
  * @brief   Defines the generic progress dialog for IHM.
  * Use the Delegate design pattern. The specific implementation selection is ensured by fwGuiRegisterMacro.
- * The specific implementation are in fwWX and fwQT libraries
+ * The specific implementation are in fwGuiWX and fwGuiQT libraries
  * @class   ProgressDialog
- * 
- * @date    2009-2010.
  *
  */
 class FWGUI_CLASS_API ProgressDialog : public IProgressDialog
@@ -30,10 +28,12 @@ class FWGUI_CLASS_API ProgressDialog : public IProgressDialog
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ProgressDialog)(::fwGui::dialog::IProgressDialog), (()), new ProgressDialog );
+    fwCoreClassDefinitionsWithFactoryMacro( (ProgressDialog)(::fwGui::dialog::IProgressDialog), (()),
+                                            new ProgressDialog );
 
     /// will instanciate the concrete implementation
-    FWGUI_API ProgressDialog( const std::string &title = std::string() ,  const std::string &msg = std::string() );
+    FWGUI_API ProgressDialog( const std::string &title = std::string(),  const std::string &msg = std::string() );
+    FWGUI_API ~ProgressDialog();
 
     ///set the title for the dialog
     FWGUI_API void setTitle(const std::string &title);
@@ -49,7 +49,7 @@ public:
 
     FWGUI_API void hideCancelButton();
 
-protected :
+protected:
 
     FWGUI_API void cancelPressed();
 
@@ -60,6 +60,6 @@ protected :
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_ProgressDialog_HPP_*/
+#endif /*__FWGUI_DIALOG_PROGRESSDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/PulseProgressDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/PulseProgressDialog.hpp
index ef0f475..a593495 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/PulseProgressDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/PulseProgressDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_PULSEPROGRESSDIALOG_HPP_
-#define _FWGUI_PULSEPROGRESSDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_PULSEPROGRESSDIALOG_HPP__
+#define __FWGUI_DIALOG_PULSEPROGRESSDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -19,9 +19,9 @@ namespace dialog
 /**
  * @brief   Defines the generic pulse progress dialog for IHM.
  * Use the Delegate design pattern. The specific implementation selection is ensured by fwGuiRegisterMacro.
- * The specific implementation are in fwWX and fwQT libraries
+ * The specific implementation are in fwGuiWX and fwGuiQT libraries
  * @class   PulseProgressDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -31,14 +31,17 @@ class FWGUI_CLASS_API PulseProgressDialog : public IPulseProgressDialog
 public:
 
 
-    fwCoreClassDefinitionsWithFactoryMacro( (PulseProgressDialog)(::fwGui::dialog::IPulseProgressDialog), (((const std::string))((::fwGui::dialog::IPulseProgressDialog::Stuff))), new PulseProgressDialog );
+    fwCoreClassDefinitionsWithFactoryMacro( (PulseProgressDialog)(::fwGui::dialog::IPulseProgressDialog),
+                                            (((const std::string))(
+                                                 (::fwGui::dialog::IPulseProgressDialog::Stuff))),
+                                            new PulseProgressDialog );
 
     /// will instantiate the concrete implementation
     FWGUI_API PulseProgressDialog(
-            const std::string &title,
-            Stuff stuff,
-            const std::string &msg = std::string(),
-            ::fwGui::dialog::IPulseProgressDialog::MilliSecond frequenceRefresh = 100 );
+        const std::string &title,
+        Stuff stuff,
+        const std::string &msg = std::string(),
+        ::fwGui::dialog::IPulseProgressDialog::MilliSecond frequenceRefresh = 100 );
 
     ///set the title for the dialog
     FWGUI_API void setTitle(const std::string &title);
@@ -49,7 +52,7 @@ public:
     ///show the pulse progress dialog
     FWGUI_API virtual void show();
 
-protected :
+protected:
 
     ::fwGui::dialog::IPulseProgressDialog::sptr m_implementation;
 
@@ -58,6 +61,6 @@ protected :
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_PULSEPROGRESSDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_PULSEPROGRESSDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/dialog/SelectorDialog.hpp b/SrcLib/core/fwGui/include/fwGui/dialog/SelectorDialog.hpp
index 962d4fc..5dac07a 100644
--- a/SrcLib/core/fwGui/include/fwGui/dialog/SelectorDialog.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/dialog/SelectorDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_SELECTORDIALOG_HPP_
-#define _FWGUI_SELECTORDIALOG_HPP_
+#ifndef __FWGUI_DIALOG_SELECTORDIALOG_HPP__
+#define __FWGUI_DIALOG_SELECTORDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -19,18 +19,16 @@ namespace dialog
 /**
  * @brief   SelectorDialog allows the choice of an element among several (_selections)
  * Use the Delegate design pattern. The specific implementation selection is ensured by fwGuiRegisterMacro.
- * The specific implementation are in fwWX and fwQT libraries
+ * The specific implementation are in fwGuiWX and fwGuiQT libraries
  * @class   SelectorDialog
- * 
- * @date    2009-2010.
- *
  */
 class FWGUI_CLASS_API SelectorDialog : public ISelectorDialog
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (SelectorDialog)(::fwGui::dialog::ISelectorDialog), (()), new SelectorDialog );
+    fwCoreClassDefinitionsWithFactoryMacro( (SelectorDialog)(::fwGui::dialog::ISelectorDialog), (()),
+                                            new SelectorDialog );
 
     /**
      * Opens a default selector with the specified title, message and choices.
@@ -40,11 +38,15 @@ public:
      * @param _selections list of choices in the selector
      * @return Returns selected choice
      */
-    FWGUI_API static std::string showSelectorDialog(const std::string& title, const std::string& message, std::vector< std::string > _selections);
+    FWGUI_API static std::string showSelectorDialog(const std::string& title, const std::string& message,
+                                                    std::vector< std::string > _selections);
 
     /// will instanciate the concrete implementation
     FWGUI_API SelectorDialog();
 
+    /// Called by the constructor in the GUI thread.
+    FWGUI_API void create();
+
     /**
      * Constructor. Create a selector with the specified title, message and choices.
      *
@@ -52,7 +54,8 @@ public:
      * @param message Message of the selector
      * @param _selections list of choices in the selector
      */
-    FWGUI_API SelectorDialog(const std::string& title, const std::string& message, std::vector< std::string > _selections);
+    FWGUI_API SelectorDialog(const std::string& title, const std::string& message,
+                             std::vector< std::string > _selections);
 
     /// Sets the selector title.
     FWGUI_API void setTitle(std::string title);
@@ -66,7 +69,7 @@ public:
     /// Set the message
     FWGUI_API virtual void setMessage(const std::string &msg);
 
-protected :
+protected:
 
     ::fwGui::dialog::ISelectorDialog::sptr m_implementation;
 
@@ -75,6 +78,6 @@ protected :
 } //namespace dialog
 } // namespace fwGui
 
-#endif /*_FWGUI_SELECTORDIALOG_HPP_*/
+#endif /*__FWGUI_DIALOG_SELECTORDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp b/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp
index f84987f..261fcb4 100644
--- a/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwGui
 /**
  * @brief       Contains fwGui::factory utilities
  * @namespace   fwGui::factory
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwGui/include/fwGui/factory/new.hpp b/SrcLib/core/fwGui/include/fwGui/factory/new.hpp
index 4846ba3..56b0199 100644
--- a/SrcLib/core/fwGui/include/fwGui/factory/new.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -33,17 +32,19 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwGui::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwGui::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 FWGUI_API SPTR( ::fwGui::GuiBaseObject ) New( const ::fwGui::registry::KeyType & classname );
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) guiObj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) guiObj = std::make_shared< CLASSNAME >( Key() );
     return guiObj;
 }
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/CardinalLayoutManagerBase.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/CardinalLayoutManagerBase.hpp
index ab8fde4..f272855 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/CardinalLayoutManagerBase.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/CardinalLayoutManagerBase.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,12 @@
  * @file fwGui/layoutManager/CardinalLayoutManagerBase.hpp
  * @brief This file defines the interface class for managing a cardinal layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_CARDINALLAYOUTMANAGERBASE_HPP_
-#define _FWGUI_LAYOUTMANAGER_CARDINALLAYOUTMANAGERBASE_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_CARDINALLAYOUTMANAGERBASE_HPP__
+#define __FWGUI_LAYOUTMANAGER_CARDINALLAYOUTMANAGERBASE_HPP__
 
 #include <list>
 #include <map>
@@ -32,7 +32,7 @@ namespace layoutManager
 /**
  * @brief   Defines the base for cardinal layout manager.
  * @class   CardinalLayoutManagerBase
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -51,36 +51,37 @@ public:
         LEFT,
         BOTTOM,
         TOP
-     } Align;
-
-     typedef std::string RegistryKeyType;
-
-     class ViewInfo
-     {
-     public :
-
-         ViewInfo() :
-             m_align (CENTER),
-             m_minSize (std::make_pair(-1,-1)),
-             m_visible (true),
-             m_isResizable(true),
-             m_position(0),
-             m_layer(0),
-             m_row(0),
-             m_caption (std::make_pair(false,"")),
-             m_useScrollBar(false)
-         {}
-
-         Align                            m_align;
-         std::pair< int, int >            m_minSize;
-         bool                             m_visible;
-         bool                             m_isResizable;
-         int                              m_position;
-         int                              m_layer;
-         int                              m_row;
-         std::pair< bool, std::string >   m_caption;
-         bool                             m_useScrollBar;
-     };
+    } Align;
+
+    typedef std::string RegistryKeyType;
+
+    class ViewInfo
+    {
+    public:
+
+        ViewInfo() :
+            m_align (CENTER),
+            m_minSize (std::make_pair(-1,-1)),
+            m_visible (true),
+            m_isResizable(true),
+            m_position(0),
+            m_layer(0),
+            m_row(0),
+            m_caption (std::make_pair(false,"")),
+            m_useScrollBar(false)
+        {
+        }
+
+        Align m_align;
+        std::pair< int, int >            m_minSize;
+        bool m_visible;
+        bool m_isResizable;
+        int m_position;
+        int m_layer;
+        int m_row;
+        std::pair< bool, std::string >   m_caption;
+        bool m_useScrollBar;
+    };
 
     /// Constructor. Do nothing.
     FWGUI_API CardinalLayoutManagerBase();
@@ -92,8 +93,8 @@ public:
      * @brief Initialize cardinal layout manager before the creation of layout.
      *
      * Example of configuration with cardinal layout.
-     * @verbatim
-       <service uid="subView2" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
+     * @code{.xml}
+       <service uid="subView2" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
            <gui>
                <layout type="::fwGui::CardinalLayoutManager" >
                    <view caption="CardinalView1" align="center" />
@@ -107,19 +108,19 @@ public:
                <view sid="view3" start="yes" />
            </registry>
        </service>
-      @endverbatim
-    *  - \<layout type="::fwGui::CardinalLayoutManager" \> : define a cardinal layout.
-    *  - \<view caption="CardinalView1" align="center" /\> : define a new view with following attribute
-    *   - \b caption : name of the view (display on the screen).
-    *   - \b align  {center | bottom | top | right | left}: define the position of the view
-    *   - \b minWidth : minimal width of the view
-    *   - \b minHeight : minimal height of the view
-    *   - \b resizable  {yes | no}: define if the view can be resized.
-    *   - \b position : indicates the sequential position, starting with zero. It uses if more than one view as the same align value (available only with wxWidget see wxAuiManager in wxWidgets documenattion for more details).
-    *   - \b layer : available only with wxWidget. See wxAuiManager in wxWidgets documenattion for more details
-    *   - \b row : use to place several view next to each other (available only with wxWidget). See wxAuiManager in wxWidgets documenattion for more details
-    *   - \b visible  {true | yes | false | no} : define if the view is visible or not.
-    */
+       @endcode
+     *  - \<layout type="::fwGui::CardinalLayoutManager" \> : define a cardinal layout.
+     *  - \<view caption="CardinalView1" align="center" /\> : define a new view with following attribute
+     *   - \b caption : name of the view (display on the screen).
+     *   - \b align  {center | bottom | top | right | left}: define the position of the view
+     *   - \b minWidth : minimal width of the view
+     *   - \b minHeight : minimal height of the view
+     *   - \b resizable  {yes | no}: define if the view can be resized.
+     *   - \b position : indicates the sequential position, starting with zero. It uses if more than one view as the same align value (available only with wxWidget see wxAuiManager in wxWidgets documenattion for more details).
+     *   - \b layer : available only with wxWidget. See wxAuiManager in wxWidgets documenattion for more details
+     *   - \b row : use to place several view next to each other (available only with wxWidget). See wxAuiManager in wxWidgets documenattion for more details
+     *   - \b visible  {true | yes | false | no} : define if the view is visible or not.
+     */
 
     FWGUI_API virtual void initialize( ConfigurationType configuration);
 
@@ -127,7 +128,10 @@ public:
 
 protected:
 
-    std::list< ViewInfo> getViewsInfo(){ return m_views;};
+    std::list< ViewInfo> getViewsInfo()
+    {
+        return m_views;
+    }
 
 private:
 
@@ -141,6 +145,6 @@ private:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_CARDINALLAYOUTMANAGERBASE_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_CARDINALLAYOUTMANAGERBASE_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/IFrameLayoutManager.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/IFrameLayoutManager.hpp
index c248e21..9b28a49 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/IFrameLayoutManager.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/IFrameLayoutManager.hpp
@@ -1,19 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-/**
- * @file fwGui/layoutManager/IFrameLayoutManager.hpp
- * @brief This file defines the interface of the base class for managing a frame.
- *
- * 
- * @date 2009-2010
- */
-
-#ifndef _FWGUI_LAYOUTMANAGER_IFRAMELAYOUTMANAGERB_HPP_
-#define _FWGUI_LAYOUTMANAGER_IFRAMELAYOUTMANAGERB_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_IFRAMELAYOUTMANAGER_HPP__
+#define __FWGUI_LAYOUTMANAGER_IFRAMELAYOUTMANAGER_HPP__
 
 #include <list>
 
@@ -34,11 +26,7 @@ namespace layoutManager
 {
 
 /**
- * @brief   Defines the frame layout manager.
- * @class   IFrameLayoutManager
- * 
- * @date    2009-2010.
- *
+ * @brief   Defines an interface for managing a frame.
  */
 class FWGUI_CLASS_API IFrameLayoutManager : public ::fwGui::GuiBaseObject
 {
@@ -53,54 +41,56 @@ public:
     typedef enum
     {
         DEFAULT,
-        STAY_ON_TOP
-     } Style;
-
-     typedef std::string RegistryKeyType;
-
-     static const std::string SOFTWARE_UI;
-     static const std::string FRAME_STATE_UI;
-     static const std::string FRAME_SIZE_W_UI;
-     static const std::string FRAME_SIZE_H_UI;
-     static const std::string FRAME_POSITION_X_UI;
-     static const std::string FRAME_POSITION_Y_UI;
-
-     typedef enum
-     {
-         UNKNOWN,    ///< the unknown state
-         ICONIZED,   ///< the minimized state
-         MAXIMIZED,  ///< the maximied state
-         FULL_SCREEN ///< the full screen state
-     } FrameState;
-
-     class FrameInfo
-     {
-     public :
-
-         FrameInfo() :
-             m_name (""),
-             m_minSize (std::make_pair(-1,-1)),
-             m_style (DEFAULT),
-             m_size (std::make_pair(-1,-1)),
-             m_position (std::make_pair(-1,-1)),
-             m_state(UNKNOWN)
-         {}
-
-         /// Frame name.
-         std::string                      m_name ;
-         /// Frame icon.
-         ::boost::filesystem::path        m_iconPath;
-         /// Frame minimum size (min width and min height)
-         std::pair< int, int >            m_minSize;
-         /// Frame style
-         Style                            m_style;
-         /// Frame size
-         std::pair< int, int >            m_size;
-         /// Frame position
-         std::pair< int, int >            m_position;
-         /// Frame state (maximize, minized, full screen)
-         FrameState                       m_state;
-     };
+        STAY_ON_TOP,
+        MODAL
+    } Style;
+
+    typedef std::string RegistryKeyType;
+
+    static const std::string SOFTWARE_UI;
+    static const std::string FRAME_STATE_UI;
+    static const std::string FRAME_SIZE_W_UI;
+    static const std::string FRAME_SIZE_H_UI;
+    static const std::string FRAME_POSITION_X_UI;
+    static const std::string FRAME_POSITION_Y_UI;
+
+    typedef enum
+    {
+        UNKNOWN,     ///< the unknown state
+        ICONIZED,    ///< the minimized state
+        MAXIMIZED,   ///< the maximied state
+        FULL_SCREEN  ///< the full screen state
+    } FrameState;
+
+    class FrameInfo
+    {
+    public:
+
+        FrameInfo() :
+            m_name (""),
+            m_minSize (std::make_pair(-1,-1)),
+            m_style (DEFAULT),
+            m_size (std::make_pair(-1,-1)),
+            m_position (std::make_pair(-1,-1)),
+            m_state(UNKNOWN)
+        {
+        }
+
+        /// Frame name.
+        std::string m_name;
+        /// Frame icon.
+        ::boost::filesystem::path m_iconPath;
+        /// Frame minimum size (min width and min height)
+        std::pair< int, int >            m_minSize;
+        /// Frame style
+        Style m_style;
+        /// Frame size
+        std::pair< int, int >            m_size;
+        /// Frame position
+        std::pair< int, int >            m_position;
+        /// Frame state (maximize, minized, full screen)
+        FrameState m_state;
+    };
 
     /// Constructor. Do nothing.
     FWGUI_API IFrameLayoutManager();
@@ -126,18 +116,42 @@ public:
     FWGUI_API virtual void destroyFrame() = 0;
 
     /// Return the frame container
-    virtual ::fwGui::container::fwContainer::sptr getFrame(){ return m_frame;};
+    virtual ::fwGui::container::fwContainer::sptr getFrame()
+    {
+        return m_frame;
+    }
 
     /// Return the first container into the frame
-    virtual ::fwGui::container::fwContainer::sptr getContainer(){ return m_container;};
+    virtual ::fwGui::container::fwContainer::sptr getContainer()
+    {
+        return m_container;
+    }
 
 
     typedef ::boost::function0< void > CloseCallback;
     FWGUI_API virtual void setCloseCallback(CloseCallback fct);
 
+
 protected:
 
-    fwGettersSettersDocMacro(FrameInfo, frameInfo, FrameInfo, configuration definition.);
+    /**
+     * @brief Configuration definition.
+     * @{ */
+    const FrameInfo& getFrameInfo() const
+    {
+        return m_frameInfo;
+    }
+
+    FrameInfo& getRefFrameInfo()
+    {
+        return m_frameInfo;
+    }
+
+    void setFrameInfo(const FrameInfo& frameInfo)
+    {
+        m_frameInfo = frameInfo;
+    }
+    /**  @} */
 
     ::fwGui::container::fwContainer::sptr m_frame;
     ::fwGui::container::fwContainer::sptr m_container;
@@ -155,13 +169,13 @@ private:
     void defaultCloseCallback();
 
     /// Save frame configuration definition
-    FrameInfo  m_frameInfo;
+    FrameInfo m_frameInfo;
 
 };
 
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_IFRAMELAYOUTMANAGERB_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_IFRAMELAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuBarLayoutManager.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuBarLayoutManager.hpp
index 365013b..c581ab9 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuBarLayoutManager.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuBarLayoutManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,12 @@
  * @file fwGui/layoutManager/IMenuBarLayoutManager.hpp
  * @brief This file defines the interface of the base class for managing a menubar.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_IMENUBARLAYOUTMANAGER_HPP_
-#define _FWGUI_LAYOUTMANAGER_IMENUBARLAYOUTMANAGER_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_IMENUBARLAYOUTMANAGER_HPP__
+#define __FWGUI_LAYOUTMANAGER_IMENUBARLAYOUTMANAGER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -30,7 +30,7 @@ namespace layoutManager
 /**
  * @brief   Defines the menu bar layout manager for IHM.
  * @class   IMenuBarLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -59,8 +59,8 @@ public:
      * @brief Initialize layout managers.
      *
      * Example of configuration
-     * @verbatim
-      <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
+     * @code{.xml}
+       <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no" >
           <gui>
               <layout>
                   <menu name="My Menu"/>
@@ -71,8 +71,8 @@ public:
               <menu sid="myMenu" start="yes" />
               <menu sid="myMenu2" start="yes" />
           </registry>
-      </service>
-       @endverbatim
+       </service>
+       @endcode
      * This method analyzes the gui section of the configuration.
      *  - \<layout\> (mandatory) : give the list of the menu that will appear in the menu bar.
      *  - \<menu name="My Menu"/\> :
@@ -124,6 +124,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_IMENUBARLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_IMENUBARLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuLayoutManager.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuLayoutManager.hpp
index eeebc0f..ee09dd8 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuLayoutManager.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/IMenuLayoutManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,13 +7,10 @@
 /**
  * @file fwGui/layoutManager/IMenuLayoutManager.hpp
  * @brief This file defines the interface of the base class for managing a menu.
- *
- * 
- * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_IMENULAYOUTMANAGER_HPP_
-#define _FWGUI_LAYOUTMANAGER_IMENULAYOUTMANAGER_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_IMENULAYOUTMANAGER_HPP__
+#define __FWGUI_LAYOUTMANAGER_IMENULAYOUTMANAGER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -30,10 +27,6 @@ namespace layoutManager
 
 /**
  * @brief   Defines the menu layout manager for IHM.
- * @class   IMenuLayoutManager
- * 
- * @date    2009-2010.
- *
  */
 class FWGUI_CLASS_API IMenuLayoutManager : public ::fwGui::GuiBaseObject
 {
@@ -44,7 +37,8 @@ public:
     typedef std::string RegistryKeyType;
     typedef std::vector< ::fwGui::IMenuItemCallback::sptr > CallbacksType;
 
-    typedef enum {
+    typedef enum
+    {
         DEFAULT,
         QUIT,
         ABOUT,
@@ -55,7 +49,7 @@ public:
 
     class ActionInfo
     {
-    public :
+    public:
 
         ActionInfo() :
             m_name(""),
@@ -66,16 +60,17 @@ public:
             m_type(DEFAULT),
             m_isSeparator(false),
             m_isMenu(false)
-        {}
+        {
+        }
 
         std::string m_name;
         std::string m_shortcut;
         std::string m_icon;
-        bool        m_isCheckable;
-        bool        m_isRadio;
-        ActionType  m_type;
-        bool        m_isSeparator;
-        bool        m_isMenu;
+        bool m_isCheckable;
+        bool m_isRadio;
+        ActionType m_type;
+        bool m_isSeparator;
+        bool m_isMenu;
     };
 
     FWGUI_API const static RegistryKeyType REGISTRY_KEY;
@@ -100,11 +95,11 @@ public:
      * @brief Initialize layout managers.
      *
      * Example of configuration
-     * @verbatim
-       <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
+     * @code{.xml}
+       <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no" >
             <gui>
                 <layout>
-                    <menuItem name="My item 1" shortcut="1" style="check" />
+                    <menuItem name="My item 1" shortcut="1" style="check" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png" />
                     <separator />
                     <menuItem name="My item 2" shortcut="2" style="radio" />
                     <menuItem name="My item 3" shortcut="3" style="radio" />
@@ -122,7 +117,7 @@ public:
                 <menuItem sid="actionQuit" start="no" />
             </registry>
        </service>
-       @endverbatim
+       @endcode
      * This method analyzes the gui section of the configuration.
      * - \<layout\> (mandatory) : give the list of the menu item that will appear in the menu.
      * - \<menuItem name="My item 1" shortcut="1" style="check" specialAction="NEW" /\> :
@@ -130,6 +125,7 @@ public:
      *  - \b shortcut : give the shortcut for this menu item.
      *  - \b style {check|radio} : give the style of the menu item.
      *  - \b specialAction {DEFAULT | QUIT | NEW | ABOUT | HELP}: specify a pre define action. If it isn't define the value is DEFAULT.
+     *   - \b icon : give the path of the icon file
      * - \<menu name="My menu" /\> :
      *  - \b name (mandatory) : give the name of the menu that will appear in the interface.
      * - \<separator/\> : allow to divide the menu by part (draw a line).
@@ -166,7 +162,10 @@ public:
     /**
      * @brief Sets callbacks associate with menu items.
      */
-    virtual void setCallbacks(CallbacksType callbacks) {m_callbacks = callbacks;};
+    virtual void setCallbacks(CallbacksType callbacks)
+    {
+        m_callbacks = callbacks;
+    }
 
 protected:
 
@@ -191,6 +190,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_IMENULAYOUTMANAGER_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_IMENULAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/IToolBarLayoutManager.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/IToolBarLayoutManager.hpp
index 7589386..76f33b4 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/IToolBarLayoutManager.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/IToolBarLayoutManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,13 +7,10 @@
 /**
  * @file fwGui/layoutManager/IToolBarLayoutManager.hpp
  * @brief This file defines the interface of the base class for managing a toolbar.
- *
- * 
- * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_ITOOLBARLAYOUTMANAGER_HPP_
-#define _FWGUI_LAYOUTMANAGER_ITOOLBARLAYOUTMANAGER_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_ITOOLBARLAYOUTMANAGER_HPP__
+#define __FWGUI_LAYOUTMANAGER_ITOOLBARLAYOUTMANAGER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -32,8 +29,6 @@ namespace layoutManager
 
 /**
  * @brief   Defines the toolBar layout manager for IHM.
- * @class   IToolBarLayoutManager
- *
  */
 class FWGUI_CLASS_API IToolBarLayoutManager : public ::fwGui::GuiBaseObject
 {
@@ -46,12 +41,13 @@ public:
 
     class ActionInfo
     {
-    public :
+    public:
 
         ActionInfo() :
             m_name(""),
             m_shortcut(""),
             m_icon(""),
+            m_icon2(""),
             m_isCheckable (false),
             m_isRadio(false),
             m_isSeparator(false),
@@ -59,18 +55,20 @@ public:
             m_isMenu(false),
             m_isEditor(false),
             m_size(0)
-        {}
+        {
+        }
 
         std::string m_name;
         std::string m_shortcut;
         std::string m_icon;
-        bool        m_isCheckable;
-        bool        m_isRadio;
-        bool        m_isSeparator;
-        bool        m_isSpacer;
-        bool        m_isMenu;
-        bool        m_isEditor;
-        int         m_size;
+        std::string m_icon2;
+        bool m_isCheckable;
+        bool m_isRadio;
+        bool m_isSeparator;
+        bool m_isSpacer;
+        bool m_isMenu;
+        bool m_isEditor;
+        int m_size;
     };
 
     FWGUI_API const static RegistryKeyType REGISTRY_KEY;
@@ -100,15 +98,15 @@ public:
      * @brief Initialize layout managers.
      *
      * Example of configuration
-     * @verbatim
-       <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no" >
+     * @code{.xml}
+       <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no" >
            <gui>
                <layout>
-                   <menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                   <menuItem name="My item 3" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
+                   <menuItem name="My item 2" style="check" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png" icon2="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png" />
+                   <menuItem name="My item 3" style="check" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
                    <separator />
-                   <menuItem name="My item A" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                   <menuItem name="My item B" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
+                   <menuItem name="My item A" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                   <menuItem name="My item B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
                    <separator />
                    <menu name="My menu" />
                    <separator />
@@ -124,14 +122,15 @@ public:
                <editor sid="editor" />
            </registry>
        </service>
-       @endverbatim
+       @endcode
      * This method analyzes the gui section of the configuration.
      *
      *  - \<layout\> (mandatory) : give the list of the menu item that will appear in the toolbar.
-     *  - \<menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/\> :
+     *  - \<menuItem name="My item 2" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/\> :
      *   - \b name (mandatory) : give the name of the menu item that will appear in the interface.
      *   - \b style {check|radio} : give the style of the menu item.
      *   - \b icon : give the path of the icon file
+     *   - \b icon2 : give the path of the icon file used when the item is checked
      *  - \<menu name="My menu" /\> :
      *   - \b name (mandatory) : give the name of the menu that will appear in the interface.
      *   - \b icon : give the path of the icon file
@@ -170,7 +169,10 @@ public:
     /**
      * @brief Sets callbacks associate with toolBar items.
      */
-    virtual void setCallbacks(CallbacksType callbacks) {m_callbacks = callbacks;};
+    virtual void setCallbacks(CallbacksType callbacks)
+    {
+        m_callbacks = callbacks;
+    }
 
 protected:
 
@@ -198,6 +200,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_ITOOLBARLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_ITOOLBARLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/IViewLayoutManager.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/IViewLayoutManager.hpp
index 7241cea..0715c36 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/IViewLayoutManager.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/IViewLayoutManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,12 @@
  * @file fwGui/layoutManager/IViewLayoutManager.hpp
  * @brief This file defines the interface of the base class for managing a layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_ILAYOUTMANAGER_HPP_
-#define _FWGUI_LAYOUTMANAGER_ILAYOUTMANAGER_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_IVIEWLAYOUTMANAGER_HPP__
+#define __FWGUI_LAYOUTMANAGER_IVIEWLAYOUTMANAGER_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -29,7 +29,7 @@ namespace layoutManager
 /**
  * @brief   Defines the generic layout manager for IHM.
  * @class   IViewLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -85,6 +85,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_ILAYOUTMANAGER_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_IVIEWLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/LineLayoutManagerBase.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/LineLayoutManagerBase.hpp
index c6f923d..0b32823 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/LineLayoutManagerBase.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/LineLayoutManagerBase.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,12 @@
  * @file fwGui/layoutManager/LineLayoutManagerBase.hpp
  * @brief This file defines the interface of the class for managing a line layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_LINELAYOUTMANAGERBASE_HPP_
-#define _FWGUI_LAYOUTMANAGER_LINELAYOUTMANAGERBASE_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_LINELAYOUTMANAGERBASE_HPP__
+#define __FWGUI_LAYOUTMANAGER_LINELAYOUTMANAGERBASE_HPP__
 
 #include <list>
 
@@ -30,7 +30,7 @@ namespace layoutManager
 /**
  * @brief   Defines the base for line layout manager.
  * @class   LineLayoutManagerBase
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -46,32 +46,33 @@ public:
     {
         VERTICAL,
         HORIZONTAL
-     } Orientation;
-
-     typedef std::string RegistryKeyType;
-
-     class ViewInfo
-     {
-     public :
-
-         ViewInfo() :
-             m_proportion (1),
-             m_border(0),
-             m_minSize (std::make_pair(-1,-1)),
-             m_caption (std::make_pair(false,"")),
-             m_visible (true),
-             m_isSpacer(false),
-             m_useScrollBar(false)
-         {}
-
-         int                            m_proportion;
-         int                            m_border;
-         std::pair< int, int >          m_minSize;
-         std::pair< bool, std::string > m_caption;
-         bool                           m_visible;
-         bool                           m_isSpacer;
-         bool                           m_useScrollBar;
-     };
+    } Orientation;
+
+    typedef std::string RegistryKeyType;
+
+    class ViewInfo
+    {
+    public:
+
+        ViewInfo() :
+            m_proportion (1),
+            m_border(0),
+            m_minSize (std::make_pair(-1,-1)),
+            m_caption (std::make_pair(false,"")),
+            m_visible (true),
+            m_isSpacer(false),
+            m_useScrollBar(false)
+        {
+        }
+
+        int m_proportion;
+        int m_border;
+        std::pair< int, int >          m_minSize;
+        std::pair< bool, std::string > m_caption;
+        bool m_visible;
+        bool m_isSpacer;
+        bool m_useScrollBar;
+    };
 
     /// Constructor. Do nothing.
     FWGUI_API LineLayoutManagerBase();
@@ -83,8 +84,8 @@ public:
      * @brief Initialize Line layout manager before the creation of layout.
      *
      * Example of configuration with cardinal layout.
-     * @verbatim
-       <service uid="subView2" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
+     * @code{.xml}
+       <service uid="subView2" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
            <gui>
               <layout type="::fwGui::LineLayoutManager" >
                     <orientation value="horizontal" />
@@ -97,7 +98,7 @@ public:
                <view sid="view2" start="yes" />
            </registry>
        </service>
-      @endverbatim
+       @endcode
      *  - \<layout type="::fwGui::LineLayoutManager" \> : define a line layout.
      *  - \<view proportion="0" minWidth="30" /\> : define a new view which can have the following attributes
      *   - \b orientation {horizontal | vertical} : define if the layout is vertical or horizontal.
@@ -113,11 +114,17 @@ public:
 
     FWGUI_API static const RegistryKeyType REGISTRY_KEY;
 
-    Orientation getOrientation(){ return m_orientation;};
+    Orientation getOrientation()
+    {
+        return m_orientation;
+    }
 
 protected:
 
-    std::list< ViewInfo> getViewsInfo(){ return m_views;};
+    std::list< ViewInfo> getViewsInfo()
+    {
+        return m_views;
+    }
 
 private:
 
@@ -130,6 +137,6 @@ private:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_LINELAYOUTMANAGERBASE_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_LINELAYOUTMANAGERBASE_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp
index d002115..9edc5d6 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUILAYOUTMANAGERNAMESPACE_HPP_
-#define FWGUILAYOUTMANAGERNAMESPACE_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_NAMESPACE_HPP__
+#define __FWGUI_LAYOUTMANAGER_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
  * @brief       The namespace fwGui::layoutManager contains the base interface of managers use to handle the GUI layout available in FW4SPL.
  * @namespace   fwGui::layoutManager
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace layoutManager
 
 }
 }
-#endif /* FWGUILAYOUTMANAGERNAMESPACE_HPP_ */
+#endif /* __FWGUI_LAYOUTMANAGER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/TabLayoutManagerBase.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/TabLayoutManagerBase.hpp
index ff0079e..e4e3d9d 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/TabLayoutManagerBase.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/TabLayoutManagerBase.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,12 @@
  * @file fwGui/layoutManager/TabLayoutManagerBase.hpp
  * @brief This file defines the interface of the class for managing a tab layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_TABLAYOUTMANAGERBASE_HPP_
-#define _FWGUI_LAYOUTMANAGER_TABLAYOUTMANAGERBASE_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_TABLAYOUTMANAGERBASE_HPP__
+#define __FWGUI_LAYOUTMANAGER_TABLAYOUTMANAGERBASE_HPP__
 
 #include <list>
 #include <map>
@@ -31,7 +31,7 @@ namespace layoutManager
 /**
  * @brief   Defines the base for cardinal layout manager.
  * @class   TabLayoutManagerBase
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -42,22 +42,23 @@ public:
 
     fwCoreNonInstanciableClassDefinitionsMacro( (TabLayoutManagerBase)(::fwGui::layoutManager::IViewLayoutManager) )
 
-     typedef std::string RegistryKeyType;
+    typedef std::string RegistryKeyType;
 
-     class ViewInfo
-     {
-     public :
+    class ViewInfo
+    {
+    public:
 
-         ViewInfo() :
-             m_caption(""),
-             m_isSelect(false),
-             m_useScrollBar(false)
-         {}
+        ViewInfo() :
+            m_caption(""),
+            m_isSelect(false),
+            m_useScrollBar(false)
+        {
+        }
 
-         std::string  m_caption;
-         bool         m_isSelect;
-         bool         m_useScrollBar;
-     };
+        std::string m_caption;
+        bool m_isSelect;
+        bool m_useScrollBar;
+    };
 
     /// Constructor. Do nothing.
     FWGUI_API TabLayoutManagerBase();
@@ -69,8 +70,8 @@ public:
      * @brief Initialize tab layout manager before the creation of layout.
      *
      * Example of configuration with Tab layout.
-     * @verbatim
-       <service uid="subView3" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
+     * @code{.xml}
+       <service uid="subView3" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
            <gui>
                <layout type="::fwGui::TabLayoutManager" >
                    <view caption="TabView1" />
@@ -84,7 +85,7 @@ public:
                <view sid="view3" start="yes" />
            </registry>
        </service>
-       @endverbatim
+       @endcode
      *  - \<layout type="::fwGui::TabLayoutManager" \> : define a tab layout.
      *  - \<view caption="TabView1" selected="center" /\> : define a new view which can have the following attributes
      *   - \b caption : name of the view (display on the screen).
@@ -95,7 +96,10 @@ public:
 
     FWGUI_API static const RegistryKeyType REGISTRY_KEY;
 
-    std::list< ViewInfo> getViewsInfo(){ return m_views;};
+    std::list< ViewInfo> getViewsInfo()
+    {
+        return m_views;
+    }
 
 private:
 
@@ -107,6 +111,6 @@ private:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_TABLAYOUTMANAGERBASE_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_TABLAYOUTMANAGERBASE_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/layoutManager/ToolboxLayoutManagerBase.hpp b/SrcLib/core/fwGui/include/fwGui/layoutManager/ToolboxLayoutManagerBase.hpp
index 4249b8c..bbb5bf6 100644
--- a/SrcLib/core/fwGui/include/fwGui/layoutManager/ToolboxLayoutManagerBase.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/layoutManager/ToolboxLayoutManagerBase.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,12 @@
  * @file fwGui/layoutManager/ToolboxLayoutManagerBase.hpp
  * @brief This file defines the interface of the class for managing a line layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#ifndef _FWGUI_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGERBASE_HPP_
-#define _FWGUI_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGERBASE_HPP_
+#ifndef __FWGUI_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGERBASE_HPP__
+#define __FWGUI_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGERBASE_HPP__
 
 #include <list>
 
@@ -30,7 +30,7 @@ namespace layoutManager
 /**
  * @brief   Defines the base for line layout manager.
  * @class   ToolboxLayoutManagerBase
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -41,28 +41,29 @@ public:
 
     fwCoreNonInstanciableClassDefinitionsMacro( (ToolboxLayoutManagerBase)(::fwGui::layoutManager::IViewLayoutManager) )
 
-     typedef std::string RegistryKeyType;
-
-     class ViewInfo
-     {
-     public :
-
-         ViewInfo() :
-             m_border(0),
-             m_minSize (std::make_pair(-1,-1)),
-             m_caption (""),
-             m_visible (true),
-             m_expanded(false),
-             m_useScrollBar(false)
-         {}
-
-         int                    m_border;
-         std::pair< int, int >  m_minSize;
-         std::string            m_caption;
-         bool                   m_visible;
-         bool                   m_expanded;
-         bool                   m_useScrollBar;
-     };
+    typedef std::string RegistryKeyType;
+
+    class ViewInfo
+    {
+    public:
+
+        ViewInfo() :
+            m_border(0),
+            m_minSize (std::make_pair(-1,-1)),
+            m_caption (""),
+            m_visible (true),
+            m_expanded(false),
+            m_useScrollBar(false)
+        {
+        }
+
+        int m_border;
+        std::pair< int, int >  m_minSize;
+        std::string m_caption;
+        bool m_visible;
+        bool m_expanded;
+        bool m_useScrollBar;
+    };
 
     /// Constructor. Do nothing.
     FWGUI_API ToolboxLayoutManagerBase();
@@ -74,8 +75,8 @@ public:
      * @brief Initialize Line layout manager before the creation of layout.
      *
      * Example of configuration with cardinal layout.
-     * @verbatim
-       <service uid="subView2" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
+     * @code{.xml}
+       <service uid="subView2" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
            <gui>
                <layout type="::fwGui::ToolboxLayoutManager">
                    <view caption="My view 1" expanded="true" />
@@ -90,24 +91,27 @@ public:
                <view wid="view3WID" />
            </registry>
        </service>
-      @endverbatim
-    *  - \<layout type="::fwGui::ToolboxLayoutManager" \> : define a toolbox layout.
-    *  - \<view caption="My view 1" expanded="true" minWidth="30" /\> : define a new view which can have the following attributes
-    *   - \b border : define the size of the border in the layout
-    *   - \b caption : define the title to display.
-    *   - \b minWidth  : minimal width of the view.
-    *   - \b minHeight : minimal height of the view.
-    *   - \b visible  {true | yes | false | no} : define if the view is visible or not.
-    *   - \b expanded  {true | yes | false | no} : define if the view is expanded or not.
-    *   - \b useScrollBar  {true | yes | false | no} : define if the view use scrollbar or not.
-    */
+       @endcode
+     *  - \<layout type="::fwGui::ToolboxLayoutManager" \> : define a toolbox layout.
+     *  - \<view caption="My view 1" expanded="true" minWidth="30" /\> : define a new view which can have the following attributes
+     *   - \b border : define the size of the border in the layout
+     *   - \b caption : define the title to display.
+     *   - \b minWidth  : minimal width of the view.
+     *   - \b minHeight : minimal height of the view.
+     *   - \b visible  {true | yes | false | no} : define if the view is visible or not.
+     *   - \b expanded  {true | yes | false | no} : define if the view is expanded or not.
+     *   - \b useScrollBar  {true | yes | false | no} : define if the view use scrollbar or not.
+     */
     FWGUI_API virtual void initialize( ConfigurationType configuration);
 
     FWGUI_API static const RegistryKeyType REGISTRY_KEY;
 
 protected:
 
-    std::list< ViewInfo> getViewsInfo(){ return m_views;};
+    std::list< ViewInfo> getViewsInfo()
+    {
+        return m_views;
+    }
 
 private:
 
@@ -118,6 +122,6 @@ private:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUI_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGERBASE_HPP_*/
+#endif /*__FWGUI_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGERBASE_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp
index ae465e8..6cdb938 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/ActionRegistrar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_REGISTRAR_ACTIONREGISTRYMANAGER_HPP_
-#define _FWGUI_REGISTRAR_ACTIONREGISTRYMANAGER_HPP_
+#ifndef __FWGUI_REGISTRAR_ACTIONREGISTRAR_HPP__
+#define __FWGUI_REGISTRAR_ACTIONREGISTRAR_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -22,7 +22,7 @@ namespace registrar
 /**
  * @brief   Defines the action registrar for IHM.
  * @class   ActionRegistrar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -31,7 +31,8 @@ class FWGUI_CLASS_API ActionRegistrar : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ActionRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )), new ActionRegistrar );
+    fwCoreClassDefinitionsWithFactoryMacro( (ActionRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )),
+                                            new ActionRegistrar );
 
     /// Constructor.
     FWGUI_API ActionRegistrar( const std::string &sid);
@@ -51,6 +52,9 @@ public:
     /// Method called when the action service is executable or not
     FWGUI_API void actionServiceSetExecutable(bool isExecutable);
 
+    /// Method called when the action service is visible or not
+    FWGUI_API void actionServiceSetVisible(bool isVisible);
+
 protected:
 
     /// Main service ID associate with this ActionRegistrar
@@ -60,6 +64,6 @@ protected:
 } // namespace registrar
 } // namespace fwGui
 
-#endif /*_FWGUI_REGISTRAR_ACTIONREGISTRYMANAGER_HPP_*/
+#endif /*__FWGUI_REGISTRAR_ACTIONREGISTRAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/MenuBarRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/MenuBarRegistrar.hpp
index c95c940..1c7f359 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/MenuBarRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/MenuBarRegistrar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_REGISTRAR_MENUBARREGISTRYMANAGER_HPP_
-#define _FWGUI_REGISTRAR_MENUBARREGISTRYMANAGER_HPP_
+#ifndef __FWGUI_REGISTRAR_MENUBARREGISTRAR_HPP__
+#define __FWGUI_REGISTRAR_MENUBARREGISTRAR_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -22,7 +22,7 @@ namespace registrar
 /**
  * @brief   Defines the menuBar registrar for IHM.
  * @class   MenuBarRegistrar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -31,7 +31,8 @@ class FWGUI_CLASS_API MenuBarRegistrar : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (MenuBarRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )), new MenuBarRegistrar );
+    fwCoreClassDefinitionsWithFactoryMacro( (MenuBarRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )),
+                                            new MenuBarRegistrar );
 
     /// Constructor.
     FWGUI_API MenuBarRegistrar( const std::string &sid);
@@ -47,14 +48,15 @@ public:
      * @param menuSid sid of the menu service
      * @param menus  vector containing the fwMenu manages by this registrar.
      */
-    FWGUI_API virtual ::fwGui::container::fwMenu::sptr getFwMenu(std::string menuSid, std::vector< ::fwGui::container::fwMenu::sptr > menus);
+    FWGUI_API virtual ::fwGui::container::fwMenu::sptr getFwMenu(std::string menuSid,
+                                                                 std::vector< ::fwGui::container::fwMenu::sptr > menus);
 
     /**
      * @brief Initialize registry managers.
      *
      * Example of configuration
-     * @verbatim
-      <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::DefaultMenuBarSrv" autoConnect="no" >
+     * @code{.xml}
+       <service uid="menuBar" type="::fwGui::IMenuBarSrv" impl="::gui::aspect::SDefaultMenuBar" autoConnect="no" >
           <gui>
               <layout>
                   <menu name="My Menu"/>
@@ -65,8 +67,8 @@ public:
               <menu sid="myMenu" start="yes" />
               <menu sid="myMenu2" start="yes" />
           </registry>
-      </service>
-       @endverbatim
+       </service>
+       @endcode
      * This method analyzes the registry section of the configuration.
      *  - \<menu sid="myMenu" start="yes" /\> : define the service of the menu to add in the menu bar.
      *   - \b sid  (mandatory): the service identifier.
@@ -108,6 +110,6 @@ protected:
 } // namespace registrar
 } // namespace fwGui
 
-#endif /*_FWGUI_REGISTRAR_MENUBARREGISTRYMANAGER_HPP_*/
+#endif /*__FWGUI_REGISTRAR_MENUBARREGISTRAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/MenuRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/MenuRegistrar.hpp
index aca2b2f..81376a4 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/MenuRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/MenuRegistrar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_REGISTRAR_MENUREGISTRYMANAGER_HPP_
-#define _FWGUI_REGISTRAR_MENUREGISTRYMANAGER_HPP_
+#ifndef __FWGUI_REGISTRAR_MENUREGISTRAR_HPP__
+#define __FWGUI_REGISTRAR_MENUREGISTRAR_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -24,7 +24,7 @@ namespace registrar
 /**
  * @brief   Defines the menu registrar for IHM.
  * @class   MenuRegistrar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -33,7 +33,8 @@ class FWGUI_CLASS_API MenuRegistrar : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (MenuRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )), new MenuRegistrar );
+    fwCoreClassDefinitionsWithFactoryMacro( (MenuRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )),
+                                            new MenuRegistrar );
     typedef std::vector< ::fwGui::IMenuItemCallback::sptr > CallbacksType;
 
     /// Constructor.
@@ -50,14 +51,15 @@ public:
      * @param actionSid sid of the action service
      * @param menuItems  vector containing the fwMenuItem manages by this registrar.
      */
-    FWGUI_API virtual ::fwGui::container::fwMenuItem::sptr getFwMenuItem(std::string actionSid, std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems);
+    FWGUI_API virtual ::fwGui::container::fwMenuItem::sptr getFwMenuItem(std::string actionSid,
+                                                                         std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems);
 
     /**
      * @brief Initialize registry managers.
      *
      * Example of configuration
-     * @verbatim
-        <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::DefaultMenuSrv" autoConnect="no" >
+     * @code{.xml}
+        <service uid="myMenu" type="::fwGui::IMenuSrv" impl="::gui::aspect::SDefaultMenu" autoConnect="no" >
             <gui>
                 <layout>
                     <menuItem name="My item 1" shortcut="1" style="check" />
@@ -78,7 +80,7 @@ public:
                 <menuItem sid="actionQuit" start="no" />
             </registry>
         </service>
-       @endverbatim
+       @endcode
      * This method analyzes the registry section of the configuration.
      *  - \<menuItem sid="item1" start="no" /\> : define the service of the menuItem to add in the menu.
      *   - \b sid  (mandatory): the service identifier.
@@ -131,7 +133,10 @@ public:
     /**
      * @brief Returns callbacks associate with menu items.
      */
-    virtual CallbacksType getCallbacks(){ return m_callbacks;};
+    virtual CallbacksType getCallbacks()
+    {
+        return m_callbacks;
+    }
 
 protected:
 
@@ -160,6 +165,6 @@ protected:
 } // namespace registrar
 } // namespace fwGui
 
-#endif /*_FWGUI_REGISTRAR_MENUREGISTRYMANAGER_HPP_*/
+#endif /*__FWGUI_REGISTRAR_MENUREGISTRAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp
index ede88fc..cedc1ee 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIREGISTRARNAMESPACE_HPP_
-#define FWGUIREGISTRARNAMESPACE_HPP_
+#ifndef __FWGUI_REGISTRAR_NAMESPACE_HPP__
+#define __FWGUI_REGISTRAR_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
  * @brief       The namespace fwGui::registrar contains the classes of service management for GUI elements (Menu, View, ToolBar).
  * @namespace   fwGui::registrar
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace registrar
 
 }
 }
-#endif /* FWGUIREGISTRARNAMESPACE_HPP_ */
+#endif /* __FWGUI_REGISTRAR_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/ToolBarRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/ToolBarRegistrar.hpp
index 8d77d67..33497d5 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/ToolBarRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/ToolBarRegistrar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_REGISTRAR_TOOLBARREGISTRYMANAGER_HPP_
-#define _FWGUI_REGISTRAR_TOOLBARREGISTRYMANAGER_HPP_
+#ifndef __FWGUI_REGISTRAR_TOOLBARREGISTRAR_HPP__
+#define __FWGUI_REGISTRAR_TOOLBARREGISTRAR_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -25,21 +25,18 @@ namespace registrar
 
 /**
  * @brief   Defines the toolBar registrar for IHM.
- * @class   ToolBarRegistrar
- * 
- * @date    2009-2010.
- *
  */
 class FWGUI_CLASS_API ToolBarRegistrar : public ::fwGui::GuiBaseObject
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ToolBarRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )), new ToolBarRegistrar );
+    fwCoreClassDefinitionsWithFactoryMacro( (ToolBarRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )),
+                                            new ToolBarRegistrar );
     typedef std::vector< ::fwGui::IMenuItemCallback::sptr > CallbacksType;
 
     /// Constructor.
-    FWGUI_API ToolBarRegistrar( const std::string &sid);
+    FWGUI_API ToolBarRegistrar( const std::string& sid);
 
     /// Destructor. Do nothing
     FWGUI_API virtual ~ToolBarRegistrar();
@@ -52,25 +49,27 @@ public:
      * @param actionSid sid of the action service
      * @param menuItems  vector containing the fwMenuItem manages by this registrar.
      */
-    FWGUI_API virtual ::fwGui::container::fwMenuItem::sptr getFwMenuItem(std::string actionSid, std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems);
+    FWGUI_API virtual ::fwGui::container::fwMenuItem::sptr getFwMenuItem(std::string actionSid,
+                                                                         std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems);
 
     /**
      * @brief Initialize registry managers.
      *
      * Example of configuration
-     * @verbatim
-           <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::DefaultToolBarSrv" autoConnect="no" >
+     * @code{.xml}
+           <service uid="toolbar2" type="::fwGui::IToolBarSrv" impl="::gui::aspect::SDefaultToolBar" autoConnect="no" >
                <gui>
                    <layout>
-                       <menuItem name="My item 2" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
-                       <menuItem name="My item 3" style="radio" icon="Bundles/TutoGui_0-1/icons/system.png"/>
+                       <menuItem name="My item 2" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
+                       <menuItem name="My item 3" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/system.png"/>
                        <separator />
-                       <menuItem name="My item A" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
-                       <menuItem name="My item B" style="radio" icon="Bundles/TutoGui_0-1/icons/monkey.png"/>
+                       <menuItem name="My item A" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
+                       <menuItem name="My item B" style="radio" icon="@BUNDLE_PREFIX@/TutoGui_0-1/icons/monkey.png"/>
                        <separator />
                        <menu name="My menu" />
                        <separator />
                        <editor />
+                       <editor />
                    </layout>
                </gui>
                <registry>
@@ -79,15 +78,23 @@ public:
                    <menuItem sid="item4" />
                    <menuItem sid="item5" />
                    <menu sid="menu" />
-                   <editor sid="editor" />
+                   <editor sid="editor" start="yes"/>
+                   <editor wid="editorWindow" />
                </registry>
            </service>
-       @endverbatim
+       @endcode
      * This method analyzes the registry section of the configuration.
      *
-     *  - \<menuItem sid="item2" start="no" /\> : define the service of the menuItem to add in the toolbar.
-     *   - \b sid  (mandatory): the service identifier.
+     * - \<menuItem sid="item2" start="no" /\> : define the service of the menuItem to add in the toolbar.
+     *   - \b sid (mandatory): the service identifier.
      *   - \b start = {yes| no} (default value no): indicate if the service must be started by the toolbar service.
+     * - \<editor sid="editor" start="yes" /\> : define the service of the editor to add in the toolbar.
+     *   - \b sid  (mandatory): the service identifier.
+     *   - \b start = {yes| no} (default value no): indicate if the editor service must be started by the service.
+     * - \<editor wid="editorWindow" /\> : reserve a sub container for the editor in the toolbar with the name
+     *   "editorWindow". The service which want to use this sub container will have to define a parent
+     *   with \<parent wid="editorWindow" /\>.
+     *   - \b wid  (mandatory): the window identifier.
      */
     FWGUI_API virtual void initialize( ::fwRuntime::ConfigurationElement::sptr configuration);
 
@@ -143,12 +150,16 @@ public:
     /**
      * @brief Returns callbacks associate with toolBar items.
      */
-    virtual CallbacksType getCallbacks(){ return m_callbacks;};
+    virtual CallbacksType getCallbacks()
+    {
+        return m_callbacks;
+    }
 
 protected:
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
     typedef std::map< std::string, std::pair<unsigned int, bool> > SIDToolBarMapType;
+    typedef std::map< std::string, unsigned int > WIDToolBarMapType;
 
     /**
      * @brief All toolBar services ID managed and associated with pair containing:
@@ -168,6 +179,9 @@ protected:
      */
     SIDToolBarMapType m_editorSids;
 
+    /// All toolBar servicesID managed (and associated with subViews index vector).
+    WIDToolBarMapType m_editorWids;
+
     /// Main service ID associate with this ToolBarRegistrar
     std::string m_sid;
 
@@ -178,6 +192,6 @@ protected:
 } // namespace registrar
 } // namespace fwGui
 
-#endif /*_FWGUI_REGISTRAR_TOOLBARREGISTRYMANAGER_HPP_*/
+#endif /*__FWGUI_REGISTRAR_TOOLBARREGISTRAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp b/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp
index 537bfe0..5f66d81 100644
--- a/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registrar/ViewRegistrar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUI_REGISTRYMANAGER_VIEWREGISTRYMANAGER_HPP_
-#define _FWGUI_REGISTRYMANAGER_VIEWREGISTRYMANAGER_HPP_
+#ifndef __FWGUI_REGISTRAR_VIEWREGISTRAR_HPP__
+#define __FWGUI_REGISTRAR_VIEWREGISTRAR_HPP__
 
 #include <fwRuntime/ConfigurationElement.hpp>
 
@@ -24,7 +24,7 @@ namespace registrar
 /**
  * @brief   Defines the generic view manager for IHM.
  * @class   ViewRegistrar
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -33,7 +33,8 @@ class FWGUI_CLASS_API ViewRegistrar : public ::fwGui::GuiBaseObject
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ViewRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )), new ViewRegistrar );
+    fwCoreClassDefinitionsWithFactoryMacro( (ViewRegistrar)(::fwGui::GuiBaseObject), (( (const std::string&) )),
+                                            new ViewRegistrar );
 
     /// Constructor.
     FWGUI_API ViewRegistrar( const std::string &sid);
@@ -49,8 +50,8 @@ public:
      * @brief Initialize managers.
      *
      * Example of configuration
-     * @verbatim
-        <service uid="subView1" type="::gui::view::IView" impl="::gui::view::DefaultView" autoConnect="no" >
+     * @code{.xml}
+        <service uid="subView1" type="::gui::view::IView" impl="::gui::view::SDefaultView" autoConnect="no" >
             <gui>
                 <layout type="::fwGui::LineLayoutManager" >
                     <orientation value="horizontal" />
@@ -70,7 +71,7 @@ public:
                 <view wid="subView5" />
             </registry>
         </service>
-      @endverbatim
+       @endcode
      * - \<parent wid="myView" /\> : This section isn't mandatory. When the parent section is present, the wid attribute is used to find its parent container.
      * Otherwise, the service uid is used to find its parent container.
      * - \<toolBar sid="toolbar1" start="yes" /\> : This section isn't mandatory.
@@ -168,6 +169,6 @@ protected:
 } // namespace registrar
 } // namespace fwGui
 
-#endif /*_FWGUI_REGISTRYMANAGER_VIEWREGISTRYMANAGER_HPP_*/
+#endif /*__FWGUI_REGISTRAR_VIEWREGISTRAR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registry/detail.hpp b/SrcLib/core/fwGui/include/fwGui/registry/detail.hpp
index 1c01fe9..db08d66 100644
--- a/SrcLib/core/fwGui/include/fwGui/registry/detail.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwGui::GuiBaseObject) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwGui::GuiBaseObject) (), KeyType > Type;
 
 FWGUI_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwGui/include/fwGui/registry/macros.hpp b/SrcLib/core/fwGui/include/fwGui/registry/macros.hpp
index 04f67d2..a100ef9 100644
--- a/SrcLib/core/fwGui/include/fwGui/registry/macros.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWGUI_REGISTRY_MACRO_HPP__
-#define __FWGUI_REGISTRY_MACRO_HPP__
+#ifndef __FWGUI_REGISTRY_MACROS_HPP__
+#define __FWGUI_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/cat.hpp>
 
@@ -24,4 +24,4 @@ namespace registry
 } // end namespace registry
 } // end namespace fwGui
 
-#endif /*__FWGUI_REGISTRY_MACRO_HPP__*/
+#endif /*__FWGUI_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp b/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp
index 96eed52..ab6334f 100644
--- a/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp
+++ b/SrcLib/core/fwGui/include/fwGui/registry/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwGui
 /**
  * @brief       Contains fwGui::registry details
  * @namespace   fwGui::registry
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwGui/include/fwGui/registry/worker.hpp b/SrcLib/core/fwGui/include/fwGui/registry/worker.hpp
new file mode 100644
index 0000000..d92ba4c
--- /dev/null
+++ b/SrcLib/core/fwGui/include/fwGui/registry/worker.hpp
@@ -0,0 +1,38 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUI_REGISTRY_WORKER_HPP__
+#define __FWGUI_REGISTRY_WORKER_HPP__
+
+#include "fwGui/config.hpp"
+
+#include <fwThread/Worker.hpp>
+
+namespace fwGui
+{
+
+namespace registry
+{
+
+namespace worker
+{
+/// Init current worker with given parameter only if current worker is not defined.
+FWGUI_API void init(const ::fwThread::Worker::sptr& _worker);
+
+/// Returns current worker.
+FWGUI_API const ::fwThread::Worker::sptr& get();
+
+/// Reset current worker.
+FWGUI_API void reset();
+
+} // namespace worker
+
+} // namespace registry
+} // namespace fwGui
+
+
+#endif // __FWGUI_REGISTRY_WORKER_HPP__
+
diff --git a/SrcLib/core/fwGui/src/fwGui/ActionCallbackBase.cpp b/SrcLib/core/fwGui/src/fwGui/ActionCallbackBase.cpp
index 12ee48f..66032f0 100644
--- a/SrcLib/core/fwGui/src/fwGui/ActionCallbackBase.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/ActionCallbackBase.cpp
@@ -1,32 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwTools/fwID.hpp>
 #include <fwServices/IService.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include "fwGui/IActionSrv.hpp"
 #include "fwGui/ActionCallbackBase.hpp"
 
+#include <fwServices/op/Get.hpp>
+
 namespace fwGui
 {
 
 //-----------------------------------------------------------------------------
 
-const ActionCallbackBase::RegistryKeyType ActionCallbackBase::REGISTRY_KEY =  "::fwGui::ActionCallback";
+const ActionCallbackBase::RegistryKeyType ActionCallbackBase::REGISTRY_KEY = "::fwGui::ActionCallback";
 
 //-----------------------------------------------------------------------------
 
-ActionCallbackBase::ActionCallbackBase(): m_sid("")
-{}
+ActionCallbackBase::ActionCallbackBase() : m_sid("")
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ActionCallbackBase::~ActionCallbackBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -40,7 +44,7 @@ void ActionCallbackBase::setSID(std::string sid)
 void ActionCallbackBase::execute()
 {
     OSLM_ASSERT("Service "<<m_sid<<" doesn't exist.", ::fwTools::fwID::exist(m_sid ));
-    ::fwServices::IService::sptr service = ::fwServices::get( m_sid ) ;
+    ::fwServices::IService::sptr service = ::fwServices::get( m_sid );
     OSLM_ASSERT("Service "<<m_sid<<" not instanced.", service);
     service->update();
 }
@@ -50,7 +54,7 @@ void ActionCallbackBase::execute()
 void ActionCallbackBase::check(bool checked)
 {
     OSLM_ASSERT("Service "<<m_sid<<" doesn't exist.", ::fwTools::fwID::exist(m_sid ));
-    ::fwServices::IService::sptr service = ::fwServices::get( m_sid ) ;
+    ::fwServices::IService::sptr service = ::fwServices::get( m_sid );
     OSLM_ASSERT("Service "<<m_sid<<" not instanced.", service);
     ::fwGui::IActionSrv::sptr action = ::fwGui::IActionSrv::dynamicCast(service);
     OSLM_ASSERT("Service "<<m_sid<<" is not an action.", action);
diff --git a/SrcLib/core/fwGui/src/fwGui/Application.cpp b/SrcLib/core/fwGui/src/fwGui/Application.cpp
index 0f4b47e..acc0c23 100644
--- a/SrcLib/core/fwGui/src/fwGui/Application.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/Application.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/Cursor.cpp b/SrcLib/core/fwGui/src/fwGui/Cursor.cpp
index cffa8bd..d7bbaca 100644
--- a/SrcLib/core/fwGui/src/fwGui/Cursor.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/Cursor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,13 +15,14 @@ namespace fwGui
 Cursor::Cursor()
 {
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ICursor::REGISTRY_KEY);
-    m_implementation = ::fwGui::ICursor::dynamicCast(guiObj);
+    m_implementation                    = ::fwGui::ICursor::dynamicCast(guiObj);
 }
 
 //-----------------------------------------------------------------------------
 
 Cursor::~Cursor()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp b/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp
index 2b37a17..95759dc 100644
--- a/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/GuiRegistry.cpp
@@ -1,40 +1,44 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include "fwGui/IMenuSrv.hpp"
 #include "fwGui/IToolBarSrv.hpp"
 #include "fwGui/GuiRegistry.hpp"
 
+#include <fwServices/op/Get.hpp>
+
 namespace fwGui
 {
 
-GuiRegistry::ContainerMapType       GuiRegistry::m_globalSIDToFwContainer;
-GuiRegistry::ContainerMapType       GuiRegistry::m_globalWIDToFwContainer;
-GuiRegistry::MenuBarMapType         GuiRegistry::m_globalSIDToFwMenuBar;
-GuiRegistry::ToolBarMapType         GuiRegistry::m_globalSIDToFwToolBar;
-GuiRegistry::MenuMapType            GuiRegistry::m_globalSIDToFwMenu;
-GuiRegistry::ActionToParentMapType  GuiRegistry::m_actionSIDToParentSID;
+GuiRegistry::ContainerMapType GuiRegistry::m_globalSIDToFwContainer;
+GuiRegistry::ContainerMapType GuiRegistry::m_globalWIDToFwContainer;
+GuiRegistry::MenuBarMapType GuiRegistry::m_globalSIDToFwMenuBar;
+GuiRegistry::ToolBarMapType GuiRegistry::m_globalSIDToFwToolBar;
+GuiRegistry::MenuMapType GuiRegistry::m_globalSIDToFwMenu;
+GuiRegistry::ActionToParentMapType GuiRegistry::m_actionSIDToParentSID;
 
 GuiRegistry::GuiRegistry()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 GuiRegistry::~GuiRegistry()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void GuiRegistry::registerSIDContainer(std::string sid , ::fwGui::container::fwContainer::sptr container)
+void GuiRegistry::registerSIDContainer(std::string sid, ::fwGui::container::fwContainer::sptr container)
 {
-    OSLM_ASSERT("Sorry, fwContainer for "<<sid<<" already exists in SID container map.",
-            m_globalSIDToFwContainer.find(sid) == m_globalSIDToFwContainer.end());
+    OSLM_ASSERT("A fwContainer with the sid "<<sid<<" already exists in the SID container map.",
+                m_globalSIDToFwContainer.find(sid) == m_globalSIDToFwContainer.end());
     m_globalSIDToFwContainer[sid] = container;
 }
 
@@ -46,12 +50,12 @@ void GuiRegistry::unregisterSIDContainer(std::string sid)
     OSLM_INFO_IF("Service "<<sid <<" not exists.",!service_exists );
     if(service_exists)
     {
-        ::fwServices::IService::sptr service = ::fwServices::get( sid ) ;
+        ::fwServices::IService::sptr service = ::fwServices::get( sid );
         OSLM_ASSERT("Service "<<sid<<" must be stopped before unregister container.",service->isStopped());
     }
 
-    OSLM_ASSERT("Sorry, fwContainer for "<<sid<<" not exists in SID container map.",
-            m_globalSIDToFwContainer.find(sid) != m_globalSIDToFwContainer.end());
+    OSLM_ASSERT("No fwContainer with the sid "<<sid<<" exists in the SID container map.",
+                m_globalSIDToFwContainer.find(sid) != m_globalSIDToFwContainer.end());
 
     // Removes container in SID container map
     m_globalSIDToFwContainer.erase(sid);
@@ -61,18 +65,18 @@ void GuiRegistry::unregisterSIDContainer(std::string sid)
 
 ::fwGui::container::fwContainer::sptr GuiRegistry::getSIDContainer(std::string sid)
 {
-    OSLM_ASSERT("Sorry, fwContainer for "<<sid<<" not exists in SID container map.",
-            m_globalSIDToFwContainer.find(sid) != m_globalSIDToFwContainer.end());
+    OSLM_ASSERT("No fwContainer with the sid "<<sid<<" exists in the SID container map.",
+                m_globalSIDToFwContainer.find(sid) != m_globalSIDToFwContainer.end());
     // returns container in SID container map
-    return  m_globalSIDToFwContainer[sid];
+    return m_globalSIDToFwContainer[sid];
 }
 
 //-----------------------------------------------------------------------------
 
-void GuiRegistry::registerWIDContainer(std::string wid , ::fwGui::container::fwContainer::sptr container)
+void GuiRegistry::registerWIDContainer(std::string wid, ::fwGui::container::fwContainer::sptr container)
 {
-    OSLM_ASSERT("Sorry, fwContainer for "<<wid<<" already exists in WID container map.",
-            m_globalWIDToFwContainer.find(wid) == m_globalWIDToFwContainer.end());
+    OSLM_ASSERT("A fwContainer with the wid "<<wid<<" already exists in the WID container map.",
+                m_globalWIDToFwContainer.find(wid) == m_globalWIDToFwContainer.end());
     m_globalWIDToFwContainer[wid] = container;
 }
 
@@ -80,8 +84,8 @@ void GuiRegistry::registerWIDContainer(std::string wid , ::fwGui::container::fwC
 
 void GuiRegistry::unregisterWIDContainer(std::string wid)
 {
-    OSLM_ASSERT("Sorry, fwContainer with wid "<<wid<<" not exists in WID container map.",
-            m_globalWIDToFwContainer.find(wid) != m_globalWIDToFwContainer.end());
+    OSLM_ASSERT("No fwContainer with the wid "<<wid<<" exists in the WID container map.",
+                m_globalWIDToFwContainer.find(wid) != m_globalWIDToFwContainer.end());
 
     // Removes container in WID container map
     m_globalWIDToFwContainer.erase(wid);
@@ -91,18 +95,18 @@ void GuiRegistry::unregisterWIDContainer(std::string wid)
 
 ::fwGui::container::fwContainer::sptr GuiRegistry::getWIDContainer(std::string wid)
 {
-    OSLM_ASSERT("Sorry, fwContainer for "<<wid<<" not exists in WID container map.",
-            m_globalWIDToFwContainer.find(wid) != m_globalWIDToFwContainer.end());
+    OSLM_ASSERT("No fwContainer with the wid"<<wid<<" exists in the WID container map.",
+                m_globalWIDToFwContainer.find(wid) != m_globalWIDToFwContainer.end());
     // returns container in WID container map
-    return  m_globalWIDToFwContainer[wid];
+    return m_globalWIDToFwContainer[wid];
 }
 
 //-----------------------------------------------------------------------------
 
-void GuiRegistry::registerSIDMenuBar(std::string sid , ::fwGui::container::fwMenuBar::sptr menuBar)
+void GuiRegistry::registerSIDMenuBar(std::string sid, ::fwGui::container::fwMenuBar::sptr menuBar)
 {
-    OSLM_ASSERT("Sorry, fwMenuBar for "<<sid<<" already exists in SID menuBar map.",
-            m_globalSIDToFwMenuBar.find(sid) == m_globalSIDToFwMenuBar.end());
+    OSLM_ASSERT("A fwMenuBar with the sid "<<sid<<" already exists in the SID menuBar map.",
+                m_globalSIDToFwMenuBar.find(sid) == m_globalSIDToFwMenuBar.end());
     m_globalSIDToFwMenuBar[sid] = menuBar;
 }
 
@@ -114,11 +118,11 @@ void GuiRegistry::unregisterSIDMenuBar(std::string sid)
     OSLM_INFO_IF("Service "<<sid <<" not exists.",!service_exists );
     if(service_exists)
     {
-        ::fwServices::IService::sptr service = ::fwServices::get( sid ) ;
+        ::fwServices::IService::sptr service = ::fwServices::get( sid );
         OSLM_ASSERT("Service "<<sid<<" must be stopped before unregister menuBar.",service->isStopped());
     }
 
-    OSLM_ASSERT("Sorry, fwMenuBar for "<<sid<<" not exists in SID menuBar map.",
+    OSLM_ASSERT("No fwMenuBar with the sid "<<sid<<" exists in the SID menuBar map.",
                 m_globalSIDToFwMenuBar.find(sid) != m_globalSIDToFwMenuBar.end());
 
     // Removes container in SID container map
@@ -129,18 +133,18 @@ void GuiRegistry::unregisterSIDMenuBar(std::string sid)
 
 ::fwGui::container::fwMenuBar::sptr GuiRegistry::getSIDMenuBar(std::string sid)
 {
-    OSLM_ASSERT("Sorry, fwMenuBar for "<<sid<<" not exists in SID menuBar map.",
+    OSLM_ASSERT("No fwMenuBar with the sid "<<sid<<" exists in the SID menuBar map.",
                 m_globalSIDToFwMenuBar.find(sid) != m_globalSIDToFwMenuBar.end());
     // returns container in SID container map
-    return  m_globalSIDToFwMenuBar[sid];
+    return m_globalSIDToFwMenuBar[sid];
 }
 
 //-----------------------------------------------------------------------------
 
-void GuiRegistry::registerSIDToolBar(std::string sid , ::fwGui::container::fwToolBar::sptr toolBar)
+void GuiRegistry::registerSIDToolBar(std::string sid, ::fwGui::container::fwToolBar::sptr toolBar)
 {
-    OSLM_ASSERT("Sorry, fwToolBar for "<<sid<<" already exists in SID toolBar map.",
-            m_globalSIDToFwToolBar.find(sid) == m_globalSIDToFwToolBar.end());
+    OSLM_ASSERT("A fwToolBar with the sid "<<sid<<" already exists in the SID toolBar map.",
+                m_globalSIDToFwToolBar.find(sid) == m_globalSIDToFwToolBar.end());
     m_globalSIDToFwToolBar[sid] = toolBar;
 }
 
@@ -152,11 +156,11 @@ void GuiRegistry::unregisterSIDToolBar(std::string sid)
     OSLM_INFO_IF("Service "<<sid <<" not exists.",!service_exists );
     if(service_exists)
     {
-        ::fwServices::IService::sptr service = ::fwServices::get( sid ) ;
+        ::fwServices::IService::sptr service = ::fwServices::get( sid );
         OSLM_ASSERT("Service "<<sid<<" must be stopped before unregister toolBar.",service->isStopped());
     }
 
-    OSLM_ASSERT("Sorry, fwToolBar for "<<sid<<" not exists in SID toolBar map.",
+    OSLM_ASSERT("No fwToolBar with the sid "<<sid<<"  exists in the SID toolBar map.",
                 m_globalSIDToFwToolBar.find(sid) != m_globalSIDToFwToolBar.end());
 
     // Removes container in SID container map
@@ -167,19 +171,19 @@ void GuiRegistry::unregisterSIDToolBar(std::string sid)
 
 ::fwGui::container::fwToolBar::sptr GuiRegistry::getSIDToolBar(std::string sid)
 {
-    OSLM_ASSERT("Sorry, fwToolBar for "<<sid<<" not exists in SID toolBar map.",
+    OSLM_ASSERT("No fwToolBar with the sid "<<sid<<" exists in the SID toolBar map.",
                 m_globalSIDToFwToolBar.find(sid) != m_globalSIDToFwToolBar.end());
     // returns container in SID container map
-    return  m_globalSIDToFwToolBar[sid];
+    return m_globalSIDToFwToolBar[sid];
 }
 
 
 //-----------------------------------------------------------------------------
 
-void GuiRegistry::registerSIDMenu(std::string sid , ::fwGui::container::fwMenu::sptr menu)
+void GuiRegistry::registerSIDMenu(std::string sid, ::fwGui::container::fwMenu::sptr menu)
 {
-    OSLM_ASSERT("Sorry, fwMenu for "<<sid<<" already exists in SID menu map.",
-            m_globalSIDToFwMenu.find(sid) == m_globalSIDToFwMenu.end());
+    OSLM_ASSERT("A fwMenu with the "<<sid<<" already exists in the SID menu map.",
+                m_globalSIDToFwMenu.find(sid) == m_globalSIDToFwMenu.end());
     m_globalSIDToFwMenu[sid] = menu;
 }
 
@@ -191,11 +195,11 @@ void GuiRegistry::unregisterSIDMenu(std::string sid)
     OSLM_INFO_IF("Service "<<sid <<" not exists.",!service_exists );
     if(service_exists)
     {
-        ::fwServices::IService::sptr service = ::fwServices::get( sid ) ;
+        ::fwServices::IService::sptr service = ::fwServices::get( sid );
         OSLM_ASSERT("Service "<<sid<<" must be stopped before unregister menu.",service->isStopped());
     }
 
-    OSLM_ASSERT("Sorry, fwMenu for "<<sid<<" not exists in SID menu map.",
+    OSLM_ASSERT("No fwMenu with the sid "<<sid<<" exists in the SID menu map.",
                 m_globalSIDToFwMenu.find(sid) != m_globalSIDToFwMenu.end());
 
     // Removes container in SID container map
@@ -206,21 +210,22 @@ void GuiRegistry::unregisterSIDMenu(std::string sid)
 
 ::fwGui::container::fwMenu::sptr GuiRegistry::getSIDMenu(std::string sid)
 {
-    OSLM_ASSERT("Sorry, fwMenu for "<<sid<<" not exists in SID menu map.",
+    OSLM_ASSERT("No fwMenu with the sid "<<sid<<" exists in the SID menu map.",
                 m_globalSIDToFwMenu.find(sid) != m_globalSIDToFwMenu.end());
     // returns container in SID container map
-    return  m_globalSIDToFwMenu[sid];
+    return m_globalSIDToFwMenu[sid];
 }
 
 //-----------------------------------------------------------------------------
 
-void GuiRegistry::registerActionSIDToParentSID(std::string actionSid , std::string parentSid)
+void GuiRegistry::registerActionSIDToParentSID(std::string actionSid, std::string parentSid)
 {
     if ( m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end())
     {
         // Action already exist in map
-        OSLM_ASSERT("Sorry, action " << actionSid << " already exists for parent " << parentSid,
-                    std::find(m_actionSIDToParentSID[actionSid].begin(), m_actionSIDToParentSID[actionSid].end(), parentSid) == m_actionSIDToParentSID[actionSid].end());
+        OSLM_ASSERT("An action with the sid " << actionSid << " already exists for the parent " << parentSid,
+                    std::find(m_actionSIDToParentSID[actionSid].begin(), m_actionSIDToParentSID[actionSid].end(),
+                              parentSid) == m_actionSIDToParentSID[actionSid].end());
     }
     m_actionSIDToParentSID[actionSid].push_back(parentSid);
 }
@@ -230,8 +235,8 @@ void GuiRegistry::registerActionSIDToParentSID(std::string actionSid , std::stri
 void GuiRegistry::unregisterActionSIDToParentSID(std::string actionSid, std::string parentSid)
 {
 
-    OSLM_ASSERT("Sorry, action for "<<actionSid<<" not exists in SID action map.",
-                    m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end());
+    OSLM_ASSERT("No action with the sid "<<actionSid<<" exists in the SID action map.",
+                m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end());
 
     if (m_actionSIDToParentSID[actionSid].size() == 1)
     {
@@ -240,7 +245,7 @@ void GuiRegistry::unregisterActionSIDToParentSID(std::string actionSid, std::str
         OSLM_INFO_IF("Service "<<actionSid <<" not exists.",!service_exists );
         if(service_exists)
         {
-            ::fwServices::IService::sptr service = ::fwServices::get( actionSid ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( actionSid );
             OSLM_WARN_IF("Service "<<actionSid<<" must be stopped before unregister action.",!service->isStopped());
         }
         m_actionSIDToParentSID.erase(actionSid);
@@ -248,8 +253,10 @@ void GuiRegistry::unregisterActionSIDToParentSID(std::string actionSid, std::str
     else
     {
         // Action has several parents
-        ParentSidsType::iterator iter = std::find(m_actionSIDToParentSID[actionSid].begin(), m_actionSIDToParentSID[actionSid].end(), parentSid);
-        OSLM_ASSERT("Sorry, action for "<<actionSid<<" has no parent "<< parentSid, iter != m_actionSIDToParentSID[actionSid].end());
+        ParentSidsType::iterator iter =
+            std::find(m_actionSIDToParentSID[actionSid].begin(), m_actionSIDToParentSID[actionSid].end(), parentSid);
+        OSLM_ASSERT("The action with the sid "<<actionSid<<" has no parent named "<< parentSid,
+                    iter != m_actionSIDToParentSID[actionSid].end());
         m_actionSIDToParentSID[actionSid].erase(iter);
     }
 }
@@ -258,21 +265,18 @@ void GuiRegistry::unregisterActionSIDToParentSID(std::string actionSid, std::str
 
 void GuiRegistry::actionServiceStopping(std::string actionSid)
 {
-    //OSLM_ASSERT("Sorry, action for "<<actionSid<<" not exists in SID action map.",
-    //                m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end());
-
     if( m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end() )
     {
         ParentSidsType parentSids = m_actionSIDToParentSID[actionSid];
 
-        BOOST_FOREACH(std::string parentSid, parentSids)
+        for(std::string parentSid :  parentSids)
         {
             bool service_exists = ::fwTools::fwID::exist(parentSid );
             OSLM_INFO_IF("Service "<<parentSid <<" not exists.",!service_exists );
             if(service_exists)
             {
-                ::fwServices::IService::sptr service = ::fwServices::get( parentSid ) ;
-                ::fwGui::IMenuSrv::sptr menuSrv = ::fwGui::IMenuSrv::dynamicCast(service);
+                ::fwServices::IService::sptr service  = ::fwServices::get( parentSid );
+                ::fwGui::IMenuSrv::sptr menuSrv       = ::fwGui::IMenuSrv::dynamicCast(service);
                 ::fwGui::IToolBarSrv::sptr toolbarSrv = ::fwGui::IToolBarSrv::dynamicCast(service);
                 if (menuSrv)
                 {
@@ -296,22 +300,19 @@ void GuiRegistry::actionServiceStopping(std::string actionSid)
 
 void GuiRegistry::actionServiceStarting(std::string actionSid)
 {
-    //OSLM_ASSERT("Sorry, action for "<<actionSid<<" not exists in SID action map.",
-    //        m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end());
-
     if( m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end() )
     {
         ParentSidsType parentSids = m_actionSIDToParentSID[actionSid];
 
 
-        BOOST_FOREACH(std::string parentSid, parentSids)
+        for(std::string parentSid :  parentSids)
         {
             bool service_exists = ::fwTools::fwID::exist(parentSid );
             OSLM_INFO_IF("Service "<<parentSid <<" not exists.",!service_exists );
             if(service_exists)
             {
-                ::fwServices::IService::sptr service = ::fwServices::get( parentSid ) ;
-                ::fwGui::IMenuSrv::sptr menuSrv = ::fwGui::IMenuSrv::dynamicCast(service);
+                ::fwServices::IService::sptr service  = ::fwServices::get( parentSid );
+                ::fwGui::IMenuSrv::sptr menuSrv       = ::fwGui::IMenuSrv::dynamicCast(service);
                 ::fwGui::IToolBarSrv::sptr toolbarSrv = ::fwGui::IToolBarSrv::dynamicCast(service);
                 if (menuSrv)
                 {
@@ -334,9 +335,6 @@ void GuiRegistry::actionServiceStarting(std::string actionSid)
 
 void GuiRegistry::actionServiceSetActive(std::string actionSid, bool isActive)
 {
-    //OSLM_ASSERT("Sorry, action for "<<actionSid<<" not exists in SID action map.",
-    //            m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end());
-
     if( m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end() )
     {
 
@@ -344,14 +342,14 @@ void GuiRegistry::actionServiceSetActive(std::string actionSid, bool isActive)
         ParentSidsType parentSids = m_actionSIDToParentSID[actionSid];
 
 
-        BOOST_FOREACH(std::string parentSid, parentSids)
+        for(std::string parentSid :  parentSids)
         {
             bool service_exists = ::fwTools::fwID::exist(parentSid );
             OSLM_INFO_IF("Service "<<parentSid <<" not exists.",!service_exists );
             if(service_exists)
             {
-                ::fwServices::IService::sptr service = ::fwServices::get( parentSid ) ;
-                ::fwGui::IMenuSrv::sptr menuSrv = ::fwGui::IMenuSrv::dynamicCast(service);
+                ::fwServices::IService::sptr service  = ::fwServices::get( parentSid );
+                ::fwGui::IMenuSrv::sptr menuSrv       = ::fwGui::IMenuSrv::dynamicCast(service);
                 ::fwGui::IToolBarSrv::sptr toolbarSrv = ::fwGui::IToolBarSrv::dynamicCast(service);
                 if (menuSrv)
                 {
@@ -374,23 +372,20 @@ void GuiRegistry::actionServiceSetActive(std::string actionSid, bool isActive)
 
 void GuiRegistry::actionServiceSetExecutable(std::string actionSid, bool isExecutable)
 {
-    //OSLM_ASSERT("Sorry, action for "<<actionSid<<" not exists in SID action map.",
-    //            m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end());
-
     if( m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end() )
     {
 
         ParentSidsType parentSids = m_actionSIDToParentSID[actionSid];
 
 
-        BOOST_FOREACH(std::string parentSid, parentSids)
+        for(std::string parentSid :  parentSids)
         {
             bool service_exists = ::fwTools::fwID::exist(parentSid );
             OSLM_INFO_IF("Service "<<parentSid <<" not exists.",!service_exists );
             if(service_exists)
             {
-                ::fwServices::IService::sptr service = ::fwServices::get( parentSid ) ;
-                ::fwGui::IMenuSrv::sptr menuSrv = ::fwGui::IMenuSrv::dynamicCast(service);
+                ::fwServices::IService::sptr service  = ::fwServices::get( parentSid );
+                ::fwGui::IMenuSrv::sptr menuSrv       = ::fwGui::IMenuSrv::dynamicCast(service);
                 ::fwGui::IToolBarSrv::sptr toolbarSrv = ::fwGui::IToolBarSrv::dynamicCast(service);
                 if (menuSrv)
                 {
@@ -411,5 +406,39 @@ void GuiRegistry::actionServiceSetExecutable(std::string actionSid, bool isExecu
 
 //-----------------------------------------------------------------------------
 
+void GuiRegistry::actionServiceSetVisible(std::string actionSid, bool isVisible)
+{
+    if( m_actionSIDToParentSID.find(actionSid) != m_actionSIDToParentSID.end() )
+    {
+        ParentSidsType parentSids = m_actionSIDToParentSID[actionSid];
+
+        for(std::string parentSid :  parentSids)
+        {
+            bool service_exists = ::fwTools::fwID::exist(parentSid );
+            OSLM_INFO_IF("Service "<<parentSid <<" not exists.",!service_exists );
+            if(service_exists)
+            {
+                ::fwServices::IService::sptr service  = ::fwServices::get( parentSid );
+                ::fwGui::IMenuSrv::sptr menuSrv       = ::fwGui::IMenuSrv::dynamicCast(service);
+                ::fwGui::IToolBarSrv::sptr toolbarSrv = ::fwGui::IToolBarSrv::dynamicCast(service);
+                if (menuSrv)
+                {
+                    menuSrv->actionServiceSetVisible(actionSid, isVisible);
+                }
+                else if (toolbarSrv)
+                {
+                    toolbarSrv->actionServiceSetVisible(actionSid, isVisible);
+                }
+                else
+                {
+                    SLM_FATAL("Unknown service");
+                }
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
 
 }
diff --git a/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp
index 4904a28..c78d293 100644
--- a/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IActionSrv.cpp
@@ -1,33 +1,60 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
 
-#include <fwCore/base.hpp>
-#include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
-
-#include "fwGui/IActionSrv.hpp"
 #include "fwGui/dialog/IMessageDialog.hpp"
 #include "fwGui/dialog/MessageDialog.hpp"
+#include "fwGui/IActionSrv.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwTools/fwID.hpp>
 
 namespace fwGui
 {
 
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_SET_IS_ACTIVE_SLOT     = "setIsActive";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_ACTIVATE_SLOT          = "activate";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_DEACTIVATE_SLOT        = "deactivate";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_SET_IS_EXECUTABLE_SLOT = "setIsExecutable";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_SET_EXECUTABLE_SLOT    = "setExecutable";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_SET_INEXECUTABLE_SLOT  = "setInexecutable";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_SET_VISIBLE_SLOT       = "setVisible";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_SHOW_SLOT              = "show";
+const ::fwCom::Slots::SlotKeyType IActionSrv::s_HIDE_SLOT              = "hide";
+
 IActionSrv::IActionSrv() :
-        m_activeStateValue(true),
-        m_isActive(false),
-        m_isExecutable(true),
-        m_confirmAction(false)
-{}
+    m_activeStateValue(true),
+    m_isActive(false),
+    m_isExecutable(true),
+    m_isVisible(true),
+    m_confirmAction(false)
+{
+    newSlot(s_SET_IS_ACTIVE_SLOT, &IActionSrv::setIsActive, this);
+    newSlot(s_ACTIVATE_SLOT, &IActionSrv::activate, this);
+    newSlot(s_DEACTIVATE_SLOT, &IActionSrv::deactivate, this);
+    newSlot(s_SET_IS_EXECUTABLE_SLOT, &IActionSrv::setIsExecutable, this);
+    newSlot(s_SET_EXECUTABLE_SLOT, &IActionSrv::setExecutable, this);
+    newSlot(s_SET_INEXECUTABLE_SLOT, &IActionSrv::setInexecutable, this);
+    newSlot(s_SET_VISIBLE_SLOT, &IActionSrv::setVisible, this);
+    newSlot(s_SHOW_SLOT, &IActionSrv::show, this);
+    newSlot(s_HIDE_SLOT,&IActionSrv::hide, this);
+}
 
 //-----------------------------------------------------------------------------
 
 IActionSrv::~IActionSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -35,15 +62,22 @@ void IActionSrv::initialize()
 {
     m_registrar = ::fwGui::registrar::ActionRegistrar::New(this->getID());
 
-    OSLM_ASSERT("Depreciated tag <name> in "<< this->getID() << " configuration.", ! m_configuration->hasAttribute("name"));
-    OSLM_ASSERT("Depreciated tag <shortcut> in "<< this->getID() << " configuration.", ! m_configuration->hasAttribute("shortcut"));
-    OSLM_ASSERT("Depreciated tag <enable> in "<< this->getID() << " configuration.", ! m_configuration->hasAttribute("enable"));
-    OSLM_ASSERT("Depreciated tag <specialAction> in "<< this->getID() << " configuration.", ! m_configuration->hasAttribute("specialAction"));
-    OSLM_ASSERT("Depreciated tag <style> in "<< this->getID() << " configuration.", ! m_configuration->hasAttribute("style"));
-    OSLM_ASSERT("Depreciated tag <state> in "<< this->getID() << " configuration.", ! m_configuration->hasAttribute("state"));
-
-    ::fwRuntime::ConfigurationElementContainer::Iterator iter ;
-    for( iter = m_configuration->begin() ; iter != m_configuration->end() ; ++iter )
+    OSLM_ASSERT("Depreciated tag <name> in "<< this->getID() << " configuration.", !m_configuration->hasAttribute(
+                    "name"));
+    OSLM_ASSERT("Depreciated tag <shortcut> in "<< this->getID() << " configuration.",
+                !m_configuration->hasAttribute("shortcut"));
+    OSLM_ASSERT("Depreciated tag <enable> in "<< this->getID() << " configuration.",
+                !m_configuration->hasAttribute("enable"));
+    OSLM_ASSERT(
+        "Depreciated tag <specialAction> in "<< this->getID() << " configuration.",
+        !m_configuration->hasAttribute("specialAction"));
+    OSLM_ASSERT("Depreciated tag <style> in "<< this->getID() << " configuration.",
+                !m_configuration->hasAttribute("style"));
+    OSLM_ASSERT("Depreciated tag <state> in "<< this->getID() << " configuration.",
+                !m_configuration->hasAttribute("state"));
+
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter;
+    for( iter = m_configuration->begin(); iter != m_configuration->end(); ++iter )
     {
         if( (*iter)->getName() == "state" )
         {
@@ -52,22 +86,33 @@ void IActionSrv::initialize()
             if( stateCfg->hasAttribute("inverse") )
             {
                 std::string invertState = stateCfg->getExistingAttributeValue("inverse");
-                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'", (invertState == "true") || (invertState == "false"));
-                m_activeStateValue = !(invertState == "true") ;
+                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'",
+                           (invertState == "true") || (invertState == "false"));
+                m_activeStateValue = !(invertState == "true");
             }
 
             if( stateCfg->hasAttribute("active") )
             {
                 std::string isActive = stateCfg->getExistingAttributeValue("active");
-                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'", (isActive == "true") || (isActive == "false"));
-                m_isActive = (isActive == "true") ;
+                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'",
+                           (isActive == "true") || (isActive == "false"));
+                m_isActive = (isActive == "true");
             }
 
             if( stateCfg->hasAttribute("executable") )
             {
                 std::string isExecutable = stateCfg->getExistingAttributeValue("executable");
-                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'", (isExecutable == "true") || (isExecutable == "false"));
-                m_isExecutable = (isExecutable == "true") ;
+                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'",
+                           (isExecutable == "true") || (isExecutable == "false"));
+                m_isExecutable = (isExecutable == "true");
+            }
+
+            if( stateCfg->hasAttribute("visible") )
+            {
+                std::string isVisible = stateCfg->getExistingAttributeValue("visible");
+                SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'",
+                           (isVisible == "true") || (isVisible == "false"));
+                m_isVisible = (isVisible == "true");
             }
         }
 
@@ -77,8 +122,9 @@ void IActionSrv::initialize()
 
             SLM_ASSERT("Missing attribute 'value'", cfg->hasAttribute("value"));
             std::string confirm = cfg->getExistingAttributeValue("value");
-            SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'", (confirm == "true") || (confirm == "false"));
-            m_confirmAction = (confirm == "true") ;
+            SLM_ASSERT("Wrong attribute value : must be 'true' or 'false'",
+                       (confirm == "true") || (confirm == "false"));
+            m_confirmAction = (confirm == "true");
 
             if( cfg->hasAttribute("message") )
             {
@@ -119,6 +165,20 @@ void IActionSrv::setIsActive(bool isActive)
 
 //-----------------------------------------------------------------------------
 
+void IActionSrv::activate()
+{
+    this->setIsActive(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void IActionSrv::deactivate()
+{
+    this->setIsActive(false);
+}
+
+//-----------------------------------------------------------------------------
+
 bool IActionSrv::getIsActive()
 {
     return m_isActive;
@@ -134,6 +194,20 @@ void IActionSrv::setIsExecutable(bool isExecutable)
 
 //-----------------------------------------------------------------------------
 
+void IActionSrv::setExecutable()
+{
+    this->setIsExecutable(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void IActionSrv::setInexecutable()
+{
+    this->setIsExecutable(false);
+}
+
+//-----------------------------------------------------------------------------
+
 bool IActionSrv::getIsExecutable()
 {
     return m_isExecutable;
@@ -141,6 +215,35 @@ bool IActionSrv::getIsExecutable()
 
 //-----------------------------------------------------------------------------
 
+void IActionSrv::setVisible(bool isVisible)
+{
+    m_isVisible = isVisible;
+    this->m_registrar->actionServiceSetVisible(isVisible);
+}
+
+//-----------------------------------------------------------------------------
+
+void IActionSrv::show()
+{
+    this->setVisible(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void IActionSrv::hide()
+{
+    this->setVisible(false);
+}
+
+//-----------------------------------------------------------------------------
+
+bool IActionSrv::isVisible()
+{
+    return m_isVisible;
+}
+
+//-----------------------------------------------------------------------------
+
 bool IActionSrv::confirmAction()
 {
     bool actionIsConfirmed = true;
diff --git a/SrcLib/core/fwGui/src/fwGui/IApplication.cpp b/SrcLib/core/fwGui/src/fwGui/IApplication.cpp
index 81d8b6d..29f6c60 100644
--- a/SrcLib/core/fwGui/src/fwGui/IApplication.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IApplication.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,17 +10,19 @@
 namespace fwGui
 {
 
-const IApplication::FactoryRegistryKeyType IApplication::REGISTRY_KEY =  "::fwGui::Application";
+const IApplication::FactoryRegistryKeyType IApplication::REGISTRY_KEY = "::fwGui::Application";
 
 //-----------------------------------------------------------------------------
 
-IApplication::IApplication()
-{}
+IApplication::IApplication() : m_confirm(false)
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IApplication::~IApplication()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/ICursor.cpp b/SrcLib/core/fwGui/src/fwGui/ICursor.cpp
index 80749e8..55cf343 100644
--- a/SrcLib/core/fwGui/src/fwGui/ICursor.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/ICursor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,17 +10,19 @@
 namespace fwGui
 {
 
-const ICursor::FactoryRegistryKeyType ICursor::REGISTRY_KEY =  "::fwGui::Cursor";
+const ICursor::FactoryRegistryKeyType ICursor::REGISTRY_KEY = "::fwGui::Cursor";
 
 //-----------------------------------------------------------------------------
 
 ICursor::ICursor()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ICursor::~ICursor()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp
index ab81c25..fdfdd42 100644
--- a/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IFrameSrv.cpp
@@ -1,48 +1,74 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwGui/IFrameSrv.hpp"
+#include "fwGui/Application.hpp"
+#include "fwGui/registry/worker.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
+
 #include <boost/foreach.hpp>
 #include <boost/bind.hpp>
 #include <boost/lambda/lambda.hpp>
 
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
 #include <fwCore/base.hpp>
-#include <fwTools/fwID.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
 
-#include "fwGui/Application.hpp"
-#include "fwGui/IFrameSrv.hpp"
+#include <fwTools/fwID.hpp>
 
 namespace fwGui
 {
 
-const std::string IFrameSrv::CLOSE_POLICY_EXIT   = "exit";
-const std::string IFrameSrv::CLOSE_POLICY_NOTIFY = "notify";
+const std::string IFrameSrv::CLOSE_POLICY_EXIT    = "exit";
+const std::string IFrameSrv::CLOSE_POLICY_NOTIFY  = "notify";
+const std::string IFrameSrv::CLOSE_POLICY_MESSAGE = "message";
 
-::fwGui::container::fwContainer::wptr  IFrameSrv::m_progressWidget = ::boost::weak_ptr< ::fwGui::container::fwContainer >();
+const ::fwCom::Slots::SlotKeyType IFrameSrv::s_SET_VISIBLE_SLOT = "setVisible";
+const ::fwCom::Slots::SlotKeyType IFrameSrv::s_SHOW_SLOT        = "show";
+const ::fwCom::Slots::SlotKeyType IFrameSrv::s_HIDE_SLOT        = "hide";
+
+const ::fwCom::Signals::SignalKeyType IFrameSrv::s_CLOSED_SIG = "closed";
+
+::fwGui::container::fwContainer::wptr IFrameSrv::m_progressWidget =
+    std::weak_ptr< ::fwGui::container::fwContainer >();
 
 IFrameSrv::IFrameSrv() :
-        m_hasMenuBar(false),
-        m_hasToolBar(false),
-        m_closePolicy("exit")
-{}
+    m_hasMenuBar(false),
+    m_hasToolBar(false),
+    m_closePolicy("exit")
+{
+    m_sigClosed = newSignal< ClosedSignalType >(s_CLOSED_SIG);
+
+    newSlot(s_SET_VISIBLE_SLOT, &IFrameSrv::setVisible, this);
+    newSlot(s_SHOW_SLOT, &IFrameSrv::show, this);
+    newSlot(s_HIDE_SLOT,&IFrameSrv::hide, this);
+}
 
 //-----------------------------------------------------------------------------
 
 IFrameSrv::~IFrameSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IFrameSrv::initialize()
 {
     // find gui configuration
-    std::vector < ConfigurationType > vectGui = m_configuration->find("gui");
+    std::vector < ConfigurationType > vectGui    = m_configuration->find("gui");
     std::vector < ConfigurationType > vectWindow = m_configuration->find("window");
 
     if(!vectGui.empty())
@@ -77,12 +103,14 @@ void IFrameSrv::initialize()
     if(!vectWindow.empty())
     {
         ConfigurationType window = vectWindow.at(0);
-        std::string onclose = window->getAttributeValue("onclose");
+        std::string onclose      = window->getAttributeValue("onclose");
         if ( !onclose.empty() )
         {
             m_closePolicy = onclose;
         }
-        SLM_ASSERT("Invalid onclose value : " << m_closePolicy << ". Should be 'exit' or 'notify'", m_closePolicy == CLOSE_POLICY_NOTIFY || m_closePolicy == CLOSE_POLICY_EXIT);
+        SLM_ASSERT("Invalid onclose value : " << m_closePolicy << ". Should be 'exit', 'notify' or 'message'",
+                   m_closePolicy == CLOSE_POLICY_NOTIFY || m_closePolicy == CLOSE_POLICY_EXIT
+                   || m_closePolicy == CLOSE_POLICY_MESSAGE);
     }
 
     m_viewRegistrar = ::fwGui::registrar::ViewRegistrar::New(this->getID());
@@ -100,7 +128,12 @@ void IFrameSrv::initialize()
 void IFrameSrv::create()
 {
     SLM_ASSERT("FrameLayoutManager must be initialized.",m_frameLayoutManager);
-    m_frameLayoutManager->createFrame();
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_frameLayoutManager->createFrame();
+        })).wait();
+
     ::fwGui::container::fwContainer::sptr frame = m_frameLayoutManager->getFrame();
     if ( m_progressWidget.expired() )
     {
@@ -114,26 +147,40 @@ void IFrameSrv::create()
 
     ::fwGui::layoutManager::IFrameLayoutManager::CloseCallback fct;
 
-     if (m_closePolicy == CLOSE_POLICY_EXIT)
+    if (m_closePolicy == CLOSE_POLICY_EXIT)
     {
-         fct = ::boost::bind( &::fwGui::IFrameSrv::onCloseExit, this);
+        fct = std::bind( &::fwGui::IFrameSrv::onCloseExit, this);
     }
     else if (m_closePolicy == CLOSE_POLICY_NOTIFY)
     {
-        fct = ::boost::bind( &::fwGui::IFrameSrv::onCloseNotify, this);
+        fct = std::bind( &::fwGui::IFrameSrv::onCloseNotify, this);
+    }
+    else if(m_closePolicy == CLOSE_POLICY_MESSAGE)
+    {
+        fct = std::bind( &::fwGui::IFrameSrv::onCloseMessage, this);
+        auto app = ::fwGui::Application::New();
+        app->setConfirm(true);
     }
 
     m_frameLayoutManager->setCloseCallback(fct);
 
     if (m_hasMenuBar)
     {
-        m_menuBarBuilder->createMenuBar(frame);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_menuBarBuilder->createMenuBar(frame);
+            })).wait();
+
         m_viewRegistrar->manageMenuBar(m_menuBarBuilder->getMenuBar());
     }
 
     if (m_hasToolBar)
     {
-        m_toolBarBuilder->createToolBar(frame);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_toolBarBuilder->createToolBar(frame);
+            })).wait();
+
         m_viewRegistrar->manageToolBar(m_toolBarBuilder->getToolBar());
     }
 }
@@ -148,19 +195,31 @@ void IFrameSrv::destroy()
     {
         m_viewRegistrar->unmanageToolBar();
         SLM_ASSERT("ToolBarBuilder must be initialized.",m_toolBarBuilder);
-        m_toolBarBuilder->destroyToolBar();
+
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_toolBarBuilder->destroyToolBar();
+            })).wait();
     }
 
     if (m_hasMenuBar)
     {
         m_viewRegistrar->unmanageMenuBar();
         SLM_ASSERT("MenuBarBuilder must be initialized.",m_menuBarBuilder);
-        m_menuBarBuilder->destroyMenuBar();
+
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_menuBarBuilder->destroyMenuBar();
+            })).wait();
     }
 
     m_viewRegistrar->unmanage();
     SLM_ASSERT("FrameLayoutManager must be initialized.",m_frameLayoutManager);
-    m_frameLayoutManager->destroyFrame();
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_frameLayoutManager->destroyFrame();
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -168,9 +227,9 @@ void IFrameSrv::destroy()
 void IFrameSrv::initializeLayoutManager(ConfigurationType frameConfig)
 {
     OSLM_ASSERT("Bad configuration name "<<frameConfig->getName()<< ", must be frame",
-            frameConfig->getName() == "frame");
+                frameConfig->getName() == "frame");
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(
-                                                 ::fwGui::layoutManager::IFrameLayoutManager::REGISTRY_KEY);
+        ::fwGui::layoutManager::IFrameLayoutManager::REGISTRY_KEY);
     m_frameLayoutManager = ::fwGui::layoutManager::IFrameLayoutManager::dynamicCast(guiObj);
     OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::layoutManager::IFrameLayoutManager::REGISTRY_KEY,
                 m_frameLayoutManager);
@@ -186,7 +245,7 @@ void IFrameSrv::initializeMenuBarBuilder(ConfigurationType menuBarConfig)
                 menuBarConfig->getName() == "menuBar");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(::fwGui::builder::IMenuBarBuilder::REGISTRY_KEY);
-    m_menuBarBuilder = ::fwGui::builder::IMenuBarBuilder::dynamicCast(guiObj);
+    m_menuBarBuilder                    = ::fwGui::builder::IMenuBarBuilder::dynamicCast(guiObj);
     OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::builder::IMenuBarBuilder::REGISTRY_KEY,
                 m_menuBarBuilder);
 
@@ -201,7 +260,7 @@ void IFrameSrv::initializeToolBarBuilder(ConfigurationType toolBarConfig)
                 toolBarConfig->getName() == "toolBar");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(::fwGui::builder::IToolBarBuilder::REGISTRY_KEY);
-    m_toolBarBuilder = ::fwGui::builder::IToolBarBuilder::dynamicCast(guiObj);
+    m_toolBarBuilder                    = ::fwGui::builder::IToolBarBuilder::dynamicCast(guiObj);
     OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::builder::IToolBarBuilder::REGISTRY_KEY,
                 m_toolBarBuilder);
 
@@ -221,10 +280,16 @@ void IFrameSrv::onCloseExit()
 void IFrameSrv::onCloseNotify()
 {
     SLM_TRACE_FUNC();
-    ::fwServices::ObjectMsg::sptr objectMsg = ::fwServices::ObjectMsg::New();
-    ::fwData::Object::sptr srvObj = this->getObject();
-    objectMsg->addEvent( "WINDOW_CLOSED" );
-    ::fwServices::IEditionService::notify(this->getSptr(), srvObj, objectMsg);
+    m_sigClosed->asyncEmit();
+}
+
+//-----------------------------------------------------------------------------
+
+void IFrameSrv::onCloseMessage()
+{
+    SLM_TRACE_FUNC();
+    auto app = ::fwGui::Application::New();
+    app->exit(0);
 }
 
 //-----------------------------------------------------------------------------
@@ -236,4 +301,26 @@ void IFrameSrv::onCloseNotify()
 
 //-----------------------------------------------------------------------------
 
+void IFrameSrv::setVisible(bool isVisible)
+{
+    ::fwGui::container::fwContainer::sptr container = m_frameLayoutManager->getFrame();
+    container->setVisible(isVisible);
+}
+
+//-----------------------------------------------------------------------------
+
+void IFrameSrv::show()
+{
+    this->setVisible(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void IFrameSrv::hide()
+{
+    this->setVisible(false);
+}
+
+//-----------------------------------------------------------------------------
+
 }
diff --git a/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp
index efc63b5..e3ab55f 100644
--- a/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IGuiContainerSrv.cpp
@@ -1,29 +1,50 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwGui/IGuiContainerSrv.hpp"
+#include "fwGui/registry/worker.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
 
 #include <fwCore/base.hpp>
+#include <fwServices/macros.hpp>
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
-
-#include "fwGui/IGuiContainerSrv.hpp"
 
 namespace fwGui
 {
 
+const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_SET_ENABLED_SLOT = "setEnabled";
+const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_ENABLE_SLOT      = "enable";
+const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_DISABLE_SLOT     = "disable";
+const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_SET_VISIBLE_SLOT = "setVisible";
+const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_SHOW_SLOT        = "show";
+const ::fwCom::Slots::SlotKeyType IGuiContainerSrv::s_HIDE_SLOT        = "hide";
+
+//-----------------------------------------------------------------------------
+
 IGuiContainerSrv::IGuiContainerSrv()
     : m_viewLayoutManagerIsCreated (false),
       m_hasToolBar(false)
-{}
+{
+    newSlot(s_SET_ENABLED_SLOT, &IGuiContainerSrv::setEnabled, this);
+    newSlot(s_ENABLE_SLOT, &IGuiContainerSrv::enable, this);
+    newSlot(s_DISABLE_SLOT, &IGuiContainerSrv::disable, this);
+    newSlot(s_SET_VISIBLE_SLOT, &IGuiContainerSrv::setVisible, this);
+    newSlot(s_SHOW_SLOT, &IGuiContainerSrv::show, this);
+    newSlot(s_HIDE_SLOT,&IGuiContainerSrv::hide, this);
+}
 
 //-----------------------------------------------------------------------------
 
 IGuiContainerSrv::~IGuiContainerSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -35,7 +56,7 @@ void IGuiContainerSrv::initialize()
     m_viewRegistrar = ::fwGui::registrar::ViewRegistrar::New( this->getID() );
     // find ViewRegistrar configuration
     std::vector < ConfigurationType > vectViewMng = m_configuration->find("registry");
-    if ( ! vectViewMng.empty() )
+    if ( !vectViewMng.empty() )
     {
         m_viewRegistrarConfig = vectViewMng.at(0);
         m_viewRegistrar->initialize(m_viewRegistrarConfig);
@@ -44,13 +65,13 @@ void IGuiContainerSrv::initialize()
     // Create initializeLayoutManager
     // find gui configuration
     std::vector < ConfigurationType > vectGui = m_configuration->find("gui");
-    if( ! vectGui.empty() )
+    if( !vectGui.empty() )
     {
-        SLM_ASSERT("Sorry, no <registry> tag is allowed in <gui> section", vectGui.at(0)->find("registry").empty());
+        SLM_ASSERT("No <registry> tag is allowed in the <gui> section", vectGui.at(0)->find("registry").empty());
 
         // find view LayoutManager configuration
         std::vector < ConfigurationType > vectLayoutMng = vectGui.at(0)->find("layout");
-        if( ! vectLayoutMng.empty() )
+        if( !vectLayoutMng.empty() )
         {
             m_viewLayoutConfig = vectLayoutMng.at(0);
             this->initializeLayoutManager( m_viewLayoutConfig );
@@ -66,6 +87,13 @@ void IGuiContainerSrv::initialize()
 
             m_hasToolBar = true;
         }
+
+        // find slideView configuration
+        std::vector < ConfigurationType > vectSlideCfg = vectGui.at(0)->find("slideView");
+        for (const auto& slideCfg : vectSlideCfg)
+        {
+            this->initializeSlideViewBuilder(slideCfg);
+        }
     }
 }
 
@@ -77,26 +105,52 @@ void IGuiContainerSrv::create()
     ::fwGui::container::fwContainer::sptr parent = m_viewRegistrar->getParent();
     SLM_ASSERT("Parent container is unknown.", parent);
 
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(::fwGui::builder::IContainerBuilder::REGISTRY_KEY);
-    m_containerBuilder = ::fwGui::builder::IContainerBuilder::dynamicCast(guiObj);
-
-    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::builder::IContainerBuilder::REGISTRY_KEY,
-                m_containerBuilder);
-    m_containerBuilder->createContainer(parent);
-
-    ::fwGui::container::fwContainer::sptr container = m_containerBuilder->getContainer();
-
-    if ( m_viewLayoutManagerIsCreated )
-    {
-        if (m_hasToolBar)
+    ::fwGui::registry::worker::get()->postTask< void >([this, &parent]
         {
-            m_toolBarBuilder->createToolBar(parent);
-            m_viewRegistrar->manageToolBar(m_toolBarBuilder->getToolBar());
-        }
-
-        m_viewLayoutManager->createLayout(container);
-        m_viewRegistrar->manage(m_viewLayoutManager->getSubViews());
-    }
+            SLM_ASSERT("ViewRegistrar must be initialized.", m_viewRegistrar);
+
+            ::fwGui::GuiBaseObject::sptr guiObj =
+                ::fwGui::factory::New(::fwGui::builder::IContainerBuilder::REGISTRY_KEY);
+            m_containerBuilder = ::fwGui::builder::IContainerBuilder::dynamicCast(guiObj);
+
+            SLM_ASSERT("ClassFactoryRegistry failed for class "+ ::fwGui::builder::IContainerBuilder::REGISTRY_KEY,
+                       m_containerBuilder);
+            m_containerBuilder->createContainer(parent);
+
+            ::fwGui::container::fwContainer::sptr container = m_containerBuilder->getContainer();
+
+            if ( m_viewLayoutManagerIsCreated )
+            {
+                if (m_hasToolBar)
+                {
+                    ::fwGui::registry::worker::get()->postTask<void>([&]
+                    {
+                        m_toolBarBuilder->createToolBar(parent);
+                    }).wait();
+
+                    m_viewRegistrar->manageToolBar(m_toolBarBuilder->getToolBar());
+                }
+
+                ::fwGui::registry::worker::get()->postTask<void>([&]
+                {
+                    m_viewLayoutManager->createLayout(container);
+                }).wait();
+
+                std::vector< ::fwGui::container::fwContainer::sptr > views = m_viewLayoutManager->getSubViews();
+
+                for (const auto& slideBuilder : m_slideViewBuilders)
+                {
+                    SLM_ASSERT("Slide builder is not instantiated", slideBuilder);
+                    ::fwGui::registry::worker::get()->postTask<void>([&]
+                    {
+                        slideBuilder->createContainer(container);
+                    }).wait();
+                    views.push_back(slideBuilder->getContainer());
+                }
+
+                m_viewRegistrar->manage(views);
+            }
+        }).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -111,12 +165,29 @@ void IGuiContainerSrv::destroy()
         {
             m_viewRegistrar->unmanageToolBar();
             SLM_ASSERT("ToolBarBuilder must be initialized.", m_toolBarBuilder);
-            m_toolBarBuilder->destroyToolBar();
+
+            ::fwGui::registry::worker::get()->postTask<void>([&]
+                {
+                    m_toolBarBuilder->destroyToolBar();
+                }).wait();
         }
 
         m_viewRegistrar->unmanage();
         SLM_ASSERT("ViewLayoutManager must be initialized.", m_viewLayoutManager);
-        m_viewLayoutManager->destroyLayout();
+
+        ::fwGui::registry::worker::get()->postTask<void>([&]
+            {
+                m_viewLayoutManager->destroyLayout();
+            }).wait();
+    }
+
+    for (const auto& slideBuilder : m_slideViewBuilders)
+    {
+        SLM_ASSERT("Slide builder is not instantiated", slideBuilder);
+        ::fwGui::registry::worker::get()->postTask<void>([&]
+            {
+                slideBuilder->destroyContainer();
+            }).wait();
     }
 
     m_containerBuilder->destroyContainer();
@@ -126,14 +197,14 @@ void IGuiContainerSrv::destroy()
 
 void IGuiContainerSrv::initializeLayoutManager(ConfigurationType layoutConfig)
 {
-    OSLM_ASSERT("Bad configuration name "<<layoutConfig->getName()<< ", must be layout",
-            layoutConfig->getName() == "layout");
+    SLM_ASSERT("Bad configuration name "+layoutConfig->getName()+ ", must be layout",
+               layoutConfig->getName() == "layout");
     SLM_ASSERT("<layout> tag must have type attribute", layoutConfig->hasAttribute("type"));
     const std::string layoutManagerClassName = layoutConfig->getAttributeValue("type");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(layoutManagerClassName);
-    m_viewLayoutManager = ::fwGui::layoutManager::IViewLayoutManager::dynamicCast(guiObj);
-    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< layoutManagerClassName, m_viewLayoutManager);
+    m_viewLayoutManager                 = ::fwGui::layoutManager::IViewLayoutManager::dynamicCast(guiObj);
+    SLM_ASSERT("ClassFactoryRegistry failed for class "+ layoutManagerClassName, m_viewLayoutManager);
 
     m_viewLayoutManager->initialize(layoutConfig);
 }
@@ -142,19 +213,38 @@ void IGuiContainerSrv::initializeLayoutManager(ConfigurationType layoutConfig)
 
 void IGuiContainerSrv::initializeToolBarBuilder(ConfigurationType toolBarConfig)
 {
-    OSLM_ASSERT("Bad configuration name "<<toolBarConfig->getName()<< ", must be toolBar",
-                toolBarConfig->getName() == "toolBar");
+    SLM_ASSERT("Bad configuration name "+toolBarConfig->getName()+ ", must be toolBar",
+               toolBarConfig->getName() == "toolBar");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(::fwGui::builder::IToolBarBuilder::REGISTRY_KEY);
-    m_toolBarBuilder = ::fwGui::builder::IToolBarBuilder::dynamicCast(guiObj);
-    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::builder::IToolBarBuilder::REGISTRY_KEY,
-                m_toolBarBuilder);
+    m_toolBarBuilder                    = ::fwGui::builder::IToolBarBuilder::dynamicCast(guiObj);
+    SLM_ASSERT("ClassFactoryRegistry failed for class "+ ::fwGui::builder::IToolBarBuilder::REGISTRY_KEY,
+               m_toolBarBuilder);
 
     m_toolBarBuilder->initialize(toolBarConfig);
 }
 
 //-----------------------------------------------------------------------------
 
+void IGuiContainerSrv::initializeSlideViewBuilder(ConfigurationType slideViewConfig)
+{
+    SLM_ASSERT("Bad configuration name " + slideViewConfig->getName() + ", must be layout",
+               slideViewConfig->getName() == "slideView");
+
+    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(
+        ::fwGui::builder::ISlideViewBuilder::REGISTRY_KEY);
+    ::fwGui::builder::ISlideViewBuilder::sptr slideViewBuildfer = ::fwGui::builder::ISlideViewBuilder::dynamicCast(
+        guiObj);
+    SLM_ASSERT("ClassFactoryRegistry failed for class "+ ::fwGui::builder::ISlideViewBuilder::REGISTRY_KEY,
+               slideViewBuildfer);
+
+    slideViewBuildfer->initialize(slideViewConfig);
+
+    m_slideViewBuilders.push_back(slideViewBuildfer);
+}
+
+//-----------------------------------------------------------------------------
+
 ::fwGui::container::fwContainer::sptr IGuiContainerSrv::getContainer()
 {
     return m_containerBuilder->getContainer();
@@ -164,10 +254,57 @@ void IGuiContainerSrv::initializeToolBarBuilder(ConfigurationType toolBarConfig)
 
 void IGuiContainerSrv::setParent(std::string wid)
 {
-    m_viewRegistrar->setParent(wid);
-    ::fwGui::container::fwContainer::sptr parent = m_viewRegistrar->getParent();
-    SLM_ASSERT("Parent container is unknown.", parent);
-    m_containerBuilder->setParent(parent);
+    ::fwGui::registry::worker::get()->postTask< void >(::boost::function< void() >([this, &wid]
+        {
+            m_viewRegistrar->setParent(wid);
+            ::fwGui::container::fwContainer::sptr parent = m_viewRegistrar->getParent();
+            SLM_ASSERT("Parent container is unknown.", parent);
+            m_containerBuilder->setParent(parent);
+        } ));
+}
+
+//-----------------------------------------------------------------------------
+
+void IGuiContainerSrv::setEnabled(bool isEnabled)
+{
+    ::fwGui::container::fwContainer::sptr container = m_viewRegistrar->getParent();
+    container->setEnabled(isEnabled);
+}
+
+//-----------------------------------------------------------------------------
+
+void IGuiContainerSrv::enable()
+{
+    this->setEnabled(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void IGuiContainerSrv::disable()
+{
+    this->setEnabled(false);
+}
+
+//-----------------------------------------------------------------------------
+
+void IGuiContainerSrv::setVisible(bool isVisible)
+{
+    ::fwGui::container::fwContainer::sptr container = m_viewRegistrar->getParent();
+    container->setVisible(isVisible);
+}
+
+//-----------------------------------------------------------------------------
+
+void IGuiContainerSrv::show()
+{
+    this->setVisible(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void IGuiContainerSrv::hide()
+{
+    this->setVisible(false);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/IMenuBarSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IMenuBarSrv.cpp
index 47ef7e1..6462e9c 100644
--- a/SrcLib/core/fwGui/src/fwGui/IMenuBarSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IMenuBarSrv.cpp
@@ -1,59 +1,62 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwGui/IMenuBarSrv.hpp"
+#include "fwGui/registry/worker.hpp"
 
 #include <fwCore/base.hpp>
+#include <fwServices/macros.hpp>
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
-
-#include "fwGui/IMenuBarSrv.hpp"
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
 
 namespace fwGui
 {
 
 IMenuBarSrv::IMenuBarSrv() : m_hideMenus(false)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IMenuBarSrv::~IMenuBarSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IMenuBarSrv::initialize()
 {
 
-        m_registrar = ::fwGui::registrar::MenuBarRegistrar::New(this->getID());
-        // find ViewRegistryManager configuration
-        std::vector < ConfigurationType > vectRegistrar = m_configuration->find("registry");
-        SLM_ASSERT("Registry section is mandatory.", !vectRegistrar.empty() );
+    m_registrar = ::fwGui::registrar::MenuBarRegistrar::New(this->getID());
+    // find ViewRegistryManager configuration
+    std::vector < ConfigurationType > vectRegistrar = m_configuration->find("registry");
+    SLM_ASSERT("Registry section is mandatory.", !vectRegistrar.empty() );
 
-        if(!vectRegistrar.empty())
-        {
-            m_registrarConfig = vectRegistrar.at(0);
-            m_registrar->initialize(m_registrarConfig);
-        }
+    if(!vectRegistrar.empty())
+    {
+        m_registrarConfig = vectRegistrar.at(0);
+        m_registrar->initialize(m_registrarConfig);
+    }
 
-        // find gui configuration
-        std::vector < ConfigurationType > vectGui = m_configuration->find("gui");
-        SLM_ASSERT("Gui section is mandatory.", !vectGui.empty() );
+    // find gui configuration
+    std::vector < ConfigurationType > vectGui = m_configuration->find("gui");
+    SLM_ASSERT("Gui section is mandatory.", !vectGui.empty() );
 
-        if(!vectGui.empty())
+    if(!vectGui.empty())
+    {
+        // find LayoutManager configuration
+        std::vector < ConfigurationType > vectLayoutMng = vectGui.at(0)->find("layout");
+        SLM_ASSERT("layout section is mandatory.", !vectLayoutMng.empty() );
+        if(!vectLayoutMng.empty())
         {
-            // find LayoutManager configuration
-            std::vector < ConfigurationType > vectLayoutMng = vectGui.at(0)->find("layout");
-            SLM_ASSERT("layout section is mandatory.", !vectLayoutMng.empty() );
-            if(!vectLayoutMng.empty())
-            {
-                m_layoutConfig = vectLayoutMng.at(0);
-                this->initializeLayoutManager(m_layoutConfig);
-            }
+            m_layoutConfig = vectLayoutMng.at(0);
+            this->initializeLayoutManager(m_layoutConfig);
         }
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -62,7 +65,11 @@ void IMenuBarSrv::create()
 {
     ::fwGui::container::fwMenuBar::sptr menuBar = m_registrar->getParent();
     SLM_ASSERT("Parent menuBar is unknown.", menuBar);
-    m_layoutManager->createLayout(menuBar);
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >( [&]
+        {
+            m_layoutManager->createLayout(menuBar);
+        }) ).wait();
 
     m_registrar->manage(m_layoutManager->getMenus());
 }
@@ -72,7 +79,11 @@ void IMenuBarSrv::create()
 void IMenuBarSrv::destroy()
 {
     m_registrar->unmanage();
-    m_layoutManager->destroyLayout();
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->destroyLayout();
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -83,11 +94,17 @@ void IMenuBarSrv::menuServiceStopping(std::string menuSrvSID)
 
     if (m_hideMenus)
     {
-        m_layoutManager->menuIsVisible(menu, false);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >( [&]
+            {
+                m_layoutManager->menuIsVisible(menu, false);
+            }) ).wait();
     }
     else
     {
-        m_layoutManager->menuIsEnabled(menu, false);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >(
+                                                             [&] {
+                m_layoutManager->menuIsEnabled(menu, false);
+            })).wait();
     }
 }
 
@@ -99,11 +116,17 @@ void IMenuBarSrv::menuServiceStarting(std::string menuSrvSID)
 
     if (m_hideMenus)
     {
-        m_layoutManager->menuIsVisible(menu, true);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuIsVisible(menu, true);
+            })).wait();
     }
     else
     {
-        m_layoutManager->menuIsEnabled(menu, true);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuIsEnabled(menu, true);
+            }) ).wait();
     }
 }
 
@@ -112,12 +135,13 @@ void IMenuBarSrv::menuServiceStarting(std::string menuSrvSID)
 void IMenuBarSrv::initializeLayoutManager(ConfigurationType layoutConfig)
 {
     OSLM_ASSERT("Bad configuration name "<<layoutConfig->getName()<< ", must be layout",
-            layoutConfig->getName() == "layout");
+                layoutConfig->getName() == "layout");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(
-                                                 ::fwGui::layoutManager::IMenuBarLayoutManager::REGISTRY_KEY);
+        ::fwGui::layoutManager::IMenuBarLayoutManager::REGISTRY_KEY);
     m_layoutManager = ::fwGui::layoutManager::IMenuBarLayoutManager::dynamicCast(guiObj);
-    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::layoutManager::IMenuBarLayoutManager::REGISTRY_KEY, m_layoutManager);
+    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::layoutManager::IMenuBarLayoutManager::REGISTRY_KEY,
+                m_layoutManager);
 
     m_layoutManager->initialize(layoutConfig);
 }
diff --git a/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp
index 15a3d9c..1d377ec 100644
--- a/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IMenuSrv.cpp
@@ -1,29 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwGui/IActionSrv.hpp"
+#include "fwGui/IMenuItemCallback.hpp"
+#include "fwGui/IMenuSrv.hpp"
+#include "fwGui/registry/worker.hpp"
 
 #include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
+
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
 
-#include "fwGui/IMenuItemCallback.hpp"
-#include "fwGui/IActionSrv.hpp"
-#include "fwGui/IMenuSrv.hpp"
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
 
 namespace fwGui
 {
 
 IMenuSrv::IMenuSrv() : m_hideActions (false)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IMenuSrv::~IMenuSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -52,6 +59,14 @@ void IMenuSrv::initialize()
         {
             m_layoutConfig = vectLayoutMng.at(0);
             this->initializeLayoutManager(m_layoutConfig);
+
+            if (m_layoutConfig->hasAttribute("hideAction"))
+            {
+                std::string hideActions = m_layoutConfig->getAttributeValue("hideActions");
+                SLM_ASSERT("'hideActions' attribute value must be 'true' or 'false'",
+                           hideActions == "true" || hideActions == "false");
+                m_hideActions = (hideActions == "true");
+            }
         }
     }
 }
@@ -65,7 +80,11 @@ void IMenuSrv::create()
 
     SLM_ASSERT("Parent menu is unknown.", menu);
     m_layoutManager->setCallbacks(callbacks);
-    m_layoutManager->createLayout(menu);
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->createLayout(menu);
+        })).wait();
 
     m_registrar->manage(m_layoutManager->getMenuItems());
     m_registrar->manage(m_layoutManager->getMenus());
@@ -76,22 +95,32 @@ void IMenuSrv::create()
 void IMenuSrv::destroy()
 {
     m_registrar->unmanage();
-    m_layoutManager->destroyLayout();
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->destroyLayout();
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void IMenuSrv::actionServiceStopping(std::string actionSrvSID)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
     if (m_hideActions)
     {
-        m_layoutManager->menuItemSetVisible(menuItem, false);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetVisible(menuItem, false);
+            })).wait();
     }
     else
     {
-        m_layoutManager->menuItemSetEnabled(menuItem, false);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetEnabled(menuItem, false);
+            })).wait();
     }
 }
 
@@ -99,18 +128,27 @@ void IMenuSrv::actionServiceStopping(std::string actionSrvSID)
 
 void IMenuSrv::actionServiceStarting(std::string actionSrvSID)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
     if (m_hideActions)
     {
-        m_layoutManager->menuItemSetVisible(menuItem, true);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetVisible(menuItem, true);
+            })).wait();
     }
     else
     {
-        ::fwServices::IService::sptr service = ::fwServices::get( actionSrvSID ) ;
-        ::fwGui::IActionSrv::sptr actionSrv = ::fwGui::IActionSrv::dynamicCast(service);
-        m_layoutManager->menuItemSetEnabled(menuItem, actionSrv->getIsExecutable());
-        m_layoutManager->menuItemSetChecked(menuItem, actionSrv->getIsActive());
+        ::fwServices::IService::sptr service = ::fwServices::get( actionSrvSID );
+        ::fwGui::IActionSrv::sptr actionSrv  = ::fwGui::IActionSrv::dynamicCast(service);
+
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetEnabled(menuItem, actionSrv->getIsExecutable());
+                m_layoutManager->menuItemSetChecked(menuItem, actionSrv->getIsActive());
+                m_layoutManager->menuItemSetVisible(menuItem, actionSrv->isVisible());
+            })).wait();
     }
 }
 
@@ -118,20 +156,39 @@ void IMenuSrv::actionServiceStarting(std::string actionSrvSID)
 
 void IMenuSrv::actionServiceSetActive(std::string actionSrvSID, bool isActive)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
-
-    m_layoutManager->menuItemSetChecked(menuItem, isActive);
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >( [&]
+        {
+            m_layoutManager->menuItemSetChecked(menuItem, isActive);
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void IMenuSrv::actionServiceSetExecutable(std::string actionSrvSID, bool isExecutable)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->menuItemSetEnabled(menuItem, isExecutable);
+        })).wait();
+}
+
+//-----------------------------------------------------------------------------
 
-    m_layoutManager->menuItemSetEnabled(menuItem, isExecutable);
+void IMenuSrv::actionServiceSetVisible(std::string actionSrvSID, bool isVisible)
+{
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->menuItemSetVisible(menuItem, isVisible);
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -139,10 +196,10 @@ void IMenuSrv::actionServiceSetExecutable(std::string actionSrvSID, bool isExecu
 void IMenuSrv::initializeLayoutManager(ConfigurationType layoutConfig)
 {
     OSLM_ASSERT("Bad configuration name "<<layoutConfig->getName()<< ", must be layout",
-            layoutConfig->getName() == "layout");
+                layoutConfig->getName() == "layout");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(
-                                                 ::fwGui::layoutManager::IMenuLayoutManager::REGISTRY_KEY);
+        ::fwGui::layoutManager::IMenuLayoutManager::REGISTRY_KEY);
     m_layoutManager = ::fwGui::layoutManager::IMenuLayoutManager::dynamicCast(guiObj);
     OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::layoutManager::IMenuLayoutManager::REGISTRY_KEY,
                 m_layoutManager);
diff --git a/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp b/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp
index f1f0f62..5b78b1c 100644
--- a/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/IToolBarSrv.cpp
@@ -1,29 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwGui/IActionSrv.hpp"
+#include "fwGui/IMenuItemCallback.hpp"
+#include "fwGui/IToolBarSrv.hpp"
+#include "fwGui/registry/worker.hpp"
 
 #include <fwCore/base.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
 
-#include "fwGui/IMenuItemCallback.hpp"
-#include "fwGui/IToolBarSrv.hpp"
-#include "fwGui/IActionSrv.hpp"
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
 
 namespace fwGui
 {
 
 IToolBarSrv::IToolBarSrv() : m_hideActions (false)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IToolBarSrv::~IToolBarSrv()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -54,6 +59,14 @@ void IToolBarSrv::initialize()
         {
             m_layoutConfig = vectLayoutMng.at(0);
             this->initializeLayoutManager(m_layoutConfig);
+
+            if (m_layoutConfig->hasAttribute("hideAction"))
+            {
+                std::string hideActions = m_layoutConfig->getAttributeValue("hideActions");
+                SLM_ASSERT("'hideActions' attribute value must be 'true' or 'false'",
+                           hideActions == "true" || hideActions == "false");
+                m_hideActions = (hideActions == "true");
+            }
         }
     }
 }
@@ -67,7 +80,11 @@ void IToolBarSrv::create()
 
     SLM_ASSERT("Parent toolBar is unknown.", toolBar);
     m_layoutManager->setCallbacks(callbacks);
-    m_layoutManager->createLayout(toolBar);
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->createLayout(toolBar);
+        })).wait();
 
     m_registrar->manage(m_layoutManager->getMenuItems());
     m_registrar->manage(m_layoutManager->getMenus());
@@ -79,22 +96,33 @@ void IToolBarSrv::create()
 void IToolBarSrv::destroy()
 {
     m_registrar->unmanage();
-    m_layoutManager->destroyLayout();
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->destroyLayout();
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void IToolBarSrv::actionServiceStopping(std::string actionSrvSID)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
     if (m_hideActions)
     {
-        m_layoutManager->menuItemSetVisible(menuItem, false);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetVisible(menuItem, false);
+            })).wait();
     }
     else
     {
-        m_layoutManager->menuItemSetEnabled(menuItem, false);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetEnabled(menuItem, false);
+            })).wait();
     }
 }
 
@@ -102,17 +130,27 @@ void IToolBarSrv::actionServiceStopping(std::string actionSrvSID)
 
 void IToolBarSrv::actionServiceStarting(std::string actionSrvSID)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
     if (m_hideActions)
     {
-        m_layoutManager->menuItemSetVisible(menuItem, true);
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetVisible(menuItem, true);
+            })).wait();
     }
     else
     {
-        ::fwServices::IService::sptr service = ::fwServices::get( actionSrvSID ) ;
-        ::fwGui::IActionSrv::sptr actionSrv = ::fwGui::IActionSrv::dynamicCast(service);
-        m_layoutManager->menuItemSetEnabled(menuItem, actionSrv->getIsExecutable());
+        ::fwServices::IService::sptr service = ::fwServices::get( actionSrvSID );
+        ::fwGui::IActionSrv::sptr actionSrv  = ::fwGui::IActionSrv::dynamicCast(service);
+
+        ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_layoutManager->menuItemSetEnabled(menuItem, actionSrv->getIsExecutable());
+                m_layoutManager->menuItemSetChecked(menuItem, actionSrv->getIsActive());
+                m_layoutManager->menuItemSetVisible(menuItem, actionSrv->isVisible());
+            })).wait();
     }
 }
 
@@ -120,20 +158,39 @@ void IToolBarSrv::actionServiceStarting(std::string actionSrvSID)
 
 void IToolBarSrv::actionServiceSetActive(std::string actionSrvSID, bool isActive)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
-
-    m_layoutManager->menuItemSetChecked(menuItem, isActive);
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->menuItemSetChecked(menuItem, isActive);
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void IToolBarSrv::actionServiceSetExecutable(std::string actionSrvSID, bool isExecutable)
 {
-    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID, m_layoutManager->getMenuItems());
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->menuItemSetEnabled(menuItem, isExecutable);
+        })).wait();
+}
+
+//-----------------------------------------------------------------------------
 
-    m_layoutManager->menuItemSetEnabled(menuItem, isExecutable);
+void IToolBarSrv::actionServiceSetVisible(std::string actionSrvSID, bool isVisible)
+{
+    ::fwGui::container::fwMenuItem::sptr menuItem = m_registrar->getFwMenuItem(actionSrvSID,
+                                                                               m_layoutManager->getMenuItems());
 
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+        {
+            m_layoutManager->menuItemSetVisible(menuItem, isVisible);
+        })).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -141,12 +198,13 @@ void IToolBarSrv::actionServiceSetExecutable(std::string actionSrvSID, bool isEx
 void IToolBarSrv::initializeLayoutManager(ConfigurationType layoutConfig)
 {
     OSLM_ASSERT("Bad configuration name "<<layoutConfig->getName()<< ", must be layout",
-            layoutConfig->getName() == "layout");
+                layoutConfig->getName() == "layout");
 
     ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(
-                                                 ::fwGui::layoutManager::IToolBarLayoutManager::REGISTRY_KEY);
+        ::fwGui::layoutManager::IToolBarLayoutManager::REGISTRY_KEY);
     m_layoutManager = ::fwGui::layoutManager::IToolBarLayoutManager::dynamicCast(guiObj);
-    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::layoutManager::IToolBarLayoutManager::REGISTRY_KEY, m_layoutManager);
+    OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::layoutManager::IToolBarLayoutManager::REGISTRY_KEY,
+                m_layoutManager);
 
     m_layoutManager->initialize(layoutConfig);
 }
diff --git a/SrcLib/core/fwGui/src/fwGui/backend.cpp b/SrcLib/core/fwGui/src/fwGui/backend.cpp
new file mode 100644
index 0000000..7e99819
--- /dev/null
+++ b/SrcLib/core/fwGui/src/fwGui/backend.cpp
@@ -0,0 +1,23 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#include "fwGui/registry/detail.hpp"
+#include "fwGui/IApplication.hpp"
+#include "fwGui/backend.hpp"
+
+namespace fwGui
+{
+
+bool isBackendLoaded()
+{
+    return bool(::fwGui::registry::get()->getFactory(fwGui::IApplication::REGISTRY_KEY));
+}
+
+} // namespace fwGui
+
+
+
diff --git a/SrcLib/core/fwGui/src/fwGui/builder/IContainerBuilder.cpp b/SrcLib/core/fwGui/src/fwGui/builder/IContainerBuilder.cpp
index 478053e..b25f8b9 100644
--- a/SrcLib/core/fwGui/src/fwGui/builder/IContainerBuilder.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/builder/IContainerBuilder.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,10 @@
  * @file fwGui/builder/IContainerBuilder.cpp
  * @brief This file defines the implementation of the interface class  for the menubar builder.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-
 #include "fwGui/builder/IContainerBuilder.hpp"
 
 namespace fwGui
@@ -26,17 +24,20 @@ const IContainerBuilder::RegistryKeyType IContainerBuilder::REGISTRY_KEY = "::fw
 //-----------------------------------------------------------------------------
 
 IContainerBuilder::IContainerBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IContainerBuilder::~IContainerBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IContainerBuilder::initialize( ::fwRuntime::ConfigurationElement::sptr configuration)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/builder/IMenuBarBuilder.cpp b/SrcLib/core/fwGui/src/fwGui/builder/IMenuBarBuilder.cpp
index ba032fd..8445dd7 100644
--- a/SrcLib/core/fwGui/src/fwGui/builder/IMenuBarBuilder.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/builder/IMenuBarBuilder.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,10 @@
  * @file fwGui/builder/IMenuBarBuilder.cpp
  * @brief This file defines the implementation of the interface class  for the menubar builder.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-
 #include "fwGui/builder/IMenuBarBuilder.hpp"
 
 namespace fwGui
@@ -26,12 +24,14 @@ const IMenuBarBuilder::RegistryKeyType IMenuBarBuilder::REGISTRY_KEY = "::fwGui:
 //-----------------------------------------------------------------------------
 
 IMenuBarBuilder::IMenuBarBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IMenuBarBuilder::~IMenuBarBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/builder/ISlideViewBuilder.cpp b/SrcLib/core/fwGui/src/fwGui/builder/ISlideViewBuilder.cpp
new file mode 100644
index 0000000..021d0ba
--- /dev/null
+++ b/SrcLib/core/fwGui/src/fwGui/builder/ISlideViewBuilder.cpp
@@ -0,0 +1,98 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#include "fwGui/builder/ISlideViewBuilder.hpp"
+
+#include <boost/lexical_cast.hpp>
+
+namespace fwGui
+{
+namespace builder
+{
+
+const ISlideViewBuilder::RegistryKeyType ISlideViewBuilder::REGISTRY_KEY = "::fwGui::SlideViewBuilder";
+
+//-----------------------------------------------------------------------------
+
+ISlideViewBuilder::ISlideViewBuilder() :
+    m_size(200),
+    m_opacity(1.),
+    m_aligment(LEFT)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ISlideViewBuilder::~ISlideViewBuilder()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void ISlideViewBuilder::initialize( ::fwRuntime::ConfigurationElement::sptr configuration)
+{
+    SLM_ASSERT("Bad configuration name " + configuration->getName() + ", must be 'slideView'",
+               configuration->getName() == "slideView");
+
+
+    if (configuration->hasAttribute("align"))
+    {
+        std::string aligment = configuration->getExistingAttributeValue("align");
+        if (aligment == "top")
+        {
+            m_aligment = TOP;
+        }
+        else if (aligment == "bottom")
+        {
+            m_aligment = BOTTOM;
+        }
+        else if (aligment == "right")
+        {
+            m_aligment = RIGHT;
+        }
+        else if (aligment == "left")
+        {
+            m_aligment = LEFT;
+        }
+        else
+        {
+            SLM_FATAL("Wrong value '"+ aligment +"' for 'align' attribute (require top, bottom, right or left)");
+        }
+    }
+
+    if (configuration->hasAttribute("opacity"))
+    {
+        std::string opacity = configuration->getExistingAttributeValue("opacity");
+        m_opacity = std::stod(opacity);
+        SLM_ASSERT("Opacity must be in [0 - 1]; actual: " + opacity, m_opacity >= 0. && m_opacity <= 1.);
+    }
+
+    if (configuration->hasAttribute("size"))
+    {
+        std::string size = configuration->getExistingAttributeValue("size");
+        m_size = std::stoi(size);
+        SLM_ASSERT("Size must not be negative", m_size >= 0.);
+    }
+
+    ::fwRuntime::ConfigurationElement::csptr styleCfg = configuration->findConfigurationElement("styleSheet");
+    if (styleCfg)
+    {
+        m_styleSheet = styleCfg->getValue();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::fwGui::container::fwContainer::sptr ISlideViewBuilder::getContainer() const
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace builder
+} // namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/builder/IToolBarBuilder.cpp b/SrcLib/core/fwGui/src/fwGui/builder/IToolBarBuilder.cpp
index b76bf55..8a03290 100644
--- a/SrcLib/core/fwGui/src/fwGui/builder/IToolBarBuilder.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/builder/IToolBarBuilder.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,15 +8,14 @@
  * @file fwGui/builder/IToolBarBuilder.cpp
  * @brief This file defines the implementation of the interface class  for the toolbar builder.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
-
 #include "fwGui/builder/IToolBarBuilder.hpp"
 
+#include <boost/lexical_cast.hpp>
+
 namespace fwGui
 {
 namespace builder
@@ -26,7 +25,7 @@ const IToolBarBuilder::RegistryKeyType IToolBarBuilder::REGISTRY_KEY = "::fwGui:
 
 //-----------------------------------------------------------------------------
 
-IToolBarBuilder::IToolBarBuilder(): m_aligment(TOP)
+IToolBarBuilder::IToolBarBuilder() : m_aligment(TOP)
 {
     m_toolBitmapSize = std::make_pair(32, 32);
 }
@@ -34,7 +33,8 @@ IToolBarBuilder::IToolBarBuilder(): m_aligment(TOP)
 //-----------------------------------------------------------------------------
 
 IToolBarBuilder::~IToolBarBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -51,15 +51,15 @@ void IToolBarBuilder::initialize( ::fwRuntime::ConfigurationElement::sptr config
         {
             m_aligment = TOP;
         }
-        else  if (aligment == "bottom")
+        else if (aligment == "bottom")
         {
             m_aligment = BOTTOM;
         }
-        else  if (aligment == "right")
+        else if (aligment == "right")
         {
             m_aligment = RIGHT;
         }
-        else  if (aligment == "left")
+        else if (aligment == "left")
         {
             m_aligment = LEFT;
         }
@@ -69,8 +69,8 @@ void IToolBarBuilder::initialize( ::fwRuntime::ConfigurationElement::sptr config
         }
     }
 
-    ::fwRuntime::ConfigurationElementContainer::Iterator iter ;
-    for( iter = configuration->begin() ; iter != configuration->end() ; ++iter )
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter;
+    for( iter = configuration->begin(); iter != configuration->end(); ++iter )
     {
         if( (*iter)->getName() == "toolBitmapSize" )
         {
diff --git a/SrcLib/core/fwGui/src/fwGui/container/fwContainer.cpp b/SrcLib/core/fwGui/src/fwGui/container/fwContainer.cpp
index 6e16b53..8b38bba 100644
--- a/SrcLib/core/fwGui/src/fwGui/container/fwContainer.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/container/fwContainer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/container/fwMenu.cpp b/SrcLib/core/fwGui/src/fwGui/container/fwMenu.cpp
index 5e237bc..a6d2e47 100644
--- a/SrcLib/core/fwGui/src/fwGui/container/fwMenu.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/container/fwMenu.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/container/fwMenuBar.cpp b/SrcLib/core/fwGui/src/fwGui/container/fwMenuBar.cpp
index 32eeaf9..5303787 100644
--- a/SrcLib/core/fwGui/src/fwGui/container/fwMenuBar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/container/fwMenuBar.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/container/fwMenuItem.cpp b/SrcLib/core/fwGui/src/fwGui/container/fwMenuItem.cpp
index 054a5a7..fcf4eb2 100644
--- a/SrcLib/core/fwGui/src/fwGui/container/fwMenuItem.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/container/fwMenuItem.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/container/fwToolBar.cpp b/SrcLib/core/fwGui/src/fwGui/container/fwToolBar.cpp
index 7e0d363..894d91c 100644
--- a/SrcLib/core/fwGui/src/fwGui/container/fwToolBar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/container/fwToolBar.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/IInputDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/IInputDialog.cpp
index 9e64737..dc2995b 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/IInputDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/IInputDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,14 +11,16 @@ namespace fwGui
 {
 namespace dialog
 {
-const IInputDialog::FactoryRegistryKeyType IInputDialog::REGISTRY_KEY =  "::fwGui::dialog::InputDialog";
+const IInputDialog::FactoryRegistryKeyType IInputDialog::REGISTRY_KEY = "::fwGui::dialog::InputDialog";
 
 IInputDialog::IInputDialog()
-{}
+{
+}
 
 
 IInputDialog::~IInputDialog()
-{}
+{
+}
 
 } //namespace dialog
 } // namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp
index 4296dc1..e255337 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/ILocationDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,8 +7,8 @@
 #include <fwData/location/SingleFile.hpp>
 #include <fwData/location/Folder.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
 #include <fwServices/IService.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
 #include "fwGui/dialog/ILocationDialog.hpp"
 
@@ -17,20 +17,22 @@ namespace fwGui
 namespace dialog
 {
 
-const ILocationDialog::FactoryRegistryKeyType ILocationDialog::REGISTRY_KEY =  "::fwGui::dialog::LocationDialog";
+const ILocationDialog::FactoryRegistryKeyType ILocationDialog::REGISTRY_KEY = "::fwGui::dialog::LocationDialog";
 
-const std::string ILocationDialog::SOFTWARE_UI           = "SOFTWARE_UI";
-const std::string ILocationDialog::DLG_DEFAULT_LOCATION  = "DLG_DEFAULT_LOCATION" ;
+const std::string ILocationDialog::SOFTWARE_UI          = "SOFTWARE_UI";
+const std::string ILocationDialog::DLG_DEFAULT_LOCATION = "DLG_DEFAULT_LOCATION";
 
 //-----------------------------------------------------------------------------
 
 ILocationDialog::ILocationDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ILocationDialog::~ILocationDialog()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -51,7 +53,7 @@ const std::string& ILocationDialog::getTitle()
 void ILocationDialog::setDefaultLocation( ::fwData::location::ILocation::sptr loc)
 {
     ::fwData::location::SingleFile::csptr singleFile = ::fwData::location::SingleFile::dynamicConstCast(loc);
-    ::fwData::location::Folder::csptr folder = ::fwData::location::Folder::dynamicConstCast(loc);
+    ::fwData::location::Folder::csptr folder         = ::fwData::location::Folder::dynamicConstCast(loc);
     SLM_FATAL_IF( "Unsupported location",  !singleFile && !folder );
     m_defaultLocaction = loc;
 }
@@ -78,7 +80,7 @@ const ::boost::filesystem::path ILocationDialog::getDefaultLocation()
     }
 
     ::fwData::location::SingleFile::csptr singleFile = ::fwData::location::SingleFile::dynamicConstCast(location);
-    ::fwData::location::Folder::csptr folder = ::fwData::location::Folder::dynamicConstCast(location);
+    ::fwData::location::Folder::csptr folder         = ::fwData::location::Folder::dynamicConstCast(location);
     if (singleFile)
     {
         defaultPath = singleFile->getPath();
@@ -109,11 +111,11 @@ void ILocationDialog::saveDefaultLocation(::fwData::location::ILocation::sptr lo
     ::fwData::Composite::sptr prefUI;
 
     // Get preferences
-    std::vector< ::fwServices::IService::sptr > preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
     if(!preferencesServicesList.empty())
     {
-        ::fwServices::IService::sptr prefService = preferencesServicesList[0];
-        ::fwData::Composite::sptr prefs = prefService->getObject< ::fwData::Composite >();
+        ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
+        ::fwData::Composite::sptr prefs          = prefService->getObject< ::fwData::Composite >();
 
         ::fwData::Composite::sptr framesUI;
         // Retrieves software UI pref
@@ -123,7 +125,7 @@ void ILocationDialog::saveDefaultLocation(::fwData::location::ILocation::sptr lo
         }
         else
         {
-            framesUI = ::fwData::Composite::New();
+            framesUI                                 = ::fwData::Composite::New();
             (*prefs)[ ILocationDialog::SOFTWARE_UI ] = framesUI;
         }
         // Retrieves associated dialog UI pref
@@ -133,7 +135,7 @@ void ILocationDialog::saveDefaultLocation(::fwData::location::ILocation::sptr lo
         }
         else
         {
-            prefUI = ::fwData::Composite::New();
+            prefUI                          = ::fwData::Composite::New();
             (*framesUI)[ this->getTitle() ] = prefUI;
         }
     }
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/ILoggerDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/ILoggerDialog.cpp
new file mode 100644
index 0000000..eea0408
--- /dev/null
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/ILoggerDialog.cpp
@@ -0,0 +1,33 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGui/dialog/ILoggerDialog.hpp"
+
+namespace fwGui
+{
+namespace dialog
+{
+
+const ILoggerDialog::FactoryRegistryKeyType ILoggerDialog::REGISTRY_KEY = "::fwGui::dialog::LoggerDialog";
+
+//-----------------------------------------------------------------------------
+
+ILoggerDialog::ILoggerDialog()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ILoggerDialog::~ILoggerDialog()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace dialog
+} // namespace fwGui
+
+
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/IMessageDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/IMessageDialog.cpp
index d8cd085..f1d2042 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/IMessageDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/IMessageDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,14 +11,16 @@ namespace fwGui
 {
 namespace dialog
 {
-const IMessageDialog::FactoryRegistryKeyType IMessageDialog::REGISTRY_KEY =  "::fwGui::dialog::MessageDialog";
+const IMessageDialog::FactoryRegistryKeyType IMessageDialog::REGISTRY_KEY = "::fwGui::dialog::MessageDialog";
 
 IMessageDialog::IMessageDialog()
-{}
+{
+}
 
 
 IMessageDialog::~IMessageDialog()
-{}
+{
+}
 
 } //namespace dialog
 } // namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/IMultiSelectorDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/IMultiSelectorDialog.cpp
index e6780f8..43d521c 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/IMultiSelectorDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/IMultiSelectorDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,13 +12,16 @@ namespace fwGui
 namespace dialog
 {
 
-const IMultiSelectorDialog::FactoryRegistryKeyType IMultiSelectorDialog::REGISTRY_KEY =  "::fwGui::dialog::MultiSelectorDialog";
+const IMultiSelectorDialog::FactoryRegistryKeyType IMultiSelectorDialog::REGISTRY_KEY =
+    "::fwGui::dialog::MultiSelectorDialog";
 
 IMultiSelectorDialog::IMultiSelectorDialog()
-{}
+{
+}
 
 IMultiSelectorDialog::~IMultiSelectorDialog()
-{}
+{
+}
 
 } // namespace dialog
 } // namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/IProgressDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/IProgressDialog.cpp
index d627540..3b89183 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/IProgressDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/IProgressDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,19 +12,21 @@ namespace fwGui
 {
 namespace dialog
 {
-const IProgressDialog::FactoryRegistryKeyType IProgressDialog::REGISTRY_KEY =  "::fwGui::dialog::ProgressDialog";
+const IProgressDialog::FactoryRegistryKeyType IProgressDialog::REGISTRY_KEY = "::fwGui::dialog::ProgressDialog";
 
-IProgressDialog::IProgressDialog() 
+IProgressDialog::IProgressDialog()
     : m_canceled(false),
-    m_raise(true),
-    m_value(0),
-    m_processUserEvents(true)
-{}
+      m_raise(true),
+      m_value(0),
+      m_processUserEvents(true)
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IProgressDialog::~IProgressDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/IPulseProgressDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/IPulseProgressDialog.cpp
index 72d6108..2087ba6 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/IPulseProgressDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/IPulseProgressDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,15 +12,18 @@ namespace fwGui
 namespace dialog
 {
 
-const IPulseProgressDialog::FactoryRegistryKeyType IPulseProgressDialog::REGISTRY_KEY =  "::fwGui::dialog::PulseProgressDialog";
+const IPulseProgressDialog::FactoryRegistryKeyType IPulseProgressDialog::REGISTRY_KEY =
+    "::fwGui::dialog::PulseProgressDialog";
 
 IPulseProgressDialog::IPulseProgressDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IPulseProgressDialog::~IPulseProgressDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/ISelectorDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/ISelectorDialog.cpp
index 1f85b99..f0ce3f5 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/ISelectorDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/ISelectorDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,13 +12,15 @@ namespace fwGui
 namespace dialog
 {
 
-const ISelectorDialog::FactoryRegistryKeyType ISelectorDialog::REGISTRY_KEY =  "::fwGui::dialog::SelectorDialog";
+const ISelectorDialog::FactoryRegistryKeyType ISelectorDialog::REGISTRY_KEY = "::fwGui::dialog::SelectorDialog";
 
 ISelectorDialog::ISelectorDialog()
-{}
+{
+}
 
 ISelectorDialog::~ISelectorDialog()
-{}
+{
+}
 
 } //namespace dialog
 } // namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/InputDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/InputDialog.cpp
index 5c5bd9e..2103244 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/InputDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/InputDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,6 +7,8 @@
 
 #include "fwGui/dialog/InputDialog.hpp"
 
+#include "fwGui/registry/worker.hpp"
+
 namespace fwGui
 {
 namespace dialog
@@ -15,7 +17,7 @@ namespace dialog
 
 std::string InputDialog::showInputDialog(const std::string& title, const std::string& message, const std::string &text)
 {
-    ::fwGui::dialog::InputDialog  inputBox(title, message, text);
+    ::fwGui::dialog::InputDialog inputBox(title, message, text);
     return inputBox.getInput();
 }
 
@@ -23,52 +25,71 @@ std::string InputDialog::showInputDialog(const std::string& title, const std::st
 
 InputDialog::InputDialog()
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IInputDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IInputDialog::dynamicCast(guiObj);
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IInputDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IInputDialog::dynamicCast(guiObj);
+            }));
 }
 
 //-----------------------------------------------------------------------------
 
 InputDialog::InputDialog(const std::string& title, const std::string& message, const std::string &text)
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IInputDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IInputDialog::dynamicCast(guiObj);
-    m_implementation->setTitle(title);
-    m_implementation->setMessage(message);
-    m_implementation->setInput(text);
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >( [&]
+            {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IInputDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IInputDialog::dynamicCast(guiObj);
+                m_implementation->setTitle(title);
+                m_implementation->setMessage(message);
+                m_implementation->setInput(text);
+            }));
 }
 
 //-----------------------------------------------------------------------------
 
 InputDialog::~InputDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void InputDialog::setTitle( const std::string &title )
 {
-    m_implementation->setTitle(title);
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_implementation->setTitle(title);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void InputDialog::setMessage( const std::string &msg )
 {
-    m_implementation->setMessage(msg);
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >( [&]
+            {
+                m_implementation->setMessage(msg);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void InputDialog::setInput(const std::string &text)
 {
-    m_implementation->setInput(text);
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_implementation->setInput(text);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 std::string InputDialog::getInput()
 {
-    return m_implementation->getInput();
+    ::boost::function< std::string() > func = ::boost::bind(&IInputDialog::getInput, m_implementation);
+    ::boost::shared_future< std::string > f = ::fwGui::registry::worker::get()->postTask<std::string>(func);
+    f.wait();
+    return f.get();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/LocationDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/LocationDialog.cpp
index 51fc075..4e2133b 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/LocationDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/LocationDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,6 +7,7 @@
 
 
 #include "fwGui/dialog/LocationDialog.hpp"
+#include "fwGui/registry/worker.hpp"
 
 namespace fwGui
 {
@@ -16,20 +17,32 @@ namespace dialog
 
 LocationDialog::LocationDialog()
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ILocationDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::ILocationDialog::dynamicCast(guiObj);
+
+    ::fwGui::registry::worker::get()->postTask< void >(::boost::function< void() >(
+                                                           [&] {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ILocationDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::ILocationDialog::dynamicCast(guiObj);
+            })
+                                                       ).wait();
 }
 
 //------------------------------------------------------------------------------
 
 LocationDialog::~LocationDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ::fwData::location::ILocation::sptr LocationDialog::show()
 {
-    return m_implementation->show();
+    typedef SPTR (::fwData::location::ILocation) R;
+
+    ::boost::function< R() > func = ::boost::bind(&ILocationDialog::show, m_implementation);
+    ::boost::shared_future< R > f = ::fwGui::registry::worker::get()->postTask< R >(func);
+
+    f.wait();
+    return f.get();
 }
 
 //-----------------------------------------------------------------------------
@@ -90,5 +103,13 @@ void LocationDialog::saveDefaultLocation(::fwData::location::ILocation::sptr loc
 
 //-----------------------------------------------------------------------------
 
+std::string LocationDialog::getCurrentSelection() const
+{
+    return m_implementation->getCurrentSelection();
+}
+
+//-----------------------------------------------------------------------------
+
+
 } //namespace dialog
 } //namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/LoggerDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/LoggerDialog.cpp
new file mode 100644
index 0000000..01d3afb
--- /dev/null
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/LoggerDialog.cpp
@@ -0,0 +1,95 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGui/dialog/LoggerDialog.hpp"
+
+#include <fwGui/registry/worker.hpp>
+
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
+
+#include <boost/function.hpp>
+
+namespace fwGui
+{
+namespace dialog
+{
+
+//-----------------------------------------------------------------------------
+
+bool LoggerDialog::showLoggerDialog(
+    const std::string& title, const std::string& message, const ::fwLog::Logger::sptr& logger)
+{
+    ::fwGui::dialog::LoggerDialog dialog(title, message, logger);
+    return dialog.show();
+}
+
+//-----------------------------------------------------------------------------
+
+LoggerDialog::LoggerDialog()
+{
+    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ILoggerDialog::REGISTRY_KEY);
+    m_implementation                    = ::fwGui::dialog::ILoggerDialog::dynamicCast(guiObj);
+}
+
+//-----------------------------------------------------------------------------
+
+LoggerDialog::~LoggerDialog()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+LoggerDialog::LoggerDialog(const std::string& title, const std::string& message, const ::fwLog::Logger::sptr& logger)
+{
+    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ILoggerDialog::REGISTRY_KEY);
+    m_implementation                    = ::fwGui::dialog::ILoggerDialog::dynamicCast(guiObj);
+    m_implementation->setTitle(title);
+    m_implementation->setMessage(message);
+    m_implementation->setLogger(logger);
+}
+
+//-----------------------------------------------------------------------------
+
+void LoggerDialog::setTitle(const std::string& title)
+{
+    m_implementation->setTitle(title);
+}
+
+//-----------------------------------------------------------------------------
+
+void LoggerDialog::setMessage(const std::string& message)
+{
+    m_implementation->setMessage(message);
+}
+
+//-----------------------------------------------------------------------------
+
+void LoggerDialog::setLogger(const ::fwLog::Logger::sptr& logger)
+{
+    m_implementation->setLogger(logger);
+}
+
+//-----------------------------------------------------------------------------
+
+bool LoggerDialog::show()
+{
+    if(m_implementation)
+    {
+        ::boost::function<bool()> func = ::boost::bind(&ILoggerDialog::show, m_implementation);
+        ::boost::shared_future<bool> f = ::fwGui::registry::worker::get()->postTask<bool>(func);
+        f.wait();
+
+        return f.get();
+    }
+
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace dialog
+} //namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/MessageDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/MessageDialog.cpp
index 9b3a006..883debe 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/MessageDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/MessageDialog.cpp
@@ -1,11 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
 #include "fwGui/dialog/MessageDialog.hpp"
+#include "fwGui/registry/worker.hpp"
+
+#include <boost/function.hpp>
 
 namespace fwGui
 {
@@ -14,9 +16,10 @@ namespace dialog
 
 //-----------------------------------------------------------------------------
 
-IMessageDialog::Buttons MessageDialog::showMessageDialog(const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon)
+IMessageDialog::Buttons MessageDialog::showMessageDialog(
+    const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon)
 {
-    ::fwGui::dialog::MessageDialog  messageBox(title, message, icon);
+    ::fwGui::dialog::MessageDialog messageBox(title, message, icon);
     messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
     return messageBox.show();
 }
@@ -25,77 +28,101 @@ IMessageDialog::Buttons MessageDialog::showMessageDialog(const std::string& titl
 
 MessageDialog::MessageDialog()
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IMessageDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IMessageDialog::dynamicCast(guiObj);
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IMessageDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IMessageDialog::dynamicCast(guiObj);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
-MessageDialog::MessageDialog(const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon)
+MessageDialog::MessageDialog(
+    const std::string& title, const std::string& message, ::fwGui::dialog::IMessageDialog::Icons icon)
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IMessageDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IMessageDialog::dynamicCast(guiObj);
-    if(m_implementation)
-    {
-        m_implementation->setTitle(title);
-        m_implementation->setMessage(message);
-        m_implementation->setIcon(icon);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IMessageDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IMessageDialog::dynamicCast(guiObj);
+
+                if(m_implementation)
+                {
+                    m_implementation->setTitle(title);
+                    m_implementation->setMessage(message);
+                    m_implementation->setIcon(icon);
+                }
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 MessageDialog::~MessageDialog()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void MessageDialog::setTitle( const std::string &title )
 {
-    if(m_implementation)
-    {
-        m_implementation->setTitle(title);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                if(m_implementation)
+                {
+                    m_implementation->setTitle(title);
+                }
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void MessageDialog::setMessage( const std::string &msg )
 {
-    if(m_implementation)
-    {
-        m_implementation->setMessage(msg);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                if(m_implementation)
+                {
+                    m_implementation->setMessage(msg);
+                }
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void MessageDialog::setIcon( ::fwGui::dialog::IMessageDialog::Icons icon )
 {
-    if(m_implementation)
-    {
-        m_implementation->setIcon(icon);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                if(m_implementation)
+                {
+                    m_implementation->setIcon(icon);
+                }
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void MessageDialog::addButton( ::fwGui::dialog::IMessageDialog::Buttons button )
 {
-    if(m_implementation)
-    {
-        m_implementation->addButton(button);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                if(m_implementation)
+                {
+                    m_implementation->addButton(button);
+                }
+            } )).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void MessageDialog::setDefaultButton( ::fwGui::dialog::IMessageDialog::Buttons button )
 {
-    if(m_implementation)
-    {
-        m_implementation->setDefaultButton(button);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>( ::boost::function<void()>([&]
+            {
+                if(m_implementation)
+                {
+                    m_implementation->setDefaultButton(button);
+                }
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -104,7 +131,13 @@ void MessageDialog::setDefaultButton( ::fwGui::dialog::IMessageDialog::Buttons b
 {
     if(m_implementation)
     {
-        return m_implementation->show();
+        typedef ::fwGui::dialog::IMessageDialog::Buttons R;
+
+        ::boost::function<R()> func = ::boost::bind(&IMessageDialog::show, m_implementation);
+        ::boost::shared_future<R> f = ::fwGui::registry::worker::get()->postTask<R>(func);
+        f.wait();
+
+        return f.get();
     }
     else
     {
@@ -117,5 +150,3 @@ void MessageDialog::setDefaultButton( ::fwGui::dialog::IMessageDialog::Buttons b
 } //namespace dialog
 } // namespace fwGui
 
-
-
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/MultiSelectorDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/MultiSelectorDialog.cpp
index 3fda8fa..52720dc 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/MultiSelectorDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/MultiSelectorDialog.cpp
@@ -1,11 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
 #include "fwGui/dialog/MultiSelectorDialog.hpp"
+#include "fwGui/registry/worker.hpp"
 
 namespace fwGui
 {
@@ -15,36 +16,53 @@ namespace dialog
 
 MultiSelectorDialog::MultiSelectorDialog()
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IMultiSelectorDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IMultiSelectorDialog::dynamicCast(guiObj);
+    ::fwGui::registry::worker::get()->postTask< void >(::boost::function< void() >(
+                                                           [this] {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IMultiSelectorDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IMultiSelectorDialog::dynamicCast(guiObj);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void MultiSelectorDialog::setTitle(std::string title)
 {
-    m_implementation->setTitle(title);
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                m_implementation->setTitle(title);
+            }).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 IMultiSelectorDialog::Selections MultiSelectorDialog::show()
 {
-    return m_implementation->show();
+    typedef IMultiSelectorDialog::Selections R;
+    ::boost::function< R() > func = ::boost::bind( &IMultiSelectorDialog::show, m_implementation);
+    ::boost::shared_future< R > f = ::fwGui::registry::worker::get()->postTask< R  >(func);
+
+    f.wait();
+    return f.get();
 }
 
 //-----------------------------------------------------------------------------
 
 void MultiSelectorDialog::setSelections(Selections _selections)
 {
-    m_implementation->setSelections( _selections );
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                m_implementation->setSelections( _selections );
+            }).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void MultiSelectorDialog::setMessage(const std::string &msg)
 {
-    m_implementation->setMessage( msg );
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                m_implementation->setMessage( msg );
+            }).wait();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/ProgressDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/ProgressDialog.cpp
index 77fff05..0dcca1f 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/ProgressDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/ProgressDialog.cpp
@@ -1,12 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
+#include "fwGui/registry/worker.hpp"
 #include "fwGui/dialog/ProgressDialog.hpp"
 
+#include <boost/function.hpp>
+
 namespace fwGui
 {
 namespace dialog
@@ -15,44 +17,62 @@ namespace dialog
 
 ProgressDialog::ProgressDialog(const std::string &title,const std::string &message)
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IProgressDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IProgressDialog::dynamicCast(guiObj);
-    if(m_implementation)
-    {
-        m_implementation->setTitle(title);
-        m_implementation->setMessage(message);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IProgressDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IProgressDialog::dynamicCast(guiObj);
+                if(m_implementation)
+                {
+                    m_implementation->setTitle(title);
+                    m_implementation->setMessage(message);
+                }
+            } ).wait();
+}
+
+//-----------------------------------------------------------------------------
+
+ProgressDialog::~ProgressDialog()
+{
+    ::fwGui::registry::worker::get()->postTask<void>( [&] { m_implementation.reset(); } ).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void ProgressDialog::setTitle(const std::string &title)
 {
-    if(m_implementation)
-    {
-        m_implementation->setTitle(title);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                if(m_implementation)
+                {
+                    m_implementation->setTitle(title);
+                }
+            } ).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void ProgressDialog::setMessage(const std::string &msg)
 {
-    if(m_implementation)
-    {
-        m_implementation->setMessage(msg);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                if(m_implementation)
+                {
+                    m_implementation->setMessage(msg);
+                }
+            } ).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void ProgressDialog::operator()(float percent,std::string msg)
 {
-    if(m_implementation)
-    {
-
-        (*m_implementation)(percent,msg);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                if(m_implementation)
+                {
+                    (*m_implementation)(percent,msg);
+                }
+            } ).wait();
 }
 
 
@@ -60,11 +80,13 @@ void ProgressDialog::operator()(float percent,std::string msg)
 
 void ProgressDialog::setCancelCallback(CancelCallbackType callback)
 {
-    if(m_implementation)
-    {
-
-        m_implementation->setCancelCallback(callback);
-    }
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                if(m_implementation)
+                {
+                    m_implementation->setCancelCallback(callback);
+                }
+            } ).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -78,7 +100,10 @@ void ProgressDialog::cancelPressed()
 
 void ProgressDialog::hideCancelButton()
 {
-    m_implementation->hideCancelButton();
+    ::fwGui::registry::worker::get()->postTask<void>(
+        [&] {
+                m_implementation->hideCancelButton();
+            } ).wait();
 }
 
 } //namespace dialog
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/PulseProgressDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/PulseProgressDialog.cpp
index aa8afc5..c111103 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/PulseProgressDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/PulseProgressDialog.cpp
@@ -1,33 +1,43 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
+#include "fwGui/registry/worker.hpp"
 #include "fwGui/dialog/PulseProgressDialog.hpp"
 
+#include <boost/bind.hpp>
+
 namespace fwGui
 {
 namespace dialog
 {
 //-----------------------------------------------------------------------------
 
-PulseProgressDialog::PulseProgressDialog( const std::string &title, ::fwGui::dialog::IPulseProgressDialog::Stuff stuff, const std::string &msg, ::fwGui::dialog::IPulseProgressDialog::MilliSecond frequenceRefresh )
+PulseProgressDialog::PulseProgressDialog(
+    const std::string &title,
+    ::fwGui::dialog::IPulseProgressDialog::Stuff stuff,
+    const std::string &msg,
+    ::fwGui::dialog::IPulseProgressDialog::MilliSecond frequenceRefresh )
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IPulseProgressDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::IPulseProgressDialog::dynamicCast(guiObj);
-    if (m_implementation)
-    {
-        m_implementation->setStuff(stuff);
-        m_implementation->setTitle(title);
-        m_implementation->setMessage(msg);
-        m_implementation->setFrequence(frequenceRefresh);
-    }
-    else
-    {
-        this->setStuff(stuff);
-    }
+
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function<void()>(
+                                                         [&] {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(IPulseProgressDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::IPulseProgressDialog::dynamicCast(guiObj);
+                if (m_implementation)
+                {
+                    m_implementation->setStuff(stuff);
+                    m_implementation->setTitle(title);
+                    m_implementation->setMessage(msg);
+                    m_implementation->setFrequence(frequenceRefresh);
+                }
+                else
+                {
+                    this->setStuff(stuff);
+                }
+            } )).wait();
 }
 
 //-----------------------------------------------------------------------------
@@ -56,7 +66,8 @@ void PulseProgressDialog::show()
 {
     if (m_implementation)
     {
-        m_implementation->show();
+        ::fwGui::registry::worker::get()->postTask<void>(
+            ::boost::bind(&IPulseProgressDialog::show, m_implementation)).wait();
     }
     else
     {
diff --git a/SrcLib/core/fwGui/src/fwGui/dialog/SelectorDialog.cpp b/SrcLib/core/fwGui/src/fwGui/dialog/SelectorDialog.cpp
index d674b89..98a8478 100644
--- a/SrcLib/core/fwGui/src/fwGui/dialog/SelectorDialog.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/dialog/SelectorDialog.cpp
@@ -1,69 +1,100 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
 #include "fwGui/dialog/SelectorDialog.hpp"
+#include "fwGui/registry/worker.hpp"
+
+#include <boost/bind.hpp>
+
+#include <string>
 
 namespace fwGui
 {
 namespace dialog
 {
+
+
 //-----------------------------------------------------------------------------
 
-std::string SelectorDialog::showSelectorDialog(const std::string& title, const std::string& message, std::vector< std::string > _selections)
+std::string SelectorDialog::showSelectorDialog(const std::string& title, const std::string& message,
+                                               std::vector< std::string > _selections)
 {
-    ::fwGui::dialog::SelectorDialog  selector(title, message, _selections);
+    ::fwGui::dialog::SelectorDialog selector(title, message, _selections);
     return selector.show();
 }
 
 //-----------------------------------------------------------------------------
 
-SelectorDialog::SelectorDialog(const std::string& title, const std::string& message, std::vector< std::string > _selections)
+SelectorDialog::SelectorDialog(const std::string& title, const std::string& message,
+                               std::vector< std::string > _selections)
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ISelectorDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::ISelectorDialog::dynamicCast(guiObj);
-    m_implementation->setTitle(title);
-    m_implementation->setMessage( message );
-    m_implementation->setSelections( _selections );
+    create();
+    ::fwGui::registry::worker::get()->postTask<void>([&]
+            {
+                m_implementation->setTitle(title);
+                m_implementation->setMessage( message );
+                m_implementation->setSelections( _selections );
+            }).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 SelectorDialog::SelectorDialog()
 {
-    ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ISelectorDialog::REGISTRY_KEY);
-    m_implementation = ::fwGui::dialog::ISelectorDialog::dynamicCast(guiObj);
+    create();
+}
+
+void SelectorDialog::create()
+{
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ISelectorDialog::REGISTRY_KEY);
+                m_implementation = ::fwGui::dialog::ISelectorDialog::dynamicCast(guiObj);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void SelectorDialog::setTitle(std::string title)
 {
-    m_implementation->setTitle(title);
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >( [&]
+            {
+                m_implementation->setTitle(title);
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 std::string SelectorDialog::show()
 {
-    return m_implementation->show();
+    ::boost::function< std::string() > f         = ::boost::bind(&ISelectorDialog::show, m_implementation);
+    ::boost::shared_future< std::string > future = ::fwGui::registry::worker::get()->postTask< std::string >(f);
+    future.wait();
+    return future.get();
 }
 
 //-----------------------------------------------------------------------------
 
 void SelectorDialog::setSelections(std::vector< std::string > _selections)
 {
-    m_implementation->setSelections( _selections );
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_implementation->setSelections( _selections );
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
 
 void SelectorDialog::setMessage(const std::string &msg)
 {
-    m_implementation->setMessage( msg );
+    ::fwGui::registry::worker::get()->postTask<void>(::boost::function< void() >([&]
+            {
+                m_implementation->setMessage( msg );
+            })).wait();
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/factory/new.cpp b/SrcLib/core/fwGui/src/fwGui/factory/new.cpp
index e550e3f..c1b1956 100644
--- a/SrcLib/core/fwGui/src/fwGui/factory/new.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/CardinalLayoutManagerBase.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/CardinalLayoutManagerBase.cpp
index db232b6..842436c 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/CardinalLayoutManagerBase.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/CardinalLayoutManagerBase.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,17 +8,16 @@
  * @file fwGui/layoutManager/CardinalLayoutManagerBase.cpp
  * @brief This file defines the implementation of the class for managing a cardinal layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/assign/list_of.hpp>
+#include "fwGui/layoutManager/CardinalLayoutManagerBase.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "fwGui/layoutManager/CardinalLayoutManagerBase.hpp"
+#include <boost/assign/list_of.hpp>
+#include <boost/lexical_cast.hpp>
 
 namespace fwGui
 {
@@ -27,38 +26,41 @@ namespace layoutManager
 {
 //-----------------------------------------------------------------------------
 
-const CardinalLayoutManagerBase::RegistryKeyType CardinalLayoutManagerBase::REGISTRY_KEY =  "::fwGui::CardinalLayoutManager";
+const CardinalLayoutManagerBase::RegistryKeyType CardinalLayoutManagerBase::REGISTRY_KEY =
+    "::fwGui::CardinalLayoutManager";
 
 //-----------------------------------------------------------------------------
 
 const std::map<std::string, CardinalLayoutManagerBase::Align> CardinalLayoutManagerBase::STRING_TO_ALIGN =
-                                                ::boost::assign::map_list_of("center",CENTER)
-                                                                            ("right",RIGHT)
-                                                                            ("left",LEFT)
-                                                                            ("bottom",BOTTOM)
-                                                                            ("top",TOP);
+    ::boost::assign::map_list_of("center",CENTER)
+        ("right",RIGHT)
+        ("left",LEFT)
+        ("bottom",BOTTOM)
+        ("top",TOP);
 
 //-----------------------------------------------------------------------------
 
 CardinalLayoutManagerBase::CardinalLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 CardinalLayoutManagerBase::~CardinalLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void CardinalLayoutManagerBase::initialize( ConfigurationType configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be layout",
-            configuration->getName() == "layout");
+                configuration->getName() == "layout");
 
     std::vector < ConfigurationType > vectViews = configuration->find("view");
     SLM_TRACE_IF("No view define.", vectViews.empty() );
     m_views.clear();
-    BOOST_FOREACH (ConfigurationType view, vectViews)
+    for (ConfigurationType view : vectViews)
     {
         ViewInfo vi;
         if( view->hasAttribute("align") )
@@ -70,63 +72,63 @@ void CardinalLayoutManagerBase::initialize( ConfigurationType configuration)
 
         if( view->hasAttribute("minWidth") )
         {
-            std::string width = view->getExistingAttributeValue("minWidth") ;
-            vi.m_minSize.first = ::boost::lexical_cast< int >(width) ;
+            std::string width = view->getExistingAttributeValue("minWidth");
+            vi.m_minSize.first = ::boost::lexical_cast< int >(width);
         }
 
         if( view->hasAttribute("minHeight") )
         {
-            std::string height = view->getExistingAttributeValue("minHeight") ;
-            vi.m_minSize.second = ::boost::lexical_cast< int >(height) ;
+            std::string height = view->getExistingAttributeValue("minHeight");
+            vi.m_minSize.second = ::boost::lexical_cast< int >(height);
         }
 
         if( view->hasAttribute("resizable") )
         {
-            std::string resizable = view->getExistingAttributeValue("resizable") ;
+            std::string resizable = view->getExistingAttributeValue("resizable");
             OSLM_ASSERT("Incorrect value for \"resizable\" attribute "<<resizable,
-                    (resizable == "yes") || (resizable == "no"));
-            vi.m_isResizable = (resizable=="yes") ;
+                        (resizable == "yes") || (resizable == "no"));
+            vi.m_isResizable = (resizable=="yes");
         }
 
         if( view->hasAttribute("position") )
         {
-            std::string position = view->getExistingAttributeValue("position") ;
+            std::string position = view->getExistingAttributeValue("position");
             vi.m_position = ::boost::lexical_cast< int >(position);
         }
 
         if( view->hasAttribute("layer") )
         {
-            std::string layer = view->getExistingAttributeValue("layer") ;
+            std::string layer = view->getExistingAttributeValue("layer");
             vi.m_layer = ::boost::lexical_cast< int >(layer);
         }
 
         if( view->hasAttribute("row") )
         {
-            std::string row = view->getExistingAttributeValue("row") ;
+            std::string row = view->getExistingAttributeValue("row");
             vi.m_row = ::boost::lexical_cast< int >(row);
         }
 
         if( view->hasAttribute("visible") )
         {
-            std::string visible = view->getExistingAttributeValue("visible") ;
+            std::string visible = view->getExistingAttributeValue("visible");
             OSLM_ASSERT("Incorrect value for \"visible\" attribute "<<visible,
-                    (visible == "true") || (visible == "false") ||
-                    (visible == "yes") || (visible == "no"));
+                        (visible == "true") || (visible == "false") ||
+                        (visible == "yes") || (visible == "no"));
             vi.m_visible = ((visible == "true") || (visible == "yes"));
         }
 
         if( view->hasAttribute("caption") )
         {
-            vi.m_caption.first = true;
-            vi.m_caption.second = view->getExistingAttributeValue("caption") ;
+            vi.m_caption.first  = true;
+            vi.m_caption.second = view->getExistingAttributeValue("caption");
         }
 
         if( view->hasAttribute("useScrollBar") )
         {
-            std::string useScrollBar = view->getExistingAttributeValue("useScrollBar") ;
+            std::string useScrollBar = view->getExistingAttributeValue("useScrollBar");
             OSLM_ASSERT("Incorrect value for \"useScrollBar\" attribute "<<useScrollBar,
-                    (useScrollBar == "yes") || (useScrollBar == "no"));
-            vi.m_useScrollBar = (useScrollBar=="yes") ;
+                        (useScrollBar == "yes") || (useScrollBar == "no"));
+            vi.m_useScrollBar = (useScrollBar=="yes");
         }
 
         m_views.push_back(vi);
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
index 63d01ce..8c42532 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/IFrameLayoutManager.cpp
@@ -1,17 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-/**
- * @file fwGui/layoutManager/IFrameLayoutManager.cpp
- * @brief This file defines the implementation of the base class for managing a frame.
- *
- * 
- * @date 2009-2010
- */
-
 #include <boost/filesystem/operations.hpp>
 #include <boost/lexical_cast.hpp>
 #include <boost/bind.hpp>
@@ -21,7 +13,8 @@
 #include <fwData/Integer.hpp>
 #include <fwData/String.hpp>
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
 #include "fwGui/layoutManager/IFrameLayoutManager.hpp"
 
@@ -32,39 +25,40 @@ namespace layoutManager
 {
 //-----------------------------------------------------------------------------
 
-const IFrameLayoutManager::RegistryKeyType IFrameLayoutManager::REGISTRY_KEY =  "::fwGui::FrameLayoutManager";
+const IFrameLayoutManager::RegistryKeyType IFrameLayoutManager::REGISTRY_KEY = "::fwGui::FrameLayoutManager";
 
 const std::string IFrameLayoutManager::SOFTWARE_UI         = "SOFTWARE_UI";
-const std::string IFrameLayoutManager::FRAME_STATE_UI      = "FRAME_STATE_UI" ;
-const std::string IFrameLayoutManager::FRAME_SIZE_W_UI     = "FRAME_SIZE_W_UI" ;
-const std::string IFrameLayoutManager::FRAME_SIZE_H_UI     = "FRAME_SIZE_H_UI" ;
-const std::string IFrameLayoutManager::FRAME_POSITION_X_UI = "FRAME_POSITION_X_UI" ;
-const std::string IFrameLayoutManager::FRAME_POSITION_Y_UI = "FRAME_POSITION_Y_UI" ;
+const std::string IFrameLayoutManager::FRAME_STATE_UI      = "FRAME_STATE_UI";
+const std::string IFrameLayoutManager::FRAME_SIZE_W_UI     = "FRAME_SIZE_W_UI";
+const std::string IFrameLayoutManager::FRAME_SIZE_H_UI     = "FRAME_SIZE_H_UI";
+const std::string IFrameLayoutManager::FRAME_POSITION_X_UI = "FRAME_POSITION_X_UI";
+const std::string IFrameLayoutManager::FRAME_POSITION_Y_UI = "FRAME_POSITION_Y_UI";
 
 //-----------------------------------------------------------------------------
 
 IFrameLayoutManager::IFrameLayoutManager()
 {
-    CloseCallback fct = ::boost::bind( &::fwGui::layoutManager::IFrameLayoutManager::defaultCloseCallback, this);
+    CloseCallback fct = std::bind( &::fwGui::layoutManager::IFrameLayoutManager::defaultCloseCallback, this);
     this->setCloseCallback(fct);
 }
 
 //-----------------------------------------------------------------------------
 
 IFrameLayoutManager::~IFrameLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IFrameLayoutManager::initialize( ConfigurationType configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be frame",
-            configuration->getName() == "frame");
+                configuration->getName() == "frame");
 
     std::vector < ConfigurationType > name    = configuration->find("name");
     std::vector < ConfigurationType > icon    = configuration->find("icon");
     std::vector < ConfigurationType > minSize = configuration->find("minSize");
-    std::vector < ConfigurationType > styles = configuration->find("style");
+    std::vector < ConfigurationType > styles  = configuration->find("style");
 
     if(!name.empty())
     {
@@ -73,19 +67,22 @@ void IFrameLayoutManager::initialize( ConfigurationType configuration)
 
     if(!icon.empty())
     {
-        m_frameInfo.m_iconPath = ::boost::filesystem::path(SHAREPATH + icon.at(0)->getValue() ) ;
-        OSLM_ASSERT("Sorry, icon "<< m_frameInfo.m_iconPath << " doesn't exist", ::boost::filesystem::exists(m_frameInfo.m_iconPath));
+        m_frameInfo.m_iconPath = ::boost::filesystem::path( icon.at(0)->getValue() );
+        OSLM_ASSERT("The icon "<< m_frameInfo.m_iconPath << " doesn't exist, please ensure that the path is correct",
+                    ::boost::filesystem::exists(m_frameInfo.m_iconPath));
     }
 
     if(!minSize.empty())
     {
         if(minSize.at(0)->hasAttribute("width"))
         {
-            m_frameInfo.m_minSize.first = ::boost::lexical_cast<int >(minSize.at(0)->getExistingAttributeValue("width")) ;
+            m_frameInfo.m_minSize.first =
+                ::boost::lexical_cast<int >(minSize.at(0)->getExistingAttributeValue("width"));
         }
         if(minSize.at(0)->hasAttribute("height"))
         {
-            m_frameInfo.m_minSize.second = ::boost::lexical_cast<int >(minSize.at(0)->getExistingAttributeValue("height")) ;
+            m_frameInfo.m_minSize.second = ::boost::lexical_cast<int >(minSize.at(0)->getExistingAttributeValue(
+                                                                           "height"));
         }
     }
 
@@ -103,9 +100,13 @@ void IFrameLayoutManager::initialize( ConfigurationType configuration)
         {
             m_frameInfo.m_style = STAY_ON_TOP;
         }
+        else if (style == "MODAL")
+        {
+            m_frameInfo.m_style = MODAL;
+        }
         else
         {
-            OSLM_FATAL("Sorry, style "<<style<< " is unknown.");
+            OSLM_FATAL("The style "<<style<< " is unknown, it should be DEFAULT, STAY_ON_TOP or MODAL.");
         }
     }
     this->readConfig();
@@ -134,31 +135,36 @@ void IFrameLayoutManager::readConfig()
     {
         if ( prefUI->find( IFrameLayoutManager::FRAME_STATE_UI ) != prefUI->end() )
         {
-            ::fwData::Integer::sptr state = ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_STATE_UI ] );
+            ::fwData::Integer::sptr state =
+                ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_STATE_UI ] );
             SLM_ASSERT("UI state not correct", state);
             m_frameInfo.m_state = (FrameState) state->value();
         }
         if ( prefUI->find( IFrameLayoutManager::FRAME_SIZE_W_UI ) != prefUI->end() )
         {
-            ::fwData::Integer::sptr sizew = ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_SIZE_W_UI ] );
+            ::fwData::Integer::sptr sizew =
+                ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_SIZE_W_UI ] );
             SLM_ASSERT("UI sizeW not correct", sizew);
             m_frameInfo.m_size.first = *sizew;
         }
         if ( prefUI->find( IFrameLayoutManager::FRAME_SIZE_H_UI ) != prefUI->end() )
         {
-            ::fwData::Integer::sptr sizeh = ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_SIZE_H_UI ] );
+            ::fwData::Integer::sptr sizeh =
+                ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_SIZE_H_UI ] );
             SLM_ASSERT("UI sizeH not correct", sizeh);
             m_frameInfo.m_size.second = *sizeh;
         }
         if ( prefUI->find( IFrameLayoutManager::FRAME_POSITION_X_UI ) != prefUI->end() )
         {
-            ::fwData::Integer::sptr posx = ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_POSITION_X_UI ] );
+            ::fwData::Integer::sptr posx =
+                ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_POSITION_X_UI ] );
             SLM_ASSERT("UI posX not correct", posx);
             m_frameInfo.m_position.first = *posx;
         }
         if ( prefUI->find( IFrameLayoutManager::FRAME_POSITION_Y_UI ) != prefUI->end() )
         {
-            ::fwData::Integer::sptr posy = ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_POSITION_Y_UI ] );
+            ::fwData::Integer::sptr posy =
+                ::fwData::Integer::dynamicCast( (*prefUI)[ IFrameLayoutManager::FRAME_POSITION_Y_UI ] );
             SLM_ASSERT("UI posY not correct", posy);
             m_frameInfo.m_position.second = *posy;
         }
@@ -174,20 +180,20 @@ void IFrameLayoutManager::writeConfig()
     {
         if(m_frameInfo.m_state != ICONIZED)
         {
-            ::fwData::Integer::sptr state = ::fwData::Integer::New(m_frameInfo.m_state);
+            ::fwData::Integer::sptr state                    = ::fwData::Integer::New(m_frameInfo.m_state);
             (*prefUI)[ IFrameLayoutManager::FRAME_STATE_UI ] = state;
         }
 
-        ::fwData::Integer::sptr sizew = ::fwData::Integer::New(m_frameInfo.m_size.first);
+        ::fwData::Integer::sptr sizew                     = ::fwData::Integer::New(m_frameInfo.m_size.first);
         (*prefUI)[ IFrameLayoutManager::FRAME_SIZE_W_UI ] = sizew;
 
-        ::fwData::Integer::sptr sizeh = ::fwData::Integer::New(m_frameInfo.m_size.second);
+        ::fwData::Integer::sptr sizeh                     = ::fwData::Integer::New(m_frameInfo.m_size.second);
         (*prefUI)[ IFrameLayoutManager::FRAME_SIZE_H_UI ] = sizeh;
 
-        ::fwData::Integer::sptr posx = ::fwData::Integer::New(m_frameInfo.m_position.first);
+        ::fwData::Integer::sptr posx                          = ::fwData::Integer::New(m_frameInfo.m_position.first);
         (*prefUI)[ IFrameLayoutManager::FRAME_POSITION_X_UI ] = posx;
 
-        ::fwData::Integer::sptr posy = ::fwData::Integer::New(m_frameInfo.m_position.second);
+        ::fwData::Integer::sptr posy                          = ::fwData::Integer::New(m_frameInfo.m_position.second);
         (*prefUI)[ IFrameLayoutManager::FRAME_POSITION_Y_UI ] = posy;
     }
 }
@@ -199,17 +205,17 @@ void IFrameLayoutManager::writeConfig()
     ::fwData::Composite::sptr prefUI;
 
     // Get preferences
-    std::vector< ::fwServices::IService::sptr > preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
+    auto preferencesServicesList = ::fwServices::OSR::getServices("::preferences::IPreferencesService");
     if(!preferencesServicesList.empty())
     {
-        ::fwServices::IService::sptr prefService = preferencesServicesList[0];
-        ::fwData::Composite::sptr prefs = prefService->getObject< ::fwData::Composite >();
+        ::fwServices::IService::sptr prefService = *preferencesServicesList.begin();
+        ::fwData::Composite::sptr prefs          = prefService->getObject< ::fwData::Composite >();
 
         ::fwData::Composite::sptr framesUI;
         // Retreives software UI pref
         if ( prefs->find( IFrameLayoutManager::SOFTWARE_UI ) == prefs->end() )
         {
-            framesUI = ::fwData::Composite::New();
+            framesUI                                     = ::fwData::Composite::New();
             (*prefs)[ IFrameLayoutManager::SOFTWARE_UI ] = framesUI;
         }
         else
@@ -223,7 +229,7 @@ void IFrameLayoutManager::writeConfig()
         }
         else
         {
-            prefUI = ::fwData::Composite::New();
+            prefUI                                   = ::fwData::Composite::New();
             (*framesUI)[ this->m_frameInfo.m_name  ] = prefUI;
         }
     }
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuBarLayoutManager.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuBarLayoutManager.cpp
index 92759e8..d432ead 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuBarLayoutManager.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuBarLayoutManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,8 @@
  * @file fwGui/layoutManager/IMenuBarLayoutManager.cpp
  * @brief This file defines the implementation of the base class for managing a menubar.
  *
- * 
- * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-
 #include "fwGui/layoutManager/IMenuBarLayoutManager.hpp"
 
 namespace fwGui
@@ -26,12 +22,14 @@ const IMenuBarLayoutManager::RegistryKeyType IMenuBarLayoutManager::REGISTRY_KEY
 //-----------------------------------------------------------------------------
 
 IMenuBarLayoutManager::IMenuBarLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IMenuBarLayoutManager::~IMenuBarLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -43,12 +41,12 @@ void IMenuBarLayoutManager::initialize( ConfigurationType configuration)
     std::vector < ConfigurationType > vectMenus = configuration->find("menu");
     SLM_TRACE_IF("No menu define.", vectMenus.empty() );
     m_menus.clear();
-    BOOST_FOREACH (ConfigurationType menu, vectMenus)
+    for (ConfigurationType menu : vectMenus)
     {
         SLM_ASSERT("missing <name> attribute", menu->hasAttribute("name"));
         if( menu->hasAttribute("name") )
         {
-            std::string name = menu->getExistingAttributeValue("name") ;
+            std::string name = menu->getExistingAttributeValue("name");
             m_menuNames.push_back(name);
         }
     }
@@ -58,7 +56,7 @@ void IMenuBarLayoutManager::initialize( ConfigurationType configuration)
 
 void IMenuBarLayoutManager::destroyMenus()
 {
-    BOOST_FOREACH( ::fwGui::container::fwMenu::sptr menu, m_menus)
+    for( ::fwGui::container::fwMenu::sptr menu :  m_menus)
     {
         menu->destroyContainer();
     }
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuLayoutManager.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuLayoutManager.cpp
index 040b97b..f327932 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuLayoutManager.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/IMenuLayoutManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,12 +8,10 @@
  * @file fwGui/layoutManager/IMenuLayoutManager.cpp
  * @brief This file defines the implementation of the base class for managing a menu.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-
 #include "fwGui/layoutManager/IMenuLayoutManager.hpp"
 
 namespace fwGui
@@ -26,12 +24,14 @@ const IMenuLayoutManager::RegistryKeyType IMenuLayoutManager::REGISTRY_KEY = "::
 //-----------------------------------------------------------------------------
 
 IMenuLayoutManager::IMenuLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IMenuLayoutManager::~IMenuLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -41,43 +41,43 @@ void IMenuLayoutManager::initialize( ConfigurationType configuration)
                 configuration->getName() == "layout");
 
 
-    ::fwRuntime::ConfigurationElementContainer::Iterator iter ;
-    for( iter = configuration->begin() ; iter != configuration->end() ; ++iter )
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter;
+    for( iter = configuration->begin(); iter != configuration->end(); ++iter )
     {
         if( (*iter)->getName() == "menuItem" )
         {
             ConfigurationType menuItem = *iter;
             ActionInfo info;
 
-            SLM_ASSERT("Depreciated tag <state>", ! menuItem->hasAttribute("state"));
-            SLM_ASSERT("Depreciated tag <enable>", ! menuItem->hasAttribute("enable"));
+            SLM_ASSERT("Depreciated tag <state>", !menuItem->hasAttribute("state"));
+            SLM_ASSERT("Depreciated tag <enable>", !menuItem->hasAttribute("enable"));
 
             SLM_ASSERT("missing <name> attribute", menuItem->hasAttribute("name"));
             if( menuItem->hasAttribute("name") )
             {
-                info.m_name = menuItem->getExistingAttributeValue("name") ;
+                info.m_name = menuItem->getExistingAttributeValue("name");
             }
 
             if( menuItem->hasAttribute("shortcut") )
             {
-                info.m_shortcut = menuItem->getExistingAttributeValue("shortcut") ;
+                info.m_shortcut = menuItem->getExistingAttributeValue("shortcut");
             }
 
             if( menuItem->hasAttribute("icon") )
             {
-                info.m_icon = SHAREPATH + menuItem->getExistingAttributeValue("icon") ;
+                info.m_icon = menuItem->getExistingAttributeValue("icon");
             }
 
             if( menuItem->hasAttribute("style") )
             {
-                std::string style = menuItem->getExistingAttributeValue("style") ;
+                std::string style = menuItem->getExistingAttributeValue("style");
                 info.m_isCheckable = (style == "check");
-                info.m_isRadio = (style == "radio");
+                info.m_isRadio     = (style == "radio");
             }
 
             if( menuItem->hasAttribute("specialAction") )
             {
-                std::string specialActionName = menuItem->getExistingAttributeValue("specialAction") ;
+                std::string specialActionName = menuItem->getExistingAttributeValue("specialAction");
                 if (specialActionName == "DEFAULT")
                 {
                     info.m_type = DEFAULT;
@@ -110,8 +110,8 @@ void IMenuLayoutManager::initialize( ConfigurationType configuration)
         {
             ActionInfo info;
             info.m_isSeparator = true;
-            info.m_type = SEPARATOR;
-            m_actionInfo.push_back( info ) ;
+            info.m_type        = SEPARATOR;
+            m_actionInfo.push_back( info );
         }
 
         if( (*iter)->getName() == "menu" )
@@ -120,9 +120,9 @@ void IMenuLayoutManager::initialize( ConfigurationType configuration)
             info.m_isMenu = true;
             if( (*iter)->hasAttribute("name") )
             {
-                info.m_name = (*iter)->getExistingAttributeValue("name") ;
+                info.m_name = (*iter)->getExistingAttributeValue("name");
             }
-            m_actionInfo.push_back( info ) ;
+            m_actionInfo.push_back( info );
         }
     }
 }
@@ -131,12 +131,12 @@ void IMenuLayoutManager::initialize( ConfigurationType configuration)
 
 void IMenuLayoutManager::destroyActions()
 {
-    BOOST_FOREACH( ::fwGui::container::fwMenuItem::sptr menuItem, m_menuItems)
+    for( ::fwGui::container::fwMenuItem::sptr menuItem :  m_menuItems)
     {
         menuItem->destroyContainer();
     }
     m_menuItems.clear();
-    BOOST_FOREACH( ::fwGui::container::fwMenu::sptr menu, m_menus)
+    for( ::fwGui::container::fwMenu::sptr menu :  m_menus)
     {
         menu->destroyContainer();
     }
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/IToolBarLayoutManager.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/IToolBarLayoutManager.cpp
index 0ea7f78..b932dad 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/IToolBarLayoutManager.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/IToolBarLayoutManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,11 +8,10 @@
  * @file fwGui/layoutManager/IToolBarLayoutManager.cpp
  * @brief This file defines the implementation of the base class for managing a toolbar.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
 #include <boost/lexical_cast.hpp>
 
 
@@ -28,12 +27,14 @@ const IToolBarLayoutManager::RegistryKeyType IToolBarLayoutManager::REGISTRY_KEY
 //-----------------------------------------------------------------------------
 
 IToolBarLayoutManager::IToolBarLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IToolBarLayoutManager::~IToolBarLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -43,37 +44,43 @@ void IToolBarLayoutManager::initialize( ConfigurationType configuration)
                 configuration->getName() == "layout");
 
 
-    ::fwRuntime::ConfigurationElementContainer::Iterator iter ;
-    for( iter = configuration->begin() ; iter != configuration->end() ; ++iter )
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter;
+    for( iter = configuration->begin(); iter != configuration->end(); ++iter )
     {
         if( (*iter)->getName() == "menuItem" )
         {
             ConfigurationType toolBarItem = *iter;
             ActionInfo info;
-            SLM_ASSERT("Depreciated tag <state>", ! toolBarItem->hasAttribute("state"));
-            SLM_ASSERT("Depreciated tag <enable>", ! toolBarItem->hasAttribute("enable"));
+            SLM_ASSERT("Depreciated tag <state>", !toolBarItem->hasAttribute("state"));
+            SLM_ASSERT("Depreciated tag <enable>", !toolBarItem->hasAttribute("enable"));
 
             SLM_ASSERT("missing <name> attribute", toolBarItem->hasAttribute("name"));
             if( toolBarItem->hasAttribute("name") )
             {
-                info.m_name = toolBarItem->getExistingAttributeValue("name") ;
+                info.m_name = toolBarItem->getExistingAttributeValue("name");
             }
 
             if( toolBarItem->hasAttribute("icon") )
             {
-                info.m_icon = SHAREPATH + toolBarItem->getExistingAttributeValue("icon") ;
+                info.m_icon = toolBarItem->getExistingAttributeValue("icon");
+            }
+
+            if( toolBarItem->hasAttribute("icon2") )
+            {
+                SLM_ASSERT("'icon' attribute must be defined before 'icon2'", !info.m_icon.empty());
+                info.m_icon2 = toolBarItem->getExistingAttributeValue("icon2");
             }
 
             if( toolBarItem->hasAttribute("style") )
             {
-                std::string style = toolBarItem->getExistingAttributeValue("style") ;
+                std::string style = toolBarItem->getExistingAttributeValue("style");
                 info.m_isCheckable = (style == "check");
-                info.m_isRadio = (style == "radio");
+                info.m_isRadio     = (style == "radio");
             }
 
             if( toolBarItem->hasAttribute("shortcut") )
             {
-                info.m_shortcut = toolBarItem->getExistingAttributeValue("shortcut") ;
+                info.m_shortcut = toolBarItem->getExistingAttributeValue("shortcut");
             }
             m_actionInfo.push_back(info);
         }
@@ -84,16 +91,16 @@ void IToolBarLayoutManager::initialize( ConfigurationType configuration)
 
             if( (*iter)->hasAttribute("size") )
             {
-                info.m_size = ::boost::lexical_cast< int > ((*iter)->getExistingAttributeValue("size")) ;
+                info.m_size = ::boost::lexical_cast< int > ((*iter)->getExistingAttributeValue("size"));
             }
 
-            m_actionInfo.push_back( info ) ;
+            m_actionInfo.push_back( info );
         }
         else if( (*iter)->getName() == "spacer" )
         {
             ActionInfo info;
             info.m_isSpacer = true;
-            m_actionInfo.push_back( info ) ;
+            m_actionInfo.push_back( info );
         }
         else if( (*iter)->getName() == "menu" )
         {
@@ -101,21 +108,21 @@ void IToolBarLayoutManager::initialize( ConfigurationType configuration)
             info.m_isMenu = true;
             if( (*iter)->hasAttribute("name") )
             {
-                info.m_name = (*iter)->getExistingAttributeValue("name") ;
+                info.m_name = (*iter)->getExistingAttributeValue("name");
             }
 
             if( (*iter)->hasAttribute("icon") )
             {
-                info.m_icon = (*iter)->getExistingAttributeValue("icon") ;
+                info.m_icon = (*iter)->getExistingAttributeValue("icon");
             }
-            m_actionInfo.push_back( info ) ;
+            m_actionInfo.push_back( info );
         }
         else if( (*iter)->getName() == "editor" )
         {
             ActionInfo info;
             info.m_isEditor = true;
 
-            m_actionInfo.push_back( info ) ;
+            m_actionInfo.push_back( info );
         }
     }
 }
@@ -124,17 +131,17 @@ void IToolBarLayoutManager::initialize( ConfigurationType configuration)
 
 void IToolBarLayoutManager::destroyActions()
 {
-    BOOST_FOREACH( ::fwGui::container::fwMenuItem::sptr menuItem, m_menuItems)
+    for( ::fwGui::container::fwMenuItem::sptr menuItem :  m_menuItems)
     {
         menuItem->destroyContainer();
     }
     m_menuItems.clear();
-    BOOST_FOREACH( ::fwGui::container::fwMenu::sptr menu, m_menus)
+    for( ::fwGui::container::fwMenu::sptr menu :  m_menus)
     {
         menu->destroyContainer();
     }
     m_menus.clear();
-    BOOST_FOREACH( ::fwGui::container::fwContainer::sptr container, m_containers)
+    for( ::fwGui::container::fwContainer::sptr container :  m_containers)
     {
         container->destroyContainer();
     }
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/IViewLayoutManager.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/IViewLayoutManager.cpp
index 8203769..6313bb7 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/IViewLayoutManager.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/IViewLayoutManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,8 +12,6 @@
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-
 #include "fwGui/layoutManager/IViewLayoutManager.hpp"
 
 namespace fwGui
@@ -24,18 +22,20 @@ namespace layoutManager
 //-----------------------------------------------------------------------------
 
 IViewLayoutManager::IViewLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IViewLayoutManager::~IViewLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IViewLayoutManager::destroySubViews()
 {
-    BOOST_FOREACH( ::fwGui::container::fwContainer::sptr container, m_subViews)
+    for( ::fwGui::container::fwContainer::sptr container :  m_subViews)
     {
         container->clean();
         container->destroyContainer();
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/LineLayoutManagerBase.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/LineLayoutManagerBase.cpp
index e109d6d..2fbce58 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/LineLayoutManagerBase.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/LineLayoutManagerBase.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,11 +8,8 @@
  * @file fwGui/layoutManager/LineLayoutManagerBase.cpp
  * @brief This file defines the implementation of the class for managing a line layout geometry.
  *
- * 
- * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
 #include <boost/lexical_cast.hpp>
 
 #include <fwCore/base.hpp>
@@ -26,36 +23,38 @@ namespace layoutManager
 {
 //-----------------------------------------------------------------------------
 
-const LineLayoutManagerBase::RegistryKeyType LineLayoutManagerBase::REGISTRY_KEY =  "::fwGui::LineLayoutManager";
+const LineLayoutManagerBase::RegistryKeyType LineLayoutManagerBase::REGISTRY_KEY = "::fwGui::LineLayoutManager";
 
 //-----------------------------------------------------------------------------
 
 LineLayoutManagerBase::LineLayoutManagerBase() : m_orientation(VERTICAL)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 LineLayoutManagerBase::~LineLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void LineLayoutManagerBase::initialize( ConfigurationType configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be layout",
-            configuration->getName() == "layout");
+                configuration->getName() == "layout");
 
     std::vector < ConfigurationType > vectOrientation = configuration->find("orientation");
 
-    SLM_FATAL_IF( "missing orientation configuration" , vectOrientation.empty() );
+    SLM_FATAL_IF( "missing orientation configuration", vectOrientation.empty() );
     SLM_ASSERT("<orientation> tag must have value attribute", vectOrientation.at(0)->hasAttribute("value"));
-    std::string orientation = vectOrientation.at(0)->getExistingAttributeValue("value") ;
+    std::string orientation = vectOrientation.at(0)->getExistingAttributeValue("value");
     SLM_ASSERT("Wrong value '"<< orientation <<"' for 'orientation' attribute (require vertical or horizontal)",
-            orientation == "vertical" || orientation == "horizontal");
-    m_orientation = (orientation == "vertical")? VERTICAL:HORIZONTAL ;
+               orientation == "vertical" || orientation == "horizontal");
+    m_orientation = (orientation == "vertical") ? VERTICAL : HORIZONTAL;
 
     m_views.clear();
-    BOOST_FOREACH (ConfigurationType view, configuration->getElements())
+    for (ConfigurationType view : configuration->getElements())
     {
         if( view->getName() == "spacer" )
         {
@@ -68,43 +67,43 @@ void LineLayoutManagerBase::initialize( ConfigurationType configuration)
             ViewInfo vi;
             if( view->hasAttribute("proportion") )
             {
-                std::string proportion = view->getExistingAttributeValue("proportion") ;
-                vi.m_proportion = ::boost::lexical_cast< int >(proportion) ;
+                std::string proportion = view->getExistingAttributeValue("proportion");
+                vi.m_proportion = ::boost::lexical_cast< int >(proportion);
             }
             if( view->hasAttribute("border") )
             {
-                std::string border = view->getExistingAttributeValue("border") ;
-                vi.m_border = ::boost::lexical_cast< int >(border) ;
+                std::string border = view->getExistingAttributeValue("border");
+                vi.m_border = ::boost::lexical_cast< int >(border);
             }
             if( view->hasAttribute("caption") )
             {
-                vi.m_caption.first = true;
-                vi.m_caption.second = view->getExistingAttributeValue("caption") ;
+                vi.m_caption.first  = true;
+                vi.m_caption.second = view->getExistingAttributeValue("caption");
             }
             if( view->hasAttribute("minWidth") )
             {
-                std::string width = view->getExistingAttributeValue("minWidth") ;
-                vi.m_minSize.first = ::boost::lexical_cast< int >(width) ;
+                std::string width = view->getExistingAttributeValue("minWidth");
+                vi.m_minSize.first = ::boost::lexical_cast< int >(width);
             }
             if( view->hasAttribute("minHeight") )
             {
-                std::string height = view->getExistingAttributeValue("minHeight") ;
-                vi.m_minSize.second = ::boost::lexical_cast< int >(height) ;
+                std::string height = view->getExistingAttributeValue("minHeight");
+                vi.m_minSize.second = ::boost::lexical_cast< int >(height);
             }
             if( view->hasAttribute("visible") )
             {
-                std::string visible = view->getExistingAttributeValue("visible") ;
+                std::string visible = view->getExistingAttributeValue("visible");
                 OSLM_ASSERT("Incorrect value for \"visible\" attribute "<<visible,
-                        (visible == "true") || (visible == "false") ||
-                        (visible == "yes") || (visible == "no"));
+                            (visible == "true") || (visible == "false") ||
+                            (visible == "yes") || (visible == "no"));
                 vi.m_visible = ((visible == "true") || (visible == "yes"));
             }
             if( view->hasAttribute("useScrollBar") )
             {
-                std::string useScrollBar = view->getExistingAttributeValue("useScrollBar") ;
+                std::string useScrollBar = view->getExistingAttributeValue("useScrollBar");
                 OSLM_ASSERT("Incorrect value for \"useScrollBar\" attribute "<<useScrollBar,
-                        (useScrollBar == "yes") || (useScrollBar == "no"));
-                vi.m_useScrollBar = (useScrollBar=="yes") ;
+                            (useScrollBar == "yes") || (useScrollBar == "no"));
+                vi.m_useScrollBar = (useScrollBar=="yes");
             }
             m_views.push_back(vi);
         }
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/TabLayoutManagerBase.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/TabLayoutManagerBase.cpp
index a39458c..2d37756 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/TabLayoutManagerBase.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/TabLayoutManagerBase.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,17 +8,16 @@
  * @file fwGui/layoutManager/TabLayoutManagerBase.cpp
  * @brief This file defines the interface of the class for managing a tab layout geometry.
  *
- * 
+ *
  * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/assign/list_of.hpp>
+#include "fwGui/layoutManager/TabLayoutManagerBase.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "fwGui/layoutManager/TabLayoutManagerBase.hpp"
+#include <boost/lexical_cast.hpp>
+#include <boost/assign/list_of.hpp>
 
 namespace fwGui
 {
@@ -27,49 +26,51 @@ namespace layoutManager
 {
 //-----------------------------------------------------------------------------
 
-const TabLayoutManagerBase::RegistryKeyType TabLayoutManagerBase::REGISTRY_KEY =  "::fwGui::TabLayoutManager";
+const TabLayoutManagerBase::RegistryKeyType TabLayoutManagerBase::REGISTRY_KEY = "::fwGui::TabLayoutManager";
 
 //-----------------------------------------------------------------------------
 
 TabLayoutManagerBase::TabLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 TabLayoutManagerBase::~TabLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void TabLayoutManagerBase::initialize( ConfigurationType configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be layout",
-            configuration->getName() == "layout");
+                configuration->getName() == "layout");
 
     std::vector < ConfigurationType > vectViews = configuration->find("view");
     SLM_TRACE_IF("No view define.", vectViews.empty() );
     m_views.clear();
-    BOOST_FOREACH (ConfigurationType view, vectViews)
+    for (ConfigurationType view : vectViews)
     {
         ViewInfo vi;
         if( view->hasAttribute("caption") )
         {
-            vi.m_caption = view->getExistingAttributeValue("caption") ;
+            vi.m_caption = view->getExistingAttributeValue("caption");
         }
         if( view->hasAttribute("selected") )
         {
             std::string isSelected = view->getExistingAttributeValue("selected");
-            OSLM_ASSERT("Sorry, value "<<isSelected<<" is not correct for attribute isSelected.",
-                    isSelected == "yes" || isSelected == "no");
+            OSLM_ASSERT("The value "<<isSelected<<" it's incorrect, it should either be yes or no.",
+                        isSelected == "yes" || isSelected == "no");
             vi.m_isSelect = (isSelected == "yes");
         }
 
         if( view->hasAttribute("useScrollBar") )
         {
-            std::string useScrollBar = view->getExistingAttributeValue("useScrollBar") ;
+            std::string useScrollBar = view->getExistingAttributeValue("useScrollBar");
             OSLM_ASSERT("Incorrect value for \"useScrollBar\" attribute "<<useScrollBar,
-                    (useScrollBar == "yes") || (useScrollBar == "no"));
-            vi.m_useScrollBar = (useScrollBar=="yes") ;
+                        (useScrollBar == "yes") || (useScrollBar == "no"));
+            vi.m_useScrollBar = (useScrollBar=="yes");
         }
 
         m_views.push_back(vi);
diff --git a/SrcLib/core/fwGui/src/fwGui/layoutManager/ToolboxLayoutManagerBase.cpp b/SrcLib/core/fwGui/src/fwGui/layoutManager/ToolboxLayoutManagerBase.cpp
index 3b1e87b..216c3db 100644
--- a/SrcLib/core/fwGui/src/fwGui/layoutManager/ToolboxLayoutManagerBase.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/layoutManager/ToolboxLayoutManagerBase.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,16 +8,14 @@
  * @file fwGui/layoutManager/ToolboxLayoutManagerBase.cpp
  * @brief This file defines the implementation of the class for managing a line layout geometry.
  *
- * 
- * @date 2009-2010
  */
 
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
+#include "fwGui/layoutManager/ToolboxLayoutManagerBase.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "fwGui/layoutManager/ToolboxLayoutManagerBase.hpp"
+#include <boost/lexical_cast.hpp>
+
 
 namespace fwGui
 {
@@ -26,71 +24,74 @@ namespace layoutManager
 {
 //-----------------------------------------------------------------------------
 
-const ToolboxLayoutManagerBase::RegistryKeyType ToolboxLayoutManagerBase::REGISTRY_KEY =  "::fwGui::ToolboxLayoutManager";
+const ToolboxLayoutManagerBase::RegistryKeyType ToolboxLayoutManagerBase::REGISTRY_KEY =
+    "::fwGui::ToolboxLayoutManager";
 
 //-----------------------------------------------------------------------------
 
 ToolboxLayoutManagerBase::ToolboxLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ToolboxLayoutManagerBase::~ToolboxLayoutManagerBase()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ToolboxLayoutManagerBase::initialize( ConfigurationType configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be layout",
-            configuration->getName() == "layout");
+                configuration->getName() == "layout");
     m_views.clear();
-    BOOST_FOREACH (ConfigurationType view, configuration->getElements())
+    for (ConfigurationType view : configuration->getElements())
     {
         if( view->getName() == "view" )
         {
             ViewInfo vi;
             if( view->hasAttribute("border") )
             {
-                std::string border = view->getExistingAttributeValue("border") ;
-                vi.m_border = ::boost::lexical_cast< int >(border) ;
+                std::string border = view->getExistingAttributeValue("border");
+                vi.m_border = ::boost::lexical_cast< int >(border);
             }
             if( view->hasAttribute("caption") )
             {
-                vi.m_caption = view->getExistingAttributeValue("caption") ;
+                vi.m_caption = view->getExistingAttributeValue("caption");
             }
             if( view->hasAttribute("minWidth") )
             {
-                std::string width = view->getExistingAttributeValue("minWidth") ;
-                vi.m_minSize.first = ::boost::lexical_cast< int >(width) ;
+                std::string width = view->getExistingAttributeValue("minWidth");
+                vi.m_minSize.first = ::boost::lexical_cast< int >(width);
             }
             if( view->hasAttribute("minHeight") )
             {
-                std::string height = view->getExistingAttributeValue("minHeight") ;
-                vi.m_minSize.second = ::boost::lexical_cast< int >(height) ;
+                std::string height = view->getExistingAttributeValue("minHeight");
+                vi.m_minSize.second = ::boost::lexical_cast< int >(height);
             }
             if( view->hasAttribute("visible") )
             {
-                std::string visible = view->getExistingAttributeValue("visible") ;
+                std::string visible = view->getExistingAttributeValue("visible");
                 OSLM_ASSERT("Incorrect value for \"visible\" attribute "<<visible,
-                        (visible == "true") || (visible == "false") ||
-                        (visible == "yes") || (visible == "no"));
+                            (visible == "true") || (visible == "false") ||
+                            (visible == "yes") || (visible == "no"));
                 vi.m_visible = ((visible == "true") || (visible == "yes"));
             }
             if( view->hasAttribute("expanded") )
             {
-                std::string expanded = view->getExistingAttributeValue("expanded") ;
+                std::string expanded = view->getExistingAttributeValue("expanded");
                 OSLM_ASSERT("Incorrect value for \"expanded\" attribute "<<expanded,
-                        (expanded == "true") || (expanded == "false") ||
-                        (expanded == "yes") || (expanded == "no"));
+                            (expanded == "true") || (expanded == "false") ||
+                            (expanded == "yes") || (expanded == "no"));
                 vi.m_expanded = ((expanded == "true") || (expanded == "yes"));
             }
             if( view->hasAttribute("useScrollBar") )
             {
-                std::string useScrollBar = view->getExistingAttributeValue("useScrollBar") ;
+                std::string useScrollBar = view->getExistingAttributeValue("useScrollBar");
                 OSLM_ASSERT("Incorrect value for \"useScrollBar\" attribute "<<useScrollBar,
-                        (useScrollBar == "yes") || (useScrollBar == "no"));
-                vi.m_useScrollBar = (useScrollBar=="yes") ;
+                            (useScrollBar == "yes") || (useScrollBar == "no"));
+                vi.m_useScrollBar = (useScrollBar=="yes");
             }
             m_views.push_back(vi);
         }
diff --git a/SrcLib/core/fwGui/src/fwGui/registrar/ActionRegistrar.cpp b/SrcLib/core/fwGui/src/fwGui/registrar/ActionRegistrar.cpp
index a6b2678..685e122 100644
--- a/SrcLib/core/fwGui/src/fwGui/registrar/ActionRegistrar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registrar/ActionRegistrar.cpp
@@ -1,15 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <utility>
 
-#include <boost/foreach.hpp>
-
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include "fwGui/GuiRegistry.hpp"
 #include "fwGui/registrar/ActionRegistrar.hpp"
@@ -22,12 +20,14 @@ namespace registrar
 //-----------------------------------------------------------------------------
 
 ActionRegistrar::ActionRegistrar(const std::string &sid) : m_sid(sid)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ActionRegistrar::~ActionRegistrar()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -59,5 +59,12 @@ void ActionRegistrar::actionServiceSetExecutable(bool isExecutable)
 
 //-----------------------------------------------------------------------------
 
+void ActionRegistrar::actionServiceSetVisible(bool isVisible)
+{
+    ::fwGui::GuiRegistry::actionServiceSetVisible(m_sid, isVisible);
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace registrar
 } //namespace fwGui
diff --git a/SrcLib/core/fwGui/src/fwGui/registrar/MenuBarRegistrar.cpp b/SrcLib/core/fwGui/src/fwGui/registrar/MenuBarRegistrar.cpp
index c4a577f..12a7016 100644
--- a/SrcLib/core/fwGui/src/fwGui/registrar/MenuBarRegistrar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registrar/MenuBarRegistrar.cpp
@@ -1,18 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
-
-#include <boost/foreach.hpp>
+#include "fwGui/GuiRegistry.hpp"
+#include "fwGui/registrar/MenuBarRegistrar.hpp"
 
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
 
-#include "fwGui/GuiRegistry.hpp"
-#include "fwGui/registrar/MenuBarRegistrar.hpp"
+#include <utility>
 
 namespace fwGui
 {
@@ -22,12 +21,14 @@ namespace registrar
 //-----------------------------------------------------------------------------
 
 MenuBarRegistrar::MenuBarRegistrar(const std::string &sid) : m_sid(sid)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 MenuBarRegistrar::~MenuBarRegistrar()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -38,7 +39,8 @@ MenuBarRegistrar::~MenuBarRegistrar()
 
 //-----------------------------------------------------------------------------
 
-::fwGui::container::fwMenu::sptr MenuBarRegistrar::getFwMenu(std::string menuSid, std::vector< ::fwGui::container::fwMenu::sptr > menus)
+::fwGui::container::fwMenu::sptr MenuBarRegistrar::getFwMenu(std::string menuSid,
+                                                             std::vector< ::fwGui::container::fwMenu::sptr > menus)
 {
     SLM_ASSERT("menu not found", m_menuSids.find(menuSid) != m_menuSids.end());
     ::fwGui::container::fwMenu::sptr menu = menus.at( m_menuSids[menuSid].first );
@@ -50,13 +52,13 @@ MenuBarRegistrar::~MenuBarRegistrar()
 void MenuBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be registry",
-            configuration->getName() == "registry");
+                configuration->getName() == "registry");
 
     // index represents associated menu with position in menus vector
     unsigned int index = 0;
     // initialize m_menuSids map with configuration
     std::vector < ConfigurationType > vectMenus = configuration->find("menu");
-    BOOST_FOREACH( ConfigurationType menu, vectMenus)
+    for( ConfigurationType menu :  vectMenus)
     {
         SLM_ASSERT("<menu> tag must have sid attribute", menu->hasAttribute("sid"));
 
@@ -67,7 +69,7 @@ void MenuBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
             {
                 std::string startValue = menu->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
             std::string sid = menu->getAttributeValue("sid");
@@ -82,15 +84,16 @@ void MenuBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
 void MenuBarRegistrar::manage(std::vector< ::fwGui::container::fwMenu::sptr > menus )
 {
     ::fwGui::container::fwMenu::sptr menu;
-    BOOST_FOREACH( SIDMenuMapType::value_type sid, m_menuSids)
+    for( SIDMenuMapType::value_type sid :  m_menuSids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < menus.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < menus.size());
         menu = menus.at( sid.second.first );
         ::fwGui::GuiRegistry::registerSIDMenu(sid.first, menu);
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->start();
         }
         else
@@ -108,12 +111,12 @@ void MenuBarRegistrar::manage(std::vector< ::fwGui::container::fwMenu::sptr > me
 
 void MenuBarRegistrar::unmanage()
 {
-    BOOST_FOREACH( SIDMenuMapType::value_type sid, m_menuSids)
+    for( SIDMenuMapType::value_type sid :  m_menuSids)
     {
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDMenu(sid.first);
diff --git a/SrcLib/core/fwGui/src/fwGui/registrar/MenuRegistrar.cpp b/SrcLib/core/fwGui/src/fwGui/registrar/MenuRegistrar.cpp
index b0ac194..fdfa3b8 100644
--- a/SrcLib/core/fwGui/src/fwGui/registrar/MenuRegistrar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registrar/MenuRegistrar.cpp
@@ -1,19 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
+#include "fwGui/GuiRegistry.hpp"
+#include "fwGui/IActionSrv.hpp"
+#include "fwGui/registrar/MenuRegistrar.hpp"
 
-#include <boost/foreach.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
 
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
 
-#include "fwGui/GuiRegistry.hpp"
-#include "fwGui/IActionSrv.hpp"
-#include "fwGui/registrar/MenuRegistrar.hpp"
+#include <utility>
 
 namespace fwGui
 {
@@ -23,12 +23,14 @@ namespace registrar
 //-----------------------------------------------------------------------------
 
 MenuRegistrar::MenuRegistrar(const std::string &sid) : m_sid(sid)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 MenuRegistrar::~MenuRegistrar()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -39,7 +41,8 @@ MenuRegistrar::~MenuRegistrar()
 
 //-----------------------------------------------------------------------------
 
-::fwGui::container::fwMenuItem::sptr MenuRegistrar::getFwMenuItem(std::string actionSid, std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems)
+::fwGui::container::fwMenuItem::sptr MenuRegistrar::getFwMenuItem(std::string actionSid,
+                                                                  std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems)
 {
     SLM_ASSERT("menuItem not found", m_actionSids.find(actionSid) != m_actionSids.end());
     ::fwGui::container::fwMenuItem::sptr menuItem = menuItems.at( m_actionSids[actionSid].first );
@@ -51,14 +54,14 @@ MenuRegistrar::~MenuRegistrar()
 void MenuRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be registry",
-            configuration->getName() == "registry");
+                configuration->getName() == "registry");
 
     // index represents associated menu with position in menus vector
     unsigned int index = 0;
     m_callbacks.clear();
     // initialize m_actionSids map with configuration
     std::vector < ConfigurationType > vectMenuItems = configuration->find("menuItem");
-    BOOST_FOREACH( ConfigurationType menuItem, vectMenuItems)
+    for( ConfigurationType menuItem :  vectMenuItems)
     {
         SLM_ASSERT("<menuItem> tag must have sid attribute", menuItem->hasAttribute("sid"));
         if(menuItem->hasAttribute("sid"))
@@ -68,16 +71,17 @@ void MenuRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
             {
                 std::string startValue = menuItem->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
             std::string sid = menuItem->getAttributeValue("sid");
-            OSLM_ASSERT("Action " << sid << " already exists for this menu", m_actionSids.find(sid) == m_actionSids.end());
+            OSLM_ASSERT("Action " << sid << " already exists for this menu", m_actionSids.find(
+                            sid) == m_actionSids.end());
             m_actionSids[sid] = SIDMenuMapType::mapped_type(index, start);
 
-            ::fwGui::ActionCallbackBase::sptr callback ;
+            ::fwGui::ActionCallbackBase::sptr callback;
             ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ActionCallbackBase::REGISTRY_KEY);
-            callback = ::fwGui::ActionCallbackBase::dynamicCast(guiObj);
+            callback                            = ::fwGui::ActionCallbackBase::dynamicCast(guiObj);
             OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::ActionCallbackBase::REGISTRY_KEY, callback);
 
             callback->setSID(sid);
@@ -89,7 +93,7 @@ void MenuRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
     index = 0;
     // initialize m_actionSids map with configuration
     std::vector < ConfigurationType > vectMenus = configuration->find("menu");
-    BOOST_FOREACH( ConfigurationType menu, vectMenus)
+    for( ConfigurationType menu :  vectMenus)
     {
         SLM_ASSERT("<menu> tag must have sid attribute", menu->hasAttribute("sid"));
         if(menu->hasAttribute("sid"))
@@ -99,12 +103,13 @@ void MenuRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
             {
                 std::string startValue = menu->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
-            std::string sid = menu->getAttributeValue("sid");
-            std::pair<int, bool> indexStart =  std::make_pair( index, start);
-            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_actionSids.find(sid) == m_actionSids.end());
+            std::string sid                 = menu->getAttributeValue("sid");
+            std::pair<int, bool> indexStart = std::make_pair( index, start);
+            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_actionSids.find(
+                            sid) == m_actionSids.end());
             m_menuSids[sid] = indexStart;
         }
         index++;
@@ -116,15 +121,16 @@ void MenuRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
 void MenuRegistrar::manage(std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems )
 {
     ::fwGui::container::fwMenuItem::sptr menuItem;
-    BOOST_FOREACH( SIDMenuMapType::value_type sid, m_actionSids)
+    for( SIDMenuMapType::value_type sid :  m_actionSids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < menuItems.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < menuItems.size());
         menuItem = menuItems.at( sid.second.first );
         ::fwGui::GuiRegistry::registerActionSIDToParentSID(sid.first, m_sid);
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             OSLM_ASSERT("Service "<<sid.first <<" must be stopped.", service->isStopped() );
             service->start();
         }
@@ -148,15 +154,16 @@ void MenuRegistrar::manage(std::vector< ::fwGui::container::fwMenuItem::sptr > m
 void MenuRegistrar::manage(std::vector< ::fwGui::container::fwMenu::sptr > menus )
 {
     ::fwGui::container::fwMenu::sptr menu;
-    BOOST_FOREACH( SIDMenuMapType::value_type sid, m_menuSids)
+    for( SIDMenuMapType::value_type sid :  m_menuSids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < menus.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < menus.size());
         menu = menus.at( sid.second.first );
         ::fwGui::GuiRegistry::registerSIDMenu(sid.first, menu);
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             OSLM_ASSERT("Service "<<sid.first <<" must be stopped.", service->isStopped() );
             service->start();
         }
@@ -167,22 +174,22 @@ void MenuRegistrar::manage(std::vector< ::fwGui::container::fwMenu::sptr > menus
 
 void MenuRegistrar::unmanage()
 {
-    BOOST_FOREACH( SIDMenuMapType::value_type sid, m_actionSids)
+    for( SIDMenuMapType::value_type sid :  m_actionSids)
     {
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterActionSIDToParentSID(sid.first, m_sid);
     }
-    BOOST_FOREACH( SIDMenuMapType::value_type sid, m_menuSids)
+    for( SIDMenuMapType::value_type sid :  m_menuSids)
     {
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDMenu(sid.first);
diff --git a/SrcLib/core/fwGui/src/fwGui/registrar/ToolBarRegistrar.cpp b/SrcLib/core/fwGui/src/fwGui/registrar/ToolBarRegistrar.cpp
index 0ae5841..024d64b 100644
--- a/SrcLib/core/fwGui/src/fwGui/registrar/ToolBarRegistrar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registrar/ToolBarRegistrar.cpp
@@ -1,20 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
-
-#include <boost/foreach.hpp>
-
-#include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
-
 #include "fwGui/GuiRegistry.hpp"
 #include "fwGui/IActionSrv.hpp"
 #include "fwGui/registrar/ToolBarRegistrar.hpp"
 
+#include <fwTools/fwID.hpp>
+
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
+
+#include <utility>
+
+
 namespace fwGui
 {
 namespace registrar
@@ -22,13 +23,15 @@ namespace registrar
 
 //-----------------------------------------------------------------------------
 
-ToolBarRegistrar::ToolBarRegistrar(const std::string &sid) : m_sid(sid)
-{}
+ToolBarRegistrar::ToolBarRegistrar(const std::string& sid) : m_sid(sid)
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ToolBarRegistrar::~ToolBarRegistrar()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -39,7 +42,8 @@ ToolBarRegistrar::~ToolBarRegistrar()
 
 //-----------------------------------------------------------------------------
 
-::fwGui::container::fwMenuItem::sptr ToolBarRegistrar::getFwMenuItem(std::string actionSid, std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems)
+::fwGui::container::fwMenuItem::sptr ToolBarRegistrar::getFwMenuItem(std::string actionSid,
+                                                                     std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems)
 {
     SLM_ASSERT("menuItem not found", m_actionSids.find(actionSid) != m_actionSids.end());
     ::fwGui::container::fwMenuItem::sptr menuItem = menuItems.at( m_actionSids[actionSid].first );
@@ -51,14 +55,14 @@ ToolBarRegistrar::~ToolBarRegistrar()
 void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be registry",
-            configuration->getName() == "registry");
+                configuration->getName() == "registry");
 
     // index represents associated toolBar with position in toolBars vector
     unsigned int index = 0;
     m_callbacks.clear();
     // initialize m_actionSids map with configuration
     std::vector < ConfigurationType > vectMenuItems = configuration->find("menuItem");
-    BOOST_FOREACH( ConfigurationType menuItem, vectMenuItems)
+    for( ConfigurationType menuItem :  vectMenuItems)
     {
         SLM_ASSERT("<menuItem> tag must have sid attribute", menuItem->hasAttribute("sid"));
         if(menuItem->hasAttribute("sid"))
@@ -68,16 +72,17 @@ void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
             {
                 std::string startValue = menuItem->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
             std::string sid = menuItem->getAttributeValue("sid");
-            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_actionSids.find(sid) == m_actionSids.end());
+            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_actionSids.find(
+                            sid) == m_actionSids.end());
             m_actionSids[sid] = SIDToolBarMapType::mapped_type(index, start);
 
-            ::fwGui::ActionCallbackBase::sptr callback ;
+            ::fwGui::ActionCallbackBase::sptr callback;
             ::fwGui::GuiBaseObject::sptr guiObj = ::fwGui::factory::New(ActionCallbackBase::REGISTRY_KEY);
-            callback = ::fwGui::ActionCallbackBase::dynamicCast(guiObj);
+            callback                            = ::fwGui::ActionCallbackBase::dynamicCast(guiObj);
             OSLM_ASSERT("ClassFactoryRegistry failed for class "<< ::fwGui::ActionCallbackBase::REGISTRY_KEY, callback);
 
             callback->setSID(sid);
@@ -88,7 +93,7 @@ void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
     index = 0;
     // initialize m_menuSids map with configuration
     std::vector < ConfigurationType > vectMenus = configuration->find("menu");
-    BOOST_FOREACH( ConfigurationType menu, vectMenus)
+    for( ConfigurationType menu :  vectMenus)
     {
         SLM_ASSERT("<menu> tag must have sid attribute", menu->hasAttribute("sid"));
         if(menu->hasAttribute("sid"))
@@ -98,11 +103,12 @@ void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
             {
                 std::string startValue = menu->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
             std::string sid = menu->getAttributeValue("sid");
-            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_menuSids.find(sid) == m_menuSids.end());
+            OSLM_ASSERT("Action " << sid << " already exists for this toolBar",
+                        m_menuSids.find(sid) == m_menuSids.end());
             m_menuSids[sid] = SIDToolBarMapType::mapped_type(index, start);
         }
         index++;
@@ -111,9 +117,9 @@ void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
     index = 0;
     // initialize m_menuSids map with configuration
     std::vector < ConfigurationType > vectEditors = configuration->find("editor");
-    BOOST_FOREACH( ConfigurationType editor, vectEditors)
+    for( ConfigurationType editor :  vectEditors)
     {
-        SLM_ASSERT("<editor> tag must have sid attribute", editor->hasAttribute("sid"));
+        SLM_ASSERT("<editor> tag must have sid attribute", editor->hasAttribute("sid")  || editor->hasAttribute("wid"));
         if(editor->hasAttribute("sid"))
         {
             bool start = false;
@@ -121,13 +127,19 @@ void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
             {
                 std::string startValue = editor->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
             std::string sid = editor->getAttributeValue("sid");
-            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_editorSids.find(sid) == m_editorSids.end());
+            OSLM_ASSERT("Action " << sid << " already exists for this toolBar", m_editorSids.find(
+                            sid) == m_editorSids.end());
             m_editorSids[sid] = SIDToolBarMapType::mapped_type(index, start);
         }
+        else if(editor->hasAttribute("wid"))
+        {
+            std::string wid = editor->getAttributeValue("wid");
+            m_editorWids[wid] = index;
+        }
         index++;
     }
 }
@@ -137,15 +149,16 @@ void ToolBarRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr confi
 void ToolBarRegistrar::manage(std::vector< ::fwGui::container::fwMenuItem::sptr > menuItems )
 {
     ::fwGui::container::fwMenuItem::sptr menuItem;
-    BOOST_FOREACH( SIDToolBarMapType::value_type sid, m_actionSids)
+    for( SIDToolBarMapType::value_type sid :  m_actionSids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < menuItems.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < menuItems.size());
         menuItem = menuItems.at( sid.second.first );
         ::fwGui::GuiRegistry::registerActionSIDToParentSID(sid.first, m_sid);
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             OSLM_ASSERT("Service "<<sid.first <<" must be stopped.", service->isStopped() );
             service->start();
         }
@@ -169,15 +182,16 @@ void ToolBarRegistrar::manage(std::vector< ::fwGui::container::fwMenuItem::sptr
 void ToolBarRegistrar::manage(std::vector< ::fwGui::container::fwMenu::sptr > menus )
 {
     ::fwGui::container::fwMenu::sptr menu;
-    BOOST_FOREACH( SIDToolBarMapType::value_type sid, m_menuSids)
+    for( SIDToolBarMapType::value_type sid :  m_menuSids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < menus.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < menus.size());
         menu = menus.at( sid.second.first );
         ::fwGui::GuiRegistry::registerSIDMenu(sid.first, menu);
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             OSLM_ASSERT("Service "<<sid.first <<" must be stopped.", service->isStopped() );
             service->start();
         }
@@ -189,55 +203,67 @@ void ToolBarRegistrar::manage(std::vector< ::fwGui::container::fwMenu::sptr > me
 void ToolBarRegistrar::manage(std::vector< ::fwGui::container::fwContainer::sptr > containers )
 {
     ::fwGui::container::fwContainer::sptr container;
-    BOOST_FOREACH( SIDToolBarMapType::value_type sid, m_editorSids)
+    for( SIDToolBarMapType::value_type sid :  m_editorSids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < containers.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < containers.size());
         container = containers.at( sid.second.first );
         ::fwGui::GuiRegistry::registerSIDContainer(sid.first, container);
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             OSLM_ASSERT("Service "<<sid.first <<" must be stopped.", service->isStopped() );
             service->start();
         }
     }
+
+    for( WIDToolBarMapType::value_type wid :  m_editorWids)
+    {
+        OSLM_ASSERT("Container index "<< wid.second <<" is bigger than subViews size!", wid.second < containers.size());
+        container = containers.at( wid.second );
+        ::fwGui::GuiRegistry::registerWIDContainer(wid.first, container);
+    }
 }
 
 //-----------------------------------------------------------------------------
 
 void ToolBarRegistrar::unmanage()
 {
-    BOOST_FOREACH( SIDToolBarMapType::value_type sid, m_actionSids)
+    for( SIDToolBarMapType::value_type sid :  m_actionSids)
     {
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterActionSIDToParentSID(sid.first, m_sid);
     }
-    BOOST_FOREACH( SIDToolBarMapType::value_type sid, m_menuSids)
+    for( SIDToolBarMapType::value_type sid :  m_menuSids)
     {
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDMenu(sid.first);
     }
-    BOOST_FOREACH( SIDToolBarMapType::value_type sid, m_editorSids)
+    for( SIDToolBarMapType::value_type sid :  m_editorSids)
     {
         if(sid.second.second) //service is auto started?
         {
             OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDContainer(sid.first);
     }
+    for( WIDToolBarMapType::value_type wid :  m_editorWids)
+    {
+        ::fwGui::GuiRegistry::unregisterWIDContainer(wid.first);
+    }
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp b/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp
index 5ed77af..4bedd2e 100644
--- a/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registrar/ViewRegistrar.cpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <utility>
+#include "fwGui/GuiRegistry.hpp"
+#include "fwGui/registrar/ViewRegistrar.hpp"
 
-#include <boost/foreach.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
 
 #include <fwTools/fwID.hpp>
-#include <fwServices/Base.hpp>
 
-#include "fwGui/GuiRegistry.hpp"
-#include "fwGui/registrar/ViewRegistrar.hpp"
+#include <utility>
 
 namespace fwGui
 {
@@ -21,15 +21,17 @@ namespace registrar
 
 //-----------------------------------------------------------------------------
 
-ViewRegistrar::ViewRegistrar(const std::string &sid)
+ViewRegistrar::ViewRegistrar(const std::string& sid)
     : m_parentWid(""),
       m_sid(sid)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ViewRegistrar::~ViewRegistrar()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -39,10 +41,13 @@ ViewRegistrar::~ViewRegistrar()
     if(!m_parentWid.empty())
     {
         parentContainer = ::fwGui::GuiRegistry::getWIDContainer(m_parentWid);
+        OSLM_ASSERT("No fwContainer with the wid '"<< m_parentWid <<"' exists in the WID container map.",
+                    parentContainer);
     }
     else
     {
         parentContainer = ::fwGui::GuiRegistry::getSIDContainer(m_sid);
+        OSLM_ASSERT("No fwContainer with the sid '"<< m_sid <<"' exists in the SID container map.", parentContainer );
     }
     return parentContainer;
 }
@@ -60,7 +65,7 @@ void ViewRegistrar::setParent(std::string wid)
 void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configuration)
 {
     OSLM_ASSERT("Bad configuration name "<<configuration->getName()<< ", must be viewRegistrar",
-            configuration->getName() == "registry");
+                configuration->getName() == "registry");
 
     // find parent container
     std::vector < ConfigurationType > vectParent = configuration->find("parent");
@@ -74,11 +79,14 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
     // index represents associated container with position in subViews vector
     unsigned int index = 0;
     // initialize m_sids and m_wids map with configuration
-    std::vector < ConfigurationType > vectViews = configuration->find("view");
-    BOOST_FOREACH( ConfigurationType view, vectViews)
+    std::vector < ConfigurationType > vectViews      = configuration->find("view");
+    std::vector < ConfigurationType > vectSlideViews = configuration->find("slideView");
+    std::copy (vectSlideViews.begin(), vectSlideViews.end(), std::back_inserter(vectViews));
+
+    for( ConfigurationType view :  vectViews)
     {
         SLM_ASSERT("<view> tag must have sid or wid attribute",
-                view->hasAttribute("sid") || view->hasAttribute("wid"));
+                   view->hasAttribute("sid") || view->hasAttribute("wid"));
         if(view->hasAttribute("sid"))
         {
             bool start = false;
@@ -86,7 +94,7 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
             {
                 std::string startValue = view->getAttributeValue("start");
                 SLM_ASSERT("Wrong value '"<< startValue <<"' for 'start' attribute (require yes or no)",
-                        startValue == "yes" || startValue == "no");
+                           startValue == "yes" || startValue == "no");
                 start = (startValue=="yes");
             }
             std::string sid = view->getAttributeValue("sid");
@@ -116,7 +124,7 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
                 start = (startValue=="yes");
             }
             std::string sid = menuBarCfg->getAttributeValue("sid");
-            m_menuBarSid =  std::make_pair( sid, start);
+            m_menuBarSid = std::make_pair( sid, start);
         }
     }
 
@@ -136,7 +144,7 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
                 start = (startValue=="yes");
             }
             std::string sid = toolBarCfg->getAttributeValue("sid");
-            m_toolBarSid =  std::make_pair( sid, start);
+            m_toolBarSid = std::make_pair( sid, start);
         }
     }
 }
@@ -146,22 +154,23 @@ void ViewRegistrar::initialize( ::fwRuntime::ConfigurationElement::sptr configur
 void ViewRegistrar::manage(std::vector< ::fwGui::container::fwContainer::sptr > subViews )
 {
     ::fwGui::container::fwContainer::sptr container;
-    BOOST_FOREACH( SIDContainerMapType::value_type sid, m_sids)
+    for( SIDContainerMapType::value_type sid :  m_sids)
     {
-        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!", sid.second.first < subViews.size());
+        OSLM_ASSERT("Container index "<< sid.second.first <<" is bigger than subViews size!",
+                    sid.second.first < subViews.size());
         container = subViews.at( sid.second.first );
         ::fwGui::GuiRegistry::registerSIDContainer(sid.first, container);
         if(sid.second.second) //service is auto started?
         {
-            OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            OSLM_ASSERT("Service "<<sid.first <<" does not exist.", ::fwTools::fwID::exist(sid.first ) );
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             OSLM_ASSERT("Service "<<sid.first <<" must be stopped.", service->isStopped() );
             SLM_TRACE("Starting " + sid.first);
             service->start();
         }
     }
 
-    BOOST_FOREACH( WIDContainerMapType::value_type wid, m_wids)
+    for( WIDContainerMapType::value_type wid :  m_wids)
     {
         OSLM_ASSERT("Container index "<< wid.second <<" is bigger than subViews size!", wid.second < subViews.size());
         container = subViews.at( wid.second );
@@ -176,8 +185,8 @@ void ViewRegistrar::manageMenuBar(::fwGui::container::fwMenuBar::sptr menuBar )
     ::fwGui::GuiRegistry::registerSIDMenuBar(m_menuBarSid.first, menuBar);
     if(m_menuBarSid.second) //service is auto started?
     {
-        OSLM_ASSERT("Service "<<m_menuBarSid.first <<" not exists.", ::fwTools::fwID::exist(m_menuBarSid.first ) );
-        ::fwServices::IService::sptr service = ::fwServices::get( m_menuBarSid.first ) ;
+        OSLM_ASSERT("Service "<<m_menuBarSid.first <<" does not exist.", ::fwTools::fwID::exist(m_menuBarSid.first ) );
+        ::fwServices::IService::sptr service = ::fwServices::get( m_menuBarSid.first );
         service->start();
     }
 }
@@ -189,8 +198,8 @@ void ViewRegistrar::manageToolBar(::fwGui::container::fwToolBar::sptr toolBar )
     ::fwGui::GuiRegistry::registerSIDToolBar(m_toolBarSid.first, toolBar);
     if(m_toolBarSid.second) //service is auto started?
     {
-        OSLM_ASSERT("Service "<<m_toolBarSid.first <<" not exists.", ::fwTools::fwID::exist(m_toolBarSid.first ) );
-        ::fwServices::IService::sptr service = ::fwServices::get( m_toolBarSid.first ) ;
+        OSLM_ASSERT("Service "<<m_toolBarSid.first <<" does not exist.", ::fwTools::fwID::exist(m_toolBarSid.first ) );
+        ::fwServices::IService::sptr service = ::fwServices::get( m_toolBarSid.first );
         service->start();
     }
 }
@@ -199,19 +208,19 @@ void ViewRegistrar::manageToolBar(::fwGui::container::fwToolBar::sptr toolBar )
 
 void ViewRegistrar::unmanage()
 {
-    BOOST_FOREACH( SIDContainerMapType::value_type sid, m_sids)
+    for( SIDContainerMapType::value_type sid :  m_sids)
     {
         if(sid.second.second) //service is auto started?
         {
-            OSLM_ASSERT("Service "<<sid.first <<" not exists.", ::fwTools::fwID::exist(sid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( sid.first ) ;
+            OSLM_ASSERT("Service "<<sid.first <<" does not exist.", ::fwTools::fwID::exist(sid.first ) );
+            ::fwServices::IService::sptr service = ::fwServices::get( sid.first );
             SLM_TRACE("Stopping " + sid.first);
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDContainer(sid.first);
     }
 
-    BOOST_FOREACH( WIDContainerMapType::value_type wid, m_wids)
+    for( WIDContainerMapType::value_type wid :  m_wids)
     {
         ::fwGui::GuiRegistry::unregisterWIDContainer(wid.first);
     }
@@ -225,8 +234,9 @@ void ViewRegistrar::unmanageToolBar()
     {
         if(m_toolBarSid.second) //service is auto started?
         {
-            OSLM_ASSERT("Service "<<m_toolBarSid.first <<" not exists.", ::fwTools::fwID::exist(m_toolBarSid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( m_toolBarSid.first ) ;
+            OSLM_ASSERT("Service "<<m_toolBarSid.first <<" does not exist.",
+                        ::fwTools::fwID::exist(m_toolBarSid.first ) );
+            ::fwServices::IService::sptr service = ::fwServices::get( m_toolBarSid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDToolBar(m_toolBarSid.first);
@@ -241,8 +251,9 @@ void ViewRegistrar::unmanageMenuBar()
     {
         if(m_menuBarSid.second) //service is auto started?
         {
-            OSLM_ASSERT("Service "<<m_menuBarSid.first <<" not exists.", ::fwTools::fwID::exist(m_menuBarSid.first ) );
-            ::fwServices::IService::sptr service = ::fwServices::get( m_menuBarSid.first ) ;
+            OSLM_ASSERT("Service "<<m_menuBarSid.first <<" does not exist.",
+                        ::fwTools::fwID::exist(m_menuBarSid.first ) );
+            ::fwServices::IService::sptr service = ::fwServices::get( m_menuBarSid.first );
             service->stop();
         }
         ::fwGui::GuiRegistry::unregisterSIDMenuBar(m_menuBarSid.first);
diff --git a/SrcLib/core/fwGui/src/fwGui/registry/detail.cpp b/SrcLib/core/fwGui/src/fwGui/registry/detail.cpp
index 95904da..f3cb50e 100644
--- a/SrcLib/core/fwGui/src/fwGui/registry/detail.cpp
+++ b/SrcLib/core/fwGui/src/fwGui/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@ namespace fwGui
 namespace registry
 {
 
-struct FwGuiRegistryInstantiatorTag {} ;
+struct FwGuiRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwGui/src/fwGui/registry/worker.cpp b/SrcLib/core/fwGui/src/fwGui/registry/worker.cpp
new file mode 100644
index 0000000..c4c53fb
--- /dev/null
+++ b/SrcLib/core/fwGui/src/fwGui/registry/worker.cpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGui/registry/worker.hpp"
+
+namespace fwGui
+{
+
+namespace registry
+{
+
+namespace worker
+{
+
+static ::fwThread::Worker::sptr s_worker;
+
+//-----------------------------------------------------------------------------
+
+void init(const ::fwThread::Worker::sptr& _worker)
+{
+    if(!s_worker)
+    {
+        s_worker = _worker;
+    }
+    else
+    {
+        SLM_WARN("Main worker has already been initialized");
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+const ::fwThread::Worker::sptr& get()
+{
+    SLM_WARN_IF("Main worker not yet initialized", !s_worker);
+    return s_worker;
+}
+
+//-----------------------------------------------------------------------------
+
+void reset()
+{
+    s_worker.reset();
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace worker
+
+} // namespace registry
+} // namespace fwGui
+
+
+
diff --git a/SrcLib/core/fwGuiQt/CMakeLists.txt b/SrcLib/core/fwGuiQt/CMakeLists.txt
index dc44b01..09b2eea 100644
--- a/SrcLib/core/fwGuiQt/CMakeLists.txt
+++ b/SrcLib/core/fwGuiQt/CMakeLists.txt
@@ -1,30 +1,23 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwGui
-    fwRuntime
-    fwTools
-)
 
 configure_file("${CMAKE_CURRENT_LIST_DIR}/bin/qt.conf" "${CMAKE_BINARY_DIR}/bin/qt.conf")
 
-if(${FWPROJECT_NAME}_INSTALL)
-	if(CLASSIC_INSTALL)
-    	install(DIRECTORY "${QT_DIR}/plugins/" DESTINATION qtplugins)
-    else()
-    	install(DIRECTORY "${QT_DIR}/plugins/" DESTINATION "/usr/lib/qtplugins")
-    endif()
-endif()
-
 add_definitions("-DQT_NO_KEYWORDS")
 
+find_package(Qt5 COMPONENTS Core Gui Widgets Concurrent REQUIRED)
 
-find_package(Boost REQUIRED)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
-
+fwForwardInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${Qt5Gui_INCLUDE_DIRS}
+    ${Qt5Widgets_INCLUDE_DIRS}
+    ${Qt5Concurrent_INCLUDE_DIRS}
+)
 
-fwForwardInclude(${Boost_INCLUDE_DIRS} ${QT_INCLUDE_DIR})
-fwLink(${QT_LIBRARIES})
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+    ${Qt5Concurrent_LIBRARIES}
+)
 
 set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/SrcLib/core/fwGuiQt/COPYING b/SrcLib/core/fwGuiQt/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwGuiQt/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwGuiQt/COPYING.LESSER b/SrcLib/core/fwGuiQt/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwGuiQt/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwGuiQt/bin/build.options b/SrcLib/core/fwGuiQt/bin/build.options
deleted file mode 100644
index d6a00bf..0000000
--- a/SrcLib/core/fwGuiQt/bin/build.options
+++ /dev/null
@@ -1,19 +0,0 @@
-USE        = [
-        'boost',
-        'qtGui',
-        'qtIconenginesPlugins',
-        'qtImageformatsPlugins',
-    ]
-
-LIB        = [
-    'fwGui_0-1',
-    'fwData_0-1',
-    'fwTools_0-1',
-    'fwCore_0-1',
-    'fwServices_0-1',
-    'fwThread_0-1',
-    ]
-
-TYPE       = 'shared'
-GLOBAL_DEF = ['QT_NO_KEYWORDS']
-VERSION    = '0-1'
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/ActionCallback.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/ActionCallback.hpp
index f7e0a61..53cf8a4 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/ActionCallback.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/ActionCallback.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_ACTIONCALLBACK_HPP_
-#define _FWGUIQT_ACTIONCALLBACK_HPP_
+#ifndef __FWGUIQT_ACTIONCALLBACK_HPP__
+#define __FWGUIQT_ACTIONCALLBACK_HPP__
 
 
 #include <QObject>
@@ -21,24 +21,25 @@ namespace fwGuiQt
 /**
  * @brief   Defines the menu item callback.
  * @class   ActionCallback
- * 
+ *
  * @date    2009-2010.
  *
  */
-class FWGUIQT_CLASS_API ActionCallback :  public QObject, public ::fwGui::ActionCallbackBase
+class FWGUIQT_CLASS_API ActionCallback :  public QObject,
+                                          public ::fwGui::ActionCallbackBase
 {
 
-    Q_OBJECT
+Q_OBJECT
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (ActionCallback)(::fwGui::ActionCallbackBase),
                                             (()),
                                             ::fwGui::factory::New< ActionCallback > );
 
-    FWGUIQT_API ActionCallback(::fwGui::GuiBaseObject::Key key) ;
+    FWGUIQT_API ActionCallback(::fwGui::GuiBaseObject::Key key);
 
-    FWGUIQT_API virtual ~ActionCallback() ;
+    FWGUIQT_API virtual ~ActionCallback();
 
     /**
      * @brief  Qt slot.
@@ -51,6 +52,6 @@ public Q_SLOTS:
 
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_ACTIONCALLBACK_HPP_*/
+#endif /*__FWGUIQT_ACTIONCALLBACK_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/App.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/App.hpp
index 47a00b7..e54518f 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/App.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/App.hpp
@@ -1,19 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQT_APP_HPP_
-#define FWGUIQT_APP_HPP_
-
-#include <QApplication>
-
-#include <fwRuntime/profile/Profile.hpp>
+#ifndef __FWGUIQT_APP_HPP__
+#define __FWGUIQT_APP_HPP__
 
 #include "fwGuiQt/config.hpp"
 
+#include <fwRuntime/profile/Profile.hpp>
 
+#include <QApplication>
 
 namespace fwGuiQt
 {
@@ -21,26 +19,21 @@ namespace fwGuiQt
 /**
  * @brief   Defines the Qt application.
  * @class   App
- * 
- * @date    2009.
  */
-
 class FWGUIQT_CLASS_API App : public QApplication
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
-    FWGUIQT_API App(int & argc, char ** argv);
+    FWGUIQT_API App(int & argc, char ** argv, bool guiEnabled);
 
-public Q_SLOTS :
-  void aboutToQuit();
-  void onExit();
+public Q_SLOTS:
+    void aboutToQuit();
+    void onExit();
 
 };
 
-
-
 } // namespace fwGuiQt
 
 
-#endif /*FWGUIQT_APP_HPP_*/
+#endif /*__FWGUIQT_APP_HPP__*/
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/Application.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/Application.hpp
index 4a5ba56..943aef2 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/Application.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/Application.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_APPLICATION_HPP_
-#define _FWGUIQT_APPLICATION_HPP_
+#ifndef __FWGUIQT_APPLICATION_HPP__
+#define __FWGUIQT_APPLICATION_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -19,7 +19,7 @@ namespace fwGuiQt
 /**
  * @brief   Gives access to the qt application part
  * @class   Application
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -28,9 +28,13 @@ class FWGUIQT_CLASS_API Application : public ::fwGui::Application
 
 public:
 
-    Application(::fwGui::GuiBaseObject::Key key){};
+    Application(::fwGui::GuiBaseObject::Key key)
+    {
+    }
 
-    virtual ~Application(){};
+    virtual ~Application()
+    {
+    }
 
     /// Tells the application to exit with a returncode
     FWGUIQT_API virtual void exit( int returncode = 0);
@@ -39,6 +43,6 @@ public:
 
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_APPLICATION_HPP_*/
+#endif /*__FWGUIQT_APPLICATION_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/Cursor.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/Cursor.hpp
index 9cd9741..79454ca 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/Cursor.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/Cursor.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_CURSOR_HPP_
-#define _FWGUIQT_CURSOR_HPP_
+#ifndef __FWGUIQT_CURSOR_HPP__
+#define __FWGUIQT_CURSOR_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -19,7 +19,7 @@ namespace fwGuiQt
 /**
  * @brief   Defines the generic cursor for IHM.
  * @class   Cursor
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -46,6 +46,6 @@ public:
 
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_CURSOR_HPP_*/
+#endif /*__FWGUIQT_CURSOR_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/Namespace.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/Namespace.hpp
index 8af6083..280a2d8 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/Namespace.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/Namespace.hpp
@@ -1,16 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQTNAMESPACE_HPP_
-#define FWGUIQTNAMESPACE_HPP_
+#ifndef __FWGUIQT_NAMESPACE_HPP__
+#define __FWGUIQT_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwGuiQt contains classes which provide the implementation of the Gui using Qt library.
  * @namespace   fwGuiQt
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -18,4 +18,4 @@
 namespace fwGuiQt
 {
 }
-#endif /* FWGUIQTNAMESPACE_HPP_ */
+#endif /* __FWGUIQT_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/QtMainFrame.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/QtMainFrame.hpp
index 2b90138..7ce0976 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/QtMainFrame.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/QtMainFrame.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_MAINFRAME_HPP_
-#define _FWGUIQT_MAINFRAME_HPP_
+#ifndef __FWGUIQT_QTMAINFRAME_HPP__
+#define __FWGUIQT_QTMAINFRAME_HPP__
 
 
 #include <QPointer>
@@ -20,12 +20,12 @@ namespace fwGuiQt
 
 /**
  * @brief A qt panel used to control a VTK 2D Negatoscope view.
- * 
+ *
  */
 class QtMainFrame : public QMainWindow
 {
 
-    Q_OBJECT
+Q_OBJECT
 
 public:
     /**
@@ -50,4 +50,4 @@ private:
 
 } // fwGuiQt
 
-#endif // _FWGUIQT_MAINFRAME_HPP_
+#endif // __FWGUIQT_QTMAINFRAME_HPP__
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/SliceSelector.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/SliceSelector.hpp
index c7e89b1..3e5a977 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/SliceSelector.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/SliceSelector.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_SLICESELECTOR_HPP_
-#define _FWGUIQT_SLICESELECTOR_HPP_
+#ifndef __FWGUIQT_SLICESELECTOR_HPP__
+#define __FWGUIQT_SLICESELECTOR_HPP__
 
 
 #include <QObject>
@@ -28,12 +28,12 @@ namespace fwGuiQt
 
 /**
  * @brief A qt panel used to control a VTK 2D Negatoscope view.
- * 
+ *
  */
 class SliceSelector : public QWidget
 {
 
-    Q_OBJECT
+Q_OBJECT
 
 public:
     /**
@@ -78,9 +78,6 @@ private:
 
     QPointer< QComboBox > m_sliceType;
 
-    /// @brief Slice type names as a qt string array.
-    static const QStringList m_sliceTypesArray;
-
     /// @brief The slice index slider widget.
     QPointer< QSlider > m_sliceIndex;
     QPointer< QLineEdit > m_pSliceIndexText;
@@ -94,4 +91,4 @@ private:
 
 } // fwGuiQt
 
-#endif // _FWGUIQT_SLICESELECTOR_HPP_
+#endif // __FWGUIQT_SLICESELECTOR_HPP__
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/WorkerQt.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/WorkerQt.hpp
index a4025fe..4679842 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/WorkerQt.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/WorkerQt.hpp
@@ -1,17 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQT_WORKERQT_HPP_
-#define FWGUIQT_WORKERQT_HPP_
+#ifndef __FWGUIQT_WORKERQT_HPP__
+#define __FWGUIQT_WORKERQT_HPP__
 
 #include "fwGuiQt/config.hpp"
 
+#include <fwCore/base.hpp>
+
 namespace fwThread
 {
-    class Worker;
+class Worker;
 } //namespace fwThread
 
 
@@ -19,9 +21,13 @@ namespace fwThread
 namespace fwGuiQt
 {
 
-FWGUIQT_API SPTR(::fwThread::Worker) getQtWorker( int &argc, char **argv );
+//-----------------------------------------------------------------------------
+
+FWGUIQT_API SPTR(::fwThread::Worker) getQtWorker(int& argc, char **argv, bool guiEnabled = true);
+
+//-----------------------------------------------------------------------------
 
 } //namespace fwGui
 
-#endif /*FWGUIQT_WORKERQT_HPP_*/
+#endif /*__FWGUIQT_WORKERQT_HPP__*/
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ContainerBuilder.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ContainerBuilder.hpp
index 5c2b88b..d0ecb21 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ContainerBuilder.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ContainerBuilder.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_BUILDER_CONTAINERBUILDER_HPP_
-#define _FWGUIQT_BUILDER_CONTAINERBUILDER_HPP_
+#ifndef __FWGUIQT_BUILDER_CONTAINERBUILDER_HPP__
+#define __FWGUIQT_BUILDER_CONTAINERBUILDER_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -14,6 +14,7 @@
 #include <fwGui/container/fwContainer.hpp>
 
 #include "fwGuiQt/config.hpp"
+#include "fwGuiQt/container/QtContainer.hpp"
 
 namespace fwGui
 {
@@ -23,7 +24,7 @@ namespace builder
 /**
  * @brief   Defines the generic layout manager for IHM.
  * @class   ContainerBuilder
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -60,6 +61,6 @@ protected:
 } // namespace builder
 } // namespace fwGui
 
-#endif /*_FWGUIQT_BUILDER_CONTAINERBUILDER_HPP_*/
+#endif /*__FWGUIQT_BUILDER_CONTAINERBUILDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/MenuBarBuilder.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/MenuBarBuilder.hpp
index 4b5627c..f8d275f 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/MenuBarBuilder.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/MenuBarBuilder.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_BUILDER_MENUBARBUILDER_HPP_
-#define _FWGUIQT_BUILDER_MENUBARBUILDER_HPP_
+#ifndef __FWGUIQT_BUILDER_MENUBARBUILDER_HPP__
+#define __FWGUIQT_BUILDER_MENUBARBUILDER_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -15,7 +15,7 @@
 #include <fwGui/container/fwContainer.hpp>
 
 #include "fwGuiQt/config.hpp"
-
+#include "fwGuiQt/container/QtContainer.hpp"
 namespace fwGui
 {
 namespace builder
@@ -24,7 +24,7 @@ namespace builder
 /**
  * @brief   Defines the generic layout manager for IHM.
  * @class   MenuBarBuilder
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -59,6 +59,6 @@ protected:
 } // namespace builder
 } // namespace fwGui
 
-#endif /*_FWGUIQT_BUILDER_MENUBARBUILDER_HPP_*/
+#endif /*__FWGUIQT_BUILDER_MENUBARBUILDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/Namespace.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/Namespace.hpp
index dce5935..cceef89 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/Namespace.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQTBUILDERNAMESPACE_HPP_
-#define FWGUIQTBUILDERNAMESPACE_HPP_
+#ifndef __FWGUIQT_BUILDER_NAMESPACE_HPP__
+#define __FWGUIQT_BUILDER_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
  * @brief       The namespace fwGui::builder contains the classes for GUI elements builder implementation with the Qt library.
  * @namespace   fwGui::builder
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -22,4 +22,4 @@ namespace builder
 
 }
 }
-#endif /* FWGUIQTBUILDERNAMESPACE_HPP_ */
+#endif /* __FWGUIQT_BUILDER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/SlideViewBuilder.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/SlideViewBuilder.hpp
new file mode 100644
index 0000000..7d9c866
--- /dev/null
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/SlideViewBuilder.hpp
@@ -0,0 +1,56 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUIQT_BUILDER_SLIDEVIEWBUILDER_HPP__
+#define __FWGUIQT_BUILDER_SLIDEVIEWBUILDER_HPP__
+
+#include "fwGuiQt/config.hpp"
+#include "fwGuiQt/container/QtContainer.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwGui/builder/ISlideViewBuilder.hpp>
+#include <fwGui/container/fwContainer.hpp>
+
+
+namespace fwGui
+{
+namespace builder
+{
+
+/**
+ * @brief   Defines the qt implementation of the slide view builder.
+ */
+class FWGUIQT_CLASS_API SlideViewBuilder : public ::fwGui::builder::ISlideViewBuilder
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (SlideViewBuilder)(::fwGui::builder::ISlideViewBuilder),
+                                            (()),
+                                            ::fwGui::factory::New< SlideViewBuilder >);
+
+    FWGUIQT_API SlideViewBuilder(::fwGui::GuiBaseObject::Key key);
+
+    FWGUIQT_API virtual ~SlideViewBuilder();
+
+    /// Create the slide view container
+    FWGUIQT_API virtual void createContainer( ::fwGui::container::fwContainer::sptr parent );
+
+    /**
+     * @brief Destroy local layout with sub containers.
+     * @pre services using this sub containers must be stopped before.
+     */
+    FWGUIQT_API virtual void destroyContainer();
+
+protected:
+    ::fwGuiQt::container::QtContainer::sptr m_parent;
+};
+
+} // namespace builder
+} // namespace fwGui
+
+#endif /*__FWGUIQT_BUILDER_SLIDEVIEWBUILDER_HPP__*/
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ToolBarBuilder.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ToolBarBuilder.hpp
index e2f5924..dec48cb 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ToolBarBuilder.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/builder/ToolBarBuilder.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_BUILDER_TOOLBARBUILDER_HPP_
-#define _FWGUIQT_BUILDER_TOOLBARBUILDER_HPP_
+#ifndef __FWGUIQT_BUILDER_TOOLBARBUILDER_HPP__
+#define __FWGUIQT_BUILDER_TOOLBARBUILDER_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -15,6 +15,7 @@
 #include <fwGui/container/fwContainer.hpp>
 
 #include "fwGuiQt/config.hpp"
+#include "fwGuiQt/container/QtContainer.hpp"
 
 namespace fwGui
 {
@@ -24,7 +25,7 @@ namespace builder
 /**
  * @brief   Defines the generic layout manager for IHM.
  * @class   ToolBarBuilder
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -59,6 +60,6 @@ protected:
 } // namespace builder
 } // namespace fwGui
 
-#endif /*_FWGUIQT_BUILDER_TOOLBARBUILDER_HPP_*/
+#endif /*__FWGUIQT_BUILDER_TOOLBARBUILDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/config.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/config.hpp
deleted file mode 100644
index 20917ee..0000000
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-
-#ifndef _FWGUIQT_CONFIG_HPP_
-#define _FWGUIQT_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWGUIQT_EXPORTS
-    #define FWGUIQT_API __declspec(dllexport)
-    #else
-    #define FWGUIQT_API __declspec(dllimport)
-    #endif
-
-    #define FWGUIQT_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWGUIQT_EXPORTS
-    #define FWGUIQT_API __attribute__ ((visibility("default")))
-    #define FWGUIQT_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWGUIQT_API __attribute__ ((visibility("hidden")))
-    //#define FWGUIQT_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWGUIQT_API
-    #define FWGUIQT_CLASS_API
-    #endif
-
-#else
-
-    #define FWGUIQT_API
-    #define FWGUIQT_CLASS_API
-
-#endif
-
-#endif //_FWGUIQT_CONFIG_HPP_
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/Namespace.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/Namespace.hpp
index f842a3b..9f781d2 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/Namespace.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQTCONTAINERNAMESPACE_HPP_
-#define FWGUIQTCONTAINERNAMESPACE_HPP_
+#ifndef __FWGUIQT_CONTAINER_NAMESPACE_HPP__
+#define __FWGUIQT_CONTAINER_NAMESPACE_HPP__
 
 namespace fwGuiQt
 {
 /**
  * @brief       The namespace fwGuiQt::container contains the classes used for container implementation with Qt Library.
  * @namespace   fwGuiQt::container
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace container
 
 }
 }
-#endif /* FWGUIQTCONTAINERNAMESPACE_HPP_ */
+#endif /* __FWGUIQT_CONTAINER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtContainer.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtContainer.hpp
index 05b73c4..64a45d2 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtContainer.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtContainer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_CONTAINER_QTCONTAINER_HPP_
-#define _FWGUIQT_CONTAINER_QTCONTAINER_HPP_
+#ifndef __FWGUIQT_CONTAINER_QTCONTAINER_HPP__
+#define __FWGUIQT_CONTAINER_QTCONTAINER_HPP__
 
 #include <QPointer>
 
@@ -30,7 +30,7 @@ namespace container
 /**
  * @brief   Defines the QWidget container for IHM.
  * @class   QtContainer
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -43,9 +43,9 @@ public:
                                             (()),
                                             ::fwGui::factory::New< QtContainer > );
 
-    FWGUIQT_API QtContainer(::fwGui::GuiBaseObject::Key key) throw() ;
+    FWGUIQT_API QtContainer(::fwGui::GuiBaseObject::Key key) throw();
 
-    FWGUIQT_API virtual ~QtContainer() throw() ;
+    FWGUIQT_API virtual ~QtContainer() throw();
 
 
     FWGUIQT_API virtual void clean();
@@ -56,8 +56,9 @@ public:
     FWGUIQT_API virtual bool isShownOnScreen();
 
     FWGUIQT_API virtual void setVisible(bool isVisible);
+    FWGUIQT_API virtual void setEnabled(bool isEnabled);
 
-private :
+private:
 
     QPointer<QWidget> m_container;
 };
@@ -65,6 +66,6 @@ private :
 } // namespace container
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_CONTAINER_QTCONTAINER_HPP_*/
+#endif /*__FWGUIQT_CONTAINER_QTCONTAINER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuBarContainer.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuBarContainer.hpp
index 48d03ff..67159d1 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuBarContainer.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuBarContainer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_CONTAINER_QTMENUBARCONTAINER_HPP_
-#define _FWGUIQT_CONTAINER_QTMENUBARCONTAINER_HPP_
+#ifndef __FWGUIQT_CONTAINER_QTMENUBARCONTAINER_HPP__
+#define __FWGUIQT_CONTAINER_QTMENUBARCONTAINER_HPP__
 
 #include <QPointer>
 
@@ -31,7 +31,7 @@ namespace container
 /**
  * @brief   Defines the Qt menu bar container for GUI.
  * @class   QtMenuBarContainer
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -44,9 +44,9 @@ public:
                                             (()),
                                             ::fwGui::factory::New< QtMenuBarContainer > );
 
-    FWGUIQT_API QtMenuBarContainer(::fwGui::GuiBaseObject::Key key) throw() ;
+    FWGUIQT_API QtMenuBarContainer(::fwGui::GuiBaseObject::Key key) throw();
 
-    FWGUIQT_API virtual ~QtMenuBarContainer() throw() ;
+    FWGUIQT_API virtual ~QtMenuBarContainer() throw();
 
 
     FWGUIQT_API virtual void clean();
@@ -55,7 +55,7 @@ public:
     FWGUIQT_API virtual void setQtMenuBar(QMenuBar *menuBar);
     FWGUIQT_API virtual QMenuBar* getQtMenuBar();
 
-private :
+private:
 
     QPointer<QMenuBar> m_menuBar;
 };
@@ -63,6 +63,6 @@ private :
 } // namespace container
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_CONTAINER_QTMENUBARCONTAINER_HPP_*/
+#endif /*__FWGUIQT_CONTAINER_QTMENUBARCONTAINER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuContainer.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuContainer.hpp
index 43cfccf..1fd6111 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuContainer.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuContainer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_CONTAINER_QTMENUCONTAINER_HPP_
-#define _FWGUIQT_CONTAINER_QTMENUCONTAINER_HPP_
+#ifndef __FWGUIQT_CONTAINER_QTMENUCONTAINER_HPP__
+#define __FWGUIQT_CONTAINER_QTMENUCONTAINER_HPP__
 
 #include <QPointer>
 
@@ -30,7 +30,7 @@ namespace container
 /**
  * @brief   Defines the Qt menu bar container for IHM.
  * @class   QtMenuContainer
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -43,9 +43,9 @@ public:
                                             (()),
                                             ::fwGui::factory::New< QtMenuContainer > );
 
-    FWGUIQT_API QtMenuContainer(::fwGui::GuiBaseObject::Key key) throw() ;
+    FWGUIQT_API QtMenuContainer(::fwGui::GuiBaseObject::Key key) throw();
 
-    FWGUIQT_API virtual ~QtMenuContainer() throw() ;
+    FWGUIQT_API virtual ~QtMenuContainer() throw();
 
 
     FWGUIQT_API virtual void clean();
@@ -54,7 +54,7 @@ public:
     FWGUIQT_API virtual void setQtMenu(QMenu *menu);
     FWGUIQT_API virtual QMenu* getQtMenu();
 
-private :
+private:
 
     QPointer<QMenu> m_menu;
 };
@@ -62,6 +62,6 @@ private :
 } // namespace container
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_CONTAINER_QTMENUCONTAINER_HPP_*/
+#endif /*__FWGUIQT_CONTAINER_QTMENUCONTAINER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuItemContainer.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuItemContainer.hpp
index 8ee3c32..8fdcf73 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuItemContainer.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtMenuItemContainer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_CONTAINER_QTMENUITEMCONTAINER_HPP_
-#define _FWGUIQT_CONTAINER_QTMENUITEMCONTAINER_HPP_
+#ifndef __FWGUIQT_CONTAINER_QTMENUITEMCONTAINER_HPP__
+#define __FWGUIQT_CONTAINER_QTMENUITEMCONTAINER_HPP__
 
 #include <QPointer>
 
@@ -28,7 +28,7 @@ namespace container
 /**
  * @brief   Defines the Qt menuItem bar container for IHM.
  * @class   QtMenuItemContainer
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -41,9 +41,9 @@ public:
                                             (()),
                                             ::fwGui::factory::New< QtMenuItemContainer > );
 
-    FWGUIQT_API QtMenuItemContainer(::fwGui::GuiBaseObject::Key key) throw() ;
+    FWGUIQT_API QtMenuItemContainer(::fwGui::GuiBaseObject::Key key) throw();
 
-    FWGUIQT_API virtual ~QtMenuItemContainer() throw() ;
+    FWGUIQT_API virtual ~QtMenuItemContainer() throw();
 
 
     FWGUIQT_API virtual void clean();
@@ -52,7 +52,7 @@ public:
     FWGUIQT_API virtual void setQtMenuItem(QAction* menuItem);
     FWGUIQT_API virtual QAction* getQtMenuItem();
 
-private :
+private:
 
     QPointer<QAction> m_menuItem;
 };
@@ -60,6 +60,6 @@ private :
 } // namespace container
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_CONTAINER_QTMENUITEMCONTAINER_HPP_*/
+#endif /*__FWGUIQT_CONTAINER_QTMENUITEMCONTAINER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtToolBarContainer.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtToolBarContainer.hpp
index 47a6648..4af9826 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtToolBarContainer.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/container/QtToolBarContainer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_CONTAINER_QTTOOLBARCONTAINER_HPP_
-#define _FWGUIQT_CONTAINER_QTTOOLBARCONTAINER_HPP_
+#ifndef __FWGUIQT_CONTAINER_QTTOOLBARCONTAINER_HPP__
+#define __FWGUIQT_CONTAINER_QTTOOLBARCONTAINER_HPP__
 
 #include <QPointer>
 
@@ -30,7 +30,7 @@ namespace container
 /**
  * @brief   Defines the Qt toolBar bar container for IHM.
  * @class   QtToolBarContainer
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -43,9 +43,9 @@ public:
                                             (()),
                                             ::fwGui::factory::New< QtToolBarContainer > );
 
-    FWGUIQT_API QtToolBarContainer(::fwGui::GuiBaseObject::Key key) throw() ;
+    FWGUIQT_API QtToolBarContainer(::fwGui::GuiBaseObject::Key key) throw();
 
-    FWGUIQT_API virtual ~QtToolBarContainer() throw() ;
+    FWGUIQT_API virtual ~QtToolBarContainer() throw();
 
 
     FWGUIQT_API virtual void clean();
@@ -54,7 +54,7 @@ public:
     FWGUIQT_API virtual void setQtToolBar(QToolBar *toolBar);
     FWGUIQT_API virtual QToolBar* getQtToolBar();
 
-private :
+private:
 
     QPointer<QToolBar> m_toolBar;
 };
@@ -62,6 +62,6 @@ private :
 } // namespace container
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_CONTAINER_QTTOOLBARCONTAINER_HPP_*/
+#endif /*__FWGUIQT_CONTAINER_QTTOOLBARCONTAINER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/InputDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/InputDialog.hpp
index 347f90c..49d338a 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/InputDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/InputDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_INPUTDIALOG_HPP_
-#define _FWGUIQT_INPUTDIALOG_HPP_
+#ifndef __FWGUIQT_DIALOG_INPUTDIALOG_HPP__
+#define __FWGUIQT_DIALOG_INPUTDIALOG_HPP__
 
 #include <string>
 #include <fwCore/base.hpp>
@@ -21,17 +21,17 @@ namespace dialog
 /**
  * @brief   Defines an Input dialog.
  * @class   InputDialog
- * 
+ *
  * @date    2009-2010.
  *
  * Example of use:
- * @verbatim
-  ::fwGui::dialog::InputDialog inputDlg;
-  inputDlg.setTitle("Identification dialog");
-  inputDlg.setMessage("Enter Pin Code: ");
-  inputDlg.setInput ("<Enter your code here>");
-  std::string inputText = inputDlg.getInput();
-  @endverbatim
+ * @code
+   ::fwGui::dialog::InputDialog inputDlg;
+   inputDlg.setTitle("Identification dialog");
+   inputDlg.setMessage("Enter Pin Code: ");
+   inputDlg.setInput ("<Enter your code here>");
+   std::string inputText = inputDlg.getInput();
+   @endcode
  */
 class FWGUIQT_CLASS_API InputDialog : public ::fwGui::dialog::IInputDialog
 {
@@ -70,6 +70,4 @@ protected:
 } // namespace dialog
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_INPUTDIALOG_HPP_*/
-
-
+#endif /*__FWGUIQT_DIALOG_INPUTDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LocationDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LocationDialog.hpp
index d40ba5a..e4374f2 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LocationDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LocationDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LOCATIONDIALOG_HPP_
-#define _FWGUIQT_LOCATIONDIALOG_HPP_
+#ifndef __FWGUIQT_DIALOG_LOCATIONDIALOG_HPP__
+#define __FWGUIQT_DIALOG_LOCATIONDIALOG_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -20,7 +20,7 @@ class QString;
 /**
  * @brief       The namespace fwGuiQt contains classes which provide the implementation of the Gui using Qt library.
  * @namespace   fwGuiQt
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -31,7 +31,7 @@ namespace dialog
 /**
  * @brief   Defines the generic file/folder dialog for IHM.
  * @class   LocationDialog
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -63,11 +63,15 @@ protected:
 
     /// helper to transform m_filters into qt encoding ("BMP and GIF files (*.bmp *.gif);;PNG files (*.png)"
     QString fileFilters();
+    /// Gets the current extension file selection
+    FWGUIQT_API std::string getCurrentSelection() const;
+
+    std::string m_wildcard;
 
 };
 } // namespace dialog
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_LOCATIONDIALOG_HPP_*/
+#endif /*__FWGUIQT_DIALOG_LOCATIONDIALOG_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LoggerDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LoggerDialog.hpp
new file mode 100644
index 0000000..a5e4671
--- /dev/null
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/LoggerDialog.hpp
@@ -0,0 +1,100 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUIQT_DIALOG_LOGGERDIALOG_HPP__
+#define __FWGUIQT_DIALOG_LOGGERDIALOG_HPP__
+
+#include "fwGuiQt/config.hpp"
+
+#include <fwGui/dialog/ILoggerDialog.hpp>
+
+#include <QDialog>
+#include <QPointer>
+#include <QTableWidget>
+
+#include <vector>
+
+namespace fwGuiQt
+{
+namespace dialog
+{
+//------------------------------------------------------------------------------
+
+/**
+ * @brief   LoggerDialog allowing the choice of an element among severals (_selections)
+ *
+ */
+
+class FWGUIQT_CLASS_API LoggerDialog : public QDialog,
+                                       public ::fwGui::dialog::ILoggerDialog
+{
+Q_OBJECT
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro( (LoggerDialog)(::fwGui::dialog::ILoggerDialog),
+                                            (()),
+                                            ::fwGui::factory::New< LoggerDialog > );
+
+    /// Constructor
+    FWGUIQT_API LoggerDialog(::fwGui::GuiBaseObject::Key key);
+
+    /// Destructor
+    FWGUIQT_API virtual ~LoggerDialog();
+
+    /**
+     * @brief Set the dialog title.
+     * @param[in] title Dialog title
+     */
+    FWGUIQT_API virtual void setTitle(const std::string& title);
+
+    /**
+     * @brief Set the dialog message.
+     * @param[in] message Dialog message
+     */
+    FWGUIQT_API virtual void setMessage(const std::string& message);
+
+    /**
+     * @brief Set the dialog logger.
+     * @param[in] logger Dialog logger
+     */
+    FWGUIQT_API virtual void setLogger(const ::fwLog::Logger::sptr& logger);
+
+    /**
+     * @brief Show the dialog and return whether the user has selected the Ok or Cancel button
+     */
+    FWGUIQT_API virtual bool show();
+
+protected Q_SLOTS:
+
+    /**
+     * @brief Slot called when the user wants to display the logs
+     * @param[in] state Checkbox state
+     */
+    void displayLogs(int state);
+
+
+private:
+    /// Dialog title
+    std::string m_title;
+
+    /// Dialog message
+    std::string m_message;
+
+    /// Logger
+    ::fwLog::Logger::sptr m_logger;
+
+    /// Qt dialog
+    QPointer<QDialog> m_dialog;
+
+    /// Table widget used to display logs
+    QPointer<QTableWidget> m_logTableWidget;
+};
+
+} // namespace dialog
+} // namespace fwGuiQt
+
+#endif /*__FWGUIQT_DIALOG_LOGGERDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MessageDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MessageDialog.hpp
index 30f510c..e0a5a6b 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MessageDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MessageDialog.hpp
@@ -1,29 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_MESSAGEBOX_HPP_
-#define _FWGUIQT_MESSAGEBOX_HPP_
+#ifndef __FWGUIQT_DIALOG_MESSAGEDIALOG_HPP__
+#define __FWGUIQT_DIALOG_MESSAGEDIALOG_HPP__
+
+
+#include "fwGuiQt/config.hpp"
 
-#include <string>
 #include <fwCore/base.hpp>
 
 #include <fwGui/dialog/IMessageDialog.hpp>
 
-#include "fwGuiQt/config.hpp"
+#include <QVector>
+
+#include <string>
+
+class QPushButton;
+
 
 namespace fwGuiQt
 {
 namespace dialog
 {
+
 /**
- * @brief   Defines the generic message box for IHM.
- * @class   MessageDialog
- *
- * @date    2009-2010.
- *
+ * @brief Defines the generic message box for IHM.
+ * @class MessageDialog
  */
 class FWGUIQT_CLASS_API MessageDialog : public ::fwGui::dialog::IMessageDialog
 {
@@ -50,6 +55,9 @@ public:
     /// Add a button (OK, YES_NO, CANCEL)
     FWGUIQT_API virtual void addButton( IMessageDialog::Buttons button );
 
+    /// Add a custom button to this dialog
+    FWGUIQT_API void addCustomButton(QPushButton* button);
+
     /// Set the default buttons
     FWGUIQT_API virtual void setDefaultButton( IMessageDialog::Buttons button );
 
@@ -57,20 +65,28 @@ public:
     FWGUIQT_API virtual Buttons show();
 
 protected:
+
     /// Dialog title
     std::string m_title;
+
     /// Dialog box message
     std::string m_message;
+
     /// List of the button
     ::fwGui::dialog::IMessageDialog::Buttons m_buttons;
+
     /// default buttons
     ::fwGui::dialog::IMessageDialog::Buttons m_defaultButton;
+
     /// Icon
     ::fwGui::dialog::IMessageDialog::Icons m_icon;
+
+    /// Stores custom buttons
+    QVector< QPushButton* > m_customButtons;
 };
+
 } // namespace dialog
 } // namespace fwGuiQt
 
-#endif /*_FWGUIQT_MESSAGEBOX_HPP_*/
-
+#endif /* __FWGUIQT_DIALOG_MESSAGEDIALOG_HPP__ */
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MultiSelectorDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MultiSelectorDialog.hpp
index 9658bbe..467655a 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MultiSelectorDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/MultiSelectorDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQT_MULTISELECTORDIALOG_HPP_
-#define FWGUIQT_MULTISELECTORDIALOG_HPP_
+#ifndef __FWGUIQT_DIALOG_MULTISELECTORDIALOG_HPP__
+#define __FWGUIQT_DIALOG_MULTISELECTORDIALOG_HPP__
 
 #include <vector>
 
@@ -27,11 +27,12 @@ namespace dialog
 /**
  * @brief   MultiSelectorDialog allowing the choice of an element among severals (_selections)
  * @class   MultiSelectorDialog
- * 
+ *
  * @date    2009.
  */
 
-class FWGUIQT_CLASS_API MultiSelectorDialog : public ::fwGui::dialog::IMultiSelectorDialog,  public QDialog
+class FWGUIQT_CLASS_API MultiSelectorDialog : public ::fwGui::dialog::IMultiSelectorDialog,
+                                              public QDialog
 {
 public:
 
@@ -39,7 +40,7 @@ public:
                                             (()),
                                             ::fwGui::factory::New< MultiSelectorDialog > );
 
-    FWGUIQT_API MultiSelectorDialog(::fwGui::GuiBaseObject::Key key) ;
+    FWGUIQT_API MultiSelectorDialog(::fwGui::GuiBaseObject::Key key);
 
     FWGUIQT_API virtual ~MultiSelectorDialog();
 
@@ -60,7 +61,7 @@ public:
 
     FWGUIQT_API virtual void setMessage(const std::string &msg);
 
-private :
+private:
 
     Selections m_selections;
     /// Dialog box message
@@ -71,4 +72,4 @@ private :
 } // namespace dialog
 } // namespace fwGuiQt
 
-#endif /*FWGUIQT_MULTISELECTORDIALOG_HPP_*/
+#endif /*__FWGUIQT_DIALOG_MULTISELECTORDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/Namespace.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/Namespace.hpp
index 9cfd5f4..1b5bba2 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/Namespace.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQTDIALOGNAMESPACE_HPP_
-#define FWGUIQTDIALOGNAMESPACE_HPP_
+#ifndef __FWGUIQT_DIALOG_NAMESPACE_HPP__
+#define __FWGUIQT_DIALOG_NAMESPACE_HPP__
 
 namespace fwGuiQt
 {
 /**
  * @brief       The namespace fwGuiQt::dialog contains the classes used for container implementation with Qt Library.
  * @namespace   fwGuiQt::dialog
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace dialog
 
 }
 }
-#endif /* FWGUIQTDIALOGNAMESPACE_HPP_ */
+#endif /* __FWGUIQT_DIALOG_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/ProgressDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/ProgressDialog.hpp
index 9da2739..9459114 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/ProgressDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/ProgressDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_PROGRESSDIALOG_HPP
-#define _FWGUIQT_PROGRESSDIALOG_HPP
+#ifndef __FWGUIQT_DIALOG_PROGRESSDIALOG_HPP__
+#define __FWGUIQT_DIALOG_PROGRESSDIALOG_HPP__
 
 
 #include <string>
@@ -36,14 +36,15 @@ namespace dialog
 /**
  * @brief   This class allows us to select an acquisition in a patient data base.
  * @class   ProgressDialog
- * 
+ *
  * @date    2009.
  * @note Do not inherit from fwProgressDialog but embed a fwProgressDialog because this lasted is not copiable.
  * @todo ProgressDialog is not commented.
  */
-class FWGUIQT_CLASS_API ProgressDialog : public QObject, public ::fwGui::dialog::IProgressDialog
+class FWGUIQT_CLASS_API ProgressDialog : public QObject,
+                                         public ::fwGui::dialog::IProgressDialog
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
 
@@ -52,8 +53,8 @@ public:
                                             ::fwGui::factory::New< ProgressDialog > );
 
     FWGUIQT_API ProgressDialog( ::fwGui::GuiBaseObject::Key key,
-                                const std::string &title="Progression",
-                                const std::string &message= std::string(86,' ') );
+                                const std::string &title = "Progression",
+                                const std::string &message = std::string(86,' ') );
 
     FWGUIQT_API virtual ~ProgressDialog();
 
@@ -70,7 +71,7 @@ public:
 protected Q_SLOTS:
     void cancelPressed();
 
-protected :
+protected:
 
     QString m_title;
 
@@ -84,4 +85,4 @@ protected :
 } // namespace fwGuiQt
 
 
-#endif /* _FWGUIQT_PROGRESSDIALOG_HPP */
+#endif /* __FWGUIQT_DIALOG_PROGRESSDIALOG_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/PulseProgressDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/PulseProgressDialog.hpp
index c1ba39d..72c990b 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/PulseProgressDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/PulseProgressDialog.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_PULSEPROGRESSDIALOG_HPP
-#define _FWGUIQT_PULSEPROGRESSDIALOG_HPP
+#ifndef __FWGUIQT_DIALOG_PULSEPROGRESSDIALOG_HPP__
+#define __FWGUIQT_DIALOG_PULSEPROGRESSDIALOG_HPP__
 
 
 #include <string>
@@ -31,7 +31,7 @@ namespace dialog
 /**
  * @brief   This class allows us to show a pulse progress bar.
  * @class   PulseProgressDialog
- * 
+ *
  * @date    2009.
  */
 class FWGUIQT_CLASS_API PulseProgressDialog : public ::fwGui::dialog::IPulseProgressDialog
@@ -54,7 +54,7 @@ public:
 
     FWGUIQT_API void show();
 
-protected :
+protected:
 
     QPointer< QProgressDialog >  m_pdialog;
 
@@ -63,4 +63,4 @@ protected :
 } // namespace fwGuiQt
 
 
-#endif /* _FWGUIQT_PULSEPROGRESSDIALOG_HPP */
+#endif /* __FWGUIQT_DIALOG_PULSEPROGRESSDIALOG_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/SelectorDialog.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/SelectorDialog.hpp
index 339d0a6..297ef7c 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/SelectorDialog.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/dialog/SelectorDialog.hpp
@@ -1,20 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQT_SELECTORDIALOG_HPP_
-#define FWGUIQT_SELECTORDIALOG_HPP_
+#ifndef __FWGUIQT_DIALOG_SELECTORDIALOG_HPP__
+#define __FWGUIQT_DIALOG_SELECTORDIALOG_HPP__
 
-#include <vector>
 
-#include <QDialog>
-#include <QString>
-#include <QWidget>
+#include "fwGuiQt/config.hpp"
 
 #include <fwGui/dialog/ISelectorDialog.hpp>
-#include "fwGuiQt/config.hpp"
+
+#include <vector>
 
 namespace fwGuiQt
 {
@@ -25,11 +23,10 @@ namespace dialog
 /**
  * @brief   SelectorDialog allowing the choice of an element among severals (_selections)
  * @class   SelectorDialog
- * 
+ *
  * @date    2009.
  */
-
-class FWGUIQT_CLASS_API SelectorDialog : public ::fwGui::dialog::ISelectorDialog,  public QDialog
+class FWGUIQT_CLASS_API SelectorDialog : public ::fwGui::dialog::ISelectorDialog
 {
 public:
 
@@ -37,7 +34,7 @@ public:
                                             (()),
                                             ::fwGui::factory::New< SelectorDialog > );
 
-    FWGUIQT_API SelectorDialog(::fwGui::GuiBaseObject::Key key) ;
+    FWGUIQT_API SelectorDialog(::fwGui::GuiBaseObject::Key key);
 
     FWGUIQT_API virtual ~SelectorDialog();
 
@@ -59,9 +56,10 @@ public:
     /// Set the message
     FWGUIQT_API virtual void setMessage(const std::string &msg);
 
-private :
+private:
 
     std::vector< std::string > m_selections;
+
     /// Dialog box message
     std::string m_message;
     std::string m_title;
@@ -70,4 +68,4 @@ private :
 } // namespace dialog
 } // namespace fwGuiQt
 
-#endif /*FWGUIQT_SELECTORDIALOG_HPP_*/
+#endif /*__FWGUIQT_DIALOG_SELECTORDIALOG_HPP__*/
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/CppHighlighter.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/CppHighlighter.hpp
index 3096d9d..02f7ba9 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/CppHighlighter.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/CppHighlighter.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_HIGHLIGHTER_CPPHIGHLIGHTER_HPP
-#define _FWGUIQT_HIGHLIGHTER_CPPHIGHLIGHTER_HPP
+#ifndef __FWGUIQT_HIGHLIGHTER_CPPHIGHLIGHTER_HPP__
+#define __FWGUIQT_HIGHLIGHTER_CPPHIGHLIGHTER_HPP__
 
 #include <QSyntaxHighlighter>
 
@@ -23,7 +23,7 @@ namespace highlighter
 
 class FWGUIQT_CLASS_API CppHighlighter : public QSyntaxHighlighter
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
     FWGUIQT_API CppHighlighter(QTextDocument *parent = 0);
@@ -48,4 +48,4 @@ private:
 } //namespace fwGuiQt
 } //namespace highlighter
 
-#endif // _FWGUIQT_HIGHLIGHTER_CPPHIGHLIGHTER_HPP
+#endif // __FWGUIQT_HIGHLIGHTER_CPPHIGHLIGHTER_HPP__
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/PythonHighlighter.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/PythonHighlighter.hpp
index 3c9c45b..4c8c1bc 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/PythonHighlighter.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/highlighter/PythonHighlighter.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_HIGHLIGHTER_PYTHONHIGHLIGHTER_HPP
-#define _FWGUIQT_HIGHLIGHTER_PYTHONHIGHLIGHTER_HPP
+#ifndef __FWGUIQT_HIGHLIGHTER_PYTHONHIGHLIGHTER_HPP__
+#define __FWGUIQT_HIGHLIGHTER_PYTHONHIGHLIGHTER_HPP__
 
 #include <QSyntaxHighlighter>
 
@@ -23,7 +23,7 @@ namespace highlighter
 
 class FWGUIQT_CLASS_API PythonHighlighter : public QSyntaxHighlighter
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
     FWGUIQT_API PythonHighlighter(QTextDocument *parent = 0);
@@ -38,7 +38,8 @@ private:
     {
     public:
         HighlightingRule() : nth(0)
-        {}
+        {
+        }
         int nth;
         QRegExp pattern;
         QTextCharFormat format;
@@ -55,4 +56,4 @@ private:
 } //namespace fwGuiQt
 } //namespace highlighter
 
-#endif // _FWGUIQT_HIGHLIGHTER_PYTHONHIGHLIGHTER_HPP
+#endif // __FWGUIQT_HIGHLIGHTER_PYTHONHIGHLIGHTER_HPP__
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/CardinalLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/CardinalLayoutManager.hpp
index 5ec5e19..748ae51 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/CardinalLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/CardinalLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP__
 
 #include <QPointer>
 
@@ -27,7 +27,7 @@ namespace fwGui
 /**
  * @brief   Defines the cardinal layout manager.
  * @class   CardinalLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -67,6 +67,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/FrameLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/FrameLayoutManager.hpp
index e0dda26..85902d0 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/FrameLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/FrameLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP__
 
 #include <QPointer>
 #include <QObject>
@@ -28,13 +28,14 @@ namespace fwGui
 /**
  * @brief   Defines the frame manager.
  * @class   FrameLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
-class FWGUIQT_CLASS_API FrameLayoutManager : public QObject, public ::fwGui::layoutManager::IFrameLayoutManager
+class FWGUIQT_CLASS_API FrameLayoutManager : public QObject,
+                                             public ::fwGui::layoutManager::IFrameLayoutManager
 {
-    Q_OBJECT
+Q_OBJECT
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (FrameLayoutManager)(::fwGui::layoutManager::IFrameLayoutManager),
@@ -69,6 +70,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/LineLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/LineLayoutManager.hpp
index c932e6f..9fd7f12 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/LineLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/LineLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -20,7 +20,7 @@ namespace fwGui
 /**
  * @brief   Defines the line layout manager.
  * @class   LineLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -56,6 +56,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuBarLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuBarLayoutManager.hpp
index 0ea4f60..617513a 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuBarLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuBarLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -25,7 +25,7 @@ namespace layoutManager
 /**
  * @brief   Defines the menu bar layout manager for IHM.
  * @class   MenuBarLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -71,6 +71,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuLayoutManager.hpp
index 6d01a70..c95e64a 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/MenuLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -24,7 +24,7 @@ namespace layoutManager
 /**
  * @brief   Defines the menu layout manager for IHM.
  * @class   MenuLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -76,6 +76,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/Namespace.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/Namespace.hpp
index 031d57a..3f3c314 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/Namespace.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWGUIQTLAYOUTMANAGERNAMESPACE_HPP_
-#define FWGUIQTLAYOUTMANAGERNAMESPACE_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_NAMESPACE_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_NAMESPACE_HPP__
 
 namespace fwGui
 {
 /**
-* @brief       The namespace fwGui::layoutManager contains the implementation of managers use to handle the GUI layout available in FW4SPL. The Qt library is used.
-  * @namespace   fwGui::layoutManager
- * 
+ * @brief       The namespace fwGui::layoutManager contains the implementation of managers use to handle the GUI layout available in FW4SPL. The Qt library is used.
+ * @namespace   fwGui::layoutManager
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace layoutManager
 
 }
 }
-#endif /* FWGUIQTLAYOUTMANAGERNAMESPACE_HPP_ */
+#endif /* __FWGUIQT_LAYOUTMANAGER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/TabLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/TabLayoutManager.hpp
index d619fa2..636e708 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/TabLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/TabLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP__
 
 #include <QPointer>
 
@@ -28,7 +28,7 @@ namespace fwGui
 /**
  * @brief   Defines the tab layout manager.
  * @class   TabLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -68,6 +68,6 @@ private:
 
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolBarLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolBarLayoutManager.hpp
index 55261fd..1edf6bb 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolBarLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolBarLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP__
 
 #include <fwCore/base.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -24,7 +24,7 @@ namespace layoutManager
 /**
  * @brief   Defines the toolBar layout manager for IHM.
  * @class   ToolBarLayoutManager
- * 
+ *
  * @date    2009-2010.
  *
  */
@@ -76,6 +76,6 @@ protected:
 } // namespace layoutManager
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolboxLayoutManager.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolboxLayoutManager.hpp
index 726a435..39d35fa 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolboxLayoutManager.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/layoutManager/ToolboxLayoutManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGER_HPP_
-#define _FWGUIQT_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGER_HPP_
+#ifndef __FWGUIQT_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGER_HPP__
+#define __FWGUIQT_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGER_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -54,6 +54,6 @@ public:
 
 } // namespace fwGui
 
-#endif /*_FWGUIQT_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGER_HPP_*/
+#endif /*__FWGUIQT_LAYOUTMANAGER_TOOLBOXLAYOUTMANAGER_HPP__*/
 
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/util/FuncSlot.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/util/FuncSlot.hpp
index 3d23468..196420d 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/util/FuncSlot.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/util/FuncSlot.hpp
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 #ifndef __FWGUIQT_UTIL_FUNCSLOT_HPP__
 #define __FWGUIQT_UTIL_FUNCSLOT_HPP__
 
@@ -16,7 +22,7 @@ namespace util
 
 class FWGUIQT_CLASS_API FuncSlot : public QObject
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
     FWGUIQT_API FuncSlot();
@@ -43,5 +49,5 @@ protected:
 
 } // namespace fwGuiQt
 
-#endif
+#endif //__FWGUIQT_UTIL_FUNCSLOT_HPP__
 
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QRangeSlider.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QRangeSlider.hpp
index d63ead3..3f71527 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QRangeSlider.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QRangeSlider.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWGUIQT_QRANGESLIDER_HPP_
-#define _FWGUIQT_QRANGESLIDER_HPP_
+#ifndef __FWGUIQT_WIDGET_QRANGESLIDER_HPP__
+#define __FWGUIQT_WIDGET_QRANGESLIDER_HPP__
 
 #include <QWidget>
 #include <QPainter>
@@ -23,7 +23,7 @@ namespace widget
 
 class FWGUIQT_CLASS_API QRangeSlider : public QWidget
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
     class Paintable
@@ -33,13 +33,18 @@ public:
         {
             m_widget = w;
         }
-        virtual ~Paintable(){}
+        virtual ~Paintable()
+        {
+        }
 
         virtual void draw(QPainter &, bool enabled = true) = 0;
-        virtual bool pick(const QPoint&) const = 0;
+        virtual bool pick(const QPoint&) const             = 0;
 
     protected:
-        QSize drawingArea() const {return m_widget->size();}
+        QSize drawingArea() const
+        {
+            return m_widget->size();
+        }
         QPointer<QWidget> m_widget;
     };
 
@@ -48,9 +53,15 @@ public:
     FWGUIQT_API QRangeSlider(QWidget *parent = NULL);
     FWGUIQT_API virtual ~QRangeSlider();
 
-    QSize sizeHint() const {return QSize(100,20);};
+    QSize sizeHint() const
+    {
+        return QSize(100,20);
+    }
 
-    void setMinimumMinMaxDelta(double d){ m_minimumMinMaxDelta = d;}
+    void setMinimumMinMaxDelta(double d)
+    {
+        m_minimumMinMaxDelta = d;
+    }
 
 public Q_SLOTS:
     FWGUIQT_API void setPos(double _min, double _max);
@@ -97,4 +108,4 @@ protected:
 } // namespace widget
 } // namespace fwGuiQt
 
-#endif // _FWGUIQT_QRANGESLIDER_HPP_
+#endif // __FWGUIQT_WIDGET_QRANGESLIDER_HPP__
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QfwToolbox.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QfwToolbox.hpp
index 7fc6c67..b54ffc7 100644
--- a/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QfwToolbox.hpp
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/QfwToolbox.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,8 +8,8 @@
  * Based on (and also inspired by) QToolbox: http://doc.qt.nokia.com/4.7/qtoolbox.html
  */
 
-#ifndef _FWGUIQT_WIDGET_QFWTOOLBOX_HPP
-#define _FWGUIQT_WIDGET_QFWTOOLBOX_HPP
+#ifndef __FWGUIQT_WIDGET_QFWTOOLBOX_HPP__
+#define __FWGUIQT_WIDGET_QFWTOOLBOX_HPP__
 
 #include <QObject>
 #include <QScrollArea>
@@ -28,17 +28,35 @@ namespace widget
 class Page
 {
 public:
-    void setText(const QString &text) { button->setText(text); }
-    void setIcon(const QIcon &is) { button->setIcon(is); }
-    void setToolTip(const QString &tip) { button->setToolTip(tip); }
-    QString toolTip() const { return button->toolTip(); }
-    QString text() const { return button->text(); }
-    QIcon icon() const { return button->icon(); }
+    void setText(const QString &text)
+    {
+        button->setText(text);
+    }
+    void setIcon(const QIcon &is)
+    {
+        button->setIcon(is);
+    }
+    void setToolTip(const QString &tip)
+    {
+        button->setToolTip(tip);
+    }
+    QString toolTip() const
+    {
+        return button->toolTip();
+    }
+    QString text() const
+    {
+        return button->text();
+    }
+    QIcon icon() const
+    {
+        return button->icon();
+    }
 
     inline bool operator==(const Page& other) const
     {
         return widget == other.widget;
-     }
+    }
 
     QPushButton *button;
     QFrame* sv;
@@ -47,7 +65,7 @@ public:
 
 class FWGUIQT_CLASS_API QfwToolBox : public QFrame
 {
-    Q_OBJECT
+Q_OBJECT
 
 public:
     FWGUIQT_API QfwToolBox(QWidget *parent = 0, Qt::WindowFlags f = 0);
@@ -99,4 +117,4 @@ private:
 } // namespace widget
 } // namespace fwGuiQt
 
-#endif // _FWGUIQT_WIDGET_QFWTOOLBOX_HPP
+#endif // __FWGUIQT_WIDGET_QFWTOOLBOX_HPP__
diff --git a/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/SlideBar.hpp b/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/SlideBar.hpp
new file mode 100644
index 0000000..03f887e
--- /dev/null
+++ b/SrcLib/core/fwGuiQt/include/fwGuiQt/widget/SlideBar.hpp
@@ -0,0 +1,96 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGUIQT_WIDGET_SLIDEBAR_HPP__
+#define __FWGUIQT_WIDGET_SLIDEBAR_HPP__
+
+
+#include "fwGuiQt/config.hpp"
+
+#include <QApplication>
+#include <QBoxLayout>
+#include <QGroupBox>
+#include <QWidget>
+
+
+namespace fwGuiQt
+{
+
+namespace widget
+{
+
+/**
+ * @brief This class allows to display a slide widget. The slide widget can be displayed over all the application
+ *        widgets.
+ */
+class FWGUIQT_CLASS_API SlideBar : public QGroupBox
+{
+Q_OBJECT
+
+public:
+
+    enum Aligment
+    {
+        LEFT,
+        RIGHT,
+        TOP,
+        BOTTOM
+    };
+
+    /// SlideBar constructor
+    FWGUIQT_API SlideBar(QWidget* parent, Aligment align = LEFT, int buttonWidth = 200, double opacity = 0.8);
+
+    /// Destructor
+    FWGUIQT_API virtual ~SlideBar();
+
+    /// Update the shown/hide positions
+    FWGUIQT_API void updatePosition();
+
+    /// Set the widget align
+    FWGUIQT_API void setSide(Aligment align);
+
+    /// Return true if the widget is visible
+    bool isShown() const
+    {
+        return m_isShown;
+    }
+
+    /// Show/hide the slide widget. The widget is animated
+    FWGUIQT_API virtual void setVisible(bool visible);
+
+
+protected:
+    /// Filter 'Resize' and 'Move' events to update the widget position.
+    bool eventFilter(QObject* obj, QEvent* event);
+
+private:
+
+    /// Force to hide the widget calling the super class setVisible(false) method
+    void forceHide();
+
+    /// Force to show of the widget calling the super class setVisible(true) method
+    void forceShow();
+
+    /// Show/hide the slide widget
+    void slide(bool visible);
+
+    /// Initialize the widget
+    void init();
+
+    QRect m_shownPosition; ///< widget position when it is visible
+    QRect m_hiddenPosition; ///< widget position when it is not visible
+    int m_buttonSize; ///< widget size (width if m_align is LEFT or RIGHT, height if m_align is TOP or BOTTOM)
+    double m_opacity; /// widget opacity [0 - 1]
+    bool m_isShown; ///< flag if widget is visible
+    Aligment m_align; ///< defines the widget alignement (left, right, top or bottom)
+
+
+};
+
+} // namespace widget
+} // namespace fwGuiQt
+
+#endif // __FWGUIQT_WIDGET_SLIDEBAR_HPP__
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/ActionCallback.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/ActionCallback.cpp
index e6ea7aa..0823d6f 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/ActionCallback.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/ActionCallback.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,12 +17,14 @@ namespace fwGuiQt
 //-----------------------------------------------------------------------------
 
 ActionCallback::ActionCallback(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ActionCallback::~ActionCallback()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp
index 44ba092..a184924 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/App.cpp
@@ -1,17 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <assert.h>
-#include <iostream>
-#include <sstream>
-#include <locale.h>
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/tokenizer.hpp>
+#include "fwGuiQt/App.hpp"
 
 #include <fwTools/Os.hpp>
 
@@ -19,19 +12,26 @@
 
 #include <fwGui/dialog/MessageDialog.hpp>
 
-#include "fwGuiQt/App.hpp"
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/tokenizer.hpp>
+
+#include <assert.h>
+#include <iostream>
+#include <sstream>
+#include <locale.h>
 
 namespace fwGuiQt
 {
 
 //-----------------------------------------------------------------------------
 
-App::App(int & argc, char ** argv)
-    : QApplication (argc, argv)
+App::App(int & argc, char ** argv, bool guiEnabled) : QApplication(argc, argv, guiEnabled)
 {
     SLM_TRACE_FUNC();
 
     setlocale(LC_ALL,"C"); // needed for mfo save process
+    QLocale::setDefault(QLocale::C); // on Linux we need that as well...
 
     std::string appName = "No name";
 
@@ -71,5 +71,3 @@ void App::onExit()
 
 } // namespace fwGuiQt
 
-//-----------------------------------------------------------------------------
-
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/Application.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/Application.cpp
index ebca8c9..ee5ffbc 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/Application.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/Application.cpp
@@ -1,11 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <QApplication>
 
+#include <fwGui/dialog/IMessageDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
 #include <fwGui/registry/macros.hpp>
 
 #include "fwGuiQt/Application.hpp"
@@ -15,11 +17,30 @@ fwGuiRegisterMacro(::fwGuiQt::Application, ::fwGui::IApplication::REGISTRY_KEY )
 
 namespace fwGuiQt
 {
+
 //-----------------------------------------------------------------------------
 
 void Application::exit(int returncode)
 {
-    qApp->exit(returncode);
+    if(m_confirm)
+    {
+        ::fwGui::dialog::MessageDialog dlg;
+        dlg.setTitle("Confirm exit");
+        dlg.setMessage("Do you really want to exit?");
+        dlg.setIcon(::fwGui::dialog::IMessageDialog::QUESTION);
+        dlg.addButton(::fwGui::dialog::IMessageDialog::YES_NO);
+
+        ::fwGui::dialog::IMessageDialog::Buttons res = dlg.show();
+
+        if(res == ::fwGui::dialog::IMessageDialog::YES)
+        {
+            qApp->exit(returncode);
+        }
+    }
+    else
+    {
+        qApp->exit(returncode);
+    }
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/Cursor.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/Cursor.cpp
index e107060..0d603cf 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/Cursor.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/Cursor.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,12 +18,14 @@ namespace fwGuiQt
 //-----------------------------------------------------------------------------
 
 Cursor::Cursor(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 Cursor::~Cursor()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/QtMainFrame.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/QtMainFrame.cpp
index 7179a78..aad2612 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/QtMainFrame.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/QtMainFrame.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QApplication>
 #include <QMainWindow>
 #include <QCloseEvent>
 
@@ -13,6 +12,9 @@
 
 #include <fwCore/base.hpp>
 
+#include <fwGui/dialog/IMessageDialog.hpp>
+#include <fwGui/dialog/MessageDialog.hpp>
+
 #include "fwGuiQt/QtMainFrame.hpp"
 
 namespace fwGuiQt
@@ -21,8 +23,9 @@ namespace fwGuiQt
 
 //------------------------------------------------------------------------------
 
-QtMainFrame::QtMainFrame() throw(): QMainWindow()
-{}
+QtMainFrame::QtMainFrame() throw() : QMainWindow()
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -42,8 +45,8 @@ void QtMainFrame::setCloseCallback(CloseCallback fct)
 void QtMainFrame::closeEvent(QCloseEvent *event)
 {
     SLM_TRACE_FUNC();
-//    event->ignore();
     m_fctCloseCallback();
+    event->ignore();
 }
 
 
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/SliceSelector.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/SliceSelector.cpp
index ef12dcb..1dae68d 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/SliceSelector.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/SliceSelector.cpp
@@ -1,38 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwGuiQt/SliceSelector.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <boost/bind.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <functional>
 #include <QComboBox>
 #include <QStringList>
 #include <QSlider>
 #include <QLineEdit>
 #include <QHBoxLayout>
 
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-
-#include <fwCore/base.hpp>
-
-#include "fwGuiQt/SliceSelector.hpp"
-
 namespace fwGuiQt
 {
 
 //------------------------------------------------------------------------------
 
-const QStringList SliceSelector::m_sliceTypesArray = (QStringList() << tr("Sagittal") << tr("Frontal") << tr("Axial"));
-
-//------------------------------------------------------------------------------
-
-SliceSelector::SliceSelector(QWidget* const parent ) throw(): QWidget( parent )
+SliceSelector::SliceSelector(QWidget* const parent ) throw() : QWidget( parent )
 {
-    m_fctChangeIndexCallback = ::boost::bind( &::fwGuiQt::SliceSelector::printIndex, this, _1);
-    m_fctChangeTypeCallback = ::boost::bind( &::fwGuiQt::SliceSelector::printType, this, _1);
+    m_fctChangeIndexCallback = std::bind( &::fwGuiQt::SliceSelector::printIndex, this, std::placeholders:: _1);
+    m_fctChangeTypeCallback  = std::bind( &::fwGuiQt::SliceSelector::printType, this, std::placeholders:: _1);
 
     m_sliceType = new QComboBox( this );
-    m_sliceType->addItems(m_sliceTypesArray);
+    /// Slice type names as a qt string array.
+    QStringList sliceTypesArray;
+    sliceTypesArray << tr("Sagittal") << tr("Frontal") << tr("Axial");
+    m_sliceType->addItems(sliceTypesArray);
 
     m_sliceIndex = new QSlider(Qt::Horizontal, this);
 
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/WorkerQt.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/WorkerQt.cpp
index cd1223d..58c27a2 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/WorkerQt.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/WorkerQt.cpp
@@ -1,41 +1,45 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/bind.hpp>
-#include <boost/thread.hpp>
+#include "fwGuiQt/WorkerQt.hpp"
 
-#include <QEvent>
-#include <QDir>
-#include <QPointer>
-#include <QTimer>
-#include <QStringList>
-#include <QSharedPointer>
-#include <QFont>
+#include "fwGuiQt/App.hpp"
+#include "fwGuiQt/util/FuncSlot.hpp"
 
 #include <fwCore/util/LazyInstantiator.hpp>
 
+#include <fwGui/registry/worker.hpp>
+
 #include <fwThread/Worker.hpp>
 #include <fwThread/Timer.hpp>
 
 #include <fwServices/registry/ActiveWorkers.hpp>
 
-#include "fwGuiQt/App.hpp"
-#include "fwGuiQt/util/FuncSlot.hpp"
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <boost/bind.hpp>
+#include <boost/thread.hpp>
+#include <functional>
+#include <QEvent>
+#include <QDir>
+#include <QPointer>
+#include <QTimer>
+#include <QStringList>
+#include <QSharedPointer>
+#include <QFont>
 
-#include "fwGuiQt/WorkerQt.hpp"
 
 namespace fwGuiQt
 {
 
-
 class WorkerQtTask : public QEvent
 {
 public:
-    WorkerQtTask( const ::fwThread::Worker::TaskType &handler )
-        : QEvent( static_cast< QEvent::Type >(s_WORKER_QT_TASK_EVENT_TYPE) ),
+    WorkerQtTask( const ::fwThread::Worker::TaskType &handler ) :
+        QEvent( static_cast< QEvent::Type >(s_WORKER_QT_TASK_EVENT_TYPE) ),
         m_handler( handler )
     {
         SLM_ASSERT( "QApplication should be instantiated", qApp );
@@ -67,7 +71,7 @@ public:
 
     WorkerQt();
 
-    void init( int &argc, char **argv );
+    void init( int& argc, char **argv, bool guiEnabled = true );
 
     virtual ~WorkerQt();
 
@@ -85,6 +89,8 @@ public:
 
 protected:
 
+    int m_argc;
+
     QSharedPointer< QApplication > m_app;
 
     SPTR(::fwThread::Timer) createTimer();
@@ -96,80 +102,27 @@ protected:
     WorkerQt& operator=( const WorkerQt& );
 
     ::fwThread::ThreadIdType m_threadId;
-
 };
 
 
+//-----------------------------------------------------------------------------
 
-struct FWGUIQT_CLASS_API WorkerQtInstanciator
-{
-
-    FWGUIQT_API WorkerQtInstanciator(bool reg = true) ;
-
-    FWGUIQT_API SPTR(::fwThread::Worker) getWorker();
-
-    SPTR(WorkerQt) m_qtWorker;
-
-    FWGUIQT_API static int    s_argc;
-    FWGUIQT_API static char **s_argv;
-};
-
-int WorkerQtInstanciator::s_argc = 0 ;
-char** WorkerQtInstanciator::s_argv = NULL;
-
-FWGUIQT_API WorkerQtInstanciator::WorkerQtInstanciator(bool reg ) :
-    m_qtWorker(::boost::make_shared< WorkerQt >())
-{
-    m_qtWorker->init( boost::ref(s_argc), s_argv);
-
-    if(reg)
-    {
-        ::fwServices::registry::ActiveWorkers::getDefault()
-            ->addWorker(::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER, m_qtWorker);
-    }
-}
-
-
-SPTR(::fwThread::Worker) WorkerQtInstanciator::getWorker()
-{
-    return m_qtWorker;
-}
-
-::fwThread::Worker::sptr getQtWorker( int &argc, char **argv )
+::fwThread::Worker::sptr getQtWorker(int& argc, char **argv, bool guiEnabled)
 {
+    SPTR(WorkerQt) workerQt = std::make_shared< WorkerQt >();
+    workerQt->init(argc, argv, guiEnabled);
 
-    WorkerQtInstanciator::s_argc = argc;
-    WorkerQtInstanciator::s_argv = argv;
-
-    typedef ::fwCore::util::LazyInstantiator< WorkerQtInstanciator, WorkerQtInstanciator > InstantiatorType;
-
-    SPTR(WorkerQtInstanciator) instanciator = InstantiatorType::getInstance();
+    ::fwServices::registry::ActiveWorkers::getDefault()->addWorker(
+        ::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER, workerQt);
 
-#ifdef _DEBUG
-    {
-        static ::boost::mutex mutex;
-        ::boost::mutex::scoped_lock scoped_lock(mutex);
-        static bool initialized = false;
-        SLM_ASSERT("getQtWorker(argc, argv) shall be called only once", !initialized);
-        initialized = true;
-    }
-#endif
-
-
-    return instanciator->m_qtWorker;
+    return workerQt;
 }
 
-
-
-//------------------------------------------------------------------------------
-
+//-----------------------------------------------------------------------------
 
 /**
  * @class TimerQt
  * @brief Private Timer implementation using Qt.
- *
- *
- * @date   2012.
  */
 class TimerQt : public ::fwThread::Timer
 {
@@ -236,57 +189,46 @@ protected:
 // ---------- WorkerQt private implementation ----------
 
 WorkerQt::WorkerQt() :
-    m_app(NULL),
+    m_argc(0),
+    m_app(nullptr),
     m_threadId( ::fwThread::getCurrentThreadId() )
 {
 }
 
-void WorkerQt::init( int &argc, char **argv )
-{
-#ifdef __MACOSX__
-    if ( QSysInfo::MacintoshVersion > QSysInfo::MV_10_8 )
-    {
-        // https://bugreports.qt-project.org/browse/QTBUG-32789 #fix for Mac OS X 10.9
-        QFont::insertSubstitution(".Lucida Grande UI", "Lucida Grande");
-    }
-#endif
-    m_app = QSharedPointer< QApplication > ( new ::fwGuiQt::App( argc, argv ) );
+//------------------------------------------------------------------------------
 
+void WorkerQt::init( int& argc, char **argv, bool guiEnabled )
+{
     OSLM_TRACE("Init Qt" << ::fwThread::getCurrentThreadId() <<" Start");
 
-    // QStringList libraryPaths;
-    // libraryPaths = m_app->libraryPaths();
-    // libraryPaths.removeFirst();
-    // m_app->setLibraryPaths(libraryPaths);
-
-#ifdef SPECIALINSTALL
-    QDir pluginDir("/usr/lib/qtplugins");
-#else
-    QDir pluginDir("./qtplugins");
-#endif
+    QDir pluginDir("./plugins");
     if (pluginDir.exists())
     {
-        m_app->addLibraryPath(pluginDir.absolutePath());
+        QCoreApplication::setLibraryPaths(QStringList(pluginDir.absolutePath()));
     }
+    m_argc = argc;
+    m_app  = QSharedPointer< QApplication > ( new ::fwGuiQt::App( m_argc, argv, guiEnabled ) );
 
     OSLM_TRACE("Init Qt" << ::fwThread::getCurrentThreadId() <<" Finish");
-
 }
 
+//------------------------------------------------------------------------------
+
 WorkerQt::~WorkerQt()
 {
     this->stop();
 }
 
+//------------------------------------------------------------------------------
 
 ::fwThread::Worker::FutureType WorkerQt::getFuture()
 {
-    if (! m_future.valid() )
+    if (!m_future.valid() )
     {
         SLM_ASSERT("WorkerQt loop shall be created and ran from main thread ",
-            ! m_future.valid() && ::fwThread::getCurrentThreadId() == this->getThreadId() );
+                   !m_future.valid() && ::fwThread::getCurrentThreadId() == this->getThreadId() );
 
-        ::boost::packaged_task< ExitReturnType > task( ::boost::bind(&QApplication::exec) );
+        ::boost::packaged_task< ExitReturnType > task( std::bind(&QApplication::exec) );
 
         ::boost::future< ExitReturnType > ufuture = task.get_future();
 
@@ -298,47 +240,57 @@ WorkerQt::~WorkerQt()
     return m_future;
 }
 
+//------------------------------------------------------------------------------
 
 ::fwThread::ThreadIdType WorkerQt::getThreadId() const
 {
     return m_threadId;
 }
 
+//------------------------------------------------------------------------------
 
 void WorkerQt::stop()
 {
     this->postTask<void>(&QApplication::quit).wait();
 }
+//------------------------------------------------------------------------------
 
 SPTR(::fwThread::Timer) WorkerQt::createTimer()
 {
-    return ::boost::make_shared< TimerQt >();
+    return std::make_shared< TimerQt >();
 }
 
+//------------------------------------------------------------------------------
+
 void WorkerQt::post(TaskType handler)
 {
     QApplication::postEvent( qApp, new WorkerQtTask(handler) );
 }
 
+//------------------------------------------------------------------------------
+
 void WorkerQt::processTasks()
 {
     QApplication::sendPostedEvents(0, ::fwGuiQt::WorkerQtTask::s_WORKER_QT_TASK_EVENT_TYPE);
 }
 
+//------------------------------------------------------------------------------
+
 void WorkerQt::processTasks(PeriodType maxtime)
 {
-    QCoreApplication::processEvents(QEventLoop::AllEvents, maxtime);
+    QCoreApplication::processEvents(QEventLoop::AllEvents, int(maxtime));
 }
 
 // ---------- Timer private implementation ----------
 
-TimerQt::TimerQt() :
-    m_timerQt( new QTimer(qApp) )
+TimerQt::TimerQt() : m_timerQt( new QTimer(qApp) )
 {
     m_qtFunc = new ::fwGuiQt::util::FuncSlot();
     QObject::connect(m_timerQt, SIGNAL(timeout()), m_qtFunc, SLOT(trigger()));
 }
 
+//------------------------------------------------------------------------------
+
 TimerQt::~TimerQt()
 {
     QObject::disconnect(m_timerQt, SIGNAL(timeout()), m_qtFunc, SLOT(trigger()));
@@ -347,30 +299,40 @@ TimerQt::~TimerQt()
     delete m_timerQt;
 }
 
+//------------------------------------------------------------------------------
+
 void TimerQt::setDuration(TimeDurationType duration)
 {
     ::fwCore::mt::ScopedLock lock(m_mutex);
-    m_timerQt->setInterval( ::boost::chrono::duration_cast< ::boost::chrono::milliseconds >(duration).count() );
+    m_timerQt->setInterval( static_cast<int>(
+                                ::boost::chrono::duration_cast< ::boost::chrono::milliseconds >(duration).count())
+                            );
 }
 
+//------------------------------------------------------------------------------
+
 void TimerQt::start()
 {
     ::fwCore::mt::ScopedLock lock(m_mutex);
     m_timerQt->start();
 }
 
+//------------------------------------------------------------------------------
+
 void TimerQt::stop()
 {
     ::fwCore::mt::ScopedLock lock(m_mutex);
     m_timerQt->stop();
 }
 
+//------------------------------------------------------------------------------
 
 void TimerQt::call()
 {
     m_function();
 }
 
+//------------------------------------------------------------------------------
 
 void TimerQt::updatedFunction()
 {
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ContainerBuilder.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ContainerBuilder.cpp
index 572db83..a8da651 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ContainerBuilder.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ContainerBuilder.cpp
@@ -1,19 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <QMainWindow>
-#include <QWidget>
-#include <QVBoxLayout>
+#include "fwGuiQt/builder/ContainerBuilder.hpp"
+#include "fwGuiQt/container/QtContainer.hpp"
 
 #include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/container/QtContainer.hpp"
-#include "fwGuiQt/builder/ContainerBuilder.hpp"
+#include <QMainWindow>
+#include <QVBoxLayout>
+#include <QWidget>
 
 
 fwGuiRegisterMacro(::fwGui::builder::ContainerBuilder, ::fwGui::builder::IContainerBuilder::REGISTRY_KEY);
@@ -26,28 +24,30 @@ namespace builder
 //-----------------------------------------------------------------------------
 
 ContainerBuilder::ContainerBuilder(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ContainerBuilder::~ContainerBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ContainerBuilder::createContainer( ::fwGui::container::fwContainer::sptr parent )
 {
     m_parent = ::fwGuiQt::container::QtContainer::dynamicCast(parent);
-    SLM_ASSERT("Sorry, the parent container is not a QtContainer", m_parent);
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
 
     ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::New();
     QWidget *qtParent = m_parent->getQtContainer();
-    QWidget *widget = new QWidget();
+    QWidget *widget   = new QWidget();
     qtContainer->setQtContainer(widget);
 
     QVBoxLayout *layout = new QVBoxLayout();
     layout->setContentsMargins(0, 0, 0, 0);
-    SLM_ASSERT("Sorry, the parent container has already a layout", !qtParent->layout());
+    SLM_ASSERT("The parent container has already a layout", !qtParent->layout());
     qtParent->setLayout(layout);
     layout->addWidget(widget);
 
@@ -58,8 +58,8 @@ void ContainerBuilder::createContainer( ::fwGui::container::fwContainer::sptr pa
 
 void ContainerBuilder::destroyContainer()
 {
-    SLM_ASSERT("Sorry, Container not initialized", m_container);
-    SLM_ASSERT("Sorry, the parent container is not a QtContainer", m_parent);
+    SLM_ASSERT("The Container is not initialized", m_container);
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
 
     m_container->destroyContainer();
     m_parent->clean();
@@ -69,16 +69,16 @@ void ContainerBuilder::destroyContainer()
 
 void ContainerBuilder::setParent(::fwGui::container::fwContainer::sptr parent)
 {
-    SLM_ASSERT("Sorry, QtContainer not yet initialized, cleaning impossible", m_container);
+    SLM_ASSERT("The QtContainer is not yet initialized, cleaning is thus impossible", m_container);
     ::fwGuiQt::container::QtContainer::sptr parentContainer = ::fwGuiQt::container::QtContainer::dynamicCast(parent);
     SLM_ASSERT("dynamicCast fwContainer to QtContainer failed", parentContainer);
     ::fwGuiQt::container::QtContainer::sptr container = ::fwGuiQt::container::QtContainer::dynamicCast(m_container);
     SLM_ASSERT("dynamicCast fwContainer to QtContainer failed", container);
 
     QWidget *qtContainer = container->getQtContainer();
-    SLM_ASSERT("Sorry, QtContainer not yet initialized", qtContainer);
+    SLM_ASSERT("The QtContainer is not yet initialized", qtContainer);
     QWidget *qtParent = parentContainer->getQtContainer();
-    SLM_ASSERT("Sorry, parent QtContainer not yet initialized", qtParent);
+    SLM_ASSERT("The parent's QtContainer is not yet initialized", qtParent);
 
     if(qtParent != m_parent->getQtContainer() )
     {
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/MenuBarBuilder.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/MenuBarBuilder.cpp
index 2589248..ee50bed 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/MenuBarBuilder.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/MenuBarBuilder.cpp
@@ -1,21 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <QMainWindow>
-#include <QMenuBar>
-
-#include <fwGui/registry/macros.hpp>
-
+#include "fwGuiQt/builder/MenuBarBuilder.hpp"
 #include "fwGuiQt/container/QtContainer.hpp"
 #include "fwGuiQt/container/QtMenuBarContainer.hpp"
-#include "fwGuiQt/builder/MenuBarBuilder.hpp"
 
+#include <fwGui/registry/macros.hpp>
 
+#include <QMainWindow>
+#include <QMenuBar>
 
 fwGuiRegisterMacro(::fwGui::builder::MenuBarBuilder, ::fwGui::builder::IMenuBarBuilder::REGISTRY_KEY);
 
@@ -28,28 +24,31 @@ namespace builder
 //-----------------------------------------------------------------------------
 
 MenuBarBuilder::MenuBarBuilder(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 MenuBarBuilder::~MenuBarBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void MenuBarBuilder::createMenuBar( ::fwGui::container::fwContainer::sptr parent )
 {
     m_parent = ::fwGuiQt::container::QtContainer::dynamicCast(parent);
-    SLM_ASSERT("Sorry, the parent container is not a QtContainer", m_parent);
-    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() ) ;
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
+    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() );
     if ( !window )
     {
-        window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer()->parent() ) ;
+        window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer()->parent() );
     }
-    SLM_ASSERT("Sorry, the parent container must be a QMainWindow", window ) ;
+    SLM_ASSERT("The parent container must be a QMainWindow", window );
     if (window)
     {
-        ::fwGuiQt::container::QtMenuBarContainer::sptr menuBarContainer = ::fwGuiQt::container::QtMenuBarContainer::New();
+        ::fwGuiQt::container::QtMenuBarContainer::sptr menuBarContainer =
+            ::fwGuiQt::container::QtMenuBarContainer::New();
         QMenuBar *menuBar = new QMenuBar(0);
         menuBarContainer->setQtMenuBar(menuBar);
         window->setMenuBar( menuBar );
@@ -61,14 +60,14 @@ void MenuBarBuilder::createMenuBar( ::fwGui::container::fwContainer::sptr parent
 
 void MenuBarBuilder::destroyMenuBar()
 {
-    SLM_ASSERT("Sorry, Menu not initialized", m_menuBar);
-    SLM_ASSERT("Sorry, the parent container is not a QtContainer", m_parent);
-    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() ) ;
+    SLM_ASSERT("The menu is not initialized", m_menuBar);
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
+    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() );
     if ( !window )
     {
-        window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer()->parent() ) ;
+        window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer()->parent() );
     }
-    SLM_ASSERT("Sorry, the parent container must be a QMainWindow", window ) ;
+    SLM_ASSERT("The parent container must be a QMainWindow", window );
     if (window)
     {
         window->setMenuBar( NULL );
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/SlideViewBuilder.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/SlideViewBuilder.cpp
new file mode 100644
index 0000000..6c24ab2
--- /dev/null
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/SlideViewBuilder.cpp
@@ -0,0 +1,92 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGuiQt/builder/SlideViewBuilder.hpp"
+#include "fwGuiQt/container/QtContainer.hpp"
+
+#include <fwGui/registry/macros.hpp>
+
+#include <fwGuiQt/widget/SlideBar.hpp>
+
+#include <QWidget>
+
+fwGuiRegisterMacro( ::fwGui::builder::SlideViewBuilder, ::fwGui::builder::ISlideViewBuilder::REGISTRY_KEY);
+
+
+namespace fwGui
+{
+namespace builder
+{
+
+//-----------------------------------------------------------------------------
+
+SlideViewBuilder::SlideViewBuilder(::fwGui::GuiBaseObject::Key key)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SlideViewBuilder::~SlideViewBuilder()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideViewBuilder::createContainer( ::fwGui::container::fwContainer::sptr parent )
+{
+    m_parent = ::fwGuiQt::container::QtContainer::dynamicCast(parent);
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
+
+    QWidget* qtParent = m_parent->getQtContainer();
+
+    ::fwGuiQt::widget::SlideBar::Aligment align = ::fwGuiQt::widget::SlideBar::LEFT;
+    switch (m_aligment)
+    {
+        case ISlideViewBuilder::LEFT:
+            align = ::fwGuiQt::widget::SlideBar::LEFT;
+            break;
+        case ISlideViewBuilder::RIGHT:
+            align = ::fwGuiQt::widget::SlideBar::RIGHT;
+            break;
+        case ISlideViewBuilder::TOP:
+            align = ::fwGuiQt::widget::SlideBar::TOP;
+            break;
+        case ISlideViewBuilder::BOTTOM:
+            align = ::fwGuiQt::widget::SlideBar::BOTTOM;
+            break;
+        default:
+            SLM_ASSERT("Alignement not managed", false);
+            break;
+    }
+
+    ::fwGuiQt::widget::SlideBar* slideBar = new ::fwGuiQt::widget::SlideBar(qtParent, align, m_size, m_opacity);
+    if (!m_styleSheet.empty())
+    {
+        slideBar->setStyleSheet(QString::fromStdString(m_styleSheet));
+    }
+
+    ::fwGuiQt::container::QtContainer::sptr qtContainer = ::fwGuiQt::container::QtContainer::New();
+    qtContainer->setQtContainer(slideBar);
+
+    m_container = qtContainer;
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideViewBuilder::destroyContainer()
+{
+    SLM_ASSERT("The Container is not initialized", m_container);
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
+
+    m_container->destroyContainer();
+    m_parent->clean();
+}
+
+//-----------------------------------------------------------------------------
+
+
+} // namespace builder
+} // namespace fwGui
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ToolBarBuilder.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ToolBarBuilder.cpp
index 8126732..3de9cc3 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ToolBarBuilder.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/builder/ToolBarBuilder.cpp
@@ -1,21 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <QMainWindow>
-#include <QToolBar>
-#include <QHBoxLayout>
-
-#include <fwGui/registry/macros.hpp>
-
+#include "fwGuiQt/builder/ToolBarBuilder.hpp"
 #include "fwGuiQt/container/QtContainer.hpp"
 #include "fwGuiQt/container/QtToolBarContainer.hpp"
-#include "fwGuiQt/builder/ToolBarBuilder.hpp"
 
+#include <fwGui/registry/macros.hpp>
+
+#include <QHBoxLayout>
+#include <QMainWindow>
+#include <QToolBar>
 
 
 fwGuiRegisterMacro( ::fwGui::builder::ToolBarBuilder, ::fwGui::builder::IToolBarBuilder::REGISTRY_KEY);
@@ -29,20 +26,22 @@ namespace builder
 //-----------------------------------------------------------------------------
 
 ToolBarBuilder::ToolBarBuilder(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ToolBarBuilder::~ToolBarBuilder()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void ToolBarBuilder::createToolBar( ::fwGui::container::fwContainer::sptr parent )
 {
     m_parent = ::fwGuiQt::container::QtContainer::dynamicCast(parent);
-    SLM_ASSERT("Sorry, the parent container is not a QtContainer", m_parent);
-    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() ) ;
+    SLM_ASSERT("The parent container is not a QtContainer", m_parent);
+    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() );
 
     QToolBar *toolBar = new QToolBar(QObject::tr("ToolBar"));
     toolBar->setIconSize( QSize(m_toolBitmapSize.first, m_toolBitmapSize.second) );
@@ -56,18 +55,18 @@ void ToolBarBuilder::createToolBar( ::fwGui::container::fwContainer::sptr parent
         Qt::ToolBarArea area;
         switch (m_aligment)
         {
-        case TOP:
-            area = Qt::TopToolBarArea;
-            break;
-        case BOTTOM:
-            area = Qt::BottomToolBarArea;
-            break;
-        case RIGHT:
-            area = Qt::RightToolBarArea;
-            break;
-        case LEFT:
-            area = Qt::LeftToolBarArea;
-            break;
+            case TOP:
+                area = Qt::TopToolBarArea;
+                break;
+            case BOTTOM:
+                area = Qt::BottomToolBarArea;
+                break;
+            case RIGHT:
+                area = Qt::RightToolBarArea;
+                break;
+            case LEFT:
+                area = Qt::LeftToolBarArea;
+                break;
         }
         window->addToolBar( area, toolBar );
 
@@ -81,22 +80,22 @@ void ToolBarBuilder::createToolBar( ::fwGui::container::fwContainer::sptr parent
         QBoxLayout * layout = qobject_cast<QBoxLayout*> ( widget->layout() );
         switch (m_aligment)
         {
-        case TOP:
-            layout->setDirection(QBoxLayout::TopToBottom);
-            toolBar->setOrientation(Qt::Horizontal);
-            break;
-        case BOTTOM:
-            layout->setDirection(QBoxLayout::BottomToTop);
-            toolBar->setOrientation(Qt::Horizontal);
-            break;
-        case RIGHT:
-            layout->setDirection(QBoxLayout::RightToLeft);
-            toolBar->setOrientation(Qt::Vertical);
-            break;
-        case LEFT:
-            layout->setDirection(QBoxLayout::LeftToRight);
-            toolBar->setOrientation(Qt::Vertical);
-            break;
+            case TOP:
+                layout->setDirection(QBoxLayout::TopToBottom);
+                toolBar->setOrientation(Qt::Horizontal);
+                break;
+            case BOTTOM:
+                layout->setDirection(QBoxLayout::BottomToTop);
+                toolBar->setOrientation(Qt::Horizontal);
+                break;
+            case RIGHT:
+                layout->setDirection(QBoxLayout::RightToLeft);
+                toolBar->setOrientation(Qt::Vertical);
+                break;
+            case LEFT:
+                layout->setDirection(QBoxLayout::LeftToRight);
+                toolBar->setOrientation(Qt::Vertical);
+                break;
         }
         SLM_ASSERT("Parent container layout must have be a QVBoxLayout", layout);
         layout->insertWidget(0, toolBar, 0);
@@ -111,13 +110,14 @@ void ToolBarBuilder::createToolBar( ::fwGui::container::fwContainer::sptr parent
 
 void ToolBarBuilder::destroyToolBar()
 {
-    SLM_ASSERT("Sorry, ToolBar not initialized", m_toolBar);
-    SLM_ASSERT("Sorry, the parent container is not a QtContainer", m_parent);
-    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() ) ;
+    SLM_ASSERT("The ToolBar is not initialized", m_toolBar);
+    SLM_ASSERT("The parent's container is not a QtContainer", m_parent);
+    QMainWindow *window = qobject_cast<QMainWindow*> ( m_parent->getQtContainer() );
 
     if (window)
     {
-        ::fwGuiQt::container::QtToolBarContainer::sptr qtToolBar = ::fwGuiQt::container::QtToolBarContainer::dynamicCast(m_toolBar);
+        ::fwGuiQt::container::QtToolBarContainer::sptr qtToolBar =
+            ::fwGuiQt::container::QtToolBarContainer::dynamicCast(m_toolBar);
         QToolBar * toolbar = qtToolBar->getQtToolBar();
         window->removeToolBar( toolbar );
     }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtContainer.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtContainer.cpp
index 4bd1e3e..eee9050 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtContainer.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtContainer.cpp
@@ -1,18 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwGuiQt/container/QtContainer.hpp"
 
 #include <QDockWidget>
-#include <QWidget>
-#include <QList>
 #include <QLayout>
+#include <QList>
 #include <QMetaObject>
-
-#include "fwGuiQt/container/QtContainer.hpp"
+#include <QWidget>
 
 namespace fwGuiQt
 {
@@ -22,20 +20,23 @@ namespace container
 //-----------------------------------------------------------------------------
 
 QtContainer::QtContainer(::fwGui::GuiBaseObject::Key key) throw() : m_container(0)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 QtContainer::~QtContainer() throw()
 {
-   SLM_ASSERT( "Error during destruction : The qt container included in this class is still allocated, please call destroyContainer() before.", m_container == 0 );
+    SLM_ASSERT(
+        "Error during destruction : The qt container included in this class is still allocated, please call destroyContainer() before.",
+        m_container == 0 );
 }
 
 //-----------------------------------------------------------------------------
 
 void QtContainer::clean()
 {
-    SLM_ASSERT("Sorry, QWidget not yet initialized, cleaning impossible", m_container);
+    SLM_ASSERT("The QWidget is not yet initialized, cleaning is thus impossible", m_container);
 
     m_container->adjustSize();
     if (m_container->layout())
@@ -48,7 +49,7 @@ void QtContainer::clean()
 
 void QtContainer::destroyContainer()
 {
-    SLM_ASSERT("Sorry, QWidget not yet initialized", m_container);
+    SLM_ASSERT("The QWidget is not yet initialized", m_container);
     if(m_container)
     {
         delete m_container;
@@ -74,7 +75,7 @@ QWidget* QtContainer::getQtContainer()
 
 bool QtContainer::isShownOnScreen()
 {
-    SLM_ASSERT("Sorry, QtContainer not yet initialized, cleaning impossible", m_container);
+    SLM_ASSERT("The QtContainer is not yet initialized, cleaning is thus impossible", m_container);
     return m_container->isVisible();
 }
 
@@ -82,8 +83,8 @@ bool QtContainer::isShownOnScreen()
 
 void QtContainer::setVisible(bool isVisible)
 {
-    SLM_ASSERT("Sorry, QtContainer not yet initialized, cleaning impossible", m_container);
-    QWidget* parent = m_container->parentWidget();
+    SLM_ASSERT("The QtContainer is not yet initialized, cleaning is thus impossible", m_container);
+    QWidget* parent   = m_container->parentWidget();
     QDockWidget* dock = qobject_cast<QDockWidget*>(parent);
     if(dock)
     {
@@ -94,5 +95,19 @@ void QtContainer::setVisible(bool isVisible)
 
 //-----------------------------------------------------------------------------
 
+void QtContainer::setEnabled(bool isEnabled)
+{
+    SLM_ASSERT("The QtContainer is not yet initialized, cleaning is thus impossible", m_container);
+    QWidget* parent   = m_container->parentWidget();
+    QDockWidget* dock = qobject_cast<QDockWidget*>(parent);
+    if(dock)
+    {
+        dock->setEnabled(isEnabled);
+    }
+    m_container->setEnabled(isEnabled);
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace container
 } // namespace fwGuiQt
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuBarContainer.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuBarContainer.cpp
index bdbecea..478488f 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuBarContainer.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuBarContainer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,18 +16,20 @@ namespace container
 //-----------------------------------------------------------------------------
 
 QtMenuBarContainer::QtMenuBarContainer(::fwGui::GuiBaseObject::Key key) throw() : m_menuBar(0)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 QtMenuBarContainer::~QtMenuBarContainer() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void QtMenuBarContainer::clean()
 {
-    SLM_ASSERT("Sorry, Qt MenuBar not yet initialized, cleaning impossible", m_menuBar);
+    SLM_ASSERT("The Qt MenuBar is not yet initialized, cleaning is thus impossible", m_menuBar);
 
     m_menuBar->clear();
 
@@ -43,7 +45,7 @@ void QtMenuBarContainer::clean()
 
 void QtMenuBarContainer::destroyContainer()
 {
-    SLM_ASSERT("Sorry, Qt MenuBar not yet initialized", m_menuBar);
+    SLM_ASSERT("The Qt MenuBar is not yet initialized", m_menuBar);
 
     QList<QMenu *> allMenu = m_menuBar->findChildren<QMenu *>();
     OSLM_ASSERT("MenuBar container must be empty ( " << allMenu.count() << " menus).", allMenu.empty());
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuContainer.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuContainer.cpp
index 667a5fe..ab65027 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuContainer.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuContainer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,18 +15,20 @@ namespace container
 //-----------------------------------------------------------------------------
 
 QtMenuContainer::QtMenuContainer(::fwGui::GuiBaseObject::Key key) throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 QtMenuContainer::~QtMenuContainer() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void QtMenuContainer::clean()
 {
-    SLM_ASSERT("Sorry, Qt menu not yet initialized, cleaning impossible", m_menu);
+    SLM_ASSERT("The Qt menu is not yet initialized, cleaning is thus impossible", m_menu);
     m_menu->clear();
 }
 
@@ -34,7 +36,7 @@ void QtMenuContainer::clean()
 
 void QtMenuContainer::destroyContainer()
 {
-    SLM_ASSERT("Sorry, Qt menu not yet initialized, cleaning impossible", m_menu);
+    SLM_ASSERT("The Qt menu not yet initialized, cleaning is thus impossible", m_menu);
     delete m_menu;
 }
 
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuItemContainer.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuItemContainer.cpp
index 727ced9..fd559db 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuItemContainer.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtMenuItemContainer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,25 +15,27 @@ namespace container
 //-----------------------------------------------------------------------------
 
 QtMenuItemContainer::QtMenuItemContainer(::fwGui::GuiBaseObject::Key key) throw() : m_menuItem(0)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 QtMenuItemContainer::~QtMenuItemContainer() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void QtMenuItemContainer::clean()
 {
-    SLM_ASSERT("Sorry, qtMenuItem not yet initialized, cleaning impossible", m_menuItem);
+    SLM_ASSERT("The qtMenuItem is not yet initialized, cleaning is thus impossible", m_menuItem);
 }
 
 //-----------------------------------------------------------------------------
 
 void QtMenuItemContainer::destroyContainer()
 {
-    SLM_ASSERT("Sorry, qtMenuItem not yet initialized, cleaning impossible", m_menuItem);
+    SLM_ASSERT("The qtMenuItem is not yet initialized, cleaning is thus impossible", m_menuItem);
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtToolBarContainer.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtToolBarContainer.cpp
index 0931f9c..279940e 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtToolBarContainer.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/container/QtToolBarContainer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,18 +17,20 @@ namespace container
 //-----------------------------------------------------------------------------
 
 QtToolBarContainer::QtToolBarContainer(::fwGui::GuiBaseObject::Key key) throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 QtToolBarContainer::~QtToolBarContainer() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void QtToolBarContainer::clean()
 {
-    SLM_ASSERT("Sorry, Qt toolBar not yet initialized, cleaning impossible", m_toolBar);
+    SLM_ASSERT("The Qt toolBar is not yet initialized, cleaning is thus impossible", m_toolBar);
 
     m_toolBar->clear();
 }
@@ -37,7 +39,7 @@ void QtToolBarContainer::clean()
 
 void QtToolBarContainer::destroyContainer()
 {
-    SLM_ASSERT("Sorry, Qt toolBar not yet initialized, cleaning impossible", m_toolBar);
+    SLM_ASSERT("The Qt toolBar is not yet initialized, cleaning is thus impossible", m_toolBar);
 
     delete m_toolBar;
 }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/InputDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/InputDialog.cpp
index cc43a61..631521e 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/InputDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/InputDialog.cpp
@@ -1,20 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QApplication>
-#include <QInputDialog>
-#include <QObject>
 
-#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
+#include "fwGuiQt/dialog/InputDialog.hpp"
 
 #include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/dialog/InputDialog.hpp"
-
+#include <boost/assign/list_of.hpp>
+#include <QApplication>
+#include <QInputDialog>
+#include <QObject>
 
 fwGuiRegisterMacro( ::fwGuiQt::dialog::InputDialog, ::fwGui::dialog::IInputDialog::REGISTRY_KEY );
 
@@ -26,12 +24,14 @@ namespace dialog
 //------------------------------------------------------------------------------
 
 InputDialog::InputDialog(::fwGui::GuiBaseObject::Key key) : m_input("")
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 InputDialog::~InputDialog()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -61,10 +61,11 @@ void InputDialog::setInput(const std::string &text)
 std::string InputDialog::getInput()
 {
     QString title = QObject::tr(m_title.c_str());
-    QString text = QObject::tr(m_message.c_str());
+    QString text  = QObject::tr(m_message.c_str());
 
     bool IsOkClicked;
-    QString outputText = QInputDialog::getText(qApp->activeWindow(), title, text, QLineEdit::Normal,QString::fromStdString(m_input),&IsOkClicked);
+    QString outputText = QInputDialog::getText(
+        qApp->activeWindow(), title, text, QLineEdit::Normal,QString::fromStdString(m_input),&IsOkClicked);
 
     if ( IsOkClicked)
     {
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LocationDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LocationDialog.cpp
index 7014a38..b29cb13 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LocationDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LocationDialog.cpp
@@ -1,25 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/path.hpp>
-#include <boost/tokenizer.hpp>
-
-#include <QFileDialog>
-#include <QString>
-#include <QApplication>
+#include "fwGuiQt/dialog/LocationDialog.hpp"
 
-#include <fwGui/registry/macros.hpp>
-#include <fwData/location/SingleFile.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/MultiFiles.hpp>
+#include <fwData/location/SingleFile.hpp>
 
 #include <fwGui/dialog/ILocationDialog.hpp>
+#include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/dialog/LocationDialog.hpp"
+#include <boost/filesystem/path.hpp>
+#include <boost/tokenizer.hpp>
+#include <functional>
+#include <QApplication>
 
+#include <QFileDialog>
+#include <QString>
 
 
 fwGuiRegisterMacro( ::fwGuiQt::dialog::LocationDialog, ::fwGui::dialog::ILocationDialog::REGISTRY_KEY );
@@ -33,31 +33,55 @@ namespace dialog
 //------------------------------------------------------------------------------
 
 LocationDialog::LocationDialog(::fwGui::GuiBaseObject::Key key) :
-        m_style(::fwGui::dialog::ILocationDialog::NONE),
-        m_type(::fwGui::dialog::ILocationDialog::SINGLE_FILE)
-{}
+    m_style(::fwGui::dialog::ILocationDialog::NONE),
+    m_type(::fwGui::dialog::ILocationDialog::SINGLE_FILE)
+{
+}
 
 //------------------------------------------------------------------------------
 
 ::fwData::location::ILocation::sptr LocationDialog::show()
 {
-    QWidget *parent = qApp->activeWindow();
-    QString caption = QString::fromStdString(this->getTitle());
+    QWidget *parent                             = qApp->activeWindow();
+    QString caption                             = QString::fromStdString(this->getTitle());
     const ::boost::filesystem::path defaultPath = this->getDefaultLocation();
-    QString path = QString::fromStdString(defaultPath.string());
-    QString filter = this->fileFilters();
+    QString path                                = QString::fromStdString(defaultPath.string());
+    QString filter                              = this->fileFilters();
     ::fwData::location::ILocation::sptr location;
 
+    QFileDialog dialog;
+    dialog.setDirectory(path);
+    dialog.setNameFilter(filter);
+    dialog.setWindowTitle(caption);
+
+    if (m_style & ::fwGui::dialog::ILocationDialog::READ)
+    {
+        dialog.setAcceptMode(QFileDialog::AcceptMode::AcceptOpen);
+    }
+    else
+    {
+        dialog.setAcceptMode(QFileDialog::AcceptMode::AcceptSave);
+    }
+
+
     if (m_type == ::fwGui::dialog::ILocationDialog::MULTI_FILES)
     {
         SLM_ASSERT("MULTI_FILES type must have a READ style", m_style & ::fwGui::dialog::ILocationDialog::READ);
 
-        QStringList files = QFileDialog::getOpenFileNames( parent, caption, path, filter);
+        dialog.setFilter(QDir::Filter::Files);
+        dialog.setFileMode(QFileDialog::FileMode::ExistingFiles);
+        QStringList files;
+        if (dialog.exec())
+        {
+            files      = dialog.selectedFiles();
+            m_wildcard = dialog.selectedNameFilter().toStdString();
+
+        }
         if(!files.isEmpty())
         {
             ::fwData::location::MultiFiles::sptr multifiles = ::fwData::location::MultiFiles::New();
             std::vector< ::boost::filesystem::path > paths;
-            BOOST_FOREACH (QString filename, files)
+            for (QString filename : files)
             {
                 ::boost::filesystem::path bpath( filename.toStdString() );
                 paths.push_back(bpath);
@@ -69,14 +93,23 @@ LocationDialog::LocationDialog(::fwGui::GuiBaseObject::Key key) :
     else if (m_type == ::fwGui::dialog::ILocationDialog::SINGLE_FILE)
     {
         QString fileName;
-        if ( (m_style & ::fwGui::dialog::ILocationDialog::READ) || (m_style & ::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST) )
+        if ( (m_style & ::fwGui::dialog::ILocationDialog::READ) ||
+             (m_style & ::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST) )
         {
-            fileName = QFileDialog::getOpenFileName(parent, caption, path, filter);
-
+            dialog.setFileMode(QFileDialog::FileMode::ExistingFile);
+            if (dialog.exec() && !dialog.selectedFiles().empty())
+            {
+                fileName   = dialog.selectedFiles()[0];
+                m_wildcard = dialog.selectedNameFilter().toStdString();
+            }
         }
         else if ( m_style & ::fwGui::dialog::ILocationDialog::WRITE )
         {
-            fileName = QFileDialog::getSaveFileName(parent, caption,  path,  filter);
+            if (dialog.exec() && !dialog.selectedFiles().empty())
+            {
+                fileName   = dialog.selectedFiles()[0];
+                m_wildcard = dialog.selectedNameFilter().toStdString();
+            }
 
         }
         if(!fileName.isNull())
@@ -87,7 +120,16 @@ LocationDialog::LocationDialog(::fwGui::GuiBaseObject::Key key) :
     }
     else if (m_type == ::fwGui::dialog::ILocationDialog::FOLDER)
     {
-        QString dir = QFileDialog::getExistingDirectory(parent, caption, path, QFileDialog::ShowDirsOnly | QFileDialog::DontResolveSymlinks);
+        dialog.setFilter(QDir::Filter::Dirs);
+        dialog.setAcceptMode(QFileDialog::AcceptMode::AcceptOpen);
+        dialog.setFileMode(QFileDialog::FileMode::Directory);
+
+        QString dir;
+        if (dialog.exec() && !dialog.selectedFiles().empty())
+        {
+            dir = dialog.selectedFiles()[0];
+        }
+
         if(!dir.isNull())
         {
             ::boost::filesystem::path bpath( dir.toStdString()  );
@@ -110,17 +152,19 @@ void LocationDialog::setType( ::fwGui::dialog::ILocationDialog::Types type )
 {
     if ( option == ::fwGui::dialog::ILocationDialog::WRITE )
     {
-        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style & ~ ::fwGui::dialog::ILocationDialog::READ) ;
+        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style & ~::fwGui::dialog::ILocationDialog::READ);
         m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style | ::fwGui::dialog::ILocationDialog::WRITE);
     }
     else if ( option == ::fwGui::dialog::ILocationDialog::READ )
     {
-        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style & ~::fwGui::dialog::ILocationDialog::WRITE) ;
-        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style | ::fwGui::dialog::ILocationDialog::READ) ;
+        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style & ~::fwGui::dialog::ILocationDialog::WRITE);
+        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style | ::fwGui::dialog::ILocationDialog::READ);
     }
     else if ( option == ::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST )
     {
-        m_style = (::fwGui::dialog::ILocationDialog::Options) (m_style | ::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST)  ;
+        m_style =
+            (::fwGui::dialog::ILocationDialog::Options) (m_style |
+                                                         ::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST);
     }
 
     return *this;
@@ -143,18 +187,39 @@ QString LocationDialog::fileFilters()
     std::vector< std::pair < std::string, std::string > >::const_iterator iter;
     for ( iter = m_filters.begin(); iter!= m_filters.end(); ++iter)
     {
-        std::string filterName = iter->first;
+        std::string filterName   = iter->first;
         std::string rawWildcards = iter->second;
 
         if (iter!=m_filters.begin() )
         {
             result += ";;";
         }
-        result += filterName +" (" +  rawWildcards +")" ;
+        result += filterName +" (" +  rawWildcards +")";
     }
     return QString::fromStdString(result);
 }
 
 //------------------------------------------------------------------------------
+
+std::string LocationDialog::getCurrentSelection() const
+{
+    std::string extension;
+    std::vector< std::pair < std::string, std::string > >::const_iterator iter;
+    for ( iter = m_filters.begin(); iter != m_filters.end(); ++iter)
+    {
+        const std::string& filterName       = iter->first;
+        const std::string& rawWildcards     = iter->second;
+        const std::string& availableFilters = filterName + " (" +  rawWildcards + ")";
+        if (!m_wildcard.compare(availableFilters) && iter != m_filters.begin())
+        {
+            extension = &rawWildcards[1];
+            break;
+        }
+    }
+
+    return extension;
+}
+
+//------------------------------------------------------------------------------
 } // namespace dialog
 } //namespace fwGuiQt
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LoggerDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LoggerDialog.cpp
new file mode 100644
index 0000000..d81f09e
--- /dev/null
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/LoggerDialog.cpp
@@ -0,0 +1,225 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGuiQt/dialog/LoggerDialog.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwGui/registry/macros.hpp>
+
+#include <QApplication>
+#include <QCheckBox>
+#include <QHBoxLayout>
+#include <QHeaderView>
+#include <QLabel>
+#include <QPushButton>
+#include <QTableWidgetItem>
+#include <QVBoxLayout>
+#include <QWidget>
+
+#include <boost/foreach.hpp>
+
+fwGuiRegisterMacro( ::fwGuiQt::dialog::LoggerDialog, ::fwGui::dialog::ILoggerDialog::REGISTRY_KEY );
+
+namespace fwGuiQt
+{
+namespace dialog
+{
+
+//------------------------------------------------------------------------------
+
+LoggerDialog::LoggerDialog(::fwGui::GuiBaseObject::Key key)
+{
+}
+
+//------------------------------------------------------------------------------
+
+LoggerDialog::~LoggerDialog()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void LoggerDialog::setTitle(const std::string& title)
+{
+    m_title = title;
+}
+
+//------------------------------------------------------------------------------
+
+void LoggerDialog::setMessage(const std::string& message)
+{
+    m_message = message;
+}
+
+//------------------------------------------------------------------------------
+
+void LoggerDialog::setLogger(const ::fwLog::Logger::sptr& logger)
+{
+    m_logger = logger;
+}
+
+//------------------------------------------------------------------------------
+
+bool LoggerDialog::show()
+{
+    QWidget* parent = qApp->activeWindow();
+
+    // Size policy
+    QSizePolicy policy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+
+    // Create dialog
+    m_dialog = new QDialog(parent);
+    m_dialog->resize(500, 50);
+    m_dialog->setWindowTitle(QString::fromStdString(m_title));
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+    mainLayout->setAlignment(Qt::AlignTop);
+    m_dialog->setLayout(mainLayout);
+
+    // Disable close button
+    m_dialog->setWindowFlags(Qt::Window | Qt::CustomizeWindowHint | Qt::WindowTitleHint| Qt::WindowSystemMenuHint);
+
+    // Create icon and message widget
+    QHBoxLayout* messageLayout = new QHBoxLayout();
+    QWidget* messageWidget     = new QWidget();
+    messageWidget->setSizePolicy(policy);
+    messageWidget->setLayout(messageLayout);
+    messageLayout->setAlignment(Qt::AlignTop);
+
+    // Create icon
+    QLabel* iconLabel = new QLabel();
+    if(m_logger->count(::fwLog::Log::CRITICAL) > 0)
+    {
+        iconLabel->setPixmap(QIcon("share/fwGuiQt_0-1/critical.png").pixmap(48, 48));
+    }
+    else if(m_logger->count(::fwLog::Log::WARNING) > 0)
+    {
+        iconLabel->setPixmap(QIcon("share/fwGuiQt_0-1/warning.png").pixmap(48, 48));
+    }
+    else
+    {
+        iconLabel->setPixmap(QIcon("share/fwGuiQt_0-1/information.png").pixmap(48, 48));
+    }
+    messageLayout->addWidget(iconLabel);
+
+    // Create message
+    std::stringstream ss;
+    ss << m_message <<
+        "<br><br>" << "<b>Log report :</b> " << m_logger->count(::fwLog::Log::CRITICAL) << " critical, " <<
+        m_logger->count(::fwLog::Log::WARNING) << " warning and " <<
+        m_logger->count(::fwLog::Log::INFORMATION) << " information messages.";
+
+    QLabel* messageLabel = new QLabel(ss.str().c_str());
+    messageLayout->addWidget(messageLabel);
+
+    // Create button widget
+    QHBoxLayout* buttonLayout = new QHBoxLayout();
+    QWidget* buttonWidget     = new QWidget();
+    buttonWidget->setSizePolicy(policy);
+    buttonWidget->setLayout(buttonLayout);
+
+    // Create OK button
+    QPushButton* okButton = new QPushButton(tr("Ok"));
+    okButton->setSizePolicy(policy);
+    buttonLayout->addWidget(okButton);
+
+    // Create CANCEL button
+    QPushButton* cancelButton = new QPushButton(tr("Cancel"));
+    cancelButton->setSizePolicy(policy);
+    buttonLayout->addWidget(cancelButton);
+
+    // Create a checkbox to display the logs
+    QCheckBox* checkbox = new QCheckBox("Details");
+    checkbox->setStyleSheet("QCheckBox::indicator:unchecked { image: url(share/fwGuiQt_0-1/details-hidden.png); } "
+                            "QCheckBox::indicator:checked { image: url(share/fwGuiQt_0-1/details-shown.png); }");
+
+    // Create log table
+    m_logTableWidget = new QTableWidget(static_cast<int>(m_logger->count()), 2);
+    m_logTableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("Level"));
+    m_logTableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("Message"));
+    m_logTableWidget->setColumnWidth(0,120);
+    m_logTableWidget->horizontalHeader()->setStretchLastSection(true);
+
+    // Fill log table
+    ::fwLog::Logger::ConstIteratorType it = m_logger->begin();
+    int row = 0;
+    for(; it != m_logger->end(); ++it, ++row)
+    {
+        std::string levelString = "Unknown";
+        QIcon levelIcon;
+        ::fwLog::Log::LevelType level = it->getLevel();
+        if (level == ::fwLog::Log::INFORMATION)
+        {
+            levelString = "Information";
+            levelIcon   = QIcon("share/fwGuiQt_0-1/information.png");
+        }
+        else if (level == ::fwLog::Log::WARNING)
+        {
+            levelString = "Warning";
+            levelIcon   = QIcon("share/fwGuiQt_0-1/warning.png");
+        }
+        else if (level == ::fwLog::Log::CRITICAL)
+        {
+            levelString = "Critical";
+            levelIcon   = QIcon("share/fwGuiQt_0-1/critical.png");
+        }
+
+        QTableWidgetItem* levelItem = new QTableWidgetItem(levelIcon, levelString.c_str());
+        levelItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
+        m_logTableWidget->setItem(row, 0, levelItem);
+
+        QTableWidgetItem* messageItem = new QTableWidgetItem(it->getMessage().c_str());
+        messageItem->setFlags(Qt::ItemIsSelectable|Qt::ItemIsEnabled);
+        m_logTableWidget->setItem(row, 1, messageItem);
+    }
+
+    // Add widget to dialog
+    mainLayout->addWidget(messageWidget, 0, Qt::AlignLeft);
+    mainLayout->addWidget(checkbox);
+    mainLayout->addWidget(m_logTableWidget);
+    mainLayout->addWidget(buttonWidget, 0, Qt::AlignRight);
+
+    // Hide log table
+    m_logTableWidget->hide();
+
+    // Connect buttons
+    QObject::connect(okButton, SIGNAL(clicked()), m_dialog, SLOT(accept()));
+    QObject::connect(cancelButton, SIGNAL(clicked()), m_dialog, SLOT(reject()));
+    QObject::connect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(displayLogs(int)));
+
+    // Show dialog and return result
+    bool result = m_dialog->exec();
+
+    // Disconnect buttons
+    QObject::disconnect(checkbox, SIGNAL(stateChanged(int)), this, SLOT(displayLogs(int)));
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+void LoggerDialog::displayLogs(int state)
+{
+    int width = m_dialog->size().width();
+
+    if(state)
+    {
+        m_logTableWidget->show();
+    }
+    else
+    {
+        m_logTableWidget->hide();
+    }
+
+    m_dialog->adjustSize();
+    m_dialog->resize(width, m_dialog->baseSize().height());
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace dialog
+} // namespace fwGuiQt
+
+
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MessageDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MessageDialog.cpp
index ad4d0e1..70a181b 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MessageDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MessageDialog.cpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign/list_of.hpp>
-#include <boost/foreach.hpp>
-
-#include <QApplication>
-#include <QMessageBox>
+#include "fwGuiQt/dialog/MessageDialog.hpp"
 
 #include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/dialog/MessageDialog.hpp"
-
+#include <boost/assign/list_of.hpp>
+#include <QApplication>
+#include <QMessageBox>
+#include <QPushButton>
+#include <QVector>
 
 fwGuiRegisterMacro( ::fwGuiQt::dialog::MessageDialog, ::fwGui::dialog::IMessageDialog::REGISTRY_KEY );
 
@@ -26,18 +25,19 @@ namespace dialog
 
 typedef const std::map< ::fwGui::dialog::IMessageDialog::Icons, QMessageBox::Icon> MessageDialogQtIconsType;
 MessageDialogQtIconsType messageDialogQtIcons =
-                        ::boost::assign::map_list_of(::fwGui::dialog::IMessageDialog::NONE     , QMessageBox::NoIcon     )
-                                                    (::fwGui::dialog::IMessageDialog::QUESTION , QMessageBox::Question   )
-                                                    (::fwGui::dialog::IMessageDialog::INFO     , QMessageBox::Information)
-                                                    (::fwGui::dialog::IMessageDialog::WARNING  , QMessageBox::Warning    )
-                                                    (::fwGui::dialog::IMessageDialog::CRITICAL , QMessageBox::Critical   );
-
-typedef const std::map< ::fwGui::dialog::IMessageDialog::Buttons, QMessageBox::StandardButtons> MessageDialogQtButtonType;
+    ::boost::assign::map_list_of(::fwGui::dialog::IMessageDialog::NONE, QMessageBox::NoIcon     )
+        (::fwGui::dialog::IMessageDialog::QUESTION, QMessageBox::Question   )
+        (::fwGui::dialog::IMessageDialog::INFO, QMessageBox::Information)
+        (::fwGui::dialog::IMessageDialog::WARNING, QMessageBox::Warning    )
+        (::fwGui::dialog::IMessageDialog::CRITICAL, QMessageBox::Critical   );
+
+typedef const std::map< ::fwGui::dialog::IMessageDialog::Buttons,
+                        QMessageBox::StandardButtons> MessageDialogQtButtonType;
 MessageDialogQtButtonType messageDialogQtButton =
-                        ::boost::assign::map_list_of(::fwGui::dialog::IMessageDialog::OK     , QMessageBox::Ok   )
-                                                    (::fwGui::dialog::IMessageDialog::CANCEL , QMessageBox::Cancel)
-                                                    (::fwGui::dialog::IMessageDialog::YES    , QMessageBox::Yes    )
-                                                    (::fwGui::dialog::IMessageDialog::NO     , QMessageBox::No   );
+    ::boost::assign::map_list_of(::fwGui::dialog::IMessageDialog::OK, QMessageBox::Ok   )
+        (::fwGui::dialog::IMessageDialog::CANCEL, QMessageBox::Cancel)
+        (::fwGui::dialog::IMessageDialog::YES, QMessageBox::Yes    )
+        (::fwGui::dialog::IMessageDialog::NO, QMessageBox::No   );
 
 //------------------------------------------------------------------------------
 
@@ -45,12 +45,14 @@ MessageDialog::MessageDialog(::fwGui::GuiBaseObject::Key key) :
     m_buttons(::fwGui::dialog::IMessageDialog::NOBUTTON),
     m_defaultButton(::fwGui::dialog::IMessageDialog::NOBUTTON),
     m_icon(::fwGui::dialog::IMessageDialog::NONE)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 MessageDialog::~MessageDialog()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -82,6 +84,13 @@ void MessageDialog::addButton( ::fwGui::dialog::IMessageDialog::Buttons button )
 
 //-----------------------------------------------------------------------------
 
+void MessageDialog::addCustomButton(QPushButton* button)
+{
+    m_customButtons.push_back(button);
+}
+
+//-----------------------------------------------------------------------------
+
 void MessageDialog::setDefaultButton(::fwGui::dialog::IMessageDialog::Buttons button )
 {
     m_defaultButton = button;
@@ -94,12 +103,12 @@ void MessageDialog::setDefaultButton(::fwGui::dialog::IMessageDialog::Buttons bu
     MessageDialogQtIconsType::const_iterator iterIcon = messageDialogQtIcons.find(m_icon);
     SLM_ASSERT("Unknown Icon", iterIcon != messageDialogQtIcons.end());
 
-    QMessageBox::Icon icon = iterIcon->second;
-    QString title = QString::fromStdString(m_title);
-    QString text = QString::fromStdString(m_message);
+    QMessageBox::Icon icon               = iterIcon->second;
+    QString title                        = QString::fromStdString(m_title);
+    QString text                         = QString::fromStdString(m_message);
     QMessageBox::StandardButtons buttons = QMessageBox::NoButton;
 
-    BOOST_FOREACH(MessageDialogQtButtonType::value_type button, messageDialogQtButton)
+    for(MessageDialogQtButtonType::value_type button :  messageDialogQtButton)
     {
         if ( m_buttons & button.first)
         {
@@ -109,17 +118,27 @@ void MessageDialog::setDefaultButton(::fwGui::dialog::IMessageDialog::Buttons bu
 
     QMessageBox box(icon, title, text, buttons, qApp->activeWindow());
 
+    for(int i = 0; i < m_customButtons.size(); ++i)
+    {
+        box.addButton(m_customButtons[i], QMessageBox::ActionRole);
+    }
+
+    for(int i = 0; i < m_customButtons.size(); ++i)
+    {
+        box.addButton(m_customButtons[i], QMessageBox::ActionRole);
+    }
+
     MessageDialogQtButtonType::const_iterator iter = messageDialogQtButton.find(m_defaultButton);
     if(iter != messageDialogQtButton.end())
     {
         box.setDefaultButton(QMessageBox::StandardButton(static_cast<int>(iter->second)));
     }
 
-    ::fwGui::dialog::IMessageDialog::Buttons result;
+    ::fwGui::dialog::IMessageDialog::Buttons result = ::fwGui::dialog::IMessageDialog::NOBUTTON;
 
     box.exec();
 
-    BOOST_FOREACH(MessageDialogQtButtonType::value_type button, messageDialogQtButton)
+    for(MessageDialogQtButtonType::value_type button :  messageDialogQtButton)
     {
         if ( box.standardButton( box.clickedButton() ) == button.second)
         {
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MultiSelectorDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MultiSelectorDialog.cpp
index 1e5a508..2213497 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MultiSelectorDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/MultiSelectorDialog.cpp
@@ -1,24 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <QApplication>
-#include <QPushButton>
-#include <QListWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QLabel>
-
-#include <boost/foreach.hpp>
+#include "fwGuiQt/dialog/MultiSelectorDialog.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/dialog/MultiSelectorDialog.hpp"
+#include <QApplication>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QListWidget>
+#include <QPushButton>
+#include <QPushButton>
+#include <QVBoxLayout>
 
 fwGuiRegisterMacro( ::fwGuiQt::dialog::MultiSelectorDialog, ::fwGui::dialog::IMultiSelectorDialog::REGISTRY_KEY );
 
@@ -31,13 +28,15 @@ namespace dialog
 
 MultiSelectorDialog::MultiSelectorDialog(::fwGui::GuiBaseObject::Key key)
     : m_message(""),
-    m_title("")
-{}
+      m_title("")
+{
+}
 
 //------------------------------------------------------------------------------
 
 MultiSelectorDialog::~MultiSelectorDialog()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -63,7 +62,7 @@ void MultiSelectorDialog::setTitle(std::string _title)
     dialog->setWindowTitle(QString::fromStdString(m_title));
 
     QListWidget *selectionList = new QListWidget(dialog);
-    BOOST_FOREACH( Selections::value_type selection, m_selections)
+    for( Selections::value_type selection :  m_selections)
     {
         QListWidgetItem* item = new QListWidgetItem(QString::fromStdString(selection.first), selectionList);
         item->setCheckState( (selection.second ? Qt::Checked : Qt::Unchecked) );
@@ -73,7 +72,7 @@ void MultiSelectorDialog::setTitle(std::string _title)
     QListWidgetItem* firstItem = selectionList->item(0);
     selectionList->setCurrentItem(firstItem);
 
-    QPushButton* okButton = new QPushButton(tr("Ok"));
+    QPushButton* okButton     = new QPushButton(tr("Ok"));
     QPushButton* cancelButton = new QPushButton(tr("Cancel"));
 
     QHBoxLayout *hLayout = new QHBoxLayout();
@@ -97,12 +96,12 @@ void MultiSelectorDialog::setTitle(std::string _title)
     Selections selections;
     if(dialog->exec())
     {
-        int indexItem=0;
-        BOOST_FOREACH( Selections::value_type selection, m_selections)
+        int indexItem = 0;
+        for( Selections::value_type selection :  m_selections)
         {
             selections[selection.first] = (selectionList->item(indexItem)->checkState() == Qt::Checked);
             indexItem++;
-         }
+        }
     }
     return selections;
 }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/ProgressDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/ProgressDialog.cpp
index 72918f4..9d8d0cd 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/ProgressDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/ProgressDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,11 +24,11 @@ namespace dialog
 //------------------------------------------------------------------------------
 
 ProgressDialog::ProgressDialog( ::fwGui::GuiBaseObject::Key key, const std::string &title, const std::string &message)
-:   m_title (""),
-    m_pdialog ( NULL ),
-    m_pprogressbar ( NULL ),
-    m_pcancelButton ( NULL ),
-    m_pmainWindow ( NULL )
+    :   m_title (""),
+      m_pdialog ( NULL ),
+      m_pprogressbar ( NULL ),
+      m_pcancelButton ( NULL ),
+      m_pmainWindow ( NULL )
 {
 
     // Use progress widget defined by IFrameSrv
@@ -65,7 +65,7 @@ ProgressDialog::ProgressDialog( ::fwGui::GuiBaseObject::Key key, const std::stri
     else
     {
         m_pdialog = new QProgressDialog( 0, Qt::WindowStaysOnTopHint );
-       //m_pdialog = new QProgressDialog( activeWindow, Qt::WindowStaysOnTopHint );
+        //m_pdialog = new QProgressDialog( activeWindow, Qt::WindowStaysOnTopHint );
 
         // FIXME modal dialog has conflict with MessageHandler
         //m_pdialog->setWindowModality(Qt::WindowModal);
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/PulseProgressDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/PulseProgressDialog.cpp
index 1d62a3e..3a20a44 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/PulseProgressDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/PulseProgressDialog.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,6 +8,7 @@
 #include <QString>
 #include <QFutureWatcher>
 #include <QApplication>
+#include <QtConcurrent>
 
 #include <fwCore/base.hpp>
 #include <fwGui/registry/macros.hpp>
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/SelectorDialog.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/SelectorDialog.cpp
index 39d9e8a..80a7d0c 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/SelectorDialog.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/dialog/SelectorDialog.cpp
@@ -1,24 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <QApplication>
-#include <QPushButton>
-#include <QListWidget>
-#include <QHBoxLayout>
-#include <QVBoxLayout>
-#include <QPushButton>
-#include <QLabel>
-
-#include <boost/foreach.hpp>
+#include "fwGuiQt/dialog/SelectorDialog.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/dialog/SelectorDialog.hpp"
+#include <QApplication>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QListWidget>
+#include <QPushButton>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QDialog>
 
 fwGuiRegisterMacro( ::fwGuiQt::dialog::SelectorDialog, ::fwGui::dialog::ISelectorDialog::REGISTRY_KEY );
 
@@ -30,12 +28,14 @@ namespace dialog
 //------------------------------------------------------------------------------
 
 SelectorDialog::SelectorDialog(::fwGui::GuiBaseObject::Key key) : m_message(""),  m_title("")
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 SelectorDialog::~SelectorDialog()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -61,7 +61,7 @@ std::string SelectorDialog::show()
     dialog->setWindowTitle(QString::fromStdString(m_title));
 
     QListWidget *selectionList = new QListWidget(dialog);
-    BOOST_FOREACH( std::string selection, m_selections)
+    for( std::string selection :  m_selections)
     {
         selectionList->addItem(QString::fromStdString ( selection ));
     }
@@ -69,8 +69,8 @@ std::string SelectorDialog::show()
     QListWidgetItem* firstItem = selectionList->item(0);
     selectionList->setCurrentItem(firstItem);
 
-    QPushButton* okButton = new QPushButton(tr("Ok"));
-    QPushButton* cancelButton = new QPushButton(tr("Cancel"));
+    QPushButton* okButton     = new QPushButton(QObject::tr("Ok"));
+    QPushButton* cancelButton = new QPushButton(QObject::tr("Cancel"));
 
     QHBoxLayout *hLayout = new QHBoxLayout();
     hLayout->addWidget(okButton);
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/CppHighlighter.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/CppHighlighter.cpp
index bf8989b..3113746 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/CppHighlighter.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/CppHighlighter.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
 #include <QtGui>
 
 #include "fwGuiQt/highlighter/CppHighlighter.hpp"
@@ -32,10 +31,10 @@ CppHighlighter::CppHighlighter(QTextDocument *parent) : QSyntaxHighlighter(paren
                     << "template" << "typedef" << "typename"
                     << "union" << "unsigned" << "virtual"
                     << "void" << "volatile";
-    BOOST_FOREACH(const QString &pattern, keywordPatterns)
+    for(const QString &pattern :  keywordPatterns)
     {
         rule.pattern = QRegExp("\\b" + pattern + "\\b");
-        rule.format = keywordFormat;
+        rule.format  = keywordFormat;
         highlightingRules.append(rule);
     }
 
@@ -43,13 +42,13 @@ CppHighlighter::CppHighlighter(QTextDocument *parent) : QSyntaxHighlighter(paren
     classFormat.setFontWeight(QFont::Bold);
     classFormat.setForeground(Qt::darkMagenta);
     rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b");
-    rule.format = classFormat;
+    rule.format  = classFormat;
     highlightingRules.append(rule);
 
     QTextCharFormat singleLineCommentFormat;
     singleLineCommentFormat.setForeground(Qt::red);
     rule.pattern = QRegExp("//[^\n]*");
-    rule.format = singleLineCommentFormat;
+    rule.format  = singleLineCommentFormat;
     highlightingRules.append(rule);
 
     multiLineCommentFormat.setForeground(Qt::red);
@@ -57,25 +56,25 @@ CppHighlighter::CppHighlighter(QTextDocument *parent) : QSyntaxHighlighter(paren
     QTextCharFormat quotationFormat;
     quotationFormat.setForeground(Qt::darkGreen);
     rule.pattern = QRegExp("\".*\"");
-    rule.format = quotationFormat;
+    rule.format  = quotationFormat;
     highlightingRules.append(rule);
 
     QTextCharFormat functionFormat;
     functionFormat.setFontItalic(true);
     functionFormat.setForeground(Qt::blue);
     rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()");
-    rule.format = functionFormat;
+    rule.format  = functionFormat;
     highlightingRules.append(rule);
 
     commentStartExpression = QRegExp("/\\*");
-    commentEndExpression = QRegExp("\\*/");
+    commentEndExpression   = QRegExp("\\*/");
 }
 
 //------------------------------------------------------------------------------
 
 void CppHighlighter::highlightBlock(const QString &text)
 {
-    BOOST_FOREACH(const HighlightingRule &rule, highlightingRules)
+    for(const HighlightingRule &rule :  highlightingRules)
     {
         QRegExp expression(rule.pattern);
         int index = expression.indexIn(text);
@@ -90,7 +89,9 @@ void CppHighlighter::highlightBlock(const QString &text)
 
     int startIndex = 0;
     if (previousBlockState() != 1)
+    {
         startIndex = commentStartExpression.indexIn(text);
+    }
 
     while (startIndex >= 0)
     {
@@ -100,10 +101,11 @@ void CppHighlighter::highlightBlock(const QString &text)
         {
             setCurrentBlockState(1);
             commentLength = text.length() - startIndex;
-        } else
+        }
+        else
         {
             commentLength = endIndex - startIndex
-                    + commentEndExpression.matchedLength();
+                            + commentEndExpression.matchedLength();
         }
         setFormat(startIndex, commentLength, multiLineCommentFormat);
         startIndex = commentStartExpression.indexIn(text, startIndex + commentLength);
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/PythonHighlighter.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/PythonHighlighter.cpp
index f05cb49..07c847c 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/PythonHighlighter.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/highlighter/PythonHighlighter.cpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <QtGui>
-
 #include "fwGuiQt/highlighter/PythonHighlighter.hpp"
 
+#include <QtGui>
+
 namespace fwGuiQt
 {
 namespace highlighter
@@ -31,10 +30,10 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
                     << "raise" << "return" << "try" << "while" << "yield"
                     << "None" << "True" << "False";
     rule.nth = 0;
-    BOOST_FOREACH(const QString &pattern, keywordPatterns)
+    for(const QString &pattern :  keywordPatterns)
     {
         rule.pattern = QRegExp( "\\b" + pattern + "\\b");
-        rule.format = keywordFormat;
+        rule.format  = keywordFormat;
         highlightingRules.append(rule);
     }
 
@@ -43,19 +42,19 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     operatorsFormat.setForeground(Qt::red);
     QStringList operatorsPatterns;
     operatorsPatterns << "="
-                    // Comparison
-                    << "==" << "!=" << "<" << "<=" << ">" << ">="
-                    // Arithmetic
-                    << "\\+" << "-" << "\\*" << "/" << "//" << "\\%" << "\\*\\*"
-                    // In-place
-                    << "\\+=" << "-=" << "\\*=" << "/=" << "\\%="
-                    // Bitwise
-                    << "\\^" << "\\|" << "\\&" << "\\~" << ">>" << "<<";
+        // Comparison
+                      << "==" << "!=" << "<" << "<=" << ">" << ">="
+        // Arithmetic
+                      << "\\+" << "-" << "\\*" << "/" << "//" << "\\%" << "\\*\\*"
+        // In-place
+                      << "\\+=" << "-=" << "\\*=" << "/=" << "\\%="
+        // Bitwise
+                      << "\\^" << "\\|" << "\\&" << "\\~" << ">>" << "<<";
     rule.nth = 0;
-    BOOST_FOREACH(const QString &pattern, operatorsPatterns)
+    for(const QString &pattern :  operatorsPatterns)
     {
         rule.pattern = QRegExp( pattern );
-        rule.format = operatorsFormat;
+        rule.format  = operatorsFormat;
         highlightingRules.append(rule);
     }
 
@@ -65,10 +64,10 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     QStringList bracesPatterns;
     bracesPatterns << "\\{" << "\\}" << "\\(" << "\\)" << "\\[" << "\\]";
     rule.nth = 0;
-    BOOST_FOREACH(const QString &pattern, bracesPatterns)
+    for(const QString &pattern :  bracesPatterns)
     {
         rule.pattern = QRegExp( pattern );
-        rule.format = bracesFormat;
+        rule.format  = bracesFormat;
         highlightingRules.append(rule);
     }
 
@@ -77,8 +76,8 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     classFormat.setFontWeight(QFont::Bold);
     classFormat.setForeground(Qt::darkMagenta);
     rule.pattern = QRegExp("\\bclass\\b\\s*(\\w+)");
-    rule.format = classFormat;
-    rule.nth = 1;
+    rule.format  = classFormat;
+    rule.nth     = 1;
     highlightingRules.append(rule);
 
     // 'def' followed by an identifier
@@ -86,8 +85,8 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     defFormat.setFontWeight(QFont::Bold);
     defFormat.setForeground(Qt::darkMagenta);
     rule.pattern = QRegExp("\\bdef\\b\\s*(\\w+)");
-    rule.format = defFormat;
-    rule.nth = 1;
+    rule.format  = defFormat;
+    rule.nth     = 1;
     highlightingRules.append(rule);
 
     // Python self
@@ -95,16 +94,16 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     selfFormat.setFontItalic(true);
     selfFormat.setForeground(Qt::black);
     rule.pattern = QRegExp("\\bself\\b");
-    rule.format = selfFormat;
-    rule.nth = 0;
+    rule.format  = selfFormat;
+    rule.nth     = 0;
     highlightingRules.append(rule);
 
     // Double-quoted string, possibly containing escape sequences : "[^"\\]*(\\.[^"\\]*)*"
     QTextCharFormat stringFormat;
     stringFormat.setForeground(Qt::darkMagenta);
     rule.pattern = QRegExp("\".*\"");
-    rule.format = stringFormat;
-    rule.nth = 0;
+    rule.format  = stringFormat;
+    rule.nth     = 0;
     highlightingRules.append(rule);
     // Single-quoted string, possibly containing escape sequences : '[^'\\]*(\\.[^'\\]*)*'
     rule.pattern = QRegExp("'.*'");
@@ -115,8 +114,8 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     singleLineCommentFormat.setFontItalic(true);
     singleLineCommentFormat.setForeground(Qt::darkGreen);
     rule.pattern = QRegExp("#[^\\n]*");
-    rule.format = singleLineCommentFormat;
-    rule.nth = 0;
+    rule.format  = singleLineCommentFormat;
+    rule.nth     = 0;
     highlightingRules.append(rule);
 
     // Numeric literals
@@ -124,8 +123,8 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
     QColor col;
     col.setNamedColor("brown");
     numericFormat.setForeground(col);
-    rule.format = numericFormat;
-    rule.nth = 0;
+    rule.format  = numericFormat;
+    rule.nth     = 0;
     rule.pattern = QRegExp("\\b[+-]?[0-9]+[lL]?\\b");
     highlightingRules.append(rule);
     rule.pattern = QRegExp("\\b[+-]?0[xX][0-9A-Fa-f]+[lL]?\\b");
@@ -138,7 +137,7 @@ PythonHighlighter::PythonHighlighter(QTextDocument *parent) : QSyntaxHighlighter
 
 void PythonHighlighter::highlightBlock(const QString &text)
 {
-    BOOST_FOREACH(const HighlightingRule &rule, highlightingRules)
+    for(const HighlightingRule &rule :  highlightingRules)
     {
         QRegExp expression(rule.pattern);
         int index = expression.indexIn(text, 0);
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/CardinalLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/CardinalLayoutManager.cpp
index 4254289..5e936c9 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/CardinalLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/CardinalLayoutManager.cpp
@@ -1,22 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwGuiQt/layoutManager/CardinalLayoutManager.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwGui/registry/macros.hpp>
+
 #include <QMainWindow>
 #include <QDockWidget>
 #include <QBoxLayout>
 #include <QGroupBox>
 #include <QScrollArea>
 
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include "fwGuiQt/layoutManager/CardinalLayoutManager.hpp"
-
 
 fwGuiRegisterMacro( ::fwGui::CardinalLayoutManager,
                     ::fwGui::layoutManager::CardinalLayoutManagerBase::REGISTRY_KEY );
@@ -28,12 +26,14 @@ namespace fwGui
 //-----------------------------------------------------------------------------
 
 CardinalLayoutManager::CardinalLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 CardinalLayoutManager::~CardinalLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -59,7 +59,7 @@ void CardinalLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr
 
     bool hasCentral = false;
 
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
+    for ( ViewInfo viewInfo : views)
     {
         QWidget *insideWidget;
         QScrollArea *scrollArea;
@@ -79,7 +79,7 @@ void CardinalLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr
 
             QWidget *widget = insideWidget;
             SLM_ASSERT("multiple center views are not managed in Qt version of CardinalLayoutManager",
-                    !hasCentral);
+                       !hasCentral);
 
             if (viewInfo.m_useScrollBar)
             {
@@ -98,18 +98,30 @@ void CardinalLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr
         }
         else
         {
-            QDockWidget *dockWidget= new QDockWidget(m_qtWindow);
+            QDockWidget *dockWidget = new QDockWidget(m_qtWindow);
             insideWidget = new QWidget(dockWidget);
             QDockWidget::DockWidgetFeatures features;
 
-            features = QDockWidget::DockWidgetMovable ;
+            features = QDockWidget::DockWidgetMovable;
 
             Qt::DockWidgetArea area;
 
-            if(viewInfo.m_align==RIGHT)       { area = Qt::RightDockWidgetArea;}
-            else if(viewInfo.m_align==LEFT)   { area = Qt::LeftDockWidgetArea;}
-            else if(viewInfo.m_align==BOTTOM) { area = Qt::BottomDockWidgetArea;}
-            else if(viewInfo.m_align==TOP)    { area = Qt::TopDockWidgetArea;}
+            if(viewInfo.m_align==RIGHT)
+            {
+                area = Qt::RightDockWidgetArea;
+            }
+            else if(viewInfo.m_align==LEFT)
+            {
+                area = Qt::LeftDockWidgetArea;
+            }
+            else if(viewInfo.m_align==BOTTOM)
+            {
+                area = Qt::BottomDockWidgetArea;
+            }
+            else if(viewInfo.m_align==TOP)
+            {
+                area = Qt::TopDockWidgetArea;
+            }
 
             m_qtWindow->addDockWidget(area, dockWidget);
             dockWidget->setFeatures(features);
@@ -121,8 +133,10 @@ void CardinalLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr
             else
             {
                 // Remove title bar
-                QWidget *widget = new QWidget(dockWidget);
+                QWidget *widget = new QWidget();
+                dockWidget->setMinimumSize(std::max(viewInfo.m_minSize.first,0), std::max(viewInfo.m_minSize.second,0));
                 dockWidget->setTitleBarWidget(widget);
+
             }
 
             if (viewInfo.m_useScrollBar)
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/FrameLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/FrameLayoutManager.cpp
index e1db1d7..b10d678 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/FrameLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/FrameLayoutManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,6 @@
 #include <fwCore/base.hpp>
 #include <fwGui/registry/macros.hpp>
 
-#include <fwServices/registry/ObjectService.hpp>
 
 #include "fwGuiQt/QtMainFrame.hpp"
 #include "fwGuiQt/layoutManager/FrameLayoutManager.hpp"
@@ -31,12 +30,14 @@ namespace fwGui
 //-----------------------------------------------------------------------------
 
 FrameLayoutManager::FrameLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 FrameLayoutManager::~FrameLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -46,10 +47,10 @@ void FrameLayoutManager::createFrame()
     FrameInfo frameInfo = this->getFrameInfo();
 
     ::fwGuiQt::QtMainFrame *mainframe = new ::fwGuiQt::QtMainFrame();
-    m_qtWindow = mainframe;
+    m_qtWindow                        = mainframe;
 
 
-    ::fwGuiQt::QtMainFrame::CloseCallback fct = ::boost::bind( &::fwGui::FrameLayoutManager::onCloseFrame, this);
+    ::fwGuiQt::QtMainFrame::CloseCallback fct = std::bind( &::fwGui::FrameLayoutManager::onCloseFrame, this);
     mainframe->setCloseCallback(fct);
 
     m_qtWindow->setWindowTitle(QString::fromStdString(frameInfo.m_name));
@@ -60,7 +61,7 @@ void FrameLayoutManager::createFrame()
     if(!frameInfo.m_iconPath.empty())
     {
         QIcon icon(QString::fromStdString(frameInfo.m_iconPath.string()));
-        OSLM_ASSERT("Sorry, unable to create an icon instance from " << frameInfo.m_iconPath.string(), !icon.isNull());
+        OSLM_ASSERT("Unable to create an icon instance from " << frameInfo.m_iconPath.string(), !icon.isNull());
         m_qtWindow->setWindowIcon(icon);
     }
     if(!qApp->activeWindow())
@@ -71,9 +72,13 @@ void FrameLayoutManager::createFrame()
     {
         m_qtWindow->setWindowFlags(Qt::WindowStaysOnTopHint);
     }
+    else if(frameInfo.m_style == ::fwGui::layoutManager::IFrameLayoutManager::MODAL)
+    {
+        m_qtWindow->setWindowModality(Qt::ApplicationModal);
+    }
 
-    int sizeX = (frameInfo.m_size.first  > 0)?frameInfo.m_size.first:m_qtWindow->size().width();
-    int sizeY = (frameInfo.m_size.second > 0)?frameInfo.m_size.second:m_qtWindow->size().height();
+    int sizeX = (frameInfo.m_size.first  > 0) ? frameInfo.m_size.first : m_qtWindow->size().width();
+    int sizeY = (frameInfo.m_size.second > 0) ? frameInfo.m_size.second : m_qtWindow->size().height();
 
     int posX = frameInfo.m_position.first;
     int posY = frameInfo.m_position.second;
@@ -108,13 +113,13 @@ void FrameLayoutManager::createFrame()
 void FrameLayoutManager::destroyFrame()
 {
 
-    this->getRefFrameInfo().m_state = this->getState();
-    this->getRefFrameInfo().m_size.first = m_qtWindow->size().width();
-    this->getRefFrameInfo().m_size.second = m_qtWindow->size().height();
-    this->getRefFrameInfo().m_position.first = m_qtWindow->geometry().x();
+    this->getRefFrameInfo().m_state           = this->getState();
+    this->getRefFrameInfo().m_size.first      = m_qtWindow->size().width();
+    this->getRefFrameInfo().m_size.second     = m_qtWindow->size().height();
+    this->getRefFrameInfo().m_position.first  = m_qtWindow->geometry().x();
     this->getRefFrameInfo().m_position.second = m_qtWindow->geometry().y();
     this->writeConfig();
-    m_qtWindow->close();
+
     QObject::disconnect(m_qtWindow, SIGNAL(destroyed(QObject*)), this, SLOT(onCloseFrame()));
 
     if (m_qtWindow->layout())
@@ -145,19 +150,19 @@ void FrameLayoutManager::setState( FrameState state )
     // Updates the window state.
     switch( state )
     {
-    case ICONIZED:
-        m_qtWindow->showMinimized();
-        break;
-
-    case MAXIMIZED:
-        m_qtWindow->showMaximized();
-        break;
-
-    case FULL_SCREEN:
-        m_qtWindow->showFullScreen();
-        break;
-    default:
-        m_qtWindow->showNormal();
+        case ICONIZED:
+            m_qtWindow->showMinimized();
+            break;
+
+        case MAXIMIZED:
+            m_qtWindow->showMaximized();
+            break;
+
+        case FULL_SCREEN:
+            m_qtWindow->showFullScreen();
+            break;
+        default:
+            m_qtWindow->showNormal();
     }
 }
 
@@ -187,7 +192,7 @@ void FrameLayoutManager::setState( FrameState state )
 bool FrameLayoutManager::isOnScreen(const QPoint& pos)
 {
     bool isVisible = false;
-    for(int i=0; i < QDesktopWidget().screenCount() && !isVisible; ++i)
+    for(int i = 0; i < QDesktopWidget().screenCount() && !isVisible; ++i)
     {
         isVisible = QDesktopWidget().screenGeometry(i).contains(pos, false);
     }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/LineLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/LineLayoutManager.cpp
index fca170d..d280775 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/LineLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/LineLayoutManager.cpp
@@ -1,21 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <QBoxLayout>
-#include <QGroupBox>
-#include <QStyle>
-#include <QScrollArea>
+#include "fwGuiQt/layoutManager/LineLayoutManager.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwGui/registry/macros.hpp>
 
-#include "fwGuiQt/layoutManager/LineLayoutManager.hpp"
-
+#include <QBoxLayout>
+#include <QGroupBox>
+#include <QScrollArea>
+#include <QStyle>
 
 fwGuiRegisterMacro( ::fwGui::LineLayoutManager, ::fwGui::layoutManager::LineLayoutManagerBase::REGISTRY_KEY );
 
@@ -26,12 +23,14 @@ namespace fwGui
 //-----------------------------------------------------------------------------
 
 LineLayoutManager::LineLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 LineLayoutManager::~LineLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -44,7 +43,7 @@ void LineLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr pare
     QBoxLayout *layout = new QBoxLayout(QBoxLayout::LeftToRight);
     layout->setContentsMargins(0, 0, 0, 0);
 
-    QWidget *qtContainer = m_parentContainer->getQtContainer();
+    QWidget *qtContainer    = m_parentContainer->getQtContainer();
     Orientation orientation = this->getOrientation();
 
     if( orientation == VERTICAL )
@@ -59,7 +58,7 @@ void LineLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr pare
     qtContainer->setLayout(layout);
 
     const std::list< ViewInfo> &views = this->getViewsInfo();
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
+    for ( ViewInfo viewInfo : views)
     {
         if(viewInfo.m_isSpacer)
         {
@@ -73,7 +72,7 @@ void LineLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr pare
             {
                 QGroupBox *groupbox = new QGroupBox(qtContainer);
                 groupbox->setTitle(QString::fromStdString(viewInfo.m_caption.second));
-                panel = groupbox;
+                panel   = groupbox;
                 border += groupbox->style()->pixelMetric(QStyle::PM_LayoutTopMargin);
             }
             else
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuBarLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuBarLayoutManager.cpp
index e963d60..e851536 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuBarLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuBarLayoutManager.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include <QMenu>
 #include <QMenuBar>
 #include <QString>
@@ -27,12 +25,14 @@ namespace layoutManager
 //-----------------------------------------------------------------------------
 
 MenuBarLayoutManager::MenuBarLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 MenuBarLayoutManager::~MenuBarLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -45,7 +45,7 @@ void MenuBarLayoutManager::createLayout( ::fwGui::container::fwMenuBar::sptr par
 
     QMenuBar* menuBar = m_parent->getQtMenuBar();
 
-    BOOST_FOREACH ( std::string name, m_menuNames)
+    for ( std::string name : m_menuNames)
     {
         ::fwGuiQt::container::QtMenuContainer::sptr menu = ::fwGuiQt::container::QtMenuContainer::New();
         QMenu *qtMenu = menuBar->addMenu(QString::fromStdString( name ));
@@ -68,7 +68,8 @@ void MenuBarLayoutManager::destroyLayout()
 
 void MenuBarLayoutManager::menuIsVisible(::fwGui::container::fwMenu::sptr fwMenu, bool isVisible)
 {
-    ::fwGuiQt::container::QtMenuContainer::sptr menuContainer = ::fwGuiQt::container::QtMenuContainer::dynamicCast(fwMenu);
+    ::fwGuiQt::container::QtMenuContainer::sptr menuContainer = ::fwGuiQt::container::QtMenuContainer::dynamicCast(
+        fwMenu);
     QMenu *menu = menuContainer->getQtMenu();
     menu->setVisible(isVisible);
 }
@@ -77,7 +78,8 @@ void MenuBarLayoutManager::menuIsVisible(::fwGui::container::fwMenu::sptr fwMenu
 
 void MenuBarLayoutManager::menuIsEnabled(::fwGui::container::fwMenu::sptr fwMenu, bool isEnabled)
 {
-    ::fwGuiQt::container::QtMenuContainer::sptr menuContainer = ::fwGuiQt::container::QtMenuContainer::dynamicCast(fwMenu);
+    ::fwGuiQt::container::QtMenuContainer::sptr menuContainer = ::fwGuiQt::container::QtMenuContainer::dynamicCast(
+        fwMenu);
     QMenu *menu = menuContainer->getQtMenu();
     menu->setEnabled(isEnabled);
 }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuLayoutManager.cpp
index d8cf3cb..b09376e 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/MenuLayoutManager.cpp
@@ -1,26 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QAction>
-#include <QActionGroup>
-#include <QMenu>
-
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/function.hpp>
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
 #include "fwGuiQt/ActionCallback.hpp"
 #include "fwGuiQt/container/QtMenuContainer.hpp"
 #include "fwGuiQt/container/QtMenuItemContainer.hpp"
 #include "fwGuiQt/layoutManager/MenuLayoutManager.hpp"
 
+#include <fwGui/registry/macros.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/bind.hpp>
+#include <boost/function.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <QAction>
+#include <QActionGroup>
+#include <QMenu>
 
 fwGuiRegisterMacro( ::fwGui::layoutManager::MenuLayoutManager,
                     ::fwGui::layoutManager::IMenuLayoutManager::REGISTRY_KEY );
@@ -33,12 +30,14 @@ namespace layoutManager
 //-----------------------------------------------------------------------------
 
 MenuLayoutManager::MenuLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 MenuLayoutManager::~MenuLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -53,7 +52,7 @@ void MenuLayoutManager::createLayout( ::fwGui::container::fwMenu::sptr parent )
 
     QActionGroup * actionGroup = 0;
     unsigned int menuItemIndex = 0;
-    BOOST_FOREACH ( ::fwGui::layoutManager::IMenuLayoutManager::ActionInfo actionInfo, m_actionInfo)
+    for ( ::fwGui::layoutManager::IMenuLayoutManager::ActionInfo actionInfo : m_actionInfo)
     {
         ::fwGuiQt::container::QtMenuItemContainer::sptr menuItem = ::fwGuiQt::container::QtMenuItemContainer::New();
 
@@ -141,7 +140,8 @@ void MenuLayoutManager::destroyLayout()
 
 void MenuLayoutManager::menuItemSetVisible(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isVisible)
 {
-    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer = ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
+    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer =
+        ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
     QAction *action = menuItemContainer->getQtMenuItem();
     action->setVisible(isVisible);
 }
@@ -150,7 +150,8 @@ void MenuLayoutManager::menuItemSetVisible(::fwGui::container::fwMenuItem::sptr
 
 void MenuLayoutManager::menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isEnabled)
 {
-    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer = ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
+    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer =
+        ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
     QAction *action = menuItemContainer->getQtMenuItem();
     action->setEnabled(isEnabled);
 }
@@ -159,7 +160,8 @@ void MenuLayoutManager::menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr
 
 void MenuLayoutManager::menuItemSetChecked(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isChecked)
 {
-    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer = ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
+    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer =
+        ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
     QAction *action = menuItemContainer->getQtMenuItem();
     action->setChecked(isChecked);
 }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/TabLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/TabLayoutManager.cpp
index c1834a6..7bbc606 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/TabLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/TabLayoutManager.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include <QTabWidget>
 #include <QBoxLayout>
 #include <QScrollArea>
@@ -25,12 +23,14 @@ namespace fwGui
 //-----------------------------------------------------------------------------
 
 TabLayoutManager::TabLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 TabLayoutManager::~TabLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -54,7 +54,7 @@ void TabLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr paren
 
     const std::list< ViewInfo> &views = this->getViewsInfo();
 
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
+    for ( ViewInfo viewInfo : views)
     {
         QWidget *widget = new QWidget(m_tabWidget);
 
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolBarLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolBarLayoutManager.cpp
index 190315b..5854f38 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolBarLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolBarLayoutManager.cpp
@@ -1,30 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <QAction>
-#include <QActionGroup>
-#include <QToolBar>
-#include <QMenu>
-#include <QToolButton>
-
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/function.hpp>
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
 #include "fwGuiQt/ActionCallback.hpp"
-#include "fwGuiQt/container/QtToolBarContainer.hpp"
+#include "fwGuiQt/container/QtContainer.hpp"
 #include "fwGuiQt/container/QtMenuContainer.hpp"
 #include "fwGuiQt/container/QtMenuItemContainer.hpp"
-#include "fwGuiQt/container/QtContainer.hpp"
+#include "fwGuiQt/container/QtToolBarContainer.hpp"
 #include "fwGuiQt/layoutManager/ToolBarLayoutManager.hpp"
 
+#include <fwGui/registry/macros.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/bind.hpp>
+#include <boost/function.hpp>
+#include <boost/lambda/lambda.hpp>
+#include <QAction>
+#include <QActionGroup>
+#include <QMenu>
+#include <QToolBar>
+#include <QToolButton>
 
 fwGuiRegisterMacro( ::fwGui::layoutManager::ToolBarLayoutManager,
                     ::fwGui::layoutManager::IToolBarLayoutManager::REGISTRY_KEY );
@@ -37,12 +34,14 @@ namespace layoutManager
 //-----------------------------------------------------------------------------
 
 ToolBarLayoutManager::ToolBarLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ToolBarLayoutManager::~ToolBarLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -57,7 +56,7 @@ void ToolBarLayoutManager::createLayout( ::fwGui::container::fwToolBar::sptr par
 
     QActionGroup * actionGroup = 0;
     unsigned int menuItemIndex = 0;
-    BOOST_FOREACH ( ::fwGui::layoutManager::IToolBarLayoutManager::ActionInfo actionInfo, m_actionInfo)
+    for ( ::fwGui::layoutManager::IToolBarLayoutManager::ActionInfo actionInfo : m_actionInfo)
     {
         if (actionInfo.m_isSeparator)
         {
@@ -134,6 +133,11 @@ void ToolBarLayoutManager::createLayout( ::fwGui::container::fwToolBar::sptr par
             if (!actionInfo.m_icon.empty())
             {
                 QIcon icon(QString::fromStdString(actionInfo.m_icon));
+                if (!actionInfo.m_icon2.empty())
+                {
+                    icon.addFile(QString::fromStdString(actionInfo.m_icon2), QSize(), QIcon::Normal, QIcon::On);
+                    icon.addFile(QString::fromStdString(actionInfo.m_icon2), QSize(), QIcon::Active, QIcon::On);
+                }
                 action = toolBar->addAction( icon, QString::fromStdString(actionInfo.m_name) );
             }
             else
@@ -188,7 +192,8 @@ void ToolBarLayoutManager::destroyLayout()
 
 void ToolBarLayoutManager::menuItemSetVisible(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isVisible)
 {
-    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer = ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
+    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer =
+        ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
     QAction *action = menuItemContainer->getQtMenuItem();
     action->setVisible(isVisible);
 }
@@ -197,7 +202,8 @@ void ToolBarLayoutManager::menuItemSetVisible(::fwGui::container::fwMenuItem::sp
 
 void ToolBarLayoutManager::menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isEnabled)
 {
-    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer = ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
+    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer =
+        ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
     QAction *action = menuItemContainer->getQtMenuItem();
     action->setEnabled(isEnabled);
 }
@@ -206,7 +212,8 @@ void ToolBarLayoutManager::menuItemSetEnabled(::fwGui::container::fwMenuItem::sp
 
 void ToolBarLayoutManager::menuItemSetChecked(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isChecked)
 {
-    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer = ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
+    ::fwGuiQt::container::QtMenuItemContainer::sptr menuItemContainer =
+        ::fwGuiQt::container::QtMenuItemContainer::dynamicCast(fwMenuItem);
     QAction *action = menuItemContainer->getQtMenuItem();
     action->setChecked(isChecked);
 }
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolboxLayoutManager.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolboxLayoutManager.cpp
index f3990c6..1663c89 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolboxLayoutManager.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/layoutManager/ToolboxLayoutManager.cpp
@@ -1,22 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <QScrollArea>
-#include <QVBoxLayout>
-#include <QStyle>
-
 #include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
 
+#include <fwGui/registry/macros.hpp>
 #include "fwGuiQt/container/QtContainer.hpp"
 #include "fwGuiQt/layoutManager/ToolboxLayoutManager.hpp"
 
+#include <QScrollArea>
+#include <QStyle>
+#include <QVBoxLayout>
 
 fwGuiRegisterMacro( ::fwGui::ToolboxLayoutManager, ::fwGui::layoutManager::ToolboxLayoutManagerBase::REGISTRY_KEY );
 
@@ -27,12 +23,14 @@ namespace fwGui
 //-----------------------------------------------------------------------------
 
 ToolboxLayoutManager::ToolboxLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ToolboxLayoutManager::~ToolboxLayoutManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -60,9 +58,9 @@ void ToolboxLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr p
     sv->setWidgetResizable(true);
 
     const std::list< ViewInfo> &views = this->getViewsInfo();
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
+    for ( ViewInfo viewInfo : views)
     {
-        int border = viewInfo.m_border;
+        int border     = viewInfo.m_border;
         QWidget* panel = new QWidget();
         panel->setMinimumSize(std::max(viewInfo.m_minSize.first,0), std::max(viewInfo.m_minSize.second,0));
         panel->setContentsMargins(border, border,border, border);
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/util/FuncSlot.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/util/FuncSlot.cpp
index 59a6b7c..59de36a 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/util/FuncSlot.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/util/FuncSlot.cpp
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 #include <fwGuiQt/util/FuncSlot.hpp>
 
 namespace fwGuiQt
@@ -7,7 +13,8 @@ namespace util
 {
 
 void doNothing()
-{}
+{
+}
 
 FuncSlot::FuncSlot() : m_func( doNothing )
 {
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QRangeSlider.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QRangeSlider.cpp
index 1cf6353..4daf655 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QRangeSlider.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QRangeSlider.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -32,7 +32,8 @@ struct Castable
 
 
 
-class Handle: public QRangeSlider::Paintable, public Castable<Handle>
+class Handle : public QRangeSlider::Paintable,
+               public Castable<Handle>
 {
 public:
     Handle(QWidget *w)
@@ -40,16 +41,16 @@ public:
           m_pen(Qt::gray),
           m_brush(Qt::lightGray)
     {
-        m_pos = 0;
-        m_width = 13;
+        m_pos             = 0;
+        m_width           = 13;
         m_verticalPadding = 0.2;
-        m_tolerance = std::max(0, 10 - m_width);
+        m_tolerance       = std::max(0, 10 - m_width);
     }
 
     virtual void draw(QPainter &painter, bool /*enabled*/)
     {
-        int height = drawingArea().height()-1;
-        int top = height * m_verticalPadding;
+        int height       = drawingArea().height()-1;
+        int top          = height * m_verticalPadding;
         int handleHeight = height - 2*top;
         painter.setRenderHint(QPainter::Antialiasing);
         painter.setPen(m_pen);
@@ -61,12 +62,12 @@ public:
     {
         bool picked = false;
 
-        int height = drawingArea().height()-1;
-        int top = height * m_verticalPadding;
+        int height       = drawingArea().height()-1;
+        int top          = height * m_verticalPadding;
         int handleHeight = height - 2*top;
 
         if ( abs(point.x() - m_pos) <= (halfWidth() + m_tolerance)
-            && (top+handleHeight) >= point.y() && point.y() >= top )
+             && (top+handleHeight) >= point.y() && point.y() >= top )
         {
             picked = true;
         }
@@ -145,22 +146,23 @@ protected:
     int m_width;
     double m_verticalPadding;
 
-    QPen   m_pen;
+    QPen m_pen;
     QBrush m_brush;
 };
 
 
-class Window: public QRangeSlider::Paintable, public Castable<Window>
+class Window : public QRangeSlider::Paintable,
+               public Castable<Window>
 {
 public:
     Window(QWidget *w)
         : Paintable(w),
-        m_pen(Qt::darkBlue),
-        m_brush(Qt::cyan),
-        m_reversePen(Qt::darkYellow),
-        m_reverseBrush(Qt::yellow)
+          m_pen(Qt::darkBlue),
+          m_brush(Qt::cyan),
+          m_reversePen(Qt::darkYellow),
+          m_reverseBrush(Qt::yellow)
     {
-        m_left = 0;
+        m_left  = 0;
         m_right = 0;
     }
 
@@ -172,26 +174,26 @@ public:
     virtual void draw(QPainter &painter, bool enabled)
     {
         int w = this->width();
-        QPen   pen;
+        QPen pen;
         QBrush brush;
 
         if(enabled)
         {
             if ( w < 0 )
             {
-                pen = m_reversePen;
+                pen   = m_reversePen;
                 brush = m_reverseBrush;
             }
             else
             {
-                pen = m_pen;
+                pen   = m_pen;
                 brush = m_brush;
             }
         }
         else
         {
-                pen = QPen(Qt::lightGray);
-                brush = QBrush(Qt::lightGray);
+            pen   = QPen(Qt::lightGray);
+            brush = QBrush(Qt::lightGray);
         }
 
         painter.setPen(pen);
@@ -203,15 +205,15 @@ public:
     virtual bool pick(const QPoint &point) const
     {
         bool picked = false;
-        int min = std::min(m_left, m_right);
-        int max = std::max(m_left, m_right);
-        picked = min <= point.x() && point.x() <= max ;
+        int min     = std::min(m_left, m_right);
+        int max     = std::max(m_left, m_right);
+        picked = min <= point.x() && point.x() <= max;
         return picked;
     }
 
     void setPos(const int &left, const int &right)
     {
-        m_left = left;
+        m_left  = left;
         m_right = right;
     }
 
@@ -219,9 +221,9 @@ protected:
     int m_left;
     int m_right;
 
-    QPen   m_pen;
+    QPen m_pen;
     QBrush m_brush;
-    QPen   m_reversePen;
+    QPen m_reversePen;
     QBrush m_reverseBrush;
 
 };
@@ -233,11 +235,11 @@ protected:
 QRangeSlider::QRangeSlider(QWidget *parent)
     : QWidget(parent)
 {
-    m_minValue = 0.;
-    m_maxValue = 1.;
+    m_minValue               = 0.;
+    m_maxValue               = 1.;
     m_allowMinGreaterThanMax = true;
-    m_minimumMinMaxDelta = 0.;
-    m_handleSize = 11;
+    m_minimumMinMaxDelta     = 0.;
+    m_handleSize             = 11;
 
     m_current = NULL;
 
@@ -257,9 +259,9 @@ QRangeSlider::QRangeSlider(QWidget *parent)
 
 QRangeSlider::~QRangeSlider()
 {
-     delete m_minHandle;
-     delete m_maxHandle;
-     delete m_window;
+    delete m_minHandle;
+    delete m_maxHandle;
+    delete m_window;
 }
 
 void QRangeSlider::setPos(double _min, double _max)
@@ -292,14 +294,14 @@ void QRangeSlider::move(int delta)
 
     int low, high, width, dir;
     dir = ((minHandle->pos() < maxHandle->pos()) ? 1 : -1);
-    bool movingRight =  (delta < 0) ;
+    bool movingRight = (delta < 0);
 
-    low  = minHandle->pos();
-    high = maxHandle->pos();
+    low   = minHandle->pos();
+    high  = maxHandle->pos();
     width = high - low;
 
     if(  (movingRight  && dir < 0)
-        || (!movingRight && dir > 0 ) )
+         || (!movingRight && dir > 0 ) )
     {
         low  = minHandle->setPos(low-delta);
         high = low + width;
@@ -317,7 +319,7 @@ void QRangeSlider::move(int delta)
 
 bool QRangeSlider::movedTo(double _min, double _max)
 {
-    bool changed = m_minValue != _min || m_maxValue != _max ;
+    bool changed = m_minValue != _min || m_maxValue != _max;
     if (changed)
     {
         m_minValue = _min;
@@ -367,7 +369,8 @@ void QRangeSlider::mouseMoveEvent ( QMouseEvent * event )
             int newPos = event->pos().x();
             currentHandle->setPos(newPos);
 
-            if(!m_allowMinGreaterThanMax && minHandle->floatingPos() + m_minimumMinMaxDelta >= maxHandle->floatingPos() )
+            if(!m_allowMinGreaterThanMax &&
+               minHandle->floatingPos() + m_minimumMinMaxDelta >= maxHandle->floatingPos() )
             {
                 currentHandle->setPos(oldPos);
             }
@@ -395,12 +398,12 @@ void QRangeSlider::mouseMoveEvent ( QMouseEvent * event )
 
 void QRangeSlider::mousePressEvent ( QMouseEvent * event )
 {
-    Handle *minHandle  = Handle::safeCast(m_minHandle);
+    Handle *minHandle = Handle::safeCast(m_minHandle);
     Handle *maxHandle = Handle::safeCast(m_maxHandle);
 //    Window *window     = Window::safeCast(m_window);
 
-    m_pressPos  = event->pos();
-    m_pressMin  = minHandle->pos();
+    m_pressPos = event->pos();
+    m_pressMin = minHandle->pos();
     m_pressMax = maxHandle->pos();
 
     if(m_maxHandle->pick(m_pressPos))
@@ -425,21 +428,21 @@ void QRangeSlider::mouseReleaseEvent ( QMouseEvent * /*event*/)
 
 void QRangeSlider::wheelEvent ( QWheelEvent * event )
 {
-    Handle *minHandle  = Handle::safeCast(m_minHandle);
+    Handle *minHandle = Handle::safeCast(m_minHandle);
     Handle *maxHandle = Handle::safeCast(m_maxHandle);
-    Window *window     = Window::safeCast(m_window);
+    Window *window    = Window::safeCast(m_window);
 
     int delta = this->size().width()/( ((double) event->delta())/4. );
-    int low  = minHandle->pos();
-    int high = maxHandle->pos();
+    int low   = minHandle->pos();
+    int high  = maxHandle->pos();
 
     if(event->orientation() == Qt::Vertical)
     {
         if(!m_allowMinGreaterThanMax)
         {
-            int diff = (high - low);
+            int diff    = (high - low);
             int minDiff = minHandle->fromFloatingPos(m_minimumMinMaxDelta);
-            delta = std::max(delta,  - (diff - minDiff)/2);
+            delta = std::max(delta,  -(diff - minDiff)/2);
         }
 
         low  = minHandle->setPos(low -  delta);
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp
index 78f044d..e8443a7 100644
--- a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/QfwToolbox.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,46 +17,47 @@ namespace widget
 {
 
 static const char *branch_closed[] = {
-"8 17 2 1",
+    "8 17 2 1",
 /* colors */
-"- c #000000",
-"a c None",
+    "- c #000000",
+    "a c None",
 /* pixels */
-"aaaaaaaa",
-"-aaaaaaa",
-"--aaaaaa",
-"---aaaaa",
-"----aaaa",
-"-----aaa",
-"------aa",
-"-------a",
-"--------",
-"-------a",
-"------aa",
-"-----aaa",
-"----aaaa",
-"---aaaaa",
-"--aaaaaa",
-"-aaaaaaa",
-"aaaaaaaa"
+    "aaaaaaaa",
+    "-aaaaaaa",
+    "--aaaaaa",
+    "---aaaaa",
+    "----aaaa",
+    "-----aaa",
+    "------aa",
+    "-------a",
+    "--------",
+    "-------a",
+    "------aa",
+    "-----aaa",
+    "----aaaa",
+    "---aaaaa",
+    "--aaaaaa",
+    "-aaaaaaa",
+    "aaaaaaaa"
 };
 
 static const char *branch_open[] = {
-"11 6 2 1",
+    "11 6 2 1",
 /* colors */
-"- c #000000",
-"a c None",
+    "- c #000000",
+    "a c None",
 /* pixels */
-"-----------",
-"a---------a",
-"aa-------aa",
-"aaa-----aaa",
-"aaaa---aaaa",
-"aaaaa-aaaaa"
+    "-----------",
+    "a---------a",
+    "aa-------aa",
+    "aaa-----aaa",
+    "aaaa---aaaa",
+    "aaaaa-aaaaa"
 };
 
 QfwToolBox::~QfwToolBox()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -75,11 +76,17 @@ QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
 ::fwGuiQt::widget::Page *QfwToolBox::page(QWidget *widget) const
 {
     if (!widget)
+    {
         return 0;
+    }
 
     for (PageList::ConstIterator i = pageList.constBegin(); i != pageList.constEnd(); ++i)
+    {
         if ((*i).widget == widget)
+        {
             return (Page*) &(*i);
+        }
+    }
     return 0;
 }
 
@@ -88,7 +95,9 @@ QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
 ::fwGuiQt::widget::Page *QfwToolBox::page(int index)
 {
     if (index >= 0 && index < pageList.size())
+    {
         return &pageList[index];
+    }
     return 0;
 }
 
@@ -97,7 +106,9 @@ QfwToolBox::QfwToolBox(QWidget *parent, Qt::WindowFlags f) :  QFrame(parent, f)
 const ::fwGuiQt::widget::Page *QfwToolBox::page(int index) const
 {
     if (index >= 0 && index < pageList.size())
+    {
         return &pageList.at(index);
+    }
     return 0;
 }
 
@@ -137,7 +148,9 @@ int QfwToolBox::addItem(QWidget *item, const QString &text)
 int QfwToolBox::insertItem(int index, QWidget *widget, const QString &text)
 {
     if (!widget)
+    {
         return -1;
+    }
 
     connect(widget, SIGNAL(destroyed(QObject*)), this, SLOT(widgetDestroyed(QObject*)));
 
@@ -149,13 +162,13 @@ int QfwToolBox::insertItem(int index, QWidget *widget, const QString &text)
     c.button->setFocusPolicy(Qt::NoFocus);
     c.button->setCheckable(true);
     QString style(
-            "text-align: left;"
-            "background-color: lightgray;"
-            "border-style: solid;"
-            "border-width: 1px;"
-            "border-color: darkgray;"
-            "height: 20px;"
-            );
+        "text-align: left;"
+        "background-color: lightgray;"
+        "border-style: solid;"
+        "border-width: 1px;"
+        "border-color: darkgray;"
+        "height: 20px;"
+        );
     QPixmap pixOpen(branch_open);
     QPixmap pixClose(branch_closed);
     QIcon bIcon;
@@ -195,7 +208,7 @@ int QfwToolBox::insertItem(int index, QWidget *widget, const QString &text)
 void QfwToolBox::buttonToggled(bool checked)
 {
     QPushButton *tb = qobject_cast<QPushButton*>(this->sender());
-    QWidget* item = 0;
+    QWidget* item   = 0;
     for (PageList::ConstIterator i = pageList.constBegin(); i != pageList.constEnd(); ++i)
     {
         if ((*i).button == tb)
@@ -204,7 +217,7 @@ void QfwToolBox::buttonToggled(bool checked)
             break;
         }
     }
-    int index = this->indexOf(item);
+    int index  = this->indexOf(item);
     Page *page = this->page(index);
     page->sv->setVisible(checked);
 }
@@ -238,9 +251,11 @@ void QfwToolBox::relayout()
 void QfwToolBox::widgetDestroyed(QObject *object)
 {
     QWidget *p = (QWidget*)object;
-    Page *c = page(p);
+    Page *c    = page(p);
     if (!p || !c)
+    {
         return;
+    }
 
     layout->removeWidget(c->sv);
     layout->removeWidget(c->button);
@@ -266,7 +281,9 @@ void QfwToolBox::removeItem(int index)
 QWidget *QfwToolBox::widget(int index) const
 {
     if (index < 0 || index >= (int) this->pageList.size())
+    {
         return 0;
+    }
     return this->pageList.at(index).widget;
 }
 
@@ -284,7 +301,9 @@ void QfwToolBox::setItemEnabled(int index, bool enabled)
 {
     Page *c = this->page(index);
     if (!c)
+    {
         return;
+    }
 
     c->button->setEnabled(enabled);
 }
@@ -295,7 +314,9 @@ void QfwToolBox::setItemText(int index, const QString &text)
 {
     Page *c = this->page(index);
     if (c)
+    {
         c->setText(text);
+    }
 }
 
 //-----------------------------------------------------------------------------
@@ -304,7 +325,9 @@ void QfwToolBox::setItemToolTip(int index, const QString &toolTip)
 {
     Page *c = this->page(index);
     if (c)
+    {
         c->setToolTip(toolTip);
+    }
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/SlideBar.cpp b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/SlideBar.cpp
new file mode 100644
index 0000000..0de6ddd
--- /dev/null
+++ b/SrcLib/core/fwGuiQt/src/fwGuiQt/widget/SlideBar.cpp
@@ -0,0 +1,224 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGuiQt/widget/SlideBar.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QParallelAnimationGroup>
+#include <QPropertyAnimation>
+#include <QPushButton>
+
+namespace fwGuiQt
+{
+
+namespace widget
+{
+
+
+//-----------------------------------------------------------------------------
+
+SlideBar::SlideBar(QWidget* parent, Aligment align, int buttonSize, double opacity) :
+    QGroupBox(),
+    m_buttonSize(buttonSize),
+    m_opacity(opacity),
+    m_isShown(false),
+    m_align(align)
+{
+    this->setParent(parent);
+    this->init();
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideBar::init()
+{
+    this->setObjectName("SlideBar");
+
+    // Set the widget position
+    this->updatePosition();
+    this->setGeometry(m_hiddenPosition);
+
+    // window flags to have a frameless dialog that can be displayed over an openGL widget
+    this->setWindowFlags(Qt::Tool
+                         | Qt::FramelessWindowHint
+                         | Qt::NoDropShadowWindowHint
+                         );
+
+    // Set the transparent background
+    this->setAttribute(Qt::WA_TranslucentBackground);
+
+    // Listen parent and activeWindow 'Resize' and 'Move' event to update widget position
+    // (just listening parent event is not enough because the Move event is only send on activeWindow).
+    this->parent()->installEventFilter(this);
+    qApp->activeWindow()->installEventFilter(this);
+}
+
+//-----------------------------------------------------------------------------
+
+SlideBar::~SlideBar()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideBar::updatePosition()
+{
+    int height = this->parentWidget()->height();
+    int width  = this->parentWidget()->width();
+
+    switch (m_align)
+    {
+        case LEFT:
+        case RIGHT:
+            width = std::min(width, m_buttonSize);
+            this->setFixedWidth(width);
+            this->setFixedHeight(height);
+            break;
+        case TOP:
+        case BOTTOM:
+            height = std::min(height, m_buttonSize);
+            this->setFixedHeight(height);
+            this->setFixedWidth(width);
+            break;
+    }
+
+    if (m_align == LEFT)
+    {
+        QPoint pos = this->parentWidget()->rect().topLeft();
+        pos = this->parentWidget()->mapToGlobal(pos);
+
+        m_shownPosition  = QRect(pos.x(), pos.y(), width, height);
+        m_hiddenPosition = QRect(pos.x()-width, pos.y(), 0, height);
+    }
+    else if (m_align == RIGHT)
+    {
+        QPoint pos = this->parentWidget()->rect().topRight();
+        pos = this->parentWidget()->mapToGlobal(pos);
+
+        m_shownPosition  = QRect(pos.x()-width, pos.y(), width, height);
+        m_hiddenPosition = QRect(pos.x(), pos.y(), 0, height);
+    }
+    else if (m_align == TOP)
+    {
+        QPoint pos = this->parentWidget()->rect().topLeft();
+        pos = this->parentWidget()->mapToGlobal(pos);
+
+        m_shownPosition  = QRect(pos.x(), pos.y(), width, height);
+        m_hiddenPosition = QRect(pos.x(), pos.y()-height, width, 0);
+    }
+    else // m_align == BOTTOM
+    {
+        QPoint pos = this->parentWidget()->rect().bottomLeft();
+        pos = this->parentWidget()->mapToGlobal(pos);
+
+        m_shownPosition  = QRect(pos.x(), pos.y()-height, width, height);
+        m_hiddenPosition = QRect(pos.x(), pos.y(), width, 0);
+    }
+
+    if (m_isShown)
+    {
+        this->setGeometry(m_shownPosition);
+    }
+    else
+    {
+        this->setGeometry(m_hiddenPosition);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideBar::setSide(Aligment align)
+{
+    m_align = align;
+    this->updatePosition();
+}
+//-----------------------------------------------------------------------------
+
+void SlideBar::setVisible(bool visible)
+{
+    this->slide(visible);
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideBar::forceHide()
+{
+    this->QGroupBox::setVisible(false);
+}
+
+
+//-----------------------------------------------------------------------------
+
+void SlideBar::forceShow()
+{
+    this->QGroupBox::setVisible(true);
+}
+
+//-----------------------------------------------------------------------------
+
+void SlideBar::slide(bool visible)
+{
+    // Show the widget with the previous opacity. It must be hidden after the slide(false) because if opacity == 0, the
+    // widget is still clickable.
+    this->forceShow();
+    this->setWindowOpacity(m_isShown ? m_opacity : 0);
+
+    // Set animation to slide the widget and update the opacity
+    QParallelAnimationGroup* animations = new QParallelAnimationGroup();
+
+    // slide animation
+    QPropertyAnimation* geomAnimation = new QPropertyAnimation(this, "geometry");
+    geomAnimation->setDuration(500);
+    geomAnimation->setEasingCurve(QEasingCurve::InBack);
+    geomAnimation->setStartValue(this->geometry());
+
+    if(visible == true)
+    {
+        geomAnimation->setEndValue(m_shownPosition);
+    }
+    else
+    {
+        geomAnimation->setEndValue(m_hiddenPosition);
+
+        // hide the widget when the animation is finished (if opacity == 0, widget is still clickable)
+        QObject::connect(animations, &QAbstractAnimation::finished, this, &SlideBar::forceHide);
+    }
+
+    // opacity animation
+    QPropertyAnimation* opacityAnimation = new QPropertyAnimation(this, "windowOpacity");
+    opacityAnimation->setDuration(500);
+    opacityAnimation->setEndValue(visible ? m_opacity : 0);
+
+    animations->addAnimation(geomAnimation);
+    animations->addAnimation(opacityAnimation);
+
+    animations->start(QPropertyAnimation::DeleteWhenStopped);
+    m_isShown = visible;
+}
+
+//-----------------------------------------------------------------------------
+
+bool SlideBar::eventFilter(QObject* obj, QEvent* event)
+{
+    // Update the widget position when the parent is moved or resized
+    if (event->type() == QEvent::Resize
+        || event->type() == QEvent::Move)
+    {
+        this->updatePosition();
+    }
+    return QObject::eventFilter(obj, event);
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace widget
+} // namespace fwGuiQt
+
+
+
diff --git a/SrcLib/core/fwGuiQt/test/CMakeLists.txt b/SrcLib/core/fwGuiQt/test/CMakeLists.txt
index fd72c3d..80a7841 100644
--- a/SrcLib/core/fwGuiQt/test/CMakeLists.txt
+++ b/SrcLib/core/fwGuiQt/test/CMakeLists.txt
@@ -1,12 +1,16 @@
-
 fwLoadProperties()
 
-find_package (Boost COMPONENTS thread date_time REQUIRED)
 find_package(CppUnit)
-find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
-include(${QT_USE_FILE})
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
+find_package(Boost COMPONENTS chrono REQUIRED)
+find_package(Qt5 COMPONENTS Core REQUIRED)
 
+fwInclude(
+    ${Qt5Core_INCLUDE_DIRS}
+    ${CPPUNIT_INCLUDE_DIR}
+)
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Boost_CHRONO_LIBRARY}
+    ${CPPUNIT_LIBRARY}
+)
 
diff --git a/SrcLib/core/fwGuiQt/test/Properties.cmake b/SrcLib/core/fwGuiQt/test/Properties.cmake
index f09be00..eb74480 100644
--- a/SrcLib/core/fwGuiQt/test/Properties.cmake
+++ b/SrcLib/core/fwGuiQt/test/Properties.cmake
@@ -2,6 +2,12 @@
 set( NAME fwGuiQtTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwThread fwGuiQt )
+set( DEPENDENCIES 
+    fwCore
+    fwTest
+    fwThread
+    fwGuiQt
+    fwServices
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwGuiQt/test/cppunit.options b/SrcLib/core/fwGuiQt/test/cppunit.options
deleted file mode 100644
index b8f68f9..0000000
--- a/SrcLib/core/fwGuiQt/test/cppunit.options
+++ /dev/null
@@ -1,18 +0,0 @@
-CLASSTEST=[
-    'WorkerQtTest',
-]
-
-USE = [
-    'qtCore',
-    'qtGui',
-    'boost',
-    'boostThread',
-    'boostDateTime',
-    ]
-LIB = [
-    'fwTest_0-1',
-    'fwThread_0-1',
-    'fwGuiQt_0-1',
-    ]
-
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwGuiQt/test/tu/include/WorkerQtTest.hpp b/SrcLib/core/fwGuiQt/test/tu/include/WorkerQtTest.hpp
index 600065f..aa54ffb 100644
--- a/SrcLib/core/fwGuiQt/test/tu/include/WorkerQtTest.hpp
+++ b/SrcLib/core/fwGuiQt/test/tu/include/WorkerQtTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,18 +9,19 @@
 
 #include <fwCore/base.hpp>
 
+#include <fwThread/Worker.hpp>
+
 #include <cppunit/extensions/HelperMacros.h>
 
 namespace fwGuiQt
 {
 
-struct WorkerQtInstanciator;
-
 namespace ut
 {
 
 class WorkerQtTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( WorkerQtTest );
 
     CPPUNIT_TEST(initTest);
diff --git a/SrcLib/core/fwGuiQt/test/tu/src/WorkerQtTest.cpp b/SrcLib/core/fwGuiQt/test/tu/src/WorkerQtTest.cpp
index 1816f5a..e52b5fc 100644
--- a/SrcLib/core/fwGuiQt/test/tu/src/WorkerQtTest.cpp
+++ b/SrcLib/core/fwGuiQt/test/tu/src/WorkerQtTest.cpp
@@ -1,9 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "WorkerQtTest.hpp"
+
+#include <fwGuiQt/App.hpp>
+#include <fwGuiQt/config.hpp>
+#include <fwGuiQt/util/FuncSlot.hpp>
+#include <fwGuiQt/WorkerQt.hpp>
+
+#include <fwServices/registry/ActiveWorkers.hpp>
+
+#include <fwThread/Timer.hpp>
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
+
 #include <boost/type_traits/is_same.hpp>
 #include <boost/function.hpp>
 #include <boost/bind.hpp>
@@ -15,15 +28,6 @@
 #include <QApplication>
 #include <QTimer>
 
-#include <fwThread/Timer.hpp>
-
-#include <fwThread/Worker.hpp>
-#include <fwThread/Worker.hxx>
-
-#include "fwGuiQt/util/FuncSlot.hpp"
-
-#include "WorkerQtTest.hpp"
-
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGuiQt::ut::WorkerQtTest );
@@ -33,15 +37,6 @@ namespace fwGuiQt
 
 // Defined in WorkerQt.cpp
 class WorkerQt;
-struct WorkerQtInstanciator
-{
-    WorkerQtInstanciator(bool reg);
-    SPTR(::fwThread::Worker) getWorker();
-    SPTR(WorkerQt) m_qtWorker;
-
-    FWGUIQT_API static int    s_argc;
-    FWGUIQT_API static char **s_argv;
-};
 
 namespace ut
 {
@@ -79,18 +74,34 @@ struct TestHandler
 void WorkerQtTest::setUp()
 {
     // Set up context before running a test.
-    static char* arg = "fwGuiQtTest";
-    WorkerQtInstanciator::s_argc = 1;
-    WorkerQtInstanciator::s_argv = &arg;
-    CPPUNIT_ASSERT(qApp == NULL);
-    WorkerQtInstanciator instanciator(false);
-    m_worker = instanciator.getWorker();
+    char arg1[] = "fwGuiQtTest";
+#if defined(__linux)
+    char arg2[]         = "-platform";
+    char arg3[]         = "offscreen";
+    static char* argv[] = {arg1, arg2, arg3, 0};
+    int argc            = 3;
+#else
+    static char* argv[] = {arg1, 0};
+    int argc            = 1;
+#endif
+
+#if QT_VERSION < 0x050000
+    bool guiEnabled = false;
+#else
+    bool guiEnabled = true;
+#endif
 
+    CPPUNIT_ASSERT(qApp == NULL);
+    m_worker = ::fwGuiQt::getQtWorker(argc, argv, guiEnabled);
 }
+
+//-----------------------------------------------------------------------------
+
 void WorkerQtTest::tearDown()
 {
     // Clean up after the test run.
     m_worker.reset();
+    ::fwServices::registry::ActiveWorkers::getDefault()->clearRegistry();
     CPPUNIT_ASSERT(qApp == NULL);
 }
 
@@ -112,22 +123,21 @@ void WorkerQtTest::twiceInitTest()
 
 void runBasicTest(TestHandler &handler, ::fwThread::Worker::sptr worker)
 {
-
     handler.setWorkerId(worker->getThreadId());
     worker->post( ::boost::bind( &TestHandler::nextStep, &handler) );
     worker->post( ::boost::bind( &TestHandler::nextStep, &handler) );
     worker->post( ::boost::bind( &TestHandler::nextStep, &handler) );
 
     worker->post( ::boost::bind( &QApplication::quit ) );
-
 }
 
+//-----------------------------------------------------------------------------
 
 #define RUN_BASIC_TEST_CHECKS(handler) \
     CPPUNIT_ASSERT_EQUAL(3, handler.m_step); \
     CPPUNIT_ASSERT_EQUAL(true, handler.m_threadCheckOk)
 
-
+//-----------------------------------------------------------------------------
 
 void WorkerQtTest::basicTest()
 {
@@ -146,7 +156,7 @@ void WorkerQtTest::postFromInsideTest()
 {
     TestHandler handler;
 
-    m_worker->post( boost::bind(&runBasicTest, boost::ref(handler), m_worker) );
+    m_worker->post( ::boost::bind(&runBasicTest, boost::ref(handler), m_worker) );
 
     m_worker->getFuture().wait();
 
@@ -155,7 +165,10 @@ void WorkerQtTest::postFromInsideTest()
 
 //-----------------------------------------------------------------------------
 void doNothing()
-{ }
+{
+}
+
+//-----------------------------------------------------------------------------
 
 void runFromOutsideTest(TestHandler &handler, ::fwThread::Worker::sptr worker)
 {
@@ -165,13 +178,15 @@ void runFromOutsideTest(TestHandler &handler, ::fwThread::Worker::sptr worker)
     runBasicTest(handler, worker);
 }
 
+//-----------------------------------------------------------------------------
+
 void WorkerQtTest::postFromOutsideTest()
 {
     TestHandler handler;
 
     ::boost::thread testThread(
-            boost::bind(&runFromOutsideTest, boost::ref(handler), m_worker)
-            );
+        ::boost::bind(&runFromOutsideTest, boost::ref(handler), m_worker)
+        );
 
     m_worker->getFuture().wait();
 
@@ -195,39 +210,31 @@ void WorkerQtTest::postFromOutsideTest()
 
 static CppUnit::Exception exception;
 
-void echo()
-{
-}
-
-
+//-----------------------------------------------------------------------------
 
-void runBasicTimerTest(
-        TestHandler &handler,
-        const ::fwThread::Timer::sptr &timer,
-        ::fwThread::Timer::TimeDurationType duration
-        )
+void runBasicTimerTest( TestHandler &handler,
+                        const ::fwThread::Timer::sptr &timer,
+                        ::fwThread::Timer::TimeDurationType duration )
 {
     timer->start();
 
     QT_TEST_START
     {
-    CPPUNIT_ASSERT(timer->isRunning());
-    CPPUNIT_ASSERT(handler.m_threadCheckOk);
-    CPPUNIT_ASSERT_EQUAL(0, handler.m_step);
+        CPPUNIT_ASSERT(timer->isRunning());
+        CPPUNIT_ASSERT(handler.m_threadCheckOk);
+        CPPUNIT_ASSERT_EQUAL(0, handler.m_step);
     }
     QT_TEST_END
 }
 
+//-----------------------------------------------------------------------------
 
-void oneShotBasicTimerTest(
-        int &i,
-        TestHandler &handler,
-        const ::fwThread::Timer::sptr &timer,
-        ::fwThread::Timer::TimeDurationType duration,
-        const ::fwThread::Worker::sptr &worker
-        )
+void oneShotBasicTimerTest(int &i,
+                           TestHandler &handler,
+                           const ::fwThread::Timer::sptr &timer,
+                           ::fwThread::Timer::TimeDurationType duration,
+                           const ::fwThread::Worker::sptr &worker )
 {
-
     handler.nextStepNoSleep();
 
     QT_TEST_START
@@ -254,31 +261,31 @@ void oneShotBasicTimerTest(
     }
 }
 
+//-----------------------------------------------------------------------------
+
 void WorkerQtTest::basicTimerTest()
 {
     {
-
         TestHandler handler;
         handler.setWorkerId(m_worker->getThreadId());
 
         ::fwThread::Timer::sptr timer = m_worker->createTimer();
 
-        ::fwThread::Timer::TimeDurationType duration = ::boost::chrono::milliseconds(10) ;
+        ::fwThread::Timer::TimeDurationType duration = ::boost::chrono::milliseconds(10);
 
         int i = 1;
         timer->setFunction(
-                ::boost::bind(
-                    &oneShotBasicTimerTest,
-                    boost::ref(i), handler, ::boost::ref(timer), duration, ::boost::ref(m_worker) )
-                );
+            ::boost::bind(
+                &oneShotBasicTimerTest,
+                boost::ref(i), handler, ::boost::ref(timer), duration, ::boost::ref(m_worker) )
+            );
         timer->setDuration(duration);
 
         CPPUNIT_ASSERT(!timer->isRunning());
         CPPUNIT_ASSERT(handler.m_threadCheckOk);
         CPPUNIT_ASSERT_EQUAL(0, handler.m_step);
 
-        m_worker->post( boost::bind(&runBasicTimerTest, ::boost::ref(handler), ::boost::ref(timer), duration) );
-
+        m_worker->post( ::boost::bind(&runBasicTimerTest, ::boost::ref(handler), ::boost::ref(timer), duration) );
 
         ::fwThread::Worker::FutureType future = m_worker->getFuture();
         future.wait();
@@ -286,13 +293,9 @@ void WorkerQtTest::basicTimerTest()
         CPPUNIT_ASSERT( future.has_value() );
         CPPUNIT_ASSERT_EQUAL( 0, boost::any_cast<int>( future.get() ) );
     }
-
-
 }
 
 //-----------------------------------------------------------------------------
 
-
-
 } //namespace ut
 } //namespace fwGuiQt
diff --git a/SrcLib/core/fwGuiWx/CMakeLists.txt b/SrcLib/core/fwGuiWx/CMakeLists.txt
deleted file mode 100644
index f661bc2..0000000
--- a/SrcLib/core/fwGuiWx/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-find_package(wxWidgets COMPONENTS base core adv aui)
-if(wxWidgets_FOUND)
-    fwLoadProperties()
-    
-    fwUseForwardInclude(
-        fwCore
-        fwGui
-        fwRuntime
-        fwTools
-    )
-
-    find_package(Boost REQUIRED)
-    include(${wxWidgets_USE_FILE})
-
-    fwForwardInclude(${Boost_INCLUDE_DIRS} ${wxWidgets_INCLUDE_DIRS})
-    fwLink(${wxWidgets_LIBRARIES})
-else(wxWidgets_FOUND)
-    message(WARNING "Required package wxWidgets not found, lib 'fwGuiWx' disabled.")
-endif(wxWidgets_FOUND)
diff --git a/SrcLib/core/fwGuiWx/COPYING b/SrcLib/core/fwGuiWx/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwGuiWx/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwGuiWx/COPYING.LESSER b/SrcLib/core/fwGuiWx/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwGuiWx/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwGuiWx/Properties.cmake b/SrcLib/core/fwGuiWx/Properties.cmake
deleted file mode 100644
index be026fb..0000000
--- a/SrcLib/core/fwGuiWx/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwGuiWx )
-set( VERSION 0.1 )
-set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwData fwGui fwRuntime fwServices fwThread fwTools )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwGuiWx/bin/build.options b/SrcLib/core/fwGuiWx/bin/build.options
deleted file mode 100644
index ca19ce6..0000000
--- a/SrcLib/core/fwGuiWx/bin/build.options
+++ /dev/null
@@ -1,10 +0,0 @@
-USE     = ['boost','wxCore','wxAui']
-LIB     = [
-          'fwGui_0-1',
-          'fwData_0-1',
-          'fwTools_0-1',
-          'fwCore_0-1',
-          'fwServices_0-1',
-          ]
-TYPE    = 'shared'
-VERSION = '0-1'
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/ActionCallback.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/ActionCallback.hpp
deleted file mode 100644
index 2cf2bf9..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/ActionCallback.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_ACTIONCALLBACK_HPP_
-#define _FWGUIWX_ACTIONCALLBACK_HPP_
-
-#include <wx/event.h>
-
-#include <fwGui/ActionCallbackBase.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-
-/**
- * @brief   Defines the menu item callback.
- * @class   ActionCallback
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API ActionCallback : public ::fwGui::ActionCallbackBase
-{
-
-public :
-
-    fwCoreClassDefinitionsWithFactoryMacro( (ActionCallback)(::fwGui::ActionCallbackBase),
-                                            (()),
-                                            ::fwGui::factory::New< ActionCallback > );
-
-    FWGUIWX_API ActionCallback(::fwGui::GuiBaseObject::Key key) ;
-
-    FWGUIWX_API virtual ~ActionCallback() ;
-
-    /**
-     * @brief  wxWidget called method when callback is executed.
-     */
-    FWGUIWX_API virtual void executeWx(wxCommandEvent& event);
-
-};
-
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_ACTIONCALLBACK_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/App.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/App.hpp
deleted file mode 100644
index b46e3d6..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/App.hpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_APP_HPP_
-#define FWGUIWX_APP_HPP_
-
-#include <wx/app.h>
-#include <wx/intl.h>
-
-#include <fwRuntime/profile/Profile.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-class WXDLLEXPORT wxLocale;
-class wxSingleInstanceChecker;
-
-static void SaveUILanguage(wxLanguage lang);
-wxLanguage GetUILanguage();
-wxLanguage ChooseLanguage();
-void ChangeUILanguage();
-
-namespace fwGuiWx
-{
-
-/**
- * @brief   Defines the wx application.
- * @class   App
- * 
- * @date    2009.
- */
-
-class FWGUIWX_CLASS_API App : public wxApp
-{
-public:
-
-    /**
-     * @brief   Constructor
-     */
-    FWGUIWX_API App();
-
-    /**
-     * @name    Overrides
-     */
-    /// @{
-
-    FWGUIWX_API bool OnInit();
-
-    FWGUIWX_API int OnExit();
-
-    FWGUIWX_API void usage(const std::string & mes) const;
-
-    FWGUIWX_API void OnInitCmdLine(wxCmdLineParser & parser);
-
-    FWGUIWX_API void OnUnhandledException();
-
-#ifdef __WXMAC__
-    FWGUIWX_API virtual void MacOpenFile (  const wxString & fileName);
-
-    FWGUIWX_API virtual void MacReopenApp (  const wxString & fileName);
-
-    FWGUIWX_API virtual void MacNewFile (  const wxString & fileName);
-
-    FWGUIWX_API void eventMac(const wxString & fileName);
-#endif
-
-    /// @}
-
-
-private:
-
-    /**
-     * @brief   locale (internationalization) for app
-     */
-    wxLocale * m_locale;
-
-    wxSingleInstanceChecker * m_checker;
-};
-
-
-} // namespace fwGuiWx
-
-
-#endif /*FWGUIWX_APP_HPP_*/
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/Application.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/Application.hpp
deleted file mode 100644
index 9ed61d8..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/Application.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_APPLICATION_HPP_
-#define _FWGUIWX_APPLICATION_HPP_
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/Application.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-
-/**
- * @brief   Gives access to the wx application part
- * @class   Application
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API Application : public ::fwGui::Application
-{
-
-public:
-
-    Application(::fwGui::GuiBaseObject::Key key){};
-
-    virtual ~Application(){};
-
-    /// Tells the application to exit with a returncode
-    FWGUIWX_API virtual void exit( int returncode = 0);
-
-};
-
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_APPLICATION_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/Cursor.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/Cursor.hpp
deleted file mode 100644
index 9cbc287..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/Cursor.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_CURSOR_HPP_
-#define _FWGUIWX_CURSOR_HPP_
-
-#include <string>
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/ICursor.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-
-/**
- * @brief   Defines the generic message box for IHM.
- * @class   Cursor
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API Cursor : public ::fwGui::ICursor
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (Cursor)(::fwGui::ICursor),
-                                            (()),
-                                            ::fwGui::factory::New< Cursor > );
-
-    FWGUIWX_API Cursor(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~Cursor();
-
-    /// Set the cursor
-    FWGUIWX_API virtual void setCursor( ::fwGui::ICursor::CursorType cursor);
-
-    /// Set the default cursor
-    FWGUIWX_API virtual void setDefaultCursor();
-
-};
-
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_CURSOR_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/LoggerInitializer.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/LoggerInitializer.hpp
deleted file mode 100644
index 1544829..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/LoggerInitializer.hpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LOGGERINITIALIZER_HPP_
-#define _FWGUIWX_LOGGERINITIALIZER_HPP_
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-
-class FWGUIWX_CLASS_API LoggerInitializer
-{
-
-public:
-
-    FWGUIWX_API LoggerInitializer();
-
-    FWGUIWX_API static void initialize();
-};
-
-
-} // namespace fwGuiWx
-
-#endif //_FWGUIWX_LOGGERINITIALIZER_HPP_
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/MessageEvent.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/MessageEvent.hpp
deleted file mode 100644
index 3c75cf1..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/MessageEvent.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_MESSAGEEVENT_HPP_
-#define FWGUIWX_MESSAGEEVENT_HPP_
-
-#include <wx/wx.h>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-
-/**
- * @brief   This class define a message event, used to manage fwServices
- * notification in wx's events loop.
- * 
- * @date    2010.
- * @todo Comment.
- */
-class MessageEvent: public ::wxEvent
-{
-public:
-    MessageEvent(wxEventType eventType)
-        : wxEvent(0, eventType)
-    {}
-
-    // implement the base class pure virtual
-    virtual wxEvent *Clone() const { return new MessageEvent(*this); }
-
-};
-
-wxDEFINE_EVENT(MESSAGE_EVENT, MessageEvent);
-
-
-} // end namespace fwGui
-
-
-#endif /* FWGUIWX_MESSAGEEVENT_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/Namespace.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/Namespace.hpp
deleted file mode 100644
index 9402627..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/Namespace.hpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWXNAMESPACE_HPP_
-#define FWGUIWXNAMESPACE_HPP_
-
-/**
- * @brief       The namespace fwGuiWx contains classes which provide the implementation of the Gui using wxwidgets library.
- * @namespace   fwGuiWx
- * 
- * @date        2009-2010.
- *
- */
-
-namespace fwGuiWx
-{
-}
-#endif /* FWGUIQTNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/Shortcut.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/Shortcut.hpp
deleted file mode 100644
index 8b91d58..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/Shortcut.hpp
+++ /dev/null
@@ -1,184 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_SHORTCUT_HPP_
-#define _FWGUIWX_SHORTCUT_HPP_
-
-#include <string>
-
-#include <fwCore/base.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-
-/**
- * @brief   Implements a shortcut definition class.
- *
- * @todo    Explain the syntax of a shortcut definition.
- * @todo    References the shortcut definition syntax explanations in member method documentation.
- *
- * 
- */
-class FWGUIWX_CLASS_API Shortcut : public ::fwCore::BaseObject
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (Shortcut)(::fwCore::BaseObject),
-            ( ((const int))((const int ))  ) ( ((const std::string )) ),
-            new Shortcut) ;
-
-    /**
-     * @name    Constructors
-     */
-    //@{
-
-    /**
-     * @brief   Constructor
-     *
-     * @param   modifiers   an integer specifying modifiers
-     * @param   keyCode     an integer specifying the key code
-     */
-    FWGUIWX_API Shortcut( const int modifiers, const int keyCode );
-
-    /**
-     * @brief   Constructor
-     *
-     * @param   definition  a string containing the shortcur definition that will be parsed to retrieve the modifier part and the key code part
-     */
-    FWGUIWX_API Shortcut( const std::string & definition );
-
-    //@}
-
-
-    /**
-     * @name    Accessors
-     */
-    //@{
-
-    /**
-     * @brief   Retrieves the modifiers.
-     *
-     * @return  an integer containing the modifiers
-     */
-    FWGUIWX_API const int getModifiers() const;
-
-    /**
-     * @brief   Retrieves the key code.
-     *
-     * @return  an integer containing the key code
-     */
-    FWGUIWX_API const int getKeyCode() const;
-
-    /**
-     * @brief   Reassignes the shortcut definition.
-     *
-     * @param[in]   definition  a string containing the definition
-     */
-    FWGUIWX_API void set( const std::string & definition );
-
-    /**
-     * @brief   Assignes a new definition to the shortcut.
-     *
-     * @param[in]   definition  a definition string
-     *
-     * @return  a reference to the modified shortcut
-     */
-    FWGUIWX_API Shortcut & operator= ( const std::string & definition );
-
-    /**
-     * @brief   Retrieves the shortcut as a definition string
-     *
-     * @return  a string containing the shortcut definition
-     */
-    FWGUIWX_API const std::string toString() const;
-
-    /**
-     * @brief   Retrieves the shortcut as a definition string
-     *
-     * @return  a string containing the shortcut definition
-     */
-    FWGUIWX_API operator std::string () const;
-
-    //@}
-
-
-    /**
-     * @name    Utilities
-     */
-    //@{
-
-    /**
-     * @brief   Retrieves the modifiers from the given shortcut definition string.
-     *
-     * @param[in]   shortcut    a string containing a shortcut definition
-     *
-     * @return  an integer containing the modifiers part
-     */
-    FWGUIWX_API static const int getModifiersFromString( const std::string & shortcut );
-
-    /**
-     * @brief   Retrieves the key code from the given shortcut definition string.
-     *
-     * @param[in] shortcut    a string containing the shortcut definition
-     *
-     * @return  an integer containing the key code
-     *
-     * @todo    Add support all none ascii keys!
-     */
-    FWGUIWX_API static const int getKeyCodeFromString( const std::string & shortcut );
-
-    /**
-     * @brief   Retrieves the string representation for the given modifiers and key code.
-     *
-     * @param[in]   modifiers   an integer containing a combination of modifiers
-     * @param[in]   keyCode     an integer containing a key code
-     *
-     * @return  a string containing the modifier combination and key code representation
-     */
-    FWGUIWX_API static const std::string getString( const int modifiers, const int keyCode );
-
-    /**
-     * @brief   Retrieves the string representation of the given modifiers.
-     *
-     * @param[in]   modifiers   an integer containing a combination of modifiers
-     *
-     * @return  a string containing the modifier combination representation
-     */
-    FWGUIWX_API static const std::string getStringFromModifiers( const int modifiers );
-
-    /**
-     * @brief   Retrieves the string representation of the given key code.
-     *
-     * @param[in]   keyCode an integer containing a key code
-     *
-     * @return  a string containing the key code representation
-     */
-    FWGUIWX_API static const std::string getStringFromKeyCode( const int keyCode );
-
-    //@}
-
-private:
-
-    /**
-     * @brief   an integer representing the modifiers in the shortcut definition
-     *
-     * @remark  This any bitwise combination of wxACCEL_ALT, wxACCEL_SHIFT, wxACCEL_CTRL and wxACCEL_NORMAL.
-     */
-    int         m_modifiers;
-
-    /**
-     * @brief   an integer representing the key code part of the shortcut
-     */
-    int         m_keyCode;
-};
-
-} // namespace fwGuiWx
-
-
-#endif /*_FWGUIWX_SHORTCUT_HPP_*/
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/WorkerWx.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/WorkerWx.hpp
deleted file mode 100644
index 80dbd30..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/WorkerWx.hpp
+++ /dev/null
@@ -1,27 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_WORKERWX_HPP_
-#define FWGUIWX_WORKERWX_HPP_
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwThread
-{
-    class Worker;
-} //namespace fwThread
-
-
-
-namespace fwGuiWx
-{
-
-FWGUIWX_API SPTR(::fwThread::Worker) getWxWorker( int &argc, char **argv );
-
-} //namespace fwGui
-
-#endif /*FWGUIWX_WORKERWX_HPP_*/
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/ContainerBuilder.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/ContainerBuilder.hpp
deleted file mode 100644
index 6412e3a..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/ContainerBuilder.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_BUILDER_CONTAINERBUILDER_HPP_
-#define _FWGUIWX_BUILDER_CONTAINERBUILDER_HPP_
-
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwGui/builder/IContainerBuilder.hpp>
-#include <fwGui/container/fwContainer.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-namespace builder
-{
-
-/**
- * @brief   Defines the generic layout manager for IHM.
- * @class   ContainerBuilder
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API ContainerBuilder : public ::fwGui::builder::IContainerBuilder
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ContainerBuilder)(::fwGui::builder::IContainerBuilder),
-                                            (()),
-                                            ::fwGui::factory::New< ContainerBuilder > );
-
-    FWGUIWX_API ContainerBuilder(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~ContainerBuilder();
-
-    /**
-     * @brief Instantiate layout with parent container.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent container must be instanced.
-     */
-    FWGUIWX_API virtual void createContainer( ::fwGui::container::fwContainer::sptr parent );
-
-    /**
-     * @brief Destroy local layout with sub containers.
-     * @pre services using this sub containers must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyContainer();
-
-    FWGUIWX_API virtual void setParent(::fwGui::container::fwContainer::sptr parent);
-
-protected:
-    ::fwGuiWx::container::WxContainer::sptr m_parent;
-};
-
-} // namespace builder
-} // namespace fwGui
-
-#endif /*_FWGUIWX_BUILDER_CONTAINERBUILDER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/MenuBarBuilder.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/MenuBarBuilder.hpp
deleted file mode 100644
index c48a4fe..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/MenuBarBuilder.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_BUILDER_MENUBARBUILDER_HPP_
-#define _FWGUIWX_BUILDER_MENUBARBUILDER_HPP_
-
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwGui/builder/IMenuBarBuilder.hpp>
-#include <fwGui/container/fwMenuBar.hpp>
-#include <fwGui/container/fwContainer.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-namespace builder
-{
-
-/**
- * @brief   Defines the generic layout manager for IHM.
- * @class   MenuBarBuilder
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API MenuBarBuilder : public ::fwGui::builder::IMenuBarBuilder
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (MenuBarBuilder)(::fwGui::builder::IMenuBarBuilder),
-                                            (()),
-                                            ::fwGui::factory::New< MenuBarBuilder > );
-
-    FWGUIWX_API MenuBarBuilder(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~MenuBarBuilder();
-
-    /**
-     * @brief Instantiate layout with parent menuBar.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent menuBar must be instanced.
-     */
-    FWGUIWX_API virtual void createMenuBar( ::fwGui::container::fwContainer::sptr parent );
-
-    /**
-     * @brief Destroy local layout with sub containers.
-     * @pre services using this sub containers must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyMenuBar();
-
-protected:
-    ::fwGuiWx::container::WxContainer::sptr m_parent;
-};
-
-} // namespace builder
-} // namespace fwGui
-
-#endif /*_FWGUIWX_BUILDER_MENUBARBUILDER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/Namespace.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/Namespace.hpp
deleted file mode 100644
index fab028c..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/Namespace.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWXBUILDERNAMESPACE_HPP_
-#define FWGUIWXBUILDERNAMESPACE_HPP_
-
-namespace fwGui
-{
-/**
- * @brief       The namespace fwGui::builder contains the classes for GUI elements builder implementation with the WxWidget library.
- * @namespace   fwGui::builder
- * 
- * @date        2009-2010.
- *
- */
-
-namespace builder
-{
-
-}
-}
-#endif /* FWGUIWXBUILDERNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/ToolBarBuilder.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/ToolBarBuilder.hpp
deleted file mode 100644
index ffcb639..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/builder/ToolBarBuilder.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_BUILDER_TOOLBARBUILDER_HPP_
-#define _FWGUIWX_BUILDER_TOOLBARBUILDER_HPP_
-
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwGui/builder/IToolBarBuilder.hpp>
-#include <fwGui/container/fwToolBar.hpp>
-#include <fwGui/container/fwContainer.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-namespace builder
-{
-
-/**
- * @brief   Defines the generic layout manager for IHM.
- * @class   ToolBarBuilder
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API ToolBarBuilder : public ::fwGui::builder::IToolBarBuilder
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ToolBarBuilder)(::fwGui::builder::IToolBarBuilder),
-                                            (()),
-                                            ::fwGui::factory::New< ToolBarBuilder >);
-
-    FWGUIWX_API ToolBarBuilder(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~ToolBarBuilder();
-
-    /**
-     * @brief Instantiate layout with parent toolBar.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent toolBar must be instanced.
-     */
-    FWGUIWX_API virtual void createToolBar( ::fwGui::container::fwContainer::sptr parent );
-
-    /**
-     * @brief Destroy local layout with sub containers.
-     * @pre services using this sub containers must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyToolBar();
-
-protected:
-    ::fwGuiWx::container::WxContainer::sptr m_parent;
-};
-
-} // namespace builder
-} // namespace fwGui
-
-#endif /*_FWGUIWX_BUILDER_TOOLBARBUILDER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/config.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/config.hpp
deleted file mode 100644
index bf4ee11..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-
-#ifndef _FWGUIWX_CONFIG_HPP_
-#define _FWGUIWX_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWGUIWX_EXPORTS
-    #define FWGUIWX_API __declspec(dllexport)
-    #else
-    #define FWGUIWX_API __declspec(dllimport)
-    #endif
-
-    #define FWGUIWX_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWGUIWX_EXPORTS
-    #define FWGUIWX_API __attribute__ ((visibility("default")))
-    #define FWGUIWX_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWGUIWX_API __attribute__ ((visibility("hidden")))
-    //#define FWGUIWX_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWGUIWX_API
-    #define FWGUIWX_CLASS_API
-    #endif
-
-#else
-
-    #define FWGUIWX_API
-    #define FWGUIWX_CLASS_API
-
-#endif
-
-#endif //_FWGUIWX_CONFIG_HPP_
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/Namespace.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/container/Namespace.hpp
deleted file mode 100644
index 6bdbd3e..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/Namespace.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWXCONTAINERNAMESPACE_HPP_
-#define FWGUIWXCONTAINERNAMESPACE_HPP_
-
-namespace fwGuiWx
-{
-/**
- * @brief       The namespace fwGuiWx::container contains the classes used for container implementation with WxWidgets Library.
- * @namespace   fwGuiWx::container
- * 
- * @date        2009-2010.
- *
- */
-
-namespace container
-{
-
-}
-}
-#endif /* FWGUIWXCONTAINERNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxContainer.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxContainer.hpp
deleted file mode 100644
index d3f67ae..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxContainer.hpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_CONTAINER_WXCONTAINER_HPP_
-#define _FWGUIWX_CONTAINER_WXCONTAINER_HPP_
-
-#include <wx/window.h>
-
-#include <fwCore/base.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwGui/container/fwContainer.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-/**
- * @brief   Defines the wxWidgets container for IHM.
- * @class   WxContainer
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API WxContainer : public ::fwGui::container::fwContainer
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (WxContainer)(::fwGui::container::fwContainer),
-                                            (()),
-                                            ::fwGui::factory::New< WxContainer >  );
-
-    FWGUIWX_API WxContainer(::fwGui::GuiBaseObject::Key key) throw() ;
-
-    FWGUIWX_API virtual ~WxContainer() throw() ;
-
-
-    FWGUIWX_API virtual void clean();
-    FWGUIWX_API virtual void destroyContainer();
-
-    FWGUIWX_API virtual void setWxContainer(wxWindow* container);
-    FWGUIWX_API virtual wxWindow* getWxContainer();
-    FWGUIWX_API virtual bool isShownOnScreen();
-
-    FWGUIWX_API virtual void setVisible(bool isVisible);
-
-private :
-
-    wxWindow* m_container;
-};
-
-} // namespace container
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_CONTAINER_WXCONTAINER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuBarContainer.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuBarContainer.hpp
deleted file mode 100644
index 9413b0a..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuBarContainer.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_CONTAINER_WXMENUBARCONTAINER_HPP_
-#define _FWGUIWX_CONTAINER_WXMENUBARCONTAINER_HPP_
-
-#include <wx/menu.h>
-
-#include <fwCore/base.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwGui/container/fwMenuBar.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-/**
- * @brief   Defines the wxWidgets menu bar container for IHM.
- * @class   WxMenuBarContainer
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API WxMenuBarContainer : public ::fwGui::container::fwMenuBar
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (WxMenuBarContainer)(::fwGui::container::fwMenuBar),
-                                            (()),
-                                            ::fwGui::factory::New< WxMenuBarContainer > );
-
-    FWGUIWX_API WxMenuBarContainer(::fwGui::GuiBaseObject::Key key) throw() ;
-
-    FWGUIWX_API virtual ~WxMenuBarContainer() throw() ;
-
-
-    FWGUIWX_API virtual void clean();
-    FWGUIWX_API virtual void destroyContainer();
-
-    FWGUIWX_API virtual void setWxMenuBar(wxMenuBar* menuBar);
-    FWGUIWX_API virtual wxMenuBar* getWxMenuBar();
-
-private :
-
-    wxMenuBar* m_menuBar;
-};
-
-} // namespace container
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_CONTAINER_WXMENUBARCONTAINER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuContainer.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuContainer.hpp
deleted file mode 100644
index 1fa4fca..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuContainer.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_CONTAINER_WXMENUCONTAINER_HPP_
-#define _FWGUIWX_CONTAINER_WXMENUCONTAINER_HPP_
-
-#include <wx/menu.h>
-
-#include <fwCore/base.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwGui/container/fwMenu.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-/**
- * @brief   Defines the wxWidgets menu bar container for IHM.
- * @class   WxMenuContainer
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API WxMenuContainer : public ::fwGui::container::fwMenu
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (WxMenuContainer)(::fwGui::container::fwMenu),
-                                            (()),
-                                            ::fwGui::factory::New< WxMenuContainer >  );
-
-    FWGUIWX_API WxMenuContainer(::fwGui::GuiBaseObject::Key key) throw() ;
-
-    FWGUIWX_API virtual ~WxMenuContainer() throw() ;
-
-
-    FWGUIWX_API virtual void clean();
-    FWGUIWX_API virtual void destroyContainer();
-
-    FWGUIWX_API virtual void setWxMenu(wxMenu* menu);
-    FWGUIWX_API virtual wxMenu* getWxMenu();
-
-private :
-
-    wxMenu* m_menu;
-};
-
-} // namespace container
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_CONTAINER_WXMENUCONTAINER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuItemContainer.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuItemContainer.hpp
deleted file mode 100644
index a16ac65..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxMenuItemContainer.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_CONTAINER_WXMENUITEMCONTAINER_HPP_
-#define _FWGUIWX_CONTAINER_WXMENUITEMCONTAINER_HPP_
-
-#include <wx/menu.h>
-#include <wx/toolbar.h>
-
-#include <fwCore/base.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwGui/container/fwMenuItem.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-/**
- * @brief   Defines the wxWidgets menuItem bar container for IHM.
- * @class   WxMenuItemContainer
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API WxMenuItemContainer : public ::fwGui::container::fwMenuItem
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (WxMenuItemContainer)(::fwGui::container::fwMenuItem),
-                                            (()),
-                                            ::fwGui::factory::New< WxMenuItemContainer > );
-
-    FWGUIWX_API WxMenuItemContainer(::fwGui::GuiBaseObject::Key key) throw() ;
-
-    FWGUIWX_API virtual ~WxMenuItemContainer() throw() ;
-
-
-    FWGUIWX_API virtual void clean();
-    FWGUIWX_API virtual void destroyContainer();
-
-    FWGUIWX_API virtual void setWxMenuItem(wxMenuItem* menuItem);
-    FWGUIWX_API virtual wxMenuItem* getWxMenuItem();
-
-    FWGUIWX_API virtual void setWxToolItem(wxToolBarToolBase* menuItem);
-    FWGUIWX_API virtual wxToolBarToolBase* getWxToolItem();
-
-private :
-
-    wxMenuItem* m_menuItem;
-    wxToolBarToolBase* m_toolBarToolBase;
-};
-
-} // namespace container
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_CONTAINER_WXMENUITEMCONTAINER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxToolBarContainer.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxToolBarContainer.hpp
deleted file mode 100644
index bc6c3c5..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/container/WxToolBarContainer.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_CONTAINER_WXTOOLBARCONTAINER_HPP_
-#define _FWGUIWX_CONTAINER_WXTOOLBARCONTAINER_HPP_
-
-#include <wx/toolbar.h>
-
-#include <fwCore/base.hpp>
-#include <fwTools/Object.hpp>
-
-#include <fwGui/container/fwToolBar.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-/**
- * @brief   Defines the wxWidgets toolBar bar container for IHM.
- * @class   WxToolBarContainer
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API WxToolBarContainer : public ::fwGui::container::fwToolBar
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (WxToolBarContainer)(::fwGui::container::fwToolBar),
-                                            (()),
-                                            ::fwGui::factory::New< WxToolBarContainer > );
-
-    FWGUIWX_API WxToolBarContainer(::fwGui::GuiBaseObject::Key key) throw() ;
-
-    FWGUIWX_API virtual ~WxToolBarContainer() throw() ;
-
-
-    FWGUIWX_API virtual void clean();
-    FWGUIWX_API virtual void destroyContainer();
-
-    FWGUIWX_API virtual void setWxToolBar(wxToolBar* toolBar);
-    FWGUIWX_API virtual wxToolBar* getWxToolBar();
-
-private :
-
-    wxToolBar* m_toolBar;
-};
-
-} // namespace container
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_CONTAINER_WXTOOLBARCONTAINER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/convert.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/convert.hpp
deleted file mode 100644
index d6c0b7a..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/convert.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-
-#ifndef _FWGUIWX_CONVERT_HPP_
-#define _FWGUIWX_CONVERT_HPP_
-
-#include <string>
-
-#ifdef __WXMSW__
-#   include <wx/msw/winundef.h>
-#endif
-#include <wx/string.h>
-
-#include "fwGuiWx/config.hpp"
-
-#ifdef __WXMAC__
-#include <wx/event.h>
-wxDECLARE_EVENT(wxEventFwOpen, wxCommandEvent);
-#define wxIDEventFwOpen 27001
-#endif
-
-namespace fwGuiWx
-{
-    FWGUIWX_API wxString std2wx( const std::string & value );
-    FWGUIWX_API std::string wx2std( const wxString & value );
-}
-#endif
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/InputDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/InputDialog.hpp
deleted file mode 100644
index 449d3c6..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/InputDialog.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_INPUTDIALOG_HPP_
-#define _FWGUIWX_INPUTDIALOG_HPP_
-
-#include <string>
-#include <fwCore/base.hpp>
-
-#include <fwGui/dialog/IInputDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-/**
- * @brief   Defines an input dialog for IHM on WxWidget.
- * @class   InputDialog
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API InputDialog : public ::fwGui::dialog::IInputDialog
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (InputDialog)(::fwGui::dialog::IInputDialog),
-                                            (()),
-                                            ::fwGui::factory::New< InputDialog > );
-
-    /** @brief Constructor. Do nothing.\n
-     * Example of use: \n
-     * @verbatim
-          ::fwGui::dialog::InputDialog inputDlg;
-          inputDlg.setTitle("Identification dialog");
-          inputDlg.setMessage("Enter Pin Code: ");
-          inputDlg.setInput ("<Enter your code here>");
-          std::string inputText = inputDlg.getInput();
-     @endverbatim
-     */
-
-    FWGUIWX_API InputDialog(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~InputDialog();
-
-    /// Set the title of the message box.
-    FWGUIWX_API virtual void setTitle( const std::string &title );
-
-    /// Set the message
-    FWGUIWX_API virtual void setMessage( const std::string &msg );
-
-    /// Set the input text in the input field.
-    FWGUIWX_API virtual void setInput(const std::string &text);
-
-    /// Get the input text in the input field
-    FWGUIWX_API virtual std::string getInput();
-
-
-protected:
-    /// Dialog title
-    std::string m_title;
-    /// Dialog box message
-    std::string m_message;
-    /// Text inputed
-    std::string m_input;
-
-};
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_INPUTDIALOG_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/LocationDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/LocationDialog.hpp
deleted file mode 100644
index e1b2ec4..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/LocationDialog.hpp
+++ /dev/null
@@ -1,66 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LOCATIONDIALOG_HPP_
-#define _FWGUIWX_LOCATIONDIALOG_HPP_
-
-#include <map>
-
-#include <wx/filedlg.h>
-
-#include <fwCore/base.hpp>
-#include <fwGui/dialog/ILocationDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-/**
- * @brief   Defines the generic file/folder dialog for IHM.
- * @class   LocationDialog
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API LocationDialog : public ::fwGui::dialog::ILocationDialog
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (LocationDialog)(::fwGui::dialog::ILocationDialog),
-                                            (()),
-                                            ::fwGui::factory::New< LocationDialog > );
-
-    FWGUIWX_API LocationDialog(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API ::fwData::location::ILocation::sptr show();
-
-    FWGUIWX_API ::fwGui::dialog::ILocationDialog& setOption( ::fwGui::dialog::ILocationDialog::Options option);
-
-    /// set the style of location for the dialog
-    FWGUIWX_API void setType( ::fwGui::dialog::ILocationDialog::Types type );
-
-    // exemple ( addFilter("images","*.png *.jpg");
-    FWGUIWX_API void addFilter(const std::string &filterName, const std::string &wildcardList );
-
-protected:
-    unsigned long m_style;
-    std::multimap< std::string, std::string > m_filters;
-    ::fwGui::dialog::ILocationDialog::Types m_type;
-
-    /// helper to transform m_filters into wx encoding ("BMP and GIF files (*.bmp;*.gif)|*.bmp;*.gif|PNG files (*.png)|*.png"
-    wxString fileFilters();
-
-};
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_LOCATIONDIALOG_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/MessageDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/MessageDialog.hpp
deleted file mode 100644
index 7cd5521..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/MessageDialog.hpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_MESSAGEBOX_HPP_
-#define _FWGUIWX_MESSAGEBOX_HPP_
-
-#include <string>
-#include <fwCore/base.hpp>
-
-
-
-#include <fwGui/dialog/IMessageDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-/**
- * @brief   Defines the generic message box for IHM.
- * @class   MessageDialog
- *
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API MessageDialog : public ::fwGui::dialog::IMessageDialog
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (MessageDialog)(::fwGui::dialog::IMessageDialog),
-                                            (()),
-                                            ::fwGui::factory::New< MessageDialog > );
-
-    FWGUIWX_API MessageDialog(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~MessageDialog();
-
-    /// Set the title of the message box
-    FWGUIWX_API virtual void setTitle( const std::string &title );
-
-    /// Set the message
-    FWGUIWX_API virtual void setMessage( const std::string &msg );
-
-    /// Set the icon (CRITICAL, WARNING, INFO or QUESTION)
-    FWGUIWX_API virtual void setIcon( IMessageDialog::Icons icon);
-
-    /// Add a button (OK, YES_NO, CANCEL)
-    FWGUIWX_API virtual void addButton( IMessageDialog::Buttons button );
-
-    /// Set the default buttons
-    FWGUIWX_API virtual void setDefaultButton( IMessageDialog::Buttons button );
-
-    /// Show the message box and return the clicked button.
-    FWGUIWX_API virtual Buttons show();
-
-protected:
-    /// Dialog title
-    std::string m_title;
-    /// Dialog box message
-    std::string m_message;
-    /// List of the button in wx style (wxOK, wxCANCEL, wxYES_NO)
-    unsigned long m_buttons;
-    /// Icon in wx style (wxICON_ERROR, wxICON_INFORMATION, ...)
-    unsigned long m_icon;
-};
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /*_FWGUIWX_MESSAGEBOX_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/MultiSelectorDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/MultiSelectorDialog.hpp
deleted file mode 100644
index 8e69cb3..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/MultiSelectorDialog.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_SELECTORDIALOG_HPP_
-#define FWGUIWX_SELECTORDIALOG_HPP_
-
-#include <vector>
-
-#include <fwGui/dialog/IMultiSelectorDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-//------------------------------------------------------------------------------
-
-/**
- * @brief   MultiSelectorDialog allowing the choice of an element among severals (_selections)
- * @class   MultiSelectorDialog
- * 
- * @date    2009.
- */
-
-class FWGUIWX_CLASS_API MultiSelectorDialog : public ::fwGui::dialog::IMultiSelectorDialog
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (MultiSelectorDialog)(::fwGui::dialog::IMultiSelectorDialog),
-                                            (()),
-                                            ::fwGui::factory::New< MultiSelectorDialog > );
-
-    FWGUIWX_API MultiSelectorDialog(::fwGui::GuiBaseObject::Key key) ;
-
-    FWGUIWX_API virtual ~MultiSelectorDialog();
-
-    /**
-     * @brief The string list that can be chosen by the selector.
-     */
-    FWGUIWX_API virtual void setSelections(Selections _selections);
-
-    /**
-     * @brief Sets the selector title.
-     */
-    FWGUIWX_API virtual void setTitle(std::string _title);
-
-    /**
-     * @brief Show the selector and return the selection.
-     */
-    FWGUIWX_API virtual Selections show();
-
-    FWGUIWX_API virtual void setMessage(const std::string &msg);
-
-private :
-
-    Selections m_selections;
-    /// Dialog box message
-    std::string m_message;
-    std::string m_title;
-};
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /*FWGUIWX_SELECTORDIALOG_HPP_*/
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/Namespace.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/Namespace.hpp
deleted file mode 100644
index 743b10d..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWXDIALOGNAMESPACE_HPP_
-#define FWGUIWXDIALOGNAMESPACE_HPP_
-
-namespace fwGuiWx
-{
-/**
- * @brief       The namespace fwGuiWx::dialog contains the classes used for container implementation with wxWidgets Library.
- * @namespace   fwGuiWx::dialog
- * 
- * @date        2009-2010.
- *
- */
-namespace dialog
-{
-
-}
-}
-#endif /* FWGUIWXDIALOGNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/ProgressDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/ProgressDialog.hpp
deleted file mode 100644
index 998d349..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/ProgressDialog.hpp
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_PROGRESSDIALOG
-#define FWGUIWX_PROGRESSDIALOG
-
-#include <string>
-#include <boost/shared_ptr.hpp>
-
-#include <fwGui/dialog/ProgressDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-
-class fwProgressDialog;
-
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-/**
- * @brief   This class allows us to select an acquisition in a patient data base.
- * @class   ProgressDialog
- * 
- * @date    2009.
- * @note Do not inherit from fwProgressDialog but embed a fwProgressDialog because this lasted is not copiable.
- * @todo ProgressDialog is not commented.
- */
-class FWGUIWX_CLASS_API ProgressDialog : public ::fwGui::dialog::IProgressDialog
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (ProgressDialog)(::fwGui::dialog::IProgressDialog),
-                                            (()),
-                                            ::fwGui::factory::New< ProgressDialog > );
-
-    FWGUIWX_API ProgressDialog( ::fwGui::GuiBaseObject::Key key,
-                                const std::string &title="Progression",
-                                const std::string &message= std::string(86,' '));
-
-    FWGUIWX_API virtual ~ProgressDialog();
-
-    FWGUIWX_API void operator()(float percent,std::string msg);
-
-    /// override
-    FWGUIWX_API void setTitle(const std::string &title);
-
-    /// override
-    FWGUIWX_API void setMessage(const std::string &message);
-
-protected :
-
-    ::boost::shared_ptr< fwProgressDialog >  m_pdialog;
-
-};
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /* FWGUIWX_PROGRESSDIALOG */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/PulseProgressDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/PulseProgressDialog.hpp
deleted file mode 100644
index 1ffcb14..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/PulseProgressDialog.hpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_PULSEPROGRESSDIALOG
-#define FWGUIWX_PULSEPROGRESSDIALOG
-
-#include <wx/thread.h>
-#include <wx/event.h>
-
-#include <string>
-#include <boost/shared_ptr.hpp>
-
-#include <fwGui/dialog/IPulseProgressDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-/**
- * @brief   This class allows us to show a pulse progress dialog.
- * @class   PulseProgressDialog
- * 
- * @date    2009.
- * @todo PulseProgressDialog is not commented.
- */
-class FWGUIWX_CLASS_API PulseProgressDialog : public ::fwGui::dialog::IPulseProgressDialog, public wxEvtHandler
-{
-public:
-
-
-    class LocalThread : public wxThread
-    {
-    public :
-        LocalThread( Stuff &stuff );
-        ~LocalThread();
-        virtual wxThread::ExitCode  Entry ();
-        bool isFinished() const;
-        std::string getErrorMessage() const;
-
-    protected :
-        Stuff &m_stuff;
-        bool m_isFinished;
-        /** @brief
-         * empty if no error else contain .what() value of exception
-         * catched during execution of stuff
-         */
-        std::string m_errorMessage;
-    };
-
-
-    fwCoreClassDefinitionsWithFactoryMacro( (PulseProgressDialog)(::fwGui::dialog::IPulseProgressDialog),
-                                            (()),
-                                            ::fwGui::factory::New< PulseProgressDialog > );
-
-    FWGUIWX_API PulseProgressDialog(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~PulseProgressDialog();
-
-    /// override
-    FWGUIWX_API void setTitle(const std::string &title);
-
-    /// override
-    FWGUIWX_API void setMessage(const std::string &message);
-
-    FWGUIWX_API void show();
-
-protected :
-
-    std::string m_title;
-    std::string m_message;
-    // how to react on a finished thread event
-    FWGUIWX_API void onComplete( wxThreadEvent &event);
-
-    // the thread and management
-    LocalThread *m_thread;
-    wxCriticalSection    m_threadCS;
-
-    // the progress
-    wxProgressDialog    *m_wxpd;
-
-};
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /* FWGUIWX_PULSEPROGRESSDIALOG */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/SelectorDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/SelectorDialog.hpp
deleted file mode 100644
index 55ffb8d..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/dialog/SelectorDialog.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_SELECTORDIALOG_HPP_
-#define FWGUIWX_SELECTORDIALOG_HPP_
-
-#include <vector>
-
-#include <fwGui/dialog/ISelectorDialog.hpp>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-//------------------------------------------------------------------------------
-
-/**
- * @brief   SelectorDialog allowing the choice of an element among severals (_selections)
- * @class   SelectorDialog
- * 
- * @date    2009.
- */
-
-class FWGUIWX_CLASS_API SelectorDialog : public ::fwGui::dialog::ISelectorDialog
-{
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (SelectorDialog)(::fwGui::dialog::ISelectorDialog),
-                                            (()),
-                                            ::fwGui::factory::New< SelectorDialog > );
-
-    FWGUIWX_API SelectorDialog(::fwGui::GuiBaseObject::Key key) ;
-
-    FWGUIWX_API virtual ~SelectorDialog();
-
-    /**
-     * @brief The string list that can be chosen by the selector.
-     */
-    FWGUIWX_API virtual void setSelections(std::vector< std::string > _selections);
-
-    /**
-     * @brief Sets the selector title.
-     */
-    FWGUIWX_API virtual void setTitle(std::string _title);
-
-    /**
-     * @brief Show the selector and return the selection.
-     */
-    FWGUIWX_API virtual std::string show();
-
-    FWGUIWX_API virtual void setMessage(const std::string &msg);
-
-private :
-
-    std::vector< std::string > m_selections;
-    /// Dialog box message
-    std::string m_message;
-    std::string m_title;
-};
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-#endif /*FWGUIWX_SELECTORDIALOG_HPP_*/
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/CardinalLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/CardinalLayoutManager.hpp
deleted file mode 100644
index d069159..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/CardinalLayoutManager.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP_
-
-#include <wx/aui/aui.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/layoutManager/CardinalLayoutManagerBase.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-
-/**
- * @brief   Defines the line layout manager.
- * @class   CardinalLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API CardinalLayoutManager : public ::fwGui::layoutManager::CardinalLayoutManagerBase
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (CardinalLayoutManager)(::fwGui::layoutManager::CardinalLayoutManagerBase),
-                                            (()),
-                                            ::fwGui::factory::New< CardinalLayoutManager > );
-
-    FWGUIWX_API CardinalLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~CardinalLayoutManager();
-
-    /**
-     * @brief Instantiate layout with parent container.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent containers must be instanced.
-     */
-    FWGUIWX_API virtual void createLayout( ::fwGui::container::fwContainer::sptr parent );
-
-    /**
-     * @brief Destroy local layout with sub containers.
-     * @pre services using this sub containers must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyLayout();
-
-private:
-
-    ::fwGuiWx::container::WxContainer::sptr m_parentContainer;
-
-    /// Layout manager of this view
-    wxAuiManager * m_manager;
-};
-
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_CARDINALLAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/FrameLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/FrameLayoutManager.hpp
deleted file mode 100644
index 578fe35..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/FrameLayoutManager.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP_
-
-#include <wx/aui/aui.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/layoutManager/IFrameLayoutManager.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-
-/**
- * @brief   Defines the frame manager.
- * @class   FrameLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API FrameLayoutManager : public ::fwGui::layoutManager::IFrameLayoutManager
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (FrameLayoutManager)(::fwGui::layoutManager::IFrameLayoutManager),
-                                            (()),
-                                            ::fwGui::factory::New< FrameLayoutManager > );
-
-    FWGUIWX_API FrameLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~FrameLayoutManager();
-
-    /**
-     * @brief Instantiate frame.
-     */
-    FWGUIWX_API virtual void createFrame();
-
-    /**
-     * @brief Destroy local frame with sub containers.
-     */
-    FWGUIWX_API virtual void destroyFrame();
-
-private:
-
-    static const std::map< ::fwGui::layoutManager::IFrameLayoutManager::Style, long> FWSTYLE_TO_WXSTYLE;
-
-    void onCloseFrame(wxCloseEvent& event);
-
-    void setState(FrameState state);
-    FrameState getState();
-
-    wxFrame* m_wxFrame;
-};
-
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_FRAMELAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/LineLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/LineLayoutManager.hpp
deleted file mode 100644
index 43c927e..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/LineLayoutManager.hpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP_
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/layoutManager/LineLayoutManagerBase.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-
-/**
- * @brief   Defines the line layout manager.
- * @class   LineLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API LineLayoutManager : public ::fwGui::layoutManager::LineLayoutManagerBase
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (LineLayoutManager)(::fwGui::layoutManager::LineLayoutManagerBase),
-                                            (()),
-                                            ::fwGui::factory::New< LineLayoutManager > );
-
-    FWGUIWX_API LineLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~LineLayoutManager();
-
-    /**
-     * @brief Instantiate layout with parent container.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent containers must be instanced.
-     */
-    FWGUIWX_API virtual void createLayout( ::fwGui::container::fwContainer::sptr parent );
-
-    /**
-     * @brief Destroy local layout with sub containers.
-     * @pre services using this sub containers must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyLayout();
-
-private:
-    ::fwGuiWx::container::WxContainer::sptr m_parentContainer;
-};
-
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_LINELAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/MenuBarLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/MenuBarLayoutManager.hpp
deleted file mode 100644
index 0a72364..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/MenuBarLayoutManager.hpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP_
-
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwGui/container/fwMenuBar.hpp>
-#include <fwGui/container/fwMenu.hpp>
-#include <fwGui/layoutManager/IMenuBarLayoutManager.hpp>
-
-#include "fwGuiWx/container/WxMenuBarContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-namespace layoutManager
-{
-
-/**
- * @brief   Defines the menu bar layout manager for IHM.
- * @class   MenuBarLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API MenuBarLayoutManager : public ::fwGui::layoutManager::IMenuBarLayoutManager
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (MenuBarLayoutManager)(::fwGui::layoutManager::IMenuBarLayoutManager),
-                                            (()),
-                                            ::fwGui::factory::New< MenuBarLayoutManager > );
-
-    FWGUIWX_API MenuBarLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~MenuBarLayoutManager();
-
-    /**
-     * @brief Instantiate menu with parent menuBar.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent menuBar must be instanced.
-     */
-    FWGUIWX_API virtual void createLayout( ::fwGui::container::fwMenuBar::sptr parent );
-
-    /**
-     * @brief Destroy local menus.
-     * @pre services using this menus must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyLayout();
-
-
-    /**
-     * @brief Set the menu visibility.
-     */
-    FWGUIWX_API virtual void menuIsVisible(::fwGui::container::fwMenu::sptr fwMenu, bool isVisible);
-
-    /**
-     * @brief Set the menu enable or not.
-     */
-    FWGUIWX_API virtual void menuIsEnabled(::fwGui::container::fwMenu::sptr fwMenu, bool isEnabled);
-
-protected:
-
-    /// Return the position of the menu in the menuBar
-    int getMenuPosition(::fwGui::container::fwMenu::sptr fwMenu);
-
-    ::fwGuiWx::container::WxMenuBarContainer::sptr m_parent;
-};
-
-} // namespace layoutManager
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_MENUBARLAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/MenuLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/MenuLayoutManager.hpp
deleted file mode 100644
index eed9292..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/MenuLayoutManager.hpp
+++ /dev/null
@@ -1,87 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP_
-
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwGui/container/fwMenu.hpp>
-#include <fwGui/layoutManager/IMenuLayoutManager.hpp>
-
-#include "fwGuiWx/container/WxMenuContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-namespace layoutManager
-{
-
-/**
- * @brief   Defines the menu layout manager for IHM.
- * @class   MenuLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API MenuLayoutManager : public ::fwGui::layoutManager::IMenuLayoutManager
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (MenuLayoutManager)(::fwGui::layoutManager::IMenuLayoutManager),
-                                            (()),
-                                            ::fwGui::factory::New< MenuLayoutManager > );
-
-    FWGUIWX_API MenuLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~MenuLayoutManager();
-
-    /**
-     * @brief Instantiate actions with parent menu.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent menu must be instanced.
-     */
-    FWGUIWX_API virtual void createLayout( ::fwGui::container::fwMenu::sptr parent );
-
-    /**
-     * @brief Destroy local menus.
-     * @pre services using this actions must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyLayout();
-
-
-    /**
-     * @brief Set the action visibility.
-     */
-    FWGUIWX_API virtual void menuItemSetVisible(::fwGui::container::fwMenuItem::sptr menuItem, bool isVisible);
-
-    /**
-     * @brief Set the action enable or not.
-     */
-    FWGUIWX_API virtual void menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr menuItem, bool isEnabled);
-
-    /**
-     * @brief Set the action checked or not.
-     */
-    FWGUIWX_API virtual void menuItemSetChecked(::fwGui::container::fwMenuItem::sptr, bool isChecked);
-
-protected:
-
-    ::fwGuiWx::container::WxMenuContainer::sptr m_parent;
-
-    /// Vector of separators
-    std::vector< ::fwGui::container::fwMenuItem::sptr > m_separators;
-
-    static const std::map< ::fwGui::layoutManager::IMenuLayoutManager::ActionType, int> SPECIAL_ACTION_TO_WXID;
-};
-
-
-} // namespace layoutManager
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_MENULAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/Namespace.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/Namespace.hpp
deleted file mode 100644
index 35b78b8..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWXLAYOUTMANAGERNAMESPACE_HPP_
-#define FWGUIWXLAYOUTMANAGERNAMESPACE_HPP_
-
-namespace fwGui
-{
-/**
- * @brief       The namespace fwGui::layoutManager contains the implementation of managers use to handle the GUI layout available in FW4SPL. The wxWidget library is used.
- * @namespace   fwGui::registrar
- * 
- * @date        2009-2010.
- *
- */
-namespace layoutManager
-{
-
-}
-}
-#endif /* FWGUIWXLAYOUTMANAGERNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/TabLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/TabLayoutManager.hpp
deleted file mode 100644
index b16fd27..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/TabLayoutManager.hpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP_
-
-#include <wx/notebook.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwGui/layoutManager/TabLayoutManagerBase.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-
-/**
- * @brief   Defines the tab layout manager.
- * @class   TabLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API TabLayoutManager : public ::fwGui::layoutManager::TabLayoutManagerBase
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (TabLayoutManager)(::fwGui::layoutManager::TabLayoutManagerBase),
-                                            (()),
-                                            ::fwGui::factory::New< TabLayoutManager > );
-
-    FWGUIWX_API TabLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~TabLayoutManager();
-
-    /**
-     * @brief Instantiate layout with parent container.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent containers must be instanced.
-     */
-    FWGUIWX_API virtual void createLayout( ::fwGui::container::fwContainer::sptr parent );
-
-    /**
-     * @brief Destroy local layout with sub containers.
-     * @pre services using this sub containers must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyLayout();
-
-private:
-
-    ::fwGuiWx::container::WxContainer::sptr m_parentContainer;
-
-    // Layout manager of this view
-    wxNotebook * m_notebook;
-};
-
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_TABLAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/ToolBarLayoutManager.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/ToolBarLayoutManager.hpp
deleted file mode 100644
index 0fa8c4e..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/layoutManager/ToolBarLayoutManager.hpp
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWGUIWX_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP_
-#define _FWGUIWX_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP_
-
-#include <fwCore/base.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwGui/container/fwToolBar.hpp>
-#include <fwGui/layoutManager/IToolBarLayoutManager.hpp>
-
-#include "fwGuiWx/container/WxToolBarContainer.hpp"
-#include "fwGuiWx/config.hpp"
-
-namespace fwGui
-{
-namespace layoutManager
-{
-
-/**
- * @brief   Defines the tool bar layout manager for IHM.
- * @class   ToolBarLayoutManager
- * 
- * @date    2009-2010.
- *
- */
-class FWGUIWX_CLASS_API ToolBarLayoutManager : public ::fwGui::layoutManager::IToolBarLayoutManager
-{
-public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ToolBarLayoutManager)(::fwGui::layoutManager::IToolBarLayoutManager),
-                                            (()),
-                                            ::fwGui::factory::New< ToolBarLayoutManager > );
-
-    FWGUIWX_API ToolBarLayoutManager(::fwGui::GuiBaseObject::Key key);
-
-    FWGUIWX_API virtual ~ToolBarLayoutManager();
-
-    /**
-     * @brief Instantiate actions with parent toolBar.
-     * @pre LayoutManager must be initialized before.
-     * @pre parent toolBar must be instanced.
-     */
-    FWGUIWX_API virtual void createLayout( ::fwGui::container::fwToolBar::sptr parent );
-
-    /**
-     * @brief Destroy local toolbar.
-     * @pre services using this actions must be stopped before.
-     */
-    FWGUIWX_API virtual void destroyLayout();
-
-
-    /**
-     * @brief Set the action visibility.
-     */
-    FWGUIWX_API virtual void menuItemSetVisible(::fwGui::container::fwMenuItem::sptr menuItem, bool isVisible);
-
-    /**
-     * @brief Set the action enable or not.
-     */
-    FWGUIWX_API virtual void menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr menuItem, bool isEnabled);
-
-    /**
-     * @brief Set the action checked or not.
-     */
-    FWGUIWX_API virtual void menuItemSetChecked(::fwGui::container::fwMenuItem::sptr, bool isChecked);
-
-protected:
-
-    ::fwGuiWx::container::WxToolBarContainer::sptr m_parent;
-
-};
-
-
-} // namespace layoutManager
-} // namespace fwGui
-
-#endif /*_FWGUIWX_LAYOUTMANAGER_TOOLBARLAYOUTMANAGER_HPP_*/
-
-
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/ImageURLPanel.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/ImageURLPanel.hpp
deleted file mode 100644
index 90445a6..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/ImageURLPanel.hpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef IMAGEURLPANEL_HPP_
-#define IMAGEURLPANEL_HPP_
-
-#include <wx/wx.h>
-
-#include "fwGuiWx/config.hpp"
-
-namespace fwGuiWx
-{
-
-namespace widgets
-{
-
-/**
- * @brief   This class is used to show an image file or image url
- * @class   ImageURLPanel
- * 
- * @date    2009.
- * @note    This class is not commented, because it is not used in the open framework tutorial.
- * @todo    ImageURLPanel is not commented.
- */
-class FWGUIWX_CLASS_API ImageURLPanel : public wxPanel
-{
-
-public:
-
-    FWGUIWX_API ImageURLPanel(wxWindow *parent, const wxBitmap& bitmap);
-    FWGUIWX_API void OnPaint(wxPaintEvent& WXUNUSED(event));
-    FWGUIWX_API void OnWeb(wxMouseEvent& WXUNUSED(event));
-    FWGUIWX_API void OnFocus(wxMouseEvent& WXUNUSED(event));
-    FWGUIWX_API void OnEnter(wxMouseEvent& WXUNUSED(event));
-    FWGUIWX_API void OnLeave(wxMouseEvent& WXUNUSED(event));
-
-private:
-
-    wxBitmap m_bitmap;
-
-    DECLARE_EVENT_TABLE()
-};
-}
-}
-#endif /*IMAGEURLPANEL_HPP_*/
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/Namespace.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/Namespace.hpp
deleted file mode 100644
index e78ecee..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/Namespace.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWXWIDGETSNAMESPACE_HPP_
-#define FWGUIWXWIDGETSNAMESPACE_HPP_
-
-namespace fwGuiWx
-{
-/*
- * @brief       The namespace fwGuiWx::widgets provides a list of widgets based on WxWidgets .
- * @namespace   fwGuiWx::widgets
- * 
- * @date        2009-2010.
- *
- */
-namespace widgets
-{
-
-}
-}
-#endif /* FWGUIWXWIDGETSNAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/colourpicker.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/colourpicker.hpp
deleted file mode 100644
index c489a86..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/colourpicker.hpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-/////////////////////////////////////////////////////////////////////////////
-// Name:        colourpicker.h
-// Purpose:     wxColourPicker header
-// Author:      Juan Antonio Ortega
-// Created:     2006/06/17
-// RCS-ID:      $Id: colourpicker.h,v 1.1 2006/06/27 18:10:54 ja_ortega Exp $
-// Copyright:   (c) 2006 Juan Antonio Ortega
-// Licence:     wxWidgets licence
-/////////////////////////////////////////////////////////////////////////////
-
-#ifndef _COLOURPICKER_H_
-#define _COLOURPICKER_H_
-
-#include <wx/wxprec.h>
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-#ifndef WX_PRECOMP
-    #include <wx/wx.h>
-#endif
-
-#include <wx/popupwin.h>
-
-#include "fwGuiWx/config.hpp"
-
-#define SQUARE_WIDTH    12
-#define SQUARE_SEPARATION   6
-#define ROWS    5
-#define COLUMNS 8
-
-class wxColourPanel;
-
-
-/**
- * @brief   This class provides a widgets which allows the user to pick a colour from a palette.
- * @class   WindowingParameterEditor
- * @note    This class is not commented, because it is not used in the open framework tutorial.
- * @todo This class has to be removed, because it is available in the new wxWidgets release.
- *
- * This class provides a widgets which allows
- * the user to pick a colour from a palette. You can customize several
- * parameters of the palette: thw width of the square colours, the separation
- * between them, the number of rows and the number of columns. In order to
- * change this settings, open wx/colourpicker.h and change the defines that
- * are at the top of the file.
- */
-class FWGUIWX_CLASS_API wxColourPicker : public wxBitmapButton {
-
-    wxColourPanel *m_cp;
-
-    wxColour m_colour;
-
-    wxBitmap CreateColourBitmap(const wxColour& c, const wxSize& size, bool enabled);
-
-public:
-
-    /**
-     * wxColourPicker Constructor
-     * @param parent The parent window
-     * @param id The widget's id
-     */
-    FWGUIWX_API wxColourPicker(wxWindow *parent, int id);
-
-    // Get-Set methods
-    /**
-     * Sets the colour that is being displayed as selected colour in
-     * the picker button. This method sends an event whenever it is called.
-     * @param colour The colour to show in the picker
-     */
-    FWGUIWX_API void SetColour(wxColour& colour);
-
-    /**
-     * Return the selected colour
-     * @return The selected colour
-     */
-    FWGUIWX_API wxColour GetColour();
-
-    // Overriden methods
-    FWGUIWX_API virtual void DoSetSize(int x, int y,
-                           int width, int height,
-                           int sizeFlags = wxSIZE_AUTO);
-
-    // Events
-    FWGUIWX_API void OnPopup(wxCommandEvent& WXUNUSED(e));
-
-    DECLARE_EVENT_TABLE()
-};
-
-/**
- * wxColourPickerEvent class. This event is fired each time the user changes
- * the selected colour in the control. If the user chooses the same colour,
- * then no event is sent. In order to catch the event, you can use the
- * EVT_COLOUR_CHANGED(id, func) macro. This event is also fired when you
- * programatically change the selected colour.
- */
-class FWGUIWX_CLASS_API wxColourPickerEvent : public wxCommandEvent {
-    wxColour m_colour;
-public:
-    FWGUIWX_API wxColourPickerEvent(int id, wxColour& colur);
-
-    /**
-     * Returns the new selected colour
-     * @return The selected colour
-     */
-    FWGUIWX_API wxColour GetColour();
-    FWGUIWX_API wxEvent* Clone() const;
-};
-
-//----------------------------------------------------
-//  Internal classes
-//----------------------------------------------------
-
-class wxColourElement{
-public:
-    wxColour m_colour;
-    wxString m_name;
-};
-
-class wxColourPanel : public wxPopupTransientWindow{
-    wxBitmap m_back;
-    wxColour m_selectedColour;
-    wxColour m_overColour;
-    wxColourPicker *m_picker;
-    bool m_overMore;
-    bool m_isFlat, m_osHasDropShadow;
-    static const wxColourElement ms_colorTable[ROWS][COLUMNS];
-
-    void GetColourFromPoint(int x, int y, wxColour& colour, bool& more, wxString& name);
-    void PaintSquare(wxImage& image, wxImage& maskImage, int x, int y, wxColour col);
-public:
-    wxColourPanel(wxWindow *parent);
-
-    // Get-Set methods
-    void SetColour(wxColour& colour);
-    wxColour GetColour();
-
-    // Overriden methods
-    virtual void Popup(wxWindow *focus, wxColourPicker *picker);
-    virtual void Dismiss();
-
-    // Events
-    void OnMouseMotion(wxMouseEvent& e);
-    void OnMouseDown(wxMouseEvent& e);
-    void OnMouseLeave(wxMouseEvent& e);
-    void OnPaint(wxPaintEvent& e);
-
-    DECLARE_EVENT_TABLE()
-};
-
-DECLARE_EVENT_TYPE(wxEVT_COMMAND_COLOUR_CHANGED, -1)
-
-typedef void (wxEvtHandler::*wxColourPickerEventFunction)(wxColourPickerEvent&);
-#define EVT_COLOUR_CHANGED(id,func)    \
-wx__DECLARE_EVT1(wxEVT_COMMAND_COLOUR_CHANGED, id, (wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxColourPickerEventFunction, &func))
-
-#endif
diff --git a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/fwProgressDialog.hpp b/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/fwProgressDialog.hpp
deleted file mode 100644
index 0207337..0000000
--- a/SrcLib/core/fwGuiWx/include/fwGuiWx/widgets/fwProgressDialog.hpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWGUIWX_FWPROGRESSDIALOG
-#define FWGUIWX_FWPROGRESSDIALOG
-
-#include <string>
-
-
-#include <wx/defs.h>
-#include <wx/progdlg.h>
-
-#if wxUSE_PROGRESSDLG
-
-#include <wx/dialog.h>
-
-#include "fwGuiWx/config.hpp"
-
-class wxButton;
-class wxGauge;
-class wxStaticText;
-
-/* Progress dialog without YieldFor. Copied and modifed from wxWidget2.9 */
-
-class  FWGUIWX_CLASS_API fwProgressDialog : public wxDialog
-{
-DECLARE_DYNAMIC_CLASS(fwProgressDialog)
-public:
-    /* Creates and displays dialog, disables event handling for other
-       frames or parent frame to avoid recursion problems.
-       @param title title for window
-       @param message message to display in window
-       @param maximum value for status bar, if <= 0, no bar is shown
-       @param parent window or NULL
-       @param style is the bit mask of wxPD_XXX constants from wx/defs.h
-    */
-    FWGUIWX_API fwProgressDialog(const wxString& title, const wxString& message,
-                     int maximum = 100,
-                     wxWindow *parent = NULL,
-                     int style = wxPD_APP_MODAL | wxPD_AUTO_HIDE);
-    /* Destructor.
-        Re-enables event handling for other windows.
-    */
-    FWGUIWX_API virtual ~fwProgressDialog();
-
-    /* Update the status bar to the new value.
-       @param value new value
-       @param newmsg if used, new message to display
-       @return true if ABORT button has not been pressed
-    */
-    FWGUIWX_API virtual bool Update(int value, const wxString& newmsg = wxEmptyString, bool *skip = NULL);
-
-    /* Switches the dialog to use a gauge in indeterminate mode and calls
-       wxGauge::Pulse() to show to the user a bit of progress */
-    FWGUIWX_API virtual bool Pulse(const wxString& newmsg = wxEmptyString, bool *skip = NULL);
-
-    // Must provide overload to avoid hiding it (and warnings about it)
-    FWGUIWX_API virtual void Update() { wxDialog::Update(); }
-
-    FWGUIWX_API virtual bool Show( bool show = true );
-
-    /* Can be called to continue after the cancel button has been pressed, but
-       the program decided to continue the operation (e.g., user didn't
-       confirm it)
-    */
-    FWGUIWX_API void Resume();
-
-    FWGUIWX_API int GetValue() const;
-    FWGUIWX_API int GetRange() const;
-    FWGUIWX_API wxString GetMessage() const;
-
-    // updates the label message
-    FWGUIWX_API void UpdateMessage(const wxString &newmsg);
-
-protected:
-    // callback for optional abort button
-    void OnCancel(wxCommandEvent&);
-
-    // callback for optional skip button
-    void OnSkip(wxCommandEvent&);
-
-    // callback to disable "hard" window closing
-    void OnClose(wxCloseEvent&);
-
-    // must be called to reenable the other windows temporarily disabled while
-    // the dialog was shown
-    void ReenableOtherWindows();
-
-private:
-    // create the label with given text and another one to show the time nearby
-    // as the next windows in the sizer, returns the created control
-    wxStaticText *CreateLabel(const wxString& text, wxSizer *sizer);
-
-
-
-    // common part of Update() and Pulse(), returns true if not cancelled
-    bool DoAfterUpdate(bool *skip);
-
-    // shortcuts for enabling buttons
-    void EnableClose();
-    void EnableSkip(bool enable = true);
-    void EnableAbort(bool enable = true);
-    void DisableSkip() { EnableSkip(false); }
-    void DisableAbort() { EnableAbort(false); }
-
-    // the widget displaying current status (may be NULL)
-    wxGauge *m_gauge;
-    // the message displayed
-    wxStaticText *m_msg;
-    // displayed elapsed, estimated, remaining time
-    wxStaticText *m_elapsed,
-                 *m_estimated,
-                 *m_remaining;
-    // time when the dialog was created
-    unsigned long m_timeStart;
-    // time when the dialog was closed or cancelled
-    unsigned long m_timeStop;
-    // time between the moment the dialog was closed/cancelled and resume
-    unsigned long m_break;
-
-    // parent top level window (may be NULL)
-    wxWindow *m_parentTop;
-
-    // continue processing or not (return value for Update())
-    enum
-    {
-        Uncancelable = -1,   // dialog can't be canceled
-        Canceled,            // can be cancelled and, in fact, was
-        Continue,            // can be cancelled but wasn't
-        Finished             // finished, waiting to be removed from screen
-    } m_state;
-
-    // skip some portion
-    bool m_skip;
-
-#if !defined(__SMARTPHONE__)
-    // the abort and skip buttons (or NULL if none)
-    wxButton *m_btnAbort;
-    wxButton *m_btnSkip;
-#endif
-
-    // the maximum value
-    int m_maximum;
-
-    // saves the time when elapsed time was updated so there is only one
-    // update per second
-    unsigned long m_last_timeupdate;
-    // tells how often a change of the estimated time has to be confirmed
-    // before it is actually displayed - this reduces the frequence of updates
-    // of estimated and remaining time
-    const int m_delay;
-    // counts the confirmations
-    int m_ctdelay;
-    unsigned long m_display_estimated;
-
-    bool m_hasAbortButton,
-         m_hasSkipButton;
-
-#if defined(__WXMSW__ ) || defined(__WXPM__)
-    // the factor we use to always keep the value in 16 bit range as the native
-    // control only supports ranges from 0 to 65,535
-    size_t m_factor;
-#endif // __WXMSW__
-
-    // for wxPD_APP_MODAL case
-    class WXDLLIMPEXP_FWD_CORE wxWindowDisabler *m_winDisabler;
-
-    DECLARE_EVENT_TABLE()
-    wxDECLARE_NO_COPY_CLASS(fwProgressDialog);
-};
-
-#endif // wxUSE_PROGRESSDLG
-
-#endif // FWGUIWX_FWPROGRESSDIALOG
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/ActionCallback.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/ActionCallback.cpp
deleted file mode 100644
index 9dc7464..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/ActionCallback.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwGui/registry/macros.hpp>
-
-#include "fwGuiWx/ActionCallback.hpp"
-
-
-fwGuiRegisterMacro( ::fwGuiWx::ActionCallback, ::fwGui::ActionCallbackBase::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-
-//-----------------------------------------------------------------------------
-
-ActionCallback::ActionCallback(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ActionCallback::~ActionCallback()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ActionCallback::executeWx(wxCommandEvent& event)
-{
-    this->check(event.IsChecked());
-    this->execute();
-}
-
-} // namespace fwGuiWx
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/App.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/App.cpp
deleted file mode 100644
index 69f5ad2..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/App.cpp
+++ /dev/null
@@ -1,315 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <assert.h>
-#include <iostream>
-#include <sstream>
-#include <locale.h>
-
-#include <wx/wx.h>
-#include <wx/cmdline.h>
-#include <wx/msgdlg.h>
-#include <wx/wxprec.h>
-#include <wx/filename.h>
-#include <wx/stdpaths.h>
-#include <wx/config.h>
-#include <wx/filefn.h>
-#include <wx/snglinst.h>
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/tokenizer.hpp>
-
-#ifdef __MACOSX__
-#include <ApplicationServices/ApplicationServices.h>
-#endif
-
-#include <fwTools/Os.hpp>
-
-#include <fwRuntime/RuntimeException.hpp>
-
-#include <fwGuiWx/convert.hpp>
-#include <fwGuiWx/LoggerInitializer.hpp>
-
-#include <fwGui/dialog/MessageDialog.hpp>
-
-#include "fwGuiWx/App.hpp"
-
-namespace fwGuiWx
-{
-
-//-----------------------------------------------------------------------------
-
-App::App() : m_locale(0), m_checker(0)
-{
-    SetAppName( wxGetTranslation("launcher") );
-#ifdef __MACOSX__
-    ProcessSerialNumber PSN;
-    GetCurrentProcess(&PSN);
-    TransformProcessType(&PSN,kProcessTransformToForegroundApplication);
-#endif
-}
-
-//-----------------------------------------------------------------------------
-
-void App::usage( const std::string & mes ) const
-{
-    ::fwGui::dialog::MessageDialog messageBox;
-    messageBox.setTitle("Exception Caught");
-    messageBox.setMessage( mes );
-    messageBox.setIcon(::fwGui::dialog::IMessageDialog::CRITICAL);
-    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
-    messageBox.show();
-}
-
-//-----------------------------------------------------------------------------
-
-bool App::OnInit()
-{
-    ::fwGuiWx::LoggerInitializer::initialize();
-
-    setlocale(LC_ALL,"C"); // needed for mfo save process
-    std::string appName = "No name";
-    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
-    if (profile)
-    {
-        appName = profile->getName();
-    }
-
-#ifndef TDVPM_COMPLIANT
-    m_locale = new wxLocale();
-    ::boost::filesystem::path pathLauncher;
-	#ifdef SPECIALINSTALL
-		pathLauncher = SHAREPATH / "launcher_0-1" / "locale" ;
-	#else
-		pathLauncher = ::boost::filesystem::current_path() / "share" / "launcher_0-1" / "locale" ;
-	#endif
-
-    wxLocale::AddCatalogLookupPathPrefix( ::fwGuiWx::std2wx( pathLauncher.string() ));
-    m_locale->Init(GetUILanguage());
-    m_locale->AddCatalog(_T("launcher"));
-    m_locale->AddCatalog(_T("runtime"));
-    // Set the locale to C for all number of all application
-    setlocale(LC_NUMERIC,"C");
-#else
-    setlocale(LC_ALL,"C");
-#endif
-
-    wxApp::OnInit();
-
-#ifndef TDVPM_COMPLIANT
-    m_locale->AddCatalog(::fwGuiWx::std2wx(appName), wxLANGUAGE_FRENCH, _T("utf-8"));
-#endif
-    SetAppName( ::fwGuiWx::std2wx(appName) );
-
-    std::string checkerPath = ::fwTools::os::getUserDataDir("IRCAD", appName, true);
-
-    if (checkerPath.empty())
-    {
-        checkerPath = ::fwTools::os::getUserDataDir("IRCAD", "", true);
-    }
-    if (checkerPath.empty())
-    {
-        checkerPath = ::fwTools::os::getUserDataDir("", "", true);
-    }
-    SLM_ASSERT("Unable to find user's data dir.", !checkerPath.empty());
-
-    m_checker = new wxSingleInstanceChecker();
-    if (profile && profile->getCheckSingleInstance())
-    {
-        m_checker->Create( ::fwGuiWx::std2wx(appName) + wxGetTranslation(".pid"), ::fwGuiWx::std2wx(checkerPath));
-        if ( m_checker->IsAnotherRunning() )
-        {
-            wxLogError(wxGetTranslation("Another " + ::fwGuiWx::std2wx(appName) + wxGetTranslation(" instance is already running, aborting.")));
-            return false;
-        }
-    }
-
-    return true;
-}
-
-//-----------------------------------------------------------------------------
-
-int App::OnExit()
-{
-    SLM_TRACE_FUNC();
-    delete m_checker;
-    return 0;
-}
-
-//-----------------------------------------------------------------------------
-
-static const wxCmdLineEntryDesc cmdLineDesc[] =
-{
-        { wxCMD_LINE_OPTION, "p", "profile", "path to the profile to launch",wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_OPTIONAL },
-        { wxCMD_LINE_OPTION, "s", "substitute", "substitute parameters : name1 at value1@name2 at value2...", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
-        { wxCMD_LINE_PARAM, NULL, NULL, "old style parameters", wxCMD_LINE_VAL_STRING, wxCMD_LINE_PARAM_MULTIPLE | wxCMD_LINE_PARAM_OPTIONAL },
-        { wxCMD_LINE_NONE }
-};
-
-//-----------------------------------------------------------------------------
-
-void App::OnInitCmdLine(wxCmdLineParser & parser)
-{
-    wxApp::OnInitCmdLine(parser);
-    parser.SetDesc(cmdLineDesc);
-}
-
-//-----------------------------------------------------------------------------
-
-void App::OnUnhandledException()
-{
-    // we're called from an exception handler so we can re-throw the exception
-    // to recover its type
-    std::string what;
-    try
-    {
-        throw;
-    }
-    catch ( std::exception& e )
-    {
-        what = e.what();
-    }
-    catch ( ... )
-    {
-        what = "unknown exception";
-    }
-
-    ::fwGui::dialog::MessageDialog messageBox;
-    messageBox.setTitle("Exception Caught");
-    messageBox.setMessage( what );
-    messageBox.setIcon(::fwGui::dialog::IMessageDialog::CRITICAL);
-    messageBox.addButton(::fwGui::dialog::IMessageDialog::OK);
-    messageBox.show();
-
-    throw ::fwRuntime::RuntimeException( what );
-}
-
-//-----------------------------------------------------------------------------
-
-#ifdef __WXMAC__
-void App::MacOpenFile (  const wxString & fileName)
-{
-    SLM_TRACE("MacOpenFile");
-    eventMac(fileName);
-}
-
-//-----------------------------------------------------------------------------
-
-void App::MacNewFile (  const wxString & fileName)
-{
-    SLM_TRACE("MacNewFile");
-    eventMac(fileName);
-}
-
-//-----------------------------------------------------------------------------
-
-void App::MacReopenApp (  const wxString & fileName)
-{
-    SLM_TRACE("MacReopenApp");
-    eventMac(fileName);
-}
-
-//-----------------------------------------------------------------------------
-
-void App::eventMac(const wxString & fileName)
-{
-    wxCommandEvent tEvent(wxEventFwOpen, wxIDEventFwOpen);
-    tEvent.SetString( fileName );
-    tEvent.SetEventObject( this );
-    wxFrame *frame = wxDynamicCast( wxTheApp->GetTopWindow() , wxFrame ) ;
-    if (frame != NULL)
-        frame->GetEventHandler()->ProcessEvent( tEvent );
-    else
-        SLM_FATAL ("Window not found !");
-}
-
-#endif
-
-} // namespace fwGuiWx
-
-
-//-----------------------------------------------------------------------------
-//-----------------------------------------------------------------------------
-
-#if NEED_CHOOSELANG_UI
-static void SaveUILanguage(wxLanguage lang)
-{
-    if (lang == wxLANGUAGE_UNKNOWN)
-        return;
-    if (lang == wxLANGUAGE_DEFAULT)
-        wxConfig::Get()->Write(_T("ui_language"), _T("default"));
-    else
-        wxConfig::Get()->Write(_T("ui_language"),
-                wxLocale::GetLanguageInfo(lang)->CanonicalName);
-}
-#endif // NEED_CHOOSELANG_UI
-
-//-----------------------------------------------------------------------------
-
-wxLanguage GetUILanguage()
-{
-#if !NEED_CHOOSELANG_UI
-    return wxLANGUAGE_DEFAULT;
-#else
-    wxLanguage lang(wxLANGUAGE_DEFAULT);
-    wxString lng = wxConfig::Get()->Read(_T("ui_language"));
-    if (lng.empty())
-    {
-        lang = ChooseLanguage();
-        if (lang != wxLANGUAGE_UNKNOWN)
-            SaveUILanguage(lang);
-        else
-            lang = wxLANGUAGE_DEFAULT;
-    }
-    else if (lng != _T("default"))
-    {
-        const wxLanguageInfo *info = wxLocale::FindLanguageInfo(lng);
-        if (info != NULL)
-            lang = (wxLanguage)info->Language;
-        else
-            wxLogError(wxGetTranslation("Uknown locale code '%s' in registry."), lng.c_str());
-    }
-    return lang;
-#endif // NEED_CHOOSELANG_UI
-}
-
-//-----------------------------------------------------------------------------
-
-#if NEED_CHOOSELANG_UI
-wxLanguage ChooseLanguage()
-{
-    struct LangInfo
-    {
-        const wxChar *name;
-        wxLanguage code;
-    };
-
-    LangInfo langs[] =
-    {
-            { wxGetTranslation("(Use default language)"), wxLANGUAGE_DEFAULT },
-
-            { _T("English"), wxLANGUAGE_ENGLISH },
-            { _T("French"), wxLANGUAGE_FRENCH },
-
-            { NULL, wxLANGUAGE_UNKNOWN }
-    };
-
-    wxArrayString arr;
-    for (int i = 0; langs[i].name; i++)
-        arr.Add(langs[i].name);
-
-    int choice = wxGetSingleChoiceIndex(
-            wxGetTranslation("Select your prefered language"),
-            wxGetTranslation("Language selection"),
-            arr);
-    if (choice == -1)
-        return wxLANGUAGE_UNKNOWN;
-    else
-        return langs[choice].code;
-}
-#endif // NEED_CHOOSELANG_UI
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/Application.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/Application.cpp
deleted file mode 100644
index b8621dd..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/Application.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-
-#include <fwGui/registry/macros.hpp>
-
-#include "fwGuiWx/Application.hpp"
-
-
-fwGuiRegisterMacro( ::fwGuiWx::Application, ::fwGui::IApplication::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-//-----------------------------------------------------------------------------
-
-void Application::exit(int returncode)
-{
-    SLM_WARN_IF("returncode is actually ignored in fwGuiWx", returncode != 0);
-    wxExit();
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwGuiWx
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/Cursor.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/Cursor.cpp
deleted file mode 100644
index fe7f5d7..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/Cursor.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/utils.h>
-#include <wx/cursor.h>
-
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/Cursor.hpp"
-
-
-fwGuiRegisterMacro( ::fwGuiWx::Cursor, ::fwGui::ICursor::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-//-----------------------------------------------------------------------------
-
-Cursor::Cursor(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-Cursor::~Cursor()
-{}
-
-//-----------------------------------------------------------------------------
-
-void Cursor::setCursor( ::fwGui::ICursor::CursorType cursor)
-{
-    if (cursor == ICursor::DEFAULT)
-    {
-        this->setDefaultCursor();
-    }
-    else if (cursor == ICursor::BUSY)
-    {
-        wxBeginBusyCursor(wxHOURGLASS_CURSOR);
-    }
-    else if (cursor == ICursor::WAIT)
-    {
-        wxBeginBusyCursor(new wxCursor(wxCURSOR_WAIT));
-    }
-    else if (cursor == ICursor::CROSS)
-    {
-        wxBeginBusyCursor(new wxCursor(wxCURSOR_CROSS));
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void Cursor::setDefaultCursor()
-{
-    wxEndBusyCursor();
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwGuiWx
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/LoggerInitializer.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/LoggerInitializer.cpp
deleted file mode 100644
index 85596ce..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/LoggerInitializer.cpp
+++ /dev/null
@@ -1,128 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/log.h>
-#include <wx/version.h>
-
-#include <fwCore/base.hpp>
-
-#include "fwGuiWx/LoggerInitializer.hpp"
-#include "fwGuiWx/convert.hpp"
-
-//------------------------------------------------------------------------------
-
-namespace fwGuiWx
-{
-
-class fwGuiWxLog : public wxLog
-{
-public:
-    fwGuiWxLog(){};
-    virtual ~fwGuiWxLog(){};
-
-protected:
-#if wxCHECK_VERSION(2, 9, 1)
-    virtual void DoLogRecord(wxLogLevel level, const wxString & msg, const wxLogRecordInfo & info);
-#else
-    virtual void DoLog(wxLogLevel level, const wxString& szString, time_t t);
-#endif
-
-};
-
-//------------------------------------------------------------------------------
-
-#if wxCHECK_VERSION(2, 9, 1)
-void fwGuiWxLog::DoLogRecord(wxLogLevel level, const wxString& szString, const wxLogRecordInfo & info)
-#else
-void fwGuiWxLog::DoLog(wxLogLevel level, const wxString& szString, time_t t)
-#endif
-{
-    wxString logLevel;
-
-    switch ( level )
-    {
-        case wxLOG_FatalError:
-            logLevel = wxT("FatalError: ");
-            break;
-        case wxLOG_Error:
-            logLevel = wxT("Error: ");
-            break;
-        case wxLOG_Status:
-            logLevel = wxT("Status: ");
-            break;
-        case wxLOG_Warning:
-            logLevel = wxT("Warning: ");
-            break;
-        case wxLOG_Info:
-            logLevel = wxT("Info: ");
-            break;
-        case wxLOG_Message:
-            logLevel = wxT("Message: ");
-            break;
-
-        default:
-            logLevel = wxT("Unknown log level: ");
-            break;
-#if wxUSE_LOG_TRACE
-        case wxLOG_Trace:
-            logLevel = wxT("Trace: ");
-            break;
-#endif
-#if wxUSE_LOG_DEBUG
-        case wxLOG_Debug:
-            logLevel = wxT("Debug: ");
-            break;
-#endif
-    }
-
-    wxString timestamp;
-    this->TimeStamp(&timestamp);
-    std::string msg = "[WX]: " + wx2std(timestamp +": "+ logLevel + szString);
-    SLM_WARN(msg);
-
-    switch ( level )
-    {
-#if wxCHECK_VERSION(2, 9, 1)
-        case wxLOG_FatalError:
-            wxLog::DoLogRecord(level, szString, info);
-            break;
-        case wxLOG_Error:
-            wxLog::DoLogRecord(level, szString, info);
-            break;
-        case wxLOG_Status:
-            wxLog::DoLogRecord(level, szString, info);
-            break;
-#else
-        case wxLOG_FatalError:
-            wxLog::DoLog(level, szString, t);
-            break;
-        case wxLOG_Error:
-            wxLog::DoLog(level, szString, t);
-            break;
-        case wxLOG_Status:
-            wxLog::DoLog(level, szString, t);
-            break;
-#endif
-    }
-}
-
-//------------------------------------------------------------------------------
-
-LoggerInitializer::LoggerInitializer()
-{
-    delete wxLog::SetActiveTarget(new fwGuiWxLog);
-}
-
-//------------------------------------------------------------------------------
-
-void LoggerInitializer::initialize()
-{
-    WPTR(LoggerInitializer) reg = SPTR(LoggerInitializer)(new LoggerInitializer) ;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/Shortcut.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/Shortcut.cpp
deleted file mode 100644
index 4629ac1..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/Shortcut.cpp
+++ /dev/null
@@ -1,358 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <cassert>
-#include <iostream>
-#include <sstream>
-
-#include <boost/algorithm/string/case_conv.hpp>
-#include <boost/tokenizer.hpp>
-
-#include <wx/wx.h>
-#include <wx/version.h>
-#include <wx/accel.h>
-
-#include "fwGuiWx/Shortcut.hpp"
-
-namespace fwGuiWx
-{
-
-namespace
-{
-    /**
-     * @brief   Defines the character separator type for the shortcut definition string tokenizer.
-     */
-    typedef ::boost::char_separator< char >         char_separator;
-
-    /**
-     * @brief   Defines the tokenizer that will be used to split a shortcut definition string.
-     */
-    typedef ::boost::tokenizer< char_separator >    tokenizer;
-
-
-    /**
-     * @name    Modifier & Key Lexial Values
-     */
-    //@{
-
-    const std::string ALT       ( "Alt"     );  ///< alt modifier
-    const std::string CTRL      ( "Ctrl"    );  ///< control modifier
-    const std::string SHIFT     ( "Shift"   );  ///< shift modifier
-
-    const std::string UP        ( "Up"      );  ///< up arrow
-    const std::string RIGHT     ( "Right"   );  ///< right arrow
-    const std::string DOWN      ( "Down"    );  ///< down arrow
-    const std::string LEFT      ( "Left"    );  ///< left arrow
-
-    const std::string INSERT    ( "Insert"  );  ///< insert key
-    const std::string DEL       ( "Delete"  );  ///< delete key (VC cl7.1 does not support a variable named DELETE, so using DEL instead).
-    const std::string HOME      ( "Home"    );  ///< home key
-    const std::string END       ( "End"     );  ///< end key
-    const std::string RETURN    ( "Return"  );  ///< return key
-    const std::string PAGEUP    ( "Pageup"  );  ///< pageup key
-    const std::string PAGEDOWN  ( "Pagedown");  ///< page down key
-
-    const std::string F1        ( "F1"      );  ///< F1  key
-    const std::string F2        ( "F2"      );  ///< F2  key
-    const std::string F3        ( "F3"      );  ///< F3  key
-    const std::string F4        ( "F4"      );  ///< F4  key
-    const std::string F5        ( "F5"      );  ///< F5  key
-    const std::string F6        ( "F6"      );  ///< F6  key
-    const std::string F7        ( "F7"      );  ///< F7  key
-    const std::string F8        ( "F8"      );  ///< F8  key
-    const std::string F9        ( "F9"      );  ///< F9  key
-    const std::string F10       ( "F10"     );  ///< F10 key
-    const std::string F11       ( "F11"     );  ///< F11 key
-    const std::string F12       ( "F12"     );  ///< F12 key
-
-    //@}
-
-
-    /**
-     * @brief   Updates the case of the given string so it conforms to internal
-     *          specifications.
-     *
-     * The case updates consist in having the first character in upper case
-     * and all others in lower case.
-     *
-     * @param   source  a string to transform
-     *
-     * @return  the string with updated case
-     */
-    std::string adaptCase( const std::string &source )
-    {
-        typedef std::pair< std::string::iterator, std::string::iterator > ItPair;
-
-        std::string result( source );
-
-        if( result.length() >= 1 )
-        {
-            std::string::iterator   begin   ( result.begin()    );
-            std::string::iterator   end     ( begin + 1         );
-            ItPair                  range   ( begin, end        );
-
-            ::boost::algorithm::to_upper( range );
-        }
-
-        if( result.length() >= 2 )
-        {
-
-            std::string::iterator   begin   ( result.begin() + 1    );
-            std::string::iterator   end     ( result.end()          );
-            ItPair                  range   ( begin, end            );
-
-            ::boost::algorithm::to_lower( range );
-        }
-
-        return result;
-    }
-
-}
-
-//-----------------------------------------------------------------------------
-
-Shortcut::Shortcut( const int modifiers, const int keyCode )
-:   m_modifiers ( modifiers     ),
-    m_keyCode   ( keyCode       )
-{}
-
-//-----------------------------------------------------------------------------
-
-Shortcut::Shortcut( const std::string & definition )
-:   m_modifiers ( getModifiersFromString(definition)    ),
-    m_keyCode   ( getKeyCodeFromString(definition)      )
-{}
-
-//-----------------------------------------------------------------------------
-
-const int Shortcut::getModifiers() const
-{
-    return m_modifiers;
-}
-
-//-----------------------------------------------------------------------------
-
-const int Shortcut::getKeyCode() const
-{
-    return m_keyCode;
-}
-
-//-----------------------------------------------------------------------------
-
-const int Shortcut::getModifiersFromString( const std::string & shortcut )
-{
-    int modifiers = 0;
-
-    // Walks trough the tokens of the shortcut definition.
-    tokenizer   tokens( shortcut, char_separator("+ ") );
-    for( tokenizer::iterator i = tokens.begin(); i != tokens.end(); ++i )
-    {
-        // Retrieves the current token.
-        std::string token( adaptCase(*i) );
-
-        // Determines the current token's matching modifier.
-        if( token == ALT )
-        {
-            modifiers |= wxACCEL_ALT;
-        }
-        else if( token == CTRL )
-        {
-            modifiers |= wxACCEL_CTRL;
-        }
-        else if( token == SHIFT )
-        {
-            modifiers |= wxACCEL_SHIFT;
-        }
-    }
-
-    return modifiers;
-}
-
-//-----------------------------------------------------------------------------
-
-const int Shortcut::getKeyCodeFromString( const std::string & shortcut )
-{
-    int keyCode = 0;
-
-    // Walks trough the tokens of the shortcut definition.
-    tokenizer   tokens( shortcut, char_separator("+ ") );
-    for( tokenizer::iterator i = tokens.begin(); i != tokens.end() && keyCode == 0; ++i )
-    {
-        // Retrieves the current token.
-        std::string token( adaptCase(*i) );
-
-        // If the current token is not a modifier, than get its key code.
-        if( token != ALT && token != CTRL && token != SHIFT )
-        {
-            // @todo missing non-ascii key code to be added
-            if      ( token == INSERT   )   keyCode = WXK_INSERT;
-            else if ( token == DEL      )   keyCode = WXK_DELETE;
-            else if ( token == HOME     )   keyCode = WXK_HOME;
-            else if ( token == END      )   keyCode = WXK_END;
-            else if ( token == RETURN   )   keyCode = WXK_RETURN;
-#if wxCHECK_VERSION(2, 9, 0)
-            else if ( token == PAGEUP   )   keyCode = WXK_PAGEUP;
-            else if ( token == PAGEDOWN )   keyCode = WXK_PAGEDOWN;
-#else
-            else if ( token == PAGEUP   )   keyCode = WXK_PRIOR;
-            else if ( token == PAGEDOWN )   keyCode = WXK_NEXT;
-#endif
-            else if ( token == UP       )   keyCode = WXK_UP;
-            else if ( token == RIGHT    )   keyCode = WXK_RIGHT;
-            else if ( token == DOWN     )   keyCode = WXK_DOWN;
-            else if ( token == LEFT     )   keyCode = WXK_LEFT;
-            else if ( token == F1       )   keyCode = WXK_F1;
-            else if ( token == F2       )   keyCode = WXK_F2;
-            else if ( token == F3       )   keyCode = WXK_F3;
-            else if ( token == F4       )   keyCode = WXK_F4;
-            else if ( token == F5       )   keyCode = WXK_F5;
-            else if ( token == F6       )   keyCode = WXK_F6;
-            else if ( token == F7       )   keyCode = WXK_F7;
-            else if ( token == F8       )   keyCode = WXK_F8;
-            else if ( token == F9       )   keyCode = WXK_F9;
-            else if ( token == F10      )   keyCode = WXK_F10;
-            else if ( token == F11      )   keyCode = WXK_F11;
-            else if ( token == F12      )   keyCode = WXK_F12;
-            else                            keyCode = (int) token[0];
-        }
-    }
-
-    return keyCode;
-}
-
-//-----------------------------------------------------------------------------
-
-const std::string Shortcut::getString( const int modifiers, const int keyCode )
-{
-    const std::string   modifiersString ( getStringFromModifiers( modifiers )   );
-    const std::string   keyCodeString   ( getStringFromKeyCode( keyCode )       );
-
-    if( modifiersString.empty() == false && keyCodeString.empty() == false )
-    {
-        return modifiersString + "+" + keyCodeString;
-    }
-    else
-    {
-        return modifiersString + keyCodeString;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-const std::string Shortcut::getStringFromModifiers( const int modifiers )
-{
-    std::ostringstream  buffer;
-    bool                putDelimiter( false );
-
-    if( modifiers & wxACCEL_CTRL )
-    {
-        buffer << CTRL;
-        putDelimiter = true;
-    }
-    if( modifiers & wxACCEL_ALT )
-    {
-        if( putDelimiter )
-        {
-            buffer << std::string("+");
-        }
-        buffer << ALT;
-        putDelimiter = true;
-    }
-    if( modifiers & wxACCEL_SHIFT )
-    {
-        if( putDelimiter )
-        {
-            buffer << std::string("+");
-        }
-        buffer << SHIFT;
-    }
-
-    return buffer.str();
-}
-
-//-----------------------------------------------------------------------------
-
-const std::string Shortcut::getStringFromKeyCode( const int keyCode )
-{
-    std::string result;
-
-    switch( keyCode )
-    {
-    // @todo missing non-ascii key code to be added
-    case WXK_INSERT:    result = INSERT;    break;
-    case WXK_DELETE:    result = DEL;       break;
-    case WXK_HOME:      result = HOME;      break;
-    case WXK_END:       result = END;       break;
-    case WXK_RETURN:    result = RETURN;    break;
-#if wxCHECK_VERSION(2, 9, 0)
-    case WXK_PAGEUP:        result = PAGEUP;    break;
-    case WXK_PAGEDOWN:      result = PAGEDOWN;  break;
-#else
-    case WXK_PRIOR:     result = PAGEUP;    break;
-    case WXK_NEXT:      result = PAGEDOWN;  break;
-#endif
-    case WXK_UP:        result = UP;        break;
-    case WXK_RIGHT:     result = RIGHT;     break;
-    case WXK_DOWN:      result = DOWN;      break;
-    case WXK_LEFT:      result = LEFT;      break;
-    case WXK_F1:        result = F1;        break;
-    case WXK_F2:        result = F2;        break;
-    case WXK_F3:        result = F3;        break;
-    case WXK_F4:        result = F4;        break;
-    case WXK_F5:        result = F5;        break;
-    case WXK_F6:        result = F6;        break;
-    case WXK_F7:        result = F7;        break;
-    case WXK_F8:        result = F8;        break;
-    case WXK_F9:        result = F9;        break;
-    case WXK_F10:       result = F10;       break;
-    case WXK_F11:       result = F11;       break;
-    case WXK_F12:       result = F12;       break;
-    default:            result = keyCode;   break;
-    }
-    return result;
-}
-
-//-----------------------------------------------------------------------------
-
-void Shortcut::set( const std::string & definition )
-{
-    m_modifiers = getModifiersFromString( definition );
-    m_keyCode   = getKeyCodeFromString( definition );
-}
-
-//-----------------------------------------------------------------------------
-
-Shortcut & Shortcut::operator= ( const std::string & definition )
-{
-    set( definition );
-    return *this;
-}
-
-//-----------------------------------------------------------------------------
-
-const std::string Shortcut::toString() const
-{
-    const std::string   modifiers   ( getStringFromModifiers( m_modifiers ) );
-    const std::string   keyCode     ( getStringFromKeyCode(m_keyCode )      );
-
-    if( modifiers.empty() == false && keyCode.empty() == false )
-    {
-        return modifiers + "+" + keyCode;
-    }
-    else
-    {
-        return modifiers + keyCode;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-Shortcut::operator std::string () const
-{
-    return toString();
-}
-
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/WorkerWx.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/WorkerWx.cpp
deleted file mode 100644
index 2b92476..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/WorkerWx.cpp
+++ /dev/null
@@ -1,370 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/bind.hpp>
-#include <boost/thread.hpp>
-#include <boost/thread/once.hpp>
-#include <boost/chrono/duration.hpp>
-
-#include <wx/wx.h>
-
-#include <fwCore/macros.hpp>
-#include <fwCore/util/LazyInstantiator.hpp>
-
-#include <fwThread/Worker.hpp>
-#include <fwThread/Timer.hpp>
-
-#include <fwServices/registry/ActiveWorkers.hpp>
-
-#include "fwGuiWx/App.hpp"
-#include "fwGuiWx/WorkerWx.hpp"
-
-namespace fwGuiWx
-{
-class WorkerWxTask;
-
-wxDEFINE_EVENT(MESSAGE_EVENT, WorkerWxTask);
-
-// Create a new application object
-IMPLEMENT_APP_NO_MAIN(::fwGuiWx::App);
-
-class WorkerWxTask : public wxEvent
-{
-public:
-
-    WorkerWxTask( const ::fwThread::Worker::TaskType &handler ) :
-        wxEvent( 0, MESSAGE_EVENT ),
-        m_handler(handler)
-    {
-        SLM_ASSERT( "wxApplication should be instantiated", wxTheApp );
-    }
-
-    /// Copy constructor.
-    WorkerWxTask(const WorkerWxTask& workerTask) :
-        wxEvent( 0, MESSAGE_EVENT ),
-        m_handler(workerTask.m_handler)
-    {}
-
-    ~WorkerWxTask()
-    {}
-
-    void process()
-    {
-        m_handler();
-    }
-
-    // implement the base class pure virtual
-    virtual wxEvent *Clone() const
-    {
-        return new WorkerWxTask(*this);
-    }
-
-protected:
-    ::fwThread::Worker::TaskType m_handler;
-};
-
-
-/**
- * @brief Private implementation of fwThread::Worker using boost::asio.
- */
-class WorkerWx : public ::fwThread::Worker
-{
-public:
-    typedef ::boost::thread ThreadType;
-
-    WorkerWx();
-
-    void init( int &argc, char **argv );
-
-    void onExit();
-
-    virtual ~WorkerWx();
-
-    void stop();
-
-    void post(TaskType handler);
-
-    ::fwThread::Worker::FutureType getFuture();
-
-    virtual ::fwThread::ThreadIdType getThreadId() const;
-
-    void onMessage(WorkerWxTask &event);
-
-    virtual void processTasks();
-
-    virtual void processTasks(PeriodType maxtime);
-
-protected:
-
-    SPTR(::fwThread::Timer) createTimer();
-
-    /// Copy constructor forbidden
-    WorkerWx( const WorkerWx& );
-
-    /// Copy operator forbidden
-    WorkerWx& operator=( const WorkerWx& );
-
-    ::fwThread::ThreadIdType m_threadId;
-
-    ::boost::function1< void, WorkerWxTask& > m_onMessageHandler;
-};
-
-
-struct FWGUIWX_CLASS_API WorkerWxInstanciator
-{
-    FWGUIWX_API WorkerWxInstanciator(bool reg = true) :
-        m_wxWorker(::boost::make_shared< WorkerWx >())
-    {
-        m_wxWorker->init( ::boost::ref(s_argc), s_argv);
-
-        if(reg)
-        {
-            ::fwServices::registry::ActiveWorkers::getDefault()
-                ->addWorker(::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER, m_wxWorker);
-        }
-    }
-
-    FWGUIWX_API SPTR(::fwThread::Worker) getWorker();
-
-    SPTR(WorkerWx) m_wxWorker;
-
-    FWGUIWX_API static int    s_argc;
-    FWGUIWX_API static char **s_argv;
-};
-
-int WorkerWxInstanciator::s_argc = 0 ;
-char** WorkerWxInstanciator::s_argv = NULL;
-
-
-SPTR(::fwThread::Worker) WorkerWxInstanciator::getWorker()
-{
-    return m_wxWorker;
-}
-
-::fwThread::Worker::sptr getWxWorker( int &argc, char **argv )
-{
-
-    WorkerWxInstanciator::s_argc = argc;
-    WorkerWxInstanciator::s_argv = argv;
-
-    typedef ::fwCore::util::LazyInstantiator< WorkerWxInstanciator, WorkerWxInstanciator > InstantiatorType;
-
-    SPTR(WorkerWxInstanciator) instanciator = InstantiatorType::getInstance();
-
-#ifdef _DEBUG
-    {
-        static ::boost::mutex mutex;
-        ::boost::mutex::scoped_lock scoped_lock(mutex);
-        static bool initialized = false;
-        SLM_ASSERT("getWxWorker(argc, argv) shall be called only once", !initialized);
-        initialized = true;
-    }
-#endif
-
-
-    return instanciator->m_wxWorker;
-}
-
-
-//------------------------------------------------------------------------------
-
-
-/**
- * @class TimerWx
- * @brief Private Timer implementation using Wx.
- *
- * 
- * @date   2012.
- */
-class TimerWx : public ::fwThread::Timer
-{
-public:
-    /**
-     * @brief Constructs a TimerWx from given io_service.
-     */
-    TimerWx();
-
-    ~TimerWx();
-
-    /// Starts or restarts the timer.
-    void start();
-
-    /// Stops the timer and cancel all pending operations.
-    void stop();
-
-    /// Sets time duration.
-    void setDuration(TimeDurationType duration);
-
-    /// Returns if the timer mode is 'one shot'.
-    bool isOneShot() const
-    {
-        ::fwCore::mt::ScopedLock lock(m_mutex);
-        return m_timerWx->IsOneShot();
-    }
-
-    /// Sets timer mode.
-    void setOneShot(bool oneShot)
-    {
-        ::fwCore::mt::ScopedLock lock(m_mutex);
-        m_isOneShot = oneShot;
-    }
-
-    /// Returns true if the timer is currently running.
-    bool isRunning() const
-    {
-        ::fwCore::mt::ScopedLock lock(m_mutex);
-        return m_timerWx->IsRunning();
-    }
-
-protected:
-
-    void call(wxTimerEvent& event);
-
-    /// Copy constructor forbidden.
-    TimerWx( const TimerWx& );
-
-    /// Copy operator forbidden.
-    TimerWx& operator=( const TimerWx& );
-
-    SPTR(wxTimer) m_timerWx;
-    bool m_isOneShot;
-    TimeDurationType m_duration;
-};
-
-//------------------------------------------------------------------------------
-
-
-// ---------- WorkerWx private implementation ----------
-
-WorkerWx::WorkerWx() :
-    m_threadId( ::fwThread::getCurrentThreadId() )
-{
-}
-
-void WorkerWx::init( int &argc, char **argv )
-{
-    OSLM_TRACE("Init Wx" << ::fwThread::getCurrentThreadId() <<" Start");
-    wxEntryStart( argc, argv ) ;
-    wxTheApp->OnInit();
-    m_onMessageHandler = ::boost::bind( &WorkerWx::onMessage, this, _1 );
-    wxTheApp->Bind( MESSAGE_EVENT, m_onMessageHandler );
-    OSLM_TRACE("Init Wx" << ::fwThread::getCurrentThreadId() <<" Finish");
-}
-
-WorkerWx::~WorkerWx()
-{
-    this->stop();
-    wxEntryCleanup();
-}
-
-int onRun()
-{
-    SLM_ASSERT("wxTheApp not initialized", wxTheApp);
-    return wxTheApp->OnRun();
-}
-
-::fwThread::Worker::FutureType WorkerWx::getFuture()
-{
-    if (! m_future.valid() )
-    {
-        SLM_ASSERT("WorkerWx loop shall be created and ran from main thread ",
-            ! m_future.valid() && ::fwThread::getCurrentThreadId() == this->getThreadId() );
-
-        ::boost::packaged_task< ExitReturnType > task( ::boost::bind(&onRun) );
-        ::boost::future< ExitReturnType > ufuture = task.get_future();
-        m_future = ::boost::move(ufuture);
-        task();
-    }
-    return m_future;
-}
-
-::fwThread::ThreadIdType WorkerWx::getThreadId() const
-{
-    return m_threadId;
-}
-
-void WorkerWx::onExit()
-{
-    wxTheApp->Unbind( MESSAGE_EVENT, m_onMessageHandler );
-    wxTheApp->ExitMainLoop();
-    wxTheApp->OnExit();
-}
-
-void WorkerWx::stop()
-{
-    this->postTask<void>(::boost::bind( &WorkerWx::onExit, this)).wait();
-}
-
-SPTR(::fwThread::Timer) WorkerWx::createTimer()
-{
-    return ::boost::make_shared< TimerWx >();
-}
-
-void WorkerWx::post(TaskType handler)
-{
-    wxTheApp->AddPendingEvent( WorkerWxTask(handler) );
-}
-
-void WorkerWx::onMessage(WorkerWxTask &event)
-{
-    event.process();
-    event.Skip(true);
-    event.StopPropagation();
-}
-
-void WorkerWx::processTasks()
-{
-    SLM_FATAL("ProcessTasks not yet implemented in WorkerWx");
-}
-
-void WorkerWx::processTasks(PeriodType maxtime)
-{
-    FwCoreNotUsedMacro(maxtime);
-    SLM_FATAL("ProcessTasks not yet implemented in WorkerWx");
-}
-
-// ---------- Timer private implementation ----------
-
-TimerWx::TimerWx() :
-    m_timerWx( new wxTimer(wxTheApp) ), m_isOneShot(false)
-{
-    wxTheApp->Bind(wxEVT_TIMER, &TimerWx::call, this, m_timerWx->GetId());
-}
-
-TimerWx::~TimerWx()
-{
-    wxTheApp->Unbind(wxEVT_TIMER, &TimerWx::call, this, m_timerWx->GetId());
-    m_timerWx->Stop();
-}
-
-void TimerWx::setDuration(TimeDurationType duration)
-{
-    ::fwCore::mt::ScopedLock lock(m_mutex);
-    m_duration = duration;
-}
-
-void TimerWx::start()
-{
-    ::fwCore::mt::ScopedLock lock(m_mutex);
-    m_timerWx->Start( 
-                ::boost::chrono::duration_cast< ::boost::chrono::milliseconds >(m_duration).count(), 
-                m_isOneShot);
-}
-
-void TimerWx::stop()
-{
-    ::fwCore::mt::ScopedLock lock(m_mutex);
-    m_timerWx->Stop();
-}
-
-void TimerWx::call(wxTimerEvent& event)
-{
-    m_function();
-}
-
-
-} //namespace fwGuiWx
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/ContainerBuilder.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/ContainerBuilder.cpp
deleted file mode 100644
index 6a98993..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/ContainerBuilder.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/sizer.h>
-#include <wx/panel.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/builder/ContainerBuilder.hpp"
-
-
-
-fwGuiRegisterMacro( ::fwGui::builder::ContainerBuilder, ::fwGui::builder::IContainerBuilder::REGISTRY_KEY );
-
-
-namespace fwGui
-{
-namespace builder
-{
-
-//-----------------------------------------------------------------------------
-
-ContainerBuilder::ContainerBuilder(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ContainerBuilder::~ContainerBuilder()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ContainerBuilder::createContainer( ::fwGui::container::fwContainer::sptr parent )
-{
-    m_parent = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("Sorry, the parent container is not a WxContainer", m_parent);
-
-    ::fwGuiWx::container::WxContainer::sptr wxContainer = ::fwGuiWx::container::WxContainer::New();
-    wxWindow *wxParent = m_parent->getWxContainer();
-    wxPanel *panel = new wxPanel(wxParent, wxNewId());
-    wxContainer->setWxContainer(panel);
-
-    wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
-
-    SLM_ASSERT("Sorry, the parent container has already a layout", !wxParent->GetSizer());
-    wxParent->SetSizer(boxSizer);
-    boxSizer->Add(panel, 1, wxALL|wxEXPAND);
-    wxParent->Layout();
-
-    m_container = wxContainer;
-}
-
-//-----------------------------------------------------------------------------
-
-void ContainerBuilder::destroyContainer()
-{
-    SLM_ASSERT("Sorry, Container not initialized", m_container);
-    SLM_ASSERT("Sorry, the parent container is not a WxContainer", m_parent);
-
-    m_container->destroyContainer();
-    m_parent->clean();
-}
-
-//-----------------------------------------------------------------------------
-
-void ContainerBuilder::setParent(::fwGui::container::fwContainer::sptr parent)
-{
-    SLM_ASSERT("Sorry, WxContainer not yet initialized, cleaning impossible", m_container);
-    ::fwGuiWx::container::WxContainer::sptr parentContainer = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwContainer to WxContainer failed", parentContainer);
-    ::fwGuiWx::container::WxContainer::sptr container = ::fwGuiWx::container::WxContainer::dynamicCast(m_container);
-    SLM_ASSERT("dynamicCast fwContainer to WxContainer failed", container);
-
-    wxWindow *wxContainer = container->getWxContainer();
-    SLM_ASSERT("Sorry, WxContainer not yet initialized", wxContainer);
-    wxWindow *wxParent = parentContainer->getWxContainer();
-    SLM_ASSERT("Sorry, parent WxContainer not yet initialized", wxParent);
-
-    if(wxParent != m_parent->getWxContainer() )
-    {
-        if(!wxParent->GetSizer())
-        {
-            SLM_TRACE("New parent container hasn't layout");
-
-            wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
-            wxParent->SetSizer(boxSizer);
-        }
-        wxContainer->Reparent(wxParent);
-        wxWindow *oldWxParent = m_parent->getWxContainer() ;
-
-        oldWxParent->GetSizer()->Detach(wxContainer);
-        wxParent->GetSizer()->Add(wxContainer, 1, wxALL|wxEXPAND);
-
-        wxParent->Layout();
-        wxContainer->Layout();
-
-        m_parent = parentContainer;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace builder
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/MenuBarBuilder.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/MenuBarBuilder.cpp
deleted file mode 100644
index 1992b92..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/MenuBarBuilder.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/frame.h>
-#include <wx/menu.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/container/WxMenuBarContainer.hpp"
-#include "fwGuiWx/builder/MenuBarBuilder.hpp"
-
-fwGuiRegisterMacro( ::fwGui::builder::MenuBarBuilder, ::fwGui::builder::IMenuBarBuilder::REGISTRY_KEY );
-
-namespace fwGui
-{
-namespace builder
-{
-
-//-----------------------------------------------------------------------------
-
-MenuBarBuilder::MenuBarBuilder(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-MenuBarBuilder::~MenuBarBuilder()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MenuBarBuilder::createMenuBar( ::fwGui::container::fwContainer::sptr parent )
-{
-    m_parent = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("Sorry, the parent container is not a WxContainer", m_parent);
-    wxFrame *frame = wxDynamicCast( m_parent->getWxContainer() , wxFrame ) ;
-    SLM_ASSERT("Sorry, the parent container must be a wxFrame", frame ) ;
-    if (frame)
-    {
-        ::fwGuiWx::container::WxMenuBarContainer::sptr menuBarContainer = ::fwGuiWx::container::WxMenuBarContainer::New();
-        wxMenuBar *menuBar = new wxMenuBar();
-        menuBarContainer->setWxMenuBar(menuBar);
-        frame->SetMenuBar( menuBar );
-        this->m_menuBar = menuBarContainer;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MenuBarBuilder::destroyMenuBar()
-{
-    SLM_ASSERT("Sorry, the parent container is not a WxContainer", m_parent);
-    wxFrame *frame = wxDynamicCast( m_parent->getWxContainer() , wxFrame ) ;
-    SLM_ASSERT("Sorry, the parent container must be a wxFrame", frame ) ;
-    if (frame)
-    {
-        frame->SetMenuBar( NULL );
-    }
-    this->m_menuBar->destroyContainer();
-}
-
-//-----------------------------------------------------------------------------
-
-
-} // namespace builder
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/ToolBarBuilder.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/ToolBarBuilder.cpp
deleted file mode 100644
index 69b94e8..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/builder/ToolBarBuilder.cpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/frame.h>
-#include <wx/toolbar.h>
-#include <wx/sizer.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-#include "fwGuiWx/container/WxToolBarContainer.hpp"
-#include "fwGuiWx/builder/ToolBarBuilder.hpp"
-
-fwGuiRegisterMacro( ::fwGui::builder::ToolBarBuilder, ::fwGui::builder::IToolBarBuilder::REGISTRY_KEY );
-
-namespace fwGui
-{
-namespace builder
-{
-
-//-----------------------------------------------------------------------------
-
-ToolBarBuilder::ToolBarBuilder(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ToolBarBuilder::~ToolBarBuilder()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ToolBarBuilder::createToolBar( ::fwGui::container::fwContainer::sptr parent )
-{
-    m_parent = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("Sorry, the parent container is not a WxContainer", m_parent);
-    wxFrame *frame = wxDynamicCast( m_parent->getWxContainer() , wxFrame ) ;
-    ::fwGuiWx::container::WxToolBarContainer::sptr toolBarContainer = ::fwGuiWx::container::WxToolBarContainer::New();
-
-    if (frame)
-    {
-        frame->CreateToolBar(wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT, -1);
-        frame->GetToolBar()->SetMargins( 2, 2 );
-        frame->GetToolBar()->SetToolBitmapSize( wxSize(m_toolBitmapSize.first, m_toolBitmapSize.second) );
-        toolBarContainer->setWxToolBar(frame->GetToolBar());
-        this->m_toolBar = toolBarContainer;
-    }
-    else // parent is not a wxFrame
-    {
-        wxToolBar * toolbar = new wxToolBar(m_parent->getWxContainer(), wxNewId(), wxDefaultPosition, wxDefaultSize, wxNO_BORDER|wxHORIZONTAL|wxTB_FLAT);
-        toolbar->SetMargins( 2, 2 );
-        toolbar->SetToolBitmapSize( wxSize(m_toolBitmapSize.first, m_toolBitmapSize.second) );
-        toolBarContainer->setWxToolBar(toolbar);
-
-        SLM_ASSERT("Parent container must have a sizer", m_parent->getWxContainer()->GetSizer());
-        wxSizer * sizer = m_parent->getWxContainer()->GetSizer();
-        sizer->Insert(0, toolbar, 0, wxEXPAND);
-        this->m_toolBar = toolBarContainer;
-    }
-
-}
-
-//-----------------------------------------------------------------------------
-
-void ToolBarBuilder::destroyToolBar()
-{
-    SLM_ASSERT("Sorry, the parent container is not a WxContainer", m_parent);
-    wxFrame *frame = wxDynamicCast( m_parent->getWxContainer() , wxFrame ) ;
-    if (frame)
-    {
-        frame->SetToolBar( NULL );
-    }
-    this->m_toolBar->destroyContainer();
-}
-
-//-----------------------------------------------------------------------------
-
-
-} // namespace builder
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxContainer.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxContainer.cpp
deleted file mode 100644
index 050d72a..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxContainer.cpp
+++ /dev/null
@@ -1,109 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-#include <wx/sizer.h>
-#include <wx/aui/aui.h>
-
-#include "fwGuiWx/container/WxContainer.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-//-----------------------------------------------------------------------------
-
-WxContainer::WxContainer(::fwGui::GuiBaseObject::Key key) throw() : m_container(0)
-{}
-
-//-----------------------------------------------------------------------------
-
-WxContainer::~WxContainer() throw()
-{
-    SLM_ASSERT( "Error during destruction : The wx container included in this class is still allocated, please call destroyContainer() before.", m_container == 0 );
-}
-
-//-----------------------------------------------------------------------------
-
-void WxContainer::clean()
-{
-    SLM_ASSERT("Sorry, wxWindows not yet initialized, cleaning impossible", m_container);
-
-    m_container->SetSizer(NULL);
-    m_container->DestroyChildren();
-}
-
-//-----------------------------------------------------------------------------
-
-void WxContainer::destroyContainer()
-{
-    SLM_ASSERT("Sorry, wxWindows not yet initialized", m_container);
-    OSLM_ASSERT("Container must be empty ( " << m_container->GetChildren().GetCount() << " children).", m_container->GetChildren().IsEmpty());
-    m_container->Destroy();
-    m_container = 0;
-}
-
-//-----------------------------------------------------------------------------
-
-void WxContainer::setWxContainer(wxWindow* container)
-{
-    this->m_container = container;
-}
-
-//-----------------------------------------------------------------------------
-
-wxWindow* WxContainer::getWxContainer()
-{
-    return this->m_container;
-}
-
-//-----------------------------------------------------------------------------
-
-bool WxContainer::isShownOnScreen()
-{
-    SLM_ASSERT("Sorry, wxWindow not yet initialized, cleaning impossible", m_container);
-    return m_container->IsShownOnScreen();
-}
-
-//-----------------------------------------------------------------------------
-
-void WxContainer::setVisible(bool isVisible)
-{
-    SLM_ASSERT("Sorry, WxContainer not yet initialized, cleaning impossible", m_container);
-    wxWindow* parent   = m_container->GetParent();
-
-    if (parent && parent->GetSizer() )
-    {
-        wxAuiManager* aui = wxAuiManager::GetManager(parent);
-        if(aui && aui->GetManagedWindow() == parent )
-        {
-            wxAuiPaneInfo& pane = aui->GetPane(m_container);
-            SLM_ASSERT("Sorry, wxAuiPaneInfo not found", pane.IsOk());
-            pane.Show(isVisible);
-            aui->Update();
-        }
-        else
-        {
-            wxSizer* sizer1 = parent->GetSizer();
-            sizer1->Show(m_container, isVisible, true);
-            if(m_container->GetContainingSizer() && m_container->GetContainingSizer() != sizer1)
-            {
-                wxSizer* sizer2 = m_container->GetContainingSizer();
-                sizer1->Show(sizer2, isVisible, true);
-            }
-        }
-        parent->Layout();
-    }
-
-    m_container->Show(isVisible);
-    m_container->Layout();
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace container
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuBarContainer.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuBarContainer.cpp
deleted file mode 100644
index 5e237d2..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuBarContainer.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwGuiWx/container/WxMenuBarContainer.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-//-----------------------------------------------------------------------------
-
-WxMenuBarContainer::WxMenuBarContainer(::fwGui::GuiBaseObject::Key key) throw() : m_menuBar(0)
-{}
-
-//-----------------------------------------------------------------------------
-
-WxMenuBarContainer::~WxMenuBarContainer() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuBarContainer::clean()
-{
-    SLM_ASSERT("Sorry, wxMenuBar not yet initialized, cleaning impossible", m_menuBar);
-    while( m_menuBar->GetMenuCount() )
-    {
-        wxMenu* menu = m_menuBar->Remove(0);
-        SLM_ASSERT("Menu must be empty", menu->GetMenuItemCount() == 0);
-        delete menu;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuBarContainer::destroyContainer()
-{
-    SLM_ASSERT("Sorry, wxMenuBar not yet initialized", m_menuBar);
-    OSLM_ASSERT("MenuBar container must be empty ( " << m_menuBar->GetMenuCount() << " menu(s)).", m_menuBar->GetMenuCount() == 0);
-    m_menuBar->Destroy();
-    m_menuBar = 0;
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuBarContainer::setWxMenuBar(wxMenuBar* menuBar)
-{
-    this->m_menuBar = menuBar;
-}
-
-//-----------------------------------------------------------------------------
-
-wxMenuBar* WxMenuBarContainer::getWxMenuBar()
-{
-    return this->m_menuBar;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace container
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuContainer.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuContainer.cpp
deleted file mode 100644
index c487b3a..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuContainer.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwGuiWx/container/WxMenuContainer.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-//-----------------------------------------------------------------------------
-
-WxMenuContainer::WxMenuContainer(::fwGui::GuiBaseObject::Key key) throw() : m_menu(0)
-{}
-
-//-----------------------------------------------------------------------------
-
-WxMenuContainer::~WxMenuContainer() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuContainer::clean()
-{
-    SLM_ASSERT("Sorry, wxMenu not yet initialized, cleaning impossible", m_menu);
-    while( m_menu->GetMenuItemCount() )
-    {
-        m_menu->Remove(0);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuContainer::destroyContainer()
-{
-    SLM_ASSERT("Sorry, wxMenu not yet initialized, cleaning impossible", m_menu);
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuContainer::setWxMenu(wxMenu* menu)
-{
-    this->m_menu = menu;
-}
-
-//-----------------------------------------------------------------------------
-
-wxMenu* WxMenuContainer::getWxMenu()
-{
-    return this->m_menu;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace container
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuItemContainer.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuItemContainer.cpp
deleted file mode 100644
index 3c3d9b7..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxMenuItemContainer.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwGuiWx/container/WxMenuItemContainer.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-//-----------------------------------------------------------------------------
-
-WxMenuItemContainer::WxMenuItemContainer(::fwGui::GuiBaseObject::Key key) throw() : m_menuItem(0)
-{}
-
-//-----------------------------------------------------------------------------
-
-WxMenuItemContainer::~WxMenuItemContainer() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuItemContainer::clean()
-{
-    SLM_ASSERT("Sorry, wxMenuItem not yet initialized, cleaning impossible", m_menuItem || m_toolBarToolBase);
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuItemContainer::destroyContainer()
-{
-    SLM_ASSERT("Sorry, wxMenuItem not yet initialized, cleaning impossible", m_menuItem || m_toolBarToolBase);
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuItemContainer::setWxMenuItem(wxMenuItem* menuItem)
-{
-    this->m_menuItem = menuItem;
-}
-
-//-----------------------------------------------------------------------------
-
-wxMenuItem* WxMenuItemContainer::getWxMenuItem()
-{
-    return this->m_menuItem;
-}
-
-//-----------------------------------------------------------------------------
-
-void WxMenuItemContainer::setWxToolItem(wxToolBarToolBase* menuItem)
-{
-    this->m_toolBarToolBase = menuItem;
-}
-
-//-----------------------------------------------------------------------------
-
-wxToolBarToolBase* WxMenuItemContainer::getWxToolItem()
-{
-    return this->m_toolBarToolBase;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace container
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxToolBarContainer.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxToolBarContainer.cpp
deleted file mode 100644
index 6a5bb54..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/container/WxToolBarContainer.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwGuiWx/container/WxToolBarContainer.hpp"
-
-namespace fwGuiWx
-{
-namespace container
-{
-
-//-----------------------------------------------------------------------------
-
-WxToolBarContainer::WxToolBarContainer(::fwGui::GuiBaseObject::Key key) throw() : m_toolBar(0)
-{}
-
-//-----------------------------------------------------------------------------
-
-WxToolBarContainer::~WxToolBarContainer() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void WxToolBarContainer::clean()
-{
-    SLM_ASSERT("Sorry, wxToolBar not yet initialized, cleaning impossible", m_toolBar);
-    m_toolBar->ClearTools();
-}
-
-//-----------------------------------------------------------------------------
-
-void WxToolBarContainer::destroyContainer()
-{
-    SLM_ASSERT("Sorry, wxToolBar not yet initialized, cleaning impossible", m_toolBar);
-    OSLM_ASSERT("ToolBar container must be empty ( " << m_toolBar->GetToolsCount() << " children).", m_toolBar->GetToolsCount() == 0);
-    m_toolBar->Destroy();
-    m_toolBar = 0;
-}
-
-//-----------------------------------------------------------------------------
-
-void WxToolBarContainer::setWxToolBar(wxToolBar* toolBar)
-{
-    this->m_toolBar = toolBar;
-}
-
-//-----------------------------------------------------------------------------
-
-wxToolBar* WxToolBarContainer::getWxToolBar()
-{
-    return this->m_toolBar;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace container
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/convert.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/convert.cpp
deleted file mode 100644
index 8da2284..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/convert.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2010.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-#include "fwGuiWx/convert.hpp"
-
-#ifdef __WXMAC__
-wxDEFINE_EVENT(wxEventFwOpen, wxCommandEvent);
-#endif
-
-namespace fwGuiWx
-{
-wxString std2wx( const std::string & value )
-{
-    return wxString( value.c_str() , wxConvUTF8 );
-}
-
-std::string wx2std( const wxString & value )
-{
-    return (const char*)value.mb_str(wxConvUTF8);
-}
-}
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/InputDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/InputDialog.cpp
deleted file mode 100644
index 2a3ea6c..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/InputDialog.cpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/intl.h>
-#include <wx/textdlg.h>
-
-#include <fwGui/registry/macros.hpp>
-#include <fwData/String.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/dialog/InputDialog.hpp"
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::InputDialog, ::fwGui::dialog::IInputDialog::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-InputDialog::InputDialog(::fwGui::GuiBaseObject::Key key) : m_input(""), m_title(""), m_message("")
-{}
-
-
-InputDialog::~InputDialog()
-{}
-
-void InputDialog::setTitle( const std::string &title )
-{
-    m_title = title;
-}
-
-void InputDialog::setMessage( const std::string &msg )
-{
-    m_message = msg;
-}
-void InputDialog::setInput(const std::string &text)
-{
-    m_input = text;
-}
-
-/// Get the input text in the input field
-std::string InputDialog::getInput()
-{
-    wxString title = ::fwGuiWx::std2wx(m_title);
-    wxString message = ::fwGuiWx::std2wx(m_message);
-    wxString inputText = ::fwGuiWx::std2wx(m_input);
-    ::fwData::String::sptr url = ::fwData::String::New();
-    wxString text =  wxGetTextFromUser( wxGetTranslation(message), wxGetTranslation(title), wxGetTranslation(inputText));
-    return (::fwGuiWx::wx2std(text));
-}
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/LocationDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/LocationDialog.cpp
deleted file mode 100644
index c586e32..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/LocationDialog.cpp
+++ /dev/null
@@ -1,177 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/dirdlg.h>
-
-#include <boost/filesystem/path.hpp>
-#include <boost/tokenizer.hpp>
-
-#include <fwGui/registry/macros.hpp>
-#include <fwData/location/SingleFile.hpp>
-#include <fwData/location/Folder.hpp>
-#include <fwData/location/MultiFiles.hpp>
-
-#include <fwGui/dialog/ILocationDialog.hpp>
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/dialog/LocationDialog.hpp"
-
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::LocationDialog, ::fwGui::dialog::ILocationDialog::REGISTRY_KEY );
-
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-//------------------------------------------------------------------------------
-
-LocationDialog::LocationDialog(::fwGui::GuiBaseObject::Key key) :
-        m_style(wxFD_DEFAULT_STYLE),
-        m_type(::fwGui::dialog::ILocationDialog::SINGLE_FILE)
-{}
-
-//------------------------------------------------------------------------------
-
-::fwData::location::ILocation::sptr LocationDialog::show()
-{
-    ::fwData::location::ILocation::sptr location;
-    const ::boost::filesystem::path defaultPath = this->getDefaultLocation();
-    wxString path = ::fwGuiWx::std2wx( defaultPath.parent_path().string() );
-    wxString title = ::fwGuiWx::std2wx(this->getTitle());
-
-    if (m_type == ::fwGui::dialog::ILocationDialog::SINGLE_FILE)
-    {
-        wxString file = wxFileSelector(
-                title,
-                path,
-                wxT(""),
-                wxT(""),
-                fileFilters(),
-                m_style,
-                wxTheApp->GetTopWindow() );
-
-        if( file.IsEmpty() == false )
-        {
-            ::boost::filesystem::path bpath( ::fwGuiWx::wx2std(file) );
-            location = ::fwData::location::SingleFile::New(bpath);
-        }
-    }
-    else if (m_type == ::fwGui::dialog::ILocationDialog::FOLDER)
-    {
-        wxString file = wxDirSelector(
-                title,
-                path,
-                m_style,
-                wxDefaultPosition,
-                wxTheApp->GetTopWindow() );
-
-        if( file.IsEmpty() == false )
-        {
-            ::boost::filesystem::path bpath( ::fwGuiWx::wx2std(file) );
-            location = ::fwData::location::Folder::New(bpath);
-        }
-    }
-    else if (m_type == ::fwGui::dialog::ILocationDialog::MULTI_FILES)
-    {
-        wxFileDialog *fileDialog = new wxFileDialog(wxTheApp->GetTopWindow(),
-                title,
-                path,
-                "",
-                fileFilters(),
-                m_style | wxFD_MULTIPLE);
-
-        if (fileDialog->ShowModal() != wxID_CANCEL)
-        {
-            wxArrayString paths;
-            fileDialog->GetPaths(paths);
-            std::vector < ::boost::filesystem::path > vPaths;
-            for (unsigned int i=0 ; i< paths.GetCount() ; i++)
-            {
-                ::boost::filesystem::path bpath( ::fwGuiWx::wx2std(paths[i]) );
-                vPaths.push_back(bpath);
-            }
-            ::fwData::location::MultiFiles::sptr multiFiles = ::fwData::location::MultiFiles::New();
-            multiFiles->setPaths(vPaths);
-            location = multiFiles;
-        }
-    }
-    return location;
-}
-
-//------------------------------------------------------------------------------
-
-::fwGui::dialog::ILocationDialog&  LocationDialog::setOption( ::fwGui::dialog::ILocationDialog::Options option)
-{
-    if ( option == ::fwGui::dialog::ILocationDialog::WRITE )
-    {
-        m_style &= ~wxFD_OPEN ;
-        m_style |= wxFD_SAVE ;
-    }
-    else if ( option == ::fwGui::dialog::ILocationDialog::READ )
-    {
-        m_style &= ~wxFD_SAVE ;
-        m_style |= wxFD_OPEN ;
-    }
-    else if ( option == ::fwGui::dialog::ILocationDialog::FILE_MUST_EXIST )
-    {
-        m_style |= wxFD_FILE_MUST_EXIST ;
-    }
-
-return *this;
-}
-
-//------------------------------------------------------------------------------
-
-void LocationDialog::setType( ::fwGui::dialog::ILocationDialog::Types type )
-{
-    m_type = type;
-}
-
-//------------------------------------------------------------------------------
-
-// exemple ( addFilter("images","*.png *.jpg");
-void LocationDialog::addFilter(const std::string &filterName, const std::string &wildcardList )
-{
-    m_filters.insert( std::make_pair( filterName, wildcardList ));
-}
-
-//------------------------------------------------------------------------------
-
-// "BMP and GIF files (*.bmp;*.gif)|*.bmp;*.gif|PNG files (*.png)|*.png"
-wxString LocationDialog::fileFilters()
-{
-    std::string result;
-    std::multimap< std::string, std::string >::const_iterator iter;
-    for ( iter = m_filters.begin(); iter!= m_filters.end(); ++iter)
-    {
-        std::string filterName = iter->first;
-        std::string rawWildcards = iter->second;
-        // set rawWildcards in correct format
-        std::string wildcards;
-        typedef ::boost::tokenizer< boost::char_separator<char> > Tokenizer;
-        Tokenizer tok(rawWildcards, boost::char_separator<char>(" "));
-        for( Tokenizer::iterator beg=tok.begin(); beg!=tok.end();++beg)
-        {
-             if  (beg!=tok.begin())
-             {
-                 wildcards += ";";
-             }
-             wildcards += *beg;
-        }
-
-        if (iter!=m_filters.begin() )
-        {
-            result += "|";
-        }
-        result += filterName +" (" +  wildcards +")|" + wildcards;
-    }
-    return ::fwGuiWx::std2wx(result);
-}
-
-} // namespace dialog
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/MessageDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/MessageDialog.cpp
deleted file mode 100644
index b58576a..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/MessageDialog.cpp
+++ /dev/null
@@ -1,122 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/msgdlg.h>
-
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-#include "fwGuiWx/dialog/MessageDialog.hpp"
-
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::MessageDialog, ::fwGui::dialog::IMessageDialog::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-
-MessageDialog::MessageDialog(::fwGui::GuiBaseObject::Key key) : m_title(""), m_message(""), m_buttons(0)
-{}
-
-
-MessageDialog::~MessageDialog()
-{}
-
-void MessageDialog::setTitle( const std::string &title )
-{
-    m_title = title;
-}
-
-void MessageDialog::setMessage( const std::string &msg )
-{
-    m_message = msg;
-}
-
-void MessageDialog::setIcon( ::fwGui::dialog::IMessageDialog::Icons icon )
-{
-    if (icon == IMessageDialog::CRITICAL)
-    {
-        m_icon = wxICON_ERROR;
-    }
-    else if (icon == IMessageDialog::WARNING)
-    {
-        m_icon = wxICON_EXCLAMATION;
-    }
-    else if (icon == IMessageDialog::INFO)
-    {
-        m_icon = wxICON_INFORMATION;
-    }
-    else if (icon == IMessageDialog::QUESTION)
-    {
-        m_icon = wxICON_QUESTION;
-    }
-}
-
-void MessageDialog::addButton( ::fwGui::dialog::IMessageDialog::Buttons button )
-{
-    if (button == IMessageDialog::OK)
-    {
-        m_buttons |= wxOK;
-    }
-    else if (button == IMessageDialog::CANCEL)
-    {
-        m_buttons |= wxCANCEL;
-    }
-    else if (button == IMessageDialog::YES_NO)
-    {
-        m_buttons |= wxYES_NO;
-    }
-}
-
-void MessageDialog::setDefaultButton( ::fwGui::dialog::IMessageDialog::Buttons button )
-{
-    if (button == IMessageDialog::OK)
-    {
-        m_buttons |= wxOK_DEFAULT;
-    }
-    else if (button == IMessageDialog::CANCEL)
-    {
-        m_buttons |= wxCANCEL_DEFAULT;
-    }
-    else if (button == IMessageDialog::YES)
-    {
-        m_buttons |= wxYES_DEFAULT;
-    }
-    else if (button == IMessageDialog::NO)
-    {
-        m_buttons |= wxNO_DEFAULT;
-    }
-}
-
-::fwGui::dialog::IMessageDialog::Buttons MessageDialog::show()
-{
-    ::fwGui::dialog::IMessageDialog::Buttons result;
-    int wxResult = wxMessageBox( ::fwGuiWx::std2wx(m_message), ::fwGuiWx::std2wx(m_title), m_buttons|m_icon );
-
-    if (wxResult == wxOK)
-    {
-        result = ::fwGui::dialog::IMessageDialog::OK;
-    }
-    else if (wxResult == wxYES)
-    {
-        result = ::fwGui::dialog::IMessageDialog::YES;
-    }
-    else if (wxResult == wxNO)
-    {
-        result = ::fwGui::dialog::IMessageDialog::NO;
-    }
-    else if (wxResult == wxCANCEL)
-    {
-        result = ::fwGui::dialog::IMessageDialog::CANCEL;
-    }
-    return result;
-}
-} // namespace dialog
-} // namespace fwGuiWx
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/MultiSelectorDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/MultiSelectorDialog.cpp
deleted file mode 100644
index bf8d90d..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/MultiSelectorDialog.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/checklst.h>
-#include <wx/window.h>
-#include <wx/dialog.h>
-#include <wx/choice.h>
-#include <wx/arrstr.h>
-#include <wx/sizer.h>
-#include <wx/stattext.h>
-#include <wx/button.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/dialog/MultiSelectorDialog.hpp"
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::MultiSelectorDialog, ::fwGui::dialog::IMultiSelectorDialog::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-
-//------------------------------------------------------------------------------
-
-MultiSelectorDialog::MultiSelectorDialog(::fwGui::GuiBaseObject::Key key) : m_title(""), m_message("")
-{}
-
-//------------------------------------------------------------------------------
-
-MultiSelectorDialog::~MultiSelectorDialog()
-{}
-
-//------------------------------------------------------------------------------
-
-void MultiSelectorDialog::setSelections(Selections _selections)
-{
-    this->m_selections = _selections;
-}
-
-//------------------------------------------------------------------------------
-
-void MultiSelectorDialog::setTitle(std::string _title)
-{
-    this->m_title = _title;
-}
-
-//------------------------------------------------------------------------------
-
-::fwGui::dialog::IMultiSelectorDialog::Selections MultiSelectorDialog::show()
-{
-    wxDialog* dialog = new wxDialog( wxTheApp->GetTopWindow(), wxNewId(), ::fwGuiWx::std2wx(this->m_title),
-            wxDefaultPosition, wxDefaultSize,
-            wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX );
-
-    wxArrayString items;
-    BOOST_FOREACH( Selections::value_type selection, m_selections)
-    {
-        items.Add( ::fwGuiWx::std2wx(selection.first) );
-    }
-
-    wxCheckListBox* typeCtrl = new wxCheckListBox(dialog, wxNewId(), wxDefaultPosition, wxDefaultSize, items) ;
-    typeCtrl->SetSelection(0);
-
-    int item=0;
-    BOOST_FOREACH( Selections::value_type selection, m_selections)
-    {
-        typeCtrl->Check( item, selection.second  );
-        item++;
-    }
-
-    // Creates the default buttons.
-    wxSizer  * defaultButtonSizer = new wxBoxSizer( wxHORIZONTAL );
-    wxButton * okButton = new wxButton( dialog, wxID_OK, wxGetTranslation("OK") );
-    wxButton * cancelButton = new wxButton( dialog, wxID_CANCEL, wxGetTranslation("Cancel") );
-
-    okButton->SetDefault();
-    defaultButtonSizer->Add( okButton, 0, 0 );
-    defaultButtonSizer->Add( 5, 5 );
-    defaultButtonSizer->Add( cancelButton, 0, 0 );
-
-    // Creates the root sizer.
-    wxSizer * rootSizer = new wxBoxSizer( wxVERTICAL );
-    if(!m_message.empty())
-    {
-        wxStaticText* msgText = new wxStaticText(dialog, wxNewId(), ::fwGuiWx::std2wx(m_message));
-        rootSizer->Add( msgText, 0, wxGROW|wxALL, 10 );
-    }
-    rootSizer->Add( typeCtrl, 1, wxALL|wxEXPAND, 10 );
-    rootSizer->Add( defaultButtonSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10 );
-    dialog->SetSizerAndFit( rootSizer );
-
-
-    int choice = dialog->ShowModal();
-    Selections selections;
-    if( choice == wxID_OK )
-    {
-        int item=0;
-        BOOST_FOREACH( Selections::value_type selection, m_selections)
-        {
-            selections[selection.first] = typeCtrl->IsChecked(item);
-            item++;
-         }
-    }
-    dialog->Destroy();
-    return selections;
-}
-
-//------------------------------------------------------------------------------
-
-void MultiSelectorDialog::setMessage(const std::string &msg)
-{
-    m_message = msg;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/ProgressDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/ProgressDialog.cpp
deleted file mode 100644
index 190072b..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/ProgressDialog.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-#include <fwGuiWx/widgets/fwProgressDialog.hpp>
-
-#include "fwGuiWx/dialog/ProgressDialog.hpp"
-
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::ProgressDialog, ::fwGui::dialog::IProgressDialog::REGISTRY_KEY );
-
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-//------------------------------------------------------------------------------
-
-ProgressDialog::ProgressDialog(::fwGui::GuiBaseObject::Key key, const std::string &title, const std::string &message)
-{
-    fwProgressDialog *wxpd = new fwProgressDialog(
-                                    ::fwGuiWx::std2wx(title),
-                                    ::fwGuiWx::std2wx(message),
-                                    100 /*percent*/,
-                                    NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL //| wxPD_REMAINING_TIME
-                            );
-    m_pdialog = ::boost::shared_ptr<fwProgressDialog>(wxpd);
-    m_pdialog->Show();
-    m_pdialog->Update();
-}
-
-//------------------------------------------------------------------------------
-
-ProgressDialog::~ProgressDialog()
-{
-    // auto clean dialog
-}
-
-//------------------------------------------------------------------------------
-
-void ProgressDialog::operator()(float percent,std::string msg)
-{
-    SLM_ASSERT("m_pdialog not instanced", m_pdialog);
-    int value = (int)(percent*100);
-    OSLM_TRACE( "ProgressDialog msg" << msg << " : " << value <<"%");
-    m_pdialog->Show(true); // can be hidden if previous load as finished
-    m_pdialog->Update(value, ::fwGuiWx::std2wx(msg) );
-}
-
-//------------------------------------------------------------------------------
-
-void ProgressDialog::setTitle(const std::string &title)
-{
-    m_pdialog->SetTitle(::fwGuiWx::std2wx(title));
-}
-
-//------------------------------------------------------------------------------
-
-void ProgressDialog::setMessage(const std::string &msg)
-{
-    m_pdialog->UpdateMessage( ::fwGuiWx::std2wx(msg) );
-}
-
-
-} // namespace dialog
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/PulseProgressDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/PulseProgressDialog.cpp
deleted file mode 100644
index ba87831..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/PulseProgressDialog.cpp
+++ /dev/null
@@ -1,201 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/log.h>
-#include <wx/progdlg.h>
-#include <wx/utils.h>
-#include <wx/evtloop.h>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-#include <fwGuiWx/widgets/fwProgressDialog.hpp>
-
-#include "fwGuiWx/dialog/PulseProgressDialog.hpp"
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::PulseProgressDialog, ::fwGui::dialog::IPulseProgressDialog::REGISTRY_KEY );
-
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-//------------------------------------------------------------------------------
-
-wxDEFINE_EVENT(wxEVT_LOCALTHREAD_COMPLETED, wxThreadEvent);
-
-//------------------------------------------------------------------------------
-
-
-PulseProgressDialog::LocalThread::LocalThread( Stuff &stuff)
-:   wxThread(wxTHREAD_JOINABLE),
-    m_stuff(stuff),
-    m_isFinished(false),
-    m_errorMessage()
-{}
-
-//------------------------------------------------------------------------------
-
-bool PulseProgressDialog::LocalThread::isFinished() const
-{
-    return m_isFinished;
-}
-
-//------------------------------------------------------------------------------
-
-std::string PulseProgressDialog::LocalThread::getErrorMessage() const
-{
-    return m_errorMessage;
-}
-
-//------------------------------------------------------------------------------
-
-PulseProgressDialog::LocalThread::~LocalThread()
-{}
-
-//------------------------------------------------------------------------------
-
-wxThread::ExitCode PulseProgressDialog::LocalThread::Entry()
-{
-        try
-        {
-            m_stuff();
-        }
-        catch ( std::exception &e)
-        {
-            m_errorMessage = e.what();
-        }
-        m_isFinished=true;
-        // TODO meilleur arret
-        // Don't Poll a wxThread
-        // A common problem users experience with wxThread is that in their main thread they will check the thread every now
-        //and then to see if it has ended through IsRunning(), only to find that their application has run into problems because
-        //the thread is using the default behavior (i.e. it's detached) and has already deleted itself. Naturally, they instead
-        // attempt to use joinable threads in place of the previous behavior. However, polling a wxThread for when it has ended is
-        // in general a bad idea - in fact calling a routine on any running wxThread should be avoided if possible. Instead, find a
-        // way to notify yourself when the thread has ended.
-        // wxQueueEvent(m_client, new wxThreadEvent(wxEVT_LOCALTHREAD_COMPLETED)); avec m_client un addr sur PulseProgressDialog qui a lanc� le thread
-        OSLM_TRACE("UUU PulseProgressDialog::LocalThread::Entry() FINI !!!!");
-
-    return (wxThread::ExitCode)0;     // success
-}
-
-
-//------------------------------------------------------------------------------
-
-PulseProgressDialog::PulseProgressDialog(::fwGui::GuiBaseObject::Key key)
-{
-    m_wxpd = NULL;
-}
-
-//------------------------------------------------------------------------------
-
-PulseProgressDialog::~PulseProgressDialog()
-{
-    if ( m_thread )
-    {
-        if (m_thread->Delete() != wxTHREAD_NO_ERROR )
-            wxLogError("Can't delete the thread!");
-        // Delete attend le destruction de m_thread
-        m_thread = NULL;
-    }
-    if (m_wxpd)
-    {
-        m_wxpd->Destroy();
-        m_wxpd = NULL;
-    }
-
-}
-
-//------------------------------------------------------------------------------
-
-void PulseProgressDialog::setTitle(const std::string &title)
-{
-    m_title = title;
-}
-
-//------------------------------------------------------------------------------
-
-void PulseProgressDialog::setMessage(const std::string &msg)
-{
-    m_message = msg;
-}
-
-//------------------------------------------------------------------------------
-
-void PulseProgressDialog::show()
-{
-#ifdef PULSEPROGRESS_USE_THREAD
-
-    this->Bind( wxEVT_LOCALTHREAD_COMPLETED , &PulseProgressDialog::onComplete , this);
-
-    m_wxpd = new wxProgressDialog(
-                                    ::fwGuiWx::std2wx(m_title),
-                                    "                                             ", // sinon pas de place pour ecrire definit espace initial
-                                    100 /*percent*/,
-                                    NULL, wxPD_AUTO_HIDE | wxPD_APP_MODAL | wxPD_SMOOTH);
-
-    m_wxpd->Pulse( m_message );
-    m_wxpd->Fit();
-    m_wxpd->Show();
-    m_wxpd->Update();
-    m_thread = new LocalThread( m_stuff);
-
-    if ( m_thread->Create() != wxTHREAD_NO_ERROR )
-    {
-        wxLogError("Can't create the thread!");
-        delete m_thread;
-        m_thread = NULL;
-    }
-    else
-    {
-        if (m_thread->Run() != wxTHREAD_NO_ERROR )
-        {
-            wxLogError("Can't create the thread!");
-            delete m_thread;
-            m_thread = NULL;
-        }
-    }
-
-    int i=0;
-
-    while( m_thread->isFinished()== false ) // moins couteux que wxThread::isRunning
-    {
-        OSLM_TRACE("PulseProgressDialog  in Loop m_thread->isRunning" << m_thread->IsRunning() << " " << ++i );
-        m_wxpd->Pulse();
-        m_wxpd->Update();
-        wxYield();
-        wxMilliSleep(m_frequence);
-    }
-    OSLM_TRACE("PulseProgressDialog AFTER Loop m_thread->isRunning " << m_thread->IsRunning() << " " << ++i );
-
-    if ( m_thread->getErrorMessage().size() )
-    {
-        m_wxpd->Update(100,"Failed !!!");
-
-        OSLM_WARN( "PulseProgressDialog::m_stuff an exception has occured " << m_thread->getErrorMessage() );
-        throw ::fwTools::Failed( m_thread->getErrorMessage() );
-    }
-    m_wxpd->Update(100,"Done");
-#else
-    m_thread = NULL;
-    m_stuff();
-#endif
-}
-
-//------------------------------------------------------------------------------
-
-void PulseProgressDialog::onComplete( wxThreadEvent &event )
-{
-    // TODO faire un arret plus propre
-    SLM_TRACE_FUNC();
-
-}
-
-} // namespace dialog
-} // namespace fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/SelectorDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/SelectorDialog.cpp
deleted file mode 100644
index 26aa0ce..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/dialog/SelectorDialog.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/window.h>
-#include <wx/dialog.h>
-#include <wx/choice.h>
-#include <wx/arrstr.h>
-#include <wx/sizer.h>
-#include <wx/stattext.h>
-#include <wx/button.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/dialog/SelectorDialog.hpp"
-
-fwGuiRegisterMacro( ::fwGuiWx::dialog::SelectorDialog, ::fwGui::dialog::ISelectorDialog::REGISTRY_KEY );
-
-namespace fwGuiWx
-{
-namespace dialog
-{
-
-//------------------------------------------------------------------------------
-
-SelectorDialog::SelectorDialog(::fwGui::GuiBaseObject::Key key) : m_title(""), m_message("")
-{}
-
-//------------------------------------------------------------------------------
-
-SelectorDialog::~SelectorDialog()
-{}
-
-//------------------------------------------------------------------------------
-
-void SelectorDialog::setSelections(std::vector< std::string > _selections)
-{
-    this->m_selections = _selections;
-}
-
-//------------------------------------------------------------------------------
-
-void SelectorDialog::setTitle(std::string _title)
-{
-    this->m_title = _title;
-}
-
-//------------------------------------------------------------------------------
-
-std::string SelectorDialog::show()
-{
-    wxDialog* dialog = new wxDialog( wxTheApp->GetTopWindow(), wxNewId(), ::fwGuiWx::std2wx(this->m_title),
-            wxDefaultPosition, wxDefaultSize,
-            wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxMAXIMIZE_BOX );
-
-    wxArrayString items;
-    BOOST_FOREACH( std::string selection, m_selections)
-    {
-        items.Add( ::fwGuiWx::std2wx(selection) );
-    }
-
-    // Creates the static fields.
-    wxChoice* typeCtrl = new wxChoice(dialog, wxNewId(), wxDefaultPosition, wxDefaultSize, items) ;
-    typeCtrl->SetSelection(0);
-
-
-    // Creates the default buttons.
-    wxSizer  * defaultButtonSizer = new wxBoxSizer( wxHORIZONTAL );
-    wxButton * okButton = new wxButton( dialog, wxID_OK, wxGetTranslation("OK") );
-    wxButton * cancelButton = new wxButton( dialog, wxID_CANCEL, wxGetTranslation("Cancel") );
-
-    okButton->SetDefault();
-    defaultButtonSizer->Add( okButton, 0, 0 );
-    defaultButtonSizer->Add( 5, 5 );
-    defaultButtonSizer->Add( cancelButton, 0, 0 );
-
-    // Creates the root sizer.
-    wxSizer * rootSizer = new wxBoxSizer( wxVERTICAL );
-    if(!m_message.empty())
-    {
-        wxStaticText* msgText = new wxStaticText(dialog, wxNewId(), ::fwGuiWx::std2wx(m_message));
-        rootSizer->Add( msgText, 0, wxGROW|wxALL, 10 );
-    }
-    rootSizer->Add( typeCtrl, 0, wxGROW|wxALL, 10 );
-    rootSizer->Add( defaultButtonSizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 10 );
-    dialog->SetSizerAndFit( rootSizer );
-
-
-    int choice = dialog->ShowModal();
-    std::string selection = "";
-    if( choice == wxID_OK )
-    {
-        selection = typeCtrl->GetStringSelection();
-    }
-    dialog->Destroy();
-    return selection;
-}
-
-//------------------------------------------------------------------------------
-
-void SelectorDialog::setMessage(const std::string &msg)
-{
-    m_message = msg;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace dialog
-} // namespace fwGuiWx
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/CardinalLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/CardinalLayoutManager.cpp
deleted file mode 100644
index 68e4eee..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/CardinalLayoutManager.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/panel.h>
-#include <wx/sizer.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/layoutManager/CardinalLayoutManager.hpp"
-
-
-fwGuiRegisterMacro( ::fwGui::CardinalLayoutManager, ::fwGui::layoutManager::CardinalLayoutManagerBase::REGISTRY_KEY );
-
-
-namespace fwGui
-{
-
-//-----------------------------------------------------------------------------
-
-CardinalLayoutManager::CardinalLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-CardinalLayoutManager::~CardinalLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void CardinalLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr parent )
-{
-    SLM_TRACE_FUNC();
-    m_parentContainer = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwContainer to WxContainer failed", m_parentContainer);
-
-    wxWindow* wxContainer = m_parentContainer->getWxContainer();
-
-    // Set no flags on wxAuiManager constructor to disable m_hint_wind internal frame construction
-    // this frame is not correctly destroyed
-    m_manager = new wxAuiManager(  wxContainer, 0 /* no flag */);
-    std::list< ViewInfo> views = this->getViewsInfo();
-
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
-    {
-        wxPanel * viewPanel = new wxPanel(  wxContainer, wxNewId() , wxDefaultPosition, wxDefaultSize, wxNO_BORDER | wxTAB_TRAVERSAL );
-        ::fwGuiWx::container::WxContainer::sptr subContainer = ::fwGuiWx::container::WxContainer::New();
-        subContainer->setWxContainer(viewPanel);
-        m_subViews.push_back(subContainer);
-
-        // Pane info configuration
-        ::wxAuiPaneInfo paneInfo;
-        if(viewInfo.m_align==CENTER)        { paneInfo.Center(); }
-        else if(viewInfo.m_align==RIGHT)    { paneInfo.Right(); }
-        else if(viewInfo.m_align==LEFT)     { paneInfo.Left(); }
-        else if(viewInfo.m_align==BOTTOM)   { paneInfo.Bottom();}
-        else if(viewInfo.m_align==TOP)      { paneInfo.Top(); }
-
-        if(!viewInfo.m_isResizable)
-        {
-            paneInfo.Fixed();
-        }
-        paneInfo.CloseButton( false );
-        paneInfo.Floatable( false );
-        paneInfo.MaximizeButton( true );
-        if(viewInfo.m_caption.first)
-        {
-            paneInfo.CaptionVisible( true );
-            paneInfo.Caption( ::fwGuiWx::std2wx(viewInfo.m_caption.second) );
-        }
-        else
-        {
-            paneInfo.CaptionVisible( false );
-        }
-        paneInfo.PaneBorder( false );
-        paneInfo.MinSize( wxSize( viewInfo.m_minSize.first, viewInfo.m_minSize.second ) );
-        paneInfo.Position(viewInfo.m_position);
-        paneInfo.Layer(viewInfo.m_layer);
-        paneInfo.Row(viewInfo.m_row);
-        paneInfo.Show(viewInfo.m_visible);
-        m_manager->AddPane( viewPanel, paneInfo);
-    }
-    m_manager->Update();
-}
-
-//-----------------------------------------------------------------------------
-
-void CardinalLayoutManager::destroyLayout()
-{
-    m_manager->UnInit() ;
-    this->destroySubViews();
-    delete m_manager;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/FrameLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/FrameLayoutManager.cpp
deleted file mode 100644
index 25e358b..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/FrameLayoutManager.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/evtloop.h>
-#include <wx/image.h>
-
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include <fwServices/registry/ObjectService.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/layoutManager/FrameLayoutManager.hpp"
-
-
-fwGuiRegisterMacro( ::fwGui::FrameLayoutManager, ::fwGui::layoutManager::IFrameLayoutManager::REGISTRY_KEY );
-
-
-namespace fwGui
-{
-
-//-----------------------------------------------------------------------------
-
-const std::map< ::fwGui::layoutManager::IFrameLayoutManager::Style, long> FrameLayoutManager::FWSTYLE_TO_WXSTYLE =
-        ::boost::assign::map_list_of(::fwGui::layoutManager::IFrameLayoutManager::DEFAULT,wxDEFAULT_FRAME_STYLE)
-                                    (::fwGui::layoutManager::IFrameLayoutManager::STAY_ON_TOP, wxDEFAULT_FRAME_STYLE | wxSTAY_ON_TOP);
-
-//-----------------------------------------------------------------------------
-
-FrameLayoutManager::FrameLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-FrameLayoutManager::~FrameLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void FrameLayoutManager::createFrame()
-{
-    SLM_TRACE_FUNC();
-    FrameInfo frameInfo = this->getFrameInfo();
-
-    wxEventLoopBase* eventLoop = wxEventLoop::GetActive();
-    if (!eventLoop)
-    {
-        wxEventLoop::SetActive(new wxEventLoop() );
-    }
-    // wxWidget initialization
-    wxInitAllImageHandlers();
-
-    m_wxFrame = new wxFrame(wxTheApp->GetTopWindow(),
-            wxNewId(),
-            ::fwGuiWx::std2wx(frameInfo.m_name),
-             wxDefaultPosition,
-             wxSize(frameInfo.m_minSize.first, frameInfo.m_minSize.second),
-             FWSTYLE_TO_WXSTYLE.find(frameInfo.m_style)->second );
-
-    if(!wxTheApp->GetTopWindow())
-    {
-        wxTheApp->SetTopWindow( m_wxFrame ) ;
-    }
-    m_wxFrame->SetMinSize(wxSize(frameInfo.m_minSize.first, frameInfo.m_minSize.second));
-
-    if(!frameInfo.m_iconPath.empty())
-    {
-        wxIcon icon( ::fwGuiWx::std2wx(frameInfo.m_iconPath.string()), wxBITMAP_TYPE_ICO );
-        OSLM_ASSERT("Sorry, unable to create an icon instance from " << frameInfo.m_iconPath.string(), icon.Ok());
-        m_wxFrame->SetIcon( icon );
-    }
-    m_wxFrame->Move( wxPoint(frameInfo.m_position.first, frameInfo.m_position.second) );
-    m_wxFrame->SetSize( wxSize( frameInfo.m_size.first, frameInfo.m_size.second) );
-    this->setState(frameInfo.m_state);
-
-    m_wxFrame->Bind( wxEVT_CLOSE_WINDOW, &FrameLayoutManager::onCloseFrame, this,  m_wxFrame->GetId());
-    m_wxFrame->Show();
-    m_wxFrame->Refresh();
-
-    ::fwGuiWx::container::WxContainer::sptr frameContainer = ::fwGuiWx::container::WxContainer::New();
-    frameContainer->setWxContainer(m_wxFrame);
-    m_frame = frameContainer;
-
-
-    wxPanel *panel = new wxPanel(m_wxFrame, wxNewId());
-    wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
-    m_wxFrame->SetSizer(boxSizer);
-    boxSizer->Add(panel, 1, wxALL|wxEXPAND);
-    m_wxFrame->Layout();
-
-    ::fwGuiWx::container::WxContainer::sptr container = ::fwGuiWx::container::WxContainer::New();
-    container->setWxContainer(panel);
-    m_container = container;
-}
-
-//-----------------------------------------------------------------------------
-
-void FrameLayoutManager::destroyFrame()
-{
-    this->getRefFrameInfo().m_state = this->getState();
-    this->getRefFrameInfo().m_size.first = m_wxFrame->GetSize().GetWidth();
-    this->getRefFrameInfo().m_size.second = m_wxFrame->GetSize().GetHeight();
-    this->getRefFrameInfo().m_position.first = m_wxFrame->GetPosition().x;
-    this->getRefFrameInfo().m_position.second = m_wxFrame->GetPosition().y;
-    this->writeConfig();
-
-    m_wxFrame->Show(false);
-    m_wxFrame->Unbind( wxEVT_CLOSE_WINDOW, &FrameLayoutManager::onCloseFrame, this,  m_wxFrame->GetId());
-
-    if ( wxTheApp->GetTopWindow() != m_wxFrame )
-    {
-        m_wxFrame->Reparent(NULL);
-    }
-
-    m_container->destroyContainer();
-    m_frame->clean();
-    m_frame->destroyContainer();
-
-    m_frame.reset();
-}
-
-//-----------------------------------------------------------------------------
-
-void FrameLayoutManager::onCloseFrame(wxCloseEvent& event)
-{
-    SLM_TRACE_FUNC();
-    this->m_closeCallback();
-}
-
-//-----------------------------------------------------------------------------
-
-void FrameLayoutManager::setState( FrameState state )
-{
-    // Updates the window state.
-    switch( state )
-    {
-    case ICONIZED:
-        m_wxFrame->Iconize();
-        break;
-
-    case MAXIMIZED:
-        m_wxFrame->Maximize();
-        break;
-
-    case FULL_SCREEN:
-        m_wxFrame->ShowFullScreen( true );
-        break;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-::fwGui::layoutManager::IFrameLayoutManager::FrameState FrameLayoutManager::getState()
-{
-    FrameState state( UNKNOWN );
-
-    if( m_wxFrame->IsIconized() )
-    {
-        state = ICONIZED;
-    }
-    else if( m_wxFrame->IsMaximized() )
-    {
-        state = MAXIMIZED;
-    }
-    else if( m_wxFrame->IsFullScreen() )
-    {
-        state = FULL_SCREEN;
-    }
-    return state;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/LineLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/LineLayoutManager.cpp
deleted file mode 100644
index b6038e6..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/LineLayoutManager.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/panel.h>
-#include <wx/sizer.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/layoutManager/LineLayoutManager.hpp"
-
-
-fwGuiRegisterMacro( ::fwGui::LineLayoutManager, ::fwGui::layoutManager::LineLayoutManagerBase::REGISTRY_KEY );
-
-
-namespace fwGui
-{
-
-//-----------------------------------------------------------------------------
-
-LineLayoutManager::LineLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-LineLayoutManager::~LineLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void LineLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr parent )
-{
-    SLM_TRACE_FUNC();
-    m_parentContainer = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwContainer to WxContainer failed", m_parentContainer);
-
-    wxWindow* wxContainer = m_parentContainer->getWxContainer();
-    Orientation orientation = this->getOrientation();
-    int wxOrientation = ( (orientation==VERTICAL) ? wxVERTICAL : wxHORIZONTAL);
-    wxBoxSizer* boxSizer = new wxBoxSizer( wxOrientation );
-
-    wxContainer->SetSizer( boxSizer );
-
-    std::list< ViewInfo> views = this->getViewsInfo();
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
-    {
-        if(viewInfo.m_isSpacer)
-        {
-            boxSizer->Add( 0, 0, 1, wxEXPAND );
-        }
-        else
-        {
-            wxPanel * viewPanel = new wxPanel(  wxContainer, wxNewId() , wxDefaultPosition, wxSize( viewInfo.m_minSize.first, viewInfo.m_minSize.second ), wxNO_BORDER | wxTAB_TRAVERSAL );
-            ::fwGuiWx::container::WxContainer::sptr subContainer = ::fwGuiWx::container::WxContainer::New();
-            subContainer->setWxContainer(viewPanel);
-            m_subViews.push_back(subContainer);
-#ifndef __MACOSX__
-            if(viewInfo.m_caption.first)
-            {
-                wxStaticBoxSizer* sizer = new wxStaticBoxSizer( wxOrientation, wxContainer, ::fwGuiWx::std2wx(viewInfo.m_caption.second));
-                sizer->Add( viewPanel, 1, wxALL|wxEXPAND, viewInfo.m_border);
-                boxSizer->Add(sizer, viewInfo.m_proportion, wxALL|wxEXPAND);
-            }
-            else
-            {
-                boxSizer->Add( viewPanel, viewInfo.m_proportion, wxALL|wxEXPAND, viewInfo.m_border);
-            }
-#else
-            boxSizer->Add( viewPanel, viewInfo.m_proportion, wxALL|wxEXPAND, viewInfo.m_border);
-#endif
-            subContainer->setVisible( viewInfo.m_visible );
-        }
-    }
-
-    wxContainer->Layout();
-}
-
-//-----------------------------------------------------------------------------
-
-void LineLayoutManager::destroyLayout()
-{
-    this->destroySubViews();
-    SLM_ASSERT("Parent container is not available.", m_parentContainer);
-    wxWindow* wxContainer = m_parentContainer->getWxContainer();
-    wxContainer->SetSizer(NULL);
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/MenuBarLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/MenuBarLayoutManager.cpp
deleted file mode 100644
index f09480f..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/MenuBarLayoutManager.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/menu.h>
-#include <boost/foreach.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/container/WxMenuContainer.hpp"
-#include "fwGuiWx/layoutManager/MenuBarLayoutManager.hpp"
-
-
-fwGuiRegisterMacro(::fwGui::layoutManager::MenuBarLayoutManager, ::fwGui::layoutManager::IMenuBarLayoutManager::REGISTRY_KEY );
-
-namespace fwGui
-{
-namespace layoutManager
-{
-
-//-----------------------------------------------------------------------------
-
-MenuBarLayoutManager::MenuBarLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-MenuBarLayoutManager::~MenuBarLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MenuBarLayoutManager::createLayout( ::fwGui::container::fwMenuBar::sptr parent )
-{
-    SLM_TRACE_FUNC();
-
-    m_parent = ::fwGuiWx::container::WxMenuBarContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwMenuBar to WxMenuBarContainer failed", m_parent);
-
-    wxMenuBar* menuBar = m_parent->getWxMenuBar();
-
-    BOOST_FOREACH ( std::string name, m_menuNames)
-    {
-        ::fwGuiWx::container::WxMenuContainer::sptr menu = ::fwGuiWx::container::WxMenuContainer::New();
-        wxMenu *menuWx = new wxMenu();
-        menu->setWxMenu(menuWx);
-        menuBar->Append( menuWx , ::fwGuiWx::std2wx( name ));
-        m_menus.push_back(menu);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MenuBarLayoutManager::destroyLayout()
-{
-    this->destroyMenus();
-    m_parent->clean();
-    m_menus.clear();
-}
-
-//-----------------------------------------------------------------------------
-
-
-void MenuBarLayoutManager::menuIsVisible(::fwGui::container::fwMenu::sptr fwMenu, bool isVisible)
-{
-    SLM_FATAL("TODO : MenuBarLayoutManager::menuIsVisible not yet implemented.");
-}
-
-//-----------------------------------------------------------------------------
-
-void MenuBarLayoutManager::menuIsEnabled(::fwGui::container::fwMenu::sptr fwMenu, bool isEnabled)
-{
-    wxMenuBar* menuBar = m_parent->getWxMenuBar();
-    std::string name = m_menuNames[this->getMenuPosition(fwMenu)];
-    int index = menuBar->FindMenu(::fwGuiWx::std2wx(name));
-    SLM_ASSERT("Menu " << name << " not found", index != wxNOT_FOUND);
-    menuBar->EnableTop(index, isEnabled);
-}
-
-//-----------------------------------------------------------------------------
-
-int MenuBarLayoutManager::getMenuPosition(::fwGui::container::fwMenu::sptr fwMenu)
-{
-    int index = 0;
-    BOOST_FOREACH(::fwGui::container::fwMenu::sptr menu, m_menus)
-    {
-        if (menu == fwMenu)
-        {
-            break;
-        }
-        index++;
-    }
-    return index;
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace layoutManager
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/MenuLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/MenuLayoutManager.cpp
deleted file mode 100644
index eaeabe8..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/MenuLayoutManager.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/menu.h>
-#include <wx/frame.h>
-
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/function.hpp>
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/ActionCallback.hpp"
-#include "fwGuiWx/container/WxMenuContainer.hpp"
-#include "fwGuiWx/container/WxMenuItemContainer.hpp"
-#include "fwGuiWx/layoutManager/MenuLayoutManager.hpp"
-#include "fwGuiWx/Shortcut.hpp"
-
-
-fwGuiRegisterMacro( ::fwGui::layoutManager::MenuLayoutManager, ::fwGui::layoutManager::IMenuLayoutManager::REGISTRY_KEY );
-
-namespace fwGui
-{
-namespace layoutManager
-{
-
-const std::map< ::fwGui::layoutManager::IMenuLayoutManager::ActionType, int> MenuLayoutManager::SPECIAL_ACTION_TO_WXID =
-                                                ::boost::assign::map_list_of(::fwGui::layoutManager::IMenuLayoutManager::QUIT,wxID_EXIT)
-                                                                            (::fwGui::layoutManager::IMenuLayoutManager::ABOUT,wxID_ABOUT)
-                                                                            (::fwGui::layoutManager::IMenuLayoutManager::HELP,wxID_HELP)
-                                                                            (::fwGui::layoutManager::IMenuLayoutManager::NEW,wxID_NEW)
-                                                                            (::fwGui::layoutManager::IMenuLayoutManager::SEPARATOR,wxID_SEPARATOR);
-
-//-----------------------------------------------------------------------------
-
-MenuLayoutManager::MenuLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-MenuLayoutManager::~MenuLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void MenuLayoutManager::createLayout( ::fwGui::container::fwMenu::sptr parent )
-{
-    SLM_TRACE_FUNC();
-
-    m_parent = ::fwGuiWx::container::WxMenuContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwMenu to WxMenuContainer failed", m_parent);
-
-    wxMenu* menu = m_parent->getWxMenu();
-    unsigned int menuItemIndex = 0;
-    BOOST_FOREACH ( ::fwGui::layoutManager::IMenuLayoutManager::ActionInfo actionInfo, m_actionInfo)
-    {
-        ::fwGuiWx::container::WxMenuItemContainer::sptr menuItem = ::fwGuiWx::container::WxMenuItemContainer::New();
-
-        int actionIdInMenu;
-        if (actionInfo.m_type == ::fwGui::layoutManager::IMenuLayoutManager::DEFAULT)
-        {
-            actionIdInMenu = wxNewId();
-        }
-        else
-        {
-            OSLM_ASSERT("Action type "<<actionInfo.m_type<< " is unknown.",
-                           SPECIAL_ACTION_TO_WXID.find(actionInfo.m_type) != SPECIAL_ACTION_TO_WXID.end());
-            actionIdInMenu = SPECIAL_ACTION_TO_WXID.find(actionInfo.m_type)->second;
-        }
-
-        wxMenuItem *menuItemWx;
-        wxItemKind kind = wxITEM_NORMAL;
-        if(actionInfo.m_isCheckable || actionInfo.m_isRadio)
-        {
-            kind = actionInfo.m_isRadio ? wxITEM_RADIO : wxITEM_CHECK;
-
-        }
-
-        std::string actionNameInMenu = actionInfo.m_name;
-        // create shortcut
-        if( !actionInfo.m_shortcut.empty() )
-        {
-            ::fwGuiWx::Shortcut::sptr shortcut =  ::fwGuiWx::Shortcut::New( actionInfo.m_shortcut );
-            actionNameInMenu += "\t" + shortcut->toString();
-        }
-        menuItemWx = new wxMenuItem(menu, actionIdInMenu , ::fwGuiWx::std2wx( actionNameInMenu ),wxGetTranslation(""), kind ) ;
-        menu->Append( menuItemWx );
-        menuItem->setWxMenuItem(menuItemWx);
-
-        if(!actionInfo.m_isSeparator)
-        {
-            m_menuItems.push_back(menuItem);
-            OSLM_ASSERT("No callback found for menu" << actionInfo.m_name, menuItemIndex < m_callbacks.size());
-            ::fwGui::IMenuItemCallback::sptr callback = m_callbacks.at(menuItemIndex);
-
-            ::fwGuiWx::ActionCallback::sptr wxCallback = ::fwGuiWx::ActionCallback::dynamicCast(callback);
-            SLM_ASSERT("dynamicCast IMenuItemCallback to ActionCallback failed", wxCallback);
-
-            // get MainFrame for binding
-            wxFrame *frame = wxDynamicCast( wxTheApp->GetTopWindow() , wxFrame ) ;
-            SLM_ASSERT( "No wxFrame", frame ) ;
-
-            typedef ::boost::function1< void, wxCommandEvent& > MenuItemCallback;
-            MenuItemCallback call = ::boost::bind( &::fwGuiWx::ActionCallback::executeWx, wxCallback, _1 );
-            frame->Bind( wxEVT_COMMAND_MENU_SELECTED, call, actionIdInMenu);
-
-            menuItemIndex++;
-        }
-        else
-        {
-            m_separators.push_back(menuItem);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void MenuLayoutManager::destroyLayout()
-{
-    wxMenu* menu = m_parent->getWxMenu();
-
-    BOOST_FOREACH(::fwGui::container::fwMenuItem::sptr menuItem, m_menuItems)
-    {
-        ::fwGuiWx::container::WxMenuItemContainer::sptr menuItemContainer = ::fwGuiWx::container::WxMenuItemContainer::dynamicCast(menuItem);
-        wxMenuItem *item = menuItemContainer->getWxMenuItem();
-        menu->Destroy(item);
-    }
-
-    BOOST_FOREACH(::fwGui::container::fwMenuItem::sptr menuItem, m_separators)
-    {
-        ::fwGuiWx::container::WxMenuItemContainer::sptr menuItemContainer = ::fwGuiWx::container::WxMenuItemContainer::dynamicCast(menuItem);
-        wxMenuItem *item = menuItemContainer->getWxMenuItem();
-        menu->Destroy(item);
-    }
-    this->destroyActions();
-    m_menuItems.clear();
-    m_separators.clear();
-}
-
-//-----------------------------------------------------------------------------
-
-
-void MenuLayoutManager::menuItemSetVisible(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isVisible)
-{
-    SLM_FATAL("TODO : MenuLayoutManager::actionIsVisible not yet implemented.");
-}
-
-//-----------------------------------------------------------------------------
-
-void MenuLayoutManager::menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isEnabled)
-{
-    ::fwGuiWx::container::WxMenuItemContainer::sptr menuItemContainer = ::fwGuiWx::container::WxMenuItemContainer::dynamicCast(fwMenuItem);
-    wxMenuItem *menuItem = menuItemContainer->getWxMenuItem();
-    menuItem->Enable(isEnabled);
-}
-
-//-----------------------------------------------------------------------------
-
-void MenuLayoutManager::menuItemSetChecked(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isChecked)
-{
-    ::fwGuiWx::container::WxMenuItemContainer::sptr menuItemContainer = ::fwGuiWx::container::WxMenuItemContainer::dynamicCast(fwMenuItem);
-    wxMenuItem *menuItem = menuItemContainer->getWxMenuItem();
-    if (menuItem->GetKind() == wxITEM_RADIO || menuItem->GetKind() == wxITEM_CHECK)
-    {
-        menuItem->Check(isChecked);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace layoutManager
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/TabLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/TabLayoutManager.cpp
deleted file mode 100644
index d0563d7..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/TabLayoutManager.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/panel.h>
-#include <wx/sizer.h>
-
-#include <boost/foreach.hpp>
-
-#include <fwCore/base.hpp>
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/layoutManager/TabLayoutManager.hpp"
-
-
-fwGuiRegisterMacro( ::fwGui::TabLayoutManager, ::fwGui::layoutManager::TabLayoutManagerBase::REGISTRY_KEY );
-
-
-namespace fwGui
-{
-
-//-----------------------------------------------------------------------------
-
-TabLayoutManager::TabLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-TabLayoutManager::~TabLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void TabLayoutManager::createLayout( ::fwGui::container::fwContainer::sptr parent )
-{
-    SLM_TRACE_FUNC();
-    m_parentContainer = ::fwGuiWx::container::WxContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwContainer to WxContainer failed", m_parentContainer);
-
-    wxWindow* wxContainer = m_parentContainer->getWxContainer();
-    wxBoxSizer* boxSizer = new wxBoxSizer( wxVERTICAL );
-
-    wxContainer->SetSizer( boxSizer );
-
-    m_notebook = new wxNotebook( wxContainer, wxNewId() );
-    boxSizer->Add( m_notebook, 1, wxALL|wxEXPAND, 0);
-
-    std::list< ViewInfo> views = this->getViewsInfo();
-
-    BOOST_FOREACH ( ViewInfo viewInfo, views)
-    {
-        wxPanel * viewPanel = new wxPanel(  m_notebook, wxNewId());
-        ::fwGuiWx::container::WxContainer::sptr subContainer = ::fwGuiWx::container::WxContainer::New();
-        subContainer->setWxContainer(viewPanel);
-        m_subViews.push_back(subContainer);
-
-        m_notebook->AddPage( viewPanel, ::fwGuiWx::std2wx(viewInfo.m_caption), viewInfo.m_isSelect );
-    }
-    wxContainer->Layout();
-}
-
-//-----------------------------------------------------------------------------
-
-void TabLayoutManager::destroyLayout()
-{
-    // Remove pages without removing wxPanel created for this pages
-    // BE CARREFULL => not use m_notebook->DeleteAllPages() because
-    // this method remove wxPanel insides pages but unregisterAllWxContainer
-    // remove this panel also.
-    for ( int pageNumber = m_notebook->GetPageCount()-1;
-            pageNumber >= 0;
-            pageNumber-- )
-    {
-        m_notebook->RemovePage( pageNumber );
-    }
-    this->destroySubViews();
-    m_notebook->Destroy();
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/ToolBarLayoutManager.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/ToolBarLayoutManager.cpp
deleted file mode 100644
index 46b19e4..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/layoutManager/ToolBarLayoutManager.cpp
+++ /dev/null
@@ -1,155 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/app.h>
-#include <wx/menu.h>
-#include <wx/image.h>
-#include <wx/log.h>
-#include <wx/frame.h>
-
-#include <boost/bind.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/function.hpp>
-#include <boost/foreach.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <fwGui/registry/macros.hpp>
-
-#include <fwGuiWx/convert.hpp>
-
-#include "fwGuiWx/ActionCallback.hpp"
-#include "fwGuiWx/container/WxToolBarContainer.hpp"
-#include "fwGuiWx/container/WxMenuItemContainer.hpp"
-#include "fwGuiWx/layoutManager/ToolBarLayoutManager.hpp"
-#include "fwGuiWx/Shortcut.hpp"
-
-
-fwGuiRegisterMacro( ::fwGui::layoutManager::ToolBarLayoutManager,
-                    ::fwGui::layoutManager::IToolBarLayoutManager::REGISTRY_KEY );
-
-namespace fwGui
-{
-namespace layoutManager
-{
-
-//-----------------------------------------------------------------------------
-
-ToolBarLayoutManager::ToolBarLayoutManager(::fwGui::GuiBaseObject::Key key)
-{}
-
-//-----------------------------------------------------------------------------
-
-ToolBarLayoutManager::~ToolBarLayoutManager()
-{}
-
-//-----------------------------------------------------------------------------
-
-void ToolBarLayoutManager::createLayout( ::fwGui::container::fwToolBar::sptr parent )
-{
-    SLM_TRACE_FUNC();
-
-    m_parent = ::fwGuiWx::container::WxToolBarContainer::dynamicCast(parent);
-    SLM_ASSERT("dynamicCast fwToolBar to WxToolBarContainer failed", m_parent);
-
-    wxToolBar* toolBar = m_parent->getWxToolBar();
-    unsigned int menuItemIndex = 0;
-    BOOST_FOREACH ( ::fwGui::layoutManager::IToolBarLayoutManager::ActionInfo actionInfo, m_actionInfo)
-    {
-        ::fwGuiWx::container::WxMenuItemContainer::sptr menuItem = ::fwGuiWx::container::WxMenuItemContainer::New();
-
-        int actionIdInMenu = wxNewId();
-        wxItemKind kind = wxITEM_NORMAL;
-        if(actionInfo.m_isCheckable || actionInfo.m_isRadio)
-        {
-            kind = actionInfo.m_isRadio ? wxITEM_RADIO : wxITEM_CHECK;
-        }
-
-        wxImage image = wxNullImage ;
-        if(!actionInfo.m_icon.empty())
-        {
-            if ( !image.LoadFile(::fwGuiWx::std2wx( actionInfo.m_icon )))
-            {
-                wxLogError(wxGetTranslation("Couldn't load image from '%s'."), ::fwGuiWx::std2wx( actionInfo.m_icon ));
-            }
-        }
-
-        if(!actionInfo.m_isSeparator)
-        {
-            wxToolBarToolBase * toolBarToolBase = toolBar->AddTool(actionIdInMenu, ::fwGuiWx::std2wx(actionInfo.m_name), wxBitmap(image),  wxBitmap(image.ConvertToGreyscale()), kind, ::fwGuiWx::std2wx( actionInfo.m_name));
-
-            menuItem->setWxToolItem(toolBarToolBase);
-            m_menuItems.push_back(menuItem);
-            OSLM_ASSERT("No callback found for menu" << actionInfo.m_name, menuItemIndex < m_callbacks.size());
-            ::fwGui::IMenuItemCallback::sptr callback = m_callbacks.at(menuItemIndex);
-
-            ::fwGuiWx::ActionCallback::sptr wxCallback = ::fwGuiWx::ActionCallback::dynamicCast(callback);
-            SLM_ASSERT("dynamicCast IMenuItemCallback to ActionCallback failed", wxCallback);
-
-            // get MainFrame for binding
-            wxFrame *frame = wxDynamicCast( wxTheApp->GetTopWindow() , wxFrame ) ;
-            SLM_ASSERT( "No wxFrame", frame ) ;
-
-            typedef ::boost::function1< void, wxCommandEvent& > MenuItemCallback;
-            MenuItemCallback call = ::boost::bind( &::fwGuiWx::ActionCallback::executeWx, wxCallback, _1 );
-            frame->Bind( wxEVT_COMMAND_TOOL_CLICKED, call, actionIdInMenu);
-
-            menuItemIndex++;
-        }
-        else
-        {
-            toolBar->AddSeparator();
-        }
-    }
-    toolBar->Realize();
-}
-
-//-----------------------------------------------------------------------------
-
-void ToolBarLayoutManager::destroyLayout()
-{
-    this->destroyActions();
-    m_parent->clean();
-    m_menuItems.clear();
-}
-
-//-----------------------------------------------------------------------------
-
-
-void ToolBarLayoutManager::menuItemSetVisible(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isVisible)
-{
-    SLM_FATAL("TODO : ToolBarLayoutManager::actionIsVisible not yet implemented.");
-}
-
-//-----------------------------------------------------------------------------
-
-void ToolBarLayoutManager::menuItemSetEnabled(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isEnabled)
-{
-    wxToolBar* toolBar = m_parent->getWxToolBar();
-    ::fwGuiWx::container::WxMenuItemContainer::sptr menuItemContainer = ::fwGuiWx::container::WxMenuItemContainer::dynamicCast(fwMenuItem);
-    wxToolBarToolBase *menuItem = menuItemContainer->getWxToolItem();
-    toolBar->EnableTool(menuItem->GetId(), isEnabled);
-}
-
-//-----------------------------------------------------------------------------
-
-void ToolBarLayoutManager::menuItemSetChecked(::fwGui::container::fwMenuItem::sptr fwMenuItem, bool isChecked)
-{
-    wxToolBar* toolBar = m_parent->getWxToolBar();
-    ::fwGuiWx::container::WxMenuItemContainer::sptr menuItemContainer = ::fwGuiWx::container::WxMenuItemContainer::dynamicCast(fwMenuItem);
-    wxToolBarToolBase *menuItem = menuItemContainer->getWxToolItem();
-    if (menuItem->GetKind() == wxITEM_RADIO || menuItem->GetKind() == wxITEM_CHECK)
-    {
-        toolBar->ToggleTool(menuItem->GetId(), isChecked);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-} // namespace layoutManager
-} // namespace fwGui
-
-
-
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/ImageURLPanel.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/ImageURLPanel.cpp
deleted file mode 100644
index 60e71eb..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/ImageURLPanel.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <wx/wxhtml.h>
-
-#include <fwCore/base.hpp>
-
-#include "fwGuiWx/widgets/ImageURLPanel.hpp"
-
-namespace fwGuiWx
-{
-
-namespace widgets
-{
-
-//------------------------------------------------------------------------------
-
-ImageURLPanel::ImageURLPanel(wxWindow *parent, const wxBitmap& bitmap) : wxPanel(parent, wxID_ANY), m_bitmap(bitmap)
-{
-    SetClientSize(bitmap.GetWidth(), bitmap.GetHeight());
-    //this->SetBackgroundColour(*wxRED);
-}
-
-void ImageURLPanel::OnPaint(wxPaintEvent& WXUNUSED(event))
-{
-    wxPaintDC dc( this );
-    dc.DrawBitmap( m_bitmap, 0, 0, true /* use mask */ );
-}
-
-void ImageURLPanel::OnWeb(wxMouseEvent& WXUNUSED(event))
-{
-    wxLaunchDefaultBrowser(_T("http://www.ircad.fr/"));
-}
-
-void ImageURLPanel::OnFocus(wxMouseEvent& WXUNUSED(event))
-{
-    wxLaunchDefaultBrowser(_T("http://www.ircad.fr/"));
-}
-
-void ImageURLPanel::OnEnter(wxMouseEvent& WXUNUSED(event))
-{
-    SLM_TRACE("ImageURLPanel::OnEnter");
-    SetCursor(wxCURSOR_HAND);
-}
-
-void ImageURLPanel::OnLeave(wxMouseEvent& WXUNUSED(event))
-{
-    SLM_TRACE("ImageURLPanel::OnLeave");
-    SetCursor(wxCURSOR_ARROW);
-}
-
-//------------------------------------------------------------------------------
-
-BEGIN_EVENT_TABLE(ImageURLPanel, wxPanel)
-    EVT_PAINT(ImageURLPanel::OnPaint)
-    EVT_LEFT_DCLICK(ImageURLPanel::OnWeb)
-    EVT_ENTER_WINDOW(ImageURLPanel::OnEnter)
-    EVT_LEAVE_WINDOW(ImageURLPanel::OnLeave)
-END_EVENT_TABLE()
-
-//------------------------------------------------------------------------------
-
-} // widgets
-} // fwGuiWx
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/colourpicker.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/colourpicker.cpp
deleted file mode 100644
index 86b63c8..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/colourpicker.cpp
+++ /dev/null
@@ -1,432 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-/////////////////////////////////////////////////////////////////////////////
-// Name:        colourpicker.cpp
-// Purpose:     wxColourPicker source
-// Author:      Juan Antonio Ortega
-// Created:     2006/06/17
-// RCS-ID:      $Id: colourpicker.cpp,v 1.1 2006/06/27 18:10:54 ja_ortega Exp $
-// Copyright:   (c) 2006 Juan Antonio Ortega
-// Licence:     wxWidgets licence
-/////////////////////////////////////////////////////////////////////////////
-
-#include <wx/image.h>
-#include <wx/dcbuffer.h>
-#include <wx/colordlg.h>
-
-#include <fwGuiWx/widgets/colourpicker.hpp>
-
-#ifdef __WXMSW__
-    #include <wx/msw/wrapwin.h>
-    #ifndef SPI_GETFLATMENU
-        #define SPI_GETFLATMENU 0x1022
-    #endif
-    #ifndef CS_DROPSHADOW
-        #define CS_DROPSHADOW   0x00020000
-    #endif
-    #ifndef SPI_GETDROPSHADOW
-        #define SPI_GETDROPSHADOW   0x1024
-    #endif
-#endif
-
-DEFINE_EVENT_TYPE(wxEVT_COMMAND_COLOUR_CHANGED)
-
-const wxColourElement wxColourPanel::ms_colorTable[ROWS][COLUMNS] = {
-    {{wxColour(0, 0, 0), wxGetTranslation("Black")},
-     {wxColour(153, 51, 0), wxGetTranslation("Brown")},
-     {wxColour(51, 51, 0), wxGetTranslation("Olive drab")},
-     {wxColour(0, 51, 0), wxGetTranslation("Dark green")},
-     {wxColour(0, 51, 102), wxGetTranslation("Dark teal")},
-     {wxColour(0, 0, 128), wxGetTranslation("Dark blue")},
-     {wxColour(51, 51, 153), wxGetTranslation("Indigo")},
-     {wxColour(51, 51, 51), wxGetTranslation("Grey 80%")}},
-
-    {{wxColour(128, 0, 0), wxGetTranslation("Dark red")},
-     {wxColour(255, 102, 0), wxGetTranslation("Orange")},
-     {wxColour(128, 128, 0), wxGetTranslation("Dark yellow")},
-     {wxColour(0, 128, 0), wxGetTranslation("Green")},
-     {wxColour(0, 128, 128), wxGetTranslation("Teal")},
-     {wxColour(0, 0, 255), wxGetTranslation("Blue")},
-     {wxColour(102, 102, 153), wxGetTranslation("Blue-gray")},
-     {wxColour(128, 128, 128), wxGetTranslation("Grey 50%")}},
-
-    {{wxColour(255, 0, 0), wxGetTranslation("Red")},
-     {wxColour(255, 153, 0), wxGetTranslation("Light orange")},
-     {wxColour(153, 204, 0), wxGetTranslation("Lime green")},
-     {wxColour(51, 153, 102), wxGetTranslation("Sea green")},
-     {wxColour(51, 204, 204), wxGetTranslation("Aqua")},
-     {wxColour(51, 102, 255), wxGetTranslation("Light blue")},
-     {wxColour(128, 0, 128), wxGetTranslation("Violet")},
-     {wxColour(152, 153, 153), wxGetTranslation("Grey 40%")}},
-
-    {{wxColour(255, 0, 255), wxGetTranslation("Magenta")},
-     {wxColour(255, 204, 0), wxGetTranslation("Gold")},
-     {wxColour(255, 255, 0), wxGetTranslation("Yellow")},
-     {wxColour(0, 255, 0), wxGetTranslation("Bright green")},
-     {wxColour(0, 255, 255), wxGetTranslation("Turquoise")},
-     {wxColour(0, 204, 255), wxGetTranslation("Sky blue")},
-     {wxColour(153, 51, 102), wxGetTranslation("Plum")},
-     {wxColour(192, 192, 192), wxGetTranslation("Grey 25%")}},
-
-    {{wxColour(255, 153, 204), wxGetTranslation("Light pink")},
-     {wxColour(255, 205, 153), wxGetTranslation("Sand")},
-     {wxColour(255, 255, 153), wxGetTranslation("Light yellow")},
-     {wxColour(204, 255, 204), wxGetTranslation("Light green")},
-     {wxColour(204, 255, 255), wxGetTranslation("Light turquoise")},
-     {wxColour(153, 204, 255), wxGetTranslation("Powder blue")},
-     {wxColour(204, 153, 255), wxGetTranslation("Lavender")},
-     {wxColour(255, 255, 255), wxGetTranslation("White")}}
-};
-
-//----------------------------------------------------------------
-// Class wxColourPicker
-//----------------------------------------------------------------
-
-BEGIN_EVENT_TABLE(wxColourPicker, wxBitmapButton)
-    EVT_BUTTON(-1, wxColourPicker::OnPopup)
-END_EVENT_TABLE()
-
-wxColourPicker::wxColourPicker(wxWindow *parent, int id) : wxBitmapButton(parent, id, CreateColourBitmap(*wxBLACK, wxSize(20, 20), true)){
-    m_colour = *wxWHITE;
-    m_cp = new wxColourPanel(parent);
-    int width = (SQUARE_SEPARATION + SQUARE_WIDTH) * COLUMNS - SQUARE_SEPARATION;
-    int height = (SQUARE_SEPARATION + SQUARE_WIDTH) * ROWS + SQUARE_SEPARATION;
-    m_cp->SetClientSize(width + SQUARE_SEPARATION * 2, height + 23 + 6);
-}
-
-// Get-Set methods
-
-void wxColourPicker::SetColour(wxColour& colour){
-    if (m_colour != colour){
-        m_colour = colour;
-        SetBitmapLabel(CreateColourBitmap(m_colour, GetSize(), true));
-
-        wxColourPickerEvent event(GetId(), m_colour);
-        event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
-    }
-}
-
-wxColour wxColourPicker::GetColour(){
-    return m_colour;
-}
-
-// Overriden methods
-
-void wxColourPicker::DoSetSize(int x, int y, int width, int height, int sizeFlags){
-    wxBitmapButton::DoSetSize(x, y, width, height, sizeFlags);
-    SetBitmapLabel(CreateColourBitmap(m_colour, GetSize(), true));
-    SetBitmapDisabled(CreateColourBitmap(m_colour, GetSize(), false));
-}
-
-// Events
-
-void wxColourPicker::OnPopup(wxCommandEvent& WXUNUSED(e)){
-#ifdef __WXMSW__
-//    ::PostMessage((HWND) GetHandle(), BM_SETSTATE, TRUE, 0);
-#endif
-    int x = 0;
-    int y = GetSize().y;
-    ClientToScreen(&x, &y);
-    m_cp->SetColour(m_colour);
-    m_cp->SetSize(x, y, -1, -1, wxSIZE_USE_EXISTING);
-    m_cp->Popup(::wxGetTopLevelParent(this), this);
-}
-
-// Private methods
-
-wxBitmap wxColourPicker::CreateColourBitmap(const wxColour& c, const wxSize& size, bool enabled){
-    int x, y, i;
-    wxImage image;
-    wxColour dark = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
-    wxColour light = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNHIGHLIGHT);
-
-    image.Create(size.x - 10, size.y - 10);
-
-    wxColour maskColour = wxColour(255, 0, 255);
-    if (c == maskColour) maskColour = wxColour(192, 192, 192);
-
-    for (x = 0; x < size.x - 10; x++)
-        for (y = 0; y < size.y - 10; y++)
-            image.SetRGB(x, y, maskColour.Red(), maskColour.Green(), maskColour.Blue());
-
-    if (enabled)
-        for (x = 0; x < size.x - 10 - 12; x++)
-            for (y = 0; y < size.y - 10; y++){
-                wxColour pixcol = c;
-                if (x == 0 || x == size.x - 23 || y == 0 || y == size.y - 11)
-                    pixcol = *wxBLACK;
-                image.SetRGB(x, y, pixcol.Red(), pixcol.Green(), pixcol.Blue());
-            }
-
-    if (size.x - 19 >= 0){
-        for (y = 0; y < size.y - 10; y++){
-            if (enabled) image.SetRGB(size.x - 18, y, light.Red(), light.Green(), light.Blue());
-            image.SetRGB(size.x - 19, y, dark.Red(), dark.Green(), dark.Blue());
-        }
-    }
-
-    if (size.x - 16 >= 0){
-        wxColour arrowColour = enabled ? *wxBLACK : wxSystemSettings::GetColour(wxSYS_COLOUR_GRAYTEXT);
-        int width = 5;
-        int x = size.x - 16;
-        int y = (size.y - 10 - 4) / 2;
-        while (width > 0){
-            for (i = 0; i < width; i++)
-                image.SetRGB(x + i, y, arrowColour.Red(), arrowColour.Green(), arrowColour.Blue());
-            width -= 2;
-            x++;
-            y++;
-        }
-    }
-
-    wxBitmap res = wxBitmap(image);
-    res.SetMask(new wxMask(res, maskColour));
-    return res;
-}
-
-//----------------------------------------------------------------
-// Class wxColourPanel
-//----------------------------------------------------------------
-
-BEGIN_EVENT_TABLE(wxColourPanel, wxPopupTransientWindow)
-    EVT_PAINT(wxColourPanel::OnPaint)
-    EVT_MOTION(wxColourPanel::OnMouseMotion)
-    EVT_LEAVE_WINDOW(wxColourPanel::OnMouseLeave)
-    EVT_LEFT_UP(wxColourPanel::OnMouseDown)
-END_EVENT_TABLE()
-
-wxColourPanel::wxColourPanel(wxWindow *parent) : wxPopupTransientWindow(parent){
-    SetBackgroundStyle(wxBG_STYLE_CUSTOM);
-    int x, y;
-    wxImage maskImage;
-    wxImage image;
-    int width = (SQUARE_SEPARATION + SQUARE_WIDTH) * COLUMNS - SQUARE_SEPARATION;
-    int height = (SQUARE_SEPARATION + SQUARE_WIDTH) * ROWS - SQUARE_SEPARATION;
-    image.Create(width, height);
-    maskImage.Create(width, height);
-
-    for (x = 0; x < width; x++)
-        for (y = 0; y < height; y++)
-            image.SetRGB(x, y, 255, 255, 255);
-
-    int squareStart = SQUARE_WIDTH + SQUARE_SEPARATION;
-    for (x = 0; x < COLUMNS; x++)
-        for (y = 0; y < ROWS; y++){
-            PaintSquare(image, maskImage, x * squareStart, y * squareStart, ms_colorTable[y][x].m_colour);
-        }
-    m_back = wxBitmap(image);
-    m_back.SetMask(new wxMask(wxBitmap(maskImage, 1)));
-
-    m_isFlat = false;
-    m_osHasDropShadow = false;
-#ifdef __WXMSW__
-    int majorVersion, minorVersion;
-    int osVersion = ::wxGetOsVersion(&majorVersion, &minorVersion);
-    bool isXp = osVersion == wxOS_WINDOWS_NT && (majorVersion > 5 || (majorVersion == 5 && minorVersion >= 1));
-    if (isXp){
-//        BOOL flatMenu;
-//        ::SystemParametersInfo(SPI_GETFLATMENU, 0, &flatMenu, FALSE);
-//        m_isFlat = flatMenu != 0;
-//        BOOL dropShadow;
-//        ::SystemParametersInfo(SPI_GETDROPSHADOW, 0, &dropShadow, FALSE);
-//        m_osHasDropShadow = dropShadow != 0;
-    }
-#endif
-    if (!m_isFlat) SetWindowStyle(wxDOUBLE_BORDER);
-}
-
-// Get-Set methods
-
-void wxColourPanel::SetColour(wxColour& colour){
-    m_selectedColour = colour;
-}
-
-wxColour wxColourPanel::GetColour(){
-    return m_selectedColour;
-}
-
-// Overriden methods
-
-void wxColourPanel::Popup(wxWindow *focus, wxColourPicker *picker){
-#ifdef __WXMSW__
-    if (m_osHasDropShadow){
-//        DWORD style = GetClassLong((HWND) GetHandle(), GCL_STYLE);
-//        SetClassLong((HWND) GetHandle(), GCL_STYLE, style | CS_DROPSHADOW);
-    }
-#endif
-    m_picker = picker;
-    wxPopupTransientWindow::Popup(focus);
-}
-
-void wxColourPanel::Dismiss(){
-    SetToolTip(_T(""));
-    wxPopupTransientWindow::Dismiss();
-#ifdef __WXMSW__
-    if (m_osHasDropShadow){
-//        DWORD style = GetClassLong((HWND) GetHandle(), GCL_STYLE);
-//        SetClassLong((HWND) GetHandle(), GCL_STYLE, style & ~CS_DROPSHADOW);
-    }
-//    ::PostMessage((HWND) m_picker->GetHandle(), BM_SETSTATE, FALSE, 0);
-#endif
-}
-
-// Events
-
-void wxColourPanel::OnMouseMotion(wxMouseEvent& e){
-    wxColour prevOver = m_overColour;
-    bool prevOverMore = m_overMore;
-    wxString colourName;
-    GetColourFromPoint(e.GetX(), e.GetY(), m_overColour, m_overMore, colourName);
-
-    if (prevOver != m_overColour || m_overMore != prevOverMore){
-        SetToolTip(colourName);
-        Refresh();
-    }
-}
-
-void wxColourPanel::OnMouseDown(wxMouseEvent& e){
-    bool moreColours;
-    wxColour colour;
-    wxString colourName;
-
-    GetColourFromPoint(e.GetX(), e.GetY(), colour, moreColours, colourName);
-    Dismiss();
-    if (moreColours){
-        wxColourDialog cd(::wxGetTopLevelParent(m_picker));
-        if (cd.ShowModal() == wxID_OK)
-            m_selectedColour = cd.GetColourData().GetColour();
-    }else if (colour != wxNullColour)
-        m_selectedColour = colour;
-
-    m_picker->SetColour(m_selectedColour);
-}
-
-void wxColourPanel::OnMouseLeave(wxMouseEvent& WXUNUSED(e)){
-    m_overMore = false;
-    m_overColour = wxNullColour;
-    Refresh();
-}
-
-void wxColourPanel::OnPaint(wxPaintEvent& WXUNUSED(e)){
-    wxPaintDC dc(this);
-    int x, y;
-    wxSize size = GetClientSize();
-    wxColour colourMenu = wxSystemSettings::GetColour(wxSYS_COLOUR_MENU);
-    wxBufferedDC bdc(&dc, size);
-
-    if (m_isFlat)
-        bdc.SetPen(wxPen(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW)));
-    else
-        bdc.SetPen(wxPen(colourMenu));
-
-    bdc.SetBrush(wxBrush(colourMenu, wxSOLID));
-    bdc.Clear();
-    bdc.DrawRectangle(0, 0, size.x, size.y);
-
-    int alpha = 48;
-    wxColour selection = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHT);
-    wxColour lighterSelection = wxColour(
-        (colourMenu.Red() * (255 - alpha) + selection.Red() * alpha) >> 8,
-        (colourMenu.Green() * (255 - alpha) + selection.Green() * alpha) >> 8,
-        (colourMenu.Blue() * (255 - alpha) + selection.Blue() * alpha) >> 8);
-
-    bool found = false;
-    int squareStart = SQUARE_WIDTH + SQUARE_SEPARATION;
-    for (x = 0; x < COLUMNS; x++)
-        for (y = 0; y < ROWS; y++){
-            if (ms_colorTable[y][x].m_colour == m_selectedColour){
-                found = true;
-                bdc.SetBrush(wxBrush(lighterSelection, wxSOLID));
-                bdc.SetPen(wxPen(selection));
-                bdc.DrawRectangle(SQUARE_SEPARATION + x * squareStart - SQUARE_SEPARATION / 2,
-                                  SQUARE_SEPARATION + y * squareStart - SQUARE_SEPARATION / 2,
-                                  squareStart, squareStart);
-            }
-            if (m_overColour != wxNullColour && ms_colorTable[y][x].m_colour == m_overColour){
-                bdc.SetBrush(wxBrush(selection, wxSOLID));
-                bdc.SetPen(wxPen(selection));
-                bdc.DrawRectangle(SQUARE_SEPARATION + x * squareStart - SQUARE_SEPARATION / 2,
-                                  SQUARE_SEPARATION + y * squareStart - SQUARE_SEPARATION / 2,
-                                  squareStart, squareStart);
-            }
-        }
-
-    int paletteHeight = squareStart * ROWS + SQUARE_SEPARATION;
-    if (m_overMore || !found){
-        if (m_overMore){
-            bdc.SetBrush(wxBrush(selection, wxSOLID));
-            bdc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT));
-        }else{
-            bdc.SetBrush(wxBrush(lighterSelection, wxSOLID));
-            bdc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT));
-        }
-        bdc.SetPen(wxPen(selection));
-        bdc.DrawRectangle(6, paletteHeight, size.x - 12, size.y - paletteHeight - 6);
-    }else
-        bdc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_MENUTEXT));
-
-    bdc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
-    wxString msgMoreColours = wxGetTranslation("More Colours...");
-    int w, h;
-    bdc.GetTextExtent(msgMoreColours, &w, &h);
-    bdc.DrawText(msgMoreColours, (size.x - w) / 2, paletteHeight + (size.y - paletteHeight - 6 - h) / 2);
-
-    bdc.DrawBitmap(m_back, SQUARE_SEPARATION, SQUARE_SEPARATION, true);
-}
-
-// Private methods
-
-void wxColourPanel::GetColourFromPoint(int x, int y, wxColour& colour, bool& more, wxString& name){
-    int selX = (x - SQUARE_SEPARATION / 2) / (SQUARE_WIDTH + SQUARE_SEPARATION);
-    int selY = (y - SQUARE_SEPARATION / 2) / (SQUARE_WIDTH + SQUARE_SEPARATION);
-    wxSize size = GetClientSize();
-
-    colour = wxNullColour;
-    more = false;
-    name = _T("");
-    int paletteHeight = (SQUARE_WIDTH + SQUARE_SEPARATION) * ROWS + SQUARE_SEPARATION;
-    if (selX >= 0 && selX < COLUMNS && y >= 0 && selY < ROWS){
-        name = ms_colorTable[selY][selX].m_name;
-        colour = ms_colorTable[selY][selX].m_colour;
-    }else if (x >= 6 && x < size.x - 6 && y >= paletteHeight && y < size.y - 6){
-        more = true;
-        name = wxGetTranslation("More colours");
-    }
-}
-
-void wxColourPanel::PaintSquare(wxImage& image, wxImage& maskImage, int x, int y, wxColour col){
-    wxColour dark = wxSystemSettings::GetColour(wxSYS_COLOUR_BTNSHADOW);
-    for (int xx = x; xx < x + SQUARE_WIDTH; xx++)
-        for (int yy = y; yy < y + SQUARE_WIDTH; yy++){
-            wxColour color = col;
-            if (x == xx || xx == x + SQUARE_WIDTH - 1) color = dark;
-            if (y == yy || yy == y + SQUARE_WIDTH - 1) color = dark;
-            image.SetRGB(xx, yy, color.Red(), color.Green(), color.Blue());
-            maskImage.SetRGB(xx, yy, 255, 255, 255);
-        }
-}
-
-//----------------------------------------------------------------
-// Class wxColourPickerEvent
-//----------------------------------------------------------------
-
-wxColourPickerEvent::wxColourPickerEvent(int id, wxColour& colour) :
-    wxCommandEvent(wxEVT_COMMAND_COLOUR_CHANGED, id)
-{
-    m_colour = colour;
-}
-
-wxColour wxColourPickerEvent::GetColour(){
-    return m_colour;
-}
-
-wxEvent* wxColourPickerEvent::Clone() const{
-    wxColourPickerEvent *event = new wxColourPickerEvent(*this);
-    event->m_colour = m_colour;
-    return event;
-}
diff --git a/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/fwProgressDialog.cpp b/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/fwProgressDialog.cpp
deleted file mode 100644
index 10c749b..0000000
--- a/SrcLib/core/fwGuiWx/src/fwGuiWx/widgets/fwProgressDialog.cpp
+++ /dev/null
@@ -1,696 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-#include <wx/wxprec.h>
-
-#ifdef __BORLANDC__
-    #pragma hdrstop
-#endif
-
-#if wxUSE_PROGRESSDLG
-
-#ifndef WX_PRECOMP
-    #include <wx/utils.h>
-    #include <wx/frame.h>
-    #include <wx/button.h>
-    #include <wx/stattext.h>
-    #include <wx/sizer.h>
-    #include <wx/event.h>
-    #include <wx/gauge.h>
-    #include <wx/intl.h>
-    #include <wx/dcclient.h>
-    #include <wx/timer.h>
-    #include <wx/settings.h>
-    #include <wx/app.h>
-#endif
-
-//#include "wx/progdlg.h"
-#include "wx/evtloop.h"
-
-
-
-#include "fwGuiWx/widgets/fwProgressDialog.hpp"
-
-
-// ---------------------------------------------------------------------------
-// macros
-// ---------------------------------------------------------------------------
-
-/* Macro for avoiding #ifdefs when value have to be different depending on size of
-   device we display on - take it from something like wxDesktopPolicy in the future
- */
-
-#if defined(__SMARTPHONE__)
-    #define wxLARGESMALL(large,small) small
-#else
-    #define wxLARGESMALL(large,small) large
-#endif
-
-// ----------------------------------------------------------------------------
-// constants
-// ----------------------------------------------------------------------------
-
-#define LAYOUT_MARGIN wxLARGESMALL(8,2)
-
-static const int wxID_SKIP = 32000;  // whatever
-
-// ----------------------------------------------------------------------------
-// private functions
-// ----------------------------------------------------------------------------
-
-// update the label to show the given time (in seconds)
-static void SetTimeLabel(unsigned long val, wxStaticText *label);
-
-// ----------------------------------------------------------------------------
-// event tables
-// ----------------------------------------------------------------------------
-
-BEGIN_EVENT_TABLE(fwProgressDialog, wxDialog)
-    EVT_BUTTON(wxID_CANCEL, fwProgressDialog::OnCancel)
-    EVT_BUTTON(wxID_SKIP, fwProgressDialog::OnSkip)
-
-    EVT_CLOSE(fwProgressDialog::OnClose)
-END_EVENT_TABLE()
-
-IMPLEMENT_CLASS(fwProgressDialog, wxDialog)
-
-// ============================================================================
-// fwProgressDialog implementation
-// ============================================================================
-
-// ----------------------------------------------------------------------------
-// fwProgressDialog creation
-// ----------------------------------------------------------------------------
-
-fwProgressDialog::fwProgressDialog(const wxString& title,
-                                   const wxString& message,
-                                   int maximum,
-                                   wxWindow *parent,
-                                   int style):
-#if wxCHECK_VERSION(2, 9, 1)
-                  wxDialog(GetParentForModalDialog(parent, style), wxID_ANY, title),
-#else
-                  wxDialog(GetParentForModalDialog(parent), wxID_ANY, title),
-#endif
-                  m_skip(false),
-                  m_delay(3),
-                  m_hasAbortButton(false),
-                  m_hasSkipButton(false)
-{
-    // we may disappear at any moment, let the others know about it
-    SetExtraStyle(GetExtraStyle() | wxWS_EX_TRANSIENT);
-    m_windowStyle |= style;
-
-    m_hasAbortButton = (style & wxPD_CAN_ABORT) != 0;
-    m_hasSkipButton = (style & wxPD_CAN_SKIP) != 0;
-
-#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
-    // we have to remove the "Close" button from the title bar then as it is
-    // confusing to have it - it doesn't work anyhow
-    //
-    // FIXME: should probably have a (extended?) window style for this
-    if ( !m_hasAbortButton )
-    {
-        EnableCloseButton(false);
-    }
-#endif // wxMSW
-
-#if defined(__SMARTPHONE__)
-    SetLeftMenu();
-#endif
-
-    m_state = m_hasAbortButton ? Continue : Uncancelable;
-    m_maximum = maximum;
-
-#if defined(__WXMSW__) || defined(__WXPM__)
-    // we can't have values > 65,536 in the progress control under Windows, so
-    // scale everything down
-    m_factor = m_maximum / 65536 + 1;
-    m_maximum /= m_factor;
-#endif // __WXMSW__
-
-    m_parentTop = wxGetTopLevelParent(parent);
-
-    wxClientDC dc(this);
-    dc.SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
-    wxCoord widthText = 0;
-    dc.GetTextExtent(message, &widthText, NULL, NULL, NULL, NULL);
-
-    // top-level sizerTop
-    wxSizer * const sizerTop = new wxBoxSizer(wxVERTICAL);
-
-    m_msg = new wxStaticText(this, wxID_ANY, message);
-    sizerTop->Add(m_msg, 0, wxLEFT | wxTOP, 2*LAYOUT_MARGIN);
-
-    if ( maximum > 0 )
-    {
-        int gauge_style = wxGA_HORIZONTAL;
-        if ( style & wxPD_SMOOTH )
-            gauge_style |= wxGA_SMOOTH;
-        m_gauge = new wxGauge
-                      (
-                        this,
-                        wxID_ANY,
-                        m_maximum,
-                        wxDefaultPosition,
-                        // make the progress bar sufficiently long
-                        wxSize(wxMin(wxGetClientDisplayRect().width/3, 300), -1),
-                        gauge_style
-                      );
-
-        sizerTop->Add(m_gauge, 0, wxLEFT | wxRIGHT | wxTOP | wxEXPAND, 2*LAYOUT_MARGIN);
-        m_gauge->SetValue(0);
-    }
-    else
-    {
-        m_gauge = NULL;
-    }
-
-    // create the estimated/remaining/total time zones if requested
-    m_elapsed =
-    m_estimated =
-    m_remaining = NULL;
-    m_display_estimated =
-    m_last_timeupdate =
-    m_break = 0;
-    m_ctdelay = 0;
-
-    // also count how many labels we really have
-    size_t nTimeLabels = 0;
-
-    wxSizer * const sizerLabels = new wxFlexGridSizer(2);
-
-    if ( style & wxPD_ELAPSED_TIME )
-    {
-        nTimeLabels++;
-
-        m_elapsed = CreateLabel(wxGetTranslation("Elapsed time:"), sizerLabels);
-    }
-
-    if ( style & wxPD_ESTIMATED_TIME )
-    {
-        nTimeLabels++;
-
-        m_estimated = CreateLabel(wxGetTranslation("Estimated time:"), sizerLabels);
-    }
-
-    if ( style & wxPD_REMAINING_TIME )
-    {
-        nTimeLabels++;
-
-        m_remaining = CreateLabel(wxGetTranslation("Remaining time:"), sizerLabels);
-    }
-    sizerTop->Add(sizerLabels, 0, wxALIGN_CENTER_HORIZONTAL | wxTOP, LAYOUT_MARGIN);
-
-    if ( nTimeLabels > 0 )
-    {
-        // set it to the current time
-        m_timeStart = wxGetCurrentTime();
-    }
-
-#if defined(__SMARTPHONE__)
-    if ( m_hasSkipButton )
-        SetRightMenu(wxID_SKIP, wxGetTranslation("Skip"));
-    if ( m_hasAbortButton )
-        SetLeftMenu(wxID_CANCEL);
-#else
-    m_btnAbort =
-    m_btnSkip = NULL;
-
-    wxBoxSizer *buttonSizer = new wxBoxSizer(wxHORIZONTAL);
-
-    // Windows dialogs usually have buttons in the lower right corner
-    const int sizerFlags =
-#if defined(__WXMSW__) || defined(__WXPM__)
-                           wxALIGN_RIGHT | wxALL
-#else // !MSW
-                           wxALIGN_CENTER_HORIZONTAL | wxBOTTOM | wxTOP
-#endif // MSW/!MSW
-                           ;
-
-    if ( m_hasSkipButton )
-    {
-        m_btnSkip = new wxButton(this, wxID_SKIP, wxGetTranslation("&Skip"));
-
-        buttonSizer->Add(m_btnSkip, 0, sizerFlags, LAYOUT_MARGIN);
-    }
-
-    if ( m_hasAbortButton )
-    {
-        m_btnAbort = new wxButton(this, wxID_CANCEL);
-
-        buttonSizer->Add(m_btnAbort, 0, sizerFlags, LAYOUT_MARGIN);
-    }
-
-    sizerTop->Add(buttonSizer, 0, sizerFlags, LAYOUT_MARGIN );
-#endif // __SMARTPHONE__/!__SMARTPHONE__
-
-    SetSizerAndFit(sizerTop);
-
-    Centre(wxCENTER_FRAME | wxBOTH);
-
-    if ( style & wxPD_APP_MODAL )
-    {
-        m_winDisabler = new wxWindowDisabler(this);
-    }
-    else
-    {
-        if ( m_parentTop )
-            m_parentTop->Disable();
-        m_winDisabler = NULL;
-    }
-
-    Show();
-    Enable();
-
-    // this one can be initialized even if the others are unknown for now
-    //
-    // NB: do it after calling Layout() to keep the labels correctly aligned
-    if ( m_elapsed )
-    {
-        SetTimeLabel(0, m_elapsed);
-    }
-
-    Update();
-}
-
-wxStaticText *
-fwProgressDialog::CreateLabel(const wxString& text, wxSizer *sizer)
-{
-    wxStaticText *label = new wxStaticText(this, wxID_ANY, text);
-    wxStaticText *value = new wxStaticText(this, wxID_ANY, wxGetTranslation("unknown"));
-
-    // select placement most native or nice on target GUI
-#if defined(__SMARTPHONE__)
-    // value and time to the left in two rows
-    sizer->Add(label, 1, wxALIGN_LEFT);
-    sizer->Add(value, 1, wxALIGN_LEFT);
-#elif defined(__WXMSW__) || defined(__WXPM__) || defined(__WXMAC__) || defined(__WXGTK20__)
-    // value and time centered in one row
-    sizer->Add(label, 1, wxLARGESMALL(wxALIGN_RIGHT,wxALIGN_LEFT) | wxTOP | wxRIGHT, LAYOUT_MARGIN);
-    sizer->Add(value, 1, wxALIGN_LEFT | wxTOP, LAYOUT_MARGIN);
-#else
-    // value and time to the right in one row
-    sizer->Add(label);
-    sizer->Add(value, 0, wxLEFT, LAYOUT_MARGIN);
-#endif
-
-    return value;
-}
-
-// ----------------------------------------------------------------------------
-// fwProgressDialog operations
-// ----------------------------------------------------------------------------
-
-bool
-fwProgressDialog::Update(int value, const wxString& newmsg, bool *skip)
-{
-    wxASSERT_MSG( value == -1 || m_gauge, wxT("cannot update non existent dialog") );
-
-#ifdef __WXMSW__
-    value /= m_factor;
-#endif // __WXMSW__
-
-    wxASSERT_MSG( value <= m_maximum, wxT("invalid progress value") );
-
-    if ( m_gauge )
-        m_gauge->SetValue(value);
-
-    UpdateMessage(newmsg);
-
-    if ( (m_elapsed || m_remaining || m_estimated) && (value != 0) )
-    {
-        unsigned long elapsed = wxGetCurrentTime() - m_timeStart;
-        if (    m_last_timeupdate < elapsed
-             || value == m_maximum
-           )
-        {
-            m_last_timeupdate = elapsed;
-            unsigned long estimated = m_break +
-                  (unsigned long)(( (double) (elapsed-m_break) * m_maximum ) / ((double)value)) ;
-            if (    estimated > m_display_estimated
-                 && m_ctdelay >= 0
-               )
-            {
-                ++m_ctdelay;
-            }
-            else if (    estimated < m_display_estimated
-                      && m_ctdelay <= 0
-                    )
-            {
-                --m_ctdelay;
-            }
-            else
-            {
-                m_ctdelay = 0;
-            }
-            if (    m_ctdelay >= m_delay          // enough confirmations for a higher value
-                 || m_ctdelay <= (m_delay*-1)     // enough confirmations for a lower value
-                 || value == m_maximum            // to stay consistent
-                 || elapsed > m_display_estimated // to stay consistent
-                 || ( elapsed > 0 && elapsed < 4 ) // additional updates in the beginning
-               )
-            {
-                m_display_estimated = estimated;
-                m_ctdelay = 0;
-            }
-        }
-
-        long display_remaining = m_display_estimated - elapsed;
-        if ( display_remaining < 0 )
-        {
-            display_remaining = 0;
-        }
-
-        SetTimeLabel(elapsed, m_elapsed);
-        SetTimeLabel(m_display_estimated, m_estimated);
-        SetTimeLabel(display_remaining, m_remaining);
-    }
-
-    if ( value == m_maximum )
-    {
-        if ( m_state == Finished )
-        {
-            // ignore multiple calls to Update(m_maximum): it may sometimes be
-            // troublesome to ensure that Update() is not called twice with the
-            // same value (e.g. because of the rounding errors) and if we don't
-            // return now we're going to generate asserts below
-            return true;
-        }
-
-        // so that we return true below and that out [Cancel] handler knew what
-        // to do
-        m_state = Finished;
-        if( !HasFlag(wxPD_AUTO_HIDE) )
-        {
-            EnableClose();
-            DisableSkip();
-#if defined(__WXMSW__) && !defined(__WXUNIVERSAL__)
-            EnableCloseButton();
-#endif // __WXMSW__
-
-            if ( newmsg.empty() )
-            {
-                // also provide the finishing message if the application didn't
-                m_msg->SetLabel(wxGetTranslation("Done."));
-            }
-
-            wxCHECK_MSG(wxEventLoopBase::GetActive(), false,
-                        "fwProgressDialog::Update needs a running event loop");
-
-            // allow the window to repaint:
-            // NOTE: since we yield only for UI events with this call, there
-            //       should be no side-effects
-            //wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI);
-            Update();
-
-            // NOTE: this call results in a new event loop being created
-            //       and to a call to ProcessPendingEvents() (which may generate
-            //       unwanted re-entrancies).
-            (void)ShowModal();
-        }
-        else // auto hide
-        {
-            // reenable other windows before hiding this one because otherwise
-            // Windows wouldn't give the focus back to the window which had
-            // been previously focused because it would still be disabled
-            ReenableOtherWindows();
-
-            Hide();
-        }
-    }
-    else // not at maximum yet
-    {
-        return DoAfterUpdate(skip);
-    }
-
-    // update the display in case yielding above didn't do it
-    Update();
-
-    return m_state != Canceled;
-}
-
-bool fwProgressDialog::Pulse(const wxString& newmsg, bool *skip)
-{
-    wxASSERT_MSG( m_gauge, wxT("cannot update non existent dialog") );
-
-    // show a bit of progress
-    m_gauge->Pulse();
-
-    UpdateMessage(newmsg);
-
-    if (m_elapsed || m_remaining || m_estimated)
-    {
-        unsigned long elapsed = wxGetCurrentTime() - m_timeStart;
-
-        SetTimeLabel(elapsed, m_elapsed);
-        SetTimeLabel((unsigned long)-1, m_estimated);
-        SetTimeLabel((unsigned long)-1, m_remaining);
-    }
-
-    return DoAfterUpdate(skip);
-}
-
-bool fwProgressDialog::DoAfterUpdate(bool *skip)
-{
-    wxCHECK_MSG(wxEventLoopBase::GetActive(), false,
-                "fwProgressDialog::DoAfterUpdate needs a running event loop");
-
-    // we have to yield because not only we want to update the display but
-    // also to process the clicks on the cancel and skip buttons
-    // NOTE: using YieldFor() this call shouldn't give re-entrancy problems
-    //       for event handlers not interested to UI/user-input events.
-    //wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI|wxEVT_CATEGORY_USER_INPUT);
-
-    Update();
-
-    if ( m_skip && skip && !*skip )
-    {
-        *skip = true;
-        m_skip = false;
-        EnableSkip();
-    }
-
-    return m_state != Canceled;
-}
-
-void fwProgressDialog::Resume()
-{
-    m_state = Continue;
-    m_ctdelay = m_delay; // force an update of the elapsed/estimated/remaining time
-    m_break += wxGetCurrentTime()-m_timeStop;
-
-    EnableAbort();
-    EnableSkip();
-    m_skip = false;
-}
-
-bool fwProgressDialog::Show( bool show )
-{
-    // reenable other windows before hiding this one because otherwise
-    // Windows wouldn't give the focus back to the window which had
-    // been previously focused because it would still be disabled
-    if(!show)
-        ReenableOtherWindows();
-
-    return wxDialog::Show(show);
-}
-
-int fwProgressDialog::GetValue() const
-{
-    if (m_gauge)
-        return m_gauge->GetValue();
-    return wxNOT_FOUND;
-}
-
-int fwProgressDialog::GetRange() const
-{
-    if (m_gauge)
-        return m_gauge->GetRange();
-    return wxNOT_FOUND;
-}
-
-wxString fwProgressDialog::GetMessage() const
-{
-    return m_msg->GetLabel();
-}
-
-// ----------------------------------------------------------------------------
-// event handlers
-// ----------------------------------------------------------------------------
-
-void fwProgressDialog::OnCancel(wxCommandEvent& event)
-{
-    if ( m_state == Finished )
-    {
-        // this means that the count down is already finished and we're being
-        // shown as a modal dialog - so just let the default handler do the job
-        event.Skip();
-    }
-    else
-    {
-        // request to cancel was received, the next time Update() is called we
-        // will handle it
-        m_state = Canceled;
-
-        // update the buttons state immediately so that the user knows that the
-        // request has been noticed
-        DisableAbort();
-        DisableSkip();
-
-        // save the time when the dialog was stopped
-        m_timeStop = wxGetCurrentTime();
-    }
-}
-
-void fwProgressDialog::OnSkip(wxCommandEvent& WXUNUSED(event))
-{
-    DisableSkip();
-    m_skip = true;
-}
-
-void fwProgressDialog::OnClose(wxCloseEvent& event)
-{
-    if ( m_state == Uncancelable )
-    {
-        // can't close this dialog
-        event.Veto();
-    }
-    else if ( m_state == Finished )
-    {
-        // let the default handler close the window as we already terminated
-        event.Skip();
-    }
-    else
-    {
-        // next Update() will notice it
-        m_state = Canceled;
-        DisableAbort();
-        DisableSkip();
-
-        m_timeStop = wxGetCurrentTime();
-    }
-}
-
-// ----------------------------------------------------------------------------
-// destruction
-// ----------------------------------------------------------------------------
-
-fwProgressDialog::~fwProgressDialog()
-{
-    // normally this should have been already done, but just in case
-    ReenableOtherWindows();
-}
-
-void fwProgressDialog::ReenableOtherWindows()
-{
-    if ( HasFlag(wxPD_APP_MODAL) )
-    {
-        delete m_winDisabler;
-        m_winDisabler = NULL;
-    }
-    else
-    {
-        if ( m_parentTop )
-            m_parentTop->Enable();
-    }
-}
-
-// ----------------------------------------------------------------------------
-// private functions
-// ----------------------------------------------------------------------------
-
-static void SetTimeLabel(unsigned long val, wxStaticText *label)
-{
-    if ( label )
-    {
-        wxString s;
-
-        if (val != (unsigned long)-1)
-        {
-            unsigned long hours = val / 3600;
-            unsigned long minutes = (val % 3600) / 60;
-            unsigned long seconds = val % 60;
-            s.Printf(wxT("%lu:%02lu:%02lu"), hours, minutes, seconds);
-        }
-        else
-        {
-            s = wxGetTranslation("Unknown");
-        }
-
-        if ( s != label->GetLabel() )
-            label->SetLabel(s);
-    }
-}
-
-void fwProgressDialog::EnableSkip(bool enable)
-{
-    if(m_hasSkipButton)
-    {
-#ifdef __SMARTPHONE__
-        if(enable)
-            SetRightMenu(wxID_SKIP, wxGetTranslation("Skip"));
-        else
-            SetRightMenu();
-#else
-        if(m_btnSkip)
-            m_btnSkip->Enable(enable);
-#endif
-    }
-}
-
-void fwProgressDialog::EnableAbort(bool enable)
-{
-    if(m_hasAbortButton)
-    {
-#ifdef __SMARTPHONE__
-        if(enable)
-            SetLeftMenu(wxID_CANCEL); // stock buttons makes Cancel label
-        else
-            SetLeftMenu();
-#else
-        if(m_btnAbort)
-            m_btnAbort->Enable(enable);
-#endif
-    }
-}
-
-void fwProgressDialog::EnableClose()
-{
-    if(m_hasAbortButton)
-    {
-#ifdef __SMARTPHONE__
-        SetLeftMenu(wxID_CANCEL, wxGetTranslation("Close"));
-#else
-        if(m_btnAbort)
-        {
-            m_btnAbort->Enable();
-            m_btnAbort->SetLabel(wxGetTranslation("Close"));
-        }
-#endif
-    }
-}
-
-void fwProgressDialog::UpdateMessage(const wxString &newmsg)
-{
-    wxCHECK_RET(wxEventLoopBase::GetActive(),
-                "fwProgressDialog::UpdateMessage needs a running event loop");
-
-    if ( !newmsg.empty() && newmsg != m_msg->GetLabel() )
-    {
-        m_msg->SetLabel(newmsg);
-
-        // allow the window to repaint:
-        // NOTE: since we yield only for UI events with this call, there
-        //       should be no side-effects
-        //wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI);
-        Update();
-    }
-}
-
-#endif // wxUSE_PROGRESSDLG
-
diff --git a/SrcLib/core/fwGuiWx/test/CMakeLists.txt b/SrcLib/core/fwGuiWx/test/CMakeLists.txt
deleted file mode 100644
index 3d7f4da..0000000
--- a/SrcLib/core/fwGuiWx/test/CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-find_package(wxWidgets COMPONENTS base core adv aui)
-if(wxWidgets_FOUND)
-    fwLoadProperties()
-
-    find_package (Boost COMPONENTS thread date_time REQUIRED)
-    find_package(CppUnit)
-    fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-    fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
-else(wxWidgets_FOUND)
-    message(WARNING "Required package wxWidgets not found, lib 'fwGuiWxTest' disabled.")
-endif(wxWidgets_FOUND)
diff --git a/SrcLib/core/fwGuiWx/test/Properties.cmake b/SrcLib/core/fwGuiWx/test/Properties.cmake
deleted file mode 100644
index b9116aa..0000000
--- a/SrcLib/core/fwGuiWx/test/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwGuiWxTest )
-set( VERSION  )
-set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwThread fwGuiWx )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwGuiWx/test/cppunit.options b/SrcLib/core/fwGuiWx/test/cppunit.options
deleted file mode 100644
index 1efb4ad..0000000
--- a/SrcLib/core/fwGuiWx/test/cppunit.options
+++ /dev/null
@@ -1,17 +0,0 @@
-CLASSTEST=[
-    'WorkerWxTest',
-]
-
-USE = [
-    'wxCore',
-    'boost',
-    'boostThread',
-    'boostDateTime',
-    ]
-LIB = [
-    'fwTest_0-1',
-    'fwThread_0-1',
-    'fwGuiWx_0-1',
-    ]
-
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwGuiWx/test/tu/include/WorkerWxTest.hpp b/SrcLib/core/fwGuiWx/test/tu/include/WorkerWxTest.hpp
deleted file mode 100644
index bc4e619..0000000
--- a/SrcLib/core/fwGuiWx/test/tu/include/WorkerWxTest.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWGUIWX_UT_WORKERWXTEST_HPP__
-#define __FWGUIWX_UT_WORKERWXTEST_HPP__
-
-#include <fwCore/base.hpp>
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace fwGuiWx
-{
-
-struct WorkerWxInstanciator;
-
-namespace ut
-{
-
-class WorkerWxTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( WorkerWxTest );
-
-    CPPUNIT_TEST(initTest);
-    CPPUNIT_TEST(twiceInitTest);
-    CPPUNIT_TEST(basicTest);
-    CPPUNIT_TEST(postFromInsideTest);
-    CPPUNIT_TEST(postFromOutsideTest);
-
-    CPPUNIT_TEST(basicTimerTest);
-
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void initTest();
-    void twiceInitTest();
-    void basicTest();
-
-    void postFromInsideTest();
-    void postFromOutsideTest();
-
-    void basicTimerTest();
-
-protected:
-
-    SPTR(::fwThread::Worker) m_worker;
-};
-
-} //namespace ut
-} //namespace fwGuiWx
-
-#endif //__FWGUIWX_UT_WORKERWXTEST_HPP__
-
diff --git a/SrcLib/core/fwGuiWx/test/tu/src/WorkerWxTest.cpp b/SrcLib/core/fwGuiWx/test/tu/src/WorkerWxTest.cpp
deleted file mode 100644
index 7e6b06a..0000000
--- a/SrcLib/core/fwGuiWx/test/tu/src/WorkerWxTest.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/type_traits/is_same.hpp>
-#include <boost/function.hpp>
-#include <boost/bind.hpp>
-#include <boost/typeof/typeof.hpp>
-#include <boost/chrono/duration.hpp>
-
-#include <cppunit/Exception.h>
-
-#include <wx/wx.h>
-
-#include <fwThread/Timer.hpp>
-
-#include <fwThread/Worker.hpp>
-#include <fwThread/Worker.hxx>
-
-#include <fwGuiWx/config.hpp>
-
-#include "WorkerWxTest.hpp"
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGuiWx::ut::WorkerWxTest );
-
-namespace fwGuiWx
-{
-
-// Defined in WorkerWx.cpp
-class WorkerWx;
-struct FWGUIWX_CLASS_API WorkerWxInstanciator
-{
-    FWGUIWX_API WorkerWxInstanciator(bool reg);
-    FWGUIWX_API SPTR(::fwThread::Worker) getWorker();
-    SPTR(WorkerWx) m_wxWorker;
-
-    FWGUIWX_API static int    s_argc;
-    FWGUIWX_API static char **s_argv;
-};
-
-namespace ut
-{
-
-struct TestHandler
-{
-    TestHandler() : m_step(0), m_threadCheckOk(true)
-    {
-    }
-
-    void nextStep()
-    {
-        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(50));
-        this->nextStepNoSleep();
-    }
-
-    void nextStepNoSleep()
-    {
-        m_threadCheckOk &= (m_workerThreadId == ::fwThread::getCurrentThreadId());
-        ++m_step;
-    }
-
-    void setWorkerId(::fwThread::ThreadIdType id)
-    {
-        m_workerThreadId = id;
-    }
-
-    int m_step;
-    bool m_threadCheckOk;
-    ::fwThread::ThreadIdType m_workerThreadId;
-};
-
-void onExit()
-{
-    wxTheApp->ExitMainLoop();
-    //wxTheApp->OnExit();
-    //wxEntryCleanup();
-}
-
-//-----------------------------------------------------------------------------
-
-void WorkerWxTest::setUp()
-{
-    // Set up context before running a test.
-    static char* arg = "fwGuiWxTest";
-    WorkerWxInstanciator::s_argc = 1;
-    WorkerWxInstanciator::s_argv = &arg;
-    CPPUNIT_ASSERT(wxTheApp == NULL);
-    WorkerWxInstanciator instanciator(false);
-    m_worker = instanciator.getWorker();
-}
-
-void WorkerWxTest::tearDown()
-{
-    // Clean up after the test run.
-    m_worker.reset();
-    CPPUNIT_ASSERT(wxTheApp == NULL);
-}
-
-//-----------------------------------------------------------------------------
-
-void WorkerWxTest::initTest()
-{
-    CPPUNIT_ASSERT(wxTheApp != NULL);
-}
-
-//-----------------------------------------------------------------------------
-
-void WorkerWxTest::twiceInitTest()
-{
-    CPPUNIT_ASSERT(wxTheApp != NULL);
-}
-
-//-----------------------------------------------------------------------------
-
-void runBasicTest(TestHandler &handler, ::fwThread::Worker::sptr worker)
-{
-
-    handler.setWorkerId(worker->getThreadId());
-    worker->post( ::boost::bind( &TestHandler::nextStep, &handler) );
-    worker->post( ::boost::bind( &TestHandler::nextStep, &handler) );
-    worker->post( ::boost::bind( &TestHandler::nextStep, &handler) );
-
-    worker->post( ::boost::bind( &onExit ) );
-}
-
-
-#define RUN_BASIC_TEST_CHECKS(handler) \
-    CPPUNIT_ASSERT_EQUAL(3, handler.m_step); \
-    CPPUNIT_ASSERT_EQUAL(true, handler.m_threadCheckOk)
-
-
-
-void WorkerWxTest::basicTest()
-{
-    TestHandler handler;
-    runBasicTest(handler, m_worker);
-    m_worker->getFuture().wait();
-    RUN_BASIC_TEST_CHECKS(handler);
-}
-
-//-----------------------------------------------------------------------------
-
-void WorkerWxTest::postFromInsideTest()
-{
-    TestHandler handler;
-
-    m_worker->post( ::boost::bind(&runBasicTest, ::boost::ref(handler), m_worker) );
-
-    m_worker->getFuture().wait();
-
-    RUN_BASIC_TEST_CHECKS(handler);
-}
-
-//-----------------------------------------------------------------------------
-void doNothing()
-{}
-
-void runFromOutsideTest(TestHandler &handler, ::fwThread::Worker::sptr worker)
-{
-    //waiting for WorkerWx to start
-    worker->postTask<void>( ::boost::bind( &doNothing ) ).wait();
-
-    runBasicTest(handler, worker);
-}
-
-void WorkerWxTest::postFromOutsideTest()
-{
-    TestHandler handler;
-
-    ::boost::thread testThread(
-            ::boost::bind(&runFromOutsideTest, ::boost::ref(handler), m_worker)
-            );
-
-    m_worker->getFuture().wait();
-
-    RUN_BASIC_TEST_CHECKS(handler);
-}
-
-//-----------------------------------------------------------------------------
-
-#define WX_TEST_START \
-    try
-
-
-#define WX_TEST_END \
-    catch(CppUnit::Exception &e) \
-    { \
-        std::cerr << e.what() << std::endl; \
-        exception = e; \
-        ::wxExit(); \
-        return; \
-    }
-
-static CppUnit::Exception exception;
-
-void echo()
-{
-}
-
-
-
-void runBasicTimerTest(
-        TestHandler &handler,
-        const ::fwThread::Timer::sptr &timer,
-        ::fwThread::Timer::TimeDurationType duration
-        )
-{
-    timer->start();
-
-    WX_TEST_START
-    {
-    CPPUNIT_ASSERT(timer->isRunning());
-    CPPUNIT_ASSERT(handler.m_threadCheckOk);
-    CPPUNIT_ASSERT_EQUAL(0, handler.m_step);
-    }
-    WX_TEST_END
-}
-
-
-void oneShotBasicTimerTest(
-        int &i,
-        TestHandler &handler,
-        const ::fwThread::Timer::sptr &timer,
-        ::fwThread::Timer::TimeDurationType duration,
-        const ::fwThread::Worker::sptr &worker
-        )
-{
-
-    handler.nextStepNoSleep();
-
-    WX_TEST_START
-    {
-        CPPUNIT_ASSERT(timer->isRunning());
-        CPPUNIT_ASSERT(handler.m_threadCheckOk);
-        CPPUNIT_ASSERT_EQUAL(i, handler.m_step);
-    }
-    WX_TEST_END;
-
-
-    if(++i == 50)
-    {
-        timer->stop();
-
-        WX_TEST_START
-        {
-            CPPUNIT_ASSERT(!timer->isRunning());
-            CPPUNIT_ASSERT(handler.m_threadCheckOk);
-            CPPUNIT_ASSERT_EQUAL(49, handler.m_step);
-        }
-        WX_TEST_END;
-        worker->post( ::boost::bind( &onExit ) );
-    }
-}
-
-void WorkerWxTest::basicTimerTest()
-{
-    {
-
-        TestHandler handler;
-        handler.setWorkerId(m_worker->getThreadId());
-
-        ::fwThread::Timer::sptr timer = m_worker->createTimer();
-
-        ::fwThread::Timer::TimeDurationType duration = ::boost::chrono::milliseconds(10) ;
-
-        int i = 1;
-        timer->setFunction(
-                ::boost::bind(
-                    &oneShotBasicTimerTest,
-                    boost::ref(i), handler, ::boost::ref(timer), duration, ::boost::ref(m_worker) )
-                );
-        timer->setDuration(duration);
-
-        CPPUNIT_ASSERT(!timer->isRunning());
-        CPPUNIT_ASSERT(handler.m_threadCheckOk);
-        CPPUNIT_ASSERT_EQUAL(0, handler.m_step);
-
-        m_worker->post( boost::bind(&runBasicTimerTest, ::boost::ref(handler), ::boost::ref(timer), duration) );
-
-
-        ::fwThread::Worker::FutureType future = m_worker->getFuture();
-        future.wait();
-
-        CPPUNIT_ASSERT( future.has_value() );
-        CPPUNIT_ASSERT_EQUAL( 0, boost::any_cast<int>( future.get() ) );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-
-
-} //namespace ut
-} //namespace fwGuiWx
diff --git a/SrcLib/core/fwJobs/CMakeLists.txt b/SrcLib/core/fwJobs/CMakeLists.txt
new file mode 100644
index 0000000..1169074
--- /dev/null
+++ b/SrcLib/core/fwJobs/CMakeLists.txt
@@ -0,0 +1,3 @@
+fwLoadProperties()
+
+
diff --git a/SrcLib/core/fwJobs/Properties.cmake b/SrcLib/core/fwJobs/Properties.cmake
new file mode 100644
index 0000000..f68b886
--- /dev/null
+++ b/SrcLib/core/fwJobs/Properties.cmake
@@ -0,0 +1,7 @@
+
+set( NAME fwJobs )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES  fwCom fwThread fwCore )
+set( REQUIREMENTS  )
+
diff --git a/SrcLib/core/fwJobs/include/fwJobs/Aggregator.hpp b/SrcLib/core/fwJobs/include/fwJobs/Aggregator.hpp
new file mode 100644
index 0000000..ff977a6
--- /dev/null
+++ b/SrcLib/core/fwJobs/include/fwJobs/Aggregator.hpp
@@ -0,0 +1,144 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWJOBS_AGGREGATOR_HPP__
+#define __FWJOBS_AGGREGATOR_HPP__
+
+#include "fwJobs/config.hpp"
+#include "fwJobs/IJob.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <boost/multi_index_container.hpp>
+#include <boost/multi_index/hashed_index.hpp>
+#include <boost/multi_index/ordered_index.hpp>
+#include <boost/multi_index/random_access_index.hpp>
+#include <boost/multi_index/identity.hpp>
+#include <boost/multi_index/member.hpp>
+
+#include <cstdint>
+#include <functional>
+#include <string>
+
+namespace fwJobs
+{
+
+/**
+ * @brief This class manages an aggregation of IJob.
+ */
+class FWJOBS_CLASS_API Aggregator : public IJob
+{
+public:
+
+    /**
+     * @name Typedefs
+     * @{ */
+    typedef SPTR (::fwJobs::Aggregator) sptr;
+    typedef WPTR (::fwJobs::Aggregator) wptr;
+
+    /// Aggregator container type
+    typedef ::boost::multi_index_container< ::fwJobs::IJob::sptr,
+                                            ::boost::multi_index::indexed_by<
+                                                ::boost::multi_index::random_access<>,
+                                                ::boost::multi_index::hashed_unique<
+                                                    ::boost::multi_index::identity< ::fwJobs::IJob::sptr >
+                                                    >
+                                                >
+                                            > IJobSeq;
+    /**  @} */
+
+    /**
+     * @brief Create a new Aggregator smart pointer
+     *
+     * @param name The job's name
+     *
+     * @return A pointer to a new Aggregator
+     */
+    FWJOBS_API static sptr New(const std::string& name = "");
+
+    /// Default constructor. The name is initialized with an empty string
+    FWJOBS_API Aggregator();
+
+    /**
+     * @brief Constructor
+     *
+     * @param name The job's name
+     */
+    FWJOBS_API Aggregator(const std::string& name);
+
+    /**
+     * @brief Add an IJob to the Aggregator
+     * @warning Be careful not to add an aggregator to itself, directly or
+     * indirectly (through other aggregators for instance).
+     *
+     * @param iJob the IJob to add to the Aggregator
+     * @param weight added IJob's weight. Avoid values lower than 0.01
+     */
+    FWJOBS_API void add(const ::fwJobs::IJob::sptr & iJob, double weight = 1.);
+
+    /**
+     * @brief Retrieve sub job sequence of the Aggregator
+     *
+     * @return The job aggregator container
+     */
+    FWJOBS_API IJobSeq getSubJobs();
+
+
+protected:
+
+    /**
+     * @brief Run all the jobs of the Aggregator
+     *
+     * @return future of all the IJobs of the Aggregator
+     */
+    FWJOBS_API SharedFuture runImpl();
+
+private:
+
+    /// The IJob container
+    IJobSeq m_jobs;
+
+    /// Hold sub job info
+    struct JobInfo
+    {
+        std::uint64_t doneWork;
+        std::uint64_t totalWork;
+        std::uint64_t lastValue;
+
+        JobInfo() : doneWork(0), totalWork(0), lastValue(0)
+        {
+        }
+
+        JobInfo(std::uint64_t d, std::uint64_t t) :
+            doneWork(d),
+            totalWork(t),
+            lastValue(0)
+        {
+        }
+
+        JobInfo( const IJob &iJob ) :
+            doneWork(iJob.getDoneWorkUnits()),
+            totalWork(iJob.getTotalWorkUnits()),
+            lastValue(0)
+        {
+        }
+
+        double progress() const
+        {
+            return ( 0 == totalWork ) ? 1. : double(doneWork)/totalWork;
+        }
+    };
+
+    /// Job info map type
+    typedef std::map< fwJobs::IJob*, JobInfo > JobInfoMap;
+
+    /// Map containing job info
+    JobInfoMap m_jobInfo;
+};
+
+} //namespace fwJobs
+
+#endif //__FWJOBS_AGGREGATOR_HPP__
diff --git a/SrcLib/core/fwJobs/include/fwJobs/IJob.hpp b/SrcLib/core/fwJobs/include/fwJobs/IJob.hpp
new file mode 100644
index 0000000..edf1d3a
--- /dev/null
+++ b/SrcLib/core/fwJobs/include/fwJobs/IJob.hpp
@@ -0,0 +1,421 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWJOBS_IJOB_HPP__
+#define __FWJOBS_IJOB_HPP__
+
+#include "fwJobs/config.hpp"
+
+#include <fwCom/Signal.hpp>
+
+#include <fwCore/mt/types.hpp>
+
+#include <boost/thread/future.hpp>
+
+#include <cstdint>
+#include <functional>
+#include <string>
+#include <vector>
+
+namespace fwJobs
+{
+
+/**
+ * @brief This class is an interface for class managing job.
+ */
+class FWJOBS_CLASS_API IJob
+{
+public:
+
+    /**
+     * @brief Job's states
+     *
+     * State :
+     * - WAITING : The job is ready to be used
+     * - RUNNING : The job is currently running
+     * - CANCELING : The job received a cancel request
+     * - CANCELED : The job is canceled
+     * - FINISHED : The job have finished to run his task
+     */
+    enum State
+    {
+        WAITING = 0,
+        RUNNING,
+        CANCELING,
+        CANCELED,
+        FINISHED
+    };
+
+    /**
+     * @name Typedef used in IJob
+     * @{ */
+    typedef SPTR (::fwJobs::IJob) sptr;
+    typedef WPTR (::fwJobs::IJob) wptr;
+
+    /// Cancel request callback type
+    typedef std::function< bool () > CancelRequestCallback;
+
+    /// Job cancel callback type for cancel hook
+    typedef std::function< void (IJob&) > JobCancelHook;
+
+    /// Log callback type for log hook
+    typedef std::function< void (IJob&, const std::string &) > LogHook;
+
+    /// Done work callback type for done work hook
+    typedef std::function< void (IJob&, std::uint64_t /*oldDoneWork*/) > DoneWorkHook;
+
+    /// Work units callback type for total work unit hook
+    typedef std::function< void (IJob&, std::uint64_t /*oldTotalWorkUnits*/) > TotalWorkUnitsHook;
+
+    /// Cancel callback type for cancel hook
+    typedef std::function< void () > CancelHook;
+
+    /// State callback type for state hook
+    typedef std::function< void ( State ) > StateHook;
+
+    /// Job cancel callback sequence type for cancel hook
+    typedef std::vector< JobCancelHook > CancelHookSeq;
+
+    /// Done work callback sequence type for done work hook
+    typedef std::vector< DoneWorkHook > DoneWorkHookSeq;
+
+    /// Work units callback sequence type for total work unit hook
+    typedef std::vector< TotalWorkUnitsHook > TotalWorkUnitsHookSeq;
+
+    /// Log callback sequence type for log hook
+    typedef std::vector< LogHook > LogHookSeq;
+
+    /// Log callback sequence type for state hook
+    typedef std::vector< StateHook > StateHookSeq;
+
+    /// Log container type
+    typedef std::vector< std::string > Logs;
+
+    /// State signal type
+    typedef ::fwCom::Signal< void () > StateSignal;
+
+    /// Cancel request signal type
+    typedef ::fwCom::Signal< void () > CancelRequestedSignal;
+
+    /// Done work signal type
+    typedef ::fwCom::Signal< void (std::uint64_t, std::uint64_t) > DoneWorkSignal;
+
+    /// Log signal type
+    typedef ::fwCom::Signal< void (std::string) > LogSignal;
+
+    /// Future type
+    typedef ::boost::shared_future< void > SharedFuture;
+    /**  @} */
+
+    /**
+     * @brief Default constructor.
+     *
+     * @param name The name of the job.
+     */
+    FWJOBS_API IJob(const std::string &name = "");
+
+    /// Default destructor.
+    FWJOBS_API virtual ~IJob();
+
+    /// Getter on the number of done work units.
+    FWJOBS_API std::uint64_t getDoneWorkUnits() const;
+
+    /// Getter on the total number of work units.
+    FWJOBS_API std::uint64_t getTotalWorkUnits() const;
+
+    /// Getter on the current State. @see State
+    FWJOBS_API State getState() const;
+
+    ///Getter on the name of the job.
+    FWJOBS_API const std::string& getName() const;
+
+    /// Getter on the log container
+    FWJOBS_API Logs getLogs() const;
+
+    /// Getter on cancelable, returns whether the job is cancelable.
+    FWJOBS_API bool isCancelable() const;
+
+    /// Setter on cancelable.
+    FWJOBS_API void setCancelable(bool cancel);
+
+
+    /**
+     * @brief Run the current job
+     *
+     * @return future on the current running job
+     */
+    FWJOBS_API SharedFuture run();
+
+    /**
+     * @brief Wait job execution ending.
+     *
+     * This method raise a ::fwJobs::exception::Waiting Exception if the job is
+     * not running.
+     *
+     */
+    FWJOBS_API void wait();
+
+
+    /**
+     * @brief Returns the job canceling status.
+     *
+     * @return A boolean: true if cancel have been requested.
+     */
+    FWJOBS_API const bool &cancelRequested() const;
+
+    /**
+     * @brief Returns a callback on job canceling status.
+     * This callback can only be used if the job is still instanciated.
+     * @return A callback to check if the job have been requested.
+     */
+    FWJOBS_API CancelRequestCallback cancelRequestedCallback() const;
+
+    /**
+     * @brief Cancel the current job and call all available cancel callbacks
+     *
+     * @return  A future on the current running job or an empty future if the job
+     * is canceled
+     */
+    FWJOBS_API virtual SharedFuture cancel();
+
+
+    /**
+     * @brief Add cancel callback to sequence for cancel hook
+     *
+     * @param callback cancel callback
+     */
+    FWJOBS_API void addSimpleCancelHook(CancelHook callback);
+
+    /**
+     * @brief Add cancel callback to sequence for cancel hook
+     *
+     * @param callback job cancel callback, taking a IJob as parameter
+     */
+    FWJOBS_API void addCancelHook(JobCancelHook callback);
+
+    /**
+     * @brief Add job done work unit callback to sequence for done work hook
+     *
+     * @param callback job done work unit callback, taking a IJob as parameter
+     */
+    FWJOBS_API void addDoneWorkHook(DoneWorkHook callback);
+
+    /**
+     * @brief Add job work unit callback to sequence for total work unit hook
+     *
+     * @param callback job work unit callback, taking a IJob as parameter
+     */
+    FWJOBS_API void addTotalWorkUnitsHook(TotalWorkUnitsHook callback);
+
+    /**
+     * @brief Add job log callback to sequence for log hook
+     *
+     * @param callback job log callback, taking a std::string message as parameter
+     */
+    FWJOBS_API void addLogHook(LogHook callback);
+
+    /**
+     * @brief Add job state callback to sequence for state hook
+     *
+     * @param callback job state callback, taking a State as parameter
+     */
+    FWJOBS_API void addStateHook(StateHook callback);
+
+
+    /**
+     * @brief Log a message.
+     *
+     * Push the message in the log container and emit a logged
+     * signal with log as parameter. finally call all log callbacks
+     *
+     * @param log the message to log
+     */
+    FWJOBS_API void log(const std::string &message);
+
+
+protected:
+
+    /**
+     * @name Not implemented
+     * @{ */
+    IJob(IJob &);
+    IJob& operator=(IJob &);
+    IJob(IJob &&);
+    IJob& operator=(IJob &&);
+    /**  @} */
+
+    /// Run an instanciated job
+    FWJOBS_API virtual SharedFuture runImpl() = 0;
+
+    /// Finish the job: set state to finished or canceled.
+    FWJOBS_API virtual void finish();
+
+    /// Finish the job without mutex lock: set the state to finished or canceled.
+    FWJOBS_API void finishNoLock();
+
+    /**
+     * @brief Return callback to finish the job.
+     *
+     * @return A callback
+     */
+    // workaround because of vs2010 issue : http://goo.gl/WHEkQ5
+    // this is fixed in vs2012 : http://goo.gl/tvO3g7
+    // TODO : remove when compiler is up to date
+    FWJOBS_API std::function< void() > finishCallback();
+
+
+    /// Getter on the state without mutex lock
+    FWJOBS_API State getStateNoLock() const;
+
+    /// Setter on the state
+    FWJOBS_API void setState( State state );
+
+    /// Setter on the state without mutex lock
+    FWJOBS_API void setStateNoLock( State state );
+
+    /// Setter on done work units
+    FWJOBS_API void doneWork( std::uint64_t units );
+
+    /**
+     * @brief Setter on done work units
+     * @warning This method leaves \p lock in an unlocked state
+     *
+     * @param units new done work units
+     * @param lock mutex to upgrade to write lock
+     */
+    FWJOBS_API void doneWork( std::uint64_t units, ::fwCore::mt::ReadToWriteLock &lock );
+
+    /// Set done work units to total work units
+    FWJOBS_API void done();
+
+    /**
+     * @brief Setter on total work units.
+     *
+     * @param units New total for work units.
+     */
+    FWJOBS_API void setTotalWorkUnits(std::uint64_t units);
+
+    /**
+     * @brief Setter on total work units
+     * @warning This method leaves \p lock in an unlocked state
+     *
+     * @param units new total work units
+     * @param lock mutex to upgrade to write lock
+     */
+    FWJOBS_API void setTotalWorkUnitsUpgradeLock( std::uint64_t units, ::fwCore::mt::ReadToWriteLock &lock );
+
+
+    /**
+     * @brief Add job cancel callback to sequence without mutex lock for cancel hook
+     *
+     * @param callback job cancel callback, taking a IJob as parameter or not
+     */
+    FWJOBS_API void addCancelHookNoLock(JobCancelHook callback);
+
+    /**
+     * @brief Add job done work unit callback to sequence without mutex lock for done work hook
+     *
+     * @param callback job done work unit callback, taking a IJob as parameter
+     */
+    FWJOBS_API void addDoneWorkHookNoLock(DoneWorkHook callback);
+
+    /**
+     * @brief Add job work unit callback to sequence without mutex lock for total work unit hook
+     *
+     * @param callback job work unit callback, taking a IJob as parameter
+     */
+    FWJOBS_API void addTotalWorkUnitsHookNoLock(TotalWorkUnitsHook callback);
+
+    /**
+     * @brief Add job log callback to sequence without mutex lock for log hook
+     *
+     * @param callback job log callback, taking a std::string message as parameter
+     */
+    FWJOBS_API void addLogHookNoLock(LogHook callback);
+
+    /**
+     * @brief Add cancel callback to sequence without mutex lock for state hook
+     *
+     * @param callback cancel callback, taking a State as parameter
+     */
+    FWJOBS_API void addStateHookNoLock(StateHook callback);
+
+
+    /**
+     * @brief Add a message to thelog sequence.
+     *
+     * @param message the message to add to the sequence
+     */
+    FWJOBS_API void logNoLock(const std::string &message);
+
+
+    /// Signal emitted when cancel has been requested
+    SPTR(CancelRequestedSignal) m_sigCancelRequested;
+
+    /// Signal emitted when te job has been canceled.
+    SPTR(StateSignal) m_sigCanceled;
+
+    /// Signal emitted when the job has been started.
+    SPTR(StateSignal) m_sigStarted;
+
+    /// Signal emitted when the job has been finished.
+    SPTR(StateSignal) m_sigFinished;
+
+    /// Signal emitted when done work units have been changed. Takes a std::uint64_t as parameter.
+    SPTR(DoneWorkSignal) m_sigDoneWork;
+
+    /// Signal emitted when a message has been added to logs. Takes a std::string as parameter.
+    SPTR(LogSignal) m_sigLogged;
+
+
+    /// Mutex to protect object access.
+    mutable ::fwCore::mt::ReadWriteMutex m_mutex;
+
+
+    /// Job's name
+    std::string m_name;
+
+    /// Logs container
+    Logs m_logs;
+
+    /// Number of work units already reached.
+    std::uint64_t m_doneWorkUnits;
+
+    /// Number of work units to reach to complete the job.
+    std::uint64_t m_totalWorkUnits;
+
+    /// Determines if cancellation has been requested. The job is/will be canceling if true.
+    bool m_cancelRequested;
+
+    /// Determines if the job can be cancelled. The job is cancelable if true.
+    bool m_cancelable;
+
+    /// Container of cancel callbacks. Cancel callbacks will be run when job is canceling.
+    CancelHookSeq m_cancelHooks;
+
+    /// Container of done work callbacks. These callbacks take nothing or a IJob as parameter.
+    DoneWorkHookSeq m_doneWorkHooks;
+
+    /// Container of total work unit callbacks. These callbacks take a IJob as parameter.
+    TotalWorkUnitsHookSeq m_totalWorkUnitsHooks;
+
+    /// Container of log callbacks. These callbacks take a std::string as parameter.
+    LogHookSeq m_logHooks;
+
+    /// Container of state callbacks. These callbacks take a State as parameter.
+    StateHookSeq m_stateHooks;
+
+    /// Job's future returned by 'run'
+    SharedFuture m_runFuture;
+
+    /// Job's state
+    State m_state;
+};
+
+} //namespace fwJobs
+
+
+#endif //__FWJOBS_IJOB_HPP__
diff --git a/SrcLib/core/fwJobs/include/fwJobs/Job.hpp b/SrcLib/core/fwJobs/include/fwJobs/Job.hpp
new file mode 100644
index 0000000..2c37a5e
--- /dev/null
+++ b/SrcLib/core/fwJobs/include/fwJobs/Job.hpp
@@ -0,0 +1,108 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWJOBS_JOB_HPP__
+#define __FWJOBS_JOB_HPP__
+
+#include "fwJobs/config.hpp"
+#include "fwJobs/IJob.hpp"
+
+#include <cstdint>
+#include <functional>
+#include <string>
+
+namespace fwThread
+{
+class Worker;
+} //namespace fwThread
+
+namespace fwJobs
+{
+
+/**
+ * @brief   This class encapsulate a task that will report it's progression
+ * The embeded task will be run at most once. Once the job is finished or has
+ * been canceled, the job (thus the task) will not be run anymore)
+ */
+class FWJOBS_CLASS_API Job : public IJob
+{
+public:
+    /**
+     * @name Typedefs
+     * @{ */
+    typedef SPTR (::fwJobs::Job) sptr;
+    typedef WPTR (::fwJobs::Job) wptr;
+
+    /// Task type
+    typedef std::function< void (Job&) > Task;
+
+    /// Progress callback type
+    typedef std::function< void (std::uint64_t) > ProgressCallback;
+    /**  @} */
+
+    /**
+     * @brief Construct a new job and return a smart pointer of it
+     *
+     * @param name name of the new job
+     * @param task The task managed by the job
+     * @param ::fwThread::Worker An optional worker to run the task on
+     *
+     * @return
+     */
+    FWJOBS_API static sptr New(const std::string &name, Task task, const SPTR(::fwThread::Worker) &worker = nullptr );
+
+    /**
+     * @brief Construct a new job
+     *
+     * @param name name of the new job
+     * @param task The task managed by the job
+     * @param ::fwThread::Worker An optional worker to run the task on
+     */
+    FWJOBS_API Job(const std::string &name, Task task, const SPTR(::fwThread::Worker) &worker = nullptr );
+
+    /**
+     * @brief Return a job callback with the done work number as parameter
+     * This callback can only be used if the job is still instantiated.
+     */
+    FWJOBS_API ProgressCallback progressCallback();
+
+    /**
+     * @name Exposed IJob methods
+     * @{
+     */
+    using IJob::doneWork;
+    using IJob::setTotalWorkUnits;
+    using IJob::done;
+    /**  @} */
+
+    ///Getter on the current job worker or nullptr if no worker has been set.
+    FWJOBS_API SPTR(::fwThread::Worker) getWorker();
+
+    /// Reimplements IJob's cancel
+    FWJOBS_API virtual SharedFuture cancel();
+
+protected:
+
+    /**
+     * @brief Run the task of the job and mark the job as finished
+     *
+     * @return future of the task
+     */
+    FWJOBS_API SharedFuture runImpl();
+
+private:
+
+    /// The task meant to be run
+    Task m_task;
+
+    /// The worker on wich the task is meant to be run
+    SPTR(::fwThread::Worker) m_worker;
+
+};
+
+} //namespace fwJobs
+
+#endif //__FWJOBS_JOB_HPP__
diff --git a/SrcLib/core/fwJobs/include/fwJobs/Observer.hpp b/SrcLib/core/fwJobs/include/fwJobs/Observer.hpp
new file mode 100644
index 0000000..0dfbd68
--- /dev/null
+++ b/SrcLib/core/fwJobs/include/fwJobs/Observer.hpp
@@ -0,0 +1,95 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWJOBS_OBSERVER_HPP__
+#define __FWJOBS_OBSERVER_HPP__
+
+#include "fwJobs/config.hpp"
+#include "fwJobs/IJob.hpp"
+
+#include <cstdint>
+#include <string>
+
+namespace fwJobs
+{
+
+/**
+ * @brief This class manages a job.
+ */
+class FWJOBS_CLASS_API Observer : public IJob
+{
+public:
+    /**
+     * @name Typedefs
+     * @{ */
+    typedef SPTR (::fwJobs::Observer) sptr;
+    typedef WPTR (::fwJobs::Observer) wptr;
+
+    /// Progress callback type
+    typedef std::function< void (std::uint64_t) > ProgressCallback;
+    /**  @} */
+
+    /**
+     * @brief Create a new Observer sptr with a name
+     *
+     * @param name The name of the job
+     *
+     * @return A pointer to a new Observer
+     */
+    FWJOBS_API static sptr New(const std::string& name, std::uint64_t workUnits = 100);
+
+    /**
+     * @brief Constructor
+     *
+     * @param name The job name
+     */
+    FWJOBS_API Observer(const std::string &name, std::uint64_t workUnits = 100);
+
+    /**
+     * @name Exposed IJob methods
+     * @{
+     */
+    using IJob::doneWork;
+    using IJob::setTotalWorkUnits;
+    using IJob::done;
+    /**  @} */
+
+    /**
+     * @brief Call for finishing observer progress
+     */
+    FWJOBS_API void finish();
+
+    /**
+     * @brief return a progress Callback function.
+     * This function takes work units in parameter.
+     * @warning This callback can only be used if the job is still instantiated.
+     */
+    FWJOBS_API ProgressCallback progressCallback();
+
+protected:
+
+    ///Exposing run function of IJob in the interface.
+    using IJob::run;
+
+    /**
+     * @brief Runs the task
+     *
+     * @return future of the task
+     */
+    FWJOBS_API virtual SharedFuture runImpl();
+
+    /// Task type
+    typedef ::boost::packaged_task< void > PackagedTask;
+
+    /// Task observed
+    PackagedTask m_finishTask;
+
+};
+
+} //namespace fwJobs
+
+
+#endif //__FWJOBS_OBSERVER_HPP__
diff --git a/SrcLib/core/fwJobs/include/fwJobs/exception/Waiting.hpp b/SrcLib/core/fwJobs/include/fwJobs/exception/Waiting.hpp
new file mode 100644
index 0000000..ee967fa
--- /dev/null
+++ b/SrcLib/core/fwJobs/include/fwJobs/exception/Waiting.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+#ifndef __FWJOBS_EXCEPTION_WAITING_HPP__
+#define __FWJOBS_EXCEPTION_WAITING_HPP__
+
+#include "fwJobs/config.hpp"
+
+#include <fwCore/Exception.hpp>
+
+namespace fwJobs
+{
+namespace exception
+{
+
+/// No worker exception.
+struct Waiting : ::fwCore::Exception
+{
+    FWJOBS_API Waiting ( const std::string &err );
+};
+
+} // namespace exception
+
+
+} // namespace fwJobs
+
+#endif /* __FWJOBS_EXCEPTION_WAITING_HPP__ */
+
+
+
diff --git a/SrcLib/core/fwJobs/include/fwJobs/namespace.hpp b/SrcLib/core/fwJobs/include/fwJobs/namespace.hpp
new file mode 100644
index 0000000..32720f9
--- /dev/null
+++ b/SrcLib/core/fwJobs/include/fwJobs/namespace.hpp
@@ -0,0 +1,280 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWJOBS_NAMESPACE_HPP__
+#define __FWJOBS_NAMESPACE_HPP__
+
+/**
+ * @page Jobs fwJobs library system
+ *
+ * @tableofcontents
+ *
+ * fwJobs library is meant to trace progress of tasks.
+ *
+ * @section JobElements Job elements
+ *
+ * Each job is composed of several elements in order to be run, to trace its
+ * run, and to plan what it could do at different events of its life.
+ *
+ * Moreover, each job has a name (generally named after the task he traces).
+ * Several logs can be added during job's life if the user wants to add details
+ * on the progression.
+ *
+ * @subsection States States
+ *
+ * A job has several life states:
+ *  - Waiting: The job is ready to be used,
+ *  - Running: The job is currently running,
+ *  - Canceling: The job received a cancel request,
+ *  - Canceled: The job is canceled,
+ *  - Finished: The job have finished to run his task.
+ *
+ * \verbatim
+ *          +-------------------------------------------
+ *          |                                          |
+ *          |                                          v
+ *          |                      +---------+     +--------+
+ *          |               +----->|Canceling|---->|Canceled|
+ *          |               |      +---------+     +--------+
+ *     +-------+     +-------+                          |
+ *     |Waiting|---->|Running|                          |
+ *     +-------+     +-------+                          v
+ *                         |       +--------+         +--+
+ *                         +------>|Finished|-------->|  |
+ *                                 +--------+         +--+
+ * \endverbatim
+ *
+ * A job is running until it is finished or canceled.
+ * \warning Therefore, a job can only be run once.
+ *
+ *
+ * @subsection WorkUnits Work units
+ *
+ * A job owns a number of total work units and a number of done work units.
+ * Work units are used to trace job's progress. The number of total work units
+ * is meant to be set before the job is running. The number of done work units
+ * updates while the job is running.
+ * Thus, progress is equal to: Done work units / Total work units.
+ * When the job is finished, the number of done work units is equal to the
+ * number of total work units.
+ *
+ *
+ * @subsection Hooks Hooks
+ *
+ * After an event (job's cancellation, log added etc.), it can be useful to
+ * perform commands.
+ *
+ * In each job, the user can hook the following events:
+ *  - Cancellation,
+ *  - State change,
+ *  - Done work unit change,
+ *  - Total work unit change,
+ *  - Log change.
+ *
+ * There can be several hooks set to one event.
+ *
+ * \warning Do not get confused by hooks methods (which add callbacks to
+ * hooks) and callbacks helpers: methods that returns a callback which can be
+ * used to modify the job. For instance progressCallback returns a callback
+ * which modify done work units of the job.
+ *
+ *
+ * @section KindsOfJobs Kinds of jobs
+ *
+ * Three different kinds of job exist to allow the user to trace progress of a
+ * task in every situation.
+ *
+ * @subsection Job Job
+ *
+ * A Job encapsulates a task and trace its progress.
+ *
+ * A Job has one important element: a function, in which are instructions to
+ * process the task and also instructions for the Job's progress. It can also
+ * have an optionnal worker on which the function will be run.
+ *
+ * When the progress is complete, that is to say the number of done work units
+ * has reached the number of total work units, the job is immediately marked as
+ * finished.
+ *
+ * Here is an example of Job use:
+ * \code{.cpp}
+
+    ::fwJobs::Job::sptr job = ::fwJobs::Job::New( "Example of Job",
+        [=](::fwJobs::Job& runningJob)
+        {
+            for( std::size_t i = 1; i<= 100; ++i)
+            {
+                if(runningJob.cancelRequested())
+                {
+                    break;
+                }
+
+                ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(1000) );
+
+                runningJob.doneWork(i);
+            }
+        },
+        worker
+        );
+
+    job.run().wait();
+
+   \endcode
+ *
+ * A Job is initialized with a function taking a job as parameter. This
+ * Job is actually the Job itself.
+ *
+ * In this example, the task is to wait 100 seconds. Every second, the job
+ * progress is updated with the method donework(). The method cancelRequested()
+ * allows to know inside the lambda if cancel has been requested while running.
+ *
+ * At the end, the job is run to perform the task.
+ *
+ * Job's progress and cancellation are feasible by other means:
+ * \code{.cpp}
+
+    ::fwJobs::Job::sptr job = ::fwJobs::Job::New( "VTK Mesh reader",
+        [=](::fwJobs::Job& runningJob)
+        {
+            ::fwVtkIO::MeshWriter::sptr writer = ::fwVtkIO::MeshWriter::New();
+
+            runningJob.addSimpleCancelHook( [=]{ writer->cancel(); });
+
+            writer->setProgressCallback( runningJob.progressCallback() );
+
+            writer->setObject(mesh);
+            writer->setFile("file.vtk"));
+            writer->write();
+        },
+        m_associatedWorker
+        );
+
+    job.run().wait();
+
+   \endcode
+ *
+ * Here, Job's progress is updated through a done work callback: this function
+ * set the number of done work units of the Job. This callback needs only the
+ * number of done work units to set. The callback is set to the writer for using
+ * it during write() and updates Job's progress.
+ *
+ * Here, another method is used to cancel the task: addSimpleCancelHook().
+ * If the Job is canceling, the lambda inside is run and cancels the write.
+ *
+ *
+ * @subsection Observer Observer
+ *
+ * An Observer does not encapsulate a task but simply observe its progress.
+ *
+ * An Observer is run immediately after it is initialized but must be finished
+ * by using the method finish().
+ *
+ * Observer are generally used where progress is already given by an external
+ * source.
+ * This is shown in the following example:
+ * \code{.cpp}
+
+    ::fwJobs::Observer observer =  ::fwJobs::Observer::New("VTK Image reader");
+
+    vtkSmartPointer<vtkLambdaCommand> progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback( [this](vtkObject* caller, long unsigned int , void* )
+                                   {
+                                       auto filter = static_cast<vtkGenericDataObjectReader*>(caller);
+                                       observer->doneWork( filter->GetProgress()*100 );
+                                   }
+                                 );
+
+    reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+    observer->addSimpleCancelHook( [&](){
+                                    reader->AbortExecuteOn();
+                                    } );
+
+    reader->Update();
+
+    observer->finish();
+
+   \endcode
+ *
+ * Here, the progress is given by the reader (here filter). The method
+ * doneWork() is embedded in the reader through a callback. Moreover, the
+ * method addSimpleCancelHook() allows to cancel the process.
+ *
+ * The whole progress process is thus done during Update().
+ *
+ * @subsection Aggregator Aggregator
+ *
+ * An Aggregator aggregate IJobs (Jobs, Observers and Aggregator) in order to
+ * gather their progress into one.
+ *
+ * The number of work units owned by a job in an Aggregator is set to 100.
+ * For instance, two jobs are present in an Aggregator. Job1 has 3 total work
+ * units and job2 has 1000 total work units.
+ * Thus the Aggregator's number of total work units is 200. 100 work units for
+ * job1 and 100 for jobs2.
+ *
+ * When adding a job to an Aggregator, an associated weight can be linked to
+ * this job. It will determine the number of work units the job takes in the
+ * Aggregator by multiplying the weight by 100 (number of work units for each
+ * job in an Aggregator). The default weight is 1.
+ * For instance, with previous job1 and job2, job1 is added to the Aggregator
+ * with a weight of 3. The Aggregator's number ot total work units is 400. 100*3
+ * for job1 and 100 for job2.
+ * Though, it is not recommended to use a weight lower than 0.01.
+ *
+ * Moreover, when adding a job to an Aggregator, job's method cancel() is
+ * added to the Aggregator through a cancel callback. Thus, when the Aggregator
+ * is cancelled, each of its subjobs are cancelled as well.
+ *
+ * Like a Job, an Aggregator must be run and is automatically marked as finished
+ * when its progress is completed. When an Aggregator is run, it calls each
+ * subjobs' run(). The Aggregator's progress is updated when a subjob's progress
+ * is changed.
+ *
+ * Below, an example of Aggregator use:
+ * \code{.cpp}
+
+    ::fwJobs::Aggregator::sptr = ::fwJobs::Aggregator::New("Example of Aggregator");
+
+    m_job->add(m_subAggregator);
+    m_job->add(m_subObserver, 3);
+    m_job->add(m_subJob);
+
+    m_job->run().wait();
+
+   \endcode
+ *
+ * @section ThreadSafe Thread safe
+ *
+ * fwJobs library is thread safe.
+ * A worker can be set to a Job.
+ *
+ * @section Tips Tips
+ *
+ * @subsection ProgressionReduced Reducing the progression
+ *
+ * A progression is not supposed to regress. It can lead to strange behaviors
+ * on fwJobs front end.
+ * Some misuse of the library can lead to this situation. These misuses are:
+ * - Add a job to an Aggregator while it is running,
+ * - Change the total of work units while the job is running,
+ * - Set a lower number of done work units to a job.
+ *
+ * It is therefore strongly recommended to be careful when using actions that
+ * can possibly change the job's number of total work units before the execution
+ * of the process.
+ *
+ */
+
+
+/**
+ * @brief       This namespace fwJobs provides jobs management.
+ * @namespace   fwJobs
+ */
+namespace fwJobs
+{
+}
+#endif /* __FWJOBS_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwJobs/src/fwJobs/Aggregator.cpp b/SrcLib/core/fwJobs/src/fwJobs/Aggregator.cpp
new file mode 100644
index 0000000..6bcae66
--- /dev/null
+++ b/SrcLib/core/fwJobs/src/fwJobs/Aggregator.cpp
@@ -0,0 +1,188 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwJobs/Aggregator.hpp"
+#include "fwJobs/Job.hpp"
+#include "fwJobs/exception/Waiting.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
+
+#include <memory>
+
+namespace fwJobs
+{
+
+Aggregator::sptr Aggregator::New(const std::string& name)
+{
+    return std::make_shared<Aggregator>( name );
+}
+
+//------------------------------------------------------------------------------
+
+Aggregator::Aggregator()
+{
+}
+
+//------------------------------------------------------------------------------
+
+Aggregator::Aggregator(const std::string &name) : IJob(name)
+{
+}
+
+//------------------------------------------------------------------------------
+
+IJob::SharedFuture Aggregator::runImpl()
+{
+    decltype(m_jobs)jobs;
+
+    {
+        ::fwCore::mt::ReadLock lock(m_mutex);
+        jobs = m_jobs;
+    }
+
+    std::vector< SharedFuture > futures;
+    for(const ::fwJobs::IJob::sptr &iJob : jobs)
+    {
+        futures.push_back(iJob->run());
+    }
+
+    auto future = boost::async(
+        [ = ]() mutable
+        {
+            boost::wait_for_all(futures.begin(), futures.end());
+
+            this->finish();
+
+            // forwards exceptions that might have been thrown
+            for( SharedFuture f : futures )
+            {
+                f.get();
+            }
+        }
+        );
+
+    return ::boost::move(future);
+}
+
+//------------------------------------------------------------------------------
+
+void Aggregator::add(const ::fwJobs::IJob::sptr &iJob, double weight)
+{
+    SLM_ASSERT("iJob shall not be null", iJob);
+
+    SLM_ASSERT("iJob shall not be added to itself", this!=iJob.get());
+
+    if(!iJob)
+    {
+        return;
+    }
+
+    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
+
+    SLM_ASSERT("Jobs can't be added when Aggregator is running", m_state == WAITING || m_state == RUNNING);
+
+    const auto normValue = std::uint64_t(weight*100);
+
+    if( m_state == WAITING || m_state == RUNNING )
+    {
+        m_jobInfo[iJob.get()] = JobInfo( *iJob );
+        auto &jobInfo = m_jobInfo[iJob.get()];
+
+        this->setTotalWorkUnitsUpgradeLock( m_totalWorkUnits + (jobInfo.totalWork ? normValue : 0), lock);
+        lock.lock();
+        // doneWork call after setTotalWorkUnitsUpgradeLock, because
+        // doneWork value can be thresholded by setTotalWorkUnitsUpgradeLock
+        // call
+        jobInfo.lastValue = std::uint64_t(jobInfo.progress() * normValue);
+        {
+            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+            m_jobs.push_back(iJob);
+        }
+        // take care : doneWork unlocks 'lock'
+        this->doneWork(jobInfo.lastValue, lock);
+
+        // TODO : add a way to disconnect on aggregator destruction
+        iJob->addDoneWorkHook(
+            [ =, &jobInfo](IJob& subJob, std::uint64_t oldDoneWork)
+            {
+                ::fwCore::mt::ReadToWriteLock sublock(m_mutex);
+
+                auto oldInfo = jobInfo;
+                jobInfo = Aggregator::JobInfo( subJob );
+
+                jobInfo.lastValue = std::uint64_t(normValue * jobInfo.progress());
+
+
+                auto doneWork = m_doneWorkUnits + jobInfo.lastValue;
+                // minimize numerical uncertainty by substracting in a second time :
+                doneWork -= oldInfo.lastValue;
+
+
+                this->doneWork( static_cast<std::uint64_t>(doneWork), sublock );
+            }
+            );
+
+
+        iJob->addTotalWorkUnitsHook(
+            [ = ](IJob& subJob, std::uint64_t oldTotalWorkUnits)
+            {
+                ::fwCore::mt::ReadToWriteLock sublock(m_mutex);
+
+                auto workUnits = m_totalWorkUnits;
+                auto newTotalWorkUnits = subJob.getTotalWorkUnits();
+
+                if( oldTotalWorkUnits != newTotalWorkUnits)
+                {
+                    if( oldTotalWorkUnits && 0 == newTotalWorkUnits)
+                    {
+                        workUnits -= normValue;
+                    }
+                    else if( 0 == oldTotalWorkUnits && newTotalWorkUnits)
+                    {
+                        workUnits += normValue;
+                    }
+                }
+
+                this->setTotalWorkUnitsUpgradeLock( workUnits, sublock );
+            }
+            );
+
+
+        this->addCancelHookNoLock( [iJob]( IJob& /* cancelingJob */ )
+            {
+                iJob->cancel();
+            } );
+
+        auto iJobName = iJob->getName();
+        iJobName = iJobName.empty() ? "" : "[" + iJobName + "] ";
+        iJob->addLogHook( [ = ]( IJob& /* job */, const std::string &message)
+            {
+                this->log( iJobName + message);
+            } );
+
+        auto iJobLogs = iJob->getLogs();
+        std::for_each(iJobLogs.begin(), iJobLogs.end(),
+                      [&]( const Logs::value_type& message )
+            {
+                this->logNoLock(iJobName + message);
+            }
+                      );
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+Aggregator::IJobSeq Aggregator::getSubJobs()
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_jobs;
+}
+
+} //namespace fwJobs
diff --git a/SrcLib/core/fwJobs/src/fwJobs/IJob.cpp b/SrcLib/core/fwJobs/src/fwJobs/IJob.cpp
new file mode 100644
index 0000000..1422273
--- /dev/null
+++ b/SrcLib/core/fwJobs/src/fwJobs/IJob.cpp
@@ -0,0 +1,482 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwJobs/IJob.hpp"
+
+#include "fwJobs/exception/Waiting.hpp"
+
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <algorithm>
+
+
+namespace fwJobs
+{
+
+IJob::IJob(const std::string &name) :
+    m_sigCancelRequested(CancelRequestedSignal::New()),
+    m_sigCanceled(StateSignal::New()),
+    m_sigStarted(StateSignal::New()),
+    m_sigFinished(StateSignal::New()),
+    m_sigDoneWork(DoneWorkSignal::New()),
+    m_sigLogged(LogSignal::New()),
+    m_name(name),
+    m_doneWorkUnits(0),
+    m_totalWorkUnits(0),
+    m_cancelRequested(false),
+    m_cancelable(true),
+    m_state(WAITING)
+{
+}
+
+//------------------------------------------------------------------------------
+
+IJob::~IJob()
+{
+    std::for_each(m_stateHooks.begin(), m_stateHooks.end(),
+                  [&]( const StateHookSeq::value_type& f )
+        {
+            f(m_state);
+        } );
+}
+
+//------------------------------------------------------------------------------
+
+const bool& IJob::cancelRequested() const
+{
+    // ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_cancelRequested;
+}
+
+//------------------------------------------------------------------------------
+
+IJob::CancelRequestCallback IJob::cancelRequestedCallback() const
+{
+    return [this]()->bool
+           {
+               ::fwCore::mt::ReadLock lock(m_mutex);
+               return m_cancelRequested;
+           };
+}
+
+//------------------------------------------------------------------------------
+
+std::uint64_t IJob::getDoneWorkUnits() const
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_doneWorkUnits;
+}
+
+//------------------------------------------------------------------------------
+
+std::uint64_t IJob::getTotalWorkUnits() const
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_totalWorkUnits;
+}
+
+//------------------------------------------------------------------------------
+
+IJob::SharedFuture IJob::cancel()
+{
+    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
+    if( m_cancelable && (m_state == WAITING || m_state == RUNNING) )
+    {
+        State nextState = (m_state == WAITING) ? CANCELED : CANCELING;
+
+        {
+            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+            m_cancelRequested = true;
+            this->setStateNoLock(CANCELING);
+        }
+
+        // unlock mutex for cancel callbacks sanity
+        lock.unlock();
+        // m_cancelHooks can not be changed when m_state != WAITING or
+        // RUNNING, no need to lock m_mutex
+        for(auto cancel : m_cancelHooks)
+        {
+            (cancel)(*this);
+        }
+        lock.lock();
+
+        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+
+        SLM_ASSERT("State shall be only CANCELING or CANCELED, not " << m_state,
+                   m_state == CANCELED || m_state == CANCELING);
+
+        if(m_state == CANCELING)
+        {
+            this->setStateNoLock(nextState);
+
+            if(nextState == CANCELED)
+            {
+                m_runFuture = ::boost::make_shared_future();
+            }
+        }
+    }
+    // else if (m_state == CANCELING)
+    // NOP
+    return m_runFuture;
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addCancelHook(JobCancelHook callback)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->addCancelHookNoLock(callback);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addSimpleCancelHook(CancelHook callback)
+{
+    this->addCancelHook(JobCancelHook([ = ](IJob& /*job*/)
+        {
+            callback();
+        }));
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addDoneWorkHook(DoneWorkHook callback)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->addDoneWorkHookNoLock(callback);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addTotalWorkUnitsHook(TotalWorkUnitsHook callback)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->addTotalWorkUnitsHookNoLock(callback);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addLogHook(LogHook callback)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->addLogHookNoLock(callback);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addStateHook(StateHook callback)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->addStateHookNoLock(callback);
+}
+
+//------------------------------------------------------------------------------
+
+IJob::State IJob::getState() const
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_state;
+}
+
+//------------------------------------------------------------------------------
+
+const std::string& IJob::getName() const
+{
+    return m_name; //Does not need to lock mutex, the name can't be changed
+}
+
+//------------------------------------------------------------------------------
+
+IJob::SharedFuture IJob::run()
+{
+    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
+
+    if( m_state == WAITING )
+    {
+        {
+            ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+            this->setStateNoLock(RUNNING);
+        }
+
+        lock.unlock();
+        auto future = this->runImpl();
+        lock.lock();
+
+        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+        m_runFuture = future;
+    }
+
+    return m_runFuture;
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::setState(IJob::State state)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->setStateNoLock(state);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::setStateNoLock(IJob::State state)
+{
+    m_state = state;
+    switch(state)
+    {
+        case WAITING:
+            break;
+        case RUNNING:
+            m_sigStarted->asyncEmit();
+            break;
+        case CANCELING:
+            m_sigCancelRequested->asyncEmit();
+            break;
+        case CANCELED:
+            m_sigCanceled->asyncEmit();
+            break;
+        case FINISHED:
+            m_sigFinished->asyncEmit();
+            break;
+        default:
+            SLM_ASSERT("You shall not pass !", 0);
+    }
+
+    std::for_each(m_stateHooks.begin(), m_stateHooks.end(),
+                  [&]( const StateHookSeq::value_type& f )
+        {
+            f(m_state);
+        } );
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::finish()
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->finishNoLock();
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::finishNoLock()
+{
+    this->setStateNoLock( ( m_state == CANCELING ) ? CANCELED : FINISHED );
+}
+
+//------------------------------------------------------------------------------
+
+std::function< void() > IJob::finishCallback()
+{
+    return [ = ] { this->finish(); };
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::wait()
+{
+    decltype (m_runFuture)runFuture;
+    {
+        ::fwCore::mt::ReadLock lock(m_mutex);
+        runFuture = m_runFuture;
+    }
+
+    try
+    {
+        runFuture.wait();
+    }
+    catch( boost::future_uninitialized & )
+    {
+        FW_RAISE_EXCEPTION( ::fwJobs::exception::Waiting("Job has not been started") );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::log(const std::string &message)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    this->logNoLock(message);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::logNoLock(const std::string &message)
+{
+    m_logs.push_back(message);
+
+    m_sigLogged->asyncEmit(message);
+
+    std::for_each(m_logHooks.begin(), m_logHooks.end(),
+                  [&]( const LogHookSeq::value_type& f )
+        {
+            f(*this, message);
+        } );
+}
+
+//------------------------------------------------------------------------------
+
+IJob::State IJob::getStateNoLock() const
+{
+    return m_state;
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addCancelHookNoLock(JobCancelHook callback)
+{
+    if(m_state == WAITING || m_state == RUNNING)
+    {
+        m_cancelHooks.push_back(callback);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addDoneWorkHookNoLock(DoneWorkHook callback)
+{
+    if(m_state == WAITING || m_state == RUNNING)
+    {
+        m_doneWorkHooks.push_back(callback);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addTotalWorkUnitsHookNoLock(TotalWorkUnitsHook callback)
+{
+    if(m_state == WAITING || m_state == RUNNING)
+    {
+        m_totalWorkUnitsHooks.push_back(callback);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addLogHookNoLock(LogHook callback)
+{
+    m_logHooks.push_back(callback);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::addStateHookNoLock(StateHook callback)
+{
+    m_stateHooks.push_back(callback);
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::doneWork( std::uint64_t units )
+{
+    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
+    this->doneWork( units, lock );
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::doneWork( std::uint64_t units, ::fwCore::mt::ReadToWriteLock &lock )
+{
+    auto oldDoneWork = m_doneWorkUnits;
+    decltype(m_doneWorkHooks)doneWorkHooks;
+
+    if(m_doneWorkUnits == units)
+    {
+        return;
+    }
+
+    doneWorkHooks = m_doneWorkHooks;
+
+    {
+        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+        m_doneWorkUnits = units;
+    }
+
+    m_sigDoneWork->asyncEmit(m_doneWorkUnits, m_totalWorkUnits);
+
+    lock.unlock();
+
+    std::for_each(doneWorkHooks.begin(), doneWorkHooks.end(),
+                  [&]( const DoneWorkHookSeq::value_type& f )
+        {
+            f(*this, oldDoneWork);
+        } );
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::setTotalWorkUnits(std::uint64_t units)
+{
+    ::fwCore::mt::ReadToWriteLock lock(m_mutex);
+    this->setTotalWorkUnitsUpgradeLock( units, lock );
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::setTotalWorkUnitsUpgradeLock( std::uint64_t units, ::fwCore::mt::ReadToWriteLock &lock )
+{
+    auto oldTotalWorkUnits = m_totalWorkUnits;
+    decltype(m_totalWorkUnitsHooks)totalWorkUnitsHook;
+
+    totalWorkUnitsHook = m_totalWorkUnitsHooks;
+
+    if(m_doneWorkUnits > units)
+    {
+        this->doneWork( units, lock );
+    }
+
+    {
+        ::fwCore::mt::UpgradeToWriteLock writeLock(lock);
+        m_totalWorkUnits = units;
+    }
+
+    lock.unlock();
+    std::for_each(totalWorkUnitsHook.begin(), totalWorkUnitsHook.end(),
+                  [&]( const TotalWorkUnitsHookSeq::value_type& f )
+        {
+            f(*this, oldTotalWorkUnits);
+        } );
+}
+
+//------------------------------------------------------------------------------
+
+IJob::Logs IJob::getLogs() const
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_logs;
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::setCancelable(bool cancel)
+{
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    m_cancelable = cancel;
+}
+
+//------------------------------------------------------------------------------
+
+bool IJob::isCancelable() const
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return m_cancelable;
+}
+
+//------------------------------------------------------------------------------
+
+void IJob::done()
+{
+    this->doneWork(m_totalWorkUnits);
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace fwJobs
diff --git a/SrcLib/core/fwJobs/src/fwJobs/Job.cpp b/SrcLib/core/fwJobs/src/fwJobs/Job.cpp
new file mode 100644
index 0000000..ec040dd
--- /dev/null
+++ b/SrcLib/core/fwJobs/src/fwJobs/Job.cpp
@@ -0,0 +1,111 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#define BOOST_SCOPE_EXIT_CONFIG_USE_LAMBDAS
+
+#include "fwJobs/Job.hpp"
+
+#include "fwJobs/exception/Waiting.hpp"
+
+#include <fwThread/Worker.hpp>
+#include <fwThread/Worker.hxx>
+
+#include <boost/scope_exit.hpp>
+
+#include <memory>
+
+namespace fwJobs
+{
+
+Job::sptr Job::New(const std::string &name, Job::Task task, const ::fwThread::Worker::sptr &worker)
+{
+    return std::make_shared<Job>( name, task, worker );
+}
+
+//------------------------------------------------------------------------------
+
+Job::Job(const std::string &name, Job::Task task, const ::fwThread::Worker::sptr &worker) : IJob(name),
+                                                                                            m_task(task),
+                                                                                            m_worker(worker)
+{
+    m_totalWorkUnits = 100;
+}
+
+//------------------------------------------------------------------------------
+
+IJob::SharedFuture Job::runImpl()
+{
+    // No need to lock : m_task & m_worker only writable in contructor
+    if(m_task)
+    {
+        // workaround because of vs2010 issue : http://goo.gl/WHEkQ5
+        // see IJob.hpp
+        auto fCallback = this->finishCallback();
+
+        auto jobTask = [ = ]()
+                       {
+                           BOOST_SCOPE_EXIT_ALL( = )
+                           {
+                               fCallback();
+                               ::fwCore::mt::WriteLock lock(m_mutex);
+                               m_task = nullptr;
+                           };
+
+                           m_task(*this);
+                       };
+        if(m_worker)
+        {
+            return m_worker->postTask< void >( jobTask );
+        }
+        else
+        {
+            jobTask();
+        }
+    }
+    else
+    {
+        this->finish();
+    }
+
+    return ::boost::move(::boost::async( []()
+        {
+        } ));
+}
+
+
+//------------------------------------------------------------------------------
+
+IJob::SharedFuture Job::cancel()
+{
+    auto future = this->IJob::cancel();
+    ::fwCore::mt::WriteLock lock(m_mutex);
+    if (m_task)
+    {
+        m_task = nullptr;
+    }
+    return future;
+}
+
+//------------------------------------------------------------------------------
+
+Job::ProgressCallback Job::progressCallback()
+{
+    return [this](std::uint64_t doneWork)
+           {
+               this->doneWork(doneWork);
+           };
+}
+
+
+//------------------------------------------------------------------------------
+
+::fwThread::Worker::sptr Job::getWorker()
+{
+    // No need to lock : m_worker only writable in contructor
+    return m_worker;
+}
+
+} //namespace fwJobs
diff --git a/SrcLib/core/fwJobs/src/fwJobs/Observer.cpp b/SrcLib/core/fwJobs/src/fwJobs/Observer.cpp
new file mode 100644
index 0000000..f08617f
--- /dev/null
+++ b/SrcLib/core/fwJobs/src/fwJobs/Observer.cpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwJobs/Observer.hpp"
+
+namespace fwJobs
+{
+
+Observer::sptr Observer::New(const std::string& name, std::uint64_t workUnits)
+{
+    return std::make_shared<Observer>( name, workUnits );
+}
+
+//------------------------------------------------------------------------------
+
+Observer::Observer(const std::string &name, std::uint64_t workUnits) : IJob(name)
+{
+    m_finishTask = PackagedTask([this]()
+        {
+            ::fwCore::mt::WriteLock lock(m_mutex);
+            this->finishNoLock();
+        });
+    m_totalWorkUnits = workUnits;
+
+    this->addSimpleCancelHook( [this]()
+        {
+            this->finish();
+        } );
+    this->run();
+}
+
+//------------------------------------------------------------------------------
+
+Observer::ProgressCallback Observer::progressCallback()
+{
+    return [this](std::uint64_t doneWork)
+           {
+               this->doneWork(doneWork);
+           };
+}
+
+//------------------------------------------------------------------------------
+
+void Observer::finish()
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    if( m_state == RUNNING || m_state == CANCELING )
+    {
+        lock.unlock();
+        m_finishTask();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+IJob::SharedFuture Observer::runImpl()
+{
+    ::fwCore::mt::ReadLock lock(m_mutex);
+    return ::boost::move(m_finishTask.get_future());
+}
+
+
+} //namespace fwJobs
diff --git a/SrcLib/core/fwJobs/src/fwJobs/exception/Waiting.cpp b/SrcLib/core/fwJobs/src/fwJobs/exception/Waiting.cpp
new file mode 100644
index 0000000..906aead
--- /dev/null
+++ b/SrcLib/core/fwJobs/src/fwJobs/exception/Waiting.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwJobs/exception/Waiting.hpp"
+#include "fwJobs/config.hpp"
+
+#include <fwCore/Exception.hpp>
+
+namespace fwJobs
+{
+
+namespace exception
+{
+
+Waiting::Waiting ( const std::string &err ) : ::fwCore::Exception(err)
+{
+}
+
+} // namespace exception
+
+} // namespace fwJobs
+
+
diff --git a/SrcLib/core/fwJobs/test/CMakeLists.txt b/SrcLib/core/fwJobs/test/CMakeLists.txt
new file mode 100644
index 0000000..f202181
--- /dev/null
+++ b/SrcLib/core/fwJobs/test/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+fwLoadProperties()
+
+
+find_package (Boost COMPONENTS chrono REQUIRED)
+find_package(CppUnit)
+
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+
+
+
diff --git a/SrcLib/core/fwJobs/test/Properties.cmake b/SrcLib/core/fwJobs/test/Properties.cmake
new file mode 100644
index 0000000..69f5d9f
--- /dev/null
+++ b/SrcLib/core/fwJobs/test/Properties.cmake
@@ -0,0 +1,7 @@
+
+set( NAME fwJobsTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES fwCore fwTest fwThread fwJobs)
+set( REQUIREMENTS )
+
diff --git a/SrcLib/core/fwJobs/test/tu/include/JobTest.hpp b/SrcLib/core/fwJobs/test/tu/include/JobTest.hpp
new file mode 100644
index 0000000..b4389b5
--- /dev/null
+++ b/SrcLib/core/fwJobs/test/tu/include/JobTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWJOBS_UT_JOBTEST_HPP__
+#define __FWJOBS_UT_JOBTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwJobs
+{
+namespace ut
+{
+
+class JobTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( JobTest );
+CPPUNIT_TEST( APIAndStateTest );
+CPPUNIT_TEST( GenericCallbackTest );
+CPPUNIT_TEST( ObserverTest );
+CPPUNIT_TEST( LogTest );
+CPPUNIT_TEST( AggregationTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void APIAndStateTest();
+    void GenericCallbackTest();
+    void LogTest();
+    void AggregationTest();
+    void ObserverTest();
+
+};
+
+} //namespace ut
+} //namespace fwJobs
+#endif //__FWJOBS_UT_JOBTEST_HPP__
diff --git a/SrcLib/core/fwJobs/test/tu/src/JobTest.cpp b/SrcLib/core/fwJobs/test/tu/src/JobTest.cpp
new file mode 100644
index 0000000..a6a74ed
--- /dev/null
+++ b/SrcLib/core/fwJobs/test/tu/src/JobTest.cpp
@@ -0,0 +1,812 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+// for boost::async to use lambda's return types
+#define BOOST_RESULT_OF_USE_DECLTYPE
+
+#include "JobTest.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwJobs/Job.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/exception/Waiting.hpp>
+#include <fwJobs/Observer.hpp>
+#include <fwTest/Exception.hpp>
+#include <fwThread/Worker.hpp>
+
+#include <boost/chrono/duration.hpp>
+#include <boost/thread/future.hpp>
+
+#include <exception>
+#include <functional>
+#include <string>
+
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwJobs::ut::JobTest );
+
+namespace fwJobs
+{
+namespace ut
+{
+
+void JobTest::setUp()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void JobTest::tearDown()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void algoMockGenericCallback(int n, std::function< void(int) > progress, std::function< bool() > shouldCancel,
+                             std::function< void(const std::string &) > log = nullptr )
+{
+    auto div = n/15;
+
+    for(std::uint64_t i = 0; i<n; ++i)
+    {
+        // algo ...
+
+        if (shouldCancel())
+        {
+            break;
+        }
+
+        if(log && i%div == 0)
+        {
+            log("algoMockGenericCallback step " + i);
+        }
+
+        progress(i+1);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void JobTest::APIAndStateTest()
+{
+    {
+        ::fwJobs::Job job( "Job", [](::fwJobs::Job &runningJob)
+                {
+                } );
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::WAITING, job.getState() );
+
+        CPPUNIT_ASSERT_THROW( job.wait(), ::fwJobs::exception::Waiting  );
+
+        CPPUNIT_ASSERT_EQUAL( false, job.cancelRequested() );
+        CPPUNIT_ASSERT_EQUAL( false, job.cancelRequestedCallback()() );
+
+        job.cancel();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::CANCELED, job.getState() );
+
+        CPPUNIT_ASSERT_EQUAL( true, job.cancelRequested() );
+        CPPUNIT_ASSERT_EQUAL( true, job.cancelRequestedCallback()() );
+
+        CPPUNIT_ASSERT_NO_THROW( job.wait() );
+
+        CPPUNIT_ASSERT( job.run().valid() );
+        CPPUNIT_ASSERT( job.run().is_ready() );
+        CPPUNIT_ASSERT( !job.run().has_value() );
+    }
+
+    {
+        ::fwJobs::Job job( "Job", [](::fwJobs::Job &runningJob)
+                {
+                    CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::RUNNING, runningJob.getState() );
+                } );
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::WAITING, job.getState() );
+
+        CPPUNIT_ASSERT_THROW( job.wait(), ::fwJobs::exception::Waiting );
+
+        job.run();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::FINISHED, job.getState() );
+
+        job.cancel();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::FINISHED, job.getState() );
+        CPPUNIT_ASSERT_NO_THROW( job.wait() );
+    }
+
+    {
+        ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+        ::fwJobs::Job job( "Job", [](::fwJobs::Job &runningJob)
+                {
+                    ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(30) );
+                    CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::CANCELING, runningJob.getState() );
+                }, worker );
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::WAITING, job.getState() );
+
+        CPPUNIT_ASSERT_THROW( job.wait(), ::fwJobs::exception::Waiting );
+
+        job.run();
+        job.cancel();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::CANCELING, job.getState() );
+
+        job.wait();
+
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::CANCELED, job.getState() );
+        CPPUNIT_ASSERT_NO_THROW( job.wait() );
+    }
+
+    {
+        ::fwJobs::Observer job( "Observer" );
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::RUNNING, job.getState() );
+
+        auto future = ::boost::async(
+            [&job]() -> bool
+                {
+                    bool except = true;
+                    try
+                    {
+                        job.wait();
+                        except = false;
+                    }
+                    catch ( ::fwJobs::exception::Waiting & )
+                    {
+                        except = true;
+                    }
+                    return except;
+                }
+            );
+
+        CPPUNIT_ASSERT_EQUAL( false, job.cancelRequested() );
+        CPPUNIT_ASSERT_EQUAL( false, job.cancelRequestedCallback()() );
+
+        job.cancel();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::CANCELED, job.getState() );
+        job.finish();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::CANCELED, job.getState() );
+
+        CPPUNIT_ASSERT_EQUAL( true, job.cancelRequested() );
+        CPPUNIT_ASSERT_EQUAL( true, job.cancelRequestedCallback()() );
+
+        CPPUNIT_ASSERT_NO_THROW( job.wait() );
+
+        CPPUNIT_ASSERT_EQUAL( false, future.get() );
+    }
+
+    {
+        ::fwJobs::Observer job( "Observer" );
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::RUNNING, job.getState() );
+
+        job.finish();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::FINISHED, job.getState() );
+        job.cancel();
+        CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::FINISHED, job.getState() );
+
+        CPPUNIT_ASSERT_EQUAL( false, job.cancelRequested() );
+        CPPUNIT_ASSERT_EQUAL( false, job.cancelRequestedCallback()() );
+
+        CPPUNIT_ASSERT_NO_THROW( job.wait() );
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void JobTest::GenericCallbackTest()
+{
+    for (int i = 0; i< 10; ++i)
+    {
+        int loops = 100;
+        {
+            ::fwJobs::Observer job( "GenericCallbackJob" );
+
+            CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::RUNNING, job.getState() );
+
+            algoMockGenericCallback(loops, job.progressCallback(), job.cancelRequestedCallback());
+
+            CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::RUNNING, job.getState() );
+            job.finish();
+
+            CPPUNIT_ASSERT_EQUAL( std::uint64_t(loops), job.getDoneWorkUnits() );
+
+            CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::FINISHED, job.getState() );
+        }
+
+        {
+            ::fwJobs::Job::Task func = [loops](::fwJobs::Job &runningJob)
+                                       {
+                                           algoMockGenericCallback(loops,
+                                                                   runningJob.progressCallback(),
+                                                                   runningJob.cancelRequestedCallback());
+                                       };
+            ::fwJobs::Job job( "GenericCallbackJob", func);
+
+            CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::WAITING, job.getState() );
+
+            job.run();
+            CPPUNIT_ASSERT_EQUAL( std::uint64_t(loops), job.getDoneWorkUnits() );
+            CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::FINISHED, job.getState() );
+        }
+
+        {
+            ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+
+            loops = 1 << 30;
+            ::fwJobs::Job job( "GenericCallbackJob",
+                               [loops](::fwJobs::Job &runningJob)
+                    {
+                        algoMockGenericCallback(loops,
+                                                runningJob.progressCallback(), runningJob.cancelRequestedCallback());
+                    },
+                               worker);
+            job.setTotalWorkUnits( loops );
+            job.run();
+            CPPUNIT_ASSERT_EQUAL( ::fwJobs::IJob::RUNNING, job.getState() );
+            ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(30) );
+            job.cancel();
+            job.wait();
+            CPPUNIT_ASSERT( ::fwJobs::IJob::CANCELING == job.getState()
+                            || ::fwJobs::IJob::CANCELED == job.getState() );
+
+            CPPUNIT_ASSERT( loops > job.getDoneWorkUnits() );
+        }
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void JobTest::AggregationTest()
+{
+    int loops = 100;
+
+
+    { // Job aggregation test
+        ::fwJobs::Job::Task func = [loops](::fwJobs::Job &runningJob)
+                                   {
+                                       algoMockGenericCallback(loops,
+                                                               runningJob.progressCallback(),
+                                                               runningJob.cancelRequestedCallback());
+                                   };
+        auto job1 = ::fwJobs::Job::New( "GenericCallbackJob1", func );
+        auto job2 = ::fwJobs::Job::New( "GenericCallbackJob2", func );
+        auto job3 = ::fwJobs::Job::New( "GenericCallbackJob3", func );
+
+        auto jobs1 = ::fwJobs::Aggregator::New( "Aggregator1" );
+
+        jobs1->add(job1);
+        jobs1->add(job2);
+        jobs1->add(job3);
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(0), jobs1->getDoneWorkUnits() );
+
+        jobs1->run();
+        jobs1->wait();
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getTotalWorkUnits());
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getDoneWorkUnits() );
+    }
+
+    { // Job and aggregator aggregation test
+        ::fwJobs::Job::Task func = [loops](::fwJobs::Job &runningJob)
+                                   {
+                                       algoMockGenericCallback(loops,
+                                                               runningJob.progressCallback(),
+                                                               runningJob.cancelRequestedCallback());
+                                   };
+        auto job1 = ::fwJobs::Job::New( "GenericCallbackJob1", func );
+        auto job2 = ::fwJobs::Job::New( "GenericCallbackJob2", func );
+        auto job3 = ::fwJobs::Job::New( "GenericCallbackJob3", func );
+        auto job4 = ::fwJobs::Job::New( "GenericCallbackJob4", func );
+
+        auto jobs1 = ::fwJobs::Aggregator::New( "Aggregator1" );
+        auto jobs2 = ::fwJobs::Aggregator::New( "Aggregator2" );
+
+        jobs1->add(job1);
+        jobs1->add(job2);
+        jobs1->add(job3);
+
+        jobs2->add(jobs1);
+        jobs2->add(job4);
+
+        jobs2->run();
+        jobs2->wait();
+
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(100), job1->getDoneWorkUnits());
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getTotalWorkUnits());
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getDoneWorkUnits());
+    }
+
+
+    { // total work units update test
+        auto funcGen = []( int progressSteps ) -> ::fwJobs::Job::Task
+                       {
+                           return [ = ](::fwJobs::Job &runningJob)
+                                  {
+                                      algoMockGenericCallback(progressSteps, runningJob.progressCallback(),
+                                                              runningJob.cancelRequestedCallback(),
+                                                              nullptr);
+                                  };
+                       };
+
+        auto job1 = ::fwJobs::Job::New( "GenericCallbackJob1", funcGen(55) );
+        auto job2 = ::fwJobs::Job::New( "GenericCallbackJob2", funcGen(145) );
+        auto job3 = ::fwJobs::Job::New( "GenericCallbackJob3", funcGen(9999) );
+        auto job4 = ::fwJobs::Job::New( "GenericCallbackJob4", funcGen(3) );
+
+
+        auto jobs1 = ::fwJobs::Aggregator::New( "Aggregator1" );
+        auto jobs2 = ::fwJobs::Aggregator::New( "Aggregator2" );
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(0), jobs1->getTotalWorkUnits());
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(0), jobs2->getTotalWorkUnits());
+
+        job1->setTotalWorkUnits(55);
+
+        jobs1->add(job1);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(100), jobs1->getTotalWorkUnits());
+
+        jobs1->add(job2);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs1->getTotalWorkUnits());
+
+        jobs1->add(job3);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getTotalWorkUnits());
+
+        job2->setTotalWorkUnits(145);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getTotalWorkUnits());
+
+        job2->setTotalWorkUnits(0);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs1->getTotalWorkUnits());
+
+        job2->setTotalWorkUnits(100);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getTotalWorkUnits());
+
+        // set back to 145 to be consistent with job's task
+        job2->setTotalWorkUnits(145);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getTotalWorkUnits());
+
+        jobs2->add(jobs1);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(100), jobs2->getTotalWorkUnits());
+
+        jobs2->add(job4);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getTotalWorkUnits());
+
+        job3->setTotalWorkUnits(9999);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getTotalWorkUnits());
+
+        job4->setTotalWorkUnits(3);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getTotalWorkUnits());
+
+        jobs2->run();
+        jobs2->wait();
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getTotalWorkUnits());
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(300), jobs1->getDoneWorkUnits());
+
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(200), jobs2->getDoneWorkUnits());
+    }
+
+
+    {
+        ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+
+        ::fwJobs::Job::Task func = [loops](::fwJobs::Job &runningJob)
+                                   {
+                                       algoMockGenericCallback(loops,
+                                                               runningJob.progressCallback(),
+                                                               runningJob.cancelRequestedCallback());
+                                   };
+
+        auto job1 = ::fwJobs::Job::New( "GenericCallbackJob1", func, worker );
+        auto job2 = ::fwJobs::Job::New( "GenericCallbackJob2", func, worker );
+        auto job3 = ::fwJobs::Job::New( "GenericCallbackJob3", func, worker );
+
+
+        loops = 1 << 30;
+        func  = [loops](::fwJobs::Job &runningJob)
+                {
+                    algoMockGenericCallback(loops, runningJob.progressCallback(), runningJob.cancelRequestedCallback());
+                };
+        auto job4 = ::fwJobs::Job::New( "GenericCallbackJob4", func, worker );
+        job4->setTotalWorkUnits(loops);
+
+        auto jobs1 = ::fwJobs::Aggregator::New( "Aggregator1" );
+        auto jobs2 = ::fwJobs::Aggregator::New( "Aggregator2" );
+
+        jobs1->add(job1);
+        jobs1->add(job2);
+        jobs1->add(job3);
+
+        jobs2->add(jobs1);
+        jobs2->add(job4);
+
+        auto future = jobs2->run();
+        ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(30) );
+        jobs2->cancel();
+        jobs2->wait();
+
+        CPPUNIT_ASSERT_EQUAL(
+            100 * ( (job4->getDoneWorkUnits() / job4->getTotalWorkUnits())
+                    + ((job3->getDoneWorkUnits() / job3->getTotalWorkUnits())
+                       + (job2->getDoneWorkUnits() / job2->getTotalWorkUnits())
+                       + (job1->getDoneWorkUnits() / job1->getTotalWorkUnits()))/3 ),
+            jobs2->getDoneWorkUnits());
+
+    }
+
+    {
+        ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+
+        int index = -1;
+
+        ::fwJobs::Job::Task func1 = [&index](::fwJobs::Job &runningJob)
+                                    {
+                                        CPPUNIT_ASSERT_EQUAL(-1, index);
+                                        index = 0;
+                                    };
+
+        ::fwJobs::Job::Task func2 = [&index](::fwJobs::Job &runningJob)
+                                    {
+                                        CPPUNIT_ASSERT_EQUAL(0, index);
+                                        index = 1;
+                                    };
+
+        ::fwJobs::Job::Task func3 = [&index](::fwJobs::Job &runningJob)
+                                    {
+                                        CPPUNIT_ASSERT_EQUAL(1, index);
+                                        index = 2;
+                                    };
+
+        auto job1 = std::make_shared< ::fwJobs::Job >( "GenericCallbackJob1", func1, worker );
+        auto job2 = std::make_shared< ::fwJobs::Job >( "GenericCallbackJob2", func2, worker );
+        auto job3 = std::make_shared< ::fwJobs::Job >( "GenericCallbackJob3", func3, worker );
+
+
+        auto jobs1 = std::make_shared< ::fwJobs::Aggregator >( "Aggregator1" );
+        jobs1->add(job1);
+        jobs1->add(job1);
+        jobs1->add(job2);
+        jobs1->add(job3);
+        jobs1->add(job3);
+        jobs1->add(job2);
+
+        CPPUNIT_ASSERT_EQUAL((decltype(jobs1->getSubJobs().size())) 3, jobs1->getSubJobs().size());
+
+        jobs1->run().get();
+
+    }
+
+    { // weight test
+        auto funcGen = []() -> ::fwJobs::Job::Task
+                       {
+                           return [ = ](::fwJobs::Job &runningJob)
+                                  {
+                                      runningJob.done();
+                                  };
+                       };
+
+        std::uint64_t norm = 100;
+        std::uint64_t wu1  = 55, wu2 = 444, wu3 = 9999;
+        double w1          = 2, w2 = 42, w3 = 0.5;
+
+        auto job1 = ::fwJobs::Job::New( "GenericCallbackJob1", funcGen() );
+        auto job2 = ::fwJobs::Observer::New( "GenericCallbackJob2", wu2 );
+        auto job3 = ::fwJobs::Job::New( "GenericCallbackJob3", funcGen() );
+
+        job1->setTotalWorkUnits(wu1);
+        job3->setTotalWorkUnits(wu3);
+
+        auto jobs1 = ::fwJobs::Aggregator::New( "Aggregator1" );
+        auto jobs2 = ::fwJobs::Aggregator::New( "Aggregator2" );
+
+        jobs1->add(job1,w1);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(w1*norm), jobs1->getTotalWorkUnits());
+
+        jobs1->add(job2,w2);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t((w2+w1)*norm), jobs1->getTotalWorkUnits());
+
+        jobs2->add(job3,w3);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(norm*w3), jobs2->getTotalWorkUnits());
+
+        wu2 = 145;
+        job2->setTotalWorkUnits(wu2);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(norm*(w2+w1)), jobs1->getTotalWorkUnits());
+
+        double jobs1w = 2015;
+        jobs2->add(jobs1, jobs1w);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(norm * (jobs1w+w3)), jobs2->getTotalWorkUnits());
+
+        wu3 = 1111;
+        job3->setTotalWorkUnits(wu3);
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(norm * (jobs1w+w3)), jobs2->getTotalWorkUnits());
+
+        jobs2->run();
+        job2->done();
+        job2->finish();
+        jobs2->wait();
+
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(norm*(w2+w1)), jobs1->getDoneWorkUnits());
+        CPPUNIT_ASSERT_EQUAL( std::uint64_t(norm*(jobs1w+w3)), jobs2->getDoneWorkUnits());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+class ProgressObserver
+{
+public:
+    virtual void progressNotify( double p ) = 0;
+    virtual bool canceled()                 = 0;
+    virtual ~ProgressObserver()
+    {
+    }
+};
+
+
+class algoMockObserver
+{
+public:
+    algoMockObserver( ProgressObserver *obs ) : m_obs(obs), m_canceled(false)
+    {
+    }
+
+    ~algoMockObserver()
+    {
+        if(m_obs)
+        {
+            delete m_obs;
+        }
+    }
+
+    void run(int n)
+    {
+        for(int i = 0; i<n; i++)
+        {
+            // algo ...
+            if (m_obs)
+            {
+                m_obs->progressNotify(((double)(i+1))/n);
+
+                if (m_obs->canceled())
+                {
+                    break;
+                }
+            }
+
+            if (m_canceled)
+            {
+                break;
+            }
+        }
+    }
+
+    void cancel()
+    {
+        m_canceled = true;
+    }
+
+protected:
+
+    ProgressObserver *m_obs;
+    bool m_canceled;
+
+};
+
+struct JobObserver : public ProgressObserver
+{
+    JobObserver( std::function< void ( double ) > func) :
+        m_callback( func )
+    {
+    }
+
+    void progressNotify( double p )
+    {
+        m_callback( p );
+    }
+
+    bool canceled()
+    {
+        return false;
+    }
+
+    std::function< void ( double ) > m_callback;
+};
+
+struct JobObserverCanceler : public JobObserver
+{
+    JobObserverCanceler( std::function< void ( double ) > func, const bool &canceled = false) :
+        JobObserver(func),
+        m_canceled( canceled )
+    {
+    }
+
+    bool canceled()
+    {
+        return m_canceled;
+    }
+
+    const bool &m_canceled;
+};
+
+//------------------------------------------------------------------------------
+
+void JobTest::ObserverTest()
+{
+    std::uint64_t progress(100);
+    for (int i = 0; i< 10; ++i)
+    {
+        int loops = 100;
+        {
+            ::fwJobs::Observer job( "GenericCallbackJob" );
+
+            auto f = [ =,&job](double d)
+                     {
+                         job.doneWork(std::uint64_t(d * progress));
+                     };
+            algoMockObserver algo( new JobObserver( f ) );
+
+            algo.run(loops);
+            job.finish();
+
+            CPPUNIT_ASSERT_EQUAL( progress, job.getDoneWorkUnits() );
+        }
+
+
+        {
+            ::fwJobs::Job job( "GenericCallbackJob",
+                               [ = ](::fwJobs::Job &job)
+                    {
+                        auto f = [ =,&job](double d)
+                                 {
+                                     job.doneWork(std::uint64_t(d * progress));
+                                 };
+                        algoMockObserver algo( new JobObserver( f ) );
+                        algo.run(loops);
+                    });
+            job.run();
+            CPPUNIT_ASSERT_EQUAL( progress, job.getDoneWorkUnits() );
+        }
+
+        {
+            ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+
+            loops = 1 << 30;
+            ::fwJobs::Job job( "GenericCallbackJob",
+                               [ = ](::fwJobs::Job &runningJob)
+                    {
+                        auto f = [ =,&runningJob](double d)
+                                 {
+                                     runningJob.doneWork(std::uint64_t(d * progress));
+                                 };
+                        algoMockObserver algo( new JobObserver( f ) );
+                        runningJob.addSimpleCancelHook( [&]()
+                        {
+                            algo.cancel();
+                        } );
+                        algo.run(loops);
+                    },
+                               worker
+                               );
+            job.setTotalWorkUnits(loops);
+            job.run();
+            ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(30) );
+            job.cancel().wait();
+            CPPUNIT_ASSERT( progress > job.getDoneWorkUnits() );
+        }
+
+        {
+            ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+
+            loops = 1 << 30;
+            ::fwJobs::Job job( "GenericCallbackJob",
+                               [ = ](::fwJobs::Job &runningJob)
+                    {
+                        auto f = [ =,&runningJob](double d)
+                                 {
+                                     runningJob.doneWork(std::uint64_t(d * progress));
+                                 };
+                        algoMockObserver algo( new JobObserverCanceler( f, runningJob.cancelRequested() ) );
+                        algo.run(loops);
+                    },
+                               worker
+                               );
+            job.setTotalWorkUnits(loops);
+            job.run();
+            ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(30) );
+            job.cancel().wait();
+            CPPUNIT_ASSERT( progress > job.getDoneWorkUnits() );
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void JobTest::LogTest()
+{
+    int loops = 100;
+    {
+        ::fwJobs::Observer job( "GenericCallbackJob1" );
+
+        job.log("Test of GenericCallbackJob1");
+        algoMockGenericCallback(loops, job.progressCallback(), job.cancelRequestedCallback(),
+                                [&job](const std::string &message)
+                {
+                    job.log(message);
+                });
+
+        job.finish();
+    }
+
+    {
+        ::fwJobs::Job::Task func = [loops](::fwJobs::Job &runningJob)
+                                   {
+                                       algoMockGenericCallback(loops,
+                                                               runningJob.progressCallback(),
+                                                               runningJob.cancelRequestedCallback(),
+                                                               [&runningJob](const std::string &message)
+                    {
+                        runningJob.log(message);
+                    });
+                                   };
+        ::fwJobs::Job job( "GenericCallbackJob2", func);
+
+        job.log("Test of GenericCallbackJob2");
+
+        job.run();
+    }
+
+    {
+        ::fwJobs::Job::Task func = [loops](::fwJobs::Job &runningJob)
+                                   {
+                                       algoMockGenericCallback(loops,
+                                                               runningJob.progressCallback(),
+                                                               runningJob.cancelRequestedCallback(),
+                                                               [&runningJob](const std::string &message)
+                    {
+                        runningJob.log(message);
+                    });
+                                   };
+        auto job1 = ::fwJobs::Job::New( "GenericCallbackJob1", func );
+        auto job2 = ::fwJobs::Job::New( "GenericCallbackJob2", func );
+        auto job3 = ::fwJobs::Job::New( "GenericCallbackJob3", func );
+        auto job4 = ::fwJobs::Job::New( "GenericCallbackJob4", func );
+
+        auto jobs1 = ::fwJobs::Aggregator::New( "Aggregator1" );
+        auto jobs2 = ::fwJobs::Aggregator::New( "Aggregator2" );
+
+        jobs1->add(job1);
+        jobs1->add(job2);
+        jobs1->add(job3);
+
+        job1->log("Log test of GenericCallbackJob1");
+        job2->log("Log test of GenericCallbackJob2");
+
+        jobs2->add(jobs1);
+        jobs2->add(job4);
+
+        job3->log("Log test of GenericCallbackJob3");
+        job4->log("Log test of GenericCallbackJob4");
+
+
+        jobs1->log("Aggregator1");
+        jobs2->log("Aggregator2");
+
+
+        jobs2->run();
+        jobs2->wait();
+
+        auto nbLogs = 18;
+        CPPUNIT_ASSERT_EQUAL( size_t(nbLogs), job1->getLogs().size() );
+        CPPUNIT_ASSERT_EQUAL( size_t(nbLogs), job2->getLogs().size() );
+        CPPUNIT_ASSERT_EQUAL( size_t(nbLogs), job3->getLogs().size() );
+        CPPUNIT_ASSERT_EQUAL( size_t(nbLogs), job4->getLogs().size() );
+        CPPUNIT_ASSERT_EQUAL( size_t(3*nbLogs+1), jobs1->getLogs().size() );
+        CPPUNIT_ASSERT_EQUAL( size_t((3*nbLogs+1)+nbLogs+1), jobs2->getLogs().size() );
+    }
+}
+
+} //namespace ut
+} //namespace fwJobs
diff --git a/SrcLib/core/fwLog/CMakeLists.txt b/SrcLib/core/fwLog/CMakeLists.txt
new file mode 100644
index 0000000..5751d7e
--- /dev/null
+++ b/SrcLib/core/fwLog/CMakeLists.txt
@@ -0,0 +1,6 @@
+fwLoadProperties()
+
+
+find_package (Boost REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
diff --git a/SrcLib/core/fwLog/Properties.cmake b/SrcLib/core/fwLog/Properties.cmake
new file mode 100644
index 0000000..79590da
--- /dev/null
+++ b/SrcLib/core/fwLog/Properties.cmake
@@ -0,0 +1,11 @@
+
+set( NAME fwLog )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwTools
+    )
+set( REQUIREMENTS  )
+
diff --git a/SrcLib/core/fwLog/include/fwLog/Log.hpp b/SrcLib/core/fwLog/include/fwLog/Log.hpp
new file mode 100644
index 0000000..9938a51
--- /dev/null
+++ b/SrcLib/core/fwLog/include/fwLog/Log.hpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWLOG_LOG_HPP__
+#define __FWLOG_LOG_HPP__
+
+#include "fwLog/config.hpp"
+
+#include <fwCore/BaseObject.hpp>
+
+#include <string>
+
+namespace fwLog
+{
+
+/**
+ * @brief Log
+ * @brief Log class used to retrieve information to the user
+ */
+class FWLOG_CLASS_API Log : public ::fwCore::BaseObject
+{
+public:
+
+    typedef enum
+    {
+        INFORMATION = 0,
+        WARNING     = 5,
+        CRITICAL    = 10
+    } LevelType;
+
+    /// Constructor
+    FWLOG_API Log(LevelType level, const std::string& message);
+
+    /// Destructor
+    FWLOG_API ~Log();
+
+    /// Set Log level
+    void setLevel(LevelType level)
+    {
+        m_level = level;
+    }
+
+    /// Get Log level
+    LevelType getLevel() const
+    {
+        return m_level;
+    }
+
+    /// Set Log message
+    void setMessage(std::string message)
+    {
+        m_message = message;
+    }
+
+    // Get Log message
+    const std::string getMessage() const
+    {
+        return m_message;
+    }
+
+protected:
+
+    /// Log level
+    LevelType m_level;
+
+    /// Log message
+    std::string m_message;
+
+
+}; // class Logger
+
+} // namespace fwLog
+
+#endif // __FWLOG_LOG_HPP__
diff --git a/SrcLib/core/fwLog/include/fwLog/Logger.hpp b/SrcLib/core/fwLog/include/fwLog/Logger.hpp
new file mode 100644
index 0000000..924b7ea
--- /dev/null
+++ b/SrcLib/core/fwLog/include/fwLog/Logger.hpp
@@ -0,0 +1,142 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWLOG_LOGGER_HPP__
+#define __FWLOG_LOGGER_HPP__
+
+#include "fwLog/Log.hpp"
+#include "fwLog/config.hpp"
+
+#include <fwTools/Object.hpp>
+
+#include <string>
+
+namespace fwLog
+{
+
+/**
+ * @brief Logger class used to store logs
+ */
+class FWLOG_CLASS_API Logger : public ::fwTools::Object
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((Logger)(::fwTools::Object), (()), new Logger);
+
+    typedef std::vector< ::fwLog::Log > LogContainerType;
+    typedef LogContainerType::iterator IteratorType;
+    typedef LogContainerType::const_iterator ConstIteratorType;
+    typedef LogContainerType::reverse_iterator ReverseIteratorType;
+    typedef LogContainerType::const_reverse_iterator ConstReverseIteratorType;
+
+    /// Constructor
+    FWLOG_API Logger();
+
+    /// Destructor
+    FWLOG_API ~Logger();
+
+    /**
+     * @brief Add information log into the logger
+     * @param[in] message Log message
+     */
+    FWLOG_API void information(const std::string& message);
+
+    /**
+     * @brief Add warning log into the logger
+     * @param[in] message Log message
+     */
+    FWLOG_API void warning(const std::string& message);
+
+    /**
+     * @brief Add critical log into the logger
+     * @param[in] message Log message
+     */
+    FWLOG_API void critical(const std::string& message);
+
+    /**
+     * @brief Return the log matching the specified index
+     * @param[in] index Log's index
+     */
+    FWLOG_API ::fwLog::Log getLog(unsigned int index);
+
+    /// Returns the number of logs
+    FWLOG_API std::size_t count() const;
+
+    /**
+     * @brief Return the number of logs matching the specified level
+     * @param[in] level Log level
+     */
+    FWLOG_API std::size_t count(::fwLog::Log::LevelType level) const;
+
+    /**
+     * @brief Sort logs according to log levels
+     */
+    FWLOG_API void sort();
+
+    /**
+     * @brief Clear logs
+     */
+    FWLOG_API void clear();
+
+    /// Return whether the logger contains logs or not
+    bool empty() const
+    {
+        return m_logContainer.empty();
+    }
+
+    IteratorType begin()
+    {
+        return m_logContainer.begin();
+    }
+    IteratorType end()
+    {
+        return m_logContainer.end();
+    }
+    ConstIteratorType begin() const
+    {
+        return m_logContainer.begin();
+    }
+    ConstIteratorType end()   const
+    {
+        return m_logContainer.end();
+    }
+
+    ReverseIteratorType rbegin()
+    {
+        return m_logContainer.rbegin();
+    }
+    ReverseIteratorType rend()
+    {
+        return m_logContainer.rend();
+    }
+    ConstReverseIteratorType rbegin() const
+    {
+        return m_logContainer.rbegin();
+    }
+    ConstReverseIteratorType rend()   const
+    {
+        return m_logContainer.rend();
+    }
+
+protected:
+
+    /**
+     * @brief Function used to sort logs
+     * @param logA First log
+     * @param logB Second log
+     */
+    static bool logSorter(const ::fwLog::Log& logA, const ::fwLog::Log& logB);
+
+    /// Log container
+    LogContainerType m_logContainer;
+
+
+}; // class Logger
+
+} // namespace fwLog
+
+#endif // __FWLOG_LOGGER_HPP__
diff --git a/SrcLib/core/fwLog/include/fwLog/namespace.hpp b/SrcLib/core/fwLog/include/fwLog/namespace.hpp
new file mode 100644
index 0000000..548cd61
--- /dev/null
+++ b/SrcLib/core/fwLog/include/fwLog/namespace.hpp
@@ -0,0 +1,17 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWLOG_NAMESPACE_HPP__
+#define __FWLOG_NAMESPACE_HPP__
+
+/**
+ * @brief fwLog contains classes used to manage logs.
+ */
+namespace fwLog
+{
+} //namespace fwLog
+
+#endif /* __FWLOG_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwLog/src/fwLog/Log.cpp b/SrcLib/core/fwLog/src/fwLog/Log.cpp
new file mode 100644
index 0000000..a870344
--- /dev/null
+++ b/SrcLib/core/fwLog/src/fwLog/Log.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwLog/Log.hpp"
+
+namespace fwLog
+{
+
+Log::Log(LevelType level, const std::string& message) : m_level(level), m_message(message)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Log::~Log()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwLog
+
+
diff --git a/SrcLib/core/fwLog/src/fwLog/Logger.cpp b/SrcLib/core/fwLog/src/fwLog/Logger.cpp
new file mode 100644
index 0000000..e3c49e8
--- /dev/null
+++ b/SrcLib/core/fwLog/src/fwLog/Logger.cpp
@@ -0,0 +1,106 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwLog/Logger.hpp"
+
+#include <boost/foreach.hpp>
+
+namespace fwLog
+{
+
+Logger::Logger()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Logger::~Logger()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void Logger::information(const std::string& message)
+{
+    ::fwLog::Log log(::fwLog::Log::INFORMATION, message);
+    m_logContainer.push_back(log);
+    SLM_INFO(message);
+}
+
+//-----------------------------------------------------------------------------
+
+void Logger::warning(const std::string& message)
+{
+    ::fwLog::Log log(::fwLog::Log::WARNING, message);
+    m_logContainer.push_back(log);
+    SLM_WARN(message);
+}
+
+//-----------------------------------------------------------------------------
+
+void Logger::critical(const std::string& message)
+{
+    ::fwLog::Log log(::fwLog::Log::CRITICAL, message);
+    m_logContainer.push_back(log);
+    SLM_ERROR(message);
+}
+
+//-----------------------------------------------------------------------------
+
+::fwLog::Log Logger::getLog(unsigned int index)
+{
+    SLM_ASSERT("Please be sure to provide an index lower than the number of items.", index < this->count());
+    return m_logContainer[index];
+}
+
+//-----------------------------------------------------------------------------
+
+std::size_t Logger::count() const
+{
+    return m_logContainer.size();
+}
+
+//-----------------------------------------------------------------------------
+
+std::size_t Logger::count(::fwLog::Log::LevelType level) const
+{
+    std::size_t count = 0;
+    for(const ::fwLog::Log& log: m_logContainer)
+    {
+        if(log.getLevel() == level)
+        {
+            ++count;
+        }
+    }
+    return count;
+}
+
+//-----------------------------------------------------------------------------
+
+void Logger::sort()
+{
+    std::sort(m_logContainer.begin(), m_logContainer.end(), Logger::logSorter);
+}
+
+//-----------------------------------------------------------------------------
+
+void Logger::clear()
+{
+    m_logContainer.clear();
+}
+
+//-----------------------------------------------------------------------------
+
+bool Logger::logSorter(const ::fwLog::Log& logA, const ::fwLog::Log& logB)
+{
+    return logA.getLevel() > logB.getLevel();
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwLog
+
+
diff --git a/SrcLib/core/fwLog/test/CMakeLists.txt b/SrcLib/core/fwLog/test/CMakeLists.txt
new file mode 100644
index 0000000..8ff4fe5
--- /dev/null
+++ b/SrcLib/core/fwLog/test/CMakeLists.txt
@@ -0,0 +1,7 @@
+fwLoadProperties()
+
+
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
+
diff --git a/SrcLib/core/fwLog/test/Properties.cmake b/SrcLib/core/fwLog/test/Properties.cmake
new file mode 100644
index 0000000..e2f68fd
--- /dev/null
+++ b/SrcLib/core/fwLog/test/Properties.cmake
@@ -0,0 +1,12 @@
+
+set( NAME fwLogTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwLog
+    fwTools
+    fwCore
+    fwTest
+    )
+set( REQUIREMENTS )
+
diff --git a/SrcLib/core/fwLog/test/tu/include/LoggerTest.hpp b/SrcLib/core/fwLog/test/tu/include/LoggerTest.hpp
new file mode 100644
index 0000000..c9d1285
--- /dev/null
+++ b/SrcLib/core/fwLog/test/tu/include/LoggerTest.hpp
@@ -0,0 +1,35 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWLOG_UT_LOGGERTEST_HPP__
+#define __FWLOG_UT_LOGGERTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwLogTest
+{
+namespace ut
+{
+
+class LoggerTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( LoggerTest );
+CPPUNIT_TEST( simpleLoggerTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void simpleLoggerTest();
+
+};
+
+} // namespace ut
+} // namespace fwLogTest
+
+#endif // __FWLOG_UT_LOGGERTEST_HPP__
diff --git a/SrcLib/core/fwLog/test/tu/src/LoggerTest.cpp b/SrcLib/core/fwLog/test/tu/src/LoggerTest.cpp
new file mode 100644
index 0000000..1905832
--- /dev/null
+++ b/SrcLib/core/fwLog/test/tu/src/LoggerTest.cpp
@@ -0,0 +1,119 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "LoggerTest.hpp"
+
+#include <fwLog/Logger.hpp>
+
+#include <string>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwLogTest::ut::LoggerTest );
+
+namespace fwLogTest
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void LoggerTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void LoggerTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void LoggerTest::simpleLoggerTest()
+{
+    ::fwLog::Logger::sptr logger = ::fwLog::Logger::New();
+
+    const std::string info1     = "This is an information message.";
+    const std::string info2     = "This is another information message.";
+    const std::string info3     = "This is the last information message.";
+    const std::string warning1  = "This is a warning message.";
+    const std::string warning2  = "This is another warning message.";
+    const std::string critical1 = "This is a critical message.";
+    const std::string critical2 = "This is another critical message.";
+    const std::string critical3 = "This is almost the last critical message.";
+    const std::string critical4 = "This is the last critical message.";
+
+    // Fill logger
+    logger->information(info1);
+    logger->critical(critical1);
+    logger->warning(warning1);
+    logger->information(info2);
+    logger->critical(critical2);
+    logger->critical(critical3);
+    logger->information(info3);
+    logger->warning(warning2);
+    logger->critical(critical4);
+
+    // Check number of logs
+    std::size_t expected = 9;
+    CPPUNIT_ASSERT_EQUAL(expected, logger->count());
+    expected = 3;
+    CPPUNIT_ASSERT_EQUAL(expected, logger->count(::fwLog::Log::INFORMATION));
+    expected = 2;
+    CPPUNIT_ASSERT_EQUAL(expected, logger->count(::fwLog::Log::WARNING));
+    expected = 4;
+    CPPUNIT_ASSERT_EQUAL(expected, logger->count(::fwLog::Log::CRITICAL));
+
+    // Check message values
+    CPPUNIT_ASSERT_EQUAL(info1, logger->getLog(0).getMessage());
+    CPPUNIT_ASSERT_EQUAL(critical1, logger->getLog(1).getMessage());
+    CPPUNIT_ASSERT_EQUAL(warning1, logger->getLog(2).getMessage());
+    CPPUNIT_ASSERT_EQUAL(info2, logger->getLog(3).getMessage());
+    CPPUNIT_ASSERT_EQUAL(critical2, logger->getLog(4).getMessage());
+    CPPUNIT_ASSERT_EQUAL(critical3, logger->getLog(5).getMessage());
+    CPPUNIT_ASSERT_EQUAL(info3, logger->getLog(6).getMessage());
+    CPPUNIT_ASSERT_EQUAL(warning2, logger->getLog(7).getMessage());
+    CPPUNIT_ASSERT_EQUAL(critical4, logger->getLog(8).getMessage());
+
+    // Check level types
+    ::fwLog::Logger::IteratorType it = logger->begin();
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::INFORMATION, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::WARNING, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::INFORMATION, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::INFORMATION, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::WARNING, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+
+    // Sort logs
+    logger->sort();
+
+    // Check level types
+    it = logger->begin();
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::CRITICAL, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::WARNING, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::WARNING, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::INFORMATION, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::INFORMATION, (it++)->getLevel());
+    CPPUNIT_ASSERT_EQUAL(::fwLog::Log::INFORMATION, (it++)->getLevel());
+
+    // Clear logs
+    logger->clear();
+    CPPUNIT_ASSERT_EQUAL(std::size_t(0), logger->count());
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwLogTest
diff --git a/SrcLib/core/fwMath/CMakeLists.txt b/SrcLib/core/fwMath/CMakeLists.txt
index faee142..166b182 100644
--- a/SrcLib/core/fwMath/CMakeLists.txt
+++ b/SrcLib/core/fwMath/CMakeLists.txt
@@ -1,7 +1,7 @@
-
 fwLoadProperties()
 
-find_package (Boost REQUIRED)
-
-fwForwardInclude(${Boost_INCLUDE_DIRS})
+find_package(GLM REQUIRED)
 
+fwForwardInclude(
+    ${GLM_INCLUDE_DIR}
+)
\ No newline at end of file
diff --git a/SrcLib/core/fwMath/bin/build.options b/SrcLib/core/fwMath/bin/build.options
deleted file mode 100644
index d357cf1..0000000
--- a/SrcLib/core/fwMath/bin/build.options
+++ /dev/null
@@ -1,6 +0,0 @@
-TYPE    = 'shared'
-VERSION = '0-1'
-USE     = ['boost']
-LIB = ['fwCore_0-1']
-
-
diff --git a/SrcLib/core/fwMath/include/fwMath/Compare.hpp b/SrcLib/core/fwMath/include/fwMath/Compare.hpp
index 3b3bc47..ac43136 100644
--- a/SrcLib/core/fwMath/include/fwMath/Compare.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/Compare.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,6 +25,7 @@ bool isEqual(TYPE a, TYPE b, const float epsilon = 0.00001)
     return fabs(a - b) < epsilon;
 }
 
+
 /**
  * @brief Returns true iff container a and b are equal with 'epsilon' error margin
  * @param containerA container to compare
diff --git a/SrcLib/core/fwMath/include/fwMath/IntrasecTypes.hpp b/SrcLib/core/fwMath/include/fwMath/IntrasecTypes.hpp
index aa351d8..65c6913 100644
--- a/SrcLib/core/fwMath/include/fwMath/IntrasecTypes.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/IntrasecTypes.hpp
@@ -1,16 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/array.hpp>
+#ifndef __FWMATH_INTRASECTYPES_HPP__
+#define __FWMATH_INTRASECTYPES_HPP__
+
 #include <vector>
+#include <array>
 
 /**
  * @brief Definition of a type for a vector of tree double.
  */
-typedef ::boost::array<double, 3> fwVec3d;
+typedef std::array<double, 3> fwVec3d;
 
 /**
  * @brief Definition of a type for a line defined by a position and a direction
@@ -20,12 +23,12 @@ typedef std::pair<fwVec3d, fwVec3d> fwLine;
 /**
  * @brief Definition of type for a plane defined by a normal and a distance
  */
-typedef ::boost::array<double, 4> fwPlane;
+typedef std::array<double, 4> fwPlane;
 
 /**
  * @brief Definition of a type for a matrix 4*4
  */
-typedef ::boost::array< ::boost::array< double,4 >, 4> fwMatrix4x4;
+typedef std::array< std::array< double,4 >, 4> fwMatrix4x4;
 
 /**
  * @brief Definition of a type for vertex positions
@@ -37,3 +40,5 @@ typedef std::vector < std::vector <float> > fwVertexPosition;
  */
 typedef std::vector < std::vector <int> > fwVertexIndex;
 
+
+#endif /* __FWMATH_INTRASECTYPES_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/LineFunctions.hpp b/SrcLib/core/fwMath/include/fwMath/LineFunctions.hpp
index 8a3b6b6..77fe8e4 100644
--- a/SrcLib/core/fwMath/include/fwMath/LineFunctions.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/LineFunctions.hpp
@@ -1,60 +1,90 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMATH_LINEFUNCTIONS_HPP_
-#define _FWMATH_LINEFUNCTIONS_HPP_
-
-#include <fwCore/base.hpp>
+#ifndef __FWMATH_LINEFUNCTIONS_HPP__
+#define __FWMATH_LINEFUNCTIONS_HPP__
 
 #include "fwMath/IntrasecTypes.hpp"
-#include "fwMath/export.hpp"
+#include "fwMath/config.hpp"
+
+#include <fwCore/base.hpp>
 
-namespace fwMath {
+namespace fwMath
+{
 
 //------------------------------------------------------------------------------
 
 /**
- * @brief Compute the closest points between two lines.
+ * @brief Compute the closest points between two rays.
+ *  @param [in]  _ray1 ray (origin,direction). Direction vector is assumed be normalized.
+ *  @param [in]  _ray2 ray (origin,direction). Direction vector is assumed be normalized.
+ *  @param [out] _pointOnThis intersection point.
+ *  @param [out] _pointOnfwLine barycenter of the triangle defined by the three points of the place.
  * Return FALSE if the lines are parallel, TRUE otherwise.
  * @verbatim
-  p1 + t1 * d1
-  p2 + t2 * d2
-  (p2 - p1 + t2 * d2 - t1 * d1) * d1 = 0
-  (p2 - p1 + t2 * d2 - t1 * d1) * d2 = 0
-  t2 * (d2.d1) - t1 = (p1 - p2).d1
-  t2 - t1 * (d1.d2) = (p1 - p2).d2
-
-  delta = 1 - (d1.d2)**2
-
-  t2 = [ d2.(p1-p2) - d1.(p1-p2) * (d1.d2)]/delta
-  t1 = [-d1.(p1-p2) + d2.(p1-p2) * (d1.d2)]/delta
- @endverbatim
+   p1 + t1 * d1
+   p2 + t2 * d2
+   (p2 - p1 + t2 * d2 - t1 * d1) * d1 = 0
+   (p2 - p1 + t2 * d2 - t1 * d1) * d2 = 0
+   t2 * (d2.d1) - t1 = (p1 - p2).d1
+   t2 - t1 * (d1.d2) = (p1 - p2).d2
+
+   delta = 1 - (d1.d2)**2
+
+   t2 = [ d2.(p1-p2) - d1.(p1-p2) * (d1.d2)]/delta
+   t1 = [-d1.(p1-p2) + d2.(p1-p2) * (d1.d2)]/delta
+   @endverbatim
  */
-FWMATH_API bool getClosestPoints( const fwLine& _line1, const fwLine& _line2, fwVec3d& _pointOnThis, fwVec3d& _pointOnfwLine);
+FWMATH_API bool getClosestPoints( const fwLine& _ray1, const fwLine& _ray2,
+                                  fwVec3d& _pointOnThis, fwVec3d& _pointOnfwLine);
 
 /**
- * @brief
+ * @brief Compute the projection of a point in a given direction.
+ *  @param [in]  _ray ray (origin,direction). Direction vector is assumed be normalized.
+ *  @param [in]  _point point to be projected
+ *  @return closest point of the line if an intersection is found.
  */
-FWMATH_API fwVec3d getClosestPoint( const fwLine& _line, fwVec3d& _point);
+FWMATH_API fwVec3d getClosestPoint( const fwLine& _ray, const fwVec3d& _point);
 
 /**
- * @brief
+ * @brief Compute the projection of a point in a given direction and test if this intersection is inside a given radius.
+ *  @param [in]  _ray ray (origin,direction). Direction vector is assumed be normalized.
+ *  @param [in]  _radius maximum distance of the point
+ *  @param [in]  _point point to be projected
+ *  @return closest point of the line if an intersection is found.
  */
-FWMATH_API bool intersect(const fwLine& _line, double _radius, fwVec3d _point) ;
+FWMATH_API bool intersect(const fwLine& _ray, double _radius, const fwVec3d& _point);
 
 /**
- * @brief
+ * @brief Compute the closest points between two rays and test these points lie inside a sphere of a given radius.
+ *  @param [in]  _line ray (origin,direction). Direction vector is assumed be normalized.
+ *  @param [in]  _radius maximum distance of the point
+ *  @param [in]  _origin origin of the second ray
+ *  @param [in]  _direction direction of the second ray
+ *  @param [in]  _point point to be projected
+ *  @return closest point of the line if an intersection is found.
  */
-FWMATH_API bool intersect(const fwLine& _line, double _radius,fwVec3d _vec0, fwVec3d _vec1, fwVec3d _point);
+FWMATH_API bool intersect(const fwLine& _line, double _radius, const fwVec3d& _origin, const fwVec3d& _direction,
+                          fwVec3d& _point);
 
 /**
- * @brief
+ * @brief Give the intersection between a plane and a line. The result is returned in a point (_point).
+ * @deprecated This function was added for a specific purpose and will be removed in a future release.
+ *  @param [in]  _line input line (2 positions)
+ *  @param [in]  _v1 first point of the plane
+ *  @param [in]  _v2 second point of the plane
+ *  @param [in]  _v3 third point of the plane
+ *  @param [out] _point intersection point.
+ *  @param [out] _barycentric barycenter of the triangle defined by the three points of the plane.
+ *  @param [out] _front true if the dot product of the plane normal and ths positive Z axis (0,0,1) is positive.
+ *  @return true if an intersection is found.
  */
-FWMATH_API bool intersect( const fwLine& _line, const fwVec3d &_v1,  const fwVec3d &_v2, const fwVec3d &_v3, fwVec3d &_point, fwVec3d &_barycentric, bool& _front);
+FWMATH_API bool intersect( const fwLine& _line, const fwVec3d& _v1,  const fwVec3d& _v2, const fwVec3d& _v3,
+                           fwVec3d& _point, fwVec3d& _barycentric, bool& _front);
 
 }
 
-#endif /* _FWMATH_LINEFUNCTIONS_HPP_ */
+#endif /* __FWMATH_LINEFUNCTIONS_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/MatrixFunctions.hpp b/SrcLib/core/fwMath/include/fwMath/MatrixFunctions.hpp
index baa7428..fd72eca 100644
--- a/SrcLib/core/fwMath/include/fwMath/MatrixFunctions.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/MatrixFunctions.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMATH_MATRIXFUNCTIONS_HPP_
-#define _FWMATH_MATRIXFUNCTIONS_HPP_
+#ifndef __FWMATH_MATRIXFUNCTIONS_HPP__
+#define __FWMATH_MATRIXFUNCTIONS_HPP__
 
 #include <fwCore/base.hpp>
 
 #include "fwMath/IntrasecTypes.hpp"
-#include "fwMath/export.hpp"
+#include "fwMath/config.hpp"
 
-namespace fwMath {
+namespace fwMath
+{
 
 /**
  * @brief Multiply a matrix by a vector
@@ -21,14 +22,34 @@ namespace fwMath {
  *  @param [out] _dest
  *
  */
-FWMATH_API void multVecMatrix(const fwMatrix4x4 & _matrix, const fwVec3d& _source ,fwVec3d& _dest);
+FWMATH_API void multVecMatrix(const fwMatrix4x4 & _matrix, const fwVec3d& _source,fwVec3d& _dest);
+
 /**
  * @brief Compute a matrix rotation
+ * @deprecated The function implementation seems very dodgy, prefer ::glm::yawPitchRoll() or ::glm::orientate4()
  *  @param [in]  _vecNorm
  *  @return rotation matrix
  *
  */
-
 FWMATH_API fwMatrix4x4  getRotationMatrix( const fwVec3d &_vecNorm );
-}
-#endif /* _FWMATH_MATRIXFUNCTIONS_HPP_ */
+
+/**
+ * @brief Computes the inverse of a matrix
+ *  @param [in]  matrix
+ *  @return inverted matrix
+ *
+ */
+FWMATH_API fwMatrix4x4  getInverse( const fwMatrix4x4 & matrix );
+
+} // namespace fwMath
+
+/**
+ * @brief Multiplies a matrix by a matrix
+ *  @param [in]  matrix1
+ *  @param [in]  matrix2
+ *  @return matrix
+ *
+ */
+FWMATH_API fwMatrix4x4 operator*( const fwMatrix4x4 & matrix1, const fwMatrix4x4 & matrix2 );
+
+#endif /* __FWMATH_MATRIXFUNCTIONS_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/MeshFunctions.hpp b/SrcLib/core/fwMath/include/fwMath/MeshFunctions.hpp
index 0ed5dbd..3982b7b 100644
--- a/SrcLib/core/fwMath/include/fwMath/MeshFunctions.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/MeshFunctions.hpp
@@ -1,23 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMATH_MESHFUNCTIONS_HPP_
-#define _FWMATH_MESHFUNCTIONS_HPP_
+#ifndef __FWMATH_MESHFUNCTIONS_HPP__
+#define __FWMATH_MESHFUNCTIONS_HPP__
 
-#include <cmath>
-#include <vector>
-#include <utility>
-
-#include <boost/unordered_map.hpp>
-#include <boost/foreach.hpp>
+#include "fwMath/IntrasecTypes.hpp"
+#include "fwMath/config.hpp"
 
 #include <fwCore/base.hpp>
-#include "fwMath/IntrasecTypes.hpp"
-#include "fwMath/export.hpp"
 
+#include <boost/unordered_map.hpp>
+#include <cmath>
+#include <utility>
+#include <vector>
 
 namespace fwMath
 {
@@ -25,7 +23,8 @@ namespace fwMath
 /**
  * @brief
  */
-FWMATH_API bool IsInclosedVolume(const fwVertexPosition &_vertex, const fwVertexIndex &_vertexIndex, const fwVec3d &_P );
+FWMATH_API bool IsInclosedVolume(const fwVertexPosition &_vertex, const fwVertexIndex &_vertexIndex,
+                                 const fwVec3d &_p );
 
 /**
  * @brief Compute the intersection between triangle(define by threes vertex vert1, vert2, vert3) and the Oz parallel line and cross by the point P.
@@ -36,15 +35,17 @@ FWMATH_API bool IsInclosedVolume(const fwVertexPosition &_vertex, const fwVertex
  * "Fast, Minimum Storage Ray/Triangle Intersection", Tomas Muller, Ben Trumbore.
  *
  */
-FWMATH_API bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0, fwVec3d _vert1, fwVec3d _vert2, double &_t, double &_u, double &_v);
+FWMATH_API bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0, fwVec3d _vert1, fwVec3d _vert2,
+                                   double &_t, double &_u, double &_v);
 
 /// test whatever a vertex is duplicated or not
 FWMATH_API bool isBorderlessSurface( const fwVertexIndex &_vertexIndex);
 
-FWMATH_API void findBorderEdges( const fwVertexIndex &_vertexIndex , std::vector< std::vector<  std::pair< int, int  > > > &contours);
+FWMATH_API void findBorderEdges( const fwVertexIndex &_vertexIndex, std::vector< std::vector<  std::pair< int,
+                                                                                                          int  > > > &contours);
 
 /**
- *  @brief Closes the surface if necessary
+ * @brief Closes the surface if necessary
  * @return True if container mesh is changed
  */
 FWMATH_API bool closeSurface( fwVertexPosition &_vertex, fwVertexIndex &_vertexIndex );
@@ -55,6 +56,7 @@ FWMATH_API bool closeSurface( fwVertexPosition &_vertex, fwVertexIndex &_vertexI
 FWMATH_API bool removeOrphanVertices( fwVertexPosition &_vertex, fwVertexIndex &_vertexIndex );
 
 //-----------------------------------------------------------------------------
+
 template <typename T, typename U>
 std::pair< T, U > makeOrderedPair(const T first, const U second)
 {
@@ -69,46 +71,48 @@ std::pair< T, U > makeOrderedPair(const T first, const U second)
 }
 
 //-----------------------------------------------------------------------------
+
 template <typename T, typename U, typename V>
-bool isBorderlessSurface(T* cellDataBegin, T* cellDataEnd, U* cellDataOffsetsBegin, U* cellDataOffsetsEnd, V* cellTypesBegin)
+bool isBorderlessSurface(T* cellDataBegin, T* cellDataEnd, U* cellDataOffsetsBegin, U* cellDataOffsetsEnd,
+                         V* cellTypesBegin)
 {
     typedef std::pair< T, T >  Edge; // always Edge.first < Edge.second !!
-    typedef boost::unordered_map< Edge, int >  EdgeHistogram;
+    typedef ::boost::unordered_map< Edge, int >  EdgeHistogram;
     EdgeHistogram edgesHistogram;
     bool isBorderless = true;
 
-    size_t dataLen = 0;
-    U* iter = cellDataOffsetsBegin;
-    U* iter2 = cellDataOffsetsBegin + 1;
+    size_t dataLen   = 0;
+    U* iter          = cellDataOffsetsBegin;
+    U* iter2         = cellDataOffsetsBegin + 1;
     const U* iterEnd = cellDataOffsetsEnd - 1;
-    V* iterTypes = cellTypesBegin;
+    V* iterTypes     = cellTypesBegin;
 
     dataLen = *iter2 - *iter;
     for (
-            ;
-            iter < iterEnd || ( iter < cellDataOffsetsEnd && (dataLen = (cellDataEnd - cellDataBegin) - *iter) ) ;
-            dataLen = *++iter2 - *++iter, ++iterTypes
+        ;
+        iter < iterEnd || ( iter < cellDataOffsetsEnd && (dataLen = (cellDataEnd - cellDataBegin) - *iter) );
+        dataLen = *++iter2 - *++iter, ++iterTypes
         )
     {
         if(*iterTypes == 0)
         {
             continue;
         }
-        T* iterCell = cellDataBegin + *iter;
-        T* iterCell2 = iterCell + 1;
-        T* beginCell = iterCell;
+        T* iterCell          = cellDataBegin + *iter;
+        T* iterCell2         = iterCell + 1;
+        T* beginCell         = iterCell;
         const T* iterCellEnd = beginCell + dataLen - 1;
         for (
-                ;
-                iterCell < iterCellEnd || ( iterCell < (beginCell + dataLen) && (iterCell2 = beginCell) ) ;
-                ++iterCell, ++iterCell2
+            ;
+            iterCell < iterCellEnd || ( iterCell < (beginCell + dataLen) && (iterCell2 = beginCell) );
+            ++iterCell, ++iterCell2
             )
         {
             ++edgesHistogram[makeOrderedPair(*iterCell, *(iterCell2))];
         }
     }
 
-    BOOST_FOREACH(const typename EdgeHistogram::value_type &histo, edgesHistogram)
+    for(const typename EdgeHistogram::value_type &histo : edgesHistogram)
     {
         if (histo.second != 2)
         {
@@ -122,4 +126,4 @@ bool isBorderlessSurface(T* cellDataBegin, T* cellDataEnd, U* cellDataOffsetsBeg
 
 }
 
-#endif /* _FWMATH_MESHFUNCTIONS_HPP_ */
+#endif /* __FWMATH_MESHFUNCTIONS_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/Namespace.hpp b/SrcLib/core/fwMath/include/fwMath/Namespace.hpp
index acd0940..2cb71f5 100644
--- a/SrcLib/core/fwMath/include/fwMath/Namespace.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/Namespace.hpp
@@ -1,21 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMATHNAMESPACE_HPP_
-#define FWMATHNAMESPACE_HPP_
+#ifndef __FWMATH_NAMESPACE_HPP__
+#define __FWMATH_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwMath contains classes which provide the implementation of several mathematic functions and objects (plane, line, point).
  * @namespace   fwMath
- * 
- * @date        2009-2010.
- *
  */
 
 namespace fwMath
 {
 }
-#endif /* FWMATHNAMESPACE_HPP_ */
+#endif /* __FWMATH_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/PlaneFunctions.hpp b/SrcLib/core/fwMath/include/fwMath/PlaneFunctions.hpp
index 9d69b3a..ce08eb1 100644
--- a/SrcLib/core/fwMath/include/fwMath/PlaneFunctions.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/PlaneFunctions.hpp
@@ -1,21 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMATH_PLANEFUNCTIONS_HPP_
-#define _FWMATH_PLANEFUNCTIONS_HPP_
+#ifndef __FWMATH_PLANEFUNCTIONS_HPP__
+#define __FWMATH_PLANEFUNCTIONS_HPP__
 
-#include <fwCore/base.hpp>
 
 #include "fwMath/IntrasecTypes.hpp"
 #include "fwMath/VectorFunctions.hpp"
 #include "fwMath/LineFunctions.hpp"
-#include "fwMath/export.hpp"
+#include "fwMath/config.hpp"
 #include "fwMath/MatrixFunctions.hpp"
 
-namespace fwMath {
+#include <fwCore/base.hpp>
+
+namespace fwMath
+{
 
 static const double EPSILON = 0.001;
 
@@ -73,7 +75,7 @@ FWMATH_API void  setDistance(fwPlane& _plane, const double _distance);
  *  @param [out] _point intersection point.
  *  @return true if an intersection is found.
  */
-FWMATH_API bool intersect( const fwPlane& _fwPlane, const fwLine & _line, fwVec3d & _point);
+FWMATH_API bool intersect( const fwPlane& _fwPlane, const fwLine & _line, fwVec3d& _point);
 
 /**
  *  @brief Compute if a point is in a half plane.
@@ -99,5 +101,14 @@ FWMATH_API void transform(fwPlane& _plane, const fwMatrix4x4& _matrix);
  */
 FWMATH_API void offset(fwPlane& _plane, double _offset);
 
-}
-#endif /* _FWMATH_PLANEFUNCTIONS_HPP_ */
+} // namespace fwMath
+
+/**
+ *  @brief Compares if two planes are equal
+ *  @param [in]  plane1
+ *  @param [in]  plane2
+ *  @return true if the planes are equal and false if they are not.
+ */
+FWMATH_API bool operator==(fwPlane& plane1, fwPlane& plane2);
+
+#endif /* __FWMATH_PLANEFUNCTIONS_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/VectorFunctions.hpp b/SrcLib/core/fwMath/include/fwMath/VectorFunctions.hpp
index 0c92191..979a495 100644
--- a/SrcLib/core/fwMath/include/fwMath/VectorFunctions.hpp
+++ b/SrcLib/core/fwMath/include/fwMath/VectorFunctions.hpp
@@ -1,20 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMATH_VECTORFUNCTIONS_HPP_
-#define _FWMATH_VECTORFUNCTIONS_HPP_
-
-#include <cmath>
+#ifndef __FWMATH_VECTORFUNCTIONS_HPP__
+#define __FWMATH_VECTORFUNCTIONS_HPP__
 
 #include <fwCore/base.hpp>
 
 #include "fwMath/IntrasecTypes.hpp"
-#include "fwMath/export.hpp"
+#include "fwMath/config.hpp"
 
-namespace fwMath {
+namespace fwMath
+{
 
 /**
  *  @brief Normalize a vector
@@ -22,11 +21,11 @@ namespace fwMath {
 FWMATH_API double normalize(fwVec3d & vec);
 
 /**
- *  @brief Retrun a normalized vector
+ *  @brief Return a normalized vector
  *  @param [in] vec vector to normalize
  *  @return normalized vector
  */
-FWMATH_API fwVec3d normalized(fwVec3d & vec);
+FWMATH_API fwVec3d normalized(const fwVec3d & vec);
 
 /**
  *  @brief Compute the Dot product between two vectors.
@@ -48,13 +47,7 @@ FWMATH_API fwVec3d cross(const fwVec3d& v1, const fwVec3d& v2);
  *  @param [in] _vec
  *  @return the vector's length
  */
-FWMATH_API double vecLength(fwVec3d &_vec);
-
-/**
- *  @brief Compute of the vector.
- *  @param [in] _vec
- */
-//FWMATH_API void setPosition(fwVec3d &_vec);
+FWMATH_API double vecLength(const fwVec3d &_vec);
 
 /**
  *  @brief Compute the negate of the vector.
@@ -63,7 +56,7 @@ FWMATH_API double vecLength(fwVec3d &_vec);
  */
 FWMATH_API void negate(fwVec3d &_vec);
 
-}
+} //namespace fwMath
 
 /**
  *  @brief operator *= for fwVec3d
@@ -79,42 +72,48 @@ FWMATH_API fwVec3d& operator*=(fwVec3d& vec1, double val);
  *  @param [in] val
  *  @return vec[0]/=val, vec[1]/=val, vec[2]/=val
  */
-FWMATH_API fwVec3d& operator/=(fwVec3d& vec,  double val );
+FWMATH_API fwVec3d& operator/=(fwVec3d& vec, double val );
+
 /**
  *  @brief operator += for fwVec3d
  *  @param [in] vec1
  *  @param [in] vec2
  *  @return  vec1 => vec1[0]+=vec2[0], vec1[1]+=vec2[1], vec1[2]+=vec2[2]
  */
-FWMATH_API fwVec3d& operator+=(fwVec3d& vec1, fwVec3d& vec2);
+FWMATH_API fwVec3d& operator+=(fwVec3d& vec1, const fwVec3d& vec2);
+
 /**
  *  @brief
  *  @param [in] vec1
  *  @param [in] vec2
  *  @return vec1[0]-=vec2[0], vec1[1]-=vec2[1], vec1[2]-=vec2[2]
  */
-FWMATH_API fwVec3d& operator-=(fwVec3d& vec1, fwVec3d& vec2);
+FWMATH_API fwVec3d& operator-=(fwVec3d& vec1, const fwVec3d& vec2);
+
 /**
  *  @brief operator * between fwVec3d and value.
  *  @param [in] _vec
  *  @param [in] _val
  *  @return the result of the operation _vec*val
  */
-FWMATH_API fwVec3d operator*(const fwVec3d& _vec, const double _val);
+FWMATH_API fwVec3d operator*(const fwVec3d& _vec, double _val);
+
 /**
  *  @brief operator * between value and fwVec3d.
  *  @param [in] _val
  *  @param [in] _vec
- *  @return the resut of the operation _vec*val
+ *  @return the result of the operation _vec*val
  */
 FWMATH_API fwVec3d operator*(const double _val, const fwVec3d& _vec);
+
 /**
  *  @brief operator / between fwVec3d and value.
  *  @param [in] _vec
  *  @param [in] val
- *  @return the resut of the operation _vec/val
+ *  @return the result of the operation _vec/val
  */
 FWMATH_API fwVec3d operator/(const fwVec3d& _vec, double val);
+
 /**
  *  @brief operator + between two fwVec3d.
  *  @param [in] _vec1
@@ -122,20 +121,23 @@ FWMATH_API fwVec3d operator/(const fwVec3d& _vec, double val);
  *  @return the result of the operation _vec1 + _vec2
  */
 FWMATH_API fwVec3d operator+(const fwVec3d& _vec1, const fwVec3d& _vec2);
+
 /**
- *  @brief operator - between two fwVec3d datas.
+ *  @brief operator - between two fwVec3d data.
  *  @param [in] _vec1
  *  @param [in] _vec2
  *  @return the difference between two value.
  */
 FWMATH_API fwVec3d operator-(const fwVec3d& _vec1, const fwVec3d& _vec2);
+
 /**
- *  @brief Compare two fwVec3d datas.
+ *  @brief Compare two fwVec3d data.
  *  @param [in] _vec1
  *  @param [in] _vec2
  *  @return return 1 if equal 0 otherwise.
  */
 FWMATH_API int operator==(const fwVec3d& _vec1, const fwVec3d& _vec2);
+
 /**
  *  @brief Compare two fwVec3d data.
  *  @param [in] _vec1
@@ -144,4 +146,5 @@ FWMATH_API int operator==(const fwVec3d& _vec1, const fwVec3d& _vec2);
  */
 FWMATH_API int operator!=(const fwVec3d& _vec1, const fwVec3d& _vec2);
 
-#endif /* _FWMATH_VECTORFUNCTIONS_HPP_ */
+
+#endif /* __FWMATH_VECTORFUNCTIONS_HPP__ */
diff --git a/SrcLib/core/fwMath/include/fwMath/export.hpp b/SrcLib/core/fwMath/include/fwMath/export.hpp
deleted file mode 100644
index befd29f..0000000
--- a/SrcLib/core/fwMath/include/fwMath/export.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWMATH_CONFIG_HPP_
-#define _FWMATH_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWMATH_EXPORTS
-    #define FWMATH_API __declspec(dllexport)
-    #else
-    #define FWMATH_API __declspec(dllimport)
-    #endif
-    
-    #define FWMATH_CLASS_API
-
-    #pragma warning(disable: 4290)
-    
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWMATH_EXPORTS
-        #define FWMATH_API __attribute__ ((visibility("default")))
-        #define FWMATH_CLASS_API __attribute__ ((visibility("default")))
-        #else
-        #define FWMATH_API __attribute__ ((visibility("hidden")))
-        #define FWMATH_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-#else
-
-    #define FWMATH_API
-    #define FWMATH_CLASS_API
-
-#endif
-
-
-#endif //_FWMATH_CONFIG_HPP_
diff --git a/SrcLib/core/fwMath/src/fwMath/LineFunctions.cpp b/SrcLib/core/fwMath/src/fwMath/LineFunctions.cpp
index 373c09b..858c27c 100644
--- a/SrcLib/core/fwMath/src/fwMath/LineFunctions.cpp
+++ b/SrcLib/core/fwMath/src/fwMath/LineFunctions.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,83 +8,110 @@
 #include "fwMath/VectorFunctions.hpp"
 #include "fwMath/PlaneFunctions.hpp"
 
-namespace fwMath {
+#include <glm/glm.hpp>
+#include <glm/gtc/type_ptr.hpp>
+
+#include <limits>
+
+namespace fwMath
+{
 
 //------------------------------------------------------------------------------
 
-bool getClosestPoints( const fwLine& _line1, const fwLine& _line2, fwVec3d& _pointOnThis, fwVec3d& _pointOnfwLine)
+bool getClosestPoints( const fwLine& _ray1, const fwLine& _ray2, fwVec3d& _pointOnThis, fwVec3d& _pointOnfwLine)
 {
-    SLM_TRACE_FUNC();
-    const fwVec3d& pos1 = _line1.first;
-    const fwVec3d& dir1 = _line1.second;
+    const ::glm::dvec3 pos1 = ::glm::make_vec3<double>(_ray1.first.data());
+    const ::glm::dvec3 dir1 = ::glm::make_vec3<double>(_ray1.second.data());
+
+    const ::glm::dvec3 pos2 = ::glm::make_vec3<double>(_ray2.first.data());
+    const ::glm::dvec3 dir2 = ::glm::make_vec3<double>(_ray2.second.data());
 
-    const fwVec3d& pos2 = _line2.first;
-    const fwVec3d& dir2 = _line2.second;
+    double dd    = ::glm::dot(dir1, dir2);
+    double delta = 1.0 - dd * dd;
 
-    double dd = dot(dir1, dir2);
-    double delta = 1.0F - dd * dd;
+    if(delta < std::numeric_limits<double>::epsilon())
+    {
+        return false;
+    }
 
-    if((float)delta==0.0F) return false;
+    double t2 = ( ::glm::dot(dir2, pos1 - pos2) -  ::glm::dot(dir1, pos1-pos2) * dd)/delta;
+    double t1 = ( -::glm::dot(dir1, pos1 - pos2) + ::glm::dot(dir2, pos1-pos2) * dd)/delta;
 
-    double t2 = ( dot(dir2, pos1 - pos2) -  dot(dir1, pos1-pos2) * dd)/delta;
-    double t1  = ( -dot(dir1, pos1 - pos2) + dot(dir2, pos1-pos2) * dd)/delta;
+    const ::glm::dvec3 pointOnThis   = pos1 + t1 * dir1;
+    const ::glm::dvec3 pointOnfwLine = pos2 + t2 * dir2;
 
-    _pointOnThis = pos1 + t1 * dir1;
-    _pointOnfwLine = pos2 + t2 * dir2;
+    _pointOnThis[0] = pointOnThis[0];
+    _pointOnThis[1] = pointOnThis[1];
+    _pointOnThis[2] = pointOnThis[2];
+
+    _pointOnfwLine[0] = pointOnfwLine[0];
+    _pointOnfwLine[1] = pointOnfwLine[1];
+    _pointOnfwLine[2] = pointOnfwLine[2];
 
     return true;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d getClosestPoint( const fwLine& _line, fwVec3d& _point)
+fwVec3d getClosestPoint( const fwLine& _ray, const fwVec3d& _point)
 {
-    SLM_TRACE_FUNC();
-    const fwVec3d& pos = _line.first;
-    const fwVec3d& dir = _line.second;
+    const ::glm::dvec3 pos   = ::glm::make_vec3<double>(_ray.first.data());
+    const ::glm::dvec3 dir   = ::glm::make_vec3<double>(_ray.second.data());
+    const ::glm::dvec3 point = ::glm::make_vec3<double>(_point.data());
+
+    double t              = ::glm::dot(point - pos, dir);
+    const ::glm::dvec3 pt = (pos + t * dir);
 
-    double t = dot(_point - pos,dir);
-    return (pos + t * dir);
+    fwVec3d res;
+    res[0] = pt[0];
+    res[1] = pt[1];
+    res[2] = pt[2];
+
+    return res;
 }
 
 //------------------------------------------------------------------------------
 
-bool intersect(const fwLine& _line, double _radius, fwVec3d _point)
+bool intersect(const fwLine& _ray, double _radius, const fwVec3d& _point)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d point = getClosestPoint(_line, _point);
-    fwVec3d tmp = _point-point;
-    double length = vecLength(tmp);
-    if(length>_radius) return false;
-    return true;
+    fwVec3d point          = getClosestPoint(_ray, _point);
+    const ::glm::dvec3 pt1 = ::glm::make_vec3<double>(_point.data());
+    const ::glm::dvec3 pt2 = ::glm::make_vec3<double>(point.data());
+    ::glm::dvec3 tmp = pt1-pt2;
+    double length = ::glm::length(tmp);
+    return (length <= _radius);
 }
 
 //------------------------------------------------------------------------------
 
-bool intersect(const fwLine& _line, double _radius,fwVec3d _vec0, fwVec3d _vec1, fwVec3d _point)
+bool intersect(const fwLine& _ray, double _radius, const fwVec3d& _origin, const fwVec3d& _direction, fwVec3d& _point)
 {
-    SLM_TRACE_FUNC();
-    fwLine line = std::pair<fwVec3d, fwVec3d>(_vec0, _vec1);
+    fwLine line = std::pair<fwVec3d, fwVec3d>(_origin, _direction);
     fwVec3d pThis;
-    if(getClosestPoints(_line, line,pThis,_point) == false) return false;
-    fwVec3d tmp = _point-pThis;
-    double length = vecLength(tmp);
-    if(length>_radius) return false;
-    return true;
+    if(getClosestPoints(_ray, line, pThis, _point) == false)
+    {
+        return false;
+    }
+
+    const ::glm::dvec3 pt1 = ::glm::make_vec3<double>(_point.data());
+    const ::glm::dvec3 pt2 = ::glm::make_vec3<double>(pThis.data());
+    ::glm::dvec3 tmp = pt1-pt2;
+    double length = ::glm::length(tmp);
 
+    return (length <= _radius);
 }
 
 //------------------------------------------------------------------------------
 
-bool intersect( const fwLine& _line, const fwVec3d &_v1,  const fwVec3d &_v2, const fwVec3d &_v3, fwVec3d &_point, fwVec3d &_barycentric, bool& _front) {
-
-    SLM_TRACE_FUNC();
+bool intersect( const fwLine& _line, const fwVec3d& _v1,  const fwVec3d& _v2, const fwVec3d& _v3, fwVec3d& _point,
+                fwVec3d& _barycentric, bool& _front)
+{
     _barycentric = (_v1 + _v2 + _v3)/3.;
-    fwVec3d v01 = _v2 - _v1;
-    fwVec3d v12 = _v3 - _v2;
-    fwVec3d v20 = _v1 - _v3;
+    const fwVec3d v01 = _v2 - _v1;
+    const fwVec3d v12 = _v3 - _v2;
+    const fwVec3d v20 = _v1 - _v3;
 
-    fwPlane plane = getPlane(_v1, _v2, _v3);
+    const fwPlane plane = getPlane(_v1, _v2, _v3);
 
     fwVec3d v;
     v[0] = 0.0F;
@@ -92,12 +119,27 @@ bool intersect( const fwLine& _line, const fwVec3d &_v1,  const fwVec3d &_v2, co
     v[2] = 1.0F;
 
     const fwVec3d& normal = getNormal(plane);
-    _front = (float)(dot(normal,v ))>=0.0F ? true : false;
-    if(intersect(plane, _line, _point)==false) return false;
-
-    if((float)(dot(normal, cross(v01, _point-_v1)))<0.0F) return false;
-    if((float)(dot(normal, cross(v12, _point-_v2)))<0.0F) return false;
-    if((float)(dot(normal, cross(v20, _point-_v3)))<0.0F) return false;
-    return true;
-}
+    _front = ((dot(normal,v )) >= 0.0);
+
+    bool isIntersect = true;
+    if(intersect(plane, _line, _point) == false)
+    {
+        isIntersect = false;
+    }
+    else if((dot(normal, cross(v01, _point-_v1))) < 0.0)
+    {
+        isIntersect = false;
+    }
+    else if((dot(normal, cross(v12, _point-_v2))) < 0.0)
+    {
+        isIntersect = false;
+    }
+    else if((dot(normal, cross(v20, _point-_v3))) < 0.0)
+    {
+        isIntersect = false;
+    }
+
+    return isIntersect;
 }
+
+} //namespace fwMath
diff --git a/SrcLib/core/fwMath/src/fwMath/MatrixFunctions.cpp b/SrcLib/core/fwMath/src/fwMath/MatrixFunctions.cpp
index 5113eb2..28517e0 100644
--- a/SrcLib/core/fwMath/src/fwMath/MatrixFunctions.cpp
+++ b/SrcLib/core/fwMath/src/fwMath/MatrixFunctions.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,64 +7,122 @@
 #include "fwMath/MatrixFunctions.hpp"
 #include "fwMath/VectorFunctions.hpp"
 
-namespace fwMath {
+#include <glm/glm.hpp>
+#include <glm/mat4x4.hpp>
+#include <glm/gtx/euler_angles.hpp>
+#include <glm/gtc/matrix_transform.hpp>
 
-void multVecMatrix(const fwMatrix4x4 & _matrix, const fwVec3d& _source ,fwVec3d& _dest)
+
+namespace fwMath
+{
+
+void multVecMatrix(const fwMatrix4x4 & matrix, const fwVec3d& source,fwVec3d& dest)
 {
-    SLM_TRACE_FUNC();
-    double x,y,z;
-    x = _source[0];
-    y = _source[1];
-    z = _source[2];
-
-    _dest[0] = _matrix[0][0] * x + _matrix[1][0] * y + _matrix[2][0] * z + _matrix[3][0];
-    _dest[1] = _matrix[0][1] * x + _matrix[1][1] * y + _matrix[2][1] * z + _matrix[3][1];
-    _dest[2] = _matrix[0][2] * x + _matrix[1][2] * y + _matrix[2][2] * z + _matrix[3][2];
+    // fwMatrix4x4 is stored row-major
+    // glm matrices are stored column-major
+
+    ::glm::dmat4x4 mat(matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
+                       matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
+                       matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
+                       matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
+
+    ::glm::dvec4 vec(source[0], source[1], source[2], 1.0);
+    ::glm::dvec4 res = mat * vec;
+
+    dest[0] = res[0];
+    dest[1] = res[1];
+    dest[2] = res[2];
+}
+
+//------------------------------------------------------------------------------
+
+fwMatrix4x4  getInverse( const fwMatrix4x4 & matrix )
+{
+    // fwMatrix4x4 is stored row-major
+    // glm matrices are stored column-major
+
+    ::glm::dmat4x4 mat(matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
+                       matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
+                       matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
+                       matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
+
+    ::glm::dmat4x4 matInv = ::glm::inverse(mat);
+
+    fwMatrix4x4 inverse = {matInv[0][0], matInv[1][0], matInv[2][0], matInv[3][0],
+                           matInv[0][1], matInv[1][1], matInv[2][1], matInv[3][1],
+                           matInv[0][2], matInv[1][2], matInv[2][2], matInv[3][2],
+                           matInv[0][3], matInv[1][3], matInv[2][3], matInv[3][3]};
+    return inverse;
 }
 
 //------------------------------------------------------------------------------
 
-fwMatrix4x4  getRotationMatrix( const fwVec3d &_vecNorm )
+fwMatrix4x4  getRotationMatrix( const fwVec3d& _vecNorm )
 {
     fwMatrix4x4 R;
 
     const double FV0 = _vecNorm[0];
     const double FV1 = _vecNorm[1];
     const double YP  = sqrt( FV0 * FV0 + FV1 * FV1 );
-    const double RZ  = - atan2(FV0, FV1);
-    const double RX  = - atan2(YP, _vecNorm[2]);
-
+    const double RZ  = -atan2(FV0, FV1);
+    const double RX  = -atan2(YP, _vecNorm[2]);
 
-//     Rotation Matrix
-//     [     cos(z)           sin(z)         0     0 ]
-//     [                                             ]
-//     [ - cos(x) sin(z)   cos(x) cos(z)   sin(x)  0 ]
-//     [                                             ]
-//     [  sin(x) sin(z)   - sin(x) cos(z)  cos(x)  0 ]
-//     [                                             ]
-//     [        0                0           0     1 ]
+    //     Rotation Matrix
+    //     [     cos(z)           sin(z)         0     0 ]
+    //     [                                             ]
+    //     [ - cos(x) sin(z)   cos(x) cos(z)   sin(x)  0 ]
+    //     [                                             ]
+    //     [  sin(x) sin(z)   - sin(x) cos(z)  cos(x)  0 ]
+    //     [                                             ]
+    //     [        0                0           0     1 ]
 
-    R[0][0] =  cos(RZ);
-    R[0][1] =  sin(RZ);
-    R[0][2] =  0;
-    R[0][3] =  0.;
+    R[0][0] = cos(RZ);
+    R[0][1] = sin(RZ);
+    R[0][2] = 0;
+    R[0][3] = 0.;
 
     R[1][0] = -cos(RX) * sin(RZ);
-    R[1][1] =  cos(RX) * cos(RZ);
-    R[1][2] =  sin(RX);
-    R[1][3] =  0.;
+    R[1][1] = cos(RX) * cos(RZ);
+    R[1][2] = sin(RX);
+    R[1][3] = 0.;
 
-    R[2][0] =  sin(RX) * sin(RZ);
+    R[2][0] = sin(RX) * sin(RZ);
     R[2][1] = -sin(RX) * cos(RZ);
-    R[2][2] =  cos(RX);
-    R[2][3] =  0.;
+    R[2][2] = cos(RX);
+    R[2][3] = 0.;
 
-    R[3][2] =  0.;
-    R[3][3] =  1.;
-    R[3][0] =  0.;
-    R[3][1] =  0.;
+    R[3][0] = 0.;
+    R[3][1] = 0.;
+    R[3][2] = 0.;
+    R[3][3] = 1.;
 
     return R;
 }
 
+//------------------------------------------------------------------------------
 }
+
+fwMatrix4x4 operator*( const fwMatrix4x4 & matrix1, const fwMatrix4x4 & matrix2 )
+{
+    ::glm::dmat4x4 mat1(matrix1[0][0], matrix1[1][0], matrix1[2][0], matrix1[3][0],
+                        matrix1[0][1], matrix1[1][1], matrix1[2][1], matrix1[3][1],
+                        matrix1[0][2], matrix1[1][2], matrix1[2][2], matrix1[3][2],
+                        matrix1[0][3], matrix1[1][3], matrix1[2][3], matrix1[3][3]);
+
+    ::glm::dmat4x4 mat2(matrix2[0][0], matrix2[1][0], matrix2[2][0], matrix2[3][0],
+                        matrix2[0][1], matrix2[1][1], matrix2[2][1], matrix2[3][1],
+                        matrix2[0][2], matrix2[1][2], matrix2[2][2], matrix2[3][2],
+                        matrix2[0][3], matrix2[1][3], matrix2[2][3], matrix2[3][3]);
+
+    ::glm::dmat4x4 prod = mat1 * mat2;
+
+    fwMatrix4x4 product = {prod[0][0], prod[1][0], prod[2][0], prod[3][0],
+                           prod[0][1], prod[1][1], prod[2][1], prod[3][1],
+                           prod[0][2], prod[1][2], prod[2][2], prod[3][2],
+                           prod[0][3], prod[1][3], prod[2][3], prod[3][3]};
+
+    return product;
+}
+
+//------------------------------------------------------------------------------
+
diff --git a/SrcLib/core/fwMath/src/fwMath/MeshFunctions.cpp b/SrcLib/core/fwMath/src/fwMath/MeshFunctions.cpp
index 476258a..5ce53fb 100644
--- a/SrcLib/core/fwMath/src/fwMath/MeshFunctions.cpp
+++ b/SrcLib/core/fwMath/src/fwMath/MeshFunctions.cpp
@@ -1,25 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <map>
-#include <list>
-#include <set>
-#include <boost/foreach.hpp>
-#include <boost/unordered_map.hpp>
-
 #include "fwMath/MeshFunctions.hpp"
 #include "fwMath/VectorFunctions.hpp"
 
+#include <boost/unordered_map.hpp>
+#include <list>
+#include <map>
+#include <set>
 
 namespace fwMath
 {
 
 //-----------------------------------------------------------------------------
 
-bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0, fwVec3d _vert1, fwVec3d _vert2, double &_t, double &_u, double &_v)
+bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0,
+                        fwVec3d _vert1, fwVec3d _vert2,
+                        double &_t, double &_u, double &_v)
 {
     const double Epsilon = 0.000001;
 
@@ -35,7 +35,10 @@ bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0, fwVec3d _ve
     /* if determinant is near zero, ray lies in plane of triangle */
     const double Det = ::fwMath::dot(edge1, pvec);
 
-    if (Det > -Epsilon && Det < Epsilon) return false;
+    if (Det > -Epsilon && Det < Epsilon)
+    {
+        return false;
+    }
     const double Inv_det = 1.0 / Det;
 
     /* calculate distance from vert0 to ray origin */
@@ -43,14 +46,20 @@ bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0, fwVec3d _ve
 
     /* calculate U parameter and test bounds */
     _u = Inv_det * ::fwMath::dot(tvec, pvec);
-    if (_u < 0.0 || _u > 1.0) return false;
+    if (_u < 0.0 || _u > 1.0)
+    {
+        return false;
+    }
 
     /* prepare to test V parameter */
     qvec = ::fwMath::cross(tvec, edge1);
 
     /* calculate V parameter and test bounds */
-    _v =  Inv_det * ::fwMath::dot(_dir, qvec);
-    if (_v < 0.0 || _u + _v > 1.0) return false;
+    _v = Inv_det * ::fwMath::dot(_dir, qvec);
+    if (_v < 0.0 || _u + _v > 1.0)
+    {
+        return false;
+    }
 
     /* calculate t, ray intersects triangle */
     _t = Inv_det * ::fwMath::dot(edge2, qvec);
@@ -59,67 +68,80 @@ bool intersect_triangle(fwVec3d _orig, fwVec3d _dir, fwVec3d _vert0, fwVec3d _ve
 
 //------------------------------------------------------------------------------
 
-bool IsInclosedVolume(const fwVertexPosition &_vertex, const fwVertexIndex &_vertexIndex, const fwVec3d &_P)
+bool IsInclosedVolume(const fwVertexPosition &_vertex, const fwVertexIndex &_vertexIndex, const fwVec3d &_p)
 {
-    const unsigned int X=0, Y=1, Z=2;
-    const size_t ElementNbr  = _vertexIndex.size();
+    const unsigned int X    = 0, Y = 1, Z = 2;
+    const size_t ElementNbr = _vertexIndex.size();
     if ( ElementNbr == 0 )
+    {
         return false;
+    }
 
     // on regarde tous les triangles du maillage
-    unsigned int IntersectionNbr = 0;
-    for ( size_t i = 0 ; i < ElementNbr ; ++i )
+    unsigned int intersectionNbr = 0;
+    for ( size_t i = 0; i < ElementNbr; ++i )
     {
         //recuperation des trois sommets du triangle
-        const fwVec3d P1 = {{_vertex[ _vertexIndex[i][0] ][0], _vertex[ _vertexIndex[i][0] ][1], _vertex[ _vertexIndex[i][0] ][2]}};
-        const fwVec3d P2 = {{_vertex[ _vertexIndex[i][1] ][0], _vertex[ _vertexIndex[i][1] ][1], _vertex[ _vertexIndex[i][1] ][2]}};
-        const fwVec3d P3 = {{_vertex[ _vertexIndex[i][2] ][0], _vertex[ _vertexIndex[i][2] ][1], _vertex[ _vertexIndex[i][2] ][2]}};
+        const fwVec3d P1 =
+        {_vertex[ _vertexIndex[i][0] ][0], _vertex[ _vertexIndex[i][0] ][1], _vertex[ _vertexIndex[i][0] ][2]};
+        const fwVec3d P2 =
+        {_vertex[ _vertexIndex[i][1] ][0], _vertex[ _vertexIndex[i][1] ][1], _vertex[ _vertexIndex[i][1] ][2]};
+        const fwVec3d P3 =
+        {_vertex[ _vertexIndex[i][2] ][0], _vertex[ _vertexIndex[i][2] ][1], _vertex[ _vertexIndex[i][2] ][2]};
 
         //on enleve les triangles s'ils sont situes au dessus du point
-        OSLM_TRACE("Trg : " << i << " with Z = [" << P1[Z]  << "][" << P2[Z]  << "][" << P3[Z]  << "] compare with " << _P[Z] );
+        OSLM_TRACE(
+            "Trg : " << i << " with Z = [" << P1[Z]  << "][" << P2[Z]  << "][" << P3[Z]  << "] compare with " <<
+            _p[Z] );
 
-        if ( !(P1[Z] > _P[Z] && P2[Z] > _P[Z] && P3[Z] > _P[Z] ) ) //trianglePotentiallyWellPositionned
+        if ( !(P1[Z] > _p[Z] && P2[Z] > _p[Z] && P3[Z] > _p[Z] ) ) //trianglePotentiallyWellPositionned
         {
             //on teste la presence des vertex de part et d'autre des 3 axes.
             //Si P1[X] > P[X] alors il faut necessairement P2[X] < P[X] ou P3[X] < P[X], idem pour les 2 autres axes
             //En outre cela permet d'exclure les points qui sont situes sur les axes
             bool stop = false;
-            for ( unsigned int axe = X ; axe <= Y && !stop ; ++axe )
+            for ( unsigned int axe = X; axe <= Y && !stop; ++axe )
             {
-                const double Delta1 = P1[axe] - _P[axe];
-                const double Delta2 = P2[axe] - _P[axe];
-                const double Delta3 = P3[axe] - _P[axe];
+                const double Delta1 = P1[axe] - _p[axe];
+                const double Delta2 = P2[axe] - _p[axe];
+                const double Delta3 = P3[axe] - _p[axe];
 
                 OSLM_TRACE("d1 : " << Delta1 << "d2 : " << Delta2 << "d3 : " << Delta3 );
 
-                if ( Delta1 >= 0.f && Delta2 >= 0.f && Delta3 >= 0.f ) { stop = true; break;}
-                if ( Delta1 < 0.f && Delta2 < 0.f && Delta3 < 0.f ) { stop = true; break;}
+                if ( Delta1 >= 0.f && Delta2 >= 0.f && Delta3 >= 0.f )
+                {
+                    stop = true; break;
+                }
+                if ( Delta1 < 0.f && Delta2 < 0.f && Delta3 < 0.f )
+                {
+                    stop = true; break;
+                }
             }
             if ( !stop )
             {
                 OSLM_TRACE("The face(" << i << ") is interesting to find a point in volume");
 
-                fwVec3d orig = {{_P[0], _P[1], _P[2]}};
+                fwVec3d orig = {_p[0], _p[1], _p[2]};
 
-                fwVec3d dir = {{ 0.f, 0.f, 1.f}};
-                fwVec3d vert0 = {{ P1[0], P1[1], P1[2]}};
-                fwVec3d vert1 = {{ P2[0], P2[1], P2[2]}};
-                fwVec3d vert2 = {{ P3[0], P3[1], P3[2]}};
+                fwVec3d dir   = { 0.f, 0.f, 1.f};
+                fwVec3d vert0 = { P1[0], P1[1], P1[2]};
+                fwVec3d vert1 = { P2[0], P2[1], P2[2]};
+                fwVec3d vert2 = { P3[0], P3[1], P3[2]};
                 double t, u, v;
                 if ( intersect_triangle (orig, dir, vert0, vert1, vert2, t, u, v) )
                 {
-                    //on ne garde que les points situes en dessous du point _P selon l'axe (Oz)
+                    //on ne garde que les points situes en dessous du point _p selon l'axe (Oz)
                     if (t < 0.f)
                     {
                         OSLM_TRACE(" t = " << t << " u = " << u << " v = " << v);
-                        ++IntersectionNbr;
+                        ++intersectionNbr;
                     }
                 }
             }
         }
     }
-    OSLM_TRACE("Nb intersection : " << IntersectionNbr);
-    return ( IntersectionNbr%2 == 1 );
+    OSLM_TRACE("Nb intersection : " << intersectionNbr);
+    return ( intersectionNbr%2 == 1 );
 }
 
 //-----------------------------------------------------------------------------
@@ -127,11 +149,11 @@ bool IsInclosedVolume(const fwVertexPosition &_vertex, const fwVertexIndex &_ver
 bool isBorderlessSurface(const fwVertexIndex &_vertexIndex)
 {
     typedef std::pair< int, int >  Edge; // always Edge.first < Edge.second !!
-    typedef boost::unordered_map< Edge, int >  EdgeHistogram;
+    typedef ::boost::unordered_map< Edge, int >  EdgeHistogram;
     EdgeHistogram edgesHistogram;
     bool isBorderless = true;
 
-    BOOST_FOREACH(const fwVertexIndex::value_type &vertex, _vertexIndex)
+    for(const fwVertexIndex::value_type &vertex :  _vertexIndex)
     {
         OSLM_ASSERT("Invalid vertex size: "<< vertex.size(), vertex.size() > 2 );
         ++edgesHistogram[std::make_pair(std::min(vertex[0],vertex[1]), std::max(vertex[0],vertex[1]) )];
@@ -139,7 +161,7 @@ bool isBorderlessSurface(const fwVertexIndex &_vertexIndex)
         ++edgesHistogram[std::make_pair(std::min(vertex[2],vertex[1]), std::max(vertex[2],vertex[1]) )];
     }
 
-    BOOST_FOREACH(EdgeHistogram::value_type &histo, edgesHistogram)
+    for(const EdgeHistogram::value_type &histo :  edgesHistogram)
     {
         if (histo.second<2)
         {
@@ -154,32 +176,33 @@ bool isBorderlessSurface(const fwVertexIndex &_vertexIndex)
 //-----------------------------------------------------------------------------
 
 // container of connected component
-void findBorderEdges( const fwVertexIndex &_vertexIndex , std::vector< std::vector<  std::pair< int, int  > > > &contours)
+void findBorderEdges( const fwVertexIndex &_vertexIndex,
+                      std::vector< std::vector<  std::pair< int, int  > > > &contours)
 {
     typedef std::pair< int, int  >  Edge;
     typedef std::vector< Edge > Contour; // at Border
     typedef std::vector< Contour> Contours;
 
-    std::map< Edge  , int > edgesHistogram;
-    for ( fwVertexIndex::const_iterator iter=_vertexIndex.begin(); iter!= _vertexIndex.end(); ++iter )
+    std::map< Edge, int > edgesHistogram;
+    for ( fwVertexIndex::value_type vertex : _vertexIndex)
     {
-        assert (iter->size()>2 );
-        int i1=  (*iter)[0];
-        int i2 = (*iter)[1];
-        int i3 = (*iter)[2];
-        edgesHistogram[std::make_pair(std::min(i1,i2),std::max(i1,i2) )]++;
-        edgesHistogram[std::make_pair(std::min(i1,i3),std::max(i1,i3) )]++;
-        edgesHistogram[std::make_pair(std::min(i3,i2),std::max(i3,i2) )]++;
+        assert(vertex.size() > 2 );
+        int i1 = vertex[0];
+        int i2 = vertex[1];
+        int i3 = vertex[2];
+        edgesHistogram[std::make_pair(std::min(i1,i2), std::max(i1,i2) )]++;
+        edgesHistogram[std::make_pair(std::min(i1,i3), std::max(i1,i3) )]++;
+        edgesHistogram[std::make_pair(std::min(i3,i2), std::max(i3,i2) )]++;
     }
 
-    for ( std::map< Edge  , int >::const_iterator iter=edgesHistogram.begin(); iter!=edgesHistogram.end(); ++iter )
+    for ( const std::map< Edge, int >::value_type& elt1 : edgesHistogram )
     {
-        if (iter->second<2) // an orphan found
+        if (elt1.second<2) // an orphan found
         {
             Contour contour;
             contour.reserve(1000);
             std::list< Edge > fifo;
-            Edge orphan = iter->first;
+            Edge orphan = elt1.first;
 
             fifo.push_back(orphan);
             while( !fifo.empty() )
@@ -187,24 +210,25 @@ void findBorderEdges( const fwVertexIndex &_vertexIndex , std::vector< std::vect
                 Edge current = fifo.front();
                 contour.push_back( current );
                 fifo.pop_front();
-                edgesHistogram[current]=2; // to mark it processed;
-                // search neighboor at border and insert in fifo
-                for ( std::map< Edge  , int >::const_iterator iterL=edgesHistogram.begin(); iterL!=edgesHistogram.end(); ++iterL )
+                edgesHistogram[current] = 2; // to mark it processed;
+
+                // search neighbor at border and insert in fifo
+                for ( const std::map< Edge, int >::value_type& elt2 : edgesHistogram )
                 {
-                    Edge candidate= iterL->first;
-                    if ( iterL->second < 2 ) // at border
+                    Edge candidate = elt2.first;
+                    if ( elt2.second < 2 ) // at border
                     {
-                        if ( candidate.first == current.first ||  candidate.second == current.second || // neighboor
+                        if ( candidate.first == current.first ||  candidate.second == current.second || // neighbor
                              candidate.first == current.second ||  candidate.second == current.first
-                           )
+                             )
                         {
-                            edgesHistogram[candidate]=2; // mark processed;
+                            edgesHistogram[candidate] = 2; // mark processed;
                             fifo.push_back( candidate );
                         }
                     }
                 }
             }
-            // all neighboor processed
+            // all neighbor processed
             contours.push_back( contour );
         }
     }
@@ -219,31 +243,32 @@ bool closeSurface(  fwVertexPosition &_vertex, fwVertexIndex &_vertexIndex )
     typedef std::vector< Contour> Contours;
 
     Contours contours;
-    findBorderEdges( _vertexIndex , contours);
-    bool closurePerformed = !contours.empty() ;
+    findBorderEdges( _vertexIndex, contours);
+    bool closurePerformed = !contours.empty();
     // close each hole
-    for ( Contours::iterator contour=contours.begin();  contour != contours.end(); ++contour )
+    for( const Contours::value_type& contour : contours )
     {
-        int newVertexIndex = _vertex.size() ;
+        size_t newVertexIndex = _vertex.size();
         // create gravity point & insert new triangle
         std::vector< float > massCenter(3,0);
-        for ( Contour::iterator edge =contour->begin();  edge != contour->end(); ++edge )
+
+        for ( const Contour::value_type& edge : contour )
         {
-            for (int i=0; i<3; ++i )
+            for (int i = 0; i<3; ++i )
             {
-                massCenter[i]  += _vertex[edge->first][i];
-                massCenter[i]  += _vertex[edge->second][i];
+                massCenter[i] += _vertex[edge.first][i];
+                massCenter[i] += _vertex[edge.second][i];
             }
             // create new Triangle
             std::vector< int > triangleIndex(3);
-            triangleIndex[0] =  edge->first;
-            triangleIndex[1] =  edge->second;
-            triangleIndex[2] =  newVertexIndex;
+            triangleIndex[0] = edge.first;
+            triangleIndex[1] = edge.second;
+            triangleIndex[2] = newVertexIndex;
             _vertexIndex.push_back( triangleIndex ); // TEST
         }
-        for (int i=0; i<3; ++i )
+        for (int i = 0; i<3; ++i )
         {
-            massCenter[i] /= contour->size()*2;
+            massCenter[i] /= contour.size()*2;
         }
         _vertex.push_back( massCenter ); // normalize barycenter
     }
@@ -259,11 +284,11 @@ bool removeOrphanVertices( fwVertexPosition &_vertex, fwVertexIndex &_vertexInde
 
     std::set< int > indexPointToKeep;
 
-    for ( fwVertexIndex::const_iterator iter=_vertexIndex.begin(); iter!= _vertexIndex.end(); ++iter )
+    for( const fwVertexIndex::value_type& vertex : _vertexIndex )
     {
-        indexPointToKeep.insert( (*iter)[0] );
-        indexPointToKeep.insert( (*iter)[1] );
-        indexPointToKeep.insert( (*iter)[2] );
+        indexPointToKeep.insert( vertex[0] );
+        indexPointToKeep.insert( vertex[1] );
+        indexPointToKeep.insert( vertex[2] );
     }
 
     bool orphanFound = indexPointToKeep.size() != _vertex.size();
@@ -271,26 +296,25 @@ bool removeOrphanVertices( fwVertexPosition &_vertex, fwVertexIndex &_vertexInde
     if (orphanFound)
     {
         // rebuild index table according to element suppression
-        int idx=0;
+        int idx = 0;
         std::map< int, int > translate; // map oldIndex -> newIndex (to take into account removal
         std::set< int >::iterator idxIter;
-        for ( idxIter =  indexPointToKeep.begin() ; idxIter !=  indexPointToKeep.end() ; ++idxIter )
+        for (int indexPt : indexPointToKeep )
         {
-            translate[ *idxIter ] = idx++;
-            newVertex.push_back(  _vertex[ *idxIter  ] );
+            translate[ indexPt ] = idx++;
+            newVertex.push_back(  _vertex[ indexPt ] );
         }
 
-        for ( fwVertexIndex::iterator iter=_vertexIndex.begin(); iter!= _vertexIndex.end(); ++iter )
+        for (fwVertexIndex::value_type& vertex : _vertexIndex )
         {
-            (*iter)[0] = translate[ (*iter)[0]  ];
-            (*iter)[1] = translate[ (*iter)[1]  ];
-            (*iter)[2] = translate[ (*iter)[2]  ];
+            vertex[0] = translate[ vertex[0]  ];
+            vertex[1] = translate[ vertex[1]  ];
+            vertex[2] = translate[ vertex[2]  ];
         }
-
-//        _vertex = newVertex;
         _vertex.swap(newVertex);
     }
     return orphanFound;
 }
 
+
 } // namespace fwMath
diff --git a/SrcLib/core/fwMath/src/fwMath/PlaneFunctions.cpp b/SrcLib/core/fwMath/src/fwMath/PlaneFunctions.cpp
index 3e8f3f0..49bfd07 100644
--- a/SrcLib/core/fwMath/src/fwMath/PlaneFunctions.cpp
+++ b/SrcLib/core/fwMath/src/fwMath/PlaneFunctions.cpp
@@ -1,141 +1,204 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwMath/PlaneFunctions.hpp"
 
-namespace fwMath {
+#include <glm/glm.hpp>
+#include <glm/ext.hpp>
+
+
+#define EPSILON 0.00000001
+
+namespace fwMath
+{
 
 //------------------------------------------------------------------------------
 
-fwPlane getPlane(const fwVec3d & _point1, const fwVec3d & _point2, const fwVec3d & _point3) {
-    SLM_TRACE_FUNC();
+fwPlane getPlane(const fwVec3d & point1, const fwVec3d & point2, const fwVec3d & point3)
+{
     fwPlane plane;
-    setValues(plane, _point1, _point2, _point3);
+    setValues(plane, point1, point2, point3);
 
     return plane;
 }
 
 //------------------------------------------------------------------------------
 
-void setValues(fwPlane& _plane, const fwVec3d & _point1, const fwVec3d & _point2, const fwVec3d & _point3)
+void setValues(fwPlane& plane, const fwVec3d & point1, const fwVec3d & point2, const fwVec3d & point3)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d  normalVec= cross(_point2 - _point1, _point3 -_point1);
-    if((float)(vecLength(normalVec)) <= 0.0F) {
-        normalVec[0] =0.0F;
-        normalVec[1] =0.0F;
-        normalVec[2] =1.0F;
+    ::glm::dvec3 p1(point1[0], point1[1], point1[2]);
+    ::glm::dvec3 p2(point2[0], point2[1], point2[2]);
+    ::glm::dvec3 p3(point3[0], point3[1], point3[2]);
+
+    ::glm::dvec3 normal = ::glm::cross(p2 - p1, p3 - p1);
+    if(::glm::length(normal) <= 0.0)
+    {
+        normal[0] = 0.0;
+        normal[1] = 0.0;
+        normal[2] = 1.0;
     }
-    normalize(normalVec);
-    // Normal
-    setNormal(_plane, normalVec);
-    // Distance
-    double distance = normalVec[0]*_point1[0] + normalVec[1]*_point1[1] + normalVec[2]*_point1[2];
-    setDistance(_plane, distance);
+    normal = ::glm::normalize(normal);
+    double distance = ::glm::dot(normal, p1);
+
+    plane[0] = normal[0];
+    plane[1] = normal[1];
+    plane[2] = normal[2];
+    plane[3] = distance;
 }
 
 //------------------------------------------------------------------------------
-fwVec3d getNormal(const fwPlane& _plane) {
-    SLM_TRACE_FUNC();
-    fwVec3d normalVec;
-    normalVec[0] = _plane[0];
-    normalVec[1] = _plane[1];
-    normalVec[2] = _plane[2];
-
-    return normalVec;
+
+fwVec3d getNormal(const fwPlane& plane)
+{
+    return {{plane[0], plane[1], plane[2]}};
 }
 
 //------------------------------------------------------------------------------
-void  setNormal(fwPlane& _plane, const fwVec3d& _normal) {
-    SLM_TRACE_FUNC();
-    fwVec3d normalNormalized(_normal);
-    normalize(normalNormalized);
-    _plane[0] = normalNormalized[0];
-    _plane[1] = normalNormalized[1];
-    _plane[2] = normalNormalized[2];
-    ;
+
+void setNormal(fwPlane& plane, const fwVec3d& normal)
+{
+    ::glm::dvec3 vecNormal(normal[0], normal[1], normal[2]);
+    vecNormal = ::glm::normalize(vecNormal);
+
+    plane[0] = vecNormal[0];
+    plane[1] = vecNormal[1];
+    plane[2] = vecNormal[2];
 }
+
 //------------------------------------------------------------------------------
 
-double getDistance(const fwPlane& _plane) {
-    SLM_TRACE_FUNC();
-    return _plane[3];
+double getDistance(const fwPlane& plane)
+{
+    return plane[3];
 }
 
 //------------------------------------------------------------------------------
 
-void  setDistance(fwPlane& _plane, const double _distance) {
-    SLM_TRACE_FUNC();
-    _plane[3] = _distance;
+void  setDistance(fwPlane& plane, const double distance)
+{
+    plane[3] = distance;
 }
 
 //------------------------------------------------------------------------------
-bool intersect( const fwPlane& _plane, const fwLine & _line,  fwVec3d & _point) {
-    SLM_TRACE_FUNC();
 
-    const fwVec3d pos = _line.first;
-    fwVec3d dirNormaliser = _line.second - _line.first;
-    ::fwMath::normalize(dirNormaliser);
+bool intersect( const fwPlane& plane, const fwLine & line,  fwVec3d & point)
+{
+    ::glm::dvec3 normal(plane[0], plane[1], plane[2]);
+    normal = ::glm::normalize(normal);
+    ::glm::dvec3 lineDirection(line.second[0] - line.first[0],
+                               line.second[1] - line.first[1],
+                               line.second[2] - line.first[2]);
+    lineDirection = ::glm::normalize(lineDirection);
+    ::glm::dvec3 lineOrigin(line.first[0], line.first[1], line.first[2]);
+
+    double intersectionDistance = 0.;
+    double d                    = ::glm::dot(lineDirection, normal);
+
+    if(std::abs(d) < EPSILON)
+    {
+        return false;
+    }
 
-    fwVec3d normalVec = getNormal(_plane);
-    double d = dot(normalVec, dirNormaliser);
-    if(abs((float)d) < 0.0F) return false;
-    double distance = getDistance(_plane);
-    double t = (distance - dot(normalVec, pos))/d;
-    _point = pos + (t * dirNormaliser);
+    intersectionDistance = (plane[3] - ::glm::dot(normal, lineOrigin)) / d;
+
+    lineOrigin += lineDirection * intersectionDistance;
+    point[0]    = lineOrigin[0];
+    point[1]    = lineOrigin[1];
+    point[2]    = lineOrigin[2];
 
     return true;
 }
 
 //------------------------------------------------------------------------------
 
-bool isInHalfSpace(const fwPlane& _plane, const fwVec3d& _point)
+bool isInHalfSpace(const fwPlane& plane, const fwVec3d& point)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d normalVec = getNormal(_plane);
-    fwVec3d pos = normalVec * getDistance(_plane);
-    return ((float)(dot(normalVec, _point-pos)) >= 0.0F ? true : false);
+    ::glm::dvec3 pointGlm(point[0], point[1], point[2]);
+    ::glm::dvec3 normal(plane[0], plane[1], plane[2]);
+    ::glm::normalize(normal);
+    ::glm::dvec3 pos = normal * plane[3];
+    return (::glm::dot(normal, pointGlm-pos) >= 0.0);
 }
 
 //------------------------------------------------------------------------------
 
-void transform(fwPlane& _plane, const fwMatrix4x4& _matrix)
+void transform(fwPlane& plane, const fwMatrix4x4& matrix)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d normalVec = getNormal(_plane);
-    fwVec3d beg = normalVec * getDistance(_plane);
-    fwVec3d end = beg + normalVec;
-    multVecMatrix(_matrix,beg,beg);
-    multVecMatrix(_matrix,end,end);
-    normalVec = end - beg;
-    normalize(normalVec);
-    setNormal(_plane, normalVec);
-    setDistance(_plane, dot(normalVec, beg));
-
+    ::glm::dvec3 normal(plane[0], plane[1], plane[2]);
+    ::glm::dvec3 beg(normal * plane[3]);
+    ::glm::dvec3 end(beg + normal);
+    ::glm::dvec4 beg4(beg, 1.0);
+    ::glm::dvec4 end4(end, 1.0);
+    ::glm::dmat4x4 mat(matrix[0][0], matrix[1][0], matrix[2][0], matrix[3][0],
+                       matrix[0][1], matrix[1][1], matrix[2][1], matrix[3][1],
+                       matrix[0][2], matrix[1][2], matrix[2][2], matrix[3][2],
+                       matrix[0][3], matrix[1][3], matrix[2][3], matrix[3][3]);
+
+    beg4 = mat * beg4;
+    end4 = mat * end4;
+
+    end[0] = end4[0];
+    end[1] = end4[1];
+    end[2] = end4[2];
+
+    beg[0] = beg4[0];
+    beg[1] = beg4[1];
+    beg[2] = beg4[2];
+
+    normal = end - beg;
+    normal = ::glm::normalize(normal);
+
+    plane[0] = normal[0];
+    plane[1] = normal[1];
+    plane[2] = normal[2];
+    plane[3] = ::glm::dot(normal, beg);
 }
 
 //------------------------------------------------------------------------------
 
-void offset(fwPlane& _plane, double _offset)
+void offset(fwPlane& plane, double offset)
 {
-    SLM_TRACE_FUNC();
-    double distance = getDistance(_plane);
-    distance += _offset;
-    setDistance(_plane, distance);
-
+    double distance = getDistance(plane);
+    distance += offset;
+    setDistance(plane, distance);
 }
 
-fwPlane getPlane(const fwVec3d&  _normal,const fwVec3d& _point)
+//------------------------------------------------------------------------------
+
+fwPlane getPlane(const fwVec3d&  normal,const fwVec3d& point)
 {
-    SLM_TRACE_FUNC();
+    ::glm::dvec3 pointGlm(point[0], point[1], point[2]);
+    ::glm::dvec3 normalGlm(normal[0], normal[1], normal[2]);
+    normalGlm = ::glm::normalize(normalGlm);
     fwPlane plane;
-    fwVec3d normalVec = _normal;
-    normalize(normalVec);
-    setNormal(plane, normalVec);
-    setDistance(plane, normalVec[0]*_point[0] +normalVec[1]*_point[1] + normalVec[2]*_point[2]);
+    plane[0] = normalGlm[0];
+    plane[1] = normalGlm[1];
+    plane[2] = normalGlm[2];
+    plane[3] = ::glm::dot(normalGlm, pointGlm);
     return plane;
 }
+
+} // namespace fwMath
+
+//------------------------------------------------------------------------------
+
+bool operator==(fwPlane& plane1, fwPlane& plane2)
+{
+    ::glm::dvec4 pl1(plane1[0], plane1[1], plane1[2], plane1[3]);
+    ::glm::dvec4 pl2(plane2[0], plane2[1], plane2[2], plane2[3]);
+
+    double dx = pl1[0] - pl2[0];
+    double dy = pl1[1] - pl2[1];
+    double dz = pl1[2] - pl2[2];
+    double dd = pl1[3] - pl2[3];
+
+    return ( std::abs(dx) < EPSILON &&
+             std::abs(dy) < EPSILON &&
+             std::abs(dz) < EPSILON &&
+             std::abs(dd) < EPSILON );
 }
+
+//------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMath/src/fwMath/VectorFunctions.cpp b/SrcLib/core/fwMath/src/fwMath/VectorFunctions.cpp
index e3a8162..3c37e5a 100644
--- a/SrcLib/core/fwMath/src/fwMath/VectorFunctions.cpp
+++ b/SrcLib/core/fwMath/src/fwMath/VectorFunctions.cpp
@@ -1,27 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwMath/VectorFunctions.hpp"
 
-namespace fwMath {
+#include <glm/glm.hpp>
+#include <glm/gtc/type_ptr.hpp>
 
-double normalize(fwVec3d & vec) 
+namespace fwMath
 {
-    SLM_TRACE_FUNC();
-    double norme = sqrt (vec[0] * vec[0] + vec[1] * vec[1] + vec[2] * vec[2]);
-    if((float)(norme)==0.0F) return 0.0F;
-    vec /= norme;
-    return norme;
+
+//------------------------------------------------------------------------------
+
+double normalize(fwVec3d& vec)
+{
+    const ::glm::dvec3 vecGlm        = ::glm::make_vec3<double>(vec.data());
+    const double length              = vecLength(vec);
+    const ::glm::dvec3 normalizedVec = ::glm::normalize(vecGlm);
+    vec[0] = normalizedVec[0];
+    vec[1] = normalizedVec[1];
+    vec[2] = normalizedVec[2];
+    return length;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d normalized(fwVec3d & vec) 
+fwVec3d normalized(const fwVec3d& vec)
 {
-    SLM_TRACE_FUNC();
     fwVec3d normalized = vec;
     normalize(normalized);
     return normalized;
@@ -29,153 +36,156 @@ fwVec3d normalized(fwVec3d & vec)
 
 //------------------------------------------------------------------------------
 
-double dot(const fwVec3d& v1, const fwVec3d& v2) 
+double dot(const fwVec3d& v1, const fwVec3d& v2)
 {
-    SLM_TRACE_FUNC();
-    return (v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2]);
+    // Using GLM here is slower, especially in debug, so keep it simple
+    return v1[0] * v2[0] + v1[1] * v2[1] + v1[2] * v2[2];
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d cross(const fwVec3d& v1, const fwVec3d& v2) 
+fwVec3d cross(const fwVec3d& v1, const fwVec3d& v2)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d v;
-    v[0] = v1[1] * v2[2] - v1[2] * v2[1];
-    v[1] = v1[2] * v2[0] - v1[0] * v2[2];
-    v[2] = v1[0] * v2[1] - v1[1] * v2[0];
+    const ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(v1.data());
+    const ::glm::dvec3 vecGlm2 = ::glm::make_vec3<double>(v2.data());
+
+    ::glm::dvec3 res = ::glm::cross(vecGlm1, vecGlm2);
 
-    return v;
+    return {{res[0], res[1], res[2]}};
 }
 
 //------------------------------------------------------------------------------
 
-double vecLength(fwVec3d &_vec) 
+double vecLength(const fwVec3d &vec)
 {
-    SLM_TRACE_FUNC();
-    return sqrt(_vec[0] * _vec[0] + _vec[1] * _vec[1] + _vec[2] * _vec[2]);
+    ::glm::dvec3 vecGLM (vec[0], vec[1], vec[2]);
+    return ::glm::length(vecGLM);
 }
 
-void negate(fwVec3d &_vec)
-{
-    SLM_TRACE_FUNC();
-    _vec[0]=-_vec[0];
-    _vec[1]=-_vec[1];
-    _vec[2]=-_vec[2];
-}
+//------------------------------------------------------------------------------
 
+void negate(fwVec3d &vec)
+{
+    vec[0] = -vec[0];
+    vec[1] = -vec[1];
+    vec[2] = -vec[2];
 }
+} //namespace fwMath
 
 //------------------------------------------------------------------------------
 
-fwVec3d& operator*=(fwVec3d& vec1, double val) {
-    SLM_TRACE_FUNC();
-    vec1[0] *= val;
-    vec1[1] *= val;
-    vec1[2] *= val;
-    return vec1;
+fwVec3d& operator*=(fwVec3d& vec1, double val)
+{
+    ::glm::dvec3 vecGlm1(vec1[0], vec1[1], vec1[2]);
+    vecGlm1 *= val;
+    vec1     = {{vecGlm1[0], vecGlm1[1], vecGlm1[2]}};
 
+    return vec1;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d& operator/=(fwVec3d& vec,  double val ) {
-    if((double)(val)!=0.0F) {
-        vec[0] /= val;
-        vec[1] /= val;
-        vec[2] /= val;
-    }
+fwVec3d& operator/=(fwVec3d& vec, double val )
+{
+    FW_RAISE_IF("Division by 0 not possible.", val == 0.0);
+
+    ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(vec.data());
+    vecGlm1             /= val;
+    vec                  = {{vecGlm1[0], vecGlm1[1], vecGlm1[2]}};
+
     return vec;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d& operator+=(fwVec3d& vec1, fwVec3d& vec2) {
-    vec1[0] += vec2[0];
-    vec1[1] += vec2[1];
-    vec1[2] += vec2[2];
+fwVec3d& operator+=(fwVec3d& vec1, const fwVec3d& vec2)
+{
+    ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(vec1.data());
+    ::glm::dvec3 vecGlm2 = ::glm::make_vec3<double>(vec2.data());
+    vecGlm1             += vecGlm2;
+    vec1                 = {{vecGlm1[0], vecGlm1[1], vecGlm1[2]}};
+
     return vec1;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d& operator-=(fwVec3d& vec1, fwVec3d& vec2) {
-    vec1[0] -= vec2[0];
-    vec1[1] -= vec2[1];
-    vec1[2] -= vec2[2];
+fwVec3d& operator-=(fwVec3d& vec1, const fwVec3d& vec2)
+{
+    ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(vec1.data());
+    ::glm::dvec3 vecGlm2 = ::glm::make_vec3<double>(vec2.data());
+    vecGlm1             -= vecGlm2;
+    vec1                 = {{vecGlm1[0], vecGlm1[1], vecGlm1[2]}};
+
     return vec1;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d operator*(const fwVec3d& _vec, const double _val)
+fwVec3d operator*(const fwVec3d& vec, double val)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d v;
-    v[0] = _vec[0] * _val;
-    v[1] = _vec[1] * _val;
-    v[2] = _vec[2] * _val;
-    return v;
+    ::glm::dvec3 vecGlm1(vec[0], vec[1], vec[2]);
+    ::glm::dvec3 vecGlm = vecGlm1 * val;
+
+    return {{vecGlm[0], vecGlm[1], vecGlm[2]}};
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d operator*(const double _val, const fwVec3d& _vec)
+fwVec3d operator*(const double val, const fwVec3d& vec)
 {
-    SLM_TRACE_FUNC();
-    return _vec * _val;
+    return vec * val;
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d operator/(const fwVec3d& _vec, double _val)
+fwVec3d operator/(const fwVec3d& vec, double val)
 {
-    fwVec3d v;
-    v[0] = _vec[0] / _val;
-    v[1] = _vec[1] / _val;
-    v[2] = _vec[2] / _val;
+    FW_RAISE_IF("Division by 0 not possible.", val == 0.0);
+
+    ::glm::dvec3 vecGlm1(vec[0], vec[1], vec[2]);
+    ::glm::dvec3 vecGlm = vecGlm1 / val;
 
-    return v;
+    return {{vecGlm[0], vecGlm[1], vecGlm[2]}};
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d operator+(const fwVec3d& _vec1, const fwVec3d& _vec2)
+fwVec3d operator+(const fwVec3d& vec1, const fwVec3d& vec2)
 {
-    SLM_TRACE_FUNC();
-    fwVec3d v;
-    v[0] = _vec1[0] + _vec2[0];
-    v[1] = _vec1[1] + _vec2[1];
-    v[2] = _vec1[2] + _vec2[2];
+    const ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(vec1.data());
+    const ::glm::dvec3 vecGlm2 = ::glm::make_vec3<double>(vec2.data());
+    ::glm::dvec3 vecGlm = vecGlm1 + vecGlm2;
 
-    return v;
+    return {{vecGlm[0], vecGlm[1], vecGlm[2]}};
 }
 
 //------------------------------------------------------------------------------
 
-fwVec3d operator-(const fwVec3d& _vec1, const fwVec3d& _vec2)
+fwVec3d operator-(const fwVec3d& vec1, const fwVec3d& vec2)
 {
-    fwVec3d v;
-    v[0] = _vec1[0] - _vec2[0];
-    v[1] = _vec1[1] - _vec2[1];
-    v[2] = _vec1[2] - _vec2[2];
+    const ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(vec1.data());
+    const ::glm::dvec3 vecGlm2 = ::glm::make_vec3<double>(vec2.data());
+    ::glm::dvec3 vecGlm = vecGlm1 - vecGlm2;
 
-    return v;
+    return {{vecGlm[0], vecGlm[1], vecGlm[2]}};
 }
 
 //------------------------------------------------------------------------------
 
-int operator==(const fwVec3d& _vec1, const fwVec3d& _vec2)
+int operator==(const fwVec3d& vec1, const fwVec3d& vec2)
 {
-    return (((float)(_vec1[0]) == (float)(_vec2[0])) && 
-            ((float)(_vec1[1]) == (float)(_vec2[1])) && 
-            ((float)(_vec1[2]) == (float)(_vec2[2]))
-            ) ;
+    const ::glm::dvec3 vecGlm1 = ::glm::make_vec3<double>(vec1.data());
+    const ::glm::dvec3 vecGlm2 = ::glm::make_vec3<double>(vec2.data());
+    ::glm::bvec3 res = ::glm::equal(vecGlm1, vecGlm2);
+
+    return res[0] && res[1] && res[2];
 }
 
 //------------------------------------------------------------------------------
 
-int operator!=(const fwVec3d& _vec1, const fwVec3d& _vec2)
+int operator!=(const fwVec3d& vec1, const fwVec3d& vec2)
 {
-    return !(_vec1 == _vec2);
+    return !(vec1 == vec2);
 }
+
diff --git a/SrcLib/core/fwMath/test/CMakeLists.txt b/SrcLib/core/fwMath/test/CMakeLists.txt
index 207087b..ca3d320 100644
--- a/SrcLib/core/fwMath/test/CMakeLists.txt
+++ b/SrcLib/core/fwMath/test/CMakeLists.txt
@@ -1,10 +1,9 @@
-
 fwLoadProperties()
 
-find_package (Boost COMPONENTS date_time REQUIRED)
+
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
 
+fwLink(${CPPUNIT_LIBRARY})
 
 
diff --git a/SrcLib/core/fwMath/test/Properties.cmake b/SrcLib/core/fwMath/test/Properties.cmake
index 6a235e1..0926ee9 100644
--- a/SrcLib/core/fwMath/test/Properties.cmake
+++ b/SrcLib/core/fwMath/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwMathTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwMath )
+set( DEPENDENCIES fwTools fwCore fwTest fwMath )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwMath/test/cppunit.options b/SrcLib/core/fwMath/test/cppunit.options
deleted file mode 100644
index 7c1b97f..0000000
--- a/SrcLib/core/fwMath/test/cppunit.options
+++ /dev/null
@@ -1,12 +0,0 @@
-
-CLASSTEST=[
-    'MatrixFunctionsTest',
-    'PlaneFunctionsTest',
-    'VectorFunctionsTest',
-    'CompareTest',
-]
-
-USE = ['boost']
-LIB = ['fwData_0-1','fwTools_0-1', 'fwMath_0-1', 'fwCore_0-1']
-CONSOLE = 'yes'
-LOGLEVEL='trace'
diff --git a/SrcLib/core/fwMath/test/tu/include/CompareTest.hpp b/SrcLib/core/fwMath/test/tu/include/CompareTest.hpp
index 9bd00af..86f888f 100644
--- a/SrcLib/core/fwMath/test/tu/include/CompareTest.hpp
+++ b/SrcLib/core/fwMath/test/tu/include/CompareTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMATH_TU_COMPARETEST_HPP__
-#define __FWMATH_TU_COMPARETEST_HPP__
+#ifndef __FWMATH_UT_COMPARETEST_HPP__
+#define __FWMATH_UT_COMPARETEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,6 +16,7 @@ namespace ut
 
 class CompareTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( CompareTest );
     CPPUNIT_TEST( checkEquality);
     CPPUNIT_TEST( checkContainerEquality);
@@ -26,7 +27,6 @@ public:
     void setUp();
     void tearDown();
 
-    // fonctions de tests
     void checkEquality();
     void checkContainerEquality();
 };
@@ -34,4 +34,4 @@ public:
 } //namespace ut
 } //namespace fwMath
 
-#endif //__FWMATH_TU_COMPARETEST_HPP__
+#endif //__FWMATH_UT_COMPARETEST_HPP__
diff --git a/SrcLib/core/fwMath/test/tu/include/LineFunctionsTest.hpp b/SrcLib/core/fwMath/test/tu/include/LineFunctionsTest.hpp
new file mode 100644
index 0000000..da55cf0
--- /dev/null
+++ b/SrcLib/core/fwMath/test/tu/include/LineFunctionsTest.hpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMATH_UT_LINEFUNCTIONSTEST_HPP__
+#define __FWMATH_UT_LINEFUNCTIONSTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwMath
+{
+namespace ut
+{
+
+class LineFunctionsTest : public CPPUNIT_NS::TestFixture
+{
+private:
+    CPPUNIT_TEST_SUITE( LineFunctionsTest );
+    CPPUNIT_TEST( checkGetClosestPoint);
+    CPPUNIT_TEST( checkGetClosestPoints);
+    CPPUNIT_TEST( checkIntersect1);
+    CPPUNIT_TEST( checkIntersect2);
+    CPPUNIT_TEST( checkIntersect3);
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp();
+    void tearDown();
+
+    void checkGetClosestPoint();
+    void checkGetClosestPoints();
+    void checkIntersect1();
+    void checkIntersect2();
+    void checkIntersect3();
+};
+
+} //namespace ut
+} //namespace fwMath
+
+#endif // __FWMATH_UT_LINEFUNCTIONSTEST_HPP__
diff --git a/SrcLib/core/fwMath/test/tu/include/MatrixFunctionsTest.hpp b/SrcLib/core/fwMath/test/tu/include/MatrixFunctionsTest.hpp
index 57567e0..367c0f6 100644
--- a/SrcLib/core/fwMath/test/tu/include/MatrixFunctionsTest.hpp
+++ b/SrcLib/core/fwMath/test/tu/include/MatrixFunctionsTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMATH_TU_MATRIXFUNCTIONSTEST_HPP__
-#define __FWMATH_TU_MATRIXFUNCTIONSTEST_HPP__
+#ifndef __FWMATH_UT_MATRIXFUNCTIONSTEST_HPP__
+#define __FWMATH_UT_MATRIXFUNCTIONSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,20 +16,24 @@ namespace ut
 
 class MatrixFunctionsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( MatrixFunctionsTest );
     CPPUNIT_TEST( checkMultVecMatrix);
+    CPPUNIT_TEST( checkRotationMatrix);
+    CPPUNIT_TEST( checkInverse);
     CPPUNIT_TEST_SUITE_END();
 
 public:
-    // interface
+
     void setUp();
     void tearDown();
-    // fonctions de tests
+
     void checkMultVecMatrix();
     void checkRotationMatrix();
+    void checkInverse();
 };
 
 } //namespace ut
 } //namespace fwMath
 
-#endif //__FWMATH_TU_MATRIXFUNCTIONSTEST_HPP__
+#endif //__FWMATH_UT_MATRIXFUNCTIONSTEST_HPP__
diff --git a/SrcLib/core/fwMath/test/tu/include/PlaneFunctionsTest.hpp b/SrcLib/core/fwMath/test/tu/include/PlaneFunctionsTest.hpp
index 6a4bb8c..f2e757c 100644
--- a/SrcLib/core/fwMath/test/tu/include/PlaneFunctionsTest.hpp
+++ b/SrcLib/core/fwMath/test/tu/include/PlaneFunctionsTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMATH_TU_PLANEFUNCTIONSTEST_HPP__
-#define __FWMATH_TU_PLANEFUNCTIONSTEST_HPP__
+#ifndef __FWMATH_UT_PLANEFUNCTIONSTEST_HPP__
+#define __FWMATH_UT_PLANEFUNCTIONSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,14 +16,17 @@ namespace ut
 
 class PlaneFunctionsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( PlaneFunctionsTest );
+    CPPUNIT_TEST( checkGetPlane );
+    CPPUNIT_TEST( checkSetValues );
     CPPUNIT_TEST( checkDistance );
     CPPUNIT_TEST( checkNormal );
-//  CPPUNIT_TEST( checkIntersect );
-    CPPUNIT_TEST( checkIsInHalfSpace_fwMath_SoLib );
+//    CPPUNIT_TEST( checkIntersect );
+    CPPUNIT_TEST( checkIsInHalfSpace );
     CPPUNIT_TEST( checkOffset );
     CPPUNIT_TEST( checkTransform );
-    CPPUNIT_TEST( checkIntersect_fwMath_SoLib);
+    CPPUNIT_TEST( checkOperator);
     CPPUNIT_TEST_SUITE_END();
 
 public:
@@ -32,16 +35,18 @@ public:
     void tearDown();
 
     // fonctions de tests
+    void checkSetValues();
+    void checkGetPlane();
     void checkDistance();
     void checkNormal();
     void checkIntersect();
-    void checkIsInHalfSpace_fwMath_SoLib();
+    void checkIsInHalfSpace();
     void checkOffset();
     void checkTransform();
-    void checkIntersect_fwMath_SoLib();
+    void checkOperator();
 };
 
 } //namespace ut
 } //namespace fwMath
 
-#endif //__FWMATH_TU_PLANEFUNCTIONSTEST_HPP__
+#endif //__FWMATH_UT_PLANEFUNCTIONSTEST_HPP__
diff --git a/SrcLib/core/fwMath/test/tu/include/VectorFunctionsTest.hpp b/SrcLib/core/fwMath/test/tu/include/VectorFunctionsTest.hpp
index 2c7a89b..bf06946 100644
--- a/SrcLib/core/fwMath/test/tu/include/VectorFunctionsTest.hpp
+++ b/SrcLib/core/fwMath/test/tu/include/VectorFunctionsTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMATH_TU_VECTORFUNCTIONSTEST_HPP__
-#define __FWMATH_TU_VECTORFUNCTIONSTEST_HPP__
+#ifndef __FWMATH_UT_VECTORFUNCTIONSTEST_HPP__
+#define __FWMATH_UT_VECTORFUNCTIONSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -17,12 +17,14 @@ namespace ut
 
 class VectorFunctionsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( VectorFunctionsTest );
     CPPUNIT_TEST( checkNormalize);
     CPPUNIT_TEST( checkDot );
-    CPPUNIT_TEST( checkDot_fwMath_Solib );
     CPPUNIT_TEST( checkCross );
-    CPPUNIT_TEST( checkCross_fwMath_SoLib );
+    CPPUNIT_TEST(checkNegate);
+    CPPUNIT_TEST(checkVecLength);
+    CPPUNIT_TEST(checkOperators);
     CPPUNIT_TEST_SUITE_END();
 
 protected:
@@ -31,15 +33,18 @@ public:
     // interface
     void setUp();
     void tearDown();
-    // fonctions de tests
+
     void checkDot();
-    void checkDot_fwMath_Solib();
     void checkCross();
-    void checkCross_fwMath_SoLib();
     void checkNormalize();
+    void checkNegate();
+    void checkVecLength();
+    void checkOperators();
+
+
 };
 
 } //namespace ut
 } //namespace fwMath
 
-#endif //__FWMATH_TU_VECTORFUNCTIONSTEST_HPP__
+#endif //__FWMATH_UT_VECTORFUNCTIONSTEST_HPP__
diff --git a/SrcLib/core/fwMath/test/tu/src/CompareTest.cpp b/SrcLib/core/fwMath/test/tu/src/CompareTest.cpp
index 1c72698..c64c7bb 100644
--- a/SrcLib/core/fwMath/test/tu/src/CompareTest.cpp
+++ b/SrcLib/core/fwMath/test/tu/src/CompareTest.cpp
@@ -1,13 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "CompareTest.hpp"
+
 #include <fwMath/Compare.hpp>
 #include <fwTools/random/Generator.hpp>
 
-#include "CompareTest.hpp"
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMath::ut::CompareTest );
@@ -17,17 +18,22 @@ namespace fwMath
 namespace ut
 {
 
+//------------------------------------------------------------------------------
+
 void CompareTest::setUp()
 {
     // Set up context before running a test.
+}
 
+//------------------------------------------------------------------------------
 
-}
 void CompareTest::tearDown()
 {
     // Clean up after the test run.
 }
 
+//------------------------------------------------------------------------------
+
 void CompareTest::checkEquality()
 {
     const double x1 = 0.000001;
@@ -40,6 +46,8 @@ void CompareTest::checkEquality()
     CPPUNIT_ASSERT_EQUAL(false, isEqual);
 }
 
+//------------------------------------------------------------------------------
+
 void CompareTest::checkContainerEquality()
 {
     std::vector< double > vect1(20);
diff --git a/SrcLib/core/fwMath/test/tu/src/LineFunctionsTest.cpp b/SrcLib/core/fwMath/test/tu/src/LineFunctionsTest.cpp
new file mode 100644
index 0000000..7512592
--- /dev/null
+++ b/SrcLib/core/fwMath/test/tu/src/LineFunctionsTest.cpp
@@ -0,0 +1,247 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "LineFunctionsTest.hpp"
+
+#define FW_PROFILING_DISABLED
+#include <fwCore/Profiling.hpp>
+
+#include <fwMath/LineFunctions.hpp>
+#include <fwMath/VectorFunctions.hpp>
+
+#include <glm/glm.hpp>
+
+#include <limits>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMath::ut::LineFunctionsTest );
+
+namespace fwMath
+{
+namespace ut
+{
+
+void LineFunctionsTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void LineFunctionsTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void LineFunctionsTest::checkGetClosestPoint()
+{
+    {
+        fwLine line = { {{0, 0, 0}}, {{1, 0, 0}} };
+        fwVec3d pt  = {{5, 10, 0}};
+
+        fwVec3d closestPt = ::fwMath::getClosestPoint(line, pt);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(5., closestPt[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(0., closestPt[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(0., closestPt[2], 0.001);
+    }
+    {
+        fwLine line = { {{2, -3, 1}}, {{1, 4, -3}} };
+        ::fwMath::normalize(line.second);
+        fwVec3d pt = {{1, 42, 2}};
+
+        fwVec3d closestPt;
+#ifndef FW_PROFILING_DISABLED
+        {
+            FW_PROFILE("::fwMath::getClosestPoint");
+            for(int i = 0; i < 1000000; ++i)
+            {
+                closestPt = ::fwMath::getClosestPoint(line, pt);
+            }
+        }
+#else
+        closestPt = ::fwMath::getClosestPoint(line, pt);
+#endif
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(8.76923, closestPt[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(24.0769, closestPt[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(-19.3077, closestPt[2], 0.001);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void LineFunctionsTest::checkGetClosestPoints()
+{
+    fwVec3d pointOnThis;
+    fwVec3d pointOnLine;
+
+    // No intersection, parallel lines
+    {
+        fwLine line1 = { {{0, 0, 0}}, {{1, 0, 0}} };
+        fwLine line2 = { {{0, 1, 0}}, {{1, 0, 0}} };
+
+        bool bIntersection = ::fwMath::getClosestPoints(line1, line2, pointOnThis, pointOnLine);
+
+        CPPUNIT_ASSERT(bIntersection == false);
+    }
+
+    // Intersection
+    {
+        fwLine line1 = { {{1, 1, 1}}, {{1, 0, 0}} };
+        fwLine line2 = { {{0, 0, 0}}, {{1, 1, 1}} };
+
+        ::fwMath::normalize(line2.second);
+
+        bool bIntersection = ::fwMath::getClosestPoints(line1, line2, pointOnThis, pointOnLine);
+
+        CPPUNIT_ASSERT(bIntersection == true);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnThis[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnThis[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnThis[2], 0.001);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[2], 0.001);
+    }
+
+    // No intersection, but lines are not parallel
+    {
+        fwLine line1 = { {{1, 1, 1}}, {{-1, 0, 0}} };
+        fwLine line2 = { {{-2, -1, -3}}, {{-1, -1, -1}} };
+
+        ::fwMath::normalize(line2.second);
+
+        bool bIntersection;
+#ifndef FW_PROFILING_DISABLED
+        {
+            FW_PROFILE("::fwMath::getClosestPoints");
+            for(int i = 0; i < 1000000; ++i)
+            {
+                bIntersection = ::fwMath::getClosestPoints(line1, line2, pointOnThis, pointOnLine);
+            }
+        }
+#else
+        bIntersection = ::fwMath::getClosestPoints(line1, line2, pointOnThis, pointOnLine);
+#endif
+
+        CPPUNIT_ASSERT(bIntersection == true);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnThis[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnThis[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnThis[2], 0.001);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(2., pointOnLine[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(0., pointOnLine[2], 0.001);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void LineFunctionsTest::checkIntersect1()
+{
+    {
+        fwLine line = { {{0, 0, 0}}, {{1, 0, 0}} };
+        fwVec3d pt  = {{5, 10, 0}};
+
+        bool bIntersection;
+        bIntersection = ::fwMath::intersect(line, 11.0, pt);
+        CPPUNIT_ASSERT(bIntersection == true);
+
+        bIntersection = ::fwMath::intersect(line, 10.0, pt);
+        CPPUNIT_ASSERT(bIntersection == true);
+
+        bIntersection = ::fwMath::intersect(line, 9.0, pt);
+        CPPUNIT_ASSERT(bIntersection == false);
+    }
+    {
+        fwLine line = { {{2, -3, 1}}, {{1, 4, -3}} };
+        ::fwMath::normalize(line.second);
+        fwVec3d pt = {{1, 42, 2}};
+
+        bool bIntersection;
+#ifndef FW_PROFILING_DISABLED
+        {
+            FW_PROFILE("::fwMath::intersect1");
+            for(int i = 0; i < 1000000; ++i)
+            {
+                bIntersection = ::fwMath::intersect(line, 10.0, pt);
+            }
+        }
+#else
+        bIntersection = ::fwMath::intersect(line, 10.0, pt);
+#endif
+        CPPUNIT_ASSERT(bIntersection == false);
+
+        bIntersection = ::fwMath::intersect(line, 28.0, pt);
+        CPPUNIT_ASSERT(bIntersection == false);
+
+        bIntersection = ::fwMath::intersect(line, 29.0, pt);
+        CPPUNIT_ASSERT(bIntersection == true);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void LineFunctionsTest::checkIntersect2()
+{
+    // No intersection, parallel lines
+    {
+        fwLine line1      = { {{0, 0, 0}}, {{1, 0, 0}} };
+        fwVec3d origin    = {{0, 1, 0}};
+        fwVec3d direction = {{1, 0, 0}};
+        fwVec3d pointOnLine;
+
+        bool bIntersection = ::fwMath::intersect(line1, 100.0, origin, direction, pointOnLine);
+
+        CPPUNIT_ASSERT(bIntersection == false);
+    }
+
+    // Intersection
+    {
+        fwLine line1 = { {{1, 1, 1}}, {{1, 0, 0}} };
+
+        fwVec3d origin    = {{0, 0, 0}};
+        fwVec3d direction = {{1, 1, 1}};
+        fwVec3d pointOnLine;
+
+        ::fwMath::normalize(direction);
+
+        bool bIntersection;
+#ifndef FW_PROFILING_DISABLED
+        {
+            FW_PROFILE("::fwMath::intersect1");
+            for(int i = 0; i < 1000000; ++i)
+            {
+                bIntersection = ::fwMath::intersect(line1, 2.0, origin, direction, pointOnLine);
+            }
+        }
+#else
+        bIntersection = ::fwMath::intersect(line1, 2.0, origin, direction, pointOnLine);
+#endif
+
+        CPPUNIT_ASSERT(bIntersection == true);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[0], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[1], 0.001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1., pointOnLine[2], 0.001);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void LineFunctionsTest::checkIntersect3()
+{
+
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwMath
diff --git a/SrcLib/core/fwMath/test/tu/src/MatrixFunctionsTest.cpp b/SrcLib/core/fwMath/test/tu/src/MatrixFunctionsTest.cpp
index 32e84dc..8d026b7 100644
--- a/SrcLib/core/fwMath/test/tu/src/MatrixFunctionsTest.cpp
+++ b/SrcLib/core/fwMath/test/tu/src/MatrixFunctionsTest.cpp
@@ -1,16 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "MatrixFunctionsTest.hpp"
+
 #include <fwMath/MatrixFunctions.hpp>
 #include <fwMath/IntrasecTypes.hpp>
 #include <fwMath/VectorFunctions.hpp>
 #include <fwMath/LineFunctions.hpp>
 #include <fwMath/MatrixFunctions.hpp>
 
-#include "MatrixFunctionsTest.hpp"
+#include <glm/glm.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMath::ut::MatrixFunctionsTest );
@@ -25,73 +27,123 @@ void MatrixFunctionsTest::setUp()
     // Set up context before running a test.
 }
 
+//------------------------------------------------------------------------------
+
 void MatrixFunctionsTest::tearDown()
 {
     // Clean up after the test run.
 }
 
+//------------------------------------------------------------------------------
+
 void MatrixFunctionsTest::checkMultVecMatrix()
 {
-    // Produit scalaire.
-    const double X = rand()%1 + 0.9;
-    const double Y = rand()%10 + 0.8;
-    const double Z = rand()%70 + 0.2;
-
-    const double c1 = rand()%40+0.8;
-    const double c2 = rand()%1+0.1;
-    const double c3 = rand()%29+0.5;
-    const double c4 = rand()%50+0.6;
-
-    const fwVec3d source = {X, Y, Z};
-    fwVec3d result;
-    const fwMatrix4x4 matrice = {1,c1,1,c2, 1,2,c3,c4, 1,1,5,c2, c3,1,c1,1};
-    ::fwMath::multVecMatrix(matrice, source, result);
-
-//  SbVec3f src(X, Y, Z);
-//  SbVec3f sbResult;
-//  SbMatrix sbmatrix(1,c1,1,c2, 1,2,c3,c4, 1,1,5,c2, c3,1,c1,1);
-//  sbmatrix.multVecMatrix(src, sbResult);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0], sbResult[0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1], sbResult[1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2], sbResult[2], 0.00001);
+    const double pi    = 3.14159265358979323846;
+    const double theta = pi * .5;
+
+    {
+        const fwMatrix4x4 matrix = {{ {{1., 0., 0, 0}},
+                                      {{0., std::cos(theta), -std::sin(theta), 0}},
+                                      {{0., std::sin(theta), std::cos(theta), 0}},
+                                      {{0.0, 0.0, 0.0, 1.0}} }};
+        const fwVec3d source = {{0, 1, 0}};
+
+        fwVec3d result;
+        ::fwMath::multVecMatrix(matrix, source, result);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(0, result[0], 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(0, result[1], 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1, result[2], 0.00001);
+    }
+    {
+        const fwMatrix4x4 matrix = {{ {{1., 0., 0, 52.3}},
+                                      {{0., std::cos(theta), -std::sin(theta), -12.}},
+                                      {{0., std::sin(theta), std::cos(theta), 1.2}},
+                                      {{0.0, 0.0, 0.0, 1.0}} }};
+        const fwVec3d source = {{0, 0, 0}};
+
+        fwVec3d result;
+        ::fwMath::multVecMatrix(matrix, source, result);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(52.3, result[0], 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(-12., result[1], 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(1.2, result[2], 0.00001);
+
+        const fwVec3d source2 = {{0, 10, 0}};
+        ::fwMath::multVecMatrix(matrix, source2, result);
+
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(52.3, result[0], 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(-12, result[1], 0.00001);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(11.2, result[2], 0.00001);
+    }
 }
 
+//------------------------------------------------------------------------------
+
 void MatrixFunctionsTest::checkRotationMatrix()
 {
-//    const double X = 7.8;
-//    const double Y = 0.6;
-//    const double Z = 2.6;
-//
-//    const fwVec3d vec = {X, Y, Z};
-//
-//    fwMatrix4x4 result = ::fwMath::getRotationMatrix(vec);
-//
-//
-//  SbVec3f src(X, Y, Z);
-//  SbRotation sbRotation;
-//  SbMatrix sbResult = sbRotation.getRotationMatrix(src);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0][0], sbResult[0][0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0][1], sbResult[0][1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0][2], sbResult[0][2], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0][3], sbResult[0][3], 0.00001);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1][0], sbResult[1][0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1][1], sbResult[1][1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1][2], sbResult[1][2], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1][3], sbResult[1][3], 0.00001);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2][0], sbResult[2][0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2][1], sbResult[2][1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2][2], sbResult[2][2], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2][3], sbResult[2][3], 0.00001);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[3][0], sbResult[3][0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[3][1], sbResult[3][1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[3][2], sbResult[3][2], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[3][3], sbResult[3][3], 0.00001);
+    const double X = 7.8;
+    const double Y = 0.6;
+    const double Z = 2.6;
+
+    const fwVec3d vec = {{X, Y, Z}};
+
+    fwMatrix4x4 result = ::fwMath::getRotationMatrix(vec);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.076696,  result[0][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.997054, result[0][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0,       result[0][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0,       result[0][3], 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.3144601, result[1][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.024189,  result[1][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.948962, result[1][2], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0,       result[1][3], 0.00001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.946167, result[2][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.072782, result[2][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.315389, result[2][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0,      result[2][3], 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, result[3][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, result[3][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0, result[3][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.0, result[3][3], 0.0001);
+}
+
+//------------------------------------------------------------------------------
+
+void MatrixFunctionsTest::checkInverse()
+{
+    const fwMatrix4x4 mat = {{ {{3.1, 1., -7.9689, 4.9}},
+                               {{5., -21., -1.3646, 14.4}},
+                               {{9., -7.2, -23.36, 79.04}},
+                               {{0.1, -3., -1.234, -49.94}} }};
+
+    fwMatrix4x4 result = ::fwMath::getInverse(mat);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.885131908604589, result[0][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.190212289294002, result[0][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.29581348830958, result[0][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.326489683580158, result[0][3], 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.185258037237573, result[1][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.00768780306376934, result[1][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.0586854220133396, result[1][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.0769210199757416, result[1][3], 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.232796743379289, result[2][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.0724476129133489, result[2][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.118830425964518, result[2][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.144341353618837, result[2][3], 0.0001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.015108772570731, result[3][0], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.000947451265806253, result[3][1], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.00586927638865189, result[3][2], 0.0001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(-0.0124903619956978, result[3][3], 0.0001);
 }
 
+//------------------------------------------------------------------------------
+
 } //namespace ut
 } //namespace fwMath
diff --git a/SrcLib/core/fwMath/test/tu/src/PlaneFunctionsTest.cpp b/SrcLib/core/fwMath/test/tu/src/PlaneFunctionsTest.cpp
index d7f3789..5e63226 100644
--- a/SrcLib/core/fwMath/test/tu/src/PlaneFunctionsTest.cpp
+++ b/SrcLib/core/fwMath/test/tu/src/PlaneFunctionsTest.cpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwMath/PlaneFunctions.hpp>
-
 #include "PlaneFunctionsTest.hpp"
 
+#include <fwMath/PlaneFunctions.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMath::ut::PlaneFunctionsTest );
@@ -16,26 +15,23 @@ namespace fwMath
 {
 namespace ut
 {
+//------------------------------------------------------------------------------
 
 void PlaneFunctionsTest::setUp()
 {
     // Set up context before running a test.
 }
+
+//------------------------------------------------------------------------------
+
 void PlaneFunctionsTest::tearDown()
 {
     // Clean up after the test run.
 }
 
-void PlaneFunctionsTest::checkDistance()
-{
-    const double DISTANCE = 10.25;
-
-    fwPlane plane;
-    ::fwMath::setDistance(plane, DISTANCE);
-    CPPUNIT_ASSERT_EQUAL(::fwMath::getDistance(plane), DISTANCE);
-}
+//------------------------------------------------------------------------------
 
-void PlaneFunctionsTest::checkNormal()
+void PlaneFunctionsTest::checkGetPlane()
 {
     const double PlanP1_X = 1.0;
     const double PlanP1_Y = 0.0;
@@ -52,216 +48,227 @@ void PlaneFunctionsTest::checkNormal()
     const fwVec3d planPt1 = {{PlanP1_X, PlanP1_Y, PlanP1_Z}};
     const fwVec3d planPt2 = {{PlanP2_X, PlanP2_Y, PlanP2_Z}};
     const fwVec3d planPt3 = {{PlanP3_X, PlanP3_Y, PlanP3_Z}};
-    fwPlane plane;
-    ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
-    fwVec3d normal = ::fwMath::getNormal(plane);
 
+    fwPlane plane1 = ::fwMath::getPlane(planPt1, planPt2, planPt3);
+    fwVec3d normal = ::fwMath::getNormal(plane1);
 
-//  SbPlane soPlane(SbVec3f(PlanP1_X, PlanP1_Y, PlanP1_Z), SbVec3f(PlanP2_X, PlanP2_Y, PlanP2_Z), SbVec3f(PlanP3_X, PlanP3_Y, PlanP3_Z));
-//  SbVec3f sbNormal= soPlane.getNormal();
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(normal[0], (double)sbNormal[0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(normal[1], (double)sbNormal[1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(normal[2], (double)sbNormal[2], 0.00001);
+    fwPlane plane2 = ::fwMath::getPlane(normal, planPt1);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane1[0], plane2[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane1[1], plane2[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane1[2], plane2[2], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane1[3], plane2[3], 0.00001);
 }
 
-void PlaneFunctionsTest::checkIntersect()
+//------------------------------------------------------------------------------
+
+void PlaneFunctionsTest::checkSetValues()
 {
-    const bool INTERSECT = true;
+    const double planP1_X = 0.0;
+    const double planP1_Y = 0.0;
+    const double planP1_Z = 2.5;
 
-    fwVec3d  point;
-    fwLine  line;
-    const fwVec3d linePos = {{1.0, 2.0, 4.0}};
-//  const fwVec3d lineDirection = {{1.0, 0.0, 0.0}};  // ==> pas d'intercestion
-//  const fwVec3d lineDirection = {{3.0, 0.0, 4.0}};  // ==> intercestion
-    const fwVec3d lineDirection = {{0.0, 0.0, 4.0}};  // ==> intersection en (0.0, 0.0, 0.0)
+    const double planP2_X = 1.0;
+    const double planP2_Y = 0.0;
+    const double planP2_Z = 0.5;
 
-    line = std::make_pair < fwVec3d, fwVec3d >(linePos, lineDirection);
+    const double planP3_X = 1.0;
+    const double planP3_Y = 1.0;
+    const double planP3_Z = -0.5;
+
+    const fwVec3d planPt1 = {{planP1_X, planP1_Y, planP1_Z}};
+    const fwVec3d planPt2 = {{planP2_X, planP2_Y, planP2_Z}};
+    const fwVec3d planPt3 = {{planP3_X, planP3_Y, planP3_Z}};
+
+    fwVec3d normal        = {{0.8164965, 0.408248290, 0.408248290}};
+    const double distance = 1.02062072;
 
-    const fwVec3d planPt1 = {{0.0,0.0,0.0}};
-    const fwVec3d planPt2 = {{2.0,0.0, 0.0}};
-    const fwVec3d planPt3 = {{0.0, 2.0, 0.0}};
     fwPlane plane;
     ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
-    bool intersect =  ::fwMath::intersect( plane, line,  point);
 
-    CPPUNIT_ASSERT_EQUAL(point[0], 1.0);
-    CPPUNIT_ASSERT_EQUAL(point[1], 2.0);
-    CPPUNIT_ASSERT_EQUAL(point[2], 0.0);
-
-    CPPUNIT_ASSERT_EQUAL(intersect, INTERSECT);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[0], normal[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[1], normal[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[2], normal[2], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[3], distance, 0.00001);
 }
 
-void PlaneFunctionsTest::checkIntersect_fwMath_SoLib( )
+//------------------------------------------------------------------------------
+
+void PlaneFunctionsTest::checkDistance()
 {
+    const double DISTANCE = 10.25;
 
-//  for(int i= 0; i<100; i++) {
-    const double LineP1_X = 1.0;
-    const double LineP1_Y = rand()%100 +0.5;
-    const double LineP1_Z = 1.0;
+    fwPlane plane;
+    ::fwMath::setDistance(plane, DISTANCE);
+    CPPUNIT_ASSERT_EQUAL(::fwMath::getDistance(plane), DISTANCE);
+}
 
-    const double LineP2_X = rand()%100 +0.1;
-    const double LineP2_Y = 0.0;
-    const double LineP2_Z = rand()%100 +0.6;
+//------------------------------------------------------------------------------
 
-    const double PlanP1_X = 1.0;
-    const double PlanP1_Y = rand()%100 +0.5;
-    const double PlanP1_Z = 98.0;
+void PlaneFunctionsTest::checkNormal()
+{
+    const double planP1_X = 0.0;
+    const double planP1_Y = 0.0;
+    const double planP1_Z = 2.5;
 
-    const double PlanP2_X = 0.0;
-    const double PlanP2_Y = 7.0;
-    const double PlanP2_Z = rand()%100 + 0.1;
+    const double planP2_X = 1.0;
+    const double planP2_Y = 0.0;
+    const double planP2_Z = 0.5;
 
-    const double PlanP3_X = rand() % 200 +0.7;
-    const double PlanP3_Y = 23.0;
-    const double PlanP3_Z = rand()%50 + 0.8;
+    const double planP3_X = 1.0;
+    const double planP3_Y = 1.0;
+    const double planP3_Z = -0.5;
 
-    // New version
-    // fwVec3d  point;
-    fwLine  line;
-    const fwVec3d linePos = {{LineP1_X, LineP1_Y, LineP1_Z}};
-//  const fwVec3d lineDirection = {{1.0, 0.0, 0.0}};  // ==> pas d'intercestion
-//  const fwVec3d lineDirection = {{3.0, 0.0, 4.0}};  // ==> intercestion
-    fwVec3d lineDirection = {{LineP2_X, LineP2_Y, LineP2_Z}};  // ==> intersection en (0.0, 0.0, 0.0)
-    line = std::make_pair < fwVec3d, fwVec3d >(linePos, lineDirection);
-    const fwVec3d planPt1 = {{PlanP1_X, PlanP1_Y, PlanP1_Z}};
-    const fwVec3d planPt2 = {{PlanP2_X, PlanP2_Y, PlanP2_Z}};
-    const fwVec3d planPt3 = {{PlanP3_X, PlanP3_Y, PlanP3_Z}};
-    fwPlane plane;
-    ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
-    // int intersect =  ::fwMath::intersect( plane, line,  point);
+    const fwVec3d planPt1 = {{planP1_X, planP1_Y, planP1_Z}};
+    const fwVec3d planPt2 = {{planP2_X, planP2_Y, planP2_Z}};
+    const fwVec3d planPt3 = {{planP3_X, planP3_Y, planP3_Z}};
 
-    // Old version
-//  SbLine aLine(SbVec3f(LineP1_X, LineP1_Y, LineP1_Z), SbVec3f(LineP2_X, LineP2_Y, LineP2_Z));
-//  SbVec3f aIntersection;
-//  SbPlane soPlane(SbVec3f(PlanP1_X, PlanP1_Y, PlanP1_Z), SbVec3f(PlanP2_X, PlanP2_Y, PlanP2_Z), SbVec3f(PlanP3_X, PlanP3_Y, PlanP3_Z));
-//  SbBool soIntersect = soPlane.intersect(aLine,aIntersection);
+    fwVec3d normal  = {{0.8164965, 0.408248290, 0.408248290}};
+    fwVec3d normal2 = {{2.0, 1.5, 1.0}};
+    ::fwMath::normalize(normal2);
 
-//      OSLM_TRACE( "X :" <<  point[0] << ", " << aIntersection[0]);
-//      OSLM_TRACE( "Y :" <<  point[1] << ", " << aIntersection[1]);
-//      OSLM_TRACE( "Z :" <<  point[2] << ", " << aIntersection[2]);
+    fwPlane plane;
+    ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
+    fwVec3d planeNormal = ::fwMath::getNormal(plane);
 
-//  CPPUNIT_ASSERT_EQUAL(intersect, soIntersect);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(point[0], (double)aIntersection[0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(point[1], (double)aIntersection[1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(point[2], (double)aIntersection[2], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(planeNormal[0], normal[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(planeNormal[1], normal[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(planeNormal[2], normal[2], 0.00001);
 
-//}
+    ::fwMath::setNormal(plane, normal2);
+    fwVec3d planeNormal2 = ::fwMath::getNormal(plane);
 
-//  CPPUNIT_ASSERT_EQUAL(intersect, INTERSECT);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(planeNormal2[0], normal2[0], 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(planeNormal2[1], normal2[1], 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(planeNormal2[2], normal2[2], 0.001);
 }
 
-void PlaneFunctionsTest::checkIsInHalfSpace_fwMath_SoLib()
-{
-    // const double P1_X = 1.0;
-    // const double P1_Y = 0.0;
-    // const double P1_Z = 1.0;
+//------------------------------------------------------------------------------
 
-    const double PlanP1_X = 1.0;
-    const double PlanP1_Y = 0.0;
-    const double PlanP1_Z = 0.0;
-
-    const double PlanP2_X = 0.0;
-    const double PlanP2_Y = 0.0;
-    const double PlanP2_Z = 1.0;
+void PlaneFunctionsTest::checkIntersect()
+{
+    const bool INTERSECT = true;
 
-    const double PlanP3_X = 0.0;
-    const double PlanP3_Y = 2.0;
-    const double PlanP3_Z = 1.0;
+    fwVec3d point;
+    fwLine line;
+    const fwVec3d linePos = {{1.0, 2.0, 4.0}};
+//  const fwVec3d lineDirection = {{1.0, 0.0, 0.0}};  // ==> pas d'intercestion
+//  const fwVec3d lineDirection = {{3.0, 0.0, 4.0}};  // ==> intercestion
+    const fwVec3d lineDirection = {{0.0, 0.0, 4.0}};  // ==> intersection en (0.0, 0.0, 0.0)
 
-    // const fwVec3d point1 = {{P1_X, P1_Y, P1_Z}};
+    line = std::make_pair(linePos, lineDirection);
 
-    const fwVec3d planPt1 = {{PlanP1_X, PlanP1_Y, PlanP1_Z}};
-    const fwVec3d planPt2 = {{PlanP2_X, PlanP2_Y, PlanP2_Z}};
-    const fwVec3d planPt3 = {{PlanP3_X, PlanP3_Y, PlanP3_Z}};
+    const fwVec3d planPt1 = {{0.0, 0.0,0.0}};
+    const fwVec3d planPt2 = {{2.0, 0.0, 0.0}};
+    const fwVec3d planPt3 = {{0.0, 2.0, 0.0}};
     fwPlane plane;
     ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
+    bool intersect = ::fwMath::intersect( plane, line,  point);
 
-    // bool result = ::fwMath::isInHalfSpace(plane, point1);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point[0], 1.0, 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point[1], 2.5, 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(point[2], 0.0, 0.001);
 
+    CPPUNIT_ASSERT_EQUAL(intersect, INTERSECT);
+}
 
-//  SbPlane sbPlane(SbVec3f(PlanP1_X, PlanP1_Y, PlanP1_Z), SbVec3f(PlanP2_X, PlanP2_Y, PlanP2_Z), SbVec3f(PlanP3_X, PlanP3_Y, PlanP3_Z));
-//  SbVec3f sbPoint1(P1_X, P1_Y, P1_Z);
-//
-//  SbBool sbResult = sbPlane.isInHalfSpace(sbPoint1);
-//  CPPUNIT_ASSERT_EQUAL(result, (bool)sbResult);
+//------------------------------------------------------------------------------
 
+void PlaneFunctionsTest::checkIsInHalfSpace()
+{
+    const double planP1_X = 1.0;
+    const double planP1_Y = 0.0;
+    const double planP1_Z = 0.0;
+
+    const double planP2_X = 0.0;
+    const double planP2_Y = 0.0;
+    const double planP2_Z = 1.0;
+
+    const double planP3_X = 0.0;
+    const double planP3_Y = 2.0;
+    const double planP3_Z = 1.0;
+
+    const fwVec3d point1  = {{1.0, 0.0, 1.0}};
+    const fwVec3d planPt1 = {{planP1_X, planP1_Y, planP1_Z}};
+    const fwVec3d planPt2 = {{planP2_X, planP2_Y, planP2_Z}};
+    const fwVec3d planPt3 = {{planP3_X, planP3_Y, planP3_Z}};
+    fwPlane plane;
+    ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
+    fwVec3d normal          = ::fwMath::getNormal(plane);
+    double distance         = ::fwMath::getDistance(plane);
+    const fwPlane planeTest = {{normal[0],normal[1],normal[2],distance}};
+
+    bool result = ::fwMath::isInHalfSpace(planeTest, point1);
+
+    CPPUNIT_ASSERT_EQUAL(false, result);
 }
 
+//------------------------------------------------------------------------------
+
 void PlaneFunctionsTest::checkOffset()
 {
     const double OFFSET = 0.3;
 
-    const double PlanP1_X = 1.0;
-    const double PlanP1_Y = 0.0;
-    const double PlanP1_Z = 0.0;
+    const double planP1_X = 0.0;
+    const double planP1_Y = 0.0;
+    const double planP1_Z = 2.5;
 
-    const double PlanP2_X = 0.0;
-    const double PlanP2_Y = 0.0;
-    const double PlanP2_Z = 1.0;
+    const double planP2_X = 1.0;
+    const double planP2_Y = 0.0;
+    const double planP2_Z = 0.5;
 
-    const double PlanP3_X = 0.0;
-    const double PlanP3_Y = 2.0;
-    const double PlanP3_Z = 1.0;
+    const double planP3_X = 1.0;
+    const double planP3_Y = 1.0;
+    const double planP3_Z = -0.5;
 
-    const fwVec3d planPt1 = {{PlanP1_X, PlanP1_Y, PlanP1_Z}};
-    const fwVec3d planPt2 = {{PlanP2_X, PlanP2_Y, PlanP2_Z}};
-    const fwVec3d planPt3 = {{PlanP3_X, PlanP3_Y, PlanP3_Z}};
+    const fwVec3d planPt1 = {{planP1_X, planP1_Y, planP1_Z}};
+    const fwVec3d planPt2 = {{planP2_X, planP2_Y, planP2_Z}};
+    const fwVec3d planPt3 = {{planP3_X, planP3_Y, planP3_Z}};
     fwPlane plane;
     ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
 
     ::fwMath::offset(plane,OFFSET );
-    // double result = ::fwMath::getDistance(plane);
+    double offset = ::fwMath::getDistance(plane);
 
-//  SbPlane sbPlane(SbVec3f(PlanP1_X, PlanP1_Y, PlanP1_Z), SbVec3f(PlanP2_X, PlanP2_Y, PlanP2_Z), SbVec3f(PlanP3_X, PlanP3_Y, PlanP3_Z));
-//  sbPlane.offset(OFFSET);
-//  float sbResult = sbPlane.getDistanceFromOrigin();
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result, sbResult, 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(1.320620, offset, 0.001);
 }
 
+//------------------------------------------------------------------------------
+
 void PlaneFunctionsTest::checkTransform()
 {
-    // const fwVec3d normal = {{0.2, 0.6, 0.8}};
-    // const double distance = 0.28;
+    const fwVec3d normalRes  = {{0.832, -0.554, 0.0}};
+    const double distanceRes = -0.028691;
 
-    const double c1 = rand()%40+0.8;
-    const double c2 = rand()%1+0.1;
-    const double c3 = rand()%29+0.5;
-    const double c4 = rand()%50+0.6;
-    const double c5 = rand()%20+0.5;
+    const fwVec3d normal = {{4.0, 3.0, 2.0}};
+    const fwVec3d point  = {{0.0, 0.0, 0.5}};
 
-    const double PlanP1_X = 1.0;
-    const double PlanP1_Y = rand()%100 +0.5;
-    const double PlanP1_Z = 98.0;
+    fwPlane plane = ::fwMath::getPlane(normal, point);
 
-    const double PlanP2_X = 0.0;
-    const double PlanP2_Y = 7.0;
-    const double PlanP2_Z = rand()%100 + 0.1;
+    const fwMatrix4x4 matrice = {{ {{1.0,0.0,1.0,3.0}}, {{-1.0,0.0,0.0,5.0}},
+                                   {{0.0,0.0,0.0,2.0}}, {{0.0,0.0,0.0,1.0 }} }};
 
-    const double PlanP3_X = rand() % 200 +0.7;
-    const double PlanP3_Y = 23.0;
-    const double PlanP3_Z = rand()%50 + 0.8;
+    ::fwMath::transform(plane, matrice);
 
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[0], normalRes[0], 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[1], normalRes[1], 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[2], normalRes[2], 0.001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[3], distanceRes, 0.001);
+}
 
-    const fwVec3d planPt1 = {{PlanP1_X, PlanP1_Y, PlanP1_Z}};
-    const fwVec3d planPt2 = {{PlanP2_X, PlanP2_Y, PlanP2_Z}};
-    const fwVec3d planPt3 = {{PlanP3_X, PlanP3_Y, PlanP3_Z}};
-    fwPlane plane;
-    ::fwMath::setValues(plane, planPt1, planPt2, planPt3);
-    const fwMatrix4x4 matrice = {{{{1,c1,0,c2}}, {{c3,1,c1,0}}, {{c4,0,1,c5}}, {{0,c1,c2,c4 }}}};
-    ::fwMath::transform(plane, matrice);
+//------------------------------------------------------------------------------
 
-//  SbPlane soPlane(SbVec3f(PlanP1_X, PlanP1_Y, PlanP1_Z), SbVec3f(PlanP2_X, PlanP2_Y, PlanP2_Z), SbVec3f(PlanP3_X, PlanP3_Y, PlanP3_Z));
-//  SbMatrix aMatrix (1,c1,0,c2, c3,1,c1,0, c4,0,1,c5, 0,c1,c2,c4);
-//  soPlane.transform(aMatrix);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[0], (soPlane.getNormal())[0], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[1], (soPlane.getNormal())[1], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[2], (soPlane.getNormal())[2], 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(plane[3], soPlane.getDistanceFromOrigin(), 0.00001);
+void PlaneFunctionsTest::checkOperator()
+{
+    fwPlane plane1 = {{1.0, 0.0, 1.0, 3.0}};
+    fwPlane plane2 = plane1;
+
+    bool test = (plane1==plane2);
+    CPPUNIT_ASSERT_EQUAL(test, true);
 }
 
+//------------------------------------------------------------------------------
+
 } //namespace ut
 } //namespace fwMath
 
diff --git a/SrcLib/core/fwMath/test/tu/src/VectorFunctionsTest.cpp b/SrcLib/core/fwMath/test/tu/src/VectorFunctionsTest.cpp
index 0d20174..d700c23 100644
--- a/SrcLib/core/fwMath/test/tu/src/VectorFunctionsTest.cpp
+++ b/SrcLib/core/fwMath/test/tu/src/VectorFunctionsTest.cpp
@@ -1,15 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwMath/VectorFunctions.hpp>
+#include "VectorFunctionsTest.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "VectorFunctionsTest.hpp"
+#define FW_PROFILING_DISABLED
+#include <fwCore/Profiling.hpp>
 
+#include <fwMath/VectorFunctions.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMath::ut::VectorFunctionsTest );
@@ -22,135 +24,243 @@ namespace ut
 void VectorFunctionsTest::setUp()
 {
     // Set up context before running a test.
-
 }
+
+//------------------------------------------------------------------------------
+
 void VectorFunctionsTest::tearDown()
 {
     // Clean up after the test run.
-
 }
 
+//------------------------------------------------------------------------------
+
 void VectorFunctionsTest::checkDot()
 {
-    // Produit scalaire.
+    // Dot product
     const double V1_X = 0.1;
-    const double V1_Y =rand()%30+0.1;
-    const double V1_Z =rand()%20+0.4;
+    const double V1_Y = std::rand()%30+0.1;
+    const double V1_Z = std::rand()%20+0.4;
 
-    const double V2_X = rand()%50+0.4;
-    const double V2_Y =0.5;
-    const double V2_Z =rand()%10+0.8;
+    const double V2_X = std::rand()%50+0.4;
+    const double V2_Y = 0.5;
+    const double V2_Z = std::rand()%10+0.8;
 
     const fwVec3d V1 = {V1_X, V1_Y, V1_Z};
     const fwVec3d V2 = {V2_X, V2_Y, V2_Z};
     double result;
+
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwMath::dot");
+        for(int i = 0; i < 2000000; ++i)
+        {
+            result = ::fwMath::dot(V1, V2);
+        }
+    }
+#else
     result = ::fwMath::dot(V1, V2);
+#endif
 
-    double dotResult = V1_X*V2_X + V1_Y*V2_Y + V1_Z*V2_Z;
+    double dotResult = V1_X * V2_X + V1_Y  *V2_Y + V1_Z * V2_Z;
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(result, dotResult, 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(dotResult, result, 0.00001);
 }
 
-void VectorFunctionsTest::checkDot_fwMath_Solib()
-{
-
-    const double V1_X = 0.1;
-    const double V1_Y =rand()%30+0.1;
-    const double V1_Z =rand()%20+0.4;
-
-    const double V2_X = rand()%50+0.4;
-    const double V2_Y =0.5;
-    const double V2_Z =rand()%10+0.8;
-
-    // Produit scalaire.
-    const fwVec3d V1 = {V1_X, V1_Y, V1_Z};
-    const fwVec3d V2 = {V2_X, V2_Y, V2_Z};
-    double result;
-    result = ::fwMath::dot(V1, V2);
-
-    // Old version
-//  SbVec3f soV1(V1_X, V1_Y, V1_Z);
-//  SbVec3f soV2(V2_X, V2_Y, V2_Z);
-//  float soResult = soV1.dot(soV2);
-//
-//  OSLM_TRACE( "V1_X :" <<  V1[0] << ", " << soV1[0]);
-//  OSLM_TRACE( "V1_Y :" <<  V1[1] << ", " << soV1[1]);
-//  OSLM_TRACE( "V1_Z :" <<  V1[2] << ", " << soV1[2]);
-//  OSLM_TRACE( "V2_X :" <<  V2[0] << ", " << soV2[0]);
-//  OSLM_TRACE( "V2_Y :" <<  V2[1] << ", " << soV2[1]);
-//  OSLM_TRACE( "V2_Z :" <<  V2[2] << ", " << soV2[2]);
-//  OSLM_TRACE( "DOT RESULT :" <<  result << ", " << soResult);
-
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result, double(soResult), 0.00001);
-}
+//------------------------------------------------------------------------------
 
 void VectorFunctionsTest::checkCross()
 {
-    // Produit vectoriel.
+    // Dot product.
     const double DISTANCE = 10.25;
 
     // New version
     const double CROOS_X = -0.03;
     const double CROSS_Y = 0.06;
     const double CROSS_Z = -0.03;
-    const fwVec3d V1 = {0.1, 0.2, 0.3};
-    const fwVec3d V2 = {0.4, 0.5, 0.6};
+    const fwVec3d V1     = {0.1, 0.2, 0.3};
+    const fwVec3d V2     = {0.4, 0.5, 0.6};
 
     fwVec3d result;
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwMath::cross");
+        for(int i = 0; i < 2000000; ++i)
+        {
+            result = ::fwMath::cross(V1, V2);
+        }
+    }
+#else
     result = ::fwMath::cross(V1, V2);
+#endif
 
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0], CROOS_X , 0.00001);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1], CROSS_Y , 0.00001);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2], CROSS_Z , 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(CROOS_X, result[0],  0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(CROSS_Y, result[1],  0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(CROSS_Z, result[2],  0.00001);
 }
 
-void VectorFunctionsTest::checkCross_fwMath_SoLib()
+//------------------------------------------------------------------------------
+
+void VectorFunctionsTest::checkNormalize()
 {
-    // Produit vectoriel.
+    const double NORM = 0.87749;
+    fwVec3d v         = {0.4, 0.5, 0.6};
+
+    double norm;
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwMath::normalize");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            v    = {0.4, 0.5, 0.6};
+            norm = ::fwMath::normalize(v);
+        }
+    }
+#else
+    v    = {0.4, 0.5, 0.6};
+    norm = ::fwMath::normalize(v);
+#endif
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(NORM, norm, 0.00001);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.4/NORM, v[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.5/NORM, v[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.6/NORM, v[2], 0.00001);
+}
 
-    const double V1_X = 0.1;
-    const double V1_Y =rand()%30+0.1;
-    const double V1_Z =rand()%10+0.4;
+//------------------------------------------------------------------------------
 
-    const double V2_X = rand()%50+0.4;
-    const double V2_Y =0.5;
-    const double V2_Z =rand()%20+0.8;
+void VectorFunctionsTest::checkNegate()
+{
+    fwVec3d v = {1.0, 2.0, 3.0};
 
-    // New version
-    const fwVec3d V1 = {V1_X, V1_Y, V1_Z};
-    const fwVec3d V2 = {V2_X, V2_Y, V2_Z};
+    ::fwMath::negate(v);
 
-    fwVec3d result;
-    result = ::fwMath::cross(V1, V2);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-1.0), v[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-2.0), v[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-3.0), v[2], 0.00001);
+}
 
-    // Old version
-//  SbVec3f soV1(V1_X, V1_Y, V1_Z);
-//  SbVec3f soV2(V2_X, V2_Y, V2_Z);
-//  SbVec3f soResult = soV1.cross(soV2);
-//
-//  OSLM_TRACE( "V1_X :" <<  V1[0] << ", " << soV1[0]);
-//  OSLM_TRACE( "V1_Y :" <<  V1[1] << ", " << soV1[1]);
-//  OSLM_TRACE( "V1_Z :" <<  V1[2] << ", " << soV1[2]);
-//  OSLM_TRACE( "V2_X :" <<  V2[0] << ", " << soV2[0]);
-//  OSLM_TRACE( "V2_Y :" <<  V2[1] << ", " << soV2[1]);
-//  OSLM_TRACE( "V2_Z :" <<  V2[2] << ", " << soV2[2]);
-//  OSLM_TRACE( "CROSS RESULT_X :" <<  result[0] << ", " << soResult[0]);
-//  OSLM_TRACE( "CROSS RESULT_Y :" <<  result[1] << ", " << soResult[1]);
-//  OSLM_TRACE( "CROSS RESULT_Z :" <<  result[2] << ", " << soResult[2]);
-//
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[0], (double)soResult[0] , 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[1], (double)soResult[1] , 0.00001);
-//  CPPUNIT_ASSERT_DOUBLES_EQUAL(result[2], (double)soResult[2] , 0.00001);
+//------------------------------------------------------------------------------
 
+void VectorFunctionsTest::checkVecLength()
+{
+    fwVec3d v = {1.0, 2.0, 3.0};
+
+    double length;
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwMath::normalize");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            length = ::fwMath::vecLength(v);
+        }
+    }
+#else
+    length = ::fwMath::vecLength(v);
+#endif
+
+    double expected = 3.741657387;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(expected,length, 0.00001);
 }
 
-void VectorFunctionsTest::checkNormalize()
+//------------------------------------------------------------------------------
+
+void VectorFunctionsTest::checkOperators()
 {
-    const double NORME = 0.87749;
-    fwVec3d V = {0.4, 0.5, 0.6};
-    double norme = ::fwMath::normalize(V);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL(norme,  NORME, 0.00001);
+    fwVec3d vec1 = {1.0, 2.0, 3.0};
+    vec1 *= 2.0;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(2.0), vec1[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(4.0), vec1[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(6.0), vec1[2], 0.00001);
+
+    fwVec3d vec2 = {1.0, 2.0, 3.0};
+    vec2 /= 2.0;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(0.5), vec2[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(1.0), vec2[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(1.5), vec2[2], 0.00001);
+
+    fwVec3d addVec = {2.0, 2.0, 2.0};
+    fwVec3d vec3;
+#ifndef FW_PROFILING_DISABLED
+    {
+        FW_PROFILE("::fwMath::operator/");
+        for(int i = 0; i < 1000000; ++i)
+        {
+            vec3  = {1.0, 2.0, 3.0};
+            vec3 += addVec;
+        }
+    }
+#else
+
+    vec3  = {1.0, 2.0, 3.0};
+    vec3 += addVec;
+#endif
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(3.0), vec3[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(4.0), vec3[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(5.0), vec3[2], 0.00001);
+
+    fwVec3d vec4   = {1.0, 2.0, 3.0};
+    fwVec3d subVec = {2.0, 2.0, 2.0};
+    vec4 -= subVec;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-1.0), vec4[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(0.0), vec4[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(1.0), vec4[2], 0.00001);
+
+    fwVec3d vec5 = {1.0, 2.0, 3.0};
+    fwVec3d res1 = vec5 * 2.0;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(2.0), res1[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(4.0), res1[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(6.0), res1[2], 0.00001);
+
+    fwVec3d vec6 = {1.0, 2.0, 3.0};
+    fwVec3d res2 = vec6 * (-2.0);
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-2.0), res2[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-4.0), res2[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-6.0), res2[2], 0.00001);
+
+
+    fwVec3d vec7 = {1.0, 2.0, 3.0};
+    fwVec3d res3 = vec7 / 2.0;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(0.5), res3[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(1.0), res3[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(1.5), res3[2], 0.00001);
+
+    fwVec3d vec8 = {1.0, 2.0, 3.0};
+    fwVec3d res4 = vec8 + addVec;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(3.0), res4[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(4.0), res4[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(5.0), res4[2], 0.00001);
+
+    fwVec3d vec9 = {1.0, 2.0, 3.0};
+    fwVec3d res5 = vec9 - subVec;
+
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(-1.0), res5[0], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(0.0), res5[1], 0.00001);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(double(1.0), res5[2], 0.00001);
+
+    fwVec3d vec10 = {1.0, 2.0, 3.0};
+    fwVec3d res6  = {1.000000, 2.00000000, 3.00000000000};
+
+    int testEven = (vec10 == res6);
+    CPPUNIT_ASSERT_EQUAL(testEven, 1);
+
+    fwVec3d vec11 = { 1.0, 2.0, 3.0 };
+    fwVec3d res7  = { 1.0000001, 2.05, 3.000000000000009 };
+
+    int testUneven = (vec11 != res7);
+    CPPUNIT_ASSERT_EQUAL(testUneven, 1);
 }
 
+//------------------------------------------------------------------------------
 } //namespace ut
 } //namespace fwMath
diff --git a/SrcLib/core/fwMedData/CMakeLists.txt b/SrcLib/core/fwMedData/CMakeLists.txt
index 7170c11..15cd4c1 100644
--- a/SrcLib/core/fwMedData/CMakeLists.txt
+++ b/SrcLib/core/fwMedData/CMakeLists.txt
@@ -1,10 +1 @@
-
 fwLoadProperties()
-fwUseForwardInclude(fwData)
-
-find_package (Boost REQUIRED)
-
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-
-fwLink(${Boost_LIBRARIES})
-
diff --git a/SrcLib/core/fwMedData/COPYING b/SrcLib/core/fwMedData/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwMedData/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwMedData/COPYING.LESSER b/SrcLib/core/fwMedData/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwMedData/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwMedData/bin/build.options b/SrcLib/core/fwMedData/bin/build.options
deleted file mode 100644
index 09e9167..0000000
--- a/SrcLib/core/fwMedData/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-USE = ['boost']
-LIB = ['fwData_0-1']
diff --git a/SrcLib/core/fwMedData/include/fwMedData/ActivitySeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/ActivitySeries.hpp
index 9101a18..e25413d 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/ActivitySeries.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/ActivitySeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,18 +7,16 @@
 #ifndef __FWMEDDATA_ACTIVITYSERIES_HPP__
 #define __FWMEDDATA_ACTIVITYSERIES_HPP__
 
-#include <fwData/factory/new.hpp>
-#include <fwData/macros.hpp>
-
-#include <fwMedData/Series.hpp>
-
 #include "fwMedData/config.hpp"
+#include "fwMedData/Series.hpp"
+
+#include <fwData/factory/new.hpp>
 
 fwCampAutoDeclareDataMacro((fwMedData)(ActivitySeries), FWMEDDATA_API);
 
 namespace fwData
 {
-    class Composite;
+class Composite;
 }
 
 namespace fwMedData
@@ -27,9 +25,7 @@ namespace fwMedData
 class Series;
 
 /**
- * @class ActivitySeries
- * Holds activity information
- *
+ * @brief Holds activity information
  */
 class FWMEDDATA_CLASS_API ActivitySeries : public ::fwMedData::Series
 {
@@ -37,7 +33,7 @@ class FWMEDDATA_CLASS_API ActivitySeries : public ::fwMedData::Series
 public:
     fwCoreClassDefinitionsWithFactoryMacro( (ActivitySeries)(::fwMedData::Series),
                                             (()),
-                                            ::fwData::factory::New< ActivitySeries >) ;
+                                            ::fwData::factory::New< ActivitySeries >);
 
     fwCampMakeFriendDataMacro((fwMedData)(ActivitySeries));
 
@@ -65,26 +61,59 @@ public:
     /**
      * @brief Data container
      * @{ */
-    fwDataGetSetSptrMacro(Data, SPTR(::fwData::Composite));
+    SPTR(::fwData::Composite) getData () const;
+    void setData(const SPTR(::fwData::Composite)& val);
     /**  @} */
 
     /**
      * @brief Activity configuration identifier
      * @{ */
-    fwDataGetSetCRefMacro(ActivityConfigId, ConfigIdType);
+    const ConfigIdType &getActivityConfigId () const;
+    void setActivityConfigId (const ConfigIdType &val);
     /**  @} */
 
     /**  @} */
+
 protected:
 
     /// Activity configuration identifier
-    ConfigIdType m_attrActivityConfigId;
+    ConfigIdType m_activityConfigId;
 
     /// ... container
-    SPTR(::fwData::Composite) m_attrData;
+    SPTR(::fwData::Composite) m_data;
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwData::Composite) ActivitySeries::getData () const
+{
+    return m_data;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ActivitySeries::setData(const SPTR(::fwData::Composite)& val)
+{
+    m_data = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const ActivitySeries::ConfigIdType &ActivitySeries::getActivityConfigId () const
+{
+    return m_activityConfigId;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ActivitySeries::setActivityConfigId (const ActivitySeries::ConfigIdType &val)
+{
+    m_activityConfigId = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_ACTIVITYSERIES_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp
new file mode 100644
index 0000000..d63d7f2
--- /dev/null
+++ b/SrcLib/core/fwMedData/include/fwMedData/DicomSeries.hpp
@@ -0,0 +1,236 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATA_DICOMSERIES_HPP__
+#define __FWMEDDATA_DICOMSERIES_HPP__
+
+#include "fwMedData/types.hpp"
+#include "fwMedData/Series.hpp"
+#include "fwMedData/config.hpp"
+
+#include <fwData/Object.hpp>
+#include <fwData/factory/new.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+fwCampAutoDeclareDataMacro((fwMedData)(DicomSeries), FWMEDDATA_API);
+
+namespace fwData
+{
+class Array;
+}
+
+namespace fwMedData
+{
+
+
+/**
+ * @brief Holds DICOM data
+ */
+class FWMEDDATA_CLASS_API DicomSeries : public ::fwMedData::Series
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (DicomSeries)(::fwData::Object), (()),
+                                            ::fwData::factory::New< DicomSeries >);
+
+    fwCampMakeFriendDataMacro((fwMedData)(DicomSeries));
+
+    typedef std::map < std::size_t, ::boost::filesystem::path > DicomPathContainerType;
+
+    typedef std::map < std::string, SPTR(::fwData::Array) > DicomBinaryContainerType;
+
+    typedef std::set < std::string > SOPClassUIDContainerType;
+
+    typedef std::map < std::string, std::string > ComputedTagValueContainerType;
+
+    /**
+     * @brief Constructor
+     * @param key Private construction key
+     */
+    FWMEDDATA_API DicomSeries(::fwData::Object::Key key);
+
+    /// Destructor
+    FWMEDDATA_API virtual ~DicomSeries();
+
+    /// Defines shallow copy
+    FWMEDDATA_API void shallowCopy( const ::fwData::Object::csptr& _source );
+
+    /// Defines deep copy
+    FWMEDDATA_API void cachedDeepCopy( const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache );
+
+    /// Add dicom path
+    FWMEDDATA_API void addDicomPath(std::size_t instanceIndex, ::boost::filesystem::path path);
+
+    /// Add binary array
+    FWMEDDATA_API void addBinary(const std::string &filename, SPTR(::fwData::Array) binary);
+
+    /**
+     * @brief Return true if the instance is available on the local computer
+     */
+    FWMEDDATA_API bool isInstanceAvailable(std::size_t instanceIndex) const;
+
+    /**
+     * @brief Add a SOPClassUID that is used by this series.
+     * @param[in] sopClassUID SOPClassUID that must be added.
+     */
+    FWMEDDATA_API void addSOPClassUID(const std::string& sopClassUID);
+
+    /**
+     * @brief Add a computed value to the specified tag.
+     * @param[in] tagName Name of the tag
+     * @param[in] value Computed value
+     */
+    FWMEDDATA_API void addComputedTagValue(const std::string& tagName, const std::string& value);
+
+    /**
+     * @brief Return true if there is a computed value for the specified tag
+     * @param[in] tagName Name of the tag
+     * @return True if there is a computed value for the tag
+     */
+    FWMEDDATA_API bool hasComputedValues(const std::string& tagName) const;
+
+    /**
+     * @brief Availability
+     */
+    typedef enum
+    {
+        NONE     = 1,   /*! The DICOM files are not available on the local machine but may be available on the pacs. */
+        PATHS    = 2,   /*! The paths to the DICOM files are saved in this DicomSeries. */
+        BINARIES = 3,    /*! The binaries of the DICOM files are saved in this DicomSeries. */
+        BLOB     = 4    /*! A set of paths that has not yet been read. Those paths may not be DICOM files. */
+    } DICOM_AVAILABILITY;
+
+    /**
+     * @name Getters / Setters
+     * @{ */
+
+    /**
+     * @brief Dicom files availability
+     * @{ */
+    DICOM_AVAILABILITY  getDicomAvailability () const
+    {
+        return m_dicomAvailability;
+    }
+
+    void setDicomAvailability(DICOM_AVAILABILITY val)
+    {
+        m_dicomAvailability = val;
+    }
+    /**  @} */
+
+    /**
+     * @brief Local paths of Dicom files
+     * @{ */
+    const DicomPathContainerType& getLocalDicomPaths() const
+    {
+        return m_localDicomPaths;
+    }
+    void setLocalDicomPaths(const DicomPathContainerType& val)
+    {
+        m_localDicomPaths = val;
+    }
+    /**  @} */
+
+    /**
+     * @brief Number of instances in the series (0020,1009)
+     * @{ */
+    size_t  getNumberOfInstances () const
+    {
+        return m_numberOfInstances;
+    }
+    void setNumberOfInstances (std::size_t val)
+    {
+        m_numberOfInstances = val;
+    }
+    /**  @} */
+
+    /**
+     * @brief Dicom binaries
+     * @{ */
+    const DicomBinaryContainerType& getDicomBinaries () const
+    {
+        return m_dicomBinaries;
+    }
+    void setDicomBinaries (const DicomBinaryContainerType& val)
+    {
+        m_dicomBinaries = val;
+    }
+    /**  @} */
+
+    /**
+     * @brief SOP Class UID
+     * @{ */
+    const SOPClassUIDContainerType& getSOPClassUIDs () const
+    {
+        return m_SOPClassUIDs;
+    }
+    void setSOPClassUIDs (const SOPClassUIDContainerType& val)
+    {
+        m_SOPClassUIDs = val;
+    }
+    /**  @} */
+
+    /**
+     * @brief Computed Tag Values
+     * @{ */
+    const ComputedTagValueContainerType& getComputedTagValues () const
+    {
+        return m_computedTagValues;
+    }
+    void setComputedTagValues (const ComputedTagValueContainerType& val)
+    {
+        m_computedTagValues = val;
+    }
+    /**  @} */
+
+    /**
+     * @brief First Instance Number (0 or 1) - Used for PACS preview
+     * @{ */
+    std::size_t getFirstInstanceNumber() const
+    {
+        return m_firstInstanceNumber;
+    }
+
+    void setFirstInstanceNumber(std::size_t firstInstanceNumber)
+    {
+        m_firstInstanceNumber = firstInstanceNumber;
+    }
+    /**  @} */
+
+
+    /**  @} */
+
+
+protected:
+
+    /// Dicom Availability
+    DICOM_AVAILABILITY m_dicomAvailability;
+
+    /// Number of instances in the series (0020,1209)
+    size_t m_numberOfInstances;
+
+    /// Local paths of Dicom files
+    DicomPathContainerType m_localDicomPaths;
+
+    /// Dicom binaries
+    DicomBinaryContainerType m_dicomBinaries;
+
+    /// SOP Class UIDs
+    SOPClassUIDContainerType m_SOPClassUIDs;
+
+    /// Computed tag values
+    ComputedTagValueContainerType m_computedTagValues;
+
+    /// First instance number (0 or 1) - Used for PACS preview
+    std::size_t m_firstInstanceNumber;
+};
+
+}   //end namespace fwMedData
+
+#endif // __FWMEDDATA_DICOMSERIES_HPP__
+
+
diff --git a/SrcLib/core/fwMedData/include/fwMedData/Equipment.hpp b/SrcLib/core/fwMedData/include/fwMedData/Equipment.hpp
index bf596b4..c2736e6 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/Equipment.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/Equipment.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,12 +7,11 @@
 #ifndef __FWMEDDATA_EQUIPMENT_HPP__
 #define __FWMEDDATA_EQUIPMENT_HPP__
 
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-#include "fwData/macros.hpp"
-
-#include "fwMedData/types.hpp"
 #include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
+
+#include <fwData/factory/new.hpp>
+#include <fwData/Object.hpp>
 
 fwCampAutoDeclareDataMacro((fwMedData)(Equipment), FWMEDDATA_API);
 
@@ -20,16 +19,13 @@ namespace fwMedData
 {
 
 /**
- * @class Equipment
- * Holds equipment information
- *
- * 
+ * @brief Holds equipment information
  */
 class FWMEDDATA_CLASS_API Equipment : public ::fwData::Object
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Equipment)(::fwData::Object), (()), ::fwData::factory::New< Equipment >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Equipment)(::fwData::Object), (()), ::fwData::factory::New< Equipment >);
 
     fwCampMakeFriendDataMacro((fwMedData)(Equipment));
 
@@ -55,7 +51,8 @@ public:
     /**
      * @brief Institution where the equipment that produced the composite instances is located (0008,0080)
      * @{ */
-    fwDataGetSetCRefMacro(InstitutionName, DicomValueType);
+    const DicomValueType &getInstitutionName() const;
+    void setInstitutionName(const DicomValueType &val);
     /**  @} */
 
     /**  @} */
@@ -63,9 +60,25 @@ public:
 protected:
 
     /// Institution name
-    DicomValueType m_attrInstitutionName;
+    DicomValueType m_institutionName;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Equipment::getInstitutionName() const
+{
+    return m_institutionName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Equipment::setInstitutionName(const DicomValueType &val)
+{
+    m_institutionName = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_EQUIPMENT_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/ImageSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/ImageSeries.hpp
index a7b602f..6799f42 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/ImageSeries.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/ImageSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,19 +7,19 @@
 #ifndef __FWMEDDATA_IMAGESERIES_HPP__
 #define __FWMEDDATA_IMAGESERIES_HPP__
 
-#include <fwData/Object.hpp>
+#include "fwMedData/config.hpp"
+#include "fwMedData/Series.hpp"
+#include "fwMedData/types.hpp"
+
 #include <fwData/factory/new.hpp>
-#include <fwData/macros.hpp>
+#include <fwData/Object.hpp>
 
-#include "fwMedData/types.hpp"
-#include "fwMedData/Series.hpp"
-#include "fwMedData/config.hpp"
 
 fwCampAutoDeclareDataMacro((fwMedData)(ImageSeries), FWMEDDATA_API);
 
 namespace fwData
 {
-    class Image;
+class Image;
 }
 
 namespace fwMedData
@@ -27,16 +27,14 @@ namespace fwMedData
 
 
 /**
- * @class ImageSeries
- * Holds images data
- *
- * 
+ * @brief Holds images data
  */
 class FWMEDDATA_CLASS_API ImageSeries : public ::fwMedData::Series
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (ImageSeries)(::fwData::Object), (()), ::fwData::factory::New< ImageSeries >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ImageSeries)(::fwData::Object), (()),
+                                            ::fwData::factory::New< ImageSeries >);
 
     fwCampMakeFriendDataMacro((fwMedData)(ImageSeries));
 
@@ -62,7 +60,8 @@ public:
     /**
      * @brief Image container
      * @{ */
-    fwDataGetSetSptrMacro(Image, SPTR(::fwData::Image));
+    SPTR(::fwData::Image) getImage() const;
+    void setImage(const SPTR(::fwData::Image)& val);
     /**  @} */
 
     /**  @} */
@@ -70,10 +69,26 @@ public:
 protected:
 
     /// Image container
-    SPTR(::fwData::Image) m_attrImage;
+    SPTR(::fwData::Image) m_image;
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwData::Image) ImageSeries::getImage() const
+{
+    return m_image;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ImageSeries::setImage(const SPTR(::fwData::Image)& val)
+{
+    m_image = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_IMAGESERIES_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/ModelSeries.hpp b/SrcLib/core/fwMedData/include/fwMedData/ModelSeries.hpp
index ff3bbdf..166b20f 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/ModelSeries.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/ModelSeries.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,21 +7,25 @@
 #ifndef __FWMEDDATA_MODELSERIES_HPP__
 #define __FWMEDDATA_MODELSERIES_HPP__
 
-#include <vector>
+#include "fwMedData/config.hpp"
+#include "fwMedData/Series.hpp"
+#include "fwMedData/types.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-#include <fwData/Object.hpp>
 #include <fwData/factory/new.hpp>
-#include <fwData/macros.hpp>
 
-#include "fwMedData/types.hpp"
-#include "fwMedData/Series.hpp"
-#include "fwMedData/config.hpp"
+#include <fwData/Object.hpp>
+
+#include <vector>
+
 
 fwCampAutoDeclareDataMacro((fwMedData)(ModelSeries), FWMEDDATA_API);
 
 namespace fwData
 {
-    class Reconstruction;
+class Reconstruction;
 }
 
 namespace fwMedData
@@ -29,10 +33,7 @@ namespace fwMedData
 
 
 /**
- * @class ModelSeries
- * Holds models data
- *
- * 
+ * @brief Holds models data
  */
 class FWMEDDATA_CLASS_API ModelSeries : public ::fwMedData::Series
 {
@@ -40,7 +41,8 @@ class FWMEDDATA_CLASS_API ModelSeries : public ::fwMedData::Series
 public:
     typedef std::vector< SPTR(::fwData::Reconstruction) > ReconstructionVectorType;
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ModelSeries)(::fwData::Object), (()), ::fwData::factory::New< ModelSeries >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ModelSeries)(::fwData::Object), (()),
+                                            ::fwData::factory::New< ModelSeries >);
 
     fwCampMakeFriendDataMacro((fwMedData)(ModelSeries));
 
@@ -62,23 +64,68 @@ public:
     /**
      * @name Getters / Setters
      * @{ */
-
-    /**
-     * @brief Model container
-     * @{ */
-    fwDataGetSetCRefMacro(ReconstructionDB, ReconstructionVectorType);
+    const ReconstructionVectorType &getReconstructionDB() const;
+    void setReconstructionDB(const ReconstructionVectorType &val);
     /**  @} */
 
-    /**  @} */
+    /***
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when reconstructions are added
+    typedef ::fwCom::Signal< void (ReconstructionVectorType) > ReconstructionsAddedSignalType;
+
+    /// Key in m_signals map of signal m_sigReconstructionsAdded
+    FWMEDDATA_API static const ::fwCom::Signals::SignalKeyType s_RECONSTRUCTIONS_ADDED_SIG;
 
+    /// Type of signal when reconstructions are removed
+    typedef ::fwCom::Signal< void (ReconstructionVectorType) > ReconstructionsRemovedSignalType;
+
+    /// Key in m_signals map of signal m_sigReconstructionsRemoved
+    FWMEDDATA_API static const ::fwCom::Signals::SignalKeyType s_RECONSTRUCTIONS_REMOVED_SIG;
+
+    /**
+     * @}
+     */
 
 protected:
 
     /// Model container
-    ReconstructionVectorType m_attrReconstructionDB;
+    ReconstructionVectorType m_reconstructionDB;
+
+private:
+
+    /***
+     * @name Signals attributes
+     * @{
+     */
+    /// Signal emitted when reconstructions are added
+    ReconstructionsAddedSignalType::sptr m_sigReconstructionsAdded;
+
+    /// Signal emitted when reconstructions are removed
+    ReconstructionsRemovedSignalType ::sptr m_sigReconstructionsRemoved;
+    /**
+     * @}
+     */
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline const ModelSeries::ReconstructionVectorType& ModelSeries::getReconstructionDB() const
+{
+    return m_reconstructionDB;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void ModelSeries::setReconstructionDB(const ModelSeries::ReconstructionVectorType &val)
+{
+    m_reconstructionDB = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_MODELSERIES_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/Patient.hpp b/SrcLib/core/fwMedData/include/fwMedData/Patient.hpp
index 26b22b0..5e8909b 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/Patient.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/Patient.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,12 +7,12 @@
 #ifndef __FWMEDDATA_PATIENT_HPP__
 #define __FWMEDDATA_PATIENT_HPP__
 
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-#include "fwData/macros.hpp"
-
-#include "fwMedData/types.hpp"
 #include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
+
+#include <fwData/factory/new.hpp>
+#include <fwData/Object.hpp>
+
 
 fwCampAutoDeclareDataMacro((fwMedData)(Patient), FWMEDDATA_API);
 
@@ -20,16 +20,13 @@ namespace fwMedData
 {
 
 /**
- * @class Patient
- * Holds patient information
- *
- * 
+ * @brief Holds patient information
  */
 class FWMEDDATA_CLASS_API Patient : public ::fwData::Object
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Patient)(::fwData::Object), (()), ::fwData::factory::New< Patient >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Patient)(::fwData::Object), (()), ::fwData::factory::New< Patient >);
 
     fwCampMakeFriendDataMacro((fwMedData)(Patient));
 
@@ -55,26 +52,30 @@ public:
     /**
      * @brief Patient's full name (0010,0010)
      * @{ */
-    fwDataGetSetCRefMacro(Name, DicomValueType);
+    const DicomValueType &getName () const;
+    void setName(const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Primary hospital identification number or code for the patient (0010,0020)
      * @{ */
-    fwDataGetSetCRefMacro(PatientId, DicomValueType);
+    const DicomValueType &getPatientId () const;
+    void setPatientId (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Birthdate of the patient (0010,0030)
      * @{ */
-    fwDataGetSetCRefMacro(Birthdate, DicomValueType);
+    const DicomValueType &getBirthdate () const;
+    void setBirthdate (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Sex of the named patient (0010,0040)
      * Enumerated Values: M = male, F = female, O = other
      * @{ */
-    fwDataGetSetCRefMacro(Sex, DicomValueType);
+    const DicomValueType &getSex () const;
+    void setSex (const DicomValueType &val);
     /**  @} */
 
     /**  @} */
@@ -82,18 +83,76 @@ public:
 protected:
 
     /// Full name
-    DicomValueType m_attrName;
+    DicomValueType m_name;
 
     /// Primary hospital identification
-    DicomValueType m_attrPatientId;
+    DicomValueType m_patientId;
 
     /// Birthdate
-    DicomValueType m_attrBirthdate;
+    DicomValueType m_birthdate;
 
     /// Patient's sex
-    DicomValueType m_attrSex;
+    DicomValueType m_sex;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Patient::getName () const
+{
+    return m_name;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Patient::setName(const DicomValueType &val)
+{
+    m_name = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Patient::getPatientId () const
+{
+    return m_patientId;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Patient::setPatientId (const DicomValueType &val)
+{
+    m_patientId = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Patient::getBirthdate () const
+{
+    return m_birthdate;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Patient::setBirthdate (const DicomValueType &val)
+{
+    m_birthdate = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Patient::getSex () const
+{
+    return m_sex;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Patient::setSex (const DicomValueType &val)
+{
+    m_sex = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_PATIENT_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/Series.hpp b/SrcLib/core/fwMedData/include/fwMedData/Series.hpp
index 8e3f9a2..eb9234b 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/Series.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/Series.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,12 +7,12 @@
 #ifndef __FWMEDDATA_SERIES_HPP__
 #define __FWMEDDATA_SERIES_HPP__
 
-#include <fwData/Object.hpp>
+#include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
+
 #include <fwData/factory/new.hpp>
-#include <fwData/macros.hpp>
+#include <fwData/Object.hpp>
 
-#include "fwMedData/types.hpp"
-#include "fwMedData/config.hpp"
 
 fwCampAutoDeclareDataMacro((fwMedData)(Series), FWMEDDATA_API);
 
@@ -24,10 +24,7 @@ class Study;
 class Equipment;
 
 /**
- * @class Series
- * Holds series information.
- *
- * 
+ * @brief Holds series information.
  */
 class FWMEDDATA_CLASS_API Series : public ::fwData::Object
 {
@@ -59,55 +56,64 @@ public:
     /**
      * @brief Referring Patient
      * @{ */
-    fwDataGetSetSptrMacro(Patient, SPTR(::fwMedData::Patient));
+    SPTR(::fwMedData::Patient) getPatient() const;
+    void setPatient(const SPTR(::fwMedData::Patient)& val);
     /**  @} */
 
     /**
      * @brief Referring Study
      * @{ */
-    fwDataGetSetSptrMacro(Study, SPTR(::fwMedData::Study));
+    SPTR(::fwMedData::Study) getStudy () const;
+    void setStudy(const SPTR(::fwMedData::Study)& val);
     /**  @} */
 
     /**
      * @brief Related Equipment
      * @{ */
-    fwDataGetSetSptrMacro(Equipment, SPTR(::fwMedData::Equipment));
+    SPTR(::fwMedData::Equipment) getEquipment () const;
+    void setEquipment(const SPTR(::fwMedData::Equipment)& val);
     /**  @} */
 
     /**
      * @brief Unique identifier of the Series (0020,000E)
      * @{ */
-    fwDataGetSetCRefMacro(InstanceUID, DicomValueType);
+    const DicomValueType &getInstanceUID () const;
+    void setInstanceUID (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Type of equipment that originally acquired the data used to create this Series (0008,0060)
      * @{ */
-    fwDataGetSetCRefMacro(Modality, DicomValueType);
+    const DicomValueType &getModality () const;
+    void setModality (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Date the Series started (0008,0021)
      * @{ */
-    fwDataGetSetCRefMacro(Date, DicomValueType);
+    const DicomValueType &getDate () const;
+    void setDate (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Time the Series started (0008,0031)
      * @{ */
-    fwDataGetSetCRefMacro(Time, DicomValueType);
+    const DicomValueType &getTime () const;
+    void setTime (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Description of the Series (0008,103E)
      * @{ */
-    fwDataGetSetCRefMacro(Description, DicomValueType);
+    const DicomValueType &getDescription () const;
+    void setDescription (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Name of the physician(s) administering the Series (0008,1050)
      * @{ */
-    fwDataGetSetCRefMacro(PerformingPhysiciansName, DicomValuesType);
+    const DicomValuesType &getPerformingPhysiciansName () const;
+    void setPerformingPhysiciansName (const DicomValuesType &val);
     /**  @} */
 
     /**  @} */
@@ -115,33 +121,161 @@ public:
 protected:
 
     /// Referring Patient
-    SPTR(Patient) m_attrPatient;
+    SPTR(Patient) m_patient;
 
     /// Referring Study
-    SPTR(Study) m_attrStudy;
+    SPTR(Study) m_study;
 
     /// Related Equipment
-    SPTR(Equipment) m_attrEquipment;
+    SPTR(Equipment) m_equipment;
 
     /// Series unique identifier
-    DicomValueType m_attrInstanceUID;
+    DicomValueType m_instanceUID;
 
     /// Modality
-    DicomValueType m_attrModality;
+    DicomValueType m_modality;
 
     /// Date
-    DicomValueType m_attrDate;
+    DicomValueType m_date;
 
     /// Time
-    DicomValueType m_attrTime;
+    DicomValueType m_time;
 
     /// Description
-    DicomValueType m_attrDescription;
+    DicomValueType m_description;
 
     /// Performing physicians name
-    DicomValuesType m_attrPerformingPhysiciansName;
+    DicomValuesType m_performingPhysiciansName;
 };
 
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwMedData::Patient) Series::getPatient() const
+{
+    return m_patient;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setPatient(const SPTR(::fwMedData::Patient)& val)
+{
+    m_patient = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwMedData::Study) Series::getStudy () const
+{
+    return m_study;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setStudy(const SPTR(::fwMedData::Study)& val)
+{
+    m_study = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline SPTR(::fwMedData::Equipment) Series::getEquipment () const
+{
+    return m_equipment;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setEquipment(const SPTR(::fwMedData::Equipment)& val)
+{
+    m_equipment = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Series::getInstanceUID () const
+{
+    return m_instanceUID;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setInstanceUID (const DicomValueType &val)
+{
+    m_instanceUID = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Series::getModality () const
+{
+    return m_modality;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setModality (const DicomValueType &val)
+{
+    m_modality = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Series::getDate () const
+{
+    return m_date;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setDate (const DicomValueType &val)
+{
+    m_date = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Series::getTime () const
+{
+    return m_time;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setTime (const DicomValueType &val)
+{
+    m_time = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Series::getDescription () const
+{
+    return m_description;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setDescription (const DicomValueType &val)
+{
+    m_description = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValuesType &Series::getPerformingPhysiciansName () const
+{
+    return m_performingPhysiciansName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Series::setPerformingPhysiciansName (const DicomValuesType &val)
+{
+    m_performingPhysiciansName = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_SERIES_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/SeriesDB.hpp b/SrcLib/core/fwMedData/include/fwMedData/SeriesDB.hpp
index c7b1a8c..eaa5760 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/SeriesDB.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/SeriesDB.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,14 +7,16 @@
 #ifndef __FWMEDDATA_SERIESDB_HPP__
 #define __FWMEDDATA_SERIESDB_HPP__
 
-#include <vector>
+#include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signals.hpp>
 
-#include <fwData/Object.hpp>
 #include <fwData/factory/new.hpp>
-#include <fwData/macros.hpp>
+#include <fwData/Object.hpp>
 
-#include "fwMedData/types.hpp"
-#include "fwMedData/config.hpp"
+#include <vector>
 
 fwCampAutoDeclareDataMacro((fwMedData)(SeriesDB), FWMEDDATA_API);
 
@@ -24,16 +26,13 @@ namespace fwMedData
 class Series;
 
 /**
- * @class SeriesDB
- * Holds series data
- *
- * 
+ * @brief Holds series data
  */
 class FWMEDDATA_CLASS_API SeriesDB : public ::fwData::Object
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (SeriesDB)(::fwData::Object), (()), ::fwData::factory::New< SeriesDB >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (SeriesDB)(::fwData::Object), (()), ::fwData::factory::New< SeriesDB >);
 
     fwCampMakeFriendDataMacro((fwMedData)(SeriesDB));
 
@@ -58,28 +57,27 @@ public:
     typedef ContainerType::const_reverse_iterator const_reverse_iterator;
     typedef ContainerType::size_type size_type;
 
+    IteratorType begin();
+    IteratorType end();
+    ConstIteratorType begin() const;
+    ConstIteratorType end()   const;
 
-    IteratorType begin() { return m_attrContainer.begin(); }
-    IteratorType end()   { return m_attrContainer.end(); }
-    ConstIteratorType begin() const { return m_attrContainer.begin(); }
-    ConstIteratorType end()   const { return m_attrContainer.end(); }
-
-    ReverseIteratorType rbegin() { return m_attrContainer.rbegin(); }
-    ReverseIteratorType rend()   { return m_attrContainer.rend(); }
-    ConstReverseIteratorType rbegin() const { return m_attrContainer.rbegin(); }
-    ConstReverseIteratorType rend()   const { return m_attrContainer.rend(); }
+    ReverseIteratorType rbegin();
+    ReverseIteratorType rend();
+    ConstReverseIteratorType rbegin() const;
+    ConstReverseIteratorType rend()   const;
 
-    bool empty() const { return m_attrContainer.empty(); }
-    SizeType size() const { return m_attrContainer.size(); }
+    bool empty() const;
+    SizeType size() const;
 
-    ValueType front(){ return m_attrContainer.front(); }
-    ValueType back(){ return m_attrContainer.back(); }
+    ValueType front();
+    ValueType back();
 
-    ReferenceType operator[] ( size_type n ) {return this->m_attrContainer[n];}
-    ConstReferenceType operator[] ( size_type n ) const {return this->m_attrContainer[n];}
+    ReferenceType operator[] ( size_type n );
+    ConstReferenceType operator[] ( size_type n ) const;
 
-    ReferenceType at ( SizeType n ) {return m_attrContainer.at(n);}
-    ConstReferenceType at ( SizeType n ) const {return m_attrContainer.at(n);}
+    ReferenceType at ( SizeType n );
+    ConstReferenceType at ( SizeType n ) const;
     /// @}
 
 
@@ -106,19 +104,171 @@ public:
     /**
      * @brief Series container
      * @{ */
-    ContainerType &getContainer(){ return m_attrContainer; };
-    fwDataGetSetCRefMacro(Container, ContainerType);
+    ContainerType &getContainer();
+    const ContainerType &getContainer () const;
+    void setContainer (const ContainerType &val);
     /**  @} */
 
     /**  @} */
 
+    /**
+     * @name Signals
+     * @{
+     */
+    /// Type of signal when series are added
+    typedef ::fwCom::Signal< void (ContainerType) > AddedSeriesSignalType;
+    FWMEDDATA_API static const ::fwCom::Signals::SignalKeyType s_ADDED_SERIES_SIG;
+
+    /// Type of signal when series are removed
+    typedef ::fwCom::Signal< void (ContainerType) > RemovedSeriesSignalType;
+    FWMEDDATA_API static const ::fwCom::Signals::SignalKeyType s_REMOVED_SERIES_SIG;
+    /**
+     * @}
+     */
+
 protected:
 
     /// Series container
-    ContainerType m_attrContainer;
+    ContainerType m_container;
 
 };
 
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::IteratorType SeriesDB::begin()
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::IteratorType SeriesDB::end()
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ConstIteratorType SeriesDB::begin() const
+{
+    return m_container.begin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ConstIteratorType SeriesDB::end() const
+{
+    return m_container.end();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ReverseIteratorType SeriesDB::rbegin()
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ReverseIteratorType SeriesDB::rend()
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ConstReverseIteratorType SeriesDB::rbegin() const
+{
+    return m_container.rbegin();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ConstReverseIteratorType SeriesDB::rend() const
+{
+    return m_container.rend();
+}
+
+//-----------------------------------------------------------------------------
+
+inline bool SeriesDB::empty() const
+{
+    return m_container.empty();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::SizeType SeriesDB::size() const
+{
+    return m_container.size();
+}
+
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ValueType SeriesDB::front()
+{
+    return m_container.front();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ValueType SeriesDB::back()
+{
+    return m_container.back();
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ReferenceType SeriesDB::operator[](SeriesDB::size_type n)
+{
+    return this->m_container[n];
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ConstReferenceType SeriesDB::operator[](SeriesDB::size_type n) const
+{
+    return this->m_container[n];
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ReferenceType SeriesDB::at(SeriesDB::SizeType n)
+{
+    return m_container.at(n);
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ConstReferenceType SeriesDB::at(SeriesDB::SizeType n) const
+{
+    return m_container.at(n);
+}
+
+//-----------------------------------------------------------------------------
+
+inline SeriesDB::ContainerType &SeriesDB::getContainer()
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const SeriesDB::ContainerType &SeriesDB::getContainer () const
+{
+    return m_container;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void SeriesDB::setContainer (const SeriesDB::ContainerType &val)
+{
+    m_container = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_SERIESDB_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/Study.hpp b/SrcLib/core/fwMedData/include/fwMedData/Study.hpp
index 4d04bb8..1edbf13 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/Study.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/Study.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,12 +7,12 @@
 #ifndef __FWMEDDATA_STUDY_HPP__
 #define __FWMEDDATA_STUDY_HPP__
 
-#include "fwData/Object.hpp"
-#include "fwData/factory/new.hpp"
-#include "fwData/macros.hpp"
-
-#include "fwMedData/types.hpp"
 #include "fwMedData/config.hpp"
+#include "fwMedData/types.hpp"
+
+#include <fwData/factory/new.hpp>
+#include <fwData/Object.hpp>
+
 
 fwCampAutoDeclareDataMacro((fwMedData)(Study), FWMEDDATA_API);
 
@@ -20,16 +20,13 @@ namespace fwMedData
 {
 
 /**
- * @class Study
- * Holds study information
- *
- * 
+ * @brief Holds study information
  */
 class FWMEDDATA_CLASS_API Study : public ::fwData::Object
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Study)(::fwData::Object), (()), ::fwData::factory::New< Study >) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Study)(::fwData::Object), (()), ::fwData::factory::New< Study >);
 
     fwCampMakeFriendDataMacro((fwMedData)(Study));
 
@@ -55,37 +52,46 @@ public:
     /**
      * @brief Unique identifier of the Study (0020,000D)
      * @{ */
-    fwDataGetSetCRefMacro(InstanceUID, DicomValueType);
+    const DicomValueType &getInstanceUID () const;
+    void setInstanceUID (const DicomValueType &val);
+
     /**  @} */
 
     /**
      * @brief Date the Study started (0008,0020)
      * @{ */
-    fwDataGetSetCRefMacro(Date, DicomValueType);
+    const DicomValueType &getDate () const;
+    void setDate (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Time the Study started (0008,0030)
      * @{ */
-    fwDataGetSetCRefMacro(Time, DicomValueType);
+
+    const DicomValueType &getTime () const;
+    void setTime (const DicomValueType &val);
+
     /**  @} */
 
     /**
      * @brief Name of the patient's referring physician (0008,0090)
      * @{ */
-    fwDataGetSetCRefMacro(ReferringPhysicianName, DicomValueType);
+    const DicomValueType &getReferringPhysicianName () const;
+    void setReferringPhysicianName (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Institution-generated description or classification of the Study (component) performed (0008,1030)
      * @{ */
-    fwDataGetSetCRefMacro(Description, DicomValueType);
+    const DicomValueType &getDescription () const;
+    void setDescription (const DicomValueType &val);
     /**  @} */
 
     /**
      * @brief Age of the Patient (0010,1010)
      * @{ */
-    fwDataGetSetCRefMacro(PatientAge, DicomValueType);
+    const DicomValueType &getPatientAge () const;
+    void setPatientAge (const DicomValueType &val);
     /**  @} */
 
     /**  @} */
@@ -93,24 +99,110 @@ public:
 protected:
 
     /// Study unique identifier
-    DicomValueType m_attrInstanceUID;
+    DicomValueType m_instanceUID;
 
     /// Date
-    DicomValueType m_attrDate;
+    DicomValueType m_date;
 
     /// Time
-    DicomValueType m_attrTime;
+    DicomValueType m_time;
 
     /// Referring physician name
-    DicomValueType m_attrReferringPhysicianName;
+    DicomValueType m_referringPhysicianName;
 
     /// Description
-    DicomValueType m_attrDescription;
+    DicomValueType m_description;
 
     /// Patient age
-    DicomValueType m_attrPatientAge;
+    DicomValueType m_patientAge;
 };
 
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Study::getInstanceUID () const
+{
+    return m_instanceUID;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Study::setInstanceUID (const DicomValueType &val)
+{
+    m_instanceUID = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Study::getDate () const
+{
+    return m_date;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Study::setDate (const DicomValueType &val)
+{
+    m_date = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Study::getTime () const
+{
+    return m_time;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Study::setTime (const DicomValueType &val)
+{
+    m_time = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Study::getReferringPhysicianName () const
+{
+    return m_referringPhysicianName;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Study::setReferringPhysicianName (const DicomValueType &val)
+{
+    m_referringPhysicianName = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Study::getDescription () const
+{
+    return m_description;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Study::setDescription (const DicomValueType &val)
+{
+    m_description = val;
+}
+
+//-----------------------------------------------------------------------------
+
+inline const DicomValueType &Study::getPatientAge () const
+{
+    return m_patientAge;
+}
+
+//-----------------------------------------------------------------------------
+
+inline void Study::setPatientAge (const DicomValueType &val)
+{
+    m_patientAge = val;
+}
+
+//-----------------------------------------------------------------------------
+
 }   //end namespace fwMedData
 
 #endif // __FWMEDDATA_STUDY_HPP__
diff --git a/SrcLib/core/fwMedData/include/fwMedData/config.hpp b/SrcLib/core/fwMedData/include/fwMedData/config.hpp
deleted file mode 100644
index 8771911..0000000
--- a/SrcLib/core/fwMedData/include/fwMedData/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2013.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWMEDDATA_CONFIG_HPP_
-#define _FWMEDDATA_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWMEDDATA_EXPORTS
-            #define FWMEDDATA_API __declspec(dllexport)
-        #else
-            #define FWMEDDATA_API __declspec(dllimport)
-        #endif
-
-        #define FWMEDDATA_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWMEDDATA_EXPORTS
-            #define FWMEDDATA_API __attribute__ ((visibility("default")))
-            #define FWMEDDATA_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWMEDDATA_API __attribute__ ((visibility("hidden")))
-            #define FWMEDDATA_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWMEDDATA_API
-        #define FWMEDDATA_CLASS_API
-
-    #endif
-
-#endif //FWMEDDATA_API
-
diff --git a/SrcLib/core/fwMedData/include/fwMedData/namespace.hpp b/SrcLib/core/fwMedData/include/fwMedData/namespace.hpp
index b13b7ff..e98e334 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/namespace.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwMedData/include/fwMedData/types.hpp b/SrcLib/core/fwMedData/include/fwMedData/types.hpp
index 86f3839..49f75bc 100644
--- a/SrcLib/core/fwMedData/include/fwMedData/types.hpp
+++ b/SrcLib/core/fwMedData/include/fwMedData/types.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,8 +12,8 @@
 
 namespace fwMedData
 {
-    typedef std::string DicomValueType;
-    typedef std::vector<DicomValueType> DicomValuesType;
+typedef std::string DicomValueType;
+typedef std::vector<DicomValueType> DicomValuesType;
 
 }//end namespace fwMedData
 
diff --git a/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp
index 89105c5..ff6a424 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/ActivitySeries.cpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/registry/macros.hpp>
+#include "fwMedData/ActivitySeries.hpp"
 
-#include <fwData/Object.hpp>
 #include <fwData/Composite.hpp>
 #include <fwData/Exception.hpp>
-
-#include "fwMedData/ActivitySeries.hpp"
+#include <fwData/Object.hpp>
+#include <fwData/registry/macros.hpp>
 
 fwDataRegisterMacro( ::fwMedData::ActivitySeries );
 
@@ -18,13 +17,15 @@ namespace fwMedData
 {
 
 ActivitySeries::ActivitySeries(::fwData::Object::Key key) : Series(key),
-        m_attrData(::fwData::Composite::New())
-{}
+                                                            m_data(::fwData::Composite::New())
+{
+}
 
 //------------------------------------------------------------------------------
 
 ActivitySeries::~ActivitySeries()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -32,12 +33,12 @@ void ActivitySeries::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     ActivitySeries::csptr other = ActivitySeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::shallowCopy(_source);
-    m_attrActivityConfigId = other->m_attrActivityConfigId;
-    m_attrData = other->m_attrData;
+    m_activityConfigId = other->m_activityConfigId;
+    m_data             = other->m_data;
 }
 
 //------------------------------------------------------------------------------
@@ -46,13 +47,13 @@ void ActivitySeries::cachedDeepCopy(const ::fwData::Object::csptr &_source, Deep
 {
     ActivitySeries::csptr other = ActivitySeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::cachedDeepCopy(_source, cache);
 
-    m_attrActivityConfigId = other->m_attrActivityConfigId;
-    m_attrData = ::fwData::Object::copy(other->m_attrData, cache);
+    m_activityConfigId = other->m_activityConfigId;
+    m_data             = ::fwData::Object::copy(other->m_data, cache);
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/src/fwMedData/DicomSeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/DicomSeries.cpp
new file mode 100644
index 0000000..407589f
--- /dev/null
+++ b/SrcLib/core/fwMedData/src/fwMedData/DicomSeries.cpp
@@ -0,0 +1,142 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwMedData/DicomSeries.hpp"
+
+#include <fwData/Array.hpp>
+#include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
+
+#include <boost/filesystem/operations.hpp>
+
+fwDataRegisterMacro( ::fwMedData::DicomSeries );
+
+namespace fwMedData
+{
+
+DicomSeries::DicomSeries(::fwData::Object::Key key) : Series(key),
+                                                      m_dicomAvailability(NONE),
+                                                      m_numberOfInstances(0),
+                                                      m_firstInstanceNumber(0)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeries::~DicomSeries()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::shallowCopy(const ::fwData::Object::csptr& _source)
+{
+    DicomSeries::csptr other = DicomSeries::dynamicConstCast(_source);
+    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
+
+    this->::fwMedData::Series::shallowCopy(_source);
+
+    m_dicomAvailability   = other->m_dicomAvailability;
+    m_numberOfInstances   = other->m_numberOfInstances;
+    m_localDicomPaths     = other->m_localDicomPaths;
+    m_dicomBinaries       = other->m_dicomBinaries;
+    m_SOPClassUIDs        = other->m_SOPClassUIDs;
+    m_computedTagValues   = other->m_computedTagValues;
+    m_firstInstanceNumber = other->m_firstInstanceNumber;
+
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::cachedDeepCopy(const ::fwData::Object::csptr& _source, DeepCopyCacheType& cache)
+{
+    DicomSeries::csptr other = DicomSeries::dynamicConstCast(_source);
+    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
+
+    this->::fwMedData::Series::cachedDeepCopy(_source, cache);
+
+    m_dicomAvailability   = other->m_dicomAvailability;
+    m_numberOfInstances   = other->m_numberOfInstances;
+    m_localDicomPaths     = other->m_localDicomPaths;
+    m_SOPClassUIDs        = other->m_SOPClassUIDs;
+    m_computedTagValues   = other->m_computedTagValues;
+    m_firstInstanceNumber = other->m_firstInstanceNumber;
+
+    m_dicomBinaries.clear();
+    for(const DicomBinaryContainerType::value_type& array : other->m_dicomBinaries)
+    {
+        m_dicomBinaries[array.first] = ::fwData::Object::copy(array.second);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::addDicomPath(std::size_t instanceIndex, ::boost::filesystem::path path)
+{
+    m_localDicomPaths[instanceIndex] = path;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::addBinary(const std::string& filename, SPTR(::fwData::Array)binary)
+{
+    m_dicomBinaries[filename] = binary;
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomSeries::isInstanceAvailable(std::size_t instanceIndex) const
+{
+    DicomPathContainerType::const_iterator localPathIter;
+
+    bool available = false;
+
+    switch(m_dicomAvailability)
+    {
+        case NONE:
+        case PATHS:
+        case BLOB:
+            localPathIter = m_localDicomPaths.find(instanceIndex);
+            available     = localPathIter != m_localDicomPaths.end() && ::boost::filesystem::exists(
+                localPathIter->second);
+            break;
+        case BINARIES:
+            available = instanceIndex < m_dicomBinaries.size();
+            break;
+        default:
+            SLM_ASSERT("You shall not pass.",0);
+    }
+
+    return available;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::addSOPClassUID(const std::string& sopClassUID)
+{
+    m_SOPClassUIDs.insert(sopClassUID);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::addComputedTagValue(const std::string& tagName, const std::string& value)
+{
+    m_computedTagValues[tagName] = value;
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomSeries::hasComputedValues(const std::string& tagName) const
+{
+    return m_computedTagValues.find(tagName) != m_computedTagValues.end();
+}
+
+} // namespace fwMedData
+
diff --git a/SrcLib/core/fwMedData/src/fwMedData/Equipment.cpp b/SrcLib/core/fwMedData/src/fwMedData/Equipment.cpp
index f2f4477..0bc9221 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/Equipment.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/Equipment.cpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwMedData/Equipment.hpp"
 
-#include <fwData/registry/macros.hpp>
 #include <fwData/Exception.hpp>
-
-#include "fwMedData/Equipment.hpp"
+#include <fwData/registry/macros.hpp>
 
 fwDataRegisterMacro( ::fwMedData::Equipment );
 
@@ -22,7 +21,8 @@ Equipment::Equipment(::fwData::Object::Key key)
 //------------------------------------------------------------------------------
 
 Equipment::~Equipment()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -30,11 +30,11 @@ void Equipment::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     Equipment::csptr other = Equipment::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldShallowCopy( _source );
-    m_attrInstitutionName = other->m_attrInstitutionName;
+    m_institutionName = other->m_institutionName;
 }
 
 //------------------------------------------------------------------------------
@@ -43,11 +43,11 @@ void Equipment::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyC
 {
     Equipment::csptr other = Equipment::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldDeepCopy( _source, cache );
-    m_attrInstitutionName = other->m_attrInstitutionName;
+    m_institutionName = other->m_institutionName;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/src/fwMedData/ImageSeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/ImageSeries.cpp
index 1576831..561441d 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/ImageSeries.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/ImageSeries.cpp
@@ -1,29 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwMedData/ImageSeries.hpp"
 
+#include <fwData/Exception.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/registry/macros.hpp>
-#include <fwData/Exception.hpp>
-
-#include "fwMedData/ImageSeries.hpp"
 
 fwDataRegisterMacro( ::fwMedData::ImageSeries );
 
 namespace fwMedData
 {
 
-ImageSeries::ImageSeries(::fwData::Object::Key key): Series(key)
+ImageSeries::ImageSeries(::fwData::Object::Key key) : Series(key)
 {
 }
 
 //------------------------------------------------------------------------------
 
 ImageSeries::~ImageSeries()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -31,12 +31,12 @@ void ImageSeries::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     ImageSeries::csptr other = ImageSeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::shallowCopy(_source);
 
-    m_attrImage = other->m_attrImage;
+    m_image = other->m_image;
 }
 
 //------------------------------------------------------------------------------
@@ -45,12 +45,12 @@ void ImageSeries::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCop
 {
     ImageSeries::csptr other = ImageSeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::cachedDeepCopy(_source, cache);
 
-    m_attrImage = ::fwData::Object::copy(other->m_attrImage);
+    m_image = ::fwData::Object::copy(other->m_image);
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/src/fwMedData/ModelSeries.cpp b/SrcLib/core/fwMedData/src/fwMedData/ModelSeries.cpp
index 300c9f6..4e4534d 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/ModelSeries.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/ModelSeries.cpp
@@ -1,29 +1,43 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
+#include "fwMedData/ModelSeries.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwData/Exception.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Reconstruction.hpp>
 #include <fwData/registry/macros.hpp>
-#include <fwData/Exception.hpp>
-
-#include "fwMedData/ModelSeries.hpp"
 
 fwDataRegisterMacro( ::fwMedData::ModelSeries );
 
 namespace fwMedData
 {
 
-ModelSeries::ModelSeries(::fwData::Object::Key key): Series(key)
+const ::fwCom::Signals::SignalKeyType ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG   = "reconstructionsAdded";
+const ::fwCom::Signals::SignalKeyType ModelSeries::s_RECONSTRUCTIONS_REMOVED_SIG = "reconstructionsRemoved";
+
+ModelSeries::ModelSeries(::fwData::Object::Key key) : Series(key)
 {
+    m_sigReconstructionsAdded   = ReconstructionsAddedSignalType::New();
+    m_sigReconstructionsRemoved = ReconstructionsRemovedSignalType::New();
+
+    m_signals( s_RECONSTRUCTIONS_ADDED_SIG,  m_sigReconstructionsAdded)
+        ( s_RECONSTRUCTIONS_REMOVED_SIG,  m_sigReconstructionsRemoved);
 }
 
 //------------------------------------------------------------------------------
 
 ModelSeries::~ModelSeries()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -31,12 +45,12 @@ void ModelSeries::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     ModelSeries::csptr other = ModelSeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::shallowCopy(_source);
 
-    m_attrReconstructionDB = other->m_attrReconstructionDB;
+    m_reconstructionDB = other->m_reconstructionDB;
 }
 
 //------------------------------------------------------------------------------
@@ -45,12 +59,16 @@ void ModelSeries::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCop
 {
     ModelSeries::csptr other = ModelSeries::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->::fwMedData::Series::cachedDeepCopy(_source, cache);
 
-    m_attrReconstructionDB = other->m_attrReconstructionDB;
+    m_reconstructionDB.clear();
+    for(const ::fwData::Reconstruction::sptr &rec : other->m_reconstructionDB)
+    {
+        m_reconstructionDB.push_back(::fwData::Object::copy(rec, cache));
+    }
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/src/fwMedData/Patient.cpp b/SrcLib/core/fwMedData/src/fwMedData/Patient.cpp
index dbe6c45..e76c048 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/Patient.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/Patient.cpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwMedData/Patient.hpp"
 
-#include <fwData/registry/macros.hpp>
 #include <fwData/Exception.hpp>
-
-#include "fwMedData/Patient.hpp"
+#include <fwData/registry/macros.hpp>
 
 fwDataRegisterMacro( ::fwMedData::Patient );
 
@@ -22,7 +21,8 @@ Patient::Patient(::fwData::Object::Key key)
 //------------------------------------------------------------------------------
 
 Patient::~Patient()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -30,14 +30,14 @@ void Patient::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     Patient::csptr other = Patient::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldShallowCopy( other );
-    m_attrName = other->m_attrName;
-    m_attrBirthdate = other->m_attrBirthdate;
-    m_attrPatientId = other->m_attrPatientId;
-    m_attrSex = other->m_attrSex;
+    m_name      = other->m_name;
+    m_birthdate = other->m_birthdate;
+    m_patientId = other->m_patientId;
+    m_sex       = other->m_sex;
 }
 
 //------------------------------------------------------------------------------
@@ -46,14 +46,14 @@ void Patient::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCac
 {
     Patient::csptr other = Patient::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldDeepCopy( other, cache );
-    m_attrName = other->m_attrName;
-    m_attrBirthdate = other->m_attrBirthdate;
-    m_attrPatientId = other->m_attrPatientId;
-    m_attrSex = other->m_attrSex;
+    m_name      = other->m_name;
+    m_birthdate = other->m_birthdate;
+    m_patientId = other->m_patientId;
+    m_sex       = other->m_sex;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/src/fwMedData/Series.cpp b/SrcLib/core/fwMedData/src/fwMedData/Series.cpp
index 45007a0..4f5ce21 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/Series.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/Series.cpp
@@ -1,33 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <fwData/registry/macros.hpp>
-#include <fwData/Exception.hpp>
-
-#include "fwMedData/Patient.hpp"
-#include "fwMedData/Study.hpp"
 #include "fwMedData/Equipment.hpp"
+#include "fwMedData/Patient.hpp"
 #include "fwMedData/Series.hpp"
+#include "fwMedData/Study.hpp"
 
+#include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
 
 namespace fwMedData
 {
 
 Series::Series(::fwData::Object::Key key) :
-        m_attrPatient(::fwMedData::Patient::New()),
-        m_attrStudy(::fwMedData::Study::New()),
-        m_attrEquipment(::fwMedData::Equipment::New())
+    m_patient(::fwMedData::Patient::New()),
+    m_study(::fwMedData::Study::New()),
+    m_equipment(::fwMedData::Equipment::New())
 {
 }
 
 //------------------------------------------------------------------------------
 
 Series::~Series()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -35,21 +34,21 @@ void Series::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     Series::csptr other = Series::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldShallowCopy( other );
 
-    m_attrPatient = other->m_attrPatient;
-    m_attrStudy = other->m_attrStudy;
-    m_attrEquipment = other->m_attrEquipment;
+    m_patient   = other->m_patient;
+    m_study     = other->m_study;
+    m_equipment = other->m_equipment;
 
-    m_attrInstanceUID = other->m_attrInstanceUID;
-    m_attrModality = other->m_attrModality;
-    m_attrDate = other->m_attrDate;
-    m_attrTime = other->m_attrTime;
-    m_attrPerformingPhysiciansName = other->m_attrPerformingPhysiciansName;
-    m_attrDescription = other->m_attrDescription;
+    m_instanceUID              = other->m_instanceUID;
+    m_modality                 = other->m_modality;
+    m_date                     = other->m_date;
+    m_time                     = other->m_time;
+    m_performingPhysiciansName = other->m_performingPhysiciansName;
+    m_description              = other->m_description;
 }
 
 //------------------------------------------------------------------------------
@@ -58,21 +57,21 @@ void Series::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCach
 {
     Series::csptr other = Series::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldDeepCopy( other, cache );
 
-    m_attrPatient = ::fwData::Object::copy(other->m_attrPatient, cache);
-    m_attrStudy = ::fwData::Object::copy(other->m_attrStudy, cache);
-    m_attrEquipment = ::fwData::Object::copy(other->m_attrEquipment, cache);
+    m_patient   = ::fwData::Object::copy(other->m_patient, cache);
+    m_study     = ::fwData::Object::copy(other->m_study, cache);
+    m_equipment = ::fwData::Object::copy(other->m_equipment, cache);
 
-    m_attrInstanceUID = other->m_attrInstanceUID;
-    m_attrModality = other->m_attrModality;
-    m_attrDate = other->m_attrDate;
-    m_attrTime = other->m_attrTime;
-    m_attrPerformingPhysiciansName = other->m_attrPerformingPhysiciansName;
-    m_attrDescription = other->m_attrDescription;
+    m_instanceUID              = other->m_instanceUID;
+    m_modality                 = other->m_modality;
+    m_date                     = other->m_date;
+    m_time                     = other->m_time;
+    m_performingPhysiciansName = other->m_performingPhysiciansName;
+    m_description              = other->m_description;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/src/fwMedData/SeriesDB.cpp b/SrcLib/core/fwMedData/src/fwMedData/SeriesDB.cpp
index a9793f4..827370a 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/SeriesDB.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/SeriesDB.cpp
@@ -1,28 +1,40 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwMedData/Series.hpp"
+#include "fwMedData/SeriesDB.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
 
-#include <fwData/registry/macros.hpp>
 #include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
 
-#include "fwMedData/Series.hpp"
-#include "fwMedData/SeriesDB.hpp"
 
 fwDataRegisterMacro( ::fwMedData::SeriesDB );
 
 namespace fwMedData
 {
 
+const ::fwCom::Signals::SignalKeyType SeriesDB::s_ADDED_SERIES_SIG   = "addedSeries";
+const ::fwCom::Signals::SignalKeyType SeriesDB::s_REMOVED_SERIES_SIG = "removedSeries";
+
+//------------------------------------------------------------------------------
+
 SeriesDB::SeriesDB(::fwData::Object::Key key)
-{}
+{
+    newSignal< AddedSeriesSignalType >(s_ADDED_SERIES_SIG);
+    newSignal< RemovedSeriesSignalType >(s_REMOVED_SERIES_SIG);
+}
 
 //------------------------------------------------------------------------------
 
 SeriesDB::~SeriesDB()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -30,12 +42,12 @@ void SeriesDB::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     SeriesDB::csptr other = SeriesDB::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldShallowCopy( other );
 
-    m_attrContainer= other->m_attrContainer;
+    m_container = other->m_container;
 }
 
 //------------------------------------------------------------------------------
@@ -44,15 +56,15 @@ void SeriesDB::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCa
 {
     SeriesDB::csptr other = SeriesDB::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldDeepCopy( other, cache );
-    m_attrContainer.clear();
-    m_attrContainer.reserve(other->m_attrContainer.size());
-    BOOST_FOREACH(const ValueType &series, other->m_attrContainer)
+    m_container.clear();
+    m_container.reserve(other->m_container.size());
+    for(const ValueType &series :  other->m_container)
     {
-        m_attrContainer.push_back(::fwData::Object::copy(series, cache));
+        m_container.push_back(::fwData::Object::copy(series, cache));
     }
 }
 
diff --git a/SrcLib/core/fwMedData/src/fwMedData/Study.cpp b/SrcLib/core/fwMedData/src/fwMedData/Study.cpp
index 6a93abd..5f86ab1 100644
--- a/SrcLib/core/fwMedData/src/fwMedData/Study.cpp
+++ b/SrcLib/core/fwMedData/src/fwMedData/Study.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#include <fwData/registry/macros.hpp>
-#include <fwData/Exception.hpp>
-
 #include "fwMedData/Study.hpp"
 
+#include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
+
 fwDataRegisterMacro( ::fwMedData::Study );
 
 namespace fwMedData
@@ -22,7 +22,8 @@ Study::Study(::fwData::Object::Key key)
 //------------------------------------------------------------------------------
 
 Study::~Study()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -30,16 +31,16 @@ void Study::shallowCopy(const ::fwData::Object::csptr &_source)
 {
     Study::csptr other = Study::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldShallowCopy( other );
-    m_attrInstanceUID = other->m_attrInstanceUID;
-    m_attrDate = other->m_attrDate;
-    m_attrTime = other->m_attrTime;
-    m_attrReferringPhysicianName = other->m_attrReferringPhysicianName;
-    m_attrDescription = other->m_attrDescription;
-    m_attrPatientAge = other->m_attrPatientAge;
+    m_instanceUID            = other->m_instanceUID;
+    m_date                   = other->m_date;
+    m_time                   = other->m_time;
+    m_referringPhysicianName = other->m_referringPhysicianName;
+    m_description            = other->m_description;
+    m_patientAge             = other->m_patientAge;
 }
 
 //------------------------------------------------------------------------------
@@ -48,16 +49,16 @@ void Study::cachedDeepCopy(const ::fwData::Object::csptr &_source, DeepCopyCache
 {
     Study::csptr other = Study::dynamicConstCast(_source);
     FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
-            "Unable to copy" + (_source?_source->getClassname():std::string("<NULL>"))
-            + " to " + this->getClassname()), !bool(other) );
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
 
     this->fieldDeepCopy( other, cache );
-    m_attrInstanceUID = other->m_attrInstanceUID;
-    m_attrDate = other->m_attrDate;
-    m_attrTime = other->m_attrTime;
-    m_attrReferringPhysicianName = other->m_attrReferringPhysicianName;
-    m_attrDescription = other->m_attrDescription;
-    m_attrPatientAge = other->m_attrPatientAge;
+    m_instanceUID            = other->m_instanceUID;
+    m_date                   = other->m_date;
+    m_time                   = other->m_time;
+    m_referringPhysicianName = other->m_referringPhysicianName;
+    m_description            = other->m_description;
+    m_patientAge             = other->m_patientAge;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwMedData/test/CMakeLists.txt b/SrcLib/core/fwMedData/test/CMakeLists.txt
index 384db7d..3881996 100644
--- a/SrcLib/core/fwMedData/test/CMakeLists.txt
+++ b/SrcLib/core/fwMedData/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/core/fwMedData/test/Properties.cmake b/SrcLib/core/fwMedData/test/Properties.cmake
index 43cf4ea..3bb3652 100644
--- a/SrcLib/core/fwMedData/test/Properties.cmake
+++ b/SrcLib/core/fwMedData/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwMedDataTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwData fwMedData )
+set( DEPENDENCIES fwCore fwTest fwData fwMedData fwTools )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwMedData/test/cppunit.options b/SrcLib/core/fwMedData/test/cppunit.options
deleted file mode 100644
index 8d1b554..0000000
--- a/SrcLib/core/fwMedData/test/cppunit.options
+++ /dev/null
@@ -1,20 +0,0 @@
-
-CLASSTEST=[
-    'PatientTest',
-    'StudyTest',
-    'EquipmentTest',
-    'ImageSeriesTest',
-    'ModelSeriesTest',
-    'SeriesTest',
-    'SeriesDBTest',
-    'ActivitySeriesTest',
-]
-
-USE = ['boost', 'cppunit']
-LIB = [
-      'fwData_0-1',
-      'fwMedData_0-1',
-      'fwTools_0-1',
-      'fwTest_0-1',
-      ]
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwMedData/test/tu/include/ActivitySeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/ActivitySeriesTest.hpp
index 8772f4e..4d3626b 100644
--- a/SrcLib/core/fwMedData/test/tu/include/ActivitySeriesTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/ActivitySeriesTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,22 +8,22 @@
 #define __FWMEDDATA_UT_ACTIVITYSERIESTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
+#include <fwMedData/ActivitySeries.hpp>
 
 namespace fwMedData
 {
-    class ActivitySeries;
 
 namespace ut
 {
 
 class ActivitySeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ActivitySeriesTest );
+CPPUNIT_TEST_SUITE( ActivitySeriesTest );
 
-    CPPUNIT_TEST(activityConfigIdTest);
-    CPPUNIT_TEST(dataTest);
+CPPUNIT_TEST(activityConfigIdTest);
+CPPUNIT_TEST(dataTest);
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/include/DicomSeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/DicomSeriesTest.hpp
new file mode 100644
index 0000000..8d2fa3a
--- /dev/null
+++ b/SrcLib/core/fwMedData/test/tu/include/DicomSeriesTest.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATA_UT_DICOMSERIESTEST_HPP__
+#define __FWMEDDATA_UT_DICOMSERIESTEST_HPP__
+
+#include "fwMedData/DicomSeries.hpp"
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwMedData
+{
+namespace ut
+{
+
+class DicomSeriesTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomSeriesTest );
+CPPUNIT_TEST(dicomTest);
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void dicomTest();
+
+private:
+    ::fwMedData::DicomSeries::sptr m_series;
+};
+
+} //namespace ut
+} //namespace fwMedData
+
+#endif //__FWMEDDATA_UT_DICOMSERIESTEST_HPP__
+
diff --git a/SrcLib/core/fwMedData/test/tu/include/EquipmentTest.hpp b/SrcLib/core/fwMedData/test/tu/include/EquipmentTest.hpp
index e2aec65..d6cb329 100755
--- a/SrcLib/core/fwMedData/test/tu/include/EquipmentTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/EquipmentTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,16 +9,19 @@
 
 #include <cppunit/extensions/HelperMacros.h>
 
+#include <fwMedData/Equipment.hpp>
+
 namespace fwMedData
 {
+
 namespace ut
 {
 
 class EquipmentTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( EquipmentTest );
-    CPPUNIT_TEST(institutionNameTest);
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( EquipmentTest );
+CPPUNIT_TEST(institutionNameTest);
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/include/ImageSeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/ImageSeriesTest.hpp
index 33865f0..5e7ca77 100755
--- a/SrcLib/core/fwMedData/test/tu/include/ImageSeriesTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/ImageSeriesTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class ImageSeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageSeriesTest );
-    CPPUNIT_TEST(imageTest);
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageSeriesTest );
+CPPUNIT_TEST(imageTest);
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/include/ModelSeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/ModelSeriesTest.hpp
index d178ec0..a71f6df 100755
--- a/SrcLib/core/fwMedData/test/tu/include/ModelSeriesTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/ModelSeriesTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,11 @@ namespace ut
 
 class ModelSeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ModelSeriesTest );
-    CPPUNIT_TEST(modelTest);
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ModelSeriesTest );
+CPPUNIT_TEST(modelTest);
+CPPUNIT_TEST(deepCopyTest);
+CPPUNIT_TEST(shallowCopyTest);
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -26,6 +28,8 @@ public:
     void tearDown();
 
     void modelTest();
+    void deepCopyTest();
+    void shallowCopyTest();
 
 private:
     ModelSeries::sptr m_series;
diff --git a/SrcLib/core/fwMedData/test/tu/include/PatientTest.hpp b/SrcLib/core/fwMedData/test/tu/include/PatientTest.hpp
index 11c22f3..dba44cd 100755
--- a/SrcLib/core/fwMedData/test/tu/include/PatientTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/PatientTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,12 +16,12 @@ namespace ut
 
 class PatientTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( PatientTest );
-    CPPUNIT_TEST( nameTest );
-    CPPUNIT_TEST( idTest );
-    CPPUNIT_TEST( birthdateTest );
-    CPPUNIT_TEST( sexTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( PatientTest );
+CPPUNIT_TEST( nameTest );
+CPPUNIT_TEST( idTest );
+CPPUNIT_TEST( birthdateTest );
+CPPUNIT_TEST( sexTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/include/SeriesDBTest.hpp b/SrcLib/core/fwMedData/test/tu/include/SeriesDBTest.hpp
index 1e7dacb..42979d0 100755
--- a/SrcLib/core/fwMedData/test/tu/include/SeriesDBTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/SeriesDBTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,22 +7,23 @@
 #ifndef __FWMEDDATA_UT_SERIESDBTEST_HPP__
 #define __FWMEDDATA_UT_SERIESDBTEST_HPP__
 
+#include "fwMedData/SeriesDB.hpp"
+
 #include <cppunit/extensions/HelperMacros.h>
 
 namespace fwMedData
 {
-    class SeriesDB;
 
 namespace ut
 {
 
 class SeriesDBTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBTest );
+CPPUNIT_TEST_SUITE( SeriesDBTest );
 
-    CPPUNIT_TEST(containerTest);
+CPPUNIT_TEST(containerTest);
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/include/SeriesTest.hpp b/SrcLib/core/fwMedData/test/tu/include/SeriesTest.hpp
index 0c4f155..54cea10 100755
--- a/SrcLib/core/fwMedData/test/tu/include/SeriesTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/SeriesTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,30 +7,33 @@
 #ifndef __FWMEDDATA_UT_SERIESTEST_HPP__
 #define __FWMEDDATA_UT_SERIESTEST_HPP__
 
+
+#include "fwMedData/ImageSeries.hpp"
+#include "fwMedData/ModelSeries.hpp"
+
 #include <cppunit/extensions/HelperMacros.h>
 
 namespace fwMedData
 {
-    class Series;
 
 namespace ut
 {
 
 class SeriesTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesTest );
-
-    CPPUNIT_TEST(attrPatientTest);
-    CPPUNIT_TEST(attrStudyTest);
-    CPPUNIT_TEST(attrEquipmentTest);
-    CPPUNIT_TEST(attrInstanceUIDTest);
-    CPPUNIT_TEST(attrModalityTest);
-    CPPUNIT_TEST(attrDateTest);
-    CPPUNIT_TEST(attrTimeTest);
-    CPPUNIT_TEST(attrPerformingPhysiciansNameTest);
-    CPPUNIT_TEST(attrDescriptionTest);
-
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesTest );
+
+CPPUNIT_TEST(attrPatientTest);
+CPPUNIT_TEST(attrStudyTest);
+CPPUNIT_TEST(attrEquipmentTest);
+CPPUNIT_TEST(attrInstanceUIDTest);
+CPPUNIT_TEST(attrModalityTest);
+CPPUNIT_TEST(attrDateTest);
+CPPUNIT_TEST(attrTimeTest);
+CPPUNIT_TEST(attrPerformingPhysiciansNameTest);
+CPPUNIT_TEST(attrDescriptionTest);
+
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/include/StudyTest.hpp b/SrcLib/core/fwMedData/test/tu/include/StudyTest.hpp
index d9835ec..46dfd71 100755
--- a/SrcLib/core/fwMedData/test/tu/include/StudyTest.hpp
+++ b/SrcLib/core/fwMedData/test/tu/include/StudyTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,14 +16,14 @@ namespace ut
 
 class StudyTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( StudyTest );
-    CPPUNIT_TEST(instanceUIDTest);
-    CPPUNIT_TEST(dateTest);
-    CPPUNIT_TEST(timeTest);
-    CPPUNIT_TEST(referringPhysicianNameTest);
-    CPPUNIT_TEST(descriptionTest);
-    CPPUNIT_TEST(patientAgeTest);
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( StudyTest );
+CPPUNIT_TEST(instanceUIDTest);
+CPPUNIT_TEST(dateTest);
+CPPUNIT_TEST(timeTest);
+CPPUNIT_TEST(referringPhysicianNameTest);
+CPPUNIT_TEST(descriptionTest);
+CPPUNIT_TEST(patientAgeTest);
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwMedData/test/tu/src/ActivitySeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/ActivitySeriesTest.cpp
index 501a474..9822bb2 100644
--- a/SrcLib/core/fwMedData/test/tu/src/ActivitySeriesTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/ActivitySeriesTest.cpp
@@ -1,15 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/Composite.hpp>
-
-#include <fwMedData/ActivitySeries.hpp>
-
 #include "ActivitySeriesTest.hpp"
 
+#include <fwData/Composite.hpp>
+
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::ActivitySeriesTest );
diff --git a/SrcLib/core/fwMedData/test/tu/src/DicomSeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/DicomSeriesTest.cpp
new file mode 100644
index 0000000..2015a2a
--- /dev/null
+++ b/SrcLib/core/fwMedData/test/tu/src/DicomSeriesTest.cpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DicomSeriesTest.hpp"
+
+#include <fstream>
+#include <fwData/Array.hpp>
+#include <fwTools/System.hpp>
+#include <fwTools/Type.hpp>
+
+#include <boost/filesystem/operations.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::DicomSeriesTest );
+
+namespace fwMedData
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesTest::setUp()
+{
+    // Set up context before running a test.
+    m_series = ::fwMedData::DicomSeries::New();
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesTest::tearDown()
+{
+    // Clean up after the test run.
+    m_series.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesTest::dicomTest()
+{
+    CPPUNIT_ASSERT(m_series);
+
+    //Create Path
+    const ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "dicomtest";
+    ::boost::filesystem::create_directories(path);
+    const std::string filename = path.string()+"/"+"file";
+    std::ofstream file;
+    file.open(filename.c_str(), std::ofstream::out);
+    file << "42";
+    file.close();
+
+    //None
+    CPPUNIT_ASSERT_EQUAL(::fwMedData::DicomSeries::NONE, m_series->getDicomAvailability());
+    CPPUNIT_ASSERT(!m_series->isInstanceAvailable(42));
+    m_series->setNumberOfInstances(100);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(100,m_series->getNumberOfInstances(),0);
+
+    //Paths
+    m_series->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+    CPPUNIT_ASSERT_EQUAL(::fwMedData::DicomSeries::PATHS, m_series->getDicomAvailability());
+    m_series->addDicomPath(42, filename);
+    CPPUNIT_ASSERT(m_series->isInstanceAvailable(42));
+
+    //Binaries
+    m_series->setDicomAvailability(::fwMedData::DicomSeries::BINARIES);
+    CPPUNIT_ASSERT_EQUAL(::fwMedData::DicomSeries::BINARIES, m_series->getDicomAvailability());
+    ::fwData::Array::sptr array = ::fwData::Array::New();
+    m_series->addBinary(filename, array);
+    CPPUNIT_ASSERT_EQUAL(array, m_series->getDicomBinaries().at(filename));
+
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwMedData
diff --git a/SrcLib/core/fwMedData/test/tu/src/EquipmentTest.cpp b/SrcLib/core/fwMedData/test/tu/src/EquipmentTest.cpp
index 0ae3115..b57a51f 100755
--- a/SrcLib/core/fwMedData/test/tu/src/EquipmentTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/EquipmentTest.cpp
@@ -1,13 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "fwMedData/Equipment.hpp"
 
 #include "EquipmentTest.hpp"
 
+#include "fwMedData/Equipment.hpp"
+
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::EquipmentTest );
diff --git a/SrcLib/core/fwMedData/test/tu/src/ImageSeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/ImageSeriesTest.cpp
index 88e586c..b658575 100755
--- a/SrcLib/core/fwMedData/test/tu/src/ImageSeriesTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/ImageSeriesTest.cpp
@@ -1,16 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwTest/generator/Image.hpp>
-#include <fwTools/Type.hpp>
 
 #include "fwMedData/ImageSeries.hpp"
 
 #include "ImageSeriesTest.hpp"
 
+#include <fwTest/generator/Image.hpp>
+#include <fwTools/Type.hpp>
+
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::ImageSeriesTest );
diff --git a/SrcLib/core/fwMedData/test/tu/src/ModelSeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/ModelSeriesTest.cpp
index 707ac9a..973b2c6 100755
--- a/SrcLib/core/fwMedData/test/tu/src/ModelSeriesTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/ModelSeriesTest.cpp
@@ -1,19 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/Mesh.hpp>
-#include <fwData/Reconstruction.hpp>
-#include <fwTools/Type.hpp>
-
-#include <fwTest/generator/Mesh.hpp>
 
 #include "fwMedData/ModelSeries.hpp"
 
 #include "ModelSeriesTest.hpp"
 
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+
+#include <fwTest/generator/Mesh.hpp>
+#include <fwTools/Type.hpp>
+
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedData::ut::ModelSeriesTest );
@@ -73,5 +74,58 @@ void ModelSeriesTest::modelTest()
 
 //------------------------------------------------------------------------------
 
+void ModelSeriesTest::deepCopyTest()
+{
+    CPPUNIT_ASSERT(m_series);
+
+    ::fwData::Reconstruction::sptr rec1 = ::fwData::Reconstruction::New();
+    ::fwData::Mesh::sptr mesh1          = ::fwData::Mesh::New();
+    ::fwTest::generator::Mesh::generateQuadMesh(mesh1);
+
+    rec1->setMesh(mesh1);
+    ModelSeries::ReconstructionVectorType recs;
+    recs.push_back(rec1);
+    m_series->setReconstructionDB(recs);
+
+    ::fwMedData::ModelSeries::sptr secondSeries = ::fwMedData::ModelSeries::New();
+
+    secondSeries->deepCopy(m_series);
+
+    CPPUNIT_ASSERT_EQUAL(1, (int)m_series->getReconstructionDB().size());
+    CPPUNIT_ASSERT_EQUAL(1, (int)secondSeries->getReconstructionDB().size());
+    CPPUNIT_ASSERT (m_series->getReconstructionDB()[0] != secondSeries->getReconstructionDB()[0]);
+
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeriesTest::shallowCopyTest()
+{
+    CPPUNIT_ASSERT(m_series);
+
+    ::fwData::Reconstruction::sptr rec1 = ::fwData::Reconstruction::New();
+    ::fwData::Mesh::sptr mesh1          = ::fwData::Mesh::New();
+    ::fwTest::generator::Mesh::generateQuadMesh(mesh1);
+    rec1->setMesh(mesh1);
+    ModelSeries::ReconstructionVectorType recs;
+    recs.push_back(rec1);
+    m_series->setReconstructionDB(recs);
+
+    ::fwMedData::ModelSeries::sptr secondSeries = ::fwMedData::ModelSeries::New();
+
+    secondSeries->shallowCopy(m_series);
+
+    CPPUNIT_ASSERT(m_series->getReconstructionDB()[0] == secondSeries->getReconstructionDB()[0]);
+    CPPUNIT_ASSERT_EQUAL(m_series->getReconstructionDB()[0], secondSeries->getReconstructionDB()[0]);
+
+    CPPUNIT_ASSERT_EQUAL(recs[0], m_series->getReconstructionDB()[0]);
+    CPPUNIT_ASSERT_EQUAL(recs[0], secondSeries->getReconstructionDB()[0]);
+    CPPUNIT_ASSERT_EQUAL(1, (int)m_series->getReconstructionDB().size());
+    CPPUNIT_ASSERT_EQUAL(1, (int)secondSeries->getReconstructionDB().size());
+
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace ut
 } //namespace fwMedData
diff --git a/SrcLib/core/fwMedData/test/tu/src/PatientTest.cpp b/SrcLib/core/fwMedData/test/tu/src/PatientTest.cpp
index 13cc8cc..cae86e6 100755
--- a/SrcLib/core/fwMedData/test/tu/src/PatientTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/PatientTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -57,7 +57,7 @@ void PatientTest::idTest()
 
 void PatientTest::birthdateTest()
 {
-    const std::string birthdate = "02-14-2013 11:28";
+    const std::string birthdate = "02-14-2015 11:28";
     CPPUNIT_ASSERT(m_patient);
     m_patient->setBirthdate(birthdate);
     CPPUNIT_ASSERT_EQUAL(birthdate, m_patient->getBirthdate());
diff --git a/SrcLib/core/fwMedData/test/tu/src/SeriesDBTest.cpp b/SrcLib/core/fwMedData/test/tu/src/SeriesDBTest.cpp
index 6bb1ef5..ad2681d 100755
--- a/SrcLib/core/fwMedData/test/tu/src/SeriesDBTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/SeriesDBTest.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "fwMedData/SeriesDB.hpp"
 #include "fwMedData/ModelSeries.hpp"
 
 #include "SeriesDBTest.hpp"
diff --git a/SrcLib/core/fwMedData/test/tu/src/SeriesTest.cpp b/SrcLib/core/fwMedData/test/tu/src/SeriesTest.cpp
index f055891..47aa1bc 100755
--- a/SrcLib/core/fwMedData/test/tu/src/SeriesTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/SeriesTest.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "fwMedData/ImageSeries.hpp"
-#include "fwMedData/ModelSeries.hpp"
 
 #include "SeriesTest.hpp"
 
@@ -77,9 +75,9 @@ void SeriesTest::attrInstanceUIDTest()
     for (SeriesVectorType::iterator iter = m_series.begin(); iter != m_series.end(); ++iter)
     {
         ::fwMedData::Series::sptr series = *iter;
-        series->setInstanceUID( instanceUID ); 
+        series->setInstanceUID( instanceUID );
 
-        CPPUNIT_ASSERT_EQUAL( instanceUID , series->getInstanceUID() );
+        CPPUNIT_ASSERT_EQUAL( instanceUID, series->getInstanceUID() );
     }
 }
 
@@ -92,9 +90,9 @@ void SeriesTest::attrModalityTest()
     for (SeriesVectorType::iterator iter = m_series.begin(); iter != m_series.end(); ++iter)
     {
         ::fwMedData::Series::sptr series = *iter;
-        series->setModality( modality ); 
+        series->setModality( modality );
 
-        CPPUNIT_ASSERT_EQUAL( modality , series->getModality() );
+        CPPUNIT_ASSERT_EQUAL( modality, series->getModality() );
     }
 }
 
@@ -102,14 +100,14 @@ void SeriesTest::attrModalityTest()
 
 void SeriesTest::attrDateTest()
 {
-    const std::string date = "02-14-2013";
+    const std::string date = "02-14-2015";
 
     for (SeriesVectorType::iterator iter = m_series.begin(); iter != m_series.end(); ++iter)
     {
         ::fwMedData::Series::sptr series = *iter;
-        series->setDate( date ); 
+        series->setDate( date );
 
-        CPPUNIT_ASSERT_EQUAL( date , series->getDate() );
+        CPPUNIT_ASSERT_EQUAL( date, series->getDate() );
     }
 }
 
@@ -122,9 +120,9 @@ void SeriesTest::attrTimeTest()
     for (SeriesVectorType::iterator iter = m_series.begin(); iter != m_series.end(); ++iter)
     {
         ::fwMedData::Series::sptr series = *iter;
-        series->setTime( time ); 
+        series->setTime( time );
 
-        CPPUNIT_ASSERT_EQUAL( time , series->getTime() );
+        CPPUNIT_ASSERT_EQUAL( time, series->getTime() );
     }
 }
 
@@ -141,7 +139,7 @@ void SeriesTest::attrPerformingPhysiciansNameTest()
     for (SeriesVectorType::iterator iter = m_series.begin(); iter != m_series.end(); ++iter)
     {
         ::fwMedData::Series::sptr series = *iter;
-        series->setPerformingPhysiciansName( performingPhysiciansName ); 
+        series->setPerformingPhysiciansName( performingPhysiciansName );
 
         CPPUNIT_ASSERT( performingPhysiciansName == series->getPerformingPhysiciansName() );
     }
@@ -156,9 +154,9 @@ void SeriesTest::attrDescriptionTest()
     for (SeriesVectorType::iterator iter = m_series.begin(); iter != m_series.end(); ++iter)
     {
         ::fwMedData::Series::sptr series = *iter;
-        series->setDescription( description ); 
+        series->setDescription( description );
 
-        CPPUNIT_ASSERT_EQUAL( description , series->getDescription() );
+        CPPUNIT_ASSERT_EQUAL( description, series->getDescription() );
     }
 }
 
diff --git a/SrcLib/core/fwMedData/test/tu/src/StudyTest.cpp b/SrcLib/core/fwMedData/test/tu/src/StudyTest.cpp
index 5df03e5..5087f9d 100755
--- a/SrcLib/core/fwMedData/test/tu/src/StudyTest.cpp
+++ b/SrcLib/core/fwMedData/test/tu/src/StudyTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -47,7 +47,7 @@ void StudyTest::instanceUIDTest()
 
 void StudyTest::dateTest()
 {
-    const std::string date = "02-14-2013";
+    const std::string date = "02-14-2015";
     CPPUNIT_ASSERT(m_study);
     m_study->setDate(date);
     CPPUNIT_ASSERT_EQUAL(date, m_study->getDate());
diff --git a/SrcLib/core/fwMedDataTools/CMakeLists.txt b/SrcLib/core/fwMedDataTools/CMakeLists.txt
index 6741f12..9e69ee4 100644
--- a/SrcLib/core/fwMedDataTools/CMakeLists.txt
+++ b/SrcLib/core/fwMedDataTools/CMakeLists.txt
@@ -1,13 +1,13 @@
-
 fwLoadProperties()
 
+
 find_package (Boost COMPONENTS date_time REQUIRED)
 fwInclude(${Boost_INCLUDE_DIRS})
 fwLink(${Boost_LIBRARIES})
 
-
-find_package(GDCM REQUIRED)
-include(${GDCM_USE_FILE})
-fwInclude(${GDCM_INCLUDE_DIRS})
-fwLink(${GDCM_LIBRARIES} gdcmMSFF)
-
+if(NOT ANDROID)
+    find_package(GDCM REQUIRED)
+    include(${GDCM_USE_FILE})
+    fwInclude(${GDCM_INCLUDE_DIRS})
+    fwLink(${GDCM_LIBRARIES} gdcmMSFF)
+endif()
diff --git a/SrcLib/core/fwMedDataTools/Properties.cmake b/SrcLib/core/fwMedDataTools/Properties.cmake
index b353c90..700cab5 100644
--- a/SrcLib/core/fwMedDataTools/Properties.cmake
+++ b/SrcLib/core/fwMedDataTools/Properties.cmake
@@ -2,6 +2,10 @@
 set( NAME fwMedDataTools )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES )
+set( DEPENDENCIES
+    fwCore
+    fwCom
+    fwData
+    fwMedData
+)
 set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwMedDataTools/bin/build.options b/SrcLib/core/fwMedDataTools/bin/build.options
deleted file mode 100644
index a03ce2c..0000000
--- a/SrcLib/core/fwMedDataTools/bin/build.options
+++ /dev/null
@@ -1,6 +0,0 @@
-TYPE    = 'shared'
-VERSION = '0-1'
-LIB = [
-      ]
-USE = ['boostDateTime', 'gdcmMSFF']
-
diff --git a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/ModelSeries.hpp b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/ModelSeries.hpp
new file mode 100644
index 0000000..65e6a14
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/ModelSeries.hpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATATOOLS_MODELSERIES_HPP__
+#define __FWMEDDATATOOLS_MODELSERIES_HPP__
+
+#include "fwMedDataTools/config.hpp"
+
+#include <fwData/Color.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+
+#include <string>
+
+namespace fwMedDataTools
+{
+
+/**
+ * @brief   This class contains helper to manipulate ::fwData::ModelSeries.
+ * @class   ModelSeries
+ */
+class ModelSeries
+{
+public:
+
+    /**
+     * @brief Add a mesh into a model series. A reconstruction for this mesh will be created.
+     * @param _modelSeries Model series where the mesh must be added.
+     * @param _rec Reconstruction that must be added
+     */
+    FWMEDDATATOOLS_API static void addReconstruction( ::fwMedData::ModelSeries::sptr& _modelSeries,
+                                                      ::fwData::Reconstruction::sptr& _rec);
+
+    /**
+     * @brief Create a reconstruction from a mesh.
+     * @param _mesh Mesh that must be added
+     * @param _organName Organ name to associate with the mesh
+     * @param _structureType Structure type to associate with the mesh
+     * @param _color Color of the material of the reconstruction.
+     * @param _mode Representation mode of the material of the reconstruction.
+     * @param _visible Visibility flag of the reconstruction.
+     * @return Output reconstruction.
+     */
+    FWMEDDATATOOLS_API static ::fwData::Reconstruction::sptr
+    createReconstructionFromMesh( const ::fwData::Mesh::sptr& _mesh,
+                                  const std::string& _organName,
+                                  const std::string& _structureType,
+                                  const ::fwData::Color::sptr& _color = ::fwData::Color::New(),
+                                  ::fwData::Material::RepresentationType _mode = ::fwData::Material::SURFACE,
+                                  bool _visible = true);
+
+    /**
+     * @brief Add a mesh into a model series. A reconstruction for this mesh will be automatically created.
+     * @param _modelSeries Model series where the mesh must be added.
+     * @param _mesh Mesh that must be added
+     * @param _organName Organ name to associate with the mesh
+     * @param _structureType Structure type to associate with the mesh
+     * @param _color Color of the material of the reconstruction.
+     * @param _mode Representation mode of the material of the reconstruction.
+     * @param _visible Visibility flag of the reconstruction.
+     */
+    FWMEDDATATOOLS_API static void
+    addMesh( ::fwMedData::ModelSeries::sptr& _modelSeries,
+             const ::fwData::Mesh::sptr& _mesh,
+             const std::string& _organName, const std::string& _structureType,
+             const ::fwData::Color::sptr& _color = ::fwData::Color::New(),
+             ::fwData::Material::RepresentationType _mode = ::fwData::Material::SURFACE,
+             bool _visible = true);
+};
+
+} // end namespace fwMedDataTools
+
+#endif // __FWMEDDATATOOLS_MODELSERIES_HPP__
diff --git a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/config.hpp b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/config.hpp
deleted file mode 100644
index ffb4b24..0000000
--- a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/config.hpp
+++ /dev/null
@@ -1,40 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWMEDDATATOOLS_CONFIG_HPP__
-#define __FWMEDDATATOOLS_CONFIG_HPP__
-
-    #ifdef _WIN32
-
-        #ifdef FWMEDDATATOOLS_EXPORTS
-            #define FWMEDDATATOOLS_API __declspec(dllexport)
-        #else
-            #define FWMEDDATATOOLS_API __declspec(dllimport)
-        #endif
-
-        #define FWMEDDATATOOLS_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWMEDDATATOOLS_EXPORTS
-            #define FWMEDDATATOOLS_API __attribute__ ((visibility("default")))
-            #define FWMEDDATATOOLS_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWMEDDATATOOLS_API __attribute__ ((visibility("hidden")))
-            #define FWMEDDATATOOLS_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWMEDDATATOOLS_API
-        #define FWMEDDATATOOLS_CLASS_API
-
-    #endif
-
-#endif // __FWMEDDATATOOLS_CONFIG_HPP__
-
diff --git a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/functions.hpp b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/functions.hpp
index 5d5810e..a6d905a 100644
--- a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/functions.hpp
+++ b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/functions.hpp
@@ -1,29 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <string>
+#ifndef __FWMEDDATATOOLS_FUNCTIONS_HPP__
+#define __FWMEDDATATOOLS_FUNCTIONS_HPP__
 
 #include "fwMedDataTools/config.hpp"
 
+#include <string>
+
 namespace fwMedDataTools
 {
 
-    /**
-     * @brief Generates a random Dicom Patient ID using GDCM.
-     * It must be at most 64 char long and non null.
-     */
-    FWMEDDATATOOLS_API std::string generatePatientId();
+// Skip this for now on Android, this allows us to get rid of GDCM
+#ifndef ANDROID
+
+/**
+ * @brief Generates a random Dicom Patient ID using GDCM.
+ * It must be at most 64 char long and non null.
+ */
+FWMEDDATATOOLS_API std::string generatePatientId();
+
+/**
+ * @brief Generates a random Dicom Study Instance UID using current time.
+ * It must be 16 char long and may be null.
+ *
+ * FIXME : According to Dicom, the Study Instance UID must identify a study from time and location.
+ */
+FWMEDDATATOOLS_API std::string generateStudyInstanceUid();
 
-    /**
-     * @brief Generates a random Dicom Study Instance UID using current time.
-     * It must be 16 char long and may be null.
-     *
-     * FIXME : According to Dicom, the Study Instance UID must identify a study from time and location.
-     */
-    FWMEDDATATOOLS_API std::string generateStudyInstanceUid();
+#endif // ANDROID
 
 } // namespace fwMedDataTools
 
+#endif //__FWMEDDATATOOLS_FUNCTIONS_HPP__
diff --git a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/helper/SeriesDB.hpp b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/helper/SeriesDB.hpp
new file mode 100644
index 0000000..c24300f
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/helper/SeriesDB.hpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATATOOLS_HELPER_SERIESDB_HPP__
+#define __FWMEDDATATOOLS_HELPER_SERIESDB_HPP__
+
+#include "fwMedDataTools/config.hpp"
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+namespace fwMedDataTools
+{
+namespace helper
+{
+
+/**
+ * @brief Defines an helper to modify an ::fwMedData::SeriesDB and create in parallel the message to announce this modification.
+ */
+class FWMEDDATATOOLS_CLASS_API SeriesDB
+{
+
+public:
+
+    /// Constructor. Initialize parameters.
+    FWMEDDATATOOLS_API SeriesDB( ::fwMedData::SeriesDB::wptr seriesDB );
+
+    /// Destrucotr. Do nothing.
+    FWMEDDATATOOLS_API ~SeriesDB();
+
+    /**
+     * @brief Add a Series in the SeriesDB.
+     * @param[in] newSeries object to add in the SeriesDB
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWMEDDATATOOLS_API void add( ::fwMedData::Series::sptr newSeries );
+
+    /**
+     * @brief Remove a Series in the SeriesDB.
+     * @param[in] oldSeries object to remove from the SeriesDB.
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWMEDDATATOOLS_API void remove( ::fwMedData::Series::sptr oldSeries );
+
+    /**
+     * @brief Clear all series in the SeriesDB.
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWMEDDATATOOLS_API void clear();
+
+    /**
+     * @brief Merge seriesDBIn all series from seriesDBIn to the SeriesDB.
+     *
+     * Prepare the signal to announce the modification.
+     */
+    FWMEDDATATOOLS_API void merge(::fwMedData::SeriesDB::sptr seriesDBIn);
+
+    /// Send the signal of modification
+    FWMEDDATATOOLS_API void notify();
+
+private:
+
+    ::fwMedData::SeriesDB::ContainerType m_addedSeries;
+    ::fwMedData::SeriesDB::ContainerType m_removedSeries;
+    ::fwMedData::SeriesDB::wptr m_seriesDB;
+};
+
+} // namespace helper
+} // namespace fwMedDataTools
+
+#endif // __FWMEDDATATOOLS_HELPER_SERIESDB_HPP__
diff --git a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/namespace.hpp b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/namespace.hpp
index e913509..c96d517 100644
--- a/SrcLib/core/fwMedDataTools/include/fwMedDataTools/namespace.hpp
+++ b/SrcLib/core/fwMedDataTools/include/fwMedDataTools/namespace.hpp
@@ -1,9 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWMEDDATATOOLS_NAMESPACE_HPP__
+#define __FWMEDDATATOOLS_NAMESPACE_HPP__
+
 /**
  * @brief Contains utilities dedicated to fwMedData.
  */
@@ -11,4 +14,4 @@ namespace fwMedDataTools
 {
 } // namespace fwMedDataTools
 
-
+#endif //__FWMEDDATATOOLS_NAMESPACE_HPP__
diff --git a/SrcLib/core/fwMedDataTools/src/fwMedDataTools/ModelSeries.cpp b/SrcLib/core/fwMedDataTools/src/fwMedDataTools/ModelSeries.cpp
new file mode 100644
index 0000000..3bbe022
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/src/fwMedDataTools/ModelSeries.cpp
@@ -0,0 +1,79 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwMedDataTools/ModelSeries.hpp"
+
+#include <fwCom/Signal.hxx>
+#include <fwCore/spyLog.hpp>
+
+namespace fwMedDataTools
+{
+
+//------------------------------------------------------------------------------
+
+void ModelSeries::addMesh(::fwMedData::ModelSeries::sptr &_modelSeries, const ::fwData::Mesh::sptr& _mesh,
+                          const std::string& _organName, const std::string& _structureType,
+                          const ::fwData::Color::sptr& _colour, ::fwData::Material::RepresentationType _mode,
+                          bool _visible)
+{
+    //reconstruction creation
+    ::fwData::Reconstruction::sptr reconstructionQuadMesh =
+        createReconstructionFromMesh(_mesh, _organName, _structureType, _colour,_mode, _visible);
+
+    addReconstruction(_modelSeries, reconstructionQuadMesh);
+
+    auto sig = _modelSeries->signal< ::fwMedData::ModelSeries::ReconstructionsAddedSignalType>(
+        ::fwMedData::ModelSeries::s_RECONSTRUCTIONS_ADDED_SIG);
+
+    ::fwMedData::ModelSeries::ReconstructionVectorType reconstructionsVector;
+    reconstructionsVector.push_back(reconstructionQuadMesh);
+    sig->asyncEmit(reconstructionsVector);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Reconstruction::sptr ModelSeries::createReconstructionFromMesh( const ::fwData::Mesh::sptr& _mesh,
+                                                                          const std::string& _organName,
+                                                                          const std::string& _structureType,
+                                                                          const ::fwData::Color::sptr& _color,
+                                                                          ::fwData::Material::RepresentationType _mode,
+                                                                          bool _visible)
+{
+    ::fwData::Color::sptr diffuse = ::fwData::Color::New();
+    diffuse->setRGBA(_color->red(), _color->green(), _color->blue(), _color->alpha());
+    ::fwData::Material::sptr pMaterial = ::fwData::Material::New();
+    pMaterial->setDiffuse(diffuse);
+    pMaterial->setRepresentationMode(_mode);
+
+    ::fwData::Reconstruction::sptr reconstruction = ::fwData::Reconstruction::New();
+    reconstruction->setMesh(_mesh);
+    reconstruction->setIsVisible(_visible);
+    reconstruction->setOrganName(_organName);
+    reconstruction->setStructureType(_structureType);
+    reconstruction->setMaterial(pMaterial);
+
+    return reconstruction;
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeries::addReconstruction( ::fwMedData::ModelSeries::sptr& _modelSeries, ::fwData::Reconstruction::sptr& _rec)
+{
+    ::fwMedData::ModelSeries::ReconstructionVectorType recDB = _modelSeries->getReconstructionDB();
+
+    FW_RAISE_IF("Reconstruction is invalid.", _rec == nullptr);
+    FW_RAISE_IF("Reconstruction already exists in ModelSeries.",
+                std::find(recDB.begin(), recDB.end(), _rec) != recDB.end());
+
+    recDB.push_back(_rec);
+    _modelSeries->setReconstructionDB(recDB);
+}
+
+//------------------------------------------------------------------------------
+
+} // end namespace fwDataTools
+
+
diff --git a/SrcLib/core/fwMedDataTools/src/fwMedDataTools/functions.cpp b/SrcLib/core/fwMedDataTools/src/fwMedDataTools/functions.cpp
index ea6259f..3c729bc 100644
--- a/SrcLib/core/fwMedDataTools/src/fwMedDataTools/functions.cpp
+++ b/SrcLib/core/fwMedDataTools/src/fwMedDataTools/functions.cpp
@@ -1,17 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <string>
-#include <sstream>
+#include "fwMedDataTools/functions.hpp"
 
-#include <boost/date_time/posix_time/posix_time.hpp>
+// Skip this for now on Android, this allows us to get rid of GDCM
+#ifndef ANDROID
 
 #include <gdcmUIDGenerator.h>
 
-#include "fwMedDataTools/functions.hpp"
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+#include <sstream>
+#include <string>
 
 namespace fwMedDataTools
 {
@@ -27,7 +30,7 @@ std::string generateStudyInstanceUid()
 {
     using namespace ::boost::posix_time;
 
-    ptime now = microsec_clock::local_time();
+    ptime now         = microsec_clock::local_time();
     time_facet* facet = new time_facet("%f%S%M%H%d%m");
 
     std::stringstream ss;
@@ -39,3 +42,4 @@ std::string generateStudyInstanceUid()
 
 } // namespace fwMedDataTools
 
+#endif // ANDROID
diff --git a/SrcLib/core/fwMedDataTools/src/fwMedDataTools/helper/SeriesDB.cpp b/SrcLib/core/fwMedDataTools/src/fwMedDataTools/helper/SeriesDB.cpp
new file mode 100644
index 0000000..bab9756
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/src/fwMedDataTools/helper/SeriesDB.cpp
@@ -0,0 +1,114 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwMedDataTools/helper/SeriesDB.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Signals.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+namespace fwMedDataTools
+{
+namespace helper
+{
+
+//-----------------------------------------------------------------------------
+
+SeriesDB::SeriesDB( ::fwMedData::SeriesDB::wptr seriesDB ) :
+    m_seriesDB ( seriesDB )
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SeriesDB::~SeriesDB()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SeriesDB::add( ::fwMedData::Series::sptr newSeries )
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = m_seriesDB.lock();
+    OSLM_ASSERT( "The object " << newSeries->getID() << " must not exist in SeriesDB.",
+                 std::find(seriesDB->begin(), seriesDB->end(), newSeries) == seriesDB->end());
+
+    // Modify SeriesDB
+    seriesDB->getContainer().push_back( newSeries );
+
+    m_addedSeries.push_back(newSeries);
+
+}
+
+//-----------------------------------------------------------------------------
+
+void SeriesDB::remove( ::fwMedData::Series::sptr oldSeries )
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = m_seriesDB.lock();
+    ::fwMedData::SeriesDB::iterator iter = std::find(seriesDB->begin(), seriesDB->end(), oldSeries);
+    OSLM_ASSERT( "The object " << oldSeries->getID() << " must exist in SeriesDB.",
+                 iter != seriesDB->end());
+
+    // Modify SeriesDB
+    seriesDB->getContainer().erase( iter );
+
+    m_removedSeries.push_back( oldSeries );
+
+}
+
+//-----------------------------------------------------------------------------
+
+void SeriesDB::clear()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = m_seriesDB.lock();
+
+    while (!seriesDB->empty())
+    {
+        this->remove(seriesDB->front());
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SeriesDB::merge(::fwMedData::SeriesDB::sptr seriesDBIn)
+{
+    ::fwMedData::SeriesDB::ContainerType& vectIn = seriesDBIn->getContainer();
+    for(::fwMedData::Series::sptr series :  vectIn)
+    {
+        this->add(series);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SeriesDB::notify()
+{
+    if (!m_addedSeries.empty())
+    {
+        auto sig = m_seriesDB.lock()->signal< ::fwMedData::SeriesDB::AddedSeriesSignalType >(
+            ::fwMedData::SeriesDB::s_ADDED_SERIES_SIG);
+        sig->asyncEmit(m_addedSeries);
+
+    }
+
+    if (!m_removedSeries.empty())
+    {
+        auto sig = m_seriesDB.lock()->signal< ::fwMedData::SeriesDB::RemovedSeriesSignalType >(
+            ::fwMedData::SeriesDB::s_REMOVED_SERIES_SIG);
+        sig->asyncEmit(m_removedSeries);
+
+    }
+
+    OSLM_INFO_IF("No changes were found on the SeriesDB '" + m_seriesDB.lock()->getID() + "', nothing to notify.",
+                 m_addedSeries.empty() && m_removedSeries.empty());
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace helper
+} // namespace fwMedDataTools
diff --git a/SrcLib/core/fwMedDataTools/test/CMakeLists.txt b/SrcLib/core/fwMedDataTools/test/CMakeLists.txt
new file mode 100644
index 0000000..62df926
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/test/CMakeLists.txt
@@ -0,0 +1,6 @@
+fwLoadProperties()
+find_package(CppUnit)
+
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
+
diff --git a/SrcLib/core/fwMedDataTools/test/Properties.cmake b/SrcLib/core/fwMedDataTools/test/Properties.cmake
new file mode 100644
index 0000000..90c5e40
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/test/Properties.cmake
@@ -0,0 +1,6 @@
+set( NAME fwMedDataToolsTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES fwCore fwData fwMedData fwMedDataTools )
+set( REQUIREMENTS  )
+
diff --git a/SrcLib/core/fwMedDataTools/test/cppunit.options b/SrcLib/core/fwMedDataTools/test/cppunit.options
deleted file mode 100644
index e41f851..0000000
--- a/SrcLib/core/fwMedDataTools/test/cppunit.options
+++ /dev/null
@@ -1,9 +0,0 @@
-CLASSTEST = [
-        'FunctionsTest',
-]
-
-USE = ['cppunit']
-LIB = ['fwMedDataTools_0-1']
-
-CONSOLE = 'yes'
-
diff --git a/SrcLib/core/fwMedDataTools/test/tu/include/FunctionsTest.hpp b/SrcLib/core/fwMedDataTools/test/tu/include/FunctionsTest.hpp
index 9768ac8..db7092e 100644
--- a/SrcLib/core/fwMedDataTools/test/tu/include/FunctionsTest.hpp
+++ b/SrcLib/core/fwMedDataTools/test/tu/include/FunctionsTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
- * */
+ * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEDDATATOOLS_FUNCTIONSTEST_HPP__
-#define __FWMEDDATATOOLS_FUNCTIONSTEST_HPP__
+#ifndef __FWMEDDATATOOLS_UT_FUNCTIONSTEST_HPP__
+#define __FWMEDDATATOOLS_UT_FUNCTIONSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,10 +16,10 @@ namespace ut
 
 class FunctionsTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( FunctionsTest );
-    CPPUNIT_TEST(generatePatientIdTest);
-    CPPUNIT_TEST(generateStudyInstanceUidTest);
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( FunctionsTest );
+CPPUNIT_TEST(generatePatientIdTest);
+CPPUNIT_TEST(generateStudyInstanceUidTest);
+CPPUNIT_TEST_SUITE_END();
 
 public:
     /**
@@ -41,5 +41,5 @@ public:
 
 } // namespace fwMedDataTools
 
-#endif // __FWMEDDATATOOLS_FUNCTIONSTEST_HPP__
+#endif // __FWMEDDATATOOLS_UT_FUNCTIONSTEST_HPP__
 
diff --git a/SrcLib/core/fwMedDataTools/test/tu/include/ModelSeriesTest.hpp b/SrcLib/core/fwMedDataTools/test/tu/include/ModelSeriesTest.hpp
new file mode 100644
index 0000000..fc51018
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/test/tu/include/ModelSeriesTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMEDDATATOOLS_UT_MODELSERIESTEST_HPP__
+#define __FWMEDDATATOOLS_UT_MODELSERIESTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwMedDataTools
+{
+namespace ut
+{
+
+class ModelSeriesTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( ModelSeriesTest );
+CPPUNIT_TEST(addReconstruction);
+CPPUNIT_TEST(addMesh);
+CPPUNIT_TEST(createReconstructionFromMesh);
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    /**
+     * @name Override
+     * @{ */
+    void setUp();
+    void tearDown();
+    /**  @} */
+
+    void addReconstruction();
+    void createReconstructionFromMesh();
+    void addMesh();
+};
+
+} // namespace ut
+
+} // namespace fwMedDataTools
+
+#endif // __FWMEDDATATOOLS_UT_MODELSERIESTEST_HPP__
diff --git a/SrcLib/core/fwMedDataTools/test/tu/src/FunctionsTest.cpp b/SrcLib/core/fwMedDataTools/test/tu/src/FunctionsTest.cpp
index 02a331a..ffa9bf1 100644
--- a/SrcLib/core/fwMedDataTools/test/tu/src/FunctionsTest.cpp
+++ b/SrcLib/core/fwMedDataTools/test/tu/src/FunctionsTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwMedDataTools/test/tu/src/ModelSeriesTest.cpp b/SrcLib/core/fwMedDataTools/test/tu/src/ModelSeriesTest.cpp
new file mode 100644
index 0000000..d9f8b3a
--- /dev/null
+++ b/SrcLib/core/fwMedDataTools/test/tu/src/ModelSeriesTest.cpp
@@ -0,0 +1,180 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2014-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ModelSeriesTest.hpp"
+
+#include <fwData/Color.hpp>
+#include <fwData/Material.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedDataTools/ModelSeries.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMedDataTools::ut::ModelSeriesTest );
+
+namespace fwMedDataTools
+{
+
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void ModelSeriesTest::setUp()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeriesTest::tearDown()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeriesTest::addReconstruction()
+{
+    ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::New();
+    ::fwData::Reconstruction::sptr rec1        = ::fwData::Reconstruction::New();
+
+    ::fwMedDataTools::ModelSeries::addReconstruction(modelSeries, rec1);
+
+    const ::fwMedData::ModelSeries::ReconstructionVectorType& recDB = modelSeries->getReconstructionDB();
+    CPPUNIT_ASSERT_EQUAL(rec1, recDB[0]);
+
+    ::fwData::Reconstruction::sptr rec2 = ::fwData::Reconstruction::New();
+
+    ::fwMedDataTools::ModelSeries::addReconstruction(modelSeries, rec2);
+
+    CPPUNIT_ASSERT_EQUAL(rec1, recDB[0]);
+    CPPUNIT_ASSERT_EQUAL(rec2, recDB[1]);
+
+    ::fwData::Reconstruction::sptr rec3 = ::fwData::Reconstruction::New();
+    ::fwMedDataTools::ModelSeries::addReconstruction(modelSeries, rec3);
+
+    CPPUNIT_ASSERT_EQUAL(rec1, recDB[0]);
+    CPPUNIT_ASSERT_EQUAL(rec2, recDB[1]);
+    CPPUNIT_ASSERT_EQUAL(rec3, recDB[2]);
+
+    CPPUNIT_ASSERT_THROW(::fwMedDataTools::ModelSeries::addReconstruction(modelSeries, rec1), ::fwCore::Exception);
+
+    ::fwData::Reconstruction::sptr nullRec;
+    CPPUNIT_ASSERT_THROW(::fwMedDataTools::ModelSeries::addReconstruction(modelSeries, nullRec), ::fwCore::Exception);
+
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeriesTest::createReconstructionFromMesh()
+{
+    ::fwData::Mesh::sptr mesh   = ::fwData::Mesh::New();
+    ::fwData::Color::sptr color = ::fwData::Color::New(1.0f, 0.3f, 0.7f, 0.5f);
+
+    {
+        const std::string organName     = "Liver1";
+        const std::string structureType = "Liver";
+
+        auto rec = ::fwMedDataTools::ModelSeries::createReconstructionFromMesh( mesh, organName, structureType, color,
+                                                                                ::fwData::Material::SURFACE);
+
+        CPPUNIT_ASSERT_EQUAL(rec->getMesh(), mesh);
+        CPPUNIT_ASSERT_EQUAL(rec->getOrganName(), organName);
+        CPPUNIT_ASSERT_EQUAL(rec->getStructureType(), structureType);
+        CPPUNIT_ASSERT_EQUAL(rec->getIsVisible(), true);
+        CPPUNIT_ASSERT_EQUAL(rec->getMaterial()->getRepresentationMode(),  ::fwData::Material::SURFACE);
+
+        auto ambient = rec->getMaterial()->diffuse();
+        CPPUNIT_ASSERT_EQUAL(ambient->red(), 1.0f);
+        CPPUNIT_ASSERT_EQUAL(ambient->green(), 0.3f);
+        CPPUNIT_ASSERT_EQUAL(ambient->blue(), 0.7f);
+        CPPUNIT_ASSERT_EQUAL(ambient->alpha(), 0.5f);
+    }
+
+    {
+        const std::string organName     = "Foo";
+        const std::string structureType = "Foofoo";
+
+        auto rec = ::fwMedDataTools::ModelSeries::createReconstructionFromMesh( mesh, organName, structureType, color,
+                                                                                ::fwData::Material::WIREFRAME,
+                                                                                false);
+
+        CPPUNIT_ASSERT_EQUAL(rec->getMesh(), mesh);
+        CPPUNIT_ASSERT_EQUAL(rec->getOrganName(), organName);
+        CPPUNIT_ASSERT_EQUAL(rec->getStructureType(), structureType);
+        CPPUNIT_ASSERT_EQUAL(rec->getIsVisible(), false);
+        CPPUNIT_ASSERT_EQUAL(rec->getMaterial()->getRepresentationMode(),  ::fwData::Material::WIREFRAME);
+
+        auto ambient = rec->getMaterial()->diffuse();
+        CPPUNIT_ASSERT_EQUAL(ambient->red(), 1.0f);
+        CPPUNIT_ASSERT_EQUAL(ambient->green(), 0.3f);
+        CPPUNIT_ASSERT_EQUAL(ambient->blue(), 0.7f);
+        CPPUNIT_ASSERT_EQUAL(ambient->alpha(), 0.5f);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void ModelSeriesTest::addMesh()
+{
+    ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::New();
+    const ::fwMedData::ModelSeries::ReconstructionVectorType& recDB = modelSeries->getReconstructionDB();
+
+    {
+        ::fwData::Mesh::sptr mesh   = ::fwData::Mesh::New();
+        ::fwData::Color::sptr color = ::fwData::Color::New(1.0f, 0.3f, 0.7f, 0.5f);
+        const std::string organName     = "Liver1";
+        const std::string structureType = "Liver";
+
+        ::fwMedDataTools::ModelSeries::addMesh( modelSeries, mesh, organName, structureType, color,
+                                                ::fwData::Material::SURFACE);
+
+        auto rec = recDB[0];
+
+        CPPUNIT_ASSERT_EQUAL(rec->getMesh(), mesh);
+        CPPUNIT_ASSERT_EQUAL(rec->getOrganName(), organName);
+        CPPUNIT_ASSERT_EQUAL(rec->getStructureType(), structureType);
+        CPPUNIT_ASSERT_EQUAL(rec->getIsVisible(), true);
+        CPPUNIT_ASSERT_EQUAL(rec->getMaterial()->getRepresentationMode(),  ::fwData::Material::SURFACE);
+
+        auto ambient = rec->getMaterial()->diffuse();
+        CPPUNIT_ASSERT_EQUAL(ambient->red(), 1.0f);
+        CPPUNIT_ASSERT_EQUAL(ambient->green(), 0.3f);
+        CPPUNIT_ASSERT_EQUAL(ambient->blue(), 0.7f);
+        CPPUNIT_ASSERT_EQUAL(ambient->alpha(), 0.5f);
+
+    }
+
+    {
+        ::fwData::Mesh::sptr mesh   = ::fwData::Mesh::New();
+        ::fwData::Color::sptr color = ::fwData::Color::New(0.1f, 0.3f, 0.7f, 1.5f);
+        const std::string organName     = "Foo";
+        const std::string structureType = "Foofoo";
+
+        ::fwMedDataTools::ModelSeries::addMesh( modelSeries, mesh, organName, structureType, color,
+                                                ::fwData::Material::WIREFRAME,
+                                                false);
+        auto rec = recDB[1];
+
+        CPPUNIT_ASSERT_EQUAL(rec->getMesh(), mesh);
+        CPPUNIT_ASSERT_EQUAL(rec->getOrganName(), organName);
+        CPPUNIT_ASSERT_EQUAL(rec->getStructureType(), structureType);
+        CPPUNIT_ASSERT_EQUAL(rec->getIsVisible(), false);
+        CPPUNIT_ASSERT_EQUAL(rec->getMaterial()->getRepresentationMode(),  ::fwData::Material::WIREFRAME);
+
+        auto ambient = rec->getMaterial()->diffuse();
+        CPPUNIT_ASSERT_EQUAL(ambient->red(), 0.1f);
+        CPPUNIT_ASSERT_EQUAL(ambient->green(), 0.3f);
+        CPPUNIT_ASSERT_EQUAL(ambient->blue(), 0.7f);
+        CPPUNIT_ASSERT_EQUAL(ambient->alpha(), 1.5f);
+    }
+}
+
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+
+} // namespace fwMedDataTools
diff --git a/SrcLib/core/fwMemory/CMakeLists.txt b/SrcLib/core/fwMemory/CMakeLists.txt
index dcc62e3..de5fc97 100644
--- a/SrcLib/core/fwMemory/CMakeLists.txt
+++ b/SrcLib/core/fwMemory/CMakeLists.txt
@@ -1,16 +1,10 @@
-
 fwLoadProperties()
-fwUseForwardInclude(fwCore fwCamp fwTools fwCom)
-
-find_package (Boost COMPONENTS system regex filesystem signals iostreams REQUIRED)
-find_package (CAMP)
 
-fwForwardInclude(${Boost_INCLUDE_DIRS})
+find_package (Boost COMPONENTS regex signals iostreams REQUIRED)
 
-fwLink(${Boost_LIBRARIES} ${CAMP_LIBRARIES})
+fwLink(${Boost_LIBRARIES})
 
 if(CMAKE_SYSTEM_NAME MATCHES "Windows")
     #TODO write FindPsAPI ...
-    target_link_libraries(${FWPROJECT_NAME} psapi)
+    target_link_libraries(${FWPROJECT_NAME} PRIVATE psapi)
 endif()
-
diff --git a/SrcLib/core/fwMemory/COPYING b/SrcLib/core/fwMemory/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwMemory/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwMemory/COPYING.LESSER b/SrcLib/core/fwMemory/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwMemory/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwMemory/Properties.cmake b/SrcLib/core/fwMemory/Properties.cmake
index 1358bce..e061bb0 100644
--- a/SrcLib/core/fwMemory/Properties.cmake
+++ b/SrcLib/core/fwMemory/Properties.cmake
@@ -2,6 +2,5 @@
 set( NAME fwMemory )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwCamp fwTools fwCom fwThread )
+set( DEPENDENCIES fwCamp fwCom fwTools )
 set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwMemory/bin/build.options b/SrcLib/core/fwMemory/bin/build.options
deleted file mode 100644
index b1e4bae..0000000
--- a/SrcLib/core/fwMemory/bin/build.options
+++ /dev/null
@@ -1,22 +0,0 @@
-TYPE    = 'shared'
-USE     = [
-          'boost',
-          'boostFilesystem',
-          'boostRegex',
-          'boostSignals',
-          'boostIostreams',
-          ]
-
-LIB     = [
-          'fwCore_0-1',
-          'fwCamp_0-1',
-          'fwTools_0-1',
-          'fwCom_0-1',
-          'fwThread_0-1',
-          ]
-VERSION = '0-1'
-
-import os;
-
-if os.name == 'nt':
-    STDLIB  += ['psapi']
diff --git a/SrcLib/core/fwMemory/include/fwMemory/BufferAllocationPolicy.hpp b/SrcLib/core/fwMemory/include/fwMemory/BufferAllocationPolicy.hpp
index dba0354..41d4c36 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/BufferAllocationPolicy.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/BufferAllocationPolicy.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_BUFFERALLOCATIONPOLICY_HPP_
-#define _FWMEMORY_BUFFERALLOCATIONPOLICY_HPP_
+#ifndef __FWMEMORY_BUFFERALLOCATIONPOLICY_HPP__
+#define __FWMEMORY_BUFFERALLOCATIONPOLICY_HPP__
 
 #include <fwCore/base.hpp>
 
@@ -18,23 +18,27 @@ namespace fwMemory
 class FWMEMORY_CLASS_API BufferAllocationPolicy
 {
 public:
-    typedef SPTR(BufferAllocationPolicy) sptr;
+    typedef SPTR (BufferAllocationPolicy) sptr;
     typedef size_t SizeType;
     typedef void* BufferType;
 
-    FWMEMORY_API virtual void allocate(BufferType &buffer, SizeType size) throw( ::fwMemory::exception::Memory ) = 0;
+    FWMEMORY_API virtual void allocate(BufferType &buffer, SizeType size) throw( ::fwMemory::exception::Memory )   = 0;
     FWMEMORY_API virtual void reallocate(BufferType &buffer, SizeType size) throw( ::fwMemory::exception::Memory ) = 0;
-    FWMEMORY_API virtual void destroy(BufferType &buffer) = 0;
+    FWMEMORY_API virtual void destroy(BufferType &buffer)                                                          = 0;
 
-    FWMEMORY_API virtual ~BufferAllocationPolicy(){};
+    FWMEMORY_API virtual ~BufferAllocationPolicy()
+    {
+    }
 };
 
 
 class FWMEMORY_CLASS_API BufferMallocPolicy : public BufferAllocationPolicy
 {
 public:
-    FWMEMORY_API void allocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
-    FWMEMORY_API void reallocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
+    FWMEMORY_API void allocate(BufferType &buffer,
+                               BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
+    FWMEMORY_API void reallocate(BufferType &buffer,
+                                 BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
     FWMEMORY_API void destroy(BufferType &buffer);
 
     FWMEMORY_API static BufferAllocationPolicy::sptr New();
@@ -44,8 +48,10 @@ public:
 class FWMEMORY_CLASS_API BufferNewPolicy : public BufferAllocationPolicy
 {
 public:
-    FWMEMORY_API void allocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
-    FWMEMORY_API void reallocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
+    FWMEMORY_API void allocate(BufferType &buffer,
+                               BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
+    FWMEMORY_API void reallocate(BufferType &buffer,
+                                 BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
     FWMEMORY_API void destroy(BufferType &buffer);
 
     FWMEMORY_API static BufferAllocationPolicy::sptr New();
@@ -54,8 +60,10 @@ public:
 class FWMEMORY_CLASS_API BufferNoAllocPolicy : public BufferAllocationPolicy
 {
 public:
-    FWMEMORY_API void allocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
-    FWMEMORY_API void reallocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
+    FWMEMORY_API void allocate(BufferType &buffer,
+                               BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
+    FWMEMORY_API void reallocate(BufferType &buffer,
+                                 BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory );
     FWMEMORY_API void destroy(BufferType &buffer);
 
     FWMEMORY_API static BufferAllocationPolicy::sptr New();
@@ -64,4 +72,4 @@ public:
 
 }
 
-#endif /* _FWMEMORY_BUFFERALLOCATIONPOLICY_HPP_ */
+#endif /* __FWMEMORY_BUFFERALLOCATIONPOLICY_HPP__ */
diff --git a/SrcLib/core/fwMemory/include/fwMemory/BufferInfo.hpp b/SrcLib/core/fwMemory/include/fwMemory/BufferInfo.hpp
index b0f8d3e..05c6699 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/BufferInfo.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/BufferInfo.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,19 +28,22 @@ struct FWMEMORY_CLASS_API BufferInfo
 {
 
     typedef size_t SizeType;
-    typedef WPTR( void ) CounterType;
+    typedef WPTR ( void ) CounterType;
 
     FWMEMORY_API BufferInfo();
 
     FWMEMORY_API void clear();
-    long lockCount() const {return lockCounter.use_count();};
+    long lockCount() const
+    {
+        return lockCounter.use_count();
+    }
 
 
 
     SizeType size;
     /// true if 'buffer' is loaded
-    bool     loaded;
-    bool     userStreamFactory;
+    bool loaded;
+    bool userStreamFactory;
 
     FileHolder fsFile;
     FileFormatType fileFormat;
diff --git a/SrcLib/core/fwMemory/include/fwMemory/BufferManager.hpp b/SrcLib/core/fwMemory/include/fwMemory/BufferManager.hpp
index a1eafcf..4d17e27 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/BufferManager.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/BufferManager.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,7 +22,7 @@
 
 namespace fwThread
 {
-    class Worker;
+class Worker;
 }
 
 namespace fwMemory
@@ -30,18 +30,23 @@ namespace fwMemory
 
 class IPolicy;
 
-namespace stream {
-namespace in {
-class IFactory ;
-}}
+namespace stream
+{
+namespace in
+{
+class IFactory;
+}
+}
 
 class BufferManager;
 
 class Key
 {
-    friend SPTR(BufferManager) getDefault();
+friend SPTR(BufferManager) getDefault();
 
-    Key(){};
+Key()
+{
+}
 };
 
 /**
@@ -74,7 +79,8 @@ public:
     BufferManager();
     virtual ~BufferManager();
 
-    typedef enum {
+    typedef enum
+    {
         DIRECT,
         LAZY
     } LoadingModeType;
@@ -120,7 +126,7 @@ public:
      * @param policy BufferObject's allocation policy
      */
     FWMEMORY_API virtual ::boost::shared_future<void> allocateBuffer(BufferPtrType bufferPtr, SizeType size,
-                                             const ::fwMemory::BufferAllocationPolicy::sptr &policy) ;
+                                                                     const ::fwMemory::BufferAllocationPolicy::sptr &policy);
 
     /**
      * @brief Hook called when a request is made to set BufferObject's buffer from an external buffer
@@ -131,8 +137,9 @@ public:
      * @param policy BufferObject's allocation policy
      */
     FWMEMORY_API virtual ::boost::shared_future<void> setBuffer(BufferPtrType bufferPtr,
-                                        ::fwMemory::BufferManager::BufferType buffer,
-                                        SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr &policy) ;
+                                                                ::fwMemory::BufferManager::BufferType buffer,
+                                                                SizeType size,
+                                                                const ::fwMemory::BufferAllocationPolicy::sptr &policy);
 
     /**
      * @brief Hook called when a reallocation is requested from a BufferObject
@@ -140,7 +147,7 @@ public:
      * @param bufferPtr BufferObject's buffer pointer
      * @param newSize requested size for reallocation
      */
-    FWMEMORY_API virtual ::boost::shared_future<void> reallocateBuffer(BufferPtrType bufferPtr, SizeType newSize) ;
+    FWMEMORY_API virtual ::boost::shared_future<void> reallocateBuffer(BufferPtrType bufferPtr, SizeType newSize);
 
 
     /**
@@ -148,7 +155,7 @@ public:
      *
      * @param bufferPtr BufferObject's buffer pointer
      */
-    FWMEMORY_API virtual ::boost::shared_future<void> destroyBuffer(BufferPtrType bufferPtr) ;
+    FWMEMORY_API virtual ::boost::shared_future<void> destroyBuffer(BufferPtrType bufferPtr);
 
 
     /**
@@ -157,7 +164,7 @@ public:
      * @param bufA First BufferObject's buffer
      * @param bufB Second BufferObject's buffer
      */
-    FWMEMORY_API virtual ::boost::shared_future<void> swapBuffer(BufferPtrType bufA, BufferPtrType bufB) ;
+    FWMEMORY_API virtual ::boost::shared_future<void> swapBuffer(BufferPtrType bufA, BufferPtrType bufB);
 
 
     /**
@@ -167,7 +174,7 @@ public:
      *
      * @return false if the BufferManager supported the action
      */
-    FWMEMORY_API virtual ::boost::shared_future<SPTR(void)> lockBuffer(ConstBufferPtrType bufferPtr) ;
+    FWMEMORY_API virtual ::boost::shared_future<SPTR(void)> lockBuffer(ConstBufferPtrType bufferPtr);
 
 
     /**
@@ -177,7 +184,7 @@ public:
      *
      * @return false if the BufferManager supported the action
      */
-    FWMEMORY_API virtual ::boost::shared_future<bool> unlockBuffer(ConstBufferPtrType bufferPtr) ;
+    FWMEMORY_API virtual ::boost::shared_future<bool> unlockBuffer(ConstBufferPtrType bufferPtr);
 
 
     /**
@@ -195,8 +202,8 @@ public:
      *
      * @return true on success
      * @{ */
-    FWMEMORY_API ::boost::shared_future<bool> dumpBuffer(ConstBufferPtrType  bufferPtr);
-    FWMEMORY_API ::boost::shared_future<bool> restoreBuffer(ConstBufferPtrType  bufferPtr);
+    FWMEMORY_API ::boost::shared_future<bool> dumpBuffer(ConstBufferPtrType bufferPtr);
+    FWMEMORY_API ::boost::shared_future<bool> restoreBuffer(ConstBufferPtrType bufferPtr);
     /**  @} */
 
     /**
@@ -210,8 +217,10 @@ public:
      *
      * @return true on success
      * @{ */
-    FWMEMORY_API ::boost::shared_future<bool> writeBuffer(ConstBufferType buffer, SizeType size, ::boost::filesystem::path &path);
-    FWMEMORY_API ::boost::shared_future<bool> readBuffer(BufferType buffer, SizeType size, ::boost::filesystem::path &path);
+    FWMEMORY_API ::boost::shared_future<bool> writeBuffer(ConstBufferType buffer, SizeType size,
+                                                          ::boost::filesystem::path &path);
+    FWMEMORY_API ::boost::shared_future<bool> readBuffer(BufferType buffer, SizeType size,
+                                                         ::boost::filesystem::path &path);
     /**  @} */
 
 
@@ -220,7 +229,9 @@ public:
      *
      * @return
      */
-    SPTR(UpdatedSignalType) getUpdatedSignal(){return m_updatedSig;};
+    SPTR(UpdatedSignalType) getUpdatedSignal(){
+        return m_updatedSig;
+    };
 
 
     /**
@@ -257,7 +268,7 @@ public:
                                                                 ::fwMemory::FileHolder fsFile,
                                                                 ::fwMemory::FileFormatType format,
                                                                 const ::fwMemory::BufferAllocationPolicy::sptr &policy
-                                                               );
+                                                                );
 
     FWMEMORY_API LoadingModeType getLoadingMode() const;
     FWMEMORY_API void setLoadingMode(LoadingModeType mode);
@@ -280,26 +291,28 @@ protected:
      * @{ */
     virtual void registerBufferImpl(BufferPtrType bufferPtr);
     virtual void unregisterBufferImpl(BufferPtrType bufferPtr);
-    virtual void allocateBufferImpl(BufferPtrType bufferPtr, SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr &policy) ;
-    virtual void setBufferImpl(BufferPtrType bufferPtr, ::fwMemory::BufferManager::BufferType buffer, SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr &policy) ;
-    virtual void reallocateBufferImpl(BufferPtrType bufferPtr, SizeType newSize) ;
-    virtual void destroyBufferImpl(BufferPtrType bufferPtr) ;
-    virtual void swapBufferImpl(BufferPtrType bufA, BufferPtrType bufB) ;
-    virtual SPTR(void) lockBufferImpl(ConstBufferPtrType bufferPtr) ;
-    virtual bool unlockBufferImpl(ConstBufferPtrType bufferPtr) ;
+    virtual void allocateBufferImpl(BufferPtrType bufferPtr, SizeType size,
+                                    const ::fwMemory::BufferAllocationPolicy::sptr &policy);
+    virtual void setBufferImpl(BufferPtrType bufferPtr, ::fwMemory::BufferManager::BufferType buffer, SizeType size,
+                               const ::fwMemory::BufferAllocationPolicy::sptr &policy);
+    virtual void reallocateBufferImpl(BufferPtrType bufferPtr, SizeType newSize);
+    virtual void destroyBufferImpl(BufferPtrType bufferPtr);
+    virtual void swapBufferImpl(BufferPtrType bufA, BufferPtrType bufB);
+    virtual SPTR(void) lockBufferImpl(ConstBufferPtrType bufferPtr);
+    virtual bool unlockBufferImpl(ConstBufferPtrType bufferPtr);
     virtual std::string toStringImpl() const;
-    bool dumpBufferImpl(ConstBufferPtrType  buffer);
-    bool restoreBufferImpl(ConstBufferPtrType  buffer);
+    bool dumpBufferImpl(ConstBufferPtrType buffer);
+    bool restoreBufferImpl(ConstBufferPtrType buffer);
     bool writeBufferImpl(ConstBufferType buffer, SizeType size, ::boost::filesystem::path &path);
     bool readBufferImpl(BufferType buffer, SizeType size, ::boost::filesystem::path &path);
     BufferInfoMapType getBufferInfosImpl() const;
     StreamInfo getStreamInfoImpl(const ConstBufferPtrType bufferPtr) const;
     void setIStreamFactoryImpl(BufferPtrType bufferPtr,
-                                const SPTR(::fwMemory::stream::in::IFactory) &factory,
-                                SizeType size,
-                                ::fwMemory::FileHolder fsFile,
-                                ::fwMemory::FileFormatType format,
-                                const ::fwMemory::BufferAllocationPolicy::sptr &policy
+                               const SPTR(::fwMemory::stream::in::IFactory) &factory,
+                               SizeType size,
+                               ::fwMemory::FileHolder fsFile,
+                               ::fwMemory::FileFormatType format,
+                               const ::fwMemory::BufferAllocationPolicy::sptr &policy
                                );
     /**  @} */
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp b/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp
index 69ea64b..ec86ee8 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/BufferObject.hpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_BUFFEROBJECT_HPP_
-#define _FWMEMORY_BUFFEROBJECT_HPP_
+#ifndef __FWMEMORY_BUFFEROBJECT_HPP__
+#define __FWMEMORY_BUFFEROBJECT_HPP__
 
 #include <istream>
 
 #include <boost/type_traits/conditional.hpp>
 #include <boost/type_traits/is_const.hpp>
-#include <boost/shared_ptr.hpp>
 #include <boost/filesystem/path.hpp>
 
 #include <fwCore/mt/types.hpp>
@@ -27,15 +26,18 @@ fwCampAutoDeclareMacro((fwMemory)(BufferObject), FWMEMORY_API);
 namespace fwMemory
 {
 
-namespace stream {
-namespace in {
-class IFactory ;
-}}
+namespace stream
+{
+namespace in
+{
+class IFactory;
+}
+}
 
 /**
  * @brief   Define Base class for FW4SPL buffers
  * @class   BufferObject
- * 
+ *
  * @date    2007-2009.
  *
  * Keep a pointer to a buffer and it's allocation policy (new malloc) without
@@ -58,8 +60,8 @@ class FWMEMORY_CLASS_API BufferObject : public ::fwCore::BaseObject
 
 public:
 
-    typedef ::boost::shared_ptr< void > CounterType;
-    typedef ::boost::weak_ptr< void > WeakCounterType;
+    typedef std::shared_ptr< void > CounterType;
+    typedef std::weak_ptr< void > WeakCounterType;
 
     typedef size_t SizeType;
 
@@ -67,9 +69,15 @@ public:
     fwCoreAllowSharedFromThis();
 
     /// return the sub class classname : an alias of this->getClassname
-    std::string className() const { return this->getClassname(); };
+    std::string className() const
+    {
+        return this->getClassname();
+    }
 
-    virtual ::fwMemory::BufferManager::BufferType getBuffer() { return m_buffer;};
+    virtual ::fwMemory::BufferManager::BufferType getBuffer()
+    {
+        return m_buffer;
+    }
 
     /**
      * @brief base class for BufferObject Lock
@@ -109,9 +117,9 @@ public:
 
             ::fwCore::mt::ScopedLock lock(bo->m_lockDumpMutex);
             m_count = bo->m_count.lock();
-            if ( ! m_count )
+            if ( !m_count )
             {
-                m_count = bo->m_bufferManager->lockBuffer(&(bo->m_buffer)).get();
+                m_count     = bo->m_bufferManager->lockBuffer(&(bo->m_buffer)).get();
                 bo->m_count = m_count;
             }
 
@@ -125,7 +133,7 @@ public:
             SPTR(T) bufferObject = m_bufferObject.lock();
             BufferType buffer = bufferObject->m_buffer;
             return buffer;
-        };
+        }
 
         /**
          * @brief Release any count on any Buffer the lock may have.
@@ -179,7 +187,8 @@ public:
      *
      */
     FWMEMORY_API virtual void allocate(SizeType size,
-            const ::fwMemory::BufferAllocationPolicy::sptr &policy = ::fwMemory::BufferMallocPolicy::New());
+                                       const ::fwMemory::BufferAllocationPolicy::sptr &policy =
+                                           ::fwMemory::BufferMallocPolicy::New());
 
     /**
      * @brief Buffer reallocation
@@ -214,7 +223,8 @@ public:
      *
      */
     FWMEMORY_API virtual void setBuffer(::fwMemory::BufferManager::BufferType buffer, SizeType size,
-            const ::fwMemory::BufferAllocationPolicy::sptr &policy = ::fwMemory::BufferMallocPolicy::New());
+                                        const ::fwMemory::BufferAllocationPolicy::sptr &policy =
+                                            ::fwMemory::BufferMallocPolicy::New());
 
 
     /**
@@ -234,29 +244,46 @@ public:
     /**
      * @brief Returns the buffer's size
      */
-    SizeType getSize() const { return m_size; };
+    SizeType getSize() const
+    {
+        return m_size;
+    }
 
     /**
      * @brief Returns true if the buffer is empty
      */
-    bool isEmpty() const { return m_size == 0; };
+    bool isEmpty() const
+    {
+        return m_size == 0;
+    }
 
     /**
      * @brief Returns the number of locks on the BufferObject
      */
-    long lockCount() const { return m_count.use_count(); };
+    long lockCount() const
+    {
+        return m_count.use_count();
+    }
 
     /**
      * @brief Returns true if the buffer has any lock
      */
-    long isLocked() const { return lockCount() != 0; };
+    long isLocked() const
+    {
+        return lockCount() != 0;
+    }
 
     /**
      * @brief Returns pointer on BufferObject's buffer
      */
-    const ::fwMemory::BufferManager::ConstBufferPtrType getBufferPointer() const {return &m_buffer;};
+    const ::fwMemory::BufferManager::ConstBufferPtrType getBufferPointer() const
+    {
+        return &m_buffer;
+    }
 
-    ::fwCore::mt::ReadWriteMutex &getMutex() { return m_mutex; }
+    ::fwCore::mt::ReadWriteMutex &getMutex() {
+        return m_mutex;
+    }
 
     /// Exchanges the content of the BufferObject with the content of _source.
     FWMEMORY_API void swap( const BufferObject::sptr &_source );
@@ -274,14 +301,14 @@ public:
      * @param policy Buffer allocation policy
      */
     FWMEMORY_API void setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory) &factory,
-                           SizeType size,
-                           const ::boost::filesystem::path &sourceFile = "",
-                           ::fwMemory::FileFormatType format = ::fwMemory::OTHER,
-                           const ::fwMemory::BufferAllocationPolicy::sptr &policy = ::fwMemory::BufferMallocPolicy::New()
-                          );
+                                        SizeType size,
+                                        const ::boost::filesystem::path &sourceFile = "",
+                                        ::fwMemory::FileFormatType format = ::fwMemory::OTHER,
+                                        const ::fwMemory::BufferAllocationPolicy::sptr &policy = ::fwMemory::BufferMallocPolicy::New()
+                                        );
 
 
-protected :
+protected:
 
     ::fwMemory::BufferManager::BufferType m_buffer;
 
@@ -299,4 +326,4 @@ protected :
 }
 
 
-#endif // _FWMEMORY_BUFFEROBJECT_HPP_
+#endif // __FWMEMORY_BUFFEROBJECT_HPP__
diff --git a/SrcLib/core/fwMemory/include/fwMemory/ByteSize.hpp b/SrcLib/core/fwMemory/include/fwMemory/ByteSize.hpp
index 7e8b930..285b152 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/ByteSize.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/ByteSize.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_BYTESIZE_HPP_
-#define _FWMEMORY_BYTESIZE_HPP_
+#ifndef __FWMEMORY_BYTESIZE_HPP__
+#define __FWMEMORY_BYTESIZE_HPP__
 
 #include <string>
 
@@ -27,9 +27,10 @@ class FWMEMORY_CLASS_API ByteSize
 {
 public:
 
-    typedef enum {
+    typedef enum
+    {
         SI, IEC
-    } StandardType ;
+    } StandardType;
 
     FWMEMORY_API static const boost::uint64_t Bytes;
 
@@ -101,7 +102,10 @@ public:
     /**
      * @brief Returns size in bytes.
      */
-    SizeType getSize(){ return m_size; }
+    SizeType getSize()
+    {
+        return m_size;
+    }
 
     /**
      * @brief Build a ByteSize object from given size and unit
@@ -133,8 +137,12 @@ public:
         return this->operator=( SizeType(size) );
     }
 
-    operator SizeType () { return m_size; }
-    operator std::string () { return getHumanReadableSize(); }
+    operator SizeType () {
+        return m_size;
+    }
+    operator std::string () {
+        return getHumanReadableSize();
+    }
 
     FWMEMORY_API static bool parseSize(const std::string &s, boost::uint64_t& size);
     FWMEMORY_API static std::string unitToString( UnitType unit );
@@ -147,4 +155,4 @@ protected:
 
 } //namespace fwMemory
 
-#endif /* _FWMEMORY_BYTESIZE_HPP_ */
+#endif /* __FWMEMORY_BYTESIZE_HPP__ */
diff --git a/SrcLib/core/fwMemory/include/fwMemory/FileFormat.hpp b/SrcLib/core/fwMemory/include/fwMemory/FileFormat.hpp
index a1baa7f..214a07e 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/FileFormat.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/FileFormat.hpp
@@ -1,16 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEMORY_FILEFORMATS_HPP__
-#define __FWMEMORY_FILEFORMATS_HPP__
+#ifndef __FWMEMORY_FILEFORMAT_HPP__
+#define __FWMEMORY_FILEFORMAT_HPP__
 
 namespace fwMemory
 {
 
-typedef enum {
+typedef enum
+{
     OTHER = 0,
     RAW   = 1,
     RAWZ  = 1 << 2
@@ -18,5 +19,5 @@ typedef enum {
 
 } // namespace fwMemory
 
-#endif // __FWMEMORY_FILEFORMATS_HPP__
+#endif // __FWMEMORY_FILEFORMAT_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/FileHolder.hpp b/SrcLib/core/fwMemory/include/fwMemory/FileHolder.hpp
index 3e349db..009b3dc 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/FileHolder.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/FileHolder.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,10 +21,12 @@ struct FileAutoDelete;
 class FWMEMORY_CLASS_API FileHolder
 {
 public:
-    FileHolder(){};
+    FileHolder()
+    {
+    }
     FWMEMORY_API FileHolder(const ::boost::filesystem::path &file, bool autodelete = false);
 
-    operator ::boost::filesystem::path () const
+    operator :: boost::filesystem::path () const
     {
         return m_path;
     }
diff --git a/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp b/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp
index f22a1f7..2f2fb52 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/IPolicy.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMEMORY_IPOLICY_HPP_
-#define FWMEMORY_IPOLICY_HPP_
+#ifndef __FWMEMORY_IPOLICY_HPP__
+#define __FWMEMORY_IPOLICY_HPP__
 
-#include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
 
 #include <fwCore/base.hpp>
@@ -25,33 +24,35 @@ namespace fwMemory
  */
 class FWMEMORY_CLASS_API IPolicy : public fwCore::BaseObject
 {
-public :
+public:
 
-    typedef SPTR(IPolicy) sptr;
+    typedef SPTR (IPolicy) sptr;
     typedef std::vector<std::string> ParamNamesType;
 
     virtual void allocationRequest(BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) = 0 ;
+                                   ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                   BufferInfo::SizeType size ) = 0;
 
     virtual void setRequest(BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer,  BufferInfo::SizeType size ) = 0 ;
+                            ::fwMemory::BufferManager::ConstBufferPtrType buffer,  BufferInfo::SizeType size ) = 0;
 
     virtual void reallocateRequest(BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType newSize ) = 0 ;
+                                   ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                   BufferInfo::SizeType newSize ) = 0;
 
-    virtual void destroyRequest(BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0 ;
+    virtual void destroyRequest(BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0;
 
-    virtual void lockRequest(BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0 ;
-    virtual void unlockRequest(BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0 ;
+    virtual void lockRequest(BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer )   = 0;
+    virtual void unlockRequest(BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0;
 
-    virtual void dumpSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0 ;
-    virtual void restoreSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0 ;
+    virtual void dumpSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer )    = 0;
+    virtual void restoreSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) = 0;
 
     virtual void refresh() = 0;
 
-    virtual bool setParam(const std::string &name, const std::string &value) = 0;
+    virtual bool setParam(const std::string &name, const std::string &value)      = 0;
     virtual std::string getParam(const std::string &name, bool *ok = NULL ) const = 0;
-    virtual const ParamNamesType &getParamNames() const = 0;
+    virtual const ParamNamesType &getParamNames() const                           = 0;
 
 
     template <typename T>
@@ -68,5 +69,5 @@ public :
 
 } // namespace fwMemory
 
-#endif // FWMEMORY_IPOLICY_HPP_
+#endif // __FWMEMORY_IPOLICY_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/Namespace.hpp b/SrcLib/core/fwMemory/include/fwMemory/Namespace.hpp
index 1450618..9afa1f9 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/Namespace.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMEMORYNAMESPACE_HPP_
-#define FWMEMORYNAMESPACE_HPP_
+#ifndef __FWMEMORY_NAMESPACE_HPP__
+#define __FWMEMORY_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwMemory contains tools to manage memory. Use for dump.
  * @namespace   fwMemory
- * 
+ *
  * @date        2009-2011.
  *
  */
 namespace fwMemory
 {
 }
-#endif /* FWMEMORYNAMESPACE_HPP_ */
+#endif /* __FWMEMORY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwMemory/include/fwMemory/camp/declare.hpp b/SrcLib/core/fwMemory/include/fwMemory/camp/declare.hpp
index 66b534d..4f7b92d 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/camp/declare.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/camp/declare.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwMemory/include/fwMemory/camp/mapper.hpp b/SrcLib/core/fwMemory/include/fwMemory/camp/mapper.hpp
index c9ce692..126600e 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/camp/mapper.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/camp/mapper.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,13 +20,31 @@ struct ValueMapper< ::fwTools::Type >
 {
     typedef ::fwTools::Type ReturnType;
     static const int type = camp::stringType;
-    static const std::string to(const ReturnType& source) {return source.string();}
+    static const std::string to(const ReturnType& source)
+    {
+        return source.string();
+    }
 
-    static ReturnType from(bool source)                    {CAMP_ERROR(camp::BadType(camp::boolType, camp::mapType<ReturnType>()));}
-    static ReturnType from(long source)                    {CAMP_ERROR(camp::BadType(camp::intType, camp::mapType<ReturnType>()));}
-    static ReturnType from(double source)                  {CAMP_ERROR(camp::BadType(camp::realType, camp::mapType<ReturnType>()));}
-    static ReturnType from(const std::string& source)      {return ::fwTools::Type::create(source);}
-    static ReturnType from(const camp::EnumObject& source) {CAMP_ERROR(camp::BadType(camp::enumType, camp::mapType<ReturnType>()));}
+    static ReturnType from(bool source)
+    {
+        CAMP_ERROR(camp::BadType(camp::boolType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(long source)
+    {
+        CAMP_ERROR(camp::BadType(camp::intType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(double source)
+    {
+        CAMP_ERROR(camp::BadType(camp::realType, camp::mapType<ReturnType>()));
+    }
+    static ReturnType from(const std::string& source)
+    {
+        return ::fwTools::Type::create(source);
+    }
+    static ReturnType from(const camp::EnumObject& source)
+    {
+        CAMP_ERROR(camp::BadType(camp::enumType, camp::mapType<ReturnType>()));
+    }
     static ReturnType from(const camp::UserObject& source)
     {
         CAMP_ERROR(camp::BadType(camp::userType, camp::mapType<ReturnType>()));
diff --git a/SrcLib/core/fwMemory/include/fwMemory/config.hpp b/SrcLib/core/fwMemory/include/fwMemory/config.hpp
deleted file mode 100644
index a3d04e4..0000000
--- a/SrcLib/core/fwMemory/include/fwMemory/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWMEMORY_CONFIG_HPP_
-#define _FWMEMORY_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWMEMORY_EXPORTS
-    #define FWMEMORY_API __declspec(dllexport)
-    #else
-    #define FWMEMORY_API __declspec(dllimport)
-    #endif
-
-    #define FWMEMORY_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWMEMORY_EXPORTS
-    #define FWMEMORY_API __attribute__ ((visibility("default")))
-    #define FWMEMORY_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define FWMEMORY_API __attribute__ ((visibility("hidden")))
-    #define FWMEMORY_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define FWMEMORY_API
-    #define FWMEMORY_CLASS_API
-
-#endif
-
-#endif // _FWMEMORY_CONFIG_HPP_
diff --git a/SrcLib/core/fwMemory/include/fwMemory/exception/BadCast.hpp b/SrcLib/core/fwMemory/include/fwMemory/exception/BadCast.hpp
index e10665f..0cb4f72 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/exception/BadCast.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/exception/BadCast.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,7 +22,9 @@ namespace exception
  */
 struct FWMEMORY_CLASS_API BadCast : ::fwCore::Exception
 {
-    BadCast( const std::string &err ) : ::fwCore::Exception(err) {}
+    BadCast( const std::string &err ) : ::fwCore::Exception(err)
+    {
+    }
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwMemory/include/fwMemory/exception/Memory.hpp b/SrcLib/core/fwMemory/include/fwMemory/exception/Memory.hpp
index 1e5992f..6ee0ac8 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/exception/Memory.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/exception/Memory.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEMORY_EXCEPTION_BYTESIZE_HPP__
-#define __FWMEMORY_EXCEPTION_BYTESIZE_HPP__
+#ifndef __FWMEMORY_EXCEPTION_MEMORY_HPP__
+#define __FWMEMORY_EXCEPTION_MEMORY_HPP__
 
 #include <fwCore/Exception.hpp>
 
@@ -22,11 +22,13 @@ namespace exception
  */
 struct FWMEMORY_CLASS_API Memory : ::fwCore::Exception
 {
-    Memory( const std::string &err ) : ::fwCore::Exception(err) {}
+    Memory( const std::string &err ) : ::fwCore::Exception(err)
+    {
+    }
 };
 
 } // namespace exception
 } // namespace fwMemory
 
-#endif // __FWMEMORY_EXCEPTION_BYTESIZE_HPP__
+#endif // __FWMEMORY_EXCEPTION_MEMORY_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/AlwaysDump.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/AlwaysDump.hpp
index 96679ea..2190d95 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/AlwaysDump.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/AlwaysDump.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMEMORY_ALWAYSDUMP_HPP_
-#define FWMEMORY_ALWAYSDUMP_HPP_
+#ifndef __FWMEMORY_POLICY_ALWAYSDUMP_HPP__
+#define __FWMEMORY_POLICY_ALWAYSDUMP_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -29,19 +28,22 @@ namespace policy
  */
 class FWMEMORY_CLASS_API AlwaysDump : public fwMemory::IPolicy
 {
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro((AlwaysDump)(fwMemory::IPolicy),
                                            (()),
-                                           ::fwMemory::policy::factory::New< AlwaysDump >) ;
+                                           ::fwMemory::policy::factory::New< AlwaysDump >);
 
     FWMEMORY_API virtual void allocationRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size );
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType size );
 
     FWMEMORY_API virtual void setRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size );
+                                          ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                          BufferInfo::SizeType size );
 
     FWMEMORY_API virtual void reallocateRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType newSize );
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType newSize );
 
     FWMEMORY_API virtual void destroyRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
 
@@ -79,5 +81,5 @@ protected:
 
 } // namespace fwMemory
 
-#endif // FWMEMORY_ALWAYSDUMP_HPP_
+#endif // __FWMEMORY_POLICY_ALWAYSDUMP_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/BarrierDump.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/BarrierDump.hpp
index 10c9008..242daf0 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/BarrierDump.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/BarrierDump.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMEMORY_BARRIERDUMP_HPP_
-#define FWMEMORY_BARRIERDUMP_HPP_
+#ifndef __FWMEMORY_POLICY_BARRIERDUMP_HPP__
+#define __FWMEMORY_POLICY_BARRIERDUMP_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -31,20 +30,23 @@ namespace policy
  */
 class FWMEMORY_CLASS_API BarrierDump : public ::fwMemory::IPolicy
 {
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro((BarrierDump)(fwMemory::IPolicy),
                                            (()),
-                                           ::fwMemory::policy::factory::New< BarrierDump >) ;
+                                           ::fwMemory::policy::factory::New< BarrierDump >);
     FWMEMORY_API BarrierDump();
 
     FWMEMORY_API virtual void allocationRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) ;
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType size );
 
     FWMEMORY_API virtual void setRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) ;
+                                          ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                          BufferInfo::SizeType size );
 
     FWMEMORY_API virtual void reallocateRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType newSize ) ;
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType newSize );
 
     FWMEMORY_API virtual void destroyRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
 
@@ -69,7 +71,7 @@ public :
     FWMEMORY_API bool setParam(const std::string &name, const std::string &value);
     FWMEMORY_API const fwMemory::IPolicy::ParamNamesType &getParamNames() const;
 
-protected :
+protected:
 
     FWMEMORY_API size_t getTotalAlive() const;
     FWMEMORY_API bool isBarrierCrossed() const;
@@ -88,5 +90,5 @@ protected :
 
 } // namespace fwMemory
 
-#endif // FWMEMORY_BARRIERDUMP_HPP_
+#endif // __FWMEMORY_POLICY_BARRIERDUMP_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/NeverDump.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/NeverDump.hpp
index 125055b..dbd4266 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/NeverDump.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/NeverDump.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMEMORY_NEVERDUMP_HPP_
-#define FWMEMORY_NEVERDUMP_HPP_
+#ifndef __FWMEMORY_POLICY_NEVERDUMP_HPP__
+#define __FWMEMORY_POLICY_NEVERDUMP_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -31,25 +30,28 @@ namespace policy
  */
 class FWMEMORY_CLASS_API NeverDump : public fwMemory::IPolicy
 {
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((NeverDump)(fwMemory::IPolicy),
                                            (()),
-                                           ::fwMemory::policy::factory::New< NeverDump >) ;
+                                           ::fwMemory::policy::factory::New< NeverDump >);
 
     FWMEMORY_API virtual void allocationRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) ;
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType size );
 
     FWMEMORY_API virtual void setRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) ;
+                                          ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                          BufferInfo::SizeType size );
 
     FWMEMORY_API virtual void reallocateRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType newSize ) ;
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType newSize );
 
     FWMEMORY_API virtual void destroyRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
 
     FWMEMORY_API virtual void lockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
-    FWMEMORY_API virtual void unlockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) ;
+    FWMEMORY_API virtual void unlockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
 
     FWMEMORY_API virtual void dumpSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
     FWMEMORY_API virtual void restoreSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
@@ -77,5 +79,5 @@ public :
 
 } // namespace fwMemory
 
-#endif // FWMEMORY_NEVERDUMP_HPP_
+#endif // __FWMEMORY_POLICY_NEVERDUMP_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/ValveDump.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/ValveDump.hpp
index 5a419a8..a0af6a0 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/ValveDump.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/ValveDump.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWMEMORY_DUMP_HPP_
-#define FWMEMORY_DUMP_HPP_
+#ifndef __FWMEMORY_POLICY_VALVEDUMP_HPP__
+#define __FWMEMORY_POLICY_VALVEDUMP_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -36,24 +35,27 @@ namespace policy
  */
 class FWMEMORY_CLASS_API ValveDump : public fwMemory::IPolicy
 {
-public :
+public:
     fwCoreClassDefinitionsWithFactoryMacro((ValveDump)(fwMemory::IPolicy),
                                            (()),
-                                           ::fwMemory::policy::factory::New< ValveDump >) ;
+                                           ::fwMemory::policy::factory::New< ValveDump >);
 
     FWMEMORY_API ValveDump();
 
     FWMEMORY_API virtual void allocationRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) ;
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType size );
     FWMEMORY_API virtual void setRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType size ) ;
+                                          ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                          BufferInfo::SizeType size );
     FWMEMORY_API virtual void reallocateRequest( BufferInfo &info,
-            ::fwMemory::BufferManager::ConstBufferPtrType buffer, BufferInfo::SizeType newSize ) ;
+                                                 ::fwMemory::BufferManager::ConstBufferPtrType buffer,
+                                                 BufferInfo::SizeType newSize );
 
-    FWMEMORY_API virtual void destroyRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) ;
+    FWMEMORY_API virtual void destroyRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
 
-    FWMEMORY_API virtual void lockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) ;
-    FWMEMORY_API virtual void unlockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer ) ;
+    FWMEMORY_API virtual void lockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
+    FWMEMORY_API virtual void unlockRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
 
     FWMEMORY_API virtual void dumpSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
     FWMEMORY_API virtual void restoreSuccess( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer );
@@ -64,7 +66,7 @@ public :
     FWMEMORY_API virtual std::string getParam(const std::string &name, bool *ok = NULL ) const;
     FWMEMORY_API const ::fwMemory::IPolicy::ParamNamesType &getParamNames() const;
 
-protected :
+protected:
 
     FWMEMORY_API bool needDump(size_t supplement) const;
 
@@ -81,5 +83,5 @@ protected :
 
 } // namespace fwMemory
 
-#endif // FWMEMORY_DUMP_HPP_
+#endif // __FWMEMORY_POLICY_VALVEDUMP_HPP__
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/factory/new.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/factory/new.hpp
index d3e3416..632436f 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/factory/new.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -33,7 +32,7 @@ FWMEMORY_API SPTR( ::fwMemory::IPolicy ) New( const ::fwMemory::policy::registry
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) policy = ::boost::make_shared< CLASSNAME >();
+    SPTR(CLASSNAME) policy = std::make_shared< CLASSNAME >();
     return policy;
 }
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/registry/detail.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/registry/detail.hpp
index ad7a4fa..0142d0b 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/registry/detail.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace registry
 
 typedef std::string KeyType;
 
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwMemory::IPolicy) () , KeyType > Type;
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwMemory::IPolicy) (), KeyType > Type;
 
 FWMEMORY_API SPTR(Type) get();
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/policy/registry/macros.hpp b/SrcLib/core/fwMemory/include/fwMemory/policy/registry/macros.hpp
index 22d3bd2..46dcc9b 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/policy/registry/macros.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/policy/registry/macros.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ namespace registry
 {
 
 #define fwMemoryPolicyRegisterMacro( classname )                                  \
-    static ::fwMemory::IPolicy::Registrar< classname > s__factory__record__ ## __LINE__ ;
+    static ::fwMemory::IPolicy::Registrar< classname > s__factory__record__ ## __LINE__;
 
 } // namespace registry
 } // namespace policy
diff --git a/SrcLib/core/fwMemory/include/fwMemory/stream/in/Buffer.hpp b/SrcLib/core/fwMemory/include/fwMemory/stream/in/Buffer.hpp
index e3b6cf8..b84e2da 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/stream/in/Buffer.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/stream/in/Buffer.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ namespace in
 class FWMEMORY_CLASS_API Buffer : public IFactory
 {
 public:
-    typedef SPTR(void) LockType;
+    typedef SPTR (void) LockType;
     typedef ::boost::function< LockType () > CounterFactoryType;
 
     Buffer(void* buf, size_t size);
diff --git a/SrcLib/core/fwMemory/include/fwMemory/stream/in/IFactory.hpp b/SrcLib/core/fwMemory/include/fwMemory/stream/in/IFactory.hpp
index 42ec50b..205f6e4 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/stream/in/IFactory.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/stream/in/IFactory.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,9 +22,13 @@ namespace in
 class FWMEMORY_CLASS_API IFactory
 {
 public:
-    virtual ~IFactory(){};
+    virtual ~IFactory()
+    {
+    }
 
-    SPTR(std::istream) operator()(){ return this->get(); }
+    SPTR(std::istream) operator()(){
+        return this->get();
+    }
 
 protected:
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/stream/in/Raw.hpp b/SrcLib/core/fwMemory/include/fwMemory/stream/in/Raw.hpp
index 08b447e..0fa547e 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/stream/in/Raw.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/stream/in/Raw.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,13 +25,15 @@ namespace in
 class FWMEMORY_CLASS_API Raw : public IFactory
 {
 public:
-    Raw(const ::boost::filesystem::path &path):
+    Raw(const ::boost::filesystem::path &path) :
         m_path(path)
-    {};
+    {
+    }
 
-    Raw(const ::fwMemory::FileHolder &path):
+    Raw(const ::fwMemory::FileHolder &path) :
         m_path(path)
-    {};
+    {
+    }
 
 protected:
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/stream/in/RawZ.hpp b/SrcLib/core/fwMemory/include/fwMemory/stream/in/RawZ.hpp
index 642ff63..b647836 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/stream/in/RawZ.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/stream/in/RawZ.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,9 +23,10 @@ namespace in
 class FWMEMORY_CLASS_API RawZ : public IFactory
 {
 public:
-    RawZ(const boost::filesystem::path &path):
+    RawZ(const boost::filesystem::path &path) :
         m_path(path)
-    {};
+    {
+    }
 
 protected:
 
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp
index 8b321f4..6c8f09a 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/DarwinMemoryMonitorTools.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_DARWINMEMORYMONITORTOOLS_HPP_
-#define _FWMEMORY_DARWINMEMORYMONITORTOOLS_HPP_
+#ifndef __FWMEMORY_TOOLS_DARWINMEMORYMONITORTOOLS_HPP__
+#define __FWMEMORY_TOOLS_DARWINMEMORYMONITORTOOLS_HPP__
 
 #ifdef __MACOSX__
 
@@ -60,4 +60,4 @@ public:
 
 #endif
 
-#endif // _FWMEMORY_DARWINMEMORYMONITORTOOLS_HPP_
+#endif // __FWMEMORY_TOOLS_DARWINMEMORYMONITORTOOLS_HPP__
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp
index 2aed77e..6760b3e 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/MemoryMonitorTools.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_MEMORYMONITORTOOLS_HPP_
-#define _FWMEMORY_MEMORYMONITORTOOLS_HPP_
+#ifndef __FWMEMORY_TOOLS_MEMORYMONITORTOOLS_HPP__
+#define __FWMEMORY_TOOLS_MEMORYMONITORTOOLS_HPP__
 
 #include <boost/cstdint.hpp>
 
@@ -21,9 +21,9 @@ class FWMEMORY_CLASS_API MemoryMonitorTools
 
 public:
 
-    FWMEMORY_API MemoryMonitorTools() ;
+    FWMEMORY_API MemoryMonitorTools();
 
-    FWMEMORY_API ~MemoryMonitorTools() ;
+    FWMEMORY_API ~MemoryMonitorTools();
 
 
     FWMEMORY_API static ::boost::uint64_t estimateFreeMem();
@@ -51,4 +51,4 @@ public:
 } // namespace tools
 } // namespace fwMemory
 
-#endif // _FWMEMORY_MEMORYMONITORTOOLS_HPP_
+#endif // __FWMEMORY_TOOLS_MEMORYMONITORTOOLS_HPP__
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp
index 1350b4f..2768cdb 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/PosixMemoryMonitorTools.hpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_POSIXMEMORYMONITORTOOLS_HPP_
-#define _FWMEMORY_POSIXMEMORYMONITORTOOLS_HPP_
+#ifndef __FWMEMORY_TOOLS_POSIXMEMORYMONITORTOOLS_HPP__
+#define __FWMEMORY_TOOLS_POSIXMEMORYMONITORTOOLS_HPP__
 
-#ifdef linux
+#if defined(linux) || defined(__linux)
 
 #include <boost/cstdint.hpp>
 #include <string>
@@ -33,14 +33,14 @@ struct MemInfo {
 
     MemInfo()
     {
-        total = 0;
-        free = 0;
-        buffered = 0;
-        cached = 0;
+        total      = 0;
+        free       = 0;
+        buffered   = 0;
+        cached     = 0;
         swapcached = 0;
-        swaptotal = 0;
-        swapfree = 0;
-    };
+        swaptotal  = 0;
+        swapfree   = 0;
+    }
 
 };
 
@@ -63,15 +63,15 @@ struct Status {
     {
         VmPeak = 0;
         VmSize = 0;
-        VmLck = 0;
-        VmHWM = 0;
-        VmRSS = 0;
+        VmLck  = 0;
+        VmHWM  = 0;
+        VmRSS  = 0;
         VmData = 0;
-        VmStk = 0;
-        VmExe = 0;
-        VmLib = 0;
-        VmPTE = 0;
-    };
+        VmStk  = 0;
+        VmExe  = 0;
+        VmLib  = 0;
+        VmPTE  = 0;
+    }
 
 };
 
@@ -82,9 +82,9 @@ class FWMEMORY_CLASS_API PosixMemoryMonitorTools
 
 public:
 
-    FWMEMORY_API PosixMemoryMonitorTools() ;
+    FWMEMORY_API PosixMemoryMonitorTools();
 
-    FWMEMORY_API ~PosixMemoryMonitorTools() ;
+    FWMEMORY_API ~PosixMemoryMonitorTools();
 
 
 
@@ -110,7 +110,7 @@ public:
 
     FWMEMORY_API static ::boost::uint64_t getUsedProcessMemory();
 
-private :
+private:
 
     static ::boost::uint64_t s_pageSize;
     static ::boost::uint64_t s_totalMemory;
@@ -137,6 +137,6 @@ private :
 } // namespace tools
 } // namespace fwMemory
 
-#endif
+#endif //defined(linux) || defined(__linux)
 
-#endif // _FWMEMORY_POSIXMEMORYMONITORTOOLS_HPP_
+#endif // __FWMEMORY_TOOLS_POSIXMEMORYMONITORTOOLS_HPP__
diff --git a/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp b/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp
index c903aeb..8395c27 100644
--- a/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp
+++ b/SrcLib/core/fwMemory/include/fwMemory/tools/Win32MemoryMonitorTools.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWMEMORY_WIN32MEMORYMONITORTOOLS_HPP_
-#define _FWMEMORY_WIN32MEMORYMONITORTOOLS_HPP_
+#ifndef __FWMEMORY_TOOLS_WIN32MEMORYMONITORTOOLS_HPP__
+#define __FWMEMORY_TOOLS_WIN32MEMORYMONITORTOOLS_HPP__
 
 #ifdef _WIN32
 
@@ -23,9 +23,9 @@ class FWMEMORY_CLASS_API Win32MemoryMonitorTools
 
 public:
 
-    FWMEMORY_API Win32MemoryMonitorTools() ;
+    FWMEMORY_API Win32MemoryMonitorTools();
 
-    FWMEMORY_API ~Win32MemoryMonitorTools() ;
+    FWMEMORY_API ~Win32MemoryMonitorTools();
 
 
 
@@ -59,4 +59,4 @@ public:
 
 #endif
 
-#endif // _FWMEMORY_WIN32MEMORYMONITORTOOLS_HPP_
+#endif // __FWMEMORY_TOOLS_WIN32MEMORYMONITORTOOLS_HPP__
diff --git a/SrcLib/core/fwMemory/src/fwMemory/BufferAllocationPolicy.cpp b/SrcLib/core/fwMemory/src/fwMemory/BufferAllocationPolicy.cpp
index 02b79c9..b92d5ae 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/BufferAllocationPolicy.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/BufferAllocationPolicy.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,8 @@ namespace fwMemory
 {
 
 
-void BufferMallocPolicy::allocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
+void BufferMallocPolicy::allocate(BufferType &buffer,
+                                  BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
 {
     if (size > 0)
     {
@@ -28,7 +29,8 @@ void BufferMallocPolicy::allocate(BufferType &buffer, BufferAllocationPolicy::Si
 
 //------------------------------------------------------------------------------
 
-void BufferMallocPolicy::reallocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
+void BufferMallocPolicy::reallocate(BufferType &buffer,
+                                    BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
 {
     BufferType newBuffer;
     if (size > 0)
@@ -71,7 +73,8 @@ BufferAllocationPolicy::sptr BufferMallocPolicy::New()
 
 
 
-void BufferNewPolicy::allocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
+void BufferNewPolicy::allocate(BufferType &buffer,
+                               BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
 {
     try
     {
@@ -89,7 +92,8 @@ void BufferNewPolicy::allocate(BufferType &buffer, BufferAllocationPolicy::SizeT
 
 //------------------------------------------------------------------------------
 
-void BufferNewPolicy::reallocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
+void BufferNewPolicy::reallocate(BufferType &buffer,
+                                 BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
 {
     FwCoreNotUsedMacro(buffer);
     FwCoreNotUsedMacro(size);
@@ -119,7 +123,8 @@ BufferAllocationPolicy::sptr BufferNewPolicy::New()
 
 
 
-void BufferNoAllocPolicy::allocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
+void BufferNoAllocPolicy::allocate(BufferType &buffer,
+                                   BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
 {
     FwCoreNotUsedMacro(buffer);
     FwCoreNotUsedMacro(size);
@@ -129,7 +134,8 @@ void BufferNoAllocPolicy::allocate(BufferType &buffer, BufferAllocationPolicy::S
 
 //------------------------------------------------------------------------------
 
-void BufferNoAllocPolicy::reallocate(BufferType &buffer, BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
+void BufferNoAllocPolicy::reallocate(BufferType &buffer,
+                                     BufferAllocationPolicy::SizeType size) throw( ::fwMemory::exception::Memory )
 {
     FwCoreNotUsedMacro(buffer);
     FwCoreNotUsedMacro(size);
diff --git a/SrcLib/core/fwMemory/src/fwMemory/BufferInfo.cpp b/SrcLib/core/fwMemory/src/fwMemory/BufferInfo.cpp
index e0ab113..1824ae6 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/BufferInfo.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/BufferInfo.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,8 +23,8 @@ BufferInfo::BufferInfo() :
 
 void BufferInfo::clear()
 {
-    size = 0;
-    loaded = true;
+    size              = 0;
+    loaded            = true;
     userStreamFactory = false;
     fsFile.clear();
     fileFormat = ::fwMemory::OTHER;
diff --git a/SrcLib/core/fwMemory/src/fwMemory/BufferManager.cpp b/SrcLib/core/fwMemory/src/fwMemory/BufferManager.cpp
index bf257c4..aad2933 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/BufferManager.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/BufferManager.cpp
@@ -1,32 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iosfwd> // #include <strstream>
-#include <iomanip>
-#include <algorithm>
-
-#include <boost/bind.hpp>
-#include <boost/filesystem.hpp>
-#include <boost/filesystem/fstream.hpp>
-#include <boost/foreach.hpp>
-#include <boost/make_shared.hpp>
+#include "fwMemory/BufferManager.hpp"
 
+#include <fwCom/Signal.hxx>
 #include <fwCore/util/LazyInstantiator.hpp>
 
 #include <fwTools/System.hpp>
-
 #include <fwThread/Worker.hpp>
 
-#include <fwCom/Signal.hpp>
-#include <fwCom/Signal.hxx>
-
 #include "fwMemory/stream/in/Raw.hpp"
 #include "fwMemory/stream/in/Buffer.hpp"
 #include "fwMemory/policy/NeverDump.hpp"
-#include "fwMemory/BufferManager.hpp"
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/fstream.hpp>
+
+#include <iosfwd> // #include <strstream>
+#include <iomanip>
+#include <algorithm>
+#include <functional>
 
 namespace fwMemory
 {
@@ -66,7 +62,7 @@ BufferManager::~BufferManager()
 
 ::boost::shared_future<void> BufferManager::registerBuffer(BufferManager::BufferPtrType bufferPtr)
 {
-    return m_worker->postTask<void>( ::boost::bind(&BufferManager::registerBufferImpl, this, bufferPtr) );
+    return m_worker->postTask<void>( std::bind(&BufferManager::registerBufferImpl, this, bufferPtr) );
 }
 
 void BufferManager::registerBufferImpl(BufferManager::BufferPtrType bufferPtr)
@@ -79,7 +75,7 @@ void BufferManager::registerBufferImpl(BufferManager::BufferPtrType bufferPtr)
 
 ::boost::shared_future<void> BufferManager::unregisterBuffer(BufferManager::BufferPtrType bufferPtr)
 {
-    return m_worker->postTask<void>( ::boost::bind(&BufferManager::unregisterBufferImpl, this, bufferPtr) );
+    return m_worker->postTask<void>( std::bind(&BufferManager::unregisterBufferImpl, this, bufferPtr) );
 }
 
 void BufferManager::unregisterBufferImpl(BufferManager::BufferPtrType bufferPtr)
@@ -92,13 +88,13 @@ void BufferManager::unregisterBufferImpl(BufferManager::BufferPtrType bufferPtr)
 //-----------------------------------------------------------------------------
 
 ::boost::shared_future<void> BufferManager::allocateBuffer(BufferManager::BufferPtrType bufferPtr, SizeType size,
-                                   const ::fwMemory::BufferAllocationPolicy::sptr &policy)
+                                                           const ::fwMemory::BufferAllocationPolicy::sptr &policy)
 {
-    return m_worker->postTask<void>(::boost::bind(&BufferManager::allocateBufferImpl, this, bufferPtr, size, policy));
+    return m_worker->postTask<void>(std::bind(&BufferManager::allocateBufferImpl, this, bufferPtr, size, policy));
 }
 
 void BufferManager::allocateBufferImpl(BufferManager::BufferPtrType bufferPtr, SizeType size,
-                                   const ::fwMemory::BufferAllocationPolicy::sptr &policy)
+                                       const ::fwMemory::BufferAllocationPolicy::sptr &policy)
 {
     BufferInfo & info = m_bufferInfos[bufferPtr];
     SLM_ASSERT("Buffer has already been allocated", info.loaded && (*bufferPtr == NULL));
@@ -122,11 +118,11 @@ void BufferManager::allocateBufferImpl(BufferManager::BufferPtrType bufferPtr, S
 
 
     info.istreamFactory =
-        ::boost::make_shared< ::fwMemory::stream::in::Buffer >(*bufferPtr, size,
-                                                               ::boost::bind(&getLock, this->getSptr(), bufferPtr));
+        std::make_shared< ::fwMemory::stream::in::Buffer >(*bufferPtr, size,
+                                                           std::bind(&getLock, this->getSptr(), bufferPtr));
 
     info.lastAccess.modified();
-    info.size = size;
+    info.size         = size;
     info.bufferPolicy = policy;
     m_updatedSig->asyncEmit();
 }
@@ -139,11 +135,11 @@ void BufferManager::allocateBufferImpl(BufferManager::BufferPtrType bufferPtr, S
                                                       const ::fwMemory::BufferAllocationPolicy::sptr &policy)
 {
     return m_worker->postTask<void>(
-                        ::boost::bind(&BufferManager::setBufferImpl, this, bufferPtr, buffer, size, policy));
+        std::bind(&BufferManager::setBufferImpl, this, bufferPtr, buffer, size, policy));
 }
 
 void BufferManager::setBufferImpl(BufferManager::BufferPtrType bufferPtr, ::fwMemory::BufferManager::BufferType buffer,
-                              SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr &policy)
+                                  SizeType size, const ::fwMemory::BufferAllocationPolicy::sptr &policy)
 {
     BufferInfo & info = m_bufferInfos[bufferPtr];
 
@@ -159,13 +155,13 @@ void BufferManager::setBufferImpl(BufferManager::BufferPtrType bufferPtr, ::fwMe
     *bufferPtr = buffer;
 
     info.lastAccess.modified();
-    info.size = size;
+    info.size         = size;
     info.bufferPolicy = policy;
-    info.fileFormat = ::fwMemory::OTHER;
+    info.fileFormat   = ::fwMemory::OTHER;
     info.fsFile.clear();
     info.istreamFactory =
-        ::boost::make_shared< ::fwMemory::stream::in::Buffer >(*bufferPtr, size,
-                                                               ::boost::bind(&getLock, this->getSptr(), bufferPtr));
+        std::make_shared< ::fwMemory::stream::in::Buffer >(*bufferPtr, size,
+                                                           ::boost::bind(&getLock, this->getSptr(), bufferPtr));
     info.userStreamFactory = false;
     m_updatedSig->asyncEmit();
 }
@@ -174,7 +170,7 @@ void BufferManager::setBufferImpl(BufferManager::BufferPtrType bufferPtr, ::fwMe
 
 ::boost::shared_future<void> BufferManager::reallocateBuffer(BufferManager::BufferPtrType bufferPtr, SizeType newSize)
 {
-    return m_worker->postTask<void>( ::boost::bind(&BufferManager::reallocateBufferImpl, this, bufferPtr, newSize) );
+    return m_worker->postTask<void>( std::bind(&BufferManager::reallocateBufferImpl, this, bufferPtr, newSize) );
 }
 
 void BufferManager::reallocateBufferImpl(BufferManager::BufferPtrType bufferPtr, SizeType newSize)
@@ -202,8 +198,8 @@ void BufferManager::reallocateBufferImpl(BufferManager::BufferPtrType bufferPtr,
     }
 
     info.istreamFactory =
-        ::boost::make_shared< ::fwMemory::stream::in::Buffer>(*bufferPtr, newSize,
-                                                              ::boost::bind(&getLock, this->getSptr(), bufferPtr));
+        std::make_shared< ::fwMemory::stream::in::Buffer>(*bufferPtr, newSize,
+                                                          std::bind(&getLock, this->getSptr(), bufferPtr));
 
     info.lastAccess.modified();
     info.size = newSize;
@@ -215,7 +211,7 @@ void BufferManager::reallocateBufferImpl(BufferManager::BufferPtrType bufferPtr,
 
 ::boost::shared_future<void> BufferManager::destroyBuffer(BufferManager::BufferPtrType bufferPtr)
 {
-    return m_worker->postTask<void>( ::boost::bind(&BufferManager::destroyBufferImpl, this, bufferPtr) );
+    return m_worker->postTask<void>( std::bind(&BufferManager::destroyBufferImpl, this, bufferPtr) );
 }
 
 void BufferManager::destroyBufferImpl(BufferManager::BufferPtrType bufferPtr)
@@ -240,7 +236,7 @@ void BufferManager::destroyBufferImpl(BufferManager::BufferPtrType bufferPtr)
 ::boost::shared_future<void> BufferManager::swapBuffer(BufferManager::BufferPtrType bufA,
                                                        BufferManager::BufferPtrType bufB)
 {
-    return m_worker->postTask<void>( ::boost::bind(&BufferManager::swapBufferImpl, this, bufA, bufB) );
+    return m_worker->postTask<void>( std::bind(&BufferManager::swapBufferImpl, this, bufA, bufB) );
 }
 
 void BufferManager::swapBufferImpl(BufferManager::BufferPtrType bufA, BufferManager::BufferPtrType bufB)
@@ -263,7 +259,8 @@ void BufferManager::swapBufferImpl(BufferManager::BufferPtrType bufA, BufferMana
 
 struct AutoUnlock
 {
-    AutoUnlock(const BufferManager::sptr &manager, BufferManager::ConstBufferPtrType bufferPtr, const BufferInfo &info):
+    AutoUnlock(const BufferManager::sptr &manager, BufferManager::ConstBufferPtrType bufferPtr,
+               const BufferInfo &info) :
         m_manager(manager), m_bufferPtr(bufferPtr)
     {
         if ( !info.loaded )
@@ -297,20 +294,20 @@ struct AutoUnlock
 
 ::boost::shared_future<SPTR(void)> BufferManager::lockBuffer(BufferManager::ConstBufferPtrType bufferPtr)
 {
-    return m_worker->postTask<SPTR(void)>( ::boost::bind(&BufferManager::lockBufferImpl, this, bufferPtr) );
+    return m_worker->postTask<SPTR(void)>( std::bind(&BufferManager::lockBufferImpl, this, bufferPtr) );
 }
 
 SPTR(void) BufferManager::lockBufferImpl(BufferManager::ConstBufferPtrType bufferPtr)
 {
     BufferManager::BufferPtrType castedBuffer = const_cast< BufferManager::BufferPtrType >(bufferPtr);
-    BufferInfo & info = m_bufferInfos[castedBuffer];
+    BufferInfo & info                         = m_bufferInfos[castedBuffer];
 
     m_dumpPolicy->lockRequest( info, castedBuffer );
 
     SPTR(void) counter = info.lockCounter.lock();
     if ( !counter )
     {
-        counter = ::boost::make_shared< AutoUnlock >( this->getSptr(), bufferPtr, info);
+        counter          = std::make_shared< AutoUnlock >( this->getSptr(), bufferPtr, info);
         info.lockCounter = counter;
     }
 
@@ -325,7 +322,7 @@ SPTR(void) BufferManager::lockBufferImpl(BufferManager::ConstBufferPtrType buffe
 
 ::boost::shared_future<bool> BufferManager::unlockBuffer(BufferManager::ConstBufferPtrType bufferPtr)
 {
-    return m_worker->postTask<bool>( ::boost::bind(&BufferManager::unlockBufferImpl, this, bufferPtr) );
+    return m_worker->postTask<bool>( std::bind(&BufferManager::unlockBufferImpl, this, bufferPtr) );
 }
 
 bool BufferManager::unlockBufferImpl(BufferManager::ConstBufferPtrType bufferPtr)
@@ -347,7 +344,7 @@ bool BufferManager::unlockBufferImpl(BufferManager::ConstBufferPtrType bufferPtr
 bool BufferManager::dumpBufferImpl(BufferManager::ConstBufferPtrType bufferPtr)
 {
     BufferManager::BufferPtrType castedBuffer = const_cast< BufferManager::BufferPtrType >(bufferPtr);
-    BufferInfo & info = m_bufferInfos[castedBuffer];
+    BufferInfo & info                         = m_bufferInfos[castedBuffer];
     return this->dumpBuffer(info, castedBuffer);
 }
 
@@ -360,7 +357,7 @@ bool BufferManager::dumpBuffer(BufferInfo & info, BufferManager::BufferPtrType b
         return false;
     }
 
-    ::boost::filesystem::path tmp = ::fwTools::System::getTemporaryFolder();
+    ::boost::filesystem::path tmp        = ::fwTools::System::getTemporaryFolder();
     ::boost::filesystem::path dumpedFile = ::boost::filesystem::unique_path( tmp/"fwMemory-%%%%-%%%%-%%%%-%%%%.raw" );
 
     OSLM_TRACE("dumping " << bufferPtr << " " << dumpedFile);
@@ -368,12 +365,12 @@ bool BufferManager::dumpBuffer(BufferInfo & info, BufferManager::BufferPtrType b
 
     if ( this->writeBufferImpl(*bufferPtr, info.size, dumpedFile) )
     {
-        info.fsFile = ::fwMemory::FileHolder(dumpedFile, true);
-        info.fileFormat = ::fwMemory::RAW;
-        info.istreamFactory = ::boost::make_shared< ::fwMemory::stream::in::Raw >(info.fsFile);
+        info.fsFile            = ::fwMemory::FileHolder(dumpedFile, true);
+        info.fileFormat        = ::fwMemory::RAW;
+        info.istreamFactory    = std::make_shared< ::fwMemory::stream::in::Raw >(info.fsFile);
         info.userStreamFactory = false;
         info.bufferPolicy->destroy(*bufferPtr);
-        *bufferPtr = NULL;
+        *bufferPtr  = NULL;
         info.loaded = false;
 
         m_dumpPolicy->dumpSuccess( info, bufferPtr );
@@ -386,15 +383,15 @@ bool BufferManager::dumpBuffer(BufferInfo & info, BufferManager::BufferPtrType b
 
 //-----------------------------------------------------------------------------
 
-::boost::shared_future<bool> BufferManager::restoreBuffer(BufferManager::ConstBufferPtrType  bufferPtr)
+::boost::shared_future<bool> BufferManager::restoreBuffer(BufferManager::ConstBufferPtrType bufferPtr)
 {
-    return m_worker->postTask<bool>( ::boost::bind(&BufferManager::restoreBufferImpl, this, bufferPtr) );
+    return m_worker->postTask<bool>( std::bind(&BufferManager::restoreBufferImpl, this, bufferPtr) );
 }
 
-bool BufferManager::restoreBufferImpl(BufferManager::ConstBufferPtrType  bufferPtr)
+bool BufferManager::restoreBufferImpl(BufferManager::ConstBufferPtrType bufferPtr)
 {
     BufferManager::BufferPtrType castedBuffer = const_cast< BufferManager::BufferPtrType >(bufferPtr);
-    BufferInfo & info = m_bufferInfos[castedBuffer];
+    BufferInfo & info                         = m_bufferInfos[castedBuffer];
     return this->restoreBuffer(info, castedBuffer);
 }
 
@@ -413,12 +410,12 @@ bool BufferManager::restoreBuffer(BufferInfo & info,
         info.bufferPolicy->allocate(*bufferPtr, allocSize);
 
         char * charBuf = static_cast< char * >(*bufferPtr);
-        SizeType size = std::min(allocSize, info.size);
+        SizeType size  = std::min(allocSize, info.size);
         bool notFailed = false;
         {
             SPTR(std::istream) isptr = (*info.istreamFactory)();
             std::istream &is = *isptr;
-            SizeType read = is.read(charBuf, size).gcount();
+            SizeType read    = is.read(charBuf, size).gcount();
 
             FW_RAISE_IF(" Bad file size, expected: " << size << ", was: " << read, size - read != 0);
             notFailed = !is.fail();
@@ -434,9 +431,10 @@ bool BufferManager::restoreBuffer(BufferInfo & info,
 
             info.fileFormat = ::fwMemory::OTHER;
             info.istreamFactory
-                = ::boost::make_shared< ::fwMemory::stream::in::Buffer >(*bufferPtr,
-                                                                allocSize,
-                                                                ::boost::bind(&getLock, this->getSptr(), bufferPtr));
+                = std::make_shared< ::fwMemory::stream::in::Buffer >(*bufferPtr,
+                                                                     allocSize,
+                                                                     std::bind(&getLock, this->getSptr(),
+                                                                               bufferPtr));
             info.userStreamFactory = false;
             m_updatedSig->asyncEmit();
             return true;
@@ -449,13 +447,13 @@ bool BufferManager::restoreBuffer(BufferInfo & info,
 //-----------------------------------------------------------------------------
 
 ::boost::shared_future<bool> BufferManager::writeBuffer(BufferManager::ConstBufferType buffer,
-        SizeType size, ::boost::filesystem::path &path)
+                                                        SizeType size, ::boost::filesystem::path &path)
 {
-    return m_worker->postTask<bool>( ::boost::bind(&BufferManager::writeBufferImpl, this, buffer, size, path) );
+    return m_worker->postTask<bool>( std::bind(&BufferManager::writeBufferImpl, this, buffer, size, path) );
 }
 
 bool BufferManager::writeBufferImpl(BufferManager::ConstBufferType buffer,
-        SizeType size, ::boost::filesystem::path &path)
+                                    SizeType size, ::boost::filesystem::path &path)
 {
     ::boost::filesystem::ofstream fs(path, std::ios::binary|std::ios::trunc);
     FW_RAISE_IF("Memory management : Unable to open " << path, !fs.good());
@@ -469,9 +467,9 @@ bool BufferManager::writeBufferImpl(BufferManager::ConstBufferType buffer,
 //-----------------------------------------------------------------------------
 
 ::boost::shared_future<bool> BufferManager::readBuffer(BufferManager::BufferType buffer, SizeType size,
-        ::boost::filesystem::path &path)
+                                                       ::boost::filesystem::path &path)
 {
-    return m_worker->postTask<bool>( ::boost::bind(&BufferManager::readBufferImpl, this, buffer, size, path) );
+    return m_worker->postTask<bool>( std::bind(&BufferManager::readBufferImpl, this, buffer, size, path) );
 }
 
 bool BufferManager::readBufferImpl(BufferManager::BufferType buffer, SizeType size, ::boost::filesystem::path &path)
@@ -483,7 +481,7 @@ bool BufferManager::readBufferImpl(BufferManager::BufferType buffer, SizeType si
     fs.seekg(0, std::ios::beg);
 
     FW_RAISE_IF(path << ": Bad file size, expected: " << size << ", was: " << fileSize,
-            size - fileSize != 0);
+                size - fileSize != 0);
 
     OSLM_TRACE("reading " << path);
     char * charBuf = static_cast< char * >(buffer);
@@ -497,32 +495,32 @@ bool BufferManager::readBufferImpl(BufferManager::BufferType buffer, SizeType si
 
 ::boost::shared_future<std::string> BufferManager::toString() const
 {
-    return m_worker->postTask<std::string>( ::boost::bind(&BufferManager::toStringImpl, this ) );
+    return m_worker->postTask<std::string>( std::bind(&BufferManager::toStringImpl, this ) );
 }
 
 std::string BufferManager::toStringImpl() const
 {
     std::stringstream sstr ("");
     sstr << "nb Elem = " << m_bufferInfos.size() << std::endl;
-    sstr    << std::setw(18) << "Buffer" << "->" << std::setw(18) << "Address" << " "
-            << std::setw(10) << "Size" << " "
-            << std::setw(18) << "Policy" << " "
-            << std::setw(6) << "Access" << " "
-            << std::setw(4) << "Lock" << " "
-            << "DumpStatus" << " "
-            << "File" << " "
-            << std::endl;
-    BOOST_FOREACH( BufferInfoMapType::value_type item, m_bufferInfos )
+    sstr << std::setw(18) << "Buffer" << "->" << std::setw(18) << "Address" << " "
+         << std::setw(10) << "Size" << " "
+         << std::setw(18) << "Policy" << " "
+         << std::setw(6) << "Access" << " "
+         << std::setw(4) << "Lock" << " "
+         << "DumpStatus" << " "
+         << "File" << " "
+         << std::endl;
+    for( BufferInfoMapType::value_type item :  m_bufferInfos )
     {
         BufferInfo & info = item.second;
-        sstr    << std::setw(18) << item.first << "->" << std::setw(18) << *(item.first) << " "
-                << std::setw(10) << info.size << " "
-                << std::setw(18) << info.bufferPolicy << " "
-                << std::setw(6) << info.lastAccess << " "
-                << std::setw(4) << info.lockCount() << " "
-                << ((info.loaded)?"   ":"not") << " loaded "
-                << ::boost::filesystem::path(info.fsFile) << " "
-                << std::endl;
+        sstr << std::setw(18) << item.first << "->" << std::setw(18) << *(item.first) << " "
+             << std::setw(10) << info.size << " "
+             << std::setw(18) << info.bufferPolicy << " "
+             << std::setw(6) << info.lastAccess << " "
+             << std::setw(4) << info.lockCount() << " "
+             << ((info.loaded) ? "   " : "not") << " loaded "
+             << ::boost::filesystem::path(info.fsFile) << " "
+             << std::endl;
     }
     return sstr.str();
 }
@@ -546,7 +544,7 @@ void BufferManager::setDumpPolicy( const ::fwMemory::IPolicy::sptr &policy )
 
 ::boost::shared_future<BufferManager::BufferInfoMapType> BufferManager::getBufferInfos() const
 {
-    return m_worker->postTask<BufferInfoMapType>( ::boost::bind(&BufferManager::getBufferInfosImpl, this) );
+    return m_worker->postTask<BufferInfoMapType>( std::bind(&BufferManager::getBufferInfosImpl, this) );
 }
 
 BufferManager::BufferInfoMapType BufferManager::getBufferInfosImpl() const
@@ -559,13 +557,13 @@ BufferManager::BufferInfoMapType BufferManager::getBufferInfosImpl() const
 ::boost::shared_future<BufferManager::BufferStats> BufferManager::getBufferStats() const
 {
     return m_worker->postTask<BufferManager::BufferStats>(
-            ::boost::bind(&BufferManager::computeBufferStats, m_bufferInfos) );
+        std::bind(&BufferManager::computeBufferStats, m_bufferInfos) );
 }
 
 BufferManager::BufferStats BufferManager::computeBufferStats(const BufferInfoMapType& bufferInfo)
 {
     BufferStats stats = {0,0};
-    BOOST_FOREACH( const BufferInfoMapType::value_type &item, bufferInfo )
+    for( const BufferInfoMapType::value_type &item :  bufferInfo )
     {
         const BufferInfo & info = item.second;
         if ( !info.loaded )
@@ -580,24 +578,24 @@ BufferManager::BufferStats BufferManager::computeBufferStats(const BufferInfoMap
 //-----------------------------------------------------------------------------
 
 ::boost::shared_future<void> BufferManager::setIStreamFactory(BufferPtrType bufferPtr,
-                                      const SPTR(::fwMemory::stream::in::IFactory) &factory,
-                                      SizeType size,
-                                      ::fwMemory::FileHolder fsFile,
-                                      ::fwMemory::FileFormatType format,
-                                      const ::fwMemory::BufferAllocationPolicy::sptr &policy
-                                     )
+                                                              const SPTR(::fwMemory::stream::in::IFactory) &factory,
+                                                              SizeType size,
+                                                              ::fwMemory::FileHolder fsFile,
+                                                              ::fwMemory::FileFormatType format,
+                                                              const ::fwMemory::BufferAllocationPolicy::sptr &policy
+                                                              )
 {
     return m_worker->postTask<void>(
-        ::boost::bind(&BufferManager::setIStreamFactoryImpl, this, bufferPtr, factory, size, fsFile, format, policy) );
+        std::bind(&BufferManager::setIStreamFactoryImpl, this, bufferPtr, factory, size, fsFile, format, policy) );
 }
 
 void BufferManager::setIStreamFactoryImpl(BufferPtrType bufferPtr,
-                                      const SPTR(::fwMemory::stream::in::IFactory) &factory,
-                                      SizeType size,
-                                      ::fwMemory::FileHolder fsFile,
-                                      ::fwMemory::FileFormatType format,
-                                      const ::fwMemory::BufferAllocationPolicy::sptr &policy
-                                     )
+                                          const SPTR(::fwMemory::stream::in::IFactory) &factory,
+                                          SizeType size,
+                                          ::fwMemory::FileHolder fsFile,
+                                          ::fwMemory::FileFormatType format,
+                                          const ::fwMemory::BufferAllocationPolicy::sptr &policy
+                                          )
 {
     BufferInfoMapType::iterator iterInfo = m_bufferInfos.find(bufferPtr);
     FW_RAISE_IF("Buffer is not managed by fwMemory::BufferManager.", iterInfo == m_bufferInfos.end() );
@@ -605,35 +603,35 @@ void BufferManager::setIStreamFactoryImpl(BufferPtrType bufferPtr,
 
     SLM_ASSERT("Buffer is already set", *bufferPtr == NULL && info.loaded);
 
-    info.istreamFactory = factory;
+    info.istreamFactory    = factory;
     info.userStreamFactory = true;
-    info.size = size;
-    info.fsFile = fsFile;
-    info.fileFormat = format;
-    info.bufferPolicy = policy;
-    info.loaded = false;
+    info.size              = size;
+    info.fsFile            = fsFile;
+    info.fileFormat        = format;
+    info.bufferPolicy      = policy;
+    info.loaded            = false;
 
     switch(m_loadingMode)
     {
-    case BufferManager::DIRECT:
-        this->restoreBuffer(bufferPtr);
-        break;
-    case BufferManager::LAZY :
-        m_dumpPolicy->dumpSuccess( info, bufferPtr );
-        m_updatedSig->asyncEmit();
-        break;
-    default:
-        SLM_ASSERT("You shall not pass", 0);
+        case BufferManager::DIRECT:
+            this->restoreBuffer(bufferPtr);
+            break;
+        case BufferManager::LAZY:
+            m_dumpPolicy->dumpSuccess( info, bufferPtr );
+            m_updatedSig->asyncEmit();
+            break;
+        default:
+            SLM_ASSERT("You shall not pass", 0);
     }
 }
 
 //-----------------------------------------------------------------------------
 
 ::boost::shared_future<BufferManager::StreamInfo>
-    BufferManager::getStreamInfo(const BufferManager::ConstBufferPtrType bufferPtr) const
+BufferManager::getStreamInfo(const BufferManager::ConstBufferPtrType bufferPtr) const
 {
     return m_worker->postTask<BufferManager::StreamInfo>(
-            ::boost::bind(&BufferManager::getStreamInfoImpl, this, bufferPtr) );
+        std::bind(&BufferManager::getStreamInfoImpl, this, bufferPtr) );
 }
 
 BufferManager::StreamInfo BufferManager::getStreamInfoImpl(const BufferManager::ConstBufferPtrType bufferPtr) const
@@ -642,9 +640,9 @@ BufferManager::StreamInfo BufferManager::getStreamInfoImpl(const BufferManager::
     BufferInfoMapType::const_iterator iterInfo = m_bufferInfos.find(bufferPtr);
     FW_RAISE_IF("Buffer is not managed by fwMemory::BufferManager.", iterInfo == m_bufferInfos.end() );
     const BufferInfo & info = iterInfo->second;
-    streamInfo.size = info.size;
-    streamInfo.fsFile = info.fsFile;
-    streamInfo.format = info.fileFormat;
+    streamInfo.size       = info.size;
+    streamInfo.fsFile     = info.fsFile;
+    streamInfo.format     = info.fileFormat;
     streamInfo.userStream = info.userStreamFactory;
 
     if(info.istreamFactory)
diff --git a/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp b/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp
index bdce408..410fb57 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/BufferObject.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,8 +9,8 @@
 fwCampImplementMacro((fwMemory)(BufferObject))
 {
     builder.tag("buffer")
-           .function("classname", &::fwMemory::BufferObject::className)
-           .function("is_a", (bool (::fwMemory::BufferObject::*)(const std::string &) const) &::fwMemory::BufferObject::isA);
+    .function("classname", &::fwMemory::BufferObject::className)
+    .function("is_a", (bool (::fwMemory::BufferObject::*)(const std::string &) const) &::fwMemory::BufferObject::isA);
 }
 
 namespace fwMemory
@@ -18,7 +18,7 @@ namespace fwMemory
 
 
 
-BufferObject::BufferObject():
+BufferObject::BufferObject() :
     m_buffer(0),
     m_size(0),
     m_bufferManager(::fwMemory::BufferManager::getDefault()),
@@ -42,7 +42,7 @@ void BufferObject::allocate(SizeType size, const ::fwMemory::BufferAllocationPol
 {
     m_bufferManager->allocateBuffer(&m_buffer, size, policy).get();
     m_allocPolicy = policy;
-    m_size = size;
+    m_size        = size;
 }
 
 //------------------------------------------------------------------------------
@@ -59,7 +59,7 @@ void BufferObject::destroy()
 {
     m_bufferManager->destroyBuffer(&m_buffer).get();
     m_allocPolicy = ::fwMemory::BufferNoAllocPolicy::New();
-    m_size = 0;
+    m_size        = 0;
 }
 
 //------------------------------------------------------------------------------
@@ -69,7 +69,7 @@ void BufferObject::setBuffer(::fwMemory::BufferManager::BufferType buffer, SizeT
 {
     m_bufferManager->setBuffer(&m_buffer, buffer, size, policy).get();
     m_allocPolicy = policy;
-    m_size   = size;
+    m_size        = size;
 }
 
 //------------------------------------------------------------------------------
@@ -107,13 +107,13 @@ BufferManager::StreamInfo BufferObject::getStreamInfo() const
 //------------------------------------------------------------------------------
 
 void BufferObject::setIStreamFactory(const SPTR(::fwMemory::stream::in::IFactory) &factory,
-                        SizeType size,
-                        const ::boost::filesystem::path &sourceFile,
-                        ::fwMemory::FileFormatType format,
-                        const ::fwMemory::BufferAllocationPolicy::sptr &policy
-                        )
+                                     SizeType size,
+                                     const ::boost::filesystem::path &sourceFile,
+                                     ::fwMemory::FileFormatType format,
+                                     const ::fwMemory::BufferAllocationPolicy::sptr &policy
+                                     )
 {
-    m_size = size;
+    m_size        = size;
     m_allocPolicy = policy;
     m_bufferManager->setIStreamFactory(&m_buffer, factory, size, sourceFile, format, policy).get();
 }
diff --git a/SrcLib/core/fwMemory/src/fwMemory/ByteSize.cpp b/SrcLib/core/fwMemory/src/fwMemory/ByteSize.cpp
index f29cef1..b50cd07 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/ByteSize.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/ByteSize.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,10 @@ namespace fwMemory
 {
 
 
-const ::boost::uint64_t ByteSize::Bytes = 1 ;
+const ::boost::uint64_t ByteSize::Bytes = 1;
 
 // SI units
-const ::boost::uint64_t ByteSize::KB = 1000LL ;
+const ::boost::uint64_t ByteSize::KB = 1000LL;
 const ::boost::uint64_t ByteSize::MB = 1000000LL;
 const ::boost::uint64_t ByteSize::GB = 1000000000LL;
 const ::boost::uint64_t ByteSize::TB = 1000000000000LL;
@@ -57,7 +57,7 @@ ByteSize::ByteSize ( double size, UnitType unit ) : m_size(0)
                || (unit == KiB) || (unit == MiB) || (unit == GiB) || (unit == TiB) || (unit == PiB));
     if(size < 0)
     {
-        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast , "Bad size : " << size << " < 0");
+        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast, "Bad size : " << size << " < 0");
     }
     this->setSize(size, unit);
 }
@@ -83,7 +83,7 @@ ByteSize& ByteSize::operator= ( double size )
 {
     if(size < 0)
     {
-        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast , "Bad size : " << size << " < 0");
+        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast, "Bad size : " << size << " < 0");
     }
 
     this->setSize(size);
@@ -114,7 +114,7 @@ void ByteSize::setSize ( double size, UnitType unit )
 {
     if(size < 0)
     {
-        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast , "Bad size : " << size << " < 0");
+        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast, "Bad size : " << size << " < 0");
     }
 
     SLM_ASSERT("Bad Unit",
@@ -128,14 +128,14 @@ void ByteSize::setSize ( double size, UnitType unit )
 void ByteSize::setSize ( const std::string &size )
 {
     SizeType newSize = 0;
-    bool r = parseSize(size, newSize);
+    bool r           = parseSize(size, newSize);
     if(r)
     {
         m_size = newSize;
     }
     else
     {
-        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast , "Bad size : " << size );
+        FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast, "Bad size : " << size );
     }
 }
 
@@ -145,23 +145,23 @@ std::string ByteSize::unitToString(ByteSize::UnitType unit)
 {
     switch ( unit )
     {
-        case Bytes :
+        case Bytes:
             return "Bytes";
-        case KB :
+        case KB:
             return "KB";
-        case GB :
+        case GB:
             return "GB";
-        case MB :
+        case MB:
             return "MB";
-        case TB :
+        case TB:
             return "TB";
-        case KiB :
+        case KiB:
             return "KiB";
-        case GiB :
+        case GiB:
             return "GiB";
-        case MiB :
+        case MiB:
             return "MiB";
-        case TiB :
+        case TiB:
             return "TiB";
     }
     SLM_ASSERT("Bad Unit",
@@ -189,38 +189,38 @@ bool ByteSize::parseSize(const std::string &s, SizeType& size)
     std::string::const_iterator first = s.begin();
     std::string::const_iterator last  = s.end();
 
-    ByteSize::SizeType intSize = 0;
-    double floatSize = 0;
+    ByteSize::SizeType intSize    = 0;
+    double floatSize              = 0;
     ByteSize::SizeType multiplier = ByteSize::Bytes;
 
     symbols<char, ByteSize::SizeType> unit;
 
     unit.add
-        ( "b"    , ByteSize::Bytes ) ( "byte", ByteSize::Bytes ) ( "bytes", ByteSize::Bytes )
-        ( "kb"   , ByteSize::KB  )
-        ( "mb"   , ByteSize::MB  )
-        ( "gb"   , ByteSize::GB  )
-        ( "tb"   , ByteSize::TB  )
-        ( "pb"   , ByteSize::PB  )
-        ( "k"  , ByteSize::KiB ) ( "kib"  , ByteSize::KiB )
-        ( "m"  , ByteSize::MiB ) ( "mib"  , ByteSize::MiB )
-        ( "g"  , ByteSize::GiB ) ( "gib"  , ByteSize::GiB )
-        ( "t"  , ByteSize::TiB ) ( "tib"  , ByteSize::TiB )
-        ( "p"  , ByteSize::PiB ) ( "pib"  , ByteSize::PiB )
-        ;
+        ( "b", ByteSize::Bytes ) ( "byte", ByteSize::Bytes ) ( "bytes", ByteSize::Bytes )
+        ( "kb", ByteSize::KB  )
+        ( "mb", ByteSize::MB  )
+        ( "gb", ByteSize::GB  )
+        ( "tb", ByteSize::TB  )
+        ( "pb", ByteSize::PB  )
+        ( "k", ByteSize::KiB ) ( "kib", ByteSize::KiB )
+        ( "m", ByteSize::MiB ) ( "mib", ByteSize::MiB )
+        ( "g", ByteSize::GiB ) ( "gib", ByteSize::GiB )
+        ( "t", ByteSize::TiB ) ( "tib", ByteSize::TiB )
+        ( "p", ByteSize::PiB ) ( "pib", ByteSize::PiB )
+    ;
 
 
     bool r = false;
     r = phrase_parse(first, last,
                      //  Begin grammar
                      (
-                      ( *space >>
-                       ( &((double_) >> no_case[-unit] >> *space >> eoi)
-                         >> double_[ ref(floatSize) = _1 ] >> no_case[-unit[ ref(multiplier) = _1 ]] )
-                       | ( &((ulong_long) >> no_case[-unit]  >> *space >> eoi)
-                           >> ulong_long[ ref(intSize) = _1 ] >> no_case[-unit[ ref(multiplier) = _1 ]] )
-                      )
-                      >> *space >> eoi
+                         ( *space >>
+                           ( &((double_) >> no_case[-unit] >> *space >> eoi)
+                             >> double_[ ref(floatSize) = _1 ] >> no_case[-unit[ ref(multiplier) = _1 ]] )
+                           | ( &((ulong_long) >> no_case[-unit]  >> *space >> eoi)
+                               >> ulong_long[ ref(intSize) = _1 ] >> no_case[-unit[ ref(multiplier) = _1 ]] )
+                         )
+                         >> *space >> eoi
                      ),
                      //  End grammar
 
@@ -240,7 +240,7 @@ bool ByteSize::parseSize(const std::string &s, SizeType& size)
     {
         if(floatSize < 0)
         {
-            FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast , "Bad size : " << floatSize << " < 0");
+            FW_RAISE_EXCEPTION_MSG( ::fwMemory::exception::BadCast, "Bad size : " << floatSize << " < 0");
         }
 
         size = static_cast< ByteSize::SizeType >(floatSize * multiplier);
@@ -260,7 +260,7 @@ std::string ByteSize::getSizeAsString( UnitType unit )
                (unit == Bytes) || (unit == KB) || (unit == MB) || (unit == GB) || (unit == TB)  || (unit == PB)
                || (unit == KiB) || (unit == MiB) || (unit == GiB) || (unit == TiB) || (unit == PiB));
     std::stringstream sstr;
-    sstr << std::noshowpoint ;
+    sstr << std::noshowpoint;
 
     if(unit == Bytes)
     {
@@ -279,8 +279,8 @@ std::string ByteSize::getSizeAsString( UnitType unit )
 
 std::string ByteSize::getHumanReadableSize( StandardType standard )
 {
-    static UnitType si []  = {Bytes, KB,  MB,  GB,  TB,  PB};
-    static UnitType iec [] = {Bytes, KiB, MiB, GiB, TiB, PiB};
+    static UnitType si []          = {Bytes, KB,  MB,  GB,  TB,  PB};
+    static UnitType iec []         = {Bytes, KiB, MiB, GiB, TiB, PiB};
     const size_t sizeOfStandardSet = 5;
 
     UnitType *unitSet = iec;
@@ -289,8 +289,8 @@ std::string ByteSize::getHumanReadableSize( StandardType standard )
         unitSet = si;
     }
 
-    size_t i ;
-    for ( i = 1 ; i < sizeOfStandardSet ; ++i )
+    size_t i;
+    for ( i = 1; i < sizeOfStandardSet; ++i )
     {
         if (m_size < unitSet[i])
         {
diff --git a/SrcLib/core/fwMemory/src/fwMemory/FileHolder.cpp b/SrcLib/core/fwMemory/src/fwMemory/FileHolder.cpp
index 4720729..483bac6 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/FileHolder.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/FileHolder.cpp
@@ -1,11 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <fwCore/spyLog.hpp>
-#include <boost/make_shared.hpp>
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/operations.hpp>
 
@@ -17,7 +16,8 @@ namespace fwMemory
 struct FileAutoDelete
 {
     FileAutoDelete(const ::boost::filesystem::path &file) : m_path(file)
-    { }
+    {
+    }
 
     ~FileAutoDelete()
     {
@@ -35,12 +35,12 @@ struct FileAutoDelete
 
 //-----------------------------------------------------------------------------
 
-FileHolder::FileHolder(const ::boost::filesystem::path &file, bool autodelete):
+FileHolder::FileHolder(const ::boost::filesystem::path &file, bool autodelete) :
     m_path(file)
 {
     if (autodelete)
     {
-        m_autoDelete = ::boost::make_shared< FileAutoDelete >( file );
+        m_autoDelete = std::make_shared< FileAutoDelete >( file );
     }
 }
 
diff --git a/SrcLib/core/fwMemory/src/fwMemory/camp/declare.cpp b/SrcLib/core/fwMemory/src/fwMemory/camp/declare.cpp
index 9b20a6e..3554bc6 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/camp/declare.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/camp/declare.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwMemory/src/fwMemory/policy/AlwaysDump.cpp b/SrcLib/core/fwMemory/src/fwMemory/policy/AlwaysDump.cpp
index f0ffb07..32e5386 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/policy/AlwaysDump.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/policy/AlwaysDump.cpp
@@ -1,14 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include "fwMemory/policy/registry/macros.hpp"
-#include "fwMemory/policy/BarrierDump.hpp"
 #include "fwMemory/policy/AlwaysDump.hpp"
+#include "fwMemory/policy/BarrierDump.hpp"
+#include "fwMemory/policy/registry/macros.hpp"
 
 
 namespace fwMemory
@@ -22,7 +20,7 @@ fwMemoryPolicyRegisterMacro(::fwMemory::policy::AlwaysDump);
 //------------------------------------------------------------------------------
 
 void AlwaysDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                                    BufferInfo::SizeType size )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -33,7 +31,7 @@ void AlwaysDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager:
 //------------------------------------------------------------------------------
 
 void AlwaysDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                             BufferInfo::SizeType size )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -44,7 +42,7 @@ void AlwaysDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstB
 //------------------------------------------------------------------------------
 
 void AlwaysDump::reallocateRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType newSize )
+                                    BufferInfo::SizeType newSize )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -106,10 +104,10 @@ size_t AlwaysDump::dump()
     {
         const ::fwMemory::BufferManager::BufferInfoMapType bufferInfos = manager->getBufferInfos().get();
 
-        BOOST_FOREACH(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt, bufferInfos)
+        for(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt :  bufferInfos)
         {
             const ::fwMemory::BufferInfo &info = elt.second;
-            if( ! ( info.size == 0 || info.lockCount() > 0 || !info.loaded )  )
+            if( !( info.size == 0 || info.lockCount() > 0 || !info.loaded )  )
             {
                 if( manager->dumpBuffer(elt.first).get() )
                 {
diff --git a/SrcLib/core/fwMemory/src/fwMemory/policy/BarrierDump.cpp b/SrcLib/core/fwMemory/src/fwMemory/policy/BarrierDump.cpp
index 963f7c4..22b1256 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/policy/BarrierDump.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/policy/BarrierDump.cpp
@@ -1,17 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/assign.hpp>
-#include <boost/foreach.hpp>
-
 #include "fwMemory/exception/BadCast.hpp"
 #include "fwMemory/ByteSize.hpp"
 #include "fwMemory/policy/registry/macros.hpp"
 #include "fwMemory/policy/BarrierDump.hpp"
 
+#include <boost/assign.hpp>
 
 namespace fwMemory
 {
@@ -34,7 +32,7 @@ BarrierDump::BarrierDump() :
 //------------------------------------------------------------------------------
 
 void BarrierDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                                     BufferInfo::SizeType size )
 {
     m_totalAllocated -= info.size;
     m_totalAllocated += size;
@@ -49,7 +47,7 @@ void BarrierDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager
 
 
 void BarrierDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                              BufferInfo::SizeType size )
 {
     m_totalAllocated -= info.size;
     m_totalAllocated += size;
@@ -64,7 +62,7 @@ void BarrierDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::Const
 
 
 void BarrierDump::reallocateRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType newSize )
+                                     BufferInfo::SizeType newSize )
 {
     m_totalAllocated -= info.size;
     m_totalAllocated += newSize;
@@ -120,7 +118,7 @@ void BarrierDump::restoreSuccess( BufferInfo &info, ::fwMemory::BufferManager::C
 
 size_t BarrierDump::getTotalAlive() const
 {
-    SLM_ASSERT("More dumped data than allocated data." , m_totalAllocated >= m_totalDumped);
+    SLM_ASSERT("More dumped data than allocated data.", m_totalAllocated >= m_totalDumped);
     size_t totalAlive = m_totalAllocated - m_totalDumped;
     return totalAlive;
 }
@@ -144,24 +142,24 @@ size_t BarrierDump::dump(size_t nbOfBytes)
         const ::fwMemory::BufferManager::BufferInfoMapType bufferInfos = manager->getBufferInfos().get();
 
         typedef std::pair<
-            ::fwMemory::BufferManager::BufferInfoMapType::key_type,
-            ::fwMemory::BufferManager::BufferInfoMapType::mapped_type
+                ::fwMemory::BufferManager::BufferInfoMapType::key_type,
+                ::fwMemory::BufferManager::BufferInfoMapType::mapped_type
                 > BufferInfosPairType;
         typedef std::vector< BufferInfosPairType > BufferVectorType;
 
         BufferVectorType buffers;
 
-        BOOST_FOREACH(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt, bufferInfos)
+        for(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt :  bufferInfos)
         {
             const ::fwMemory::BufferInfo &info = elt.second;
-            if( ! ( info.size == 0 || info.lockCount() > 0 || !info.loaded )  )
+            if( !( info.size == 0 || info.lockCount() > 0 || !info.loaded )  )
             {
                 buffers.push_back(elt);
             }
         }
 
 
-        BOOST_FOREACH(const BufferVectorType::value_type &pair, bufferInfos)
+        for(const BufferVectorType::value_type &pair :  bufferInfos)
         {
             if(dumped < nbOfBytes)
             {
@@ -194,10 +192,10 @@ void BarrierDump::apply()
 
 void BarrierDump::refresh()
 {
-    ::fwMemory::BufferManager::sptr manager = ::fwMemory::BufferManager::getDefault();
+    ::fwMemory::BufferManager::sptr manager      = ::fwMemory::BufferManager::getDefault();
     ::fwMemory::BufferManager::BufferStats stats = manager->getBufferStats().get();
-    m_totalAllocated = stats.totalManaged;
-    m_totalDumped = stats.totalDumped;
+    m_totalAllocated                             = stats.totalManaged;
+    m_totalDumped                                = stats.totalDumped;
     this->apply();
 }
 
@@ -240,7 +238,7 @@ std::string BarrierDump::getParam(const std::string &name, bool *ok ) const
     if(name == "barrier")
     {
         value = std::string(::fwMemory::ByteSize( ::fwMemory::ByteSize::SizeType(m_barrier) ));
-        isOk = true;
+        isOk  = true;
     }
     if (ok)
     {
diff --git a/SrcLib/core/fwMemory/src/fwMemory/policy/NeverDump.cpp b/SrcLib/core/fwMemory/src/fwMemory/policy/NeverDump.cpp
index 14e3802..5c031a5 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/policy/NeverDump.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/policy/NeverDump.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ fwMemoryPolicyRegisterMacro(::fwMemory::policy::NeverDump);
 //------------------------------------------------------------------------------
 
 void NeverDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                                   BufferInfo::SizeType size )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -31,7 +31,7 @@ void NeverDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager::
 
 
 void NeverDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                            BufferInfo::SizeType size )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -42,7 +42,7 @@ void NeverDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBu
 
 
 void NeverDump::reallocateRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType newSize )
+                                   BufferInfo::SizeType newSize )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -95,7 +95,8 @@ void NeverDump::restoreSuccess( BufferInfo &info, ::fwMemory::BufferManager::Con
 //------------------------------------------------------------------------------
 
 void NeverDump::refresh()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwMemory/src/fwMemory/policy/ValveDump.cpp b/SrcLib/core/fwMemory/src/fwMemory/policy/ValveDump.cpp
index 0288935..5ab7880 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/policy/ValveDump.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/policy/ValveDump.cpp
@@ -1,13 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#include <boost/assign.hpp>
-#include <boost/foreach.hpp>
-
+#include "fwMemory/ByteSize.hpp"
+#include "fwMemory/exception/BadCast.hpp"
+#include "fwMemory/policy/registry/macros.hpp"
+#include "fwMemory/policy/ValveDump.hpp"
 
 #ifdef _WIN32
 #define MEMORYTOOLIMPL Win32MemoryMonitorTools
@@ -20,10 +21,7 @@
 #include "fwMemory/tools/PosixMemoryMonitorTools.hpp"
 #endif
 
-#include "fwMemory/exception/BadCast.hpp"
-#include "fwMemory/ByteSize.hpp"
-#include "fwMemory/policy/registry/macros.hpp"
-#include "fwMemory/policy/ValveDump.hpp"
+#include <boost/assign.hpp>
 
 
 namespace fwMemory
@@ -45,7 +43,7 @@ ValveDump::ValveDump() :
 //------------------------------------------------------------------------------
 
 void ValveDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                                   BufferInfo::SizeType size )
 {
     FwCoreNotUsedMacro(buffer);
     this->apply((size > info.size) ? size - info.size : 0);
@@ -54,7 +52,7 @@ void ValveDump::allocationRequest( BufferInfo &info, ::fwMemory::BufferManager::
 //------------------------------------------------------------------------------
 
 void ValveDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType size )
+                            BufferInfo::SizeType size )
 {
     FwCoreNotUsedMacro(info);
     FwCoreNotUsedMacro(buffer);
@@ -65,7 +63,7 @@ void ValveDump::setRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBu
 //------------------------------------------------------------------------------
 
 void ValveDump::reallocateRequest( BufferInfo &info, ::fwMemory::BufferManager::ConstBufferPtrType buffer,
-        BufferInfo::SizeType newSize )
+                                   BufferInfo::SizeType newSize )
 {
     FwCoreNotUsedMacro(buffer);
     this->apply((newSize > info.size) ? newSize - info.size : 0);
@@ -131,24 +129,24 @@ size_t ValveDump::dump(size_t nbOfBytes)
         const ::fwMemory::BufferManager::BufferInfoMapType bufferInfos = manager->getBufferInfos().get();
 
         typedef std::pair<
-            fwMemory::BufferManager::BufferInfoMapType::key_type,
-            fwMemory::BufferManager::BufferInfoMapType::mapped_type
+                fwMemory::BufferManager::BufferInfoMapType::key_type,
+                fwMemory::BufferManager::BufferInfoMapType::mapped_type
                 > BufferInfosPairType;
         typedef std::vector< BufferInfosPairType > BufferVectorType;
 
         BufferVectorType buffers;
 
-        BOOST_FOREACH(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt, bufferInfos)
+        for(const ::fwMemory::BufferManager::BufferInfoMapType::value_type &elt :  bufferInfos)
         {
             const ::fwMemory::BufferInfo &info = elt.second;
-            if( ! ( info.size == 0 || info.lockCount() > 0 || !info.loaded )  )
+            if( !( info.size == 0 || info.lockCount() > 0 || !info.loaded )  )
             {
                 buffers.push_back(elt);
             }
         }
 
 
-        BOOST_FOREACH(const BufferVectorType::value_type &pair, bufferInfos)
+        for(const BufferVectorType::value_type &pair :  bufferInfos)
         {
             if(dumped < nbOfBytes)
             {
@@ -173,7 +171,9 @@ void ValveDump::apply(size_t supplement)
 {
     if(this->needDump(supplement))
     {
-        this->dump( (m_minFreeMem + m_hysteresisOffset + supplement) - ::fwMemory::tools::MEMORYTOOLIMPL::getFreeSystemMemory() );
+        this->dump(
+            (m_minFreeMem + m_hysteresisOffset + supplement) -
+            ::fwMemory::tools::MEMORYTOOLIMPL::getFreeSystemMemory() );
     }
 }
 
@@ -218,7 +218,7 @@ const fwMemory::IPolicy::ParamNamesType &ValveDump::getParamNames() const
 {
     static const fwMemory::IPolicy::ParamNamesType params
         = ::boost::assign::list_of ("min_free_mem")
-                                   ("hysteresis_offet");
+              ("hysteresis_offet");
     return params;
 }
 
@@ -231,12 +231,12 @@ std::string ValveDump::getParam(const std::string &name, bool *ok ) const
     if(name == "min_free_mem")
     {
         value = std::string(::fwMemory::ByteSize( ::fwMemory::ByteSize::SizeType(m_minFreeMem) ));
-        isOk = true;
+        isOk  = true;
     }
     else if(name == "hysteresis_offet")
     {
         value = std::string(::fwMemory::ByteSize( ::fwMemory::ByteSize::SizeType(m_hysteresisOffset) ));
-        isOk = true;
+        isOk  = true;
     }
     if (ok)
     {
diff --git a/SrcLib/core/fwMemory/src/fwMemory/policy/factory/new.cpp b/SrcLib/core/fwMemory/src/fwMemory/policy/factory/new.cpp
index 8ddafa0..a8040a0 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/policy/factory/new.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/policy/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwMemory/src/fwMemory/policy/registry/detail.cpp b/SrcLib/core/fwMemory/src/fwMemory/policy/registry/detail.cpp
index dd2447e..d345bd4 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/policy/registry/detail.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/policy/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace policy
 namespace registry
 {
 
-struct FwMemoryPolicyRegistryInstantiatorTag {} ;
+struct FwMemoryPolicyRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/core/fwMemory/src/fwMemory/stream/in/Buffer.cpp b/SrcLib/core/fwMemory/src/fwMemory/stream/in/Buffer.cpp
index a388195..3572328 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/stream/in/Buffer.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/stream/in/Buffer.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
 #include <boost/iostreams/device/array.hpp>
 #include <boost/iostreams/stream.hpp>
 
@@ -54,7 +53,7 @@ SPTR(std::istream) Buffer::get()
 
     typedef HoldCounterStream ArrayStreamType;
     SPTR( ArrayStreamType ) arrayInStream
-        = ::boost::make_shared< ArrayStreamType > ( static_cast<char *>(m_buf), m_size, m_counterFactory() );
+        = std::make_shared< ArrayStreamType > ( static_cast<char *>(m_buf), m_size, m_counterFactory() );
 
     return arrayInStream;
 }
diff --git a/SrcLib/core/fwMemory/src/fwMemory/stream/in/Raw.cpp b/SrcLib/core/fwMemory/src/fwMemory/stream/in/Raw.cpp
index 0d1e05c..5bcd001 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/stream/in/Raw.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/stream/in/Raw.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,7 +8,6 @@
 #include <boost/filesystem/fstream.hpp>
 #include <boost/filesystem/operations.hpp>
 
-#include <boost/make_shared.hpp>
 
 #include <fwCore/macros.hpp>
 #include <fwCore/exceptionmacros.hpp>
@@ -28,7 +27,7 @@ SPTR(std::istream) Raw::get()
                 !boost::filesystem::exists(m_path));
 
     SPTR(::boost::filesystem::ifstream) fs
-        = ::boost::make_shared< ::boost::filesystem::ifstream>(m_path, std::ios::in|std::ios::binary);
+        = std::make_shared< ::boost::filesystem::ifstream>(m_path, std::ios::in|std::ios::binary);
     return fs;
 }
 
diff --git a/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp b/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp
index 4f0173e..132f00b 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/stream/in/RawZ.cpp
@@ -1,16 +1,15 @@
-// /* ***** BEGIN LICENSE BLOCK *****
-//  * FW4SPL - Copyright (C) IRCAD, 2009-2013.
-//  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-//  * published by the Free Software Foundation.
-//  * ****** END LICENSE BLOCK ****** */
-//
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 // #include <boost/filesystem/path.hpp>
 // #include <boost/filesystem/fstream.hpp>
 // #include <boost/iostreams/filtering_stream.hpp>
 // #include <boost/iostreams/filter/gzip.hpp>
 //
-// #include <boost/make_shared.hpp>
-//
+// //
 // #include <fwCore/macros.hpp>
 //
 // #include "fwMemory/stream/in/RawZ.hpp"
@@ -36,9 +35,9 @@
 // SPTR(std::istream) RawZ::get()
 // {
 //     SPTR(::boost::filesystem::ifstream) fs
-//         = ::boost::make_shared< ::boost::filesystem::ifstream>(m_path, std::ios::in|std::ios::binary);
+//         = std::make_shared< ::boost::filesystem::ifstream>(m_path, std::ios::in|std::ios::binary);
 //
-//     SPTR(FilteringStream) filter = ::boost::make_shared< FilteringStream >();
+//     SPTR(FilteringStream) filter = std::make_shared< FilteringStream >();
 //
 //     filter->heldStream = fs;
 //
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp
index b1e57ea..5a52421 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/DarwinMemoryMonitorTools.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -59,15 +59,15 @@ DarwinMemoryMonitorTools::~DarwinMemoryMonitorTools()
     mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
 
     if (KERN_SUCCESS != task_info(mach_task_self(),
-                TASK_BASIC_INFO, (task_info_t)&t_info,
-                &t_info_count))
+                                  TASK_BASIC_INFO, (task_info_t)&t_info,
+                                  &t_info_count))
     {
         SLM_ASSERT("Failed to retrieve used process memory information", 0);
         return 0;
     }
 
     // Hard coded 3Gb limit for 32bit process
-    const ::boost::uint64_t maxMemory = 3221225472LL; // 3 Go
+    const ::boost::uint64_t maxMemory         = 3221225472LL; // 3 Go
     const ::boost::uint64_t usedProcessMemory = getUsedProcessMemory();
     freeMemory = std::min( maxMemory - usedProcessMemory, freeMemory);
     const ::boost::uint64_t maxVMemory = 4294967296LL; // 4 Go
@@ -80,12 +80,14 @@ DarwinMemoryMonitorTools::~DarwinMemoryMonitorTools()
 //-----------------------------------------------------------------------------
 
 void DarwinMemoryMonitorTools::printProcessMemoryInformation()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void DarwinMemoryMonitorTools::printSystemMemoryInformation()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -123,15 +125,15 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
     vm_statistics_data_t vm_stats;
 
     mach_port = mach_host_self();
-    count = sizeof(vm_stats) / sizeof(natural_t);
+    count     = sizeof(vm_stats) / sizeof(natural_t);
     if (KERN_SUCCESS == host_page_size(mach_port, &page_size) &&
-            KERN_SUCCESS == host_statistics(mach_port, HOST_VM_INFO,
-                (host_info_t)&vm_stats, &count))
+        KERN_SUCCESS == host_statistics(mach_port, HOST_VM_INFO,
+                                        (host_info_t)&vm_stats, &count))
     {
         uint64_t used_memory = (
-                (int64_t)vm_stats.active_count +
-                (int64_t)vm_stats.wire_count
-                ) *  (int64_t)page_size;
+            (int64_t)vm_stats.active_count +
+            (int64_t)vm_stats.wire_count
+            ) *  (int64_t)page_size;
 
         return used_memory;
     }
@@ -149,15 +151,15 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
     vm_statistics_data_t vm_stats;
 
     mach_port = mach_host_self();
-    count = sizeof(vm_stats) / sizeof(natural_t);
+    count     = sizeof(vm_stats) / sizeof(natural_t);
     if (KERN_SUCCESS == host_page_size(mach_port, &page_size) &&
-            KERN_SUCCESS == host_statistics(mach_port, HOST_VM_INFO,
-                (host_info_t)&vm_stats, &count))
+        KERN_SUCCESS == host_statistics(mach_port, HOST_VM_INFO,
+                                        (host_info_t)&vm_stats, &count))
     {
         uint64_t freeMemory = (
-                (int64_t)vm_stats.free_count +
-                (int64_t)vm_stats.inactive_count
-                ) * (int64_t)page_size;
+            (int64_t)vm_stats.free_count +
+            (int64_t)vm_stats.inactive_count
+            ) * (int64_t)page_size;
         return freeMemory;
     }
     SLM_ASSERT("Failed to retrieve free system memory information", 0);
@@ -172,8 +174,8 @@ void DarwinMemoryMonitorTools::printMemoryInformation()
     mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
 
     if (KERN_SUCCESS != task_info(mach_task_self(),
-                TASK_BASIC_INFO, (task_info_t)&t_info,
-                &t_info_count))
+                                  TASK_BASIC_INFO, (task_info_t)&t_info,
+                                  &t_info_count))
     {
         SLM_ASSERT("Failed to retrieve used process memory information", 0);
         return 0;
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp
index c686456..17d646b 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/MemoryMonitorTools.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,12 +26,14 @@ namespace tools
 //-----------------------------------------------------------------------------
 
 MemoryMonitorTools::MemoryMonitorTools()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 MemoryMonitorTools::~MemoryMonitorTools()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp
index 61771f8..c54b0e0 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/PosixMemoryMonitorTools.cpp
@@ -1,10 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifdef linux
+#if defined(linux) || defined(__linux)
 
 #include <assert.h>
 #include <iomanip>
@@ -107,7 +107,7 @@ void PosixMemoryMonitorTools::printSystemMemoryInformation()
     printStatus( allStat );
 
     ::boost::uint64_t computedFree = ( memory.total - allStat.VmRSS ) / oToKMo;
-    ::boost::uint64_t free = memory.free / oToKMo;
+    ::boost::uint64_t free         = memory.free / oToKMo;
     OSLM_INFO(  "(ComputedFree, Free, Diff) - ( "
                 << std::setw(5) << computedFree
                 << std::setw(5) << free
@@ -168,8 +168,10 @@ void PosixMemoryMonitorTools::printMemoryInformation()
     int i, j;
     char buf[end-start];
 
-    for (i=start, j=0; i<end; i++)
+    for (i = start, j = 0; i<end; i++)
+    {
         isdigit(str[i]) && (buf[j++] = str[i]);
+    }
     buf[j] = '\0';
 
     return strtoul(buf, NULL, 0) * 1024;
@@ -197,14 +199,14 @@ void PosixMemoryMonitorTools::get_memory_stats( MemInfo & meminfo )
     meminfo.swapcached = extract_number(buf, 116, 127);
     meminfo.swaptotal = extract_number(buf, 297, 309);
     meminfo.swapfree = extract_number(buf, 322, 335);
-*/
+ */
 
     std::ifstream input ( "/proc/meminfo" );
 
     std::string line;
     if ( input.is_open() )
     {
-        while ( ! input.eof() )
+        while ( !input.eof() )
         {
             getline( input, line );
             analyseMemInfo( line, meminfo );
@@ -345,7 +347,7 @@ void PosixMemoryMonitorTools::getStatusOfPid( int pid, Status & stat)
     std::string line;
     if ( input.is_open() )
     {
-        while ( ! input.eof() )
+        while ( !input.eof() )
         {
             getline( input, line );
             analyseStatusLine(line,stat);
@@ -363,28 +365,24 @@ void PosixMemoryMonitorTools::getAllStatus( Status & allStat )
 
     allStat.VmPeak = 0;
     allStat.VmSize = 0;
-    allStat.VmLck = 0;
-    allStat.VmHWM = 0;
-    allStat.VmRSS = 0;
+    allStat.VmLck  = 0;
+    allStat.VmHWM  = 0;
+    allStat.VmRSS  = 0;
     allStat.VmData = 0;
-    allStat.VmStk = 0;
-    allStat.VmExe = 0;
-    allStat.VmLib = 0;
-    allStat.VmPTE = 0;
+    allStat.VmStk  = 0;
+    allStat.VmExe  = 0;
+    allStat.VmLib  = 0;
+    allStat.VmPTE  = 0;
 
     for(    ::boost::filesystem::directory_iterator it (path);
-    it != ::boost::filesystem::directory_iterator();
-    ++it )
+            it != ::boost::filesystem::directory_iterator();
+            ++it )
     {
 
         if( ::boost::filesystem::is_directory(*it) )
         {
             ::boost::filesystem::path tmpPath = (*it);
-#if BOOST_FILESYSTEM_VERSION > 2
             std::string dirName = tmpPath.filename().string();
-#else
-            std::string dirName = tmpPath.leaf();
-#endif
             if ( regex_match(dirName, e) )
             {
                 int pid = strtoul(dirName.c_str(), NULL, 0);
@@ -392,14 +390,14 @@ void PosixMemoryMonitorTools::getAllStatus( Status & allStat )
                 getStatusOfPid( pid, stat);
                 allStat.VmPeak += stat.VmPeak;
                 allStat.VmSize += stat.VmSize;
-                allStat.VmLck += stat.VmLck;
-                allStat.VmHWM += stat.VmHWM;
-                allStat.VmRSS += stat.VmRSS;
+                allStat.VmLck  += stat.VmLck;
+                allStat.VmHWM  += stat.VmHWM;
+                allStat.VmRSS  += stat.VmRSS;
                 allStat.VmData += stat.VmData;
-                allStat.VmStk += stat.VmStk;
-                allStat.VmExe += stat.VmExe;
-                allStat.VmLib += stat.VmLib;
-                allStat.VmPTE += stat.VmPTE;
+                allStat.VmStk  += stat.VmStk;
+                allStat.VmExe  += stat.VmExe;
+                allStat.VmLib  += stat.VmLib;
+                allStat.VmPTE  += stat.VmPTE;
             }
         }
     }
@@ -415,14 +413,14 @@ void PosixMemoryMonitorTools::printAllStatus()
 
     ::boost::uint64_t totalVmPeak = 0;
     ::boost::uint64_t totalVmSize = 0;
-    ::boost::uint64_t totalVmLck = 0;
-    ::boost::uint64_t totalVmHWM = 0;
-    ::boost::uint64_t totalVmRSS = 0;
+    ::boost::uint64_t totalVmLck  = 0;
+    ::boost::uint64_t totalVmHWM  = 0;
+    ::boost::uint64_t totalVmRSS  = 0;
     ::boost::uint64_t totalVmData = 0;
-    ::boost::uint64_t totalVmStk = 0;
-    ::boost::uint64_t totalVmExe = 0;
-    ::boost::uint64_t totalVmLib = 0;
-    ::boost::uint64_t totalVmPTE = 0;
+    ::boost::uint64_t totalVmStk  = 0;
+    ::boost::uint64_t totalVmExe  = 0;
+    ::boost::uint64_t totalVmLib  = 0;
+    ::boost::uint64_t totalVmPTE  = 0;
 
     for(    ::boost::filesystem::directory_iterator it (path);
             it != ::boost::filesystem::directory_iterator();
@@ -432,11 +430,7 @@ void PosixMemoryMonitorTools::printAllStatus()
         if( ::boost::filesystem::is_directory(*it) )
         {
             ::boost::filesystem::path tmpPath = (*it);
-#if BOOST_FILESYSTEM_VERSION > 2
             std::string dirName = tmpPath.filename().string();
-#else
-            std::string dirName = tmpPath.leaf();
-#endif
             if ( regex_match(dirName, e) )
             {
                 int pid = strtoul(dirName.c_str(), NULL, 0);
@@ -444,45 +438,48 @@ void PosixMemoryMonitorTools::printAllStatus()
                 getStatusOfPid( pid, stat);
                 totalVmPeak += stat.VmPeak;
                 totalVmSize += stat.VmSize;
-                totalVmLck += stat.VmLck;
-                totalVmHWM += stat.VmHWM;
-                totalVmRSS += stat.VmRSS;
+                totalVmLck  += stat.VmLck;
+                totalVmHWM  += stat.VmHWM;
+                totalVmRSS  += stat.VmRSS;
                 totalVmData += stat.VmData;
-                totalVmStk += stat.VmStk;
-                totalVmExe += stat.VmExe;
-                totalVmLib += stat.VmLib;
-                totalVmPTE += stat.VmPTE;
+                totalVmStk  += stat.VmStk;
+                totalVmExe  += stat.VmExe;
+                totalVmLib  += stat.VmLib;
+                totalVmPTE  += stat.VmPTE;
             }
         }
     }
     totalVmPeak /= oToMo;
     totalVmSize /= oToMo;
-    totalVmLck /= oToMo;
-    totalVmHWM /= oToMo;
-    totalVmRSS /= oToMo;
+    totalVmLck  /= oToMo;
+    totalVmHWM  /= oToMo;
+    totalVmRSS  /= oToMo;
     totalVmData /= oToMo;
-    totalVmStk /= oToMo;
-    totalVmExe /= oToMo;
-    totalVmLib /= oToMo;
-    totalVmPTE /= oToMo;
+    totalVmStk  /= oToMo;
+    totalVmExe  /= oToMo;
+    totalVmLib  /= oToMo;
+    totalVmPTE  /= oToMo;
 
-    OSLM_DEBUG("( " << totalVmPeak << std::setw(5) << totalVmSize << std::setw(5) << totalVmLck << std::setw(5) << totalVmHWM << std::setw(5) << totalVmRSS << std::setw(5) << totalVmData << std::setw(5) << totalVmStk << std::setw(5) << totalVmExe << std::setw(5) << totalVmLib << std::setw(5) << totalVmPTE << " )");
+    OSLM_DEBUG("( " << totalVmPeak << std::setw(5) << totalVmSize << std::setw(5) << totalVmLck << std::setw(
+                   5) << totalVmHWM << std::setw(5) << totalVmRSS << std::setw(5) << totalVmData << std::setw(
+                   5) << totalVmStk << std::setw(5) << totalVmExe << std::setw(5) << totalVmLib << std::setw(
+                   5) << totalVmPTE << " )");
 
     /*
-    OSLM_DEBUG("totalVmPeak = " << totalVmPeak / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmSize = " << totalVmSize / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmLck = " << totalVmLck / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmHWM = " << totalVmHWM / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmRSS = " << totalVmRSS / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmData = " << totalVmData / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmStk = " << totalVmStk / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmExe = " << totalVmExe / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmLib = " << totalVmLib / oToMo << " Mo" );
-    OSLM_DEBUG("totalVmPTE = " << totalVmPTE / oToMo << " Mo" );
-    */
+       OSLM_DEBUG("totalVmPeak = " << totalVmPeak / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmSize = " << totalVmSize / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmLck = " << totalVmLck / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmHWM = " << totalVmHWM / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmRSS = " << totalVmRSS / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmData = " << totalVmData / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmStk = " << totalVmStk / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmExe = " << totalVmExe / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmLib = " << totalVmLib / oToMo << " Mo" );
+       OSLM_DEBUG("totalVmPTE = " << totalVmPTE / oToMo << " Mo" );
+     */
 }
 
 } // namespace tools
 } // namespace fwMemory
 
-#endif
+#endif //defined(linux) || defined(__linux)
diff --git a/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp b/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp
index d3e9549..fce4848 100644
--- a/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp
+++ b/SrcLib/core/fwMemory/src/fwMemory/tools/Win32MemoryMonitorTools.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -52,7 +52,8 @@ Win32MemoryMonitorTools::~Win32MemoryMonitorTools()
     freeMemory = getFreeSystemMemory();
 #else
     ::boost::uint64_t windowsLimitForAProcess = 1.2 * 1024 * 1024 * 1024; // 1.5 Go
-    ::boost::uint64_t freeMem = std::min(getFreeSystemMemory(), windowsLimitForAProcess - getUsedProcessMemory());
+    ::boost::uint64_t freeMem                 = std::min(
+        getFreeSystemMemory(), windowsLimitForAProcess - getUsedProcessMemory());
     freeMemory = std::max((::boost::uint64_t) 0, freeMem );
 #endif
     return freeMemory;
@@ -74,7 +75,7 @@ void Win32MemoryMonitorTools::printProcessMemoryInformation()
     {
         // Get the process name.
         int nameSize = 100;
-        char * name = new char[nameSize];
+        char * name  = new char[nameSize];
 
         HMODULE hMod;
         DWORD cbNeeded;
@@ -93,16 +94,16 @@ void Win32MemoryMonitorTools::printProcessMemoryInformation()
         PROCESS_MEMORY_COUNTERS_EX pmc;
         if ( GetProcessMemoryInfo( hProcess, reinterpret_cast<PROCESS_MEMORY_COUNTERS*>(&pmc), sizeof(pmc)) )
         {
-            OSLM_INFO("    PageFaultCount : "               << (int)pmc.PageFaultCount );
-            OSLM_INFO("    PeakWorkingSetSize : "           << (int)pmc.PeakWorkingSetSize );
-            OSLM_INFO("    WorkingSetSize : "               << (int)pmc.WorkingSetSize );
-            OSLM_INFO("    QuotaPeakPagedPoolUsage : "      << (int)pmc.QuotaPeakPagedPoolUsage );
-            OSLM_INFO("    QuotaPagedPoolUsage : "          << (int)pmc.QuotaPagedPoolUsage );
-            OSLM_INFO("    QuotaPeakNonPagedPoolUsage : "   << (int)pmc.QuotaPeakNonPagedPoolUsage );
-            OSLM_INFO("    QuotaNonPagedPoolUsage : "       << (int)pmc.QuotaNonPagedPoolUsage );
-            OSLM_INFO("    PagefileUsage : "                << (int)pmc.PagefileUsage );
-            OSLM_INFO("    PeakPagefileUsage : "            << (int)pmc.PeakPagefileUsage );
-            OSLM_INFO("    PrivateUsage : "                 << (int)pmc.PrivateUsage );
+            OSLM_INFO("    PageFaultCount : " << (int)pmc.PageFaultCount );
+            OSLM_INFO("    PeakWorkingSetSize : " << (int)pmc.PeakWorkingSetSize );
+            OSLM_INFO("    WorkingSetSize : " << (int)pmc.WorkingSetSize );
+            OSLM_INFO("    QuotaPeakPagedPoolUsage : " << (int)pmc.QuotaPeakPagedPoolUsage );
+            OSLM_INFO("    QuotaPagedPoolUsage : " << (int)pmc.QuotaPagedPoolUsage );
+            OSLM_INFO("    QuotaPeakNonPagedPoolUsage : " << (int)pmc.QuotaPeakNonPagedPoolUsage );
+            OSLM_INFO("    QuotaNonPagedPoolUsage : " << (int)pmc.QuotaNonPagedPoolUsage );
+            OSLM_INFO("    PagefileUsage : " << (int)pmc.PagefileUsage );
+            OSLM_INFO("    PeakPagefileUsage : " << (int)pmc.PeakPagefileUsage );
+            OSLM_INFO("    PrivateUsage : " << (int)pmc.PrivateUsage );
         }
         else
         {
@@ -187,7 +188,8 @@ void Win32MemoryMonitorTools::printMemoryInformation()
 
     BOOL result;
     PROCESS_MEMORY_COUNTERS_EX pmc;
-    if ( result = GetProcessMemoryInfo( GetCurrentProcess(), reinterpret_cast<PROCESS_MEMORY_COUNTERS*>(&pmc), sizeof(pmc)) )
+    if ( result =
+             GetProcessMemoryInfo( GetCurrentProcess(), reinterpret_cast<PROCESS_MEMORY_COUNTERS*>(&pmc), sizeof(pmc)) )
     {
         memory = pmc.WorkingSetSize;
     }
diff --git a/SrcLib/core/fwMemory/test/cppunit.options b/SrcLib/core/fwMemory/test/cppunit.options
deleted file mode 100644
index a660ba8..0000000
--- a/SrcLib/core/fwMemory/test/cppunit.options
+++ /dev/null
@@ -1,10 +0,0 @@
-
-CLASSTEST=[
-    'BufferManagerTest',
-    'BufferObjectTest' ,
-    'ByteSizeTest'     ,
-    ]
-
-USE = ['boost']
-LIB = ['fwTools_0-1', 'fwCore_0-1', 'fwMemory_0-1']
-CONSOLE='yes'
diff --git a/SrcLib/core/fwMemory/test/tu/include/BufferManagerTest.hpp b/SrcLib/core/fwMemory/test/tu/include/BufferManagerTest.hpp
index 7363650..355c6b2 100644
--- a/SrcLib/core/fwMemory/test/tu/include/BufferManagerTest.hpp
+++ b/SrcLib/core/fwMemory/test/tu/include/BufferManagerTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEMORY_UT_BUFFERMANAGER_HPP__
-#define __FWMEMORY_UT_BUFFERMANAGER_HPP__
+#ifndef __FWMEMORY_UT_BUFFERMANAGERTEST_HPP__
+#define __FWMEMORY_UT_BUFFERMANAGERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,10 +16,10 @@ namespace ut
 
 class BufferManagerTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( BufferManagerTest );
-    CPPUNIT_TEST( allocateTest );
-    CPPUNIT_TEST( memoryInfoTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( BufferManagerTest );
+CPPUNIT_TEST( allocateTest );
+CPPUNIT_TEST( memoryInfoTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -33,4 +33,4 @@ public:
 } // namespace ut
 } // namespace fwMemory
 
-#endif //__FWMEMORY_UT_BUFFERMANAGER_HPP__
+#endif //__FWMEMORY_UT_BUFFERMANAGERTEST_HPP__
diff --git a/SrcLib/core/fwMemory/test/tu/include/BufferObjectTest.hpp b/SrcLib/core/fwMemory/test/tu/include/BufferObjectTest.hpp
index 1185cdd..d164dc1 100644
--- a/SrcLib/core/fwMemory/test/tu/include/BufferObjectTest.hpp
+++ b/SrcLib/core/fwMemory/test/tu/include/BufferObjectTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEMORY_UT_BUFFEROBJECT_HPP__
-#define __FWMEMORY_UT_BUFFEROBJECT_HPP__
+#ifndef __FWMEMORY_UT_BUFFEROBJECTTEST_HPP__
+#define __FWMEMORY_UT_BUFFEROBJECTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,11 +16,11 @@ namespace ut
 
 class BufferObjectTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( BufferObjectTest );
-    CPPUNIT_TEST( allocateTest );
-    CPPUNIT_TEST( allocateZeroTest );
-    CPPUNIT_TEST( lockThreadedStressTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( BufferObjectTest );
+CPPUNIT_TEST( allocateTest );
+CPPUNIT_TEST( allocateZeroTest );
+CPPUNIT_TEST( lockThreadedStressTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -35,4 +35,4 @@ public:
 } // namespace ut
 } // namespace fwMemory
 
-#endif //__FWMEMORY_UT_BUFFEROBJECT_HPP__
+#endif //__FWMEMORY_UT_BUFFEROBJECTTEST_HPP__
diff --git a/SrcLib/core/fwMemory/test/tu/include/ByteSizeTest.hpp b/SrcLib/core/fwMemory/test/tu/include/ByteSizeTest.hpp
index 8e46127..c9a8176 100644
--- a/SrcLib/core/fwMemory/test/tu/include/ByteSizeTest.hpp
+++ b/SrcLib/core/fwMemory/test/tu/include/ByteSizeTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMEMORY_UT_BYTESIZE_HPP__
-#define __FWMEMORY_UT_BYTESIZE_HPP__
+#ifndef __FWMEMORY_UT_BYTESIZETEST_HPP__
+#define __FWMEMORY_UT_BYTESIZETEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class ByteSizeTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ByteSizeTest );
-    CPPUNIT_TEST( byteSizeTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ByteSizeTest );
+CPPUNIT_TEST( byteSizeTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -31,5 +31,5 @@ public:
 } // namespace ut
 } // namespace fwMemory
 
-#endif //__FWMEMORY_UT_BYTESIZE_HPP__
+#endif //__FWMEMORY_UT_BYTESIZETEST_HPP__
 
diff --git a/SrcLib/core/fwMemory/test/tu/src/BufferManagerTest.cpp b/SrcLib/core/fwMemory/test/tu/src/BufferManagerTest.cpp
index acdf3a3..6295312 100644
--- a/SrcLib/core/fwMemory/test/tu/src/BufferManagerTest.cpp
+++ b/SrcLib/core/fwMemory/test/tu/src/BufferManagerTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwMemory/test/tu/src/BufferObjectTest.cpp b/SrcLib/core/fwMemory/test/tu/src/BufferObjectTest.cpp
index c0662bb..b917b98 100644
--- a/SrcLib/core/fwMemory/test/tu/src/BufferObjectTest.cpp
+++ b/SrcLib/core/fwMemory/test/tu/src/BufferObjectTest.cpp
@@ -1,23 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <boost/type_traits/is_const.hpp>
-#include <boost/type_traits/remove_pointer.hpp>
-
-#include <limits>
-
-#include <boost/thread.hpp>
-#include <boost/bind.hpp>
+#include "BufferObjectTest.hpp"
 
 #include <fwMemory/BufferObject.hpp>
 #include <fwMemory/BufferAllocationPolicy.hpp>
 #include <fwMemory/exception/Memory.hpp>
 
-#include "BufferObjectTest.hpp"
+#include <boost/type_traits/is_const.hpp>
+#include <boost/type_traits/remove_pointer.hpp>
+
+#include <boost/thread.hpp>
+#include <functional>
+#include <limits>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwMemory::ut::BufferObjectTest );
@@ -152,7 +150,7 @@ void BufferObjectTest::allocateTest()
     CPPUNIT_ASSERT( bo->lock().getBuffer() != NULL );
 
     const size_t SMALLER_REALLOC_SIZE = 1024;
-    const size_t BIGGER_REALLOC_SIZE = SIZE+1024;
+    const size_t BIGGER_REALLOC_SIZE  = SIZE+1024;
 
     bo->reallocate(SMALLER_REALLOC_SIZE);
     CPPUNIT_ASSERT( !bo->isEmpty() );
@@ -201,9 +199,9 @@ void stressLock(::fwMemory::BufferObject::sptr bo, int nbLocks, int nbTest)
 {
     std::vector< ::fwMemory::BufferObject::Lock > m_locks;
 
-    for( int t = 0; t < nbTest ; ++t)
+    for( int t = 0; t < nbTest; ++t)
     {
-        for( int i = 0; i < nbLocks ; ++i)
+        for( int i = 0; i < nbLocks; ++i)
         {
             m_locks.push_back(bo->lock());
         }
@@ -221,10 +219,10 @@ void BufferObjectTest::lockThreadedStressTest()
 
     boost::thread_group group;
 
-    group.create_thread( boost::bind( &stressLock, bo, 800, 600 ) );
-    group.create_thread( boost::bind( &stressLock, bo, 600, 800 ) );
-    group.create_thread( boost::bind( &stressLock, bo, 452, 692 ) );
-    group.create_thread( boost::bind( &stressLock, bo, 253, 345 ) );
+    group.create_thread( std::bind( &stressLock, bo, 800, 600 ) );
+    group.create_thread( std::bind( &stressLock, bo, 600, 800 ) );
+    group.create_thread( std::bind( &stressLock, bo, 452, 692 ) );
+    group.create_thread( std::bind( &stressLock, bo, 253, 345 ) );
 
     group.join_all();
 
diff --git a/SrcLib/core/fwMemory/test/tu/src/ByteSizeTest.cpp b/SrcLib/core/fwMemory/test/tu/src/ByteSizeTest.cpp
index 09eed59..a4c145f 100644
--- a/SrcLib/core/fwMemory/test/tu/src/ByteSizeTest.cpp
+++ b/SrcLib/core/fwMemory/test/tu/src/ByteSizeTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -140,21 +140,21 @@ void ByteSizeTest::byteSizeTest()
     {
         std::string size("  1.42   MiB ");
         ::fwMemory::ByteSize bsize(size);
-        ::fwMemory::ByteSize::SizeType refSize = 1488977 ;
+        ::fwMemory::ByteSize::SizeType refSize    = 1488977;
         ::fwMemory::ByteSize::SizeType resultSize = bsize.getSize();
         CPPUNIT_ASSERT_EQUAL(refSize, resultSize);
     }
     {
         std::string size("1.42 TB  ");
         ::fwMemory::ByteSize bsize(size);
-        ::fwMemory::ByteSize::SizeType refSize = 1420000000000LL ;
+        ::fwMemory::ByteSize::SizeType refSize    = 1420000000000LL;
         ::fwMemory::ByteSize::SizeType resultSize = bsize.getSize();
         CPPUNIT_ASSERT_EQUAL(refSize, resultSize);
     }
     {
         std::string size("  1.42 PiB");
         ::fwMemory::ByteSize bsize(size);
-        ::fwMemory::ByteSize::SizeType refSize = 1598777867716526LL ;
+        ::fwMemory::ByteSize::SizeType refSize    = 1598777867716526LL;
         ::fwMemory::ByteSize::SizeType resultSize = bsize.getSize();
         CPPUNIT_ASSERT_EQUAL(refSize, resultSize);
     }
@@ -162,7 +162,7 @@ void ByteSizeTest::byteSizeTest()
     {
         std::string size("1.66MiB");
         ::fwMemory::ByteSize bsize(size);
-        ::fwMemory::ByteSize::SizeType refSize = 1740636 ;
+        ::fwMemory::ByteSize::SizeType refSize    = 1740636;
         ::fwMemory::ByteSize::SizeType resultSize = bsize.getSize();
         CPPUNIT_ASSERT_EQUAL(refSize, resultSize);
     }
diff --git a/SrcLib/core/fwPython/CMakeLists.txt b/SrcLib/core/fwPython/CMakeLists.txt
deleted file mode 100644
index 1a6d0d6..0000000
--- a/SrcLib/core/fwPython/CMakeLists.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-fwLoadProperties()
-fwUseForwardInclude(
-    fwTools
-)
-
-
-find_package(Boost COMPONENTS python REQUIRED)
-find_package(PythonLibs 2.7 REQUIRED )
-get_filename_component(PYTHON_DIR_NAME "${PYTHON_INCLUDE_DIR}" NAME)
-get_filename_component(PYTHON_DIR "${PYTHON_INCLUDE_DIR}" PATH)
-get_filename_component(PYTHON_DIR "${PYTHON_DIR}" PATH)
-
-if (WIN32)
-    string(REGEX REPLACE "2.7$" "27" PYTHON_DIR_NAME "${PYTHON_DIR_NAME}")
- endif()
-
-file(COPY "${PYTHON_INCLUDE_DIR}/" DESTINATION "${CMAKE_BINARY_DIR}/PythonHome/include/")
-file(COPY "${PYTHON_DIR}/lib/${PYTHON_DIR_NAME}/" DESTINATION "${CMAKE_BINARY_DIR}/PythonHome/lib/")
-
-if(${NAME}_INSTALL)
-    install(DIRECTORY "${PYTHON_INCLUDE_DIR}/" DESTINATION PythonHome/include/ COMPONENT Python)
-    install(DIRECTORY "${PYTHON_DIR}/lib/${PYTHON_DIR_NAME}/" DESTINATION PythonHome/lib/ COMPONENT Python)
-endif()
-
-
-fwForwardInclude(${Boost_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES} ${PYTHON_LIBRARIES})
-
diff --git a/SrcLib/core/fwPython/Properties.cmake b/SrcLib/core/fwPython/Properties.cmake
deleted file mode 100644
index 290a545..0000000
--- a/SrcLib/core/fwPython/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwPython )
-set( VERSION 0.1 )
-set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwCore fwData fwServices fwTools )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwPython/bin/build.options b/SrcLib/core/fwPython/bin/build.options
deleted file mode 100644
index 79e3485..0000000
--- a/SrcLib/core/fwPython/bin/build.options
+++ /dev/null
@@ -1,5 +0,0 @@
-TYPE    = "shared"
-USE     = [ 'boostPython' ]
-LIB     = [ 'fwData_0-1', 'fwServices_0-1', 'fwComEd_0-1']
-VERSION = '0-1'
-
diff --git a/SrcLib/core/fwPython/include/fwPython/Interpreter.hpp b/SrcLib/core/fwPython/include/fwPython/Interpreter.hpp
deleted file mode 100644
index 531bff3..0000000
--- a/SrcLib/core/fwPython/include/fwPython/Interpreter.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_INTERPRETER_HPP_
-#define _FWPYTHON_INTERPRETER_HPP_
-
-#include <boost/python.hpp>
-#undef tolower //defined by python, conflicting with std::lower
-
-#include <string>
-
-#include <fwTools/Object.hpp>
-
-#include "fwPython/config.hpp"
-
-namespace fwPython
-{
-
-class FWPYTHON_CLASS_API Interpreter
-{
-
-public :
-
-   // create a python interpretor
-   FWPYTHON_API Interpreter();
-
-
-   // a destroy the  python interpretor
-   FWPYTHON_API ~Interpreter();
-
-   // insert an object inside the python global dictionnay with the specified key
-   FWPYTHON_API void addObject(std::string key, ::fwTools::Object::sptr object);
-
-
-   //execute the python code sequence
-   FWPYTHON_API int execute(std::string code);
-
-   /**
-    * @brief Return the value of the given sys module attribute value.
-    *
-    * @param moduleName Python module name
-    * @param attrName   attribute name of the specified Python module
-    *
-    * @return attribute value
-    */
-   FWPYTHON_API std::string getAttrValue(const std::string &moduleName, const std::string &attrName);
-
-   protected :
-
-   void importBindings();
-
-   //direct accesor to global dict
-   boost::python::object m_globals;
-   //direct accesor to local dict
-   boost::python::dict m_locals;
-
-};
-
-
-
-} // namespace fwPython
-
-
-
-#endif //_FWPYTHON_INTERPRETER_HPP_
-
diff --git a/SrcLib/core/fwPython/include/fwPython/bindings/Image.hpp b/SrcLib/core/fwPython/include/fwPython/bindings/Image.hpp
deleted file mode 100644
index 9892236..0000000
--- a/SrcLib/core/fwPython/include/fwPython/bindings/Image.hpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_BINDINGS_IMAGE_HPP_
-#define _FWPYTHON_BINDINGS_IMAGE_HPP_
-
-namespace fwPython {
-namespace bindings {
-
-void export_image();
-
-} //namespace bindings
-} //namespace fwPython
-
-#endif // _FWPYTHON_BINDINGS_IMAGE_HPP_
diff --git a/SrcLib/core/fwPython/include/fwPython/bindings/STLContainers.hpp b/SrcLib/core/fwPython/include/fwPython/bindings/STLContainers.hpp
deleted file mode 100644
index d4b1e0a..0000000
--- a/SrcLib/core/fwPython/include/fwPython/bindings/STLContainers.hpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_BINDINGS_STLCONTAINERS_HPP_
-#define _FWPYTHON_BINDINGS_STLCONTAINERS_HPP_
-
-namespace fwPython {
-namespace bindings {
-
-void export_STLContainers();
-
-/// an helper to convert std container to python list
-template< typename STDCONTAINER>
-::boost::python::list make_pylist( STDCONTAINER &cont);
-
-} //namespace bindings
-} //namespace fwPython
-
-#include "fwPython/bindings/STLContainers.hxx"
-
-#endif // _FWPYTHON_BINDINGS_STLCONTAINERS_HPP_
diff --git a/SrcLib/core/fwPython/include/fwPython/bindings/STLContainers.hxx b/SrcLib/core/fwPython/include/fwPython/bindings/STLContainers.hxx
deleted file mode 100644
index 530f4c8..0000000
--- a/SrcLib/core/fwPython/include/fwPython/bindings/STLContainers.hxx
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/python.hpp>
-#include <boost/python/tuple.hpp>
-
-#undef tolower //defined by python, conflicting with std::lower
-
-namespace fwPython {
-namespace bindings {
-
-
-
-template< typename STDCONTAINER>
-::boost::python::list make_pylist( STDCONTAINER &cont)
-{
-    ::boost::python::list list;
-     typename STDCONTAINER::const_iterator iter;
-    for ( iter=cont.begin(); iter != cont.end(); ++iter )
-    {
-        list.append(  ::boost::python::object(*iter) );
-    }
-    return list;
-}
-
-
-} //namespace bindings
-} //namespace fwPython
-
diff --git a/SrcLib/core/fwPython/include/fwPython/bindings/base.hpp b/SrcLib/core/fwPython/include/fwPython/bindings/base.hpp
deleted file mode 100644
index 58f0d84..0000000
--- a/SrcLib/core/fwPython/include/fwPython/bindings/base.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_BINDINGS_HPP_
-#define _FWPYTHON_BINDINGS_HPP_
-
-
-#include <string>
-#include "fwPython/config.hpp"
-
-namespace fwPython
-{
-namespace bindings
-{
-
-FWPYTHON_API void initialize();
-
-
-} //namespace bindings
-} //namespace fwPython
-
-
-#endif //_FWPYTHON_BINDINGS_HPP_
diff --git a/SrcLib/core/fwPython/include/fwPython/bindings/namespace.hpp b/SrcLib/core/fwPython/include/fwPython/bindings/namespace.hpp
deleted file mode 100644
index 9d3b0f1..0000000
--- a/SrcLib/core/fwPython/include/fwPython/bindings/namespace.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_BINDINGS_NAMESPACE_HPP_
-#define _FWPYTHON_BINDINGS_NAMESPACE_HPP_
-
-namespace fwPython
-{
-
-/**
- * @brief       fwPython provides common foundations for python in fw4spl.
- * @namespace   fwPython::binding
- * 
- * @date        2009-2010.
- *
- */
-namespace bindings
-{
-} //namespace bindings
-
-} //namespace fwPython
-
-#endif /* _FWPYTHON_NAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwPython/include/fwPython/config.hpp b/SrcLib/core/fwPython/include/fwPython/config.hpp
deleted file mode 100644
index 2c0bb62..0000000
--- a/SrcLib/core/fwPython/include/fwPython/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_CONFIG_HPP_
-#define _FWPYTHON_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWPYTHON_EXPORTS
-    #define FWPYTHON_API __declspec(dllexport)
-    #else
-    #define FWPYTHON_API __declspec(dllimport)
-    #endif
-
-    #define FWPYTHON_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWPYTHON_EXPORTS
-    #define FWPYTHON_API __attribute__ ((visibility("default")))
-    #define FWPYTHON_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define FWPYTHON_API __attribute__ ((visibility("hidden")))
-    #define FWPYTHON_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define FWPYTHON_API
-    #define FWPYTHON_CLASS_API
-
-#endif
-
-#endif //FWPYTHON_CONFIG_API
diff --git a/SrcLib/core/fwPython/include/fwPython/namespace.hpp b/SrcLib/core/fwPython/include/fwPython/namespace.hpp
deleted file mode 100644
index 44fe19c..0000000
--- a/SrcLib/core/fwPython/include/fwPython/namespace.hpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_NAMESPACE_HPP_
-#define _FWPYTHON_NAMESPACE_HPP_
-
-/**
- * @brief       fwPython provides common foundations for python in fw4spl.
- * @namespace   fwPython
- * 
- * @date        2009-2010.
- */
-namespace fwPython
-{
-} //namespace fwPython
-
-#endif /* _FWPYTHON_NAMESPACE_HPP_ */
diff --git a/SrcLib/core/fwPython/include/fwPython/python.hpp b/SrcLib/core/fwPython/include/fwPython/python.hpp
deleted file mode 100644
index 03b4fb2..0000000
--- a/SrcLib/core/fwPython/include/fwPython/python.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWPYTHON_PYTHON_HPP_
-#define _FWPYTHON_PYTHON_HPP_
-
-
-#include <string>
-#include <vector>
-
-#include "fwPython/config.hpp"
-
-
-namespace fwPython
-{
-
-FWPYTHON_API void initialize();
-FWPYTHON_API bool isInitialized();
-FWPYTHON_API void finalize();
-
-FWPYTHON_API void setHome(std::string path);
-FWPYTHON_API void addPath(std::string path);
-
-FWPYTHON_API char* getHome();
-FWPYTHON_API std::vector<std::string> getPath();
-
-} //namespace fwPython
-
-#endif //_FWPYTHON_PYTHON_HPP_
diff --git a/SrcLib/core/fwPython/src/fwPython/Interpreter.cpp b/SrcLib/core/fwPython/src/fwPython/Interpreter.cpp
deleted file mode 100644
index ad1ead6..0000000
--- a/SrcLib/core/fwPython/src/fwPython/Interpreter.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-#include <boost/python.hpp>
-#include <fwCore/base.hpp>
-
-#include "fwPython/python.hpp"
-#include "fwPython/bindings/base.hpp"
-
-#include "fwPython/Interpreter.hpp"
-
-namespace fwPython
-{
-
-//------------------------------------------------------------------------------
-
-::boost::python::dict GetNamespace( char const* mod )
-{
-    using namespace boost::python;
-    dict moduleNamespace( import( mod ).attr( "__dict__" ) );
-    return moduleNamespace;
-}
-
-//------------------------------------------------------------------------------
-
-Interpreter::Interpreter()
-{
-    ::fwPython::initialize();
-    //SLM_ASSERT( "python is not initialized", ::fwPython::isInitialized() );
-
-    namespace bp = ::boost::python;
-
-    try
-    {
-        // Retrieve the main module.
-        bp::object main = bp::import("__main__");
-        // Retrieve the main module's namespace
-        m_globals= main.attr("__dict__");
-
-        bp::exec("import sys\n"
-                 "\n"
-                 "class fwPyIOHandler:\n"
-                 "    def __init__(self):\n"
-                 "        import cStringIO\n"
-                 "        self.listHook = []\n"
-                 "        self.__stringIO = cStringIO.StringIO()\n"
-                 "\n"
-                 "    def write(self, msg):\n"
-                 "        self.__stringIO.write(msg)\n"
-                 "        for hook in self.listHook:\n"
-                 "            hook.write(msg)\n"
-                 "\n"
-                 "    def read(self, msg):\n"
-                 "        self.__stringIO.read(msg)\n"
-                 "        for hook in self.listHook:\n"
-                 "            hook.read(msg)\n"
-                 "\n"
-                 "    def close(self):\n"
-                 "        self.__stringIO.close()\n"
-                 "        for hook in self.listHook:\n"
-                 "            hook.close()\n"
-                 "\n"
-                 "    def getvalue(self):\n"
-                 "        return self.__stringIO.getvalue()\n"
-                 "\n"
-                 "sys.stderr = fwPyIOHandler()\n"
-                 "sys.stdout = fwPyIOHandler()\n",
-                 m_globals,
-                 bp::dict());
-    }
-    catch( boost::python::error_already_set const &)
-    {
-        PyErr_Print();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-Interpreter::~Interpreter()
-{
-   ::fwPython::finalize();
-}
-
-//------------------------------------------------------------------------------
-
-void Interpreter::addObject( std::string key, ::fwTools::Object::sptr object)
-{
-   namespace bp = ::boost::python;
-    try
-    {
-        ::boost::python::object pyObject = ::boost::python::object( object );
-        m_globals[key] = pyObject;
-    }
-   catch( boost::python::error_already_set const &)
-    {
-        PyErr_Print();
-    }
-}
-
-//------------------------------------------------------------------------------
-
-int Interpreter::execute(std::string code)
-{
-    namespace bp = ::boost::python;
-    int succes=0;
-
-    try
-    {
-        bp::object ignored = bp::exec( code.c_str(), m_globals, m_locals );
-    }
-    catch( bp::error_already_set const &)
-    {
-        PyErr_Print();
-        succes = -1;
-    }
-    return succes;
-}
-
-//------------------------------------------------------------------------------
-
-std::string Interpreter::getAttrValue(const std::string &moduleName, const std::string &attrName)
-{
-    namespace bp = ::boost::python;
-
-    try
-    {
-        bp::object mod(bp::handle<>(PyImport_ImportModule(moduleName.c_str())));
-        bp::object attr = mod.attr(attrName.c_str());
-        return bp::extract<std::string>(attr.attr("getvalue")());
-    }
-    catch( bp::error_already_set const &)
-    {
-        PyErr_Print();
-
-        bp::object sys(bp::handle<>(PyImport_ImportModule("sys")));
-        bp::object out = sys.attr("stderr");
-        return bp::extract<std::string>(out.attr("getvalue")());
-    }
-}
-
-//------------------------------------------------------------------------------
-
-}
diff --git a/SrcLib/core/fwPython/src/fwPython/bindings/Image.cpp b/SrcLib/core/fwPython/src/fwPython/bindings/Image.cpp
deleted file mode 100644
index 2553ecb..0000000
--- a/SrcLib/core/fwPython/src/fwPython/bindings/Image.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/python.hpp>
-#include <boost/python/stl_iterator.hpp>
-#include <boost/preprocessor/cat.hpp>
-
-#include <boost/assign/list_of.hpp>
-
-#include <map>
-#include <fwTools/DynamicType.hpp>
-#include <fwTools/StringKeyTypeMapping.hpp> // for makedynamicType
-
-#include <fwData/Image.hpp>
-#include <fwCore/base.hpp>
-
-#include <fwComEd/helper/Image.hpp>
-
-#include "fwPython/bindings/Image.hpp"
-
-#include "fwPython/bindings/STLContainers.hpp"
-
-
-// transform CPP type description in python buffer-info.format
-// format described : http://docs.python.org/library/struct.html#module-struct section 7.3.2.2. Format Characters TODO to complete
-static std::map< ::fwTools::Type, const char * > typeCPP2Python =
-        ::boost::assign::map_list_of
-                                   ( ::fwTools::Type("int8"), "c" )
-                                   ( ::fwTools::Type("uint8"), "B" )
-                                   ( ::fwTools::Type("int16"), "h" )
-                                   ( ::fwTools::Type("uint16"), "H" )
-                                   ( ::fwTools::Type("int32"), "i" )
-                                   ( ::fwTools::Type("uint32"), "I" )
-                                   ( ::fwTools::Type("float"), "f" )
-                                   ( ::fwTools::Type("double"), "d" )
-                                   ;
-
-
-namespace fwPython
-{
-namespace bindings
-{
-
-//------------------------------------------------------------------------------
-
-::boost::python::object getImageBuffer (::fwData::Image::sptr image)
-{
-    using namespace ::boost::python;
-
-    ::fwComEd::helper::Image imageHelper(image);
-    if ( imageHelper.getBuffer() )
-    {
-        Py_buffer *pybuf = new Py_buffer;
-        pybuf->obj = NULL;
-        pybuf->buf = imageHelper.getBuffer();
-        pybuf->readonly= 0;
-        pybuf->len = image->getSizeInBytes();
-        pybuf->format =  (char *)typeCPP2Python[ image->getType() ];
-        pybuf->itemsize =  image->getType().sizeOf() ;
-        pybuf->ndim = image->getNumberOfDimensions();
-        pybuf->shape =  new Py_ssize_t[image->getNumberOfDimensions()];
-        pybuf->strides =  new Py_ssize_t[image->getNumberOfDimensions()];
-        pybuf->suboffsets =  new Py_ssize_t[image->getNumberOfDimensions()];
-        pybuf->internal = NULL;
-
-        std::copy(  image->getSize().begin(), image->getSize().end(), pybuf->shape);
-        std::fill(pybuf->suboffsets, pybuf->suboffsets+3, -1);
-
-        PyBuffer_FillContiguousStrides(   pybuf->ndim , pybuf->shape, pybuf->strides, pybuf->itemsize, 'F');
-
-        handle<> bufHandle( PyMemoryView_FromBuffer( pybuf ) );
-        delete pybuf;
-
-        return object( bufHandle );
-    }
-
-    return object();
-}
-
-//------------------------------------------------------------------------------
-
-std::string getPixelTypeAsString( ::fwData::Image::sptr image )
-{
-    return image->getType().string();
-}
-
-//------------------------------------------------------------------------------
-
-void setPixelTypeFromString( ::fwData::Image::sptr image, std::string type)
-{
-    ::fwTools::Type fwtype = ::fwTools::Type( type );
-    if ( fwtype ==  ::fwTools::Type::s_UNSPECIFIED_TYPE )
-    {
-        FW_RAISE("Incorrect PixelType : supported : int8, uint8, .. 16, ... 32 ... 64 , float,double");
-    }
-    else
-    {
-        image->setType(  fwtype );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-
-#define __FWPYTHON_pygGetSetter( ATTRIB )                                                                       \
-        ::boost::python::list get##ATTRIB(fwData::Image::sptr image)                                 \
-        {                                                                                            \
-            return make_pylist (image->get##ATTRIB() );                                              \
-        }                                                                                            \
-                                                                                                     \
-        void set##ATTRIB( fwData::Image::sptr image, ::boost::python::object ob)                     \
-        {                                                                                            \
-            ::boost::python::stl_input_iterator<fwData::Image::BOOST_PP_CAT(ATTRIB,Type)::value_type> begin(ob), end; \
-            fwData::Image::BOOST_PP_CAT(ATTRIB,Type)  value(begin, end);                                          \
-            image->set##ATTRIB( value );                                                             \
-        }
-
-
-
-__FWPYTHON_pygGetSetter(Size)
-__FWPYTHON_pygGetSetter(Spacing)
-__FWPYTHON_pygGetSetter(Origin)
-
-#undef __FWPYTHON_pygGetSetter
-
-
-// use a wrapper because deepCopy is a virtual function
-void deepCopyImageWrapper( fwData::Image::sptr imageSelf, fwData::Image::sptr imageSrc)
-{
-    imageSelf->deepCopy(imageSrc);
-}
-
-//------------------------------------------------------------------------------
-
-void export_image()
-{
-    using namespace ::boost::python;
-    size_t (::fwData::Image::*SIMPLEIMAGEALLOCATE)(void) =  &::fwData::Image::allocate;
-    class_< ::fwData::Image, bases< ::fwData::Object >, ::fwData::Image::sptr, boost::noncopyable >("Image", no_init)
-       .add_property("buffer",  &getImageBuffer )
-       .add_property("type",  &getPixelTypeAsString, & setPixelTypeFromString )
-       .add_property("spacing", &getSpacing,  &setSpacing )
-       .add_property("size", &getSize,  &setSize )
-       .add_property("origin", &getOrigin,  &setOrigin )
-       .add_property("number_of_dimentions", &::fwData::Image::getNumberOfDimensions )
-       .def("allocate", SIMPLEIMAGEALLOCATE )
-       .def("deepCopy",  deepCopyImageWrapper )
-       ;
-}
-
-//------------------------------------------------------------------------------
-
-} // end namespace bindings
-} // end namespace fwPython
diff --git a/SrcLib/core/fwPython/src/fwPython/bindings/STLContainers.cpp b/SrcLib/core/fwPython/src/fwPython/bindings/STLContainers.cpp
deleted file mode 100644
index 50a3106..0000000
--- a/SrcLib/core/fwPython/src/fwPython/bindings/STLContainers.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/python.hpp>
-#include <boost/cstdint.hpp>
-
-#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
-#include <boost/python/make_constructor.hpp>
-
-#include <boost/algorithm/string/replace.hpp>
-
-#include <vector>
-
-#include <fwTools/Stringizer.hpp>
-#include <fwCore/Demangler.hpp>
-#include "fwPython/bindings/STLContainers.hpp"
-
-namespace fwPython
-{
-namespace bindings
-{
-
-template <class T>
-std::string getString(std::vector<T> &v)
-{
-    std::string res;
-    res +=  fwTools::getString(v.begin(),v.end());
-    return res;
-}
-
-
-template< typename VECTOR >
-VECTOR *vectorFromList( ::boost::python::list  &ns )
-{
-    unsigned long  len = ::boost::python::len(ns);
-    VECTOR *vect = new VECTOR( len );
-    for (unsigned long i=0; i<len; ++i )
-        (*vect)[i] = ::boost::python::extract<typename VECTOR::value_type> (ns[i]);
-    return vect;
-}
-
-
-
-
-template< typename T >
-void wrap_vector()
-{
-    using namespace boost::python;
-    std::string className = ::fwCore::Demangler(typeid(typename T::value_type)).getLeafClassname();
-    ::boost::algorithm::replace_all( className, " ", "");
-    className += "Container";
-    std::string docString = std::string( "binding of " ) + ::fwCore::Demangler(typeid(T)).getClassname();
-    class_< T  >( className.c_str(), docString.c_str(), init< typename T::size_type > () )
-        .def("__init__", make_constructor( vectorFromList< T > ))
-        // install wrapper to __len__, __getitem__, __setitem__, __delitem__, __iter__ and __contains.
-        .def(vector_indexing_suite< T >())
-
-        // allow a pretty print
-        .def("__str__", getString< typename T::value_type >)
-        ;
-}
-//------------------------------------------------------------------------------
-
-void export_STLContainers()
-{
-    using namespace boost::python;
-    wrap_vector< std::vector<boost::int8_t> >();
-    wrap_vector< std::vector<boost::int16_t> >();
-    wrap_vector< std::vector<boost::int32_t> >();
-    wrap_vector< std::vector<boost::int64_t> >();
-
-    wrap_vector< std::vector<boost::uint8_t> >();
-    wrap_vector< std::vector<boost::uint16_t> >();
-    wrap_vector< std::vector<boost::uint32_t> >();
-    wrap_vector< std::vector<boost::uint64_t> >();
-
-    wrap_vector< std::vector<float> >();
-    wrap_vector< std::vector<double> >();
-
-#ifdef __MACOSX__
-    wrap_vector< std::vector<size_t> >();
-#endif
-}
-
-} // end namespace bindings
-} // end namespace fwPython
diff --git a/SrcLib/core/fwPython/src/fwPython/bindings/base.cpp b/SrcLib/core/fwPython/src/fwPython/bindings/base.cpp
deleted file mode 100644
index 94a4c0a..0000000
--- a/SrcLib/core/fwPython/src/fwPython/bindings/base.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/python.hpp>
-#include <iostream>
-
-#include <fwTools/Object.hpp>
-
-#include <fwData/Boolean.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/String.hpp>
-#include <fwData/Image.hpp>
-
-#include <fwServices/IService.hpp>
-
-#include "fwPython/python.hpp"
-#include "fwPython/bindings/base.hpp"
-#include "fwPython/bindings/Image.hpp"
-#include "fwPython/bindings/STLContainers.hpp"
-
-
-// HACK -- CRIME SCENE -- DOT NOT CROSS {
-struct IServiceProxy
-{
-    typedef SPTR(IServiceProxy) sptr ;
-
-    IServiceProxy(const ::fwTools::Object::sptr obj)
-    {
-        ::fwServices::IService::sptr service;
-        service = ::fwServices::IService::dynamicCast(obj);
-        SLM_ASSERT("Cast to service failed", service);
-        this->m_service = service;
-    };
-
-    void start() { m_service->start();  };
-    void update(){ m_service->update();   };
-    void stop()  { m_service->stop(); };
-
-    ::fwServices::IService::sptr m_service;
-
-};
-// }
-
-
-
-IServiceProxy getSrv(std::string o)
-{
-    ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject( o );
-    IServiceProxy proxy(obj);
-    return proxy;
-}
-
-BOOST_PYTHON_MODULE(fwData) // create a void initimage() function
-{                         // install  Py_InitModule with name + methods/class/function
-    using namespace ::boost::python;
-
-    // fwTools::Object binding
-    class_< ::fwTools::Object , ::fwTools::Object::sptr, boost::noncopyable >("Object",no_init)
-                .def("getClassname", &::fwTools::Object::className );
-
-    def( "getObject", &::fwTools::fwID::getObject );
-    def( "getSrv", &getSrv );
-
-    // fwData::Object binding
-    class_<
-        ::fwData::Object,
-        bases< ::fwTools::Object >,
-        ::fwData::Object::sptr,
-        boost::noncopyable
-            >("Object",no_init);
-
-    // fwServices::IService binding
-
-    class_< IServiceProxy >("IService",no_init)
-        .def("update", &IServiceProxy::update)
-        .def("start", &IServiceProxy::start)
-        .def("stop", &IServiceProxy::stop)
-        ;
-
-    // fwData:: generic fields bindings
-    class_<
-        ::fwData::Boolean,
-        bases< ::fwData::Object >,
-        ::fwData::Boolean::sptr,
-        boost::noncopyable
-            >("Boolean", no_init)
-            .add_property("value",  &::fwData::Boolean::getValue  ,  &::fwData::Boolean::setValue );
-
-    class_< ::fwData::Float, bases< ::fwData::Object >, ::fwData::Float::sptr, boost::noncopyable >("Float", no_init)
-              .add_property("value",  &::fwData::Float::getValue  ,  &::fwData::Float::setValue );
-
-    class_<
-        ::fwData::Integer,
-        bases< ::fwData::Object >,
-        ::fwData::Integer::sptr,
-        boost::noncopyable
-            >("Integer", no_init)
-              .add_property("value",  &::fwData::Integer::getValue  ,  &::fwData::Integer::setValue );
-
-    class_<
-        ::fwData::String,
-        bases< ::fwData::Object >,
-        ::fwData::String::sptr,
-        boost::noncopyable
-            >("String", no_init)
-              .add_property("value",  &::fwData::String::getValue  ,  &::fwData::String::setValue );
-
-    ::fwPython::bindings::export_STLContainers();
-    ::fwPython::bindings::export_image();
-
-}
-
-
-namespace fwPython
-{
-namespace bindings
-{
-
-void initialize()
-{
-    static bool initialized = false;
-    if (initialized)
-    {
-        return;
-    }
-
-    SLM_ASSERT(
-            "Python interpreter have to be initialzed before bindings.",
-            ::fwPython::isInitialized()
-            );
-
-    initfwData();
-    initialized = true;
-}
-
-} //namespace bindings
-} //namespace fwPython
-
diff --git a/SrcLib/core/fwPython/src/fwPython/python.cpp b/SrcLib/core/fwPython/src/fwPython/python.cpp
deleted file mode 100644
index 4610c1e..0000000
--- a/SrcLib/core/fwPython/src/fwPython/python.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <boost/python.hpp>
-#undef tolower  //defined by python, conflicting with std::lower
-
-#include <fwTools/Object.hpp>
-
-#include <fwData/Boolean.hpp>
-#include <fwData/Float.hpp>
-#include <fwData/Integer.hpp>
-#include <fwData/String.hpp>
-#include <fwData/Image.hpp>
-
-#include "fwPython/python.hpp"
-
-namespace fwPython
-{
-
-class Config
-{
-public:
-    static char *home;
-
-};
-
-char *Config::home = NULL;
-
-//------------------------------------------------------------------------------
-
-char * charFromString(std::string str)
-{
-    char *dest = new char[str.size() + 1];
-    std::copy(str.begin(), str.end(), dest);
-    dest[str.size()] = '\0';
-    return dest;
-}
-
-//------------------------------------------------------------------------------
-
-void initialize()
-{
-    if(!Py_IsInitialized())
-    {
-        Py_InitializeEx(0); // 0 -> do not handle signals
-        SLM_ASSERT( "python initialization failed ", isInitialized() );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-bool isInitialized()
-{
-    return Py_IsInitialized();
-}
-
-//------------------------------------------------------------------------------
-
-void finalize()
-{
-    //Currently, boost recommends to *not* finalize python
-    //Py_Finalize();
-    return;
-}
-
-//------------------------------------------------------------------------------
-
-void setHome(std::string dir)
-{
-    if(!Py_IsInitialized())
-    {
-        if (::fwPython::Config::home)
-        {
-            delete [] ::fwPython::Config::home;
-        }
-
-        ::fwPython::Config::home = charFromString(dir);
-
-        Py_SetPythonHome( ::fwPython::Config::home );
-        OSLM_INFO("Python Home set to " << dir);
-    }
-    SLM_ERROR_IF("Python home must be set before python initialisation", Py_IsInitialized());
-}
-
-//------------------------------------------------------------------------------
-
-void addPath(std::string dir)
-{
-    namespace bp = ::boost::python;
-    SLM_ERROR_IF("Python must be initialized before adding a new dir", Py_IsInitialized());
-
-    bp::object sys = bp::import("sys");
-    sys.attr("path").attr("insert")(0, dir);
-
-    OSLM_INFO(dir << " appended to Python Path");
-}
-
-//------------------------------------------------------------------------------
-
-char* getHome()
-{
-    return ::fwPython::Config::home;
-}
-
-
-
-} // namespace fwPython
diff --git a/SrcLib/core/fwPython/test/CMakeLists.txt b/SrcLib/core/fwPython/test/CMakeLists.txt
deleted file mode 100644
index 384db7d..0000000
--- a/SrcLib/core/fwPython/test/CMakeLists.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-
-fwLoadProperties()
-
-find_package (Boost REQUIRED)
-find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
-
-
diff --git a/SrcLib/core/fwPython/test/Properties.cmake b/SrcLib/core/fwPython/test/Properties.cmake
deleted file mode 100644
index 6a542d4..0000000
--- a/SrcLib/core/fwPython/test/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwPythonTest )
-set( VERSION  )
-set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwData fwPython )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/core/fwPython/test/cppunit.options b/SrcLib/core/fwPython/test/cppunit.options
deleted file mode 100644
index 0649b30..0000000
--- a/SrcLib/core/fwPython/test/cppunit.options
+++ /dev/null
@@ -1,8 +0,0 @@
-
-CLASSTEST=[
-    'InterpreterTest',
-]
-
-USE = ['boost','python']
-LIB = ['fwData_0-1','fwPython_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwPython/test/tu/include/InterpreterTest.hpp b/SrcLib/core/fwPython/test/tu/include/InterpreterTest.hpp
deleted file mode 100644
index 86629b0..0000000
--- a/SrcLib/core/fwPython/test/tu/include/InterpreterTest.hpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWPYTHON_INTERPRETERTEST_HPP__
-#define __FWPYTHON_INTERPRETERTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-
-namespace fwPython
-{
-namespace ut
-{
-
-class InterpreterTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( InterpreterTest );
-    CPPUNIT_TEST( helloWorld );
-    CPPUNIT_TEST( fail );
-    CPPUNIT_TEST( import );
-    CPPUNIT_TEST( importFwDataBindings );
-    CPPUNIT_TEST( testFwDataBindings );
-    CPPUNIT_TEST( changeValue );
-    CPPUNIT_TEST_SUITE_END();
-protected:
-
-public:
-    InterpreterTest();
-    // interface
-    void setUp();
-    void tearDown();
-    // fonctions de tests
-    void helloWorld();
-    void fail();
-    void import();
-    void importFwDataBindings();
-    void testFwDataBindings();
-    void changeValue();
-};
-
-} // namespace ut
-} // namespace fwPython
-
-#endif //__FWPYTHON_INTERPRETERTEST_HPP__
diff --git a/SrcLib/core/fwPython/test/tu/src/InterpreterTest.cpp b/SrcLib/core/fwPython/test/tu/src/InterpreterTest.cpp
deleted file mode 100644
index efd53df..0000000
--- a/SrcLib/core/fwPython/test/tu/src/InterpreterTest.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-#include <exception>
-#include <vector>
-#include <ostream>
-#include <map>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/assign/std/vector.hpp>
-#include <boost/foreach.hpp>
-
-#include <fwData/String.hpp>
-#include <fwData/factory/new.hpp>
-
-#include "fwPython/python.hpp"
-#include "fwPython/bindings/base.hpp"
-#include "fwPython/Interpreter.hpp"
-#include "InterpreterTest.hpp"
-
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwPython::ut::InterpreterTest );
-
-namespace fwPython
-{
-namespace ut
-{
-
-InterpreterTest::InterpreterTest()
-{
-    ::fwPython::setHome("./PythonHome");
-    ::fwPython::initialize();
-    ::fwPython::bindings::initialize();
-}
-
-void InterpreterTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-void InterpreterTest::tearDown()
-{
-    ::fwPython::finalize();
-    // Clean up after the test run.
-}
-
-//-----------------------------------------------------------------------------
-
-void InterpreterTest::helloWorld()
-{
-    fwPython::Interpreter interpreter;
-
-    int succes;
-
-    succes = interpreter.execute(
-            "a = 'hello world'\n"
-            );
-
-    CPPUNIT_ASSERT_EQUAL( succes , 0 );
-}
-
-//-----------------------------------------------------------------------------
-
-void InterpreterTest::fail()
-{
-    fwPython::Interpreter interpreter;
-
-    int succes;
-
-    succes = interpreter.execute(
-            "assert 0\n"
-            );
-
-    CPPUNIT_ASSERT_EQUAL( succes , -1 );
-}
-
-
-//-----------------------------------------------------------------------------
-
-void InterpreterTest::import()
-{
-    fwPython::Interpreter interpreter;
-
-    int succes;
-
-    succes = interpreter.execute(
-            "import os\n"
-            "assert os\n"
-            );
-
-    CPPUNIT_ASSERT_EQUAL( succes , 0 );
-}
-
-
-
-//-----------------------------------------------------------------------------
-
-void InterpreterTest::importFwDataBindings()
-{
-    fwPython::Interpreter interpreter;
-
-    int succes;
-    succes = interpreter.execute(
-            "import fwData\n"
-            );
-
-    CPPUNIT_ASSERT_EQUAL( succes , 0 );
-}
-
-//-----------------------------------------------------------------------------
-
-void InterpreterTest::testFwDataBindings()
-{
-    fwPython::Interpreter interpreter;
-    int succes;
-
-
-    //::fwData::Object::sptr dataObj   =  ::fwData::String::New("fwData::String as Data::Object");
-    //::fwTools::Object::sptr toolsObj =  ::fwData::String::New("fwData::String as fwTools::Object");
-
-    //::fwData::String::sptr str =  ::fwData::String::New("a string in fwData");
-
-    using namespace boost::assign;
-    std::vector<std::string> classes;
-    classes += "String", "Float", "Integer", "Boolean";
-
-
-    std::string base = "::fwData::";
-    BOOST_FOREACH(std::string name, classes)
-    {
-        std::string klass = base + name;
-        interpreter.addObject(name, ::fwData::factory::New(klass) );
-
-        std::string code = std::string();
-        code += "assert " + name + "\n";
-        code += "assert repr(" + name + ").startswith('<fwData." + name + " object at ')\n";
-        code += "assert " + name + ".getClassname() == '" + klass + "'\n";
-
-        succes = interpreter.execute( code );
-        CPPUNIT_ASSERT_EQUAL( succes , 0 );
-    }
-
-}
-
-//-----------------------------------------------------------------------------
-
-void InterpreterTest::changeValue()
-{
-    fwPython::Interpreter interpreter;
-
-    int succes;
-
-    ::fwData::String::sptr str =  ::fwData::String::New("a string in fwData");
-    interpreter.addObject("myStr", str );
-
-    succes = interpreter.execute(
-            "assert myStr.value == 'a string in fwData'\n"
-            "myStr.value = 'changed value in python'\n"
-            );
-
-    CPPUNIT_ASSERT_EQUAL( succes , 0 );
-    CPPUNIT_ASSERT_EQUAL( str->value() , std::string("changed value in python") );
-}
-
-} // namespace ut
-} // namespace fwPython
diff --git a/SrcLib/core/fwRender/CMakeLists.txt b/SrcLib/core/fwRender/CMakeLists.txt
index d00340c..1c29206 100644
--- a/SrcLib/core/fwRender/CMakeLists.txt
+++ b/SrcLib/core/fwRender/CMakeLists.txt
@@ -1,7 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwGui
-    fwServices
-    fwTools
-)
 
diff --git a/SrcLib/core/fwRender/COPYING b/SrcLib/core/fwRender/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwRender/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwRender/COPYING.LESSER b/SrcLib/core/fwRender/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwRender/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwRender/bin/build.options b/SrcLib/core/fwRender/bin/build.options
deleted file mode 100644
index f57c018..0000000
--- a/SrcLib/core/fwRender/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-USE     = ['boost']
-LIB     = ['fwRuntime_0-3','fwServices_0-1','fwTools_0-1','fwCore_0-1','fwGui_0-1']
-
-TYPE    = 'shared'
-VERSION = '0-1'
-
-
diff --git a/SrcLib/core/fwRender/include/fwRender/IRender.hpp b/SrcLib/core/fwRender/include/fwRender/IRender.hpp
index 114a29a..55272b1 100644
--- a/SrcLib/core/fwRender/include/fwRender/IRender.hpp
+++ b/SrcLib/core/fwRender/include/fwRender/IRender.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRENDER_IRENDER_HPP_
-#define _FWRENDER_IRENDER_HPP_
+#ifndef __FWRENDER_IRENDER_HPP__
+#define __FWRENDER_IRENDER_HPP__
 
 #include <fwTools/Failed.hpp>
 #include <fwServices/IService.hpp>
@@ -14,7 +14,6 @@
 
 #include "fwRender/config.hpp"
 
-class wxWindow;
 
 namespace fwRender
 {
@@ -22,7 +21,7 @@ namespace fwRender
 /**
  * @brief   Defines the service interface managing the rendering service for object.
  * @class   IRender
- * 
+ *
  * @date    2007-2009.
  *
  * Use the base service methods :
@@ -33,29 +32,30 @@ namespace fwRender
  * @li Finally we must call stop() before deleting the service
  *
  */
+
 class FWRENDER_CLASS_API IRender : public ::fwGui::IGuiContainerSrv
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IRender)(::fwGui::IGuiContainerSrv) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IRender)(::fwGui::IGuiContainerSrv) );
 
-protected :
+protected:
 
     /**
      * @brief   Constructor. Initialize default values.
      */
-    FWRENDER_API IRender() throw() ;
+    FWRENDER_API IRender() throw();
 
     /**
      * @brief   Destructor. Do nothing.
      */
-    FWRENDER_API virtual ~IRender() throw() ;
+    FWRENDER_API virtual ~IRender() throw();
 
 };
 
 } // namespace fwRenderVTK
 
-#endif /*_FWRENDER_IRENDER_HPP_*/
+#endif /*__FWRENDER_IRENDER_HPP__*/
 
 
diff --git a/SrcLib/core/fwRender/include/fwRender/Namespace.hpp b/SrcLib/core/fwRender/include/fwRender/Namespace.hpp
index fc86d67..41f0bb4 100644
--- a/SrcLib/core/fwRender/include/fwRender/Namespace.hpp
+++ b/SrcLib/core/fwRender/include/fwRender/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRENDERNAMESPACE_HPP_
-#define FWRENDERNAMESPACE_HPP_
+#ifndef __FWRENDER_NAMESPACE_HPP__
+#define __FWRENDER_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwRender contains the base interface for rendering services.
  * @namespace   fwRender
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace fwRender
 {
 }
-#endif /* FWRENDERNAMESPACE_HPP_ */
+#endif /* __FWRENDER_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwRender/include/fwRender/config.hpp b/SrcLib/core/fwRender/include/fwRender/config.hpp
deleted file mode 100644
index 17e89a4..0000000
--- a/SrcLib/core/fwRender/include/fwRender/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRENDER_CONFIG_HPP_
-#define _FWRENDER_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWRENDER_EXPORTS
-    #define FWRENDER_API __declspec(dllexport)
-    #else
-    #define FWRENDER_API __declspec(dllimport)
-    #endif
-
-    #define FWRENDER_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWRENDER_EXPORTS
-    #define FWRENDER_API __attribute__ ((visibility("default")))
-    #define FWRENDER_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define FWRENDER_API __attribute__ ((visibility("hidden")))
-    #define FWRENDER_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define FWRENDER_API
-    #define FWRENDER_CLASS_API
-
-#endif
-
-#endif //FWRENDER_API
diff --git a/SrcLib/core/fwRender/src/fwRender/IRender.cpp b/SrcLib/core/fwRender/src/fwRender/IRender.cpp
index e30a9bf..f82d15e 100644
--- a/SrcLib/core/fwRender/src/fwRender/IRender.cpp
+++ b/SrcLib/core/fwRender/src/fwRender/IRender.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,7 +11,7 @@
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 
 #include "fwRender/IRender.hpp"
@@ -22,12 +22,14 @@ namespace fwRender
 //-----------------------------------------------------------------------------
 
 IRender::IRender() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IRender::~IRender() throw()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/CHANGES b/SrcLib/core/fwRuntime/CHANGES
deleted file mode 100644
index d4fe0af..0000000
--- a/SrcLib/core/fwRuntime/CHANGES
+++ /dev/null
@@ -1,102 +0,0 @@
-* 24-05-2005 *
-
-	+ Added a new runtime::getBundleResourcePath function.
-	
-
-* 20-05-2005 *
-
-	+ When defining an extension, use "implements" instead of "point" to
-	  declare the extension point to connect to.
-	  
-	- Bug fixed. When starting a bundle, and exception is raised to notify
-	  when no matching bundle has been found.
-	  
-	  
-* 18-05-2005 *
-
-	+ Added a new "requirement" declaration in the plugin descriptor.
-	  This allows to declare which bundles must start their dynamic
-	  libraries before one can load its libraries too. This has been
-	  designed to avoid the system to load automatically dynamic libraries
-	  before a bundle tries, avoiding some conflicts during C++
-	  initializations.
-	  
-
-* 03-05-2005 *
-
-	+ Added a new global operation to retrieve configuration elements
-	  contributed by extensions directly.
-	  See runtime::getAllConfigurationElementsForPoint for details.
-	
-	~ The runtime::Shp class hase been removed. Now boost::shared_ptr
-	  is directly used instead. The migration will be as simple as
-	  replacing every "Shp" by "shared_ptr" in your code.
-
-
-* 28-04-2005 *
-
-	+ runtime::loadBundles now normalizes the directory path before
-	  trying to explore this path for bundles. This asserts that the
-	  specified path form is valid.
-
-
-* 26-04-2005 *
-
-	+ Added method for creating an executable instance from a configuration
-	  element instance.
-
-	~ Changes in ExtensionPoint class.
-	  Added pointer to the bundle.
-	  Added support for XML schema path attribute.
-	  Added method to enumerate all contributed extensions.
-	  
-	~ Code clean-up.
-	
-	- In class Runtime, getExtensionForPoint has been removed.
-	  
-
-* 22-04-2005 *
-
-	- Bug fixed.
-	  The runtime rejected several extensions that didn't have an
-      identifier (actually, identifier on extensions are optionnal).
-    
-    ~ ConfigurationElement interface changed.
-      The old "getAttributeValue" is now "getSafeAttributeValue". A new
-      "getAttributeValue" has been added. See releated documentation
-      for futher information.
-
-* 20-04-2005 *
-
-	- Bug fixed.
-	  While loading bundles, the runtime crashed due to a miss handled
-	  pointer.
-	  
-
-* 14-04-2005 *
-
-	+ Added iterator for configuration element's children.
-	
-	
-* 13-04-2005 *
-
-	+ Creation of a change log file located at the root directory of the project.
-	
-	+ Generalisation of the use of shared pointers. This may need a deep
-	  update of your code. See "include/runtime/Shp.hpp" to see how does
-	  the shared pointer type look like.
-	
-	+ Generalisation of the iterator use to access nested collection of
-	  objects. This involves a deep update of your code too. You should
-	  have a look at "include/runtime/iterators.hpp" as a start point to
-	  understand the new iterator architecture. This architecture provides
-	  the acces to native stl iterators.
-	  
-	~ "loadBundles" has been removed from runtime::Runtime class. Now you
-	  must use "runtime::io::loadBundles" instead. You will find theis function's
-	  declaration in "include/runtime/io/operations.hpp".
-	  
-	- When exploring a bundle repository for "plugin.xml" files, a exception
-	  was raised when a supposed bundle directory did not containt a
-	  "plugin.xml" file. Now a warning message is sent to std::cerr. This
-	  could be improved by the use of a logging architecture.
\ No newline at end of file
diff --git a/SrcLib/core/fwRuntime/CMakeLists.txt b/SrcLib/core/fwRuntime/CMakeLists.txt
index b77cec7..0bd3f8d 100644
--- a/SrcLib/core/fwRuntime/CMakeLists.txt
+++ b/SrcLib/core/fwRuntime/CMakeLists.txt
@@ -1,19 +1,18 @@
 
 fwLoadProperties()
 
-fwUseForwardInclude(fwCore)
-
-
-find_package (Boost COMPONENTS regex filesystem system date_time REQUIRED)
+find_package (Boost COMPONENTS regex REQUIRED)
 find_package (LibXml2)
+find_package (Iconv REQUIRED)
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS} 
     ${LIBXML2_INCLUDE_DIR}
+    ${ICONV_INCLUDE_DIR}
     )
 
 fwLink(
     ${LIBXML2_LIBRARIES} 
-    ${Boost_LIBRARIES}
+    ${Boost_REGEX_LIBRARY}
+    ${ICONV_LIBRARIES}
     )
 
diff --git a/SrcLib/core/fwRuntime/COPYING b/SrcLib/core/fwRuntime/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwRuntime/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwRuntime/COPYING.LESSER b/SrcLib/core/fwRuntime/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwRuntime/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwRuntime/bin/build.options b/SrcLib/core/fwRuntime/bin/build.options
deleted file mode 100644
index 463bf27..0000000
--- a/SrcLib/core/fwRuntime/bin/build.options
+++ /dev/null
@@ -1,10 +0,0 @@
-TYPE    = 'shared'
-USE     = ['boost', 'boostFilesystem', 'boostRegex', 'libxml2']
-LIB     = ['fwCore_0-1']
-VERSION = '0-3'
-
-# Special glitch under linux.
-import os
-import sys
-if os.name == 'posix' and sys.platform == 'darwin' :
-    STDLIB = ['dl']
diff --git a/SrcLib/core/fwRuntime/doc/doxygen/doxyfile b/SrcLib/core/fwRuntime/doc/doxygen/doxyfile
deleted file mode 100644
index 3c66bb8..0000000
--- a/SrcLib/core/fwRuntime/doc/doxygen/doxyfile
+++ /dev/null
@@ -1,214 +0,0 @@
-# Doxyfile 1.3.9.1
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME = runtime
-PROJECT_NUMBER = 
-OUTPUT_DIRECTORY = 
-CREATE_SUBDIRS = NO
-OUTPUT_LANGUAGE = English
-USE_WINDOWS_ENCODING = NO
-BRIEF_MEMBER_DESC = YES
-REPEAT_BRIEF = YES
-ABBREVIATE_BRIEF = "The $name class" "The $name widget" "The $name file" is provides specifies contains represents a an the
-ALWAYS_DETAILED_SEC = NO
-INLINE_INHERITED_MEMB = NO
-FULL_PATH_NAMES = YES
-STRIP_FROM_PATH = ../bin/
-STRIP_FROM_INC_PATH = 
-SHORT_NAMES = NO
-JAVADOC_AUTOBRIEF = NO
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP = NO
-INHERIT_DOCS = YES
-DISTRIBUTE_GROUP_DOC = NO
-TAB_SIZE = 4
-ALIASES = 
-OPTIMIZE_OUTPUT_FOR_C = NO
-OPTIMIZE_OUTPUT_JAVA = NO
-SUBGROUPING = YES
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL = YES
-EXTRACT_PRIVATE = YES
-EXTRACT_STATIC = YES
-EXTRACT_LOCAL_CLASSES = YES
-EXTRACT_LOCAL_METHODS = YES
-HIDE_UNDOC_MEMBERS = NO
-HIDE_UNDOC_CLASSES = NO
-HIDE_FRIEND_COMPOUNDS = NO
-HIDE_IN_BODY_DOCS = NO
-INTERNAL_DOCS = NO
-CASE_SENSE_NAMES = YES
-HIDE_SCOPE_NAMES = NO
-SHOW_INCLUDE_FILES = YES
-INLINE_INFO = YES
-SORT_MEMBER_DOCS = YES
-SORT_BRIEF_DOCS = NO
-SORT_BY_SCOPE_NAME = NO
-GENERATE_TODOLIST = YES
-GENERATE_TESTLIST = YES
-GENERATE_BUGLIST = YES
-GENERATE_DEPRECATEDLIST = YES
-ENABLED_SECTIONS = 
-MAX_INITIALIZER_LINES = 30
-SHOW_USED_FILES = YES
-SHOW_DIRECTORIES = YES
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-QUIET = NO
-WARNINGS = YES
-WARN_IF_UNDOCUMENTED = YES
-WARN_IF_DOC_ERROR = YES
-WARN_FORMAT = "$file:$line: $text"
-WARN_LOGFILE = 
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT = ../../include/ ../../src/ 
-FILE_PATTERNS = *.cxx *.cpp *.h *.hxx *.hpp *.txx
-RECURSIVE = YES
-EXCLUDE = 
-EXCLUDE_SYMLINKS = NO
-EXCLUDE_PATTERNS = 
-EXAMPLE_PATH = 
-EXAMPLE_PATTERNS = *
-EXAMPLE_RECURSIVE = NO
-IMAGE_PATH = 
-INPUT_FILTER = 
-FILTER_PATTERNS = 
-FILTER_SOURCE_FILES = NO
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER = YES
-INLINE_SOURCES = NO
-STRIP_CODE_COMMENTS = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION = YES
-VERBATIM_HEADERS = YES
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX = NO
-COLS_IN_ALPHA_INDEX = 5
-IGNORE_PREFIX = 
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML = YES
-HTML_OUTPUT = html
-HTML_FILE_EXTENSION = .html
-HTML_HEADER = 
-HTML_FOOTER = 
-HTML_STYLESHEET = 
-HTML_ALIGN_MEMBERS = YES
-GENERATE_HTMLHELP = NO
-CHM_FILE = 
-HHC_LOCATION = 
-GENERATE_CHI = NO
-BINARY_TOC = NO
-TOC_EXPAND = NO
-DISABLE_INDEX = NO
-ENUM_VALUES_PER_LINE = 4
-GENERATE_TREEVIEW = NO
-TREEVIEW_WIDTH = 250
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX = NO
-LATEX_OUTPUT = latex
-LATEX_CMD_NAME = latex
-MAKEINDEX_CMD_NAME = makeindex
-COMPACT_LATEX = NO
-PAPER_TYPE = a4wide
-EXTRA_PACKAGES = 
-LATEX_HEADER = 
-PDF_HYPERLINKS = NO
-USE_PDFLATEX = NO
-LATEX_BATCHMODE = NO
-LATEX_HIDE_INDICES = NO
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF = NO
-RTF_OUTPUT = rtf
-COMPACT_RTF = NO
-RTF_HYPERLINKS = NO
-RTF_STYLESHEET_FILE = 
-RTF_EXTENSIONS_FILE = 
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN = NO
-MAN_OUTPUT = man
-MAN_EXTENSION = .3
-MAN_LINKS = NO
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML = NO
-XML_OUTPUT = xml
-XML_SCHEMA = 
-XML_DTD = 
-XML_PROGRAMLISTING = YES
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF = NO
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD = NO
-PERLMOD_LATEX = NO
-PERLMOD_PRETTY = YES
-PERLMOD_MAKEVAR_PREFIX = 
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING = YES
-MACRO_EXPANSION = NO
-EXPAND_ONLY_PREDEF = NO
-SEARCH_INCLUDES = YES
-INCLUDE_PATH = 
-INCLUDE_FILE_PATTERNS = 
-PREDEFINED = 
-EXPAND_AS_DEFINED = 
-SKIP_FUNCTION_MACROS = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-TAGFILES = 
-GENERATE_TAGFILE = 
-ALLEXTERNALS = NO
-EXTERNAL_GROUPS = YES
-PERL_PATH = /usr/bin/perl
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS = YES
-HIDE_UNDOC_RELATIONS = YES
-HAVE_DOT = NO
-CLASS_GRAPH = YES
-COLLABORATION_GRAPH = YES
-UML_LOOK = NO
-TEMPLATE_RELATIONS = NO
-INCLUDE_GRAPH = YES
-INCLUDED_BY_GRAPH = YES
-CALL_GRAPH = NO
-GRAPHICAL_HIERARCHY = YES
-DOT_IMAGE_FORMAT = png
-DOT_PATH = 
-DOTFILE_DIRS = 
-MAX_DOT_GRAPH_WIDTH = 1024
-MAX_DOT_GRAPH_HEIGHT = 1024
-MAX_DOT_GRAPH_DEPTH = 1000
-GENERATE_LEGEND = YES
-DOT_CLEANUP = YES
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
-#---------------------------------------------------------------------------
-SEARCHENGINE = NO
diff --git a/SrcLib/core/fwRuntime/header.txt b/SrcLib/core/fwRuntime/header.txt
deleted file mode 100644
index 281b7fb..0000000
--- a/SrcLib/core/fwRuntime/header.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-// runtime - copyright (C) 2004-2005 IRCAD.
-// 
-// author	Guillaume Brocker
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Bundle.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Bundle.hpp
index 402c1d2..5447c0c 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Bundle.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Bundle.hpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_BUNDLE_HPP
-#define _FWRUNTIME_BUNDLE_HPP
+#ifndef __FWRUNTIME_BUNDLE_HPP__
+#define __FWRUNTIME_BUNDLE_HPP__
 
 #include <map>
 #include <set>
 #include <string>
-#include <boost/enable_shared_from_this.hpp>
 #include <boost/filesystem/path.hpp>
 
 #include "fwCore/base.hpp"
@@ -22,18 +21,18 @@
 
 namespace fwRuntime
 {
-    struct Extension;
-    struct ExtensionPoint;
-    struct ExtensionRegistry;
-    struct IExecutable;
-    struct ExecutableFactory;
-    struct IPlugin;
-    struct Runtime;
-
-    namespace io
-    {
-        struct BundleDescriptorReader;
-    }
+struct Extension;
+struct ExtensionPoint;
+struct ExtensionRegistry;
+struct IExecutable;
+struct ExecutableFactory;
+struct IPlugin;
+struct Runtime;
+
+namespace io
+{
+struct BundleDescriptorReader;
+}
 }
 
 
@@ -47,9 +46,9 @@ namespace fwRuntime
  * @brief   Defines the bundle class.
  * @struct  Bundle
  * @date    2004-2009
- * 
+ *
  */
-struct Bundle : public ::boost::enable_shared_from_this< Bundle >
+struct Bundle : public std::enable_shared_from_this< Bundle >
 {
     friend struct ::fwRuntime::io::BundleDescriptorReader;
 
@@ -68,7 +67,7 @@ struct Bundle : public ::boost::enable_shared_from_this< Bundle >
     typedef ExtensionPointContainer::const_iterator ExtensionPointConstIterator;    ///< Defines the extension point container constant iterator type.
 
     typedef std::set< SPTR(dl::Library) >     LibraryContainer;               ///< Defines the dynamic library container type.
-    typedef LibraryContainer::const_iterator  LibraryConstIterator;           ///< Defines the dynamic library container constant iterator type.
+    typedef LibraryContainer::const_iterator LibraryConstIterator;            ///< Defines the dynamic library container constant iterator type.
     //@}
 
 
@@ -384,86 +383,92 @@ struct Bundle : public ::boost::enable_shared_from_this< Bundle >
     //@}
 
 
-    bool isStarted()     {return m_started;};
-    bool isInitialized() {return m_initialized;};
-
-protected:
-
-    /**
-     * @brief       Constructor.
-     *
-     * @param[in]   location    a path to the directory containing the bundle
-     * @param[in]   id          a string containing the bundle identifier
-     * @param[in]   version     a string containing the bundle version
-     *
-     * @todo        test parameters validity
-     *
-     */
-    Bundle( const boost::filesystem::path   & location,
-            const std::string               & id,
-            const std::string               & version );
-
-    /**
-     * @brief       Constructor.
-     *
-     * @param[in]   location        a path to the directory containing the bundle
-     * @param[in]   id              a string containing the bundle identifier
-     * @param[in]   version         a string containing the bundler version
-     * @param[in]   pluginClass     a string containing the bundle's pugin class name
-     *
-     * @todo        test parameters validity
-     *
-     */
-    Bundle( const boost::filesystem::path   & location,
-            const std::string               & id,
-            const std::string               & version,
-            const std::string               & pluginClass );
-
-
-private:
-
-    typedef std::set< std::string >                 RequirementContainer;   ///< Defines the requirement container type.
-    typedef std::map< std::string, std::string >    ParameterContainer;     ///< defines the parameter container type
-
-    static SPTR( Bundle )           m_loadingBundle;        ///< a pointer to the bundle that is currently loading its dynamic libaries
-
-    const boost::filesystem::path   m_location;             ///< the path to the bundle location
-    const std::string               m_identifier;           ///< a string containing the bundle identifier
-    const Version                   m_version;              ///< defines the version of the bundle
-    const std::string               m_class;                ///< a string containing the bundle's plugin class name
-    bool                            m_enable;               ///< a boolean telling if the bundle is enabled or not
-    ExtensionContainer              m_extensions;           ///< all extensions
-    ExtensionPointContainer         m_extensionPoints;      ///< all extension points
-    ExecutableFactoryContainer      m_executableFactories;  ///< all executable factories
-    LibraryContainer                m_libraries;            ///< all libaries that are part of the bundle
-    RequirementContainer            m_requirements;         ///< all requirements of the bundle
-    SPTR( IPlugin )                 m_plugin;               ///< a shared pointer to the plugin instance
-    ParameterContainer              m_parameters;           ///< all parameters
-
-    bool m_started;
-    bool m_initialized;
-
-    /**
-     * @brief   Assignement operator.
-     *
-     * @remark  Assignement is forbidden for this class.
-     */
-    void operator= (const Bundle & );
-
-    /**
-     * @brief   Load bundle's library in the current process.
-     */
-    void loadLibraries() throw(RuntimeException);
-
-    /**
-     * @brief   load all requirement needed by the bundle to work
-     */
-    void loadRequirements() throw(RuntimeException);
+    bool isStarted()
+    {
+        return m_started;
+    }
+    bool isInitialized()
+    {
+        return m_initialized;
+    }
 
-    /**
-     * @brief   Starts the plugin associated to the bundle.
-     */
-    void startPlugin() throw(RuntimeException);
+    protected:
+
+        /**
+         * @brief       Constructor.
+         *
+         * @param[in]   location    a path to the directory containing the bundle
+         * @param[in]   id          a string containing the bundle identifier
+         * @param[in]   version     a string containing the bundle version
+         *
+         * @todo        test parameters validity
+         *
+         */
+        Bundle( const boost::filesystem::path   & location,
+                const std::string               & id,
+                const std::string               & version );
+
+        /**
+         * @brief       Constructor.
+         *
+         * @param[in]   location        a path to the directory containing the bundle
+         * @param[in]   id              a string containing the bundle identifier
+         * @param[in]   version         a string containing the bundler version
+         * @param[in]   pluginClass     a string containing the bundle's pugin class name
+         *
+         * @todo        test parameters validity
+         *
+         */
+        Bundle( const boost::filesystem::path   & location,
+                const std::string               & id,
+                const std::string               & version,
+                const std::string               & pluginClass );
+
+
+    private:
+
+        typedef std::set< std::string >                 RequirementContainer;///< Defines the requirement container type.
+        typedef std::map< std::string, std::string >    ParameterContainer; ///< defines the parameter container type
+
+        static SPTR( Bundle )           m_loadingBundle;    ///< a pointer to the bundle that is currently loading its dynamic libaries
+
+        const boost::filesystem::path m_location;           ///< the path to the bundle location
+        const std::string m_identifier;                     ///< a string containing the bundle identifier
+        const Version m_version;                            ///< defines the version of the bundle
+        const std::string m_class;                          ///< a string containing the bundle's plugin class name
+        bool m_enable;                                      ///< a boolean telling if the bundle is enabled or not
+        ExtensionContainer m_extensions;                    ///< all extensions
+        ExtensionPointContainer m_extensionPoints;          ///< all extension points
+        ExecutableFactoryContainer m_executableFactories;   ///< all executable factories
+        LibraryContainer m_libraries;                       ///< all libaries that are part of the bundle
+        RequirementContainer m_requirements;                ///< all requirements of the bundle
+        SPTR( IPlugin )                 m_plugin;           ///< a shared pointer to the plugin instance
+        ParameterContainer m_parameters;                    ///< all parameters
+
+        bool m_started;
+        bool m_initialized;
+
+        /**
+         * @brief   Assignement operator.
+         *
+         * @remark  Assignement is forbidden for this class.
+         */
+        void operator= (const Bundle & );
+
+        /**
+         * @brief   Load bundle's library in the current process.
+         */
+        void loadLibraries() throw(RuntimeException);
+
+        /**
+         * @brief   load all requirement needed by the bundle to work
+         */
+        void loadRequirements() throw(RuntimeException);
+
+        /**
+         * @brief   Starts the plugin associated to the bundle.
+         */
+        void startPlugin() throw(RuntimeException);
 
 };
 
@@ -472,4 +477,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_BUNDLE_HPP
+#endif // __FWRUNTIME_BUNDLE_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/BundleElement.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/BundleElement.hpp
index 819b6ea..5bc6b40 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/BundleElement.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/BundleElement.hpp
@@ -1,19 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_BUNDLEELEMENT_HPP_
-#define _FWRUNTIME_BUNDLEELEMENT_HPP_
-
-#include <boost/shared_ptr.hpp>
+#ifndef __FWRUNTIME_BUNDLEELEMENT_HPP__
+#define __FWRUNTIME_BUNDLEELEMENT_HPP__
 
 #include "fwRuntime/config.hpp"
 
+#include <memory>
+
 namespace fwRuntime
 {
-    struct Bundle;
+struct Bundle;
 }
 
 
@@ -26,7 +26,7 @@ namespace fwRuntime
  * @brief   Implements the base class for all element managed by a bundle.
  * @struct  BundleElement
  * @date    2006-2009
- * 
+ *
  */
 struct BundleElement
 {
@@ -36,7 +36,7 @@ struct BundleElement
      *
      * @return  a pointer to a bundle instance
      */
-    FWRUNTIME_API ::boost::shared_ptr<Bundle> getBundle() const;
+    FWRUNTIME_API std::shared_ptr<Bundle> getBundle() const;
 
     /**
      * @brief   Tells if the element is enabled or not.
@@ -60,32 +60,32 @@ struct BundleElement
      */
     FWRUNTIME_API void setEnable(const bool enable);
 
-protected:
+    protected:
 
-    /**
-     * @brief   Constructor
-     *
-     * @remark  The instance will try to guess the bundle that is being loaded and
-     *          consider that bundle as its owning bundle
-     *
-     * @post    The bundle isn't null.
-     * @see     ::fwRuntime::Bundle::getLoadingBundle
-     */
-    BundleElement();
+        /**
+         * @brief   Constructor
+         *
+         * @remark  The instance will try to guess the bundle that is being loaded and
+         *          consider that bundle as its owning bundle
+         *
+         * @post    The bundle isn't null.
+         * @see     ::fwRuntime::Bundle::getLoadingBundle()
+         */
+        BundleElement();
 
-    /**
-     * @brief       Constructor
-     *
-     * @post        The bundle isn't null.
-     * @param[in]   bundle  a shared pointer to the managing bundle
-     */
-    BundleElement( ::boost::shared_ptr< Bundle > bundle );
+        /**
+         * @brief       Constructor
+         *
+         * @post        The bundle isn't null.
+         * @param[in]   bundle  a shared pointer to the managing bundle
+         */
+        BundleElement( std::shared_ptr< Bundle > bundle );
 
 
-private:
+    private:
 
-     ::boost::shared_ptr< Bundle >  m_bundle;   ///< a shared pointer to the bundle managing the element
-    bool                            m_enable;   ///< to know if bundle element is enabled
+        std::shared_ptr< Bundle >  m_bundle;///< a shared pointer to the bundle managing the element
+        bool m_enable;                          ///< to know if bundle element is enabled
 
 };
 
@@ -95,4 +95,4 @@ private:
 
 
 
-#endif /*_FWRUNTIME_BUNDLEELEMENT_HPP_*/
+#endif /*__FWRUNTIME_BUNDLEELEMENT_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElement.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElement.hpp
index 9ead273..5136f29 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElement.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElement.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_CONFIGURATIONELEMENT_HPP
-#define _FWRUNTIME_CONFIGURATIONELEMENT_HPP
+#ifndef __FWRUNTIME_CONFIGURATIONELEMENT_HPP__
+#define __FWRUNTIME_CONFIGURATIONELEMENT_HPP__
 
 #include <map>
 #include <string>
+#include <vector>
+#include <memory>
 #include <utility>
-#include <boost/enable_shared_from_this.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -21,13 +21,13 @@
 
 namespace fwRuntime
 {
-    struct Bundle;
-    struct Executable;
+struct Bundle;
+struct Executable;
 
-    namespace io
-    {
-        struct BundleDescriptorReader;
-    }
+namespace io
+{
+struct BundleDescriptorReader;
+}
 }
 
 
@@ -40,16 +40,18 @@ namespace fwRuntime
  * @brief   Defines the configuration element class.
  * @struct  ConfigurationElement
  * @date    2004-2009
- * 
+ *
 
  */
 struct FWRUNTIME_CLASS_API ConfigurationElement :   public ConfigurationElementContainer,
-                                public boost::enable_shared_from_this< ConfigurationElement >
+                                                    public std::enable_shared_from_this< ConfigurationElement >
 {
 
     friend struct ::fwRuntime::io::BundleDescriptorReader;
 
-    fwCoreClassDefinitionsWithFactoryMacro((ConfigurationElement), ((( const ::boost::shared_ptr< Bundle > ))(( const std::string ))), new ConfigurationElement);
+    fwCoreClassDefinitionsWithFactoryMacro((ConfigurationElement),
+                                           ((( const std::shared_ptr< Bundle > ))(
+                                                ( const std::string ))), new ConfigurationElement);
 
     /**
      * @brief   Defines the attribute pair type.
@@ -62,7 +64,9 @@ struct FWRUNTIME_CLASS_API ConfigurationElement :   public ConfigurationElementC
      */
     struct NoSuchAttribute : public ::fwCore::Exception
     {
-        NoSuchAttribute(const std::string &attr) : ::fwCore::Exception(std::string("No such attribute: ") + attr) {}
+        NoSuchAttribute(const std::string &attr) : ::fwCore::Exception(std::string("No such attribute: ") + attr)
+        {
+        }
     };
 
 
@@ -71,7 +75,7 @@ struct FWRUNTIME_CLASS_API ConfigurationElement :   public ConfigurationElementC
      *
      * @return  a shared pointer to a bundle instance
      */
-    FWRUNTIME_API const ::boost::shared_ptr< Bundle > getBundle() const throw();
+    FWRUNTIME_API const std::shared_ptr< Bundle > getBundle() const throw();
 
     /**
      * @brief       Retrieves the value of an attribute for the specified name.
@@ -150,12 +154,13 @@ struct FWRUNTIME_CLASS_API ConfigurationElement :   public ConfigurationElementC
     /**
      * @brief   Return the map with attributes
      */
-    FWRUNTIME_API const std::map<std::string, std::string> getAttributes() const throw() ;
+    FWRUNTIME_API const std::map<std::string, std::string> getAttributes() const throw();
 
     /**
      * @brief   Print contents
      */
-    FWRUNTIME_API friend std::ostream & operator<<(std::ostream & _sstream, ConfigurationElement& _configurationElement) ;
+    FWRUNTIME_API friend std::ostream & operator<<(std::ostream & _sstream,
+                                                   ConfigurationElement& _configurationElement);
 
     /**
      * @brief       Find recursively all the corresponding configuration elements.
@@ -168,87 +173,87 @@ struct FWRUNTIME_CLASS_API ConfigurationElement :   public ConfigurationElementC
      * @param[in]   depth           depth of the recursion
      */
     FWRUNTIME_API std::vector < ConfigurationElement::sptr > find(
-            std::string name = "",
-            std::string attribute = "",
-            std::string attributeValue = "",
-            int depth = 1
-            );
+        std::string name = "",
+        std::string attribute = "",
+        std::string attributeValue = "",
+        int depth = 1
+        );
 
     /**
      * @brief       Used only because this class inherit from enable_shared_from_this
      */
     FWRUNTIME_API virtual ~ConfigurationElement();
 
-protected:
-
-    /**
-     * @brief       Constructor.
-     *
-     * @param[in]   bundle  a shared pointer to the bundle to the configuration element is attached to
-     * @param[in]   name    a string containing the configuration element name
-     *
-     * @todo        test parameters validity
-     */
-    FWRUNTIME_API ConfigurationElement(const ::boost::shared_ptr<Bundle> bundle, const std::string& name);
-
-
-    /**
-     * @brief       Sets an attribute with the specified name and value.
-     *
-     * Setting a value for an existing attribute will override the old value.
-     *
-     * @param[in]   name    a string containing the attribute name
-     * @param[in]   value   a string containing the attribute value
-     */
-    FWRUNTIME_API void setAttributeValue(const std::string& name, const std::string& value) throw();
-
-    /**
-     * @brief       Sets the value of the configuration element it-self.
-     *
-     * @param[in]   value   a string containing the new configuration element value
-     */
-    FWRUNTIME_API void setValue(const std::string& value) throw();
-
-
-private:
-
-    /**
-     * @brief   Defines the attributes container type.
-     */
-    typedef std::map<std::string, std::string> AttributeContainer;
-
-
-    /**
-     * @brief   A pointer to the bundle the configuration element is attached to.
-     */
-    const ::boost::shared_ptr<Bundle> m_bundle;
-
-    /**
-     * @brief   A string containing the configuration element name.
-     */
-    const std::string m_name;
-
-    /**
-     * @brief   A string containing the configuration element value.
-     */
-    std::string m_value;
-
-    /**
-     * @brief   All attributes of the configuration element.
-     */
-    AttributeContainer m_attributes;
-
-
-    /**
-     * @brief   Assignemet operator.
-     *
-     * @remark  Assignement is forbidden for this class.
-     */
-    void operator=(const ConfigurationElement&) throw();
+    protected:
+
+        /**
+         * @brief       Constructor.
+         *
+         * @param[in]   bundle  a shared pointer to the bundle to the configuration element is attached to
+         * @param[in]   name    a string containing the configuration element name
+         *
+         * @todo        test parameters validity
+         */
+        FWRUNTIME_API ConfigurationElement(const std::shared_ptr<Bundle> bundle, const std::string& name);
+
+
+        /**
+         * @brief       Sets an attribute with the specified name and value.
+         *
+         * Setting a value for an existing attribute will override the old value.
+         *
+         * @param[in]   name    a string containing the attribute name
+         * @param[in]   value   a string containing the attribute value
+         */
+        FWRUNTIME_API void setAttributeValue(const std::string& name, const std::string& value) throw();
+
+        /**
+         * @brief       Sets the value of the configuration element it-self.
+         *
+         * @param[in]   value   a string containing the new configuration element value
+         */
+        FWRUNTIME_API void setValue(const std::string& value) throw();
+
+
+    private:
+
+        /**
+         * @brief   Defines the attributes container type.
+         */
+        typedef std::map<std::string, std::string> AttributeContainer;
+
+
+        /**
+         * @brief   A pointer to the bundle the configuration element is attached to.
+         */
+        const std::shared_ptr<Bundle> m_bundle;
+
+        /**
+         * @brief   A string containing the configuration element name.
+         */
+        const std::string m_name;
+
+        /**
+         * @brief   A string containing the configuration element value.
+         */
+        std::string m_value;
+
+        /**
+         * @brief   All attributes of the configuration element.
+         */
+        AttributeContainer m_attributes;
+
+
+        /**
+         * @brief   Assignemet operator.
+         *
+         * @remark  Assignement is forbidden for this class.
+         */
+        void operator=(const ConfigurationElement&) throw();
 };
 
 
 } // namespace fwRuntime
 
 
-#endif // #define  _FWRUNTIME_CONFIGURATIONELEMENT_HPP
+#endif //  __FWRUNTIME_CONFIGURATIONELEMENT_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElementContainer.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElementContainer.hpp
index 0460658..796da62 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElementContainer.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/ConfigurationElementContainer.hpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_CONFIGURATIONELEMENTCONTAINER_HPP_
-#define _FWRUNTIME_CONFIGURATIONELEMENTCONTAINER_HPP_
+#ifndef __FWRUNTIME_CONFIGURATIONELEMENTCONTAINER_HPP__
+#define __FWRUNTIME_CONFIGURATIONELEMENTCONTAINER_HPP__
 
 #include <iterator>
 #include <vector>
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/config.hpp"
 
@@ -20,7 +19,7 @@ namespace fwRuntime
 
 namespace io
 {
-    struct BundleDescriptorReader;
+struct BundleDescriptorReader;
 } // namespace io
 
 
@@ -29,9 +28,6 @@ struct ConfigurationElement;
 
 /**
  * @brief   Defines the generic configuration element container class.
- * @struct  ConfigurationElementContainer
- * @date    2004-2009
- * 
  */
 struct FWRUNTIME_CLASS_API ConfigurationElementContainer
 {
@@ -44,8 +40,10 @@ struct FWRUNTIME_CLASS_API ConfigurationElementContainer
      * @{
      */
 
-    typedef std::vector< ::boost::shared_ptr<ConfigurationElement> >    Container;  ///< Defines the configuration element container type.
-    typedef Container::iterator                                         Iterator;   ///< Defines the configuration element container iterator type.
+    /// Defines the configuration element container type.
+    typedef std::vector< std::shared_ptr<ConfigurationElement> > Container;
+    ///< Defines the configuration element container iterator type.
+    typedef Container::iterator Iterator;
 
     //@}
 
@@ -66,10 +64,10 @@ struct FWRUNTIME_CLASS_API ConfigurationElementContainer
     FWRUNTIME_API Iterator end();
 
     /**
-    * @brief   Returns the configuration element container
-    *
-    * @return  an configuration element container
-    */
+     * @brief   Returns the configuration element container
+     *
+     * @return  an configuration element container
+     */
     FWRUNTIME_API const Container & getElements() const;
 
     /**
@@ -79,7 +77,8 @@ struct FWRUNTIME_CLASS_API ConfigurationElementContainer
      *
      * @return      a pointer to a configuration element instance or null if none
      */
-    FWRUNTIME_API const ::boost::shared_ptr< ConfigurationElement > findConfigurationElement( const std::string & name ) const;
+    FWRUNTIME_API const std::shared_ptr< ConfigurationElement > findConfigurationElement( const std::string & name )
+    const;
 
     /**
      * @brief       Test if has an configuration corresponding to the specified name.
@@ -106,19 +105,19 @@ struct FWRUNTIME_CLASS_API ConfigurationElementContainer
      */
     FWRUNTIME_API size_t size() const;
 
-protected:
+    protected:
 
-    /**
-     * @brief       Adds a new configuration element to the extension.
-     *
-     * @param[in]   element a shared pointer to the configuration element to add
-     */
-    FWRUNTIME_API void addConfigurationElement( ::boost::shared_ptr< ConfigurationElement > element );
+        /**
+         * @brief       Adds a new configuration element to the extension.
+         *
+         * @param[in]   element a shared pointer to the configuration element to add
+         */
+        FWRUNTIME_API void addConfigurationElement( std::shared_ptr< ConfigurationElement > element );
 
 
-private:
+    private:
 
-    Container m_elements;   ///< all configuration elements
+        Container m_elements; ///< all configuration elements
 
 };
 
@@ -126,4 +125,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_CONFIGURATIONELEMENTCONTAINER_HPP_
+#endif // __FWRUNTIME_CONFIGURATIONELEMENTCONTAINER_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Convert.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Convert.hpp
index 0d029a7..894b158 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Convert.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Convert.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_CONVERT_HPP_
-#define _FWRUNTIME_CONVERT_HPP_
+#ifndef __FWRUNTIME_CONVERT_HPP__
+#define __FWRUNTIME_CONVERT_HPP__
 
-#include <boost/shared_ptr.hpp>
 #include <boost/property_tree/ptree.hpp>
 
 
@@ -23,7 +22,7 @@ namespace fwRuntime
  * @brief   Defines the convert class.
  * @class   Convert
  * @date    2004-2009
- * 
+ *
  */
 class FWRUNTIME_CLASS_API Convert
 {
@@ -32,12 +31,12 @@ public:
     /**
      * @brief   Destructor : does nothing.
      */
-    FWRUNTIME_API virtual  ~Convert();
+    FWRUNTIME_API virtual ~Convert();
 
     /**
      * @brief   Build an xmlNodePtr from a ConfigurationElement
      */
-    FWRUNTIME_API static xmlNodePtr toXml( ::boost::shared_ptr< ::fwRuntime::ConfigurationElement > _cfgElement) ;
+    FWRUNTIME_API static xmlNodePtr toXml( std::shared_ptr< ::fwRuntime::ConfigurationElement > _cfgElement);
 
     /**
      * @brief   Build an std::string from a ConfigurationElement
@@ -47,16 +46,18 @@ public:
     /**
      * @brief   Build an xmlNodePtr with all running Bundles
      */
-    FWRUNTIME_API static xmlNodePtr runningBundlesToXml( ) ;
+    FWRUNTIME_API static xmlNodePtr runningBundlesToXml( );
 
 
-    FWRUNTIME_API static ::boost::property_tree::ptree toPropertyTree( ::fwRuntime::ConfigurationElement::sptr _cfgElement );
+    FWRUNTIME_API static ::boost::property_tree::ptree toPropertyTree(
+        ::fwRuntime::ConfigurationElement::sptr _cfgElement );
 
     FWRUNTIME_API static ::fwRuntime::ConfigurationElement::sptr fromPropertyTree( ::boost::property_tree::ptree pt );
 
-private :
+private:
 
-    FWRUNTIME_API static void fromConfigurationElementToXml( ::boost::shared_ptr< ::fwRuntime::ConfigurationElement > _cfgElement, xmlNodePtr _node) ; //_node is modified
+    FWRUNTIME_API static void fromConfigurationElementToXml(
+        std::shared_ptr< ::fwRuntime::ConfigurationElement > _cfgElement, xmlNodePtr _node);                                                       //_node is modified
 
     /**
      * @brief   Constructor : does nothing.
@@ -68,4 +69,4 @@ private :
 } // namespace fwRuntime
 
 
-#endif // _FWRUNTIME_CONVERT_HPP_
+#endif // __FWRUNTIME_CONVERT_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/EConfigurationElement.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/EConfigurationElement.hpp
index 15f51c8..f54dc44 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/EConfigurationElement.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/EConfigurationElement.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_ECONFIGURATIONELEMENT_HPP
-#define _FWRUNTIME_ECONFIGURATIONELEMENT_HPP
+#ifndef __FWRUNTIME_ECONFIGURATIONELEMENT_HPP__
+#define __FWRUNTIME_ECONFIGURATIONELEMENT_HPP__
 
 #include "fwRuntime/ConfigurationElement.hpp"
 #include "fwRuntime/config.hpp"
@@ -18,45 +18,45 @@ namespace fwRuntime
  * @brief   Editable configuration element : allow the self configuration element building, which reading XML structure provided by bundle descriptions
  * @class   EConfigurationElement
  * @date    2006-2009
- * 
+ *
  */
 class FWRUNTIME_CLASS_API EConfigurationElement : public ::fwRuntime::ConfigurationElement
 {
-    public :
-        fwCoreClassDefinitionsWithFactoryMacro( (EConfigurationElement)(ConfigurationElement),
-                                                ((( const std::string& ))),
-                                                new EConfigurationElement
-                                                );
-
-        /**
-         * @brief       Constructor.
-         * @param[in]   name name of the configuration element
-         */
-        FWRUNTIME_API       EConfigurationElement(const std::string& name) ;
-
-        /**
-         * @brief   Destructor : does nothing.
-         */
-        FWRUNTIME_API       virtual ~EConfigurationElement() ;
-
-        /**
-         * @brief       Create and add a configuration element.
-         * @param[in]   name name of the configuration element
-         * @return      the created configuration element
-         */
-        FWRUNTIME_API        EConfigurationElement::sptr addConfigurationElement( const std::string& name ) ;
-
-        /**
-         * @brief       Adds a new configuration element to the extension.
-         * @param[in]   element     a shared pointer to the configuration element to add
-         */
-        FWRUNTIME_API       void addConfigurationElement( EConfigurationElement::sptr element ) ;
-
-        FWRUNTIME_API       void setAttributeValue(const std::string& name, const std::string& value) throw() ;
-
-        FWRUNTIME_API       void setValue(const std::string& value) throw();
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (EConfigurationElement)(ConfigurationElement),
+                                            ((( const std::string& ))),
+                                            new EConfigurationElement
+                                            );
+
+    /**
+     * @brief       Constructor.
+     * @param[in]   name name of the configuration element
+     */
+    FWRUNTIME_API EConfigurationElement(const std::string& name);
+
+    /**
+     * @brief   Destructor : does nothing.
+     */
+    FWRUNTIME_API virtual ~EConfigurationElement();
+
+    /**
+     * @brief       Create and add a configuration element.
+     * @param[in]   name name of the configuration element
+     * @return      the created configuration element
+     */
+    FWRUNTIME_API EConfigurationElement::sptr addConfigurationElement( const std::string& name );
+
+    /**
+     * @brief       Adds a new configuration element to the extension.
+     * @param[in]   element     a shared pointer to the configuration element to add
+     */
+    FWRUNTIME_API void addConfigurationElement( EConfigurationElement::sptr element );
+
+    FWRUNTIME_API void setAttributeValue(const std::string& name, const std::string& value) throw();
+
+    FWRUNTIME_API void setValue(const std::string& value) throw();
 };
 
 }
 
-#endif /*_FWRUNTIME_ECONFIGURATIONELEMENT_HPP*/
+#endif /*__FWRUNTIME_ECONFIGURATIONELEMENT_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/EmptyPlugin.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/EmptyPlugin.hpp
index 961f477..7a9ffcd 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/EmptyPlugin.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/EmptyPlugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EMPTYPLUGIN_HPP_
-#define _FWRUNTIME_EMPTYPLUGIN_HPP_
+#ifndef __FWRUNTIME_EMPTYPLUGIN_HPP__
+#define __FWRUNTIME_EMPTYPLUGIN_HPP__
 
 
 #include "fwRuntime/config.hpp"
@@ -27,7 +27,7 @@ namespace fwRuntime
  *          it-self.
  *
  * @date    2004-2005
- * 
+ *
  */
 struct EmptyPlugin : public Plugin
 {
@@ -35,7 +35,9 @@ struct EmptyPlugin : public Plugin
     /**
      * @brief   Destructor : does nothing.
      */
-    virtual ~EmptyPlugin() throw() {}
+    virtual ~EmptyPlugin() throw()
+    {
+    }
 
 
     // Overrides
@@ -50,4 +52,4 @@ struct EmptyPlugin : public Plugin
 } // namespace fwRuntime
 
 
-#endif //_FWRUNTIME_EMPTYPLUGIN_HPP_
+#endif //__FWRUNTIME_EMPTYPLUGIN_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Executable.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Executable.hpp
index 8fbb821..097d70c 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Executable.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Executable.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXECUTABLE_HPP_
-#define _FWRUNTIME_EXECUTABLE_HPP_
+#ifndef __FWRUNTIME_EXECUTABLE_HPP__
+#define __FWRUNTIME_EXECUTABLE_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/config.hpp"
 #include "fwRuntime/IExecutable.hpp"
@@ -28,7 +27,7 @@ namespace fwRuntime
  * classes being exported by bundles.
  *
  * @date    2004-2009
- * 
+ *
  */
 struct FWRUNTIME_CLASS_API Executable : public IExecutable
 {
@@ -39,7 +38,7 @@ struct FWRUNTIME_CLASS_API Executable : public IExecutable
      * @return  a shared pointer to the configuration element being the initialization data of the executable
      *          or null when none
      */
-    FWRUNTIME_API const ::boost::shared_ptr< ConfigurationElement > getInitializationData() const throw();
+    FWRUNTIME_API const std::shared_ptr< ConfigurationElement > getInitializationData() const throw();
 
 
     /**
@@ -47,30 +46,31 @@ struct FWRUNTIME_CLASS_API Executable : public IExecutable
      */
     /// @{
 
-    FWRUNTIME_API virtual ::boost::shared_ptr<Bundle> getBundle() const throw();
+    FWRUNTIME_API virtual std::shared_ptr<Bundle> getBundle() const throw();
 
-    FWRUNTIME_API virtual void setInitializationData( const ::boost::shared_ptr< ConfigurationElement > configuration ) throw();
+    FWRUNTIME_API virtual void setInitializationData( const std::shared_ptr< ConfigurationElement > configuration )
+    throw();
 
     /// @}
 
 
-protected:
+    protected:
 
-    // Overrides
-    FWRUNTIME_API virtual void setBundle( ::boost::shared_ptr< Bundle > bundle );
+        // Overrides
+        FWRUNTIME_API virtual void setBundle( std::shared_ptr< Bundle > bundle );
 
 
-private:
+    private:
 
-    /**
-     * @brief   a pointer to the bundle that owns the executable instance
-     */
-     ::boost::shared_ptr< Bundle > m_bundle;
+        /**
+         * @brief   a pointer to the bundle that owns the executable instance
+         */
+        std::shared_ptr< Bundle > m_bundle;
 
-    /**
-     * @brief   the initialization data of the executable instance
-     */
-     ::boost::shared_ptr< ConfigurationElement > m_initializationData;
+        /**
+         * @brief   the initialization data of the executable instance
+         */
+        std::shared_ptr< ConfigurationElement > m_initializationData;
 
 };
 
@@ -80,4 +80,4 @@ private:
 
 
 
-#endif //_FWRUNTIME_EXECUTABLE_HPP_
+#endif //__FWRUNTIME_EXECUTABLE_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactory.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactory.hpp
index 45d2dcc..c8e8b94 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactory.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactory.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXECUTABLEFACTORY_HPP
-#define _FWRUNTIME_EXECUTABLEFACTORY_HPP
+#ifndef __FWRUNTIME_EXECUTABLEFACTORY_HPP__
+#define __FWRUNTIME_EXECUTABLEFACTORY_HPP__
 
 #include <string>
 
@@ -15,7 +15,7 @@
 
 namespace fwRuntime
 {
-    struct IExecutable;
+struct IExecutable;
 }
 
 
@@ -28,7 +28,7 @@ namespace fwRuntime
  * @brief   Defines the abstract executable factory class.
  * @struct  ExecutableFactory
  * @date    2004-2009
- * 
+ *
  */
 struct FWRUNTIME_CLASS_API ExecutableFactory : public BundleElement
 {
@@ -68,10 +68,10 @@ struct FWRUNTIME_CLASS_API ExecutableFactory : public BundleElement
     FWRUNTIME_API const std::string getType() const;
 
 
-private:
+    private:
 
 
-    std::string m_type; ///< a string containing the type identifier managed by the factory
+        std::string m_type; ///< a string containing the type identifier managed by the factory
 
 };
 
@@ -79,4 +79,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_EXECUTABLEFACTORY_HPP
+#endif // __FWRUNTIME_EXECUTABLEFACTORY_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactoryRegistrar.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactoryRegistrar.hpp
index 7abb546..50d3401 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactoryRegistrar.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/ExecutableFactoryRegistrar.hpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXECUTABLEFACTORYREGISTRAR_HPP_
-#define _FWRUNTIME_EXECUTABLEFACTORYREGISTRAR_HPP_
+#ifndef __FWRUNTIME_EXECUTABLEFACTORYREGISTRAR_HPP__
+#define __FWRUNTIME_EXECUTABLEFACTORYREGISTRAR_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/config.hpp"
 
-
+#include <memory>
 
 namespace fwRuntime
 {
@@ -32,7 +31,7 @@ struct ExecutableFactory;
  * That's why this class is design to be instanciated as static object.
  *
  * @date    2004-2009
- * 
+ *
  */
 struct ExecutableFactoryRegistrar
 {
@@ -43,7 +42,7 @@ struct ExecutableFactoryRegistrar
      * @param[in]   factory a shared pointer to an executable factory instance to manage
      * @pre         Loading bundle exists.
      */
-    FWRUNTIME_API ExecutableFactoryRegistrar( ::boost::shared_ptr< ExecutableFactory > factory );
+    FWRUNTIME_API ExecutableFactoryRegistrar( std::shared_ptr< ExecutableFactory > factory );
 
 };
 
@@ -52,4 +51,4 @@ struct ExecutableFactoryRegistrar
 
 
 
-#endif //_FWRUNTIME_EXECUTABLEFACTORYREGISTRAR_HPP_
+#endif //__FWRUNTIME_EXECUTABLEFACTORYREGISTRAR_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Extension.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Extension.hpp
index b1f6545..4cd67ca 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Extension.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Extension.hpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXTENSION_HPP
-#define _FWRUNTIME_EXTENSION_HPP
+#ifndef __FWRUNTIME_EXTENSION_HPP__
+#define __FWRUNTIME_EXTENSION_HPP__
 
 #include <string>
 #include <libxml/tree.h>
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/config.hpp"
 #include "fwRuntime/BundleElement.hpp"
@@ -26,7 +25,7 @@ struct Bundle;
 
 namespace io
 {
-    struct BundleDescriptorReader;
+struct BundleDescriptorReader;
 } // namespace io
 
 
@@ -34,9 +33,10 @@ namespace io
  * @brief   Defines the extension class.
  * @struct  Extension
  * @date    2004-2009
- * 
+ *
  */
-struct Extension : public BundleElement, public ConfigurationElementContainer
+struct Extension : public BundleElement,
+                   public ConfigurationElementContainer
 {
     friend struct ::fwRuntime::io::BundleDescriptorReader;
 
@@ -97,35 +97,36 @@ struct Extension : public BundleElement, public ConfigurationElementContainer
      */
     FWRUNTIME_API Validity validate();
 
-protected:
-
-    /**
-     * @brief       Constructor.
-     *
-     * @param[in]   bundle  a pointer to the bundle the extension is attached to
-     * @param[in]   id      a string containing the extension identifier
-     * @param[in]   point   a string containing the extension point identifier
-     * @param[in]   xmlNode a pointer to the xml node that represents the extension
-     *
-     * @todo        test parameters validity
-     */
-    Extension( ::boost::shared_ptr<Bundle> bundle, const std::string & id, const std::string & point, const xmlNodePtr xmlNode );
-
-
-private:
-
-    const std::string   m_id;       ///< A string containing the extension identifier.
-    const std::string   m_point;    ///< A string containing the extension point identifier the extension will be connected to.
-    xmlDocPtr           m_xmlDoc;   ///< A pointer to the xml document that contains the xml node representing the extension
-    xmlNodePtr          m_xmlNode;  ///< A pointer to the xml node that represents the extension
-    Validity            m_validity; ///< The validity state of the extension
-
-    /**
-     * @brief   Assignment operator.
-     *
-     * @remark  Assignment is forbidden.
-     */
-    void operator=(const Extension&) throw();
+    protected:
+
+        /**
+         * @brief       Constructor.
+         *
+         * @param[in]   bundle  a pointer to the bundle the extension is attached to
+         * @param[in]   id      a string containing the extension identifier
+         * @param[in]   point   a string containing the extension point identifier
+         * @param[in]   xmlNode a pointer to the xml node that represents the extension
+         *
+         * @todo        test parameters validity
+         */
+        Extension( std::shared_ptr<Bundle> bundle, const std::string & id, const std::string & point,
+                   const xmlNodePtr xmlNode );
+
+
+    private:
+
+        const std::string m_id;     ///< A string containing the extension identifier.
+        const std::string m_point;  ///< A string containing the extension point identifier the extension will be connected to.
+        xmlDocPtr m_xmlDoc;         ///< A pointer to the xml document that contains the xml node representing the extension
+        xmlNodePtr m_xmlNode;       ///< A pointer to the xml node that represents the extension
+        Validity m_validity;        ///< The validity state of the extension
+
+        /**
+         * @brief   Assignment operator.
+         *
+         * @remark  Assignment is forbidden.
+         */
+        void operator=(const Extension&) throw();
 
 };
 
@@ -133,4 +134,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_EXTENSION_HPP
+#endif // __FWRUNTIME_EXTENSION_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/ExtensionPoint.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/ExtensionPoint.hpp
index fb8c264..9718890 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/ExtensionPoint.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/ExtensionPoint.hpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXTENSIONPOINT_HPP
-#define _FWRUNTIME_EXTENSIONPOINT_HPP
+#ifndef __FWRUNTIME_EXTENSIONPOINT_HPP__
+#define __FWRUNTIME_EXTENSIONPOINT_HPP__
 
 #include <algorithm>
 #include <iostream>
 #include <string>
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -22,13 +21,13 @@
 
 namespace fwRuntime
 {
-    struct Bundle;
+struct Bundle;
 
-    namespace io
-    {
-        struct BundleDescriptorReader;
-        struct Validator;
-    }
+namespace io
+{
+struct BundleDescriptorReader;
+struct Validator;
+}
 }
 
 
@@ -40,13 +39,13 @@ namespace fwRuntime
  * @brief   Defines the extension point class.
  * @struct  ExtensionPoint
  * @date    2004-2009
- * 
+ *
  */
 struct ExtensionPoint : public BundleElement
 {
     friend struct ::fwRuntime::io::BundleDescriptorReader;
 
-    typedef Extension::Container    ConfigurationElementContainer;
+    typedef Extension::Container ConfigurationElementContainer;
 
     /**
      * @brief   Retrieves all configuration elements contributed by extensions
@@ -58,8 +57,8 @@ struct ExtensionPoint : public BundleElement
     {
         typedef std::back_insert_iterator< ConfigurationElementContainer >  Inserter;
 
-        ConfigurationElementContainer   container;
-        Inserter                        inserter(container);
+        ConfigurationElementContainer container;
+        Inserter inserter(container);
 
         getAllConfigurationElements<Inserter>( inserter );
 
@@ -77,18 +76,18 @@ struct ExtensionPoint : public BundleElement
     void getAllConfigurationElements( OutputIterator & output ) const
     {
         // Retrieves all connected extensions.
-        typedef std::vector< ::boost::shared_ptr< Extension > > ExtensionContainer;
+        typedef std::vector< std::shared_ptr< Extension > > ExtensionContainer;
         typedef std::back_insert_iterator< ExtensionContainer > Inserter;
 
-        ExtensionContainer  extensions;
-        Inserter            inserter(extensions);
+        ExtensionContainer extensions;
+        Inserter inserter(extensions);
 
         getAllExtensions( inserter );
 
         // Walk through the collected extensions to extract configuration elements.
         for( ExtensionContainer::const_iterator i = extensions.begin(); i != extensions.end(); ++i )
         {
-            ::boost::shared_ptr< Extension >   extension( *i );
+            std::shared_ptr< Extension >   extension( *i );
             if ( extension->isEnable() )
             {
                 std::copy( extension->begin(), extension->end(), output);
@@ -111,10 +110,10 @@ struct ExtensionPoint : public BundleElement
 
         for( Runtime::ExtensionIterator i = rntm->extensionsBegin(); i != rntm->extensionsEnd(); ++i )
         {
-            ::boost::shared_ptr< Extension >   extension( *i );
+            std::shared_ptr< Extension >   extension( *i );
             if( extension->getPoint() == m_id && extension->isEnable() == true
-                    && extension->validate() == Extension::Valid
-            )
+                && extension->validate() == Extension::Valid
+                )
             {
                 *output = extension;
                 ++output;
@@ -135,39 +134,39 @@ struct ExtensionPoint : public BundleElement
      *
      * @return  a shared pointer to the extension validator, or null when none
      */
-    FWRUNTIME_API ::boost::shared_ptr< io::Validator > getExtensionValidator() const;
+    FWRUNTIME_API std::shared_ptr< io::Validator > getExtensionValidator() const;
 
 
-protected:
+    protected:
 
 
-    /**
-     * @brief       constructor
-     *
-     * @param[in]   bundle  a shared pointer to the bundle where the extension
-     *                      point is declared
-     * @param[in]   id      a string containing the extension point identifier
-     * @param[in]   schema  a path to a file containing an XML schema used to
-     *                      validate extensions contributed to the point.
-     */
-    ExtensionPoint(
-            const ::boost::shared_ptr<Bundle>       bundle,
+        /**
+         * @brief       constructor
+         *
+         * @param[in]   bundle  a shared pointer to the bundle where the extension
+         *                      point is declared
+         * @param[in]   id      a string containing the extension point identifier
+         * @param[in]   schema  a path to a file containing an XML schema used to
+         *                      validate extensions contributed to the point.
+         */
+        ExtensionPoint(
+            const std::shared_ptr<Bundle>       bundle,
             const std::string&              id,
             const boost::filesystem::path&  schema);
 
 
-private:
+    private:
 
-    const std::string                               m_id;           ///< a string containing the extension point identifier
-    const ::boost::filesystem::path                 m_schema;       ///< a path to the XML schema used to validate contributed extensions
-    mutable ::boost::shared_ptr< io::Validator >    m_validator;    ///< a shared pointer to the extension validator
+        const std::string m_id;                                     ///< a string containing the extension point identifier
+        const ::boost::filesystem::path m_schema;                   ///< a path to the XML schema used to validate contributed extensions
+        mutable std::shared_ptr< io::Validator >    m_validator;///< a shared pointer to the extension validator
 
-    /**
-     * @brief   Assignment operator.
-     *
-     * @remark  Assignment is forbidden for this class.
-     */
-    void operator=(const ExtensionPoint&) throw();
+        /**
+         * @brief   Assignment operator.
+         *
+         * @remark  Assignment is forbidden for this class.
+         */
+        void operator=(const ExtensionPoint&) throw();
 
 };
 
@@ -175,4 +174,4 @@ private:
 
 
 
-#endif // #define _FWRUNTIME_EXTENSIONPOINT_HPP
+#endif // __FWRUNTIME_EXTENSIONPOINT_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/IExecutable.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/IExecutable.hpp
index 2db7515..47449c1 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/IExecutable.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/IExecutable.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXECUTABLE_HPP
-#define _FWRUNTIME_EXECUTABLE_HPP
+#ifndef __FWRUNTIME_IEXECUTABLE_HPP__
+#define __FWRUNTIME_IEXECUTABLE_HPP__
 
 #include <string>
 
@@ -18,7 +18,8 @@ namespace fwRuntime
 {
 
 
-#define REGISTER_EXECUTABLE( type, id ) static ::fwRuntime::utils::GenericExecutableFactoryRegistrar< type > registrar( id );
+#define REGISTER_EXECUTABLE( type, id ) static ::fwRuntime::utils::GenericExecutableFactoryRegistrar< type > registrar( \
+        id );
 
 
 
@@ -35,7 +36,7 @@ struct Runtime;
  * point of a plugin.
  *
  * @date    2004-2009
- * 
+ *
  */
 struct FWRUNTIME_CLASS_API IExecutable
 {
@@ -53,7 +54,7 @@ struct FWRUNTIME_CLASS_API IExecutable
      *
      * @return  a pointer to the originating bundle.
      */
-    virtual ::boost::shared_ptr<Bundle> getBundle() const throw() = 0;
+    virtual std::shared_ptr<Bundle> getBundle() const throw() = 0;
 
     /**
      * @brief       Initializes the executable instance with the specified
@@ -62,17 +63,17 @@ struct FWRUNTIME_CLASS_API IExecutable
      * @param[in]   configuration   a shared pointer to the configuration element used to
      *              trigger this execution
      */
-    virtual void setInitializationData( const ::boost::shared_ptr<ConfigurationElement> configuration ) throw() = 0;
+    virtual void setInitializationData( const std::shared_ptr<ConfigurationElement> configuration ) throw() = 0;
 
 
-protected:
+    protected:
 
-    /**
-     * @brief       Updates the bundle the executable originates from.
-     *
-     * @param[in]   bundle  a pointer to the bundle the executable originates from
-     */
-    virtual void setBundle( ::boost::shared_ptr< Bundle > bundle ) = 0;
+        /**
+         * @brief       Updates the bundle the executable originates from.
+         *
+         * @param[in]   bundle  a pointer to the bundle the executable originates from
+         */
+        virtual void setBundle( std::shared_ptr< Bundle > bundle ) = 0;
 
 };
 
@@ -82,4 +83,4 @@ protected:
 
 
 
-#endif // _FWRUNTIME_EXECUTABLE_HPP
+#endif // __FWRUNTIME_IEXECUTABLE_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/IPlugin.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/IPlugin.hpp
index e9cfba6..6ec1908 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/IPlugin.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/IPlugin.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PLUGIN_HPP
-#define _FWRUNTIME_PLUGIN_HPP
+#ifndef __FWRUNTIME_IPLUGIN_HPP__
+#define __FWRUNTIME_IPLUGIN_HPP__
 
 #include <string>
 
@@ -24,7 +24,7 @@ namespace fwRuntime
  * @brief   Defines the plugin interface.
  * @struct  IPlugin
  * @date    2004-2009
- * 
+ *
  */
 struct FWRUNTIME_CLASS_API IPlugin : public IExecutable
 {
@@ -60,4 +60,4 @@ struct FWRUNTIME_CLASS_API IPlugin : public IExecutable
 
 } // namespace fwRuntime
 
-#endif // #define _FWRUNTIME_PLUGIN_HPP
+#endif // __FWRUNTIME_IPLUGIN_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp
index e727686..e55d70c 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRUNTIMENAMESPACE_HPP_
-#define FWRUNTIMENAMESPACE_HPP_
+#ifndef __FWRUNTIME_NAMESPACE_HPP__
+#define __FWRUNTIME_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwRuntime contains classes to manage bundle, configuration element, extension point in the runtime environment from a configuration file .
  * @namespace   fwRuntime
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace fwRuntime
 {
 }
-#endif /* FWRUNTIMENAMESPACE_HPP_ */
+#endif /* __FWRUNTIME_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Plugin.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Plugin.hpp
index a028f15..80628ff 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Plugin.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Plugin.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PLUGIN_HPP_
-#define _FWRUNTIME_PLUGIN_HPP_
+#ifndef __FWRUNTIME_PLUGIN_HPP__
+#define __FWRUNTIME_PLUGIN_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/config.hpp"
 #include "fwRuntime/IPlugin.hpp"
@@ -25,7 +24,7 @@ namespace fwRuntime
  * function must be implemented.
  *
  * @date    2004-2009
- * 
+ *
  */
 struct FWRUNTIME_CLASS_API Plugin : public IPlugin
 {
@@ -34,23 +33,23 @@ struct FWRUNTIME_CLASS_API Plugin : public IPlugin
      * @name    Overrides
      */
     //@{
-    FWRUNTIME_API ::boost::shared_ptr<Bundle> getBundle() const throw();
-    FWRUNTIME_API virtual void setInitializationData(const SPTR(ConfigurationElement) configuration) throw();
+    FWRUNTIME_API std::shared_ptr<Bundle> getBundle() const throw();
+    FWRUNTIME_API virtual void setInitializationData(const SPTR(ConfigurationElement)configuration) throw();
     //@}
 
 
-protected:
+    protected:
 
-    // Overrides
-    FWRUNTIME_API void setBundle( ::boost::shared_ptr<Bundle> bundle) throw();
+        // Overrides
+        FWRUNTIME_API void setBundle( std::shared_ptr<Bundle> bundle) throw();
 
 
-private:
+    private:
 
-    /**
-     * @brief   a pointer to the bundle the plugin is attached to
-     */
-     ::boost::shared_ptr<Bundle> m_bundle;
+        /**
+         * @brief   a pointer to the bundle the plugin is attached to
+         */
+        std::shared_ptr<Bundle> m_bundle;
 
 };
 
@@ -58,4 +57,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif //_FWRUNTIME_PLUGIN_HPP_
+#endif //__FWRUNTIME_PLUGIN_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Runtime.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Runtime.hpp
index e1bb855..6c59148 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Runtime.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Runtime.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_FWRUNTIME_HPP
-#define _FWRUNTIME_FWRUNTIME_HPP
+#ifndef __FWRUNTIME_RUNTIME_HPP__
+#define __FWRUNTIME_RUNTIME_HPP__
 
-#include <boost/shared_ptr.hpp>
 #include <boost/filesystem/path.hpp>
 #include <set>
 #include <vector>
@@ -18,13 +17,13 @@
 
 namespace fwRuntime
 {
-    struct Bundle;
-    struct ConfigurationElement;
-    struct Extension;
-    struct ExtensionPoint;
-    struct IExecutable;
-    struct ExecutableFactory;
-    struct IPlugin;
+struct Bundle;
+struct ConfigurationElement;
+struct Extension;
+struct ExtensionPoint;
+struct IExecutable;
+struct ExecutableFactory;
+struct IPlugin;
 }
 
 namespace fwRuntime
@@ -34,7 +33,7 @@ namespace fwRuntime
  * @brief   Defines the runtime class.
  * @struct  Runtime
  * @date    2004-2009
- * 
+ *
  */
 struct Runtime
 {
@@ -42,11 +41,11 @@ struct Runtime
      * @name    Type Definitions
      */
     //@{
-    typedef std::set< ::boost::shared_ptr<Bundle> >     BundleContainer;    ///< Defines the bundle container type.
-    typedef BundleContainer::iterator                   BundleIterator;     ///< Defines the bundle container iterator type.
+    typedef std::set< std::shared_ptr<Bundle> >     BundleContainer;    ///< Defines the bundle container type.
+    typedef BundleContainer::iterator BundleIterator;                       ///< Defines the bundle container iterator type.
 
-    typedef std::set< ::boost::shared_ptr<Extension> >  ExtensionContainer; ///< Defines the extension container type.
-    typedef ExtensionContainer::iterator                ExtensionIterator;  ///< Defines the extension container type.
+    typedef std::set< std::shared_ptr<Extension> >  ExtensionContainer; ///< Defines the extension container type.
+    typedef ExtensionContainer::iterator ExtensionIterator;                 ///< Defines the extension container type.
     //@}
 
 
@@ -63,6 +62,20 @@ struct Runtime
 
 
     /**
+     * @brief       Set the working path where Bundles and share folder are located.
+     *
+     * @param[in]   workingPath a boost path.
+     */
+    FWRUNTIME_API void setWorkingPath(const ::boost::filesystem::path &workingPath);
+
+    /**
+     * @brief       Get the path where Bundles and share folder are located.
+     *
+     * @return      a boost path.
+     */
+    FWRUNTIME_API ::boost::filesystem::path getWorkingPath() const;
+
+    /**
      * @name    Bundles
      *
      * @{
@@ -74,14 +87,14 @@ struct Runtime
      * @remark      The given bundle state will be altered according to the current configuration rules.
      * @param[in]   bundle  a shared pointer to the bundle instance to add
      */
-    FWRUNTIME_API void addBundle( ::boost::shared_ptr< Bundle > bundle ) throw( RuntimeException );
+    FWRUNTIME_API void addBundle( std::shared_ptr< Bundle > bundle ) throw( RuntimeException );
 
     /**
      * @brief       Unregister a bundle instance to the runtime system.
      *
      * @param[in]   bundle  a shared pointer to the bundle instance to unregister
      */
-    FWRUNTIME_API void unregisterBundle( ::boost::shared_ptr< Bundle > bundle );
+    FWRUNTIME_API void unregisterBundle( std::shared_ptr< Bundle > bundle );
 
     /**
      * @brief       Adds all bundle found in t he given path.
@@ -112,7 +125,8 @@ struct Runtime
      *
      * @return      a shared pointer to the found bundle or null if none
      */
-    FWRUNTIME_API ::boost::shared_ptr< Bundle > findBundle( const std::string & identifier, const Version & version = Version() ) const;
+    FWRUNTIME_API std::shared_ptr< Bundle > findBundle( const std::string & identifier,
+                                                        const Version & version = Version() ) const;
 
     //@}
 
@@ -128,14 +142,14 @@ struct Runtime
      *
      * @param[in]   factory a shared pointer to an executable factory
      */
-    FWRUNTIME_API void addExecutableFactory( ::boost::shared_ptr< ExecutableFactory > factory ) throw(RuntimeException);
+    FWRUNTIME_API void addExecutableFactory( std::shared_ptr< ExecutableFactory > factory ) throw(RuntimeException);
 
     /**
      * @brief       Unregister a new executable factory instance to the runtime system.
      *
      * @param[in]   factory a shared pointer to an executable factory
      */
-    FWRUNTIME_API void unregisterExecutableFactory( ::boost::shared_ptr< ExecutableFactory > factory );
+    FWRUNTIME_API void unregisterExecutableFactory( std::shared_ptr< ExecutableFactory > factory );
 
     /**
      * @brief   Create an instance of the given executable object type.
@@ -165,7 +179,9 @@ struct Runtime
      *
      * @return  a pointer to the created executable instance
      */
-    FWRUNTIME_API IExecutable * createExecutableInstance( const std::string & type, ::boost::shared_ptr< ConfigurationElement > configurationElement ) throw( RuntimeException );
+    FWRUNTIME_API IExecutable * createExecutableInstance( const std::string & type,
+                                                          std::shared_ptr< ConfigurationElement > configurationElement )
+    throw( RuntimeException );
 
     /**
      * @brief       Retrieves the executable factory for the given identifier.
@@ -174,7 +190,7 @@ struct Runtime
      *
      * @return      a sgared pointer to the found executable factory or null of none
      */
-    FWRUNTIME_API ::boost::shared_ptr< ExecutableFactory > findExecutableFactory( const std::string & type ) const;
+    FWRUNTIME_API std::shared_ptr< ExecutableFactory > findExecutableFactory( const std::string & type ) const;
 
     /**
      * @brief       Retrieves the plugin instance for the specified bundle.
@@ -183,7 +199,7 @@ struct Runtime
      *
      * @return      a shared pointer to a plugin instance or null if none
      */
-    FWRUNTIME_API ::boost::shared_ptr< IPlugin > getPlugin( const ::boost::shared_ptr< Bundle > bundle ) const;
+    FWRUNTIME_API std::shared_ptr< IPlugin > getPlugin( const std::shared_ptr< Bundle > bundle ) const;
 
     //@}
 
@@ -199,14 +215,14 @@ struct Runtime
      *
      * @param[in]   extension   a shared pointer to the extension to register
      */
-    FWRUNTIME_API void addExtension( ::boost::shared_ptr<Extension> extension) throw(RuntimeException);
+    FWRUNTIME_API void addExtension( std::shared_ptr<Extension> extension) throw(RuntimeException);
 
     /**
      * @brief       Unregister a new extension.
      *
      * @param[in]   extension   a shared pointer to the extension to register
      */
-    FWRUNTIME_API void unregisterExtension( ::boost::shared_ptr<Extension> extension);
+    FWRUNTIME_API void unregisterExtension( std::shared_ptr<Extension> extension);
 
     /**
      * @brief   Retrieves the iterator on the beginning of the extension collection.
@@ -229,7 +245,7 @@ struct Runtime
      *
      * @return      a shared pointer to the found extension instance or null if none
      */
-    FWRUNTIME_API ::boost::shared_ptr< Extension > findExtension( const std::string & identifier ) const;
+    FWRUNTIME_API std::shared_ptr< Extension > findExtension( const std::string & identifier ) const;
 
     //@}
 
@@ -243,14 +259,14 @@ struct Runtime
      *
      * @param[in]   point   a pointer to the extension point to register
      */
-    FWRUNTIME_API void addExtensionPoint( ::boost::shared_ptr<ExtensionPoint> point) throw(RuntimeException);
+    FWRUNTIME_API void addExtensionPoint( std::shared_ptr<ExtensionPoint> point) throw(RuntimeException);
 
     /**
      * @brief       Unregister a new extension point.
      *
      * @param[in]   point   a pointer to the extension point to register
      */
-    FWRUNTIME_API void unregisterExtensionPoint( ::boost::shared_ptr<ExtensionPoint> point);
+    FWRUNTIME_API void unregisterExtensionPoint( std::shared_ptr<ExtensionPoint> point);
 
     /**
      * @brief       Retrieves the extension point instance matching the specified identifier.
@@ -259,32 +275,34 @@ struct Runtime
      *
      * @return      a shared pointer to the found extension point instance or null if none
      */
-    FWRUNTIME_API ::boost::shared_ptr< ExtensionPoint > findExtensionPoint( const std::string & identifier ) const;
+    FWRUNTIME_API std::shared_ptr< ExtensionPoint > findExtensionPoint( const std::string & identifier ) const;
     //@}
 
-private:
+    private:
 
-    typedef std::set< ::boost::shared_ptr< ExecutableFactory > > ExecutableFactoryContainer;    ///< Defines the executable factory container type.
-    typedef std::set< ::boost::shared_ptr<ExtensionPoint> > ExtensionPointContainer;            ///< Defines the extension point container type.
-    typedef std::vector< ::boost::shared_ptr<IPlugin> > PluginContainer;                        ///< Defines the plugin container type.
+        typedef std::set< std::shared_ptr< ExecutableFactory > > ExecutableFactoryContainer; ///< Defines the executable factory container type.
+        typedef std::set< std::shared_ptr<ExtensionPoint> > ExtensionPointContainer;        ///< Defines the extension point container type.
+        typedef std::vector< std::shared_ptr<IPlugin> > PluginContainer;                    ///< Defines the plugin container type.
 
-    static ::boost::shared_ptr<Runtime> m_instance; ///< The runtime instance.
+        static std::shared_ptr<Runtime> m_instance; ///< The runtime instance.
 
-    ExecutableFactoryContainer                  m_executableFactories;  ///< Contains all executable factories.
-    ExtensionContainer                          m_extensions;           ///< Contains all registered extensions.
-    ExtensionPointContainer                     m_extensionPoints;      ///< Contains all registered extension points.
-    BundleContainer                             m_bundles;              ///< Contains all bundles.
-    PluginContainer                             m_plugins;              ///< Contains all plugins.
+        ExecutableFactoryContainer m_executableFactories;               ///< Contains all executable factories.
+        ExtensionContainer m_extensions;                                ///< Contains all registered extensions.
+        ExtensionPointContainer m_extensionPoints;                      ///< Contains all registered extension points.
+        BundleContainer m_bundles;                                      ///< Contains all bundles.
+        PluginContainer m_plugins;                                      ///< Contains all plugins.
 
+        ::boost::filesystem::path m_workingPath; ///< Path wehre Bundles and share folder are located.
 
-    /**
-     * @brief   Constructor.
-     */
-    Runtime();
+
+        /**
+         * @brief   Constructor.
+         */
+        Runtime();
 };
 
 
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_FWRUNTIME_HPP
+#endif // __FWRUNTIME_RUNTIME_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/RuntimeException.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/RuntimeException.hpp
index 9d90bdd..a873796 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/RuntimeException.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/RuntimeException.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_EXCEPTION_HPP
-#define _FWRUNTIME_EXCEPTION_HPP
+#ifndef __FWRUNTIME_RUNTIMEEXCEPTION_HPP__
+#define __FWRUNTIME_RUNTIMEEXCEPTION_HPP__
 
 #include <exception>
 #include <string>
@@ -23,7 +23,7 @@ namespace fwRuntime
  * @brief   Defines the runtime exception class.
  * @struct  RuntimeException
  * @date    2004-2009
- * 
+ *
  */
 struct FWRUNTIME_CLASS_API RuntimeException : public ::fwCore::Exception
 {
@@ -53,4 +53,4 @@ struct FWRUNTIME_CLASS_API RuntimeException : public ::fwCore::Exception
 } // namespace fwRuntime
 
 
-#endif // #ifndef _FWRUNTIME_EXCEPTION_HPP
+#endif // __FWRUNTIME_RUNTIMEEXCEPTION_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/Version.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/Version.hpp
index 791e5cf..3d44b05 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/Version.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/Version.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_VERSION_HPP_
-#define _FWRUNTIME_VERSION_HPP_
+#ifndef __FWRUNTIME_VERSION_HPP__
+#define __FWRUNTIME_VERSION_HPP__
 
 #include <string>
 #include <iostream>
@@ -17,10 +17,8 @@ namespace fwRuntime
 
 
 /**
- * @brief   Managment of lib and bundle version.
+ * @brief   Management of lib and bundle version.
  * @struct  Version
- * @date    2007-2009
- * 
  */
 struct Version
 {
@@ -44,9 +42,8 @@ struct Version
      *
      * @param[in]   major   the version major number
      * @param[in]   minor   the version minor number (0 by default)
-     * @param[in]   build   the version build number (0 by default)
      */
-    FWRUNTIME_API Version(const int major, const int minor = 0, const int build = 0);
+    FWRUNTIME_API Version(const int major, const int minor = 0);
 
 
     /**
@@ -65,12 +62,11 @@ struct Version
      */
     FWRUNTIME_API friend std::ostream & operator<<(std::ostream & os, const Version & version);
 
-private :
+    private:
 
-    int m_major;    ///< defines the major number of the version
-    int m_minor;    ///< defines the minor number of the version
-    int m_build;    ///< defines the svn build number of the version
-    bool m_defined; ///< to know if the version is defined
+        int m_major; ///< defines the major number of the version
+        int m_minor; ///< defines the minor number of the version
+        bool m_defined; ///< to know if the version is defined
 };
 
 
@@ -80,4 +76,4 @@ private :
 
 } // namespace fwRuntime
 
-#endif /*_FWRUNTIME_VERSION_HPP_*/
+#endif /*__FWRUNTIME_VERSION_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/config.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/config.hpp
deleted file mode 100644
index ec6e19e..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/config.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_CONFIG_HPP_
-#define _FWRUNTIME_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWRUNTIME_EXPORTS
-    #define FWRUNTIME_API __declspec(dllexport)
-    #else
-    #define FWRUNTIME_API __declspec(dllimport)
-    #endif
-    
-    #define FWRUNTIME_CLASS_API 
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWRUNTIME_EXPORTS
-        #define FWRUNTIME_API __attribute__ ((visibility("default")))
-        #define FWRUNTIME_CLASS_API __attribute__ ((visibility("default")))
-        #else
-        //#define FWRUNTIME_API __attribute__ ((visibility("hidden")))
-        //#define FWRUNTIME_CLASS_API __attribute__ ((visibility("hidden")))
-        #define FWRUNTIME_API
-        #define FWRUNTIME_CLASS_API
-        #endif
-
-#else
-
-    #define FWRUNTIME_API 
-    #define FWRUNTIME_CLASS_API 
-    
-#endif
-
-
-#endif //_FWRUNTIME_CONFIG_HPP_
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Darwin.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Darwin.hpp
deleted file mode 100644
index 15f5986..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Darwin.hpp
+++ /dev/null
@@ -1,110 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_DL_DARWIN_HPP
-#define _FWRUNTIME_DL_DARWIN_HPP
-
-
-#ifdef __MACOSX__
-
-
-#include <dlfcn.h>
-
-#include "fwRuntime/dl/Native.hpp"
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-/**
- * @brief   Implements a posix native module.
- * @struct  Darwin
- * @date    2004-2009
- *
- * 
- */
-struct Darwin : public Native
-{
-
-    /**
-     * @brief   Constructor.
-     *
-     * @param   modulePath  a path to the module to path
-     *
-     * @param   partialName     a boolean telling if the module filename is just
-     *                          a part of the real filename
-     */
-    //Darwin(const boost::filesystem::path& modulePath, const bool partialName) throw();
-    Darwin( const boost::filesystem::path & modulePath ) throw();
-
-    /**
-     * @brief   Destructor.
-     */
-    ~Darwin() throw();
-
-
-    /**
-     * @see ::fwRuntime::dl::Native#isLoaded
-     */
-    bool isLoaded() const throw();
-
-    /**
-     * @brief   Retrieves the address of a symbol specified by its name.
-     *
-     * @param   name    a string containing the symbol name.
-     *
-     * @return  a pointer to the found symbol or null if none has been found
-     */
-    void* getSymbol(const std::string& name) const throw(RuntimeException);
-
-    /**
-     * @see ::fwRuntime::dl::Native#load
-     */
-    void load() throw(RuntimeException);
-
-    /**
-     * @see ::fwRuntime::dl::Native#unload
-     */
-    void unload() throw(RuntimeException);
-
-
-protected:
-
-    /**
-     * @brief   Retrieves the native module file prefix.
-     *
-     * @return  a string containing the native module file prefix
-     */
-    const std::string getNativeFilePrefix() const throw();
-
-    /**
-     * @brief   Retrieves the native module file suffix.
-     *
-     * @return  a string containing the native module file suffix
-     */
-    const std::string getNativeFileSuffix() const throw();
-
-private:
-
-    /**
-     * @brief   The handle of the loaded module.
-     */
-    void *m_handle;
-
-};
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-#endif // #ifdef __MACOSX__
-
-#endif // _FWRUNTIME_DL_DARWIN_HPP
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Darwin.hxx b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Darwin.hxx
deleted file mode 100644
index 751f215..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Darwin.hxx
+++ /dev/null
@@ -1,31 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#if defined(__MACOSX__) && !defined(FWRUNTIME_API)
-
-// Dynamic shared library (dylib) initialization routine
-//   required to initialize static C++ objects bacause of lazy dynamic linking
-//   http://developer.apple.com/techpubs/macosx/Essentials/
-//          SystemOverview/Frameworks/Dynamic_Shared_Libraries.html
-
-extern "C" {
-    void __initialize_Cplusplus(void);
-    void DylibInit(void);
-};
-
-void DylibInit()
-{
-    // The function __initialize_Cplusplus() must be called from the shared
-    // library initialization routine to cause the static C++ objects in
-    // the library to be initialized (reference number 2441683).
-
-    // This only seems to be necessary if the library initialization routine
-    // needs to use the static C++ objects
-    __initialize_Cplusplus();
-
-}
-
-#endif
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/DarwinNameDecorator.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/DarwinNameDecorator.hpp
deleted file mode 100644
index f1dfb74..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/DarwinNameDecorator.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_DL_POSIXNAMEDECORATOR_HPP_
-#define _FWRUNTIME_DL_POSIXNAMEDECORATOR_HPP_
-
-
-
-#include "fwRuntime/dl/NameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-/**
- * @brief   Implements a posix specific name decorator.
- * @struct  DarwinNameDecorator
- * @date    2004-2009
- * 
- */
-struct DarwinNameDecorator : public NameDecorator
-{
-
-
-protected:
-
-    /**
-     * @name        Ovrerides
-     */
-    //@{
-    const std::string getNativePrefix() const throw();
-    const std::string getNativeExtension() const throw();
-    //@}
-
-};
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-
-
-#endif /*_FWRUNTIME_DL_POSIXNAMEDECORATOR_HPP_*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/INameDecorator.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/INameDecorator.hpp
deleted file mode 100644
index c2dd0d6..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/INameDecorator.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_DL_INAMEDECORATOR_HPP_
-#define _FWRUNTIME_DL_INAMEDECORATOR_HPP_
-
-
-#include <string>
-
-
-namespace fwRuntime
-{
-namespace dl
-{
-
-
-
-/**
- * @brief   Defines the interface of library name decorators.
- * @struct  INameDecorator
- * @date    2004-2009
- * 
- */
-struct INameDecorator
-{
-
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    virtual ~INameDecorator();
-
-    /**
-     * @brief       Retrieves the native library file name for the given abstract file name.
-     *
-     * The native name can be a pattern and will be used for string matching.
-     *
-     * @param[in]   abstractName        the abstract library file name to convert to native library file name
-     */
-    virtual const std::string getNativeName( const std::string & abstractName ) const throw() = 0;
-
-};
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-
-
-#endif /*_FWRUNTIME_DL_INAMEDECORATOR_HPP_*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Library.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Library.hpp
index 266ed73..83f57a2 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Library.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Library.hpp
@@ -1,39 +1,30 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_DL_MODULE_HPP
-#define _FWRUNTIME_DL_MODULE_HPP
-
-#include <boost/filesystem/path.hpp>
+#ifndef __FWRUNTIME_DL_LIBRARY_HPP__
+#define __FWRUNTIME_DL_LIBRARY_HPP__
 
 #include "fwRuntime/RuntimeException.hpp"
 #include "fwRuntime/dl/Posix.hpp"
 #include "fwRuntime/dl/Win32.hpp"
-#include "fwRuntime/dl/Darwin.hpp"
 
+#include <boost/filesystem/path.hpp>
 
 namespace fwRuntime
 {
 
-
 struct Bundle;
 
-
 namespace dl
 {
 
-
 /**
  * @brief   Defines the module class.
  * @struct  LibraryBridge
- * @date    2004-2009
- *
  * This class is only a bridge to a native module implementor.
- *
- * 
  */
 template< typename Implementor >
 struct LibraryBridge
@@ -46,14 +37,16 @@ struct LibraryBridge
      *                          information
      */
     LibraryBridge( const boost::filesystem::path & modulePath ) throw()
-    : m_implementor( modulePath )
-    {}
+        : m_implementor( modulePath )
+    {
+    }
 
     /**
      * @brief   Destructor : does nothing.
      */
     ~LibraryBridge() throw()
-    {}
+    {
+    }
 
 
     /**
@@ -131,34 +124,29 @@ struct LibraryBridge
     }
 
 
-private:
+    private:
 
-    /**
-     * @brief   The native module implementator.
-     */
-    Implementor m_implementor;
+        /**
+         * @brief   The native module implementator.
+         */
+        Implementor m_implementor;
 
 
-    /**
-     * @brief   Assignment operator.
-     *
-     * @remark  Assignment is fobidden for this class.
-     */
-    void operator=(const LibraryBridge&) throw()
-    {}
+        /**
+         * @brief   Assignment operator.
+         *
+         * @remark  Assignment is forbidden for this class.
+         */
+        void operator=(const LibraryBridge&) throw()
+        {
+        }
 };
 
 
-#if defined(linux) || defined(__linux)
-    typedef struct LibraryBridge< Posix > Library;
+#if defined(linux) || defined(__linux) || defined(__MACOSX__)
+typedef struct LibraryBridge< Posix > Library;
 #else
-#   ifdef WIN32
-    typedef struct LibraryBridge< Win32 > Library;
-#   else
-#       ifdef __MACOSX__
-    typedef struct LibraryBridge< Darwin > Library;
-#       endif
-#   endif
+typedef struct LibraryBridge< Win32 > Library;
 #endif
 
 
@@ -167,4 +155,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #ifdef _FWRUNTIME_DL_MODULE_HPP
+#endif // __FWRUNTIME_DL_LIBRARY_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/NameDecorator.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/NameDecorator.hpp
deleted file mode 100644
index a40668c..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/NameDecorator.hpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_DL_NAMEDECORATOR_HPP_
-#define _FWRUNTIME_DL_NAMEDECORATOR_HPP_
-
-
-
-#include "fwRuntime/dl/INameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-
-/**
- * @brief   Implements a default name decorator. This class is intended to be overriden
- *          to do plateform specific decorations.
- * @class   NameDecorator
- * @date    2004-2009
- * 
- */
-struct NameDecorator : public INameDecorator
-{
-
-    /**
-     * @name        Overrides
-     */
-    //@{
-    const std::string getNativeName( const std::string & abstractName ) const throw();
-    //@}
-
-
-protected:
-
-    /**
-     * @brief   Retrieves the native file prefix.
-     *
-     * @remark  The default implements does nothing and should be overridden.
-     *
-     * @return  a string containing the native file prefix
-     */
-    virtual const std::string getNativePrefix() const throw();
-
-    /**
-     * @brief   Retrieves the native file suffix.
-     *
-     * @remark  The default implements adds the release or debug suffix.
-     *
-     * @return  a string containing the native file suffix
-     */
-    virtual const std::string getNativeSuffix() const throw();
-
-    /**
-     * @brief   Retrieves the native file extension.
-     *
-     * @remark  The default implements does nothing and should be overridden.
-     *
-     * @return  a string containing the native file extension
-     */
-    virtual const std::string getNativeExtension() const throw();
-
-};
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-
-
-#endif /*_FWRUNTIME_DL_NAMEDECORATOR_HPP_*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Namespace.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Namespace.hpp
index 014e992..1c812a3 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Namespace.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRUNTIMEDLNAMESPACE_HPP_
-#define FWRUNTIMEDLNAMESPACE_HPP_
+#ifndef __FWRUNTIME_DL_NAMESPACE_HPP__
+#define __FWRUNTIME_DL_NAMESPACE_HPP__
 
 
 namespace fwRuntime
@@ -13,7 +13,7 @@ namespace fwRuntime
 /**
  * @brief       The namespace fwRuntime::dl contains classes to manage library module.
  * @namespace   fwRuntime::dl
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -22,4 +22,4 @@ namespace dl
 
 }
 }
-#endif /* FWRUNTIMEDLNAMESPACE_HPP_ */
+#endif /* __FWRUNTIME_DL_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Native.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Native.hpp
index 105ed60..136b12d 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Native.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Native.hpp
@@ -1,18 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_DL_NATIVE_HPP
-#define _FWRUNTIME_DL_NATIVE_HPP
-
-#include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
+#ifndef __FWRUNTIME_DL_NATIVE_HPP__
+#define __FWRUNTIME_DL_NATIVE_HPP__
 
 #include "fwRuntime/config.hpp"
 #include "fwRuntime/RuntimeException.hpp"
 
+#include <boost/filesystem/path.hpp>
+#include <boost/regex.hpp>
 
 namespace fwRuntime
 {
@@ -25,16 +24,9 @@ namespace dl
 {
 
 
-
-struct INameDecorator;
-
-
-
 /**
  * @brief   Defines the abstract class for native module implementors.
  * @struct  Native
- * @date    2004-2009
- * 
  */
 struct Native
 {
@@ -45,9 +37,8 @@ struct Native
      * @brief       Constructor
      *
      * @param[in]   modulePath      a path to the module to manage
-     * @param[in]   nameDecorator   a shared pointer to a name decorator to use to retrieve the native file name
      */
-    Native( const boost::filesystem::path & modulePath, const ::boost::shared_ptr< INameDecorator > nameDecorator ) throw();
+    Native( const boost::filesystem::path & modulePath) throw();
 
     /**
      * @brief   Destructor : does nothing.
@@ -108,31 +99,38 @@ struct Native
      */
     void setBundle( const ::fwRuntime::Bundle * bundle ) throw();
 
-
-private:
-
     /**
-     * @brief   The path to the module to load.
+     * @brief  Retrieves the pattern of the dynamic library file name given the host OS
+     * @return the boost::regex
      */
-    const boost::filesystem::path       m_modulePath;
+    const ::boost::regex getNativeName() const;
 
-    /**
-     * @brief   a name decorator to use to retrieve the native path
-     */
-    const ::boost::shared_ptr< INameDecorator > m_nameDecorator;
+    private:
 
-    /**
-     * @brief   A pointer to the bundle the library is attached to.
-     */
-    const Bundle                            * m_bundle;
+        /**
+         * @brief  Returns the location of bundle library
+         * @note   For android, the bundle library are in the "<working_dir>/lib" directory.
+         * @return The path of bundle library.
+         */
+        const ::boost::filesystem::path getBundleLocation() const;
 
+        /**
+         * @brief   The path to the module to load.
+         */
+        const boost::filesystem::path m_modulePath;
 
-    /**
-     * @brief   Assignment operator.
-     *
-     * @remark  Assignment is forbidden for this class.
-     */
-    void operator=( const Native & ) throw();
+        /**
+         * @brief   A pointer to the bundle the library is attached to.
+         */
+        const Bundle                            * m_bundle;
+
+
+        /**
+         * @brief   Assignment operator.
+         *
+         * @remark  Assignment is forbidden for this class.
+         */
+        void operator=( const Native & ) throw();
 
 };
 
@@ -143,4 +141,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_DL_NATIVE_HPP
+#endif // __FWRUNTIME_DL_NATIVE_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Posix.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Posix.hpp
index 5c46728..ee68cce 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Posix.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Posix.hpp
@@ -1,20 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_DL_POSIX_HPP
-#define _FWRUNTIME_DL_POSIX_HPP
+#ifndef __FWRUNTIME_DL_POSIX_HPP__
+#define __FWRUNTIME_DL_POSIX_HPP__
 
 
-#if defined(linux) || defined(__linux)
+#if defined(linux) || defined(__linux) || defined (__MACOSX__)
 
 
-#include <dlfcn.h>
-
 #include "fwRuntime/dl/Native.hpp"
 
+#include <dlfcn.h>
 
 namespace fwRuntime
 {
@@ -26,8 +25,6 @@ namespace dl
 /**
  * @brief   Implements a posix native module.
  * @struct  Posix
- * @date    2004-2009
- * 
  */
 struct Posix : public Native
 {
@@ -70,12 +67,12 @@ struct Posix : public Native
     void unload() throw(RuntimeException);
 
 
-private:
+    private:
 
-    /**
-     * @brief   The handle of the loaded module.
-     */
-    void * m_handle;
+        /**
+         * @brief   The handle of the loaded module.
+         */
+        void * m_handle;
 
 };
 
@@ -88,4 +85,4 @@ private:
 #endif // #ifdef linux
 
 
-#endif // _FWRUNTIME_DL_POSIX_HPP
+#endif // __FWRUNTIME_DL_POSIX_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/PosixNameDecorator.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/PosixNameDecorator.hpp
deleted file mode 100644
index daf7bbe..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/PosixNameDecorator.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_DL_POSIXNAMEDECORATOR_HPP_
-#define _FWRUNTIME_DL_POSIXNAMEDECORATOR_HPP_
-
-
-
-#include "fwRuntime/dl/NameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-/**
- * @brief   Implements a posix specific name decorator.
- * @struct  PosixNameDecorator
- * @date    2004-2009
- * 
- */
-struct PosixNameDecorator : public NameDecorator
-{
-
-
-protected:
-
-    /**
-     * @name        Ovrerides
-     */
-    //@{
-    const std::string getNativePrefix() const throw();
-    const std::string getNativeExtension() const throw();
-    //@}
-
-};
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-
-
-#endif /*_FWRUNTIME_DL_POSIXNAMEDECORATOR_HPP_*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32.hpp
index 02c179d..611966d 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,15 +7,13 @@
 #ifdef _WIN32
 
 
-#ifndef _FWRUNTIME_DL_WIN32_HPP
-#define _FWRUNTIME_DL_WIN32_HPP
-
-
-#include <windows.h>
+#ifndef __FWRUNTIME_DL_WIN32_HPP__
+#define __FWRUNTIME_DL_WIN32_HPP__
 
 #include "fwRuntime/config.hpp"
 #include "fwRuntime/dl/Native.hpp"
 
+#include <windows.h>
 
 namespace fwRuntime
 {
@@ -26,8 +24,6 @@ namespace dl
 /**
  * @brief   Implements a win32 native module.
  * @struct  Win32
- * @date    2004-2009
- * 
  */
 struct Win32 : public Native
 {
@@ -65,12 +61,12 @@ struct Win32 : public Native
     void unload() throw(RuntimeException);
 
 
-private:
+    private:
 
-    /**
-     * @brief   A handle of the loaded module.
-     */
-    HMODULE m_handle;
+        /**
+         * @brief   A handle of the loaded module.
+         */
+        HMODULE m_handle;
 
 };
 
@@ -80,7 +76,7 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_DL_WIN32_HPP
+#endif // __FWRUNTIME_DL_WIN32_HPP__
 
 
 #endif // #ifdef _WIN32
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32NameDecorator.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32NameDecorator.hpp
deleted file mode 100644
index c162756..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/dl/Win32NameDecorator.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRUNTIME_DL_WIN32NAMEDECORATOR_HPP_
-#define _FWRUNTIME_DL_WIN32NAMEDECORATOR_HPP_
-
-
-
-#include "fwRuntime/dl/NameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-
-/**
- * @brief   Implements a win32 specific name decorator.
- * @struct  Win32NameDecorator
- * @date    2004-2009
- * 
- */
-struct Win32NameDecorator : public NameDecorator
-{
-
-
-protected:
-
-    /**
-     * @name        Ovrerides
-     */
-    //@{
-    const std::string getNativeExtension() const throw();
-    //@}
-
-};
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-
-
-#endif /*_FWRUNTIME_DL_WIN32NAMEDECORATOR_HPP_*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/helper.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/helper.hpp
index 6846714..8e2e1a6 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/helper.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/helper.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRUNTIME_HELPER_HPP_
-#define FWRUNTIME_HELPER_HPP_
+#ifndef __FWRUNTIME_HELPER_HPP__
+#define __FWRUNTIME_HELPER_HPP__
 
 #include "fwRuntime/config.hpp"
 #include "fwRuntime/ConfigurationElement.hpp"
@@ -20,67 +20,70 @@ namespace fwRuntime
  * @brief   Check configuration element (its XML representation) with respect to the validator (referencing the xsd schema)
  * @note    Used to check any service/object based configurations as well as runtime extensions.
  * @return  (true,"") if configuration element is correct vs validator, else (false,std::string(error message)) otherwise
- * 
+ *
 
  */
-FWRUNTIME_API std::pair< bool , std::string > validateConfigurationElement( ::boost::shared_ptr< ::fwRuntime::io::Validator >   _validator , ::fwRuntime::ConfigurationElement::sptr _element ) ;
+FWRUNTIME_API std::pair< bool, std::string > validateConfigurationElement(
+    std::shared_ptr< ::fwRuntime::io::Validator >   _validator, ::fwRuntime::ConfigurationElement::sptr _element );
 
 /**
  * @brief   Update pNode content according to _cfgElement
  * @note    Used to validate a configuration element vs a xsd schema.
  * @note    Values are not managed yet (cases where curChild->type == XML_TEXT_NODE ).
  * @note    To be integrated to configuration element.
- * 
+ *
 
  */
-FWRUNTIME_API void ConfigurationElement2XML(::fwRuntime::ConfigurationElement::sptr _cfgElement, xmlNodePtr pNode) ;
+FWRUNTIME_API void ConfigurationElement2XML(::fwRuntime::ConfigurationElement::sptr _cfgElement, xmlNodePtr pNode);
 
 /**
  * @brief       Returns the configuration element embedding the configuration to be considered for initializing an object or a service
  * @param[in]   _config : configuration element containing an attribute "config" specifying the name of the contribution to consider
  * @param[in]   _extension_pt : extension point to which the configuration should contribute with the name indicated by the previous "config" attribute value
- * 
+ *
  */
-FWRUNTIME_API ConfigurationElement::sptr getCfgAsAnExtension( ConfigurationElement::sptr _config , std::string _extension_pt ) ;
+FWRUNTIME_API ConfigurationElement::sptr getCfgAsAnExtension( ConfigurationElement::sptr _config,
+                                                              std::string _extension_pt );
 
 /**
  * @brief   Returns configuration elements extending the _extension_pt extension point
- * 
+ *
 
  */
-FWRUNTIME_API std::vector< ConfigurationElement::sptr > getAllCfgForPoint( std::string _extension_pt ) ;
+FWRUNTIME_API std::vector< ConfigurationElement::sptr > getAllCfgForPoint( std::string _extension_pt );
 
 /**
  * @brief   Returns extensions extending the _extension_pt extension point
- * 
+ *
 
  */
-FWRUNTIME_API std::vector< ::boost::shared_ptr< ::fwRuntime::Extension > > getAllExtensionsForPoint(std::string extension_pt);
+FWRUNTIME_API std::vector< std::shared_ptr< ::fwRuntime::Extension > > getAllExtensionsForPoint(std::string extension_pt);
 
 /**
  * @brief       Returns contribution ids and configuration elements related to a given extension point
  * @param[in]   _extension_pt : identifier of the extension point to which configuration elements contribute
  * @return      Map associating contribution ids and associated configuration elements contributing to the extension point _extension_pt
  * @note        Configuration element identifiers are value of attributes "id".
- * 
+ *
  */
-FWRUNTIME_API std::map< std::string , ConfigurationElement::sptr > getAllIdAndConfigurationElementsForPoint( std::string _extension_pt  ) ;
+FWRUNTIME_API std::map< std::string, ConfigurationElement::sptr > getAllIdAndConfigurationElementsForPoint(
+    std::string _extension_pt  );
 /**
  * @brief       Returns contribution ids to a given extension point
  * @param[in]   _extension_pt : identifier of the extension point to which configuration elements contribute
  * @return      Map associating contribution ids and associated configuration elements contributing to the extension point _extension_pt
  * @note        Configuration element identifiers are value of attributes "id".
- * 
+ *
  */
-FWRUNTIME_API std::vector< std::string > getAllIdsForPoint( std::string _extension_pt  ) ;
+FWRUNTIME_API std::vector< std::string > getAllIdsForPoint( std::string _extension_pt  );
 
 /**
  * @brief   Get information for the point
  * @return  a string with the information of the extension point
- * 
+ *
  */
-FWRUNTIME_API std::string getInfoForPoint( std::string _extension_pt) ;
+FWRUNTIME_API std::string getInfoForPoint( std::string _extension_pt);
 
 }
 
-#endif /*HELPER_HPP_*/
+#endif /* __FWRUNTIME_HELPER_HPP__ */
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/io/BundleDescriptorReader.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/io/BundleDescriptorReader.hpp
index c6e49bb..b330435 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/io/BundleDescriptorReader.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/io/BundleDescriptorReader.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_IO_BUNDLEDESCRIPTORREADER_HPP
-#define _FWRUNTIME_IO_BUNDLEDESCRIPTORREADER_HPP
+#ifndef __FWRUNTIME_IO_BUNDLEDESCRIPTORREADER_HPP__
+#define __FWRUNTIME_IO_BUNDLEDESCRIPTORREADER_HPP__
 
 #if defined(__GNUC__)
 #pragma GCC visibility push(default)
@@ -13,7 +13,6 @@
 #include <string>
 #include <vector>
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 #include <libxml/parser.h>
 #if defined(__GNUC__)
 #pragma GCC visibility pop
@@ -37,12 +36,10 @@ namespace io
 
 /**
  * @brief   Defines the bundle descriptor reader class.
- * @date    2004-2009
- * 
  */
 struct BundleDescriptorReader
 {
-    typedef std::vector< ::boost::shared_ptr<Bundle> >  BundleContainer;
+    typedef std::vector< std::shared_ptr<Bundle> >  BundleContainer;
     /// Pair of created extension point associated with extensions
     typedef std::pair< SPTR(ExtensionPoint), std::vector< SPTR(Extension) > > PointExtensionsPairType;
 
@@ -54,7 +51,8 @@ struct BundleDescriptorReader
      *
      * @return      a shared pointer to the created bundle
      */
-    FWRUNTIME_API static ::boost::shared_ptr<Bundle> createBundle(const boost::filesystem::path& location) throw(RuntimeException);
+    FWRUNTIME_API static std::shared_ptr<Bundle> createBundle(const boost::filesystem::path& location) throw(
+        RuntimeException);
 
     /**
      * @brief       Look for a descriptor at the specified location,
@@ -64,7 +62,8 @@ struct BundleDescriptorReader
      *
      * @return      a shared pointer to the created bundle
      */
-    FWRUNTIME_API static ::boost::shared_ptr<Bundle> createBundleFromXmlPlugin( const ::boost::filesystem::path & location ) throw ( RuntimeException );
+    FWRUNTIME_API static std::shared_ptr<Bundle> createBundleFromXmlPlugin( const ::boost::filesystem::path & location )
+    throw ( RuntimeException );
 
     /**
      * @brief       Creates all bundles that are found at the given location.
@@ -73,7 +72,8 @@ struct BundleDescriptorReader
      *
      * @return      a container with all created bundles
      */
-    static const BundleContainer createBundles(const boost::filesystem::path& location) throw(RuntimeException);
+    FWRUNTIME_API static const BundleContainer createBundles(const boost::filesystem::path& location) throw(
+        RuntimeException);
 
     /**
      * @brief   Processes a configuration element XML node.
@@ -83,89 +83,87 @@ struct BundleDescriptorReader
      *
      * @return  a pointer to the created configuration element
      */
-    static ::boost::shared_ptr<ConfigurationElement> processConfigurationElement(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException);
-
-
-
-private:
-
-    static std::string CLASS;           ///< Defines the class XML element name.
-    static std::string EXTENSION;       ///< Defines the extension XML element name.
-    static std::string EXTENSION_POINT; ///< Defines the extension-point XML element name.
-    static std::string ID;              ///< Defines the id XML element name.
-    static std::string IMPLEMENTS;      ///< Defines the implements XML element name.
-    static std::string NAME;            ///< Defines the name XML element name.
-    static std::string LIBRARY;         ///< Defines the library XML element name.
-    static std::string PLUGIN;          ///< Defines the plugin XML element name.
-    static std::string REQUIREMENT;     ///< Defines the requirement XML element name.
-    static std::string SCHEMA;          ///< Defines the schema XML element name.
-    static std::string VERSION;         ///< Defines the version XML element name.
-    static std::string POINT;           ///< Defines the version XML element name.
-
-    /**
-     * @brief   Processes an extension XML node.
-     *
-     * @param   node    a pointer to the XML node that represents an extension
-     * @param   bundle  a pointer to the bundle the extension will be attached to
-     *
-     * @return  a pointer to the created extension
-     */
-    static ::boost::shared_ptr<Extension> processExtension(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException);
-
-
-    /**
-     * Processes a node that is a point
-     *
-     * @param   node    a pointer to the xml document node that represents a requirement
-     * @param   bundle  a pointer to the bundle the extension will be attached to
-     * @return  a pair with the created extension point and extensions
-     */
-    static PointExtensionsPairType processPoint(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException);
-
-    /**
-     * @brief   Processes an extension point XML node.
-     *
-     * @param   node    a pointer to the XML node that represents an extension point
-     * @param   bundle  a pointer to the bundle declaring the extension point
-     *
-     * @return  a pointer to the created extension point
-     */
-    static ::boost::shared_ptr<ExtensionPoint> processExtensionPoint(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException);
-
-    /**
-     * @brief   Processes a library XML node.
-     *
-     * @param   node    a pointer to the XML node that represents a library declaration
-     *
-     * @return  a pointer to the created library
-     */
-    static ::boost::shared_ptr<dl::Library> processLibrary(xmlNodePtr node) throw(RuntimeException);
-
-    /**
-     * Processes a node that is a plugin element.
-     *
-     * @param   node        a pointer to the xml document node that represents a bundle
-     * @param   location    a path to a directory containing the bundle
-     *
-     * @return  a pointer to the created bundle
-     */
-    static ::boost::shared_ptr<Bundle> processPlugin(xmlNodePtr node, const boost::filesystem::path& location) throw(RuntimeException);
-
-    /**
-     * Processes a node that is a requirement
-     *
-     * @param   node        a pointer to the xml document node that represents a requirement
-     *
-     * @return  a string containing the requirement's value
-     */
-    static const std::string processRequirement(xmlNodePtr node) throw(RuntimeException);
-
-    /**
-     * @brief   Runs the descriptor reading and bundle intialization.
-     *
-     * @return  a pointer to a bundle
-     */
-//   ::boost::shared_ptr<Bundle> run(const boost::filesystem::path& location) throw(RuntimeException);
+    FWRUNTIME_API static std::shared_ptr<ConfigurationElement> processConfigurationElement(xmlNodePtr node,
+                                                                                           const std::shared_ptr<Bundle> bundle)
+    throw(RuntimeException);
+
+    private:
+
+        static std::string CLASS;       ///< Defines the class XML element name.
+        static std::string EXTENSION;   ///< Defines the extension XML element name.
+        static std::string EXTENSION_POINT; ///< Defines the extension-point XML element name.
+        static std::string ID;          ///< Defines the id XML element name.
+        static std::string IMPLEMENTS;  ///< Defines the implements XML element name.
+        static std::string NAME;        ///< Defines the name XML element name.
+        static std::string LIBRARY;     ///< Defines the library XML element name.
+        static std::string PLUGIN;      ///< Defines the plugin XML element name.
+        static std::string REQUIREMENT; ///< Defines the requirement XML element name.
+        static std::string SCHEMA;      ///< Defines the schema XML element name.
+        static std::string VERSION;     ///< Defines the version XML element name.
+        static std::string POINT;       ///< Defines the version XML element name.
+
+        /**
+         * @brief   Processes an extension XML node.
+         *
+         * @param   node    a pointer to the XML node that represents an extension
+         * @param   bundle  a pointer to the bundle the extension will be attached to
+         *
+         * @return  a pointer to the created extension
+         */
+        static std::shared_ptr<Extension> processExtension(xmlNodePtr node,
+                                                           const std::shared_ptr<Bundle> bundle) throw(RuntimeException);
+
+
+        /**
+         * Processes a node that is a point
+         *
+         * @param   node    a pointer to the xml document node that represents a requirement
+         * @param   bundle  a pointer to the bundle the extension will be attached to
+         * @return  a pair with the created extension point and extensions
+         */
+        static PointExtensionsPairType processPoint(xmlNodePtr node,
+                                                    const std::shared_ptr<Bundle> bundle) throw(RuntimeException);
+
+        /**
+         * @brief   Processes an extension point XML node.
+         *
+         * @param   node    a pointer to the XML node that represents an extension point
+         * @param   bundle  a pointer to the bundle declaring the extension point
+         *
+         * @return  a pointer to the created extension point
+         */
+        static std::shared_ptr<ExtensionPoint> processExtensionPoint(xmlNodePtr node,
+                                                                     const std::shared_ptr<Bundle> bundle) throw(
+            RuntimeException);
+
+        /**
+         * @brief   Processes a library XML node.
+         *
+         * @param   node    a pointer to the XML node that represents a library declaration
+         *
+         * @return  a pointer to the created library
+         */
+        static std::shared_ptr<dl::Library> processLibrary(xmlNodePtr node) throw(RuntimeException);
+
+        /**
+         * Processes a node that is a plugin element.
+         *
+         * @param   node        a pointer to the xml document node that represents a bundle
+         * @param   location    a path to a directory containing the bundle
+         *
+         * @return  a pointer to the created bundle
+         */
+        static std::shared_ptr<Bundle> processPlugin(xmlNodePtr node,
+                                                     const boost::filesystem::path& location) throw(RuntimeException);
+
+        /**
+         * Processes a node that is a requirement
+         *
+         * @param   node        a pointer to the xml document node that represents a requirement
+         *
+         * @return  a string containing the requirement's value
+         */
+        static const std::string processRequirement(xmlNodePtr node) throw(RuntimeException);
 };
 
 
@@ -174,4 +172,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // _FWRUNTIME_IO_BUNDLEDESCRIPTORREADER_HPP
+#endif // __FWRUNTIME_IO_BUNDLEDESCRIPTORREADER_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/io/Namespace.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/io/Namespace.hpp
index 8fad01d..2e7079f 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/io/Namespace.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/io/Namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRUNTIMEIONAMESPACE_HPP_
-#define FWRUNTIMEIONAMESPACE_HPP_
+#ifndef __FWRUNTIME_IO_NAMESPACE_HPP__
+#define __FWRUNTIME_IO_NAMESPACE_HPP__
 
 
 namespace fwRuntime
@@ -13,7 +13,7 @@ namespace fwRuntime
 /**
  * @brief       The namespace fwRuntime::io contains classes to read and perform profile file  .
  * @namespace   fwRuntime::io
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -22,4 +22,4 @@ namespace io
 
 }
 }
-#endif /* FWRUNTIMEIONAMESPACE_HPP_ */
+#endif /* __FWRUNTIME_IO_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/io/ProfileReader.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/io/ProfileReader.hpp
index 1849348..29a3b7e 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/io/ProfileReader.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/io/ProfileReader.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_IO_PROFILEREADER_HPP_
-#define _FWRUNTIME_IO_PROFILEREADER_HPP_
+#ifndef __FWRUNTIME_IO_PROFILEREADER_HPP__
+#define __FWRUNTIME_IO_PROFILEREADER_HPP__
 
 #if defined(__GNUC__)
 #pragma GCC visibility push(default)
@@ -17,17 +17,16 @@
 #pragma GCC visibility pop
 #endif
 
-#include <boost/shared_ptr.hpp>
 #include "fwRuntime/config.hpp"
 
 namespace fwRuntime
 {
-    namespace profile
-    {
-        class Activater;
-        class Profile;
-        class Starter;
-    }
+namespace profile
+{
+class Activater;
+class Profile;
+class Starter;
+}
 }
 
 
@@ -42,7 +41,7 @@ namespace io
  * @brief   Reads plugin set profiles from xml files.
  * @struct  ProfileReader
  * @date    2004-2009
- * 
+ *
  */
 struct ProfileReader
 {
@@ -52,76 +51,80 @@ struct ProfileReader
      *
      * @param[in]   path    a path to an xml profile file
      */
-    FWRUNTIME_API static ::boost::shared_ptr< ::fwRuntime::profile::Profile > createProfile( const boost::filesystem::path & path );
-
-
-
-private:
-
-    static std::string  ID;             ///< defines the name of the id xml element or attribute name
-    static std::string  NAME;           ///< defines the name of the xml profile
-    static std::string  VALUE;          ///< defines the name of the value xml element or attribute name
-    static std::string  VERSION;        ///< defines the name of the version xml element or attribute name
-    static std::string  CHECK_SINGLE_INSTANCE;///< defines the name of the check-single-instance xml element or attribute name
-    static std::string  ACTIVATE;       ///< defines the name of the activate xml element or attribute name
-    static std::string  START;          ///< defines the name of the start xml element or attribute name
-    static std::string  PARAM;          ///< defines the name of the parameter xml element or attribute name
-    static std::string  DIS_EXT_PT;     ///< defines the name of the disable extension point xml element or attribute name
-    static std::string  DIS_EXT;        ///< defines the name of the disable extension xml element or attribute name
-
-    /**
-     * @brief       Processes the given xml node as a profile.
-     *
-     * @param[in]   node    a pointer to the xml node to process
-     *
-     * @return      a shared pointer to the created profile
-     */
-    static ::boost::shared_ptr< ::fwRuntime::profile::Profile > processProfile(xmlNodePtr node);
-
-    /**
-     * @brief       Processes the given xml node as an activater.
-     *
-     * @param[in]   node    a pointer to the xml node to process
-     *
-     * @return      a shared pointer to the created activater
-     */
-    static ::boost::shared_ptr< ::fwRuntime::profile::Activater > processActivater(xmlNodePtr node);
-
-    /**
-     * @brief       Processes the given xml node as an activater parameter and
-     *              stores it in the given activater.
-     *
-     * @param[in]   node        a pointer to the xml node to process
-     * @param[out]  activater   a shared pointer to an activater
-     */
-    static void processActivaterParam(xmlNodePtr node, ::boost::shared_ptr< ::fwRuntime::profile::Activater > activater);
-
-    /**
-     * @brief       Processes the given xml node as an activater disable extension point and
-     *              stores it in the given activater.
-     *
-     * @param[in]   node        a pointer to the xml node to process
-     * @param[out]  activater   a shared pointer to an activater
-     */
-    static void processActivaterDisableExtensionPoint(xmlNodePtr node, ::boost::shared_ptr< ::fwRuntime::profile::Activater > activater);
-
-    /**
-     * @brief       Processes the given xml node as an activater disable extension and
-     *              stores it in the given activater.
-     *
-     * @param[in]   node        a pointer to the xml node to process
-     * @param[out]  activater   a shared pointer to an activater
-     */
-    static void processActivaterDisableExtension(xmlNodePtr node, ::boost::shared_ptr< ::fwRuntime::profile::Activater > activater);
-
-    /**
-     * @brief       Processes the given xml node as a starter.
-     *
-     * @param[in]   node    a pointer to the xml node to process
-     *
-     * @return      a shared pointer to the created starter
-     */
-    static ::boost::shared_ptr< ::fwRuntime::profile::Starter > processStarter(xmlNodePtr node);
+    FWRUNTIME_API static std::shared_ptr< ::fwRuntime::profile::Profile > createProfile(
+        const boost::filesystem::path & path );
+
+
+
+    private:
+
+        static std::string ID;          ///< defines the name of the id xml element or attribute name
+        static std::string NAME;        ///< defines the name of the xml profile
+        static std::string VALUE;       ///< defines the name of the value xml element or attribute name
+        static std::string VERSION;     ///< defines the name of the version xml element or attribute name
+        static std::string CHECK_SINGLE_INSTANCE;///< defines the name of the check-single-instance xml element or attribute name
+        static std::string ACTIVATE;    ///< defines the name of the activate xml element or attribute name
+        static std::string START;       ///< defines the name of the start xml element or attribute name
+        static std::string PARAM;       ///< defines the name of the parameter xml element or attribute name
+        static std::string DIS_EXT_PT;  ///< defines the name of the disable extension point xml element or attribute name
+        static std::string DIS_EXT;     ///< defines the name of the disable extension xml element or attribute name
+
+        /**
+         * @brief       Processes the given xml node as a profile.
+         *
+         * @param[in]   node    a pointer to the xml node to process
+         *
+         * @return      a shared pointer to the created profile
+         */
+        static std::shared_ptr< ::fwRuntime::profile::Profile > processProfile(xmlNodePtr node);
+
+        /**
+         * @brief       Processes the given xml node as an activater.
+         *
+         * @param[in]   node    a pointer to the xml node to process
+         *
+         * @return      a shared pointer to the created activater
+         */
+        static std::shared_ptr< ::fwRuntime::profile::Activater > processActivater(xmlNodePtr node);
+
+        /**
+         * @brief       Processes the given xml node as an activater parameter and
+         *              stores it in the given activater.
+         *
+         * @param[in]   node        a pointer to the xml node to process
+         * @param[out]  activater   a shared pointer to an activater
+         */
+        static void processActivaterParam(xmlNodePtr node,
+                                          std::shared_ptr< ::fwRuntime::profile::Activater > activater);
+
+        /**
+         * @brief       Processes the given xml node as an activater disable extension point and
+         *              stores it in the given activater.
+         *
+         * @param[in]   node        a pointer to the xml node to process
+         * @param[out]  activater   a shared pointer to an activater
+         */
+        static void processActivaterDisableExtensionPoint(xmlNodePtr node,
+                                                          std::shared_ptr< ::fwRuntime::profile::Activater > activater);
+
+        /**
+         * @brief       Processes the given xml node as an activater disable extension and
+         *              stores it in the given activater.
+         *
+         * @param[in]   node        a pointer to the xml node to process
+         * @param[out]  activater   a shared pointer to an activater
+         */
+        static void processActivaterDisableExtension(xmlNodePtr node,
+                                                     std::shared_ptr< ::fwRuntime::profile::Activater > activater);
+
+        /**
+         * @brief       Processes the given xml node as a starter.
+         *
+         * @param[in]   node    a pointer to the xml node to process
+         *
+         * @return      a shared pointer to the created starter
+         */
+        static std::shared_ptr< ::fwRuntime::profile::Starter > processStarter(xmlNodePtr node);
 
 };
 
@@ -133,4 +136,4 @@ private:
 
 
 
-#endif /*_FWRUNTIME_IO_PROFILEREADER_HPP_*/
+#endif /*__FWRUNTIME_IO_PROFILEREADER_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/io/Validator.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/io/Validator.hpp
index e61ff79..f086b43 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/io/Validator.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/io/Validator.hpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_IO_VALIDATOR_HPP_
-#define _FWRUNTIME_IO_VALIDATOR_HPP_
+#ifndef __FWRUNTIME_IO_VALIDATOR_HPP__
+#define __FWRUNTIME_IO_VALIDATOR_HPP__
 
 #include <string>
 #include <sstream>
 
-#include <boost/shared_ptr.hpp>
 #include <boost/filesystem/path.hpp>
 #include <libxml/tree.h>
 #include <libxml/xmlschemastypes.h>
@@ -33,7 +32,7 @@ namespace io
  * It seems that this class use a static ivar to save schemaValidationContext. If your call a instance of an visitor this ivar should not be
  * directly well positionned. So the recommandation is to construct Validator-Use it-destry it and never store him
  * @date    2007-2009
- * 
+ *
  */
 struct Validator
 {
@@ -108,22 +107,22 @@ struct Validator
     FWRUNTIME_API std::string getXsdContent();
 
 
-private:
+    private:
 
-    void initializeContext();
+        void initializeContext();
 
-    std::string             m_xsd_content ;
-    std::ostringstream      m_errorLog;
+        std::string m_xsd_content;
+        std::ostringstream m_errorLog;
 
-    typedef ::boost::shared_ptr< xmlSchemaParserCtxt > SchemaParserCtxtSptr;
-    typedef ::boost::shared_ptr< xmlSchema > SchemaSptr;
-    typedef ::boost::shared_ptr< xmlSchemaValidCtxt > SchemaValidCtxtSptr;
+        typedef std::shared_ptr< xmlSchemaParserCtxt > SchemaParserCtxtSptr;
+        typedef std::shared_ptr< xmlSchema > SchemaSptr;
+        typedef std::shared_ptr< xmlSchemaValidCtxt > SchemaValidCtxtSptr;
 
-    SchemaParserCtxtSptr  m_schemaParserContext;
-    SchemaSptr            m_schema;
-    SchemaValidCtxtSptr   m_schemaValidContext;
+        SchemaParserCtxtSptr m_schemaParserContext;
+        SchemaSptr m_schema;
+        SchemaValidCtxtSptr m_schemaValidContext;
 
-    static void ErrorHandler( void * userData, xmlErrorPtr error );
+        static void ErrorHandler( void * userData, xmlErrorPtr error );
 
 };
 
@@ -135,4 +134,4 @@ private:
 
 
 
-#endif /*_FWRUNTIME_IO_VALIDATOR_HPP_*/
+#endif /*__FWRUNTIME_IO_VALIDATOR_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/operations.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/operations.hpp
index 49e09ef..2ab8763 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/operations.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/operations.hpp
@@ -1,17 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_OPERATIONS_HPP_
-#define _FWRUNTIME_OPERATIONS_HPP_
+#ifndef __FWRUNTIME_OPERATIONS_HPP__
+#define __FWRUNTIME_OPERATIONS_HPP__
 
 #include <iterator>
 #include <memory>
 #include <string>
 #include <boost/filesystem/path.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -26,12 +25,12 @@
 
 namespace fwRuntime
 {
-    struct Bundle;
+struct Bundle;
 
-    namespace profile
-    {
-    class Profile;
-    }
+namespace profile
+{
+class Profile;
+}
 }
 
 
@@ -47,7 +46,7 @@ namespace fwRuntime
  *
  * @return      a pointer to the found extension point or null if none
  */
-FWRUNTIME_API ::boost::shared_ptr<ExtensionPoint> findExtensionPoint( const std::string & identifier );
+FWRUNTIME_API std::shared_ptr<ExtensionPoint> findExtensionPoint( const std::string & identifier );
 
 
 
@@ -64,12 +63,12 @@ FWRUNTIME_API ::boost::shared_ptr<ExtensionPoint> findExtensionPoint( const std:
  */
 template<typename T>
 T* createExecutableInstance(
-        const ::boost::shared_ptr<Extension>    extension,
-        const std::string           & element = "executable",
-        const std::string           & attribute = "class" ) throw(RuntimeException)
+    const std::shared_ptr<Extension>    extension,
+    const std::string           & element = "executable",
+    const std::string           & attribute = "class" ) throw(RuntimeException)
 {
     // Retrieves the right configuration element.
-     ::boost::shared_ptr<ConfigurationElement> elt( extension->findConfigurationElement(element) );
+    std::shared_ptr<ConfigurationElement> elt( extension->findConfigurationElement(element) );
     if( elt == 0 )
     {
         throw RuntimeException(element + ": configuration element not found in extension.");
@@ -91,8 +90,8 @@ T* createExecutableInstance(
  */
 template<typename T>
 T * createExecutableInstance(
-        const ::boost::shared_ptr<ConfigurationElement> element,
-        const std::string                       & attribute = "class" ) throw(RuntimeException)
+    const std::shared_ptr<ConfigurationElement> element,
+    const std::string                       & attribute = "class" ) throw(RuntimeException)
 {
 
     // Retrieves the executable type.
@@ -129,11 +128,11 @@ T * createExecutableInstance(
  */
 template<typename OutputIterator>
 void getAllExtensionsForPoint(
-        const std::string   & identifier,
-        OutputIterator        output
+    const std::string   & identifier,
+    OutputIterator output
     ) throw(RuntimeException)
 {
-     ::boost::shared_ptr< ExtensionPoint >  point = findExtensionPoint(identifier);
+    std::shared_ptr< ExtensionPoint >  point = findExtensionPoint(identifier);
 
     if( !point )
     {
@@ -154,13 +153,14 @@ void getAllExtensionsForPoint(
  */
 template<typename OutputIterator>
 void getAllConfigurationElementsForPoint(
-        const std::string   & identifier,
-        OutputIterator        output
+    const std::string   & identifier,
+    OutputIterator output
     ) throw(RuntimeException)
 {
-     ::boost::shared_ptr< ExtensionPoint >  point = findExtensionPoint(identifier);
+    std::shared_ptr< ExtensionPoint >  point = findExtensionPoint(identifier);
 
-    OSLM_TRACE("getAllConfigurationElementsForPoint(" << identifier << "Bundle" << point->getBundle()->getIdentifier() );
+    OSLM_TRACE("getAllConfigurationElementsForPoint(" << identifier << "Bundle" <<
+               point->getBundle()->getIdentifier() );
 
     if( !point )
     {
@@ -185,7 +185,7 @@ void getAllConfigurationElementsForPoint(
  *          specified identifier.
  *
  * This method use the container type specified by the template parameter. The
- * type of the elements of the container must be \::boost::shared_ptr< ConfigurationElement >
+ * type of the elements of the container must be std::shared_ptr< ConfigurationElement >
  * or the compilation will fail.
  *
  * @return  a container containing shared pointers to all found configuration
@@ -198,8 +198,8 @@ const Container getAllConfigurationElementsForPoint(const std::string & identifi
     typedef std::back_insert_iterator< Container > Inserter;
 
     // Collects all contributed configuratoin elements.
-    Container   elements;
-    Inserter    inserter(elements);
+    Container elements;
+    Inserter inserter(elements);
     getAllConfigurationElementsForPoint(identifier, inserter);
 
     // The job is done!
@@ -215,31 +215,33 @@ const Container getAllConfigurationElementsForPoint(const std::string & identifi
  *                      the executable identifier (default is "class")
  *
  * This method use the container type specified by the template parameter. The
- * type of the elements of the container must be \::boost::shared_ptr< T >
+ * type of the elements of the container must be std::shared_ptr< T >
  * or the compilation will fail (where T is the type of the executable you want to create).
  *
  * @return  a container containing shared pointers to all created executable instances
  */
 template< typename Container, typename T >
-const Container getAllExecutableForPoint( const std::string & identifier, const std::string & attribute = "class" ) throw(RuntimeException)
+const Container getAllExecutableForPoint( const std::string & identifier,
+                                          const std::string & attribute = "class" ) throw(RuntimeException)
 {
     // Defines the element container
-    typedef std::vector< ::boost::shared_ptr< ConfigurationElement > > ConfigurationElementContainer;
+    typedef std::vector< std::shared_ptr< ConfigurationElement > > ConfigurationElementContainer;
 
     // Retrieves all configuration elements.
-    ConfigurationElementContainer   elements( getAllConfigurationElementsForPoint< ConfigurationElementContainer >(identifier) );
+    ConfigurationElementContainer elements( getAllConfigurationElementsForPoint< ConfigurationElementContainer >(
+                                                identifier) );
 
     // Defines an insert iterator type for the executable container.
     typedef std::back_insert_iterator< Container > Inserter;
 
     // Walks through collected configuration elements and create desired executable instances
-    Container                               result;
+    Container result;
     ConfigurationElementContainer::iterator iElement;
-    Inserter                                iInserter( result );
+    Inserter iInserter( result );
     for( iElement = elements.begin(); iElement != elements.end(); ++iElement, ++iInserter )
     {
-         ::boost::shared_ptr< ConfigurationElement >    element( *iElement );
-         ::boost::shared_ptr< T >                       executable( createExecutableInstance< T >(element, attribute) );
+        std::shared_ptr< ConfigurationElement >    element( *iElement );
+        std::shared_ptr< T >                       executable( createExecutableInstance< T >(element, attribute) );
 
         iInserter = executable;
     }
@@ -256,7 +258,8 @@ const Container getAllExecutableForPoint( const std::string & identifier, const
  *
  * @return  a shared pointer to the found configuration element or null if none
  */
-FWRUNTIME_API ::boost::shared_ptr< ConfigurationElement > findConfigurationElement( const std::string & identifier, const std::string & pointIdentifier );
+FWRUNTIME_API std::shared_ptr< ConfigurationElement > findConfigurationElement( const std::string & identifier,
+                                                                                const std::string & pointIdentifier );
 
 
 
@@ -267,7 +270,7 @@ FWRUNTIME_API ::boost::shared_ptr< ConfigurationElement > findConfigurationEleme
  *
  * @return  a shared pointer to the found extension or null if none
  */
-FWRUNTIME_API ::boost::shared_ptr<Extension> findExtension( const std::string & identifier );
+FWRUNTIME_API std::shared_ptr<Extension> findExtension( const std::string & identifier );
 
 
 /**
@@ -278,7 +281,8 @@ FWRUNTIME_API ::boost::shared_ptr<Extension> findExtension( const std::string &
  *
  * @return  a system valid path
  */
-FWRUNTIME_API const boost::filesystem::path getBundleResourcePath(const std::string& bundleIdentifier, const boost::filesystem::path &path) throw();
+FWRUNTIME_API const boost::filesystem::path getBundleResourcePath(const std::string& bundleIdentifier,
+                                                                  const boost::filesystem::path &path) throw();
 
 
 /**
@@ -289,7 +293,8 @@ FWRUNTIME_API const boost::filesystem::path getBundleResourcePath(const std::str
  *
  * @return  a system valid path
  */
-FWRUNTIME_API const boost::filesystem::path getBundleResourcePath( ::boost::shared_ptr<Bundle> bundle, const boost::filesystem::path &path) throw();
+FWRUNTIME_API const boost::filesystem::path getBundleResourcePath( std::shared_ptr<Bundle> bundle,
+                                                                   const boost::filesystem::path &path) throw();
 
 
 /**
@@ -300,7 +305,8 @@ FWRUNTIME_API const boost::filesystem::path getBundleResourcePath( ::boost::shar
  *
  * @return  a system valid path
  */
-FWRUNTIME_API const boost::filesystem::path getBundleResourcePath( ::boost::shared_ptr<ConfigurationElement> element, const boost::filesystem::path &path) throw();
+FWRUNTIME_API const boost::filesystem::path getBundleResourcePath( std::shared_ptr<ConfigurationElement> element,
+                                                                   const boost::filesystem::path &path) throw();
 
 
 /**
@@ -311,7 +317,8 @@ FWRUNTIME_API const boost::filesystem::path getBundleResourcePath( ::boost::shar
  *
  * @return  a system valid path
  */
-FWRUNTIME_API const boost::filesystem::path getBundleResourcePath(const IExecutable *executable, const boost::filesystem::path &path) throw();
+FWRUNTIME_API const boost::filesystem::path getBundleResourcePath(const IExecutable *executable,
+                                                                  const boost::filesystem::path &path) throw();
 
 
 /**
@@ -329,7 +336,7 @@ FWRUNTIME_API void addBundles( const boost::filesystem::path & directory ) throw
  *
  * @return  a shared pointer to the started profile
  */
-FWRUNTIME_API ::boost::shared_ptr< ::fwRuntime::profile::Profile > startProfile( const boost::filesystem::path & path );
+FWRUNTIME_API std::shared_ptr< ::fwRuntime::profile::Profile > startProfile( const boost::filesystem::path & path );
 
 
 
@@ -341,7 +348,7 @@ FWRUNTIME_API ::boost::shared_ptr< ::fwRuntime::profile::Profile > startProfile(
  *
  * @return  a shared pointer to the found bundle, or empty when none
  */
-FWRUNTIME_API ::boost::shared_ptr<Bundle> findBundle( const std::string & identifier, const Version & version = Version() );
+FWRUNTIME_API std::shared_ptr<Bundle> findBundle( const std::string & identifier, const Version & version = Version() );
 
 
 
@@ -356,4 +363,4 @@ FWRUNTIME_API void startBundle(const std::string &identifier) throw(RuntimeExcep
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_OPERATIONS_HPP_
+#endif // __FWRUNTIME_OPERATIONS_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/predicates.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/predicates.hpp
deleted file mode 100644
index 428bb28..0000000
--- a/SrcLib/core/fwRuntime/include/fwRuntime/predicates.hpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-namespace fwRuntime
-{
-
-
-
-/**
- * @brief   Implements a STL compliant predicate that tests if a given
- *          object has a given identifier and is enabled.
- * @struct  IsEnableAndHasIdentifier
- *
- * @remark  Intended to be used on extensions, extension points and bundles
- *
- * @date    2007-2009
- * 
- */
-template< typename T >
-struct IsEnableAndHasIdentifier
-{
-    /**
-     * @brief   Constructor.
-     */
-    IsEnableAndHasIdentifier( const std::string & identifier )
-    :   m_identifier( identifier )
-    {}
-
-    bool operator() ( const ::boost::shared_ptr< T > p ) const
-    {
-        return p->getIdentifier() == m_identifier && p->isEnable();
-    }
-
-private:
-
-    std::string m_identifier;
-};
-
-
-
-
-} // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Activater.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Activater.hpp
index 9ce8053..a6d16f7 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Activater.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Activater.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PROFILE_ACTIVATER_HPP_
-#define _FWRUNTIME_PROFILE_ACTIVATER_HPP_
+#ifndef __FWRUNTIME_PROFILE_ACTIVATER_HPP__
+#define __FWRUNTIME_PROFILE_ACTIVATER_HPP__
 
 #include <map>
 #include <vector>
@@ -29,7 +29,7 @@ namespace profile
  * @brief   Activates a given bundle with optional parameters.
  * @class  Activater
  * @date    2007-2009.
- * 
+ *
  */
 class Activater : public boost::noncopyable
 {
@@ -81,12 +81,12 @@ private:
     typedef std::vector< std::string >              DisableExtensionContainer;
 
 
-    const std::string               m_identifier;               ///< a bundle identifier
-    const Version                   m_version;                  ///< a bundle version
+    const std::string m_identifier;                             ///< a bundle identifier
+    const Version m_version;                                    ///< a bundle version
 
-    ParameterContainer              m_parameters;               ///< all parameters
-    DisableExtensionPointContainer  m_disableExtensionPoints;   ///< all disable extension points
-    DisableExtensionContainer       m_disableExtensions;        ///< all disable extensions
+    ParameterContainer m_parameters;                            ///< all parameters
+    DisableExtensionPointContainer m_disableExtensionPoints;    ///< all disable extension points
+    DisableExtensionContainer m_disableExtensions;              ///< all disable extensions
 
 };
 
@@ -98,4 +98,4 @@ private:
 
 
 
-#endif /*_FWRUNTIME_PROFILE_ACTIVATER_HPP_*/
+#endif /*__FWRUNTIME_PROFILE_ACTIVATER_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Initializer.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Initializer.hpp
index 3ee2143..8b9367b 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Initializer.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Initializer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PROFILE_INITIALIZER_HPP_
-#define _FWRUNTIME_PROFILE_INITIALIZER_HPP_
+#ifndef __FWRUNTIME_PROFILE_INITIALIZER_HPP__
+#define __FWRUNTIME_PROFILE_INITIALIZER_HPP__
 
 #include <string>
 #include <boost/utility.hpp>
@@ -25,7 +25,7 @@ namespace profile
  * @brief   Starts a given bundle.
  * @class  Initializer
  * @date    2007-2009
- * 
+ *
  */
 class Initializer : public boost::noncopyable
 {
@@ -49,7 +49,7 @@ public:
 
 protected:
 
-    const std::string   m_identifier;   ///< a bundle identifier
+    const std::string m_identifier;     ///< a bundle identifier
 
 };
 
@@ -61,4 +61,4 @@ protected:
 
 
 
-#endif /*_FWRUNTIME_PROFILE_INITIALIZER_HPP_*/
+#endif /*__FWRUNTIME_PROFILE_INITIALIZER_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Namespace.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Namespace.hpp
index 67ca88f..60574df 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Namespace.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Namespace.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRUNTIMEPROFILENAMESPACE_HPP_
-#define FWRUNTIMEPROFILENAMESPACE_HPP_
+#ifndef __FWRUNTIME_PROFILE_NAMESPACE_HPP__
+#define __FWRUNTIME_PROFILE_NAMESPACE_HPP__
 
 
 namespace fwRuntime
@@ -13,7 +13,7 @@ namespace fwRuntime
 /**
  * @brief       The namespace fwRuntime::profile contains classes to manage bundle declares in profile.xml file (activate/start/stop).
  * @namespace   fwRuntime::profile
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -22,4 +22,4 @@ namespace profile
 
 }
 }
-#endif /* FWRUNTIMEPROFILENAMESPACE_HPP_ */
+#endif /* __FWRUNTIME_PROFILE_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Profile.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Profile.hpp
index de324e1..339a12d 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Profile.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Profile.hpp
@@ -1,22 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PROFILE_PROFILE_HPP_
-#define _FWRUNTIME_PROFILE_PROFILE_HPP_
+#ifndef __FWRUNTIME_PROFILE_PROFILE_HPP__
+#define __FWRUNTIME_PROFILE_PROFILE_HPP__
 
-#include <vector>
+#include "fwRuntime/config.hpp"
+#include <fwCore/base.hpp>
 
 #include <boost/function.hpp>
 #include <boost/utility.hpp>
 #include <boost/filesystem/path.hpp>
+#include <boost/make_shared.hpp>
 
-#include "fwCore/base.hpp"
-
-#include "fwRuntime/config.hpp"
+#include <vector>
 
+#ifdef ANDROID
+class android_app;
+#endif
 
 namespace fwRuntime
 {
@@ -24,7 +27,6 @@ namespace fwRuntime
 /**
  * @namespace   ::fwRuntime::profile
  * @brief       Namespace ::fwRuntime::profile
- * @date    2007-2009
  */
 namespace profile
 {
@@ -38,8 +40,7 @@ class Uninitializer;
 
 /**
  * @brief   Implements a bundle set profile.
- * @class  Profile
- * @date    2007-2009
+ * @class   Profile
  */
 class Profile : public ::fwCore::BaseObject
 {
@@ -48,7 +49,7 @@ public:
     typedef std::vector< std::string >  ParamsContainer;
     typedef ::boost::function< int () > RunCallbackType;
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Profile)(BaseObject), (()), new Profile) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Profile)(BaseObject), (()), std::make_shared< Profile >);
 
     /**
      * @brief   Constructor : does nothing.
@@ -116,65 +117,107 @@ public:
     /**
      * @brief   Return profile name.
      */
-    std::string getName() { return m_sName; }
+    std::string getName() const
+    {
+        return m_sName;
+    }
 
     /**
      * @brief       Set profile name.
      *
      * @param[in]   _sName  profile name
      */
-    void setName(std::string _sName) { m_sName = _sName; }
+    void setName(std::string _sName)
+    {
+        m_sName = _sName;
+    }
 
     /// Get profile m_filePath
-    ::boost::filesystem::path getFilePath() {return  m_filePath; } const
+    ::boost::filesystem::path getFilePath() const
+    {
+        return m_filePath;
+    }
 
     /// Set profile m_filePath
-    void setFilePath( const ::boost::filesystem::path& _filePath) { m_filePath = _filePath; }
+    void setFilePath(const ::boost::filesystem::path& _filePath)
+    {
+        m_filePath = _filePath;
+    }
 
     /**
      * @brief   Return profile version.
      */
-    std::string getVersion() { return m_sVersion; }
+    std::string getVersion() const
+    {
+        return m_sVersion;
+    }
 
     /**
      * @brief       Set profile version.
      *
      * @param[in]   _sVersion   profile version
      */
-    void setVersion(std::string _sVersion) { m_sVersion = _sVersion; }
-
-
+    void setVersion(std::string _sVersion)
+    {
+        m_sVersion = _sVersion;
+    }
 
     /**
      * @brief   Return profile CheckSingleInstance.
      */
-    bool getCheckSingleInstance() { return m_checkSingleInstance; }
+    bool getCheckSingleInstance() const
+    {
+        return m_checkSingleInstance;
+    }
 
     /**
      * @brief       Set profile CheckSingleInstance.
      *
      * @param[in]   _checkSingleInstance    profile CheckSingleInstance
      */
-    void setCheckSingleInstance(bool _checkSingleInstance) { m_checkSingleInstance = _checkSingleInstance; }
-
-    FWRUNTIME_API ParamsContainer getParams();
+    void setCheckSingleInstance(bool _checkSingleInstance)
+    {
+        m_checkSingleInstance = _checkSingleInstance;
+    }
+
+#ifdef ANDROID
+    /// Returns android native activity interface
+    android_app* getApp() const
+    {
+        return m_app;
+    }
+    void setApp(android_app* app)
+    {
+        m_app = app;
+    }
+#endif
+    ParamsContainer getParams() const
+    {
+        return m_params;
+    }
 
     FWRUNTIME_API void setParams(const ParamsContainer &params);
     FWRUNTIME_API void setParams(int argc, char** argv);
 
     /**
-     * @brief Returns a reference on internal arg count.
+     * @brief Returns internal arg count.
      * The returned int shall not be modified. This is provided for external
      * library needs (QApplication contructor for example)
      */
-    FWRUNTIME_API int& getRawArgCount();
+    int& getRawArgCount()
+    {
+        return m_argc;
+    }
 
     /**
      * @brief Returns a raw pointer on internal arguments.
      * The returned data shall not be modified. This is provided for external
      * library needs (QApplication contructor for example)
      */
-    FWRUNTIME_API char** getRawParams();
+    char** getRawParams() const
+    {
+        return m_argv;
+    }
 
 private:
 
@@ -184,23 +227,25 @@ private:
     typedef std::vector< SPTR(Initializer) >   InitializerContainer;
     typedef std::vector< SPTR(Uninitializer) > UninitializerContainer;
 
-    ActivaterContainer        m_activaters;     ///< all managed activators
-    StarterContainer          m_starters;       ///< all managed starters
-    StopperContainer          m_stoppers;       ///< all managed stoppers
-    InitializerContainer      m_initializers;   ///< all managed initializers
-    UninitializerContainer    m_uninitializers; ///< all managed uninitializers
+    ActivaterContainer m_activaters;            ///< all managed activators
+    StarterContainer m_starters;                ///< all managed starters
+    StopperContainer m_stoppers;                ///< all managed stoppers
+    InitializerContainer m_initializers;        ///< all managed initializers
+    UninitializerContainer m_uninitializers;    ///< all managed uninitializers
 
-    std::string         m_sName;            ///< name profile
-    std::string         m_sVersion;         ///< profile app version
+    std::string m_sName;                    ///< name profile
+    std::string m_sVersion;                 ///< profile app version
     ::boost::filesystem::path m_filePath;   ///< xml parsed file used to generate profile
 
-    bool                m_checkSingleInstance;
-
-    ParamsContainer     m_params;
-    int                 m_argc;
-    char              **m_argv;
-
+    bool m_checkSingleInstance;
     RunCallbackType m_run;
+
+#ifdef ANDROID
+    android_app* m_app; ///< native android activity interface
+#endif
+    ParamsContainer m_params;
+    int m_argc;
+    char**          m_argv;
 };
 
 
@@ -223,4 +268,4 @@ FWRUNTIME_API Profile::sptr getCurrentProfile();
 
 
 
-#endif /*_FWRUNTIME_PROFILE_PROFILE_HPP_*/
+#endif /*__FWRUNTIME_PROFILE_PROFILE_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Starter.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Starter.hpp
index 7329812..dc7fbe2 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Starter.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Starter.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PROFILE_STARTER_HPP_
-#define _FWRUNTIME_PROFILE_STARTER_HPP_
+#ifndef __FWRUNTIME_PROFILE_STARTER_HPP__
+#define __FWRUNTIME_PROFILE_STARTER_HPP__
 
 #include <string>
 #include <boost/utility.hpp>
@@ -25,7 +25,7 @@ namespace profile
  * @brief   Starts a given bundle.
  * @class  Starter
  * @date    2007-2009
- * 
+ *
  */
 class Starter : public boost::noncopyable
 {
@@ -49,7 +49,7 @@ public:
 
 protected:
 
-    const std::string   m_identifier;   ///< a bundle identifier
+    const std::string m_identifier;     ///< a bundle identifier
 
 };
 
@@ -61,4 +61,4 @@ protected:
 
 
 
-#endif /*_FWRUNTIME_PROFILE_STARTER_HPP_*/
+#endif /*__FWRUNTIME_PROFILE_STARTER_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Stopper.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Stopper.hpp
index 4eed31b..00fe68d 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Stopper.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Stopper.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PROFILE_STOPPER_HPP_
-#define _FWRUNTIME_PROFILE_STOPPER_HPP_
+#ifndef __FWRUNTIME_PROFILE_STOPPER_HPP__
+#define __FWRUNTIME_PROFILE_STOPPER_HPP__
 
 #include <string>
 #include <boost/utility.hpp>
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/profile/Starter.hpp"
 #include "fwRuntime/config.hpp"
@@ -27,7 +26,7 @@ namespace profile
  * @brief   Stops a given bundle.
  * @class  Stopper
  * @date    2007-2009
- * 
+ *
  */
 class Stopper :  public boost::noncopyable
 {
@@ -48,9 +47,9 @@ public:
      */
     void apply();
 
-private :
+private:
 
-    const std::string   m_identifier;   ///< a bundle identifier
+    const std::string m_identifier;     ///< a bundle identifier
 };
 
 
@@ -61,4 +60,4 @@ private :
 
 
 
-#endif /*_FWRUNTIME_PROFILE_STOPPER_HPP_*/
+#endif /*__FWRUNTIME_PROFILE_STOPPER_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Uninitializer.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Uninitializer.hpp
index 31e01e9..028130b 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/profile/Uninitializer.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/profile/Uninitializer.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_PROFILE_UNINITIALIZER_HPP_
-#define _FWRUNTIME_PROFILE_UNINITIALIZER_HPP_
+#ifndef __FWRUNTIME_PROFILE_UNINITIALIZER_HPP__
+#define __FWRUNTIME_PROFILE_UNINITIALIZER_HPP__
 
 #include <string>
 #include <boost/utility.hpp>
@@ -25,7 +25,7 @@ namespace profile
  * @brief   Starts a given bundle.
  * @class  Uninitializer
  * @date    2007-2009
- * 
+ *
  */
 class Uninitializer : public boost::noncopyable
 {
@@ -49,7 +49,7 @@ public:
 
 protected:
 
-    const std::string   m_identifier;   ///< a bundle identifier
+    const std::string m_identifier;     ///< a bundle identifier
 
 };
 
@@ -61,4 +61,4 @@ protected:
 
 
 
-#endif /*_FWRUNTIME_PROFILE_UNINITIALIZER_HPP_*/
+#endif /*__FWRUNTIME_PROFILE_UNINITIALIZER_HPP__*/
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactory.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactory.hpp
index 41b828e..143451d 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactory.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactory.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORY_HPP
-#define _FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORY_HPP
+#ifndef __FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORY_HPP__
+#define __FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORY_HPP__
 
 #include <sstream>
 #include <string>
-#include <boost/shared_ptr.hpp>
 
 #include "fwRuntime/Bundle.hpp"
 #include "fwRuntime/ExecutableFactory.hpp"
@@ -25,7 +24,7 @@ namespace utils
  * @brief   Defines a generic template executable factory class.
  * @struct  GenericExecutableFactory
  * @date    2004-2009
- * 
+ *
  */
 template<typename E>
 struct GenericExecutableFactory : public ExecutableFactory
@@ -36,14 +35,16 @@ struct GenericExecutableFactory : public ExecutableFactory
      * @param[in]   type    a string containing the type supported by the factory
      */
     GenericExecutableFactory(const std::string& type)
-    :   ExecutableFactory( type )
-    {}
+        :   ExecutableFactory( type )
+    {
+    }
 
     /**
      * @brief   Destructor : does nothing.
      */
     virtual ~GenericExecutableFactory()
-    {}
+    {
+    }
 
 
     /**
@@ -60,7 +61,7 @@ struct GenericExecutableFactory : public ExecutableFactory
         }
         catch( std::exception & exception )
         {
-            std::ostringstream  buffer;
+            std::ostringstream buffer;
             buffer << "Unexpected exception caught while creating an ::fwRuntime::IExecutable instance. ";
             buffer << exception.what();
             throw RuntimeException( buffer.str() );
@@ -73,15 +74,16 @@ struct GenericExecutableFactory : public ExecutableFactory
     }
 
 
-private:
+    private:
 
-    /**
-     * @brief   Assignment operator.
-     *
-     * @remark  Assignment forbidden for this class.
-     */
-    void operator=(const GenericExecutableFactory&) throw()
-    {}
+        /**
+         * @brief   Assignment operator.
+         *
+         * @remark  Assignment forbidden for this class.
+         */
+        void operator=(const GenericExecutableFactory&) throw()
+        {
+        }
 
 };
 
@@ -91,4 +93,4 @@ private:
 } // namespace fwRuntime
 
 
-#endif // #define _FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORY_HPP
+#endif // __FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORY_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp
index c4db217..293a62d 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORYREGISTRAR_HPP_
-#define _FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORYREGISTRAR_HPP_
+#ifndef __FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORYREGISTRAR_HPP__
+#define __FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORYREGISTRAR_HPP__
 
 #include <string>
 
@@ -23,7 +23,7 @@ namespace utils
  * @brief   Defines a generic template executable factory registrar class.
  * @struct  GenericExecutableFactoryRegistrar
  * @date    2004-2009
- * 
+ *
  */
 template< typename E >
 struct GenericExecutableFactoryRegistrar : public ExecutableFactoryRegistrar
@@ -35,8 +35,9 @@ struct GenericExecutableFactoryRegistrar : public ExecutableFactoryRegistrar
      * @brief   Constructor
      */
     GenericExecutableFactoryRegistrar(const std::string& type)
-    : ExecutableFactoryRegistrar( ::boost::shared_ptr< FactoryType >( new FactoryType(type) ) )
-    {}
+        : ExecutableFactoryRegistrar( std::shared_ptr< FactoryType >( new FactoryType(type) ) )
+    {
+    }
 
 };
 
@@ -46,4 +47,4 @@ struct GenericExecutableFactoryRegistrar : public ExecutableFactoryRegistrar
 } // namespace fwRuntime
 
 
-#endif //_FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORYREGISTRAR_HPP_
+#endif //__FWRUNTIME_UTILS_GENERICEXECUTABLEFACTORYREGISTRAR_HPP__
diff --git a/SrcLib/core/fwRuntime/include/fwRuntime/utils/Namespace.hpp b/SrcLib/core/fwRuntime/include/fwRuntime/utils/Namespace.hpp
index cadf886..ce89348 100644
--- a/SrcLib/core/fwRuntime/include/fwRuntime/utils/Namespace.hpp
+++ b/SrcLib/core/fwRuntime/include/fwRuntime/utils/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRUNTIMEUTILSNAMESPACE_HPP_
-#define FWRUNTIMEUTILSNAMESPACE_HPP_
+#ifndef __FWRUNTIME_UTILS_NAMESPACE_HPP__
+#define __FWRUNTIME_UTILS_NAMESPACE_HPP__
 
 namespace fwRuntime
 {
 /**
  * @brief       The namespace fwRuntime::utils contains template executable factory classes
  * @namespace   fwRuntime::utils
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace utils
 
 }
 }
-#endif /* FWRUNTIMEUTILSNAMESPACE_HPP_ */
+#endif /* __FWRUNTIME_UTILS_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwRuntime/rc/locale/en/LC_MESSAGES/runtime.po b/SrcLib/core/fwRuntime/rc/locale/en/LC_MESSAGES/runtime.po
deleted file mode 100644
index 710eb4c..0000000
--- a/SrcLib/core/fwRuntime/rc/locale/en/LC_MESSAGES/runtime.po
+++ /dev/null
@@ -1,17 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 13:59+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
diff --git a/SrcLib/core/fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.po b/SrcLib/core/fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.po
deleted file mode 100644
index 22cd596..0000000
--- a/SrcLib/core/fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.po
+++ /dev/null
@@ -1,17 +0,0 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-06-13 13:59+0200\n"
-"PO-Revision-Date: 2008-06-13 16:00+0100\n"
-"Last-Translator: Johan Moreau <Johan.Moreau at laposte.net>\n"
-"Language-Team: LANGUAGE <LL at li.org>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
diff --git a/SrcLib/core/fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.pot b/SrcLib/core/fwRuntime/rc/locale/fr/LC_MESSAGES/runtime.pot
deleted file mode 100644
index e69de29..0000000
diff --git a/SrcLib/core/fwRuntime/src/Bundle.cpp b/SrcLib/core/fwRuntime/src/Bundle.cpp
index 7eb8a1d..74073f4 100644
--- a/SrcLib/core/fwRuntime/src/Bundle.cpp
+++ b/SrcLib/core/fwRuntime/src/Bundle.cpp
@@ -1,23 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#include <algorithm>
-#include <cassert>
-#include <exception>
-#include <memory>
-
-#include <fwCore/base.hpp>
-
 #include "fwRuntime/EmptyPlugin.hpp"
 #include "fwRuntime/IExecutable.hpp"
 #include "fwRuntime/ExecutableFactory.hpp"
 #include "fwRuntime/Extension.hpp"
 #include "fwRuntime/ExtensionPoint.hpp"
-#include "fwRuntime/predicates.hpp"
 #include "fwRuntime/Runtime.hpp"
 #include "fwRuntime/io/BundleDescriptorReader.hpp"
 #include "fwRuntime/utils/GenericExecutableFactory.hpp"
@@ -27,40 +18,18 @@
 
 #include "fwRuntime/Bundle.hpp"
 
+#include <fwCore/base.hpp>
+
+#include <algorithm>
+#include <cassert>
+#include <exception>
+#include <memory>
 
 namespace fwRuntime
 {
 
 //------------------------------------------------------------------------------
 
-namespace
-{
-
-    /**
-     * @brief   Defines a STL compatible predicate telling if an executable factory
-     *          matches the given type identifier
-     *
-     * 
-     */
-    struct IsOfType
-    {
-        IsOfType( const std::string & type )
-        :   m_type( type )
-        {}
-
-        bool operator() ( const SPTR( ExecutableFactory ) factory ) const
-        {
-            return factory->getType() == m_type;
-        }
-
-    private:
-
-        std::string m_type;
-    };
-}
-
-//------------------------------------------------------------------------------
-
 SPTR( Bundle ) Bundle::m_loadingBundle;
 
 //------------------------------------------------------------------------------
@@ -75,12 +44,12 @@ SPTR( Bundle ) Bundle::getLoadingBundle()
 Bundle::Bundle( const boost::filesystem::path   & location,
                 const std::string               & id,
                 const std::string               & version )
-:   m_location    ( location ),
-    m_identifier  ( id ),
-    m_version     ( version ),
-    m_enable      ( false ),
-    m_started     ( false ),
-    m_initialized ( false )
+    :   m_location    ( location ),
+      m_identifier  ( id ),
+      m_version     ( version ),
+      m_enable      ( false ),
+      m_started     ( false ),
+      m_initialized ( false )
 
 {
     // Post-condition.
@@ -90,17 +59,17 @@ Bundle::Bundle( const boost::filesystem::path   & location,
 //------------------------------------------------------------------------------
 
 Bundle::Bundle(
-            const boost::filesystem::path   & location,
-            const std::string               & id,
-            const std::string               & version,
-            const std::string               & c )
-:   m_location    ( location ),
-    m_identifier  ( id ),
-    m_version     ( version ),
-    m_class       ( c ),
-    m_enable      ( false ),
-    m_started     ( false ),
-    m_initialized ( false )
+    const boost::filesystem::path   & location,
+    const std::string               & id,
+    const std::string               & version,
+    const std::string               & c )
+    :   m_location    ( location ),
+      m_identifier  ( id ),
+      m_version     ( version ),
+      m_class       ( c ),
+      m_enable      ( false ),
+      m_started     ( false ),
+      m_initialized ( false )
 
 {
     // Post-condition.
@@ -109,7 +78,7 @@ Bundle::Bundle(
 
 //------------------------------------------------------------------------------
 
-void Bundle::addExecutableFactory( SPTR( ExecutableFactory ) factory )
+void Bundle::addExecutableFactory( SPTR( ExecutableFactory )factory )
 {
     m_executableFactories.insert( factory );
 }
@@ -132,13 +101,21 @@ Bundle::ExecutableFactoryConstIterator Bundle::executableFactoriesEnd() const
 
 SPTR( ExecutableFactory ) Bundle::findExecutableFactory( const std::string & type ) const
 {
-    ExecutableFactoryConstIterator  found = std::find_if( m_executableFactories.begin(), m_executableFactories.end(), IsOfType(type) );
-    return found != m_executableFactories.end() ? *found : SPTR( ExecutableFactory )();
+    std::shared_ptr<ExecutableFactory> resExecutableFactory;
+    for(const ExecutableFactoryContainer::value_type& factory : m_executableFactories)
+    {
+        if(factory->getType() == type)
+        {
+            resExecutableFactory = factory;
+            break;
+        }
+    }
+    return resExecutableFactory;
 }
 
 //------------------------------------------------------------------------------
 
-void Bundle::addExtension( SPTR( Extension ) extension )
+void Bundle::addExtension( SPTR( Extension )extension )
 {
     m_extensions.insert( extension );
 }
@@ -147,31 +124,27 @@ void Bundle::addExtension( SPTR( Extension ) extension )
 
 bool Bundle::hasExtension(const std::string & identifier) const
 {
-    ExtensionContainer::const_iterator extpt = m_extensions.begin();
-    while( extpt != m_extensions.end() )
+    bool hasExtension = false;
+    for(const ExtensionContainer::value_type& extension : m_extensions)
     {
-        if( (*extpt)->getIdentifier() ==  identifier )
+        if(extension->getIdentifier() == identifier)
         {
-            return true;
+            hasExtension = true;
+            break;
         }
-        ++extpt;
     }
-
-    return false;
+    return hasExtension;
 }
 
 //------------------------------------------------------------------------------
 
 void Bundle::setEnableExtension(const std::string & identifier, const bool enable)
 {
-    for( ExtensionContainer::iterator extpt = m_extensions.begin();
-            extpt != m_extensions.end();
-            ++extpt )
+    for(const ExtensionContainer::value_type& extension : m_extensions)
     {
-
-        if( (*extpt)->getIdentifier() ==  identifier )
+        if(extension->getIdentifier() == identifier)
         {
-            (*extpt)->setEnable(enable);
+            extension->setEnable(enable);
             break; // The identifier is unique => can break the loop
         }
     }
@@ -192,7 +165,7 @@ Bundle::ExtensionConstIterator Bundle::extensionsEnd() const
 }
 //------------------------------------------------------------------------------
 
-void Bundle::addExtensionPoint( SPTR( ExtensionPoint ) extensionPoint )
+void Bundle::addExtensionPoint( SPTR( ExtensionPoint )extensionPoint )
 {
     m_extensionPoints.insert( extensionPoint );
 }
@@ -201,42 +174,44 @@ void Bundle::addExtensionPoint( SPTR( ExtensionPoint ) extensionPoint )
 
 SPTR( ExtensionPoint ) Bundle::findExtensionPoint( const std::string & identifier ) const
 {
-    ExtensionPointContainer::const_iterator found;
-
-    found = std::find_if( m_extensionPoints.begin(), m_extensionPoints.end(), IsEnableAndHasIdentifier<ExtensionPoint>(identifier) );
-    return (found != m_extensionPoints.end()) ? (*found) : SPTR(ExtensionPoint)();
+    std::shared_ptr<ExtensionPoint> resExtensionPoint;
+    for(const ExtensionPointContainer::value_type& extensionPoint :  m_extensionPoints)
+    {
+        if(extensionPoint->getIdentifier() == identifier && extensionPoint->isEnable())
+        {
+            resExtensionPoint = extensionPoint;
+            break;
+        }
+    }
+    return resExtensionPoint;
 }
 
 //------------------------------------------------------------------------------
 
 bool Bundle::hasExtensionPoint(const std::string & identifier) const
 {
-    ExtensionPointContainer::const_iterator extpt = m_extensionPoints.begin();
-    while( extpt != m_extensionPoints.end() )
+    bool hasExtensionPoint = false;
+    for(const ExtensionPointContainer::value_type& extensionPoint :  m_extensionPoints)
     {
-        if( (*extpt)->getIdentifier() ==  identifier )
+        if(extensionPoint->getIdentifier() == identifier)
         {
-            return true;
+            hasExtensionPoint = true;
+            break;
         }
-        ++extpt;
     }
-
-    return false;
+    return hasExtensionPoint;
 }
 
 //------------------------------------------------------------------------------
 
 void Bundle::setEnableExtensionPoint(const std::string & identifier, const bool enable)
 {
-    for( ExtensionPointContainer::iterator extpt = m_extensionPoints.begin();
-         extpt != m_extensionPoints.end();
-         ++extpt )
+    for(const ExtensionPointContainer::value_type& extensionPoint :  m_extensionPoints)
     {
-
-        if( (*extpt)->getIdentifier() ==  identifier )
+        if(extensionPoint->getIdentifier() == identifier)
         {
-            (*extpt)->setEnable(enable);
-            break; // The identifier is unique => can break the loop
+            extensionPoint->setEnable(enable);
+            break;
         }
     }
 }
@@ -257,7 +232,7 @@ Bundle::ExtensionPointConstIterator Bundle::extensionPointsEnd() const
 
 //------------------------------------------------------------------------------
 
-void Bundle::addLibrary( SPTR( dl::Library ) library )
+void Bundle::addLibrary( SPTR(dl::Library)library )
 {
     library->setBundle(this);
     m_libraries.insert(library);
@@ -332,17 +307,14 @@ void Bundle::loadLibraries() throw(RuntimeException)
     // Pre-condition
     SLM_ASSERT("Bundle is already loaded", m_loadingBundle == 0 );
 
-    OSLM_TRACE( "Loading " << this->getIdentifier() << " library...");
+    SLM_TRACE( "Loading " + this->getIdentifier() + " library...");
 
     // References the current bundle as the loading bundle.
     m_loadingBundle = shared_from_this();
 
     // Loads all libraries.
-    LibraryContainer::iterator curEntry;
-    LibraryContainer::iterator endEntry = m_libraries.end();
-    for(curEntry = m_libraries.begin(); curEntry != endEntry; ++curEntry)
+    for(const LibraryContainer::value_type& library : m_libraries)
     {
-        SPTR(dl::Library) library(*curEntry);
         if(library->isLoaded() == false)
         {
             try
@@ -371,8 +343,7 @@ void Bundle::loadLibraries() throw(RuntimeException)
 
     // Post-condition
     assert( m_loadingBundle == 0 );
-
-    OSLM_TRACE(this->getIdentifier() << " library loaded");
+    SLM_TRACE("Library " + this->getIdentifier() + " loaded");
 }
 
 //------------------------------------------------------------------------------
@@ -383,9 +354,8 @@ void Bundle::loadRequirements() throw(RuntimeException)
     {
         Runtime *rntm(Runtime::getDefault());
         RequirementContainer::const_iterator iter;
-        for(iter = m_requirements.begin(); iter != m_requirements.end(); ++iter)
+        for(const RequirementContainer::value_type& requirement : m_requirements)
         {
-            const std::string requirement ( *iter);
             SPTR( Bundle ) bundle( rntm->findBundle(requirement) );
 
             // Ensure that a bundle has been retrieved.
@@ -440,9 +410,9 @@ void Bundle::start() throw(RuntimeException)
 
 void Bundle::startPlugin() throw(RuntimeException)
 {
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " plugin is already started.", !m_started );
+    SLM_ASSERT("Bundle " + this->getIdentifier() + " plugin is already started.", !m_started );
     // Retrieves the type of the plugin.
-    const std::string   pluginType( getClass() );
+    const std::string pluginType( getClass() );
 
     // According to the presence of a class or not, build and empty
     // plugin or attempt to instantiate a user defined plugin.
@@ -457,7 +427,7 @@ void Bundle::startPlugin() throw(RuntimeException)
         Runtime * rntm  ( Runtime::getDefault() );
         SPTR( IExecutable ) executable ( rntm->createExecutableInstance(pluginType) );
 
-        plugin = ::boost::dynamic_pointer_cast< IPlugin >( executable );
+        plugin = std::dynamic_pointer_cast< IPlugin >( executable );
     }
 
     // Ensures that a plugin has been created.
@@ -466,15 +436,17 @@ void Bundle::startPlugin() throw(RuntimeException)
         throw RuntimeException( getIdentifier() + ": unable to create a plugin instance." );
     }
 
-    OSLM_TRACE("Starting " << this->getIdentifier() << " Bundle's plugin.");
+    SLM_TRACE("Starting " + this->getIdentifier() + " Bundle's plugin.");
     // Stores and start the plugin.
     try
     {
         OSLM_TRACE("Register stopper for " << this->getIdentifier() << " Bundle's plugin.");
-        ::fwRuntime::profile::getCurrentProfile()->add( SPTR(profile::Stopper) (new profile::Stopper(this->getIdentifier())));
+        ::fwRuntime::profile::getCurrentProfile()->add(
+            SPTR(profile::Stopper) (new profile::Stopper(this->getIdentifier())));
         m_plugin = plugin;
         m_plugin->start();
-        ::fwRuntime::profile::getCurrentProfile()->add( SPTR(profile::Initializer) (new profile::Initializer(this->getIdentifier())) );
+        ::fwRuntime::profile::getCurrentProfile()->add(
+            SPTR(profile::Initializer) (new profile::Initializer(this->getIdentifier())) );
         m_started = true;
     }
     catch( std::exception & e )
@@ -487,11 +459,11 @@ void Bundle::startPlugin() throw(RuntimeException)
 
 void Bundle::stop() throw(RuntimeException)
 {
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " not started.", m_started );
-    OSLM_ASSERT(this->getIdentifier() << " : m_plugin not an intance.", m_plugin != 0 );
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " not uninitialized.", !m_initialized );
+    SLM_ASSERT("Bundle "+ this->getIdentifier() + " not started.", m_started );
+    SLM_ASSERT(this->getIdentifier() + " : m_plugin not an intance.", m_plugin != 0 );
+    SLM_ASSERT("Bundle "+ this->getIdentifier() + " not uninitialized.", !m_initialized );
 
-    OSLM_TRACE("Stopping " << this->getIdentifier() << "Bundle's plugin.");
+    SLM_TRACE("Stopping " + this->getIdentifier() + " Bundle's plugin.");
     try
     {
         m_plugin->stop();
@@ -510,7 +482,7 @@ void Bundle::stop() throw(RuntimeException)
 //    LibraryContainer::iterator endEntry = m_libraries.end();
 //    for(curEntry = m_libraries.begin(); curEntry != endEntry; ++curEntry)
 //    {
-//        ::boost::shared_ptr<dl::Library> library(*curEntry);
+//        std::shared_ptr<dl::Library> library(*curEntry);
 //        if(library->isLoaded() == true )
 //        {
 //            library->unload();
@@ -521,14 +493,14 @@ void Bundle::stop() throw(RuntimeException)
 //------------------------------------------------------------------------------
 void Bundle::initialize() throw(RuntimeException)
 {
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " not started.", m_started );
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " already initialized.", !m_initialized );
+    SLM_ASSERT("Bundle '"+ this->getIdentifier() + "' not started.", m_started );
+    SLM_ASSERT("Bundle '"+ this->getIdentifier() + "' already initialized.", !m_initialized );
     try
     {
         m_initialized = true;
-        OSLM_TRACE("Initializing " << this->getIdentifier() << " ...");
+        SLM_TRACE("Initializing " + this->getIdentifier() + " ...");
         m_plugin->initialize();
-        OSLM_TRACE("             " <<this->getIdentifier() << " Initialized");
+        SLM_TRACE("             " +this->getIdentifier() + " Initialized");
     }
     catch( std::exception & e )
     {
@@ -540,14 +512,14 @@ void Bundle::initialize() throw(RuntimeException)
 
 void Bundle::uninitialize() throw(RuntimeException)
 {
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " has not been started.", m_plugin );
-    OSLM_ASSERT("Bundle "<< this->getIdentifier() << " not initialized.", m_initialized );
+    SLM_ASSERT("Bundle '"+ this->getIdentifier() + "' has not been started.", m_plugin );
+    SLM_ASSERT("Bundle '"+ this->getIdentifier() + "' not initialized.", m_initialized );
     try
     {
-        OSLM_TRACE("Uninitializing " << this->getIdentifier() << " ...");
+        SLM_TRACE("Uninitializing " + this->getIdentifier() + " ...");
         m_plugin->uninitialize();
         m_initialized = false;
-        OSLM_TRACE("               " << this->getIdentifier() << " Uninitialized");
+        SLM_TRACE("               " + this->getIdentifier() + " Uninitialized");
     }
     catch( std::exception & e )
     {
@@ -580,7 +552,7 @@ void Bundle::addParameter( const std::string & identifier, const std::string & v
 
 const std::string Bundle::getParameterValue( const std::string & identifier ) const
 {
-    ParameterContainer::const_iterator  found = m_parameters.find(identifier);
+    ParameterContainer::const_iterator found = m_parameters.find(identifier);
 
     return (found != m_parameters.end()) ? found->second : std::string();
 }
@@ -595,7 +567,8 @@ bool Bundle::hasParameter( const std::string & identifier ) const
 //------------------------------------------------------------------------------
 
 void Bundle::operator= ( const Bundle & )
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/BundleElement.cpp b/SrcLib/core/fwRuntime/src/BundleElement.cpp
index af4cd15..aea097c 100644
--- a/SrcLib/core/fwRuntime/src/BundleElement.cpp
+++ b/SrcLib/core/fwRuntime/src/BundleElement.cpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwRuntime/BundleElement.hpp"
-
-#include <cassert>
-
 #include "fwRuntime/Bundle.hpp"
 
+#include <cassert>
+#include <memory>
 
 
 namespace fwRuntime
@@ -17,8 +16,7 @@ namespace fwRuntime
 
 //------------------------------------------------------------------------------
 
-BundleElement::BundleElement()
-:   m_bundle( Bundle::getLoadingBundle() ), m_enable(true)
+BundleElement::BundleElement() :   m_bundle( Bundle::getLoadingBundle() ), m_enable(true)
 {
     // Post-condition
 
@@ -27,8 +25,8 @@ BundleElement::BundleElement()
 
 //------------------------------------------------------------------------------
 
-BundleElement::BundleElement( ::boost::shared_ptr< Bundle > bundle )
-:   m_bundle( bundle ), m_enable(true)
+BundleElement::BundleElement( std::shared_ptr< Bundle > bundle )
+    :   m_bundle( bundle ), m_enable(true)
 {
     // Post-condition
     SLM_ASSERT("bundle '" << m_bundle->getIdentifier() << "' not initialized", m_bundle != 0 );
@@ -36,7 +34,7 @@ BundleElement::BundleElement( ::boost::shared_ptr< Bundle > bundle )
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Bundle> BundleElement::getBundle() const
+std::shared_ptr<Bundle> BundleElement::getBundle() const
 {
     return m_bundle;
 }
diff --git a/SrcLib/core/fwRuntime/src/ConfigurationElement.cpp b/SrcLib/core/fwRuntime/src/ConfigurationElement.cpp
index 7d0cd9d..998e35e 100644
--- a/SrcLib/core/fwRuntime/src/ConfigurationElement.cpp
+++ b/SrcLib/core/fwRuntime/src/ConfigurationElement.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,32 +18,36 @@ namespace fwRuntime
 
 std::ostream & operator<<(std::ostream & _sstream, ConfigurationElement& _configurationElement)
 {
-    _sstream << "Configuration element " << _configurationElement.getName() << " value = " << _configurationElement.getValue() << std::endl;
-    for(ConfigurationElement::AttributeContainer::iterator iter = _configurationElement.m_attributes.begin() ; iter != _configurationElement.m_attributes.end() ; ++iter )
+    _sstream << "Configuration element " << _configurationElement.getName() << " value = " <<
+        _configurationElement.getValue() << std::endl;
+    for(ConfigurationElement::AttributeContainer::iterator iter = _configurationElement.m_attributes.begin();
+        iter != _configurationElement.m_attributes.end(); ++iter )
     {
         _sstream << "Id = " << iter->first << " with value " << iter->second << std::endl;
     }
     _sstream << "Subelement : " << std::endl;
-    for(ConfigurationElementContainer::Container::iterator iter = _configurationElement.begin() ; iter != _configurationElement.end() ; ++iter )
+    for(ConfigurationElementContainer::Container::iterator iter = _configurationElement.begin();
+        iter != _configurationElement.end(); ++iter )
     {
 
         _sstream << std::endl << *(*iter) << std::endl;
     }
 
-    return _sstream ;
+    return _sstream;
 }
 
 //------------------------------------------------------------------------------
 
-ConfigurationElement::ConfigurationElement( const ::boost::shared_ptr< Bundle > bundle, const std::string & name )
-:   m_bundle( bundle    ),
-    m_name  ( name      ),
-    m_value ( std::string("") )
-{}
+ConfigurationElement::ConfigurationElement( const std::shared_ptr< Bundle > bundle, const std::string & name )
+    :   m_bundle( bundle    ),
+      m_name  ( name      ),
+      m_value ( std::string("") )
+{
+}
 
 //------------------------------------------------------------------------------
 
-const ::boost::shared_ptr<Bundle> ConfigurationElement::getBundle() const throw()
+const std::shared_ptr<Bundle> ConfigurationElement::getBundle() const throw()
 {
     return m_bundle;
 }
@@ -63,14 +67,15 @@ const std::string ConfigurationElement::getExistingAttributeValue(const std::str
     AttributeContainer::const_iterator foundPos = m_attributes.find(name);
     if(foundPos == m_attributes.end())
     {
-         FW_RAISE_EXCEPTION(NoSuchAttribute(name));
+        FW_RAISE_EXCEPTION(NoSuchAttribute(name));
     }
     return foundPos->second;
 }
 
 //------------------------------------------------------------------------------
 
-const ConfigurationElement::AttributePair ConfigurationElement::getSafeAttributeValue(const std::string& name) const throw()
+const ConfigurationElement::AttributePair ConfigurationElement::getSafeAttributeValue(const std::string& name) const
+throw()
 {
     AttributeContainer::const_iterator foundPos = m_attributes.find(name);
     if(foundPos == m_attributes.end())
@@ -129,23 +134,26 @@ void ConfigurationElement::setValue(const std::string& value) throw()
 //------------------------------------------------------------------------------
 
 void ConfigurationElement::operator=(const ConfigurationElement&) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 std::vector < ConfigurationElement::sptr > ConfigurationElement::find(
-            std::string name,
-            std::string attribute,
-            std::string attributeValue,
-            int depth
-            )
+    std::string name,
+    std::string attribute,
+    std::string attributeValue,
+    int depth
+    )
 {
     typedef std::vector < ConfigurationElement::sptr > ConfVector;
     ConfVector result;
 
-    bool nameOk = (name.empty() || this->getName() == name);
-    bool attributeOk = (attribute.empty() || this->hasAttribute(attribute));
-    bool attributeValueOk = (attributeValue.empty() || (this->hasAttribute(attribute) && this->getAttributeValue(attribute) == attributeValue));
+    bool nameOk           = (name.empty() || this->getName() == name);
+    bool attributeOk      = (attribute.empty() || this->hasAttribute(attribute));
+    bool attributeValueOk =
+        (attributeValue.empty() ||
+         (this->hasAttribute(attribute) && this->getAttributeValue(attribute) == attributeValue));
     if (nameOk && attributeOk && attributeValueOk)
     {
         result.push_back(this->shared_from_this());
@@ -167,7 +175,9 @@ std::vector < ConfigurationElement::sptr > ConfigurationElement::find(
 
 //-----------------------------------------------------------------------------
 
-ConfigurationElement::~ConfigurationElement() {}
+ConfigurationElement::~ConfigurationElement()
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/ConfigurationElementContainer.cpp b/SrcLib/core/fwRuntime/src/ConfigurationElementContainer.cpp
index 2d87c57..0c075cc 100644
--- a/SrcLib/core/fwRuntime/src/ConfigurationElementContainer.cpp
+++ b/SrcLib/core/fwRuntime/src/ConfigurationElementContainer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,27 +16,28 @@ namespace fwRuntime
 namespace
 {
 
-    /**
-     * @brief   Implements a STL compliant predicate that test if a configuration
-     *          element has the given name.
-     *
-     * 
-     */
-    struct HasName
-    {
-        HasName( const std::string & name )
+/**
+ * @brief   Implements a STL compliant predicate that test if a configuration
+ *          element has the given name.
+ *
+ *
+ */
+struct HasName
+{
+    HasName( const std::string & name )
         :   m_name( name )
-        {}
+    {
+    }
 
-        bool operator() ( ConfigurationElement::csptr element ) const
-        {
-            return element->getName() == m_name;
-        }
+    bool operator() ( ConfigurationElement::csptr element ) const
+    {
+        return element->getName() == m_name;
+    }
 
     private:
 
         std::string m_name;
-    };
+};
 
 }
 
@@ -78,16 +79,18 @@ bool ConfigurationElementContainer::hasConfigurationElement( const std::string &
 
 //-----------------------------------------------------------------------------
 
-const ::boost::shared_ptr<ConfigurationElement> ConfigurationElementContainer::findConfigurationElement( const std::string & name ) const
+const std::shared_ptr<ConfigurationElement> ConfigurationElementContainer::findConfigurationElement(
+    const std::string & name ) const
 {
-    Container::const_iterator   found = std::find_if( m_elements.begin(), m_elements.end(), HasName(name) );
+    Container::const_iterator found = std::find_if( m_elements.begin(), m_elements.end(), HasName(name) );
 
-    return ( found == m_elements.end() ) ? ::boost::shared_ptr< ConfigurationElement >() : *found;
+    return ( found == m_elements.end() ) ? std::shared_ptr< ConfigurationElement >() : *found;
 }
 
 //-----------------------------------------------------------------------------
 
-ConfigurationElementContainer ConfigurationElementContainer::findAllConfigurationElement( const std::string & _name ) const
+ConfigurationElementContainer ConfigurationElementContainer::findAllConfigurationElement( const std::string & _name )
+const
 {
     ConfigurationElementContainer container;
 
diff --git a/SrcLib/core/fwRuntime/src/Convert.cpp b/SrcLib/core/fwRuntime/src/Convert.cpp
index 363806b..542be89 100644
--- a/SrcLib/core/fwRuntime/src/Convert.cpp
+++ b/SrcLib/core/fwRuntime/src/Convert.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,40 +25,45 @@ namespace fwRuntime
 //------------------------------------------------------------------------------
 
 Convert::Convert()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 Convert::~Convert()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void Convert::fromConfigurationElementToXml( ::boost::shared_ptr< ::fwRuntime::ConfigurationElement > _cfgElement, xmlNodePtr _node)
+void Convert::fromConfigurationElementToXml( std::shared_ptr< ::fwRuntime::ConfigurationElement > _cfgElement,
+                                             xmlNodePtr _node)
 {
     //NAME
-    xmlNodePtr pNode = xmlNewNode( NULL,  xmlCharStrdup( _cfgElement->getName().c_str() ) ) ;
-    xmlAddChild(_node, pNode ) ;
+    xmlNodePtr pNode = xmlNewNode( NULL,  xmlCharStrdup( _cfgElement->getName().c_str() ) );
+    xmlAddChild(_node, pNode );
 
 
     std::string nodeValue = _cfgElement->getValue();
     if(!nodeValue.empty())
     {
-        xmlNodeSetContent (pNode, reinterpret_cast<const xmlChar *>(nodeValue.c_str()));
+        xmlNodeSetContent (pNode, reinterpret_cast<const xmlChar*>(nodeValue.c_str()));
     }
 
-    std::map<std::string, std::string> attr_cfe = _cfgElement->getAttributes() ;
+    std::map<std::string, std::string> attr_cfe = _cfgElement->getAttributes();
 
 
-    for ( std::map<std::string, std::string>::iterator iter_attr_cfe = attr_cfe.begin() ;
-        iter_attr_cfe!= attr_cfe.end();
-        ++iter_attr_cfe)
+    for ( std::map<std::string, std::string>::iterator iter_attr_cfe = attr_cfe.begin();
+          iter_attr_cfe!= attr_cfe.end();
+          ++iter_attr_cfe)
     {
         //ATTRIBUTES + VALUES
-        xmlSetProp(pNode , xmlCharStrdup((iter_attr_cfe->first).c_str()), xmlCharStrdup((iter_attr_cfe->second).c_str()) ) ;
+        xmlSetProp(pNode, xmlCharStrdup((iter_attr_cfe->first).c_str()),
+                   xmlCharStrdup((iter_attr_cfe->second).c_str()) );
         if ((iter_attr_cfe->first) == std::string("class"))
         {
-            xmlSetProp(pNode , xmlCharStrdup((iter_attr_cfe->first).c_str()), xmlCharStrdup((iter_attr_cfe->second).c_str()) ) ;
+            xmlSetProp(pNode, xmlCharStrdup((iter_attr_cfe->first).c_str()),
+                       xmlCharStrdup((iter_attr_cfe->second).c_str()) );
         }
     }
 
@@ -67,11 +72,11 @@ void Convert::fromConfigurationElementToXml( ::boost::shared_ptr< ::fwRuntime::C
                 << nodeValue <<") at the same time.",
                 !(!nodeValue.empty() && _cfgElement->size())  );
 
-    for ( std::vector< ::fwRuntime::ConfigurationElement::sptr >::iterator iter_cfeC = _cfgElement->begin() ;
-    iter_cfeC != _cfgElement->end() ;
-    ++iter_cfeC )
+    for ( std::vector< ::fwRuntime::ConfigurationElement::sptr >::iterator iter_cfeC = _cfgElement->begin();
+          iter_cfeC != _cfgElement->end();
+          ++iter_cfeC )
     {
-        fromConfigurationElementToXml( (*iter_cfeC), pNode) ;
+        fromConfigurationElementToXml( (*iter_cfeC), pNode);
     }
 
 }
@@ -80,104 +85,110 @@ void Convert::fromConfigurationElementToXml( ::boost::shared_ptr< ::fwRuntime::C
 
 xmlNodePtr Convert::runningBundlesToXml( )
 {
-    xmlNodePtr node_root = xmlNewNode( NULL,  xmlCharStrdup( "Bundles" ) ) ;
-    std::set< ::boost::shared_ptr< ::fwRuntime::Bundle > > ::iterator iter_bundles ;
-    ::fwRuntime::Runtime * tmp_runtime = ::fwRuntime::Runtime::getDefault() ;
+    xmlNodePtr node_root = xmlNewNode( NULL,  xmlCharStrdup( BUNDLE_PREFIX ) );
+    std::set< std::shared_ptr< ::fwRuntime::Bundle > > ::iterator iter_bundles;
+    ::fwRuntime::Runtime* tmp_runtime = ::fwRuntime::Runtime::getDefault();
 
-    xmlNodePtr activated_Node = xmlNewNode( NULL,  xmlCharStrdup( "Activated" ) ) ;
-    xmlAddChild(node_root, activated_Node ) ;
+    xmlNodePtr activated_Node = xmlNewNode( NULL,  xmlCharStrdup( "Activated" ) );
+    xmlAddChild(node_root, activated_Node );
 
-    xmlNodePtr inactivated_Node = xmlNewNode( NULL,  xmlCharStrdup( "Inactivated" ) ) ;
-    xmlAddChild(node_root, inactivated_Node ) ;
+    xmlNodePtr inactivated_Node = xmlNewNode( NULL,  xmlCharStrdup( "Inactivated" ) );
+    xmlAddChild(node_root, inactivated_Node );
 
-    bool enable_Value = false ; // the 'do while' loop stop if enable_Value==false.
+    bool enable_Value = false;  // the 'do while' loop stop if enable_Value==false.
     do
     {
-        enable_Value = !enable_Value ;
-        for (iter_bundles =  tmp_runtime->bundlesBegin() ;
-                iter_bundles != tmp_runtime->bundlesEnd() ;
-                ++iter_bundles)
+        enable_Value = !enable_Value;
+        for (iter_bundles = tmp_runtime->bundlesBegin();
+             iter_bundles != tmp_runtime->bundlesEnd();
+             ++iter_bundles)
         {
             //BUNDLE
 
-            xmlNodePtr bundleNode = xmlNewNode( NULL, xmlCharStrdup( (*iter_bundles)->getIdentifier().c_str() ) ) ;
+            xmlNodePtr bundleNode = xmlNewNode( NULL, xmlCharStrdup( (*iter_bundles)->getIdentifier().c_str() ) );
             if (enable_Value)
             {
-                xmlAddChild(activated_Node, bundleNode ) ;
+                xmlAddChild(activated_Node, bundleNode );
             }
             else
             {
-                xmlAddChild(inactivated_Node, bundleNode ) ;
+                xmlAddChild(inactivated_Node, bundleNode );
             }
 
             //EXTENSIONS POINTS
-            xmlNodePtr extensionPoint_activated_list_Node = xmlNewNode( NULL,  xmlCharStrdup( "Extensions_Points" ) ) ;
-            xmlAddChild(bundleNode, extensionPoint_activated_list_Node ) ;
+            xmlNodePtr extensionPoint_activated_list_Node = xmlNewNode( NULL,  xmlCharStrdup( "Extensions_Points" ) );
+            xmlAddChild(bundleNode, extensionPoint_activated_list_Node );
 
-            for ( std::set< ::boost::shared_ptr< ::fwRuntime::ExtensionPoint > >::const_iterator iter_extensionPoints = (*iter_bundles)->extensionPointsBegin() ;
-                    iter_extensionPoints != (*iter_bundles)->extensionPointsEnd() ;
-                    ++iter_extensionPoints)
+            for ( std::set< std::shared_ptr< ::fwRuntime::ExtensionPoint > >::const_iterator iter_extensionPoints =
+                      (*iter_bundles)->extensionPointsBegin();
+                  iter_extensionPoints != (*iter_bundles)->extensionPointsEnd();
+                  ++iter_extensionPoints)
             {
                 //EXTENSIONS POINTS
-                std::string str = "Identifier : "+(*iter_extensionPoints)->getIdentifier() ;
+                std::string str = "Identifier : "+(*iter_extensionPoints)->getIdentifier();
                 //-----DEBUG------
-                xmlNodePtr extensionPointsNode = xmlNewNode( NULL,  xmlCharStrdup( str.c_str() ) ) ;
+                xmlNodePtr extensionPointsNode = xmlNewNode( NULL,  xmlCharStrdup( str.c_str() ) );
                 //xmlNodePtr extensionPointsNode = xmlNewNode( NULL,  xmlCharStrdup( (str.substr(str.find_last_of("::")+1)).c_str() ) ) ;
                 //-----DEBUG------
                 if (((*iter_extensionPoints)->isEnable())==enable_Value)
                 {
-                    xmlAddChild(extensionPoint_activated_list_Node, extensionPointsNode ) ;
+                    xmlAddChild(extensionPoint_activated_list_Node, extensionPointsNode );
                 }
 
-                std::vector< ::fwRuntime::ConfigurationElement::sptr > AllConfigElement = ((*iter_extensionPoints)->getAllConfigurationElements());
-                for (std::vector< ::fwRuntime::ConfigurationElement::sptr >::const_iterator iter_config_elem = AllConfigElement.begin() ;
-                        iter_config_elem != AllConfigElement.end() ;
-                        ++iter_config_elem)
+                std::vector< ::fwRuntime::ConfigurationElement::sptr > AllConfigElement =
+                    ((*iter_extensionPoints)->getAllConfigurationElements());
+                for (std::vector< ::fwRuntime::ConfigurationElement::sptr >::const_iterator iter_config_elem =
+                         AllConfigElement.begin();
+                     iter_config_elem != AllConfigElement.end();
+                     ++iter_config_elem)
                 {
                     //CONFIGURATIONS ELEMENTS
-                    Convert::fromConfigurationElementToXml( (*iter_config_elem), extensionPointsNode) ;
+                    Convert::fromConfigurationElementToXml( (*iter_config_elem), extensionPointsNode);
                 }
             }//end extensionsPoints parsing
 
             //Extensions
-            xmlNodePtr extension_activated_list_Node = xmlNewNode( NULL,  xmlCharStrdup( "Extensions" ) ) ;
-            xmlAddChild(bundleNode, extension_activated_list_Node ) ;
+            xmlNodePtr extension_activated_list_Node = xmlNewNode( NULL,  xmlCharStrdup( "Extensions" ) );
+            xmlAddChild(bundleNode, extension_activated_list_Node );
 
-            for ( std::set< ::boost::shared_ptr< ::fwRuntime::Extension > >::const_iterator iter_extension = (*iter_bundles)->extensionsBegin()  ;
-                    iter_extension != (*iter_bundles)->extensionsEnd() ;
-                    ++iter_extension)
+            for ( std::set< std::shared_ptr< ::fwRuntime::Extension > >::const_iterator iter_extension =
+                      (*iter_bundles)->extensionsBegin();
+                  iter_extension != (*iter_bundles)->extensionsEnd();
+                  ++iter_extension)
             {
                 if (((*iter_extension)->isEnable())==enable_Value)
                 {
-                    std::string str = (*iter_extension)->getPoint() ;
-                    xmlNodePtr extensionNode = xmlNewNode( NULL,  xmlCharStrdup( (str.c_str() ) ) ) ;
+                    std::string str          = (*iter_extension)->getPoint();
+                    xmlNodePtr extensionNode = xmlNewNode( NULL,  xmlCharStrdup( (str.c_str() ) ) );
 
                     // Adds node if not exist
-                    xmlNodePtr node ;
-                    bool found_node = false ;
-                    for ( node = extension_activated_list_Node->children ;
-                            node ;
-                            node = node->next)
+                    xmlNodePtr node;
+                    bool found_node = false;
+                    for ( node = extension_activated_list_Node->children;
+                          node;
+                          node = node->next)
                     {
-                        if ( (node->type == XML_ELEMENT_NODE) && !(xmlStrcmp(node->name, xmlCharStrdup( (str.c_str() ) ) ) ) )
+                        if ( (node->type == XML_ELEMENT_NODE) &&
+                             !(xmlStrcmp(node->name, xmlCharStrdup( (str.c_str() ) ) ) ) )
                         {
-                            extensionNode = node ;
-                            found_node = true ;
-                            break ;
+                            extensionNode = node;
+                            found_node    = true;
+                            break;
                         }
                     }
 
                     if (!found_node)
                     {
-                        xmlAddChild(extension_activated_list_Node, extensionNode ) ;
+                        xmlAddChild(extension_activated_list_Node, extensionNode );
                     }
                     //end adds node
 
-                    for (std::vector< ::fwRuntime::ConfigurationElement::sptr >::iterator iter_cfe_extension = (*iter_extension)->begin() ;
-                            iter_cfe_extension != (*iter_extension)->end() ;
-                            ++iter_cfe_extension )
+                    for (std::vector< ::fwRuntime::ConfigurationElement::sptr >::iterator iter_cfe_extension =
+                             (*iter_extension)->begin();
+                         iter_cfe_extension != (*iter_extension)->end();
+                         ++iter_cfe_extension )
                     {
-                        Convert::fromConfigurationElementToXml( (*iter_cfe_extension), extensionNode) ;
+                        Convert::fromConfigurationElementToXml( (*iter_cfe_extension), extensionNode);
                     }
                 }
             }//end Extensions parsing
@@ -187,26 +198,27 @@ xmlNodePtr Convert::runningBundlesToXml( )
             // xmlIsBlankNode too, work only for Text-Nodes
             if (!(extensionPoint_activated_list_Node->children))
             {
-                xmlUnlinkNode(extensionPoint_activated_list_Node) ;
-                xmlFreeNode(extensionPoint_activated_list_Node) ;
+                xmlUnlinkNode(extensionPoint_activated_list_Node);
+                xmlFreeNode(extensionPoint_activated_list_Node);
             }
 
             if (!(extension_activated_list_Node->children))
             {
-                xmlUnlinkNode(extension_activated_list_Node) ;
-                xmlFreeNode(extension_activated_list_Node) ;
+                xmlUnlinkNode(extension_activated_list_Node);
+                xmlFreeNode(extension_activated_list_Node);
             }
 
             if (!(bundleNode->children))
             {
-                xmlUnlinkNode(bundleNode) ;
-                xmlFreeNode(bundleNode) ;
+                xmlUnlinkNode(bundleNode);
+                xmlFreeNode(bundleNode);
             }
             //end cleaning
         }//end bundles iterator
-    } while ( enable_Value ) ;
+    }
+    while ( enable_Value );
 
-    return node_root ;
+    return node_root;
 }//runningBundlesToXml
 
 //------------------------------------------------------------------------------
@@ -214,14 +226,14 @@ xmlNodePtr Convert::runningBundlesToXml( )
 xmlNodePtr Convert::toXml( ::fwRuntime::ConfigurationElement::sptr _cfgElement)
 {
     xmlNodePtr tmp = xmlNewNode( NULL,  xmlCharStrdup( "Configurations_Elements" ) );
-    ::fwRuntime::Convert::fromConfigurationElementToXml( _cfgElement, tmp) ;
-    return tmp ;
+    ::fwRuntime::Convert::fromConfigurationElementToXml( _cfgElement, tmp);
+    return tmp;
 }
 
 
 std::string Convert::toXmlString( ::fwRuntime::ConfigurationElement::sptr _cfgElement)
 {
-    xmlNodePtr node = toXml( _cfgElement );
+    xmlNodePtr node     = toXml( _cfgElement );
     xmlBufferPtr buffer = xmlBufferCreate();
     xmlNodeDump( buffer, node->doc, xmlFirstElementChild(node), 0, 1 );
 
@@ -238,7 +250,7 @@ std::string Convert::toXmlString( ::fwRuntime::ConfigurationElement::sptr _cfgEl
     ::boost::property_tree::ptree pt;
     ::boost::property_tree::ptree ptAttr;
 
-    std::string propertyName = _cfgElement->getName();
+    std::string propertyName  = _cfgElement->getName();
     std::string propertyValue = _cfgElement->getValue();
 
     typedef std::map<std::string, std::string> AttributeMatType;
@@ -248,9 +260,9 @@ std::string Convert::toXmlString( ::fwRuntime::ConfigurationElement::sptr _cfgEl
         pt.put(propertyName, propertyValue);
     }
 
-    AttributeMatType attr = _cfgElement->getAttributes() ;
+    AttributeMatType attr = _cfgElement->getAttributes();
 
-    for ( AttributeMatType::iterator iter = attr.begin() ; iter!= attr.end(); ++iter)
+    for ( AttributeMatType::iterator iter = attr.begin(); iter!= attr.end(); ++iter)
     {
         ptAttr.put(iter->first,iter->second);
     }
@@ -260,8 +272,8 @@ std::string Convert::toXmlString( ::fwRuntime::ConfigurationElement::sptr _cfgEl
         pt.put_child(propertyName + ".<xmlattr>", ptAttr);
     }
 
-    for ( ::fwRuntime::ConfigurationElementContainer::Iterator iterElement = _cfgElement->begin() ;
-          iterElement != _cfgElement->end() ;
+    for ( ::fwRuntime::ConfigurationElementContainer::Iterator iterElement = _cfgElement->begin();
+          iterElement != _cfgElement->end();
           ++iterElement )
     {
         std::string childName = (*iterElement)->getName();
@@ -269,14 +281,14 @@ std::string Convert::toXmlString( ::fwRuntime::ConfigurationElement::sptr _cfgEl
 
         ptChild = toPropertyTree (*iterElement);
 
-        boost::optional< ::boost::property_tree::ptree & > child = ptChild.get_child_optional(childName) ;
+        boost::optional< ::boost::property_tree::ptree& > child = ptChild.get_child_optional(childName);
 
         if(child)
         {
             ptChild = *child;
         }
 
-        pt.add_child( propertyName + "." + childName  , ptChild );
+        pt.add_child( propertyName + "." + childName, ptChild );
     }
     return pt;
 }
diff --git a/SrcLib/core/fwRuntime/src/EConfigurationElement.cpp b/SrcLib/core/fwRuntime/src/EConfigurationElement.cpp
index b740609..49d31b5 100644
--- a/SrcLib/core/fwRuntime/src/EConfigurationElement.cpp
+++ b/SrcLib/core/fwRuntime/src/EConfigurationElement.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,17 +15,19 @@ namespace fwRuntime
 {
 
 EConfigurationElement::EConfigurationElement(const std::string& name) :
-::fwRuntime::ConfigurationElement( ::boost::shared_ptr< ::fwRuntime::Bundle >() , name )
-{}
+    ::fwRuntime::ConfigurationElement( std::shared_ptr< ::fwRuntime::Bundle >(), name )
+{
+}
 
 EConfigurationElement::~EConfigurationElement()
-{}
+{
+}
 
 EConfigurationElement::sptr EConfigurationElement::addConfigurationElement( const std::string& name )
 {
-    EConfigurationElement::sptr cfg = EConfigurationElement::New(name) ;
+    EConfigurationElement::sptr cfg = EConfigurationElement::New(name);
     this->::fwRuntime::ConfigurationElement::addConfigurationElement( cfg );
-    return cfg ;
+    return cfg;
 }
 
 void EConfigurationElement::addConfigurationElement( EConfigurationElement::sptr element )
@@ -35,7 +37,7 @@ void EConfigurationElement::addConfigurationElement( EConfigurationElement::sptr
 
 void EConfigurationElement::setAttributeValue(const std::string& name, const std::string& value) throw()
 {
-    this->::fwRuntime::ConfigurationElement::setAttributeValue( name , value ) ;
+    this->::fwRuntime::ConfigurationElement::setAttributeValue( name, value );
 }
 
 void EConfigurationElement::setValue(const std::string& value) throw()
diff --git a/SrcLib/core/fwRuntime/src/EmptyPlugin.cpp b/SrcLib/core/fwRuntime/src/EmptyPlugin.cpp
index 3690a50..07c748a 100644
--- a/SrcLib/core/fwRuntime/src/EmptyPlugin.cpp
+++ b/SrcLib/core/fwRuntime/src/EmptyPlugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,11 +13,13 @@ namespace fwRuntime
 
 
 void EmptyPlugin::start() throw(::fwRuntime::RuntimeException)
-{}
+{
+}
 
 
 void EmptyPlugin::stop() throw()
-{}
+{
+}
 
 
 } // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/Executable.cpp b/SrcLib/core/fwRuntime/src/Executable.cpp
index 35d1aa1..0302834 100644
--- a/SrcLib/core/fwRuntime/src/Executable.cpp
+++ b/SrcLib/core/fwRuntime/src/Executable.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,7 +13,7 @@ namespace fwRuntime
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Bundle> Executable::getBundle() const throw()
+std::shared_ptr<Bundle> Executable::getBundle() const throw()
 {
     return m_bundle;
 }
@@ -27,7 +27,7 @@ const ConfigurationElement::sptr Executable::getInitializationData() const throw
 
 //------------------------------------------------------------------------------
 
-void Executable::setBundle( ::boost::shared_ptr< Bundle > bundle )
+void Executable::setBundle( std::shared_ptr< Bundle > bundle )
 {
     m_bundle = bundle;
 }
diff --git a/SrcLib/core/fwRuntime/src/ExecutableFactory.cpp b/SrcLib/core/fwRuntime/src/ExecutableFactory.cpp
index 5566edb..74e192c 100644
--- a/SrcLib/core/fwRuntime/src/ExecutableFactory.cpp
+++ b/SrcLib/core/fwRuntime/src/ExecutableFactory.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,13 +12,15 @@ namespace fwRuntime
 //------------------------------------------------------------------------------
 
 ExecutableFactory::ExecutableFactory( const std::string & type )
-:   m_type( type )
-{}
+    :   m_type( type )
+{
+}
 
 //------------------------------------------------------------------------------
 
 ExecutableFactory::~ExecutableFactory()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/ExecutableFactoryRegistrar.cpp b/SrcLib/core/fwRuntime/src/ExecutableFactoryRegistrar.cpp
index c5bea59..0394930 100644
--- a/SrcLib/core/fwRuntime/src/ExecutableFactoryRegistrar.cpp
+++ b/SrcLib/core/fwRuntime/src/ExecutableFactoryRegistrar.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,13 +16,13 @@ namespace fwRuntime
 
 
 
-ExecutableFactoryRegistrar::ExecutableFactoryRegistrar( ::boost::shared_ptr< ExecutableFactory > factory )
+ExecutableFactoryRegistrar::ExecutableFactoryRegistrar( std::shared_ptr< ExecutableFactory > factory )
 {
     // Pre-condition
     SLM_ASSERT("No bundle bundle currently loaded", Bundle::getLoadingBundle() != 0 );
 
     // Retrieves the bundle that is currently loading.
-    ::boost::shared_ptr< Bundle >  loadingBundle( Bundle::getLoadingBundle() );
+    std::shared_ptr< Bundle >  loadingBundle( Bundle::getLoadingBundle() );
     Runtime* runtime( Runtime::getDefault() );
 
     // Stores the factory into that bundle and the default runtime instance.
diff --git a/SrcLib/core/fwRuntime/src/Extension.cpp b/SrcLib/core/fwRuntime/src/Extension.cpp
index 4802e0f..1744da0 100644
--- a/SrcLib/core/fwRuntime/src/Extension.cpp
+++ b/SrcLib/core/fwRuntime/src/Extension.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,13 +28,14 @@ namespace fwRuntime
 
 //------------------------------------------------------------------------------
 
-Extension::Extension( ::boost::shared_ptr< Bundle > bundle, const std::string & id, const std::string & point, xmlNodePtr xmlNode )
-: BundleElement ( bundle                    ),
-  m_id          ( id                        ),
-  m_point       ( point                     ),
-  m_xmlDoc      ( xmlNewDoc(BAD_CAST "1.0") ),
-  m_xmlNode     ( xmlCopyNode(xmlNode, 1)   ),
-  m_validity    ( UnknownValidity           )
+Extension::Extension( std::shared_ptr< Bundle > bundle, const std::string & id, const std::string & point,
+                      xmlNodePtr xmlNode )
+    : BundleElement ( bundle                    ),
+      m_id          ( id                        ),
+      m_point       ( point                     ),
+      m_xmlDoc      ( xmlNewDoc(BAD_CAST "1.0") ),
+      m_xmlNode     ( xmlCopyNode(xmlNode, 1)   ),
+      m_validity    ( UnknownValidity           )
 {
     xmlDocSetRootElement(m_xmlDoc, m_xmlNode);
 }
@@ -86,7 +87,7 @@ Extension::Validity Extension::validate()
 
     // Retrieves the extension point.
     Runtime * rntm( Runtime::getDefault() );
-     ::boost::shared_ptr< ExtensionPoint >  point( rntm->findExtensionPoint(m_point) );
+    std::shared_ptr< ExtensionPoint >  point( rntm->findExtensionPoint(m_point) );
 
     // Checks that the point exists.
     if( !point )
@@ -95,8 +96,8 @@ Extension::Validity Extension::validate()
     }
 
     // Validates the extension.
-    ::boost::shared_ptr< io::Validator >   validator( point->getExtensionValidator() );
-    OSLM_ASSERT("Sorry, validator creation failed for point "<<point->getIdentifier(), validator );
+    std::shared_ptr< io::Validator >   validator( point->getExtensionValidator() );
+    OSLM_ASSERT("The validator creation failed for the point "<<point->getIdentifier(), validator );
 
     // Check extension XML Node <extension id="xxx" implements="yyy" >...</extension>
     validator->clearErrorLog();
@@ -107,10 +108,11 @@ Extension::Validity Extension::validate()
     else
     {
         m_validity = Invalid;
-        const std::string   identifier = m_id.empty() ? "anonymous" : m_id;
-        OSLM_ERROR("In bundle " << getBundle()->getIdentifier() << ". " << identifier
-                << ": invalid extension XML element node does not respect schema. Verification error log is : "
-                << std::endl << validator->getErrorLog() );
+        const std::string identifier = m_id.empty() ? "anonymous" : m_id;
+        OSLM_ERROR(
+            "In bundle " << getBundle()->getIdentifier() << ". " << identifier
+                         << ": invalid extension XML element node does not respect schema. Verification error log is : "
+                         << std::endl << validator->getErrorLog() );
     }
 
     return m_validity;
@@ -119,7 +121,8 @@ Extension::Validity Extension::validate()
 //------------------------------------------------------------------------------
 
 void Extension::operator=(const Extension&) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/ExtensionPoint.cpp b/SrcLib/core/fwRuntime/src/ExtensionPoint.cpp
index 0e002ce..859cc72 100644
--- a/SrcLib/core/fwRuntime/src/ExtensionPoint.cpp
+++ b/SrcLib/core/fwRuntime/src/ExtensionPoint.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,11 +16,13 @@ namespace fwRuntime
 
 //------------------------------------------------------------------------------
 
-ExtensionPoint::ExtensionPoint( const ::boost::shared_ptr< Bundle > bundle, const std::string & id, const ::boost::filesystem::path & schema )
-:   BundleElement   ( bundle ),
-    m_id            ( id ),
-    m_schema        ( schema )
-{}
+ExtensionPoint::ExtensionPoint( const std::shared_ptr< Bundle > bundle, const std::string & id,
+                                const ::boost::filesystem::path & schema )
+    :   BundleElement   ( bundle ),
+      m_id            ( id ),
+      m_schema        ( schema )
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -31,7 +33,7 @@ const std::string & ExtensionPoint::getIdentifier() const
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< io::Validator > ExtensionPoint::getExtensionValidator() const
+std::shared_ptr< io::Validator > ExtensionPoint::getExtensionValidator() const
 {
     if( !m_schema.empty() && !m_validator )
     {
@@ -39,7 +41,7 @@ const std::string & ExtensionPoint::getIdentifier() const
         {
             const ::boost::filesystem::path schemaPath = getBundle()->getLocation() / m_schema;
             OSLM_DEBUG( "Use this schema : " << schemaPath << " for this id : " << m_id );
-            m_validator = ::boost::shared_ptr< io::Validator >( new io::Validator(schemaPath) );
+            m_validator = std::shared_ptr< io::Validator >( new io::Validator(schemaPath) );
         }
         catch( const std::exception & e )
         {
@@ -52,7 +54,8 @@ const std::string & ExtensionPoint::getIdentifier() const
 //------------------------------------------------------------------------------
 
 void ExtensionPoint::operator=( const ExtensionPoint & ) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/IExecutable.cpp b/SrcLib/core/fwRuntime/src/IExecutable.cpp
index dda7c17..f987255 100644
--- a/SrcLib/core/fwRuntime/src/IExecutable.cpp
+++ b/SrcLib/core/fwRuntime/src/IExecutable.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,8 @@ namespace fwRuntime
 
 
 IExecutable::~IExecutable()
-{}
+{
+}
 
 
 
diff --git a/SrcLib/core/fwRuntime/src/IPlugin.cpp b/SrcLib/core/fwRuntime/src/IPlugin.cpp
index b69eecd..e00c5ac 100644
--- a/SrcLib/core/fwRuntime/src/IPlugin.cpp
+++ b/SrcLib/core/fwRuntime/src/IPlugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,8 @@ namespace fwRuntime
 
 
 IPlugin::~IPlugin()
-{}
+{
+}
 
 
 void IPlugin::initialize() throw(::fwRuntime::RuntimeException)
diff --git a/SrcLib/core/fwRuntime/src/Plugin.cpp b/SrcLib/core/fwRuntime/src/Plugin.cpp
index 4aa14a3..b599697 100644
--- a/SrcLib/core/fwRuntime/src/Plugin.cpp
+++ b/SrcLib/core/fwRuntime/src/Plugin.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,7 +12,7 @@ namespace fwRuntime
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Bundle> Plugin::getBundle() const throw()
+std::shared_ptr<Bundle> Plugin::getBundle() const throw()
 {
     return m_bundle;
 }
@@ -20,11 +20,12 @@ namespace fwRuntime
 //------------------------------------------------------------------------------
 
 void Plugin::setInitializationData(const ConfigurationElement::sptr) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void Plugin::setBundle( ::boost::shared_ptr<Bundle> bundle) throw()
+void Plugin::setBundle( std::shared_ptr<Bundle> bundle) throw()
 {
     m_bundle = bundle;
 }
diff --git a/SrcLib/core/fwRuntime/src/Runtime.cpp b/SrcLib/core/fwRuntime/src/Runtime.cpp
index b385e3b..3c1d5e3 100644
--- a/SrcLib/core/fwRuntime/src/Runtime.cpp
+++ b/SrcLib/core/fwRuntime/src/Runtime.cpp
@@ -1,17 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
-#include <cassert>
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/bind.hpp>
-#include <boost/foreach.hpp>
-
 #include "fwRuntime/Runtime.hpp"
 #include "fwRuntime/ConfigurationElement.hpp"
 #include "fwRuntime/Extension.hpp"
@@ -19,72 +11,52 @@
 #include "fwRuntime/IExecutable.hpp"
 #include "fwRuntime/ExecutableFactory.hpp"
 #include "fwRuntime/IPlugin.hpp"
-#include "fwRuntime/predicates.hpp"
 #include "fwRuntime/io/BundleDescriptorReader.hpp"
 
+#include <boost/filesystem/operations.hpp>
+
+#include <algorithm>
+#include <cassert>
+#include <functional>
 
 namespace fwRuntime
 {
 
-namespace
-{
-/**
- * @brief   Implements a STL compliant predicate that tests if a given
- *          object has a given type and is enabled.
- *
- * @remark  Intended to be used on executable factories
- */
-template< typename T >
-struct IsEnableAndHasType
-{
-    IsEnableAndHasType( const std::string & type )
-    :   m_type( type )
-    {}
-
-    bool operator() ( const ::boost::shared_ptr< T > p ) const
-    {
-        return p->getType() == m_type && p->isEnable();
-    }
-
-private:
-
-    std::string m_type;
-};
-}
-
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Runtime> Runtime::m_instance;
+std::shared_ptr<Runtime> Runtime::m_instance;
 
 //------------------------------------------------------------------------------
 
-Runtime::Runtime()
-{}
+Runtime::Runtime() :
+    m_workingPath(::boost::filesystem::current_path())
+{
+}
 
 //------------------------------------------------------------------------------
 
 Runtime::~Runtime()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
-void Runtime::addBundle( ::boost::shared_ptr< Bundle > bundle ) throw(RuntimeException)
+void Runtime::addBundle( std::shared_ptr< Bundle > bundle ) throw(RuntimeException)
 {
     m_bundles.insert( bundle );
-    std::for_each( bundle->extensionsBegin(), bundle->extensionsEnd(), ::boost::bind(&Runtime::addExtension, this, _1));
-    std::for_each( bundle->extensionPointsBegin(), bundle->extensionPointsEnd(), ::boost::bind(&Runtime::addExtensionPoint, this, _1));
-    std::for_each( bundle->executableFactoriesBegin(), bundle->executableFactoriesEnd(), ::boost::bind(&Runtime::addExecutableFactory, this, _1));
+    std::for_each( bundle->extensionsBegin(), bundle->extensionsEnd(),
+                   std::bind(&Runtime::addExtension, this, std::placeholders::_1));
+    std::for_each( bundle->extensionPointsBegin(), bundle->extensionPointsEnd(),
+                   std::bind(&Runtime::addExtensionPoint, this, std::placeholders::_1));
+    std::for_each( bundle->executableFactoriesBegin(), bundle->executableFactoriesEnd(),
+                   std::bind(&Runtime::addExecutableFactory, this, std::placeholders::_1));
 }
 
 //------------------------------------------------------------------------------
 
-void Runtime::unregisterBundle( ::boost::shared_ptr< Bundle > bundle )
+void Runtime::unregisterBundle( std::shared_ptr< Bundle > bundle )
 {
     FwCoreNotUsedMacro(bundle);
-//    std::for_each( bundle->extensionsBegin(), bundle->extensionsEnd(), ::boost::bind(&Runtime::unregisterExtension, this, _1));
-//    std::for_each( bundle->extensionPointsBegin(), bundle->extensionPointsEnd(), ::boost::bind(&Runtime::unregisterExtensionPoint, this, _1));
-//    std::for_each( bundle->executableFactoriesBegin(), bundle->executableFactoriesEnd(), ::boost::bind(&Runtime::unregisterExecutableFactory, this, _1));
-//    m_bundles.erase( bundle );
 }
 
 //------------------------------------------------------------------------------
@@ -95,7 +67,7 @@ void Runtime::addBundles( const ::boost::filesystem::path & repository ) throw(R
     {
         using ::fwRuntime::io::BundleDescriptorReader;
         const BundleDescriptorReader::BundleContainer bundles = BundleDescriptorReader::createBundles( repository );
-        std::for_each( bundles.begin(), bundles.end(), ::boost::bind(&Runtime::addBundle, this, _1) );
+        std::for_each( bundles.begin(), bundles.end(), std::bind(&Runtime::addBundle, this, std::placeholders::_1) );
     }
     catch(const std::exception& exception)
     {
@@ -119,10 +91,10 @@ Runtime::BundleIterator Runtime::bundlesEnd()
 
 //------------------------------------------------------------------------------
 
-void Runtime::addExecutableFactory( ::boost::shared_ptr< ExecutableFactory > factory ) throw(RuntimeException)
+void Runtime::addExecutableFactory( std::shared_ptr< ExecutableFactory > factory ) throw(RuntimeException)
 {
     // Ensures no registered factory has the same identifier.
-    const std::string   type( factory->getType() );
+    const std::string type( factory->getType() );
     if( this->findExecutableFactory(type) != 0 )
     {
         throw RuntimeException(type + ": type already used by an executable factory.");
@@ -133,27 +105,34 @@ void Runtime::addExecutableFactory( ::boost::shared_ptr< ExecutableFactory > fac
 
 //------------------------------------------------------------------------------
 
-void Runtime::unregisterExecutableFactory( ::boost::shared_ptr< ExecutableFactory > factory )
+void Runtime::unregisterExecutableFactory( std::shared_ptr< ExecutableFactory > factory )
 {
     // Ensures no registered factory has the same identifier.
     const std::string type( factory->getType() );
-    OSLM_WARN_IF("ExecutableFactory Type " << type << " not found.", this->findExecutableFactory(type) == 0 );
+    SLM_WARN_IF("ExecutableFactory Type " + type + " not found.", this->findExecutableFactory(type) == 0 );
     // Removes the executable factory.
     m_executableFactories.erase(factory);
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ExecutableFactory > Runtime::findExecutableFactory( const std::string & type ) const
+std::shared_ptr< ExecutableFactory > Runtime::findExecutableFactory( const std::string & type ) const
 {
-    ExecutableFactoryContainer::const_iterator  found;
-    found = std::find_if( m_executableFactories.begin(), m_executableFactories.end(), IsEnableAndHasType<ExecutableFactory>(type) );
-    return ( found == m_executableFactories.end() ) ? ::boost::shared_ptr< ExecutableFactory >() : *found;
+    std::shared_ptr< ExecutableFactory > resFactory;
+    for(const ExecutableFactoryContainer::value_type& factory : m_executableFactories)
+    {
+        if(factory->getType() == type && factory->isEnable())
+        {
+            resFactory = factory;
+            break;
+        }
+    }
+    return resFactory;
 }
 
 //------------------------------------------------------------------------------
 
-void Runtime::addExtension( ::boost::shared_ptr<Extension> extension) throw(RuntimeException)
+void Runtime::addExtension( std::shared_ptr<Extension> extension) throw(RuntimeException)
 {
     // Asserts no registered extension has the same identifier.
     const std::string identifier(extension->getIdentifier());
@@ -167,12 +146,12 @@ void Runtime::addExtension( ::boost::shared_ptr<Extension> extension) throw(Runt
 
 //------------------------------------------------------------------------------
 
-void Runtime::unregisterExtension( ::boost::shared_ptr<Extension> extension)
+void Runtime::unregisterExtension( std::shared_ptr<Extension> extension)
 {
     // Asserts no registered extension has the same identifier.
     const std::string identifier(extension->getIdentifier());
-    OSLM_WARN_IF("Extension " << identifier << " not found.",
-            !identifier.empty() && this->findExtension(identifier) == 0 );
+    SLM_WARN_IF("Extension " + identifier + " not found.",
+                !identifier.empty() && this->findExtension(identifier) == 0 );
     // Removes the extension.
     m_extensions.erase( extension );
 }
@@ -193,7 +172,7 @@ Runtime::ExtensionIterator Runtime::extensionsEnd()
 
 //------------------------------------------------------------------------------
 
-void Runtime::addExtensionPoint( ::boost::shared_ptr<ExtensionPoint> point) throw(RuntimeException)
+void Runtime::addExtensionPoint( std::shared_ptr<ExtensionPoint> point) throw(RuntimeException)
 {
     // Asserts no registered extension point has the same identifier.
     const std::string identifier(point->getIdentifier());
@@ -207,22 +186,22 @@ void Runtime::addExtensionPoint( ::boost::shared_ptr<ExtensionPoint> point) thro
 
 //------------------------------------------------------------------------------
 
-void Runtime::unregisterExtensionPoint( ::boost::shared_ptr<ExtensionPoint> point)
+void Runtime::unregisterExtensionPoint( std::shared_ptr<ExtensionPoint> point)
 {
     // Asserts no registered extension point has the same identifier.
     const std::string identifier(point->getIdentifier());
-    OSLM_WARN_IF("ExtensionPoint " << identifier << " not found.",
-            this->findExtensionPoint(identifier) == 0);
+    SLM_WARN_IF("ExtensionPoint " + identifier + " not found.",
+                this->findExtensionPoint(identifier) == 0);
     // Removes the extension.
     m_extensionPoints.erase(point);
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< Bundle > Runtime::findBundle( const std::string & identifier, const Version & version ) const
+std::shared_ptr< Bundle > Runtime::findBundle( const std::string & identifier, const Version & version ) const
 {
-    ::boost::shared_ptr<Bundle> resBundle;
-    BOOST_FOREACH(SPTR(Bundle) bundle, m_bundles)
+    std::shared_ptr<Bundle> resBundle;
+    for(const std::shared_ptr<Bundle>& bundle :  m_bundles)
     {
         if(bundle->getIdentifier() == identifier && bundle->getVersion() == version)
         {
@@ -239,34 +218,48 @@ Runtime * Runtime::getDefault()
 {
     if(m_instance.get() == 0)
     {
-        m_instance = ::boost::shared_ptr<Runtime>(new Runtime());
+        m_instance = std::shared_ptr<Runtime>(new Runtime());
     }
     return m_instance.get();
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Extension> Runtime::findExtension( const std::string & identifier ) const
+std::shared_ptr<Extension> Runtime::findExtension( const std::string & identifier ) const
 {
-    ExtensionContainer::const_iterator  found;
-    found = std::find_if( m_extensions.begin(), m_extensions.end(), IsEnableAndHasIdentifier<Extension>(identifier) );
-    return (found != m_extensions.end()) ? (*found) : ::boost::shared_ptr<Extension>();
+    std::shared_ptr<Extension> resExtension;
+    for(const ExtensionContainer::value_type& extension :  m_extensions)
+    {
+        if(extension->getIdentifier() == identifier && extension->isEnable())
+        {
+            resExtension = extension;
+            break;
+        }
+    }
+    return resExtension;
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<ExtensionPoint> Runtime::findExtensionPoint( const std::string & identifier ) const
+std::shared_ptr<ExtensionPoint> Runtime::findExtensionPoint( const std::string & identifier ) const
 {
-    ExtensionPointContainer::const_iterator found;
-    found = std::find_if( m_extensionPoints.begin(), m_extensionPoints.end(), IsEnableAndHasIdentifier<ExtensionPoint>(identifier) );
-    return (found != m_extensionPoints.end()) ? (*found) : ::boost::shared_ptr<ExtensionPoint>();
+    std::shared_ptr<ExtensionPoint> resExtensionPoint;
+    for(const ExtensionPointContainer::value_type& extensionPoint :  m_extensionPoints)
+    {
+        if(extensionPoint->getIdentifier() == identifier && extensionPoint->isEnable())
+        {
+            resExtensionPoint = extensionPoint;
+            break;
+        }
+    }
+    return resExtensionPoint;
 }
 
 //------------------------------------------------------------------------------
 
 IExecutable * Runtime::createExecutableInstance( const std::string & type ) throw( RuntimeException )
 {
-    ::boost::shared_ptr< ExecutableFactory > factory;
+    std::shared_ptr< ExecutableFactory > factory;
 
     // Retrieves the executable factory.
     factory = this->findExecutableFactory( type );
@@ -285,9 +278,11 @@ IExecutable * Runtime::createExecutableInstance( const std::string & type ) thro
 
 //------------------------------------------------------------------------------
 
-IExecutable * Runtime::createExecutableInstance( const std::string & type, ConfigurationElement::sptr configurationElement ) throw( RuntimeException )
+IExecutable * Runtime::createExecutableInstance( const std::string & type,
+                                                 ConfigurationElement::sptr configurationElement ) throw(
+    RuntimeException )
 {
-    ::boost::shared_ptr< ExecutableFactory > factory;
+    std::shared_ptr< ExecutableFactory > factory;
 
     // Retrieves the executable factory.
     factory = this->findExecutableFactory( type );
@@ -329,4 +324,18 @@ IExecutable * Runtime::createExecutableInstance( const std::string & type, Confi
 
 //------------------------------------------------------------------------------
 
+void Runtime::setWorkingPath(const ::boost::filesystem::path &workingPath)
+{
+    m_workingPath = workingPath;
+}
+
+//------------------------------------------------------------------------------
+
+::boost::filesystem::path Runtime::getWorkingPath() const
+{
+    return m_workingPath;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/RuntimeException.cpp b/SrcLib/core/fwRuntime/src/RuntimeException.cpp
index a588cc1..60034c7 100644
--- a/SrcLib/core/fwRuntime/src/RuntimeException.cpp
+++ b/SrcLib/core/fwRuntime/src/RuntimeException.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,20 +14,21 @@ namespace fwRuntime
 
 
 RuntimeException::RuntimeException(const RuntimeException& exception) throw()
-: ::fwCore::Exception(std::string(exception.what()))
+    : ::fwCore::Exception(std::string(exception.what()))
 {
     SLM_WARN( this->what() );
 }
 
 
 RuntimeException::RuntimeException(const std::string& message) throw()
-: ::fwCore::Exception(message)
+    : ::fwCore::Exception(message)
 {
     SLM_WARN( this->what() );
 }
 
 
 RuntimeException::~RuntimeException() throw()
-{}
+{
+}
 
 } // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/Version.cpp b/SrcLib/core/fwRuntime/src/Version.cpp
index c54bbc3..7a2a336 100644
--- a/SrcLib/core/fwRuntime/src/Version.cpp
+++ b/SrcLib/core/fwRuntime/src/Version.cpp
@@ -1,19 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#if defined(__GNUC__)
-#pragma GCC visibility push(default)
-#endif
-#include <limits.h>
 #include <boost/lexical_cast.hpp>
 #include <boost/regex.hpp>
 #include <sstream>
-#if defined(__GNUC__)
-#pragma GCC visibility pop
-#endif
 
 #include "fwRuntime/RuntimeException.hpp"
 #include "fwRuntime/Version.hpp"
@@ -22,27 +15,26 @@
 namespace fwRuntime
 {
 
+Version::Version() : m_major(-1),
+                     m_minor(-1),
+                     m_defined(false)
+{
+}
 
+//------------------------------------------------------------------------------
 
-Version::Version()
-: m_major(-1), m_minor(-1), m_build(-1), m_defined(false)
-{}
-
-
-
-Version::Version(const std::string & version)
-: m_major(-1), m_minor(-1), m_build(-1), m_defined(false)
+Version::Version(const std::string & version) : m_major(-1),
+                                                m_minor(-1),
+                                                m_defined(false)
 {
     if( version.empty() == false )
     {
-        boost::regex    regex ("(\\d+)[-.](\\d+)(svn(\\d+)){0,1}");
-        boost::smatch   what;
-
-        if( boost::regex_match(version, what, regex) )
+        ::boost::regex regex ("(\\d+)[-.](\\d+){0,1}");
+        ::boost::smatch what;
+        if( ::boost::regex_match(version, what, regex) )
         {
-            m_major = boost::lexical_cast<int>( what[1].str() );
-            m_minor = boost::lexical_cast<int>( what[2].str() );
-            m_build = (what.size() == 4) ? boost::lexical_cast<int>( what[3].str() ) : 0;
+            m_major   = ::boost::lexical_cast<int>( what[1].str() );
+            m_minor   = ::boost::lexical_cast<int>( what[2].str() );
             m_defined = true;
         }
         else
@@ -52,22 +44,25 @@ Version::Version(const std::string & version)
     }
 }
 
+//------------------------------------------------------------------------------
 
+Version::Version(const int major, const int minor) :
+    m_major(major),
+    m_minor(minor),
+    m_defined(true)
+{
+}
 
-Version::Version(const int major, const int minor, const int build)
-: m_major(major), m_minor(minor), m_build(build), m_defined(true)
-{}
-
-
+//------------------------------------------------------------------------------
 
 const std::string Version::string() const
 {
-    std::ostringstream  os;
+    std::ostringstream os;
     os << *this;
     return os.str();
 }
 
-
+//------------------------------------------------------------------------------
 
 bool Version::operator==(const Version & version) const
 {
@@ -81,18 +76,19 @@ bool Version::operator==(const Version & version) const
     }
 }
 
-
+//------------------------------------------------------------------------------
 
 std::ostream & operator<<(std::ostream & os, const Version & version)
 {
     if(version.m_defined)
     {
-        return os << version.m_major << "-" << version.m_minor << "svn" << version.m_build;
+        return os << version.m_major << "-" << version.m_minor;
     }
     else
+    {
         return os << "version-not-defined";
+    }
 }
 
 
-
 } // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/dl/Darwin.cpp b/SrcLib/core/fwRuntime/src/dl/Darwin.cpp
deleted file mode 100644
index 59cf97f..0000000
--- a/SrcLib/core/fwRuntime/src/dl/Darwin.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifdef __MACOSX__
-
-#include "fwRuntime/Bundle.hpp"
-#include "fwRuntime/dl/Darwin.hpp"
-#include "fwRuntime/dl/DarwinNameDecorator.hpp"
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-Darwin::Darwin( const boost::filesystem::path & modulePath ) throw()
-: Native                ( modulePath, ::boost::shared_ptr< INameDecorator >(new DarwinNameDecorator()) ),
-  m_handle      ( 0 )
-{}
-
-//------------------------------------------------------------------------------
-
-Darwin::~Darwin() throw()
-{}
-
-//------------------------------------------------------------------------------
-
-bool Darwin::isLoaded() const throw()
-{
-    return m_handle != 0;
-}
-
-//------------------------------------------------------------------------------
-
-const std::string Darwin::getNativeFilePrefix() const throw()
-{
-    return std::string("lib");
-}
-
-//------------------------------------------------------------------------------
-
-const std::string Darwin::getNativeFileSuffix() const throw()
-{
-    return std::string(".dylib");
-}
-
-//------------------------------------------------------------------------------
-
-void* Darwin::getSymbol(const std::string& name) const throw(RuntimeException)
-{
-    void* result = 0;
-    if(isLoaded() == true)
-    {
-        dlerror(); // Clear existing error
-        result = dlsym(m_handle, name.c_str());
-        if(result == 0) // Check for possible errors
-        {
-            std::string message(dlerror());
-            if(message.empty() == false)
-            {
-                throw RuntimeException("Symbol retrieval failed. " + message);
-            }
-        }
-    }
-    return result;
-}
-
-//------------------------------------------------------------------------------
-
-void Darwin::load() throw(RuntimeException)
-{
-    if(m_handle == 0)
-    {
-        // Opens the dynamic library.
-#if BOOST_FILESYSTEM_VERSION > 2
-        m_handle = dlopen(getFullPath(true).string().c_str(), RTLD_LAZY|RTLD_GLOBAL);
-#else
-        m_handle = dlopen(getFullPath(true).native_file_string().c_str(), RTLD_LAZY|RTLD_GLOBAL);
-#endif
-        if(m_handle == 0)
-        {
-            std::string message(dlerror());
-            throw RuntimeException("Module load failed. " + message);
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void Darwin::unload() throw(RuntimeException)
-{
-    if(m_handle != 0)
-    {
-        int result;
-        result = dlclose(m_handle);
-        if(result != 0)
-        {
-            std::string message(dlerror());
-            throw RuntimeException("Module unload failed. " + message);
-        }
-        m_handle = 0;
-    }
-}
-
-
-} // namespace dl
-
-} // namespace fwRuntime
-
-
-#endif // #ifdef __MACOSX__
-
diff --git a/SrcLib/core/fwRuntime/src/dl/DarwinNameDecoration.cpp b/SrcLib/core/fwRuntime/src/dl/DarwinNameDecoration.cpp
deleted file mode 100644
index 86d43c5..0000000
--- a/SrcLib/core/fwRuntime/src/dl/DarwinNameDecoration.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwRuntime/dl/DarwinNameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-
-const std::string DarwinNameDecorator::getNativePrefix() const throw()
-{
-    return std::string("lib");
-}
-
-
-
-const std::string DarwinNameDecorator::getNativeExtension() const throw()
-{
-    return std::string("dylib");
-}
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/dl/INameDecorator.cpp b/SrcLib/core/fwRuntime/src/dl/INameDecorator.cpp
deleted file mode 100644
index fa35f8e..0000000
--- a/SrcLib/core/fwRuntime/src/dl/INameDecorator.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwRuntime/dl/INameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-
-INameDecorator::~INameDecorator()
-{}
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/dl/NameDecorator.cpp b/SrcLib/core/fwRuntime/src/dl/NameDecorator.cpp
deleted file mode 100644
index d37387f..0000000
--- a/SrcLib/core/fwRuntime/src/dl/NameDecorator.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwRuntime/dl/NameDecorator.hpp"
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-//------------------------------------------------------------------------------
-
-const std::string NameDecorator::getNativeName( const std::string & abstractName ) const throw()
-{
-    return getNativePrefix() + abstractName + ".*?" + getNativeSuffix() + "." + getNativeExtension();
-}
-
-//------------------------------------------------------------------------------
-
-const std::string NameDecorator::getNativePrefix() const throw()
-{
-    return std::string();
-}
-
-//------------------------------------------------------------------------------
-
-const std::string NameDecorator::getNativeSuffix() const throw()
-{
-#ifdef DEBUG
-    return std::string( "D" );
-#else
-    return std::string( "[^D]" );
-#endif
-}
-
-//------------------------------------------------------------------------------
-
-const std::string NameDecorator::getNativeExtension() const throw()
-{
-    return std::string();
-}
-//------------------------------------------------------------------------------
-
-
-} // namespace dl
-
-} // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/dl/Native.cpp b/SrcLib/core/fwRuntime/src/dl/Native.cpp
index 6133be8..a51e6f0 100644
--- a/SrcLib/core/fwRuntime/src/dl/Native.cpp
+++ b/SrcLib/core/fwRuntime/src/dl/Native.cpp
@@ -1,21 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <cassert>
-#include <string>
-#include <limits.h>
-#include <boost/filesystem/operations.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/regex.hpp>
-
 #include "fwRuntime/Bundle.hpp"
-#include "fwRuntime/dl/INameDecorator.hpp"
 #include "fwRuntime/dl/Native.hpp"
+#include "fwRuntime/Runtime.hpp"
 
-
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <limits.h>
+#include <string>
 
 namespace fwRuntime
 {
@@ -25,16 +21,28 @@ namespace dl
 
 //------------------------------------------------------------------------------
 
-Native::Native( const ::boost::filesystem::path & modulePath, const ::boost::shared_ptr< INameDecorator > nameDecorator ) throw()
-:   m_modulePath        ( modulePath ),
-    m_nameDecorator ( nameDecorator ),
-    m_bundle            ( 0 )
-{}
+Native::Native( const ::boost::filesystem::path & modulePath ) throw() :
+    m_modulePath( modulePath ),
+    m_bundle( 0 )
+{
+}
 
 //------------------------------------------------------------------------------
 
 Native::~Native() throw()
-{}
+{
+}
+
+//------------------------------------------------------------------------------
+
+const ::boost::filesystem::path Native::getBundleLocation() const
+{
+#ifdef ANDROID
+    return ::fwRuntime::Runtime::getDefault()->getWorkingPath() / "lib";
+#else
+    return m_bundle->getLocation();
+#endif
+}
 
 //------------------------------------------------------------------------------
 
@@ -43,56 +51,59 @@ const ::boost::filesystem::path Native::getFullPath( const bool _bMustBeFile ) c
     // Pre-condition
     SLM_ASSERT("bundle not initialized", m_bundle != 0 );
 
-    ::boost::filesystem::path result = m_bundle->getLocation() / getPath();
+    ::boost::filesystem::path result;
 
-    //replace usr/share by usr/lib to find .so
-    std::string tmp_result = result.string();
-    tmp_result.replace(tmp_result.find("/usr/share"),tmp_result.find("/usr/share")+10,"/usr/lib");
-    result = tmp_result;
+    result = this->getBundleLocation() / this->getPath();
 
     // Test that the result path exists.
     if(result.empty())
     {
         throw RuntimeException("Unable to find a native library for the bundle.");
     }
-    if( ! ::boost::filesystem::exists(result) )
+    if( !::boost::filesystem::exists(result) )
     {
-#if BOOST_FILESYSTEM_VERSION > 2
         throw RuntimeException("'" + result.string() + "': invalid native module file name.");
-#else
-        throw RuntimeException("'" + result.native_file_string() + "': invalid native module file name.");
-#endif
     }
     if(_bMustBeFile && ::boost::filesystem::is_directory(result) )
     {
-#if BOOST_FILESYSTEM_VERSION > 2
-        throw RuntimeException("'" + result.string() + "': is a file. Perhaps dynamic librairie is missing.");
-#else
-        throw RuntimeException("'" + result.native_file_string() + "': is a file. Perhaps dynamic librairie is missing.");
-#endif
+        throw RuntimeException("'" + result.string() + "': is a directory. Perhaps dynamic library is missing.");
     }
     return result;
 }
 
 //------------------------------------------------------------------------------
 
+const ::boost::regex Native::getNativeName() const
+{
+    const ::boost::filesystem::path fullModulePath( this->getBundleLocation() / m_modulePath );
+    ::boost::regex nativeName;
+
+#if defined(linux) || defined(__linux)
+    nativeName = ::boost::regex(
+        "lib" + fullModulePath.filename().string() + "_" + m_bundle->getVersion().string()  + "\\.so" +
+        "[0-9\\.]*" );
+#elif defined(WIN32)
+    nativeName = ::boost::regex(fullModulePath.filename().string() + "_" + m_bundle->getVersion().string() + "\\.dll");
+#elif defined (__MACOSX__)
+    nativeName = ::boost::regex(
+        "lib" + fullModulePath.filename().string() + "_" + m_bundle->getVersion().string() + "[0-9\\.]*" +
+        "\\.dylib" );
+#endif
+
+    return nativeName;
+}
+
+//------------------------------------------------------------------------------
+
 const ::boost::filesystem::path Native::getPath() const throw(RuntimeException)
 {
     // Pre-condition
     SLM_ASSERT("bundle not initialized", m_bundle != 0 );
 
     ::boost::filesystem::path result;
-    
-    std::string sFullModulePath = (m_bundle->getLocation() / m_modulePath).string();
-    //replace usr/share by usr/lib to find .so
-    sFullModulePath.replace(sFullModulePath.find("/usr/share"),sFullModulePath.find("/usr/share")+10,"/usr/lib");
-
-    const ::boost::filesystem::path fullModulePath( sFullModulePath );
-#if BOOST_FILESYSTEM_VERSION > 2
-    const ::boost::regex nativeFileRegex( m_nameDecorator->getNativeName(fullModulePath.filename().string()) );
-#else
-    const ::boost::regex nativeFileRegex( m_nameDecorator->getNativeName(fullModulePath.leaf()) );
-#endif // BOOST_FILESYSTEM_VERSION > 2
+
+    const ::boost::filesystem::path fullModulePath( this->getBundleLocation() / m_modulePath );
+    const ::boost::regex nativeFileRegex( this->getNativeName() );
 
     // Walk through the module directory, seeking for a matching file.
     ::boost::filesystem::directory_iterator curDirEntry(fullModulePath.parent_path());
@@ -100,19 +111,11 @@ const ::boost::filesystem::path Native::getPath() const throw(RuntimeException)
     for(; curDirEntry != endDirEntry; ++curDirEntry)
     {
         ::boost::filesystem::path curEntryPath( *curDirEntry );
-#if BOOST_FILESYSTEM_VERSION > 2
         if( ::boost::regex_match( curEntryPath.filename().string(), nativeFileRegex ) )
         {
-            result =  m_modulePath.parent_path() / curEntryPath.filename();
-            break;
-        }
-#else
-        if( ::boost::regex_match( curEntryPath.leaf(), nativeFileRegex ) )
-        {
-            result =  m_modulePath.parent_path() / curEntryPath.leaf();
+            result = m_modulePath.parent_path() / curEntryPath.filename();
             break;
         }
-#endif // BOOST_FILESYSTEM_VERSION > 2
     }
 
     return result;
@@ -132,7 +135,8 @@ void Native::setBundle( const Bundle * bundle ) throw()
 //------------------------------------------------------------------------------
 
 void Native::operator=(const Native&) throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/dl/Posix.cpp b/SrcLib/core/fwRuntime/src/dl/Posix.cpp
index 48c0cb4..9626c38 100644
--- a/SrcLib/core/fwRuntime/src/dl/Posix.cpp
+++ b/SrcLib/core/fwRuntime/src/dl/Posix.cpp
@@ -1,16 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifdef linux
-
+#if defined(linux) || defined(__linux) || defined (__MACOSX__)
 
 #include "fwRuntime/Bundle.hpp"
 #include "fwRuntime/dl/Posix.hpp"
-#include "fwRuntime/dl/PosixNameDecorator.hpp"
-
 
 namespace fwRuntime
 {
@@ -18,22 +15,28 @@ namespace fwRuntime
 namespace dl
 {
 
+//------------------------------------------------------------------------------
 
-Posix::Posix( const boost::filesystem::path & modulePath ) throw()
-: Native        ( modulePath, ::boost::shared_ptr< INameDecorator >(new PosixNameDecorator()) ),
-  m_handle  ( 0 )
-{}
+Posix::Posix( const boost::filesystem::path & modulePath ) throw() :
+    Native(modulePath),
+    m_handle  ( 0 )
+{
+}
 
+//------------------------------------------------------------------------------
 
 Posix::~Posix() throw()
-{}
+{
+}
 
+//------------------------------------------------------------------------------
 
 bool Posix::isLoaded() const throw()
 {
     return m_handle != 0;
 }
 
+//------------------------------------------------------------------------------
 
 void * Posix::getSymbol( const std::string & name ) const throw(RuntimeException)
 {
@@ -54,17 +57,14 @@ void * Posix::getSymbol( const std::string & name ) const throw(RuntimeException
     return result;
 }
 
+//------------------------------------------------------------------------------
 
 void Posix::load() throw(RuntimeException)
 {
     if(m_handle == 0)
     {
         // Opens the dynamic library.
-#if BOOST_FILESYSTEM_VERSION > 2
         m_handle = dlopen(getFullPath(true).string().c_str(), RTLD_LAZY|RTLD_GLOBAL);
-#else
-        m_handle = dlopen(getFullPath(true).native_file_string().c_str(), RTLD_LAZY|RTLD_GLOBAL);
-#endif
         if(m_handle == 0)
         {
             std::string message(dlerror());
@@ -73,6 +73,7 @@ void Posix::load() throw(RuntimeException)
     }
 }
 
+//------------------------------------------------------------------------------
 
 void Posix::unload() throw(RuntimeException)
 {
@@ -89,10 +90,11 @@ void Posix::unload() throw(RuntimeException)
     }
 }
 
+//------------------------------------------------------------------------------
 
 } // namespace dl
 
 } // namespace fwRuntime
 
 
-#endif // #ifdef linux
+#endif // #if defined(linux) || defined(__linux) || defined (__MACOSX__)
diff --git a/SrcLib/core/fwRuntime/src/dl/PosixNameDecorator.cpp b/SrcLib/core/fwRuntime/src/dl/PosixNameDecorator.cpp
deleted file mode 100644
index 7eea6a4..0000000
--- a/SrcLib/core/fwRuntime/src/dl/PosixNameDecorator.cpp
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwRuntime/dl/PosixNameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-
-const std::string PosixNameDecorator::getNativePrefix() const throw()
-{
-    return std::string("lib");
-}
-
-
-
-const std::string PosixNameDecorator::getNativeExtension() const throw()
-{
-    return std::string("so");
-}
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/dl/Win32.cpp b/SrcLib/core/fwRuntime/src/dl/Win32.cpp
index e4aa0fa..6ec5c28 100644
--- a/SrcLib/core/fwRuntime/src/dl/Win32.cpp
+++ b/SrcLib/core/fwRuntime/src/dl/Win32.cpp
@@ -1,17 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #ifdef _WIN32
 
-#include <fwCore/base.hpp>
-
 #include "fwRuntime/dl/Win32.hpp"
-#include "fwRuntime/dl/Win32NameDecorator.hpp"
-
 
+#include <fwCore/base.hpp>
 
 namespace fwRuntime
 {
@@ -21,10 +18,11 @@ namespace dl
 
 //------------------------------------------------------------------------------
 
-Win32::Win32( const boost::filesystem::path & modulePath ) throw()
-: Native        ( modulePath, ::boost::shared_ptr< INameDecorator >(new Win32NameDecorator()) ),
-  m_handle  ( 0 )
-{}
+Win32::Win32( const boost::filesystem::path & modulePath ) throw() :
+    Native(modulePath),
+    m_handle  ( 0 )
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -54,18 +52,14 @@ void Win32::load() throw(RuntimeException)
     if(m_handle == 0)
     {
         // Opens the dynamic library.
-#if BOOST_FILESYSTEM_VERSION > 2
         std::string lib(getFullPath(true).string());
-#else
-        std::string lib(getFullPath(true).native_file_string());
-#endif
         OSLM_TRACE("Opens the dynamic library " << lib);
         m_handle = LoadLibrary( lib.c_str() );
         if(m_handle == 0)
         {
             // Retrieves the last error message.
-            DWORD   lastError = GetLastError();
-            char    buffer[1024];
+            DWORD lastError = GetLastError();
+            char buffer[1024];
             FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM, 0, lastError, 0, buffer, 1024, 0 );
 
             // Builds the error message and throws the exception.
diff --git a/SrcLib/core/fwRuntime/src/dl/Win32NameDecorator.cpp b/SrcLib/core/fwRuntime/src/dl/Win32NameDecorator.cpp
deleted file mode 100644
index 56c2390..0000000
--- a/SrcLib/core/fwRuntime/src/dl/Win32NameDecorator.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwRuntime/dl/Win32NameDecorator.hpp"
-
-
-
-namespace fwRuntime
-{
-
-namespace dl
-{
-
-
-
-const std::string Win32NameDecorator::getNativeExtension() const throw()
-{
-    return std::string("dll");
-}
-
-
-
-} // namespace dl
-
-} // namespace fwRuntime
diff --git a/SrcLib/core/fwRuntime/src/helper.cpp b/SrcLib/core/fwRuntime/src/helper.cpp
index 2842ac9..d2da27e 100644
--- a/SrcLib/core/fwRuntime/src/helper.cpp
+++ b/SrcLib/core/fwRuntime/src/helper.cpp
@@ -1,48 +1,48 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <boost/foreach.hpp>
+#include "fwRuntime/Convert.hpp"
+#include "fwRuntime/helper.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "fwRuntime/helper.hpp"
-#include "fwRuntime/Convert.hpp"
+#include <iostream>
 
 namespace fwRuntime
 {
 
 //------------------------------------------------------------------------------
 
-std::pair< bool , std::string > validateConfigurationElement( ::boost::shared_ptr< ::fwRuntime::io::Validator > _validator , ::fwRuntime::ConfigurationElement::sptr _element )
+std::pair< bool, std::string > validateConfigurationElement( std::shared_ptr< ::fwRuntime::io::Validator > _validator,
+                                                             ::fwRuntime::ConfigurationElement::sptr _element )
 {
     SLM_ASSERT("_validator not instanced", _validator);
     SLM_ASSERT("_element not instanced", _element);
 
     xmlNodePtr _elementNodePtr = xmlNewNode( NULL,  xmlCharStrdup( _element->getName().c_str() ) );
-    ::fwRuntime::ConfigurationElement2XML( _element , _elementNodePtr ) ;
-    xmlDocPtr xmlDoc    = xmlNewDoc(BAD_CAST "1.0") ;
-    xmlNodePtr xmlNode  = xmlCopyNode(_elementNodePtr, 1) ;
+    ::fwRuntime::ConfigurationElement2XML( _element, _elementNodePtr );
+    xmlDocPtr xmlDoc   = xmlNewDoc(BAD_CAST "1.0");
+    xmlNodePtr xmlNode = xmlCopyNode(_elementNodePtr, 1);
     xmlDocSetRootElement(xmlDoc, xmlNode);
 
     _validator->clearErrorLog();
 
-    std::pair< bool , std::string > validationResult;
+    std::pair< bool, std::string > validationResult;
     if( !(_validator->validate( xmlNode ) == true) )
     {
-        validationResult.first  = false ;
-        validationResult.second = _validator->getErrorLog() ;
+        validationResult.first  = false;
+        validationResult.second = _validator->getErrorLog();
     }
     else
     {
-        validationResult.first  = true ;
+        validationResult.first = true;
     }
 
     xmlFreeDoc( xmlDoc );
-    return validationResult ;
+    return validationResult;
 }
 
 //------------------------------------------------------------------------------
@@ -50,17 +50,19 @@ std::pair< bool , std::string > validateConfigurationElement( ::boost::shared_pt
 void ConfigurationElement2XML(::fwRuntime::ConfigurationElement::sptr _cfgElement, xmlNodePtr pNode)
 {
     //ATTRIBUTES + VALUES
-    std::map<std::string, std::string> attr = _cfgElement->getAttributes() ;
-    for ( std::map<std::string, std::string>::iterator iter_attr_cfe = attr.begin() ; iter_attr_cfe!= attr.end(); ++iter_attr_cfe)
+    std::map<std::string, std::string> attr = _cfgElement->getAttributes();
+    for ( std::map<std::string, std::string>::iterator iter_attr_cfe = attr.begin(); iter_attr_cfe!= attr.end();
+          ++iter_attr_cfe)
     {
-        xmlSetProp(pNode , xmlCharStrdup((iter_attr_cfe->first).c_str()), xmlCharStrdup((iter_attr_cfe->second).c_str()) ) ;
+        xmlSetProp(pNode, xmlCharStrdup((iter_attr_cfe->first).c_str()),
+                   xmlCharStrdup((iter_attr_cfe->second).c_str()) );
     }
     //ELEMENTS
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr elt, _cfgElement->getElements())
+    for(::fwRuntime::ConfigurationElement::sptr elt :  _cfgElement->getElements())
     {
         xmlNodePtr child = xmlNewNode( NULL,  xmlCharStrdup( elt->getName().c_str() ) );
 
-        xmlAddChild(pNode, child) ;
+        xmlAddChild(pNode, child);
         // If configuration element is a XML_TEXT_NODE : WARNING : even whitespace (non XML_TEXT_NODE) have been considered as valid XML_TEXT_NODE by BundleDescriptorReader!!!!
         if( !elt->getValue().empty() )
         {
@@ -76,38 +78,40 @@ void ConfigurationElement2XML(::fwRuntime::ConfigurationElement::sptr _cfgElemen
 
 //------------------------------------------------------------------------------
 
-ConfigurationElement::sptr getCfgAsAnExtension( ConfigurationElement::sptr config , std::string extension_pt )
+ConfigurationElement::sptr getCfgAsAnExtension( ConfigurationElement::sptr config, std::string extension_pt )
 {
     ConfigurationElement::sptr resultConfig;
     if( config->hasAttribute("config") )
     {
-        std::string cfgContribution = config->getExistingAttributeValue("config") ;
-        std::vector< ConfigurationElement::sptr > cfgs = ::fwRuntime::getAllCfgForPoint( extension_pt  ) ;
+        std::string cfgContribution                    = config->getExistingAttributeValue("config");
+        std::vector< ConfigurationElement::sptr > cfgs = ::fwRuntime::getAllCfgForPoint( extension_pt  );
         OSLM_FATAL_IF( "No configuration contribution found for extension point " <<  extension_pt, cfgs.empty());
 
         // Search for all matching contributions
-        std::vector< ConfigurationElement::sptr > matchingCfg ;
-        BOOST_FOREACH(ConfigurationElement::sptr elt, cfgs)
+        std::vector< ConfigurationElement::sptr > matchingCfg;
+        for(ConfigurationElement::sptr elt :  cfgs)
         {
             if( cfgContribution == elt->getExistingAttributeValue("id") )
             {
-                matchingCfg.push_back( elt ) ;
+                matchingCfg.push_back( elt );
             }
         }
 
         // If no contribution found
         OSLM_FATAL_IF( "No contribution matching the requested requirement (" << cfgContribution
-                << " for extension point " << extension_pt << " )", matchingCfg.empty());
+                                                                              << " for extension point " << extension_pt << " )",
+                       matchingCfg.empty());
 
         // Normal case : only one matching contribution has been found: matchingCfg.size == 1
-        resultConfig =  *matchingCfg.begin();
+        resultConfig = *matchingCfg.begin();
 
         // If several matching contributions
         OSLM_WARN_IF("Several contribution identified by " << cfgContribution << "( for cfg extension point " << extension_pt << " )"
-                << " has been found : the first one is returned", (matchingCfg.size() > 1));
+                                                           << " has been found : the first one is returned",
+                     (matchingCfg.size() > 1));
     }
     SLM_WARN_IF("Configuration has no config attribute",  !config->hasAttribute("config"));
-    return resultConfig ;
+    return resultConfig;
 }
 
 //------------------------------------------------------------------------------
@@ -119,34 +123,34 @@ std::vector< ConfigurationElement::sptr > getAllCfgForPoint( std::string _extens
     typedef std::vector< ConfigurationElement::sptr > ElementContainer;
     typedef std::back_insert_iterator< ElementContainer > Inserter;
 
-    ElementContainer    renderElements;
-    Inserter            renderInserter(renderElements);
+    ElementContainer renderElements;
+    Inserter renderInserter(renderElements);
 
     ::fwRuntime::getAllConfigurationElementsForPoint(_extension_pt, renderInserter);
-    return renderElements ;
+    return renderElements;
 }
 
 //------------------------------------------------------------------------------
 
 std::vector< std::string > getAllIdsForPoint( std::string _extension_pt  )
 {
-    std::vector<std::string > ids ;
+    std::vector<std::string > ids;
 
     using ::fwRuntime::ConfigurationElement;
     typedef std::vector< ConfigurationElement::sptr > ElementContainer;
     typedef std::back_insert_iterator< ElementContainer > Inserter;
 
     // Collects all contributed actions
-    ElementContainer    elements;
-    Inserter            inserter(elements);
-    ::fwRuntime::getAllConfigurationElementsForPoint( _extension_pt , inserter);
+    ElementContainer elements;
+    Inserter inserter(elements);
+    ::fwRuntime::getAllConfigurationElementsForPoint( _extension_pt, inserter);
 
     // Creates all contributed action instances.
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr elt, elements)
+    for(::fwRuntime::ConfigurationElement::sptr elt :  elements)
     {
-        ids.push_back(elt->getAttributeValue("id")) ;
+        ids.push_back(elt->getAttributeValue("id"));
     }
-    return ids ;
+    return ids;
 }
 
 //------------------------------------------------------------------------------
@@ -161,12 +165,12 @@ std::string getInfoForPoint( std::string _extension_pt  )
         typedef std::back_insert_iterator< ElementContainer > Inserter;
 
         // Collects all contributed actions
-        ElementContainer    elements;
-        Inserter            inserter(elements);
+        ElementContainer elements;
+        Inserter inserter(elements);
         ::fwRuntime::getAllConfigurationElementsForPoint( _extension_pt, inserter);
 
         // Creates all contributed action instances.
-        BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr elt, elements)
+        for(::fwRuntime::ConfigurationElement::sptr elt :  elements)
         {
             if( elt->getName() == "info" && elt->hasAttribute("text") )
             {
@@ -180,38 +184,39 @@ std::string getInfoForPoint( std::string _extension_pt  )
 
 //------------------------------------------------------------------------------
 
-std::map< std::string , ConfigurationElement::sptr > getAllIdAndConfigurationElementsForPoint( std::string _extension_pt )
+std::map< std::string,
+          ConfigurationElement::sptr > getAllIdAndConfigurationElementsForPoint( std::string _extension_pt )
 {
-    std::map<std::string, ConfigurationElement::sptr > cfgElementMap ;
+    std::map<std::string, ConfigurationElement::sptr > cfgElementMap;
 
     using ::fwRuntime::ConfigurationElement;
     typedef std::vector< ConfigurationElement::sptr > ElementContainer;
     typedef std::back_insert_iterator< ElementContainer > Inserter;
 
     // Collects all contributed actions
-    ElementContainer    elements;
-    Inserter            inserter(elements);
+    ElementContainer elements;
+    Inserter inserter(elements);
     ::fwRuntime::getAllConfigurationElementsForPoint( _extension_pt, inserter);
 
     // Creates all contributed action instances.
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::sptr elt, elements)
+    for(::fwRuntime::ConfigurationElement::sptr elt :  elements)
     {
-        cfgElementMap[elt->getAttributeValue("id")]= elt;
+        cfgElementMap[elt->getAttributeValue("id")] = elt;
     }
-    return cfgElementMap ;
+    return cfgElementMap;
 }
 
 //------------------------------------------------------------------------------
 
-std::vector< ::boost::shared_ptr< ::fwRuntime::Extension > > getAllExtensionsForPoint(std::string extension_pt)
+std::vector< std::shared_ptr< ::fwRuntime::Extension > > getAllExtensionsForPoint(std::string extension_pt)
 {
-    typedef std::vector< ::boost::shared_ptr< Extension > > ExtensionContainer;
+    typedef std::vector< std::shared_ptr< Extension > > ExtensionContainer;
     typedef std::back_insert_iterator< ExtensionContainer > Inserter;
 
-    ExtensionContainer  extElements;
-    Inserter            extInserter(extElements);
+    ExtensionContainer extElements;
+    Inserter extInserter(extElements);
 
-    ::fwRuntime::getAllExtensionsForPoint ( extension_pt , extInserter );
+    ::fwRuntime::getAllExtensionsForPoint ( extension_pt, extInserter );
     return extElements;
 }
 }
diff --git a/SrcLib/core/fwRuntime/src/io/BundleDescriptorReader.cpp b/SrcLib/core/fwRuntime/src/io/BundleDescriptorReader.cpp
index a72b7a9..1d9dd03 100644
--- a/SrcLib/core/fwRuntime/src/io/BundleDescriptorReader.cpp
+++ b/SrcLib/core/fwRuntime/src/io/BundleDescriptorReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -41,22 +41,24 @@ std::string BundleDescriptorReader::POINT("point");
 
 //------------------------------------------------------------------------------
 
-const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBundles(const ::boost::filesystem::path& location) throw(RuntimeException)
+const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBundles(
+    const ::boost::filesystem::path& location) throw(RuntimeException)
 {
     // Normalizes the path.
     ::boost::filesystem::path normalizedPath(location);
     normalizedPath.normalize();
 
     // Asserts that the repository is a valid directory path.
-    if(::boost::filesystem::exists(normalizedPath) == false || ::boost::filesystem::is_directory(normalizedPath) == false)
+    if(::boost::filesystem::exists(normalizedPath) == false ||
+       ::boost::filesystem::is_directory(normalizedPath) == false)
     {
         throw RuntimeException("'" + normalizedPath.string() + "': not a directory.");
     }
 
     // Walk through the repository entries.
     BundleContainer bundles;
-    ::boost::filesystem::directory_iterator   currentEntry(normalizedPath);
-    ::boost::filesystem::directory_iterator   endEntry;
+    ::boost::filesystem::directory_iterator currentEntry(normalizedPath);
+    ::boost::filesystem::directory_iterator endEntry;
     for(; currentEntry != endEntry; ++currentEntry)
     {
         ::boost::filesystem::path entryPath = *currentEntry;
@@ -82,19 +84,15 @@ const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBund
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Bundle> BundleDescriptorReader::createBundle(const ::boost::filesystem::path& location) throw(RuntimeException)
+std::shared_ptr<Bundle> BundleDescriptorReader::createBundle(const ::boost::filesystem::path& location) throw(
+    RuntimeException)
 {
-    ::boost::shared_ptr<Bundle> bundle;
+    std::shared_ptr<Bundle> bundle;
     // Get the descriptor location.
     ::boost::filesystem::path completeLocation = location;
-
     if(!completeLocation.is_complete())
     {
-#ifdef SPECIALINSTALL
-	completeLocation = BUNDLEPATH / location;
-#else
-	completeLocation = ::boost::filesystem::current_path() / location;
-#endif
+        completeLocation = ::fwRuntime::Runtime::getDefault()->getWorkingPath() / location;
     }
 
     ::boost::filesystem::path descriptorLocation(location / "plugin.xml");
@@ -105,26 +103,18 @@ const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBund
 
     // Validation
     std::ostringstream fileLocation;
-#ifdef SPECIALINSTALL
-	fileLocation << SHAREPATH << "fwRuntime_" <<  FWRUNTIME_VER << "/plugin.xsd";
-	const ::boost::filesystem::path pluginXSDLocation(fileLocation.str() );
-#else
-	fileLocation << "share/fwRuntime_" <<  FWRUNTIME_VER << "/plugin.xsd";
-	const ::boost::filesystem::path pluginXSDLocation(::boost::filesystem::current_path() / fileLocation.str() );
-#endif
-
-    Validator   validator(pluginXSDLocation);
+    fileLocation << "share/fwRuntime_" <<  FWRUNTIME_VER << "/plugin.xsd";
+    const ::boost::filesystem::path pluginXSDLocation(
+        ::fwRuntime::Runtime::getDefault()->getWorkingPath() / fileLocation.str() );
+
+    Validator validator(pluginXSDLocation);
     if( validator.validate(descriptorLocation) == false )
     {
         throw RuntimeException("Invalid bundle descriptor file. " + validator.getErrorLog());
     }
 
     // Get the document.
-#if BOOST_FILESYSTEM_VERSION > 2
     xmlDocPtr document = xmlParseFile(  descriptorLocation.string().c_str() );
-#else
-    xmlDocPtr document = xmlParseFile(  descriptorLocation.native_file_string().c_str() );
-#endif
     if(document == 0)
     {
         throw RuntimeException("Unable to read the bundle descriptor file.");
@@ -156,25 +146,22 @@ const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBund
     catch(std::exception& exception)
     {
         xmlFreeDoc(document);
-        throw ;
+        throw;
     }
     return bundle;
 }
 
 //-----------------------------------------------------------------------------
 
-::boost::shared_ptr<Bundle> BundleDescriptorReader::createBundleFromXmlPlugin( const ::boost::filesystem::path & location ) throw ( RuntimeException )
+std::shared_ptr<Bundle> BundleDescriptorReader::createBundleFromXmlPlugin( const ::boost::filesystem::path & location )
+throw ( RuntimeException )
 {
-    ::boost::shared_ptr<Bundle> bundle;
+    std::shared_ptr<Bundle> bundle;
     // Get the descriptor location.
     ::boost::filesystem::path tmpCompleteLocation = location;
     if(!tmpCompleteLocation.is_complete())
     {
-#ifdef SPECIALINSTALL
-	tmpCompleteLocation = BUNDLEPATH / location;
-#else
-	tmpCompleteLocation = ::boost::filesystem::current_path() / location;
-#endif
+        tmpCompleteLocation = ::fwRuntime::Runtime::getDefault()->getWorkingPath() / location;
     }
     tmpCompleteLocation.normalize();
 
@@ -188,13 +175,9 @@ const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBund
 
     // Validation
     std::ostringstream fileLocation;
-#ifdef SPECIALINSTALL
-	fileLocation << SHAREPATH << "fwRuntime_" <<  FWRUNTIME_VER << "/plugin.xsd";
-	const ::boost::filesystem::path pluginXSDLocation(fileLocation.str() );
-#else
-	fileLocation << "share/fwRuntime_" <<  FWRUNTIME_VER << "/plugin.xsd";
-	const ::boost::filesystem::path pluginXSDLocation(::boost::filesystem::current_path() / fileLocation.str() );
-#endif
+    fileLocation << "share/fwRuntime_" <<  FWRUNTIME_VER << "/plugin.xsd";
+    const ::boost::filesystem::path pluginXSDLocation(
+        ::fwRuntime::Runtime::getDefault()->getWorkingPath() / fileLocation.str() );
 
     Validator validator(pluginXSDLocation);
     if( validator.validate(descriptorLocation) == false )
@@ -203,11 +186,7 @@ const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBund
     }
 
     // Get the document.
-#if BOOST_FILESYSTEM_VERSION > 2
     xmlDocPtr document = xmlParseFile(  descriptorLocation.string().c_str() );
-#else
-    xmlDocPtr document = xmlParseFile(  descriptorLocation.native_file_string().c_str() );
-#endif
     if(document == 0)
     {
         throw RuntimeException("Unable to read the bundle descriptor file.");
@@ -236,14 +215,16 @@ const BundleDescriptorReader::BundleContainer BundleDescriptorReader::createBund
     catch(std::exception& exception)
     {
         xmlFreeDoc(document);
-        throw ;
+        throw;
     }
     return bundle;
 }
 
 //-----------------------------------------------------------------------------
 
-ConfigurationElement::sptr BundleDescriptorReader::processConfigurationElement(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException)
+ConfigurationElement::sptr BundleDescriptorReader::processConfigurationElement(xmlNodePtr node,
+                                                                               const std::shared_ptr<Bundle> bundle)
+throw(RuntimeException)
 {
     //xmlKeepBlanksDefault(0);
     // Creates the configuration element.
@@ -268,8 +249,9 @@ ConfigurationElement::sptr BundleDescriptorReader::processConfigurationElement(x
         {
             std::string value((const char*) curChild->content);
             // Even whitespace (non XML_TEXT_NODE) are considered as valid XML_TEXT_NODE
-            OSLM_WARN_IF("Bundle : " << ( bundle ? bundle->getIdentifier() : "<None>" ) << ", node: " << name << ", blanks in xml nodes can result in unexpected behaviour. Consider using <![CDATA[ ... ]]>.",
-                    (value.find("\n")!=std::string::npos || value.find("\t")!=std::string::npos));
+            OSLM_WARN_IF(
+                "Bundle : " << ( bundle ? bundle->getIdentifier() : "<None>" ) << ", node: " << name << ", blanks in xml nodes can result in unexpected behaviour. Consider using <![CDATA[ ... ]]>.",
+                (value.find("\n")!=std::string::npos || value.find("\t")!=std::string::npos));
 
             configurationElement->setValue( configurationElement->getValue() + value );
             continue;
@@ -295,7 +277,9 @@ ConfigurationElement::sptr BundleDescriptorReader::processConfigurationElement(x
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Extension> BundleDescriptorReader::processExtension(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException)
+std::shared_ptr<Extension> BundleDescriptorReader::processExtension(xmlNodePtr node,
+                                                                    const std::shared_ptr<Bundle> bundle) throw(
+    RuntimeException)
 {
     // Processes all extension attributes.
     xmlAttrPtr curAttr;
@@ -317,7 +301,7 @@ ConfigurationElement::sptr BundleDescriptorReader::processConfigurationElement(x
     }
 
     // Creates the extension instance.
-    ::boost::shared_ptr<Extension> extension(new Extension(bundle, identifier, point, node));
+    std::shared_ptr<Extension> extension(new Extension(bundle, identifier, point, node));
 
     // Processes child nodes which are configuration elements.
     xmlNodePtr curChild;
@@ -336,7 +320,9 @@ ConfigurationElement::sptr BundleDescriptorReader::processConfigurationElement(x
 
 //------------------------------------------------------------------------------
 
-BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processPoint(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException)
+BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processPoint(xmlNodePtr node,
+                                                                                     const std::shared_ptr<Bundle> bundle)
+throw(RuntimeException)
 {
     // Creates the extension instance.
     xmlAttrPtr curAttr;
@@ -356,10 +342,10 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
             continue;
         }
     }
-    ::boost::shared_ptr<ExtensionPoint> extensionPoint(new ExtensionPoint(bundle, identifier, schema));
+    std::shared_ptr<ExtensionPoint> extensionPoint(new ExtensionPoint(bundle, identifier, schema));
 
     // Processes child nodes which declare identifier as extensions.
-    std::vector< ::boost::shared_ptr<Extension> > extensionContainer ;
+    std::vector< std::shared_ptr<Extension> > extensionContainer;
     xmlNodePtr curChild;
     for(curChild = node->children; curChild != 0; curChild = curChild->next)
     {
@@ -367,22 +353,24 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
         {
             if( xmlStrcmp(curChild->name, (const xmlChar*) IMPLEMENTS.c_str()) == 0 )
             {
-                std::string extensionId =  (const char*) curChild->children->content ;
-                ::boost::shared_ptr<Extension> extension(new Extension(bundle, identifier , extensionId, curChild));
-                extensionContainer.push_back( extension ) ;
+                std::string extensionId = (const char*) curChild->children->content;
+                std::shared_ptr<Extension> extension(new Extension(bundle, identifier, extensionId, curChild));
+                extensionContainer.push_back( extension );
             }
         }
     }
 
-    return PointExtensionsPairType( extensionPoint, extensionContainer ) ;
+    return PointExtensionsPairType( extensionPoint, extensionContainer );
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<ExtensionPoint> BundleDescriptorReader::processExtensionPoint(xmlNodePtr node, const ::boost::shared_ptr<Bundle> bundle) throw(RuntimeException)
+std::shared_ptr<ExtensionPoint> BundleDescriptorReader::processExtensionPoint(xmlNodePtr node,
+                                                                              const std::shared_ptr<Bundle> bundle)
+throw(RuntimeException)
 {
     // Processes all extension attributes.
-    xmlAttrPtr  curAttr;
+    xmlAttrPtr curAttr;
     std::string identifier;
     std::string schema;
     for(curAttr = node->properties; curAttr != 0; curAttr = curAttr->next)
@@ -400,7 +388,7 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
         }
     }
     // Creates the extension instance.
-    ::boost::shared_ptr<ExtensionPoint> point(new ExtensionPoint(bundle, identifier, schema));
+    std::shared_ptr<ExtensionPoint> point(new ExtensionPoint(bundle, identifier, schema));
 
     // Job's done.
     return point;
@@ -408,7 +396,7 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<dl::Library> BundleDescriptorReader::processLibrary(xmlNodePtr node) throw(RuntimeException)
+std::shared_ptr<dl::Library> BundleDescriptorReader::processLibrary(xmlNodePtr node) throw(RuntimeException)
 {
     // Processes all plugin attributes.
     xmlAttrPtr curAttr;
@@ -423,18 +411,20 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
     }
 
     // Creates the library
-    ::boost::shared_ptr<dl::Library> library( new dl::Library(name) );
+    std::shared_ptr<dl::Library> library( new dl::Library(name) );
     return library;
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr<Bundle> BundleDescriptorReader::processPlugin(xmlNodePtr node, const ::boost::filesystem::path& location) throw(RuntimeException)
+std::shared_ptr<Bundle> BundleDescriptorReader::processPlugin(xmlNodePtr node,
+                                                              const ::boost::filesystem::path& location) throw(
+    RuntimeException)
 {
     // Creates the bundle.
-    ::boost::shared_ptr<Bundle> bundle;
+    std::shared_ptr<Bundle> bundle;
     // Processes all plugin attributes.
-    xmlAttrPtr  curAttr;
+    xmlAttrPtr curAttr;
     std::string bundleIdentifier;
     std::string version;
     std::string pluginClass;
@@ -466,11 +456,11 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
     }
     if(pluginClass.empty() == true)
     {
-        bundle = ::boost::shared_ptr<Bundle>( new Bundle(location, bundleIdentifier, version) );
+        bundle = std::shared_ptr<Bundle>( new Bundle(location, bundleIdentifier, version) );
     }
     else
     {
-        bundle = ::boost::shared_ptr<Bundle>( new Bundle(location, bundleIdentifier, version, pluginClass) );
+        bundle = std::shared_ptr<Bundle>( new Bundle(location, bundleIdentifier, version, pluginClass) );
     }
 
     // Processes all child nodes.
@@ -486,7 +476,7 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
         // Extension declaration.
         if(xmlStrcmp(curChild->name, (const xmlChar*) EXTENSION.c_str()) == 0)
         {
-            ::boost::shared_ptr<Extension> extension(processExtension(curChild, bundle));
+            std::shared_ptr<Extension> extension(processExtension(curChild, bundle));
             bundle->addExtension(extension);
             continue;
         }
@@ -494,7 +484,7 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
         // Extension point declaration.
         if(xmlStrcmp(curChild->name, (const xmlChar*) EXTENSION_POINT.c_str()) == 0)
         {
-            ::boost::shared_ptr<ExtensionPoint> point(processExtensionPoint(curChild, bundle));
+            std::shared_ptr<ExtensionPoint> point(processExtensionPoint(curChild, bundle));
             bundle->addExtensionPoint(point);
             continue;
         }
@@ -502,7 +492,7 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
         // Library declaration.
         if(xmlStrcmp(curChild->name, (const xmlChar*) LIBRARY.c_str()) == 0)
         {
-            ::boost::shared_ptr<dl::Library> library(processLibrary(curChild));
+            std::shared_ptr<dl::Library> library(processLibrary(curChild));
             bundle->addLibrary(library);
             continue;
         }
@@ -510,14 +500,14 @@ BundleDescriptorReader::PointExtensionsPairType BundleDescriptorReader::processP
         // Requirement declaration.
         if(xmlStrcmp(curChild->name, (const xmlChar*) REQUIREMENT.c_str()) == 0)
         {
-            const std::string   requirement(processRequirement(curChild));
+            const std::string requirement(processRequirement(curChild));
             bundle->addRequirement(requirement);
         }
 
         // Point declaration.
         if(xmlStrcmp(curChild->name, (const xmlChar*) POINT.c_str()) == 0)
         {
-            SLM_FATAL("Sorry, this xml element  ( <point ... > </point> ) is depreciated (" + location.string() + ")" );
+            SLM_FATAL("This xml element  ( <point ... > </point> ) is deprecated (" + location.string() + ")" );
         }
     }
 
diff --git a/SrcLib/core/fwRuntime/src/io/ProfileReader.cpp b/SrcLib/core/fwRuntime/src/io/ProfileReader.cpp
index c775dc3..280b6dd 100644
--- a/SrcLib/core/fwRuntime/src/io/ProfileReader.cpp
+++ b/SrcLib/core/fwRuntime/src/io/ProfileReader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,11 +11,12 @@
 #include <boost/filesystem/operations.hpp>
 #include <libxml/parser.h>
 
-#include "fwRuntime/RuntimeException.hpp"
 #include "fwRuntime/io/Validator.hpp"
 #include "fwRuntime/profile/Activater.hpp"
 #include "fwRuntime/profile/Profile.hpp"
 #include "fwRuntime/profile/Starter.hpp"
+#include "fwRuntime/Runtime.hpp"
+#include "fwRuntime/RuntimeException.hpp"
 
 namespace fwRuntime
 {
@@ -36,7 +37,7 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ::fwRuntime::profile::Profile > ProfileReader::createProfile( const boost::filesystem::path & path )
+std::shared_ptr< ::fwRuntime::profile::Profile > ProfileReader::createProfile( const boost::filesystem::path & path )
 {
     // Normalizes the path.
     boost::filesystem::path normalizedPath(path);
@@ -51,16 +52,11 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
 
     // Validation
     std::ostringstream fileLocation;
-#ifdef SPECIALINSTALL
-	fileLocation << SHAREPATH << "fwRuntime_" <<  FWRUNTIME_VER << "/profile.xsd";
-	const ::boost::filesystem::path profileXSDLocation(fileLocation.str() );
-#else
-	fileLocation << "share/fwRuntime_" <<  FWRUNTIME_VER << "/profile.xsd";
-	const ::boost::filesystem::path profileXSDLocation(::boost::filesystem::current_path() / fileLocation.str() );
-#endif
-
+    fileLocation << "share/fwRuntime_" <<  FWRUNTIME_VER << "/profile.xsd";
+    const ::boost::filesystem::path profileXSDLocation(
+        ::fwRuntime::Runtime::getDefault()->getWorkingPath() / fileLocation.str() );
 
-    Validator   validator(profileXSDLocation);
+    Validator validator(profileXSDLocation);
 
     if( validator.validate(normalizedPath) == false )
     {
@@ -68,11 +64,7 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
     }
 
     // Get the document.
-#if BOOST_FILESYSTEM_VERSION > 2
     xmlDocPtr document = xmlParseFile(normalizedPath.string().c_str());
-#else
-    xmlDocPtr document = xmlParseFile(normalizedPath.native_file_string().c_str());
-#endif
     if(document == 0)
     {
         throw RuntimeException("Unable to read the profile file.");
@@ -87,7 +79,7 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
         char* pVersion = (char *) xmlGetProp(rootNode, (const xmlChar*) VERSION.c_str());
         char* pChkInst = (char *) xmlGetProp(rootNode, (const xmlChar*) CHECK_SINGLE_INSTANCE.c_str());
 
-        SLM_ASSERT("Application profile MUST have a name attribute"   , pName);
+        SLM_ASSERT("Application profile MUST have a name attribute", pName);
         SLM_ASSERT("Application profile MUST have a version attribute", pVersion);
 
         std::string sName( pName );
@@ -99,7 +91,7 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
         xmlFree(pChkInst);
 
         // Creates and process the profile element.
-         ::boost::shared_ptr< ::fwRuntime::profile::Profile > profile = processProfile(rootNode);
+        std::shared_ptr< ::fwRuntime::profile::Profile > profile = processProfile(rootNode);
 
         profile->setFilePath(normalizedPath);
         profile->setName(sName);
@@ -113,20 +105,20 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
     catch(std::exception& exception)
     {
         xmlFreeDoc(document);
-        throw ;
+        throw;
     }
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ::fwRuntime::profile::Profile > ProfileReader::processProfile(xmlNodePtr node)
+std::shared_ptr< ::fwRuntime::profile::Profile > ProfileReader::processProfile(xmlNodePtr node)
 {
     using namespace ::fwRuntime::profile;
 
 
     // Process child nodes.
-    ::boost::shared_ptr< Profile > profile( new Profile() );
-    xmlNodePtr              curChild = node->children;
+    SPTR(Profile) profile = std::make_shared<Profile>();
+    xmlNodePtr curChild = node->children;
     for(curChild = node->children; curChild != 0; curChild = curChild->next)
     {
         if(xmlStrcmp(curChild->name, (const xmlChar*) ACTIVATE.c_str()) == 0)
@@ -146,7 +138,7 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ::fwRuntime::profile::Activater > ProfileReader::processActivater(xmlNodePtr node)
+std::shared_ptr< ::fwRuntime::profile::Activater > ProfileReader::processActivater(xmlNodePtr node)
 {
     // Processes all attributes.
     xmlAttrPtr curAttr;
@@ -169,10 +161,10 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
 
     // Creates the activater object.
     using ::fwRuntime::profile::Activater;
-    ::boost::shared_ptr< Activater >   activater( new Activater(identifier, version) );
+    std::shared_ptr< Activater >   activater( new Activater(identifier, version) );
 
     // Processes child node that are the parameters
-    xmlNodePtr  curChild = node->children;
+    xmlNodePtr curChild = node->children;
     for(curChild = node->children; curChild != 0; curChild = curChild->next)
     {
         if(xmlStrcmp(curChild->name, (const xmlChar*) PARAM.c_str()) == 0)
@@ -199,7 +191,7 @@ std::string ProfileReader::DIS_EXT               ("disable-extension");
 
 //------------------------------------------------------------------------------
 
-void ProfileReader::processActivaterParam(xmlNodePtr node, ::boost::shared_ptr< ::fwRuntime::profile::Activater > activater)
+void ProfileReader::processActivaterParam(xmlNodePtr node, std::shared_ptr< ::fwRuntime::profile::Activater > activater)
 {
     // Processes all attributes.
     xmlAttrPtr curAttr;
@@ -225,7 +217,8 @@ void ProfileReader::processActivaterParam(xmlNodePtr node, ::boost::shared_ptr<
 
 //------------------------------------------------------------------------------
 
-void ProfileReader::processActivaterDisableExtensionPoint(xmlNodePtr node, ::boost::shared_ptr< ::fwRuntime::profile::Activater > activater)
+void ProfileReader::processActivaterDisableExtensionPoint(xmlNodePtr node,
+                                                          std::shared_ptr< ::fwRuntime::profile::Activater > activater)
 {
     // Processes all attributes.
     xmlAttrPtr curAttr;
@@ -245,7 +238,8 @@ void ProfileReader::processActivaterDisableExtensionPoint(xmlNodePtr node, ::boo
 
 //------------------------------------------------------------------------------
 
-void ProfileReader::processActivaterDisableExtension(xmlNodePtr node, ::boost::shared_ptr< ::fwRuntime::profile::Activater > activater)
+void ProfileReader::processActivaterDisableExtension(xmlNodePtr node,
+                                                     std::shared_ptr< ::fwRuntime::profile::Activater > activater)
 {
     // Processes all attributes.
     xmlAttrPtr curAttr;
@@ -265,7 +259,7 @@ void ProfileReader::processActivaterDisableExtension(xmlNodePtr node, ::boost::s
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ::fwRuntime::profile::Starter > ProfileReader::processStarter(xmlNodePtr node)
+std::shared_ptr< ::fwRuntime::profile::Starter > ProfileReader::processStarter(xmlNodePtr node)
 {
     // Processes all attributes.
     xmlAttrPtr curAttr;
@@ -281,7 +275,7 @@ void ProfileReader::processActivaterDisableExtension(xmlNodePtr node, ::boost::s
 
     // Creates the activater object.
     using ::fwRuntime::profile::Starter;
-    ::boost::shared_ptr< Starter > starter( new Starter(identifier) );
+    std::shared_ptr< Starter > starter( new Starter(identifier) );
     return starter;
 }
 
diff --git a/SrcLib/core/fwRuntime/src/io/Validator.cpp b/SrcLib/core/fwRuntime/src/io/Validator.cpp
index 367fabc..8e1f8d8 100644
--- a/SrcLib/core/fwRuntime/src/io/Validator.cpp
+++ b/SrcLib/core/fwRuntime/src/io/Validator.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,27 +30,23 @@ namespace io
 
 Validator::Validator( const Validator &validator )
 {
-    m_xsd_content = validator.m_xsd_content;
+    m_xsd_content         = validator.m_xsd_content;
     m_schemaParserContext = validator.m_schemaParserContext;
-    m_schema = validator.m_schema;
+    m_schema              = validator.m_schema;
 }
 
 //------------------------------------------------------------------------------
 
 Validator::Validator( const std::string & buffer )
 {
-    m_xsd_content = buffer ;
+    m_xsd_content = buffer;
 }
 
 //------------------------------------------------------------------------------
 
 Validator::Validator( const boost::filesystem::path & path )
 {
-#if BOOST_FILESYSTEM_VERSION > 2
     std::string strPath( path.string() );
-#else
-    std::string strPath( path.native_file_string() );
-#endif
     // Checks the path validity.
     if( ::boost::filesystem::exists(path) == false || ::boost::filesystem::is_directory(path) )
     {
@@ -95,7 +91,7 @@ void Validator::initializeContext()
                   xmlSchemaFreeParserCtxt)
               ) )
         {
-            return ;
+            return;
         }
         // Set the structured error callback
         xmlSchemaSetParserStructuredErrors(m_schemaParserContext.get(), Validator::ErrorHandler, this );
@@ -108,7 +104,7 @@ void Validator::initializeContext()
     }
     if (!m_schema)
     {
-        return ;
+        return;
     }
 
     // Create XML schemas validation context
@@ -150,9 +146,9 @@ bool Validator::validate( const boost::filesystem::path & xmlFile )
 
     if ( result !=0 )
     {
-        OSLM_WARN("Validator::validation NOK, xml = " << xmlFile.string() ) ;
-        OSLM_WARN("Validator::validation NOK, xsd = " << getXsdContent() ) ;
-        OSLM_ERROR("Validator::validation NOK, error log = " << getErrorLog() ) ;
+        OSLM_WARN("Validator::validation NOK, xml = " << xmlFile.string() );
+        OSLM_WARN("Validator::validation NOK, xsd = " << getXsdContent() );
+        OSLM_ERROR("Validator::validation NOK, error log = " << getErrorLog() );
     }
 
     return result == 0;
@@ -177,10 +173,10 @@ bool Validator::validate( xmlNodePtr node )
     {
         xmlBufferPtr buffer = xmlBufferCreate();
         xmlNodeDump( buffer, node->doc, node, 1, 1 );
-        OSLM_WARN("Validator::validation NOK, node :\n " << buffer->content) ;
+        OSLM_WARN("Validator::validation NOK, node :\n " << buffer->content);
         xmlBufferFree( buffer );
-        OSLM_WARN("Validator::validation NOK, xsd = " << getXsdContent() ) ;
-        OSLM_ERROR("Validator::validation NOK, error log = " << getErrorLog() ) ;
+        OSLM_WARN("Validator::validation NOK, xsd = " << getXsdContent() );
+        OSLM_ERROR("Validator::validation NOK, error log = " << getErrorLog() );
     }
 
     return result == 0;
@@ -199,7 +195,7 @@ void Validator::ErrorHandler( void * userData, xmlErrorPtr error )
 
 std::string Validator::getXsdContent()
 {
-    return m_xsd_content ;
+    return m_xsd_content;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwRuntime/src/operations.cpp b/SrcLib/core/fwRuntime/src/operations.cpp
index 1901bb8..d8196c2 100644
--- a/SrcLib/core/fwRuntime/src/operations.cpp
+++ b/SrcLib/core/fwRuntime/src/operations.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -27,22 +27,23 @@ namespace
  * @brief   Functor that matches configuration element identifiers
  *          against the given identifier
  *
- * 
+ *
  */
 struct ConfigurationElementIdentifierPredicate
 {
     ConfigurationElementIdentifierPredicate( const std::string & identifier )
-    :   m_identifier( identifier )
-    {}
+        :   m_identifier( identifier )
+    {
+    }
 
-    bool operator() ( ::boost::shared_ptr< ConfigurationElement > element )
+    bool operator() ( std::shared_ptr< ConfigurationElement > element )
     {
         return element->getAttributeValue("id") == m_identifier;
     }
 
-private:
+    private:
 
-    std::string m_identifier;
+        std::string m_identifier;
 
 };
 
@@ -50,12 +51,16 @@ private:
 
 //------------------------------------------------------------------------------
 
-ConfigurationElement::sptr findConfigurationElement( const std::string & identifier, const std::string & pointIdentifier )
+ConfigurationElement::sptr findConfigurationElement( const std::string & identifier,
+                                                     const std::string & pointIdentifier )
 {
     typedef std::vector< ConfigurationElement::sptr >  ElementContainer;
     ConfigurationElement::sptr resultConfig;
-    ElementContainer            elements = getAllConfigurationElementsForPoint< ElementContainer >( pointIdentifier );
-    ElementContainer::iterator  foundElement = ::std::find_if( elements.begin(), elements.end(), ConfigurationElementIdentifierPredicate(identifier) );
+    ElementContainer elements =
+        getAllConfigurationElementsForPoint< ElementContainer >( pointIdentifier );
+    ElementContainer::iterator foundElement = ::std::find_if( elements.begin(),
+                                                              elements.end(),
+                                                              ConfigurationElementIdentifierPredicate(identifier) );
     if(foundElement != elements.end())
     {
         resultConfig = *foundElement;
@@ -65,7 +70,7 @@ ConfigurationElement::sptr findConfigurationElement( const std::string & identif
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< Extension > findExtension( const std::string & identifier )
+std::shared_ptr< Extension > findExtension( const std::string & identifier )
 {
     ::fwRuntime::Runtime* rntm = ::fwRuntime::Runtime::getDefault();
     return rntm->findExtension( identifier );
@@ -73,7 +78,7 @@ ConfigurationElement::sptr findConfigurationElement( const std::string & identif
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ExtensionPoint > findExtensionPoint(const std::string &identifier)
+std::shared_ptr< ExtensionPoint > findExtensionPoint(const std::string &identifier)
 {
     ::fwRuntime::Runtime * rntm = ::fwRuntime::Runtime::getDefault();
     return rntm->findExtensionPoint( identifier );
@@ -81,30 +86,34 @@ ConfigurationElement::sptr findConfigurationElement( const std::string & identif
 
 //------------------------------------------------------------------------------
 
-const ::boost::filesystem::path getBundleResourcePath(const std::string& bundleIdentifier, const ::boost::filesystem::path &path) throw()
+const ::boost::filesystem::path getBundleResourcePath(const std::string& bundleIdentifier,
+                                                      const ::boost::filesystem::path &path) throw()
 {
-    Runtime *rntm = Runtime::getDefault();
-     ::boost::shared_ptr<Bundle>    bundle = rntm->findBundle( bundleIdentifier );
+    Runtime *rntm                     = Runtime::getDefault();
+    std::shared_ptr<Bundle>    bundle = rntm->findBundle( bundleIdentifier );
     return bundle != 0 ? getBundleResourcePath(bundle, path) : ::boost::filesystem::path();
 }
 
 //------------------------------------------------------------------------------
 
-const ::boost::filesystem::path getBundleResourcePath( ::boost::shared_ptr<Bundle> bundle, const ::boost::filesystem::path &path) throw()
+const ::boost::filesystem::path getBundleResourcePath( std::shared_ptr<Bundle> bundle,
+                                                       const ::boost::filesystem::path &path) throw()
 {
     return bundle->getLocation() / path;
 }
 
 //------------------------------------------------------------------------------
 
-const ::boost::filesystem::path getBundleResourcePath( ConfigurationElement::sptr element, const ::boost::filesystem::path &path) throw()
+const ::boost::filesystem::path getBundleResourcePath( ConfigurationElement::sptr element,
+                                                       const ::boost::filesystem::path &path) throw()
 {
     return getBundleResourcePath(element->getBundle(), path);
 }
 
 //------------------------------------------------------------------------------
 
-const ::boost::filesystem::path getBundleResourcePath(const IExecutable *executable, const ::boost::filesystem::path &path) throw()
+const ::boost::filesystem::path getBundleResourcePath(const IExecutable *executable,
+                                                      const ::boost::filesystem::path &path) throw()
 {
     return getBundleResourcePath(executable->getBundle(), path);
 }
@@ -135,7 +144,7 @@ void addBundles( const ::boost::filesystem::path & directory) throw(RuntimeExcep
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< Bundle > findBundle( const std::string & identifier, const Version & version )
+std::shared_ptr< Bundle > findBundle( const std::string & identifier, const Version & version )
 {
     return Runtime::getDefault()->findBundle( identifier, version );
 }
@@ -147,7 +156,7 @@ void startBundle(const std::string &identifier) throw(RuntimeException)
     Runtime* rntm = Runtime::getDefault();
 
     // Retrieves the specified bundle.
-    ::boost::shared_ptr<Bundle> bundle = rntm->findBundle( identifier );
+    std::shared_ptr<Bundle> bundle = rntm->findBundle( identifier );
     if( bundle == 0 )
     {
         throw RuntimeException(identifier + ": bundle not found.");
diff --git a/SrcLib/core/fwRuntime/src/profile/Activater.cpp b/SrcLib/core/fwRuntime/src/profile/Activater.cpp
index 9f120a2..ea3b83e 100644
--- a/SrcLib/core/fwRuntime/src/profile/Activater.cpp
+++ b/SrcLib/core/fwRuntime/src/profile/Activater.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,9 +30,10 @@ namespace profile
 //------------------------------------------------------------------------------
 
 Activater::Activater( const std::string & identifier, const std::string & version )
-:   m_identifier( identifier ),
-    m_version( version )
-{}
+    :   m_identifier( identifier ),
+      m_version( version )
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -59,23 +60,23 @@ void Activater::addDisableExtension( const std::string & identifier )
 
 void Activater::apply()
 {
-    ::boost::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier, m_version);
+    std::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier, m_version);
     OSLM_FATAL_IF("Unable to activate Bundle " << m_identifier << "_" << m_version << ". Not found.", bundle==0);
 
     bundle->setEnable( true );
 
     // Managment of parameter configuration
     for( ParameterContainer::const_iterator i = m_parameters.begin();
-            i != m_parameters.end();
-            ++i )
+         i != m_parameters.end();
+         ++i )
     {
         bundle->addParameter( i->first, i->second );
     }
 
     // Disable extension point for this bundle
     for( DisableExtensionPointContainer::const_iterator id = m_disableExtensionPoints.begin();
-            id != m_disableExtensionPoints.end();
-            ++id )
+         id != m_disableExtensionPoints.end();
+         ++id )
     {
         if( bundle->hasExtensionPoint(*id) )
         {
@@ -83,14 +84,16 @@ void Activater::apply()
         }
         else
         {
-            OSLM_ERROR("Unable to disable Extension Point " << *id << " defined in the Bundle " << m_identifier << ". Not found.");
+            OSLM_ERROR(
+                "Unable to disable Extension Point " << *id << " defined in the Bundle " << m_identifier <<
+                ". Not found.");
         }
     }
 
     // Disable extension for this bundle
     for( DisableExtensionContainer::const_iterator id = m_disableExtensions.begin();
-            id != m_disableExtensions.end();
-            ++id )
+         id != m_disableExtensions.end();
+         ++id )
     {
         if( bundle->hasExtension(*id) )
         {
@@ -98,7 +101,9 @@ void Activater::apply()
         }
         else
         {
-            OSLM_ERROR("Unable to disable Extension " << *id << " defined in the Bundle " << m_identifier << ". Not found.");
+            OSLM_ERROR(
+                "Unable to disable Extension " << *id << " defined in the Bundle " << m_identifier <<
+                ". Not found.");
         }
     }
 }
diff --git a/SrcLib/core/fwRuntime/src/profile/Initializer.cpp b/SrcLib/core/fwRuntime/src/profile/Initializer.cpp
index bbb4147..4d0ec73 100644
--- a/SrcLib/core/fwRuntime/src/profile/Initializer.cpp
+++ b/SrcLib/core/fwRuntime/src/profile/Initializer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,8 +22,9 @@ namespace profile
 //------------------------------------------------------------------------------
 
 Initializer::Initializer( const std::string & identifier )
-: m_identifier( identifier )
-{}
+    : m_identifier( identifier )
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwRuntime/src/profile/Profile.cpp b/SrcLib/core/fwRuntime/src/profile/Profile.cpp
index f0f09c3..66fbf1c 100644
--- a/SrcLib/core/fwRuntime/src/profile/Profile.cpp
+++ b/SrcLib/core/fwRuntime/src/profile/Profile.cpp
@@ -1,16 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwRuntime/profile/Profile.hpp"
 
-#include <algorithm>
-#include <cstring>
-
-#include <boost/bind.hpp>
-
 #include "fwRuntime/Runtime.hpp"
 #include "fwRuntime/profile/Activater.hpp"
 #include "fwRuntime/profile/Starter.hpp"
@@ -21,6 +16,10 @@
 #include "fwRuntime/Extension.hpp"
 #include "fwRuntime/Bundle.hpp"
 
+#include <algorithm>
+#include <cstring>
+#include <functional>
+
 namespace fwRuntime
 {
 
@@ -29,19 +28,18 @@ namespace profile
 
 namespace
 {
-
-    template< typename E >
-    struct Apply
+template< typename E >
+struct Apply
+{
+    void operator() ( E e )
     {
-        void operator() ( E e )
-        {
-            e->apply();
-        }
-    };
-
+        e->apply();
+    }
+};
 }
 
-// =========================================================
+//------------------------------------------------------------------------------
+
 Profile::wptr current_profile;
 
 void setCurrentProfile(Profile::sptr prof)
@@ -54,17 +52,20 @@ Profile::sptr getCurrentProfile()
     return current_profile.lock();
 }
 
-// =========================================================
+//------------------------------------------------------------------------------
 
-Profile::Profile():
+Profile::Profile() :
     m_checkSingleInstance(false),
+#ifdef ANDROID
+    m_app(nullptr),
+#endif
     m_argc(0),
     m_argv(NULL)
 {
-    m_run = ::boost::bind(&Profile::defaultRun, this);
+    m_run = std::bind(&Profile::defaultRun, this);
 }
 
-// =========================================================
+//------------------------------------------------------------------------------
 
 Profile::~Profile()
 {
@@ -74,37 +75,37 @@ Profile::~Profile()
     }
 }
 
-
-
 //------------------------------------------------------------------------------
 
-void Profile::add( SPTR( Activater ) activater )
+void Profile::add( SPTR( Activater )activater )
 {
     m_activaters.push_back( activater );
 }
 
 //------------------------------------------------------------------------------
 
-void Profile::add( SPTR( Starter ) starter )
+void Profile::add( SPTR( Starter )starter )
 {
     m_starters.push_back( starter );
 }
 
 //------------------------------------------------------------------------------
 
-void Profile::add( SPTR( Stopper ) stopper )
+void Profile::add( SPTR( Stopper )stopper )
 {
     m_stoppers.push_back( stopper );
 }
 
 //------------------------------------------------------------------------------
-void Profile::add( SPTR( Initializer ) initializer )
+
+void Profile::add( SPTR( Initializer )initializer )
 {
     m_initializers.push_back(initializer);
 }
 
 //------------------------------------------------------------------------------
-void Profile::add( SPTR( Uninitializer ) uninitializer )
+
+void Profile::add( SPTR( Uninitializer )uninitializer )
 {
     m_uninitializers.push_back(uninitializer);
 }
@@ -120,8 +121,9 @@ void Profile::start()
     for( Runtime::ExtensionIterator i = rntm->extensionsBegin(); i != rntm->extensionsEnd(); ++i )
     {
         SPTR( Extension ) extension( *i );
-        OSLM_FATAL_IF( "Validation not ok for bundle = '" << extension->getBundle()->getIdentifier() << "'  (extension id = '" << extension->getIdentifier() << "' )",
-                extension->getBundle()->isEnable() && extension->validate() == Extension::Invalid );
+        OSLM_FATAL_IF(
+            "Validation not ok for bundle = '" << extension->getBundle()->getIdentifier() << "'  (extension id = '" << extension->getIdentifier() << "' )",
+            extension->getBundle()->isEnable() && extension->validate() == Extension::Invalid );
     }
 
     std::for_each( m_starters.begin(), m_starters.end(), Apply< StarterContainer::value_type >() );
@@ -162,7 +164,6 @@ void Profile::stop()
     std::for_each( m_stoppers.rbegin(), m_stoppers.rend(), Apply< StopperContainer::value_type >() );
 }
 
-
 //------------------------------------------------------------------------------
 
 void Profile::setup()
@@ -183,46 +184,22 @@ void Profile::cleanup()
 
 //------------------------------------------------------------------------------
 
-Profile::ParamsContainer Profile::getParams()
-{
-    return m_params;
-}
-
-//------------------------------------------------------------------------------
-
-int &Profile::getRawArgCount()
-{
-    return m_argc;
-}
-
-//------------------------------------------------------------------------------
-
-char** Profile::getRawParams()
-{
-    return m_argv;
-}
-
-//------------------------------------------------------------------------------
-
 void Profile::setParams(int argc, char** argv)
 {
-    Profile::ParamsContainer params;
-
-    for(int i = 0; i < argc; i++)
+    ParamsContainer params;
+    for(int i = 0; i < argc; ++i)
     {
-        std::string arg = argv[i];
-        params.push_back( arg );
+        params.push_back( std::string(argv[i]) );
     }
-
     this->setParams(params);
 }
 
 //------------------------------------------------------------------------------
+
 void Profile::setParams(const Profile::ParamsContainer &params)
 {
     m_params = params;
 
-
     if (m_argv)
     {
         delete[] m_argv;
@@ -233,7 +210,7 @@ void Profile::setParams(const Profile::ParamsContainer &params)
     m_argv = new char*[m_params.size()];
 
     // for each string, allocate memory in the character array and copy
-    for (unsigned long i=0; i<m_params.size(); i++)
+    for(size_t i = 0; i<m_params.size(); i++)
     {
         size_t paramSize = m_params[i].size();
         m_argv[i] = new char[paramSize+1];
diff --git a/SrcLib/core/fwRuntime/src/profile/Starter.cpp b/SrcLib/core/fwRuntime/src/profile/Starter.cpp
index 9db52c9..0aa51de 100644
--- a/SrcLib/core/fwRuntime/src/profile/Starter.cpp
+++ b/SrcLib/core/fwRuntime/src/profile/Starter.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,18 +23,26 @@ namespace profile
 //------------------------------------------------------------------------------
 
 Starter::Starter( const std::string & identifier )
-: m_identifier( identifier )
-{}
+    : m_identifier( identifier )
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Starter::apply()
 {
-    ::boost::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier);
+    std::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier);
     OSLM_FATAL_IF("Unable to start bundle " << m_identifier << ". Not found.", bundle == 0);
     try
     {
-        bundle->start();
+        if(!bundle->isStarted())
+        {
+            bundle->start();
+        }
+        else
+        {
+            SLM_WARN("bundle " + m_identifier + " already started");
+        }
     }
     catch( const std::exception & e )
     {
diff --git a/SrcLib/core/fwRuntime/src/profile/Stopper.cpp b/SrcLib/core/fwRuntime/src/profile/Stopper.cpp
index 2d59449..4b9dad9 100644
--- a/SrcLib/core/fwRuntime/src/profile/Stopper.cpp
+++ b/SrcLib/core/fwRuntime/src/profile/Stopper.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,15 +24,16 @@ namespace profile
 //------------------------------------------------------------------------------
 
 Stopper::Stopper( const std::string & identifier )
-: m_identifier( identifier )
-{}
+    : m_identifier( identifier )
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Stopper::apply()
 {
     SLM_TRACE_FUNC();
-    ::boost::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier);
+    std::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier);
     OSLM_FATAL_IF("Unable to stop bundle " << m_identifier << ". Not found.", bundle == 0);
     try
     {
diff --git a/SrcLib/core/fwRuntime/src/profile/Uninitializer.cpp b/SrcLib/core/fwRuntime/src/profile/Uninitializer.cpp
index c6505dd..cfd6cae 100644
--- a/SrcLib/core/fwRuntime/src/profile/Uninitializer.cpp
+++ b/SrcLib/core/fwRuntime/src/profile/Uninitializer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,14 +21,15 @@ namespace profile
 //------------------------------------------------------------------------------
 
 Uninitializer::Uninitializer( const std::string & identifier )
-: m_identifier( identifier )
-{}
+    : m_identifier( identifier )
+{
+}
 
 //------------------------------------------------------------------------------
 
 void Uninitializer::apply()
 {
-    ::boost::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier);
+    std::shared_ptr< Bundle >  bundle = Runtime::getDefault()->findBundle(m_identifier);
     OSLM_FATAL_IF("Unable to uninitialize bundle " << m_identifier << ". Not found.", bundle == 0);
     try
     {
diff --git a/SrcLib/core/fwRuntime/test/CMakeLists.txt b/SrcLib/core/fwRuntime/test/CMakeLists.txt
index 384db7d..3881996 100644
--- a/SrcLib/core/fwRuntime/test/CMakeLists.txt
+++ b/SrcLib/core/fwRuntime/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/core/fwRuntime/test/Properties.cmake b/SrcLib/core/fwRuntime/test/Properties.cmake
index 8ff3419..1818c68 100644
--- a/SrcLib/core/fwRuntime/test/Properties.cmake
+++ b/SrcLib/core/fwRuntime/test/Properties.cmake
@@ -3,5 +3,5 @@ set( NAME fwRuntimeTest )
 set( VERSION  )
 set( TYPE TEST )
 set( DEPENDENCIES fwCore fwRuntime )
-set( REQUIREMENTS  )
-
+set( REQUIREMENTS dataReg servicesReg )
+set(CPPUNITTEST_OPTIONS WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/SrcLib/core/fwRuntime/test/cppunit.options b/SrcLib/core/fwRuntime/test/cppunit.options
deleted file mode 100644
index b46ab87..0000000
--- a/SrcLib/core/fwRuntime/test/cppunit.options
+++ /dev/null
@@ -1,9 +0,0 @@
-CLASSTEST=[
-    'EConfigurationElementTest',
-    'RuntimeTest',
-    ]
-
-USE = ['boost','libxml2']
-LIB = ['fwCore_0-1','fwRuntime_0-3']
-REQUIREMENTS = ['dataReg_0-1', 'servicesReg_0-1']
-CONSOLE='yes'
diff --git a/SrcLib/core/fwRuntime/test/tu/include/EConfigurationElementTest.hpp b/SrcLib/core/fwRuntime/test/tu/include/EConfigurationElementTest.hpp
index 24f928a..f26ff34 100644
--- a/SrcLib/core/fwRuntime/test/tu/include/EConfigurationElementTest.hpp
+++ b/SrcLib/core/fwRuntime/test/tu/include/EConfigurationElementTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWRUNTIME_UT_ECONFIGURATIONELEMENTTEST_HPP_
-#define __FWRUNTIME_UT_ECONFIGURATIONELEMENTTEST_HPP_
+#ifndef __FWRUNTIME_UT_ECONFIGURATIONELEMENTTEST_HPP__
+#define __FWRUNTIME_UT_ECONFIGURATIONELEMENTTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -19,9 +19,9 @@ namespace ut
  */
 class EConfigurationElementTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( EConfigurationElementTest );
-    CPPUNIT_TEST( testConfiguration );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( EConfigurationElementTest );
+CPPUNIT_TEST( testConfiguration );
+CPPUNIT_TEST_SUITE_END();
 
 protected:
 
@@ -36,4 +36,4 @@ public:
 } // namespace ut
 } // namespace fwTools
 
-#endif //__FWRUNTIME_UT_ECONFIGURATIONELEMENTTEST_HPP_
+#endif //__FWRUNTIME_UT_ECONFIGURATIONELEMENTTEST_HPP__
diff --git a/SrcLib/core/fwRuntime/test/tu/include/RuntimeTest.hpp b/SrcLib/core/fwRuntime/test/tu/include/RuntimeTest.hpp
index dfb44f2..6cf2d41 100644
--- a/SrcLib/core/fwRuntime/test/tu/include/RuntimeTest.hpp
+++ b/SrcLib/core/fwRuntime/test/tu/include/RuntimeTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -19,9 +19,9 @@ namespace ut
  */
 class RuntimeTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( RuntimeTest );
-    CPPUNIT_TEST( testRuntime );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( RuntimeTest );
+CPPUNIT_TEST( testRuntime );
+CPPUNIT_TEST_SUITE_END();
 
 protected:
 
diff --git a/SrcLib/core/fwRuntime/test/tu/src/EConfigurationElementTest.cpp b/SrcLib/core/fwRuntime/test/tu/src/EConfigurationElementTest.cpp
index 74e9b50..ba2c319 100644
--- a/SrcLib/core/fwRuntime/test/tu/src/EConfigurationElementTest.cpp
+++ b/SrcLib/core/fwRuntime/test/tu/src/EConfigurationElementTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,15 +28,15 @@ void EConfigurationElementTest::tearDown()
 
 void EConfigurationElementTest::testConfiguration()
 {
-    const std::string NAME1 = "config_name1";
-    const std::string NAME2 = "config_name2";
-    const std::string NAME3 = "config_name3";
-    const std::string VALUE1 = "value1";
-    const std::string VALUE2 = "value2";
+    const std::string NAME1      = "config_name1";
+    const std::string NAME2      = "config_name2";
+    const std::string NAME3      = "config_name3";
+    const std::string VALUE1     = "value1";
+    const std::string VALUE2     = "value2";
     const std::string ATTRIBUTE1 = "attibute1";
 
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > config1( new ::fwRuntime::EConfigurationElement(NAME1));
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > config2( new ::fwRuntime::EConfigurationElement(NAME2));
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > config1( new ::fwRuntime::EConfigurationElement(NAME1));
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > config2( new ::fwRuntime::EConfigurationElement(NAME2));
 
     config1->addConfigurationElement(config2);
     config2->setAttributeValue(ATTRIBUTE1, VALUE1);
@@ -50,7 +50,8 @@ void EConfigurationElementTest::testConfiguration()
     CPPUNIT_ASSERT_EQUAL(VALUE1, config2->getExistingAttributeValue(ATTRIBUTE1));
     CPPUNIT_ASSERT_EQUAL(VALUE1, config2->getAttributeValue(ATTRIBUTE1));
 
-    ::boost::shared_ptr< ::fwRuntime::ConfigurationElement > config3 = ::boost::dynamic_pointer_cast< ::fwRuntime::ConfigurationElement >(config2);
+    std::shared_ptr< ::fwRuntime::ConfigurationElement > config3 =
+        std::dynamic_pointer_cast< ::fwRuntime::ConfigurationElement >(config2);
     CPPUNIT_ASSERT_EQUAL(config3, config1->findConfigurationElement(NAME2));
     CPPUNIT_ASSERT(config2->findConfigurationElement(NAME3) != NULL);
 }
diff --git a/SrcLib/core/fwRuntime/test/tu/src/RuntimeTest.cpp b/SrcLib/core/fwRuntime/test/tu/src/RuntimeTest.cpp
index fc23518..93bd769 100644
--- a/SrcLib/core/fwRuntime/test/tu/src/RuntimeTest.cpp
+++ b/SrcLib/core/fwRuntime/test/tu/src/RuntimeTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -37,35 +37,33 @@ void RuntimeTest::tearDown()
 void RuntimeTest::testRuntime()
 {
     // Bundles location
-#ifdef SPECIALINSTALL
-    ::boost::filesystem::path location = BUNDLEPATH;
-#else
-    ::boost::filesystem::path location =  ::boost::filesystem::current_path() / "Bundles/";
-#endif
-
-    if (::boost::filesystem::exists(location))
-    {
-        ::fwRuntime::Runtime * runtime = ::fwRuntime::Runtime::getDefault();
-
-        // Read bundles
-        runtime->addBundles(location);
-        CPPUNIT_ASSERT(runtime->bundlesBegin() !=  runtime->bundlesEnd());
-
-        // Test bundle dataReg
-        CPPUNIT_ASSERT(runtime->findBundle("dataReg"));
-        ::boost::shared_ptr< ::fwRuntime::Bundle > bundle = runtime->findBundle("dataReg");
-        bundle->setEnable(true);
-        CPPUNIT_ASSERT(bundle->isEnable());
-
-        // Test bundle servicesReg
-        ::boost::shared_ptr< ::fwRuntime::Bundle > bundle2 = runtime->findBundle("servicesReg");
-        bundle2->setEnable(true);
-
-        // Test runtime extensions
-        CPPUNIT_ASSERT(runtime->findExtensionPoint("::fwServices::registry::ServiceFactory"));
-        CPPUNIT_ASSERT(runtime->findExtensionPoint("::fwServices::registry::ServiceConfig"));
-        CPPUNIT_ASSERT(runtime->findExtensionPoint("::fwServices::registry::AppConfig"));
-    }
+    ::boost::filesystem::path location = ::boost::filesystem::current_path() /std::string( std::string(
+                                                                                               BUNDLE_PREFIX) + "/");
+
+    CPPUNIT_ASSERT(::boost::filesystem::exists(location));
+
+    ::fwRuntime::Runtime * runtime = ::fwRuntime::Runtime::getDefault();
+
+    // Read bundles
+    runtime->addBundles(location);
+    CPPUNIT_ASSERT(runtime->bundlesBegin() !=  runtime->bundlesEnd());
+
+    // Test bundle dataReg
+    CPPUNIT_ASSERT(runtime->findBundle("dataReg"));
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = runtime->findBundle("dataReg");
+    bundle->setEnable(true);
+    CPPUNIT_ASSERT(bundle->isEnable());
+
+    // Test bundle servicesReg
+    CPPUNIT_ASSERT(runtime->findBundle("servicesReg"));
+    std::shared_ptr< ::fwRuntime::Bundle > bundle2 = runtime->findBundle("servicesReg");
+    bundle2->setEnable(true);
+    CPPUNIT_ASSERT(bundle2->isEnable());
+
+    // Test runtime extensions
+    CPPUNIT_ASSERT(runtime->findExtensionPoint("::fwServices::registry::ServiceFactory"));
+    CPPUNIT_ASSERT(runtime->findExtensionPoint("::fwServices::registry::ServiceConfig"));
+    CPPUNIT_ASSERT(runtime->findExtensionPoint("::fwServices::registry::AppConfig"));
 }
 
 } // namespace ut
diff --git a/SrcLib/core/fwServices/CMakeLists.txt b/SrcLib/core/fwServices/CMakeLists.txt
index 3c03ea1..b530a5a 100644
--- a/SrcLib/core/fwServices/CMakeLists.txt
+++ b/SrcLib/core/fwServices/CMakeLists.txt
@@ -1,16 +1,5 @@
-
 fwLoadProperties()
 
-fwUseForwardInclude(
-    fwActivities
-    fwCom
-    fwCore
-    fwData
-    fwRuntime
-    fwThread
-    fwTools
-    )
-
-find_package (Boost REQUIRED)
+find_package(Boost COMPONENTS regex REQUIRED)
+fwLink(${Boost_REGEX_LIBRARY})
 fwForwardInclude(${Boost_INCLUDE_DIRS})
-
diff --git a/SrcLib/core/fwServices/COPYING b/SrcLib/core/fwServices/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwServices/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwServices/COPYING.LESSER b/SrcLib/core/fwServices/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwServices/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwServices/Properties.cmake b/SrcLib/core/fwServices/Properties.cmake
index 9ef424f..641c522 100644
--- a/SrcLib/core/fwServices/Properties.cmake
+++ b/SrcLib/core/fwServices/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwServices )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwActivities fwCom fwCore fwData fwDataCamp fwRuntime fwThread fwTools )
+set( DEPENDENCIES fwActivities fwCom fwDataCamp fwRuntime )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwServices/bin/build.options b/SrcLib/core/fwServices/bin/build.options
deleted file mode 100644
index 178f000..0000000
--- a/SrcLib/core/fwServices/bin/build.options
+++ /dev/null
@@ -1,14 +0,0 @@
-TYPE    = "shared"
-USE     = [ 'boost' ]
-LIB     = [ 
-            'fwRuntime_0-3',
-            'fwCore_0-1',
-            'fwTools_0-1',
-            'fwData_0-1',
-            'fwThread_0-1',
-            'fwCom_0-1',
-            'fwDataCamp_0-1',
-            'fwActivities_0-1',
-            ]
-VERSION = '0-1'
-
diff --git a/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hpp b/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hpp
index d51928d..8fc1c86 100644
--- a/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hpp
@@ -1,54 +1,46 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_CONFIGTEMPLATEMANAGER_HPP_
-#define _FWSERVICES_CONFIGTEMPLATEMANAGER_HPP_
+#ifndef __FWSERVICES_APPCONFIGMANAGER_HPP__
+#define __FWSERVICES_APPCONFIGMANAGER_HPP__
 
-#include <vector>
-#include <string>
-#include <utility>
+#include "fwServices/IAppConfigManager.hpp"
+#include "fwServices/IService.hpp"
+#include "fwServices/IXMLParser.hpp"
+#include "fwServices/config.hpp"
+#include "fwServices/registry/AppConfig.hpp"
 
-#include <boost/tuple/tuple.hpp>
+#include <fwCom/helper/SigSlotConnection.hpp>
 
-#include <fwTools/Object.hpp>
+#include <boost/tuple/tuple.hpp>
 
-#include <fwRuntime/ConfigurationElement.hpp>
+#include <string>
+#include <vector>
 
-#include "fwServices/config.hpp"
-#include "fwServices/IXMLParser.hpp"
-#include "fwServices/IService.hpp"
-#include "fwServices/helper/SigSlotConnection.hpp"
+namespace fwData
+{
+class Composite;
+}
 
 namespace fwServices
 {
 /**
- * @class   AppConfigManager
  * @brief   This class provides an API to manage config template.
- *
- * 
- * @date    2007-2009.
  */
-class FWSERVICES_CLASS_API AppConfigManager : public ::fwTools::Object
+class FWSERVICES_CLASS_API AppConfigManager : public ::fwServices::IAppConfigManager
 {
 protected:
-    enum ConfigState
-    {
-        STATE_CREATED,
-        STATE_STARTED,
-        STATE_STOPPED,
-        STATE_DESTROYED,
-    };
     typedef std::vector< ::fwServices::IService::wptr > ServiceContainer;
     typedef ::boost::tuple< std::string, bool > ConfigAttribute;
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((AppConfigManager)(::fwTools::Object),
+    fwCoreClassDefinitionsWithFactoryMacro((AppConfigManager)(::fwServices::IAppConfigManager),
                                            (()),
-                                           ::boost::make_shared< AppConfigManager >);
+                                           std::make_shared< AppConfigManager >);
 
     /// Constructor. Do nothing.
     FWSERVICES_API AppConfigManager();
@@ -56,48 +48,29 @@ public:
     /// Destructor. Do nothing.
     FWSERVICES_API virtual ~AppConfigManager();
 
-    /// Return state
-    bool isCreated() { return m_state == STATE_CREATED; }
-    bool isStarted() { return m_state == STATE_STARTED; }
-    bool isStopped() { return m_state == STATE_STOPPED; }
-    bool isDestroyed() { return m_state == STATE_DESTROYED; }
-
-    /// Set config param
-    void setConfig(::fwRuntime::ConfigurationElement::csptr cfgElem)
-    {
-        m_cfgElem = cfgElem;
-    }
-
-    /// Get config root
-    ::fwData::Object::sptr getConfigRoot() const
-    {
-        return m_configuredObject;
-    }
-
-    /// Get config root with autocast
-    template < class ClassName >
-    ::boost::shared_ptr< ClassName > getConfigRoot() const;
-
-    /// Creates objects and services from config
+    /**
+     * @name Overrides
+     * @{
+     */
+    FWSERVICES_API virtual void setConfig(const std::string& configId,
+                                          const FieldAdaptorType& replaceFields = FieldAdaptorType());
+    FWSERVICES_API virtual void setConfig(const std::string& configId, const ::fwData::Composite::csptr& replaceFields);
+    FWSERVICES_API virtual ::fwData::Object::sptr getConfigRoot() const;
+    FWSERVICES_API virtual void launch();
+    FWSERVICES_API virtual void stopAndDestroy();
     FWSERVICES_API virtual void create();
-
-    /// Starts services specified in config
     FWSERVICES_API virtual void start();
-
-    /// Updates services specified in config
     FWSERVICES_API virtual void update();
-
-    /// Stops services specified in config
     FWSERVICES_API virtual void stop();
-
-    /// Destroys services specified in config
     FWSERVICES_API virtual void destroy();
+    ///@}
 
-    /// Calls methods : create, start then update.
-    FWSERVICES_API void launch();
-
-    /// Stops and destroys services specified in config, then resets the configRoot sptr.
-    FWSERVICES_API void stopAndDestroy();
+    /**
+     * @brief Starts the bundle associated to the config
+     * @note  Does nothing if the bundle is already started or if the config id is not specified (ie. if config is set
+     *        with setConfig(::fwRuntime::ConfigurationElement::csptr cfgElem) ).
+     */
+    FWSERVICES_API virtual void startBundle();
 
 protected:
     struct ProxyConnections
@@ -112,10 +85,12 @@ protected:
         ProxyEltVectType m_signals;
 
         ProxyConnections(const std::string& channel) : m_channel(channel)
-        {}
+        {
+        }
 
         ~ProxyConnections()
-        {}
+        {
+        }
 
         void addSlotConnection(UIDType uid, KeyType key)
         {
@@ -128,41 +103,42 @@ protected:
     };
     typedef std::vector<ProxyConnections> ProxyConnectionsVectType;
 
+    /// Root of the config
     ::fwData::Object::sptr m_configuredObject;
+
     ::fwServices::IXMLParser::sptr m_objectParser;
-    ::fwRuntime::ConfigurationElement::csptr m_cfgElem;
     ProxyConnectionsVectType m_vectProxyCtns;
 
-    ConfigState m_state;
+    std::string m_configId;
 
     ServiceContainer m_createdSrv;
     ServiceContainer m_startedSrv;
-    helper::SigSlotConnection::sptr m_connections;
+    ::fwCom::helper::SigSlotConnection m_connections;
 
     FWSERVICES_API ::fwData::Object::sptr getNewObject(
-            ConfigAttribute type,
-            const std::string& uid,
-            ConfigAttribute id=ConfigAttribute("", false));
+        ConfigAttribute type,
+        const std::string& uid,
+        ConfigAttribute id = ConfigAttribute("", false));
 
     FWSERVICES_API ::fwData::Object::sptr getNewObject(
-            ConfigAttribute type,
-            ConfigAttribute uid=ConfigAttribute("", false),
-            ConfigAttribute id=ConfigAttribute("", false));
+        ConfigAttribute type,
+        ConfigAttribute uid = ConfigAttribute("", false),
+        ConfigAttribute id = ConfigAttribute("", false));
 
     FWSERVICES_API ::fwData::Object::sptr getRefObject(
-            ConfigAttribute type,
-            const std::string& uid,
-            ConfigAttribute id=ConfigAttribute("", false));
+        ConfigAttribute type,
+        const std::string& uid,
+        ConfigAttribute id = ConfigAttribute("", false));
 
     FWSERVICES_API ::fwServices::IService::sptr getNewService(
-            ConfigAttribute type,
-            ConfigAttribute uid,
-            ConfigAttribute implType);
+        ConfigAttribute type,
+        ConfigAttribute uid,
+        ConfigAttribute implType);
 
     FWSERVICES_API void autoSigSlotConnection(
-            ::fwData::Object::sptr obj,
-            ::fwServices::IService::sptr srv,
-            ConfigAttribute priority);
+        ::fwData::Object::sptr obj,
+        ::fwServices::IService::sptr srv,
+        ConfigAttribute priority);
 
     FWSERVICES_API void startConnections();
     FWSERVICES_API void stopConnections();
@@ -179,13 +155,10 @@ protected:
 
     FWSERVICES_API virtual void bindService(::fwRuntime::ConfigurationElement::csptr srvElem);
     FWSERVICES_API virtual void createConnections();
-    FWSERVICES_API virtual void createConnection(::fwRuntime::ConfigurationElement::csptr connectionCfg);
     FWSERVICES_API virtual void createProxy(::fwRuntime::ConfigurationElement::csptr config);
     FWSERVICES_API virtual void destroyProxies();
 };
 
 } // namespace fwServices
 
-#include "fwServices/AppConfigManager.hxx"
-
-#endif // _FWSERVICES_CONFIGTEMPLATEMANAGER_HPP_
+#endif // __FWSERVICES_APPCONFIGMANAGER_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hxx b/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hxx
deleted file mode 100644
index c4ac69c..0000000
--- a/SrcLib/core/fwServices/include/fwServices/AppConfigManager.hxx
+++ /dev/null
@@ -1,32 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSERVICES_CONFIGTEMPLATEMANAGER_HXX_
-#define _FWSERVICES_CONFIGTEMPLATEMANAGER_HXX_
-
-#include <fwCore/base.hpp>
-
-namespace fwData
-{
-    class Object;
-}
-
-namespace fwServices
-{
-
-template<class CLASSNAME>
-SPTR(CLASSNAME) AppConfigManager::getConfigRoot() const
-{
-    SPTR(::fwData::Object) obj = this->getConfigRoot();
-    SPTR(CLASSNAME) rootObject = CLASSNAME::dynamicCast( obj ) ;
-    SLM_ASSERT("Unable to cast root object to " << CLASSNAME::classname(), rootObject);
-    return rootObject;
-}
-
-
-}
-
-#endif // _FWSERVICES_CONFIGTEMPLATEMANAGER_HXX_
diff --git a/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp b/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp
new file mode 100644
index 0000000..8e37f97
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/AppConfigManager2.hpp
@@ -0,0 +1,196 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_APPCONFIGMANAGER2_HPP__
+#define __FWSERVICES_APPCONFIGMANAGER2_HPP__
+
+#include "fwServices/IAppConfigManager.hpp"
+#include "fwServices/IService.hpp"
+#include "fwServices/IXMLParser.hpp"
+#include "fwServices/config.hpp"
+#include "fwServices/helper/Config.hpp"
+#include "fwServices/helper/ProxyConnections.hpp"
+#include "fwServices/registry/AppConfig2.hpp"
+
+#include <fwCom/HasSlots.hpp>
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+namespace fwData
+{
+class Composite;
+}
+
+namespace fwServices
+{
+/**
+ * @brief   This class provides an API to manage config template.
+ */
+class FWSERVICES_CLASS_API AppConfigManager2 :  public ::fwServices::IAppConfigManager,
+                                                public ::fwCom::HasSlots
+{
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((AppConfigManager2)(::fwServices::IAppConfigManager),
+                                           (()),
+                                           std::make_shared< AppConfigManager2 >);
+    fwCoreAllowSharedFromThis();
+
+    /// Constructor. Do nothing.
+    FWSERVICES_API AppConfigManager2();
+
+    /// Destructor. Do nothing.
+    FWSERVICES_API virtual ~AppConfigManager2();
+
+    /**
+     * @name Overrides
+     * @{
+     */
+    FWSERVICES_API virtual void setConfig(const std::string& configId,
+                                          const FieldAdaptorType& replaceFields = FieldAdaptorType());
+    FWSERVICES_API virtual void setConfig(const std::string& configId, const ::fwData::Composite::csptr& replaceFields);
+    FWSERVICES_API virtual ::fwData::Object::sptr getConfigRoot() const;
+    FWSERVICES_API virtual void launch();
+    FWSERVICES_API virtual void stopAndDestroy();
+    FWSERVICES_API virtual void create();
+    FWSERVICES_API virtual void start();
+    FWSERVICES_API virtual void update();
+    FWSERVICES_API virtual void stop();
+    FWSERVICES_API virtual void destroy();
+    ///@}
+
+    /**
+     * @brief Starts the bundle associated to the config
+     * @note  Does nothing if the bundle is already started or if the config id is not specified (ie. if config is set
+     *        with setConfig(::fwRuntime::ConfigurationElement::csptr cfgElem) ).
+     */
+    FWSERVICES_API virtual void startBundle();
+
+    /// Set it to true if we are testing the class
+    FWSERVICES_API void setIsUnitTest(bool isUnitTest);
+
+private:
+
+    typedef ::std::pair< std::string, bool > ConfigAttribute;
+    typedef ::fwServices::helper::ProxyConnections ProxyConnections;
+    typedef ::fwServices::IService::Config ServiceConfig;
+
+    ::fwData::Object::sptr findObject(const std::string& uid, const std::string& errMsgTail) const;
+
+    ::fwData::Object::sptr getNewObject(ConfigAttribute type, const std::string& uid) const;
+
+    ::fwData::Object::sptr getNewObject(ConfigAttribute type,
+                                        ConfigAttribute uid = ConfigAttribute("", false)) const;
+
+    ::fwData::Object::sptr getRefObject(ConfigAttribute type, const std::string& uid) const;
+
+    ::fwServices::IService::sptr getNewService(const std::string& uid, const std::string& implType) const;
+
+    void stopStartedServices();
+    void destroyCreatedServices();
+
+    void processStartItems();
+    void processUpdateItems();
+
+    /// Parse objects section and create objects
+    void createObjects(::fwRuntime::ConfigurationElement::csptr cfgElem);
+
+    /// Parse services and create all the services that can be instantiated
+    void createServices(::fwRuntime::ConfigurationElement::csptr cfgElem);
+
+    /// Create a single service from its configuration
+    ::fwServices::IService::sptr createService(const ServiceConfig& srvConfig);
+
+    /// Parse connection sections and creates them
+    void createConnections();
+
+    /// Stops and destroys services specified in config, then resets the configRoot sptr.
+    std::string msgHead() const;
+
+    /// Slot: add objects
+    void addObjects(::fwData::Object::sptr obj, const std::string& id);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Object::sptr obj, const std::string& id);
+
+    /// Connect signal and slots
+    void connectProxy(const std::string& channel, const ProxyConnections& connectCfg);
+
+    void destroyProxy(const std::string& channel, const ProxyConnections& proxyCfg, const std::string& key = "",
+                      fwData::Object::csptr hintObj = nullptr);
+    void destroyProxies();
+
+    /// Given a list of UIDs or WIDs, get a friendly printable message
+    static std::string getUIDListAsString(const std::vector<std::string>& uidList);
+
+    typedef std::pair< ::fwData::Object::sptr, ::fwServices::IXMLParser::sptr> CreatedObjectType;
+    /// Map containing the object and its XML parser
+    std::unordered_map<std::string, CreatedObjectType> m_createdObjects;
+
+    struct DeferredObjectType
+    {
+        std::vector< ServiceConfig > m_servicesCfg;
+        std::unordered_map< std::string, ProxyConnections > m_proxyCnt;
+        /// Copy of the object pointer necessary to access signals/slots when destroying proxy
+        ::fwData::Object::sptr m_object;
+    };
+
+    /// Map indexed by the object uid, containing all the service configurations that depend on this object
+    std::unordered_map<std::string, DeferredObjectType > m_deferredObjects;
+
+    /// All the identifiers of the deferred services
+    std::unordered_set<std::string> m_deferredServices;
+
+    /// All proxies of created objects, ordered by channel name
+    std::unordered_map<std::string, ProxyConnections> m_createdObjectsProxies;
+
+    struct ServiceProxyType
+    {
+        std::unordered_map< std::string, ProxyConnections > m_proxyCnt;
+    };
+    std::unordered_map< std::string, ServiceProxyType > m_servicesProxies;
+
+    /// Identifier of this configuration
+    std::string m_configId;
+
+    typedef std::vector< ::fwServices::IService::wptr > ServiceContainer;
+
+    /// List of services created in this configuration
+    ServiceContainer m_createdSrv;
+
+    /// List of services started in this configuration
+    ServiceContainer m_startedSrv;
+
+    /// While we need to maintain old and new services behavior, we need a dummy data for new services
+    /// that don't work on any data.
+    /// TODO: Remove with V1
+    ::fwData::Composite::sptr m_tmpRootObject;
+
+    /// Counter used to generate a unique proxy name
+    unsigned int m_proxyID;
+
+    ::fwCom::Connection m_addObjectConnection;
+    ::fwCom::Connection m_removeObjectConnection;
+
+    /// Hack to know if we are doing a unit test. We skip some code in this case to be able to launch a configuration
+    bool m_isUnitTest;
+};
+
+// ------------------------------------------------------------------------
+
+inline std::string AppConfigManager2::msgHead() const
+{
+    return "[" + m_configId + "] ";
+}
+
+} // namespace fwServices
+
+#endif // __FWSERVICES_APPCONFIGMANAGER2_HPP__
+
diff --git a/SrcLib/core/fwServices/include/fwServices/Base.hpp b/SrcLib/core/fwServices/include/fwServices/Base.hpp
deleted file mode 100644
index 9628d54..0000000
--- a/SrcLib/core/fwServices/include/fwServices/Base.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSERVICES_BASE_HPP_
-#define _FWSERVICES_BASE_HPP_
-
-// For implementing or manipulating a service type
-#include "fwServices/IService.hpp"
-
-// For declaring service to object association
-#include "fwServices/macros.hpp"
-
-// For communications
-#include "fwServices/ObjectMsg.hpp"
-
-
-// For adding/get/erasing/info (has/support/implementationIds)
-#include "fwServices/op/Add.hpp"
-#include "fwServices/op/Get.hpp"
-
-
-#endif /*_FWSERVICES_BASE_HPP_*/
diff --git a/SrcLib/core/fwServices/include/fwServices/IAppConfigManager.hpp b/SrcLib/core/fwServices/include/fwServices/IAppConfigManager.hpp
new file mode 100644
index 0000000..6ffff28
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/IAppConfigManager.hpp
@@ -0,0 +1,159 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_IAPPCONFIGMANAGER_HPP__
+#define __FWSERVICES_IAPPCONFIGMANAGER_HPP__
+
+#include "fwServices/config.hpp"
+#include "fwServices/registry/AppInfo.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwTools/Object.hpp>
+
+namespace fwServices
+{
+/**
+ * @brief   This class provides an interface to manage configurations template.
+ */
+class FWSERVICES_CLASS_API IAppConfigManager : public ::fwTools::Object
+{
+public:
+    typedef registry::FieldAdaptorType FieldAdaptorType;
+
+    fwCoreNonInstanciableClassDefinitionsMacro((IAppConfigManager)(::fwTools::Object));
+
+    /// Constructor. Do nothing.
+    FWSERVICES_API IAppConfigManager();
+
+    /// Destructor. Do nothing.
+    FWSERVICES_API virtual ~IAppConfigManager();
+
+    /// Return a new AppConfigManager implementation. Should be used for all the IAppConfigManager of the application,
+    /// bexcept the first one which must be explicitly called.
+    FWSERVICES_API static SPTR(IAppConfigManager) New();
+
+    /// Return state
+    bool isCreated() const;
+    bool isStarted() const;
+    bool isStopped() const;
+    bool isDestroyed() const;
+
+    /// Set config param
+    void setConfig(::fwRuntime::ConfigurationElement::csptr cfgElem);
+
+    /**
+     * @brief Set configuration
+     * @param configId the identifier of the requested config.
+     * @param replaceFields the associations between the value and the pattern to replace in the config.
+     */
+    FWSERVICES_API virtual void setConfig(const std::string& configId,
+                                          const FieldAdaptorType &replaceFields = FieldAdaptorType()) = 0;
+
+    /**
+     * @brief Set configuration
+     * @param configId the identifier of the requested config.
+     * @param replaceFields composite of association between the value and the pattern to replace in the config.
+     */
+    FWSERVICES_API virtual void setConfig(const std::string& configId,
+                                          const ::fwData::Composite::csptr &replaceFields) = 0;
+
+    /// Get config root
+    FWSERVICES_API virtual ::fwData::Object::sptr getConfigRoot() const = 0;
+
+    /// Calls methods : create, start then update.
+    FWSERVICES_API virtual void launch() = 0;
+
+    /// Stops and destroys services specified in config, then resets the configRoot sptr.
+    FWSERVICES_API virtual void stopAndDestroy() = 0;
+
+    /// Creates objects and services from config
+    FWSERVICES_API virtual void create() = 0;
+
+    /// Starts services specified in config
+    FWSERVICES_API virtual void start() = 0;
+
+    /// Updates services specified in config
+    FWSERVICES_API virtual void update() = 0;
+
+    /// Stops services specified in config
+    FWSERVICES_API virtual void stop() = 0;
+
+    /// Destroys services specified in config
+    FWSERVICES_API virtual void destroy() = 0;
+
+protected:
+    enum ConfigState
+    {
+        STATE_CREATED,
+        STATE_STARTED,
+        STATE_STOPPED,
+        STATE_DESTROYED,
+    };
+
+    /// XML Configuration tree
+    ::fwRuntime::ConfigurationElement::csptr m_cfgElem;
+
+    /// Running state of the app config manager
+    ConfigState m_state;
+
+    /// Tells which implementation we are running
+    static int s_VERSION;
+};
+
+//------------------------------------------------------------------------------
+
+inline IAppConfigManager::IAppConfigManager() :
+    m_state(STATE_DESTROYED)
+{
+}
+
+//------------------------------------------------------------------------------
+
+inline IAppConfigManager::~IAppConfigManager()
+{
+
+}
+
+//------------------------------------------------------------------------------
+
+inline bool IAppConfigManager::isCreated() const
+{
+    return m_state == STATE_CREATED;
+}
+
+//------------------------------------------------------------------------------
+
+inline bool IAppConfigManager::isStarted() const
+{
+    return m_state == STATE_STARTED;
+}
+
+//------------------------------------------------------------------------------
+
+inline bool IAppConfigManager::isStopped() const
+{
+    return m_state == STATE_STOPPED;
+}
+
+//------------------------------------------------------------------------------
+
+inline bool IAppConfigManager::isDestroyed() const
+{
+    return m_state == STATE_DESTROYED;
+}
+
+//------------------------------------------------------------------------------
+
+inline void IAppConfigManager::setConfig(fwRuntime::ConfigurationElement::csptr cfgElem)
+{
+    m_cfgElem = cfgElem;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace fwServices
+
+#endif // __FWSERVICES_IAPPCONFIGMANAGER_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/IController.hpp b/SrcLib/core/fwServices/include/fwServices/IController.hpp
index b5d04e2..cfe3c27 100644
--- a/SrcLib/core/fwServices/include/fwServices/IController.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/IController.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWSERVICES_ICONTROLLER_HPP_
-#define FWSERVICES_ICONTROLLER_HPP_
+#ifndef __FWSERVICES_ICONTROLLER_HPP__
+#define __FWSERVICES_ICONTROLLER_HPP__
 
 #include "fwServices/config.hpp"
 #include "fwServices/IService.hpp"
@@ -17,7 +17,7 @@ namespace fwServices
  * @brief   This interface defines control service API. Does nothing particularly, can be considered as a default service type to be implemented by unclassified services.
  *
  * @class   IController
- * 
+ *
  * @date    2007-2009.
  */
 class FWSERVICES_CLASS_API IController : public ::fwServices::IService
@@ -25,7 +25,7 @@ class FWSERVICES_CLASS_API IController : public ::fwServices::IService
 
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IController)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IController)(::fwServices::IService) );
 
 protected:
 
@@ -39,4 +39,4 @@ protected:
 
 }
 
-#endif // FWSERVICES_ICONTROLLER_HPP_
+#endif // __FWSERVICES_ICONTROLLER_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/IEditionService.hpp b/SrcLib/core/fwServices/include/fwServices/IEditionService.hpp
deleted file mode 100644
index 1728d34..0000000
--- a/SrcLib/core/fwServices/include/fwServices/IEditionService.hpp
+++ /dev/null
@@ -1,88 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSERVICES_IEDITIONSERVICE_HPP_
-#define _FWSERVICES_IEDITIONSERVICE_HPP_
-
-#include <list>
-
-#include <fwTools/Object.hpp>
-
-
-#include "fwServices/config.hpp"
-#include "fwServices/IService.hpp"
-#include "fwServices/ObjectMsg.hpp"
-
-namespace fwServices
-{
-class ObjectMsg ;
-}
-
-namespace fwServices
-{
-
-/**
- * @brief   This interface defines edition service API. It mainly has the role of the subject in the observer design pattern.
- * @class   IEditionService
- * 
-
- * @date    2007-2009.
- *
- * This service notifies modifications performed on its associated object. This can be seen a delegate of traditional notifications performed by objects (subjects) which are themselves subject to modification. This ensures a good separation of concerns.
- * @todo the design assumes that any object can have only one service of type IEditionService. For robustness, this should be controlled.
- * @note notification are propagated to "listening" services by invoking the update(const fwServices::ObjectMsg::csptr  ) methods on referenced communication channels which forward this to their destination service acting as the observer.
- * @note could be improved by directly registering the destination service instead of the communication channel. Communication channel, being a first class entity between the subject and observer, have to be preferred to facilitate the configuration, the (des)activation and the monitoring of communications over a software system.
- * @note special thanks to Guillaume Brocker
- */
-class FWSERVICES_CLASS_API IEditionService : public fwServices::IService
-{
-    friend class GlobalEventManager;
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (IEditionService)(::fwServices::IService) ) ;
-
-    /**
-     * @brief Invoke the IEditionService::notify( ObjectMsg::csptr ) method on _pSubject.
-     * @param[in] _pSource The service which send the message
-     * @param[in] _pSubject The subject of the message ( to retrieve listeners of the subject )
-     * @param[in] _pMsg message notify to associated object listeners
-     *
-     *  This method notifies observers of _pSubject. It changes notification status of _pSource during all notification, set correct source and subject of msg and timestamp the message.
-     */
-    FWSERVICES_API static void notify(
-            ::fwServices::IService::sptr _pSource,
-            ::fwData::Object::sptr _pSubject,
-            ObjectMsg::sptr _pMsg );
-
-    /**
-     * @brief Invoke the IEditionService::notify( ObjectMsg::csptr ) method on _pSubject.
-     * @param[in] _pSource The service which send the message
-     * @param[in] _pSubject The subject of the message ( to retrieve listeners of the subject )
-     * @param[in] _pMsg message notify to associated object listeners
-     * @param[in] _allowLoops Allow loops (be really careful)
-     *
-     *  This method notifies observers of _pSubject. It changes notification status of _pSource during all notification, set correct source and subject of msg and timestamp the message.
-     */
-    FWSERVICES_API static void notify(
-            ::fwServices::IService::sptr _pSource,
-            ::fwData::Object::sptr _pSubject,
-            ObjectMsg::sptr _pMsg,
-            bool _allowLoops );
-
-protected:
-
-    /// Constructor. Do nothing.
-    FWSERVICES_API IEditionService() ;
-
-    /// Destructor. Do nothing.
-    FWSERVICES_API virtual ~IEditionService() throw();
-
-};
-
-}
-
-#endif // _FWSERVICES_IEDITIONSERVICE_HPP_
diff --git a/SrcLib/core/fwServices/include/fwServices/IParametersService.hpp b/SrcLib/core/fwServices/include/fwServices/IParametersService.hpp
new file mode 100644
index 0000000..6bb4c70
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/IParametersService.hpp
@@ -0,0 +1,87 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_IPARAMETERSSERVICE_HPP__
+#define __FWSERVICES_IPARAMETERSSERVICE_HPP__
+
+#include "fwServices/config.hpp"
+
+#include <fwServices/IService.hpp>
+
+#include <cstdint>
+
+namespace fwServices
+{
+
+/**
+ * @brief   This interface defines a basic slots to receive parameter values from signals.
+ *
+ * It is designed to be used in conjunction with ::gui::editor::SParameters, to help the user to receive
+ * parameters. Instead of redefining all slots, thus you can simply inherit from this interface and override the virtual
+ * function you need. Then connect the ::gui::editor::SParameters signal(s) with the slot(s) of this interface in the
+ * configuration.
+
+ * @section Slots Slots
+ * - \b setBoolParameter(bool, std::string) : Receive a boolean parameter along with the identifier.
+ * - \b setDoubleParameter(double, std::string) : Receive a real parameter along with the identifier.
+ * - \b setDoubleParameter(double, double, std::string) : Receive two real parameters along with the identifier.
+ * - \b setDoubleParameter(double, double, double, std::string) : Receive three real parameters along with the identifier.
+ * - \b setIntParameter(int, std::string) : Receive an integer parameter along with the identifier.
+ * - \b setIntParameter(int, int, std::string) : Receive two integer parameters along with the identifier.
+ * - \b setIntParameter(int, int, int, std::string) : Receive three integer parameters along with the identifier.
+ */
+class FWSERVICES_CLASS_API IParametersService : public ::fwServices::IService
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (IParametersService)(::fwServices::IService) );
+
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_BOOL_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_COLOR_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_DOUBLE_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_DOUBLE2_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_DOUBLE3_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_INT_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_INT2_PARAMETER_SLOT;
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SET_INT3_PARAMETER_SLOT;
+
+protected:
+
+    /// Constructor. Create all slots.
+    FWSERVICES_API IParametersService();
+
+    /// Destructor. Do nothing.
+    FWSERVICES_API virtual ~IParametersService();
+
+    /// Slot: This method is used to set an boolean parameter.
+    FWSERVICES_API virtual void setBoolParameter(bool val, std::string key);
+
+    /// Slot: This method is used to set a color parameter.
+    FWSERVICES_API virtual void setColorParameter(std::array<std::uint8_t, 4> color, std::string key);
+
+    /// Slot: This method is used to set a double parameter.
+    FWSERVICES_API virtual void setDoubleParameter(double val, std::string key);
+
+    /// Slot: This method is used to set two double parameters.
+    FWSERVICES_API virtual void setDouble2Parameter(double val0, double val1, std::string key);
+
+    /// Slot: This method is used to set three double parameters.
+    FWSERVICES_API virtual void setDouble3Parameter(double val0, double val1, double val2, std::string key);
+
+    /// Slot: This method is used to set an integer parameter.
+    FWSERVICES_API virtual void setIntParameter(int val, std::string key);
+
+    /// Slot: This method is used to set two int parameters.
+    FWSERVICES_API virtual void setInt2Parameter(int val0, int val1, std::string key);
+
+    /// Slot: This method is used to set three int parameters.
+    FWSERVICES_API virtual void setInt3Parameter(int val0, int val1, int val2, std::string key);
+};
+
+}
+
+#endif // __FWSERVICES_IPARAMETERSSERVICE_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/IService.hpp b/SrcLib/core/fwServices/include/fwServices/IService.hpp
index 062aecf..072ff7a 100644
--- a/SrcLib/core/fwServices/include/fwServices/IService.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/IService.hpp
@@ -1,30 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_ISERVICE_HPP_
-#define _FWSERVICES_ISERVICE_HPP_
+#ifndef __FWSERVICES_ISERVICE_HPP__
+#define __FWSERVICES_ISERVICE_HPP__
 
-#include <boost/property_tree/ptree.hpp>
+#include "fwServices/config.hpp"
+#include "fwServices/factory/new.hpp"
+#include "fwServices/helper/ProxyConnections.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/HasSlots.hpp>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
 
-#include <deque>
+#include <fwData/Object.hpp>
 
-#include <fwTools/Failed.hpp>
-#include <fwTools/Object.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
 
-#include <fwThread/Worker.hpp>
+#include <fwTools/Failed.hpp>
+#include <fwTools/Object.hpp>
 
-#include <fwCom/Slots.hpp>
-#include <fwCom/HasSlots.hpp>
-#include <fwCom/HasSignals.hpp>
+#include <boost/property_tree/ptree.hpp>
 
-#include "fwServices/config.hpp"
-#include "fwServices/ObjectMsg.hpp"
-#include "fwServices/factory/new.hpp"
-#include "fwServices/helper/SigSlotConnection.hpp"
+#include <cstdint>
 
 namespace fwServices
 {
@@ -32,32 +34,83 @@ namespace registry
 {
 class ObjectService;
 }
+namespace fwThread
+{
+class Worker;
+}
 
-typedef std::pair< std::string , std::string > ObjectServiceKeyType ;
+#define KEY_GROUP_NAME(key, index) (key + "#" + std::to_string(index) )
 
 /**
  * @brief   Base class for all services.
- * @class   IService
- * 
- * @date    2007-2009.
  *
- * This class defines the API to use and declare services. The service state aims at imposing method execution order (i.e. configure(), start(), update() or update(const fwServices::ObjectMsg::sptr), stop()).
+ * This class defines the API to use and declare services.
+ * The service state aims to impose the execution order (i.e. configure(), start(), update() or, stop()).
  *
- * @todo replace tests on status in start, stop, ... methods by assertions.
- * @todo Refactoring of SWAPPING status. Perhaps must be a special status as UPDATING or UPDATING must be another GlobalStatus. it must be homogeneous.
- * @todo Add a new method to test if m_associatedObject has expired
+ * @section Signals Signals
+ * - \b started() : Emitted when the service has started.
+ * - \b updated() : Emitted when the service has updated.
+ * - \b stopped() : Emitted when the service has stopped.
+ *
+ * @section Slots Slots
+ * - \b start() : Start the service.
+ * - \b update() : Update the service.
+ * - \b stop() : Stop the service.
+ * - \b swap() : @deprecated Swap the current object.
+ * - \b swapKey(const KeyType&, ::fwData::Object::sptr) : Swap the object at the given key with the object in parameter.
  */
-class FWSERVICES_CLASS_API IService : public ::fwTools::Object, public ::fwCom::HasSlots, public ::fwCom::HasSignals
+class FWSERVICES_CLASS_API IService : public ::fwTools::Object,
+                                      public ::fwCom::HasSlots,
+                                      public ::fwCom::HasSignals
 {
 
-    // to give to OSR an access on IService.m_associatedObject;
-    friend class registry::ObjectService;
+// to give to OSR an access on IService.m_associatedObject;
+friend class registry::ObjectService;
+friend class AppConfigManager2;
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (IService)(::fwTools::Object) );
+    fwCoreAllowSharedFromThis();
 
-public :
     typedef ::boost::property_tree::ptree ConfigType;
 
-    fwCoreServiceClassDefinitionsMacro ( (IService)(::fwTools::Object) ) ;
-    fwCoreAllowSharedFromThis();
+    typedef std::string IdType;
+    typedef std::string KeyType;
+    typedef std::map< KeyType, CWPTR( ::fwData::Object )> InputMapType;
+    typedef std::map< KeyType, WPTR( ::fwData::Object )> OutputMapType;
+
+    enum class AccessType : std::uint8_t
+    {
+        INPUT,
+        OUTPUT,
+        INOUT,
+    };
+
+    /// Used to store object configuration in a service.
+    struct ObjectServiceConfig
+    {
+        std::string m_uid;
+        std::string m_key;
+        AccessType m_access;
+        bool m_autoConnect;
+        bool m_optional;
+    };
+
+    /// Used to store a service configuration.
+    struct Config
+    {
+        std::string m_uid;
+        std::string m_type;
+        bool m_globalAutoConnect;
+        std::string m_worker;
+        std::vector<ObjectServiceConfig> m_objects;
+        std::map<std::string, size_t> m_groupSize;
+        CSPTR(::fwRuntime::ConfigurationElement) m_config;
+    };
+
+    /// Name of the key to identify the default Composite object that is used for services that don't work on any data.
+    /// @remark For V1 compatibility purpose, this object is currently present on all services.
+    FWSERVICES_API static const std::string s_DEFAULT_OBJECT;
 
     /**
      * @name Definition of service status
@@ -92,6 +145,20 @@ public :
 
     //@}
 
+    /**
+     * @name Signal API
+     */
+    //@{
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_STARTED_SIG;
+    typedef ::fwCom::Signal<void ()> StartedSignalType;
+
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_UPDATED_SIG;
+    typedef ::fwCom::Signal<void ()> UpdatedSignalType;
+
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_STOPPED_SIG;
+    typedef ::fwCom::Signal<void ()> StoppedSignalType;
+
+    //@}
 
     /**
      * @name Slot API
@@ -110,17 +177,17 @@ public :
     FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_UPDATE_SLOT;
     typedef ::fwCom::Slot<SharedFutureType()> UpdateSlotType;
 
-    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_RECEIVE_SLOT;
-    typedef ::fwCom::Slot<void(ObjectMsg::csptr)> ReceiveSlotType;
-
     FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SWAP_SLOT;
     typedef ::fwCom::Slot<SharedFutureType(::fwData::Object::sptr)> SwapSlotType;
 
+    FWSERVICES_API static const ::fwCom::Slots::SlotKeyType s_SWAPKEY_SLOT;
+    typedef ::fwCom::Slot<SharedFutureType(const KeyType&, ::fwData::Object::sptr)> SwapKeySlotType;
+
     /// Initializes m_associatedWorker and associates this worker to all service slots
-    FWSERVICES_API void setWorker( ::fwThread::Worker::sptr worker );
+    FWSERVICES_API void setWorker( SPTR(::fwThread::Worker) worker );
 
     /// Returns associate worker
-    FWSERVICES_API ::fwThread::Worker::sptr getWorker() const;
+    FWSERVICES_API SPTR(::fwThread::Worker) getWorker() const;
 
     //@}
 
@@ -135,14 +202,21 @@ public :
      * @param[in] _cfgElement a structure which represents the xml configuration
      * @post m_configurationState == UNCONFIGURED
      */
-    FWSERVICES_API void setConfiguration( const ::fwRuntime::ConfigurationElement::sptr _cfgElement ) ;
+    FWSERVICES_API void setConfiguration( const ::fwRuntime::ConfigurationElement::sptr _cfgElement );
+
+    /**
+     * @brief Set the configuration.
+     * @param[in] _configuration whole configuration of the service.
+     * @post m_configurationState == UNCONFIGURED
+     */
+    FWSERVICES_API void setConfiguration( const Config& _configuration);
 
     /**
      * @brief Affect the configuration, using a boost property tree
      * @param[in] ptree property tree
      * @post m_configurationState == UNCONFIGURED
      */
-    FWSERVICES_API void setConfiguration( const ConfigType &ptree ) ;
+    FWSERVICES_API void setConfiguration( const ConfigType& ptree );
 
     /**
      * @brief Invoke configuring() if m_globalState == STOPPED. Invoke reconfiguring() if m_globalState == STARTED. Does nothing otherwise.
@@ -150,13 +224,13 @@ public :
      * @post m_configurationState == CONFIGURED
      * @note invoke checkConfiguration()
      */
-    FWSERVICES_API void configure() ;
+    FWSERVICES_API void configure();
 
     /**
      * @brief Invoke starting() if m_globalState == STOPPED. Does nothing otherwise.
      * @post m_globalState == STARTED
      */
-    FWSERVICES_API SharedFutureType start(); //throw( ::fwTools::Failed );
+    FWSERVICES_API SharedFutureType start();
 
     /**
      * @brief Invoke stopping() if m_globalState == STARTED. Does nothing otherwise. Stops all observations.
@@ -164,28 +238,42 @@ public :
      * @post m_globalState == STOPPED
      *
      */
-    FWSERVICES_API SharedFutureType stop(); //throw( ::fwTools::Failed );
+    FWSERVICES_API SharedFutureType stop();
 
     /**
      * @brief Invoke updating() if m_globalState == STARTED. Does nothing otherwise.
      * @pre m_globalState == STARTED
      */
-    FWSERVICES_API SharedFutureType update(); //throw( ::fwTools::Failed );
+    FWSERVICES_API SharedFutureType update();
 
     /**
      * @brief Associate the service to another object
      * @param[in] _obj change association service from m_associatedObject to _obj
      * @pre m_globalState == STARTED
      * @pre m_associatedObject != _obj
+     * @deprecated Use getAutoConnections() instead
      *
-     * This method provides to associate te service to another object without stopping
+     * This method provides to associate the service to another object without stopping
      * and deleting it. Furthermore, this method modify all observations to be aware to
      * _obj notifications.
-     * 
-     * 
+     *
+     *
      */
-    FWSERVICES_API SharedFutureType swap( ::fwData::Object::sptr _obj ); //throw( ::fwTools::Failed );
+    FWSERVICES_API SharedFutureType swap( ::fwData::Object::sptr _obj );
 
+    /**
+     * @brief Associate the service to another object
+     * @param[in] _obj change association service from m_associatedObject to _obj
+     * @pre m_globalState == STARTED
+     * @pre m_associatedObject != _obj
+     *
+     * This method provides to associate the service to another object without stopping
+     * and deleting it. Furthermore, this method modify all observations to be aware to
+     * _obj notifications.
+     *
+     *
+     */
+    FWSERVICES_API SharedFutureType swapKey( const KeyType& _key, ::fwData::Object::sptr _obj );
     //@}
 
     /**
@@ -198,31 +286,31 @@ public :
      * @brief Return the global process status
      * @return m_globalState
      */
-    FWSERVICES_API GlobalStatus getStatus() const throw() ;
+    FWSERVICES_API GlobalStatus getStatus() const throw();
 
     /**
      * @brief Test if the service is started or not
      * @return true if m_globalState == STARTED
      */
-    FWSERVICES_API bool isStarted() const throw() ;
+    FWSERVICES_API bool isStarted() const throw();
 
     /**
      * @brief Test if the service is stopped or not
      * @return true if m_globalState == STOPPED
      */
-    FWSERVICES_API bool isStopped() const throw() ;
+    FWSERVICES_API bool isStopped() const throw();
 
     /**
      * @brief Return the configuration process status
      * @return m_configurationState
      */
-    FWSERVICES_API ConfigurationStatus getConfigurationStatus() const throw() ;
+    FWSERVICES_API ConfigurationStatus getConfigurationStatus() const throw();
 
     /**
      * @brief Return the update process status
      * @return m_updatingState
      */
-    FWSERVICES_API UpdatingStatus getUpdatingStatus() const throw() ;
+    FWSERVICES_API UpdatingStatus getUpdatingStatus() const throw();
     //@}
 
 
@@ -241,7 +329,7 @@ public :
     /**
      * @brief Return the configuration, in an boost property tree
      */
-    FWSERVICES_API ConfigType getConfigTree() const ;
+    FWSERVICES_API ConfigType getConfigTree() const;
 
 
 //    /**
@@ -264,7 +352,8 @@ public :
      * @brief Return the object associated to service
      * @return m_associatedObject
      * @pre the service must have an associated object set
-     * @pre associated object does not be expired
+     * @pre associated object has not expired
+     * @deprecated use getInput() or getInOut() instead
      */
     FWSERVICES_API ::fwData::Object::sptr getObject();
 
@@ -274,9 +363,85 @@ public :
      * @pre the service must have an associated object set
      * @pre associated object does not be expired
      * @post cast verification in debug mode ( assertion on dynamic cast )
+     * @deprecated use getInput() or getInOut() instead
      */
     template< class DATATYPE > SPTR(DATATYPE) getObject();
 
+    /**
+     * @brief Return the inputs map associated to service
+     * @return m_inputsMap
+     * @pre the service must have an associated object set
+     * @pre associated objects have not expired
+     */
+    FWSERVICES_API const InputMapType& getInputs() const;
+
+    /**
+     * @brief Return the inouts map associated to service
+     * @return m_inoutsMap
+     * @pre the service must have an associated object set
+     * @pre associated objects have not expired
+     */
+    FWSERVICES_API const OutputMapType& getInOuts() const;
+
+    /**
+     * @brief Return the objects associated to service
+     * @return m_associatedObject
+     * @pre the service must have an associated object set
+     * @pre associated objects have not expired
+     */
+    FWSERVICES_API std::vector< ::fwData::Object::csptr > getObjects() const;
+
+    /**
+     * @brief Return the input object at the given key. Asserts if the data is not of the right type.
+     * @param key name of the data to retrieve.
+     * @return object cast in the right type, nullptr if not found.
+     * @pre the service must have an associated object set.
+     * @post cast verification in debug mode ( assertion on dynamic cast ).
+     */
+    template< class DATATYPE > CSPTR(DATATYPE) getInput(const KeyType &key) const;
+
+    /**
+     * @brief Return the inout object at the given key. Asserts if the data is not of the right type.
+     * @param key name of the data to retrieve.
+     * @return object cast in the right type, nullptr if not found.
+     * @pre the service must have an associated object set.
+     * @post cast verification in debug mode ( assertion on dynamic cast ).
+     */
+    template< class DATATYPE > SPTR(DATATYPE) getInOut(const KeyType &key) const;
+
+    /**
+     * @brief Return the input object at the given key. Asserts if the data is not of the right type.
+     * @param key name of the data to retrieve.
+     * @return object cast in the right type, nullptr if not found.
+     * @pre the service must have an associated object set.
+     * @post cast verification in debug mode ( assertion on dynamic cast ).
+     */
+    template< class DATATYPE > CSPTR(DATATYPE) getInput(const KeyType &keybase, size_t index) const;
+
+    /**
+     * @brief Return the inout object at the given key. Asserts if the data is not of the right type.
+     * @param key name of the data to retrieve.
+     * @return object cast in the right type, nullptr if not found.
+     * @pre the service must have an associated object set.
+     * @post cast verification in debug mode ( assertion on dynamic cast ).
+     */
+    template< class DATATYPE > SPTR(DATATYPE) getInOut(const KeyType &keybase, size_t index) const;
+
+    /**
+     * @brief Register an output object at a given key in the OSR, replacing it if it already exists.
+     * @param key name of the data or the group to register.
+     * @param object pointer to the object to register.
+     * @param index optional index of the key in the case of a member of a group of keys.
+     */
+    FWSERVICES_API void setOutput(const ::fwServices::IService::KeyType& key, const ::fwData::Object::sptr& object,
+                                  size_t index = 0);
+
+    /**
+     * @brief Return the number of key in a group of keys.
+     * @param keybase group name.
+     * @return number of keys in this group.
+     */
+    size_t getKeyGroupSize(const KeyType& keybase) const;
     //@}
 
     /**
@@ -284,11 +449,48 @@ public :
      */
     //@{
 
-    typedef ::fwServices::helper::SigSlotConnection::KeyConnectionsType KeyConnectionsType;
+    typedef ::fwCom::helper::SigSlotConnection::KeyConnectionsType KeyConnectionsType;
+
+    /**
+     * @brief This class is a helper to define the connections of a service and its data.
+     */
+    class KeyConnectionsMap
+    {
+    public:
+        void push (const KeyType& key,
+                   const ::fwCom::Signals::SignalKeyType& sig,
+                   const ::fwCom::Slots::SlotKeyType& slot)
+        {
+            m_keyConnectionsMap[key].push_back(std::make_pair(sig, slot));
+        }
+
+        typedef std::map< KeyType, KeyConnectionsType> KeyConnectionsMapType;
+
+        KeyConnectionsMapType::const_iterator find(const KeyType& key) const
+        {
+            return m_keyConnectionsMap.find(key);
+        }
+        KeyConnectionsMapType::const_iterator end() const
+        {
+            return m_keyConnectionsMap.cend();
+        }
+        bool empty() const
+        {
+            return m_keyConnectionsMap.empty();
+        }
+        size_t size() const
+        {
+            return m_keyConnectionsMap.size();
+        }
+
+    private:
+        std::map< KeyType, KeyConnectionsType> m_keyConnectionsMap;
+    };
 
     /**
      * @brief Returns proposals to connect service slots to associated object signals,
      * this method is used for obj/srv auto connection
+     * @deprecated Use getAutoConnections() instead
      */
     FWSERVICES_API virtual KeyConnectionsType getObjSrvConnections() const;
 
@@ -305,20 +507,24 @@ public :
      * @see IService::operator<<(std::ostream & _ostream, IService& _service)
      * @note Invoke IService::info( std::ostream )
      */
-    FWSERVICES_API friend std::ostream & operator<<(std::ostream & _sstream, IService & _service) ;
+    FWSERVICES_API friend std::ostream& operator<<(std::ostream& _sstream, IService& _service);
 
-    //@}
+    /** Set/get the version of the service. Temporary, this should be removed when appXml is gone. */
+    FWSERVICES_API static void setVersion(int version);
+    FWSERVICES_API static bool isVersion2();
 
-#ifdef COM_LOG
     /**
-      * @brief Set a newID  for the service, the oldest one is released.
-      * @warning Cannot set a empty ID.
-      * @note This method is thread-safe. This method is used to better trace communication between signals and slots
-      */
-    FWSERVICES_API void setID( ::fwTools::fwID::IDType newID );
-#endif
+     * @brief Return the id of the object, throw if it is not found
+     */
+    FWSERVICES_API IdType getObjectId(const KeyType& _key) const;
 
-protected :
+    /**
+     * @brief Set the id of an object key
+     */
+    FWSERVICES_API void setObjectId(const KeyType& _key, const IdType& _id);
+    //@}
+
+protected:
 
     /**
      * @name Constructor and Destructor
@@ -332,14 +538,14 @@ protected :
      * This constructor does nothing. By default, m_associatedObject is null and
      * service is considered as STOPPED, NOTUPDATING and UNCONFIGURED.
      */
-    FWSERVICES_API IService() ;
+    FWSERVICES_API IService();
 
     /**
      * @brief IService desctructor.
      *
      * This destructor does nothing.
      */
-    FWSERVICES_API virtual ~IService() ;
+    FWSERVICES_API virtual ~IService();
 
     //@}
 
@@ -350,26 +556,20 @@ protected :
     //@{
 
     /**
-     * @brief Invoke receiving(fwServices::ObjectMsg::csptr) if m_globalState == STARTED. Does nothing otherwise. This method makes a service assimilable to an observer in the sense of the observer design pattern.
-     * @pre m_globalState == STARTED
-     */
-    FWSERVICES_API void receive( fwServices::ObjectMsg::csptr _msg ) ;
-
-    /**
      * @brief Initialize the service activity.
      *
      * Use configuration to start his job. For example : the start method
      * installs a button in a frame and show the frame.
      * @see start()
      */
-    FWSERVICES_API virtual void starting() throw ( ::fwTools::Failed ) = 0 ;
+    FWSERVICES_API virtual void starting() throw ( ::fwTools::Failed ) = 0;
 
     /**
      * @brief Uninitialize the service activity. The stop() method is always invoked before destroying a service.
      *
      * @see stop()
      */
-    FWSERVICES_API virtual void stopping() throw ( ::fwTools::Failed ) = 0 ;
+    FWSERVICES_API virtual void stopping() throw ( ::fwTools::Failed ) = 0;
 
     /**
      * @brief Swap the service from associated object to another object
@@ -377,14 +577,31 @@ protected :
      * @todo This method must be pure virtual
      * @todo FIXME after code update for all services
      * @todo This method must have in parameter the new object or the old ?
+     * @deprecated use swapping(const KeyType& key) instead
+     */
+    virtual void swapping() throw ( ::fwTools::Failed )
+    {
+    }
+
+    /**
+     * @brief Swap the service from an associated object to another object.
+     * The key in parameter indicates allows to retrieve the new data with getInput(), getInOut() or getOutput().
+     * If you need the old object, you need to keep a shared pointer on it inside your service implementation.
+     *
+     * @param key of the object
+     * @see swapKey()
+     * @todo This method must be pure virtual
+     * @todo This method must have in parameter the new object or the old ?
      */
-    virtual void swapping() throw ( ::fwTools::Failed ) {} ;
+    virtual void swapping(const KeyType& key) throw ( ::fwTools::Failed )
+    {
+    }
 
     /**
      * @brief Configure the service before starting. Apply the configuration to service.
      * @see configure()
      */
-    FWSERVICES_API virtual void configuring() throw ( ::fwTools::Failed ) = 0 ;
+    FWSERVICES_API virtual void configuring() throw ( ::fwTools::Failed ) = 0;
 
     /**
      * @brief Reconfigure the service activity when is started.
@@ -397,14 +614,7 @@ protected :
      * @brief Perform some computations according to object (this service is attached to) attribute values and its internal state.
      * @see update()
      */
-    FWSERVICES_API virtual void updating() throw ( ::fwTools::Failed ) = 0 ;
-
-    /**
-     * @brief Perform some computations according to modifications specified in the _msg parameter. _msg generally indicates modification to occur (or having occured) on the object the service
-     * is attached to.
-     * @see receive(fwServices::ObjectMsg::csptr )
-     */
-    FWSERVICES_API virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
+    FWSERVICES_API virtual void updating() throw ( ::fwTools::Failed ) = 0;
 
     /**
      * @brief Write information in a stream.
@@ -412,14 +622,20 @@ protected :
      * This method is used by operator<<(std::ostream & _sstream, IService& _service)
      * to avoid declaration of << by all services.
      */
-    FWSERVICES_API virtual void info( std::ostream & _sstream );
+    FWSERVICES_API virtual void info( std::ostream& _sstream );
 
+    /**
+     * @brief Returns proposals to connect service slots to associated objects signals,
+     * this method is used for obj/srv auto connection
+     */
+    FWSERVICES_API virtual KeyConnectionsMap getAutoConnections() const;
     //@}
 
     /**
      * @brief Configuration element used to configure service internal state using a generic XML like structure
+     * TODO Make this const, we are not supposed to edit that !
      */
-    ::fwRuntime::ConfigurationElement::sptr  m_configuration ;
+    ::fwRuntime::ConfigurationElement::sptr m_configuration;
 
     /**
      * @brief associated object of service
@@ -427,6 +643,7 @@ protected :
      */
     ::fwData::Object::wptr m_associatedObject;
 
+
     /**
      * @name Slot API
      */
@@ -441,18 +658,58 @@ protected :
     /// Slot to call update method
     UpdateSlotType::sptr m_slotUpdate;
 
-    /// Slot to call receive method
-    ReceiveSlotType::sptr m_slotReceive;
-
     /// Slot to call swap method
     SwapSlotType::sptr m_slotSwap;
 
+    /// Slot to call swap method
+    SwapKeySlotType::sptr m_slotSwapKey;
+
     /// Associated worker
-    ::fwThread::Worker::sptr m_associatedWorker;
+    SPTR(::fwThread::Worker) m_associatedWorker;
 
     //@}
 
-private :
+private:
+
+    /// Connect the service with configuration services and objects
+    FWSERVICES_API virtual void connectToConfig();
+
+    /// Disconnect the service from configuration services and objects
+    FWSERVICES_API virtual void disconnectFromConfig();
+
+    /// Connect the service with its data
+    FWSERVICES_API virtual void autoConnect();
+
+    /// Disconnect the service from its data
+    FWSERVICES_API virtual void autoDisconnect();
+
+    /// Add a known connection from the appConfig
+    FWSERVICES_API void addProxyConnection(const helper::ProxyConnections& info);
+
+    /**
+     * @brief associated inputs of the service ordered by key
+     */
+    InputMapType m_inputsMap;
+
+    /**
+     * @brief associated input/outputs of the service ordered by key
+     */
+    OutputMapType m_inOutsMap;
+
+    /**
+     * @brief associated outputs of the service ordered by key
+     */
+    OutputMapType m_outputsMap;
+
+    /**
+     * @brief associated objects of the service ordered by key
+     */
+    std::map<KeyType, IdType> m_idsMap;
+
+    /**
+     * @brief size of key groups if they exist
+     */
+    std::map<std::string, size_t> m_keyGroupSize;
 
     /**
      * @brief Defines the current global status of the service.
@@ -469,10 +726,28 @@ private :
      */
     ConfigurationStatus m_configurationState;
 
+    /**
+     * @brief Defines if the service is part of a version 1 or a version 2 application.
+     */
+    static int s_version;
+
+    /**
+     * @brief Defines the configuration of the objects. Used for autoConnect.
+     */
+    ::fwServices::IService::Config m_serviceConfig;
+
+    /// Regular connections between this service and other services, or this service and objects
+    ::fwCom::helper::SigSlotConnection m_srvConnections;
+
+    /// Auto connections between this service and its objects
+    ::fwCom::helper::SigSlotConnection m_autoConnections;
+
+    /// Proxies configurations, connected at start, and disconnected at stop
+    std::map<std::string, helper::ProxyConnections> m_proxies;
 };
 
 } // namespace fwServices
 
 #include "fwServices/IService.hxx"
 
-#endif // _FWSERVICES_ISERVICE_HPP_
+#endif // __FWSERVICES_ISERVICE_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/IService.hxx b/SrcLib/core/fwServices/include/fwServices/IService.hxx
index 1967d6c..778858e 100644
--- a/SrcLib/core/fwServices/include/fwServices/IService.hxx
+++ b/SrcLib/core/fwServices/include/fwServices/IService.hxx
@@ -1,25 +1,148 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_ISERVICE_HXX_
-#define _FWSERVICES_ISERVICE_HXX_
+#ifndef __FWSERVICES_ISERVICE_HXX__
+#define __FWSERVICES_ISERVICE_HXX__
+
+#include "fwServices/IService.hpp"
 
 namespace fwServices
 {
 
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+SPTR(DATATYPE) IService::getObject()
+{
+    SPTR(DATATYPE) castData = std::dynamic_pointer_cast<DATATYPE>( m_associatedObject.lock() );
+    OSLM_ASSERT("DynamicCast " << ::fwCore::TypeDemangler<DATATYPE>().getFullClassname() << " failed", castData);
+
+    return castData;
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+CSPTR(DATATYPE) IService::getInput(const KeyType &key) const
+{
+    CSPTR(DATATYPE) input;
+
+    auto iterator = m_inputsMap.find(key);
+    if(iterator != m_inputsMap.end())
+    {
+        input = std::dynamic_pointer_cast<const DATATYPE>( iterator->second.lock() );
+        OSLM_ASSERT("DynamicCast " << ::fwCore::TypeDemangler<DATATYPE>().getFullClassname() << " failed", input);
+    }
+
+    return input;
+}
+
+//------------------------------------------------------------------------------
+
 template< class DATATYPE >
- SPTR(DATATYPE) IService::getObject()
+SPTR(DATATYPE) IService::getInOut(const KeyType &key) const
 {
-    OSLM_ASSERT("Expired object in service " << this->getID(), !m_associatedObject.expired() );
-    SPTR(DATATYPE) casteDdata = ::boost::dynamic_pointer_cast<DATATYPE>( m_associatedObject.lock() );
-    OSLM_ASSERT("DynamicCast "<< ::fwCore::TypeDemangler<DATATYPE>().getFullClassname()<<" failed", casteDdata);
+    SPTR(DATATYPE) inout;
+    auto iterator = m_inOutsMap.find(key);
+    if(iterator != m_inOutsMap.end())
+    {
+        inout = std::dynamic_pointer_cast<DATATYPE>( iterator->second.lock() );
+        OSLM_ASSERT("DynamicCast " << ::fwCore::TypeDemangler<DATATYPE>().getFullClassname() << " failed", inout);
+    }
 
-    return casteDdata;
+    return inout;
 }
 
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+CSPTR(DATATYPE) IService::getInput(const KeyType &keybase, size_t index) const
+{
+# ifdef _DEBUG
+    auto it = m_keyGroupSize.find(keybase);
+#endif
+    SLM_ASSERT("Key group '" + keybase + "' not found", it != m_keyGroupSize.end());
+    OSLM_ASSERT("Index overflow '" << index << " >= " << it->second << "' in key group '" << keybase << ".",
+                index < it->second);
+    return this->getInput< DATATYPE >(KEY_GROUP_NAME(keybase, index));
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+SPTR(DATATYPE) IService::getInOut(const KeyType &keybase, size_t index) const
+{
+# ifdef _DEBUG
+    auto it = m_keyGroupSize.find(keybase);
+#endif
+    SLM_ASSERT("Key group '" + keybase + "' not found", it != m_keyGroupSize.end());
+    OSLM_ASSERT("Index overflow '" << index << " >= " << it->second << "' in key group '" << keybase << ".",
+                index < it->second);
+    return this->getInOut< DATATYPE >(KEY_GROUP_NAME(keybase, index));
+}
+
+//------------------------------------------------------------------------------
+
+inline size_t IService::getKeyGroupSize(const IService::KeyType& keybase) const
+{
+    auto it = m_keyGroupSize.find(keybase);
+    if(it != m_keyGroupSize.end())
+    {
+        return it->second;
+    }
+    else
+    {
+        return 0;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+inline const IService::InputMapType& IService::getInputs() const
+{
+    return m_inputsMap;
+}
+
+//------------------------------------------------------------------------------
+
+inline const IService::OutputMapType& IService::getInOuts() const
+{
+    return m_inOutsMap;
+}
+
+//------------------------------------------------------------------------------
+
+inline std::vector< ::fwData::Object::csptr > IService::getObjects() const
+{
+    std::vector< ::fwData::Object::csptr > objectsVector;
+    if(!m_inputsMap.empty() || !m_inOutsMap.empty() ||  !m_outputsMap.empty())
+    {
+        for(auto itObj : m_inputsMap)
+        {
+            objectsVector.push_back(itObj.second.lock());
+        }
+        for(auto itObj : m_inOutsMap)
+        {
+            objectsVector.push_back(itObj.second.lock());
+        }
+        for(auto itObj : m_outputsMap)
+        {
+            objectsVector.push_back(itObj.second.lock());
+        }
+    }
+    else
+    {
+        objectsVector.push_back(m_associatedObject.lock());
+    }
+
+    return objectsVector;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace fwServices
 
-#endif // _FWSERVICES_ISERVICE_HXX_
+#endif // __FWSERVICES_ISERVICE_HXX__
diff --git a/SrcLib/core/fwServices/include/fwServices/IXMLParser.hpp b/SrcLib/core/fwServices/include/fwServices/IXMLParser.hpp
index 00f7f9b..77f2c80 100644
--- a/SrcLib/core/fwServices/include/fwServices/IXMLParser.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/IXMLParser.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef IXMLPARSER_HPP_
-#define IXMLPARSER_HPP_
+#ifndef __FWSERVICES_IXMLPARSER_HPP__
+#define __FWSERVICES_IXMLPARSER_HPP__
 
 #include <fwTools/Object.hpp>
 #include <fwRuntime/ConfigurationElement.hpp>
@@ -27,15 +27,15 @@ namespace fwServices
  * added to the object (see ::fwTools::Object). The New(::fwRuntime::ConfigurationElement::sptr ) method on the related child is invoked, therefore allowing to build
  * tree like composite object which services.
  *
- * 
+ *
  */
 class FWSERVICES_CLASS_API IXMLParser : public ::fwServices::IService
 {
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (IXMLParser)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IXMLParser)(::fwServices::IService) );
 
-public :
+public:
 
     FWSERVICES_API void setObjectConfig( ::fwRuntime::ConfigurationElement::csptr _cfgElem );
 
@@ -56,38 +56,34 @@ protected:
     /**
      * @brief Constructor. Does nothing.
      */
-    FWSERVICES_API IXMLParser( ) ;
+    FWSERVICES_API IXMLParser( );
 
     /**
      * @brief Destructor. Does nothing.
      */
-    FWSERVICES_API virtual ~IXMLParser() ;
-
-    /**
-     * @brief Does nothing
-     */
-    FWSERVICES_API virtual void starting() throw(::fwTools::Failed) ;
+    FWSERVICES_API virtual ~IXMLParser();
 
     /**
      * @brief Does nothing
      */
-    FWSERVICES_API virtual void stopping() throw(::fwTools::Failed) ;
+    FWSERVICES_API virtual void starting() throw(::fwTools::Failed);
 
     /**
      * @brief Does nothing
      */
-    FWSERVICES_API virtual void configuring() throw(::fwTools::Failed) ;
+    FWSERVICES_API virtual void stopping() throw(::fwTools::Failed);
 
     /**
      * @brief Does nothing
      */
-    FWSERVICES_API virtual void receiving( fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed) ;
+    FWSERVICES_API virtual void configuring() throw(::fwTools::Failed);
 
     /**
      * @brief Parse the XML configuration
-     * @note Should invoked ( this->::IXMLParser::updating() ) from specific XMLParsers updating method to support both specific compositions and this generic one
+     * @note Should invoked ( this->::IXMLParser::updating() ) from specific XMLParsers updating method to support both
+     *       specific compositions and this generic one
      */
-    FWSERVICES_API virtual void updating() throw(::fwTools::Failed) ;
+    FWSERVICES_API virtual void updating() throw(::fwTools::Failed);
 };
 
 
@@ -95,4 +91,4 @@ protected:
 
 }
 
-#endif /* IXMLPARSER_HPP_ */
+#endif /* __FWSERVICES_IXMLPARSER_HPP__ */
diff --git a/SrcLib/core/fwServices/include/fwServices/Namespace.hpp b/SrcLib/core/fwServices/include/fwServices/Namespace.hpp
index 074007f..e633a5c 100644
--- a/SrcLib/core/fwServices/include/fwServices/Namespace.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/Namespace.hpp
@@ -1,26 +1,431 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWSERVICESNAMESPACE_HPP_
-#define FWSERVICESNAMESPACE_HPP_
+#ifndef __FWSERVICES_NAMESPACE_HPP__
+#define __FWSERVICES_NAMESPACE_HPP__
 
 /**
- * @brief Namespace fwServices is dedicated to (mimic) the dynamic affectation of methods to (pure data) objects (::fwTools::Object), and component orientation transparently. This is assimilable to the
+ * @brief Namespace fwServices is dedicated to (mimic) the dynamic affectation of methods to (pure data) objects
+ * (::fwTools::Object), and component orientation transparently. This is assimilable to the
  * notion of role (corresponding to the IService class).
  * \li IService : API to normalize manipulation, using a limited set of well defined methods
  * \li IService : contract for service implementation
  * \li macros.hpp : declaration of service to object bindings
- * \li A set of high level methods to facilitate the use of implemented concepts (Add.hpp, New.hpp, Info.hpp, Erase.hpp, Get.hpp and Run.hpp)
- * \li ObjectMsg and IEditionService : communication management (implementation of an adaptation of the observer design pattern), high-level methods being available in Com.hpp
- * @namespace   fwServices
- * 
- * @date        2009-2010.
- *
  */
 namespace fwServices
 {
+
+/**
+ * @page AppConfig AppConfig
+ *
+ * The FW4SPL architecture provides a dynamic management of configurations to allow the use of multiple objects and
+ * services.
+ *
+ * The xml configuration for an application is defines with the extension ``::fwServices::registry::AppConfig``.
+ *
+ * @code{.xml}
+     <extension implements="::fwServices::registry::AppConfig">
+         <id>myAppConfigId</id>
+         <parameters>
+             <param name="appName" default="my Application" />
+             <param name="appIconPath" />
+         </parameters>
+         <desc>Image Viewer</desc>
+         <config>
+
+             <object type="::fwData::Composite">
+
+                 <!--
+                     Description service of the GUI:
+                     The ::gui::frame::SDefaultFrame service automatically positions the various
+                     containers in the application main window.
+                     Here, it declares a container for the 3D rendering service.
+                 -->
+                 <service uid="myFrame" impl="::gui::frame::SDefaultFrame">
+                     <gui>
+                         <frame>
+                             <name>${appName}</name>
+                             <icon>${appIconPath}</icon>
+                             <minSize width="800" height="600" />
+                         </frame>
+                     </gui>
+                     <registry>
+                         <!-- Associate the container for the rendering service. -->
+                         <view sid="myRendering" />
+                     </registry>
+                 </service>
+
+                 <item key="myImage">
+                     <object uid="myImageUid" type="::fwData::Image">
+                         <!--
+                             Reading service:
+                             The <file> tag defines the path of the image to load. Here, it is a relative
+                             path from the repository in which you launch the application.
+                         -->
+                         <service uid="myReaderPathFile" impl="::ioVTK::SImageReader">
+                            <file>./TutoData/patient1.vtk</file>
+                         </service>
+
+                         <!--
+                             Visualization service of a 3D medical image:
+                             This service will render the 3D image.
+                         -->
+                         <service uid="myRendering" impl="::vtkSimpleNegato::SRenderer" />
+                     </object>
+                 </item>
+
+                 <!--
+                     Definition of the starting order of the different services:
+                     The frame defines the 3D scene container, so it must be started first.
+                     The services will be stopped the reverse order compared to the starting one.
+                 -->
+                 <start uid="myFrame" />
+                 <start uid="myReaderPathFile" />
+                 <start uid="myRendering" />
+
+                 <!--
+                     Definition of the service to update:
+                     The reading service load the data on the update.
+                     The render update must be called after the reading of the image.
+                 -->
+                 <update uid="myReaderPathFile" />
+                 <update uid="myRendering" />
+
+             </object>
+
+         </config>
+     </extension>
+   @endcode
+ *
+ * - \b id: it is the configuration identifier
+ * - \b parameters (optional): it defines the list of the parameters used by the configuration
+ * - \b param: defines a parameter
+ *   - \b name: parameter name, used as "${paramName}" in the configuration. It will be replaced by the string
+ *     defined by the service, activity or application that launchs the configuration.
+ *   - \b default(optional): default value for the parameter, it is used if the value is not given by the config
+ *     launcher.
+ * - \b desc (optional): it is the description of the application
+ * - \b config: it defines the services and objects to launch
+ *
+ * - \b object: it defines an object of the AppConfig. We usually use a ::fwData::Composite in order to add
+ *   sub-objects. An object can defines a list of services. Some object object can have a specific configuration :
+ *   ::fwData::TransformationMatrix3D, ::fwData::Float, ::fwData::List, ...
+ *    - \b uid (optional): unique identifier of the object (::fwTools::fwID). If it is not defined, it will be
+ *      automatically generated.
+ *    - \b type: object type (ex: ::fwData::Image, ::fwData::Composite)
+ *    - \b src (optional, "new" by default): defines if the object should be created ("new") or if it already
+ *      exists in the application ("ref"). In the last case, the uid must be the same as the first declaration of
+ *      this object (with "new").
+ * - \b service: it represents a service working on the object. Some services needs a specific configuration, it is
+ *   usually described in the doxygen of the method configuring().
+ *     - \b uid (optional): unique identifier of the service. If it is not defined, it will be automatically
+ *       generated.
+ *     - \b impl: service implementation
+ *     - \b type (optional): service type (ex: ::fwGui::IFrameSrv)
+ *     - \b autoConnect (optional, "no" by default): defines if the service listen the signals of the working object
+ *     - \b worker (optional): allows to run the service in another worker (see ::fwThread::Worker)
+ *
+ * - \b matrix (optional): it works only for ::fwData::TransformationMatrix3D objects. It defines the value of the
+ *   matrix.
+ *
+ * @code{.xml}
+    <object uid="matrix" type="::fwData::TransformationMatrix3D">
+        <matrix>
+         <![CDATA[
+         1  0  0  0
+         0  1  0  0
+         0  0  1  0
+         0  0  0  1
+         ]]>
+         </matrix>
+    </object>
+   @endcode
+ *
+ * - \b value (optional): it works only for ::fwData::Boolean, ::fwData::Integer, ::fwData::Float and
+ *   ::fwData::String. It allows to define the value of the object.
+ *
+ * @code{.xml}
+    <object type="::fwData::Integer">
+        <value>42</value>
+    </object>
+   @endcode
+ *
+ * - \b item (optional): it defines a sub-object of a composite. It can only be used if the parent object is a
+ *   ::fwData::Composite.
+ *    - \b key: key of the object in the composite
+ *    - \b object: the 'item' tag can only contain 'object' tags that represents the composite sub-object
+ *
+ * @code{.xml}
+    <item key="myImage">
+        <object uid="myImageUid" type="::fwData::Image" />
+    </item>
+   @endcode
+ *
+ * - \b colors (optional): it works only for ::fwData::TransferFunction. It allows to fill the transfer function values.
+ *
+ * @code{.xml}
+     <object type="::fwData::TransferFunction">
+         <colors>
+             <step color="#ff0000ff" value="1" />
+             <step color="#ffff00ff" value="500" />
+             <step color="#00ff00ff" value="1000" />
+             <step color="#00ffffff" value="1500" />
+             <step color="#0000ffff" value="2000" />
+             <step color="#000000ff" value="4000" />
+         </colors>
+     </object>
+   @endcode
+ *
+ * - \b connect (optional): allows to connect a signal to one or more slot(s). The signal and slots must be
+ *   compatible.
+ *
+ * @code{.xml}
+     <connect>
+         <signal>object_uid/signal_name</signal>
+         <slot>service_uid/slot_name</slot>
+     </connect>
+   @endcode
+ *
+ * - \b proxy (optional): allows to connect one or more signal(s) to one or more slot(s). The signals and slots must
+ *   be compatible.
+ *    - \b channel: name of the channel use for the proxy.
+ *
+ * @code{.xml}
+    <proxy channel="myChannel">
+        <signal>object_uid/signal_name</signal>
+        <slot>service_uid/slot_name</slot>
+    </proxy>
+    @endcode
+ *
+ * - \b start: defines the service to start when the AppConfig is launched. The services will be automatically
+ *   stopped in the reverse order when the AppConfig is stopped.
+ *
+ * @code{.xml}
+    <start uid="service_uid" />
+   @endcode
+ *
+ * - \b update: defines the service to update when the AppConfig is launched.
+ *
+ * @code{.xml}
+    <update uid="service_uid" />
+   @endcode
+ */
+
+
+/**
+ * @page AppConfig2 AppConfig2
+ *
+ * The FW4SPL architecture provides a dynamic management of configurations to allow the use of multiple objects and
+ * services.
+ *
+ * The xml configuration for an application is defines with the extension ``::fwServices::registry::AppConfig2``.
+ *
+ * @code{.xml}
+     <extension implements="::fwServices::registry::AppConfig2">
+         <id>myAppConfigId</id>
+         <parameters>
+             <param name="appName" default="my Application" />
+             <param name="appIconPath" />
+         </parameters>
+         <desc>Image Viewer</desc>
+         <config>
+
+             <object uid="myImage" type="::fwData::Image" />
+
+             <!--
+                 Description service of the GUI:
+                 The ::gui::frame::SDefaultFrame service automatically positions the various
+                 containers in the application main window.
+                 Here, it declares a container for the 3D rendering service.
+             -->
+             <service uid="myFrame" type="::gui::frame::SDefaultFrame">
+                 <gui>
+                     <frame>
+                         <name>${appName}</name>
+                         <icon>${appIconPath}</icon>
+                         <minSize width="800" height="600" />
+                     </frame>
+                 </gui>
+                 <registry>
+                     <!-- Associate the container for the rendering service. -->
+                     <view sid="myRendering" />
+                 </registry>
+             </service>
+
+             <!--
+                 Reading service:
+                 The <file> tag defines the path of the image to load. Here, it is a relative
+                 path from the repository in which you launch the application.
+             -->
+             <service uid="myReaderPathFile" type="::ioVTK::SImageReader">
+                <inout key="target" uid="myImage" />
+                <file>./TutoData/patient1.vtk</file>
+             </service>
+
+             <!--
+                 Visualization service of a 3D medical image:
+                 This service will render the 3D image.
+             -->
+             <service uid="myRendering" type="::vtkSimpleNegato::SRenderer">
+                <in key="image" uid="myImage" />
+             </service>
+
+             <!--
+                 Definition of the starting order of the different services:
+                 The frame defines the 3D scene container, so it must be started first.
+                 The services will be stopped the reverse order compared to the starting one.
+             -->
+             <start uid="myFrame" />
+             <start uid="myReaderPathFile" />
+             <start uid="myRendering" />
+
+             <!--
+                 Definition of the service to update:
+                 The reading service load the data on the update.
+                 The render update must be called after the reading of the image.
+             -->
+             <update uid="myReaderPathFile" />
+             <update uid="myRendering" />
+
+         </config>
+     </extension>
+   @endcode
+ *
+ * @section Definition Definition
+ * @subsection Parameters Parameters
+ * - \b id: it is the configuration identifier
+ * - \b parameters (optional): it defines the list of the parameters used by the configuration
+ * - \b param: defines a parameter
+ *   - \b name: parameter name, used as "${paramName}" in the configuration. It will be replaced by the string
+ *     defined by the service, activity or application that launchs the configuration.
+ *   - \b default(optional): default value for the parameter, it is used if the value is not given by the config
+ *     launcher.
+ * - \b desc (optional): it is the description of the application
+ * - \b config: it defines the services and objects to launch
+ *
+ * @subsection Object Object
+ * - \b object: it defines an object of the AppConfig.
+ *    - \b uid (optional): unique identifier of the object (::fwTools::fwID). If it is not defined, it will be
+ *      automatically generated.
+ *    - \b type: object type (ex: ::fwData::Image, ::fwData::Mesh)
+ *    - \b src (optional, "new" by default, values: "new", "ref", "deferred"):
+ *        - "new" : defines that the object should be created
+ *        - "ref" : defines that the object already exists in the application. The uid must be the same as the first
+ *            declaration of this object (with "new").
+ *        - "deferred" : defines that the object will be created later (by a service).
+ *
+ * Some objects can have a specific configuration :
+ * - \b matrix (optional): it works only for ::fwData::TransformationMatrix3D objects. It defines the value of the
+ *   matrix.
+ *
+ * @code{.xml}
+    <object uid="matrix" type="::fwData::TransformationMatrix3D">
+        <matrix>
+         <![CDATA[
+         1  0  0  0
+         0  1  0  0
+         0  0  1  0
+         0  0  0  1
+         ]]>
+         </matrix>
+    </object>
+   @endcode
+ *
+ * - \b value (optional): it works only for ::fwData::Boolean, ::fwData::Integer, ::fwData::Float and
+ *   ::fwData::String. It allows to define the value of the object.
+ *
+ * @code{.xml}
+    <object type="::fwData::Integer">
+        <value>42</value>
+    </object>
+   @endcode
+ *
+ * - \b colors (optional): it works only for ::fwData::TransferFunction. It allows to fill the transfer function values.
+ *
+ * @code{.xml}
+     <object type="::fwData::TransferFunction">
+         <colors>
+             <step color="#ff0000ff" value="1" />
+             <step color="#ffff00ff" value="500" />
+             <step color="#00ff00ff" value="1000" />
+             <step color="#00ffffff" value="1500" />
+             <step color="#0000ffff" value="2000" />
+             <step color="#000000ff" value="4000" />
+         </colors>
+     </object>
+   @endcode
+ *
+ * - \b item (optional): it defines a sub-object of a composite or a field of any other object.
+ *    - \b key: key of the object
+ *    - \b object: the 'item' tag can only contain 'object' tags that represents the sub-object
+ *
+ * @code{.xml}
+    <item key="myImage">
+        <object uid="myImageUid" type="::fwData::Image" />
+    </item>
+   @endcode
+ *
+ * @subsection Service Service
+ * - \b service: it represents a service working on the object. Services list the data the use and how they access them.
+ *   Some services needs a specific configuration, it is usually described in the doxygen of the method configuring().
+ *     - \b uid (optional): unique identifier of the service. If it is not defined, it will be automatically
+ *       generated.
+ *     - \b type: service type (ex: ::ioVTK::SImageReader)
+ *     - \b autoConnect (optional, "no" by default): defines if the service listen the signals of the working objects
+ *     - \b worker (optional): allows to run the service in another worker (see ::fwThread::Worker)
+ *
+ * @code{.xml}
+    <service uid="mesher" type="::opMesh::SMesher">
+        <in key="image" uid="imageId" />
+        <out key="mesh" uid="meshId" />
+    </service>
+   @endcode
+ *
+ * - \b in : input object, it is const and cannot be modified
+ * - \b inout : input object that can be modified
+ * - \b out : output object, it must be created by the service and registered with the 'setOutput(key, obj)' method.
+ *      The output object must be declared as "deferred" in the \<object\> declaration.
+ *   - \b key: Object key used to retreive the object into the service
+ *   - \b uid: Uid of the object declared in the <object> tag
+ *   - \b optional(optional, default "no", values: "yes" or "no") If "yes", the service can be started even if the
+ *        object is not present. The output objects are always optional.
+ *
+ * @code{.cpp}
+    ::fwData::Image::csptr image = this->getInput< ::fwData::Image >("image");
+    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+    // mesher .....
+    this->setOutput("mesh", mesh);
+   @endcode
+ *
+ * - \b connect (optional): allows to connect one or more signal(s) to one or more slot(s). The signals and slots must
+ *   be compatible.
+ *    - \b channel (optional): name of the channel use for the connections.
+ *
+ * @code{.xml}
+    <connect channel="myChannel">
+        <signal>object_uid/signal_name</signal>
+        <slot>service_uid/slot_name</slot>
+    </connect>
+    @endcode
+ *
+ * - \b start: defines the service to start when the AppConfig is launched. The services will be automatically
+ *   stopped in the reverse order when the AppConfig is stopped.
+ *
+ * @code{.xml}
+    <start uid="service_uid" />
+   @endcode
+ *
+ * The service using "deferred" object as input will be automatically started when the object is created.
+ *
+ * - \b update: defines the service to update when the AppConfig is launched.
+ *
+ * @code{.xml}
+    <update uid="service_uid" />
+   @endcode
+ */
+
 }
-#endif /* FWSERVICESNAMESPACE_HPP_ */
+#endif /* __FWSERVICES_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwServices/include/fwServices/ObjectMsg.hpp b/SrcLib/core/fwServices/include/fwServices/ObjectMsg.hpp
deleted file mode 100644
index 68a9dd7..0000000
--- a/SrcLib/core/fwServices/include/fwServices/ObjectMsg.hpp
+++ /dev/null
@@ -1,267 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSERVICES_OBJECTMSG_HPP_
-#define _FWSERVICES_OBJECTMSG_HPP_
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include <boost/function.hpp>
-
-#include <fwTools/Object.hpp>
-#include <fwData/Object.hpp>
-
-#include "fwServices/factory/message/new.hpp"
-#include "fwServices/registry/message/detail.hpp"
-#include "fwServices/config.hpp"
-
-namespace fwServices
-{
-
-class IService;
-
-/**
- * @brief Object message : indicate modifications having occurred or being performed on a object.
- * @class ObjectMsg
- * 
- * @date 2007-2009.
- *
- * The message only provides identifiers enabling to retrieve the modified information on the object. This should be embed the information. The m_subject is present
- * to check that the considered object (subject to modifications) is the one known (or referenced) by the service receiving the message through the observation mechanism.
- *
- * The m_subject should a priori not be used by a service to access the object. Indeed, to be able to work without observation (therefore without messages, this being possible as observations are optional), a service requires
- * a reference to the object allowing to perform computations. This reference is generally acquired either at attachment time (e.g. the object of interest being the one the considered service is attached to) or at configuration time (e.g. passing an unique universal identifier in the XML configuration).
- * Therefore, for coherence and homogeneity, a service should be able to access object(s) it requires in the same way, whatever the working mode (i.e. explicit execution without observations or implicit execution with observation).
- *
- * Concerning the type of m_subject : a software instance is based on a (root) tree structured complex object (to which services are attached, corresponding to functionalities). So that
- * the root object naturally destroys through unreferencement, it must be avoided that instances (except pure data objects) keep strong references on data objects composing the root, otherwise
- * there is a risk of cross strong references, forgiving the natural destruction of objects. For this reason, messages should also respect this rule and the m_subject should be a weak reference (weak pointer).
- *
- * The ObjectMsg contains event identifiers with associated additional information.
- */
-class FWSERVICES_CLASS_API ObjectMsg : public ::fwTools::Object
-{
-
-public:
-
-    typedef ::fwServices::factory::message::Key Key;
-
-    /**
-     * @brief Class used to register a class factory in factory registry.
-     * This class defines also the objectMsg factory ( 'create' )
-     *
-     * @tparam T Factory product type
-     */
-    template <typename T>
-    class Registrar
-    {
-    public:
-        Registrar()
-        {
-            ::fwServices::registry::message::get()->addFactory(T::classname(), &::fwServices::factory::message::New<T>);
-        }
-    };
-
-
-    fwCoreClassDefinitionsWithFactoryMacro( (ObjectMsg)(::fwTools::Object), (()), ::fwServices::factory::message::New< ObjectMsg > );
-
-    /// Defines callback type
-    typedef ::boost::function< void () > MessageCallbackType;
-
-    /**
-     * @brief Constructor
-     * @param key Private construction key
-     */
-    FWSERVICES_API ObjectMsg(::fwServices::ObjectMsg::Key key);
-
-    /// Destructor, do nothing.
-    FWSERVICES_API virtual ~ObjectMsg();
-
-    // generic message
-
-    /// Event identifier used to inform that an object was created
-    FWSERVICES_API static std::string NEW_OBJECT;
-
-    /// Event identifier used to inform that an object was modified
-    FWSERVICES_API static std::string UPDATED_OBJECT;
-
-    /// Event identifier used to inform that an object has to be removed
-    FWSERVICES_API static std::string DELETE_OBJECT;
-
-    /// Event identifier used to inform that fields were added, removed or changed
-    //@{
-    FWSERVICES_API static std::string ADDED_FIELDS;
-    FWSERVICES_API static std::string REMOVED_FIELDS;
-    FWSERVICES_API static std::string CHANGED_FIELDS;
-    //@}
-
-    /**
-     * @name Event management
-     */
-    //@{
-
-    /**
-     * @brief This method add an event to the message before message notification.
-     * @param[in] _eventId the event added in the message
-     * @param[in] _pDataInfo additional information concerning message ( it is an optional parameter )
-     * @note a message can contain many events.
-     */
-    FWSERVICES_API void addEvent( std::string _eventId , ::fwData::Object::csptr _pDataInfo = ::fwData::Object::sptr() );
-
-    /**
-     * @brief This method is used to know if a specific event declared in the message
-     * @param[in] _eventId id of the event researched
-     * @return true if message contain the event id
-     */
-    FWSERVICES_API bool hasEvent( std::string _eventId ) const;
-
-    /**
-     * @brief This method returns all id event contained in the message
-     * @return the list of event
-     */
-    FWSERVICES_API std::vector< std::string > getEventIds() const ;
-
-    /**
-     * @brief This method returns the data info associated to event, this data can be an null ptr when the event not needs some additional informations.
-     * @param[in] _eventId event id used to find his associated data
-     * @return associated data information
-     */
-    FWSERVICES_API ::fwData::Object::csptr getDataInfo( std::string _eventId ) const;
-
-    //@}
-
-
-    /**
-     * @name Management of source/subject message
-     */
-    //@{
-
-    /// Set message source (service which notifies subject obsevers)
-    FWSERVICES_API void setSource( WPTR(::fwServices::IService) _source );
-
-    /// Get message source (service which notifies subject obsevers)
-    FWSERVICES_API WPTR(::fwServices::IService) getSource() const;
-
-    /// Set message subject (object observed)
-    FWSERVICES_API void setSubject( ::fwData::Object::wptr _subject );
-
-    /// Get message subject (object observed)
-    FWSERVICES_API ::fwData::Object::wptr getSubject() const;
-
-    //@}
-
-
-    /**
-     * @name Field events
-     */
-    //@{
-
-    typedef std::map<std::string, ::fwData::Object::sptr> ModifiedFieldsContainerType;
-    typedef ::fwData::Object::FieldNameType FieldNameType;
-
-    /**
-     * @brief       Append an object to the added fields list.
-     * @param[in]   fieldName : the field name of the added object.
-     * @param[in]   object    : the added object.
-     */
-    FWSERVICES_API void appendAddedField( const FieldNameType &fieldName, ::fwData::Object::sptr object );
-
-    /**
-     * @brief   Return the map of the added fields.
-     */
-    FWSERVICES_API const ModifiedFieldsContainerType &getAddedFields() const;
-
-    /**
-     * @brief       Append an object to the removed fields list.
-     * @param[in]   fieldName : the field name of the removed object.
-     * @param[in]   object    : the object which will be removed.
-     */
-    FWSERVICES_API void appendRemovedField( const FieldNameType &fieldName, ::fwData::Object::sptr object );
-
-    /**
-     * @brief   Return the map of the removed fields.
-     */
-    FWSERVICES_API const ModifiedFieldsContainerType &getRemovedFields() const;
-
-    /**
-     * @brief       Append an object to the changed fields list.
-     * @param[in]   fieldName : the field name of the changed object.
-     * @param[in]   oldObject : the old object which will be replaced.
-     * @param[in]   newObject : the new object.
-     */
-    FWSERVICES_API void appendChangedField( const FieldNameType &fieldName, ::fwData::Object::sptr oldObject, ::fwData::Object::sptr newObject );
-
-    /**
-     * @brief   Return a map of old object in changed fields list.
-     */
-    FWSERVICES_API const ModifiedFieldsContainerType &getOldChangedFields() const;
-
-    /**
-    * @brief   Return a map of new object in changed fields list.
-    */
-    FWSERVICES_API const ModifiedFieldsContainerType &getNewChangedFields() const;
-
-    //@}
-
-
-    /// Give some message informations in a string.
-    FWSERVICES_API std::string getGeneralInfo() const;
-
-    /**
-     * @brief Streaming a service
-     * @see ObjectMsg::operator<<(std::ostream & _ostream, ObjectMsg& _service)
-     * @note Invoke ObjectMsg::info( std::ostream )
-     */
-    FWSERVICES_API friend std::ostream & operator<<(std::ostream & _sstream, const ObjectMsg& _message) ;
-
-    /// Set a callback to the message which will be executed during message destruction
-    FWSERVICES_API void setMessageCallback( MessageCallbackType callback );
-
-protected :
-
-    /// Constructor, do nothing.
-    FWSERVICES_API ObjectMsg();
-
-    /**
-     * @brief Intern map which associates an Event Id (string) to a dataInfo ( ::fwData::Object ).
-     *
-     * Some event has not data info, in this cases, the event is in map  but the ::fwData::Object::sptr is null.
-     */
-    std::map< std::string , ::fwData::Object::csptr > m_eventId2DataInfo;
-
-    /// Give some message informations, this method uses getGeneralInfo.
-    FWSERVICES_API virtual void info(std::ostream &_sstream ) const ;
-
-    ModifiedFieldsContainerType m_removedFields;
-    ModifiedFieldsContainerType m_addedFields;
-    ModifiedFieldsContainerType m_oldChangedFields;
-    ModifiedFieldsContainerType m_newChangedFields;
-
-private :
-
-    /// Message source. It is the service which creates msg and sends it at all subject observers
-    WPTR(::fwServices::IService) m_source;
-
-    /// Message subject. All subject observers will be notified.
-    ::fwData::Object::wptr m_subject;
-
-    /// Helper to convert string UUID/Classname in pretty string
-    static std::string convertToLightString( std::string _initialString );
-
-    /// Callback calls during destruction
-    MessageCallbackType m_callback;
-
-    /// Permits to know if message has a callback
-    bool m_hasCallback;
-};
-
-
-} // namespace fwServices
-
-#endif //_FWSERVICES_OBJECTMSG_HPP_
-
diff --git a/SrcLib/core/fwServices/include/fwServices/SConfigController.hpp b/SrcLib/core/fwServices/include/fwServices/SConfigController.hpp
index c478c5e..9b2cb0c 100644
--- a/SrcLib/core/fwServices/include/fwServices/SConfigController.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/SConfigController.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_SCONFIGCONTROLLER_HPP_
-#define _FWSERVICES_SCONFIGCONTROLLER_HPP_
+#ifndef __FWSERVICES_SCONFIGCONTROLLER_HPP__
+#define __FWSERVICES_SCONFIGCONTROLLER_HPP__
 
 #include <fwTools/Failed.hpp>
 
@@ -32,7 +32,7 @@ namespace fwServices
  *  configuration is launch several times.
  *
  * Example of this service configuration
- * @verbatim
+ * @code{.xml}
    <service impl="::fwServices::SConfigController" type="::fwServices::IController">
        <config>
            <appConfig id="IdOfConfig" >
@@ -43,20 +43,20 @@ namespace fwServices
            </appConfig>
        </config>
    </service>
-   @endverbatim
+   @endcode
  */
 class FWSERVICES_CLASS_API SConfigController : public ::fwServices::IController
 {
 
-public :
+public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SConfigController)(::fwServices::IController) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SConfigController)(::fwServices::IController) );
 
     /// Constructor. Does nothing.
-    FWSERVICES_API SConfigController() throw() ;
+    FWSERVICES_API SConfigController() throw();
 
     /// Destructor. Does nothing.
-    FWSERVICES_API virtual ~SConfigController() throw() ;
+    FWSERVICES_API virtual ~SConfigController() throw();
 
 protected:
 
@@ -67,9 +67,6 @@ protected:
     virtual void stopping() throw(::fwTools::Failed);
 
     /// Does nothing
-    virtual void receiving( CSPTR(::fwServices::ObjectMsg) _msg ) throw(::fwTools::Failed);
-
-    /// Does nothing
     virtual void updating() throw(::fwTools::Failed);
 
 
@@ -79,7 +76,7 @@ protected:
      * Call the IAction::configuring()
      *
      * Example of this service configuration
-     * @verbatim
+     * @code{.xml}
        <service impl="::fwServices::SConfigController" type="::fwServices::IController">
             <config>
                 <appConfig id="IdOfConfig" >
@@ -90,13 +87,16 @@ protected:
                 </appConfig>
             </config>
        </service>
-        @endverbatim
+        @endcode
      * It MUST have at least one key node and at least one replace node.
      */
     virtual void configuring() throw(fwTools::Failed);
 
+    /// Swaps the config
+    virtual void swapping() throw ( ::fwTools::Failed );
+
     /// Overrides
-    virtual void info( std::ostream &_sstream ) ;
+    virtual void info( std::ostream &_sstream );
 
 private:
 
@@ -108,6 +108,6 @@ private:
 } // fwServices
 
 
-#endif // _FWSERVICES_SCONFIGCONTROLLER_HPP_
+#endif // __FWSERVICES_SCONFIGCONTROLLER_HPP__
 
 
diff --git a/SrcLib/core/fwServices/include/fwServices/ServiceFactoryRegistrar.hpp b/SrcLib/core/fwServices/include/fwServices/ServiceFactoryRegistrar.hpp
index 7d01d28..92eb48a 100644
--- a/SrcLib/core/fwServices/include/fwServices/ServiceFactoryRegistrar.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/ServiceFactoryRegistrar.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,7 +8,6 @@
 #define __FWSERVICES_SERVICEFACTORYREGISTRAR_HPP__
 
 #include "fwServices/factory/new.hpp"
-
 #include "fwServices/registry/ServiceFactory.hpp"
 
 namespace fwServices
@@ -18,7 +17,7 @@ namespace fwServices
 /**
  * @brief Helper for registering a service
  * Creates internally the service factory and adds it to the FactoryRegistry
- * 
+ *
  * @date    2007-2012.
  */
 template<class SRV_IMPL>
@@ -30,7 +29,7 @@ public:
     ServiceFactoryRegistrar(std::string simpl, std::string stype, std::string oimpl)
     {
         ::fwServices::registry::ServiceFactory::getDefault()
-            ->addFactory( &::fwServices::factory::New< SRV_IMPL > , simpl, stype, oimpl);
+        ->addFactory( &::fwServices::factory::New< SRV_IMPL >, simpl, stype, oimpl);
     }
 
 };
diff --git a/SrcLib/core/fwServices/include/fwServices/config.hpp b/SrcLib/core/fwServices/include/fwServices/config.hpp
deleted file mode 100644
index 21f6368..0000000
--- a/SrcLib/core/fwServices/include/fwServices/config.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSERVICES_CONFIG_HPP_
-#define _FWSERVICES_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWSERVICES_EXPORTS
-    #define FWSERVICES_API __declspec(dllexport)
-    #define FWSERVICES_TEMPLATE_API
-    #else
-    #define FWSERVICES_API __declspec(dllimport)
-    #define FWSERVICES_TEMPLATE_API extern
-    #endif
-
-    #define FWSERVICES_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWSERVICES_EXPORTS
-        #define FWSERVICES_API __attribute__ ((visibility("default")))
-        #define FWSERVICES_CLASS_API __attribute__ ((visibility("default")))
-        #define FWSERVICES_TEMPLATE_API extern
-        #else
-        #define FWSERVICES_API __attribute__ ((visibility("hidden")))
-        #define FWSERVICES_CLASS_API __attribute__ ((visibility("hidden")))
-        #define FWSERVICES_TEMPLATE_API extern
-        #endif
-
-#else
-
-    #define FWSERVICES_API
-    #define FWSERVICES_CLASS_API
-    #define FWSERVICES_TEMPLATE_API extern
-
-#endif
-
-
-#endif //_FWSERVICES_CONFIG_HPP_
diff --git a/SrcLib/core/fwServices/include/fwServices/factory/message/namespace.hpp b/SrcLib/core/fwServices/include/fwServices/factory/message/namespace.hpp
deleted file mode 100644
index 0c35a7f..0000000
--- a/SrcLib/core/fwServices/include/fwServices/factory/message/namespace.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWDATA_FACTORY_MESSAGE_NAMESPACE_HPP__
-#define __FWDATA_FACTORY_MESSAGE_NAMESPACE_HPP__
-
-
-namespace fwServices
-{
-
-namespace factory
-{
-/**
- * @brief       Contains fwServices::factory::message utilities
- * @namespace   fwServices::factory::message
- * 
- * @date        2009-2012
- *
- */
-namespace message
-{
-} // namespace message
-
-} // namespace factory
-
-} // namespace fwServices
-
-#endif /* __FWDATA_FACTORY_MESSAGE_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwServices/include/fwServices/factory/message/new.hpp b/SrcLib/core/fwServices/include/fwServices/factory/message/new.hpp
deleted file mode 100644
index 8457f33..0000000
--- a/SrcLib/core/fwServices/include/fwServices/factory/message/new.hpp
+++ /dev/null
@@ -1,62 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWSERVICES_FACTORY_MESSAGE_NEW_HPP__
-#define __FWSERVICES_FACTORY_MESSAGE_NEW_HPP__
-
-#include <string>
-
-#include <boost/make_shared.hpp>
-
-#include <fwTools/macros.hpp>
-
-#include "fwServices/config.hpp"
-#include "fwServices/registry/message/detail.hpp"
-
-namespace fwServices
-{
-
-class ObjectMsg;
-
-namespace factory
-{
-
-namespace message
-{
-
-template<class CLASSNAME > SPTR( CLASSNAME )  New();
-
-/**
- * @brief Key class used to restrict access to ObjectMsg construction.
- * See http://www.drdobbs.com/184402053
- */
-class Key
-{
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwServices::factory::message::New();
-
-    Key(){};
-};
-
-
-FWSERVICES_API SPTR( ::fwServices::ObjectMsg ) New( const ::fwServices::registry::message::KeyType & classname );
-
-
-template<class CLASSNAME > SPTR( CLASSNAME )  New()
-{
-    SPTR(CLASSNAME) objMsg = ::boost::make_shared< CLASSNAME >( Key() );
-    return objMsg;
-}
-
-} // namespace message
-
-} // namespace factory
-
-} // namespace fwServices
-
-#endif /* __FWSERVICES_FACTORY_MESSAGE_NEW_HPP__ */
-
-
diff --git a/SrcLib/core/fwServices/include/fwServices/factory/namespace.hpp b/SrcLib/core/fwServices/include/fwServices/factory/namespace.hpp
index 37a49ce..39b1a79 100644
--- a/SrcLib/core/fwServices/include/fwServices/factory/namespace.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwServices
 /**
  * @brief       Contains fwServices::factory utilities
  * @namespace   fwServices::factory
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/core/fwServices/include/fwServices/factory/new.hpp b/SrcLib/core/fwServices/include/fwServices/factory/new.hpp
index 099e7d8..d4afb7c 100644
--- a/SrcLib/core/fwServices/include/fwServices/factory/new.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,10 +8,11 @@
 #define __FWSERVICES_FACTORY_NEW_HPP__
 
 #include <string>
-#include <boost/make_shared.hpp>
 
 #include "fwServices/config.hpp"
 
+#include <fwCore/base.hpp>
+
 namespace fwServices
 {
 
@@ -22,10 +23,8 @@ namespace factory
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) srv = ::boost::make_shared< CLASSNAME >();
-#ifdef COM_LOG
-    srv->setID(srv->getID());
-#endif
+    SPTR(CLASSNAME) srv = std::make_shared< CLASSNAME >();
+
     return srv;
 }
 
diff --git a/SrcLib/core/fwServices/include/fwServices/helper/Config.hpp b/SrcLib/core/fwServices/include/fwServices/helper/Config.hpp
new file mode 100644
index 0000000..aacadc4
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/helper/Config.hpp
@@ -0,0 +1,131 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_HELPER_CONFIG_HPP__
+#define __FWSERVICES_HELPER_CONFIG_HPP__
+
+#include "fwServices/IService.hpp"
+#include "fwServices/config.hpp"
+#include "fwServices/helper/ProxyConnections.hpp"
+
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slots.hpp>
+
+#include <fwCore/base.hpp>
+
+#include <fwTools/Object.hpp>
+
+namespace fwTools
+{
+class Object;
+}
+
+namespace fwData
+{
+class Object;
+}
+
+namespace fwRuntime
+{
+struct ConfigurationElement;
+}
+
+namespace fwServices
+{
+
+namespace helper
+{
+
+class SigSlotConnection;
+
+/**
+ * @brief Provides configuration element parsing tools.
+ */
+class Config
+{
+
+public:
+
+    typedef std::pair< std::string, ::fwCom::Signals::SignalKeyType > SignalInfoType;
+    typedef std::pair< std::string, ::fwCom::Slots::SlotKeyType > SlotInfoType;
+    typedef std::vector< SlotInfoType > SlotInfoContainerType;
+
+    typedef std::string ObjectIdType;
+    typedef std::vector<ProxyConnections> ProxyConnectionsVectType;
+    typedef std::map< ObjectIdType, ProxyConnectionsVectType > ProxyConnectionsMapType;
+
+
+    struct ConnectionInfo
+    {
+        SignalInfoType m_signal;
+        SlotInfoContainerType m_slots;
+    };
+
+    /**
+     * @brief Parses "<connect>" tags from given configuration and return a structure containing the signal and
+     *        slots informations.
+     *
+     * @param cfg configuration element containing "<connect>" tags
+     * @param obj optional object used to retrieve signal if uid is not defined [deprecated]
+     */
+    FWSERVICES_API static ConnectionInfo parseConnections(const CSPTR(::fwRuntime::ConfigurationElement)& cfg,
+                                                          const CSPTR(::fwTools::Object)& obj =
+                                                              CSPTR(::fwTools::Object)());
+
+    /**
+     * @brief Parses "<connect>" tags from given configuration and return a structure containing the signal and
+     *        slots informations.
+     *
+     * @param cfg configuration element containing "<connect>" tags
+     */
+    FWSERVICES_API static ProxyConnections parseConnections2(
+        const CSPTR(::fwRuntime::ConfigurationElement)& connectionCfg,
+        const std::string& errMsgHead,
+        std::function<std::string ()> generateChannelNameFn);
+
+    /**
+     * @brief Parses "<connect>" tags from given configuration to connect signals and slots using given helper.
+     *
+     * @param cfg configuration element containing "<connect>" tags
+     * @param helper SigSlotConnection helper to connect signals and slots
+     * @param obj optional object used to retrieve signal if uid is not defined [deprecated]
+     */
+    FWSERVICES_API static void createConnections(
+        const CSPTR(::fwRuntime::ConfigurationElement)& cfg,
+        ::fwCom::helper::SigSlotConnection& helper,
+        const CSPTR(::fwTools::Object)& obj = CSPTR(::fwTools::Object)());
+
+
+    /**
+     * @brief Parses "<proxy>" tags from given configuration to connect signals and slots using proxies.
+     *
+     * @param objectKey Id of the object
+     * @param cfg configuration element containing "<proxy>" tags
+     * @param proxyMap map containing the proxy's signals and slots connections
+     * @param obj optional object used to retrieve signal if uid is not defined
+     */
+    FWSERVICES_API static void createProxy(
+        const std::string& objectKey,
+        const CSPTR(::fwRuntime::ConfigurationElement)& cfg,
+        ProxyConnectionsMapType& proxyMap,
+        const CSPTR(::fwData::Object)& obj = CSPTR(::fwData::Object)());
+
+
+    /// Disconnects all proxies associated to objectKey
+    FWSERVICES_API static void disconnectProxies(const std::string& objectKey,
+                                                 Config::ProxyConnectionsMapType& proxyMap);
+
+    /// Parse a service and return a service configuration
+    FWSERVICES_API static ::fwServices::IService::Config parseService(
+        const CSPTR(::fwRuntime::ConfigurationElement)& srvElem,
+        const std::string& errMsgHead);
+};
+
+} // namespace helper
+
+} // namespace fwServices
+
+#endif // __FWSERVICES_HELPER_CONFIG_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/helper/ConfigLauncher.hpp b/SrcLib/core/fwServices/include/fwServices/helper/ConfigLauncher.hpp
index e2b9d8b..56d4238 100644
--- a/SrcLib/core/fwServices/include/fwServices/helper/ConfigLauncher.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/helper/ConfigLauncher.hpp
@@ -1,21 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_HELPER_CONFIGLAUNCHER_HPP_
-#define _FWSERVICES_HELPER_CONFIGLAUNCHER_HPP_
+#ifndef __FWSERVICES_HELPER_CONFIGLAUNCHER_HPP__
+#define __FWSERVICES_HELPER_CONFIGLAUNCHER_HPP__
 
-#include <fwTools/Failed.hpp>
+#include "fwServices/IAppConfigManager.hpp"
+#include "fwServices/config.hpp"
+#include "fwServices/registry/AppConfig.hpp"
+
+#include <fwActivities/registry/Activities.hpp>
+
+#include <fwCom/helper/SigSlotConnection.hpp>
 
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/EConfigurationElement.hpp>
 
-#include <fwActivities/registry/Activities.hpp>
+#include <fwTools/Failed.hpp>
 
-#include "fwServices/AppConfigManager.hpp"
-#include "fwServices/helper/SigSlotConnection.hpp"
-#include "fwServices/config.hpp"
 
 namespace fwServices
 {
@@ -25,20 +29,19 @@ class IService;
 namespace helper
 {
 
-
 /**
- * @class   ConfigLauncher
  * @brief   This class provides few methods to manage AppConfig (parsing, starting, stopping...).
- * @date    2013.
  */
 class FWSERVICES_CLASS_API ConfigLauncher : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (ConfigLauncher)(::fwCore::BaseObject),
                                             (()),
-                                            ::boost::make_shared< ConfigLauncher > );
+                                            std::make_shared< ConfigLauncher > );
+
+    typedef ::fwServices::registry::FieldAdaptorType FieldAdaptorType;
 
     /// Constructor. Do nothing.
     FWSERVICES_API ConfigLauncher();
@@ -50,7 +53,7 @@ public :
      * @brief Parse a ConfigLauncher configuration
      *
      * Example of configuration
-     * @verbatim
+     * @code{.xml}
        <service>
            <config>
                 <appConfig id="Visu2DID" >
@@ -61,12 +64,17 @@ public :
                 </appConfig>
             </config>
        </service>
-        @endverbatim
+        @endcode
      */
     FWSERVICES_API virtual void parseConfig(const ::fwServices::IService::ConfigType& config);
 
-    /// Launch Appconfig and connect service with config root object
-    FWSERVICES_API virtual void startConfig( SPTR(::fwServices::IService) srv );
+    /**
+     * @brief Launch Appconfig
+     * @param[in] srv  service to connect with config root object
+     * @param[in] optReplaceMap optional replace map used to replace patterns (concatenated with parsed parameter)
+     */
+    FWSERVICES_API virtual void startConfig( SPTR(::fwServices::IService) srv,
+                                             const FieldAdaptorType& optReplaceMap = FieldAdaptorType() );
 
     /// Stop/destroy AppConfig and disconnect connection with config root object
     FWSERVICES_API virtual void stopConfig();
@@ -74,10 +82,15 @@ public :
     /// Check if AppConfig can be launched.
     FWSERVICES_API virtual bool isExecutable(::fwData::Object::sptr currentObj);
 
+    virtual bool configIsRunning() const
+    {
+        return m_configIsRunning;
+    }
+
 protected:
 
     /// To manage connection to the config root
-    ::fwServices::helper::SigSlotConnection::sptr m_connections;
+    ::fwCom::helper::SigSlotConnection m_connections;
 
     ::fwActivities::registry::ActivityAppConfig m_appConfig;
 
@@ -85,7 +98,7 @@ protected:
     bool m_configIsRunning;
 
     // config manager
-    ::fwServices::AppConfigManager::sptr m_appConfigManager;
+    ::fwServices::IAppConfigManager::sptr m_appConfigManager;
 
 private:
 
@@ -106,6 +119,6 @@ private:
 } // fwServices
 
 
-#endif // _FWSERVICES_HELPER_CONFIGLAUNCHER_HPP_
+#endif // __FWSERVICES_HELPER_CONFIGLAUNCHER_HPP__
 
 
diff --git a/SrcLib/core/fwServices/include/fwServices/helper/ProxyConnections.hpp b/SrcLib/core/fwServices/include/fwServices/helper/ProxyConnections.hpp
new file mode 100644
index 0000000..247b506
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/helper/ProxyConnections.hpp
@@ -0,0 +1,74 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_HELPER_PROXYCONNECTIONS_HPP__
+#define __FWSERVICES_HELPER_PROXYCONNECTIONS_HPP__
+
+#include "fwServices/config.hpp"
+
+#include <fwCom/Signals.hpp>
+#include <fwCom/Slots.hpp>
+
+namespace fwServices
+{
+
+namespace helper
+{
+
+/// Helper class to register proxy connections.
+struct ProxyConnections
+{
+    typedef std::pair< std::string, ::fwCom::Signals::SignalKeyType > SignalInfoType;
+    typedef std::pair< std::string, ::fwCom::Slots::SlotKeyType > SlotInfoType;
+    typedef std::vector< SlotInfoType > SlotInfoContainerType;
+    typedef std::string UIDType;
+    typedef std::string KeyType;
+    typedef std::pair<UIDType, KeyType> ProxyEltType;
+    typedef std::vector<ProxyEltType> ProxyEltVectType;
+
+    std::string m_channel;
+    ProxyEltVectType m_slots;
+    ProxyEltVectType m_signals;
+
+    ProxyConnections() : m_channel("undefined")
+    {
+    }
+
+    ProxyConnections(const std::string& channel) : m_channel(channel)
+    {
+    }
+
+    ~ProxyConnections()
+    {
+    }
+
+    void addSignalConnection(UIDType uid, KeyType key)
+    {
+        m_signals.push_back(std::make_pair(uid, key));
+    }
+    void addSignalConnection(const SignalInfoType& pair)
+    {
+        m_signals.push_back(pair);
+    }
+    void addSlotConnection(UIDType uid, KeyType key)
+    {
+        m_slots.push_back(std::make_pair(uid, key));
+    }
+    void addSlotConnection(const SlotInfoType& pair)
+    {
+        m_slots.push_back(pair);
+    }
+    bool empty() const
+    {
+        return m_slots.empty() && m_signals.empty();
+    }
+};
+
+} // namespace helper
+
+} // namespace fwServices
+
+#endif // __FWSERVICES_HELPER_PROXYCONNECTIONS_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/helper/SigSlotConnection.hpp b/SrcLib/core/fwServices/include/fwServices/helper/SigSlotConnection.hpp
deleted file mode 100644
index c64dd82..0000000
--- a/SrcLib/core/fwServices/include/fwServices/helper/SigSlotConnection.hpp
+++ /dev/null
@@ -1,77 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef FWSERVICES_HELPER_SIGSLOTCONNECTION_HPP_
-#define FWSERVICES_HELPER_SIGSLOTCONNECTION_HPP_
-
-#include <list>
-#include <utility>
-#include <vector>
-
-#include <boost/make_shared.hpp>
-
-#include <fwCore/BaseObject.hpp>
-
-#include <fwCom/Connection.hpp>
-#include <fwCom/HasSlots.hpp>
-#include <fwCom/HasSignals.hpp>
-
-#include "fwServices/config.hpp"
-
-namespace fwServices
-{
-namespace helper
-{
-
-/**
- * @brief  This class provides few tools to connect/disconnect signals/slots between obj/srv
- *
- * @class  SigSlotConnection
- * 
- * @date   2012.
- */
-class FWSERVICES_CLASS_API SigSlotConnection : public ::fwCore::BaseObject
-{
-
-public:
-
-    fwCoreClassDefinitionsWithFactoryMacro( (SigSlotConnection)(::fwCore::BaseObject),
-                                            (()),
-                                            ::boost::make_shared< SigSlotConnection > );
-
-    typedef std::list< ::fwCom::Connection > ConnectionContainerType;
-
-    typedef std::pair< ::fwCom::Signals::SignalKeyType, ::fwCom::Slots::SlotKeyType > KeyConnectionType;
-
-    typedef std::vector< KeyConnectionType > KeyConnectionsType;
-
-    /// Constructor, does nothing
-    FWSERVICES_API SigSlotConnection();
-
-    /// Destructor, calls disconnect()
-    FWSERVICES_API virtual ~SigSlotConnection();
-
-    /// Connect signal to slot, and register this new connection in  m_connections
-    FWSERVICES_API void connect( ::fwCom::HasSignals::sptr hasSignals, ::fwCom::Signals::SignalKeyType signalKey,
-                  ::fwCom::HasSlots::sptr hasSlots, ::fwCom::Slots::SlotKeyType slotKey );
-
-    /// Connect signals to slots, and register these new connections in  m_connections
-    FWSERVICES_API void connect( ::fwCom::HasSignals::sptr hasSignals, ::fwCom::HasSlots::sptr hasSlots,
-                                 const KeyConnectionsType & keyConnections );
-
-    /// Disconnect all registered connections and clear m_connections
-    FWSERVICES_API void disconnect();
-
-protected :
-
-    /// Connections storage
-    ConnectionContainerType m_connections;
-};
-
-} // end namespace helper
-} // end namespace fwServices
-
-#endif // FWSERVICES_HELPER_SIGSLOTCONNECTION_HPP_
diff --git a/SrcLib/core/fwServices/include/fwServices/macros.hpp b/SrcLib/core/fwServices/include/fwServices/macros.hpp
index a625373..c57db36 100644
--- a/SrcLib/core/fwServices/include/fwServices/macros.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/macros.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,14 +7,11 @@
 #ifndef __FWSERVICES_MACROS_HPP__
 #define __FWSERVICES_MACROS_HPP__
 
-#include <fwCore/concept_checks.hpp>
-
-#include <fwCom/util/log.hpp>
-
 #include "fwServices/IService.hpp"
-
 #include "fwServices/ServiceFactoryRegistrar.hpp"
 
+#include <fwCore/concept_checks.hpp>
+
 namespace fwServices
 {
 
@@ -26,55 +23,30 @@ namespace fwServices
 /**
  * @brief Service object type association including all string-based registration
  * Associations concern Service-ObjectType are ObjectType-Service. Keys are typeid.
- * 
+ *
  */
 
-#define fwServicesRegisterMacro( ServiceType , ServiceImpl, ServiceObject )                        \
-    class BOOST_PP_CAT(  ServiceTypeConceptCheck , __LINE__ )                                      \
+#define fwServicesRegisterMacro( ServiceType, ServiceImpl, ServiceObject )                         \
+    class BOOST_PP_CAT (  ServiceTypeConceptCheck, __LINE__ )                                      \
     {                                                                                              \
     public:                                                                                        \
         BOOST_CONCEPT_ASSERT((::fwCore::concepts::SharedPtrTypedef< ServiceType >));               \
     };                                                                                             \
-    class BOOST_PP_CAT(  ServiceImplConceptCheck , __LINE__ )                                      \
+    class BOOST_PP_CAT (  ServiceImplConceptCheck, __LINE__ )                                      \
     {                                                                                              \
     public:                                                                                        \
         BOOST_CONCEPT_ASSERT((::fwCore::concepts::SharedPtrTypedef< ServiceImpl >));               \
     };                                                                                             \
-    class BOOST_PP_CAT(  ServiceObjectConceptCheck , __LINE__ )                                    \
+    class BOOST_PP_CAT (  ServiceObjectConceptCheck, __LINE__ )                                    \
     {                                                                                              \
     public:                                                                                        \
         BOOST_CONCEPT_ASSERT((::fwCore::concepts::SharedPtrTypedef< ServiceObject >));             \
     };                                                                                             \
     static ::fwServices::ServiceFactoryRegistrar< ServiceImpl >                                    \
-        BOOST_PP_CAT( serviceRegistrar, __LINE__) ( #ServiceImpl , #ServiceType, #ServiceObject );
+    BOOST_PP_CAT( serviceRegistrar, __LINE__) ( #ServiceImpl, #ServiceType, #ServiceObject );
 
 //@}
 
-/// Signal async emit Parameters. Print SLM_COM with Sender string.
-#define fwServicesNotifyMacro( Sender, Signal, Parameters)                     \
-    OSLM_COM(Sender << " uses '" << Signal->getID() << "' sig to asyncEmit."); \
-    Signal->asyncEmit Parameters ;
-
-/// Signal async emit Parameters and block given Slot connection. Print SLM_COM with Sender string.
-#define fwServicesBlockAndNotifyMacro( Sender, Signal, Parameters, Slot)    \
-    {                                                                       \
-        ::fwCom::Connection::Blocker block(Signal->getConnection(Slot));    \
-        fwServicesNotifyMacro(Sender, Signal, Parameters)                   \
-    }
-
-/// Signal async emit the message. Print SLM_COM with Sender string.
-#define fwServicesNotifyMsgMacro( Sender, Signal, Message)                                                           \
-    OSLM_COM(Sender << " uses '" << Signal->getID() << "' sig to asyncEmit " << Message->getLightID()  \
-   << "::" << Message->getEventIds()[0]);                                                                              \
-    Signal->asyncEmit(Message) ;
-
-/// Signal async emit Message and block given Slot connection. Print SLM_COM with Sender string.
-#define fwServicesBlockAndNotifyMsgMacro( Sender, Signal, Message, Slot)    \
-    {                                                                       \
-        ::fwCom::Connection::Blocker block(Signal->getConnection(Slot));    \
-        fwServicesNotifyMsgMacro(Sender, Signal, Message)                   \
-    }
-
 }
 
 #endif /*__FWSERVICES_MACROS_HPP__*/
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Add.hpp b/SrcLib/core/fwServices/include/fwServices/op/Add.hpp
index ca5bb7e..ecdacf7 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Add.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/op/Add.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_ADD_HPP_
-#define _FWSERVICES_ADD_HPP_
+#ifndef __FWSERVICES_OP_ADD_HPP__
+#define __FWSERVICES_OP_ADD_HPP__
 
 #include <fwTools/Object.hpp>
 
-#include "fwServices/registry/ObjectService.hpp"
 #include "fwServices/IService.hpp"
 
 namespace fwServices
@@ -24,12 +23,13 @@ namespace fwServices
  * @brief Create and attach to the object obj a service of type serviceType, implementation _implementationId with the universal unique identifier _id
  * @return the service
  * @note the template method is also available, where the template parameter SERVICE corresponds to the serviceType
- * 
+ *
  */
-FWSERVICES_API ::fwServices::IService::sptr add( ::fwData::Object::sptr obj , std::string serviceType , std::string _implementationId , std::string _id = "") ;
+FWSERVICES_API ::fwServices::IService::sptr add( ::fwData::Object::sptr obj, std::string serviceType,
+                                                 std::string _implementationId, std::string _id = "");
 
 template<class SERVICE>
-SPTR(SERVICE) add( ::fwData::Object::sptr obj , std::string _implementationId , std::string _id= "") ;
+SPTR(SERVICE) add( ::fwData::Object::csptr obj, std::string _implementationId, std::string _id = "");
 
 //@}
 
@@ -38,4 +38,4 @@ SPTR(SERVICE) add( ::fwData::Object::sptr obj , std::string _implementationId ,
 
 #include "fwServices/op/Add.hxx"
 
-#endif /*_FWSERVICES_ADD_HPP_*/
+#endif /*__FWSERVICES_OP_ADD_HPP__*/
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Add.hxx b/SrcLib/core/fwServices/include/fwServices/op/Add.hxx
index b425b15..8ee4a40 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Add.hxx
+++ b/SrcLib/core/fwServices/include/fwServices/op/Add.hxx
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_ADD_HXX_
-#define _FWSERVICES_ADD_HXX_
+#ifndef __FWSERVICES_OP_ADD_HXX__
+#define __FWSERVICES_OP_ADD_HXX__
 
 #include <fwData/Object.hpp>
 
@@ -18,18 +18,20 @@ namespace fwServices
 //------------------------------------------------------------------------------
 
 template<class SERVICE>
-SPTR(SERVICE) add( ::fwData::Object::sptr obj  , std::string _implementationId , std::string _id)
+SPTR(SERVICE) add( ::fwData::Object::csptr obj, std::string _implementationId, std::string _id)
 {
-    std::string serviceType = ::fwCore::TypeDemangler< SERVICE >().getClassname() ;
-    ::fwServices::IService::sptr service = ::fwServices::add( obj , serviceType , _implementationId, _id ) ;
+    std::string serviceType = ::fwCore::TypeDemangler< SERVICE >().getClassname();
+    // TODO: Remove this ConstCast ?
+    auto const notConstObj = ::fwData::Object::constCast(obj);
+    ::fwServices::IService::sptr service = ::fwServices::add( notConstObj, serviceType, _implementationId, _id );
     OSLM_ASSERT("Failed to add "<<_implementationId, service );
-    SPTR(SERVICE) castedService = ::boost::dynamic_pointer_cast< SERVICE >( service ) ;
+    SPTR(SERVICE) castedService = std::dynamic_pointer_cast< SERVICE >( service );
     SLM_ASSERT("DynamicCast failed", castedService );
-    return castedService ;
+    return castedService;
 }
 
 //------------------------------------------------------------------------------
 
 }
 
-#endif /*HELPER_HPP_*/
+#endif /* __FWSERVICES_OP_ADD_HXX__ */
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Get.hpp b/SrcLib/core/fwServices/include/fwServices/op/Get.hpp
index 415f25d..3170ef4 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Get.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/op/Get.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_GET_HPP_
-#define _FWSERVICES_GET_HPP_
+#ifndef __FWSERVICES_OP_GET_HPP__
+#define __FWSERVICES_OP_GET_HPP__
 
 #include <fwTools/Object.hpp>
 
-#include "fwServices/registry/ObjectService.hpp"
 #include "fwServices/IService.hpp"
 
 namespace fwServices
@@ -25,16 +24,17 @@ namespace fwServices
  * @note The template method is also available, where the template parameter SERVICE relates the service type serviceType
  * @todo Do not automatically add service, raise an error instead
  * @return the requested service, null if not
- * 
+ *
  */
-FWSERVICES_API ::fwServices::IService::sptr get( ::fwData::Object::sptr obj, std::string serviceType ) throw(fwTools::Failed );
+FWSERVICES_API ::fwServices::IService::sptr get( ::fwData::Object::sptr obj,
+                                                 std::string serviceType ) throw(fwTools::Failed );
 
 template<class SERVICE>
 SPTR(SERVICE) get( ::fwData::Object::sptr obj) throw(fwTools::Failed );
 
 /**
  * @brief Return a registered IService having uid as unique universal identifier , its an alias on fwData::Object::getID(...) method
- * 
+ *
 
  */
 FWSERVICES_API ::fwServices::IService::sptr get( std::string uid ) throw(fwTools::Failed );
@@ -47,4 +47,4 @@ FWSERVICES_API ::fwServices::IService::sptr get( std::string uid ) throw(fwTools
 
 #include "fwServices/op/Get.hxx"
 
-#endif /*_FWSERVICES_GET_HPP_*/
+#endif /*__FWSERVICES_OP_GET_HPP__*/
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Get.hxx b/SrcLib/core/fwServices/include/fwServices/op/Get.hxx
index 2109a88..86691cd 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Get.hxx
+++ b/SrcLib/core/fwServices/include/fwServices/op/Get.hxx
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_GET_HXX_
-#define _FWSERVICES_GET_HXX_
+#ifndef __FWSERVICES_OP_GET_HXX__
+#define __FWSERVICES_OP_GET_HXX__
 
 #include <fwData/Object.hpp>
 
@@ -21,14 +21,14 @@ namespace fwServices
 template<class SERVICE>
 SPTR(SERVICE) get( ::fwData::Object::sptr obj ) throw(fwTools::Failed )
 {
-    std::vector< typename SPTR(SERVICE) > services = ::fwServices::OSR::getServices< SERVICE >( obj );
-    std::string serviceType = ::fwCore::TypeDemangler< SERVICE >().getClassname() ;
+    auto services           = ::fwServices::OSR::getServices< SERVICE >( obj );
+    std::string serviceType = ::fwCore::TypeDemangler< SERVICE >().getClassname();
     OSLM_ASSERT("Service "<<serviceType<<" not unique, registered "<<services.size()<<" time", services.size() == 1);
-    return services.at(0) ;
+    return *services.begin();
 }
 
 //------------------------------------------------------------------------------
 
 }
 
-#endif /*HELPER_HPP_*/
+#endif /*__FWSERVICES_OP_GET_HXX__*/
diff --git a/SrcLib/core/fwServices/include/fwServices/op/Namespace.hpp b/SrcLib/core/fwServices/include/fwServices/op/Namespace.hpp
index f9a184b..ab0c418 100644
--- a/SrcLib/core/fwServices/include/fwServices/op/Namespace.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/op/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWSERVICESOPNAMESPACE_HPP_
-#define FWSERVICESOPNAMESPACE_HPP_
+#ifndef __FWSERVICES_OP_NAMESPACE_HPP__
+#define __FWSERVICES_OP_NAMESPACE_HPP__
 
 namespace fwServices
 {
 /**
  * @brief       The namespace fwServices::op contains several methods for managing services to object
  * @namespace   fwServices::op
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace op
 
 }
 }
-#endif /* FWSERVICESOPNAMESPACE_HPP_ */
+#endif /* __FWSERVICES_OP_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/ActiveWorkers.hpp b/SrcLib/core/fwServices/include/fwServices/registry/ActiveWorkers.hpp
index bc906b6..27b9511 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ActiveWorkers.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ActiveWorkers.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,18 +21,18 @@ namespace registry
 /**
  * @class ActiveWorkers
  * @brief This class to register active worker in the system, creates a default worker
- * 
+ *
  * @date 2012.
  */
 class FWSERVICES_CLASS_API ActiveWorkers : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro(
-            (ActiveWorkers)(::fwCore::BaseObject),
-            (()),
-            ::boost::make_shared< ActiveWorkers >);
+        (ActiveWorkers)(::fwCore::BaseObject),
+        (()),
+        std::make_shared< ActiveWorkers >);
 
     typedef std::string WorkerKeyType;
 
@@ -74,7 +74,7 @@ public :
     /// Returns an instance of ActiveWorkers.
     FWSERVICES_API static ActiveWorkers::sptr getDefault();
 
-protected :
+protected:
 
     /// Association key <=> worker
     WorkerMapType m_workers;
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp
index 2edb800..4be24db 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig.hpp
@@ -1,25 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_REGISTRY_APPCONFIG_HPP_
-#define _FWSERVICES_REGISTRY_APPCONFIG_HPP_
+#ifndef __FWSERVICES_REGISTRY_APPCONFIG_HPP__
+#define __FWSERVICES_REGISTRY_APPCONFIG_HPP__
 
-#include <map>
-
-#include <fwTools/Object.hpp>
-#include <fwTools/macros.hpp>
+#include "fwServices/config.hpp"
+#include "fwServices/registry/AppInfo.hpp"
 
 #include <fwCore/mt/types.hpp>
 
 #include <fwData/Composite.hpp>
 
 #include <fwRuntime/EConfigurationElement.hpp>
-#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/Extension.hpp>
 
-#include "fwServices/config.hpp"
+#include <fwTools/macros.hpp>
+#include <fwTools/Object.hpp>
+
+#include <map>
 
 
 namespace fwServices
@@ -28,54 +29,16 @@ namespace fwServices
 namespace registry
 {
 
-
 /**
- * @class AppInfo
- * 
- */
-class FWSERVICES_CLASS_API AppInfo : public ::fwCore::BaseObject
-{
-public :
-
-    enum ConfigType {
-        TEMPLATE,
-        STANDARD,
-        PARAMETERS
-    };
-
-    fwCoreClassDefinitionsWithFactoryMacro( (AppInfo)(::fwCore::BaseObject), (()), new AppInfo );
-
-    /// Constructor, do nothing.
-    AppInfo(){}
-
-    /// Destructor, do nothing.
-    virtual ~AppInfo(){}
-
-    ConfigType type;
-    std::string group;
-    std::string desc;
-    typedef std::map< std::string, std::string > ParamatersType;
-    ParamatersType parameters;
-    ::fwRuntime::ConfigurationElement::csptr config;
-};
-
-
-/**
- * @class AppConfig
  * @brief This class allows to register all the configuration which has the point extension
  *        "::fwServices::registry::AppConfig".
- * 
- * @date 2012.
  */
 class FWSERVICES_CLASS_API AppConfig : public ::fwCore::BaseObject
 {
 
 public:
 
-    /// Associations of <pattern, value>.
-    typedef std::map< std::string, std::string > FieldAdaptorType;
-
-    fwCoreClassDefinitionsWithFactoryMacro( (AppConfig)(::fwCore::BaseObject), (()), new AppConfig) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (AppConfig)(::fwCore::BaseObject), (()), new AppConfig);
 
     /// Destructor
     FWSERVICES_API virtual ~AppConfig();
@@ -97,13 +60,13 @@ public:
      * @param config the registered config.
      * @note This method is thread safe
      */
-    FWSERVICES_API void addAppInfo
-    (   const std::string & configId,
-            AppInfo::ConfigType type,
-            const std::string & group,
-            const std::string & desc,
-            const AppInfo::ParamatersType & parameters,
-            ::fwRuntime::ConfigurationElement::csptr config);
+    FWSERVICES_API void addAppInfo (   const std::string & configId,
+                                       const std::string & group,
+                                       const std::string & desc,
+                                       const AppInfo::ParametersType & parameters,
+                                       ::fwRuntime::ConfigurationElement::csptr config,
+                                       const std::string bundleId,
+                                       const std::string bundleVersion);
 
     /**
      * @brief  Return the adapted config with the identifier configId.
@@ -112,7 +75,8 @@ public:
      * @note This method is thread safe.
      */
     FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string & configId,
-            const FieldAdaptorType replaceFields = FieldAdaptorType() ) const;
+                                                                                      const FieldAdaptorType replaceFields =
+                                                                                          FieldAdaptorType() ) const;
 
     /**
      * @brief  Return the adapted config with the identifier configId.
@@ -120,7 +84,15 @@ public:
      * @param replaceFields composite of association between the value and the pattern to replace in the config.
      * @note This method is thread safe.
      */
-    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string & configId, ::fwData::Composite::csptr replaceFields ) const;
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string & configId,
+                                                                                      ::fwData::Composite::csptr replaceFields )
+    const;
+
+    /**
+     * @brief Retrieves the bunble from the config id
+     * @param configId the config identifier
+     */
+    FWSERVICES_API std::shared_ptr< ::fwRuntime::Bundle > getBundle(const std::string & configId);
 
     /**
      * @brief Return all configurations ( standard and template ) register in the registry.
@@ -149,7 +121,7 @@ public:
     /// Return an instance of AppConfig.
     FWSERVICES_API static AppConfig::sptr getDefault();
 
-protected :
+protected:
 
     typedef std::map< std::string, AppInfo::sptr > Registry;
 
@@ -159,7 +131,7 @@ protected :
     /// Constructor
     FWSERVICES_API AppConfig();
 
-private :
+private:
 
     /// Convert the composite into map <pattern, value>.
     FieldAdaptorType compositeToFieldAdaptor( ::fwData::Composite::csptr fieldAdaptors ) const;
@@ -188,6 +160,6 @@ private :
 
 } // namespace fwServices
 
-#endif // _FWSERVICES_REGISTRY_APPCONFIG_HPP_
+#endif // __FWSERVICES_REGISTRY_APPCONFIG_HPP__
 
 
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/AppConfig2.hpp b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig2.hpp
new file mode 100644
index 0000000..696342f
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppConfig2.hpp
@@ -0,0 +1,178 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_REGISTRY_APPCONFIG2_HPP__
+#define __FWSERVICES_REGISTRY_APPCONFIG2_HPP__
+
+#include "fwServices/config.hpp"
+#include "fwServices/registry/AppInfo.hpp"
+
+#include <fwCore/mt/types.hpp>
+
+#include <fwData/Composite.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwRuntime/Extension.hpp>
+
+#include <fwTools/macros.hpp>
+#include <fwTools/Object.hpp>
+
+#include <map>
+
+namespace fwServices
+{
+
+namespace registry
+{
+
+/**
+ * @brief This class allows to register all the configuration which has the point extension
+ *        "::fwServices::registry::AppConfig2".
+ */
+class FWSERVICES_CLASS_API AppConfig2 : public ::fwCore::BaseObject
+{
+
+public:
+
+    /// Associations of <pattern, value>.
+    typedef std::map< std::string, std::string > FieldAdaptorType;
+
+    fwCoreClassDefinitionsWithFactoryMacro( (AppConfig2)(::fwCore::BaseObject), (()), new AppConfig2);
+
+    /// Destructor
+    FWSERVICES_API virtual ~AppConfig2();
+
+    /**
+     * @brief Parses bundle information to retrieve configuration declaration.
+     * @warning This method must be launch only once. The same extension will not be parsed twice.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API void parseBundleInformation();
+
+    /**
+     * @brief Parses bundle information to retrieve configuration declaration.
+     * @warning This method must be launch only once. The same extension will not be parsed twice.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API void parseBundleInformation(
+        const std::vector< std::shared_ptr< ::fwRuntime::Extension > > &extensions);
+
+    /**
+     * @brief Register a new config.
+     * @param configId the identifier of the registered config.
+     * @param type the type of the added config. It can be TEMPLATE, STANDARD or PARAMETERS.
+     * @param group the name of the group that owns the config.
+     * @param desc the config description.
+     * @param parameters the list of template parameters in the config.
+     * @param config the registered config.
+     * @note This method is thread safe
+     */
+    FWSERVICES_API void addAppInfo( const std::string & configId,
+                                    const std::string & group,
+                                    const std::string & desc,
+                                    const AppInfo::ParametersType & parameters,
+                                    ::fwRuntime::ConfigurationElement::csptr config,
+                                    const std::string bundleId,
+                                    const std::string bundleVersion);
+
+    /**
+     * @brief  Return the adapted config with the identifier configId.
+     * @param configId the identifier of the requested config.
+     * @param replaceFields associations between the value and the pattern to replace in the config.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string & configId,
+                                                                                      const FieldAdaptorType replaceFields,
+                                                                                      bool autoPrefixId ) const;
+
+    /**
+     * @brief  Return the adapted config with the identifier configId.
+     * @param configId the identifier of the requested config.
+     * @param replaceFields composite of association between the value and the pattern to replace in the config.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getAdaptedTemplateConfig( const std::string & configId,
+                                                                                      ::fwData::Composite::csptr replaceFields,
+                                                                                      bool autoPrefixId )
+    const;
+
+    /**
+     * @brief Retrieves the bunble from the config id
+     * @param configId the config identifier
+     */
+    FWSERVICES_API std::shared_ptr< ::fwRuntime::Bundle > getBundle(const std::string & configId);
+
+    /**
+     * @brief Return all configurations ( standard and template ) register in the registry.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API std::vector< std::string > getAllConfigs() const;
+
+    /**
+     * @brief Return all configurations with specified group.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API std::vector< std::string > getConfigsFromGroup(const std::string & group) const;
+
+    /**
+     * @brief Clear the registry.
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API void clearRegistry();
+
+    /**
+     * @brief Create an unique identifier
+     * @note This method is thread safe.
+     */
+    FWSERVICES_API static std::string getUniqueIdentifier(const std::string& serviceUid = "" );
+
+    /// Return an instance of AppConfig2.
+    FWSERVICES_API static AppConfig2::sptr getDefault();
+
+protected:
+
+    typedef std::map< std::string, AppInfo::sptr > Registry;
+
+    /// Container of <configId, appConfig2 information>
+    Registry m_reg;
+
+    /// Constructor
+    FWSERVICES_API AppConfig2();
+
+private:
+
+    /// Convert the composite into map <pattern, value>.
+    FieldAdaptorType compositeToFieldAdaptor( ::fwData::Composite::csptr fieldAdaptors ) const;
+
+    /// Adapts the configuration : replace field thanks to field adaptors
+    ::fwRuntime::EConfigurationElement::sptr adaptConfig(::fwRuntime::ConfigurationElement::csptr _cfgElem,
+                                                         const FieldAdaptorType & fieldAdaptors,
+                                                         const std::string &autoPrefixId ) const;
+
+    /// Adapts field thanks to field adaptors
+    std::string adaptField( const std::string & _str, const FieldAdaptorType & fieldAdaptors ) const;
+
+    /// Used to protect the registry access.
+    mutable ::fwCore::mt::ReadWriteMutex m_registryMutex;
+
+    /// Used to protect the unique identifier creation.
+    static ::fwCore::mt::Mutex s_idMutex;
+
+    /// The global instance of the app config.
+    static AppConfig2::sptr s_currentAppConfig2;
+
+    /// The static identifier for mandatory parameters.
+    static std::string s_mandatoryParameterIdentifier;
+};
+
+} // namespace registry
+
+} // namespace fwServices
+
+#endif // __FWSERVICES_REGISTRY_APPCONFIG2_HPP__
+
+
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/AppConfigParameters.hpp b/SrcLib/core/fwServices/include/fwServices/registry/AppConfigParameters.hpp
index da50afa..82f7227 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/AppConfigParameters.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppConfigParameters.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP_
-#define _FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP_
+#ifndef __FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP__
+#define __FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP__
 
 #include <map>
 
@@ -28,18 +28,15 @@ namespace registry
 {
 
 /**
- * @class AppConfigParameters
  * @brief This class allows to register all the configuration parameters which has the point extension
  *        "::fwServices::registry::AppConfigParameters".
- * 
- * @date 2012
  */
 class FWSERVICES_CLASS_API AppConfigParameters : public ::fwCore::BaseObject
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (AppConfigParameters)(::fwCore::BaseObject), (()), new AppConfigParameters) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (AppConfigParameters)(::fwCore::BaseObject), (()), new AppConfigParameters);
 
     /// Return the default global instance of AppConfigParameters
     FWSERVICES_API static AppConfigParameters::sptr getDefault();
@@ -58,7 +55,7 @@ public:
      * @brief Get the parameters associated to extension id.
      * @note This method is thread safe.
      **/
-    FWSERVICES_API const AppConfig::FieldAdaptorType & getParameters( const std::string & extensionId ) const;
+    FWSERVICES_API const FieldAdaptorType & getParameters( const std::string & extensionId ) const;
 
     /**
      * @brief Clear the registry.
@@ -66,9 +63,9 @@ public:
      */
     FWSERVICES_API void clearRegistry();
 
-protected :
+protected:
 
-    typedef std::map< std::string, AppConfig::FieldAdaptorType > Registry;
+    typedef std::map< std::string, FieldAdaptorType > Registry;
 
     /// Container of parameter information
     Registry m_reg;
@@ -89,6 +86,6 @@ protected :
 
 } // namespace fwServices
 
-#endif // _FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP_
+#endif // __FWSERVICES_REGISTRY_APPCONFIGPARAMETERS_HPP__
 
 
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/AppInfo.hpp b/SrcLib/core/fwServices/include/fwServices/registry/AppInfo.hpp
new file mode 100644
index 0000000..11c717d
--- /dev/null
+++ b/SrcLib/core/fwServices/include/fwServices/registry/AppInfo.hpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_REGISTRY_APPINFO_HPP__
+#define __FWSERVICES_REGISTRY_APPINFO_HPP__
+
+#include "fwServices/config.hpp"
+
+#include <fwCore/BaseObject.hpp>
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <map>
+
+namespace fwServices
+{
+
+namespace registry
+{
+
+/// Associations of <pattern, value>.
+typedef std::map< std::string, std::string > FieldAdaptorType;
+
+/**
+ */
+class FWSERVICES_CLASS_API AppInfo : public ::fwCore::BaseObject
+{
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro( (AppInfo)(::fwCore::BaseObject), (()), new AppInfo );
+
+    /// Constructor, do nothing.
+    AppInfo()
+    {
+    }
+
+    /// Destructor, do nothing.
+    virtual ~AppInfo()
+    {
+    }
+
+    std::string group;
+    std::string desc;
+    typedef std::map< std::string, std::string > ParametersType;
+    ParametersType parameters;
+    ::fwRuntime::ConfigurationElement::csptr config;
+    std::string bundleId; ///< Bundle identifier (used to start the bundle when the appConfig is launched)
+    std::string bundleVersion; ///< Bundle version (used to start the bundle when the appConfig is launched)
+};
+
+} // namespace registry
+
+} // namespace fwServices
+
+#endif // __FWSERVICES_REGISTRY_APPINFO_HPP__
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/Namespace.hpp b/SrcLib/core/fwServices/include/fwServices/registry/Namespace.hpp
index 8192422..d4cd295 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/Namespace.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/Namespace.hpp
@@ -1,18 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWSERVICESREGISTRYNAMESPACE_HPP_
-#define FWSERVICESREGISTRYNAMESPACE_HPP_
+#ifndef __FWSERVICES_REGISTRY_NAMESPACE_HPP__
+#define __FWSERVICES_REGISTRY_NAMESPACE_HPP__
 
 namespace fwServices
 {
 /**
  * @brief       The namespace fwServices::registry contains class to manage services, object and config.
  * @namespace   fwServices::registry
- * 
+ *
  * @date        2009-2010.
  *
  */
@@ -21,4 +21,4 @@ namespace registry
 
 }
 }
-#endif /* FWSERVICESREGISTRYNAMESPACE_HPP_ */
+#endif /* __FWSERVICES_REGISTRY_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hpp b/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hpp
index 1cc2db0..e081145 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,25 +7,31 @@
 #ifndef __FWSERVICES_REGISTRY_OBJECTSERVICE_HPP__
 #define __FWSERVICES_REGISTRY_OBJECTSERVICE_HPP__
 
-#include <map>
-#include <vector>
+#include "fwServices/config.hpp"
+#include "fwServices/IService.hpp"
 
-#include <boost/static_assert.hpp>
-#include <boost/type_traits.hpp>
-#include <boost/shared_ptr.hpp>
-#include <boost/bimap.hpp>
-#include <boost/bimap/unordered_set_of.hpp>
-#include <boost/bimap/multiset_of.hpp>
+#include <fwCom/HasSignals.hpp>
 
-#include <fwCore/mt/types.hpp>
-#include <fwCore/base.hpp>
 #include <fwCore/LogicStamp.hpp>
+#include <fwCore/mt/types.hpp>
 
 #include <fwTools/Failed.hpp>
 #include <fwTools/Object.hpp>
 
-#include "fwServices/config.hpp"
-#include "fwServices/IService.hpp"
+#include <boost/bimap.hpp>
+#include <boost/bimap/multiset_of.hpp>
+#include <boost/bimap/unordered_set_of.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/type_traits.hpp>
+
+#include <map>
+#include <unordered_map>
+#include <set>
+
+namespace fwData
+{
+class Object;
+}
 
 namespace fwServices
 {
@@ -33,20 +39,18 @@ namespace registry
 {
 
 /**
- * @class ObjectService
- *
  * @brief maintain the relation between objects and services
  *
  * The API of ObjectService should not be directly invoked,
  * fwServices/op methods (i.e. add, get,...) should be used instead
- *
- * 
  */
-class FWSERVICES_CLASS_API ObjectService: public ::fwCore::BaseObject
+class FWSERVICES_CLASS_API ObjectService : public ::fwCore::BaseObject,
+                                           public ::fwCom::HasSignals
 {
 public:
 
-    fwCoreNonInstanciableClassDefinitionsMacro( (ObjectService)(::fwCore::BaseObject) ) ;
+    fwCoreNonInstanciableClassDefinitionsMacro( (ObjectService)(::fwCore::BaseObject) );
+    fwCoreAllowSharedFromThis();
 
     /**
      * @brief Service container
@@ -54,12 +58,28 @@ public:
      */
     typedef ::boost::bimaps::bimap<
             ::boost::bimaps::multiset_of< ::fwCore::LogicStamp::LogicStampType >,
-            ::boost::bimaps::unordered_set_of< ::fwServices::IService::sptr >
+            ::boost::bimaps::multiset_of< ::fwServices::IService::sptr >
             > ServiceContainerType;
 
 
-    typedef std::vector< SPTR( ::fwData::Object ) >       ObjectVectorType;
-    typedef std::vector< SPTR( ::fwServices::IService ) > ServiceVectorType;
+    typedef std::set< CSPTR( ::fwData::Object ) >      ObjectVectorType;
+    typedef std::set< SPTR( ::fwServices::IService ) > ServiceVectorType;
+
+    typedef std::map< ::fwServices::IService::KeyType, WPTR( ::fwData::Object )> ObjectMapType;
+
+    /**
+     * @name Signals API
+     * @{
+     */
+    /// Type of signal m_sigRenderRequested
+    typedef ::fwCom::Signal< void (::fwData::Object::sptr, const std::string&) > RegisterSignalType;
+
+    FWSERVICES_API static const ::fwCom::Signals::SignalKeyType s_REGISTERED_SIG;
+    FWSERVICES_API static const ::fwCom::Signals::SignalKeyType s_UNREGISTERED_SIG;
+    ///@}
+
+    /// Constructor
+    FWSERVICES_API ObjectService();
 
     /// Return some informations contain in the registry
     FWSERVICES_API std::string getRegistryInformation() const;
@@ -67,7 +87,6 @@ public:
     /**
      * @name Management of registrations
      */
-
     //@{
 
     /**
@@ -77,6 +96,21 @@ public:
      */
     FWSERVICES_API void registerService( ::fwData::Object::sptr obj, ::fwServices::IService::sptr service );
 
+    /**
+     * @brief Register the service (service) for the object (obj) at the given service key.
+     * It also updates IService::m_associatedObject of service to point to obj
+     * removal at obj destruction.
+     */
+    FWSERVICES_API void registerService(::fwData::Object::sptr obj, const ::fwServices::IService::KeyType& objKey,
+                                        ::fwServices::IService::AccessType access,
+                                        ::fwServices::IService::sptr service);
+
+    /**
+     * @brief Emit the signal 'registered'
+     */
+    FWSERVICES_API void registerServiceOutput(::fwData::Object::sptr object,
+                                              const ::fwServices::IService::KeyType& objKey,
+                                              ::fwServices::IService::sptr service);
     //@}
 
     /**
@@ -87,17 +121,29 @@ public:
 
     /**
      * @brief Remove the service (service) from the m_container
-     * It invokes service stop method first as well as related observations removal.
      */
     FWSERVICES_API void unregisterService(  ::fwServices::IService::sptr service );
 
     /**
-     * @brief container manipulator (Helper)
-     * remove service from ObjectService containers, do not perform any "semantic action" like
-     * stop service, remove comm channel
-     * @note (internal use) use with care
+     * @brief Remove an object key from a service
      */
-    void  removeFromContainer( ::fwServices::IService::sptr service );
+    FWSERVICES_API void unregisterService( const ::fwServices::IService::KeyType& objKey,
+                                           ::fwServices::IService::AccessType access,
+                                           ::fwServices::IService::sptr service );
+
+    /**
+     * @brief Emit the signal 'unregistered'
+     */
+    FWSERVICES_API void unregisterServiceOutput( const ::fwServices::IService::KeyType& objKey,
+                                                 ::fwServices::IService::sptr service );
+
+
+    /**
+     * @brief Remove the service (service) from the m_container
+     */
+    FWSERVICES_API bool isRegistered( const ::fwServices::IService::KeyType& objKey,
+                                      ::fwServices::IService::AccessType access,
+                                      ::fwServices::IService::sptr service );
 
     //@}
 
@@ -112,65 +158,65 @@ public:
      * @note Services may be associated to different object
      */
     template<class SERVICE>
-    std::vector< SPTR(SERVICE) > getServices() const;
+    std::set< SPTR(SERVICE) > getServices() const;
 
     /**
      * @brief Return a container with all services of type SERVICE associated to obj in m_container
      */
     template<class SERVICE>
-    std::vector< SPTR(SERVICE) > getServices(::fwData::Object::sptr obj) const;
+    std::set< SPTR(SERVICE) > getServices(::fwData::Object::sptr obj) const;
 
     /**
      * @brief Return registered services matching serviceType
      * @note Should be optimized
      * @note Invoke getServices( ::fwData::Object::sptr , const std::string & ) for each registered object
-     * 
+     *
      */
-    FWSERVICES_API ServiceVectorType getServices( const std::string & serviceType ) const;
+    FWSERVICES_API ServiceVectorType getServices( const std::string& serviceType ) const;
 
     /**
      * @brief Return a container of services of type serviceType which are attached to obj
-     * 
+     *
      */
-    FWSERVICES_API ServiceVectorType getServices( ::fwData::Object::sptr obj , const std::string & serviceType ) const;
+    FWSERVICES_API ServiceVectorType getServices( ::fwData::Object::sptr obj, const std::string& serviceType ) const;
 
     /**
      * @brief return a vector containing all services associated with the object obj
-     * 
+     *
      */
     FWSERVICES_API ServiceVectorType getServices( ::fwData::Object::sptr obj ) const;
 
     /**
      * @brief Return a container with all objects associated with a service of type SERVICE in m_container
      */
-     template<class SERVICE>
-     ObjectVectorType getObjects() const;
+    template<class SERVICE>
+    ObjectVectorType getObjects() const;
 
 
     /**
      * @brief Return a container with all objects registered in m_container
      */
-     FWSERVICES_API ObjectVectorType getObjects() const;
+    FWSERVICES_API ObjectVectorType getObjects() const;
 
     //@}
 
-     /**
-      * @name Some useful getters
-      */
+    /**
+     * @name Some useful getters
+     */
 
-     //@{
-     /**
-      * @brief return true is obj has at least one service of type srvType
-      * 
-      */
-     FWSERVICES_API bool has( ::fwData::Object::sptr obj , const std::string &srvType) const;
+    //@{
+    /**
+     * @brief return true is obj has at least one service of type srvType
+     *
+     */
+    FWSERVICES_API bool has( ::fwData::Object::sptr obj, const std::string& srvType) const;
 
-     /**
-      * @brief return true if key is still present in OSR
-      */
-     FWSERVICES_API bool hasKey( ::fwCore::LogicStamp::csptr key ) const;
+    /**
+     * @brief return true if key is still present in OSR
+     */
+    FWSERVICES_API bool hasKey( ::fwCore::LogicStamp::csptr key ) const;
 
-     //@}
+    //@}
 
 
     /**
@@ -179,22 +225,29 @@ public:
 
     //@{
 
-     /**
+    /**
      * @brief Move service (service) to object objDst in the m_container
-     * 
+     *
      */
     FWSERVICES_API void swapService( ::fwData::Object::sptr objDst, ::fwServices::IService::sptr service );
 
     //@}
 
-protected :
+    /**
+     * @name New API for services with multiple data.
+     */
+
+    //@{
+
+    //@}
+protected:
 
     /**
      * @brief Object to service associations container
      * @note An object can be registered without services
      * @warning Do not use smart pointers for ::fwData::Object, otherwise they will never destroy
      */
-    ServiceContainerType m_container ;
+    ServiceContainerType m_container;
 
     mutable ::fwCore::mt::ReadWriteMutex m_containerMutex;
 
@@ -206,8 +259,16 @@ private:
      * removal at obj destruction.
      * @warning not thread-safe
      */
-    void internalRegisterService( ::fwData::Object::sptr obj, ::fwServices::IService::sptr service );
+    void internalRegisterService( ::fwData::Object::sptr obj, ::fwServices::IService::sptr service,
+                                  const ::fwServices::IService::KeyType& objKey,
+                                  ::fwServices::IService::AccessType access);
 
+    /**
+     * @brief container manipulator (Helper)
+     * remove service from ObjectService containers, do not perform any "semantic action" like stopping service
+     * @note (internal use) use with care
+     */
+    void  removeFromContainer( ::fwServices::IService::sptr service );
 };
 
 } // namespace registry
@@ -239,34 +300,34 @@ FWSERVICES_API std::string getRegistryInformation();
  * @brief Wraps ObjectService::getServices
  */
 template<class SERVICE>
-std::vector< SPTR(SERVICE) > getServices() ;
+std::set< SPTR(SERVICE) > getServices();
 
 /**
  * @brief Wraps ObjectService::getServices
  */
 template<class SERVICE>
-std::vector< SPTR(SERVICE) > getServices(::fwData::Object::sptr obj) ;
+std::set< SPTR(SERVICE) > getServices(::fwData::Object::sptr obj);
 
 /**
  * @brief Wraps ObjectService::getServices
  */
-FWSERVICES_API ::fwServices::registry::ObjectService::ServiceVectorType getServices( const std::string & serviceType );
+FWSERVICES_API ::fwServices::registry::ObjectService::ServiceVectorType getServices( const std::string& serviceType );
 
 /**
  * @brief Wraps ObjectService::getServices
  */
 FWSERVICES_API ::fwServices::registry::ObjectService::ServiceVectorType getServices( ::fwData::Object::sptr obj,
-                                                                                     const std::string & serviceType );
+                                                                                     const std::string& serviceType );
 
 /**
  * @brief Wraps ObjectService::getServices
  */
-FWSERVICES_API ::fwServices::registry::ObjectService::ServiceVectorType getServices( ::fwData::Object::sptr obj ) ;
+FWSERVICES_API ::fwServices::registry::ObjectService::ServiceVectorType getServices( ::fwData::Object::sptr obj );
 
 /**
  * @brief Wraps ObjectService::has
  */
-FWSERVICES_API bool has( ::fwData::Object::sptr obj , const std::string &srvType) ;
+FWSERVICES_API bool has( ::fwData::Object::sptr obj, const std::string& srvType);
 
 /**
  * @brief Wraps ObjectService::registerService
@@ -274,6 +335,19 @@ FWSERVICES_API bool has( ::fwData::Object::sptr obj , const std::string &srvType
 FWSERVICES_API void registerService( ::fwData::Object::sptr obj, ::fwServices::IService::sptr service );
 
 /**
+ * @brief Wraps ObjectService::registerService
+ */
+FWSERVICES_API void registerService(::fwData::Object::sptr obj, const ::fwServices::IService::KeyType& objKey,
+                                    ::fwServices::IService::AccessType access, ::fwServices::IService::sptr service);
+
+
+/**
+ * @brief Wraps ObjectService::registerServiceOutput
+ */
+FWSERVICES_API void registerServiceOutput(::fwData::Object::sptr obj, const ::fwServices::IService::KeyType& objKey,
+                                          ::fwServices::IService::sptr service);
+
+/**
  * @brief Wraps ObjectService::swapService
  */
 FWSERVICES_API void swapService( ::fwData::Object::sptr objDst, ::fwServices::IService::sptr service );
@@ -281,7 +355,30 @@ FWSERVICES_API void swapService( ::fwData::Object::sptr objDst, ::fwServices::IS
 /**
  * @brief Wraps ObjectService::unregisterService
  */
-FWSERVICES_API void unregisterService(  ::fwServices::IService::sptr service );
+FWSERVICES_API void unregisterService( ::fwServices::IService::sptr service );
+
+/**
+ * @brief Wraps ObjectService::unregisterService
+ */
+FWSERVICES_API void unregisterService( const ::fwServices::IService::KeyType& objKey,
+                                       ::fwServices::IService::AccessType access,
+                                       ::fwServices::IService::sptr service );
+
+/**
+ * @brief Wraps ObjectService::unregisterServiceOutput
+ */
+FWSERVICES_API void unregisterServiceOutput( const ::fwServices::IService::KeyType& objKey,
+                                             ::fwServices::IService::sptr service );
+
+/**
+ * @brief Wraps ObjectService::isRegistered
+ */
+FWSERVICES_API bool isRegistered( const ::fwServices::IService::KeyType& objKey,
+                                  ::fwServices::IService::AccessType access,
+                                  ::fwServices::IService::sptr service );
+
+FWSERVICES_API SPTR( ::fwServices::registry::ObjectService::RegisterSignalType ) getRegisterSignal();
+FWSERVICES_API SPTR( ::fwServices::registry::ObjectService::RegisterSignalType ) getUnregisterSignal();
 
 } // namespace OSR
 
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hxx b/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hxx
index 2b5948a..e007225 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hxx
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ObjectService.hxx
@@ -1,12 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#ifndef __FWSERVICES_REGISTRY_OBJECTSERVICE_HXX__
+#define __FWSERVICES_REGISTRY_OBJECTSERVICE_HXX__
 
-#include <fwCore/base.hpp>
+#include <fwCom/Signal.hxx>
 
 #include <fwServices/IService.hpp>
 
@@ -20,17 +21,29 @@ namespace OSR
 {
 
 template<class SERVICE>
-std::vector< SPTR(SERVICE) > getServices()
+std::set< SPTR(SERVICE) > getServices()
 {
     return ::fwServices::OSR::get()->getServices< SERVICE >();
 }
 
 template<class SERVICE>
-std::vector< SPTR(SERVICE) > getServices(::fwData::Object::sptr obj)
+std::set< SPTR(SERVICE) > getServices(::fwData::Object::sptr obj)
 {
     return ::fwServices::OSR::get()->getServices< SERVICE >(obj);
 }
 
+inline SPTR( ::fwServices::registry::ObjectService::RegisterSignalType ) getRegisterSignal()
+{
+    return ::fwServices::OSR::get()->signal< ::fwServices::registry::ObjectService::RegisterSignalType >
+               (::fwServices::registry::ObjectService::s_REGISTERED_SIG);
+}
+
+inline SPTR( ::fwServices::registry::ObjectService::RegisterSignalType ) getUnregisterSignal()
+{
+    return ::fwServices::OSR::get()->signal< ::fwServices::registry::ObjectService::RegisterSignalType >
+               (::fwServices::registry::ObjectService::s_UNREGISTERED_SIG);
+}
+
 } //namespace OSR
 
 //------------------------------------------------------------------------------
@@ -43,16 +56,16 @@ namespace registry
 //------------------------------------------------------------------------------
 
 template<class SERVICE>
-std::vector< SPTR(SERVICE) > ObjectService::getServices() const
+std::set< SPTR(SERVICE) > ObjectService::getServices() const
 {
-    std::vector< SPTR(SERVICE) > services;
+    std::set< SPTR(SERVICE) > services;
     const ServiceContainerType::right_map &right = m_container.right;
-    BOOST_FOREACH( const ServiceContainerType::right_map::value_type &elt, right)
+    for( const ServiceContainerType::right_map::value_type &elt: right)
     {
-        SPTR(SERVICE) service = ::boost::dynamic_pointer_cast< SERVICE >( elt.first );
+        SPTR(SERVICE) service = std::dynamic_pointer_cast< SERVICE >( elt.first );
         if ( service )
         {
-            services.push_back( service ) ;
+            services.insert( service );
         }
     }
     SLM_DEBUG_IF("No service registered", services.empty());
@@ -62,21 +75,21 @@ std::vector< SPTR(SERVICE) > ObjectService::getServices() const
 //------------------------------------------------------------------------------
 
 template<class SERVICE>
-std::vector< SPTR(SERVICE) > ObjectService::getServices(::fwData::Object::sptr obj) const
+std::set< SPTR(SERVICE) > ObjectService::getServices(::fwData::Object::sptr obj) const
 {
-    std::vector< SPTR(SERVICE) > services;
+    std::set< SPTR(SERVICE) > services;
     if(m_container.left.find(obj->getOSRKey()->getLogicStamp()) != m_container.left.end())
     {
         ServiceContainerType::left_map::const_iterator iter;
         ::fwCore::LogicStamp::LogicStampType key = obj->getOSRKey()->getLogicStamp();
         ServiceContainerType::left_map::const_iterator firstElement = m_container.left.find(key);
-        ServiceContainerType::left_map::const_iterator lastElement = m_container.left.upper_bound(key);
-        for (iter = firstElement ; iter != lastElement ; ++iter)
+        ServiceContainerType::left_map::const_iterator lastElement  = m_container.left.upper_bound(key);
+        for (iter = firstElement; iter != lastElement; ++iter)
         {
-            SPTR(SERVICE) service = ::boost::dynamic_pointer_cast< SERVICE >( iter->second );
+            SPTR(SERVICE) service = std::dynamic_pointer_cast< SERVICE >( iter->second );
             if ( service)
             {
-                services.push_back( service ) ;
+                services.insert( service );
             }
         }
     }
@@ -90,12 +103,12 @@ ObjectService::ObjectVectorType ObjectService::getObjects() const
 {
     ObjectVectorType objects;
     const ServiceContainerType::right_map & right = m_container.right;
-    BOOST_FOREACH( const ServiceContainerType::right_map::value_type &elt, right)
+    for( const ServiceContainerType::right_map::value_type &elt : right)
     {
-        SPTR(SERVICE) service = ::boost::dynamic_pointer_cast< SERVICE >( elt.first );
+        SPTR(SERVICE) service = std::dynamic_pointer_cast< SERVICE >( elt.first );
         if ( service && std::find(objects.begin(), objects.end(), service->getObject()) == objects.end() )
         {
-            objects.push_back( service->getObject() ) ;
+            objects.insert( service->getObject() );
         }
     }
     SLM_WARN_IF( "No object registered for the requested type of service", objects.empty() );
@@ -106,3 +119,5 @@ ObjectService::ObjectVectorType ObjectService::getObjects() const
 
 } // end registry
 } // end fwServices
+
+#endif // __FWSERVICES_REGISTRY_OBJECTSERVICE_HXX__
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/Proxy.hpp b/SrcLib/core/fwServices/include/fwServices/registry/Proxy.hpp
index 21abd90..bad3e1e 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/Proxy.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/Proxy.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <vector>
 
-#include <boost/make_shared.hpp>
 
 #include <fwCore/base.hpp>
 #include <fwCore/mt/types.hpp>
@@ -25,19 +24,16 @@ namespace registry
 {
 
 /**
- * @class Proxy
  * @brief This class defines a proxy for signal/slot connections.
- * 
- * @date 2012.
  *
  * @note All the signals registered in a Proxy's channel are connected to all slots registered in the same channel.
  */
 class FWSERVICES_CLASS_API Proxy : public ::fwCore::BaseObject
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((Proxy)(::fwCore::BaseObject), (()), ::boost::make_shared< Proxy >);
+    fwCoreClassDefinitionsWithFactoryMacro((Proxy)(::fwCore::BaseObject), (()), std::make_shared< Proxy >);
 
     typedef std::string ChannelKeyType;
 
@@ -47,10 +43,11 @@ public :
      */
     struct SigSlots
     {
-        typedef std::vector< ::fwCom::SignalBase::sptr > SignalContainerType;
-        typedef std::vector< ::fwCom::SlotBase::sptr > SlotContainerType;
+        typedef std::set< ::fwCom::SignalBase::sptr > SignalContainerType;
+        typedef std::set< ::fwCom::SlotBase::sptr > SlotContainerType;
         SignalContainerType m_signals;
         SlotContainerType m_slots;
+        SlotContainerType::iterator m_lastConnectedSlot;
 
         ::fwCore::mt::ReadWriteMutex m_mutex;
     };
@@ -78,7 +75,7 @@ public :
     /// Unregisters the slot. Disconnects it from the signals in channel
     FWSERVICES_API void disconnect(ChannelKeyType channel, ::fwCom::SlotBase::sptr slot);
 
-protected :
+protected:
 
     /// Association channels, SigSlot
     ChannelMapType m_channels;
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp b/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp
index 437d03f..24e5503 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ServiceConfig.hpp
@@ -1,18 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_REGISTRY_SERVICECONFIG_HPP_
-#define _FWSERVICES_REGISTRY_SERVICECONFIG_HPP_
+#ifndef __FWSERVICES_REGISTRY_SERVICECONFIG_HPP__
+#define __FWSERVICES_REGISTRY_SERVICECONFIG_HPP__
 
-#include <map>
+#include "fwServices/config.hpp"
 
+#include <fwRuntime/ConfigurationElement.hpp>
 #include <fwTools/Object.hpp>
 #include <fwTools/macros.hpp>
 
-#include "fwServices/config.hpp"
+#include <map>
 
 namespace fwServices
 {
@@ -23,19 +24,23 @@ namespace registry
 
 /**
  * @class ServiceConfigInfo
- * 
+ *
  */
 class FWSERVICES_CLASS_API ServiceConfigInfo : public ::fwCore::BaseObject
 {
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (ServiceConfigInfo)(::fwCore::BaseObject), (()), new ServiceConfigInfo );
 
     /// Constructor, do nothing.
-    ServiceConfigInfo(){}
+    ServiceConfigInfo()
+    {
+    }
 
     /// Destructor, do nothing.
-    virtual ~ServiceConfigInfo(){}
+    virtual ~ServiceConfigInfo()
+    {
+    }
 
     std::string service;
     std::string desc;
@@ -47,14 +52,14 @@ public :
  * @brief This class allows to register all the service configuration which has the point extension
  *        "::fwServices::registry::ServiceConfig".
  * @class ServiceConfig
- * 
+ *
  *
  *
  * Registry config like :
- * @verbatim
+ * @code{.xml}
     <extension implements="::fwServices::registry::ServiceConfig">
         <id>SDBOpenIOSelectorConfig</id>
-        <service>::uiIO::editor::IOSelectorService</service>
+        <service>::uiIO::editor::SIOSelector</service>
         <desc>"Open" action's IOSelector config</desc>
         <config>
             <type mode="reader" />
@@ -63,14 +68,14 @@ public :
             <config id="MDAtomsConfig" service="::ioAtoms::SReader" />
         </config>
     </extension>
-   @endverbatim
+   @endcode
  */
 class FWSERVICES_CLASS_API ServiceConfig : public ::fwCore::BaseObject
 {
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ServiceConfig)(::fwCore::BaseObject), (()), new ServiceConfig) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ServiceConfig)(::fwCore::BaseObject), (()), new ServiceConfig);
 
     /// Return the default global instance of ServiceConfig
     FWSERVICES_API static ServiceConfig::sptr getDefault();
@@ -103,7 +108,8 @@ public:
      * @note This method is thread safe
      */
     FWSERVICES_API ::fwRuntime::ConfigurationElement::csptr getServiceConfig( const std::string & configId,
-                                                                              const std::string &serviceImpl="" ) const;
+                                                                              const std::string &serviceImpl =
+                                                                                  "" ) const;
 
     /**
      * @brief Returns the description of the given configuration name.
@@ -124,7 +130,7 @@ public:
      */
     FWSERVICES_API void clearRegistry();
 
-protected :
+protected:
 
     typedef std::map< std::string, ServiceConfigInfo::sptr > Registry;
 
@@ -147,6 +153,6 @@ protected :
 
 } // namespace fwServices
 
-#endif // _FWSERVICES_REGISTRY_SERVICECONFIG_HPP_
+#endif // __FWSERVICES_REGISTRY_SERVICECONFIG_HPP__
 
 
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/ServiceFactory.hpp b/SrcLib/core/fwServices/include/fwServices/registry/ServiceFactory.hpp
index d75be4d..003449a 100644
--- a/SrcLib/core/fwServices/include/fwServices/registry/ServiceFactory.hpp
+++ b/SrcLib/core/fwServices/include/fwServices/registry/ServiceFactory.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,34 +7,18 @@
 #ifndef __FWSERVICES_REGISTRY_SERVICEFACTORY_HPP__
 #define __FWSERVICES_REGISTRY_SERVICEFACTORY_HPP__
 
-#include <map>
-
-#include <boost/unordered_map.hpp>
-
-#include <boost/tuple/tuple.hpp>
+#include "fwServices/config.hpp"
 
+#include <fwTools/Object.hpp>
 #include <fwCore/mt/types.hpp>
 
-#include "fwServices/config.hpp"
+#include <fwRuntime/Bundle.hpp>
 
-#if defined(_WIN32) && _MSC_VER > 1499 // Visual C++ 2008 only
-#include <boost/functional/hash/hash.hpp>
-namespace std
-{
-namespace tr1
-{
-template<typename a>
-class hash< std::pair<a, a> >
-{
-public:
-   size_t operator()(const std::pair<a, a> &p) const
-   {
-      return ::boost::hash_value(p);
-   }
-};
-} //namespace tr1
-} //namespace std
-#endif
+#include <boost/function.hpp>
+#include <boost/unordered_map.hpp>
+#include <boost/tuple/tuple.hpp>
+
+#include <map>
 
 namespace fwServices
 {
@@ -46,29 +30,30 @@ namespace registry
 
 /**
  * @class ServiceInfo
- * 
+ *
  */
 class FWSERVICES_CLASS_API ServiceInfo : public ::fwTools::Object
 {
-    public :
-        typedef ::boost::function< SPTR(::fwServices::IService)() > FactoryType;
+public:
+    typedef ::boost::function< SPTR(::fwServices::IService)() > FactoryType;
 
-        fwCoreClassDefinitionsWithFactoryMacro( (ServiceInfo)(::fwTools::Object), (()), ::boost::make_shared< ServiceInfo > );
+    fwCoreClassDefinitionsWithFactoryMacro( (ServiceInfo)(::fwTools::Object), (()),
+                                            std::make_shared< ServiceInfo > );
 
-        std::string serviceType;
-        std::string objectImpl;
-        /// service description.
-        std::string desc;
+    std::string serviceType;
+    std::string objectImpl;
+    /// service description.
+    std::string desc;
 
-        ::boost::shared_ptr< ::fwRuntime::Bundle > bundle;
+    std::shared_ptr< ::fwRuntime::Bundle > bundle;
 
-        FactoryType factory;
+    FactoryType factory;
 };
 
 
 /**
  * @class ServiceFactory
- * 
+ *
  */
 class FWSERVICES_CLASS_API ServiceFactory : public ::fwCore::BaseObject
 {
@@ -81,7 +66,7 @@ public:
 
     typedef ::boost::unordered_map< StringPair, bool > SupportMapType;
 
-    fwCoreClassDefinitionsWithFactoryMacro( (ServiceFactory)(::fwCore::BaseObject), (()), new ServiceFactory) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (ServiceFactory)(::fwCore::BaseObject), (()), new ServiceFactory);
 
     /// Return the unique Instance, create it if required at first access
     FWSERVICES_API static ServiceFactory::sptr getDefault();
@@ -101,19 +86,21 @@ public:
     FWSERVICES_API void clearFactory();
 
     /// return a vector of service implementation
-    FWSERVICES_API  std::vector< std::string > getImplementationIdFromObjectAndType(const std::string& object, const std::string& type) const;
+    FWSERVICES_API std::vector< std::string > getImplementationIdFromObjectAndType(const std::string& object,
+                                                                                   const std::string& type) const;
 
     /// return the default service implementation for an object
-    FWSERVICES_API std::string getDefaultImplementationIdFromObjectAndType( const std::string& object, const std::string& type ) const;
+    FWSERVICES_API std::string getDefaultImplementationIdFromObjectAndType( const std::string& object,
+                                                                            const std::string& type ) const;
 
     /// return the associated object implementation.
-    FWSERVICES_API  std::string getObjectImplementation(const std::string& srvImpl) const;
+    FWSERVICES_API std::string getObjectImplementation(const std::string& srvImpl) const;
 
     /// return the service description.
-    FWSERVICES_API  std::string getServiceDescription(const std::string& srvImpl) const;
+    FWSERVICES_API std::string getServiceDescription(const std::string& srvImpl) const;
 
     /// Check if the service with given object and implementation is valid
-    FWSERVICES_API  bool checkServiceValidity(const std::string & object, const std::string & srvImpl) const;
+    FWSERVICES_API bool checkServiceValidity(const std::string & object, const std::string & srvImpl) const;
 
     /**
      * @brief Check whether an object (object) supports service of type srvType
@@ -125,25 +112,26 @@ public:
      * @brief Check whether an object (object) supports service of type srvType and implementation srvImpl
      * @return true if service type supported
      */
-    FWSERVICES_API bool support(const std::string & object, const std::string & srvType, const std::string & srvImpl) const;
+    FWSERVICES_API bool support(const std::string & object, const std::string & srvType,
+                                const std::string & srvImpl) const;
 
     /**
      * @brief returns the registered factory keys.
      */
     FWSERVICES_API virtual KeyVectorType getFactoryKeys() const;
 
-protected :
+protected:
 
     typedef std::map< KeyType, ServiceInfo::sptr > SrvRegContainer;
 
     /// Container of service information
     SrvRegContainer m_srvImplTosrvInfo;
-    SupportMapType  m_supportMap;
+    SupportMapType m_supportMap;
 
     mutable ::fwCore::mt::ReadWriteMutex m_srvImplTosrvInfoMutex;
     mutable ::fwCore::mt::ReadWriteMutex m_supportMapMutex;
 
-private :
+private:
 
     /**
      * @brief print services informations
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/message/detail.hpp b/SrcLib/core/fwServices/include/fwServices/registry/message/detail.hpp
deleted file mode 100644
index 6c0def5..0000000
--- a/SrcLib/core/fwServices/include/fwServices/registry/message/detail.hpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWSERVICES_REGISTRY_MESSAGE_DETAIL_HPP__
-#define __FWSERVICES_REGISTRY_MESSAGE_DETAIL_HPP__
-
-#include <string>
-
-#include <fwCore/macros.hpp>
-#include <fwCore/util/FactoryRegistry.hpp>
-
-#include "fwServices/config.hpp"
-
-namespace fwServices
-{
-
-class ObjectMsg;
-
-namespace registry
-{
-
-namespace message
-{
-
-typedef std::string KeyType;
-
-typedef ::fwCore::util::FactoryRegistry< SPTR(::fwServices::ObjectMsg) () , KeyType > Type;
-
-FWSERVICES_API SPTR( Type ) get();
-
-} // namespace message
-
-} // namespace registry
-
-} // namespace fwServices
-
-#endif /* __FWSERVICES_REGISTRY_MESSAGE_DETAIL_HPP__ */
-
-
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/message/macros.hpp b/SrcLib/core/fwServices/include/fwServices/registry/message/macros.hpp
deleted file mode 100644
index dbfd7cd..0000000
--- a/SrcLib/core/fwServices/include/fwServices/registry/message/macros.hpp
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWSERVICES_REGISTRY_MESSAGE_MACRO_HPP__
-#define __FWSERVICES_REGISTRY_MESSAGE_MACRO_HPP__
-
-#include "fwServices/registry/message/detail.hpp"
-
-namespace fwServices
-{
-namespace registry
-{
-namespace message
-{
-
-#define fwServicesMessageRegisterMacro( classname )                                  \
-    static ::fwServices::ObjectMsg::Registrar< classname > s__factory__record__ ## __LINE__ ;
-
-} // end namespace message
-} // end namespace registry
-} // end namespace fwServices
-
-#endif /*__FWSERVICES_REGISTRY_MESSAGE_MACRO_HPP__*/
diff --git a/SrcLib/core/fwServices/include/fwServices/registry/message/namespace.hpp b/SrcLib/core/fwServices/include/fwServices/registry/message/namespace.hpp
deleted file mode 100644
index b80bc3f..0000000
--- a/SrcLib/core/fwServices/include/fwServices/registry/message/namespace.hpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWSERVICES_REGISTRY_MESSAGE_NAMESPACE_HPP__
-#define __FWSERVICES_REGISTRY_MESSAGE_NAMESPACE_HPP__
-
-
-namespace fwServices
-{
-
-namespace registry
-{
-/**
- * @brief       Contains fwServices::registry::message details
- * @namespace   fwServices::registry::message
- * 
- * @date        2009-2012
- *
- */
-namespace message
-{
-} // namespace message
-} // namespace registry
-
-} // namespace fwServices
-
-#endif /* __FWSERVICES_REGISTRY_MESSAGE_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwServices/src/fwServices/AppConfigManager.cpp b/SrcLib/core/fwServices/src/fwServices/AppConfigManager.cpp
index a73de28..1f14868 100644
--- a/SrcLib/core/fwServices/src/fwServices/AppConfigManager.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/AppConfigManager.cpp
@@ -1,32 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
-#include <boost/regex.hpp>
+#include "fwServices/AppConfigManager.hpp"
+#include "fwServices/macros.hpp"
+#include "fwServices/helper/Config.hpp"
+#include <fwServices/op/Get.hpp>
+#include "fwServices/registry/ActiveWorkers.hpp"
+#include "fwServices/registry/ObjectService.hpp"
+#include "fwServices/registry/Proxy.hpp"
+#include "fwServices/registry/ServiceConfig.hpp"
 
+#include <fwData/Composite.hpp>
+#include <fwData/Object.hpp>
+
+#include <fwRuntime/Bundle.hpp>
 #include <fwRuntime/operations.hpp>
 
-#include <fwData/Object.hpp>
+#include <boost/foreach.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/regex.hpp>
 
-#include "fwServices/Base.hpp"
-#include "fwServices/registry/ObjectService.hpp"
-#include "fwServices/registry/ServiceConfig.hpp"
-#include "fwServices/registry/Proxy.hpp"
-#include "fwServices/registry/ActiveWorkers.hpp"
-#include "fwServices/AppConfigManager.hpp"
 
 namespace fwServices
 {
 // Private methods
 
 ::fwData::Object::sptr AppConfigManager::getNewObject(
-        ConfigAttribute type,
-        ConfigAttribute uid,
-        ConfigAttribute id)
+    ConfigAttribute type,
+    ConfigAttribute uid,
+    ConfigAttribute id)
 {
     // Building object structure
     SPTR(::fwRuntime::Extension) ext = ::fwRuntime::findExtension(::boost::get<0>(type));
@@ -42,14 +47,11 @@ namespace fwServices
 
     ::fwData::Object::sptr obj;
     obj = ::fwData::factory::New(::boost::get<0>(type));
-    OSLM_ASSERT("Factory failed to build object : " <<  ::boost::get<0>(type), obj);
+    OSLM_ASSERT("Factory failed to build object : " << ::boost::get<0>(type), obj);
 
     if (::boost::get<1>(uid))
     {
-#ifndef COM_LOG
-        OSLM_ASSERT("Object already has an UID.", !obj->hasID());
-#endif
-
+        SLM_ASSERT("Object already has an UID.", !obj->hasID());
         OSLM_FATAL_IF("UID " << ::boost::get<0>(uid) << " already exists.",
                       ::fwTools::fwID::exist(::boost::get<0>(uid)));
         obj->setID(::boost::get<0>(uid));
@@ -65,9 +67,9 @@ namespace fwServices
 // ------------------------------------------------------------------------
 
 ::fwData::Object::sptr AppConfigManager::getNewObject(
-        ConfigAttribute type,
-        const std::string& uid,
-        ConfigAttribute id)
+    ConfigAttribute type,
+    const std::string& uid,
+    ConfigAttribute id)
 {
     return this->getNewObject(type, ConfigAttribute(uid, true), id);
 }
@@ -75,9 +77,9 @@ namespace fwServices
 // ------------------------------------------------------------------------
 
 ::fwData::Object::sptr AppConfigManager::getRefObject(
-        ConfigAttribute type,
-        const std::string& uid,
-        ConfigAttribute id)
+    ConfigAttribute type,
+    const std::string& uid,
+    ConfigAttribute id)
 {
     OSLM_ASSERT("Object with UID \"" << uid << "\" doesn't exist.", ::fwTools::fwID::exist(uid));
     ::fwData::Object::sptr obj;
@@ -86,16 +88,16 @@ namespace fwServices
     if (::boost::get<1>(type))
     {
         OSLM_ASSERT("Object with UID \"" << uid
-                << "\" has a different type (\""
-                << obj->getClassname() << "\").",
-                ::boost::get<0>(type) == obj->getClassname());
+                                         << "\" has a different type (\""
+                                         << obj->getClassname() << "\").",
+                    ::boost::get<0>(type) == obj->getClassname());
     }
     if (::boost::get<1>(id))
     {
         OSLM_ASSERT("Object with UID \"" << uid
-                << "\" has a different id (\""
-                << obj->getName() << "\").",
-                ::boost::get<0>(id) == obj->getName());
+                                         << "\" has a different id (\""
+                                         << obj->getName() << "\").",
+                    ::boost::get<0>(id) == obj->getName());
     }
     return obj;
 }
@@ -103,9 +105,9 @@ namespace fwServices
 // ------------------------------------------------------------------------
 
 ::fwServices::IService::sptr AppConfigManager::getNewService(
-        ConfigAttribute type,
-        ConfigAttribute uid,
-        ConfigAttribute implType)
+    ConfigAttribute type,
+    ConfigAttribute uid,
+    ConfigAttribute implType)
 {
     ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
 
@@ -119,10 +121,8 @@ namespace fwServices
     {
         srv = srvFactory->create(typestr, ::boost::get<0>(implType));
     }
-
-#ifndef COM_LOG
-    OSLM_ASSERT("Service already has an UID.", !srv->hasID());
-#endif
+    SLM_ASSERT("Factory could not create service of type <" + ::boost::get<0>(implType) + ">.", srv);
+    SLM_ASSERT("Service already has an UID.", !srv->hasID());
 
     OSLM_FATAL_IF("UID " << ::boost::get<0>(uid) << " already exists.", ::fwTools::fwID::exist(::boost::get<0>(uid)));
     if (::boost::get<1>(uid))
@@ -136,26 +136,11 @@ namespace fwServices
 // ------------------------------------------------------------------------
 
 void AppConfigManager::autoSigSlotConnection(
-        ::fwData::Object::sptr obj,
-        ::fwServices::IService::sptr srv,
-        ConfigAttribute priority)
-{
-    m_connections->connect( obj, srv, srv->getObjSrvConnections() );
-
-//    // Add priority for the new comChannel, default is 0.5
-//    if (::boost::get<1>(priority))
-//    {
-//        double priorityValue = ::boost::lexical_cast<double>(::boost::get<0>(priority));
-//        if (priorityValue < 0.0)
-//        {
-//            priorityValue = 0.0;
-//        }
-//        else if (priorityValue > 1.0)
-//        {
-//            priorityValue = 1.0;
-//        }
-//        comChannel->setPriority(priorityValue);
-//    }
+    ::fwData::Object::sptr obj,
+    ::fwServices::IService::sptr srv,
+    ConfigAttribute priority)
+{
+    m_connections.connect( obj, srv, srv->getObjSrvConnections() );
 }
 
 // ------------------------------------------------------------------------
@@ -169,7 +154,7 @@ void AppConfigManager::startConnections()
 
 void AppConfigManager::stopConnections()
 {
-    m_connections->disconnect();
+    m_connections.disconnect();
 }
 
 // ------------------------------------------------------------------------
@@ -211,12 +196,12 @@ void AppConfigManager::processStartItems()
 {
     std::vector< ::fwServices::IService::SharedFutureType > futures;
 
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem, m_cfgElem->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :  m_cfgElem->getElements())
     {
         if (elem->getName() == "start")
         {
             SLM_ERROR_IF("\"type\" attribute on \"start\" node is deprecated. Use UID instead.",
-                        elem->hasAttribute("type"));
+                         elem->hasAttribute("type"));
 
             // Uid
             SLM_ASSERT("Missing attribute \"uid\".", elem->hasAttribute("uid"));
@@ -241,7 +226,7 @@ void AppConfigManager::processUpdateItems()
 {
     std::vector< ::fwServices::IService::SharedFutureType > futures;
 
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem, m_cfgElem->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :  m_cfgElem->getElements())
     {
         if (elem->getName() == "update")
         {
@@ -250,11 +235,11 @@ void AppConfigManager::processUpdateItems()
             {
                 std::string type = elem->getExistingAttributeValue("type");
 
-                std::vector<fwServices::IService::sptr> servicesToUpdate = ::fwServices::OSR::getServices(type);
+                auto servicesToUpdate = ::fwServices::OSR::getServices(type);
 
                 OSLM_ASSERT("No services of type \"" << type << "\" found.", !servicesToUpdate.empty());
 
-                BOOST_FOREACH(::fwServices::IService::sptr srv, servicesToUpdate)
+                for(::fwServices::IService::sptr srv :  servicesToUpdate)
                 {
                     futures.push_back(srv->update());
                 }
@@ -307,7 +292,7 @@ void AppConfigManager::processUpdateItems()
         ::boost::get<0>(type) = m_cfgElem->getExistingAttributeValue("type");
         SLM_ASSERT("\"type\" attribute is empty.", !::boost::get<0>(type).empty());
         SLM_ASSERT("\"type\" must be a rooted namespace.",
-                ::boost::get<0>(type).substr(0, 2) == "::");
+                   ::boost::get<0>(type).substr(0, 2) == "::");
         ::boost::get<1>(type) = true;
     }
 
@@ -319,9 +304,9 @@ void AppConfigManager::processUpdateItems()
         SLM_ASSERT("\"src\" attribute is empty.", !::boost::get<0>(buildMode).empty());
 
         SLM_ASSERT("Unhandled build mode (bad \"src\" attribute). "
-                "Must be \"new\" or \"ref\".",
-                ::boost::get<0>(buildMode) == "ref" ||
-                ::boost::get<0>(buildMode) == "src");
+                   "Must be \"new\" or \"ref\".",
+                   ::boost::get<0>(buildMode) == "ref" ||
+                   ::boost::get<0>(buildMode) == "src");
         ::boost::get<1>(buildMode) = true;
     }
 
@@ -343,10 +328,10 @@ void AppConfigManager::processUpdateItems()
     ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
 
     std::string srvImpl = srvFactory->getDefaultImplementationIdFromObjectAndType(
-                          obj->getClassname(), "::fwServices::IXMLParser");
+        obj->getClassname(), "::fwServices::IXMLParser");
 
-    ::fwServices::IService::sptr srv =  srvFactory->create("::fwServices::IXMLParser", srvImpl);
-    m_objectParser = ::fwServices::IXMLParser::dynamicCast(srv);
+    ::fwServices::IService::sptr srv = srvFactory->create("::fwServices::IXMLParser", srvImpl);
+    m_objectParser                   = ::fwServices::IXMLParser::dynamicCast(srv);
     m_objectParser->setObjectConfig(m_cfgElem);
     m_objectParser->createConfig(obj);
     return obj;
@@ -356,7 +341,7 @@ void AppConfigManager::processUpdateItems()
 
 void AppConfigManager::createServices()
 {
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem,  m_cfgElem->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :   m_cfgElem->getElements())
     {
         if (elem->getName() == "service")
         {
@@ -373,7 +358,7 @@ void AppConfigManager::createServices()
 
 void AppConfigManager::createServices(::fwRuntime::ConfigurationElement::csptr cfgElem)
 {
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem, cfgElem->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :  cfgElem->getElements())
     {
         if (elem->getName() == "service")
         {
@@ -431,10 +416,10 @@ void AppConfigManager::bindService(::fwRuntime::ConfigurationElement::csptr srvE
 
     // autoConnect
     const ::fwRuntime::ConfigurationElement::AttributePair attribAutoConnect =
-            srvElem->getSafeAttributeValue("autoConnect");
+        srvElem->getSafeAttributeValue("autoConnect");
     std::string autoConnect = attribAutoConnect.second;
     SLM_ASSERT("\"autoConnect\" attribute must be either \"yes\" or \"no\".",
-                (!attribAutoConnect.first) || autoConnect == "yes" || autoConnect == "no");
+               (!attribAutoConnect.first) || autoConnect == "yes" || autoConnect == "no");
 
     // Priority
     ConfigAttribute priority("", false);
@@ -449,7 +434,8 @@ void AppConfigManager::bindService(::fwRuntime::ConfigurationElement::csptr srvE
     // TODO: have a default implementation of service
     if (!::boost::get<1>(implType))
     {
-        OSLM_FATAL("Attribute \"impl\" is required for service "  << (::boost::get<1>(uid)?::boost::get<0>(uid):".") );
+        OSLM_FATAL("Attribute \"impl\" is required for service " <<
+                   (::boost::get<1>(uid) ? ::boost::get<0>(uid) : ".") );
     }
 
     // Create and bind service
@@ -491,19 +477,22 @@ void AppConfigManager::bindService(::fwRuntime::ConfigurationElement::csptr srvE
     }
 
     // Check if user did not bind a service to another service
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem, cfgElem->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :  cfgElem->getElements())
     {
         SLM_ASSERT("Cannot bind a service to another service.",
-                elem->getName() != "service" &&
-                elem->getName() != "serviceList");
+                   elem->getName() != "service" &&
+                   elem->getName() != "serviceList");
     }
 }
 
 // Constructors / Destructors
 // ------------------------------------------------------------------------
 
-AppConfigManager::AppConfigManager() : m_state(STATE_DESTROYED), m_connections( helper::SigSlotConnection::New() )
-{}
+AppConfigManager::AppConfigManager()
+{
+    SLM_ASSERT("Can't mix V1 and V2 appConfigs", s_VERSION == 0 || s_VERSION == 1);
+    s_VERSION = 1;
+}
 
 // ------------------------------------------------------------------------
 
@@ -531,7 +520,7 @@ void AppConfigManager::start()
 {
     SLM_ASSERT("Manager must be created first.", m_state == STATE_CREATED || m_state == STATE_STOPPED);
 
-    this->processStartItems() ;
+    this->processStartItems();
     m_objectParser->startConfig();
     this->startConnections();
 
@@ -558,7 +547,7 @@ void AppConfigManager::stop()
     this->stopStartedServices();
 
     OSLM_INFO("Parsing OSR after stopping the config :" << std::endl
-              << ::fwServices::OSR::getRegistryInformation());
+                                                        << ::fwServices::OSR::getRegistryInformation());
     m_state = STATE_STOPPED;
 }
 
@@ -572,7 +561,7 @@ void AppConfigManager::destroy()
     this->destroyCreatedServices();
 
     OSLM_INFO("Parsing OSR after destroying the config :" << std::endl
-            << ::fwServices::OSR::getRegistryInformation());
+                                                          << ::fwServices::OSR::getRegistryInformation());
 
     m_objectParser.reset();
     m_cfgElem.reset();
@@ -585,6 +574,7 @@ void AppConfigManager::destroy()
 
 void AppConfigManager::launch()
 {
+    this->startBundle();
     this->create();
     this->start();
     this->update();
@@ -598,15 +588,20 @@ void AppConfigManager::stopAndDestroy()
     this->destroy();
 }
 
+fwData::Object::sptr AppConfigManager::getConfigRoot() const
+{
+    return m_configuredObject;
+}
+
 // ------------------------------------------------------------------------
 
 void AppConfigManager::createConnections()
 {
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem,  m_cfgElem->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :   m_cfgElem->getElements())
     {
         if (elem->getName() == "connect")
         {
-            this->createConnection(elem);
+            ::fwServices::helper::Config::createConnections(elem, m_connections);
         }
         else if (elem->getName() == "proxy")
         {
@@ -617,62 +612,6 @@ void AppConfigManager::createConnections()
 
 // ------------------------------------------------------------------------
 
-void AppConfigManager::createConnection(::fwRuntime::ConfigurationElement::csptr connectionCfg)
-{
-    typedef std::pair< std::string, ::fwCom::Signals::SignalKeyType > SignalInfoType;
-    typedef std::pair< std::string, ::fwCom::Slots::SlotKeyType > SlotInfoType;
-    typedef std::vector< SlotInfoType > SlotInfoContainerType;
-
-    SignalInfoType signalInfo;
-    SlotInfoContainerType slotInfos;
-
-    ::boost::regex re("(.*)/(.*)");
-    ::boost::smatch match;
-    std::string src, uid, key;
-
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem,  connectionCfg->getElements())
-    {
-        src = elem->getValue();
-        if( ::boost::regex_match(src, match, re) )
-        {
-            OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
-            uid.assign(match[1].first, match[1].second);
-            key.assign(match[2].first, match[2].second);
-
-            OSLM_ASSERT(src << " configuration is not correct for "<< elem->getName() ,
-                        !uid.empty() && !key.empty());
-
-            if (elem->getName() == "signal")
-            {
-                SLM_ASSERT("There must be only one signal by connection",
-                           signalInfo.first.empty() && signalInfo.second.empty());
-                signalInfo = std::make_pair(uid, key);
-            }
-            else if (elem->getName() == "slot")
-            {
-                slotInfos.push_back( std::make_pair(uid, key) );
-            }
-        }
-    }
-
-    ::fwTools::Object::sptr sigSource = ::fwTools::fwID::getObject(signalInfo.first);
-    ::fwCom::HasSignals::sptr hasSignals = ::boost::dynamic_pointer_cast< ::fwCom::HasSignals >(sigSource);
-
-    SLM_ASSERT("Signal source not found" << signalInfo.first , sigSource);
-    SLM_ASSERT("invalid signal source " << signalInfo.first , hasSignals);
-
-    BOOST_FOREACH(SlotInfoType slotInfo,  slotInfos)
-    {
-        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(slotInfo.first);
-        ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
-        SLM_ASSERT("invalid slot owner " << slotInfo.first , hasSlots);
-
-        m_connections->connect(hasSignals, signalInfo.second, hasSlots, slotInfo.second);
-    }
-}
-
-// ------------------------------------------------------------------------
-
 void AppConfigManager::createProxy(::fwRuntime::ConfigurationElement::csptr config)
 {
     ::boost::regex re("(.*)/(.*)");
@@ -685,7 +624,7 @@ void AppConfigManager::createProxy(::fwRuntime::ConfigurationElement::csptr conf
     std::string channel = config->getAttributeValue("channel");
     ProxyConnections proxyCnt(channel);
 
-    BOOST_FOREACH(::fwRuntime::ConfigurationElement::csptr elem,  config->getElements())
+    for(::fwRuntime::ConfigurationElement::csptr elem :   config->getElements())
     {
         src = elem->getValue();
         if( ::boost::regex_match(src, match, re) )
@@ -694,22 +633,22 @@ void AppConfigManager::createProxy(::fwRuntime::ConfigurationElement::csptr conf
             uid.assign(match[1].first, match[1].second);
             key.assign(match[2].first, match[2].second);
 
-            OSLM_ASSERT(src << " configuration is not correct for "<< elem->getName() ,
+            OSLM_ASSERT(src << " configuration is not correct for "<< elem->getName(),
                         !uid.empty() && !key.empty());
 
             ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(uid);
 
             if (elem->getName() == "signal")
             {
-                ::fwCom::HasSignals::sptr hasSignals = ::boost::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
-                ::fwCom::SignalBase::sptr sig = hasSignals->signal(key);
+                ::fwCom::HasSignals::sptr hasSignals = std::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
+                ::fwCom::SignalBase::sptr sig        = hasSignals->signal(key);
                 proxy->connect(channel, sig);
                 proxyCnt.addSignalConnection(uid, key);
             }
             else if (elem->getName() == "slot")
             {
-                ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
-                ::fwCom::SlotBase::sptr slot = hasSlots->slot(key);
+                ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+                ::fwCom::SlotBase::sptr slot     = hasSlots->slot(key);
                 proxy->connect(channel, slot);
                 proxyCnt.addSlotConnection(uid, key);
             }
@@ -723,24 +662,58 @@ void AppConfigManager::createProxy(::fwRuntime::ConfigurationElement::csptr conf
 void AppConfigManager::destroyProxies()
 {
     ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
-    BOOST_FOREACH(ProxyConnectionsVectType::value_type proxyConnections,  m_vectProxyCtns)
+    for(ProxyConnectionsVectType::value_type proxyConnections :   m_vectProxyCtns)
     {
-        BOOST_FOREACH(ProxyConnections::ProxyEltType signalElt, proxyConnections.m_signals)
+        for(ProxyConnections::ProxyEltType signalElt :  proxyConnections.m_signals)
         {
-            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(signalElt.first);
-            ::fwCom::HasSignals::sptr hasSignals = ::boost::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
-            ::fwCom::SignalBase::sptr sig = hasSignals->signal(signalElt.second);
+            ::fwTools::Object::sptr obj          = ::fwTools::fwID::getObject(signalElt.first);
+            ::fwCom::HasSignals::sptr hasSignals = std::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
+            ::fwCom::SignalBase::sptr sig        = hasSignals->signal(signalElt.second);
             proxy->disconnect(proxyConnections.m_channel, sig);
         }
-        BOOST_FOREACH(ProxyConnections::ProxyEltType slotElt, proxyConnections.m_slots)
+        for(ProxyConnections::ProxyEltType slotElt :  proxyConnections.m_slots)
         {
-            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(slotElt.first);
-            ::fwCom::HasSlots::sptr hasSlots = ::boost::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
-            ::fwCom::SlotBase::sptr slot = hasSlots->slot(slotElt.second);
+            ::fwTools::Object::sptr obj      = ::fwTools::fwID::getObject(slotElt.first);
+            ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+            ::fwCom::SlotBase::sptr slot     = hasSlots->slot(slotElt.second);
             proxy->disconnect(proxyConnections.m_channel, slot);
         }
     }
     m_vectProxyCtns.clear();
 }
 
+// ------------------------------------------------------------------------
+
+void AppConfigManager::setConfig(const std::string& configId, const FieldAdaptorType& replaceFields)
+{
+    m_configId = configId;
+    m_cfgElem  = registry::AppConfig::getDefault()->getAdaptedTemplateConfig( configId, replaceFields );
+}
+
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager::setConfig(const std::string& configId, const ::fwData::Composite::csptr& replaceFields)
+{
+    m_configId = configId;
+    m_cfgElem  = registry::AppConfig::getDefault()->getAdaptedTemplateConfig( configId, replaceFields );
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager::startBundle()
+{
+    SLM_WARN_IF("Bundle is not specified, it can not be started.", m_configId.empty());
+    if (!m_configId.empty())
+    {
+        std::shared_ptr< ::fwRuntime::Bundle > bundle = registry::AppConfig::getDefault()->getBundle(m_configId);
+        SLM_WARN_IF("Bundle '" + bundle->getIdentifier() + "' (used for '" + m_configId + "' is already started !",
+                    bundle->isStarted());
+        if (!bundle->isStarted())
+        {
+            bundle->start();
+        }
+    }
 }
+
+} // namespace fwServices
diff --git a/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp b/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp
new file mode 100644
index 0000000..914c7b4
--- /dev/null
+++ b/SrcLib/core/fwServices/src/fwServices/AppConfigManager2.cpp
@@ -0,0 +1,1064 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwServices/AppConfigManager2.hpp"
+
+#include "fwServices/helper/Config.hpp"
+#include "fwServices/op/Get.hpp"
+#include "fwServices/registry/ActiveWorkers.hpp"
+#include "fwServices/registry/Proxy.hpp"
+#include "fwServices/registry/ServiceConfig.hpp"
+#include "fwServices/registry/ServiceFactory.hpp"
+
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#define FW_PROFILING_DISABLED
+#include <fwCore/Profiling.hpp>
+
+#include <fwData/Composite.hpp>
+#include <fwData/Object.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/operations.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace fwServices
+{
+
+// ------------------------------------------------------------------------
+
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT    = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects";
+
+// ------------------------------------------------------------------------
+
+AppConfigManager2::AppConfigManager2() :
+    m_proxyID(0),
+    m_isUnitTest(false)
+{
+    SLM_ASSERT("Can't mix V1 and V2 appConfigs", s_VERSION == 0 || s_VERSION == 2);
+    s_VERSION = 2;
+    ::fwServices::IService::setVersion(2);
+
+    newSlot(s_ADD_OBJECTS_SLOT, &AppConfigManager2::addObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &AppConfigManager2::removeObjects, this);
+
+    auto defaultWorker = registry::ActiveWorkers::getDefault()->getWorker( registry::ActiveWorkers::s_DEFAULT_WORKER );
+    ::fwCom::HasSlots::m_slots.setWorker( defaultWorker );
+}
+
+// ------------------------------------------------------------------------
+
+AppConfigManager2::~AppConfigManager2()
+{
+    SLM_ASSERT("Manager must be stopped before destruction.", m_state == STATE_DESTROYED);
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::setConfig(const std::string& configId, const FieldAdaptorType& replaceFields)
+{
+    m_configId = configId;
+    m_cfgElem  = registry::AppConfig2::getDefault()->getAdaptedTemplateConfig( configId, replaceFields, !m_isUnitTest );
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::setConfig(const std::string& configId, const ::fwData::Composite::csptr& replaceFields)
+{
+    m_configId = configId;
+    m_cfgElem  = registry::AppConfig2::getDefault()->getAdaptedTemplateConfig( configId, replaceFields, !m_isUnitTest );
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::launch()
+{
+    FW_PROFILE("launch");
+
+    this->startBundle();
+    this->create();
+    this->start();
+    this->update();
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::stopAndDestroy()
+{
+    this->stop();
+    this->destroy();
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::startBundle()
+{
+    SLM_WARN_IF("Bundle is not specified, it can not be started.", m_configId.empty());
+    if (!m_configId.empty() && !m_isUnitTest)
+    {
+        std::shared_ptr< ::fwRuntime::Bundle > bundle = registry::AppConfig2::getDefault()->getBundle(m_configId);
+        SLM_WARN_IF("Bundle '" + bundle->getIdentifier() + "' (used for '" + m_configId + "') is already started !",
+                    bundle->isStarted());
+        if (!bundle->isStarted())
+        {
+            bundle->start();
+        }
+    }
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::create()
+{
+    SLM_ASSERT("Manager already running.", m_state == STATE_DESTROYED);
+
+    // Create the dummy object for new services that don't work on any object
+    // For now this dummy object will also contain all the "deferred" objects
+    m_tmpRootObject = ::fwData::Composite::New();
+
+    m_addObjectConnection    = ::fwServices::OSR::getRegisterSignal()->connect( this->slot(s_ADD_OBJECTS_SLOT) );
+    m_removeObjectConnection = ::fwServices::OSR::getUnregisterSignal()->connect( this->slot(s_REMOVE_OBJECTS_SLOT) );
+
+    this->createObjects(m_cfgElem);
+    this->createConnections();
+    this->createServices(m_cfgElem);
+
+    m_state = STATE_CREATED;
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::start()
+{
+    SLM_ASSERT("Manager must be created first.", m_state == STATE_CREATED || m_state == STATE_STOPPED);
+
+    this->processStartItems();
+    for(auto& createdObject : m_createdObjects)
+    {
+        createdObject.second.second->startConfig();
+    }
+
+    m_state = STATE_STARTED;
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::update()
+{
+    this->processUpdateItems();
+    for(auto& createdObject : m_createdObjects)
+    {
+        createdObject.second.second->updateConfig();
+    }
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::stop()
+{
+    SLM_ASSERT("Manager is not started, cannot stop.", m_state == STATE_STARTED);
+
+    ::fwServices::OSR::getRegisterSignal()->disconnect( this->slot(s_ADD_OBJECTS_SLOT) );
+    ::fwServices::OSR::getUnregisterSignal()->disconnect( this->slot(s_REMOVE_OBJECTS_SLOT) );
+
+    // Disconnect configuration connections
+    this->destroyProxies();
+
+    for(auto& createdObject : m_createdObjects)
+    {
+        createdObject.second.second->stopConfig();
+    }
+    this->stopStartedServices();
+
+    OSLM_INFO("Parsing OSR after stopping the config :" << std::endl
+                                                        << ::fwServices::OSR::getRegistryInformation());
+    m_state = STATE_STOPPED;
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::destroy()
+{
+    SLM_ASSERT("Manager is not stopped, cannot destroy.", m_state == STATE_STOPPED || m_state == STATE_CREATED);
+
+    for(auto& createdObject : m_createdObjects)
+    {
+        createdObject.second.second->destroyConfig();
+    }
+    this->destroyCreatedServices();
+
+    OSLM_INFO("Parsing OSR after destroying the config :" << std::endl
+                                                          << ::fwServices::OSR::getRegistryInformation());
+
+    m_cfgElem.reset();
+    m_createdObjects.clear();
+
+    m_state = STATE_DESTROYED;
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::setIsUnitTest(bool isUnitTest)
+{
+    m_isUnitTest = isUnitTest;
+}
+
+
+// ------------------------------------------------------------------------
+
+fwData::Object::sptr AppConfigManager2::getConfigRoot() const
+{
+    if (m_createdObjects.empty())
+    {
+        return m_tmpRootObject;
+    }
+    return m_createdObjects.begin()->second.first;
+}
+
+// ------------------------------------------------------------------------
+
+fwData::Object::sptr AppConfigManager2::findObject(const std::string& uid, const std::string& errMsgTail) const
+{
+    ::fwData::Object::sptr obj;
+
+    bool deferred = false;
+
+    // Look first in objects created in this appConfig
+    auto it = m_createdObjects.find(uid);
+    if(it != m_createdObjects.end())
+    {
+        obj = it->second.first;
+    }
+    else
+    {
+        // Not found, now look in the objects that were marked as "deferred"
+        auto itDeferredObj = m_deferredObjects.find(uid);
+
+        SLM_ASSERT(this->msgHead() + "Object '" + uid + "' has not been found" + errMsgTail,
+                   itDeferredObj != m_deferredObjects.end());
+        obj      = itDeferredObj->second.m_object;
+        deferred = true;
+    }
+    return obj;
+}
+
+// ------------------------------------------------------------------------
+
+::fwData::Object::sptr AppConfigManager2::getNewObject(ConfigAttribute type, ConfigAttribute uid) const
+{
+    // Building object structure
+    SPTR(::fwRuntime::Extension) ext = ::fwRuntime::findExtension(type.first);
+    if (ext)
+    {
+        const std::string className = ::fwCore::getClassname< ::fwData::Object >();
+        SLM_ASSERT("Extension and classname are different.",
+                   ext->getPoint() == className);
+
+        // Start dll to retrieve proxy and register object
+        ext->getBundle()->start();
+    }
+
+    ::fwData::Object::sptr obj = ::fwData::factory::New(type.first);
+    SLM_ASSERT("Factory failed to build object : " + type.first, obj);
+
+    if (uid.second)
+    {
+        SLM_ASSERT("Object already has an UID.", !obj->hasID());
+        SLM_ASSERT("UID " << uid.first << " already exists.", !::fwTools::fwID::exist(uid.first));
+        obj->setID(uid.first);
+    }
+
+    return obj;
+}
+
+// ------------------------------------------------------------------------
+
+::fwData::Object::sptr AppConfigManager2::getNewObject(ConfigAttribute type, const std::string& uid) const
+{
+    return this->getNewObject(type, ConfigAttribute(uid, true));
+}
+
+// ------------------------------------------------------------------------
+
+::fwData::Object::sptr AppConfigManager2::getRefObject(ConfigAttribute type, const std::string& uid) const
+{
+    SLM_ASSERT(this->msgHead() + "Object with UID \"" + uid + "\" doesn't exist.", ::fwTools::fwID::exist(uid));
+    ::fwData::Object::sptr obj = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject(uid));
+
+    SLM_ASSERT(this->msgHead() + "The UID '" + uid + "' does not reference any object.", obj);
+
+    if (type.second)
+    {
+        SLM_ASSERT(this->msgHead() + "Object with UID \"" + uid +
+                   "\" has a different type (\"" + obj->getClassname() + "\" != \"" + type.first + "\").",
+                   type.first == obj->getClassname());
+    }
+    return obj;
+}
+
+// ------------------------------------------------------------------------
+
+::fwServices::IService::sptr AppConfigManager2::getNewService(const std::string& uid, const std::string& implType) const
+{
+    ::fwServices::registry::ServiceFactory::sptr srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
+
+    ::fwServices::IService::sptr srv = srvFactory->create(implType);
+
+    SLM_ASSERT("Factory could not create service of type <" + implType + ">.", srv);
+    SLM_ASSERT("Service already has an UID.", !srv->hasID());
+
+    SLM_ASSERT(this->msgHead() + "UID " + uid + " already exists.", !::fwTools::fwID::exist(uid));
+    if (!uid.empty())
+    {
+        srv->setID(uid);
+    }
+
+    return srv;
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::stopStartedServices()
+{
+    std::vector< ::fwServices::IService::SharedFutureType > futures;
+
+    BOOST_REVERSE_FOREACH(::fwServices::IService::wptr w_srv, m_startedSrv)
+    {
+        SLM_ASSERT("Service expired.", !w_srv.expired());
+
+        const ::fwServices::IService::sptr srv = w_srv.lock();
+        OSLM_ASSERT("Service " << srv->getID() << " already stopped.", !srv->isStopped());
+        futures.push_back(srv->stop());
+    }
+    m_startedSrv.clear();
+    ::boost::wait_for_all(futures.begin(), futures.end());
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::destroyCreatedServices()
+{
+    BOOST_REVERSE_FOREACH(::fwServices::IService::wptr w_srv, m_createdSrv)
+    {
+        SLM_ASSERT("Service expired.", !w_srv.expired());
+
+        const ::fwServices::IService::sptr srv = w_srv.lock();
+        OSLM_ASSERT("Service " << srv->getID() << " must be stopped before destruction.", srv->isStopped());
+        ::fwServices::OSR::unregisterService(srv);
+    }
+    m_createdSrv.clear();
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::processStartItems()
+{
+    std::vector< ::fwServices::IService::SharedFutureType > futures;
+
+    for(const auto& elem :  m_cfgElem->getElements())
+    {
+        if (elem->getName() == "start")
+        {
+            SLM_ASSERT("Missing attribute \"uid\".", elem->hasAttribute("uid"));
+            const std::string uid = elem->getAttributeValue("uid");
+            SLM_ASSERT("\"uid\" attribute is empty.", !uid.empty());
+
+            if(!::fwTools::fwID::exist(uid))
+            {
+                if(m_deferredServices.find(uid) != m_deferredServices.end())
+                {
+                    SLM_FATAL( this->msgHead() + "Start is requested for service '" + uid + "' but this "
+                               "service hasn't been created yet because at least one of its data is missing. With "
+                               "DEBUG log level, you can know which are the missing objects.");
+                }
+                else
+                {
+                    SLM_FATAL( this->msgHead() + "Start is requested for service '" + uid +
+                               "', but it does not exist.");
+                }
+            }
+
+            const ::fwServices::IService::sptr srv = ::fwServices::get(uid);
+            SLM_FATAL_IF( this->msgHead() + "Start is requested for service '" + uid + "', though this identifier "
+                          "exists, this is not a service.", !srv);
+
+            futures.push_back(srv->start());
+
+            m_startedSrv.push_back(srv);
+        }
+    }
+    ::boost::wait_for_all(futures.begin(), futures.end());
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::processUpdateItems()
+{
+    std::vector< ::fwServices::IService::SharedFutureType > futures;
+
+    for(const auto& elem :  m_cfgElem->getElements())
+    {
+        if (elem->getName() == "update")
+        {
+            const std::string uid = elem->getAttributeValue("uid");
+            SLM_ASSERT("\"uid\" attribute is empty.", !uid.empty());
+
+            if(!::fwTools::fwID::exist(uid))
+            {
+                if(m_deferredServices.find(uid) != m_deferredServices.end())
+                {
+                    SLM_FATAL( this->msgHead() + "Update is requested for service '" + uid + "' but this "
+                               "service hasn't been created yet because at least one of its data is missing. With "
+                               "DEBUG log level, you can know which are the missing objects.");
+                }
+                else
+                {
+                    SLM_FATAL( this->msgHead() + "Update is requested for service '" + uid +
+                               "', but it does not exist.");
+                }
+            }
+
+            const ::fwServices::IService::sptr srv = ::fwServices::get(uid);
+            SLM_FATAL_IF( this->msgHead() + "Update is requested for service '" + uid +
+                          "', though this identifier exists, this is not a service.", !srv);
+
+            futures.push_back(srv->update());
+        }
+    }
+
+    ::boost::wait_for_all(futures.begin(), futures.end());
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::createObjects(::fwRuntime::ConfigurationElement::csptr cfgElem)
+{
+    for(const auto& elem :  cfgElem->getElements())
+    {
+        if (elem->getName() == "object")
+        {
+            // Get attributes
+
+            // Id
+            ConfigAttribute id("", false);
+            if (elem->hasAttribute("uid"))
+            {
+                id.first = elem->getAttributeValue("uid");
+                SLM_ASSERT(this->msgHead() + "\"uid\" attribute is empty.", !id.first.empty());
+                id.second = true;
+            }
+
+            // Type
+            ConfigAttribute type("", false);
+            if (elem->hasAttribute("type"))
+            {
+                type.first = elem->getAttributeValue("type");
+                SLM_ASSERT(this->msgHead() + "\"type\" attribute is empty.", !type.first.empty());
+                SLM_ASSERT(this->msgHead() + "\"type\" must be a rooted namespace.", type.first.substr(0, 2) == "::");
+                type.second = true;
+            }
+
+            // Build mode
+            ConfigAttribute buildMode("", false);
+            if (elem->hasAttribute("src"))
+            {
+                buildMode.first = elem->getAttributeValue("src");
+                SLM_ASSERT("this->msgHead() + \"src\" attribute is empty.", !buildMode.first.empty());
+
+                SLM_ASSERT("Unhandled build mode (bad \"src\" attribute). Must be \"new\", \"deferred\" or \"ref\".",
+                           buildMode.first == "ref" || buildMode.first == "src" || buildMode.first == "deferred");
+                buildMode.second = true;
+            }
+
+            if(buildMode.first == "deferred")
+            {
+                SLM_ASSERT(this->msgHead() + "Missing attribute \"id\".", id.second);
+                auto ret = m_deferredObjects.insert( std::make_pair(id.first, DeferredObjectType()));
+                SLM_ASSERT(this->msgHead() + "Object '" + id.first + "' already exists in this config.", ret.second);
+            }
+            else
+            {
+                // Creation of a new object
+                ::fwData::Object::sptr obj;
+
+                // Create new or get the referenced object
+                if (buildMode.second && buildMode.first == "ref")
+                {
+                    SLM_ASSERT(this->msgHead() + "Missing attribute \"id\".", id.second);
+                    obj = this->getRefObject(type, id.first);
+                }
+                else
+                {
+                    obj = this->getNewObject(type, id);
+                }
+
+                // Get the object parser associated with the object type
+                const auto srvFactory = ::fwServices::registry::ServiceFactory::getDefault();
+
+                std::string srvImpl = srvFactory->getDefaultImplementationIdFromObjectAndType(
+                    obj->getClassname(), "::fwServices::IXMLParser");
+
+                ::fwServices::IService::sptr srv = srvFactory->create("::fwServices::IXMLParser", srvImpl);
+                auto objectParser = ::fwServices::IXMLParser::dynamicCast(srv);
+                objectParser->setObjectConfig(elem);
+                objectParser->createConfig(obj);
+
+                m_createdObjects[id.first] = std::make_pair( obj, objectParser);
+            }
+        }
+    }
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::createServices(::fwRuntime::ConfigurationElement::csptr cfgElem)
+{
+    for(const auto& elem : cfgElem->getElements())
+    {
+        if (elem->getName() == "service")
+        {
+            // Parse the service configuration
+            ServiceConfig srvConfig = ::fwServices::helper::Config::parseService(elem, this->msgHead());
+
+            // Check if we can start the service now or if we must deferred its creation
+            bool createService = true;
+            std::vector<std::string> uids;
+
+            for(const auto& objectCfg : srvConfig.m_objects)
+            {
+                // If the current service uses an object that is marked as deferred, this means
+                // we will have to manage automatically the start/stop and the connections
+                auto it = m_deferredObjects.find(objectCfg.m_uid);
+                if(it != m_deferredObjects.end())
+                {
+                    it->second.m_servicesCfg.emplace_back(srvConfig);
+                    uids.push_back(objectCfg.m_uid);
+                    m_deferredServices.insert(srvConfig.m_uid);
+
+                    if(!objectCfg.m_optional)
+                    {
+                        createService = false;
+                    }
+                }
+            }
+
+            if(createService)
+            {
+                this->createService(srvConfig);
+            }
+            else
+            {
+                // Check if a service hasn't been already created with this uid
+                SLM_ASSERT(this->msgHead() + "UID " + srvConfig.m_uid + " already exists.",
+                           !::fwTools::fwID::exist(srvConfig.m_uid));
+
+                const std::string msg = AppConfigManager2::getUIDListAsString(uids);
+                SLM_INFO(this->msgHead() + "Service '" + srvConfig.m_uid +
+                         "' has not been created because the object" + msg + "not available.");
+            }
+        }
+        else if (elem->getName() == "serviceList")
+        {
+            this->createServices(elem);
+        }
+    }
+}
+
+// ------------------------------------------------------------------------
+
+::fwServices::IService::sptr AppConfigManager2::createService(const ::fwServices::IService::Config& srvConfig)
+{
+    // Create and bind service
+    const ::fwServices::IService::sptr srv = this->getNewService(srvConfig.m_uid, srvConfig.m_type);
+    m_createdSrv.push_back(srv);
+
+    if (!srvConfig.m_worker.empty())
+    {
+        ::fwServices::registry::ActiveWorkers::sptr activeWorkers = ::fwServices::registry::ActiveWorkers::getDefault();
+        ::fwThread::Worker::sptr worker;
+        worker = activeWorkers->getWorker(srvConfig.m_worker);
+        if (!worker)
+        {
+            worker = ::fwThread::Worker::New();
+            activeWorkers->addWorker(srvConfig.m_worker, worker);
+        }
+        srv->setWorker(worker);
+    }
+
+    std::string errMsgTail = " when creating service '" + srvConfig.m_uid + "'.";
+
+    for(const auto& objectCfg : srvConfig.m_objects)
+    {
+        srv->setObjectId(objectCfg.m_key, objectCfg.m_uid);
+
+        ::fwData::Object::sptr obj = this->findObject(objectCfg.m_uid, errMsgTail);
+
+        SLM_ASSERT(this->msgHead() + "Object '" + objectCfg.m_uid + "' has not been found" + errMsgTail,
+                   (!objectCfg.m_optional && obj) || objectCfg.m_optional);
+        if((obj || !objectCfg.m_optional) && objectCfg.m_access != ::fwServices::IService::AccessType::OUTPUT)
+        {
+            ::fwServices::OSR::registerService(obj, objectCfg.m_key, objectCfg.m_access, srv);
+        }
+    }
+
+    // Ok for now we assume we always need the root composite
+    // This is only true for services that will need to perform some stuff like adding new objects, etc...
+    // We will see in the future if this should be replaced or not
+    {
+        srv->setObjectId(::fwServices::IService::s_DEFAULT_OBJECT, "defaultObjectId");
+
+        ::fwServices::OSR::registerService(m_tmpRootObject, ::fwServices::IService::s_DEFAULT_OBJECT,
+                                           ::fwServices::IService::AccessType::INOUT, srv);
+    }
+
+    // Set the size of the key groups
+    srv->m_keyGroupSize = srvConfig.m_groupSize;
+
+    // Set the proxies
+    const auto& itSrvProxy = m_servicesProxies.find(srvConfig.m_uid);
+    if(itSrvProxy != m_servicesProxies.end())
+    {
+        for(const auto& itProxy : itSrvProxy->second.m_proxyCnt)
+        {
+            srv->addProxyConnection(itProxy.second);
+        }
+    }
+
+    // Configure
+    srv->setConfiguration(srvConfig);
+    srv->configure();
+
+    return srv;
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::createConnections()
+{
+    for(const auto& elem : m_cfgElem->getElements())
+    {
+        if (elem->getName() == "connect")
+        {
+            // Parse all connections
+            auto genIdFn = [this]()
+                           {
+                               return "Proxy_" + this->getID() + "_" + std::to_string(m_proxyID++);
+                           };
+
+            ProxyConnections connectionInfos = ::fwServices::helper::Config::parseConnections2(elem, this->msgHead(),
+                                                                                               genIdFn);
+            // Proxy that is used for non-deferred connections
+            ProxyConnections createdObjectsProxy(connectionInfos.m_channel);
+
+            // Register signals
+            for(const auto& signalInfo : connectionInfos.m_signals)
+            {
+                auto itDeferredObj = m_deferredObjects.find(signalInfo.first);
+                if( itDeferredObj != m_deferredObjects.end() )
+                {
+                    // Deferred Object
+                    ProxyConnections& proxy = itDeferredObj->second.m_proxyCnt[connectionInfos.m_channel];
+                    proxy.addSignalConnection(signalInfo);
+                }
+                else
+                {
+                    auto itObj = m_createdObjects.find(signalInfo.first);
+                    if( itObj != m_createdObjects.end() )
+                    {
+                        // Regular object
+                        createdObjectsProxy.addSignalConnection(signalInfo);
+                    }
+                    else
+                    {
+                        // Service
+                        auto& itSrv             = m_servicesProxies[signalInfo.first];
+                        ProxyConnections& proxy = itSrv.m_proxyCnt[connectionInfos.m_channel];
+                        proxy.addSignalConnection(signalInfo);
+                        proxy.m_channel = connectionInfos.m_channel;
+                    }
+                }
+            }
+
+            // Register slots
+            for(const auto& slotInfo : connectionInfos.m_slots)
+            {
+                auto itDeferredObj = m_deferredObjects.find(slotInfo.first);
+                if( itDeferredObj != m_deferredObjects.end() )
+                {
+                    // Deferred Object
+                    ProxyConnections& proxy = itDeferredObj->second.m_proxyCnt[connectionInfos.m_channel];
+                    proxy.addSlotConnection(slotInfo);
+                }
+                else
+                {
+                    auto itObj = m_createdObjects.find(slotInfo.first);
+                    if( itObj != m_createdObjects.end() )
+                    {
+                        // Regular object
+                        createdObjectsProxy.addSlotConnection(slotInfo);
+                    }
+                    else
+                    {
+                        // Service
+                        auto& itSrv             = m_servicesProxies[slotInfo.first];
+                        ProxyConnections& proxy = itSrv.m_proxyCnt[connectionInfos.m_channel];
+                        proxy.addSlotConnection(slotInfo);
+                        proxy.m_channel = connectionInfos.m_channel;
+                    }
+                }
+            }
+
+            m_createdObjectsProxies[connectionInfos.m_channel] = createdObjectsProxy;
+            this->connectProxy(connectionInfos.m_channel, createdObjectsProxy);
+        }
+    }
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::destroyProxy(const std::string& channel, const ProxyConnections& proxyCfg,
+                                     const std::string& key, ::fwData::Object::csptr hintObj)
+{
+    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+    for(const ProxyConnections::ProxyEltType& signalElt : proxyCfg.m_signals)
+    {
+        if(key.empty() || signalElt.first == key)
+        {
+            ::fwTools::Object::csptr obj = hintObj;
+            if(obj == nullptr)
+            {
+                obj = ::fwTools::fwID::getObject(signalElt.first);
+            }
+            ::fwCom::HasSignals::csptr hasSignals = std::dynamic_pointer_cast< const ::fwCom::HasSignals >(obj);
+            SLM_ASSERT(this->msgHead() + "Signal source not found '" + signalElt.first + "'", obj);
+
+            ::fwCom::SignalBase::sptr sig = hasSignals->signal(signalElt.second);
+            proxy->disconnect(channel, sig);
+        }
+    }
+    for(const ProxyConnections::ProxyEltType& slotElt : proxyCfg.m_slots)
+    {
+        if(key.empty() || slotElt.first == key)
+        {
+            ::fwTools::Object::sptr obj      = ::fwTools::fwID::getObject(slotElt.first);
+            ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+            SLM_ASSERT(this->msgHead() + "Slot destination not found '" + slotElt.first + "'", hasSlots);
+
+            ::fwCom::SlotBase::sptr slot = hasSlots->slot(slotElt.second);
+            proxy->disconnect(channel, slot);
+        }
+    }
+}
+
+// ------------------------------------------------------------------------
+
+void AppConfigManager2::destroyProxies()
+{
+    // Remove local proxies from deferred objects
+    for(auto& itDeferredObj : m_deferredObjects)
+    {
+        if(itDeferredObj.second.m_object)
+        {
+            for(const auto& itProxy : itDeferredObj.second.m_proxyCnt)
+            {
+                this->destroyProxy(itProxy.first, itProxy.second, itDeferredObj.first, itDeferredObj.second.m_object);
+            }
+            itDeferredObj.second.m_object.reset();
+        }
+    }
+
+    // Remove local proxies from all created objects
+    for(const auto& itProxy : m_createdObjectsProxies)
+    {
+        this->destroyProxy(itProxy.first, itProxy.second);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfigManager2::addObjects(fwData::Object::sptr obj, const std::string& id)
+{
+    FW_PROFILE("addObjects");
+
+    // Local map used to process services only once
+    std::map< std::string, const ServiceConfig* > servicesMapCfg;
+
+    // Local vector used to store services and keep the declare order (we could use only this one but the map is used
+    // to speedup the search
+    std::vector< const ServiceConfig* > servicesCfg;
+
+    // Are there services that were waiting for this object ?
+    auto itDeferredObj = m_deferredObjects.find(id);
+    if(itDeferredObj != m_deferredObjects.end())
+    {
+        // For each service waiting to be started
+        for(const auto& srvCfg : itDeferredObj->second.m_servicesCfg)
+        {
+            if(servicesMapCfg.find(srvCfg.m_uid) == servicesMapCfg.end())
+            {
+                servicesMapCfg[srvCfg.m_uid] = &srvCfg;
+                servicesCfg.push_back(&srvCfg);
+            }
+        }
+
+        // Connect signals of this deferred object
+        itDeferredObj->second.m_object = obj;
+
+        for(const auto& connectCfg : itDeferredObj->second.m_proxyCnt)
+        {
+            this->connectProxy(connectCfg.first, connectCfg.second);
+        }
+    }
+
+    std::vector< ::fwServices::IService::SharedFutureType > futures;
+    for(const auto& itService : servicesCfg)
+    {
+        auto srvCfg = itService;
+        SLM_ASSERT("Config is null", srvCfg);
+        auto& uid = srvCfg->m_uid;
+
+        bool createService = true;
+        bool reconnect     = false;
+
+        // Look for all objects (there could be more than the current object) and check if they are all created
+        for(const auto& objCfg : srvCfg->m_objects)
+        {
+            // Look first in objects created in this appConfig
+            if(m_createdObjects.find(objCfg.m_uid) == m_createdObjects.end())
+            {
+                // Not found, now look in the objects that were marked as "deferred"
+                const auto itDeferredObj = m_deferredObjects.find(objCfg.m_uid);
+                SLM_ASSERT( this->msgHead() + "Object '" + objCfg.m_uid + "' used by service '" + uid +
+                            "' has not been declared in this AppConfig.",
+                            itDeferredObj != m_deferredObjects.end());
+
+                const auto object = itDeferredObj->second.m_object;
+                if(object == nullptr)
+                {
+                    if(!objCfg.m_optional)
+                    {
+                        createService = false;
+
+                        SLM_INFO( this->msgHead() + "Service '" + uid + "' has not been created because the "
+                                  "object" + objCfg.m_uid + " is not available.");
+                    }
+                }
+                else if(::fwTools::fwID::exist(uid))
+                {
+                    ::fwServices::IService::sptr srv = ::fwServices::get(uid);
+                    SLM_ASSERT(this->msgHead() + "No service registered with UID \"" + uid + "\".", srv);
+
+                    // We have an optional object
+                    if( objCfg.m_optional && !::fwServices::OSR::isRegistered(objCfg.m_key, objCfg.m_access, srv))
+                    {
+                        // Register the key on the service
+                        ::fwServices::OSR::registerService(object, objCfg.m_key, objCfg.m_access, srv);
+
+                        // Call the swapping callback of the service and wait for it
+                        srv->swapKey(objCfg.m_key, nullptr).wait();
+                    }
+
+                    createService = false;
+                    reconnect     = true;
+                }
+            }
+        }
+
+        // All the data for this service is ready, create and run it
+        if(createService)
+        {
+            // 1. Create the service
+            auto srv = this->createService(*srvCfg);
+
+            // 3. Start the service
+            futures.push_back(srv->start());
+            m_startedSrv.push_back(srv);
+
+            // Debug message
+            SLM_INFO( this->msgHead() + "Service '" + uid + "' has been automatically started because its "
+                      "objects are all available.");
+        }
+        else if(reconnect)
+        {
+            // Update auto connections
+            ::fwServices::IService::sptr srv = ::fwServices::get(uid);
+            OSLM_ASSERT(this->msgHead() + "No service registered with UID \"" << uid << "\".", srv);
+
+            srv->autoDisconnect();
+            srv->autoConnect();
+        }
+    }
+
+    ::boost::wait_for_all(futures.begin(), futures.end());
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfigManager2::removeObjects(fwData::Object::sptr obj, const std::string& id)
+{
+    FW_PROFILE("removeObjects");
+
+    // Are there services that were connected with this object ?
+    const auto itDeferredObj = m_deferredObjects.find(id);
+    if(itDeferredObj != m_deferredObjects.end())
+    {
+        for(const auto& itProxy : itDeferredObj->second.m_proxyCnt)
+        {
+            this->destroyProxy(itProxy.first, itProxy.second, id, itDeferredObj->second.m_object);
+        }
+
+        itDeferredObj->second.m_object.reset();
+
+        // Are there services that were using this object ?
+        for(const auto& srvCfg : itDeferredObj->second.m_servicesCfg)
+        {
+            if( ::fwTools::fwID::exist(srvCfg.m_uid) )
+            {
+                // Check all objects, to know if this object is optional
+                bool optional = true;
+
+                for(const auto& objCfg : srvCfg.m_objects)
+                {
+                    if(id == objCfg.m_uid)
+                    {
+                        ::fwServices::IService::sptr srv = ::fwServices::get(srvCfg.m_uid);
+                        OSLM_ASSERT("No service registered with UID \"" << srvCfg.m_uid << "\".", srv);
+
+                        if(objCfg.m_optional)
+                        {
+                            if(::fwServices::OSR::isRegistered(objCfg.m_key, objCfg.m_access, srv))
+                            {
+                                ::fwServices::OSR::unregisterService(objCfg.m_key, objCfg.m_access, srv);
+
+                                srv->swapKey(objCfg.m_key, obj).wait();
+                            }
+                        }
+                        else
+                        {
+                            optional = false;
+                        }
+                    }
+                }
+
+                if(!optional)
+                {
+                    // 1. Stop the service
+                    ::fwServices::IService::sptr srv = ::fwServices::get(srvCfg.m_uid);
+                    OSLM_ASSERT(this->msgHead() + "No service registered with UID \"" << srvCfg.m_uid << "\".", srv);
+
+                    OSLM_ASSERT("Service " << srv->getID() << " already stopped.", !srv->isStopped());
+                    srv->stop().wait();
+
+                    for(auto it = m_startedSrv.begin(); it != m_startedSrv.end(); ++it)
+                    {
+                        if(it->lock() == srv)
+                        {
+                            m_startedSrv.erase(it);
+                            break;
+                        }
+                    }
+
+                    // 2. Destroy the service
+                    OSLM_ASSERT("Service " << srv->getID() << " must be stopped before destruction.",
+                                srv->isStopped());
+                    ::fwServices::OSR::unregisterService(srv);
+
+                    for(auto it = m_createdSrv.begin(); it != m_createdSrv.end(); ++it)
+                    {
+                        if(it->lock() == srv)
+                        {
+                            m_createdSrv.erase(it);
+                            break;
+                        }
+                    }
+
+                    ::fwServices::IService::wptr checkSrv = srv;
+                    srv.reset();
+
+                    SLM_ASSERT( this->msgHead() + "The service '" + srvCfg.m_uid +
+                                "'' should have been destroyed, but someone "
+                                "still holds a reference which prevents to destroy it properly.",
+                                checkSrv.expired());
+
+                    SLM_INFO( this->msgHead() + "Service '" + srvCfg.m_uid +
+                              "' has been stopped because the object " +
+                              id + " is no longer available.");
+                }
+                else
+                {
+                    // Update auto connections
+                    ::fwServices::IService::sptr srv = ::fwServices::get(srvCfg.m_uid);
+                    OSLM_ASSERT(this->msgHead() + "No service registered with UID \"" << srvCfg.m_uid << "\".", srv);
+
+                    srv->autoDisconnect();
+                    srv->autoConnect();
+                }
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfigManager2::connectProxy(const std::string& channel, const ProxyConnections& connectCfg)
+{
+    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+    for(const auto& signalCfg : connectCfg.m_signals)
+    {
+        ::fwTools::Object::sptr sigSource = ::fwTools::fwID::getObject(signalCfg.first);
+        if(sigSource == nullptr)
+        {
+            // We didn't found the object or service globally, let's try with local deferred objects
+            auto itDeferredObj = m_deferredObjects.find(signalCfg.first);
+            SLM_ASSERT( this->msgHead() + "Object '" + signalCfg.first + "' not found.",
+                        itDeferredObj != m_deferredObjects.end());
+
+            sigSource = itDeferredObj->second.m_object;
+        }
+        ::fwCom::HasSignals::sptr hasSignals = std::dynamic_pointer_cast< ::fwCom::HasSignals >(sigSource);
+        SLM_ASSERT(this->msgHead() + "Signal source not found '" + signalCfg.first + "'", hasSignals);
+
+        ::fwCom::SignalBase::sptr sig = hasSignals->signal(signalCfg.second);
+        SLM_ASSERT("Signal '" + signalCfg.second + "' not found in source '" + signalCfg.first + "'.", sig);
+        proxy->connect(channel, sig);
+    }
+
+    for(const auto& slotCfg : connectCfg.m_slots)
+    {
+        ::fwTools::Object::sptr slotDest = ::fwTools::fwID::getObject(slotCfg.first);
+        ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(slotDest);
+        SLM_ASSERT(this->msgHead() + "Slot destination not found '" + slotCfg.first + "'", hasSlots);
+
+        ::fwCom::SlotBase::sptr slot = hasSlots->slot(slotCfg.second);
+        SLM_ASSERT("Slot '" + slotCfg.second + "' not found in source '" + slotCfg.first + "'.", slot);
+        proxy->connect(channel, slot);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+std::string AppConfigManager2::getUIDListAsString(const std::vector<std::string>& uidList)
+{
+    std::string msg = uidList.size() == 1 ? " '" : "s '";
+    msg += uidList[0];
+    for(auto it = uidList.begin() + 1; it < uidList.end(); ++it)
+    {
+        msg += "', '" + *it;
+    }
+    msg = uidList.size() == 1 ? msg + "' is " : msg + "' are ";
+
+    return msg;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace fwServices
diff --git a/SrcLib/core/fwServices/src/fwServices/IAppConfigManager.cpp b/SrcLib/core/fwServices/src/fwServices/IAppConfigManager.cpp
new file mode 100644
index 0000000..805382e
--- /dev/null
+++ b/SrcLib/core/fwServices/src/fwServices/IAppConfigManager.cpp
@@ -0,0 +1,33 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwServices/IAppConfigManager.hpp"
+#include "fwServices/AppConfigManager.hpp"
+#include "fwServices/AppConfigManager2.hpp"
+
+namespace fwServices
+{
+int IAppConfigManager::s_VERSION = 0;
+
+//------------------------------------------------------------------------------
+
+IAppConfigManager::sptr IAppConfigManager::New()
+{
+    SLM_ASSERT("Defaut implementation hasn't been chosen yet.", s_VERSION == 1 || s_VERSION == 2);
+    if(s_VERSION == 1)
+    {
+        return ::fwServices::AppConfigManager::New();
+    }
+    else
+    {
+        return ::fwServices::AppConfigManager2::New();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace fwServices
+
diff --git a/SrcLib/core/fwServices/src/fwServices/IController.cpp b/SrcLib/core/fwServices/src/fwServices/IController.cpp
index 6a00015..36eb676 100644
--- a/SrcLib/core/fwServices/src/fwServices/IController.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/IController.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,12 +12,14 @@ namespace fwServices
 //-----------------------------------------------------------------------------
 
 IController::IController()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
-IController::~IController() 
-{}
+IController::~IController()
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwServices/src/fwServices/IEditionService.cpp b/SrcLib/core/fwServices/src/fwServices/IEditionService.cpp
deleted file mode 100644
index 0eda922..0000000
--- a/SrcLib/core/fwServices/src/fwServices/IEditionService.cpp
+++ /dev/null
@@ -1,75 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwServices/IEditionService.hpp"
-#include "fwServices/macros.hpp"
-#include "fwServices/ObjectMsg.hpp"
-#include "fwServices/registry/ObjectService.hpp"
-#include "fwServices/op/Get.hpp"
-
-namespace fwServices
-{
-
-//-----------------------------------------------------------------------------
-
-void IEditionService::notify(
-        ::fwServices::IService::sptr _pSource,
-        ::fwData::Object::sptr _pSubject,
-        ::fwServices::ObjectMsg::sptr _pMsg)
-{
-
-    _pMsg->setSource(_pSource);
-    _pMsg->setSubject(_pSubject);
-    _pMsg->timeModified();
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = _pSubject->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-    IService::ReceiveSlotType::sptr slot =  _pSource->slot< IService::ReceiveSlotType >( IService::s_RECEIVE_SLOT );
-
-    fwServicesBlockAndNotifyMsgMacro( _pSource->getLightID(), sig, _pMsg, slot );
-}
-
-//-----------------------------------------------------------------------------
-
-void IEditionService::notify(
-        ::fwServices::IService::sptr _pSource,
-        ::fwData::Object::sptr _pSubject,
-        ::fwServices::ObjectMsg::sptr _pMsg,
-         bool _allowLoops )
-{
-
-    _pMsg->setSource(_pSource);
-    _pMsg->setSubject(_pSubject);
-    _pMsg->timeModified();
-
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = _pSubject->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-    if( _allowLoops )
-    {
-        fwServicesNotifyMsgMacro( _pSource->getLightID(), sig, _pMsg );
-    }
-    else
-    {
-        IService::ReceiveSlotType::sptr slot =  _pSource->slot< IService::ReceiveSlotType >( IService::s_RECEIVE_SLOT );
-        fwServicesBlockAndNotifyMsgMacro( _pSource->getLightID(), sig, _pMsg, slot );
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-IEditionService::IEditionService()
-{}
-
-//-----------------------------------------------------------------------------
-
-IEditionService::~IEditionService() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-}
diff --git a/SrcLib/core/fwServices/src/fwServices/IParametersService.cpp b/SrcLib/core/fwServices/src/fwServices/IParametersService.cpp
new file mode 100644
index 0000000..c1875d8
--- /dev/null
+++ b/SrcLib/core/fwServices/src/fwServices/IParametersService.cpp
@@ -0,0 +1,104 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwServices/IParametersService.hpp"
+
+#include <fwCom/Slots.hxx>
+
+namespace fwServices
+{
+
+//-----------------------------------------------------------------------------
+
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_BOOL_PARAMETER_SLOT    = "setBoolParameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_COLOR_PARAMETER_SLOT   = "setColorParameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_DOUBLE_PARAMETER_SLOT  = "setDoubleParameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_DOUBLE2_PARAMETER_SLOT = "setDouble2Parameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_DOUBLE3_PARAMETER_SLOT = "setDouble3Parameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_INT_PARAMETER_SLOT     = "setIntParameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_INT2_PARAMETER_SLOT    = "setInt2Parameter";
+const ::fwCom::Slots::SlotKeyType IParametersService::s_SET_INT3_PARAMETER_SLOT    = "setInt3Parameter";
+
+
+//-----------------------------------------------------------------------------
+
+IParametersService::IParametersService()
+{
+    newSlot(s_SET_BOOL_PARAMETER_SLOT, &IParametersService::setBoolParameter, this);
+    newSlot(s_SET_COLOR_PARAMETER_SLOT, &IParametersService::setColorParameter, this);
+    newSlot(s_SET_DOUBLE_PARAMETER_SLOT, &IParametersService::setDoubleParameter, this);
+    newSlot(s_SET_DOUBLE2_PARAMETER_SLOT, &IParametersService::setDouble2Parameter, this);
+    newSlot(s_SET_DOUBLE3_PARAMETER_SLOT, &IParametersService::setDouble3Parameter, this);
+    newSlot(s_SET_INT_PARAMETER_SLOT, &IParametersService::setIntParameter, this);
+    newSlot(s_SET_INT2_PARAMETER_SLOT, &IParametersService::setInt2Parameter, this);
+    newSlot(s_SET_INT3_PARAMETER_SLOT, &IParametersService::setInt3Parameter, this);
+}
+
+//-----------------------------------------------------------------------------
+
+IParametersService::~IParametersService()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setBoolParameter(bool val, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setColorParameter(std::array<std::uint8_t, 4> color, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setDoubleParameter(double val, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setDouble2Parameter(double val0, double val1, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setDouble3Parameter(double val0, double val1, double val2, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setIntParameter(int val, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setInt2Parameter(int val0, int val1, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+void IParametersService::setInt3Parameter(int val0, int val1, int val2, std::string key)
+{
+
+}
+
+//-----------------------------------------------------------------------------
+
+}
diff --git a/SrcLib/core/fwServices/src/fwServices/IService.cpp b/SrcLib/core/fwServices/src/fwServices/IService.cpp
index 405d4c3..7645cba 100644
--- a/SrcLib/core/fwServices/src/fwServices/IService.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/IService.cpp
@@ -1,37 +1,46 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/property_tree/ptree.hpp>
-
-#include <fwTools/fwID.hpp>
-
-#include <fwRuntime/EConfigurationElement.hpp>
-#include <fwRuntime/Convert.hpp>
+#include "fwServices/IService.hpp"
+#include "fwServices/registry/ActiveWorkers.hpp"
+#include "fwServices/registry/ObjectService.hpp"
+#include "fwServices/registry/Proxy.hpp"
 
 #include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
 #include <fwCom/Slots.hpp>
 #include <fwCom/Slots.hxx>
 
-#include "fwServices/IService.hpp"
-#include "fwServices/IEditionService.hpp"
-#include "fwServices/registry/ObjectService.hpp"
-#include "fwServices/registry/ActiveWorkers.hpp"
-#include "fwServices/Base.hpp"
+#include <fwRuntime/Convert.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwThread/Worker.hpp>
+#include <fwTools/fwID.hpp>
+
+#include <boost/property_tree/ptree.hpp>
+#include <boost/regex.hpp>
 
 namespace fwServices
 {
 
 //-----------------------------------------------------------------------------
 
-const ::fwCom::Slots::SlotKeyType IService::s_START_SLOT = "start";
-const ::fwCom::Slots::SlotKeyType IService::s_STOP_SLOT = "stop";
-const ::fwCom::Slots::SlotKeyType IService::s_UPDATE_SLOT = "update";
-const ::fwCom::Slots::SlotKeyType IService::s_RECEIVE_SLOT = "receive";
-const ::fwCom::Slots::SlotKeyType IService::s_SWAP_SLOT = "swap";
+const ::fwCom::Slots::SlotKeyType IService::s_STARTED_SIG = "started";
+const ::fwCom::Slots::SlotKeyType IService::s_UPDATED_SIG = "updated";
+const ::fwCom::Slots::SlotKeyType IService::s_STOPPED_SIG = "stopped";
+
+const ::fwCom::Slots::SlotKeyType IService::s_START_SLOT   = "start";
+const ::fwCom::Slots::SlotKeyType IService::s_STOP_SLOT    = "stop";
+const ::fwCom::Slots::SlotKeyType IService::s_UPDATE_SLOT  = "update";
+const ::fwCom::Slots::SlotKeyType IService::s_SWAP_SLOT    = "swap";
+const ::fwCom::Slots::SlotKeyType IService::s_SWAPKEY_SLOT = "swapKey";
+
+const std::string IService::s_DEFAULT_OBJECT = "defaultObject";
+
+int IService::s_version = 1;
 
 //-----------------------------------------------------------------------------
 
@@ -41,71 +50,134 @@ IService::IService() :
     m_updatingState ( NOTUPDATING ),
     m_configurationState ( UNCONFIGURED )
 {
-    // by default a weak_ptr have a use_count == 0
-
-    m_slotStart    = ::fwCom::newSlot( &IService::start     , this ) ;
-    m_slotStop     = ::fwCom::newSlot( &IService::stop      , this ) ;
-    m_slotUpdate   = ::fwCom::newSlot( &IService::update    , this ) ;
-    m_slotReceive  = ::fwCom::newSlot( &IService::receive   , this ) ;
-    m_slotSwap     = ::fwCom::newSlot( &IService::swap      , this ) ;
+    newSignal<StartedSignalType>( s_STARTED_SIG );
+    newSignal<UpdatedSignalType>( s_UPDATED_SIG );
+    newSignal<StoppedSignalType>( s_STOPPED_SIG );
+
+    m_slotStart   = newSlot( s_START_SLOT, &IService::start, this );
+    m_slotStop    = newSlot( s_STOP_SLOT, &IService::stop, this );
+    m_slotUpdate  = newSlot( s_UPDATE_SLOT, &IService::update, this );
+    m_slotSwap    = newSlot( s_SWAP_SLOT, &IService::swap, this );
+    m_slotSwapKey = newSlot( s_SWAPKEY_SLOT, &IService::swapKey, this );
+}
 
-    ::fwCom::HasSlots::m_slots
-                 ( s_START_SLOT   , m_slotStart   )
-                 ( s_STOP_SLOT    , m_slotStop    )
-                 ( s_UPDATE_SLOT  , m_slotUpdate  )
-                 ( s_RECEIVE_SLOT , m_slotReceive )
-                 ( s_SWAP_SLOT    , m_slotSwap    )
-                 ;
-#ifdef COM_LOG
-    ::fwCom::HasSlots::m_slots.setID();
-    ::fwCom::HasSignals::m_signals.setID();
-#endif
+//-----------------------------------------------------------------------------
 
-    this->setWorker( registry::ActiveWorkers::getDefault()->getWorker( registry::ActiveWorkers::s_DEFAULT_WORKER ) );
+IService::~IService()
+{
 }
 
 //-----------------------------------------------------------------------------
 
-IService::~IService()
-{}
+void IService::info( std::ostream& _sstream )
+{
+}
 
 //-----------------------------------------------------------------------------
 
-void IService::info( std::ostream &_sstream )
-{}
+void IService::setOutput(const IService::KeyType& key, const fwData::Object::sptr& object, size_t index)
+{
+    std::string outKey = key;
+
+    if(m_keyGroupSize.find(key) != m_keyGroupSize.end())
+    {
+        outKey = KEY_GROUP_NAME(key, index);
+    }
+    if(::fwServices::OSR::isRegistered(outKey, ::fwServices::IService::AccessType::OUTPUT, this->getSptr()))
+    {
+        ::fwServices::OSR::unregisterServiceOutput(outKey, this->getSptr());
+    }
+
+    if(object != nullptr)
+    {
+        ::fwServices::OSR::registerServiceOutput(object, outKey, this->getSptr());
+    }
+}
 
 //-----------------------------------------------------------------------------
 
 ::fwData::Object::sptr IService::getObject()
 {
-    SLM_ASSERT("Associated Object of " <<this->getID()<<" ["<<this->getClassname()<<"] is expired", !m_associatedObject.expired() );
+    // Handle compatibility with new behavior
+    if(m_associatedObject.expired())
+    {
+        // If we have an appXml2 but with an old service definition, we consider that the old primary object is the
+        // first one in the map
+        if(!m_inputsMap.empty())
+        {
+            return ::fwData::Object::constCast(m_inputsMap.begin()->second.lock());
+        }
+        else if(!m_inOutsMap.empty())
+        {
+            return m_inOutsMap.begin()->second.lock();
+        }
+        else if(!m_outputsMap.empty())
+        {
+            return m_outputsMap.begin()->second.lock();
+        }
+        else
+        {
+            OSLM_ASSERT("Associated Object of " <<this->getID()<<" ["<<this->getClassname()<<"] is expired", false );
+        }
+    }
     return m_associatedObject.lock();
 }
 
 //-----------------------------------------------------------------------------
 
-void displayPt(::boost::property_tree::ptree &pt, std::string indent = "")
+IService::IdType IService::getObjectId(const IService::KeyType& _key) const
+{
+    auto it = m_idsMap.find(_key);
+    SLM_ASSERT("Object key '" + _key + "' not found in service " + this->getID() + ".", it != m_idsMap.end());
+    return it->second;
+}
+
+//-----------------------------------------------------------------------------
+
+void IService::setObjectId(const IService::KeyType& _key, const IService::IdType& _id)
+{
+    m_idsMap[_key] = _id;
+}
+
+//-----------------------------------------------------------------------------
+
+void displayPt(::boost::property_tree::ptree& pt, std::string indent = "")
 {
     OSLM_ERROR(indent << " data : '" << pt.data() << "'" );
 
-    BOOST_FOREACH( ::boost::property_tree::ptree::value_type &v, pt)
+    for( ::boost::property_tree::ptree::value_type &v :  pt)
     {
         OSLM_ERROR((indent + "  '") << v.first << "':" );
-        displayPt(v.second , indent + "      ");
+        displayPt(v.second, indent + "      ");
 
     }
 }
 
+//-----------------------------------------------------------------------------
+
 void IService::setConfiguration(const ::fwRuntime::ConfigurationElement::sptr _cfgElement)
 {
-    SLM_ASSERT( "Invalid ConfigurationElement", _cfgElement ) ;
-    m_configuration = _cfgElement ;
-    m_configurationState = UNCONFIGURED ;
+    SLM_ASSERT( "Invalid ConfigurationElement", _cfgElement );
+    m_configuration      = _cfgElement;
+    m_configurationState = UNCONFIGURED;
 }
 
 //-----------------------------------------------------------------------------
 
-void IService::setConfiguration( const ConfigType &ptree )
+void IService::setConfiguration(const Config& _configuration)
+{
+    SLM_ASSERT( "Invalid ConfigurationElement", _configuration.m_config );
+
+    // TODO: Remove this ugly const_cast
+    m_configuration      = ::fwRuntime::ConfigurationElement::constCast(_configuration.m_config);
+    m_configurationState = UNCONFIGURED;
+
+    m_serviceConfig = _configuration;
+}
+
+//-----------------------------------------------------------------------------
+
+void IService::setConfiguration( const ConfigType& ptree )
 {
     ::fwRuntime::ConfigurationElement::sptr ce;
 
@@ -120,7 +192,7 @@ void IService::setConfiguration( const ConfigType &ptree )
 
 ::fwRuntime::ConfigurationElement::sptr IService::getConfiguration() const
 {
-    return m_configuration ;
+    return m_configuration;
 }
 
 //-----------------------------------------------------------------------------
@@ -148,7 +220,7 @@ void IService::configure()
     //SLM_ASSERT( "Configuration is not correct", this->checkConfiguration() );
     if( m_configurationState == UNCONFIGURED )
     {
-        m_configurationState = CONFIGURING ;
+        m_configurationState = CONFIGURING;
         if( m_globalState == STOPPED )
         {
             this->configuring();
@@ -157,7 +229,7 @@ void IService::configure()
         {
             this->reconfiguring();
         }
-        m_configurationState = CONFIGURED ;
+        m_configurationState = CONFIGURED;
     }
 }
 
@@ -165,28 +237,38 @@ void IService::configure()
 
 void IService::reconfiguring() throw ( ::fwTools::Failed )
 {
-    OSLM_FATAL("If this method (reconfiguring) is called, it must be overrided in the implementation ("<<this->getClassname()<<", "<< this->getID() <<")" );
+    OSLM_FATAL(
+        "If this method (reconfiguring) is called, it must be overrided in the implementation ("<<this->getClassname()<<", "<< this->getID() <<
+        ")" );
 }
 
 //-----------------------------------------------------------------------------
 
-IService::SharedFutureType IService::start() //throw( ::fwTools::Failed)
+IService::SharedFutureType IService::start()
 {
     if( !m_associatedWorker || ::fwThread::getCurrentThreadId() == m_associatedWorker->getThreadId() )
     {
         OSLM_FATAL_IF("Service "<<this->getID()<<" already started", m_globalState != STOPPED);
 
+        this->connectToConfig();
+
         PackagedTaskType task( ::boost::bind(&IService::starting, this) );
         UniqueFutureType ufuture = task.get_future();
 
-        m_globalState = STARTING ;
-        task() ;
-        m_globalState = STARTED ;
+        m_globalState = STARTING;
+        task();
+        m_globalState = STARTED;
 
         if ( ufuture.has_exception() )
         {
             ufuture.get();
         }
+
+        this->autoConnect();
+
+        auto sig = this->signal<StartedSignalType>(s_STARTED_SIG);
+        sig->asyncEmit();
+
         return ::boost::move(ufuture);
     }
     else
@@ -197,23 +279,31 @@ IService::SharedFutureType IService::start() //throw( ::fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-IService::SharedFutureType IService::stop() //throw( ::fwTools::Failed)
+IService::SharedFutureType IService::stop()
 {
     if( !m_associatedWorker || ::fwThread::getCurrentThreadId() == m_associatedWorker->getThreadId() )
     {
         OSLM_FATAL_IF("Service "<<this->getID()<<" already stopped", m_globalState != STARTED);
 
+        this->autoDisconnect();
+
         PackagedTaskType task( ::boost::bind(&IService::stopping, this) );
         UniqueFutureType ufuture = task.get_future();
 
-        m_globalState = STOPPING ;
-        task() ;
-        m_globalState = STOPPED ;
+        m_globalState = STOPPING;
+        task();
+        m_globalState = STOPPED;
 
         if ( ufuture.has_exception() )
         {
             ufuture.get();
         }
+
+        auto sig = this->signal<StoppedSignalType>(s_STOPPED_SIG);
+        sig->asyncEmit();
+
+        this->disconnectFromConfig();
+
         return ::boost::move(ufuture);
     }
     else
@@ -224,63 +314,89 @@ IService::SharedFutureType IService::stop() //throw( ::fwTools::Failed)
 
 //-----------------------------------------------------------------------------
 
-void IService::receive( ::fwServices::ObjectMsg::csptr _msg )
+IService::SharedFutureType IService::update()
 {
     if( !m_associatedWorker || ::fwThread::getCurrentThreadId() == m_associatedWorker->getThreadId() )
     {
-        OSLM_COM("Receive " << _msg->getLightID() << "::" << _msg->getEventIds()[0] << " ( "<< this->getLightID() <<" )" );
-        OSLM_FATAL_IF("IService::receive : "<<this->getID()<<" is stopped and cannot manages messages.", m_globalState != STARTED);
-        this->receiving( _msg );
+        OSLM_ASSERT(
+            "INVOKING update WHILE STOPPED ("<<m_globalState<<") on this = " << this->className(),
+            m_globalState == STARTED );
+        OSLM_ASSERT(
+            "INVOKING update WHILE NOT IDLE ("<<m_updatingState<<") on this = " << this->className(),
+            m_updatingState == NOTUPDATING );
+
+        PackagedTaskType task( ::boost::bind(&IService::updating, this) );
+        UniqueFutureType ufuture = task.get_future();
+
+        m_updatingState = UPDATING;
+        task();
+        m_updatingState = NOTUPDATING;
+
+        if ( ufuture.has_exception() )
+        {
+            ufuture.get();
+        }
+
+        auto sig = this->signal<StartedSignalType>(s_UPDATED_SIG);
+        sig->asyncEmit();
+
+        return ::boost::move(ufuture);
     }
     else
     {
-        m_slotReceive->asyncRun(_msg);
+        return m_slotUpdate->asyncRun();
     }
 }
 
 //-----------------------------------------------------------------------------
 
-IService::SharedFutureType IService::update() //throw( ::fwTools::Failed)
+IService::SharedFutureType IService::swap( ::fwData::Object::sptr _obj )
 {
     if( !m_associatedWorker || ::fwThread::getCurrentThreadId() == m_associatedWorker->getThreadId() )
     {
-        OSLM_ASSERT("INVOKING update WHILE STOPPED ("<<m_globalState<<") on this = " << this->className(), m_globalState == STARTED );
-        OSLM_ASSERT("INVOKING update WHILE NOT IDLE ("<<m_updatingState<<") on this = " << this->className(), m_updatingState == NOTUPDATING );
+        OSLM_ASSERT("Swapping on "<< this->getID() << " with same Object " << _obj->getID(),
+                    m_associatedObject.lock() != _obj );
+        OSLM_FATAL_IF(
+            "Service "<< this->getID() << " is not STARTED, no swapping with Object " << _obj->getID(),
+            m_globalState != STARTED);
 
-        PackagedTaskType task( ::boost::bind(&IService::updating, this) );
+        PackagedTaskType task( ::boost::bind(&IService::swapping, this) );
         UniqueFutureType ufuture = task.get_future();
 
-        m_updatingState = UPDATING ;
-        task() ;
-        m_updatingState = NOTUPDATING ;
+        m_globalState = SWAPPING;
+        ::fwServices::OSR::swapService( _obj, this->getSptr() );
+        task();
+        m_globalState = STARTED;
 
         if ( ufuture.has_exception() )
         {
             ufuture.get();
         }
+
         return ::boost::move(ufuture);
     }
     else
     {
-        return m_slotUpdate->asyncRun();
+        return m_slotSwap->asyncRun( _obj );
     }
 }
 
 //-----------------------------------------------------------------------------
 
-IService::SharedFutureType IService::swap( ::fwData::Object::sptr _obj ) //throw(::fwTools::Failed)
+IService::SharedFutureType IService::swapKey(const IService::KeyType& _key, fwData::Object::sptr _obj)
 {
     if( !m_associatedWorker || ::fwThread::getCurrentThreadId() == m_associatedWorker->getThreadId() )
     {
-        OSLM_ASSERT("Swapping on "<< this->getID() << " with same Object " << _obj->getID(), m_associatedObject.lock() != _obj );
-        OSLM_FATAL_IF( "Service "<< this->getID() << " is not STARTED, no swapping with Object " << _obj->getID(), m_globalState != STARTED);
+        OSLM_FATAL_IF(
+            "Service "<< this->getID() << " is not STARTED, no swapping with Object " <<
+            (_obj ? _obj->getID() : "nullptr"),
+            m_globalState != STARTED);
 
-        PackagedTaskType task( ::boost::bind(&IService::swapping, this) );
+        PackagedTaskType task( ::boost::bind(&IService::swapping, this, _key) );
         UniqueFutureType ufuture = task.get_future();
 
         m_globalState = SWAPPING;
-        ::fwServices::OSR::swapService( _obj , this->getSptr() );
-        task() ;
+        task();
         m_globalState = STARTED;
 
         if ( ufuture.has_exception() )
@@ -291,50 +407,43 @@ IService::SharedFutureType IService::swap( ::fwData::Object::sptr _obj ) //throw
     }
     else
     {
-        return m_slotSwap->asyncRun( _obj );
+        return m_slotSwapKey->asyncRun( _key, _obj );
     }
 }
 
 //-----------------------------------------------------------------------------
 
-void IService::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
-{
-    SLM_FATAL("TODO : This method must be implemented");
-}
-
-//-----------------------------------------------------------------------------
-
 IService::GlobalStatus IService::getStatus() const throw()
 {
-    return m_globalState ;
+    return m_globalState;
 }
 
 //-----------------------------------------------------------------------------
 
 bool IService::isStarted() const throw()
 {
-    return (m_globalState == STARTED) ;
+    return (m_globalState == STARTED);
 }
 
 //-----------------------------------------------------------------------------
 
 bool IService::isStopped() const throw()
 {
-    return (m_globalState == STOPPED) ;
+    return (m_globalState == STOPPED);
 }
 
 //-----------------------------------------------------------------------------
 
 IService::ConfigurationStatus IService::getConfigurationStatus() const throw()
 {
-    return m_configurationState ;
+    return m_configurationState;
 }
 
 //-----------------------------------------------------------------------------
 
 IService::UpdatingStatus IService::getUpdatingStatus() const throw()
 {
-    return m_updatingState ;
+    return m_updatingState;
 }
 
 //-----------------------------------------------------------------------------
@@ -354,30 +463,201 @@ void IService::setWorker( ::fwThread::Worker::sptr worker )
 
 //-----------------------------------------------------------------------------
 
-IService::KeyConnectionsType IService::getObjSrvConnections() const
+IService::KeyConnectionsMap IService::getAutoConnections() const
 {
-    KeyConnectionsType connections;
-    connections.push_back( std::make_pair( ::fwData::Object::s_OBJECT_MODIFIED_SIG, s_RECEIVE_SLOT ) );
+    KeyConnectionsMap connections;
     return connections;
 }
 
 //-----------------------------------------------------------------------------
 
-#ifdef COM_LOG
-void IService::setID( ::fwTools::fwID::IDType newID )
+void IService::addProxyConnection(const helper::ProxyConnections& proxy)
+{
+    m_proxies[proxy.m_channel] = proxy;
+}
+
+//-----------------------------------------------------------------------------
+
+void IService::connectToConfig()
+{
+    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+    for(const auto& proxyCfg : m_proxies)
+    {
+        for(const auto& signalCfg : proxyCfg.second.m_signals)
+        {
+            SLM_ASSERT("Invalid signal source", signalCfg.first == this->getID());
+
+            ::fwCom::SignalBase::sptr sig = this->signal(signalCfg.second);
+            SLM_ASSERT("Signal '" + signalCfg.second + "' not found in source '" + signalCfg.first + "'.", sig);
+            proxy->connect(proxyCfg.second.m_channel, sig);
+        }
+
+        for(const auto& slotCfg : proxyCfg.second.m_slots)
+        {
+            SLM_ASSERT("Invalid slot destination", slotCfg.first == this->getID());
+
+            ::fwCom::SlotBase::sptr slot = this->slot(slotCfg.second);
+            SLM_ASSERT("Slot '" + slotCfg.second + "' not found in source '" + slotCfg.first + "'.", slot);
+            proxy->connect(proxyCfg.second.m_channel, slot);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void IService::autoConnect()
 {
-    if( ! this->hasID() ||
-        this->getID( ::fwTools::fwID::MUST_EXIST ) != newID )
+    ::fwServices::IService::KeyConnectionsMap connectionMap = this->getAutoConnections();
+
+    // For compatibility with V1, we allow services to connect explicitly with the default object
+    // For these services we will ignore all auto connections with any other data
+    // This is intended notably for managers-like services
+    const bool hasDefaultObjectConnectionV1 =
+        (connectionMap.find(::fwServices::IService::s_DEFAULT_OBJECT) != connectionMap.end());
+
+    for(const auto& objectCfg : m_serviceConfig.m_objects)
     {
-        this->::fwTools::fwID::setID( newID );
+        if ((m_serviceConfig.m_globalAutoConnect || objectCfg.m_autoConnect) && !hasDefaultObjectConnectionV1)
+        {
+            ::fwServices::IService::KeyConnectionsType connections;
+            if(!connectionMap.empty())
+            {
+                auto it = connectionMap.find(objectCfg.m_key);
+                if( it != connectionMap.end())
+                {
+                    connections = it->second;
+                }
+                else
+                {
+                    // Special case if we have a key from a group we check with the name of the group
+                    boost::smatch match;
+                    static const ::boost::regex reg("(.*)#[0-9]+");
+                    if( ::boost::regex_match(objectCfg.m_key, match, reg ) && match.size() == 2)
+                    {
+                        const std::string group = match[1].str();
+                        auto it                 = connectionMap.find(group);
+                        if( it != connectionMap.end())
+                        {
+                            connections = it->second;
+                        }
+                    }
+                }
+            }
+            else
+            {
+                // V1 compatibility, we didn't implemented the new function, so we stick to the old behavior
+                // This also allows to get the default connection with the s_UPDATE_SLOT. When we remove this
+                // function, we will have to implement this behavior with getAutoConnections()
+                connections = this->getObjSrvConnections();
+            }
+
+            ::fwData::Object::csptr obj;
+
+            switch(objectCfg.m_access)
+            {
+                case AccessType::INPUT:
+                {
+                    auto itObj = m_inputsMap.find(objectCfg.m_key);
+                    if(itObj != m_inputsMap.end())
+                    {
+                        obj = itObj->second.lock();
+                    }
+                    break;
+                }
+                case AccessType::INOUT:
+                {
+                    auto itObj = m_inOutsMap.find(objectCfg.m_key);
+                    if(itObj != m_inOutsMap.end())
+                    {
+                        obj = itObj->second.lock();
+                    }
+                    break;
+                }
+                case AccessType::OUTPUT:
+                {
+                    SLM_WARN("Can't autoConnect to an output for now");
+                    auto itObj = m_outputsMap.find(objectCfg.m_key);
+                    if(itObj != m_outputsMap.end())
+                    {
+                        obj = itObj->second.lock();
+                    }
+                    break;
+                }
+            }
+
+            SLM_ASSERT("Object '" + objectCfg.m_uid +
+                       "' has not been found when autoConnecting service '" + m_serviceConfig.m_uid + "'.",
+                       (!objectCfg.m_optional && obj) || objectCfg.m_optional);
+
+            if(obj)
+            {
+                m_autoConnections.connect( obj, this->getSptr(), connections );
+            }
+        }
     }
 
-    std::string lightID = this->getLightID( ::fwTools::fwID::MUST_EXIST );
+    // Autoconnect with the default object - to be cleaned when V1 compatibility is over
+    auto defaultObj = this->getInOut< ::fwData::Object >(s_DEFAULT_OBJECT);
 
-    ::fwCom::HasSlots::m_slots.setID( lightID + "::" );
-    ::fwCom::HasSignals::m_signals.setID( lightID + "::" );
+    if(m_serviceConfig.m_globalAutoConnect && defaultObj)
+    {
+        ::fwServices::IService::KeyConnectionsType connections;
+        auto it = connectionMap.find(::fwServices::IService::s_DEFAULT_OBJECT);
+        if( it != connectionMap.end())
+        {
+            connections = it->second;
+        }
+        else if(m_serviceConfig.m_objects.size() == 0)
+        {
+            // Only use the old callback automatically in case we put a composite as the only one data
+            connections = this->getObjSrvConnections();
+        }
+
+        m_autoConnections.connect( defaultObj, this->getSptr(), connections );
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void IService::disconnectFromConfig()
+{
+    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+    for(const auto& proxyCfg : m_proxies)
+    {
+        for(const auto& signalCfg : proxyCfg.second.m_signals)
+        {
+            SLM_ASSERT("Invalid signal source", signalCfg.first == this->getID());
+
+            ::fwCom::SignalBase::sptr sig = this->signal(signalCfg.second);
+            proxy->disconnect(proxyCfg.second.m_channel, sig);
+        }
+        for(const auto& slotCfg : proxyCfg.second.m_slots)
+        {
+            SLM_ASSERT("Invalid slot destination", slotCfg.first == this->getID());
+
+            ::fwCom::SlotBase::sptr slot = this->slot(slotCfg.second);
+            proxy->disconnect(proxyCfg.second.m_channel, slot);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void IService::autoDisconnect()
+{
+    m_autoConnections.disconnect();
+}
+
+//-----------------------------------------------------------------------------
+
+IService::KeyConnectionsType IService::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Object::s_MODIFIED_SIG, s_UPDATE_SLOT ) );
+    return connections;
 }
-#endif
 
 //-----------------------------------------------------------------------------
 
@@ -386,12 +666,26 @@ void IService::setID( ::fwTools::fwID::IDType newID )
  * @see IService::operator<<(std::ostream & _ostream, IService& _service)
  * @note Invoke IService::info( std::ostream )
  */
-std::ostream & operator<<(std::ostream & _ostream, IService& _service)
+std::ostream& operator<<(std::ostream& _ostream, IService& _service)
 {
-    _service.info( _ostream ) ;
-    return _ostream ;
+    _service.info( _ostream );
+    return _ostream;
 }
 
+//-----------------------------------------------------------------------------
+
+bool IService::isVersion2()
+{
+    return s_version == 2;
+}
+
+//-----------------------------------------------------------------------------
 
+void IService::setVersion(int version)
+{
+    s_version = version;
 }
 
+//-----------------------------------------------------------------------------
+
+}
diff --git a/SrcLib/core/fwServices/src/fwServices/IXMLParser.cpp b/SrcLib/core/fwServices/src/fwServices/IXMLParser.cpp
index ee85b32..819228f 100644
--- a/SrcLib/core/fwServices/src/fwServices/IXMLParser.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/IXMLParser.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,27 +12,30 @@ namespace fwServices
 {
 
 IXMLParser::IXMLParser( )
-{}
+{
+}
 
 IXMLParser::~IXMLParser()
-{}
+{
+}
 
 void IXMLParser::starting() throw(::fwTools::Failed)
-{}
+{
+}
 
 void IXMLParser::stopping() throw(::fwTools::Failed)
-{}
+{
+}
 
 void IXMLParser::configuring() throw(::fwTools::Failed)
-{}
-
-void IXMLParser::receiving( fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{}
+{
+}
 
 void IXMLParser::updating() throw(::fwTools::Failed)
 {
     ::fwRuntime::ConfigurationElement::Iterator configEltIter;
-    for(configEltIter = this->m_configuration->begin() ; !(configEltIter == this->m_configuration->end()) ; ++configEltIter)
+    for(configEltIter = this->m_configuration->begin(); !(configEltIter == this->m_configuration->end());
+        ++configEltIter)
     {
         SLM_ASSERT("ACH => still used ?", (*configEltIter)->getName() != "object" );
     }
@@ -49,27 +52,32 @@ void IXMLParser::setObjectConfig( ::fwRuntime::ConfigurationElement::csptr _cfgE
 //-----------------------------------------------------------------------------
 
 void IXMLParser::createConfig( ::fwTools::Object::sptr _obj )
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IXMLParser::startConfig()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IXMLParser::updateConfig()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IXMLParser::stopConfig()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 void IXMLParser::destroyConfig()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwServices/src/fwServices/ObjectMsg.cpp b/SrcLib/core/fwServices/src/fwServices/ObjectMsg.cpp
deleted file mode 100644
index 98c0a2d..0000000
--- a/SrcLib/core/fwServices/src/fwServices/ObjectMsg.cpp
+++ /dev/null
@@ -1,254 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <iostream>
-
-#include <boost/regex.hpp>
-
-#include "fwServices/ObjectMsg.hpp"
-#include "fwServices/IService.hpp"
-#include "fwServices/registry/message/macros.hpp"
-
-fwServicesMessageRegisterMacro( ::fwServices::ObjectMsg );
-
-namespace fwServices
-{
-
-std::string ObjectMsg::NEW_OBJECT     = "ObjectMsg::NEW_OBJECT";
-std::string ObjectMsg::UPDATED_OBJECT = "ObjectMsg::UPDATED_OBJECT";
-std::string ObjectMsg::DELETE_OBJECT  = "ObjectMsg::DELETE_OBJECT";
-
-std::string ObjectMsg::ADDED_FIELDS   = "ADDED_FIELDS";
-std::string ObjectMsg::REMOVED_FIELDS = "REMOVED_FIELDS";
-std::string ObjectMsg::CHANGED_FIELDS = "CHANGED_FIELDS";
-
-//-----------------------------------------------------------------------------
-
-ObjectMsg::ObjectMsg(::fwServices::ObjectMsg::Key key) : m_hasCallback (false)
-{}
-
-//-----------------------------------------------------------------------------
-
-ObjectMsg::ObjectMsg() : m_hasCallback (false)
-{}
-
-//-----------------------------------------------------------------------------
-
-ObjectMsg::~ObjectMsg()
-{
-    if ( m_hasCallback )
-    {
-        m_callback();
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::addEvent( std::string _eventId , ::fwData::Object::csptr _pDataInfo )
-{
-    m_eventId2DataInfo[ _eventId ] = _pDataInfo;
-}
-
-//-----------------------------------------------------------------------------
-
-bool ObjectMsg::hasEvent( std::string _eventId ) const
-{
-    return m_eventId2DataInfo.find( _eventId ) != m_eventId2DataInfo.end() ;
-}
-
-//-----------------------------------------------------------------------------
-
-std::vector< std::string > ObjectMsg::getEventIds() const
-{
-    std::vector< std::string > result ;
-    std::map< std::string , ::fwData::Object::csptr >::const_iterator iter ;
-    for( iter = m_eventId2DataInfo.begin() ; iter != m_eventId2DataInfo.end() ; ++iter )
-    {
-        result.push_back( iter->first ) ;
-    }
-    return result ;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Object::csptr ObjectMsg::getDataInfo( std::string _eventId ) const
-{
-    return m_eventId2DataInfo.find( _eventId )->second;
-}
-
-//-----------------------------------------------------------------------------
-
-std::string ObjectMsg::convertToLightString( std::string _initialString )
-{
-    std::string lightString = _initialString;
-
-    ::boost::regex toolsRegex ("::fwTools::(.*)");
-    ::boost::regex dataRegex ("::fwData::(.*)");
-    const std::string machine_format("\\1");
-
-    if ( ::boost::regex_match( _initialString, toolsRegex ) )
-    {
-        lightString = ::boost::regex_replace( _initialString, toolsRegex, machine_format, boost::match_default | boost::format_sed );
-    }
-    else if ( ::boost::regex_match( _initialString, dataRegex ) )
-    {
-        lightString = ::boost::regex_replace( _initialString, dataRegex, machine_format, boost::match_default | boost::format_sed );
-    }
-
-    return lightString;
-}
-
-//-----------------------------------------------------------------------------
-
-std::string ObjectMsg::getGeneralInfo() const
-{
-    ::fwServices::IService::sptr source = m_source.lock();
-    std::string msgUUID    = convertToLightString( const_cast< ObjectMsg * >(this)->getID() );
-
-    std::string sourceUUID = convertToLightString( source? source->getID():"[source died]" );
-    std::string destUUID   = convertToLightString( m_subject.expired()?"[subject died]":m_subject.lock()->getID());
-
-    std::stringstream eventstream;
-    for(    std::map< std::string, ::fwData::Object::csptr >::const_iterator itEvent2Data = m_eventId2DataInfo.begin();
-            itEvent2Data != m_eventId2DataInfo.end();
-            ++itEvent2Data )
-    {
-        eventstream << "| " << itEvent2Data->first << " |";
-    }
-
-
-    std::stringstream sstream;
-    sstream << msgUUID << " | " << sourceUUID << " ===> " << destUUID << eventstream.str();
-
-    return sstream.str();
-}
-
-//-----------------------------------------------------------------------------
-
-std::ostream & operator<<(std::ostream & _ostream, const ObjectMsg& _message)
-{
-    _message.info( _ostream ) ;
-    return _ostream ;
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::info(std::ostream &_sstream ) const
-{
-    _sstream << getGeneralInfo();
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::setSource(::fwServices::IService::wptr _source)
-{
-    m_source = _source;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwServices::IService::wptr ObjectMsg::getSource() const
-{
-    return m_source;
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::setSubject( ::fwData::Object::wptr _subject)
-{
-    m_subject = _subject;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwData::Object::wptr ObjectMsg::getSubject() const
-{
-    return m_subject;
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::setMessageCallback( MessageCallbackType callback )
-{
-    m_callback = callback;
-    m_hasCallback = true;
-}
-
-//-------------------------------------------------------------------------
-
-void ObjectMsg::appendAddedField( const FieldNameType &fieldName, ::fwData::Object::sptr object )
-{
-    if( ! this->hasEvent( ADDED_FIELDS ) )
-    {
-        this->addEvent( ADDED_FIELDS );
-    }
-
-    SLM_ASSERT("This field is already registered", m_addedFields.find(fieldName) == m_addedFields.end() );
-
-    m_addedFields[ fieldName ] = object;
-}
-
-//-----------------------------------------------------------------------------
-
-const ObjectMsg::ModifiedFieldsContainerType & ObjectMsg::getAddedFields() const
-{
-    return m_addedFields;
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::appendRemovedField( const FieldNameType &fieldName, ::fwData::Object::sptr object )
-{
-    if( ! this->hasEvent( REMOVED_FIELDS ) )
-    {
-        this->addEvent( REMOVED_FIELDS );
-    }
-
-    SLM_ASSERT("This field is already registered", m_removedFields.find(fieldName) == m_removedFields.end() );
-
-    m_removedFields[ fieldName ] = object;
-}
-
-//-----------------------------------------------------------------------------
-
-const ObjectMsg::ModifiedFieldsContainerType& ObjectMsg::getRemovedFields() const
-{
-    return m_removedFields;
-}
-
-//-----------------------------------------------------------------------------
-
-void ObjectMsg::appendChangedField( const FieldNameType &fieldName, ::fwData::Object::sptr oldObject, ::fwData::Object::sptr newObject )
-{
-    if( ! this->hasEvent( CHANGED_FIELDS ) )
-    {
-        this->addEvent( CHANGED_FIELDS );
-    }
-
-    SLM_ASSERT("This field is already registered", m_oldChangedFields.find(fieldName) == m_oldChangedFields.end() );
-
-    m_oldChangedFields[ fieldName ] = oldObject;
-    m_newChangedFields[ fieldName ] = newObject;
-}
-
-//-----------------------------------------------------------------------------
-
-const ObjectMsg::ModifiedFieldsContainerType& ObjectMsg::getOldChangedFields() const
-{
-    return m_oldChangedFields;
-}
-
-//-----------------------------------------------------------------------------
-
-const ObjectMsg::ModifiedFieldsContainerType& ObjectMsg::getNewChangedFields() const
-{
-    return m_newChangedFields;
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace fwServices
-
diff --git a/SrcLib/core/fwServices/src/fwServices/SConfigController.cpp b/SrcLib/core/fwServices/src/fwServices/SConfigController.cpp
index e24149c..fd52515 100644
--- a/SrcLib/core/fwServices/src/fwServices/SConfigController.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/SConfigController.cpp
@@ -1,13 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwTools/fwID.hpp>
 
+#include <fwRuntime/Convert.hpp>
+
 #include "fwServices/SConfigController.hpp"
 
 namespace fwServices
@@ -27,7 +29,8 @@ SConfigController::SConfigController() throw()
 //------------------------------------------------------------------------------
 
 SConfigController::~SConfigController() throw()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -45,20 +48,86 @@ void SConfigController::stopping() throw(::fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void SConfigController::configuring() throw(fwTools::Failed)
+void SConfigController::swapping() throw(::fwTools::Failed)
 {
-    m_configLauncher->parseConfig(this->getConfigTree());
+    m_configLauncher->stopConfig();
+    m_configLauncher->startConfig(this->getSptr());
 }
 
 //------------------------------------------------------------------------------
 
-void SConfigController::updating() throw(::fwTools::Failed)
-{}
+void SConfigController::configuring() throw(fwTools::Failed)
+{
+    if(this->isVersion2())
+    {
+        typedef ::fwRuntime::ConfigurationElement::sptr ConfigType;
+        typedef ::fwRuntime::EConfigurationElement::sptr EditableConfigType;
+
+        ConfigType cfg = this->getConfiguration();
+
+        ConfigType appCfg = cfg->findConfigurationElement("appConfig");
+        SLM_ASSERT("Missing 'appConfig' tag.", appCfg);
+        std::string appCfgId = appCfg->getAttributeValue("id");
+
+        EditableConfigType srvCfg    = ::fwRuntime::EConfigurationElement::New( "service" );
+        EditableConfigType newCfg    = srvCfg->addConfigurationElement("config");
+        EditableConfigType newAppCfg = newCfg->addConfigurationElement("appConfig");
+        newAppCfg->setAttributeValue("id", appCfgId);
+
+        EditableConfigType newParamsCfg = newAppCfg->addConfigurationElement("parameters");
+
+        const std::vector< ConfigType > inoutsCfg = cfg->find("inout");
+        for (const auto& inoutCfg : inoutsCfg)
+        {
+            std::string key = inoutCfg->getAttributeValue("key");
+            SLM_ASSERT("[" + appCfgId + "] Missing 'key' tag.", !key.empty());
+
+            std::string uid = inoutCfg->getAttributeValue("uid");
+            SLM_ASSERT("[" + appCfgId + "] Missing 'uid' tag.", !uid.empty());
+
+            EditableConfigType newParamCfg = newParamsCfg->addConfigurationElement("parameter");
+            newParamCfg->setAttributeValue("replace", key);
+
+            auto obj = this->getInOut< ::fwData::Object>(key);
+            newParamCfg->setAttributeValue("uid", obj->getID());
+        }
+
+        const std::vector< ConfigType > paramsCfg = cfg->find("parameter");
+        for (const auto& paramCfg : paramsCfg)
+        {
+            std::string replace = paramCfg->getAttributeValue("replace");
+            SLM_ASSERT("[" + appCfgId + "] Missing 'replace' tag.", !replace.empty());
+
+            EditableConfigType newParamCfg = newParamsCfg->addConfigurationElement("parameter");
+            newParamCfg->setAttributeValue("replace", replace);
+
+            std::string uid = paramCfg->getAttributeValue("uid");
+            if(!uid.empty())
+            {
+                newParamCfg->setAttributeValue("uid", uid);
+            }
+            else
+            {
+                SLM_ASSERT("[" + appCfgId + "] Missing 'uid' or 'by' tag.", paramCfg->hasAttribute("by"));
+                std::string by = paramCfg->getAttributeValue("by");
+                // 'by' can be empty
+                newParamCfg->setAttributeValue("by", by);
+            }
+        }
+
+        m_configLauncher->parseConfig(::fwRuntime::Convert::toPropertyTree(srvCfg));
+    }
+    else
+    {
+        m_configLauncher->parseConfig(this->getConfigTree());
+    }
+}
 
 //------------------------------------------------------------------------------
 
-void SConfigController::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-{}
+void SConfigController::updating() throw(::fwTools::Failed)
+{
+}
 
 //------------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwServices/src/fwServices/factory/message/new.cpp b/SrcLib/core/fwServices/src/fwServices/factory/message/new.cpp
deleted file mode 100644
index 7439e03..0000000
--- a/SrcLib/core/fwServices/src/fwServices/factory/message/new.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwServices/ObjectMsg.hpp"
-
-#include "fwServices/factory/message/new.hpp"
-
-
-namespace fwServices
-{
-
-namespace factory
-{
-
-namespace message
-{
-
-::fwServices::ObjectMsg::sptr New( const ::fwServices::registry::message::KeyType & classname )
-{
-    ::fwServices::ObjectMsg::sptr obj = ::fwServices::registry::message::get()->create(classname);
-    return obj;
-}
-
-} // namespace message
-
-} // namespace factory
-
-} // namespace fwServices
-
-
diff --git a/SrcLib/core/fwServices/src/fwServices/helper/Config.cpp b/SrcLib/core/fwServices/src/fwServices/helper/Config.cpp
new file mode 100644
index 0000000..2e644e5
--- /dev/null
+++ b/SrcLib/core/fwServices/src/fwServices/helper/Config.cpp
@@ -0,0 +1,449 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwServices/helper/Config.hpp"
+#include "fwServices/registry/ServiceConfig.hpp"
+
+#include "fwServices/registry/Proxy.hpp"
+
+#include <fwCom/HasSignals.hpp>
+#include <fwCom/HasSlots.hpp>
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <fwData/Object.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwTools/Object.hpp>
+
+#include <boost/regex.hpp>
+
+#include <string>
+#include <vector>
+
+namespace fwServices
+{
+
+namespace helper
+{
+
+/// container for the data keywords for a service configuration
+const std::array< std::string, 3 > s_DATA_KEYWORDS = {{ "in", "out", "inout" }};
+
+//-----------------------------------------------------------------------------
+
+void Config::createConnections( const ::fwRuntime::ConfigurationElement::csptr& connectionCfg,
+                                ::fwCom::helper::SigSlotConnection& connections,
+                                const CSPTR(::fwTools::Object)& obj)
+{
+    ConnectionInfo info = parseConnections(connectionCfg, obj);
+
+    ::fwTools::Object::sptr sigSource    = ::fwTools::fwID::getObject(info.m_signal.first);
+    ::fwCom::HasSignals::sptr hasSignals = std::dynamic_pointer_cast< ::fwCom::HasSignals >(sigSource);
+
+    SLM_ASSERT("Signal source not found '" + info.m_signal.first + "'", sigSource);
+    SLM_ASSERT("invalid signal source '" + info.m_signal.first + "'", hasSignals);
+
+    for(SlotInfoType slotInfo : info.m_slots)
+    {
+        ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(slotInfo.first);
+        SLM_ASSERT("Failed to retrieve object '" + slotInfo.first + "'", obj);
+        ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+        SLM_ASSERT("invalid slot owner " << slotInfo.first, hasSlots);
+
+        connections.connect(hasSignals, info.m_signal.second, hasSlots, slotInfo.second);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+Config::ConnectionInfo Config::parseConnections( const ::fwRuntime::ConfigurationElement::csptr& connectionCfg,
+                                                 const CSPTR(::fwTools::Object)& obj)
+{
+    ConnectionInfo info;
+
+    ::boost::regex re("(.*)/(.*)");
+    ::boost::smatch match;
+    std::string src, uid, key;
+
+    for(::fwRuntime::ConfigurationElement::csptr elem :   connectionCfg->getElements())
+    {
+        src = elem->getValue();
+        if( ::boost::regex_match(src, match, re) )
+        {
+            OSLM_ASSERT("Wrong value for attribute src: "<<src, match.size() >= 3);
+            uid.assign(match[1].first, match[1].second);
+            key.assign(match[2].first, match[2].second);
+
+            OSLM_ASSERT(src << " configuration is not correct for "<< elem->getName(),
+                        !uid.empty() && !key.empty());
+
+            if (elem->getName() == "signal")
+            {
+                SLM_ASSERT("There must be only one signal by connection",
+                           info.m_signal.first.empty() && info.m_signal.second.empty());
+                info.m_signal = std::make_pair(uid, key);
+            }
+            else if (elem->getName() == "slot")
+            {
+                info.m_slots.push_back( std::make_pair(uid, key) );
+            }
+        }
+        else
+        {
+            SLM_ASSERT("Object uid is not defined, object used to retrieve signal must be present.", obj);
+            uid = obj->getID();
+            key = src;
+            SLM_ASSERT("Element must be a signal or must be written as <fwID/Key>", elem->getName() == "signal");
+            SLM_ASSERT("There must be only one signal by connection",
+                       info.m_signal.first.empty() && info.m_signal.second.empty());
+            info.m_signal = std::make_pair(uid, key);
+        }
+    }
+
+    // This is ok to return like this, thanks to C++11 rvalue there will be no copy of the vectors inside the struct
+    return info;
+}
+
+//-----------------------------------------------------------------------------
+
+ProxyConnections Config::parseConnections2(const ::fwRuntime::ConfigurationElement::csptr& connectionCfg,
+                                           const std::string& errMsgHead,
+                                           std::function<std::string ()> generateChannelNameFn)
+{
+
+    ::boost::regex re("(.*)/(.*)");
+    ::boost::smatch match;
+    std::string src, uid, key;
+
+    std::string channel;
+    if(connectionCfg->hasAttribute("channel"))
+    {
+        channel = connectionCfg->getAttributeValue("channel");
+        SLM_ASSERT(errMsgHead + "Empty 'channel' attribute", !channel.empty());
+    }
+    else
+    {
+        // Generate an UID
+        channel = generateChannelNameFn();
+    }
+
+    ProxyConnections proxyCnt(channel);
+
+    for(::fwRuntime::ConfigurationElement::csptr elem : connectionCfg->getElements())
+    {
+        src = elem->getValue();
+        if( ::boost::regex_match(src, match, re) )
+        {
+            OSLM_ASSERT("errMsgHead + Wrong value for attribute src: "<<src, match.size() >= 3);
+            uid.assign(match[1].first, match[1].second);
+            key.assign(match[2].first, match[2].second);
+
+            OSLM_ASSERT(errMsgHead + src << " configuration is not correct for "<< elem->getName(),
+                        !uid.empty() && !key.empty());
+
+            if (elem->getName() == "signal")
+            {
+                proxyCnt.addSignalConnection(uid, key);
+            }
+            else if (elem->getName() == "slot")
+            {
+                proxyCnt.addSlotConnection(uid, key);
+            }
+        }
+        else
+        {
+            SLM_ASSERT(errMsgHead + "Signal or slot must be written as <signal>fwID/Key</signal> or "
+                       "<slot>fwID/Key</slot>", false);
+        }
+    }
+
+    // This is ok to return like this, thanks to C++11 rvalue there will be no copy of the vectors inside the struct
+    return proxyCnt;
+}
+
+//-----------------------------------------------------------------------------
+
+void Config::createProxy( const std::string& objectKey,
+                          const CSPTR(::fwRuntime::ConfigurationElement)& cfg,
+                          Config::ProxyConnectionsMapType& proxyMap,
+                          const CSPTR(::fwData::Object)& obj)
+{
+    ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+    SLM_ASSERT("Missing 'channel' attribute", cfg->hasAttribute("channel"));
+    const std::string channel = cfg->getExistingAttributeValue("channel");
+    ProxyConnections proxyCnt(channel);
+
+    ::boost::regex re("(.*)/(.*)");
+    ::boost::smatch match;
+    std::string src, uid, key;
+    for(::fwRuntime::ConfigurationElement::csptr elem :   cfg->getElements())
+    {
+        src = elem->getValue();
+        if( ::boost::regex_match(src, match, re) )
+        {
+            SLM_ASSERT("Wrong value for attribute src: " + src, match.size() >= 3);
+            uid.assign(match[1].first, match[1].second);
+            key.assign(match[2].first, match[2].second);
+
+            SLM_ASSERT(src + " configuration is not correct for " + elem->getName(), !uid.empty() && !key.empty());
+
+            ::fwTools::Object::sptr obj = ::fwTools::fwID::getObject(uid);
+
+            if (elem->getName() == "signal")
+            {
+                ::fwCom::HasSignals::sptr hasSignals = std::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
+                SLM_ASSERT("Can't find the holder of signal '" + key + "'", hasSignals);
+                ::fwCom::SignalBase::sptr sig = hasSignals->signal(key);
+                proxy->connect(channel, sig);
+                proxyCnt.addSignalConnection(uid, key);
+            }
+            else if (elem->getName() == "slot")
+            {
+                ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+                SLM_ASSERT("Can't find the holder of slot '" + key + "'", hasSlots);
+                ::fwCom::SlotBase::sptr slot = hasSlots->slot(key);
+                proxy->connect(channel, slot);
+                proxyCnt.addSlotConnection(uid, key);
+            }
+        }
+        else
+        {
+            uid = obj->getID();
+            key = src;
+            SLM_ASSERT("Element must be a signal or must be written as <fwID/Key>", elem->getName() == "signal");
+            ::fwCom::SignalBase::sptr sig = obj->signal(key);
+            proxy->connect(channel, sig);
+            proxyCnt.addSignalConnection(uid, key);
+        }
+    }
+    proxyMap[objectKey].push_back(proxyCnt);
+}
+
+//-----------------------------------------------------------------------------
+
+void Config::disconnectProxies(const std::string& objectKey, Config::ProxyConnectionsMapType& proxyMap)
+{
+    ProxyConnectionsMapType::iterator iter = proxyMap.find(objectKey);
+    if (iter != proxyMap.end())
+    {
+        ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
+
+        ProxyConnectionsVectType vectProxyConnections = iter->second;
+
+        for(ProxyConnectionsVectType::value_type proxyConnections :   vectProxyConnections)
+        {
+            for(ProxyConnections::ProxyEltType signalElt :  proxyConnections.m_signals)
+            {
+                ::fwTools::Object::sptr obj          = ::fwTools::fwID::getObject(signalElt.first);
+                ::fwCom::HasSignals::sptr hasSignals = std::dynamic_pointer_cast< ::fwCom::HasSignals >(obj);
+                ::fwCom::SignalBase::sptr sig        = hasSignals->signal(signalElt.second);
+                proxy->disconnect(proxyConnections.m_channel, sig);
+            }
+            for(ProxyConnections::ProxyEltType slotElt :  proxyConnections.m_slots)
+            {
+                ::fwTools::Object::sptr obj      = ::fwTools::fwID::getObject(slotElt.first);
+                ::fwCom::HasSlots::sptr hasSlots = std::dynamic_pointer_cast< ::fwCom::HasSlots >(obj);
+                ::fwCom::SlotBase::sptr slot     = hasSlots->slot(slotElt.second);
+                proxy->disconnect(proxyConnections.m_channel, slot);
+            }
+        }
+        vectProxyConnections.clear();
+        proxyMap.erase(objectKey);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+::fwServices::IService::Config Config::parseService(const ::fwRuntime::ConfigurationElement::csptr& srvElem,
+                                                    const std::string& errMsgHead)
+{
+    SLM_ASSERT("Configuration element is not a \"service\" node.", srvElem->getName() == "service");
+
+    // Get attributes
+    ::fwServices::IService::Config srvConfig;
+
+    // Uid
+    if (srvElem->hasAttribute("uid"))
+    {
+        srvConfig.m_uid = srvElem->getAttributeValue("uid");
+        SLM_ASSERT(errMsgHead + "'uid' attribute is empty.", !srvConfig.m_uid.empty());
+    }
+
+    std::string errMsgTail = " when parsing service '" + srvConfig.m_uid + "'.";
+
+    // Config
+    std::string config;
+    if (srvElem->hasAttribute("config"))
+    {
+        config = srvElem->getAttributeValue("config");
+        SLM_ASSERT(errMsgHead + "\"config\" attribute is empty" + errMsgTail, !config.empty());
+    }
+
+    // Type
+    SLM_ASSERT(errMsgHead + "'type'' attribute is empty" + errMsgTail, srvElem->hasAttribute("type"));
+    srvConfig.m_type = srvElem->getAttributeValue("type");
+    SLM_ASSERT(errMsgHead + "Attribute \"type\" is required " + errMsgTail,
+               !srvConfig.m_type.empty());
+
+    // AutoConnect
+    srvConfig.m_globalAutoConnect = false;
+    const ::fwRuntime::ConfigurationElement::AttributePair attribAutoConnect =
+        srvElem->getSafeAttributeValue("autoConnect");
+    if(attribAutoConnect.first)
+    {
+        SLM_ASSERT("'autoConnect' attribute must be either 'yes' or 'no'" + errMsgTail,
+                   (!attribAutoConnect.first) || attribAutoConnect.second == "yes" || attribAutoConnect.second == "no");
+        srvConfig.m_globalAutoConnect = (attribAutoConnect.second == "yes");
+    }
+
+    // Worker key
+    srvConfig.m_worker = srvElem->getAttributeValue("worker");
+
+    // Get service configuration
+    ::fwRuntime::ConfigurationElement::csptr cfgElem = srvElem;
+    if (!config.empty())
+    {
+        const auto srvCfgFactory = ::fwServices::registry::ServiceConfig::getDefault();
+        cfgElem = srvCfgFactory->getServiceConfig(config, srvConfig.m_type);
+    }
+    srvConfig.m_config = cfgElem;
+
+    // Check if user did not bind a service to another service
+    for(::fwRuntime::ConfigurationElement::csptr elem :  cfgElem->getElements())
+    {
+        SLM_ASSERT(errMsgHead + "Cannot bind a service to another service" + errMsgTail,
+                   elem->getName() != "service" &&
+                   elem->getName() != "serviceList");
+    }
+
+    // Check first if we can create this service
+    // If there is a missing object in its data list, then it is not possible
+    auto cfgConstElem = ::fwRuntime::ConfigurationElement::constCast(srvElem);
+
+    // Collect all input/output configurations
+    std::vector< ::fwRuntime::ConfigurationElement::sptr > objectCfgs;
+    for(const auto& dataKeyword : s_DATA_KEYWORDS)
+    {
+        auto objCfgs = cfgConstElem->find(dataKeyword);
+        std::move(objCfgs.begin(), objCfgs.end(), std::back_inserter(objectCfgs));
+    }
+
+    // Parse input/output configurations
+    for(const auto& cfg : objectCfgs)
+    {
+        // Access type
+        ::fwServices::IService::ObjectServiceConfig objConfig;
+        if(cfg->getName() == "in")
+        {
+            objConfig.m_access = ::fwServices::IService::AccessType::INPUT;
+        }
+        else if(cfg->getName() == "out")
+        {
+            objConfig.m_access = ::fwServices::IService::AccessType::OUTPUT;
+        }
+        else if(cfg->getName() == "inout")
+        {
+            objConfig.m_access = ::fwServices::IService::AccessType::INOUT;
+        }
+        else
+        {
+            SLM_FATAL("Unreachable code");
+        }
+
+        // AutoConnect
+        auto autoConnect = cfg->getSafeAttributeValue("autoConnect");
+        objConfig.m_autoConnect = false;
+        if(autoConnect.first)
+        {
+            SLM_ASSERT(errMsgHead + "'autoConnect' attribute must be either 'yes' or 'no'" + errMsgTail,
+                       autoConnect.second == "yes" || autoConnect.second == "no" );
+            objConfig.m_autoConnect = (autoConnect.second == "yes");
+        }
+
+        // Optional
+        if(objConfig.m_access != ::fwServices::IService::AccessType::OUTPUT)
+        {
+            const std::string optionalStr = cfg->getAttributeValue("optional");
+
+            objConfig.m_optional = false;
+            if(!optionalStr.empty())
+            {
+                SLM_ASSERT("'optional' attribute must be either 'yes' or 'no'" + errMsgTail,
+                           optionalStr=="" || optionalStr == "yes" || optionalStr == "no");
+                objConfig.m_optional = optionalStr == "yes" ? true : false;
+            }
+        }
+        else
+        {
+            objConfig.m_optional = true;
+        }
+
+        // Do we use groups ?
+        std::string group = cfg->getAttributeValue("group");
+        if(!group.empty())
+        {
+            std::vector< ::fwRuntime::ConfigurationElement::sptr > keyCfgs = cfg->find("key");
+
+            size_t count = 0;
+            for(const auto& groupCfg : keyCfgs)
+            {
+                ::fwServices::IService::ObjectServiceConfig grouObjConfig = objConfig;
+
+                // Identifier
+                grouObjConfig.m_uid = groupCfg->getAttributeValue("uid");
+                SLM_ASSERT(errMsgHead + "\"uid\" attribute is empty" + errMsgTail, !grouObjConfig.m_uid.empty());
+
+                grouObjConfig.m_key = KEY_GROUP_NAME(group, count++);
+
+                // AutoConnect
+                auto autoConnectPeyKey = groupCfg->getSafeAttributeValue("autoConnect");
+                if(autoConnectPeyKey.first)
+                {
+                    SLM_ASSERT(errMsgHead + "'autoConnect' attribute must be either 'yes' or 'no'" + errMsgTail,
+                               autoConnectPeyKey.second == "yes" || autoConnectPeyKey.second == "no" );
+                    grouObjConfig.m_autoConnect = (autoConnectPeyKey.second == "yes");
+                }
+                // Optional
+                if(grouObjConfig.m_access != ::fwServices::IService::AccessType::OUTPUT)
+                {
+                    const std::string optionalStr = groupCfg->getAttributeValue("optional");
+
+                    if(!optionalStr.empty())
+                    {
+                        SLM_ASSERT("'optional' attribute must be either 'yes' or 'no'" + errMsgTail,
+                                   optionalStr=="" || optionalStr == "yes" || optionalStr == "no");
+                        grouObjConfig.m_optional = optionalStr == "yes" ? true : false;
+                    }
+                }
+
+                srvConfig.m_objects.emplace_back(grouObjConfig);
+            }
+            srvConfig.m_groupSize[group] = count;
+        }
+        else
+        {
+            // Identifier
+            objConfig.m_uid = cfg->getAttributeValue("uid");
+            SLM_ASSERT(errMsgHead + "\"uid\" attribute is empty" + errMsgTail, !objConfig.m_uid.empty());
+
+            // Key inside the service
+            objConfig.m_key = cfg->getAttributeValue("key");
+            SLM_ASSERT(errMsgHead + "Missing object attribute 'key'" + errMsgTail, !objConfig.m_key.empty());
+
+            srvConfig.m_objects.emplace_back(objConfig);
+        }
+    }
+
+    return srvConfig;
+}
+
+// ----------------------------------------------------------------------------
+
+} // namespace helper
+} // namespace fwServices
+
diff --git a/SrcLib/core/fwServices/src/fwServices/helper/ConfigLauncher.cpp b/SrcLib/core/fwServices/src/fwServices/helper/ConfigLauncher.cpp
index 595ee59..fd70bbf 100644
--- a/SrcLib/core/fwServices/src/fwServices/helper/ConfigLauncher.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/helper/ConfigLauncher.cpp
@@ -1,10 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/Base.hpp>
-#include <fwServices/registry/AppConfig.hpp>
+#include <fwServices/macros.hpp>
 
 #include <fwTools/fwID.hpp>
 #include <fwData/Composite.hpp>
@@ -21,17 +21,19 @@ namespace helper
 {
 
 //------------------------------------------------------------------------------
-const std::string ConfigLauncher::s_SELF_KEY = "self";
+const std::string ConfigLauncher::s_SELF_KEY        = "self";
 const std::string ConfigLauncher::s_GENERIC_UID_KEY = "GENERIC_UID";
 //------------------------------------------------------------------------------
 
 ConfigLauncher::ConfigLauncher() : m_configIsRunning(false)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 ConfigLauncher::~ConfigLauncher()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -39,14 +41,14 @@ void ConfigLauncher::parseConfig(const ::fwServices::IService::ConfigType& confi
 {
     if(config.get_child("service").count("config") > 0)
     {
-        SLM_ASSERT("Sorry you must have one (and only one) <config/> element.",
-                config.get_child("service").count("config") == 1 );
+        SLM_ASSERT("There must be one (and only one) <config/> element.",
+                   config.get_child("service").count("config") == 1 );
         const ::fwServices::IService::ConfigType srvconfig = config.get_child("service");
-        const ::fwServices::IService::ConfigType &config = srvconfig.get_child("config");
+        const ::fwServices::IService::ConfigType& config   = srvconfig.get_child("config");
 
         if(config.count("appConfig") == 1 )
         {
-            const ::fwServices::IService::ConfigType &appConfig = config.get_child("appConfig");
+            const ::fwServices::IService::ConfigType& appConfig = config.get_child("appConfig");
             m_appConfig = ::fwActivities::registry::ActivityAppConfig(appConfig);
         }
         OSLM_ASSERT("At most 1 <appConfig> tag is allowed", config.count("appConfig") < 2);
@@ -55,17 +57,18 @@ void ConfigLauncher::parseConfig(const ::fwServices::IService::ConfigType& confi
 
 //------------------------------------------------------------------------------
 
-void ConfigLauncher::startConfig(::fwServices::IService::sptr srv)
+void ConfigLauncher::startConfig(::fwServices::IService::sptr srv,
+                                 const FieldAdaptorType& optReplaceMap )
 {
     ::fwData::Object::sptr currentObj = srv->getObject();
     typedef ::fwActivities::registry::ActivityAppConfig AppConfig;
-    ::fwServices::registry::AppConfig::FieldAdaptorType replaceMap;
+    FieldAdaptorType replaceMap(optReplaceMap);
 
     // Generate generic UID
     const std::string genericUidAdaptor = ::fwServices::registry::AppConfig::getUniqueIdentifier( srv->getID() );
     replaceMap[ConfigLauncher::s_GENERIC_UID_KEY] = genericUidAdaptor;
 
-    BOOST_FOREACH(const AppConfig::ActivityAppConfigParamsType::value_type& param, m_appConfig.parameters)
+    for(const AppConfig::ActivityAppConfigParamsType::value_type& param :  m_appConfig.parameters)
     {
         if(!param.isSeshat())
         {
@@ -84,7 +87,7 @@ void ConfigLauncher::startConfig(::fwServices::IService::sptr srv)
                 parameterToReplace.replace(0, 1, "@");
             }
 
-            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(currentObj, param.by);
+            ::fwData::Object::sptr obj = ::fwDataCamp::getObject(currentObj, parameterToReplace);
             OSLM_ASSERT("Invalid seshat path : '"<<param.by<<"'", obj);
             ::fwData::String::sptr stringParameter = ::fwData::String::dynamicCast(obj);
 
@@ -99,10 +102,8 @@ void ConfigLauncher::startConfig(::fwServices::IService::sptr srv)
     }
 
     // Init manager
-    ::fwRuntime::ConfigurationElement::csptr config =
-            ::fwServices::registry::AppConfig::getDefault()->getAdaptedTemplateConfig( m_appConfig.id, replaceMap );
-    m_appConfigManager = ::fwServices::AppConfigManager::New();
-    m_appConfigManager->setConfig( config );
+    m_appConfigManager = ::fwServices::IAppConfigManager::New();
+    m_appConfigManager->setConfig( m_appConfig.id, replaceMap );
 
     // Launch config
     m_appConfigManager->launch();
@@ -134,16 +135,14 @@ void ConfigLauncher::stopConfig()
 void ConfigLauncher::connectToConfigRoot(::fwServices::IService::sptr srv)
 {
     ::fwData::Object::sptr root = m_appConfigManager->getConfigRoot();
-    m_connections = ::fwServices::helper::SigSlotConnection::New();
-    m_connections->connect( root, srv->getSptr(), srv->getObjSrvConnections() );
+    m_connections.connect( root, srv, srv->getObjSrvConnections() );
 }
 
 //------------------------------------------------------------------------------
 
 void ConfigLauncher::disconnectToConfigRoot()
 {
-    m_connections->disconnect();
-    m_connections.reset();
+    m_connections.disconnect();
 }
 
 //------------------------------------------------------------------------------
@@ -152,7 +151,7 @@ bool ConfigLauncher::isExecutable(::fwData::Object::sptr currentObj)
 {
     typedef ::fwActivities::registry::ActivityAppConfig AppConfig;
     bool executable = true;
-    BOOST_FOREACH(const AppConfig::ActivityAppConfigParamsType::value_type& param, m_appConfig.parameters)
+    for(const AppConfig::ActivityAppConfigParamsType::value_type& param :  m_appConfig.parameters)
     {
         if(param.isSeshat())
         {
@@ -166,6 +165,5 @@ bool ConfigLauncher::isExecutable(::fwData::Object::sptr currentObj)
 
 //------------------------------------------------------------------------------
 
-} // helper
+}     // helper
 } // fwServices
-
diff --git a/SrcLib/core/fwServices/src/fwServices/helper/SigSlotConnection.cpp b/SrcLib/core/fwServices/src/fwServices/helper/SigSlotConnection.cpp
deleted file mode 100644
index 93f99ab..0000000
--- a/SrcLib/core/fwServices/src/fwServices/helper/SigSlotConnection.cpp
+++ /dev/null
@@ -1,56 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-
-#include <fwCom/SignalBase.hpp>
-
-#include "fwServices/helper/SigSlotConnection.hpp"
-
-namespace fwServices
-{
-namespace helper
-{
-
-SigSlotConnection::SigSlotConnection()
-{}
-
-SigSlotConnection::~SigSlotConnection()
-{
-    this->disconnect();
-}
-
-void SigSlotConnection::connect(  ::fwCom::HasSignals::sptr hasSignals, ::fwCom::Signals::SignalKeyType signalKey,
-                                  ::fwCom::HasSlots::sptr hasSlots, ::fwCom::Slots::SlotKeyType slotKey )
-{
-    ::fwCom::Connection connection;
-    connection = hasSignals->signal( signalKey )->connect( hasSlots->slot( slotKey ) );
-    m_connections.push_back(connection);
-}
-
-void SigSlotConnection::connect(::fwCom::HasSignals::sptr hasSignals,
-                                ::fwCom::HasSlots::sptr hasSlots,
-                                const KeyConnectionsType & keyConnections )
-{
-    ::fwCom::Connection connection;
-    BOOST_FOREACH( KeyConnectionType keys, keyConnections )
-    {
-        connection = hasSignals->signal( keys.first )->connect( hasSlots->slot( keys.second ) );
-        m_connections.push_back(connection);
-    }
-}
-
-void SigSlotConnection::disconnect()
-{
-    BOOST_REVERSE_FOREACH( ::fwCom::Connection & connection, m_connections )
-    {
-        connection.disconnect();
-    }
-    m_connections.clear();
-}
-
-} // end namespace helper
-} // end namespace fwServices
diff --git a/SrcLib/core/fwServices/src/fwServices/op/Add.cpp b/SrcLib/core/fwServices/src/fwServices/op/Add.cpp
index a5ef0f4..8795562 100644
--- a/SrcLib/core/fwServices/src/fwServices/op/Add.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/op/Add.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,7 @@
 
 #include <fwTools/fwID.hpp>
 
-#include "fwServices/Base.hpp"
+#include "fwServices/macros.hpp"
 #include "fwServices/IService.hpp"
 #include "fwServices/op/Add.hpp"
 #include "fwServices/registry/ServiceFactory.hpp"
@@ -26,15 +26,13 @@ namespace fwServices
 {
     ::fwServices::IService::sptr srv;
     srv = ::fwServices::registry::ServiceFactory::getDefault()->create( serviceType, _implementationId );
-    ::fwServices::OSR::registerService( obj , srv );
+    ::fwServices::OSR::registerService( obj, srv );
     if(!uid.empty())
     {
-#ifndef COM_LOG
         OSLM_ASSERT( "Try to set ID: "<<uid<<" but already has an ID: "<<srv->getID(), !srv->hasID() );
-#endif
-        srv->setID( uid ) ;
+        srv->setID( uid );
     }
-    return srv ;
+    return srv;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/src/fwServices/op/Get.cpp b/SrcLib/core/fwServices/src/fwServices/op/Get.cpp
index f593709..be85648 100644
--- a/SrcLib/core/fwServices/src/fwServices/op/Get.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/op/Get.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,16 +17,17 @@ namespace fwServices
 ::fwServices::IService::sptr get( ::fwData::Object::sptr obj, std::string serviceType ) throw(fwTools::Failed )
 {
     ::fwServices::IService::sptr service;
-    std::vector< ::fwServices::IService::sptr >  services = ::fwServices::OSR::getServices( obj , serviceType );
-    OSLM_ASSERT("Service "<<serviceType<<" not unique, registered "<<services.size()<<" time", services.size() == 1);
-    return services.at(0) ;
+    auto services = ::fwServices::OSR::getServices( obj, serviceType );
+    OSLM_ASSERT("Service "<<serviceType<<" is not unique, registered "<<services.size()<<" times",
+                services.size() == 1);
+    return *services.begin();
 }
 
 //------------------------------------------------------------------------------
 
 ::fwServices::IService::sptr get( std::string uid ) throw(fwTools::Failed )
 {
-    OSLM_ASSERT("service not exist with uid "<<uid, ::fwTools::fwID::exist(uid )) ;
+    OSLM_ASSERT("service does not exist with uid "<<uid, ::fwTools::fwID::exist(uid ));
     return ::fwServices::IService::dynamicCast( ::fwTools::fwID::getObject( uid ) );
 }
 
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/ActiveWorkers.cpp b/SrcLib/core/fwServices/src/fwServices/registry/ActiveWorkers.cpp
index f5453a5..9917719 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/ActiveWorkers.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/ActiveWorkers.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include "fwServices/registry/ActiveWorkers.hpp"
 
 namespace fwServices
@@ -24,12 +22,14 @@ const std::string ActiveWorkers::s_DEFAULT_WORKER = "DEFAULT_WORKER";
 //-----------------------------------------------------------------------------
 
 ActiveWorkers::ActiveWorkers()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 ActiveWorkers::~ActiveWorkers()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/AppConfig.cpp b/SrcLib/core/fwServices/src/fwServices/registry/AppConfig.cpp
index 2ee19ef..6c975aa 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/AppConfig.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/AppConfig.cpp
@@ -1,21 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/regex.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/Runtime.hpp>
-#include <fwRuntime/helper.hpp>
+#include "fwServices/registry/AppConfig.hpp"
 
 #include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
 #include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
 
-#include "fwServices/registry/AppConfig.hpp"
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
+
+#include <boost/regex.hpp>
 
 namespace fwServices
 {
@@ -37,16 +36,14 @@ AppConfig::sptr AppConfig::getDefault()
 
 AppConfig::~AppConfig()
 {
-    SLM_TRACE_FUNC();
 }
 
 //-----------------------------------------------------------------------------
 
 void AppConfig::parseBundleInformation()
 {
-    std::vector< ::boost::shared_ptr< ::fwRuntime::Extension > >  extensions =
-            ::fwRuntime::getAllExtensionsForPoint("::fwServices::registry::AppConfig");
-    BOOST_FOREACH( ::boost::shared_ptr< ::fwRuntime::Extension > ext, extensions )
+    auto extensions = ::fwRuntime::getAllExtensionsForPoint("::fwServices::registry::AppConfig");
+    for( const auto& ext :  extensions )
     {
         // Get id
         std::string configId = ext->findConfigurationElement("id")->getValue();
@@ -64,19 +61,12 @@ void AppConfig::parseBundleInformation()
             desc = ext->findConfigurationElement("desc")->getValue();
         }
 
-        // get type
-        OSLM_ASSERT("Sorry, xml element \"type\" must be equal to \"parameters\" (here = "
-                    << ext->findConfigurationElement("type")->getValue() << ") ",
-                    ext->findConfigurationElement("type")->getValue()=="parameters" );
-        AppInfo::ConfigType type = AppInfo::PARAMETERS;
-
-        // Get parameters
-        AppInfo::ParamatersType parameters;
+        AppInfo::ParametersType parameters;
         if ( ext->hasConfigurationElement("parameters") )
         {
             ::fwRuntime::ConfigurationElement::csptr parametersConfig = ext->findConfigurationElement("parameters");
-            ::fwRuntime::ConfigurationElement::Container elements = parametersConfig->getElements();
-            BOOST_FOREACH( ::fwRuntime::ConfigurationElement::sptr paramConfig, elements )
+            ::fwRuntime::ConfigurationElement::Container elements     = parametersConfig->getElements();
+            for( ::fwRuntime::ConfigurationElement::sptr paramConfig :  elements )
             {
                 std::string name = paramConfig->getExistingAttributeValue("name");
 
@@ -95,37 +85,43 @@ void AppConfig::parseBundleInformation()
         // Get config
         ::fwRuntime::ConfigurationElement::csptr config = *(ext->findConfigurationElement("config")->begin());
 
+        // Get bundle
+        std::shared_ptr< ::fwRuntime::Bundle> bundle = ext->getBundle();
+        std::string bundleId                         = bundle->getIdentifier();
+        std::string bundleVersion                    = bundle->getVersion().string();
+
         // Add app info
-        this->addAppInfo( configId, type, group, desc, parameters, config );
+        this->addAppInfo( configId, group, desc, parameters, config, bundleId, bundleVersion );
     }
 }
 
 //-----------------------------------------------------------------------------
 
 void AppConfig::addAppInfo
-(   const std::string & configId,
-    AppInfo::ConfigType type,
+    (   const std::string & configId,
     const std::string & group,
     const std::string & desc,
-    const AppInfo::ParamatersType & parameters,
-    ::fwRuntime::ConfigurationElement::csptr config)
+    const AppInfo::ParametersType & parameters,
+    ::fwRuntime::ConfigurationElement::csptr config,
+    const std::string bundleId,
+    const std::string bundleVersion)
 {
     ::fwCore::mt::WriteLock lock(m_registryMutex);
 
     OSLM_DEBUG( "New app config registering : "
-            << " configId =" << configId
-            << " type=" << type
-    );
+                << " configId =" << configId
+                );
 
-    SLM_ASSERT("Sorry, app config id = "<< configId <<" already exist.", m_reg.find( configId ) == m_reg.end() );
+    SLM_ASSERT("The app config with the id = "<< configId <<" already exist.", m_reg.find( configId ) == m_reg.end() );
 
     AppInfo::sptr info = AppInfo::New();
-    info->type = type;
-    info->group = group;
-    info->desc = desc;
-    info->config =  config;
-    info->parameters = parameters;
-    m_reg[configId] = info;
+    info->group         = group;
+    info->desc          = desc;
+    info->config        = config;
+    info->parameters    = parameters;
+    info->bundleId      = bundleId;
+    info->bundleVersion = bundleVersion;
+    m_reg[configId]     = info;
 }
 
 //-----------------------------------------------------------------------------
@@ -145,21 +141,21 @@ void AppConfig::clearRegistry()
 //-----------------------------------------------------------------------------
 
 ::fwRuntime::ConfigurationElement::csptr AppConfig::getAdaptedTemplateConfig(
-        const std::string & configId,
-        const FieldAdaptorType fieldAdaptors ) const
+    const std::string & configId,
+    const FieldAdaptorType fieldAdaptors ) const
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     // Get config template
     Registry::const_iterator iter = m_reg.find( configId );
-    SLM_ASSERT("Sorry, the id " <<  configId << " is not found in the application configuration registry", iter != m_reg.end());
+    SLM_ASSERT("The id " <<  configId << " is not found in the application configuration registry",
+               iter != m_reg.end());
 
     // Adapt config
     ::fwRuntime::ConfigurationElement::sptr newConfig;
-    SLM_ASSERT("Config has not good type, PARAMETERS type is required", iter->second->type == AppInfo::PARAMETERS );
 
     FieldAdaptorType fields;
-    AppInfo::ParamatersType parameters = iter->second->parameters;
-    BOOST_FOREACH( AppInfo::ParamatersType::value_type param, parameters )
+    AppInfo::ParametersType parameters = iter->second->parameters;
+    for( AppInfo::ParametersType::value_type param :  parameters )
     {
         FieldAdaptorType::const_iterator iter = fieldAdaptors.find( param.first );
         std::stringstream key;
@@ -184,7 +180,9 @@ void AppConfig::clearRegistry()
 
 //-----------------------------------------------------------------------------
 
-::fwRuntime::ConfigurationElement::csptr AppConfig::getAdaptedTemplateConfig( const std::string & configId, ::fwData::Composite::csptr replaceFields ) const
+::fwRuntime::ConfigurationElement::csptr AppConfig::getAdaptedTemplateConfig( const std::string & configId,
+                                                                              ::fwData::Composite::csptr replaceFields )
+const
 {
     FieldAdaptorType fieldAdaptors = compositeToFieldAdaptor( replaceFields );
     return this->getAdaptedTemplateConfig( configId, fieldAdaptors );
@@ -196,7 +194,7 @@ std::vector< std::string > AppConfig::getAllConfigs() const
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     std::vector< std::string > ids;
-    BOOST_FOREACH( Registry::value_type elem, m_reg )
+    for( Registry::value_type elem :  m_reg )
     {
         ids.push_back( elem.first );
     }
@@ -209,7 +207,7 @@ std::vector< std::string > AppConfig::getConfigsFromGroup(const std::string & gr
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     std::vector< std::string > ids;
-    BOOST_FOREACH( Registry::value_type elem, m_reg )
+    for( Registry::value_type elem :  m_reg )
     {
         AppInfo::sptr info = elem.second;
         if(info->group == group)
@@ -222,10 +220,10 @@ std::vector< std::string > AppConfig::getConfigsFromGroup(const std::string & gr
 
 //-----------------------------------------------------------------------------
 
-AppConfig::FieldAdaptorType AppConfig::compositeToFieldAdaptor( ::fwData::Composite::csptr fieldAdaptors ) const
+FieldAdaptorType AppConfig::compositeToFieldAdaptor( ::fwData::Composite::csptr fieldAdaptors ) const
 {
     FieldAdaptorType fields;
-    BOOST_FOREACH(const ::fwData::Composite::value_type &elem, *fieldAdaptors )
+    for(const ::fwData::Composite::value_type &elem :  *fieldAdaptors )
     {
         fields[elem.first] = ::fwData::String::dynamicCast( elem.second )->value();
     }
@@ -255,7 +253,8 @@ std::string AppConfig::getUniqueIdentifier(const std::string& serviceUid )
 
 //-----------------------------------------------------------------------------
 
-::fwRuntime::EConfigurationElement::sptr AppConfig::adaptConfig( ::fwRuntime::ConfigurationElement::csptr _cfgElem, const FieldAdaptorType & fieldAdaptors ) const
+::fwRuntime::EConfigurationElement::sptr AppConfig::adaptConfig( ::fwRuntime::ConfigurationElement::csptr _cfgElem,
+                                                                 const FieldAdaptorType & fieldAdaptors ) const
 {
     SLM_TRACE_FUNC();
 
@@ -263,12 +262,12 @@ std::string AppConfig::getUniqueIdentifier(const std::string& serviceUid )
     result->setValue( this->adaptField( _cfgElem->getValue(), fieldAdaptors ) );
 
     typedef std::map<std::string, std::string> MapAttributesType;
-    BOOST_FOREACH( MapAttributesType::value_type attribute, _cfgElem->getAttributes() )
+    for( MapAttributesType::value_type attribute :  _cfgElem->getAttributes() )
     {
         result->setAttributeValue( attribute.first, this->adaptField( attribute.second, fieldAdaptors ) );
     }
 
-    BOOST_FOREACH ( ::fwRuntime::ConfigurationElement::csptr subElem, _cfgElem->getElements())
+    for ( ::fwRuntime::ConfigurationElement::csptr subElem : _cfgElem->getElements())
     {
         result->addConfigurationElement( this->adaptConfig( subElem, fieldAdaptors ) );
     }
@@ -283,7 +282,7 @@ std::string AppConfig::adaptField( const std::string & _str, const FieldAdaptorT
     std::string newStr = _str;
     if(!_str.empty())
     {
-        BOOST_FOREACH(FieldAdaptorType::value_type fieldAdaptor, fieldAdaptors)
+        for(FieldAdaptorType::value_type fieldAdaptor :  fieldAdaptors)
         {
             std::stringstream sstr;
             sstr << "(.*)" << fieldAdaptor.first << "(.*)";
@@ -293,8 +292,8 @@ std::string AppConfig::adaptField( const std::string & _str, const FieldAdaptorT
                 std::stringstream machine_format;
                 machine_format << "\\1" << fieldAdaptor.second << "\\2";
                 newStr = ::boost::regex_replace( newStr,
-                                machine_regex, machine_format.str(),
-                                ::boost::match_default | ::boost::format_sed );
+                                                 machine_regex, machine_format.str(),
+                                                 ::boost::match_default | ::boost::format_sed );
             }
         }
     }
@@ -303,6 +302,20 @@ std::string AppConfig::adaptField( const std::string & _str, const FieldAdaptorT
 
 //-----------------------------------------------------------------------------
 
+std::shared_ptr< ::fwRuntime::Bundle > AppConfig::getBundle(const std::string & configId)
+{
+    Registry::const_iterator iter = m_reg.find( configId );
+    SLM_ASSERT("The id " <<  configId << " is not found in the application configuration registry",
+               iter != m_reg.end());
+
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = ::fwRuntime::findBundle(iter->second->bundleId,
+                                                                            iter->second->bundleVersion);
+
+    return bundle;
+}
+
+//-----------------------------------------------------------------------------
+
 } // namespace registry
 
 } // namespace fwServices
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/AppConfig2.cpp b/SrcLib/core/fwServices/src/fwServices/registry/AppConfig2.cpp
new file mode 100644
index 0000000..8340903
--- /dev/null
+++ b/SrcLib/core/fwServices/src/fwServices/registry/AppConfig2.cpp
@@ -0,0 +1,363 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwServices/registry/AppConfig2.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
+
+#include <boost/regex.hpp>
+
+namespace fwServices
+{
+namespace registry
+{
+AppConfig2::sptr AppConfig2::s_currentAppConfig2 = AppConfig2::New();
+::fwCore::mt::Mutex AppConfig2::s_idMutex;
+
+std::string AppConfig2::s_mandatoryParameterIdentifier = "@mandatory@";
+
+//-----------------------------------------------------------------------------
+
+AppConfig2::sptr AppConfig2::getDefault()
+{
+    return s_currentAppConfig2;
+}
+
+//-----------------------------------------------------------------------------
+
+AppConfig2::~AppConfig2()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void AppConfig2::parseBundleInformation()
+{
+    auto extensions = ::fwRuntime::getAllExtensionsForPoint("::fwServices::registry::AppConfig2");
+    for( const auto& ext : extensions )
+    {
+        // Get id
+        std::string configId = ext->findConfigurationElement("id")->getValue();
+
+        // Get group
+        std::string group = "";
+        if ( ext->hasConfigurationElement("group") )
+        {
+            group = ext->findConfigurationElement("group")->getValue();
+        }
+        // Get desc
+        std::string desc = "No description available";
+        if ( ext->hasConfigurationElement("desc") )
+        {
+            desc = ext->findConfigurationElement("desc")->getValue();
+        }
+
+        AppInfo::ParametersType parameters;
+        if ( ext->hasConfigurationElement("parameters") )
+        {
+            ::fwRuntime::ConfigurationElement::csptr parametersConfig = ext->findConfigurationElement("parameters");
+            ::fwRuntime::ConfigurationElement::Container elements     = parametersConfig->getElements();
+            for( ::fwRuntime::ConfigurationElement::sptr paramConfig :  elements )
+            {
+                std::string name = paramConfig->getExistingAttributeValue("name");
+
+                if(paramConfig->hasAttribute("default"))
+                {
+                    parameters[name] = paramConfig->getAttributeValue("default");
+                }
+                else
+                {
+                    parameters[name] = s_mandatoryParameterIdentifier;
+                }
+
+            }
+        }
+
+        // Get config
+        ::fwRuntime::ConfigurationElement::csptr config = ext->findConfigurationElement("config");
+
+        // Get bundle
+        std::shared_ptr< ::fwRuntime::Bundle> bundle = ext->getBundle();
+        std::string bundleId                         = bundle->getIdentifier();
+        std::string bundleVersion                    = bundle->getVersion().string();
+
+        // Add app info
+        this->addAppInfo( configId, group, desc, parameters, config, bundleId, bundleVersion );
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void AppConfig2::addAppInfo
+    (   const std::string & configId,
+    const std::string & group,
+    const std::string & desc,
+    const AppInfo::ParametersType & parameters,
+    ::fwRuntime::ConfigurationElement::csptr config,
+    const std::string bundleId,
+    const std::string bundleVersion)
+{
+    ::fwCore::mt::WriteLock lock(m_registryMutex);
+
+    OSLM_DEBUG( "New app config registering : "
+                << " configId =" << configId
+                );
+
+    SLM_ASSERT("The app config with the id = "<< configId <<" already exist.", m_reg.find( configId ) == m_reg.end() );
+
+    AppInfo::sptr info = AppInfo::New();
+    info->group         = group;
+    info->desc          = desc;
+    info->config        = config;
+    info->parameters    = parameters;
+    info->bundleId      = bundleId;
+    info->bundleVersion = bundleVersion;
+    m_reg[configId]     = info;
+}
+
+//-----------------------------------------------------------------------------
+
+AppConfig2::AppConfig2()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void AppConfig2::clearRegistry()
+{
+    ::fwCore::mt::WriteLock lock(m_registryMutex);
+    m_reg.clear();
+}
+
+//-----------------------------------------------------------------------------
+
+::fwRuntime::ConfigurationElement::csptr AppConfig2::getAdaptedTemplateConfig(
+    const std::string & configId,
+    const FieldAdaptorType fieldAdaptors,
+    bool autoPrefixId) const
+{
+    ::fwCore::mt::ReadLock lock(m_registryMutex);
+    // Get config template
+    Registry::const_iterator iter = m_reg.find( configId );
+    SLM_ASSERT("The id " <<  configId << " is not found in the application configuration registry",
+               iter != m_reg.end());
+
+    // Adapt config
+    ::fwRuntime::ConfigurationElement::sptr newConfig;
+
+    FieldAdaptorType fields;
+    AppInfo::ParametersType parameters = iter->second->parameters;
+
+    for( AppInfo::ParametersType::value_type param :  parameters )
+    {
+        FieldAdaptorType::const_iterator iter = fieldAdaptors.find( param.first );
+        std::stringstream key;
+        key << "\\$\\{" << param.first << "\\}";
+        if ( iter != fieldAdaptors.end() )
+        {
+            fields[key.str()] = iter->second;
+        }
+        else if ( param.second !=  s_mandatoryParameterIdentifier)
+        {
+            fields[key.str()] = param.second;
+        }
+        else
+        {
+            FW_RAISE("Parameter : '" << param.first << "' is needed by the app configuration id='"<< configId <<"'.");
+        }
+    }
+
+    std::string autoPrefixName;
+    if(autoPrefixId)
+    {
+        autoPrefixName = this->getUniqueIdentifier(configId);
+    }
+
+    newConfig = this->adaptConfig(  iter->second->config, fields, autoPrefixName);
+
+    return newConfig;
+}
+
+//-----------------------------------------------------------------------------
+
+::fwRuntime::ConfigurationElement::csptr AppConfig2::getAdaptedTemplateConfig( const std::string & configId,
+                                                                               ::fwData::Composite::csptr replaceFields,
+                                                                               bool autoPrefixId )
+const
+{
+    FieldAdaptorType fieldAdaptors = compositeToFieldAdaptor( replaceFields );
+    return this->getAdaptedTemplateConfig( configId, fieldAdaptors, autoPrefixId );
+}
+
+//-----------------------------------------------------------------------------
+
+std::vector< std::string > AppConfig2::getAllConfigs() const
+{
+    ::fwCore::mt::ReadLock lock(m_registryMutex);
+    std::vector< std::string > ids;
+    for( const Registry::value_type& elem :  m_reg )
+    {
+        ids.push_back( elem.first );
+    }
+    return ids;
+}
+
+//-----------------------------------------------------------------------------
+
+std::vector< std::string > AppConfig2::getConfigsFromGroup(const std::string & group) const
+{
+    ::fwCore::mt::ReadLock lock(m_registryMutex);
+    std::vector< std::string > ids;
+    for( const Registry::value_type& elem :  m_reg )
+    {
+        AppInfo::sptr info = elem.second;
+        if(info->group == group)
+        {
+            ids.push_back( elem.first );
+        }
+    }
+    return ids;
+}
+
+//-----------------------------------------------------------------------------
+
+FieldAdaptorType AppConfig2::compositeToFieldAdaptor( ::fwData::Composite::csptr fieldAdaptors ) const
+{
+    FieldAdaptorType fields;
+    for(const ::fwData::Composite::value_type &elem :  *fieldAdaptors )
+    {
+        fields[elem.first] = ::fwData::String::dynamicCast( elem.second )->value();
+    }
+
+    return fields;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string AppConfig2::getUniqueIdentifier(const std::string& serviceUid )
+{
+    ::fwCore::mt::ScopedLock lock(s_idMutex);
+    static unsigned int srvCpt = 1;
+    std::stringstream sstr;
+
+    if ( serviceUid.empty() )
+    {
+        sstr <<  "AppConfig2Manager_" << srvCpt;
+    }
+    else
+    {
+        sstr <<  serviceUid << "_" << srvCpt;
+    }
+    ++srvCpt;
+    return sstr.str();
+}
+
+//-----------------------------------------------------------------------------
+
+::fwRuntime::EConfigurationElement::sptr AppConfig2::adaptConfig(::fwRuntime::ConfigurationElement::csptr _cfgElem,
+                                                                 const FieldAdaptorType & fieldAdaptors,
+                                                                 const std::string& autoPrefixId) const
+{
+    ::fwRuntime::EConfigurationElement::sptr result = ::fwRuntime::EConfigurationElement::New( _cfgElem->getName() );
+    result->setValue( this->adaptField( _cfgElem->getValue(), fieldAdaptors ) );
+
+    typedef std::map<std::string, std::string> MapAttributesType;
+    for( MapAttributesType::value_type attribute :  _cfgElem->getAttributes() )
+    {
+        // Add the config prefix for unique identifiers
+        if(!autoPrefixId.empty() &&
+           (attribute.first == "uid" || attribute.first == "sid" || attribute.first == "wid" ||
+            attribute.first == "channel" ))
+        {
+            // Detect if we have a variable name
+            ::boost::regex isVariable ( "\\${.*}.*" );
+            if ( !::boost::regex_match( attribute.second, isVariable ) )
+            {
+                // This is not a variable, add the prefix
+                result->setAttributeValue( attribute.first,
+                                           autoPrefixId + "_" + this->adaptField( attribute.second, fieldAdaptors ));
+                continue;
+            }
+        }
+        result->setAttributeValue( attribute.first, this->adaptField( attribute.second, fieldAdaptors ) );
+    }
+
+    for ( ::fwRuntime::ConfigurationElement::csptr subElem : _cfgElem->getElements())
+    {
+        // Add the config prefix for unique identifiers in signal and slot sources
+        if( !autoPrefixId.empty() && (subElem->getName() == "signal" || subElem->getName() == "slot" ) )
+        {
+            // Detect if we have a variable name
+            ::boost::regex isVariable ( "\\${.*}.*" );
+            if ( !::boost::regex_match( subElem->getValue(), isVariable ) )
+            {
+                // This is not a variable, add the prefix
+                auto elt = ::fwRuntime::EConfigurationElement::New( subElem->getName() );
+                elt->setValue( autoPrefixId + "_" + subElem->getValue() );
+
+                for (const auto& attr : subElem->getAttributes())
+                {
+                    elt->setAttributeValue(attr.first, attr.second);
+                }
+
+                result->addConfigurationElement( elt );
+                continue;
+            }
+        }
+
+        result->addConfigurationElement( this->adaptConfig( subElem, fieldAdaptors, autoPrefixId ) );
+    }
+
+    return result;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string AppConfig2::adaptField( const std::string & _str, const FieldAdaptorType & fieldAdaptors ) const
+{
+    std::string newStr = _str;
+    if(!_str.empty())
+    {
+        for(FieldAdaptorType::value_type fieldAdaptor :  fieldAdaptors)
+        {
+            ::boost::regex varRegex ( "(.*)" + fieldAdaptor.first + "(.*)" );
+            if ( ::boost::regex_match( _str, varRegex ) )
+            {
+                const std::string varReplace("\\1" + fieldAdaptor.second + "\\2");
+                newStr = ::boost::regex_replace( newStr, varRegex, varReplace,
+                                                 ::boost::match_default | ::boost::format_sed );
+            }
+        }
+    }
+    return newStr;
+}
+
+//-----------------------------------------------------------------------------
+
+std::shared_ptr< ::fwRuntime::Bundle > AppConfig2::getBundle(const std::string & configId)
+{
+    Registry::const_iterator iter = m_reg.find( configId );
+    SLM_ASSERT("The id " <<  configId << " is not found in the application configuration registry",
+               iter != m_reg.end());
+
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = ::fwRuntime::findBundle(iter->second->bundleId,
+                                                                            iter->second->bundleVersion);
+
+    return bundle;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace registry
+
+} // namespace fwServices
+
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/AppConfigParameters.cpp b/SrcLib/core/fwServices/src/fwServices/registry/AppConfigParameters.cpp
index a10c825..8f08c01 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/AppConfigParameters.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/AppConfigParameters.cpp
@@ -1,21 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/regex.hpp>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/Runtime.hpp>
-#include <fwRuntime/helper.hpp>
+#include "fwServices/registry/AppConfigParameters.hpp"
 
 #include <fwData/Composite.hpp>
-#include <fwData/String.hpp>
 #include <fwData/Composite.hpp>
+#include <fwData/String.hpp>
+#include <fwRuntime/ConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
 
-#include "fwServices/registry/AppConfigParameters.hpp"
+#include <boost/regex.hpp>
 
 namespace fwServices
 {
@@ -41,27 +39,29 @@ AppConfigParameters::~AppConfigParameters()
 
 void AppConfigParameters::parseBundleInformation()
 {
-    std::vector< ::boost::shared_ptr< ::fwRuntime::Extension > >  extensions = ::fwRuntime::getAllExtensionsForPoint("::fwServices::registry::AppConfigParameters");
-    BOOST_FOREACH( ::boost::shared_ptr< ::fwRuntime::Extension > ext, extensions )
+    std::vector< std::shared_ptr< ::fwRuntime::Extension > >  extensions = ::fwRuntime::getAllExtensionsForPoint(
+        "::fwServices::registry::AppConfigParameters");
+    for( std::shared_ptr< ::fwRuntime::Extension > ext :  extensions )
     {
         // Get id
         std::string extensionId = ext->findConfigurationElement("id")->getValue();
 
-        AppConfig::FieldAdaptorType parameters;
+        FieldAdaptorType parameters;
 
         // Get parmeters
         ::fwRuntime::ConfigurationElement::csptr parametersConfig = ext->findConfigurationElement("parameters");
-        ::fwRuntime::ConfigurationElement::Container elements = parametersConfig->getElements();
-        BOOST_FOREACH( ::fwRuntime::ConfigurationElement::sptr paramConfig, elements )
+        ::fwRuntime::ConfigurationElement::Container elements     = parametersConfig->getElements();
+        for( ::fwRuntime::ConfigurationElement::sptr paramConfig :  elements )
         {
             std::string name = paramConfig->getExistingAttributeValue("name");
-            std::string val = paramConfig->getExistingAttributeValue("value");
+            std::string val  = paramConfig->getExistingAttributeValue("value");
             parameters[name] = val;
         }
         ::fwCore::mt::WriteLock lock(m_registryMutex);
         Registry::const_iterator iter = m_reg.find( extensionId );
-        SLM_ASSERT("Sorry, the id " <<  extensionId
-                   << " already exists in the application configuration parameter registry", iter == m_reg.end());
+        SLM_ASSERT("The id " <<  extensionId
+                             << " already exists in the application configuration parameter registry",
+                   iter == m_reg.end());
         m_reg[extensionId] = parameters;
     }
 }
@@ -82,11 +82,12 @@ void AppConfigParameters::clearRegistry()
 
 //-----------------------------------------------------------------------------
 
-const AppConfig::FieldAdaptorType & AppConfigParameters::getParameters( const std::string & extensionId ) const
+const FieldAdaptorType & AppConfigParameters::getParameters( const std::string & extensionId ) const
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     Registry::const_iterator iter = m_reg.find( extensionId );
-    SLM_ASSERT("Sorry, the id " <<  extensionId << " is not found in the application configuration parameter registry", iter != m_reg.end());
+    SLM_ASSERT("The id " <<  extensionId << " is not found in the application configuration parameter registry",
+               iter != m_reg.end());
     return iter->second;
 }
 
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp b/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp
index 2959e6c..7dc7f1f 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/ObjectService.cpp
@@ -1,28 +1,27 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <iostream>
-#include <sstream>
-#include <utility>
+#include "fwServices/IService.hpp"
+#include "fwServices/registry/AppConfig.hpp"
+#include "fwServices/registry/ObjectService.hpp"
+#include "fwServices/registry/ServiceConfig.hpp"
+#include "fwServices/registry/ServiceFactory.hpp"
 
-#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
+#include <fwData/Object.hpp>
 
 #include <fwCore/LogicStamp.hpp>
 #include <fwCore/util/LazyInstantiator.hpp>
 
 #include <fwTools/fwID.hpp>
 
-#include "fwServices/IService.hpp"
-
-#include "fwServices/registry/ServiceConfig.hpp"
-#include "fwServices/registry/ServiceFactory.hpp"
-#include "fwServices/registry/AppConfig.hpp"
+#include <boost/filesystem.hpp>
 
-#include "fwServices/registry/ObjectService.hpp"
+#include <iostream>
+#include <sstream>
+#include <utility>
 
 namespace fwServices
 {
@@ -54,7 +53,7 @@ std::string getRegistryInformation()
 
 //------------------------------------------------------------------------------
 
-::fwServices::registry::ObjectService::ServiceVectorType getServices( const std::string &serviceType )
+::fwServices::registry::ObjectService::ServiceVectorType getServices( const std::string& serviceType )
 {
     return ::fwServices::OSR::get()->getServices(serviceType);
 }
@@ -62,7 +61,7 @@ std::string getRegistryInformation()
 //------------------------------------------------------------------------------
 
 ::fwServices::registry::ObjectService::ServiceVectorType getServices( ::fwData::Object::sptr obj,
-                                                                      const std::string &serviceType )
+                                                                      const std::string& serviceType )
 {
     return ::fwServices::OSR::get()->getServices(obj, serviceType);
 }
@@ -76,7 +75,7 @@ std::string getRegistryInformation()
 
 //------------------------------------------------------------------------------
 
-bool has( ::fwData::Object::sptr obj , const std::string &srvType)
+bool has( ::fwData::Object::sptr obj, const std::string& srvType)
 {
     return ::fwServices::OSR::get()->has(obj, srvType);
 }
@@ -90,6 +89,22 @@ void registerService( ::fwData::Object::sptr obj, ::fwServices::IService::sptr s
 
 //------------------------------------------------------------------------------
 
+void registerService( ::fwData::Object::sptr obj, const ::fwServices::IService::KeyType& objKey,
+                      ::fwServices::IService::AccessType access,::fwServices::IService::sptr service )
+{
+    ::fwServices::OSR::get()->registerService(obj, objKey, access, service);
+}
+
+//------------------------------------------------------------------------------
+
+void registerServiceOutput( ::fwData::Object::sptr obj, const ::fwServices::IService::KeyType& objKey,
+                            ::fwServices::IService::sptr service )
+{
+    ::fwServices::OSR::get()->registerServiceOutput(obj, objKey, service);
+}
+
+//------------------------------------------------------------------------------
+
 void swapService( ::fwData::Object::sptr objDst, ::fwServices::IService::sptr service )
 {
     ::fwServices::OSR::get()->swapService(objDst, service);
@@ -102,40 +117,102 @@ void unregisterService(  ::fwServices::IService::sptr service )
     ::fwServices::OSR::get()->unregisterService(service);
 }
 
-} //namespace OSR
+//------------------------------------------------------------------------------
+
+void unregisterService(const ::fwServices::IService::KeyType& objKey, ::fwServices::IService::AccessType access,
+                       IService::sptr service)
+{
+    ::fwServices::OSR::get()->unregisterService(objKey, access, service);
+}
+
+//------------------------------------------------------------------------------
 
+void unregisterServiceOutput(const ::fwServices::IService::KeyType& objKey,  IService::sptr service)
+{
+    ::fwServices::OSR::get()->unregisterServiceOutput(objKey, service);
+}
 
 //------------------------------------------------------------------------------
+
+bool isRegistered(const ::fwServices::IService::KeyType& objKey,
+                  ::fwServices::IService::AccessType access, IService::sptr service)
+{
+    return ::fwServices::OSR::get()->isRegistered(objKey, access, service);
+}
+
 //------------------------------------------------------------------------------
 
+} //namespace OSR
 
 
+//------------------------------------------------------------------------------
+//------------------------------------------------------------------------------
 
 namespace registry
 {
 
-void  ObjectService::registerService( ::fwData::Object::sptr object, ::fwServices::IService::sptr service)
+const ::fwCom::Signals::SignalKeyType ObjectService::s_REGISTERED_SIG   = "registered";
+const ::fwCom::Signals::SignalKeyType ObjectService::s_UNREGISTERED_SIG = "unregistered";
+
+//------------------------------------------------------------------------------
+
+ObjectService::ObjectService()
+{
+    newSignal<RegisterSignalType>(s_REGISTERED_SIG);
+    newSignal<RegisterSignalType>(s_UNREGISTERED_SIG);
+}
+
+//------------------------------------------------------------------------------
+
+std::string ObjectService::getRegistryInformation() const
+{
+    std::stringstream info;
+    ::fwCore::LogicStamp::LogicStampType previousKey = ~0ul;
+    ::fwCore::mt::ReadLock lock(m_containerMutex);
+    for( const ServiceContainerType::left_map::value_type& objSrvMap :  m_container.left)
+    {
+        // TODO FIXME getObject() fail if there are expired object in OSR
+        ::fwCore::LogicStamp::LogicStampType key = objSrvMap.first;
+
+        if ( previousKey != key )
+        {
+            info << "Object ( key = "<<key<<" ) has "
+                 << m_container.left.count(key) <<" services." << std::endl;
+            previousKey = key;
+        }
+        ::fwServices::IService::sptr service = objSrvMap.second;
+        info << "    srv : uid = "<< service->getID() <<" , classname = "<< service->getClassname()
+             <<" , service is stopped = "<< ( service->isStopped() ? "yes" : "no" ) << std::endl;
+    }
+    return info.str();
+}
+
+//------------------------------------------------------------------------------
+
+void ObjectService::registerService( ::fwData::Object::sptr object, ::fwServices::IService::sptr service )
 {
     ::fwCore::mt::WriteLock writeLock(m_containerMutex);
-    this->internalRegisterService(object, service);
+    this->internalRegisterService(object, service, "", ::fwServices::IService::AccessType::INOUT);
 }
 
 //------------------------------------------------------------------------------
 
-void  ObjectService::internalRegisterService( ::fwData::Object::sptr object, ::fwServices::IService::sptr service)
+void ObjectService::registerService( ::fwData::Object::sptr object, const ::fwServices::IService::KeyType& objKey,
+                                     ::fwServices::IService::AccessType access, ::fwServices::IService::sptr service)
 {
-    OSLM_ASSERT("Sorry, this service "<< service->getClassname()
-            << " is not valid for object " << object->getClassname(),
-            ServiceFactory::getDefault()->checkServiceValidity(object->getClassname(), service->getClassname())
-    );
+    ::fwCore::mt::WriteLock writeLock(m_containerMutex);
+    this->internalRegisterService(object, service, objKey, access);
+
+}
 
-    OSLM_ASSERT("Service "<< service->getID()<<" already registered",
-            m_container.right.find(service) == m_container.right.end());
-    OSLM_ASSERT("Service "<< service->getID()<<" has already a valid associated object" ,
-            service->m_associatedObject.expired() || object != service->m_associatedObject.lock());
+//------------------------------------------------------------------------------
 
-    service->m_associatedObject = object;
-    m_container.insert( ServiceContainerType::value_type( object->getOSRKey()->getLogicStamp(), service ) );
+void ObjectService::registerServiceOutput(::fwData::Object::sptr object, const ::fwServices::IService::KeyType& objKey,
+                                          ::fwServices::IService::sptr service)
+{
+    const auto id = service->getObjectId(objKey);
+
+    this->signal<RegisterSignalType>(s_REGISTERED_SIG)->asyncEmit(object, id);
 }
 
 //------------------------------------------------------------------------------
@@ -147,109 +224,239 @@ void ObjectService::swapService( ::fwData::Object::sptr objDst, ::fwServices::IS
                 m_container.left.find(service->getObject()->getOSRKey()->getLogicStamp()) != m_container.left.end());
 
     OSLM_ASSERT("Service "<< service->getID()<<" is not registered in OSR",
-                    m_container.right.find(service) != m_container.right.end());
+                m_container.right.find(service) != m_container.right.end());
 
+    // TODO: swap pour chaque objet !
     m_container.right.erase(service);
-    this->internalRegisterService(objDst, service);
+    this->internalRegisterService(objDst, service, "", ::fwServices::IService::AccessType::INOUT);
 }
 
 //------------------------------------------------------------------------------
 
 void ObjectService::unregisterService( ::fwServices::IService::sptr service )
 {
-    SLM_TRACE_FUNC();
-    OSLM_ASSERT( "Sorry, the service ( "<< service->getID() <<" ) must be stop before unregister it.",
-                 service->isStopped() );
-    // TODO verify that there are no com channel on this service.
+    ::fwCore::mt::WriteLock writeLock(m_containerMutex);
+
+    SLM_ASSERT( "The service ( " + service->getID() + " ) must be stop before being unregistered.",
+                service->isStopped() );
+
     this->removeFromContainer( service );
+    service->m_inputsMap.clear();
+    service->m_inOutsMap.clear();
+    service->m_outputsMap.clear();
 }
 
 //------------------------------------------------------------------------------
 
-void ObjectService::removeFromContainer( ::fwServices::IService::sptr service )
+void ObjectService::unregisterService(const ::fwServices::IService::KeyType& objKey,
+                                      ::fwServices::IService::AccessType access,
+                                      ::fwServices::IService::sptr service )
 {
-    SLM_TRACE_FUNC();
-    ::fwCore::mt::WriteLock lock(m_containerMutex);
-    OSLM_ASSERT("Unknown service "<<service->getID()<<" in OSR",
-            m_container.right.find(service) != m_container.right.end());
-    m_container.right.erase(service);
+    ::fwCore::mt::WriteLock writeLock(m_containerMutex);
+
+    ::fwData::Object::cwptr obj;
+
+    if(access == ::fwServices::IService::AccessType::INPUT)
+    {
+        obj = service->m_inputsMap[objKey];
+    }
+    else if(access == ::fwServices::IService::AccessType::INOUT)
+    {
+        obj = service->m_inOutsMap[objKey];
+    }
+    else
+    {
+        obj = service->m_outputsMap[objKey];
+    }
+
+    SLM_ASSERT("Object key '" + objKey + "' not found in service '" + service->getID() + "'", !obj.expired());
+
+    // Remove from the left part
+    {
+        auto range = m_container.left.equal_range(obj.lock()->getOSRKey()->getLogicStamp());
+        for(auto it = range.first; it != range.second; )
+        {
+            if(it->second == service)
+            {
+                it = m_container.left.erase(it);
+            }
+            else
+            {
+                ++it;
+            }
+        }
+    }
+
+    // Remove from the right part
+    {
+        auto range = m_container.right.equal_range(service);
+        for(auto it = range.first; it != range.second; )
+        {
+            if(it->second == obj.lock()->getOSRKey()->getLogicStamp())
+            {
+                it = m_container.right.erase(it);
+            }
+            else
+            {
+                ++it;
+            }
+        }
+    }
+
+    if(access == ::fwServices::IService::AccessType::INPUT)
+    {
+        service->m_inputsMap.erase(objKey);
+    }
+    else if(access == ::fwServices::IService::AccessType::INOUT)
+    {
+        service->m_inOutsMap.erase(objKey);
+    }
+    else
+    {
+        service->m_outputsMap.erase(objKey);
+    }
 }
 
 //------------------------------------------------------------------------------
 
-ObjectService::ObjectVectorType ObjectService::getObjects() const
+void ObjectService::unregisterServiceOutput( const ::fwServices::IService::KeyType& objKey,
+                                             ::fwServices::IService::sptr service )
 {
-    ObjectVectorType objects;
-    ::fwCore::mt::ReadLock lock(m_containerMutex);
-    const ServiceContainerType::right_map & right = m_container.right;
-    BOOST_FOREACH( const ServiceContainerType::right_map::value_type &elt, right)
+    const auto id = service->getObjectId(objKey);
+    ::fwData::Object::wptr obj = service->m_outputsMap[objKey];
+
+    this->signal<RegisterSignalType>(s_UNREGISTERED_SIG)->asyncEmit(obj.lock(), id);
+}
+
+//------------------------------------------------------------------------------
+
+bool ObjectService::isRegistered(const ::fwServices::IService::KeyType& objKey,
+                                 ::fwServices::IService::AccessType access, IService::sptr service)
+{
+    ::fwCore::mt::WriteLock writeLock(m_containerMutex);
+
+    if(access == ::fwServices::IService::AccessType::INPUT)
     {
-        if ( std::find(objects.begin(), objects.end(), elt.first->getObject()) == objects.end() )
-        {
-            objects.push_back( elt.first->getObject() ) ;
-        }
+        return service->m_inputsMap.find(objKey) != service->m_inputsMap.end();
+    }
+    else if(access == ::fwServices::IService::AccessType::INOUT)
+    {
+        return service->m_inOutsMap.find(objKey) != service->m_inOutsMap.end();
+    }
+    else
+    {
+        return service->m_outputsMap.find(objKey) != service->m_outputsMap.end();
     }
-    SLM_WARN_IF( "No object registered for the requested type of service", objects.empty() );
-    return objects;
 }
 
 //------------------------------------------------------------------------------
 
-std::string ObjectService::getRegistryInformation() const
+void ObjectService::internalRegisterService(::fwData::Object::sptr object, ::fwServices::IService::sptr service,
+                                            const ::fwServices::IService::KeyType& objKey,
+                                            ::fwServices::IService::AccessType access)
 {
-    std::stringstream info;
-    ::fwCore::LogicStamp::LogicStampType previousKey = -1;
-    ::fwCore::mt::ReadLock lock(m_containerMutex);
-    BOOST_FOREACH( const ServiceContainerType::left_map::value_type &objSrvMap, m_container.left)
+    SLM_ASSERT("Can't register a null service in OSR.", service);
+    SLM_ASSERT("Can't register a null object in OSR.", object);
+
+    if(objKey.empty())
     {
-        // TODO FIXME getObject() fail if there are expired object in OSR
-        ::fwCore::LogicStamp::LogicStampType key = objSrvMap.first;
+        OSLM_ASSERT("Service "<< service->getID()<<" has already a valid associated object",
+                    service->m_associatedObject.expired() || object != service->m_associatedObject.lock());
 
-        if ( previousKey != key )
+        // Old behavior with 1 object -> N Services
+        OSLM_ASSERT("This service "<< service->getClassname()
+                                   << " is not valid for the object " << object->getClassname(),
+                    ServiceFactory::getDefault()->checkServiceValidity(object->getClassname(), service->getClassname())
+                    );
+
+        OSLM_ASSERT("Service "<< service->getID()<<" already registered",
+                    m_container.right.find(service) == m_container.right.end());
+
+        service->m_associatedObject = object;
+    }
+    else
+    {
+        if(service->m_inputsMap.empty() && service->m_inOutsMap.empty() && service->m_outputsMap.empty())
         {
-            info    << "Object ( key = "<<key<<" ) has "
-                    << m_container.left.count(key) <<" services." << std::endl;
-            previousKey = key;
+            // If we have an appXml2 but with an old service implementation,
+            // we consider that the primary object is the first one we added
+            service->m_associatedObject = object;
+        }
+        // new behavior with N objects -> N Services
+        if(access == ::fwServices::IService::AccessType::INPUT)
+        {
+            service->m_inputsMap[objKey] = object;
+        }
+        else if(access == ::fwServices::IService::AccessType::INOUT)
+        {
+            service->m_inOutsMap[objKey] = object;
+        }
+        else
+        {
+            service->m_outputsMap[objKey] = object;
         }
-        ::fwServices::IService::sptr service = objSrvMap.second;
-        info << "    srv : uid = "<< service->getID() <<" , classname = "<< service->getClassname()
-                         <<" , service is stopped = "<< ( service->isStopped() ? "yes" : "no" ) << std::endl;
     }
-    return info.str();
+    m_container.insert( ServiceContainerType::value_type( object->getOSRKey()->getLogicStamp(), service ) );
+}
+
+//------------------------------------------------------------------------------
+
+void ObjectService::removeFromContainer( ::fwServices::IService::sptr service )
+{
+    SLM_TRACE_FUNC();
+    OSLM_ASSERT("Unknown service "<<service->getID()<<" in OSR",
+                m_container.right.find(service) != m_container.right.end());
+    m_container.right.erase(service);
+}
+
+//------------------------------------------------------------------------------
+
+ObjectService::ObjectVectorType ObjectService::getObjects() const
+{
+    ObjectVectorType objects;
+    ::fwCore::mt::ReadLock lock(m_containerMutex);
+
+    for( const ServiceContainerType::right_map::value_type& elt : m_container.right)
+    {
+        auto srvObjects = elt.first->getObjects();
+        std::move(srvObjects.begin(), srvObjects.end(), std::inserter(objects, objects.begin()));
+    }
+    SLM_WARN_IF( "No object registered for the requested type of service", objects.empty() );
+    return objects;
 }
 
 //------------------------------------------------------------------------------
 
 ObjectService::ServiceVectorType ObjectService::getServices( ::fwData::Object::sptr obj,
-                                                             const std::string & serviceType ) const
+                                                             const std::string& serviceType ) const
 {
     ServiceVectorType allServices = this->getServices(obj);
-    ServiceVectorType services ;
+    ServiceVectorType services;
 
     // Search should be optimized
-    BOOST_FOREACH(::fwServices::IService::sptr srv, allServices)
+    for(::fwServices::IService::sptr srv :  allServices)
     {
         if( srv->isA(serviceType) )
         {
-            services.push_back( srv ) ;
+            services.insert( srv );
         }
     }
-    return services ;
+    return services;
 }
 
 //------------------------------------------------------------------------------
 
-ObjectService::ServiceVectorType ObjectService::getServices( const std::string & serviceType ) const
+ObjectService::ServiceVectorType ObjectService::getServices( const std::string& serviceType ) const
 {
     ServiceVectorType services;
     ::fwCore::mt::ReadLock lock(m_containerMutex);
     const ServiceContainerType::right_map right = m_container.right;
-    BOOST_FOREACH( ServiceContainerType::right_map::value_type elt, right)
+    for( ServiceContainerType::right_map::value_type elt :  right)
     {
         ::fwServices::IService::sptr service = elt.first;
         if ( service->isA(serviceType) )
         {
-            services.push_back( service ) ;
+            services.insert( service );
         }
     }
     SLM_DEBUG_IF("No service registered", services.empty());
@@ -268,9 +475,9 @@ ObjectService::ServiceVectorType ObjectService::getServices( ::fwData::Object::s
         ::fwCore::LogicStamp::LogicStampType key = obj->getOSRKey()->getLogicStamp();
         ServiceContainerType::left_map::const_iterator firstElement = m_container.left.find(key);
         ServiceContainerType::left_map::const_iterator lastElement  = m_container.left.upper_bound(key);
-        for (iter = firstElement ; iter != lastElement ; ++iter)
+        for (iter = firstElement; iter != lastElement; ++iter)
         {
-            services.push_back( iter->second ) ;
+            services.insert( iter->second );
         }
     }
     return services;
@@ -278,7 +485,7 @@ ObjectService::ServiceVectorType ObjectService::getServices( ::fwData::Object::s
 
 //------------------------------------------------------------------------------
 
-bool ObjectService::has( ::fwData::Object::sptr obj , const std::string & srvType) const
+bool ObjectService::has( ::fwData::Object::sptr obj, const std::string& srvType) const
 {
     bool hasServices = false;
     ::fwCore::mt::ReadLock lock(m_containerMutex);
@@ -287,8 +494,8 @@ bool ObjectService::has( ::fwData::Object::sptr obj , const std::string & srvTyp
         ServiceContainerType::left_map::const_iterator iter;
         ::fwCore::LogicStamp::LogicStampType key = obj->getOSRKey()->getLogicStamp();
         ServiceContainerType::left_map::const_iterator firstElement = m_container.left.find(key);
-        ServiceContainerType::left_map::const_iterator lastElement = m_container.left.upper_bound(key);
-        for (iter = firstElement ; iter != lastElement ; ++iter)
+        ServiceContainerType::left_map::const_iterator lastElement  = m_container.left.upper_bound(key);
+        for (iter = firstElement; iter != lastElement; ++iter)
         {
             if( iter->second->isA(srvType))
             {
@@ -297,7 +504,7 @@ bool ObjectService::has( ::fwData::Object::sptr obj , const std::string & srvTyp
             }
         }
     }
-    return hasServices ;
+    return hasServices;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/Proxy.cpp b/SrcLib/core/fwServices/src/fwServices/registry/Proxy.cpp
index 278ce8b..bd263da 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/Proxy.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/Proxy.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include "fwServices/registry/Proxy.hpp"
 
 namespace fwServices
@@ -20,13 +18,14 @@ Proxy::sptr Proxy::s_currentProxy = Proxy::New();
 //-----------------------------------------------------------------------------
 
 Proxy::Proxy()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 Proxy::~Proxy()
 {
-    SLM_ASSERT("There are always " << m_channels.size() << " channels in Proxy", m_channels.empty());
+    SLM_ASSERT("There are still " << m_channels.size() << " channel(s) in the Proxy", m_channels.empty());
 }
 
 //-----------------------------------------------------------------------------
@@ -60,11 +59,15 @@ void Proxy::connect(ChannelKeyType channel, ::fwCom::SignalBase::sptr signal)
     }
 
     ::fwCore::mt::WriteLock lock(sigslots->m_mutex);
-    sigslots->m_signals.push_back(signal);
+    auto ret = sigslots->m_signals.insert(signal);
 
-    BOOST_FOREACH( ::fwCom::SlotBase::sptr slot, sigslots->m_slots )
+    if(ret.second)
     {
-        signal->connect( slot );
+        // Only connect if the signal was not already in the proxy
+        for( ::fwCom::SlotBase::sptr slot :  sigslots->m_slots )
+        {
+            signal->connect( slot );
+        }
     }
 }
 
@@ -92,11 +95,15 @@ void Proxy::connect(ChannelKeyType channel, ::fwCom::SlotBase::sptr slot)
     }
 
     ::fwCore::mt::WriteLock lock(sigslots->m_mutex);
-    sigslots->m_slots.push_back(slot);
+    auto ret = sigslots->m_slots.insert(slot);
 
-    BOOST_FOREACH( ::fwCom::SignalBase::sptr signal, sigslots->m_signals )
+    if(ret.second)
     {
-        signal->connect( slot );
+        // Only connect if the slot was not already in the proxy
+        for( ::fwCom::SignalBase::sptr signal :  sigslots->m_signals )
+        {
+            signal->connect( slot );
+        }
     }
 }
 
@@ -112,7 +119,7 @@ void Proxy::disconnect(ChannelKeyType channel, ::fwCom::SignalBase::sptr signal)
 
     ::fwCore::mt::WriteLock sigSlotLock(sigslots->m_mutex);
 
-    BOOST_FOREACH( ::fwCom::SlotBase::sptr slot, sigslots->m_slots )
+    for( ::fwCom::SlotBase::sptr slot :  sigslots->m_slots )
     {
         signal->disconnect( slot );
     }
@@ -141,7 +148,7 @@ void Proxy::disconnect(ChannelKeyType channel, ::fwCom::SlotBase::sptr slot)
 
     ::fwCore::mt::WriteLock sigSlotLock(sigslots->m_mutex);
 
-    BOOST_FOREACH( ::fwCom::SignalBase::sptr signal, sigslots->m_signals )
+    for( ::fwCom::SignalBase::sptr signal :  sigslots->m_signals )
     {
         signal->disconnect( slot );
     }
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/ServiceConfig.cpp b/SrcLib/core/fwServices/src/fwServices/registry/ServiceConfig.cpp
index 1688cd6..b357a66 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/ServiceConfig.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/ServiceConfig.cpp
@@ -1,16 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwServices/registry/ServiceConfig.hpp"
 
 #include <fwRuntime/ConfigurationElement.hpp>
-#include <fwRuntime/Runtime.hpp>
 #include <fwRuntime/helper.hpp>
+#include <fwRuntime/Runtime.hpp>
 
-#include "fwServices/registry/ServiceConfig.hpp"
 
 namespace fwServices
 {
@@ -38,19 +37,18 @@ ServiceConfig::~ServiceConfig()
 
 void ServiceConfig::parseBundleInformation()
 {
-    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
-    typedef ::boost::shared_ptr< ::fwRuntime::Extension > ExtensionType;
+    typedef std::shared_ptr< ::fwRuntime::Extension > ExtensionType;
 
     std::vector< ExtensionType >  extElements;
     extElements = ::fwRuntime::getAllExtensionsForPoint(CONFIG_EXT_POINT);
-    BOOST_FOREACH(ExtensionType ext , extElements)
+    for(ExtensionType ext :  extElements)
     {
         // Get id
         SLM_ASSERT("Missing id element", ext->hasConfigurationElement("id"));
         std::string id = ext->findConfigurationElement("id")->getValue();
 
         // Get service
-        std::string service ="";
+        std::string service = "";
         if ( ext->hasConfigurationElement("service") )
         {
             service = ext->findConfigurationElement("service")->getValue();
@@ -74,7 +72,7 @@ void ServiceConfig::parseBundleInformation()
 //-----------------------------------------------------------------------------
 
 void ServiceConfig::addServiceConfigInfo
-(   const std::string & configId,
+    (   const std::string & configId,
     const std::string & service,
     const std::string & desc,
     ::fwRuntime::ConfigurationElement::csptr config)
@@ -82,17 +80,18 @@ void ServiceConfig::addServiceConfigInfo
     ::fwCore::mt::WriteLock lock(m_registryMutex);
 
     OSLM_DEBUG( "New service config registring : "
-            << " configId = " << configId
-            << " service = " << service
-            << " desc = " << desc
-    );
+                << " configId = " << configId
+                << " service = " << service
+                << " desc = " << desc
+                );
 
-    SLM_ASSERT("Sorry, service config id = "<< configId <<" already exist.", m_reg.find( configId ) == m_reg.end() );
+    SLM_ASSERT("The service config with the id "<< configId <<" already exist.",
+               m_reg.find( configId ) == m_reg.end() );
 
     ServiceConfigInfo::sptr info = ServiceConfigInfo::New();
-    info->service = service;
-    info->desc = desc;
-    info->config =  config;
+    info->service   = service;
+    info->desc      = desc;
+    info->config    = config;
     m_reg[configId] = info;
 }
 
@@ -117,9 +116,9 @@ void ServiceConfig::clearRegistry()
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     Registry::const_iterator iter = m_reg.find( configId );
-    SLM_ASSERT("Sorry, the id " <<  configId << " is not found in the application configuration registry",
+    SLM_ASSERT("The id " <<  configId << " is not found in the application configuration registry",
                iter != m_reg.end());
-    SLM_ASSERT("Sorry, the id " <<  configId << " is not allowed for this service " << serviceImpl,
+    SLM_ASSERT("The id " <<  configId << " is not allowed for this service " << serviceImpl,
                serviceImpl.empty() || iter->second->service.empty() || iter->second->service == serviceImpl);
     return iter->second->config;
 }
@@ -130,7 +129,7 @@ const std::string& ServiceConfig::getConfigDesc( const std::string & configId )
 {
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     Registry::const_iterator iter = m_reg.find( configId );
-    SLM_ASSERT("Sorry, the id " <<  configId << " is not found in the application configuration registry",
+    SLM_ASSERT("The id " <<  configId << " is not found in the application configuration registry",
                iter != m_reg.end());
     return iter->second->desc;
 }
@@ -142,7 +141,7 @@ std::vector< std::string > ServiceConfig::getAllConfigForService( std::string se
     ::fwCore::mt::ReadLock lock(m_registryMutex);
     std::vector< std::string > configs;
 
-    BOOST_FOREACH(Registry::value_type srvCfg, m_reg)
+    for(Registry::value_type srvCfg :  m_reg)
     {
         ServiceConfigInfo::sptr info = srvCfg.second;
         if (info->service.empty() || info->service == serviceImpl)
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp b/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp
index 365b96b..c6708c6 100644
--- a/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp
+++ b/SrcLib/core/fwServices/src/fwServices/registry/ServiceFactory.cpp
@@ -1,19 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include <functional>
 #include <vector>
 
 #include <fwCore/util/LazyInstantiator.hpp>
 
+#include <fwData/Exception.hpp>
+
 #include <fwRuntime/ConfigurationElement.hpp>
 #include <fwRuntime/Runtime.hpp>
 #include <fwRuntime/helper.hpp>
 #include <fwRuntime/profile/Profile.hpp>
 
 #include "fwServices/IService.hpp"
+#include "fwServices/registry/ActiveWorkers.hpp"
 #include "fwServices/registry/ServiceFactory.hpp"
 
 namespace fwServices
@@ -34,20 +38,20 @@ void ServiceFactory::parseBundleInformation()
     SrvRegContainer bundleInfoMap;
 
     typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
-    typedef ::boost::shared_ptr< ::fwRuntime::Extension > ExtensionType;
+    typedef std::shared_ptr< ::fwRuntime::Extension > ExtensionType;
 
     std::vector< ExtensionType >  extElements;
     extElements = ::fwRuntime::getAllExtensionsForPoint("::fwServices::registry::ServiceFactory");
-    BOOST_FOREACH(ExtensionType extElt , extElements)
+    for(ExtensionType extElt :  extElements)
     {
         std::vector< ConfigurationType > cfgEltVec = extElt->getElements();
         SLM_ASSERT("extension element MUST have 3 or 4 elements", cfgEltVec.size() == 3 || cfgEltVec.size() == 4);
-        std::string type = "";
-        std::string service ="";
-        std::string object= "";
-        std::string desc= "";
+        std::string type    = "";
+        std::string service = "";
+        std::string object  = "";
+        std::string desc    = "";
 
-        BOOST_FOREACH(ConfigurationType cfgElt, cfgEltVec)
+        for(ConfigurationType cfgElt :  cfgEltVec)
         {
             std::string elt = cfgElt->getName();
             if(elt == "type")
@@ -77,8 +81,8 @@ void ServiceFactory::parseBundleInformation()
 
         ServiceInfo::sptr info = ServiceInfo::New();
         info->serviceType = type;
-        info->objectImpl = object;
-        info->desc = desc;
+        info->objectImpl  = object;
+        info->desc        = desc;
 
         info->bundle = cfgEltVec[0]->getBundle();
         SLM_ASSERT("Bundle not find.", info->bundle );
@@ -86,14 +90,14 @@ void ServiceFactory::parseBundleInformation()
         bundleInfoMap[ service] = info;
     }
     // Verify object
-    BOOST_FOREACH(SrvRegContainer::value_type bundle, bundleInfoMap)
+    for(SrvRegContainer::value_type bundle :  bundleInfoMap)
     {
         if ( bundle.second->objectImpl.empty() )
         {
             OSLM_WARN("Service " << bundle.first << " of type  "
-                    << bundle.second->serviceType << " in bundle " << bundle.second->bundle->getIdentifier()
-                    << " has not object defined in plugin.xml ( declaration missing in dataReg ? ). "
-                    "Else is a service of service (sorry but not managed in this version )");
+                                 << bundle.second->serviceType << " in bundle " << bundle.second->bundle->getIdentifier()
+                                 << " has not object defined in plugin.xml ( declaration missing in dataReg ? ). "
+                      "Else is a service of service (sorry but not managed in this version )");
 
         }
     }
@@ -105,7 +109,7 @@ void ServiceFactory::parseBundleInformation()
 
     ::fwCore::mt::ReadToWriteLock lock(m_srvImplTosrvInfoMutex);
     // Merge data info
-    BOOST_FOREACH(SrvRegContainer::value_type bundle, bundleInfoMap)
+    for(SrvRegContainer::value_type bundle :  bundleInfoMap)
     {
 
         SrvRegContainer::iterator iter = m_srvImplTosrvInfo.find( bundle.first );
@@ -115,10 +119,10 @@ void ServiceFactory::parseBundleInformation()
             OSLM_DEBUG("Have already information (from register macro) about this service ( "
                        << bundle.first << " )." );
 
-            ServiceInfo::sptr info = iter->second;
+            ServiceInfo::sptr info       = iter->second;
             ServiceInfo::sptr infoBundle = bundle.second;
 
-            SLM_ASSERT("Try to add bundle, but bundle exists.", ! info->bundle );
+            SLM_ASSERT("Try to add bundle, but bundle exists.", !info->bundle );
             SLM_ASSERT("Try to add bundle, but this srv is already register and has not the same srv type.",
                        infoBundle->serviceType == info->serviceType );
             SLM_ASSERT("Try to add bundle, but this srv ("
@@ -126,8 +130,8 @@ void ServiceFactory::parseBundleInformation()
                        << infoBundle->objectImpl <<" != "<< info->objectImpl <<" )",
                        infoBundle->objectImpl == info->objectImpl );
 
-            info->bundle =  infoBundle->bundle;
-            info->desc =  infoBundle->desc;
+            info->bundle = infoBundle->bundle;
+            info->desc   = infoBundle->desc;
         }
         else
         {
@@ -153,13 +157,12 @@ IService::sptr ServiceFactory::create( const std::string & _srvImpl ) const
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
     SrvRegContainer::const_iterator iter = m_srvImplTosrvInfo.find( _srvImpl );
 
-    OSLM_ASSERT("Sorry don't find in ServiceFactory the service called "
-                << _srvImpl,
+    OSLM_ASSERT("The service called '" << _srvImpl << "' does not exist in the ServiceFactory ",
                 iter != m_srvImplTosrvInfo.end() );
 
     ServiceInfo::sptr info = iter->second;
 
-    OSLM_DEBUG("SR create a new service ( classname = " << _srvImpl << " )");
+    OSLM_DEBUG("SR creates a new service ( classname = " << _srvImpl << " )");
 
     if ( info->factory )
     {
@@ -167,15 +170,13 @@ IService::sptr ServiceFactory::create( const std::string & _srvImpl ) const
     }
     else
     {
-        OSLM_ASSERT( "Sorry a bundle must declare the factory "
+        OSLM_ASSERT( "A bundle must declare the factory named"
                      << _srvImpl
-                     <<". Service declaration is missing (or misspelled) in a bundle plugin ?",
+                     <<", the service declaration might be missing (or misspelled) in a bundle plugin.",
                      info->bundle );
-        OSLM_ASSERT( "Sorry bundle is already load ( "
-                     << info->bundle->getIdentifier() << " ) , factory "
-                     << _srvImpl
-                     << " is still missing. Service declaration is missing (or misspelled) in a .cpp file ?",
-                     ! info->bundle->isStarted() );
+        OSLM_ASSERT( "The bundle '" + info->bundle->getIdentifier() + "' is already loaded and the factory '"
+                     + _srvImpl + "' is still missing. The service declaration might be missing (or misspelled)"
+                     "in a .cpp file.", !info->bundle->isStarted() );
 
         lock.unlock(); // bundle->start() may trigger calls to addFactory
         info->bundle->start();
@@ -183,15 +184,20 @@ IService::sptr ServiceFactory::create( const std::string & _srvImpl ) const
 
         ::fwRuntime::profile::getCurrentProfile()->setup();
 
-        SLM_ASSERT( "Sorry after bundle loading ( "
-                    << info->bundle->getIdentifier() << " ) , factory "
-                    << _srvImpl << " is still missing. Service declaration is missing (or misspelled) in a cpp file ?",
-                    info->factory );
+        FW_RAISE_EXCEPTION_IF(
+            ::fwData::Exception( "After loading the bundle " + info->bundle->getIdentifier() + " , factory " + _srvImpl
+                                 + " is still missing. The service declaration might be missing (or misspelled) "
+                                 "in a cpp file."),
+            !info->factory );
 
         service = info->factory();
     }
 
-    this->checkServicesNotDeclaredInPluginXml();
+    // Setup worker here, this is a better place than the constructor
+    // because here, the service slots are also setup
+    // This allow to setup
+    service->setWorker( registry::ActiveWorkers::getDefault()->getWorker( registry::ActiveWorkers::s_DEFAULT_WORKER ) );
+
     return service;
 }
 
@@ -205,14 +211,14 @@ IService::sptr ServiceFactory::create( const std::string & _srvType, const std::
     {
         ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
 
-        OSLM_ASSERT("Sorry don't find in ServiceFactory the service called "
-                    << _srvImpl,
+        OSLM_ASSERT("The service called " << _srvImpl << " does not exist in the ServiceFactory."
+                    ,
                     m_srvImplTosrvInfo.find( _srvImpl ) != m_srvImplTosrvInfo.end() );
 
         OSLM_ASSERT(
-                    "Sorry, type of service must correspond. "
-                    << _srvType << " != " << m_srvImplTosrvInfo.find( _srvImpl )->second->serviceType,
-                    _srvType == m_srvImplTosrvInfo.find( _srvImpl )->second->serviceType);
+            "Conflincting types were defined for this service, "
+            << _srvType << " != " << m_srvImplTosrvInfo.find( _srvImpl )->second->serviceType,
+            _srvType == m_srvImplTosrvInfo.find( _srvImpl )->second->serviceType);
     }
 #endif //_DEBUG
 
@@ -223,27 +229,27 @@ IService::sptr ServiceFactory::create( const std::string & _srvType, const std::
 //------------------------------------------------------------------------------
 
 void ServiceFactory::addFactory( ServiceInfo::FactoryType _factory,
-        const std::string & simpl,
-        const std::string & stype,
-        const std::string & oimpl)
+                                 const std::string & simpl,
+                                 const std::string & stype,
+                                 const std::string & oimpl)
 {
     OSLM_DEBUG( "New service registering : "
-            << " simpl =" << simpl
-            << " stype=" << stype
-            << " oimpl=" << oimpl
-    );
+                << " simpl =" << simpl
+                << " stype=" << stype
+                << " oimpl=" << oimpl
+                );
 
     ::fwCore::mt::ReadToWriteLock lock(m_srvImplTosrvInfoMutex);
     SrvRegContainer::iterator iter = m_srvImplTosrvInfo.find( simpl );
 
-    ServiceInfo::sptr info ;
+    ServiceInfo::sptr info;
 
     if ( iter != m_srvImplTosrvInfo.end() )
     {
         OSLM_DEBUG("Have already information about this service ( " << simpl << " )." );
         info = iter->second;
         OSLM_ASSERT("Try to add factory, but this srv ( " << simpl << " ) has already a registered factory.",
-                    ! info->factory );
+                    !info->factory );
         OSLM_ASSERT("Try to add factory, but this srv ( "
                     << simpl << " ) is already register and has not the same srv type. ( "
                     << stype << " != " << info->serviceType <<" )",
@@ -254,16 +260,16 @@ void ServiceFactory::addFactory( ServiceInfo::FactoryType _factory,
                     oimpl == info->objectImpl );
 
         ::fwCore::mt::UpgradeToWriteLock upgrade(lock);
-        info->factory     = _factory ;
+        info->factory = _factory;
     }
     else
     {
         OSLM_DEBUG("Add new service factory in registry ( " << simpl << " )." );
         ::fwCore::mt::UpgradeToWriteLock upgrade(lock);
-        info = m_srvImplTosrvInfo[simpl] = ServiceInfo::New();
+        info              = m_srvImplTosrvInfo[simpl] = ServiceInfo::New();
         info->serviceType = stype;
         info->objectImpl  = oimpl;
-        info->factory     = _factory ;
+        info->factory     = _factory;
     }
 
 }
@@ -276,18 +282,18 @@ void ServiceFactory::printInfoMap( const SrvRegContainer & src ) const
     // not thread-safe
 
     //Print information
-    BOOST_FOREACH(SrvRegContainer::value_type srvReg, src)
+    for(SrvRegContainer::value_type srvReg :  src)
     {
         OSLM_DEBUG(" Service name = " << srvReg.first );
         OSLM_DEBUG("  - type   = " << srvReg.second->serviceType );
         OSLM_DEBUG("  - object = " << srvReg.second->objectImpl);
 
         OSLM_DEBUG_IF("  - bundle = " <<  srvReg.second->bundle->getIdentifier(), srvReg.second->bundle );
-        OSLM_DEBUG_IF("  - bundle = ( no bundle registered )", ! srvReg.second->bundle );
+        OSLM_DEBUG_IF("  - bundle = ( no bundle registered )", !srvReg.second->bundle );
 
         OSLM_DEBUG_IF("  - name after creation = "
                       <<  srvReg.second->factory()->getClassname(), srvReg.second->factory );
-        OSLM_DEBUG_IF("  - name after creation = ( no factory registered )", ! srvReg.second->factory );
+        OSLM_DEBUG_IF("  - name after creation = ( no factory registered )", !srvReg.second->factory );
     }
 }
 
@@ -297,9 +303,9 @@ void ServiceFactory::checkServicesNotDeclaredInPluginXml() const
 {
     // not thread-safe
     //Print information
-    BOOST_FOREACH(SrvRegContainer::value_type srvReg, m_srvImplTosrvInfo)
+    for(SrvRegContainer::value_type srvReg :  m_srvImplTosrvInfo)
     {
-        if ( ! srvReg.second->bundle )
+        if ( !srvReg.second->bundle )
         {
             OSLM_WARN("Service " << srvReg.first << " is not declared/found in a plugin.xml." );
         }
@@ -322,7 +328,7 @@ std::vector< std::string > ServiceFactory::getImplementationIdFromObjectAndType(
     std::vector< std::string > serviceImpl;
 
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
-    BOOST_FOREACH(SrvRegContainer::value_type srv, m_srvImplTosrvInfo)
+    for(SrvRegContainer::value_type srv :  m_srvImplTosrvInfo)
     {
         ServiceInfo::sptr srvInfo = srv.second;
         if(srvInfo->serviceType == type
@@ -339,36 +345,36 @@ std::vector< std::string > ServiceFactory::getImplementationIdFromObjectAndType(
 std::string ServiceFactory::getDefaultImplementationIdFromObjectAndType( const std::string& object,
                                                                          const std::string& type ) const
 {
-    SLM_ASSERT("Sorry, this case is not managed ", object != "::fwData::Object" );
+    SLM_ASSERT("This case is not managed ", object != "::fwData::Object" );
 
-    std::string serviceImpl = "";
-    bool genericImplIsFound = false;
+    std::string serviceImpl  = "";
+    bool genericImplIsFound  = false;
     bool specificImplIsFound = false;
 
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
-    BOOST_FOREACH( SrvRegContainer::value_type srv, m_srvImplTosrvInfo )
+    for( SrvRegContainer::value_type srv :  m_srvImplTosrvInfo )
     {
         ServiceInfo::sptr srvInfo = srv.second;
         if ( srvInfo->serviceType == type )
         {
             if ( srvInfo->objectImpl == object )
             {
-                OSLM_ASSERT("Sorry, method has already found a specific ("
+                OSLM_ASSERT("Method has already found a specific ("
                             << serviceImpl <<" != " << srv.first
-                            << ") service for the object (" << srvInfo->objectImpl << ").",
-                            ! specificImplIsFound );
+                            << ") service for the object " << srvInfo->objectImpl << ".",
+                            !specificImplIsFound );
 
                 specificImplIsFound = true;
-                serviceImpl = srv.first;
+                serviceImpl         = srv.first;
             }
             else if ( srvInfo->objectImpl == "::fwData::Object" )
             {
-                OSLM_ASSERT("Sorry, method has already found a generic service for the object ("
+                OSLM_ASSERT("Method has already found a generic service for the object ("
                             << srvInfo->objectImpl << ").",
-                            ! genericImplIsFound );
+                            !genericImplIsFound );
 
                 genericImplIsFound = true;
-                if ( ! specificImplIsFound )
+                if ( !specificImplIsFound )
                 {
                     serviceImpl = srv.first;
                 }
@@ -376,7 +382,7 @@ std::string ServiceFactory::getDefaultImplementationIdFromObjectAndType( const s
         }
     }
 
-    OSLM_ASSERT("Sorry, default implementation is not found for this type of service "<<type, ! serviceImpl.empty() );
+    OSLM_ASSERT("A default implementation is not found for this type of service "<<type, !serviceImpl.empty() );
 
     return serviceImpl;
 }
@@ -453,7 +459,7 @@ bool ServiceFactory::support(const std::string & object, const std::string & srv
     else
     {
         ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
-        BOOST_FOREACH(SrvRegContainer::value_type srv, m_srvImplTosrvInfo)
+        for(SrvRegContainer::value_type srv :  m_srvImplTosrvInfo)
         {
             ServiceInfo::sptr srvInfo = srv.second;
             if(srvInfo->serviceType == srvType
@@ -476,8 +482,8 @@ ServiceFactory::KeyVectorType ServiceFactory::getFactoryKeys() const
     ::fwCore::mt::ReadLock lock(m_srvImplTosrvInfoMutex);
     KeyVectorType vectKeys;
     std::transform( m_srvImplTosrvInfo.begin(), m_srvImplTosrvInfo.end(),
-            std::back_inserter(vectKeys),
-            ::boost::bind(& SrvRegContainer::value_type::first,_1) );
+                    std::back_inserter(vectKeys),
+                    std::bind(&SrvRegContainer::value_type::first, std::placeholders::_1) );
     return vectKeys;
 }
 
diff --git a/SrcLib/core/fwServices/src/fwServices/registry/message/detail.cpp b/SrcLib/core/fwServices/src/fwServices/registry/message/detail.cpp
deleted file mode 100644
index 81813d8..0000000
--- a/SrcLib/core/fwServices/src/fwServices/registry/message/detail.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwCore/util/LazyInstantiator.hpp>
-
-#include "fwServices/registry/message/detail.hpp"
-
-template class  ::fwCore::util::LazyInstantiator< ::fwServices::registry::message::Type >;
-
-namespace fwServices
-{
-
-namespace registry
-{
-
-namespace message
-{
-
-
-struct FwServicesRegistryMessageLazyInstantiatorTag {} ;
-
-SPTR( Type ) get()
-{
-    typedef ::fwCore::util::LazyInstantiator< Type, FwServicesRegistryMessageLazyInstantiatorTag > InstantiatorType;
-    return InstantiatorType::getInstance();
-}
-
-} // namespace message
-
-} // namespace registry
-
-} // namespace fwServices
-
-
diff --git a/SrcLib/core/fwServices/test/CMakeLists.txt b/SrcLib/core/fwServices/test/CMakeLists.txt
index 384db7d..3d32de3 100644
--- a/SrcLib/core/fwServices/test/CMakeLists.txt
+++ b/SrcLib/core/fwServices/test/CMakeLists.txt
@@ -1,10 +1,15 @@
-
 fwLoadProperties()
 
-find_package (Boost REQUIRED)
-find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
 
+find_package(CppUnit)
+find_package(Boost COMPONENTS chrono REQUIRED)
 
+fwInclude(
+    ${Boost_INCLUDE_DIRS}
+    ${CPPUNIT_INCLUDE_DIR}
+)
 
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+)
diff --git a/SrcLib/core/fwServices/test/Properties.cmake b/SrcLib/core/fwServices/test/Properties.cmake
index 4f06233..8c8d400 100644
--- a/SrcLib/core/fwServices/test/Properties.cmake
+++ b/SrcLib/core/fwServices/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwServicesTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwRuntime fwData fwServices )
-set( REQUIREMENTS  )
-
+set( DEPENDENCIES fwCore fwTest fwTools fwRuntime fwData fwServices fwCom fwThread)
+set( REQUIREMENTS servicesReg )
+set(CPPUNITTEST_OPTIONS WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
diff --git a/SrcLib/core/fwServices/test/cppunit.options b/SrcLib/core/fwServices/test/cppunit.options
deleted file mode 100644
index 13826c4..0000000
--- a/SrcLib/core/fwServices/test/cppunit.options
+++ /dev/null
@@ -1,18 +0,0 @@
-CLASSTEST=[
-    'ObjectMsgTest',
-    'ServiceTest',
-    'AppConfigTest',
-    'ServiceConfigTest',
-    'AppConfigParametersTest',
-    'ObjectServiceTest',
-    'ActiveWorkersTest',
-    'SlotsSignalsTest',
-    'SigSlotConnectionTest',
-    'SlotsSignalsStuff',
-    'ProxyTest',
-    ]
-
-USE = ['boost']
-REQUIREMENTS = ['servicesReg']
-LIB = ['fwTools_0-1','fwCore_0-1','fwRuntime_0-3','fwData_0-1','fwServices_0-1','fwTest_0-1']
-CONSOLE='yes'
diff --git a/SrcLib/core/fwServices/test/tu/include/ActiveWorkersTest.hpp b/SrcLib/core/fwServices/test/tu/include/ActiveWorkersTest.hpp
index 451e407..994a2a0 100644
--- a/SrcLib/core/fwServices/test/tu/include/ActiveWorkersTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/ActiveWorkersTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_ACTIVEWORKERSTEST_HPP_
-#define _FWSERVICES_TEST_TU_ACTIVEWORKERSTEST_HPP_
+#ifndef __FWSERVICES_UT_ACTIVEWORKERSTEST_HPP__
+#define __FWSERVICES_UT_ACTIVEWORKERSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -17,9 +17,9 @@ namespace ut
 /// Test ActiveWorkers API
 class ActiveWorkersTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ActiveWorkersTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ActiveWorkersTest );
+CPPUNIT_TEST( basicTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -35,4 +35,4 @@ public:
 } //namespace ut
 } //namespace fwServices
 
-#endif
+#endif //__FWSERVICES_UT_ACTIVEWORKERSTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/AppConfig2Test.hpp b/SrcLib/core/fwServices/test/tu/include/AppConfig2Test.hpp
new file mode 100644
index 0000000..22e80eb
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/include/AppConfig2Test.hpp
@@ -0,0 +1,68 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_UT_APPCONFIG2TEST_HPP__
+#define __FWSERVICES_UT_APPCONFIG2TEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/AppConfigManager2.hpp>
+
+namespace fwServices
+{
+namespace ut
+{
+
+/**
+ * @brief Test .
+ */
+class AppConfig2Test : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( AppConfig2Test );
+CPPUNIT_TEST( parametersConfigTest );
+CPPUNIT_TEST( startStopTest );
+CPPUNIT_TEST( autoConnectTest );
+CPPUNIT_TEST( connectionTest );
+CPPUNIT_TEST( optionalKeyTest );
+CPPUNIT_TEST( keyGroupTest );
+CPPUNIT_TEST( concurentAccessToAppConfig2Test );
+CPPUNIT_TEST_SUITE_END();
+
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void parametersConfigTest();
+    void startStopTest();
+    void autoConnectTest();
+    void connectionTest();
+    void optionalKeyTest();
+    void keyGroupTest();
+    void concurentAccessToAppConfig2Test();
+
+private:
+    ::fwRuntime::ConfigurationElement::sptr buildConfig();
+    ::fwRuntime::ConfigurationElement::sptr buildParametersConfig();
+    ::fwRuntime::ConfigurationElement::sptr buildStartStopConfig();
+    ::fwRuntime::ConfigurationElement::sptr buildAutoConnectTestConfig();
+    ::fwRuntime::ConfigurationElement::sptr buildConnectionConfig();
+    ::fwRuntime::ConfigurationElement::sptr buildOptionalKeyConfig();
+    ::fwRuntime::ConfigurationElement::sptr buildKeyGroupConfig();
+
+
+    ::fwServices::AppConfigManager2::sptr launchAppConfigMgr(const std::string &name,
+                                                             const ::fwRuntime::ConfigurationElement::csptr& config);
+
+    ::fwServices::AppConfigManager2::sptr m_appConfigMgr;
+};
+
+} //namespace ut
+} //namespace fwServices
+
+#endif // __FWSERVICES_UT_APPCONFIG2TEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/AppConfigParametersTest.hpp b/SrcLib/core/fwServices/test/tu/include/AppConfigParametersTest.hpp
index ace9aee..888c013 100644
--- a/SrcLib/core/fwServices/test/tu/include/AppConfigParametersTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/AppConfigParametersTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_APPCONFIGPARAMETERS_HPP_
-#define _FWSERVICES_TEST_TU_APPCONFIGPARAMETERS_HPP_
+#ifndef __FWSERVICES_UT_APPCONFIGPARAMETERSTEST_HPP__
+#define __FWSERVICES_UT_APPCONFIGPARAMETERSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwRuntime/EConfigurationElement.hpp>
@@ -20,10 +20,10 @@ namespace ut
  */
 class AppConfigParametersTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( AppConfigParametersTest );
-    CPPUNIT_TEST( appConfigParametersTest );
-    CPPUNIT_TEST( concurentAccessToAppConfigParametersTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( AppConfigParametersTest );
+CPPUNIT_TEST( appConfigParametersTest );
+CPPUNIT_TEST( concurentAccessToAppConfigParametersTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -41,4 +41,4 @@ public:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_APPCONFIGPARAMETERS_HPP_
+#endif // __FWSERVICES_UT_APPCONFIGPARAMETERSTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/AppConfigTest.hpp b/SrcLib/core/fwServices/test/tu/include/AppConfigTest.hpp
index 87ca04c..bd611cf 100644
--- a/SrcLib/core/fwServices/test/tu/include/AppConfigTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/AppConfigTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_APPCONFIGTEST_HPP_
-#define _FWSERVICES_TEST_TU_APPCONFIGTEST_HPP_
+#ifndef __FWSERVICES_UT_APPCONFIGTEST_HPP__
+#define __FWSERVICES_UT_APPCONFIGTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwRuntime/EConfigurationElement.hpp>
@@ -20,10 +20,10 @@ namespace ut
  */
 class AppConfigTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( AppConfigTest );
-    CPPUNIT_TEST( parametersConfigTest );
-    CPPUNIT_TEST( concurentAccessToAppConfigTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( AppConfigTest );
+CPPUNIT_TEST( parametersConfigTest );
+CPPUNIT_TEST( concurentAccessToAppConfigTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -44,4 +44,4 @@ private:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_APPCONFIGTEST_HPP_
+#endif // __FWSERVICES_UT_APPCONFIGTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp b/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp
new file mode 100644
index 0000000..7338df7
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/include/ConfigParserTest.hpp
@@ -0,0 +1,58 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_UT_CONFIGPARSERTEST_HPP__
+#define __FWSERVICES_UT_CONFIGPARSERTEST_HPP__
+
+#include <fwCore/base.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+namespace fwServices
+{
+namespace ut
+{
+
+/**
+ * @brief   Test ProcessObject building from a ConfigurationElement and composite message.
+ * @see     ICompositeParser
+ * @see     CompositeEditor
+ */
+class ConfigParserTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( ConfigParserTest );
+CPPUNIT_TEST( testObjectCreationWithConfig );
+CPPUNIT_TEST( testBuildComposite );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp();
+    void tearDown();
+
+    /// test object with services creation from a configuration
+    void testObjectCreationWithConfig();
+
+    /// Test the composite building
+    void testBuildComposite();
+
+private:
+    /// Create a configurationElement to build an object
+    ::fwRuntime::ConfigurationElement::sptr buildObjectConfig();
+
+    /// Create a configurationElement to build the composite
+    ::fwRuntime::ConfigurationElement::sptr buildCompositeConfig();
+};
+
+} //namespace ut
+} //namespace fwServices
+
+#endif // __FWSERVICES_UT_CONFIGPARSERTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/ObjectMsgTest.hpp b/SrcLib/core/fwServices/test/tu/include/ObjectMsgTest.hpp
deleted file mode 100644
index d076d86..0000000
--- a/SrcLib/core/fwServices/test/tu/include/ObjectMsgTest.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSERVICES_TEST_TU_OBJECTMSGTEST_HPP_
-#define _FWSERVICES_TEST_TU_OBJECTMSGTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-namespace fwServices
-{
-namespace ut
-{
-
-/**
- * @brief   Test ObjectMsg API
- */
-class ObjectMsgTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( ObjectMsgTest );
-    CPPUNIT_TEST( testObjectMsg );
-    CPPUNIT_TEST_SUITE_END();
-
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-    // fonctions de tests
-
-    /// Test using ObjectMsg API
-    void testObjectMsg();
-
-};
-
-} //namespace ut
-} //namespace fwServices
-
-#endif
diff --git a/SrcLib/core/fwServices/test/tu/include/ObjectServiceTest.hpp b/SrcLib/core/fwServices/test/tu/include/ObjectServiceTest.hpp
index 51c9428..63f7c10 100644
--- a/SrcLib/core/fwServices/test/tu/include/ObjectServiceTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/ObjectServiceTest.hpp
@@ -1,15 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_OBJECTSERVICETEST_HPP_
-#define _FWSERVICES_TEST_TU_OBJECTSERVICETEST_HPP_
+#ifndef __FWSERVICES_UT_OBJECTSERVICETEST_HPP__
+#define __FWSERVICES_UT_OBJECTSERVICETEST_HPP__
 
-#include <cppunit/extensions/HelperMacros.h>
+#include <fwData/Object.hpp>
 #include <fwRuntime/EConfigurationElement.hpp>
 
+#include <cppunit/extensions/HelperMacros.h>
+#include <condition_variable>
+#include <mutex>
+
 namespace fwServices
 {
 namespace ut
@@ -20,10 +24,12 @@ namespace ut
  */
 class ObjectServiceTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ObjectServiceTest );
-    CPPUNIT_TEST( swapTest );
-    CPPUNIT_TEST( registerTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ObjectServiceTest );
+CPPUNIT_TEST( swapTest );
+CPPUNIT_TEST( registerTest );
+CPPUNIT_TEST( registerKeyTest );
+CPPUNIT_TEST( registerConnectionTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -33,9 +39,22 @@ public:
 
     void swapTest();
     void registerTest();
+    void registerKeyTest();
+    void registerConnectionTest();
+
+private:
+    void registerService(::fwData::Object::sptr obj, const std::string& id);
+    void unregisterService(::fwData::Object::sptr obj, const std::string& id);
+
+    /// Synchronization with slots
+    std::mutex m_mutex;
+    std::condition_variable m_condition;
+
+    std::string m_ret;
+    ::fwData::Object::csptr m_obj;
 };
 
 } //namespace ut
 } //namespace fwServices
 
-#endif //_FWSERVICES_TEST_TU_OBJECTSERVICETEST_HPP_
+#endif //__FWSERVICES_UT_OBJECTSERVICETEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/ProxyTest.hpp b/SrcLib/core/fwServices/test/tu/include/ProxyTest.hpp
index 4e6e100..1444de4 100644
--- a/SrcLib/core/fwServices/test/tu/include/ProxyTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/ProxyTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_PROXYTEST_HPP_
-#define _FWSERVICES_TEST_TU_PROXYTEST_HPP_
+#ifndef __FWSERVICES_UT_PROXYTEST_HPP__
+#define __FWSERVICES_UT_PROXYTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -17,9 +17,9 @@ namespace ut
 /// Test ActiveWorkers API
 class ProxyTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ProxyTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ProxyTest );
+CPPUNIT_TEST( basicTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -35,4 +35,4 @@ public:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_PROXYTEST_HPP_
+#endif // __FWSERVICES_UT_PROXYTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/ServiceConfigTest.hpp b/SrcLib/core/fwServices/test/tu/include/ServiceConfigTest.hpp
index 7a3d9e5..a5131dd 100644
--- a/SrcLib/core/fwServices/test/tu/include/ServiceConfigTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/ServiceConfigTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_APPCONFIGTEST_HPP_
-#define _FWSERVICES_TEST_TU_APPCONFIGTEST_HPP_
+#ifndef __FWSERVICES_UT_SERVICECONFIGTEST_HPP__
+#define __FWSERVICES_UT_SERVICECONFIGTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwRuntime/EConfigurationElement.hpp>
@@ -20,10 +20,10 @@ namespace ut
  */
 class ServiceConfigTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ServiceConfigTest );
-    CPPUNIT_TEST( serviceConfigTest );
-    CPPUNIT_TEST( concurentAccessToServiceConfigTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ServiceConfigTest );
+CPPUNIT_TEST( serviceConfigTest );
+CPPUNIT_TEST( concurentAccessToServiceConfigTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -43,4 +43,4 @@ private:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_APPCONFIGTEST_HPP_
+#endif // __FWSERVICES_UT_SERVICECONFIGTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/ServiceTest.hpp b/SrcLib/core/fwServices/test/tu/include/ServiceTest.hpp
index e9c5104..5c2d4a2 100644
--- a/SrcLib/core/fwServices/test/tu/include/ServiceTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/ServiceTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_SERVICETEST_HPP_
-#define _FWSERVICES_TEST_TU_SERVICETEST_HPP_
+#ifndef __FWSERVICES_UT_SERVICETEST_HPP__
+#define __FWSERVICES_UT_SERVICETEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwRuntime/EConfigurationElement.hpp>
@@ -21,13 +21,14 @@ namespace ut
  */
 class ServiceTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ServiceTest );
-    CPPUNIT_TEST( testServiceCreation );
-    CPPUNIT_TEST( testServiceCreationWithTemplateMethods );
-    CPPUNIT_TEST( testServiceCreationWithUUID );
-    CPPUNIT_TEST( testStartStopUpdate );
-    CPPUNIT_TEST( testCommunication );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ServiceTest );
+CPPUNIT_TEST( testServiceCreation );
+CPPUNIT_TEST( testServiceCreationWithMultipleData );
+CPPUNIT_TEST( testServiceCreationWithTemplateMethods );
+CPPUNIT_TEST( testServiceCreationWithUUID );
+CPPUNIT_TEST( testStartStopUpdate );
+CPPUNIT_TEST( testCommunication );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -41,6 +42,9 @@ public:
     /// Test add and remove service
     void testServiceCreation();
 
+    /// Test add and remove service with multiple associated data
+    void testServiceCreationWithMultipleData();
+
     /// Test add and remove service using template methods
     void testServiceCreationWithTemplateMethods();
 
@@ -61,69 +65,8 @@ private:
     ::fwRuntime::ConfigurationElement::sptr buildObjectConfig();
 };
 
-
-/**
- * @brief Service interface for test
- */
-class TestService : public ::fwServices::IService
-{
-
-public :
-
-    fwCoreServiceClassDefinitionsMacro ( (TestService)(::fwServices::IService) ) ;
-    TestService() throw()
-    :   m_isUpdated(false),
-        m_isUpdatedMessage(false)
-        {};
-
-    virtual ~TestService() throw() {};
-
-    virtual void configuring() throw( ::fwTools::Failed ) {};
-    virtual void starting() throw(::fwTools::Failed) {};
-    virtual void stopping() throw(::fwTools::Failed) {};
-    virtual void updating() throw(::fwTools::Failed) {};
-    virtual void info(std::ostream &_sstream ) {_sstream << "TestService" ;};
-
-    /// return true if the service is updated with update() method
-    bool getIsUpdated() { return m_isUpdated; };
-
-    /// return true if the service is updated with update(msg) method
-    bool getIsUpdatedMessage() { return m_isUpdatedMessage; };
-
-protected:
-    bool m_isUpdated;
-    bool m_isUpdatedMessage;
-};
-
-
-/**
- * @brief Service implementation for test
- */
-class TestServiceImplementation : public TestService
-{
-
-public :
-    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementation)(::fwServices::ut::TestService) ) ;
-    TestServiceImplementation() throw() {};
-    virtual ~TestServiceImplementation() throw() {};
-
-    virtual void configuring() throw( ::fwTools::Failed ) {};
-    virtual void starting() throw(::fwTools::Failed) {};
-    virtual void stopping() throw(::fwTools::Failed) {};
-    virtual void updating() throw(::fwTools::Failed)
-    {
-        m_isUpdated = true;
-    };
-
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw(::fwTools::Failed)
-    {
-        m_isUpdatedMessage = true;
-    };
-
-    virtual void info(std::ostream &_sstream ) {_sstream << "TestServiceImplementation" ;};
-};
-
 } //namespace ut
 } //namespace fwServices
 
-#endif
+#endif // __FWSERVICES_UT_SERVICETEST_HPP__
+
diff --git a/SrcLib/core/fwServices/test/tu/include/SigSlotConnectionTest.hpp b/SrcLib/core/fwServices/test/tu/include/SigSlotConnectionTest.hpp
index 7b70849..d53c55b 100644
--- a/SrcLib/core/fwServices/test/tu/include/SigSlotConnectionTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/SigSlotConnectionTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_SIGSLOTCONNECTIONTEST_HPP_
-#define _FWSERVICES_TEST_TU_SIGSLOTCONNECTIONTEST_HPP_
+#ifndef __FWSERVICES_UT_SIGSLOTCONNECTIONTEST_HPP__
+#define __FWSERVICES_UT_SIGSLOTCONNECTIONTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,9 +16,9 @@ namespace ut
 
 class SigSlotConnectionTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SigSlotConnectionTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SigSlotConnectionTest );
+CPPUNIT_TEST( basicTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -32,4 +32,4 @@ public:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_SIGSLOTCONNECTIONTEST_HPP_
+#endif // __FWSERVICES_UT_SIGSLOTCONNECTIONTEST_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp b/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp
index 1e3d0e4..7efcbf4 100644
--- a/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/SlotsSignalsStuff.hpp
@@ -1,19 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_SLOTSSIGNALSSTUFF_HPP_
-#define _FWSERVICES_TEST_TU_SLOTSSIGNALSSTUFF_HPP_
+#ifndef __FWSERVICES_UT_SLOTSSIGNALSSTUFF_HPP__
+#define __FWSERVICES_UT_SLOTSSIGNALSSTUFF_HPP__
 
-#include <boost/chrono/duration.hpp>
+#include <fwServices/IService.hpp>
 
 #include <fwCom/Signals.hpp>
-
 #include <fwData/Object.hpp>
 
-#include <fwServices/IService.hpp>
+#include <boost/chrono/duration.hpp>
 
 namespace fwServices
 {
@@ -33,7 +32,8 @@ public:
         m_updateRetarder(500),
         m_receiveRetarder(500),
         m_swapRetarder(500)
-    {}
+    {
+    }
 
     ::boost::chrono::milliseconds m_startRetarder;
     ::boost::chrono::milliseconds m_stopRetarder;
@@ -48,14 +48,20 @@ class Buffer : public ::fwData::Object
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (Buffer)(::fwData::Object),
-            (()),
-            ::fwData::factory::New< Buffer >);
-
-    Buffer( ::fwData::Object::Key key ){}
-    ~Buffer(){}
-
-    void cachedDeepCopy( const Object::csptr& _source, DeepCopyCacheType &cache ){}
+        (Buffer)(::fwData::Object),
+        (()),
+        ::fwData::factory::New< Buffer >);
+
+    Buffer( ::fwData::Object::Key key )
+    {
+    }
+    ~Buffer()
+    {
+    }
+
+    void cachedDeepCopy( const Object::csptr& _source, DeepCopyCacheType &cache )
+    {
+    }
 };
 
 //------------------------------------------------------------------------------
@@ -63,14 +69,15 @@ public:
 class IBasicTest : public ::fwServices::IService
 {
 public:
-    fwCoreServiceClassDefinitionsMacro ( (IBasicTest)(::fwServices::IService) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (IBasicTest)(::fwServices::IService) );
 };
 
-class SBasicTest : public IBasicTest, public ServiceRetarder
+class SBasicTest : public IBasicTest,
+                   public ServiceRetarder
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SBasicTest)(IBasicTest) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SBasicTest)(IBasicTest) );
 
     bool m_updateFinished;
     bool m_swapFinished;
@@ -79,12 +86,13 @@ public:
 
 protected:
 
-    virtual void configuring() throw ( ::fwTools::Failed ){}
+    virtual void configuring() throw ( ::fwTools::Failed )
+    {
+    }
     virtual void starting() throw ( ::fwTools::Failed );
     virtual void stopping() throw ( ::fwTools::Failed );
     virtual void swapping() throw ( ::fwTools::Failed );
     virtual void updating() throw ( ::fwTools::Failed );
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed ){}
 };
 
 //------------------------------------------------------------------------------
@@ -93,18 +101,27 @@ class SReaderTest : public IBasicTest
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SReaderTest)(IBasicTest) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SReaderTest)(IBasicTest) );
 
-    SReaderTest(){};
+    SReaderTest()
+    {
+    }
 
 protected:
 
-    virtual void configuring() throw ( ::fwTools::Failed ){}
-    virtual void starting() throw ( ::fwTools::Failed ){}
-    virtual void stopping() throw ( ::fwTools::Failed ){}
-    virtual void swapping() throw ( ::fwTools::Failed ){};
+    virtual void configuring() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void stopping() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void swapping() throw ( ::fwTools::Failed )
+    {
+    }
     virtual void updating() throw ( ::fwTools::Failed );
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed ){}
 };
 
 //------------------------------------------------------------------------------
@@ -115,7 +132,7 @@ public:
 
     typedef ::fwCom::Signal< void () > ChangedSignalType;
 
-    fwCoreServiceClassDefinitionsMacro ( (SReader2Test)(IBasicTest) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SReader2Test)(IBasicTest) );
 
     SReader2Test();
 
@@ -123,23 +140,31 @@ public:
 
 protected:
 
-    virtual void configuring() throw ( ::fwTools::Failed ){}
-    virtual void starting() throw ( ::fwTools::Failed ){}
-    virtual void stopping() throw ( ::fwTools::Failed ){}
-    virtual void swapping() throw ( ::fwTools::Failed ){};
+    virtual void configuring() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void stopping() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void swapping() throw ( ::fwTools::Failed )
+    {
+    }
     virtual void updating() throw ( ::fwTools::Failed );
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed ){}
 
     ChangedSignalType::sptr m_sigChanged;
 };
 
 //------------------------------------------------------------------------------
 
-class SShowTest : public IBasicTest, public ServiceRetarder
+class SShowTest : public IBasicTest,
+                  public ServiceRetarder
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SShowTest)(IBasicTest) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SShowTest)(IBasicTest) );
 
 
     SShowTest();
@@ -150,16 +175,23 @@ public:
     void change();
 
     static const ::fwCom::Slots::SlotKeyType s_CHANGE_SLOT;
-    typedef ::fwCom::Slot<void()> ChangeSlotType;
+    typedef ::fwCom::Slot<void ()> ChangeSlotType;
 
 protected:
 
-    virtual void configuring() throw ( ::fwTools::Failed ){}
-    virtual void starting() throw ( ::fwTools::Failed ){}
-    virtual void stopping() throw ( ::fwTools::Failed ){}
-    virtual void swapping() throw ( ::fwTools::Failed ){}
-    virtual void updating() throw ( ::fwTools::Failed ){}
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
+    virtual void configuring() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void stopping() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void swapping() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void updating() throw ( ::fwTools::Failed );
 
     ChangeSlotType::sptr m_slotChange;
 
@@ -168,12 +200,14 @@ protected:
 
 //------------------------------------------------------------------------------
 
-class SShow2Test : public IBasicTest, public ServiceRetarder
+class SShow2Test : public IBasicTest,
+                   public ServiceRetarder
 {
 public:
 
-    fwCoreServiceClassDefinitionsMacro ( (SShow2Test)(IBasicTest) ) ;
+    fwCoreServiceClassDefinitionsMacro ( (SShow2Test)(IBasicTest) );
 
+    static const ::fwCom::Slots::SlotKeyType s_UPDATE_BUFFER_SLOT;
 
     SShow2Test();
 
@@ -181,12 +215,22 @@ public:
 
 protected:
 
-    virtual void configuring() throw ( ::fwTools::Failed ){}
-    virtual void starting() throw ( ::fwTools::Failed ){}
-    virtual void stopping() throw ( ::fwTools::Failed ){}
-    virtual void swapping() throw ( ::fwTools::Failed ){}
+    virtual void configuring() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void stopping() throw ( ::fwTools::Failed )
+    {
+    }
+    virtual void swapping() throw ( ::fwTools::Failed )
+    {
+    }
     virtual void updating() throw ( ::fwTools::Failed );
-    virtual void receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed );
+
+    /// Slot to receive update
+    void updateBuffer();
 };
 
 //------------------------------------------------------------------------------
@@ -194,4 +238,4 @@ protected:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_SLOTSSIGNALSSTUFF_HPP_
+#endif // __FWSERVICES_UT_SLOTSSIGNALSSTUFF_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/SlotsSignalsTest.hpp b/SrcLib/core/fwServices/test/tu/include/SlotsSignalsTest.hpp
index 23b3c44..0e65e82 100644
--- a/SrcLib/core/fwServices/test/tu/include/SlotsSignalsTest.hpp
+++ b/SrcLib/core/fwServices/test/tu/include/SlotsSignalsTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWSERVICES_TEST_TU_SLOTSSIGNALSTEST_HPP_
-#define _FWSERVICES_TEST_TU_SLOTSSIGNALSTEST_HPP_
+#ifndef __FWSERVICES_UT_SLOTSSIGNALSTEST_HPP__
+#define __FWSERVICES_UT_SLOTSSIGNALSTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -16,6 +16,7 @@ namespace ut
 
 class SlotsSignalsTest : public CPPUNIT_NS::TestFixture
 {
+private:
     CPPUNIT_TEST_SUITE( SlotsSignalsTest );
     CPPUNIT_TEST( basicTest );
     CPPUNIT_TEST( comObjectServiceTest );
@@ -39,4 +40,6 @@ public:
 } //namespace ut
 } //namespace fwServices
 
-#endif // _FWSERVICES_TEST_TU_SLOTSSIGNALSTEST_HPP_
+#endif // __FWSERVICES_UT_SLOTSSIGNALSTEST_HPP__
+
+
diff --git a/SrcLib/core/fwServices/test/tu/include/TestService.hpp b/SrcLib/core/fwServices/test/tu/include/TestService.hpp
new file mode 100644
index 0000000..3f6b7cf
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/include/TestService.hpp
@@ -0,0 +1,284 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_UT_TESTSERVICE_HPP__
+#define __FWSERVICES_UT_TESTSERVICE_HPP__
+
+#include <fwServices/IService.hpp>
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Image.hpp>
+
+namespace fwServices
+{
+namespace ut
+{
+
+/**
+ * @brief Service interface for test
+ */
+class TestService : public ::fwServices::IService
+{
+
+public:
+
+    fwCoreServiceClassDefinitionsMacro ( (TestService)(::fwServices::IService) );
+    TestService() throw() :
+        m_isUpdated(false),
+        m_isUpdated2(false),
+        m_isUpdatedMessage(false)
+    {
+    }
+
+    virtual ~TestService() throw()
+    {
+    }
+
+    virtual void configuring() throw( ::fwTools::Failed ) final
+    {
+    }
+    virtual void starting() throw(::fwTools::Failed)override
+    {
+    }
+    virtual void stopping() throw(::fwTools::Failed) final
+    {
+    }
+    virtual void updating() throw(::fwTools::Failed)override
+    {
+    }
+    virtual void info(std::ostream& _sstream )
+    {
+        _sstream << "TestService";
+    }
+
+    /// return true if the service is updated with update() method
+    bool getIsUpdated() const
+    {
+        return m_isUpdated;
+    }
+
+    /// return true if the service is updated with update() method
+    bool getIsUpdated2() const
+    {
+        return m_isUpdated2;
+    }
+
+
+    /// return true if the service is updated with update(msg) method
+    bool getIsUpdatedMessage() const
+    {
+        return m_isUpdatedMessage;
+    }
+
+    /// return true if the service is updated with update() method
+    void resetIsUpdated()
+    {
+        m_isUpdated = false;
+    }
+
+    /// return true if the service is updated with update() method
+    void resetIsUpdated2()
+    {
+        m_isUpdated2 = false;
+    }
+
+protected:
+    bool m_isUpdated;
+    bool m_isUpdatedMessage;
+    bool m_isUpdated2;
+};
+
+/**
+ * @brief Service implementation for test
+ */
+class TestServiceImplementation : public TestService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementation)(::fwServices::ut::TestService) );
+
+    /// Keys to register Signal
+    static const ::fwCom::Signals::SignalKeyType s_MSG_SENT_SIG;
+    /// Keys to register Slot
+    static const ::fwCom::Slots::SlotKeyType s_RECEIVE_MSG_SLOT;
+    static const ::fwCom::Slots::SlotKeyType s_UPDATE2_SLOT;
+
+    /// Type os signal
+    typedef ::fwCom::Signal< void (std::string)> MsgSentSignalType;
+
+    //-------------------------------------------------------------------------
+    TestServiceImplementation() throw()
+    {
+        newSignal<MsgSentSignalType>(s_MSG_SENT_SIG);
+        newSlot(s_RECEIVE_MSG_SLOT, &TestServiceImplementation::receiveMsg, this);
+        newSlot(s_UPDATE2_SLOT, &TestServiceImplementation::update2, this);
+    }
+    //-------------------------------------------------------------------------
+    virtual ~TestServiceImplementation() throw()
+    {
+    }
+
+    //-------------------------------------------------------------------------
+    virtual void starting() throw(::fwTools::Failed) final
+    {
+    }
+
+    //-------------------------------------------------------------------------
+    virtual void updating() throw(::fwTools::Failed)override
+    {
+        m_isUpdated = true;
+    }
+
+    //-------------------------------------------------------------------------
+    void update2() throw(::fwTools::Failed)
+    {
+        m_isUpdated2 = true;
+    }
+
+    //-------------------------------------------------------------------------
+    virtual void swapping(const KeyType& key) throw(::fwTools::Failed)override
+    {
+        m_swappedObjectKey = key;
+        m_swappedObject    = this->getInput< ::fwData::Object>(key);
+    }
+
+    //-------------------------------------------------------------------------
+    void receiveMsg(std::string msg)
+    {
+        m_isUpdatedMessage = true;
+    }
+
+    //-------------------------------------------------------------------------
+    virtual void info(std::ostream& _sstream ) override
+    {
+        _sstream << "TestServiceImplementation";
+    }
+
+    //-------------------------------------------------------------------------
+
+    const std::string& getSwappedObjectKey() const
+    {
+        return m_swappedObjectKey;
+    }
+
+    //-------------------------------------------------------------------------
+
+    ::fwData::Object::csptr getSwappedObject() const
+    {
+        return m_swappedObject;
+    }
+
+    //-------------------------------------------------------------------------
+
+private:
+    std::string m_swappedObjectKey;
+    ::fwData::Object::csptr m_swappedObject;
+};
+
+/**
+ * @brief Service implementation for test
+ */
+class TestServiceImplementation2 : public TestService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementation2)(::fwServices::ut::TestService) );
+
+    //-------------------------------------------------------------------------
+    TestServiceImplementation2() throw()
+    {
+    }
+    //-------------------------------------------------------------------------
+    virtual ~TestServiceImplementation2() throw()
+    {
+    }
+};
+
+/**
+ * @brief Service implementation for autoconnect test
+ */
+class TestSrvAutoconnect : public TestService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (TestSrvAutoconnect)(::fwServices::ut::TestService) );
+
+    /// Keys to register Signal
+    static const ::fwCom::Signals::SignalKeyType s_SIG_1;
+    /// Keys to register Slot
+    static const ::fwCom::Slots::SlotKeyType s_SLOT_1;
+
+    /// Type os signal
+    typedef ::fwCom::Signal< void (int)> MsgSentSignalType;
+
+    //-------------------------------------------------------------------------
+
+    TestSrvAutoconnect() throw() :
+        m_received(false)
+    {
+        newSignal<MsgSentSignalType>(s_SIG_1);
+        newSlot(s_SLOT_1, &TestSrvAutoconnect::receiveSlot, this);
+    }
+    //-------------------------------------------------------------------------
+    virtual ~TestSrvAutoconnect() throw()
+    {
+    }
+    //-------------------------------------------------------------------------
+
+    virtual void updating() throw(::fwTools::Failed)override
+    {
+        m_isUpdated = true;
+    }
+    //-------------------------------------------------------------------------
+
+    virtual void info(std::ostream& _sstream ) override
+    {
+        _sstream << "TestSrvAutoconnect";
+    }
+    //-------------------------------------------------------------------------
+    void receiveSlot()
+    {
+        m_received = true;
+    }
+    //-------------------------------------------------------------------------
+
+    void resetReceive()
+    {
+        m_received = false;
+    }
+    //-------------------------------------------------------------------------
+
+    bool getReceived() const
+    {
+        return m_received;
+    }
+    //-------------------------------------------------------------------------
+
+    virtual IService::KeyConnectionsMap getAutoConnections() const override
+    {
+        KeyConnectionsMap connections;
+        connections.push("data1", ::fwData::Object::s_MODIFIED_SIG, s_UPDATE_SLOT);
+        connections.push("data2", ::fwData::Object::s_MODIFIED_SIG, s_SLOT_1);
+        connections.push("data3", ::fwData::Object::s_MODIFIED_SIG, s_SLOT_1);
+        connections.push("dataGroup1", ::fwData::Image::s_BUFFER_MODIFIED_SIG, s_UPDATE_SLOT);
+
+        return connections;
+    }
+    //-------------------------------------------------------------------------
+
+private:
+
+    int m_received;
+};
+
+} //namespace ut
+} //namespace fwServices
+
+#endif //__FWSERVICES_UT_TESTSERVICE_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/include/TestServices.hpp b/SrcLib/core/fwServices/test/tu/include/TestServices.hpp
new file mode 100644
index 0000000..cf9d1c0
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/include/TestServices.hpp
@@ -0,0 +1,130 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSERVICES_UT_TESTSERVICES_HPP__
+#define __FWSERVICES_UT_TESTSERVICES_HPP__
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+namespace fwServices
+{
+namespace ut
+{
+
+/**
+ * @brief   Service type for test.
+ */
+class TestService : public ::fwServices::IService
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (TestService)(::fwServices::IService) );
+    TestService() throw()
+        :   m_isUpdated(false)
+    {
+    }
+
+    virtual ~TestService() throw()
+    {
+    }
+
+    /// return true if the service is updated with updating() method
+    bool getIsUpdated()
+    {
+        return m_isUpdated;
+    }
+
+protected:
+    virtual void configuring() throw( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
+    virtual void updating() throw(::fwTools::Failed)
+    {
+    }
+    virtual void info( std::ostream& _sstream )
+    {
+        _sstream << "TestService";
+    }
+
+    bool m_isUpdated;
+};
+
+/**
+ * @brief   Test service implementation for composite
+ */
+class TestServiceImplementationComposite : public TestService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementationComposite)(::fwServices::ut::TestService) );
+    TestServiceImplementationComposite() throw()
+    {
+    }
+    virtual ~TestServiceImplementationComposite() throw()
+    {
+    }
+
+    virtual void configuring() throw( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+        SLM_TRACE_FUNC();
+    }
+    virtual void updating() throw(::fwTools::Failed)
+    {
+        m_isUpdated = true;
+    }
+};
+
+/**
+ * @brief   Test service implementation for image
+ */
+class TestServiceImplementationImage : public TestService
+{
+
+public:
+    fwCoreServiceClassDefinitionsMacro ( (TestServiceImplementationImage)(::fwServices::ut::TestService) );
+    TestServiceImplementationImage() throw()
+    {
+    }
+    virtual ~TestServiceImplementationImage() throw()
+    {
+    }
+
+    virtual void configuring() throw( ::fwTools::Failed )
+    {
+    }
+    virtual void starting() throw(::fwTools::Failed)
+    {
+    }
+    virtual void stopping() throw(::fwTools::Failed)
+    {
+    }
+    virtual void updating() throw(::fwTools::Failed)
+    {
+        m_isUpdated = true;
+    }
+
+};
+
+} //namespace ut
+} //namespace fwServices
+
+#endif // __FWSERVICES_UT_TESTSERVICES_HPP__
diff --git a/SrcLib/core/fwServices/test/tu/rc/AppConfigParametersTest/plugin.xml b/SrcLib/core/fwServices/test/tu/rc/AppConfigParametersTest/plugin.xml
index ca1e7c5..2860dd3 100644
--- a/SrcLib/core/fwServices/test/tu/rc/AppConfigParametersTest/plugin.xml
+++ b/SrcLib/core/fwServices/test/tu/rc/AppConfigParametersTest/plugin.xml
@@ -1,4 +1,4 @@
-<plugin id="AppConfigParametersTest">
+<plugin id="AppConfigParametersTest" version="@DASH_VERSION@" >
 
     <requirement id="servicesReg" />
 
diff --git a/SrcLib/core/fwServices/test/tu/src/ActiveWorkersTest.cpp b/SrcLib/core/fwServices/test/tu/src/ActiveWorkersTest.cpp
index 6231de9..b222900 100644
--- a/SrcLib/core/fwServices/test/tu/src/ActiveWorkersTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ActiveWorkersTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -37,20 +37,20 @@ void ActiveWorkersTest::basicTest()
     using namespace ::fwServices::registry;
 
     ActiveWorkers::sptr activeWorkers = ActiveWorkers::getDefault();
-    CPPUNIT_ASSERT( ! activeWorkers->getWorker( ActiveWorkers::s_DEFAULT_WORKER ) );
+    CPPUNIT_ASSERT( !activeWorkers->getWorker( ActiveWorkers::s_DEFAULT_WORKER ) );
 
     activeWorkers->initRegistry();
     CPPUNIT_ASSERT( activeWorkers->getWorker( ActiveWorkers::s_DEFAULT_WORKER ) );
 
-    CPPUNIT_ASSERT( ! activeWorkers->getWorker( "Wrong_id" ) );
+    CPPUNIT_ASSERT( !activeWorkers->getWorker( "Wrong_id" ) );
 
     ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
     activeWorkers->addWorker("another_worker",worker);
     CPPUNIT_ASSERT( activeWorkers->getWorker( "another_worker" ) );
 
     activeWorkers->clearRegistry();
-    CPPUNIT_ASSERT( ! activeWorkers->getWorker( "another_worker" ) );
-    CPPUNIT_ASSERT( ! activeWorkers->getWorker( ActiveWorkers::s_DEFAULT_WORKER ) );
+    CPPUNIT_ASSERT( !activeWorkers->getWorker( "another_worker" ) );
+    CPPUNIT_ASSERT( !activeWorkers->getWorker( ActiveWorkers::s_DEFAULT_WORKER ) );
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp b/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp
new file mode 100644
index 0000000..291198c
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/src/AppConfig2Test.cpp
@@ -0,0 +1,1711 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "AppConfig2Test.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Image.hpp>
+
+#include <fwRuntime/Bundle.hpp>
+#include <fwRuntime/Runtime.hpp>
+
+#include "fwServices/registry/ActiveWorkers.hpp"
+#include <fwServices/registry/AppConfig2.hpp>
+#include <fwServices/registry/ObjectService.hpp>
+
+#include <fwTest/helper/Thread.hpp>
+
+#include <TestService.hpp>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::AppConfig2Test );
+
+namespace fwServices
+{
+namespace ut
+{
+
+// Wait at worst 1s for a given condition
+#define WAIT(cond) \
+    ::fwCore::TimeStamp BOOST_PP_CAT(timeStamp, __LINE__); \
+    BOOST_PP_CAT(timeStamp, __LINE__).setLifePeriod(1000); \
+    BOOST_PP_CAT(timeStamp, __LINE__).modified(); \
+    while(!(cond) && !BOOST_PP_CAT(timeStamp, __LINE__).periodExpired()) \
+    { \
+        std::this_thread::sleep_for( std::chrono::milliseconds(1)); \
+    }
+
+#define WAIT_SERVICE_STARTED(srv)  \
+    WAIT(::fwTools::fwID::getObject(srv) != nullptr && \
+         ::fwServices::IService::dynamicCast(::fwTools::fwID::getObject(srv))->getStatus() \
+         == ::fwServices::IService::STARTED)
+
+void AppConfig2Test::setUp()
+{
+    // Set up context before running a test.
+
+    ::fwServices::registry::ActiveWorkers::sptr activeWorkers = ::fwServices::registry::ActiveWorkers::getDefault();
+    activeWorkers->initRegistry();
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::tearDown()
+{
+    // Clean up after the test run.
+    if(m_appConfigMgr)
+    {
+        // If everything went well, the manager should have been destroyed
+        // This means a test failed, thus we need to clean everything properly, otherwise
+        // We will get an assert from the destructor and we will not get the cppunit report in the console
+        m_appConfigMgr->stopAndDestroy();
+        m_appConfigMgr = nullptr;
+    }
+
+    ::fwServices::registry::ActiveWorkers::sptr activeWorkers = ::fwServices::registry::ActiveWorkers::getDefault();
+    activeWorkers->clearRegistry();
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::parametersConfigTest()
+{
+    ::fwServices::registry::AppConfig2::sptr currentAppConfig = ::fwServices::registry::AppConfig2::getDefault();
+
+    const std::string configId(::fwServices::registry::AppConfig2::getUniqueIdentifier());
+    const std::string group("parametersGroup");
+    const std::string desc("Description");
+    const std::string bundleId("dataReg");
+    const std::string bundleVersion("0-1");
+    ::fwServices::registry::AppInfo::ParametersType parameters;
+
+    parameters["TEST_IMAGE"]   = "";
+    parameters["UID_SERVICE2"] = "myTestService2";
+
+    ::fwRuntime::ConfigurationElement::csptr config = this->buildParametersConfig();
+
+    currentAppConfig->addAppInfo(configId, group, desc, parameters, config, bundleId, bundleVersion);
+
+    std::vector< std::string > allCconfigs = currentAppConfig->getAllConfigs();
+    CPPUNIT_ASSERT( !allCconfigs.empty());
+
+    std::vector< std::string > configs = currentAppConfig->getConfigsFromGroup(group);
+    CPPUNIT_ASSERT(!configs.empty());
+
+    ::fwServices::registry::FieldAdaptorType replaceFields;
+    replaceFields["TEST_IMAGE"] = "objectUUID";
+
+    ::fwRuntime::ConfigurationElement::csptr configEltAdaptedConst;
+    configEltAdaptedConst = currentAppConfig->getAdaptedTemplateConfig(configId, replaceFields, false);
+
+    ::fwRuntime::ConfigurationElement::sptr configEltAdapted;
+    configEltAdapted = ::fwRuntime::ConfigurationElement::constCast(configEltAdaptedConst);
+
+    std::string uid = configEltAdapted->getAttributeValue("uid");
+    CPPUNIT_ASSERT_EQUAL(std::string("objectUUID"), uid );
+
+    std::vector< ::fwRuntime::ConfigurationElement::sptr >  servicesCfg = configEltAdapted->find("service");
+
+    std::string serviceUid1 = servicesCfg.at(0)->getAttributeValue("uid");
+    CPPUNIT_ASSERT_EQUAL( std::string("myTestService1"), serviceUid1);
+
+    std::string serviceUid2 = servicesCfg.at(1)->getAttributeValue("uid");
+    CPPUNIT_ASSERT_EQUAL( std::string("myTestService2"), serviceUid2);
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::AppConfigManager2::sptr AppConfig2Test::launchAppConfigMgr(
+    const std::string& name,
+    const ::fwRuntime::ConfigurationElement::csptr& config)
+{
+    const std::string configId(name);
+    const std::string group("parametersGroup");
+    const std::string desc("Description");
+    const std::string bundleId("dummy");
+    const std::string bundleVersion("0-1");
+    ::fwServices::registry::AppInfo::ParametersType parameters;
+
+    ::fwServices::registry::AppConfig2::sptr currentAppConfig = ::fwServices::registry::AppConfig2::getDefault();
+    currentAppConfig->addAppInfo(configId, group, desc, parameters, config, bundleId, bundleVersion);
+
+    auto appConfigMgr = ::fwServices::AppConfigManager2::New();
+    appConfigMgr->setIsUnitTest(true);
+
+    const ::fwServices::registry::FieldAdaptorType fields;
+    appConfigMgr->setConfig( configId, fields );
+    appConfigMgr->launch();
+
+    return appConfigMgr;
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::startStopTest()
+{
+    auto defaultWorker = registry::ActiveWorkers::getDefault()->getWorker( registry::ActiveWorkers::s_DEFAULT_WORKER );
+
+    ::fwRuntime::ConfigurationElement::csptr config = this->buildStartStopConfig();
+    m_appConfigMgr                                  = this->launchAppConfigMgr("startStopTest", config);
+
+    // =================================================================================================================
+    // Test manual start and stop of services, with or without data
+    // =================================================================================================================
+
+    auto data1 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data1Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    // This service doesn't exist in the config
+    CPPUNIT_ASSERT(::fwTools::fwID::getObject("TestService142Uid") == nullptr);
+
+    auto genDataSrv = ::fwServices::ut::TestService::dynamicCast(::fwTools::fwID::getObject("SGenerateData"));
+    CPPUNIT_ASSERT(genDataSrv != nullptr);
+
+    // This service has no data and is started by the config
+    {
+        fwTools::Object::sptr gnsrv1 = ::fwTools::fwID::getObject("TestService1Uid");
+        auto srv1                    = ::fwServices::ut::TestService::dynamicCast(gnsrv1);
+        CPPUNIT_ASSERT(srv1 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+    }
+
+    // This service has no data and is NOT started by the config
+    {
+        fwTools::Object::sptr gnsrv2 = ::fwTools::fwID::getObject("TestService2Uid");
+        auto srv2                    = ::fwServices::IService::dynamicCast(gnsrv2);
+        CPPUNIT_ASSERT(srv2 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STOPPED, srv2->getStatus());
+        srv2->start().wait();
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv2->getStatus());
+        srv2->stop().wait();
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STOPPED, srv2->getStatus());
+    }
+
+    // This service has a data and is NOT started by the config
+    {
+        fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService3Uid");
+        auto srv3                    = ::fwServices::IService::dynamicCast(gnsrv3);
+        CPPUNIT_ASSERT(srv3 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STOPPED, srv3->getStatus());
+    }
+
+    // This service has a data that is not present yet (WID), so it is even not created
+    {
+        fwTools::Object::sptr gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+        CPPUNIT_ASSERT(gnsrv4 == nullptr);
+    }
+
+    // =================================================================================================================
+    // Test automatic start and stop of the service, with a single data
+    // =================================================================================================================
+
+    // Create the data
+    ::fwData::Boolean::sptr data2 = ::fwData::Boolean::New();
+    {
+        ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService4Uid");
+
+        // Now the service should have been started automatically
+        {
+            auto gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            auto srv4   = ::fwServices::IService::dynamicCast(gnsrv4);
+            CPPUNIT_ASSERT(srv4 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv4->getStatus());
+        }
+
+        // Remove the data
+        ::fwServices::OSR::unregisterServiceOutput("out2", genDataSrv);
+        WAIT(::fwTools::fwID::getObject("TestService4Uid") == nullptr);
+
+        // Now the service should have been stopped and destroyed automatically
+        {
+            auto gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            CPPUNIT_ASSERT(gnsrv4 == nullptr);
+        }
+
+        // Register the data once again
+        ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService4Uid");
+
+        // Check again that the service was started automatically
+        {
+            auto gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            auto srv4   = ::fwServices::IService::dynamicCast(gnsrv4);
+            CPPUNIT_ASSERT(srv4 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv4->getStatus());
+        }
+    }
+
+    // =================================================================================================================
+    // Test automatic start and stop of the service, with multiple data (3)
+    // =================================================================================================================
+
+    {
+        // Still one data is not yet available thus the service is not created
+        {
+            fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            CPPUNIT_ASSERT(gnsrv5 == nullptr);
+        }
+
+        // Create the remaining data
+        ::fwData::Boolean::sptr data4 = ::fwData::Boolean::New();
+
+        ::fwServices::OSR::registerServiceOutput(data4, "out4", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService5Uid");
+
+        // Now the service should have been started automatically
+        {
+            auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            auto srv5   = ::fwServices::IService::dynamicCast(gnsrv5);
+            CPPUNIT_ASSERT(srv5 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+        }
+
+        // Remove one data
+        ::fwServices::OSR::unregisterServiceOutput("out2", genDataSrv);
+
+        // Now the service should have been stopped and destroyed automatically
+        {
+            WAIT(::fwTools::fwID::getObject("TestService5Uid") == nullptr);
+            auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            CPPUNIT_ASSERT(gnsrv5 == nullptr);
+            // Test as well service 4, just to be sure
+            WAIT(::fwTools::fwID::getObject("TestService4Uid") == nullptr);
+            auto gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            CPPUNIT_ASSERT(gnsrv4 == nullptr);
+        }
+
+        // Put everything back
+        ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService5Uid");
+
+        // Now the service should have been started automatically
+        {
+            auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            auto srv5   = ::fwServices::IService::dynamicCast(gnsrv5);
+            CPPUNIT_ASSERT(srv5 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+
+            // Test as well service 4, just to be sure
+            auto gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            CPPUNIT_ASSERT(gnsrv4 != nullptr);
+        }
+    }
+
+    // =================================================================================================================
+    // Test data swapping
+    // =================================================================================================================
+
+    {
+        // Test initial status (started because of the previous test)
+        {
+            auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            auto srv5   = ::fwServices::IService::dynamicCast(gnsrv5);
+            CPPUNIT_ASSERT(srv5 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+        }
+
+        // Swap the data
+        ::fwData::Boolean::sptr data5 = ::fwData::Boolean::New();
+
+        ::fwServices::OSR::unregisterServiceOutput("out2", genDataSrv);
+        WAIT(::fwTools::fwID::getObject("TestService5Uid") == nullptr);
+        ::fwServices::OSR::registerServiceOutput(data5, "out2", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService5Uid");
+
+        {
+            auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            auto srv5   = ::fwServices::IService::dynamicCast(gnsrv5);
+            CPPUNIT_ASSERT(srv5 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+        }
+    }
+
+    m_appConfigMgr->stopAndDestroy();
+
+    m_appConfigMgr = nullptr;
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::autoConnectTest()
+{
+    ::fwRuntime::ConfigurationElement::csptr config = this->buildAutoConnectTestConfig();
+    m_appConfigMgr                                  = this->launchAppConfigMgr("autoConnectTest", config);
+
+    // =================================================================================================================
+    // Test autoconnect with available data
+    // =================================================================================================================
+
+    auto data1 = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject("data1Id"));
+    auto data2 = ::fwData::Object::dynamicCast(::fwTools::fwID::getObject("data2Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    {
+        fwTools::Object::sptr gnsrv1 = ::fwTools::fwID::getObject("TestService1Uid");
+        auto srv1                    = ::fwServices::ut::TestService::dynamicCast(gnsrv1);
+        CPPUNIT_ASSERT(srv1 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+
+        fwTools::Object::sptr gnsrv2 = ::fwTools::fwID::getObject("TestService2Uid");
+        auto srv2                    = ::fwServices::ut::TestService::dynamicCast(gnsrv2);
+        CPPUNIT_ASSERT(srv2 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv2->getStatus());
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+        fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService3Uid");
+        auto srv3                    = ::fwServices::ut::TestSrvAutoconnect::dynamicCast(gnsrv3);
+        CPPUNIT_ASSERT(srv3 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv3->getStatus());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getReceived());
+
+        auto sig1 = data1->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig1->asyncEmit();
+
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getReceived());
+
+        srv2->resetIsUpdated();
+        srv3->resetIsUpdated();
+
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig2->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getReceived());
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getReceived());
+    }
+
+    // =================================================================================================================
+    // Test autoconnect with unavailable data at start
+    // =================================================================================================================
+
+    // Service used to generate data
+    auto genDataSrv = ::fwServices::ut::TestService::dynamicCast(::fwTools::fwID::getObject("SGenerateData"));
+    CPPUNIT_ASSERT(genDataSrv != nullptr);
+    {
+        // Check that dependent services are not created
+        {
+            fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService4Uid");
+            CPPUNIT_ASSERT(gnsrv3 == nullptr);
+            fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            CPPUNIT_ASSERT(gnsrv5 == nullptr);
+        }
+
+        // Create the data
+        ::fwData::Boolean::sptr data3 = ::fwData::Boolean::New();
+
+        ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+
+        WAIT_SERVICE_STARTED("TestService4Uid");
+        WAIT_SERVICE_STARTED("TestService5Uid");
+        {
+            fwTools::Object::sptr gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            auto srv4                    = ::fwServices::ut::TestService::dynamicCast(gnsrv4);
+            CPPUNIT_ASSERT(srv4 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv4->getStatus());
+            CPPUNIT_ASSERT(!srv4->getIsUpdated());
+
+            fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            auto srv5                    = ::fwServices::ut::TestSrvAutoconnect::dynamicCast(gnsrv5);
+            CPPUNIT_ASSERT(srv5 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+
+            CPPUNIT_ASSERT(!srv4->getIsUpdated());
+            CPPUNIT_ASSERT(!srv5->getIsUpdated());
+            CPPUNIT_ASSERT(!srv5->getReceived());
+
+            auto sig = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
+            WAIT(srv5->getReceived());
+
+            CPPUNIT_ASSERT(!srv4->getIsUpdated());
+            CPPUNIT_ASSERT(!srv5->getIsUpdated());
+            CPPUNIT_ASSERT(srv5->getReceived());
+        }
+
+        // Remove one data
+        ::fwServices::OSR::unregisterServiceOutput("out3", genDataSrv);
+        WAIT(::fwTools::fwID::getObject("TestService4Uid") == nullptr &&
+             ::fwTools::fwID::getObject("TestService5Uid") == nullptr);
+        {
+            fwTools::Object::sptr gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            CPPUNIT_ASSERT(gnsrv4 == nullptr);
+            fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            CPPUNIT_ASSERT(gnsrv5 == nullptr);
+        }
+
+        // Emit, that should be ok
+        ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+
+        WAIT_SERVICE_STARTED("TestService4Uid");
+        WAIT_SERVICE_STARTED("TestService5Uid");
+        {
+            fwTools::Object::sptr gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+            auto srv4                    = ::fwServices::ut::TestService::dynamicCast(gnsrv4);
+            CPPUNIT_ASSERT(srv4 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv4->getStatus());
+            CPPUNIT_ASSERT(!srv4->getIsUpdated());
+
+            fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+            auto srv5                    = ::fwServices::ut::TestSrvAutoconnect::dynamicCast(gnsrv5);
+            CPPUNIT_ASSERT(srv5 != nullptr);
+            CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+
+            CPPUNIT_ASSERT(!srv4->getIsUpdated());
+            CPPUNIT_ASSERT(!srv5->getIsUpdated());
+            CPPUNIT_ASSERT(!srv5->getReceived());
+
+            auto sig = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+            sig->asyncEmit();
+            WAIT(srv5->getReceived());
+            CPPUNIT_ASSERT(srv5->getReceived());
+
+            CPPUNIT_ASSERT(!srv4->getIsUpdated());
+            CPPUNIT_ASSERT(!srv5->getIsUpdated());
+            CPPUNIT_ASSERT(srv5->getReceived());
+
+            auto sig1 = data1->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+            sig1->asyncEmit();
+            WAIT(srv5->getIsUpdated());
+
+            CPPUNIT_ASSERT(srv5->getIsUpdated());
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::connectionTest()
+{
+    ::fwRuntime::ConfigurationElement::csptr config = this->buildConnectionConfig();
+    m_appConfigMgr                                  = this->launchAppConfigMgr("connectionTest", config);
+
+    // =================================================================================================================
+    // Test connection without data
+    // =================================================================================================================
+
+    ::fwData::Composite::sptr composite;
+
+    auto data1 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data1Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    // =================================================================================================================
+    // Test connection without data or with available data
+    // =================================================================================================================
+
+    fwTools::Object::sptr gnsrv1 = ::fwTools::fwID::getObject("TestService1Uid");
+    auto srv1                    = ::fwServices::ut::TestService::dynamicCast(gnsrv1);
+    CPPUNIT_ASSERT(srv1 != nullptr);
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+    CPPUNIT_ASSERT(!srv1->getIsUpdated());
+
+    fwTools::Object::sptr gnsrv2 = ::fwTools::fwID::getObject("TestService2Uid");
+    auto srv2                    = ::fwServices::ut::TestService::dynamicCast(gnsrv2);
+    CPPUNIT_ASSERT(srv2 != nullptr);
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv2->getStatus());
+    CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+    fwTools::Object::sptr gnsrv4 = ::fwTools::fwID::getObject("TestService4Uid");
+    auto srv4                    = ::fwServices::ut::TestService::dynamicCast(gnsrv4);
+    CPPUNIT_ASSERT(srv4 != nullptr);
+    WAIT(::fwServices::IService::STARTED == srv4->getStatus());
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv4->getStatus());
+
+    // Check connection
+    auto sig = data1->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
+    WAIT(srv1->getIsUpdated() && srv2->getIsUpdated());
+
+    CPPUNIT_ASSERT(srv1->getIsUpdated());
+    CPPUNIT_ASSERT(srv2->getIsUpdated());
+
+    // Service used to generate data
+    auto genDataSrv = ::fwServices::ut::TestService::dynamicCast(::fwTools::fwID::getObject("SGenerateData"));
+    CPPUNIT_ASSERT(genDataSrv != nullptr);
+
+    // =================================================================================================================
+    // Test connection with unavailable data at start
+    // =================================================================================================================
+
+    {
+        fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService3Uid");
+        CPPUNIT_ASSERT(gnsrv3 == nullptr);
+    }
+
+    // Emit a signal just for fun, anyway the service doesn't exist
+    sig = data1->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig->emit();
+
+    srv2->resetIsUpdated();
+    CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+    // Check connection data4 -> srv2
+    auto data4 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data4Id"));
+    CPPUNIT_ASSERT(data4 != nullptr);
+    auto sig4 = data4->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig4->asyncEmit();
+    WAIT(srv2->getIsUpdated());
+
+    CPPUNIT_ASSERT(srv2->getIsUpdated());
+
+    WAIT(!srv4->getIsUpdated());
+    CPPUNIT_ASSERT(!srv4->getIsUpdated());
+    CPPUNIT_ASSERT(!srv4->getIsUpdated2());
+
+    // Create the missing data
+    ::fwData::Boolean::sptr data2 = ::fwData::Boolean::New();
+    ::fwData::Boolean::sptr data3 = ::fwData::Boolean::New();
+
+    ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+    ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+    WAIT_SERVICE_STARTED("TestService3Uid");
+    {
+        fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService3Uid");
+        auto srv3                    = ::fwServices::ut::TestService::dynamicCast(gnsrv3);
+        CPPUNIT_ASSERT(srv3 != nullptr);
+        WAIT(::fwServices::IService::STARTED == srv3->getStatus());
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv3->getStatus());
+        srv2->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        // Check "started" signal
+        CPPUNIT_ASSERT(srv4->getIsUpdated());
+        CPPUNIT_ASSERT(!srv4->getIsUpdated2());
+
+        sig->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+
+        srv1->resetIsUpdated();
+        srv3->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig2->asyncEmit();
+        WAIT(srv1->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv1->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+
+        // Check connection data4 -> srv2,srv3
+        srv2->resetIsUpdated();
+        srv3->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        sig4->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+
+        // Check connection data3 -> srv2,srv3
+        srv2->resetIsUpdated();
+        srv3->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        auto sig3 = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig3->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+    }
+
+    // Remove one data
+    ::fwServices::OSR::unregisterServiceOutput("out3", genDataSrv);
+    WAIT(::fwTools::fwID::getObject("TestService3Uid") == nullptr);
+
+    // Service 3 should be removed
+    {
+        fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService3Uid");
+        CPPUNIT_ASSERT(gnsrv3 == nullptr);
+    }
+
+    // Check that connection is still there for the working services
+    srv2->resetIsUpdated();
+    CPPUNIT_ASSERT(!srv2->getIsUpdated());
+    sig->asyncEmit();
+    WAIT(srv2->getIsUpdated());
+    CPPUNIT_ASSERT(srv2->getIsUpdated());
+
+    srv1->resetIsUpdated();
+    CPPUNIT_ASSERT(!srv1->getIsUpdated());
+    auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig2->asyncEmit();
+    WAIT(srv1->getIsUpdated());
+    CPPUNIT_ASSERT(srv1->getIsUpdated());
+
+    // Check connection data4 -> srv2
+    srv2->resetIsUpdated();
+    CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+    sig4->asyncEmit();
+    WAIT(srv2->getIsUpdated());
+
+    CPPUNIT_ASSERT(srv2->getIsUpdated());
+
+    // Check "stopped" signal
+    CPPUNIT_ASSERT(srv4->getIsUpdated());
+    CPPUNIT_ASSERT(srv4->getIsUpdated2());
+    srv4->resetIsUpdated();
+    srv4->resetIsUpdated2();
+    CPPUNIT_ASSERT(!srv4->getIsUpdated2());
+
+    // Add back data 3 and check connection again
+    ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+    WAIT_SERVICE_STARTED("TestService3Uid");
+
+    {
+        fwTools::Object::sptr gnsrv3 = ::fwTools::fwID::getObject("TestService3Uid");
+        auto srv3                    = ::fwServices::ut::TestService::dynamicCast(gnsrv3);
+        CPPUNIT_ASSERT(srv3 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv3->getStatus());
+        srv2->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+        CPPUNIT_ASSERT(srv4->getIsUpdated());
+        CPPUNIT_ASSERT(!srv4->getIsUpdated2());
+
+        sig->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+
+        srv1->resetIsUpdated();
+        srv3->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig2->asyncEmit();
+        WAIT(srv1->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv1->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+
+        // Check connection data4 -> srv2,srv3
+        srv2->resetIsUpdated();
+        srv3->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        sig4->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+
+        // Check connection data3 -> srv2,srv3
+        srv2->resetIsUpdated();
+        srv3->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv3->getIsUpdated());
+
+        auto sig3 = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig3->asyncEmit();
+        WAIT(srv2->getIsUpdated() && srv3->getIsUpdated());
+
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv3->getIsUpdated());
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::optionalKeyTest()
+{
+    ::fwRuntime::ConfigurationElement::csptr config = this->buildOptionalKeyConfig();
+    m_appConfigMgr                                  = this->launchAppConfigMgr("optionalKeyTest", config);
+
+    // Service used to generate data
+    auto genDataSrv = ::fwServices::ut::TestService::dynamicCast(::fwTools::fwID::getObject("SGenerateData"));
+    CPPUNIT_ASSERT(genDataSrv != nullptr);
+
+    auto data1 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data1Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    // =================================================================================================================
+    // Test service with two optional attributes and available data at start
+    // =================================================================================================================
+
+    fwTools::Object::sptr gnsrv1 = ::fwTools::fwID::getObject("TestService1Uid");
+    auto srv1                    = ::fwServices::ut::TestServiceImplementation::dynamicCast(gnsrv1);
+    CPPUNIT_ASSERT(srv1 != nullptr);
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+    CPPUNIT_ASSERT(!srv1->getIsUpdated());
+
+    // Check connection
+    auto sig = data1->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig->asyncEmit();
+    WAIT(srv1->getIsUpdated());
+
+    CPPUNIT_ASSERT(srv1->getIsUpdated());
+    srv1->resetIsUpdated();
+
+    CPPUNIT_ASSERT(data1   == srv1->getInput< ::fwData::Object>("data1") );
+    CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("data2") );
+    CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("data3") );
+
+    // Create data 2
+    ::fwData::Boolean::sptr data2 = ::fwData::Boolean::New();
+
+    ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+    WAIT(data2 == srv1->getInput< ::fwData::Object>("data2"));
+
+    CPPUNIT_ASSERT(data2 == srv1->getInput< ::fwData::Object>("data2") );
+    CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("data3") );
+
+    CPPUNIT_ASSERT("data2" == srv1->getSwappedObjectKey() );
+    CPPUNIT_ASSERT(data2 == srv1->getSwappedObject() );
+
+    // Check no connection with data 2
+    CPPUNIT_ASSERT(!srv1->getIsUpdated());
+    auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig2->asyncEmit();
+    WAIT(!srv1->getIsUpdated());
+    CPPUNIT_ASSERT(!srv1->getIsUpdated());
+
+    // Create data 3 and 4
+    ::fwData::Boolean::sptr data3 = ::fwData::Boolean::New();
+    ::fwData::Boolean::sptr data4 = ::fwData::Boolean::New();
+
+    ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+    ::fwServices::OSR::registerServiceOutput(data4, "out4", genDataSrv);
+
+    WAIT(data3 == srv1->getInput< ::fwData::Object>("data3") &&
+         data4 == srv1->getInput< ::fwData::Object>("data4"));
+
+    CPPUNIT_ASSERT(data3 == srv1->getInput< ::fwData::Object>("data3") );
+    CPPUNIT_ASSERT(data4 == srv1->getInput< ::fwData::Object>("data4") );
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+
+    // Check connection with data 3
+    srv1->resetIsUpdated();
+    auto sig3 = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig3->asyncEmit();
+    WAIT(srv1->getIsUpdated());
+    CPPUNIT_ASSERT(srv1->getIsUpdated());
+
+    // Check connection with data 4
+    srv1->resetIsUpdated();
+    auto sig4 = data4->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+    sig4->asyncEmit();
+    WAIT(srv1->getIsUpdated());
+    CPPUNIT_ASSERT(srv1->getIsUpdated());
+
+    // Remove data 2 and 3
+    ::fwServices::OSR::unregisterServiceOutput("out2", genDataSrv);
+    WAIT(nullptr == srv1->getInput< ::fwData::Object>("data2"));
+
+    CPPUNIT_ASSERT("data2" == srv1->getSwappedObjectKey() );
+    CPPUNIT_ASSERT(nullptr == srv1->getSwappedObject() );
+    CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("data2") );
+
+    ::fwServices::OSR::unregisterServiceOutput("out3", genDataSrv);
+    WAIT(nullptr == srv1->getInput< ::fwData::Object>("data3"));
+
+    CPPUNIT_ASSERT("data3" == srv1->getSwappedObjectKey() );
+    CPPUNIT_ASSERT(nullptr == srv1->getSwappedObject() );
+    CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("data3") );
+
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+
+    // Create data 3
+    ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+    WAIT(data3 == srv1->getInput< ::fwData::Object>("data3"));
+
+    CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("data2") );
+    CPPUNIT_ASSERT(data3 == srv1->getInput< ::fwData::Object>("data3") );
+    CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+
+    // =================================================================================================================
+    // Test service with two optional attributes and unavailable data at start
+    // =================================================================================================================
+
+    // Create data 5
+    ::fwData::Boolean::sptr data5 = ::fwData::Boolean::New();
+    {
+        fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+        CPPUNIT_ASSERT(gnsrv5 == nullptr);
+
+        ::fwServices::OSR::registerServiceOutput(data5, "out5", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService5Uid");
+
+        gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+        auto srv5 = ::fwServices::ut::TestServiceImplementation::dynamicCast(gnsrv5);
+        CPPUNIT_ASSERT(srv5 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+        CPPUNIT_ASSERT(!srv5->getIsUpdated());
+
+        CPPUNIT_ASSERT(data5 == srv5->getInput< ::fwData::Object>("data5") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data2") );
+        CPPUNIT_ASSERT(data3 == srv5->getInput< ::fwData::Object>("data3") );
+        CPPUNIT_ASSERT(data4 == srv5->getInput< ::fwData::Object>("data4") );
+
+        // Check connection with data 4
+        srv5->resetIsUpdated();
+        auto sig4 = data4->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig4->asyncEmit();
+        WAIT(srv5->getIsUpdated());
+
+        // Remove data 3 and 4
+        ::fwServices::OSR::unregisterServiceOutput("out3", genDataSrv);
+        ::fwServices::OSR::unregisterServiceOutput("out4", genDataSrv);
+
+        WAIT(nullptr == srv5->getInput< ::fwData::Object>("data3") &&
+             nullptr == srv5->getInput< ::fwData::Object>("data4"));
+
+        CPPUNIT_ASSERT(data5 == srv5->getInput< ::fwData::Object>("data5") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data2") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data3") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data4") );
+
+        // Create data 3
+        ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+        WAIT(nullptr != srv5->getInput< ::fwData::Object>("data3"));
+
+        CPPUNIT_ASSERT(data5 == srv5->getInput< ::fwData::Object>("data5") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data2") );
+        CPPUNIT_ASSERT(data3 == srv5->getInput< ::fwData::Object>("data3") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data4") );
+    }
+
+    // Remove data 5
+    {
+        ::fwServices::OSR::unregisterServiceOutput("out5", genDataSrv);
+
+        WAIT(nullptr == ::fwTools::fwID::getObject("TestService5Uid"));
+
+        fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+        CPPUNIT_ASSERT(gnsrv5 == nullptr);
+    }
+
+    // Create data 5
+    {
+        ::fwServices::OSR::registerServiceOutput(data5, "out5", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService5Uid");
+
+        auto gnsrv5 = ::fwTools::fwID::getObject("TestService5Uid");
+        auto srv5   = ::fwServices::ut::TestServiceImplementation::dynamicCast(gnsrv5);
+        CPPUNIT_ASSERT(srv5 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv5->getStatus());
+        CPPUNIT_ASSERT(!srv5->getIsUpdated());
+
+        CPPUNIT_ASSERT(data5 == srv5->getInput< ::fwData::Object>("data5") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data2") );
+        CPPUNIT_ASSERT(data3 == srv5->getInput< ::fwData::Object>("data3") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data4") );
+
+        // Check connection with data 3
+        srv5->resetIsUpdated();
+        auto sig3 = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig3->asyncEmit();
+        WAIT(srv5->getIsUpdated());
+        CPPUNIT_ASSERT(srv5->getIsUpdated());
+
+        // Create data 2
+        ::fwData::Boolean::sptr data2 = ::fwData::Boolean::New();
+
+        ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+        WAIT(data2 == srv5->getInput< ::fwData::Object>("data2"));
+
+        CPPUNIT_ASSERT(data5 == srv5->getInput< ::fwData::Object>("data5") );
+        CPPUNIT_ASSERT(data2 == srv5->getInput< ::fwData::Object>("data2") );
+        CPPUNIT_ASSERT(data3 == srv5->getInput< ::fwData::Object>("data3") );
+        CPPUNIT_ASSERT(nullptr == srv5->getInput< ::fwData::Object>("data4") );
+
+        // Check no connection with data 2
+        srv5->resetIsUpdated();
+        CPPUNIT_ASSERT(!srv5->getIsUpdated());
+        auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig2->asyncEmit();
+        WAIT(!srv5->getIsUpdated());
+        CPPUNIT_ASSERT(!srv5->getIsUpdated());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void AppConfig2Test::keyGroupTest()
+{
+    ::fwRuntime::ConfigurationElement::csptr config = this->buildKeyGroupConfig();
+    m_appConfigMgr                                  = this->launchAppConfigMgr("keyGroupTest", config);
+
+    // Service used to generate data
+    auto genDataSrv = ::fwServices::ut::TestService::dynamicCast(::fwTools::fwID::getObject("SGenerateData"));
+    CPPUNIT_ASSERT(genDataSrv != nullptr);
+
+    auto data1 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data1Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    auto data4 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data4Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    auto data5 = std::dynamic_pointer_cast< ::fwData::Object >(::fwTools::fwID::getObject("data5Id"));
+    CPPUNIT_ASSERT(data1 != nullptr);
+
+    // =================================================================================================================
+    // Test service with one key group of two data
+    // =================================================================================================================
+
+    ::fwData::Image::sptr data3;
+    {
+        fwTools::Object::sptr gnsrv1 = ::fwTools::fwID::getObject("TestService1Uid");
+        CPPUNIT_ASSERT(gnsrv1 == nullptr);
+
+        // Create data 2
+        ::fwData::Boolean::sptr data2 = ::fwData::Boolean::New();
+        ::fwServices::OSR::registerServiceOutput(data2, "out2", genDataSrv);
+        WAIT_SERVICE_STARTED("TestService1Uid");
+
+        gnsrv1 = ::fwTools::fwID::getObject("TestService1Uid");
+        auto srv1 = ::fwServices::ut::TestServiceImplementation::dynamicCast(gnsrv1);
+        CPPUNIT_ASSERT(srv1 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv1->getStatus());
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+
+        CPPUNIT_ASSERT(data1 == srv1->getInput< ::fwData::Object>("data1") );
+        CPPUNIT_ASSERT(data2 == srv1->getInput< ::fwData::Object>("dataGroup#0") );
+        CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("dataGroup#1") );
+
+        CPPUNIT_ASSERT(data2 == srv1->getInput< ::fwData::Object>("dataGroup", 0 ) );
+        CPPUNIT_ASSERT(nullptr == srv1->getInput< ::fwData::Object>("dataGroup", 1 ) );
+
+        CPPUNIT_ASSERT(2 == srv1->getKeyGroupSize("dataGroup") );
+
+        // Check connection with data 2
+        CPPUNIT_ASSERT(!srv1->getIsUpdated());
+        auto sig2 = data2->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig2->asyncEmit();
+        WAIT(srv1->getIsUpdated());
+        CPPUNIT_ASSERT(srv1->getIsUpdated());
+
+        // Create data 3
+        data3 = ::fwData::Image::New();
+
+        ::fwServices::OSR::registerServiceOutput(data3, "out3", genDataSrv);
+
+        WAIT(data3 == srv1->getInput< ::fwData::Object>("dataGroup2"));
+
+        CPPUNIT_ASSERT(data2 == srv1->getInput< ::fwData::Object>("dataGroup#0") );
+        CPPUNIT_ASSERT(data3 == srv1->getInput< ::fwData::Object>("dataGroup#1") );
+
+        CPPUNIT_ASSERT(data2 == srv1->getInput< ::fwData::Object>("dataGroup", 0 ) );
+        CPPUNIT_ASSERT(data3 == srv1->getInput< ::fwData::Object>("dataGroup", 1 ) );
+
+        // Check connection with data 3
+        srv1->resetIsUpdated();
+        auto sig3 = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig3->asyncEmit();
+        WAIT(srv1->getIsUpdated());
+        CPPUNIT_ASSERT(srv1->getIsUpdated());
+    }
+
+    // Remove data 2
+    {
+        ::fwServices::OSR::unregisterServiceOutput("out2", genDataSrv);
+
+        WAIT(nullptr == ::fwTools::fwID::getObject("TestService1Uid"));
+
+        fwTools::Object::sptr gnsrv5 = ::fwTools::fwID::getObject("TestService1Uid");
+        CPPUNIT_ASSERT(gnsrv5 == nullptr);
+    }
+
+    {
+        WAIT_SERVICE_STARTED("TestService2Uid");
+        fwTools::Object::sptr gnsrv2 = ::fwTools::fwID::getObject("TestService2Uid");
+        auto srv2                    = ::fwServices::ut::TestSrvAutoconnect::dynamicCast(gnsrv2);
+        CPPUNIT_ASSERT(srv2 != nullptr);
+        CPPUNIT_ASSERT_EQUAL(::fwServices::IService::STARTED, srv2->getStatus());
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+        WAIT(data3 == srv2->getInput< ::fwData::Object>("dataGroup1#0"));
+
+        CPPUNIT_ASSERT(2 == srv2->getKeyGroupSize("dataGroup0") );
+        CPPUNIT_ASSERT(data1   == srv2->getInput< ::fwData::Object>("dataGroup0#0") );
+        CPPUNIT_ASSERT(nullptr == srv2->getInput< ::fwData::Object>("dataGroup0#1") );
+
+        CPPUNIT_ASSERT(data1   == srv2->getInput< ::fwData::Object>("dataGroup0", 0 ) );
+        CPPUNIT_ASSERT(nullptr == srv2->getInput< ::fwData::Object>("dataGroup0", 1 ) );
+
+        CPPUNIT_ASSERT(3 == srv2->getKeyGroupSize("dataGroup1") );
+        CPPUNIT_ASSERT(data3 == srv2->getInput< ::fwData::Object>("dataGroup1#0") );
+        CPPUNIT_ASSERT(data4 == srv2->getInput< ::fwData::Object>("dataGroup1#1") );
+        CPPUNIT_ASSERT(data5 == srv2->getInput< ::fwData::Object>("dataGroup1#2") );
+
+        CPPUNIT_ASSERT(data3 == srv2->getInput< ::fwData::Object>("dataGroup1", 0) );
+        CPPUNIT_ASSERT(data4 == srv2->getInput< ::fwData::Object>("dataGroup1", 1) );
+        CPPUNIT_ASSERT(data5 == srv2->getInput< ::fwData::Object>("dataGroup1", 2) );
+
+        // Check connection with data 1
+        srv2->resetIsUpdated();
+        auto sig1 = data1->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig1->asyncEmit();
+        WAIT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+
+        // Check no connection with data 3
+        srv2->resetIsUpdated();
+        auto sig3 = data3->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig3->asyncEmit();
+        WAIT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+        // Check connection with data 4
+        srv2->resetIsUpdated();
+        auto sig4 = data4->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig4->asyncEmit();
+        WAIT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+        auto sigIm4 = data4->signal< ::fwData::Image::BufferModifiedSignalType>(::fwData::Image::s_BUFFER_MODIFIED_SIG);
+        sigIm4->asyncEmit();
+        WAIT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(srv2->getIsUpdated());
+
+        // Check no connection with data 5
+        srv2->resetIsUpdated();
+        auto sig5 = data5->signal< ::fwData::Object::ModifiedSignalType>(::fwData::Object::s_MODIFIED_SIG);
+        sig5->asyncEmit();
+        WAIT(!srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+
+        auto sigIm5 = data5->signal< ::fwData::Image::BufferModifiedSignalType>(::fwData::Image::s_BUFFER_MODIFIED_SIG);
+        sigIm5->asyncEmit();
+        WAIT(srv2->getIsUpdated());
+        CPPUNIT_ASSERT(!srv2->getIsUpdated());
+    }
+
+    return;
+}
+
+//-----------------------------------------------------------------------------
+
+void AppConfig2Test::concurentAccessToAppConfig2Test()
+{
+    const unsigned int nbThreads = 20;
+    std::vector< SPTR(::fwTest::helper::Thread) > threads;
+
+    for (unsigned int i = 0; i<nbThreads; ++i)
+    {
+        SPTR(::fwTest::helper::Thread) thread;
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&AppConfig2Test::parametersConfigTest, this)));
+        threads.push_back(thread);
+    }
+
+    for (unsigned int i = 0; i<nbThreads; ++i)
+    {
+        std::stringstream str;
+        str << "thread " << i;
+        CPPUNIT_ASSERT_MESSAGE(str.str(), threads[i]->timedJoin(1000));
+    }
+
+    ::fwServices::registry::AppConfig2::getDefault()->clearRegistry();
+    std::vector< std::string > allCconfigs = ::fwServices::registry::AppConfig2::getDefault()->getAllConfigs();
+    CPPUNIT_ASSERT(allCconfigs.empty());
+
+}
+
+//------------------------------------------------------------------------------
+
+::fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildParametersConfig()
+{
+    // Configuration on fwTools::Object which uid is objectUUID
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object"));
+    cfg->setAttributeValue( "uid", "${TEST_IMAGE}");
+    cfg->setAttributeValue( "type", "::fwData::Image");
+
+    // Service A
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
+    serviceA->setAttributeValue( "uid", "myTestService1" );
+    serviceA->setAttributeValue("type", "::fwServices::ut::TestServiceImplementationImage" );
+    serviceA->setAttributeValue( "autoConnect", "no" );
+
+    // Service B
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
+    serviceB->setAttributeValue( "uid", "${UID_SERVICE2}" );
+    serviceB->setAttributeValue("type", "::fwServices::ut::TestServiceImplementationImage" );
+    serviceB->setAttributeValue( "autoConnect", "no" );
+
+    // Connections
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect1 = cfg->addConfigurationElement("connect");
+    connect1->setAttributeValue( "channel", "channel1" );
+    connect1->addConfigurationElement("signal")->setValue( "${TEST_IMAGE}/modified" );
+    connect1->addConfigurationElement("slot")->setValue( "myTestService1/update" );
+
+    // Start method from object's services
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
+    startA->setAttributeValue( "uid", "myTestService1" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
+    startB->setAttributeValue( "uid", "myTestService2" );
+
+    // Update method from object's services
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
+    updateA->setAttributeValue( "uid", "myTestService1" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+::fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildStartStopConfig()
+{
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("config"));
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data1Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data2Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data3Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data4Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    // Service used to generate data
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataSrv = cfg->addConfigurationElement("service");
+    genDataSrv->setAttributeValue( "uid", "SGenerateData" );
+    genDataSrv->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    genDataSrv->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService2 = genDataSrv->addConfigurationElement("out");
+    genDataService2->setAttributeValue( "key", "out2" );
+    genDataService2->setAttributeValue( "uid", "data2Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService4 = genDataSrv->addConfigurationElement("out");
+    genDataService4->setAttributeValue( "key", "out4" );
+    genDataService4->setAttributeValue( "uid", "data4Id" );
+
+    // Service #1
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service1 = cfg->addConfigurationElement("service");
+    service1->setAttributeValue( "uid", "TestService1Uid" );
+    service1->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service1->setAttributeValue( "autoConnect", "no" );
+
+    // Service #2
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
+    service2->setAttributeValue( "uid", "TestService2Uid" );
+    service2->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service2->setAttributeValue( "autoConnect", "no" );
+
+    // Service #3 with one data
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service3 = cfg->addConfigurationElement("service");
+    service3->setAttributeValue( "uid", "TestService3Uid" );
+    service3->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service3->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService3 = service3->addConfigurationElement("in");
+    dataService3->setAttributeValue( "key", "data" );
+    dataService3->setAttributeValue( "uid", "data1Id" );
+
+    // Service #4
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service4 = cfg->addConfigurationElement("service");
+    service4->setAttributeValue( "uid", "TestService4Uid" );
+    service4->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service4->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService4 = service4->addConfigurationElement("in");
+    dataService4->setAttributeValue( "key", "data" );
+    dataService4->setAttributeValue( "uid", "data2Id" );
+
+    // Service #5
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service5 = cfg->addConfigurationElement("service");
+    service5->setAttributeValue( "uid", "TestService5Uid" );
+    service5->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service5->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_1 = service5->addConfigurationElement("in");
+    dataService5_1->setAttributeValue( "key", "data1" );
+    dataService5_1->setAttributeValue( "uid", "data1Id" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_2 = service5->addConfigurationElement("in");
+    dataService5_2->setAttributeValue( "key", "data2" );
+    dataService5_2->setAttributeValue( "uid", "data2Id" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_3 = service5->addConfigurationElement("in");
+    dataService5_3->setAttributeValue( "key", "data3" );
+    dataService5_3->setAttributeValue( "uid", "data3Id" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_4 = service5->addConfigurationElement("inout");
+    dataService5_4->setAttributeValue( "key", "data4" );
+    dataService5_4->setAttributeValue( "uid", "data4Id" );
+
+    // Start method from object's services
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+
+    // Update method from object's services
+    cfg->addConfigurationElement("update")->setAttributeValue( "uid", "TestService1Uid" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildAutoConnectTestConfig()
+{
+    // Configuration on fwTools::Object which uid is objectUUID
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("config"));
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data1Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data2Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data3Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    // Service used to generate data
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataSrv = cfg->addConfigurationElement("service");
+    genDataSrv->setAttributeValue( "uid", "SGenerateData" );
+    genDataSrv->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    genDataSrv->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService3 = genDataSrv->addConfigurationElement("out");
+    genDataService3->setAttributeValue( "key", "out3" );
+    genDataService3->setAttributeValue( "uid", "data3Id" );
+
+    // Service #1 - "autoconnect" = "no"
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service1 = cfg->addConfigurationElement("service");
+    service1->setAttributeValue( "uid", "TestService1Uid" );
+    service1->setAttributeValue("type", "::fwServices::ut::TestSrvAutoconnect" );
+    service1->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_1 = service1->addConfigurationElement("in");
+    dataService1_1->setAttributeValue( "key", "data1" );
+    dataService1_1->setAttributeValue( "uid", "data1Id" );
+
+    // Service #2 - global "autoconnect" = "yes"
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
+    service2->setAttributeValue( "uid", "TestService2Uid" );
+    service2->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service2->setAttributeValue( "autoConnect", "yes" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_1 = service2->addConfigurationElement("in");
+    dataService2_1->setAttributeValue( "key", "data1" );
+    dataService2_1->setAttributeValue( "uid", "data1Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_2 = service2->addConfigurationElement("inout");
+    dataService2_2->setAttributeValue( "key", "data2" );
+    dataService2_2->setAttributeValue( "uid", "data2Id" );
+
+    // Service #3 - local "autoconnect" = "yes"
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service3 = cfg->addConfigurationElement("service");
+    service3->setAttributeValue( "uid", "TestService3Uid" );
+    service3->setAttributeValue("type", "::fwServices::ut::TestSrvAutoconnect" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService3_1 = service3->addConfigurationElement("in");
+    dataService3_1->setAttributeValue( "key", "data1" );
+    dataService3_1->setAttributeValue( "uid", "data1Id" );
+    dataService3_1->setAttributeValue( "autoConnect", "yes" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService3_2 = service3->addConfigurationElement("inout");
+    dataService3_2->setAttributeValue( "key", "data2" );
+    dataService3_2->setAttributeValue( "uid", "data2Id" );
+    dataService3_2->setAttributeValue( "autoConnect", "yes" );
+
+    // Service #4 - "autoconnect" = "no" with unavailable data at start
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service4 = cfg->addConfigurationElement("service");
+    service4->setAttributeValue( "uid", "TestService4Uid" );
+    service4->setAttributeValue("type", "::fwServices::ut::TestSrvAutoconnect" );
+    service4->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService4_1 = service4->addConfigurationElement("in");
+    dataService4_1->setAttributeValue( "key", "data3" );
+    dataService4_1->setAttributeValue( "uid", "data3Id" );
+
+    // Service #5 - "autoconnect" = "yes" with unavailable data at start
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service5 = cfg->addConfigurationElement("service");
+    service5->setAttributeValue( "uid", "TestService5Uid" );
+    service5->setAttributeValue("type", "::fwServices::ut::TestSrvAutoconnect" );
+    service5->setAttributeValue( "autoConnect", "yes" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > itemService5_1 = service5->addConfigurationElement("in");
+    itemService5_1->setAttributeValue( "key", "data1" );
+    itemService5_1->setAttributeValue( "uid", "data1Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > itemService5_2 = service5->addConfigurationElement("in");
+    itemService5_2->setAttributeValue( "key", "data3" );
+    itemService5_2->setAttributeValue( "uid", "data3Id" );
+
+    // Start method from object's services
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService2Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService3Uid" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildConnectionConfig()
+{
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("config"));
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data1Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data2Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data3Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data4Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    // Service used to generate data
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataSrv = cfg->addConfigurationElement("service");
+    genDataSrv->setAttributeValue( "uid", "SGenerateData" );
+    genDataSrv->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    genDataSrv->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService2 = genDataSrv->addConfigurationElement("out");
+    genDataService2->setAttributeValue( "key", "out2" );
+    genDataService2->setAttributeValue( "uid", "data2Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService3 = genDataSrv->addConfigurationElement("out");
+    genDataService3->setAttributeValue( "key", "out3" );
+    genDataService3->setAttributeValue( "uid", "data3Id" );
+
+    // Service #1 - we use don't use autoconnect and we connect manually at the end of the configuration
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service1 = cfg->addConfigurationElement("service");
+    service1->setAttributeValue( "uid", "TestService1Uid" );
+    service1->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service1->setAttributeValue( "autoConnect", "no" );
+
+    // Service #2 - we use don't use autoconnect and we connect manually at the end of the configuration
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
+    service2->setAttributeValue( "uid", "TestService2Uid" );
+    service2->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service2->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_1 = service2->addConfigurationElement("in");
+    dataService2_1->setAttributeValue( "key", "data1" );
+    dataService2_1->setAttributeValue( "uid", "data1Id" );
+
+    // Service #3 - we use don't use autoconnect and we connect manually at the end of the configuration
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service3 = cfg->addConfigurationElement("service");
+    service3->setAttributeValue( "uid", "TestService3Uid" );
+    service3->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+    service3->setAttributeValue( "autoConnect", "no" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService3_1 = service3->addConfigurationElement("in");
+    dataService3_1->setAttributeValue( "key", "data1" );
+    dataService3_1->setAttributeValue( "uid", "data1Id" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService3_2 = service3->addConfigurationElement("out");
+    dataService3_2->setAttributeValue( "key", "data2" );
+    dataService3_2->setAttributeValue( "uid", "data2Id" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService3_3 = service3->addConfigurationElement("inout");
+    dataService3_3->setAttributeValue( "key", "data3" );
+    dataService3_3->setAttributeValue( "uid", "data3Id" );
+
+    // Service #4 - used to test "started" and "stopped" signals
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service4 = cfg->addConfigurationElement("service");
+    service4->setAttributeValue( "uid", "TestService4Uid" );
+    service4->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+
+    // Connections
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect1 = cfg->addConfigurationElement("connect");
+    connect1->addConfigurationElement("signal")->setValue( "data1Id/modified" );
+    connect1->addConfigurationElement("slot")->setValue( "TestService1Uid/update" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect2 = cfg->addConfigurationElement("connect");
+    connect2->setAttributeValue( "channel", "2" );
+    connect2->addConfigurationElement("signal")->setValue( "data1Id/modified" );
+    connect2->addConfigurationElement("slot")->setValue( "TestService2Uid/update" );
+    connect2->addConfigurationElement("slot")->setValue( "TestService3Uid/update" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect3 = cfg->addConfigurationElement("connect");
+    connect3->addConfigurationElement("signal")->setValue( "data2Id/modified" );
+    connect3->addConfigurationElement("slot")->setValue( "TestService1Uid/update" );
+    connect3->addConfigurationElement("slot")->setValue( "TestService3Uid/update" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect4 = cfg->addConfigurationElement("connect");
+    connect4->setAttributeValue( "channel", "4" );
+    connect4->addConfigurationElement("signal")->setValue( "data3Id/modified" );
+    connect4->addConfigurationElement("signal")->setValue( "data4Id/modified" );
+    connect4->addConfigurationElement("slot")->setValue( "TestService2Uid/update" );
+    connect4->addConfigurationElement("slot")->setValue( "TestService3Uid/update" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect5 = cfg->addConfigurationElement("connect");
+    connect5->addConfigurationElement("signal")->setValue( "TestService3Uid/started" );
+    connect5->addConfigurationElement("slot")->setValue( "TestService4Uid/update" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect6 = cfg->addConfigurationElement("connect");
+    connect6->addConfigurationElement("signal")->setValue( "TestService3Uid/stopped" );
+    connect6->addConfigurationElement("slot")->setValue( "TestService4Uid/update2" );
+
+    // Start method from object's services
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService2Uid" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService4Uid" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildOptionalKeyConfig()
+{
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("config"));
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data1Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data2Id");
+    objCfg->setAttributeValue( "type", "::fwData::Boolean");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data3Id");
+    objCfg->setAttributeValue( "type", "::fwData::Boolean");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data4Id");
+    objCfg->setAttributeValue( "type", "::fwData::Boolean");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data5Id");
+    objCfg->setAttributeValue( "type", "::fwData::Boolean");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    // Service used to generate data
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataSrv = cfg->addConfigurationElement("service");
+    genDataSrv->setAttributeValue( "uid", "SGenerateData" );
+    genDataSrv->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService2 = genDataSrv->addConfigurationElement("out");
+    genDataService2->setAttributeValue( "key", "out2" );
+    genDataService2->setAttributeValue( "uid", "data2Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService3 = genDataSrv->addConfigurationElement("out");
+    genDataService3->setAttributeValue( "key", "out3" );
+    genDataService3->setAttributeValue( "uid", "data3Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService4 = genDataSrv->addConfigurationElement("out");
+    genDataService4->setAttributeValue( "key", "out4" );
+    genDataService4->setAttributeValue( "uid", "data4Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService5 = genDataSrv->addConfigurationElement("out");
+    genDataService5->setAttributeValue( "key", "out5" );
+    genDataService5->setAttributeValue( "uid", "data5Id" );
+
+    // Service #1
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service1 = cfg->addConfigurationElement("service");
+    service1->setAttributeValue( "uid", "TestService1Uid" );
+    service1->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_1 = service1->addConfigurationElement("in");
+    dataService1_1->setAttributeValue( "key", "data1" );
+    dataService1_1->setAttributeValue( "uid", "data1Id" );
+    dataService1_1->setAttributeValue( "autoConnect", "yes" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_2 = service1->addConfigurationElement("in");
+    dataService1_2->setAttributeValue( "key", "data2" );
+    dataService1_2->setAttributeValue( "uid", "data2Id" );
+    dataService1_2->setAttributeValue( "autoConnect", "no" );
+    dataService1_2->setAttributeValue( "optional", "yes");
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_3 = service1->addConfigurationElement("in");
+    dataService1_3->setAttributeValue( "key", "data3" );
+    dataService1_3->setAttributeValue( "uid", "data3Id" );
+    dataService1_3->setAttributeValue( "autoConnect", "no" );
+    dataService1_3->setAttributeValue( "optional", "yes");
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_4 = service1->addConfigurationElement("in");
+    dataService1_4->setAttributeValue( "key", "data4" );
+    dataService1_4->setAttributeValue( "uid", "data4Id" );
+    dataService1_4->setAttributeValue( "autoConnect", "yes" );
+    dataService1_4->setAttributeValue( "optional", "yes");
+
+    // Service #2
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service5 = cfg->addConfigurationElement("service");
+    service5->setAttributeValue( "uid", "TestService5Uid" );
+    service5->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_1 = service5->addConfigurationElement("in");
+    dataService5_1->setAttributeValue( "key", "data5" );
+    dataService5_1->setAttributeValue( "uid", "data5Id" );
+    dataService5_1->setAttributeValue( "autoConnect", "yes" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_2 = service5->addConfigurationElement("in");
+    dataService5_2->setAttributeValue( "key", "data2" );
+    dataService5_2->setAttributeValue( "uid", "data2Id" );
+    dataService5_2->setAttributeValue( "autoConnect", "no" );
+    dataService5_2->setAttributeValue( "optional", "yes");
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_3 = service5->addConfigurationElement("in");
+    dataService5_3->setAttributeValue( "key", "data3" );
+    dataService5_3->setAttributeValue( "uid", "data3Id" );
+    dataService5_3->setAttributeValue( "autoConnect", "no" );
+    dataService5_3->setAttributeValue( "optional", "yes");
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService5_4 = service5->addConfigurationElement("in");
+    dataService5_4->setAttributeValue( "key", "data4" );
+    dataService5_4->setAttributeValue( "uid", "data4Id" );
+    dataService5_4->setAttributeValue( "autoConnect", "yes" );
+    dataService5_4->setAttributeValue( "optional", "yes");
+
+    // Connections
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect1 = cfg->addConfigurationElement("connect");
+    connect1->addConfigurationElement("signal")->setValue( "data3Id/modified" );
+    connect1->addConfigurationElement("slot")->setValue( "TestService1Uid/update" );
+    connect1->addConfigurationElement("slot")->setValue( "TestService5Uid/update" );
+
+    // Start method from object's services
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "TestService1Uid" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+fwRuntime::ConfigurationElement::sptr AppConfig2Test::buildKeyGroupConfig()
+{
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("config"));
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data1Id");
+    objCfg->setAttributeValue( "type", "::fwData::String");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data2Id");
+    objCfg->setAttributeValue( "type", "::fwData::Boolean");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data3Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+    objCfg->setAttributeValue( "src", "deferred");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data4Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    objCfg = cfg->addConfigurationElement("object");
+    objCfg->setAttributeValue( "uid", "data5Id");
+    objCfg->setAttributeValue( "type", "::fwData::Image");
+
+    // Service used to generate data
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataSrv = cfg->addConfigurationElement("service");
+    genDataSrv->setAttributeValue( "uid", "SGenerateData" );
+    genDataSrv->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService2 = genDataSrv->addConfigurationElement("out");
+    genDataService2->setAttributeValue( "key", "out2" );
+    genDataService2->setAttributeValue( "uid", "data2Id" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > genDataService3 = genDataSrv->addConfigurationElement("out");
+    genDataService3->setAttributeValue( "key", "out3" );
+    genDataService3->setAttributeValue( "uid", "data3Id" );
+
+    // Service #1
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service1 = cfg->addConfigurationElement("service");
+    service1->setAttributeValue( "uid", "TestService1Uid" );
+    service1->setAttributeValue("type", "::fwServices::ut::TestServiceImplementation" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_1 = service1->addConfigurationElement("in");
+    dataService1_1->setAttributeValue( "key", "data1" );
+    dataService1_1->setAttributeValue( "uid", "data1Id" );
+    dataService1_1->setAttributeValue( "autoConnect", "yes" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataGroup1 = service1->addConfigurationElement("in");
+    dataGroup1->setAttributeValue( "group", "dataGroup" );
+    dataGroup1->setAttributeValue( "autoConnect", "yes" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_2 = dataGroup1->addConfigurationElement("key");
+    dataService1_2->setAttributeValue( "uid", "data2Id" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService1_3 = dataGroup1->addConfigurationElement("key");
+    dataService1_3->setAttributeValue( "uid", "data3Id" );
+    dataService1_3->setAttributeValue( "optional", "yes" );
+
+    // Service #2
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
+    service2->setAttributeValue( "uid", "TestService2Uid" );
+    service2->setAttributeValue("type", "::fwServices::ut::TestSrvAutoconnect" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataGroup2 = service2->addConfigurationElement("in");
+    dataGroup2->setAttributeValue( "group", "dataGroup0" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_1 = dataGroup2->addConfigurationElement("key");
+    dataService2_1->setAttributeValue( "uid", "data1Id" );
+    dataService2_1->setAttributeValue( "autoConnect", "no" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_2 = dataGroup2->addConfigurationElement("key");
+    dataService2_2->setAttributeValue( "uid", "data2Id" );
+    dataService2_2->setAttributeValue( "autoConnect", "yes" );
+    dataService2_2->setAttributeValue( "optional", "yes" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataGroup3 = service2->addConfigurationElement("in");
+    dataGroup3->setAttributeValue( "group", "dataGroup1" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_3 = dataGroup3->addConfigurationElement("key");
+    dataService2_3->setAttributeValue( "uid", "data3Id" );
+    dataService2_3->setAttributeValue( "autoConnect", "no" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_4 = dataGroup3->addConfigurationElement("key");
+    dataService2_4->setAttributeValue( "uid", "data4Id" );
+    dataService2_4->setAttributeValue( "autoConnect", "yes" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > dataService2_5 = dataGroup3->addConfigurationElement("key");
+    dataService2_5->setAttributeValue( "uid", "data5Id" );
+    dataService2_5->setAttributeValue( "autoConnect", "no" );
+
+    // Connections
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > connect1 = cfg->addConfigurationElement("connect");
+    connect1->addConfigurationElement("signal")->setValue( "data1Id/modified" );
+    connect1->addConfigurationElement("slot")->setValue( "TestService2Uid/update" );
+
+    // Start method from object's services
+    cfg->addConfigurationElement("start")->setAttributeValue( "uid", "SGenerateData" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+
+} //namespace fwServices
diff --git a/SrcLib/core/fwServices/test/tu/src/AppConfigParametersTest.cpp b/SrcLib/core/fwServices/test/tu/src/AppConfigParametersTest.cpp
index 6018f4b..df779b2 100644
--- a/SrcLib/core/fwServices/test/tu/src/AppConfigParametersTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/AppConfigParametersTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,43 +28,35 @@ namespace ut
 void AppConfigParametersTest::setUp()
 {
     // Set up context before running a test.
-    // Bundles location
-#ifdef SPECIALINSTALL
-    ::boost::filesystem::path bundlesLocation = BUNDLEPATH;
-#else
-    ::boost::filesystem::path bundlesLocation =  ::boost::filesystem::current_path() / "Bundles";
-#endif
+    //Bundles location
+    ::boost::filesystem::path bundlesLocation = ::boost::filesystem::current_path() /
+                                                ::boost::filesystem::path(BUNDLE_PREFIX);
     CPPUNIT_ASSERT(::boost::filesystem::exists(bundlesLocation));
-    ::fwRuntime::Runtime * runtime = ::fwRuntime::Runtime::getDefault();
+    ::fwRuntime::Runtime* runtime = ::fwRuntime::Runtime::getDefault();
 
     // Read bundles
     runtime->addBundles(bundlesLocation);
-	#ifdef SPECIALINSTALL
-    		::boost::filesystem::path location = std::string(SHAREPATH) + "tu_exec_fwServices_0-0";
-	#else
-		::boost::filesystem::path location = ::boost::filesystem::current_path() / "share/tu_exec_fwServices_0-0";
-	#endif
 
-    if( ! ::boost::filesystem::exists( location ) )
+    ::boost::filesystem::path location = ::boost::filesystem::current_path() / "share/tu_exec_fwServices_0-0";
+    if( !::boost::filesystem::exists( location ) )
     {
-#ifdef SPECIALINSTALL
-	location = std::string(SHAREPATH) + "tu_xml_fwServices_0-0";
-#else
-	location = ::boost::filesystem::current_path() / "share/tu_xml_fwServices_0-0";
-#endif
+        location = ::boost::filesystem::current_path() / "share/tu_xml_fwServices_0-0";
     }
     CPPUNIT_ASSERT(::boost::filesystem::exists(location));
 
     runtime->addBundles(location);
     CPPUNIT_ASSERT(runtime->bundlesBegin() !=  runtime->bundlesEnd());
 
-    // Test bundle servicesReg
-    ::boost::shared_ptr< ::fwRuntime::Bundle > bundle = runtime->findBundle("servicesReg");
+    std::shared_ptr< ::fwRuntime::Bundle > bundle = runtime->findBundle("servicesReg");
+    CPPUNIT_ASSERT_MESSAGE("'servicesReg bundle not found !'",bundle);
     bundle->setEnable(true);
+    CPPUNIT_ASSERT(bundle->isEnable());
 
     // Test bundle servicesReg
-    ::boost::shared_ptr< ::fwRuntime::Bundle > bundle2 = runtime->findBundle("AppConfigParametersTest");
+    std::shared_ptr< ::fwRuntime::Bundle > bundle2 = runtime->findBundle("AppConfigParametersTest");
+    CPPUNIT_ASSERT_MESSAGE("'AppConfigParametersTest' bundle not found",bundle2);
     bundle2->setEnable(true);
+    CPPUNIT_ASSERT(bundle2->isEnable());
 
     ::fwServices::registry::AppConfigParameters::sptr appConfigParam;
     appConfigParam = ::fwServices::registry::AppConfigParameters::getDefault();
@@ -88,11 +80,11 @@ void AppConfigParametersTest::appConfigParametersTest()
     ::fwServices::registry::AppConfigParameters::sptr appConfigParam;
     appConfigParam = ::fwServices::registry::AppConfigParameters::getDefault();
 
-    ::fwServices::registry::AppConfig::FieldAdaptorType parameters =  appConfigParam->getParameters("id1");
+    ::fwServices::registry::FieldAdaptorType parameters = appConfigParam->getParameters("id1");
     CPPUNIT_ASSERT(!parameters.empty());
     CPPUNIT_ASSERT_EQUAL(std::string("value1"), parameters["param1"]);
 
-    ::fwServices::registry::AppConfig::FieldAdaptorType parameters2 =  appConfigParam->getParameters("id2");
+    ::fwServices::registry::FieldAdaptorType parameters2 = appConfigParam->getParameters("id2");
     CPPUNIT_ASSERT(!parameters2.empty());
     CPPUNIT_ASSERT_EQUAL(std::string("value3"), parameters2["param3"]);
 }
@@ -103,15 +95,15 @@ void AppConfigParametersTest::concurentAccessToAppConfigParametersTest()
 {
     const unsigned int nbThreads = 20;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&AppConfigParametersTest::appConfigParametersTest, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&AppConfigParametersTest::appConfigParametersTest, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
diff --git a/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp b/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp
index 38180fe..5e669bb 100644
--- a/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/AppConfigTest.cpp
@@ -1,14 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwServices/registry/AppConfig.hpp>
+#include "AppConfigTest.hpp"
+
 #include <fwData/String.hpp>
-#include <fwTest/helper/Thread.hpp>
 
-#include "AppConfigTest.hpp"
+#include <fwServices/registry/AppConfig.hpp>
+
+#include <fwTest/helper/Thread.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::AppConfigTest );
@@ -37,18 +39,19 @@ void AppConfigTest::parametersConfigTest()
     ::fwServices::registry::AppConfig::sptr currentAppConfig = ::fwServices::registry::AppConfig::getDefault();
 
     const std::string configId(::fwServices::registry::AppConfig::getUniqueIdentifier());
-    const ::fwServices::registry::AppInfo::ConfigType configType(::fwServices::registry::AppInfo::PARAMETERS);
     const std::string group("parametersGroup");
     const std::string desc("Descritpion");
-    ::fwServices::registry::AppInfo::ParamatersType parameters;
+    const std::string bundleId("mybundle");
+    const std::string bundleVersion("0-8");
+    ::fwServices::registry::AppInfo::ParametersType parameters;
 
-    parameters["TEST_IMAGE"] = "";
+    parameters["TEST_IMAGE"]   = "";
     parameters["UID_SERVICE2"] = "myTestService2";
-    parameters["GENERIC_UID"] = "";
+    parameters["GENERIC_UID"]  = "";
 
     ::fwRuntime::ConfigurationElement::csptr config = this->buildParametersConfig();
 
-    currentAppConfig->addAppInfo(configId, configType, group, desc, parameters, config);
+    currentAppConfig->addAppInfo(configId, group, desc, parameters, config, bundleId, bundleVersion);
 
     std::vector< std::string > allCconfigs = currentAppConfig->getAllConfigs();
     CPPUNIT_ASSERT( !allCconfigs.empty());
@@ -56,7 +59,7 @@ void AppConfigTest::parametersConfigTest()
     std::vector< std::string > configs = currentAppConfig->getConfigsFromGroup(group);
     CPPUNIT_ASSERT(!configs.empty());
 
-    ::fwServices::registry::AppConfig::FieldAdaptorType replaceFields;
+    ::fwServices::registry::FieldAdaptorType replaceFields;
     replaceFields["TEST_IMAGE"] = "objectUUID";
     const std::string uniqueIdentifier = ::fwServices::registry::AppConfig::getUniqueIdentifier();
     replaceFields["GENERIC_UID"] = uniqueIdentifier;
@@ -65,7 +68,7 @@ void AppConfigTest::parametersConfigTest()
     configEltAdaptedConst = currentAppConfig->getAdaptedTemplateConfig(configId, replaceFields);
 
     ::fwRuntime::ConfigurationElement::sptr configEltAdapted;
-    configEltAdapted =  ::fwRuntime::ConfigurationElement::constCast(configEltAdaptedConst);
+    configEltAdapted = ::fwRuntime::ConfigurationElement::constCast(configEltAdaptedConst);
 
     std::string uid = configEltAdapted->getAttributeValue("uid");
     CPPUNIT_ASSERT_EQUAL(std::string("objectUUID"), uid );
@@ -77,7 +80,6 @@ void AppConfigTest::parametersConfigTest()
 
     std::string serviceUid2 = servicesCfg.at(1)->getAttributeValue("uid");
     CPPUNIT_ASSERT_EQUAL( std::string("myTestService2"), serviceUid2);
-
 }
 
 //-----------------------------------------------------------------------------
@@ -87,15 +89,15 @@ void AppConfigTest::concurentAccessToAppConfigTest()
     const unsigned int nbThreads = 20;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&AppConfigTest::parametersConfigTest, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&AppConfigTest::parametersConfigTest, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
@@ -113,35 +115,35 @@ void AppConfigTest::concurentAccessToAppConfigTest()
 ::fwRuntime::ConfigurationElement::sptr AppConfigTest::buildParametersConfig()
 {
     // Configuration on fwTools::Object which uid is objectUUID
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object")) ;
-    cfg->setAttributeValue( "uid" , "${TEST_IMAGE}") ;
-    cfg->setAttributeValue( "type" , "::fwData::Image") ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object"));
+    cfg->setAttributeValue( "uid", "${TEST_IMAGE}");
+    cfg->setAttributeValue( "type", "::fwData::Image");
 
     // Object's service A
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
-    serviceA->setAttributeValue( "uid" , "${GENERIC_UID}_myTestService1" ) ;
-    serviceA->setAttributeValue( "type" , "::fwComEd::ut::TestService" ) ;
-    serviceA->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-    serviceA->setAttributeValue( "autoConnect" , "no" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
+    serviceA->setAttributeValue( "uid", "${GENERIC_UID}_myTestService1" );
+    serviceA->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceA->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+    serviceA->setAttributeValue( "autoConnect", "no" );
 
     // Object's service B
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
-    serviceB->setAttributeValue( "uid" , "${UID_SERVICE2}" ) ;
-    serviceB->setAttributeValue( "type" , "::fwComEd::ut::TestService" ) ;
-    serviceB->setAttributeValue( "impl" , "::fwComEd::ut::TestServiceImplementationImage" ) ;
-    serviceB->setAttributeValue( "autoConnect" , "no" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
+    serviceB->setAttributeValue( "uid", "${UID_SERVICE2}" );
+    serviceB->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceB->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+    serviceB->setAttributeValue( "autoConnect", "no" );
 
     // Start method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
-    startA->setAttributeValue( "uid" , "myTestService1" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
-    startB->setAttributeValue( "uid" , "myTestService2" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
+    startA->setAttributeValue( "uid", "myTestService1" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
+    startB->setAttributeValue( "uid", "myTestService2" );
 
     // Update method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
-    updateA->setAttributeValue( "uid" , "myTestService1" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
+    updateA->setAttributeValue( "uid", "myTestService1" );
 
-    return cfg ;
+    return cfg;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp b/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp
new file mode 100644
index 0000000..98aa072
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/src/ConfigParserTest.cpp
@@ -0,0 +1,235 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ConfigParserTest.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Mesh.hpp>
+
+#include <fwServices/AppConfigManager.hpp>
+#include <fwServices/IService.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Get.hpp>
+
+#include "TestServices.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::ConfigParserTest );
+
+//------------------------------------------------------------------------------
+
+namespace fwServices
+{
+namespace ut
+{
+
+void ConfigParserTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void ConfigParserTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void ConfigParserTest::testObjectCreationWithConfig()
+{
+    const std::string objectUUID   = "objectUUID";
+    const std::string serviceUUID1 = "myTestService1";
+    const std::string serviceUUID2 = "myTestService2";
+
+    // Create object configuration
+    ::fwRuntime::ConfigurationElement::sptr config = buildObjectConfig();
+
+    // Create the object and its services from the configuration
+    ::fwServices::AppConfigManager::sptr configManager = ::fwServices::AppConfigManager::New();
+    configManager->::fwServices::IAppConfigManager::setConfig( config );
+    configManager->create();
+    auto image = ::fwData::Image::dynamicCast(configManager->getConfigRoot());
+
+    // Test object uid
+    CPPUNIT_ASSERT_EQUAL(objectUUID, image->getID());
+
+    // Test if object's service is created
+    CPPUNIT_ASSERT( ::fwServices::OSR::has(image, "::fwServices::ut::TestService"));
+
+    // Test start services
+    configManager->start();
+    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID1)->isStarted() );
+    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID2)->isStarted() );
+
+    // Test update services
+    configManager->update();
+    CPPUNIT_ASSERT( ::fwServices::ut::TestService::dynamicCast( ::fwServices::get(serviceUUID1) )->getIsUpdated() );
+    CPPUNIT_ASSERT( ::fwServices::ut::TestService::dynamicCast( ::fwServices::get(serviceUUID2) )->getIsUpdated() ==
+                    false );
+
+    // Test stop services
+    configManager->stop();
+    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID1)->isStopped() );
+    CPPUNIT_ASSERT( ::fwServices::get(serviceUUID2)->isStopped() );
+
+    configManager->destroy();
+}
+
+//------------------------------------------------------------------------------
+
+void ConfigParserTest::testBuildComposite()
+{
+    const std::string compositeUUID = "compositeUUID";
+    const std::string objAUUID      = "imageUUID";
+    const std::string objBUUID      = "meshUUID";
+    const std::string serviceUUID1  = "myTestService1";
+    const std::string objAType      = "::fwData::Image";
+
+    // build composite from ConfigurationElement
+    std::shared_ptr< ::fwRuntime::ConfigurationElement > config = buildCompositeConfig();
+
+    // Create the object and its services from the configuration
+    ::fwServices::AppConfigManager::sptr configManager = ::fwServices::AppConfigManager::New();
+    configManager->::fwServices::IAppConfigManager::setConfig( config );
+    configManager->create();
+    auto compo = ::fwData::Composite::dynamicCast(configManager->getConfigRoot());
+
+    // test composite
+    CPPUNIT_ASSERT_EQUAL(compositeUUID, compo->getID());
+
+    // test composite objects
+    CPPUNIT_ASSERT(compo->getContainer().size() > 0);
+
+    CPPUNIT_ASSERT(compo->find(objAUUID) != compo->end());
+
+    CPPUNIT_ASSERT_EQUAL(objAType, compo->getContainer()[objAUUID]->className());
+
+    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::dynamicCast(compo->getContainer()[objBUUID]);
+    CPPUNIT_ASSERT_EQUAL(objBUUID, mesh->getID());
+
+    // test composite services
+    ::fwData::Image::sptr image = ::fwData::Image::dynamicCast(compo->getContainer()[objAUUID]);
+    CPPUNIT_ASSERT_EQUAL(objAUUID, image->getID());
+    CPPUNIT_ASSERT( ::fwServices::OSR::has(image, "::fwServices::ut::TestService"));
+
+    CPPUNIT_ASSERT( ::fwServices::OSR::has(compo, "::fwServices::ut::TestService"));
+
+    /// test start/update/stop service
+    configManager->start();
+    CPPUNIT_ASSERT(::fwServices::get(serviceUUID1)->isStarted());
+
+    configManager->update();
+    CPPUNIT_ASSERT(::fwServices::ut::TestService::dynamicCast(::fwServices::get(serviceUUID1))->getIsUpdated());
+
+    configManager->stop();
+    CPPUNIT_ASSERT(::fwServices::get(serviceUUID1)->isStopped());
+
+    configManager->destroy();
+}
+
+//------------------------------------------------------------------------------
+
+::fwRuntime::ConfigurationElement::sptr ConfigParserTest::buildObjectConfig()
+{
+    // Configuration on fwTools::Object which uid is objectUUID
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object"));
+    cfg->setAttributeValue( "uid", "objectUUID");
+    cfg->setAttributeValue( "type", "::fwData::Image");
+
+    // Object's service A
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
+    serviceA->setAttributeValue( "uid", "myTestService1" );
+    serviceA->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceA->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+
+    // Object's service B
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
+    serviceB->setAttributeValue( "uid", "myTestService2" );
+    serviceB->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+
+    // Start method from object's services
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
+    startA->setAttributeValue( "uid", "myTestService1" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
+    startB->setAttributeValue( "uid", "myTestService2" );
+
+    // Update method from object's services
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
+    updateA->setAttributeValue( "uid", "myTestService1" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+::fwRuntime::ConfigurationElement::sptr ConfigParserTest::buildCompositeConfig()
+{
+    // Composite
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object"));
+    cfg->setAttributeValue( "uid", "compositeUUID");
+    cfg->setAttributeValue( "type", "::fwData::Composite");
+
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > itemA = cfg->addConfigurationElement("item");
+    itemA->setAttributeValue( "key", "imageUUID");
+
+
+    // composite object : image
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objA = itemA->addConfigurationElement("object");
+    objA->setAttributeValue( "uid", "imageUUID");
+    objA->setAttributeValue( "type", "::fwData::Image");
+
+    // image's services
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > imageService = objA->addConfigurationElement("service");
+    imageService->setAttributeValue( "uid", "myImageService" );
+    imageService->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > imageService2 = objA->addConfigurationElement("service");
+    imageService2->setAttributeValue( "uid", "myImageService2" );
+    imageService2->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationImage" );
+
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > itemB = cfg->addConfigurationElement("item");
+    itemB->setAttributeValue( "key", "meshUUID");
+
+
+    // composite object : mesh
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > objB = itemB->addConfigurationElement("object");
+    objB->setAttributeValue( "uid", "meshUUID");
+    //objB->setAttributeValue( "id" , "meshUUID") ;
+    objB->setAttributeValue( "type", "::fwData::Mesh");
+
+    // composite's service 1
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service = cfg->addConfigurationElement("service");
+    service->setAttributeValue( "uid", "myTestService1" );
+    service->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationComposite" );
+
+    // start / stop / update on service 1
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > start = cfg->addConfigurationElement("start");
+    start->setAttributeValue( "uid", "myTestService1" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > update = cfg->addConfigurationElement("update");
+    update->setAttributeValue( "uid", "myTestService1" );
+
+    // composite's service 2
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > service2 = cfg->addConfigurationElement("service");
+    service2->setAttributeValue( "uid", "myTestService2" );
+    service2->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementationComposite" );
+
+    // start / stop / update on service 2
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > start2 = cfg->addConfigurationElement("start");
+    start2->setAttributeValue( "uid", "myTestService2" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > update2 = cfg->addConfigurationElement("update");
+    update2->setAttributeValue( "uid", "myTestService2" );
+
+    return cfg;
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwServices
diff --git a/SrcLib/core/fwServices/test/tu/src/ObjectMsgTest.cpp b/SrcLib/core/fwServices/test/tu/src/ObjectMsgTest.cpp
deleted file mode 100644
index a2651af..0000000
--- a/SrcLib/core/fwServices/test/tu/src/ObjectMsgTest.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <fwData/Image.hpp>
-
-#include <fwServices/ObjectMsg.hpp>
-
-#include "ObjectMsgTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::ObjectMsgTest );
-
-namespace fwServices
-{
-namespace ut
-{
-
-//------------------------------------------------------------------------------
-
-void ObjectMsgTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void ObjectMsgTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void ObjectMsgTest::testObjectMsg()
-{
-    const std::string EVENT1 = "EVENT1";
-    const std::string EVENT2 = "EVENT2";
-
-    ::fwData::Image::sptr image = ::fwData::Image::New();
-
-    // create message with events
-    ::fwServices::ObjectMsg::sptr objMsg = ::fwServices::ObjectMsg::New();
-    objMsg->addEvent(EVENT1);
-    objMsg->addEvent(EVENT2, image);
-
-
-    // check events
-    CPPUNIT_ASSERT(objMsg->hasEvent(EVENT1));
-    CPPUNIT_ASSERT(objMsg->hasEvent(EVENT2));
-
-    // check event object
-    ::fwData::Object::sptr obj = ::fwData::Object::constCast( objMsg->getDataInfo( EVENT2 ) );
-    ::fwData::Image::sptr img = ::fwData::Image::dynamicCast( obj );
-
-    CPPUNIT_ASSERT_EQUAL(image, img);
-}
-
-//------------------------------------------------------------------------------
-
-} //namespace ut
-} //namespace fwServices
diff --git a/SrcLib/core/fwServices/test/tu/src/ObjectServiceTest.cpp b/SrcLib/core/fwServices/test/tu/src/ObjectServiceTest.cpp
index c67fefa..e931655 100644
--- a/SrcLib/core/fwServices/test/tu/src/ObjectServiceTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ObjectServiceTest.cpp
@@ -1,20 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include <fwCore/Profiling.hpp>
+
 #include <fwData/Float.hpp>
 #include <fwData/Integer.hpp>
 
 #include <fwServices/IService.hpp>
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
+
+#include <fwServices/op/Add.hpp>
+#include <fwServices/op/Get.hpp>
+
 #include <fwServices/registry/ServiceFactory.hpp>
 
-#include "ServiceTest.hpp"
+#include <fwThread/Worker.hpp>
+
+#include "TestService.hpp"
 #include "ObjectServiceTest.hpp"
 
+#include <unordered_set>
+
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::ObjectServiceTest );
 
@@ -45,7 +54,7 @@ void ObjectServiceTest::swapTest()
     const std::string srvImplementation("::fwServices::ut::TestServiceImplementation");
 
     ::fwData::Integer::sptr objSrv1 = ::fwData::Integer::New();
-    ::fwData::Float::sptr objSrv2 = ::fwData::Float::New();
+    ::fwData::Float::sptr objSrv2   = ::fwData::Float::New();
 
     ::fwServices::IService::sptr service;
     service = ::fwServices::registry::ServiceFactory::getDefault()->create( srvType, srvImplementation );
@@ -54,13 +63,12 @@ void ObjectServiceTest::swapTest()
 
     osr.registerService(objSrv1, service);
 
-    typedef std::vector< ::fwServices::ut::TestService::sptr > ServiceVectorType;
-    ServiceVectorType servicesByTemplateTypeAndObj1 = osr.getServices< ::fwServices::ut::TestService >( objSrv1 );
-    ServiceVectorType servicesByTemplateTypeAndObj2 = osr.getServices< ::fwServices::ut::TestService >( objSrv2 );
+    auto servicesByTemplateTypeAndObj1 = osr.getServices< ::fwServices::ut::TestService >( objSrv1 );
+    auto servicesByTemplateTypeAndObj2 = osr.getServices< ::fwServices::ut::TestService >( objSrv2 );
 
     CPPUNIT_ASSERT_EQUAL(size_t(1), servicesByTemplateTypeAndObj1.size());
     CPPUNIT_ASSERT_EQUAL(size_t(0), servicesByTemplateTypeAndObj2.size());
-    ::fwServices::IService::sptr osrSrv = servicesByTemplateTypeAndObj1[0];
+    ::fwServices::IService::sptr osrSrv = *servicesByTemplateTypeAndObj1.begin();
     CPPUNIT_ASSERT_EQUAL(service, osrSrv);
 
     osr.swapService(objSrv2, service);
@@ -72,7 +80,7 @@ void ObjectServiceTest::swapTest()
 
     CPPUNIT_ASSERT_EQUAL(size_t(0), servicesByTemplateTypeAndObj1.size());
     CPPUNIT_ASSERT_EQUAL(size_t(1), servicesByTemplateTypeAndObj2.size());
-    osrSrv = servicesByTemplateTypeAndObj2[0];
+    osrSrv = *servicesByTemplateTypeAndObj2.begin();
     CPPUNIT_ASSERT_EQUAL(service, osrSrv);
 
     osr.unregisterService(service);
@@ -96,12 +104,10 @@ void ObjectServiceTest::registerTest()
     CPPUNIT_ASSERT(osr.has(obj, srvType) );
 
     typedef ::fwServices::registry::ObjectService::ServiceVectorType ServiceVectorType;
-    ServiceVectorType servicesByType = osr.getServices( srvType );
+    ServiceVectorType servicesByType       = osr.getServices( srvType );
     ServiceVectorType servicesByObjAndType = osr.getServices( obj, srvType );
-    typedef std::vector< ::fwServices::ut::TestService::sptr > TestServiceVectorType;
-    TestServiceVectorType servicesByTemplateType = osr.getServices< ::fwServices::ut::TestService >( );
-    TestServiceVectorType servicesByTemplateTypeAndObj = osr.getServices< ::fwServices::ut::TestService >( obj );
-
+    auto servicesByTemplateType            = osr.getServices< ::fwServices::ut::TestService >( );
+    auto servicesByTemplateTypeAndObj      = osr.getServices< ::fwServices::ut::TestService >( obj );
 
     CPPUNIT_ASSERT(servicesByType == servicesByObjAndType);
     CPPUNIT_ASSERT(std::equal(servicesByType.begin(), servicesByType.end(), servicesByTemplateType.begin()));
@@ -109,12 +115,12 @@ void ObjectServiceTest::registerTest()
 
     CPPUNIT_ASSERT_EQUAL(size_t(1), servicesByType.size());
     typedef ::fwServices::registry::ObjectService::ObjectVectorType ObjectVectorType;
-    ::fwServices::IService::sptr osrService = servicesByType[0];
+    ::fwServices::IService::sptr osrService = *servicesByType.begin();
     CPPUNIT_ASSERT_EQUAL(service, osrService);
 
     ObjectVectorType objects = osr.getObjects();
     CPPUNIT_ASSERT_EQUAL(size_t(1), objects.size());
-    ::fwData::Object::sptr osrObject = objects[0];
+    ::fwData::Object::csptr osrObject = *objects.begin();
     CPPUNIT_ASSERT(obj == osrObject);
 
     osr.unregisterService(service);
@@ -125,5 +131,288 @@ void ObjectServiceTest::registerTest()
 
 //------------------------------------------------------------------------------
 
+void ObjectServiceTest::registerKeyTest()
+{
+    const std::string srvType("::fwServices::ut::TestService");
+    const std::string srvImplementation1("::fwServices::ut::TestServiceImplementation");
+    const std::string srvImplementation2("::fwServices::ut::TestServiceImplementation2");
+
+    ::fwData::Integer::sptr obj1 = ::fwData::Integer::New();
+    ::fwData::Integer::sptr obj2 = ::fwData::Integer::New();
+    ::fwData::Integer::sptr obj3 = ::fwData::Integer::New();
+
+    auto service1 = ::fwServices::registry::ServiceFactory::getDefault()->create( srvType, srvImplementation1 );
+    auto service2 = ::fwServices::registry::ServiceFactory::getDefault()->create( srvType, srvImplementation2 );
+    auto service3 = ::fwServices::registry::ServiceFactory::getDefault()->create( srvType, srvImplementation1 );
+
+    ::fwServices::registry::ObjectService osr;
+
+    service1->setObjectId("key1", "uid1");
+    service1->setObjectId("key2", "uid2");
+    service1->setObjectId("key3", "uid3");
+
+    service2->setObjectId("key1", "uid1");
+    service2->setObjectId("key2", "uid2");
+
+    service3->setObjectId("key3", "uid3");
+
+    osr.registerService(obj1, "key1", ::fwServices::IService::AccessType::INOUT, service1);
+    osr.registerService(obj2, "key2", ::fwServices::IService::AccessType::INOUT, service1);
+    osr.registerService(obj3, "key3", ::fwServices::IService::AccessType::INOUT, service1);
+
+    CPPUNIT_ASSERT( osr.has(obj1, srvType) );
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) );
+    CPPUNIT_ASSERT( osr.has(obj3, srvType) );
+
+    CPPUNIT_ASSERT( osr.has(obj1, srvImplementation1) );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation1) );
+    CPPUNIT_ASSERT( osr.has(obj3, srvImplementation1) );
+
+    osr.registerService(obj1, "key1", ::fwServices::IService::AccessType::INOUT, service2);
+    osr.registerService(obj2, "key2", ::fwServices::IService::AccessType::INOUT, service2);
+
+    CPPUNIT_ASSERT( osr.has(obj1, srvType) );
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) );
+    CPPUNIT_ASSERT( osr.has(obj3, srvType) );
+
+    CPPUNIT_ASSERT( osr.has(obj1, srvImplementation2) );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation2) );
+    CPPUNIT_ASSERT(!osr.has(obj3, srvImplementation2) );
+
+    osr.registerService(obj3, "key3", ::fwServices::IService::AccessType::INOUT, service3);
+
+    CPPUNIT_ASSERT( osr.has(obj1, srvType) );
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) );
+    CPPUNIT_ASSERT( osr.has(obj3, srvType) );
+
+    CPPUNIT_ASSERT( osr.has(obj1, srvImplementation1) );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation1) );
+    CPPUNIT_ASSERT( osr.has(obj3, srvImplementation1) );
+
+    // 3 services in total
+    {
+        auto servicesByType         = osr.getServices( srvType );
+        auto servicesByTemplateType = osr.getServices< ::fwServices::ut::TestService >( );
+
+        CPPUNIT_ASSERT_EQUAL(size_t(3), servicesByType.size());
+        CPPUNIT_ASSERT(std::equal(servicesByType.begin(), servicesByType.end(), servicesByTemplateType.begin()));
+    }
+
+    // 2 services of type "::fwServices::ut::TestServiceImplementation"
+    {
+        auto servicesByType         = osr.getServices( srvImplementation1 );
+        auto servicesByTemplateType = osr.getServices< ::fwServices::ut::TestServiceImplementation >( );
+
+        CPPUNIT_ASSERT_EQUAL(size_t(2), servicesByType.size());
+        CPPUNIT_ASSERT(std::equal(servicesByType.begin(), servicesByType.end(), servicesByTemplateType.begin()));
+    }
+
+    // 1 service of type "::fwServices::ut::TestServiceImplementation2"
+    {
+        auto servicesByType         = osr.getServices( srvImplementation2 );
+        auto servicesByTemplateType = osr.getServices< ::fwServices::ut::TestServiceImplementation2 >( );
+
+        CPPUNIT_ASSERT_EQUAL(size_t(1), servicesByType.size());
+        CPPUNIT_ASSERT(std::equal(servicesByType.begin(), servicesByType.end(), servicesByTemplateType.begin()));
+    }
+
+    // 2 services of type "::fwServices::ut::TestService" working on obj1
+    {
+        auto srvByObjAndType1    = osr.getServices( obj1, srvType );
+        auto srvByTplTypeAndObj1 = osr.getServices< ::fwServices::ut::TestService >( obj1 );
+
+        CPPUNIT_ASSERT_EQUAL(size_t(2), srvByObjAndType1.size());
+        CPPUNIT_ASSERT(std::equal(srvByObjAndType1.begin(), srvByObjAndType1.end(), srvByTplTypeAndObj1.begin()));
+    }
+
+    // 1 service of type "::fwServices::ut::TestServiceImplementation" working on obj1
+    {
+        auto srvByTplTypeAndObj1 = osr.getServices< ::fwServices::ut::TestServiceImplementation >( obj1 );
+        CPPUNIT_ASSERT_EQUAL(size_t(1), srvByTplTypeAndObj1.size());
+        CPPUNIT_ASSERT(service1 == *srvByTplTypeAndObj1.begin());
+    }
+
+    // 1 service of type "::fwServices::ut::TestServiceImplementation2" working on obj1
+    {
+        auto srvByTplTypeAndObj1 = osr.getServices< ::fwServices::ut::TestServiceImplementation2 >( obj1 );
+        CPPUNIT_ASSERT_EQUAL(size_t(1), srvByTplTypeAndObj1.size());
+        CPPUNIT_ASSERT(service2 == *srvByTplTypeAndObj1.begin());
+    }
+
+    // 1 service of type "::fwServices::ut::TestServiceImplementation2" working on obj2
+    {
+        auto srvByTplTypeAndObj2 = osr.getServices< ::fwServices::ut::TestServiceImplementation2 >( obj2 );
+        CPPUNIT_ASSERT_EQUAL(size_t(1), srvByTplTypeAndObj2.size());
+        CPPUNIT_ASSERT(service2 == *srvByTplTypeAndObj2.begin());
+    }
+
+    // 2 services of type "::fwServices::ut::TestServiceImplementation" working on obj3
+    {
+        auto srvByObjAndType3    = osr.getServices( obj3, srvType );
+        auto srvByTplTypeAndObj3 = osr.getServices< ::fwServices::ut::TestServiceImplementation >( obj3 );
+
+        CPPUNIT_ASSERT_EQUAL(size_t(2), srvByObjAndType3.size());
+        CPPUNIT_ASSERT(std::equal(srvByObjAndType3.begin(), srvByObjAndType3.end(), srvByTplTypeAndObj3.begin()));
+    }
+
+    auto srvByObjAndType1 = osr.getServices( obj1, srvType );
+    auto srvByObjAndType2 = osr.getServices( obj2, srvType );
+    auto srvByObjAndType3 = osr.getServices( obj3, srvType );
+
+    typedef ::fwServices::registry::ObjectService::ServiceVectorType ServiceVectorType;
+    ServiceVectorType allServices;
+    std::move(srvByObjAndType1.begin(), srvByObjAndType1.end(), std::inserter(allServices, allServices.begin()));
+    std::move(srvByObjAndType2.begin(), srvByObjAndType2.end(), std::inserter(allServices, allServices.begin()));
+    std::move(srvByObjAndType3.begin(), srvByObjAndType3.end(), std::inserter(allServices, allServices.begin()));
+
+    auto servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT(std::equal(servicesByType.begin(), servicesByType.end(), allServices.begin()));
+
+    CPPUNIT_ASSERT_EQUAL(size_t(3), servicesByType.size());
+
+    typedef ::fwServices::registry::ObjectService::ObjectVectorType ObjectVectorType;
+    CPPUNIT_ASSERT(servicesByType.find(service1) != servicesByType.end());
+    CPPUNIT_ASSERT(servicesByType.find(service2) != servicesByType.end());
+    CPPUNIT_ASSERT(servicesByType.find(service3) != servicesByType.end());
+
+    ObjectVectorType objects = osr.getObjects();
+    CPPUNIT_ASSERT_EQUAL(size_t(3), objects.size());
+
+    CPPUNIT_ASSERT(objects.find(obj1) != objects.end());
+    CPPUNIT_ASSERT(objects.find(obj2) != objects.end());
+    CPPUNIT_ASSERT(objects.find(obj3) != objects.end());
+
+    // Remove key 1 from service 1 and check consistency
+    osr.unregisterService("key1", ::fwServices::IService::AccessType::INOUT, service1);
+    CPPUNIT_ASSERT( osr.has(obj1, srvType) == true );
+    CPPUNIT_ASSERT( osr.has(obj1, srvImplementation1) == false );
+    CPPUNIT_ASSERT( osr.has(obj1, srvImplementation2) == true );
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) == true );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation1) == true );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation2) == true );
+    servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT_EQUAL(size_t(3), servicesByType.size());
+
+    osr.unregisterService(service1);
+    servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) == true );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation1) == false );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation2) == true );
+    CPPUNIT_ASSERT_EQUAL(size_t(2), servicesByType.size());
+
+    // Remove key 2 from service 2 and check consistency
+    osr.unregisterService("key2", ::fwServices::IService::AccessType::INOUT, service2);
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) == false );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation1) == false );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation2) == false );
+    servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT_EQUAL(size_t(2), servicesByType.size());
+
+    // Register key 2 to service 1 just for fun
+    osr.registerService(obj2, "key2", ::fwServices::IService::AccessType::INOUT, service1);
+    CPPUNIT_ASSERT( osr.has(obj2, srvType) == true );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation1) == true );
+    CPPUNIT_ASSERT( osr.has(obj2, srvImplementation2) == false );
+    servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT_EQUAL(size_t(3), servicesByType.size());
+
+    // Remove service 3 and check consistency
+    osr.unregisterService(service3);
+    CPPUNIT_ASSERT( osr.has(obj3, srvType) == false );
+    CPPUNIT_ASSERT( osr.has(obj3, srvImplementation1) == false );
+    CPPUNIT_ASSERT( osr.has(obj3, srvImplementation2) == false );
+    servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT_EQUAL(size_t(2), servicesByType.size());
+
+    osr.unregisterService(service2);
+    osr.unregisterService("key2", ::fwServices::IService::AccessType::INOUT, service1);
+
+    servicesByType = osr.getServices( srvType );
+    CPPUNIT_ASSERT( servicesByType.empty() );
+}
+
+//------------------------------------------------------------------------------
+
+void ObjectServiceTest::registerConnectionTest()
+{
+    ::fwServices::registry::ObjectService osr;
+
+    const std::string srvType("::fwServices::ut::TestService");
+    const std::string srvImplementation1("::fwServices::ut::TestServiceImplementation");
+
+    ::fwData::Integer::sptr obj1 = ::fwData::Integer::New();
+    ::fwData::Integer::sptr obj2 = ::fwData::Integer::New();
+
+    auto service1 = ::fwServices::registry::ServiceFactory::getDefault()->create( srvType, srvImplementation1 );
+
+    auto worker         = ::fwThread::Worker::New();
+    auto slotRegister   = ::fwCom::newSlot( &ObjectServiceTest::registerService, this);
+    auto slotUnregister = ::fwCom::newSlot( &ObjectServiceTest::unregisterService, this);
+    slotRegister->setWorker(worker);
+    slotUnregister->setWorker(worker);
+
+    osr.signal(::fwServices::registry::ObjectService::s_REGISTERED_SIG)->connect(slotRegister);
+    osr.signal(::fwServices::registry::ObjectService::s_UNREGISTERED_SIG)->connect(slotUnregister);
+
+    // Register callback test
+    // Each time we wait the slot with a timeout to avoid blocking the test in case of failure
+    service1->setObjectId("key1", "uid1");
+    osr.registerServiceOutput(obj1, "key1", service1);
+    {
+        std::unique_lock<std::mutex> lock(m_mutex);
+        m_condition.wait_for(lock, std::chrono::milliseconds(1000), [this] { return m_ret == "uid1"; });
+
+        CPPUNIT_ASSERT_EQUAL(std::string("uid1"), m_ret);
+        CPPUNIT_ASSERT(obj1 == m_obj);
+    }
+
+    service1->setObjectId("key2", "uid2");
+    osr.registerServiceOutput(obj2, "key2", service1);
+    {
+        std::unique_lock<std::mutex> lock(m_mutex);
+        m_condition.wait_for(lock, std::chrono::milliseconds(1000), [this] { return m_ret == "uid2"; });
+
+        CPPUNIT_ASSERT_EQUAL(std::string("uid2"), m_ret);
+        CPPUNIT_ASSERT(obj2 == m_obj);
+    }
+
+    // Unregister callback test
+    osr.unregisterServiceOutput("key1", service1);
+    {
+        std::unique_lock<std::mutex> lock(m_mutex);
+        m_condition.wait_for(lock, std::chrono::milliseconds(1000), [this] { return m_ret == "uid1"; });
+
+        CPPUNIT_ASSERT_EQUAL(std::string("uid1"), m_ret);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void ObjectServiceTest::registerService(::fwData::Object::sptr obj, const std::string& id)
+{
+    {
+        std::unique_lock<std::mutex> lock(m_mutex);
+        m_obj = obj;
+        m_ret = id;
+    }
+    m_condition.notify_one();
+
+}
+
+//------------------------------------------------------------------------------
+
+void ObjectServiceTest::unregisterService(::fwData::Object::sptr obj, const std::string& id)
+{
+    {
+        std::unique_lock<std::mutex> lock(m_mutex);
+        m_obj = obj;
+        m_ret = id;
+    }
+    m_condition.notify_one();
+
+}
+
+//------------------------------------------------------------------------------
+
 } //namespace ut
 } //namespace fwServices
diff --git a/SrcLib/core/fwServices/test/tu/src/ProxyTest.cpp b/SrcLib/core/fwServices/test/tu/src/ProxyTest.cpp
index e52b537..3d4e340 100644
--- a/SrcLib/core/fwServices/test/tu/src/ProxyTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ProxyTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,7 +46,8 @@ struct ProxyTestClass
         m_methodSum(0),
         m_methodSquare(0),
         m_methodDoNothing(0)
-    {}
+    {
+    }
 
     int sum(int a, int b)
     {
@@ -81,14 +82,14 @@ void ProxyTest::basicTest()
 
     ::fwServices::registry::Proxy::sptr proxy = ::fwServices::registry::Proxy::getDefault();
 
-    ::fwCom::Signal< void(int, int) >::sptr sig = ::fwCom::Signal< void(int, int) >::New();
+    ::fwCom::Signal< void(int, int) >::sptr sig        = ::fwCom::Signal< void(int, int) >::New();
     ::fwCom::Signal< void(int, int, char) >::sptr sig2 = ::fwCom::Signal< void(int, int, char) >::New();
 
     ProxyTestClass testObject;
     ::fwCom::Slot< int (int, int) >::sptr slot = ::fwCom::newSlot( &ProxyTestClass::sum, &testObject );
-    ::fwCom::Slot< int (int) >::sptr slot2 = ::fwCom::newSlot( &ProxyTestClass::square, &testObject );
-    ::fwCom::Slot< void() >::sptr slot3 = ::fwCom::newSlot( &ProxyTestClass::doNothing, &testObject );
-    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    ::fwCom::Slot< int (int) >::sptr slot2     = ::fwCom::newSlot( &ProxyTestClass::square, &testObject );
+    ::fwCom::Slot< void() >::sptr slot3        = ::fwCom::newSlot( &ProxyTestClass::doNothing, &testObject );
+    ::fwThread::Worker::sptr worker            = ::fwThread::Worker::New();
     slot->setWorker(worker);
     slot2->setWorker(worker);
     slot3->setWorker(worker);
diff --git a/SrcLib/core/fwServices/test/tu/src/ServiceConfigTest.cpp b/SrcLib/core/fwServices/test/tu/src/ServiceConfigTest.cpp
index 223d445..8fb9bc0 100644
--- a/SrcLib/core/fwServices/test/tu/src/ServiceConfigTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ServiceConfigTest.cpp
@@ -1,15 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "ServiceConfigTest.hpp"
+
 #include <fwServices/registry/AppConfig.hpp>
 #include <fwServices/registry/ServiceConfig.hpp>
 #include <fwData/String.hpp>
 #include <fwTest/helper/Thread.hpp>
 
-#include "ServiceConfigTest.hpp"
+#include <functional>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::ServiceConfigTest );
@@ -51,7 +53,7 @@ void ServiceConfigTest::serviceConfigTest()
     CPPUNIT_ASSERT_EQUAL(std::string("serviceUUID"), serviceConfig->getAttributeValue("uid"));
 
     std::vector< std::string > configs = currentServiceConfig->getAllConfigForService(service);
-    CPPUNIT_ASSERT( ! configs.empty());
+    CPPUNIT_ASSERT( !configs.empty());
     CPPUNIT_ASSERT(std::find(configs.begin(), configs.end(), configId) != configs.end());
 }
 
@@ -61,15 +63,15 @@ void ServiceConfigTest::concurentAccessToServiceConfigTest()
 {
     const unsigned int nbThreads = 20;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&ServiceConfigTest::serviceConfigTest, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&ServiceConfigTest::serviceConfigTest, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
@@ -79,7 +81,8 @@ void ServiceConfigTest::concurentAccessToServiceConfigTest()
     ::fwServices::registry::ServiceConfig::sptr currentServiceConfig;
     currentServiceConfig = ::fwServices::registry::ServiceConfig::getDefault();
     currentServiceConfig->clearRegistry();
-    std::vector< std::string > allCconfigs = currentServiceConfig->getAllConfigForService("::fwServices::ut::TestService");
+    std::vector< std::string > allCconfigs = currentServiceConfig->getAllConfigForService(
+        "::fwServices::ut::TestService");
     CPPUNIT_ASSERT(allCconfigs.empty());
 }
 
@@ -87,15 +90,16 @@ void ServiceConfigTest::concurentAccessToServiceConfigTest()
 
 ::fwRuntime::ConfigurationElement::sptr ServiceConfigTest::buildConfig()
 {
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceCfg ( new ::fwRuntime::EConfigurationElement("config")) ;
-    serviceCfg->setAttributeValue( "uid" , "serviceUUID") ;
-    serviceCfg->setAttributeValue( "type" , "serviceType") ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceCfg ( new ::fwRuntime::EConfigurationElement(
+                                                                           "config"));
+    serviceCfg->setAttributeValue( "uid", "serviceUUID");
+    serviceCfg->setAttributeValue( "type", "serviceType");
 
     ::fwRuntime::EConfigurationElement::sptr cfg = serviceCfg->addConfigurationElement("param");
-    cfg->setValue("Parameter") ;
+    cfg->setValue("Parameter");
 
 
-    return serviceCfg ;
+    return serviceCfg;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp b/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp
index 8517b4a..19cd311 100644
--- a/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/ServiceTest.cpp
@@ -1,39 +1,38 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/Object.hpp>
-#include <fwTools/fwID.hpp>
+#include "ServiceTest.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
 
 #include <fwData/Composite.hpp>
 #include <fwData/Image.hpp>
 #include <fwData/Integer.hpp>
+#include <fwData/Object.hpp>
+
+#include <fwRuntime/EConfigurationElement.hpp>
+#include <fwRuntime/helper.hpp>
 
 #include <fwServices/IService.hpp>
-#include <fwServices/IEditionService.hpp>
-#include <fwServices/Base.hpp>
 #include <fwServices/macros.hpp>
-#include <fwServices/registry/ServiceFactory.hpp>
-#include <fwServices/AppConfigManager.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
+#include <fwServices/op/Add.hpp>
+#include <fwServices/op/Get.hpp>
 #include <fwServices/registry/ActiveWorkers.hpp>
 
-#include <fwRuntime/EConfigurationElement.hpp>
-#include <fwRuntime/helper.hpp>
+#include <fwThread/Worker.hpp>
 
-#include "ServiceTest.hpp"
+#include "TestService.hpp"
+
+#include <thread>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::ServiceTest );
 
 //------------------------------------------------------------------------------
 
-fwServicesRegisterMacro( ::fwServices::ut::TestService , ::fwServices::ut::TestServiceImplementation , ::fwData::Object ) ;
-
-//------------------------------------------------------------------------------
-
 namespace fwServices
 {
 namespace ut
@@ -59,7 +58,33 @@ void ServiceTest::testServiceCreation()
     ::fwServices::IService::sptr service;
 
     // Test if the object support the service
-    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(), "::fwServices::ut::TestService") );
+    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(),
+                                                                                  "::fwServices::ut::TestService") );
+
+    // Test adding service
+    ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation");
+    CPPUNIT_ASSERT(::fwServices::OSR::has(obj, "::fwServices::ut::TestService") );
+
+    // Test getting the service its object
+    service = ::fwServices::get(obj, "::fwServices::ut::TestService");
+    CPPUNIT_ASSERT(service);
+    CPPUNIT_ASSERT_EQUAL(obj, service->getObject< ::fwData::Integer >());
+
+    // Test erasing service
+    ::fwServices::OSR::unregisterService(service);
+    CPPUNIT_ASSERT( ::fwServices::OSR::has(obj, "::fwServices::ut::TestService") == false );
+}
+
+//------------------------------------------------------------------------------
+
+void ServiceTest::testServiceCreationWithMultipleData()
+{
+    ::fwData::Integer::sptr obj = ::fwData::Integer::New();
+    ::fwServices::IService::sptr service;
+
+    // Test if the object support the service
+    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(),
+                                                                                  "::fwServices::ut::TestService") );
 
     // Test adding service
     ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation");
@@ -83,7 +108,8 @@ void ServiceTest::testServiceCreationWithTemplateMethods()
     ::fwServices::ut::TestService::sptr service;
 
     // Test if the object support the service
-    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(), "::fwServices::ut::TestService") );
+    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(),
+                                                                                  "::fwServices::ut::TestService") );
 
     // Test adding service
     ::fwServices::add< ::fwServices::ut::TestService >(obj, "::fwServices::ut::TestServiceImplementation");
@@ -103,20 +129,22 @@ void ServiceTest::testServiceCreationWithTemplateMethods()
 
 void ServiceTest::testServiceCreationWithUUID()
 {
-    const std::string myUUID = "myUUID";
+    const std::string myUUID  = "myUUID";
     const std::string myUUID2 = "myUUID2";
     const std::string myUUID3 = "myUUID3";
-    size_t nbServices = 0;
+    size_t nbServices         = 0;
 
     ::fwData::Integer::sptr obj = ::fwData::Integer::New();
     ::fwServices::IService::sptr service;
     ::fwServices::IService::sptr service2;
 
     // Test if the object support the service
-    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(), "::fwServices::ut::TestService") );
+    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(),
+                                                                                  "::fwServices::ut::TestService") );
 
     // Test adding service
-    service = ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation", myUUID);
+    service = ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation",
+                                myUUID);
     ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation", myUUID2);
     nbServices = 2;
     CPPUNIT_ASSERT(::fwServices::OSR::has(obj, "::fwServices::ut::TestService") );
@@ -128,7 +156,7 @@ void ServiceTest::testServiceCreationWithUUID()
     CPPUNIT_ASSERT(service);
     CPPUNIT_ASSERT(service2);
     CPPUNIT_ASSERT_EQUAL(obj, service2->getObject< ::fwData::Integer >());
-    CPPUNIT_ASSERT_EQUAL(myUUID2, service2 ->getID());
+    CPPUNIT_ASSERT_EQUAL(myUUID2, service2->getID());
     CPPUNIT_ASSERT( !::fwTools::fwID::exist(myUUID3) );
     CPPUNIT_ASSERT_EQUAL( nbServices, ::fwServices::OSR::getServices(obj, "::fwServices::ut::TestService").size() );
 
@@ -149,7 +177,8 @@ void ServiceTest::testStartStopUpdate()
     ::fwServices::ut::TestService::sptr service;
 
     // Add service
-    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(), "::fwServices::ut::TestService") );
+    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(),
+                                                                                  "::fwServices::ut::TestService") );
     ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation", myUUID);
     CPPUNIT_ASSERT(::fwServices::OSR::has(obj, "::fwServices::ut::TestService") );
 
@@ -179,12 +208,59 @@ void ServiceTest::testStartStopUpdate()
 
 //------------------------------------------------------------------------------
 
+struct TestServiceSignals : public ::fwCom::HasSlots
+{
+    typedef std::shared_ptr< TestServiceSignals > sptr;
+
+    TestServiceSignals() :
+        m_started(false),
+        m_updated(false),
+        m_stopped(false)
+    {
+        newSlot("start", &TestServiceSignals::start, this);
+        newSlot("update", &TestServiceSignals::update, this);
+        newSlot("stop", &TestServiceSignals::stop, this);
+
+        m_worker = ::fwThread::Worker::New();
+        m_slots.setWorker(m_worker);
+    }
+
+    void start()
+    {
+        m_started = true;
+    }
+    void update()
+    {
+        m_updated = true;
+    }
+    void stop()
+    {
+        m_stopped = true;
+    }
+
+    ::fwThread::Worker::sptr m_worker;
+    bool m_started;
+    bool m_updated;
+    bool m_stopped;
+
+};
+
+// Wait at worst 1s for a given condition
+#define WAIT(cond) \
+    ::fwCore::TimeStamp BOOST_PP_CAT(timeStamp, __LINE__); \
+    BOOST_PP_CAT(timeStamp, __LINE__).setLifePeriod(1000); \
+    BOOST_PP_CAT(timeStamp, __LINE__).modified(); \
+    while(!(cond) && !BOOST_PP_CAT(timeStamp, __LINE__).periodExpired()) \
+    { \
+        std::this_thread::sleep_for( std::chrono::milliseconds(1)); \
+    }
+
 void ServiceTest::testCommunication()
 {
     registry::ActiveWorkers::sptr activeWorkers = registry::ActiveWorkers::getDefault();
     activeWorkers->initRegistry();
 
-    const std::string EVENT = "EVENT";
+    const std::string EVENT        = "EVENT";
     const std::string service1UUID = "service1UUID";
     const std::string service2UUID = "service2UUID";
 
@@ -193,42 +269,95 @@ void ServiceTest::testCommunication()
     ::fwServices::ut::TestService::sptr service2;
 
     // Add services
-    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(), "::fwServices::ut::TestService") );
-    ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation", service1UUID);
+    CPPUNIT_ASSERT( ::fwServices::registry::ServiceFactory::getDefault()->support(obj->getClassname(),
+                                                                                  "::fwServices::ut::TestService") );
+    ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation",
+                      service1UUID);
     CPPUNIT_ASSERT(::fwServices::OSR::has(obj, "::fwServices::ut::TestService") );
     service1 = ::fwServices::ut::TestService::dynamicCast( ::fwServices::get(service1UUID) );
     CPPUNIT_ASSERT(service1);
 
-    ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation", service2UUID);
+    ::fwServices::add(obj, "::fwServices::ut::TestService", "::fwServices::ut::TestServiceImplementation",
+                      service2UUID);
     service2 = ::fwServices::ut::TestService::dynamicCast( ::fwServices::get(service2UUID) );
     CPPUNIT_ASSERT(service2);
 
+    // Object used to check service signals
+    TestServiceSignals::sptr receiver1 = std::make_shared< TestServiceSignals>();
+    TestServiceSignals::sptr receiver2 = std::make_shared< TestServiceSignals>();
+
+    ::fwCom::helper::SigSlotConnection comHelper;
+    comHelper.connect(service1, ::fwServices::IService::s_STARTED_SIG, receiver1, "start");
+    comHelper.connect(service1, ::fwServices::IService::s_UPDATED_SIG, receiver1, "update");
+    comHelper.connect(service1, ::fwServices::IService::s_STOPPED_SIG, receiver1, "stop");
+
+    CPPUNIT_ASSERT_EQUAL(false, receiver1->m_started);
+    CPPUNIT_ASSERT_EQUAL(false, receiver1->m_updated);
+    CPPUNIT_ASSERT_EQUAL(false, receiver1->m_stopped);
+
+    comHelper.connect(service2, ::fwServices::IService::s_STARTED_SIG, receiver2, "start");
+    comHelper.connect(service2, ::fwServices::IService::s_UPDATED_SIG, receiver2, "update");
+    comHelper.connect(service2, ::fwServices::IService::s_STOPPED_SIG, receiver2, "stop");
+
+    CPPUNIT_ASSERT_EQUAL(false, receiver2->m_started);
+    CPPUNIT_ASSERT_EQUAL(false, receiver2->m_updated);
+    CPPUNIT_ASSERT_EQUAL(false, receiver2->m_stopped);
+
     // Start services
     service1->start().wait();
     service2->start().wait();
     CPPUNIT_ASSERT(service1->isStarted());
     CPPUNIT_ASSERT(service2->isStarted());
 
-    // Create message
-    ::fwServices::ObjectMsg::sptr objMsg = ::fwServices::ObjectMsg::New();
-    objMsg->addEvent(EVENT);
-    CPPUNIT_ASSERT(objMsg->hasEvent(EVENT));
+    WAIT(receiver1->m_started && receiver2->m_started)
+    CPPUNIT_ASSERT_EQUAL(true, receiver1->m_started);
+    CPPUNIT_ASSERT_EQUAL(false, receiver1->m_updated);
+    CPPUNIT_ASSERT_EQUAL(false, receiver1->m_stopped);
+    CPPUNIT_ASSERT_EQUAL(true, receiver2->m_started);
+    CPPUNIT_ASSERT_EQUAL(false, receiver2->m_updated);
+    CPPUNIT_ASSERT_EQUAL(false, receiver2->m_stopped);
 
     // Register communication channel
-    ::fwServices::helper::SigSlotConnection::sptr comHelper = ::fwServices::helper::SigSlotConnection::New();
-    comHelper->connect( obj, service1, service1->getObjSrvConnections() );
-    comHelper->connect( obj, service2, service2->getObjSrvConnections() );
+    comHelper.connect( obj, service1, service1->getObjSrvConnections() );
+    comHelper.connect( obj, service2, service2->getObjSrvConnections() );
+    comHelper.connect( service1, ::fwServices::ut::TestServiceImplementation::s_MSG_SENT_SIG,
+                       service2, ::fwServices::ut::TestServiceImplementation::s_RECEIVE_MSG_SLOT );
 
     // Service1 send notification
-    ::fwServices::IEditionService::notify(service1, obj, objMsg);
+    ::fwServices::ut::TestServiceImplementation::MsgSentSignalType::sptr sig;
+    sig = service1->signal< ::fwServices::ut::TestServiceImplementation::MsgSentSignalType >(
+        ::fwServices::ut::TestServiceImplementation::s_MSG_SENT_SIG);
+    {
+        ::fwCom::SlotBase::sptr slot;
+        slot = service1->slot( ::fwServices::IService::s_UPDATE_SLOT );
+        ::fwCom::Connection::Blocker block(sig->getConnection(slot));
+        sig->asyncEmit(EVENT);
+    }
+
+    service1->update().wait();
+    service2->update().wait();
+    WAIT(receiver1->m_updated && receiver2->m_updated)
+    CPPUNIT_ASSERT_EQUAL(true, receiver1->m_started);
+    CPPUNIT_ASSERT_EQUAL(true, receiver1->m_updated);
+    CPPUNIT_ASSERT_EQUAL(false, receiver1->m_stopped);
+    CPPUNIT_ASSERT_EQUAL(true, receiver2->m_started);
+    CPPUNIT_ASSERT_EQUAL(true, receiver2->m_updated);
+    CPPUNIT_ASSERT_EQUAL(false, receiver2->m_stopped);
 
     // Test if service2 has received the message
     service1->stop().wait();
     service2->stop().wait();
     CPPUNIT_ASSERT(service2->getIsUpdatedMessage());
 
-    comHelper->disconnect();
-    comHelper.reset();
+    WAIT(receiver1->m_stopped && receiver2->m_stopped)
+    CPPUNIT_ASSERT_EQUAL(true, receiver1->m_started);
+    CPPUNIT_ASSERT_EQUAL(true, receiver1->m_updated);
+    CPPUNIT_ASSERT_EQUAL(true, receiver1->m_stopped);
+    CPPUNIT_ASSERT_EQUAL(true, receiver2->m_started);
+    CPPUNIT_ASSERT_EQUAL(true, receiver2->m_updated);
+    CPPUNIT_ASSERT_EQUAL(true, receiver2->m_stopped);
+
+    comHelper.disconnect();
 
     ::fwServices::OSR::unregisterService(service1);
     ::fwServices::OSR::unregisterService(service2);
@@ -238,57 +367,57 @@ void ServiceTest::testCommunication()
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ::fwRuntime::EConfigurationElement > ServiceTest::buildServiceConfig()
+std::shared_ptr< ::fwRuntime::EConfigurationElement > ServiceTest::buildServiceConfig()
 {
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("service")) ;
-    cfg->setAttributeValue( "uid" , "myTestService" ) ;
-    cfg->setAttributeValue( "type" , "::fwServices::ut::TestService" ) ;
-    cfg->setAttributeValue( "impl" , "::fwServices::ut::TestServiceImplementation" ) ;
-    cfg->setAttributeValue( "autoConnect" , "no" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("service"));
+    cfg->setAttributeValue( "uid", "myTestService" );
+    cfg->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    cfg->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementation" );
+    cfg->setAttributeValue( "autoConnect", "no" );
 
-    return cfg ;
+    return cfg;
 }
 
 //------------------------------------------------------------------------------
 
-::boost::shared_ptr< ::fwRuntime::ConfigurationElement > ServiceTest::buildObjectConfig()
+std::shared_ptr< ::fwRuntime::ConfigurationElement > ServiceTest::buildObjectConfig()
 {
     // Configuration on fwTools::Object which uid is objectUUID
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object")) ;
-    cfg->setAttributeValue( "uid" , "objectUUID") ;
-    cfg->setAttributeValue( "type" , "::fwData::Composite") ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > cfg ( new ::fwRuntime::EConfigurationElement("object"));
+    cfg->setAttributeValue( "uid", "objectUUID");
+    cfg->setAttributeValue( "type", "::fwData::Composite");
 
     // Object's service A
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
-    serviceA->setAttributeValue( "uid" , "myTestService1" ) ;
-    serviceA->setAttributeValue( "type" , "::fwServices::ut::TestService" ) ;
-    serviceA->setAttributeValue( "impl" , "::fwServices::ut::TestServiceImplementation" ) ;
-    serviceA->setAttributeValue( "autoConnect" , "no" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceA = cfg->addConfigurationElement("service");
+    serviceA->setAttributeValue( "uid", "myTestService1" );
+    serviceA->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceA->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementation" );
+    serviceA->setAttributeValue( "autoConnect", "no" );
 
     // Object's service B
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
-    serviceB->setAttributeValue( "uid" , "myTestService2" ) ;
-    serviceB->setAttributeValue( "type" , "::fwServices::ut::TestService" ) ;
-    serviceB->setAttributeValue( "impl" , "::fwServices::ut::TestServiceImplementation" ) ;
-    serviceB->setAttributeValue( "autoConnect" , "no" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > serviceB = cfg->addConfigurationElement("service");
+    serviceB->setAttributeValue( "uid", "myTestService2" );
+    serviceB->setAttributeValue( "type", "::fwServices::ut::TestService" );
+    serviceB->setAttributeValue( "impl", "::fwServices::ut::TestServiceImplementation" );
+    serviceB->setAttributeValue( "autoConnect", "no" );
 
     // Start method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
-    startA->setAttributeValue( "uid" , "myTestService1" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
-    startB->setAttributeValue( "uid" , "myTestService2" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startA = cfg->addConfigurationElement("start");
+    startA->setAttributeValue( "uid", "myTestService1" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > startB = cfg->addConfigurationElement("start");
+    startB->setAttributeValue( "uid", "myTestService2" );
 
     // Update method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
-    updateA->setAttributeValue( "uid" , "myTestService1" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > updateA = cfg->addConfigurationElement("update");
+    updateA->setAttributeValue( "uid", "myTestService1" );
 
     // Stop method from object's services
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > stopA = cfg->addConfigurationElement("stop");
-    stopA->setAttributeValue( "uid" , "myTestService1" ) ;
-    ::boost::shared_ptr< ::fwRuntime::EConfigurationElement > stopB = cfg->addConfigurationElement("stop");
-    stopB->setAttributeValue( "uid" , "myTestService2" ) ;
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > stopA = cfg->addConfigurationElement("stop");
+    stopA->setAttributeValue( "uid", "myTestService1" );
+    std::shared_ptr< ::fwRuntime::EConfigurationElement > stopB = cfg->addConfigurationElement("stop");
+    stopB->setAttributeValue( "uid", "myTestService2" );
 
-    return cfg ;
+    return cfg;
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/test/tu/src/SigSlotConnectionTest.cpp b/SrcLib/core/fwServices/test/tu/src/SigSlotConnectionTest.cpp
index 04966e9..c0b4aff 100644
--- a/SrcLib/core/fwServices/test/tu/src/SigSlotConnectionTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/SigSlotConnectionTest.cpp
@@ -1,17 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "SigSlotConnectionTest.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <fwServices/macros.hpp>
 #include <fwServices/registry/ActiveWorkers.hpp>
 #include <fwServices/registry/ObjectService.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
-#include <fwServices/macros.hpp>
 
 #include <fwTest/Exception.hpp>
 
-#include "SigSlotConnectionTest.hpp"
 #include "SlotsSignalsStuff.hpp"
 
 // Registers the fixture into the 'registry'
@@ -49,23 +51,21 @@ void SigSlotConnectionTest::basicTest()
     SShowTest::sptr showTestSrv = ::fwServices::factory::New<SShowTest>();
     ::fwServices::OSR::registerService(buffer, showTestSrv);
 
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig =
-            buffer->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-
-    ::fwServices::ObjectMsg::sptr msg = ::fwServices::ObjectMsg::New();
-    msg->addEvent(ObjectMsg::NEW_OBJECT);
+    ::fwData::Object::ModifiedSignalType::sptr sig =
+        buffer->signal< ::fwData::Object::ModifiedSignalType >( ::fwData::Object::s_MODIFIED_SIG );
 
-    ::fwServices::helper::SigSlotConnection::sptr helper = ::fwServices::helper::SigSlotConnection::New();
+    ::fwCom::helper::SigSlotConnection helper;
 
-    helper->connect( buffer, showTestSrv, showTestSrv->getObjSrvConnections() );
+    showTestSrv->setWorker(activeWorkers->getWorker(registry::ActiveWorkers::s_DEFAULT_WORKER));
+    helper.connect( buffer, showTestSrv, showTestSrv->getObjSrvConnections() );
     showTestSrv->start().wait();
-    fwServicesNotifyMsgMacro("SigSlotConnectionTest::basicTest()", sig, msg);
+    sig->asyncEmit();
     showTestSrv->stop().wait();
     CPPUNIT_ASSERT_EQUAL(1, showTestSrv->m_receiveCount);
 
-    helper->disconnect();
+    helper.disconnect();
     showTestSrv->start().wait();
-    fwServicesNotifyMsgMacro("SigSlotConnectionTest::basicTest()", sig, msg);
+    sig->asyncEmit();
     showTestSrv->stop().wait();
     CPPUNIT_ASSERT_EQUAL(1, showTestSrv->m_receiveCount);
 
diff --git a/SrcLib/core/fwServices/test/tu/src/SlotsSignalsStuff.cpp b/SrcLib/core/fwServices/test/tu/src/SlotsSignalsStuff.cpp
index 4927506..48156f8 100644
--- a/SrcLib/core/fwServices/test/tu/src/SlotsSignalsStuff.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/SlotsSignalsStuff.cpp
@@ -1,26 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwData/registry/macros.hpp>
-#include <fwData/mt/ObjectWriteLock.hpp>
+#include "SlotsSignalsStuff.hpp"
 
 #include <fwCom/Connection.hpp>
-
 #include <fwCom/Slots.hpp>
 #include <fwCom/Slots.hxx>
-
-
 #include <fwCom/Signal.hpp>
 #include <fwCom/Signal.hxx>
 
+#include <fwData/registry/macros.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
 #include <fwServices/macros.hpp>
-#include <fwServices/ObjectMsg.hpp>
-#include <fwServices/registry/ServiceFactory.hpp>
 
-#include "SlotsSignalsStuff.hpp"
+#include <fwServices/registry/ServiceFactory.hpp>
 
 namespace fwServices
 {
@@ -29,17 +26,18 @@ namespace ut
 
 fwDataRegisterMacro(Buffer);
 
-fwServicesRegisterMacro( ::fwServices::ut::IBasicTest , ::fwServices::ut::SBasicTest , ::fwServices::ut::Buffer ) ;
-fwServicesRegisterMacro( ::fwServices::ut::IBasicTest , ::fwServices::ut::SReaderTest , ::fwServices::ut::Buffer ) ;
-fwServicesRegisterMacro( ::fwServices::ut::IBasicTest , ::fwServices::ut::SShowTest , ::fwServices::ut::Buffer ) ;
-fwServicesRegisterMacro( ::fwServices::ut::IBasicTest , ::fwServices::ut::SReader2Test , ::fwServices::ut::Buffer ) ;
-fwServicesRegisterMacro( ::fwServices::ut::IBasicTest , ::fwServices::ut::SShow2Test , ::fwServices::ut::Buffer ) ;
+fwServicesRegisterMacro( ::fwServices::ut::IBasicTest, ::fwServices::ut::SBasicTest, ::fwServices::ut::Buffer );
+fwServicesRegisterMacro( ::fwServices::ut::IBasicTest, ::fwServices::ut::SReaderTest, ::fwServices::ut::Buffer );
+fwServicesRegisterMacro( ::fwServices::ut::IBasicTest, ::fwServices::ut::SShowTest, ::fwServices::ut::Buffer );
+fwServicesRegisterMacro( ::fwServices::ut::IBasicTest, ::fwServices::ut::SReader2Test, ::fwServices::ut::Buffer );
+fwServicesRegisterMacro( ::fwServices::ut::IBasicTest, ::fwServices::ut::SShow2Test, ::fwServices::ut::Buffer );
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
 SBasicTest::SBasicTest() : m_updateFinished(false), m_swapFinished(false)
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -79,12 +77,13 @@ void SReaderTest::updating() throw ( ::fwTools::Failed )
     Buffer::sptr buff = this->getObject< Buffer >();
 
     // Emit object Modified
-    ObjectMsg::sptr msg = ObjectMsg::New();
-    msg->addEvent(ObjectMsg::NEW_OBJECT);
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = buff->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = buff->signal< ::fwData::Object::ModifiedSignalType >( ::fwData::Object::s_MODIFIED_SIG );
 
-    fwServicesBlockAndNotifyMsgMacro(this->getLightID(), sig, msg, m_slotReceive)
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+        sig->asyncEmit();
+    }
 }
 
 //------------------------------------------------------------------------------
@@ -96,16 +95,13 @@ const ::fwCom::Slots::SlotKeyType SShowTest::s_CHANGE_SLOT = "change";
 
 SShowTest::SShowTest() : m_receiveCount(0), m_changeCount(0)
 {
-    m_slotChange = ::fwCom::newSlot( &SShowTest::change, this ) ;
+    m_slotChange = ::fwCom::newSlot( &SShowTest::change, this );
     ::fwCom::HasSlots::m_slots( s_CHANGE_SLOT, m_slotChange );
-#ifdef COM_LOG
-    m_slotChange->setID( s_CHANGE_SLOT );
-#endif
 }
 
 //------------------------------------------------------------------------------
 
-void SShowTest::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
+void SShowTest::updating() throw ( ::fwTools::Failed )
 {
     Buffer::sptr buffer = this->getObject<Buffer>();
     ::boost::this_thread::sleep_for(m_receiveRetarder);
@@ -131,9 +127,6 @@ const ::fwCom::Signals::SignalKeyType SReader2Test::s_CHANGED_SIG = "changed";
 SReader2Test::SReader2Test()
 {
     m_sigChanged = ChangedSignalType::New();
-#ifdef COM_LOG
-    m_sigChanged->setID( s_CHANGED_SIG );
-#endif
     // Register
     ::fwCom::HasSignals::m_signals( s_CHANGED_SIG,  m_sigChanged);
 }
@@ -145,25 +138,19 @@ void SReader2Test::updating() throw ( ::fwTools::Failed )
     // Emit object Modified
     SReader2Test::ChangedSignalType::sptr sig;
     sig = this->signal< SReader2Test::ChangedSignalType >( SReader2Test::s_CHANGED_SIG );
-    fwServicesNotifyMacro(this->getLightID(), sig, ());
+    sig->asyncEmit();
 }
 
 //------------------------------------------------------------------------------
 //------------------------------------------------------------------------------
 
-SShow2Test::SShow2Test() : m_receiveCount(0)
-{}
+const ::fwCom::Slots::SlotKeyType SShow2Test::s_UPDATE_BUFFER_SLOT = "updateBuffer";
 
 //------------------------------------------------------------------------------
 
-void SShow2Test::receiving( ::fwServices::ObjectMsg::csptr _msg ) throw ( ::fwTools::Failed )
+SShow2Test::SShow2Test() : m_receiveCount(0)
 {
-    Buffer::sptr buffer = this->getObject<Buffer>();
-    ::boost::this_thread::sleep_for(m_receiveRetarder);
-    ::fwData::mt::ObjectWriteLock lock(buffer);
-    ++m_receiveCount;
-
-    this->updating();
+    newSlot(s_UPDATE_BUFFER_SLOT, &SShow2Test::updateBuffer, this);
 }
 
 //------------------------------------------------------------------------------
@@ -173,11 +160,24 @@ void SShow2Test::updating() throw ( ::fwTools::Failed )
     Buffer::sptr buff = this->getObject< Buffer >();
 
     // Emit object Modified
-    ObjectMsg::sptr msg = ObjectMsg::New();
-    msg->addEvent(ObjectMsg::NEW_OBJECT);
-    ::fwData::Object::ObjectModifiedSignalType::sptr sig;
-    sig = buff->signal< ::fwData::Object::ObjectModifiedSignalType >( ::fwData::Object::s_OBJECT_MODIFIED_SIG );
-    fwServicesBlockAndNotifyMsgMacro(this->getLightID(), sig, msg, m_slotReceive);
+    ::fwData::Object::ModifiedSignalType::sptr sig;
+    sig = buff->signal< ::fwData::Object::ModifiedSignalType >( ::fwData::Object::s_MODIFIED_SIG );
+    {
+        ::fwCom::Connection::Blocker block(sig->getConnection(this->slot(s_UPDATE_BUFFER_SLOT)));
+        sig->asyncEmit();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SShow2Test::updateBuffer()
+{
+    Buffer::sptr buffer = this->getObject<Buffer>();
+    ::boost::this_thread::sleep_for(m_receiveRetarder);
+    ::fwData::mt::ObjectWriteLock lock(buffer);
+    ++m_receiveCount;
+
+    this->updating();
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/core/fwServices/test/tu/src/SlotsSignalsTest.cpp b/SrcLib/core/fwServices/test/tu/src/SlotsSignalsTest.cpp
index bedad54..14aaf70 100644
--- a/SrcLib/core/fwServices/test/tu/src/SlotsSignalsTest.cpp
+++ b/SrcLib/core/fwServices/test/tu/src/SlotsSignalsTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwServices::ut::SlotsSignalsTest );
-
+//
 namespace fwServices
 {
 namespace ut
@@ -45,15 +45,20 @@ void SlotsSignalsTest::basicTest()
     SLM_TRACE_FUNC();
     using namespace ::fwServices::registry;
 
-    Buffer::sptr buffer = Buffer::New();
+    Buffer::sptr buffer  = Buffer::New();
     Buffer::sptr buffer2 = Buffer::New();
 
     ActiveWorkers::sptr activeWorkers = ActiveWorkers::getDefault();
     activeWorkers->initRegistry();
 
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    activeWorkers->addWorker("test", worker);
+
     SBasicTest::sptr basicTestSrv = ::fwServices::factory::New<SBasicTest>();
     ::fwServices::OSR::registerService(buffer, basicTestSrv);
 
+    basicTestSrv->setWorker(worker);
+
     IService::SharedFutureType startFuture = basicTestSrv->start();
     CPPUNIT_ASSERT(basicTestSrv->getStatus() != IService::STARTED);
     startFuture.wait();
@@ -102,7 +107,7 @@ void SlotsSignalsTest::comObjectServiceTest()
         ::fwServices::OSR::registerService(buffer, showTestSrv);
         showTestSrv->setWorker(worker1);
 
-        buffer->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(showTestSrv->slot(IService::s_RECEIVE_SLOT));
+        buffer->signal(::fwData::Object::s_MODIFIED_SIG)->connect(showTestSrv->slot(IService::s_UPDATE_SLOT));
 
         readerTestSrv->start();
         showTestSrv->start();
@@ -110,13 +115,13 @@ void SlotsSignalsTest::comObjectServiceTest()
         readerTestSrv->update().wait();
 
         IService::SharedFutureType stopReaderFuture = readerTestSrv->stop();
-        IService::SharedFutureType stopShowFuture = showTestSrv->stop();
+        IService::SharedFutureType stopShowFuture   = showTestSrv->stop();
         stopReaderFuture.wait();
         stopShowFuture.wait();
 
         CPPUNIT_ASSERT_EQUAL(1, showTestSrv->m_receiveCount);
 
-        buffer->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->disconnect(showTestSrv->slot(IService::s_RECEIVE_SLOT));
+        buffer->signal(::fwData::Object::s_MODIFIED_SIG)->disconnect(showTestSrv->slot(IService::s_UPDATE_SLOT));
 
         ::fwServices::OSR::unregisterService(readerTestSrv);
         ::fwServices::OSR::unregisterService(showTestSrv);
@@ -134,25 +139,25 @@ void SlotsSignalsTest::comObjectServiceTest()
         ::fwServices::OSR::registerService(buffer, showTestSrv);
         showTestSrv->setWorker(worker1);
 
-        buffer->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->connect(showTestSrv->slot(IService::s_RECEIVE_SLOT));
+        buffer->signal(::fwData::Object::s_MODIFIED_SIG)->connect(showTestSrv->slot(IService::s_UPDATE_SLOT));
 
         readerTestSrv->start();
         reader2TestSrv->start();
         showTestSrv->start();
 
-        IService::SharedFutureType updateReaderFuture = readerTestSrv->update();
+        IService::SharedFutureType updateReaderFuture  = readerTestSrv->update();
         IService::SharedFutureType updateReader2Future = reader2TestSrv->update();
         updateReaderFuture.wait();
         updateReader2Future.wait();
 
-        IService::SharedFutureType stopReaderFuture = readerTestSrv->stop();
+        IService::SharedFutureType stopReaderFuture  = readerTestSrv->stop();
         IService::SharedFutureType stopReader2Future = reader2TestSrv->stop();
-        IService::SharedFutureType stopShowFuture = showTestSrv->stop();
+        IService::SharedFutureType stopShowFuture    = showTestSrv->stop();
         stopReaderFuture.wait();
         stopReader2Future.wait();
         stopShowFuture.wait();
 
-        buffer->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->disconnect(showTestSrv->slot(IService::s_RECEIVE_SLOT));
+        buffer->signal(::fwData::Object::s_MODIFIED_SIG)->disconnect(showTestSrv->slot(IService::s_UPDATE_SLOT));
 
         CPPUNIT_ASSERT_EQUAL(2, showTestSrv->m_receiveCount);
 
@@ -190,7 +195,7 @@ void SlotsSignalsTest::comServiceToServiceTest()
     readerTestSrv->update().wait();
 
     IService::SharedFutureType stopReaderFuture = readerTestSrv->stop();
-    IService::SharedFutureType stopShowFuture = showTestSrv->stop();
+    IService::SharedFutureType stopShowFuture   = showTestSrv->stop();
     stopReaderFuture.wait();
     stopShowFuture.wait();
 
@@ -224,8 +229,8 @@ void SlotsSignalsTest::blockConnectionTest()
     showTestSrv->setWorker(worker1);
 
     ::fwCom::Connection connection;
-    connection = buffer->signal(::fwData::Object::s_OBJECT_MODIFIED_SIG)->
-                                            connect(showTestSrv->slot(IService::s_RECEIVE_SLOT));
+    connection = buffer->signal(::fwData::Object::s_MODIFIED_SIG)->
+                 connect(showTestSrv->slot(SShow2Test::s_UPDATE_BUFFER_SLOT));
 
     readerTestSrv->start();
     showTestSrv->start();
@@ -235,7 +240,7 @@ void SlotsSignalsTest::blockConnectionTest()
     ::boost::this_thread::sleep_for( ::boost::chrono::seconds(8));
 
     IService::SharedFutureType stopReaderFuture = readerTestSrv->stop();
-    IService::SharedFutureType stopShowFuture = showTestSrv->stop();
+    IService::SharedFutureType stopShowFuture   = showTestSrv->stop();
     stopReaderFuture.wait();
     stopShowFuture.wait();
 
diff --git a/SrcLib/core/fwServices/test/tu/src/TestService.cpp b/SrcLib/core/fwServices/test/tu/src/TestService.cpp
new file mode 100644
index 0000000..65eeae2
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/src/TestService.cpp
@@ -0,0 +1,31 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "TestService.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <fwServices/macros.hpp>
+
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementation, ::fwData::Object );
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementation2,
+                         ::fwData::Object );
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestSrvAutoconnect, ::fwData::Object );
+
+namespace fwServices
+{
+namespace ut
+{
+
+const ::fwCom::Signals::SignalKeyType TestServiceImplementation::s_MSG_SENT_SIG = "msgSent";
+const ::fwCom::Slots::SlotKeyType TestServiceImplementation::s_RECEIVE_MSG_SLOT = "receiveMsg";
+const ::fwCom::Slots::SlotKeyType TestServiceImplementation::s_UPDATE2_SLOT     = "update2";
+
+const ::fwCom::Signals::SignalKeyType TestSrvAutoconnect::s_SIG_1 = "signal1";
+const ::fwCom::Slots::SlotKeyType TestSrvAutoconnect::s_SLOT_1    = "slot1";
+
+} // namespace ut
+} // namespace fwServices
diff --git a/SrcLib/core/fwServices/test/tu/src/TestServices.cpp b/SrcLib/core/fwServices/test/tu/src/TestServices.cpp
new file mode 100644
index 0000000..7e06580
--- /dev/null
+++ b/SrcLib/core/fwServices/test/tu/src/TestServices.cpp
@@ -0,0 +1,19 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "TestServices.hpp"
+
+#include <fwData/Composite.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementationComposite,
+                         ::fwData::Composite );
+fwServicesRegisterMacro( ::fwServices::ut::TestService, ::fwServices::ut::TestServiceImplementationImage,
+                         ::fwData::Image );
+
diff --git a/SrcLib/core/fwThread/CMakeLists.txt b/SrcLib/core/fwThread/CMakeLists.txt
index beb3eff..3f1fab7 100644
--- a/SrcLib/core/fwThread/CMakeLists.txt
+++ b/SrcLib/core/fwThread/CMakeLists.txt
@@ -1,11 +1,4 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS thread REQUIRED)
-
-fwForwardInclude(${fwCore_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
-
 if(CMAKE_SYSTEM_NAME MATCHES "Windows")
     add_definitions(-DWIN32_LEAN_AND_MEAN)
 endif()
diff --git a/SrcLib/core/fwThread/COPYING b/SrcLib/core/fwThread/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwThread/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwThread/COPYING.LESSER b/SrcLib/core/fwThread/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwThread/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwThread/bin/build.options b/SrcLib/core/fwThread/bin/build.options
deleted file mode 100644
index 6fd3fb5..0000000
--- a/SrcLib/core/fwThread/bin/build.options
+++ /dev/null
@@ -1,10 +0,0 @@
-USE     = ['boost', 'boostThread',]
-LIB     = [
-          'fwCore_0-1',
-          ]
-TYPE    = 'shared'
-VERSION = '0-1'
-
-
-if os.name == "nt" :
-    GLOBAL_DEF = ['WIN32_LEAN_AND_MEAN']
\ No newline at end of file
diff --git a/SrcLib/core/fwThread/include/fwThread/Namespace.hpp b/SrcLib/core/fwThread/include/fwThread/Namespace.hpp
index f49d520..7d3fa60 100644
--- a/SrcLib/core/fwThread/include/fwThread/Namespace.hpp
+++ b/SrcLib/core/fwThread/include/fwThread/Namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,7 +10,7 @@
 /**
  * @brief       This namespace fwThread provides few tools to execute asynchronous tasks on different threads.
  * @namespace   fwThread
- * 
+ *
  * @date        2012
  *
  */
diff --git a/SrcLib/core/fwThread/include/fwThread/Pool.hpp b/SrcLib/core/fwThread/include/fwThread/Pool.hpp
new file mode 100644
index 0000000..d0cb10d
--- /dev/null
+++ b/SrcLib/core/fwThread/include/fwThread/Pool.hpp
@@ -0,0 +1,109 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWTHREAD_POOL_HPP__
+#define __FWTHREAD_POOL_HPP__
+
+#include <fwCore/base.hpp>
+
+#include "fwThread/config.hpp"
+
+#include <vector>
+#include <queue>
+#include <memory>
+#include <thread>
+#include <mutex>
+#include <condition_variable>
+#include <future>
+#include <functional>
+#include <stdexcept>
+
+namespace fwThread
+{
+
+/**
+ * @class   Pool
+ * @brief   This class creates and manages a pool of threads which process tasks.
+ *
+ * The purpose of this class is to provide a set of threads that can be used to process tasks asynchronously.
+ *
+ */
+class FWTHREAD_CLASS_API Pool
+{
+public:
+
+    /// this constructor launches as much as possible workers
+    FWTHREAD_API Pool();
+    /// this constructor launches some amount of workers
+    FWTHREAD_API Pool(size_t);
+    /// the destructor joins all threads
+    FWTHREAD_API ~Pool();
+
+    /// add new work item to the pool
+    template<class F, class ... Args>
+    auto post(F&& f, Args&&... args)
+    ->std::shared_future<typename std::result_of<F(Args ...)>::type>;
+
+private:
+    /// need to keep track of threads so we can join them
+    std::vector< std::thread > m_workers;
+
+    /// the task queue
+    std::queue< std::function<void()> > m_tasks;
+
+    /// synchronization
+    std::mutex m_queueMutex;
+    std::condition_variable m_condition;
+    bool m_stop;
+};
+
+//-----------------------------------------------------------------------------
+
+template<class F, class ... Args>
+auto Pool::post(F&& f, Args&&... args)
+->std::shared_future<typename std::result_of<F(Args ...)>::type>
+{
+    using return_type = typename std::result_of<F(Args ...)>::type;
+
+    auto task = std::make_shared< std::packaged_task<return_type()> >(
+        std::bind(std::forward<F>(f), std::forward<Args>(args) ...)
+        );
+
+    std::shared_future<return_type> res = task->get_future();
+    {
+        std::unique_lock<std::mutex> lock(m_queueMutex);
+
+        // don't allow enqueueing after stopping the pool
+        if(m_stop)
+        {
+            throw std::runtime_error("enqueue on stopped Pool");
+        }
+
+        m_tasks.emplace([task]()
+            {
+                (*task)();
+            });
+    }
+    m_condition.notify_one();
+    return res;
+}
+
+//-----------------------------------------------------------------------------
+
+/// Create a default pool that can be used globally
+FWTHREAD_API void createDefaultPool();
+
+/// Delete the default pool that can be used globally
+FWTHREAD_API void deleteDefaultPool();
+
+/// Delete the default pool
+FWTHREAD_API Pool& getDefaultPool();
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwThread
+
+#endif //__FWTHREAD_POOL_HPP__
diff --git a/SrcLib/core/fwThread/include/fwThread/TaskHandler.hpp b/SrcLib/core/fwThread/include/fwThread/TaskHandler.hpp
index 808500c..c34a8d3 100644
--- a/SrcLib/core/fwThread/include/fwThread/TaskHandler.hpp
+++ b/SrcLib/core/fwThread/include/fwThread/TaskHandler.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace fwThread
  * @class   TaskHandler
  * @brief   This class encapsulates packaged task and provides a copy constructor.
  *
- * 
+ *
  * @date   2012.
  */
 template <typename R>
@@ -31,14 +31,16 @@ struct TaskHandler
     /// Executes intern packaged task.
     void operator ()() const;
 
-protected:
+    protected:
 
-    /// Copy constructor forbidden.
-    TaskHandler& operator=( const TaskHandler& ){};
+        /// Copy constructor forbidden.
+        TaskHandler& operator=( const TaskHandler& )
+        {
+        }
 
-private:
-    /// Encapsulated packaged task.
-    mutable ::boost::packaged_task<R> m_task;
+    private:
+        /// Encapsulated packaged task.
+        mutable ::boost::packaged_task<R> m_task;
 };
 
 /// Encapsulate a packaged_task into a boost function to be easily posted on a worker.
diff --git a/SrcLib/core/fwThread/include/fwThread/TaskHandler.hxx b/SrcLib/core/fwThread/include/fwThread/TaskHandler.hxx
index e654808..d83fa94 100644
--- a/SrcLib/core/fwThread/include/fwThread/TaskHandler.hxx
+++ b/SrcLib/core/fwThread/include/fwThread/TaskHandler.hxx
@@ -1,19 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWTHREAD_TASKHANDLER_HXX__
+#define __FWTHREAD_TASKHANDLER_HXX__
 
 namespace fwThread
 {
 template <typename R>
 TaskHandler<R>::TaskHandler(::boost::packaged_task<R>& task) : m_task(::boost::move(task))
-{}
+{
+}
 
 template <typename R>
 TaskHandler<R>::TaskHandler(const TaskHandler& that) : m_task(::boost::move(that.m_task))
-{}
+{
+}
 
 template <typename R>
 void TaskHandler<R>::operator ()() const
@@ -30,3 +34,4 @@ inline ::boost::function< void() > moveTaskIntoFunction(::boost::packaged_task<R
 
 } //namespace fwThread
 
+#endif //__FWTHREAD_TASKHANDLER_HXX__
diff --git a/SrcLib/core/fwThread/include/fwThread/Timer.hpp b/SrcLib/core/fwThread/include/fwThread/Timer.hpp
index 9d9e851..96f3168 100644
--- a/SrcLib/core/fwThread/include/fwThread/Timer.hpp
+++ b/SrcLib/core/fwThread/include/fwThread/Timer.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,6 +14,7 @@
 #include "fwThread/Worker.hpp"
 #include "fwThread/config.hpp"
 
+#include <functional>
 
 namespace fwThread
 {
@@ -26,7 +27,7 @@ namespace fwThread
  *
  * Timer's function must be set before starting the timer.
  *
- * 
+ *
  * @date   2012.
  */
 class FWTHREAD_CLASS_API Timer : public ::fwCore::BaseObject
@@ -35,8 +36,8 @@ public:
     /**
      * @name Typedefs
      * @{ */
-    typedef ::boost::shared_ptr< Timer >        sptr;
-    typedef ::boost::function< void() >         FunctionType;
+    typedef std::shared_ptr< Timer >        sptr;
+    typedef std::function< void () >         FunctionType;
     typedef ::boost::chrono::duration<double>   TimeDurationType;
     /**  @} */
 
@@ -48,7 +49,9 @@ public:
     FWTHREAD_API virtual void start() = 0;
 
     /// Stops the timer and cancel all pending operations.
-    FWTHREAD_API virtual void stop(){};
+    FWTHREAD_API virtual void stop()
+    {
+    }
 
     /// Sets time duration.
     FWTHREAD_API virtual void setDuration(TimeDurationType duration) = 0;
@@ -86,10 +89,12 @@ protected:
     Timer& operator=( const Timer& );
 
     /// This method is triggered when Timer's function is changed.
-    FWTHREAD_API virtual void updatedFunction(){};
+    FWTHREAD_API virtual void updatedFunction()
+    {
+    }
 
     /// Function object to execute each time the timer expires.
-    FunctionType      m_function;
+    FunctionType m_function;
 
     mutable ::fwCore::mt::Mutex m_mutex;
 };
diff --git a/SrcLib/core/fwThread/include/fwThread/Worker.hpp b/SrcLib/core/fwThread/include/fwThread/Worker.hpp
index 649a1f0..952831a 100644
--- a/SrcLib/core/fwThread/include/fwThread/Worker.hpp
+++ b/SrcLib/core/fwThread/include/fwThread/Worker.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,8 +9,6 @@
 
 #include <boost/any.hpp>
 #include <boost/asio/io_service.hpp>
-#include <boost/make_shared.hpp>
-#include <boost/shared_ptr.hpp>
 #include <boost/thread.hpp>
 
 #include <fwCore/base.hpp>
@@ -33,21 +31,23 @@ class Timer;
  * @brief   This class creates and manages a task loop.
  * The default implementation create a loop in a new thread.
  *
- * 
+ *
  * @date   2012.
  */
 class FWTHREAD_CLASS_API Worker : public ::fwCore::BaseObject
 {
 public:
     typedef ::fwCore::HiResClock::HiResClockType PeriodType;
-    typedef ::boost::function< void() > TaskType;
-    typedef ::boost::any                ExitReturnType;
+    typedef ::boost::function< void () > TaskType;
+    typedef ::boost::any ExitReturnType;
 
     typedef ::boost::shared_future< ExitReturnType > FutureType;
 
     fwCoreClassDefinitionsWithFactoryMacro( (Worker)(::fwCore::BaseObject), (()), defaultFactory );
 
-    Worker(){}
+    Worker()
+    {
+    }
 
     /// Waits for the last task to be processed and stops the loop
     FWTHREAD_API virtual void stop() = 0;
@@ -79,7 +79,7 @@ public:
      * @brief Returns a boost::shared_future associated with the execution of Worker's loop
      * @warning Calling getFuture() may be blocking if it is required by a specific implementation (for example, the Qt implementation).
      */
-    FWTHREAD_API virtual FutureType getFuture()
+    virtual FutureType getFuture()
     {
         return m_future;
     }
diff --git a/SrcLib/core/fwThread/include/fwThread/Worker.hxx b/SrcLib/core/fwThread/include/fwThread/Worker.hxx
index 4e0061b..56ca953 100644
--- a/SrcLib/core/fwThread/include/fwThread/Worker.hxx
+++ b/SrcLib/core/fwThread/include/fwThread/Worker.hxx
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwThread/include/fwThread/config.hpp b/SrcLib/core/fwThread/include/fwThread/config.hpp
deleted file mode 100644
index 25a9cb0..0000000
--- a/SrcLib/core/fwThread/include/fwThread/config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-
-#ifndef _FWTHREAD_CONFIG_HPP_
-#define _FWTHREAD_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWTHREAD_EXPORTS
-    #define FWTHREAD_API __declspec(dllexport)
-    #else
-    #define FWTHREAD_API __declspec(dllimport)
-    #endif
-
-    #define FWTHREAD_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWTHREAD_EXPORTS
-    #define FWTHREAD_API __attribute__ ((visibility("default")))
-    #define FWTHREAD_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWTHREAD_API __attribute__ ((visibility("hidden")))
-    //#define FWTHREAD_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWTHREAD_API
-    #define FWTHREAD_CLASS_API
-    #endif
-
-#else
-
-    #define FWTHREAD_API
-    #define FWTHREAD_CLASS_API
-
-#endif
-
-#endif //_FWTHREAD_CONFIG_HPP_
diff --git a/SrcLib/core/fwThread/src/fwThread/Pool.cpp b/SrcLib/core/fwThread/src/fwThread/Pool.cpp
new file mode 100644
index 0000000..4df08de
--- /dev/null
+++ b/SrcLib/core/fwThread/src/fwThread/Pool.cpp
@@ -0,0 +1,101 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwThread/Pool.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+namespace fwThread
+{
+
+//-----------------------------------------------------------------------------
+
+Pool::Pool() : Pool(std::thread::hardware_concurrency())
+{
+}
+
+//-----------------------------------------------------------------------------
+
+Pool::Pool(size_t _threads) : m_stop(false)
+{
+    const auto avalaibleCores = std::thread::hardware_concurrency();
+    OSLM_WARN_IF( _threads << " threads were allocated in this thread pool, but you only have " <<
+                  avalaibleCores << " physical cores on this CPU",
+                  _threads > std::thread::hardware_concurrency());
+
+    for(size_t i = 0; i<_threads; ++i)
+    {
+        m_workers.emplace_back(
+            [this]
+            {
+                for(;; )
+                {
+                    std::function<void()> task;
+
+                    {
+                        std::unique_lock<std::mutex> lock(m_queueMutex);
+                        m_condition.wait(lock, [this] { return m_stop || !m_tasks.empty(); });
+                        if(m_stop && m_tasks.empty())
+                        {
+                            return;
+                        }
+                        task = std::move(m_tasks.front());
+                        m_tasks.pop();
+                    }
+
+                    task();
+                }
+            }
+            );
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+Pool::~Pool()
+{
+    {
+        std::unique_lock<std::mutex> lock(m_queueMutex);
+        m_stop = true;
+    }
+
+    m_condition.notify_all();
+    for(std::thread &worker: m_workers)
+    {
+        worker.join();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+static Pool* s_defaultPool = nullptr;
+
+//-----------------------------------------------------------------------------
+
+void createDefaultPool()
+{
+    s_defaultPool = new Pool();
+}
+
+//-----------------------------------------------------------------------------
+
+void deleteDefaultPool()
+{
+    delete s_defaultPool;
+    s_defaultPool = nullptr;
+}
+
+//-----------------------------------------------------------------------------
+
+Pool& getDefaultPool()
+{
+    OSLM_ASSERT("Default pool has not been created", s_defaultPool);
+    return *s_defaultPool;
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwThread
diff --git a/SrcLib/core/fwThread/src/fwThread/Timer.cpp b/SrcLib/core/fwThread/src/fwThread/Timer.cpp
index 972453a..0cc4a86 100644
--- a/SrcLib/core/fwThread/src/fwThread/Timer.cpp
+++ b/SrcLib/core/fwThread/src/fwThread/Timer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwThread/src/fwThread/Worker.cpp b/SrcLib/core/fwThread/src/fwThread/Worker.cpp
index 20514ed..6482235 100644
--- a/SrcLib/core/fwThread/src/fwThread/Worker.cpp
+++ b/SrcLib/core/fwThread/src/fwThread/Worker.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/bind.hpp>
-
 #include "fwThread/Worker.hpp"
 
 namespace fwThread
diff --git a/SrcLib/core/fwThread/src/fwThread/WorkerAsio.cpp b/SrcLib/core/fwThread/src/fwThread/WorkerAsio.cpp
index e61ea91..0808eeb 100644
--- a/SrcLib/core/fwThread/src/fwThread/WorkerAsio.cpp
+++ b/SrcLib/core/fwThread/src/fwThread/WorkerAsio.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -34,7 +34,7 @@ class WorkerAsio : public ::fwThread::Worker
 public:
     typedef ::boost::asio::io_service IOServiceType;
     typedef ::boost::asio::io_service::work WorkType;
-    typedef ::boost::shared_ptr< WorkType > WorkPtrType;
+    typedef std::shared_ptr< WorkType > WorkPtrType;
     typedef ::boost::thread ThreadType;
 
 
@@ -80,7 +80,7 @@ protected:
  * @class TimerAsio
  * @brief Private Timer implementation using boost::asio.
  *
- * 
+ *
  * @date   2012.
  */
 class TimerAsio : public ::fwThread::Timer
@@ -144,10 +144,10 @@ protected:
     TimeDurationType m_duration;
 
     /// Timer's mode.
-    bool             m_oneShot;
+    bool m_oneShot;
 
     /// Timer's state.
-    bool             m_running;
+    bool m_running;
 };
 
 //------------------------------------------------------------------------------
@@ -157,12 +157,13 @@ protected:
 
 WorkerAsio::WorkerAsio() :
     m_ioService(),
-    m_work( ::boost::make_shared< WorkType >(::boost::ref(m_ioService)) )
+    m_work( std::make_shared< WorkType >(::boost::ref(m_ioService)) )
 {
-    ::boost::packaged_task< ::fwThread::Worker::ExitReturnType > task( ::boost::bind(&WorkerThread, ::boost::ref(m_ioService)) );
+    ::boost::packaged_task< ::fwThread::Worker::ExitReturnType > task( ::boost::bind(&WorkerThread, ::boost::ref(
+                                                                                         m_ioService)) );
     ::boost::future< ::fwThread::Worker::ExitReturnType > ufuture = task.get_future();
 
-    m_thread = ::boost::make_shared< ThreadType >( ::boost::move( task ) );
+    m_thread = std::make_shared< ThreadType >( ::boost::move( task ) );
 
     m_future = ::boost::move(ufuture);
 }
@@ -183,7 +184,7 @@ void WorkerAsio::stop()
 
 SPTR(::fwThread::Timer) WorkerAsio::createTimer()
 {
-    return ::boost::make_shared< TimerAsio >(::boost::ref(m_ioService));
+    return std::make_shared< TimerAsio >(::boost::ref(m_ioService));
 }
 
 void WorkerAsio::post(TaskType handler)
@@ -216,7 +217,7 @@ void WorkerAsio::processTasks(PeriodType maxtime)
 // ---------- Worker ----------
 SPTR(Worker) Worker::defaultFactory()
 {
-    return ::boost::make_shared< WorkerAsio >();
+    return std::make_shared< WorkerAsio >();
 }
 
 
@@ -260,7 +261,7 @@ void TimerAsio::stop()
 void TimerAsio::rearmNoLock(TimeDurationType duration)
 {
     this->cancelNoLock();
-    ::boost::posix_time::time_duration d  =
+    ::boost::posix_time::time_duration d =
         ::boost::posix_time::microseconds(boost::chrono::duration_cast<boost::chrono::microseconds>(duration).count());
     m_timer.expires_from_now( d );
     m_timer.async_wait( ::boost::bind(&TimerAsio::call, this, _1));
@@ -274,7 +275,7 @@ void TimerAsio::call(const ::boost::system::error_code & error)
         bool oneShot;
         {
             ::fwCore::mt::ScopedLock lock(m_mutex);
-            oneShot = m_oneShot;
+            oneShot  = m_oneShot;
             duration = m_duration;
         }
 
diff --git a/SrcLib/core/fwThread/test/CMakeLists.txt b/SrcLib/core/fwThread/test/CMakeLists.txt
index 8789d17..62fda69 100644
--- a/SrcLib/core/fwThread/test/CMakeLists.txt
+++ b/SrcLib/core/fwThread/test/CMakeLists.txt
@@ -1,10 +1,13 @@
-
 fwLoadProperties()
-
-find_package (Boost COMPONENTS thread REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
+find_package(Boost COMPONENTS chrono REQUIRED)
 
+fwInclude(
+    ${Boost_INCLUDE_DIRS}
+    ${CPPUNIT_INCLUDE_DIR}
+)
 
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+)
diff --git a/SrcLib/core/fwThread/test/cppunit.options b/SrcLib/core/fwThread/test/cppunit.options
deleted file mode 100644
index c16c1bb..0000000
--- a/SrcLib/core/fwThread/test/cppunit.options
+++ /dev/null
@@ -1,4 +0,0 @@
-CLASSTEST=['WorkerTest','TaskHandlerTest']
-USE = ['boost','boostThread']
-LIB = ['fwCore_0-1', 'fwTest_0-1', 'fwThread_0-1']
-CONSOLE = 'yes'
diff --git a/SrcLib/core/fwThread/test/tu/include/PoolTest.hpp b/SrcLib/core/fwThread/test/tu/include/PoolTest.hpp
new file mode 100644
index 0000000..0ada785
--- /dev/null
+++ b/SrcLib/core/fwThread/test/tu/include/PoolTest.hpp
@@ -0,0 +1,36 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWTHREAD_UT_POOLTEST_HPP__
+#define __FWTHREAD_UT_POOLTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwThread
+{
+namespace ut
+{
+
+class PoolTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( PoolTest );
+CPPUNIT_TEST( basicTest );
+CPPUNIT_TEST( defaultPoolTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void basicTest();
+    void defaultPoolTest();
+
+};
+
+} //namespace ut
+} //namespace fwThread
+#endif //__FWTHREAD_UT_POOLTEST_HPP__
diff --git a/SrcLib/core/fwThread/test/tu/include/TaskHandlerTest.hpp b/SrcLib/core/fwThread/test/tu/include/TaskHandlerTest.hpp
index 5815d93..65355d3 100644
--- a/SrcLib/core/fwThread/test/tu/include/TaskHandlerTest.hpp
+++ b/SrcLib/core/fwThread/test/tu/include/TaskHandlerTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,10 @@ namespace ut
 
 class TaskHandlerTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( TaskHandlerTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST( exceptionTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( TaskHandlerTest );
+CPPUNIT_TEST( basicTest );
+CPPUNIT_TEST( exceptionTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwThread/test/tu/include/WorkerTest.hpp b/SrcLib/core/fwThread/test/tu/include/WorkerTest.hpp
index dc0fe23..93f675f 100644
--- a/SrcLib/core/fwThread/test/tu/include/WorkerTest.hpp
+++ b/SrcLib/core/fwThread/test/tu/include/WorkerTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,10 +16,10 @@ namespace ut
 
 class WorkerTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( WorkerTest );
-    CPPUNIT_TEST( basicTest );
-    CPPUNIT_TEST( timerTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( WorkerTest );
+CPPUNIT_TEST( basicTest );
+CPPUNIT_TEST( timerTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwThread/test/tu/src/PoolTest.cpp b/SrcLib/core/fwThread/test/tu/src/PoolTest.cpp
new file mode 100644
index 0000000..6580f6e
--- /dev/null
+++ b/SrcLib/core/fwThread/test/tu/src/PoolTest.cpp
@@ -0,0 +1,119 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwCore/spyLog.hpp>
+
+#include <fwThread/Pool.hpp>
+#include <fwThread/Worker.hpp>
+
+#include "PoolTest.hpp"
+
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwThread::ut::PoolTest );
+
+namespace fwThread
+{
+namespace ut
+{
+
+void PoolTest::setUp()
+{
+    // Set up context before running a test.
+}
+void PoolTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+
+//-----------------------------------------------------------------------------
+
+struct PoolTestHandler
+{
+    PoolTestHandler() : m_step(0), m_threadCheckOk(true)
+    {
+        m_constructorThreadId = ::fwThread::getCurrentThreadId();
+    }
+
+    void nextStep()
+    {
+        ::std::this_thread::sleep_for( ::std::chrono::milliseconds(10));
+        this->nextStepNoSleep();
+    }
+
+    void nextStepNoSleep()
+    {
+        m_threadCheckOk &= (m_constructorThreadId != ::fwThread::getCurrentThreadId());
+
+        std::unique_lock<std::mutex> lock(m_mutex);
+        ++m_step;
+    }
+
+    int m_step;
+    bool m_threadCheckOk;
+    std::mutex m_mutex;
+    ::fwThread::ThreadIdType m_constructorThreadId;
+};
+
+//-----------------------------------------------------------------------------
+
+void PoolTest::basicTest()
+{
+    {
+        PoolTestHandler handler;
+        {
+            ::fwThread::Pool pool(1);
+
+            pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+            pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+            pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+        }
+        CPPUNIT_ASSERT_EQUAL(3, handler.m_step);
+        CPPUNIT_ASSERT_EQUAL(true, handler.m_threadCheckOk);
+    }
+
+    {
+        PoolTestHandler handler;
+        {
+            ::fwThread::Pool pool(10);
+
+            for(int i = 0; i < 50; ++i)
+            {
+                pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(50, handler.m_step);
+        CPPUNIT_ASSERT_EQUAL(true, handler.m_threadCheckOk);
+    }
+
+}
+
+//-----------------------------------------------------------------------------
+
+void PoolTest::defaultPoolTest()
+{
+    // Create the pool
+    ::fwThread::createDefaultPool();
+
+    // Use the pool
+    PoolTestHandler handler;
+    ::fwThread::Pool& pool = ::fwThread::getDefaultPool();
+    pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+    pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+    pool.post( ::std::bind( &PoolTestHandler::nextStep, &handler) );
+
+    // Delete the default ppol
+    ::fwThread::deleteDefaultPool();
+
+    CPPUNIT_ASSERT_EQUAL(3, handler.m_step);
+    CPPUNIT_ASSERT_EQUAL(true, handler.m_threadCheckOk);
+
+}
+//-----------------------------------------------------------------------------
+
+} //namespace ut
+} //namespace fwThread
diff --git a/SrcLib/core/fwThread/test/tu/src/TaskHandlerTest.cpp b/SrcLib/core/fwThread/test/tu/src/TaskHandlerTest.cpp
index e629a1a..36e26dd 100644
--- a/SrcLib/core/fwThread/test/tu/src/TaskHandlerTest.cpp
+++ b/SrcLib/core/fwThread/test/tu/src/TaskHandlerTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -56,11 +56,11 @@ void TaskHandlerTest::basicTest()
     ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
 
     ::boost::packaged_task<int> task( ::boost::bind( &copy, 5) );
-    ::boost::future< int > future = task.get_future();
+    ::boost::future< int > future  = task.get_future();
     ::boost::function< void () > f = moveTaskIntoFunction(task);
 
     ::boost::packaged_task<int> task2( ::boost::bind( &copy, 8) );
-    ::boost::future< int > future2 = task2.get_future();
+    ::boost::future< int > future2  = task2.get_future();
     ::boost::function< void () > f2 = moveTaskIntoFunction(task2);
 
     worker->post(f);
@@ -83,11 +83,11 @@ void TaskHandlerTest::basicTest()
 
 
     ::boost::packaged_task<int> task3( ::boost::bind( &copy, 5) );
-    ::boost::future< int > future3 = task3.get_future();
+    ::boost::future< int > future3  = task3.get_future();
     ::boost::function< void () > f3 = moveTaskIntoFunction(task3);
 
     ::boost::packaged_task<int> task4( ::boost::bind( &copy, 8) );
-    ::boost::future< int > future4 = task4.get_future();
+    ::boost::future< int > future4  = task4.get_future();
     ::boost::function< void () > f4 = moveTaskIntoFunction(task4);
 
     worker->post(f3);
diff --git a/SrcLib/core/fwThread/test/tu/src/WorkerTest.cpp b/SrcLib/core/fwThread/test/tu/src/WorkerTest.cpp
index 5521336..3a0e58f 100644
--- a/SrcLib/core/fwThread/test/tu/src/WorkerTest.cpp
+++ b/SrcLib/core/fwThread/test/tu/src/WorkerTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -120,7 +120,7 @@ void WorkerTest::timerTest()
 
     ::fwThread::Timer::sptr timer = worker->createTimer();
 
-    ::boost::chrono::milliseconds duration = ::boost::chrono::milliseconds(100) ;
+    ::boost::chrono::milliseconds duration = ::boost::chrono::milliseconds(100);
 
     timer->setFunction(  ::boost::bind( &TestHandler::nextStepNoSleep, &handler)  );
     timer->setDuration(duration);
@@ -137,7 +137,7 @@ void WorkerTest::timerTest()
 
     ::boost::this_thread::sleep_for( duration/10. );
 
-    for (int i = 1 ; i < 50 ; ++i)
+    for (int i = 1; i < 50; ++i)
     {
         ::boost::this_thread::sleep_for( duration );
 
@@ -167,7 +167,7 @@ void WorkerTest::timerTest()
 
     ::boost::this_thread::sleep_for( duration/10. );
 
-    for (int i = 1 ; i < 50 ; ++i)
+    for (int i = 1; i < 50; ++i)
     {
         ::boost::this_thread::sleep_for( duration );
 
@@ -201,7 +201,7 @@ void WorkerTest::timerTest()
 
     ::boost::this_thread::sleep_for( duration/10. );
 
-    for (int i = 1 ; i < 25 ; ++i)
+    for (int i = 1; i < 25; ++i)
     {
         ::boost::this_thread::sleep_for( duration );
 
@@ -214,7 +214,7 @@ void WorkerTest::timerTest()
     duration = ::boost::chrono::milliseconds(50);
     timer->setDuration(duration);
 
-    for (int i = 24 ; i < 50 ; ++i)
+    for (int i = 24; i < 50; ++i)
     {
         ::boost::this_thread::sleep_for( duration );
 
diff --git a/SrcLib/core/fwTools/CMakeLists.txt b/SrcLib/core/fwTools/CMakeLists.txt
index 08e5b74..bdcbc1c 100644
--- a/SrcLib/core/fwTools/CMakeLists.txt
+++ b/SrcLib/core/fwTools/CMakeLists.txt
@@ -1,7 +1,4 @@
-
 fwLoadProperties()
 
-find_package (Boost COMPONENTS regex date_time chrono filesystem system signals REQUIRED)
-fwForwardInclude(${fwCore_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES} )
-
+find_package (Boost COMPONENTS regex signals REQUIRED)
+fwLink(${Boost_LIBRARIES})
diff --git a/SrcLib/core/fwTools/COPYING b/SrcLib/core/fwTools/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwTools/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwTools/COPYING.LESSER b/SrcLib/core/fwTools/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwTools/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwTools/Properties.cmake b/SrcLib/core/fwTools/Properties.cmake
index 7074dc1..7d33ecf 100644
--- a/SrcLib/core/fwTools/Properties.cmake
+++ b/SrcLib/core/fwTools/Properties.cmake
@@ -2,6 +2,13 @@
 set( NAME fwTools )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore )
+if(ANDROID)
+    set( DEPENDENCIES
+            fwCore
+            fwRuntime
+    )
+else()
+    set( DEPENDENCIES fwCore )
+endif()
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/core/fwTools/bin/build.options b/SrcLib/core/fwTools/bin/build.options
deleted file mode 100644
index 1d1e1f3..0000000
--- a/SrcLib/core/fwTools/bin/build.options
+++ /dev/null
@@ -1,5 +0,0 @@
-TYPE    = 'shared'
-VERSION = '0-1'
-USE     = ['boost','boostFilesystem','boostSignals','boostRegex','boostDateTime']
-LIB     = ['fwCore_0-1', 'fwCamp_0-1']
-
diff --git a/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp b/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp
index 6c22996..5efbf55 100644
--- a/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Bookmarks.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_BOOKMARKS_HPP_
-#define _FWTOOLS_BOOKMARKS_HPP_
+#ifndef __FWTOOLS_BOOKMARKS_HPP__
+#define __FWTOOLS_BOOKMARKS_HPP__
 
 #include <string>
 #include <list>
@@ -25,7 +25,7 @@ class Object;
 /**
  * @brief   Allows to add a bookmark to an object, the bookmark name is unique (in time), an object can have several bookmarks
  * @class   Bookmarks
- * 
+ *
  * @date    2007-2011.
  * @note    expired object do not erase its bookmarks
  **/
@@ -65,18 +65,18 @@ public:
      */
     FWTOOLS_API static std::list<BookmarkName> getBookmarks();
 
-protected :
 
-    FWTOOLS_API Bookmarks();
+    FWTOOLS_API virtual ~Bookmarks();
+protected:
 
-    FWTOOLS_API virtual ~Bookmarks() ;
+    FWTOOLS_API Bookmarks();
 
-   typedef ::boost::unordered_map< BookmarkName, WPTR(::fwTools::Object ) > Dictionary;
+    typedef ::boost::unordered_map< BookmarkName, WPTR(::fwTools::Object ) > Dictionary;
 
-   static  Dictionary m_dictionary;
+    static Dictionary m_dictionary;
 };
 
 }
 
 
-#endif /* BOOKMARKS_HPP_ */
+#endif /* __FWTOOLS_BOOKMARKS_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/Combinatory.hpp b/SrcLib/core/fwTools/include/fwTools/Combinatory.hpp
index cb68e4d..99b00e1 100644
--- a/SrcLib/core/fwTools/include/fwTools/Combinatory.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Combinatory.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ namespace fwTools
 /**
  * @brief   Helper for BinaryCartesianProduct two Set
  * @struct  AppendValueFirst
- * 
+ *
  * @date    2007-2009.
  * @param   TYPE should be a simple type
  * @param   SETOFSET should be a container of type list i.e vector< vector< singleTypes>, vector< singleTypes>, ... >.
@@ -42,9 +42,11 @@ struct AppendValueFirst
     {
 
         typedef BOOST_DEDUCED_TYPENAME boost::mpl::eval_if< boost::mpl::empty<SETOFSET>,
-                                                        boost::mpl::vector< boost::mpl::vector<TYPE> >,
-                                                        boost::mpl::transform< SETOFSET, boost::mpl::push_front< boost::mpl::_1 , TYPE > >
-                                                    >::type type;
+                                                            boost::mpl::vector< boost::mpl::vector<TYPE> >,
+                                                            boost::mpl::transform< SETOFSET,
+                                                                                   boost::mpl::push_front< boost::mpl::
+                                                                                                           _1, TYPE > >
+                                                            >::type type;
     };
 };
 
@@ -52,7 +54,7 @@ struct AppendValueFirst
 /**
  * @brief   MetaFunction which create an boost::boost::mpl::vector
  * @struct  make_vector
- * 
+ *
  * @date    2007-2009.
  */
 struct make_vector
@@ -69,7 +71,7 @@ struct make_vector
  * @brief   MetaFunction ( used for pseudo Curryfication ) which transform a set where new elements are
  * singleton of 1st set elements i.e { a , b , c } --> { {a}, {b}, {c} }
  * @struct  makeSetOfSingletons
- * 
+ *
  * @date    2007-2009.
  **/
 struct makeSetOfSingletons
@@ -87,7 +89,7 @@ struct makeSetOfSingletons
 /**
  * @brief   Helper which compute from a set and a multi set
  * @struct  BinaryCartesianProductRecurser
- * 
+ *
  * @date    2007-2009.
  *
  * Set1: A = { a_1, a_2, ..., a_N }  \n  MultiSet = {   { ... b_i ...} , { ... c_i ...}, ... { z_i ...}  }\n
@@ -101,10 +103,14 @@ struct BinaryCartesianProductRecurser
     struct apply
     {
         typedef BOOST_DEDUCED_TYPENAME boost::mpl::accumulate< Set1,
-                                                boost::mpl::vector<>,
-                                                boost::mpl::copy<   boost::mpl::apply2< AppendValueFirst, boost::mpl::_2, MultiSet > ,  boost::mpl::back_inserter< boost::mpl::_1>  >
-
-                                                      >::type type;
+                                                               boost::mpl::vector<>,
+                                                               boost::mpl::copy<   boost::mpl::apply2< AppendValueFirst,
+                                                                                                       boost::mpl::_2,
+                                                                                                       MultiSet >,
+                                                                                   boost::mpl::back_inserter< boost::mpl
+                                                                                                              ::_1>  >
+
+                                                               >::type type;
     };
 };
 
@@ -113,7 +119,7 @@ struct BinaryCartesianProductRecurser
 /**
  * @brief   Compute Cartesian Product of two set (type list) to generate all possible combinaison.
  * @struct  BinaryCartesianProduct
- * 
+ *
  * @date    2007-2009.
  *
  * From two type list generate a new type list where all elemenent a combinaison of each set. For example :
@@ -153,9 +159,10 @@ struct BinaryCartesianProduct
     template< class Set1, class Set2 >
     struct apply
     {
-        typedef BOOST_DEDUCED_TYPENAME  boost::mpl::apply1< makeSetOfSingletons,  Set2>::type  Set2WithSingletons;
+        typedef BOOST_DEDUCED_TYPENAME boost::mpl::apply1< makeSetOfSingletons,  Set2>::type Set2WithSingletons;
 
-        typedef BOOST_DEDUCED_TYPENAME  boost::mpl::apply2<BinaryCartesianProductRecurser, Set1, Set2WithSingletons >::type type;
+        typedef BOOST_DEDUCED_TYPENAME boost::mpl::apply2<BinaryCartesianProductRecurser, Set1,
+                                                          Set2WithSingletons >::type type;
     };
 };
 
@@ -165,7 +172,7 @@ struct BinaryCartesianProduct
 /**
  * @brief compute the cartesian product of many set
  * @struct  CartesianProduct
- * 
+ *
  * @date    2007-2009.
  * @param   MultiSet must be of the following form vector<  vector< ElementaryType1, ElementaryType2,... > , vector< ...ElementaryTypes...> ... > where Elementary
  *          types are not boost::mpl::Container : i.e int, classes, std::vector<int> etc...
@@ -201,10 +208,11 @@ struct CartesianProduct
     template< class MultiSet >
     struct apply
     {
-        typedef BOOST_DEDUCED_TYPENAME  boost::mpl::reverse_fold<   MultiSet,
-                                                            boost::mpl::vector<>,
-                                                            boost::mpl::apply2< BinaryCartesianProductRecurser, boost::mpl::_2, boost::mpl::_1 >
-                            >::type type;
+        typedef BOOST_DEDUCED_TYPENAME boost::mpl::reverse_fold<   MultiSet,
+                                                                   boost::mpl::vector<>,
+                                                                   boost::mpl::apply2< BinaryCartesianProductRecurser,
+                                                                                       boost::mpl::_2, boost::mpl::_1 >
+                                                                   >::type type;
     };
 };
 
diff --git a/SrcLib/core/fwTools/include/fwTools/Dispatcher.hpp b/SrcLib/core/fwTools/include/fwTools/Dispatcher.hpp
index 2f9a3c3..9e634b9 100644
--- a/SrcLib/core/fwTools/include/fwTools/Dispatcher.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Dispatcher.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,21 +26,24 @@ namespace fwTools
 /**
  * @brief   Limit cases for empty typelist
  * @class   EndTypeListAction
- * 
+ *
  * @date    2007-2009.
  * @see ::fwTools::Dispatcher
  */
- struct EndTypeListAction
- {
+struct EndTypeListAction
+{
 
     /// Perform nothing see Dispatcher<>::invoke()
-    static void invoke() {};
+    static void invoke()
+    {
+    }
 
     /// Throw an exception to inform end-user that KeyType value have no correspondance in type list
     template< class KeyType>
     static void  invoke(const KeyType &keytype)
     {
-        std::string msg = ::fwTools::getString(keytype) + " : KeyType value incorrect : no corresponding Type in typelist";
+        std::string msg = ::fwTools::getString(keytype) +
+                          " : KeyType value incorrect : no corresponding Type in typelist";
         throw std::invalid_argument(msg);
     }
 
@@ -49,7 +52,8 @@ namespace fwTools
     static void  invoke( const KeyType &keytype,const Parameter &param )
     {
         FwCoreNotUsedMacro(param);
-        std::string msg = ::fwTools::getString(keytype) + " : KeyType value incorrect : no corresponding Type in typelist";
+        std::string msg = ::fwTools::getString(keytype) +
+                          " : KeyType value incorrect : no corresponding Type in typelist";
         throw std::invalid_argument(msg);
     }
 
@@ -57,12 +61,13 @@ namespace fwTools
     template< class BaseClass, class KeyType>
     static BaseClass  *instanciate(const KeyType &keytype)
     {
-        std::string msg = ::fwTools::getString(keytype) + " : KeyType value incorrect : no corresponding Type in typelist";
+        std::string msg = ::fwTools::getString(keytype) +
+                          " : KeyType value incorrect : no corresponding Type in typelist";
         throw std::invalid_argument(msg);
         return NULL;
     }
 
- };
+};
 
 
 
@@ -70,7 +75,7 @@ namespace fwTools
 /**
  * @brief   Create an automatic template instancier exple Dispatcher< TYPESEQUENCE , FUNCTOR>::invoke("int");
  * @class   Dispatcher
- * 
+ *
  * @date    2007-2009.
  *
  * Will instanciante class FUNCTOR then for a type T in TYPESEQUENCE (here int) call the corresponding operator() method
@@ -80,107 +85,107 @@ template< class TSEQ, class FUNCTOR >
 struct Dispatcher
 {
 
-     private:
+    private:
         typedef BOOST_DEDUCED_TYPENAME boost::mpl::pop_front<TSEQ>::type Tail;
         typedef BOOST_DEDUCED_TYPENAME boost::mpl::front<TSEQ>::type Head;
 
-     public :
+    public:
 
 
 
-     /**
-      * @brief Instanciate and invoke all functors
-      */
-     static void invoke()
-     {
-         namespace mpl = boost::mpl;
+        /**
+         * @brief Instanciate and invoke all functors
+         */
+        static void invoke()
+        {
+            namespace mpl = boost::mpl;
 
-         // create the functor then excute it
-         FUNCTOR f;
+            // create the functor then excute it
+            FUNCTOR f;
 #ifdef _WIN32
-         f.operator()<Head>();
+            f.operator()<Head>();
 #else
-         f.template operator()<Head>();
+            f.template operator()<Head>();
 #endif
 
 
-         // recursively call other element in the list
-         typedef BOOST_DEDUCED_TYPENAME mpl::if_<
-             mpl::empty<Tail>,
-             EndTypeListAction,
-             Dispatcher<Tail,FUNCTOR >
-                 >::type typex;
-         typex::invoke();
-     }
+            // recursively call other element in the list
+            typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+                    mpl::empty<Tail>,
+                    EndTypeListAction,
+                    Dispatcher<Tail,FUNCTOR >
+                    >::type typex;
+            typex::invoke();
+        }
 
 
 
-     /**
-      * @brief Invoke only the specified Type only
-      */
-     template< class KeyType >
-     static void invoke( const KeyType &keytype )
-     {
-         namespace mpl = boost::mpl;
+        /**
+         * @brief Invoke only the specified Type only
+         */
+        template< class KeyType >
+        static void invoke( const KeyType &keytype )
+        {
+            namespace mpl = boost::mpl;
 
-         if   ( isMapping< Head>(keytype) )
-         {
-             // create the functor then excute it
-             FUNCTOR f;
+            if   ( isMapping< Head>(keytype) )
+            {
+                // create the functor then excute it
+                FUNCTOR f;
 #ifdef _WIN32
-             f.operator()<Head>();
+                f.operator()<Head>();
 #else
-             f.template operator()<Head>();
+                f.template operator()<Head>();
 #endif
-         }
-         else
-         {
-             // recursively call other element in the list
-             typedef BOOST_DEDUCED_TYPENAME mpl::if_<
-                 mpl::empty<Tail>,
-                 EndTypeListAction,
-                 Dispatcher< Tail,FUNCTOR >
-                     >::type typex;
-             typex::invoke(keytype);
-
-         }
-     }
-     // NOTE gcc seems unable to explicit call of static template fonction member :/
-     // all arguments needs to be present specicied template seems ignored
-
-
-     /**
-      * @brief Invoke only the specified Type only with a fixed parameter
-      * @note That parameter is *NOT* const so functor can update value
-      */
-     template< class KeyType,class Parameter >
-     static void invoke( const KeyType &keytype,  Parameter &param )
-     {
-         namespace mpl = boost::mpl;
-
-         if   ( isMapping< Head>(keytype) )
-         {
-             // create the functor then excute it
-             FUNCTOR f;
+            }
+            else
+            {
+                // recursively call other element in the list
+                typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+                        mpl::empty<Tail>,
+                        EndTypeListAction,
+                        Dispatcher< Tail,FUNCTOR >
+                        >::type typex;
+                typex::invoke(keytype);
+
+            }
+        }
+        // NOTE gcc seems unable to explicit call of static template fonction member :/
+        // all arguments needs to be present specicied template seems ignored
+
+
+        /**
+         * @brief Invoke only the specified Type only with a fixed parameter
+         * @note That parameter is *NOT* const so functor can update value
+         */
+        template< class KeyType,class Parameter >
+        static void invoke( const KeyType &keytype,  Parameter &param )
+        {
+            namespace mpl = boost::mpl;
+
+            if   ( isMapping< Head>(keytype) )
+            {
+                // create the functor then excute it
+                FUNCTOR f;
 #ifdef _WIN32
-             f.operator()<Head>(param);
+                f.operator()<Head>(param);
 #else
-             f.template operator()<Head>(param);
+                f.template operator()<Head>(param);
 #endif
 
-         }
-         else
-         {
-             // recursively call other element in the list
-             typedef BOOST_DEDUCED_TYPENAME mpl::if_<
-                 mpl::empty<Tail>,
-                 EndTypeListAction,
-                 Dispatcher<Tail,FUNCTOR >
-                     >::type typex;
-             typex::invoke(keytype,param);
-
-         }
-     }
+            }
+            else
+            {
+                // recursively call other element in the list
+                typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+                        mpl::empty<Tail>,
+                        EndTypeListAction,
+                        Dispatcher<Tail,FUNCTOR >
+                        >::type typex;
+                typex::invoke(keytype,param);
+
+            }
+        }
 
 
 };
diff --git a/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx b/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx
index aa97a7d..a64b773 100644
--- a/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx
+++ b/SrcLib/core/fwTools/include/fwTools/DynamicAttributes.hxx
@@ -1,24 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_DYNAMIC_ATTRIBUTE_HXX_
-#define _FWTOOLS_DYNAMIC_ATTRIBUTE_HXX_
+#ifndef __FWTOOLS_DYNAMICATTRIBUTES_HXX__
+#define __FWTOOLS_DYNAMICATTRIBUTES_HXX__
 
-#include <map>
-#include <vector>
-
-#include <boost/ref.hpp>
-#include <boost/foreach.hpp>
+#include "fwTools/macros.hpp"
 
 #include <fwCore/base.hpp>
 #include <fwCore/Demangler.hpp>
 
-#include "fwTools/macros.hpp"
+#include <boost/ref.hpp>
+#include <map>
+#include <vector>
 
-namespace fwTools {
+namespace fwTools
+{
 
 class DynamicAttributesBase
 {
@@ -32,13 +31,13 @@ class DynamicAttributes : public DynamicAttributesBase
 {
 
 public:
-    typedef std::string  AttrNameType;
-    typedef SPTR(CLASS)  AttrType;
+    typedef std::string AttrNameType;
+    typedef SPTR (CLASS)  AttrType;
     typedef std::vector< AttrNameType > AttrNameVectorType;
     typedef ::boost::reference_wrapper< AttrType > AttrRefType;
     typedef std::map< AttrNameType, AttrRefType > AttrMapType;
 
-    typedef CSPTR(CLASS) ConstAttrType;
+    typedef CSPTR (CLASS) ConstAttrType;
 
     DynamicAttributes();
     virtual ~DynamicAttributes();
@@ -55,7 +54,8 @@ public:
 
     virtual AttrNameVectorType getAttributeNames();
 
-    virtual fwToolsRegisterAttributeSignatureMacro() {};
+    virtual fwToolsRegisterAttributeSignatureMacro() {
+    };
 protected:
     virtual AttrRefType getAttributeRef( AttrNameType attrName );
     AttrMapType __FWTOOLS_ATTRIBUTE_MAP_NAME;
@@ -92,22 +92,23 @@ typename DynamicAttributes< CLASS >::AttrRefType DynamicAttributes< CLASS >::get
 {
     typename DynamicAttributes::AttrMapType::iterator iter = this->__FWTOOLS_ATTRIBUTE_MAP_NAME.find(attrName);
     OSLM_FATAL_IF(
-            "Object "<< ::fwCore::getFullClassname< CLASS >() << "has no attribute named '"<< attrName << "'",
-            iter == this->__FWTOOLS_ATTRIBUTE_MAP_NAME.end()
-            );
+        "Object "<< ::fwCore::getFullClassname< CLASS >() << "has no attribute named '"<< attrName << "'",
+        iter == this->__FWTOOLS_ATTRIBUTE_MAP_NAME.end()
+        );
     return (*iter).second;
 }
 
 //------------------------------------------------------------------------------
 
 template< class CLASS >
-typename DynamicAttributes< CLASS >::ConstAttrType DynamicAttributes< CLASS >::getConstAttribute( AttrNameType attrName ) const
+typename DynamicAttributes< CLASS >::ConstAttrType DynamicAttributes< CLASS >::getConstAttribute( AttrNameType attrName )
+const
 {
     typename DynamicAttributes::AttrMapType::const_iterator iter = this->__FWTOOLS_ATTRIBUTE_MAP_NAME.find(attrName);
     OSLM_FATAL_IF(
-            "Object "<< ::fwCore::getFullClassname< CLASS >() << "has no attribute named '"<< attrName << "'",
-            iter == this->__FWTOOLS_ATTRIBUTE_MAP_NAME.end()
-            );
+        "Object "<< ::fwCore::getFullClassname< CLASS >() << "has no attribute named '"<< attrName << "'",
+        iter == this->__FWTOOLS_ATTRIBUTE_MAP_NAME.end()
+        );
     return (*iter).second.get();
 }
 
@@ -123,7 +124,7 @@ bool DynamicAttributes< CLASS >::hasAttribute( AttrNameType attrName )
 //------------------------------------------------------------------------------
 
 template< class CLASS >
-typename DynamicAttributes< CLASS >::AttrNameVectorType  DynamicAttributes< CLASS >::getAttributeNames()
+typename DynamicAttributes< CLASS >::AttrNameVectorType DynamicAttributes< CLASS >::getAttributeNames()
 {
     AttrNameVectorType names;
     typename DynamicAttributes::AttrMapType::const_iterator iter;
@@ -136,4 +137,4 @@ typename DynamicAttributes< CLASS >::AttrNameVectorType  DynamicAttributes< CLAS
 
 } //end namespace fwTools
 
-#endif //_FWTOOLS_DYNAMIC_ATTRIBUTE_HXX_
+#endif //__FWTOOLS_DYNAMICATTRIBUTES_HXX__
diff --git a/SrcLib/core/fwTools/include/fwTools/DynamicType.hpp b/SrcLib/core/fwTools/include/fwTools/DynamicType.hpp
index c02bbfd..fd41c0c 100644
--- a/SrcLib/core/fwTools/include/fwTools/DynamicType.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/DynamicType.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ namespace fwTools
 /**
  * @brief   Class defining an elementary C++ type aka unsigned char, signed char, .... signed long, float, double
  * @class   DynamicType
- * 
+ *
  * @date    2007-2009.
  *
  **/
@@ -110,19 +110,19 @@ public:
     FWTOOLS_API bool isSigned();
 
     typedef boost::mpl::vector<
-        signed char,
-        unsigned char,
-        signed short,
-        unsigned short,
-        signed int,
-        unsigned int,
-        unsigned long,
-        signed long,
-        float,
-        double
+            signed char,
+            unsigned char,
+            signed short,
+            unsigned short,
+            signed int,
+            unsigned int,
+            unsigned long,
+            signed long,
+            float,
+            double
             >::type SupportedTypes;
 
-protected :
+protected:
 
     std::string m_value; // aka key
     unsigned char m_sizeof;
@@ -147,7 +147,7 @@ DynamicType makeDynamicType();
  */
 // #include "KEYTYPEMapping.hpp" is mandatory
 template<class KEYTYPE>
-DynamicType makeDynamicType(const  KEYTYPE &keyType);
+DynamicType makeDynamicType(const KEYTYPE &keyType);
 
 
 template<>
diff --git a/SrcLib/core/fwTools/include/fwTools/DynamicType.hxx b/SrcLib/core/fwTools/include/fwTools/DynamicType.hxx
index 9e5b3cd..69a216e 100644
--- a/SrcLib/core/fwTools/include/fwTools/DynamicType.hxx
+++ b/SrcLib/core/fwTools/include/fwTools/DynamicType.hxx
@@ -1,9 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWTOOLS_DYNAMICTYPE_HXX__
+#define __FWTOOLS_DYNAMICTYPE_HXX__
+
 #include <algorithm>
 #include <limits>
 #include <fwCore/base.hpp>
@@ -14,7 +17,6 @@
 namespace fwTools
 {
 
-
 template<class TYPE>
 DynamicType makeDynamicType()
 {
@@ -23,9 +25,6 @@ DynamicType makeDynamicType()
     return d;
 }
 
-
-
-
 struct TypeSetter
 {
     template<class TYPE>
@@ -35,18 +34,12 @@ struct TypeSetter
     }
 };
 
-
-
 template<class KEYTYPE>
 DynamicType makeDynamicType(const KEYTYPE &keyType)
 {
-
     DynamicType d;
-
     Dispatcher<DynamicType::SupportedTypes,TypeSetter >::invoke(keyType,d);
-
     assert ( d != DynamicType() ); // a type must be found !!
-
     return d;
 }
 
@@ -60,7 +53,7 @@ public:
     template< typename PIXEL >
     void operator()( std::pair<T,T> &minMax )
     {
-        minMax.first = static_cast< T >( std::numeric_limits< PIXEL >::min() );
+        minMax.first  = static_cast< T >( std::numeric_limits< PIXEL >::min() );
         minMax.second = static_cast< T >( std::numeric_limits< PIXEL >::max() );
 
         ::fwTools::DynamicType type = ::fwTools::makeDynamicType< PIXEL >();
@@ -72,31 +65,24 @@ public:
     }
 };
 
-
-
-
 template< class TYPE>
 void DynamicType::setType() throw(std::invalid_argument)
 {
-     std::list< std::string>::const_iterator  supportedTypesIter;
-
-     supportedTypesIter = m_managedTypes.begin();
-     while ( supportedTypesIter !=  m_managedTypes.end() )
-     {
-         if ( isMapping<TYPE>( *supportedTypesIter) )
-         {
-             m_value  = *supportedTypesIter;
-             m_sizeof = sizeof(TYPE);
-             return;
-
-         }
-         ++supportedTypesIter;
-     }
-
-     throw std::invalid_argument("DynamicType::setType<TYPE> incorrect TYPE");
-}
-
+    std::list< std::string>::const_iterator supportedTypesIter;
 
+    supportedTypesIter = m_managedTypes.begin();
+    while ( supportedTypesIter !=  m_managedTypes.end() )
+    {
+        if ( isMapping<TYPE>( *supportedTypesIter) )
+        {
+            m_value  = *supportedTypesIter;
+            m_sizeof = sizeof(TYPE);
+            return;
+        }
+        ++supportedTypesIter;
+    }
+    throw std::invalid_argument("DynamicType::setType<TYPE> incorrect TYPE");
+}
 
 
 template< class TYPE>
@@ -106,8 +92,6 @@ bool DynamicType::isType() const
 }
 
 
-
-
 template<class TYPE>
 const std::string DynamicType::string()
 {
@@ -117,8 +101,6 @@ const std::string DynamicType::string()
 }
 
 
-
-
 template<class NEWTYPE>
 void DynamicType::registerNewType(const std::string &newKey) throw(std::invalid_argument)
 {
@@ -161,6 +143,6 @@ std::pair<T,T> DynamicType::minMax()
     return minMax;
 }
 
-
-
 } //end namespace fwTools
+
+#endif /*__FWTOOLS_DYNAMICTYPE_HXX__*/
diff --git a/SrcLib/core/fwTools/include/fwTools/DynamicTypeKeyTypeMapping.hpp b/SrcLib/core/fwTools/include/fwTools/DynamicTypeKeyTypeMapping.hpp
index 3a65569..b2dd05b 100644
--- a/SrcLib/core/fwTools/include/fwTools/DynamicTypeKeyTypeMapping.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/DynamicTypeKeyTypeMapping.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwTools/include/fwTools/Exception.hpp b/SrcLib/core/fwTools/include/fwTools/Exception.hpp
index 0bbc886..863d6fb 100644
--- a/SrcLib/core/fwTools/include/fwTools/Exception.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Exception.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_EXCEPTION_HPP_
-#define _FWTOOLS_EXCEPTION_HPP_
+#ifndef __FWTOOLS_EXCEPTION_HPP__
+#define __FWTOOLS_EXCEPTION_HPP__
 
 #include <exception>
 #include <string>
@@ -19,7 +19,7 @@ namespace fwTools
 /**
  * @brief   Implements fwTools exception class
  * @class   Exception
- * 
+ *
  * @date    2007-2009.
  */
 struct FWTOOLS_CLASS_API Exception : public ::fwCore::Exception
@@ -42,5 +42,5 @@ struct FWTOOLS_CLASS_API Exception : public ::fwCore::Exception
 
 } // namespace fwTools
 
-#endif // _FWTOOLS_EXCEPTION_HPP_
+#endif // __FWTOOLS_EXCEPTION_HPP__
 
diff --git a/SrcLib/core/fwTools/include/fwTools/Failed.hpp b/SrcLib/core/fwTools/include/fwTools/Failed.hpp
index ebe28ec..37abbe7 100644
--- a/SrcLib/core/fwTools/include/fwTools/Failed.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Failed.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_FAILED_HPP_
-#define _FWTOOLS_FAILED_HPP_
+#ifndef __FWTOOLS_FAILED_HPP__
+#define __FWTOOLS_FAILED_HPP__
 
 #include <exception>
 #include <string>
@@ -19,7 +19,7 @@ namespace fwTools
 /**
  * @brief   Implements a failed exception class
  * @class   Failed
- * 
+ *
  * @date    2007-2009.
  */
 struct FWTOOLS_CLASS_API Failed : public ::fwCore::Exception
@@ -42,4 +42,4 @@ struct FWTOOLS_CLASS_API Failed : public ::fwCore::Exception
 
 } // namespace fwTools
 
-#endif // _FWTOOLS_FAILED_HPP_
+#endif // __FWTOOLS_FAILED_HPP__
diff --git a/SrcLib/core/fwTools/include/fwTools/IntegerTypes.hpp b/SrcLib/core/fwTools/include/fwTools/IntegerTypes.hpp
index 721c9ff..b6c7cbe 100644
--- a/SrcLib/core/fwTools/include/fwTools/IntegerTypes.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/IntegerTypes.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,13 +13,13 @@ namespace fwTools
 {
 
 typedef ::boost::mpl::vector<
-                signed char , unsigned char,
-                signed short, unsigned short,
-                signed int  , unsigned int
+        signed char, unsigned char,
+        signed short, unsigned short,
+        signed int, unsigned int
 #ifndef DEBUG
-                ,signed long , unsigned long
+        ,signed long, unsigned long
 #endif
-              >::type IntegerTypes;
+        >::type IntegerTypes;
 
 
 } // end namespace fwTools
diff --git a/SrcLib/core/fwTools/include/fwTools/IntrinsicTypes.hpp b/SrcLib/core/fwTools/include/fwTools/IntrinsicTypes.hpp
index 116b0e7..83cc1df 100644
--- a/SrcLib/core/fwTools/include/fwTools/IntrinsicTypes.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/IntrinsicTypes.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwTools/include/fwTools/Namespace.hpp b/SrcLib/core/fwTools/include/fwTools/Namespace.hpp
index 90a196d..248b485 100644
--- a/SrcLib/core/fwTools/include/fwTools/Namespace.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWTOOLSNAMESPACE_HPP_
-#define FWTOOLSNAMESPACE_HPP_
+#ifndef __FWTOOLS_NAMESPACE_HPP__
+#define __FWTOOLS_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwTools contains several tools like UUID, factory, dispatche, stringizer, macros, helper.
  * @namespace   fwTools
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace fwTools
 {
 }
-#endif /* FWTOOLSNAMESPACE_HPP_ */
+#endif /* __FWTOOLS_NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/NumericRoundCast.hxx b/SrcLib/core/fwTools/include/fwTools/NumericRoundCast.hxx
index 5947e99..2bc7b3c 100644
--- a/SrcLib/core/fwTools/include/fwTools/NumericRoundCast.hxx
+++ b/SrcLib/core/fwTools/include/fwTools/NumericRoundCast.hxx
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTOOLS_NUMERICROUNDCAST_HPP__
-#define __FWTOOLS_NUMERICROUNDCAST_HPP__
+#ifndef __FWTOOLS_NUMERICROUNDCAST_HXX__
+#define __FWTOOLS_NUMERICROUNDCAST_HXX__
 
 #include <boost/numeric/conversion/converter.hpp>
 
@@ -46,4 +46,4 @@ TYPEOUT numericRoundCast (const TYPEIN &value)
 
 } // namespace fwTools
 
-#endif //__FWTOOLS_NUMERICROUNDCAST_HPP__
+#endif //__FWTOOLS_NUMERICROUNDCAST_HXX__
diff --git a/SrcLib/core/fwTools/include/fwTools/Object.hpp b/SrcLib/core/fwTools/include/fwTools/Object.hpp
index de08fc8..e20f00a 100644
--- a/SrcLib/core/fwTools/include/fwTools/Object.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Object.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_OBJECT_HPP_
-#define _FWTOOLS_OBJECT_HPP_
+#ifndef __FWTOOLS_OBJECT_HPP__
+#define __FWTOOLS_OBJECT_HPP__
 
 #include <string>
 #include <vector>
@@ -25,10 +25,11 @@ class UUID;
 /**
  * @brief   Define Base class for FW4SPL objects and services
  * @class   Object
- * 
+ *
  * @date    2007-2009.
  */
-class FWTOOLS_CLASS_API Object  : public ::fwCore::BaseObject , protected ::fwTools::fwID
+class FWTOOLS_CLASS_API Object  : public ::fwCore::BaseObject,
+                                  protected ::fwTools::fwID
 {
 public:
     fwCoreNonInstanciableClassDefinitionsMacro( (Object)(::fwCore::BaseObject) );
@@ -37,13 +38,11 @@ public:
     friend class ::fwTools::UUID;
 
     // expose API for ID management
-    FWTOOLS_API using  ::fwTools::fwID::hasID;
-    FWTOOLS_API using  ::fwTools::fwID::getID;
-    FWTOOLS_API using  ::fwTools::fwID::setID;
-    FWTOOLS_API using  ::fwTools::fwID::resetID;
-#ifdef COM_LOG
-    FWTOOLS_API using  ::fwTools::fwID::getLightID;
-#endif
+    using  ::fwTools::fwID::hasID;
+    using  ::fwTools::fwID::getID;
+    using  ::fwTools::fwID::setID;
+    using  ::fwTools::fwID::resetID;
+
 
     /// return the sub class classname : an alias of this->getClassname
     FWTOOLS_API std::string className() const;
@@ -60,55 +59,70 @@ public:
      * @brief Set a name for an object
      * @deprecated (should use UUID)
      */
-    void setName ( const std::string _strName ) { m_strName = _strName; }
+    void setName ( const std::string _strName )
+    {
+        m_strName = _strName;
+    }
 
     /**
      * @brief Retrieve the name object
      * @deprecated (should use UUID)
      */
-    const std::string getName() const { return m_strName; }
+    const std::string getName() const
+    {
+        return m_strName;
+    }
 
     //@}
 
     FWTOOLS_API void modified()
     {
         m_logicStamp->modified();
-    };
+    }
 
     FWTOOLS_API void timeModified()
     {
         m_timeStamp->modified();
-    };
+    }
 
     FWTOOLS_API void setLifePeriod(::fwCore::TimeStamp::TimeStampType p)
     {
         m_timeStamp->setLifePeriod(p);
-    };
+    }
 
     FWTOOLS_API ::fwCore::TimeStamp::TimeStampType getLifePeriod()
     {
         return m_timeStamp->getLifePeriod();
-    };
+    }
 
     FWTOOLS_API bool periodExpired()
     {
         return m_timeStamp->periodExpired();
-    };
+    }
 
-    ::fwCore::TimeStamp::sptr  getTimeStamp()  const { return m_timeStamp; }
-    ::fwCore::LogicStamp::sptr getLogicStamp() const { return m_logicStamp; }
+    ::fwCore::TimeStamp::sptr  getTimeStamp()  const
+    {
+        return m_timeStamp;
+    }
+    ::fwCore::LogicStamp::sptr getLogicStamp() const
+    {
+        return m_logicStamp;
+    }
 
-    ::fwCore::LogicStamp::csptr getOSRKey() const { return m_OSRKey; }
+    ::fwCore::LogicStamp::csptr getOSRKey() const
+    {
+        return m_OSRKey;
+    }
 
-protected :
+protected:
 
-    ::fwCore::TimeStamp::sptr  m_timeStamp;
+    ::fwCore::TimeStamp::sptr m_timeStamp;
 
     ::fwCore::LogicStamp::sptr m_logicStamp;
 
     SPTR(::fwTools::UUID) m_uuid;
 
-private :
+private:
 
     /// Standard copy operator, forbidden.
     Object &operator=(const Object &_obj);
@@ -122,4 +136,4 @@ private :
 
 }
 
-#endif /* _FWTOOLS_OBJECT_HPP_ */
+#endif /* __FWTOOLS_OBJECT_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/Os.hpp b/SrcLib/core/fwTools/include/fwTools/Os.hpp
index 4567681..a5cc584 100644
--- a/SrcLib/core/fwTools/include/fwTools/Os.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Os.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,17 +9,19 @@
 
 #include <string>
 
-#include "config.hpp"
+#include "fwTools/config.hpp"
 
 
-namespace fwTools {
+namespace fwTools
+{
 
 /**
  * @brief   Namespace fwTools::os contains tools methods which depend on os like get user application data directory.
- * 
+ *
  * @date    2009-2010.
  */
-namespace os {
+namespace os
+{
 
 
 /**
@@ -43,7 +45,7 @@ FWTOOLS_API std::string getEnv(const std::string &name, const std::string &defau
 
 /**
  * @brief   Return the users's application data directory
- * 
+ *
  * @param company The company name
  * @param appName The application name
  * @param createDirectory if true, create the returned directory if it don't exist
@@ -54,14 +56,14 @@ FWTOOLS_API std::string getEnv(const std::string &name, const std::string &defau
  * For example, the UserDataDir under linux will be "~/.config/company/appName"
  */
 FWTOOLS_API std::string  getUserDataDir(
-        std::string company  = "",
-        std::string appName  = "",
-        bool createDirectory = false
-        );
+    std::string company = "",
+    std::string appName = "",
+    bool createDirectory = false
+    );
 
 
 } // namespace os
 
 } // namespace fwTools
 
-#endif
+#endif //__FWTOOLS_OS_HPP__
diff --git a/SrcLib/core/fwTools/include/fwTools/ProgressAdviser.hpp b/SrcLib/core/fwTools/include/fwTools/ProgressAdviser.hpp
index 0352770..6844826 100644
--- a/SrcLib/core/fwTools/include/fwTools/ProgressAdviser.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/ProgressAdviser.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,11 +8,13 @@
 #define __FWTOOLS_PROGRESSADVISER_HPP__
 
 #include <string>
-#include <boost/signal.hpp>
 
 #include <fwCore/base.hpp>
 #include <fwTools/config.hpp>
 
+#include <boost/weak_ptr.hpp>
+#include <boost/signals2.hpp>
+
 
 namespace fwTools
 {
@@ -24,19 +26,18 @@ namespace fwTools
  * Handlers can be added using addHandler(). the Handler of type ProgessHandler can be a function or functor or boost::signal with a signature
  * ( float, std::string ) and returning nothing.
  * @class   ProgressAdviser
- * 
- * @date    2007-2009.
  */
-class FWTOOLS_CLASS_API ProgressAdviser : public ::boost::signals::trackable
+class FWTOOLS_CLASS_API ProgressAdviser : public ::boost::signals2::trackable
 {
 public:
 
     /// define a boost signal signature for the ProgessHandler
-    typedef ::boost::signal< void(float, std::string) >   ProgessSignal; // signal for fctor or function returning void and
+    typedef ::boost::signals2::signal< void (float, std::string) >  ProgessSignal; // signal for fctor or function returning void
+
     /// define the ProgessHandler type
-    typedef ProgessSignal::slot_type         ProgessHandler; // signal for fctor or function returning void and
-                                                            // accepting a float as argument percent
-                                                            // string for information
+    typedef ProgessSignal::slot_type ProgessHandler; // signal for fctor or function returning void and
+                                                     // accepting a float as argument percent
+                                                     // string for information
 
     FWTOOLS_API ProgressAdviser();
     FWTOOLS_API virtual ~ProgressAdviser();
@@ -45,12 +46,12 @@ public:
      * @brief append a new handler ( a functor accepting a float as argument an returning void)
      * @param[in] handler can be either  a function or functor or boost::signal with a signature( float, std::string ) and returning nothing
      */
-    FWTOOLS_API void   addHandler(const ProgessHandler &handler);
+    FWTOOLS_API void addHandler(const ProgessHandler &handler);
 
     /// notify modification for all handler
-    FWTOOLS_API void   notifyProgress(float percent,std::string msg="");
+    FWTOOLS_API void notifyProgress(float percent, const std::string& msg = "") const;
 
-protected :
+protected:
 
     /// to notify progress simply use m_progressSignal( percent,msg ) to notify to Handler
     ProgessSignal m_progressSignal;
diff --git a/SrcLib/core/fwTools/include/fwTools/ProgressToLogger.hpp b/SrcLib/core/fwTools/include/fwTools/ProgressToLogger.hpp
index e2632c3..67a4e72 100644
--- a/SrcLib/core/fwTools/include/fwTools/ProgressToLogger.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/ProgressToLogger.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,9 @@
 
 #include <string>
 #include <fwTools/config.hpp>
-#include <boost/signals/trackable.hpp>
+
+#include <boost/weak_ptr.hpp>
+#include <boost/signals2.hpp>
 
 namespace fwTools
 {
@@ -18,10 +20,10 @@ namespace fwTools
  * @brief   Class ProgressToLogger is an ProgressAdviser::ProgressHandler, it receive notification from its ProgressAdviser
  * and send the progress to the logging system ( SpyLog )
  * @class   ProgressToLogger
- * 
+ *
  * @date    2007-2009.
  */
-class FWTOOLS_CLASS_API ProgressToLogger  : public ::boost::signals::trackable // to autoDisconnect if handler is destroyed before the notifier
+class FWTOOLS_CLASS_API ProgressToLogger  : public ::boost::signals2::trackable
 {
 public:
 
@@ -30,7 +32,7 @@ public:
      * @param[in] prefix  allow to add a prefix in the formated log message
      * @param[in] postfix  allow to add a postfix in the formated log message
      */
-    FWTOOLS_API ProgressToLogger(std::string prefix, std::string postfix= " %");
+    FWTOOLS_API ProgressToLogger(std::string prefix, std::string postfix = " %");
 
     /// default destructor, do nothing
     FWTOOLS_API virtual ~ProgressToLogger();
@@ -41,7 +43,7 @@ public:
      */
     FWTOOLS_API void operator()(float percent, std::string msg);
 
-protected :
+protected:
 
     std::string m_prefix;
     std::string m_postfix;
diff --git a/SrcLib/core/fwTools/include/fwTools/StringKeyTypeMapping.hpp b/SrcLib/core/fwTools/include/fwTools/StringKeyTypeMapping.hpp
index a971c3c..e45c9f2 100644
--- a/SrcLib/core/fwTools/include/fwTools/StringKeyTypeMapping.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/StringKeyTypeMapping.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,7 @@ namespace fwTools
  * Header declare function already specialized while src provide definition.
  *
  * @warning isMapping does not need to be exported since fwTools Library is builded as static.
- * 
+ *
  */
 
 // FIX UNSIGNED
diff --git a/SrcLib/core/fwTools/include/fwTools/Stringizer.hpp b/SrcLib/core/fwTools/include/fwTools/Stringizer.hpp
index 38f8d84..b1f9794 100644
--- a/SrcLib/core/fwTools/include/fwTools/Stringizer.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Stringizer.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -63,9 +63,9 @@ template<class T>
 inline std::string getString(const T &t)
 {
     typedef BOOST_DEDUCED_TYPENAME boost::mpl::if_c<  boost::is_arithmetic<T>::value,
-            NumericCast,
-            Default
-            >::type Choice;
+                                                      NumericCast,
+                                                      Default
+                                                      >::type Choice;
 
     return Choice::eval(t);
 }
@@ -81,7 +81,7 @@ inline std::string getString(const T &t)
 template<class T1,class T2>
 inline std::string getString(const std::pair<T1,T2> &t)
 {
-    std::string res=("[");
+    std::string res = ("[");
     res += getString(t.first) + "," + getString(t.second) + "]";
     return res;
 }
@@ -101,10 +101,10 @@ inline std::string getString(ForwardIterator begin,ForwardIterator end)
     std::string result("[");
     if (begin!=end)
     {
-        result+= getString( *begin );
+        result += getString( *begin );
         while (++begin!=end)
         {
-            result+= "," + getString( *begin );
+            result += "," + getString( *begin );
         }
     }
     result += "]";
diff --git a/SrcLib/core/fwTools/include/fwTools/System.hpp b/SrcLib/core/fwTools/include/fwTools/System.hpp
index f51349c..08cd168 100644
--- a/SrcLib/core/fwTools/include/fwTools/System.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/System.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_SYSTEM_HPP_
-#define _FWTOOLS_SYSTEM_HPP_
+#ifndef __FWTOOLS_SYSTEM_HPP__
+#define __FWTOOLS_SYSTEM_HPP__
 
 #include <string>
 
@@ -19,7 +19,7 @@ namespace fwTools
 /**
  * @class   System
  * @brief Provide a system to get a Temporary folder which allow multi-user, multi-instance separation
- * 
+ *
  * @date    2007-2009.
  * @todo  change "fwDumpFolder" to "localTemp"
  */
@@ -43,7 +43,7 @@ public:
      * @return  created folder
      */
     FWTOOLS_API static const ::boost::filesystem::path getTemporaryFolder(
-            const std::string& subFolderPrefix = "" ) throw();
+        const std::string& subFolderPrefix = "" ) throw();
 
     /**
      * @brief   Returns the pid of a temporary folder
@@ -77,7 +77,7 @@ public:
     static void setTempPrefix(const std::string &prefix)
     {
         s_tempPrefix = prefix;
-    };
+    }
 
 protected:
 
@@ -88,4 +88,4 @@ protected:
 
 } // namespace fwTools
 
-#endif // _FWTOOLS_SYSTEM_HPP_
+#endif // __FWTOOLS_SYSTEM_HPP__
diff --git a/SrcLib/core/fwTools/include/fwTools/Type.hpp b/SrcLib/core/fwTools/include/fwTools/Type.hpp
index 8344d98..6a05cae 100644
--- a/SrcLib/core/fwTools/include/fwTools/Type.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/Type.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_TYPE_HPP_
-#define _FWTOOLS_TYPE_HPP_
+#ifndef __FWTOOLS_TYPE_HPP__
+#define __FWTOOLS_TYPE_HPP__
 
 #include <limits>
 #include <map>
@@ -30,7 +30,7 @@ namespace fwTools
 /**
  * @brief   Class describing an elementary C++ type aka unsigned char, signed char, .... int, float, double
  * @class   Type
- * 
+ *
  * @date    2007-2009.
  *
  **/
@@ -41,7 +41,9 @@ public:
     struct FWTOOLS_CLASS_API ToolBase
     {
         FWTOOLS_API ToolBase();
-        FWTOOLS_API virtual ~ToolBase(){};
+        FWTOOLS_API virtual ~ToolBase()
+        {
+        }
         FWTOOLS_API ToolBase(const std::type_info &typeinfo);
         FWTOOLS_API virtual std::string toString( ::boost::any value ) const;
         FWTOOLS_API virtual std::string toString( const void * ) const;
@@ -53,7 +55,9 @@ public:
     struct  Tool : public ToolBase
     {
         Tool();
-        virtual ~Tool(){};
+        virtual ~Tool()
+        {
+        }
         virtual std::string toString( ::boost::any value ) const;
         virtual std::string toString( const void * ) const;
     };
@@ -127,7 +131,7 @@ public:
 
     FWTOOLS_API static Type create(std::string name);
 
-protected :
+protected:
 
     std::string m_name;
     unsigned char m_sizeof;
@@ -142,7 +146,7 @@ protected :
 
     FWTOOLS_API static const TypeMapType s_TYPEMAP;
 
-public :
+public:
 
     FWTOOLS_API static const Type s_UNSPECIFIED_TYPE;
 
@@ -174,18 +178,18 @@ public :
     FWTOOLS_API static const std::string s_FLOAT_TYPENAME;
     FWTOOLS_API static const std::string s_DOUBLE_TYPENAME;
 
-    typedef ::boost::int8_t   Int8Type;
-    typedef ::boost::int16_t  Int16Type;
-    typedef ::boost::int32_t  Int32Type;
-    typedef ::boost::int64_t  Int64Type;
+    typedef ::boost::int8_t Int8Type;
+    typedef ::boost::int16_t Int16Type;
+    typedef ::boost::int32_t Int32Type;
+    typedef ::boost::int64_t Int64Type;
 
-    typedef ::boost::uint8_t  UInt8Type;
+    typedef ::boost::uint8_t UInt8Type;
     typedef ::boost::uint16_t UInt16Type;
     typedef ::boost::uint32_t UInt32Type;
     typedef ::boost::uint64_t UInt64Type;
 
-    typedef float             FloatType;
-    typedef double            DoubleType;
+    typedef float FloatType;
+    typedef double DoubleType;
 
 
 };
@@ -210,7 +214,8 @@ std::string Type::Tool<T>::toString(const void *value) const
 
 template< typename T >
 Type::Tool<T>::Tool() : Type::ToolBase(typeid(T))
-{}
+{
+}
 
 
 //-----------------------------------------------------------------------------
@@ -238,8 +243,8 @@ void Type::setType()
 {
     m_name = Type::traitsToString< sizeof(T), ::boost::is_signed<T>::value, ::boost::is_integral<T>::value >();
 
-    m_sizeof = sizeof(T);
-    m_isSigned = ::boost::is_signed<T>::value;
+    m_sizeof           = sizeof(T);
+    m_isSigned         = ::boost::is_signed<T>::value;
     m_isFixedPrecision = ::boost::is_integral<T>::value;
 
     m_tool = SPTR(ToolBase)(new Type::Tool<T>());
@@ -288,8 +293,8 @@ template <int SIZEOF, bool SIGNED, bool ISINTEGRAL>
 const std::string &Type::traitsToString()
 {
     OSLM_ERROR("unknown " << (SIGNED ? "signed" : "unsigned")
-              << " " << (ISINTEGRAL ? "integral" : "floating")
-              << " type with size : " << SIZEOF);
+                          << " " << (ISINTEGRAL ? "integral" : "floating")
+                          << " type with size : " << SIZEOF);
     return Type::s_UNSPECIFIED_TYPENAME;
 }
 
@@ -299,9 +304,9 @@ template <typename T>
 const std::pair<T,T> Type::minMax() const
 {
     return std::pair<T,T>(
-            boost::any_cast< T >(m_min),
-            boost::any_cast< T >(m_max)
-            );
+        boost::any_cast< T >(m_min),
+        boost::any_cast< T >(m_max)
+        );
 }
 
 
@@ -324,9 +329,9 @@ template<> FWTOOLS_API const std::string &Type::traitsToString< 8, false, false
 
 namespace std
 {
-    FWTOOLS_API std::ostream& operator<< (std::ostream& os, const ::fwTools::Type& type);
+FWTOOLS_API std::ostream& operator<< (std::ostream& os, const ::fwTools::Type& type);
 } // namespace std
 
 
-#endif /*_FWTOOLS_TYPE_H_*/
+#endif /*__FWTOOLS_TYPE_HPP__*/
 
diff --git a/SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp b/SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp
index f3b1cdc..991842e 100644
--- a/SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/TypeInfo.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,7 @@ namespace fwTools
 /**
  * @brief   Purpose: offer a first-class, comparable wrapper over std::type_info ( but copy construcible )
  * @class   TypeInfo
- * 
+ *
  * @date    2007-2009.
  *
  * Code imported from Loki-Library and adapted for FW4SPL
diff --git a/SrcLib/core/fwTools/include/fwTools/TypeInfoKeyTypeMapping.hpp b/SrcLib/core/fwTools/include/fwTools/TypeInfoKeyTypeMapping.hpp
index 8323444..1b521fc 100644
--- a/SrcLib/core/fwTools/include/fwTools/TypeInfoKeyTypeMapping.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/TypeInfoKeyTypeMapping.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTOOLS_TYPEINFOGKEYTYPEMAPPING_HPP__
-#define __FWTOOLS_TYPEINFOGKEYTYPEMAPPING_HPP__
+#ifndef __FWTOOLS_TYPEINFOKEYTYPEMAPPING_HPP__
+#define __FWTOOLS_TYPEINFOKEYTYPEMAPPING_HPP__
 
 #include <string>
 #include <typeinfo>
@@ -74,4 +74,4 @@ bool isMapping<std::string>(const std::type_info &key);
 
 } // namespace fwTools
 
-#endif /*__FWTOOLS_TYPEINFOGKEYTYPEMAPPING_HPP__*/
+#endif /*__FWTOOLS_TYPEINFOKEYTYPEMAPPING_HPP__*/
diff --git a/SrcLib/core/fwTools/include/fwTools/TypeMapping.hpp b/SrcLib/core/fwTools/include/fwTools/TypeMapping.hpp
index 200ece3..c6917ab 100644
--- a/SrcLib/core/fwTools/include/fwTools/TypeMapping.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/TypeMapping.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -38,7 +38,7 @@ struct isMappingSingleMPLHelper;
  * @tparam TSingle_or_TSEQ a sequence or 1 element type to test
  * @tparam KeyType_or_KeyTypeContainer to keys (sequence or single one)
  * @return  true iff the value of the KeyType can deal with the specified type T
- * 
+ *
  *
  * This function should be specializated to create a Mapping with a KeyType value and a type.
  * This function is used by Dispatcher<>::invoke(key) to know what instance to execute.
@@ -60,10 +60,10 @@ bool isMapping(const KeyType_or_KeyTypeContainer &key)
 {
     namespace mpl = ::boost::mpl;
     typedef BOOST_DEDUCED_TYPENAME mpl::if_<
-                                        mpl::is_sequence< TSingle_or_TSEQ >,
-                                        isMappingMultiMPLHelper< TSingle_or_TSEQ,KeyType_or_KeyTypeContainer >,
-                                        isMappingSingleMPLHelper< TSingle_or_TSEQ,KeyType_or_KeyTypeContainer >
-                                    >::type typex;
+            mpl::is_sequence< TSingle_or_TSEQ >,
+            isMappingMultiMPLHelper< TSingle_or_TSEQ,KeyType_or_KeyTypeContainer >,
+            isMappingSingleMPLHelper< TSingle_or_TSEQ,KeyType_or_KeyTypeContainer >
+            >::type typex;
     return typex::evaluate(key);
 
 }
@@ -78,7 +78,7 @@ bool isMapping(const KeyType_or_KeyTypeContainer &key)
  * @class   isMappingSingleMPLHelper
  * @tparam  T the type to test
  * @tparam  KeyType the type to match
- * 
+ *
  * @date    2007-2009.
  */
 template< class T, class KeyType >
@@ -101,13 +101,13 @@ struct isMappingSingleMPLHelper
 
 /**
  * @brief   Test whatever a typelist is mapping a container of KeyType
- * 
+ *
  * @return  true if same size & each element of type list mappes a single element of KeyType
  */
 template< class TSEQ, class KeyTypeContainer >
 bool isMappingMulti(const KeyTypeContainer& keys)
 {
-    return  isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(keys);
+    return isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(keys);
 }
 
 
@@ -116,13 +116,14 @@ bool isMappingMulti(const KeyTypeContainer& keys)
 /**
  * @class   EmptyListMapping
  * @brief an helper to isMapping() using iterator
- * 
+ *
  * @date    2007-2009.
  */
 template<  class KeyTypeContainer >
 struct EmptyListMapping
 {
-    static bool evaluate(typename KeyTypeContainer::const_iterator & begin, typename KeyTypeContainer::const_iterator & end)
+    static bool evaluate(typename KeyTypeContainer::const_iterator & begin,
+                         typename KeyTypeContainer::const_iterator & end)
     {
         assert( begin == end ); // assertion fails iff TypeList & KeyType container does not have the same size
         return true; // an empty typelist with an emty keyType matches
@@ -136,14 +137,15 @@ struct EmptyListMapping
  * @class   isMappingMultiMPLHelper
  * @brief an helper to isMapping() using iterator : this class is called when TSEQ is a sequence. it is recursivelly called with head element
  * removed from TSEQ
- * 
+ *
  * @date    2007-2009.
  */
 template< class TSEQ, class KeyTypeContainer >
 struct
 isMappingMultiMPLHelper
 {
-    static bool evaluate(typename KeyTypeContainer::const_iterator & begin, typename KeyTypeContainer::const_iterator & end);
+    static bool evaluate(typename KeyTypeContainer::const_iterator & begin,
+                         typename KeyTypeContainer::const_iterator & end);
 
     static bool evaluate(const KeyTypeContainer& keys)
     {
@@ -158,7 +160,7 @@ isMappingMultiMPLHelper
         }
 
         typename KeyTypeContainer::const_iterator begin = keys.begin(); // needed to have cste ptr
-        typename KeyTypeContainer::const_iterator end = keys.end();
+        typename KeyTypeContainer::const_iterator end   = keys.end();
         return isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate( begin, end );
 
     }
@@ -168,28 +170,29 @@ isMappingMultiMPLHelper
 
 template< class TSEQ, class KeyTypeContainer >
 bool
-isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(typename KeyTypeContainer::const_iterator & begin, typename KeyTypeContainer::const_iterator & end)
+isMappingMultiMPLHelper<TSEQ,KeyTypeContainer>::evaluate(typename KeyTypeContainer::const_iterator & begin,
+                                                         typename KeyTypeContainer::const_iterator & end)
 {
-        namespace mpl = ::boost::mpl;
+    namespace mpl = ::boost::mpl;
 
-        typedef BOOST_DEDUCED_TYPENAME mpl::front<TSEQ>::type Head;
-        typedef BOOST_DEDUCED_TYPENAME mpl::pop_front<TSEQ>::type Tail;
+    typedef BOOST_DEDUCED_TYPENAME mpl::front<TSEQ>::type Head;
+    typedef BOOST_DEDUCED_TYPENAME mpl::pop_front<TSEQ>::type Tail;
 
-        typedef BOOST_DEDUCED_TYPENAME mpl::if_<
-                mpl::empty<Tail>,
-                EmptyListMapping < KeyTypeContainer >,
-                isMappingMultiMPLHelper <Tail,KeyTypeContainer >
-                 >::type typex;
+    typedef BOOST_DEDUCED_TYPENAME mpl::if_<
+            mpl::empty<Tail>,
+            EmptyListMapping < KeyTypeContainer >,
+            isMappingMultiMPLHelper <Tail,KeyTypeContainer >
+            >::type typex;
 
-        bool firstKeyIsOK = isMapping< Head >( *begin ); // call a isMapping with a single key
+    bool firstKeyIsOK = isMapping< Head >( *begin );     // call a isMapping with a single key
 
-        if ( firstKeyIsOK == false ) // OPTIMISATION
-        {
-            return false; // the first key doesn't match : do not try to test other
-        }
+    if ( firstKeyIsOK == false )     // OPTIMISATION
+    {
+        return false;     // the first key doesn't match : do not try to test other
+    }
 
-        bool otherKeys = typex::evaluate( ++begin , end );
-        return firstKeyIsOK && otherKeys;
+    bool otherKeys = typex::evaluate( ++begin, end );
+    return firstKeyIsOK && otherKeys;
 
 }
 
diff --git a/SrcLib/core/fwTools/include/fwTools/UUID.hpp b/SrcLib/core/fwTools/include/fwTools/UUID.hpp
index 3d71608..f0d5c6b 100644
--- a/SrcLib/core/fwTools/include/fwTools/UUID.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/UUID.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_UUID_HPP_
-#define _FWTOOLS_UUID_HPP_
+#ifndef __FWTOOLS_UUID_HPP__
+#define __FWTOOLS_UUID_HPP__
 
 #include <string>
 #include <map>
@@ -21,7 +21,7 @@ namespace fwTools
 /**
  * @brief   Management of UUID on objects.
  * @class   UUID
- * 
+ *
  * @date    2007-2009.
  *
  */
@@ -64,9 +64,14 @@ public:
      */
     FWTOOLS_API static bool set(::fwTools::Object::sptr object,  const UUID::UUIDType & uuid);
 
-protected :
+    /**
+     * @brief   Destructor : does nothing.
+     */
+    FWTOOLS_API virtual ~UUID();
+
+protected:
 
-    /// Store association \::boost::weak_ptr <--> uuid as a string
+    /// Store association std::weak_ptr <--> uuid as a string
     typedef std::map< UUIDType, ::fwTools::Object::wptr > UUIDContainer;
 
     FWTOOLS_API static UUIDContainer s_uuidMap;
@@ -76,10 +81,6 @@ protected :
      */
     FWTOOLS_API UUID();
 
-    /**
-     * @brief   Destructor : does nothing.
-     */
-    FWTOOLS_API virtual ~UUID();
 
     /// Mutex used to lock uuid object access.
     ::fwCore::mt::ReadWriteMutex m_uuidMutex;
@@ -99,4 +100,4 @@ private:
 
 }
 
-#endif /* _FWTOOLS_UUID_HPP_ */
+#endif /* __FWTOOLS_UUID_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/config.hpp b/SrcLib/core/fwTools/include/fwTools/config.hpp
deleted file mode 100644
index f5af7f4..0000000
--- a/SrcLib/core/fwTools/include/fwTools/config.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-// fwTools - copyright (C) 2005 IRCAD.
-//
-
-
-#ifndef _FWTOOLS_CONFIG_HPP_
-#define _FWTOOLS_CONFIG_HPP_
-
-
-#ifdef _WIN32
-
-    #ifdef FWTOOLS_EXPORTS
-    #define FWTOOLS_API __declspec(dllexport)
-    #define FWTOOLS_TEMPLATE_API
-    #else
-    #define FWTOOLS_API __declspec(dllimport)
-    #define FWTOOLS_TEMPLATE_API extern
-    #endif
-
-    #define FWTOOLS_CLASS_API
-
-    #pragma warning(disable: 4290)
-    #pragma warning(disable: 4800) // avoid waring on return hard coded value
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWTOOLS_EXPORTS
-        #define FWTOOLS_API __attribute__ ((visibility("default")))
-        #define FWTOOLS_CLASS_API __attribute__ ((visibility("default")))
-        #define FWTOOLS_TEMPLATE_API
-        #else
-        //#define FWTOOLS_API __attribute__ ((visibility("hidden")))
-        //#define FWTOOLS_CLASS_API __attribute__ ((visibility("hidden")))
-        #define FWTOOLS_API
-        #define FWTOOLS_CLASS_API
-        #define FWTOOLS_TEMPLATE_API extern
-        #endif
-
-#else
-
-        #define FWTOOLS_API
-        #define FWTOOLS_CLASS_API
-        #define FWTOOLS_TEMPLATE_API
-
-#endif
-
-
-#endif //_FWTOOLS_CONFIG_HPP_
diff --git a/SrcLib/core/fwTools/include/fwTools/dateAndTime.hpp b/SrcLib/core/fwTools/include/fwTools/dateAndTime.hpp
index 95e3fb7..33d3613 100644
--- a/SrcLib/core/fwTools/include/fwTools/dateAndTime.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/dateAndTime.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_DATEANDTIME_HPP_
-#define _FWTOOLS_DATEANDTIME_HPP_
+#ifndef __FWTOOLS_DATEANDTIME_HPP__
+#define __FWTOOLS_DATEANDTIME_HPP__
 
 
 #include <boost/date_time/posix_time/posix_time.hpp>
@@ -45,7 +45,8 @@ FWTOOLS_API ::boost::posix_time::time_duration strToBoostTime( const std::string
  * @param[in]   timeStr time in the string format HHMMSS (by default : "000000")
  * @return      Time in the boost format
  */
-FWTOOLS_API ::boost::posix_time::ptime strToBoostDateAndTime( const std::string &dateStr, const std::string &timeStr = "000000");
+FWTOOLS_API ::boost::posix_time::ptime strToBoostDateAndTime( const std::string &dateStr,
+                                                              const std::string &timeStr = "000000");
 
 //------------------------------------------------------------------------------
 
@@ -77,4 +78,4 @@ FWTOOLS_API std::string getCurrentTime();
 ///@}
 }
 
-#endif // _FWTOOLS_DATEANDTIME_HPP_
+#endif // __FWTOOLS_DATEANDTIME_HPP__
diff --git a/SrcLib/core/fwTools/include/fwTools/fromIsoExtendedString.hpp b/SrcLib/core/fwTools/include/fwTools/fromIsoExtendedString.hpp
index 9fcc173..ccc4248 100644
--- a/SrcLib/core/fwTools/include/fwTools/fromIsoExtendedString.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/fromIsoExtendedString.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,7 +46,7 @@ FWTOOLS_API std::string toIsoExtendedString(boost::posix_time::ptime ptime);
  * @param[in]   dateAndTime time in the boost format
  * @return      Time in the format YYYY-MM-DD (example : 2007-02-25 )
  */
-FWTOOLS_API std::string getDateInXsdFormat( const boost::posix_time::ptime & dateAndTime ) ;
+FWTOOLS_API std::string getDateInXsdFormat( const boost::posix_time::ptime & dateAndTime );
 
 ///@}
 
diff --git a/SrcLib/core/fwTools/include/fwTools/fwID.hpp b/SrcLib/core/fwTools/include/fwTools/fwID.hpp
index 8f3f197..a0acbaf 100644
--- a/SrcLib/core/fwTools/include/fwTools/fwID.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/fwID.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTOOLS_FWID_HPP_
-#define _FWTOOLS_FWID_HPP_
+#ifndef __FWTOOLS_FWID_HPP__
+#define __FWTOOLS_FWID_HPP__
 
 #include <string>
 
@@ -24,7 +24,7 @@ class Object;
 /**
  * @brief   Defines ID for fwTools::Object. It is used to associate ID with object.
  * @class   fwID
- * 
+ *
  * @date    2007-2012.
  */
 class FWTOOLS_CLASS_API fwID
@@ -36,9 +36,10 @@ public:
     typedef std::string IDType;
 
 
-    typedef enum {
-        EMPTY    = 1, ///< return an empty id if no one set
-        GENERATE    , ///< generate a new id if necessary
+    typedef enum
+    {
+        EMPTY = 1,    ///< return an empty id if no one set
+        GENERATE,     ///< generate a new id if necessary
         MUST_EXIST    ///< throw an exception if object has not id.
     } Policy;
 
@@ -56,9 +57,9 @@ public:
      */
     FWTOOLS_API static SPTR(::fwTools::Object ) getObject( IDType requestID );
 
-    FWTOOLS_API virtual ~fwID() ;
+    FWTOOLS_API virtual ~fwID();
 
-protected :
+protected:
 
     // API to expose in fwTools::Object
     /**
@@ -75,46 +76,37 @@ protected :
      * @note We consider an object be constant whatever if its id is generated.
      * @note This method is thread-safe.
      */
-    FWTOOLS_API IDType getID( Policy  policy=GENERATE ) const;
+    FWTOOLS_API IDType getID( Policy policy = GENERATE ) const;
+
+
 
-#ifdef COM_LOG
     /**
-     * @brief Returns a light version the id of the object. Used for log. This method calls getID and replaces id using
-     * pattern "::NS1::NS2::CLASSNAME-NUM" by a light version "CLASSNAME-NUM"
-     * \li EMPTY then an empty id is returned
-     * \li GENERATE (default) then a new ID will be generated (and recorded ) using the pattern "CLASSNAME-NUM". NUM is always increasing
-     * \li MUST_EXIST then an exception Failed is raised
-     * @note We consider an object be constant whatever if its id is generated.
+     * @brief Set a newID  for the object, (newID must not exist in fwID), the oldest one is released.
+     * @warning Cannot set a empty ID.
      * @note This method is thread-safe.
      */
-    FWTOOLS_API IDType getLightID( Policy  policy=GENERATE ) const;
-#endif
-
-    /**
-      * @brief Set a newID  for the object, (newID must not exist in fwID), the oldest one is released.
-      * @warning Cannot set a empty ID.
-      * @note This method is thread-safe.
-      */
     FWTOOLS_API virtual void   setID( IDType newID ); // cannot set a empty one
 
     /**
-      * @brief Release the id for the object.
-      * @note This method is thread-safe
-      */
-    FWTOOLS_API  void   resetID();
+     * @brief Release the id for the object.
+     * @note This method is thread-safe
+     */
+    FWTOOLS_API void   resetID();
 
     /**
-      * @brief   Constructor : does nothing.
-      */
-    fwID() {}; // cannot be instantiated
+     * @brief   Constructor : does nothing.
+     */
+    fwID()
+    {
+    }          // cannot be instantiated
 
 
-private :
+private:
 
     /**
-      * @brief Will generate a new ID using the pattern "CLASSNAME-NUM". NUM is always increasing.
-      * @note This method is NOT thread-safe.
-      */
+     * @brief Will generate a new ID using the pattern "CLASSNAME-NUM". NUM is always increasing.
+     * @note This method is NOT thread-safe.
+     */
     IDType generate() const;
 
     /**
@@ -124,36 +116,36 @@ private :
     static void removeIDfromDictionary(IDType _id );
 
     /**
-      * @brief return true if the  _id is found in the dictionary.
-      * @note This method is NOT thread-safe.
-      */
+     * @brief return true if the  _id is found in the dictionary.
+     * @note This method is NOT thread-safe.
+     */
     static bool isIdFound( IDType _id);
 
     /**
-      * @brief Add newID in the dictionary (newID must not exist in fwID).
-      * @note This method is NOT thread-safe
-      */
+     * @brief Add newID in the dictionary (newID must not exist in fwID).
+     * @note This method is NOT thread-safe
+     */
     void addIDInDictionary( IDType newID );
 
-   IDType m_id;
+    IDType m_id;
 
-   typedef ::boost::unordered_map< IDType, WPTR(::fwTools::Object ) > Dictionary;
-   typedef ::boost::unordered_map< std::string , ::boost::uint32_t >  CategorizedCounter;
+    typedef ::boost::unordered_map< IDType, WPTR(::fwTools::Object ) > Dictionary;
+    typedef ::boost::unordered_map< std::string, ::boost::uint32_t >  CategorizedCounter;
 
-   static  Dictionary m_dictionary;
-   static  CategorizedCounter m_CategorizedCounter;
+    static Dictionary m_dictionary;
+    static CategorizedCounter m_CategorizedCounter;
 
-   /// Mutex used to lock dictionary access
-   static ::fwCore::mt::ReadWriteMutex s_dictionaryMutex;
+    /// Mutex used to lock dictionary access
+    static ::fwCore::mt::ReadWriteMutex s_dictionaryMutex;
 
-   /// Mutex used by generate() to lock m_CategorizedCounter changes.
-   static ::fwCore::mt::Mutex s_mutexCounter;
+    /// Mutex used by generate() to lock m_CategorizedCounter changes.
+    static ::fwCore::mt::Mutex s_mutexCounter;
 
-   /// Mutex used to lock m_id access
-   mutable ::fwCore::mt::ReadWriteMutex m_idMutex;
+    /// Mutex used to lock m_id access
+    mutable ::fwCore::mt::ReadWriteMutex m_idMutex;
 };
 
 }
 
 
-#endif /* FWID_HPP_ */
+#endif /* __FWTOOLS_FWID_HPP__ */
diff --git a/SrcLib/core/fwTools/include/fwTools/macros.hpp b/SrcLib/core/fwTools/include/fwTools/macros.hpp
index d2a599d..5013ae2 100644
--- a/SrcLib/core/fwTools/include/fwTools/macros.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/macros.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,11 +8,11 @@
  * @file fwTools/macros.hpp
  * @brief TODO
  *
- * 
+ *
  */
 
-#ifndef _FWTOOLS_ATTRIBUTESMACROS_HPP_
-#define _FWTOOLS_ATTRIBUTESMACROS_HPP_
+#ifndef __FWTOOLS_MACROS_HPP__
+#define __FWTOOLS_MACROS_HPP__
 
 #include <boost/ref.hpp>
 
@@ -61,7 +61,7 @@
 //-----------------------------------
 //
 #define fwToolsSetMacro( _memberprefix, _type, _var)                                      \
-    void set##_var (const _type fwToolsPrependParamPrefixMacro(_var))                     \
+    void set ## _var (const _type fwToolsPrependParamPrefixMacro(_var))                     \
     {                                                                                     \
         this->BOOST_PP_CAT( _memberprefix, _var ) = fwToolsPrependParamPrefixMacro(_var); \
     }
@@ -69,7 +69,7 @@
 //-----------------------------------
 //
 #define fwToolsSetCRefMacro( _memberprefix, _type, _var)                                  \
-    void setCRef##_var (const _type & fwToolsPrependParamPrefixMacro(_var))               \
+    void setCRef ## _var (const _type &fwToolsPrependParamPrefixMacro(_var))               \
     {                                                                                     \
         this->BOOST_PP_CAT( _memberprefix, _var ) = fwToolsPrependParamPrefixMacro(_var); \
     }
@@ -89,7 +89,7 @@
 //-----------------------------------
 //
 #define fwToolsGetMacro( _memberprefix, _type, _var) \
-    const _type get##_var () const                   \
+    const _type get ## _var () const                   \
     {                                                \
         return BOOST_PP_CAT( _memberprefix, _var );  \
     }
@@ -97,7 +97,7 @@
 //-----------------------------------
 //
 #define fwToolsGetRefMacro( _memberprefix, _type, _var)   \
-    _type & getRef##_var ()                               \
+    _type & getRef ## _var ()                               \
     {                                                     \
         return this->BOOST_PP_CAT( _memberprefix, _var ); \
     }
@@ -105,7 +105,7 @@
 //-----------------------------------
 //
 #define fwToolsGetCRefMacro( _memberprefix, _type, _var)  \
-    const _type & getCRef##_var () const                  \
+    const _type &getCRef ## _var () const                  \
     {                                                     \
         return this->BOOST_PP_CAT( _memberprefix, _var ); \
     }
@@ -117,34 +117,34 @@
     /** @name BOOST_PP_CAT( _memberprefix, _var ) accessor */                       \
     /** Getter/Setter for _var                            */                        \
     /** @{                                                */                        \
-    fwToolsGetterMacro( _memberprefix, fwToolsAttributeTypeMacro( _type ) , _name); \
-    fwToolsSetterMacro( _memberprefix, fwToolsAttributeTypeMacro( _type ) , _name); \
+    fwToolsGetterMacro( _memberprefix, fwToolsAttributeTypeMacro( _type ), _name); \
+    fwToolsSetterMacro( _memberprefix, fwToolsAttributeTypeMacro( _type ), _name); \
     /**@}                                                 */
 
 
 #define fwToolsDeclareAttrMacro( _memberprefix, _type, _name, _desc )          \
     /** @desc _desc **/                                                        \
-     fwToolsAttributeTypeMacro( _type )  BOOST_PP_CAT( _memberprefix, _name );
+    fwToolsAttributeTypeMacro( _type )  BOOST_PP_CAT( _memberprefix, _name );
 
 
 #define fwToolsDeclareAttrTypedefMacro( _type, _name, _desc ) \
     /** @desc _desc **/                                       \
-     typedef _type BOOST_PP_CAT( _name, Type );
+    typedef _type BOOST_PP_CAT ( _name, Type );
 
 
 
 #define __FWTOOLS_ONE_ATTR_REGISTER_MACRO( _memberprefix, _type, _name, _desc )  \
     /* Register the specified attribute in the map */                            \
-      /* Insert pair into map */                                                 \
-      __FWTOOLS_ATTRIBUTE_MAP_NAME.insert(                                       \
-              std::make_pair(                                                    \
-                  BOOST_PP_STRINGIZE(_name),                                     \
-                  boost::ref( (AttrType&) BOOST_PP_CAT( _memberprefix, _name ) ) \
-                  ));
+    /* Insert pair into map */                                                 \
+    __FWTOOLS_ATTRIBUTE_MAP_NAME.insert(                                       \
+        std::make_pair(                                                    \
+            BOOST_PP_STRINGIZE(_name),                                     \
+            boost::ref( (AttrType&) BOOST_PP_CAT( _memberprefix, _name ) ) \
+            ));
 
 #define __FWTOOLS_SET_ONE_ATTR_MACRO(_type, _name, _desc )                                          \
     /* check the given object and Set the specified attribute value */                              \
-    else if( BOOST_PP_STRINGIZE(_name) == attrName && BOOST_PP_CAT(_name,Type)::dynamicCast(_obj) ) \
+    else if( BOOST_PP_STRINGIZE(_name) == attrName && BOOST_PP_CAT(_name,Type) ::dynamicCast(_obj) ) \
     {                                                                                               \
         theAttr = _obj;                                                                             \
     }
@@ -166,22 +166,22 @@
 
 
 #define fwToolsOneAttrGetterSetterMacro( r, _data_memberprefix, _tuple )                 \
-    BOOST_PP_EXPAND( fwGetterSetterMacro  __FWTOOLS_PREPEND_TO_TUPLE_MACRO(3, _tuple, _data_memberprefix))
+    BOOST_PP_EXPAND( fwGetterSetterMacro __FWTOOLS_PREPEND_TO_TUPLE_MACRO(3, _tuple, _data_memberprefix))
 
 #define fwToolsSetOneAttrMacro( r, data, _tuple ) \
     __FWTOOLS_SET_ONE_ATTR_MACRO _tuple
 
 
 #define fwToolsDeclareAttributesMacro( _memberprefix, _attributes )                   \
-        BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrDeclareMacro, _memberprefix, _attributes)
+    BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrDeclareMacro, _memberprefix, _attributes)
 
 #define fwToolsDeclareAttributesTypedefMacro( _memberprefix, _attributes )                   \
-        BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrTypedefDeclareMacro, _memberprefix, _attributes)
+    BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrTypedefDeclareMacro, _memberprefix, _attributes)
 
 
 #define fwToolsGetterSetterAttributesMacro( _memberprefix, _attributes )                   \
     /** @cond **/                                                                          \
-        BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrGetterSetterMacro, _memberprefix, _attributes) \
+    BOOST_PP_SEQ_FOR_EACH(fwToolsOneAttrGetterSetterMacro, _memberprefix, _attributes) \
     /** @endcond **/
 
 
@@ -207,7 +207,7 @@
         else                                                                               \
         {                                                                                  \
             OSLM_FATAL( "Attribute '"<<attrName<<"' of object '"<< this->getClassname()    \
-                      <<"' can not handle a object of type '"<<_obj->getClassname()<<"'"); \
+                                     <<"' can not handle a object of type '"<<_obj->getClassname()<<"'"); \
         }                                                                                  \
     }                                                                                      \
     /** @endcond **/
@@ -228,4 +228,4 @@
     fwToolsPrefixedAttributesMacro( __FWTOOLS_MEMBER_PREFIX, _attributes )
 
 
-#endif //_FWTOOLS_ATTRIBUTESMACROS_HPP_
+#endif //__FWTOOLS_MACROS_HPP__
diff --git a/SrcLib/core/fwTools/include/fwTools/pathDifference.hpp b/SrcLib/core/fwTools/include/fwTools/pathDifference.hpp
index 56c8361..956ac44 100644
--- a/SrcLib/core/fwTools/include/fwTools/pathDifference.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/pathDifference.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTOOLS_PATHDIFFERENCE_HPP___
-#define __FWTOOLS_PATHDIFFERENCE_HPP___
+#ifndef __FWTOOLS_PATHDIFFERENCE_HPP__
+#define __FWTOOLS_PATHDIFFERENCE_HPP__
 
 #include "fwTools/config.hpp"
 #include <boost/filesystem/path.hpp>
@@ -50,4 +50,4 @@ FWTOOLS_API boost::filesystem::path getPathDifference( boost::filesystem::path p
 
 }
 
-#endif /*__FWTOOLS_PATHDIFFERENCE_HPP___*/
+#endif /*__FWTOOLS_PATHDIFFERENCE_HPP__*/
diff --git a/SrcLib/core/fwTools/include/fwTools/random/Generator.hpp b/SrcLib/core/fwTools/include/fwTools/random/Generator.hpp
index d53c053..02d11b4 100644
--- a/SrcLib/core/fwTools/include/fwTools/random/Generator.hpp
+++ b/SrcLib/core/fwTools/include/fwTools/random/Generator.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,7 +7,7 @@
 #ifndef __FWTOOLS_RANDOM_GENERATOR_HPP__
 #define __FWTOOLS_RANDOM_GENERATOR_HPP__
 
-#include <ctime>
+#include <fwCore/base.hpp>
 
 #include <boost/random/variate_generator.hpp>
 #include <boost/random/mersenne_twister.hpp>
@@ -18,7 +18,8 @@
 #include <boost/type_traits/is_same.hpp>
 #include <boost/concept_check.hpp>
 
-#include <fwCore/base.hpp>
+#include <algorithm>
+#include <ctime>
 
 namespace fwTools
 {
@@ -43,7 +44,7 @@ T getValue(T min, T max, ::boost::uint32_t seedVal = std::time(NULL))
             ::boost::is_floating_point<T>,
             ::boost::uniform_real<>,
             ::boost::uniform_int<>
-    >::type DistroType;
+            >::type DistroType;
 
     ::boost::mt19937 seed(seedVal);
     DistroType dist(min, max);
@@ -69,7 +70,7 @@ void fillContainer(T min, T max, CONTAINER& randContainer, ::boost::uint32_t see
             ::boost::is_floating_point<T>,
             ::boost::uniform_real<>,
             ::boost::uniform_int<>
-    >::type DistroType;
+            >::type DistroType;
 
     ::boost::mt19937 seed(seedVal);
     DistroType dist(min, max);
diff --git a/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp b/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp
index 54b094b..f02904a 100644
--- a/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Bookmarks.cpp
@@ -1,18 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <assert.h>
-#include <boost/foreach.hpp>
-#include <boost/lexical_cast.hpp>
+#include "fwTools/Bookmarks.hpp"
+#include "fwTools/Failed.hpp"
+#include "fwTools/Object.hpp"
 
 #include <fwCore/Demangler.hpp>
 
-#include "fwTools/Object.hpp"
-#include "fwTools/Bookmarks.hpp"
-#include "fwTools/Failed.hpp"
+#include <assert.h>
+#include <boost/lexical_cast.hpp>
 
 namespace fwTools
 {
@@ -21,12 +20,14 @@ Bookmarks::Dictionary Bookmarks::m_dictionary;
 //-----------------------------------------------------------------------------
 
 Bookmarks::Bookmarks()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 Bookmarks::~Bookmarks()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -60,7 +61,7 @@ void Bookmarks::remove( Bookmarks::BookmarkName _bookmark  )
     {
         bookmark = iter->second.lock();
     }
-    return  bookmark;
+    return bookmark;
 }
 
 //-----------------------------------------------------------------------------
@@ -68,14 +69,14 @@ void Bookmarks::remove( Bookmarks::BookmarkName _bookmark  )
 std::list<Bookmarks::BookmarkName> Bookmarks::getBookmarks( ::fwTools::Object::sptr obj )
 {
     std::list<Bookmarks::BookmarkName> result;
-    BOOST_FOREACH( Bookmarks::Dictionary::value_type elt, m_dictionary)
+    for( Bookmarks::Dictionary::value_type elt :  m_dictionary)
     {
         if ( !elt.second.expired() && elt.second.lock() == obj )
         {
             result.push_back(  elt.first );
         }
     }
-    return  result;
+    return result;
 }
 
 //-----------------------------------------------------------------------------
@@ -83,11 +84,11 @@ std::list<Bookmarks::BookmarkName> Bookmarks::getBookmarks( ::fwTools::Object::s
 std::list<Bookmarks::BookmarkName> Bookmarks::getBookmarks()
 {
     std::list<Bookmarks::BookmarkName> result;
-    BOOST_FOREACH( Bookmarks::Dictionary::value_type elt, m_dictionary)
+    for( Bookmarks::Dictionary::value_type elt :  m_dictionary)
     {
         result.push_back( elt.first );
     }
-    return  result;
+    return result;
 }
 
 //-----------------------------------------------------------------------------
diff --git a/SrcLib/core/fwTools/src/fwTools/DynamicType.cpp b/SrcLib/core/fwTools/src/fwTools/DynamicType.cpp
index bf3f9d6..c120a3a 100644
--- a/SrcLib/core/fwTools/src/fwTools/DynamicType.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/DynamicType.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,23 +12,25 @@
 #include "fwTools/DynamicTypeKeyTypeMapping.hpp"
 #include "fwTools/Dispatcher.hpp"
 
-namespace fwTools {
+namespace fwTools
+{
 
 std::list< std::string > DynamicType::m_managedTypes = boost::assign::list_of
-    ("unsigned char")
-    ("signed char")
-    ("unsigned short")
-    ("signed short")
-    ("unsigned int")
-    ("signed int")
-    ("unsigned long")
-    ("signed long")
-    ("float")
-    ("double");
+                                                           ("unsigned char")
+                                                           ("signed char")
+                                                           ("unsigned short")
+                                                           ("signed short")
+                                                           ("unsigned int")
+                                                           ("signed int")
+                                                           ("unsigned long")
+                                                           ("signed long")
+                                                           ("float")
+                                                           ("double");
 
-const std::string  DynamicType::m_unSpecifiedType = std::string("UNSPECIFIED TYPE");
+const std::string DynamicType::m_unSpecifiedType = std::string("UNSPECIFIED TYPE");
 
-typedef boost::mpl::vector< signed char, unsigned char, signed short, unsigned short,  signed int, unsigned int, float, double >::type SupportedTypes;
+typedef boost::mpl::vector< signed char, unsigned char, signed short, unsigned short,  signed int, unsigned int, float,
+                            double >::type SupportedTypes;
 
 
 
@@ -60,7 +62,7 @@ DynamicType::DynamicType() : m_value( m_unSpecifiedType), m_sizeof(0)
 
 DynamicType::DynamicType(const DynamicType &d2)
 {
-    this->m_value = d2.m_value;
+    this->m_value  = d2.m_value;
     this->m_sizeof = d2.m_sizeof;
 }
 
@@ -78,7 +80,7 @@ const std::string &DynamicType::string() const
 
 
 
-unsigned char  DynamicType::sizeOf() const
+unsigned char DynamicType::sizeOf() const
 {
     SLM_ASSERT("Sizeof not specified.", m_sizeof!=0);
     return m_sizeof;
@@ -99,7 +101,7 @@ public:
     template< typename PIXEL >
     void operator()( bool &isSigned )
     {
-        isSigned =  !::boost::is_unsigned<PIXEL>::value;
+        isSigned = !::boost::is_unsigned<PIXEL>::value;
     }
 };
 
diff --git a/SrcLib/core/fwTools/src/fwTools/DynamicTypeKeyTypeMapping.cpp b/SrcLib/core/fwTools/src/fwTools/DynamicTypeKeyTypeMapping.cpp
index 9ac5877..6e30cc8 100644
--- a/SrcLib/core/fwTools/src/fwTools/DynamicTypeKeyTypeMapping.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/DynamicTypeKeyTypeMapping.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,7 +7,8 @@
 #include "fwTools/DynamicTypeKeyTypeMapping.hpp"
 
 
-namespace fwTools {
+namespace fwTools
+{
 /*
  * @brief template specialization for defining KeyType mapping ( here DynamicType) with their value
  * @auhtor Vincent Agnus
diff --git a/SrcLib/core/fwTools/src/fwTools/Exception.cpp b/SrcLib/core/fwTools/src/fwTools/Exception.cpp
index 525fcf2..dbe9b55 100644
--- a/SrcLib/core/fwTools/src/fwTools/Exception.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Exception.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,12 +10,14 @@ namespace fwTools
 {
 
 Exception::Exception(const std::string &message) throw()
-: ::fwCore::Exception(message)
-{}
+    : ::fwCore::Exception(message)
+{
+}
 
 
 Exception::~Exception() throw()
-{}
+{
+}
 
 
 
diff --git a/SrcLib/core/fwTools/src/fwTools/Failed.cpp b/SrcLib/core/fwTools/src/fwTools/Failed.cpp
index dfa8ed7..2776295 100644
--- a/SrcLib/core/fwTools/src/fwTools/Failed.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Failed.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -10,13 +10,15 @@ namespace fwTools
 {
 
 Failed::Failed(const std::string &message) throw()
-: ::fwCore::Exception(message)
-{}
+    : ::fwCore::Exception(message)
+{
+}
 
 
 Failed::~Failed() throw()
-{}
+{
+}
+
 
 
-    
 } // namespace fwTools
diff --git a/SrcLib/core/fwTools/src/fwTools/Object.cpp b/SrcLib/core/fwTools/src/fwTools/Object.cpp
index 1cb311e..6d35694 100644
--- a/SrcLib/core/fwTools/src/fwTools/Object.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Object.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,15 +26,16 @@ Object::Object() :
 //------------------------------------------------------------------------------
 
 Object::~Object()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 Object &Object::operator=(const Object &_obj)
 {
     SLM_FATAL("This operator is forbidden, use shallowCopy or deepCopy instead.");
-    m_timeStamp =_obj.m_timeStamp;
-    m_logicStamp =_obj.m_logicStamp;
+    m_timeStamp  = _obj.m_timeStamp;
+    m_logicStamp = _obj.m_logicStamp;
     return (*this);
 }
 
diff --git a/SrcLib/core/fwTools/src/fwTools/Os.cpp b/SrcLib/core/fwTools/src/fwTools/Os.cpp
index d056f3e..79b18f0 100644
--- a/SrcLib/core/fwTools/src/fwTools/Os.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Os.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,9 +11,11 @@
 #include "fwTools/Os.hpp"
 
 
-namespace fwTools {
+namespace fwTools
+{
 
-namespace os {
+namespace os
+{
 
 std::string getEnv(const std::string &name, bool *ok)
 {
@@ -30,7 +32,7 @@ std::string getEnv(const std::string &name, bool *ok)
 
 std::string getEnv(const std::string &name, const std::string &defaultValue)
 {
-    bool ok = false;
+    bool ok           = false;
     std::string value = getEnv(name, &ok);
     return ok ? value : defaultValue;
 }
@@ -44,8 +46,8 @@ std::string getUserDataDir( std::string company, std::string appName, bool creat
     char *appData = std::getenv("APPDATA");
     dataDir = ::fwTools::os::getEnv("APPDATA");
 #else
-    bool hasXdgConfigHome = false;
-    bool hasHome = false;
+    bool hasXdgConfigHome     = false;
+    bool hasHome              = false;
     std::string xdgConfigHome = ::fwTools::os::getEnv("XDG_CONFIG_HOME", &hasXdgConfigHome);
     std::string home          = ::fwTools::os::getEnv("HOME", &hasHome);
     dataDir = hasXdgConfigHome ? xdgConfigHome : (hasHome ? std::string(home) + "/.config" : "");
@@ -66,7 +68,7 @@ std::string getUserDataDir( std::string company, std::string appName, bool creat
     {
         if (boost::filesystem::exists(dataDir))
         {
-            if ( ! boost::filesystem::is_directory(dataDir) )
+            if ( !boost::filesystem::is_directory(dataDir) )
             {
                 OSLM_ERROR( dataDir << " already exists and is not a directory." );
                 dataDir = "";
diff --git a/SrcLib/core/fwTools/src/fwTools/ProgressAdviser.cpp b/SrcLib/core/fwTools/src/fwTools/ProgressAdviser.cpp
index b7dbf0a..18411c3 100644
--- a/SrcLib/core/fwTools/src/fwTools/ProgressAdviser.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/ProgressAdviser.cpp
@@ -1,18 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwTools/ProgressAdviser.hpp"
 
-namespace fwTools {
+namespace fwTools
+{
 
 ProgressAdviser::ProgressAdviser()
-{}
+{
+}
 
 ProgressAdviser::~ProgressAdviser()
-{}
+{
+}
 
 void ProgressAdviser::addHandler(const ProgessHandler &handler)
 {
@@ -20,9 +23,9 @@ void ProgressAdviser::addHandler(const ProgessHandler &handler)
     m_progressSignal.connect(handler);
 }
 
-void ProgressAdviser::notifyProgress(float percent, std::string msg)
+void ProgressAdviser::notifyProgress(float percent, const std::string& msg) const
 {
-    m_progressSignal(percent,msg);
+    m_progressSignal(percent, msg);
 }
 
 }
diff --git a/SrcLib/core/fwTools/src/fwTools/ProgressToLogger.cpp b/SrcLib/core/fwTools/src/fwTools/ProgressToLogger.cpp
index e5b8781..2837a49 100644
--- a/SrcLib/core/fwTools/src/fwTools/ProgressToLogger.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/ProgressToLogger.cpp
@@ -1,21 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwCore/base.hpp>
 #include "fwTools/ProgressToLogger.hpp"
 
-namespace fwTools {
+#include <fwCore/base.hpp>
 
-ProgressToLogger::ProgressToLogger(std::string prefix, std::string postfix)
-: m_prefix(prefix),
-  m_postfix(postfix)
+namespace fwTools
+{
+
+ProgressToLogger::ProgressToLogger(std::string prefix, std::string postfix) : m_prefix(prefix),
+                                                                              m_postfix(postfix)
 {
 }
 
-ProgressToLogger::~ProgressToLogger() {
+ProgressToLogger::~ProgressToLogger()
+{
     // TODO Auto-generated destructor stub
 }
 
diff --git a/SrcLib/core/fwTools/src/fwTools/StringKeyTypeMapping.cpp b/SrcLib/core/fwTools/src/fwTools/StringKeyTypeMapping.cpp
index ab3102c..e2a07f9 100644
--- a/SrcLib/core/fwTools/src/fwTools/StringKeyTypeMapping.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/StringKeyTypeMapping.cpp
@@ -1,12 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include "fwTools/StringKeyTypeMapping.hpp"
 
-namespace fwTools {
+namespace fwTools
+{
 
 /*
  * @brief template specialization for defining KeyType mapping ( here std::string) with their value
diff --git a/SrcLib/core/fwTools/src/fwTools/Stringizer.cpp b/SrcLib/core/fwTools/src/fwTools/Stringizer.cpp
index b34006f..a1e03de 100644
--- a/SrcLib/core/fwTools/src/fwTools/Stringizer.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Stringizer.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -64,7 +64,7 @@ std::string getString(const signed char &c)
 //------------------------------------------------------------------------------
 
 template<>
-std::string getString(const  char &c)
+std::string getString(const char &c)
 {
     return boost::lexical_cast<std::string>((short)c);
 }
diff --git a/SrcLib/core/fwTools/src/fwTools/System.cpp b/SrcLib/core/fwTools/src/fwTools/System.cpp
index 3e4d6c8..96cc3b6 100644
--- a/SrcLib/core/fwTools/src/fwTools/System.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/System.cpp
@@ -1,15 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+
+#include "fwTools/System.hpp"
+
+#include <fwCore/base.hpp>
+#ifdef ANDROID
+#include <fwRuntime/Runtime.hpp>
+#endif
+
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/fstream.hpp>
-#include <boost/make_shared.hpp>
 #include <boost/regex.hpp>
-#include <boost/foreach.hpp>
-
 #include <boost/lexical_cast.hpp>
 
 // for PID
@@ -23,9 +28,7 @@
 #include <signal.h>
 #endif
 
-#include <fwCore/base.hpp>
 
-#include "fwTools/System.hpp"
 
 
 #define F4S_TMP_EXT "fw4spl-tmp"
@@ -37,10 +40,11 @@ std::string System::s_tempPrefix;
 
 struct RemoveTemporaryFolder
 {
-    typedef ::boost::shared_ptr< RemoveTemporaryFolder > sptr;
+    typedef std::shared_ptr< RemoveTemporaryFolder > sptr;
 
     RemoveTemporaryFolder(const ::boost::filesystem::path &path) : m_path(path)
-    {}
+    {
+    }
 
     ~RemoveTemporaryFolder()
     {
@@ -67,7 +71,7 @@ static struct CleanZombies
 
 int System::getPID() throw()
 {
-    int pid=0;
+    int pid = 0;
 #ifdef WIN32
     pid = _getpid();
 #else
@@ -88,6 +92,14 @@ const ::boost::filesystem::path &System::getTempPath() throw()
     {
         return sysTmp;
     }
+#ifdef ANDROID
+    sysTmp = ::fwRuntime::Runtime::getDefault()->getWorkingPath()/"tmp";
+    if(!fs::exists(sysTmp))
+    {
+        bool res = fs::create_directories(sysTmp);
+        SLM_ASSERT(" Failed to create '"+sysTmp.string()+"' path", res);
+    }
+#else
 
     ::boost::system::error_code err;
     sysTmp = fs::temp_directory_path(err);
@@ -100,10 +112,9 @@ const ::boost::filesystem::path &System::getTempPath() throw()
         fs::path fallback("/tmp");
 #endif
         OSLM_ERROR("Temporary Path Error : " << err.message() << ". " << "Falling back to " << fallback );
-
         sysTmp = fallback;
     }
-
+#endif
     return sysTmp;
 }
 
@@ -119,7 +130,7 @@ const ::boost::filesystem::path createUniqueFolder(const ::boost::filesystem::pa
     {
         tmpDir = fs::unique_path(folderUniquePath);
 
-        if(! fs::exists(tmpDir))
+        if(!fs::exists(tmpDir))
         {
             fs::create_directories(tmpDir);
 
@@ -144,7 +155,7 @@ const ::boost::filesystem::path System::getTemporaryFolder(const std::string& su
         if(!subFolderPrefix.empty())
         {
             const std::string subDirName = subFolderPrefix + "-" + "%%%%%%%%%%%%";
-            fs::path tmpSubDir = createUniqueFolder(tmpDirPath/subDirName);
+            fs::path tmpSubDir           = createUniqueFolder(tmpDirPath/subDirName);
             return tmpSubDir;
         }
 
@@ -154,13 +165,13 @@ const ::boost::filesystem::path System::getTemporaryFolder(const std::string& su
     const fs::path &sysTmp = getTempPath();
 
     const std::string tmpDirName = s_tempPrefix + (s_tempPrefix.empty() ? "" : "-") + "%%%%%%%%%%%%." F4S_TMP_EXT;
-    fs::path tmpDir = createUniqueFolder(sysTmp/tmpDirName);
+    fs::path tmpDir              = createUniqueFolder(sysTmp/tmpDirName);
     tmpDirPath = tmpDir;    // tmpDirPath always set to root tmp dir
 
     fs::path pidFile = tmpDir / (::boost::lexical_cast<std::string>(getPID()) + ".pid");
     fs::fstream( pidFile, std::ios::out ).close();
 
-    autoRemoveTempFolder = ::boost::make_shared<RemoveTemporaryFolder>(tmpDirPath);
+    autoRemoveTempFolder = std::make_shared<RemoveTemporaryFolder>(tmpDirPath);
 
     if(!subFolderPrefix.empty())
     {
@@ -188,7 +199,7 @@ bool System::isProcessRunning(int pid) throw()
         return true;
     }
 #else
-    return kill(pid,0) == 0 ;
+    return kill(pid,0) == 0;
 #endif
 
     return true;
@@ -207,7 +218,7 @@ int System::tempFolderPID(const ::boost::filesystem::path &dir) throw()
 
     int pid = 0;
 
-    for( ; i != endIter; ++i )
+    for(; i != endIter; ++i )
     {
         // Skip if not a dir
         if( !fs::is_regular_file( i->status() ) )
@@ -230,7 +241,8 @@ int System::tempFolderPID(const ::boost::filesystem::path &dir) throw()
             break;
         }
         catch (boost::bad_lexical_cast&)
-        {}
+        {
+        }
 
     }
     return pid;
@@ -249,7 +261,7 @@ void System::cleanZombies(const ::boost::filesystem::path &dir) throw()
     fs::directory_iterator i( dir );
     fs::directory_iterator endIter;
 
-    for( ; i != endIter; ++i )
+    for(; i != endIter; ++i )
     {
         // Skip if not a dir
         if( !fs::is_directory( i->status() ) )
@@ -269,7 +281,7 @@ void System::cleanZombies(const ::boost::filesystem::path &dir) throw()
     }
 
 
-    BOOST_FOREACH( const fs::path &foundTmpDir, allTempFolders)
+    for( const fs::path &foundTmpDir :  allTempFolders)
     {
         int pid = tempFolderPID(foundTmpDir);
 
diff --git a/SrcLib/core/fwTools/src/fwTools/Type.cpp b/SrcLib/core/fwTools/src/fwTools/Type.cpp
index 1bbfc75..18a1b29 100644
--- a/SrcLib/core/fwTools/src/fwTools/Type.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/Type.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,11 +11,11 @@
 
 namespace std
 {
-    std::ostream& operator<< (std::ostream& os, const ::fwTools::Type& type)
-    {
-        os << type.string();
-        return os;
-    }
+std::ostream& operator<< (std::ostream& os, const ::fwTools::Type& type)
+{
+    os << type.string();
+    return os;
+}
 }
 
 namespace fwTools
@@ -39,19 +39,19 @@ const std::string Type::s_DOUBLE_TYPENAME("double");
 
 
 const Type::TypeMapType Type::s_TYPEMAP = ::boost::assign::map_list_of
-    (Type::s_INT8_TYPENAME  , Type::create< ::fwTools::Type::Int8Type >())
-    (Type::s_INT16_TYPENAME , Type::create< ::fwTools::Type::Int16Type >())
-    (Type::s_INT32_TYPENAME , Type::create< ::fwTools::Type::Int32Type >())
-    (Type::s_INT64_TYPENAME , Type::create< ::fwTools::Type::Int64Type >())
+                                              (Type::s_INT8_TYPENAME, Type::create< ::fwTools::Type::Int8Type >())
+                                              (Type::s_INT16_TYPENAME, Type::create< ::fwTools::Type::Int16Type >())
+                                              (Type::s_INT32_TYPENAME, Type::create< ::fwTools::Type::Int32Type >())
+                                              (Type::s_INT64_TYPENAME, Type::create< ::fwTools::Type::Int64Type >())
 
-    (Type::s_UINT8_TYPENAME , Type::create< ::fwTools::Type::UInt8Type >())
-    (Type::s_UINT16_TYPENAME, Type::create< ::fwTools::Type::UInt16Type >())
-    (Type::s_UINT32_TYPENAME, Type::create< ::fwTools::Type::UInt32Type >())
-    (Type::s_UINT64_TYPENAME, Type::create< ::fwTools::Type::UInt64Type >())
+                                              (Type::s_UINT8_TYPENAME, Type::create< ::fwTools::Type::UInt8Type >())
+                                              (Type::s_UINT16_TYPENAME, Type::create< ::fwTools::Type::UInt16Type >())
+                                              (Type::s_UINT32_TYPENAME, Type::create< ::fwTools::Type::UInt32Type >())
+                                              (Type::s_UINT64_TYPENAME, Type::create< ::fwTools::Type::UInt64Type >())
 
-    (Type::s_FLOAT_TYPENAME , Type::create< ::fwTools::Type::FloatType >())
-    (Type::s_DOUBLE_TYPENAME, Type::create< ::fwTools::Type::DoubleType >())
-    ;
+                                              (Type::s_FLOAT_TYPENAME, Type::create< ::fwTools::Type::FloatType >())
+                                              (Type::s_DOUBLE_TYPENAME, Type::create< ::fwTools::Type::DoubleType >())
+;
 
 
 
@@ -72,18 +72,48 @@ const Type Type::s_DOUBLE = ::fwTools::Type::create< ::fwTools::Type::DoubleType
 
 
 
-template<> const std::string &Type::traitsToString< 1, true, true > () {return Type::s_INT8_TYPENAME;  }
-template<> const std::string &Type::traitsToString< 2, true, true > () {return Type::s_INT16_TYPENAME; }
-template<> const std::string &Type::traitsToString< 4, true, true > () {return Type::s_INT32_TYPENAME; }
-template<> const std::string &Type::traitsToString< 8, true, true > () {return Type::s_INT64_TYPENAME; }
+template<> const std::string &Type::traitsToString< 1, true, true > ()
+{
+    return Type::s_INT8_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 2, true, true > ()
+{
+    return Type::s_INT16_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 4, true, true > ()
+{
+    return Type::s_INT32_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 8, true, true > ()
+{
+    return Type::s_INT64_TYPENAME;
+}
 
-template<> const std::string &Type::traitsToString< 1, false, true > () {return Type::s_UINT8_TYPENAME;  }
-template<> const std::string &Type::traitsToString< 2, false, true > () {return Type::s_UINT16_TYPENAME; }
-template<> const std::string &Type::traitsToString< 4, false, true > () {return Type::s_UINT32_TYPENAME; }
-template<> const std::string &Type::traitsToString< 8, false, true > () {return Type::s_UINT64_TYPENAME; }
+template<> const std::string &Type::traitsToString< 1, false, true > ()
+{
+    return Type::s_UINT8_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 2, false, true > ()
+{
+    return Type::s_UINT16_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 4, false, true > ()
+{
+    return Type::s_UINT32_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 8, false, true > ()
+{
+    return Type::s_UINT64_TYPENAME;
+}
 
-template<> const std::string &Type::traitsToString< 4, false, false > () {return Type::s_FLOAT_TYPENAME;  }
-template<> const std::string &Type::traitsToString< 8, false, false > () {return Type::s_DOUBLE_TYPENAME; }
+template<> const std::string &Type::traitsToString< 4, false, false > ()
+{
+    return Type::s_FLOAT_TYPENAME;
+}
+template<> const std::string &Type::traitsToString< 8, false, false > ()
+{
+    return Type::s_DOUBLE_TYPENAME;
+}
 
 //------------------------------------------------------------------------------
 
@@ -177,12 +207,14 @@ std::string Type::toString(const void * value) const
 //-----------------------------------------------------------------------------
 
 Type::ToolBase::ToolBase() : m_typeinfo(typeid(void))
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 Type::ToolBase::ToolBase(const std::type_info &typeinfo) : m_typeinfo(typeinfo)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -212,7 +244,7 @@ void Type::setType<char>()
 
 //-----------------------------------------------------------------------------
 
-#ifdef linux
+#if (defined(linux) || defined(__linux)) && !defined(ANDROID)
 
 template <>
 void Type::setType<boost::int64_t>()
@@ -235,9 +267,9 @@ void Type::setType<boost::uint64_t>()
 template <>
 void Type::setType<void>()
 {
-    m_name = s_UNSPECIFIED_TYPENAME;
-    m_sizeof = 0;
-    m_isSigned = false;
+    m_name             = s_UNSPECIFIED_TYPENAME;
+    m_sizeof           = 0;
+    m_isSigned         = false;
     m_isFixedPrecision = false;
 
     m_tool = SPTR(ToolBase)(new Type::ToolBase());
diff --git a/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp b/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp
index 1ea2137..81c72e4 100644
--- a/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/TypeInfo.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -17,13 +17,15 @@ namespace fwTools
 
 TypeInfo::TypeInfo()
 {
-    class Nil {};
+    class Nil
+    {
+    };
     pInfo_ = &typeid(Nil);
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
 }
 
 TypeInfo::TypeInfo(const std::type_info& ti)
-: pInfo_(&ti)
+    : pInfo_(&ti)
 {
     SLM_ASSERT("pInfo_ not instanced", pInfo_);
 }
@@ -63,7 +65,7 @@ bool operator==(const TypeInfo& lhs, const TypeInfo& rhs)
 // typeinfo can have different ptr on the same strucure !!!!
 //http://gcc.gnu.org/ml/gcc/2002-05/msg02085.html
 {
-    return strcmp(lhs.type_info().name() , rhs.type_info().name() )== 0;
+    return strcmp(lhs.type_info().name(), rhs.type_info().name() )== 0;
 }
 
 
@@ -75,24 +77,24 @@ bool operator!=(const TypeInfo& lhs, const TypeInfo& rhs)
 
 bool operator<(const TypeInfo& lhs, const TypeInfo& rhs)
 {
-    return strcmp(lhs.type_info().name() , rhs.type_info().name() )<  0;
+    return strcmp(lhs.type_info().name(), rhs.type_info().name() )<  0;
 }
 
 
 
 bool operator>(const TypeInfo& lhs, const TypeInfo& rhs)
 {
-    return strcmp(lhs.type_info().name() , rhs.type_info().name() )>  0;
+    return strcmp(lhs.type_info().name(), rhs.type_info().name() )>  0;
 }
 
 bool operator<=(const TypeInfo& lhs, const TypeInfo& rhs)
 {
-    return strcmp(lhs.type_info().name() , rhs.type_info().name() )<= 0;
+    return strcmp(lhs.type_info().name(), rhs.type_info().name() )<= 0;
 }
 
 bool operator>=(const TypeInfo& lhs, const TypeInfo& rhs)
 {
-    return strcmp(lhs.type_info().name() , rhs.type_info().name() )>= 0;
+    return strcmp(lhs.type_info().name(), rhs.type_info().name() )>= 0;
 }
 
 
diff --git a/SrcLib/core/fwTools/src/fwTools/TypeInfoKeyTypeMapping.cpp b/SrcLib/core/fwTools/src/fwTools/TypeInfoKeyTypeMapping.cpp
index 36ff0e4..4661e5e 100644
--- a/SrcLib/core/fwTools/src/fwTools/TypeInfoKeyTypeMapping.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/TypeInfoKeyTypeMapping.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,7 +8,8 @@
 #include <typeinfo>
 
 
-namespace fwTools {
+namespace fwTools
+{
 
 /**
  * @brief template specialization for defining KeyType mapping ( here std::type_info) with their value
diff --git a/SrcLib/core/fwTools/src/fwTools/UUID.cpp b/SrcLib/core/fwTools/src/fwTools/UUID.cpp
index 7f6531f..a47628b 100644
--- a/SrcLib/core/fwTools/src/fwTools/UUID.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/UUID.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,8 @@ UUID::UUIDContainer UUID::s_uuidMap;
 //-----------------------------------------------------------------------------
 
 UUID::UUID() : m_uuid("")
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwTools/src/fwTools/dateAndTime.cpp b/SrcLib/core/fwTools/src/fwTools/dateAndTime.cpp
index f13bdd2..654cd2f 100644
--- a/SrcLib/core/fwTools/src/fwTools/dateAndTime.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/dateAndTime.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,7 +21,9 @@ namespace fwTools
     ::boost::gregorian::date resDate( ::boost::gregorian::from_undelimited_string( "19000101" ) );
     if ( dateStr.size() < 8 )
     {
-        OSLM_WARN("The string length is too short (<8) : " << dateStr << ". The string is initialized with \"19000101\".");
+        OSLM_WARN(
+            "The string length is too short (<8) : " << dateStr <<
+            ". The string is initialized with \"19000101\".");
     }
     else if ( dateStr.size() > 8 )
     {
@@ -38,7 +40,9 @@ namespace fwTools
         }
         else
         {
-            OSLM_WARN("The string not contains 8 numbers : " << dateStr << ". The string is initialized with \"19000101\".");
+            OSLM_WARN(
+                "The string not contains 8 numbers : " << dateStr <<
+                ". The string is initialized with \"19000101\".");
         }
     }
     return resDate;
@@ -56,27 +60,29 @@ namespace fwTools
     time_duration td;
     if ( timeStr.size() < 6 )
     {
-        OSLM_WARN("The string length is too short (<6) : " << timeStr << ".  The string is initialized with \"000000\".");
+        OSLM_WARN("The string length is too short (<6) : " << timeStr <<
+                  ".  The string is initialized with \"000000\".");
         td = hours(0) + minutes(0) + seconds(0);
     }
     else if ( timeStr.size() > 6 )
     {
         OSLM_WARN("The string length is too short (>6) : " << timeStr << ". This string is trunked.");
-        td =  strToBoostTime( timeStr.substr(0,6) );
+        td = strToBoostTime( timeStr.substr(0,6) );
     }
     else
     {
         ::boost::regex isNumber ("[0-9]+");
         if( ::boost::regex_match(timeStr, isNumber) )
         {
-            ::boost::uint16_t  h = ::boost::lexical_cast< ::boost::uint16_t > ( timeStr.substr(0,2) );
-            ::boost::uint16_t  m = ::boost::lexical_cast< ::boost::uint16_t > ( timeStr.substr(2,2) );
-            ::boost::uint16_t  s = ::boost::lexical_cast< ::boost::uint16_t > ( timeStr.substr(4,2) );
-            td = hours(h) + minutes(m) + seconds(s);
+            ::boost::uint16_t h = ::boost::lexical_cast< ::boost::uint16_t > ( timeStr.substr(0,2) );
+            ::boost::uint16_t m = ::boost::lexical_cast< ::boost::uint16_t > ( timeStr.substr(2,2) );
+            ::boost::uint16_t s = ::boost::lexical_cast< ::boost::uint16_t > ( timeStr.substr(4,2) );
+            td                  = hours(h) + minutes(m) + seconds(s);
         }
         else
         {
-            OSLM_WARN("The string not contains 6 numbers : " << timeStr <<". The string is initialized with \"000000\".");
+            OSLM_WARN("The string not contains 6 numbers : " << timeStr <<
+                      ". The string is initialized with \"000000\".");
             td = hours(0) + minutes(0) + seconds(0);
         }
     }
diff --git a/SrcLib/core/fwTools/src/fwTools/fromIsoExtendedString.cpp b/SrcLib/core/fwTools/src/fwTools/fromIsoExtendedString.cpp
index 8f74545..eea3a79 100644
--- a/SrcLib/core/fwTools/src/fwTools/fromIsoExtendedString.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/fromIsoExtendedString.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -27,8 +27,10 @@ std::string getDateInXsdFormat( const boost::posix_time::ptime & dateAndTime )
     std::string tmp(time_string);
     std::string::size_type i = 0;
     while ((i = tmp.find('T', i)) != (std::string::size_type)(-1))
-    tmp.replace(i++, 1, " ");
-    ::boost::posix_time::ptime  t = boost::posix_time::time_from_string(tmp);
+    {
+        tmp.replace(i++, 1, " ");
+    }
+    ::boost::posix_time::ptime t = boost::posix_time::time_from_string(tmp);
     return t;
 }
 
@@ -39,7 +41,7 @@ std::string getDateInXsdFormat( const boost::posix_time::ptime & dateAndTime )
     std::stringstream ss;
     ss << date_string << " 00:00:00";
 
-    ::boost::posix_time::ptime  t = boost::posix_time::time_from_string(ss.str());
+    ::boost::posix_time::ptime t = boost::posix_time::time_from_string(ss.str());
     return t;
 }
 
@@ -47,7 +49,7 @@ std::string getDateInXsdFormat( const boost::posix_time::ptime & dateAndTime )
 
 std::string toIsoExtendedString(boost::posix_time::ptime ptime)
 {
-    return boost::posix_time::to_iso_extended_string(ptime) ;
+    return boost::posix_time::to_iso_extended_string(ptime);
 }
 
 //------------------------------------------------------------------------------
@@ -60,14 +62,14 @@ std::string toStringWithoutAccent( const std::string & str )
     std::string withoutAccent   ("aaaaaaaaaaaaooooooooooooeeeeeeeecciiiiiiiiuuuuuuuuynn");
 
 
-    std::string::iterator charWithAccent = withAccent.begin();
+    std::string::iterator charWithAccent    = withAccent.begin();
     std::string::iterator charWithoutAccent = withoutAccent.begin();
 
     while ( charWithAccent != withAccent.end() )
     {
         for (   std::string::iterator pCharacter = newStr.begin();
-        pCharacter != newStr.end();
-        ++pCharacter )
+                pCharacter != newStr.end();
+                ++pCharacter )
         {
             if( *pCharacter == *charWithAccent )
             {
diff --git a/SrcLib/core/fwTools/src/fwTools/fwID.cpp b/SrcLib/core/fwTools/src/fwTools/fwID.cpp
index 28e294f..0e6fbd3 100644
--- a/SrcLib/core/fwTools/src/fwTools/fwID.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/fwID.cpp
@@ -1,14 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <assert.h>
 #include <boost/lexical_cast.hpp>
-#ifdef COM_LOG
-# include <boost/regex.hpp>
-#endif
 
 #include <fwCore/Demangler.hpp>
 
@@ -73,7 +70,7 @@ void fwID::addIDInDictionary( IDType newID )
     // note we use a static cast for a down cast because we do not use the classical polyvi morphic approach
     //m_dictionary[ newID ] = (static_cast< Object *>(this))->getSptr();
     m_dictionary[ newID ] = ((Object*)(this))->getSptr();
-    m_id = newID;
+    m_id                  = newID;
 }
 
 //-----------------------------------------------------------------------------
@@ -90,7 +87,8 @@ fwID::IDType fwID::getID( Policy policy) const
             const_cast<fwID *>(this)->addIDInDictionary(newID);
         }
         else if  ( policy == EMPTY )
-        { /* nothing to do*/ }
+        { /* nothing to do*/
+        }
         else if ( policy == MUST_EXIST )
         {
             throw fwTools::Failed( "fwID::getID() no id set" );
@@ -101,25 +99,6 @@ fwID::IDType fwID::getID( Policy policy) const
 
 //-----------------------------------------------------------------------------
 
-#ifdef COM_LOG
-fwID::IDType fwID::getLightID( Policy  policy ) const
-{
-    IDType id = this->getID( policy );
-    IDType lightID = id;
-
-    ::boost::regex namespaceRegex ("[:A-Za-z0-9]*::(.*)");
-    const std::string machine_format("\\1");
-    if ( ::boost::regex_match( id, namespaceRegex ) )
-    {
-        lightID = ::boost::regex_replace( id, namespaceRegex, machine_format, boost::match_default | boost::format_sed );
-    }
-
-    return lightID;
-}
-#endif
-
-//-----------------------------------------------------------------------------
-
 fwID::IDType fwID::generate() const
 {
     IDType newID;
@@ -141,7 +120,7 @@ fwID::IDType fwID::generate() const
     Dictionary::iterator it = m_dictionary.find(requestID);
     if ( it!=m_dictionary.end() )
     {
-        SLM_ASSERT(  "expired object in fwID::Dictionary for id=" + requestID ,  !it->second.expired() );
+        SLM_ASSERT(  "expired object in fwID::Dictionary for id=" + requestID,  !it->second.expired() );
         return it->second.lock();
     }
     else
diff --git a/SrcLib/core/fwTools/src/fwTools/pathDifference.cpp b/SrcLib/core/fwTools/src/fwTools/pathDifference.cpp
index 4df8edd..373bb83 100644
--- a/SrcLib/core/fwTools/src/fwTools/pathDifference.cpp
+++ b/SrcLib/core/fwTools/src/fwTools/pathDifference.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,12 +15,12 @@ boost::filesystem::path getPathDifference( boost::filesystem::path path1, boost:
 {
     using boost::filesystem::path;
     path pathDiff;
-    
+
     // search iterator on path for the first element difference
     std::pair<path::iterator, path::iterator> fstChange;
-    fstChange = std::mismatch(path1.begin(), path1.end(), path2.begin()) ;
+    fstChange = std::mismatch(path1.begin(), path1.end(), path2.begin());
 
-    path::iterator i1 = fstChange.first ;
+    path::iterator i1 = fstChange.first;
     path::iterator i2 = fstChange.second;
 
     // move updir from path1 position : climb to first difference in folder hierarchy
@@ -29,14 +29,14 @@ boost::filesystem::path getPathDifference( boost::filesystem::path path1, boost:
         pathDiff /= "..";
         ++i1;
     }
-    
+
     // mode down_dir to path2
     while (i2 != path2.end() )
     {
         pathDiff /= *i2;
         ++i2;
     }
-    
+
     return pathDiff;
 }
 
diff --git a/SrcLib/core/fwTools/test/CMakeLists.txt b/SrcLib/core/fwTools/test/CMakeLists.txt
index cacbb5c..fe323eb 100644
--- a/SrcLib/core/fwTools/test/CMakeLists.txt
+++ b/SrcLib/core/fwTools/test/CMakeLists.txt
@@ -1,9 +1,16 @@
-
 fwLoadProperties()
 
-find_package (Boost COMPONENTS thread REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+find_package(Boost COMPONENTS chrono REQUIRED)
+    
+fwInclude(
+    ${CPPUNIT_INCLUDE_DIR}
+)
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+)
+
+
 
 
diff --git a/SrcLib/core/fwTools/test/cppunit.options b/SrcLib/core/fwTools/test/cppunit.options
deleted file mode 100644
index 1a66f70..0000000
--- a/SrcLib/core/fwTools/test/cppunit.options
+++ /dev/null
@@ -1,17 +0,0 @@
-
-CLASSTEST=[
-    'ClassFactoryRegistryTest',
-    'DynamicTypeTest'         ,
-    'MacrosTest'              ,
-    'ObjectTest'              ,
-    'RandomTest'              ,
-    'TypeTest'                ,
-    'StringizerTest'          ,
-    'UUIDTest'                ,
-    'NumericRoundCastTest'    ,
-    'FwIDTest'                ,
-    ]
-
-USE = ['boost', 'boostThread']
-LIB = ['fwTools_0-1', 'fwCore_0-1','fwTest_0-1']
-CONSOLE='yes'
diff --git a/SrcLib/core/fwTools/test/tu/include/DynamicTypeTest.hpp b/SrcLib/core/fwTools/test/tu/include/DynamicTypeTest.hpp
index f758e57..10f0b45 100644
--- a/SrcLib/core/fwTools/test/tu/include/DynamicTypeTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/DynamicTypeTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class DynamicTypeTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( DynamicTypeTest );
-    CPPUNIT_TEST( typeTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( DynamicTypeTest );
+CPPUNIT_TEST( typeTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/FwIDTest.hpp b/SrcLib/core/fwTools/test/tu/include/FwIDTest.hpp
index 0931ab4..376a878 100644
--- a/SrcLib/core/fwTools/test/tu/include/FwIDTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/FwIDTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,6 +7,8 @@
 #ifndef __FWTOOLS_UT_FWIDTEST_HPP__
 #define __FWTOOLS_UT_FWIDTEST_HPP__
 
+#include <fwTools/Object.hpp>
+
 #include <cppunit/extensions/HelperMacros.h>
 
 namespace fwTools
@@ -16,11 +18,11 @@ namespace ut
 
 class FwIDTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( FwIDTest );
-    CPPUNIT_TEST( objectFwIDTest );
-    CPPUNIT_TEST( conccurentAccessOnFwIDMapTest );
-    CPPUNIT_TEST( conccurentAccessOnSameObjFwIDTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( FwIDTest );
+CPPUNIT_TEST( objectFwIDTest );
+CPPUNIT_TEST( conccurentAccessOnFwIDMapTest );
+CPPUNIT_TEST( conccurentAccessOnSameObjFwIDTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/MacrosTest.hpp b/SrcLib/core/fwTools/test/tu/include/MacrosTest.hpp
index 28a984b..729dea4 100644
--- a/SrcLib/core/fwTools/test/tu/include/MacrosTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/MacrosTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class MacrosTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( MacrosTest );
-    CPPUNIT_TEST( factoryMacroTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( MacrosTest );
+CPPUNIT_TEST( factoryMacroTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/NumericRoundCastTest.hpp b/SrcLib/core/fwTools/test/tu/include/NumericRoundCastTest.hpp
index 3ebb3d6..0a8c75a 100644
--- a/SrcLib/core/fwTools/test/tu/include/NumericRoundCastTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/NumericRoundCastTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,13 +16,13 @@ namespace ut
 
 class NumericRoundCastTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( NumericRoundCastTest );
-    CPPUNIT_TEST( castFloatToIntTest );
-    CPPUNIT_TEST( castDoubleToIntTest );
-    CPPUNIT_TEST( castIntToFloatTest );
-    CPPUNIT_TEST( castDoubleToFloatTest );
-    CPPUNIT_TEST( castIntToIntTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( NumericRoundCastTest );
+CPPUNIT_TEST( castFloatToIntTest );
+CPPUNIT_TEST( castDoubleToIntTest );
+CPPUNIT_TEST( castIntToFloatTest );
+CPPUNIT_TEST( castDoubleToFloatTest );
+CPPUNIT_TEST( castIntToIntTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/ObjectTest.hpp b/SrcLib/core/fwTools/test/tu/include/ObjectTest.hpp
index cff28a2..8b14bd7 100644
--- a/SrcLib/core/fwTools/test/tu/include/ObjectTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/ObjectTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class ObjectTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ObjectTest );
-    CPPUNIT_TEST( idTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ObjectTest );
+CPPUNIT_TEST( idTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/RandomTest.hpp b/SrcLib/core/fwTools/test/tu/include/RandomTest.hpp
index aafe5e9..c0cdbde 100644
--- a/SrcLib/core/fwTools/test/tu/include/RandomTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/RandomTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,11 +16,11 @@ namespace ut
 
 class RandomTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( RandomTest );
-    CPPUNIT_TEST( generatorTest );
-    CPPUNIT_TEST( randomListTest );
-    CPPUNIT_TEST( seedTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( RandomTest );
+CPPUNIT_TEST( generatorTest );
+CPPUNIT_TEST( randomListTest );
+CPPUNIT_TEST( seedTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/StringizerTest.hpp b/SrcLib/core/fwTools/test/tu/include/StringizerTest.hpp
index 6e6303d..ff180c3 100644
--- a/SrcLib/core/fwTools/test/tu/include/StringizerTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/StringizerTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class StringizerTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( StringizerTest );
-    CPPUNIT_TEST( convertTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( StringizerTest );
+CPPUNIT_TEST( convertTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/TypeTest.hpp b/SrcLib/core/fwTools/test/tu/include/TypeTest.hpp
index 57d27bb..ceca544 100644
--- a/SrcLib/core/fwTools/test/tu/include/TypeTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/TypeTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,9 +16,9 @@ namespace ut
 
 class TypeTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( TypeTest );
-    CPPUNIT_TEST( typeTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( TypeTest );
+CPPUNIT_TEST( typeTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/include/UUIDTest.hpp b/SrcLib/core/fwTools/test/tu/include/UUIDTest.hpp
index 5bf69b1..6da9535 100644
--- a/SrcLib/core/fwTools/test/tu/include/UUIDTest.hpp
+++ b/SrcLib/core/fwTools/test/tu/include/UUIDTest.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,6 +7,8 @@
 #ifndef __FWTOOLS_UT_UUIDTEST_HPP__
 #define __FWTOOLS_UT_UUIDTEST_HPP__
 
+#include <fwTools/Object.hpp>
+
 #include <cppunit/extensions/HelperMacros.h>
 
 namespace fwTools
@@ -16,11 +18,11 @@ namespace ut
 
 class UUIDTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( UUIDTest );
-    CPPUNIT_TEST( objectUUIDTest );
-    CPPUNIT_TEST( conccurentAccessOnUUIDMapTest );
-    CPPUNIT_TEST( conccurentAccessOnSameObjUUIDTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( UUIDTest );
+CPPUNIT_TEST( objectUUIDTest );
+CPPUNIT_TEST( conccurentAccessOnUUIDMapTest );
+CPPUNIT_TEST( conccurentAccessOnSameObjUUIDTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/core/fwTools/test/tu/src/DynamicTypeTest.cpp b/SrcLib/core/fwTools/test/tu/src/DynamicTypeTest.cpp
index d842727..9ed4eed 100644
--- a/SrcLib/core/fwTools/test/tu/src/DynamicTypeTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/DynamicTypeTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/core/fwTools/test/tu/src/FwIDTest.cpp b/SrcLib/core/fwTools/test/tu/src/FwIDTest.cpp
index 29fd39f..145589d 100644
--- a/SrcLib/core/fwTools/test/tu/src/FwIDTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/FwIDTest.cpp
@@ -1,11 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
-#include <boost/chrono/duration.hpp>
+#include "FwIDTest.hpp"
 
 #include <fwTools/fwID.hpp>
 #include <fwTools/UUID.hpp>
@@ -14,7 +13,8 @@
 
 #include <fwTest/helper/Thread.hpp>
 
-#include "FwIDTest.hpp"
+#include <chrono>
+#include <thread>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwTools::ut::FwIDTest );
@@ -29,7 +29,7 @@ namespace ut
 void FwIDTest::setUp()
 {
     // Set up context before running a test.
-    m_object = ::boost::make_shared< ::fwTools::Object >();
+    m_object = std::make_shared< ::fwTools::Object >();
 }
 
 //-----------------------------------------------------------------------------
@@ -43,9 +43,9 @@ void FwIDTest::tearDown()
 
 void FwIDTest::objectFwIDTest()
 {
-    const std::string fwID = "myID" ;
+    const std::string fwID = "myID";
 
-    ::fwTools::Object::sptr obj = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj = std::make_shared< ::fwTools::Object >();
 
     CPPUNIT_ASSERT( ::fwTools::fwID::exist(fwID) == false);
 
@@ -55,7 +55,7 @@ void FwIDTest::objectFwIDTest()
     CPPUNIT_ASSERT_EQUAL(  fwID, obj->getID() );
     CPPUNIT_ASSERT_EQUAL( obj, ::fwTools::fwID::getObject(fwID) );
 
-    ::fwTools::Object::sptr obj2 = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj2 = std::make_shared< ::fwTools::Object >();
 
     CPPUNIT_ASSERT(obj2->hasID() == false);
     CPPUNIT_ASSERT_THROW (obj2->getID(::fwTools::fwID::MUST_EXIST), ::fwTools::Failed);
@@ -79,15 +79,15 @@ void FwIDTest::conccurentAccessOnFwIDMapTest()
 {
     const unsigned int nbThreads = 10;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&FwIDTest::runFwIDCreation, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&FwIDTest::runFwIDCreation, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
@@ -100,9 +100,9 @@ void FwIDTest::conccurentAccessOnFwIDMapTest()
 
 void FwIDTest::runFwIDCreation()
 {
-    const std::string fwID = ::fwTools::UUID::generateUUID() ;
+    const std::string fwID = ::fwTools::UUID::generateUUID();
 
-    ::fwTools::Object::sptr obj = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj = std::make_shared< ::fwTools::Object >();
 
     CPPUNIT_ASSERT( ::fwTools::fwID::exist(fwID) == false);
 
@@ -114,7 +114,7 @@ void FwIDTest::runFwIDCreation()
 
     CPPUNIT_ASSERT_EQUAL( obj, ::fwTools::fwID::getObject(fwID) );
 
-    ::fwTools::Object::sptr obj2 = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj2 = std::make_shared< ::fwTools::Object >();
 
     CPPUNIT_ASSERT(obj2->hasID() == false);
     CPPUNIT_ASSERT_THROW (obj2->getID(::fwTools::fwID::MUST_EXIST), ::fwTools::Failed);
@@ -138,21 +138,20 @@ void FwIDTest::conccurentAccessOnSameObjFwIDTest()
 {
     const unsigned int nbThreads = 10;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&FwIDTest::runAccessToObjectFwID, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&FwIDTest::runAccessToObjectFwID, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
         CPPUNIT_ASSERT_MESSAGE(str.str(), threads[i]->timedJoin(1000));
     }
-
 }
 
 //-----------------------------------------------------------------------------
@@ -163,13 +162,13 @@ void FwIDTest::runAccessToObjectFwID()
     CPPUNIT_ASSERT( ::fwTools::fwID::exist(id) );
     CPPUNIT_ASSERT( m_object->hasID() );
 
-    ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(200));
+    std::this_thread::sleep_for( std::chrono::milliseconds(200));
 
     CPPUNIT_ASSERT_EQUAL(  id, m_object->getID() );
 
     CPPUNIT_ASSERT_EQUAL( m_object, ::fwTools::fwID::getObject(id) );
 
-    ::boost::this_thread::sleep_for( ::boost::chrono::milliseconds(200));
+    std::this_thread::sleep_for( std::chrono::milliseconds(200));
 
     m_object->resetID();
     CPPUNIT_ASSERT( m_object->hasID() == false );
diff --git a/SrcLib/core/fwTools/test/tu/src/MacrosTest.cpp b/SrcLib/core/fwTools/test/tu/src/MacrosTest.cpp
index 4478323..1c51d08 100644
--- a/SrcLib/core/fwTools/test/tu/src/MacrosTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/MacrosTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,21 +22,26 @@ class ClassTest
 {
 
 public:
-    fwCoreClassDefinitionsWithFactoryMacro((ClassTest), (()) ( ((int)) ), new ClassTest);
+    fwCoreClassDefinitionsWithFactoryMacro((ClassTest), (())( ((int)) ), new ClassTest);
 
-    int getNum() { return m_num; }
+    int getNum()
+    {
+        return m_num;
+    }
 
-protected:
     ClassTest()
-    : m_num(1)
-    {}
+        : m_num(1)
+    {
+    }
 
     ClassTest(int num)
-    : m_num(num)
-    {}
+        : m_num(num)
+    {
+    }
 
     virtual ~ClassTest()
-    {}
+    {
+    }
 
 private:
     int m_num;
diff --git a/SrcLib/core/fwTools/test/tu/src/NumericRoundCastTest.cpp b/SrcLib/core/fwTools/test/tu/src/NumericRoundCastTest.cpp
index 1c6c2de..a12b4c3 100644
--- a/SrcLib/core/fwTools/test/tu/src/NumericRoundCastTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/NumericRoundCastTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,15 +30,15 @@ void NumericRoundCastTest::tearDown()
 
 void NumericRoundCastTest::castFloatToIntTest()
 {
-    float val = 1.32f;
+    float val      = 1.32f;
     int castedVal1 = ::fwTools::numericRoundCast<int>(val);
     CPPUNIT_ASSERT_EQUAL(static_cast<int>(1), castedVal1);
 
-    val = 1.82f;
+    val        = 1.82f;
     castedVal1 = ::fwTools::numericRoundCast<int>(val);
     CPPUNIT_ASSERT_EQUAL(static_cast<int>(2), castedVal1);
 
-    val = -16.62f;
+    val        = -16.62f;
     castedVal1 = ::fwTools::numericRoundCast<int>(val);
     CPPUNIT_ASSERT_EQUAL(static_cast<int>(-17), castedVal1);
 
@@ -51,15 +51,15 @@ void NumericRoundCastTest::castFloatToIntTest()
 
 void NumericRoundCastTest::castDoubleToIntTest()
 {
-    double val1 = 895.33;
+    double val1             = 895.33;
     unsigned int castedVal1 = ::fwTools::numericRoundCast<unsigned int>(val1);
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned int>(895), castedVal1);
 
-    double val2 = -56655.58;
+    double val2    = -56655.58;
     int castedVal2 = ::fwTools::numericRoundCast<int>(val2);
     CPPUNIT_ASSERT_EQUAL(static_cast<int>(-56656), castedVal2);
 
-    double val3 = 88.9005;
+    double val3               = 88.9005;
     unsigned short castedVal3 = ::fwTools::numericRoundCast<unsigned short>(val3);
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(89), castedVal3);
 
@@ -69,16 +69,16 @@ void NumericRoundCastTest::castDoubleToIntTest()
 
 void NumericRoundCastTest::castIntToFloatTest()
 {
-    int val1 = 55;
+    int val1         = 55;
     float castedVal1 = ::fwTools::numericRoundCast<float>(val1);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(55.0f, castedVal1, 0.00000001);
 
-    int val2 = -4564;
+    int val2         = -4564;
     float castedVal2 = ::fwTools::numericRoundCast<float>(val2);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(-4564.0f, castedVal2, 0.00000001);
 
     unsigned short val3 = 5394;
-    double castedVal3 = ::fwTools::numericRoundCast<double>(val3);
+    double castedVal3   = ::fwTools::numericRoundCast<double>(val3);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(5394.0, castedVal3, 0.00000001);
 }
 
@@ -86,15 +86,15 @@ void NumericRoundCastTest::castIntToFloatTest()
 
 void NumericRoundCastTest::castDoubleToFloatTest()
 {
-    double val = 55.678;
+    double val      = 55.678;
     float castedVal = ::fwTools::numericRoundCast<float>(val);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(55.678f, castedVal, 0.00000001);
 
-    val = -4564.851;
+    val       = -4564.851;
     castedVal = ::fwTools::numericRoundCast<float>(val);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(-4564.851f, castedVal, 0.00000001);
 
-    val = -84.851/3.0;
+    val       = -84.851/3.0;
     castedVal = ::fwTools::numericRoundCast<float>(val);
     CPPUNIT_ASSERT_DOUBLES_EQUAL(-84.851f/3.0f, castedVal, 0.00000001);
 }
@@ -103,15 +103,15 @@ void NumericRoundCastTest::castDoubleToFloatTest()
 
 void NumericRoundCastTest::castIntToIntTest()
 {
-    unsigned int val1 = 153;
+    unsigned int val1        = 153;
     unsigned char castedVal1 = ::fwTools::numericRoundCast<unsigned char>(val1);
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(153), castedVal1);
 
-    unsigned char val2 = 25;
+    unsigned char val2       = 25;
     unsigned char castedVal2 = ::fwTools::numericRoundCast<unsigned char>(val2);
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned char>(25), castedVal2);
 
-    char val3 = 121;
+    char val3                 = 121;
     unsigned short castedVal3 = ::fwTools::numericRoundCast<unsigned char>(val3);
     CPPUNIT_ASSERT_EQUAL(static_cast<unsigned short>(121), castedVal3);
 }
diff --git a/SrcLib/core/fwTools/test/tu/src/ObjectTest.cpp b/SrcLib/core/fwTools/test/tu/src/ObjectTest.cpp
index bf286b3..29674ca 100644
--- a/SrcLib/core/fwTools/test/tu/src/ObjectTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/ObjectTest.cpp
@@ -1,10 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/Object.hpp>
 
@@ -30,10 +29,10 @@ void ObjectTest::tearDown()
 
 void ObjectTest::idTest()
 {
-    const std::string UUID = "uid" ;
+    const std::string UUID = "uid";
 
     // process
-    ::fwTools::Object::sptr obj = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj = std::make_shared< ::fwTools::Object >();
 
     obj->setID(UUID);
 
diff --git a/SrcLib/core/fwTools/test/tu/src/RandomTest.cpp b/SrcLib/core/fwTools/test/tu/src/RandomTest.cpp
index a7afad5..816323e 100644
--- a/SrcLib/core/fwTools/test/tu/src/RandomTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/RandomTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,11 +30,11 @@ void RandomTest::tearDown()
 
 void RandomTest::generatorTest()
 {
-    float minF=10.f, maxF=20.f;
+    float minF  = 10.f, maxF = 20.f;
     float randF = ::fwTools::random::getValue(minF, maxF);
     CPPUNIT_ASSERT_MESSAGE("Generate random number not in good interval.", randF>=minF && randF<=maxF);
 
-    int minI=10, maxI=12;
+    int minI  = 10, maxI = 12;
     int randI = ::fwTools::random::getValue(minI, maxI);
     CPPUNIT_ASSERT_MESSAGE("Generate random number not in good interval.", randI>=minI && randI<=maxI);
 }
@@ -43,7 +43,7 @@ void RandomTest::generatorTest()
 
 void RandomTest::randomListTest()
 {
-    float minF=10.f, maxF=20.f;
+    float minF = 10.f, maxF = 20.f;
     std::vector<float> randF(10);
     ::fwTools::random::fillContainer(minF, maxF, randF);
     for(size_t i = 0; i <randF.size(); ++i)
@@ -51,7 +51,7 @@ void RandomTest::randomListTest()
         CPPUNIT_ASSERT_MESSAGE("Generate random number not in good interval.", randF[i]>=minF && randF[i]<=maxF);
     }
 
-    int minI=10, maxI=20;
+    int minI = 10, maxI = 20;
     std::vector<int> randI(10);
     ::fwTools::random::fillContainer(minI, maxI, randI);
     for(size_t i = 0; i <randF.size(); ++i)
@@ -66,13 +66,13 @@ void RandomTest::seedTest()
 {
     ::boost::uint32_t seedVal = 42;
 
-    float minF=10.f, maxF=20.f;
+    float minF   = 10.f, maxF = 20.f;
     float randF1 = ::fwTools::random::getValue(minF, maxF, seedVal);
     CPPUNIT_ASSERT_MESSAGE("Generate random number not in good interval.", randF1>=minF && randF1<=maxF);
     float randF2 = ::fwTools::random::getValue(minF, maxF, seedVal);
     CPPUNIT_ASSERT_EQUAL(randF1, randF2);
 
-    int minI=10, maxI=20;
+    int minI = 10, maxI = 20;
     std::vector<int> randI1(10);
     std::vector<int> randI2(10);
     ::fwTools::random::fillContainer(minI, maxI, randI1, seedVal);
diff --git a/SrcLib/core/fwTools/test/tu/src/StringizerTest.cpp b/SrcLib/core/fwTools/test/tu/src/StringizerTest.cpp
index 4e4aa3f..ebf859f 100644
--- a/SrcLib/core/fwTools/test/tu/src/StringizerTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/StringizerTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -30,7 +30,7 @@ void StringizerTest::convertTest()
 {
     const std::string STR1 = "[1,2,3]";
     const std::string STR2 = "6";
-    const double D = 6.0;
+    const double D         = 6.0;
     std::vector<int> vec;
     vec.push_back(1);
     vec.push_back(2);
diff --git a/SrcLib/core/fwTools/test/tu/src/TypeTest.cpp b/SrcLib/core/fwTools/test/tu/src/TypeTest.cpp
index baf81cf..a000032 100644
--- a/SrcLib/core/fwTools/test/tu/src/TypeTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/TypeTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -82,18 +82,18 @@ void TypeTest::typeTest()
 
     CPPUNIT_ASSERT_EQUAL( ::fwTools::Type::s_UNSPECIFIED_TYPE,  ::fwTools::Type() );
 
-    CPPUNIT_ASSERT_EQUAL( INT8 , ::fwTools::Type::create< signed char >() );
-    CPPUNIT_ASSERT_EQUAL( INT8 , ::fwTools::Type::create< char >() );
+    CPPUNIT_ASSERT_EQUAL( INT8, ::fwTools::Type::create< signed char >() );
+    CPPUNIT_ASSERT_EQUAL( INT8, ::fwTools::Type::create< char >() );
     CPPUNIT_ASSERT_EQUAL( INT16, ::fwTools::Type::create< short >() );
     CPPUNIT_ASSERT_EQUAL( INT32, ::fwTools::Type::create< int >() );
     CPPUNIT_ASSERT_EQUAL( INT64, ::fwTools::Type::create< long long >() );
 
-    CPPUNIT_ASSERT_EQUAL( UINT8 , ::fwTools::Type::create< unsigned char >() );
+    CPPUNIT_ASSERT_EQUAL( UINT8, ::fwTools::Type::create< unsigned char >() );
     CPPUNIT_ASSERT_EQUAL( UINT16, ::fwTools::Type::create< unsigned short >() );
     CPPUNIT_ASSERT_EQUAL( UINT32, ::fwTools::Type::create< unsigned int >() );
     CPPUNIT_ASSERT_EQUAL( UINT64, ::fwTools::Type::create< unsigned long long >() );
 
-    CPPUNIT_ASSERT_EQUAL( FLOAT , ::fwTools::Type::create< float  >() );
+    CPPUNIT_ASSERT_EQUAL( FLOAT, ::fwTools::Type::create< float  >() );
     CPPUNIT_ASSERT_EQUAL( DOUBLE, ::fwTools::Type::create< double >() );
 
     CPPUNIT_ASSERT_EQUAL( ::fwTools::Type::s_UNSPECIFIED_TYPE,  t );
@@ -102,27 +102,27 @@ void TypeTest::typeTest()
     t.setType<void >();
 
     t.setType<signed char >();
-    CPPUNIT_ASSERT_EQUAL( INT8   , t );
+    CPPUNIT_ASSERT_EQUAL( INT8, t );
     t.setType<char >();
-    CPPUNIT_ASSERT_EQUAL( INT8   , t );
+    CPPUNIT_ASSERT_EQUAL( INT8, t );
     t.setType<short >();
-    CPPUNIT_ASSERT_EQUAL( INT16  , t );
+    CPPUNIT_ASSERT_EQUAL( INT16, t );
     t.setType<int >();
-    CPPUNIT_ASSERT_EQUAL( INT32  , t );
+    CPPUNIT_ASSERT_EQUAL( INT32, t );
     t.setType<long long >();
-    CPPUNIT_ASSERT_EQUAL( INT64  , t );
+    CPPUNIT_ASSERT_EQUAL( INT64, t );
     t.setType<unsigned char >();
-    CPPUNIT_ASSERT_EQUAL( UINT8  , t );
+    CPPUNIT_ASSERT_EQUAL( UINT8, t );
     t.setType<unsigned short >();
-    CPPUNIT_ASSERT_EQUAL( UINT16 , t );
+    CPPUNIT_ASSERT_EQUAL( UINT16, t );
     t.setType<unsigned int >();
-    CPPUNIT_ASSERT_EQUAL( UINT32 , t );
+    CPPUNIT_ASSERT_EQUAL( UINT32, t );
     t.setType<unsigned long long>();
-    CPPUNIT_ASSERT_EQUAL( UINT64 , t );
+    CPPUNIT_ASSERT_EQUAL( UINT64, t );
     t.setType<float >();
-    CPPUNIT_ASSERT_EQUAL( FLOAT  , t );
+    CPPUNIT_ASSERT_EQUAL( FLOAT, t );
     t.setType<double >();
-    CPPUNIT_ASSERT_EQUAL( DOUBLE , t );
+    CPPUNIT_ASSERT_EQUAL( DOUBLE, t );
 
     CPPUNIT_ASSERT( typeid(void) == ::fwTools::Type::s_UNSPECIFIED_TYPE.typeId());
 
diff --git a/SrcLib/core/fwTools/test/tu/src/UUIDTest.cpp b/SrcLib/core/fwTools/test/tu/src/UUIDTest.cpp
index 3ffaaaf..ba3f1a5 100644
--- a/SrcLib/core/fwTools/test/tu/src/UUIDTest.cpp
+++ b/SrcLib/core/fwTools/test/tu/src/UUIDTest.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/make_shared.hpp>
+#include "UUIDTest.hpp"
 
 #include <fwTools/UUID.hpp>
 #include <fwTools/Object.hpp>
 
 #include <fwTest/helper/Thread.hpp>
 
-#include "UUIDTest.hpp"
+#include <functional>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwTools::ut::UUIDTest );
@@ -26,8 +26,8 @@ namespace ut
 void UUIDTest::setUp()
 {
     // Set up context before running a test.
-    m_object = ::boost::make_shared< ::fwTools::Object >();
-    m_uuid = ::fwTools::UUID::generateUUID();
+    m_object = std::make_shared< ::fwTools::Object >();
+    m_uuid   = ::fwTools::UUID::generateUUID();
 }
 
 //-----------------------------------------------------------------------------
@@ -41,9 +41,9 @@ void UUIDTest::tearDown()
 
 void UUIDTest::objectUUIDTest()
 {
-    const std::string UUID = "myUUID" ;
+    const std::string UUID = "myUUID";
 
-    ::fwTools::Object::sptr obj = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj = std::make_shared< ::fwTools::Object >();
 
     CPPUNIT_ASSERT( ::fwTools::UUID::exist(UUID) == false);
 
@@ -53,7 +53,7 @@ void UUIDTest::objectUUIDTest()
     CPPUNIT_ASSERT_EQUAL(  UUID, ::fwTools::UUID::get(obj) );
     CPPUNIT_ASSERT_EQUAL( obj, ::fwTools::UUID::get(UUID) );
 
-    ::fwTools::Object::sptr obj2 = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj2 = std::make_shared< ::fwTools::Object >();
     std::string uuid = ::fwTools::UUID::get(obj2);
     CPPUNIT_ASSERT_EQUAL( obj2, ::fwTools::UUID::get(uuid) );
 }
@@ -64,15 +64,15 @@ void UUIDTest::conccurentAccessOnUUIDMapTest()
 {
     const unsigned int nbThreads = 10;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&UUIDTest::runUUIDCreation, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&UUIDTest::runUUIDCreation, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
@@ -87,7 +87,7 @@ void UUIDTest::runUUIDCreation()
 {
     std::string UUID = ::fwTools::UUID::generateUUID();
 
-    ::fwTools::Object::sptr obj = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj = std::make_shared< ::fwTools::Object >();
 
     CPPUNIT_ASSERT( ::fwTools::UUID::exist(UUID) == false);
 
@@ -97,7 +97,7 @@ void UUIDTest::runUUIDCreation()
     CPPUNIT_ASSERT_EQUAL( UUID, ::fwTools::UUID::get(obj) );
     CPPUNIT_ASSERT_EQUAL( obj, ::fwTools::UUID::get(UUID) );
 
-    ::fwTools::Object::sptr obj2 = ::boost::make_shared< ::fwTools::Object >();
+    ::fwTools::Object::sptr obj2 = std::make_shared< ::fwTools::Object >();
     std::string uuid = ::fwTools::UUID::get(obj2);
     CPPUNIT_ASSERT_EQUAL( obj2, ::fwTools::UUID::get(uuid) );
 }
@@ -108,15 +108,15 @@ void UUIDTest::conccurentAccessOnSameObjUUIDTest()
 {
     const unsigned int nbThreads = 10;
     std::vector< SPTR(::fwTest::helper::Thread) > threads;
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         SPTR(::fwTest::helper::Thread) thread;
-        thread = ::boost::shared_ptr< ::fwTest::helper::Thread >(
-                new ::fwTest::helper::Thread(::boost::bind(&UUIDTest::runAccessToObjectUUID, this)));
+        thread = std::shared_ptr< ::fwTest::helper::Thread >(
+            new ::fwTest::helper::Thread(std::bind(&UUIDTest::runAccessToObjectUUID, this)));
         threads.push_back(thread);
     }
 
-    for (int i=0 ; i<nbThreads ; ++i)
+    for (int i = 0; i<nbThreads; ++i)
     {
         std::stringstream str;
         str << "thread " << i;
diff --git a/SrcLib/core/fwZip/CMakeLists.txt b/SrcLib/core/fwZip/CMakeLists.txt
index 4c26226..4c7765d 100644
--- a/SrcLib/core/fwZip/CMakeLists.txt
+++ b/SrcLib/core/fwZip/CMakeLists.txt
@@ -1,12 +1,6 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-)
 
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
 find_package( ZLIB REQUIRED )
 fwInclude(${ZLIB_INCLUDE_DIRS}) # No forward, minizip should be private
-fwForwardInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES} ${ZLIB_LIBRARIES})
+fwLink(${ZLIB_LIBRARIES})
 
diff --git a/SrcLib/core/fwZip/COPYING b/SrcLib/core/fwZip/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/core/fwZip/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/core/fwZip/COPYING.LESSER b/SrcLib/core/fwZip/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/core/fwZip/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/core/fwZip/bin/build.options b/SrcLib/core/fwZip/bin/build.options
deleted file mode 100644
index 7e2effb..0000000
--- a/SrcLib/core/fwZip/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-USE     = ['boost', 'boostFilesystem','z']
-LIB     = [
-          'fwTools_0-1',
-          'fwCore_0-1',
-          ]
-TYPE    = 'shared'
-VERSION = '0-1'
diff --git a/SrcLib/core/fwZip/include/Namespace.hpp b/SrcLib/core/fwZip/include/Namespace.hpp
index bb17b88..d323640 100644
--- a/SrcLib/core/fwZip/include/Namespace.hpp
+++ b/SrcLib/core/fwZip/include/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWZIPNAMESPACE_HPP_
-#define FWZIPNAMESPACE_HPP_
+#ifndef __NAMESPACE_HPP__
+#define __NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwZip provides IO for compress/uncompress .zip files using zlib .
  * @namespace   fwZip
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace fwZip
 {
 }
-#endif /* FWZIPNAMESPACE_HPP_ */
+#endif /* __NAMESPACE_HPP__ */
diff --git a/SrcLib/core/fwZip/include/fwZip/IReadArchive.hpp b/SrcLib/core/fwZip/include/fwZip/IReadArchive.hpp
index bf098b9..479a0f2 100644
--- a/SrcLib/core/fwZip/include/fwZip/IReadArchive.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/IReadArchive.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWZIP_READARCHIVE_HPP__
-#define __FWZIP_READARCHIVE_HPP__
+#ifndef __FWZIP_IREADARCHIVE_HPP__
+#define __FWZIP_IREADARCHIVE_HPP__
 
 #include <istream>
 #include <boost/filesystem/path.hpp>
@@ -26,7 +26,9 @@ public:
 
     fwCoreNonInstanciableClassDefinitionsMacro((IReadArchive));
 
-    virtual ~IReadArchive(){};
+    virtual ~IReadArchive()
+    {
+    }
 
     /**
      * @brief Returns input stream for the file in current archive.
@@ -40,11 +42,11 @@ public:
      */
     virtual const ::boost::filesystem::path getArchivePath() const = 0;
 
-    virtual IReadArchive::sptr clone() const = 0 ;
+    virtual IReadArchive::sptr clone() const = 0;
 };
 
 }
 
 
-#endif /* __FWZIP_READARCHIVE_HPP__ */
+#endif /* __FWZIP_IREADARCHIVE_HPP__ */
 
diff --git a/SrcLib/core/fwZip/include/fwZip/IWriteArchive.hpp b/SrcLib/core/fwZip/include/fwZip/IWriteArchive.hpp
index 172287c..cfdbbc9 100644
--- a/SrcLib/core/fwZip/include/fwZip/IWriteArchive.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/IWriteArchive.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWZIP_WRITEARCHIVE_HPP__
-#define __FWZIP_WRITEARCHIVE_HPP__
+#ifndef __FWZIP_IWRITEARCHIVE_HPP__
+#define __FWZIP_IWRITEARCHIVE_HPP__
 
 #include <ostream>
 #include <boost/filesystem/path.hpp>
@@ -26,7 +26,9 @@ public:
 
     fwCoreNonInstanciableClassDefinitionsMacro((IWriteArchive));
 
-    virtual ~IWriteArchive(){};
+    virtual ~IWriteArchive()
+    {
+    }
 
     /**
      * @brief Creates a new file entry in archive and returns output stream for this file.
@@ -57,5 +59,5 @@ public:
 }
 
 
-#endif /* __FWZIP_WRITEARCHIVE_HPP__ */
+#endif /* __FWZIP_IWRITEARCHIVE_HPP__ */
 
diff --git a/SrcLib/core/fwZip/include/fwZip/ReadDirArchive.hpp b/SrcLib/core/fwZip/include/fwZip/ReadDirArchive.hpp
index 1c36949..4f6f2af 100644
--- a/SrcLib/core/fwZip/include/fwZip/ReadDirArchive.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/ReadDirArchive.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,7 +11,6 @@
 
 #include <boost/filesystem/path.hpp>
 
-#include <boost/make_shared.hpp>
 
 #include <fwCore/macros.hpp>
 
@@ -33,7 +32,7 @@ public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ReadDirArchive)(IReadArchive),
                                            ((( const ::boost::filesystem::path& ))),
-                                           ::boost::make_shared< ReadDirArchive >);
+                                           std::make_shared< ReadDirArchive >);
 
     /// Constructors. Initializes archive path.
     FWZIP_API ReadDirArchive( const ::boost::filesystem::path &archive );
@@ -62,11 +61,6 @@ public:
 
 protected:
 
-    /**
-     * @brief Returns true if path exists in archive.
-     */
-    FWZIP_API bool exists(const ::boost::filesystem::path &path);
-
     ::boost::filesystem::path m_archive;
 };
 
diff --git a/SrcLib/core/fwZip/include/fwZip/ReadZipArchive.hpp b/SrcLib/core/fwZip/include/fwZip/ReadZipArchive.hpp
index 84e4968..ae0bdec 100644
--- a/SrcLib/core/fwZip/include/fwZip/ReadZipArchive.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/ReadZipArchive.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <istream>
 
-#include <boost/make_shared.hpp>
 #include <boost/filesystem/path.hpp>
 
 #include <fwCore/macros.hpp>
@@ -32,7 +31,7 @@ public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ReadZipArchive)(IReadArchive),
                                            ((( const ::boost::filesystem::path& ))),
-                                           ::boost::make_shared< ReadZipArchive >);
+                                           std::make_shared< ReadZipArchive >);
 
     /*
      * @brief Constructors. Initializes archive path, zip descriptor and zip stream.
@@ -53,6 +52,13 @@ public:
     FWZIP_API SPTR(std::istream) getFile(const ::boost::filesystem::path &path);
 
     /**
+     * @brief Returns comment from the current archive (zip).
+     * @param path file in archive.
+     * @return comment
+     */
+    FWZIP_API std::string getComment();
+
+    /**
      * @brief Returns archive path.
      */
     FWZIP_API const ::boost::filesystem::path getArchivePath() const;
diff --git a/SrcLib/core/fwZip/include/fwZip/WriteDirArchive.hpp b/SrcLib/core/fwZip/include/fwZip/WriteDirArchive.hpp
index 05d64d4..ea93b8b 100644
--- a/SrcLib/core/fwZip/include/fwZip/WriteDirArchive.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/WriteDirArchive.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,7 +11,6 @@
 
 #include <boost/filesystem/path.hpp>
 
-#include <boost/make_shared.hpp>
 
 #include <fwCore/macros.hpp>
 
@@ -33,7 +32,7 @@ public:
 
     fwCoreClassDefinitionsWithFactoryMacro((WriteDirArchive)(IWriteArchive),
                                            ((( const ::boost::filesystem::path& ))),
-                                           ::boost::make_shared<WriteDirArchive> );
+                                           std::make_shared<WriteDirArchive> );
 
     /// Constructors. Initializes archive path and creates archive directories if doesn't exist.
     FWZIP_API WriteDirArchive( const ::boost::filesystem::path &archive );
@@ -53,11 +52,12 @@ public:
     /**
      * @brief Writes source file in archive. If possible, creates hard link otherwise copy source file in archive.
      * @param sourceFile source file.
-     * @param path file in archive.
+     * @param destinationFile file in archive.
      *
-     * @note Do nothing if path already exists in archive.
+     * @note Do nothing if destinationFile already exists in archive.
      */
-    FWZIP_API void putFile(const ::boost::filesystem::path &sourceFile, const ::boost::filesystem::path &path);
+    FWZIP_API void putFile(const ::boost::filesystem::path &sourceFile,
+                           const ::boost::filesystem::path &destinationFile);
 
     /**
      * @brief Creates a folder in archive.
diff --git a/SrcLib/core/fwZip/include/fwZip/WriteZipArchive.hpp b/SrcLib/core/fwZip/include/fwZip/WriteZipArchive.hpp
index 3981b7e..ff10410 100644
--- a/SrcLib/core/fwZip/include/fwZip/WriteZipArchive.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/WriteZipArchive.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,10 +9,8 @@
 
 #include <ostream>
 
-#include <boost/make_shared.hpp>
 #include <boost/filesystem/path.hpp>
 
-#include <boost/make_shared.hpp>
 
 #include <fwCore/macros.hpp>
 
@@ -33,8 +31,8 @@ class FWZIP_CLASS_API WriteZipArchive : public IWriteArchive
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro((WriteZipArchive)(IWriteArchive),
-                                           ((( const ::boost::filesystem::path& ))),
-                                           ::boost::make_shared<WriteZipArchive> );
+                                           ((( const ::boost::filesystem::path& ))((const std::string&)(""))),
+                                           std::make_shared<WriteZipArchive> );
 
     /**
      * @brief Constructors. Initializes archive path.
@@ -42,6 +40,12 @@ public:
      */
     FWZIP_API WriteZipArchive( const ::boost::filesystem::path &archive );
 
+    /**
+     * @brief Constructors. Initializes archive path and comment.
+     *
+     */
+    FWZIP_API WriteZipArchive( const ::boost::filesystem::path &archive, const std::string& comment );
+
     FWZIP_API ~WriteZipArchive();
 
     /**
@@ -61,7 +65,8 @@ public:
      *
      * @throw ::fwZip::exception::Read if source file cannot be opened.
      */
-    FWZIP_API void putFile(const ::boost::filesystem::path &sourceFile, const ::boost::filesystem::path &path);
+    FWZIP_API void putFile(const ::boost::filesystem::path &sourceFile,
+                           const ::boost::filesystem::path &path);
 
     /**
      * @brief Creates a folder in archive.
@@ -79,6 +84,8 @@ public:
 protected:
 
     ::boost::filesystem::path m_archive;
+
+    std::string m_comment;
 };
 
 }
diff --git a/SrcLib/core/fwZip/include/fwZip/config.hpp b/SrcLib/core/fwZip/include/fwZip/config.hpp
deleted file mode 100644
index 3d92b1d..0000000
--- a/SrcLib/core/fwZip/include/fwZip/config.hpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-
-
-#ifndef _FWZIP_CONFIG_HPP_
-#define _FWZIP_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWZIP_EXPORTS
-    #define FWZIP_API __declspec(dllexport)
-    #else
-    #define FWZIP_API __declspec(dllimport)
-    #endif
-
-    #define FWZIP_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWZIP_EXPORTS
-    #define FWZIP_API __attribute__ ((visibility("default")))
-    #define FWZIP_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWZIP_API __attribute__ ((visibility("hidden")))
-    //#define FWZIP_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWZIP_API
-    #define FWZIP_CLASS_API
-    #endif
-
-#else
-
-    #define FWZIP_API
-    #define FWZIP_CLASS_API
-
-#endif
-
-#endif //_FWZIP_CONFIG_HPP_
diff --git a/SrcLib/core/fwZip/include/fwZip/exception/Read.hpp b/SrcLib/core/fwZip/include/fwZip/exception/Read.hpp
index c68c263..c7d1938 100644
--- a/SrcLib/core/fwZip/include/fwZip/exception/Read.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/exception/Read.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ namespace exception
 /// Read exception.
 struct Read : ::fwCore::Exception
 {
-    FWZIP_API Read ( const std::string &err ) ;
+    FWZIP_API Read ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwZip/include/fwZip/exception/Write.hpp b/SrcLib/core/fwZip/include/fwZip/exception/Write.hpp
index 63153bf..70dd70f 100644
--- a/SrcLib/core/fwZip/include/fwZip/exception/Write.hpp
+++ b/SrcLib/core/fwZip/include/fwZip/exception/Write.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ namespace exception
 /// Write exception.
 struct Write : ::fwCore::Exception
 {
-    FWZIP_API Write ( const std::string &err ) ;
+    FWZIP_API Write ( const std::string &err );
 };
 
 } // namespace exception
diff --git a/SrcLib/core/fwZip/include/minizip/crypt.h b/SrcLib/core/fwZip/include/minizip/crypt.h
index a01d08d..fbbe3f9 100644
--- a/SrcLib/core/fwZip/include/minizip/crypt.h
+++ b/SrcLib/core/fwZip/include/minizip/crypt.h
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* crypt.h -- base code for crypt/uncrypt ZIPfile
 
 
@@ -25,7 +31,10 @@
    The new AES encryption added on Zip format by Winzip (see the page
    http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
    Encryption is not supported.
-*/
+ */
+
+#ifndef __MINIZIP_CRYPT_H__
+#define __MINIZIP_CRYPT_H__
 
 #define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
 
@@ -47,12 +56,12 @@ static int decrypt_byte(unsigned long* pkeys, const unsigned long* pcrc_32_tab)
  */
 static int update_keys(unsigned long* pkeys,const unsigned long* pcrc_32_tab,int c)
 {
-    (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+    (*(pkeys+0))  = CRC32((*(pkeys+0)), c);
     (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
-    (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+    (*(pkeys+1))  = (*(pkeys+1)) * 134775813L + 1;
     {
-      register int keyshift = (int)((*(pkeys+1)) >> 24);
-      (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+        register int keyshift = (int)((*(pkeys+1)) >> 24);
+        (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
     }
     return c;
 }
@@ -67,7 +76,8 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned lon
     *(pkeys+0) = 305419896L;
     *(pkeys+1) = 591751049L;
     *(pkeys+2) = 878082192L;
-    while (*passwd != '\0') {
+    while (*passwd != '\0')
+    {
         update_keys(pkeys,pcrc_32_tab,(int)*passwd);
         passwd++;
     }
@@ -77,12 +87,12 @@ static void init_keys(const char* passwd,unsigned long* pkeys,const unsigned lon
     (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
 
 #define zencode(pkeys,pcrc_32_tab,c,t) \
-    (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+    (t = decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
 
 #ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
 
 #define RAND_HEAD_LEN  12
-   /* "last resort" source for second part of crypt seed pattern */
+/* "last resort" source for second part of crypt seed pattern */
 #  ifndef ZCR_SEED2
 #    define ZCR_SEED2 3141592654UL     /* use PI as default pattern */
 #  endif
@@ -101,7 +111,9 @@ static int crypthead(const char* passwd,      /* password string */
     static unsigned calls = 0;   /* ensure different random header each time */
 
     if (bufSize<RAND_HEAD_LEN)
-      return 0;
+    {
+        return 0;
+    }
 
     /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
      * output of rand() to get less predictability, since rand() is
@@ -114,7 +126,7 @@ static int crypthead(const char* passwd,      /* password string */
     init_keys(passwd, pkeys, pcrc_32_tab);
     for (n = 0; n < RAND_HEAD_LEN-2; n++)
     {
-        c = (rand() >> 7) & 0xff;
+        c         = (rand() >> 7) & 0xff;
         header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
     }
     /* Encrypt random header (last two bytes is high word of crc) */
@@ -129,3 +141,5 @@ static int crypthead(const char* passwd,      /* password string */
 }
 
 #endif
+
+#endif //__MINIZIP_CRYPT_H__
diff --git a/SrcLib/core/fwZip/include/minizip/export.h b/SrcLib/core/fwZip/include/minizip/export.h
index 6cccf32..a1dc20a 100644
--- a/SrcLib/core/fwZip/include/minizip/export.h
+++ b/SrcLib/core/fwZip/include/minizip/export.h
@@ -1,8 +1,14 @@
-#ifndef _MINIZIP_CONFIG_HPP_
-#define _MINIZIP_CONFIG_HPP_
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __MINIZIP_EXPORT_H__
+#define __MINIZIP_EXPORT_H__
 
 //TODO: minizip/microzip as external dependency
 #define MINIZIP_CLASS_API
 #define MINIZIP_API
 
-#endif //_MINIZIP_CONFIG_HPP_
+#endif //__MINIZIP_EXPORT_H__
diff --git a/SrcLib/core/fwZip/include/minizip/ioapi.h b/SrcLib/core/fwZip/include/minizip/ioapi.h
index 74a56cd..a7c677d 100644
--- a/SrcLib/core/fwZip/include/minizip/ioapi.h
+++ b/SrcLib/core/fwZip/include/minizip/ioapi.h
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* ioapi.h -- IO base function header for compress/uncompress .zip
    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 
@@ -16,15 +22,15 @@
     Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.
                           (but you should use iowin32.c for windows instead)
 
-*/
+ */
 
-#ifndef _ZLIBIOAPI64_H
-#define _ZLIBIOAPI64_H
+#ifndef __MINIZIP_IOAPI_H__
+#define __MINIZIP_IOAPI_H__
 
 #if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
 
-  // Linux needs this to support file operation on files larger then 4+GB
-  // But might need better if/def to select just the platforms that needs them.
+// Linux needs this to support file operation on files larger then 4+GB
+// But might need better if/def to select just the platforms that needs them.
 
         #ifndef __USE_FILE_OFFSET64
                 #define __USE_FILE_OFFSET64
@@ -64,15 +70,15 @@
 #endif
 
 /*
-#ifndef ZPOS64_T
-  #ifdef _WIN32
-                #define ZPOS64_T fpos_t
-  #else
-    #include <stdint.h>
-    #define ZPOS64_T uint64_t
-  #endif
-#endif
-*/
+   #ifndef ZPOS64_T
+   #ifdef _WIN32
+   #define ZPOS64_T fpos_t
+   #else
+   #include <stdint.h>
+   #define ZPOS64_T uint64_t
+   #endif
+   #endif
+ */
 
 #ifdef HAVE_MINIZIP64_CONF_H
 #include "minizip/mz64conf.h"
@@ -116,7 +122,8 @@ extern "C" {
 
 
 #ifndef ZCALLBACK
- #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
+ #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && \
+    defined (USEWINDOWS_CALLBACK)
    #define ZCALLBACK CALLBACK
  #else
    #define ZCALLBACK
@@ -126,43 +133,43 @@ extern "C" {
 
 
 
-typedef voidpf   (ZCALLBACK *open_file_func)      OF((voidpf opaque, const char* filename, int mode));
-typedef uLong    (ZCALLBACK *read_file_func)      OF((voidpf opaque, voidpf stream, void* buf, uLong size));
-typedef uLong    (ZCALLBACK *write_file_func)     OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
-typedef int      (ZCALLBACK *close_file_func)     OF((voidpf opaque, voidpf stream));
-typedef int      (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+typedef voidpf (ZCALLBACK *open_file_func)      OF ((voidpf opaque, const char* filename, int mode));
+typedef uLong (ZCALLBACK *read_file_func)      OF ((voidpf opaque, voidpf stream, void* buf, uLong size));
+typedef uLong (ZCALLBACK *write_file_func)     OF ((voidpf opaque, voidpf stream, const void* buf, uLong size));
+typedef int (ZCALLBACK *close_file_func)     OF ((voidpf opaque, voidpf stream));
+typedef int (ZCALLBACK *testerror_file_func) OF ((voidpf opaque, voidpf stream));
 
-typedef long     (ZCALLBACK *tell_file_func)      OF((voidpf opaque, voidpf stream));
-typedef long     (ZCALLBACK *seek_file_func)      OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+typedef long (ZCALLBACK *tell_file_func)      OF ((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek_file_func)      OF ((voidpf opaque, voidpf stream, uLong offset, int origin));
 
 
 /* here is the "old" 32 bits structure structure */
 typedef struct zlib_filefunc_def_s
 {
-    open_file_func      zopen_file;
-    read_file_func      zread_file;
-    write_file_func     zwrite_file;
-    tell_file_func      ztell_file;
-    seek_file_func      zseek_file;
-    close_file_func     zclose_file;
+    open_file_func zopen_file;
+    read_file_func zread_file;
+    write_file_func zwrite_file;
+    tell_file_func ztell_file;
+    seek_file_func zseek_file;
+    close_file_func zclose_file;
     testerror_file_func zerror_file;
-    voidpf              opaque;
+    voidpf opaque;
 } zlib_filefunc_def;
 
-typedef ZPOS64_T (ZCALLBACK *tell64_file_func)    OF((voidpf opaque, voidpf stream));
-typedef long     (ZCALLBACK *seek64_file_func)    OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
-typedef voidpf   (ZCALLBACK *open64_file_func)    OF((voidpf opaque, const void* filename, int mode));
+typedef ZPOS64_T (ZCALLBACK *tell64_file_func)    OF ((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek64_file_func)    OF ((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+typedef voidpf (ZCALLBACK *open64_file_func)    OF ((voidpf opaque, const void* filename, int mode));
 
 typedef struct zlib_filefunc64_def_s
 {
-    open64_file_func    zopen64_file;
-    read_file_func      zread_file;
-    write_file_func     zwrite_file;
-    tell64_file_func    ztell64_file;
-    seek64_file_func    zseek64_file;
-    close_file_func     zclose_file;
+    open64_file_func zopen64_file;
+    read_file_func zread_file;
+    write_file_func zwrite_file;
+    tell64_file_func ztell64_file;
+    seek64_file_func zseek64_file;
+    close_file_func zclose_file;
     testerror_file_func zerror_file;
-    voidpf              opaque;
+    voidpf opaque;
 } zlib_filefunc64_def;
 
 MINIZIP_API void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
@@ -172,24 +179,32 @@ MINIZIP_API void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def))
 typedef struct zlib_filefunc64_32_def_s
 {
     zlib_filefunc64_def zfile_func64;
-    open_file_func      zopen32_file;
-    tell_file_func      ztell32_file;
-    seek_file_func      zseek32_file;
+    open_file_func zopen32_file;
+    tell_file_func ztell32_file;
+    seek_file_func zseek32_file;
 } zlib_filefunc64_32_def;
 
 
-#define ZREAD64(filefunc,filestream,buf,size)     ((*((filefunc).zfile_func64.zread_file))   ((filefunc).zfile_func64.opaque,filestream,buf,size))
-#define ZWRITE64(filefunc,filestream,buf,size)    ((*((filefunc).zfile_func64.zwrite_file))  ((filefunc).zfile_func64.opaque,filestream,buf,size))
+#define ZREAD64(filefunc,filestream,buf, \
+                size)     ((*((filefunc).zfile_func64.zread_file))((filefunc).zfile_func64.opaque,filestream,buf,size))
+#define ZWRITE64(filefunc,filestream,buf, \
+                 size)    ((*((filefunc).zfile_func64.zwrite_file))((filefunc).zfile_func64.opaque,filestream,buf,size))
 //#define ZTELL64(filefunc,filestream)            ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
 //#define ZSEEK64(filefunc,filestream,pos,mode)   ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
-#define ZCLOSE64(filefunc,filestream)             ((*((filefunc).zfile_func64.zclose_file))  ((filefunc).zfile_func64.opaque,filestream))
-#define ZERROR64(filefunc,filestream)             ((*((filefunc).zfile_func64.zerror_file))  ((filefunc).zfile_func64.opaque,filestream))
+#define ZCLOSE64(filefunc, \
+                 filestream)             ((*((filefunc).zfile_func64.zclose_file))((filefunc).zfile_func64.opaque, \
+                                                                                   filestream))
+#define ZERROR64(filefunc, \
+                 filestream)             ((*((filefunc).zfile_func64.zerror_file))((filefunc).zfile_func64.opaque, \
+                                                                                   filestream))
 
 MINIZIP_API voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
-MINIZIP_API long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
+MINIZIP_API long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset,
+                                  int origin));
 MINIZIP_API ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
 
-MINIZIP_API void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
+MINIZIP_API void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,
+                                                             const zlib_filefunc_def* p_filefunc32);
 
 #define ZOPEN64(filefunc,filename,mode)         (call_zopen64((&(filefunc)),(filename),(mode)))
 #define ZTELL64(filefunc,filestream)            (call_ztell64((&(filefunc)),(filestream)))
@@ -199,4 +214,4 @@ MINIZIP_API void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_
 }
 #endif
 
-#endif
+#endif //__MINIZIP_IOAPI_H__
diff --git a/SrcLib/core/fwZip/include/minizip/iowin32.h b/SrcLib/core/fwZip/include/minizip/iowin32.h
index 4ce107d..ef01467 100644
--- a/SrcLib/core/fwZip/include/minizip/iowin32.h
+++ b/SrcLib/core/fwZip/include/minizip/iowin32.h
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* iowin32.h -- IO base function header for compress/uncompress .zip
      Version 1.1, February 14h, 2010
      part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
@@ -9,7 +15,11 @@
 
          For more info read MiniZip_info.txt
 
-*/
+ */
+
+#ifndef __MINIZIP_IOWIN32_H__
+#define __MINIZIP_IOWIN32_H__
+
 #ifdef _WIN32
 
 #include <windows.h>
@@ -30,3 +40,4 @@ MINIZIP_API void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_
 #endif
 
 #endif //_WIN32
+#endif //__MINIZIP_IOWIN32_H__
diff --git a/SrcLib/core/fwZip/include/minizip/mztools.h b/SrcLib/core/fwZip/include/minizip/mztools.h
index 028a575..e2257bd 100644
--- a/SrcLib/core/fwZip/include/minizip/mztools.h
+++ b/SrcLib/core/fwZip/include/minizip/mztools.h
@@ -1,11 +1,17 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /*
-  Additional tools for Minizip
-  Code: Xavier Roche '2004
-  License: Same as ZLIB (www.gzip.org)
-*/
+   Additional tools for Minizip
+   Code: Xavier Roche '2004
+   License: Same as ZLIB (www.gzip.org)
+ */
 
-#ifndef _zip_tools_H
-#define _zip_tools_H
+#ifndef __MINIZIP_MZTOOLS_H__
+#define __MINIZIP_MZTOOLS_H__
 
 #ifdef __cplusplus
 extern "C" {
@@ -21,11 +27,11 @@ extern "C" {
    file: file to recover
    fileOut: output file after recovery
    fileOutTmp: temporary file name used for recovery
-*/
+ */
 extern MINIZIP_API int unzRepair(const char* file,
-                             const char* fileOut,
-                             const char* fileOutTmp,
-                             uLong* nRecovered,
-                             uLong* bytesRecovered);
+                                 const char* fileOut,
+                                 const char* fileOutTmp,
+                                 uLong* nRecovered,
+                                 uLong* bytesRecovered);
 
-#endif
+#endif //__MINIZIP_MZTOOLS_H__
diff --git a/SrcLib/core/fwZip/include/minizip/unzip.h b/SrcLib/core/fwZip/include/minizip/unzip.h
index b3be436..18c923d 100644
--- a/SrcLib/core/fwZip/include/minizip/unzip.h
+++ b/SrcLib/core/fwZip/include/minizip/unzip.h
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* unzip.h -- IO for uncompress .zip files using zlib
    Version 1.1, February 14h, 2010
    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
@@ -16,34 +22,34 @@
 
         Condition of use and distribution are the same than zlib :
 
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the authors be held liable for any damages
+   arising from the use of this software.
 
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
 
-  1. The origin of this software must not be misrepresented; you must not
+   1. The origin of this software must not be misrepresented; you must not
      claim that you wrote the original software. If you use this software
      in a product, an acknowledgment in the product documentation would be
      appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
+   2. Altered source versions must be plainly marked as such, and must not be
      misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
+   3. This notice may not be removed or altered from any source distribution.
 
-  ---------------------------------------------------------------------------------
+   ---------------------------------------------------------------------------------
 
         Changes
 
         See header of unzip64.c
 
-*/
+ */
 
-#include "minizip/export.h"
+#ifndef __MINIZIP_UNZIP_H__
+#define __MINIZIP_UNZIP_H__
 
-#ifndef _unz64_H
-#define _unz64_H
+#include "minizip/export.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -98,7 +104,7 @@ typedef struct tm_unz_s
 typedef struct unz_global_info64_s
 {
     ZPOS64_T number_entry;         /* total number of entries in
-                                     the central dir on this disk */
+                                      the central dir on this disk */
     uLong size_comment;         /* size of the global comment of the zipfile */
 } unz_global_info64;
 
@@ -153,8 +159,8 @@ typedef struct unz_file_info_s
 } unz_file_info;
 
 extern MINIZIP_API int unzStringFileNameCompare OF ((const char* fileName1,
-                                                 const char* fileName2,
-                                                 int iCaseSensitivity));
+                                                     const char* fileName2,
+                                                     int iCaseSensitivity));
 /*
    Compare two filename (fileName1,fileName2).
    If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
@@ -162,13 +168,13 @@ extern MINIZIP_API int unzStringFileNameCompare OF ((const char* fileName1,
                                 or strcasecmp)
    If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
     (like 1 on Unix, 2 on Windows)
-*/
+ */
 
 
 extern MINIZIP_API unzFile unzOpen OF((const char *path));
 extern MINIZIP_API unzFile unzOpen64 OF((const void *path));
 /*
-  Open a Zip file. path contain the full pathname (by example,
+   Open a Zip file. path contain the full pathname (by example,
      on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
      "zlib/zlib113.zip".
      If the zipfile cannot be opened (file don't exist or in not valid), the
@@ -180,49 +186,49 @@ extern MINIZIP_API unzFile unzOpen64 OF((const void *path));
      Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
        is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
        does not describe the reality
-*/
+ */
 
 
 extern MINIZIP_API unzFile unzOpen2 OF((const char *path,
-                                    zlib_filefunc_def* pzlib_filefunc_def));
+                                        zlib_filefunc_def* pzlib_filefunc_def));
 /*
    Open a Zip file, like unzOpen, but provide a set of file low level API
       for read/write the zip file (see ioapi.h)
-*/
+ */
 
 extern MINIZIP_API unzFile unzOpen2_64 OF((const void *path,
-                                    zlib_filefunc64_def* pzlib_filefunc_def));
+                                           zlib_filefunc64_def* pzlib_filefunc_def));
 /*
    Open a Zip file, like unz64Open, but provide a set of file low level API
       for read/write the zip file (see ioapi.h)
-*/
+ */
 
 extern MINIZIP_API int unzClose OF((unzFile file));
 /*
-  Close a ZipFile opened with unzipOpen.
-  If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+   Close a ZipFile opened with unzipOpen.
+   If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
     these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
-  return UNZ_OK if there is no problem. */
+   return UNZ_OK if there is no problem. */
 
 extern MINIZIP_API int unzGetGlobalInfo OF((unzFile file,
-                                        unz_global_info *pglobal_info));
+                                            unz_global_info *pglobal_info));
 
 extern MINIZIP_API int unzGetGlobalInfo64 OF((unzFile file,
-                                        unz_global_info64 *pglobal_info));
+                                              unz_global_info64 *pglobal_info));
 /*
-  Write info about the ZipFile in the *pglobal_info structure.
-  No preparation of the structure is needed
-  return UNZ_OK if there is no problem. */
+   Write info about the ZipFile in the *pglobal_info structure.
+   No preparation of the structure is needed
+   return UNZ_OK if there is no problem. */
 
 
 extern MINIZIP_API int unzGetGlobalComment OF((unzFile file,
-                                           char *szComment,
-                                           uLong uSizeBuf));
+                                               char *szComment,
+                                               uLong uSizeBuf));
 /*
-  Get the global comment string of the ZipFile, in the szComment buffer.
-  uSizeBuf is the size of the szComment buffer.
-  return the number of byte copied or an error code <0
-*/
+   Get the global comment string of the ZipFile, in the szComment buffer.
+   uSizeBuf is the size of the szComment buffer.
+   return the number of byte copied or an error code <0
+ */
 
 
 /***************************************************************************/
@@ -230,28 +236,28 @@ extern MINIZIP_API int unzGetGlobalComment OF((unzFile file,
 
 extern MINIZIP_API int unzGoToFirstFile OF((unzFile file));
 /*
-  Set the current file of the zipfile to the first file.
-  return UNZ_OK if there is no problem
-*/
+   Set the current file of the zipfile to the first file.
+   return UNZ_OK if there is no problem
+ */
 
 extern MINIZIP_API int unzGoToNextFile OF((unzFile file));
 /*
-  Set the current file of the zipfile to the next file.
-  return UNZ_OK if there is no problem
-  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
-*/
+   Set the current file of the zipfile to the next file.
+   return UNZ_OK if there is no problem
+   return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+ */
 
 extern MINIZIP_API int unzLocateFile OF((unzFile file,
-                     const char *szFileName,
-                     int iCaseSensitivity));
+                                         const char *szFileName,
+                                         int iCaseSensitivity));
 /*
-  Try locate the file szFileName in the zipfile.
-  For the iCaseSensitivity signification, see unzStringFileNameCompare
+   Try locate the file szFileName in the zipfile.
+   For the iCaseSensitivity signification, see unzStringFileNameCompare
 
-  return value :
-  UNZ_OK if the file is found. It becomes the current file.
-  UNZ_END_OF_LIST_OF_FILE if the file is not found
-*/
+   return value :
+   UNZ_OK if the file is found. It becomes the current file.
+   UNZ_END_OF_LIST_OF_FILE if the file is not found
+ */
 
 
 /* ****************************************** */
@@ -288,34 +294,34 @@ extern MINIZIP_API int unzGoToFilePos64(
 /* ****************************************** */
 
 extern MINIZIP_API int unzGetCurrentFileInfo64 OF((unzFile file,
-                         unz_file_info64 *pfile_info,
-                         char *szFileName,
-                         uLong fileNameBufferSize,
-                         void *extraField,
-                         uLong extraFieldBufferSize,
-                         char *szComment,
-                         uLong commentBufferSize));
+                                                   unz_file_info64 *pfile_info,
+                                                   char *szFileName,
+                                                   uLong fileNameBufferSize,
+                                                   void *extraField,
+                                                   uLong extraFieldBufferSize,
+                                                   char *szComment,
+                                                   uLong commentBufferSize));
 
 extern MINIZIP_API int unzGetCurrentFileInfo OF((unzFile file,
-                         unz_file_info *pfile_info,
-                         char *szFileName,
-                         uLong fileNameBufferSize,
-                         void *extraField,
-                         uLong extraFieldBufferSize,
-                         char *szComment,
-                         uLong commentBufferSize));
+                                                 unz_file_info *pfile_info,
+                                                 char *szFileName,
+                                                 uLong fileNameBufferSize,
+                                                 void *extraField,
+                                                 uLong extraFieldBufferSize,
+                                                 char *szComment,
+                                                 uLong commentBufferSize));
 /*
-  Get Info about the current file
-  if pfile_info!=NULL, the *pfile_info structure will contain somes info about
+   Get Info about the current file
+   if pfile_info!=NULL, the *pfile_info structure will contain somes info about
         the current file
-  if szFileName!=NULL, the filemane string will be copied in szFileName
+   if szFileName!=NULL, the filemane string will be copied in szFileName
             (fileNameBufferSize is the size of the buffer)
-  if extraField!=NULL, the extra field information will be copied in extraField
+   if extraField!=NULL, the extra field information will be copied in extraField
             (extraFieldBufferSize is the size of the buffer).
             This is the Central-header version of the extra field
-  if szComment!=NULL, the comment string of the file will be copied in szComment
+   if szComment!=NULL, the comment string of the file will be copied in szComment
             (commentBufferSize is the size of the buffer)
-*/
+ */
 
 
 /** Addition for GDAL : START */
@@ -328,97 +334,97 @@ extern MINIZIP_API ZPOS64_T unzGetCurrentFileZStreamPos64 OF((unzFile file));
 /***************************************************************************/
 /* for reading the content of the current zipfile, you can open it, read data
    from it, and close it (you can close it before reading all the file)
-   */
+ */
 
 extern MINIZIP_API int unzOpenCurrentFile OF((unzFile file));
 /*
-  Open for reading data the current file in the zipfile.
-  If there is no error, the return value is UNZ_OK.
-*/
+   Open for reading data the current file in the zipfile.
+   If there is no error, the return value is UNZ_OK.
+ */
 
-extern MINIZIP_API  int unzOpenCurrentFilePassword OF((unzFile file,
-                                                  const char* password));
+extern MINIZIP_API int unzOpenCurrentFilePassword OF((unzFile file,
+                                                      const char* password));
 /*
-  Open for reading data the current file in the zipfile.
-  password is a crypting password
-  If there is no error, the return value is UNZ_OK.
-*/
-
-extern MINIZIP_API  int unzOpenCurrentFile2 OF((unzFile file,
-                                           int* method,
-                                           int* level,
-                                           int raw));
+   Open for reading data the current file in the zipfile.
+   password is a crypting password
+   If there is no error, the return value is UNZ_OK.
+ */
+
+extern MINIZIP_API int unzOpenCurrentFile2 OF((unzFile file,
+                                               int* method,
+                                               int* level,
+                                               int raw));
 /*
-  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+   Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
     if raw==1
-  *method will receive method of compression, *level will receive level of
+ * method will receive method of compression, *level will receive level of
      compression
-  note : you can set level parameter as NULL (if you did not want known level,
+   note : you can set level parameter as NULL (if you did not want known level,
          but you CANNOT set method parameter as NULL
-*/
+ */
 
-extern MINIZIP_API  int unzOpenCurrentFile3 OF((unzFile file,
-                                           int* method,
-                                           int* level,
-                                           int raw,
-                                           const char* password));
+extern MINIZIP_API int unzOpenCurrentFile3 OF((unzFile file,
+                                               int* method,
+                                               int* level,
+                                               int raw,
+                                               const char* password));
 /*
-  Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+   Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
     if raw==1
-  *method will receive method of compression, *level will receive level of
+ * method will receive method of compression, *level will receive level of
      compression
-  note : you can set level parameter as NULL (if you did not want known level,
+   note : you can set level parameter as NULL (if you did not want known level,
          but you CANNOT set method parameter as NULL
-*/
+ */
 
 
 extern MINIZIP_API int unzCloseCurrentFile OF((unzFile file));
 /*
-  Close the file in zip opened with unzOpenCurrentFile
-  Return UNZ_CRCERROR if all the file was read but the CRC is not good
-*/
+   Close the file in zip opened with unzOpenCurrentFile
+   Return UNZ_CRCERROR if all the file was read but the CRC is not good
+ */
 
 extern MINIZIP_API int unzReadCurrentFile OF((unzFile file,
-                      voidp buf,
-                      unsigned len));
+                                              voidp buf,
+                                              unsigned len));
 /*
-  Read bytes from the current file (opened by unzOpenCurrentFile)
-  buf contain buffer where data must be copied
-  len the size of buf.
+   Read bytes from the current file (opened by unzOpenCurrentFile)
+   buf contain buffer where data must be copied
+   len the size of buf.
 
-  return the number of byte copied if somes bytes are copied
-  return 0 if the end of file was reached
-  return <0 with error code if there is an error
+   return the number of byte copied if somes bytes are copied
+   return 0 if the end of file was reached
+   return <0 with error code if there is an error
     (UNZ_ERRNO for IO error, or zLib error for uncompress error)
-*/
+ */
 
 extern z_off_t MINIZIP_API unztell OF((unzFile file));
 
 extern ZPOS64_T MINIZIP_API unztell64 OF((unzFile file));
 /*
-  Give the current position in uncompressed data
-*/
+   Give the current position in uncompressed data
+ */
 
 extern MINIZIP_API int unzeof OF((unzFile file));
 /*
-  return 1 if the end of file was reached, 0 elsewhere
-*/
+   return 1 if the end of file was reached, 0 elsewhere
+ */
 
 extern MINIZIP_API int unzGetLocalExtrafield OF((unzFile file,
-                                             voidp buf,
-                                             unsigned len));
+                                                 voidp buf,
+                                                 unsigned len));
 /*
-  Read extra field from the current file (opened by unzOpenCurrentFile)
-  This is the local-header version of the extra field (sometimes, there is
+   Read extra field from the current file (opened by unzOpenCurrentFile)
+   This is the local-header version of the extra field (sometimes, there is
     more info in the local-header version than in the central-header)
 
-  if buf==NULL, it return the size of the local extra field
+   if buf==NULL, it return the size of the local extra field
 
-  if buf!=NULL, len is the size of the buffer, the extra header is copied in
+   if buf!=NULL, len is the size of the buffer, the extra header is copied in
     buf.
-  the return value is the number of bytes copied in buf, or (if <0)
+   the return value is the number of bytes copied in buf, or (if <0)
     the error code
-*/
+ */
 
 /***************************************************************************/
 
@@ -436,4 +442,4 @@ extern MINIZIP_API int unzSetOffset (unzFile file, uLong pos);
 }
 #endif
 
-#endif /* _unz64_H */
+#endif // __MINIZIP_UNZIP_H__
diff --git a/SrcLib/core/fwZip/include/minizip/zip.h b/SrcLib/core/fwZip/include/minizip/zip.h
index a8d0af2..a06fca8 100644
--- a/SrcLib/core/fwZip/include/minizip/zip.h
+++ b/SrcLib/core/fwZip/include/minizip/zip.h
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* zip.h -- IO on .zip files using zlib
    Version 1.1, February 14h, 2010
    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
@@ -13,21 +19,21 @@
 
    Condition of use and distribution are the same than zlib :
 
-  This software is provided 'as-is', without any express or implied
-  warranty.  In no event will the authors be held liable for any damages
-  arising from the use of this software.
+   This software is provided 'as-is', without any express or implied
+   warranty.  In no event will the authors be held liable for any damages
+   arising from the use of this software.
 
-  Permission is granted to anyone to use this software for any purpose,
-  including commercial applications, and to alter it and redistribute it
-  freely, subject to the following restrictions:
+   Permission is granted to anyone to use this software for any purpose,
+   including commercial applications, and to alter it and redistribute it
+   freely, subject to the following restrictions:
 
-  1. The origin of this software must not be misrepresented; you must not
+   1. The origin of this software must not be misrepresented; you must not
      claim that you wrote the original software. If you use this software
      in a product, an acknowledgment in the product documentation would be
      appreciated but is not required.
-  2. Altered source versions must be plainly marked as such, and must not be
+   2. Altered source versions must be plainly marked as such, and must not be
      misrepresented as being the original software.
-  3. This notice may not be removed or altered from any source distribution.
+   3. This notice may not be removed or altered from any source distribution.
 
         ---------------------------------------------------------------------------
 
@@ -35,12 +41,12 @@
 
         See header of zip.h
 
-*/
+ */
 
-#include "minizip/export.h"
+#ifndef __MINIZIP_ZIP_H__
+#define __MINIZIP_ZIP_H__
 
-#ifndef _zip12_H
-#define _zip12_H
+#include "minizip/export.h"
 
 #ifdef __cplusplus
 extern "C" {
@@ -100,12 +106,12 @@ typedef struct tm_zip_s
 
 typedef struct
 {
-    tm_zip      tmz_date;       /* date in understandable format           */
-    uLong       dosDate;       /* if dos_date == 0, tmu_date is used      */
+    tm_zip tmz_date;            /* date in understandable format           */
+    uLong dosDate;             /* if dos_date == 0, tmu_date is used      */
 /*    uLong       flag;        */   /* general purpose bit flag        2 bytes */
 
-    uLong       internal_fa;    /* internal file attributes        2 bytes */
-    uLong       external_fa;    /* external file attributes        4 bytes */
+    uLong internal_fa;          /* internal file attributes        2 bytes */
+    uLong external_fa;          /* external file attributes        4 bytes */
 } zip_fileinfo;
 
 typedef const char* zipcharpc;
@@ -118,7 +124,7 @@ typedef const char* zipcharpc;
 extern MINIZIP_API zipFile zipOpen OF((const char *pathname, int append));
 extern MINIZIP_API zipFile zipOpen64 OF((const void *pathname, int append));
 /*
-  Create a zipfile.
+   Create a zipfile.
      pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
        an Unix computer "zlib/zlib113.zip".
      if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
@@ -129,236 +135,236 @@ extern MINIZIP_API zipFile zipOpen64 OF((const void *pathname, int append));
      If the zipfile cannot be opened, the return value is NULL.
      Else, the return value is a zipFile Handle, usable with other function
        of this zip package.
-*/
+ */
 
 /* Note : there is no delete function into a zipfile.
    If you want delete file into a zipfile, you must open a zipfile, and create another
    Of couse, you can use RAW reading and writing to copy the file you did not want delte
-*/
+ */
 
 extern MINIZIP_API zipFile zipOpen2 OF((const char *pathname,
-                                   int append,
-                                   zipcharpc* globalcomment,
-                                   zlib_filefunc_def* pzlib_filefunc_def));
+                                        int append,
+                                        zipcharpc* globalcomment,
+                                        zlib_filefunc_def* pzlib_filefunc_def));
 
 extern MINIZIP_API zipFile zipOpen2_64 OF((const void *pathname,
-                                   int append,
-                                   zipcharpc* globalcomment,
-                                   zlib_filefunc64_def* pzlib_filefunc_def));
+                                           int append,
+                                           zipcharpc* globalcomment,
+                                           zlib_filefunc64_def* pzlib_filefunc_def));
 
 extern MINIZIP_API int zipOpenNewFileInZip OF((zipFile file,
-                       const char* filename,
-                       const zip_fileinfo* zipfi,
-                       const void* extrafield_local,
-                       uInt size_extrafield_local,
-                       const void* extrafield_global,
-                       uInt size_extrafield_global,
-                       const char* comment,
-                       int method,
-                       int level));
+                                               const char* filename,
+                                               const zip_fileinfo* zipfi,
+                                               const void* extrafield_local,
+                                               uInt size_extrafield_local,
+                                               const void* extrafield_global,
+                                               uInt size_extrafield_global,
+                                               const char* comment,
+                                               int method,
+                                               int level));
 
 extern MINIZIP_API int zipOpenNewFileInZip64 OF((zipFile file,
-                       const char* filename,
-                       const zip_fileinfo* zipfi,
-                       const void* extrafield_local,
-                       uInt size_extrafield_local,
-                       const void* extrafield_global,
-                       uInt size_extrafield_global,
-                       const char* comment,
-                       int method,
-                       int level,
-                       int zip64));
+                                                 const char* filename,
+                                                 const zip_fileinfo* zipfi,
+                                                 const void* extrafield_local,
+                                                 uInt size_extrafield_local,
+                                                 const void* extrafield_global,
+                                                 uInt size_extrafield_global,
+                                                 const char* comment,
+                                                 int method,
+                                                 int level,
+                                                 int zip64));
 
 /*
-  Open a file in the ZIP for writing.
-  filename : the filename in zip (if NULL, '-' without quote will be used
-  *zipfi contain supplemental information
-  if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
+   Open a file in the ZIP for writing.
+   filename : the filename in zip (if NULL, '-' without quote will be used
+ * zipfi contain supplemental information
+   if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
     contains the extrafield data the the local header
-  if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
+   if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
     contains the extrafield data the the local header
-  if comment != NULL, comment contain the comment string
-  method contain the compression method (0 for store, Z_DEFLATED for deflate)
-  level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
-  zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
+   if comment != NULL, comment contain the comment string
+   method contain the compression method (0 for store, Z_DEFLATED for deflate)
+   level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
+   zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
                     this MUST be '1' if the uncompressed size is >= 0xffffffff.
 
-*/
+ */
 
 
 extern MINIZIP_API int zipOpenNewFileInZip2 OF((zipFile file,
-                                            const char* filename,
-                                            const zip_fileinfo* zipfi,
-                                            const void* extrafield_local,
-                                            uInt size_extrafield_local,
-                                            const void* extrafield_global,
-                                            uInt size_extrafield_global,
-                                            const char* comment,
-                                            int method,
-                                            int level,
-                                            int raw));
+                                                const char* filename,
+                                                const zip_fileinfo* zipfi,
+                                                const void* extrafield_local,
+                                                uInt size_extrafield_local,
+                                                const void* extrafield_global,
+                                                uInt size_extrafield_global,
+                                                const char* comment,
+                                                int method,
+                                                int level,
+                                                int raw));
 
 
 extern MINIZIP_API int zipOpenNewFileInZip2_64 OF((zipFile file,
-                                            const char* filename,
-                                            const zip_fileinfo* zipfi,
-                                            const void* extrafield_local,
-                                            uInt size_extrafield_local,
-                                            const void* extrafield_global,
-                                            uInt size_extrafield_global,
-                                            const char* comment,
-                                            int method,
-                                            int level,
-                                            int raw,
-                                            int zip64));
+                                                   const char* filename,
+                                                   const zip_fileinfo* zipfi,
+                                                   const void* extrafield_local,
+                                                   uInt size_extrafield_local,
+                                                   const void* extrafield_global,
+                                                   uInt size_extrafield_global,
+                                                   const char* comment,
+                                                   int method,
+                                                   int level,
+                                                   int raw,
+                                                   int zip64));
 /*
-  Same than zipOpenNewFileInZip, except if raw=1, we write raw file
+   Same than zipOpenNewFileInZip, except if raw=1, we write raw file
  */
 
 extern MINIZIP_API int zipOpenNewFileInZip3 OF((zipFile file,
-                                            const char* filename,
-                                            const zip_fileinfo* zipfi,
-                                            const void* extrafield_local,
-                                            uInt size_extrafield_local,
-                                            const void* extrafield_global,
-                                            uInt size_extrafield_global,
-                                            const char* comment,
-                                            int method,
-                                            int level,
-                                            int raw,
-                                            int windowBits,
-                                            int memLevel,
-                                            int strategy,
-                                            const char* password,
-                                            uLong crcForCrypting));
+                                                const char* filename,
+                                                const zip_fileinfo* zipfi,
+                                                const void* extrafield_local,
+                                                uInt size_extrafield_local,
+                                                const void* extrafield_global,
+                                                uInt size_extrafield_global,
+                                                const char* comment,
+                                                int method,
+                                                int level,
+                                                int raw,
+                                                int windowBits,
+                                                int memLevel,
+                                                int strategy,
+                                                const char* password,
+                                                uLong crcForCrypting));
 
 extern MINIZIP_API int zipOpenNewFileInZip3_64 OF((zipFile file,
-                                            const char* filename,
-                                            const zip_fileinfo* zipfi,
-                                            const void* extrafield_local,
-                                            uInt size_extrafield_local,
-                                            const void* extrafield_global,
-                                            uInt size_extrafield_global,
-                                            const char* comment,
-                                            int method,
-                                            int level,
-                                            int raw,
-                                            int windowBits,
-                                            int memLevel,
-                                            int strategy,
-                                            const char* password,
-                                            uLong crcForCrypting,
-                                            int zip64
-                                            ));
+                                                   const char* filename,
+                                                   const zip_fileinfo* zipfi,
+                                                   const void* extrafield_local,
+                                                   uInt size_extrafield_local,
+                                                   const void* extrafield_global,
+                                                   uInt size_extrafield_global,
+                                                   const char* comment,
+                                                   int method,
+                                                   int level,
+                                                   int raw,
+                                                   int windowBits,
+                                                   int memLevel,
+                                                   int strategy,
+                                                   const char* password,
+                                                   uLong crcForCrypting,
+                                                   int zip64
+                                                   ));
 
 /*
-  Same than zipOpenNewFileInZip2, except
+   Same than zipOpenNewFileInZip2, except
     windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
     password : crypting password (NULL for no crypting)
     crcForCrypting : crc of file to compress (needed for crypting)
  */
 
 extern MINIZIP_API int zipOpenNewFileInZip4 OF((zipFile file,
-                                            const char* filename,
-                                            const zip_fileinfo* zipfi,
-                                            const void* extrafield_local,
-                                            uInt size_extrafield_local,
-                                            const void* extrafield_global,
-                                            uInt size_extrafield_global,
-                                            const char* comment,
-                                            int method,
-                                            int level,
-                                            int raw,
-                                            int windowBits,
-                                            int memLevel,
-                                            int strategy,
-                                            const char* password,
-                                            uLong crcForCrypting,
-                                            uLong versionMadeBy,
-                                            uLong flagBase
-                                            ));
+                                                const char* filename,
+                                                const zip_fileinfo* zipfi,
+                                                const void* extrafield_local,
+                                                uInt size_extrafield_local,
+                                                const void* extrafield_global,
+                                                uInt size_extrafield_global,
+                                                const char* comment,
+                                                int method,
+                                                int level,
+                                                int raw,
+                                                int windowBits,
+                                                int memLevel,
+                                                int strategy,
+                                                const char* password,
+                                                uLong crcForCrypting,
+                                                uLong versionMadeBy,
+                                                uLong flagBase
+                                                ));
 
 
 extern MINIZIP_API int zipOpenNewFileInZip4_64 OF((zipFile file,
-                                            const char* filename,
-                                            const zip_fileinfo* zipfi,
-                                            const void* extrafield_local,
-                                            uInt size_extrafield_local,
-                                            const void* extrafield_global,
-                                            uInt size_extrafield_global,
-                                            const char* comment,
-                                            int method,
-                                            int level,
-                                            int raw,
-                                            int windowBits,
-                                            int memLevel,
-                                            int strategy,
-                                            const char* password,
-                                            uLong crcForCrypting,
-                                            uLong versionMadeBy,
-                                            uLong flagBase,
-                                            int zip64
-                                            ));
+                                                   const char* filename,
+                                                   const zip_fileinfo* zipfi,
+                                                   const void* extrafield_local,
+                                                   uInt size_extrafield_local,
+                                                   const void* extrafield_global,
+                                                   uInt size_extrafield_global,
+                                                   const char* comment,
+                                                   int method,
+                                                   int level,
+                                                   int raw,
+                                                   int windowBits,
+                                                   int memLevel,
+                                                   int strategy,
+                                                   const char* password,
+                                                   uLong crcForCrypting,
+                                                   uLong versionMadeBy,
+                                                   uLong flagBase,
+                                                   int zip64
+                                                   ));
 /*
-  Same than zipOpenNewFileInZip4, except
+   Same than zipOpenNewFileInZip4, except
     versionMadeBy : value for Version made by field
     flag : value for flag field (compression level info will be added)
  */
 
 
 extern MINIZIP_API int zipWriteInFileInZip OF((zipFile file,
-                       const void* buf,
-                       unsigned len));
+                                               const void* buf,
+                                               unsigned len));
 /*
-  Write data in the zipfile
-*/
+   Write data in the zipfile
+ */
 
 extern MINIZIP_API int zipCloseFileInZip OF((zipFile file));
 /*
-  Close the current file in the zipfile
-*/
+   Close the current file in the zipfile
+ */
 
 extern MINIZIP_API int zipCloseFileInZipRaw OF((zipFile file,
-                                            uLong uncompressed_size,
-                                            uLong crc32));
+                                                uLong uncompressed_size,
+                                                uLong crc32));
 
 extern MINIZIP_API int zipCloseFileInZipRaw64 OF((zipFile file,
-                                            ZPOS64_T uncompressed_size,
-                                            uLong crc32));
+                                                  ZPOS64_T uncompressed_size,
+                                                  uLong crc32));
 
 /*
-  Close the current file in the zipfile, for file opened with
+   Close the current file in the zipfile, for file opened with
     parameter raw=1 in zipOpenNewFileInZip2
-  uncompressed_size and crc32 are value for the uncompressed size
-*/
+   uncompressed_size and crc32 are value for the uncompressed size
+ */
 
 extern MINIZIP_API int zipClose OF((zipFile file,
-                const char* global_comment));
+                                    const char* global_comment));
 /*
-  Close the zipfile
-*/
+   Close the zipfile
+ */
 
 
 extern MINIZIP_API int zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
 /*
-  zipRemoveExtraInfoBlock -  Added by Mathias Svensson
+   zipRemoveExtraInfoBlock -  Added by Mathias Svensson
 
-  Remove extra information block from a extra information data for the local file header or central directory header
+   Remove extra information block from a extra information data for the local file header or central directory header
 
-  It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
+   It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
 
-  0x0001 is the signature header for the ZIP64 extra information blocks
+   0x0001 is the signature header for the ZIP64 extra information blocks
 
-  usage.
+   usage.
                         Remove ZIP64 Extra information from a central director extra field data
               zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
 
                         Remove ZIP64 Extra information from a Local File Header extra field data
         zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
-*/
+ */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* _zip64_H */
+#endif //__MINIZIP_ZIP_H__
diff --git a/SrcLib/core/fwZip/src/fwZip/ReadDirArchive.cpp b/SrcLib/core/fwZip/src/fwZip/ReadDirArchive.cpp
index 0d9531b..8eb7652 100644
--- a/SrcLib/core/fwZip/src/fwZip/ReadDirArchive.cpp
+++ b/SrcLib/core/fwZip/src/fwZip/ReadDirArchive.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,8 @@ namespace fwZip
 
 ReadDirArchive::ReadDirArchive( const ::boost::filesystem::path &archive ) :
     m_archive(archive)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
@@ -33,24 +34,17 @@ ReadDirArchive::~ReadDirArchive()
 SPTR(std::istream) ReadDirArchive::getFile(const ::boost::filesystem::path &path)
 {
     FW_RAISE_EXCEPTION_IF(
-            ::fwZip::exception::Read("File '" +  path.string() + "' "
-                                     "in archive '" + m_archive.string() + "' doesn't exist."),
-             !this->exists(m_archive / path));
+        ::fwZip::exception::Read("File '" +  path.string() + "' "
+                                 "in archive '" + m_archive.string() + "' doesn't exist."),
+        !::boost::filesystem::exists(m_archive / path));
 
-    SPTR(std::ifstream) is = ::boost::make_shared< std::ifstream >();
+    SPTR(std::ifstream) is = std::make_shared< std::ifstream >();
     is->open((m_archive / path).string().c_str(), std::fstream::binary | std::fstream::in);
     return is;
 }
 
 //-----------------------------------------------------------------------------
 
-bool ReadDirArchive::exists(const ::boost::filesystem::path &path)
-{
-    return !::boost::filesystem::exists(m_archive / path);
-}
-
-//-----------------------------------------------------------------------------
-
 const ::boost::filesystem::path ReadDirArchive::getArchivePath() const
 {
     return m_archive;
diff --git a/SrcLib/core/fwZip/src/fwZip/ReadZipArchive.cpp b/SrcLib/core/fwZip/src/fwZip/ReadZipArchive.cpp
index 1517359..aa9940f 100644
--- a/SrcLib/core/fwZip/src/fwZip/ReadZipArchive.cpp
+++ b/SrcLib/core/fwZip/src/fwZip/ReadZipArchive.cpp
@@ -1,12 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <iosfwd>    // streamsize
 
-#include <boost/make_shared.hpp>
 
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/operations.hpp>
@@ -29,14 +28,14 @@ namespace fwZip
 void * openReadZipArchive( const ::boost::filesystem::path &archive )
 {
     FW_RAISE_EXCEPTION_IF(
-            ::fwZip::exception::Read("Archive '" + archive.string() + "' doesn't exist."),
-            !::boost::filesystem::exists(archive));
+        ::fwZip::exception::Read("Archive '" + archive.string() + "' doesn't exist."),
+        !::boost::filesystem::exists(archive));
 
     void * zip = unzOpen(archive.string().c_str());
 
     FW_RAISE_EXCEPTION_IF(
-            ::fwZip::exception::Read("Archive '" + archive.string() + "' cannot be opened."),
-            zip == NULL);
+        ::fwZip::exception::Read("Archive '" + archive.string() + "' cannot be opened."),
+        zip == NULL);
 
     return zip;
 }
@@ -47,7 +46,15 @@ class ZipSource
 {
 public:
     typedef char char_type;
-    typedef ::boost::iostreams::source_tag  category;
+    typedef ::boost::iostreams::source_tag category;
+
+    ZipSource( const ::boost::filesystem::path &archive) :
+        m_zipDescriptor( openReadZipArchive(archive), &unzClose ),
+        m_archive(archive)
+    {
+
+    }
+
 
     ZipSource( const ::boost::filesystem::path &archive, const ::boost::filesystem::path &path ) :
         m_zipDescriptor( openReadZipArchive(archive), &unzClose ),
@@ -57,27 +64,55 @@ public:
         int nRet = unzLocateFile(m_zipDescriptor.get(), path.string().c_str(), 0);
 
         FW_RAISE_EXCEPTION_IF(
-                              ::fwZip::exception::Read("File '" +  path.string() + "' in archive '" +
-                                                       archive.string() + "' doesn't exist."),
-                              nRet != UNZ_OK);
+            ::fwZip::exception::Read("File '" +  path.string() + "' in archive '" +
+                                     archive.string() + "' doesn't exist."),
+            nRet != UNZ_OK);
 
         nRet = unzOpenCurrentFile(m_zipDescriptor.get());
         FW_RAISE_EXCEPTION_IF(
-                              ::fwZip::exception::Read("Cannot retrieve file '" + path.string() +
-                                                       "' in archive '"+ archive.string() + "'."),
-                              nRet != UNZ_OK);
+            ::fwZip::exception::Read("Cannot retrieve file '" + path.string() +
+                                     "' in archive '"+ archive.string() + "'."),
+            nRet != UNZ_OK);
     }
 
+
     std::streamsize read(char* s, std::streamsize n)
     {
-        int nRet = unzReadCurrentFile(m_zipDescriptor.get(), s, n);
+        std::streamsize nRet = unzReadCurrentFile(m_zipDescriptor.get(), s, static_cast< unsigned int >(n));
         FW_RAISE_EXCEPTION_IF(
-                            ::fwZip::exception::Read("Error occurred while reading archive '" + m_archive.string()
-                                                     + ":" + m_path.string() + "'."),
-                            nRet < 0);
+            ::fwZip::exception::Read("Error occurred while reading archive '" + m_archive.string()
+                                     + ":" + m_path.string() + "'."),
+            nRet < 0);
         return nRet;
     }
 
+    std::string getComment()
+    {
+        unz_global_info* info = new unz_global_info;
+
+        std::streamsize nRet = unzGetGlobalInfo(m_zipDescriptor.get(), info);
+
+        FW_RAISE_EXCEPTION_IF(
+            ::fwZip::exception::Read("Error occurred while reading information archive '" +
+                                     m_archive.string() + "'."),
+            nRet < 0);
+
+        char* comment = new char[info->size_comment];
+        nRet = unzGetGlobalComment(m_zipDescriptor.get(), comment, info->size_comment);
+
+        FW_RAISE_EXCEPTION_IF(
+            ::fwZip::exception::Read("Error occurred while reading archive's global comment '" +
+                                     m_archive.string() + "'."),
+            nRet < 0);
+
+        std::string stringComment(comment, info->size_comment);
+
+        delete(info);
+        delete(comment);
+
+        return stringComment;
+    }
+
 protected:
     SPTR(void) m_zipDescriptor;
     ::boost::filesystem::path m_archive;
@@ -90,18 +125,27 @@ protected:
 
 ReadZipArchive::ReadZipArchive( const ::boost::filesystem::path &archive ) :
     m_archive(archive)
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 SPTR(std::istream) ReadZipArchive::getFile(const ::boost::filesystem::path &path)
 {
     SPTR(::boost::iostreams::stream<ZipSource>) is
-        = ::boost::make_shared< ::boost::iostreams::stream<ZipSource> >(m_archive, path);
+        = std::make_shared< ::boost::iostreams::stream<ZipSource> >(m_archive, path);
 
     return is;
 }
 
+//-----------------------------------------------------------------------------
+
+std::string ReadZipArchive::getComment()
+{
+    SPTR(ZipSource) zip = std::make_shared<ZipSource>(m_archive);
+
+    return zip->getComment();
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/core/fwZip/src/fwZip/WriteDirArchive.cpp b/SrcLib/core/fwZip/src/fwZip/WriteDirArchive.cpp
index ffedc25..b2fc4df 100644
--- a/SrcLib/core/fwZip/src/fwZip/WriteDirArchive.cpp
+++ b/SrcLib/core/fwZip/src/fwZip/WriteDirArchive.cpp
@@ -1,23 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwZip/exception/Write.hpp"
+
+#include "minizip/zip.h"
+#include "fwZip/WriteDirArchive.hpp"
+
+#include <fwCore/exceptionmacros.hpp>
+
 #include <fstream>
 
-#include <boost/make_shared.hpp>
 
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/operations.hpp>
 
 #include <boost/iostreams/stream_buffer.hpp>
 
-#include <fwCore/exceptionmacros.hpp>
-
-#include "minizip/zip.h"
-#include "fwZip/WriteDirArchive.hpp"
-#include "fwZip/exception/Write.hpp"
 
 namespace fwZip
 {
@@ -36,42 +37,52 @@ WriteDirArchive::WriteDirArchive( const ::boost::filesystem::path &archive ) :
 //-----------------------------------------------------------------------------
 
 WriteDirArchive::~WriteDirArchive()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 SPTR(std::ostream) WriteDirArchive::createFile(const ::boost::filesystem::path &path)
 {
-    const ::boost::filesystem::path file = m_archive / path;
+    const ::boost::filesystem::path file       = m_archive / path;
     const ::boost::filesystem::path parentFile = file.parent_path();
     if(!::boost::filesystem::exists(parentFile))
     {
         ::boost::filesystem::create_directories(parentFile);
     }
 
-    SPTR(std::ofstream) os = ::boost::make_shared< std::ofstream >();
+    SPTR(std::ofstream) os = std::make_shared< std::ofstream >();
     os->open(file.string().c_str(), std::fstream::binary | std::fstream::out | std::fstream::trunc);
     return os;
 }
 
 //-----------------------------------------------------------------------------
 
-void WriteDirArchive::putFile(const ::boost::filesystem::path &sourceFile, const ::boost::filesystem::path &path)
+void WriteDirArchive::putFile(const ::boost::filesystem::path &sourceFile,
+                              const ::boost::filesystem::path &destinationFile)
 {
-    const ::boost::filesystem::path fileDest = m_archive / path;
-    if (! ::boost::filesystem::exists(fileDest))
+    const ::boost::filesystem::path fileDest = m_archive / destinationFile;
+    if (!::boost::filesystem::exists(fileDest))
     {
         const ::boost::filesystem::path parentFile = fileDest.parent_path();
         if(!::boost::filesystem::exists(parentFile))
         {
             ::boost::filesystem::create_directories(parentFile);
         }
-
         ::boost::system::error_code err;
         ::boost::filesystem::create_hard_link( sourceFile, fileDest, err );
         if (err.value() != 0)
         {
-            ::boost::filesystem::copy_file( sourceFile, fileDest );
+            // Use std stream instead of boost:::filesystem::copy_file
+            // because fwZip is build using std=c++11 and using copy_file also requires boost built
+            // with std=c++11 (for now in c++0x).
+            std::string strSource = sourceFile.string();
+            std::string strDest   = fileDest.string();
+            std::ifstream src(strSource.c_str(), std::ios::binary);
+            std::ofstream dst(strDest.c_str(),   std::ios::binary);
+
+            dst << src.rdbuf();
+
         }
     }
 }
diff --git a/SrcLib/core/fwZip/src/fwZip/WriteZipArchive.cpp b/SrcLib/core/fwZip/src/fwZip/WriteZipArchive.cpp
index 1b2db6e..53c5ca6 100644
--- a/SrcLib/core/fwZip/src/fwZip/WriteZipArchive.cpp
+++ b/SrcLib/core/fwZip/src/fwZip/WriteZipArchive.cpp
@@ -1,13 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <iosfwd>    // streamsize
 #include <fstream>
+#include <functional>
 
-#include <boost/make_shared.hpp>
 
 #include <boost/iostreams/stream.hpp>
 #include <boost/iostreams/stream_buffer.hpp>
@@ -33,12 +33,12 @@ namespace fwZip
 
 zipFile openWriteZipArchive( const ::boost::filesystem::path &archive )
 {
-    int append = (::boost::filesystem::exists(archive)) ? APPEND_STATUS_ADDINZIP : APPEND_STATUS_CREATE;
+    int append  = (::boost::filesystem::exists(archive)) ? APPEND_STATUS_ADDINZIP : APPEND_STATUS_CREATE;
     zipFile zip = zipOpen(archive.string().c_str(), append);
 
     FW_RAISE_EXCEPTION_IF(
-                ::fwZip::exception::Write("Archive '" + archive.string() + "' cannot be opened."),
-                 zip == NULL);
+        ::fwZip::exception::Write("Archive '" + archive.string() + "' cannot be opened."),
+        zip == NULL);
 
     return zip;
 }
@@ -50,10 +50,10 @@ zipFile openWriteZipArchive( const ::boost::filesystem::path &archive )
  * @note Z_BEST_SPEED compression level for '.raw' files,
  *       Z_NO_COMPRESSION for 'raw.gz', Z_DEFAULT_COMPRESSION otherwise.
  */
-int openFile(zipFile zipDescriptor, const ::boost::filesystem::path &path)
+std::streamsize openFile(zipFile zipDescriptor, const ::boost::filesystem::path &path)
 {
     const std::string extension = path.extension().string();
-    int compressLevel = Z_DEFAULT_COMPRESSION;
+    int compressLevel           = Z_DEFAULT_COMPRESSION;
     if(extension == ".raw")
     {
         compressLevel = Z_BEST_SPEED;
@@ -68,7 +68,7 @@ int openFile(zipFile zipDescriptor, const ::boost::filesystem::path &path)
 
     ::boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
     std::tm ptm = ::boost::posix_time::to_tm(now);
-    zfi.dosDate = 0;
+    zfi.dosDate          = 0;
     zfi.tmz_date.tm_year = ptm.tm_year;
     zfi.tmz_date.tm_mon  = ptm.tm_mon;
     zfi.tmz_date.tm_mday = ptm.tm_mday;
@@ -76,54 +76,53 @@ int openFile(zipFile zipDescriptor, const ::boost::filesystem::path &path)
     zfi.tmz_date.tm_min  = ptm.tm_min;
     zfi.tmz_date.tm_sec  = ptm.tm_sec;
 
-    int nRet = zipOpenNewFileInZip(zipDescriptor,
-            path.generic_string().c_str(),
-            &zfi,
-            NULL,
-            0,
-            NULL,
-            0,
-            NULL,
-            Z_DEFLATED,
-            compressLevel);
+    std::streamsize nRet = zipOpenNewFileInZip(zipDescriptor,
+                                               path.generic_string().c_str(),
+                                               &zfi,
+                                               NULL,
+                                               0,
+                                               NULL,
+                                               0,
+                                               NULL,
+                                               Z_DEFLATED,
+                                               compressLevel);
 
     return nRet;
 }
 
 //-----------------------------------------------------------------------------
 
-void closeZipArchive(zipFile zipDescriptor)
-{
-    zipClose(zipDescriptor, NULL);
-}
-
-//-----------------------------------------------------------------------------
-
 class ZipSink
 {
 public:
     typedef char char_type;
-    typedef ::boost::iostreams::sink_tag  category;
-
-    ZipSink( const ::boost::filesystem::path &archive, const ::boost::filesystem::path &path ) :
-        m_zipDescriptor( openWriteZipArchive(archive), &closeZipArchive ),
+    typedef ::boost::iostreams::sink_tag category;
+
+    ZipSink( const ::boost::filesystem::path &archive, const ::boost::filesystem::path &path,
+             const std::string comment ) :
+        m_zipDescriptor(
+            openWriteZipArchive(archive),
+            [comment](zipFile zipDescriptor)
+        {
+            zipClose(zipDescriptor, comment.c_str());
+        }),
         m_archive(archive),
         m_path(path)
     {
-        int nRet = openFile(m_zipDescriptor.get(), m_path);
+        std::streamsize nRet = openFile(m_zipDescriptor.get(), m_path);
         FW_RAISE_EXCEPTION_IF(
-                              ::fwZip::exception::Write("Cannot open file '" + path.string() +
-                                                       "' in archive '"+ archive.string() + "'."),
-                              nRet != Z_OK);
+            ::fwZip::exception::Write("Cannot open file '" + path.string() +
+                                      "' in archive '"+ archive.string() + "'."),
+            nRet != Z_OK);
     }
 
     std::streamsize write(const char* s, std::streamsize n)
     {
-        int nRet = zipWriteInFileInZip(m_zipDescriptor.get(), s, n);
+        std::streamsize nRet = zipWriteInFileInZip(m_zipDescriptor.get(), s, static_cast< unsigned int >(n));
         FW_RAISE_EXCEPTION_IF(
-                        ::fwZip::exception::Write("Error occurred while writing archive '" + m_archive.string()
-                                                     + ":" + m_path.string() + "'."),
-                         nRet < 0);
+            ::fwZip::exception::Write("Error occurred while writing archive '" + m_archive.string()
+                                      + ":" + m_path.string() + "'."),
+            nRet < 0);
         return n;
     }
 
@@ -136,20 +135,31 @@ protected:
 //-----------------------------------------------------------------------------
 
 WriteZipArchive::WriteZipArchive( const ::boost::filesystem::path &archive ) :
-    m_archive(archive)
-{}
+    m_archive(archive),
+    m_comment("")
+{
+}
+
+//-----------------------------------------------------------------------------
+
+WriteZipArchive::WriteZipArchive( const ::boost::filesystem::path &archive, const std::string& comment ) :
+    m_archive(archive),
+    m_comment(comment)
+{
+}
 
 //-----------------------------------------------------------------------------
 
 WriteZipArchive::~WriteZipArchive()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 SPTR(std::ostream) WriteZipArchive::createFile(const ::boost::filesystem::path &path)
 {
     SPTR(::boost::iostreams::stream<ZipSink>) os
-        = ::boost::make_shared< ::boost::iostreams::stream<ZipSink> >(m_archive, path);
+        = std::make_shared< ::boost::iostreams::stream<ZipSink> >(m_archive, path, m_comment);
     return os;
 }
 
@@ -159,7 +169,7 @@ void WriteZipArchive::putFile(const ::boost::filesystem::path &sourceFile, const
 {
     std::ifstream is(sourceFile.string().c_str(), std::ios::binary);
     FW_RAISE_EXCEPTION_IF(::fwZip::exception::Write("Source file '" + sourceFile.string() + "' cannot be opened."),
-                         !is.good());
+                          !is.good());
 
     {
         SPTR(std::ostream) os = this->createFile(path);
@@ -172,11 +182,11 @@ void WriteZipArchive::putFile(const ::boost::filesystem::path &sourceFile, const
 
 bool WriteZipArchive::createDir(const ::boost::filesystem::path &path)
 {
-    zipFile zipDescriptor = openWriteZipArchive(m_archive);
-    const int nRet = openFile(zipDescriptor, path);
+    zipFile zipDescriptor      = openWriteZipArchive(m_archive);
+    const std::streamsize nRet = openFile(zipDescriptor, path);
 
     zipCloseFileInZip(zipDescriptor);
-    zipClose(zipDescriptor, NULL);
+    zipClose(zipDescriptor, m_comment.c_str());
 
     return nRet == ZIP_OK;
 }
diff --git a/SrcLib/core/fwZip/src/fwZip/exception/Read.cpp b/SrcLib/core/fwZip/src/fwZip/exception/Read.cpp
index 430a954..29f23ec 100644
--- a/SrcLib/core/fwZip/src/fwZip/exception/Read.cpp
+++ b/SrcLib/core/fwZip/src/fwZip/exception/Read.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 Read::Read ( const std::string &err ) : ::fwCore::Exception(err)
-{}
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwZip/src/fwZip/exception/Write.cpp b/SrcLib/core/fwZip/src/fwZip/exception/Write.cpp
index d22c8b6..99d2a2f 100644
--- a/SrcLib/core/fwZip/src/fwZip/exception/Write.cpp
+++ b/SrcLib/core/fwZip/src/fwZip/exception/Write.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -16,7 +16,8 @@ namespace exception
 {
 
 Write::Write ( const std::string &err ) : ::fwCore::Exception(err)
-{}
+{
+}
 
 } // namespace exception
 
diff --git a/SrcLib/core/fwZip/src/minizip/ioapi.c b/SrcLib/core/fwZip/src/minizip/ioapi.c
index 5469bff..f4a0e39 100644
--- a/SrcLib/core/fwZip/src/minizip/ioapi.c
+++ b/SrcLib/core/fwZip/src/minizip/ioapi.c
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* ioapi.h -- IO base function header for compress/uncompress .zip
    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
 
@@ -8,13 +14,14 @@
 
          For more info read MiniZip_info.txt
 
-*/
+ */
 
 #if (defined(_WIN32))
         #define _CRT_SECURE_NO_WARNINGS
 #endif
 
-#ifdef __APPLE__
+//FIXME : ANDROID does not yet support 64 bit functions
+#if defined(__APPLE__) || defined(ANDROID)
 // In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
 #define FOPEN_FUNC(filename, mode) fopen(filename, mode)
 #define FTELLO_FUNC(stream) ftello(stream)
@@ -31,7 +38,9 @@
 voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
 {
     if (pfilefunc->zfile_func64.zopen64_file != NULL)
-        return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
+    {
+        return (*(pfilefunc->zfile_func64.zopen64_file))(pfilefunc->zfile_func64.opaque,filename,mode);
+    }
     else
     {
         return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
@@ -41,90 +50,119 @@ voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename
 long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
 {
     if (pfilefunc->zfile_func64.zseek64_file != NULL)
-        return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
+    {
+        return (*(pfilefunc->zfile_func64.zseek64_file))(pfilefunc->zfile_func64.opaque,filestream,offset,origin);
+    }
     else
     {
         uLong offsetTruncated = (uLong)offset;
         if (offsetTruncated != offset)
+        {
             return -1;
+        }
         else
+        {
             return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
+        }
     }
 }
 
 ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
 {
     if (pfilefunc->zfile_func64.zseek64_file != NULL)
-        return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
+    {
+        return (*(pfilefunc->zfile_func64.ztell64_file))(pfilefunc->zfile_func64.opaque,filestream);
+    }
     else
     {
         uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
         if ((tell_uLong) == ((uLong)-1))
+        {
             return (ZPOS64_T)-1;
+        }
         else
+        {
             return tell_uLong;
+        }
     }
 }
 
-void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
+void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,
+                                                 const zlib_filefunc_def* p_filefunc32)
 {
     p_filefunc64_32->zfile_func64.zopen64_file = NULL;
-    p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
-    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
-    p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
-    p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
+    p_filefunc64_32->zopen32_file              = p_filefunc32->zopen_file;
+    p_filefunc64_32->zfile_func64.zerror_file  = p_filefunc32->zerror_file;
+    p_filefunc64_32->zfile_func64.zread_file   = p_filefunc32->zread_file;
+    p_filefunc64_32->zfile_func64.zwrite_file  = p_filefunc32->zwrite_file;
     p_filefunc64_32->zfile_func64.ztell64_file = NULL;
     p_filefunc64_32->zfile_func64.zseek64_file = NULL;
-    p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
-    p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
-    p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
-    p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
-    p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
+    p_filefunc64_32->zfile_func64.zclose_file  = p_filefunc32->zclose_file;
+    p_filefunc64_32->zfile_func64.zerror_file  = p_filefunc32->zerror_file;
+    p_filefunc64_32->zfile_func64.opaque       = p_filefunc32->opaque;
+    p_filefunc64_32->zseek32_file              = p_filefunc32->zseek_file;
+    p_filefunc64_32->ztell32_file              = p_filefunc32->ztell_file;
 }
 
 
 
-static voidpf  ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
-static uLong   ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
-static uLong   ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
+static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
+static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
 static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
-static long    ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
-static int     ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
-static int     ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
+static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
+static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
 
 static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
 {
-    FILE* file = NULL;
+    FILE* file             = NULL;
     const char* mode_fopen = NULL;
     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+    {
         mode_fopen = "rb";
+    }
     else
     if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+    {
         mode_fopen = "r+b";
+    }
     else
     if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+    {
         mode_fopen = "wb";
+    }
 
     if ((filename!=NULL) && (mode_fopen != NULL))
+    {
         file = fopen(filename, mode_fopen);
+    }
     return file;
 }
 
 static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
 {
-    FILE* file = NULL;
+    FILE* file             = NULL;
     const char* mode_fopen = NULL;
     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+    {
         mode_fopen = "rb";
+    }
     else
     if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+    {
         mode_fopen = "r+b";
+    }
     else
     if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+    {
         mode_fopen = "wb";
+    }
 
     if ((filename!=NULL) && (mode_fopen != NULL))
+    {
         file = FOPEN_FUNC((const char*)filename, mode_fopen);
+    }
     return file;
 }
 
@@ -158,50 +196,54 @@ static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
     return ret;
 }
 
-static long ZCALLBACK fseek_file_func (voidpf  opaque, voidpf stream, uLong offset, int origin)
+static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
 {
-    int fseek_origin=0;
+    int fseek_origin = 0;
     long ret;
     switch (origin)
     {
-    case ZLIB_FILEFUNC_SEEK_CUR :
-        fseek_origin = SEEK_CUR;
-        break;
-    case ZLIB_FILEFUNC_SEEK_END :
-        fseek_origin = SEEK_END;
-        break;
-    case ZLIB_FILEFUNC_SEEK_SET :
-        fseek_origin = SEEK_SET;
-        break;
-    default: return -1;
+        case ZLIB_FILEFUNC_SEEK_CUR:
+            fseek_origin = SEEK_CUR;
+            break;
+        case ZLIB_FILEFUNC_SEEK_END:
+            fseek_origin = SEEK_END;
+            break;
+        case ZLIB_FILEFUNC_SEEK_SET:
+            fseek_origin = SEEK_SET;
+            break;
+        default: return -1;
     }
     ret = 0;
     if (fseek((FILE *)stream, offset, fseek_origin) != 0)
+    {
         ret = -1;
+    }
     return ret;
 }
 
-static long ZCALLBACK fseek64_file_func (voidpf  opaque, voidpf stream, ZPOS64_T offset, int origin)
+static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
 {
-    int fseek_origin=0;
+    int fseek_origin = 0;
     long ret;
     switch (origin)
     {
-    case ZLIB_FILEFUNC_SEEK_CUR :
-        fseek_origin = SEEK_CUR;
-        break;
-    case ZLIB_FILEFUNC_SEEK_END :
-        fseek_origin = SEEK_END;
-        break;
-    case ZLIB_FILEFUNC_SEEK_SET :
-        fseek_origin = SEEK_SET;
-        break;
-    default: return -1;
+        case ZLIB_FILEFUNC_SEEK_CUR:
+            fseek_origin = SEEK_CUR;
+            break;
+        case ZLIB_FILEFUNC_SEEK_END:
+            fseek_origin = SEEK_END;
+            break;
+        case ZLIB_FILEFUNC_SEEK_SET:
+            fseek_origin = SEEK_SET;
+            break;
+        default: return -1;
     }
     ret = 0;
 
     if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
-                        ret = -1;
+    {
+        ret = -1;
+    }
 
     return ret;
 }
@@ -222,26 +264,26 @@ static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
 }
 
 void fill_fopen_filefunc (pzlib_filefunc_def)
-  zlib_filefunc_def* pzlib_filefunc_def;
+zlib_filefunc_def* pzlib_filefunc_def;
 {
-    pzlib_filefunc_def->zopen_file = fopen_file_func;
-    pzlib_filefunc_def->zread_file = fread_file_func;
+    pzlib_filefunc_def->zopen_file  = fopen_file_func;
+    pzlib_filefunc_def->zread_file  = fread_file_func;
     pzlib_filefunc_def->zwrite_file = fwrite_file_func;
-    pzlib_filefunc_def->ztell_file = ftell_file_func;
-    pzlib_filefunc_def->zseek_file = fseek_file_func;
+    pzlib_filefunc_def->ztell_file  = ftell_file_func;
+    pzlib_filefunc_def->zseek_file  = fseek_file_func;
     pzlib_filefunc_def->zclose_file = fclose_file_func;
     pzlib_filefunc_def->zerror_file = ferror_file_func;
-    pzlib_filefunc_def->opaque = NULL;
+    pzlib_filefunc_def->opaque      = NULL;
 }
 
 void fill_fopen64_filefunc (zlib_filefunc64_def*  pzlib_filefunc_def)
 {
     pzlib_filefunc_def->zopen64_file = fopen64_file_func;
-    pzlib_filefunc_def->zread_file = fread_file_func;
-    pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+    pzlib_filefunc_def->zread_file   = fread_file_func;
+    pzlib_filefunc_def->zwrite_file  = fwrite_file_func;
     pzlib_filefunc_def->ztell64_file = ftell64_file_func;
     pzlib_filefunc_def->zseek64_file = fseek64_file_func;
-    pzlib_filefunc_def->zclose_file = fclose_file_func;
-    pzlib_filefunc_def->zerror_file = ferror_file_func;
-    pzlib_filefunc_def->opaque = NULL;
+    pzlib_filefunc_def->zclose_file  = fclose_file_func;
+    pzlib_filefunc_def->zerror_file  = ferror_file_func;
+    pzlib_filefunc_def->opaque       = NULL;
 }
diff --git a/SrcLib/core/fwZip/src/minizip/iowin32.c b/SrcLib/core/fwZip/src/minizip/iowin32.c
index 1f22a31..2bbc745 100644
--- a/SrcLib/core/fwZip/src/minizip/iowin32.c
+++ b/SrcLib/core/fwZip/src/minizip/iowin32.c
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* iowin32.c -- IO base function header for compress/uncompress .zip
      Version 1.1, February 14h, 2010
      part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
@@ -9,7 +15,7 @@
 
      For more info read MiniZip_info.txt
 
-*/
+ */
 #ifdef _WIN32
 
 #include <stdlib.h>
@@ -26,13 +32,13 @@
 #define INVALID_SET_FILE_POINTER ((DWORD)-1)
 #endif
 
-voidpf  ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));
-uLong   ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));
-uLong   ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+voidpf ZCALLBACK win32_open_file_func  OF((voidpf opaque, const char* filename, int mode));
+uLong ZCALLBACK win32_read_file_func  OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
 ZPOS64_T ZCALLBACK win32_tell64_file_func  OF((voidpf opaque, voidpf stream));
-long    ZCALLBACK win32_seek64_file_func  OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
-int     ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
-int     ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
+long ZCALLBACK win32_seek64_file_func  OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
+int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
 
 typedef struct
 {
@@ -51,37 +57,41 @@ static void win32_translate_open_mode(int mode,
 
     if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
     {
-        *lpdwDesiredAccess = GENERIC_READ;
+        *lpdwDesiredAccess       = GENERIC_READ;
         *lpdwCreationDisposition = OPEN_EXISTING;
-        *lpdwShareMode = FILE_SHARE_READ;
+        *lpdwShareMode           = FILE_SHARE_READ;
     }
     else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
     {
-        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+        *lpdwDesiredAccess       = GENERIC_WRITE | GENERIC_READ;
         *lpdwCreationDisposition = OPEN_EXISTING;
     }
     else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
     {
-        *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+        *lpdwDesiredAccess       = GENERIC_WRITE | GENERIC_READ;
         *lpdwCreationDisposition = CREATE_ALWAYS;
     }
 }
 
 static voidpf win32_build_iowin(HANDLE hFile)
 {
-    voidpf ret=NULL;
+    voidpf ret = NULL;
 
     if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
     {
         WIN32FILE_IOWIN w32fiow;
-        w32fiow.hf = hFile;
+        w32fiow.hf    = hFile;
         w32fiow.error = 0;
-        ret = malloc(sizeof(WIN32FILE_IOWIN));
+        ret           = malloc(sizeof(WIN32FILE_IOWIN));
 
         if (ret==NULL)
+        {
             CloseHandle(hFile);
+        }
         else
+        {
             *((WIN32FILE_IOWIN*)ret) = w32fiow;
+        }
     }
     return ret;
 }
@@ -89,13 +99,16 @@ static voidpf win32_build_iowin(HANDLE hFile)
 voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
 {
     const char* mode_fopen = NULL;
-    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes;
     HANDLE hFile = NULL;
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
     if ((filename!=NULL) && (dwDesiredAccess != 0))
-        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+    {
+        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition,
+                           dwFlagsAndAttributes, NULL);
+    }
 
     return win32_build_iowin(hFile);
 }
@@ -104,13 +117,16 @@ voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int
 voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
 {
     const char* mode_fopen = NULL;
-    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes;
     HANDLE hFile = NULL;
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
     if ((filename!=NULL) && (dwDesiredAccess != 0))
-        hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+    {
+        hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition,
+                            dwFlagsAndAttributes, NULL);
+    }
 
     return win32_build_iowin(hFile);
 }
@@ -119,13 +135,16 @@ voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int
 voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
 {
     const char* mode_fopen = NULL;
-    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes;
     HANDLE hFile = NULL;
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
     if ((filename!=NULL) && (dwDesiredAccess != 0))
-        hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+    {
+        hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition,
+                            dwFlagsAndAttributes, NULL);
+    }
 
     return win32_build_iowin(hFile);
 }
@@ -134,13 +153,16 @@ voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int
 voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
 {
     const char* mode_fopen = NULL;
-    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+    DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes;
     HANDLE hFile = NULL;
 
     win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
 
     if ((filename!=NULL) && (dwDesiredAccess != 0))
-        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+    {
+        hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition,
+                           dwFlagsAndAttributes, NULL);
+    }
 
     return win32_build_iowin(hFile);
 }
@@ -148,10 +170,12 @@ voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mo
 
 uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
 {
-    uLong ret=0;
+    uLong ret    = 0;
     HANDLE hFile = NULL;
     if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+    {
+        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+    }
 
     if (hFile != NULL)
     {
@@ -159,8 +183,10 @@ uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uL
         {
             DWORD dwErr = GetLastError();
             if (dwErr == ERROR_HANDLE_EOF)
+            {
                 dwErr = 0;
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+            }
+            ((WIN32FILE_IOWIN*)stream)->error = (int)dwErr;
         }
     }
 
@@ -170,10 +196,12 @@ uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uL
 
 uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
 {
-    uLong ret=0;
+    uLong ret    = 0;
     HANDLE hFile = NULL;
     if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+    {
+        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+    }
 
     if (hFile != NULL)
     {
@@ -181,8 +209,10 @@ uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* b
         {
             DWORD dwErr = GetLastError();
             if (dwErr == ERROR_HANDLE_EOF)
+            {
                 dwErr = 0;
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+            }
+            ((WIN32FILE_IOWIN*)stream)->error = (int)dwErr;
         }
     }
 
@@ -191,45 +221,53 @@ uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* b
 
 long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
 {
-    long ret=-1;
+    long ret     = -1;
     HANDLE hFile = NULL;
     if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+    {
+        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+    }
     if (hFile != NULL)
     {
         DWORD dwSet = SetFilePointer(hFile, 0, NULL, FILE_CURRENT);
         if (dwSet == INVALID_SET_FILE_POINTER)
         {
             DWORD dwErr = GetLastError();
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-            ret = -1;
+            ((WIN32FILE_IOWIN*)stream)->error = (int)dwErr;
+            ret                               = -1;
         }
         else
-            ret=(long)dwSet;
+        {
+            ret = (long)dwSet;
+        }
     }
     return ret;
 }
 
 ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
 {
-    ZPOS64_T ret= (ZPOS64_T)-1;
+    ZPOS64_T ret = (ZPOS64_T)-1;
     HANDLE hFile = NULL;
     if (stream!=NULL)
+    {
         hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+    }
 
     if (hFile)
     {
         LARGE_INTEGER li;
-        li.QuadPart = 0;
+        li.QuadPart  = 0;
         li.u.LowPart = SetFilePointer(hFile, li.u.LowPart, &li.u.HighPart, FILE_CURRENT);
         if ( (li.LowPart == 0xFFFFFFFF) && (GetLastError() != NO_ERROR))
         {
             DWORD dwErr = GetLastError();
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-            ret = (ZPOS64_T)-1;
+            ((WIN32FILE_IOWIN*)stream)->error = (int)dwErr;
+            ret                               = (ZPOS64_T)-1;
         }
         else
-            ret=li.QuadPart;
+        {
+            ret = li.QuadPart;
+        }
     }
     return ret;
 }
@@ -237,24 +275,26 @@ ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
 
 long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
 {
-    DWORD dwMoveMethod=0xFFFFFFFF;
-    HANDLE hFile = NULL;
+    DWORD dwMoveMethod = 0xFFFFFFFF;
+    HANDLE hFile       = NULL;
 
-    long ret=-1;
+    long ret = -1;
     if (stream!=NULL)
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+    {
+        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+    }
     switch (origin)
     {
-    case ZLIB_FILEFUNC_SEEK_CUR :
-        dwMoveMethod = FILE_CURRENT;
-        break;
-    case ZLIB_FILEFUNC_SEEK_END :
-        dwMoveMethod = FILE_END;
-        break;
-    case ZLIB_FILEFUNC_SEEK_SET :
-        dwMoveMethod = FILE_BEGIN;
-        break;
-    default: return -1;
+        case ZLIB_FILEFUNC_SEEK_CUR:
+            dwMoveMethod = FILE_CURRENT;
+            break;
+        case ZLIB_FILEFUNC_SEEK_END:
+            dwMoveMethod = FILE_END;
+            break;
+        case ZLIB_FILEFUNC_SEEK_SET:
+            dwMoveMethod = FILE_BEGIN;
+            break;
+        default: return -1;
     }
 
     if (hFile != NULL)
@@ -263,33 +303,37 @@ long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,in
         if (dwSet == INVALID_SET_FILE_POINTER)
         {
             DWORD dwErr = GetLastError();
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-            ret = -1;
+            ((WIN32FILE_IOWIN*)stream)->error = (int)dwErr;
+            ret                               = -1;
         }
         else
-            ret=0;
+        {
+            ret = 0;
+        }
     }
     return ret;
 }
 
 long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
 {
-    DWORD dwMoveMethod=0xFFFFFFFF;
-    HANDLE hFile = NULL;
-    long ret=-1;
+    DWORD dwMoveMethod = 0xFFFFFFFF;
+    HANDLE hFile       = NULL;
+    long ret           = -1;
 
     if (stream!=NULL)
+    {
         hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+    }
 
     switch (origin)
     {
-        case ZLIB_FILEFUNC_SEEK_CUR :
+        case ZLIB_FILEFUNC_SEEK_CUR:
             dwMoveMethod = FILE_CURRENT;
             break;
-        case ZLIB_FILEFUNC_SEEK_END :
+        case ZLIB_FILEFUNC_SEEK_END:
             dwMoveMethod = FILE_END;
             break;
-        case ZLIB_FILEFUNC_SEEK_SET :
+        case ZLIB_FILEFUNC_SEEK_SET:
             dwMoveMethod = FILE_BEGIN;
             break;
         default: return -1;
@@ -298,31 +342,33 @@ long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T off
     if (hFile)
     {
         LARGE_INTEGER* li = (LARGE_INTEGER*)&offset;
-        DWORD dwSet = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);
+        DWORD dwSet       = SetFilePointer(hFile, li->u.LowPart, &li->u.HighPart, dwMoveMethod);
         if (dwSet == INVALID_SET_FILE_POINTER)
         {
             DWORD dwErr = GetLastError();
-            ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
-            ret = -1;
+            ((WIN32FILE_IOWIN*)stream)->error = (int)dwErr;
+            ret                               = -1;
         }
         else
-            ret=0;
+        {
+            ret = 0;
+        }
     }
     return ret;
 }
 
 int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
 {
-    int ret=-1;
+    int ret = -1;
 
     if (stream!=NULL)
     {
         HANDLE hFile;
-        hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+        hFile = ((WIN32FILE_IOWIN*)stream)->hf;
         if (hFile != NULL)
         {
             CloseHandle(hFile);
-            ret=0;
+            ret = 0;
         }
         free(stream);
     }
@@ -331,62 +377,62 @@ int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
 
 int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
 {
-    int ret=-1;
+    int ret = -1;
     if (stream!=NULL)
     {
-        ret = ((WIN32FILE_IOWIN*)stream) -> error;
+        ret = ((WIN32FILE_IOWIN*)stream)->error;
     }
     return ret;
 }
 
 void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
 {
-    pzlib_filefunc_def->zopen_file = win32_open_file_func;
-    pzlib_filefunc_def->zread_file = win32_read_file_func;
+    pzlib_filefunc_def->zopen_file  = win32_open_file_func;
+    pzlib_filefunc_def->zread_file  = win32_read_file_func;
     pzlib_filefunc_def->zwrite_file = win32_write_file_func;
-    pzlib_filefunc_def->ztell_file = win32_tell_file_func;
-    pzlib_filefunc_def->zseek_file = win32_seek_file_func;
+    pzlib_filefunc_def->ztell_file  = win32_tell_file_func;
+    pzlib_filefunc_def->zseek_file  = win32_seek_file_func;
     pzlib_filefunc_def->zclose_file = win32_close_file_func;
     pzlib_filefunc_def->zerror_file = win32_error_file_func;
-    pzlib_filefunc_def->opaque = NULL;
+    pzlib_filefunc_def->opaque      = NULL;
 }
 
 void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
 {
     pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
-    pzlib_filefunc_def->zread_file = win32_read_file_func;
-    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+    pzlib_filefunc_def->zread_file   = win32_read_file_func;
+    pzlib_filefunc_def->zwrite_file  = win32_write_file_func;
     pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
     pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
-    pzlib_filefunc_def->zclose_file = win32_close_file_func;
-    pzlib_filefunc_def->zerror_file = win32_error_file_func;
-    pzlib_filefunc_def->opaque = NULL;
+    pzlib_filefunc_def->zclose_file  = win32_close_file_func;
+    pzlib_filefunc_def->zerror_file  = win32_error_file_func;
+    pzlib_filefunc_def->opaque       = NULL;
 }
 
 
 void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
 {
     pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
-    pzlib_filefunc_def->zread_file = win32_read_file_func;
-    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+    pzlib_filefunc_def->zread_file   = win32_read_file_func;
+    pzlib_filefunc_def->zwrite_file  = win32_write_file_func;
     pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
     pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
-    pzlib_filefunc_def->zclose_file = win32_close_file_func;
-    pzlib_filefunc_def->zerror_file = win32_error_file_func;
-    pzlib_filefunc_def->opaque = NULL;
+    pzlib_filefunc_def->zclose_file  = win32_close_file_func;
+    pzlib_filefunc_def->zerror_file  = win32_error_file_func;
+    pzlib_filefunc_def->opaque       = NULL;
 }
 
 
 void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
 {
     pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
-    pzlib_filefunc_def->zread_file = win32_read_file_func;
-    pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+    pzlib_filefunc_def->zread_file   = win32_read_file_func;
+    pzlib_filefunc_def->zwrite_file  = win32_write_file_func;
     pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
     pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
-    pzlib_filefunc_def->zclose_file = win32_close_file_func;
-    pzlib_filefunc_def->zerror_file = win32_error_file_func;
-    pzlib_filefunc_def->opaque = NULL;
+    pzlib_filefunc_def->zclose_file  = win32_close_file_func;
+    pzlib_filefunc_def->zerror_file  = win32_error_file_func;
+    pzlib_filefunc_def->opaque       = NULL;
 }
 
 #endif // _WIN32
diff --git a/SrcLib/core/fwZip/src/minizip/mztools.c b/SrcLib/core/fwZip/src/minizip/mztools.c
index bf40d89..55aee28 100644
--- a/SrcLib/core/fwZip/src/minizip/mztools.c
+++ b/SrcLib/core/fwZip/src/minizip/mztools.c
@@ -1,8 +1,14 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /*
-  Additional tools for Minizip
-  Code: Xavier Roche '2004
-  License: Same as ZLIB (www.gzip.org)
-*/
+   Additional tools for Minizip
+   Code: Xavier Roche '2004
+   License: Same as ZLIB (www.gzip.org)
+ */
 
 /* Code */
 #include <stdio.h>
@@ -18,15 +24,15 @@
 #define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) )
 
 #define WRITE_8(buff, n) do { \
-  *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \
+        *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \
 } while(0)
 #define WRITE_16(buff, n) do { \
-  WRITE_8((unsigned char*)(buff), n); \
-  WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \
+        WRITE_8((unsigned char*)(buff), n); \
+        WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \
 } while(0)
 #define WRITE_32(buff, n) do { \
-  WRITE_16((unsigned char*)(buff), (n) & 0xffff); \
-  WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
+        WRITE_16((unsigned char*)(buff), (n) & 0xffff); \
+        WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
 } while(0)
 
 extern int MINIZIP_API unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)
@@ -36,248 +42,316 @@ const char* fileOutTmp;
 uLong* nRecovered;
 uLong* bytesRecovered;
 {
-  int err = Z_OK;
-  FILE* fpZip = fopen(file, "rb");
-  FILE* fpOut = fopen(fileOut, "wb");
-  FILE* fpOutCD = fopen(fileOutTmp, "wb");
-  if (fpZip != NULL &&  fpOut != NULL) {
-    int entries = 0;
-    uLong totalBytes = 0;
-    char header[30];
-    char filename[256];
-    char extra[1024];
-    int offset = 0;
-    int offsetCD = 0;
-    while ( fread(header, 1, 30, fpZip) == 30 ) {
-      int currentOffset = offset;
+    int err       = Z_OK;
+    FILE* fpZip   = fopen(file, "rb");
+    FILE* fpOut   = fopen(fileOut, "wb");
+    FILE* fpOutCD = fopen(fileOutTmp, "wb");
+    if (fpZip != NULL &&  fpOut != NULL)
+    {
+        int entries      = 0;
+        uLong totalBytes = 0;
+        char header[30];
+        char filename[256];
+        char extra[1024];
+        int offset   = 0;
+        int offsetCD = 0;
+        while ( fread(header, 1, 30, fpZip) == 30 )
+        {
+            int currentOffset = offset;
 
-      /* File entry */
-      if (READ_32(header) == 0x04034b50) {
-        unsigned int version = READ_16(header + 4);
-        unsigned int gpflag = READ_16(header + 6);
-        unsigned int method = READ_16(header + 8);
-        unsigned int filetime = READ_16(header + 10);
-        unsigned int filedate = READ_16(header + 12);
-        unsigned int crc = READ_32(header + 14); /* crc */
-        unsigned int cpsize = READ_32(header + 18); /* compressed size */
-        unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */
-        unsigned int fnsize = READ_16(header + 26); /* file name length */
-        unsigned int extsize = READ_16(header + 28); /* extra field length */
-        filename[0] = extra[0] = '\0';
+            /* File entry */
+            if (READ_32(header) == 0x04034b50)
+            {
+                unsigned int version  = READ_16(header + 4);
+                unsigned int gpflag   = READ_16(header + 6);
+                unsigned int method   = READ_16(header + 8);
+                unsigned int filetime = READ_16(header + 10);
+                unsigned int filedate = READ_16(header + 12);
+                unsigned int crc      = READ_32(header + 14); /* crc */
+                unsigned int cpsize   = READ_32(header + 18); /* compressed size */
+                unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */
+                unsigned int fnsize   = READ_16(header + 26); /* file name length */
+                unsigned int extsize  = READ_16(header + 28); /* extra field length */
+                filename[0] = extra[0] = '\0';
 
-        /* Header */
-        if (fwrite(header, 1, 30, fpOut) == 30) {
-          offset += 30;
-        } else {
-          err = Z_ERRNO;
-          break;
-        }
+                /* Header */
+                if (fwrite(header, 1, 30, fpOut) == 30)
+                {
+                    offset += 30;
+                }
+                else
+                {
+                    err = Z_ERRNO;
+                    break;
+                }
 
-        /* Filename */
-        if (fnsize > 0) {
-          if (fread(filename, 1, fnsize, fpZip) == fnsize) {
-            if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {
-              offset += fnsize;
-            } else {
-              err = Z_ERRNO;
-              break;
-            }
-          } else {
-            err = Z_ERRNO;
-            break;
-          }
-        } else {
-          err = Z_STREAM_ERROR;
-          break;
-        }
+                /* Filename */
+                if (fnsize > 0)
+                {
+                    if (fread(filename, 1, fnsize, fpZip) == fnsize)
+                    {
+                        if (fwrite(filename, 1, fnsize, fpOut) == fnsize)
+                        {
+                            offset += fnsize;
+                        }
+                        else
+                        {
+                            err = Z_ERRNO;
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        err = Z_ERRNO;
+                        break;
+                    }
+                }
+                else
+                {
+                    err = Z_STREAM_ERROR;
+                    break;
+                }
 
-        /* Extra field */
-        if (extsize > 0) {
-          if (fread(extra, 1, extsize, fpZip) == extsize) {
-            if (fwrite(extra, 1, extsize, fpOut) == extsize) {
-              offset += extsize;
-            } else {
-              err = Z_ERRNO;
-              break;
-            }
-          } else {
-            err = Z_ERRNO;
-            break;
-          }
-        }
+                /* Extra field */
+                if (extsize > 0)
+                {
+                    if (fread(extra, 1, extsize, fpZip) == extsize)
+                    {
+                        if (fwrite(extra, 1, extsize, fpOut) == extsize)
+                        {
+                            offset += extsize;
+                        }
+                        else
+                        {
+                            err = Z_ERRNO;
+                            break;
+                        }
+                    }
+                    else
+                    {
+                        err = Z_ERRNO;
+                        break;
+                    }
+                }
 
-        /* Data */
-        {
-          int dataSize = cpsize;
-          if (dataSize == 0) {
-            dataSize = uncpsize;
-          }
-          if (dataSize > 0) {
-            char* data = malloc(dataSize);
-            if (data != NULL) {
-              if ((int)fread(data, 1, dataSize, fpZip) == dataSize) {
-                if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) {
-                  offset += dataSize;
-                  totalBytes += dataSize;
-                } else {
-                  err = Z_ERRNO;
+                /* Data */
+                {
+                    int dataSize = cpsize;
+                    if (dataSize == 0)
+                    {
+                        dataSize = uncpsize;
+                    }
+                    if (dataSize > 0)
+                    {
+                        char* data = malloc(dataSize);
+                        if (data != NULL)
+                        {
+                            if ((int)fread(data, 1, dataSize, fpZip) == dataSize)
+                            {
+                                if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize)
+                                {
+                                    offset     += dataSize;
+                                    totalBytes += dataSize;
+                                }
+                                else
+                                {
+                                    err = Z_ERRNO;
+                                }
+                            }
+                            else
+                            {
+                                err = Z_ERRNO;
+                            }
+                            free(data);
+                            if (err != Z_OK)
+                            {
+                                break;
+                            }
+                        }
+                        else
+                        {
+                            err = Z_MEM_ERROR;
+                            break;
+                        }
+                    }
                 }
-              } else {
-                err = Z_ERRNO;
-              }
-              free(data);
-              if (err != Z_OK) {
-                break;
-              }
-            } else {
-              err = Z_MEM_ERROR;
-              break;
-            }
-          }
-        }
 
-        /* Central directory entry */
-        {
-          char header[46];
-          char* comment = "";
-          int comsize = (int) strlen(comment);
-          WRITE_32(header, 0x02014b50);
-          WRITE_16(header + 4, version);
-          WRITE_16(header + 6, version);
-          WRITE_16(header + 8, gpflag);
-          WRITE_16(header + 10, method);
-          WRITE_16(header + 12, filetime);
-          WRITE_16(header + 14, filedate);
-          WRITE_32(header + 16, crc);
-          WRITE_32(header + 20, cpsize);
-          WRITE_32(header + 24, uncpsize);
-          WRITE_16(header + 28, fnsize);
-          WRITE_16(header + 30, extsize);
-          WRITE_16(header + 32, comsize);
-          WRITE_16(header + 34, 0);     /* disk # */
-          WRITE_16(header + 36, 0);     /* int attrb */
-          WRITE_32(header + 38, 0);     /* ext attrb */
-          WRITE_32(header + 42, currentOffset);
-          /* Header */
-          if (fwrite(header, 1, 46, fpOutCD) == 46) {
-            offsetCD += 46;
+                /* Central directory entry */
+                {
+                    char header[46];
+                    char* comment = "";
+                    int comsize   = (int) strlen(comment);
+                    WRITE_32(header, 0x02014b50);
+                    WRITE_16(header + 4, version);
+                    WRITE_16(header + 6, version);
+                    WRITE_16(header + 8, gpflag);
+                    WRITE_16(header + 10, method);
+                    WRITE_16(header + 12, filetime);
+                    WRITE_16(header + 14, filedate);
+                    WRITE_32(header + 16, crc);
+                    WRITE_32(header + 20, cpsize);
+                    WRITE_32(header + 24, uncpsize);
+                    WRITE_16(header + 28, fnsize);
+                    WRITE_16(header + 30, extsize);
+                    WRITE_16(header + 32, comsize);
+                    WRITE_16(header + 34, 0); /* disk # */
+                    WRITE_16(header + 36, 0); /* int attrb */
+                    WRITE_32(header + 38, 0); /* ext attrb */
+                    WRITE_32(header + 42, currentOffset);
+                    /* Header */
+                    if (fwrite(header, 1, 46, fpOutCD) == 46)
+                    {
+                        offsetCD += 46;
 
-            /* Filename */
-            if (fnsize > 0) {
-              if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) {
-                offsetCD += fnsize;
-              } else {
-                err = Z_ERRNO;
-                break;
-              }
-            } else {
-              err = Z_STREAM_ERROR;
-              break;
-            }
+                        /* Filename */
+                        if (fnsize > 0)
+                        {
+                            if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize)
+                            {
+                                offsetCD += fnsize;
+                            }
+                            else
+                            {
+                                err = Z_ERRNO;
+                                break;
+                            }
+                        }
+                        else
+                        {
+                            err = Z_STREAM_ERROR;
+                            break;
+                        }
 
-            /* Extra field */
-            if (extsize > 0) {
-              if (fwrite(extra, 1, extsize, fpOutCD) == extsize) {
-                offsetCD += extsize;
-              } else {
-                err = Z_ERRNO;
-                break;
-              }
-            }
+                        /* Extra field */
+                        if (extsize > 0)
+                        {
+                            if (fwrite(extra, 1, extsize, fpOutCD) == extsize)
+                            {
+                                offsetCD += extsize;
+                            }
+                            else
+                            {
+                                err = Z_ERRNO;
+                                break;
+                            }
+                        }
 
-            /* Comment field */
-            if (comsize > 0) {
-              if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {
-                offsetCD += comsize;
-              } else {
-                err = Z_ERRNO;
-                break;
-              }
-            }
+                        /* Comment field */
+                        if (comsize > 0)
+                        {
+                            if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize)
+                            {
+                                offsetCD += comsize;
+                            }
+                            else
+                            {
+                                err = Z_ERRNO;
+                                break;
+                            }
+                        }
 
 
-          } else {
-            err = Z_ERRNO;
-            break;
-          }
-        }
-
-        /* Success */
-        entries++;
+                    }
+                    else
+                    {
+                        err = Z_ERRNO;
+                        break;
+                    }
+                }
 
-      } else {
-        break;
-      }
-    }
+                /* Success */
+                entries++;
 
-    /* Final central directory  */
-    {
-      int entriesZip = entries;
-      char header[22];
-      char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
-      int comsize = (int) strlen(comment);
-      if (entriesZip > 0xffff) {
-        entriesZip = 0xffff;
-      }
-      WRITE_32(header, 0x06054b50);
-      WRITE_16(header + 4, 0);    /* disk # */
-      WRITE_16(header + 6, 0);    /* disk # */
-      WRITE_16(header + 8, entriesZip);   /* hack */
-      WRITE_16(header + 10, entriesZip);  /* hack */
-      WRITE_32(header + 12, offsetCD);    /* size of CD */
-      WRITE_32(header + 16, offset);      /* offset to CD */
-      WRITE_16(header + 20, comsize);     /* comment */
+            }
+            else
+            {
+                break;
+            }
+        }
 
-      /* Header */
-      if (fwrite(header, 1, 22, fpOutCD) == 22) {
+        /* Final central directory  */
+        {
+            int entriesZip = entries;
+            char header[22];
+            char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
+            int comsize   = (int) strlen(comment);
+            if (entriesZip > 0xffff)
+            {
+                entriesZip = 0xffff;
+            }
+            WRITE_32(header, 0x06054b50);
+            WRITE_16(header + 4, 0); /* disk # */
+            WRITE_16(header + 6, 0); /* disk # */
+            WRITE_16(header + 8, entriesZip); /* hack */
+            WRITE_16(header + 10, entriesZip); /* hack */
+            WRITE_32(header + 12, offsetCD); /* size of CD */
+            WRITE_32(header + 16, offset); /* offset to CD */
+            WRITE_16(header + 20, comsize); /* comment */
 
-        /* Comment field */
-        if (comsize > 0) {
-          if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {
-            err = Z_ERRNO;
-          }
-        }
+            /* Header */
+            if (fwrite(header, 1, 22, fpOutCD) == 22)
+            {
 
-      } else {
-        err = Z_ERRNO;
-      }
-    }
+                /* Comment field */
+                if (comsize > 0)
+                {
+                    if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize)
+                    {
+                        err = Z_ERRNO;
+                    }
+                }
 
-    /* Final merge (file + central directory) */
-    fclose(fpOutCD);
-    if (err == Z_OK) {
-      fpOutCD = fopen(fileOutTmp, "rb");
-      if (fpOutCD != NULL) {
-        int nRead;
-        char buffer[8192];
-        while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) {
-          if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) {
-            err = Z_ERRNO;
-            break;
-          }
+            }
+            else
+            {
+                err = Z_ERRNO;
+            }
         }
+
+        /* Final merge (file + central directory) */
         fclose(fpOutCD);
-      }
-    }
+        if (err == Z_OK)
+        {
+            fpOutCD = fopen(fileOutTmp, "rb");
+            if (fpOutCD != NULL)
+            {
+                int nRead;
+                char buffer[8192];
+                while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0)
+                {
+                    if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead)
+                    {
+                        err = Z_ERRNO;
+                        break;
+                    }
+                }
+                fclose(fpOutCD);
+            }
+        }
 
-    /* Close */
-    fclose(fpZip);
-    fclose(fpOut);
+        /* Close */
+        fclose(fpZip);
+        fclose(fpOut);
 
-    /* Wipe temporary file */
-    (void)remove(fileOutTmp);
+        /* Wipe temporary file */
+        (void)remove(fileOutTmp);
 
-    /* Number of recovered entries */
-    if (err == Z_OK) {
-      if (nRecovered != NULL) {
-        *nRecovered = entries;
-      }
-      if (bytesRecovered != NULL) {
-        *bytesRecovered = totalBytes;
-      }
+        /* Number of recovered entries */
+        if (err == Z_OK)
+        {
+            if (nRecovered != NULL)
+            {
+                *nRecovered = entries;
+            }
+            if (bytesRecovered != NULL)
+            {
+                *bytesRecovered = totalBytes;
+            }
+        }
+    }
+    else
+    {
+        err = Z_STREAM_ERROR;
     }
-  } else {
-    err = Z_STREAM_ERROR;
-  }
-  return err;
+    return err;
 }
diff --git a/SrcLib/core/fwZip/src/minizip/unzip.c b/SrcLib/core/fwZip/src/minizip/unzip.c
index 541f2f3..a764fd0 100644
--- a/SrcLib/core/fwZip/src/minizip/unzip.c
+++ b/SrcLib/core/fwZip/src/minizip/unzip.c
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* unzip.c -- IO for uncompress .zip files using zlib
    Version 1.1, February 14h, 2010
    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
@@ -13,55 +19,55 @@
          For more info read MiniZip_info.txt
 
 
-  ------------------------------------------------------------------------------------
-  Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
-  compatibility with older software. The following is from the original crypt.c.
-  Code woven in by Terry Thorsen 1/2003.
+   ------------------------------------------------------------------------------------
+   Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
+   compatibility with older software. The following is from the original crypt.c.
+   Code woven in by Terry Thorsen 1/2003.
 
-  Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
+   Copyright (c) 1990-2000 Info-ZIP.  All rights reserved.
 
-  See the accompanying file LICENSE, version 2000-Apr-09 or later
-  (the contents of which are also included in zip.h) for terms of use.
-  If, for some reason, all these files are missing, the Info-ZIP license
-  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
+   See the accompanying file LICENSE, version 2000-Apr-09 or later
+   (the contents of which are also included in zip.h) for terms of use.
+   If, for some reason, all these files are missing, the Info-ZIP license
+   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
 
         crypt.c (full version) by Info-ZIP.      Last revised:  [see crypt.h]
 
-  The encryption/decryption parts of this source code (as opposed to the
-  non-echoing password parts) were originally written in Europe.  The
-  whole source package can be freely distributed, including from the USA.
-  (Prior to January 2000, re-export from the US was a violation of US law.)
+   The encryption/decryption parts of this source code (as opposed to the
+   non-echoing password parts) were originally written in Europe.  The
+   whole source package can be freely distributed, including from the USA.
+   (Prior to January 2000, re-export from the US was a violation of US law.)
 
         This encryption code is a direct transcription of the algorithm from
-  Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
-  file (appnote.txt) is distributed with the PKZIP program (even in the
-  version without encryption capabilities).
+   Roger Schlafly, described by Phil Katz in the file appnote.txt.  This
+   file (appnote.txt) is distributed with the PKZIP program (even in the
+   version without encryption capabilities).
 
         ------------------------------------------------------------------------------------
 
         Changes in unzip.c
 
         2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos
-  2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*
-  2007-2008 - Even Rouault - Remove old C style function prototypes
-  2007-2008 - Even Rouault - Add unzip support for ZIP64
+   2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*
+   2007-2008 - Even Rouault - Remove old C style function prototypes
+   2007-2008 - Even Rouault - Add unzip support for ZIP64
 
         Copyright (C) 2007-2008 Even Rouault
 
 
         Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again).
-  Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
+   Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
                                 should only read the compressed/uncompressed size from the Zip64 format if
                                 the size from normal header was 0xFFFFFFFF
-  Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant
+   Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant
         Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)
                                 Patch created by Daniel Borca
 
-  Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+   Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
 
-  Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson
+   Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson
 
-*/
+ */
 
 
 #include <stdio.h>
@@ -81,7 +87,7 @@
 #  include <stdlib.h>
 #endif
 #ifdef NO_ERRNO_H
-    extern int errno;
+extern int errno;
 #else
 #   include <errno.h>
 #endif
@@ -112,7 +118,7 @@
 # define ALLOC(size) (malloc(size))
 #endif
 #ifndef TRYFREE
-# define TRYFREE(p) {if (p) free(p);}
+# define TRYFREE(p) {if (p) {free(p); }}
 #endif
 
 #define SIZECENTRALDIRITEM (0x2e)
@@ -120,7 +126,7 @@
 
 
 const char unz_copyright[] =
-   " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+    " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
 
 /* unz_file_info_interntal contain internal info about a file in zipfile*/
 typedef struct unz_file_info64_internal_s
@@ -144,7 +150,7 @@ typedef struct
     uLong stream_initialised;   /* flag set if stream structure is initialised*/
 
     ZPOS64_T offset_local_extrafield;/* offset of the local extra field */
-    uInt  size_local_extrafield;/* size of the local extra field */
+    uInt size_local_extrafield; /* size of the local extra field */
     ZPOS64_T pos_local_extrafield;   /* position in the local extra field in read*/
     ZPOS64_T total_out_64;
 
@@ -156,12 +162,12 @@ typedef struct
     voidpf filestream;        /* io structore of the zipfile */
     uLong compression_method;   /* compression method (0==store) */
     ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
-    int   raw;
+    int raw;
 } file_in_zip64_read_info_s;
 
 
 /* unz64_s contain internal information about the zipfile
-*/
+ */
 typedef struct
 {
     zlib_filefunc64_32_def z_filefunc;
@@ -176,12 +182,12 @@ typedef struct
 
     ZPOS64_T size_central_dir;     /* size of the central directory  */
     ZPOS64_T offset_central_dir;   /* offset of start of central directory with
-                                   respect to the starting disk number */
+                                      respect to the starting disk number */
 
     unz_file_info64 cur_file_info; /* public info about the current file in zip*/
     unz_file_info64_internal cur_file_info_internal; /* private info about it*/
     file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current
-                                        file if we are decompressing it */
+                                                     file if we are decompressing it */
     int encrypted;
 
     int isZip64;
@@ -201,13 +207,13 @@ typedef struct
      Read a byte from a gz_stream; update next_in and avail_in. Return EOF
    for end of file.
    IN assertion: the stream s has been sucessfully opened for reading.
-*/
+ */
 
 
 local int unz64local_getByte OF((
-    const zlib_filefunc64_32_def* pzlib_filefunc_def,
-    voidpf filestream,
-    int *pi));
+                                    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                                    voidpf filestream,
+                                    int *pi));
 
 local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)
 {
@@ -221,149 +227,199 @@ local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, v
     else
     {
         if (ZERROR64(*pzlib_filefunc_def,filestream))
+        {
             return UNZ_ERRNO;
+        }
         else
+        {
             return UNZ_EOF;
+        }
     }
 }
 
 
 /* ===========================================================================
    Reads a long in LSB order from the given gz_stream. Sets
-*/
+ */
 local int unz64local_getShort OF((
-    const zlib_filefunc64_32_def* pzlib_filefunc_def,
-    voidpf filestream,
-    uLong *pX));
+                                     const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                                     voidpf filestream,
+                                     uLong *pX));
 
 local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
-                             voidpf filestream,
-                             uLong *pX)
+                               voidpf filestream,
+                               uLong *pX)
 {
-    uLong x ;
+    uLong x;
     int i = 0;
     int err;
 
     err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
-    x = (uLong)i;
+    x   = (uLong)i;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((uLong)i)<<8;
 
     if (err==UNZ_OK)
+    {
         *pX = x;
+    }
     else
+    {
         *pX = 0;
+    }
     return err;
 }
 
 local int unz64local_getLong OF((
-    const zlib_filefunc64_32_def* pzlib_filefunc_def,
-    voidpf filestream,
-    uLong *pX));
+                                    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                                    voidpf filestream,
+                                    uLong *pX));
 
 local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
-                            voidpf filestream,
-                            uLong *pX)
+                              voidpf filestream,
+                              uLong *pX)
 {
-    uLong x ;
+    uLong x;
     int i = 0;
     int err;
 
     err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
-    x = (uLong)i;
+    x   = (uLong)i;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((uLong)i)<<8;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((uLong)i)<<16;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x += ((uLong)i)<<24;
 
     if (err==UNZ_OK)
+    {
         *pX = x;
+    }
     else
+    {
         *pX = 0;
+    }
     return err;
 }
 
 local int unz64local_getLong64 OF((
-    const zlib_filefunc64_32_def* pzlib_filefunc_def,
-    voidpf filestream,
-    ZPOS64_T *pX));
+                                      const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                                      voidpf filestream,
+                                      ZPOS64_T *pX));
 
 
 local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,
-                            voidpf filestream,
-                            ZPOS64_T *pX)
+                                voidpf filestream,
+                                ZPOS64_T *pX)
 {
-    ZPOS64_T x ;
+    ZPOS64_T x;
     int i = 0;
     int err;
 
     err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
-    x = (ZPOS64_T)i;
+    x   = (ZPOS64_T)i;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<8;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<16;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<24;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<32;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<40;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<48;
 
     if (err==UNZ_OK)
+    {
         err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x |= ((ZPOS64_T)i)<<56;
 
     if (err==UNZ_OK)
+    {
         *pX = x;
+    }
     else
+    {
         *pX = 0;
+    }
     return err;
 }
 
 /* My own strcmpi / strcasecmp */
 local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)
 {
-    for (;;)
+    for (;; )
     {
-        char c1=*(fileName1++);
-        char c2=*(fileName2++);
+        char c1 = *(fileName1++);
+        char c2 = *(fileName2++);
         if ((c1>='a') && (c1<='z'))
+        {
             c1 -= 0x20;
+        }
         if ((c2>='a') && (c2<='z'))
+        {
             c2 -= 0x20;
+        }
         if (c1=='\0')
+        {
             return ((c2=='\0') ? 0 : -1);
+        }
         if (c2=='\0')
+        {
             return 1;
+        }
         if (c1<c2)
+        {
             return -1;
+        }
         if (c1>c2)
+        {
             return 1;
+        }
     }
 }
 
@@ -386,17 +442,21 @@ local int strcmpcasenosensitive_internal (const char* fileName1, const char* fil
    If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
         (like 1 on Unix, 2 on Windows)
 
-*/
+ */
 extern MINIZIP_API int unzStringFileNameCompare (const char*  fileName1,
                                                  const char*  fileName2,
                                                  int iCaseSensitivity)
 
 {
     if (iCaseSensitivity==0)
-        iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
+    {
+        iCaseSensitivity = CASESENSITIVITYDEFAULTVALUE;
+    }
 
     if (iCaseSensitivity==1)
+    {
         return strcmp(fileName1,fileName2);
+    }
 
     return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
 }
@@ -406,61 +466,79 @@ extern MINIZIP_API int unzStringFileNameCompare (const char*  fileName1,
 #endif
 
 /*
-  Locate the Central directory of a zipfile (at the end, just before
+   Locate the Central directory of a zipfile (at the end, just before
     the global comment)
-*/
+ */
 local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
 local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
 {
     unsigned char* buf;
     ZPOS64_T uSizeFile;
     ZPOS64_T uBackRead;
-    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
-    ZPOS64_T uPosFound=0;
+    ZPOS64_T uMaxBack  = 0xffff; /* maximum size of global comment */
+    ZPOS64_T uPosFound = 0;
 
     if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+    {
         return 0;
+    }
 
 
     uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
 
     if (uMaxBack>uSizeFile)
+    {
         uMaxBack = uSizeFile;
+    }
 
     buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
     if (buf==NULL)
+    {
         return 0;
+    }
 
     uBackRead = 4;
     while (uBackRead<uMaxBack)
     {
         uLong uReadSize;
-        ZPOS64_T uReadPos ;
+        ZPOS64_T uReadPos;
         int i;
         if (uBackRead+BUFREADCOMMENT>uMaxBack)
+        {
             uBackRead = uMaxBack;
+        }
         else
-            uBackRead+=BUFREADCOMMENT;
-        uReadPos = uSizeFile-uBackRead ;
+        {
+            uBackRead += BUFREADCOMMENT;
+        }
+        uReadPos = uSizeFile-uBackRead;
 
         uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
-                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+                    (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
         if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
             break;
+        }
 
         if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+        {
             break;
+        }
 
-        for (i=(int)uReadSize-3; (i--)>0;)
+        for (i = (int)uReadSize-3; (i--)>0; )
+        {
             if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
                 ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
             {
                 uPosFound = uReadPos+i;
                 break;
             }
+        }
 
         if (uPosFound!=0)
+        {
             break;
+        }
     }
     TRYFREE(buf);
     return uPosFound;
@@ -468,36 +546,42 @@ local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_f
 
 
 /*
-  Locate the Central directory 64 of a zipfile (at the end, just before
+   Locate the Central directory 64 of a zipfile (at the end, just before
     the global comment)
-*/
+ */
 local ZPOS64_T unz64local_SearchCentralDir64 OF((
-    const zlib_filefunc64_32_def* pzlib_filefunc_def,
-    voidpf filestream));
+                                                    const zlib_filefunc64_32_def* pzlib_filefunc_def,
+                                                    voidpf filestream));
 
 local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
-                                      voidpf filestream)
+                                             voidpf filestream)
 {
     unsigned char* buf;
     ZPOS64_T uSizeFile;
     ZPOS64_T uBackRead;
-    ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
-    ZPOS64_T uPosFound=0;
+    ZPOS64_T uMaxBack  = 0xffff; /* maximum size of global comment */
+    ZPOS64_T uPosFound = 0;
     uLong uL;
-                ZPOS64_T relativeOffset;
+    ZPOS64_T relativeOffset;
 
     if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+    {
         return 0;
+    }
 
 
     uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
 
     if (uMaxBack>uSizeFile)
+    {
         uMaxBack = uSizeFile;
+    }
 
     buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
     if (buf==NULL)
+    {
         return 0;
+    }
 
     uBackRead = 4;
     while (uBackRead<uMaxBack)
@@ -506,81 +590,115 @@ local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib
         ZPOS64_T uReadPos;
         int i;
         if (uBackRead+BUFREADCOMMENT>uMaxBack)
+        {
             uBackRead = uMaxBack;
+        }
         else
-            uBackRead+=BUFREADCOMMENT;
-        uReadPos = uSizeFile-uBackRead ;
+        {
+            uBackRead += BUFREADCOMMENT;
+        }
+        uReadPos = uSizeFile-uBackRead;
 
         uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
-                     (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+                    (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
         if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
             break;
+        }
 
         if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+        {
             break;
+        }
 
-        for (i=(int)uReadSize-3; (i--)>0;)
+        for (i = (int)uReadSize-3; (i--)>0; )
+        {
             if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
                 ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
             {
                 uPosFound = uReadPos+i;
                 break;
             }
+        }
 
         if (uPosFound!=0)
+        {
             break;
+        }
     }
     TRYFREE(buf);
     if (uPosFound == 0)
+    {
         return 0;
+    }
 
     /* Zip64 end of central directory locator */
     if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
         return 0;
+    }
 
     /* the signature, already checked */
     if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+    {
         return 0;
+    }
 
     /* number of the disk with the start of the zip64 end of  central directory */
     if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+    {
         return 0;
+    }
     if (uL != 0)
+    {
         return 0;
+    }
 
     /* relative offset of the zip64 end of central directory record */
     if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+    {
         return 0;
+    }
 
     /* total number of disks */
     if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+    {
         return 0;
+    }
     if (uL != 1)
+    {
         return 0;
+    }
 
     /* Goto end of central directory record */
     if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
         return 0;
+    }
 
-     /* the signature */
+    /* the signature */
     if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+    {
         return 0;
+    }
 
     if (uL != 0x06064b50)
+    {
         return 0;
+    }
 
     return relativeOffset;
 }
 
 /*
-  Open a Zip file. path contain the full pathname (by example,
+   Open a Zip file. path contain the full pathname (by example,
      on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
      "zlib/zlib114.zip".
      If the zipfile cannot be opened (file doesn't exist or in not valid), the
        return value is NULL.
      Else, the return value is a unzFile Handle, usable with other function
        of this unzip package.
-*/
+ */
 local unzFile unzOpenInternal (const void *path,
                                zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
                                int is64bitOpenFunction)
@@ -588,37 +706,45 @@ local unzFile unzOpenInternal (const void *path,
     unz64_s us;
     unz64_s *s;
     ZPOS64_T central_pos;
-    uLong   uL;
+    uLong uL;
 
     uLong number_disk;          /* number of the current dist, used for
                                    spaning ZIP, unsupported, always 0*/
     uLong number_disk_with_CD;  /* number the the disk with central dir, used
                                    for spaning ZIP, unsupported, always 0*/
     ZPOS64_T number_entry_CD;      /* total number of entries in
-                                   the central dir
-                                   (same than number_entry on nospan) */
+                                      the central dir
+                                      (same than number_entry on nospan) */
 
-    int err=UNZ_OK;
+    int err = UNZ_OK;
 
     if (unz_copyright[0]!=' ')
+    {
         return NULL;
+    }
 
     us.z_filefunc.zseek32_file = NULL;
     us.z_filefunc.ztell32_file = NULL;
     if (pzlib_filefunc64_32_def==NULL)
+    {
         fill_fopen64_filefunc(&us.z_filefunc.zfile_func64);
+    }
     else
+    {
         us.z_filefunc = *pzlib_filefunc64_32_def;
+    }
     us.is64bitOpenFunction = is64bitOpenFunction;
 
 
 
     us.filestream = ZOPEN64(us.z_filefunc,
-                                                 path,
-                                                 ZLIB_FILEFUNC_MODE_READ |
-                                                 ZLIB_FILEFUNC_MODE_EXISTING);
+                            path,
+                            ZLIB_FILEFUNC_MODE_READ |
+                            ZLIB_FILEFUNC_MODE_EXISTING);
     if (us.filestream==NULL)
+    {
         return NULL;
+    }
 
     central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
     if (central_pos)
@@ -629,54 +755,78 @@ local unzFile unzOpenInternal (const void *path,
         us.isZip64 = 1;
 
         if (ZSEEK64(us.z_filefunc, us.filestream,
-                                      central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
-        err=UNZ_ERRNO;
+                    central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* the signature, already checked */
         if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* size of zip64 end of central directory record */
         if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* version made by */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* version needed to extract */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* number of this disk */
         if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* number of the disk with the start of the central directory */
         if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* total number of entries in the central directory on this disk */
         if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* total number of entries in the central directory */
         if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         if ((number_entry_CD!=us.gi.number_entry) ||
             (number_disk_with_CD!=0) ||
             (number_disk!=0))
-            err=UNZ_BADZIPFILE;
+        {
+            err = UNZ_BADZIPFILE;
+        }
 
         /* size of the central directory */
         if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* offset of start of central directory with respect to the
-          starting disk number */
+           starting disk number */
         if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         us.gi.size_comment = 0;
     }
@@ -684,60 +834,84 @@ local unzFile unzOpenInternal (const void *path,
     {
         central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
         if (central_pos==0)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         us.isZip64 = 0;
 
         if (ZSEEK64(us.z_filefunc, us.filestream,
-                                        central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
-            err=UNZ_ERRNO;
+                    central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* the signature, already checked */
         if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* number of this disk */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* number of the disk with the start of the central directory */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
 
         /* total number of entries in the central dir on this disk */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
         us.gi.number_entry = uL;
 
         /* total number of entries in the central dir */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
         number_entry_CD = uL;
 
         if ((number_entry_CD!=us.gi.number_entry) ||
             (number_disk_with_CD!=0) ||
             (number_disk!=0))
-            err=UNZ_BADZIPFILE;
+        {
+            err = UNZ_BADZIPFILE;
+        }
 
         /* size of the central directory */
         if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
         us.size_central_dir = uL;
 
         /* offset of start of central directory with respect to the
             starting disk number */
         if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
         us.offset_central_dir = uL;
 
         /* zipfile comment length */
         if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
     }
 
     if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
         (err==UNZ_OK))
-        err=UNZ_BADZIPFILE;
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     if (err!=UNZ_OK)
     {
@@ -746,16 +920,16 @@ local unzFile unzOpenInternal (const void *path,
     }
 
     us.byte_before_the_zipfile = central_pos -
-                            (us.offset_central_dir+us.size_central_dir);
-    us.central_pos = central_pos;
+                                 (us.offset_central_dir+us.size_central_dir);
+    us.central_pos       = central_pos;
     us.pfile_in_zip_read = NULL;
-    us.encrypted = 0;
+    us.encrypted         = 0;
 
 
-    s=(unz64_s*)ALLOC(sizeof(unz64_s));
+    s = (unz64_s*)ALLOC(sizeof(unz64_s));
     if( s != NULL)
     {
-        *s=us;
+        *s = us;
         unzGoToFirstFile((unzFile)s);
     }
     return (unzFile)s;
@@ -763,7 +937,7 @@ local unzFile unzOpenInternal (const void *path,
 
 
 extern unzFile MINIZIP_API unzOpen2 (const char *path,
-                                        zlib_filefunc_def* pzlib_filefunc32_def)
+                                     zlib_filefunc_def* pzlib_filefunc32_def)
 {
     if (pzlib_filefunc32_def != NULL)
     {
@@ -772,11 +946,13 @@ extern unzFile MINIZIP_API unzOpen2 (const char *path,
         return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);
     }
     else
+    {
         return unzOpenInternal(path, NULL, 0);
+    }
 }
 
 extern unzFile MINIZIP_API unzOpen2_64 (const void *path,
-                                     zlib_filefunc64_def* pzlib_filefunc_def)
+                                        zlib_filefunc64_def* pzlib_filefunc_def)
 {
     if (pzlib_filefunc_def != NULL)
     {
@@ -787,7 +963,9 @@ extern unzFile MINIZIP_API unzOpen2_64 (const void *path,
         return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);
     }
     else
+    {
         return unzOpenInternal(path, NULL, 1);
+    }
 }
 
 extern unzFile MINIZIP_API unzOpen (const char *path)
@@ -801,19 +979,23 @@ extern unzFile MINIZIP_API unzOpen64 (const void *path)
 }
 
 /*
-  Close a ZipFile opened with unzipOpen.
-  If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
+   Close a ZipFile opened with unzipOpen.
+   If there is files inside the .Zip opened with unzipOpenCurrentFile (see later),
     these files MUST be closed with unzipCloseCurrentFile before call unzipClose.
-  return UNZ_OK if there is no problem. */
+   return UNZ_OK if there is no problem. */
 extern MINIZIP_API int unzClose (unzFile file)
 {
     unz64_s* s;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
 
     if (s->pfile_in_zip_read!=NULL)
+    {
         unzCloseCurrentFile(file);
+    }
 
     ZCLOSE64(s->z_filefunc, s->filestream);
     TRYFREE(s);
@@ -822,16 +1004,18 @@ extern MINIZIP_API int unzClose (unzFile file)
 
 
 /*
-  Write info about the ZipFile in the *pglobal_info structure.
-  No preparation of the structure is needed
-  return UNZ_OK if there is no problem. */
+   Write info about the ZipFile in the *pglobal_info structure.
+   No preparation of the structure is needed
+   return UNZ_OK if there is no problem. */
 extern MINIZIP_API int unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)
 {
     unz64_s* s;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    *pglobal_info=s->gi;
+    }
+    s             = (unz64_s*)file;
+    *pglobal_info = s->gi;
     return UNZ_OK;
 }
 
@@ -839,8 +1023,10 @@ extern MINIZIP_API int unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_
 {
     unz64_s* s;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
     /* to do : check if number_entry is not truncated */
     pglobal_info32->number_entry = (uLong)s->gi.number_entry;
     pglobal_info32->size_comment = s->gi.size_comment;
@@ -848,170 +1034,228 @@ extern MINIZIP_API int unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_
 }
 /*
    Translate date/time from Dos format to tm_unz (readable more easilty)
-*/
+ */
 local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
 {
     ZPOS64_T uDate;
-    uDate = (ZPOS64_T)(ulDosDate>>16);
-    ptm->tm_mday = (uInt)(uDate&0x1f) ;
-    ptm->tm_mon =  (uInt)((((uDate)&0x1E0)/0x20)-1) ;
-    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+    uDate        = (ZPOS64_T)(ulDosDate>>16);
+    ptm->tm_mday = (uInt)(uDate&0x1f);
+    ptm->tm_mon  = (uInt)((((uDate)&0x1E0)/0x20)-1);
+    ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980);
 
     ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
-    ptm->tm_min =  (uInt) ((ulDosDate&0x7E0)/0x20) ;
-    ptm->tm_sec =  (uInt) (2*(ulDosDate&0x1f)) ;
+    ptm->tm_min  = (uInt) ((ulDosDate&0x7E0)/0x20);
+    ptm->tm_sec  = (uInt) (2*(ulDosDate&0x1f));
 }
 
 /*
-  Get Info about the current file in the zipfile, with internal only info
-*/
+   Get Info about the current file in the zipfile, with internal only info
+ */
 local int unz64local_GetCurrentFileInfoInternal OF((unzFile file,
-                                                  unz_file_info64 *pfile_info,
-                                                  unz_file_info64_internal
-                                                  *pfile_info_internal,
-                                                  char *szFileName,
-                                                  uLong fileNameBufferSize,
-                                                  void *extraField,
-                                                  uLong extraFieldBufferSize,
-                                                  char *szComment,
-                                                  uLong commentBufferSize));
+                                                    unz_file_info64 *pfile_info,
+                                                    unz_file_info64_internal
+                                                    *pfile_info_internal,
+                                                    char *szFileName,
+                                                    uLong fileNameBufferSize,
+                                                    void *extraField,
+                                                    uLong extraFieldBufferSize,
+                                                    char *szComment,
+                                                    uLong commentBufferSize));
 
 local int unz64local_GetCurrentFileInfoInternal (unzFile file,
-                                                  unz_file_info64 *pfile_info,
-                                                  unz_file_info64_internal
-                                                  *pfile_info_internal,
-                                                  char *szFileName,
-                                                  uLong fileNameBufferSize,
-                                                  void *extraField,
-                                                  uLong extraFieldBufferSize,
-                                                  char *szComment,
-                                                  uLong commentBufferSize)
+                                                 unz_file_info64 *pfile_info,
+                                                 unz_file_info64_internal
+                                                 *pfile_info_internal,
+                                                 char *szFileName,
+                                                 uLong fileNameBufferSize,
+                                                 void *extraField,
+                                                 uLong extraFieldBufferSize,
+                                                 char *szComment,
+                                                 uLong commentBufferSize)
 {
     unz64_s* s;
     unz_file_info64 file_info;
     unz_file_info64_internal file_info_internal;
-    int err=UNZ_OK;
+    int err = UNZ_OK;
     uLong uMagic;
-    long lSeek=0;
+    long lSeek = 0;
     uLong uL;
 
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
     if (ZSEEK64(s->z_filefunc, s->filestream,
-              s->pos_in_central_dir+s->byte_before_the_zipfile,
-              ZLIB_FILEFUNC_SEEK_SET)!=0)
-        err=UNZ_ERRNO;
+                s->pos_in_central_dir+s->byte_before_the_zipfile,
+                ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
+        err = UNZ_ERRNO;
+    }
 
 
     /* we check the magic */
     if (err==UNZ_OK)
     {
         if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
         else if (uMagic!=0x02014b50)
-            err=UNZ_BADZIPFILE;
+        {
+            err = UNZ_BADZIPFILE;
+        }
     }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     file_info.compressed_size = uL;
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     file_info.uncompressed_size = uL;
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
-                // relative offset of local header
+    // relative offset of local header
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     file_info_internal.offset_curfile = uL;
 
-    lSeek+=file_info.size_filename;
+    lSeek += file_info.size_filename;
     if ((err==UNZ_OK) && (szFileName!=NULL))
     {
-        uLong uSizeRead ;
+        uLong uSizeRead;
         if (file_info.size_filename<fileNameBufferSize)
         {
-            *(szFileName+file_info.size_filename)='\0';
-            uSizeRead = file_info.size_filename;
+            *(szFileName+file_info.size_filename) = '\0';
+            uSizeRead                             = file_info.size_filename;
         }
         else
+        {
             uSizeRead = fileNameBufferSize;
+        }
 
         if ((file_info.size_filename>0) && (fileNameBufferSize>0))
+        {
             if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
+        }
         lSeek -= uSizeRead;
     }
 
     // Read extrafield
     if ((err==UNZ_OK) && (extraField!=NULL))
     {
-        ZPOS64_T uSizeRead ;
+        ZPOS64_T uSizeRead;
         if (file_info.size_file_extra<extraFieldBufferSize)
+        {
             uSizeRead = file_info.size_file_extra;
+        }
         else
+        {
             uSizeRead = extraFieldBufferSize;
+        }
 
         if (lSeek!=0)
         {
             if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
-                lSeek=0;
+            {
+                lSeek = 0;
+            }
             else
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
         }
 
         if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
+        {
             if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
+        }
 
         lSeek += file_info.size_file_extra - (uLong)uSizeRead;
     }
     else
+    {
         lSeek += file_info.size_file_extra;
+    }
 
 
     if ((err==UNZ_OK) && (file_info.size_file_extra != 0))
     {
-                                uLong acc = 0;
+        uLong acc = 0;
 
         // since lSeek now points to after the extra field we need to move back
         lSeek -= file_info.size_file_extra;
@@ -1019,21 +1263,29 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
         if (lSeek!=0)
         {
             if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
-                lSeek=0;
+            {
+                lSeek = 0;
+            }
             else
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
         }
 
         while(acc < file_info.size_file_extra)
         {
             uLong headerId;
-                                                uLong dataSize;
+            uLong dataSize;
 
             if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
 
             if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
 
             /* ZIP64 extra fields */
             if (headerId == 0x0001)
@@ -1043,34 +1295,45 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
                 if(file_info.uncompressed_size == (ZPOS64_T)(unsigned long)-1)
                 {
                     if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
-                        err=UNZ_ERRNO;
+                    {
+                        err = UNZ_ERRNO;
+                    }
                 }
 
                 if(file_info.compressed_size == (ZPOS64_T)(unsigned long)-1)
                 {
                     if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
-                        err=UNZ_ERRNO;
+                    {
+                        err = UNZ_ERRNO;
+                    }
                 }
 
                 if(file_info_internal.offset_curfile == (ZPOS64_T)(unsigned long)-1)
                 {
                     /* Relative Header offset */
-                    if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
-                        err=UNZ_ERRNO;
+                    if (unz64local_getLong64(&s->z_filefunc, s->filestream,
+                                             &file_info_internal.offset_curfile) != UNZ_OK)
+                    {
+                        err = UNZ_ERRNO;
+                    }
                 }
 
                 if(file_info.disk_num_start == (unsigned long)-1)
                 {
                     /* Disk Start Number */
                     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
-                        err=UNZ_ERRNO;
+                    {
+                        err = UNZ_ERRNO;
+                    }
                 }
 
             }
             else
             {
                 if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)
-                    err=UNZ_ERRNO;
+                {
+                    err = UNZ_ERRNO;
+                }
             }
 
             acc += 2 + 2 + dataSize;
@@ -1079,37 +1342,53 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
 
     if ((err==UNZ_OK) && (szComment!=NULL))
     {
-        uLong uSizeRead ;
+        uLong uSizeRead;
         if (file_info.size_file_comment<commentBufferSize)
         {
-            *(szComment+file_info.size_file_comment)='\0';
-            uSizeRead = file_info.size_file_comment;
+            *(szComment+file_info.size_file_comment) = '\0';
+            uSizeRead                                = file_info.size_file_comment;
         }
         else
+        {
             uSizeRead = commentBufferSize;
+        }
 
         if (lSeek!=0)
         {
             if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
-                lSeek=0;
+            {
+                lSeek = 0;
+            }
             else
-                err=UNZ_ERRNO;
+            {
+                err = UNZ_ERRNO;
+            }
         }
 
         if ((file_info.size_file_comment>0) && (commentBufferSize>0))
+        {
             if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
-                err=UNZ_ERRNO;
-        lSeek+=file_info.size_file_comment - uSizeRead;
+            {
+                err = UNZ_ERRNO;
+            }
+        }
+        lSeek += file_info.size_file_comment - uSizeRead;
     }
     else
-        lSeek+=file_info.size_file_comment;
+    {
+        lSeek += file_info.size_file_comment;
+    }
 
 
     if ((err==UNZ_OK) && (pfile_info!=NULL))
-        *pfile_info=file_info;
+    {
+        *pfile_info = file_info;
+    }
 
     if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
-        *pfile_info_internal=file_info_internal;
+    {
+        *pfile_info_internal = file_info_internal;
+    }
 
     return err;
 }
@@ -1117,27 +1396,27 @@ local int unz64local_GetCurrentFileInfoInternal (unzFile file,
 
 
 /*
-  Write info about the ZipFile in the *pglobal_info structure.
-  No preparation of the structure is needed
-  return UNZ_OK if there is no problem.
-*/
+   Write info about the ZipFile in the *pglobal_info structure.
+   No preparation of the structure is needed
+   return UNZ_OK if there is no problem.
+ */
 extern MINIZIP_API int unzGetCurrentFileInfo64 (unzFile file,
-                                          unz_file_info64 * pfile_info,
-                                          char * szFileName, uLong fileNameBufferSize,
-                                          void *extraField, uLong extraFieldBufferSize,
-                                          char* szComment,  uLong commentBufferSize)
+                                                unz_file_info64 * pfile_info,
+                                                char * szFileName, uLong fileNameBufferSize,
+                                                void *extraField, uLong extraFieldBufferSize,
+                                                char* szComment,  uLong commentBufferSize)
 {
     return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
-                                                szFileName,fileNameBufferSize,
-                                                extraField,extraFieldBufferSize,
-                                                szComment,commentBufferSize);
+                                                 szFileName,fileNameBufferSize,
+                                                 extraField,extraFieldBufferSize,
+                                                 szComment,commentBufferSize);
 }
 
 extern MINIZIP_API int unzGetCurrentFileInfo (unzFile file,
-                                          unz_file_info * pfile_info,
-                                          char * szFileName, uLong fileNameBufferSize,
-                                          void *extraField, uLong extraFieldBufferSize,
-                                          char* szComment,  uLong commentBufferSize)
+                                              unz_file_info * pfile_info,
+                                              char * szFileName, uLong fileNameBufferSize,
+                                              void *extraField, uLong extraFieldBufferSize,
+                                              char* szComment,  uLong commentBufferSize)
 {
     int err;
     unz_file_info64 file_info64;
@@ -1147,88 +1426,98 @@ extern MINIZIP_API int unzGetCurrentFileInfo (unzFile file,
                                                 szComment,commentBufferSize);
     if (err==UNZ_OK)
     {
-        pfile_info->version = file_info64.version;
-        pfile_info->version_needed = file_info64.version_needed;
-        pfile_info->flag = file_info64.flag;
+        pfile_info->version            = file_info64.version;
+        pfile_info->version_needed     = file_info64.version_needed;
+        pfile_info->flag               = file_info64.flag;
         pfile_info->compression_method = file_info64.compression_method;
-        pfile_info->dosDate = file_info64.dosDate;
-        pfile_info->crc = file_info64.crc;
+        pfile_info->dosDate            = file_info64.dosDate;
+        pfile_info->crc                = file_info64.crc;
 
-        pfile_info->size_filename = file_info64.size_filename;
-        pfile_info->size_file_extra = file_info64.size_file_extra;
+        pfile_info->size_filename     = file_info64.size_filename;
+        pfile_info->size_file_extra   = file_info64.size_file_extra;
         pfile_info->size_file_comment = file_info64.size_file_comment;
 
         pfile_info->disk_num_start = file_info64.disk_num_start;
-        pfile_info->internal_fa = file_info64.internal_fa;
-        pfile_info->external_fa = file_info64.external_fa;
+        pfile_info->internal_fa    = file_info64.internal_fa;
+        pfile_info->external_fa    = file_info64.external_fa;
 
         pfile_info->tmu_date = file_info64.tmu_date,
 
 
-        pfile_info->compressed_size = (uLong)file_info64.compressed_size;
+        pfile_info->compressed_size   = (uLong)file_info64.compressed_size;
         pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;
 
     }
     return err;
 }
 /*
-  Set the current file of the zipfile to the first file.
-  return UNZ_OK if there is no problem
-*/
+   Set the current file of the zipfile to the first file.
+   return UNZ_OK if there is no problem
+ */
 extern MINIZIP_API int unzGoToFirstFile (unzFile file)
 {
-    int err=UNZ_OK;
+    int err = UNZ_OK;
     unz64_s* s;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    s->pos_in_central_dir=s->offset_central_dir;
-    s->num_file=0;
-    err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
-                                             &s->cur_file_info_internal,
-                                             NULL,0,NULL,0,NULL,0);
+    }
+    s                     = (unz64_s*)file;
+    s->pos_in_central_dir = s->offset_central_dir;
+    s->num_file           = 0;
+    err                   = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                                                  &s->cur_file_info_internal,
+                                                                  NULL,0,NULL,0,NULL,0);
     s->current_file_ok = (err == UNZ_OK);
     return err;
 }
 
 /*
-  Set the current file of the zipfile to the next file.
-  return UNZ_OK if there is no problem
-  return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
-*/
-extern MINIZIP_API int unzGoToNextFile (unzFile  file)
+   Set the current file of the zipfile to the next file.
+   return UNZ_OK if there is no problem
+   return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+ */
+extern MINIZIP_API int unzGoToNextFile (unzFile file)
 {
     unz64_s* s;
     int err;
 
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
     if (!s->current_file_ok)
+    {
         return UNZ_END_OF_LIST_OF_FILE;
+    }
     if (s->gi.number_entry != 0xffff)    /* 2^16 files overflow hack */
-      if (s->num_file+1==s->gi.number_entry)
-        return UNZ_END_OF_LIST_OF_FILE;
+    {
+        if (s->num_file+1==s->gi.number_entry)
+        {
+            return UNZ_END_OF_LIST_OF_FILE;
+        }
+    }
 
     s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
-            s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
+                             s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment;
     s->num_file++;
     err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
-                                               &s->cur_file_info_internal,
-                                               NULL,0,NULL,0,NULL,0);
+                                                &s->cur_file_info_internal,
+                                                NULL,0,NULL,0,NULL,0);
     s->current_file_ok = (err == UNZ_OK);
     return err;
 }
 
 
 /*
-  Try locate the file szFileName in the zipfile.
-  For the iCaseSensitivity signification, see unzipStringFileNameCompare
+   Try locate the file szFileName in the zipfile.
+   For the iCaseSensitivity signification, see unzipStringFileNameCompare
 
-  return value :
-  UNZ_OK if the file is found. It becomes the current file.
-  UNZ_END_OF_LIST_OF_FILE if the file is not found
-*/
+   return value :
+   UNZ_OK if the file is found. It becomes the current file.
+   UNZ_END_OF_LIST_OF_FILE if the file is not found
+ */
 extern MINIZIP_API int unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)
 {
     unz64_s* s;
@@ -1244,19 +1533,25 @@ extern MINIZIP_API int unzLocateFile (unzFile file, const char *szFileName, int
 
 
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
     if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
+    {
         return UNZ_PARAMERROR;
+    }
 
-    s=(unz64_s*)file;
+    s = (unz64_s*)file;
     if (!s->current_file_ok)
+    {
         return UNZ_END_OF_LIST_OF_FILE;
+    }
 
     /* Save the current state */
-    num_fileSaved = s->num_file;
-    pos_in_central_dirSaved = s->pos_in_central_dir;
-    cur_file_infoSaved = s->cur_file_info;
+    num_fileSaved               = s->num_file;
+    pos_in_central_dirSaved     = s->pos_in_central_dir;
+    cur_file_infoSaved          = s->cur_file_info;
     cur_file_info_internalSaved = s->cur_file_info_internal;
 
     err = unzGoToFirstFile(file);
@@ -1265,13 +1560,15 @@ extern MINIZIP_API int unzLocateFile (unzFile file, const char *szFileName, int
     {
         char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
         err = unzGetCurrentFileInfo64(file,NULL,
-                                    szCurrentFileName,sizeof(szCurrentFileName)-1,
-                                    NULL,0,NULL,0);
+                                      szCurrentFileName,sizeof(szCurrentFileName)-1,
+                                      NULL,0,NULL,0);
         if (err == UNZ_OK)
         {
             if (unzStringFileNameCompare(szCurrentFileName,
-                                            szFileName,iCaseSensitivity)==0)
+                                         szFileName,iCaseSensitivity)==0)
+            {
                 return UNZ_OK;
+            }
             err = unzGoToNextFile(file);
         }
     }
@@ -1279,44 +1576,48 @@ extern MINIZIP_API int unzLocateFile (unzFile file, const char *szFileName, int
     /* We failed, so restore the state of the 'current file' to where we
      * were.
      */
-    s->num_file = num_fileSaved ;
-    s->pos_in_central_dir = pos_in_central_dirSaved ;
-    s->cur_file_info = cur_file_infoSaved;
+    s->num_file               = num_fileSaved;
+    s->pos_in_central_dir     = pos_in_central_dirSaved;
+    s->cur_file_info          = cur_file_infoSaved;
     s->cur_file_info_internal = cur_file_info_internalSaved;
     return err;
 }
 
 
 /*
-///////////////////////////////////////////
-// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
-// I need random access
-//
-// Further optimization could be realized by adding an ability
-// to cache the directory in memory. The goal being a single
-// comprehensive file read to put the file I need in a memory.
-*/
+   ///////////////////////////////////////////
+   // Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
+   // I need random access
+   //
+   // Further optimization could be realized by adding an ability
+   // to cache the directory in memory. The goal being a single
+   // comprehensive file read to put the file I need in a memory.
+ */
 
 /*
-typedef struct unz_file_pos_s
-{
+   typedef struct unz_file_pos_s
+   {
     ZPOS64_T pos_in_zip_directory;   // offset in file
     ZPOS64_T num_of_file;            // # of file
-} unz_file_pos;
-*/
+   } unz_file_pos;
+ */
 
 extern MINIZIP_API int unzGetFilePos64(unzFile file, unz64_file_pos*  file_pos)
 {
     unz64_s* s;
 
     if (file==NULL || file_pos==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
     if (!s->current_file_ok)
+    {
         return UNZ_END_OF_LIST_OF_FILE;
+    }
 
-    file_pos->pos_in_zip_directory  = s->pos_in_central_dir;
-    file_pos->num_of_file           = s->num_file;
+    file_pos->pos_in_zip_directory = s->pos_in_central_dir;
+    file_pos->num_of_file          = s->num_file;
 
     return UNZ_OK;
 }
@@ -1330,7 +1631,7 @@ extern MINIZIP_API int unzGetFilePos(
     if (err==UNZ_OK)
     {
         file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;
-        file_pos->num_of_file = (uLong)file_pos64.num_of_file;
+        file_pos->num_of_file          = (uLong)file_pos64.num_of_file;
     }
     return err;
 }
@@ -1341,8 +1642,10 @@ extern MINIZIP_API int unzGoToFilePos64(unzFile file, const unz64_file_pos* file
     int err;
 
     if (file==NULL || file_pos==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
 
     /* jump to the right spot */
     s->pos_in_central_dir = file_pos->pos_in_zip_directory;
@@ -1350,8 +1653,8 @@ extern MINIZIP_API int unzGoToFilePos64(unzFile file, const unz64_file_pos* file
 
     /* set the current file */
     err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
-                                               &s->cur_file_info_internal,
-                                               NULL,0,NULL,0,NULL,0);
+                                                &s->cur_file_info_internal,
+                                                NULL,0,NULL,0,NULL,0);
     /* return results */
     s->current_file_ok = (err == UNZ_OK);
     return err;
@@ -1363,101 +1666,139 @@ extern MINIZIP_API int unzGoToFilePos(
 {
     unz64_file_pos file_pos64;
     if (file_pos == NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
     file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;
-    file_pos64.num_of_file = file_pos->num_of_file;
+    file_pos64.num_of_file          = file_pos->num_of_file;
     return unzGoToFilePos64(file,&file_pos64);
 }
 
 /*
-// Unzip Helper Functions - should be here?
-///////////////////////////////////////////
-*/
+   // Unzip Helper Functions - should be here?
+   ///////////////////////////////////////////
+ */
 
 /*
-  Read the local header of the current zipfile
-  Check the coherency of the local header and info in the end of central
+   Read the local header of the current zipfile
+   Check the coherency of the local header and info in the end of central
         directory about this file
-  store in *piSizeVar the size of extra info in local header
+   store in *piSizeVar the size of extra info in local header
         (filename and size of extra field data)
-*/
+ */
 local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar,
-                                                    ZPOS64_T * poffset_local_extrafield,
-                                                    uInt  * psize_local_extrafield)
+                                                      ZPOS64_T * poffset_local_extrafield,
+                                                      uInt  * psize_local_extrafield)
 {
     uLong uMagic,uData,uFlags;
     uLong size_filename;
     uLong size_extra_field;
-    int err=UNZ_OK;
+    int err = UNZ_OK;
 
-    *piSizeVar = 0;
+    *piSizeVar                = 0;
     *poffset_local_extrafield = 0;
-    *psize_local_extrafield = 0;
+    *psize_local_extrafield   = 0;
 
     if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
-                                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+                s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
         return UNZ_ERRNO;
+    }
 
 
     if (err==UNZ_OK)
     {
         if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
-            err=UNZ_ERRNO;
+        {
+            err = UNZ_ERRNO;
+        }
         else if (uMagic!=0x04034b50)
-            err=UNZ_BADZIPFILE;
+        {
+            err = UNZ_BADZIPFILE;
+        }
     }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 /*
     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
         err=UNZ_BADZIPFILE;
-*/
+ */
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
-        err=UNZ_BADZIPFILE;
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
 /* #ifdef HAVE_BZIP2 */
-                         (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+        (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
 /* #endif */
-                         (s->cur_file_info.compression_method!=Z_DEFLATED))
-        err=UNZ_BADZIPFILE;
+        (s->cur_file_info.compression_method!=Z_DEFLATED))
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))
-        err=UNZ_BADZIPFILE;
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))
-        err=UNZ_BADZIPFILE;
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))
-        err=UNZ_BADZIPFILE;
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
-        err=UNZ_ERRNO;
+    {
+        err = UNZ_ERRNO;
+    }
     else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
-        err=UNZ_BADZIPFILE;
+    {
+        err = UNZ_BADZIPFILE;
+    }
 
     *piSizeVar += (uInt)size_filename;
 
     if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
-        err=UNZ_ERRNO;
-    *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
-                                    SIZEZIPLOCALHEADER + size_filename;
+    {
+        err = UNZ_ERRNO;
+    }
+    *poffset_local_extrafield = s->cur_file_info_internal.offset_curfile +
+                                SIZEZIPLOCALHEADER + size_filename;
     *psize_local_extrafield = (uInt)size_extra_field;
 
     *piSizeVar += (uInt)size_extra_field;
@@ -1466,46 +1807,59 @@ local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVa
 }
 
 /*
-  Open for reading data the current file in the zipfile.
-  If there is no error and the file is opened, the return value is UNZ_OK.
-*/
+   Open for reading data the current file in the zipfile.
+   If there is no error and the file is opened, the return value is UNZ_OK.
+ */
 extern MINIZIP_API int unzOpenCurrentFile3 (unzFile file, int* method,
                                             int* level, int raw, const char* password)
 {
-    int err=UNZ_OK;
+    int err = UNZ_OK;
     uInt iSizeVar;
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
     ZPOS64_T offset_local_extrafield;  /* offset of the local extra field */
-    uInt  size_local_extrafield;    /* size of the local extra field */
+    uInt size_local_extrafield;     /* size of the local extra field */
 #    ifndef NOUNCRYPT
     char source[12];
 #    else
     if (password != NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 #    endif
 
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
     if (!s->current_file_ok)
+    {
         return UNZ_PARAMERROR;
+    }
 
     if (s->pfile_in_zip_read != NULL)
+    {
         unzCloseCurrentFile(file);
+    }
 
-    if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
+    if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,
+                                                   &size_local_extrafield)!=UNZ_OK)
+    {
         return UNZ_BADZIPFILE;
+    }
 
     pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));
     if (pfile_in_zip_read_info==NULL)
+    {
         return UNZ_INTERNALERROR;
+    }
 
-    pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
+    pfile_in_zip_read_info->read_buffer             = (char*)ALLOC(UNZ_BUFSIZE);
     pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
-    pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
-    pfile_in_zip_read_info->pos_local_extrafield=0;
-    pfile_in_zip_read_info->raw=raw;
+    pfile_in_zip_read_info->size_local_extrafield   = size_local_extrafield;
+    pfile_in_zip_read_info->pos_local_extrafield    = 0;
+    pfile_in_zip_read_info->raw                     = raw;
 
     if (pfile_in_zip_read_info->read_buffer==NULL)
     {
@@ -1513,19 +1867,21 @@ extern MINIZIP_API int unzOpenCurrentFile3 (unzFile file, int* method,
         return UNZ_INTERNALERROR;
     }
 
-    pfile_in_zip_read_info->stream_initialised=0;
+    pfile_in_zip_read_info->stream_initialised = 0;
 
     if (method!=NULL)
+    {
         *method = (int)s->cur_file_info.compression_method;
+    }
 
     if (level!=NULL)
     {
         *level = 6;
         switch (s->cur_file_info.flag & 0x06)
         {
-          case 6 : *level = 1; break;
-          case 4 : *level = 2; break;
-          case 2 : *level = 9; break;
+            case 6: *level = 1; break;
+            case 4: *level = 2; break;
+            case 2: *level = 9; break;
         }
     }
 
@@ -1534,61 +1890,67 @@ extern MINIZIP_API int unzOpenCurrentFile3 (unzFile file, int* method,
         (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
 /* #endif */
         (s->cur_file_info.compression_method!=Z_DEFLATED))
+    {
 
-        err=UNZ_BADZIPFILE;
+        err = UNZ_BADZIPFILE;
+    }
 
-    pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
-    pfile_in_zip_read_info->crc32=0;
-    pfile_in_zip_read_info->total_out_64=0;
-    pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;
-    pfile_in_zip_read_info->filestream=s->filestream;
-    pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
-    pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
+    pfile_in_zip_read_info->crc32_wait              = s->cur_file_info.crc;
+    pfile_in_zip_read_info->crc32                   = 0;
+    pfile_in_zip_read_info->total_out_64            = 0;
+    pfile_in_zip_read_info->compression_method      = s->cur_file_info.compression_method;
+    pfile_in_zip_read_info->filestream              = s->filestream;
+    pfile_in_zip_read_info->z_filefunc              = s->z_filefunc;
+    pfile_in_zip_read_info->byte_before_the_zipfile = s->byte_before_the_zipfile;
 
     pfile_in_zip_read_info->stream.total_out = 0;
 
     if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))
     {
 #ifdef HAVE_BZIP2
-      pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;
-      pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
-      pfile_in_zip_read_info->bstream.opaque = (voidpf)0;
-      pfile_in_zip_read_info->bstream.state = (voidpf)0;
-
-      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
-      pfile_in_zip_read_info->stream.zfree = (free_func)0;
-      pfile_in_zip_read_info->stream.opaque = (voidpf)0;
-      pfile_in_zip_read_info->stream.next_in = (voidpf)0;
-      pfile_in_zip_read_info->stream.avail_in = 0;
-
-      err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
-      if (err == Z_OK)
-        pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
-      else
-      {
-        TRYFREE(pfile_in_zip_read_info);
-        return err;
-      }
+        pfile_in_zip_read_info->bstream.bzalloc = (void *(*)(void *, int, int)) 0;
+        pfile_in_zip_read_info->bstream.bzfree  = (free_func)0;
+        pfile_in_zip_read_info->bstream.opaque  = (voidpf)0;
+        pfile_in_zip_read_info->bstream.state   = (voidpf)0;
+
+        pfile_in_zip_read_info->stream.zalloc   = (alloc_func)0;
+        pfile_in_zip_read_info->stream.zfree    = (free_func)0;
+        pfile_in_zip_read_info->stream.opaque   = (voidpf)0;
+        pfile_in_zip_read_info->stream.next_in  = (voidpf)0;
+        pfile_in_zip_read_info->stream.avail_in = 0;
+
+        err = BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
+        if (err == Z_OK)
+        {
+            pfile_in_zip_read_info->stream_initialised = Z_BZIP2ED;
+        }
+        else
+        {
+            TRYFREE(pfile_in_zip_read_info);
+            return err;
+        }
 #else
-      pfile_in_zip_read_info->raw=1;
+        pfile_in_zip_read_info->raw = 1;
 #endif
     }
     else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))
     {
-      pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
-      pfile_in_zip_read_info->stream.zfree = (free_func)0;
-      pfile_in_zip_read_info->stream.opaque = (voidpf)0;
-      pfile_in_zip_read_info->stream.next_in = 0;
-      pfile_in_zip_read_info->stream.avail_in = 0;
-
-      err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
-      if (err == Z_OK)
-        pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
-      else
-      {
-        TRYFREE(pfile_in_zip_read_info);
-        return err;
-      }
+        pfile_in_zip_read_info->stream.zalloc   = (alloc_func)0;
+        pfile_in_zip_read_info->stream.zfree    = (free_func)0;
+        pfile_in_zip_read_info->stream.opaque   = (voidpf)0;
+        pfile_in_zip_read_info->stream.next_in  = 0;
+        pfile_in_zip_read_info->stream.avail_in = 0;
+
+        err = inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
+        if (err == Z_OK)
+        {
+            pfile_in_zip_read_info->stream_initialised = Z_DEFLATED;
+        }
+        else
+        {
+            TRYFREE(pfile_in_zip_read_info);
+            return err;
+        }
         /* windowBits is passed < 0 to tell that there is no zlib header.
          * Note that in this case inflate *requires* an extra "dummy" byte
          * after the compressed stream in order to complete decompression and
@@ -1598,19 +1960,19 @@ extern MINIZIP_API int unzOpenCurrentFile3 (unzFile file, int* method,
          */
     }
     pfile_in_zip_read_info->rest_read_compressed =
-            s->cur_file_info.compressed_size ;
+        s->cur_file_info.compressed_size;
     pfile_in_zip_read_info->rest_read_uncompressed =
-            s->cur_file_info.uncompressed_size ;
+        s->cur_file_info.uncompressed_size;
 
 
     pfile_in_zip_read_info->pos_in_zipfile =
-            s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
-              iSizeVar;
+        s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
+        iSizeVar;
 
     pfile_in_zip_read_info->stream.avail_in = (uInt)0;
 
     s->pfile_in_zip_read = pfile_in_zip_read_info;
-                s->encrypted = 0;
+    s->encrypted         = 0;
 
 #    ifndef NOUNCRYPT
     if (password != NULL)
@@ -1619,18 +1981,24 @@ extern MINIZIP_API int unzOpenCurrentFile3 (unzFile file, int* method,
         s->pcrc_32_tab = get_crc_table();
         init_keys(password,s->keys,s->pcrc_32_tab);
         if (ZSEEK64(s->z_filefunc, s->filestream,
-                  s->pfile_in_zip_read->pos_in_zipfile +
-                     s->pfile_in_zip_read->byte_before_the_zipfile,
-                  SEEK_SET)!=0)
+                    s->pfile_in_zip_read->pos_in_zipfile +
+                    s->pfile_in_zip_read->byte_before_the_zipfile,
+                    SEEK_SET)!=0)
+        {
             return UNZ_INTERNALERROR;
+        }
         if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)
+        {
             return UNZ_INTERNALERROR;
+        }
 
         for (i = 0; i<12; i++)
+        {
             zdecode(s->keys,s->pcrc_32_tab,source[i]);
+        }
 
-        s->pfile_in_zip_read->pos_in_zipfile+=12;
-        s->encrypted=1;
+        s->pfile_in_zip_read->pos_in_zipfile += 12;
+        s->encrypted                          = 1;
     }
 #    endif
 
@@ -1659,47 +2027,59 @@ extern ZPOS64_T MINIZIP_API unzGetCurrentFileZStreamPos64( unzFile file)
 {
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
-    s=(unz64_s*)file;
+    s = (unz64_s*)file;
     if (file==NULL)
+    {
         return 0; //UNZ_PARAMERROR;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
     if (pfile_in_zip_read_info==NULL)
+    {
         return 0; //UNZ_PARAMERROR;
+    }
     return pfile_in_zip_read_info->pos_in_zipfile +
-                         pfile_in_zip_read_info->byte_before_the_zipfile;
+           pfile_in_zip_read_info->byte_before_the_zipfile;
 }
 
 /** Addition for GDAL : END */
 
 /*
-  Read bytes from the current file.
-  buf contain buffer where data must be copied
-  len the size of buf.
+   Read bytes from the current file.
+   buf contain buffer where data must be copied
+   len the size of buf.
 
-  return the number of byte copied if somes bytes are copied
-  return 0 if the end of file was reached
-  return <0 with error code if there is an error
+   return the number of byte copied if somes bytes are copied
+   return 0 if the end of file was reached
+   return <0 with error code if there is an error
     (UNZ_ERRNO for IO error, or zLib error for uncompress error)
-*/
+ */
 extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned len)
 {
-    int err=UNZ_OK;
+    int err    = UNZ_OK;
     uInt iRead = 0;
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    s                      = (unz64_s*)file;
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
 
     if (pfile_in_zip_read_info==NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
 
     if ((pfile_in_zip_read_info->read_buffer == NULL))
+    {
         return UNZ_END_OF_LIST_OF_FILE;
+    }
     if (len==0)
+    {
         return 0;
+    }
 
     pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
 
@@ -1707,15 +2087,19 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
 
     if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
         (!(pfile_in_zip_read_info->raw)))
+    {
         pfile_in_zip_read_info->stream.avail_out =
             (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
+    }
 
     if ((len>pfile_in_zip_read_info->rest_read_compressed+
-           pfile_in_zip_read_info->stream.avail_in) &&
-         (pfile_in_zip_read_info->raw))
+         pfile_in_zip_read_info->stream.avail_in) &&
+        (pfile_in_zip_read_info->raw))
+    {
         pfile_in_zip_read_info->stream.avail_out =
             (uInt)pfile_in_zip_read_info->rest_read_compressed+
             pfile_in_zip_read_info->stream.avail_in;
+    }
 
     while (pfile_in_zip_read_info->stream.avail_out>0)
     {
@@ -1724,37 +2108,47 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
         {
             uInt uReadThis = UNZ_BUFSIZE;
             if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
+            {
                 uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
+            }
             if (uReadThis == 0)
+            {
                 return UNZ_EOF;
+            }
             if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
-                      pfile_in_zip_read_info->filestream,
-                      pfile_in_zip_read_info->pos_in_zipfile +
-                         pfile_in_zip_read_info->byte_before_the_zipfile,
-                         ZLIB_FILEFUNC_SEEK_SET)!=0)
+                        pfile_in_zip_read_info->filestream,
+                        pfile_in_zip_read_info->pos_in_zipfile +
+                        pfile_in_zip_read_info->byte_before_the_zipfile,
+                        ZLIB_FILEFUNC_SEEK_SET)!=0)
+            {
                 return UNZ_ERRNO;
+            }
             if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
-                      pfile_in_zip_read_info->filestream,
-                      pfile_in_zip_read_info->read_buffer,
-                      uReadThis)!=uReadThis)
+                        pfile_in_zip_read_info->filestream,
+                        pfile_in_zip_read_info->read_buffer,
+                        uReadThis)!=uReadThis)
+            {
                 return UNZ_ERRNO;
+            }
 
 
 #            ifndef NOUNCRYPT
             if(s->encrypted)
             {
                 uInt i;
-                for(i=0;i<uReadThis;i++)
-                  pfile_in_zip_read_info->read_buffer[i] =
-                      zdecode(s->keys,s->pcrc_32_tab,
-                              pfile_in_zip_read_info->read_buffer[i]);
+                for(i = 0; i<uReadThis; i++)
+                {
+                    pfile_in_zip_read_info->read_buffer[i] =
+                        zdecode(s->keys,s->pcrc_32_tab,
+                                pfile_in_zip_read_info->read_buffer[i]);
+                }
             }
 #            endif
 
 
             pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
 
-            pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
+            pfile_in_zip_read_info->rest_read_compressed -= uReadThis;
 
             pfile_in_zip_read_info->stream.next_in =
                 (Bytef*)pfile_in_zip_read_info->read_buffer;
@@ -1763,34 +2157,42 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
 
         if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
         {
-            uInt uDoCopy,i ;
+            uInt uDoCopy,i;
 
             if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
                 (pfile_in_zip_read_info->rest_read_compressed == 0))
+            {
                 return (iRead==0) ? UNZ_EOF : iRead;
+            }
 
             if (pfile_in_zip_read_info->stream.avail_out <
-                            pfile_in_zip_read_info->stream.avail_in)
-                uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
+                pfile_in_zip_read_info->stream.avail_in)
+            {
+                uDoCopy = pfile_in_zip_read_info->stream.avail_out;
+            }
             else
-                uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
+            {
+                uDoCopy = pfile_in_zip_read_info->stream.avail_in;
+            }
 
-            for (i=0;i<uDoCopy;i++)
+            for (i = 0; i<uDoCopy; i++)
+            {
                 *(pfile_in_zip_read_info->stream.next_out+i) =
-                        *(pfile_in_zip_read_info->stream.next_in+i);
+                    *(pfile_in_zip_read_info->stream.next_in+i);
+            }
 
             pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;
 
             pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
-                                pfile_in_zip_read_info->stream.next_out,
-                                uDoCopy);
-            pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
-            pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
-            pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
-            pfile_in_zip_read_info->stream.next_out += uDoCopy;
-            pfile_in_zip_read_info->stream.next_in += uDoCopy;
-            pfile_in_zip_read_info->stream.total_out += uDoCopy;
-            iRead += uDoCopy;
+                                                  pfile_in_zip_read_info->stream.next_out,
+                                                  uDoCopy);
+            pfile_in_zip_read_info->rest_read_uncompressed -= uDoCopy;
+            pfile_in_zip_read_info->stream.avail_in        -= uDoCopy;
+            pfile_in_zip_read_info->stream.avail_out       -= uDoCopy;
+            pfile_in_zip_read_info->stream.next_out        += uDoCopy;
+            pfile_in_zip_read_info->stream.next_in         += uDoCopy;
+            pfile_in_zip_read_info->stream.total_out       += uDoCopy;
+            iRead                                          += uDoCopy;
         }
         else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)
         {
@@ -1809,18 +2211,19 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
             pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
 
             uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
-            bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;
+            bufBefore       = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;
 
-            err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
+            err = BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
 
             uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
-            uOutThis = uTotalOutAfter-uTotalOutBefore;
+            uOutThis       = uTotalOutAfter-uTotalOutBefore;
 
             pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
 
-            pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));
+            pfile_in_zip_read_info->crc32 =
+                crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));
             pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
-            iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+            iRead                                          += (uInt)(uTotalOutAfter - uTotalOutBefore);
 
             pfile_in_zip_read_info->stream.next_in   = (Bytef*)pfile_in_zip_read_info->bstream.next_in;
             pfile_in_zip_read_info->stream.avail_in  = pfile_in_zip_read_info->bstream.avail_in;
@@ -1830,9 +2233,13 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
             pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
 
             if (err==BZ_STREAM_END)
-              return (iRead==0) ? UNZ_EOF : iRead;
+            {
+                return (iRead==0) ? UNZ_EOF : iRead;
+            }
             if (err!=BZ_OK)
-              break;
+            {
+                break;
+            }
 #endif
         } // end Z_BZIP2ED
         else
@@ -1840,30 +2247,32 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
             ZPOS64_T uTotalOutBefore,uTotalOutAfter;
             const Bytef *bufBefore;
             ZPOS64_T uOutThis;
-            int flush=Z_SYNC_FLUSH;
+            int flush = Z_SYNC_FLUSH;
 
             uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
-            bufBefore = pfile_in_zip_read_info->stream.next_out;
+            bufBefore       = pfile_in_zip_read_info->stream.next_out;
 
             /*
-            if ((pfile_in_zip_read_info->rest_read_uncompressed ==
+               if ((pfile_in_zip_read_info->rest_read_uncompressed ==
                      pfile_in_zip_read_info->stream.avail_out) &&
                 (pfile_in_zip_read_info->rest_read_compressed == 0))
                 flush = Z_FINISH;
-            */
-            err=inflate(&pfile_in_zip_read_info->stream,flush);
+             */
+            err = inflate(&pfile_in_zip_read_info->stream,flush);
 
             if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
-              err = Z_DATA_ERROR;
+            {
+                err = Z_DATA_ERROR;
+            }
 
             uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
-            uOutThis = uTotalOutAfter-uTotalOutBefore;
+            uOutThis       = uTotalOutAfter-uTotalOutBefore;
 
             pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
 
             pfile_in_zip_read_info->crc32 =
                 crc32(pfile_in_zip_read_info->crc32,bufBefore,
-                        (uInt)(uOutThis));
+                      (uInt)(uOutThis));
 
             pfile_in_zip_read_info->rest_read_uncompressed -=
                 uOutThis;
@@ -1871,32 +2280,42 @@ extern MINIZIP_API int unzReadCurrentFile  (unzFile file, voidp buf, unsigned le
             iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
 
             if (err==Z_STREAM_END)
+            {
                 return (iRead==0) ? UNZ_EOF : iRead;
+            }
             if (err!=Z_OK)
+            {
                 break;
+            }
         }
     }
 
     if (err==Z_OK)
+    {
         return iRead;
+    }
     return err;
 }
 
 
 /*
-  Give the current position in uncompressed data
-*/
+   Give the current position in uncompressed data
+ */
 extern z_off_t MINIZIP_API unztell (unzFile file)
 {
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    s                      = (unz64_s*)file;
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
 
     if (pfile_in_zip_read_info==NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
     return (z_off_t)pfile_in_zip_read_info->stream.total_out;
 }
@@ -1907,52 +2326,64 @@ extern ZPOS64_T MINIZIP_API unztell64 (unzFile file)
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
     if (file==NULL)
+    {
         return (ZPOS64_T)-1;
-    s=(unz64_s*)file;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    s                      = (unz64_s*)file;
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
 
     if (pfile_in_zip_read_info==NULL)
+    {
         return (ZPOS64_T)-1;
+    }
 
     return pfile_in_zip_read_info->total_out_64;
 }
 
 
 /*
-  return 1 if the end of file was reached, 0 elsewhere
-*/
+   return 1 if the end of file was reached, 0 elsewhere
+ */
 extern MINIZIP_API int unzeof (unzFile file)
 {
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    s                      = (unz64_s*)file;
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
 
     if (pfile_in_zip_read_info==NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
     if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
+    {
         return 1;
+    }
     else
+    {
         return 0;
+    }
 }
 
 
 
 /*
-Read extra field from the current file (opened by unzOpenCurrentFile)
-This is the local-header version of the extra field (sometimes, there is
-more info in the local-header version than in the central-header)
+   Read extra field from the current file (opened by unzOpenCurrentFile)
+   This is the local-header version of the extra field (sometimes, there is
+   more info in the local-header version than in the central-header)
 
-  if buf==NULL, it return the size of the local extra field that can be read
+   if buf==NULL, it return the size of the local extra field that can be read
 
-  if buf!=NULL, len is the size of the buffer, the extra header is copied in
+   if buf!=NULL, len is the size of the buffer, the extra header is copied in
     buf.
-  the return value is the number of bytes copied in buf, or (if <0)
+   the return value is the number of bytes copied in buf, or (if <0)
     the error code
-*/
+ */
 extern MINIZIP_API int unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
 {
     unz64_s* s;
@@ -1961,117 +2392,153 @@ extern MINIZIP_API int unzGetLocalExtrafield (unzFile file, voidp buf, unsigned
     ZPOS64_T size_to_read;
 
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    s                      = (unz64_s*)file;
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
 
     if (pfile_in_zip_read_info==NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
     size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
-                pfile_in_zip_read_info->pos_local_extrafield);
+                    pfile_in_zip_read_info->pos_local_extrafield);
 
     if (buf==NULL)
+    {
         return (int)size_to_read;
+    }
 
     if (len>size_to_read)
+    {
         read_now = (uInt)size_to_read;
+    }
     else
-        read_now = (uInt)len ;
+    {
+        read_now = (uInt)len;
+    }
 
     if (read_now==0)
+    {
         return 0;
+    }
 
     if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
-              pfile_in_zip_read_info->filestream,
-              pfile_in_zip_read_info->offset_local_extrafield +
-              pfile_in_zip_read_info->pos_local_extrafield,
-              ZLIB_FILEFUNC_SEEK_SET)!=0)
+                pfile_in_zip_read_info->filestream,
+                pfile_in_zip_read_info->offset_local_extrafield +
+                pfile_in_zip_read_info->pos_local_extrafield,
+                ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
         return UNZ_ERRNO;
+    }
 
     if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
-              pfile_in_zip_read_info->filestream,
-              buf,read_now)!=read_now)
+                pfile_in_zip_read_info->filestream,
+                buf,read_now)!=read_now)
+    {
         return UNZ_ERRNO;
+    }
 
     return (int)read_now;
 }
 
 /*
-  Close the file in zip opened with unzipOpenCurrentFile
-  Return UNZ_CRCERROR if all the file was read but the CRC is not good
-*/
+   Close the file in zip opened with unzipOpenCurrentFile
+   Return UNZ_CRCERROR if all the file was read but the CRC is not good
+ */
 extern MINIZIP_API int unzCloseCurrentFile (unzFile file)
 {
-    int err=UNZ_OK;
+    int err = UNZ_OK;
 
     unz64_s* s;
     file_in_zip64_read_info_s* pfile_in_zip_read_info;
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
-    pfile_in_zip_read_info=s->pfile_in_zip_read;
+    }
+    s                      = (unz64_s*)file;
+    pfile_in_zip_read_info = s->pfile_in_zip_read;
 
     if (pfile_in_zip_read_info==NULL)
+    {
         return UNZ_PARAMERROR;
+    }
 
 
     if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
         (!pfile_in_zip_read_info->raw))
     {
         if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
-            err=UNZ_CRCERROR;
+        {
+            err = UNZ_CRCERROR;
+        }
     }
 
 
     TRYFREE(pfile_in_zip_read_info->read_buffer);
     pfile_in_zip_read_info->read_buffer = NULL;
     if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
+    {
         inflateEnd(&pfile_in_zip_read_info->stream);
+    }
 #ifdef HAVE_BZIP2
     else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)
+    {
         BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
+    }
 #endif
 
 
     pfile_in_zip_read_info->stream_initialised = 0;
     TRYFREE(pfile_in_zip_read_info);
 
-    s->pfile_in_zip_read=NULL;
+    s->pfile_in_zip_read = NULL;
 
     return err;
 }
 
 
 /*
-  Get the global comment string of the ZipFile, in the szComment buffer.
-  uSizeBuf is the size of the szComment buffer.
-  return the number of byte copied or an error code <0
-*/
+   Get the global comment string of the ZipFile, in the szComment buffer.
+   uSizeBuf is the size of the szComment buffer.
+   return the number of byte copied or an error code <0
+ */
 extern MINIZIP_API int unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)
 {
     unz64_s* s;
-    uLong uReadThis ;
+    uLong uReadThis;
     if (file==NULL)
+    {
         return (int)UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
 
     uReadThis = uSizeBuf;
     if (uReadThis>s->gi.size_comment)
+    {
         uReadThis = s->gi.size_comment;
+    }
 
     if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
         return UNZ_ERRNO;
+    }
 
     if (uReadThis>0)
     {
-      *szComment='\0';
-      if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
-        return UNZ_ERRNO;
+        *szComment = '\0';
+        if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
+        {
+            return UNZ_ERRNO;
+        }
     }
 
     if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
-        *(szComment+s->gi.size_comment)='\0';
+    {
+        *(szComment+s->gi.size_comment) = '\0';
+    }
     return (int)uReadThis;
 }
 
@@ -2081,13 +2548,21 @@ extern ZPOS64_T MINIZIP_API unzGetOffset64(unzFile file)
     unz64_s* s;
 
     if (file==NULL)
-          return 0; //UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    {
+        return 0;   //UNZ_PARAMERROR;
+    }
+    s = (unz64_s*)file;
     if (!s->current_file_ok)
-      return 0;
+    {
+        return 0;
+    }
     if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)
-      if (s->num_file==s->gi.number_entry)
-         return 0;
+    {
+        if (s->num_file==s->gi.number_entry)
+        {
+            return 0;
+        }
+    }
     return s->pos_in_central_dir;
 }
 
@@ -2096,7 +2571,9 @@ extern uLong MINIZIP_API unzGetOffset (unzFile file)
     ZPOS64_T offset64;
 
     if (file==NULL)
-          return 0; //UNZ_PARAMERROR;
+    {
+        return 0;   //UNZ_PARAMERROR;
+    }
     offset64 = unzGetOffset64(file);
     return (uLong)offset64;
 }
@@ -2107,14 +2584,16 @@ extern MINIZIP_API int unzSetOffset64(unzFile file, ZPOS64_T pos)
     int err;
 
     if (file==NULL)
+    {
         return UNZ_PARAMERROR;
-    s=(unz64_s*)file;
+    }
+    s = (unz64_s*)file;
 
     s->pos_in_central_dir = pos;
-    s->num_file = s->gi.number_entry;      /* hack */
-    err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
-                                              &s->cur_file_info_internal,
-                                              NULL,0,NULL,0,NULL,0);
+    s->num_file           = s->gi.number_entry; /* hack */
+    err                   = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+                                                                  &s->cur_file_info_internal,
+                                                                  NULL,0,NULL,0,NULL,0);
     s->current_file_ok = (err == UNZ_OK);
     return err;
 }
diff --git a/SrcLib/core/fwZip/src/minizip/zip.c b/SrcLib/core/fwZip/src/minizip/zip.c
index ea5191a..1f20573 100644
--- a/SrcLib/core/fwZip/src/minizip/zip.c
+++ b/SrcLib/core/fwZip/src/minizip/zip.c
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 /* zip.c -- IO on .zip files using zlib
    Version 1.1, February 14h, 2010
    part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
@@ -19,7 +25,7 @@
    Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
    Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
 
-*/
+ */
 
 
 #include <stdio.h>
@@ -37,7 +43,7 @@
 #  include <stdlib.h>
 #endif
 #ifdef NO_ERRNO_H
-    extern int errno;
+extern int errno;
 #else
 #   include <errno.h>
 #endif
@@ -64,13 +70,13 @@
 # define ALLOC(size) (malloc(size))
 #endif
 #ifndef TRYFREE
-# define TRYFREE(p) {if (p) free(p);}
+# define TRYFREE(p) {if (p) {free(p); }}
 #endif
 
 /*
-#define SIZECENTRALDIRITEM (0x2e)
-#define SIZEZIPLOCALHEADER (0x1e)
-*/
+   #define SIZECENTRALDIRITEM (0x2e)
+   #define SIZEZIPLOCALHEADER (0x1e)
+ */
 
 /* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
 
@@ -97,7 +103,7 @@
 #  define DEF_MEM_LEVEL  MAX_MEM_LEVEL
 #endif
 #endif
-const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+const char zip_copyright[] = " zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
 
 
 #define SIZEDATA_INDATABLOCK (4096-(4*4))
@@ -115,11 +121,11 @@ const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http
 
 typedef struct linkedlist_datablock_internal_s
 {
-  struct linkedlist_datablock_internal_s* next_datablock;
-  uLong  avail_in_this_block;
-  uLong  filled_in_this_block;
-  uLong  unused; /* for future use and alignement */
-  unsigned char data[SIZEDATA_INDATABLOCK];
+    struct linkedlist_datablock_internal_s* next_datablock;
+    uLong avail_in_this_block;
+    uLong filled_in_this_block;
+    uLong unused; /* for future use and alignement */
+    unsigned char data[SIZEDATA_INDATABLOCK];
 } linkedlist_datablock_internal;
 
 typedef struct linkedlist_data_s
@@ -136,24 +142,24 @@ typedef struct
     bz_stream bstream;          /* bzLib stream structure for bziped */
 #endif
 
-    int  stream_initialised;    /* 1 is stream is initialised */
+    int stream_initialised;     /* 1 is stream is initialised */
     uInt pos_in_buffered_data;  /* last written byte in buffered_data */
 
     ZPOS64_T pos_local_header;     /* offset of the local header of the file
-                                     currenty writing */
+                                      currenty writing */
     char* central_header;       /* central header data for the current file */
     uLong size_centralExtra;
     uLong size_centralheader;   /* size of the central header for cur file */
     uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */
     uLong flag;                 /* flag of the file currently writing */
 
-    int  method;                /* compression method of file currenty wr.*/
-    int  raw;                   /* 1 for directly writing raw data */
+    int method;                 /* compression method of file currenty wr.*/
+    int raw;                    /* 1 for directly writing raw data */
     Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
     uLong dosDate;
     uLong crc32;
-    int  encrypt;
-    int  zip64;               /* Add ZIP64 extened information in the extra field */
+    int encrypt;
+    int zip64;                /* Add ZIP64 extened information in the extra field */
     ZPOS64_T pos_zip64extrainfo;
     ZPOS64_T totalCompressedData;
     ZPOS64_T totalUncompressedData;
@@ -169,7 +175,7 @@ typedef struct
     zlib_filefunc64_32_def z_filefunc;
     voidpf filestream;        /* io structore of the zipfile */
     linkedlist_data central_dir;/* datablock with central dir in construction*/
-    int  in_opened_file_inzip;  /* 1 if a file in the zip is currently writ.*/
+    int in_opened_file_inzip;   /* 1 if a file in the zip is currently writ.*/
     curfile64_info ci;            /* info on the file curretly writing */
 
     ZPOS64_T begin_pos;            /* position of the beginning of the zipfile */
@@ -192,12 +198,12 @@ local linkedlist_datablock_internal* allocate_new_datablock()
 {
     linkedlist_datablock_internal* ldi;
     ldi = (linkedlist_datablock_internal*)
-                 ALLOC(sizeof(linkedlist_datablock_internal));
+          ALLOC(sizeof(linkedlist_datablock_internal));
     if (ldi!=NULL)
     {
-        ldi->next_datablock = NULL ;
-        ldi->filled_in_this_block = 0 ;
-        ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;
+        ldi->next_datablock       = NULL;
+        ldi->filled_in_this_block = 0;
+        ldi->avail_in_this_block  = SIZEDATA_INDATABLOCK;
     }
     return ldi;
 }
@@ -230,16 +236,20 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
     const unsigned char* from_copy;
 
     if (ll==NULL)
+    {
         return ZIP_INTERNALERROR;
+    }
 
     if (ll->last_block == NULL)
     {
         ll->first_block = ll->last_block = allocate_new_datablock();
         if (ll->first_block == NULL)
+        {
             return ZIP_INTERNALERROR;
+        }
     }
 
-    ldi = ll->last_block;
+    ldi       = ll->last_block;
     from_copy = (unsigned char*)buf;
 
     while (len>0)
@@ -252,25 +262,33 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
         {
             ldi->next_datablock = allocate_new_datablock();
             if (ldi->next_datablock == NULL)
+            {
                 return ZIP_INTERNALERROR;
-            ldi = ldi->next_datablock ;
+            }
+            ldi            = ldi->next_datablock;
             ll->last_block = ldi;
         }
 
         if (ldi->avail_in_this_block < len)
+        {
             copy_this = (uInt)ldi->avail_in_this_block;
+        }
         else
+        {
             copy_this = (uInt)len;
+        }
 
         to_copy = &(ldi->data[ldi->filled_in_this_block]);
 
-        for (i=0;i<copy_this;i++)
-            *(to_copy+i)=*(from_copy+i);
+        for (i = 0; i<copy_this; i++)
+        {
+            *(to_copy+i) = *(from_copy+i);
+        }
 
         ldi->filled_in_this_block += copy_this;
-        ldi->avail_in_this_block -= copy_this;
-        from_copy += copy_this ;
-        len -= copy_this;
+        ldi->avail_in_this_block  -= copy_this;
+        from_copy                 += copy_this;
+        len                       -= copy_this;
     }
     return ZIP_OK;
 }
@@ -283,48 +301,55 @@ local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
 /* ===========================================================================
    Inputs a long in LSB order to the given file
    nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)
-*/
+ */
 
-local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));
-local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)
+local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x,
+                                  int nbByte));
+local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x,
+                               int nbByte)
 {
     unsigned char buf[8];
     int n;
     for (n = 0; n < nbByte; n++)
     {
         buf[n] = (unsigned char)(x & 0xff);
-        x >>= 8;
+        x    >>= 8;
     }
     if (x != 0)
-      {     /* data overflow - hack for ZIP64 (X Roche) */
-      for (n = 0; n < nbByte; n++)
+    {       /* data overflow - hack for ZIP64 (X Roche) */
+        for (n = 0; n < nbByte; n++)
         {
-          buf[n] = 0xff;
+            buf[n] = 0xff;
         }
-      }
+    }
 
     if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
+    {
         return ZIP_ERRNO;
+    }
     else
+    {
         return ZIP_OK;
+    }
 }
 
 local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));
 local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)
 {
-    unsigned char* buf=(unsigned char*)dest;
+    unsigned char* buf = (unsigned char*)dest;
     int n;
-    for (n = 0; n < nbByte; n++) {
+    for (n = 0; n < nbByte; n++)
+    {
         buf[n] = (unsigned char)(x & 0xff);
-        x >>= 8;
+        x    >>= 8;
     }
 
     if (x != 0)
     {     /* data overflow - hack for ZIP64 */
-       for (n = 0; n < nbByte; n++)
-       {
-          buf[n] = 0xff;
-       }
+        for (n = 0; n < nbByte; n++)
+        {
+            buf[n] = 0xff;
+        }
     }
 }
 
@@ -335,11 +360,15 @@ local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
 {
     uLong year = (uLong)ptm->tm_year;
     if (year>=1980)
-        year-=1980;
+    {
+        year -= 1980;
+    }
     else if (year>=80)
-        year-=80;
+    {
+        year -= 80;
+    }
     return
-      (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
+        (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
         ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
 }
 
@@ -360,35 +389,45 @@ local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,vo
     else
     {
         if (ZERROR64(*pzlib_filefunc_def,filestream))
+        {
             return ZIP_ERRNO;
+        }
         else
+        {
             return ZIP_EOF;
+        }
     }
 }
 
 
 /* ===========================================================================
    Reads a long in LSB order from the given gz_stream. Sets
-*/
+ */
 local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
 
 local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
 {
-    uLong x ;
+    uLong x;
     int i = 0;
     int err;
 
     err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-    x = (uLong)i;
+    x   = (uLong)i;
 
     if (err==ZIP_OK)
+    {
         err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x += ((uLong)i)<<8;
 
     if (err==ZIP_OK)
+    {
         *pX = x;
+    }
     else
+    {
         *pX = 0;
+    }
     return err;
 }
 
@@ -396,29 +435,39 @@ local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_de
 
 local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
 {
-    uLong x ;
+    uLong x;
     int i = 0;
     int err;
 
     err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-    x = (uLong)i;
+    x   = (uLong)i;
 
     if (err==ZIP_OK)
+    {
         err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x += ((uLong)i)<<8;
 
     if (err==ZIP_OK)
+    {
         err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x += ((uLong)i)<<16;
 
     if (err==ZIP_OK)
+    {
         err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
     x += ((uLong)i)<<24;
 
     if (err==ZIP_OK)
+    {
         *pX = x;
+    }
     else
+    {
         *pX = 0;
+    }
     return err;
 }
 
@@ -427,456 +476,606 @@ local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_
 
 local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)
 {
-  ZPOS64_T x;
-  int i = 0;
-  int err;
-
-  err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x = (ZPOS64_T)i;
+    ZPOS64_T x;
+    int i = 0;
+    int err;
 
-  if (err==ZIP_OK)
     err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<8;
+    x   = (ZPOS64_T)i;
 
-  if (err==ZIP_OK)
-    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<16;
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<8;
 
-  if (err==ZIP_OK)
-    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<24;
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<16;
 
-  if (err==ZIP_OK)
-    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<32;
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<24;
 
-  if (err==ZIP_OK)
-    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<40;
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<32;
 
-  if (err==ZIP_OK)
-    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<48;
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<40;
 
-  if (err==ZIP_OK)
-    err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
-  x += ((ZPOS64_T)i)<<56;
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<48;
+
+    if (err==ZIP_OK)
+    {
+        err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+    }
+    x += ((ZPOS64_T)i)<<56;
 
-  if (err==ZIP_OK)
-    *pX = x;
-  else
-    *pX = 0;
+    if (err==ZIP_OK)
+    {
+        *pX = x;
+    }
+    else
+    {
+        *pX = 0;
+    }
 
-  return err;
+    return err;
 }
 
 #ifndef BUFREADCOMMENT
 #define BUFREADCOMMENT (0x400)
 #endif
 /*
-  Locate the Central directory of a zipfile (at the end, just before
+   Locate the Central directory of a zipfile (at the end, just before
     the global comment)
-*/
+ */
 local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
 
 local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
 {
-  unsigned char* buf;
-  ZPOS64_T uSizeFile;
-  ZPOS64_T uBackRead;
-  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
-  ZPOS64_T uPosFound=0;
+    unsigned char* buf;
+    ZPOS64_T uSizeFile;
+    ZPOS64_T uBackRead;
+    ZPOS64_T uMaxBack  = 0xffff; /* maximum size of global comment */
+    ZPOS64_T uPosFound = 0;
+
+    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+    {
+        return 0;
+    }
 
-  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
-    return 0;
 
+    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
 
-  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+    if (uMaxBack>uSizeFile)
+    {
+        uMaxBack = uSizeFile;
+    }
 
-  if (uMaxBack>uSizeFile)
-    uMaxBack = uSizeFile;
+    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+    if (buf==NULL)
+    {
+        return 0;
+    }
 
-  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
-  if (buf==NULL)
-    return 0;
+    uBackRead = 4;
+    while (uBackRead<uMaxBack)
+    {
+        uLong uReadSize;
+        ZPOS64_T uReadPos;
+        int i;
+        if (uBackRead+BUFREADCOMMENT>uMaxBack)
+        {
+            uBackRead = uMaxBack;
+        }
+        else
+        {
+            uBackRead += BUFREADCOMMENT;
+        }
+        uReadPos = uSizeFile-uBackRead;
 
-  uBackRead = 4;
-  while (uBackRead<uMaxBack)
-  {
-    uLong uReadSize;
-    ZPOS64_T uReadPos ;
-    int i;
-    if (uBackRead+BUFREADCOMMENT>uMaxBack)
-      uBackRead = uMaxBack;
-    else
-      uBackRead+=BUFREADCOMMENT;
-    uReadPos = uSizeFile-uBackRead ;
-
-    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
-      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
-    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
-      break;
-
-    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
-      break;
-
-    for (i=(int)uReadSize-3; (i--)>0;)
-      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
-        ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
-      {
-        uPosFound = uReadPos+i;
-        break;
-      }
-
-      if (uPosFound!=0)
-        break;
-  }
-  TRYFREE(buf);
-  return uPosFound;
+        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+                    (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
+            break;
+        }
+
+        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+        {
+            break;
+        }
+
+        for (i = (int)uReadSize-3; (i--)>0; )
+        {
+            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+                ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+            {
+                uPosFound = uReadPos+i;
+                break;
+            }
+        }
+
+        if (uPosFound!=0)
+        {
+            break;
+        }
+    }
+    TRYFREE(buf);
+    return uPosFound;
 }
 
 /*
-Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
-the global comment)
-*/
+   Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
+   the global comment)
+ */
 local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
 
 local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
 {
-  unsigned char* buf;
-  ZPOS64_T uSizeFile;
-  ZPOS64_T uBackRead;
-  ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
-  ZPOS64_T uPosFound=0;
-  uLong uL;
-  ZPOS64_T relativeOffset;
-
-  if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
-    return 0;
-
-  uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
-
-  if (uMaxBack>uSizeFile)
-    uMaxBack = uSizeFile;
-
-  buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
-  if (buf==NULL)
-    return 0;
-
-  uBackRead = 4;
-  while (uBackRead<uMaxBack)
-  {
-    uLong uReadSize;
-    ZPOS64_T uReadPos;
-    int i;
-    if (uBackRead+BUFREADCOMMENT>uMaxBack)
-      uBackRead = uMaxBack;
-    else
-      uBackRead+=BUFREADCOMMENT;
-    uReadPos = uSizeFile-uBackRead ;
+    unsigned char* buf;
+    ZPOS64_T uSizeFile;
+    ZPOS64_T uBackRead;
+    ZPOS64_T uMaxBack  = 0xffff; /* maximum size of global comment */
+    ZPOS64_T uPosFound = 0;
+    uLong uL;
+    ZPOS64_T relativeOffset;
+
+    if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+    {
+        return 0;
+    }
 
-    uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
-      (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
-    if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
-      break;
+    uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
 
-    if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
-      break;
+    if (uMaxBack>uSizeFile)
+    {
+        uMaxBack = uSizeFile;
+    }
 
-    for (i=(int)uReadSize-3; (i--)>0;)
+    buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+    if (buf==NULL)
     {
-      // Signature "0x07064b50" Zip64 end of central directory locater
-      if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
-      {
-        uPosFound = uReadPos+i;
-        break;
-      }
+        return 0;
     }
 
-      if (uPosFound!=0)
-        break;
-  }
+    uBackRead = 4;
+    while (uBackRead<uMaxBack)
+    {
+        uLong uReadSize;
+        ZPOS64_T uReadPos;
+        int i;
+        if (uBackRead+BUFREADCOMMENT>uMaxBack)
+        {
+            uBackRead = uMaxBack;
+        }
+        else
+        {
+            uBackRead += BUFREADCOMMENT;
+        }
+        uReadPos = uSizeFile-uBackRead;
+
+        uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+                    (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+        if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
+            break;
+        }
+
+        if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+        {
+            break;
+        }
+
+        for (i = (int)uReadSize-3; (i--)>0; )
+        {
+            // Signature "0x07064b50" Zip64 end of central directory locater
+            if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+            {
+                uPosFound = uReadPos+i;
+                break;
+            }
+        }
+
+        if (uPosFound!=0)
+        {
+            break;
+        }
+    }
 
-  TRYFREE(buf);
-  if (uPosFound == 0)
-    return 0;
+    TRYFREE(buf);
+    if (uPosFound == 0)
+    {
+        return 0;
+    }
 
-  /* Zip64 end of central directory locator */
-  if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
-    return 0;
+    /* Zip64 end of central directory locator */
+    if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
+        return 0;
+    }
 
-  /* the signature, already checked */
-  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
-    return 0;
+    /* the signature, already checked */
+    if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    {
+        return 0;
+    }
 
-  /* number of the disk with the start of the zip64 end of  central directory */
-  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
-    return 0;
-  if (uL != 0)
-    return 0;
+    /* number of the disk with the start of the zip64 end of  central directory */
+    if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    {
+        return 0;
+    }
+    if (uL != 0)
+    {
+        return 0;
+    }
 
-  /* relative offset of the zip64 end of central directory record */
-  if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)
-    return 0;
+    /* relative offset of the zip64 end of central directory record */
+    if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)
+    {
+        return 0;
+    }
 
-  /* total number of disks */
-  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
-    return 0;
-  if (uL != 1)
-    return 0;
+    /* total number of disks */
+    if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    {
+        return 0;
+    }
+    if (uL != 1)
+    {
+        return 0;
+    }
 
-  /* Goto Zip64 end of central directory record */
-  if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
-    return 0;
+    /* Goto Zip64 end of central directory record */
+    if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+    {
+        return 0;
+    }
 
-  /* the signature */
-  if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
-    return 0;
+    /* the signature */
+    if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+    {
+        return 0;
+    }
 
-  if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'
-    return 0;
+    if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'
+    {
+        return 0;
+    }
 
-  return relativeOffset;
+    return relativeOffset;
 }
 
 int LoadCentralDirectoryRecord(zip64_internal* pziinit)
 {
-  int err=ZIP_OK;
-  ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
-
-  ZPOS64_T size_central_dir;     /* size of the central directory  */
-  ZPOS64_T offset_central_dir;   /* offset of start of central directory */
-  ZPOS64_T central_pos;
-  uLong uL;
-
-  uLong number_disk;          /* number of the current dist, used for
-                              spaning ZIP, unsupported, always 0*/
-  uLong number_disk_with_CD;  /* number the the disk with central dir, used
-                              for spaning ZIP, unsupported, always 0*/
-  ZPOS64_T number_entry;
-  ZPOS64_T number_entry_CD;      /* total number of entries in
-                                the central dir
-                                (same than number_entry on nospan) */
-  uLong VersionMadeBy;
-  uLong VersionNeeded;
-  uLong size_comment;
-
-  int hasZIP64Record = 0;
-
-  // check first if we find a ZIP64 record
-  central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);
-  if(central_pos > 0)
-  {
-    hasZIP64Record = 1;
-  }
-  else if(central_pos == 0)
-  {
-    central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);
-  }
+    int err = ZIP_OK;
+    ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+
+    ZPOS64_T size_central_dir;   /* size of the central directory  */
+    ZPOS64_T offset_central_dir; /* offset of start of central directory */
+    ZPOS64_T central_pos;
+    uLong uL;
+
+    uLong number_disk;        /* number of the current dist, used for
+                                 spaning ZIP, unsupported, always 0*/
+    uLong number_disk_with_CD; /* number the the disk with central dir, used
+                                  for spaning ZIP, unsupported, always 0*/
+    ZPOS64_T number_entry;
+    ZPOS64_T number_entry_CD;    /* total number of entries in
+                                    the central dir
+                                    (same than number_entry on nospan) */
+    uLong VersionMadeBy;
+    uLong VersionNeeded;
+    uLong size_comment;
+
+    int hasZIP64Record = 0;
+
+    // check first if we find a ZIP64 record
+    central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);
+    if(central_pos > 0)
+    {
+        hasZIP64Record = 1;
+    }
+    else if(central_pos == 0)
+    {
+        central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);
+    }
 
 /* disable to allow appending to empty ZIP archive
         if (central_pos==0)
             err=ZIP_ERRNO;
-*/
-
-  if(hasZIP64Record)
-  {
-    ZPOS64_T sizeEndOfCentralDirectory;
-    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)
-      err=ZIP_ERRNO;
-
-    /* the signature, already checked */
-    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* size of zip64 end of central directory record */
-    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* version made by */
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* version needed to extract */
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* number of this disk */
-    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* number of the disk with the start of the central directory */
-    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* total number of entries in the central directory on this disk */
-    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* total number of entries in the central directory */
-    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
-      err=ZIP_BADZIPFILE;
-
-    /* size of the central directory */
-    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    /* offset of start of central directory with respect to the
-    starting disk number */
-    if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)
-      err=ZIP_ERRNO;
-
-    // TODO..
-    // read the comment from the standard central header.
-    size_comment = 0;
-  }
-  else
-  {
-    // Read End of central Directory info
-    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
-      err=ZIP_ERRNO;
+ */
 
-    /* the signature, already checked */
-    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
-      err=ZIP_ERRNO;
+    if(hasZIP64Record)
+    {
+        ZPOS64_T sizeEndOfCentralDirectory;
+        if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* number of this disk */
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
-      err=ZIP_ERRNO;
+        /* the signature, already checked */
+        if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* number of the disk with the start of the central directory */
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
-      err=ZIP_ERRNO;
+        /* size of zip64 end of central directory record */
+        if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* total number of entries in the central dir on this disk */
-    number_entry = 0;
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
-      err=ZIP_ERRNO;
-    else
-      number_entry = uL;
+        /* version made by */
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* total number of entries in the central dir */
-    number_entry_CD = 0;
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
-      err=ZIP_ERRNO;
-    else
-      number_entry_CD = uL;
+        /* version needed to extract */
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
-      err=ZIP_BADZIPFILE;
+        /* number of this disk */
+        if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* size of the central directory */
-    size_central_dir = 0;
-    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
-      err=ZIP_ERRNO;
-    else
-      size_central_dir = uL;
+        /* number of the disk with the start of the central directory */
+        if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* offset of start of central directory with respect to the starting disk number */
-    offset_central_dir = 0;
-    if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
-      err=ZIP_ERRNO;
-    else
-      offset_central_dir = uL;
+        /* total number of entries in the central directory on this disk */
+        if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
+        /* total number of entries in the central directory */
+        if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-    /* zipfile global comment length */
-    if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)
-      err=ZIP_ERRNO;
-  }
+        if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+        {
+            err = ZIP_BADZIPFILE;
+        }
 
-  if ((central_pos<offset_central_dir+size_central_dir) &&
-    (err==ZIP_OK))
-    err=ZIP_BADZIPFILE;
+        /* size of the central directory */
+        if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-  if (err!=ZIP_OK)
-  {
-    ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);
-    return ZIP_ERRNO;
-  }
+        /* offset of start of central directory with respect to the
+           starting disk number */
+        if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-  if (size_comment>0)
-  {
-    pziinit->globalcomment = (char*)ALLOC(size_comment+1);
-    if (pziinit->globalcomment)
-    {
-      size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);
-      pziinit->globalcomment[size_comment]=0;
+        // TODO..
+        // read the comment from the standard central header.
+        size_comment = 0;
     }
-  }
-
-  byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);
-  pziinit->add_position_when_writting_offset = byte_before_the_zipfile;
-
-  {
-    ZPOS64_T size_central_dir_to_read = size_central_dir;
-    size_t buf_size = SIZEDATA_INDATABLOCK;
-    void* buf_read = (void*)ALLOC(buf_size);
-    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)
-      err=ZIP_ERRNO;
-
-    while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+    else
     {
-      ZPOS64_T read_this = SIZEDATA_INDATABLOCK;
-      if (read_this > size_central_dir_to_read)
-        read_this = size_central_dir_to_read;
-
-      if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)
-        err=ZIP_ERRNO;
+        // Read End of central Directory info
+        if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
+            err = ZIP_ERRNO;
+        }
 
-      if (err==ZIP_OK)
-        err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);
+        /* the signature, already checked */
+        if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-      size_central_dir_to_read-=read_this;
-    }
-    TRYFREE(buf_read);
-  }
-  pziinit->begin_pos = byte_before_the_zipfile;
-  pziinit->number_entry = number_entry_CD;
+        /* number of this disk */
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-  if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)
-    err=ZIP_ERRNO;
+        /* number of the disk with the start of the central directory */
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
 
-  return err;
-}
+        /* total number of entries in the central dir on this disk */
+        number_entry = 0;
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
+        else
+        {
+            number_entry = uL;
+        }
+
+        /* total number of entries in the central dir */
+        number_entry_CD = 0;
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
+        else
+        {
+            number_entry_CD = uL;
+        }
+
+        if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+        {
+            err = ZIP_BADZIPFILE;
+        }
+
+        /* size of the central directory */
+        size_central_dir = 0;
+        if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
+        else
+        {
+            size_central_dir = uL;
+        }
+
+        /* offset of start of central directory with respect to the starting disk number */
+        offset_central_dir = 0;
+        if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
+        else
+        {
+            offset_central_dir = uL;
+        }
+
+
+        /* zipfile global comment length */
+        if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)
+        {
+            err = ZIP_ERRNO;
+        }
+    }
+
+    if ((central_pos<offset_central_dir+size_central_dir) &&
+        (err==ZIP_OK))
+    {
+        err = ZIP_BADZIPFILE;
+    }
+
+    if (err!=ZIP_OK)
+    {
+        ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);
+        return ZIP_ERRNO;
+    }
+
+    if (size_comment>0)
+    {
+        pziinit->globalcomment = (char*)ALLOC(size_comment+1);
+        if (pziinit->globalcomment)
+        {
+            size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream,
+                                   pziinit->globalcomment,size_comment);
+            pziinit->globalcomment[size_comment] = 0;
+        }
+    }
+
+    byte_before_the_zipfile                    = central_pos - (offset_central_dir+size_central_dir);
+    pziinit->add_position_when_writting_offset = byte_before_the_zipfile;
+
+    {
+        ZPOS64_T size_central_dir_to_read = size_central_dir;
+        size_t buf_size                   = SIZEDATA_INDATABLOCK;
+        void* buf_read                    = (void*)ALLOC(buf_size);
+        if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile,
+                    ZLIB_FILEFUNC_SEEK_SET) != 0)
+        {
+            err = ZIP_ERRNO;
+        }
+
+        while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+        {
+            ZPOS64_T read_this = SIZEDATA_INDATABLOCK;
+            if (read_this > size_central_dir_to_read)
+            {
+                read_this = size_central_dir_to_read;
+            }
+
+            if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)
+            {
+                err = ZIP_ERRNO;
+            }
+
+            if (err==ZIP_OK)
+            {
+                err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);
+            }
+
+            size_central_dir_to_read -= read_this;
+        }
+        TRYFREE(buf_read);
+    }
+    pziinit->begin_pos    = byte_before_the_zipfile;
+    pziinit->number_entry = number_entry_CD;
+
+    if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,
+                ZLIB_FILEFUNC_SEEK_SET) != 0)
+    {
+        err = ZIP_ERRNO;
+    }
+
+    return err;
+}
 
 
 #endif /* !NO_ADDFILEINEXISTINGZIP*/
 
 
 /************************************************************/
-extern zipFile MINIZIP_API zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)
+extern zipFile MINIZIP_API zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment,
+                                     zlib_filefunc64_32_def* pzlib_filefunc64_32_def)
 {
     zip64_internal ziinit;
     zip64_internal* zi;
-    int err=ZIP_OK;
+    int err = ZIP_OK;
 
     ziinit.z_filefunc.zseek32_file = NULL;
     ziinit.z_filefunc.ztell32_file = NULL;
     if (pzlib_filefunc64_32_def==NULL)
+    {
         fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);
+    }
     else
+    {
         ziinit.z_filefunc = *pzlib_filefunc64_32_def;
+    }
 
     ziinit.filestream = ZOPEN64(ziinit.z_filefunc,
-                  pathname,
-                  (append == APPEND_STATUS_CREATE) ?
-                  (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
-                    (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
+                                pathname,
+                                (append == APPEND_STATUS_CREATE) ?
+                                (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
+                                (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
 
     if (ziinit.filestream == NULL)
+    {
         return NULL;
+    }
 
     if (append == APPEND_STATUS_CREATEAFTER)
+    {
         ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
+    }
 
-    ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
-    ziinit.in_opened_file_inzip = 0;
-    ziinit.ci.stream_initialised = 0;
-    ziinit.number_entry = 0;
+    ziinit.begin_pos                         = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
+    ziinit.in_opened_file_inzip              = 0;
+    ziinit.ci.stream_initialised             = 0;
+    ziinit.number_entry                      = 0;
     ziinit.add_position_when_writting_offset = 0;
     init_linkedlist(&(ziinit.central_dir));
 
@@ -894,13 +1093,13 @@ extern zipFile MINIZIP_API zipOpen3 (const void *pathname, int append, zipcharpc
     ziinit.globalcomment = NULL;
     if (append == APPEND_STATUS_ADDINZIP)
     {
-      // Read and Cache Central Directory Records
-      err = LoadCentralDirectoryRecord(&ziinit);
+        // Read and Cache Central Directory Records
+        err = LoadCentralDirectoryRecord(&ziinit);
     }
 
     if (globalcomment)
     {
-      *globalcomment = ziinit.globalcomment;
+        *globalcomment = ziinit.globalcomment;
     }
 #    endif /* !NO_ADDFILEINEXISTINGZIP*/
 
@@ -919,7 +1118,8 @@ extern zipFile MINIZIP_API zipOpen3 (const void *pathname, int append, zipcharpc
     }
 }
 
-extern zipFile MINIZIP_API zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)
+extern zipFile MINIZIP_API zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment,
+                                     zlib_filefunc_def* pzlib_filefunc32_def)
 {
     if (pzlib_filefunc32_def != NULL)
     {
@@ -928,10 +1128,13 @@ extern zipFile MINIZIP_API zipOpen2 (const char *pathname, int append, zipcharpc
         return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
     }
     else
+    {
         return zipOpen3(pathname, append, globalcomment, NULL);
+    }
 }
 
-extern zipFile MINIZIP_API zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)
+extern zipFile MINIZIP_API zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment,
+                                        zlib_filefunc64_def* pzlib_filefunc_def)
 {
     if (pzlib_filefunc_def != NULL)
     {
@@ -942,7 +1145,9 @@ extern zipFile MINIZIP_API zipOpen2_64 (const void *pathname, int append, zipcha
         return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
     }
     else
+    {
         return zipOpen3(pathname, append, globalcomment, NULL);
+    }
 }
 
 
@@ -957,110 +1162,139 @@ extern zipFile MINIZIP_API zipOpen64 (const void* pathname, int append)
     return zipOpen3(pathname,append,NULL,NULL);
 }
 
-int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
+int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local,
+                          const void* extrafield_local)
 {
-  /* write the local header */
-  int err;
-  uInt size_filename = (uInt)strlen(filename);
-  uInt size_extrafield = size_extrafield_local;
+    /* write the local header */
+    int err;
+    uInt size_filename   = (uInt)strlen(filename);
+    uInt size_extrafield = size_extrafield_local;
 
-  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
 
-  if (err==ZIP_OK)
-  {
-    if(zi->ci.zip64)
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
-    else
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
-  }
+    if (err==ZIP_OK)
+    {
+        if(zi->ci.zip64)
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
+        }
+        else
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
+        }
+    }
 
-  if (err==ZIP_OK)
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
+    if (err==ZIP_OK)
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
+    }
 
-  if (err==ZIP_OK)
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
+    if (err==ZIP_OK)
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
+    }
 
-  if (err==ZIP_OK)
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
+    if (err==ZIP_OK)
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
+    }
 
-  // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later
-  if (err==ZIP_OK)
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
-  if (err==ZIP_OK)
-  {
-    if(zi->ci.zip64)
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
-    else
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
-  }
-  if (err==ZIP_OK)
-  {
-    if(zi->ci.zip64)
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
-    else
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
-  }
+    // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later
+    if (err==ZIP_OK)
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
+    }
+    if (err==ZIP_OK)
+    {
+        if(zi->ci.zip64)
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
+        }
+        else
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
+        }
+    }
+    if (err==ZIP_OK)
+    {
+        if(zi->ci.zip64)
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
+        }
+        else
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
+        }
+    }
 
-  if (err==ZIP_OK)
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
+    if (err==ZIP_OK)
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
+    }
 
-  if(zi->ci.zip64)
-  {
-    size_extrafield += 20;
-  }
+    if(zi->ci.zip64)
+    {
+        size_extrafield += 20;
+    }
 
-  if (err==ZIP_OK)
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
+    if (err==ZIP_OK)
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
+    }
 
-  if ((err==ZIP_OK) && (size_filename > 0))
-  {
-    if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
-      err = ZIP_ERRNO;
-  }
+    if ((err==ZIP_OK) && (size_filename > 0))
+    {
+        if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
+        {
+            err = ZIP_ERRNO;
+        }
+    }
 
-  if ((err==ZIP_OK) && (size_extrafield_local > 0))
-  {
-    if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
-      err = ZIP_ERRNO;
-  }
+    if ((err==ZIP_OK) && (size_extrafield_local > 0))
+    {
+        if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
+        {
+            err = ZIP_ERRNO;
+        }
+    }
 
 
-  if ((err==ZIP_OK) && (zi->ci.zip64))
-  {
-      // write the Zip64 extended info
-      short HeaderID = 1;
-      short DataSize = 16;
-      ZPOS64_T CompressedSize = 0;
-      ZPOS64_T UncompressedSize = 0;
+    if ((err==ZIP_OK) && (zi->ci.zip64))
+    {
+        // write the Zip64 extended info
+        short HeaderID            = 1;
+        short DataSize            = 16;
+        ZPOS64_T CompressedSize   = 0;
+        ZPOS64_T UncompressedSize = 0;
 
-      // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
-      zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
+        // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
+        zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
 
-      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
-      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
+        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
+        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
 
-      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
-      err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
-  }
+        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
+        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
+    }
 
-  return err;
+    return err;
 }
 
 /*
- NOTE.
- When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped
- before calling this function it can be done with zipRemoveExtraInfoBlock
+   NOTE.
+   When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped
+   before calling this function it can be done with zipRemoveExtraInfoBlock
 
- It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize
- unnecessary allocations.
+   It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize
+   unnecessary allocations.
  */
 extern MINIZIP_API int zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                         const void* extrafield_local, uInt size_extrafield_local,
-                                         const void* extrafield_global, uInt size_extrafield_global,
-                                         const char* comment, int method, int level, int raw,
-                                         int windowBits,int memLevel, int strategy,
-                                         const char* password, uLong crcForCrypting,
-                                         uLong versionMadeBy, uLong flagBase, int zip64)
+                                                const void* extrafield_local, uInt size_extrafield_local,
+                                                const void* extrafield_global, uInt size_extrafield_global,
+                                                const char* comment, int method, int level, int raw,
+                                                int windowBits,int memLevel, int strategy,
+                                                const char* password, uLong crcForCrypting,
+                                                uLong versionMadeBy, uLong flagBase, int zip64)
 {
     zip64_internal* zi;
     uInt size_filename;
@@ -1070,18 +1304,26 @@ extern MINIZIP_API int zipOpenNewFileInZip4_64 (zipFile file, const char* filena
 
 #    ifdef NOCRYPT
     if (password != NULL)
+    {
         return ZIP_PARAMERROR;
+    }
 #    endif
 
     if (file == NULL)
+    {
         return ZIP_PARAMERROR;
+    }
 
 #ifdef HAVE_BZIP2
     if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))
-      return ZIP_PARAMERROR;
+    {
+        return ZIP_PARAMERROR;
+    }
 #else
     if ((method!=0) && (method!=Z_DEFLATED))
-      return ZIP_PARAMERROR;
+    {
+        return ZIP_PARAMERROR;
+    }
 #endif
 
     zi = (zip64_internal*)file;
@@ -1090,48 +1332,70 @@ extern MINIZIP_API int zipOpenNewFileInZip4_64 (zipFile file, const char* filena
     {
         err = zipCloseFileInZip (file);
         if (err != ZIP_OK)
+        {
             return err;
+        }
     }
 
     if (filename==NULL)
-        filename="-";
+    {
+        filename = "-";
+    }
 
     if (comment==NULL)
+    {
         size_comment = 0;
+    }
     else
+    {
         size_comment = (uInt)strlen(comment);
+    }
 
     size_filename = (uInt)strlen(filename);
 
     if (zipfi == NULL)
+    {
         zi->ci.dosDate = 0;
+    }
     else
     {
         if (zipfi->dosDate != 0)
+        {
             zi->ci.dosDate = zipfi->dosDate;
+        }
         else
-          zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
+        {
+            zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
+        }
     }
 
     zi->ci.flag = flagBase;
     if ((level==8) || (level==9))
-      zi->ci.flag |= 2;
+    {
+        zi->ci.flag |= 2;
+    }
     if ((level==2))
-      zi->ci.flag |= 4;
+    {
+        zi->ci.flag |= 4;
+    }
     if ((level==1))
-      zi->ci.flag |= 6;
+    {
+        zi->ci.flag |= 6;
+    }
     if (password != NULL)
-      zi->ci.flag |= 1;
+    {
+        zi->ci.flag |= 1;
+    }
 
-    zi->ci.crc32 = 0;
-    zi->ci.method = method;
-    zi->ci.encrypt = 0;
-    zi->ci.stream_initialised = 0;
+    zi->ci.crc32                = 0;
+    zi->ci.method               = method;
+    zi->ci.encrypt              = 0;
+    zi->ci.stream_initialised   = 0;
     zi->ci.pos_in_buffered_data = 0;
-    zi->ci.raw = raw;
-    zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);
+    zi->ci.raw                  = raw;
+    zi->ci.pos_local_header     = ZTELL64(zi->z_filefunc,zi->filestream);
 
-    zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
+    zi->ci.size_centralheader    = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
     zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data
 
     zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);
@@ -1153,54 +1417,75 @@ extern MINIZIP_API int zipOpenNewFileInZip4_64 (zipFile file, const char* filena
     zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
 
     if (zipfi==NULL)
+    {
         zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
+    }
     else
+    {
         zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
+    }
 
     if (zipfi==NULL)
+    {
         zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
+    }
     else
+    {
         zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
+    }
 
     if(zi->ci.pos_local_header >= 0xffffffff)
-      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
+    {
+        zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
+    }
     else
-      zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);
+    {
+        zip64local_putValue_inmemory(zi->ci.central_header+42,
+                                     (uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);
+    }
 
-    for (i=0;i<size_filename;i++)
+    for (i = 0; i<size_filename; i++)
+    {
         *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
+    }
 
-    for (i=0;i<size_extrafield_global;i++)
+    for (i = 0; i<size_extrafield_global; i++)
+    {
         *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
-              *(((const char*)extrafield_global)+i);
+            *(((const char*)extrafield_global)+i);
+    }
 
-    for (i=0;i<size_comment;i++)
+    for (i = 0; i<size_comment; i++)
+    {
         *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
-              size_extrafield_global+i) = *(comment+i);
+          size_extrafield_global+i) = *(comment+i);
+    }
     if (zi->ci.central_header == NULL)
+    {
         return ZIP_INTERNALERROR;
+    }
 
-    zi->ci.zip64 = zip64;
-    zi->ci.totalCompressedData = 0;
+    zi->ci.zip64                 = zip64;
+    zi->ci.totalCompressedData   = 0;
     zi->ci.totalUncompressedData = 0;
-    zi->ci.pos_zip64extrainfo = 0;
+    zi->ci.pos_zip64extrainfo    = 0;
 
     err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);
 
 #ifdef HAVE_BZIP2
-    zi->ci.bstream.avail_in = (uInt)0;
-    zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
-    zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
-    zi->ci.bstream.total_in_hi32 = 0;
-    zi->ci.bstream.total_in_lo32 = 0;
+    zi->ci.bstream.avail_in       = (uInt)0;
+    zi->ci.bstream.avail_out      = (uInt)Z_BUFSIZE;
+    zi->ci.bstream.next_out       = (char*)zi->ci.buffered_data;
+    zi->ci.bstream.total_in_hi32  = 0;
+    zi->ci.bstream.total_in_lo32  = 0;
     zi->ci.bstream.total_out_hi32 = 0;
     zi->ci.bstream.total_out_lo32 = 0;
 #endif
 
-    zi->ci.stream.avail_in = (uInt)0;
+    zi->ci.stream.avail_in  = (uInt)0;
     zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
-    zi->ci.stream.next_out = zi->ci.buffered_data;
-    zi->ci.stream.total_in = 0;
+    zi->ci.stream.next_out  = zi->ci.buffered_data;
+    zi->ci.stream.total_in  = 0;
     zi->ci.stream.total_out = 0;
     zi->ci.stream.data_type = Z_BINARY;
 
@@ -1212,29 +1497,35 @@ extern MINIZIP_API int zipOpenNewFileInZip4_64 (zipFile file, const char* filena
     {
         if(zi->ci.method == Z_DEFLATED)
         {
-          zi->ci.stream.zalloc = (alloc_func)0;
-          zi->ci.stream.zfree = (free_func)0;
-          zi->ci.stream.opaque = (voidpf)0;
+            zi->ci.stream.zalloc = (alloc_func)0;
+            zi->ci.stream.zfree  = (free_func)0;
+            zi->ci.stream.opaque = (voidpf)0;
 
-          if (windowBits>0)
-              windowBits = -windowBits;
+            if (windowBits>0)
+            {
+                windowBits = -windowBits;
+            }
 
-          err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
+            err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
 
-          if (err==Z_OK)
-              zi->ci.stream_initialised = Z_DEFLATED;
+            if (err==Z_OK)
+            {
+                zi->ci.stream_initialised = Z_DEFLATED;
+            }
         }
         else if(zi->ci.method == Z_BZIP2ED)
         {
 #ifdef HAVE_BZIP2
             // Init BZip stuff here
-          zi->ci.bstream.bzalloc = 0;
-          zi->ci.bstream.bzfree = 0;
-          zi->ci.bstream.opaque = (voidpf)0;
+            zi->ci.bstream.bzalloc = 0;
+            zi->ci.bstream.bzfree  = 0;
+            zi->ci.bstream.opaque  = (voidpf)0;
 
-          err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
-          if(err == BZ_OK)
-            zi->ci.stream_initialised = Z_BZIP2ED;
+            err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
+            if(err == BZ_OK)
+            {
+                zi->ci.stream_initialised = Z_BZIP2ED;
+            }
 #endif
         }
 
@@ -1246,152 +1537,162 @@ extern MINIZIP_API int zipOpenNewFileInZip4_64 (zipFile file, const char* filena
     {
         unsigned char bufHead[RAND_HEAD_LEN];
         unsigned int sizeHead;
-        zi->ci.encrypt = 1;
+        zi->ci.encrypt     = 1;
         zi->ci.pcrc_32_tab = get_crc_table();
         /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
 
-        sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
+        sizeHead = crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,
+                             crcForCrypting);
         zi->ci.crypt_header_size = sizeHead;
 
         if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
-                err = ZIP_ERRNO;
+        {
+            err = ZIP_ERRNO;
+        }
     }
 #    endif
 
     if (err==Z_OK)
+    {
         zi->in_opened_file_inzip = 1;
+    }
     return err;
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                         const void* extrafield_local, uInt size_extrafield_local,
-                                         const void* extrafield_global, uInt size_extrafield_global,
-                                         const char* comment, int method, int level, int raw,
-                                         int windowBits,int memLevel, int strategy,
-                                         const char* password, uLong crcForCrypting,
-                                         uLong versionMadeBy, uLong flagBase)
+                                             const void* extrafield_local, uInt size_extrafield_local,
+                                             const void* extrafield_global, uInt size_extrafield_global,
+                                             const char* comment, int method, int level, int raw,
+                                             int windowBits,int memLevel, int strategy,
+                                             const char* password, uLong crcForCrypting,
+                                             uLong versionMadeBy, uLong flagBase)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, raw,
-                                 windowBits, memLevel, strategy,
-                                 password, crcForCrypting, versionMadeBy, flagBase, 0);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, raw,
+                                    windowBits, memLevel, strategy,
+                                    password, crcForCrypting, versionMadeBy, flagBase, 0);
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                         const void* extrafield_local, uInt size_extrafield_local,
-                                         const void* extrafield_global, uInt size_extrafield_global,
-                                         const char* comment, int method, int level, int raw,
-                                         int windowBits,int memLevel, int strategy,
-                                         const char* password, uLong crcForCrypting)
+                                             const void* extrafield_local, uInt size_extrafield_local,
+                                             const void* extrafield_global, uInt size_extrafield_global,
+                                             const char* comment, int method, int level, int raw,
+                                             int windowBits,int memLevel, int strategy,
+                                             const char* password, uLong crcForCrypting)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, raw,
-                                 windowBits, memLevel, strategy,
-                                 password, crcForCrypting, VERSIONMADEBY, 0, 0);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, raw,
+                                    windowBits, memLevel, strategy,
+                                    password, crcForCrypting, VERSIONMADEBY, 0, 0);
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                         const void* extrafield_local, uInt size_extrafield_local,
-                                         const void* extrafield_global, uInt size_extrafield_global,
-                                         const char* comment, int method, int level, int raw,
-                                         int windowBits,int memLevel, int strategy,
-                                         const char* password, uLong crcForCrypting, int zip64)
+                                               const void* extrafield_local, uInt size_extrafield_local,
+                                               const void* extrafield_global, uInt size_extrafield_global,
+                                               const char* comment, int method, int level, int raw,
+                                               int windowBits,int memLevel, int strategy,
+                                               const char* password, uLong crcForCrypting, int zip64)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, raw,
-                                 windowBits, memLevel, strategy,
-                                 password, crcForCrypting, VERSIONMADEBY, 0, zip64);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, raw,
+                                    windowBits, memLevel, strategy,
+                                    password, crcForCrypting, VERSIONMADEBY, 0, zip64);
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                        const void* extrafield_local, uInt size_extrafield_local,
-                                        const void* extrafield_global, uInt size_extrafield_global,
-                                        const char* comment, int method, int level, int raw)
+                                            const void* extrafield_local, uInt size_extrafield_local,
+                                            const void* extrafield_global, uInt size_extrafield_global,
+                                            const char* comment, int method, int level, int raw)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, raw,
-                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
-                                 NULL, 0, VERSIONMADEBY, 0, 0);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, raw,
+                                    -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                    NULL, 0, VERSIONMADEBY, 0, 0);
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                        const void* extrafield_local, uInt size_extrafield_local,
-                                        const void* extrafield_global, uInt size_extrafield_global,
-                                        const char* comment, int method, int level, int raw, int zip64)
+                                               const void* extrafield_local, uInt size_extrafield_local,
+                                               const void* extrafield_global, uInt size_extrafield_global,
+                                               const char* comment, int method, int level, int raw, int zip64)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, raw,
-                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
-                                 NULL, 0, VERSIONMADEBY, 0, zip64);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, raw,
+                                    -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                    NULL, 0, VERSIONMADEBY, 0, zip64);
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                        const void* extrafield_local, uInt size_extrafield_local,
-                                        const void*extrafield_global, uInt size_extrafield_global,
-                                        const char* comment, int method, int level, int zip64)
+                                              const void* extrafield_local, uInt size_extrafield_local,
+                                              const void*extrafield_global, uInt size_extrafield_global,
+                                              const char* comment, int method, int level, int zip64)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, 0,
-                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
-                                 NULL, 0, VERSIONMADEBY, 0, zip64);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, 0,
+                                    -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                    NULL, 0, VERSIONMADEBY, 0, zip64);
 }
 
 extern MINIZIP_API int zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi,
-                                        const void* extrafield_local, uInt size_extrafield_local,
-                                        const void*extrafield_global, uInt size_extrafield_global,
-                                        const char* comment, int method, int level)
+                                            const void* extrafield_local, uInt size_extrafield_local,
+                                            const void*extrafield_global, uInt size_extrafield_global,
+                                            const char* comment, int method, int level)
 {
     return zipOpenNewFileInZip4_64 (file, filename, zipfi,
-                                 extrafield_local, size_extrafield_local,
-                                 extrafield_global, size_extrafield_global,
-                                 comment, method, level, 0,
-                                 -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
-                                 NULL, 0, VERSIONMADEBY, 0, 0);
+                                    extrafield_local, size_extrafield_local,
+                                    extrafield_global, size_extrafield_global,
+                                    comment, method, level, 0,
+                                    -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+                                    NULL, 0, VERSIONMADEBY, 0, 0);
 }
 
 local int zip64FlushWriteBuffer(zip64_internal* zi)
 {
-    int err=ZIP_OK;
+    int err = ZIP_OK;
 
     if (zi->ci.encrypt != 0)
     {
 #ifndef NOCRYPT
         uInt i;
         int t;
-        for (i=0;i<zi->ci.pos_in_buffered_data;i++)
+        for (i = 0; i<zi->ci.pos_in_buffered_data; i++)
+        {
             zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);
+        }
 #endif
     }
 
-    if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
-      err = ZIP_ERRNO;
+    if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,
+                 zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
+    {
+        err = ZIP_ERRNO;
+    }
 
     zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;
 
 #ifdef HAVE_BZIP2
     if(zi->ci.method == Z_BZIP2ED)
     {
-      zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
-      zi->ci.bstream.total_in_lo32 = 0;
-      zi->ci.bstream.total_in_hi32 = 0;
+        zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
+        zi->ci.bstream.total_in_lo32  = 0;
+        zi->ci.bstream.total_in_hi32  = 0;
     }
     else
 #endif
     {
-      zi->ci.totalUncompressedData += zi->ci.stream.total_in;
-      zi->ci.stream.total_in = 0;
+        zi->ci.totalUncompressedData += zi->ci.stream.total_in;
+        zi->ci.stream.total_in        = 0;
     }
 
 
@@ -1403,105 +1704,125 @@ local int zip64FlushWriteBuffer(zip64_internal* zi)
 extern MINIZIP_API int zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)
 {
     zip64_internal* zi;
-    int err=ZIP_OK;
+    int err = ZIP_OK;
 
     if (file == NULL)
+    {
         return ZIP_PARAMERROR;
+    }
     zi = (zip64_internal*)file;
 
     if (zi->in_opened_file_inzip == 0)
+    {
         return ZIP_PARAMERROR;
+    }
 
     zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
 
 #ifdef HAVE_BZIP2
     if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))
     {
-      zi->ci.bstream.next_in = (void*)buf;
-      zi->ci.bstream.avail_in = len;
-      err = BZ_RUN_OK;
+        zi->ci.bstream.next_in  = (void*)buf;
+        zi->ci.bstream.avail_in = len;
+        err                     = BZ_RUN_OK;
 
-      while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
-      {
-        if (zi->ci.bstream.avail_out == 0)
+        while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
         {
-          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
-            err = ZIP_ERRNO;
-          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
-          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
-        }
+            if (zi->ci.bstream.avail_out == 0)
+            {
+                if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+                {
+                    err = ZIP_ERRNO;
+                }
+                zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+                zi->ci.bstream.next_out  = (char*)zi->ci.buffered_data;
+            }
 
 
-        if(err != BZ_RUN_OK)
-          break;
+            if(err != BZ_RUN_OK)
+            {
+                break;
+            }
 
-        if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
-        {
-          uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
+            if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+            {
+                uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
 //          uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;
-          err=BZ2_bzCompress(&zi->ci.bstream,  BZ_RUN);
+                err = BZ2_bzCompress(&zi->ci.bstream,  BZ_RUN);
 
-          zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;
+                zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo);
+            }
         }
-      }
 
-      if(err == BZ_RUN_OK)
-        err = ZIP_OK;
+        if(err == BZ_RUN_OK)
+        {
+            err = ZIP_OK;
+        }
     }
     else
 #endif
     {
-      zi->ci.stream.next_in = (Bytef*)buf;
-      zi->ci.stream.avail_in = len;
-
-      while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
-      {
-          if (zi->ci.stream.avail_out == 0)
-          {
-              if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
-                  err = ZIP_ERRNO;
-              zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
-              zi->ci.stream.next_out = zi->ci.buffered_data;
-          }
-
-
-          if(err != ZIP_OK)
-              break;
-
-          if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
-          {
-              uLong uTotalOutBefore = zi->ci.stream.total_out;
-              err=deflate(&zi->ci.stream,  Z_NO_FLUSH);
-              if(uTotalOutBefore > zi->ci.stream.total_out)
-              {
-                int bBreak = 0;
-                bBreak++;
-              }
-
-              zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
-          }
-          else
-          {
-              uInt copy_this,i;
-              if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
-                  copy_this = zi->ci.stream.avail_in;
-              else
-                  copy_this = zi->ci.stream.avail_out;
-
-              for (i = 0; i < copy_this; i++)
-                  *(((char*)zi->ci.stream.next_out)+i) =
-                      *(((const char*)zi->ci.stream.next_in)+i);
-              {
-                  zi->ci.stream.avail_in -= copy_this;
-                  zi->ci.stream.avail_out-= copy_this;
-                  zi->ci.stream.next_in+= copy_this;
-                  zi->ci.stream.next_out+= copy_this;
-                  zi->ci.stream.total_in+= copy_this;
-                  zi->ci.stream.total_out+= copy_this;
-                  zi->ci.pos_in_buffered_data += copy_this;
-              }
-          }
-      }// while(...)
+        zi->ci.stream.next_in  = (Bytef*)buf;
+        zi->ci.stream.avail_in = len;
+
+        while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
+        {
+            if (zi->ci.stream.avail_out == 0)
+            {
+                if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+                {
+                    err = ZIP_ERRNO;
+                }
+                zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+                zi->ci.stream.next_out  = zi->ci.buffered_data;
+            }
+
+
+            if(err != ZIP_OK)
+            {
+                break;
+            }
+
+            if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+            {
+                uLong uTotalOutBefore = zi->ci.stream.total_out;
+                err = deflate(&zi->ci.stream,  Z_NO_FLUSH);
+                if(uTotalOutBefore > zi->ci.stream.total_out)
+                {
+                    int bBreak = 0;
+                    bBreak++;
+                }
+
+                zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore);
+            }
+            else
+            {
+                uInt copy_this,i;
+                if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
+                {
+                    copy_this = zi->ci.stream.avail_in;
+                }
+                else
+                {
+                    copy_this = zi->ci.stream.avail_out;
+                }
+
+                for (i = 0; i < copy_this; i++)
+                {
+                    *(((char*)zi->ci.stream.next_out)+i) =
+                        *(((const char*)zi->ci.stream.next_in)+i);
+                }
+                {
+                    zi->ci.stream.avail_in      -= copy_this;
+                    zi->ci.stream.avail_out     -= copy_this;
+                    zi->ci.stream.next_in       += copy_this;
+                    zi->ci.stream.next_out      += copy_this;
+                    zi->ci.stream.total_in      += copy_this;
+                    zi->ci.stream.total_out     += copy_this;
+                    zi->ci.pos_in_buffered_data += copy_this;
+                }
+            }
+        }// while(...)
     }
 
     return err;
@@ -1517,90 +1838,110 @@ extern MINIZIP_API int zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompress
     zip64_internal* zi;
     ZPOS64_T compressed_size;
     uLong invalidValue = 0xffffffff;
-    short datasize = 0;
-    int err=ZIP_OK;
+    short datasize     = 0;
+    int err            = ZIP_OK;
 
     if (file == NULL)
+    {
         return ZIP_PARAMERROR;
+    }
     zi = (zip64_internal*)file;
 
     if (zi->in_opened_file_inzip == 0)
+    {
         return ZIP_PARAMERROR;
+    }
     zi->ci.stream.avail_in = 0;
 
     if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+    {
+        while (err==ZIP_OK)
+        {
+            uLong uTotalOutBefore;
+            if (zi->ci.stream.avail_out == 0)
+            {
+                if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
                 {
-                        while (err==ZIP_OK)
-                        {
-                                uLong uTotalOutBefore;
-                                if (zi->ci.stream.avail_out == 0)
-                                {
-                                        if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
-                                                err = ZIP_ERRNO;
-                                        zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
-                                        zi->ci.stream.next_out = zi->ci.buffered_data;
-                                }
-                                uTotalOutBefore = zi->ci.stream.total_out;
-                                err=deflate(&zi->ci.stream,  Z_FINISH);
-                                zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
-                        }
+                    err = ZIP_ERRNO;
                 }
+                zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+                zi->ci.stream.next_out  = zi->ci.buffered_data;
+            }
+            uTotalOutBefore              = zi->ci.stream.total_out;
+            err                          = deflate(&zi->ci.stream,  Z_FINISH);
+            zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore);
+        }
+    }
     else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
     {
 #ifdef HAVE_BZIP2
-      err = BZ_FINISH_OK;
-      while (err==BZ_FINISH_OK)
-      {
-        uLong uTotalOutBefore;
-        if (zi->ci.bstream.avail_out == 0)
+        err = BZ_FINISH_OK;
+        while (err==BZ_FINISH_OK)
         {
-          if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
-            err = ZIP_ERRNO;
-          zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
-          zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
-        }
-        uTotalOutBefore = zi->ci.bstream.total_out_lo32;
-        err=BZ2_bzCompress(&zi->ci.bstream,  BZ_FINISH);
-        if(err == BZ_STREAM_END)
-          err = Z_STREAM_END;
+            uLong uTotalOutBefore;
+            if (zi->ci.bstream.avail_out == 0)
+            {
+                if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+                {
+                    err = ZIP_ERRNO;
+                }
+                zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+                zi->ci.bstream.next_out  = (char*)zi->ci.buffered_data;
+            }
+            uTotalOutBefore = zi->ci.bstream.total_out_lo32;
+            err             = BZ2_bzCompress(&zi->ci.bstream,  BZ_FINISH);
+            if(err == BZ_STREAM_END)
+            {
+                err = Z_STREAM_END;
+            }
 
-        zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
-      }
+            zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
+        }
 
-      if(err == BZ_FINISH_OK)
-        err = ZIP_OK;
+        if(err == BZ_FINISH_OK)
+        {
+            err = ZIP_OK;
+        }
 #endif
     }
 
     if (err==Z_STREAM_END)
-        err=ZIP_OK; /* this is normal */
+    {
+        err = ZIP_OK; /* this is normal */
 
+    }
     if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
-                {
+    {
         if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)
+        {
             err = ZIP_ERRNO;
-                }
+        }
+    }
 
     if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
     {
         int tmp_err = deflateEnd(&zi->ci.stream);
         if (err == ZIP_OK)
+        {
             err = tmp_err;
+        }
         zi->ci.stream_initialised = 0;
     }
 #ifdef HAVE_BZIP2
     else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
     {
-      int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
-                        if (err==ZIP_OK)
-                                err = tmperr;
-                        zi->ci.stream_initialised = 0;
+        int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
+        if (err==ZIP_OK)
+        {
+            err = tmperr;
+        }
+        zi->ci.stream_initialised = 0;
     }
 #endif
 
     if (!zi->ci.raw)
     {
-        crc32 = (uLong)zi->ci.crc32;
+        crc32             = (uLong)zi->ci.crc32;
         uncompressed_size = zi->ci.totalUncompressedData;
     }
     compressed_size = zi->ci.totalCompressedData;
@@ -1612,10 +1953,10 @@ extern MINIZIP_API int zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompress
     // update Current Item crc and sizes,
     if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)
     {
-      /*version Made by*/
-      zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
-      /*version needed*/
-      zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
+        /*version Made by*/
+        zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
+        /*version needed*/
+        zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
 
     }
 
@@ -1623,80 +1964,98 @@ extern MINIZIP_API int zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompress
 
 
     if(compressed_size >= 0xffffffff)
-      zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
+    {
+        zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
+    }
     else
-      zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
+    {
+        zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
 
+    }
     /// set internal file attributes field
     if (zi->ci.stream.data_type == Z_ASCII)
+    {
         zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
+    }
 
     if(uncompressed_size >= 0xffffffff)
-      zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
+    {
+        zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
+    }
     else
-      zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
+    {
+        zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
 
+    }
     // Add ZIP64 extra info field for uncompressed size
     if(uncompressed_size >= 0xffffffff)
-      datasize += 8;
+    {
+        datasize += 8;
+    }
 
     // Add ZIP64 extra info field for compressed size
     if(compressed_size >= 0xffffffff)
-      datasize += 8;
+    {
+        datasize += 8;
+    }
 
     // Add ZIP64 extra info field for relative offset to local file header of current file
     if(zi->ci.pos_local_header >= 0xffffffff)
-      datasize += 8;
+    {
+        datasize += 8;
+    }
 
     if(datasize > 0)
     {
-      char* p = NULL;
+        char* p = NULL;
 
-      if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
-      {
-        // we can not write more data to the buffer that we have room for.
-        return ZIP_BADZIPFILE;
-      }
+        if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
+        {
+            // we can not write more data to the buffer that we have room for.
+            return ZIP_BADZIPFILE;
+        }
 
-      p = zi->ci.central_header + zi->ci.size_centralheader;
+        p = zi->ci.central_header + zi->ci.size_centralheader;
 
-      // Add Extra Information Header for 'ZIP64 information'
-      zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID
-      p += 2;
-      zip64local_putValue_inmemory(p, datasize, 2); // DataSize
-      p += 2;
+        // Add Extra Information Header for 'ZIP64 information'
+        zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID
+        p += 2;
+        zip64local_putValue_inmemory(p, datasize, 2); // DataSize
+        p += 2;
 
-      if(uncompressed_size >= 0xffffffff)
-      {
-        zip64local_putValue_inmemory(p, uncompressed_size, 8);
-        p += 8;
-      }
+        if(uncompressed_size >= 0xffffffff)
+        {
+            zip64local_putValue_inmemory(p, uncompressed_size, 8);
+            p += 8;
+        }
 
-      if(compressed_size >= 0xffffffff)
-      {
-        zip64local_putValue_inmemory(p, compressed_size, 8);
-        p += 8;
-      }
+        if(compressed_size >= 0xffffffff)
+        {
+            zip64local_putValue_inmemory(p, compressed_size, 8);
+            p += 8;
+        }
 
-      if(zi->ci.pos_local_header >= 0xffffffff)
-      {
-        zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
-        p += 8;
-      }
+        if(zi->ci.pos_local_header >= 0xffffffff)
+        {
+            zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
+            p += 8;
+        }
 
-      // Update how much extra free space we got in the memory buffer
-      // and increase the centralheader size so the new ZIP64 fields are included
-      // ( 4 below is the size of HeaderID and DataSize field )
-      zi->ci.size_centralExtraFree -= datasize + 4;
-      zi->ci.size_centralheader += datasize + 4;
+        // Update how much extra free space we got in the memory buffer
+        // and increase the centralheader size so the new ZIP64 fields are included
+        // ( 4 below is the size of HeaderID and DataSize field )
+        zi->ci.size_centralExtraFree -= datasize + 4;
+        zi->ci.size_centralheader    += datasize + 4;
 
-      // Update the extra info size field
-      zi->ci.size_centralExtra += datasize + 4;
-      zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
+        // Update the extra info size field
+        zi->ci.size_centralExtra += datasize + 4;
+        zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
     }
 
     if (err==ZIP_OK)
+    {
         err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);
+    }
 
     free(zi->ci.central_header);
 
@@ -1707,40 +2066,56 @@ extern MINIZIP_API int zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompress
         ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
 
         if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
             err = ZIP_ERRNO;
+        }
 
         if (err==ZIP_OK)
+        {
             err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
 
+        }
         if(uncompressed_size >= 0xffffffff)
         {
-          if(zi->ci.pos_zip64extrainfo > 0)
-          {
-            // Update the size in the ZIP64 extended field.
-            if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
-              err = ZIP_ERRNO;
+            if(zi->ci.pos_zip64extrainfo > 0)
+            {
+                // Update the size in the ZIP64 extended field.
+                if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
+                {
+                    err = ZIP_ERRNO;
+                }
 
-            if (err==ZIP_OK) /* compressed size, unknown */
-              err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
+                if (err==ZIP_OK) /* compressed size, unknown */
+                {
+                    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
+                }
 
-            if (err==ZIP_OK) /* uncompressed size, unknown */
-              err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
-          }
+                if (err==ZIP_OK) /* uncompressed size, unknown */
+                {
+                    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
+                }
+            }
         }
         else
         {
-          if (err==ZIP_OK) /* compressed size, unknown */
-              err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+            if (err==ZIP_OK) /* compressed size, unknown */
+            {
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+            }
 
-          if (err==ZIP_OK) /* uncompressed size, unknown */
-              err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+            if (err==ZIP_OK) /* uncompressed size, unknown */
+            {
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+            }
         }
 
         if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
+        {
             err = ZIP_ERRNO;
+        }
     }
 
-    zi->number_entry ++;
+    zi->number_entry++;
     zi->in_opened_file_inzip = 0;
 
     return err;
@@ -1753,141 +2128,187 @@ extern MINIZIP_API int zipCloseFileInZip (zipFile file)
 
 int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
 {
-  int err = ZIP_OK;
-  ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;
+    int err      = ZIP_OK;
+    ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;
 
-  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
 
-  /*num disks*/
+    /*num disks*/
     if (err==ZIP_OK) /* number of the disk with the start of the central directory */
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+    }
 
-  /*relative offset*/
+    /*relative offset*/
     if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
+    }
 
-  /*total disks*/ /* Do not support spawning of disk so always say 1 here*/
+    /*total disks*/ /* Do not support spawning of disk so always say 1 here*/
     if (err==ZIP_OK) /* number of the disk with the start of the central directory */
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
+    }
 
     return err;
 }
 
 int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
 {
-  int err = ZIP_OK;
+    int err = ZIP_OK;
 
-  uLong Zip64DataSize = 44;
+    uLong Zip64DataSize = 44;
 
-  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
 
-  if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?
+    if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?
 
-  if (err==ZIP_OK) /* version made by */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+    }
+    if (err==ZIP_OK) /* version made by */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+    }
 
-  if (err==ZIP_OK) /* version needed */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+    if (err==ZIP_OK) /* version needed */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+    }
 
-  if (err==ZIP_OK) /* number of this disk */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+    if (err==ZIP_OK) /* number of this disk */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+    }
 
-  if (err==ZIP_OK) /* number of the disk with the start of the central directory */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+    if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+    }
 
-  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
-    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+    if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+    {
+        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+    }
 
-  if (err==ZIP_OK) /* total number of entries in the central dir */
-    err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+    if (err==ZIP_OK) /* total number of entries in the central dir */
+    {
+        err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+    }
 
-  if (err==ZIP_OK) /* size of the central directory */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
+    if (err==ZIP_OK) /* size of the central directory */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
+    }
 
-  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
-  {
-    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
-  }
-  return err;
+    if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+    {
+        ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
+    }
+    return err;
 }
 int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
 {
-  int err = ZIP_OK;
+    int err = ZIP_OK;
 
-  /*signature*/
-  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
+    /*signature*/
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
 
-  if (err==ZIP_OK) /* number of this disk */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+    if (err==ZIP_OK) /* number of this disk */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+    }
 
-  if (err==ZIP_OK) /* number of the disk with the start of the central directory */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+    if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+    }
 
-  if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
-  {
+    if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
     {
-      if(zi->number_entry >= 0xFFFF)
-        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
-      else
-        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+        {
+            if(zi->number_entry >= 0xFFFF)
+            {
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+            }
+            else
+            {
+                err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+            }
+        }
     }
-  }
 
-  if (err==ZIP_OK) /* total number of entries in the central dir */
-  {
-    if(zi->number_entry >= 0xFFFF)
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
-    else
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
-  }
+    if (err==ZIP_OK) /* total number of entries in the central dir */
+    {
+        if(zi->number_entry >= 0xFFFF)
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+        }
+        else
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+        }
+    }
 
-  if (err==ZIP_OK) /* size of the central directory */
-    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
+    if (err==ZIP_OK) /* size of the central directory */
+    {
+        err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
+    }
 
-  if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
-  {
-    ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
-    if(pos >= 0xffffffff)
+    if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
     {
-      err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
+        ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+        if(pos >= 0xffffffff)
+        {
+            err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
+        }
+        else
+        {
+            err =
+                zip64local_putValue(&zi->z_filefunc,zi->filestream,
+                                    (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
+        }
     }
-    else
-                  err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
-  }
 
-   return err;
+    return err;
 }
 
 int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
 {
-  int err = ZIP_OK;
-  uInt size_global_comment = 0;
+    int err                  = ZIP_OK;
+    uInt size_global_comment = 0;
 
-  if(global_comment != NULL)
-    size_global_comment = (uInt)strlen(global_comment);
+    if(global_comment != NULL)
+    {
+        size_global_comment = (uInt)strlen(global_comment);
+    }
 
-  err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
+    err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
 
-  if (err == ZIP_OK && size_global_comment > 0)
-  {
-    if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
-      err = ZIP_ERRNO;
-  }
-  return err;
+    if (err == ZIP_OK && size_global_comment > 0)
+    {
+        if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
+        {
+            err = ZIP_ERRNO;
+        }
+    }
+    return err;
 }
 
 extern MINIZIP_API int zipClose (zipFile file, const char* global_comment)
 {
     zip64_internal* zi;
-    int err = 0;
+    int err               = 0;
     uLong size_centraldir = 0;
     ZPOS64_T centraldir_pos_inzip;
     ZPOS64_T pos;
 
     if (file == NULL)
+    {
         return ZIP_PARAMERROR;
+    }
 
     zi = (zip64_internal*)file;
 
@@ -1898,7 +2319,9 @@ extern MINIZIP_API int zipClose (zipFile file, const char* global_comment)
 
 #ifndef NO_ADDFILEINEXISTINGZIP
     if (global_comment==NULL)
+    {
         global_comment = zi->globalcomment;
+    }
 #endif
 
     centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
@@ -1910,12 +2333,15 @@ extern MINIZIP_API int zipClose (zipFile file, const char* global_comment)
         {
             if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
             {
-                if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)
+                if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data,
+                             ldi->filled_in_this_block) != ldi->filled_in_this_block)
+                {
                     err = ZIP_ERRNO;
+                }
             }
 
             size_centraldir += ldi->filled_in_this_block;
-            ldi = ldi->next_datablock;
+            ldi              = ldi->next_datablock;
         }
     }
     free_linkedlist(&(zi->central_dir));
@@ -1923,21 +2349,29 @@ extern MINIZIP_API int zipClose (zipFile file, const char* global_comment)
     pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
     if(pos >= 0xffffffff)
     {
-      ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
-      Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+        ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
+        Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
 
-      Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
+        Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
     }
 
     if (err==ZIP_OK)
-      err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+    {
+        err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+    }
 
     if(err == ZIP_OK)
-      err = Write_GlobalComment(zi, global_comment);
+    {
+        err = Write_GlobalComment(zi, global_comment);
+    }
 
     if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)
+    {
         if (err == ZIP_OK)
+        {
             err = ZIP_ERRNO;
+        }
+    }
 
 #ifndef NO_ADDFILEINEXISTINGZIP
     TRYFREE(zi->globalcomment);
@@ -1949,58 +2383,64 @@ extern MINIZIP_API int zipClose (zipFile file, const char* global_comment)
 
 extern MINIZIP_API int zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)
 {
-  char* p = pData;
-  int size = 0;
-  char* pNewHeader;
-  char* pTmp;
-  short header;
-  short dataSize;
-
-  int retVal = ZIP_OK;
+    char* p  = pData;
+    int size = 0;
+    char* pNewHeader;
+    char* pTmp;
+    short header;
+    short dataSize;
 
-  if(pData == NULL || *dataLen < 4)
-    return ZIP_PARAMERROR;
+    int retVal = ZIP_OK;
 
-  pNewHeader = (char*)ALLOC(*dataLen);
-  pTmp = pNewHeader;
-
-  while(p < (pData + *dataLen))
-  {
-    header = *(short*)p;
-    dataSize = *(((short*)p)+1);
-
-    if( header == sHeader ) // Header found.
+    if(pData == NULL || *dataLen < 4)
     {
-      p += dataSize + 4; // skip it. do not copy to temp buffer
+        return ZIP_PARAMERROR;
     }
-    else
+
+    pNewHeader = (char*)ALLOC(*dataLen);
+    pTmp       = pNewHeader;
+
+    while(p < (pData + *dataLen))
     {
-      // Extra Info block should not be removed, So copy it to the temp buffer.
-      memcpy(pTmp, p, dataSize + 4);
-      p += dataSize + 4;
-      size += dataSize + 4;
-    }
+        header   = *(short*)p;
+        dataSize = *(((short*)p)+1);
 
-  }
+        if( header == sHeader ) // Header found.
+        {
+            p += dataSize + 4; // skip it. do not copy to temp buffer
+        }
+        else
+        {
+            // Extra Info block should not be removed, So copy it to the temp buffer.
+            memcpy(pTmp, p, dataSize + 4);
+            p    += dataSize + 4;
+            size += dataSize + 4;
+        }
+
+    }
 
-  if(size < *dataLen)
-  {
-    // clean old extra info block.
-    memset(pData,0, *dataLen);
+    if(size < *dataLen)
+    {
+        // clean old extra info block.
+        memset(pData,0, *dataLen);
 
-    // copy the new extra info block over the old
-    if(size > 0)
-      memcpy(pData, pNewHeader, size);
+        // copy the new extra info block over the old
+        if(size > 0)
+        {
+            memcpy(pData, pNewHeader, size);
+        }
 
-    // set the new extra info size
-    *dataLen = size;
+        // set the new extra info size
+        *dataLen = size;
 
-    retVal = ZIP_OK;
-  }
-  else
-    retVal = ZIP_ERRNO;
+        retVal = ZIP_OK;
+    }
+    else
+    {
+        retVal = ZIP_ERRNO;
+    }
 
-  TRYFREE(pNewHeader);
+    TRYFREE(pNewHeader);
 
-  return retVal;
+    return retVal;
 }
diff --git a/SrcLib/core/fwZip/test/CMakeLists.txt b/SrcLib/core/fwZip/test/CMakeLists.txt
new file mode 100644
index 0000000..c11c369
--- /dev/null
+++ b/SrcLib/core/fwZip/test/CMakeLists.txt
@@ -0,0 +1,8 @@
+fwLoadProperties()
+
+find_package (Boost COMPONENTS thread filesystem system REQUIRED)
+find_package(CppUnit)
+fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
+fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+
+
diff --git a/SrcLib/core/fwZip/test/Properties.cmake b/SrcLib/core/fwZip/test/Properties.cmake
new file mode 100644
index 0000000..43f0f78
--- /dev/null
+++ b/SrcLib/core/fwZip/test/Properties.cmake
@@ -0,0 +1,7 @@
+
+set( NAME fwZipTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES fwTools fwTest fwZip)
+set( REQUIREMENTS  )
+
diff --git a/SrcLib/core/fwZip/test/tu/include/DirTest.hpp b/SrcLib/core/fwZip/test/tu/include/DirTest.hpp
new file mode 100644
index 0000000..a16f4a3
--- /dev/null
+++ b/SrcLib/core/fwZip/test/tu/include/DirTest.hpp
@@ -0,0 +1,38 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWZIP_UT_DIRTEST_HPP__
+#define __FWZIP_UT_DIRTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwZip
+{
+namespace ut
+{
+
+class DirTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DirTest );
+CPPUNIT_TEST( writeReadFileTest );
+CPPUNIT_TEST( writeDirTest );
+CPPUNIT_TEST( putFileTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void writeReadFileTest();
+    void writeDirTest();
+    void putFileTest();
+};
+
+} // namespace ut
+} // namespace fwZip
+
+#endif //__FWZIP_UT_DIRTEST_HPP__
diff --git a/SrcLib/core/fwZip/test/tu/include/ZipTest.hpp b/SrcLib/core/fwZip/test/tu/include/ZipTest.hpp
new file mode 100644
index 0000000..a47ba5c
--- /dev/null
+++ b/SrcLib/core/fwZip/test/tu/include/ZipTest.hpp
@@ -0,0 +1,34 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWZIP_UT_ZIPTEST_HPP__
+#define __FWZIP_UT_ZIPTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwZip
+{
+namespace ut
+{
+
+class ZipTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( ZipTest );
+CPPUNIT_TEST( commentTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void commentTest();
+};
+
+} // namespace ut
+} // namespace fwZip
+
+#endif //__FWZIP_UT_ZIPTEST_HPP__
diff --git a/SrcLib/core/fwZip/test/tu/src/DirTest.cpp b/SrcLib/core/fwZip/test/tu/src/DirTest.cpp
new file mode 100644
index 0000000..7917983
--- /dev/null
+++ b/SrcLib/core/fwZip/test/tu/src/DirTest.cpp
@@ -0,0 +1,93 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DirTest.hpp"
+
+#include <fwTest/Data.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <fwZip/ReadDirArchive.hpp>
+#include <fwZip/WriteDirArchive.hpp>
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwZip::ut::DirTest );
+
+namespace fwZip
+{
+namespace ut
+{
+
+void DirTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+void DirTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+void DirTest::writeReadFileTest()
+{
+    const ::boost::filesystem::path dirPath = ::fwTools::System::getTemporaryFolder() / "fwDirTest";
+    ::boost::filesystem::create_directories( dirPath );
+
+    SPTR(WriteDirArchive) writer = std::make_shared<WriteDirArchive>(dirPath);
+    SPTR(ReadDirArchive) reader  = std::make_shared<ReadDirArchive>(dirPath);
+
+    const ::boost::filesystem::path testFile = "test.txt";
+
+    CPPUNIT_ASSERT_NO_THROW(writer->createFile(testFile));
+
+    CPPUNIT_ASSERT_NO_THROW(reader->getFile(testFile));
+    ::boost::filesystem::remove_all( dirPath );
+
+}
+
+void DirTest::writeDirTest()
+{
+    const ::boost::filesystem::path dirPath = ::fwTools::System::getTemporaryFolder() / "fwDirTest";
+    ::boost::filesystem::create_directories( dirPath );
+
+    SPTR(WriteDirArchive) writer = std::make_shared<WriteDirArchive>(dirPath);
+
+    const ::boost::filesystem::path testDir = "test";
+
+    CPPUNIT_ASSERT_NO_THROW(writer->createDir(testDir));
+
+    CPPUNIT_ASSERT(::boost::filesystem::exists(dirPath/testDir));
+
+    ::boost::filesystem::remove_all( dirPath );
+}
+
+void DirTest::putFileTest()
+{
+    const ::boost::filesystem::path dirPath = ::fwTools::System::getTemporaryFolder() / "fwDirTest";
+    ::boost::filesystem::create_directories( dirPath );
+
+    SPTR(WriteDirArchive) writer = std::make_shared<WriteDirArchive>(dirPath);
+
+    const ::boost::filesystem::path testDir  = "test";
+    const ::boost::filesystem::path testFile = ::fwTest::Data::dir() / "fw4spl/image/jpg/makao01.jpg";
+
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + testFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(testFile));
+
+    CPPUNIT_ASSERT_NO_THROW(writer->putFile(testFile, "image.jpg"));
+
+    CPPUNIT_ASSERT(::boost::filesystem::exists(dirPath/"image.jpg"));
+
+    ::boost::filesystem::remove_all( dirPath );
+}
+
+
+} // namespace ut
+} // namespace fwZip
diff --git a/SrcLib/core/fwZip/test/tu/src/ZipTest.cpp b/SrcLib/core/fwZip/test/tu/src/ZipTest.cpp
new file mode 100644
index 0000000..dd32af9
--- /dev/null
+++ b/SrcLib/core/fwZip/test/tu/src/ZipTest.cpp
@@ -0,0 +1,65 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ZipTest.hpp"
+
+#include <fwTest/Data.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <fwZip/ReadZipArchive.hpp>
+#include <fwZip/WriteZipArchive.hpp>
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwZip::ut::ZipTest );
+
+namespace fwZip
+{
+namespace ut
+{
+
+void ZipTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+void ZipTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+void ZipTest::commentTest()
+{
+    const std::string writerComment = "Example of comment";
+
+    const ::boost::filesystem::path dirPath = ::fwTools::System::getTemporaryFolder() / "fwZipTest";
+    ::boost::filesystem::create_directories( dirPath );
+    const ::boost::filesystem::path path        = dirPath / "jambon.zip";
+    const ::boost::filesystem::path sourceFile  = ::fwTest::Data::dir() / "fw4spl/image/jpg/makao01.jpg";
+    const ::boost::filesystem::path archiveFile = "makao.jpg";
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + sourceFile.string() + "' does not exist",
+                           ::boost::filesystem::exists(sourceFile));
+
+
+    SPTR(WriteZipArchive) writer = std::make_shared<WriteZipArchive>(path, writerComment);
+    writer->putFile(sourceFile, archiveFile);
+    writer->createFile("");
+
+    SPTR(ReadZipArchive) reader = std::make_shared<ReadZipArchive>(path);
+    std::string readerComment = reader->getComment();
+
+    ::boost::filesystem::remove_all( path );
+
+    CPPUNIT_ASSERT_EQUAL(writerComment, readerComment);
+
+}
+
+} // namespace ut
+} // namespace fwZip
diff --git a/SrcLib/io/fwAtomsBoostIO/CMakeLists.txt b/SrcLib/io/fwAtomsBoostIO/CMakeLists.txt
index ae901d6..1c29206 100644
--- a/SrcLib/io/fwAtomsBoostIO/CMakeLists.txt
+++ b/SrcLib/io/fwAtomsBoostIO/CMakeLists.txt
@@ -1,5 +1,2 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-)
 
diff --git a/SrcLib/io/fwAtomsBoostIO/COPYING b/SrcLib/io/fwAtomsBoostIO/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/io/fwAtomsBoostIO/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/io/fwAtomsBoostIO/COPYING.LESSER b/SrcLib/io/fwAtomsBoostIO/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/io/fwAtomsBoostIO/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/io/fwAtomsBoostIO/Properties.cmake b/SrcLib/io/fwAtomsBoostIO/Properties.cmake
index 99979a2..5a6aed6 100644
--- a/SrcLib/io/fwAtomsBoostIO/Properties.cmake
+++ b/SrcLib/io/fwAtomsBoostIO/Properties.cmake
@@ -2,6 +2,12 @@
 set( NAME fwAtomsBoostIO )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwAtoms fwCore fwMemory fwTools fwZip )
+set( DEPENDENCIES
+    fwAtoms
+    fwCore
+    fwMemory
+    fwTools
+    fwZip
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwAtomsBoostIO/bin/build.options b/SrcLib/io/fwAtomsBoostIO/bin/build.options
deleted file mode 100644
index b408db5..0000000
--- a/SrcLib/io/fwAtomsBoostIO/bin/build.options
+++ /dev/null
@@ -1,8 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-#USE = []
-LIB = [ 'fwAtoms_0-1',
-        'fwTools_0-1',
-        'fwZip_0-1',
-        'fwMemory_0-1',
-        ]
diff --git a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Reader.hpp b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Reader.hpp
index 592fb7c..ee9d20a 100644
--- a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Reader.hpp
+++ b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Reader.hpp
@@ -1,25 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #ifndef __FWATOMSBOOSTIO_READER_HPP__
 #define __FWATOMSBOOSTIO_READER_HPP__
 
-#include <fwCore/macros.hpp>
 #include <boost/filesystem/path.hpp>
 
+#include <fwCore/macros.hpp>
+
 #include "fwAtomsBoostIO/types.hpp"
 #include "fwAtomsBoostIO/config.hpp"
 
 namespace fwAtoms
 {
-    class Base;
+class Base;
 }
 namespace fwZip
 {
-    class IReadArchive;
+class IReadArchive;
 }
 
 namespace fwAtomsBoostIO
@@ -30,7 +31,7 @@ class FWATOMSBOOSTIO_CLASS_API Reader
 
 public:
 
-    FWATOMSBOOSTIO_API SPTR(::fwAtoms::Base) read( SPTR(::fwZip::IReadArchive) archive,
+    FWATOMSBOOSTIO_API SPTR(::fwAtoms::Base) read( const SPTR(::fwZip::IReadArchive)& archive,
                                                    const ::boost::filesystem::path& rootFilename = "root.json",
                                                    FormatType format = JSON ) const;
 
diff --git a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Writer.hpp b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Writer.hpp
index e7be276..17f0163 100644
--- a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Writer.hpp
+++ b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/Writer.hpp
@@ -1,27 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #ifndef __FWATOMSBOOSTIO_WRITER_HPP__
 #define __FWATOMSBOOSTIO_WRITER_HPP__
 
 #include <sstream>
 
-#include <fwCore/macros.hpp>
 #include <boost/filesystem/path.hpp>
 
+#include <fwCore/macros.hpp>
+
 #include "fwAtomsBoostIO/types.hpp"
 #include "fwAtomsBoostIO/config.hpp"
 
 namespace fwAtoms
 {
-    class Base;
+class Base;
 }
 namespace fwZip
 {
-    class IWriteArchive;
+class IWriteArchive;
 }
 
 namespace fwAtomsBoostIO
@@ -41,9 +42,11 @@ public:
     /// Defines key to retrieve writer version from file.
     FWATOMSBOOSTIO_API static const std::string s_WRITER_VERSION_KEY;
 
-    Writer( SPTR(::fwAtoms::Base) atom ) : m_atom(atom) {}
+    Writer(const SPTR(::fwAtoms::Base)& atom) : m_atom(atom)
+    {
+    }
 
-    FWATOMSBOOSTIO_API void write( SPTR(::fwZip::IWriteArchive) archive,
+    FWATOMSBOOSTIO_API void write( const SPTR(::fwZip::IWriteArchive)& archive,
                                    const ::boost::filesystem::path& rootFilename = "root.json",
                                    FormatType format = JSON ) const;
 
diff --git a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/config.hpp b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/config.hpp
deleted file mode 100644
index 13bd69c..0000000
--- a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWATOMSBOOSTIO_CONFIG_HPP_
-#define _FWATOMSBOOSTIO_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWATOMSBOOSTIO_EXPORTS
-            #define FWATOMSBOOSTIO_API __declspec(dllexport)
-        #else
-            #define FWATOMSBOOSTIO_API __declspec(dllimport)
-        #endif
-
-        #define FWATOMSBOOSTIO_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWATOMSBOOSTIO_EXPORTS
-            #define FWATOMSBOOSTIO_API __attribute__ ((visibility("default")))
-            #define FWATOMSBOOSTIO_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWATOMSBOOSTIO_API __attribute__ ((visibility("hidden")))
-            #define FWATOMSBOOSTIO_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWATOMSBOOSTIO_API
-        #define FWATOMSBOOSTIO_CLASS_API
-
-    #endif
-
-#endif //FWATOMSBOOSTIO_API
-
diff --git a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/namespace.hpp b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/namespace.hpp
new file mode 100644
index 0000000..90ea747
--- /dev/null
+++ b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWATOMSBOOSTIO_NAMESPACE_HPP__
+#define __FWATOMSBOOSTIO_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace fwAtomsBoostIO contains atom reader and writer.
+ * @namespace fwAtomsBoostIO
+ **/
+
+namespace fwAtomsBoostIO
+{
+
+} // namespace fwAtomsBoostIO
+
+#endif // __FWATOMSBOOSTIO_NAMESPACE_HPP__
diff --git a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/types.hpp b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/types.hpp
index 20b6720..44d8532 100644
--- a/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/types.hpp
+++ b/SrcLib/io/fwAtomsBoostIO/include/fwAtomsBoostIO/types.hpp
@@ -1,8 +1,8 @@
 /* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #ifndef __FWATOMSBOOSTIO_TYPES_HPP__
 #define __FWATOMSBOOSTIO_TYPES_HPP__
diff --git a/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Reader.cpp b/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Reader.cpp
index 7e6f41a..4367f32 100644
--- a/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Reader.cpp
+++ b/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Reader.cpp
@@ -1,18 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
-#include <sstream>
-
-#include <boost/filesystem/operations.hpp>
-#include <boost/foreach.hpp>
-#include <boost/property_tree/json_parser.hpp>
-#include <boost/property_tree/xml_parser.hpp>
-
-
-#include <fwTools/UUID.hpp>
+#include "fwAtomsBoostIO/Writer.hpp"
+#include "fwAtomsBoostIO/Reader.hpp"
 
 #include <fwAtoms/Blob.hpp>
 #include <fwAtoms/Boolean.hpp>
@@ -23,282 +16,317 @@
 #include <fwAtoms/Sequence.hpp>
 #include <fwAtoms/String.hpp>
 
+#include <fwTools/UUID.hpp>
+
 #include <fwZip/IReadArchive.hpp>
 
-#include "fwAtomsBoostIO/Writer.hpp"
-#include "fwAtomsBoostIO/Reader.hpp"
+#include <boost/filesystem/operations.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/xml_parser.hpp>
+
+#include <sstream>
 
 namespace fwAtomsBoostIO
 {
 
+size_t countSubAtoms(const ::boost::property_tree::ptree &pt)
+{
+    size_t nb = 0;
+    for(const ::boost::property_tree::ptree::value_type &v : pt)
+    {
+        if(
+            (v.first == "numeric")  ||
+            (v.first == "string")   ||
+            (v.first == "boolean")  ||
+            (v.first == "sequence") ||
+            (v.first == "map")      ||
+            (v.first == "object")   ||
+            (v.first == "blob")
+            )
+        {
+            nb++;
+        }
+        nb += countSubAtoms(v.second);
+    }
+    return nb;
+}
+
 //-----------------------------------------------------------------------------
+
 struct PTreeVisitor
 {
 
-typedef std::map< std::string, ::fwAtoms::Base::sptr > AtomCacheType;
-
-AtomCacheType m_cache;
-const ::boost::property_tree::ptree &m_root;
-::fwZip::IReadArchive::sptr m_archive;
+    typedef std::map< std::string, ::fwAtoms::Base::sptr > AtomCacheType;
 
-PTreeVisitor(const ::boost::property_tree::ptree &pt, ::fwZip::IReadArchive::sptr archive) :
-    m_root(pt), m_archive(archive)
-{}
+    AtomCacheType m_cache;
+    const ::boost::property_tree::ptree &m_root;
+    ::fwZip::IReadArchive::sptr m_archive;
 
 //-----------------------------------------------------------------------------
 
-AtomCacheType::mapped_type hitCache(const AtomCacheType::key_type &path) const
-{
-    AtomCacheType::const_iterator iter = m_cache.find(path);
-    if(iter != m_cache.end())
+    PTreeVisitor(const ::boost::property_tree::ptree &pt, const ::fwZip::IReadArchive::sptr& archive) :
+        m_root(pt),
+        m_archive(archive)
     {
-        OSLM_TRACE(" cache hit : '" << path  << "'" );
-        return iter->second;
     }
-    OSLM_TRACE(" cache miss : '" << path  << "'" );
-    return AtomCacheType::mapped_type();
-}
 
 //-----------------------------------------------------------------------------
 
-void cache(const std::string &ptpath, const AtomCacheType::mapped_type &atom)
-{
-    OSLM_TRACE(" cache : '" << ptpath << "' : " << atom->getClassname() );
-    m_cache.insert( AtomCacheType::value_type( ptpath, atom ) );
-}
+    AtomCacheType::mapped_type hitCache(const AtomCacheType::key_type &path) const
+    {
+        AtomCacheType::const_iterator iter = m_cache.find(path);
+        if(iter != m_cache.end())
+        {
+            return iter->second;
+        }
+        return AtomCacheType::mapped_type();
+    }
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Boolean::sptr getBoolean(const ::boost::property_tree::ptree &pt, const std::string & ptpath)
-{
-    ::fwAtoms::Boolean::sptr atom = ::fwAtoms::Boolean::New(pt.get<std::string>("boolean.value"));
-    this->cache(ptpath, atom);
-    return atom;
-}
+    void cache(const std::string &ptpath, const AtomCacheType::mapped_type &atom)
+    {
+        m_cache.insert( AtomCacheType::value_type( ptpath, atom ) );
+    }
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Numeric::sptr getNumeric(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
-{
-    ::fwAtoms::Numeric::sptr atom = ::fwAtoms::Numeric::New(pt.get<std::string>("numeric.value"));
-    this->cache(ptpath, atom);
-    return atom;
-}
+    ::fwAtoms::Boolean::sptr getBoolean(const ::boost::property_tree::ptree &pt, const std::string & ptpath)
+    {
+        ::fwAtoms::Boolean::sptr atom = ::fwAtoms::Boolean::New(pt.get<std::string>("boolean.value"));
+        this->cache(ptpath, atom);
+        return atom;
+    }
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::String::sptr getString(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
-{
-    ::fwAtoms::String::sptr atom = ::fwAtoms::String::New(pt.get<std::string>("string.value"));
-    this->cache(ptpath, atom);
-    return atom;
-}
+    ::fwAtoms::Numeric::sptr getNumeric(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
+    {
+        ::fwAtoms::Numeric::sptr atom = ::fwAtoms::Numeric::New(pt.get<std::string>("numeric.value"));
+        this->cache(ptpath, atom);
+        return atom;
+    }
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Sequence::sptr getSequence(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
-{
-    ::fwAtoms::Sequence::sptr atom = ::fwAtoms::Sequence::New();
-    this->cache(ptpath, atom);
-
-    BOOST_FOREACH( const ::boost::property_tree::ptree::value_type &val, pt.get_child("sequence") )
+    ::fwAtoms::String::sptr getString(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
     {
-        std::string subPath = ptpath + (ptpath.empty()?"":".") + "sequence." + val.first;
-        ::fwAtoms::Base::sptr subAtom = this->visit(val.second, subPath );
-        atom->push_back( subAtom );
+        ::fwAtoms::String::sptr atom = ::fwAtoms::String::New(pt.get<std::string>("string.value"));
+        this->cache(ptpath, atom);
+        return atom;
     }
-    return atom;
-}
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Map::sptr getMap(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
-{
-    ::fwAtoms::Map::sptr atom = ::fwAtoms::Map::New();
-    this->cache(ptpath, atom);
+    ::fwAtoms::Sequence::sptr getSequence(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
+    {
+        ::fwAtoms::Sequence::sptr atom = ::fwAtoms::Sequence::New();
+        this->cache(ptpath, atom);
+
+        for( const ::boost::property_tree::ptree::value_type &val :  pt.get_child("sequence") )
+        {
+            std::string subPath           = ptpath + (ptpath.empty() ? "" : ".") + "sequence." + val.first;
+            ::fwAtoms::Base::sptr subAtom = this->visit(val.second, subPath );
+            atom->push_back( subAtom );
+        }
+        return atom;
+    }
+
+//-----------------------------------------------------------------------------
 
-    BOOST_FOREACH( const ::boost::property_tree::ptree::value_type &val, pt.get_child("map") )
+    ::fwAtoms::Map::sptr getMap(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
     {
-        std::string subPath = ptpath + (ptpath.empty()?"":".") + "map." + val.first + ".value";
+        ::fwAtoms::Map::sptr atom = ::fwAtoms::Map::New();
+        this->cache(ptpath, atom);
+
+        for( const ::boost::property_tree::ptree::value_type &val :  pt.get_child("map") )
+        {
+            std::string subPath = ptpath + (ptpath.empty() ? "" : ".") + "map." + val.first + ".value";
 
-        ::boost::property_tree::ptree mapChild = val.second;
-        ::boost::property_tree::ptree value    = mapChild.get_child("value");
+            ::boost::property_tree::ptree mapChild = val.second;
+            ::boost::property_tree::ptree value    = mapChild.get_child("value");
 
-        ::fwAtoms::Base::sptr subAtom = this->visit( value, subPath );
+            ::fwAtoms::Base::sptr subAtom = this->visit( value, subPath );
 
-        std::string key = mapChild.get<std::string>("key");
-        atom->insert( key, subAtom );
+            std::string key = mapChild.get<std::string>("key");
+            atom->insert( key, subAtom );
+        }
+        return atom;
     }
-    return atom;
-}
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Object::sptr getObject(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
-{
-    using ::boost::property_tree::ptree;
-    ::fwAtoms::Object::sptr atom = ::fwAtoms::Object::New();
-    this->cache(ptpath, atom);
+    ::fwAtoms::Object::sptr getObject(const ::boost::property_tree::ptree &pt, const std::string & ptpath )
+    {
+        using ::boost::property_tree::ptree;
+        ::fwAtoms::Object::sptr atom = ::fwAtoms::Object::New();
+        this->cache(ptpath, atom);
 
-    const ptree& metaInfosTree  = pt.get_child("object.meta_infos");
-    const ptree& attributesTree = pt.get_child("object.attributes");
+        const ptree& metaInfosTree  = pt.get_child("object.meta_infos");
+        const ptree& attributesTree = pt.get_child("object.attributes");
 
-    ::fwAtoms::Object::MetaInfosType metaInfos;
-    BOOST_FOREACH( const ptree::value_type &val, metaInfosTree )
-    {
-        ::boost::property_tree::ptree item = val.second;
+        ::fwAtoms::Object::MetaInfosType metaInfos;
+        for( const ptree::value_type &val :  metaInfosTree )
+        {
+            ::boost::property_tree::ptree item = val.second;
 
-        ::fwAtoms::Object::MetaInfosType::value_type value(
+            ::fwAtoms::Object::MetaInfosType::value_type value(
                 item.get<std::string>("key"), item.get<std::string>("value") );
-        metaInfos.insert( value );
-    }
-    atom->setMetaInfos(metaInfos);
+            metaInfos.insert( value );
+        }
+        atom->setMetaInfos(metaInfos);
 
 
-    ::fwAtoms::Object::AttributesType attributes;
-    BOOST_FOREACH( const ptree::value_type &val, attributesTree )
-    {
-        std::string subPath = ptpath + (ptpath.empty()?"":".")+ "object.attributes." + val.first;
-        ::fwAtoms::Base::sptr subAtom = this->visit(val.second, subPath );
-        ::fwAtoms::Object::AttributesType::value_type value(val.first, subAtom);
-        attributes.insert( value );
-    }
-    atom->setAttributes(attributes);
+        ::fwAtoms::Object::AttributesType attributes;
+        for( const ptree::value_type &val :  attributesTree )
+        {
+            std::string subPath           = ptpath + (ptpath.empty() ? "" : ".")+ "object.attributes." + val.first;
+            ::fwAtoms::Base::sptr subAtom = this->visit(val.second, subPath );
+            ::fwAtoms::Object::AttributesType::value_type value(val.first, subAtom);
+            attributes.insert( value );
+        }
+        atom->setAttributes(attributes);
 
-    return atom;
-}
+        // Managing object with no id
+        if(atom->getMetaInfo("ID_METAINFO").empty())
+        {
+            atom->setMetaInfo("ID_METAINFO", ::fwTools::UUID::generateUUID());
+        }
+
+        return atom;
+    }
 
 //-----------------------------------------------------------------------------
 
 
-class AtomsBoostIOReadStream : public ::fwMemory::stream::in::IFactory
-{
-public:
-    AtomsBoostIOReadStream(const ::fwZip::IReadArchive::sptr& archive, const boost::filesystem::path &path):
-        m_archive(archive), m_path(path)
-    {};
+    class AtomsBoostIOReadStream : public ::fwMemory::stream::in::IFactory
+    {
+    public:
+        AtomsBoostIOReadStream(const ::fwZip::IReadArchive::sptr& archive, const boost::filesystem::path &path) :
+            m_archive(archive), m_path(path)
+        {
+        }
 
-protected:
+    protected:
 
-    SPTR(std::istream) get()
-    {
-        return m_archive->getFile(m_path);
-    }
+        SPTR(std::istream) get()
+        {
+            return m_archive->getFile(m_path);
+        }
 
-    ::fwZip::IReadArchive::sptr m_archive;
-    boost::filesystem::path m_path;
-};
+        ::fwZip::IReadArchive::sptr m_archive;
+        ::boost::filesystem::path m_path;
+    };
 
 
 
 
-::fwAtoms::Blob::sptr getBlob(const ::boost::property_tree::ptree &pt, const std::string & ptpath)
-{
-    ::fwAtoms::Blob::sptr atom = ::fwAtoms::Blob::New();
-    ::fwMemory::BufferObject::sptr buffObj = ::fwMemory::BufferObject::New();
-    atom->setBufferObject(buffObj);
+    ::fwAtoms::Blob::sptr getBlob(const ::boost::property_tree::ptree &pt, const std::string & ptpath)
+    {
+        ::fwAtoms::Blob::sptr atom             = ::fwAtoms::Blob::New();
+        ::fwMemory::BufferObject::sptr buffObj = ::fwMemory::BufferObject::New();
+        atom->setBufferObject(buffObj);
 
-    this->cache(ptpath, atom);
+        this->cache(ptpath, atom);
 
-    const std::string bufType = pt.get<std::string>("blob.buffer_type");
+        const std::string bufType = pt.get<std::string>("blob.buffer_type");
 
-    if(bufType == "raw")
-    {
-        size_t buffSize = pt.get<size_t>("blob.buffer_size");
-        if(buffSize > 0)
+        if(bufType == "raw")
         {
-            const ::boost::filesystem::path bufFile = pt.get<std::string>("blob.buffer");
-            ::boost::filesystem::path sourceFile = "";
-            ::fwMemory::FileFormatType format = ::fwMemory::OTHER;
-
-            if( ::boost::filesystem::is_directory(m_archive->getArchivePath()))
+            size_t buffSize = pt.get<size_t>("blob.buffer_size");
+            if(buffSize > 0)
             {
-                sourceFile = m_archive->getArchivePath() / bufFile;
-                format = ::fwMemory::RAW;
+                const ::boost::filesystem::path bufFile = pt.get<std::string>("blob.buffer");
+                ::boost::filesystem::path sourceFile    = "";
+                ::fwMemory::FileFormatType format       = ::fwMemory::OTHER;
+
+                if( ::boost::filesystem::is_directory(m_archive->getArchivePath()))
+                {
+                    sourceFile = m_archive->getArchivePath() / bufFile;
+                    format     = ::fwMemory::RAW;
+                }
+
+                buffObj->setIStreamFactory( std::make_shared< AtomsBoostIOReadStream >(m_archive->clone(), bufFile),
+                                            buffSize, sourceFile, format);
             }
-
-            buffObj->setIStreamFactory( ::boost::make_shared< AtomsBoostIOReadStream >(m_archive->clone(), bufFile),
-                                       buffSize, sourceFile, format);
         }
-    }
-    else
-    {
-        FW_RAISE("Buffer type '" << bufType << "' unknown.");
+        else
+        {
+            FW_RAISE("Buffer type '" << bufType << "' unknown.");
+        }
+        return atom;
     }
 
-    return atom;
-}
-
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Base::sptr visit(const ::boost::property_tree::ptree &pt, std::string ptpath = "")
-{
-    if(pt.empty())
+    ::fwAtoms::Base::sptr visit(const ::boost::property_tree::ptree &pt, std::string ptpath = "")
     {
-        return ::fwAtoms::Base::sptr();
-    }
+        if(pt.empty())
+        {
+            return ::fwAtoms::Base::sptr();
+        }
 
-    ::fwAtoms::Base::sptr atom = this->hitCache(ptpath);
+        ::fwAtoms::Base::sptr atom = this->hitCache(ptpath);
 
-    if(atom)
-    {
-        return atom;
-    }
+        if(atom)
+        {
+            return atom;
+        }
 
-    if(pt.count("numeric") == 1 )
-    {
-        atom = this->getNumeric( pt, ptpath );
-    }
-    else if(pt.count("string") == 1)
-    {
-        atom = this->getString( pt, ptpath );
-    }
-    else if(pt.count("boolean") == 1)
-    {
-        atom = this->getBoolean( pt, ptpath );
-    }
-    else if(pt.count("sequence") == 1)
-    {
-        atom = this->getSequence( pt, ptpath );
-    }
-    else if(pt.count("map") == 1)
-    {
-        atom = this->getMap( pt, ptpath );
-    }
-    else if(pt.count("object") == 1)
-    {
-        atom = this->getObject( pt, ptpath );
-    }
-    else if(pt.count("blob") == 1)
-    {
-        atom = this->getBlob( pt, ptpath );
-    }
-    else if(pt.count("ref") == 1)
-    {
-        std::string ref = pt.get<std::string>("ref");
-        const ::boost::property_tree::ptree &refPt = m_root.get_child(ref);
-        atom = this->visit( refPt, ref );
-    }
-    else
-    {
-        SLM_ASSERT("You shall not pass", 0);
-    }
+        if(pt.count("numeric") == 1 )
+        {
+            atom = this->getNumeric( pt, ptpath );
+        }
+        else if(pt.count("string") == 1)
+        {
+            atom = this->getString( pt, ptpath );
+        }
+        else if(pt.count("boolean") == 1)
+        {
+            atom = this->getBoolean( pt, ptpath );
+        }
+        else if(pt.count("sequence") == 1)
+        {
+            atom = this->getSequence( pt, ptpath );
+        }
+        else if(pt.count("map") == 1)
+        {
+            atom = this->getMap( pt, ptpath );
+        }
+        else if(pt.count("object") == 1)
+        {
+            atom = this->getObject( pt, ptpath );
+        }
+        else if(pt.count("blob") == 1)
+        {
+            atom = this->getBlob( pt, ptpath );
+        }
+        else if(pt.count("ref") == 1)
+        {
+            std::string ref                            = pt.get<std::string>("ref");
+            const ::boost::property_tree::ptree &refPt = m_root.get_child(ref);
+            atom = this->visit( refPt, ref );
+        }
+        else
+        {
+            FW_RAISE("Unknown element found in archive.");
+        }
 
-    return atom;
-}
+        return atom;
+    }
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Base::sptr visit()
-{
-    return this->visit(m_root);
-}
+    ::fwAtoms::Base::sptr visit()
+    {
+        return this->visit(m_root);
+    }
 
 };
 
 //-----------------------------------------------------------------------------
 
-::fwAtoms::Base::sptr Reader::read( ::fwZip::IReadArchive::sptr archive,
+::fwAtoms::Base::sptr Reader::read( const ::fwZip::IReadArchive::sptr& archive,
                                     const ::boost::filesystem::path& rootFilename,
                                     FormatType format ) const
 {
@@ -316,35 +344,37 @@ protected:
     }
     else
     {
-        SLM_ASSERT("You shall not pass", 0);
+        FW_RAISE("This kind of extension is not supported");
     }
 
     typedef ::boost::property_tree::ptree::const_assoc_iterator PtreeItType;
     PtreeItType hasVersionsIt = root.find("versions");
     FW_RAISE_IF("Failed to read file '" << rootFilename.string() << "':\nno versions found in specified file.",
-            hasVersionsIt == root.not_found());
+                hasVersionsIt == root.not_found());
 
     ::boost::property_tree::ptree versions = root.get_child("versions");
 
     PtreeItType hasAtomsVersionsIt = versions.find(Writer::s_ATOMS_VERSION_KEY);
     FW_RAISE_IF("Failed to read file '" << rootFilename.string() << "':\nno atoms version found in specified file.",
-            hasAtomsVersionsIt == versions.not_found());
+                hasAtomsVersionsIt == versions.not_found());
 
     PtreeItType hasWriterVersionsIt = versions.find(Writer::s_WRITER_VERSION_KEY);
     FW_RAISE_IF("Failed to read file '" << rootFilename.string() << "':\nno writer version found in specified file",
-            hasWriterVersionsIt == versions.not_found());
+                hasWriterVersionsIt == versions.not_found());
 
-    const std::string& atomsVersion = versions.get< std::string >(Writer::s_ATOMS_VERSION_KEY);
+    const std::string& atomsVersion  = versions.get< std::string >(Writer::s_ATOMS_VERSION_KEY);
     const std::string& writerVersion = versions.get< std::string >(Writer::s_WRITER_VERSION_KEY);
 
-    FW_RAISE_IF("Failed to read file '" << rootFilename.string() << "':\n"
-            << "Detected file version is '" << writerVersion << "'"
-            << " whereas current version is '" << Writer::s_VERSION << "'", Writer::s_VERSION != writerVersion);
+    FW_RAISE_IF(
+        "Failed to read file '" << rootFilename.string() << "':\n"
+                                << "Detected file version is '" << writerVersion << "'"
+                                << " whereas current version is '" << Writer::s_VERSION << "'",
+        Writer::s_VERSION != writerVersion);
 
     FW_RAISE_IF("Failed to read file '" << rootFilename.string() << "':\n"
-            << "Detected atoms version is '" << atomsVersion << "'"
-            << " whereas current version is '" << ::fwAtoms::Base::s_VERSION << "'",
-            ::fwAtoms::Base::s_VERSION != atomsVersion);
+                                        << "Detected atoms version is '" << atomsVersion << "'"
+                                        << " whereas current version is '" << ::fwAtoms::Base::s_VERSION << "'",
+                ::fwAtoms::Base::s_VERSION != atomsVersion);
 
     PTreeVisitor visitor(root, archive);
     atom = visitor.visit();
diff --git a/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Writer.cpp b/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Writer.cpp
index 6483aee..d17cfb1 100644
--- a/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Writer.cpp
+++ b/SrcLib/io/fwAtomsBoostIO/src/fwAtomsBoostIO/Writer.cpp
@@ -1,18 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2014.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-#include <boost/property_tree/json_parser.hpp>
-#include <boost/property_tree/xml_parser.hpp>
-#include <boost/lexical_cast.hpp>
-
-#include <fwTools/UUID.hpp>
-#include <fwMemory/BufferManager.hpp>
+#include "fwAtomsBoostIO/Writer.hpp"
 
 #include <fwAtoms/Base.hpp>
 #include <fwAtoms/Blob.hpp>
@@ -22,20 +14,24 @@
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Sequence.hpp>
 #include <fwAtoms/String.hpp>
+#include <fwMemory/BufferManager.hpp>
 
 #include <fwMemory/BufferManager.hpp>
+#include <fwTools/UUID.hpp>
 
 #include <fwZip/IWriteArchive.hpp>
 
-#include "fwAtomsBoostIO/Writer.hpp"
-
-
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/xml_parser.hpp>
 
 namespace fwAtomsBoostIO
 {
 
-const std::string Writer::s_VERSION = "1";
-const std::string Writer::s_ATOMS_VERSION_KEY = "atoms_version";
+const std::string Writer::s_VERSION            = "1";
+const std::string Writer::s_ATOMS_VERSION_KEY  = "atoms_version";
 const std::string Writer::s_WRITER_VERSION_KEY = "writer_version";
 
 //-----------------------------------------------------------------------------
@@ -43,251 +39,252 @@ const std::string Writer::s_WRITER_VERSION_KEY = "writer_version";
 struct AtomVisitor
 {
 
-typedef std::map< ::fwAtoms::Base::sptr, ::boost::property_tree::ptree > PropTreeCacheType;
-
-PropTreeCacheType m_cache;
-::fwZip::IWriteArchive::sptr m_archive;
-const std::string m_dirPrefix;
+    typedef std::map< ::fwAtoms::Base::sptr, ::boost::property_tree::ptree > PropTreeCacheType;
 
+    PropTreeCacheType m_cache;
+    ::fwZip::IWriteArchive::sptr m_archive;
+    const std::string m_dirPrefix;
 
-AtomVisitor( ::fwZip::IWriteArchive::sptr archive, const std::string &dirPrefix ) :
-    m_archive(archive), m_dirPrefix(dirPrefix)
-{}
+    AtomVisitor(const ::fwZip::IWriteArchive::sptr& archive, const std::string &dirPrefix) :
+        m_archive(archive),
+        m_dirPrefix(dirPrefix)
+    {
+    }
 
 //-----------------------------------------------------------------------------
 
-PropTreeCacheType::mapped_type hitCache(const PropTreeCacheType::key_type &atom) const
-{
-    PropTreeCacheType::const_iterator iter = m_cache.find(atom);
-    if(iter != m_cache.end())
+    PropTreeCacheType::mapped_type hitCache(const PropTreeCacheType::key_type &atom) const
     {
-        return iter->second;
+        PropTreeCacheType::const_iterator iter = m_cache.find(atom);
+        if(iter != m_cache.end())
+        {
+            return iter->second;
+        }
+        return PropTreeCacheType::mapped_type();
     }
-    return PropTreeCacheType::mapped_type();
-}
 
 //-----------------------------------------------------------------------------
 
-void cache(const PropTreeCacheType::key_type &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree ref;
-    ref.put("ref", ptpath );
-    m_cache.insert( PropTreeCacheType::value_type( atom, ref ) );
-}
+    void cache(const PropTreeCacheType::key_type &atom, const std::string &ptpath)
+    {
+        ::boost::property_tree::ptree ref;
+        ref.put("ref", ptpath );
+        m_cache.insert( PropTreeCacheType::value_type( atom, ref ) );
+    }
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Boolean::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    this->cache(atom, ptpath);
-    pt.put("boolean.value", atom->getValue()?"true":"false");
-    return pt;
-}
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Boolean::sptr &atom, const std::string &ptpath)
+    {
+        ::boost::property_tree::ptree pt;
+        this->cache(atom, ptpath);
+        pt.put("boolean.value", atom->getValue() ? "true" : "false");
+        return pt;
+    }
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Numeric::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    this->cache(atom, ptpath);
-    pt.put("numeric.value", atom->getString());
-    return pt;
-}
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Numeric::sptr &atom, const std::string &ptpath)
+    {
+        ::boost::property_tree::ptree pt;
+        this->cache(atom, ptpath);
+        pt.put("numeric.value", atom->getString());
+        return pt;
+    }
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::String::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    this->cache(atom, ptpath);
-    pt.put("string.value", atom->getString());
-    return pt;
-}
+    ::boost::property_tree::ptree visit(const ::fwAtoms::String::sptr &atom, const std::string &ptpath)
+    {
+        ::boost::property_tree::ptree pt;
+        this->cache(atom, ptpath);
+        pt.put("string.value", atom->getString());
+        return pt;
+    }
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Map::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    ::boost::property_tree::ptree map;
-    this->cache(atom, ptpath);
-    std::string path = ptpath + (ptpath.empty()?"":".") + "map";
-    unsigned long long count = 0;
-    BOOST_FOREACH(const ::fwAtoms::Map::MapType::value_type& elt, atom->getValue())
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Map::sptr &atom, const std::string &ptpath)
     {
-        const std::string nodeName = "item_" + ::boost::lexical_cast< std::string >(count++);
-        ::boost::property_tree::ptree mapChild;
-        mapChild.put("key", elt.first);
-        mapChild.add_child("value", this->visit(elt.second, path + "." + nodeName + ".value"));
+        ::boost::property_tree::ptree pt;
+        ::boost::property_tree::ptree map;
+        this->cache(atom, ptpath);
+        std::string path         = ptpath + (ptpath.empty() ? "" : ".") + "map";
+        unsigned long long count = 0;
+        for(const ::fwAtoms::Map::MapType::value_type& elt : atom->getValue())
+        {
+            const std::string nodeName = "item_" + ::boost::lexical_cast< std::string >(count++);
+            ::boost::property_tree::ptree mapChild;
+            mapChild.put("key", elt.first);
+            mapChild.add_child("value", this->visit(elt.second, path + "." + nodeName + ".value"));
 
-        map.add_child(nodeName, mapChild);
+            map.add_child(nodeName, mapChild);
+        }
+        pt.add_child("map", map);
+        return pt;
     }
-    pt.add_child("map", map);
-    return pt;
-}
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Sequence::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    ::boost::property_tree::ptree seq;
-    this->cache(atom, ptpath);
-    std::string path = ptpath + (ptpath.empty()?"":".") + "sequence";
-
-    unsigned long long count = 0;
-    BOOST_FOREACH( const ::fwAtoms::Sequence::SequenceType::value_type& elt, atom->getValue())
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Sequence::sptr &atom, const std::string &ptpath)
     {
-        const std::string nodeName = ::boost::lexical_cast< std::string >(count++);
-        seq.add_child(nodeName, this->visit(elt, path + "." + nodeName));
+        ::boost::property_tree::ptree pt;
+        ::boost::property_tree::ptree seq;
+        this->cache(atom, ptpath);
+        std::string path = ptpath + (ptpath.empty() ? "" : ".") + "sequence";
+
+        unsigned long long count = 0;
+        for( const ::fwAtoms::Sequence::SequenceType::value_type& elt : atom->getValue())
+        {
+            const std::string nodeName = ::boost::lexical_cast< std::string >(count++);
+            seq.add_child(nodeName, this->visit(elt, path + "." + nodeName));
+        }
+        pt.add_child("sequence", seq);
+        return pt;
     }
-    pt.add_child("sequence", seq);
-    return pt;
-}
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Object::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    ::boost::property_tree::ptree object;
-    this->cache(atom, ptpath);
-    std::string path = ptpath + (ptpath.empty()?"":".") + "object";
-
-    const ::fwAtoms::Object::MetaInfosType& metaInfos = atom->getMetaInfos();
-    ::boost::property_tree::ptree metaInfosPt;
-    unsigned long long count = 0;
-    BOOST_FOREACH(const ::fwAtoms::Object::MetaInfosType::value_type& info, metaInfos)
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Object::sptr &atom, const std::string &ptpath)
     {
-        const std::string nodeName = "item_" + ::boost::lexical_cast< std::string >(count++);
-        ::boost::property_tree::ptree item;
-        item.put("key", info.first);
-        item.put("value", info.second);
-        metaInfosPt.push_back(::boost::property_tree::ptree::value_type(nodeName, item));
-    }
-    object.add_child("meta_infos", metaInfosPt);
+        ::boost::property_tree::ptree pt;
+        ::boost::property_tree::ptree object;
+        this->cache(atom, ptpath);
+        std::string path = ptpath + (ptpath.empty() ? "" : ".") + "object";
+
+        const ::fwAtoms::Object::MetaInfosType& metaInfos = atom->getMetaInfos();
+        ::boost::property_tree::ptree metaInfosPt;
+        unsigned long long count = 0;
+        for(const ::fwAtoms::Object::MetaInfosType::value_type& info : metaInfos)
+        {
+            const std::string nodeName = "item_" + ::boost::lexical_cast< std::string >(count++);
+            ::boost::property_tree::ptree item;
+            item.put("key", info.first);
+            item.put("value", info.second);
+            metaInfosPt.push_back(::boost::property_tree::ptree::value_type(nodeName, item));
+        }
+        object.add_child("meta_infos", metaInfosPt);
 
-    const ::fwAtoms::Object::AttributesType& attributes = atom->getAttributes();
-    ::boost::property_tree::ptree attributesPt;
-    BOOST_FOREACH(const ::fwAtoms::Object::AttributesType::value_type attr, attributes)
-    {
-        ::boost::property_tree::ptree childAttributes = this->visit(attr.second, path + ".attributes." + attr.first);
-        attributesPt.add_child(attr.first, childAttributes);
-    }
-    object.add_child("attributes", attributesPt);
+        const ::fwAtoms::Object::AttributesType& attributes = atom->getAttributes();
+        ::boost::property_tree::ptree attributesPt;
+        for(const ::fwAtoms::Object::AttributesType::value_type& attr : attributes)
+        {
+            ::boost::property_tree::ptree childAttributes =
+                this->visit(attr.second, path + ".attributes." + attr.first);
+            attributesPt.add_child(attr.first, childAttributes);
+        }
+        object.add_child("attributes", attributesPt);
 
-    pt.add_child("object", object);
+        pt.add_child("object", object);
 
-    return pt;
-}
+        return pt;
+    }
 
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Blob::sptr &atom, const std::string &ptpath)
-{
-    ::boost::property_tree::ptree pt;
-    this->cache(atom, ptpath);
-    std::string path = ptpath + (ptpath.empty()?"":".") + "blob";
-
-    std::string bufType = "raw";
-    pt.put("blob.buffer_type", bufType);
-
-    ::fwMemory::BufferObject::sptr buffObj = atom->getBufferObject();
-    if (!buffObj || buffObj->getSize() == 0)
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Blob::sptr &atom, const std::string &ptpath)
     {
-        pt.put("blob.buffer_size", 0);
-    }
-    else
-    {
-        ::boost::filesystem::path bufFile = m_dirPrefix;
-        size_t buffSize = buffObj->getSize();
-
-        const ::fwMemory::BufferManager::StreamInfo streamInfo = buffObj->getStreamInfo();
-        const ::boost::filesystem::path dumpedFile = streamInfo.fsFile;
-        const ::fwMemory::FileFormatType& format = streamInfo.format;
+        ::boost::property_tree::ptree pt;
+        this->cache(atom, ptpath);
+        std::string path = ptpath + (ptpath.empty() ? "" : ".") + "blob";
 
-        bufFile /= ::fwTools::UUID::generateUUID() + ".raw";
+        std::string bufType = "raw";
+        pt.put("blob.buffer_type", bufType);
 
-        if ( !dumpedFile.empty() && (format & ::fwMemory::RAW) )
+        ::fwMemory::BufferObject::sptr buffObj = atom->getBufferObject();
+        if (!buffObj || buffObj->getSize() == 0)
         {
-            m_archive->putFile(dumpedFile, bufFile);
+            pt.put("blob.buffer_size", 0);
         }
         else
         {
-            SPTR(std::istream) is = streamInfo.stream;
-            SLM_ASSERT("no istream", is);
-
-            SPTR(std::ostream) os = m_archive->createFile(bufFile);
-            *os << is->rdbuf();
+            ::boost::filesystem::path bufFile = m_dirPrefix;
+            size_t buffSize                   = buffObj->getSize();
+
+            const ::fwMemory::BufferManager::StreamInfo streamInfo = buffObj->getStreamInfo();
+            const ::boost::filesystem::path dumpedFile             = streamInfo.fsFile;
+            const ::fwMemory::FileFormatType& format               = streamInfo.format;
+
+            bufFile /= ::fwTools::UUID::generateUUID() + ".raw";
+
+            if ( !dumpedFile.empty() && (format & ::fwMemory::RAW) )
+            {
+                m_archive->putFile(dumpedFile, bufFile);
+            }
+            else
+            {
+                SPTR(std::istream) is = streamInfo.stream;
+                SLM_ASSERT("no istream", is);
+
+                SPTR(std::ostream) os = m_archive->createFile(bufFile);
+                *os << is->rdbuf();
+            }
+
+            pt.put("blob.buffer_size", buffSize);
+            pt.put("blob.buffer", bufFile.generic_string());
         }
 
-        pt.put("blob.buffer_size", buffSize);
-        pt.put("blob.buffer", bufFile.generic_string());
+        return pt;
     }
 
-    return pt;
-}
-
 //-----------------------------------------------------------------------------
 
-::boost::property_tree::ptree visit(const ::fwAtoms::Base::sptr &atom, std::string ptpath = "")
-{
-    ::boost::property_tree::ptree pt;
-    ::boost::property_tree::ptree ref;
-
-    if (!atom)
+    ::boost::property_tree::ptree visit(const ::fwAtoms::Base::sptr &atom, std::string ptpath = "")
     {
-        return pt;
-    }
-
-    ref = this->hitCache(atom);
-    if( !ref.empty() )
-    {
-        return ref;
-    }
+        ::boost::property_tree::ptree pt;
+        ::boost::property_tree::ptree ref;
 
-    switch(atom->type())
-    {
-    case ::fwAtoms::Base::BOOLEAN :
-        pt = this->visit(::fwAtoms::Boolean::dynamicCast(atom), ptpath);
-        break;
-    case ::fwAtoms::Base::NUMERIC :
-        pt = this->visit(::fwAtoms::Numeric::dynamicCast(atom), ptpath);
-        break;
-    case ::fwAtoms::Base::STRING :
-        pt = this->visit(::fwAtoms::String::dynamicCast(atom), ptpath);
-        break;
-    case ::fwAtoms::Base::OBJECT :
-        pt = this->visit(::fwAtoms::Object::dynamicCast(atom), ptpath);
-        break;
-    case ::fwAtoms::Base::SEQUENCE :
-        pt = this->visit(::fwAtoms::Sequence::dynamicCast(atom), ptpath);
-        break;
-    case ::fwAtoms::Base::MAP :
-        pt = this->visit(::fwAtoms::Map::dynamicCast(atom), ptpath);
-        break;
-    case ::fwAtoms::Base::BLOB :
-        pt = this->visit(::fwAtoms::Blob::dynamicCast(atom), ptpath);
-        break;
-    default:
-        SLM_ASSERT("You shall not pass", 0);
-        break;
-    }
+        if (!atom)
+        {
+            return pt;
+        }
 
-    return pt;
-}
+        ref = this->hitCache(atom);
+        if( !ref.empty() )
+        {
+            return ref;
+        }
 
+        switch(atom->type())
+        {
+            case ::fwAtoms::Base::BOOLEAN:
+                pt = this->visit(::fwAtoms::Boolean::dynamicCast(atom), ptpath);
+                break;
+            case ::fwAtoms::Base::NUMERIC:
+                pt = this->visit(::fwAtoms::Numeric::dynamicCast(atom), ptpath);
+                break;
+            case ::fwAtoms::Base::STRING:
+                pt = this->visit(::fwAtoms::String::dynamicCast(atom), ptpath);
+                break;
+            case ::fwAtoms::Base::OBJECT:
+                pt = this->visit(::fwAtoms::Object::dynamicCast(atom), ptpath);
+                break;
+            case ::fwAtoms::Base::SEQUENCE:
+                pt = this->visit(::fwAtoms::Sequence::dynamicCast(atom), ptpath);
+                break;
+            case ::fwAtoms::Base::MAP:
+                pt = this->visit(::fwAtoms::Map::dynamicCast(atom), ptpath);
+                break;
+            case ::fwAtoms::Base::BLOB:
+                pt = this->visit(::fwAtoms::Blob::dynamicCast(atom), ptpath);
+                break;
+            default:
+                FW_RAISE("Atome type '"<<atom->type()<<"' is not supported");
+                break;
+        }
+        return pt;
+    }
 };
 
 //-----------------------------------------------------------------------------
 
-void Writer::write( ::fwZip::IWriteArchive::sptr archive,
+void Writer::write( const ::fwZip::IWriteArchive::sptr& archive,
                     const ::boost::filesystem::path& rootFilename,
                     FormatType format ) const
 {
     ::boost::property_tree::ptree root;
-    AtomVisitor visitor(archive, rootFilename.stem().string() + "-" + ((format==JSON)?"json":"xml") );
+    AtomVisitor visitor(archive, rootFilename.stem().string() + "-" + ((format==JSON) ? "json" : "xml"));
+
     root = visitor.visit(m_atom);
 
     ::boost::property_tree::ptree versions;
@@ -299,21 +296,19 @@ void Writer::write( ::fwZip::IWriteArchive::sptr archive,
     SPTR(std::ostream) os = archive->createFile(rootFilename);
     switch(format)
     {
-    case JSON:
-        ::boost::property_tree::json_parser::write_json(*os, root, false);
-        break;
-    case XML:
-    {
-        ::boost::property_tree::xml_writer_settings<char> settings(' ', 4);
-        ::boost::property_tree::xml_parser::write_xml(*os, root, settings);
-        break;
-    }
-    default:
-        SLM_ASSERT("You shall not pass", 0);
-        break;
+        case JSON:
+            ::boost::property_tree::json_parser::write_json(*os, root, false);
+            break;
+        case XML:
+        {
+            ::boost::property_tree::xml_writer_settings<std::string> settings(' ', 4);
+            ::boost::property_tree::xml_parser::write_xml(*os, root, settings);
+            break;
+        }
+        default:
+            FW_RAISE("Archive format '"<<format<<"' is not supported");
+            break;
     }
 }
 
-
-
 }
diff --git a/SrcLib/io/fwAtomsBoostIO/test/CMakeLists.txt b/SrcLib/io/fwAtomsBoostIO/test/CMakeLists.txt
index 47e309c..ea45f63 100644
--- a/SrcLib/io/fwAtomsBoostIO/test/CMakeLists.txt
+++ b/SrcLib/io/fwAtomsBoostIO/test/CMakeLists.txt
@@ -2,6 +2,6 @@
 fwLoadProperties()
 
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
diff --git a/SrcLib/io/fwAtomsBoostIO/test/Properties.cmake b/SrcLib/io/fwAtomsBoostIO/test/Properties.cmake
index bc66d67..dc0485c 100644
--- a/SrcLib/io/fwAtomsBoostIO/test/Properties.cmake
+++ b/SrcLib/io/fwAtomsBoostIO/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwAtomsBoostIOTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwAtomsBoostIO fwMemory )
+set( DEPENDENCIES fwCore fwTools fwAtomsBoostIO fwMemory fwAtoms fwZip)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwAtomsBoostIO/test/cppunit.options b/SrcLib/io/fwAtomsBoostIO/test/cppunit.options
deleted file mode 100644
index c1c94fb..0000000
--- a/SrcLib/io/fwAtomsBoostIO/test/cppunit.options
+++ /dev/null
@@ -1,13 +0,0 @@
-CLASSTEST=[
-    'BoostIOTest',
-]
-
-LIB = [
-    'fwTools_0-1',
-    'fwCore_0-1',
-    'fwAtoms_0-1',
-    'fwAtomsBoostIO_0-1',
-    'fwMemory_0-1'
-    ]
-CONSOLE = 'yes'
-
diff --git a/SrcLib/io/fwAtomsBoostIO/test/tu/include/BoostIOTest.hpp b/SrcLib/io/fwAtomsBoostIO/test/tu/include/BoostIOTest.hpp
index fba11ea..a5eff96 100644
--- a/SrcLib/io/fwAtomsBoostIO/test/tu/include/BoostIOTest.hpp
+++ b/SrcLib/io/fwAtomsBoostIO/test/tu/include/BoostIOTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWATOMSBOOSTIO_UT_WRITERTEST_HPP__
-#define __FWATOMSBOOSTIO_UT_WRITERTEST_HPP__
+#ifndef __FWATOMSBOOSTIO_UT_BOOSTIOTEST_HPP__
+#define __FWATOMSBOOSTIO_UT_BOOSTIOTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -22,10 +22,10 @@ namespace ut
 
 class BoostIOTest :  public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( BoostIOTest );
-    CPPUNIT_TEST( readWriteZipTest );
-    CPPUNIT_TEST( readWriteDirTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( BoostIOTest );
+CPPUNIT_TEST( readWriteZipTest );
+CPPUNIT_TEST( readWriteDirTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -38,7 +38,7 @@ public:
 protected:
     void readProcess(::fwZip::IReadArchive::sptr readArchive,
                      const ::boost::filesystem::path& rootFilename,
-                    const ::fwAtomsBoostIO::FormatType& formatType = ::fwAtomsBoostIO::JSON);
+                     const ::fwAtomsBoostIO::FormatType& formatType = ::fwAtomsBoostIO::JSON);
 
     void writeProcess(::fwZip::IWriteArchive::sptr writeArchive,
                       const ::boost::filesystem::path& rootFilename,
@@ -51,6 +51,6 @@ protected:
 
 
 
-#endif // __FWATOMSBOOSTIO_UT_WRITERTEST_HPP__
+#endif // __FWATOMSBOOSTIO_UT_BOOSTIOTEST_HPP__
 
 
diff --git a/SrcLib/io/fwAtomsBoostIO/test/tu/src/BoostIOTest.cpp b/SrcLib/io/fwAtomsBoostIO/test/tu/src/BoostIOTest.cpp
index 4f73b4f..0465681 100644
--- a/SrcLib/io/fwAtomsBoostIO/test/tu/src/BoostIOTest.cpp
+++ b/SrcLib/io/fwAtomsBoostIO/test/tu/src/BoostIOTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -61,10 +61,10 @@ struct SequenceGenerator
 
     SequenceGenerator()
     {
-        META_KEY_0 = "info.a<b>.c.0";
-        META_KEY_1 = "info.a<b>.c.{1:d}";
-        META_KEY_2 = "info.a<b>.c.2";
-        META_KEY_3 = "info.a<b>.c.3";
+        META_KEY_0   = "info.a<b>.c.0";
+        META_KEY_1   = "info.a<b>.c.{1:d}";
+        META_KEY_2   = "info.a<b>.c.2";
+        META_KEY_3   = "info.a<b>.c.3";
         META_VALUE_0 = "A";
         META_VALUE_1 = "B";
         META_VALUE_2 = "C";
@@ -77,17 +77,17 @@ struct SequenceGenerator
         ATTR_NAME_4 = "NULL";
 
         ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::New();
-        ::fwAtoms::Map::sptr map = ::fwAtoms::Map::New();
-        ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::New();
+        ::fwAtoms::Map::sptr map    = ::fwAtoms::Map::New();
+        ::fwAtoms::Blob::sptr blob  = ::fwAtoms::Blob::New();
         m_seq = ::fwAtoms::Sequence::New();
 
-        ::fwMemory::BufferObject::sptr bo = ::fwMemory::BufferObject::New();
+        ::fwMemory::BufferObject::sptr bo                  = ::fwMemory::BufferObject::New();
         const ::fwMemory::BufferObject::SizeType BUFF_SIZE = 1*1024*1024; // 1Mo
         bo->allocate(BUFF_SIZE);
         blob->setBufferObject(bo);
 
         ::fwMemory::BufferObject::Lock lock(bo->lock());
-        void *v = lock.getBuffer();
+        void *v    = lock.getBuffer();
         char* buff = static_cast<char*>(v);
         for (size_t i = 0; i < BUFF_SIZE; ++i)
         {
@@ -95,10 +95,10 @@ struct SequenceGenerator
         }
 
         ::fwAtoms::Boolean::sptr boolFalse = ::fwAtoms::Boolean::New(false);
-        ::fwAtoms::Boolean::sptr boolTrue = ::fwAtoms::Boolean::New(true);
-        ::fwAtoms::Numeric::sptr num = ::fwAtoms::Numeric::New(42);
-        ::fwAtoms::Numeric::sptr num2 = ::fwAtoms::Numeric::New(16.64);
-        ::fwAtoms::String::sptr str = ::fwAtoms::String::New("MyStr");
+        ::fwAtoms::Boolean::sptr boolTrue  = ::fwAtoms::Boolean::New(true);
+        ::fwAtoms::Numeric::sptr num       = ::fwAtoms::Numeric::New(42);
+        ::fwAtoms::Numeric::sptr num2      = ::fwAtoms::Numeric::New(16.64);
+        ::fwAtoms::String::sptr str        = ::fwAtoms::String::New("MyStr");
 
         obj->setMetaInfo(META_KEY_0, META_VALUE_0);
         obj->setMetaInfo(META_KEY_1, META_VALUE_1);
@@ -124,7 +124,7 @@ struct SequenceGenerator
         m_seq->push_back(boolTrue);
 
         // tests the case of a a cache path hiting an object stored in a map
-        ::fwAtoms::Map::sptr map2 = ::fwAtoms::Map::New();
+        ::fwAtoms::Map::sptr map2    = ::fwAtoms::Map::New();
         ::fwAtoms::Object::sptr obj2 = ::fwAtoms::Object::New();
         map2->insert("obj2 ref1", obj2);
         map2->insert("obj2 ref2", obj2);
@@ -144,27 +144,27 @@ struct SequenceGenerator
 
     void compare(::fwAtoms::Sequence::sptr readSeq)
     {
-        ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::dynamicCast((*m_seq)[0]);
-        ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::dynamicCast((*m_seq)[2]);
+        ::fwAtoms::Object::sptr obj        = ::fwAtoms::Object::dynamicCast((*m_seq)[0]);
+        ::fwAtoms::Blob::sptr blob         = ::fwAtoms::Blob::dynamicCast((*m_seq)[2]);
         ::fwAtoms::Boolean::sptr boolFalse = ::fwAtoms::Boolean::dynamicCast((*m_seq)[5]);
-        ::fwAtoms::Numeric::sptr num = ::fwAtoms::Numeric::dynamicCast((*m_seq)[6]);
-        ::fwAtoms::String::sptr str = ::fwAtoms::String::dynamicCast((*m_seq)[7]);
-        ::fwAtoms::Numeric::sptr num2 = ::fwAtoms::Numeric::dynamicCast((*m_seq)[9]);
-        ::fwAtoms::Boolean::sptr boolTrue = ::fwAtoms::Boolean::dynamicCast((*m_seq)[10]);
+        ::fwAtoms::Numeric::sptr num       = ::fwAtoms::Numeric::dynamicCast((*m_seq)[6]);
+        ::fwAtoms::String::sptr str        = ::fwAtoms::String::dynamicCast((*m_seq)[7]);
+        ::fwAtoms::Numeric::sptr num2      = ::fwAtoms::Numeric::dynamicCast((*m_seq)[9]);
+        ::fwAtoms::Boolean::sptr boolTrue  = ::fwAtoms::Boolean::dynamicCast((*m_seq)[10]);
 
         CPPUNIT_ASSERT_EQUAL(m_seq->size(), readSeq->size());
 
-        ::fwAtoms::Object::sptr   readObj0  = ::fwAtoms::Object::dynamicCast((*readSeq)[0]);
-        ::fwAtoms::Object::sptr   readObj1  = ::fwAtoms::Object::dynamicCast((*readSeq)[1]);
-        ::fwAtoms::Blob::sptr     readBlob  = ::fwAtoms::Blob::dynamicCast((*readSeq)[2]);
-        ::fwAtoms::Map::sptr      readMap   = ::fwAtoms::Map::dynamicCast((*readSeq)[3]);
-        ::fwAtoms::Sequence::sptr readSeq2  = ::fwAtoms::Sequence::dynamicCast((*readSeq)[4]);
-        ::fwAtoms::Boolean::sptr  readBoolF = ::fwAtoms::Boolean::dynamicCast((*readSeq)[5]);
-        ::fwAtoms::Numeric::sptr  readNum   = ::fwAtoms::Numeric::dynamicCast((*readSeq)[6]);
-        ::fwAtoms::String::sptr   readStr   = ::fwAtoms::String::dynamicCast((*readSeq)[7]);
-        ::fwAtoms::Base::sptr     readNull  = ::fwAtoms::Base::dynamicCast((*readSeq)[8]);
-        ::fwAtoms::Numeric::sptr  readNum2  = ::fwAtoms::Numeric::dynamicCast((*readSeq)[9]);
-        ::fwAtoms::Boolean::sptr  readBoolT = ::fwAtoms::Boolean::dynamicCast((*readSeq)[10]);
+        ::fwAtoms::Object::sptr readObj0   = ::fwAtoms::Object::dynamicCast((*readSeq)[0]);
+        ::fwAtoms::Object::sptr readObj1   = ::fwAtoms::Object::dynamicCast((*readSeq)[1]);
+        ::fwAtoms::Blob::sptr readBlob     = ::fwAtoms::Blob::dynamicCast((*readSeq)[2]);
+        ::fwAtoms::Map::sptr readMap       = ::fwAtoms::Map::dynamicCast((*readSeq)[3]);
+        ::fwAtoms::Sequence::sptr readSeq2 = ::fwAtoms::Sequence::dynamicCast((*readSeq)[4]);
+        ::fwAtoms::Boolean::sptr readBoolF = ::fwAtoms::Boolean::dynamicCast((*readSeq)[5]);
+        ::fwAtoms::Numeric::sptr readNum   = ::fwAtoms::Numeric::dynamicCast((*readSeq)[6]);
+        ::fwAtoms::String::sptr readStr    = ::fwAtoms::String::dynamicCast((*readSeq)[7]);
+        ::fwAtoms::Base::sptr readNull     = ::fwAtoms::Base::dynamicCast((*readSeq)[8]);
+        ::fwAtoms::Numeric::sptr readNum2  = ::fwAtoms::Numeric::dynamicCast((*readSeq)[9]);
+        ::fwAtoms::Boolean::sptr readBoolT = ::fwAtoms::Boolean::dynamicCast((*readSeq)[10]);
 
         CPPUNIT_ASSERT( readObj0  );
         CPPUNIT_ASSERT( readObj1  );
@@ -178,7 +178,7 @@ struct SequenceGenerator
         CPPUNIT_ASSERT( readNum2  );
         CPPUNIT_ASSERT( readBoolT );
 
-        ::fwMemory::BufferObject::sptr bo = blob->getBufferObject();
+        ::fwMemory::BufferObject::sptr bo     = blob->getBufferObject();
         ::fwMemory::BufferObject::sptr readBo = readBlob->getBufferObject();
 
         CPPUNIT_ASSERT( readBo );
@@ -188,9 +188,9 @@ struct SequenceGenerator
         ::fwMemory::BufferObject::Lock lock(bo->lock());
         ::fwMemory::BufferObject::Lock readLock(readBo->lock());
 
-        void *v = lock.getBuffer();
-        void *readV = readLock.getBuffer();
-        char* buff = static_cast<char*>(v);
+        void *v        = lock.getBuffer();
+        void *readV    = readLock.getBuffer();
+        char* buff     = static_cast<char*>(v);
         char* readBuff = static_cast<char*>(readV);
 
         CPPUNIT_ASSERT(readBlob);
@@ -240,7 +240,7 @@ void BoostIOTest::tearDown()
 void BoostIOTest::readWriteZipTest()
 {
     ::boost::filesystem::path folderPath =
-            ::fwTools::System::getTemporaryFolder() / ( ::fwTools::UUID::generateUUID() + ".zip");
+        ::fwTools::System::getTemporaryFolder() / ( ::fwTools::UUID::generateUUID() + ".zip");
 
     ::fwZip::IWriteArchive::sptr writeArchive;
     ::fwZip::IReadArchive::sptr readArchive;
@@ -276,7 +276,7 @@ void BoostIOTest::readWriteZipTest()
 void BoostIOTest::readWriteDirTest()
 {
     ::boost::filesystem::path folderPath =
-            ::fwTools::System::getTemporaryFolder() / ::fwTools::UUID::generateUUID();
+        ::fwTools::System::getTemporaryFolder() / ::fwTools::UUID::generateUUID();
 
     ::fwZip::IWriteArchive::sptr writeArchive;
     ::fwZip::IReadArchive::sptr readArchive;
@@ -299,7 +299,7 @@ void BoostIOTest::readWriteDirTest()
         writeArchive.reset();
 
         readArchive = ::fwZip::ReadDirArchive::New(folderPath.string());
-        this->readProcess(readArchive, "root.xml" , ::fwAtomsBoostIO::XML);
+        this->readProcess(readArchive, "root.xml", ::fwAtomsBoostIO::XML);
         readArchive.reset();
 
         bool suppr = ::boost::filesystem::remove_all(folderPath);
@@ -325,7 +325,8 @@ void BoostIOTest::readProcess(::fwZip::IReadArchive::sptr readArchive,
 {
     ::fwAtoms::Sequence::sptr readSeq;
     {
-        readSeq = ::fwAtoms::Sequence::dynamicCast(::fwAtomsBoostIO::Reader().read(readArchive, rootFilename, formatType));
+        readSeq = ::fwAtoms::Sequence::dynamicCast(::fwAtomsBoostIO::Reader().read(readArchive, rootFilename,
+                                                                                   formatType));
     }
     generator.compare(readSeq);
 }
diff --git a/SrcLib/io/fwAtomsHdf5IO/CMakeLists.txt b/SrcLib/io/fwAtomsHdf5IO/CMakeLists.txt
deleted file mode 100644
index a665429..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/CMakeLists.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-)
-
-find_package(HDF5 REQUIRED)
-
-find_package (Boost COMPONENTS filesystem REQUIRED)
-
-
-
-fwForwardInclude(
-    ${HDF5_INCLUDE_DIR}
-    ${Boost_INCLUDE_DIRS}
-    )
-fwLink(
-    ${HDF5_LIBRARIES}
-    ${Boost_LIBRARIES}
-    )
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/COPYING b/SrcLib/io/fwAtomsHdf5IO/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/COPYING.LESSER b/SrcLib/io/fwAtomsHdf5IO/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/Properties.cmake b/SrcLib/io/fwAtomsHdf5IO/Properties.cmake
deleted file mode 100644
index c16a2e9..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwAtomsHdf5IO )
-set( VERSION 0.1 )
-set( TYPE LIBRARY )
-set( DEPENDENCIES fwAtoms fwCore fwTools fwMemory )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/bin/build.options b/SrcLib/io/fwAtomsHdf5IO/bin/build.options
deleted file mode 100644
index 962bfda..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/bin/build.options
+++ /dev/null
@@ -1,4 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-USE = ['hdf5']
-LIB = ['fwAtoms_0-1', 'fwTools_0-1']
diff --git a/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/Reader.hpp b/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/Reader.hpp
deleted file mode 100644
index 4e4b1cc..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/Reader.hpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2013.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWATOMSHDF5IO_READER_HPP__
-#define __FWATOMSHDF5IO_READER_HPP__
-
-#include <boost/filesystem/path.hpp>
-
-#ifdef SPECIALINSTALL
-	#include <H5Cpp.h>
-#else
-	#include <cpp/H5Cpp.h>
-#endif
-
-#include <fwCore/macros.hpp>
-
-#include "fwAtomsHdf5IO/config.hpp"
-
-namespace fwAtoms
-{
-    class Base;
-}
-namespace fwZip
-{
-    class IReadArchive;
-}
-
-namespace fwAtomsHdf5IO
-{
-
-/**
- * @brief This reader parses a HDF5 file and create the associated atom.
- * @class Reader
- */
-class FWATOMSHDF5IO_CLASS_API Reader
-{
-
-public:
-
-    /**
-     * @brief Visits the HDF5 file to create the associated atoms.
-     * @param path path of the HDF5 file.
-     */
-    FWATOMSHDF5IO_API SPTR(::fwAtoms::Base) read(const ::boost::filesystem::path &path);
-
-};
-
-}
-
-#endif /* __FWATOMSHDF5IO_READER_HPP__ */
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/Writer.hpp b/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/Writer.hpp
deleted file mode 100644
index ba9fd82..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/Writer.hpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2013.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWATOMSHDF5IO_WRITER_HPP__
-#define __FWATOMSHDF5IO_WRITER_HPP__
-
-#include <sstream>
-
-#include <boost/filesystem/path.hpp>
-
-#ifdef SPECIALINSTALL
-    #include <H5Cpp.h>
-#else
-    #include <cpp/H5Cpp.h>
-#endif
-
-#include <fwCore/macros.hpp>
-
-#include "fwAtomsHdf5IO/config.hpp"
-
-namespace fwAtoms
-{
-    class Base;
-}
-
-namespace fwAtomsHdf5IO
-{
-
-/**
- * @brief This writer parses a fwAtoms to save it in a HDF5 file.
- * @class Writer
- */
-class FWATOMSHDF5IO_CLASS_API Writer
-{
-
-public:
-
-    /// Defines writer version.
-    FWATOMSHDF5IO_API static const std::string s_VERSION;
-
-    /// Defines key to retrieve fwAtoms version from file.
-    FWATOMSHDF5IO_API static const std::string s_ATOMS_VERSION_KEY;
-
-    /// Defines key to retrieve writer version from file.
-    FWATOMSHDF5IO_API static const std::string s_WRITER_VERSION_KEY;
-
-    /// Constructor : initializes the writer.
-    FWATOMSHDF5IO_API Writer( SPTR(::fwAtoms::Base) atom );
-
-    /**
-     * @brief Visits the current atom to save it.
-     * @param path path of the HDF5 file to create.
-     */
-    FWATOMSHDF5IO_API void write(const ::boost::filesystem::path &path);
-
-protected:
-
-    /// current atom to save.
-    SPTR(::fwAtoms::Base) m_atom;
-
-};
-
-}
-
-#endif /* __FWATOMSHDF5IO_WRITER_HPP__ */
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/config.hpp b/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/config.hpp
deleted file mode 100644
index 171ad4f..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/include/fwAtomsHdf5IO/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2012.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWATOMSHDF5IO_CONFIG_HPP_
-#define _FWATOMSHDF5IO_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWATOMSHDF5IO_EXPORTS
-            #define FWATOMSHDF5IO_API __declspec(dllexport)
-        #else
-            #define FWATOMSHDF5IO_API __declspec(dllimport)
-        #endif
-
-        #define FWATOMSHDF5IO_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWATOMSHDF5IO_EXPORTS
-            #define FWATOMSHDF5IO_API __attribute__ ((visibility("default")))
-            #define FWATOMSHDF5IO_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWATOMSHDF5IO_API __attribute__ ((visibility("hidden")))
-            #define FWATOMSHDF5IO_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWATOMSHDF5IO_API
-        #define FWATOMSHDF5IO_CLASS_API
-
-    #endif
-
-#endif //FWATOMSHDF5IO_API
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Reader.cpp b/SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Reader.cpp
deleted file mode 100644
index d241775..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Reader.cpp
+++ /dev/null
@@ -1,360 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2013.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
-
-#include <sstream>
-
-#include <boost/foreach.hpp>
-
-#include <fwTools/UUID.hpp>
-
-#include <fwAtoms/Base.hpp>
-#include <fwAtoms/Blob.hpp>
-#include <fwAtoms/Boolean.hpp>
-#include <fwAtoms/Map.hpp>
-#include <fwAtoms/Numeric.hpp>
-#include <fwAtoms/Numeric.hxx>
-#include <fwAtoms/Object.hpp>
-#include <fwAtoms/Sequence.hpp>
-#include <fwAtoms/String.hpp>
-
-#include "fwAtomsHdf5IO/Writer.hpp"
-#include "fwAtomsHdf5IO/Reader.hpp"
-
-namespace fwAtomsHdf5IO
-{
-
-//-----------------------------------------------------------------------------
-
-struct Hdf5Visitor
-{
-    typedef std::map< std::string, ::fwAtoms::Base::sptr> AtomCacheType;
-    AtomCacheType m_cache;
-
-H5::H5File m_file;
-
-
-//-----------------------------------------------------------------------------
-
-AtomCacheType::mapped_type hitCache(const AtomCacheType::key_type &path) const
-{
-    AtomCacheType::const_iterator iter = m_cache.find(path);
-    if(iter != m_cache.end())
-    {
-        return iter->second;
-    }
-    return AtomCacheType::mapped_type();
-}
-
-//-----------------------------------------------------------------------------
-
-void cache(const AtomCacheType::key_type &path, const AtomCacheType::mapped_type &atom)
-{
-    m_cache.insert( AtomCacheType::value_type( path, atom ) );
-}
-
-//-----------------------------------------------------------------------------
-
-Hdf5Visitor(const ::boost::filesystem::path & path)
-{
-    m_file = H5::H5File( path.string(), H5F_ACC_RDWR );
-
-    H5::Group versionsGroup;
-    try
-    {
-        versionsGroup = m_file.openGroup("/versions");
-    }
-    catch(H5::FileIException &fe)
-    {
-        OSLM_ERROR("Failed to read file '" << path.string()
-                << "' (exception occured '" << fe.getDetailMsg() << "')");
-        FW_RAISE("Failed to read file '" << path.string() << "' :\nno versions found.");
-    }
-
-    H5::StrType str_type(0, H5T_VARIABLE);
-
-    H5std_string strAtomsVersion;
-    try
-    {
-        H5::DataSet dsAtomsVersion = versionsGroup.openDataSet(Writer::s_ATOMS_VERSION_KEY);
-        dsAtomsVersion.read(strAtomsVersion, str_type);
-    }
-    catch(H5::GroupIException &ge)
-    {
-        OSLM_ERROR("Failed to read file '" << path.string()
-                << "' (exception occured '" << ge.getDetailMsg() << "')");
-        FW_RAISE("Failed to read file '" << path.string() << "' :\nno atoms version found.");
-
-    }
-
-    H5std_string strWriterVersion;
-    try
-    {
-        H5::DataSet dsWriterVersion = versionsGroup.openDataSet(Writer::s_WRITER_VERSION_KEY);
-        dsWriterVersion.read(strWriterVersion, str_type);
-    }
-    catch(H5::GroupIException &ge)
-    {
-        OSLM_ERROR("Failed to read file '" << path.string()
-                << "' (exception occured '" << ge.getDetailMsg() << "')");
-        FW_RAISE("Failed to read file '" << path.string() << "' :\nno writer version found.");
-    }
-
-    FW_RAISE_IF("Failed to read file '" << path.string() << "':\n" 
-            << "Detected file version is '" << strWriterVersion << "'"
-            << " whereas current version is '" << Writer::s_VERSION << "'", Writer::s_VERSION != strWriterVersion);
-
-    FW_RAISE_IF("Failed to read file '" << path.string() << "':\n" 
-            << "Detected atoms version is '" << strAtomsVersion << "'"
-            << " whereas current version is '" << ::fwAtoms::Base::s_VERSION << "'",
-            ::fwAtoms::Base::s_VERSION != strAtomsVersion);
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr visit()
-{
-    return this->visit("/root");
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr visit(const std::string & path)
-{
-    ::fwAtoms::Base::sptr obj;
-
-    H5::Group group = m_file.openGroup(path);
-
-    if (group.getNumObjs())
-    {
-        H5::StrType str_type(0, H5T_VARIABLE);
-        H5::DataSet type = group.openDataSet( "type" );
-        H5std_string typeStr;
-        type.read( typeStr, str_type );
-
-        if(typeStr == "numeric")
-        {
-            H5::DataSet val  = group.openDataSet( "value" );
-            H5std_string value;
-            val.read( value, str_type );
-            obj = ::fwAtoms::Numeric::New(value);
-            this->cache(path, obj);
-        }
-        else if(typeStr == "string")
-        {
-            H5::DataSet val  = group.openDataSet( "value" );
-            H5std_string value;
-            val.read( value, str_type );
-            obj = ::fwAtoms::String::New(value);
-            this->cache(path, obj);
-        }
-        else if(typeStr == "boolean")
-        {
-            H5::DataSet val  = group.openDataSet( "value" );
-            H5std_string value;
-            val.read( value, str_type );
-            obj = ::fwAtoms::Boolean::New(value);
-            this->cache(path, obj);
-        }
-        else if(typeStr == "sequence")
-        {
-            obj = this->getSequence(path);
-        }
-        else if(typeStr == "mapping")
-        {
-            obj = this->getMap(path);
-        }
-        else if(typeStr == "object")
-        {
-            obj = this->getObject(path);
-        }
-        else if(typeStr == "blob")
-        {
-            obj = this->getBlob(path);
-        }
-        else
-        {
-            FW_RAISE("HDF5 file does not contained a well formed atom");
-        }
-    }
-
-    return obj;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr getAtom(const H5::Group & group, const std::string & path, int index)
-{
-    ::fwAtoms::Base::sptr atom;
-
-    if (group.getObjTypeByIdx(index) == H5G_LINK)
-    {
-        H5std_string  linkPath = m_file.getLinkval(path);
-        FW_RAISE_IF("Object (" << linkPath << ") must already exist.", m_cache.find(linkPath) == m_cache.end());
-
-        atom = this->hitCache(linkPath);
-    }
-    else if (group.getObjTypeByIdx(index) == H5G_GROUP)
-    {
-        atom = this->visit(path);
-    }
-    else
-    {
-        FW_RAISE("This file is not well formed");
-    }
-    return atom;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr getObject(const std::string & path)
-{
-    ::fwAtoms::Object::sptr object = ::fwAtoms::Object::New();
-    this->cache(path, object);
-
-    H5::StrType str_type(0, H5T_VARIABLE);
-
-    const std::string idPath(path + "/id");
-    const std::string metainfoPath(path + "/meta_info");
-    const std::string attributesPath(path + "/attributes");
-
-    // Parses meta info
-    ::fwAtoms::Object::MetaInfosType metaInfos;
-    H5::Group metainfoGroup = m_file.openGroup( metainfoPath );
-
-    for (int i=0 ; i< metainfoGroup.getNumObjs() ; ++i)
-    {
-        H5std_string name = metainfoGroup.getObjnameByIdx(i);
-        FW_RAISE_IF("Meta info type must be H5G_DATASET", metainfoGroup.getObjTypeByIdx(i) != H5G_DATASET);
-
-        H5::DataSet infoDataSet = metainfoGroup.openDataSet(name);
-        H5std_string info;
-        infoDataSet.read(info, str_type);
-
-        metaInfos[name] = std::string(info);
-    }
-    object->setMetaInfos(metaInfos);
-
-    // Parses attributes
-    ::fwAtoms::Object::AttributesType attributes;
-    H5::Group attributesGroup = m_file.openGroup( attributesPath );
-
-    ::fwAtoms::Base::sptr atom;
-
-    for (int i=0 ; i< attributesGroup.getNumObjs() ; ++i)
-    {
-        H5std_string name = attributesGroup.getObjnameByIdx(i);
-
-        std::string eltPath = attributesPath + "/" + name;
-
-        atom = this->getAtom(attributesGroup, eltPath, i);
-
-        attributes[name] = atom;
-    }
-    object->setAttributes(attributes);
-
-    return object;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr getSequence(const std::string & path)
-{
-    ::fwAtoms::Sequence::sptr seq = ::fwAtoms::Sequence::New();
-    this->cache(path, seq);
-
-    const std::string seqPath(path + "/sequence");
-    H5::StrType str_type(0, H5T_VARIABLE);
-    H5::Group seqGroup = m_file.openGroup(seqPath);
-
-    ::fwAtoms::Base::sptr atom;
-    for (int i=0 ; i< seqGroup.getNumObjs() ; ++i)
-    {
-        H5std_string name = seqGroup.getObjnameByIdx(i);
-
-        std::string eltPath = seqPath + "/" + name;
-
-        atom = getAtom(seqGroup, eltPath, i);
-
-        seq->push_back(atom);
-    }
-    return seq;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr getMap(const std::string & path)
-{
-    ::fwAtoms::Map::sptr map = ::fwAtoms::Map::New();
-    this->cache(path, map);
-
-    H5::StrType str_type(0, H5T_VARIABLE);
-    const std::string mapPath(path + "/map");
-    H5::Group mapGroup = m_file.openGroup(mapPath);
-
-    ::fwAtoms::Base::sptr atom;
-    for (int i=0 ; i< mapGroup.getNumObjs() ; ++i)
-    {
-        H5std_string name = mapGroup.getObjnameByIdx(i);
-
-        std::string eltPath = mapPath + "/" + name;
-
-        atom = getAtom(mapGroup, eltPath, i);
-
-        ::fwAtoms::Base::sptr atom = this->visit(mapPath + "/" + name);
-
-        map->insert( name, atom );
-    }
-    return map;
-}
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Blob::sptr getBlob(const std::string & path)
-{
-    ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::New();
-    this->cache(path, blob);
-
-    H5::StrType str_type(0, H5T_VARIABLE);
-    H5::Group group = m_file.openGroup(path);
-
-    H5::DataSet datasetSize = group.openDataSet("buffer_size");
-    H5std_string value;
-    datasetSize.read( value, str_type );
-    size_t size = ::boost::lexical_cast<size_t>(value);
-
-    ::fwMemory::BufferObject::sptr buffObj = ::fwMemory::BufferObject::New();
-    blob->setBufferObject(buffObj);
-
-    ::fwMemory::BufferObject::Lock lock(buffObj->lock());
-    if (size > 0)
-    {
-        hsize_t fdim[] = {size};
-        buffObj->allocate(size);
-        H5::DataSpace fspace( 1, fdim );
-        H5::DataSet dataset = group.openDataSet("blob");
-        dataset.read(buffObj->getBuffer(), H5::PredType::NATIVE_UINT8);
-    }
-
-    return blob;
-}
-};
-
-//-----------------------------------------------------------------------------
-
-::fwAtoms::Base::sptr Reader::read(const ::boost::filesystem::path &path)
-{
-    Hdf5Visitor visitor(path);
-    ::fwAtoms::Base::sptr obj = visitor.visit();
-
-    return obj;
-}
-
-
-
-//-----------------------------------------------------------------------------
-
-}
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Writer.cpp b/SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Writer.cpp
deleted file mode 100644
index 3861f02..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/src/fwAtomsHdf5IO/Writer.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
-* FW4SPL - Copyright (C) IRCAD, 2009-2013.
-* Distributed under the terms of the GNU Lesser General Public License (LGPL) as
-* published by the Free Software Foundation.
-* ****** END LICENSE BLOCK ****** */
-
-#include <sstream>
-
-#include <boost/foreach.hpp>
-
-#include <fwTools/UUID.hpp>
-
-#include <fwAtoms/Blob.hpp>
-#include <fwAtoms/Boolean.hpp>
-#include <fwAtoms/Map.hpp>
-#include <fwAtoms/Numeric.hpp>
-#include <fwAtoms/Object.hpp>
-#include <fwAtoms/Sequence.hpp>
-#include <fwAtoms/String.hpp>
-
-#include "fwAtomsHdf5IO/Writer.hpp"
-
-
-namespace fwAtomsHdf5IO
-{
-
-const std::string Writer::s_VERSION = "1";
-const std::string Writer::s_ATOMS_VERSION_KEY = "atoms_version";
-const std::string Writer::s_WRITER_VERSION_KEY = "writer_version";
-
-
-//-----------------------------------------------------------------------------
-
-struct AtomVisitor
-{
-typedef std::map< ::fwAtoms::Base::sptr, std::string> Hdf5CacheType;
-Hdf5CacheType m_cache;
-
-H5::H5File m_file;
-
-//-----------------------------------------------------------------------------
-
-AtomVisitor(const ::boost::filesystem::path & path)
-{
-    m_file = H5::H5File( path.string(), H5F_ACC_TRUNC );
-
-    H5::Group versionsGroup = m_file.createGroup("/versions");
-
-    H5::StrType str_type(0, H5T_VARIABLE);
-    H5::DataSpace att_space(H5S_SCALAR);
-
-    H5::DataSet atomsVersion = versionsGroup.createDataSet(Writer::s_ATOMS_VERSION_KEY, str_type, att_space);
-    atomsVersion.write(::fwAtoms::Base::s_VERSION, str_type);
-
-    H5::DataSet writerVersion = versionsGroup.createDataSet(Writer::s_WRITER_VERSION_KEY, str_type, att_space);
-    writerVersion.write(Writer::s_VERSION, str_type);
-}
-
-//-----------------------------------------------------------------------------
-
-Hdf5CacheType::mapped_type hitCache(const Hdf5CacheType::key_type &atom) const
-{
-    Hdf5CacheType::const_iterator iter = m_cache.find(atom);
-    if(iter != m_cache.end())
-    {
-        return iter->second;
-    }
-    return Hdf5CacheType::mapped_type();
-}
-
-//-----------------------------------------------------------------------------
-
-void cache(const Hdf5CacheType::key_type &atom, const Hdf5CacheType::mapped_type &path)
-{
-    m_cache.insert( Hdf5CacheType::value_type( atom, path ) );
-}
-
-//-----------------------------------------------------------------------------
-
-void visit(const ::fwAtoms::Sequence::sptr &seq, const std::string &path)
-{
-    const std::string seqPath(path + "/sequence");
-    H5::Group seqGroup = m_file.createGroup( seqPath );
-    int count = 0;
-    BOOST_FOREACH( ::fwAtoms::Sequence::SequenceType::value_type elt, seq->getValue())
-    {
-        std::stringstream str;
-        str.width(10);
-        str.fill('0');
-        str << count++;
-        this->visit(elt, seqPath + "/" +  str.str());
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void visit(const ::fwAtoms::Map::sptr &map, const std::string &path)
-{
-    const std::string mapPath(path + "/map");
-    H5::Group mapGroup = m_file.createGroup( mapPath);
-
-    BOOST_FOREACH(const ::fwAtoms::Map::MapType::value_type& elt, map->getValue())
-    {
-        this->visit(elt.second, mapPath + "/" + elt.first);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void visit(const ::fwAtoms::Blob::sptr &blob, const std::string &path)
-{
-    H5::Group group = m_file.openGroup( path );
-
-    ::fwMemory::BufferObject::sptr buffObj = blob->getBufferObject();
-
-    H5::StrType str_type(0, H5T_VARIABLE);
-    H5::DataSpace att_space(H5S_SCALAR);
-        H5::DataSet datasetSize = group.createDataSet( "buffer_size", str_type, att_space );
-    if (!buffObj)
-    {
-        datasetSize.write(H5std_string("0"), str_type);
-    }
-    else
-    {
-        ::fwMemory::BufferObject::Lock lock(buffObj->lock());
-
-        datasetSize.write(::boost::lexical_cast<std::string>(buffObj->getSize()), str_type);
-
-        hsize_t fdim[] = {buffObj->getSize()};
-        H5::DataSpace fspace( 1, fdim );
-        H5::DataSet dataset = group.createDataSet( "blob", H5::PredType::NATIVE_UINT8, fspace );
-        dataset.write(buffObj->getBuffer(), H5::PredType::NATIVE_UINT8);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void visit(const ::fwAtoms::Object::sptr &object, const std::string &path)
-{
-    H5::StrType str_type(0, H5T_VARIABLE);
-    H5::DataSpace att_space(H5S_SCALAR);
-
-    const std::string idPath(path + "/id");
-    const std::string metaInfoPath(path + "/meta_info");
-    const std::string attributesPath(path + "/attributes");
-
-    H5::Group metaInfosGroup = m_file.createGroup( metaInfoPath );
-    const ::fwAtoms::Object::MetaInfosType& metaInfos = object->getMetaInfos();
-    BOOST_FOREACH(const ::fwAtoms::Object::MetaInfosType::value_type& info, metaInfos)
-    {
-        // plutot un dataset de strings
-        H5::DataSet infoDataSet = metaInfosGroup.createDataSet( info.first, str_type, att_space );
-        infoDataSet.write(info.second, str_type);
-    }
-
-    H5::Group attributesGroup = m_file.createGroup( attributesPath );
-    const ::fwAtoms::Object::AttributesType& attributes = object->getAttributes();
-    BOOST_FOREACH(const ::fwAtoms::Object::AttributesType::value_type attr, attributes)
-    {
-        this->visit(attr.second, path + "/attributes/" + attr.first);
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void visit(const ::fwAtoms::Base::sptr &base, const std::string &path)
-{
-    std::string cachePath = this->hitCache(base);
-    if(!cachePath.empty())
-    {
-        m_file.link(H5G_LINK_SOFT, cachePath, path);;
-    }
-    else
-    {
-        H5::Group group = m_file.createGroup( path );
-
-        if (base)
-        {
-            this->cache(base, path);
-            H5::StrType str_type(0, H5T_VARIABLE);
-            H5::DataSpace att_space(H5S_SCALAR);
-            H5::DataSet type = group.createDataSet( "type", str_type, att_space );
-
-            // prop_tree::ptree propTree;
-            if(base->isNumeric())
-            {
-                type.write( H5std_string("numeric"), str_type );
-                H5::DataSet val  = group.createDataSet( "value", str_type, att_space );
-                val.write( base->getString(), str_type );
-            }
-            else if(base->isString())
-            {
-                type.write( H5std_string("string"), str_type );
-                H5::DataSet val  = group.createDataSet( "value", str_type, att_space );
-                val.write( base->getString(), str_type );
-            }
-            else if(base->isBoolean())
-            {
-                type.write( H5std_string("boolean"), str_type );
-                H5::DataSet val  = group.createDataSet( "value", str_type, att_space );
-                val.write( H5std_string((base->getString() == "true") ? "true" : "false"), str_type );
-            }
-            else if(base->isSequence())
-            {
-                type.write( H5std_string("sequence"), str_type );
-                ::fwAtoms::Sequence::sptr seq = ::fwAtoms::Sequence::dynamicCast(base);
-                this->visit(seq, path);
-            }
-            else if(base->isMapping())
-            {
-                type.write( H5std_string("mapping"), str_type );
-                ::fwAtoms::Map::sptr mapAtom = ::fwAtoms::Map::dynamicCast(base);
-                this->visit(mapAtom, path);
-            }
-            else if(base->isObject())
-            {
-                type.write( H5std_string("object"), str_type );
-                ::fwAtoms::Object::sptr object = ::fwAtoms::Object::dynamicCast(base);
-                this->visit(object, path);
-            }
-            else if(base->isBlob())
-            {
-                type.write( H5std_string("blob"), str_type );
-                ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::dynamicCast(base);
-                this->visit(blob, path);
-            }
-            else
-            {
-                FW_RAISE("This kind of base is not yet supported");
-            }
-        }
-    }
-}
-
-};
-
-//-----------------------------------------------------------------------------
-
-Writer::Writer( SPTR(::fwAtoms::Base) atom ) : m_atom(atom)
-{}
-
-
-//-----------------------------------------------------------------------------
-
-void Writer::write(const ::boost::filesystem::path &path )
-{
-    AtomVisitor visitor(path);
-    visitor.visit(m_atom, "/root");
-}
-
-//-----------------------------------------------------------------------------
-
-}
diff --git a/SrcLib/io/fwAtomsHdf5IO/test/CMakeLists.txt b/SrcLib/io/fwAtomsHdf5IO/test/CMakeLists.txt
deleted file mode 100644
index 47e309c..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/test/CMakeLists.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-
-fwLoadProperties()
-
-find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/test/Properties.cmake b/SrcLib/io/fwAtomsHdf5IO/test/Properties.cmake
deleted file mode 100644
index e16e6ea..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/test/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME fwAtomsHdf5IOTest )
-set( VERSION  )
-set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwAtoms fwAtomsHdf5IO )
-set( REQUIREMENTS  )
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/test/cppunit.options b/SrcLib/io/fwAtomsHdf5IO/test/cppunit.options
deleted file mode 100644
index ffd8c61..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/test/cppunit.options
+++ /dev/null
@@ -1,7 +0,0 @@
-CLASSTEST=[
-    'Hdf5IOTest',
-]
-
-LIB = ['fwTools_0-1','fwCore_0-1', 'fwAtoms_0-1', 'fwAtomsHdf5IO_0-1', 'fwTest_0-1']
-CONSOLE = 'yes'
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/test/tu/include/Hdf5IOTest.hpp b/SrcLib/io/fwAtomsHdf5IO/test/tu/include/Hdf5IOTest.hpp
deleted file mode 100644
index 54dcdfc..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/test/tu/include/Hdf5IOTest.hpp
+++ /dev/null
@@ -1,46 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __FWATOMSHDF5IO_UT_HDF5IOTEST_HPP__
-#define __FWATOMSHDF5IO_UT_HDF5IOTEST_HPP__
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwAtomsHdf5IO/Writer.hpp>
-
-namespace fwAtomsHdf5IO
-{
-namespace ut
-{
-
-class Hdf5IOTest :  public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( Hdf5IOTest );
-    CPPUNIT_TEST( readWriteTest );
-    CPPUNIT_TEST_SUITE_END();
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void readWriteTest();
-
-protected:
-    void readProcess(::boost::filesystem::path path);
-
-    void writeProcess(::boost::filesystem::path path);
-};
-
-
-}  // namespace ut
-}  // namespace fwAtomsHdf5IO
-
-
-
-#endif // __FWATOMSHDF5IO_UT_HDF5IOTEST_HPP__
-
-
diff --git a/SrcLib/io/fwAtomsHdf5IO/test/tu/src/Hdf5IOTest.cpp b/SrcLib/io/fwAtomsHdf5IO/test/tu/src/Hdf5IOTest.cpp
deleted file mode 100644
index b1a4270..0000000
--- a/SrcLib/io/fwAtomsHdf5IO/test/tu/src/Hdf5IOTest.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/filesystem/operations.hpp>
-
-#include <fwTools/System.hpp>
-#include <fwTools/UUID.hpp>
-
-#include <fwAtoms/Blob.hpp>
-#include <fwAtoms/Boolean.hpp>
-#include <fwAtoms/Map.hpp>
-#include <fwAtoms/Numeric.hpp>
-#include <fwAtoms/Numeric.hxx>
-#include <fwAtoms/Object.hpp>
-#include <fwAtoms/Sequence.hpp>
-#include <fwAtoms/String.hpp>
-
-#include <fwAtomsHdf5IO/Reader.hpp>
-#include <fwAtomsHdf5IO/Writer.hpp>
-
-#include <fwTest/Exception.hpp>
-
-#include "Hdf5IOTest.hpp"
-
-
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwAtomsHdf5IO::ut::Hdf5IOTest );
-
-namespace fwAtomsHdf5IO
-{
-namespace ut
-{
-
-static ::fwTest::Exception e(""); // Hack to force log
-
-struct SequenceGenerator
-{
-    std::string META_KEY_0;
-    std::string META_KEY_1;
-    std::string META_KEY_2;
-    std::string META_KEY_3;
-    std::string META_VALUE_0;
-    std::string META_VALUE_1;
-    std::string META_VALUE_2;
-    std::string META_VALUE_3;
-
-
-    std::string ATTR_NAME_0;
-    std::string ATTR_NAME_1;
-    std::string ATTR_NAME_2;
-    std::string ATTR_NAME_3;
-    std::string ATTR_NAME_4;
-
-    ::fwAtoms::Sequence::sptr m_seq;
-
-    SequenceGenerator()
-    {
-        META_KEY_0 = "info.a<b>.c.0";
-        META_KEY_1 = "info.a<b>.c.1";
-        META_KEY_2 = "info.a<b>.c.2";
-        META_KEY_3 = "info.a<b>.c.3";
-        META_VALUE_0 = "A";
-        META_VALUE_1 = "B";
-        META_VALUE_2 = "C";
-        META_VALUE_3 = "D";
-
-        ATTR_NAME_0 = "m_blob";
-        ATTR_NAME_1 = "m_map";
-        ATTR_NAME_2 = "m_str";
-        ATTR_NAME_3 = "m_num";
-        ATTR_NAME_4 = "NULL";
-
-        ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::New();
-        ::fwAtoms::Map::sptr map = ::fwAtoms::Map::New();
-        ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::New();
-        m_seq = ::fwAtoms::Sequence::New();
-
-        ::fwMemory::BufferObject::sptr bo = ::fwMemory::BufferObject::New();
-        const ::fwMemory::BufferObject::SizeType BUFF_SIZE = 1*1024*1024; // 1Mo
-        bo->allocate(BUFF_SIZE);
-        blob->setBufferObject(bo);
-
-        ::fwMemory::BufferObject::Lock lock(bo->lock());
-        void *v = lock.getBuffer();
-        char* buff = static_cast<char*>(v);
-        for (size_t i = 0; i < BUFF_SIZE; ++i)
-        {
-            buff[i] = i%256;
-        }
-
-        ::fwAtoms::Boolean::sptr boolFalse = ::fwAtoms::Boolean::New(false);
-        ::fwAtoms::Boolean::sptr boolTrue = ::fwAtoms::Boolean::New(true);
-        ::fwAtoms::Numeric::sptr num = ::fwAtoms::Numeric::New(42);
-        ::fwAtoms::Numeric::sptr num2 = ::fwAtoms::Numeric::New(16.64);
-        ::fwAtoms::String::sptr str = ::fwAtoms::String::New("MyStr");
-
-        obj->setMetaInfo(META_KEY_0, META_VALUE_0);
-        obj->setMetaInfo(META_KEY_1, META_VALUE_1);
-        obj->setMetaInfo(META_KEY_2, META_VALUE_2);
-        obj->setMetaInfo(META_KEY_3, META_VALUE_3);
-
-        obj->setAttribute(ATTR_NAME_0, blob);
-        obj->setAttribute(ATTR_NAME_1, map);
-        obj->setAttribute(ATTR_NAME_2, str);
-        obj->setAttribute(ATTR_NAME_3, num);
-        obj->setAttribute(ATTR_NAME_4, ::fwAtoms::String::sptr());
-
-        m_seq->push_back(obj);
-        m_seq->push_back(obj);
-        m_seq->push_back(blob);
-        m_seq->push_back(map);
-        m_seq->push_back(m_seq);
-        m_seq->push_back(boolFalse);
-        m_seq->push_back(num);
-        m_seq->push_back(str);
-        m_seq->push_back(::fwAtoms::String::sptr());
-        m_seq->push_back(num2);
-        m_seq->push_back(boolTrue);
-
-        map->insert("blob key", ::fwAtoms::Blob::New());
-        map->insert("object key", ::fwAtoms::Object::New());
-        map->insert("sequence key", ::fwAtoms::String::New("map-str"));
-    }
-
-    ::fwAtoms::Sequence::sptr getSequence()
-    {
-        return m_seq;
-    }
-
-    void compare(::fwAtoms::Sequence::sptr readSeq)
-    {
-        ::fwAtoms::Object::sptr obj = ::fwAtoms::Object::dynamicCast((*m_seq)[0]);
-        ::fwAtoms::Blob::sptr blob = ::fwAtoms::Blob::dynamicCast((*m_seq)[2]);
-        ::fwAtoms::Boolean::sptr boolFalse = ::fwAtoms::Boolean::dynamicCast((*m_seq)[5]);
-        ::fwAtoms::Numeric::sptr num = ::fwAtoms::Numeric::dynamicCast((*m_seq)[6]);
-        ::fwAtoms::String::sptr str = ::fwAtoms::String::dynamicCast((*m_seq)[7]);
-        ::fwAtoms::Numeric::sptr num2 = ::fwAtoms::Numeric::dynamicCast((*m_seq)[9]);
-        ::fwAtoms::Boolean::sptr boolTrue = ::fwAtoms::Boolean::dynamicCast((*m_seq)[10]);
-
-        CPPUNIT_ASSERT_EQUAL(m_seq->size(), readSeq->size());
-
-        ::fwAtoms::Object::sptr   readObj0  = ::fwAtoms::Object::dynamicCast((*readSeq)[0]);
-        ::fwAtoms::Object::sptr   readObj1  = ::fwAtoms::Object::dynamicCast((*readSeq)[1]);
-        ::fwAtoms::Blob::sptr     readBlob  = ::fwAtoms::Blob::dynamicCast((*readSeq)[2]);
-        ::fwAtoms::Map::sptr      readMap   = ::fwAtoms::Map::dynamicCast((*readSeq)[3]);
-        ::fwAtoms::Sequence::sptr readSeq2  = ::fwAtoms::Sequence::dynamicCast((*readSeq)[4]);
-        ::fwAtoms::Boolean::sptr  readBoolF = ::fwAtoms::Boolean::dynamicCast((*readSeq)[5]);
-        ::fwAtoms::Numeric::sptr  readNum   = ::fwAtoms::Numeric::dynamicCast((*readSeq)[6]);
-        ::fwAtoms::String::sptr   readStr   = ::fwAtoms::String::dynamicCast((*readSeq)[7]);
-        ::fwAtoms::Base::sptr     readNull  = ::fwAtoms::Base::dynamicCast((*readSeq)[8]);
-        ::fwAtoms::Numeric::sptr  readNum2  = ::fwAtoms::Numeric::dynamicCast((*readSeq)[9]);
-        ::fwAtoms::Boolean::sptr  readBoolT = ::fwAtoms::Boolean::dynamicCast((*readSeq)[10]);
-
-        ::fwMemory::BufferObject::sptr bo = blob->getBufferObject();
-        ::fwMemory::BufferObject::sptr readBo = readBlob->getBufferObject();
-
-        CPPUNIT_ASSERT_EQUAL( bo->getSize(),  readBo->getSize() );
-
-        ::fwMemory::BufferObject::Lock lock(bo->lock());
-        ::fwMemory::BufferObject::Lock readLock(readBo->lock());
-
-        void *v = lock.getBuffer();
-        void *readV = readLock.getBuffer();
-        char* buff = static_cast<char*>(v);
-        char* readBuff = static_cast<char*>(readV);
-        for (size_t i = 0; i < bo->getSize(); ++i)
-        {
-            CPPUNIT_ASSERT_EQUAL( buff[i], readBuff[i] );
-        }
-
-        CPPUNIT_ASSERT( readObj0  );
-        CPPUNIT_ASSERT( readObj1  );
-        CPPUNIT_ASSERT( readBlob  );
-        CPPUNIT_ASSERT( readMap   );
-        CPPUNIT_ASSERT( readSeq2  );
-        CPPUNIT_ASSERT( readBoolF );
-        CPPUNIT_ASSERT( readNum   );
-        CPPUNIT_ASSERT( readStr   );
-        CPPUNIT_ASSERT( !readNull );
-        CPPUNIT_ASSERT( readNum2  );
-        CPPUNIT_ASSERT( readBoolT );
-
-        CPPUNIT_ASSERT_EQUAL( readObj0, readObj1 );
-        CPPUNIT_ASSERT_EQUAL( readSeq, readSeq2 );
-
-        CPPUNIT_ASSERT_EQUAL( META_VALUE_0, readObj0->getMetaInfo(META_KEY_0) );
-        CPPUNIT_ASSERT_EQUAL( META_VALUE_1, readObj0->getMetaInfo(META_KEY_1) );
-        CPPUNIT_ASSERT_EQUAL( META_VALUE_2, readObj0->getMetaInfo(META_KEY_2) );
-        CPPUNIT_ASSERT_EQUAL( META_VALUE_3, readObj0->getMetaInfo(META_KEY_3) );
-
-        CPPUNIT_ASSERT_EQUAL( obj->getAttributes().size(), readObj0->getAttributes().size() );
-
-        CPPUNIT_ASSERT_EQUAL( ::fwAtoms::Base::sptr(readBlob), readObj0->getAttribute(ATTR_NAME_0) );
-        CPPUNIT_ASSERT_EQUAL( ::fwAtoms::Base::sptr(readMap ), readObj0->getAttribute(ATTR_NAME_1) );
-        CPPUNIT_ASSERT_EQUAL( ::fwAtoms::Base::sptr(readStr ), readObj0->getAttribute(ATTR_NAME_2) );
-        CPPUNIT_ASSERT_EQUAL( ::fwAtoms::Base::sptr(readNum ), readObj0->getAttribute(ATTR_NAME_3) );
-        CPPUNIT_ASSERT_EQUAL( ::fwAtoms::Base::sptr(), readObj0->getAttribute(ATTR_NAME_4) );
-
-        CPPUNIT_ASSERT_EQUAL( boolFalse->getValue(), readBoolF->getValue() );
-        CPPUNIT_ASSERT_EQUAL( boolTrue->getValue(), readBoolT->getValue() );
-        CPPUNIT_ASSERT_EQUAL( num->getString(), readNum->getString() );
-        CPPUNIT_ASSERT_EQUAL( num2->getString(), readNum2->getString() );
-        CPPUNIT_ASSERT_EQUAL( str->getValue(), readStr->getValue() );
-    }
-};
-
-SequenceGenerator generator;
-
-//-----------------------------------------------------------------------------
-
-void Hdf5IOTest::setUp()
-{
-}
-
-void Hdf5IOTest::tearDown()
-{
-}
-
-//-----------------------------------------------------------------------------
-
-void Hdf5IOTest::readWriteTest()
-{
-    ::boost::filesystem::path folderPath =
-            ::fwTools::System::getTemporaryFolder() / "HDF5" / "HdF5Test.hdf5";
-
-    if ( !::boost::filesystem::exists(folderPath.parent_path()))
-    {
-        ::boost::filesystem::create_directories(folderPath.parent_path());
-    }
-
-    this->writeProcess(folderPath);
-
-    this->readProcess(folderPath);
-
-    bool suppr = ::boost::filesystem::remove_all(folderPath);
-    CPPUNIT_ASSERT(suppr);
-}
-
-//-----------------------------------------------------------------------------
-
-void Hdf5IOTest::writeProcess( ::boost::filesystem::path path )
-{
-    ::fwAtoms::Sequence::sptr seq = generator.getSequence();
-    ::fwAtomsHdf5IO::Writer(seq).write(path);
-}
-
-//-----------------------------------------------------------------------------
-
-void Hdf5IOTest::readProcess( ::boost::filesystem::path path )
-{
-    ::fwAtoms::Sequence::sptr readSeq;
-    {
-        readSeq = ::fwAtoms::Sequence::dynamicCast(::fwAtomsHdf5IO::Reader().read(path));
-    }
-    generator.compare(readSeq);
-}
-
-}  // namespace ut
-}  // namespace fwAtomsHdf5IO
-
-
diff --git a/SrcLib/io/fwDcmtkIO/CMakeLists.txt b/SrcLib/io/fwDcmtkIO/CMakeLists.txt
new file mode 100644
index 0000000..babdefc
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/CMakeLists.txt
@@ -0,0 +1,12 @@
+fwLoadProperties()
+
+
+#racy compatibility
+
+find_package(Boost COMPONENTS filesystem regex REQUIRED)
+fwForwardInclude( ${Boost_INCLUDE_DIRS} )
+fwLink( ${Boost_REGEX_LIBRARY} )
+
+find_package(DCMTK REQUIRED)
+fwForwardInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
diff --git a/SrcLib/io/fwDcmtkIO/Properties.cmake b/SrcLib/io/fwDcmtkIO/Properties.cmake
new file mode 100644
index 0000000..18aa8bc
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/Properties.cmake
@@ -0,0 +1,22 @@
+
+set( NAME fwDcmtkIO )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwDcmtkTools
+    fwData
+    fwDataIO
+    fwDicomIOFilter
+    fwDicomTools
+    fwTools
+    fwThread
+    fwLog
+    fwMedData
+    fwMedDataTools
+    fwMemory
+    fwServices
+    fwZip
+    )
+set( REQUIREMENTS )
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/DicomSeriesDBReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/DicomSeriesDBReader.hpp
new file mode 100644
index 0000000..a9dea99
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/DicomSeriesDBReader.hpp
@@ -0,0 +1,196 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_DICOMSERIESDBREADER_HPP__
+#define __FWDCMTKIO_DICOMSERIESDBREADER_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/reader/IObjectReader.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/MultiFiles.hpp>
+
+#include <fwDataIO/reader/GenericObjectReader.hpp>
+
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwServices/IService.hpp>
+
+#include <fwTools/ProgressAdviser.hpp>
+
+namespace fwMedData
+{
+class SeriesDB;
+class Patient;
+class Study;
+class Equipment;
+class Series;
+}
+
+class DcmDataset;
+
+
+namespace fwDcmtkIO
+{
+
+/**
+ *
+ * @brief Reads DICOM data from a directory path in order to create a SeriesDB object.
+ */
+class FWDCMTKIO_CLASS_API DicomSeriesDBReader : public ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >,
+                                                public ::fwData::location::enableFolder< ::fwDataIO::reader::
+                                                                                         IObjectReader >,
+                                                public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::
+                                                                                             IObjectReader >,
+                                                public ::fwTools::ProgressAdviser
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (DicomSeriesDBReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
+        (()),
+        ::fwDataIO::reader::factory::New< DicomSeriesDBReader >
+        );
+    fwCoreAllowSharedFromThis();
+
+
+    typedef std::map< std::string, SPTR(::fwMedData::Patient) > PatientMapType;
+    typedef std::map< std::string, SPTR(::fwMedData::Study) > StudyMapType;
+    typedef std::map< std::string, SPTR(::fwMedData::Equipment) > EquipmentMapType;
+    typedef std::vector< SPTR(::fwMedData::DicomSeries) > DicomSeriesContainerType;
+    typedef std::vector< std::string > FilenameContainerType;
+
+    FWDCMTKIO_API DicomSeriesDBReader(::fwDataIO::reader::IObjectReader::Key key);
+
+    FWDCMTKIO_API ~DicomSeriesDBReader();
+
+    /// Reads DICOM data from configured path and fills SeriesDB object
+    FWDCMTKIO_API void read();
+
+    /**
+     * @brief Reads DICOM data from DicomSeries an fills SeriesDB object
+     * @param[in] dicomSeriesDB SeriesDB containing DicomSeries that must be read
+     */
+    FWDCMTKIO_API void readFromDicomSeriesDB(::fwMedData::SeriesDB::sptr dicomSeriesDB);
+
+    /// Return true if a dicomdir file can be read.
+    FWDCMTKIO_API bool isDicomDirAvailable();
+
+    /// Return DicomSeries container
+    FWDCMTKIO_API DicomSeriesContainerType& getDicomSeries();
+
+    /**
+     * @brief Set whether the reader must use the dicomdir file or not
+     * @{ */
+    const bool  getDicomdirActivated () const
+    {
+        return m_isDicomdirActivated;
+    }
+    bool& getRefDicomdirActivated ()
+    {
+        return this->m_isDicomdirActivated;
+    }
+    const bool& getCRefDicomdirActivated () const
+    {
+        return this->m_isDicomdirActivated;
+    }
+    void setDicomdirActivated (const bool _isDicomdirActivated)
+    {
+        this->m_isDicomdirActivated = _isDicomdirActivated;
+    }
+    /**  @} */
+
+    /**
+     * @brief Dicom filter type that must be applied prior the reading process
+     * @{ */
+    const std::string  getDicomFilterType () const
+    {
+        return m_dicomFilterType;
+    }
+    std::string& getRefDicomFilterType ()
+    {
+        return this->m_dicomFilterType;
+    }
+    const std::string& getCRefDicomFilterType () const
+    {
+        return this->m_dicomFilterType;
+    }
+    void setDicomFilterType (const std::string&  _dicomFilterType)
+    {
+        this->m_dicomFilterType = _dicomFilterType;
+    }
+    /**  @} */
+
+private:
+
+    /// Return filenames that must be read
+    FilenameContainerType getFilenames();
+
+    /**
+     * @brief Fills the related SeriesDB object with DICOM data extracted from the given files.
+     *
+     * @param[in] seriesDB SeriesDB object to be filled with DICOM data
+     * @param[in] filenames files to extract DICOM data from
+     */
+    void addSeries(const std::vector< std::string >& filenames);
+
+    /**
+     * @brief Create a patient from the dataset and store it in the patient map
+     * @param[in] dataset Dataset from which the patient is created
+     */
+    SPTR(::fwMedData::Patient) createPatient(DcmDataset* dataset);
+
+    /**
+     * @brief Create a study from the dataset and store it in the study map
+     * @param[in] dataset Dataset from which the study is created
+     */
+    SPTR(::fwMedData::Study) createStudy(DcmDataset* dataset);
+
+    /**
+     * @brief Create an equipment from the dataset and store it in the equipment map
+     * @param[in] dataset Dataset from which the equipment is created
+     */
+    SPTR(::fwMedData::Equipment) createEquipment(DcmDataset* dataset);
+
+    /**
+     * @brief Create a series from the dataset and store it in the series map
+     * @param[in] dataset Dataset from which the series is created
+     * @param[in] filename Instance file
+     */
+    void createSeries(DcmDataset* dataset, const std::string& filename);
+
+    /**
+     * @brief Convert DicomSeries to Image or Model Series
+     * @param[in] dicomSeries Dicom Series that must be converted
+     * @param[in] notify if true, notify the seriesDB
+     */
+    void convertDicomSeries(SPTR(::fwMedData::DicomSeries) dicomSeries,
+                            bool notify = false);
+
+    ///Patient Map
+    PatientMapType m_patientMap;
+
+    ///Study Map
+    StudyMapType m_studyMap;
+
+    ///Equipment Map
+    EquipmentMapType m_equipmentMap;
+
+    ///Object Reader Map
+    DicomSeriesContainerType m_dicomSeriesContainer;
+
+    ///True if the reader can use the dicomdir file.
+    bool m_isDicomdirActivated;
+
+    ///Dicom filter type that must be applied prior the reading process
+    std::string m_dicomFilterType;
+
+};
+
+} // namespace fwDcmtkIO
+
+#endif /*__FWDCMTKIO_DICOMSERIESDBREADER_HPP__*/
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/SeriesDBReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/SeriesDBReader.hpp
new file mode 100644
index 0000000..73eb3a9
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/SeriesDBReader.hpp
@@ -0,0 +1,193 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_SERIESDBREADER_HPP__
+#define __FWDCMTKIO_SERIESDBREADER_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/reader/IObjectReader.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/MultiFiles.hpp>
+#include <fwDataIO/reader/GenericObjectReader.hpp>
+#include <fwServices/IService.hpp>
+#include <fwTools/ProgressAdviser.hpp>
+
+namespace fwMedData
+{
+class SeriesDB;
+class Patient;
+class Study;
+class Equipment;
+class Series;
+}
+
+class DcmDataset;
+
+
+namespace fwDcmtkIO
+{
+
+/**
+ *
+ * @brief Reads DICOM data from a directory path in order to create a SeriesDB object.
+ */
+class FWDCMTKIO_CLASS_API SeriesDBReader : public ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >,
+                                           public ::fwData::location::enableFolder< ::fwDataIO::reader::IObjectReader >,
+                                           public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::
+                                                                                        IObjectReader >,
+                                           public ::fwTools::ProgressAdviser
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (SeriesDBReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
+        (()),
+        ::fwDataIO::reader::factory::New< SeriesDBReader >
+        );
+    fwCoreAllowSharedFromThis();
+
+
+    typedef std::map< std::string, SPTR(::fwMedData::Patient) > PatientMapType;
+    typedef std::map< std::string, SPTR(::fwMedData::Study) > StudyMapType;
+    typedef std::map< std::string, SPTR(::fwMedData::Equipment) > EquipmentMapType;
+    typedef std::vector< SPTR(::fwMedData::DicomSeries) > DicomSeriesContainerType;
+    typedef std::vector< std::string > FilenameContainerType;
+    typedef std::vector< std::string > SupportedSOPClassContainerType;
+
+    FWDCMTKIO_API SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key);
+
+    FWDCMTKIO_API ~SeriesDBReader();
+
+    /// Reads DICOM data from configured path and fills SeriesDB object
+    FWDCMTKIO_API void read();
+
+    /**
+     * @brief Reads DICOM data from DicomSeries an fills SeriesDB object
+     * @param[in] dicomSeriesDB SeriesDB containing DicomSeries that must be read
+     * @param[in] notifier Service used to notify changes in SeriesDB
+     */
+    FWDCMTKIO_API void readFromDicomSeriesDB(SPTR(::fwMedData::SeriesDB) dicomSeriesDB,
+                                             ::fwServices::IService::sptr notifier = ::fwServices::IService::sptr());
+
+    /// Reads DICOM data from configured path and fills SeriesDB object with DicomSeries
+    FWDCMTKIO_API void readDicomSeries();
+
+    /// Return true if a dicomdir file can be read.
+    FWDCMTKIO_API bool isDicomDirAvailable();
+
+    /// Return DicomSeries container
+    FWDCMTKIO_API DicomSeriesContainerType& getDicomSeries();
+
+    /// Get Set whether the reader must use the dicomdir file or not
+    const bool& getDicomdirActivated() const
+    {
+        return m_isDicomdirActivated;
+    }
+
+    /// Set Set whether the reader must use the dicomdir file or not
+    void setDicomdirActivated(const bool& isDicomdirActivated)
+    {
+        m_isDicomdirActivated = isDicomdirActivated;
+    }
+
+    /// Get Dicom filter type that must be applied prior the reading process
+    const std::string& getDicomFilterType() const
+    {
+        return m_dicomFilterType;
+    }
+
+    /// Set Dicom filter type that must be applied prior the reading process
+    void setDicomFilterType(const std::string& dicomFilterType)
+    {
+        m_dicomFilterType = dicomFilterType;
+    }
+
+    /// Get Supported SOP Class
+    const SupportedSOPClassContainerType& getSupportedSOPClassContainer() const
+    {
+        return m_supportedSOPClassContainer;
+    }
+
+    /// Set Supported SOP Class
+    void setSupportedSOPClassContainer(const SupportedSOPClassContainerType& supportedSOPClassContainer)
+    {
+        m_supportedSOPClassContainer = supportedSOPClassContainer;
+    }
+
+private:
+
+    /// Return filenames that must be read
+    FilenameContainerType getFilenames();
+
+    /**
+     * @brief Fills the related SeriesDB object with DICOM data extracted from the given files.
+     *
+     * @param[in] seriesDB SeriesDB object to be filled with DICOM data
+     * @param[in] filenames files to extract DICOM data from
+     */
+    void addSeries(const std::vector< std::string >& filenames);
+
+    /**
+     * @brief Create a patient from the dataset and store it in the patient map
+     * @param[in] dataset Dataset from which the patient is created
+     */
+    SPTR(::fwMedData::Patient) createPatient(DcmDataset* dataset);
+
+    /**
+     * @brief Create a study from the dataset and store it in the study map
+     * @param[in] dataset Dataset from which the study is created
+     */
+    SPTR(::fwMedData::Study) createStudy(DcmDataset* dataset);
+
+    /**
+     * @brief Create an equipment from the dataset and store it in the equipment map
+     * @param[in] dataset Dataset from which the equipment is created
+     */
+    SPTR(::fwMedData::Equipment) createEquipment(DcmDataset* dataset);
+
+    /**
+     * @brief Create a series from the dataset and store it in the series map
+     * @param[in] dataset Dataset from which the series is created
+     * @param[in] filename Instance file
+     */
+    void createSeries(DcmDataset* dataset, const std::string& filename);
+
+    /**
+     * @brief Convert DicomSeries to Image or Model Series
+     * @param[in] dicomSeries Dicom Series that must be converted
+     * @param[in] notifier Service used to notify the modification
+     */
+    void convertDicomSeries(SPTR(::fwMedData::DicomSeries) dicomSeries,
+                            ::fwServices::IService::sptr notifier = ::fwServices::IService::sptr());
+
+    ///Patient Map
+    PatientMapType m_patientMap;
+
+    ///Study Map
+    StudyMapType m_studyMap;
+
+    ///Equipment Map
+    EquipmentMapType m_equipmentMap;
+
+    ///Object Reader Map
+    DicomSeriesContainerType m_dicomSeriesContainer;
+
+    ///True if the reader can use the dicomdir file.
+    bool m_isDicomdirActivated;
+
+    ///Dicom filter type that must be applied prior the reading process
+    std::string m_dicomFilterType;
+
+    ///Supported SOP Class container
+    SupportedSOPClassContainerType m_supportedSOPClassContainer;
+
+};
+
+} // namespace fwDcmtkIO
+
+#endif /*__FWDCMTKIO_SERIESDBREADER_HPP__*/
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/Codec.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/Codec.hpp
new file mode 100644
index 0000000..ad062c8
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/Codec.hpp
@@ -0,0 +1,36 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_HELPER_CODEC_HPP__
+#define __FWDCMTKIO_HELPER_CODEC_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+
+namespace fwDcmtkIO
+{
+namespace helper
+{
+
+/**
+ * @brief Dicom Codec Helper. This class is used to load Dicom codecs.
+ */
+class FWDCMTKIO_CLASS_API Codec
+{
+public:
+    /// Load DICOM codec
+    FWDCMTKIO_API static void registerCodecs();
+
+    /// Clean up codec register
+    FWDCMTKIO_API static void cleanup();
+
+
+};
+
+} //helper
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_HELPER_CODEC_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/DicomDir.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/DicomDir.hpp
new file mode 100644
index 0000000..19edb72
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/DicomDir.hpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_HELPER_DICOMDIR_HPP__
+#define __FWDCMTKIO_HELPER_DICOMDIR_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <boost/filesystem/path.hpp>
+
+namespace fwDcmtkIO
+{
+namespace helper
+{
+
+/**
+ * @brief DicomDir Helper. This class is used to extract a list of files from a dicomdir file.
+ */
+class FWDCMTKIO_CLASS_API DicomDir
+{
+public:
+    /// Find Dicom instances in a DicomDir file.
+    FWDCMTKIO_API static bool readDicomDir(const ::boost::filesystem::path& root,
+                                           std::vector<std::string>& dicomFiles);
+
+private:
+    /// Create a regex used to find the correct case of a filename as Dicom only store uppercase paths.
+    FWDCMTKIO_API static std::string createRegex(std::string filename);
+
+    /// Return the filename with the correct case.
+    FWDCMTKIO_API static ::boost::filesystem::path getRealFilename(
+        const ::boost::filesystem::path& root, const std::string& filename);
+
+};
+
+} //helper
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_HELPER_DICOMDIR_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/DicomSearch.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/DicomSearch.hpp
new file mode 100644
index 0000000..9ac0180
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/helper/DicomSearch.hpp
@@ -0,0 +1,46 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_HELPER_DICOMSEARCH_HPP__
+#define __FWDCMTKIO_HELPER_DICOMSEARCH_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem.hpp>
+
+namespace fwDcmtkIO
+{
+namespace helper
+{
+
+/**
+ * @brief   This class contains helpers to search dicom files on filesystem...
+ */
+class FWDCMTKIO_CLASS_API DicomSearch
+{
+public:
+    /**
+     * @brief Search Dicom files recursively
+     * @param[in] dirPath Root directory
+     * @param[out] dicomFiles Dicom files
+     */
+    FWDCMTKIO_API static void searchRecursively(const ::boost::filesystem::path& dirPath,
+                                                std::vector<std::string>& dicomFiles);
+
+    /**
+     * @brief Check if the file extension matches one of the forbidden extension.
+     * @param[in] filename Filename that must be checked.
+     * @param[in] extensions Extensions to check
+     */
+    FWDCMTKIO_API static bool checkFilenameExtension(const std::string& filename,
+                                                     std::vector<std::string>* extensions);
+};
+
+} // namespace helper
+} // namespace fwDcmtkIO
+
+#endif /*__FWDCMTKIO_HELPER_DICOMSEARCH_HPP__*/
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/namespace.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/namespace.hpp
new file mode 100644
index 0000000..005f710
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/namespace.hpp
@@ -0,0 +1,38 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_NAMESPACE_HPP__
+#define __FWDCMTKIO_NAMESPACE_HPP__
+
+/// fwDcmtkIO contains classes used to pull Dicom images from a pacs using dcmtk library.
+namespace fwDcmtkIO
+{
+
+/// helper contains helper classes needed to deal with the DICOM standard.
+namespace helper
+{
+} //namespace helper
+
+/// reader contains readers used to read the differents image types.
+namespace reader
+{
+
+/// main contains reader helpers to read default images.
+namespace main
+{
+} //namespace main
+
+/// rgblookup contains reader helpers to read images that require a rgb lookup.
+namespace rgblookup
+{
+} //namespace rgblookup
+
+} //namespace reader
+
+} //namespace fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_NAMESPACE_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/IObjectReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/IObjectReader.hpp
new file mode 100644
index 0000000..2425e5d
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/IObjectReader.hpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_IOBJECTREADER_HPP__
+#define __FWDCMTKIO_READER_IOBJECTREADER_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+/**
+ * @brief Base class for Dicom instance reader.
+ */
+class FWDCMTKIO_CLASS_API IObjectReader
+{
+public:
+    /// Constructor
+    FWDCMTKIO_API IObjectReader();
+
+    /// Destructor
+    FWDCMTKIO_API virtual ~IObjectReader();
+
+    /**
+     * @brief Read the series from the group of instances.
+     * @return Returns the created Series.
+     */
+    FWDCMTKIO_API virtual ::fwMedData::Series::sptr read(::fwMedData::DicomSeries::sptr series) = 0;
+
+};
+
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_IOBJECTREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/ImageStorageReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/ImageStorageReader.hpp
new file mode 100644
index 0000000..772e955
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/ImageStorageReader.hpp
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_IMAGESTORAGEREADER_HPP__
+#define __FWDCMTKIO_READER_IMAGESTORAGEREADER_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/reader/IObjectReader.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwTools/Type.hpp>
+
+#include <dcmtk/dcmdata/dcdatset.h>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+/**
+ * @brief Base class for Dicom instance reader.
+ */
+class FWDCMTKIO_CLASS_API ImageStorageReader : public ::fwDcmtkIO::reader::IObjectReader
+{
+public:
+    typedef ::fwMedData::DicomSeries::DicomPathContainerType DicomPathContainerType;
+
+    /// Constructor
+    FWDCMTKIO_API ImageStorageReader();
+
+    /// Destructor
+    FWDCMTKIO_API virtual ~ImageStorageReader();
+
+    /// Override
+    FWDCMTKIO_API virtual ::fwMedData::Series::sptr read(::fwMedData::DicomSeries::sptr series);
+
+protected:
+    /**
+     * @brief Read an image using direct mode
+     * @param[in] image Image
+     * @param[in] instances Instances
+     * @param[in] rows Rows
+     * @param[in] columns Columns
+     * @param[in] depth Depth
+     * @param[in] rescaleSlope Rescale Slope
+     * @param[in] rescaleIntercept Rescale Intercept
+     * @param[in] pixelRepresentation Pixel representation
+     * @param[in] imageType Image Type
+     */
+    FWDCMTKIO_API void directRead(::fwData::Image::sptr image, DicomPathContainerType instances,
+                                  unsigned short rows, unsigned short columns, int depth, double rescaleSlope,
+                                  double rescaleIntercept,
+                                  unsigned short pixelRepresentation, ::fwTools::Type imageType);
+
+    /**
+     * @brief Read an image using direct mode and perform a RGB lookup
+     * @param[in] image Image
+     * @param[in] dataset Dataset of the first instance
+     * @param[in] instances Instances
+     * @param[in] rows Rows
+     * @param[in] columns Columns
+     * @param[in] depth Depth
+     * @param[in] bitsAllocated Number of bits allocated
+     */
+    FWDCMTKIO_API void directRGBLookupRead(::fwData::Image::sptr image, DcmDataset& dataset,
+                                           DicomPathContainerType instances, unsigned short rows,
+                                           unsigned short columns, int depth,
+                                           unsigned short bitsAllocated);
+
+    /**
+     * @brief Read an image using lazy mode
+     * @param[in] image Image
+     * @param[in] series Series
+     * @param[in] rows Rows
+     * @param[in] columns Columns
+     * @param[in] depth Depth
+     * @param[in] rescaleSlope Rescale Slope
+     * @param[in] rescaleIntercept Rescale Intercept
+     * @param[in] pixelRepresentation Pixel Representation
+     * @param[in] imageType Image Type
+     */
+    FWDCMTKIO_API void lazyRead(::fwData::Image::sptr image, ::fwMedData::DicomSeries::sptr series,
+                                unsigned short rows, unsigned short columns, int depth, double rescaleSlope,
+                                double rescaleIntercept,
+                                unsigned short pixelRepresentation, ::fwTools::Type imageType);
+
+    /**
+     * @brief Read an image using lazy mode and perform a RGB lookup
+     * @param[in] image Image
+     * @param[in] series Series
+     * @param[in] dataset Dataset of the first instance
+     * @param[in] instances Instances
+     * @param[in] rows Rows
+     * @param[in] columns Columns
+     * @param[in] depth Depth
+     * @param[in] bitsAllocated Bits allocated
+     * @param[in] imageType Image type
+     */
+    FWDCMTKIO_API void lazyRGBLookupRead(::fwData::Image::sptr image, ::fwMedData::DicomSeries::sptr series,
+                                         DcmDataset& dataset, DicomPathContainerType instances, unsigned short rows,
+                                         unsigned short columns,
+                                         int depth, unsigned short bitsAllocated, ::fwTools::Type imageType);
+
+
+
+
+};
+
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_IMAGESTORAGEREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/ImageTagReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/ImageTagReader.hpp
new file mode 100644
index 0000000..c40d625
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/ImageTagReader.hpp
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_IMAGETAGREADER_HPP__
+#define __FWDCMTKIO_READER_IMAGETAGREADER_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/reader/IObjectReader.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwTools/Type.hpp>
+
+
+namespace fwDcmtkIO
+{
+
+namespace reader
+{
+
+/**
+ * @brief Reader for image tag
+ */
+class FWDCMTKIO_CLASS_API ImageTagReader : public ::fwDcmtkIO::reader::IObjectReader
+{
+public:
+    typedef ::fwMedData::DicomSeries::DicomPathContainerType DicomPathContainerType;
+
+    /// Constructor
+    FWDCMTKIO_API ImageTagReader();
+
+    /// Destructor
+    FWDCMTKIO_API virtual ~ImageTagReader();
+
+    /// Override
+    FWDCMTKIO_API virtual ::fwMedData::Series::sptr read(::fwMedData::DicomSeries::sptr series);
+
+
+};
+
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_IMAGETAGREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/MPPSReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/MPPSReader.hpp
new file mode 100644
index 0000000..3deb31f
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/MPPSReader.hpp
@@ -0,0 +1,46 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_MPPSREADER_HPP__
+#define __FWDCMTKIO_READER_MPPSREADER_HPP__
+
+#include <fwTools/Type.hpp>
+
+#include <fwData/Image.hpp>
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/reader/IObjectReader.hpp"
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+/**
+ * @brief Reader for MPPS
+ */
+class FWDCMTKIO_CLASS_API MPPSReader : public ::fwDcmtkIO::reader::IObjectReader
+{
+public:
+    typedef ::fwMedData::DicomSeries::DicomPathContainerType DicomPathContainerType;
+
+    /// Constructor
+    FWDCMTKIO_API MPPSReader();
+
+    /// Destructor
+    FWDCMTKIO_API virtual ~MPPSReader();
+
+    /// Override
+    FWDCMTKIO_API virtual ::fwMedData::Series::sptr read(::fwMedData::DicomSeries::sptr series);
+
+
+};
+
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_MPPSREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageLazyReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageLazyReader.hpp
new file mode 100644
index 0000000..b1d377a
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageLazyReader.hpp
@@ -0,0 +1,247 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_MAIN_IMAGELAZYREADER_HPP__
+#define __FWDCMTKIO_READER_MAIN_IMAGELAZYREADER_HPP__
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/helper/Codec.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwTools/Type.hpp>
+
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace main
+{
+
+/**
+ * @brief This class is used to read the buffer of a DICOM image in LAZY mode.
+ */
+class FWDCMTKIO_CLASS_API ImageLazyReader
+{
+public:
+    /**
+     * @brief Create an instance buffer according to the image type.
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] instance Path to the instance
+     * @param[in] rescaleSlope Slope parameter
+     * @param[in] rescaleIntercept Intercept parameter
+     * @param[in] pixelRepresentation Pixel representation of the image (signed or unsigned short)
+     * @param[in] imageType Type of the image used to create the buffer
+     */
+    FWDCMTKIO_API static void* createInstanceBuffer(unsigned int rows, unsigned int columns,
+                                                    const ::boost::filesystem::path& instance, double rescaleSlope,
+                                                    double rescaleIntercept,
+                                                    unsigned short pixelRepresentation, ::fwTools::Type imageType)
+    {
+        if (pixelRepresentation == 0)
+        {
+            // Use unsigned char
+            if(imageType.sizeOf() == 1)
+            {
+                return ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< Uint8 >(
+                    rows, columns, instance, rescaleSlope, rescaleIntercept, imageType);
+            }
+            // Use unsigned short
+            else
+            {
+                return ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< Uint16 >(
+                    rows, columns, instance, rescaleSlope, rescaleIntercept, imageType);
+            }
+        }
+        else
+        {
+            // Use signed chart
+            if(imageType.sizeOf() == 1)
+            {
+                return ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< Sint8 >(
+                    rows, columns, instance, rescaleSlope, rescaleIntercept, imageType);
+            }
+            // Use signed short
+            else
+            {
+                return ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< Sint16 >(
+                    rows, columns, instance, rescaleSlope, rescaleIntercept, imageType);
+            }
+        }
+    }
+
+
+protected:
+
+    /**
+     * @brief Create an instance buffer according to the image type.
+     * The template T is used to determine if we must use signed or unsigned short when reading pixels.
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] instance Path to the instance
+     * @param[in] rescaleSlope Slope parameter
+     * @param[in] rescaleIntercept Intercept parameter
+     * @param[in] imageType Type of the image used to create the buffer
+     */
+    template< typename T >
+    FWDCMTKIO_API static void* createInstanceBuffer(unsigned int rows, unsigned int columns,
+                                                    const ::boost::filesystem::path& instance, double rescaleSlope,
+                                                    double rescaleIntercept,
+                                                    ::fwTools::Type imageType)
+    {
+        void* tempoBuffer = 0;
+
+        //Copy the temporary buffer to the final buffer
+        if (imageType == ::fwTools::Type::s_INT8)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::int8_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_INT16)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::int16_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_INT32)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::int32_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_INT64)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::int64_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT8)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::uint8_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT16)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::uint16_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT32)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::uint32_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT64)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, ::boost::uint64_t >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_FLOAT)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, float >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_DOUBLE)
+        {
+            tempoBuffer = ::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer< T, double >(
+                rows, columns, instance, rescaleSlope, rescaleIntercept);
+        }
+
+        return tempoBuffer;
+
+    }
+
+    /**
+     * @brief Create an instance buffer according to the image type.
+     * The template T is used to determine if we must use signed or unsigned short when reading pixels.
+     * The template U is used to determine what kind of buffer must be created.
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] instance Path to the instance
+     * @param[in] rescaleSlope Slope parameter
+     * @param[in] rescaleIntercept Intercept parameter
+     */
+    template< typename T, typename U >
+    FWDCMTKIO_API static U* createInstanceBuffer(unsigned int rows, unsigned int columns,
+                                                 const ::boost::filesystem::path& instance, double rescaleSlope,
+                                                 double rescaleIntercept)
+    {
+        DcmFileFormat fileFormat;
+        OFCondition status;
+        DcmDataset* dataset;
+
+        // Register codecs
+        ::fwDcmtkIO::helper::Codec::registerCodecs();
+
+        // Create temporary buffer
+        U* tempoBuffer = new U[rows * columns];
+
+        // Read instance
+        const std::string filename = instance.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+
+        dataset = fileFormat.getDataset();
+
+        // Decompress data set if compressed
+        dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+
+        if(sizeof(T) == 1)
+        {
+            const Uint8* pixelData;
+            dataset->findAndGetUint8Array(DCM_PixelData, pixelData);
+            OSLM_WARN_IF("Unable to read pixel data.", !pixelData);
+
+            for (unsigned int x = 0; x < columns; ++x)
+            {
+                for (unsigned int y = 0; y < rows; ++y)
+                {
+                    unsigned int position = y + (x * rows);
+                    T value;
+                    value                 = static_cast<T>((pixelData) ? pixelData[position] : 0);
+                    tempoBuffer[position] = static_cast<U>(rescaleSlope * value + rescaleIntercept);
+                }
+            }
+        }
+        else
+        {
+            const Uint16* pixelData;
+            dataset->findAndGetUint16Array(DCM_PixelData, pixelData);
+            OSLM_WARN_IF("Unable to read pixel data.", !pixelData);
+
+            for (unsigned int x = 0; x < columns; ++x)
+            {
+                for (unsigned int y = 0; y < rows; ++y)
+                {
+                    unsigned int position = y + (x * rows);
+                    T value;
+                    value                 = static_cast<T>((pixelData) ? pixelData[position] : 0);
+                    tempoBuffer[position] = static_cast<U>(rescaleSlope * value + rescaleIntercept);
+                }
+            }
+        }
+
+
+        // Clean up codecs
+        ::fwDcmtkIO::helper::Codec::cleanup();
+
+        return tempoBuffer;
+    }
+
+
+};
+
+} //main
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_MAIN_IMAGELAZYREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageLazyStream.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageLazyStream.hpp
new file mode 100644
index 0000000..470f731
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageLazyStream.hpp
@@ -0,0 +1,140 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_MAIN_IMAGELAZYSTREAM_HPP__
+#define __FWDCMTKIO_READER_MAIN_IMAGELAZYSTREAM_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMemory/stream/in/IFactory.hpp>
+#include <fwTools/Type.hpp>
+
+#include <boost/iostreams/stream.hpp>
+
+#include <vector>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace main
+{
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Basic class used to store informations in order to read DICOM images
+ */
+class FWDCMTKIO_CLASS_API ImageLazyInformation
+{
+public:
+    typedef SPTR ( ImageLazyInformation ) sptr;
+
+    /// Dicom series used to get the paths of the instances
+    ::fwMedData::DicomSeries::sptr m_dicomSeries;
+
+    /// Number of rows in the image
+    unsigned int m_rows;
+
+    /// Number of columns in the image
+    unsigned int m_columns;
+
+    /// Depth of the image
+    unsigned int m_depth;
+
+    /// Rescale slope
+    double m_rescaleSlope;
+
+    /// Rescale intercept
+    double m_rescaleIntercept;
+
+    /// Pixel representation
+    unsigned short m_pixelRepresentation;
+
+    /// Image type
+    ::fwTools::Type m_imageType;
+
+};
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Class used to build a std::istream using the ::boost::iostreams api
+ */
+class FWDCMTKIO_CLASS_API ImageLazySource
+{
+public:
+    typedef char char_type;
+    typedef ::boost::iostreams::source_tag category;
+
+    /**
+     * @brief Constructor
+     * @param[in] dcmInfo DICOM information
+     */
+    ImageLazySource( ImageLazyInformation::sptr dcmInfo );
+
+    /**
+     * @brief Method to read n bytes in dicom buffer and write it in s.
+     * @param[in] n Number of bytes
+     * @param[out] s Destination buffer
+     */
+    std::streamsize read(char* s, std::streamsize n);
+
+private:
+    /// DICOM information
+    ImageLazyInformation::sptr m_dcmInfo;
+
+    /// Frame size
+    size_t m_frameSize;
+
+    /// Current frame
+    int m_currentFrame;
+
+    /// Current position in the frame
+    size_t m_currentPosition;
+
+    /// Current frame
+    char* m_frame;
+
+    /// Current path
+    ::fwMedData::DicomSeries::DicomPathContainerType::const_iterator m_currentPath;
+
+};
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Class used to perform a lazy reading of dicom images with fw4spl system
+ */
+class FWDCMTKIO_CLASS_API ImageLazyStream : public ::fwMemory::stream::in::IFactory
+{
+
+public:
+
+    /**
+     * @brief Constructor. Builds the ::fwMemory::stream::in::IFactory with few dicom information
+     * @param[in] dcmInfo DICOM information
+     */
+    ImageLazyStream( ImageLazyInformation::sptr dcmInfo );
+
+protected:
+
+    /// Returns the istream on dicom image buffer
+    SPTR(std::istream) get();
+
+    /// To conserve dicom information
+    ImageLazyInformation::sptr m_dcmInfo;
+};
+
+//------------------------------------------------------------------------------
+
+} //main
+} //reader
+} //fwDcmtkIO
+
+#endif // __FWDCMTKIO_READER_MAIN_IMAGELAZYSTREAM_HPP__
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageReader.hpp
new file mode 100644
index 0000000..7913d2a
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/main/ImageReader.hpp
@@ -0,0 +1,284 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_MAIN_IMAGEREADER_HPP__
+#define __FWDCMTKIO_READER_MAIN_IMAGEREADER_HPP__
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace main
+{
+
+/**
+ * @brief This class is used to read the buffer of a DICOM image in DIRECT mode.
+ */
+class FWDCMTKIO_CLASS_API ImageReader
+{
+public:
+    typedef ::fwMedData::DicomSeries::DicomPathContainerType DicomPathContainerType;
+
+    /**
+     * @brief Fill the buffer of an image
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] depth Number of frames
+     * @param[in] instances Paths to the instances
+     * @param[in] destination Destination buffer
+     * @param[in] rescaleSlope Slope parameter
+     * @param[in] rescaleIntercept Intercept parameter
+     * @param[in] pixelRepresentation Pixel representation of the image (signed or unsigned short)
+     * @param[in] imageType Type of the image used to create the buffer
+     */
+    FWDCMTKIO_API static void fillImageBuffer(unsigned int rows, unsigned int columns, unsigned int depth,
+                                              DicomPathContainerType& instances, void* destination, double rescaleSlope,
+                                              double rescaleIntercept,
+                                              unsigned short pixelRepresentation, ::fwTools::Type imageType)
+    {
+        if (pixelRepresentation == 0)
+        {
+            // Use unsigned char
+            if(imageType.sizeOf() == 1)
+            {
+                ::fwDcmtkIO::reader::main::ImageReader::fillImageBuffer< Uint8 >(
+                    rows, columns, depth, instances, destination, rescaleSlope, rescaleIntercept, imageType);
+            }
+            // Use unsigned short
+            else
+            {
+                ::fwDcmtkIO::reader::main::ImageReader::fillImageBuffer< Uint16 >(
+                    rows, columns, depth, instances, destination, rescaleSlope, rescaleIntercept, imageType);
+            }
+        }
+        else
+        {
+            // Use signed char
+            if(imageType.sizeOf() == 1)
+            {
+                ::fwDcmtkIO::reader::main::ImageReader::fillImageBuffer< Sint8 >(
+                    rows, columns, depth, instances, destination, rescaleSlope, rescaleIntercept, imageType);
+            }
+            // Use signed short
+            else
+            {
+                ::fwDcmtkIO::reader::main::ImageReader::fillImageBuffer< Sint16 >(
+                    rows, columns, depth, instances, destination, rescaleSlope, rescaleIntercept, imageType);
+            }
+        }
+    }
+
+    /**
+     * @brief Create the signed short or unsigned short temporary buffer used to fill the image buffer
+     * The template T is used to determine if we must use signed or unsigned short to create the buffer
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] depth Number of frames
+     * @param[in] instances Paths to the instances
+     */
+    template< typename T >
+    FWDCMTKIO_API static T* createTemporaryBuffer(unsigned int rows, unsigned int columns, unsigned int depth,
+                                                  DicomPathContainerType& instances)
+    {
+        DcmFileFormat fileFormat;
+        OFCondition status;
+        DcmDataset* dataset;
+
+        T* tempoBuffer     = new T[rows*columns*depth];
+        uint32_t sliceSize = rows*columns;
+
+        uint32_t copySize;
+        if(instances.size() == 1 )
+        {
+            copySize = rows*columns*depth;
+        }
+        else
+        {
+            copySize = rows*columns;
+        }
+
+        // Slice index
+        unsigned short z = 0;
+
+        // Read every instances
+        for(DicomPathContainerType::value_type file: instances)
+        {
+            const std::string filename = file.second.string();
+            status = fileFormat.loadFile(filename.c_str());
+            FW_RAISE_IF("Unable to read the file: \""+file.second.string()+"\"", status.bad());
+
+            dataset = fileFormat.getDataset();
+
+            // Decompress data set if compressed
+            dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+            const Uint16* pixelData;
+            dataset->findAndGetUint16Array(DCM_PixelData, pixelData);
+
+            if(pixelData)
+            {
+                //Add the slice to the temporary buffer
+                memcpy(tempoBuffer+z*sliceSize, pixelData, copySize*sizeof(T));
+                ++z;
+            }
+            else
+            {
+                SLM_WARN("There is no pixel data in file \"" + file.second.string() + "\".");
+            }
+
+        }
+
+        return tempoBuffer;
+    }
+
+
+protected:
+
+    /**
+     * @brief Fill the buffer of an image
+     * The template T is used to determine if we must use signed or unsigned short when reading pixels.
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] depth Number of frames
+     * @param[in] instances Paths to the instances
+     * @param[in] destination Destination buffer
+     * @param[in] rescaleSlope Slope parameter
+     * @param[in] rescaleIntercept Intercept parameter
+     * @param[in] imageType Type of the image used to create the buffer
+     */
+    template< typename T >
+    FWDCMTKIO_API static void fillImageBuffer(unsigned int rows, unsigned int columns, unsigned int depth,
+                                              DicomPathContainerType& instances, void* destination, double rescaleSlope,
+                                              double rescaleIntercept,
+                                              ::fwTools::Type imageType)
+    {
+        T* tempoBuffer = ::fwDcmtkIO::reader::main::ImageReader::createTemporaryBuffer<T>(
+            rows, columns, depth, instances);
+
+        //Copy the temporary buffer to the final buffer
+        if (imageType == ::fwTools::Type::s_INT8)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::int8_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_INT16)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::int16_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_INT32)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::int32_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_INT64)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::int64_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT8)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::uint8_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT16)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::uint16_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT32)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::uint32_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_UINT64)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< ::boost::uint64_t >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_FLOAT)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< float >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+        else if (imageType == ::fwTools::Type::s_DOUBLE)
+        {
+            ::fwDcmtkIO::reader::main::ImageReader::copyBuffer< double >(
+                rows, columns, depth, tempoBuffer, destination, rescaleSlope,
+                rescaleIntercept);
+        }
+
+        delete tempoBuffer;
+
+    }
+
+
+    /**
+     * @brief Copy the temporary buffer to the image buffer
+     * The template T is used to determine the type of the final image buffer
+     * The template U is used to determine the type of the temporary buffer
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] depth Number of frames
+     * @param[in] source Temporary buffer
+     * @param[in] destination Final image buffer
+     * @param[in] rescaleSlope Slope parameter
+     * @param[in] rescaleIntercept Intercept parameter
+     */
+    template< typename T, typename U >
+    FWDCMTKIO_API static void copyBuffer(unsigned int rows, unsigned int columns, unsigned int depth,
+                                         U* source, void* destination, double rescaleSlope, double rescaleIntercept)
+    {
+        T* arrayBuffer = static_cast< T* >(destination);
+        unsigned short x, y, z;
+        unsigned int frameSize = columns*rows;
+        x = y = z = 0;
+        for(x = 0; x < columns; ++x)
+        {
+            for(y = 0; y < rows; ++y)
+            {
+                unsigned int yshift = x*rows;
+
+                for(z = 0; z < depth; ++z)
+                {
+                    unsigned int position = y + yshift + z*frameSize;
+                    T value               = (T)source[position];
+                    value                 = static_cast< T >(rescaleSlope * value + rescaleIntercept);
+                    arrayBuffer[position] = value;
+                }
+            }
+        }
+    }
+
+
+};
+
+} //main
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_MAIN_IMAGEREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyReader.hpp
new file mode 100644
index 0000000..b612f07
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyReader.hpp
@@ -0,0 +1,146 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPLAZYREADER_HPP__
+#define __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPLAZYREADER_HPP__
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwDcmtkIO/config.hpp"
+#include "fwDcmtkIO/helper/Codec.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwTools/Type.hpp>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace rgblookup
+{
+
+/**
+ * @brief This class is used to read the buffer of a DICOM image in LAZY mode when a pixel lookup must be performed.
+ */
+class FWDCMTKIO_CLASS_API ImageRGBLookupLazyReader
+{
+public:
+
+    /**
+     * @brief Create an instance buffer according to the image type.
+     * The template T is used to determine color format
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] instance Path to the instance
+     * @param[in] redLookup Red lookup table
+     * @param[in] greenLookup Red lookup table
+     * @param[in] blueLookup Red lookup table
+     * @param[in] pixelValueBitsAllocated Pixel value bits allocated
+     */
+    template< typename T>
+    FWDCMTKIO_API static void* createInstanceBuffer(unsigned int rows, unsigned int columns,
+                                                    const ::boost::filesystem::path& instance, const T* redLookup,
+                                                    const T* greenLookup,
+                                                    const T* blueLookup, unsigned short pixelValueBitsAllocated)
+    {
+        if(pixelValueBitsAllocated == 16)
+        {
+            return ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyReader::createInstanceBuffer<T, Uint16>(
+                rows, columns, instance, redLookup, greenLookup, blueLookup);
+        }
+        else
+        {
+            return ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyReader::createInstanceBuffer<T, Uint8>(
+                rows, columns, instance, redLookup, greenLookup, blueLookup);
+        }
+    }
+
+    /**
+     * @brief Create an instance buffer according to the image type.
+     * The template T is used to determine color format
+     * The template U is used to determine pixel value format
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] instance Path to the instance
+     * @param[in] redLookup Red lookup table
+     * @param[in] greenLookup Red lookup table
+     * @param[in] blueLookup Red lookup table
+     */
+    template< typename T, typename U >
+    FWDCMTKIO_API static T* createInstanceBuffer(unsigned int rows, unsigned int columns,
+                                                 const ::boost::filesystem::path& instance, const T* redLookup,
+                                                 const T* greenLookup,
+                                                 const T* blueLookup)
+    {
+        DcmFileFormat fileFormat;
+        OFCondition status;
+        DcmDataset* dataset;
+
+        // Register codecs
+        ::fwDcmtkIO::helper::Codec::registerCodecs();
+
+        // Create temporary buffer
+        T* tempoBuffer = new T[rows * columns * 3]; // 3 colors (RGB)
+
+        // Read instance
+        const std::string filename = instance.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        dataset = fileFormat.getDataset();
+
+        // Decompress data set if compressed
+        dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+        // Read pixels
+        const U* pixelData;
+        if(sizeof(U) == 1)
+        {
+            const Uint8* pdata;
+            dataset->findAndGetUint8Array(DCM_PixelData, pdata);
+            pixelData = (U*)pdata;
+        }
+        else
+        {
+            const Uint16* pdata;
+            dataset->findAndGetUint16Array(DCM_PixelData, pdata);
+            pixelData = (U*)pdata;
+        }
+
+        OSLM_WARN_IF("Unable to read pixel data.", !pixelData);
+
+        for (unsigned int x = 0; x < columns; ++x)
+        {
+            for (unsigned int y = 0; y < rows; ++y)
+            {
+                unsigned int position = y + (x * rows);
+                U value               = pixelData[position];
+                tempoBuffer[position*3]   = static_cast< T >((redLookup[value]/(double)0xffff)*256);
+                tempoBuffer[position*3+1] = static_cast< T >((greenLookup[value]/(double)0xffff)*256);
+                tempoBuffer[position*3+2] = static_cast< T >((blueLookup[value]/(double)0xffff)*256);
+            }
+        }
+
+
+        // Clean up codecs
+        ::fwDcmtkIO::helper::Codec::cleanup();
+
+        return tempoBuffer;
+    }
+
+
+};
+
+} //rgblookup
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPLAZYREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.hpp
new file mode 100644
index 0000000..ba2dc6e
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.hpp
@@ -0,0 +1,146 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPLAZYSTREAM_HPP__
+#define __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPLAZYSTREAM_HPP__
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMemory/stream/in/IFactory.hpp>
+#include <fwTools/Type.hpp>
+
+#include <boost/iostreams/stream.hpp>
+
+#include <vector>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace rgblookup
+{
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Basic class used to store informations in order to read DICOM images
+ */
+class FWDCMTKIO_CLASS_API ImageRGBLookupLazyInformation
+{
+public:
+    typedef SPTR ( ImageRGBLookupLazyInformation ) sptr;
+
+    /// Dicom series used to get the paths of the instances
+    ::fwMedData::DicomSeries::sptr m_dicomSeries;
+
+    /// Number of rows in the image
+    unsigned int m_rows;
+
+    /// Number of columns in the image
+    unsigned int m_columns;
+
+    /// Depth of the image
+    unsigned int m_depth;
+
+    /// Bits allocated
+    unsigned short m_bitsAllocated;
+
+    /// Pixel value bits allocated
+    unsigned short m_pixelValueBitsAllocated;
+
+    /// Image type
+    ::fwTools::Type m_imageType;
+
+};
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Class used to build a std::istream using the ::boost::iostreams api
+ */
+class FWDCMTKIO_CLASS_API ImageRGBLookupLazySource
+{
+public:
+    typedef char char_type;
+    typedef ::boost::iostreams::source_tag category;
+
+    /**
+     * @brief Constructor
+     * @param[in] dcmInfo DICOM information
+     */
+    ImageRGBLookupLazySource( ImageRGBLookupLazyInformation::sptr dcmInfo );
+
+    /**
+     * @brief Method to read n bytes in dicom buffer and write it in s.
+     * @param[in] size Number of bytes
+     * @param[out] stream Destination buffer
+     */
+    std::streamsize read(char* stream, std::streamsize size);
+
+private:
+    /// DICOM information
+    ImageRGBLookupLazyInformation::sptr m_dcmInfo;
+
+    /// Frame size
+    size_t m_frameSize;
+
+    /// Current frame
+    int m_currentFrame;
+
+    /// Current position in the frame
+    size_t m_currentPosition;
+
+    /// Current frame
+    char* m_frame;
+
+    /// Current path
+    ::fwMedData::DicomSeries::DicomPathContainerType::const_iterator m_currentPath;
+
+    /// Red lookup table
+    void* m_redLookup;
+
+    /// Green lookup table
+    void* m_greenLookup;
+
+    /// Blue lookup table
+    void* m_blueLookup;
+
+};
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Class used to perform a lazy reading of dicom images with fw4spl system
+ */
+class FWDCMTKIO_CLASS_API ImageRGBLookupLazyStream : public ::fwMemory::stream::in::IFactory
+{
+
+public:
+
+    /**
+     * @brief Constructor. Builds the ::fwMemory::stream::in::IFactory with few dicom information
+     * @param[in] dcmInfo DICOM information
+     */
+    ImageRGBLookupLazyStream( ImageRGBLookupLazyInformation::sptr dcmInfo );
+
+protected:
+
+    /// Returns the istream on dicom image buffer
+    SPTR(std::istream) get();
+
+    /// To conserve dicom information
+    ImageRGBLookupLazyInformation::sptr m_dcmInfo;
+};
+
+//------------------------------------------------------------------------------
+
+} //rgblookup
+} //reader
+} //fwDcmtkIO
+
+#endif // __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPLAZYSTREAM_HPP__
diff --git a/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupReader.hpp b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupReader.hpp
new file mode 100644
index 0000000..1d96cf2
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/include/fwDcmtkIO/reader/rgblookup/ImageRGBLookupReader.hpp
@@ -0,0 +1,96 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPREADER_HPP__
+#define __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPREADER_HPP__
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwDcmtkIO/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace rgblookup
+{
+
+/**
+ * @brief This class is used to read the buffer of a DICOM image in DIRECT mode when a pixel lookup must be performed.
+ * @note This class has only been tested on a single frame DICOM file
+ */
+class FWDCMTKIO_CLASS_API ImageRGBLookupReader
+{
+public:
+    typedef ::fwMedData::DicomSeries::DicomPathContainerType DicomPathContainerType;
+
+    /**
+     * @brief Fill the buffer of an image
+     * The template T is used to determine color format
+     * The template U is used to determine pixel value format
+     * @param[in] rows Number of rows
+     * @param[in] columns Number of columns
+     * @param[in] depth Number of frames
+     * @param[in] instances Paths to the instances
+     * @param[in] destination Destination buffer
+     * @param[in] redLookup Red color lookup table
+     * @param[in] greenLookup Green color lookup table
+     * @param[in] blueLookup Blue color lookup table
+     *
+     */
+    template< typename T, typename U >
+    FWDCMTKIO_API static void fillImageBuffer(unsigned int rows, unsigned int columns, unsigned int depth,
+                                              DicomPathContainerType& instances, void* destination, const T* redLookup,
+                                              const T* greenLookup,
+                                              const T* blueLookup)
+    {
+        U* tempoBuffer = ::fwDcmtkIO::reader::main::ImageReader::createTemporaryBuffer<U>(
+            rows, columns, depth, instances);
+
+
+        T* arrayBuffer = static_cast< T* >(destination);
+        unsigned short x, y, z;
+        unsigned int frameSize = columns * rows;
+        x = y = z = 0;
+        for (x = 0; x < columns; ++x)
+        {
+            for (y = 0; y < rows; ++y)
+            {
+                unsigned int yshift = x * rows;
+
+                for (z = 0; z < depth; ++z)
+                {
+                    unsigned int position = y + yshift + z * frameSize;
+                    U value               = tempoBuffer[position];
+
+                    arrayBuffer[position*3]   = static_cast< T >((redLookup[value]/(double)0xffff)*256);
+                    arrayBuffer[position*3+1] = static_cast< T >((greenLookup[value]/(double)0xffff)*256);
+                    arrayBuffer[position*3+2] = static_cast< T >((blueLookup[value]/(double)0xffff)*256);
+
+                }
+            }
+        }
+
+        delete tempoBuffer;
+
+    }
+
+
+};
+
+} //rgblookup
+} //reader
+} //fwDcmtkIO
+
+
+#endif /* __FWDCMTKIO_READER_RGBLOOKUP_IMAGERGBLOOKUPREADER_HPP__ */
diff --git a/SrcLib/io/fwDcmtkIO/rc/test/DicomMetadataJsonGenerator.sh b/SrcLib/io/fwDcmtkIO/rc/test/DicomMetadataJsonGenerator.sh
new file mode 100644
index 0000000..3a2a9c6
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/rc/test/DicomMetadataJsonGenerator.sh
@@ -0,0 +1,113 @@
+#!/bin/sh
+# Simple script used to generate the files containing metadata from DICOM Series
+# When executing the script, you must be in the DICOM foler containing the images
+# Don't forget to add the file 'DICOMFILES' to the DICOM folder
+
+# ===========================================
+# Generate the file
+# ===========================================
+generateFile()
+{
+    echo "{"
+    
+    extractValue $1 "0020,000e" "SeriesInstanceUID"
+    extractValue $1 "0008,0060" "Modality"
+    extractValue $1 "0008,0021" "SeriesDate"
+    extractValue $1 "0008,0031" "SeriesTime"
+    extractValue $1 "0008,103e" "SeriesDescription"
+    extractValue $1 "0008,1050" "PerformingPhysiciansName"
+    extractValue $1 "0010,0020" "PatientID"
+    extractValue $1 "0010,0010" "PatientName"
+    extractValue $1 "0010,0030" "PatientBirthDate"
+    extractValue $1 "0010,0040" "PatientSex"
+    extractValue $1 "0020,000d" "StudyInstanceUID"
+    extractValue $1 "0008,0020" "StudyDate"
+    extractValue $1 "0008,0030" "StudyTime"
+    extractValue $1 "0008,0090" "ReferringPhysicianName"
+    extractValue $1 "0008,1030" "StudyDescription"
+    extractValue $1 "0010,1010" "PatientAge"
+    extractValue $1 "0008,0080" "InstitutionName"
+    extractValue $1 "0028,0030" "PixelSpacing"
+    extractValue $1 "0018,0050" "SliceThickness"
+    extractValue $1 "0020,0032" "ImagePositionPatient"
+    extractValue $1 "0028,0010" "Rows"
+    extractValue $1 "0028,0011" "Columns"
+    extractValue $1 "0028,1050" "WindowCenter"
+    extractValue $1 "0028,1051" "WindowWidth"
+    extractValue $1 "0028,0004" "PhotometricInterpretation"
+    extractValue $1 "0028,0100" "BitsAllocated"
+    
+
+
+    echo "}"
+}
+
+# ===========================================
+# Extract a value and print it in Json format
+# ===========================================
+extractValue()
+{
+    #name=$(dcmdump $1 --search "$2" -s | sed "s/.* //g");
+    name=$3
+    var=$(dcmdump $1 --search "$2" -s | cut -d" " -f 3- | cut -d"#" -f1 | sed "s/\\\/\\\\\\\/g" | sed "s/ *$//g" | sed "s/^=//" | sed "s/^\[//" | sed "s/\]$//");
+    
+    [ "$var" = "" ] && var="";     #The tag is not defined
+    
+    [ "$var" = "(no value available)" ] && var="";  #The value is not defined
+    
+    echo -n "\t\"$name\": \"$var\""
+    
+    # We don't add a comma for the last value
+    if [ "$2" != "0028,0100" ]
+    then
+        echo ","
+    else
+        echo "\n"
+    fi
+}
+
+# ===========================================
+# Get a value
+# ===========================================
+getValue()
+{
+    var=$(dcmdump $1 --search "$2" -s | cut -d" " -f 3- | cut -d"#" -f1 | sed "s/\\\/\\\\\\\/g" | sed "s/ *$//g" | sed "s/^=//" | sed "s/^\[//" | sed "s/\]$//");
+    
+    [ "$var" = "" ] && var="";     #The tag is not defined
+    
+    [ "$var" = "(no value available)" ] && var="";  #The value is not defined
+    
+    echo "$var";
+}
+
+
+# ===========================================
+# ===========================================
+# ===========================================
+
+if [ $# != 1 ]
+then
+    return 1
+fi
+
+cd $1   #You must specify the dicom folder
+rm -rf META
+mkdir META
+
+for file in `cat DICOMFILES`
+do
+    folder=$(echo "$file" | sed "s/^.\///" | sed "s/\/im.*//g") # | sed "s/\//_/g")
+    SeriesInstanceUID=$(getValue $file "0020,000e")
+    echo -n "$folder/$SeriesInstanceUID ... "
+    mkdir -p ./META/$folder
+    generateFile $file >> "./META/$folder/$SeriesInstanceUID.json"
+    sed "s/\\\/\\\\\\\/g" -i META/$folder/$SeriesInstanceUID.json  #escape backslashes
+    echo "ok" 
+done
+
+
+
+
+
+
+
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/DicomSeriesDBReader.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/DicomSeriesDBReader.cpp
new file mode 100644
index 0000000..eec3da3
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/DicomSeriesDBReader.cpp
@@ -0,0 +1,474 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/DicomSeriesDBReader.hpp"
+
+#include "fwDcmtkIO//helper/Codec.hpp"
+#include "fwDcmtkIO/helper/DicomDir.hpp"
+#include "fwDcmtkIO/helper/DicomSearch.hpp"
+#include "fwDcmtkIO/reader/ImageTagReader.hpp"
+#include "fwDcmtkIO/reader/MPPSReader.hpp"
+
+#include <fwDataIO/reader/registry/macros.hpp>
+
+#include <fwDcmtkTools/Dictionary.hpp>
+
+#include <fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp>
+#include <fwDicomIOFilter/exceptions/FilterFailure.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+#include <fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+
+fwDataIOReaderRegisterMacro( ::fwDcmtkIO::DicomSeriesDBReader );
+
+namespace fwDcmtkIO
+{
+
+//------------------------------------------------------------------------------
+
+DicomSeriesDBReader::DicomSeriesDBReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableFolder< IObjectReader >(this),
+    ::fwData::location::enableMultiFiles< IObjectReader >(this),
+    m_isDicomdirActivated(false)
+{
+    SLM_TRACE_FUNC();
+
+    // Load dictionary
+    ::fwDcmtkTools::Dictionary::loadDictionary();
+
+    // Register codecs
+    ::fwDcmtkIO::helper::Codec::registerCodecs();
+
+    // Added to avoid parsing error while reading radioscopic/fluoroscopic dicoms.
+    dcmIgnoreParsingErrors.set(OFTrue);
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeriesDBReader::~DicomSeriesDBReader()
+{
+    // Clean up codecs
+    ::fwDcmtkIO::helper::Codec::cleanup();
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeriesDBReader::FilenameContainerType DicomSeriesDBReader::getFilenames()
+{
+    FilenameContainerType filenames;
+    if(::fwData::location::have < ::fwData::location::Folder, ::fwDataIO::reader::IObjectReader > (this))
+    {
+        // Try to read dicomdir file
+        if(!m_isDicomdirActivated || (m_isDicomdirActivated &&
+                                      !::fwDcmtkIO::helper::DicomDir::readDicomDir(this->getFolder(),
+                                                                                   filenames)))
+        {
+            // Recursively search for dicom files
+            try
+            {
+                ::fwDcmtkIO::helper::DicomSearch::searchRecursively(this->getFolder(), filenames);
+            }
+            catch(const std::runtime_error& e)
+            {
+                throw e;
+            }
+        }
+    }
+    else if(::fwData::location::have < ::fwData::location::MultiFiles, ::fwDataIO::reader::IObjectReader > (this))
+    {
+        for(::boost::filesystem::path file :  this->getFiles())
+        {
+            filenames.push_back(file.string());
+        }
+    }
+
+    return filenames;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReader::read()
+{
+    SLM_TRACE_FUNC();
+
+    // Get filenames
+    FilenameContainerType filenames = this->getFilenames();
+
+    // Read Dicom Series
+    this->addSeries(filenames);
+
+    // Apply Default filters
+    if(!m_dicomFilterType.empty())
+    {
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(m_dicomFilterType);
+        ::fwDicomIOFilter::helper::Filter::applyFilter(m_dicomSeriesContainer,filter, true);
+    }
+
+    // Read series
+    for(::fwMedData::DicomSeries::sptr series :  m_dicomSeriesContainer)
+    {
+        this->convertDicomSeries(series);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReader::readFromDicomSeriesDB(::fwMedData::SeriesDB::sptr dicomSeriesDB)
+{
+    // Read series
+    for(::fwMedData::Series::sptr series :  dicomSeriesDB->getContainer())
+    {
+        ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(series);
+        OSLM_ASSERT("Trying to read a series which is not a DicomSeries.", dicomSeries);
+        this->convertDicomSeries(dicomSeries, true);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomSeriesDBReader::isDicomDirAvailable()
+{
+    std::vector<std::string> filenames;
+    bool result = ::fwDcmtkIO::helper::DicomDir::readDicomDir(this->getFolder(), filenames);
+    return result && !filenames.empty();
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReader::addSeries(const std::vector< std::string >& filenames)
+{
+    DcmFileFormat fileFormat;
+    for(std::string filename :  filenames)
+    {
+        OFCondition status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+
+        DcmDataset* dataset = fileFormat.getDataset();
+
+        // Create Series
+        this->createSeries(dataset, filename);
+
+    }
+
+    // Fill series
+    for(::fwMedData::DicomSeries::sptr series :  m_dicomSeriesContainer)
+    {
+        // Compute number of instances
+        series->setNumberOfInstances(series->getLocalDicomPaths().size());
+
+        // Get first instance filename
+        const std::string filename = series->getLocalDicomPaths().begin()->second.string();
+
+        // Load first instance
+        DcmFileFormat fileFormat;
+        OFCondition status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        DcmDataset* dataset = fileFormat.getDataset();
+
+        // Create data objects from first instance
+        ::fwMedData::Patient::sptr patient     = this->createPatient(dataset);
+        ::fwMedData::Study::sptr study         = this->createStudy(dataset);
+        ::fwMedData::Equipment::sptr equipment = this->createEquipment(dataset);
+
+        // Fill series
+        series->setPatient(patient);
+        series->setStudy(study);
+        series->setEquipment(equipment);
+    }
+
+
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Patient::sptr DicomSeriesDBReader::createPatient(DcmDataset* dataset)
+{
+    ::fwMedData::Patient::sptr result;
+    OFString data;
+
+    // Get Patient ID
+    dataset->findAndGetOFString(DCM_PatientID,data);
+    ::std::string patientID = data.c_str();
+
+    // Check if the patient already exists
+    if(m_patientMap.find(patientID) == m_patientMap.end())
+    {
+        result                  = ::fwMedData::Patient::New();
+        m_patientMap[patientID] = result;
+
+        //Patient ID
+        result->setPatientId(patientID);
+
+        //Patient Name
+        dataset->findAndGetOFString(DCM_PatientName,data);
+        result->setName(data.c_str());
+
+        //Patient Birthday
+        dataset->findAndGetOFString(DCM_PatientBirthDate,data);
+        result->setBirthdate(data.c_str());
+
+        //Patient Sex
+        dataset->findAndGetOFString(DCM_PatientSex,data);
+        result->setSex(data.c_str());
+
+    }
+    else
+    {
+        result = m_patientMap[patientID];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Study::sptr DicomSeriesDBReader::createStudy(DcmDataset* dataset)
+{
+    ::fwMedData::Study::sptr result;
+    OFString data;
+
+    // Get Study ID
+    dataset->findAndGetOFString(DCM_StudyInstanceUID,data);
+    ::std::string studyID = data.c_str();
+
+    // Check if the study already exists
+    if(m_studyMap.find(studyID) == m_studyMap.end())
+    {
+        result              = ::fwMedData::Study::New();
+        m_studyMap[studyID] = result;
+
+        //Study ID
+        result->setInstanceUID(studyID);
+
+        //Study Date
+        dataset->findAndGetOFString(DCM_StudyDate,data);
+        result->setDate(data.c_str());
+
+        //Study Time
+        dataset->findAndGetOFString(DCM_StudyTime,data);
+        result->setTime(data.c_str());
+
+        //Referring Physician Name
+        dataset->findAndGetOFString(DCM_ReferringPhysicianName,data);
+        result->setReferringPhysicianName(data.c_str());
+
+        //Study Description
+        dataset->findAndGetOFString(DCM_StudyDescription,data);
+        result->setDescription(data.c_str());
+
+        //Study Patient Age
+        dataset->findAndGetOFString(DCM_PatientAge,data);
+        result->setPatientAge(data.c_str());
+
+    }
+    else
+    {
+        result = m_studyMap[studyID];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Equipment::sptr DicomSeriesDBReader::createEquipment(DcmDataset* dataset)
+{
+    ::fwMedData::Equipment::sptr result;
+    OFString data;
+
+    // Get Institution Name
+    dataset->findAndGetOFString(DCM_InstitutionName,data);
+    ::std::string institutionName = data.c_str();
+
+    // Check if the equipment already exists
+    if(m_equipmentMap.find(institutionName) == m_equipmentMap.end())
+    {
+        result                          = ::fwMedData::Equipment::New();
+        m_equipmentMap[institutionName] = result;
+
+        //Institution Name
+        result->setInstitutionName(institutionName);
+
+    }
+    else
+    {
+        result = m_equipmentMap[institutionName];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReader::createSeries(DcmDataset* dataset, const std::string& filename)
+{
+    ::fwMedData::DicomSeries::sptr series = ::fwMedData::DicomSeries::sptr();
+    OFString data;
+
+    // Get Series Instance UID
+    dataset->findAndGetOFString(DCM_SeriesInstanceUID,data);
+    std::string seriesInstanceUID = data.c_str();
+
+    // Check if the series already exists
+    for(::fwMedData::DicomSeries::sptr dicomSeries :  m_dicomSeriesContainer)
+    {
+        if(dicomSeries->getInstanceUID() == seriesInstanceUID)
+        {
+            series = dicomSeries;
+            break;
+        }
+    }
+
+    // If the series doesn't exist we create it
+    if(!series)
+    {
+        series = ::fwMedData::DicomSeries::New();
+        series->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+
+        m_dicomSeriesContainer.push_back(series);
+
+        //Instance UID
+        series->setInstanceUID(seriesInstanceUID);
+
+        //Modality
+        dataset->findAndGetOFString(DCM_Modality,data);
+        series->setModality(data.c_str());
+
+        //Date
+        dataset->findAndGetOFString(DCM_SeriesDate,data);
+        series->setDate(data.c_str());
+
+        //Time
+        dataset->findAndGetOFString(DCM_SeriesTime,data);
+        series->setTime(data.c_str());
+
+        //Description
+        dataset->findAndGetOFString(DCM_SeriesDescription,data);
+        series->setDescription(data.c_str());
+
+        //Performing Physicians Name
+        std::vector<std::string> performingPhysiciansName;
+        for(unsigned long i = 0; dataset->findAndGetOFString(DCM_PerformingPhysicianName,data, i).good(); ++i)
+        {
+            performingPhysiciansName.push_back(data.c_str());
+        }
+        series->setPerformingPhysiciansName(performingPhysiciansName);
+
+    }
+
+    // Add the SOPClassUID to the series
+    dataset->findAndGetOFString(DCM_SOPClassUID,data);
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = series->getSOPClassUIDs();
+    sopClassUIDContainer.insert(data.c_str());
+    series->setSOPClassUIDs(sopClassUIDContainer);
+
+    // Add the instance to the series
+    unsigned int instanceNumber = series->getLocalDicomPaths().size();
+    series->addDicomPath(instanceNumber, filename);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReader::convertDicomSeries(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                                             bool notify)
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+    ::fwMedData::Series::sptr result = ::fwMedData::Series::sptr();
+
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = dicomSeries->getSOPClassUIDs();
+    FW_RAISE_IF("The series contains several SOPClassUIDs. Try to apply a filter in order to split the series.",
+                sopClassUIDContainer.size() != 1);
+
+    std::string sopClassUID = *sopClassUIDContainer.begin();
+    if (!sopClassUID.empty())
+    {
+        sopClassUID = dcmFindNameOfUID(sopClassUID.c_str());
+    }
+
+    // CT Image Storage
+    if(sopClassUID == "CTImageStorage" || sopClassUID == "MRImageStorage" ||
+       sopClassUID == "SecondaryCaptureImageStorage" || sopClassUID == "XRayAngiographicImageStorage")
+    {
+        ::fwDcmtkIO::reader::ImageTagReader reader;
+        result = reader.read(dicomSeries);
+    }
+    else if(sopClassUID == "ModalityPerformedProcedureStepSOPClass" )
+    {
+        ::fwDcmtkIO::reader::MPPSReader reader;
+        result = reader.read(dicomSeries);
+    }
+    else
+    {
+        // SOP Class uid is not defined, check if it is a MPPS
+        ::fwMedData::DicomSeries::DicomPathContainerType instances = dicomSeries->getLocalDicomPaths();
+        DcmFileFormat fileFormat;
+        OFCondition status;
+        DcmDataset* dataset;
+
+        //Get informations from the first instance
+        std::string firstInstance = instances.begin()->second.string();
+        status = fileFormat.loadFile(firstInstance.c_str());
+
+        SLM_ASSERT("Cannot load dicom files", status.good());
+        if (status.good())
+        {
+            dataset = fileFormat.getDataset();
+
+            // Decompress data set if compressed
+            dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+            // A MPPS dicom must have a 'DCM_PerformedProcedureStepStatus' tag
+            OFString mmpsStatus;
+            dataset->findAndGetOFString(DCM_PerformedProcedureStepStatus, mmpsStatus);
+            if (!mmpsStatus.empty())
+            {
+                //delete mmpsStatus;
+                ::fwDcmtkIO::reader::MPPSReader reader;
+                result = reader.read(dicomSeries);
+            }
+        }
+    }
+
+    if(result)
+    {
+        // Add the series to the DB
+        seriesDBHelper.add(result);
+    }
+    else
+    {
+        OSLM_WARN("\""+sopClassUID+"\" SOPClassUID is not supported.");
+    }
+
+    if(notify)
+    {
+        seriesDBHelper.notify();
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeriesDBReader::DicomSeriesContainerType& DicomSeriesDBReader::getDicomSeries()
+{
+    return m_dicomSeriesContainer;
+}
+
+} //namespace fwDcmtkIO
+
+
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/SeriesDBReader.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/SeriesDBReader.cpp
new file mode 100644
index 0000000..31bcb60
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/SeriesDBReader.cpp
@@ -0,0 +1,446 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/SeriesDBReader.hpp"
+
+#include "fwDcmtkIO/helper/Codec.hpp"
+#include "fwDcmtkIO/helper/DicomDir.hpp"
+#include "fwDcmtkIO/helper/DicomSearch.hpp"
+#include "fwDcmtkIO/reader/ImageStorageReader.hpp"
+
+#include <fwDataIO/reader/registry/macros.hpp>
+
+#include <fwDcmtkTools/Dictionary.hpp>
+
+#include <fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp>
+#include <fwDicomIOFilter/exceptions/FilterFailure.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+#include <fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+fwDataIOReaderRegisterMacro( ::fwDcmtkIO::SeriesDBReader );
+
+namespace fwDcmtkIO
+{
+
+//------------------------------------------------------------------------------
+
+SeriesDBReader::SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableFolder< IObjectReader >(this),
+    ::fwData::location::enableMultiFiles< IObjectReader >(this),
+    m_isDicomdirActivated(false)
+{
+    SLM_TRACE_FUNC();
+
+    // Load dictionary
+    ::fwDcmtkTools::Dictionary::loadDictionary();
+
+    // Register codecs
+    ::fwDcmtkIO::helper::Codec::registerCodecs();
+}
+
+//------------------------------------------------------------------------------
+
+SeriesDBReader::~SeriesDBReader()
+{
+    // Clean up codecs
+    ::fwDcmtkIO::helper::Codec::cleanup();
+}
+
+//------------------------------------------------------------------------------
+
+SeriesDBReader::FilenameContainerType SeriesDBReader::getFilenames()
+{
+    FilenameContainerType filenames;
+    if(::fwData::location::have < ::fwData::location::Folder, ::fwDataIO::reader::IObjectReader > (this))
+    {
+        // Try to read dicomdir file
+        if(!m_isDicomdirActivated || (m_isDicomdirActivated &&
+                                      !::fwDcmtkIO::helper::DicomDir::readDicomDir(this->getFolder(), filenames)))
+        {
+            // Recursively search for dicom files
+            ::fwDcmtkIO::helper::DicomSearch::searchRecursively(this->getFolder(), filenames);
+        }
+    }
+    else if(::fwData::location::have < ::fwData::location::MultiFiles, ::fwDataIO::reader::IObjectReader > (this))
+    {
+        for(::boost::filesystem::path file: this->getFiles())
+        {
+            filenames.push_back(file.string());
+        }
+    }
+
+    return filenames;
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReader::read()
+{
+    SLM_TRACE_FUNC();
+
+    // Get filenames
+    FilenameContainerType filenames = this->getFilenames();
+
+    // Read Dicom Series
+    this->addSeries(filenames);
+
+    // Apply Default filters
+    if(!m_dicomFilterType.empty())
+    {
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(m_dicomFilterType);
+        SLM_ASSERT("Failed to instantiate filter of type '" + m_dicomFilterType + "'.", filter);
+        ::fwDicomIOFilter::helper::Filter::applyFilter(m_dicomSeriesContainer,filter, true);
+    }
+
+    // Read series
+    for(::fwMedData::DicomSeries::sptr series: m_dicomSeriesContainer)
+    {
+        this->convertDicomSeries(series);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReader::readFromDicomSeriesDB(::fwMedData::SeriesDB::sptr dicomSeriesDB,
+                                           ::fwServices::IService::sptr notifier)
+{
+    // Read series
+    for(::fwMedData::Series::sptr series: dicomSeriesDB->getContainer())
+    {
+        ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(series);
+        OSLM_ASSERT("Trying to read a series which is not a DicomSeries.", dicomSeries);
+        this->convertDicomSeries(dicomSeries, notifier);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReader::readDicomSeries()
+{
+    SLM_TRACE_FUNC();
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+
+    // Get filenames
+    FilenameContainerType filenames = this->getFilenames();
+
+    // Read Dicom Series
+    this->addSeries(filenames);
+
+    // Push Dicom Series
+    for(::fwMedData::DicomSeries::sptr series: m_dicomSeriesContainer)
+    {
+        seriesDBHelper.add(series);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+bool SeriesDBReader::isDicomDirAvailable()
+{
+    std::vector<std::string> filenames;
+    bool result = ::fwDcmtkIO::helper::DicomDir::readDicomDir(this->getFolder(), filenames);
+    return result && !filenames.empty();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReader::addSeries(const std::vector< std::string >& filenames)
+{
+    DcmFileFormat fileFormat;
+    for(std::string filename: filenames)
+    {
+        OFCondition status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+
+        DcmDataset* dataset = fileFormat.getDataset();
+
+        // Create Series
+        this->createSeries(dataset, filename);
+
+    }
+
+    // Fill series
+    for(::fwMedData::DicomSeries::sptr series: m_dicomSeriesContainer)
+    {
+        // Compute number of instances
+        series->setNumberOfInstances(series->getLocalDicomPaths().size());
+
+        // Get first instance filename
+        const std::string filename = series->getLocalDicomPaths().begin()->second.string();
+
+        // Load first instance
+        DcmFileFormat fileFormat;
+        OFCondition status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        DcmDataset* dataset = fileFormat.getDataset();
+
+        // Create data objects from first instance
+        ::fwMedData::Patient::sptr patient     = this->createPatient(dataset);
+        ::fwMedData::Study::sptr study         = this->createStudy(dataset);
+        ::fwMedData::Equipment::sptr equipment = this->createEquipment(dataset);
+
+        // Fill series
+        series->setPatient(patient);
+        series->setStudy(study);
+        series->setEquipment(equipment);
+    }
+
+
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Patient::sptr SeriesDBReader::createPatient(DcmDataset* dataset)
+{
+    ::fwMedData::Patient::sptr result;
+    OFString data;
+
+    // Get Patient ID
+    dataset->findAndGetOFStringArray(DCM_PatientID,data);
+    ::std::string patientID = data.c_str();
+
+    // Check if the patient already exists
+    if(m_patientMap.find(patientID) == m_patientMap.end())
+    {
+        result                  = ::fwMedData::Patient::New();
+        m_patientMap[patientID] = result;
+
+        //Patient ID
+        result->setPatientId(patientID);
+
+        //Patient Name
+        dataset->findAndGetOFStringArray(DCM_PatientName,data);
+        result->setName(data.c_str());
+
+        //Patient Birthday
+        dataset->findAndGetOFStringArray(DCM_PatientBirthDate,data);
+        result->setBirthdate(data.c_str());
+
+        //Patient Sex
+        dataset->findAndGetOFStringArray(DCM_PatientSex,data);
+        result->setSex(data.c_str());
+
+    }
+    else
+    {
+        result = m_patientMap[patientID];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Study::sptr SeriesDBReader::createStudy(DcmDataset* dataset)
+{
+    ::fwMedData::Study::sptr result;
+    OFString data;
+
+    // Get Study ID
+    dataset->findAndGetOFStringArray(DCM_StudyInstanceUID,data);
+    ::std::string studyID = data.c_str();
+
+    // Check if the study already exists
+    if(m_studyMap.find(studyID) == m_studyMap.end())
+    {
+        result              = ::fwMedData::Study::New();
+        m_studyMap[studyID] = result;
+
+        //Study ID
+        result->setInstanceUID(studyID);
+
+        //Study Date
+        dataset->findAndGetOFStringArray(DCM_StudyDate,data);
+        result->setDate(data.c_str());
+
+        //Study Time
+        dataset->findAndGetOFStringArray(DCM_StudyTime,data);
+        result->setTime(data.c_str());
+
+        //Referring Physician Name
+        dataset->findAndGetOFStringArray(DCM_ReferringPhysicianName,data);
+        result->setReferringPhysicianName(data.c_str());
+
+        //Study Description
+        dataset->findAndGetOFStringArray(DCM_StudyDescription,data);
+        result->setDescription(data.c_str());
+
+        //Study Patient Age
+        dataset->findAndGetOFStringArray(DCM_PatientAge,data);
+        result->setPatientAge(data.c_str());
+
+    }
+    else
+    {
+        result = m_studyMap[studyID];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Equipment::sptr SeriesDBReader::createEquipment(DcmDataset* dataset)
+{
+    ::fwMedData::Equipment::sptr result;
+    OFString data;
+
+    // Get Institution Name
+    dataset->findAndGetOFStringArray(DCM_InstitutionName,data);
+    ::std::string institutionName = data.c_str();
+
+    // Check if the equipment already exists
+    if(m_equipmentMap.find(institutionName) == m_equipmentMap.end())
+    {
+        result                          = ::fwMedData::Equipment::New();
+        m_equipmentMap[institutionName] = result;
+
+        //Institution Name
+        result->setInstitutionName(institutionName);
+
+    }
+    else
+    {
+        result = m_equipmentMap[institutionName];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReader::createSeries(DcmDataset* dataset, const std::string& filename)
+{
+    ::fwMedData::DicomSeries::sptr series = ::fwMedData::DicomSeries::sptr();
+    OFString data;
+
+    // Get Series Instance UID
+    dataset->findAndGetOFStringArray(DCM_SeriesInstanceUID,data);
+    std::string seriesInstanceUID = data.c_str();
+
+    // Check if the series already exists
+    for(::fwMedData::DicomSeries::sptr dicomSeries: m_dicomSeriesContainer)
+    {
+        if(dicomSeries->getInstanceUID() == seriesInstanceUID)
+        {
+            series = dicomSeries;
+            break;
+        }
+    }
+
+    // If the series doesn't exist we create it
+    if(!series)
+    {
+        series = ::fwMedData::DicomSeries::New();
+        series->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+
+        m_dicomSeriesContainer.push_back(series);
+
+        //Instance UID
+        series->setInstanceUID(seriesInstanceUID);
+
+        //Modality
+        dataset->findAndGetOFStringArray(DCM_Modality,data);
+        series->setModality(data.c_str());
+
+        //Date
+        dataset->findAndGetOFStringArray(DCM_SeriesDate,data);
+        series->setDate(data.c_str());
+
+        //Time
+        dataset->findAndGetOFStringArray(DCM_SeriesTime,data);
+        series->setTime(data.c_str());
+
+        //Description
+        dataset->findAndGetOFStringArray(DCM_SeriesDescription,data);
+        series->setDescription(data.c_str());
+
+        //Performing Physicians Name
+        std::vector<std::string> performingPhysiciansName;
+        for(int i = 0; dataset->findAndGetOFString(DCM_PerformingPhysicianName,data, i).good(); ++i)
+        {
+            performingPhysiciansName.push_back(data.c_str());
+        }
+        series->setPerformingPhysiciansName(performingPhysiciansName);
+
+    }
+
+    // Add the SOPClassUID to the series
+    dataset->findAndGetOFStringArray(DCM_SOPClassUID,data);
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = series->getSOPClassUIDs();
+    sopClassUIDContainer.insert(data.c_str());
+    series->setSOPClassUIDs(sopClassUIDContainer);
+
+    // Add the instance to the series
+    std::size_t instanceNumber = series->getLocalDicomPaths().size();
+    series->addDicomPath(instanceNumber, filename);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReader::convertDicomSeries(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                                        ::fwServices::IService::sptr notifier)
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+    ::fwMedData::Series::sptr result = ::fwMedData::Series::sptr();
+
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = dicomSeries->getSOPClassUIDs();
+    FW_RAISE_IF("The series contains several SOPClassUIDs. Try to apply a filter in order to split the series.",
+                sopClassUIDContainer.size() != 1);
+    std::string sopClassUID = sopClassUIDContainer.begin()->c_str();
+
+    const SupportedSOPClassContainerType::iterator bIt = m_supportedSOPClassContainer.begin();
+    const SupportedSOPClassContainerType::iterator eIt = m_supportedSOPClassContainer.end();
+
+    if(m_supportedSOPClassContainer.empty() || std::find(bIt, eIt, sopClassUID) != eIt)
+    {
+        ::fwDcmtkIO::reader::ImageStorageReader reader;
+        result = reader.read(dicomSeries);
+    }
+
+    if(result)
+    {
+        // Add the series to the DB
+        seriesDBHelper.add(result);
+    }
+    else
+    {
+        OSLM_WARN("\""+sopClassUID+"\" SOPClassUID is not supported.");
+    }
+
+    if(notifier)
+    {
+        seriesDBHelper.notify();
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+SeriesDBReader::DicomSeriesContainerType& SeriesDBReader::getDicomSeries()
+{
+    return m_dicomSeriesContainer;
+}
+
+} //namespace fwDcmtkIO
+
+
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/Codec.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/Codec.cpp
new file mode 100644
index 0000000..36ad5aa
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/Codec.cpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/helper/Codec.hpp"
+
+#include <dcmtk/dcmdata/dcrledrg.h>
+#include <dcmtk/dcmjpeg/djdecode.h>
+#include <dcmtk/dcmjpeg/dipijpeg.h>
+
+namespace fwDcmtkIO
+{
+namespace helper
+{
+
+void Codec::registerCodecs()
+{
+    // Register RLE decompression codecs
+    DcmRLEDecoderRegistration::registerCodecs();
+
+    // Register JPEG decompression codecs
+    DJDecoderRegistration::registerCodecs();
+}
+
+// ----------------------------------------------------------------------------
+
+void Codec::cleanup()
+{
+    // Deregister RLE decompression codecs
+    DcmRLEDecoderRegistration::cleanup();
+
+    // Deregister JPEG decompression codecs
+    DJDecoderRegistration::cleanup();
+}
+
+
+} //helper
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomDir.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomDir.cpp
new file mode 100644
index 0000000..88c841c
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomDir.cpp
@@ -0,0 +1,184 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwDcmtkIO/helper/DicomDir.hpp"
+
+#include <fwCore/exceptionmacros.hpp>
+#include <fwCore/spyLog.hpp>
+
+#include <fwDcmtkTools/Dictionary.hpp>
+
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/regex.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/regex.h>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcdicdir.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+namespace fwDcmtkIO
+{
+namespace helper
+{
+
+bool DicomDir::readDicomDir(const ::boost::filesystem::path& root, std::vector<std::string>& dicomFiles)
+{
+    SLM_ASSERT("You must specify a valid directory.", ::boost::filesystem::is_directory(root));
+
+    //Load dictionary
+    ::fwDcmtkTools::Dictionary::loadDictionary();
+
+    bool result = false;
+
+    ::boost::filesystem::path dicomDirPath = root / "dicomdir";
+    bool dicomdirExists = ::boost::filesystem::exists(dicomDirPath) && !::boost::filesystem::is_directory(dicomDirPath);
+
+    if(!dicomdirExists)
+    {
+        dicomDirPath   = root / "DICOMDIR";
+        dicomdirExists = ::boost::filesystem::exists(dicomDirPath) && !::boost::filesystem::is_directory(dicomDirPath);
+    }
+
+    if(dicomdirExists)
+    {
+        DcmDicomDir dicomDir(dicomDirPath.string().c_str());
+        DcmDirectoryRecord* rootRecord    = &(dicomDir.getRootRecord());
+        DcmDirectoryRecord* patientRecord = NULL;
+        DcmDirectoryRecord* studyRecord   = NULL;
+        DcmDirectoryRecord* seriesRecord  = NULL;
+        DcmDirectoryRecord* fileRecord    = NULL;
+        OFString tmpString;
+
+        //Root level
+        if (rootRecord != NULL)
+        {
+            result = true;
+
+            try
+            {
+                //Patient level
+                while (((patientRecord = rootRecord->nextSub(patientRecord)) != NULL))
+                {
+                    //Study level
+                    while (((studyRecord = patientRecord->nextSub(studyRecord)) != NULL))
+                    {
+                        //Series level
+                        while (((seriesRecord = studyRecord->nextSub(seriesRecord)) != NULL))
+                        {
+                            //Instance level
+                            while ((fileRecord = seriesRecord->nextSub(fileRecord)) != NULL)
+                            {
+                                if (fileRecord->findAndGetOFStringArray(DCM_ReferencedFileID, tmpString).good())
+                                {
+                                    ::boost::filesystem::path realPath = DicomDir::getRealFilename(root,
+                                                                                                   tmpString.c_str());
+                                    dicomFiles.push_back(realPath.string());
+                                }
+                                else
+                                {
+                                    SLM_WARN("Dicom instance doesn't have a referenced file id.");
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            catch(std::exception e)
+            {
+                result = false;
+                dicomFiles.clear();
+            }
+        }
+        else
+        {
+            SLM_WARN("Root record is null, unable to get information from dicomdir file.");
+        }
+
+    }
+    else
+    {
+        SLM_WARN("Dicomdir file is missing");
+    }
+
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+std::string DicomDir::createRegex(std::string filename)
+{
+    std::string regex = "";
+    for(std::string::iterator it = filename.begin(); it != filename.end(); ++it)
+    {
+        char upper = *it;
+        char lower = static_cast<char>(upper + 32);
+
+        std::stringstream ss;
+
+        //For uppercase characters allow lowercase version
+        if(upper >= 'A' && upper <= 'Z')
+        {
+            ss << "[" << upper << lower << "]";
+            regex += ss.str();
+        }
+        //For other characters just copy them
+        else
+        {
+            ss << upper;
+            regex += ss.str();
+        }
+    }
+
+    return regex;
+}
+
+// ----------------------------------------------------------------------------
+
+::boost::filesystem::path DicomDir::getRealFilename(
+    const ::boost::filesystem::path& root, const std::string& filename)
+{
+    ::boost::filesystem::path result = root;
+    std::vector<std::string> elements;
+    ::boost::split(elements, filename, ::boost::is_any_of("/\\"));
+
+    //For every part of the path (going through the hierarchy)
+    for(std::vector<std::string>::iterator it = elements.begin(); it != elements.end(); ++it)
+    {
+        std::string current = *it;
+        ::boost::regex regex(DicomDir::createRegex(current));
+
+        ::boost::filesystem::directory_iterator dirIt(result), dirItEnd;
+        std::string child;
+        bool matchFound = false;
+
+        //Check if a file in the directory matches the regex of the dicom path
+        for (; dirIt != dirItEnd; ++dirIt)
+        {
+            child = dirIt->path().filename().string();
+            if (::boost::regex_match(child, regex))
+            {
+                FW_RAISE_IF("There is more than one file matching the uppercase filename stored "
+                            "in the dicom instance: \""+filename+"\"", matchFound);
+                matchFound = true;
+                result    /= child;
+            }
+
+        }
+
+        FW_RAISE_IF("There is no file matching the uppercase filename stored in the dicom instance: \""+filename+"\"",
+                    !matchFound);
+    }
+
+
+    return result;
+}
+
+} //helper
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomSearch.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomSearch.cpp
new file mode 100644
index 0000000..1d547d5
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/helper/DicomSearch.cpp
@@ -0,0 +1,76 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/helper/DicomSearch.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/foreach.hpp>
+
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/ofstd/ofcond.h>
+
+namespace fwDcmtkIO
+{
+namespace helper
+{
+
+void DicomSearch::searchRecursively(const ::boost::filesystem::path& dirPath, std::vector<std::string>& dicomFiles)
+{
+    std::vector<std::string> extensions;
+    std::string strIgnoreFile = ".zip|.txt|.htm|.html|.xml|.exe|.gz|.dir|.gif|.jpeg|.jpg|dicomdir|.DS_Store";
+    ::boost::algorithm::split( extensions, strIgnoreFile, ::boost::algorithm::is_any_of("|"),
+                               ::boost::algorithm::token_compress_on);
+
+    std::string filePath;
+    std::string filename;
+    DcmFileFormat fileFormat;
+    for( ::boost::filesystem::recursive_directory_iterator it(dirPath);
+         it != ::boost::filesystem::recursive_directory_iterator(); ++it)
+    {
+        if(!::boost::filesystem::is_directory(*it))
+        {
+            filePath = it->path().string();
+            filename = it->path().filename().string();
+
+            if(!DicomSearch::checkFilenameExtension( filePath, &extensions) )
+            {
+                OFCondition ofCondition = fileFormat.loadFile(filePath.c_str());
+                if(ofCondition.good())
+                {
+                    dicomFiles.push_back( filePath.c_str() );
+                }
+                else
+                {
+                    throw std::runtime_error("failed to read " + filename + "\n"
+                                             + "dcmtk error: " + ofCondition.text());
+                }
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomSearch::checkFilenameExtension(const std::string& filename, std::vector<std::string>* extensions)
+{
+    bool result = false;
+    for (size_t i = 0; i < extensions->size() && !result; ++i)
+    {
+        result = ::boost::ends_with(filename, extensions->at(i));
+    }
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace helper
+} //namespace fwDcmtkIO
+
+
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/IObjectReader.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/IObjectReader.cpp
new file mode 100644
index 0000000..e25e8f0
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/IObjectReader.cpp
@@ -0,0 +1,25 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/reader/IObjectReader.hpp"
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+IObjectReader::IObjectReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IObjectReader::~IObjectReader()
+{
+}
+
+} //reader
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/ImageStorageReader.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/ImageStorageReader.cpp
new file mode 100644
index 0000000..d0c06e9
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/ImageStorageReader.cpp
@@ -0,0 +1,405 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/reader/ImageStorageReader.hpp"
+
+#include "fwDcmtkIO/reader/main/ImageLazyStream.hpp"
+#include "fwDcmtkIO/reader/main/ImageReader.hpp"
+#include "fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.hpp"
+#include "fwDcmtkIO/reader/rgblookup/ImageRGBLookupReader.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwDicomTools/Image.hpp>
+#include <fwDicomTools/Series.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/assign/std/vector.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+#include <algorithm>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+ImageStorageReader::ImageStorageReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ImageStorageReader::~ImageStorageReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+::fwMedData::Series::sptr ImageStorageReader::read(::fwMedData::DicomSeries::sptr series)
+{
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = series->getSOPClassUIDs();
+    std::string sopClassUID = dcmFindNameOfUID(sopClassUIDContainer.begin()->c_str());
+
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwDicomTools::Series::convertToImageSeries(series);
+    DicomPathContainerType instances = series->getLocalDicomPaths();
+
+    ::fwData::Image::sptr image = ::fwData::Image::New();
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    //Get informations from the first instance
+    std::string firstInstance = instances.begin()->second.string();
+    status = fileFormat.loadFile(firstInstance.c_str());
+    DicomImage dicomImage(firstInstance.c_str());
+
+    FW_RAISE_IF("Unable to read the file: \""+firstInstance+"\"", status.bad() || (
+                    dicomImage.getStatus() != EIS_Normal
+                    && dicomImage.getStatus() != EIS_MissingAttribute
+                    && dicomImage.getStatus() != EIS_NotSupportedValue
+                    ));
+    dataset = fileFormat.getDataset();
+
+    // Decompress data set if compressed
+    dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+    if(dicomImage.getStatus() != EIS_MissingAttribute)
+    {
+        SLM_WARN("Some informations are missing. The file may have not been read properly.");
+    }
+
+    //Spacing
+    double spacing[3];
+    dataset->findAndGetFloat64(DCM_PixelSpacing,spacing[0],0);
+    dataset->findAndGetFloat64(DCM_PixelSpacing,spacing[1],1);
+    dataset->findAndGetFloat64(DCM_SliceThickness,spacing[2]);
+
+    if(series->hasComputedValues("SliceThickness"))
+    {
+        spacing[2] = ::boost::lexical_cast< double >(series->getComputedTagValues().at("SliceThickness"));
+    }
+
+    if(spacing[0] == 0 || spacing[1] == 0 || spacing[2] == 0)
+    {
+        spacing[0] = spacing[1] = spacing[2] = 1;
+        OSLM_WARN("Invalid value for pixel spacing. Assuming pixel value is 1.");
+    }
+
+
+    image->setSpacing(std::vector< double >(spacing, spacing+3));
+
+    //Origin
+    //TODO: Compute the correct origin
+    double imagePosition[3];
+    dataset->findAndGetFloat64(DCM_ImagePositionPatient, imagePosition[0], 0);
+    dataset->findAndGetFloat64(DCM_ImagePositionPatient, imagePosition[1], 1);
+    dataset->findAndGetFloat64(DCM_ImagePositionPatient, imagePosition[2], 2);
+    image->setOrigin(::boost::assign::list_of(imagePosition[0])(imagePosition[1])(imagePosition[2]));
+
+    //Size
+    unsigned short rows, columns;
+    dataset->findAndGetUint16(DCM_Rows,rows);
+    dataset->findAndGetUint16(DCM_Columns,columns);
+
+    uint32_t depth;
+    if(instances.size() == 1)
+    {
+        OFString sframesNumber = "";
+
+        if(dataset->findAndGetOFString(DCM_NumberOfFrames, sframesNumber).good())
+        {
+            depth = static_cast<uint32_t>(std::stoi(sframesNumber.c_str()));
+        }
+        else
+        {
+            depth = 1;
+        }
+    }
+    else
+    {
+        depth = static_cast<unsigned short>(instances.size());
+    }
+
+    //FIXME: Remove depth for 2D images ?
+    image->setSize(::boost::assign::list_of(columns)(rows)(depth));
+
+    //Window Center
+    double windowCenter = 0;
+    dataset->findAndGetFloat64(DCM_WindowCenter,windowCenter);
+    image->setWindowCenter(windowCenter);
+
+    //Window Width
+    double windowWidth = 0;
+    dataset->findAndGetFloat64(DCM_WindowWidth,windowWidth);
+    image->setWindowWidth(windowWidth);
+
+    //Number of components
+    OFString data;
+    dataset->findAndGetOFStringArray(DCM_PhotometricInterpretation, data);
+    std::string photometricInterpretation = data.c_str();
+    dataset->findAndGetOFStringArray(DCM_PixelPresentation, data);
+    std::string pixelPresentation = data.c_str();
+
+    if(photometricInterpretation == "MONOCHROME2")
+    {
+        image->setNumberOfComponents(1);
+    }
+    else if(photometricInterpretation == "RGB" || photometricInterpretation == "YBR")
+    {
+        image->setNumberOfComponents(3);
+    }
+    else if(photometricInterpretation == "ARGB" || photometricInterpretation == "CMYK")
+    {
+        image->setNumberOfComponents(4);
+    }
+    else if(photometricInterpretation == "PALETTE COLOR" || pixelPresentation == "COLOR")
+    {
+        image->setNumberOfComponents(3);
+    }
+    else
+    {
+        FW_RAISE ( "The photometric interpretation \"" << photometricInterpretation << "\" is not supported.");
+    }
+
+    //Rescale Slope
+    double rescaleSlope;
+    double rescaleIntercept;
+    status           = dataset->findAndGetFloat64(DCM_RescaleSlope,rescaleSlope);
+    rescaleSlope     = (status.bad()) ? 1 : rescaleSlope;
+    status           = dataset->findAndGetFloat64(DCM_RescaleIntercept,rescaleIntercept);
+    rescaleIntercept = (status.bad()) ? 0 : rescaleIntercept;
+
+    //Type
+    unsigned short samplesPerPixel     = 1;
+    unsigned short bitsAllocated       = 8;
+    unsigned short bitsStored          = 8;
+    unsigned short highBit             = 7;
+    unsigned short pixelRepresentation = 0;
+
+    dataset->findAndGetUint16(DCM_SamplesPerPixel,samplesPerPixel);
+    dataset->findAndGetUint16(DCM_BitsAllocated,bitsAllocated);
+    dataset->findAndGetUint16(DCM_BitsStored,bitsStored);
+    dataset->findAndGetUint16(DCM_HighBit,highBit);
+    dataset->findAndGetUint16(DCM_PixelRepresentation,pixelRepresentation);
+
+    //Using lookup tables
+    if(photometricInterpretation == "COLOR" || photometricInterpretation == "PALETTE COLOR")
+    {
+        unsigned short colorBitsAllocated = 0;
+        dataset->findAndGetUint16(DCM_RedPaletteColorLookupTableDescriptor, colorBitsAllocated, 2);
+        bitsStored = bitsAllocated = colorBitsAllocated;
+        highBit    = static_cast<unsigned short>(colorBitsAllocated-1);
+    }
+
+    //Find image type
+    ::fwDicomTools::Image imageHelper(
+        samplesPerPixel,bitsAllocated,bitsStored, highBit, pixelRepresentation, rescaleSlope, rescaleIntercept);
+    ::fwTools::Type imageType = imageHelper.findImageTypeFromMinMaxValues();
+
+    //Set image type
+    image->setType(imageType);
+
+
+    //Direct reading mode
+    if(::fwMemory::BufferManager::getDefault()->getLoadingMode() == ::fwMemory::BufferManager::DIRECT)
+    {
+        SLM_INFO("Reading using DIRECT mode.");
+
+        //Default read
+        if(photometricInterpretation != "PALETTE COLOR" && pixelPresentation != "COLOR")
+        {
+            this->directRead(image, instances, rows, columns, depth, rescaleSlope, rescaleIntercept,
+                             pixelRepresentation, imageType);
+        }
+        //RGB lookup read
+        else
+        {
+            this->directRGBLookupRead(image, *dataset, instances, rows, columns, depth, bitsAllocated);
+        }
+
+    }
+    //Lazy reading mode
+    else
+    {
+        SLM_INFO("Reading using LAZY mode.");
+
+        //Default read
+        if(photometricInterpretation != "PALETTE COLOR" && pixelPresentation != "COLOR")
+        {
+            this->lazyRead(image, series, rows, columns, depth, rescaleSlope, rescaleIntercept, pixelRepresentation,
+                           imageType);
+        }
+        //RGB lookup read
+        else
+        {
+            this->lazyRGBLookupRead(image, series, *dataset, instances, rows, columns, depth, bitsAllocated, imageType);
+        }
+    }
+
+    // Add the image to the series
+    imageSeries->setImage(image);
+
+    return imageSeries;
+}
+
+//-----------------------------------------------------------------------------
+
+void ImageStorageReader::directRead(::fwData::Image::sptr image, DicomPathContainerType instances,
+                                    unsigned short rows, unsigned short columns, int depth, double rescaleSlope,
+                                    double rescaleIntercept,
+                                    unsigned short pixelRepresentation, ::fwTools::Type imageType)
+{
+    //Allocate image
+    image->allocate();
+    ::fwData::Array::sptr array = image->getDataArray();
+    ::fwDataTools::helper::Array arrayHelper(array);
+
+    //Fill image
+    ::fwDcmtkIO::reader::main::ImageReader::fillImageBuffer(rows, columns, depth, instances,
+                                                            arrayHelper.getBuffer(), rescaleSlope, rescaleIntercept, pixelRepresentation,
+                                                            imageType);
+}
+
+//-----------------------------------------------------------------------------
+
+void ImageStorageReader::directRGBLookupRead(::fwData::Image::sptr image, DcmDataset& dataset,
+                                             DicomPathContainerType instances, unsigned short rows,
+                                             unsigned short columns, int depth,
+                                             unsigned short bitsAllocated)
+{
+    //Allocate image
+    image->allocate();
+    ::fwData::Array::sptr array = image->getDataArray();
+    ::fwDataTools::helper::Array arrayHelper(array);
+
+    unsigned short pixelValueBitsAllocated = 8;
+    dataset.findAndGetUint16(DCM_BitsAllocated,pixelValueBitsAllocated);
+
+    // 16 bits allocated
+    if(bitsAllocated == 16)
+    {
+        const Uint16* redLookup;
+        const Uint16* greenLookup;
+        const Uint16* blueLookup;
+        // Those values are freed by the dataset destructor
+        dataset.findAndGetUint16Array(DCM_RedPaletteColorLookupTableData, redLookup);
+        dataset.findAndGetUint16Array(DCM_GreenPaletteColorLookupTableData, greenLookup);
+        dataset.findAndGetUint16Array(DCM_BluePaletteColorLookupTableData, blueLookup);
+
+        if(pixelValueBitsAllocated == 16)
+        {
+            ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupReader::fillImageBuffer<Uint16, Uint16>(rows,
+                                                                                                  columns, depth,
+                                                                                                  instances,
+                                                                                                  arrayHelper.getBuffer(), redLookup, greenLookup,
+                                                                                                  blueLookup);
+        }
+        else
+        {
+            ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupReader::fillImageBuffer<Uint16, Uint8>(rows,
+                                                                                                 columns, depth,
+                                                                                                 instances,
+                                                                                                 arrayHelper.getBuffer(), redLookup, greenLookup,
+                                                                                                 blueLookup);
+        }
+
+    }
+    // 8 bits allocated
+    else
+    {
+        const Uint8* redLookup;
+        const Uint8* greenLookup;
+        const Uint8* blueLookup;
+        // Those values are freed by the dataset destructor
+        dataset.findAndGetUint8Array(DCM_RedPaletteColorLookupTableData, redLookup);
+        dataset.findAndGetUint8Array(DCM_GreenPaletteColorLookupTableData, greenLookup);
+        dataset.findAndGetUint8Array(DCM_BluePaletteColorLookupTableData, blueLookup);
+
+        if(pixelValueBitsAllocated == 16)
+        {
+            ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupReader::fillImageBuffer<Uint8, Uint16>(rows,
+                                                                                                 columns, depth,
+                                                                                                 instances,
+                                                                                                 arrayHelper.getBuffer(), redLookup, greenLookup,
+                                                                                                 blueLookup);
+        }
+        else
+        {
+            ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupReader::fillImageBuffer<Uint8, Uint8>(rows,
+                                                                                                columns, depth,
+                                                                                                instances,
+                                                                                                arrayHelper.getBuffer(), redLookup, greenLookup,
+                                                                                                blueLookup);
+        }
+    }
+
+}
+
+//-----------------------------------------------------------------------------
+
+void ImageStorageReader::lazyRead(::fwData::Image::sptr image, ::fwMedData::DicomSeries::sptr series,
+                                  unsigned short rows, unsigned short columns, int depth, double rescaleSlope,
+                                  double rescaleIntercept,
+                                  unsigned short pixelRepresentation, ::fwTools::Type imageType)
+{
+    // Create information object
+    ::fwDcmtkIO::reader::main::ImageLazyInformation::sptr dcmInfo =
+        std::make_shared< ::fwDcmtkIO::reader::main::ImageLazyInformation >();
+    dcmInfo->m_dicomSeries         = series;
+    dcmInfo->m_rows                = rows;
+    dcmInfo->m_columns             = columns;
+    dcmInfo->m_depth               = depth;
+    dcmInfo->m_rescaleSlope        = rescaleSlope;
+    dcmInfo->m_rescaleIntercept    = rescaleIntercept;
+    dcmInfo->m_pixelRepresentation = pixelRepresentation;
+    dcmInfo->m_imageType           = imageType;
+
+    // Create streamer
+    ::fwMemory::BufferObject::sptr buffObj = image->getDataArray()->getBufferObject();
+    buffObj->setIStreamFactory(
+        std::make_shared< ::fwDcmtkIO::reader::main::ImageLazyStream >( dcmInfo ),
+        image->getSizeInBytes() );
+}
+
+//-----------------------------------------------------------------------------
+
+void ImageStorageReader::lazyRGBLookupRead(::fwData::Image::sptr image, ::fwMedData::DicomSeries::sptr series,
+                                           DcmDataset& dataset, DicomPathContainerType instances, unsigned short rows,
+                                           unsigned short columns, int depth,
+                                           unsigned short bitsAllocated, ::fwTools::Type imageType)
+{
+    unsigned short pixelValueBitsAllocated = 8;
+    dataset.findAndGetUint16(DCM_BitsAllocated,pixelValueBitsAllocated);
+
+    // Create information object
+    ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyInformation::sptr dcmInfo =
+        std::make_shared< ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyInformation >();
+    dcmInfo->m_dicomSeries             = series;
+    dcmInfo->m_rows                    = rows;
+    dcmInfo->m_columns                 = columns;
+    dcmInfo->m_depth                   = depth;
+    dcmInfo->m_bitsAllocated           = bitsAllocated;
+    dcmInfo->m_pixelValueBitsAllocated = pixelValueBitsAllocated;
+    dcmInfo->m_imageType               = imageType;
+
+    // Create streamer
+    ::fwMemory::BufferObject::sptr buffObj = image->getDataArray()->getBufferObject();
+    buffObj->setIStreamFactory(
+        std::make_shared< ::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyStream >( dcmInfo ),
+        image->getSizeInBytes() );
+
+}
+
+} //reader
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/ImageTagReader.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/ImageTagReader.cpp
new file mode 100644
index 0000000..ebfe6d6
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/ImageTagReader.cpp
@@ -0,0 +1,144 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/reader/ImageTagReader.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwDicomTools/Series.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/assign/std/vector.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+#include <algorithm>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+ImageTagReader::ImageTagReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ImageTagReader::~ImageTagReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+::fwMedData::Series::sptr ImageTagReader::read(::fwMedData::DicomSeries::sptr series)
+{
+    DicomPathContainerType instances = series->getLocalDicomPaths();
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    //Get informations from the first instance
+    std::string firstInstance = instances.begin()->second.string();
+    status = fileFormat.loadFile(firstInstance.c_str());
+
+    dataset = fileFormat.getDataset();
+
+    // Decompress data set if compressed
+    dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+    //param angle1: LAO/RAO     DICOM IOD (0018, 1510) Positioner Primary Angle
+    OFString primaryAngle;
+    dataset->findAndGetOFString(DCM_PositionerPrimaryAngle,primaryAngle);
+    SLM_WARN_IF("Missing Tag (0018,1510) 'DCM_PositionerPrimaryAngle'", !primaryAngle.empty());
+
+    if(!primaryAngle.empty())
+    {
+        series->addComputedTagValue("PositionerPrimaryAngle",std::string(primaryAngle.c_str()));
+    }
+
+
+    //param angle2: CRA/CAU     DICOM IOD (0018, 1511) Positioner Secondary Angle
+    OFString secondaryAngle;
+    dataset->findAndGetOFString(DCM_PositionerSecondaryAngle,secondaryAngle);
+    SLM_WARN_IF("Missing Tag (0018,1511) 'DCM_PositionerSecondaryAngle'", !secondaryAngle.empty());
+
+    if(!secondaryAngle.empty())
+    {
+        series->addComputedTagValue("PositionerSecondaryAngle",std::string(secondaryAngle.c_str()));
+    }
+
+    //param dap:                DICOM IOD (0018, 115e) Image and Fluoroscopy Area Dose Pro DS: '0.022'
+    OFString doseProduct;
+    dataset->findAndGetOFString(DCM_ImageAndFluoroscopyAreaDoseProduct,doseProduct);
+    SLM_WARN_IF("Missing Tag (0018,115e) 'DCM_ImageAndFluoroscopyAreaDoseProduct'", !doseProduct.empty());
+
+    if(!doseProduct.empty())
+    {
+        series->addComputedTagValue("ImageAndFluoroscopyAreaDoseProduct", std::string(doseProduct.c_str()));
+    }
+
+    //param dist_src_iso: Distance source to iso-center DICOM IOD (0021, 1017) [Source to Isocenter] SL: 785
+    OFString distSrcIso;
+    dataset->findAndGetOFString(DcmTagKey(0021,1017),distSrcIso);
+    SLM_WARN_IF("Missing Tag (0021,1017) 'Distance source iso'", !distSrcIso.empty());
+
+    if(!distSrcIso.empty())
+    {
+        series->addComputedTagValue("DistanceSrcIso", std::string(distSrcIso.c_str()));
+    }
+
+    //param dist_src_det: Distance source to detector   DICOM IOD (0018, 1110) Distance Source to Detector   DS: '1200'
+    OFString distSrcDetector;
+    dataset->findAndGetOFString(DCM_DistanceSourceToDetector,distSrcDetector);
+    SLM_WARN_IF("Missing Tag (0018, 1110) 'DCM_DistanceSourceToDetector'", !distSrcDetector.empty());
+
+    if(!distSrcDetector.empty())
+    {
+        series->addComputedTagValue("DistanceSourceToDetector", std::string(distSrcDetector.c_str()));
+    }
+
+    //param det_diam: diameter of the detector ( diagonal of the square) #TODO checkit DICOM IOD  0018, 1162) Intensifier Size  DS: '420'
+    OFString intensifierSize;
+    dataset->findAndGetOFString(DCM_IntensifierSize,intensifierSize);
+    SLM_WARN_IF("Missing Tag (0018, 1110) 'DCM_IntensifierSize'", !intensifierSize.empty());
+
+    if(!intensifierSize.empty())
+    {
+        series->addComputedTagValue("IntensifierSize", std::string(intensifierSize.c_str()));
+    }
+
+    OFString acqTime;
+    dataset->findAndGetOFString(DCM_AcquisitionTime,acqTime);
+    SLM_WARN_IF("Missing Tag (0008, 0032) 'DCM_AcquisitionTime'", !acqTime.empty());
+
+    if(!acqTime.empty())
+    {
+        series->addComputedTagValue("AcquisitionTime", std::string(acqTime.c_str()));
+    }
+
+    OFString acqDate;
+    dataset->findAndGetOFString(DCM_AcquisitionDate,acqDate);
+    SLM_WARN_IF("Missing Tag (0008, 0022) 'DCM_AcquisitionDate'", !acqDate.empty());
+
+    if(!acqTime.empty())
+    {
+        series->addComputedTagValue("AcquisitionDate", std::string(acqDate.c_str()));
+    }
+
+    return series;
+}
+
+//-----------------------------------------------------------------------------
+
+} //reader
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/MPPSReader.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/MPPSReader.cpp
new file mode 100644
index 0000000..0a98de5
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/MPPSReader.cpp
@@ -0,0 +1,129 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/reader/MPPSReader.hpp"
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwDicomTools/Series.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/assign/std/vector.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+#include <algorithm>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+
+MPPSReader::MPPSReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+MPPSReader::~MPPSReader()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+::fwMedData::Series::sptr MPPSReader::read(::fwMedData::DicomSeries::sptr series)
+{
+    DicomPathContainerType instances = series->getLocalDicomPaths();
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    //Get informations from the first instance
+    std::string firstInstance = instances.begin()->second.string();
+    status = fileFormat.loadFile(firstInstance.c_str());
+
+    dataset = fileFormat.getDataset();
+
+    // Decompress data set if compressed
+    dataset->chooseRepresentation(EXS_LittleEndianExplicit, NULL);
+
+    OFString mmpsStatus;
+    dataset->findAndGetOFString(DCM_PerformedProcedureStepStatus, mmpsStatus);
+    SLM_ASSERT("Missing tag (0040,0252) 'PerformedProcedureStepStatus'.", !mmpsStatus.empty());
+    series->addComputedTagValue("PerformedProcedureStepStatus", std::string(mmpsStatus.c_str()));
+
+    OFString entranceDosemGy;
+    dataset->findAndGetOFString(DCM_EntranceDoseInmGy,entranceDosemGy);
+    if(!entranceDosemGy.empty())
+    {
+        series->addComputedTagValue("EntranceDoseInmGy", std::string(entranceDosemGy.c_str()));
+    }
+
+    DcmSequenceOfItems* sequenceOfIt;
+    dataset->findAndGetSequence(DCM_ExposureDoseSequence,sequenceOfIt);
+    SLM_WARN_IF("No sequence found in 'DCM_ExposureDoseSequence'.",!sequenceOfIt);
+
+    if(sequenceOfIt)
+    {
+        unsigned long lastEl = sequenceOfIt->card() - 1;
+
+        DcmItem* item = sequenceOfIt->getItem(lastEl);
+
+        OFString commentsRadiationDose;
+        item->findAndGetOFString(DCM_CommentsOnRadiationDose,commentsRadiationDose);
+
+        if(!commentsRadiationDose.empty())
+        {
+            series->addComputedTagValue("CommentsOnRadiationDose", std::string(commentsRadiationDose.c_str()));
+        }
+
+        //(0018,0060) DS [77]#   2, 1 KVP
+        OFString kvp;
+        item->findAndGetOFString(DCM_KVP,kvp);
+        if(!kvp.empty())
+        {
+            series->addComputedTagValue("KVP", std::string(kvp.c_str()));
+        }
+
+        //(0018,1150) IS [25]# 2, 1 ExposureTime
+        OFString exposureTime;
+        item->findAndGetOFString(DCM_ExposureTime,exposureTime);
+        if(!exposureTime.empty())
+        {
+            series->addComputedTagValue("ExposureTime", std::string(exposureTime.c_str()));
+        }
+
+        //(0018,115a) CS [PULSED]#   6, 1 RadiationMode
+        OFString radiationMode;
+        item->findAndGetOFString(DCM_RadiationMode,radiationMode);
+        if(!radiationMode.empty())
+        {
+            series->addComputedTagValue("RadiationMode", std::string(radiationMode.c_str()));
+        }
+
+        //(0018,8151) DS [23500] # 6, 1 XRayTubeCurrentInuA
+        OFString xRayTubeCurrentInuA;
+        item->findAndGetOFString(DCM_XRayTubeCurrentInuA,xRayTubeCurrentInuA);
+
+        if(!xRayTubeCurrentInuA.empty())
+        {
+            series->addComputedTagValue("XRayTubeCurrentInuA", std::string(xRayTubeCurrentInuA.c_str()));
+        }
+    }
+
+    return series;
+}
+
+//-----------------------------------------------------------------------------
+
+} //reader
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/main/ImageLazyStream.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/main/ImageLazyStream.cpp
new file mode 100644
index 0000000..01802d0
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/main/ImageLazyStream.cpp
@@ -0,0 +1,159 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/reader/main/ImageLazyReader.hpp"
+#include "fwDcmtkIO/reader/main/ImageLazyStream.hpp"
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/foreach.hpp>
+#include <boost/make_shared.hpp>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace main
+{
+
+//------------------------------------------------------------------------------
+
+bool filesStillExist( const ::fwMedData::DicomSeries::sptr dicomSeries )
+{
+    ::boost::filesystem::path filePath;
+    bool allFilesExists = true;
+
+    for(::fwMedData::DicomSeries::DicomPathContainerType::const_iterator itPath =
+            dicomSeries->getLocalDicomPaths().begin();
+        allFilesExists && ( itPath != dicomSeries->getLocalDicomPaths().end() );
+        ++itPath )
+    {
+        filePath        = itPath->second;
+        allFilesExists &= ::boost::filesystem::exists(filePath);
+    }
+    return allFilesExists;
+}
+
+//------------------------------------------------------------------------------
+
+ImageLazySource::ImageLazySource( ImageLazyInformation::sptr dcmInfo ) :
+    m_dcmInfo ( dcmInfo )
+{
+    SLM_ASSERT( "ImageLazySource needs at least one dicom file to read an image.",
+                !dcmInfo->m_dicomSeries->getLocalDicomPaths().empty());
+
+    m_frameSize       = m_dcmInfo->m_rows*m_dcmInfo->m_columns*m_dcmInfo->m_imageType.sizeOf();
+    m_currentFrame    = 0;
+    m_currentPosition = 0;
+    m_currentPath     = m_dcmInfo->m_dicomSeries->getLocalDicomPaths().begin();
+
+    m_frame = static_cast<char*>(::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer(m_dcmInfo->m_rows,
+                                                                                                  m_dcmInfo->m_columns,
+                                                                                                  m_currentPath->second,
+                                                                                                  m_dcmInfo->
+                                                                                                  m_rescaleSlope,
+                                                                                                  m_dcmInfo->
+                                                                                                  m_rescaleIntercept,
+                                                                                                  m_dcmInfo->
+                                                                                                  m_pixelRepresentation,
+                                                                                                  m_dcmInfo->m_imageType));
+}
+
+//------------------------------------------------------------------------------
+
+std::streamsize ImageLazySource::read(char* s, std::streamsize n)
+{
+    std::streamsize result = -1;
+
+    // Be sure that all files exist when reading the first frame
+    if(m_currentFrame == 0 && m_currentPosition == 0)
+    {
+        const bool exist = filesStillExist(m_dcmInfo->m_dicomSeries);
+        OSLM_ERROR_IF( "Error while reading dicom files : " <<
+                       m_dcmInfo->m_dicomSeries->getLocalDicomPaths().begin()->second.string() << " ...", !exist );
+    }
+
+    // Load new frame
+    if(m_currentPosition + n > m_frameSize)
+    {
+        // Copy remaining bytes
+        const size_t remainingBytes = m_frameSize - m_currentPosition;
+        const size_t extraBytes     = n - remainingBytes;
+
+        if(remainingBytes > 0)
+        {
+            memcpy(s, m_frame + m_currentPosition, remainingBytes);
+            result = remainingBytes;
+        }
+
+        // Change frame
+        delete m_frame;
+        ++m_currentFrame;
+        ++m_currentPath;
+        m_currentPosition = 0;
+
+        // If there is more frame
+        if(m_currentPath != m_dcmInfo->m_dicomSeries->getLocalDicomPaths().end())
+        {
+            // Copy extra bytes from the new frame
+            if(extraBytes > 0)
+            {
+                m_frame = static_cast<char*>(::fwDcmtkIO::reader::main::ImageLazyReader::createInstanceBuffer(
+                                                 m_dcmInfo->m_rows, m_dcmInfo->m_columns, m_currentPath->second,
+                                                 m_dcmInfo->m_rescaleSlope, m_dcmInfo->m_rescaleIntercept,
+                                                 m_dcmInfo->m_pixelRepresentation, m_dcmInfo->m_imageType));
+
+                memcpy(s, m_frame + m_currentPosition, extraBytes);
+                m_currentPosition += extraBytes;
+                result             = remainingBytes + extraBytes;
+            }
+        }
+        else
+        {
+            OSLM_TRACE("Reading process over.");
+        }
+
+    }
+    // Copy bytes from the loaded frame
+    else
+    {
+        memcpy(s, m_frame + m_currentPosition, n);
+        m_currentPosition += n;
+        result             = n;
+
+        if(m_currentPath->second == m_dcmInfo->m_dicomSeries->getLocalDicomPaths().rbegin()->second &&
+           m_currentPosition == m_frameSize)
+        {
+            SLM_TRACE("Reading process over.");
+            delete m_frame;
+        }
+    }
+
+    return result;
+
+}
+
+
+//------------------------------------------------------------------------------
+
+ImageLazyStream::ImageLazyStream( ImageLazyInformation::sptr dcmInfo ) : m_dcmInfo ( dcmInfo )
+{
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(std::istream) ImageLazyStream::get()
+{
+    SPTR(::boost::iostreams::stream<ImageLazySource>) is
+        = std::make_shared< ::boost::iostreams::stream<ImageLazySource> >( m_dcmInfo );
+    return is;
+}
+
+//------------------------------------------------------------------------------
+
+} //main
+} //reader
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.cpp b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.cpp
new file mode 100644
index 0000000..17eb2d1
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/src/fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.cpp
@@ -0,0 +1,219 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyReader.hpp"
+#include "fwDcmtkIO/reader/rgblookup/ImageRGBLookupLazyStream.hpp"
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/foreach.hpp>
+#include <boost/make_shared.hpp>
+
+namespace fwDcmtkIO
+{
+namespace reader
+{
+namespace rgblookup
+{
+
+//------------------------------------------------------------------------------
+
+bool filesStillExist( const ::fwMedData::DicomSeries::sptr dicomSeries )
+{
+    ::boost::filesystem::path filePath;
+    bool allFilesExists = true;
+
+    for(::fwMedData::DicomSeries::DicomPathContainerType::const_iterator itPath =
+            dicomSeries->getLocalDicomPaths().begin();
+        allFilesExists && ( itPath != dicomSeries->getLocalDicomPaths().end() );
+        ++itPath )
+    {
+        filePath        = itPath->second;
+        allFilesExists &= ::boost::filesystem::exists(filePath);
+    }
+    return allFilesExists;
+}
+
+//------------------------------------------------------------------------------
+
+ImageRGBLookupLazySource::ImageRGBLookupLazySource( ImageRGBLookupLazyInformation::sptr dcmInfo ) :
+    m_dcmInfo ( dcmInfo )
+{
+    SLM_ASSERT( "ImageRGBLookupLazySource needs at least one dicom file to read an image.",
+                !dcmInfo->m_dicomSeries->getLocalDicomPaths().empty());
+
+    m_frameSize       = m_dcmInfo->m_rows*m_dcmInfo->m_columns*m_dcmInfo->m_imageType.sizeOf()*3;
+    m_currentFrame    = 0;
+    m_currentPosition = 0;
+    m_currentPath     = m_dcmInfo->m_dicomSeries->getLocalDicomPaths().begin();
+
+    // Read instance
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    const std::string filename = m_dcmInfo->m_dicomSeries->getLocalDicomPaths().begin()->second.string();
+    status = fileFormat.loadFile(filename.c_str());
+    FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+    dataset = fileFormat.getDataset();
+
+    if(m_dcmInfo->m_bitsAllocated == 16)
+    {
+        const Uint16* redLookup;
+        const Uint16* greenLookup;
+        const Uint16* blueLookup;
+        // Those values are freed by the dataset destructor
+        dataset->findAndGetUint16Array(DCM_RedPaletteColorLookupTableData, redLookup);
+        dataset->findAndGetUint16Array(DCM_GreenPaletteColorLookupTableData, greenLookup);
+        dataset->findAndGetUint16Array(DCM_BluePaletteColorLookupTableData, blueLookup);
+        m_redLookup   = (void*) redLookup;
+        m_greenLookup = (void*) greenLookup;
+        m_blueLookup  = (void*) blueLookup;
+    }
+    else
+    {
+        const Uint8* redLookup;
+        const Uint8* greenLookup;
+        const Uint8* blueLookup;
+        // Those values are freed by the dataset destructor
+        dataset->findAndGetUint8Array(DCM_RedPaletteColorLookupTableData, redLookup);
+        dataset->findAndGetUint8Array(DCM_GreenPaletteColorLookupTableData, greenLookup);
+        dataset->findAndGetUint8Array(DCM_BluePaletteColorLookupTableData, blueLookup);
+        m_redLookup   = (void*) redLookup;
+        m_greenLookup = (void*) greenLookup;
+        m_blueLookup  = (void*) blueLookup;
+    }
+
+    if(m_dcmInfo->m_bitsAllocated == 16)
+    {
+        m_frame = static_cast<char*>(::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyReader::createInstanceBuffer(
+                                         m_dcmInfo->m_rows, m_dcmInfo->m_columns, m_currentPath->second,
+                                         (Uint16*)m_redLookup,
+                                         (Uint16*)m_greenLookup, (Uint16*)m_blueLookup,
+                                         m_dcmInfo->m_pixelValueBitsAllocated));
+    }
+    else
+    {
+        m_frame = static_cast<char*>(::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyReader::createInstanceBuffer(
+                                         m_dcmInfo->m_rows, m_dcmInfo->m_columns, m_currentPath->second,
+                                         (Uint8*)m_redLookup,
+                                         (Uint8*)m_greenLookup, (Uint8*)m_blueLookup,
+                                         m_dcmInfo->m_pixelValueBitsAllocated));
+    }
+}
+
+//------------------------------------------------------------------------------
+
+std::streamsize ImageRGBLookupLazySource::read(char* stream, std::streamsize size)
+{
+    std::streamsize result = -1;
+
+    // Be sure that all files exist when reading the first frame
+    if(m_currentFrame == 0 && m_currentPosition == 0)
+    {
+        bool exist = filesStillExist(m_dcmInfo->m_dicomSeries);
+        OSLM_ERROR_IF( "Error while reading dicom files : " <<
+                       m_dcmInfo->m_dicomSeries->getLocalDicomPaths().begin()->second.string() << " ...", !exist );
+    }
+
+    // Load new frame
+    if(m_currentPosition + size > m_frameSize)
+    {
+        // Copy remaining bytes
+        const size_t remainingBytes = m_frameSize - m_currentPosition;
+        const size_t extraBytes     = size - remainingBytes;
+
+        if(remainingBytes > 0)
+        {
+            memcpy(stream, m_frame + m_currentPosition, remainingBytes);
+            result = remainingBytes;
+        }
+
+        // Change frame
+        delete m_frame;
+        ++m_currentFrame;
+        ++m_currentPath;
+        m_currentPosition = 0;
+
+        // If there is more frame
+        if(m_currentPath != m_dcmInfo->m_dicomSeries->getLocalDicomPaths().end())
+        {
+            // Copy extra bytes from the new frame
+            if(extraBytes > 0)
+            {
+                if(m_dcmInfo->m_bitsAllocated == 16)
+                {
+                    m_frame =
+                        static_cast<char*>(::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyReader::
+                                           createInstanceBuffer(
+                                               m_dcmInfo->m_rows, m_dcmInfo->m_columns, m_currentPath->second,
+                                               (Uint16*)m_redLookup,
+                                               (Uint16*)m_greenLookup, (Uint16*)m_blueLookup,
+                                               m_dcmInfo->m_pixelValueBitsAllocated));
+                }
+                else
+                {
+                    m_frame =
+                        static_cast<char*>(::fwDcmtkIO::reader::rgblookup::ImageRGBLookupLazyReader::
+                                           createInstanceBuffer(
+                                               m_dcmInfo->m_rows, m_dcmInfo->m_columns, m_currentPath->second,
+                                               (Uint8*)m_redLookup,
+                                               (Uint8*)m_greenLookup, (Uint8*)m_blueLookup,
+                                               m_dcmInfo->m_pixelValueBitsAllocated));
+                }
+
+                memcpy(stream, m_frame + m_currentPosition, extraBytes);
+                m_currentPosition += extraBytes;
+                result             = remainingBytes + extraBytes;
+            }
+        }
+        else
+        {
+            SLM_TRACE("Reading process over.");
+        }
+
+    }
+    // Copy bytes from the loaded frame
+    else
+    {
+        memcpy(stream, m_frame + m_currentPosition, size);
+        m_currentPosition += size;
+        result             = size;
+
+        if(m_currentPath->second == m_dcmInfo->m_dicomSeries->getLocalDicomPaths().rbegin()->second &&
+           m_currentPosition == m_frameSize)
+        {
+            SLM_TRACE("Reading process over.");
+            delete m_frame;
+        }
+    }
+
+    return result;
+
+}
+
+
+//------------------------------------------------------------------------------
+
+ImageRGBLookupLazyStream::ImageRGBLookupLazyStream( ImageRGBLookupLazyInformation::sptr dcmInfo ) :
+    m_dcmInfo ( dcmInfo )
+{
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(std::istream) ImageRGBLookupLazyStream::get()
+{
+    SPTR(::boost::iostreams::stream<ImageRGBLookupLazySource>) is
+        = std::make_shared< ::boost::iostreams::stream<ImageRGBLookupLazySource> >( m_dcmInfo );
+    return is;
+}
+
+//------------------------------------------------------------------------------
+
+} //rgblookup
+} //reader
+} //fwDcmtkIO
diff --git a/SrcLib/io/fwDcmtkIO/test/CMakeLists.txt b/SrcLib/io/fwDcmtkIO/test/CMakeLists.txt
new file mode 100644
index 0000000..87c1356
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/CMakeLists.txt
@@ -0,0 +1,10 @@
+
+fwLoadProperties()
+
+
+find_package (Boost REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
diff --git a/SrcLib/io/fwDcmtkIO/test/Properties.cmake b/SrcLib/io/fwDcmtkIO/test/Properties.cmake
new file mode 100644
index 0000000..80c75bc
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/Properties.cmake
@@ -0,0 +1,15 @@
+
+set( NAME fwDcmtkIOTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwDcmtkIO
+    fwTools
+    fwCore
+    fwTest
+    fwThread
+    fwData
+    fwMedData
+    fwMemory
+    )
+set( REQUIREMENTS )
diff --git a/SrcLib/io/fwDcmtkIO/test/cppunit.options b/SrcLib/io/fwDcmtkIO/test/cppunit.options
new file mode 100644
index 0000000..56c21ad
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/cppunit.options
@@ -0,0 +1,22 @@
+CLASSTEST=[
+    'SeriesEnquirerTest',
+    'DicomSeriesDBReaderTest',
+    'DicomSeriesWriterTest',
+    'DicomAnonymizerTest',
+    'SeriesDBReaderTest',
+    'DicomDirTest'
+    ]
+
+USE = ['boost']
+LIB = [
+       'fwDcmtkIO_0-1',
+       'fwTools_0-1',
+       'fwCore_0-1',
+       'fwTest_0-1',
+       'fwThread_0-1',
+       'fwData_0-1',
+       'fwMedData_0-1',
+       'fwDicomData_0-1',
+       'vtkGdcmIO_0-1'
+       ]
+CONSOLE='yes'
diff --git a/SrcLib/io/fwDcmtkIO/test/tu/include/DicomDirTest.hpp b/SrcLib/io/fwDcmtkIO/test/tu/include/DicomDirTest.hpp
new file mode 100644
index 0000000..540eccc
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/tu/include/DicomDirTest.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_UT_DICOMDIRTEST_HPP__
+#define __FWDCMTKIO_UT_DICOMDIRTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <boost/filesystem.hpp>
+
+namespace fwDcmtkIO
+{
+namespace ut
+{
+
+class DicomDirTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomDirTest );
+CPPUNIT_TEST( readDicomDir );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    // Interface
+    void setUp();
+    void tearDown();
+
+    // Test functions
+    void readDicomDir();
+
+};
+
+} // namespace ut
+} // namespace fwDcmtkIO
+
+#endif // __FWDCMTKIO_UT_DICOMDIRTEST_HPP__
+
diff --git a/SrcLib/io/fwDcmtkIO/test/tu/include/DicomSeriesDBReaderTest.hpp b/SrcLib/io/fwDcmtkIO/test/tu/include/DicomSeriesDBReaderTest.hpp
new file mode 100644
index 0000000..2f8ea18
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/tu/include/DicomSeriesDBReaderTest.hpp
@@ -0,0 +1,38 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_UT_DICOMSERIESDBREADERTEST_HPP__
+#define __FWDCMTKIO_UT_DICOMSERIESDBREADERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDcmtkIO
+{
+namespace ut
+{
+
+class DicomSeriesDBReaderTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomSeriesDBReaderTest );
+CPPUNIT_TEST( readDicomSeriesDBTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp();
+    void tearDown();
+
+    void readDicomSeriesDBTest();
+
+};
+
+} // namespace ut
+} // namespace fwDcmtkIO
+
+#endif // __FWDCMTKIO_UT_DICOMSERIESDBREADERTEST_HPP__
+
diff --git a/SrcLib/io/fwDcmtkIO/test/tu/include/SeriesDBReaderTest.hpp b/SrcLib/io/fwDcmtkIO/test/tu/include/SeriesDBReaderTest.hpp
new file mode 100644
index 0000000..05725e2
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/tu/include/SeriesDBReaderTest.hpp
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKIO_UT_SERIESDBREADERTEST_HPP__
+#define __FWDCMTKIO_UT_SERIESDBREADERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDcmtkIO
+{
+namespace ut
+{
+
+class SeriesDBReaderTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( SeriesDBReaderTest );
+CPPUNIT_TEST( readACHSeriesDBTest );
+CPPUNIT_TEST( readACHLazySeriesDBTest );
+CPPUNIT_TEST( readCTSeriesDBTest );
+CPPUNIT_TEST( readCTLazySeriesDBTest );
+CPPUNIT_TEST( readMRSeriesDBTest );
+CPPUNIT_TEST( readMRLazySeriesDBTest );
+CPPUNIT_TEST( readOTSeriesDBTest );
+CPPUNIT_TEST( readOTLazySeriesDBTest );
+CPPUNIT_TEST( readUnsupportedSeriesDBTest );
+CPPUNIT_TEST( readUnsupportedLazySeriesDBTest );
+CPPUNIT_TEST( readDisabledSeriesDBTest );
+CPPUNIT_TEST( readDisabledLazySeriesDBTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp();
+    void tearDown();
+
+    /// Read ACH Series
+    void readACHSeriesDBTest();
+    void readACHLazySeriesDBTest();
+
+    /// Read CT Series (01-CT-DICOM_LIVER)
+    void readCTSeriesDBTest();
+    void readCTLazySeriesDBTest();
+
+    /// Read MR Series (46-MR-BARRE-MONO2-12-shoulder)
+    void readMRSeriesDBTest();
+    void readMRLazySeriesDBTest();
+
+    /// Read OT Series (42-OT-BARRE-MONO2-8-colon) (Secondary capture)
+    void readOTSeriesDBTest();
+    void readOTLazySeriesDBTest();
+
+    /// Read unsupported Series (71-CT-DICOM_SEG)
+    void readUnsupportedSeriesDBTest();
+    void readUnsupportedLazySeriesDBTest();
+
+    /// Read disabled Series (Try to read MR when only CT is enabled)
+    void readDisabledSeriesDBTest();
+    void readDisabledLazySeriesDBTest();
+
+protected:
+    /// Read and check ACH series
+    void readACHSeries();
+
+    /// Read and check CT series (01-CT-DICOM_LIVER)
+    void readCTSeries();
+
+    /// Read and check MR series (46-MR-BARRE-MONO2-12-shoulder)
+    void readMRSeries();
+
+    /// Read and check OT series (42-OT-BARRE-MONO2-8-colon) (Secondary capture)
+    void readOTSeries();
+
+    /// Read unsupported series (71-CT-DICOM_SEG)
+    void readUnsupportedSeries();
+
+    /// Read disabled series (Try to read MR when only CT is enabled)
+    void readDisabledSeries();
+
+
+};
+
+} // namespace ut
+} // namespace fwDcmtkIO
+
+#endif // __FWDCMTKIO_UT_SERIESDBREADERTEST_HPP__
+
diff --git a/SrcLib/io/fwDcmtkIO/test/tu/src/DicomDirTest.cpp b/SrcLib/io/fwDcmtkIO/test/tu/src/DicomDirTest.cpp
new file mode 100644
index 0000000..1772528
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/tu/src/DicomDirTest.cpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DicomDirTest.hpp"
+
+#include <fwDcmtkIO/helper/DicomDir.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/foreach.hpp>
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDcmtkIO::ut::DicomDirTest );
+
+namespace fwDcmtkIO
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DicomDirTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomDirTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomDirTest::readDicomDir()
+{
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() /
+                                           "fw4spl/Patient/Dicom/DicomDB/82-MR-SAGITTAL-KNEE-DICOMDIR";
+    const std::string pathStr = ::boost::algorithm::replace_all_copy(path.string(), "\\", "/");
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    std::vector<std::string> filenames;
+
+    // Read DICOMDIR file
+    CPPUNIT_ASSERT(::fwDcmtkIO::helper::DicomDir::readDicomDir(path, filenames));
+    CPPUNIT_ASSERT_EQUAL( size_t( 84 ), filenames.size());
+
+    // Verify filenames
+    unsigned int i = 0;
+    for(const std::string& filename: filenames)
+    {
+        std::string newFilename = ::boost::algorithm::replace_all_copy(filename, "\\", "/");
+
+        std::stringstream ss;
+        ss << pathStr << "/DICOM/PT0/ST0/SE0/IM" << i++;
+        CPPUNIT_ASSERT_EQUAL(ss.str(), newFilename);
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+
+} // namespace fwDcmtkIO
+
diff --git a/SrcLib/io/fwDcmtkIO/test/tu/src/DicomSeriesDBReaderTest.cpp b/SrcLib/io/fwDcmtkIO/test/tu/src/DicomSeriesDBReaderTest.cpp
new file mode 100644
index 0000000..e010c67
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/tu/src/DicomSeriesDBReaderTest.cpp
@@ -0,0 +1,61 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DicomSeriesDBReaderTest.hpp"
+
+#include <fwDcmtkIO/SeriesDBReader.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDcmtkIO::ut::DicomSeriesDBReaderTest );
+
+namespace fwDcmtkIO
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReaderTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReaderTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBReaderTest::readDicomSeriesDBTest()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/ACHGenou";
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+}
+
+} // namespace ut
+
+} // namespace fwDcmtkIO
+
diff --git a/SrcLib/io/fwDcmtkIO/test/tu/src/SeriesDBReaderTest.cpp b/SrcLib/io/fwDcmtkIO/test/tu/src/SeriesDBReaderTest.cpp
new file mode 100644
index 0000000..35ed5ce
--- /dev/null
+++ b/SrcLib/io/fwDcmtkIO/test/tu/src/SeriesDBReaderTest.cpp
@@ -0,0 +1,611 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "SeriesDBReaderTest.hpp"
+
+#include <fwCore/Exception.hpp>
+
+#include <fwData/Image.hpp>
+
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwDcmtkIO/SeriesDBReader.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwTest/Data.hpp>
+#include <fwTest/DicomReaderTest.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/property_tree/exceptions.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+CPPUNIT_TEST_SUITE_REGISTRATION (::fwDcmtkIO::ut::SeriesDBReaderTest);
+
+namespace fwDcmtkIO
+{
+namespace ut
+{
+
+static ::fwTest::Exception e(""); // force link with fwTest
+
+//------------------------------------------------------------------------------
+
+std::string getValue(const ::boost::property_tree::ptree& node, const std::string& name,
+                     const ::boost::filesystem::path& filePath )
+{
+    std::string value;
+    try
+    {
+        value = node.get< std::string >(name);
+
+        // Remove leading and trailing spaces
+        size_t first = value.find_first_not_of(" ");
+        if (first != std::string::npos)
+        {
+            size_t last = value.find_last_not_of(" ");
+            value = value.substr(first, last - first + 1);
+        }
+    }
+    catch( ::boost::property_tree::ptree_bad_path& )
+    {
+        SLM_WARN(name + " information are missing in '"+ filePath.string() +"'.");
+        value = "";
+    }
+
+    return value;
+}
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Verify tag values according to JSON files generated from DICOM dump
+ * @param filename DICOM folder name
+ * @param seriesDB SeriesDB object containing DICOM series
+ */
+void verifyTagValues(const std::string& filename, const ::fwMedData::SeriesDB::sptr& seriesDB)
+{
+    const double delta                        = 0.001;
+    const ::boost::filesystem::path dicomPath = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB";
+    const ::boost::filesystem::path metaPath  = dicomPath / "META";
+
+    for(::fwMedData::SeriesDB::iterator sIt = seriesDB->begin(); sIt != seriesDB->end(); ++sIt)
+    {
+        ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(*sIt);
+
+        // Parse META File
+        const std::string metaName               = filename + "/" + series->getInstanceUID() + ".json";
+        const ::boost::filesystem::path metaFile = metaPath / metaName;
+        const std::string mf                     = metaFile.string();
+        ::boost::property_tree::ptree root;
+        ::boost::property_tree::json_parser::read_json(mf, root);
+
+        // Series
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesInstanceUID", mf), series->getInstanceUID());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "Modality", mf), series->getModality());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesDate", mf), series->getDate());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesTime", mf), series->getTime());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesDescription", mf), series->getDescription());
+
+        ::fwMedData::DicomValuesType performingPhysiciansName = series->getPerformingPhysiciansName();
+        std::string performingPhysiciansNameStr = "";
+        for(::fwMedData::DicomValuesType::iterator i = performingPhysiciansName.begin();
+            i != performingPhysiciansName.end(); ++i)
+        {
+            performingPhysiciansNameStr += *i;
+            if((i+1) != performingPhysiciansName.end())
+            {
+                performingPhysiciansNameStr += "\\";
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PerformingPhysiciansName", mf), performingPhysiciansNameStr);
+
+
+        // Patient
+        ::fwMedData::Patient::sptr patient = series->getPatient();
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientID", mf), patient->getPatientId());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientName", mf), patient->getName());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientBirthDate", mf), patient->getBirthdate());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientSex", mf), patient->getSex());
+
+        // Study
+        ::fwMedData::Study::sptr study = series->getStudy();
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyInstanceUID", mf), study->getInstanceUID());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyDate", mf), study->getDate());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyTime", mf), study->getTime());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "ReferringPhysicianName", mf), study->getReferringPhysicianName());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyDescription", mf), study->getDescription());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientAge", mf), study->getPatientAge());
+
+        // Equipment
+        ::fwMedData::Equipment::sptr equipment = series->getEquipment();
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "InstitutionName", mf), equipment->getInstitutionName());
+
+        // Image
+        ::fwData::Image::sptr image = series->getImage();
+
+        // PixelSpacing
+        std::vector< std::string > spacingValues;
+        const std::string spacingXY = getValue(root, "PixelSpacing", mf);
+        ::boost::split(spacingValues, spacingXY, boost::is_any_of("\\"));
+        if(!spacingValues[0].empty() && !spacingValues[1].empty())
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(spacingValues[0]),
+                                         image->getSpacing()[0], delta);
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(spacingValues[1]),
+                                         image->getSpacing()[1], delta);
+        }
+
+        // SliceThickness - This value is recomputed using the SliceThicknessModifier filter.
+//        std::string spacingZ = getValue(root, "SliceThickness", mf);
+//        CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(spacingZ), image->getSpacing()[2], 0.0001);
+
+        // Origin
+        std::string origin = getValue(root, "ImagePositionPatient", mf);
+        ::boost::algorithm::replace_all(origin, " ", "");
+        std::vector< std::string > originValues;
+        ::boost::split(originValues, origin, boost::is_any_of("\\"));
+        if(originValues.size() == 3)
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(originValues[0]), image->getOrigin()[0],
+                                         delta);
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(originValues[1]), image->getOrigin()[1],
+                                         delta);
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(originValues[2]), image->getOrigin()[2],
+                                         delta);
+        }
+
+        // Size
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(getValue(root, "Rows", mf)),
+                                     image->getSize()[0], delta);
+        CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(getValue(root, "Columns", mf)),
+                                     image->getSize()[1], delta);
+        //TODO: Try to find a way to test depth size.
+
+        // Window Center
+        const std::string windowCenter = getValue(root, "WindowCenter", mf);
+        if(!windowCenter.empty())
+        {
+            std::vector< std::string > windowCenterValues;
+            ::boost::split(windowCenterValues, windowCenter, boost::is_any_of("\\"));
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(windowCenterValues[0]),
+                                         image->getWindowCenter(), delta);
+        }
+        else
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(0,image->getWindowCenter(), delta);
+        }
+
+        // Window Width
+        const std::string windowWidth = getValue(root, "WindowWidth", mf);
+        if(!windowWidth.empty())
+        {
+            std::vector< std::string > windowWidthValues;
+            ::boost::split(windowWidthValues, windowWidth, boost::is_any_of("\\"));
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(windowWidthValues[0]),
+                                         image->getWindowWidth(), delta);
+        }
+        else
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(0,image->getWindowWidth(), delta);
+        }
+
+        // Number of components
+        const std::string photometricInterpretation = getValue(root, "PhotometricInterpretation", mf);
+        std::size_t nbComponents                    = 0;
+        if(photometricInterpretation == "MONOCHROME2")
+        {
+            nbComponents = 1;
+        }
+        else if(photometricInterpretation == "RGB" || photometricInterpretation == "YBR")
+        {
+            nbComponents = 3;
+        }
+        else if(photometricInterpretation == "ARGB" || photometricInterpretation == "CMYK")
+        {
+            nbComponents = 4;
+        }
+        CPPUNIT_ASSERT_EQUAL(nbComponents, image->getNumberOfComponents());
+
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::tearDown()
+{
+    // Clean up after the test run.
+}
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readACHSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readACHSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readACHLazySeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::LAZY);
+    this->readACHSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readCTSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTLazySeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::LAZY);
+    this->readCTSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readMRSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRLazySeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::LAZY);
+    this->readMRSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readOTSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readOTSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readOTLazySeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::LAZY);
+    this->readOTSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readUnsupportedSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readUnsupportedSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readUnsupportedLazySeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::LAZY);
+    this->readUnsupportedSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readDisabledSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readDisabledSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readDisabledLazySeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::LAZY);
+    this->readDisabledSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readACHSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/ACHGenou";
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+
+    // Check trimmed values
+    CPPUNIT_ASSERT( ::fwTest::DicomReaderTest::checkSeriesACHGenouTrimmed( series ) );
+
+    // Read image in lazy mode
+    ::fwDataTools::helper::Image locker ( series->getImage() );
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "01-CT-DICOM_LIVER";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.00001;
+
+    // Check number of series
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Read image buffer
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Check number of dimensions
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), image->getNumberOfDimensions());
+
+    // Check size
+    ::fwData::Image::SizeType size = image->getSize();
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[0]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[1]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 129 ), size[2]);
+
+    // Check spacing
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.57 ), spacing[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.57 ), spacing[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1.6 ), spacing[2], delta);
+
+    // Check origin
+    ::fwData::Image::OriginType origin = image->getOrigin();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[2], delta);
+
+    // Check window center
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowCenter(), delta);
+
+    // Check window width
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowWidth(), delta);
+
+    // Check image type
+    CPPUNIT_ASSERT_EQUAL(::fwTools::Type::s_INT16, image->getType());
+
+    // Verify tag values according to json file
+    verifyTagValues(filename, seriesDB);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "46-MR-BARRE-MONO2-12-shoulder";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    // Check number of series
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Read image buffer
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Check number of dimensions - FIXME Should be 2 but when creating an image with 2D size, the visualization crashes...
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), image->getNumberOfDimensions());
+
+    // Check size
+    ::fwData::Image::SizeType size = image->getSize();
+    CPPUNIT_ASSERT_EQUAL( size_t( 1024 ), size[0]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1024 ), size[1]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), size[2]);
+
+    // Check spacing
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.2 ), spacing[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.2 ), spacing[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 6 ), spacing[2], delta);
+
+    // Check origin
+    ::fwData::Image::OriginType origin = image->getOrigin();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( -180.058 ), origin[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( -97.1478 ), origin[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 112.828 ), origin[2], delta);
+
+    // Check window center
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1000 ), image->getWindowCenter(), delta);
+
+    // Check window width
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 2000 ), image->getWindowWidth(), delta);
+
+    // Check image type
+    CPPUNIT_ASSERT_EQUAL(::fwTools::Type::s_DOUBLE, image->getType());
+
+    // Verify tag values according to json file
+    verifyTagValues(filename, seriesDB);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readOTSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "42-OT-BARRE-MONO2-8-colon";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    // Check number of series
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Read image buffer
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Check number of dimensions - FIXME Should be 2 but when creating an image with 2D size, the visualization crashes...
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), image->getNumberOfDimensions());
+
+    // Check size
+    ::fwData::Image::SizeType size = image->getSize();
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[0]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[1]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), size[2]);
+
+    // Check spacing
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), spacing[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), spacing[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), spacing[2], delta);
+
+    // Check origin
+    ::fwData::Image::OriginType origin = image->getOrigin();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[2], delta);
+
+    // Check window center
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowCenter(), delta);
+
+    // Check window width
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowWidth(), delta);
+
+    // Check image type
+    CPPUNIT_ASSERT_EQUAL(::fwTools::Type::s_UINT8, image->getType());
+
+    // Verify tag values according to json file
+    verifyTagValues(filename, seriesDB);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readUnsupportedSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SEG";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_THROW(reader->read(), ::fwCore::Exception);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readDisabledSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "46-MR-BARRE-MONO2-12-shoulder";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    std::vector< std::string > supportedSOPClassContainer;
+    supportedSOPClassContainer.push_back("1.2.840.10008.5.1.4.1.1.2");   // CT Image Storage
+
+    ::fwDcmtkIO::SeriesDBReader::sptr reader = ::fwDcmtkIO::SeriesDBReader::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+    reader->setSupportedSOPClassContainer(supportedSOPClassContainer);
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Verify that the reading has failed
+    CPPUNIT_ASSERT_EQUAL( size_t( 0 ), seriesDB->size());
+}
+
+//------------------------------------------------------------------------------
+
+}// namespace ut
+
+} // namespace fwDcmtkIO
+
diff --git a/SrcLib/io/fwDcmtkTools/CMakeLists.txt b/SrcLib/io/fwDcmtkTools/CMakeLists.txt
new file mode 100644
index 0000000..159d45b
--- /dev/null
+++ b/SrcLib/io/fwDcmtkTools/CMakeLists.txt
@@ -0,0 +1,8 @@
+fwLoadProperties()
+
+
+find_package(Boost COMPONENTS filesystem REQUIRED)
+
+find_package(DCMTK REQUIRED)
+fwForwardInclude( ${DCMTK_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
diff --git a/SrcLib/io/fwDcmtkTools/Properties.cmake b/SrcLib/io/fwDcmtkTools/Properties.cmake
new file mode 100644
index 0000000..3c70c47
--- /dev/null
+++ b/SrcLib/io/fwDcmtkTools/Properties.cmake
@@ -0,0 +1,6 @@
+
+set( NAME fwDcmtkTools )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES fwCore fwTools )
+set( REQUIREMENTS )
diff --git a/SrcLib/io/fwDcmtkTools/include/fwDcmtkTools/Dictionary.hpp b/SrcLib/io/fwDcmtkTools/include/fwDcmtkTools/Dictionary.hpp
new file mode 100644
index 0000000..2c24972
--- /dev/null
+++ b/SrcLib/io/fwDcmtkTools/include/fwDcmtkTools/Dictionary.hpp
@@ -0,0 +1,33 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKTOOLS_DICTIONARY_HPP__
+#define __FWDCMTKTOOLS_DICTIONARY_HPP__
+
+#include "fwDcmtkTools/config.hpp"
+
+#include <fwTools/Type.hpp>
+
+#include <stdint.h>
+
+namespace fwDcmtkTools
+{
+
+/**
+ * @brief DICOM Dictionary Helper
+ */
+class FWDCMTKTOOLS_CLASS_API Dictionary
+{
+public:
+    /// Load the DICOM dictionary
+    FWDCMTKTOOLS_API static void loadDictionary();
+
+};
+
+} //fwDcmtkTools
+
+
+#endif // __FWDCMTKTOOLS_DICTIONARY_HPP__
diff --git a/SrcLib/io/fwDcmtkTools/include/fwDcmtkTools/namespace.hpp b/SrcLib/io/fwDcmtkTools/include/fwDcmtkTools/namespace.hpp
new file mode 100644
index 0000000..0afd846
--- /dev/null
+++ b/SrcLib/io/fwDcmtkTools/include/fwDcmtkTools/namespace.hpp
@@ -0,0 +1,16 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDCMTKTOOLS_NAMESPACE_HPP__
+#define __FWDCMTKTOOLS_NAMESPACE_HPP__
+
+/// fwDcmtkTools contains general tools to handle DCMTK library
+namespace fwDcmtkTools
+{
+
+} //namespace fwDcmtkTools
+
+#endif /* __FWDCMTKTOOLS_NAMESPACE_HPP__ */
diff --git a/SrcLib/io/fwDcmtkTools/rc/dicom.dic b/SrcLib/io/fwDcmtkTools/rc/dicom.dic
new file mode 100644
index 0000000..c966bf2
--- /dev/null
+++ b/SrcLib/io/fwDcmtkTools/rc/dicom.dic
@@ -0,0 +1,3908 @@
+#
+#  Copyright (C) 1994-2012, OFFIS e.V.
+#  All rights reserved.  See COPYRIGHT file for details.
+#
+#  This software and supporting documentation were developed by
+#
+#    OFFIS e.V.
+#    R&D Division Health
+#    Escherweg 2
+#    D-26121 Oldenburg, Germany
+#
+#
+#  Module:  dcmdata
+#
+#  Author:  Andrew Hewett, Marco Eichelberg, Joerg Riesmeier
+#
+#  Purpose:
+#  This is the global DICOM data dictionary for the dcmtk class library.
+#
+#  Last Update:      $Author: joergr $
+#  Update Date:      $Date: 2012-02-07 11:44:21 $
+#  CVS/RCS Revision: $Revision: 1.20 $
+#  Status:           $State: Exp $
+#
+# This file contains the complete data dictionary from the 2011 edition of the
+# DICOM standard.  This also includes the definitions from the DICOS (Digital
+# Imaging and Communications in Security) standard.
+#
+# In addition, the data dictionary entries from the following final text
+# supplements and correction items have been incorporated:
+# - Supplement 152.
+# - CP 1064, 1147.
+#
+# Each line represents an entry in the data dictionary.  Each line has 5 fields
+# (Tag, VR, Name, VM, Version).  Entries need not be in ascending tag order.
+#
+# Entries may override existing entries.
+#
+# Each field must be separated by a single tab.  The tag values (gggg,eeee)
+# must be in hexedecimal and must be surrounded by parentheses.  Repeating
+# groups are represented by indicating the range (gggg-gggg,eeee).  By default
+# the repeating notation only represents even numbers.  A range where only
+# odd numbers are valid is represented using the notation (gggg-o-gggg,eeee).
+# A range can represent both even and odd numbers using the notation
+# (gggg-u-gggg,eeee).  The element part of the tag can also be a range.
+#
+# Comments have a '#' at the beginning of the line.
+#
+# Tag		VR	Name			VM	Version
+#
+(0000,0000)	UL	CommandGroupLength	1	DICOM_2011
+(0000,0002)	UI	AffectedSOPClassUID	1	DICOM_2011
+(0000,0003)	UI	RequestedSOPClassUID	1	DICOM_2011
+(0000,0100)	US	CommandField	1	DICOM_2011
+(0000,0110)	US	MessageID	1	DICOM_2011
+(0000,0120)	US	MessageIDBeingRespondedTo	1	DICOM_2011
+(0000,0600)	AE	MoveDestination	1	DICOM_2011
+(0000,0700)	US	Priority	1	DICOM_2011
+(0000,0800)	US	DataSetType	1	DICOM_2011
+(0000,0900)	US	Status	1	DICOM_2011
+(0000,0901)	AT	OffendingElement	1-n	DICOM_2011
+(0000,0902)	LO	ErrorComment	1	DICOM_2011
+(0000,0903)	US	ErrorID	1	DICOM_2011
+(0000,1000)	UI	AffectedSOPInstanceUID	1	DICOM_2011
+(0000,1001)	UI	RequestedSOPInstanceUID	1	DICOM_2011
+(0000,1002)	US	EventTypeID	1	DICOM_2011
+(0000,1005)	AT	AttributeIdentifierList	1-n	DICOM_2011
+(0000,1008)	US	ActionTypeID	1	DICOM_2011
+(0000,1020)	US	NumberOfRemainingSubOperations	1	DICOM_2011
+(0000,1021)	US	NumberOfCompletedSubOperations	1	DICOM_2011
+(0000,1022)	US	NumberOfFailedSubOperations	1	DICOM_2011
+(0000,1023)	US	NumberOfWarningSubOperations	1	DICOM_2011
+(0000,1030)	AE	MoveOriginatorApplicationEntityTitle	1	DICOM_2011
+(0000,1031)	US	MoveOriginatorMessageID	1	DICOM_2011
+(0002,0000)	UL	FileMetaInformationGroupLength	1	DICOM_2011
+(0002,0001)	OB	FileMetaInformationVersion	1	DICOM_2011
+(0002,0002)	UI	MediaStorageSOPClassUID	1	DICOM_2011
+(0002,0003)	UI	MediaStorageSOPInstanceUID	1	DICOM_2011
+(0002,0010)	UI	TransferSyntaxUID	1	DICOM_2011
+(0002,0012)	UI	ImplementationClassUID	1	DICOM_2011
+(0002,0013)	SH	ImplementationVersionName	1	DICOM_2011
+(0002,0016)	AE	SourceApplicationEntityTitle	1	DICOM_2011
+(0002,0100)	UI	PrivateInformationCreatorUID	1	DICOM_2011
+(0002,0102)	OB	PrivateInformation	1	DICOM_2011
+(0004,1130)	CS	FileSetID	1	DICOM_2011
+(0004,1141)	CS	FileSetDescriptorFileID	1-8	DICOM_2011
+(0004,1142)	CS	SpecificCharacterSetOfFileSetDescriptorFile	1	DICOM_2011
+(0004,1200)	up	OffsetOfTheFirstDirectoryRecordOfTheRootDirectoryEntity	1	DICOM_2011
+(0004,1202)	up	OffsetOfTheLastDirectoryRecordOfTheRootDirectoryEntity	1	DICOM_2011
+(0004,1212)	US	FileSetConsistencyFlag	1	DICOM_2011
+(0004,1220)	SQ	DirectoryRecordSequence	1	DICOM_2011
+(0004,1400)	up	OffsetOfTheNextDirectoryRecord	1	DICOM_2011
+(0004,1410)	US	RecordInUseFlag	1	DICOM_2011
+(0004,1420)	up	OffsetOfReferencedLowerLevelDirectoryEntity	1	DICOM_2011
+(0004,1430)	CS	DirectoryRecordType	1	DICOM_2011
+(0004,1432)	UI	PrivateRecordUID	1	DICOM_2011
+(0004,1500)	CS	ReferencedFileID	1-8	DICOM_2011
+(0004,1510)	UI	ReferencedSOPClassUIDInFile	1	DICOM_2011
+(0004,1511)	UI	ReferencedSOPInstanceUIDInFile	1	DICOM_2011
+(0004,1512)	UI	ReferencedTransferSyntaxUIDInFile	1	DICOM_2011
+(0004,151A)	UI	ReferencedRelatedGeneralSOPClassUIDInFile	1-n	DICOM_2011
+(0008,0005)	CS	SpecificCharacterSet	1-n	DICOM_2011
+(0008,0006)	SQ	LanguageCodeSequence	1	DICOM_2011
+(0008,0008)	CS	ImageType	2-n	DICOM_2011
+(0008,0012)	DA	InstanceCreationDate	1	DICOM_2011
+(0008,0013)	TM	InstanceCreationTime	1	DICOM_2011
+(0008,0014)	UI	InstanceCreatorUID	1	DICOM_2011
+(0008,0016)	UI	SOPClassUID	1	DICOM_2011
+(0008,0018)	UI	SOPInstanceUID	1	DICOM_2011
+(0008,001A)	UI	RelatedGeneralSOPClassUID	1-n	DICOM_2011
+(0008,001B)	UI	OriginalSpecializedSOPClassUID	1	DICOM_2011
+(0008,0020)	DA	StudyDate	1	DICOM_2011
+(0008,0021)	DA	SeriesDate	1	DICOM_2011
+(0008,0022)	DA	AcquisitionDate	1	DICOM_2011
+(0008,0023)	DA	ContentDate	1	DICOM_2011
+(0008,002A)	DT	AcquisitionDateTime	1	DICOM_2011
+(0008,0030)	TM	StudyTime	1	DICOM_2011
+(0008,0031)	TM	SeriesTime	1	DICOM_2011
+(0008,0032)	TM	AcquisitionTime	1	DICOM_2011
+(0008,0033)	TM	ContentTime	1	DICOM_2011
+(0008,0050)	SH	AccessionNumber	1	DICOM_2011
+(0008,0051)	SQ	IssuerOfAccessionNumberSequence	1	DICOM_2011
+(0008,0052)	CS	QueryRetrieveLevel	1	DICOM_2011
+(0008,0054)	AE	RetrieveAETitle	1-n	DICOM_2011
+(0008,0056)	CS	InstanceAvailability	1	DICOM_2011
+(0008,0058)	UI	FailedSOPInstanceUIDList	1-n	DICOM_2011
+(0008,0060)	CS	Modality	1	DICOM_2011
+(0008,0061)	CS	ModalitiesInStudy	1-n	DICOM_2011
+(0008,0062)	UI	SOPClassesInStudy	1-n	DICOM_2011
+(0008,0064)	CS	ConversionType	1	DICOM_2011
+(0008,0068)	CS	PresentationIntentType	1	DICOM_2011
+(0008,0070)	LO	Manufacturer	1	DICOM_2011
+(0008,0080)	LO	InstitutionName	1	DICOM_2011
+(0008,0081)	ST	InstitutionAddress	1	DICOM_2011
+(0008,0082)	SQ	InstitutionCodeSequence	1	DICOM_2011
+(0008,0090)	PN	ReferringPhysicianName	1	DICOM_2011
+(0008,0092)	ST	ReferringPhysicianAddress	1	DICOM_2011
+(0008,0094)	SH	ReferringPhysicianTelephoneNumbers	1-n	DICOM_2011
+(0008,0096)	SQ	ReferringPhysicianIdentificationSequence	1	DICOM_2011
+(0008,0100)	SH	CodeValue	1	DICOM_2011
+(0008,0102)	SH	CodingSchemeDesignator	1	DICOM_2011
+(0008,0103)	SH	CodingSchemeVersion	1	DICOM_2011
+(0008,0104)	LO	CodeMeaning	1	DICOM_2011
+(0008,0105)	CS	MappingResource	1	DICOM_2011
+(0008,0106)	DT	ContextGroupVersion	1	DICOM_2011
+(0008,0107)	DT	ContextGroupLocalVersion	1	DICOM_2011
+(0008,010B)	CS	ContextGroupExtensionFlag	1	DICOM_2011
+(0008,010C)	UI	CodingSchemeUID	1	DICOM_2011
+(0008,010D)	UI	ContextGroupExtensionCreatorUID	1	DICOM_2011
+(0008,010F)	CS	ContextIdentifier	1	DICOM_2011
+(0008,0110)	SQ	CodingSchemeIdentificationSequence	1	DICOM_2011
+(0008,0112)	LO	CodingSchemeRegistry	1	DICOM_2011
+(0008,0114)	ST	CodingSchemeExternalID	1	DICOM_2011
+(0008,0115)	ST	CodingSchemeName	1	DICOM_2011
+(0008,0116)	ST	CodingSchemeResponsibleOrganization	1	DICOM_2011
+(0008,0117)	UI	ContextUID	1	DICOM_2011
+(0008,0201)	SH	TimezoneOffsetFromUTC	1	DICOM_2011
+(0008,1010)	SH	StationName	1	DICOM_2011
+(0008,1030)	LO	StudyDescription	1	DICOM_2011
+(0008,1032)	SQ	ProcedureCodeSequence	1	DICOM_2011
+(0008,103E)	LO	SeriesDescription	1	DICOM_2011
+(0008,103F)	SQ	SeriesDescriptionCodeSequence	1	DICOM_2011
+(0008,1040)	LO	InstitutionalDepartmentName	1	DICOM_2011
+(0008,1048)	PN	PhysiciansOfRecord	1-n	DICOM_2011
+(0008,1049)	SQ	PhysiciansOfRecordIdentificationSequence	1	DICOM_2011
+(0008,1050)	PN	PerformingPhysicianName	1-n	DICOM_2011
+(0008,1052)	SQ	PerformingPhysicianIdentificationSequence	1	DICOM_2011
+(0008,1060)	PN	NameOfPhysiciansReadingStudy	1-n	DICOM_2011
+(0008,1062)	SQ	PhysiciansReadingStudyIdentificationSequence	1	DICOM_2011
+(0008,1070)	PN	OperatorsName	1-n	DICOM_2011
+(0008,1072)	SQ	OperatorIdentificationSequence	1	DICOM_2011
+(0008,1080)	LO	AdmittingDiagnosesDescription	1-n	DICOM_2011
+(0008,1084)	SQ	AdmittingDiagnosesCodeSequence	1	DICOM_2011
+(0008,1090)	LO	ManufacturerModelName	1	DICOM_2011
+(0008,1110)	SQ	ReferencedStudySequence	1	DICOM_2011
+(0008,1111)	SQ	ReferencedPerformedProcedureStepSequence	1	DICOM_2011
+(0008,1115)	SQ	ReferencedSeriesSequence	1	DICOM_2011
+(0008,1120)	SQ	ReferencedPatientSequence	1	DICOM_2011
+(0008,1125)	SQ	ReferencedVisitSequence	1	DICOM_2011
+(0008,1134)	SQ	ReferencedStereometricInstanceSequence	1	DICOM_2011
+(0008,113A)	SQ	ReferencedWaveformSequence	1	DICOM_2011
+(0008,1140)	SQ	ReferencedImageSequence	1	DICOM_2011
+(0008,114A)	SQ	ReferencedInstanceSequence	1	DICOM_2011
+(0008,114B)	SQ	ReferencedRealWorldValueMappingInstanceSequence	1	DICOM_2011
+(0008,1150)	UI	ReferencedSOPClassUID	1	DICOM_2011
+(0008,1155)	UI	ReferencedSOPInstanceUID	1	DICOM_2011
+(0008,115A)	UI	SOPClassesSupported	1-n	DICOM_2011
+(0008,1160)	IS	ReferencedFrameNumber	1-n	DICOM_2011
+(0008,1161)	UL	SimpleFrameList	1-n	DICOM_2011
+(0008,1162)	UL	CalculatedFrameList	3-3n	DICOM_2011
+(0008,1163)	FD	TimeRange	2	DICOM_2011
+(0008,1164)	SQ	FrameExtractionSequence	1	DICOM_2011
+(0008,1167)	UI	MultiFrameSourceSOPInstanceUID	1	DICOM_2011
+(0008,1195)	UI	TransactionUID	1	DICOM_2011
+(0008,1197)	US	FailureReason	1	DICOM_2011
+(0008,1198)	SQ	FailedSOPSequence	1	DICOM_2011
+(0008,1199)	SQ	ReferencedSOPSequence	1	DICOM_2011
+(0008,1200)	SQ	StudiesContainingOtherReferencedInstancesSequence	1	DICOM_2011
+(0008,1250)	SQ	RelatedSeriesSequence	1	DICOM_2011
+(0008,2111)	ST	DerivationDescription	1	DICOM_2011
+(0008,2112)	SQ	SourceImageSequence	1	DICOM_2011
+(0008,2120)	SH	StageName	1	DICOM_2011
+(0008,2122)	IS	StageNumber	1	DICOM_2011
+(0008,2124)	IS	NumberOfStages	1	DICOM_2011
+(0008,2127)	SH	ViewName	1	DICOM_2011
+(0008,2128)	IS	ViewNumber	1	DICOM_2011
+(0008,2129)	IS	NumberOfEventTimers	1	DICOM_2011
+(0008,212A)	IS	NumberOfViewsInStage	1	DICOM_2011
+(0008,2130)	DS	EventElapsedTimes	1-n	DICOM_2011
+(0008,2132)	LO	EventTimerNames	1-n	DICOM_2011
+(0008,2133)	SQ	EventTimerSequence	1	DICOM_2011
+(0008,2134)	FD	EventTimeOffset	1	DICOM_2011
+(0008,2135)	SQ	EventCodeSequence	1	DICOM_2011
+(0008,2142)	IS	StartTrim	1	DICOM_2011
+(0008,2143)	IS	StopTrim	1	DICOM_2011
+(0008,2144)	IS	RecommendedDisplayFrameRate	1	DICOM_2011
+(0008,2218)	SQ	AnatomicRegionSequence	1	DICOM_2011
+(0008,2220)	SQ	AnatomicRegionModifierSequence	1	DICOM_2011
+(0008,2228)	SQ	PrimaryAnatomicStructureSequence	1	DICOM_2011
+(0008,2229)	SQ	AnatomicStructureSpaceOrRegionSequence	1	DICOM_2011
+(0008,2230)	SQ	PrimaryAnatomicStructureModifierSequence	1	DICOM_2011
+(0008,3001)	SQ	AlternateRepresentationSequence	1	DICOM_2011
+(0008,3010)	UI	IrradiationEventUID	1	DICOM_2011
+(0008,9007)	CS	FrameType	4	DICOM_2011
+(0008,9092)	SQ	ReferencedImageEvidenceSequence	1	DICOM_2011
+(0008,9121)	SQ	ReferencedRawDataSequence	1	DICOM_2011
+(0008,9123)	UI	CreatorVersionUID	1	DICOM_2011
+(0008,9124)	SQ	DerivationImageSequence	1	DICOM_2011
+(0008,9154)	SQ	SourceImageEvidenceSequence	1	DICOM_2011
+(0008,9205)	CS	PixelPresentation	1	DICOM_2011
+(0008,9206)	CS	VolumetricProperties	1	DICOM_2011
+(0008,9207)	CS	VolumeBasedCalculationTechnique	1	DICOM_2011
+(0008,9208)	CS	ComplexImageComponent	1	DICOM_2011
+(0008,9209)	CS	AcquisitionContrast	1	DICOM_2011
+(0008,9215)	SQ	DerivationCodeSequence	1	DICOM_2011
+(0008,9237)	SQ	ReferencedPresentationStateSequence	1	DICOM_2011
+(0008,9410)	SQ	ReferencedOtherPlaneSequence	1	DICOM_2011
+(0008,9458)	SQ	FrameDisplaySequence	1	DICOM_2011
+(0008,9459)	FL	RecommendedDisplayFrameRateInFloat	1	DICOM_2011
+(0008,9460)	CS	SkipFrameRangeFlag	1	DICOM_2011
+(0010,0010)	PN	PatientName	1	DICOM_2011
+(0010,0020)	LO	PatientID	1	DICOM_2011
+(0010,0021)	LO	IssuerOfPatientID	1	DICOM_2011
+(0010,0022)	CS	TypeOfPatientID	1	DICOM_2011
+(0010,0024)	SQ	IssuerOfPatientIDQualifiersSequence	1	DICOM_2011
+(0010,0030)	DA	PatientBirthDate	1	DICOM_2011
+(0010,0032)	TM	PatientBirthTime	1	DICOM_2011
+(0010,0040)	CS	PatientSex	1	DICOM_2011
+(0010,0050)	SQ	PatientInsurancePlanCodeSequence	1	DICOM_2011
+(0010,0101)	SQ	PatientPrimaryLanguageCodeSequence	1	DICOM_2011
+(0010,0102)	SQ	PatientPrimaryLanguageModifierCodeSequence	1	DICOM_2011
+(0010,1000)	LO	OtherPatientIDs	1-n	DICOM_2011
+(0010,1001)	PN	OtherPatientNames	1-n	DICOM_2011
+(0010,1002)	SQ	OtherPatientIDsSequence	1	DICOM_2011
+(0010,1005)	PN	PatientBirthName	1	DICOM_2011
+(0010,1010)	AS	PatientAge	1	DICOM_2011
+(0010,1020)	DS	PatientSize	1	DICOM_2011
+(0010,1021)	SQ	PatientSizeCodeSequence	1	DICOM_2011
+(0010,1030)	DS	PatientWeight	1	DICOM_2011
+(0010,1040)	LO	PatientAddress	1	DICOM_2011
+(0010,1060)	PN	PatientMotherBirthName	1	DICOM_2011
+(0010,1080)	LO	MilitaryRank	1	DICOM_2011
+(0010,1081)	LO	BranchOfService	1	DICOM_2011
+(0010,1090)	LO	MedicalRecordLocator	1	DICOM_2011
+(0010,2000)	LO	MedicalAlerts	1-n	DICOM_2011
+(0010,2110)	LO	Allergies	1-n	DICOM_2011
+(0010,2150)	LO	CountryOfResidence	1	DICOM_2011
+(0010,2152)	LO	RegionOfResidence	1	DICOM_2011
+(0010,2154)	SH	PatientTelephoneNumbers	1-n	DICOM_2011
+(0010,2160)	SH	EthnicGroup	1	DICOM_2011
+(0010,2180)	SH	Occupation	1	DICOM_2011
+(0010,21A0)	CS	SmokingStatus	1	DICOM_2011
+(0010,21B0)	LT	AdditionalPatientHistory	1	DICOM_2011
+(0010,21C0)	US	PregnancyStatus	1	DICOM_2011
+(0010,21D0)	DA	LastMenstrualDate	1	DICOM_2011
+(0010,21F0)	LO	PatientReligiousPreference	1	DICOM_2011
+(0010,2201)	LO	PatientSpeciesDescription	1	DICOM_2011
+(0010,2202)	SQ	PatientSpeciesCodeSequence	1	DICOM_2011
+(0010,2203)	CS	PatientSexNeutered	1	DICOM_2011
+(0010,2210)	CS	AnatomicalOrientationType	1	DICOM_2011
+(0010,2292)	LO	PatientBreedDescription	1	DICOM_2011
+(0010,2293)	SQ	PatientBreedCodeSequence	1	DICOM_2011
+(0010,2294)	SQ	BreedRegistrationSequence	1	DICOM_2011
+(0010,2295)	LO	BreedRegistrationNumber	1	DICOM_2011
+(0010,2296)	SQ	BreedRegistryCodeSequence	1	DICOM_2011
+(0010,2297)	PN	ResponsiblePerson	1	DICOM_2011
+(0010,2298)	CS	ResponsiblePersonRole	1	DICOM_2011
+(0010,2299)	LO	ResponsibleOrganization	1	DICOM_2011
+(0010,4000)	LT	PatientComments	1	DICOM_2011
+(0010,9431)	FL	ExaminedBodyThickness	1	DICOM_2011
+(0012,0010)	LO	ClinicalTrialSponsorName	1	DICOM_2011
+(0012,0020)	LO	ClinicalTrialProtocolID	1	DICOM_2011
+(0012,0021)	LO	ClinicalTrialProtocolName	1	DICOM_2011
+(0012,0030)	LO	ClinicalTrialSiteID	1	DICOM_2011
+(0012,0031)	LO	ClinicalTrialSiteName	1	DICOM_2011
+(0012,0040)	LO	ClinicalTrialSubjectID	1	DICOM_2011
+(0012,0042)	LO	ClinicalTrialSubjectReadingID	1	DICOM_2011
+(0012,0050)	LO	ClinicalTrialTimePointID	1	DICOM_2011
+(0012,0051)	ST	ClinicalTrialTimePointDescription	1	DICOM_2011
+(0012,0060)	LO	ClinicalTrialCoordinatingCenterName	1	DICOM_2011
+(0012,0062)	CS	PatientIdentityRemoved	1	DICOM_2011
+(0012,0063)	LO	DeidentificationMethod	1-n	DICOM_2011
+(0012,0064)	SQ	DeidentificationMethodCodeSequence	1	DICOM_2011
+(0012,0071)	LO	ClinicalTrialSeriesID	1	DICOM_2011
+(0012,0072)	LO	ClinicalTrialSeriesDescription	1	DICOM_2011
+(0012,0081)	LO	ClinicalTrialProtocolEthicsCommitteeName	1	DICOM_2011
+(0012,0082)	LO	ClinicalTrialProtocolEthicsCommitteeApprovalNumber	1	DICOM_2011
+(0012,0083)	SQ	ConsentForClinicalTrialUseSequence	1	DICOM_2011
+(0012,0084)	CS	DistributionType	1	DICOM_2011
+(0012,0085)	CS	ConsentForDistributionFlag	1	DICOM_2011
+(0014,0023)	ST	CADFileFormat	1-n	DICOM_2011
+(0014,0024)	ST	ComponentReferenceSystem	1-n	DICOM_2011
+(0014,0025)	ST	ComponentManufacturingProcedure	1-n	DICOM_2011
+(0014,0028)	ST	ComponentManufacturer	1-n	DICOM_2011
+(0014,0030)	DS	MaterialThickness	1-n	DICOM_2011
+(0014,0032)	DS	MaterialPipeDiameter	1-n	DICOM_2011
+(0014,0034)	DS	MaterialIsolationDiameter	1-n	DICOM_2011
+(0014,0042)	ST	MaterialGrade	1-n	DICOM_2011
+(0014,0044)	ST	MaterialPropertiesFileID	1-n	DICOM_2011
+(0014,0045)	ST	MaterialPropertiesFileFormat	1-n	DICOM_2011
+(0014,0046)	LT	MaterialNotes	1	DICOM_2011
+(0014,0050)	CS	ComponentShape	1	DICOM_2011
+(0014,0052)	CS	CurvatureType	1	DICOM_2011
+(0014,0054)	DS	OuterDiameter	1	DICOM_2011
+(0014,0056)	DS	InnerDiameter	1	DICOM_2011
+(0014,1010)	ST	ActualEnvironmentalConditions	1	DICOM_2011
+(0014,1020)	DA	ExpiryDate	1	DICOM_2011
+(0014,1040)	ST	EnvironmentalConditions	1	DICOM_2011
+(0014,2002)	SQ	EvaluatorSequence	1	DICOM_2011
+(0014,2004)	IS	EvaluatorNumber	1	DICOM_2011
+(0014,2006)	PN	EvaluatorName	1	DICOM_2011
+(0014,2008)	IS	EvaluationAttempt	1	DICOM_2011
+(0014,2012)	SQ	IndicationSequence	1	DICOM_2011
+(0014,2014)	IS	IndicationNumber	1	DICOM_2011
+(0014,2016)	SH	IndicationLabel	1	DICOM_2011
+(0014,2018)	ST	IndicationDescription	1	DICOM_2011
+(0014,201A)	CS	IndicationType	1-n	DICOM_2011
+(0014,201C)	CS	IndicationDisposition	1	DICOM_2011
+(0014,201E)	SQ	IndicationROISequence	1	DICOM_2011
+(0014,2030)	SQ	IndicationPhysicalPropertySequence	1	DICOM_2011
+(0014,2032)	SH	PropertyLabel	1	DICOM_2011
+(0014,2202)	IS	CoordinateSystemNumberOfAxes	1	DICOM_2011
+(0014,2204)	SQ	CoordinateSystemAxesSequence	1	DICOM_2011
+(0014,2206)	ST	CoordinateSystemAxisDescription	1	DICOM_2011
+(0014,2208)	CS	CoordinateSystemDataSetMapping	1	DICOM_2011
+(0014,220A)	IS	CoordinateSystemAxisNumber	1	DICOM_2011
+(0014,220C)	CS	CoordinateSystemAxisType	1	DICOM_2011
+(0014,220E)	CS	CoordinateSystemAxisUnits	1	DICOM_2011
+(0014,2210)	OB	CoordinateSystemAxisValues	1	DICOM_2011
+(0014,2220)	SQ	CoordinateSystemTransformSequence	1	DICOM_2011
+(0014,2222)	ST	TransformDescription	1	DICOM_2011
+(0014,2224)	IS	TransformNumberOfAxes	1	DICOM_2011
+(0014,2226)	IS	TransformOrderOfAxes	1-n	DICOM_2011
+(0014,2228)	CS	TransformedAxisUnits	1	DICOM_2011
+(0014,222A)	DS	CoordinateSystemTransformRotationAndScaleMatrix	1-n	DICOM_2011
+(0014,222C)	DS	CoordinateSystemTransformTranslationMatrix	1-n	DICOM_2011
+(0014,3011)	DS	InternalDetectorFrameTime	1	DICOM_2011
+(0014,3012)	DS	NumberOfFramesIntegrated	1	DICOM_2011
+(0014,3020)	SQ	DetectorTemperatureSequence	1	DICOM_2011
+(0014,3022)	DS	SensorName	1	DICOM_2011
+(0014,3024)	DS	HorizontalOffsetOfSensor	1	DICOM_2011
+(0014,3026)	DS	VerticalOffsetOfSensor	1	DICOM_2011
+(0014,3028)	DS	SensorTemperature	1	DICOM_2011
+(0014,3040)	SQ	DarkCurrentSequence	1	DICOM_2011
+(0014,3050)	ox	DarkCurrentCounts	1	DICOM_2011
+(0014,3060)	SQ	GainCorrectionReferenceSequence	1	DICOM_2011
+(0014,3070)	ox	AirCounts	1	DICOM_2011
+(0014,3071)	DS	KVUsedInGainCalibration	1	DICOM_2011
+(0014,3072)	DS	MAUsedInGainCalibration	1	DICOM_2011
+(0014,3073)	DS	NumberOfFramesUsedForIntegration	1	DICOM_2011
+(0014,3074)	LO	FilterMaterialUsedInGainCalibration	1	DICOM_2011
+(0014,3075)	DS	FilterThicknessUsedInGainCalibration	1	DICOM_2011
+(0014,3076)	DA	DateOfGainCalibration	1	DICOM_2011
+(0014,3077)	TM	TimeOfGainCalibration	1	DICOM_2011
+(0014,3080)	OB	BadPixelImage	1	DICOM_2011
+(0014,3099)	LT	CalibrationNotes	1	DICOM_2011
+(0014,4002)	SQ	PulserEquipmentSequence	1	DICOM_2011
+(0014,4004)	CS	PulserType	1	DICOM_2011
+(0014,4006)	LT	PulserNotes	1	DICOM_2011
+(0014,4008)	SQ	ReceiverEquipmentSequence	1	DICOM_2011
+(0014,400A)	CS	AmplifierType	1	DICOM_2011
+(0014,400C)	LT	ReceiverNotes	1	DICOM_2011
+(0014,400E)	SQ	PreAmplifierEquipmentSequence	1	DICOM_2011
+(0014,400F)	LT	PreAmplifierNotes	1	DICOM_2011
+(0014,4010)	SQ	TransmitTransducerSequence	1	DICOM_2011
+(0014,4011)	SQ	ReceiveTransducerSequence	1	DICOM_2011
+(0014,4012)	US	NumberOfElements	1	DICOM_2011
+(0014,4013)	CS	ElementShape	1	DICOM_2011
+(0014,4014)	DS	ElementDimensionA	1	DICOM_2011
+(0014,4015)	DS	ElementDimensionB	1	DICOM_2011
+(0014,4016)	DS	ElementPitch	1	DICOM_2011
+(0014,4017)	DS	MeasuredBeamDimensionA	1	DICOM_2011
+(0014,4018)	DS	MeasuredBeamDimensionB	1	DICOM_2011
+(0014,4019)	DS	LocationOfMeasuredBeamDiameter	1	DICOM_2011
+(0014,401A)	DS	NominalFrequency	1	DICOM_2011
+(0014,401B)	DS	MeasuredCenterFrequency	1	DICOM_2011
+(0014,401C)	DS	MeasuredBandwidth	1	DICOM_2011
+(0014,4020)	SQ	PulserSettingsSequence	1	DICOM_2011
+(0014,4022)	DS	PulseWidth	1	DICOM_2011
+(0014,4024)	DS	ExcitationFrequency	1	DICOM_2011
+(0014,4026)	CS	ModulationType	1	DICOM_2011
+(0014,4028)	DS	Damping	1	DICOM_2011
+(0014,4030)	SQ	ReceiverSettingsSequence	1	DICOM_2011
+(0014,4031)	DS	AcquiredSoundpathLength	1	DICOM_2011
+(0014,4032)	CS	AcquisitionCompressionType	1	DICOM_2011
+(0014,4033)	IS	AcquisitionSampleSize	1	DICOM_2011
+(0014,4034)	DS	RectifierSmoothing	1	DICOM_2011
+(0014,4035)	SQ	DACSequence	1	DICOM_2011
+(0014,4036)	CS	DACType	1	DICOM_2011
+(0014,4038)	DS	DACGainPoints	1-n	DICOM_2011
+(0014,403A)	DS	DACTimePoints	1-n	DICOM_2011
+(0014,403C)	DS	DACAmplitude	1-n	DICOM_2011
+(0014,4040)	SQ	PreAmplifierSettingsSequence	1	DICOM_2011
+(0014,4050)	SQ	TransmitTransducerSettingsSequence	1	DICOM_2011
+(0014,4051)	SQ	ReceiveTransducerSettingsSequence	1	DICOM_2011
+(0014,4052)	DS	IncidentAngle	1	DICOM_2011
+(0014,4054)	ST	CouplingTechnique	1	DICOM_2011
+(0014,4056)	ST	CouplingMedium	1	DICOM_2011
+(0014,4057)	DS	CouplingVelocity	1	DICOM_2011
+(0014,4058)	DS	CrystalCenterLocationX	1	DICOM_2011
+(0014,4059)	DS	CrystalCenterLocationZ	1	DICOM_2011
+(0014,405A)	DS	SoundPathLength	1	DICOM_2011
+(0014,405C)	ST	DelayLawIdentifier	1	DICOM_2011
+(0014,4060)	SQ	GateSettingsSequence	1	DICOM_2011
+(0014,4062)	DS	GateThreshold	1	DICOM_2011
+(0014,4064)	DS	VelocityOfSound	1	DICOM_2011
+(0014,4070)	SQ	CalibrationSettingsSequence	1	DICOM_2011
+(0014,4072)	ST	CalibrationProcedure	1	DICOM_2011
+(0014,4074)	SH	ProcedureVersion	1	DICOM_2011
+(0014,4076)	DA	ProcedureCreationDate	1	DICOM_2011
+(0014,4078)	DA	ProcedureExpirationDate	1	DICOM_2011
+(0014,407A)	DA	ProcedureLastModifiedDate	1	DICOM_2011
+(0014,407C)	TM	CalibrationTime	1-n	DICOM_2011
+(0014,407E)	DA	CalibrationDate	1-n	DICOM_2011
+(0014,5002)	IS	LINACEnergy	1	DICOM_2011
+(0014,5004)	IS	LINACOutput	1	DICOM_2011
+(0018,0010)	LO	ContrastBolusAgent	1	DICOM_2011
+(0018,0012)	SQ	ContrastBolusAgentSequence	1	DICOM_2011
+(0018,0014)	SQ	ContrastBolusAdministrationRouteSequence	1	DICOM_2011
+(0018,0015)	CS	BodyPartExamined	1	DICOM_2011
+(0018,0020)	CS	ScanningSequence	1-n	DICOM_2011
+(0018,0021)	CS	SequenceVariant	1-n	DICOM_2011
+(0018,0022)	CS	ScanOptions	1-n	DICOM_2011
+(0018,0023)	CS	MRAcquisitionType	1	DICOM_2011
+(0018,0024)	SH	SequenceName	1	DICOM_2011
+(0018,0025)	CS	AngioFlag	1	DICOM_2011
+(0018,0026)	SQ	InterventionDrugInformationSequence	1	DICOM_2011
+(0018,0027)	TM	InterventionDrugStopTime	1	DICOM_2011
+(0018,0028)	DS	InterventionDrugDose	1	DICOM_2011
+(0018,0029)	SQ	InterventionDrugCodeSequence	1	DICOM_2011
+(0018,002A)	SQ	AdditionalDrugSequence	1	DICOM_2011
+(0018,0031)	LO	Radiopharmaceutical	1	DICOM_2011
+(0018,0034)	LO	InterventionDrugName	1	DICOM_2011
+(0018,0035)	TM	InterventionDrugStartTime	1	DICOM_2011
+(0018,0036)	SQ	InterventionSequence	1	DICOM_2011
+(0018,0038)	CS	InterventionStatus	1	DICOM_2011
+(0018,003A)	ST	InterventionDescription	1	DICOM_2011
+(0018,0040)	IS	CineRate	1	DICOM_2011
+(0018,0042)	CS	InitialCineRunState	1	DICOM_2011
+(0018,0050)	DS	SliceThickness	1	DICOM_2011
+(0018,0060)	DS	KVP	1	DICOM_2011
+(0018,0070)	IS	CountsAccumulated	1	DICOM_2011
+(0018,0071)	CS	AcquisitionTerminationCondition	1	DICOM_2011
+(0018,0072)	DS	EffectiveDuration	1	DICOM_2011
+(0018,0073)	CS	AcquisitionStartCondition	1	DICOM_2011
+(0018,0074)	IS	AcquisitionStartConditionData	1	DICOM_2011
+(0018,0075)	IS	AcquisitionTerminationConditionData	1	DICOM_2011
+(0018,0080)	DS	RepetitionTime	1	DICOM_2011
+(0018,0081)	DS	EchoTime	1	DICOM_2011
+(0018,0082)	DS	InversionTime	1	DICOM_2011
+(0018,0083)	DS	NumberOfAverages	1	DICOM_2011
+(0018,0084)	DS	ImagingFrequency	1	DICOM_2011
+(0018,0085)	SH	ImagedNucleus	1	DICOM_2011
+(0018,0086)	IS	EchoNumbers	1-n	DICOM_2011
+(0018,0087)	DS	MagneticFieldStrength	1	DICOM_2011
+(0018,0088)	DS	SpacingBetweenSlices	1	DICOM_2011
+(0018,0089)	IS	NumberOfPhaseEncodingSteps	1	DICOM_2011
+(0018,0090)	DS	DataCollectionDiameter	1	DICOM_2011
+(0018,0091)	IS	EchoTrainLength	1	DICOM_2011
+(0018,0093)	DS	PercentSampling	1	DICOM_2011
+(0018,0094)	DS	PercentPhaseFieldOfView	1	DICOM_2011
+(0018,0095)	DS	PixelBandwidth	1	DICOM_2011
+(0018,1000)	LO	DeviceSerialNumber	1	DICOM_2011
+(0018,1002)	UI	DeviceUID	1	DICOM_2011
+(0018,1003)	LO	DeviceID	1	DICOM_2011
+(0018,1004)	LO	PlateID	1	DICOM_2011
+(0018,1005)	LO	GeneratorID	1	DICOM_2011
+(0018,1006)	LO	GridID	1	DICOM_2011
+(0018,1007)	LO	CassetteID	1	DICOM_2011
+(0018,1008)	LO	GantryID	1	DICOM_2011
+(0018,1010)	LO	SecondaryCaptureDeviceID	1	DICOM_2011
+(0018,1012)	DA	DateOfSecondaryCapture	1	DICOM_2011
+(0018,1014)	TM	TimeOfSecondaryCapture	1	DICOM_2011
+(0018,1016)	LO	SecondaryCaptureDeviceManufacturer	1	DICOM_2011
+(0018,1018)	LO	SecondaryCaptureDeviceManufacturerModelName	1	DICOM_2011
+(0018,1019)	LO	SecondaryCaptureDeviceSoftwareVersions	1-n	DICOM_2011
+(0018,1020)	LO	SoftwareVersions	1-n	DICOM_2011
+(0018,1022)	SH	VideoImageFormatAcquired	1	DICOM_2011
+(0018,1023)	LO	DigitalImageFormatAcquired	1	DICOM_2011
+(0018,1030)	LO	ProtocolName	1	DICOM_2011
+(0018,1040)	LO	ContrastBolusRoute	1	DICOM_2011
+(0018,1041)	DS	ContrastBolusVolume	1	DICOM_2011
+(0018,1042)	TM	ContrastBolusStartTime	1	DICOM_2011
+(0018,1043)	TM	ContrastBolusStopTime	1	DICOM_2011
+(0018,1044)	DS	ContrastBolusTotalDose	1	DICOM_2011
+(0018,1045)	IS	SyringeCounts	1	DICOM_2011
+(0018,1046)	DS	ContrastFlowRate	1-n	DICOM_2011
+(0018,1047)	DS	ContrastFlowDuration	1-n	DICOM_2011
+(0018,1048)	CS	ContrastBolusIngredient	1	DICOM_2011
+(0018,1049)	DS	ContrastBolusIngredientConcentration	1	DICOM_2011
+(0018,1050)	DS	SpatialResolution	1	DICOM_2011
+(0018,1060)	DS	TriggerTime	1	DICOM_2011
+(0018,1061)	LO	TriggerSourceOrType	1	DICOM_2011
+(0018,1062)	IS	NominalInterval	1	DICOM_2011
+(0018,1063)	DS	FrameTime	1	DICOM_2011
+(0018,1064)	LO	CardiacFramingType	1	DICOM_2011
+(0018,1065)	DS	FrameTimeVector	1-n	DICOM_2011
+(0018,1066)	DS	FrameDelay	1	DICOM_2011
+(0018,1067)	DS	ImageTriggerDelay	1	DICOM_2011
+(0018,1068)	DS	MultiplexGroupTimeOffset	1	DICOM_2011
+(0018,1069)	DS	TriggerTimeOffset	1	DICOM_2011
+(0018,106A)	CS	SynchronizationTrigger	1	DICOM_2011
+(0018,106C)	US	SynchronizationChannel	2	DICOM_2011
+(0018,106E)	UL	TriggerSamplePosition	1	DICOM_2011
+(0018,1070)	LO	RadiopharmaceuticalRoute	1	DICOM_2011
+(0018,1071)	DS	RadiopharmaceuticalVolume	1	DICOM_2011
+(0018,1072)	TM	RadiopharmaceuticalStartTime	1	DICOM_2011
+(0018,1073)	TM	RadiopharmaceuticalStopTime	1	DICOM_2011
+(0018,1074)	DS	RadionuclideTotalDose	1	DICOM_2011
+(0018,1075)	DS	RadionuclideHalfLife	1	DICOM_2011
+(0018,1076)	DS	RadionuclidePositronFraction	1	DICOM_2011
+(0018,1077)	DS	RadiopharmaceuticalSpecificActivity	1	DICOM_2011
+(0018,1078)	DT	RadiopharmaceuticalStartDateTime	1	DICOM_2011
+(0018,1079)	DT	RadiopharmaceuticalStopDateTime	1	DICOM_2011
+(0018,1080)	CS	BeatRejectionFlag	1	DICOM_2011
+(0018,1081)	IS	LowRRValue	1	DICOM_2011
+(0018,1082)	IS	HighRRValue	1	DICOM_2011
+(0018,1083)	IS	IntervalsAcquired	1	DICOM_2011
+(0018,1084)	IS	IntervalsRejected	1	DICOM_2011
+(0018,1085)	LO	PVCRejection	1	DICOM_2011
+(0018,1086)	IS	SkipBeats	1	DICOM_2011
+(0018,1088)	IS	HeartRate	1	DICOM_2011
+(0018,1090)	IS	CardiacNumberOfImages	1	DICOM_2011
+(0018,1094)	IS	TriggerWindow	1	DICOM_2011
+(0018,1100)	DS	ReconstructionDiameter	1	DICOM_2011
+(0018,1110)	DS	DistanceSourceToDetector	1	DICOM_2011
+(0018,1111)	DS	DistanceSourceToPatient	1	DICOM_2011
+(0018,1114)	DS	EstimatedRadiographicMagnificationFactor	1	DICOM_2011
+(0018,1120)	DS	GantryDetectorTilt	1	DICOM_2011
+(0018,1121)	DS	GantryDetectorSlew	1	DICOM_2011
+(0018,1130)	DS	TableHeight	1	DICOM_2011
+(0018,1131)	DS	TableTraverse	1	DICOM_2011
+(0018,1134)	CS	TableMotion	1	DICOM_2011
+(0018,1135)	DS	TableVerticalIncrement	1-n	DICOM_2011
+(0018,1136)	DS	TableLateralIncrement	1-n	DICOM_2011
+(0018,1137)	DS	TableLongitudinalIncrement	1-n	DICOM_2011
+(0018,1138)	DS	TableAngle	1	DICOM_2011
+(0018,113A)	CS	TableType	1	DICOM_2011
+(0018,1140)	CS	RotationDirection	1	DICOM_2011
+(0018,1142)	DS	RadialPosition	1-n	DICOM_2011
+(0018,1143)	DS	ScanArc	1	DICOM_2011
+(0018,1144)	DS	AngularStep	1	DICOM_2011
+(0018,1145)	DS	CenterOfRotationOffset	1	DICOM_2011
+(0018,1147)	CS	FieldOfViewShape	1	DICOM_2011
+(0018,1149)	IS	FieldOfViewDimensions	1-2	DICOM_2011
+(0018,1150)	IS	ExposureTime	1	DICOM_2011
+(0018,1151)	IS	XRayTubeCurrent	1	DICOM_2011
+(0018,1152)	IS	Exposure	1	DICOM_2011
+(0018,1153)	IS	ExposureInuAs	1	DICOM_2011
+(0018,1154)	DS	AveragePulseWidth	1	DICOM_2011
+(0018,1155)	CS	RadiationSetting	1	DICOM_2011
+(0018,1156)	CS	RectificationType	1	DICOM_2011
+(0018,115A)	CS	RadiationMode	1	DICOM_2011
+(0018,115E)	DS	ImageAndFluoroscopyAreaDoseProduct	1	DICOM_2011
+(0018,1160)	SH	FilterType	1	DICOM_2011
+(0018,1161)	LO	TypeOfFilters	1-n	DICOM_2011
+(0018,1162)	DS	IntensifierSize	1	DICOM_2011
+(0018,1164)	DS	ImagerPixelSpacing	2	DICOM_2011
+(0018,1166)	CS	Grid	1-n	DICOM_2011
+(0018,1170)	IS	GeneratorPower	1	DICOM_2011
+(0018,1180)	SH	CollimatorGridName	1	DICOM_2011
+(0018,1181)	CS	CollimatorType	1	DICOM_2011
+(0018,1182)	IS	FocalDistance	1-2	DICOM_2011
+(0018,1183)	DS	XFocusCenter	1-2	DICOM_2011
+(0018,1184)	DS	YFocusCenter	1-2	DICOM_2011
+(0018,1190)	DS	FocalSpots	1-n	DICOM_2011
+(0018,1191)	CS	AnodeTargetMaterial	1	DICOM_2011
+(0018,11A0)	DS	BodyPartThickness	1	DICOM_2011
+(0018,11A2)	DS	CompressionForce	1	DICOM_2011
+(0018,1200)	DA	DateOfLastCalibration	1-n	DICOM_2011
+(0018,1201)	TM	TimeOfLastCalibration	1-n	DICOM_2011
+(0018,1210)	SH	ConvolutionKernel	1-n	DICOM_2011
+(0018,1242)	IS	ActualFrameDuration	1	DICOM_2011
+(0018,1243)	IS	CountRate	1	DICOM_2011
+(0018,1244)	US	PreferredPlaybackSequencing	1	DICOM_2011
+(0018,1250)	SH	ReceiveCoilName	1	DICOM_2011
+(0018,1251)	SH	TransmitCoilName	1	DICOM_2011
+(0018,1260)	SH	PlateType	1	DICOM_2011
+(0018,1261)	LO	PhosphorType	1	DICOM_2011
+(0018,1300)	DS	ScanVelocity	1	DICOM_2011
+(0018,1301)	CS	WholeBodyTechnique	1-n	DICOM_2011
+(0018,1302)	IS	ScanLength	1	DICOM_2011
+(0018,1310)	US	AcquisitionMatrix	4	DICOM_2011
+(0018,1312)	CS	InPlanePhaseEncodingDirection	1	DICOM_2011
+(0018,1314)	DS	FlipAngle	1	DICOM_2011
+(0018,1315)	CS	VariableFlipAngleFlag	1	DICOM_2011
+(0018,1316)	DS	SAR	1	DICOM_2011
+(0018,1318)	DS	dBdt	1	DICOM_2011
+(0018,1400)	LO	AcquisitionDeviceProcessingDescription	1	DICOM_2011
+(0018,1401)	LO	AcquisitionDeviceProcessingCode	1	DICOM_2011
+(0018,1402)	CS	CassetteOrientation	1	DICOM_2011
+(0018,1403)	CS	CassetteSize	1	DICOM_2011
+(0018,1404)	US	ExposuresOnPlate	1	DICOM_2011
+(0018,1405)	IS	RelativeXRayExposure	1	DICOM_2011
+(0018,1411)	DS	ExposureIndex	1	DICOM_2011
+(0018,1412)	DS	TargetExposureIndex	1	DICOM_2011
+(0018,1413)	DS	DeviationIndex	1	DICOM_2011
+(0018,1450)	DS	ColumnAngulation	1	DICOM_2011
+(0018,1460)	DS	TomoLayerHeight	1	DICOM_2011
+(0018,1470)	DS	TomoAngle	1	DICOM_2011
+(0018,1480)	DS	TomoTime	1	DICOM_2011
+(0018,1490)	CS	TomoType	1	DICOM_2011
+(0018,1491)	CS	TomoClass	1	DICOM_2011
+(0018,1495)	IS	NumberOfTomosynthesisSourceImages	1	DICOM_2011
+(0018,1500)	CS	PositionerMotion	1	DICOM_2011
+(0018,1508)	CS	PositionerType	1	DICOM_2011
+(0018,1510)	DS	PositionerPrimaryAngle	1	DICOM_2011
+(0018,1511)	DS	PositionerSecondaryAngle	1	DICOM_2011
+(0018,1520)	DS	PositionerPrimaryAngleIncrement	1-n	DICOM_2011
+(0018,1521)	DS	PositionerSecondaryAngleIncrement	1-n	DICOM_2011
+(0018,1530)	DS	DetectorPrimaryAngle	1	DICOM_2011
+(0018,1531)	DS	DetectorSecondaryAngle	1	DICOM_2011
+(0018,1600)	CS	ShutterShape	1-3	DICOM_2011
+(0018,1602)	IS	ShutterLeftVerticalEdge	1	DICOM_2011
+(0018,1604)	IS	ShutterRightVerticalEdge	1	DICOM_2011
+(0018,1606)	IS	ShutterUpperHorizontalEdge	1	DICOM_2011
+(0018,1608)	IS	ShutterLowerHorizontalEdge	1	DICOM_2011
+(0018,1610)	IS	CenterOfCircularShutter	2	DICOM_2011
+(0018,1612)	IS	RadiusOfCircularShutter	1	DICOM_2011
+(0018,1620)	IS	VerticesOfThePolygonalShutter	2-2n	DICOM_2011
+(0018,1622)	US	ShutterPresentationValue	1	DICOM_2011
+(0018,1623)	US	ShutterOverlayGroup	1	DICOM_2011
+(0018,1624)	US	ShutterPresentationColorCIELabValue	3	DICOM_2011
+(0018,1700)	CS	CollimatorShape	1-3	DICOM_2011
+(0018,1702)	IS	CollimatorLeftVerticalEdge	1	DICOM_2011
+(0018,1704)	IS	CollimatorRightVerticalEdge	1	DICOM_2011
+(0018,1706)	IS	CollimatorUpperHorizontalEdge	1	DICOM_2011
+(0018,1708)	IS	CollimatorLowerHorizontalEdge	1	DICOM_2011
+(0018,1710)	IS	CenterOfCircularCollimator	2	DICOM_2011
+(0018,1712)	IS	RadiusOfCircularCollimator	1	DICOM_2011
+(0018,1720)	IS	VerticesOfThePolygonalCollimator	2-2n	DICOM_2011
+(0018,1800)	CS	AcquisitionTimeSynchronized	1	DICOM_2011
+(0018,1801)	SH	TimeSource	1	DICOM_2011
+(0018,1802)	CS	TimeDistributionProtocol	1	DICOM_2011
+(0018,1803)	LO	NTPSourceAddress	1	DICOM_2011
+(0018,2001)	IS	PageNumberVector	1-n	DICOM_2011
+(0018,2002)	SH	FrameLabelVector	1-n	DICOM_2011
+(0018,2003)	DS	FramePrimaryAngleVector	1-n	DICOM_2011
+(0018,2004)	DS	FrameSecondaryAngleVector	1-n	DICOM_2011
+(0018,2005)	DS	SliceLocationVector	1-n	DICOM_2011
+(0018,2006)	SH	DisplayWindowLabelVector	1-n	DICOM_2011
+(0018,2010)	DS	NominalScannedPixelSpacing	2	DICOM_2011
+(0018,2020)	CS	DigitizingDeviceTransportDirection	1	DICOM_2011
+(0018,2030)	DS	RotationOfScannedFilm	1	DICOM_2011
+(0018,3100)	CS	IVUSAcquisition	1	DICOM_2011
+(0018,3101)	DS	IVUSPullbackRate	1	DICOM_2011
+(0018,3102)	DS	IVUSGatedRate	1	DICOM_2011
+(0018,3103)	IS	IVUSPullbackStartFrameNumber	1	DICOM_2011
+(0018,3104)	IS	IVUSPullbackStopFrameNumber	1	DICOM_2011
+(0018,3105)	IS	LesionNumber	1-n	DICOM_2011
+(0018,5000)	SH	OutputPower	1-n	DICOM_2011
+(0018,5010)	LO	TransducerData	1-n	DICOM_2011
+(0018,5012)	DS	FocusDepth	1	DICOM_2011
+(0018,5020)	LO	ProcessingFunction	1	DICOM_2011
+(0018,5022)	DS	MechanicalIndex	1	DICOM_2011
+(0018,5024)	DS	BoneThermalIndex	1	DICOM_2011
+(0018,5026)	DS	CranialThermalIndex	1	DICOM_2011
+(0018,5027)	DS	SoftTissueThermalIndex	1	DICOM_2011
+(0018,5028)	DS	SoftTissueFocusThermalIndex	1	DICOM_2011
+(0018,5029)	DS	SoftTissueSurfaceThermalIndex	1	DICOM_2011
+(0018,5050)	IS	DepthOfScanField	1	DICOM_2011
+(0018,5100)	CS	PatientPosition	1	DICOM_2011
+(0018,5101)	CS	ViewPosition	1	DICOM_2011
+(0018,5104)	SQ	ProjectionEponymousNameCodeSequence	1	DICOM_2011
+(0018,6000)	DS	Sensitivity	1	DICOM_2011
+(0018,6011)	SQ	SequenceOfUltrasoundRegions	1	DICOM_2011
+(0018,6012)	US	RegionSpatialFormat	1	DICOM_2011
+(0018,6014)	US	RegionDataType	1	DICOM_2011
+(0018,6016)	UL	RegionFlags	1	DICOM_2011
+(0018,6018)	UL	RegionLocationMinX0	1	DICOM_2011
+(0018,601A)	UL	RegionLocationMinY0	1	DICOM_2011
+(0018,601C)	UL	RegionLocationMaxX1	1	DICOM_2011
+(0018,601E)	UL	RegionLocationMaxY1	1	DICOM_2011
+(0018,6020)	SL	ReferencePixelX0	1	DICOM_2011
+(0018,6022)	SL	ReferencePixelY0	1	DICOM_2011
+(0018,6024)	US	PhysicalUnitsXDirection	1	DICOM_2011
+(0018,6026)	US	PhysicalUnitsYDirection	1	DICOM_2011
+(0018,6028)	FD	ReferencePixelPhysicalValueX	1	DICOM_2011
+(0018,602A)	FD	ReferencePixelPhysicalValueY	1	DICOM_2011
+(0018,602C)	FD	PhysicalDeltaX	1	DICOM_2011
+(0018,602E)	FD	PhysicalDeltaY	1	DICOM_2011
+(0018,6030)	UL	TransducerFrequency	1	DICOM_2011
+(0018,6031)	CS	TransducerType	1	DICOM_2011
+(0018,6032)	UL	PulseRepetitionFrequency	1	DICOM_2011
+(0018,6034)	FD	DopplerCorrectionAngle	1	DICOM_2011
+(0018,6036)	FD	SteeringAngle	1	DICOM_2011
+(0018,6039)	SL	DopplerSampleVolumeXPosition	1	DICOM_2011
+(0018,603B)	SL	DopplerSampleVolumeYPosition	1	DICOM_2011
+(0018,603D)	SL	TMLinePositionX0	1	DICOM_2011
+(0018,603F)	SL	TMLinePositionY0	1	DICOM_2011
+(0018,6041)	SL	TMLinePositionX1	1	DICOM_2011
+(0018,6043)	SL	TMLinePositionY1	1	DICOM_2011
+(0018,6044)	US	PixelComponentOrganization	1	DICOM_2011
+(0018,6046)	UL	PixelComponentMask	1	DICOM_2011
+(0018,6048)	UL	PixelComponentRangeStart	1	DICOM_2011
+(0018,604A)	UL	PixelComponentRangeStop	1	DICOM_2011
+(0018,604C)	US	PixelComponentPhysicalUnits	1	DICOM_2011
+(0018,604E)	US	PixelComponentDataType	1	DICOM_2011
+(0018,6050)	UL	NumberOfTableBreakPoints	1	DICOM_2011
+(0018,6052)	UL	TableOfXBreakPoints	1-n	DICOM_2011
+(0018,6054)	FD	TableOfYBreakPoints	1-n	DICOM_2011
+(0018,6056)	UL	NumberOfTableEntries	1	DICOM_2011
+(0018,6058)	UL	TableOfPixelValues	1-n	DICOM_2011
+(0018,605A)	FL	TableOfParameterValues	1-n	DICOM_2011
+(0018,6060)	FL	RWaveTimeVector	1-n	DICOM_2011
+(0018,7000)	CS	DetectorConditionsNominalFlag	1	DICOM_2011
+(0018,7001)	DS	DetectorTemperature	1	DICOM_2011
+(0018,7004)	CS	DetectorType	1	DICOM_2011
+(0018,7005)	CS	DetectorConfiguration	1	DICOM_2011
+(0018,7006)	LT	DetectorDescription	1	DICOM_2011
+(0018,7008)	LT	DetectorMode	1	DICOM_2011
+(0018,700A)	SH	DetectorID	1	DICOM_2011
+(0018,700C)	DA	DateOfLastDetectorCalibration	1	DICOM_2011
+(0018,700E)	TM	TimeOfLastDetectorCalibration	1	DICOM_2011
+(0018,7010)	IS	ExposuresOnDetectorSinceLastCalibration	1	DICOM_2011
+(0018,7011)	IS	ExposuresOnDetectorSinceManufactured	1	DICOM_2011
+(0018,7012)	DS	DetectorTimeSinceLastExposure	1	DICOM_2011
+(0018,7014)	DS	DetectorActiveTime	1	DICOM_2011
+(0018,7016)	DS	DetectorActivationOffsetFromExposure	1	DICOM_2011
+(0018,701A)	DS	DetectorBinning	2	DICOM_2011
+(0018,7020)	DS	DetectorElementPhysicalSize	2	DICOM_2011
+(0018,7022)	DS	DetectorElementSpacing	2	DICOM_2011
+(0018,7024)	CS	DetectorActiveShape	1	DICOM_2011
+(0018,7026)	DS	DetectorActiveDimensions	1-2	DICOM_2011
+(0018,7028)	DS	DetectorActiveOrigin	2	DICOM_2011
+(0018,702A)	LO	DetectorManufacturerName	1	DICOM_2011
+(0018,702B)	LO	DetectorManufacturerModelName	1	DICOM_2011
+(0018,7030)	DS	FieldOfViewOrigin	2	DICOM_2011
+(0018,7032)	DS	FieldOfViewRotation	1	DICOM_2011
+(0018,7034)	CS	FieldOfViewHorizontalFlip	1	DICOM_2011
+(0018,7036)	FL	PixelDataAreaOriginRelativeToFOV	2	DICOM_2011
+(0018,7038)	FL	PixelDataAreaRotationAngleRelativeToFOV	1	DICOM_2011
+(0018,7040)	LT	GridAbsorbingMaterial	1	DICOM_2011
+(0018,7041)	LT	GridSpacingMaterial	1	DICOM_2011
+(0018,7042)	DS	GridThickness	1	DICOM_2011
+(0018,7044)	DS	GridPitch	1	DICOM_2011
+(0018,7046)	IS	GridAspectRatio	2	DICOM_2011
+(0018,7048)	DS	GridPeriod	1	DICOM_2011
+(0018,704C)	DS	GridFocalDistance	1	DICOM_2011
+(0018,7050)	CS	FilterMaterial	1-n	DICOM_2011
+(0018,7052)	DS	FilterThicknessMinimum	1-n	DICOM_2011
+(0018,7054)	DS	FilterThicknessMaximum	1-n	DICOM_2011
+(0018,7056)	FL	FilterBeamPathLengthMinimum	1-n	DICOM_2011
+(0018,7058)	FL	FilterBeamPathLengthMaximum	1-n	DICOM_2011
+(0018,7060)	CS	ExposureControlMode	1	DICOM_2011
+(0018,7062)	LT	ExposureControlModeDescription	1	DICOM_2011
+(0018,7064)	CS	ExposureStatus	1	DICOM_2011
+(0018,7065)	DS	PhototimerSetting	1	DICOM_2011
+(0018,8150)	DS	ExposureTimeInuS	1	DICOM_2011
+(0018,8151)	DS	XRayTubeCurrentInuA	1	DICOM_2011
+(0018,9004)	CS	ContentQualification	1	DICOM_2011
+(0018,9005)	SH	PulseSequenceName	1	DICOM_2011
+(0018,9006)	SQ	MRImagingModifierSequence	1	DICOM_2011
+(0018,9008)	CS	EchoPulseSequence	1	DICOM_2011
+(0018,9009)	CS	InversionRecovery	1	DICOM_2011
+(0018,9010)	CS	FlowCompensation	1	DICOM_2011
+(0018,9011)	CS	MultipleSpinEcho	1	DICOM_2011
+(0018,9012)	CS	MultiPlanarExcitation	1	DICOM_2011
+(0018,9014)	CS	PhaseContrast	1	DICOM_2011
+(0018,9015)	CS	TimeOfFlightContrast	1	DICOM_2011
+(0018,9016)	CS	Spoiling	1	DICOM_2011
+(0018,9017)	CS	SteadyStatePulseSequence	1	DICOM_2011
+(0018,9018)	CS	EchoPlanarPulseSequence	1	DICOM_2011
+(0018,9019)	FD	TagAngleFirstAxis	1	DICOM_2011
+(0018,9020)	CS	MagnetizationTransfer	1	DICOM_2011
+(0018,9021)	CS	T2Preparation	1	DICOM_2011
+(0018,9022)	CS	BloodSignalNulling	1	DICOM_2011
+(0018,9024)	CS	SaturationRecovery	1	DICOM_2011
+(0018,9025)	CS	SpectrallySelectedSuppression	1	DICOM_2011
+(0018,9026)	CS	SpectrallySelectedExcitation	1	DICOM_2011
+(0018,9027)	CS	SpatialPresaturation	1	DICOM_2011
+(0018,9028)	CS	Tagging	1	DICOM_2011
+(0018,9029)	CS	OversamplingPhase	1	DICOM_2011
+(0018,9030)	FD	TagSpacingFirstDimension	1	DICOM_2011
+(0018,9032)	CS	GeometryOfKSpaceTraversal	1	DICOM_2011
+(0018,9033)	CS	SegmentedKSpaceTraversal	1	DICOM_2011
+(0018,9034)	CS	RectilinearPhaseEncodeReordering	1	DICOM_2011
+(0018,9035)	FD	TagThickness	1	DICOM_2011
+(0018,9036)	CS	PartialFourierDirection	1	DICOM_2011
+(0018,9037)	CS	CardiacSynchronizationTechnique	1	DICOM_2011
+(0018,9041)	LO	ReceiveCoilManufacturerName	1	DICOM_2011
+(0018,9042)	SQ	MRReceiveCoilSequence	1	DICOM_2011
+(0018,9043)	CS	ReceiveCoilType	1	DICOM_2011
+(0018,9044)	CS	QuadratureReceiveCoil	1	DICOM_2011
+(0018,9045)	SQ	MultiCoilDefinitionSequence	1	DICOM_2011
+(0018,9046)	LO	MultiCoilConfiguration	1	DICOM_2011
+(0018,9047)	SH	MultiCoilElementName	1	DICOM_2011
+(0018,9048)	CS	MultiCoilElementUsed	1	DICOM_2011
+(0018,9049)	SQ	MRTransmitCoilSequence	1	DICOM_2011
+(0018,9050)	LO	TransmitCoilManufacturerName	1	DICOM_2011
+(0018,9051)	CS	TransmitCoilType	1	DICOM_2011
+(0018,9052)	FD	SpectralWidth	1-2	DICOM_2011
+(0018,9053)	FD	ChemicalShiftReference	1-2	DICOM_2011
+(0018,9054)	CS	VolumeLocalizationTechnique	1	DICOM_2011
+(0018,9058)	US	MRAcquisitionFrequencyEncodingSteps	1	DICOM_2011
+(0018,9059)	CS	Decoupling	1	DICOM_2011
+(0018,9060)	CS	DecoupledNucleus	1-2	DICOM_2011
+(0018,9061)	FD	DecouplingFrequency	1-2	DICOM_2011
+(0018,9062)	CS	DecouplingMethod	1	DICOM_2011
+(0018,9063)	FD	DecouplingChemicalShiftReference	1-2	DICOM_2011
+(0018,9064)	CS	KSpaceFiltering	1	DICOM_2011
+(0018,9065)	CS	TimeDomainFiltering	1-2	DICOM_2011
+(0018,9066)	US	NumberOfZeroFills	1-2	DICOM_2011
+(0018,9067)	CS	BaselineCorrection	1	DICOM_2011
+(0018,9069)	FD	ParallelReductionFactorInPlane	1	DICOM_2011
+(0018,9070)	FD	CardiacRRIntervalSpecified	1	DICOM_2011
+(0018,9073)	FD	AcquisitionDuration	1	DICOM_2011
+(0018,9074)	DT	FrameAcquisitionDateTime	1	DICOM_2011
+(0018,9075)	CS	DiffusionDirectionality	1	DICOM_2011
+(0018,9076)	SQ	DiffusionGradientDirectionSequence	1	DICOM_2011
+(0018,9077)	CS	ParallelAcquisition	1	DICOM_2011
+(0018,9078)	CS	ParallelAcquisitionTechnique	1	DICOM_2011
+(0018,9079)	FD	InversionTimes	1-n	DICOM_2011
+(0018,9080)	ST	MetaboliteMapDescription	1	DICOM_2011
+(0018,9081)	CS	PartialFourier	1	DICOM_2011
+(0018,9082)	FD	EffectiveEchoTime	1	DICOM_2011
+(0018,9083)	SQ	MetaboliteMapCodeSequence	1	DICOM_2011
+(0018,9084)	SQ	ChemicalShiftSequence	1	DICOM_2011
+(0018,9085)	CS	CardiacSignalSource	1	DICOM_2011
+(0018,9087)	FD	DiffusionBValue	1	DICOM_2011
+(0018,9089)	FD	DiffusionGradientOrientation	3	DICOM_2011
+(0018,9090)	FD	VelocityEncodingDirection	3	DICOM_2011
+(0018,9091)	FD	VelocityEncodingMinimumValue	1	DICOM_2011
+(0018,9092)	SQ	VelocityEncodingAcquisitionSequence	1	DICOM_2011
+(0018,9093)	US	NumberOfKSpaceTrajectories	1	DICOM_2011
+(0018,9094)	CS	CoverageOfKSpace	1	DICOM_2011
+(0018,9095)	UL	SpectroscopyAcquisitionPhaseRows	1	DICOM_2011
+(0018,9098)	FD	TransmitterFrequency	1-2	DICOM_2011
+(0018,9100)	CS	ResonantNucleus	1-2	DICOM_2011
+(0018,9101)	CS	FrequencyCorrection	1	DICOM_2011
+(0018,9103)	SQ	MRSpectroscopyFOVGeometrySequence	1	DICOM_2011
+(0018,9104)	FD	SlabThickness	1	DICOM_2011
+(0018,9105)	FD	SlabOrientation	3	DICOM_2011
+(0018,9106)	FD	MidSlabPosition	3	DICOM_2011
+(0018,9107)	SQ	MRSpatialSaturationSequence	1	DICOM_2011
+(0018,9112)	SQ	MRTimingAndRelatedParametersSequence	1	DICOM_2011
+(0018,9114)	SQ	MREchoSequence	1	DICOM_2011
+(0018,9115)	SQ	MRModifierSequence	1	DICOM_2011
+(0018,9117)	SQ	MRDiffusionSequence	1	DICOM_2011
+(0018,9118)	SQ	CardiacSynchronizationSequence	1	DICOM_2011
+(0018,9119)	SQ	MRAveragesSequence	1	DICOM_2011
+(0018,9125)	SQ	MRFOVGeometrySequence	1	DICOM_2011
+(0018,9126)	SQ	VolumeLocalizationSequence	1	DICOM_2011
+(0018,9127)	UL	SpectroscopyAcquisitionDataColumns	1	DICOM_2011
+(0018,9147)	CS	DiffusionAnisotropyType	1	DICOM_2011
+(0018,9151)	DT	FrameReferenceDateTime	1	DICOM_2011
+(0018,9152)	SQ	MRMetaboliteMapSequence	1	DICOM_2011
+(0018,9155)	FD	ParallelReductionFactorOutOfPlane	1	DICOM_2011
+(0018,9159)	UL	SpectroscopyAcquisitionOutOfPlanePhaseSteps	1	DICOM_2011
+(0018,9168)	FD	ParallelReductionFactorSecondInPlane	1	DICOM_2011
+(0018,9169)	CS	CardiacBeatRejectionTechnique	1	DICOM_2011
+(0018,9170)	CS	RespiratoryMotionCompensationTechnique	1	DICOM_2011
+(0018,9171)	CS	RespiratorySignalSource	1	DICOM_2011
+(0018,9172)	CS	BulkMotionCompensationTechnique	1	DICOM_2011
+(0018,9173)	CS	BulkMotionSignalSource	1	DICOM_2011
+(0018,9174)	CS	ApplicableSafetyStandardAgency	1	DICOM_2011
+(0018,9175)	LO	ApplicableSafetyStandardDescription	1	DICOM_2011
+(0018,9176)	SQ	OperatingModeSequence	1	DICOM_2011
+(0018,9177)	CS	OperatingModeType	1	DICOM_2011
+(0018,9178)	CS	OperatingMode	1	DICOM_2011
+(0018,9179)	CS	SpecificAbsorptionRateDefinition	1	DICOM_2011
+(0018,9180)	CS	GradientOutputType	1	DICOM_2011
+(0018,9181)	FD	SpecificAbsorptionRateValue	1	DICOM_2011
+(0018,9182)	FD	GradientOutput	1	DICOM_2011
+(0018,9183)	CS	FlowCompensationDirection	1	DICOM_2011
+(0018,9184)	FD	TaggingDelay	1	DICOM_2011
+(0018,9185)	ST	RespiratoryMotionCompensationTechniqueDescription	1	DICOM_2011
+(0018,9186)	SH	RespiratorySignalSourceID	1	DICOM_2011
+(0018,9197)	SQ	MRVelocityEncodingSequence	1	DICOM_2011
+(0018,9198)	CS	FirstOrderPhaseCorrection	1	DICOM_2011
+(0018,9199)	CS	WaterReferencedPhaseCorrection	1	DICOM_2011
+(0018,9200)	CS	MRSpectroscopyAcquisitionType	1	DICOM_2011
+(0018,9214)	CS	RespiratoryCyclePosition	1	DICOM_2011
+(0018,9217)	FD	VelocityEncodingMaximumValue	1	DICOM_2011
+(0018,9218)	FD	TagSpacingSecondDimension	1	DICOM_2011
+(0018,9219)	SS	TagAngleSecondAxis	1	DICOM_2011
+(0018,9220)	FD	FrameAcquisitionDuration	1	DICOM_2011
+(0018,9226)	SQ	MRImageFrameTypeSequence	1	DICOM_2011
+(0018,9227)	SQ	MRSpectroscopyFrameTypeSequence	1	DICOM_2011
+(0018,9231)	US	MRAcquisitionPhaseEncodingStepsInPlane	1	DICOM_2011
+(0018,9232)	US	MRAcquisitionPhaseEncodingStepsOutOfPlane	1	DICOM_2011
+(0018,9234)	UL	SpectroscopyAcquisitionPhaseColumns	1	DICOM_2011
+(0018,9236)	CS	CardiacCyclePosition	1	DICOM_2011
+(0018,9239)	SQ	SpecificAbsorptionRateSequence	1	DICOM_2011
+(0018,9240)	US	RFEchoTrainLength	1	DICOM_2011
+(0018,9241)	US	GradientEchoTrainLength	1	DICOM_2011
+(0018,9250)	CS	ArterialSpinLabelingContrast	1	DICOM_2011
+(0018,9251)	SQ	MRArterialSpinLabelingSequence	1	DICOM_2011
+(0018,9252)	LO	ASLTechniqueDescription	1	DICOM_2011
+(0018,9253)	US	ASLSlabNumber	1	DICOM_2011
+(0018,9254)	FD	ASLSlabThickness	1	DICOM_2011
+(0018,9255)	FD	ASLSlabOrientation	3	DICOM_2011
+(0018,9256)	FD	ASLMidSlabPosition	3	DICOM_2011
+(0018,9257)	CS	ASLContext	1	DICOM_2011
+(0018,9258)	UL	ASLPulseTrainDuration	1	DICOM_2011
+(0018,9259)	CS	ASLCrusherFlag	1	DICOM_2011
+(0018,925A)	FD	ASLCrusherFlow	1	DICOM_2011
+(0018,925B)	LO	ASLCrusherDescription	1	DICOM_2011
+(0018,925C)	CS	ASLBolusCutoffFlag	1	DICOM_2011
+(0018,925D)	SQ	ASLBolusCutoffTimingSequence	1	DICOM_2011
+(0018,925E)	LO	ASLBolusCutoffTechnique	1	DICOM_2011
+(0018,925F)	UL	ASLBolusCutoffDelayTime	1	DICOM_2011
+(0018,9260)	SQ	ASLSlabSequence	1	DICOM_2011
+(0018,9295)	FD	ChemicalShiftMinimumIntegrationLimitInppm	1	DICOM_2011
+(0018,9296)	FD	ChemicalShiftMaximumIntegrationLimitInppm	1	DICOM_2011
+(0018,9301)	SQ	CTAcquisitionTypeSequence	1	DICOM_2011
+(0018,9302)	CS	AcquisitionType	1	DICOM_2011
+(0018,9303)	FD	TubeAngle	1	DICOM_2011
+(0018,9304)	SQ	CTAcquisitionDetailsSequence	1	DICOM_2011
+(0018,9305)	FD	RevolutionTime	1	DICOM_2011
+(0018,9306)	FD	SingleCollimationWidth	1	DICOM_2011
+(0018,9307)	FD	TotalCollimationWidth	1	DICOM_2011
+(0018,9308)	SQ	CTTableDynamicsSequence	1	DICOM_2011
+(0018,9309)	FD	TableSpeed	1	DICOM_2011
+(0018,9310)	FD	TableFeedPerRotation	1	DICOM_2011
+(0018,9311)	FD	SpiralPitchFactor	1	DICOM_2011
+(0018,9312)	SQ	CTGeometrySequence	1	DICOM_2011
+(0018,9313)	FD	DataCollectionCenterPatient	3	DICOM_2011
+(0018,9314)	SQ	CTReconstructionSequence	1	DICOM_2011
+(0018,9315)	CS	ReconstructionAlgorithm	1	DICOM_2011
+(0018,9316)	CS	ConvolutionKernelGroup	1	DICOM_2011
+(0018,9317)	FD	ReconstructionFieldOfView	2	DICOM_2011
+(0018,9318)	FD	ReconstructionTargetCenterPatient	3	DICOM_2011
+(0018,9319)	FD	ReconstructionAngle	1	DICOM_2011
+(0018,9320)	SH	ImageFilter	1	DICOM_2011
+(0018,9321)	SQ	CTExposureSequence	1	DICOM_2011
+(0018,9322)	FD	ReconstructionPixelSpacing	2	DICOM_2011
+(0018,9323)	CS	ExposureModulationType	1	DICOM_2011
+(0018,9324)	FD	EstimatedDoseSaving	1	DICOM_2011
+(0018,9325)	SQ	CTXRayDetailsSequence	1	DICOM_2011
+(0018,9326)	SQ	CTPositionSequence	1	DICOM_2011
+(0018,9327)	FD	TablePosition	1	DICOM_2011
+(0018,9328)	FD	ExposureTimeInms	1	DICOM_2011
+(0018,9329)	SQ	CTImageFrameTypeSequence	1	DICOM_2011
+(0018,9330)	FD	XRayTubeCurrentInmA	1	DICOM_2011
+(0018,9332)	FD	ExposureInmAs	1	DICOM_2011
+(0018,9333)	CS	ConstantVolumeFlag	1	DICOM_2011
+(0018,9334)	CS	FluoroscopyFlag	1	DICOM_2011
+(0018,9335)	FD	DistanceSourceToDataCollectionCenter	1	DICOM_2011
+(0018,9337)	US	ContrastBolusAgentNumber	1	DICOM_2011
+(0018,9338)	SQ	ContrastBolusIngredientCodeSequence	1	DICOM_2011
+(0018,9340)	SQ	ContrastAdministrationProfileSequence	1	DICOM_2011
+(0018,9341)	SQ	ContrastBolusUsageSequence	1	DICOM_2011
+(0018,9342)	CS	ContrastBolusAgentAdministered	1	DICOM_2011
+(0018,9343)	CS	ContrastBolusAgentDetected	1	DICOM_2011
+(0018,9344)	CS	ContrastBolusAgentPhase	1	DICOM_2011
+(0018,9345)	FD	CTDIvol	1	DICOM_2011
+(0018,9346)	SQ	CTDIPhantomTypeCodeSequence	1	DICOM_2011
+(0018,9351)	FL	CalciumScoringMassFactorPatient	1	DICOM_2011
+(0018,9352)	FL	CalciumScoringMassFactorDevice	3	DICOM_2011
+(0018,9353)	FL	EnergyWeightingFactor	1	DICOM_2011
+(0018,9360)	SQ	CTAdditionalXRaySourceSequence	1	DICOM_2011
+(0018,9401)	SQ	ProjectionPixelCalibrationSequence	1	DICOM_2011
+(0018,9402)	FL	DistanceSourceToIsocenter	1	DICOM_2011
+(0018,9403)	FL	DistanceObjectToTableTop	1	DICOM_2011
+(0018,9404)	FL	ObjectPixelSpacingInCenterOfBeam	2	DICOM_2011
+(0018,9405)	SQ	PositionerPositionSequence	1	DICOM_2011
+(0018,9406)	SQ	TablePositionSequence	1	DICOM_2011
+(0018,9407)	SQ	CollimatorShapeSequence	1	DICOM_2011
+(0018,9410)	CS	PlanesInAcquisition	1	DICOM_2011
+(0018,9412)	SQ	XAXRFFrameCharacteristicsSequence	1	DICOM_2011
+(0018,9417)	SQ	FrameAcquisitionSequence	1	DICOM_2011
+(0018,9420)	CS	XRayReceptorType	1	DICOM_2011
+(0018,9423)	LO	AcquisitionProtocolName	1	DICOM_2011
+(0018,9424)	LT	AcquisitionProtocolDescription	1	DICOM_2011
+(0018,9425)	CS	ContrastBolusIngredientOpaque	1	DICOM_2011
+(0018,9426)	FL	DistanceReceptorPlaneToDetectorHousing	1	DICOM_2011
+(0018,9427)	CS	IntensifierActiveShape	1	DICOM_2011
+(0018,9428)	FL	IntensifierActiveDimensions	1-2	DICOM_2011
+(0018,9429)	FL	PhysicalDetectorSize	2	DICOM_2011
+(0018,9430)	FL	PositionOfIsocenterProjection	2	DICOM_2011
+(0018,9432)	SQ	FieldOfViewSequence	1	DICOM_2011
+(0018,9433)	LO	FieldOfViewDescription	1	DICOM_2011
+(0018,9434)	SQ	ExposureControlSensingRegionsSequence	1	DICOM_2011
+(0018,9435)	CS	ExposureControlSensingRegionShape	1	DICOM_2011
+(0018,9436)	SS	ExposureControlSensingRegionLeftVerticalEdge	1	DICOM_2011
+(0018,9437)	SS	ExposureControlSensingRegionRightVerticalEdge	1	DICOM_2011
+(0018,9438)	SS	ExposureControlSensingRegionUpperHorizontalEdge	1	DICOM_2011
+(0018,9439)	SS	ExposureControlSensingRegionLowerHorizontalEdge	1	DICOM_2011
+(0018,9440)	SS	CenterOfCircularExposureControlSensingRegion	2	DICOM_2011
+(0018,9441)	US	RadiusOfCircularExposureControlSensingRegion	1	DICOM_2011
+(0018,9442)	SS	VerticesOfThePolygonalExposureControlSensingRegion	2-n	DICOM_2011
+(0018,9447)	FL	ColumnAngulationPatient	1	DICOM_2011
+(0018,9449)	FL	BeamAngle	1	DICOM_2011
+(0018,9451)	SQ	FrameDetectorParametersSequence	1	DICOM_2011
+(0018,9452)	FL	CalculatedAnatomyThickness	1	DICOM_2011
+(0018,9455)	SQ	CalibrationSequence	1	DICOM_2011
+(0018,9456)	SQ	ObjectThicknessSequence	1	DICOM_2011
+(0018,9457)	CS	PlaneIdentification	1	DICOM_2011
+(0018,9461)	FL	FieldOfViewDimensionsInFloat	1-2	DICOM_2011
+(0018,9462)	SQ	IsocenterReferenceSystemSequence	1	DICOM_2011
+(0018,9463)	FL	PositionerIsocenterPrimaryAngle	1	DICOM_2011
+(0018,9464)	FL	PositionerIsocenterSecondaryAngle	1	DICOM_2011
+(0018,9465)	FL	PositionerIsocenterDetectorRotationAngle	1	DICOM_2011
+(0018,9466)	FL	TableXPositionToIsocenter	1	DICOM_2011
+(0018,9467)	FL	TableYPositionToIsocenter	1	DICOM_2011
+(0018,9468)	FL	TableZPositionToIsocenter	1	DICOM_2011
+(0018,9469)	FL	TableHorizontalRotationAngle	1	DICOM_2011
+(0018,9470)	FL	TableHeadTiltAngle	1	DICOM_2011
+(0018,9471)	FL	TableCradleTiltAngle	1	DICOM_2011
+(0018,9472)	SQ	FrameDisplayShutterSequence	1	DICOM_2011
+(0018,9473)	FL	AcquiredImageAreaDoseProduct	1	DICOM_2011
+(0018,9474)	CS	CArmPositionerTabletopRelationship	1	DICOM_2011
+(0018,9476)	SQ	XRayGeometrySequence	1	DICOM_2011
+(0018,9477)	SQ	IrradiationEventIdentificationSequence	1	DICOM_2011
+(0018,9504)	SQ	XRay3DFrameTypeSequence	1	DICOM_2011
+(0018,9506)	SQ	ContributingSourcesSequence	1	DICOM_2011
+(0018,9507)	SQ	XRay3DAcquisitionSequence	1	DICOM_2011
+(0018,9508)	FL	PrimaryPositionerScanArc	1	DICOM_2011
+(0018,9509)	FL	SecondaryPositionerScanArc	1	DICOM_2011
+(0018,9510)	FL	PrimaryPositionerScanStartAngle	1	DICOM_2011
+(0018,9511)	FL	SecondaryPositionerScanStartAngle	1	DICOM_2011
+(0018,9514)	FL	PrimaryPositionerIncrement	1	DICOM_2011
+(0018,9515)	FL	SecondaryPositionerIncrement	1	DICOM_2011
+(0018,9516)	DT	StartAcquisitionDateTime	1	DICOM_2011
+(0018,9517)	DT	EndAcquisitionDateTime	1	DICOM_2011
+(0018,9524)	LO	ApplicationName	1	DICOM_2011
+(0018,9525)	LO	ApplicationVersion	1	DICOM_2011
+(0018,9526)	LO	ApplicationManufacturer	1	DICOM_2011
+(0018,9527)	CS	AlgorithmType	1	DICOM_2011
+(0018,9528)	LO	AlgorithmDescription	1	DICOM_2011
+(0018,9530)	SQ	XRay3DReconstructionSequence	1	DICOM_2011
+(0018,9531)	LO	ReconstructionDescription	1	DICOM_2011
+(0018,9538)	SQ	PerProjectionAcquisitionSequence	1	DICOM_2011
+(0018,9601)	SQ	DiffusionBMatrixSequence	1	DICOM_2011
+(0018,9602)	FD	DiffusionBValueXX	1	DICOM_2011
+(0018,9603)	FD	DiffusionBValueXY	1	DICOM_2011
+(0018,9604)	FD	DiffusionBValueXZ	1	DICOM_2011
+(0018,9605)	FD	DiffusionBValueYY	1	DICOM_2011
+(0018,9606)	FD	DiffusionBValueYZ	1	DICOM_2011
+(0018,9607)	FD	DiffusionBValueZZ	1	DICOM_2011
+(0018,9701)	DT	DecayCorrectionDateTime	1	DICOM_2011
+(0018,9715)	FD	StartDensityThreshold	1	DICOM_2011
+(0018,9716)	FD	StartRelativeDensityDifferenceThreshold	1	DICOM_2011
+(0018,9717)	FD	StartCardiacTriggerCountThreshold	1	DICOM_2011
+(0018,9718)	FD	StartRespiratoryTriggerCountThreshold	1	DICOM_2011
+(0018,9719)	FD	TerminationCountsThreshold	1	DICOM_2011
+(0018,9720)	FD	TerminationDensityThreshold	1	DICOM_2011
+(0018,9721)	FD	TerminationRelativeDensityThreshold	1	DICOM_2011
+(0018,9722)	FD	TerminationTimeThreshold	1	DICOM_2011
+(0018,9723)	FD	TerminationCardiacTriggerCountThreshold	1	DICOM_2011
+(0018,9724)	FD	TerminationRespiratoryTriggerCountThreshold	1	DICOM_2011
+(0018,9725)	CS	DetectorGeometry	1	DICOM_2011
+(0018,9726)	FD	TransverseDetectorSeparation	1	DICOM_2011
+(0018,9727)	FD	AxialDetectorDimension	1	DICOM_2011
+(0018,9729)	US	RadiopharmaceuticalAgentNumber	1	DICOM_2011
+(0018,9732)	SQ	PETFrameAcquisitionSequence	1	DICOM_2011
+(0018,9733)	SQ	PETDetectorMotionDetailsSequence	1	DICOM_2011
+(0018,9734)	SQ	PETTableDynamicsSequence	1	DICOM_2011
+(0018,9735)	SQ	PETPositionSequence	1	DICOM_2011
+(0018,9736)	SQ	PETFrameCorrectionFactorsSequence	1	DICOM_2011
+(0018,9737)	SQ	RadiopharmaceuticalUsageSequence	1	DICOM_2011
+(0018,9738)	CS	AttenuationCorrectionSource	1	DICOM_2011
+(0018,9739)	US	NumberOfIterations	1	DICOM_2011
+(0018,9740)	US	NumberOfSubsets	1	DICOM_2011
+(0018,9749)	SQ	PETReconstructionSequence	1	DICOM_2011
+(0018,9751)	SQ	PETFrameTypeSequence	1	DICOM_2011
+(0018,9755)	CS	TimeOfFlightInformationUsed	1	DICOM_2011
+(0018,9756)	CS	ReconstructionType	1	DICOM_2011
+(0018,9758)	CS	DecayCorrected	1	DICOM_2011
+(0018,9759)	CS	AttenuationCorrected	1	DICOM_2011
+(0018,9760)	CS	ScatterCorrected	1	DICOM_2011
+(0018,9761)	CS	DeadTimeCorrected	1	DICOM_2011
+(0018,9762)	CS	GantryMotionCorrected	1	DICOM_2011
+(0018,9763)	CS	PatientMotionCorrected	1	DICOM_2011
+(0018,9764)	CS	CountLossNormalizationCorrected	1	DICOM_2011
+(0018,9765)	CS	RandomsCorrected	1	DICOM_2011
+(0018,9766)	CS	NonUniformRadialSamplingCorrected	1	DICOM_2011
+(0018,9767)	CS	SensitivityCalibrated	1	DICOM_2011
+(0018,9768)	CS	DetectorNormalizationCorrection	1	DICOM_2011
+(0018,9769)	CS	IterativeReconstructionMethod	1	DICOM_2011
+(0018,9770)	CS	AttenuationCorrectionTemporalRelationship	1	DICOM_2011
+(0018,9771)	SQ	PatientPhysiologicalStateSequence	1	DICOM_2011
+(0018,9772)	SQ	PatientPhysiologicalStateCodeSequence	1	DICOM_2011
+(0018,9801)	FD	DepthsOfFocus	1-n	DICOM_2011
+(0018,9803)	SQ	ExcludedIntervalsSequence	1	DICOM_2011
+(0018,9804)	DT	ExclusionStartDatetime	1	DICOM_2011
+(0018,9805)	FD	ExclusionDuration	1	DICOM_2011
+(0018,9806)	SQ	USImageDescriptionSequence	1	DICOM_2011
+(0018,9807)	SQ	ImageDataTypeSequence	1	DICOM_2011
+(0018,9808)	CS	DataType	1	DICOM_2011
+(0018,9809)	SQ	TransducerScanPatternCodeSequence	1	DICOM_2011
+(0018,980B)	CS	AliasedDataType	1	DICOM_2011
+(0018,980C)	CS	PositionMeasuringDeviceUsed	1	DICOM_2011
+(0018,980D)	SQ	TransducerGeometryCodeSequence	1	DICOM_2011
+(0018,980E)	SQ	TransducerBeamSteeringCodeSequence	1	DICOM_2011
+(0018,980F)	SQ	TransducerApplicationCodeSequence	1	DICOM_2011
+(0018,A001)	SQ	ContributingEquipmentSequence	1	DICOM_2011
+(0018,A002)	DT	ContributionDateTime	1	DICOM_2011
+(0018,A003)	ST	ContributionDescription	1	DICOM_2011
+(0020,000D)	UI	StudyInstanceUID	1	DICOM_2011
+(0020,000E)	UI	SeriesInstanceUID	1	DICOM_2011
+(0020,0010)	SH	StudyID	1	DICOM_2011
+(0020,0011)	IS	SeriesNumber	1	DICOM_2011
+(0020,0012)	IS	AcquisitionNumber	1	DICOM_2011
+(0020,0013)	IS	InstanceNumber	1	DICOM_2011
+(0020,0019)	IS	ItemNumber	1	DICOM_2011
+(0020,0020)	CS	PatientOrientation	2	DICOM_2011
+(0020,0032)	DS	ImagePositionPatient	3	DICOM_2011
+(0020,0037)	DS	ImageOrientationPatient	6	DICOM_2011
+(0020,0052)	UI	FrameOfReferenceUID	1	DICOM_2011
+(0020,0060)	CS	Laterality	1	DICOM_2011
+(0020,0062)	CS	ImageLaterality	1	DICOM_2011
+(0020,0100)	IS	TemporalPositionIdentifier	1	DICOM_2011
+(0020,0105)	IS	NumberOfTemporalPositions	1	DICOM_2011
+(0020,0110)	DS	TemporalResolution	1	DICOM_2011
+(0020,0200)	UI	SynchronizationFrameOfReferenceUID	1	DICOM_2011
+(0020,0242)	UI	SOPInstanceUIDOfConcatenationSource	1	DICOM_2011
+(0020,1002)	IS	ImagesInAcquisition	1	DICOM_2011
+(0020,1040)	LO	PositionReferenceIndicator	1	DICOM_2011
+(0020,1041)	DS	SliceLocation	1	DICOM_2011
+(0020,1200)	IS	NumberOfPatientRelatedStudies	1	DICOM_2011
+(0020,1202)	IS	NumberOfPatientRelatedSeries	1	DICOM_2011
+(0020,1204)	IS	NumberOfPatientRelatedInstances	1	DICOM_2011
+(0020,1206)	IS	NumberOfStudyRelatedSeries	1	DICOM_2011
+(0020,1208)	IS	NumberOfStudyRelatedInstances	1	DICOM_2011
+(0020,1209)	IS	NumberOfSeriesRelatedInstances	1	DICOM_2011
+(0020,4000)	LT	ImageComments	1	DICOM_2011
+(0020,9056)	SH	StackID	1	DICOM_2011
+(0020,9057)	UL	InStackPositionNumber	1	DICOM_2011
+(0020,9071)	SQ	FrameAnatomySequence	1	DICOM_2011
+(0020,9072)	CS	FrameLaterality	1	DICOM_2011
+(0020,9111)	SQ	FrameContentSequence	1	DICOM_2011
+(0020,9113)	SQ	PlanePositionSequence	1	DICOM_2011
+(0020,9116)	SQ	PlaneOrientationSequence	1	DICOM_2011
+(0020,9128)	UL	TemporalPositionIndex	1	DICOM_2011
+(0020,9153)	FD	NominalCardiacTriggerDelayTime	1	DICOM_2011
+(0020,9154)	FL	NominalCardiacTriggerTimePriorToRPeak	1	DICOM_2011
+(0020,9155)	FL	ActualCardiacTriggerTimePriorToRPeak	1	DICOM_2011
+(0020,9156)	US	FrameAcquisitionNumber	1	DICOM_2011
+(0020,9157)	UL	DimensionIndexValues	1-n	DICOM_2011
+(0020,9158)	LT	FrameComments	1	DICOM_2011
+(0020,9161)	UI	ConcatenationUID	1	DICOM_2011
+(0020,9162)	US	InConcatenationNumber	1	DICOM_2011
+(0020,9163)	US	InConcatenationTotalNumber	1	DICOM_2011
+(0020,9164)	UI	DimensionOrganizationUID	1	DICOM_2011
+(0020,9165)	AT	DimensionIndexPointer	1	DICOM_2011
+(0020,9167)	AT	FunctionalGroupPointer	1	DICOM_2011
+(0020,9213)	LO	DimensionIndexPrivateCreator	1	DICOM_2011
+(0020,9221)	SQ	DimensionOrganizationSequence	1	DICOM_2011
+(0020,9222)	SQ	DimensionIndexSequence	1	DICOM_2011
+(0020,9228)	UL	ConcatenationFrameOffsetNumber	1	DICOM_2011
+(0020,9238)	LO	FunctionalGroupPrivateCreator	1	DICOM_2011
+(0020,9241)	FL	NominalPercentageOfCardiacPhase	1	DICOM_2011
+(0020,9245)	FL	NominalPercentageOfRespiratoryPhase	1	DICOM_2011
+(0020,9246)	FL	StartingRespiratoryAmplitude	1	DICOM_2011
+(0020,9247)	CS	StartingRespiratoryPhase	1	DICOM_2011
+(0020,9248)	FL	EndingRespiratoryAmplitude	1	DICOM_2011
+(0020,9249)	CS	EndingRespiratoryPhase	1	DICOM_2011
+(0020,9250)	CS	RespiratoryTriggerType	1	DICOM_2011
+(0020,9251)	FD	RRIntervalTimeNominal	1	DICOM_2011
+(0020,9252)	FD	ActualCardiacTriggerDelayTime	1	DICOM_2011
+(0020,9253)	SQ	RespiratorySynchronizationSequence	1	DICOM_2011
+(0020,9254)	FD	RespiratoryIntervalTime	1	DICOM_2011
+(0020,9255)	FD	NominalRespiratoryTriggerDelayTime	1	DICOM_2011
+(0020,9256)	FD	RespiratoryTriggerDelayThreshold	1	DICOM_2011
+(0020,9257)	FD	ActualRespiratoryTriggerDelayTime	1	DICOM_2011
+(0020,9301)	FD	ImagePositionVolume	3	DICOM_2011
+(0020,9302)	FD	ImageOrientationVolume	6	DICOM_2011
+(0020,9307)	CS	UltrasoundAcquisitionGeometry	1	DICOM_2011
+(0020,9308)	FD	ApexPosition	3	DICOM_2011
+(0020,9309)	FD	VolumeToTransducerMappingMatrix	16	DICOM_2011
+(0020,930A)	FD	VolumeToTableMappingMatrix	16	DICOM_2011
+(0020,930C)	CS	PatientFrameOfReferenceSource	1	DICOM_2011
+(0020,930D)	FD	TemporalPositionTimeOffset	1	DICOM_2011
+(0020,930E)	SQ	PlanePositionVolumeSequence	1	DICOM_2011
+(0020,930F)	SQ	PlaneOrientationVolumeSequence	1	DICOM_2011
+(0020,9310)	SQ	TemporalPositionSequence	1	DICOM_2011
+(0020,9311)	CS	DimensionOrganizationType	1	DICOM_2011
+(0020,9312)	UI	VolumeFrameOfReferenceUID	1	DICOM_2011
+(0020,9313)	UI	TableFrameOfReferenceUID	1	DICOM_2011
+(0020,9421)	LO	DimensionDescriptionLabel	1	DICOM_2011
+(0020,9450)	SQ	PatientOrientationInFrameSequence	1	DICOM_2011
+(0020,9453)	LO	FrameLabel	1	DICOM_2011
+(0020,9518)	US	AcquisitionIndex	1-n	DICOM_2011
+(0020,9529)	SQ	ContributingSOPInstancesReferenceSequence	1	DICOM_2011
+(0020,9536)	US	ReconstructionIndex	1	DICOM_2011
+(0022,0001)	US	LightPathFilterPassThroughWavelength	1	DICOM_2011
+(0022,0002)	US	LightPathFilterPassBand	2	DICOM_2011
+(0022,0003)	US	ImagePathFilterPassThroughWavelength	1	DICOM_2011
+(0022,0004)	US	ImagePathFilterPassBand	2	DICOM_2011
+(0022,0005)	CS	PatientEyeMovementCommanded	1	DICOM_2011
+(0022,0006)	SQ	PatientEyeMovementCommandCodeSequence	1	DICOM_2011
+(0022,0007)	FL	SphericalLensPower	1	DICOM_2011
+(0022,0008)	FL	CylinderLensPower	1	DICOM_2011
+(0022,0009)	FL	CylinderAxis	1	DICOM_2011
+(0022,000A)	FL	EmmetropicMagnification	1	DICOM_2011
+(0022,000B)	FL	IntraOcularPressure	1	DICOM_2011
+(0022,000C)	FL	HorizontalFieldOfView	1	DICOM_2011
+(0022,000D)	CS	PupilDilated	1	DICOM_2011
+(0022,000E)	FL	DegreeOfDilation	1	DICOM_2011
+(0022,0010)	FL	StereoBaselineAngle	1	DICOM_2011
+(0022,0011)	FL	StereoBaselineDisplacement	1	DICOM_2011
+(0022,0012)	FL	StereoHorizontalPixelOffset	1	DICOM_2011
+(0022,0013)	FL	StereoVerticalPixelOffset	1	DICOM_2011
+(0022,0014)	FL	StereoRotation	1	DICOM_2011
+(0022,0015)	SQ	AcquisitionDeviceTypeCodeSequence	1	DICOM_2011
+(0022,0016)	SQ	IlluminationTypeCodeSequence	1	DICOM_2011
+(0022,0017)	SQ	LightPathFilterTypeStackCodeSequence	1	DICOM_2011
+(0022,0018)	SQ	ImagePathFilterTypeStackCodeSequence	1	DICOM_2011
+(0022,0019)	SQ	LensesCodeSequence	1	DICOM_2011
+(0022,001A)	SQ	ChannelDescriptionCodeSequence	1	DICOM_2011
+(0022,001B)	SQ	RefractiveStateSequence	1	DICOM_2011
+(0022,001C)	SQ	MydriaticAgentCodeSequence	1	DICOM_2011
+(0022,001D)	SQ	RelativeImagePositionCodeSequence	1	DICOM_2011
+(0022,001E)	FL	CameraAngleOfView	1	DICOM_2011
+(0022,0020)	SQ	StereoPairsSequence	1	DICOM_2011
+(0022,0021)	SQ	LeftImageSequence	1	DICOM_2011
+(0022,0022)	SQ	RightImageSequence	1	DICOM_2011
+(0022,0030)	FL	AxialLengthOfTheEye	1	DICOM_2011
+(0022,0031)	SQ	OphthalmicFrameLocationSequence	1	DICOM_2011
+(0022,0032)	FL	ReferenceCoordinates	2-2n	DICOM_2011
+(0022,0035)	FL	DepthSpatialResolution	1	DICOM_2011
+(0022,0036)	FL	MaximumDepthDistortion	1	DICOM_2011
+(0022,0037)	FL	AlongScanSpatialResolution	1	DICOM_2011
+(0022,0038)	FL	MaximumAlongScanDistortion	1	DICOM_2011
+(0022,0039)	CS	OphthalmicImageOrientation	1	DICOM_2011
+(0022,0041)	FL	DepthOfTransverseImage	1	DICOM_2011
+(0022,0042)	SQ	MydriaticAgentConcentrationUnitsSequence	1	DICOM_2011
+(0022,0048)	FL	AcrossScanSpatialResolution	1	DICOM_2011
+(0022,0049)	FL	MaximumAcrossScanDistortion	1	DICOM_2011
+(0022,004E)	DS	MydriaticAgentConcentration	1	DICOM_2011
+(0022,0055)	FL	IlluminationWaveLength	1	DICOM_2011
+(0022,0056)	FL	IlluminationPower	1	DICOM_2011
+(0022,0057)	FL	IlluminationBandwidth	1	DICOM_2011
+(0022,0058)	SQ	MydriaticAgentSequence	1	DICOM_2011
+(0022,1007)	SQ	OphthalmicAxialMeasurementsRightEyeSequence	1	DICOM_2011
+(0022,1008)	SQ	OphthalmicAxialMeasurementsLeftEyeSequence	1	DICOM_2011
+(0022,1009)	CS	OphthalmicAxialMeasurementsDeviceType	1	DICOM_2011
+(0022,1010)	CS	OphthalmicAxialLengthMeasurementsType	1	DICOM_2011
+(0022,1012)	SQ	OphthalmicAxialLengthSequence	1	DICOM_2011
+(0022,1019)	FL	OphthalmicAxialLength	1	DICOM_2011
+(0022,1024)	SQ	LensStatusCodeSequence	1	DICOM_2011
+(0022,1025)	SQ	VitreousStatusCodeSequence	1	DICOM_2011
+(0022,1028)	SQ	IOLFormulaCodeSequence	1	DICOM_2011
+(0022,1029)	LO	IOLFormulaDetail	1	DICOM_2011
+(0022,1033)	FL	KeratometerIndex	1	DICOM_2011
+(0022,1035)	SQ	SourceofOphthalmicAxialLengthCodeSequence	1	DICOM_2011
+(0022,1037)	FL	TargetRefraction	1	DICOM_2011
+(0022,1039)	CS	RefractiveProcedureOccurred	1	DICOM_2011
+(0022,1040)	SQ	RefractiveSurgeryTypeCodeSequence	1	DICOM_2011
+(0022,1044)	SQ	OphthalmicUltrasoundMethodCodeSequence	1	DICOM_2011
+(0022,1050)	SQ	OphthalmicAxialLengthMeasurementsSequence	1	DICOM_2011
+(0022,1053)	FL	IOLPower	1	DICOM_2011
+(0022,1054)	FL	PredictedRefractiveError	1	DICOM_2011
+(0022,1059)	FL	OphthalmicAxialLengthVelocity	1	DICOM_2011
+(0022,1065)	LO	LensStatusDescription	1	DICOM_2011
+(0022,1066)	LO	VitreousStatusDescription	1	DICOM_2011
+(0022,1090)	SQ	IOLPowerSequence	1	DICOM_2011
+(0022,1092)	SQ	LensConstantSequence	1	DICOM_2011
+(0022,1093)	LO	IOLManufacturer	1	DICOM_2011
+(0022,1095)	LO	ImplantName	1	DICOM_2011
+(0022,1096)	SQ	KeratometryMeasurementTypeCodeSequence	1	DICOM_2011
+(0022,1097)	LO	ImplantPartNumber	1	DICOM_2011
+(0022,1100)	SQ	ReferencedOphthalmicAxialMeasurementsSequence	1	DICOM_2011
+(0022,1101)	SQ	OphthalmicAxialLengthMeasurementsSegmentNameCodeSequence	1	DICOM_2011
+(0022,1103)	SQ	RefractiveErrorBeforeRefractiveSurgeryCodeSequence	1	DICOM_2011
+(0022,1121)	FL	IOLPowerForExactEmmetropia	1	DICOM_2011
+(0022,1122)	FL	IOLPowerForExactTargetRefraction	1	DICOM_2011
+(0022,1125)	SQ	AnteriorChamberDepthDefinitionCodeSequence	1	DICOM_2011
+(0022,1127)	SQ	LensThicknessSequence	1	DICOM_2011
+(0022,1128)	SQ	AnteriorChamberDepthSequence	1	DICOM_2011
+(0022,1130)	FL	LensThickness	1	DICOM_2011
+(0022,1131)	FL	AnteriorChamberDepth	1	DICOM_2011
+(0022,1132)	SQ	SourceofLensThicknessDataCodeSequence	1	DICOM_2011
+(0022,1133)	SQ	SourceofAnteriorChamberDepthDataCodeSequence	1	DICOM_2011
+(0022,1134)	SQ	SourceofRefractiveMeasurementsSequence	1	DICOM_2011
+(0022,1135)	SQ	SourceofRefractiveMeasurementsCodeSequence	1	DICOM_2011
+(0022,1140)	CS	OphthalmicAxialLengthMeasurementModified	1	DICOM_2011
+(0022,1150)	SQ	OphthalmicAxialLengthDataSourceCodeSequence	1	DICOM_2011
+(0022,1155)	FL	SignaltoNoiseRatio	1	DICOM_2011
+(0022,1159)	LO	OphthalmicAxialLengthDataSourceDescription	1	DICOM_2011
+(0022,1210)	SQ	OphthalmicAxialLengthMeasurementsTotalLengthSequence	1	DICOM_2011
+(0022,1211)	SQ	OphthalmicAxialLengthMeasurementsSegmentalLengthSequence	1	DICOM_2011
+(0022,1212)	SQ	OphthalmicAxialLengthMeasurementsLengthSummationSequence	1	DICOM_2011
+(0022,1220)	SQ	UltrasoundOphthalmicAxialLengthMeasurementsSequence	1	DICOM_2011
+(0022,1225)	SQ	OpticalOphthalmicAxialLengthMeasurementsSequence	1	DICOM_2011
+(0022,1230)	SQ	UltrasoundSelectedOphthalmicAxialLengthSequence	1	DICOM_2011
+(0022,1250)	SQ	OphthalmicAxialLengthSelectionMethodCodeSequence	1	DICOM_2011
+(0022,1255)	SQ	OpticalSelectedOphthalmicAxialLengthSequence	1	DICOM_2011
+(0022,1257)	SQ	SelectedSegmentalOphthalmicAxialLengthSequence	1	DICOM_2011
+(0022,1260)	SQ	SelectedTotalOphthalmicAxialLengthSequence	1	DICOM_2011
+(0022,1262)	SQ	OphthalmicAxialLengthQualityMetricSequence	1	DICOM_2011
+(0022,1265)	SQ	OphthalmicAxialLengthQualityMetricTypeCodeSequence	1	DICOM_2011
+(0022,1300)	SQ	IntraocularLensCalculationsRightEyeSequence	1	DICOM_2011
+(0022,1310)	SQ	IntraocularLensCalculationsLeftEyeSequence	1	DICOM_2011
+(0022,1330)	SQ	ReferencedOphthalmicAxialLengthMeasurementQCImageSequence	1	DICOM_2011
+(0024,0010)	FL	VisualFieldHorizontalExtent	1	DICOM_2011
+(0024,0011)	FL	VisualFieldVerticalExtent	1	DICOM_2011
+(0024,0012)	CS	VisualFieldShape	1	DICOM_2011
+(0024,0016)	SQ	ScreeningTestModeCodeSequence	1	DICOM_2011
+(0024,0018)	FL	MaximumStimulusLuminance	1	DICOM_2011
+(0024,0020)	FL	BackgroundLuminance	1	DICOM_2011
+(0024,0021)	SQ	StimulusColorCodeSequence	1	DICOM_2011
+(0024,0024)	SQ	BackgroundIlluminationColorCodeSequence	1	DICOM_2011
+(0024,0025)	FL	StimulusArea	1	DICOM_2011
+(0024,0028)	FL	StimulusPresentationTime	1	DICOM_2011
+(0024,0032)	SQ	FixationSequence	1	DICOM_2011
+(0024,0033)	SQ	FixationMonitoringCodeSequence	1	DICOM_2011
+(0024,0034)	SQ	VisualFieldCatchTrialSequence	1	DICOM_2011
+(0024,0035)	US	FixationCheckedQuantity	1	DICOM_2011
+(0024,0036)	US	PatientNotProperlyFixatedQuantity	1	DICOM_2011
+(0024,0037)	CS	PresentedVisualStimuliDataFlag	1	DICOM_2011
+(0024,0038)	US	NumberOfVisualStimuli	1	DICOM_2011
+(0024,0039)	CS	ExcessiveFixationLossesDataFlag	1	DICOM_2011
+(0024,0040)	CS	ExcessiveFixationLosses	1	DICOM_2011
+(0024,0042)	US	StimuliRetestingQuantity	1	DICOM_2011
+(0024,0044)	LT	CommentsOnPatientPerformanceOfVisualField	1	DICOM_2011
+(0024,0045)	CS	FalseNegativesEstimateFlag	1	DICOM_2011
+(0024,0046)	FL	FalseNegativesEstimate	1	DICOM_2011
+(0024,0048)	US	NegativeCatchTrialsQuantity	1	DICOM_2011
+(0024,0050)	US	FalseNegativesQuantity	1	DICOM_2011
+(0024,0051)	CS	ExcessiveFalseNegativesDataFlag	1	DICOM_2011
+(0024,0052)	CS	ExcessiveFalseNegatives	1	DICOM_2011
+(0024,0053)	CS	FalsePositivesEstimateFlag	1	DICOM_2011
+(0024,0054)	FL	FalsePositivesEstimate	1	DICOM_2011
+(0024,0055)	CS	CatchTrialsDataFlag	1	DICOM_2011
+(0024,0056)	US	PositiveCatchTrialsQuantity	1	DICOM_2011
+(0024,0057)	CS	TestPointNormalsDataFlag	1	DICOM_2011
+(0024,0058)	SQ	TestPointNormalsSequence	1	DICOM_2011
+(0024,0059)	CS	GlobalDeviationProbabilityNormalsFlag	1	DICOM_2011
+(0024,0060)	US	FalsePositivesQuantity	1	DICOM_2011
+(0024,0061)	CS	ExcessiveFalsePositivesDataFlag	1	DICOM_2011
+(0024,0062)	CS	ExcessiveFalsePositives	1	DICOM_2011
+(0024,0063)	CS	VisualFieldTestNormalsFlag	1	DICOM_2011
+(0024,0064)	SQ	ResultsNormalsSequence	1	DICOM_2011
+(0024,0065)	SQ	AgeCorrectedSensitivityDeviationAlgorithmSequence	1	DICOM_2011
+(0024,0066)	FL	GlobalDeviationFromNormal	1	DICOM_2011
+(0024,0067)	SQ	GeneralizedDefectSensitivityDeviationAlgorithmSequence	1	DICOM_2011
+(0024,0068)	FL	LocalizedDeviationfromNormal	1	DICOM_2011
+(0024,0069)	LO	PatientReliabilityIndicator	1	DICOM_2011
+(0024,0070)	FL	VisualFieldMeanSensitivity	1	DICOM_2011
+(0024,0071)	FL	GlobalDeviationProbability	1	DICOM_2011
+(0024,0072)	CS	LocalDeviationProbabilityNormalsFlag	1	DICOM_2011
+(0024,0073)	FL	LocalizedDeviationProbability	1	DICOM_2011
+(0024,0074)	CS	ShortTermFluctuationCalculated	1	DICOM_2011
+(0024,0075)	FL	ShortTermFluctuation	1	DICOM_2011
+(0024,0076)	CS	ShortTermFluctuationProbabilityCalculated	1	DICOM_2011
+(0024,0077)	FL	ShortTermFluctuationProbability	1	DICOM_2011
+(0024,0078)	CS	CorrectedLocalizedDeviationFromNormalCalculated	1	DICOM_2011
+(0024,0079)	FL	CorrectedLocalizedDeviationFromNormal	1	DICOM_2011
+(0024,0080)	CS	CorrectedLocalizedDeviationFromNormalProbabilityCalculated	1	DICOM_2011
+(0024,0081)	FL	CorrectedLocalizedDeviationFromNormalProbability	1	DICOM_2011
+(0024,0083)	SQ	GlobalDeviationProbabilitySequence	1	DICOM_2011
+(0024,0085)	SQ	LocalizedDeviationProbabilitySequence	1	DICOM_2011
+(0024,0086)	CS	FovealSensitivityMeasured	1	DICOM_2011
+(0024,0087)	FL	FovealSensitivity	1	DICOM_2011
+(0024,0088)	FL	VisualFieldTestDuration	1	DICOM_2011
+(0024,0089)	SQ	VisualFieldTestPointSequence	1	DICOM_2011
+(0024,0090)	FL	VisualFieldTestPointXCoordinate	1	DICOM_2011
+(0024,0091)	FL	VisualFieldTestPointYCoordinate	1	DICOM_2011
+(0024,0092)	FL	AgeCorrectedSensitivityDeviationValue	1	DICOM_2011
+(0024,0093)	CS	StimulusResults	1	DICOM_2011
+(0024,0094)	FL	SensitivityValue	1	DICOM_2011
+(0024,0095)	CS	RetestStimulusSeen	1	DICOM_2011
+(0024,0096)	FL	RetestSensitivityValue	1	DICOM_2011
+(0024,0097)	SQ	VisualFieldTestPointNormalsSequence	1	DICOM_2011
+(0024,0098)	FL	QuantifiedDefect	1	DICOM_2011
+(0024,0102)	CS	GeneralizedDefectCorrectedSensitivityDeviationFlag	1	DICOM_2011
+(0024,0103)	FL	GeneralizedDefectCorrectedSensitivityDeviationValue	1	DICOM_2011
+(0024,0104)	FL	GeneralizedDefectCorrectedSensitivityDeviationProbabilityValue	1	DICOM_2011
+(0024,0105)	FL	MinimumSensitivityValue	1	DICOM_2011
+(0024,0106)	CS	BlindSpotLocalized	1	DICOM_2011
+(0024,0107)	FL	BlindSpotXCoordinate	1	DICOM_2011
+(0024,0108)	FL	BlindSpotYCoordinate	1	DICOM_2011
+(0024,0110)	SQ	VisualAcuityMeasurementSequence	1	DICOM_2011
+(0024,0112)	SQ	RefractiveParametersUsedOnPatientSequence	1	DICOM_2011
+(0024,0113)	CS	MeasurementLaterality	1	DICOM_2011
+(0024,0114)	SQ	OphthalmicPatientClinicalInformationLeftEyeSequence	1	DICOM_2011
+(0024,0115)	SQ	OphthalmicPatientClinicalInformationRightEyeSequence	1	DICOM_2011
+(0024,0117)	CS	FovealPointNormativeDataFlag	1	DICOM_2011
+(0024,0118)	FL	FovealPointProbabilityValue	1	DICOM_2011
+(0024,0120)	CS	ScreeningBaselineMeasured	1	DICOM_2011
+(0024,0122)	SQ	ScreeningBaselineMeasuredSequence	1	DICOM_2011
+(0024,0124)	CS	ScreeningBaselineType	1	DICOM_2011
+(0024,0126)	FL	ScreeningBaselineValue	1	DICOM_2011
+(0024,0202)	LO	AlgorithmSource	1	DICOM_2011
+(0024,0306)	LO	DataSetName	1	DICOM_2011
+(0024,0307)	LO	DataSetVersion	1	DICOM_2011
+(0024,0308)	LO	DataSetSource	1	DICOM_2011
+(0024,0309)	LO	DataSetDescription	1	DICOM_2011
+(0024,0317)	SQ	VisualFieldTestReliabilityGlobalIndexSequence	1	DICOM_2011
+(0024,0320)	SQ	VisualFieldGlobalResultsIndexSequence	1	DICOM_2011
+(0024,0325)	SQ	DataObservationSequence	1	DICOM_2011
+(0024,0338)	CS	IndexNormalsFlag	1	DICOM_2011
+(0024,0341)	FL	IndexProbability	1	DICOM_2011
+(0024,0344)	SQ	IndexProbabilitySequence	1	DICOM_2011
+(0028,0002)	US	SamplesPerPixel	1	DICOM_2011
+(0028,0003)	US	SamplesPerPixelUsed	1	DICOM_2011
+(0028,0004)	CS	PhotometricInterpretation	1	DICOM_2011
+(0028,0006)	US	PlanarConfiguration	1	DICOM_2011
+(0028,0008)	IS	NumberOfFrames	1	DICOM_2011
+(0028,0009)	AT	FrameIncrementPointer	1-n	DICOM_2011
+(0028,000A)	AT	FrameDimensionPointer	1-n	DICOM_2011
+(0028,0010)	US	Rows	1	DICOM_2011
+(0028,0011)	US	Columns	1	DICOM_2011
+(0028,0014)	US	UltrasoundColorDataPresent	1	DICOM_2011
+(0028,0030)	DS	PixelSpacing	2	DICOM_2011
+(0028,0031)	DS	ZoomFactor	2	DICOM_2011
+(0028,0032)	DS	ZoomCenter	2	DICOM_2011
+(0028,0034)	IS	PixelAspectRatio	2	DICOM_2011
+(0028,0051)	CS	CorrectedImage	1-n	DICOM_2011
+(0028,0100)	US	BitsAllocated	1	DICOM_2011
+(0028,0101)	US	BitsStored	1	DICOM_2011
+(0028,0102)	US	HighBit	1	DICOM_2011
+(0028,0103)	US	PixelRepresentation	1	DICOM_2011
+(0028,0106)	xs	SmallestImagePixelValue	1	DICOM_2011
+(0028,0107)	xs	LargestImagePixelValue	1	DICOM_2011
+(0028,0108)	xs	SmallestPixelValueInSeries	1	DICOM_2011
+(0028,0109)	xs	LargestPixelValueInSeries	1	DICOM_2011
+(0028,0120)	xs	PixelPaddingValue	1	DICOM_2011
+(0028,0121)	xs	PixelPaddingRangeLimit	1	DICOM_2011
+(0028,0300)	CS	QualityControlImage	1	DICOM_2011
+(0028,0301)	CS	BurnedInAnnotation	1	DICOM_2011
+(0028,0302)	CS	RecognizableVisualFeatures	1	DICOM_2011
+(0028,0303)	CS	LongitudinalTemporalInformationModified	1	DICOM_2011
+(0028,0304)	UI	ReferencedColorPaletteInstanceUID	1	DICOM_2011
+(0028,0A02)	CS	PixelSpacingCalibrationType	1	DICOM_2011
+(0028,0A04)	LO	PixelSpacingCalibrationDescription	1	DICOM_2011
+(0028,1040)	CS	PixelIntensityRelationship	1	DICOM_2011
+(0028,1041)	SS	PixelIntensityRelationshipSign	1	DICOM_2011
+(0028,1050)	DS	WindowCenter	1-n	DICOM_2011
+(0028,1051)	DS	WindowWidth	1-n	DICOM_2011
+(0028,1052)	DS	RescaleIntercept	1	DICOM_2011
+(0028,1053)	DS	RescaleSlope	1	DICOM_2011
+(0028,1054)	LO	RescaleType	1	DICOM_2011
+(0028,1055)	LO	WindowCenterWidthExplanation	1-n	DICOM_2011
+(0028,1056)	CS	VOILUTFunction	1	DICOM_2011
+(0028,1090)	CS	RecommendedViewingMode	1	DICOM_2011
+(0028,1101)	xs	RedPaletteColorLookupTableDescriptor	3	DICOM_2011
+(0028,1102)	xs	GreenPaletteColorLookupTableDescriptor	3	DICOM_2011
+(0028,1103)	xs	BluePaletteColorLookupTableDescriptor	3	DICOM_2011
+(0028,1104)	US	AlphaPaletteColorLookupTableDescriptor	3	DICOM_2011
+(0028,1199)	UI	PaletteColorLookupTableUID	1	DICOM_2011
+(0028,1201)	OW	RedPaletteColorLookupTableData	1	DICOM_2011
+(0028,1202)	OW	GreenPaletteColorLookupTableData	1	DICOM_2011
+(0028,1203)	OW	BluePaletteColorLookupTableData	1	DICOM_2011
+(0028,1204)	OW	AlphaPaletteColorLookupTableData	1	DICOM_2011
+(0028,1221)	OW	SegmentedRedPaletteColorLookupTableData	1	DICOM_2011
+(0028,1222)	OW	SegmentedGreenPaletteColorLookupTableData	1	DICOM_2011
+(0028,1223)	OW	SegmentedBluePaletteColorLookupTableData	1	DICOM_2011
+(0028,1300)	CS	BreastImplantPresent	1	DICOM_2011
+(0028,1350)	CS	PartialView	1	DICOM_2011
+(0028,1351)	ST	PartialViewDescription	1	DICOM_2011
+(0028,1352)	SQ	PartialViewCodeSequence	1	DICOM_2011
+(0028,135A)	CS	SpatialLocationsPreserved	1	DICOM_2011
+(0028,1401)	SQ	DataFrameAssignmentSequence	1	DICOM_2011
+(0028,1402)	CS	DataPathAssignment	1	DICOM_2011
+(0028,1403)	US	BitsMappedToColorLookupTable	1	DICOM_2011
+(0028,1404)	SQ	BlendingLUT1Sequence	1	DICOM_2011
+(0028,1405)	CS	BlendingLUT1TransferFunction	1	DICOM_2011
+(0028,1406)	FD	BlendingWeightConstant	1	DICOM_2011
+(0028,1407)	US	BlendingLookupTableDescriptor	3	DICOM_2011
+(0028,1408)	OW	BlendingLookupTableData	1	DICOM_2011
+(0028,140B)	SQ	EnhancedPaletteColorLookupTableSequence	1	DICOM_2011
+(0028,140C)	SQ	BlendingLUT2Sequence	1	DICOM_2011
+(0028,140D)	CS	BlendingLUT2TransferFunction	1	DICOM_2011
+(0028,140E)	CS	DataPathID	1	DICOM_2011
+(0028,140F)	CS	RGBLUTTransferFunction	1	DICOM_2011
+(0028,1410)	CS	AlphaLUTTransferFunction	1	DICOM_2011
+(0028,2000)	OB	ICCProfile	1	DICOM_2011
+(0028,2110)	CS	LossyImageCompression	1	DICOM_2011
+(0028,2112)	DS	LossyImageCompressionRatio	1-n	DICOM_2011
+(0028,2114)	CS	LossyImageCompressionMethod	1-n	DICOM_2011
+(0028,3000)	SQ	ModalityLUTSequence	1	DICOM_2011
+(0028,3002)	xs	LUTDescriptor	3	DICOM_2011
+(0028,3003)	LO	LUTExplanation	1	DICOM_2011
+(0028,3004)	LO	ModalityLUTType	1	DICOM_2011
+(0028,3006)	lt	LUTData	1-n	DICOM_2011
+(0028,3010)	SQ	VOILUTSequence	1	DICOM_2011
+(0028,3110)	SQ	SoftcopyVOILUTSequence	1	DICOM_2011
+(0028,6010)	US	RepresentativeFrameNumber	1	DICOM_2011
+(0028,6020)	US	FrameNumbersOfInterest	1-n	DICOM_2011
+(0028,6022)	LO	FrameOfInterestDescription	1-n	DICOM_2011
+(0028,6023)	CS	FrameOfInterestType	1-n	DICOM_2011
+(0028,6040)	US	RWavePointer	1-n	DICOM_2011
+(0028,6100)	SQ	MaskSubtractionSequence	1	DICOM_2011
+(0028,6101)	CS	MaskOperation	1	DICOM_2011
+(0028,6102)	US	ApplicableFrameRange	2-2n	DICOM_2011
+(0028,6110)	US	MaskFrameNumbers	1-n	DICOM_2011
+(0028,6112)	US	ContrastFrameAveraging	1	DICOM_2011
+(0028,6114)	FL	MaskSubPixelShift	2	DICOM_2011
+(0028,6120)	SS	TIDOffset	1	DICOM_2011
+(0028,6190)	ST	MaskOperationExplanation	1	DICOM_2011
+(0028,7FE0)	UT	PixelDataProviderURL	1	DICOM_2011
+(0028,9001)	UL	DataPointRows	1	DICOM_2011
+(0028,9002)	UL	DataPointColumns	1	DICOM_2011
+(0028,9003)	CS	SignalDomainColumns	1	DICOM_2011
+(0028,9108)	CS	DataRepresentation	1	DICOM_2011
+(0028,9110)	SQ	PixelMeasuresSequence	1	DICOM_2011
+(0028,9132)	SQ	FrameVOILUTSequence	1	DICOM_2011
+(0028,9145)	SQ	PixelValueTransformationSequence	1	DICOM_2011
+(0028,9235)	CS	SignalDomainRows	1	DICOM_2011
+(0028,9411)	FL	DisplayFilterPercentage	1	DICOM_2011
+(0028,9415)	SQ	FramePixelShiftSequence	1	DICOM_2011
+(0028,9416)	US	SubtractionItemID	1	DICOM_2011
+(0028,9422)	SQ	PixelIntensityRelationshipLUTSequence	1	DICOM_2011
+(0028,9443)	SQ	FramePixelDataPropertiesSequence	1	DICOM_2011
+(0028,9444)	CS	GeometricalProperties	1	DICOM_2011
+(0028,9445)	FL	GeometricMaximumDistortion	1	DICOM_2011
+(0028,9446)	CS	ImageProcessingApplied	1-n	DICOM_2011
+(0028,9454)	CS	MaskSelectionMode	1	DICOM_2011
+(0028,9474)	CS	LUTFunction	1	DICOM_2011
+(0028,9478)	FL	MaskVisibilityPercentage	1	DICOM_2011
+(0028,9501)	SQ	PixelShiftSequence	1	DICOM_2011
+(0028,9502)	SQ	RegionPixelShiftSequence	1	DICOM_2011
+(0028,9503)	SS	VerticesOfTheRegion	2-2n	DICOM_2011
+(0028,9505)	SQ	MultiFramePresentationSequence	1	DICOM_2011
+(0028,9506)	US	PixelShiftFrameRange	2-2n	DICOM_2011
+(0028,9507)	US	LUTFrameRange	2-2n	DICOM_2011
+(0028,9520)	DS	ImageToEquipmentMappingMatrix	16	DICOM_2011
+(0028,9537)	CS	EquipmentCoordinateSystemIdentification	1	DICOM_2011
+(0032,1031)	SQ	RequestingPhysicianIdentificationSequence	1	DICOM_2011
+(0032,1032)	PN	RequestingPhysician	1	DICOM_2011
+(0032,1033)	LO	RequestingService	1	DICOM_2011
+(0032,1034)	SQ	RequestingServiceCodeSequence	1	DICOM_2011
+(0032,1060)	LO	RequestedProcedureDescription	1	DICOM_2011
+(0032,1064)	SQ	RequestedProcedureCodeSequence	1	DICOM_2011
+(0032,1070)	LO	RequestedContrastAgent	1	DICOM_2011
+(0038,0004)	SQ	ReferencedPatientAliasSequence	1	DICOM_2011
+(0038,0008)	CS	VisitStatusID	1	DICOM_2011
+(0038,0010)	LO	AdmissionID	1	DICOM_2011
+(0038,0014)	SQ	IssuerOfAdmissionIDSequence	1	DICOM_2011
+(0038,0016)	LO	RouteOfAdmissions	1	DICOM_2011
+(0038,0020)	DA	AdmittingDate	1	DICOM_2011
+(0038,0021)	TM	AdmittingTime	1	DICOM_2011
+(0038,0050)	LO	SpecialNeeds	1	DICOM_2011
+(0038,0060)	LO	ServiceEpisodeID	1	DICOM_2011
+(0038,0062)	LO	ServiceEpisodeDescription	1	DICOM_2011
+(0038,0064)	SQ	IssuerOfServiceEpisodeIDSequence	1	DICOM_2011
+(0038,0100)	SQ	PertinentDocumentsSequence	1	DICOM_2011
+(0038,0300)	LO	CurrentPatientLocation	1	DICOM_2011
+(0038,0400)	LO	PatientInstitutionResidence	1	DICOM_2011
+(0038,0500)	LO	PatientState	1	DICOM_2011
+(0038,0502)	SQ	PatientClinicalTrialParticipationSequence	1	DICOM_2011
+(0038,4000)	LT	VisitComments	1	DICOM_2011
+(003A,0004)	CS	WaveformOriginality	1	DICOM_2011
+(003A,0005)	US	NumberOfWaveformChannels	1	DICOM_2011
+(003A,0010)	UL	NumberOfWaveformSamples	1	DICOM_2011
+(003A,001A)	DS	SamplingFrequency	1	DICOM_2011
+(003A,0020)	SH	MultiplexGroupLabel	1	DICOM_2011
+(003A,0200)	SQ	ChannelDefinitionSequence	1	DICOM_2011
+(003A,0202)	IS	WaveformChannelNumber	1	DICOM_2011
+(003A,0203)	SH	ChannelLabel	1	DICOM_2011
+(003A,0205)	CS	ChannelStatus	1-n	DICOM_2011
+(003A,0208)	SQ	ChannelSourceSequence	1	DICOM_2011
+(003A,0209)	SQ	ChannelSourceModifiersSequence	1	DICOM_2011
+(003A,020A)	SQ	SourceWaveformSequence	1	DICOM_2011
+(003A,020C)	LO	ChannelDerivationDescription	1	DICOM_2011
+(003A,0210)	DS	ChannelSensitivity	1	DICOM_2011
+(003A,0211)	SQ	ChannelSensitivityUnitsSequence	1	DICOM_2011
+(003A,0212)	DS	ChannelSensitivityCorrectionFactor	1	DICOM_2011
+(003A,0213)	DS	ChannelBaseline	1	DICOM_2011
+(003A,0214)	DS	ChannelTimeSkew	1	DICOM_2011
+(003A,0215)	DS	ChannelSampleSkew	1	DICOM_2011
+(003A,0218)	DS	ChannelOffset	1	DICOM_2011
+(003A,021A)	US	WaveformBitsStored	1	DICOM_2011
+(003A,0220)	DS	FilterLowFrequency	1	DICOM_2011
+(003A,0221)	DS	FilterHighFrequency	1	DICOM_2011
+(003A,0222)	DS	NotchFilterFrequency	1	DICOM_2011
+(003A,0223)	DS	NotchFilterBandwidth	1	DICOM_2011
+(003A,0230)	FL	WaveformDataDisplayScale	1	DICOM_2011
+(003A,0231)	US	WaveformDisplayBackgroundCIELabValue	3	DICOM_2011
+(003A,0240)	SQ	WaveformPresentationGroupSequence	1	DICOM_2011
+(003A,0241)	US	PresentationGroupNumber	1	DICOM_2011
+(003A,0242)	SQ	ChannelDisplaySequence	1	DICOM_2011
+(003A,0244)	US	ChannelRecommendedDisplayCIELabValue	3	DICOM_2011
+(003A,0245)	FL	ChannelPosition	1	DICOM_2011
+(003A,0246)	CS	DisplayShadingFlag	1	DICOM_2011
+(003A,0247)	FL	FractionalChannelDisplayScale	1	DICOM_2011
+(003A,0248)	FL	AbsoluteChannelDisplayScale	1	DICOM_2011
+(003A,0300)	SQ	MultiplexedAudioChannelsDescriptionCodeSequence	1	DICOM_2011
+(003A,0301)	IS	ChannelIdentificationCode	1	DICOM_2011
+(003A,0302)	CS	ChannelMode	1	DICOM_2011
+(0040,0001)	AE	ScheduledStationAETitle	1-n	DICOM_2011
+(0040,0002)	DA	ScheduledProcedureStepStartDate	1	DICOM_2011
+(0040,0003)	TM	ScheduledProcedureStepStartTime	1	DICOM_2011
+(0040,0004)	DA	ScheduledProcedureStepEndDate	1	DICOM_2011
+(0040,0005)	TM	ScheduledProcedureStepEndTime	1	DICOM_2011
+(0040,0006)	PN	ScheduledPerformingPhysicianName	1	DICOM_2011
+(0040,0007)	LO	ScheduledProcedureStepDescription	1	DICOM_2011
+(0040,0008)	SQ	ScheduledProtocolCodeSequence	1	DICOM_2011
+(0040,0009)	SH	ScheduledProcedureStepID	1	DICOM_2011
+(0040,000A)	SQ	StageCodeSequence	1	DICOM_2011
+(0040,000B)	SQ	ScheduledPerformingPhysicianIdentificationSequence	1	DICOM_2011
+(0040,0010)	SH	ScheduledStationName	1-n	DICOM_2011
+(0040,0011)	SH	ScheduledProcedureStepLocation	1	DICOM_2011
+(0040,0012)	LO	PreMedication	1	DICOM_2011
+(0040,0020)	CS	ScheduledProcedureStepStatus	1	DICOM_2011
+(0040,0026)	SQ	OrderPlacerIdentifierSequence	1	DICOM_2011
+(0040,0027)	SQ	OrderFillerIdentifierSequence	1	DICOM_2011
+(0040,0031)	UT	LocalNamespaceEntityID	1	DICOM_2011
+(0040,0032)	UT	UniversalEntityID	1	DICOM_2011
+(0040,0033)	CS	UniversalEntityIDType	1	DICOM_2011
+(0040,0035)	CS	IdentifierTypeCode	1	DICOM_2011
+(0040,0036)	SQ	AssigningFacilitySequence	1	DICOM_2011
+(0040,0039)	SQ	AssigningJurisdictionCodeSequence	1	DICOM_2011
+(0040,003A)	SQ	AssigningAgencyOrDepartmentCodeSequence	1	DICOM_2011
+(0040,0100)	SQ	ScheduledProcedureStepSequence	1	DICOM_2011
+(0040,0220)	SQ	ReferencedNonImageCompositeSOPInstanceSequence	1	DICOM_2011
+(0040,0241)	AE	PerformedStationAETitle	1	DICOM_2011
+(0040,0242)	SH	PerformedStationName	1	DICOM_2011
+(0040,0243)	SH	PerformedLocation	1	DICOM_2011
+(0040,0244)	DA	PerformedProcedureStepStartDate	1	DICOM_2011
+(0040,0245)	TM	PerformedProcedureStepStartTime	1	DICOM_2011
+(0040,0250)	DA	PerformedProcedureStepEndDate	1	DICOM_2011
+(0040,0251)	TM	PerformedProcedureStepEndTime	1	DICOM_2011
+(0040,0252)	CS	PerformedProcedureStepStatus	1	DICOM_2011
+(0040,0253)	SH	PerformedProcedureStepID	1	DICOM_2011
+(0040,0254)	LO	PerformedProcedureStepDescription	1	DICOM_2011
+(0040,0255)	LO	PerformedProcedureTypeDescription	1	DICOM_2011
+(0040,0260)	SQ	PerformedProtocolCodeSequence	1	DICOM_2011
+(0040,0261)	CS	PerformedProtocolType	1	DICOM_2011
+(0040,0270)	SQ	ScheduledStepAttributesSequence	1	DICOM_2011
+(0040,0275)	SQ	RequestAttributesSequence	1	DICOM_2011
+(0040,0280)	ST	CommentsOnThePerformedProcedureStep	1	DICOM_2011
+(0040,0281)	SQ	PerformedProcedureStepDiscontinuationReasonCodeSequence	1	DICOM_2011
+(0040,0293)	SQ	QuantitySequence	1	DICOM_2011
+(0040,0294)	DS	Quantity	1	DICOM_2011
+(0040,0295)	SQ	MeasuringUnitsSequence	1	DICOM_2011
+(0040,0296)	SQ	BillingItemSequence	1	DICOM_2011
+(0040,0300)	US	TotalTimeOfFluoroscopy	1	DICOM_2011
+(0040,0301)	US	TotalNumberOfExposures	1	DICOM_2011
+(0040,0302)	US	EntranceDose	1	DICOM_2011
+(0040,0303)	US	ExposedArea	1-2	DICOM_2011
+(0040,0306)	DS	DistanceSourceToEntrance	1	DICOM_2011
+(0040,030E)	SQ	ExposureDoseSequence	1	DICOM_2011
+(0040,0310)	ST	CommentsOnRadiationDose	1	DICOM_2011
+(0040,0312)	DS	XRayOutput	1	DICOM_2011
+(0040,0314)	DS	HalfValueLayer	1	DICOM_2011
+(0040,0316)	DS	OrganDose	1	DICOM_2011
+(0040,0318)	CS	OrganExposed	1	DICOM_2011
+(0040,0320)	SQ	BillingProcedureStepSequence	1	DICOM_2011
+(0040,0321)	SQ	FilmConsumptionSequence	1	DICOM_2011
+(0040,0324)	SQ	BillingSuppliesAndDevicesSequence	1	DICOM_2011
+(0040,0340)	SQ	PerformedSeriesSequence	1	DICOM_2011
+(0040,0400)	LT	CommentsOnTheScheduledProcedureStep	1	DICOM_2011
+(0040,0440)	SQ	ProtocolContextSequence	1	DICOM_2011
+(0040,0441)	SQ	ContentItemModifierSequence	1	DICOM_2011
+(0040,0500)	SQ	ScheduledSpecimenSequence	1	DICOM_2011
+(0040,0512)	LO	ContainerIdentifier	1	DICOM_2011
+(0040,0513)	SQ	IssuerOfTheContainerIdentifierSequence	1	DICOM_2011
+(0040,0515)	SQ	AlternateContainerIdentifierSequence	1	DICOM_2011
+(0040,0518)	SQ	ContainerTypeCodeSequence	1	DICOM_2011
+(0040,051A)	LO	ContainerDescription	1	DICOM_2011
+(0040,0520)	SQ	ContainerComponentSequence	1	DICOM_2011
+(0040,0551)	LO	SpecimenIdentifier	1	DICOM_2011
+(0040,0554)	UI	SpecimenUID	1	DICOM_2011
+(0040,0555)	SQ	AcquisitionContextSequence	1	DICOM_2011
+(0040,0556)	ST	AcquisitionContextDescription	1	DICOM_2011
+(0040,0560)	SQ	SpecimenDescriptionSequence	1	DICOM_2011
+(0040,0562)	SQ	IssuerOfTheSpecimenIdentifierSequence	1	DICOM_2011
+(0040,059A)	SQ	SpecimenTypeCodeSequence	1	DICOM_2011
+(0040,0600)	LO	SpecimenShortDescription	1	DICOM_2011
+(0040,0602)	UT	SpecimenDetailedDescription	1	DICOM_2011
+(0040,0610)	SQ	SpecimenPreparationSequence	1	DICOM_2011
+(0040,0612)	SQ	SpecimenPreparationStepContentItemSequence	1	DICOM_2011
+(0040,0620)	SQ	SpecimenLocalizationContentItemSequence	1	DICOM_2011
+(0040,071A)	SQ	ImageCenterPointCoordinatesSequence	1	DICOM_2011
+(0040,072A)	DS	XOffsetInSlideCoordinateSystem	1	DICOM_2011
+(0040,073A)	DS	YOffsetInSlideCoordinateSystem	1	DICOM_2011
+(0040,074A)	DS	ZOffsetInSlideCoordinateSystem	1	DICOM_2011
+(0040,08EA)	SQ	MeasurementUnitsCodeSequence	1	DICOM_2011
+(0040,1001)	SH	RequestedProcedureID	1	DICOM_2011
+(0040,1002)	LO	ReasonForTheRequestedProcedure	1	DICOM_2011
+(0040,1003)	SH	RequestedProcedurePriority	1	DICOM_2011
+(0040,1004)	LO	PatientTransportArrangements	1	DICOM_2011
+(0040,1005)	LO	RequestedProcedureLocation	1	DICOM_2011
+(0040,1008)	LO	ConfidentialityCode	1	DICOM_2011
+(0040,1009)	SH	ReportingPriority	1	DICOM_2011
+(0040,100A)	SQ	ReasonForRequestedProcedureCodeSequence	1	DICOM_2011
+(0040,1010)	PN	NamesOfIntendedRecipientsOfResults	1-n	DICOM_2011
+(0040,1011)	SQ	IntendedRecipientsOfResultsIdentificationSequence	1	DICOM_2011
+(0040,1012)	SQ	ReasonForPerformedProcedureCodeSequence	1	DICOM_2011
+(0040,1101)	SQ	PersonIdentificationCodeSequence	1	DICOM_2011
+(0040,1102)	ST	PersonAddress	1	DICOM_2011
+(0040,1103)	LO	PersonTelephoneNumbers	1-n	DICOM_2011
+(0040,1400)	LT	RequestedProcedureComments	1	DICOM_2011
+(0040,2004)	DA	IssueDateOfImagingServiceRequest	1	DICOM_2011
+(0040,2005)	TM	IssueTimeOfImagingServiceRequest	1	DICOM_2011
+(0040,2008)	PN	OrderEnteredBy	1	DICOM_2011
+(0040,2009)	SH	OrderEntererLocation	1	DICOM_2011
+(0040,2010)	SH	OrderCallbackPhoneNumber	1	DICOM_2011
+(0040,2016)	LO	PlacerOrderNumberImagingServiceRequest	1	DICOM_2011
+(0040,2017)	LO	FillerOrderNumberImagingServiceRequest	1	DICOM_2011
+(0040,2400)	LT	ImagingServiceRequestComments	1	DICOM_2011
+(0040,3001)	LO	ConfidentialityConstraintOnPatientDataDescription	1	DICOM_2011
+(0040,4001)	CS	GeneralPurposeScheduledProcedureStepStatus	1	DICOM_2011
+(0040,4002)	CS	GeneralPurposePerformedProcedureStepStatus	1	DICOM_2011
+(0040,4003)	CS	GeneralPurposeScheduledProcedureStepPriority	1	DICOM_2011
+(0040,4004)	SQ	ScheduledProcessingApplicationsCodeSequence	1	DICOM_2011
+(0040,4005)	DT	ScheduledProcedureStepStartDateTime	1	DICOM_2011
+(0040,4006)	CS	MultipleCopiesFlag	1	DICOM_2011
+(0040,4007)	SQ	PerformedProcessingApplicationsCodeSequence	1	DICOM_2011
+(0040,4009)	SQ	HumanPerformerCodeSequence	1	DICOM_2011
+(0040,4010)	DT	ScheduledProcedureStepModificationDateTime	1	DICOM_2011
+(0040,4011)	DT	ExpectedCompletionDateTime	1	DICOM_2011
+(0040,4015)	SQ	ResultingGeneralPurposePerformedProcedureStepsSequence	1	DICOM_2011
+(0040,4016)	SQ	ReferencedGeneralPurposeScheduledProcedureStepSequence	1	DICOM_2011
+(0040,4018)	SQ	ScheduledWorkitemCodeSequence	1	DICOM_2011
+(0040,4019)	SQ	PerformedWorkitemCodeSequence	1	DICOM_2011
+(0040,4020)	CS	InputAvailabilityFlag	1	DICOM_2011
+(0040,4021)	SQ	InputInformationSequence	1	DICOM_2011
+(0040,4022)	SQ	RelevantInformationSequence	1	DICOM_2011
+(0040,4023)	UI	ReferencedGeneralPurposeScheduledProcedureStepTransactionUID	1	DICOM_2011
+(0040,4025)	SQ	ScheduledStationNameCodeSequence	1	DICOM_2011
+(0040,4026)	SQ	ScheduledStationClassCodeSequence	1	DICOM_2011
+(0040,4027)	SQ	ScheduledStationGeographicLocationCodeSequence	1	DICOM_2011
+(0040,4028)	SQ	PerformedStationNameCodeSequence	1	DICOM_2011
+(0040,4029)	SQ	PerformedStationClassCodeSequence	1	DICOM_2011
+(0040,4030)	SQ	PerformedStationGeographicLocationCodeSequence	1	DICOM_2011
+(0040,4031)	SQ	RequestedSubsequentWorkitemCodeSequence	1	DICOM_2011
+(0040,4032)	SQ	NonDICOMOutputCodeSequence	1	DICOM_2011
+(0040,4033)	SQ	OutputInformationSequence	1	DICOM_2011
+(0040,4034)	SQ	ScheduledHumanPerformersSequence	1	DICOM_2011
+(0040,4035)	SQ	ActualHumanPerformersSequence	1	DICOM_2011
+(0040,4036)	LO	HumanPerformerOrganization	1	DICOM_2011
+(0040,4037)	PN	HumanPerformerName	1	DICOM_2011
+(0040,4040)	CS	RawDataHandling	1	DICOM_2011
+(0040,4041)	CS	InputReadinessState	1	DICOM_2011
+(0040,4050)	DT	PerformedProcedureStepStartDateTime	1	DICOM_2011
+(0040,4051)	DT	PerformedProcedureStepEndDateTime	1	DICOM_2011
+(0040,4052)	DT	ProcedureStepCancellationDateTime	1	DICOM_2011
+(0040,8302)	DS	EntranceDoseInmGy	1	DICOM_2011
+(0040,9094)	SQ	ReferencedImageRealWorldValueMappingSequence	1	DICOM_2011
+(0040,9096)	SQ	RealWorldValueMappingSequence	1	DICOM_2011
+(0040,9098)	SQ	PixelValueMappingCodeSequence	1	DICOM_2011
+(0040,9210)	SH	LUTLabel	1	DICOM_2011
+(0040,9211)	xs	RealWorldValueLastValueMapped	1	DICOM_2011
+(0040,9212)	FD	RealWorldValueLUTData	1-n	DICOM_2011
+(0040,9216)	xs	RealWorldValueFirstValueMapped	1	DICOM_2011
+(0040,9224)	FD	RealWorldValueIntercept	1	DICOM_2011
+(0040,9225)	FD	RealWorldValueSlope	1	DICOM_2011
+(0040,A010)	CS	RelationshipType	1	DICOM_2011
+(0040,A027)	LO	VerifyingOrganization	1	DICOM_2011
+(0040,A030)	DT	VerificationDateTime	1	DICOM_2011
+(0040,A032)	DT	ObservationDateTime	1	DICOM_2011
+(0040,A040)	CS	ValueType	1	DICOM_2011
+(0040,A043)	SQ	ConceptNameCodeSequence	1	DICOM_2011
+(0040,A050)	CS	ContinuityOfContent	1	DICOM_2011
+(0040,A073)	SQ	VerifyingObserverSequence	1	DICOM_2011
+(0040,A075)	PN	VerifyingObserverName	1	DICOM_2011
+(0040,A078)	SQ	AuthorObserverSequence	1	DICOM_2011
+(0040,A07A)	SQ	ParticipantSequence	1	DICOM_2011
+(0040,A07C)	SQ	CustodialOrganizationSequence	1	DICOM_2011
+(0040,A080)	CS	ParticipationType	1	DICOM_2011
+(0040,A082)	DT	ParticipationDateTime	1	DICOM_2011
+(0040,A084)	CS	ObserverType	1	DICOM_2011
+(0040,A088)	SQ	VerifyingObserverIdentificationCodeSequence	1	DICOM_2011
+(0040,A0B0)	US	ReferencedWaveformChannels	2-2n	DICOM_2011
+(0040,A120)	DT	DateTime	1	DICOM_2011
+(0040,A121)	DA	Date	1	DICOM_2011
+(0040,A122)	TM	Time	1	DICOM_2011
+(0040,A123)	PN	PersonName	1	DICOM_2011
+(0040,A124)	UI	UID	1	DICOM_2011
+(0040,A130)	CS	TemporalRangeType	1	DICOM_2011
+(0040,A132)	UL	ReferencedSamplePositions	1-n	DICOM_2011
+(0040,A136)	US	ReferencedFrameNumbers	1-n	DICOM_2011
+(0040,A138)	DS	ReferencedTimeOffsets	1-n	DICOM_2011
+(0040,A13A)	DT	ReferencedDateTime	1-n	DICOM_2011
+(0040,A160)	UT	TextValue	1	DICOM_2011
+(0040,A168)	SQ	ConceptCodeSequence	1	DICOM_2011
+(0040,A170)	SQ	PurposeOfReferenceCodeSequence	1	DICOM_2011
+(0040,A180)	US	AnnotationGroupNumber	1	DICOM_2011
+(0040,A195)	SQ	ModifierCodeSequence	1	DICOM_2011
+(0040,A300)	SQ	MeasuredValueSequence	1	DICOM_2011
+(0040,A301)	SQ	NumericValueQualifierCodeSequence	1	DICOM_2011
+(0040,A30A)	DS	NumericValue	1-n	DICOM_2011
+(0040,A360)	SQ	PredecessorDocumentsSequence	1	DICOM_2011
+(0040,A370)	SQ	ReferencedRequestSequence	1	DICOM_2011
+(0040,A372)	SQ	PerformedProcedureCodeSequence	1	DICOM_2011
+(0040,A375)	SQ	CurrentRequestedProcedureEvidenceSequence	1	DICOM_2011
+(0040,A385)	SQ	PertinentOtherEvidenceSequence	1	DICOM_2011
+(0040,A390)	SQ	HL7StructuredDocumentReferenceSequence	1	DICOM_2011
+(0040,A491)	CS	CompletionFlag	1	DICOM_2011
+(0040,A492)	LO	CompletionFlagDescription	1	DICOM_2011
+(0040,A493)	CS	VerificationFlag	1	DICOM_2011
+(0040,A494)	CS	ArchiveRequested	1	DICOM_2011
+(0040,A496)	CS	PreliminaryFlag	1	DICOM_2011
+(0040,A504)	SQ	ContentTemplateSequence	1	DICOM_2011
+(0040,A525)	SQ	IdenticalDocumentsSequence	1	DICOM_2011
+(0040,A730)	SQ	ContentSequence	1	DICOM_2011
+(0040,B020)	SQ	WaveformAnnotationSequence	1	DICOM_2011
+(0040,DB00)	CS	TemplateIdentifier	1	DICOM_2011
+(0040,DB73)	UL	ReferencedContentItemIdentifier	1-n	DICOM_2011
+(0040,E001)	ST	HL7InstanceIdentifier	1	DICOM_2011
+(0040,E004)	DT	HL7DocumentEffectiveTime	1	DICOM_2011
+(0040,E006)	SQ	HL7DocumentTypeCodeSequence	1	DICOM_2011
+(0040,E008)	SQ	DocumentClassCodeSequence	1	DICOM_2011
+(0040,E010)	UT	RetrieveURI	1	DICOM_2011
+(0040,E011)	UI	RetrieveLocationUID	1	DICOM_2011
+(0040,E020)	CS	TypeOfInstances	1	DICOM_2011
+(0040,E021)	SQ	DICOMRetrievalSequence	1	DICOM_2011
+(0040,E022)	SQ	DICOMMediaRetrievalSequence	1	DICOM_2011
+(0040,E023)	SQ	WADORetrievalSequence	1	DICOM_2011
+(0040,E024)	SQ	XDSRetrievalSequence	1	DICOM_2011
+(0040,E030)	UI	RepositoryUniqueID	1	DICOM_2011
+(0040,E031)	UI	HomeCommunityID	1	DICOM_2011
+(0042,0010)	ST	DocumentTitle	1	DICOM_2011
+(0042,0011)	OB	EncapsulatedDocument	1	DICOM_2011
+(0042,0012)	LO	MIMETypeOfEncapsulatedDocument	1	DICOM_2011
+(0042,0013)	SQ	SourceInstanceSequence	1	DICOM_2011
+(0042,0014)	LO	ListOfMIMETypes	1-n	DICOM_2011
+(0044,0001)	ST	ProductPackageIdentifier	1	DICOM_2011
+(0044,0002)	CS	SubstanceAdministrationApproval	1	DICOM_2011
+(0044,0003)	LT	ApprovalStatusFurtherDescription	1	DICOM_2011
+(0044,0004)	DT	ApprovalStatusDateTime	1	DICOM_2011
+(0044,0007)	SQ	ProductTypeCodeSequence	1	DICOM_2011
+(0044,0008)	LO	ProductName	1-n	DICOM_2011
+(0044,0009)	LT	ProductDescription	1	DICOM_2011
+(0044,000A)	LO	ProductLotIdentifier	1	DICOM_2011
+(0044,000B)	DT	ProductExpirationDateTime	1	DICOM_2011
+(0044,0010)	DT	SubstanceAdministrationDateTime	1	DICOM_2011
+(0044,0011)	LO	SubstanceAdministrationNotes	1	DICOM_2011
+(0044,0012)	LO	SubstanceAdministrationDeviceID	1	DICOM_2011
+(0044,0013)	SQ	ProductParameterSequence	1	DICOM_2011
+(0044,0019)	SQ	SubstanceAdministrationParameterSequence	1	DICOM_2011
+(0046,0012)	LO	LensDescription	1	DICOM_2011
+(0046,0014)	SQ	RightLensSequence	1	DICOM_2011
+(0046,0015)	SQ	LeftLensSequence	1	DICOM_2011
+(0046,0016)	SQ	UnspecifiedLateralityLensSequence	1	DICOM_2011
+(0046,0018)	SQ	CylinderSequence	1	DICOM_2011
+(0046,0028)	SQ	PrismSequence	1	DICOM_2011
+(0046,0030)	FD	HorizontalPrismPower	1	DICOM_2011
+(0046,0032)	CS	HorizontalPrismBase	1	DICOM_2011
+(0046,0034)	FD	VerticalPrismPower	1	DICOM_2011
+(0046,0036)	CS	VerticalPrismBase	1	DICOM_2011
+(0046,0038)	CS	LensSegmentType	1	DICOM_2011
+(0046,0040)	FD	OpticalTransmittance	1	DICOM_2011
+(0046,0042)	FD	ChannelWidth	1	DICOM_2011
+(0046,0044)	FD	PupilSize	1	DICOM_2011
+(0046,0046)	FD	CornealSize	1	DICOM_2011
+(0046,0050)	SQ	AutorefractionRightEyeSequence	1	DICOM_2011
+(0046,0052)	SQ	AutorefractionLeftEyeSequence	1	DICOM_2011
+(0046,0060)	FD	DistancePupillaryDistance	1	DICOM_2011
+(0046,0062)	FD	NearPupillaryDistance	1	DICOM_2011
+(0046,0063)	FD	IntermediatePupillaryDistance	1	DICOM_2011
+(0046,0064)	FD	OtherPupillaryDistance	1	DICOM_2011
+(0046,0070)	SQ	KeratometryRightEyeSequence	1	DICOM_2011
+(0046,0071)	SQ	KeratometryLeftEyeSequence	1	DICOM_2011
+(0046,0074)	SQ	SteepKeratometricAxisSequence	1	DICOM_2011
+(0046,0075)	FD	RadiusOfCurvature	1	DICOM_2011
+(0046,0076)	FD	KeratometricPower	1	DICOM_2011
+(0046,0077)	FD	KeratometricAxis	1	DICOM_2011
+(0046,0080)	SQ	FlatKeratometricAxisSequence	1	DICOM_2011
+(0046,0092)	CS	BackgroundColor	1	DICOM_2011
+(0046,0094)	CS	Optotype	1	DICOM_2011
+(0046,0095)	CS	OptotypePresentation	1	DICOM_2011
+(0046,0097)	SQ	SubjectiveRefractionRightEyeSequence	1	DICOM_2011
+(0046,0098)	SQ	SubjectiveRefractionLeftEyeSequence	1	DICOM_2011
+(0046,0100)	SQ	AddNearSequence	1	DICOM_2011
+(0046,0101)	SQ	AddIntermediateSequence	1	DICOM_2011
+(0046,0102)	SQ	AddOtherSequence	1	DICOM_2011
+(0046,0104)	FD	AddPower	1	DICOM_2011
+(0046,0106)	FD	ViewingDistance	1	DICOM_2011
+(0046,0121)	SQ	VisualAcuityTypeCodeSequence	1	DICOM_2011
+(0046,0122)	SQ	VisualAcuityRightEyeSequence	1	DICOM_2011
+(0046,0123)	SQ	VisualAcuityLeftEyeSequence	1	DICOM_2011
+(0046,0124)	SQ	VisualAcuityBothEyesOpenSequence	1	DICOM_2011
+(0046,0125)	CS	ViewingDistanceType	1	DICOM_2011
+(0046,0135)	SS	VisualAcuityModifiers	2	DICOM_2011
+(0046,0137)	FD	DecimalVisualAcuity	1	DICOM_2011
+(0046,0139)	LO	OptotypeDetailedDefinition	1	DICOM_2011
+(0046,0145)	SQ	ReferencedRefractiveMeasurementsSequence	1	DICOM_2011
+(0046,0146)	FD	SpherePower	1	DICOM_2011
+(0046,0147)	FD	CylinderPower	1	DICOM_2011
+(0048,0001)	FL	ImagedVolumeWidth	1	DICOM_2011
+(0048,0002)	FL	ImagedVolumeHeight	1	DICOM_2011
+(0048,0003)	FL	ImagedVolumeDepth	1	DICOM_2011
+(0048,0006)	UL	TotalPixelMatrixColumns	1	DICOM_2011
+(0048,0007)	UL	TotalPixelMatrixRows	1	DICOM_2011
+(0048,0008)	SQ	TotalPixelMatrixOriginSequence	1	DICOM_2011
+(0048,0010)	CS	SpecimenLabelInImage	1	DICOM_2011
+(0048,0011)	CS	FocusMethod	1	DICOM_2011
+(0048,0012)	CS	ExtendedDepthOfField	1	DICOM_2011
+(0048,0013)	US	NumberOfFocalPlanes	1	DICOM_2011
+(0048,0014)	FL	DistanceBetweenFocalPlanes	1	DICOM_2011
+(0048,0015)	US	RecommendedAbsentPixelCIELabValue	3	DICOM_2011
+(0048,0100)	SQ	IlluminatorTypeCodeSequence	1	DICOM_2011
+(0048,0102)	DS	ImageOrientationSlide	6	DICOM_2011
+(0048,0105)	SQ	OpticalPathSequence	1	DICOM_2011
+(0048,0106)	SH	OpticalPathIdentifier	1	DICOM_2011
+(0048,0107)	ST	OpticalPathDescription	1	DICOM_2011
+(0048,0108)	SQ	IlluminationColorCodeSequence	1	DICOM_2011
+(0048,0110)	SQ	SpecimenReferenceSequence	1	DICOM_2011
+(0048,0111)	DS	CondenserLensPower	1	DICOM_2011
+(0048,0112)	DS	ObjectiveLensPower	1	DICOM_2011
+(0048,0113)	DS	ObjectiveLensNumericalAperture	1	DICOM_2011
+(0048,0120)	SQ	PaletteColorLookupTableSequence	1	DICOM_2011
+(0048,0200)	SQ	ReferencedImageNavigationSequence	1	DICOM_2011
+(0048,0201)	US	TopLeftHandCornerOfLocalizerArea	2	DICOM_2011
+(0048,0202)	US	BottomRightHandCornerOfLocalizerArea	2	DICOM_2011
+(0048,0207)	SQ	OpticalPathIdentificationSequence	1	DICOM_2011
+(0048,021A)	SQ	PlanePositionSlideSequence	1	DICOM_2011
+(0048,021E)	SL	ColumnPositionInTotalImagePixelMatrix	1	DICOM_2011
+(0048,021F)	SL	RowPositionInTotalImagePixelMatrix	1	DICOM_2011
+(0048,0301)	CS	PixelOriginInterpretation	1	DICOM_2011
+(0050,0004)	CS	CalibrationImage	1	DICOM_2011
+(0050,0010)	SQ	DeviceSequence	1	DICOM_2011
+(0050,0012)	SQ	ContainerComponentTypeCodeSequence	1	DICOM_2011
+(0050,0013)	FD	ContainerComponentThickness	1	DICOM_2011
+(0050,0014)	DS	DeviceLength	1	DICOM_2011
+(0050,0015)	FD	ContainerComponentWidth	1	DICOM_2011
+(0050,0016)	DS	DeviceDiameter	1	DICOM_2011
+(0050,0017)	CS	DeviceDiameterUnits	1	DICOM_2011
+(0050,0018)	DS	DeviceVolume	1	DICOM_2011
+(0050,0019)	DS	InterMarkerDistance	1	DICOM_2011
+(0050,001A)	CS	ContainerComponentMaterial	1	DICOM_2011
+(0050,001B)	LO	ContainerComponentID	1	DICOM_2011
+(0050,001C)	FD	ContainerComponentLength	1	DICOM_2011
+(0050,001D)	FD	ContainerComponentDiameter	1	DICOM_2011
+(0050,001E)	LO	ContainerComponentDescription	1	DICOM_2011
+(0050,0020)	LO	DeviceDescription	1	DICOM_2011
+(0052,0001)	FL	ContrastBolusIngredientPercentByVolume	1	DICOM_2011
+(0052,0002)	FD	OCTFocalDistance	1	DICOM_2011
+(0052,0003)	FD	BeamSpotSize	1	DICOM_2011
+(0052,0004)	FD	EffectiveRefractiveIndex	1	DICOM_2011
+(0052,0006)	CS	OCTAcquisitionDomain	1	DICOM_2011
+(0052,0007)	FD	OCTOpticalCenterWavelength	1	DICOM_2011
+(0052,0008)	FD	AxialResolution	1	DICOM_2011
+(0052,0009)	FD	RangingDepth	1	DICOM_2011
+(0052,0011)	FD	ALineRate	1	DICOM_2011
+(0052,0012)	US	ALinesPerFrame	1	DICOM_2011
+(0052,0013)	FD	CatheterRotationalRate	1	DICOM_2011
+(0052,0014)	FD	ALinePixelSpacing	1	DICOM_2011
+(0052,0016)	SQ	ModeOfPercutaneousAccessSequence	1	DICOM_2011
+(0052,0025)	SQ	IntravascularOCTFrameTypeSequence	1	DICOM_2011
+(0052,0026)	CS	OCTZOffsetApplied	1	DICOM_2011
+(0052,0027)	SQ	IntravascularFrameContentSequence	1	DICOM_2011
+(0052,0028)	FD	IntravascularLongitudinalDistance	1	DICOM_2011
+(0052,0029)	SQ	IntravascularOCTFrameContentSequence	1	DICOM_2011
+(0052,0030)	SS	OCTZOffsetCorrection	1	DICOM_2011
+(0052,0031)	CS	CatheterDirectionOfRotation	1	DICOM_2011
+(0052,0033)	FD	SeamLineLocation	1	DICOM_2011
+(0052,0034)	FD	FirstALineLocation	1	DICOM_2011
+(0052,0036)	US	SeamLineIndex	1	DICOM_2011
+(0052,0038)	US	NumberOfPaddedAlines	1	DICOM_2011
+(0052,0039)	CS	InterpolationType	1	DICOM_2011
+(0052,003A)	CS	RefractiveIndexApplied	1	DICOM_2011
+(0054,0010)	US	EnergyWindowVector	1-n	DICOM_2011
+(0054,0011)	US	NumberOfEnergyWindows	1	DICOM_2011
+(0054,0012)	SQ	EnergyWindowInformationSequence	1	DICOM_2011
+(0054,0013)	SQ	EnergyWindowRangeSequence	1	DICOM_2011
+(0054,0014)	DS	EnergyWindowLowerLimit	1	DICOM_2011
+(0054,0015)	DS	EnergyWindowUpperLimit	1	DICOM_2011
+(0054,0016)	SQ	RadiopharmaceuticalInformationSequence	1	DICOM_2011
+(0054,0017)	IS	ResidualSyringeCounts	1	DICOM_2011
+(0054,0018)	SH	EnergyWindowName	1	DICOM_2011
+(0054,0020)	US	DetectorVector	1-n	DICOM_2011
+(0054,0021)	US	NumberOfDetectors	1	DICOM_2011
+(0054,0022)	SQ	DetectorInformationSequence	1	DICOM_2011
+(0054,0030)	US	PhaseVector	1-n	DICOM_2011
+(0054,0031)	US	NumberOfPhases	1	DICOM_2011
+(0054,0032)	SQ	PhaseInformationSequence	1	DICOM_2011
+(0054,0033)	US	NumberOfFramesInPhase	1	DICOM_2011
+(0054,0036)	IS	PhaseDelay	1	DICOM_2011
+(0054,0038)	IS	PauseBetweenFrames	1	DICOM_2011
+(0054,0039)	CS	PhaseDescription	1	DICOM_2011
+(0054,0050)	US	RotationVector	1-n	DICOM_2011
+(0054,0051)	US	NumberOfRotations	1	DICOM_2011
+(0054,0052)	SQ	RotationInformationSequence	1	DICOM_2011
+(0054,0053)	US	NumberOfFramesInRotation	1	DICOM_2011
+(0054,0060)	US	RRIntervalVector	1-n	DICOM_2011
+(0054,0061)	US	NumberOfRRIntervals	1	DICOM_2011
+(0054,0062)	SQ	GatedInformationSequence	1	DICOM_2011
+(0054,0063)	SQ	DataInformationSequence	1	DICOM_2011
+(0054,0070)	US	TimeSlotVector	1-n	DICOM_2011
+(0054,0071)	US	NumberOfTimeSlots	1	DICOM_2011
+(0054,0072)	SQ	TimeSlotInformationSequence	1	DICOM_2011
+(0054,0073)	DS	TimeSlotTime	1	DICOM_2011
+(0054,0080)	US	SliceVector	1-n	DICOM_2011
+(0054,0081)	US	NumberOfSlices	1	DICOM_2011
+(0054,0090)	US	AngularViewVector	1-n	DICOM_2011
+(0054,0100)	US	TimeSliceVector	1-n	DICOM_2011
+(0054,0101)	US	NumberOfTimeSlices	1	DICOM_2011
+(0054,0200)	DS	StartAngle	1	DICOM_2011
+(0054,0202)	CS	TypeOfDetectorMotion	1	DICOM_2011
+(0054,0210)	IS	TriggerVector	1-n	DICOM_2011
+(0054,0211)	US	NumberOfTriggersInPhase	1	DICOM_2011
+(0054,0220)	SQ	ViewCodeSequence	1	DICOM_2011
+(0054,0222)	SQ	ViewModifierCodeSequence	1	DICOM_2011
+(0054,0300)	SQ	RadionuclideCodeSequence	1	DICOM_2011
+(0054,0302)	SQ	AdministrationRouteCodeSequence	1	DICOM_2011
+(0054,0304)	SQ	RadiopharmaceuticalCodeSequence	1	DICOM_2011
+(0054,0306)	SQ	CalibrationDataSequence	1	DICOM_2011
+(0054,0308)	US	EnergyWindowNumber	1	DICOM_2011
+(0054,0400)	SH	ImageID	1	DICOM_2011
+(0054,0410)	SQ	PatientOrientationCodeSequence	1	DICOM_2011
+(0054,0412)	SQ	PatientOrientationModifierCodeSequence	1	DICOM_2011
+(0054,0414)	SQ	PatientGantryRelationshipCodeSequence	1	DICOM_2011
+(0054,0500)	CS	SliceProgressionDirection	1	DICOM_2011
+(0054,1000)	CS	SeriesType	2	DICOM_2011
+(0054,1001)	CS	Units	1	DICOM_2011
+(0054,1002)	CS	CountsSource	1	DICOM_2011
+(0054,1004)	CS	ReprojectionMethod	1	DICOM_2011
+(0054,1006)	CS	SUVType	1	DICOM_2011
+(0054,1100)	CS	RandomsCorrectionMethod	1	DICOM_2011
+(0054,1101)	LO	AttenuationCorrectionMethod	1	DICOM_2011
+(0054,1102)	CS	DecayCorrection	1	DICOM_2011
+(0054,1103)	LO	ReconstructionMethod	1	DICOM_2011
+(0054,1104)	LO	DetectorLinesOfResponseUsed	1	DICOM_2011
+(0054,1105)	LO	ScatterCorrectionMethod	1	DICOM_2011
+(0054,1200)	DS	AxialAcceptance	1	DICOM_2011
+(0054,1201)	IS	AxialMash	2	DICOM_2011
+(0054,1202)	IS	TransverseMash	1	DICOM_2011
+(0054,1203)	DS	DetectorElementSize	2	DICOM_2011
+(0054,1210)	DS	CoincidenceWindowWidth	1	DICOM_2011
+(0054,1220)	CS	SecondaryCountsType	1-n	DICOM_2011
+(0054,1300)	DS	FrameReferenceTime	1	DICOM_2011
+(0054,1310)	IS	PrimaryPromptsCountsAccumulated	1	DICOM_2011
+(0054,1311)	IS	SecondaryCountsAccumulated	1-n	DICOM_2011
+(0054,1320)	DS	SliceSensitivityFactor	1	DICOM_2011
+(0054,1321)	DS	DecayFactor	1	DICOM_2011
+(0054,1322)	DS	DoseCalibrationFactor	1	DICOM_2011
+(0054,1323)	DS	ScatterFractionFactor	1	DICOM_2011
+(0054,1324)	DS	DeadTimeFactor	1	DICOM_2011
+(0054,1330)	US	ImageIndex	1	DICOM_2011
+(0060,3000)	SQ	HistogramSequence	1	DICOM_2011
+(0060,3002)	US	HistogramNumberOfBins	1	DICOM_2011
+(0060,3004)	xs	HistogramFirstBinValue	1	DICOM_2011
+(0060,3006)	xs	HistogramLastBinValue	1	DICOM_2011
+(0060,3008)	US	HistogramBinWidth	1	DICOM_2011
+(0060,3010)	LO	HistogramExplanation	1	DICOM_2011
+(0060,3020)	UL	HistogramData	1-n	DICOM_2011
+(0062,0001)	CS	SegmentationType	1	DICOM_2011
+(0062,0002)	SQ	SegmentSequence	1	DICOM_2011
+(0062,0003)	SQ	SegmentedPropertyCategoryCodeSequence	1	DICOM_2011
+(0062,0004)	US	SegmentNumber	1	DICOM_2011
+(0062,0005)	LO	SegmentLabel	1	DICOM_2011
+(0062,0006)	ST	SegmentDescription	1	DICOM_2011
+(0062,0008)	CS	SegmentAlgorithmType	1	DICOM_2011
+(0062,0009)	LO	SegmentAlgorithmName	1	DICOM_2011
+(0062,000A)	SQ	SegmentIdentificationSequence	1	DICOM_2011
+(0062,000B)	US	ReferencedSegmentNumber	1-n	DICOM_2011
+(0062,000C)	US	RecommendedDisplayGrayscaleValue	1	DICOM_2011
+(0062,000D)	US	RecommendedDisplayCIELabValue	3	DICOM_2011
+(0062,000E)	US	MaximumFractionalValue	1	DICOM_2011
+(0062,000F)	SQ	SegmentedPropertyTypeCodeSequence	1	DICOM_2011
+(0062,0010)	CS	SegmentationFractionalType	1	DICOM_2011
+(0064,0002)	SQ	DeformableRegistrationSequence	1	DICOM_2011
+(0064,0003)	UI	SourceFrameOfReferenceUID	1	DICOM_2011
+(0064,0005)	SQ	DeformableRegistrationGridSequence	1	DICOM_2011
+(0064,0007)	UL	GridDimensions	3	DICOM_2011
+(0064,0008)	FD	GridResolution	3	DICOM_2011
+(0064,0009)	OF	VectorGridData	1	DICOM_2011
+(0064,000F)	SQ	PreDeformationMatrixRegistrationSequence	1	DICOM_2011
+(0064,0010)	SQ	PostDeformationMatrixRegistrationSequence	1	DICOM_2011
+(0066,0001)	UL	NumberOfSurfaces	1	DICOM_2011
+(0066,0002)	SQ	SurfaceSequence	1	DICOM_2011
+(0066,0003)	UL	SurfaceNumber	1	DICOM_2011
+(0066,0004)	LT	SurfaceComments	1	DICOM_2011
+(0066,0009)	CS	SurfaceProcessing	1	DICOM_2011
+(0066,000A)	FL	SurfaceProcessingRatio	1	DICOM_2011
+(0066,000B)	LO	SurfaceProcessingDescription	1	DICOM_2011
+(0066,000C)	FL	RecommendedPresentationOpacity	1	DICOM_2011
+(0066,000D)	CS	RecommendedPresentationType	1	DICOM_2011
+(0066,000E)	CS	FiniteVolume	1	DICOM_2011
+(0066,0010)	CS	Manifold	1	DICOM_2011
+(0066,0011)	SQ	SurfacePointsSequence	1	DICOM_2011
+(0066,0012)	SQ	SurfacePointsNormalsSequence	1	DICOM_2011
+(0066,0013)	SQ	SurfaceMeshPrimitivesSequence	1	DICOM_2011
+(0066,0015)	UL	NumberOfSurfacePoints	1	DICOM_2011
+(0066,0016)	OF	PointCoordinatesData	1	DICOM_2011
+(0066,0017)	FL	PointPositionAccuracy	3	DICOM_2011
+(0066,0018)	FL	MeanPointDistance	1	DICOM_2011
+(0066,0019)	FL	MaximumPointDistance	1	DICOM_2011
+(0066,001A)	FL	PointsBoundingBoxCoordinates	6	DICOM_2011
+(0066,001B)	FL	AxisOfRotation	3	DICOM_2011
+(0066,001C)	FL	CenterOfRotation	3	DICOM_2011
+(0066,001E)	UL	NumberOfVectors	1	DICOM_2011
+(0066,001F)	US	VectorDimensionality	1	DICOM_2011
+(0066,0020)	FL	VectorAccuracy	1-n	DICOM_2011
+(0066,0021)	OF	VectorCoordinateData	1	DICOM_2011
+(0066,0023)	OW	TrianglePointIndexList	1	DICOM_2011
+(0066,0024)	OW	EdgePointIndexList	1	DICOM_2011
+(0066,0025)	OW	VertexPointIndexList	1	DICOM_2011
+(0066,0026)	SQ	TriangleStripSequence	1	DICOM_2011
+(0066,0027)	SQ	TriangleFanSequence	1	DICOM_2011
+(0066,0028)	SQ	LineSequence	1	DICOM_2011
+(0066,0029)	OW	PrimitivePointIndexList	1	DICOM_2011
+(0066,002A)	UL	SurfaceCount	1	DICOM_2011
+(0066,002B)	SQ	ReferencedSurfaceSequence	1	DICOM_2011
+(0066,002C)	UL	ReferencedSurfaceNumber	1	DICOM_2011
+(0066,002D)	SQ	SegmentSurfaceGenerationAlgorithmIdentificationSequence	1	DICOM_2011
+(0066,002E)	SQ	SegmentSurfaceSourceInstanceSequence	1	DICOM_2011
+(0066,002F)	SQ	AlgorithmFamilyCodeSequence	1	DICOM_2011
+(0066,0030)	SQ	AlgorithmNameCodeSequence	1	DICOM_2011
+(0066,0031)	LO	AlgorithmVersion	1	DICOM_2011
+(0066,0032)	LT	AlgorithmParameters	1	DICOM_2011
+(0066,0034)	SQ	FacetSequence	1	DICOM_2011
+(0066,0035)	SQ	SurfaceProcessingAlgorithmIdentificationSequence	1	DICOM_2011
+(0066,0036)	LO	AlgorithmName	1	DICOM_2011
+(0068,6210)	LO	ImplantSize	1	DICOM_2011
+(0068,6221)	LO	ImplantTemplateVersion	1	DICOM_2011
+(0068,6222)	SQ	ReplacedImplantTemplateSequence	1	DICOM_2011
+(0068,6223)	CS	ImplantType	1	DICOM_2011
+(0068,6224)	SQ	DerivationImplantTemplateSequence	1	DICOM_2011
+(0068,6225)	SQ	OriginalImplantTemplateSequence	1	DICOM_2011
+(0068,6226)	DT	EffectiveDateTime	1	DICOM_2011
+(0068,6230)	SQ	ImplantTargetAnatomySequence	1	DICOM_2011
+(0068,6260)	SQ	InformationFromManufacturerSequence	1	DICOM_2011
+(0068,6265)	SQ	NotificationFromManufacturerSequence	1	DICOM_2011
+(0068,6270)	DT	InformationIssueDateTime	1	DICOM_2011
+(0068,6280)	ST	InformationSummary	1	DICOM_2011
+(0068,62A0)	SQ	ImplantRegulatoryDisapprovalCodeSequence	1	DICOM_2011
+(0068,62A5)	FD	OverallTemplateSpatialTolerance	1	DICOM_2011
+(0068,62C0)	SQ	HPGLDocumentSequence	1	DICOM_2011
+(0068,62D0)	US	HPGLDocumentID	1	DICOM_2011
+(0068,62D5)	LO	HPGLDocumentLabel	1	DICOM_2011
+(0068,62E0)	SQ	ViewOrientationCodeSequence	1	DICOM_2011
+(0068,62F0)	FD	ViewOrientationModifier	9	DICOM_2011
+(0068,62F2)	FD	HPGLDocumentScaling	1	DICOM_2011
+(0068,6300)	OB	HPGLDocument	1	DICOM_2011
+(0068,6310)	US	HPGLContourPenNumber	1	DICOM_2011
+(0068,6320)	SQ	HPGLPenSequence	1	DICOM_2011
+(0068,6330)	US	HPGLPenNumber	1	DICOM_2011
+(0068,6340)	LO	HPGLPenLabel	1	DICOM_2011
+(0068,6345)	ST	HPGLPenDescription	1	DICOM_2011
+(0068,6346)	FD	RecommendedRotationPoint	2	DICOM_2011
+(0068,6347)	FD	BoundingRectangle	4	DICOM_2011
+(0068,6350)	US	ImplantTemplate3DModelSurfaceNumber	1-n	DICOM_2011
+(0068,6360)	SQ	SurfaceModelDescriptionSequence	1	DICOM_2011
+(0068,6380)	LO	SurfaceModelLabel	1	DICOM_2011
+(0068,6390)	FD	SurfaceModelScalingFactor	1	DICOM_2011
+(0068,63A0)	SQ	MaterialsCodeSequence	1	DICOM_2011
+(0068,63A4)	SQ	CoatingMaterialsCodeSequence	1	DICOM_2011
+(0068,63A8)	SQ	ImplantTypeCodeSequence	1	DICOM_2011
+(0068,63AC)	SQ	FixationMethodCodeSequence	1	DICOM_2011
+(0068,63B0)	SQ	MatingFeatureSetsSequence	1	DICOM_2011
+(0068,63C0)	US	MatingFeatureSetID	1	DICOM_2011
+(0068,63D0)	LO	MatingFeatureSetLabel	1	DICOM_2011
+(0068,63E0)	SQ	MatingFeatureSequence	1	DICOM_2011
+(0068,63F0)	US	MatingFeatureID	1	DICOM_2011
+(0068,6400)	SQ	MatingFeatureDegreeOfFreedomSequence	1	DICOM_2011
+(0068,6410)	US	DegreeOfFreedomID	1	DICOM_2011
+(0068,6420)	CS	DegreeOfFreedomType	1	DICOM_2011
+(0068,6430)	SQ	TwoDMatingFeatureCoordinatesSequence	1	DICOM_2011
+(0068,6440)	US	ReferencedHPGLDocumentID	1	DICOM_2011
+(0068,6450)	FD	TwoDMatingPoint	2	DICOM_2011
+(0068,6460)	FD	TwoDMatingAxes	4	DICOM_2011
+(0068,6470)	SQ	TwoDDegreeOfFreedomSequence	1	DICOM_2011
+(0068,6490)	FD	ThreeDDegreeOfFreedomAxis	3	DICOM_2011
+(0068,64A0)	FD	RangeOfFreedom	2	DICOM_2011
+(0068,64C0)	FD	ThreeDMatingPoint	3	DICOM_2011
+(0068,64D0)	FD	ThreeDMatingAxes	9	DICOM_2011
+(0068,64F0)	FD	TwoDDegreeOfFreedomAxis	3	DICOM_2011
+(0068,6500)	SQ	PlanningLandmarkPointSequence	1	DICOM_2011
+(0068,6510)	SQ	PlanningLandmarkLineSequence	1	DICOM_2011
+(0068,6520)	SQ	PlanningLandmarkPlaneSequence	1	DICOM_2011
+(0068,6530)	US	PlanningLandmarkID	1	DICOM_2011
+(0068,6540)	LO	PlanningLandmarkDescription	1	DICOM_2011
+(0068,6545)	SQ	PlanningLandmarkIdentificationCodeSequence	1	DICOM_2011
+(0068,6550)	SQ	TwoDPointCoordinatesSequence	1	DICOM_2011
+(0068,6560)	FD	TwoDPointCoordinates	2	DICOM_2011
+(0068,6590)	FD	ThreeDPointCoordinates	3	DICOM_2011
+(0068,65A0)	SQ	TwoDLineCoordinatesSequence	1	DICOM_2011
+(0068,65B0)	FD	TwoDLineCoordinates	4	DICOM_2011
+(0068,65D0)	FD	ThreeDLineCoordinates	6	DICOM_2011
+(0068,65E0)	SQ	TwoDPlaneCoordinatesSequence	1	DICOM_2011
+(0068,65F0)	FD	TwoDPlaneIntersection	4	DICOM_2011
+(0068,6610)	FD	ThreeDPlaneOrigin	3	DICOM_2011
+(0068,6620)	FD	ThreeDPlaneNormal	3	DICOM_2011
+(0070,0001)	SQ	GraphicAnnotationSequence	1	DICOM_2011
+(0070,0002)	CS	GraphicLayer	1	DICOM_2011
+(0070,0003)	CS	BoundingBoxAnnotationUnits	1	DICOM_2011
+(0070,0004)	CS	AnchorPointAnnotationUnits	1	DICOM_2011
+(0070,0005)	CS	GraphicAnnotationUnits	1	DICOM_2011
+(0070,0006)	ST	UnformattedTextValue	1	DICOM_2011
+(0070,0008)	SQ	TextObjectSequence	1	DICOM_2011
+(0070,0009)	SQ	GraphicObjectSequence	1	DICOM_2011
+(0070,0010)	FL	BoundingBoxTopLeftHandCorner	2	DICOM_2011
+(0070,0011)	FL	BoundingBoxBottomRightHandCorner	2	DICOM_2011
+(0070,0012)	CS	BoundingBoxTextHorizontalJustification	1	DICOM_2011
+(0070,0014)	FL	AnchorPoint	2	DICOM_2011
+(0070,0015)	CS	AnchorPointVisibility	1	DICOM_2011
+(0070,0020)	US	GraphicDimensions	1	DICOM_2011
+(0070,0021)	US	NumberOfGraphicPoints	1	DICOM_2011
+(0070,0022)	FL	GraphicData	2-n	DICOM_2011
+(0070,0023)	CS	GraphicType	1	DICOM_2011
+(0070,0024)	CS	GraphicFilled	1	DICOM_2011
+(0070,0041)	CS	ImageHorizontalFlip	1	DICOM_2011
+(0070,0042)	US	ImageRotation	1	DICOM_2011
+(0070,0052)	SL	DisplayedAreaTopLeftHandCorner	2	DICOM_2011
+(0070,0053)	SL	DisplayedAreaBottomRightHandCorner	2	DICOM_2011
+(0070,005A)	SQ	DisplayedAreaSelectionSequence	1	DICOM_2011
+(0070,0060)	SQ	GraphicLayerSequence	1	DICOM_2011
+(0070,0062)	IS	GraphicLayerOrder	1	DICOM_2011
+(0070,0066)	US	GraphicLayerRecommendedDisplayGrayscaleValue	1	DICOM_2011
+(0070,0068)	LO	GraphicLayerDescription	1	DICOM_2011
+(0070,0080)	CS	ContentLabel	1	DICOM_2011
+(0070,0081)	LO	ContentDescription	1	DICOM_2011
+(0070,0082)	DA	PresentationCreationDate	1	DICOM_2011
+(0070,0083)	TM	PresentationCreationTime	1	DICOM_2011
+(0070,0084)	PN	ContentCreatorName	1	DICOM_2011
+(0070,0086)	SQ	ContentCreatorIdentificationCodeSequence	1	DICOM_2011
+(0070,0087)	SQ	AlternateContentDescriptionSequence	1	DICOM_2011
+(0070,0100)	CS	PresentationSizeMode	1	DICOM_2011
+(0070,0101)	DS	PresentationPixelSpacing	2	DICOM_2011
+(0070,0102)	IS	PresentationPixelAspectRatio	2	DICOM_2011
+(0070,0103)	FL	PresentationPixelMagnificationRatio	1	DICOM_2011
+(0070,0207)	LO	GraphicGroupLabel	1	DICOM_2011
+(0070,0208)	ST	GraphicGroupDescription	1	DICOM_2011
+(0070,0209)	SQ	CompoundGraphicSequence	1	DICOM_2011
+(0070,0226)	UL	CompoundGraphicInstanceID	1	DICOM_2011
+(0070,0227)	LO	FontName	1	DICOM_2011
+(0070,0228)	CS	FontNameType	1	DICOM_2011
+(0070,0229)	LO	CSSFontName	1	DICOM_2011
+(0070,0230)	FD	RotationAngle	1	DICOM_2011
+(0070,0231)	SQ	TextStyleSequence	1	DICOM_2011
+(0070,0232)	SQ	LineStyleSequence	1	DICOM_2011
+(0070,0233)	SQ	FillStyleSequence	1	DICOM_2011
+(0070,0234)	SQ	GraphicGroupSequence	1	DICOM_2011
+(0070,0241)	US	TextColorCIELabValue	3	DICOM_2011
+(0070,0242)	CS	HorizontalAlignment	1	DICOM_2011
+(0070,0243)	CS	VerticalAlignment	1	DICOM_2011
+(0070,0244)	CS	ShadowStyle	1	DICOM_2011
+(0070,0245)	FL	ShadowOffsetX	1	DICOM_2011
+(0070,0246)	FL	ShadowOffsetY	1	DICOM_2011
+(0070,0247)	US	ShadowColorCIELabValue	3	DICOM_2011
+(0070,0248)	CS	Underlined	1	DICOM_2011
+(0070,0249)	CS	Bold	1	DICOM_2011
+(0070,0250)	CS	Italic	1	DICOM_2011
+(0070,0251)	US	PatternOnColorCIELabValue	3	DICOM_2011
+(0070,0252)	US	PatternOffColorCIELabValue	3	DICOM_2011
+(0070,0253)	FL	LineThickness	1	DICOM_2011
+(0070,0254)	CS	LineDashingStyle	1	DICOM_2011
+(0070,0255)	UL	LinePattern	1	DICOM_2011
+(0070,0256)	OB	FillPattern	1	DICOM_2011
+(0070,0257)	CS	FillMode	1	DICOM_2011
+(0070,0258)	FL	ShadowOpacity	1	DICOM_2011
+(0070,0261)	FL	GapLength	1	DICOM_2011
+(0070,0262)	FL	DiameterOfVisibility	1	DICOM_2011
+(0070,0273)	FL	RotationPoint	2	DICOM_2011
+(0070,0274)	CS	TickAlignment	1	DICOM_2011
+(0070,0278)	CS	ShowTickLabel	1	DICOM_2011
+(0070,0279)	CS	TickLabelAlignment	1	DICOM_2011
+(0070,0282)	CS	CompoundGraphicUnits	1	DICOM_2011
+(0070,0284)	FL	PatternOnOpacity	1	DICOM_2011
+(0070,0285)	FL	PatternOffOpacity	1	DICOM_2011
+(0070,0287)	SQ	MajorTicksSequence	1	DICOM_2011
+(0070,0288)	FL	TickPosition	1	DICOM_2011
+(0070,0289)	SH	TickLabel	1	DICOM_2011
+(0070,0294)	CS	CompoundGraphicType	1	DICOM_2011
+(0070,0295)	UL	GraphicGroupID	1	DICOM_2011
+(0070,0306)	CS	ShapeType	1	DICOM_2011
+(0070,0308)	SQ	RegistrationSequence	1	DICOM_2011
+(0070,0309)	SQ	MatrixRegistrationSequence	1	DICOM_2011
+(0070,030A)	SQ	MatrixSequence	1	DICOM_2011
+(0070,030C)	CS	FrameOfReferenceTransformationMatrixType	1	DICOM_2011
+(0070,030D)	SQ	RegistrationTypeCodeSequence	1	DICOM_2011
+(0070,030F)	ST	FiducialDescription	1	DICOM_2011
+(0070,0310)	SH	FiducialIdentifier	1	DICOM_2011
+(0070,0311)	SQ	FiducialIdentifierCodeSequence	1	DICOM_2011
+(0070,0312)	FD	ContourUncertaintyRadius	1	DICOM_2011
+(0070,0314)	SQ	UsedFiducialsSequence	1	DICOM_2011
+(0070,0318)	SQ	GraphicCoordinatesDataSequence	1	DICOM_2011
+(0070,031A)	UI	FiducialUID	1	DICOM_2011
+(0070,031C)	SQ	FiducialSetSequence	1	DICOM_2011
+(0070,031E)	SQ	FiducialSequence	1	DICOM_2011
+(0070,0401)	US	GraphicLayerRecommendedDisplayCIELabValue	3	DICOM_2011
+(0070,0402)	SQ	BlendingSequence	1	DICOM_2011
+(0070,0403)	FL	RelativeOpacity	1	DICOM_2011
+(0070,0404)	SQ	ReferencedSpatialRegistrationSequence	1	DICOM_2011
+(0070,0405)	CS	BlendingPosition	1	DICOM_2011
+(0072,0002)	SH	HangingProtocolName	1	DICOM_2011
+(0072,0004)	LO	HangingProtocolDescription	1	DICOM_2011
+(0072,0006)	CS	HangingProtocolLevel	1	DICOM_2011
+(0072,0008)	LO	HangingProtocolCreator	1	DICOM_2011
+(0072,000A)	DT	HangingProtocolCreationDateTime	1	DICOM_2011
+(0072,000C)	SQ	HangingProtocolDefinitionSequence	1	DICOM_2011
+(0072,000E)	SQ	HangingProtocolUserIdentificationCodeSequence	1	DICOM_2011
+(0072,0010)	LO	HangingProtocolUserGroupName	1	DICOM_2011
+(0072,0012)	SQ	SourceHangingProtocolSequence	1	DICOM_2011
+(0072,0014)	US	NumberOfPriorsReferenced	1	DICOM_2011
+(0072,0020)	SQ	ImageSetsSequence	1	DICOM_2011
+(0072,0022)	SQ	ImageSetSelectorSequence	1	DICOM_2011
+(0072,0024)	CS	ImageSetSelectorUsageFlag	1	DICOM_2011
+(0072,0026)	AT	SelectorAttribute	1	DICOM_2011
+(0072,0028)	US	SelectorValueNumber	1	DICOM_2011
+(0072,0030)	SQ	TimeBasedImageSetsSequence	1	DICOM_2011
+(0072,0032)	US	ImageSetNumber	1	DICOM_2011
+(0072,0034)	CS	ImageSetSelectorCategory	1	DICOM_2011
+(0072,0038)	US	RelativeTime	2	DICOM_2011
+(0072,003A)	CS	RelativeTimeUnits	1	DICOM_2011
+(0072,003C)	SS	AbstractPriorValue	2	DICOM_2011
+(0072,003E)	SQ	AbstractPriorCodeSequence	1	DICOM_2011
+(0072,0040)	LO	ImageSetLabel	1	DICOM_2011
+(0072,0050)	CS	SelectorAttributeVR	1	DICOM_2011
+(0072,0052)	AT	SelectorSequencePointer	1-n	DICOM_2011
+(0072,0054)	LO	SelectorSequencePointerPrivateCreator	1-n	DICOM_2011
+(0072,0056)	LO	SelectorAttributePrivateCreator	1	DICOM_2011
+(0072,0060)	AT	SelectorATValue	1-n	DICOM_2011
+(0072,0062)	CS	SelectorCSValue	1-n	DICOM_2011
+(0072,0064)	IS	SelectorISValue	1-n	DICOM_2011
+(0072,0066)	LO	SelectorLOValue	1-n	DICOM_2011
+(0072,0068)	LT	SelectorLTValue	1	DICOM_2011
+(0072,006A)	PN	SelectorPNValue	1-n	DICOM_2011
+(0072,006C)	SH	SelectorSHValue	1-n	DICOM_2011
+(0072,006E)	ST	SelectorSTValue	1	DICOM_2011
+(0072,0070)	UT	SelectorUTValue	1	DICOM_2011
+(0072,0072)	DS	SelectorDSValue	1-n	DICOM_2011
+(0072,0074)	FD	SelectorFDValue	1-n	DICOM_2011
+(0072,0076)	FL	SelectorFLValue	1-n	DICOM_2011
+(0072,0078)	UL	SelectorULValue	1-n	DICOM_2011
+(0072,007A)	US	SelectorUSValue	1-n	DICOM_2011
+(0072,007C)	SL	SelectorSLValue	1-n	DICOM_2011
+(0072,007E)	SS	SelectorSSValue	1-n	DICOM_2011
+(0072,0080)	SQ	SelectorCodeSequenceValue	1	DICOM_2011
+(0072,0100)	US	NumberOfScreens	1	DICOM_2011
+(0072,0102)	SQ	NominalScreenDefinitionSequence	1	DICOM_2011
+(0072,0104)	US	NumberOfVerticalPixels	1	DICOM_2011
+(0072,0106)	US	NumberOfHorizontalPixels	1	DICOM_2011
+(0072,0108)	FD	DisplayEnvironmentSpatialPosition	4	DICOM_2011
+(0072,010A)	US	ScreenMinimumGrayscaleBitDepth	1	DICOM_2011
+(0072,010C)	US	ScreenMinimumColorBitDepth	1	DICOM_2011
+(0072,010E)	US	ApplicationMaximumRepaintTime	1	DICOM_2011
+(0072,0200)	SQ	DisplaySetsSequence	1	DICOM_2011
+(0072,0202)	US	DisplaySetNumber	1	DICOM_2011
+(0072,0203)	LO	DisplaySetLabel	1	DICOM_2011
+(0072,0204)	US	DisplaySetPresentationGroup	1	DICOM_2011
+(0072,0206)	LO	DisplaySetPresentationGroupDescription	1	DICOM_2011
+(0072,0208)	CS	PartialDataDisplayHandling	1	DICOM_2011
+(0072,0210)	SQ	SynchronizedScrollingSequence	1	DICOM_2011
+(0072,0212)	US	DisplaySetScrollingGroup	2-n	DICOM_2011
+(0072,0214)	SQ	NavigationIndicatorSequence	1	DICOM_2011
+(0072,0216)	US	NavigationDisplaySet	1	DICOM_2011
+(0072,0218)	US	ReferenceDisplaySets	1-n	DICOM_2011
+(0072,0300)	SQ	ImageBoxesSequence	1	DICOM_2011
+(0072,0302)	US	ImageBoxNumber	1	DICOM_2011
+(0072,0304)	CS	ImageBoxLayoutType	1	DICOM_2011
+(0072,0306)	US	ImageBoxTileHorizontalDimension	1	DICOM_2011
+(0072,0308)	US	ImageBoxTileVerticalDimension	1	DICOM_2011
+(0072,0310)	CS	ImageBoxScrollDirection	1	DICOM_2011
+(0072,0312)	CS	ImageBoxSmallScrollType	1	DICOM_2011
+(0072,0314)	US	ImageBoxSmallScrollAmount	1	DICOM_2011
+(0072,0316)	CS	ImageBoxLargeScrollType	1	DICOM_2011
+(0072,0318)	US	ImageBoxLargeScrollAmount	1	DICOM_2011
+(0072,0320)	US	ImageBoxOverlapPriority	1	DICOM_2011
+(0072,0330)	FD	CineRelativeToRealTime	1	DICOM_2011
+(0072,0400)	SQ	FilterOperationsSequence	1	DICOM_2011
+(0072,0402)	CS	FilterByCategory	1	DICOM_2011
+(0072,0404)	CS	FilterByAttributePresence	1	DICOM_2011
+(0072,0406)	CS	FilterByOperator	1	DICOM_2011
+(0072,0420)	US	StructuredDisplayBackgroundCIELabValue	3	DICOM_2011
+(0072,0421)	US	EmptyImageBoxCIELabValue	3	DICOM_2011
+(0072,0422)	SQ	StructuredDisplayImageBoxSequence	1	DICOM_2011
+(0072,0424)	SQ	StructuredDisplayTextBoxSequence	1	DICOM_2011
+(0072,0427)	SQ	ReferencedFirstFrameSequence	1	DICOM_2011
+(0072,0430)	SQ	ImageBoxSynchronizationSequence	1	DICOM_2011
+(0072,0432)	US	SynchronizedImageBoxList	2-n	DICOM_2011
+(0072,0434)	CS	TypeOfSynchronization	1	DICOM_2011
+(0072,0500)	CS	BlendingOperationType	1	DICOM_2011
+(0072,0510)	CS	ReformattingOperationType	1	DICOM_2011
+(0072,0512)	FD	ReformattingThickness	1	DICOM_2011
+(0072,0514)	FD	ReformattingInterval	1	DICOM_2011
+(0072,0516)	CS	ReformattingOperationInitialViewDirection	1	DICOM_2011
+(0072,0520)	CS	ThreeDRenderingType	1-n	DICOM_2011
+(0072,0600)	SQ	SortingOperationsSequence	1	DICOM_2011
+(0072,0602)	CS	SortByCategory	1	DICOM_2011
+(0072,0604)	CS	SortingDirection	1	DICOM_2011
+(0072,0700)	CS	DisplaySetPatientOrientation	2	DICOM_2011
+(0072,0702)	CS	VOIType	1	DICOM_2011
+(0072,0704)	CS	PseudoColorType	1	DICOM_2011
+(0072,0705)	SQ	PseudoColorPaletteInstanceReferenceSequence	1	DICOM_2011
+(0072,0706)	CS	ShowGrayscaleInverted	1	DICOM_2011
+(0072,0710)	CS	ShowImageTrueSizeFlag	1	DICOM_2011
+(0072,0712)	CS	ShowGraphicAnnotationFlag	1	DICOM_2011
+(0072,0714)	CS	ShowPatientDemographicsFlag	1	DICOM_2011
+(0072,0716)	CS	ShowAcquisitionTechniquesFlag	1	DICOM_2011
+(0072,0717)	CS	DisplaySetHorizontalJustification	1	DICOM_2011
+(0072,0718)	CS	DisplaySetVerticalJustification	1	DICOM_2011
+(0074,0120)	FD	ContinuationStartMeterset	1	DICOM_2011
+(0074,0121)	FD	ContinuationEndMeterset	1	DICOM_2011
+(0074,1000)	CS	ProcedureStepState	1	DICOM_2011
+(0074,1002)	SQ	ProcedureStepProgressInformationSequence	1	DICOM_2011
+(0074,1004)	DS	ProcedureStepProgress	1	DICOM_2011
+(0074,1006)	ST	ProcedureStepProgressDescription	1	DICOM_2011
+(0074,1008)	SQ	ProcedureStepCommunicationsURISequence	1	DICOM_2011
+(0074,100A)	ST	ContactURI	1	DICOM_2011
+(0074,100C)	LO	ContactDisplayName	1	DICOM_2011
+(0074,100E)	SQ	ProcedureStepDiscontinuationReasonCodeSequence	1	DICOM_2011
+(0074,1020)	SQ	BeamTaskSequence	1	DICOM_2011
+(0074,1022)	CS	BeamTaskType	1	DICOM_2011
+(0074,1026)	FD	TableTopVerticalAdjustedPosition	1	DICOM_2011
+(0074,1027)	FD	TableTopLongitudinalAdjustedPosition	1	DICOM_2011
+(0074,1028)	FD	TableTopLateralAdjustedPosition	1	DICOM_2011
+(0074,102A)	FD	PatientSupportAdjustedAngle	1	DICOM_2011
+(0074,102B)	FD	TableTopEccentricAdjustedAngle	1	DICOM_2011
+(0074,102C)	FD	TableTopPitchAdjustedAngle	1	DICOM_2011
+(0074,102D)	FD	TableTopRollAdjustedAngle	1	DICOM_2011
+(0074,1030)	SQ	DeliveryVerificationImageSequence	1	DICOM_2011
+(0074,1032)	CS	VerificationImageTiming	1	DICOM_2011
+(0074,1034)	CS	DoubleExposureFlag	1	DICOM_2011
+(0074,1036)	CS	DoubleExposureOrdering	1	DICOM_2011
+(0074,1040)	SQ	RelatedReferenceRTImageSequence	1	DICOM_2011
+(0074,1042)	SQ	GeneralMachineVerificationSequence	1	DICOM_2011
+(0074,1044)	SQ	ConventionalMachineVerificationSequence	1	DICOM_2011
+(0074,1046)	SQ	IonMachineVerificationSequence	1	DICOM_2011
+(0074,1048)	SQ	FailedAttributesSequence	1	DICOM_2011
+(0074,104A)	SQ	OverriddenAttributesSequence	1	DICOM_2011
+(0074,104C)	SQ	ConventionalControlPointVerificationSequence	1	DICOM_2011
+(0074,104E)	SQ	IonControlPointVerificationSequence	1	DICOM_2011
+(0074,1050)	SQ	AttributeOccurrenceSequence	1	DICOM_2011
+(0074,1052)	AT	AttributeOccurrencePointer	1	DICOM_2011
+(0074,1054)	UL	AttributeItemSelector	1	DICOM_2011
+(0074,1056)	LO	AttributeOccurrencePrivateCreator	1	DICOM_2011
+(0074,1057)	IS	SelectorSequencePointerItems	1-n	DICOM_2011
+(0074,1200)	CS	ScheduledProcedureStepPriority	1	DICOM_2011
+(0074,1202)	LO	WorklistLabel	1	DICOM_2011
+(0074,1204)	LO	ProcedureStepLabel	1	DICOM_2011
+(0074,1210)	SQ	ScheduledProcessingParametersSequence	1	DICOM_2011
+(0074,1212)	SQ	PerformedProcessingParametersSequence	1	DICOM_2011
+(0074,1216)	SQ	UnifiedProcedureStepPerformedProcedureSequence	1	DICOM_2011
+(0074,1224)	SQ	ReplacedProcedureStepSequence	1	DICOM_2011
+(0074,1230)	LO	DeletionLock	1	DICOM_2011
+(0074,1234)	AE	ReceivingAE	1	DICOM_2011
+(0074,1236)	AE	RequestingAE	1	DICOM_2011
+(0074,1238)	LT	ReasonForCancellation	1	DICOM_2011
+(0074,1242)	CS	SCPStatus	1	DICOM_2011
+(0074,1244)	CS	SubscriptionListStatus	1	DICOM_2011
+(0074,1246)	CS	UnifiedProcedureStepListStatus	1	DICOM_2011
+(0074,1324)	UL	BeamOrderIndex	1	DICOM_2011
+(0074,1338)	FD	DoubleExposureMeterset	1	DICOM_2011
+(0074,133A)	FD	DoubleExposureFieldDelta	4	DICOM_2011
+(0076,0001)	LO	ImplantAssemblyTemplateName	1	DICOM_2011
+(0076,0003)	LO	ImplantAssemblyTemplateIssuer	1	DICOM_2011
+(0076,0006)	LO	ImplantAssemblyTemplateVersion	1	DICOM_2011
+(0076,0008)	SQ	ReplacedImplantAssemblyTemplateSequence	1	DICOM_2011
+(0076,000A)	CS	ImplantAssemblyTemplateType	1	DICOM_2011
+(0076,000C)	SQ	OriginalImplantAssemblyTemplateSequence	1	DICOM_2011
+(0076,000E)	SQ	DerivationImplantAssemblyTemplateSequence	1	DICOM_2011
+(0076,0010)	SQ	ImplantAssemblyTemplateTargetAnatomySequence	1	DICOM_2011
+(0076,0020)	SQ	ProcedureTypeCodeSequence	1	DICOM_2011
+(0076,0030)	LO	SurgicalTechnique	1	DICOM_2011
+(0076,0032)	SQ	ComponentTypesSequence	1	DICOM_2011
+(0076,0034)	CS	ComponentTypeCodeSequence	1	DICOM_2011
+(0076,0036)	CS	ExclusiveComponentType	1	DICOM_2011
+(0076,0038)	CS	MandatoryComponentType	1	DICOM_2011
+(0076,0040)	SQ	ComponentSequence	1	DICOM_2011
+(0076,0055)	US	ComponentID	1	DICOM_2011
+(0076,0060)	SQ	ComponentAssemblySequence	1	DICOM_2011
+(0076,0070)	US	Component1ReferencedID	1	DICOM_2011
+(0076,0080)	US	Component1ReferencedMatingFeatureSetID	1	DICOM_2011
+(0076,0090)	US	Component1ReferencedMatingFeatureID	1	DICOM_2011
+(0076,00A0)	US	Component2ReferencedID	1	DICOM_2011
+(0076,00B0)	US	Component2ReferencedMatingFeatureSetID	1	DICOM_2011
+(0076,00C0)	US	Component2ReferencedMatingFeatureID	1	DICOM_2011
+(0078,0001)	LO	ImplantTemplateGroupName	1	DICOM_2011
+(0078,0010)	ST	ImplantTemplateGroupDescription	1	DICOM_2011
+(0078,0020)	LO	ImplantTemplateGroupIssuer	1	DICOM_2011
+(0078,0024)	LO	ImplantTemplateGroupVersion	1	DICOM_2011
+(0078,0026)	SQ	ReplacedImplantTemplateGroupSequence	1	DICOM_2011
+(0078,0028)	SQ	ImplantTemplateGroupTargetAnatomySequence	1	DICOM_2011
+(0078,002A)	SQ	ImplantTemplateGroupMembersSequence	1	DICOM_2011
+(0078,002E)	US	ImplantTemplateGroupMemberID	1	DICOM_2011
+(0078,0050)	FD	ThreeDImplantTemplateGroupMemberMatchingPoint	3	DICOM_2011
+(0078,0060)	FD	ThreeDImplantTemplateGroupMemberMatchingAxes	9	DICOM_2011
+(0078,0070)	SQ	ImplantTemplateGroupMemberMatching2DCoordinatesSequence	1	DICOM_2011
+(0078,0090)	FD	TwoDImplantTemplateGroupMemberMatchingPoint	2	DICOM_2011
+(0078,00A0)	FD	TwoDImplantTemplateGroupMemberMatchingAxes	4	DICOM_2011
+(0078,00B0)	SQ	ImplantTemplateGroupVariationDimensionSequence	1	DICOM_2011
+(0078,00B2)	LO	ImplantTemplateGroupVariationDimensionName	1	DICOM_2011
+(0078,00B4)	SQ	ImplantTemplateGroupVariationDimensionRankSequence	1	DICOM_2011
+(0078,00B6)	US	ReferencedImplantTemplateGroupMemberID	1	DICOM_2011
+(0078,00B8)	US	ImplantTemplateGroupVariationDimensionRank	1	DICOM_2011
+(0088,0130)	SH	StorageMediaFileSetID	1	DICOM_2011
+(0088,0140)	UI	StorageMediaFileSetUID	1	DICOM_2011
+(0088,0200)	SQ	IconImageSequence	1	DICOM_2011
+(0100,0410)	CS	SOPInstanceStatus	1	DICOM_2011
+(0100,0420)	DT	SOPAuthorizationDateTime	1	DICOM_2011
+(0100,0424)	LT	SOPAuthorizationComment	1	DICOM_2011
+(0100,0426)	LO	AuthorizationEquipmentCertificationNumber	1	DICOM_2011
+(0400,0005)	US	MACIDNumber	1	DICOM_2011
+(0400,0010)	UI	MACCalculationTransferSyntaxUID	1	DICOM_2011
+(0400,0015)	CS	MACAlgorithm	1	DICOM_2011
+(0400,0020)	AT	DataElementsSigned	1-n	DICOM_2011
+(0400,0100)	UI	DigitalSignatureUID	1	DICOM_2011
+(0400,0105)	DT	DigitalSignatureDateTime	1	DICOM_2011
+(0400,0110)	CS	CertificateType	1	DICOM_2011
+(0400,0115)	OB	CertificateOfSigner	1	DICOM_2011
+(0400,0120)	OB	Signature	1	DICOM_2011
+(0400,0305)	CS	CertifiedTimestampType	1	DICOM_2011
+(0400,0310)	OB	CertifiedTimestamp	1	DICOM_2011
+(0400,0401)	SQ	DigitalSignaturePurposeCodeSequence	1	DICOM_2011
+(0400,0402)	SQ	ReferencedDigitalSignatureSequence	1	DICOM_2011
+(0400,0403)	SQ	ReferencedSOPInstanceMACSequence	1	DICOM_2011
+(0400,0404)	OB	MAC	1	DICOM_2011
+(0400,0500)	SQ	EncryptedAttributesSequence	1	DICOM_2011
+(0400,0510)	UI	EncryptedContentTransferSyntaxUID	1	DICOM_2011
+(0400,0520)	OB	EncryptedContent	1	DICOM_2011
+(0400,0550)	SQ	ModifiedAttributesSequence	1	DICOM_2011
+(0400,0561)	SQ	OriginalAttributesSequence	1	DICOM_2011
+(0400,0562)	DT	AttributeModificationDateTime	1	DICOM_2011
+(0400,0563)	LO	ModifyingSystem	1	DICOM_2011
+(0400,0564)	LO	SourceOfPreviousValues	1	DICOM_2011
+(0400,0565)	CS	ReasonForTheAttributeModification	1	DICOM_2011
+(2000,0010)	IS	NumberOfCopies	1	DICOM_2011
+(2000,001E)	SQ	PrinterConfigurationSequence	1	DICOM_2011
+(2000,0020)	CS	PrintPriority	1	DICOM_2011
+(2000,0030)	CS	MediumType	1	DICOM_2011
+(2000,0040)	CS	FilmDestination	1	DICOM_2011
+(2000,0050)	LO	FilmSessionLabel	1	DICOM_2011
+(2000,0060)	IS	MemoryAllocation	1	DICOM_2011
+(2000,0061)	IS	MaximumMemoryAllocation	1	DICOM_2011
+(2000,00A0)	US	MemoryBitDepth	1	DICOM_2011
+(2000,00A1)	US	PrintingBitDepth	1	DICOM_2011
+(2000,00A2)	SQ	MediaInstalledSequence	1	DICOM_2011
+(2000,00A4)	SQ	OtherMediaAvailableSequence	1	DICOM_2011
+(2000,00A8)	SQ	SupportedImageDisplayFormatsSequence	1	DICOM_2011
+(2000,0500)	SQ	ReferencedFilmBoxSequence	1	DICOM_2011
+(2010,0010)	ST	ImageDisplayFormat	1	DICOM_2011
+(2010,0030)	CS	AnnotationDisplayFormatID	1	DICOM_2011
+(2010,0040)	CS	FilmOrientation	1	DICOM_2011
+(2010,0050)	CS	FilmSizeID	1	DICOM_2011
+(2010,0052)	CS	PrinterResolutionID	1	DICOM_2011
+(2010,0054)	CS	DefaultPrinterResolutionID	1	DICOM_2011
+(2010,0060)	CS	MagnificationType	1	DICOM_2011
+(2010,0080)	CS	SmoothingType	1	DICOM_2011
+(2010,00A6)	CS	DefaultMagnificationType	1	DICOM_2011
+(2010,00A7)	CS	OtherMagnificationTypesAvailable	1-n	DICOM_2011
+(2010,00A8)	CS	DefaultSmoothingType	1	DICOM_2011
+(2010,00A9)	CS	OtherSmoothingTypesAvailable	1-n	DICOM_2011
+(2010,0100)	CS	BorderDensity	1	DICOM_2011
+(2010,0110)	CS	EmptyImageDensity	1	DICOM_2011
+(2010,0120)	US	MinDensity	1	DICOM_2011
+(2010,0130)	US	MaxDensity	1	DICOM_2011
+(2010,0140)	CS	Trim	1	DICOM_2011
+(2010,0150)	ST	ConfigurationInformation	1	DICOM_2011
+(2010,0152)	LT	ConfigurationInformationDescription	1	DICOM_2011
+(2010,0154)	IS	MaximumCollatedFilms	1	DICOM_2011
+(2010,015E)	US	Illumination	1	DICOM_2011
+(2010,0160)	US	ReflectedAmbientLight	1	DICOM_2011
+(2010,0376)	DS	PrinterPixelSpacing	2	DICOM_2011
+(2010,0500)	SQ	ReferencedFilmSessionSequence	1	DICOM_2011
+(2010,0510)	SQ	ReferencedImageBoxSequence	1	DICOM_2011
+(2010,0520)	SQ	ReferencedBasicAnnotationBoxSequence	1	DICOM_2011
+(2020,0010)	US	ImageBoxPosition	1	DICOM_2011
+(2020,0020)	CS	Polarity	1	DICOM_2011
+(2020,0030)	DS	RequestedImageSize	1	DICOM_2011
+(2020,0040)	CS	RequestedDecimateCropBehavior	1	DICOM_2011
+(2020,0050)	CS	RequestedResolutionID	1	DICOM_2011
+(2020,00A0)	CS	RequestedImageSizeFlag	1	DICOM_2011
+(2020,00A2)	CS	DecimateCropResult	1	DICOM_2011
+(2020,0110)	SQ	BasicGrayscaleImageSequence	1	DICOM_2011
+(2020,0111)	SQ	BasicColorImageSequence	1	DICOM_2011
+(2030,0010)	US	AnnotationPosition	1	DICOM_2011
+(2030,0020)	LO	TextString	1	DICOM_2011
+(2050,0010)	SQ	PresentationLUTSequence	1	DICOM_2011
+(2050,0020)	CS	PresentationLUTShape	1	DICOM_2011
+(2050,0500)	SQ	ReferencedPresentationLUTSequence	1	DICOM_2011
+(2100,0020)	CS	ExecutionStatus	1	DICOM_2011
+(2100,0030)	CS	ExecutionStatusInfo	1	DICOM_2011
+(2100,0040)	DA	CreationDate	1	DICOM_2011
+(2100,0050)	TM	CreationTime	1	DICOM_2011
+(2100,0070)	AE	Originator	1	DICOM_2011
+(2100,0160)	SH	OwnerID	1	DICOM_2011
+(2100,0170)	IS	NumberOfFilms	1	DICOM_2011
+(2110,0010)	CS	PrinterStatus	1	DICOM_2011
+(2110,0020)	CS	PrinterStatusInfo	1	DICOM_2011
+(2110,0030)	LO	PrinterName	1	DICOM_2011
+(2200,0001)	CS	LabelUsingInformationExtractedFromInstances	1	DICOM_2011
+(2200,0002)	UT	LabelText	1	DICOM_2011
+(2200,0003)	CS	LabelStyleSelection	1	DICOM_2011
+(2200,0004)	LT	MediaDisposition	1	DICOM_2011
+(2200,0005)	LT	BarcodeValue	1	DICOM_2011
+(2200,0006)	CS	BarcodeSymbology	1	DICOM_2011
+(2200,0007)	CS	AllowMediaSplitting	1	DICOM_2011
+(2200,0008)	CS	IncludeNonDICOMObjects	1	DICOM_2011
+(2200,0009)	CS	IncludeDisplayApplication	1	DICOM_2011
+(2200,000A)	CS	PreserveCompositeInstancesAfterMediaCreation	1	DICOM_2011
+(2200,000B)	US	TotalNumberOfPiecesOfMediaCreated	1	DICOM_2011
+(2200,000C)	LO	RequestedMediaApplicationProfile	1	DICOM_2011
+(2200,000D)	SQ	ReferencedStorageMediaSequence	1	DICOM_2011
+(2200,000E)	AT	FailureAttributes	1-n	DICOM_2011
+(2200,000F)	CS	AllowLossyCompression	1	DICOM_2011
+(2200,0020)	CS	RequestPriority	1	DICOM_2011
+(3002,0002)	SH	RTImageLabel	1	DICOM_2011
+(3002,0003)	LO	RTImageName	1	DICOM_2011
+(3002,0004)	ST	RTImageDescription	1	DICOM_2011
+(3002,000A)	CS	ReportedValuesOrigin	1	DICOM_2011
+(3002,000C)	CS	RTImagePlane	1	DICOM_2011
+(3002,000D)	DS	XRayImageReceptorTranslation	3	DICOM_2011
+(3002,000E)	DS	XRayImageReceptorAngle	1	DICOM_2011
+(3002,0010)	DS	RTImageOrientation	6	DICOM_2011
+(3002,0011)	DS	ImagePlanePixelSpacing	2	DICOM_2011
+(3002,0012)	DS	RTImagePosition	2	DICOM_2011
+(3002,0020)	SH	RadiationMachineName	1	DICOM_2011
+(3002,0022)	DS	RadiationMachineSAD	1	DICOM_2011
+(3002,0024)	DS	RadiationMachineSSD	1	DICOM_2011
+(3002,0026)	DS	RTImageSID	1	DICOM_2011
+(3002,0028)	DS	SourceToReferenceObjectDistance	1	DICOM_2011
+(3002,0029)	IS	FractionNumber	1	DICOM_2011
+(3002,0030)	SQ	ExposureSequence	1	DICOM_2011
+(3002,0032)	DS	MetersetExposure	1	DICOM_2011
+(3002,0034)	DS	DiaphragmPosition	4	DICOM_2011
+(3002,0040)	SQ	FluenceMapSequence	1	DICOM_2011
+(3002,0041)	CS	FluenceDataSource	1	DICOM_2011
+(3002,0042)	DS	FluenceDataScale	1	DICOM_2011
+(3002,0050)	SQ	PrimaryFluenceModeSequence	1	DICOM_2011
+(3002,0051)	CS	FluenceMode	1	DICOM_2011
+(3002,0052)	SH	FluenceModeID	1	DICOM_2011
+(3004,0001)	CS	DVHType	1	DICOM_2011
+(3004,0002)	CS	DoseUnits	1	DICOM_2011
+(3004,0004)	CS	DoseType	1	DICOM_2011
+(3004,0006)	LO	DoseComment	1	DICOM_2011
+(3004,0008)	DS	NormalizationPoint	3	DICOM_2011
+(3004,000A)	CS	DoseSummationType	1	DICOM_2011
+(3004,000C)	DS	GridFrameOffsetVector	2-n	DICOM_2011
+(3004,000E)	DS	DoseGridScaling	1	DICOM_2011
+(3004,0010)	SQ	RTDoseROISequence	1	DICOM_2011
+(3004,0012)	DS	DoseValue	1	DICOM_2011
+(3004,0014)	CS	TissueHeterogeneityCorrection	1-3	DICOM_2011
+(3004,0040)	DS	DVHNormalizationPoint	3	DICOM_2011
+(3004,0042)	DS	DVHNormalizationDoseValue	1	DICOM_2011
+(3004,0050)	SQ	DVHSequence	1	DICOM_2011
+(3004,0052)	DS	DVHDoseScaling	1	DICOM_2011
+(3004,0054)	CS	DVHVolumeUnits	1	DICOM_2011
+(3004,0056)	IS	DVHNumberOfBins	1	DICOM_2011
+(3004,0058)	DS	DVHData	2-2n	DICOM_2011
+(3004,0060)	SQ	DVHReferencedROISequence	1	DICOM_2011
+(3004,0062)	CS	DVHROIContributionType	1	DICOM_2011
+(3004,0070)	DS	DVHMinimumDose	1	DICOM_2011
+(3004,0072)	DS	DVHMaximumDose	1	DICOM_2011
+(3004,0074)	DS	DVHMeanDose	1	DICOM_2011
+(3006,0002)	SH	StructureSetLabel	1	DICOM_2011
+(3006,0004)	LO	StructureSetName	1	DICOM_2011
+(3006,0006)	ST	StructureSetDescription	1	DICOM_2011
+(3006,0008)	DA	StructureSetDate	1	DICOM_2011
+(3006,0009)	TM	StructureSetTime	1	DICOM_2011
+(3006,0010)	SQ	ReferencedFrameOfReferenceSequence	1	DICOM_2011
+(3006,0012)	SQ	RTReferencedStudySequence	1	DICOM_2011
+(3006,0014)	SQ	RTReferencedSeriesSequence	1	DICOM_2011
+(3006,0016)	SQ	ContourImageSequence	1	DICOM_2011
+(3006,0020)	SQ	StructureSetROISequence	1	DICOM_2011
+(3006,0022)	IS	ROINumber	1	DICOM_2011
+(3006,0024)	UI	ReferencedFrameOfReferenceUID	1	DICOM_2011
+(3006,0026)	LO	ROIName	1	DICOM_2011
+(3006,0028)	ST	ROIDescription	1	DICOM_2011
+(3006,002A)	IS	ROIDisplayColor	3	DICOM_2011
+(3006,002C)	DS	ROIVolume	1	DICOM_2011
+(3006,0030)	SQ	RTRelatedROISequence	1	DICOM_2011
+(3006,0033)	CS	RTROIRelationship	1	DICOM_2011
+(3006,0036)	CS	ROIGenerationAlgorithm	1	DICOM_2011
+(3006,0038)	LO	ROIGenerationDescription	1	DICOM_2011
+(3006,0039)	SQ	ROIContourSequence	1	DICOM_2011
+(3006,0040)	SQ	ContourSequence	1	DICOM_2011
+(3006,0042)	CS	ContourGeometricType	1	DICOM_2011
+(3006,0044)	DS	ContourSlabThickness	1	DICOM_2011
+(3006,0045)	DS	ContourOffsetVector	3	DICOM_2011
+(3006,0046)	IS	NumberOfContourPoints	1	DICOM_2011
+(3006,0048)	IS	ContourNumber	1	DICOM_2011
+(3006,0049)	IS	AttachedContours	1-n	DICOM_2011
+(3006,0050)	DS	ContourData	3-3n	DICOM_2011
+(3006,0080)	SQ	RTROIObservationsSequence	1	DICOM_2011
+(3006,0082)	IS	ObservationNumber	1	DICOM_2011
+(3006,0084)	IS	ReferencedROINumber	1	DICOM_2011
+(3006,0085)	SH	ROIObservationLabel	1	DICOM_2011
+(3006,0086)	SQ	RTROIIdentificationCodeSequence	1	DICOM_2011
+(3006,0088)	ST	ROIObservationDescription	1	DICOM_2011
+(3006,00A0)	SQ	RelatedRTROIObservationsSequence	1	DICOM_2011
+(3006,00A4)	CS	RTROIInterpretedType	1	DICOM_2011
+(3006,00A6)	PN	ROIInterpreter	1	DICOM_2011
+(3006,00B0)	SQ	ROIPhysicalPropertiesSequence	1	DICOM_2011
+(3006,00B2)	CS	ROIPhysicalProperty	1	DICOM_2011
+(3006,00B4)	DS	ROIPhysicalPropertyValue	1	DICOM_2011
+(3006,00B6)	SQ	ROIElementalCompositionSequence	1	DICOM_2011
+(3006,00B7)	US	ROIElementalCompositionAtomicNumber	1	DICOM_2011
+(3006,00B8)	FL	ROIElementalCompositionAtomicMassFraction	1	DICOM_2011
+(3006,00C0)	SQ	FrameOfReferenceRelationshipSequence	1	DICOM_2011
+(3006,00C2)	UI	RelatedFrameOfReferenceUID	1	DICOM_2011
+(3006,00C4)	CS	FrameOfReferenceTransformationType	1	DICOM_2011
+(3006,00C6)	DS	FrameOfReferenceTransformationMatrix	16	DICOM_2011
+(3006,00C8)	LO	FrameOfReferenceTransformationComment	1	DICOM_2011
+(3008,0010)	SQ	MeasuredDoseReferenceSequence	1	DICOM_2011
+(3008,0012)	ST	MeasuredDoseDescription	1	DICOM_2011
+(3008,0014)	CS	MeasuredDoseType	1	DICOM_2011
+(3008,0016)	DS	MeasuredDoseValue	1	DICOM_2011
+(3008,0020)	SQ	TreatmentSessionBeamSequence	1	DICOM_2011
+(3008,0021)	SQ	TreatmentSessionIonBeamSequence	1	DICOM_2011
+(3008,0022)	IS	CurrentFractionNumber	1	DICOM_2011
+(3008,0024)	DA	TreatmentControlPointDate	1	DICOM_2011
+(3008,0025)	TM	TreatmentControlPointTime	1	DICOM_2011
+(3008,002A)	CS	TreatmentTerminationStatus	1	DICOM_2011
+(3008,002B)	SH	TreatmentTerminationCode	1	DICOM_2011
+(3008,002C)	CS	TreatmentVerificationStatus	1	DICOM_2011
+(3008,0030)	SQ	ReferencedTreatmentRecordSequence	1	DICOM_2011
+(3008,0032)	DS	SpecifiedPrimaryMeterset	1	DICOM_2011
+(3008,0033)	DS	SpecifiedSecondaryMeterset	1	DICOM_2011
+(3008,0036)	DS	DeliveredPrimaryMeterset	1	DICOM_2011
+(3008,0037)	DS	DeliveredSecondaryMeterset	1	DICOM_2011
+(3008,003A)	DS	SpecifiedTreatmentTime	1	DICOM_2011
+(3008,003B)	DS	DeliveredTreatmentTime	1	DICOM_2011
+(3008,0040)	SQ	ControlPointDeliverySequence	1	DICOM_2011
+(3008,0041)	SQ	IonControlPointDeliverySequence	1	DICOM_2011
+(3008,0042)	DS	SpecifiedMeterset	1	DICOM_2011
+(3008,0044)	DS	DeliveredMeterset	1	DICOM_2011
+(3008,0045)	FL	MetersetRateSet	1	DICOM_2011
+(3008,0046)	FL	MetersetRateDelivered	1	DICOM_2011
+(3008,0047)	FL	ScanSpotMetersetsDelivered	1-n	DICOM_2011
+(3008,0048)	DS	DoseRateDelivered	1	DICOM_2011
+(3008,0050)	SQ	TreatmentSummaryCalculatedDoseReferenceSequence	1	DICOM_2011
+(3008,0052)	DS	CumulativeDoseToDoseReference	1	DICOM_2011
+(3008,0054)	DA	FirstTreatmentDate	1	DICOM_2011
+(3008,0056)	DA	MostRecentTreatmentDate	1	DICOM_2011
+(3008,005A)	IS	NumberOfFractionsDelivered	1	DICOM_2011
+(3008,0060)	SQ	OverrideSequence	1	DICOM_2011
+(3008,0061)	AT	ParameterSequencePointer	1	DICOM_2011
+(3008,0062)	AT	OverrideParameterPointer	1	DICOM_2011
+(3008,0063)	IS	ParameterItemIndex	1	DICOM_2011
+(3008,0064)	IS	MeasuredDoseReferenceNumber	1	DICOM_2011
+(3008,0065)	AT	ParameterPointer	1	DICOM_2011
+(3008,0066)	ST	OverrideReason	1	DICOM_2011
+(3008,0068)	SQ	CorrectedParameterSequence	1	DICOM_2011
+(3008,006A)	FL	CorrectionValue	1	DICOM_2011
+(3008,0070)	SQ	CalculatedDoseReferenceSequence	1	DICOM_2011
+(3008,0072)	IS	CalculatedDoseReferenceNumber	1	DICOM_2011
+(3008,0074)	ST	CalculatedDoseReferenceDescription	1	DICOM_2011
+(3008,0076)	DS	CalculatedDoseReferenceDoseValue	1	DICOM_2011
+(3008,0078)	DS	StartMeterset	1	DICOM_2011
+(3008,007A)	DS	EndMeterset	1	DICOM_2011
+(3008,0080)	SQ	ReferencedMeasuredDoseReferenceSequence	1	DICOM_2011
+(3008,0082)	IS	ReferencedMeasuredDoseReferenceNumber	1	DICOM_2011
+(3008,0090)	SQ	ReferencedCalculatedDoseReferenceSequence	1	DICOM_2011
+(3008,0092)	IS	ReferencedCalculatedDoseReferenceNumber	1	DICOM_2011
+(3008,00A0)	SQ	BeamLimitingDeviceLeafPairsSequence	1	DICOM_2011
+(3008,00B0)	SQ	RecordedWedgeSequence	1	DICOM_2011
+(3008,00C0)	SQ	RecordedCompensatorSequence	1	DICOM_2011
+(3008,00D0)	SQ	RecordedBlockSequence	1	DICOM_2011
+(3008,00E0)	SQ	TreatmentSummaryMeasuredDoseReferenceSequence	1	DICOM_2011
+(3008,00F0)	SQ	RecordedSnoutSequence	1	DICOM_2011
+(3008,00F2)	SQ	RecordedRangeShifterSequence	1	DICOM_2011
+(3008,00F4)	SQ	RecordedLateralSpreadingDeviceSequence	1	DICOM_2011
+(3008,00F6)	SQ	RecordedRangeModulatorSequence	1	DICOM_2011
+(3008,0100)	SQ	RecordedSourceSequence	1	DICOM_2011
+(3008,0105)	LO	SourceSerialNumber	1	DICOM_2011
+(3008,0110)	SQ	TreatmentSessionApplicationSetupSequence	1	DICOM_2011
+(3008,0116)	CS	ApplicationSetupCheck	1	DICOM_2011
+(3008,0120)	SQ	RecordedBrachyAccessoryDeviceSequence	1	DICOM_2011
+(3008,0122)	IS	ReferencedBrachyAccessoryDeviceNumber	1	DICOM_2011
+(3008,0130)	SQ	RecordedChannelSequence	1	DICOM_2011
+(3008,0132)	DS	SpecifiedChannelTotalTime	1	DICOM_2011
+(3008,0134)	DS	DeliveredChannelTotalTime	1	DICOM_2011
+(3008,0136)	IS	SpecifiedNumberOfPulses	1	DICOM_2011
+(3008,0138)	IS	DeliveredNumberOfPulses	1	DICOM_2011
+(3008,013A)	DS	SpecifiedPulseRepetitionInterval	1	DICOM_2011
+(3008,013C)	DS	DeliveredPulseRepetitionInterval	1	DICOM_2011
+(3008,0140)	SQ	RecordedSourceApplicatorSequence	1	DICOM_2011
+(3008,0142)	IS	ReferencedSourceApplicatorNumber	1	DICOM_2011
+(3008,0150)	SQ	RecordedChannelShieldSequence	1	DICOM_2011
+(3008,0152)	IS	ReferencedChannelShieldNumber	1	DICOM_2011
+(3008,0160)	SQ	BrachyControlPointDeliveredSequence	1	DICOM_2011
+(3008,0162)	DA	SafePositionExitDate	1	DICOM_2011
+(3008,0164)	TM	SafePositionExitTime	1	DICOM_2011
+(3008,0166)	DA	SafePositionReturnDate	1	DICOM_2011
+(3008,0168)	TM	SafePositionReturnTime	1	DICOM_2011
+(3008,0200)	CS	CurrentTreatmentStatus	1	DICOM_2011
+(3008,0202)	ST	TreatmentStatusComment	1	DICOM_2011
+(3008,0220)	SQ	FractionGroupSummarySequence	1	DICOM_2011
+(3008,0223)	IS	ReferencedFractionNumber	1	DICOM_2011
+(3008,0224)	CS	FractionGroupType	1	DICOM_2011
+(3008,0230)	CS	BeamStopperPosition	1	DICOM_2011
+(3008,0240)	SQ	FractionStatusSummarySequence	1	DICOM_2011
+(3008,0250)	DA	TreatmentDate	1	DICOM_2011
+(3008,0251)	TM	TreatmentTime	1	DICOM_2011
+(300A,0002)	SH	RTPlanLabel	1	DICOM_2011
+(300A,0003)	LO	RTPlanName	1	DICOM_2011
+(300A,0004)	ST	RTPlanDescription	1	DICOM_2011
+(300A,0006)	DA	RTPlanDate	1	DICOM_2011
+(300A,0007)	TM	RTPlanTime	1	DICOM_2011
+(300A,0009)	LO	TreatmentProtocols	1-n	DICOM_2011
+(300A,000A)	CS	PlanIntent	1	DICOM_2011
+(300A,000B)	LO	TreatmentSites	1-n	DICOM_2011
+(300A,000C)	CS	RTPlanGeometry	1	DICOM_2011
+(300A,000E)	ST	PrescriptionDescription	1	DICOM_2011
+(300A,0010)	SQ	DoseReferenceSequence	1	DICOM_2011
+(300A,0012)	IS	DoseReferenceNumber	1	DICOM_2011
+(300A,0013)	UI	DoseReferenceUID	1	DICOM_2011
+(300A,0014)	CS	DoseReferenceStructureType	1	DICOM_2011
+(300A,0015)	CS	NominalBeamEnergyUnit	1	DICOM_2011
+(300A,0016)	LO	DoseReferenceDescription	1	DICOM_2011
+(300A,0018)	DS	DoseReferencePointCoordinates	3	DICOM_2011
+(300A,001A)	DS	NominalPriorDose	1	DICOM_2011
+(300A,0020)	CS	DoseReferenceType	1	DICOM_2011
+(300A,0021)	DS	ConstraintWeight	1	DICOM_2011
+(300A,0022)	DS	DeliveryWarningDose	1	DICOM_2011
+(300A,0023)	DS	DeliveryMaximumDose	1	DICOM_2011
+(300A,0025)	DS	TargetMinimumDose	1	DICOM_2011
+(300A,0026)	DS	TargetPrescriptionDose	1	DICOM_2011
+(300A,0027)	DS	TargetMaximumDose	1	DICOM_2011
+(300A,0028)	DS	TargetUnderdoseVolumeFraction	1	DICOM_2011
+(300A,002A)	DS	OrganAtRiskFullVolumeDose	1	DICOM_2011
+(300A,002B)	DS	OrganAtRiskLimitDose	1	DICOM_2011
+(300A,002C)	DS	OrganAtRiskMaximumDose	1	DICOM_2011
+(300A,002D)	DS	OrganAtRiskOverdoseVolumeFraction	1	DICOM_2011
+(300A,0040)	SQ	ToleranceTableSequence	1	DICOM_2011
+(300A,0042)	IS	ToleranceTableNumber	1	DICOM_2011
+(300A,0043)	SH	ToleranceTableLabel	1	DICOM_2011
+(300A,0044)	DS	GantryAngleTolerance	1	DICOM_2011
+(300A,0046)	DS	BeamLimitingDeviceAngleTolerance	1	DICOM_2011
+(300A,0048)	SQ	BeamLimitingDeviceToleranceSequence	1	DICOM_2011
+(300A,004A)	DS	BeamLimitingDevicePositionTolerance	1	DICOM_2011
+(300A,004B)	FL	SnoutPositionTolerance	1	DICOM_2011
+(300A,004C)	DS	PatientSupportAngleTolerance	1	DICOM_2011
+(300A,004E)	DS	TableTopEccentricAngleTolerance	1	DICOM_2011
+(300A,004F)	FL	TableTopPitchAngleTolerance	1	DICOM_2011
+(300A,0050)	FL	TableTopRollAngleTolerance	1	DICOM_2011
+(300A,0051)	DS	TableTopVerticalPositionTolerance	1	DICOM_2011
+(300A,0052)	DS	TableTopLongitudinalPositionTolerance	1	DICOM_2011
+(300A,0053)	DS	TableTopLateralPositionTolerance	1	DICOM_2011
+(300A,0055)	CS	RTPlanRelationship	1	DICOM_2011
+(300A,0070)	SQ	FractionGroupSequence	1	DICOM_2011
+(300A,0071)	IS	FractionGroupNumber	1	DICOM_2011
+(300A,0072)	LO	FractionGroupDescription	1	DICOM_2011
+(300A,0078)	IS	NumberOfFractionsPlanned	1	DICOM_2011
+(300A,0079)	IS	NumberOfFractionPatternDigitsPerDay	1	DICOM_2011
+(300A,007A)	IS	RepeatFractionCycleLength	1	DICOM_2011
+(300A,007B)	LT	FractionPattern	1	DICOM_2011
+(300A,0080)	IS	NumberOfBeams	1	DICOM_2011
+(300A,0082)	DS	BeamDoseSpecificationPoint	3	DICOM_2011
+(300A,0084)	DS	BeamDose	1	DICOM_2011
+(300A,0086)	DS	BeamMeterset	1	DICOM_2011
+(300A,0088)	FL	BeamDosePointDepth	1	DICOM_2011
+(300A,0089)	FL	BeamDosePointEquivalentDepth	1	DICOM_2011
+(300A,008A)	FL	BeamDosePointSSD	1	DICOM_2011
+(300A,00A0)	IS	NumberOfBrachyApplicationSetups	1	DICOM_2011
+(300A,00A2)	DS	BrachyApplicationSetupDoseSpecificationPoint	3	DICOM_2011
+(300A,00A4)	DS	BrachyApplicationSetupDose	1	DICOM_2011
+(300A,00B0)	SQ	BeamSequence	1	DICOM_2011
+(300A,00B2)	SH	TreatmentMachineName	1	DICOM_2011
+(300A,00B3)	CS	PrimaryDosimeterUnit	1	DICOM_2011
+(300A,00B4)	DS	SourceAxisDistance	1	DICOM_2011
+(300A,00B6)	SQ	BeamLimitingDeviceSequence	1	DICOM_2011
+(300A,00B8)	CS	RTBeamLimitingDeviceType	1	DICOM_2011
+(300A,00BA)	DS	SourceToBeamLimitingDeviceDistance	1	DICOM_2011
+(300A,00BB)	FL	IsocenterToBeamLimitingDeviceDistance	1	DICOM_2011
+(300A,00BC)	IS	NumberOfLeafJawPairs	1	DICOM_2011
+(300A,00BE)	DS	LeafPositionBoundaries	3-n	DICOM_2011
+(300A,00C0)	IS	BeamNumber	1	DICOM_2011
+(300A,00C2)	LO	BeamName	1	DICOM_2011
+(300A,00C3)	ST	BeamDescription	1	DICOM_2011
+(300A,00C4)	CS	BeamType	1	DICOM_2011
+(300A,00C6)	CS	RadiationType	1	DICOM_2011
+(300A,00C7)	CS	HighDoseTechniqueType	1	DICOM_2011
+(300A,00C8)	IS	ReferenceImageNumber	1	DICOM_2011
+(300A,00CA)	SQ	PlannedVerificationImageSequence	1	DICOM_2011
+(300A,00CC)	LO	ImagingDeviceSpecificAcquisitionParameters	1-n	DICOM_2011
+(300A,00CE)	CS	TreatmentDeliveryType	1	DICOM_2011
+(300A,00D0)	IS	NumberOfWedges	1	DICOM_2011
+(300A,00D1)	SQ	WedgeSequence	1	DICOM_2011
+(300A,00D2)	IS	WedgeNumber	1	DICOM_2011
+(300A,00D3)	CS	WedgeType	1	DICOM_2011
+(300A,00D4)	SH	WedgeID	1	DICOM_2011
+(300A,00D5)	IS	WedgeAngle	1	DICOM_2011
+(300A,00D6)	DS	WedgeFactor	1	DICOM_2011
+(300A,00D7)	FL	TotalWedgeTrayWaterEquivalentThickness	1	DICOM_2011
+(300A,00D8)	DS	WedgeOrientation	1	DICOM_2011
+(300A,00D9)	FL	IsocenterToWedgeTrayDistance	1	DICOM_2011
+(300A,00DA)	DS	SourceToWedgeTrayDistance	1	DICOM_2011
+(300A,00DB)	FL	WedgeThinEdgePosition	1	DICOM_2011
+(300A,00DC)	SH	BolusID	1	DICOM_2011
+(300A,00DD)	ST	BolusDescription	1	DICOM_2011
+(300A,00E0)	IS	NumberOfCompensators	1	DICOM_2011
+(300A,00E1)	SH	MaterialID	1	DICOM_2011
+(300A,00E2)	DS	TotalCompensatorTrayFactor	1	DICOM_2011
+(300A,00E3)	SQ	CompensatorSequence	1	DICOM_2011
+(300A,00E4)	IS	CompensatorNumber	1	DICOM_2011
+(300A,00E5)	SH	CompensatorID	1	DICOM_2011
+(300A,00E6)	DS	SourceToCompensatorTrayDistance	1	DICOM_2011
+(300A,00E7)	IS	CompensatorRows	1	DICOM_2011
+(300A,00E8)	IS	CompensatorColumns	1	DICOM_2011
+(300A,00E9)	DS	CompensatorPixelSpacing	2	DICOM_2011
+(300A,00EA)	DS	CompensatorPosition	2	DICOM_2011
+(300A,00EB)	DS	CompensatorTransmissionData	1-n	DICOM_2011
+(300A,00EC)	DS	CompensatorThicknessData	1-n	DICOM_2011
+(300A,00ED)	IS	NumberOfBoli	1	DICOM_2011
+(300A,00EE)	CS	CompensatorType	1	DICOM_2011
+(300A,00F0)	IS	NumberOfBlocks	1	DICOM_2011
+(300A,00F2)	DS	TotalBlockTrayFactor	1	DICOM_2011
+(300A,00F3)	FL	TotalBlockTrayWaterEquivalentThickness	1	DICOM_2011
+(300A,00F4)	SQ	BlockSequence	1	DICOM_2011
+(300A,00F5)	SH	BlockTrayID	1	DICOM_2011
+(300A,00F6)	DS	SourceToBlockTrayDistance	1	DICOM_2011
+(300A,00F7)	FL	IsocenterToBlockTrayDistance	1	DICOM_2011
+(300A,00F8)	CS	BlockType	1	DICOM_2011
+(300A,00F9)	LO	AccessoryCode	1	DICOM_2011
+(300A,00FA)	CS	BlockDivergence	1	DICOM_2011
+(300A,00FB)	CS	BlockMountingPosition	1	DICOM_2011
+(300A,00FC)	IS	BlockNumber	1	DICOM_2011
+(300A,00FE)	LO	BlockName	1	DICOM_2011
+(300A,0100)	DS	BlockThickness	1	DICOM_2011
+(300A,0102)	DS	BlockTransmission	1	DICOM_2011
+(300A,0104)	IS	BlockNumberOfPoints	1	DICOM_2011
+(300A,0106)	DS	BlockData	2-2n	DICOM_2011
+(300A,0107)	SQ	ApplicatorSequence	1	DICOM_2011
+(300A,0108)	SH	ApplicatorID	1	DICOM_2011
+(300A,0109)	CS	ApplicatorType	1	DICOM_2011
+(300A,010A)	LO	ApplicatorDescription	1	DICOM_2011
+(300A,010C)	DS	CumulativeDoseReferenceCoefficient	1	DICOM_2011
+(300A,010E)	DS	FinalCumulativeMetersetWeight	1	DICOM_2011
+(300A,0110)	IS	NumberOfControlPoints	1	DICOM_2011
+(300A,0111)	SQ	ControlPointSequence	1	DICOM_2011
+(300A,0112)	IS	ControlPointIndex	1	DICOM_2011
+(300A,0114)	DS	NominalBeamEnergy	1	DICOM_2011
+(300A,0115)	DS	DoseRateSet	1	DICOM_2011
+(300A,0116)	SQ	WedgePositionSequence	1	DICOM_2011
+(300A,0118)	CS	WedgePosition	1	DICOM_2011
+(300A,011A)	SQ	BeamLimitingDevicePositionSequence	1	DICOM_2011
+(300A,011C)	DS	LeafJawPositions	2-2n	DICOM_2011
+(300A,011E)	DS	GantryAngle	1	DICOM_2011
+(300A,011F)	CS	GantryRotationDirection	1	DICOM_2011
+(300A,0120)	DS	BeamLimitingDeviceAngle	1	DICOM_2011
+(300A,0121)	CS	BeamLimitingDeviceRotationDirection	1	DICOM_2011
+(300A,0122)	DS	PatientSupportAngle	1	DICOM_2011
+(300A,0123)	CS	PatientSupportRotationDirection	1	DICOM_2011
+(300A,0124)	DS	TableTopEccentricAxisDistance	1	DICOM_2011
+(300A,0125)	DS	TableTopEccentricAngle	1	DICOM_2011
+(300A,0126)	CS	TableTopEccentricRotationDirection	1	DICOM_2011
+(300A,0128)	DS	TableTopVerticalPosition	1	DICOM_2011
+(300A,0129)	DS	TableTopLongitudinalPosition	1	DICOM_2011
+(300A,012A)	DS	TableTopLateralPosition	1	DICOM_2011
+(300A,012C)	DS	IsocenterPosition	3	DICOM_2011
+(300A,012E)	DS	SurfaceEntryPoint	3	DICOM_2011
+(300A,0130)	DS	SourceToSurfaceDistance	1	DICOM_2011
+(300A,0134)	DS	CumulativeMetersetWeight	1	DICOM_2011
+(300A,0140)	FL	TableTopPitchAngle	1	DICOM_2011
+(300A,0142)	CS	TableTopPitchRotationDirection	1	DICOM_2011
+(300A,0144)	FL	TableTopRollAngle	1	DICOM_2011
+(300A,0146)	CS	TableTopRollRotationDirection	1	DICOM_2011
+(300A,0148)	FL	HeadFixationAngle	1	DICOM_2011
+(300A,014A)	FL	GantryPitchAngle	1	DICOM_2011
+(300A,014C)	CS	GantryPitchRotationDirection	1	DICOM_2011
+(300A,014E)	FL	GantryPitchAngleTolerance	1	DICOM_2011
+(300A,0180)	SQ	PatientSetupSequence	1	DICOM_2011
+(300A,0182)	IS	PatientSetupNumber	1	DICOM_2011
+(300A,0183)	LO	PatientSetupLabel	1	DICOM_2011
+(300A,0184)	LO	PatientAdditionalPosition	1	DICOM_2011
+(300A,0190)	SQ	FixationDeviceSequence	1	DICOM_2011
+(300A,0192)	CS	FixationDeviceType	1	DICOM_2011
+(300A,0194)	SH	FixationDeviceLabel	1	DICOM_2011
+(300A,0196)	ST	FixationDeviceDescription	1	DICOM_2011
+(300A,0198)	SH	FixationDevicePosition	1	DICOM_2011
+(300A,0199)	FL	FixationDevicePitchAngle	1	DICOM_2011
+(300A,019A)	FL	FixationDeviceRollAngle	1	DICOM_2011
+(300A,01A0)	SQ	ShieldingDeviceSequence	1	DICOM_2011
+(300A,01A2)	CS	ShieldingDeviceType	1	DICOM_2011
+(300A,01A4)	SH	ShieldingDeviceLabel	1	DICOM_2011
+(300A,01A6)	ST	ShieldingDeviceDescription	1	DICOM_2011
+(300A,01A8)	SH	ShieldingDevicePosition	1	DICOM_2011
+(300A,01B0)	CS	SetupTechnique	1	DICOM_2011
+(300A,01B2)	ST	SetupTechniqueDescription	1	DICOM_2011
+(300A,01B4)	SQ	SetupDeviceSequence	1	DICOM_2011
+(300A,01B6)	CS	SetupDeviceType	1	DICOM_2011
+(300A,01B8)	SH	SetupDeviceLabel	1	DICOM_2011
+(300A,01BA)	ST	SetupDeviceDescription	1	DICOM_2011
+(300A,01BC)	DS	SetupDeviceParameter	1	DICOM_2011
+(300A,01D0)	ST	SetupReferenceDescription	1	DICOM_2011
+(300A,01D2)	DS	TableTopVerticalSetupDisplacement	1	DICOM_2011
+(300A,01D4)	DS	TableTopLongitudinalSetupDisplacement	1	DICOM_2011
+(300A,01D6)	DS	TableTopLateralSetupDisplacement	1	DICOM_2011
+(300A,0200)	CS	BrachyTreatmentTechnique	1	DICOM_2011
+(300A,0202)	CS	BrachyTreatmentType	1	DICOM_2011
+(300A,0206)	SQ	TreatmentMachineSequence	1	DICOM_2011
+(300A,0210)	SQ	SourceSequence	1	DICOM_2011
+(300A,0212)	IS	SourceNumber	1	DICOM_2011
+(300A,0214)	CS	SourceType	1	DICOM_2011
+(300A,0216)	LO	SourceManufacturer	1	DICOM_2011
+(300A,0218)	DS	ActiveSourceDiameter	1	DICOM_2011
+(300A,021A)	DS	ActiveSourceLength	1	DICOM_2011
+(300A,0222)	DS	SourceEncapsulationNominalThickness	1	DICOM_2011
+(300A,0224)	DS	SourceEncapsulationNominalTransmission	1	DICOM_2011
+(300A,0226)	LO	SourceIsotopeName	1	DICOM_2011
+(300A,0228)	DS	SourceIsotopeHalfLife	1	DICOM_2011
+(300A,0229)	CS	SourceStrengthUnits	1	DICOM_2011
+(300A,022A)	DS	ReferenceAirKermaRate	1	DICOM_2011
+(300A,022B)	DS	SourceStrength	1	DICOM_2011
+(300A,022C)	DA	SourceStrengthReferenceDate	1	DICOM_2011
+(300A,022E)	TM	SourceStrengthReferenceTime	1	DICOM_2011
+(300A,0230)	SQ	ApplicationSetupSequence	1	DICOM_2011
+(300A,0232)	CS	ApplicationSetupType	1	DICOM_2011
+(300A,0234)	IS	ApplicationSetupNumber	1	DICOM_2011
+(300A,0236)	LO	ApplicationSetupName	1	DICOM_2011
+(300A,0238)	LO	ApplicationSetupManufacturer	1	DICOM_2011
+(300A,0240)	IS	TemplateNumber	1	DICOM_2011
+(300A,0242)	SH	TemplateType	1	DICOM_2011
+(300A,0244)	LO	TemplateName	1	DICOM_2011
+(300A,0250)	DS	TotalReferenceAirKerma	1	DICOM_2011
+(300A,0260)	SQ	BrachyAccessoryDeviceSequence	1	DICOM_2011
+(300A,0262)	IS	BrachyAccessoryDeviceNumber	1	DICOM_2011
+(300A,0263)	SH	BrachyAccessoryDeviceID	1	DICOM_2011
+(300A,0264)	CS	BrachyAccessoryDeviceType	1	DICOM_2011
+(300A,0266)	LO	BrachyAccessoryDeviceName	1	DICOM_2011
+(300A,026A)	DS	BrachyAccessoryDeviceNominalThickness	1	DICOM_2011
+(300A,026C)	DS	BrachyAccessoryDeviceNominalTransmission	1	DICOM_2011
+(300A,0280)	SQ	ChannelSequence	1	DICOM_2011
+(300A,0282)	IS	ChannelNumber	1	DICOM_2011
+(300A,0284)	DS	ChannelLength	1	DICOM_2011
+(300A,0286)	DS	ChannelTotalTime	1	DICOM_2011
+(300A,0288)	CS	SourceMovementType	1	DICOM_2011
+(300A,028A)	IS	NumberOfPulses	1	DICOM_2011
+(300A,028C)	DS	PulseRepetitionInterval	1	DICOM_2011
+(300A,0290)	IS	SourceApplicatorNumber	1	DICOM_2011
+(300A,0291)	SH	SourceApplicatorID	1	DICOM_2011
+(300A,0292)	CS	SourceApplicatorType	1	DICOM_2011
+(300A,0294)	LO	SourceApplicatorName	1	DICOM_2011
+(300A,0296)	DS	SourceApplicatorLength	1	DICOM_2011
+(300A,0298)	LO	SourceApplicatorManufacturer	1	DICOM_2011
+(300A,029C)	DS	SourceApplicatorWallNominalThickness	1	DICOM_2011
+(300A,029E)	DS	SourceApplicatorWallNominalTransmission	1	DICOM_2011
+(300A,02A0)	DS	SourceApplicatorStepSize	1	DICOM_2011
+(300A,02A2)	IS	TransferTubeNumber	1	DICOM_2011
+(300A,02A4)	DS	TransferTubeLength	1	DICOM_2011
+(300A,02B0)	SQ	ChannelShieldSequence	1	DICOM_2011
+(300A,02B2)	IS	ChannelShieldNumber	1	DICOM_2011
+(300A,02B3)	SH	ChannelShieldID	1	DICOM_2011
+(300A,02B4)	LO	ChannelShieldName	1	DICOM_2011
+(300A,02B8)	DS	ChannelShieldNominalThickness	1	DICOM_2011
+(300A,02BA)	DS	ChannelShieldNominalTransmission	1	DICOM_2011
+(300A,02C8)	DS	FinalCumulativeTimeWeight	1	DICOM_2011
+(300A,02D0)	SQ	BrachyControlPointSequence	1	DICOM_2011
+(300A,02D2)	DS	ControlPointRelativePosition	1	DICOM_2011
+(300A,02D4)	DS	ControlPoint3DPosition	3	DICOM_2011
+(300A,02D6)	DS	CumulativeTimeWeight	1	DICOM_2011
+(300A,02E0)	CS	CompensatorDivergence	1	DICOM_2011
+(300A,02E1)	CS	CompensatorMountingPosition	1	DICOM_2011
+(300A,02E2)	DS	SourceToCompensatorDistance	1-n	DICOM_2011
+(300A,02E3)	FL	TotalCompensatorTrayWaterEquivalentThickness	1	DICOM_2011
+(300A,02E4)	FL	IsocenterToCompensatorTrayDistance	1	DICOM_2011
+(300A,02E5)	FL	CompensatorColumnOffset	1	DICOM_2011
+(300A,02E6)	FL	IsocenterToCompensatorDistances	1-n	DICOM_2011
+(300A,02E7)	FL	CompensatorRelativeStoppingPowerRatio	1	DICOM_2011
+(300A,02E8)	FL	CompensatorMillingToolDiameter	1	DICOM_2011
+(300A,02EA)	SQ	IonRangeCompensatorSequence	1	DICOM_2011
+(300A,02EB)	LT	CompensatorDescription	1	DICOM_2011
+(300A,0302)	IS	RadiationMassNumber	1	DICOM_2011
+(300A,0304)	IS	RadiationAtomicNumber	1	DICOM_2011
+(300A,0306)	SS	RadiationChargeState	1	DICOM_2011
+(300A,0308)	CS	ScanMode	1	DICOM_2011
+(300A,030A)	FL	VirtualSourceAxisDistances	2	DICOM_2011
+(300A,030C)	SQ	SnoutSequence	1	DICOM_2011
+(300A,030D)	FL	SnoutPosition	1	DICOM_2011
+(300A,030F)	SH	SnoutID	1	DICOM_2011
+(300A,0312)	IS	NumberOfRangeShifters	1	DICOM_2011
+(300A,0314)	SQ	RangeShifterSequence	1	DICOM_2011
+(300A,0316)	IS	RangeShifterNumber	1	DICOM_2011
+(300A,0318)	SH	RangeShifterID	1	DICOM_2011
+(300A,0320)	CS	RangeShifterType	1	DICOM_2011
+(300A,0322)	LO	RangeShifterDescription	1	DICOM_2011
+(300A,0330)	IS	NumberOfLateralSpreadingDevices	1	DICOM_2011
+(300A,0332)	SQ	LateralSpreadingDeviceSequence	1	DICOM_2011
+(300A,0334)	IS	LateralSpreadingDeviceNumber	1	DICOM_2011
+(300A,0336)	SH	LateralSpreadingDeviceID	1	DICOM_2011
+(300A,0338)	CS	LateralSpreadingDeviceType	1	DICOM_2011
+(300A,033A)	LO	LateralSpreadingDeviceDescription	1	DICOM_2011
+(300A,033C)	FL	LateralSpreadingDeviceWaterEquivalentThickness	1	DICOM_2011
+(300A,0340)	IS	NumberOfRangeModulators	1	DICOM_2011
+(300A,0342)	SQ	RangeModulatorSequence	1	DICOM_2011
+(300A,0344)	IS	RangeModulatorNumber	1	DICOM_2011
+(300A,0346)	SH	RangeModulatorID	1	DICOM_2011
+(300A,0348)	CS	RangeModulatorType	1	DICOM_2011
+(300A,034A)	LO	RangeModulatorDescription	1	DICOM_2011
+(300A,034C)	SH	BeamCurrentModulationID	1	DICOM_2011
+(300A,0350)	CS	PatientSupportType	1	DICOM_2011
+(300A,0352)	SH	PatientSupportID	1	DICOM_2011
+(300A,0354)	LO	PatientSupportAccessoryCode	1	DICOM_2011
+(300A,0356)	FL	FixationLightAzimuthalAngle	1	DICOM_2011
+(300A,0358)	FL	FixationLightPolarAngle	1	DICOM_2011
+(300A,035A)	FL	MetersetRate	1	DICOM_2011
+(300A,0360)	SQ	RangeShifterSettingsSequence	1	DICOM_2011
+(300A,0362)	LO	RangeShifterSetting	1	DICOM_2011
+(300A,0364)	FL	IsocenterToRangeShifterDistance	1	DICOM_2011
+(300A,0366)	FL	RangeShifterWaterEquivalentThickness	1	DICOM_2011
+(300A,0370)	SQ	LateralSpreadingDeviceSettingsSequence	1	DICOM_2011
+(300A,0372)	LO	LateralSpreadingDeviceSetting	1	DICOM_2011
+(300A,0374)	FL	IsocenterToLateralSpreadingDeviceDistance	1	DICOM_2011
+(300A,0380)	SQ	RangeModulatorSettingsSequence	1	DICOM_2011
+(300A,0382)	FL	RangeModulatorGatingStartValue	1	DICOM_2011
+(300A,0384)	FL	RangeModulatorGatingStopValue	1	DICOM_2011
+(300A,0386)	FL	RangeModulatorGatingStartWaterEquivalentThickness	1	DICOM_2011
+(300A,0388)	FL	RangeModulatorGatingStopWaterEquivalentThickness	1	DICOM_2011
+(300A,038A)	FL	IsocenterToRangeModulatorDistance	1	DICOM_2011
+(300A,0390)	SH	ScanSpotTuneID	1	DICOM_2011
+(300A,0392)	IS	NumberOfScanSpotPositions	1	DICOM_2011
+(300A,0394)	FL	ScanSpotPositionMap	1-n	DICOM_2011
+(300A,0396)	FL	ScanSpotMetersetWeights	1-n	DICOM_2011
+(300A,0398)	FL	ScanningSpotSize	2	DICOM_2011
+(300A,039A)	IS	NumberOfPaintings	1	DICOM_2011
+(300A,03A0)	SQ	IonToleranceTableSequence	1	DICOM_2011
+(300A,03A2)	SQ	IonBeamSequence	1	DICOM_2011
+(300A,03A4)	SQ	IonBeamLimitingDeviceSequence	1	DICOM_2011
+(300A,03A6)	SQ	IonBlockSequence	1	DICOM_2011
+(300A,03A8)	SQ	IonControlPointSequence	1	DICOM_2011
+(300A,03AA)	SQ	IonWedgeSequence	1	DICOM_2011
+(300A,03AC)	SQ	IonWedgePositionSequence	1	DICOM_2011
+(300A,0401)	SQ	ReferencedSetupImageSequence	1	DICOM_2011
+(300A,0402)	ST	SetupImageComment	1	DICOM_2011
+(300A,0410)	SQ	MotionSynchronizationSequence	1	DICOM_2011
+(300A,0412)	FL	ControlPointOrientation	3	DICOM_2011
+(300A,0420)	SQ	GeneralAccessorySequence	1	DICOM_2011
+(300A,0421)	SH	GeneralAccessoryID	1	DICOM_2011
+(300A,0422)	ST	GeneralAccessoryDescription	1	DICOM_2011
+(300A,0423)	CS	GeneralAccessoryType	1	DICOM_2011
+(300A,0424)	IS	GeneralAccessoryNumber	1	DICOM_2011
+(300A,0431)	SQ	ApplicatorGeometrySequence	1	DICOM_2011
+(300A,0432)	CS	ApplicatorApertureShape	1	DICOM_2011
+(300A,0433)	FL	ApplicatorOpening	1	DICOM_2011
+(300A,0434)	FL	ApplicatorOpeningX	1	DICOM_2011
+(300A,0435)	FL	ApplicatorOpeningY	1	DICOM_2011
+(300A,0436)	FL	SourceToApplicatorMountingPositionDistance	1	DICOM_2011
+(300C,0002)	SQ	ReferencedRTPlanSequence	1	DICOM_2011
+(300C,0004)	SQ	ReferencedBeamSequence	1	DICOM_2011
+(300C,0006)	IS	ReferencedBeamNumber	1	DICOM_2011
+(300C,0007)	IS	ReferencedReferenceImageNumber	1	DICOM_2011
+(300C,0008)	DS	StartCumulativeMetersetWeight	1	DICOM_2011
+(300C,0009)	DS	EndCumulativeMetersetWeight	1	DICOM_2011
+(300C,000A)	SQ	ReferencedBrachyApplicationSetupSequence	1	DICOM_2011
+(300C,000C)	IS	ReferencedBrachyApplicationSetupNumber	1	DICOM_2011
+(300C,000E)	IS	ReferencedSourceNumber	1	DICOM_2011
+(300C,0020)	SQ	ReferencedFractionGroupSequence	1	DICOM_2011
+(300C,0022)	IS	ReferencedFractionGroupNumber	1	DICOM_2011
+(300C,0040)	SQ	ReferencedVerificationImageSequence	1	DICOM_2011
+(300C,0042)	SQ	ReferencedReferenceImageSequence	1	DICOM_2011
+(300C,0050)	SQ	ReferencedDoseReferenceSequence	1	DICOM_2011
+(300C,0051)	IS	ReferencedDoseReferenceNumber	1	DICOM_2011
+(300C,0055)	SQ	BrachyReferencedDoseReferenceSequence	1	DICOM_2011
+(300C,0060)	SQ	ReferencedStructureSetSequence	1	DICOM_2011
+(300C,006A)	IS	ReferencedPatientSetupNumber	1	DICOM_2011
+(300C,0080)	SQ	ReferencedDoseSequence	1	DICOM_2011
+(300C,00A0)	IS	ReferencedToleranceTableNumber	1	DICOM_2011
+(300C,00B0)	SQ	ReferencedBolusSequence	1	DICOM_2011
+(300C,00C0)	IS	ReferencedWedgeNumber	1	DICOM_2011
+(300C,00D0)	IS	ReferencedCompensatorNumber	1	DICOM_2011
+(300C,00E0)	IS	ReferencedBlockNumber	1	DICOM_2011
+(300C,00F0)	IS	ReferencedControlPointIndex	1	DICOM_2011
+(300C,00F2)	SQ	ReferencedControlPointSequence	1	DICOM_2011
+(300C,00F4)	IS	ReferencedStartControlPointIndex	1	DICOM_2011
+(300C,00F6)	IS	ReferencedStopControlPointIndex	1	DICOM_2011
+(300C,0100)	IS	ReferencedRangeShifterNumber	1	DICOM_2011
+(300C,0102)	IS	ReferencedLateralSpreadingDeviceNumber	1	DICOM_2011
+(300C,0104)	IS	ReferencedRangeModulatorNumber	1	DICOM_2011
+(300E,0002)	CS	ApprovalStatus	1	DICOM_2011
+(300E,0004)	DA	ReviewDate	1	DICOM_2011
+(300E,0005)	TM	ReviewTime	1	DICOM_2011
+(300E,0008)	PN	ReviewerName	1	DICOM_2011
+(4010,0001)	CS	LowEnergyDetectors	1	DICOM_2011
+(4010,0002)	CS	HighEnergyDetectors	1	DICOM_2011
+(4010,0004)	SQ	DetectorGeometrySequence	1	DICOM_2011
+(4010,1001)	SQ	ThreatROIVoxelSequence	1	DICOM_2011
+(4010,1004)	FL	ThreatROIBase	3	DICOM_2011
+(4010,1005)	FL	ThreatROIExtents	3	DICOM_2011
+(4010,1006)	OB	ThreatROIBitmap	1	DICOM_2011
+(4010,1007)	SH	RouteSegmentID	1	DICOM_2011
+(4010,1008)	CS	GantryType	1	DICOM_2011
+(4010,1009)	CS	OOIOwnerType	1	DICOM_2011
+(4010,100A)	SQ	RouteSegmentSequence	1	DICOM_2011
+(4010,1010)	US	PotentialThreatObjectID	1	DICOM_2011
+(4010,1011)	SQ	ThreatSequence	1	DICOM_2011
+(4010,1012)	CS	ThreatCategory	1	DICOM_2011
+(4010,1013)	LT	ThreatCategoryDescription	1	DICOM_2011
+(4010,1014)	CS	ATDAbilityAssessment	1	DICOM_2011
+(4010,1015)	CS	ATDAssessmentFlag	1	DICOM_2011
+(4010,1016)	FL	ATDAssessmentProbability	1	DICOM_2011
+(4010,1017)	FL	Mass	1	DICOM_2011
+(4010,1018)	FL	Density	1	DICOM_2011
+(4010,1019)	FL	ZEffective	1	DICOM_2011
+(4010,101A)	SH	BoardingPassID	1	DICOM_2011
+(4010,101B)	FL	CenterOfMass	3	DICOM_2011
+(4010,101C)	FL	CenterOfPTO	3	DICOM_2011
+(4010,101D)	FL	BoundingPolygon	6-n	DICOM_2011
+(4010,101E)	SH	RouteSegmentStartLocationID	1	DICOM_2011
+(4010,101F)	SH	RouteSegmentEndLocationID	1	DICOM_2011
+(4010,1020)	CS	RouteSegmentLocationIDType	1	DICOM_2011
+(4010,1021)	CS	AbortReason	1-n	DICOM_2011
+(4010,1023)	FL	VolumeOfPTO	1	DICOM_2011
+(4010,1024)	CS	AbortFlag	1	DICOM_2011
+(4010,1025)	DT	RouteSegmentStartTime	1	DICOM_2011
+(4010,1026)	DT	RouteSegmentEndTime	1	DICOM_2011
+(4010,1027)	CS	TDRType	1	DICOM_2011
+(4010,1028)	CS	InternationalRouteSegment	1	DICOM_2011
+(4010,1029)	LO	ThreatDetectionAlgorithmandVersion	1-n	DICOM_2011
+(4010,102A)	SH	AssignedLocation	1	DICOM_2011
+(4010,102B)	DT	AlarmDecisionTime	1	DICOM_2011
+(4010,1031)	CS	AlarmDecision	1	DICOM_2011
+(4010,1033)	US	NumberOfTotalObjects	1	DICOM_2011
+(4010,1034)	US	NumberOfAlarmObjects	1	DICOM_2011
+(4010,1037)	SQ	PTORepresentationSequence	1	DICOM_2011
+(4010,1038)	SQ	ATDAssessmentSequence	1	DICOM_2011
+(4010,1039)	CS	TIPType	1	DICOM_2011
+(4010,103A)	CS	DICOSVersion	1	DICOM_2011
+(4010,1041)	DT	OOIOwnerCreationTime	1	DICOM_2011
+(4010,1042)	CS	OOIType	1	DICOM_2011
+(4010,1043)	FL	OOISize	3	DICOM_2011
+(4010,1044)	CS	AcquisitionStatus	1	DICOM_2011
+(4010,1045)	SQ	BasisMaterialsCodeSequence	1	DICOM_2011
+(4010,1046)	CS	PhantomType	1	DICOM_2011
+(4010,1047)	SQ	OOIOwnerSequence	1	DICOM_2011
+(4010,1048)	CS	ScanType	1	DICOM_2011
+(4010,1051)	LO	ItineraryID	1	DICOM_2011
+(4010,1052)	SH	ItineraryIDType	1	DICOM_2011
+(4010,1053)	LO	ItineraryIDAssigningAuthority	1	DICOM_2011
+(4010,1054)	SH	RouteID	1	DICOM_2011
+(4010,1055)	SH	RouteIDAssigningAuthority	1	DICOM_2011
+(4010,1056)	CS	InboundArrivalType	1	DICOM_2011
+(4010,1058)	SH	CarrierID	1	DICOM_2011
+(4010,1059)	CS	CarrierIDAssigningAuthority	1	DICOM_2011
+(4010,1060)	FL	SourceOrientation	3	DICOM_2011
+(4010,1061)	FL	SourcePosition	3	DICOM_2011
+(4010,1062)	FL	BeltHeight	1	DICOM_2011
+(4010,1064)	SQ	AlgorithmRoutingCodeSequence	1	DICOM_2011
+(4010,1067)	CS	TransportClassification	1	DICOM_2011
+(4010,1068)	LT	OOITypeDescriptor	1	DICOM_2011
+(4010,1069)	FL	TotalProcessingTime	1	DICOM_2011
+(4010,106C)	OB	DetectorCalibrationData	1	DICOM_2011
+(4FFE,0001)	SQ	MACParametersSequence	1	DICOM_2011
+(5200,9229)	SQ	SharedFunctionalGroupsSequence	1	DICOM_2011
+(5200,9230)	SQ	PerFrameFunctionalGroupsSequence	1	DICOM_2011
+(5400,0100)	SQ	WaveformSequence	1	DICOM_2011
+(5400,0110)	ox	ChannelMinimumValue	1	DICOM_2011
+(5400,0112)	ox	ChannelMaximumValue	1	DICOM_2011
+(5400,1004)	US	WaveformBitsAllocated	1	DICOM_2011
+(5400,1006)	CS	WaveformSampleInterpretation	1	DICOM_2011
+(5400,100A)	ox	WaveformPaddingValue	1	DICOM_2011
+(5400,1010)	ox	WaveformData	1	DICOM_2011
+(5600,0010)	OF	FirstOrderPhaseCorrectionAngle	1	DICOM_2011
+(5600,0020)	OF	SpectroscopyData	1	DICOM_2011
+(6000-60FF,0010)	US	OverlayRows	1	DICOM_2011
+(6000-60FF,0011)	US	OverlayColumns	1	DICOM_2011
+(6000-60FF,0015)	IS	NumberOfFramesInOverlay	1	DICOM_2011
+(6000-60FF,0022)	LO	OverlayDescription	1	DICOM_2011
+(6000-60FF,0040)	CS	OverlayType	1	DICOM_2011
+(6000-60FF,0045)	LO	OverlaySubtype	1	DICOM_2011
+(6000-60FF,0050)	SS	OverlayOrigin	2	DICOM_2011
+(6000-60FF,0051)	US	ImageFrameOrigin	1	DICOM_2011
+(6000-60FF,0100)	US	OverlayBitsAllocated	1	DICOM_2011
+(6000-60FF,0102)	US	OverlayBitPosition	1	DICOM_2011
+(6000-60FF,1001)	CS	OverlayActivationLayer	1	DICOM_2011
+(6000-60FF,1301)	IS	ROIArea	1	DICOM_2011
+(6000-60FF,1302)	DS	ROIMean	1	DICOM_2011
+(6000-60FF,1303)	DS	ROIStandardDeviation	1	DICOM_2011
+(6000-60FF,1500)	LO	OverlayLabel	1	DICOM_2011
+(6000-60FF,3000)	ox	OverlayData	1	DICOM_2011
+(7FE0,0010)	ox	PixelData	1	DICOM_2011
+(FFFA,FFFA)	SQ	DigitalSignaturesSequence	1	DICOM_2011
+(FFFC,FFFC)	OB	DataSetTrailingPadding	1	DICOM_2011
+(FFFE,E000)	na	Item	1	DICOM_2011
+(FFFE,E00D)	na	ItemDelimitationItem	1	DICOM_2011
+(FFFE,E0DD)	na	SequenceDelimitationItem	1	DICOM_2011
+#
+#---------------------------------------------------------------------------
+#
+# Supplement 152 (Ophthalmic Thickness Map Storage SOP Class)
+#
+(0022,1415)	CS	OphthalmicMappingDeviceType	1	Supplement_152
+(0022,1420)	SQ	AcquisitionTypeMethodSequence	1	Supplement_152
+(0022,1423)	SQ	AcquisitonMethodAlgorithmSequence	1	Supplement_152
+(0022,1436)	SQ	OphthalmicThicknessMapTypeCodeSequence	1	Supplement_152
+(0022,1443)	SQ	OphthalmicThicknessMappingNormalsSequence	1	Supplement_152
+(0022,1445)	SQ	RetinalThicknessDefinitionCodeSequence	1	Supplement_152
+(0022,1450)	SQ	PixelValueMappingtoCodedConceptSequence	1	Supplement_152
+(0022,1452)	xs	MappedPixelValue	1	Supplement_152
+(0022,1454)	LO	PixelValueMappingExplanation	1	Supplement_152
+(0022,1458)	SQ	OphthalmicThicknessMapQualityThresholdSequence	1	Supplement_152
+(0022,1460)	FL	OphthalmicThicknessMapThresholdQualityRating	1	Supplement_152
+(0022,1463)	FL	AnatomicStructureReferencePoint	2	Supplement_152
+(0022,1465)	SQ	RegistrationtoLocalizerSequence	1	Supplement_152
+(0022,1466)	CS	RegisteredLocalizerUnits	1	Supplement_152
+(0022,1467)	FL	RegisteredTopLeftHandCorner	2	Supplement_152
+(0022,1468)	FL	RegisteredBottomRightHandCorner	2	Supplement_152
+(0022,1470)	SQ	OphthalmicThicknessMapQualityRatingSequence	1	Supplement_152
+(0022,1472)	SQ	RelevantOPTAttributesSequence	1	Supplement_152
+#
+#---------------------------------------------------------------------------
+#
+# Correction Items 1064, 1147
+#
+(0040,A161)	FD	FloatingPointValue	1-n	CP_1064
+(0040,A162)	SL	RationalNumeratorValue	1-n	CP_1064
+(0040,A163)	UL	RationalDenominatorValue	1-n	CP_1064
+#
+(0040,A171)	UI	ObservationUID	1	CP_1147
+#
+#---------------------------------------------------------------------------
+#
+# Private Creator Data Elements
+#
+(0009-o-ffff,0000)	UL	PrivateGroupLength	1	PRIVATE
+(0009-o-ffff,0010-u-00ff)	LO	PrivateCreator	1	PRIVATE
+(0001-o-0007,0000)	UL	IllegalGroupLength	1	ILLEGAL
+(0001-o-0007,0010-u-00ff)	LO	IllegalPrivateCreator	1	ILLEGAL
+#
+#---------------------------------------------------------------------------
+#
+# A "catch all" for group length elements
+#
+(0000-u-ffff,0000)	UL	GenericGroupLength	1	GENERIC
+#
+#---------------------------------------------------------------------------
+#
+# Retired data elements from ACR/NEMA 2 (1988)
+#
+(0000,0001)	UL	ACR_NEMA_CommandGroupLengthToEnd	1	ACR/NEMA2
+(0000,0010)	CS	ACR_NEMA_CommandRecognitionCode	1	ACR/NEMA2
+(0000,0200)	LO	ACR_NEMA_Initiator	1	ACR/NEMA2
+(0000,0300)	LO	ACR_NEMA_Receiver	1	ACR/NEMA2
+(0000,0400)	LO	ACR_NEMA_FindLocation	1	ACR/NEMA2
+(0000,0850)	US	ACR_NEMA_NumberOfMatches	1	ACR/NEMA2
+(0000,0860)	US	ACR_NEMA_ResponseSequenceNumber	1	ACR/NEMA2
+(0000,4000)	LO	ACR_NEMA_DialogReceiver	1	ACR/NEMA2
+(0000,4010)	LO	ACR_NEMA_TerminalType	1	ACR/NEMA2
+(0000,5010)	LO	ACR_NEMA_MessageSetID	1	ACR/NEMA2
+(0000,5020)	LO	ACR_NEMA_EndMessageSet	1	ACR/NEMA2
+(0000,5110)	LO	ACR_NEMA_DisplayFormat	1	ACR/NEMA2
+(0000,5120)	LO	ACR_NEMA_PagePositionID	1	ACR/NEMA2
+(0000,5130)	LO	ACR_NEMA_TextFormatID	1	ACR/NEMA2
+(0000,5140)	CS	ACR_NEMA_NormalReverse	1	ACR/NEMA2
+(0000,5150)	CS	ACR_NEMA_AddGrayScale	1	ACR/NEMA2
+(0000,5160)	CS	ACR_NEMA_Borders	1	ACR/NEMA2
+(0000,5170)	IS	ACR_NEMA_Copies	1	ACR/NEMA2
+(0000,5180)	LO	ACR_NEMA_MagnificationType	1	ACR/NEMA2
+(0000,5190)	LO	ACR_NEMA_Erase	1-n	ACR/NEMA2
+(0000,51A0)	CS	ACR_NEMA_Print	1	ACR/NEMA2
+(0000,51B0)	US	ACR_NEMA_Overlays	1-n	ACR/NEMA2
+(0008,0001)	UL	ACR_NEMA_IdentifyingGroupLengthToEnd	1	ACR/NEMA2
+(0008,0010)	LO	ACR_NEMA_RecognitionCode	1	ACR/NEMA2
+(0008,0040)	US	ACR_NEMA_OldDataSetType	1	ACR/NEMA2
+(0008,0041)	LO	ACR_NEMA_DataSetSubtype	1	ACR/NEMA2
+(0008,1000)	LO	ACR_NEMA_NetworkID	1	ACR/NEMA2
+(0008,4000)	LT	ACR_NEMA_IdentifyingComments	1-n	ACR/NEMA2
+(0010,1050)	LT	ACR_NEMA_InsurancePlanIdentification	1-n	ACR/NEMA2
+(0018,1240)	IS	ACR_NEMA_UpperLowerPixelValues	1-n	ACR/NEMA2
+(0018,4000)	LT	ACR_NEMA_AcquisitionComments	1-n	ACR/NEMA2
+(0018,5030)	DS	ACR_NEMA_DynamicRange	1	ACR/NEMA2
+(0018,5040)	DS	ACR_NEMA_TotalGain	1	ACR/NEMA2
+(0020,0030)	DS	ACR_NEMA_ImagePosition	3	ACR/NEMA2
+(0020,0035)	DS	ACR_NEMA_ImageOrientation	6	ACR/NEMA2
+(0020,0050)	DS	ACR_NEMA_Location	1	ACR/NEMA2
+(0020,0070)	LO	ACR_NEMA_ImageGeometryType	1	ACR/NEMA2
+(0020,0080)	LO	ACR_NEMA_MaskingImage	1-n	ACR/NEMA2
+(0020,1001)	IS	ACR_NEMA_AcquisitionsInSeries	1	ACR/NEMA2
+(0020,1003)	IS	ACR_NEMA_ImagesInSeries	1	ACR/NEMA2
+(0020,1005)	IS	ACR_NEMA_ImagesInStudy	1	ACR/NEMA2
+(0020,1020)	LO	ACR_NEMA_Reference	1-n	ACR/NEMA2
+(0020,3100-31FF)	LO	ACR_NEMA_SourceImageID	1-n	ACR/NEMA2
+(0020,3401)	LO	ACR_NEMA_ModifyingDeviceID	1	ACR/NEMA2
+(0020,3402)	LO	ACR_NEMA_ModifiedImageID	1	ACR/NEMA2
+(0020,3403)	DA	ACR_NEMA_ModifiedImageDate	1	ACR/NEMA2
+(0020,3404)	LO	ACR_NEMA_ModifyingDeviceManufacturer	1	ACR/NEMA2
+(0020,3405)	TM	ACR_NEMA_ModifiedImageTime	1	ACR/NEMA2
+(0020,3406)	LO	ACR_NEMA_ModifiedImageDescription	1	ACR/NEMA2
+(0020,5000)	AT	ACR_NEMA_OriginalImageIdentification	1-n	ACR/NEMA2
+(0020,5002)	LO	ACR_NEMA_OriginalImageIdentificationNomenclature	1-n	ACR/NEMA2
+(0028,0005)	US	ACR_NEMA_ImageDimensions	1	ACR/NEMA2
+(0028,0040)	CS	ACR_NEMA_ImageFormat	1	ACR/NEMA2
+(0028,0050)	LO	ACR_NEMA_ManipulatedImage	1-n	ACR/NEMA2
+(0028,0060)	CS	ACR_NEMA_CompressionCode	1	ACR/NEMA2
+(0028,0104)	xs	ACR_NEMA_SmallestValidPixelValue	1	ACR/NEMA2
+(0028,0105)	xs	ACR_NEMA_LargestValidPixelValue	1	ACR/NEMA2
+(0028,0200)	US	ACR_NEMA_ImageLocation	1	ACR/NEMA2
+(0028,1080)	CS	ACR_NEMA_GrayScale	1	ACR/NEMA2
+(0028,1100)	xs	ACR_NEMA_GrayLookupTableDescriptor	3	ACR/NEMA2
+(0028,1200)	xs	ACR_NEMA_GrayLookupTableData	1-n	ACR/NEMA2
+(0028,4000)	LT	ACR_NEMA_ImagePresentationComments	1-n	ACR/NEMA2
+(4000,0000)	UL	ACR_NEMA_TextGroupLength	1	ACR/NEMA2
+(4000,0010)	LT	ACR_NEMA_TextArbitrary	1-n	ACR/NEMA2
+(4000,4000)	LT	ACR_NEMA_TextComments	1-n	ACR/NEMA2
+(6000-60ff,0110)	CS	ACR_NEMA_OverlayFormat	1	ACR/NEMA2
+(6000-60ff,0200)	US	ACR_NEMA_OverlayLocation	1	ACR/NEMA2
+(6000-60ff,4000)	LT	ACR_NEMA_OverlayComments	1-n	ACR/NEMA2
+#
+#---------------------------------------------------------------------------
+#
+# Retired data elements from the ACR/NEMA 2 compression enhancements
+#
+(0028,005F)	CS	ACR_NEMA_2C_CompressionRecognitionCode	1	ACR/NEMA2C
+(0028,0061)	SH	ACR_NEMA_2C_CompressionOriginator	1	ACR/NEMA2C
+(0028,0062)	SH	ACR_NEMA_2C_CompressionLabel	1	ACR/NEMA2C
+(0028,0063)	SH	ACR_NEMA_2C_CompressionDescription	1	ACR/NEMA2C
+(0028,0065)	CS	ACR_NEMA_2C_CompressionSequence	1-n	ACR/NEMA2C
+(0028,0066)	AT	ACR_NEMA_2C_CompressionStepPointers	1-n	ACR/NEMA2C
+(0028,0068)	US	ACR_NEMA_2C_RepeatInterval	1	ACR/NEMA2C
+(0028,0069)	US	ACR_NEMA_2C_BitsGrouped	1	ACR/NEMA2C
+(0028,0070)	US	ACR_NEMA_2C_PerimeterTable	1-n	ACR/NEMA2C
+(0028,0071)	xs	ACR_NEMA_2C_PerimeterValue	1	ACR/NEMA2C
+(0028,0080)	US	ACR_NEMA_2C_PredictorRows	1	ACR/NEMA2C
+(0028,0081)	US	ACR_NEMA_2C_PredictorColumns	1	ACR/NEMA2C
+(0028,0082)	US	ACR_NEMA_2C_PredictorConstants	1-n	ACR/NEMA2C
+(0028,0090)	CS	ACR_NEMA_2C_BlockedPixels	1	ACR/NEMA2C
+(0028,0091)	US	ACR_NEMA_2C_BlockRows	1	ACR/NEMA2C
+(0028,0092)	US	ACR_NEMA_2C_BlockColumns	1	ACR/NEMA2C
+(0028,0093)	US	ACR_NEMA_2C_RowOverlap	1	ACR/NEMA2C
+(0028,0094)	US	ACR_NEMA_2C_ColumnOverlap	1	ACR/NEMA2C
+(0028,0400)	CS	ACR_NEMA_2C_TransformLabel	1	ACR/NEMA2C
+(0028,0401)	CS	ACR_NEMA_2C_TransformVersionNumber	1	ACR/NEMA2C
+(0028,0402)	US	ACR_NEMA_2C_NumberOfTransformSteps	1	ACR/NEMA2C
+(0028,0403)	CS	ACR_NEMA_2C_SequenceOfCompressedData	1-n	ACR/NEMA2C
+(0028,0404)	AT	ACR_NEMA_2C_DetailsOfCoefficients	1-n	ACR/NEMA2C
+(0028,0410)	US	ACR_NEMA_2C_RowsForNthOrderCoefficients	1	ACR/NEMA2C
+(0028,0411)	US	ACR_NEMA_2C_ColumnsForNthOrderCoefficients	1	ACR/NEMA2C
+(0028,0412)	CS	ACR_NEMA_2C_CoefficientCoding	1-n	ACR/NEMA2C
+(0028,0413)	AT	ACR_NEMA_2C_CoefficientCodingPointers	1-n	ACR/NEMA2C
+(0028,0700)	CS	ACR_NEMA_2C_DCTLabel	1	ACR/NEMA2C
+(0028,0701)	CS	ACR_NEMA_2C_DataBlockDescription	1-n	ACR/NEMA2C
+(0028,0702)	AT	ACR_NEMA_2C_DataBlock	1-n	ACR/NEMA2C
+(0028,0710)	US	ACR_NEMA_2C_NormalizationFactorFormat	1	ACR/NEMA2C
+(0028,0720)	US	ACR_NEMA_2C_ZonalMapNumberFormat	1	ACR/NEMA2C
+(0028,0721)	AT	ACR_NEMA_2C_ZonalMapLocation	1-n	ACR/NEMA2C
+(0028,0722)	US	ACR_NEMA_2C_ZonalMapFormat	1	ACR/NEMA2C
+(0028,0730)	US	ACR_NEMA_2C_AdaptiveMapFormat	1	ACR/NEMA2C
+(0028,0740)	US	ACR_NEMA_2C_CodeNumberFormat	1	ACR/NEMA2C
+(0028,0800)	CS	ACR_NEMA_2C_CodeLabel	1-n	ACR/NEMA2C
+(0028,0802)	US	ACR_NEMA_2C_NumberOfTables	1	ACR/NEMA2C
+(0028,0803)	AT	ACR_NEMA_2C_CodeTableLocation	1-n	ACR/NEMA2C
+(0028,0804)	US	ACR_NEMA_2C_BitsForCodeWord	1	ACR/NEMA2C
+(0028,0808)	AT	ACR_NEMA_2C_ImageDataLocation	1-n	ACR/NEMA2C
+(1000,0000)	UL	ACR_NEMA_2C_CodeTableGroupLength	1	ACR/NEMA2C
+(1000,0010)	US	ACR_NEMA_2C_EscapeTriplet	3	ACR/NEMA2C
+(1000,0011)	US	ACR_NEMA_2C_RunLengthTriplet	3	ACR/NEMA2C
+(1000,0012)	US	ACR_NEMA_2C_HuffmanTableSize	1	ACR/NEMA2C
+(1000,0013)	US	ACR_NEMA_2C_HuffmanTableTriplet	3	ACR/NEMA2C
+(1000,0014)	US	ACR_NEMA_2C_ShiftTableSize	1	ACR/NEMA2C
+(1000,0015)	US	ACR_NEMA_2C_ShiftTableTriplet	3	ACR/NEMA2C
+(1010,0000)	UL	ACR_NEMA_2C_ZonalMapGroupLength	1	ACR/NEMA2C
+(1010,0004)	US	ACR_NEMA_2C_ZonalMap	1-n	ACR/NEMA2C
+(6000-60ff,0060)	CS	ACR_NEMA_2C_OverlayCompressionCode	1	ACR/NEMA2C
+(6000-60ff,0061)	SH	ACR_NEMA_2C_OverlayCompressionOriginator	1	ACR/NEMA2C
+(6000-60ff,0062)	SH	ACR_NEMA_2C_OverlayCompressionLabel	1	ACR/NEMA2C
+(6000-60ff,0063)	SH	ACR_NEMA_2C_OverlayCompressionDescription	1	ACR/NEMA2C
+(6000-60ff,0066)	AT	ACR_NEMA_2C_OverlayCompressionStepPointers	1-n	ACR/NEMA2C
+(6000-60ff,0068)	US	ACR_NEMA_2C_OverlayRepeatInterval	1	ACR/NEMA2C
+(6000-60ff,0069)	US	ACR_NEMA_2C_OverlayBitsGrouped	1	ACR/NEMA2C
+(6000-60ff,0800)	CS	ACR_NEMA_2C_OverlayCodeLabel	1-n	ACR/NEMA2C
+(6000-60ff,0802)	US	ACR_NEMA_2C_OverlayNumberOfTables	1	ACR/NEMA2C
+(6000-60ff,0803)	AT	ACR_NEMA_2C_OverlayCodeTableLocation	1-n	ACR/NEMA2C
+(6000-60ff,0804)	US	ACR_NEMA_2C_OverlayBitsForCodeWord	1	ACR/NEMA2C
+(7F00-7fff,0000)	UL	ACR_NEMA_2C_VariablePixelDataGroupLength	1	ACR/NEMA2C
+(7F00-7fff,0010)	ox	ACR_NEMA_2C_VariablePixelData	1	ACR/NEMA2C
+(7F00-7fff,0011)	AT	ACR_NEMA_2C_VariableNextDataGroup	1	ACR/NEMA2C
+(7F00-7fff,0020)	OW	ACR_NEMA_2C_VariableCoefficientsSDVN	1-n	ACR/NEMA2C
+(7F00-7fff,0030)	OW	ACR_NEMA_2C_VariableCoefficientsSDHN	1-n	ACR/NEMA2C
+(7F00-7fff,0040)	OW	ACR_NEMA_2C_VariableCoefficientsSDDN	1-n	ACR/NEMA2C
+(7FE0,0020)	OW	ACR_NEMA_2C_CoefficientsSDVN	1-n	ACR/NEMA2C
+(7FE0,0030)	OW	ACR_NEMA_2C_CoefficientsSDHN	1-n	ACR/NEMA2C
+(7FE0,0040)	OW	ACR_NEMA_2C_CoefficientsSDDN	1-n	ACR/NEMA2C
+#
+#---------------------------------------------------------------------------
+#
+# Retired data elements from previous editions of the DICOM standard
+#
+(0000,0001)	UL	RETIRED_CommandLengthToEnd	1	DICOM/retired
+(0000,0010)	SH	RETIRED_CommandRecognitionCode	1	DICOM/retired
+(0000,0200)	AE	RETIRED_Initiator	1	DICOM/retired
+(0000,0300)	AE	RETIRED_Receiver	1	DICOM/retired
+(0000,0400)	AE	RETIRED_FindLocation	1	DICOM/retired
+(0000,0850)	US	RETIRED_NumberOfMatches	1	DICOM/retired
+(0000,0860)	US	RETIRED_ResponseSequenceNumber	1	DICOM/retired
+(0000,4000)	AT	RETIRED_DialogReceiver	1	DICOM/retired
+(0000,4010)	AT	RETIRED_TerminalType	1	DICOM/retired
+(0000,5010)	SH	RETIRED_MessageSetID	1	DICOM/retired
+(0000,5020)	SH	RETIRED_EndMessageID	1	DICOM/retired
+(0000,5110)	AT	RETIRED_DisplayFormat	1	DICOM/retired
+(0000,5120)	AT	RETIRED_PagePositionID	1	DICOM/retired
+(0000,5130)	CS	RETIRED_TextFormatID	1	DICOM/retired
+(0000,5140)	CS	RETIRED_NormalReverse	1	DICOM/retired
+(0000,5150)	CS	RETIRED_AddGrayScale	1	DICOM/retired
+(0000,5160)	CS	RETIRED_Borders	1	DICOM/retired
+(0000,5170)	IS	RETIRED_Copies	1	DICOM/retired
+(0000,5180)	CS	RETIRED_CommandMagnificationType	1	DICOM/retired
+(0000,5190)	CS	RETIRED_Erase	1	DICOM/retired
+(0000,51A0)	CS	RETIRED_Print	1	DICOM/retired
+(0000,51B0)	US	RETIRED_Overlays	1-n	DICOM/retired
+(0004,1504)	up	RETIRED_MRDRDirectoryRecordOffset	1	DICOM/retired
+(0004,1600)	UL	RETIRED_NumberOfReferences	1	DICOM/retired
+(0008,0001)	UL	RETIRED_LengthToEnd	1	DICOM/retired
+(0008,0010)	SH	RETIRED_RecognitionCode	1	DICOM/retired
+(0008,0024)	DA	RETIRED_OverlayDate	1	DICOM/retired
+(0008,0025)	DA	RETIRED_CurveDate	1	DICOM/retired
+(0008,0034)	TM	RETIRED_OverlayTime	1	DICOM/retired
+(0008,0035)	TM	RETIRED_CurveTime	1	DICOM/retired
+(0008,0040)	US	RETIRED_DataSetType	1	DICOM/retired
+(0008,0041)	LO	RETIRED_DataSetSubtype	1	DICOM/retired
+(0008,0042)	CS	RETIRED_NuclearMedicineSeriesType	1	DICOM/retired
+(0008,1000)	AE	RETIRED_NetworkID	1	DICOM/retired
+(0008,1100)	SQ	RETIRED_ReferencedResultsSequence	1	DICOM/retired
+(0008,1130)	SQ	RETIRED_ReferencedOverlaySequence	1	DICOM/retired
+(0008,1145)	SQ	RETIRED_ReferencedCurveSequence	1	DICOM/retired
+(0008,2110)	CS	RETIRED_LossyImageCompressionRetired	1	DICOM/retired
+(0008,2200)	CS	RETIRED_TransducerPosition	1	DICOM/retired
+(0008,2204)	CS	RETIRED_TransducerOrientation	1	DICOM/retired
+(0008,2208)	CS	RETIRED_AnatomicStructure	1	DICOM/retired
+(0008,2240)	SQ	RETIRED_TransducerPositionSequence	1	DICOM/retired
+(0008,2242)	SQ	RETIRED_TransducerPositionModifierSequence	1	DICOM/retired
+(0008,2244)	SQ	RETIRED_TransducerOrientationSequence	1	DICOM/retired
+(0008,2246)	SQ	RETIRED_TransducerOrientationModifierSequence	1	DICOM/retired
+(0008,2251)	SQ	RETIRED_AnatomicStructureSpaceOrRegionCodeSequenceTrial	1	DICOM/retired
+(0008,2253)	SQ	RETIRED_AnatomicPortalOfEntranceCodeSequenceTrial	1	DICOM/retired
+(0008,2255)	SQ	RETIRED_AnatomicApproachDirectionCodeSequenceTrial	1	DICOM/retired
+(0008,2256)	ST	RETIRED_AnatomicPerspectiveDescriptionTrial	1	DICOM/retired
+(0008,2257)	SQ	RETIRED_AnatomicPerspectiveCodeSequenceTrial	1	DICOM/retired
+(0008,2258)	ST	RETIRED_AnatomicLocationOfExaminingInstrumentDescriptionTrial	1	DICOM/retired
+(0008,2259)	SQ	RETIRED_AnatomicLocationOfExaminingInstrumentCodeSequenceTrial	1	DICOM/retired
+(0008,225A)	SQ	RETIRED_AnatomicStructureSpaceOrRegionModifierCodeSequenceTrial	1	DICOM/retired
+(0008,225C)	SQ	RETIRED_OnAxisBackgroundAnatomicStructureCodeSequenceTrial	1	DICOM/retired
+(0008,4000)	LT	RETIRED_IdentifyingComments	1	DICOM/retired
+(0010,1050)	LO	RETIRED_InsurancePlanIdentification	1-n	DICOM/retired
+(0018,0030)	LO	RETIRED_Radionuclide	1-n	DICOM/retired
+(0018,0032)	DS	RETIRED_EnergyWindowCenterline	1	DICOM/retired
+(0018,0033)	DS	RETIRED_EnergyWindowTotalWidth	1-n	DICOM/retired
+(0018,0037)	CS	RETIRED_TherapyType	1	DICOM/retired
+(0018,0039)	CS	RETIRED_TherapyDescription	1	DICOM/retired
+(0018,1011)	LO	RETIRED_HardcopyCreationDeviceID	1	DICOM/retired
+(0018,1017)	LO	RETIRED_HardcopyDeviceManufacturer	1	DICOM/retired
+(0018,101A)	LO	RETIRED_HardcopyDeviceSoftwareVersion	1-n	DICOM/retired
+(0018,101B)	LO	RETIRED_HardcopyDeviceManufacturerModelName	1	DICOM/retired
+(0018,1141)	DS	RETIRED_AngularPosition	1	DICOM/retired
+(0018,1146)	DS	RETIRED_RotationOffset	1-n	DICOM/retired
+(0018,1240)	IS	RETIRED_UpperLowerPixelValues	1-n	DICOM/retired
+(0018,4000)	LT	RETIRED_AcquisitionComments	1	DICOM/retired
+(0018,5021)	LO	RETIRED_PostprocessingFunction	1	DICOM/retired
+(0018,5030)	DS	RETIRED_DynamicRange	1	DICOM/retired
+(0018,5040)	DS	RETIRED_TotalGain	1	DICOM/retired
+(0018,5210)	DS	RETIRED_ImageTransformationMatrix	6	DICOM/retired
+(0018,5212)	DS	RETIRED_ImageTranslationVector	3	DICOM/retired
+(0018,6038)	UL	RETIRED_DopplerSampleVolumeXPositionRetired	1	DICOM/retired
+(0018,603A)	UL	RETIRED_DopplerSampleVolumeYPositionRetired	1	DICOM/retired
+(0018,603C)	UL	RETIRED_TMLinePositionX0Retired	1	DICOM/retired
+(0018,603E)	UL	RETIRED_TMLinePositionY0Retired	1	DICOM/retired
+(0018,6040)	UL	RETIRED_TMLinePositionX1Retired	1	DICOM/retired
+(0018,6042)	UL	RETIRED_TMLinePositionY1Retired	1	DICOM/retired
+(0018,9096)	FD	RETIRED_ParallelReductionFactorInPlaneRetired	1	DICOM/retired
+(0018,9166)	CS	RETIRED_BulkMotionStatus	1	DICOM/retired
+(0018,9195)	FD	RETIRED_ChemicalShiftMinimumIntegrationLimitInHz	1	DICOM/retired
+(0018,9196)	FD	RETIRED_ChemicalShiftMaximumIntegrationLimitInHz	1	DICOM/retired
+(0020,0014)	IS	RETIRED_IsotopeNumber	1	DICOM/retired
+(0020,0015)	IS	RETIRED_PhaseNumber	1	DICOM/retired
+(0020,0016)	IS	RETIRED_IntervalNumber	1	DICOM/retired
+(0020,0017)	IS	RETIRED_TimeSlotNumber	1	DICOM/retired
+(0020,0018)	IS	RETIRED_AngleNumber	1	DICOM/retired
+(0020,0022)	IS	RETIRED_OverlayNumber	1	DICOM/retired
+(0020,0024)	IS	RETIRED_CurveNumber	1	DICOM/retired
+(0020,0026)	IS	RETIRED_LUTNumber	1	DICOM/retired
+(0020,0030)	DS	RETIRED_ImagePosition	3	DICOM/retired
+(0020,0035)	DS	RETIRED_ImageOrientation	6	DICOM/retired
+(0020,0050)	DS	RETIRED_Location	1	DICOM/retired
+(0020,0070)	LO	RETIRED_ImageGeometryType	1	DICOM/retired
+(0020,0080)	CS	RETIRED_MaskingImage	1-n	DICOM/retired
+(0020,00AA)	IS	RETIRED_ReportNumber	1	DICOM/retired
+(0020,1000)	IS	RETIRED_SeriesInStudy	1	DICOM/retired
+(0020,1001)	IS	RETIRED_AcquisitionsInSeries	1	DICOM/retired
+(0020,1003)	IS	RETIRED_ImagesInSeries	1	DICOM/retired
+(0020,1004)	IS	RETIRED_AcquisitionsInStudy	1	DICOM/retired
+(0020,1005)	IS	RETIRED_ImagesInStudy	1	DICOM/retired
+(0020,1020)	LO	RETIRED_Reference	1-n	DICOM/retired
+(0020,1070)	IS	RETIRED_OtherStudyNumbers	1-n	DICOM/retired
+(0020,3100-31FF)	CS	RETIRED_SourceImageIDs	1-n	DICOM/retired
+(0020,3401)	CS	RETIRED_ModifyingDeviceID	1	DICOM/retired
+(0020,3402)	CS	RETIRED_ModifiedImageID	1	DICOM/retired
+(0020,3403)	DA	RETIRED_ModifiedImageDate	1	DICOM/retired
+(0020,3404)	LO	RETIRED_ModifyingDeviceManufacturer	1	DICOM/retired
+(0020,3405)	TM	RETIRED_ModifiedImageTime	1	DICOM/retired
+(0020,3406)	LO	RETIRED_ModifiedImageDescription	1	DICOM/retired
+(0020,5000)	AT	RETIRED_OriginalImageIdentification	1-n	DICOM/retired
+(0020,5002)	LO	RETIRED_OriginalImageIdentificationNomenclature	1-n	DICOM/retired
+(0028,0005)	US	RETIRED_ImageDimensions	1	DICOM/retired
+(0028,0012)	US	RETIRED_Planes	1	DICOM/retired
+(0028,0040)	CS	RETIRED_ImageFormat	1	DICOM/retired
+(0028,0050)	LO	RETIRED_ManipulatedImage	1-n	DICOM/retired
+(0028,005F)	LO	RETIRED_CompressionRecognitionCode	1	DICOM/retired
+(0028,0060)	CS	RETIRED_CompressionCode	1	DICOM/retired
+(0028,0061)	SH	RETIRED_CompressionOriginator	1	DICOM/retired
+(0028,0062)	LO	RETIRED_CompressionLabel	1	DICOM/retired
+(0028,0063)	SH	RETIRED_CompressionDescription	1	DICOM/retired
+(0028,0065)	CS	RETIRED_CompressionSequence	1-n	DICOM/retired
+(0028,0066)	AT	RETIRED_CompressionStepPointers	1-n	DICOM/retired
+(0028,0068)	US	RETIRED_RepeatInterval	1	DICOM/retired
+(0028,0069)	US	RETIRED_BitsGrouped	1	DICOM/retired
+(0028,0070)	US	RETIRED_PerimeterTable	1-n	DICOM/retired
+(0028,0071)	xs	RETIRED_PerimeterValue	1	DICOM/retired
+(0028,0080)	US	RETIRED_PredictorRows	1	DICOM/retired
+(0028,0081)	US	RETIRED_PredictorColumns	1	DICOM/retired
+(0028,0082)	US	RETIRED_PredictorConstants	1-n	DICOM/retired
+(0028,0090)	CS	RETIRED_BlockedPixels	1	DICOM/retired
+(0028,0091)	US	RETIRED_BlockRows	1	DICOM/retired
+(0028,0092)	US	RETIRED_BlockColumns	1	DICOM/retired
+(0028,0093)	US	RETIRED_RowOverlap	1	DICOM/retired
+(0028,0094)	US	RETIRED_ColumnOverlap	1	DICOM/retired
+(0028,0104)	xs	RETIRED_SmallestValidPixelValue	1	DICOM/retired
+(0028,0105)	xs	RETIRED_LargestValidPixelValue	1	DICOM/retired
+(0028,0110)	xs	RETIRED_SmallestImagePixelValueInPlane	1	DICOM/retired
+(0028,0111)	xs	RETIRED_LargestImagePixelValueInPlane	1	DICOM/retired
+(0028,0200)	US	RETIRED_ImageLocation	1	DICOM/retired
+(0028,0400)	LO	RETIRED_TransformLabel	1	DICOM/retired
+(0028,0401)	LO	RETIRED_TransformVersionNumber	1	DICOM/retired
+(0028,0402)	US	RETIRED_NumberOfTransformSteps	1	DICOM/retired
+(0028,0403)	LO	RETIRED_SequenceOfCompressedData	1-n	DICOM/retired
+(0028,0404)	AT	RETIRED_DetailsOfCoefficients	1-n	DICOM/retired
+#(0028,04X0)	US	RETIRED_RowsForNthOrderCoefficients	1	DICOM/retired
+#(0028,04X1)	US	RETIRED_ColumnsForNthOrderCoefficients	1	DICOM/retired
+#(0028,04X2)	LO	RETIRED_CoefficientCoding	1-n	DICOM/retired
+#(0028,04X3)	AT	RETIRED_CoefficientCodingPointers	1-n	DICOM/retired
+(0028,0700)	LO	RETIRED_DCTLabel	1	DICOM/retired
+(0028,0701)	CS	RETIRED_DataBlockDescription	1-n	DICOM/retired
+(0028,0702)	AT	RETIRED_DataBlock	1-n	DICOM/retired
+(0028,0710)	US	RETIRED_NormalizationFactorFormat	1	DICOM/retired
+(0028,0720)	US	RETIRED_ZonalMapNumberFormat	1	DICOM/retired
+(0028,0721)	AT	RETIRED_ZonalMapLocation	1-n	DICOM/retired
+(0028,0722)	US	RETIRED_ZonalMapFormat	1	DICOM/retired
+(0028,0730)	US	RETIRED_AdaptiveMapFormat	1	DICOM/retired
+(0028,0740)	US	RETIRED_CodeNumberFormat	1	DICOM/retired
+#(0028,08X0)	CS	RETIRED_CodeLabel	1-n	DICOM/retired
+#(0028,08X2)	US	RETIRED_NumberOfTables	1	DICOM/retired
+#(0028,08X3)	AT	RETIRED_CodeTableLocation	1-n	DICOM/retired
+#(0028,08X4)	US	RETIRED_BitsForCodeWord	1	DICOM/retired
+#(0028,08X8)	AT	RETIRED_ImageDataLocation	1-n	DICOM/retired
+(0028,1080)	CS	RETIRED_GrayScale	1	DICOM/retired
+(0028,1100)	xs	RETIRED_GrayLookupTableDescriptor	3	DICOM/retired
+(0028,1111)	xs	RETIRED_LargeRedPaletteColorLookupTableDescriptor	4	DICOM/retired
+(0028,1112)	xs	RETIRED_LargeGreenPaletteColorLookupTableDescriptor	4	DICOM/retired
+(0028,1113)	xs	RETIRED_LargeBluePaletteColorLookupTableDescriptor	4	DICOM/retired
+(0028,1200)	lt	RETIRED_GrayLookupTableData	1-n	DICOM/retired
+(0028,1211)	OW	RETIRED_LargeRedPaletteColorLookupTableData	1	DICOM/retired
+(0028,1212)	OW	RETIRED_LargeGreenPaletteColorLookupTableData	1	DICOM/retired
+(0028,1213)	OW	RETIRED_LargeBluePaletteColorLookupTableData	1	DICOM/retired
+(0028,1214)	UI	RETIRED_LargePaletteColorLookupTableUID	1	DICOM/retired
+(0028,4000)	LT	RETIRED_ImagePresentationComments	1	DICOM/retired
+(0028,5000)	SQ	RETIRED_BiPlaneAcquisitionSequence	1	DICOM/retired
+(0028,6030)	US	RETIRED_MaskPointers	1-n	DICOM/retired
+(0028,9099)	US	RETIRED_LargestMonochromePixelValue	1	DICOM/retired
+(0032,000A)	CS	RETIRED_StudyStatusID	1	DICOM/retired
+(0032,000C)	CS	RETIRED_StudyPriorityID	1	DICOM/retired
+(0032,0012)	LO	RETIRED_StudyIDIssuer	1	DICOM/retired
+(0032,0032)	DA	RETIRED_StudyVerifiedDate	1	DICOM/retired
+(0032,0033)	TM	RETIRED_StudyVerifiedTime	1	DICOM/retired
+(0032,0034)	DA	RETIRED_StudyReadDate	1	DICOM/retired
+(0032,0035)	TM	RETIRED_StudyReadTime	1	DICOM/retired
+(0032,1000)	DA	RETIRED_ScheduledStudyStartDate	1	DICOM/retired
+(0032,1001)	TM	RETIRED_ScheduledStudyStartTime	1	DICOM/retired
+(0032,1010)	DA	RETIRED_ScheduledStudyStopDate	1	DICOM/retired
+(0032,1011)	TM	RETIRED_ScheduledStudyStopTime	1	DICOM/retired
+(0032,1020)	LO	RETIRED_ScheduledStudyLocation	1	DICOM/retired
+(0032,1021)	AE	RETIRED_ScheduledStudyLocationAETitle	1-n	DICOM/retired
+(0032,1030)	LO	RETIRED_ReasonForStudy	1	DICOM/retired
+(0032,1040)	DA	RETIRED_StudyArrivalDate	1	DICOM/retired
+(0032,1041)	TM	RETIRED_StudyArrivalTime	1	DICOM/retired
+(0032,1050)	DA	RETIRED_StudyCompletionDate	1	DICOM/retired
+(0032,1051)	TM	RETIRED_StudyCompletionTime	1	DICOM/retired
+(0032,1055)	CS	RETIRED_StudyComponentStatusID	1	DICOM/retired
+(0032,4000)	LT	RETIRED_StudyComments	1	DICOM/retired
+(0038,0011)	LO	RETIRED_IssuerOfAdmissionID	1	DICOM/retired
+(0038,001A)	DA	RETIRED_ScheduledAdmissionDate	1	DICOM/retired
+(0038,001B)	TM	RETIRED_ScheduledAdmissionTime	1	DICOM/retired
+(0038,001C)	DA	RETIRED_ScheduledDischargeDate	1	DICOM/retired
+(0038,001D)	TM	RETIRED_ScheduledDischargeTime	1	DICOM/retired
+(0038,001E)	LO	RETIRED_ScheduledPatientInstitutionResidence	1	DICOM/retired
+(0038,0030)	DA	RETIRED_DischargeDate	1	DICOM/retired
+(0038,0032)	TM	RETIRED_DischargeTime	1	DICOM/retired
+(0038,0040)	LO	RETIRED_DischargeDiagnosisDescription	1	DICOM/retired
+(0038,0044)	SQ	RETIRED_DischargeDiagnosisCodeSequence	1	DICOM/retired
+(0038,0061)	LO	RETIRED_IssuerOfServiceEpisodeID	1	DICOM/retired
+(0040,0307)	DS	RETIRED_DistanceSourceToSupport	1	DICOM/retired
+(0040,0330)	SQ	RETIRED_ReferencedProcedureStepSequence	1	DICOM/retired
+(0040,050A)	LO	RETIRED_SpecimenAccessionNumber	1	DICOM/retired
+(0040,0550)	SQ	RETIRED_SpecimenSequence	1	DICOM/retired
+(0040,0552)	SQ	RETIRED_SpecimenDescriptionSequenceTrial	1	DICOM/retired
+(0040,0553)	ST	RETIRED_SpecimenDescriptionTrial	1	DICOM/retired
+(0040,06FA)	LO	RETIRED_SlideIdentifier	1	DICOM/retired
+(0040,08D8)	SQ	RETIRED_PixelSpacingSequence	1	DICOM/retired
+(0040,08DA)	SQ	RETIRED_CoordinateSystemAxisCodeSequence	1	DICOM/retired
+(0040,09F8)	SQ	RETIRED_VitalStainCodeSequenceTrial	1	DICOM/retired
+(0040,1006)	SH	RETIRED_PlacerOrderNumberProcedure	1	DICOM/retired
+(0040,1007)	SH	RETIRED_FillerOrderNumberProcedure	1	DICOM/retired
+(0040,1060)	LO	RETIRED_RequestedProcedureDescriptionTrial	1	DICOM/retired
+(0040,2001)	LO	RETIRED_ReasonForTheImagingServiceRequest	1	DICOM/retired
+(0040,2006)	SH	RETIRED_PlacerOrderNumberImagingServiceRequestRetired	1	DICOM/retired
+(0040,2007)	SH	RETIRED_FillerOrderNumberImagingServiceRequestRetired	1	DICOM/retired
+(0040,A007)	CS	RETIRED_FindingsFlagTrial	1	DICOM/retired
+(0040,A020)	SQ	RETIRED_FindingsSequenceTrial	1	DICOM/retired
+(0040,A021)	UI	RETIRED_FindingsGroupUIDTrial	1	DICOM/retired
+(0040,A022)	UI	RETIRED_ReferencedFindingsGroupUIDTrial	1	DICOM/retired
+(0040,A023)	DA	RETIRED_FindingsGroupRecordingDateTrial	1	DICOM/retired
+(0040,A024)	TM	RETIRED_FindingsGroupRecordingTimeTrial	1	DICOM/retired
+(0040,A026)	SQ	RETIRED_FindingsSourceCategoryCodeSequenceTrial	1	DICOM/retired
+(0040,A028)	SQ	RETIRED_DocumentingOrganizationIdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A047)	LO	RETIRED_MeasurementPrecisionDescriptionTrial	1	DICOM/retired
+(0040,A057)	CS	RETIRED_UrgencyOrPriorityAlertsTrial	1-n	DICOM/retired
+(0040,A060)	LO	RETIRED_SequencingIndicatorTrial	1	DICOM/retired
+(0040,A066)	SQ	RETIRED_DocumentIdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A067)	PN	RETIRED_DocumentAuthorTrial	1	DICOM/retired
+(0040,A068)	SQ	RETIRED_DocumentAuthorIdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A070)	SQ	RETIRED_IdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A074)	OB	RETIRED_ObjectBinaryIdentifierTrial	1	DICOM/retired
+(0040,A076)	SQ	RETIRED_DocumentingObserverIdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A085)	SQ	RETIRED_ProcedureIdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A089)	OB	RETIRED_ObjectDirectoryBinaryIdentifierTrial	1	DICOM/retired
+(0040,A090)	SQ	RETIRED_EquivalentCDADocumentSequence	1	DICOM/retired
+(0040,A110)	DA	RETIRED_DateOfDocumentOrVerbalTransactionTrial	1	DICOM/retired
+(0040,A112)	TM	RETIRED_TimeOfDocumentCreationOrVerbalTransactionTrial	1	DICOM/retired
+(0040,A125)	CS	RETIRED_ReportStatusIDTrial	2	DICOM/retired
+(0040,A167)	SQ	RETIRED_ObservationCategoryCodeSequenceTrial	1	DICOM/retired
+(0040,A16A)	ST	RETIRED_BibliographicCitationTrial	1	DICOM/retired
+# the following attribute is defined as SQ in the DICOM standard,
+# it was defined as CS in Supplement 23 (frozen draft) from 1997.
+#(0040,A170)	CS	RETIRED_ObservationClassTrial	1	DICOM/retired
+# the following attribute has been reintroduced with CP-1147
+#(0040,A171)	UI	RETIRED_ObservationUIDTrial	1	DICOM/retired
+(0040,A172)	UI	RETIRED_ReferencedObservationUIDTrial	1	DICOM/retired
+(0040,A173)	CS	RETIRED_ReferencedObservationClassTrial	1	DICOM/retired
+(0040,A174)	CS	RETIRED_ReferencedObjectObservationClassTrial	1	DICOM/retired
+(0040,A192)	DA	RETIRED_ObservationDateTrial	1	DICOM/retired
+(0040,A193)	TM	RETIRED_ObservationTimeTrial	1	DICOM/retired
+(0040,A194)	CS	RETIRED_MeasurementAutomationTrial	1	DICOM/retired
+(0040,A224)	ST	RETIRED_IdentificationDescriptionTrial	1	DICOM/retired
+(0040,A290)	CS	RETIRED_CoordinatesSetGeometricTypeTrial	1	DICOM/retired
+(0040,A296)	SQ	RETIRED_AlgorithmCodeSequenceTrial	1	DICOM/retired
+(0040,A297)	ST	RETIRED_AlgorithmDescriptionTrial	1	DICOM/retired
+(0040,A29A)	SL	RETIRED_PixelCoordinatesSetTrial	2-2n	DICOM/retired
+(0040,A307)	PN	RETIRED_CurrentObserverTrial	1	DICOM/retired
+(0040,A313)	SQ	RETIRED_ReferencedAccessionSequenceTrial	1	DICOM/retired
+(0040,A33A)	ST	RETIRED_ReportStatusCommentTrial	1	DICOM/retired
+(0040,A340)	SQ	RETIRED_ProcedureContextSequenceTrial	1	DICOM/retired
+(0040,A352)	PN	RETIRED_VerbalSourceTrial	1	DICOM/retired
+(0040,A353)	ST	RETIRED_AddressTrial	1	DICOM/retired
+(0040,A354)	LO	RETIRED_TelephoneNumberTrial	1	DICOM/retired
+(0040,A358)	SQ	RETIRED_VerbalSourceIdentifierCodeSequenceTrial	1	DICOM/retired
+(0040,A380)	SQ	RETIRED_ReportDetailSequenceTrial	1	DICOM/retired
+(0040,A402)	UI	RETIRED_ObservationSubjectUIDTrial	1	DICOM/retired
+(0040,A403)	CS	RETIRED_ObservationSubjectClassTrial	1	DICOM/retired
+(0040,A404)	SQ	RETIRED_ObservationSubjectTypeCodeSequenceTrial	1	DICOM/retired
+(0040,A600)	CS	RETIRED_ObservationSubjectContextFlagTrial	1	DICOM/retired
+(0040,A601)	CS	RETIRED_ObserverContextFlagTrial	1	DICOM/retired
+(0040,A603)	CS	RETIRED_ProcedureContextFlagTrial	1	DICOM/retired
+(0040,A731)	SQ	RETIRED_RelationshipSequenceTrial	1	DICOM/retired
+(0040,A732)	SQ	RETIRED_RelationshipTypeCodeSequenceTrial	1	DICOM/retired
+(0040,A744)	SQ	RETIRED_LanguageCodeSequenceTrial	1	DICOM/retired
+(0040,A992)	ST	RETIRED_UniformResourceLocatorTrial	1	DICOM/retired
+(0040,DB06)	DT	RETIRED_TemplateVersion	1	DICOM/retired
+(0040,DB07)	DT	RETIRED_TemplateLocalVersion	1	DICOM/retired
+(0040,DB0B)	CS	RETIRED_TemplateExtensionFlag	1	DICOM/retired
+(0040,DB0C)	UI	RETIRED_TemplateExtensionOrganizationUID	1	DICOM/retired
+(0040,DB0D)	UI	RETIRED_TemplateExtensionCreatorUID	1	DICOM/retired
+(0054,1400)	CS	RETIRED_CountsIncluded	1-n	DICOM/retired
+(0054,1401)	CS	RETIRED_DeadTimeCorrectionFlag	1	DICOM/retired
+(0070,0040)	IS	RETIRED_ImageRotationRetired	1	DICOM/retired
+(0070,0050)	US	RETIRED_DisplayedAreaTopLeftHandCornerTrial	2	DICOM/retired
+(0070,0051)	US	RETIRED_DisplayedAreaBottomRightHandCornerTrial	2	DICOM/retired
+(0070,0067)	US	RETIRED_GraphicLayerRecommendedDisplayRGBValue	3	DICOM/retired
+(0074,1024)	IS	RETIRED_BeamOrderIndexTrial	1	DICOM/retired
+(0074,1038)	DS	RETIRED_DoubleExposureMetersetTrial	1	DICOM/retired
+(0074,103A)	DS	RETIRED_DoubleExposureFieldDeltaTrial	4	DICOM/retired
+(0074,1220)	SQ	RETIRED_RelatedProcedureStepSequence	1	DICOM/retired
+(0074,1222)	LO	RETIRED_ProcedureStepRelationshipType	1	DICOM/retired
+(0088,0904)	LO	RETIRED_TopicTitle	1	DICOM/retired
+(0088,0906)	ST	RETIRED_TopicSubject	1	DICOM/retired
+(0088,0910)	LO	RETIRED_TopicAuthor	1	DICOM/retired
+(0088,0912)	LO	RETIRED_TopicKeywords	1-32	DICOM/retired
+#(1000,XXX0)	US	RETIRED_EscapeTriplet	3	DICOM/retired
+#(1000,XXX0)	US	RETIRED_RunLengthTriplet	3	DICOM/retired
+#(1000,XXX0)	US	RETIRED_HuffmanTableSize	1	DICOM/retired
+#(1000,XXX0)	US	RETIRED_HuffmanTableTriplet	3	DICOM/retired
+#(1000,XXX0)	US	RETIRED_ShiftTableSize	1	DICOM/retired
+#(1000,XXX0)	US	RETIRED_ShiftTableTriplet	3	DICOM/retired
+#(1010,XXXX)	US	RETIRED_ZonalMap	1-n	DICOM/retired
+(2000,0062)	CS	RETIRED_ColorImagePrintingFlag	1	DICOM/retired
+(2000,0063)	CS	RETIRED_CollationFlag	1	DICOM/retired
+(2000,0065)	CS	RETIRED_AnnotationFlag	1	DICOM/retired
+(2000,0067)	CS	RETIRED_ImageOverlayFlag	1	DICOM/retired
+(2000,0069)	CS	RETIRED_PresentationLUTFlag	1	DICOM/retired
+(2000,006A)	CS	RETIRED_ImageBoxPresentationLUTFlag	1	DICOM/retired
+(2000,0510)	SQ	RETIRED_ReferencedStoredPrintSequence	1	DICOM/retired
+(2020,0130)	SQ	RETIRED_ReferencedImageOverlayBoxSequence	1	DICOM/retired
+(2020,0140)	SQ	RETIRED_ReferencedVOILUTBoxSequence	1	DICOM/retired
+(2040,0010)	SQ	RETIRED_ReferencedOverlayPlaneSequence	1	DICOM/retired
+(2040,0011)	US	RETIRED_ReferencedOverlayPlaneGroups	1-99	DICOM/retired
+(2040,0020)	SQ	RETIRED_OverlayPixelDataSequence	1	DICOM/retired
+(2040,0060)	CS	RETIRED_OverlayMagnificationType	1	DICOM/retired
+(2040,0070)	CS	RETIRED_OverlaySmoothingType	1	DICOM/retired
+(2040,0072)	CS	RETIRED_OverlayOrImageMagnification	1	DICOM/retired
+(2040,0074)	US	RETIRED_MagnifyToNumberOfColumns	1	DICOM/retired
+(2040,0080)	CS	RETIRED_OverlayForegroundDensity	1	DICOM/retired
+(2040,0082)	CS	RETIRED_OverlayBackgroundDensity	1	DICOM/retired
+(2040,0090)	CS	RETIRED_OverlayMode	1	DICOM/retired
+(2040,0100)	CS	RETIRED_ThresholdDensity	1	DICOM/retired
+(2040,0500)	SQ	RETIRED_ReferencedImageBoxSequenceRetired	1	DICOM/retired
+(2100,0010)	SH	RETIRED_PrintJobID	1	DICOM/retired
+(2100,0140)	AE	RETIRED_DestinationAE	1	DICOM/retired
+(2100,0500)	SQ	RETIRED_ReferencedPrintJobSequencePullStoredPrint	1	DICOM/retired
+(2110,0099)	SH	RETIRED_PrintQueueID	1	DICOM/retired
+(2120,0010)	CS	RETIRED_QueueStatus	1	DICOM/retired
+(2120,0050)	SQ	RETIRED_PrintJobDescriptionSequence	1	DICOM/retired
+(2120,0070)	SQ	RETIRED_ReferencedPrintJobSequence	1	DICOM/retired
+(2130,0010)	SQ	RETIRED_PrintManagementCapabilitiesSequence	1	DICOM/retired
+(2130,0015)	SQ	RETIRED_PrinterCharacteristicsSequence	1	DICOM/retired
+(2130,0030)	SQ	RETIRED_FilmBoxContentSequence	1	DICOM/retired
+(2130,0040)	SQ	RETIRED_ImageBoxContentSequence	1	DICOM/retired
+(2130,0050)	SQ	RETIRED_AnnotationContentSequence	1	DICOM/retired
+(2130,0060)	SQ	RETIRED_ImageOverlayBoxContentSequence	1	DICOM/retired
+(2130,0080)	SQ	RETIRED_PresentationLUTContentSequence	1	DICOM/retired
+(2130,00A0)	SQ	RETIRED_ProposedStudySequence	1	DICOM/retired
+(2130,00C0)	SQ	RETIRED_OriginalImageSequence	1	DICOM/retired
+(4000,0010)	LT	RETIRED_Arbitrary	1	DICOM/retired
+(4000,4000)	LT	RETIRED_TextComments	1	DICOM/retired
+(4008,0040)	SH	RETIRED_ResultsID	1	DICOM/retired
+(4008,0042)	LO	RETIRED_ResultsIDIssuer	1	DICOM/retired
+(4008,0050)	SQ	RETIRED_ReferencedInterpretationSequence	1	DICOM/retired
+(4008,00FF)	CS	RETIRED_ReportProductionStatusTrial	1	DICOM/retired
+(4008,0100)	DA	RETIRED_InterpretationRecordedDate	1	DICOM/retired
+(4008,0101)	TM	RETIRED_InterpretationRecordedTime	1	DICOM/retired
+(4008,0102)	PN	RETIRED_InterpretationRecorder	1	DICOM/retired
+(4008,0103)	LO	RETIRED_ReferenceToRecordedSound	1	DICOM/retired
+(4008,0108)	DA	RETIRED_InterpretationTranscriptionDate	1	DICOM/retired
+(4008,0109)	TM	RETIRED_InterpretationTranscriptionTime	1	DICOM/retired
+(4008,010A)	PN	RETIRED_InterpretationTranscriber	1	DICOM/retired
+(4008,010B)	ST	RETIRED_InterpretationText	1	DICOM/retired
+(4008,010C)	PN	RETIRED_InterpretationAuthor	1	DICOM/retired
+(4008,0111)	SQ	RETIRED_InterpretationApproverSequence	1	DICOM/retired
+(4008,0112)	DA	RETIRED_InterpretationApprovalDate	1	DICOM/retired
+(4008,0113)	TM	RETIRED_InterpretationApprovalTime	1	DICOM/retired
+(4008,0114)	PN	RETIRED_PhysicianApprovingInterpretation	1	DICOM/retired
+(4008,0115)	LT	RETIRED_InterpretationDiagnosisDescription	1	DICOM/retired
+(4008,0117)	SQ	RETIRED_InterpretationDiagnosisCodeSequence	1	DICOM/retired
+(4008,0118)	SQ	RETIRED_ResultsDistributionListSequence	1	DICOM/retired
+(4008,0119)	PN	RETIRED_DistributionName	1	DICOM/retired
+(4008,011A)	LO	RETIRED_DistributionAddress	1	DICOM/retired
+(4008,0200)	SH	RETIRED_InterpretationID	1	DICOM/retired
+(4008,0202)	LO	RETIRED_InterpretationIDIssuer	1	DICOM/retired
+(4008,0210)	CS	RETIRED_InterpretationTypeID	1	DICOM/retired
+(4008,0212)	CS	RETIRED_InterpretationStatusID	1	DICOM/retired
+(4008,0300)	ST	RETIRED_Impressions	1	DICOM/retired
+(4008,4000)	ST	RETIRED_ResultsComments	1	DICOM/retired
+(5000-50FF,0005)	US	RETIRED_CurveDimensions	1	DICOM/retired
+(5000-50FF,0010)	US	RETIRED_NumberOfPoints	1	DICOM/retired
+(5000-50FF,0020)	CS	RETIRED_TypeOfData	1	DICOM/retired
+(5000-50FF,0022)	LO	RETIRED_CurveDescription	1	DICOM/retired
+(5000-50FF,0030)	SH	RETIRED_AxisUnits	1-n	DICOM/retired
+(5000-50FF,0040)	SH	RETIRED_AxisLabels	1-n	DICOM/retired
+(5000-50FF,0103)	US	RETIRED_DataValueRepresentation	1	DICOM/retired
+(5000-50FF,0104)	US	RETIRED_MinimumCoordinateValue	1-n	DICOM/retired
+(5000-50FF,0105)	US	RETIRED_MaximumCoordinateValue	1-n	DICOM/retired
+(5000-50FF,0106)	SH	RETIRED_CurveRange	1-n	DICOM/retired
+(5000-50FF,0110)	US	RETIRED_CurveDataDescriptor	1-n	DICOM/retired
+(5000-50FF,0112)	US	RETIRED_CoordinateStartValue	1-n	DICOM/retired
+(5000-50FF,0114)	US	RETIRED_CoordinateStepValue	1-n	DICOM/retired
+(5000-50FF,1001)	CS	RETIRED_CurveActivationLayer	1	DICOM/retired
+(5000-50FF,2000)	US	RETIRED_AudioType	1	DICOM/retired
+(5000-50FF,2002)	US	RETIRED_AudioSampleFormat	1	DICOM/retired
+(5000-50FF,2004)	US	RETIRED_NumberOfChannels	1	DICOM/retired
+(5000-50FF,2006)	UL	RETIRED_NumberOfSamples	1	DICOM/retired
+(5000-50FF,2008)	UL	RETIRED_SampleRate	1	DICOM/retired
+(5000-50FF,200A)	UL	RETIRED_TotalTime	1	DICOM/retired
+(5000-50FF,200C)	ox	RETIRED_AudioSampleData	1	DICOM/retired
+(5000-50FF,200E)	LT	RETIRED_AudioComments	1	DICOM/retired
+(5000-50FF,2500)	LO	RETIRED_CurveLabel	1	DICOM/retired
+(5000-50FF,2600)	SQ	RETIRED_CurveReferencedOverlaySequence	1	DICOM/retired
+(5000-50FF,2610)	US	RETIRED_CurveReferencedOverlayGroup	1	DICOM/retired
+(5000-50FF,3000)	ox	RETIRED_CurveData	1	DICOM/retired
+(6000-60FF,0012)	US	RETIRED_OverlayPlanes	1	DICOM/retired
+(6000-60FF,0052)	US	RETIRED_OverlayPlaneOrigin	1	DICOM/retired
+(6000-60FF,0060)	CS	RETIRED_OverlayCompressionCode	1	DICOM/retired
+(6000-60FF,0061)	SH	RETIRED_OverlayCompressionOriginator	1	DICOM/retired
+(6000-60FF,0062)	SH	RETIRED_OverlayCompressionLabel	1	DICOM/retired
+(6000-60FF,0063)	CS	RETIRED_OverlayCompressionDescription	1	DICOM/retired
+(6000-60FF,0066)	AT	RETIRED_OverlayCompressionStepPointers	1-n	DICOM/retired
+(6000-60FF,0068)	US	RETIRED_OverlayRepeatInterval	1	DICOM/retired
+(6000-60FF,0069)	US	RETIRED_OverlayBitsGrouped	1	DICOM/retired
+(6000-60FF,0110)	CS	RETIRED_OverlayFormat	1	DICOM/retired
+(6000-60FF,0200)	US	RETIRED_OverlayLocation	1	DICOM/retired
+(6000-60FF,0800)	CS	RETIRED_OverlayCodeLabel	1-n	DICOM/retired
+(6000-60FF,0802)	US	RETIRED_OverlayNumberOfTables	1	DICOM/retired
+(6000-60FF,0803)	AT	RETIRED_OverlayCodeTableLocation	1-n	DICOM/retired
+(6000-60FF,0804)	US	RETIRED_OverlayBitsForCodeWord	1	DICOM/retired
+(6000-60FF,1100)	US	RETIRED_OverlayDescriptorGray	1	DICOM/retired
+(6000-60FF,1101)	US	RETIRED_OverlayDescriptorRed	1	DICOM/retired
+(6000-60FF,1102)	US	RETIRED_OverlayDescriptorGreen	1	DICOM/retired
+(6000-60FF,1103)	US	RETIRED_OverlayDescriptorBlue	1	DICOM/retired
+(6000-60FF,1200)	US	RETIRED_OverlaysGray	1-n	DICOM/retired
+(6000-60FF,1201)	US	RETIRED_OverlaysRed	1-n	DICOM/retired
+(6000-60FF,1202)	US	RETIRED_OverlaysGreen	1-n	DICOM/retired
+(6000-60FF,1203)	US	RETIRED_OverlaysBlue	1-n	DICOM/retired
+(6000-60FF,4000)	LT	RETIRED_OverlayComments	1	DICOM/retired
+(7FE0,0020)	OW	RETIRED_CoefficientsSDVN	1	DICOM/retired
+(7FE0,0030)	OW	RETIRED_CoefficientsSDHN	1	DICOM/retired
+(7FE0,0040)	OW	RETIRED_CoefficientsSDDN	1	DICOM/retired
+(7F00-7FFF,0010)	ox	RETIRED_VariablePixelData	1	DICOM/retired
+(7F00-7FFF,0011)	US	RETIRED_VariableNextDataGroup	1	DICOM/retired
+(7F00-7FFF,0020)	OW	RETIRED_VariableCoefficientsSDVN	1	DICOM/retired
+(7F00-7FFF,0030)	OW	RETIRED_VariableCoefficientsSDHN	1	DICOM/retired
+(7F00-7FFF,0040)	OW	RETIRED_VariableCoefficientsSDDN	1	DICOM/retired
+#
+# EOF
+#
diff --git a/SrcLib/io/fwDcmtkTools/src/fwDcmtkTools/Dictionary.cpp b/SrcLib/io/fwDcmtkTools/src/fwDcmtkTools/Dictionary.cpp
new file mode 100644
index 0000000..1c80a84
--- /dev/null
+++ b/SrcLib/io/fwDcmtkTools/src/fwDcmtkTools/Dictionary.cpp
@@ -0,0 +1,37 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#include "fwDcmtkTools/Dictionary.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmdata/dcdict.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+namespace fwDcmtkTools
+{
+
+void Dictionary::loadDictionary()
+{
+    // Make sure data dictionary is loaded
+    if (!dcmDataDict.isDictionaryLoaded())
+    {
+        ::boost::filesystem::path full_path(::boost::filesystem::initial_path< ::boost::filesystem::path >());
+        std::string dicoPath = full_path.string() + "/share/fwDcmtkTools_0-1/dicom.dic";
+        bool loaded          = dcmDataDict.wrlock().loadDictionary(dicoPath.c_str());
+        dcmDataDict.unlock();
+        SLM_ERROR_IF("Unable to load DICOM dictionary !", loaded);
+        SLM_ASSERT("Unable to load DICOM dictionary !", loaded);
+        SLM_TRACE("DICOM dictionary loaded !");
+    }
+}
+
+} //fwDcmtkTools
diff --git a/SrcLib/io/fwDicomIOFilter/CMakeLists.txt b/SrcLib/io/fwDicomIOFilter/CMakeLists.txt
new file mode 100644
index 0000000..58471da
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/CMakeLists.txt
@@ -0,0 +1,5 @@
+fwLoadProperties()
+
+find_package(DCMTK REQUIRED)
+fwForwardInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
diff --git a/SrcLib/io/fwDicomIOFilter/Properties.cmake b/SrcLib/io/fwDicomIOFilter/Properties.cmake
new file mode 100644
index 0000000..fe61aa8
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/Properties.cmake
@@ -0,0 +1,11 @@
+set( NAME fwDicomIOFilter )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES
+    fwCore
+    fwTools
+    fwData
+    fwMath
+    fwMedData
+    fwLog
+)
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp
new file mode 100644
index 0000000..5b8cbd5
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/IFilter.hpp
@@ -0,0 +1,103 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_IFILTER_HPP__
+#define __FWDICOMIOFILTER_IFILTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/factory/new.hpp"
+#include "fwDicomIOFilter/registry/detail.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwLog/Logger.hpp>
+#include <fwTools/Object.hpp>
+
+namespace fwDicomIOFilter
+{
+
+/**
+ * @brief Base class for Dicom instance filter.
+ */
+class FWDICOMIOFILTER_CLASS_API IFilter :   public ::fwTools::Object,
+                                            public ::fwTools::DynamicAttributes< ::fwDicomIOFilter::IFilter >
+{
+public:
+
+    typedef ::fwDicomIOFilter::factory::Key Key;
+
+    /**
+     * @brief Class used to register a class factory in factory registry.
+     * This class defines also the object factory ( 'create' )
+     *
+     * @tparam T Factory product type
+     */
+    template <typename T>
+    class Registrar
+    {
+    public:
+        Registrar()
+        {
+            ::fwDicomIOFilter::registry::get()->addFactory(T::classname(), &::fwDicomIOFilter::factory::New<T>);
+        }
+    };
+
+    fwCoreNonInstanciableClassDefinitionsMacro( (IFilter)(::fwTools::Object) );
+
+    typedef std::vector< ::fwMedData::DicomSeries::sptr > DicomSeriesContainerType;
+
+    /**
+     * @brief Filter types
+     */
+    typedef enum
+    {
+        MODIFIER  = 0,  /*! Modifier */
+        SORTER    = 1,  /*! Sorter */
+        SPLITTER  = 2,  /*! Splitter */
+        COMPOSITE = 3,  /*! Composite */
+        CUSTOM    = 4,  /*! Custom */
+    } FilterType;
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~IFilter();
+
+    /**
+     * @brief Apply the filter
+     * @return Returns one or more Dicom Instance Group
+     */
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure) = 0;
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const = 0;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const = 0;
+
+    /// Return filter type
+    FWDICOMIOFILTER_API virtual FilterType getFilterType() const = 0;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+    /// Return true if the filter is configurable using GUI
+    FWDICOMIOFILTER_API virtual bool isConfigurableWithGUI() const;
+
+    /// Configure the filter using GUI dialog
+    FWDICOMIOFILTER_API virtual void configureWithGUI();
+
+protected:
+
+    /// Constructor
+    FWDICOMIOFILTER_API IFilter();
+
+};
+
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_IFILTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/Plugin.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/Plugin.hpp
new file mode 100644
index 0000000..2099f84
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/Plugin.hpp
@@ -0,0 +1,31 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_PLUGIN_HPP__
+#define __FWDICOMIOFILTER_PLUGIN_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+
+namespace fwDicomIOFilter
+{
+
+/**
+ * @brief Hack to force links
+ */
+class Plugin
+{
+public:
+
+    /// Constructor
+    FWDICOMIOFILTER_API Plugin();
+
+    /// Destructor
+    FWDICOMIOFILTER_API ~Plugin();
+};
+
+} // namespace fwDicomIOFilter
+
+#endif /*__FWDICOMIOFILTER_PLUGIN_HPP__*/
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp
new file mode 100644
index 0000000..4a8bb72
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp
@@ -0,0 +1,54 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_COMPOSITE_CTIMAGESTORAGEDEFAULTCOMPOSITE_HPP__
+#define __FWDICOMIOFILTER_COMPOSITE_CTIMAGESTORAGEDEFAULTCOMPOSITE_HPP__
+
+#include "fwDicomIOFilter/composite/IComposite.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace composite
+{
+
+/**
+ * @brief Default filter used to read CTImageStorage SOP class.
+ */
+class FWDICOMIOFILTER_CLASS_API CTImageStorageDefaultComposite : public IComposite
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (CTImageStorageDefaultComposite)(IComposite),
+                                            (()), ::fwDicomIOFilter::factory::New< CTImageStorageDefaultComposite > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API CTImageStorageDefaultComposite(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~CTImageStorageDefaultComposite();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+};
+
+} // namespace composite
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_COMPOSITE_CTIMAGESTORAGEDEFAULTCOMPOSITE_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/composite/IComposite.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/composite/IComposite.hpp
new file mode 100644
index 0000000..615e2c7
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/composite/IComposite.hpp
@@ -0,0 +1,73 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_COMPOSITE_ICOMPOSITE_HPP__
+#define __FWDICOMIOFILTER_COMPOSITE_ICOMPOSITE_HPP__
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace composite
+{
+
+/**
+ * @brief Base class for Dicom instance composite filter.
+ */
+class FWDICOMIOFILTER_CLASS_API IComposite : public ::fwDicomIOFilter::IFilter
+{
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (IComposite)(::fwDicomIOFilter::IFilter) );
+
+    typedef std::vector< ::fwDicomIOFilter::IFilter::sptr > FilterContainerType;
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~IComposite();
+
+    /// Return filter type
+    FWDICOMIOFILTER_API FilterType getFilterType() const;
+
+    /// Override
+    FWDICOMIOFILTER_API DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /**
+     * @brief Apply every filters without throwing any exceptions.
+     * If an exception is thrown, it is ignored and the next filter is applied.
+     * @return Returns one or more Dicom Instance Group
+     */
+    FWDICOMIOFILTER_API DicomSeriesContainerType forcedApply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const;
+
+    /// Add a filter to the composite
+    FWDICOMIOFILTER_API void addChild(
+        const ::fwDicomIOFilter::IFilter::sptr& filter);
+
+    /// Remove a filter from the composite
+    FWDICOMIOFILTER_API void removeChild(
+        const ::fwDicomIOFilter::IFilter::sptr& filter);
+
+    /// Return composite container
+    FWDICOMIOFILTER_API FilterContainerType& getChildren();
+
+protected:
+    /// Constructor
+    FWDICOMIOFILTER_API IComposite();
+
+    /// Filter container
+    FilterContainerType m_filterContainer;
+
+};
+
+} // namespace composite
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_COMPOSITE_ICOMPOSITE_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/DefaultDicomFilter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/DefaultDicomFilter.hpp
new file mode 100644
index 0000000..1c06a8b
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/DefaultDicomFilter.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_CUSTOM_DEFAULTDICOMFILTER_HPP__
+#define __FWDICOMIOFILTER_CUSTOM_DEFAULTDICOMFILTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/custom/ICustom.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace custom
+{
+
+/**
+ * @brief Default DICOM Filter
+ */
+class FWDICOMIOFILTER_CLASS_API DefaultDicomFilter : public ICustom
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (DefaultDicomFilter)(ICustom),
+                                            (()), ::fwDicomIOFilter::factory::New< DefaultDicomFilter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API DefaultDicomFilter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~DefaultDicomFilter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+};
+
+} // namespace custom
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_CUSTOM_DEFAULTDICOMFILTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/ICustom.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/ICustom.hpp
new file mode 100644
index 0000000..edf74e0
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/ICustom.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_CUSTOM_ICUSTOM_HPP__
+#define __FWDICOMIOFILTER_CUSTOM_ICUSTOM_HPP__
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace custom
+{
+
+/**
+ * @brief Base class for Dicom instance custom filter.
+ */
+class FWDICOMIOFILTER_CLASS_API ICustom : public ::fwDicomIOFilter::IFilter
+{
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (ICustom)(::fwDicomIOFilter::IFilter) );
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ICustom();
+
+    /// Return filter type
+    FWDICOMIOFILTER_API FilterType getFilterType() const;
+
+protected:
+    /// Constructor
+    FWDICOMIOFILTER_API ICustom();
+
+};
+
+} // namespace custom
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_CUSTOM_ICUSTOM_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/NoFilter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/NoFilter.hpp
new file mode 100644
index 0000000..5cfbd59
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/custom/NoFilter.hpp
@@ -0,0 +1,58 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_CUSTOM_NOFILTER_HPP__
+#define __FWDICOMIOFILTER_CUSTOM_NOFILTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/custom/ICustom.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace custom
+{
+
+/**
+ * @brief Filter that doesn't apply any modification.
+ */
+class FWDICOMIOFILTER_CLASS_API NoFilter : public ICustom
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (NoFilter)(ICustom), (()), ::fwDicomIOFilter::factory::New< NoFilter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API NoFilter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~NoFilter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+};
+
+} // namespace custom
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_CUSTOM_NOFILTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/exceptions/FilterFailure.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/exceptions/FilterFailure.hpp
new file mode 100644
index 0000000..681de19
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/exceptions/FilterFailure.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_EXCEPTIONS_FILTERFAILURE_HPP__
+#define __FWDICOMIOFILTER_EXCEPTIONS_FILTERFAILURE_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwCore/Exception.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace exceptions
+{
+
+/**
+ * @brief FilterFailure Exceptions
+ */
+class FWDICOMIOFILTER_CLASS_API FilterFailure : public fwCore::Exception
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWDICOMIOFILTER_API FilterFailure(const std::string& message);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~FilterFailure() throw ();
+
+};
+
+} // namespace exceptions
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_EXCEPTIONS_FILTERFAILURE_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp
new file mode 100644
index 0000000..3165ffe
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/factory/new.hpp
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_FACTORY_NEW_HPP__
+#define __FWDICOMIOFILTER_FACTORY_NEW_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/registry/detail.hpp"
+
+#include <fwTools/DynamicAttributes.hxx>
+#include <fwTools/macros.hpp>
+
+
+#include <string>
+
+namespace fwDicomIOFilter
+{
+
+class IFilter;
+
+namespace factory
+{
+
+
+template<class CLASSNAME > SPTR( CLASSNAME )  New();
+
+/**
+ * @brief Key class used to restrict access to Filter construction.
+ * See http://www.drdobbs.com/184402053
+ */
+class Key
+{
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwDicomIOFilter::factory::New();
+
+Key()
+{
+}
+};
+
+
+FWDICOMIOFILTER_API SPTR( ::fwDicomIOFilter::IFilter ) New( const ::fwDicomIOFilter::registry::KeyType & classname );
+
+
+template<class CLASSNAME > SPTR( CLASSNAME )  New()
+{
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
+
+    ::fwTools::DynamicAttributesBase* dynAttr = obj.get();
+    dynAttr->__FWTOOLS_ATTRIBUTES_REGISTER_FUNC_NAME();
+
+    return obj;
+}
+
+} // namespace factory
+
+} // namespace fwDicomIOFilter
+
+#endif /* __FWDICOMIOFILTER_FACTORY_NEW_HPP__ */
+
+
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/helper/Filter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/helper/Filter.hpp
new file mode 100644
index 0000000..9b27edc
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/helper/Filter.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_HELPER_FILTER_HPP__
+#define __FWDICOMIOFILTER_HELPER_FILTER_HPP__
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace helper
+{
+
+/**
+ * @brief Filter Helper
+ */
+class FWDICOMIOFILTER_CLASS_API Filter
+{
+public:
+    typedef std::vector< ::fwMedData::DicomSeries::sptr > DicomSeriesContainerType;
+
+    /**
+     * @brief Apply a filter to the DicomSeries
+     * @param[in,out] dicomSeriesContainer DicomSeries that must be filtered
+     * @param[in] filter Filter that must be applied
+     * @return Return true if errors have been ignored
+     */
+    FWDICOMIOFILTER_API static bool applyFilter(DicomSeriesContainerType& dicomSeriesContainer,
+                                                ::fwDicomIOFilter::IFilter::sptr filter, bool forcedApply = false,
+                                                const ::fwLog::Logger::sptr& logger = ::fwLog::Logger::New());
+
+};
+
+} // namespace helper
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_HELPER_FILTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/modifier/IModifier.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/modifier/IModifier.hpp
new file mode 100644
index 0000000..2f09adc
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/modifier/IModifier.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_MODIFIER_IMODIFIER_HPP__
+#define __FWDICOMIOFILTER_MODIFIER_IMODIFIER_HPP__
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace modifier
+{
+
+/**
+ * @brief Base class for Dicom instance modifier.
+ */
+class FWDICOMIOFILTER_CLASS_API IModifier : public ::fwDicomIOFilter::IFilter
+{
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (IModifier)(::fwDicomIOFilter::IFilter) );
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~IModifier();
+
+    /// Return filter type
+    FWDICOMIOFILTER_API FilterType getFilterType() const;
+
+protected:
+    /// Constructor
+    FWDICOMIOFILTER_API IModifier();
+
+};
+
+} // namespace modifier
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_MODIFIER_IMODIFIER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/modifier/SliceThicknessModifier.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/modifier/SliceThicknessModifier.hpp
new file mode 100644
index 0000000..21d3935
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/modifier/SliceThicknessModifier.hpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_MODIFIER_SLICETHICKNESSMODIFIER_HPP__
+#define __FWDICOMIOFILTER_MODIFIER_SLICETHICKNESSMODIFIER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/modifier/IModifier.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace modifier
+{
+
+/**
+ * @brief Filter that uses the ImagepositionPatient tag to sort the instances.
+ * The position increases along the direction given by cross product of the ImageOrientationPatient vectors.
+ */
+class FWDICOMIOFILTER_CLASS_API SliceThicknessModifier : public IModifier
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (SliceThicknessModifier)(IModifier),
+                                            (()), ::fwDicomIOFilter::factory::New< SliceThicknessModifier > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API SliceThicknessModifier(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~SliceThicknessModifier();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+    /**
+     * @brief Compute the Z coordinate of the slice according to the ImagePositionPatient and ImageOrientationPatient
+     *  tags.
+     *  @param[in] file File containing the slice
+     */
+    FWDICOMIOFILTER_API virtual double getInstanceZPosition(const std::string& file) const;
+
+    /**
+     * @brief Get the SliceThickness value from an instance.
+     *  @param[in] file File containing the slice
+     */
+    FWDICOMIOFILTER_API virtual double getSliceThickness(const std::string& file) const;
+
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+};
+
+} // namespace modifier
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_MODIFIER_SLICETHICKNESSMODIFIER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/namespace.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/namespace.hpp
new file mode 100644
index 0000000..8c4fcc6
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/namespace.hpp
@@ -0,0 +1,82 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_NAMESPACE_HPP__
+#define __FWDICOMIOFILTER_NAMESPACE_HPP__
+
+/**
+ * @brief fwDicomIOFilter contains filters used to pre-process images before reading.
+ */
+namespace fwDicomIOFilter
+{
+
+/**
+ * @brief composite contains composite filters.
+ */
+namespace composite
+{
+} // namespace composite
+
+/**
+ * @brief custom contains custom filters.
+ */
+namespace custom
+{
+} // namespace custom
+
+/**
+ * @brief exceptions contains filter exceptions.
+ */
+namespace exceptions
+{
+} // namespace exceptions
+
+/**
+ * @brief helper contains filter helpers.
+ */
+namespace helper
+{
+} // namespace helper
+
+/**
+ * @brief modifier contains modifiers used to alter tag values before reading.
+ */
+namespace modifier
+{
+} // namespace modifier
+
+/**
+ * @brief sorter contains sorters used to sort instances.
+ */
+namespace sorter
+{
+} // namespace sorter
+
+/**
+ * @brief splitter contains splitters to split images.
+ */
+namespace splitter
+{
+} // namespace splitter
+
+/**
+ * @brief contains factory utilities.
+ */
+namespace factory
+{
+} // namespace factory
+
+/**
+ * @brief contains registry details
+ */
+namespace registry
+{
+} // namespace registry
+
+} // namespace fwDicomIOFilter
+
+#endif /* __FWDICOMIOFILTER_NAMESPACE_HPP__ */
+
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/registry/detail.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/registry/detail.hpp
new file mode 100644
index 0000000..a22192d
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/registry/detail.hpp
@@ -0,0 +1,37 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_REGISTRY_DETAIL_HPP__
+#define __FWDICOMIOFILTER_REGISTRY_DETAIL_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwCore/macros.hpp>
+#include <fwCore/util/FactoryRegistry.hpp>
+
+#include <string>
+
+namespace fwDicomIOFilter
+{
+
+class IFilter;
+
+namespace registry
+{
+
+typedef std::string KeyType;
+
+typedef ::fwCore::util::FactoryRegistry< SPTR(::fwDicomIOFilter::IFilter) (), KeyType > Type;
+
+FWDICOMIOFILTER_API SPTR(Type) get();
+
+} // namespace registry
+
+} // namespace fwDicomIOFilter
+
+#endif /* __FWDICOMIOFILTER_REGISTRY_DETAIL_HPP__ */
+
+
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/registry/macros.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/registry/macros.hpp
new file mode 100644
index 0000000..3cd503d
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/registry/macros.hpp
@@ -0,0 +1,23 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_REGISTRY_MACROS_HPP__
+#define __FWDICOMIOFILTER_REGISTRY_MACROS_HPP__
+
+#include "fwDicomIOFilter/registry/detail.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace registry
+{
+
+#define fwDicomIOFilterRegisterMacro( classname )                                  \
+    static ::fwDicomIOFilter::IFilter::Registrar< classname > s__factory__record__ ## __LINE__;
+
+} // end namespace registry
+} // end namespace fwDicomIOFilter
+
+#endif /*__FWDICOMIOFILTER_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/ISorter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/ISorter.hpp
new file mode 100644
index 0000000..1269f34
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/ISorter.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SORTER_ISORTER_HPP__
+#define __FWDICOMIOFILTER_SORTER_ISORTER_HPP__
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+/**
+ * @brief Base class for Dicom instance sorter.
+ */
+class FWDICOMIOFILTER_CLASS_API ISorter : public ::fwDicomIOFilter::IFilter
+{
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (ISorter)(::fwDicomIOFilter::IFilter) );
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ISorter();
+
+    /// Return filter type
+    FWDICOMIOFILTER_API FilterType getFilterType() const;
+
+protected:
+    /// Constructor
+    FWDICOMIOFILTER_API ISorter();
+
+};
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SORTER_ISORTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/ImagePositionPatientSorter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/ImagePositionPatientSorter.hpp
new file mode 100644
index 0000000..4d17725
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/ImagePositionPatientSorter.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SORTER_IMAGEPOSITIONPATIENTSORTER_HPP__
+#define __FWDICOMIOFILTER_SORTER_IMAGEPOSITIONPATIENTSORTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/sorter/ISorter.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+/**
+ * @brief Filter that uses the ImagepositionPatient tag to sort the instances.
+ * The position increases along the direction given by cross product of the ImageOrientationPatient vectors.
+ */
+class FWDICOMIOFILTER_CLASS_API ImagePositionPatientSorter : public ISorter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (ImagePositionPatientSorter)(ISorter),
+                                            (()), ::fwDicomIOFilter::factory::New< ImagePositionPatientSorter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API ImagePositionPatientSorter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ImagePositionPatientSorter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SORTER_IMAGEPOSITIONPATIENTSORTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/InstanceNumberSorter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/InstanceNumberSorter.hpp
new file mode 100644
index 0000000..38bee6b
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/InstanceNumberSorter.hpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SORTER_INSTANCENUMBERSORTER_HPP__
+#define __FWDICOMIOFILTER_SORTER_INSTANCENUMBERSORTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/sorter/TagValueSorter.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+/**
+ * @brief Filter that uses the InstanceNumber tag to sort the instances.
+ */
+class FWDICOMIOFILTER_CLASS_API InstanceNumberSorter : public ::fwDicomIOFilter::sorter::TagValueSorter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (InstanceNumberSorter)(::fwDicomIOFilter::sorter::TagValueSorter),
+                                            (()), ::fwDicomIOFilter::factory::New< InstanceNumberSorter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API InstanceNumberSorter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~InstanceNumberSorter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SORTER_INSTANCENUMBERSORTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/TagValueSorter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/TagValueSorter.hpp
new file mode 100644
index 0000000..7e1122a
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/sorter/TagValueSorter.hpp
@@ -0,0 +1,88 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SORTER_TAGVALUESORTER_HPP__
+#define __FWDICOMIOFILTER_SORTER_TAGVALUESORTER_HPP__
+
+#include <dcmtk/dcmdata/dctagkey.h>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/sorter/ISorter.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+/**
+ * @brief Filter that uses a tag to sort the instances.
+ */
+class FWDICOMIOFILTER_CLASS_API TagValueSorter : public ISorter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TagValueSorter)(ISorter),
+                                            (()), ::fwDicomIOFilter::factory::New< TagValueSorter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API TagValueSorter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~TagValueSorter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+    /**
+     * @brief Tag used to sort instances
+     * @{ */
+    const DcmTagKey getTag () const
+    {
+        return m_tag;
+    }
+    DcmTagKey& getRefTag ()
+    {
+        return this->m_tag;
+    }
+    const DcmTagKey& getCRefTag() const
+    {
+        return this->m_tag;
+    }
+    void setTag (const DcmTagKey& _tag)
+    {
+        this->m_tag = _tag;
+    }
+    /**  @} */
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+    /// Tag used to sort instances
+    DcmTagKey m_tag;
+
+};
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SORTER_TAGVALUESORTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/AcquisitionNumberSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/AcquisitionNumberSplitter.hpp
new file mode 100644
index 0000000..438eaf8
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/AcquisitionNumberSplitter.hpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_ACQUISITIONNUMBERSPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_ACQUISITIONNUMBERSPLITTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+
+#include <string>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the AcquisitionNumber tag to split the instances.
+ */
+class FWDICOMIOFILTER_CLASS_API AcquisitionNumberSplitter : public ::fwDicomIOFilter::splitter::TagValueSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (AcquisitionNumberSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< AcquisitionNumberSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API AcquisitionNumberSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~AcquisitionNumberSplitter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_ACQUISITIONNUMBERSPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ISplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ISplitter.hpp
new file mode 100644
index 0000000..6a6f9c3
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ISplitter.hpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_ISPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_ISPLITTER_HPP__
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Base class for Dicom instance splitter.
+ */
+class FWDICOMIOFILTER_CLASS_API ISplitter : public ::fwDicomIOFilter::IFilter
+{
+public:
+    fwCoreNonInstanciableClassDefinitionsMacro( (ISplitter)(::fwDicomIOFilter::IFilter) );
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ISplitter();
+
+    /// Return filter type
+    FWDICOMIOFILTER_API FilterType getFilterType() const;
+
+protected:
+    /// Constructor
+    FWDICOMIOFILTER_API ISplitter();
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_ISPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageDimensionsSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageDimensionsSplitter.hpp
new file mode 100644
index 0000000..80532b6
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageDimensionsSplitter.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_IMAGEDIMENSIONSSPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_IMAGEDIMENSIONSSPLITTER_HPP__
+
+#include "fwDicomIOFilter/splitter/ISplitter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the image dimensions to split the instances
+ */
+class FWDICOMIOFILTER_CLASS_API ImageDimensionsSplitter : public ISplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (ImageDimensionsSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< ImageDimensionsSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API ImageDimensionsSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ImageDimensionsSplitter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_IMAGEDIMENSIONSSPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageOrientationSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageOrientationSplitter.hpp
new file mode 100644
index 0000000..bbc712a
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageOrientationSplitter.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_IMAGEORIENTATIONSPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_IMAGEORIENTATIONSPLITTER_HPP__
+
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the ImageOrientationPatient tag to split the instances.
+ */
+class FWDICOMIOFILTER_CLASS_API ImageOrientationSplitter : public ::fwDicomIOFilter::splitter::TagValueSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (ImageOrientationSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< ImageOrientationSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API ImageOrientationSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ImageOrientationSplitter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_IMAGEORIENTATIONSPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImagePositionPatientSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImagePositionPatientSplitter.hpp
new file mode 100644
index 0000000..f8dfd94
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImagePositionPatientSplitter.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_IMAGEPOSITIONPATIENTSPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_IMAGEPOSITIONPATIENTSPLITTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/splitter/ISplitter.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the ImagePositionPatient tag to split the instances.
+ * For this filter to work properly, the instances must already be sorted.
+ */
+class FWDICOMIOFILTER_CLASS_API ImagePositionPatientSplitter : public ISplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (ImagePositionPatientSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< ImagePositionPatientSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API ImagePositionPatientSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ImagePositionPatientSplitter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_IMAGEPOSITIONPATIENTSPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageTypeSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageTypeSplitter.hpp
new file mode 100644
index 0000000..97ef7f2
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/ImageTypeSplitter.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_IMAGETYPESPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_IMAGETYPESPLITTER_HPP__
+
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the ImageType tag to split the instances.
+ */
+class FWDICOMIOFILTER_CLASS_API ImageTypeSplitter : public ::fwDicomIOFilter::splitter::TagValueSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (ImageTypeSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< ImageTypeSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API ImageTypeSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~ImageTypeSplitter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_IMAGETYPESPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp
new file mode 100644
index 0000000..e245b5f
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_SOPCLASSUIDSPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_SOPCLASSUIDSPLITTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the SOPClassUID tag to split the instances
+ */
+class FWDICOMIOFILTER_CLASS_API SOPClassUIDSplitter : public ::fwDicomIOFilter::splitter::TagValueSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (SOPClassUIDSplitter)(::fwDicomIOFilter::splitter::TagValueSplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< SOPClassUIDSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API SOPClassUIDSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~SOPClassUIDSplitter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_SOPCLASSUIDSPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.hpp
new file mode 100644
index 0000000..af8b4c6
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.hpp
@@ -0,0 +1,112 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_TAGVALUEINSTANCEREMOVESPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_TAGVALUEINSTANCEREMOVESPLITTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/splitter/ISplitter.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <dcmtk/dcmdata/dctagkey.h>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that remove instances according to tag value
+ */
+class FWDICOMIOFILTER_CLASS_API TagValueInstanceRemoveSplitter : public ISplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TagValueInstanceRemoveSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< TagValueInstanceRemoveSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API TagValueInstanceRemoveSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~TagValueInstanceRemoveSplitter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+    /**
+     * @brief Tag used to sort instances
+     * @{ */
+    const DcmTagKey getTag () const
+    {
+        return m_tag;
+    }
+    DcmTagKey& getRefTag ()
+    {
+        return this->m_tag;
+    }
+    const DcmTagKey& getCRefTag() const
+    {
+        return this->m_tag;
+    }
+    void setTag (const DcmTagKey& _tag)
+    {
+        this->m_tag = _tag;
+    }
+    /**  @} */
+
+    /**
+     * @brief Tag value used to determine if an instance must be removed
+     * @{ */
+    const std::string  getTagValue() const
+    {
+        return m_tagValue;
+    }
+    std::string& getRefTagValue()
+    {
+        return this->m_tagValue;
+    }
+    const std::string& getCRefTagValue() const
+    {
+        return this->m_tagValue;
+    }
+    void setTagValue(const std::string&  _tagValue)
+    {
+        this->m_tagValue = _tagValue;
+    }
+    /**  @} */
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+    /// Tag used to sort instances
+    DcmTagKey m_tag;
+
+    /// Tag value used to determine if an instance must be removed
+    std::string m_tagValue;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_TAGVALUEINSTANCEREMOVESPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TagValueSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TagValueSplitter.hpp
new file mode 100644
index 0000000..38b7510
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TagValueSplitter.hpp
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_TAGVALUESPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_TAGVALUESPLITTER_HPP__
+
+#include "fwDicomIOFilter/config.hpp"
+#include "fwDicomIOFilter/splitter/ISplitter.hpp"
+
+
+#include <dcmtk/dcmdata/dctagkey.h>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <dcmtk/dcmdata/dctagkey.h>
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses a tag to split the instances
+ */
+class FWDICOMIOFILTER_CLASS_API TagValueSplitter : public ISplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TagValueSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< TagValueSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API TagValueSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~TagValueSplitter();
+
+    /// Override
+    FWDICOMIOFILTER_API virtual DicomSeriesContainerType apply(
+        const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+    throw(::fwDicomIOFilter::exceptions::FilterFailure);
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+    /**
+     * @brief Tag used to sort instances
+     * @{ */
+    const DcmTagKey getTag () const
+    {
+        return m_tag;
+    }
+    DcmTagKey& getRefTag ()
+    {
+        return this->m_tag;
+    }
+    const DcmTagKey& getCRefTag() const
+    {
+        return this->m_tag;
+    }
+    void setTag (const DcmTagKey& _tag)
+    {
+        this->m_tag = _tag;
+    }
+    /**  @} */
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+    /// Tag used to sort instances
+    DcmTagKey m_tag;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_TAGVALUESPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TemporalPositionSplitter.hpp b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TemporalPositionSplitter.hpp
new file mode 100644
index 0000000..e2e18d8
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/include/fwDicomIOFilter/splitter/TemporalPositionSplitter.hpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_SPLITTER_TEMPORALPOSITIONSPLITTER_HPP__
+#define __FWDICOMIOFILTER_SPLITTER_TEMPORALPOSITIONSPLITTER_HPP__
+
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+#include "fwDicomIOFilter/config.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses the TemporalPositionIdentifier tag to split the instances.
+ */
+class FWDICOMIOFILTER_CLASS_API TemporalPositionSplitter : public ::fwDicomIOFilter::splitter::TagValueSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TemporalPositionSplitter)(ISplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< TemporalPositionSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTER_API TemporalPositionSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTER_API virtual ~TemporalPositionSplitter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTER_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTER_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTER_API virtual bool isConfigurationRequired() const;
+
+protected:
+    /// Filter name
+    static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
+
+
+#endif /* __FWDICOMIOFILTER_SPLITTER_TEMPORALPOSITIONSPLITTER_HPP__ */
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/IFilter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/IFilter.cpp
new file mode 100644
index 0000000..65583f0
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/IFilter.cpp
@@ -0,0 +1,43 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/IFilter.hpp"
+
+namespace fwDicomIOFilter
+{
+
+IFilter::IFilter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IFilter::~IFilter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+bool IFilter::isConfigurationRequired() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+bool IFilter::isConfigurableWithGUI() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+void IFilter::configureWithGUI()
+{
+    SLM_WARN("You should override this function in order to configure your filter using a GUI frame.");
+}
+
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/Plugin.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/Plugin.cpp
new file mode 100644
index 0000000..66d6f5e
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/Plugin.cpp
@@ -0,0 +1,22 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/Plugin.hpp"
+
+namespace fwDicomIOFilter
+{
+
+Plugin::Plugin()
+{
+}
+
+Plugin::~Plugin()
+{
+}
+
+} //namespace fwDicomIOFilter
+
+
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/composite/CTImageStorageDefaultComposite.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/composite/CTImageStorageDefaultComposite.cpp
new file mode 100644
index 0000000..e587569
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/composite/CTImageStorageDefaultComposite.cpp
@@ -0,0 +1,76 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp"
+
+#include "fwDicomIOFilter/modifier/SliceThicknessModifier.hpp"
+#include "fwDicomIOFilter/sorter/ImagePositionPatientSorter.hpp"
+#include "fwDicomIOFilter/sorter/InstanceNumberSorter.hpp"
+#include "fwDicomIOFilter/splitter/AcquisitionNumberSplitter.hpp"
+#include "fwDicomIOFilter/splitter/ImageDimensionsSplitter.hpp"
+#include "fwDicomIOFilter/splitter/ImagePositionPatientSplitter.hpp"
+#include "fwDicomIOFilter/splitter/ImageTypeSplitter.hpp"
+#include "fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp"
+#include "fwDicomIOFilter/splitter/TemporalPositionSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::composite::CTImageStorageDefaultComposite );
+
+namespace fwDicomIOFilter
+{
+namespace composite
+{
+
+const std::string CTImageStorageDefaultComposite::s_FILTER_NAME        = "CTImageStorage default composite";
+const std::string CTImageStorageDefaultComposite::s_FILTER_DESCRIPTION =
+    "CTImageStorage default composite.";
+
+//-----------------------------------------------------------------------------
+
+CTImageStorageDefaultComposite::CTImageStorageDefaultComposite(::fwDicomIOFilter::IFilter::Key key) : IComposite()
+{
+    // Split according to image type
+    this->addChild(::fwDicomIOFilter::splitter::ImageTypeSplitter::New());
+    // Split according to acquisition number
+    this->addChild(::fwDicomIOFilter::splitter::AcquisitionNumberSplitter::New());
+    // Split according to temporal position (MR)
+    this->addChild(::fwDicomIOFilter::splitter::TemporalPositionSplitter::New());
+    // Split according to image dimensions
+    this->addChild(::fwDicomIOFilter::splitter::ImageDimensionsSplitter::New());
+    // Sort according to instance number
+    this->addChild(::fwDicomIOFilter::sorter::InstanceNumberSorter::New());
+    // Sort according to image position
+    this->addChild(::fwDicomIOFilter::sorter::ImagePositionPatientSorter::New());
+    // Split if gaps are found in image positions
+    this->addChild(::fwDicomIOFilter::splitter::ImagePositionPatientSplitter::New());
+    // Sort according to image position to get correct orientation
+    this->addChild(::fwDicomIOFilter::sorter::ImagePositionPatientSorter::New());
+    // Correct slice thickness if needed
+    this->addChild(::fwDicomIOFilter::modifier::SliceThicknessModifier::New());
+}
+
+//-----------------------------------------------------------------------------
+
+CTImageStorageDefaultComposite::~CTImageStorageDefaultComposite()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string CTImageStorageDefaultComposite::getName() const
+{
+    return CTImageStorageDefaultComposite::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string CTImageStorageDefaultComposite::getDescription() const
+{
+    return CTImageStorageDefaultComposite::s_FILTER_DESCRIPTION;
+}
+
+} // namespace composite
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/composite/IComposite.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/composite/IComposite.cpp
new file mode 100644
index 0000000..94c3966
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/composite/IComposite.cpp
@@ -0,0 +1,112 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/composite/IComposite.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace composite
+{
+
+IComposite::IComposite()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IComposite::~IComposite()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IFilter::FilterType IComposite::getFilterType() const
+{
+    return IFilter::COMPOSITE;
+}
+
+//-----------------------------------------------------------------------------
+
+IComposite::DicomSeriesContainerType IComposite::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+    result.push_back(series);
+    // For every filter
+    for(const ::fwDicomIOFilter::IFilter::sptr& filter :  m_filterContainer)
+    {
+        DicomSeriesContainerType filtered;
+        // For every serie
+        for(const ::fwMedData::DicomSeries::sptr& s :  result)
+        {
+            DicomSeriesContainerType tempo = filter->apply(s, logger);
+            filtered.reserve(filtered.size() + tempo.size());
+            std::copy(tempo.begin(), tempo.end(), std::back_inserter(filtered));
+        }
+        result = filtered;
+    }
+    return result;
+}
+
+//-----------------------------------------------------------------------------
+
+IComposite::DicomSeriesContainerType IComposite::forcedApply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+{
+    DicomSeriesContainerType result;
+    result.push_back(series);
+    // For every filters
+    for(const ::fwDicomIOFilter::IFilter::sptr& filter :  m_filterContainer)
+    {
+        DicomSeriesContainerType filtered;
+        // For every series
+        for(const ::fwMedData::DicomSeries::sptr& s :  result)
+        {
+            try
+            {
+                DicomSeriesContainerType tempo = filter->apply(s, logger);
+                filtered.reserve(filtered.size() + tempo.size());
+                std::copy(tempo.begin(), tempo.end(), std::back_inserter(filtered));
+            }
+            catch(::fwDicomIOFilter::exceptions::FilterFailure e)
+            {
+                OSLM_WARN("Unable to apply the filter \"" << filter->getName() << "\".");
+                filtered.push_back(s);
+            }
+        }
+        result = filtered;
+    }
+    return result;
+}
+
+//-----------------------------------------------------------------------------
+
+void IComposite::addChild(const ::fwDicomIOFilter::IFilter::sptr& filter)
+{
+    m_filterContainer.push_back(filter);
+}
+
+//-----------------------------------------------------------------------------
+
+void IComposite::removeChild(const ::fwDicomIOFilter::IFilter::sptr& filter)
+{
+    FilterContainerType::iterator it = std::find(m_filterContainer.begin(), m_filterContainer.end(), filter);
+    if(it != m_filterContainer.end())
+    {
+        m_filterContainer.erase(it);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+IComposite::FilterContainerType& IComposite::getChildren()
+{
+    return m_filterContainer;
+}
+
+} // namespace composite
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/DefaultDicomFilter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/DefaultDicomFilter.cpp
new file mode 100644
index 0000000..16c4a97
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/DefaultDicomFilter.cpp
@@ -0,0 +1,119 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwDicomIOFilter/composite/CTImageStorageDefaultComposite.hpp"
+#include "fwDicomIOFilter/composite/IComposite.hpp"
+#include "fwDicomIOFilter/custom/DefaultDicomFilter.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp"
+
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::custom::DefaultDicomFilter );
+
+namespace fwDicomIOFilter
+{
+namespace custom
+{
+
+const std::string DefaultDicomFilter::s_FILTER_NAME        = "Default DICOM filter";
+const std::string DefaultDicomFilter::s_FILTER_DESCRIPTION = "Default DICOM filter.";
+
+//-----------------------------------------------------------------------------
+
+DefaultDicomFilter::DefaultDicomFilter(::fwDicomIOFilter::IFilter::Key key) : ICustom()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+DefaultDicomFilter::~DefaultDicomFilter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string DefaultDicomFilter::getName() const
+{
+    return DefaultDicomFilter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string DefaultDicomFilter::getDescription() const
+{
+    return DefaultDicomFilter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+DefaultDicomFilter::DicomSeriesContainerType DefaultDicomFilter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+
+    //Split series depending on SOPClassUIDs
+    ::fwDicomIOFilter::splitter::SOPClassUIDSplitter::sptr sopFilter =
+        ::fwDicomIOFilter::splitter::SOPClassUIDSplitter::New();
+    DicomSeriesContainerType seriesContainer = sopFilter->apply(series, logger);
+
+    // Apply default filters depending on SOPClassUIDs
+    for(const ::fwMedData::DicomSeries::sptr& s :  seriesContainer)
+    {
+        DicomSeriesContainerType tempo;
+
+        // Create filter depending on SOPClassUID
+        ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = s->getSOPClassUIDs();
+        std::string sopClassUID = sopClassUIDContainer.begin()->c_str();
+        if(sopClassUID == "1.2.840.10008.5.1.4.1.1.88.34")    // FIXME Remove hard coded string
+        {
+            sopClassUID = "Comprehensive3DSR";
+        }
+        else
+        {
+            sopClassUID = dcmFindNameOfUID(sopClassUID.c_str());
+        }
+
+        ::fwDicomIOFilter::composite::IComposite::sptr filter;
+
+        // CT Image Storage
+        if(sopClassUID == "CTImageStorage" || sopClassUID == "MRImageStorage" ||
+           sopClassUID == "SecondaryCaptureImageStorage")
+        {
+            filter = ::fwDicomIOFilter::composite::CTImageStorageDefaultComposite::New();
+        }
+
+        //Apply filter
+        if(filter)
+        {
+            SLM_TRACE("Applying default filter for SOPClassUID: \""+sopClassUID+"\".");
+            tempo = filter->forcedApply(s, logger);
+        }
+        else
+        {
+            logger->information("Can't apply any filter : \""+sopClassUID+"\" SOPClassUID is not supported.");
+            tempo.push_back(s);
+        }
+
+        for(::fwMedData::DicomSeries::sptr filteredSeries :  tempo)
+        {
+            result.push_back(filteredSeries);
+        }
+    }
+
+    return result;
+
+}
+
+} // namespace custom
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/ICustom.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/ICustom.cpp
new file mode 100644
index 0000000..715e5d3
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/ICustom.cpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/custom/ICustom.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace custom
+{
+
+ICustom::ICustom()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ICustom::~ICustom()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IFilter::FilterType ICustom::getFilterType() const
+{
+    return IFilter::CUSTOM;
+}
+
+} // namespace custom
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/NoFilter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/NoFilter.cpp
new file mode 100644
index 0000000..bdb7f55
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/custom/NoFilter.cpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/custom/NoFilter.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::custom::NoFilter );
+
+namespace fwDicomIOFilter
+{
+namespace custom
+{
+
+const std::string NoFilter::s_FILTER_NAME        = "No filter";
+const std::string NoFilter::s_FILTER_DESCRIPTION = "No filter.";
+
+//-----------------------------------------------------------------------------
+
+NoFilter::NoFilter(::fwDicomIOFilter::IFilter::Key key) : ICustom()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+NoFilter::~NoFilter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string NoFilter::getName() const
+{
+    return NoFilter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string NoFilter::getDescription() const
+{
+    return NoFilter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+NoFilter::DicomSeriesContainerType NoFilter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+    result.push_back(series);
+    return result;
+}
+
+} // namespace custom
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/exceptions/FilterFailure.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/exceptions/FilterFailure.cpp
new file mode 100644
index 0000000..c29de6e
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/exceptions/FilterFailure.cpp
@@ -0,0 +1,25 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace exceptions
+{
+
+FilterFailure::FilterFailure(const std::string& message) : ::fwCore::Exception(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+FilterFailure::~FilterFailure() throw()
+{
+}
+
+} // namespace exceptions
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/factory/new.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/factory/new.cpp
new file mode 100644
index 0000000..0f1190f
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/factory/new.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/IFilter.hpp"
+#include "fwDicomIOFilter/factory/new.hpp"
+
+
+namespace fwDicomIOFilter
+{
+
+namespace factory
+{
+
+::fwDicomIOFilter::IFilter::sptr New( const ::fwDicomIOFilter::registry::KeyType& classname )
+{
+    return ::fwDicomIOFilter::registry::get()->create(classname);
+}
+
+} // namespace factory
+
+} // namespace fwDicomIOFilter
+
+
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/helper/Filter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/helper/Filter.cpp
new file mode 100644
index 0000000..dd9d070
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/helper/Filter.cpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/composite/IComposite.hpp"
+
+#include "fwDicomIOFilter/helper/Filter.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace helper
+{
+
+
+bool Filter::applyFilter(DicomSeriesContainerType& dicomSeriesContainer, ::fwDicomIOFilter::IFilter::sptr filter,
+                         bool forcedApply, const ::fwLog::Logger::sptr& logger)
+{
+    bool ignoredError = false;
+    DicomSeriesContainerType result;
+
+    // On every DicomSeries
+    for(const ::fwMedData::DicomSeries::sptr& dicomSeries :  dicomSeriesContainer)
+    {
+        // Apply filter and copy result
+        DicomSeriesContainerType tempo;
+        // Regular filter application
+        if(!forcedApply || filter->getFilterType() != ::fwDicomIOFilter::IFilter::COMPOSITE)
+        {
+            try
+            {
+                tempo = filter->apply(dicomSeries, logger);
+            }
+            catch(::fwDicomIOFilter::exceptions::FilterFailure& e)
+            {
+                if(!forcedApply)
+                {
+                    throw e;
+                }
+                else
+                {
+                    ignoredError = true;
+                    tempo.push_back(dicomSeries);
+                }
+            }
+        }
+        // Forced filter application for composite
+        else
+        {
+            ::fwDicomIOFilter::composite::IComposite::sptr composite =
+                ::fwDicomIOFilter::composite::IComposite::dynamicCast(filter);
+            tempo = composite->forcedApply(dicomSeries, logger);
+        }
+        result.reserve(result.size() + tempo.size());
+        std::copy(tempo.begin(), tempo.end(), std::back_inserter(result));
+    }
+
+    // Copy result to DicomSeries container
+    dicomSeriesContainer = result;
+
+    return ignoredError;
+}
+
+} // namespace helper
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/modifier/IModifier.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/modifier/IModifier.cpp
new file mode 100644
index 0000000..8045af0
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/modifier/IModifier.cpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/modifier/IModifier.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace modifier
+{
+
+IModifier::IModifier()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IModifier::~IModifier()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IFilter::FilterType IModifier::getFilterType() const
+{
+    return IFilter::MODIFIER;
+}
+
+} // namespace modifier
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/modifier/SliceThicknessModifier.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/modifier/SliceThicknessModifier.cpp
new file mode 100644
index 0000000..04ec6ff
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/modifier/SliceThicknessModifier.cpp
@@ -0,0 +1,160 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/modifier/SliceThicknessModifier.hpp"
+
+#include <fwMath/VectorFunctions.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+#include <boost/lexical_cast.hpp>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::modifier::SliceThicknessModifier );
+
+namespace fwDicomIOFilter
+{
+namespace modifier
+{
+
+const std::string SliceThicknessModifier::s_FILTER_NAME        = "Slice thickness modifier";
+const std::string SliceThicknessModifier::s_FILTER_DESCRIPTION =
+    "Compute and modify slice thickness using <i>ImagePositionPatient</i> "
+    "and <i>ImageOrientationPatient</i> tags of the two first instances.";
+
+//-----------------------------------------------------------------------------
+
+SliceThicknessModifier::SliceThicknessModifier(::fwDicomIOFilter::IFilter::Key key) : IModifier()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+SliceThicknessModifier::~SliceThicknessModifier()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string SliceThicknessModifier::getName() const
+{
+    return SliceThicknessModifier::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string SliceThicknessModifier::getDescription() const
+{
+    return SliceThicknessModifier::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+SliceThicknessModifier::DicomSeriesContainerType SliceThicknessModifier::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+
+    if(series->getLocalDicomPaths().size() < 2)
+    {
+        SLM_WARN("SliceThicknessModifier is being applied on a series containing only one slice.");
+        result.push_back(series);
+        return result;
+    }
+
+    // Retrieve the two first instances
+    ::fwMedData::DicomSeries::DicomPathContainerType::const_iterator it = series->getLocalDicomPaths().begin();
+    const std::string& firstFile  = it->second.string();
+    const std::string& secondFile = (++it)->second.string();
+
+    // Compute the slice thickness between the 2 first slices.
+    double firstIndex     = this->getInstanceZPosition(firstFile);
+    double secondIndex    = this->getInstanceZPosition(secondFile);
+    double sliceThickness = std::abs(secondIndex - firstIndex);
+
+    // Check that the computed sliceThickness doesn't match the sliceThickness of the first instance
+    double currentSliceThickness = this->getSliceThickness(firstFile);
+    const double epsilon         = 1e-2;
+
+    // If the computed sliceThickness doesn't match the sliceThickness value
+    // we add the computed value to the DicomSeries.
+    if(std::abs(sliceThickness-currentSliceThickness) > epsilon)
+    {
+        series->addComputedTagValue("SliceThickness", boost::lexical_cast<std::string>(sliceThickness));
+    }
+
+    result.push_back(series);
+    return result;
+
+}
+
+//-----------------------------------------------------------------------------
+
+double SliceThicknessModifier::getInstanceZPosition(const std::string& file) const
+{
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    status = fileFormat.loadFile(file.c_str());
+    FW_RAISE_IF("Unable to read the file: \""+file+"\"", status.bad());
+    dataset = fileFormat.getDataset();
+
+    if(!dataset->tagExists(DCM_ImagePositionPatient) || !dataset->tagExists(DCM_ImageOrientationPatient))
+    {
+        const std::string msg = "Unable to compute the SliceThickness of the series.";
+        throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+    }
+
+    fwVec3d imagePosition;
+    for(unsigned int i = 0; i < 3; ++i)
+    {
+        dataset->findAndGetFloat64(DCM_ImagePositionPatient, imagePosition[i], i);
+    }
+
+    fwVec3d imageOrientationU;
+    fwVec3d imageOrientationV;
+    for(unsigned int i = 0; i < 3; ++i)
+    {
+        dataset->findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationU[i], i);
+        dataset->findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationV[i], i+3);
+    }
+
+    //Compute Z direction (cross product)
+    fwVec3d zVector = ::fwMath::cross(imageOrientationU, imageOrientationV);
+
+    //Compute dot product to get the index
+    double index = ::fwMath::dot(imagePosition, zVector);
+
+    return index;
+}
+
+//-----------------------------------------------------------------------------
+
+double SliceThicknessModifier::getSliceThickness(const std::string& file) const
+{
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    status = fileFormat.loadFile(file.c_str());
+    FW_RAISE_IF("Unable to read the file: \""+file+"\"", status.bad());
+    dataset = fileFormat.getDataset();
+
+    double sliceThickness = 0;
+    dataset->findAndGetFloat64(DCM_SliceThickness,sliceThickness);
+
+    return sliceThickness;
+}
+
+} // namespace modifier
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/registry/detail.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/registry/detail.cpp
new file mode 100644
index 0000000..ad0b79e
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/registry/detail.cpp
@@ -0,0 +1,29 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/registry/detail.hpp"
+
+#include <fwCore/util/LazyInstantiator.hpp>
+
+namespace fwDicomIOFilter
+{
+
+namespace registry
+{
+
+struct FwDicomIOFilterRegistryInstantiatorTag {};
+
+SPTR(Type) get()
+{
+    typedef ::fwCore::util::LazyInstantiator< Type, FwDicomIOFilterRegistryInstantiatorTag > InstantiatorType;
+    return InstantiatorType::getInstance();
+}
+
+} // namespace registry
+
+} // namespace fwDicomIOFilter
+
+
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/ISorter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/ISorter.cpp
new file mode 100644
index 0000000..d3aa802
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/ISorter.cpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/sorter/ISorter.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+ISorter::ISorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ISorter::~ISorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IFilter::FilterType ISorter::getFilterType() const
+{
+    return IFilter::SORTER;
+}
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/ImagePositionPatientSorter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/ImagePositionPatientSorter.cpp
new file mode 100644
index 0000000..3ac4d86
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/ImagePositionPatientSorter.cpp
@@ -0,0 +1,137 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/sorter/ImagePositionPatientSorter.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+#include <fwMath/VectorFunctions.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::sorter::ImagePositionPatientSorter );
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+const std::string ImagePositionPatientSorter::s_FILTER_NAME        = "Image position patient sorter";
+const std::string ImagePositionPatientSorter::s_FILTER_DESCRIPTION =
+    "Sort instances by computing image position using <i>ImagePositionPatient</i> "
+    "and <i>ImageOrientationPatient</i> tags.";
+
+//-----------------------------------------------------------------------------
+
+ImagePositionPatientSorter::ImagePositionPatientSorter(::fwDicomIOFilter::IFilter::Key key) : ISorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ImagePositionPatientSorter::~ImagePositionPatientSorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImagePositionPatientSorter::getName() const
+{
+    return ImagePositionPatientSorter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImagePositionPatientSorter::getDescription() const
+{
+    return ImagePositionPatientSorter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+ImagePositionPatientSorter::DicomSeriesContainerType ImagePositionPatientSorter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+
+    typedef std::map< double, std::string > SortedFileMapType;
+    SortedFileMapType sortedFiles;
+
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    for(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type& file :  series->getLocalDicomPaths())
+    {
+        const std::string& filename = file.second.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        dataset = fileFormat.getDataset();
+
+        if(!dataset->tagExists(DCM_ImagePositionPatient) || !dataset->tagExists(DCM_ImageOrientationPatient))
+        {
+            const std::string msg =
+                "Unable to split the series using ImagePositionPatient and ImageOrientationPatient. "
+                "Tag(s) missing.";
+            throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+        }
+
+        fwVec3d imagePosition;
+        for(unsigned int i = 0; i < 3; ++i)
+        {
+            dataset->findAndGetFloat64(DCM_ImagePositionPatient, imagePosition[i], i);
+        }
+
+        fwVec3d imageOrientationU;
+        fwVec3d imageOrientationV;
+        for(unsigned int i = 0; i < 3; ++i)
+        {
+            dataset->findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationU[i], i);
+            dataset->findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationV[i], i+3);
+        }
+
+        //Compute Z direction (cross product)
+        fwVec3d zVector = ::fwMath::cross(imageOrientationU, imageOrientationV);
+
+        //Compute dot product to get the index
+        double index = ::fwMath::dot(imagePosition, zVector);
+
+        sortedFiles[index] = filename;
+    }
+
+    if(sortedFiles.size() != series->getLocalDicomPaths().size())
+    {
+        const std::string msg =
+            "Unable to sort the series using the ImagePositionPatient tag. Some images have the same "
+            "position meaning this series contains multiple volumes. Try to split the volumes using a different "
+            "filter.";
+        throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+    }
+
+    ::fwMedData::DicomSeries::DicomPathContainerType dicomPathContainer;
+    series->setLocalDicomPaths(dicomPathContainer);
+
+    unsigned int index = 0;
+    for(SortedFileMapType::value_type file :  sortedFiles)
+    {
+        series->addDicomPath(index++, file.second);
+    }
+
+    result.push_back(series);
+
+    logger->information("The instances have been sorted using the slices positions.");
+
+    return result;
+
+}
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/InstanceNumberSorter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/InstanceNumberSorter.cpp
new file mode 100644
index 0000000..5ffccb0
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/InstanceNumberSorter.cpp
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/sorter/InstanceNumberSorter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::sorter::InstanceNumberSorter );
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+const std::string InstanceNumberSorter::s_FILTER_NAME        = "Instance number sorter";
+const std::string InstanceNumberSorter::s_FILTER_DESCRIPTION =
+    "Sort instances using <i>InstanceNumber</i> tag.";
+
+//-----------------------------------------------------------------------------
+
+InstanceNumberSorter::InstanceNumberSorter(::fwDicomIOFilter::IFilter::Key key) :
+    fwDicomIOFilter::sorter::TagValueSorter(key)
+{
+    this->setTag(DCM_InstanceNumber);
+}
+
+//-----------------------------------------------------------------------------
+
+InstanceNumberSorter::~InstanceNumberSorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string InstanceNumberSorter::getName() const
+{
+    return InstanceNumberSorter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string InstanceNumberSorter::getDescription() const
+{
+    return InstanceNumberSorter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool InstanceNumberSorter::isConfigurationRequired() const
+{
+    return false;
+}
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/TagValueSorter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/TagValueSorter.cpp
new file mode 100644
index 0000000..79ab481
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/sorter/TagValueSorter.cpp
@@ -0,0 +1,124 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/sorter/TagValueSorter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::sorter::TagValueSorter );
+
+namespace fwDicomIOFilter
+{
+namespace sorter
+{
+
+const std::string TagValueSorter::s_FILTER_NAME        = "Tag value sorter";
+const std::string TagValueSorter::s_FILTER_DESCRIPTION =
+    "Sort instances using a tag value.";
+
+//-----------------------------------------------------------------------------
+
+TagValueSorter::TagValueSorter(::fwDicomIOFilter::IFilter::Key key) : ISorter()
+{
+    m_tag = DCM_UndefinedTagKey;
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueSorter::~TagValueSorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueSorter::getName() const
+{
+    return TagValueSorter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueSorter::getDescription() const
+{
+    return TagValueSorter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueSorter::isConfigurationRequired() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueSorter::DicomSeriesContainerType TagValueSorter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+
+    if(m_tag == DCM_UndefinedTagKey)
+    {
+        const std::string msg = "Unable to split the series, the specified tag is not valid.";
+        throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+    }
+
+    DicomSeriesContainerType result;
+
+    typedef std::map< unsigned int, std::string > SortedFileMapType;
+    SortedFileMapType sortedFiles;
+
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+    for(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type& file :  series->getLocalDicomPaths())
+    {
+        const std::string& filename = file.second.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+file.second.string()+"\"", status.bad());
+        dataset = fileFormat.getDataset();
+
+        Sint32 index = 0;
+        dataset->findAndGetSint32(m_tag, index);
+
+        sortedFiles[index] = file.second.string();
+    }
+
+    if(sortedFiles.size() != series->getLocalDicomPaths().size())
+    {
+        const std::string msg = "Unable to sort the series using the specified tag. The tag may be missing in "
+                                "some instances or several instances may have the same tag value.";
+        throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+    }
+
+    ::fwMedData::DicomSeries::DicomPathContainerType dicomPathContainer;
+    series->setLocalDicomPaths(dicomPathContainer);
+
+    for(SortedFileMapType::value_type file :  sortedFiles)
+    {
+        series->addDicomPath(file.first, file.second);
+    }
+
+    result.push_back(series);
+
+    std::stringstream ss;
+    ss << "The instances have been sorted using the value of tag (" <<
+        std::hex << std::setfill('0') << std::setw(4) << m_tag.getGroup() << "," <<
+        std::hex << std::setfill('0') << std::setw(4) << m_tag.getElement() << ").";
+    logger->information(ss.str());
+
+    return result;
+
+}
+
+} // namespace sorter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/AcquisitionNumberSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/AcquisitionNumberSplitter.cpp
new file mode 100644
index 0000000..9412a59
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/AcquisitionNumberSplitter.cpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/AcquisitionNumberSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+#include <string>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::AcquisitionNumberSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string AcquisitionNumberSplitter::s_FILTER_NAME        = "Acquisition number splitter";
+const std::string AcquisitionNumberSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to acquisition number tag.";
+
+//-----------------------------------------------------------------------------
+
+AcquisitionNumberSplitter::AcquisitionNumberSplitter(::fwDicomIOFilter::IFilter::Key key) : TagValueSplitter(key)
+{
+    this->setTag(DCM_AcquisitionNumber);
+}
+
+//-----------------------------------------------------------------------------
+
+AcquisitionNumberSplitter::~AcquisitionNumberSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string AcquisitionNumberSplitter::getName() const
+{
+    return AcquisitionNumberSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string AcquisitionNumberSplitter::getDescription() const
+{
+    return AcquisitionNumberSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool AcquisitionNumberSplitter::isConfigurationRequired() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ISplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ISplitter.cpp
new file mode 100644
index 0000000..9d89b5f
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ISplitter.cpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/ISplitter.hpp"
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+ISplitter::ISplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ISplitter::~ISplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+IFilter::FilterType ISplitter::getFilterType() const
+{
+    return ISplitter::SPLITTER;
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageDimensionsSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageDimensionsSplitter.cpp
new file mode 100644
index 0000000..1e97c87
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageDimensionsSplitter.cpp
@@ -0,0 +1,80 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+#include "fwDicomIOFilter/helper/Filter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+#include "fwDicomIOFilter/splitter/ImageDimensionsSplitter.hpp"
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::ImageDimensionsSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string ImageDimensionsSplitter::s_FILTER_NAME        = "Image dimensions splitter";
+const std::string ImageDimensionsSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to image dimensions.";
+
+//-----------------------------------------------------------------------------
+
+ImageDimensionsSplitter::ImageDimensionsSplitter(::fwDicomIOFilter::IFilter::Key key) : ISplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ImageDimensionsSplitter::~ImageDimensionsSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImageDimensionsSplitter::getName() const
+{
+    return ImageDimensionsSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImageDimensionsSplitter::getDescription() const
+{
+    return ImageDimensionsSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+ImageDimensionsSplitter::DicomSeriesContainerType ImageDimensionsSplitter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger) const
+throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+    result.push_back(series);
+
+    // Columns splitter
+    auto columnsSplitter = ::fwDicomIOFilter::splitter::TagValueSplitter::New();
+    columnsSplitter->setTag(DCM_Columns);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(result, columnsSplitter, false, logger);
+
+    // Rows splitter
+    auto rowsSplitter = ::fwDicomIOFilter::splitter::TagValueSplitter::New();
+    rowsSplitter->setTag(DCM_Rows);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(result, rowsSplitter, false, logger);
+
+    return result;
+
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageOrientationSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageOrientationSplitter.cpp
new file mode 100644
index 0000000..a702581
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageOrientationSplitter.cpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/ImageOrientationSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+#include <string>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::ImageOrientationSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string ImageOrientationSplitter::s_FILTER_NAME        = "Image orientation splitter";
+const std::string ImageOrientationSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to image orientation tag.";
+
+//-----------------------------------------------------------------------------
+
+ImageOrientationSplitter::ImageOrientationSplitter(::fwDicomIOFilter::IFilter::Key key) : TagValueSplitter(key)
+{
+    this->setTag(DCM_ImageOrientationPatient);
+}
+
+//-----------------------------------------------------------------------------
+
+ImageOrientationSplitter::~ImageOrientationSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImageOrientationSplitter::getName() const
+{
+    return ImageOrientationSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImageOrientationSplitter::getDescription() const
+{
+    return ImageOrientationSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool ImageOrientationSplitter::isConfigurationRequired() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImagePositionPatientSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImagePositionPatientSplitter.cpp
new file mode 100644
index 0000000..8c4c936
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImagePositionPatientSplitter.cpp
@@ -0,0 +1,151 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/splitter/ImagePositionPatientSplitter.hpp"
+
+#include <fwMath/VectorFunctions.hpp>
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::ImagePositionPatientSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string ImagePositionPatientSplitter::s_FILTER_NAME        = "Image position patient splitter";
+const std::string ImagePositionPatientSplitter::s_FILTER_DESCRIPTION =
+    "Split instances by finding gaps in image position continuity. This filter assume that "
+    "the instances are <b>already sorted</b> and only gaps between volumes remain.";
+
+//-----------------------------------------------------------------------------
+
+ImagePositionPatientSplitter::ImagePositionPatientSplitter(::fwDicomIOFilter::IFilter::Key key) : ISplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+ImagePositionPatientSplitter::~ImagePositionPatientSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImagePositionPatientSplitter::getName() const
+{
+    return ImagePositionPatientSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImagePositionPatientSplitter::getDescription() const
+{
+    return ImagePositionPatientSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+ImagePositionPatientSplitter::DicomSeriesContainerType ImagePositionPatientSplitter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result;
+
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+
+    double previousIndex        = 0;
+    unsigned int instanceNumber = 0;
+    double spacingBetweenSlices = 0;
+    const double epsilon        = 1e-2; // Value used to find a gap
+    ::fwMedData::DicomSeries::sptr currentSeries;
+    for(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type& file :  series->getLocalDicomPaths())
+    {
+        const std::string& filename = file.second.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        dataset = fileFormat.getDataset();
+
+        if(!dataset->tagExists(DCM_ImagePositionPatient) || !dataset->tagExists(DCM_ImageOrientationPatient))
+        {
+            const std::string msg =
+                "Unable to split the series using ImagePositionPatient and ImageOrientationPatient. "
+                "Tag(s) missing.";
+            throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+        }
+
+
+        fwVec3d imagePosition;
+        for(unsigned int i = 0; i < 3; ++i)
+        {
+            dataset->findAndGetFloat64(DCM_ImagePositionPatient, imagePosition[i], i);
+        }
+
+        fwVec3d imageOrientationU;
+        fwVec3d imageOrientationV;
+        for(unsigned int i = 0; i < 3; ++i)
+        {
+            dataset->findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationU[i], i);
+            dataset->findAndGetFloat64(DCM_ImageOrientationPatient, imageOrientationV[i], i+3);
+        }
+
+        //Compute Z direction (cross product)
+        fwVec3d zVector = ::fwMath::cross(imageOrientationU, imageOrientationV);
+
+        //Compute dot product to get the index
+        double index = ::fwMath::dot(imagePosition, zVector);
+
+        //Compute spacing
+        double spacing = index - previousIndex;
+        if(currentSeries && spacingBetweenSlices == 0)
+        {
+            spacingBetweenSlices = spacing;
+        }
+
+        // First frame or volume detected: We create a new Series
+        if(!currentSeries || (fabs(spacing-spacingBetweenSlices) > epsilon) )
+        {
+            if(currentSeries)
+            {
+                result.push_back(currentSeries);
+                currentSeries->setNumberOfInstances((unsigned int)(currentSeries->getLocalDicomPaths().size()));
+            }
+            instanceNumber = 0;
+            currentSeries  = ::fwMedData::DicomSeries::New();
+            currentSeries->deepCopy(series);
+            ::fwMedData::DicomSeries::DicomPathContainerType dicomPathContainer;
+            currentSeries->setLocalDicomPaths(dicomPathContainer);
+        }
+
+        currentSeries->addDicomPath(instanceNumber++, filename);
+        previousIndex = index;
+
+    }
+
+    // Push last series created
+    result.push_back(currentSeries);
+    currentSeries->setNumberOfInstances((unsigned int)(currentSeries->getLocalDicomPaths().size()));
+
+    if(result.size() > 1)
+    {
+        logger->warning("Series has been split according to slice positions.");
+    }
+
+    return result;
+
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageTypeSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageTypeSplitter.cpp
new file mode 100644
index 0000000..869d95a
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/ImageTypeSplitter.cpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/ImageTypeSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+#include <string>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::ImageTypeSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string ImageTypeSplitter::s_FILTER_NAME        = "Image type splitter";
+const std::string ImageTypeSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to image type tag.";
+
+//-----------------------------------------------------------------------------
+
+ImageTypeSplitter::ImageTypeSplitter(::fwDicomIOFilter::IFilter::Key key) : TagValueSplitter(key)
+{
+    this->setTag(DCM_ImageType);
+}
+
+//-----------------------------------------------------------------------------
+
+ImageTypeSplitter::~ImageTypeSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImageTypeSplitter::getName() const
+{
+    return ImageTypeSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string ImageTypeSplitter::getDescription() const
+{
+    return ImageTypeSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool ImageTypeSplitter::isConfigurationRequired() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/SOPClassUIDSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/SOPClassUIDSplitter.cpp
new file mode 100644
index 0000000..e481c67
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/SOPClassUIDSplitter.cpp
@@ -0,0 +1,106 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/SOPClassUIDSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmdata/dcuid.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::SOPClassUIDSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string SOPClassUIDSplitter::s_FILTER_NAME        = "SOPClassUID splitter";
+const std::string SOPClassUIDSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to <i>SOPClassUID</i> tag.";
+
+//-----------------------------------------------------------------------------
+
+SOPClassUIDSplitter::SOPClassUIDSplitter(::fwDicomIOFilter::IFilter::Key key) :
+    ::fwDicomIOFilter::splitter::TagValueSplitter(key)
+{
+    this->setTag(DCM_SOPClassUID);
+}
+
+//-----------------------------------------------------------------------------
+
+SOPClassUIDSplitter::~SOPClassUIDSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string SOPClassUIDSplitter::getName() const
+{
+    return SOPClassUIDSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string SOPClassUIDSplitter::getDescription() const
+{
+    return SOPClassUIDSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool SOPClassUIDSplitter::isConfigurationRequired() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+SOPClassUIDSplitter::DicomSeriesContainerType SOPClassUIDSplitter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    DicomSeriesContainerType result = ::fwDicomIOFilter::splitter::TagValueSplitter::apply(series, logger);
+
+    for(const ::fwMedData::DicomSeries::sptr& s :  result)
+    {
+
+        DcmFileFormat fileFormat;
+        OFCondition status;
+        DcmDataset* dataset;
+        OFString data;
+
+        // Open file
+        const std::string& filename = s->getLocalDicomPaths().begin()->second.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+
+        // Read SOPClassUID
+        dataset = fileFormat.getDataset();
+        status  = dataset->findAndGetOFStringArray(DCM_SOPClassUID,data);
+        FW_RAISE_IF("Unable to read tags: \""+filename+"\"", status.bad());
+
+        ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer;
+        sopClassUIDContainer.insert(data.c_str());
+        s->setSOPClassUIDs(sopClassUIDContainer);
+    }
+
+    if(result.size() > 1)
+    {
+        logger->warning("The same series instance UID has been used for several instances "
+                        "with different SOP class UID. The series has been split.");
+    }
+
+    return result;
+
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.cpp
new file mode 100644
index 0000000..aeeb80f
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.cpp
@@ -0,0 +1,124 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string TagValueInstanceRemoveSplitter::s_FILTER_NAME        = "Tag value instance remove splitter";
+const std::string TagValueInstanceRemoveSplitter::s_FILTER_DESCRIPTION =
+    "Remove instances according to a tag value.";
+
+//-----------------------------------------------------------------------------
+
+TagValueInstanceRemoveSplitter::TagValueInstanceRemoveSplitter(::fwDicomIOFilter::IFilter::Key key) : ISplitter()
+{
+    m_tag      = DCM_UndefinedTagKey;
+    m_tagValue = "";
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueInstanceRemoveSplitter::~TagValueInstanceRemoveSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueInstanceRemoveSplitter::getName() const
+{
+    return TagValueInstanceRemoveSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueInstanceRemoveSplitter::getDescription() const
+{
+    return TagValueInstanceRemoveSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueInstanceRemoveSplitter::isConfigurationRequired() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueInstanceRemoveSplitter::DicomSeriesContainerType TagValueInstanceRemoveSplitter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    if(m_tag == DCM_UndefinedTagKey)
+    {
+        const std::string msg = "Unable to split the series, the specified tag is not valid.";
+        throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+    }
+
+    DicomSeriesContainerType result;
+
+    typedef std::vector< std::string > InstanceContainerType;
+
+    // Create a container to store the instances
+    InstanceContainerType instances;
+
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+    OFString data;
+
+    for(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type& file :  series->getLocalDicomPaths())
+    {
+        const std::string& filename = file.second.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        dataset = fileFormat.getDataset();
+
+        // Get the value of the instance
+        dataset->findAndGetOFStringArray(m_tag,data);
+        ::std::string value = data.c_str();
+
+        if(value != m_tagValue)
+        {
+            instances.push_back(filename.c_str());
+        }
+        else
+        {
+            logger->warning("An instance has been removed from the series.");
+        }
+    }
+
+    // Update series
+    ::fwMedData::DicomSeries::DicomPathContainerType dicomPathContainer;
+    series->setLocalDicomPaths(dicomPathContainer);
+    unsigned int index = 0;
+    for(std::string file :  instances)
+    {
+        series->addDicomPath(index++, file);
+    }
+    series->setNumberOfInstances(static_cast<unsigned int>(series->getLocalDicomPaths().size()));
+    result.push_back(series);
+
+    return result;
+
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TagValueSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TagValueSplitter.cpp
new file mode 100644
index 0000000..87ce143
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TagValueSplitter.cpp
@@ -0,0 +1,137 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/registry/macros.hpp"
+#include "fwDicomIOFilter/exceptions/FilterFailure.hpp"
+#include "fwDicomIOFilter/splitter/TagValueSplitter.hpp"
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/diutil.h>
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmdata/dcdeftag.h>
+#include <dcmtk/dcmimgle/dcmimage.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::TagValueSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string TagValueSplitter::s_FILTER_NAME        = "Tag value splitter";
+const std::string TagValueSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to a tag value.";
+
+//-----------------------------------------------------------------------------
+
+TagValueSplitter::TagValueSplitter(::fwDicomIOFilter::IFilter::Key key) : ISplitter()
+{
+    m_tag = DCM_UndefinedTagKey;
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueSplitter::~TagValueSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueSplitter::getName() const
+{
+    return TagValueSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueSplitter::getDescription() const
+{
+    return TagValueSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueSplitter::isConfigurationRequired() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueSplitter::DicomSeriesContainerType TagValueSplitter::apply(
+    const ::fwMedData::DicomSeries::sptr& series, const ::fwLog::Logger::sptr& logger)
+const throw(::fwDicomIOFilter::exceptions::FilterFailure)
+{
+    if(m_tag == DCM_UndefinedTagKey)
+    {
+        const std::string msg = "Unable to split the series, the specified tag is not valid.";
+        throw ::fwDicomIOFilter::exceptions::FilterFailure(msg);
+    }
+
+    DicomSeriesContainerType result;
+
+    typedef std::vector< std::string > InstanceContainerType;
+    typedef std::map< std::string, InstanceContainerType > InstanceGroupContainer;
+
+    // Create a container to store the groups of instances
+    InstanceGroupContainer groupContainer;
+
+    DcmFileFormat fileFormat;
+    OFCondition status;
+    DcmDataset* dataset;
+    OFString data;
+
+    for(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type& file :  series->getLocalDicomPaths())
+    {
+        const std::string& filename = file.second.string();
+        status = fileFormat.loadFile(filename.c_str());
+        FW_RAISE_IF("Unable to read the file: \""+filename+"\"", status.bad());
+        dataset = fileFormat.getDataset();
+
+        // Get the value of the instance
+        dataset->findAndGetOFStringArray(m_tag,data);
+        ::std::string value = data.c_str();
+
+        // Add the instance to the group
+        groupContainer[value].push_back(filename.c_str());
+    }
+
+    for(InstanceGroupContainer::value_type group :  groupContainer)
+    {
+        // Copy the series
+        ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::New();
+        dicomSeries->deepCopy(series);
+        ::fwMedData::DicomSeries::DicomPathContainerType dicomPathContainer;
+        dicomSeries->setLocalDicomPaths(dicomPathContainer);
+        unsigned int index = 0;
+
+        // Add the paths to the series
+        for(std::string file :  group.second)
+        {
+            dicomSeries->addDicomPath(index++, file);
+        }
+
+        // Set number of instances
+        dicomSeries->setNumberOfInstances(static_cast<unsigned int>(dicomSeries->getLocalDicomPaths().size()));
+
+        result.push_back(dicomSeries);
+    }
+
+    if(result.size() > 1)
+    {
+        std::stringstream ss;
+        ss << "Series has been split according to the tag value (" <<
+            std::hex << std::setfill('0') << std::setw(4) << m_tag.getGroup() << "," <<
+            std::hex << std::setfill('0') << std::setw(4) << m_tag.getElement() << ").";
+        logger->warning(ss.str());
+    }
+
+    return result;
+
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TemporalPositionSplitter.cpp b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TemporalPositionSplitter.cpp
new file mode 100644
index 0000000..7b6a4a3
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/src/fwDicomIOFilter/splitter/TemporalPositionSplitter.cpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilter/splitter/TemporalPositionSplitter.hpp"
+#include "fwDicomIOFilter/registry/macros.hpp"
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilter::splitter::TemporalPositionSplitter );
+
+namespace fwDicomIOFilter
+{
+namespace splitter
+{
+
+const std::string TemporalPositionSplitter::s_FILTER_NAME        = "Temporal position splitter";
+const std::string TemporalPositionSplitter::s_FILTER_DESCRIPTION =
+    "Split instances according to temporal position identifier tag.";
+
+//-----------------------------------------------------------------------------
+
+TemporalPositionSplitter::TemporalPositionSplitter(::fwDicomIOFilter::IFilter::Key key) : TagValueSplitter(key)
+{
+    this->setTag(DCM_TemporalPositionIdentifier);
+}
+
+//-----------------------------------------------------------------------------
+
+TemporalPositionSplitter::~TemporalPositionSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TemporalPositionSplitter::getName() const
+{
+    return TemporalPositionSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TemporalPositionSplitter::getDescription() const
+{
+    return TemporalPositionSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TemporalPositionSplitter::isConfigurationRequired() const
+{
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace splitter
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/CMakeLists.txt b/SrcLib/io/fwDicomIOFilter/test/CMakeLists.txt
new file mode 100644
index 0000000..7fd814e
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/CMakeLists.txt
@@ -0,0 +1,21 @@
+fwLoadProperties()
+
+
+find_package (Boost REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+find_package(DCMTK REQUIRED)
+fwForwardInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
+
+find_package(GDCM REQUIRED)
+include(${GDCM_USE_FILE})
+fwForwardInclude( ${GDCM_INCLUDE_DIRS} )
+fwLink(
+    gdcmCommon
+    gdcmMSFF
+)
+
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
diff --git a/SrcLib/io/fwDicomIOFilter/test/Properties.cmake b/SrcLib/io/fwDicomIOFilter/test/Properties.cmake
new file mode 100644
index 0000000..a1ed9b7
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/Properties.cmake
@@ -0,0 +1,18 @@
+
+set( NAME fwDicomIOFilterTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwDicomIOFilter
+    fwTools
+    fwCore
+    fwTest
+    fwMath
+    fwData
+    fwMedData
+    fwGdcmIO
+    fwLog
+    )
+set( REQUIREMENTS
+
+    )
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/AcquisitionNumberSplitterTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/AcquisitionNumberSplitterTest.hpp
new file mode 100644
index 0000000..8a611c8
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/AcquisitionNumberSplitterTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_ACQUISITIONNUMBERSPLITTERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_ACQUISITIONNUMBERSPLITTERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test AcquisitionNumberSplitter and TagValueSplitter classes
+ */
+class AcquisitionNumberSplitterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( AcquisitionNumberSplitterTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_ACQUISITIONNUMBERSPLITTERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/CTImageStorageDefaultCompositeTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/CTImageStorageDefaultCompositeTest.hpp
new file mode 100644
index 0000000..4beddd2
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/CTImageStorageDefaultCompositeTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_CTIMAGESTORAGEDEFAULTCOMPOSITETEST_HPP__
+#define __FWDICOMIOFILTER_UT_CTIMAGESTORAGEDEFAULTCOMPOSITETEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test CTImageStorageDefaultComposite class
+ */
+class CTImageStorageDefaultCompositeTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( CTImageStorageDefaultCompositeTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_CTIMAGESTORAGEDEFAULTCOMPOSITETEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/DefaultDicomFilterCustomTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/DefaultDicomFilterCustomTest.hpp
new file mode 100644
index 0000000..e4112e2
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/DefaultDicomFilterCustomTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_DEFAULTDICOMFILTERCUSTOMTEST_HPP__
+#define __FWDICOMIOFILTER_UT_DEFAULTDICOMFILTERCUSTOMTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test DefaultDicomFilter class
+ */
+class DefaultDicomFilterCustomTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DefaultDicomFilterCustomTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_DEFAULTDICOMFILTERCUSTOMTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/ImagePositionPatientSorterTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/ImagePositionPatientSorterTest.hpp
new file mode 100644
index 0000000..a2eaaad
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/ImagePositionPatientSorterTest.hpp
@@ -0,0 +1,46 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_IMAGEPOSITIONPATIENTSORTERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_IMAGEPOSITIONPATIENTSORTERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test ImagePositionPatientSorter class
+ */
+class ImagePositionPatientSorterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( ImagePositionPatientSorterTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST( applyFilterOnMultipleVolumeImage );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+    /// Apply the filter on an unsupported multiple volume image
+    void applyFilterOnMultipleVolumeImage();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_IMAGEPOSITIONPATIENTSORTERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/ImagePositionPatientSplitterTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/ImagePositionPatientSplitterTest.hpp
new file mode 100644
index 0000000..70cca0f
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/ImagePositionPatientSplitterTest.hpp
@@ -0,0 +1,46 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_IMAGEPOSITIONPATIENTSPLITTERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_IMAGEPOSITIONPATIENTSPLITTERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test ImagePositionPatientSplitter class
+ */
+class ImagePositionPatientSplitterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( ImagePositionPatientSplitterTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST( negativeSpacingApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+    /// Apply the patch on a "negative spacing image" with missing slices and verify that the DicomSeries
+    /// has been correctly modified
+    void negativeSpacingApplication();
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_IMAGEPOSITIONPATIENTSPLITTERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/InstanceNumberSorterTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/InstanceNumberSorterTest.hpp
new file mode 100644
index 0000000..f2fdb0d
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/InstanceNumberSorterTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_INSTANCENUMBERSORTERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_INSTANCENUMBERSORTERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test InstanceNumberSorter and TagValueSorter classes
+ */
+class InstanceNumberSorterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( InstanceNumberSorterTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_INSTANCENUMBERSORTERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/NoFilterCustomTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/NoFilterCustomTest.hpp
new file mode 100644
index 0000000..9beae4c
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/NoFilterCustomTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_NOFILTERCUSTOMTEST_HPP__
+#define __FWDICOMIOFILTER_UT_NOFILTERCUSTOMTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test NoFilter class
+ */
+class NoFilterCustomTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( NoFilterCustomTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_NOFILTERCUSTOMTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/SOPClassUIDSplitterTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/SOPClassUIDSplitterTest.hpp
new file mode 100644
index 0000000..4542ba6
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/SOPClassUIDSplitterTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_SOPCLASSUIDSPLITTERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_SOPCLASSUIDSPLITTERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test SliceThicknessModifier and TagValueSplitter classes
+ */
+class SOPClassUIDSplitterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( SOPClassUIDSplitterTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_SOPCLASSUIDSPLITTERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/SliceThicknessModifierTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/SliceThicknessModifierTest.hpp
new file mode 100644
index 0000000..7949b29
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/SliceThicknessModifierTest.hpp
@@ -0,0 +1,46 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_SLICETHICKNESSMODIFIERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_SLICETHICKNESSMODIFIERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test SliceThicknessModifier class
+ */
+class SliceThicknessModifierTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( SliceThicknessModifierTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST( applyFilterOn2DImage );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the filter and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+    /// Apply the filter on an unsupported 2D image
+    void applyFilterOn2DImage();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_SLICETHICKNESSMODIFIERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/include/TagValueInstanceRemoveSplitterTest.hpp b/SrcLib/io/fwDicomIOFilter/test/tu/include/TagValueInstanceRemoveSplitterTest.hpp
new file mode 100644
index 0000000..3d87a15
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/include/TagValueInstanceRemoveSplitterTest.hpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTER_UT_TAGVALUEINSTANCEREMOVESPLITTERTEST_HPP__
+#define __FWDICOMIOFILTER_UT_TAGVALUEINSTANCEREMOVESPLITTERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+#include <fwRuntime/EConfigurationElement.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+/**
+ * @brief Test TagValueInstanceRemoveSplitter class
+ */
+class TagValueInstanceRemoveSplitterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( TagValueInstanceRemoveSplitterTest );
+CPPUNIT_TEST( simpleApplication );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Apply the patch and verify that the DicomSeries has been correctly modified
+    void simpleApplication();
+
+};
+
+} // namespace ut
+} // namespace fwDicomIOFilter
+
+#endif // __FWDICOMIOFILTER_UT_TAGVALUEINSTANCEREMOVESPLITTERTEST_HPP__
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/AcquisitionNumberSplitterTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/AcquisitionNumberSplitterTest.cpp
new file mode 100644
index 0000000..abb41e1
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/AcquisitionNumberSplitterTest.cpp
@@ -0,0 +1,84 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "AcquisitionNumberSplitterTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::AcquisitionNumberSplitterTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void AcquisitionNumberSplitterTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void AcquisitionNumberSplitterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void AcquisitionNumberSplitterTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "08-CT-PACS";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::splitter::AcquisitionNumberSplitter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(2), dicomSeriesContainer.size());
+    ::fwMedData::DicomSeries::sptr dicomSeriesA = dicomSeriesContainer[0];
+    ::fwMedData::DicomSeries::sptr dicomSeriesB = dicomSeriesContainer[1];
+
+    // Check number of instances in series
+    CPPUNIT_ASSERT_EQUAL(size_t(233), dicomSeriesA->getLocalDicomPaths().size());
+    CPPUNIT_ASSERT_EQUAL(size_t(275), dicomSeriesB->getLocalDicomPaths().size());
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/CTImageStorageDefaultCompositeTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/CTImageStorageDefaultCompositeTest.cpp
new file mode 100644
index 0000000..6afeee5
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/CTImageStorageDefaultCompositeTest.cpp
@@ -0,0 +1,113 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "CTImageStorageDefaultCompositeTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::CTImageStorageDefaultCompositeTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void CTImageStorageDefaultCompositeTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void CTImageStorageDefaultCompositeTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void CTImageStorageDefaultCompositeTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "08-CT-PACS";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeriesA = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    ::fwMedData::DicomSeries::sptr dicomSeriesB = ::fwMedData::DicomSeries::New();
+    dicomSeriesB->deepCopy(dicomSeriesA);
+    CPPUNIT_ASSERT(dicomSeriesA);
+    CPPUNIT_ASSERT(dicomSeriesB);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainerA;
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainerB;
+    dicomSeriesContainerA.push_back(dicomSeriesA);
+    dicomSeriesContainerB.push_back(dicomSeriesB);
+
+    // Apply composite filter on the first DicomSeries
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::composite::CTImageStorageDefaultComposite");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerA, filter, true);
+
+    // Apply other filters on the second DicomSeries
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::splitter::AcquisitionNumberSplitter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerB, filter, true);
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::sorter::InstanceNumberSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerB, filter, true);
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::sorter::ImagePositionPatientSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerB, filter, true);
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::splitter::ImagePositionPatientSplitter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerB, filter, true);
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::sorter::ImagePositionPatientSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerB, filter, true);
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::modifier::SliceThicknessModifier");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerB, filter, true);
+
+    // Compare the two series
+    CPPUNIT_ASSERT_EQUAL(dicomSeriesContainerA.size(), dicomSeriesContainerB.size());
+    for(unsigned int j = 0; j < dicomSeriesContainerA.size(); ++j)  // For every series
+    {
+        for(unsigned int i = 0; i < dicomSeriesContainerA[j]->getLocalDicomPaths().size(); ++i) // For every instances
+        {
+            CPPUNIT_ASSERT_EQUAL(dicomSeriesContainerA[j]->getLocalDicomPaths().at(i),
+                                 dicomSeriesContainerB[j]->getLocalDicomPaths().at(i));
+        }
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/DefaultDicomFilterCustomTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/DefaultDicomFilterCustomTest.cpp
new file mode 100644
index 0000000..03a0c0c
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/DefaultDicomFilterCustomTest.cpp
@@ -0,0 +1,124 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DefaultDicomFilterCustomTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <gdcmScanner.h>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::DefaultDicomFilterCustomTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DefaultDicomFilterCustomTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void DefaultDicomFilterCustomTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void DefaultDicomFilterCustomTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SEG";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::custom::DefaultDicomFilter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(2), dicomSeriesContainer.size());
+    ::fwMedData::DicomSeries::sptr dicomSeriesA = dicomSeriesContainer[0];
+    ::fwMedData::DicomSeries::sptr dicomSeriesB = dicomSeriesContainer[1];
+
+    // Check SOP Class UIDs
+    CPPUNIT_ASSERT_EQUAL(std::string("1.2.840.10008.5.1.4.1.1.2"), *dicomSeriesA->getSOPClassUIDs().begin());       // CT Image Storage
+    CPPUNIT_ASSERT_EQUAL(std::string("1.2.840.10008.5.1.4.1.1.66.5"), *dicomSeriesB->getSOPClassUIDs().begin());    // Surface Segmentation Storage
+
+    // Create the list of files
+    ::fwMedData::DicomSeries::DicomPathContainerType dicomPaths = dicomSeriesA->getLocalDicomPaths();
+    std::vector< std::string > filenames;
+    ::fwMedData::DicomSeries::DicomPathContainerType::iterator itPath = dicomPaths.begin();
+    for(; itPath != dicomPaths.end(); ++itPath)
+    {
+        filenames.push_back(itPath->second.string());
+    }
+
+    // Read the instance number of each file
+    ::gdcm::Scanner scanner;
+    scanner.AddTag(::gdcm::Tag(0x0020, 0x0013));
+    CPPUNIT_ASSERT(scanner.Scan(filenames));
+
+    // Loop through instance number
+    ::gdcm::Directory::FilenamesType keys = scanner.GetKeys();
+    ::gdcm::Directory::FilenamesType::const_iterator itFilename;
+    int oldInstanceNumber = -1;
+    for(itFilename = keys.begin(); itFilename != keys.end(); ++itFilename)
+    {
+        const std::string filename = itFilename->c_str();
+
+        // Retrieve instance number
+        std::string instanceNumberStr = scanner.GetValue(filename.c_str(), ::gdcm::Tag(0x0020, 0x0013));
+        ::boost::algorithm::trim(instanceNumberStr);
+        CPPUNIT_ASSERT(!instanceNumberStr.empty());
+        int instanceNumber = ::boost::lexical_cast<unsigned int>(instanceNumberStr);
+
+        // Check that the instance number is bigger that the previous one
+        std::stringstream ss;
+        ss << instanceNumber << " is not lower than " << oldInstanceNumber;
+        CPPUNIT_ASSERT_MESSAGE(ss.str(), instanceNumber > oldInstanceNumber);
+        oldInstanceNumber = instanceNumber;
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/ImagePositionPatientSorterTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/ImagePositionPatientSorterTest.cpp
new file mode 100644
index 0000000..4d4bccc
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/ImagePositionPatientSorterTest.cpp
@@ -0,0 +1,186 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ImagePositionPatientSorterTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwMath/VectorFunctions.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <gdcmScanner.h>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::ImagePositionPatientSorterTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void ImagePositionPatientSorterTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void ImagePositionPatientSorterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void ImagePositionPatientSorterTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "01-CT-DICOM_LIVER";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::sorter::ImagePositionPatientSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(1), dicomSeriesContainer.size());
+    dicomSeries = dicomSeriesContainer[0];
+
+    // Create the list of files
+    ::fwMedData::DicomSeries::DicomPathContainerType dicomPaths = dicomSeries->getLocalDicomPaths();
+    std::vector< std::string > filenames;
+    ::fwMedData::DicomSeries::DicomPathContainerType::iterator itPath = dicomPaths.begin();
+    for(; itPath != dicomPaths.end(); ++itPath)
+    {
+        filenames.push_back(itPath->second.string());
+    }
+
+    // Read the instance number of each file
+    ::gdcm::Scanner scanner;
+    scanner.AddTag(::gdcm::Tag(0x0020, 0x0032));    // ImagePositionPatient
+    scanner.AddTag(::gdcm::Tag(0x0020, 0x0037));    // ImageOrientationPatient
+    CPPUNIT_ASSERT(scanner.Scan(filenames));
+
+    // Loop through instance number
+    ::gdcm::Directory::FilenamesType keys = scanner.GetKeys();
+    ::gdcm::Directory::FilenamesType::const_iterator itFilename;
+    double oldPosition = -1;
+    for(itFilename = keys.begin(); itFilename != keys.end(); ++itFilename)
+    {
+        const std::string filename = itFilename->c_str();
+
+        // Retrieve image position patient
+        std::string imagePositionPatientStr = scanner.GetValue(filename.c_str(), ::gdcm::Tag(0x0020, 0x0032));
+        ::boost::algorithm::trim(imagePositionPatientStr);
+        CPPUNIT_ASSERT(!imagePositionPatientStr.empty());
+        std::vector<std::string> imagePositionPatient;
+        ::boost::split(imagePositionPatient, imagePositionPatientStr, ::boost::is_any_of("\\"));
+        CPPUNIT_ASSERT_EQUAL(size_t(3), imagePositionPatient.size());
+
+        // Retrieve image orientation patient
+        std::string imageOrientationPatientStr = scanner.GetValue(filename.c_str(), ::gdcm::Tag(0x0020, 0x0037));
+        ::boost::algorithm::trim(imageOrientationPatientStr);
+        CPPUNIT_ASSERT(!imagePositionPatientStr.empty());
+        std::vector<std::string> imageOrientationPatient;
+        ::boost::split(imageOrientationPatient, imageOrientationPatientStr, ::boost::is_any_of("\\"));
+        CPPUNIT_ASSERT_EQUAL(size_t(6), imageOrientationPatient.size());
+
+        fwVec3d imagePosition;
+        imagePosition[0] = ::boost::lexical_cast<double>(imagePositionPatient[0]);
+        imagePosition[1] = ::boost::lexical_cast<double>(imagePositionPatient[1]);
+        imagePosition[2] = ::boost::lexical_cast<double>(imagePositionPatient[2]);
+
+        fwVec3d imageOrientationU;
+        imageOrientationU[0] = ::boost::lexical_cast<double>(imageOrientationPatient[0]);
+        imageOrientationU[1] = ::boost::lexical_cast<double>(imageOrientationPatient[1]);
+        imageOrientationU[2] = ::boost::lexical_cast<double>(imageOrientationPatient[2]);
+
+        fwVec3d imageOrientationV;
+        imageOrientationV[0] = ::boost::lexical_cast<double>(imageOrientationPatient[3]);
+        imageOrientationV[1] = ::boost::lexical_cast<double>(imageOrientationPatient[4]);
+        imageOrientationV[2] = ::boost::lexical_cast<double>(imageOrientationPatient[5]);
+
+        //Compute Z direction (cross product)
+        fwVec3d zVector = ::fwMath::cross(imageOrientationU, imageOrientationV);
+
+        //Compute dot product to get the position
+        double position = ::fwMath::dot(imagePosition, zVector);
+
+        // Check that the position is bigger that the previous one
+        std::stringstream ss;
+        ss << position << " is not lower than " << oldPosition;
+        CPPUNIT_ASSERT_MESSAGE(ss.str(), position > oldPosition);
+        oldPosition = position;
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void ImagePositionPatientSorterTest::applyFilterOnMultipleVolumeImage()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "08-CT-PACS";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::sorter::ImagePositionPatientSorter");
+    CPPUNIT_ASSERT(filter);
+    CPPUNIT_ASSERT_THROW(::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, false),
+                         ::fwDicomIOFilter::exceptions::FilterFailure);
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/ImagePositionPatientSplitterTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/ImagePositionPatientSplitterTest.cpp
new file mode 100644
index 0000000..3561d26
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/ImagePositionPatientSplitterTest.cpp
@@ -0,0 +1,130 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "ImagePositionPatientSplitterTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::ImagePositionPatientSplitterTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void ImagePositionPatientSplitterTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void ImagePositionPatientSplitterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void ImagePositionPatientSplitterTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "08-CT-PACS";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Sort instances according to instance number
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::sorter::InstanceNumberSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+
+    // Apply filter
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::splitter::ImagePositionPatientSplitter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(2), dicomSeriesContainer.size());
+    ::fwMedData::DicomSeries::sptr dicomSeriesA = dicomSeriesContainer[0];
+    ::fwMedData::DicomSeries::sptr dicomSeriesB = dicomSeriesContainer[1];
+
+    // Check number of instances in series
+    CPPUNIT_ASSERT_EQUAL(size_t(233), dicomSeriesA->getLocalDicomPaths().size());
+    CPPUNIT_ASSERT_EQUAL(size_t(275), dicomSeriesB->getLocalDicomPaths().size());
+
+}
+
+
+//-----------------------------------------------------------------------------
+
+void ImagePositionPatientSplitterTest::negativeSpacingApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "04-CT-DICOM_SCRAT_CORRUPTED/46140000";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Sort instances according to instance number
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::sorter::InstanceNumberSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+
+    // Apply filter
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::splitter::ImagePositionPatientSplitter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(37), dicomSeriesContainer.size());
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/InstanceNumberSorterTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/InstanceNumberSorterTest.cpp
new file mode 100644
index 0000000..7096186
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/InstanceNumberSorterTest.cpp
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "InstanceNumberSorterTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <gdcmScanner.h>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::InstanceNumberSorterTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void InstanceNumberSorterTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void InstanceNumberSorterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void InstanceNumberSorterTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "01-CT-DICOM_LIVER";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::sorter::InstanceNumberSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(1), dicomSeriesContainer.size());
+    dicomSeries = dicomSeriesContainer[0];
+
+    // Create the list of files
+    ::fwMedData::DicomSeries::DicomPathContainerType dicomPaths = dicomSeries->getLocalDicomPaths();
+    std::vector< std::string > filenames;
+    ::fwMedData::DicomSeries::DicomPathContainerType::iterator itPath = dicomPaths.begin();
+    for(; itPath != dicomPaths.end(); ++itPath)
+    {
+        filenames.push_back(itPath->second.string());
+    }
+
+    // Read the instance number of each file
+    ::gdcm::Scanner scanner;
+    scanner.AddTag(::gdcm::Tag(0x0020, 0x0013));
+    CPPUNIT_ASSERT(scanner.Scan(filenames));
+
+    // Loop through instance number
+    ::gdcm::Directory::FilenamesType keys = scanner.GetKeys();
+    ::gdcm::Directory::FilenamesType::const_iterator itFilename;
+    int oldInstanceNumber = -1;
+    for(itFilename = keys.begin(); itFilename != keys.end(); ++itFilename)
+    {
+        const std::string filename = itFilename->c_str();
+
+        // Retrieve instance number
+        const std::string instanceNumberStr = scanner.GetValue(filename.c_str(), ::gdcm::Tag(0x0020, 0x0013));
+        CPPUNIT_ASSERT(!instanceNumberStr.empty());
+        int instanceNumber = ::boost::lexical_cast<unsigned int>(instanceNumberStr);
+
+        // Check that the instance number is bigger that the previous one
+        std::stringstream ss;
+        ss << instanceNumber << " is not lower than " << oldInstanceNumber;
+        CPPUNIT_ASSERT_MESSAGE(ss.str(), instanceNumber > oldInstanceNumber);
+        oldInstanceNumber = instanceNumber;
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/NoFilterCustomTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/NoFilterCustomTest.cpp
new file mode 100644
index 0000000..fc0a7ae
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/NoFilterCustomTest.cpp
@@ -0,0 +1,97 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "NoFilterCustomTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::NoFilterCustomTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void NoFilterCustomTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void NoFilterCustomTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void NoFilterCustomTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SEG";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeriesA = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    ::fwMedData::DicomSeries::sptr dicomSeriesB = ::fwMedData::DicomSeries::New();
+    dicomSeriesB->deepCopy(dicomSeriesA);
+    CPPUNIT_ASSERT(dicomSeriesA);
+    CPPUNIT_ASSERT(dicomSeriesB);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainerA;
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainerB;
+    dicomSeriesContainerA.push_back(dicomSeriesA);
+    dicomSeriesContainerB.push_back(dicomSeriesB);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::custom::NoFilter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainerA, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(1), dicomSeriesContainerA.size());
+    dicomSeriesA = dicomSeriesContainerA[0];
+
+    // Check Number of SOP Class UID
+    CPPUNIT_ASSERT_EQUAL(size_t(2), dicomSeriesA->getSOPClassUIDs().size());
+
+    // Compare the two series
+    CPPUNIT_ASSERT_EQUAL(dicomSeriesContainerA.size(), dicomSeriesContainerB.size());
+    for(unsigned int j = 0; j < dicomSeriesContainerA.size(); ++j)  // For every series
+    {
+        for(unsigned int i = 0; i < dicomSeriesContainerA[j]->getLocalDicomPaths().size(); ++i) // For every instances
+        {
+            CPPUNIT_ASSERT_EQUAL(dicomSeriesContainerA[j]->getLocalDicomPaths().at(i),
+                                 dicomSeriesContainerB[j]->getLocalDicomPaths().at(i));
+        }
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/SOPClassUIDSplitterTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/SOPClassUIDSplitterTest.cpp
new file mode 100644
index 0000000..b777b31
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/SOPClassUIDSplitterTest.cpp
@@ -0,0 +1,84 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "SOPClassUIDSplitterTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::SOPClassUIDSplitterTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void SOPClassUIDSplitterTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void SOPClassUIDSplitterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void SOPClassUIDSplitterTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SEG";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::splitter::SOPClassUIDSplitter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(2), dicomSeriesContainer.size());
+    ::fwMedData::DicomSeries::sptr dicomSeriesA = dicomSeriesContainer[0];
+    ::fwMedData::DicomSeries::sptr dicomSeriesB = dicomSeriesContainer[1];
+
+    // Check SOP Class UIDs
+    CPPUNIT_ASSERT_EQUAL(std::string("1.2.840.10008.5.1.4.1.1.2"), *dicomSeriesA->getSOPClassUIDs().begin());       // CT Image Storage
+    CPPUNIT_ASSERT_EQUAL(std::string("1.2.840.10008.5.1.4.1.1.66.5"), *dicomSeriesB->getSOPClassUIDs().begin());    // Surface Segmentation Storage
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/SliceThicknessModifierTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/SliceThicknessModifierTest.cpp
new file mode 100644
index 0000000..7d63e81
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/SliceThicknessModifierTest.cpp
@@ -0,0 +1,123 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "SliceThicknessModifierTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/lexical_cast.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::SliceThicknessModifierTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void SliceThicknessModifierTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void SliceThicknessModifierTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void SliceThicknessModifierTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "09-CT-PACS";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Sort instances according to instance number
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::sorter::InstanceNumberSorter");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+
+    // Apply filter
+    filter = ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::modifier::SliceThicknessModifier");
+    CPPUNIT_ASSERT(filter);
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(1), dicomSeriesContainer.size());
+    dicomSeries = dicomSeriesContainer[0];
+
+    // Check that the computed value has been added to the DicomSeries
+    const double delta          = 1e-8;
+    const double sliceThickness =
+        ::boost::lexical_cast<double>(dicomSeries->getComputedTagValues().at("SliceThickness"));
+    CPPUNIT_ASSERT_DOUBLES_EQUAL(0.8, sliceThickness, delta);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SliceThicknessModifierTest::applyFilterOn2DImage()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "46-MR-BARRE-MONO2-12-shoulder";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+        "::fwDicomIOFilter::modifier::SliceThicknessModifier");
+    CPPUNIT_ASSERT(filter);
+    CPPUNIT_ASSERT(!::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, false));
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwDicomIOFilter/test/tu/src/TagValueInstanceRemoveSplitterTest.cpp b/SrcLib/io/fwDicomIOFilter/test/tu/src/TagValueInstanceRemoveSplitterTest.cpp
new file mode 100644
index 0000000..fab1f6e
--- /dev/null
+++ b/SrcLib/io/fwDicomIOFilter/test/tu/src/TagValueInstanceRemoveSplitterTest.cpp
@@ -0,0 +1,88 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "TagValueInstanceRemoveSplitterTest.hpp"
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+#include <fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwDicomIOFilter::ut::TagValueInstanceRemoveSplitterTest );
+
+namespace fwDicomIOFilter
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void TagValueInstanceRemoveSplitterTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void TagValueInstanceRemoveSplitterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void TagValueInstanceRemoveSplitterTest::simpleApplication()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "08-CT-PACS";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Retrieve DicomSeries
+    ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast((*seriesDB)[0]);
+    CPPUNIT_ASSERT(dicomSeries);
+    std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer;
+    dicomSeriesContainer.push_back(dicomSeries);
+
+    // Apply filter
+    ::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter::sptr filter =
+        ::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter::dynamicCast(
+            ::fwDicomIOFilter::factory::New("::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter"));
+    CPPUNIT_ASSERT(filter);
+    filter->setTag(DCM_AcquisitionNumber);
+    filter->setTagValue("1");
+    ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer, filter, true);
+    CPPUNIT_ASSERT_EQUAL(size_t(1), dicomSeriesContainer.size());
+    dicomSeries = dicomSeriesContainer[0];
+
+    // Check number of instances in series
+    CPPUNIT_ASSERT_EQUAL(size_t(275), dicomSeries->getLocalDicomPaths().size());
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwDicomIOFilter
diff --git a/SrcLib/io/fwGdcmIO/CMakeLists.txt b/SrcLib/io/fwGdcmIO/CMakeLists.txt
new file mode 100644
index 0000000..4a286b2
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/CMakeLists.txt
@@ -0,0 +1,11 @@
+fwLoadProperties()
+
+
+find_package(Boost COMPONENTS filesystem REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+fwLink(${Boost_LIBRARIES})
+
+find_package(GDCM REQUIRED)
+include(${GDCM_USE_FILE})
+fwForwardInclude(${GDCM_INCLUDE_DIRS})
+fwLink(${GDCM_LIBRARIES} gdcmCommon gdcmMSFF)
diff --git a/SrcLib/io/fwGdcmIO/Properties.cmake b/SrcLib/io/fwGdcmIO/Properties.cmake
new file mode 100644
index 0000000..9dd9c92
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/Properties.cmake
@@ -0,0 +1,24 @@
+
+set( NAME fwGdcmIO )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwMath
+    fwMedData
+    fwMedDataTools
+    fwDataIO
+    fwTools
+    fwRuntime
+    fwDicomIOFilter
+    fwLog
+    fwJobs
+    fwCom
+    fwZip
+    fwDicomTools
+    fwDataTools
+    fwServices
+    fwDicomTools
+    )
+set( REQUIREMENTS )
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomCodedAttribute.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomCodedAttribute.hpp
new file mode 100644
index 0000000..8efe82e
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomCodedAttribute.hpp
@@ -0,0 +1,113 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_DICOMCODEDATTRIBUTE_HPP__
+#define __FWGDCMIO_CONTAINER_DICOMCODEDATTRIBUTE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <string>
+#include <vector>
+#include <iostream>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+
+/**
+ * @brief This class defines a coded entry of a SR
+ */
+class FWGDCMIO_CLASS_API DicomCodedAttribute
+{
+public:
+    /// Constructor
+    FWGDCMIO_API DicomCodedAttribute(const std::string& codeValue = "", const std::string& codingSchemeDesignator = "",
+                                     const std::string& codeMeaning = "", const std::string& codingSchemeVersion = "");
+
+    /// Return true if the attribute is empty
+    FWGDCMIO_API bool isEmpty() const;
+
+    /// Return true if the DicomCodedAttribute are the same
+    FWGDCMIO_API bool operator==(const DicomCodedAttribute& other) const;
+
+    /// Dump operator
+    FWGDCMIO_API friend std::ostream& operator<< (std::ostream& os, const DicomCodedAttribute& attribute)
+    {
+        os << "\\\"" << attribute.m_codeValue << "\\\" ";
+        os << "\\\"" << attribute.m_codingSchemeDesignator << "\\\" ";
+        os << "\\\"" << attribute.m_codeMeaning << "\\\" ";
+        os << "\\\"" << attribute.m_codingSchemeVersion << "\\\" ";
+        return os;
+    }
+
+    /// Get code value
+    const std::string getCodeValue() const
+    {
+        return m_codeValue;
+    }
+
+    /// Set code value
+    void setCodeValue(const std::string& codeValue)
+    {
+        m_codeValue = codeValue;
+    }
+
+    /// Get coding scheme designator
+    const std::string getCodingSchemeDesignator() const
+    {
+        return m_codingSchemeDesignator;
+    }
+
+    /// Set coding scheme designator
+    void setCodingSchemeDesignator(const std::string& codingSchemeDesignator)
+    {
+        m_codingSchemeDesignator = codingSchemeDesignator;
+    }
+
+    /// Get code meaning
+    const std::string getCodeMeaning() const
+    {
+        return m_codeMeaning;
+    }
+
+    /// Set code meaning
+    void setCodeMeaning(const std::string& codeMeaning)
+    {
+        m_codeMeaning = codeMeaning;
+    }
+
+    /// Get coding scheme version
+    const std::string getCodingSchemeVersion() const
+    {
+        return m_codingSchemeVersion;
+    }
+
+    /// Set coding scheme version
+    void setCodingSchemeVersion(const std::string& codingSchemeVersion)
+    {
+        m_codingSchemeVersion = codingSchemeVersion;
+    }
+
+protected:
+    /// Code Value (see : Tag(0008,0100) )
+    std::string m_codeValue;
+
+    /// Coding Scheme Designator (see : Tag(0008,0102) )
+    std::string m_codingSchemeDesignator;
+
+    /// Code Meaning (see : Tag(0008,0103) )
+    std::string m_codeMeaning;
+
+    /// Coding Scheme Version (see : Tag(0008,0104) )
+    std::string m_codingSchemeVersion;
+
+};
+
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_DICOMCODEDATTRIBUTE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomInstance.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomInstance.hpp
new file mode 100644
index 0000000..f972c36
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomInstance.hpp
@@ -0,0 +1,168 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_DICOMINSTANCE_HPP__
+#define __FWGDCMIO_CONTAINER_DICOMINSTANCE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <gdcmMediaStorage.h>
+
+#include <string>
+#include <vector>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwMedData
+{
+class Series;
+}
+
+namespace fwGdcmIO
+{
+namespace container
+{
+
+/**
+ * @brief This class defines a DICOM SOP instance. It is useful during the whole writing process.
+ * This class allows to share data between module writers.
+ */
+class FWGDCMIO_CLASS_API DicomInstance
+{
+public:
+
+    typedef std::vector< std::string > SOPInstanceUIDContainerType;
+
+    /// Constructor
+    FWGDCMIO_API DicomInstance();
+
+    /**
+     * @brief Constructor
+     * @param[in] series Series from which the instance is created
+     * @param[in] isMultiFiles Set whether the instance must be split in several files or not
+     */
+    FWGDCMIO_API DicomInstance(SPTR(::fwMedData::Series)series, bool isMultiFiles);
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries from which the instance is created
+     */
+    FWGDCMIO_API DicomInstance(SPTR(::fwMedData::DicomSeries)dicomSeries);
+
+    /// Copy constructor
+    FWGDCMIO_API DicomInstance(const DicomInstance& dicomInstance);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomInstance();
+
+    /// Get the flag on multi-files state of an image series
+    bool getIsMultiFiles() const
+    {
+        return m_isMultiFiles;
+    }
+
+    /// Set the flag on multi-files state of an image series
+    void setIsMultiFiles(bool isMultiFiles)
+    {
+        m_isMultiFiles = isMultiFiles;
+    }
+
+    /// Get SOP Class UID
+    const std::string& getSOPClassUID() const
+    {
+        return m_SOPClassUID;
+    }
+
+    /// Set SOP Class UID
+    void setSOPClassUID(const std::string& SOPClassUID)
+    {
+        m_SOPClassUID = SOPClassUID;
+    }
+
+    /// Get Series Instance UID
+    const std::string& getSeriesInstanceUID() const
+    {
+        return m_seriesInstanceUID;
+    }
+
+    /// Set Series Instance UID
+    void setSeriesInstanceUID(const std::string& seriesInstanceUID)
+    {
+        m_seriesInstanceUID = seriesInstanceUID;
+    }
+
+    /// Get Study Instance UID
+    const std::string& getStudyInstanceUID() const
+    {
+        return m_studyInstanceUID;
+    }
+
+    /// Set Study Instance UID
+    void setStudyInstanceUID(const std::string& studyInstanceUID)
+    {
+        m_studyInstanceUID = studyInstanceUID;
+    }
+
+    /// Get SOP Instance UID container
+    const SOPInstanceUIDContainerType& getSOPInstanceUIDContainer() const
+    {
+        return m_SOPInstanceUIDContainer;
+    }
+
+    /// Get SOP Instance UID container
+    SOPInstanceUIDContainerType& getRefSOPInstanceUIDContainer()
+    {
+        return m_SOPInstanceUIDContainer;
+    }
+
+    /// Set SOP Instance UID Container
+    void setSOPInstanceUIDContainer(const SOPInstanceUIDContainerType& SOPInstanceUIDContainer)
+    {
+        m_SOPInstanceUIDContainer = SOPInstanceUIDContainer;
+    }
+
+protected:
+    /**
+     * @brief Compute SOPClassUID
+     * @param[in] series Series
+     */
+    void computeSOPClassUID(SPTR(::fwMedData::Series) series);
+
+    /**
+     * @brief Generate SOPInstanceUIDs according to series type and dimension
+     * @param[in] series Series
+     */
+    void generateSOPInstanceUIDs(SPTR(::fwMedData::Series) series);
+
+private:
+
+    /// Define if the instance must be split in several files
+    bool m_isMultiFiles;
+
+    /// SOP Class UID
+    std::string m_SOPClassUID;
+
+    /// Study Instance UID
+    std::string m_studyInstanceUID;
+
+    /// Series Instance UID
+    std::string m_seriesInstanceUID;
+
+    /// SOP Instance UID container
+    SOPInstanceUIDContainerType m_SOPInstanceUIDContainer;
+
+};
+
+}
+//namespace container
+}//namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_DICOMINSTANCE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomSurface.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomSurface.hpp
new file mode 100644
index 0000000..1999817
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/DicomSurface.hpp
@@ -0,0 +1,142 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_DICOMSURFACE_HPP__
+#define __FWGDCMIO_CONTAINER_DICOMSURFACE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+
+#include <stdint.h> // for uint16_t on Windows
+
+namespace fwGdcmIO
+{
+namespace container
+{
+
+/**
+ * @brief This class defines one surface mesh item in order to transform into DICOM/FW4SPL form.
+ */
+class FWGDCMIO_CLASS_API DicomSurface
+{
+
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSurface();
+
+    /// Destructor
+    FWGDCMIO_API ~DicomSurface();
+
+    /**
+     * @brief Set members from a reconstruction.
+     * @param[in] reconstruction Source reconstruction
+     */
+    FWGDCMIO_API void setFromData(fwData::Reconstruction::csptr reconstruction);
+
+    /**
+     * @brief Set a reconstruction from DicomSurface data.
+     * @note All members have to be set before.
+     * @param[in] reconstruction Destination reconstruction
+     */
+    FWGDCMIO_API void convertToData(fwData::Reconstruction::sptr reconstruction);
+
+    /**
+     * @brief Convert Surface to ::fwData::Mesh
+     * @param[in] coord Coordinates
+     * @param[in] coordSize Number of coordinates
+     * @param[in] index Indices
+     * @param[in] indexSize Number of indices
+     * @param[in] normalCoord Normal coordinates
+     */
+    FWGDCMIO_API ::fwData::Mesh::sptr convertToData(const float* coord, const unsigned long coordSize,
+                                                    const uint32_t* index, const unsigned long indexSize,
+                                                    const float* normalCoord);
+
+    /// Return point coordinates
+    FWGDCMIO_API const ::boost::shared_ptr< float > getPointCoordData() const;
+
+    /// Return number of points
+    FWGDCMIO_API unsigned long getPointCoordSize() const;
+
+    /// Return index list
+    FWGDCMIO_API const ::boost::shared_ptr< uint32_t > getPointIndexList() const;
+
+    /// Return number of index
+    FWGDCMIO_API unsigned long getPointIndexSize() const;
+
+    /// Return normal list
+    FWGDCMIO_API const ::boost::shared_ptr< float > getNormalCoordData() const;
+
+    /// Return number of normals
+    FWGDCMIO_API unsigned long getNormalCoordSize() const;
+
+    /**
+     * @brief Set point coordinates
+     * @param[in] array Point coordinates
+     */
+    FWGDCMIO_API void setPointCoordData(const ::boost::shared_ptr< float > array);
+
+    /**
+     * @brief Set number of points
+     * @param[in] size Number of points
+     */
+    FWGDCMIO_API void setPointCoordSize(const unsigned long size);
+
+    /**
+     * @brief Set index list
+     * @param[in] array Index list
+     */
+    FWGDCMIO_API void setPointIndexList(const ::boost::shared_ptr< uint32_t > array);
+
+    /**
+     * @brief Set number of index
+     * @param[in] size Number of index
+     */
+    FWGDCMIO_API void setPointIndexSize(const unsigned long size);
+
+    /**
+     * @brief Set normals list
+     * @param[in] array Normals list
+     */
+    FWGDCMIO_API void setNormalCoordData(const ::boost::shared_ptr< float > array);
+
+    /**
+     * @brief Set number of normals
+     * @param[in] size Number of normals
+     */
+    FWGDCMIO_API void setNormalCoordSize(const unsigned long size);
+
+private:
+
+    /// Surface Points Coordinates (List of points coordinates for one surface) (eg : x1,y1,z1, x2,y2,z2, ...).
+    ::boost::shared_ptr< float > m_pointCoordData;
+
+    /// Number of points.
+    unsigned long m_pointCoordSize;
+
+    /// Surface Mesh Primitives (List of points index for all triangle of one surface) (eg : p1,p3,p2, p2,p3,p4, ...).
+    /// Primitives will be written in Triangle Point Index List ( Tag(0066,0023) ) which has a VR equal to OW
+    /// VR::OW is a string of 16-bit words where the encoding of the contents is specified by the negotiated Transfer Syntax
+    /// Here, we try to force VR::OW to have a length of 32 bits for each primitive
+    ::boost::shared_ptr< uint32_t > m_pointIndexList;
+
+    /// Number of primitives/cells.
+    unsigned long m_pointIndexSize;
+
+    /// Surface Point Normal Coordinates (List of point normal coordinates for one surface) (eg : x1,y1,z1, x2,y2,z2, ...).
+    ::boost::shared_ptr< float > m_normalCoordData;
+
+    /// Number of normals.
+    unsigned long m_normalCoordSize;
+};
+
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_DICOMSURFACE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRCodeNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRCodeNode.hpp
new file mode 100644
index 0000000..5bc43e8
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRCodeNode.hpp
@@ -0,0 +1,73 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRCODENODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRCODENODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a CODE node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRCodeNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSRCodeNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                 const DicomCodedAttribute& codedEntry);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRCodeNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get Coded Entry
+    const DicomCodedAttribute& getCodedEntry() const
+    {
+        return m_codedEntry;
+    }
+
+    /// Set Coded Entry
+    void setCodedEntry(const DicomCodedAttribute& codedEntry)
+    {
+        m_codedEntry = codedEntry;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /// Coded Entry
+    DicomCodedAttribute m_codedEntry;
+
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRCODENODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRContainerNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRContainerNode.hpp
new file mode 100644
index 0000000..1ed8d79
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRContainerNode.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRCONTAINERNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRCONTAINERNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a CONTAINER node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRContainerNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSRContainerNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship = "");
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRContainerNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRCONTAINERNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRImageNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRImageNode.hpp
new file mode 100644
index 0000000..a6dccf4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRImageNode.hpp
@@ -0,0 +1,110 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRIMAGENODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRIMAGENODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines an IMAGE node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRImageNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSRImageNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                  const std::string& sopClassUID, const std::string& sopInstanceUID, int frameNumber);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRImageNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get SOP Class UID
+    const std::string& getSOPClassUID() const
+    {
+        return m_sopClassUID;
+    }
+
+    /// Set SOP Class UID
+    void setSOPClassUID(const std::string& sopClassUID)
+    {
+        m_sopClassUID = sopClassUID;
+    }
+
+    /// Get SOP Instance UID
+    const std::string& getSOPInstanceUID() const
+    {
+        return m_sopInstanceUID;
+    }
+
+    /// Set SOP Instance UID
+    void setSOPInstanceUID(const std::string& sopInstanceUID)
+    {
+        m_sopInstanceUID = sopInstanceUID;
+    }
+
+    /// Get Frame number
+    const int& getFrameNumber() const
+    {
+        return m_frameNumber;
+    }
+
+    /// Set Frame number
+    void setFrameNumber(const int& frameNumber)
+    {
+        m_frameNumber = frameNumber;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /**
+     * @brief Write a referenced SOP sequence
+     * @see PS 3.3  Table C.18.3
+     * @param[in] dataset Destination dataset
+     */
+    void writeReferencedSOPSequence(::gdcm::DataSet& dataset) const;
+
+    /// Referenced SOP Class UID (0008,1150)
+    std::string m_sopClassUID;
+
+    /// Referenced SOP Instance UID (0008,1155)
+    std::string m_sopInstanceUID;
+
+    /// Referenced Frame Number (0008,1199)
+    int m_frameNumber;
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRIMAGENODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRNode.hpp
new file mode 100644
index 0000000..699de54
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRNode.hpp
@@ -0,0 +1,149 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRNode
+{
+public:
+
+    typedef std::vector< SPTR(DicomSRNode) > SubNodeContainer;
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /**
+     * @brief Add a sub node
+     * @param[in] node Node that must be added
+     */
+    FWGDCMIO_API void addSubNode(const SPTR(DicomSRNode)& node);
+
+    /// Dump operator
+    FWGDCMIO_API friend std::ostream& operator<< (std::ostream& os, const DicomSRNode& node)
+    {
+        node.print(os);
+        return os;
+    }
+
+    /// Get Sub node container
+    const SubNodeContainer& getSubNodeContainer() const
+    {
+        return m_subNodeContainer;
+    }
+
+    /// Set Sub node container
+    void setSubNodeContainer(const SubNodeContainer& subNodeContainer)
+    {
+        m_subNodeContainer = subNodeContainer;
+    }
+
+    /// Get Coded attribute
+    const DicomCodedAttribute& getCodedAttribute() const
+    {
+        return m_codedAttribute;
+    }
+
+    /// Set Coded attribute
+    void setCodedAttribute(const DicomCodedAttribute& codedAttribute)
+    {
+        m_codedAttribute = codedAttribute;
+    }
+
+    /// Get Type
+    const std::string& getType() const
+    {
+        return m_type;
+    }
+
+    /// Set Type
+    void setType(const std::string& type)
+    {
+        m_type = type;
+    }
+
+    /// Get Relationship
+    const std::string& getRelationship() const
+    {
+        return m_relationship;
+    }
+
+    /// Set Relationship
+    void setRelationship(const std::string& relationship)
+    {
+        m_relationship = relationship;
+    }
+
+
+protected:
+
+    /// Constructor
+    DicomSRNode(const DicomCodedAttribute& codedAttribute, const std::string& type,
+                const std::string& relationship = "");
+
+    /// Destructor
+    virtual ~DicomSRNode();
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /**
+     * @brief Create a concept name code sequence
+     * @param[in] dataset Destination dataset
+     * @param[in] codedAttribute Coded attribute to write
+     */
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > createConceptNameCodeSequence(
+        ::gdcm::DataSet& dataset, const DicomCodedAttribute& codedAttribute) const;
+
+    /**
+     * @brief Write a content sequence
+     * @see PS 3.3  Table 8.8-1
+     * @param[in] dataset Destination dataset
+     */
+    void writeContentSequence(::gdcm::DataSet& dataset) const;
+
+    /// SubNode container
+    SubNodeContainer m_subNodeContainer;
+
+    /// Coded entry of the node
+    DicomCodedAttribute m_codedAttribute;
+
+    /// Node type (0040, a040)
+    std::string m_type;
+
+    /// Node relationship (0040, a010)
+    std::string m_relationship;
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRNumNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRNumNode.hpp
new file mode 100644
index 0000000..010df4b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRNumNode.hpp
@@ -0,0 +1,98 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRNUMNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRNUMNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a NUM node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRNumNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSRNumNode(const DicomCodedAttribute& codedAttribute,
+                                const std::string& relationship, double numValue,
+                                const DicomCodedAttribute& measurementUnits);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRNumNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get Numeric value
+    const double& getNumValue() const
+    {
+        return m_numValue;
+    }
+
+    ///Set Numeric value
+    void setNumValue(const double& numValue)
+    {
+        m_numValue = numValue;
+    }
+
+    /// Get Measurement units
+    const DicomCodedAttribute& getMeasurementUnits() const
+    {
+        return m_measurementUnits;
+    }
+
+    ///Set Measurement units
+    void setMeasurementUnits(const DicomCodedAttribute& measurementUnits)
+    {
+        m_measurementUnits = measurementUnits;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /**
+     * @brief Write a Measured Value Sequence
+     * @see PS 3.3  Table C.18.1
+     * @param[in] dataset Destination dataset
+     */
+    void writeMeasuredValueSequence(::gdcm::DataSet& dataset) const;
+
+    /// Numeric Value
+    double m_numValue;
+
+    /// Measurement Units
+    DicomCodedAttribute m_measurementUnits;
+
+
+
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRNUMNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp
new file mode 100644
index 0000000..fbdfea0
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp
@@ -0,0 +1,106 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRSCOORD3DNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRSCOORD3DNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a SCOORD3D node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRSCoord3DNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    typedef std::vector<float> GraphicDataContainerType;
+
+    /// Constructor
+    FWGDCMIO_API DicomSRSCoord3DNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                     const std::string& graphicType, GraphicDataContainerType graphicDataContainer,
+                                     const std::string& frameOfReferenceUID);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRSCoord3DNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get Frame of reference UID
+    const std::string& getFrameOfReferenceUID() const
+    {
+        return m_frameOfReferenceUID;
+    }
+
+    ///Set Frame of reference UID
+    void setFrameOfReferenceUID(const std::string& frameOfReferenceUID)
+    {
+        m_frameOfReferenceUID = frameOfReferenceUID;
+    }
+
+    /// Get Graphic type
+    const std::string& getGraphicType() const
+    {
+        return m_graphicType;
+    }
+
+    ///Set Graphic type
+    void setGraphicType(const std::string& graphicType)
+    {
+        m_graphicType = graphicType;
+    }
+
+    /// Get Graphic data container
+    const GraphicDataContainerType& getGraphicDataContainer() const
+    {
+        return m_graphicDataContainer;
+    }
+
+    ///Set Graphic data container
+    void setGraphicDataContainer(const GraphicDataContainerType& graphicDataContainer)
+    {
+        m_graphicDataContainer = graphicDataContainer;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /// Referenced Frame of Reference UID
+    std::string m_frameOfReferenceUID;
+
+    /// Graphic Type
+    std::string m_graphicType;
+
+    /// Graphic Data
+    GraphicDataContainerType m_graphicDataContainer;
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRSCOORD3DNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRSCoordNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRSCoordNode.hpp
new file mode 100644
index 0000000..aa7b340
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRSCoordNode.hpp
@@ -0,0 +1,90 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRSCOORDNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRSCOORDNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a SCOORD node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRSCoordNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    typedef std::vector<float> GraphicDataContainerType;
+
+    /// Constructor
+    FWGDCMIO_API DicomSRSCoordNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                   const std::string& graphicType, GraphicDataContainerType graphicDataContainer);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRSCoordNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get Graphic type
+    const std::string& getGraphicType() const
+    {
+        return m_graphicType;
+    }
+
+    ///Set Graphic type
+    void setGraphicType(const std::string& graphicType)
+    {
+        m_graphicType = graphicType;
+    }
+
+    /// Get Graphic data container
+    const GraphicDataContainerType& getGraphicDataContainer() const
+    {
+        return m_graphicDataContainer;
+    }
+
+    ///Set Graphic data container
+    void setGraphicDataContainer(const GraphicDataContainerType& graphicDataContainer)
+    {
+        m_graphicDataContainer = graphicDataContainer;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /// Graphic Type
+    std::string m_graphicType;
+
+    /// Graphic Data
+    GraphicDataContainerType m_graphicDataContainer;
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRSCOORDNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRTextNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRTextNode.hpp
new file mode 100644
index 0000000..2ea1ccc
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRTextNode.hpp
@@ -0,0 +1,73 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRTEXTNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRTEXTNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a TEXT node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRTextNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSRTextNode(const DicomCodedAttribute& codedAttribute,
+                                 const std::string& relationship, const std::string textValue);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRTextNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get Text value
+    const std::string& getTextValue() const
+    {
+        return m_textValue;
+    }
+
+    ///Set Text value
+    void setTextValue(const std::string& textValue)
+    {
+        m_textValue = textValue;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /// Text Value (0040, a160)
+    std::string m_textValue;
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRTEXTNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp
new file mode 100644
index 0000000..475b11c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_CONTAINER_SR_DICOMSRUIDREFNODE_HPP__
+#define __FWGDCMIO_CONTAINER_SR_DICOMSRUIDREFNODE_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+
+#include <gdcmDataSet.h>
+
+#include <string>
+#include <vector>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+/**
+ * @brief This class defines a UIDREF node in a SR document
+ */
+class FWGDCMIO_CLASS_API DicomSRUIDRefNode : public ::fwGdcmIO::container::sr::DicomSRNode
+{
+public:
+
+    /// Constructor
+    FWGDCMIO_API DicomSRUIDRefNode(const DicomCodedAttribute& codedAttribute,
+                                   const std::string& relationship, const std::string uidValue);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSRUIDRefNode();
+
+    /**
+     * @brief Write the SR node in the dataset
+     * @param[in] dataset Destination dataset
+     */
+    FWGDCMIO_API virtual void write(::gdcm::DataSet& dataset) const;
+
+    /// Get UID value
+    const std::string& getUIDValue() const
+    {
+        return m_uidValue;
+    }
+
+    ///Set UID value
+    void setUIDValue(const std::string& uidValue)
+    {
+        m_uidValue = uidValue;
+    }
+
+
+protected:
+
+    /// Dump function
+    virtual void print(std::ostream& os) const;
+
+    /// Text Value (0040, a124)
+    std::string m_uidValue;
+};
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_CONTAINER_SR_DICOMSRUIDREFNODE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/exception/Failed.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/exception/Failed.hpp
new file mode 100644
index 0000000..6897f28
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/exception/Failed.hpp
@@ -0,0 +1,33 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_EXCEPTION_FAILED_HPP__
+#define __FWGDCMIO_EXCEPTION_FAILED_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/Exception.hpp>
+
+namespace fwGdcmIO
+{
+namespace exception
+{
+
+/**
+ * @brief   Implements a failed exception class for fwGdcmIO
+ */
+struct FWGDCMIO_CLASS_API Failed : ::fwCore::Exception
+{
+    Failed( const std::string& err ) : ::fwCore::Exception(err)
+    {
+    }
+};
+
+} // namespace exception
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_EXCEPTION_FAILED_HPP__
+
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomAnonymizer.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomAnonymizer.hpp
new file mode 100644
index 0000000..bfbc55b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomAnonymizer.hpp
@@ -0,0 +1,187 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMANONYMIZER_HPP__
+#define __FWGDCMIO_HELPER_DICOMANONYMIZER_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwZip/WriteZipArchive.hpp>
+
+#include <gdcmAnonymizer.h>
+#include <gdcmDicts.h>
+#include <gdcmStringFilter.h>
+
+#include <boost/filesystem/path.hpp>
+
+#include <map>
+#include <set>
+#include <string>
+#include <iostream>
+
+namespace fwJobs
+{
+class IJob;
+class Observer;
+}
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief   This class contains helpers to anonymize dicom files on filesystem.
+ *          Anonymization is performed according to the DICOM standard - Part 15 - Annex E - Basic Profile
+ */
+class FWGDCMIO_CLASS_API DicomAnonymizer
+{
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((DicomAnonymizer), (()), new DicomAnonymizer );
+
+    /// Constructor
+    FWGDCMIO_API DicomAnonymizer();
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomAnonymizer();
+
+    /// Map used to maintain UID consistency
+    typedef std::map< std::string, std::string > UIDMap;
+
+    /// Map used to store exception value
+    typedef std::map< ::gdcm::Tag, std::string > ExceptionTagMapType;
+
+    /// Anonymize a folder containing Dicom files
+    FWGDCMIO_API void anonymize(const ::boost::filesystem::path& dirPath);
+
+    FWGDCMIO_API void anonymize(std::istream& inputStream, std::ostream& outputStream);
+
+    /// Add an exceptional value for a tag
+    FWGDCMIO_API void addExceptionTag(uint16_t group, uint16_t element, const std::string& value = "");
+
+    /**
+     * @brief Copy a directory recursively.
+     * @param input Input file
+     * @param output Output file
+     */
+    FWGDCMIO_API static void copyDirectory(::boost::filesystem::path input, ::boost::filesystem::path output);
+
+    /// Get job observer
+    FWGDCMIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+    /// Return next file index
+    FWGDCMIO_API unsigned int getNextIndex();
+
+    /// Reset file index to 0
+    FWGDCMIO_API void resetIndex();
+
+    /// The removed tag will not be process by anonimization tag
+    FWGDCMIO_API void removeAnonymizeTag(const ::gdcm::Tag& tag);
+
+private:
+
+    void anonymizationProcess(const ::boost::filesystem::path& dirPath);
+
+    ///D : replace with a non-zero length value that may be a dummy value and consistent with the VR
+    void applyActionCodeD(const ::gdcm::Tag& tag);
+
+    /**
+     * Z : replace with a zero length value, or a non-zero length value that may be a dummy value and consistent with
+     * the VR
+     *
+     * Z/D : Z unless D is required to maintain IOD conformance (Type 2 versus Type 1)
+     *
+     * @note This method applies action code D only.
+     */
+    void applyActionCodeZ(const ::gdcm::Tag& tag);
+
+    /**
+     * X : remove tag
+     * X/Z : X unless Z is required to maintain IOD conformance (Type 3 versus Type 2)
+     * X/D : X unless D is required to maintain IOD conformance (Type 3 versus Type 1)
+     * X/Z/D : X unless Z or D is required to maintain IOD conformance (Type 3 versus Type 2 versus Type 1)
+     *
+     * X/Z/U* : X unless Z or replacement of contained instance UIDs (U) is required to maintain IOD conformance
+     * (Type 3 versus Type 2 versus Type 1 sequences containing UID references)
+     *
+     * @note This method applies action code X only.
+     */
+    void applyActionCodeX(const ::gdcm::Tag& tag);
+
+    /// K : keep (unchanged for non-sequence attributes, cleaned for sequences)
+    void applyActionCodeK(const ::gdcm::Tag& tag);
+
+    /**
+     * C : clean, that is replace with values of similar meaning known not to contain identifying information and
+     * consistent with the VR
+     */
+    void applyActionCodeC(const ::gdcm::Tag& tag);
+
+    /// U : replace with a non-zero length UID that is internally consistent within a set of Instances
+    void applyActionCodeU(const ::gdcm::Tag& tag);
+
+    /// Generate a value consistent with the VR
+    void generateDummyValue(const ::gdcm::Tag& tag);
+
+    /// Anonymizer
+    ::gdcm::Anonymizer m_anonymizer;
+
+    /// String filter used to convert DataElement to String
+    ::gdcm::StringFilter m_stringFilter;
+
+    /// Public Dicom Dictionary
+    const ::gdcm::Dict& m_publicDictionary;
+
+    /// UID Map
+    UIDMap m_uidMap;
+
+    /// Exception tag map
+    ExceptionTagMapType m_exceptionTagMap;
+
+    /// Number of Tags processed (Without Curve Data, Overlay Comments, Overlay Data and Private attributes)
+    static const unsigned int s_NUMBER_OF_TAGS;
+
+    /// Job observer
+    SPTR(::fwJobs::Observer) m_observer;
+
+    /// Archiving boolean used to compute correct progress when archiving
+    bool m_archiving;
+
+    /// Index of anonymizer
+    unsigned int m_fileIndex;
+
+    /**
+     * @name Default tags to be processed with associated action code.
+     * @{ */
+    typedef std::set< ::gdcm::Tag > TagContainerType;
+
+    static const TagContainerType s_ACTION_CODE_D_TAGS;
+    static const TagContainerType s_ACTION_CODE_Z_TAGS;
+    static const TagContainerType s_ACTION_CODE_X_TAGS;
+    static const TagContainerType s_ACTION_CODE_K_TAGS;
+    static const TagContainerType s_ACTION_CODE_C_TAGS;
+    static const TagContainerType s_ACTION_CODE_U_TAGS;
+    /**  @} */
+
+    /**
+     * @name Tags to be processed with associated action code.
+     * Exception tags added through addExceptionTag will be removed.
+     * @see addExceptionTag
+     * @{ */
+    TagContainerType m_actionCodeDTags;
+    TagContainerType m_actionCodeZTags;
+    TagContainerType m_actionCodeXTags;
+    TagContainerType m_actionCodeKTags;
+    TagContainerType m_actionCodeCTags;
+    TagContainerType m_actionCodeUTags;
+    /**  @} */
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_HELPER_DICOMANONYMIZER_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomData.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomData.hpp
new file mode 100644
index 0000000..f1a600c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomData.hpp
@@ -0,0 +1,306 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMDATA_HPP__
+#define __FWGDCMIO_HELPER_DICOMDATA_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/exception/Failed.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Point.hpp>
+#include <fwTools/DynamicType.hpp>
+#include <fwTools/Type.hpp>
+
+#include <gdcmAttribute.h>
+#include <gdcmDataSet.h>
+#include <gdcmElement.h>
+#include <gdcmImage.h>
+#include <gdcmSequenceOfItems.h>
+#include <gdcmString.h>
+#include <gdcmSurface.h>
+
+#include <boost/algorithm/string/trim.hpp>
+
+namespace fwGdcmIO
+{
+
+namespace helper
+{
+
+/**
+ * @brief This class contains helpers to handle GDCM data.
+ * It implements many tag value getters/setters. It defines
+ * also some tools for converting GDCM data to FW4SPL data.
+ */
+class FWGDCMIO_CLASS_API DicomData
+{
+public:
+
+    /**
+     * @brief Return a string from a tag found in \p dataset.
+     * An empty string returned means the tag is not found or empty.
+     * The value is returned without binary space padding.
+     * @param[in] dataset Data set of tags
+     * @tparam GROUP Group of the tag
+     * @tparam ELEMENT Element of the tag
+     * @return The tag value
+     */
+    template< uint16_t GROUP, uint16_t ELEMENT >
+    static const std::string getTagValue(const ::gdcm::DataSet& dataset)
+    {
+        if (dataset.FindDataElement(::gdcm::Attribute< GROUP, ELEMENT >::GetTag()))
+        {
+            const ::gdcm::DataElement& dataElement =
+                dataset.GetDataElement(::gdcm::Attribute< GROUP, ELEMENT >::GetTag());
+
+            if (!dataElement.IsEmpty()) // Can be type 2
+            {
+                std::stringstream ss;
+                dataElement.GetValue().Print(ss);
+                return ss.str();
+            }
+        }
+
+        return "";
+    }
+
+    /**
+     * @brief Return a trimmed string from a tag found in \p dataset
+     * @param[in] dataset Data set of tags
+     * @return The trimmed tag value
+     */
+    template< uint16_t GROUP, uint16_t ELEMENT >
+    static const std::string getTrimmedTagValue(const ::gdcm::DataSet& dataset)
+    {
+        std::string val = getTagValue< GROUP, ELEMENT >(dataset);
+        ::boost::algorithm::trim(val);
+        return val;
+    }
+
+    /**
+     * @brief Return a value from a tag found in \p dataset.
+     * @param[in] dataset Data set of tags.
+     * @tparam GROUP Group of the tag.
+     * @tparam ELEMENT Element of the tag.
+     * @tparam T Type of value.
+     * @return The tag value.
+     */
+    template< uint16_t GROUP, uint16_t ELEMENT, typename T >
+    static const T getTagValue(const ::gdcm::DataSet& dataset)
+    {
+        ::gdcm::Attribute< GROUP, ELEMENT > attribute;
+        attribute.SetFromDataSet(dataset);
+        return attribute.GetValue();
+    }
+
+    /**
+     * @brief Insert a string of character in a tag of a data set.
+     * @param[in] value Value to set
+     * @param[in] dataset Data set of tags
+     * @tparam GROUP Group of the tag
+     * @tparam ELEMENT Element of the tag
+     */
+    template< uint16_t GROUP, uint16_t ELEMENT >
+    static void setTagValue(const std::string& value, ::gdcm::DataSet& dataset)
+    {
+        // WARNING : Do not use DataElement (for space padding)
+        ::gdcm::Attribute< GROUP, ELEMENT > attribute;
+        attribute.SetValue(value);
+        dataset.Insert(attribute.GetAsDataElement());
+
+    }
+
+    /**
+     * @brief Insert the value of a tag in a data set.
+     * @param[in] value Value to set
+     * @param[in] dataset Data set of tags
+     * @tparam T Type of value
+     * @tparam GROUP Group of the tag
+     * @tparam ELEMENT Element of the tag
+     */
+    template< typename T, uint16_t GROUP, uint16_t ELEMENT >
+    static void setTagValue(const T& value, ::gdcm::DataSet& dataset)
+    {
+        ::gdcm::Attribute< GROUP, ELEMENT > attribute;
+        attribute.SetValue(value);
+        dataset.Insert(attribute.GetAsDataElement());
+    }
+
+    /**
+     * @brief Insert multiple values of a tag in a data set.
+     * @param[in] array An Array.
+     * @param[in] size Size of the array.
+     * @param[in] dataset Data set of tags.
+     * @tparam T Type of pointer.
+     * @tparam GROUP Group of the tag.
+     * @tparam ELEMENT Element of the tag.
+     */
+    template< typename T, uint16_t GROUP, uint16_t ELEMENT >
+    static void setTagValues(const T* array, const unsigned int size, ::gdcm::DataSet& dataset)
+    {
+        ::gdcm::Attribute< GROUP, ELEMENT > attribute;
+        if (array)
+        {
+            attribute.SetValues(array, size);
+        }
+        dataset.Insert(attribute.GetAsDataElement());
+    }
+
+    /**
+     * @brief Set and insert a sequence of items with a tag in the data set specified.
+     * @param[in] sequence Sequence of items to insert
+     * @param[in] tag Tag of the sequence
+     * @param[in] dataset Data set
+     */
+    FWGDCMIO_API static void setSQ(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence, const ::gdcm::Tag& tag,
+                                   ::gdcm::DataSet& dataset);
+
+    /**
+     * @brief Set and insert a sequence of items with a tag in the data set specified.
+     * @param[in] sequence Sequence of items to insert
+     * @param[in] dataset Data set
+     * @tparam GROUP Group of the tag
+     * @tparam ELEMENT Element of the tag
+     */
+    template< uint16_t GROUP, uint16_t ELEMENT >
+    static void setSQ(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence,
+                      ::gdcm::DataSet& dataset)
+    {
+        // Create the sequence of items
+        ::gdcm::DataElement dataElement(::gdcm::Attribute< GROUP, ELEMENT >::GetTag());
+        dataElement.SetVR(::gdcm::VR::SQ);
+        dataElement.SetValue(*sequence);
+        dataElement.SetVL(sequence->GetLength());
+
+        // Insert the sequence of items
+        dataset.Insert(dataElement);
+    }
+
+    /**
+     * @brief Insert a sequence of items with a tag in the data set specified.
+     * If the tag already exists, items of the old and new sequences are added in a new one.
+     * @param[in] sequence Sequence of items to insert
+     * @param[in] dataset Data set
+     *
+     * @tparam GROUP Group of the tag
+     * @tparam ELEMENT Element of the tag
+     */
+    template< uint16_t GROUP, uint16_t ELEMENT >
+    static void insertSQ(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence,
+                         ::gdcm::DataSet& dataset)
+    {
+        // Set or add the SQ
+        if (!dataset.FindDataElement(::gdcm::Attribute< GROUP, ELEMENT >::GetTag()))
+        {
+            setSQ< GROUP, ELEMENT >(sequence, dataset);
+        }
+        else
+        {
+            // Get old SQ
+            const ::gdcm::DataElement& dataElement =
+                dataset.GetDataElement(::gdcm::Attribute< GROUP, ELEMENT >::GetTag());
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > oldSequence = dataElement.GetValueAsSQ();
+
+            // Add items of the new SQ to the old SQ
+            auto nbItem = sequence->GetNumberOfItems();
+            for (decltype(nbItem)i = 1; i <= nbItem; ++i)  // WARN : item start at 1
+            {
+                oldSequence->AddItem(sequence->GetItem(i));
+            }
+        }
+    }
+
+    /**
+     * @brief Return the pixel type of a gdcm Image.
+     * @param[in] str String to convert
+     * @param[in] obj The content of the string converted in T type.
+     * @return return true if the conversion worked.
+     */
+    template< typename T > static bool valueOf(const std::string& str, T& obj)
+    {
+        std::istringstream is(str);
+        return is >> obj;
+    }
+
+    /**
+     * @brief Return the pixel type from a gdcm pixel format.
+     * @param[in] pixelFormat Pixel format in gdcm.
+     * @return The dynamic type of pixels (e.g: char, unsigned int, ...)
+     */
+    FWGDCMIO_API static const ::fwTools::Type getPixelType(const ::gdcm::PixelFormat& pixelFormat);
+
+    /**
+     * @brief Return the pixel type of a gdcm Image.
+     * @param[in] image GDCM image
+     * @return The dynamic type of pixels (e.g: char, unsigned int, ...)
+     */
+    FWGDCMIO_API static const ::fwTools::Type getPixelType(const ::gdcm::Image& image);
+
+    /**
+     * @brief Return the pixel type of a fwData Image.
+     * @param[in] image Image of fwData
+     * @return The pixel format (e.g: INT8, UINT16, ...)
+     */
+    FWGDCMIO_API static const ::gdcm::PixelFormat getPixelType(const ::fwData::Image::csptr image);
+
+    /**
+     * @brief Return the photometric interpretation of an acquisition.
+     * @param[in] image Image
+     * @return The photometric interpretation (e.g: MONOCHROME2, RGB, ...)
+     */
+    FWGDCMIO_API static const ::gdcm::PhotometricInterpretation getPhotometricInterpretation(
+        const ::fwData::Image& image);
+
+    /**
+     * @brief Convert a surface representation mode (FW4SPL) into recommended presentation type (DICOM).
+     * @see Recommended Presentation Type Tag (0066,000d).
+     * @param[in] representationMode Surface representation mode.
+     * @return Corresponding recommended presentation type.
+     */
+    FWGDCMIO_API static ::gdcm::Surface::VIEWType convertToPresentationType(
+        ::fwData::Material::RepresentationType representationMode);
+
+    /**
+     * @brief Convert a surface recommended presentation type (DICOM) into representation mode (FW4SPL).
+     * @param[in] presentationType Surface recommended presentation type.
+     * @return Corresponding representation mode
+     */
+    FWGDCMIO_API static ::fwData::Material::RepresentationType convertToRepresentationMode(
+        ::gdcm::Surface::VIEWType presentationType);
+
+    /**
+     * @brief Convert a representation mode into a DICOM form (eg : SURFACE, POINTS, WIREFRAME).
+     * @see DICOM tag (0x0066,0x000d).
+     * @param[in] representationMode Reconstruction's material representation mode (eg : SURFACE, POINT, ...).
+     */
+    FWGDCMIO_API static const char* convertToPresentationTypeString(
+        ::fwData::Material::RepresentationType representationMode);
+
+    /***
+     * @brief Convert a 3D point to the closest frame number index
+     * @param[in] image Image containing the point
+     * @param[in] point 3D point
+     */
+    FWGDCMIO_API static int convertPointToFrameNumber(
+        const ::fwData::Image::csptr& image, const ::fwData::Point::sptr& point) throw(::fwGdcmIO::exception::Failed);
+
+    /***
+     * @brief Convert a frame number to a Z coordinate
+     * @param[in] image Image containing the point
+     * @param[in] frameNumber Frame number
+     */
+    FWGDCMIO_API static double convertFrameNumberToZCoordinate(
+        const ::fwData::Image::csptr& image, int frameNumber) throw(::fwGdcmIO::exception::Failed);
+};
+
+} // namespace helper
+
+} // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_HELPER_DICOMDATA_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomDir.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomDir.hpp
new file mode 100644
index 0000000..82193fd
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomDir.hpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMDIR_HPP__
+#define __FWGDCMIO_HELPER_DICOMDIR_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <cstdint>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwJobs
+{
+class Observer;
+}
+
+namespace fwLog
+{
+class Logger;
+}
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief DicomDir Helper. This class is used to extract a list of files from a dicomdir file.
+ */
+class FWGDCMIO_CLASS_API DicomDir
+{
+public:
+    /**
+     * @brief Find the DICOMDIR file in the parent arborescence
+     * @return Path to the DICOMDIR or empty path if the DICOMDIR has not been found
+     */
+    FWGDCMIO_API static ::boost::filesystem::path findDicomDir(const ::boost::filesystem::path& root);
+
+    /**
+     * @brief Create DicomSeries from information stored in DICOMDIR.
+     * @param dicomdir Path to dicomdir file
+     * @param[out] seriesDB Dicom series created
+     * @param[in] fileLookupObserver file lookup observer
+     */
+    FWGDCMIO_API static void retrieveDicomSeries(const ::boost::filesystem::path& dicomdir,
+                                                 std::vector< SPTR(::fwMedData::DicomSeries) >& seriesDB,
+                                                 const SPTR(::fwLog::Logger)logger,
+                                                 const SPTR(::fwJobs::Observer)& fileLookupObserver = nullptr);
+};
+
+} //helper
+} //fwGdcmIO
+
+
+#endif /* __FWGDCMIO_HELPER_DICOMDIR_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSearch.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSearch.hpp
new file mode 100644
index 0000000..27e48d0
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSearch.hpp
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMSEARCH_HPP__
+#define __FWGDCMIO_HELPER_DICOMSEARCH_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem.hpp>
+
+#include <string>
+#include <vector>
+
+namespace fwJobs
+{
+class Observer;
+}
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief This class contains helpers to search dicom files on filesystem.
+ */
+class FWGDCMIO_CLASS_API DicomSearch
+{
+public:
+    /**
+     * @brief Search Dicom files recursively by excluding files with known extensions
+     * @param[in] dirPath Root directory
+     * @param[out] dicomFiles Dicom files
+     * @param[in] checkIsDicom If set to true, each file is read to verify that
+     * it is a DICOM file
+     * @param[in] fileLookupObserver lookup observer
+     */
+    FWGDCMIO_API static void searchRecursively(const ::boost::filesystem::path& dirPath,
+                                               std::vector<std::string>& dicomFiles, bool checkIsDicom,
+                                               const SPTR(::fwJobs::Observer)& fileLookupObserver = nullptr);
+
+protected:
+    /**
+     * @brief retrieve files according to extension.
+     * @param[in] dirPath Root directory
+     * @param[out] dicomFiles Dicom files
+     * @param[in] fileLookupObserver lookup observer
+     */
+    static void checkFilenameExtension(const ::boost::filesystem::path& dirPath,
+                                       std::vector<std::string>& dicomFiles,
+                                       const SPTR(::fwJobs::Observer)& fileLookupObserver = nullptr);
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_HELPER_DICOMSEARCH_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeries.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeries.hpp
new file mode 100644
index 0000000..87efdd6
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeries.hpp
@@ -0,0 +1,152 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMSERIES_HPP__
+#define __FWGDCMIO_HELPER_DICOMSERIES_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <gdcmScanner.h>
+
+#include <cstdint>
+#include <vector>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwMedData
+{
+class Patient;
+class Study;
+class Equipment;
+}
+
+namespace fwJobs
+{
+class Observer;
+}
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief DicomSeries Helper. This class is used to generate/fill DicomSeries.
+ * - It can be used to read DicomSeries from a list of files (using read function).
+ * - It can be used to complete DicomSeries that have been created using the
+ *   DicomDir helper (using complete function).
+ */
+class FWGDCMIO_CLASS_API DicomSeries
+{
+public:
+
+    typedef std::vector< std::string > FilenameContainerType;
+    typedef std::vector< SPTR(::fwMedData::DicomSeries) > DicomSeriesContainerType;
+
+    /// Constructor
+    FWGDCMIO_API DicomSeries();
+
+    /// Destructor
+    FWGDCMIO_API ~DicomSeries();
+
+    /**
+     * @brief Read DicomSeries from paths.
+     * @param[in] filenames instance paths
+     * @param[in] readerObserver reader observer
+     * @param[in] completeSeriesObserver complete series observer
+     * @return container containing DicomSeries
+     */
+    FWGDCMIO_API DicomSeriesContainerType read(FilenameContainerType& filenames,
+                                               const SPTR(::fwJobs::Observer)& readerObserver,
+                                               const SPTR(::fwJobs::Observer)& completeSeriesObserver);
+    /**
+     * @brief Fill DicomSeries information for series generated using DICOMDIR helper
+     * @param[in,out] seriesDB List of DicomSeries that must be completed with information
+     * @param[in] completeSeriesObserver complete series observer
+     */
+    FWGDCMIO_API void complete(DicomSeriesContainerType& seriesDB,
+                               const SPTR(::fwJobs::Observer)& completeSeriesObserver);
+
+    /**
+     * @brief Create DicomSeries containing a blob
+     * @param[in] filenames instance paths
+     */
+    FWGDCMIO_API SPTR(::fwMedData::DicomSeries) createBlob(FilenameContainerType &filenames);
+
+protected:
+
+    /**
+     * @brief Fill series with information contained in first instance
+     * @param[in,out] seriesDB List of DicomSeries that must be completed with information
+     * @param[in] completeSeriesObserver complete series observer
+     */
+    void fillSeries(DicomSeriesContainerType& seriesDB, const SPTR(::fwJobs::Observer)& completeSeriesObserver);
+
+    /**
+     * @brief Create DicomSeries from list of files. Every instance is read in
+     * order to retrieve instance information regarding the matching series.
+     * @param[in] filenames List of files
+     * @param[in] readerObserver reader observer
+     */
+    DicomSeriesContainerType splitFiles(FilenameContainerType& filenames,
+                                        const SPTR(::fwJobs::Observer)& readerObserver);
+
+
+    /**
+     * @brief Create a series from the dataset and store it in the series map
+     * @param[in,out] seriesDB List of DicomSeries that must be completed with information
+     * @param[in] scanner GDCM Scanner used to read information
+     * @param[in] filename Filename from which the information must be read
+     */
+    void createSeries(DicomSeriesContainerType& seriesDB, const ::gdcm::Scanner& scanner, const std::string& filename);
+
+    /**
+     * @brief Create a patient from the dataset and store it in the patient map
+     * @param[in] scanner GDCM Scanner used to read information
+     * @param[in] filename Filename from which the information must be read
+     */
+    SPTR(::fwMedData::Patient) createPatient(const ::gdcm::Scanner& scanner, const std::string& filename);
+
+    /**
+     * @brief Create a study from the dataset and store it in the study map
+     * @param[in] scanner GDCM Scanner used to read information
+     * @param[in] filename Filename from which the information must be read
+     */
+    SPTR(::fwMedData::Study) createStudy(const ::gdcm::Scanner& scanner, const std::string& filename);
+
+    /**
+     * @brief Create an equipment from the dataset and store it in the equipment map
+     * @param[in] scanner GDCM Scanner used to read information
+     * @param[in] filename Filename from which the information must be read
+     */
+    SPTR(::fwMedData::Equipment) createEquipment(const ::gdcm::Scanner& scanner, const std::string& filename);
+
+    typedef std::map< std::string, SPTR(::fwMedData::Patient) > PatientMapType;
+    typedef std::map< std::string, SPTR(::fwMedData::Study) > StudyMapType;
+    typedef std::map< std::string, SPTR(::fwMedData::Equipment) > EquipmentMapType;
+
+    ///Patient Map
+    PatientMapType m_patientMap;
+
+    ///Study Map
+    StudyMapType m_studyMap;
+
+    ///Equipment Map
+    EquipmentMapType m_equipmentMap;
+};
+
+} //helper
+} //fwGdcmIO
+
+
+#endif /* __FWGDCMIO_HELPER_DICOMSERIES_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesAnonymizer.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesAnonymizer.hpp
new file mode 100644
index 0000000..1694cc5
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesAnonymizer.hpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMSERIESANONYMIZER_HPP__
+#define __FWGDCMIO_HELPER_DICOMSERIESANONYMIZER_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/reader/SeriesDB.hpp"
+#include "fwGdcmIO/helper/DicomSeriesWriter.hpp"
+#include "fwGdcmIO/helper/DicomAnonymizer.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwTools/ProgressAdviser.hpp>
+
+namespace fwJobs
+{
+class IJob;
+class Aggregator;
+}
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief   This class contains helpers to anonymize DicomSeries
+ */
+class FWGDCMIO_CLASS_API DicomSeriesAnonymizer
+{
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((DicomSeriesAnonymizer), (()), new DicomSeriesAnonymizer );
+
+    /// Constructor
+    FWGDCMIO_API DicomSeriesAnonymizer();
+
+    /// Destructor
+    FWGDCMIO_API virtual ~DicomSeriesAnonymizer();
+
+    /// Anonymize the DicomSeries (modify the current object)
+    FWGDCMIO_API void anonymize(::fwMedData::DicomSeries::sptr source);
+
+    /// Anonymize the DicomSeries (doesn't modify the current object)
+    FWGDCMIO_API void anonymize(::fwMedData::DicomSeries::sptr source, ::fwMedData::DicomSeries::sptr destination);
+
+    /// Get job observer
+    FWGDCMIO_API SPTR(::fwJobs::Aggregator) getJob() const;
+
+protected:
+
+    /// Dicom anonymizer
+    ::fwGdcmIO::helper::DicomAnonymizer m_anonymizer;
+
+    /// Job observer
+    SPTR(::fwJobs::Aggregator) m_job;
+
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_HELPER_DICOMSERIESANONYMIZER_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesDBWriter.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesDBWriter.hpp
new file mode 100644
index 0000000..9d486ff
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesDBWriter.hpp
@@ -0,0 +1,94 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMSERIESDBWRITER_HPP__
+#define __FWGDCMIO_HELPER_DICOMSERIESDBWRITER_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/SingleFile.hpp>
+
+#include <fwDataIO/writer/GenericObjectWriter.hpp>
+
+#include <string>
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace fwJobs
+{
+class Aggregator;
+}
+
+namespace fwGdcmIO
+{
+
+namespace helper
+{
+
+class DicomAnonymizer;
+
+class FWGDCMIO_CLASS_API DicomSeriesDBWriter :
+    public ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::SeriesDB >,
+    public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >,
+    public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
+
+{
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((DicomSeriesDBWriter)
+                                           (::fwDataIO::writer::GenericObjectWriter< ::fwMedData::SeriesDB>),
+                                           (()), ::fwDataIO::writer::factory::New< DicomSeriesDBWriter >);
+    fwCoreAllowSharedFromThis();
+
+    /**
+     * @brief Construtor/Destructor
+     * @{ */
+    FWGDCMIO_API DicomSeriesDBWriter(::fwDataIO::writer::IObjectWriter::Key key);
+    FWGDCMIO_API virtual ~DicomSeriesDBWriter();
+    /**  @} */
+
+    /// Return an empty string
+    FWGDCMIO_API std::string  extension();
+
+    /// Get job Aggregator
+    FWGDCMIO_API SPTR(::fwJobs::Aggregator) getAggregator();
+
+    /// Set anonymizer (if anonymization required)
+    FWGDCMIO_API void setAnonymizer(const SPTR(helper::DicomAnonymizer)& anonymizer);
+
+    /// Write the image series in DICOM format.
+    FWGDCMIO_API void write();
+
+    /// Enable Zip output format
+    FWGDCMIO_API void enableZippedArchive(bool enable);
+
+    /// Set Producer
+    FWGDCMIO_API void setProducer(std::string producer);
+
+private:
+
+    /// Job observer
+    SPTR(::fwJobs::Aggregator) m_aggregator;
+
+    /// Optionnal anonymiser
+    SPTR(DicomAnonymizer) m_anonymizer;
+
+    /// Enable zip archive
+    bool m_enableZippedArchive;
+
+    /// Producer
+    std::string m_producer;
+
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_HELPER_DICOMSERIESDBWRITER_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesWriter.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesWriter.hpp
new file mode 100644
index 0000000..7371241
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DicomSeriesWriter.hpp
@@ -0,0 +1,119 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICOMSERIESWRITER_HPP__
+#define __FWGDCMIO_HELPER_DICOMSERIESWRITER_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwDataIO/writer/GenericObjectWriter.hpp>
+
+#include <string>
+
+namespace fwJobs
+{
+class Observer;
+class IJob;
+}
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwZip
+{
+class IWriteArchive;
+}
+
+namespace fwGdcmIO
+{
+
+namespace helper
+{
+class DicomAnonymizer;
+
+
+
+/**
+ * @brief Write a DicomSeries in DICOM format.
+ *
+ * This writer optionally manages anonymisation if an instance of DicomAnonymizer is set.
+ * The output DICOM files can be exported into an archive (folder or zipped file) if output archive is set.
+ *
+ * If the DicomSeries contains the binaries of the DICOM files, the files are extracted (or zipped).
+ * If the DicomSeries contains the paths of the DICOM files, a simple copy (or zip) is performed.
+ */
+class DicomSeriesWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::DicomSeries >,
+                          public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((DicomSeriesWriter)(
+                                               ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::DicomSeries>),
+                                           (()), ::fwDataIO::writer::factory::New< DicomSeriesWriter >);
+    fwCoreAllowSharedFromThis();
+
+    /// Constructor. Does nothing
+    FWGDCMIO_API DicomSeriesWriter(::fwDataIO::writer::IObjectWriter::Key key);
+
+    /// Write the image series in DICOM format.
+    FWGDCMIO_API void write();
+
+    /// Return an empty string
+    FWGDCMIO_API std::string  extension();
+
+    /// Get job observer
+    FWGDCMIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+    /// Defines optional anonymizer.
+    FWGDCMIO_API void setAnonymizer(const SPTR(helper::DicomAnonymizer)& anonymizer);
+
+    /**
+     * @brief Defines output archive for DICOM files.
+     *
+     * @param archive Archive instance
+     * @param subPath Path within archive where DICOM files are saved (only if an anonymizer instance is defined)
+     */
+    FWGDCMIO_API void setOutputArchive(const SPTR(::fwZip::IWriteArchive)& archive,
+                                       const std::string& subPath = "");
+
+protected:
+
+    /// Compute DICOM filename according to anonymizer or return default filename.
+    std::string getFilename(const std::string& defaultName);
+
+    /// Process inputStream to outputStream with anonymisation management.
+    void processStream(std::istream& inputStream, std::ostream& outputStream);
+
+    /// Process write on archive
+    void processWriteArchive();
+
+    /// Process write with Standard output stream
+    void processWrite();
+
+    /// Write count
+    int m_writeCount;
+
+    /// Job observer
+    SPTR(::fwJobs::Observer) m_job;
+
+    /// Optionnal anonymiser
+    SPTR(DicomAnonymizer) m_anonymizer;
+
+    /// Optionnal output archive
+    SPTR(::fwZip::IWriteArchive) m_archive;
+
+    /// Optional subPath (related to write archive
+    std::string m_subPath;
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_HELPER_DICOMSERIESWRITER_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DictionarySegment.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DictionarySegment.hpp
new file mode 100644
index 0000000..3716ca9
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/DictionarySegment.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_DICTIONARYSEGMENT_HPP__
+#define __FWGDCMIO_HELPER_DICTIONARYSEGMENT_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief This class implement a segmentation dictionary.
+ * It allows to get a complete identification of a segmentation from the organ name of a ::fwData::Reconstruction.
+ * @note Currently, this identification has to be done with tools of this class.
+ */
+class FWGDCMIO_CLASS_API DictionarySegment
+{
+public:
+
+    /**
+     * @brief Get anatomic region sequence from label of an organ.
+     * @see Tag (0x0008,0x2218)
+     * @note Returned null pointer means organ name is unknown.
+     * @param[in] label Label from witch the anatomic region is guessed.
+     */
+    FWGDCMIO_API static const ::fwGdcmIO::container::DicomCodedAttribute* guessAnatRegionFromLabel(
+        const std::string& label);
+
+    /**
+     * @brief Get segmented property category code sequence from label of an organ.
+     * @see Tag (0x0062,0x0003)
+     * @note Returned null pointer means organ name is unknown.
+     * @param[in] label Label from witch the property category is guessed.
+     */
+    FWGDCMIO_API static const ::fwGdcmIO::container::DicomCodedAttribute* guessPropCategoryFromLabel(
+        const std::string& label);
+
+    /**
+     * @brief Get segmented property type code sequence from label of an organ.
+     * @see Tag (0x0062,0x000F)
+     * @note Returned null pointer means organ name is unknown.
+     * @param[in] label Label from witch the property type is guessed.
+     */
+    FWGDCMIO_API static const ::fwGdcmIO::container::DicomCodedAttribute* guessPropTypeFromLabel(
+        const std::string& label);
+
+};
+
+} //namespace helper
+} //namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_HELPER_DICTIONARYSEGMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/Fiducial.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/Fiducial.hpp
new file mode 100644
index 0000000..35267c0
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/Fiducial.hpp
@@ -0,0 +1,56 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_FIDUCIAL_HPP__
+#define __FWGDCMIO_HELPER_FIDUCIAL_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <gdcmDataSet.h>
+
+namespace fwMedData
+{
+class SeriesDB;
+}
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief Fiducial helper.
+ */
+class FWGDCMIO_CLASS_API Fiducial
+{
+
+public:
+
+    /**
+     * @brief Return true if the series contains at least one image containing landmarks.
+     * @param[in] seriesDB SeriesDB where to look for landmarks
+     */
+    FWGDCMIO_API static bool containsLandmarks(SPTR(::fwMedData::SeriesDB) seriesDB);
+
+    /**
+     * @brief Return true if the series contains at least one image containing distances.
+     * @param[in] seriesDB SeriesDB where to look for distances
+     */
+    FWGDCMIO_API static bool containsDistances(SPTR(::fwMedData::SeriesDB) seriesDB);
+
+    /**
+     * @brief Return true if the series contains at least one image containing 3D distances.
+     * @param[in] seriesDB SeriesDB where to look for 3D distances
+     */
+    FWGDCMIO_API static bool contains3DDistances(SPTR(::fwMedData::SeriesDB) seriesDB);
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_HELPER_FIDUCIAL_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/FileWriter.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/FileWriter.hpp
new file mode 100644
index 0000000..17fbc94
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/FileWriter.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_FILEWRITER_HPP__
+#define __FWGDCMIO_HELPER_FILEWRITER_HPP__
+
+#include "fwGdcmIO/config.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <gdcmDataSet.h>
+#include <gdcmWriter.h>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+/**
+ * @brief Helper used to write a DICOM file.
+ */
+class FWGDCMIO_CLASS_API FileWriter
+{
+
+public:
+    /**
+     * @brief Write a file from the dataset
+     * @brief[in] filename Filename
+     * @brief[in] writer GDCM writer
+     */
+    FWGDCMIO_API static void write(const std::string& filename, SPTR(::gdcm::Writer) writer);
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_HELPER_FILEWRITER_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/StructuredReport.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/StructuredReport.hpp
new file mode 100644
index 0000000..cf0a520
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/helper/StructuredReport.hpp
@@ -0,0 +1,117 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_HELPER_STRUCTUREDREPORT_HPP__
+#define __FWGDCMIO_HELPER_STRUCTUREDREPORT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRContainerNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <gdcmDataSet.h>
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+
+namespace helper
+{
+
+/**
+ * @brief This class contains helpers for DICOM Structured Reporting (SR).
+ */
+class FWGDCMIO_CLASS_API StructuredReport
+{
+public:
+
+    /**
+     * @brief Read a Structured Report
+     * @param[in] dataset Dataset from which the SR must be created
+     */
+    FWGDCMIO_API static SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) readSR(const ::gdcm::DataSet& dataset);
+
+    /**
+     * @brief Dump the SR in graphviz format
+     * @param[in] root Root node
+     * @param[in] out Destination stream
+     */
+    FWGDCMIO_API static void dumpSR(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& root,
+                                    std::ostream& out = std::cout);
+
+protected:
+
+    /**
+     * @brief Read all sub nodes and add it as children to the parent node
+     * @param[in] dataset Dataset from which the sub nodes must been read
+     * @param[in] parent Parent node
+     */
+    static void readSubNodeContainer(const ::gdcm::DataSet& dataset,
+                                     SPTR(::fwGdcmIO::container::sr::DicomSRNode) parent);
+
+    /**
+     * @brief Read a sub node and add it as a child to the parent node
+     * @param[in] dataset Dataset from which the sub node must been read
+     * @param[in] parent Parent node
+     */
+    static void readSubNode(const ::gdcm::DataSet& dataset, SPTR(::fwGdcmIO::container::sr::DicomSRNode) parent);
+
+    /**
+     * @brief Dump an SR node in graphviz format
+     * @param[in] node Node
+     * @param[in] out Destination stream
+     * @param[in] index Node index
+     */
+    FWGDCMIO_API static void dumpSRNode(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& node, std::ostream& out,
+                                        int& index);
+
+    /**
+     * @brief Read content of a code sequence (eg : Concept Name Code Sequence, ...)
+     * @note This method can return a DicomCodedAttribute with empty members.
+     * @param[in] dataset   Data set where the code sequence is supposed to be.
+     * @tparam GROUP Tag group of the code sequence.
+     * @tparam ELEMENT Element group of the code sequence.
+     */
+    template <uint16_t GROUP, uint16_t ELEMENT>
+    static ::fwGdcmIO::container::DicomCodedAttribute readCodeSequence(const ::gdcm::DataSet& dataset)
+    {
+        ::fwGdcmIO::container::DicomCodedAttribute codedAttributes;
+
+        if ( !dataset.FindDataElement(::gdcm::Tag(GROUP,ELEMENT)))
+        {
+            // Return empty coded attributes
+            return codedAttributes;
+        }
+
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence =
+            dataset.GetDataElement(::gdcm::Tag(GROUP,ELEMENT)).GetValueAsSQ();
+        if (sequence->GetNumberOfItems() == 0)  // One Item shall be permitted
+        {
+            // Return empty coded attributes
+            return codedAttributes;
+        }
+
+        const ::gdcm::DataSet& itemDataset = sequence->GetItem(1).GetNestedDataSet();
+
+        // Code value - Type 1
+        codedAttributes.setCodeValue(DicomData::getTrimmedTagValue<0x0008,0x0100>(itemDataset));
+
+        // Coding Scheme Designator - Type 1
+        codedAttributes.setCodingSchemeDesignator(DicomData::getTrimmedTagValue<0x0008,0x0102>(itemDataset));
+
+        // Coding Scheme Version - Type 1C
+        codedAttributes.setCodingSchemeVersion(DicomData::getTrimmedTagValue<0x0008,0x0103>(itemDataset));
+
+        // Code Meaning - Type 1
+        codedAttributes.setCodeMeaning(DicomData::getTrimmedTagValue<0x0008,0x0104>(itemDataset));
+
+        return codedAttributes;
+    }
+};
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_HELPER_STRUCTUREDREPORT_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/namespace.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/namespace.hpp
new file mode 100644
index 0000000..6e2eaf4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_NAMESPACE_HPP__
+#define __FWGDCMIO_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace fwGdcmIO contains reader, writer and helper for dicom data.
+ * @namespace fwGdcmIO
+ **/
+
+namespace fwGdcmIO
+{
+
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_NAMESPACE_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/Series.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/Series.hpp
new file mode 100644
index 0000000..814a1f4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/Series.hpp
@@ -0,0 +1,99 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_SERIES_HPP__
+#define __FWGDCMIO_READER_SERIES_HPP__
+
+#include "fwGdcmIO/reader/iod/InformationObjectDefinition.hpp"
+
+#include <fwLog/Logger.hpp>
+
+#include <functional>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+
+/**
+ * @brief Series class used to read Series
+ */
+class FWGDCMIO_CLASS_API Series
+{
+public:
+
+    typedef std::map< SPTR(::fwGdcmIO::container::DicomInstance), ::fwMedData::Series::sptr > SeriesContainerMapType;
+
+    typedef std::function< void (unsigned int&) > ProgressCallback;
+
+    /// Constructor
+    FWGDCMIO_API Series();
+
+    /// Destructor
+    FWGDCMIO_API ~Series();
+
+    //// Read DICOM file
+    FWGDCMIO_API ::fwMedData::Series::sptr read(::fwMedData::DicomSeries::sptr dicomSeries)
+    throw(::fwGdcmIO::exception::Failed);
+
+    /// Get Logger
+    const ::fwLog::Logger::sptr& getLogger() const
+    {
+        return m_logger;
+    }
+
+    /// Set Logger
+    void setLogger(const ::fwLog::Logger::sptr& logger)
+    {
+        m_logger = logger;
+    }
+
+    void addCallback(std::function< void(unsigned int&) > c)
+    {
+        m_callback = c;
+    }
+    void cancel()
+    {
+        m_cancelled = true;
+    }
+
+    /// Enable buffer rotation
+    void setBufferRotationEnabled(bool enabled)
+    {
+        m_enableBufferRotation = enabled;
+    }
+
+protected:
+
+    /// Get referenced series when dealing with Spatial Fiducials
+    SPTR(::fwGdcmIO::container::DicomInstance) getSpatialFiducialsReferencedSeriesInstance(
+        ::fwMedData::DicomSeries::sptr dicomSeries);
+
+    /// Get referenced series when dealing with Structured Report
+    SPTR(::fwGdcmIO::container::DicomInstance) getStructuredReportReferencedSeriesInstance(
+        ::fwMedData::DicomSeries::sptr dicomSeries);
+
+    /// Series Container Map
+    SeriesContainerMapType m_seriesContainerMap;
+
+    ///Logger
+    ::fwLog::Logger::sptr m_logger;
+
+    /// Progress callback for jobs
+    ProgressCallback m_callback;
+
+    /// Cancel information for jobs
+    bool m_cancelled;
+
+    /// Enable buffer rotation
+    bool m_enableBufferRotation;
+
+};
+
+}  // namespace reader
+}  // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_READER_SERIES_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/SeriesDB.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/SeriesDB.hpp
new file mode 100644
index 0000000..cef3c75
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/SeriesDB.hpp
@@ -0,0 +1,196 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_SERIESDB_HPP__
+#define __FWGDCMIO_READER_SERIESDB_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/exception/Failed.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwData/location/MultiFiles.hpp>
+#include <fwDataIO/reader/GenericObjectReader.hpp>
+#include <fwDataIO/reader/IObjectReader.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwLog/Logger.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwServices/IService.hpp>
+
+namespace fwJobs
+{
+class Aggregator;
+class IJob;
+class Observer;
+}
+
+namespace fwGdcmIO
+{
+
+namespace reader
+{
+
+/**
+ * @brief   This class adds patient(s) from DICOM file(s) to fwData::SeriesDB.
+ */
+class FWGDCMIO_CLASS_API SeriesDB : public ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >,
+                                    public ::fwData::location::enableFolder< ::fwDataIO::reader::IObjectReader >,
+                                    public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader >,
+                                    public ::fwCom::HasSignals
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (SeriesDB)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB > ),
+        (()), ::fwDataIO::reader::factory::New< SeriesDB >);
+
+    typedef std::vector< SPTR(::fwMedData::DicomSeries) > DicomSeriesContainerType;
+    typedef std::vector< std::string > FilenameContainerType;
+    typedef std::vector< std::string > SupportedSOPClassContainerType;
+
+    /// Constructor
+    FWGDCMIO_API SeriesDB(::fwDataIO::reader::IObjectReader::Key key);
+
+    /// Destructor
+    FWGDCMIO_API ~SeriesDB();
+
+    /// Reads DICOM data from configured path and fills SeriesDB object
+    FWGDCMIO_API void read();
+
+    /**
+     * @brief Reads DICOM data from DicomSeries and fills SeriesDB object
+     * @param[in] dicomSeriesDB SeriesDB containing DicomSeries that must be read
+     * @param[in] notifier Service used to notify changes in SeriesDB
+     */
+    FWGDCMIO_API void readFromDicomSeriesDB(::fwMedData::SeriesDB::csptr dicomSeriesDB,
+                                            ::fwServices::IService::sptr notifier = ::fwServices::IService::sptr());
+
+    /**
+     * @brief Reads DICOM data from configured path and fills SeriesDB object with DicomSeries
+     * @param checkIsDicom If set to true, when there is no dicomdir, each file
+     * is check in order to know if it is dicom or not.
+     */
+    FWGDCMIO_API void readDicomSeries(bool checkIsDicom = true);
+
+    /// Return true if a dicomdir file can be read.
+    FWGDCMIO_API bool isDicomDirAvailable();
+
+    /// Return DicomSeries container
+    FWGDCMIO_API DicomSeriesContainerType& getDicomSeries();
+
+    /// Get Set whether the reader must use the dicomdir file or not
+    const bool& getDicomdirActivated() const
+    {
+        return m_isDicomdirActivated;
+    }
+
+    ///Set Set whether the reader must use the dicomdir file or not
+    void setDicomdirActivated(const bool& isDicomdirActivated)
+    {
+        m_isDicomdirActivated = isDicomdirActivated;
+    }
+
+    /// Get Dicom filter type that must be applied prior to the reading process
+    const std::string& getDicomFilterType() const
+    {
+        return m_dicomFilterType;
+    }
+
+    ///Set Dicom filter type that must be applied prior to the reading process
+    void setDicomFilterType(const std::string& dicomFilterType)
+    {
+        m_dicomFilterType = dicomFilterType;
+    }
+
+    /// Get Supported SOP Class
+    const SupportedSOPClassContainerType& getSupportedSOPClassContainer() const
+    {
+        return m_supportedSOPClassContainer;
+    }
+
+    ///Set Supported SOP Class
+    void setSupportedSOPClassContainer(const SupportedSOPClassContainerType& supportedSOPClassContainer)
+    {
+        m_supportedSOPClassContainer = supportedSOPClassContainer;
+    }
+
+    /// Get Logger
+    const ::fwLog::Logger::sptr& getLogger() const
+    {
+        return m_logger;
+    }
+
+    ///Set Logger
+    void setLogger(const ::fwLog::Logger::sptr& logger)
+    {
+        m_logger = logger;
+    }
+
+
+    /// Getter for reader's job
+    FWGDCMIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+    /// Enable buffer rotation
+    void setBufferRotationEnabled(bool enabled)
+    {
+        m_enableBufferRotation = enabled;
+    }
+
+private:
+
+    /**
+     * @brief Read DICOM series
+     * @param checkIsDicom If set to true, when there is no dicomdir, each file
+     * is check in order to know if it is dicom or not.
+     */
+    void readDicom(const bool checkIsDicom);
+
+    /**
+     * @brief Convert DicomSeries to Image or Model Series
+     * @param[in] dicomSeries Dicom Series that must be converted
+     */
+    void convertDicomSeries(::fwServices::IService::sptr notifier = ::fwServices::IService::sptr());
+
+    /**
+     * @brief Function used to sort DicomSeries
+     * @param[in] a First DicomSeries
+     * @param[in] b Second DicomSeries
+     */
+    static bool dicomSeriesComparator(SPTR(::fwMedData::DicomSeries) a, SPTR(::fwMedData::DicomSeries) b);
+
+    ///Object Reader Map
+    DicomSeriesContainerType m_dicomSeriesContainer;
+
+    ///True if the reader can use the dicomdir file.
+    bool m_isDicomdirActivated;
+
+    ///Dicom filter type that must be applied prior to the reading process
+    std::string m_dicomFilterType;
+
+    ///Supported SOP Class container
+    SupportedSOPClassContainerType m_supportedSOPClassContainer;
+
+    ///Logger
+    ::fwLog::Logger::sptr m_logger;
+
+    ///Observer managing all subjobs
+    SPTR(::fwJobs::Aggregator) m_job;
+
+    /// Enable buffer rotation
+    bool m_enableBufferRotation;
+
+    SPTR(::fwJobs::Observer) m_dicomdirFileLookupJob;
+    SPTR(::fwJobs::Observer) m_regularFileLookupJob;
+    SPTR(::fwJobs::Observer) m_readerJob;
+    SPTR(::fwJobs::Observer) m_completeDicomSeriesJob;
+    SPTR(::fwJobs::Observer) m_converterJob;
+};
+
+}  // namespace reader
+
+}  // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_READER_SERIESDB_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Document.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Document.hpp
new file mode 100644
index 0000000..498dc1f
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Document.hpp
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_DOCUMENT_HPP__
+#define __FWGDCMIO_READER_IE_DOCUMENT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNumNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwData
+{
+class Point;
+}
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Document Information Entity class
+ * It search and read a specific template from the root of the document SR.
+ * Currently, the template is TID 1400 (taken from PS 3.16) for distances
+ * and based on TID 320 (taken from PS 3.16) for landmarks.
+ */
+class FWGDCMIO_CLASS_API Document : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read landmarks and distances.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image Image data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Document(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                          SPTR(::gdcm::Reader)reader,
+                          SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                          ::fwData::Image::sptr image,
+                          ::fwLog::Logger::sptr logger,
+                          const ProgressCallback& callback,
+                          const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Document();
+
+    /**
+     * @brief Read the Structured Report
+     */
+    FWGDCMIO_API void readSR() throw (::fwGdcmIO::exception::Failed);
+
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IE_DOCUMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Equipment.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Equipment.hpp
new file mode 100644
index 0000000..10e19e9
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Equipment.hpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_EQUIPMENT_HPP__
+#define __FWGDCMIO_READER_IE_EQUIPMENT_HPP__
+
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwMedData/Equipment.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Equipment Information Entity class
+ */
+class FWGDCMIO_CLASS_API Equipment : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Equipment >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read equipment.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] equipment Equipment data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Equipment(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                           SPTR(::gdcm::Reader)reader,
+                           SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                           ::fwMedData::Equipment::sptr equipment,
+                           ::fwLog::Logger::sptr logger,
+                           const ProgressCallback& callback,
+                           const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Equipment();
+
+    /**
+     * @brief Read General Equipment Module tags
+     * @see PS 3.3 C.7.5.1
+     */
+    FWGDCMIO_API virtual void readGeneralEquipmentModule();
+
+
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IE_EQUIPMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Image.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Image.hpp
new file mode 100644
index 0000000..30568bf
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Image.hpp
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_IMAGE_HPP__
+#define __FWGDCMIO_READER_IE_IMAGE_HPP__
+
+#include "fwGdcmIO/exception/Failed.hpp"
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwData/Image.hpp>
+
+#include <boost/numeric/ublas/matrix.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Image Information Entity class
+ */
+class FWGDCMIO_CLASS_API Image : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image Image data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Image(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                       SPTR(::gdcm::Reader)reader,
+                       SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                       ::fwData::Image::sptr image,
+                       ::fwLog::Logger::sptr logger,
+                       const ProgressCallback& callback,
+                       const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Image();
+
+    /**
+     * @brief Read Image Plane Module tags
+     * @see PS 3.3 C.7.6.2
+     */
+    FWGDCMIO_API virtual void readImagePlaneModule();
+
+    /**
+     * @brief Read Image Pixel Module tags
+     * @see PS 3.3 C.7.6.3
+     */
+    FWGDCMIO_API virtual void readImagePixelModule();
+
+    /**
+     * @brief Read VOI LUT Module tags
+     * @see PS 3.3 C.11.2
+     */
+    FWGDCMIO_API virtual void readVOILUTModule();
+
+    /// Enable buffer rotation
+    void setBufferRotationEnabled(bool enabled)
+    {
+        m_enableBufferRotation = enabled;
+    }
+
+protected:
+
+    typedef ::boost::numeric::ublas::matrix< double, ::boost::numeric::ublas::row_major,
+                                             std::vector<double> > MatrixType;
+    typedef ::boost::numeric::ublas::vector< double > VectorType;
+
+    /**
+     * @brief Read image buffer
+     * @param[in] dimensions Image dimensions
+     * @param[in] bitsAllocated Number of bits allocated before rescale
+     * @param[in] newBitsAllocated Number of bits allocated after rescale
+     * @param[in] performRescale Set to true when a rescale must be perfromed
+     * @return Global raw buffer of the image.
+     */
+    char* readImageBuffer(const std::vector<unsigned int>& dimensions, unsigned short bitsAllocated,
+                          unsigned short newBitsAllocated, bool performRescale) throw(::fwGdcmIO::exception::Failed);
+
+    /**
+     * @brief Correct image buffer according to image orientation
+     * @param[in,out] buffer Image buffer
+     * @param[in] dimensions Image dimensions
+     * @param[in] bitsAllocated Number of bits allocated before rescale
+     */
+    char* correctImageOrientation(char* buffer, const std::vector<unsigned int>& dimensions,
+                                  unsigned short bitsAllocated);
+
+    /**
+     * @brief Compute the inverse of matrix
+     * @param[in] matrix Matrix that must be inverted
+     */
+    MatrixType computeInverseMatrix(MatrixType matrix);
+
+    /// Enable buffer rotation
+    bool m_enableBufferRotation;
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IE_IMAGE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/InformationEntity.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/InformationEntity.hpp
new file mode 100644
index 0000000..6a0e9a3
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/InformationEntity.hpp
@@ -0,0 +1,116 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_INFORMATIONENTITY_HPP__
+#define __FWGDCMIO_READER_IE_INFORMATIONENTITY_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+
+#include <fwData/Object.hpp>
+#include <fwLog/Logger.hpp>
+
+#include <gdcmReader.h>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief InformationEntity base class used to read modules
+ */
+template< class DATATYPE >
+class FWGDCMIO_CLASS_API InformationEntity
+{
+
+public:
+
+    typedef std::function< void (unsigned int&) > ProgressCallback;
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read series.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] object FW4SPL data object
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API InformationEntity(
+        SPTR(::fwMedData::DicomSeries)dicomSeries,
+        SPTR(::gdcm::Reader)reader,
+        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+        SPTR(DATATYPE)object,
+        ::fwLog::Logger::sptr logger,
+        const ProgressCallback& callback,
+        const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~InformationEntity();
+
+protected:
+
+    /// Dicom Series
+    SPTR(::fwMedData::DicomSeries) m_dicomSeries;
+
+    /// GDCM Reader
+    SPTR(::gdcm::Reader) m_reader;
+
+    /// DICOM Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_instance;
+
+    /// FW4SPL Object
+    SPTR(DATATYPE) m_object;
+
+    ///Logger
+    ::fwLog::Logger::sptr m_logger;
+
+    /// Progress callback for jobs
+    const ProgressCallback& m_progressCallback;
+
+    /// Cancel information for jobs
+    const bool& m_cancelled;
+};
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+InformationEntity<DATATYPE>::InformationEntity(
+    SPTR(::fwMedData::DicomSeries)dicomSeries,
+    SPTR(::gdcm::Reader)reader,
+    SPTR(::fwGdcmIO::container::DicomInstance)instance, SPTR(DATATYPE)object, ::fwLog::Logger::sptr logger,
+    const ProgressCallback& callback, const bool& cancelled) :
+    m_dicomSeries(dicomSeries), m_reader(reader), m_instance(instance), m_object(object), m_logger(logger),
+    m_progressCallback(callback), m_cancelled(cancelled)
+{
+    SLM_ASSERT("DicomSeries should not be null.", dicomSeries);
+    SLM_ASSERT("Reader should not be null.", reader);
+    SLM_ASSERT("Instance should not be null.", instance);
+    SLM_ASSERT("Object should not be null.", object);
+    SLM_ASSERT("Logger should not be null.", logger);
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+InformationEntity<DATATYPE>::~InformationEntity()
+{
+}
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_READER_IE_INFORMATIONENTITY_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Patient.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Patient.hpp
new file mode 100644
index 0000000..9fe216a
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Patient.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_PATIENT_HPP__
+#define __FWGDCMIO_READER_IE_PATIENT_HPP__
+
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwMedData/Patient.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Patient Information Entity class
+ */
+class FWGDCMIO_CLASS_API Patient : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Patient >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read patient.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] patient Patient data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Patient(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                         SPTR(::gdcm::Reader)reader,
+                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                         ::fwMedData::Patient::sptr patient,
+                         ::fwLog::Logger::sptr logger,
+                         const ProgressCallback& callback,
+                         const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Patient();
+
+    /**
+     * @brief Read Patient Module tags
+     * @see PS 3.3 C.7.1.1
+     */
+    FWGDCMIO_API virtual void readPatientModule();
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_READER_IE_PATIENT_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Series.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Series.hpp
new file mode 100644
index 0000000..aba4db9
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Series.hpp
@@ -0,0 +1,61 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_SERIES_HPP__
+#define __FWGDCMIO_READER_IE_SERIES_HPP__
+
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwMedData/Series.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Series Information Entity class
+ */
+class FWGDCMIO_CLASS_API Series : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Series >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read series.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] series Series data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Series(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                        SPTR(::gdcm::Reader)reader,
+                        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                        ::fwMedData::Series::sptr series,
+                        ::fwLog::Logger::sptr logger,
+                        const ProgressCallback& callback,
+                        const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Series();
+
+    /**
+     * @brief Read General Series Module tags
+     * @see PS 3.3 C.7.3.1
+     */
+    FWGDCMIO_API virtual void readGeneralSeriesModule();
+
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IE_SERIES_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/SpatialFiducials.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/SpatialFiducials.hpp
new file mode 100644
index 0000000..fa6054d
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/SpatialFiducials.hpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_SPATIALFIDUCIALS_HPP__
+#define __FWGDCMIO_READER_IE_SPATIALFIDUCIALS_HPP__
+
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Spatial Fiducials Information Entity class
+ */
+class FWGDCMIO_CLASS_API SpatialFiducials : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] series Series data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API SpatialFiducials(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                                  SPTR(::gdcm::Reader)reader,
+                                  SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                  ::fwData::Image::sptr series,
+                                  ::fwLog::Logger::sptr logger,
+                                  const ProgressCallback& callback,
+                                  const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~SpatialFiducials();
+
+    /**
+     * @brief Read image landmarks from dataset
+     */
+    void readLandmark(const ::gdcm::DataSet& fiducialDataset);
+
+    /**
+     * @brief Read image distances from dataset
+     */
+    void readDistance(const ::gdcm::DataSet& fiducialDataset);
+
+
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_READER_IE_SPATIALFIDUCIALS_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Study.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Study.hpp
new file mode 100644
index 0000000..ecf2fd4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Study.hpp
@@ -0,0 +1,67 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_STUDY_HPP__
+#define __FWGDCMIO_READER_IE_STUDY_HPP__
+
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwMedData/Study.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Study Information Entity class
+ */
+class FWGDCMIO_CLASS_API Study : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Study >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read study.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] study Study data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Study(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                       SPTR(::gdcm::Reader)reader,
+                       SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                       ::fwMedData::Study::sptr study,
+                       ::fwLog::Logger::sptr logger,
+                       const ProgressCallback& callback,
+                       const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Study();
+
+    /**
+     * @brief Read General Study Module tags
+     * @see PS 3.3 C.7.2.1
+     */
+    FWGDCMIO_API virtual void readGeneralStudyModule();
+
+    /**
+     * @brief Read Patient Study Module tags
+     * @see PS 3.3 C.7.2.2
+     */
+    FWGDCMIO_API virtual void readPatientStudyModule();
+
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IE_STUDY_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Surface.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Surface.hpp
new file mode 100644
index 0000000..836c9c7
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/ie/Surface.hpp
@@ -0,0 +1,80 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IE_SURFACE_HPP__
+#define __FWGDCMIO_READER_IE_SURFACE_HPP__
+
+#include "fwGdcmIO/reader/ie/InformationEntity.hpp"
+
+#include <fwData/StructureTraitsDictionary.hpp>
+#include <fwMedData/ModelSeries.hpp>
+
+#include <gdcmSurfaceReader.h>
+
+namespace fwData
+{
+class Reconstruction;
+}
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+/**
+ * @brief Surface Information Entity class
+ */
+class FWGDCMIO_CLASS_API Surface : public ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::ModelSeries >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] series Series data
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API Surface(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                         SPTR(::gdcm::Reader)reader,
+                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                         ::fwMedData::ModelSeries::sptr series,
+                         ::fwLog::Logger::sptr logger,
+                         const ProgressCallback& callback,
+                         const bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Surface();
+
+    /**
+     * @brief Read Surface Segmentation Module tags
+     * @param[in] segment GDCM segment
+     * @see PS 3.3 C.8.23.1
+     */
+    FWGDCMIO_API virtual void readSurfaceSegmentationModule(::gdcm::SmartPointer< ::gdcm::Segment > segment);
+
+protected:
+    /**
+     * @brief Read Surface Mesh Module tags
+     * @param[in] segment GDCM surface
+     * @param[in] reconstruction Reconstruction data
+     * @see PS 3.3 C.27.1
+     */
+    FWGDCMIO_API virtual void readSurfaceMeshModule(::gdcm::SmartPointer< ::gdcm::Surface > surface,
+                                                    SPTR(::fwData::Reconstruction) reconstruction);
+
+};
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IE_SURFACE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/CTMRImageIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/CTMRImageIOD.hpp
new file mode 100644
index 0000000..1a28fac
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/CTMRImageIOD.hpp
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IOD_CTMRIMAGEIOD_HPP__
+#define __FWGDCMIO_READER_IOD_CTMRIMAGEIOD_HPP__
+
+#include "fwGdcmIO/reader/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+/**
+ * @brief CTMRImageIOD class used to read CT & MR Image IODs
+ */
+class FWGDCMIO_CLASS_API CTMRImageIOD : public ::fwGdcmIO::reader::iod::InformationObjectDefinition
+{
+
+public:
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries
+     * @param[in] instance Instance
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API CTMRImageIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                              SPTR(::fwGdcmIO::container::DicomInstance)instance, ::fwLog::Logger::sptr logger,
+                              ProgressCallback& callback, bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API ~CTMRImageIOD();
+
+    /**
+     * @brief Read a DICOM File
+     * @param[in,out] series Series that must be enriched
+     */
+    FWGDCMIO_API void read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed);
+
+    /// Enable buffer rotation
+    void setBufferRotationEnabled(bool enabled)
+    {
+        m_enableBufferRotation = enabled;
+    }
+
+protected:
+    /// Enable buffer rotation
+    bool m_enableBufferRotation;
+};
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
+
+#endif /*__FWGDCMIO_READER_IOD_CTMRIMAGEIOD_HPP__*/
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/ComprehensiveSRIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/ComprehensiveSRIOD.hpp
new file mode 100644
index 0000000..ab0d728
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/ComprehensiveSRIOD.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IOD_COMPREHENSIVESRIOD_HPP__
+#define __FWGDCMIO_READER_IOD_COMPREHENSIVESRIOD_HPP__
+
+#include "fwGdcmIO/reader/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+/**
+ * @brief ComprehensiveSRIOD class used to read landmarks and distances stored in Enhanced Structured Report IODs
+ */
+class FWGDCMIO_CLASS_API ComprehensiveSRIOD : public ::fwGdcmIO::reader::iod::InformationObjectDefinition
+{
+
+public:
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries
+     * @param[in] instance Instance
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API ComprehensiveSRIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                                    SPTR(::fwGdcmIO::container::DicomInstance)instance, ::fwLog::Logger::sptr logger,
+                                    ProgressCallback& callback, bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API ~ComprehensiveSRIOD();
+
+    //// Read DICOM file
+    FWGDCMIO_API void read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed);
+
+
+};
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IOD_COMPREHENSIVESRIOD_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/InformationObjectDefinition.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/InformationObjectDefinition.hpp
new file mode 100644
index 0000000..4ea4959
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/InformationObjectDefinition.hpp
@@ -0,0 +1,82 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IOD_INFORMATIONOBJECTDEFINITION_HPP__
+#define __FWGDCMIO_READER_IOD_INFORMATIONOBJECTDEFINITION_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+#include "fwGdcmIO/exception/Failed.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwLog/Logger.hpp>
+#include <fwMedData/Series.hpp>
+
+#include <gdcmReader.h>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+/**
+ * @brief InformationObjectDefinition base class used to read DICOM IODs
+ */
+class FWGDCMIO_CLASS_API InformationObjectDefinition
+{
+
+public:
+
+    typedef std::function< void (unsigned int&) > ProgressCallback;
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries
+     * @param[in] instance Instance
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API InformationObjectDefinition(::fwMedData::DicomSeries::sptr dicomSeries,
+                                             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                             ::fwLog::Logger::sptr logger,
+                                             ProgressCallback& callback, bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~InformationObjectDefinition();
+
+    /**
+     * @brief Read a DICOM File
+     * @param[in,out] series Series that must be enriched
+     */
+    FWGDCMIO_API virtual void read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed) = 0;
+
+protected:
+
+    /// DICOM Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_instance;
+
+    /// Dicom Series
+    ::fwMedData::DicomSeries::sptr m_dicomSeries;
+
+    ///Logger
+    ::fwLog::Logger::sptr m_logger;
+
+    /// Progress callback for jobs
+    ProgressCallback& m_progressCallback;
+
+    /// Cancel information for jobs
+    const bool& m_cancelled;
+
+};
+
+} // namespace iod
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_READER_IOD_INFORMATIONOBJECTDEFINITION_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/SpatialFiducialsIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/SpatialFiducialsIOD.hpp
new file mode 100644
index 0000000..e44da01
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/SpatialFiducialsIOD.hpp
@@ -0,0 +1,54 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IOD_SPATIALFIDUCIALSIOD_HPP__
+#define __FWGDCMIO_READER_IOD_SPATIALFIDUCIALSIOD_HPP__
+
+#include "fwGdcmIO/reader/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+/**
+ * @brief SpatialFiducialsIOD class used to read Spatial Fiducials IODs
+ */
+class FWGDCMIO_CLASS_API SpatialFiducialsIOD : public ::fwGdcmIO::reader::iod::InformationObjectDefinition
+{
+public:
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries
+     * @param[in] instance Instance
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API SpatialFiducialsIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                                     SPTR(::fwGdcmIO::container::DicomInstance)instance, ::fwLog::Logger::sptr logger,
+                                     ProgressCallback& callback, bool& cancelled);
+
+
+    /// Destructor
+    FWGDCMIO_API ~SpatialFiducialsIOD();
+
+    /**
+     * @brief Read a DICOM File
+     * @param[in,out] series Series that must be enriched
+     */
+    FWGDCMIO_API void read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed);
+
+};
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IOD_SPATIALFIDUCIALSIOD_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/SurfaceSegmentationIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/SurfaceSegmentationIOD.hpp
new file mode 100644
index 0000000..74daedb
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/iod/SurfaceSegmentationIOD.hpp
@@ -0,0 +1,67 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_IOD_SURFACESEGMENTATIONIOD_HPP__
+#define __FWGDCMIO_READER_IOD_SURFACESEGMENTATIONIOD_HPP__
+
+#include "fwGdcmIO/reader/iod/InformationObjectDefinition.hpp"
+
+#include <gdcmSegment.h>
+
+namespace fwData
+{
+class Reconstruction;
+}
+
+namespace fwMedData
+{
+class ModelSeries;
+}
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+/**
+ * @brief SurfaceSegmentationIOD class used to read Surface Segmentation IODs
+ */
+class FWGDCMIO_CLASS_API SurfaceSegmentationIOD : public ::fwGdcmIO::reader::iod::InformationObjectDefinition
+{
+
+public:
+
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries
+     * @param[in] instance Instance
+     * @param[in] logger Logger
+     * @param[in] callback Progress callback
+     * @param[in] cancelled cancel information
+     */
+    FWGDCMIO_API SurfaceSegmentationIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                                        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                        ::fwLog::Logger::sptr logger,
+                                        ProgressCallback& callback, bool& cancelled);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~SurfaceSegmentationIOD();
+
+    /**
+     * @brief Read a DICOM File
+     * @param[in,out] series Series that must be enriched
+     */
+    FWGDCMIO_API void read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed);
+
+};
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_IOD_SURFACESEGMENTATIONIOD_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/Fiducial.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/Fiducial.hpp
new file mode 100644
index 0000000..25d210b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/Fiducial.hpp
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_TID_FIDUCIAL_HPP__
+#define __FWGDCMIO_READER_TID_FIDUCIAL_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/reader/tid/TemplateID.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+/**
+ * @brief Fiducial TID
+ * @see TID t1tt3 FIXME: Set the final TID
+ */
+class FWGDCMIO_CLASS_API Fiducial : public ::fwGdcmIO::reader::tid::TemplateID< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read series.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image FW4SPL data object
+     * @param[in] logger Logger
+     */
+    FWGDCMIO_API Fiducial(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                          SPTR(::gdcm::Reader)reader,
+                          SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                          ::fwData::Image::sptr image,
+                          ::fwLog::Logger::sptr logger);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Fiducial();
+
+    /**
+     * @brief Read a fiducial node
+     * @param[in] node Node that must be read
+     */
+    FWGDCMIO_API virtual void readNode(SPTR(::fwGdcmIO::container::sr::DicomSRNode) node);
+
+protected:
+
+    /**
+     * @brief Add a landmark into the image
+     * @param x X coordinate
+     * @param y Y coordinate
+     * @param z Z coordinate
+     * @param label Landmark label
+     */
+    void addLandmark(double x, double y, double z, const std::string& label);
+
+
+};
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_TID_FIDUCIAL_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/Measurement.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/Measurement.hpp
new file mode 100644
index 0000000..f18c972
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/Measurement.hpp
@@ -0,0 +1,74 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_TID_MEASUREMENT_HPP__
+#define __FWGDCMIO_READER_TID_MEASUREMENT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/reader/tid/TemplateID.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwData
+{
+class Point;
+}
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+/**
+ * @brief Measurement TID
+ * @see TID 300
+ */
+class FWGDCMIO_CLASS_API Measurement : public ::fwGdcmIO::reader::tid::TemplateID< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read series.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image FW4SPL data object
+     * @param[in] logger Logger
+     */
+    FWGDCMIO_API Measurement(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                             SPTR(::gdcm::Reader)reader,
+                             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                             ::fwData::Image::sptr image,
+                             ::fwLog::Logger::sptr logger);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Measurement();
+
+    /**
+     * @brief Read a measurement node
+     * @param[in] node Node that must be read
+     */
+    FWGDCMIO_API virtual void readNode(SPTR(::fwGdcmIO::container::sr::DicomSRNode) node);
+
+protected:
+
+    /**
+     * @brief Add a distance into the image
+     * @param point1 First point
+     * @param point2 Second point
+     */
+    void addDistance(SPTR(::fwData::Point) point1, SPTR(::fwData::Point) point2);
+
+
+};
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_TID_MEASUREMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/MeasurementReport.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/MeasurementReport.hpp
new file mode 100644
index 0000000..52a94bf
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/MeasurementReport.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_TID_MEASUREMENTREPORT_HPP__
+#define __FWGDCMIO_READER_TID_MEASUREMENTREPORT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/reader/tid/TemplateID.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+/**
+ * @brief Measurement Report TID - This a root template
+ * @see TID t1tt1 FIXME: Set the final TID
+ */
+class FWGDCMIO_CLASS_API MeasurementReport : public ::fwGdcmIO::reader::tid::TemplateID< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read series.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image FW4SPL data object
+     * @param[in] logger Logger
+     */
+    FWGDCMIO_API MeasurementReport(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                                   SPTR(::gdcm::Reader)reader,
+                                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                   ::fwData::Image::sptr image,
+                                   ::fwLog::Logger::sptr logger);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~MeasurementReport();
+
+    /**
+     * @brief Create Measurement Report template root node
+     * @param[in] root Root node
+     */
+    FWGDCMIO_API virtual void readSR(SPTR(::fwGdcmIO::container::sr::DicomSRNode) root);
+
+
+};
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_READER_TID_MEASUREMENTREPORT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/TemplateID.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/TemplateID.hpp
new file mode 100644
index 0000000..2eb3c8c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/reader/tid/TemplateID.hpp
@@ -0,0 +1,96 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_READER_TID_TEMPLATEID_HPP__
+#define __FWGDCMIO_READER_TID_TEMPLATEID_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+
+#include <fwData/Object.hpp>
+#include <fwLog/Logger.hpp>
+
+#include <gdcmReader.h>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+/**
+ * @brief TemplateID base class used to write templates
+ */
+template< class DATATYPE >
+class FWGDCMIO_CLASS_API TemplateID
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] dicomSeries DicomSeries used to access computed tag values.
+     * @param[in] reader GDCM reader that must be used to read series.
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] object FW4SPL data object
+     * @param[in] logger Logger
+     */
+    FWGDCMIO_API TemplateID(
+        SPTR(::fwMedData::DicomSeries)dicomSeries,
+        SPTR(::gdcm::Reader)reader,
+        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+        SPTR(DATATYPE)object,
+        ::fwLog::Logger::sptr logger);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~TemplateID();
+
+protected:
+
+    /// Dicom Series
+    SPTR(::fwMedData::DicomSeries) m_dicomSeries;
+
+    /// GDCM Reader
+    SPTR(::gdcm::Reader) m_reader;
+
+    /// DICOM Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_instance;
+
+    /// FW4SPL Object
+    SPTR(DATATYPE) m_object;
+
+    ///Logger
+    ::fwLog::Logger::sptr m_logger;
+};
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+TemplateID<DATATYPE>::TemplateID(
+    SPTR(::fwMedData::DicomSeries)dicomSeries,
+    SPTR(::gdcm::Reader)reader,
+    SPTR(::fwGdcmIO::container::DicomInstance)instance, SPTR(DATATYPE)object, ::fwLog::Logger::sptr logger) :
+    m_dicomSeries(dicomSeries), m_reader(reader), m_instance(instance), m_object(object), m_logger(logger)
+{
+    SLM_ASSERT("DicomSeries should not be null.", dicomSeries);
+    SLM_ASSERT("Reader should not be null.", reader);
+    SLM_ASSERT("Instance should not be null.", instance);
+    SLM_ASSERT("Object should not be null.", object);
+    SLM_ASSERT("Logger should not be null.", logger);
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+TemplateID<DATATYPE>::~TemplateID()
+{
+}
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_READER_TID_TEMPLATEID_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/Series.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/Series.hpp
new file mode 100644
index 0000000..4a44f6a
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/Series.hpp
@@ -0,0 +1,107 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_SERIES_HPP__
+#define __FWGDCMIO_WRITER_SERIES_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+#include "fwGdcmIO/exception/Failed.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwDataIO/writer/GenericObjectWriter.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwTools/ProgressAdviser.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+
+/**
+ * @brief This class handles DICOM files writing.
+ * It defines needs of data storage and delegates writing to appropriate tools.
+ * It manages all related data of one patient.
+ */
+class FWGDCMIO_CLASS_API Series : public ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::Series >,
+                                  public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >,
+                                  public ::fwTools::ProgressAdviser
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro( (Series)( ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::Series >),
+                                            (()), ::fwDataIO::writer::factory::New< Series >);
+
+    typedef enum
+    {
+        SPATIAL_FIDUCIALS   = 1, /*! Export Fiducials using SpatialFiducialsIOD */
+        COMPREHENSIVE_SR    = 2, /*! Export Fiducials using ComprehensiveSRIOD */
+        COMPREHENSIVE_3D_SR = 3 /*! Export Fiducials using Comprehensive3DSRIOD */
+    } FiducialsExportMode;
+
+    typedef std::map< std::string, SPTR(::fwGdcmIO::container::DicomInstance) > DicomInstanceMapType;
+
+    /// Constructor
+    FWGDCMIO_API Series(::fwDataIO::writer::IObjectWriter::Key key);
+
+    /// Destructor
+    FWGDCMIO_API ~Series();
+
+    /**
+     * @brief Load and start appropriate writing tools.
+     * In addition, it creates an adapted folder tree where DICOM files will be stored.
+     * It manages writing of the following general DICOM modules : patient, study and series
+     * @note Currently, it handles image, SR and RT document writing.
+     */
+    FWGDCMIO_API void write() throw (::fwGdcmIO::exception::Failed);
+
+    /**
+     * Override
+     * @brief Do nothing
+     */
+    FWGDCMIO_API std::string extension();
+
+    /// Get Fiducials Export Mode
+    const FiducialsExportMode& getFiducialsExportMode() const
+    {
+        return m_fiducialsExportMode;
+    }
+
+    /// Set Fiducials Export Mode);
+    void setFiducialsExportMode(const FiducialsExportMode& fiducialsExportMode)
+    {
+        m_fiducialsExportMode = fiducialsExportMode;
+    }
+
+private:
+
+    /**
+     * @brief Check if there is comment on acquisition.
+     * @param[in] series ImageSeries that must be checked.
+     */
+    bool hasDocumentSR(::fwMedData::ImageSeries::csptr series) const;
+
+    /**
+     * @brief Returns the image instance used to create the reconstruction
+     * @note This function assume that one and only one image instance has been created prior calling this function.
+     * The created image instance must be the one used to generate the reconstruction.
+     */
+    SPTR(::fwGdcmIO::container::DicomInstance) getImageInstance();
+
+    /// Dicom Instance map used to keep information between series writing calls
+    DicomInstanceMapType m_dicomInstanceMap;
+
+    /// Fiducials Export Mode
+    FiducialsExportMode m_fiducialsExportMode;
+
+};
+
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_SERIES_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/SeriesDB.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/SeriesDB.hpp
new file mode 100644
index 0000000..0efff84
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/SeriesDB.hpp
@@ -0,0 +1,85 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_SERIESDB_HPP__
+#define __FWGDCMIO_WRITER_SERIESDB_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/writer/Series.hpp"
+
+#include <fwData/location/Folder.hpp>
+#include <fwDataIO/writer/GenericObjectWriter.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwTools/ProgressAdviser.hpp>
+
+namespace fwGdcmIO
+{
+
+namespace writer
+{
+
+/**
+ * @brief   This class manages patient writing, in DICOM file format.
+ */
+class SeriesDB : public ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::SeriesDB >,
+                 public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >,
+                 public ::fwTools::ProgressAdviser
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (SeriesDB)( ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::SeriesDB >),
+        (()), ::fwDataIO::writer::factory::New< SeriesDB >);
+
+    /// Constructor
+    FWGDCMIO_API SeriesDB(::fwDataIO::writer::IObjectWriter::Key key);
+
+    /// Destructor
+    FWGDCMIO_API ~SeriesDB();
+
+    /**
+     * @brief Manage writing tools to save every series.
+     */
+    FWGDCMIO_API void write();
+
+    /**
+     * Override
+     * @brief Do nothing
+     */
+    FWGDCMIO_API std::string extension();
+
+    /// Get Fiducials Export Mode
+    const ::fwGdcmIO::writer::Series::FiducialsExportMode& getFiducialsExportMode() const
+    {
+        return m_fiducialsExportMode;
+    }
+
+    /// Set Fiducials Export Mode
+    void setFiducialsExportMode(const ::fwGdcmIO::writer::Series::FiducialsExportMode& fiducialsExportMode)
+    {
+        m_fiducialsExportMode = fiducialsExportMode;
+    }
+
+
+protected:
+    /**
+     * @brief Function used to sort Series
+     * @param[in] a First Series
+     * @param[in] b Second Series
+     */
+    static bool seriesComparator(SPTR(::fwMedData::Series) a, SPTR(::fwMedData::Series) b);
+
+    /// Fiducials Export Mode
+    ::fwGdcmIO::writer::Series::FiducialsExportMode m_fiducialsExportMode;
+};
+
+} // namespace writer
+
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_SERIESDB_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Document.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Document.hpp
new file mode 100644
index 0000000..05803a1
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Document.hpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_DOCUMENT_HPP__
+#define __FWGDCMIO_WRITER_IE_DOCUMENT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Document Information Entity class
+ */
+class FWGDCMIO_CLASS_API Document : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] image Image data
+     */
+    FWGDCMIO_API Document(SPTR(::gdcm::Writer)writer,
+                          SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                          ::fwData::Image::sptr image,
+                          bool use3DSR = false);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Document();
+
+    /**
+     * @brief Write SR Document General Module tags
+     * @see PS 3.3 C.17.2
+     */
+    FWGDCMIO_API virtual void writeSRDocumentGeneralModule();
+
+    /**
+     * @brief Write SR Document Content Module tags
+     * @see PS 3.3 C.17.3
+     */
+    FWGDCMIO_API virtual void writeSRDocumentContentModule();
+
+    /**
+     * @brief Write SOP Common Module tags
+     * @see PS 3.3 C.12.1
+     */
+    FWGDCMIO_API void writeSOPCommonModule();
+
+protected:
+
+    /**
+     * @brief Write Pertinent Other Evidence Sequence (0040,A385)
+     */
+    void writePertinentOtherEvidenceSequence();
+
+    /// True if we must use 3DSR
+    bool m_use3DSR;
+
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_IE_DOCUMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Equipment.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Equipment.hpp
new file mode 100644
index 0000000..bc0bb50
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Equipment.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_EQUIPMENT_HPP__
+#define __FWGDCMIO_WRITER_IE_EQUIPMENT_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwMedData/Equipment.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Equipment Information Entity class
+ */
+class FWGDCMIO_CLASS_API Equipment : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Equipment >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] equipment Equipment data
+     */
+    FWGDCMIO_API Equipment(SPTR(::gdcm::Writer)writer,
+                           SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                           ::fwMedData::Equipment::sptr equipment);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Equipment();
+
+    /**
+     * @brief Write General Equipment Module tags
+     * @see PS 3.3 C.7.5.1
+     */
+    FWGDCMIO_API virtual void writeGeneralEquipmentModule();
+
+    /**
+     * @brief Write Enhanced General Equipment Module tags
+     * @see PS 3.3 C.7.5.2
+     */
+    FWGDCMIO_API virtual void writeEnhancedGeneralEquipmentModule();
+
+
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_IE_EQUIPMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/FrameOfReference.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/FrameOfReference.hpp
new file mode 100644
index 0000000..e393f90
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/FrameOfReference.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_FRAMEOFREFERENCE_HPP__
+#define __FWGDCMIO_WRITER_IE_FRAMEOFREFERENCE_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwMedData/Series.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Frame Of Reference Information Entity class
+ */
+class FWGDCMIO_CLASS_API FrameOfReference : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Series >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] series Series data
+     */
+    FWGDCMIO_API FrameOfReference(SPTR(::gdcm::Writer)writer,
+                                  SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                  ::fwMedData::Series::sptr series);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~FrameOfReference();
+
+    /**
+     * @brief Write Frame of Reference Module tags
+     * @see PS 3.3 C.7.4.1
+     */
+    FWGDCMIO_API virtual void writeFrameOfReferenceModule();
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IE_FRAMEOFREFERENCE_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Image.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Image.hpp
new file mode 100644
index 0000000..0c8e6cd
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Image.hpp
@@ -0,0 +1,118 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_IMAGE_HPP__
+#define __FWGDCMIO_WRITER_IE_IMAGE_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Image Information Entity class
+ */
+class FWGDCMIO_CLASS_API Image : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] image Image data
+     */
+    FWGDCMIO_API Image(SPTR(::gdcm::Writer)writer,
+                       SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                       ::fwData::Image::sptr image);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Image();
+
+    /**
+     * @brief Write General Image Module tags
+     * @see PS 3.3 C.7.6.1
+     */
+    FWGDCMIO_API virtual void writeGeneralImageModule();
+
+    /**
+     * @brief Write General Image Module specific tags
+     * @see PS 3.3 C.7.6.1
+     * @param[in] instanceNumber Instance number
+     */
+    FWGDCMIO_API virtual void writeGeneralImageModuleSpecificTags(unsigned int instanceNumber);
+
+    /**
+     * @brief Write Image Plane Module tags
+     * @see PS 3.3 C.7.6.2
+     */
+    FWGDCMIO_API virtual void writeImagePlaneModule();
+
+    /**
+     * @brief Write Image Plane Module tags
+     * @see PS 3.3 C.7.6.2
+     * @param[in] instanceNumber Instance number
+     */
+    FWGDCMIO_API virtual void writeImagePlaneModuleSpecificTags(unsigned int instanceNumber);
+
+    /**
+     * @brief Write Image Pixel Module tags
+     * @see PS 3.3 C.7.6.3
+     */
+    FWGDCMIO_API virtual void writeImagePixelModule();
+
+    /**
+     * @brief Write Image Pixel Module specific tags
+     * @see PS 3.3 C.7.6.3
+     * @param[in] instanceNumber Instance number
+     */
+    FWGDCMIO_API virtual void writeImagePixelModuleSpecificTags(unsigned int instanceNumber);
+
+    /**
+     * @brief Write VOI LUT Module tags
+     * @see PS 3.3 C.11.2
+     */
+    FWGDCMIO_API virtual void writeVOILUTModule();
+
+    /**
+     * @brief Write SOP Common Module tags
+     * @see PS 3.3 C.12.1
+     */
+    FWGDCMIO_API virtual void writeSOPCommonModule();
+
+    /**
+     * @brief Write SOP Common Module specific tags
+     * @see PS 3.3 C.12.1
+     * @param[in] instanceNumber Instance number
+     */
+    FWGDCMIO_API virtual void writeSOPCommonModuleSpecificTags(unsigned int instanceNumber);
+
+    /**
+     * @brief Write CT Image Module tags
+     * @see PS 3.3 C.8.2.1
+     */
+    FWGDCMIO_API virtual void writeCTImageModule();
+
+    /**
+     * @brief Write MR Image Module tags
+     * @see PS 3.3 C.8.3.1
+     */
+    FWGDCMIO_API virtual void writeMRImageModule();
+
+
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_IE_IMAGE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/InformationEntity.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/InformationEntity.hpp
new file mode 100644
index 0000000..5f9e708
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/InformationEntity.hpp
@@ -0,0 +1,82 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_INFORMATIONENTITY_HPP__
+#define __FWGDCMIO_WRITER_IE_INFORMATIONENTITY_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <gdcmWriter.h>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief InformationEntity base class used to write modules
+ */
+template< class DATATYPE >
+class FWGDCMIO_CLASS_API InformationEntity
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] object FW4SPL data object
+     */
+    FWGDCMIO_API InformationEntity(
+        SPTR(::gdcm::Writer)writer,
+        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+        SPTR(DATATYPE)object);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~InformationEntity();
+
+protected:
+
+    /// GDCM Writer
+    SPTR(::gdcm::Writer) m_writer;
+
+    /// DICOM Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_instance;
+
+    /// FW4SPL Object
+    SPTR(DATATYPE) m_object;
+};
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+InformationEntity<DATATYPE>::InformationEntity(SPTR(::gdcm::Writer)writer,
+                                               SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                               SPTR(DATATYPE)object) :
+    m_writer(writer), m_instance(instance), m_object(object)
+{
+    SLM_ASSERT("Writer should not be null.", writer);
+    SLM_ASSERT("Instance should not be null.", instance);
+    SLM_ASSERT("Object should not be null.", object);
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+InformationEntity<DATATYPE>::~InformationEntity()
+{
+}
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IE_INFORMATIONENTITY_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Patient.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Patient.hpp
new file mode 100644
index 0000000..8c8b55a
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Patient.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_PATIENT_HPP__
+#define __FWGDCMIO_WRITER_IE_PATIENT_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwMedData/Patient.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Patient Information Entity class
+ */
+class FWGDCMIO_CLASS_API Patient : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Patient >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] patient Patient data
+     */
+    FWGDCMIO_API Patient(SPTR(::gdcm::Writer)writer,
+                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                         ::fwMedData::Patient::sptr patient);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Patient();
+
+    /**
+     * @brief Write Patient Module tags
+     * @see PS 3.3 C.7.1.1
+     */
+    FWGDCMIO_API virtual void writePatientModule();
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IE_PATIENT_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Series.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Series.hpp
new file mode 100644
index 0000000..3cfb172
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Series.hpp
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_SERIES_HPP__
+#define __FWGDCMIO_WRITER_IE_SERIES_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwMedData/Series.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Series Information Entity class
+ */
+class FWGDCMIO_CLASS_API Series : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Series >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] series Series data
+     */
+    FWGDCMIO_API Series(SPTR(::gdcm::Writer)writer,
+                        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                        ::fwMedData::Series::sptr series);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Series();
+
+    /**
+     * @brief Write General Series Module tags
+     * @see PS 3.3 C.7.3.1
+     */
+    FWGDCMIO_API virtual void writeGeneralSeriesModule();
+
+    /**
+     * @brief Write Segmentation Series Module tags
+     * @see PS 3.3 C.8.20.1
+     */
+    FWGDCMIO_API virtual void writeSegmentationSeriesModule();
+
+    /**
+     * @brief Write SR Document Series Module tags
+     * @see PS 3.3 C.17.1
+     */
+    FWGDCMIO_API virtual void writeSRDocumentSeriesModule();
+
+    /**
+     * @brief Write Spatial Fiducials Series Module tags
+     * @see PS 3.3 C.21.1
+     */
+    FWGDCMIO_API virtual void writeSpatialFiducialsSeriesModule();
+
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_IE_SERIES_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/SpatialFiducials.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/SpatialFiducials.hpp
new file mode 100644
index 0000000..e8e601d
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/SpatialFiducials.hpp
@@ -0,0 +1,87 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_SPATIALFIDUCIALS_HPP__
+#define __FWGDCMIO_WRITER_IE_SPATIALFIDUCIALS_HPP__
+
+#include "fwGdcmIO/exception/Failed.hpp"
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Spatial Fiducials Information Entity class
+ */
+class FWGDCMIO_CLASS_API SpatialFiducials : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] series Series data
+     */
+    FWGDCMIO_API SpatialFiducials(SPTR(::gdcm::Writer)writer,
+                                  SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                  ::fwData::Image::sptr series);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~SpatialFiducials();
+
+    /**
+     * @brief Write Spatial Fiducials Module tags
+     * @see PS 3.3 C.21.2
+     */
+    FWGDCMIO_API virtual void writeSpatialFiducialsModule();
+
+    /**
+     * @brief Write Common Instance Reference Module tags
+     * @see PS 3.3 C.12.2
+     */
+    FWGDCMIO_API virtual void writeCommonInstanceReferenceModule();
+
+    /**
+     * @brief Write SOP Common Module tags
+     * @see PS 3.3 C.12.1
+     */
+    FWGDCMIO_API virtual void writeSOPCommonModule();
+
+protected:
+
+    /**
+     * @brief Write image landmarks into sequence
+     */
+    void writeLandmarks(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence) throw(::fwGdcmIO::exception::Failed);
+
+    /**
+     * @brief Write image distances into sequence
+     */
+    void writeDistances(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence);
+
+    /**
+     * @brief Add a frame number to the referenced image sequence
+     * @param[in] frameNumber Frame Number
+     * @param[in] referencedImageSequence Destination sequence
+     */
+    void addReferencedImage(int frameNumber,
+                            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedImageSequence) throw(::fwGdcmIO::
+                                                                                                           exception::
+                                                                                                           Failed);
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IE_SPATIALFIDUCIALS_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Study.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Study.hpp
new file mode 100644
index 0000000..a4c71fa
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Study.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_STUDY_HPP__
+#define __FWGDCMIO_WRITER_IE_STUDY_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+
+#include <fwMedData/Study.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Study Information Entity class
+ */
+class FWGDCMIO_CLASS_API Study : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Study >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] study Study data
+     */
+    FWGDCMIO_API Study(SPTR(::gdcm::Writer)writer,
+                       SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                       ::fwMedData::Study::sptr study);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Study();
+
+    /**
+     * @brief Write General Study Module tags
+     * @see PS 3.3 C.7.2.1
+     */
+    FWGDCMIO_API virtual void writeGeneralStudyModule();
+
+    /**
+     * @brief Write Patient Study Module tags
+     * @see PS 3.3 C.7.2.2
+     */
+    FWGDCMIO_API virtual void writePatientStudyModule();
+
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_IE_STUDY_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Surface.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Surface.hpp
new file mode 100644
index 0000000..fe17275
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/ie/Surface.hpp
@@ -0,0 +1,81 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IE_SURFACE_HPP__
+#define __FWGDCMIO_WRITER_IE_SURFACE_HPP__
+
+#include "fwGdcmIO/writer/ie/InformationEntity.hpp"
+#include <fwData/StructureTraitsDictionary.hpp>
+
+#include <fwMedData/ModelSeries.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+/**
+ * @brief Surface Information Entity class
+ */
+class FWGDCMIO_CLASS_API Surface : public ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::ModelSeries >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share information between modules
+     * @param[in] series Series data
+     */
+    FWGDCMIO_API Surface(SPTR(::gdcm::Writer)writer,
+                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                         SPTR(::fwGdcmIO::container::DicomInstance)imageInstance,
+                         ::fwMedData::ModelSeries::sptr series);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Surface();
+
+    /**
+     * @brief Write Surface Segmentation Module tags
+     * @see PS 3.3 C.8.23.1
+     */
+    FWGDCMIO_API virtual void writeSurfaceSegmentationModule(unsigned short segmentationNumber);
+
+    /**
+     * @brief Write Surface Mesh Module tags
+     * @see PS 3.3 C.27.1
+     */
+    FWGDCMIO_API virtual void writeSurfaceMeshModule(unsigned short segmentationNumber);
+
+    /**
+     * @brief Write SOP Common Module tags
+     * @see PS 3.3 C.12.1
+     */
+    FWGDCMIO_API virtual void writeSOPCommonModule();
+
+protected:
+
+    /**
+     * @brief Write Content Identification Macro
+     * @see PS 3.3 C.8.23.1 and C.10.9
+     */
+    void writeContentIdentificationMacro(unsigned int segmentationNumber);
+
+    /// Structure Dictionary
+    ::fwData::StructureTraitsDictionary::sptr m_structureDictionary;
+
+    /// DICOM Image Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_imageInstance;
+
+};
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_IE_SURFACE_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/CTMRImageIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/CTMRImageIOD.hpp
new file mode 100644
index 0000000..3befcf0
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/CTMRImageIOD.hpp
@@ -0,0 +1,46 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IOD_CTMRIMAGEIOD_HPP__
+#define __FWGDCMIO_WRITER_IOD_CTMRIMAGEIOD_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+#include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+/**
+ * @brief CTMRImageIOD class used to write CTImage and MRImage DICOM files
+ */
+class FWGDCMIO_CLASS_API CTMRImageIOD : public ::fwGdcmIO::writer::iod::InformationObjectDefinition
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] instance DICOM instance used to share information between modules
+     */
+    FWGDCMIO_API CTMRImageIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance, ::boost::filesystem::path folderPath);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~CTMRImageIOD();
+
+    /// Write DICOM file
+    FWGDCMIO_API virtual void write(::fwMedData::Series::sptr series);
+
+};
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IOD_CTMRIMAGEIOD_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/ComprehensiveSRIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/ComprehensiveSRIOD.hpp
new file mode 100644
index 0000000..217de5e
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/ComprehensiveSRIOD.hpp
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IOD_COMPREHENSIVESRIOD_HPP__
+#define __FWGDCMIO_WRITER_IOD_COMPREHENSIVESRIOD_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+#include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+/**
+ * @brief ComprehensiveSRIOD class used to write Enhanced Structured Report DICOM files
+ */
+class FWGDCMIO_CLASS_API ComprehensiveSRIOD : public ::fwGdcmIO::writer::iod::InformationObjectDefinition
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] instance DICOM instance used to share informations between modules
+     */
+    FWGDCMIO_API ComprehensiveSRIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                    ::boost::filesystem::path folderPath, bool use3DSR = false);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~ComprehensiveSRIOD();
+
+    /// Write DICOM file
+    FWGDCMIO_API virtual void write(::fwMedData::Series::sptr series);
+
+protected:
+    /// True if we must use 3DSR
+    bool m_use3DSR;
+
+};
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IOD_COMPREHENSIVESRIOD_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp
new file mode 100644
index 0000000..0b601e4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/InformationObjectDefinition.hpp
@@ -0,0 +1,58 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IOD_INFORMATIONOBJECTDEFINITION_HPP__
+#define __FWGDCMIO_WRITER_IOD_INFORMATIONOBJECTDEFINITION_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+
+#include <fwMedData/Series.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+/**
+ * @brief InformationObjectDefinition base class used to write DICOM modules
+ */
+class FWGDCMIO_CLASS_API InformationObjectDefinition
+{
+
+public:
+
+    /**
+     * @brief Constructor
+     * @param[in] instance DICOM instance used to share information between modules
+     */
+    FWGDCMIO_API InformationObjectDefinition(SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                             ::boost::filesystem::path folderPath);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~InformationObjectDefinition();
+
+    /// Write DICOM file
+    FWGDCMIO_API virtual void write(::fwMedData::Series::sptr series) = 0;
+
+protected:
+
+    /// DICOM Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_instance;
+
+    /// Folder Path
+    ::boost::filesystem::path m_folderPath;
+
+
+};
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IOD_INFORMATIONOBJECTDEFINITION_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp
new file mode 100644
index 0000000..806b432
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp
@@ -0,0 +1,47 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IOD_SPATIALFIDUCIALSIOD_HPP__
+#define __FWGDCMIO_WRITER_IOD_SPATIALFIDUCIALSIOD_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+#include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+/**
+ * @brief SpatialFiducialsIOD class used to write Spacial Fiducials DICOM files
+ */
+class FWGDCMIO_CLASS_API SpatialFiducialsIOD : public ::fwGdcmIO::writer::iod::InformationObjectDefinition
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] instance DICOM instance used to share information between modules
+     */
+    FWGDCMIO_API SpatialFiducialsIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                     ::boost::filesystem::path folderPath);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~SpatialFiducialsIOD();
+
+    /// Write DICOM file
+    FWGDCMIO_API virtual void write(::fwMedData::Series::sptr series);
+
+};
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IOD_SPATIALFIDUCIALSIOD_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp
new file mode 100644
index 0000000..562f81e
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_IOD_SURFACESEGMENTATIONIOD_HPP__
+#define __FWGDCMIO_WRITER_IOD_SURFACESEGMENTATIONIOD_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+#include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+/**
+ * @brief SurfaceSegmentationIOD class used to write Surface Segmentation DICOM files
+ */
+class FWGDCMIO_CLASS_API SurfaceSegmentationIOD : public ::fwGdcmIO::writer::iod::InformationObjectDefinition
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] instance DICOM instance used to share information between modules
+     */
+    FWGDCMIO_API SurfaceSegmentationIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                        SPTR(::fwGdcmIO::container::DicomInstance)imageInstance,
+                                        ::boost::filesystem::path folderPath);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~SurfaceSegmentationIOD();
+
+    /// Write DICOM file
+    FWGDCMIO_API virtual void write(::fwMedData::Series::sptr series);
+
+protected:
+    /// Image instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_imageInstance;
+
+};
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_IOD_SURFACESEGMENTATIONIOD_HPP__
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/Fiducial.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/Fiducial.hpp
new file mode 100644
index 0000000..7af8a66
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/Fiducial.hpp
@@ -0,0 +1,75 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_TID_FIDUCIAL_HPP__
+#define __FWGDCMIO_WRITER_TID_FIDUCIAL_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/writer/tid/TemplateID.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwData
+{
+class Point;
+}
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+/**
+ * @brief Fiducial TID
+ * @see TID t1tt3 FIXME: Set the final TID
+ */
+class FWGDCMIO_CLASS_API Fiducial : public ::fwGdcmIO::writer::tid::TemplateID< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image Image data
+     */
+    FWGDCMIO_API Fiducial(SPTR(::gdcm::Writer)writer,
+                          SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                          ::fwData::Image::sptr image);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Fiducial();
+
+    /**
+     * @brief Create nodes according to the template
+     * @param[in] parent Parent node
+     * @param[in] useSCoord3D True if we must write SCOORD3D, false if we must write SCOORD
+     */
+    FWGDCMIO_API virtual void createNodes(SPTR(::fwGdcmIO::container::sr::DicomSRNode) parent, bool useSCoord3D = true);
+
+
+protected:
+
+    /**
+     * @brief Create a fiducial node
+     * @param[in] parent Parent node
+     * @param[in] point Fiducial (landmark) point
+     * @param[in] id ID of the ficudial
+     * @param[in] useSCoord3D True if we must use 3D coordinates
+     */
+    void createFiducial(SPTR(::fwGdcmIO::container::sr::DicomSRNode) parent,
+                        const SPTR(::fwData::Point)& point, unsigned int id, bool useSCoord3D);
+
+
+};
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_TID_FIDUCIAL_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/Measurement.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/Measurement.hpp
new file mode 100644
index 0000000..c0a5b47
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/Measurement.hpp
@@ -0,0 +1,75 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_TID_MEASUREMENT_HPP__
+#define __FWGDCMIO_WRITER_TID_MEASUREMENT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/writer/tid/TemplateID.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwData
+{
+class PointList;
+}
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+/**
+ * @brief Measurement TID
+ * @see TID 300
+ */
+class FWGDCMIO_CLASS_API Measurement : public ::fwGdcmIO::writer::tid::TemplateID< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image Image data
+     */
+    FWGDCMIO_API Measurement(SPTR(::gdcm::Writer)writer,
+                             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                             ::fwData::Image::sptr image);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~Measurement();
+
+    /**
+     * @brief Create nodes according to the template
+     * @param[in] parent Parent node
+     * @param[in] useSCoord3D True if we must write SCOORD3D, false if we must write SCOORD
+     */
+    FWGDCMIO_API virtual void createNodes(SPTR(::fwGdcmIO::container::sr::DicomSRNode) parent, bool useSCoord3D = true);
+
+
+protected:
+
+    /**
+     * @brief Create a measurement node
+     * @param[in] parent Parent node
+     * @param[in] pointList Pointlist containing distance points
+     * @param[in] id ID of the ficudial
+     * @param[in] useSCoord3D True if we must use 3D coordinates
+     */
+    void createMeasurement(SPTR(::fwGdcmIO::container::sr::DicomSRNode) parent,
+                           const SPTR(::fwData::PointList)& pointList, unsigned int id, bool useSCoord3D);
+
+
+};
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_TID_MEASUREMENT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/MeasurementReport.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/MeasurementReport.hpp
new file mode 100644
index 0000000..efda26b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/MeasurementReport.hpp
@@ -0,0 +1,56 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_TID_MEASUREMENTREPORT_HPP__
+#define __FWGDCMIO_WRITER_TID_MEASUREMENTREPORT_HPP__
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/writer/tid/TemplateID.hpp"
+
+#include <fwData/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+/**
+ * @brief Measurement Report TID - This a root template
+ * @see TID t1tt1 FIXME: Set the final TID
+ */
+class FWGDCMIO_CLASS_API MeasurementReport : public ::fwGdcmIO::writer::tid::TemplateID< ::fwData::Image >
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] image Image data
+     */
+    FWGDCMIO_API MeasurementReport(SPTR(::gdcm::Writer)writer,
+                                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                   ::fwData::Image::sptr image);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~MeasurementReport();
+
+    /**
+     * @brief Create Measurement Report template root node
+     * @param[in] useSCoord3D True if we must write SCOORD3D, false if we must write SCOORD
+     */
+    FWGDCMIO_API virtual SPTR(::fwGdcmIO::container::sr::DicomSRNode) createRootNode(bool useSCoord3D = true);
+
+
+};
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif /* __FWGDCMIO_WRITER_TID_MEASUREMENTREPORT_HPP__ */
diff --git a/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/TemplateID.hpp b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/TemplateID.hpp
new file mode 100644
index 0000000..675239e
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/include/fwGdcmIO/writer/tid/TemplateID.hpp
@@ -0,0 +1,81 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_WRITER_TID_TEMPLATEID_HPP__
+#define __FWGDCMIO_WRITER_TID_TEMPLATEID_HPP__
+
+#include "fwGdcmIO/config.hpp"
+#include "fwGdcmIO/container/DicomInstance.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <gdcmWriter.h>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+/**
+ * @brief TemplateID base class used to write templates
+ */
+template< class DATATYPE >
+class FWGDCMIO_CLASS_API TemplateID
+{
+
+public:
+    /**
+     * @brief Constructor
+     * @param[in] writer GDCM writer that must be enriched
+     * @param[in] instance DICOM instance used to share informations between modules
+     * @param[in] object FW4SPL data object
+     */
+    FWGDCMIO_API TemplateID(
+        SPTR(::gdcm::Writer)writer,
+        SPTR(::fwGdcmIO::container::DicomInstance)instance,
+        SPTR(DATATYPE)object);
+
+    /// Destructor
+    FWGDCMIO_API virtual ~TemplateID();
+
+protected:
+
+    /// GDCM Writer
+    SPTR(::gdcm::Writer) m_writer;
+
+    /// DICOM Instance
+    SPTR(::fwGdcmIO::container::DicomInstance) m_instance;
+
+    /// FW4SPL Object
+    SPTR(DATATYPE) m_object;
+};
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+TemplateID<DATATYPE>::TemplateID(SPTR(::gdcm::Writer)writer,
+                                 SPTR(::fwGdcmIO::container::DicomInstance)instance, SPTR(DATATYPE)object) :
+    m_writer(writer), m_instance(instance), m_object(object)
+{
+    SLM_ASSERT("Writer should not be null.", writer);
+    SLM_ASSERT("Instance should not be null.", instance);
+    SLM_ASSERT("Object should not be null.", object);
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+TemplateID<DATATYPE>::~TemplateID()
+{
+}
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_WRITER_TID_TEMPLATEID_HPP__
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomCodedAttribute.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomCodedAttribute.cpp
new file mode 100644
index 0000000..614c2f9
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomCodedAttribute.cpp
@@ -0,0 +1,45 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+
+//------------------------------------------------------------------------------
+
+DicomCodedAttribute::DicomCodedAttribute(const std::string& codeValue, const std::string& codingSchemeDesignator,
+                                         const std::string& codeMeaning, const std::string& codingSchemeVersion) :
+    m_codeValue(codeValue),
+    m_codingSchemeDesignator(codingSchemeDesignator),
+    m_codeMeaning(codeMeaning),
+    m_codingSchemeVersion(codingSchemeVersion)
+{
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomCodedAttribute::isEmpty() const
+{
+    return m_codeValue == "" && m_codingSchemeDesignator == "" && m_codeMeaning == "" && m_codingSchemeVersion == "";
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomCodedAttribute::operator==(const DicomCodedAttribute& other) const
+{
+    return m_codeValue == other.m_codeValue && m_codingSchemeDesignator == other.m_codingSchemeDesignator
+           && m_codeMeaning == other.m_codeMeaning && m_codingSchemeVersion == other.m_codingSchemeVersion;
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomInstance.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomInstance.cpp
new file mode 100644
index 0000000..345be5c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomInstance.cpp
@@ -0,0 +1,142 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/DicomInstance.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwData/Image.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+
+//------------------------------------------------------------------------------
+
+DicomInstance::DicomInstance() :
+    m_isMultiFiles(true),
+    m_SOPClassUID("")
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+DicomInstance::DicomInstance(SPTR(::fwMedData::Series)series, bool isMultiFiles) :
+    m_isMultiFiles(isMultiFiles),
+    m_SOPClassUID(""),
+    m_studyInstanceUID(series->getStudy()->getInstanceUID()),
+    m_seriesInstanceUID(series->getInstanceUID())
+{
+    // Compute SOPClassUID
+    this->computeSOPClassUID(series);
+
+    // Generate SOPInstanceUIDs
+    this->generateSOPInstanceUIDs(series);
+}
+
+//------------------------------------------------------------------------------
+
+DicomInstance::DicomInstance(SPTR(::fwMedData::DicomSeries)dicomSeries) :
+    m_isMultiFiles(dicomSeries->getLocalDicomPaths().size()>1),
+    m_studyInstanceUID(dicomSeries->getStudy()->getInstanceUID()),
+    m_seriesInstanceUID(dicomSeries->getInstanceUID())
+{
+    // Get SOPClassUID
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = dicomSeries->getSOPClassUIDs();
+    m_SOPClassUID                                                           = sopClassUIDContainer.begin()->c_str();
+}
+
+//------------------------------------------------------------------------------
+
+DicomInstance::DicomInstance(const DicomInstance& dicomInstance)
+{
+    SLM_TRACE_FUNC();
+    m_isMultiFiles            = dicomInstance.m_isMultiFiles;
+    m_SOPClassUID             = dicomInstance.m_SOPClassUID;
+    m_SOPInstanceUIDContainer = dicomInstance.m_SOPInstanceUIDContainer;
+}
+
+//------------------------------------------------------------------------------
+
+DicomInstance::~DicomInstance()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void DicomInstance::computeSOPClassUID(::fwMedData::Series::sptr series)
+{
+    // Retrieve series type
+    ::fwMedData::ImageSeries::csptr imageSeries = ::fwMedData::ImageSeries::dynamicConstCast(series);
+    ::fwMedData::ModelSeries::csptr modelSeries = ::fwMedData::ModelSeries::dynamicConstCast(series);
+
+    // Create result
+    std::string sopClassUID = "";
+
+    if(imageSeries)
+    {
+        // Retrieve image from series
+        ::fwData::Image::csptr image = imageSeries->getImage();
+
+        // Compute instance dimension
+        unsigned int dimension =
+            (this->getIsMultiFiles()) ? 2 : static_cast<unsigned int>(image->getNumberOfDimensions());
+
+        // Define SOP Class UID from the modality
+        ::gdcm::MediaStorage mediaStorage;
+        mediaStorage.GuessFromModality(series->getModality().c_str(), dimension);
+
+        // Identify the SOPClassUID from a guess
+        if (mediaStorage != ::gdcm::MediaStorage::MS_END && mediaStorage.GetString() != 0)
+        {
+            sopClassUID = mediaStorage.GetString();
+        }
+        // Force SOPClassUID to be CTImageStorage
+        else
+        {
+            sopClassUID = ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::CTImageStorage);
+        }
+    }
+    else if(modelSeries)
+    {
+        sopClassUID = ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::SurfaceSegmentationStorage);
+    }
+
+    // Update instance information
+    this->setSOPClassUID(sopClassUID);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomInstance::generateSOPInstanceUIDs(::fwMedData::Series::sptr series)
+{
+    // Retrieve ImageSeries
+    ::fwMedData::ImageSeries::csptr imageSeries = ::fwMedData::ImageSeries::dynamicConstCast(series);
+
+    // Compute number of instances
+    std::size_t nbInstances = (imageSeries && m_isMultiFiles) ? (imageSeries->getImage()->getSize()[2]) : (1);
+
+    // Create generator
+    ::gdcm::UIDGenerator uidGenerator;
+
+    // Generate UIDs
+    for(std::size_t i = 0; i < nbInstances; ++i)
+    {
+        m_SOPInstanceUIDContainer.push_back(uidGenerator.Generate());
+    }
+}
+
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomSurface.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomSurface.cpp
new file mode 100644
index 0000000..a33db2a
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/DicomSurface.cpp
@@ -0,0 +1,315 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/DicomSurface.hpp"
+
+#include "fwGdcmIO/exception/Failed.hpp"
+
+#include <fwDataTools/Mesh.hpp>
+#include <fwDataTools/helper/Array.hpp>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+
+//------------------------------------------------------------------------------
+
+DicomSurface::DicomSurface() :
+    m_pointCoordSize(0), m_pointIndexSize(0)
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+DicomSurface::~DicomSurface()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+const ::boost::shared_ptr< float > DicomSurface::getPointCoordData() const
+{
+    return this->m_pointCoordData;
+}
+
+//------------------------------------------------------------------------------
+
+unsigned long DicomSurface::getPointCoordSize() const
+{
+    return this->m_pointCoordSize;
+}
+
+//------------------------------------------------------------------------------
+
+const ::boost::shared_ptr< uint32_t > DicomSurface::getPointIndexList() const
+{
+    return this->m_pointIndexList;
+}
+
+//------------------------------------------------------------------------------
+
+unsigned long DicomSurface::getPointIndexSize() const
+{
+    return this->m_pointIndexSize;
+}
+
+//------------------------------------------------------------------------------
+
+const ::boost::shared_ptr< float > DicomSurface::getNormalCoordData() const
+{
+    return this->m_normalCoordData;
+}
+
+//------------------------------------------------------------------------------
+
+unsigned long DicomSurface::getNormalCoordSize() const
+{
+    return this->m_normalCoordSize;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setPointCoordData(const ::boost::shared_ptr< float > array)
+{
+    this->m_pointCoordData = array;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setPointCoordSize(const unsigned long size)
+{
+    this->m_pointCoordSize = size;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setPointIndexList(const ::boost::shared_ptr< uint32_t > array)
+{
+    this->m_pointIndexList = array;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setPointIndexSize(const unsigned long size)
+{
+    this->m_pointIndexSize = size;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setNormalCoordData(const ::boost::shared_ptr< float > array)
+{
+    this->m_normalCoordData = array;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setNormalCoordSize(const unsigned long size)
+{
+    this->m_normalCoordSize = size;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::setFromData(fwData::Reconstruction::csptr reconstruction)
+{
+    // Get mesh
+    ::fwData::Mesh::sptr mesh = reconstruction->getMesh();
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Can't save this mesh. It must contain only triangles !"),
+                          !::fwDataTools::Mesh::hasUniqueCellType(mesh, ::fwData::Mesh::TRIANGLE));
+
+    ::fwData::Array::sptr pointArray = mesh->getPointsArray();
+    ::fwDataTools::helper::Array pointArrayHelper(pointArray);
+    ::fwData::Mesh::PointValueType* points = pointArrayHelper.begin< ::fwData::Mesh::PointValueType >();
+
+    ::fwData::Array::sptr cellData = mesh->getCellDataArray();
+    ::fwDataTools::helper::Array cellDataHelper(cellData);
+    ::fwData::Mesh::CellValueType* cells = cellDataHelper.begin< ::fwData::Mesh::CellValueType >();
+
+    // Initialize members
+    m_pointCoordSize = mesh->getNumberOfPoints();
+    m_pointCoordData = ::boost::shared_ptr< float >(new float[3 * m_pointCoordSize]);
+
+    m_pointIndexSize = mesh->getNumberOfCells();
+    m_pointIndexList = ::boost::shared_ptr< uint32_t >(new uint32_t[3 * m_pointIndexSize]);
+
+    m_normalCoordSize = 0;
+
+    // Traverse Mesh components
+    float* pointCoordData    = m_pointCoordData.get();
+    uint32_t* pointIndexList = m_pointIndexList.get();
+
+    memcpy(pointCoordData, points, pointArray->getSizeInBytes());
+
+    for (unsigned long id = 0; id < mesh->getCellDataSize(); ++id)
+    {
+        *pointIndexList = static_cast< uint32_t >(*cells);
+        ++cells;
+        ++pointIndexList;
+    }
+
+    if (mesh->getPointNormalsArray())
+    {
+        ::fwData::Array::sptr normalArray = mesh->getPointNormalsArray();
+        ::fwDataTools::helper::Array normalArrayHelper(normalArray);
+        ::fwData::Mesh::NormalValueType* normals = normalArrayHelper.begin< ::fwData::Mesh::NormalValueType >();
+
+        m_normalCoordSize = mesh->getNumberOfPoints();
+        m_normalCoordData = ::boost::shared_ptr< float >(new float[3 * m_normalCoordSize]);
+
+        float* normalCoordData = m_normalCoordData.get();
+
+        memcpy(normalCoordData, normals, normalArray->getSizeInBytes());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+struct cell_data_offset_generator
+{
+    ::fwData::Mesh::CellDataOffsetType current;
+    cell_data_offset_generator()
+    {
+        current = 0;
+    }
+
+    ::fwData::Mesh::CellDataOffsetType operator()()
+    {
+        ::fwData::Mesh::CellDataOffsetType res = current;
+        current += 3;
+        return res;
+    }
+};
+
+//------------------------------------------------------------------------------
+
+void DicomSurface::convertToData(fwData::Reconstruction::sptr reconstruction)
+{
+    // Get mesh
+    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+
+    // Initialize members
+    const unsigned long sizePoints = m_pointCoordSize / 3;
+    const unsigned long sizeCells  = m_pointIndexSize / 3;
+    mesh->setNumberOfPoints(sizePoints);
+    mesh->setNumberOfCells(sizeCells);
+    mesh->setCellDataSize(sizeCells * 3);
+    mesh->adjustAllocatedMemory();
+
+    ::fwData::Array::sptr pointArray      = mesh->getPointsArray();
+    ::fwData::Array::sptr cellData        = mesh->getCellDataArray();
+    ::fwData::Array::sptr cellDataOffsets = mesh->getCellDataOffsetsArray();
+    ::fwData::Array::sptr cellTypes       = mesh->getCellTypesArray();
+
+    ::fwDataTools::helper::Array pointArrayHelper(pointArray);
+    ::fwDataTools::helper::Array cellDataHelper(cellData);
+    ::fwDataTools::helper::Array cellDataOffsetsHelper(cellDataOffsets);
+    ::fwDataTools::helper::Array cellTypesHelper(cellTypes);
+
+    ::fwData::Mesh::PointValueType* points = pointArrayHelper.begin< ::fwData::Mesh::PointValueType >();
+    ::fwData::Mesh::CellValueType* cells   = cellDataHelper.begin< ::fwData::Mesh::CellValueType >();
+
+    // Traverse DicomSurface components
+    const float* pointCoordData    = m_pointCoordData.get();
+    const uint32_t* pointIndexList = m_pointIndexList.get();
+
+    memcpy(points, pointCoordData, pointArray->getSizeInBytes());
+
+    for (unsigned long id = 0; id < sizeCells * 3; ++id)
+    {
+        *cells = static_cast< ::fwData::Mesh::CellValueType >(*pointIndexList);
+        ++cells;
+        ++pointIndexList;
+    }
+
+    std::fill(cellTypesHelper.begin< ::fwData::Mesh::CellTypes >(), cellTypesHelper.end< ::fwData::Mesh::CellTypes >(),
+              static_cast< ::fwData::Mesh::CellTypes >(::fwData::Mesh::TRIANGLE));
+
+    cell_data_offset_generator cellDataOffsetGenerator;
+
+    std::generate(cellDataOffsetsHelper.begin< ::fwData::Mesh::CellDataOffsetType >(),
+                  cellDataOffsetsHelper.end< ::fwData::Mesh::CellDataOffsetType >(), cellDataOffsetGenerator);
+
+    if (m_normalCoordSize > 0)
+    {
+        const float* normalCoordData = m_normalCoordData.get();
+        mesh->allocatePointNormals();
+
+        ::fwData::Array::sptr normalArray = mesh->getPointNormalsArray();
+        ::fwDataTools::helper::Array normalArrayHelper(normalArray);
+        ::fwData::Mesh::NormalValueType* normals = normalArrayHelper.begin< ::fwData::Mesh::NormalValueType >();
+
+        memcpy(normals, normalCoordData, normalArray->getSizeInBytes());
+    }
+
+    reconstruction->setMesh(mesh);
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Mesh::sptr DicomSurface::convertToData(const float* coord, const unsigned long coordSize,
+                                                 const uint32_t* index, const unsigned long indexSize,
+                                                 const float* normalCoord)
+{
+    ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
+
+    // Initialize members
+    const unsigned long sizePoints = coordSize / 3;
+    const unsigned long sizeCells  = indexSize / 3;
+    mesh->setNumberOfPoints(sizePoints);
+    mesh->setNumberOfCells(sizeCells);
+    mesh->setCellDataSize(sizeCells * 3);
+    mesh->adjustAllocatedMemory();
+
+    ::fwData::Array::sptr pointArray      = mesh->getPointsArray();
+    ::fwData::Array::sptr cellData        = mesh->getCellDataArray();
+    ::fwData::Array::sptr cellDataOffsets = mesh->getCellDataOffsetsArray();
+    ::fwData::Array::sptr cellTypes       = mesh->getCellTypesArray();
+
+    ::fwDataTools::helper::Array pointArrayHelper(pointArray);
+    ::fwDataTools::helper::Array cellDataHelper(cellData);
+    ::fwDataTools::helper::Array cellDataOffsetsHelper(cellDataOffsets);
+    ::fwDataTools::helper::Array cellTypesHelper(cellTypes);
+
+    ::fwData::Mesh::PointValueType* points = pointArrayHelper.begin< ::fwData::Mesh::PointValueType >();
+    ::fwData::Mesh::CellValueType* cells   = cellDataHelper.begin< ::fwData::Mesh::CellValueType >();
+
+    memcpy(points, coord, pointArray->getSizeInBytes());
+
+    for (unsigned long id = 0; id < indexSize; ++id)
+    {
+        *cells = static_cast< ::fwData::Mesh::CellValueType >(*index);
+        ++cells;
+        ++index;
+    }
+
+    std::fill(cellTypesHelper.begin< ::fwData::Mesh::CellTypes >(), cellTypesHelper.end< ::fwData::Mesh::CellTypes >(),
+              static_cast< ::fwData::Mesh::CellTypes >(::fwData::Mesh::TRIANGLE));
+
+    cell_data_offset_generator cellDataOffsetGenerator;
+
+    std::generate(cellDataOffsetsHelper.begin< ::fwData::Mesh::CellDataOffsetType >(),
+                  cellDataOffsetsHelper.end< ::fwData::Mesh::CellDataOffsetType >(), cellDataOffsetGenerator);
+
+    if (normalCoord)
+    {
+        mesh->allocatePointNormals();
+
+        ::fwData::Array::sptr normalArray = mesh->getPointNormalsArray();
+        ::fwDataTools::helper::Array normalArrayHelper(normalArray);
+        ::fwData::Mesh::NormalValueType* normals = normalArrayHelper.begin< ::fwData::Mesh::NormalValueType >();
+
+        memcpy(normals, normalCoord, normalArray->getSizeInBytes());
+    }
+
+    return mesh;
+}
+
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRCodeNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRCodeNode.cpp
new file mode 100644
index 0000000..337721c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRCodeNode.cpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRCodeNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+#include <gdcmUIDGenerator.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRCodeNode::DicomSRCodeNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship
+                                 , const DicomCodedAttribute& codedEntry) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "CODE", relationship), m_codedEntry(codedEntry)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRCodeNode::~DicomSRCodeNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRCodeNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Concept Code Sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > codeSequence =
+        this->createConceptNameCodeSequence(dataset, m_codedEntry);
+    ::fwGdcmIO::helper::DicomData::insertSQ< 0x0040, 0xa168 >(codeSequence, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRCodeNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nCoded entry : [" << m_codedEntry << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRContainerNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRContainerNode.cpp
new file mode 100644
index 0000000..142867f
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRContainerNode.cpp
@@ -0,0 +1,49 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRContainerNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRContainerNode::DicomSRContainerNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "CONTAINER", relationship)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRContainerNode::~DicomSRContainerNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRContainerNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Continuity of content - Type 1 - See PS 3.3 C.18.8 (Only for type CONTAINER)
+    // NOTE : Continuity is fixed to SEPARATE because it provides a better compatibility.
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa050 >("SEPARATE", dataset);
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRImageNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRImageNode.cpp
new file mode 100644
index 0000000..f8d83dd
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRImageNode.cpp
@@ -0,0 +1,82 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRImageNode::DicomSRImageNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                   const std::string& sopClassUID, const std::string& sopInstanceUID, int frameNumber) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "IMAGE", relationship), m_sopClassUID(sopClassUID),
+    m_sopInstanceUID(sopInstanceUID), m_frameNumber(frameNumber)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRImageNode::~DicomSRImageNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRImageNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Referenced SOP Sequence
+    this->writeReferencedSOPSequence(dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRImageNode::writeReferencedSOPSequence(::gdcm::DataSet& dataset) const
+{
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = new ::gdcm::SequenceOfItems();
+    ::gdcm::Item item;
+    item.SetVLToUndefined();
+    ::gdcm::DataSet& itemDataset = item.GetNestedDataSet();
+
+    // Referenced SOP Class UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1150 >(m_sopClassUID, itemDataset);
+
+    // Referenced SOP Instance UID  - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1155 >(m_sopInstanceUID, itemDataset);
+
+    // Referenced Frame Number - Type 1C
+    ::fwGdcmIO::helper::DicomData::setTagValues< int, 0x0008, 0x1160 >(&m_frameNumber, 1, itemDataset);
+
+    sequence->AddItem(item);
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1199 >(sequence, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRImageNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nSOP Class UID : [" << m_sopClassUID << "]";
+    os << "\\nSOP Instance UID : [" << m_sopInstanceUID << "]";
+    os << "\\nFrame number : [" << m_frameNumber << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRNode.cpp
new file mode 100644
index 0000000..5ae0876
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRNode.cpp
@@ -0,0 +1,141 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRNode::DicomSRNode(const DicomCodedAttribute& codedAttribute, const std::string& type,
+                         const std::string& relationship) :
+    m_codedAttribute(codedAttribute), m_type(type), m_relationship(relationship)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRNode::~DicomSRNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNode::addSubNode(const SPTR(DicomSRNode)& node)
+{
+    m_subNodeContainer.push_back(node);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNode::write(::gdcm::DataSet& dataset) const
+{
+    // Value Type - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa040 >(m_type, dataset);
+
+    // Relationship Value - Type 1 (Shouldn't be there for root node)
+    if(!m_relationship.empty())
+    {
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa010 >(m_relationship, dataset);
+    }
+
+    // Concept Name Code Sequence - Type 1C
+    if(!m_codedAttribute.getCodeValue().empty() && !m_codedAttribute.getCodingSchemeDesignator().empty())
+    {
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > codeSequence =
+            this->createConceptNameCodeSequence(dataset, m_codedAttribute);
+        ::fwGdcmIO::helper::DicomData::insertSQ<0x0040, 0xa043>(codeSequence, dataset);
+
+    }
+
+    // Content sequence - Type 1C
+    if(!m_subNodeContainer.empty())
+    {
+        this->writeContentSequence(dataset);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::gdcm::SmartPointer< ::gdcm::SequenceOfItems > DicomSRNode::createConceptNameCodeSequence(
+    ::gdcm::DataSet& dataset, const DicomCodedAttribute& codedAttribute) const
+{
+    // Write code sequence
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > codeSequence = new ::gdcm::SequenceOfItems();
+    codeSequence->SetLengthToUndefined();
+
+    // Create item (shall be one)
+    ::gdcm::Item item;
+    item.SetVLToUndefined();
+    ::gdcm::DataSet& itemDataset = item.GetNestedDataSet();
+
+    // Code value - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue<0x0008,0x0100>(codedAttribute.getCodeValue(), itemDataset);
+
+    // Coding Scheme Designator - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue<0x0008,0x0102>(codedAttribute.getCodingSchemeDesignator(), itemDataset);
+
+    // Coding Scheme Version - Type 1C
+    if (!m_codedAttribute.getCodingSchemeVersion().empty())
+    {
+        ::fwGdcmIO::helper::DicomData::setTagValue<0x0008,0x0103>(codedAttribute.getCodingSchemeVersion(), itemDataset);
+    }
+
+    // Code Meaning - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue<0x0008,0x0104>(codedAttribute.getCodeMeaning(), itemDataset);
+
+    // Insert in a sequence
+    codeSequence->AddItem(item);
+
+    return codeSequence;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNode::writeContentSequence(::gdcm::DataSet& dataset) const
+{
+    // Create the content sequence
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = new ::gdcm::SequenceOfItems();
+
+    // Write every node
+    for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& child: m_subNodeContainer)
+    {
+        ::gdcm::Item item;
+        item.SetVLToUndefined();
+        ::gdcm::DataSet& itemDataset = item.GetNestedDataSet();
+        child->write(itemDataset);
+        sequence->AddItem(item);
+    }
+
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0040, 0xa730 >(sequence, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNode::print(std::ostream& os) const
+{
+    os << m_type;
+    if(!m_codedAttribute.isEmpty())
+    {
+        os << "\\n[" << m_codedAttribute << "]";
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRNumNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRNumNode.cpp
new file mode 100644
index 0000000..bd898c4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRNumNode.cpp
@@ -0,0 +1,81 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRNumNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRNumNode::DicomSRNumNode(const DicomCodedAttribute& codedAttribute,
+                               const std::string& relationship, double numValue,
+                               const DicomCodedAttribute& measurementUnits) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "NUM", relationship), m_numValue(numValue),
+    m_measurementUnits(measurementUnits)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRNumNode::~DicomSRNumNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNumNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Measured Value Sequence - Type 2
+    this->writeMeasuredValueSequence(dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNumNode::writeMeasuredValueSequence(::gdcm::DataSet& dataset) const
+{
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = new ::gdcm::SequenceOfItems();
+    ::gdcm::Item item;
+    item.SetVLToUndefined();
+    ::gdcm::DataSet& itemDataset = item.GetNestedDataSet();
+
+    // Add numerical value - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValues< double, 0x0040, 0xa30a >(&m_numValue, 1, itemDataset);
+
+    // Add measured units code sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > codeSequence =
+        this->createConceptNameCodeSequence(itemDataset, m_measurementUnits);
+    ::fwGdcmIO::helper::DicomData::insertSQ<0x0040, 0x08ea>(codeSequence, itemDataset);
+
+    sequence->AddItem(item);
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0040, 0xa300 >(sequence, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRNumNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nMeasurement units : [" << m_measurementUnits << "]";
+    os << "\\nMeasurement value : [" << m_numValue << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRSCoord3DNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRSCoord3DNode.cpp
new file mode 100644
index 0000000..0408869
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRSCoord3DNode.cpp
@@ -0,0 +1,78 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRSCoord3DNode::DicomSRSCoord3DNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                         const std::string& graphicType, GraphicDataContainerType graphicDataContainer,
+                                         const std::string& frameOfReferenceUID) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "SCOORD3D", relationship),
+    m_frameOfReferenceUID(frameOfReferenceUID),
+    m_graphicType(graphicType),
+    m_graphicDataContainer(graphicDataContainer)
+{
+    SLM_ASSERT("Only POINT and POLYLINE are supported by SCoord3D node for now.",
+               graphicType == "POINT" || graphicType == "POLYLINE");
+
+    SLM_ASSERT("Graphic data doesn't match graphic type POINT.",
+               m_graphicType != "POINT" || m_graphicDataContainer.size() == 3);
+
+    SLM_ASSERT("Graphic data doesn't match graphic type POLYLINE.",
+               m_graphicType != "POLYLINE" || m_graphicDataContainer.size() == 6);
+
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRSCoord3DNode::~DicomSRSCoord3DNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRSCoord3DNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Referenced Frame of Reference UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x3006, 0x0024 >(m_frameOfReferenceUID, dataset);
+
+    // Graphic Data - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValues< float, 0x0070, 0x0022 >(
+        &m_graphicDataContainer[0], static_cast<unsigned int>(m_graphicDataContainer.size()), dataset);
+
+    // Graphic Type - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0023 >(m_graphicType, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRSCoord3DNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nFrame of Reference UID : [" << m_frameOfReferenceUID << "]";
+    os << "\\nGraphic Type : [" << m_graphicType << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRSCoordNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRSCoordNode.cpp
new file mode 100644
index 0000000..10dd3c0
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRSCoordNode.cpp
@@ -0,0 +1,71 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRSCoordNode::DicomSRSCoordNode(const DicomCodedAttribute& codedAttribute, const std::string& relationship,
+                                     const std::string& graphicType, GraphicDataContainerType graphicDataContainer) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "SCOORD", relationship),
+    m_graphicType(graphicType), m_graphicDataContainer(graphicDataContainer)
+{
+    SLM_ASSERT("Only POINT and POLYLINE are supported by SCoord node for now.",
+               graphicType == "POINT" || graphicType == "POLYLINE");
+
+    SLM_ASSERT("Graphic data doesn't match graphic type POINT.",
+               m_graphicType != "POINT" || m_graphicDataContainer.size() == 2);
+
+    SLM_ASSERT("Graphic data doesn't match graphic type POLYLINE.",
+               m_graphicType != "POLYLINE" || m_graphicDataContainer.size() == 4);
+
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRSCoordNode::~DicomSRSCoordNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRSCoordNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Graphic Data - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValues< float, 0x0070, 0x0022 >(
+        &m_graphicDataContainer[0], m_graphicDataContainer.size(), dataset);
+
+    // Graphic Type - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0023 >(m_graphicType, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRSCoordNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nGraphic Type : [" << m_graphicType << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRTextNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRTextNode.cpp
new file mode 100644
index 0000000..4c6a4ed
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRTextNode.cpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRTextNode::DicomSRTextNode(const DicomCodedAttribute& codedAttribute,
+                                 const std::string& relationship, const std::string textValue) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "TEXT", relationship), m_textValue(textValue)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRTextNode::~DicomSRTextNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRTextNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // Text Value - Type 1C
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa160 >(m_textValue, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRTextNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nText value : [" << m_textValue << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRUIDRefNode.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRUIDRefNode.cpp
new file mode 100644
index 0000000..c7c3db1
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/container/sr/DicomSRUIDRefNode.cpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmSequenceOfItems.h>
+
+namespace fwGdcmIO
+{
+namespace container
+{
+namespace sr
+{
+
+//------------------------------------------------------------------------------
+
+DicomSRUIDRefNode::DicomSRUIDRefNode(const DicomCodedAttribute& codedAttribute,
+                                     const std::string& relationship, const std::string uidValue) :
+    ::fwGdcmIO::container::sr::DicomSRNode(codedAttribute, "UIDREF", relationship), m_uidValue(uidValue)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSRUIDRefNode::~DicomSRUIDRefNode()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRUIDRefNode::write(::gdcm::DataSet& dataset) const
+{
+    ::fwGdcmIO::container::sr::DicomSRNode::write(dataset);
+
+    // UID Value - Type 1C
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa124 >(m_uidValue, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSRUIDRefNode::print(std::ostream& os) const
+{
+    DicomSRNode::print(os);
+    os << "\\nUID value : [" << m_uidValue << "]";
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace sr
+} //namespace container
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomAnonymizer.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomAnonymizer.cpp
new file mode 100644
index 0000000..04a8af7
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomAnonymizer.cpp
@@ -0,0 +1,844 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomAnonymizer.hpp"
+#include "fwGdcmIO/helper/DicomSearch.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+#include <fwTools/System.hpp>
+
+#include <gdcmGlobal.h>
+#include <gdcmReader.h>
+#include <gdcmUIDGenerator.h>
+#include <gdcmWriter.h>
+
+#include <boost/exception/all.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/foreach.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/range/algorithm/for_each.hpp>
+
+#include <cstdint>
+#include <iomanip>
+#include <time.h>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+::gdcm::UIDGenerator GENERATOR;
+
+const DicomAnonymizer::TagContainerType DicomAnonymizer::s_ACTION_CODE_D_TAGS = ::boost::assign::list_of
+                                                                                    (::gdcm::Tag(0x0070, 0x0001)) //Graphic Annotation Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0x1101)) //Person Identification Code Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0xA123)) //Person Name
+                                                                                    (::gdcm::Tag(0x0040, 0xA075)) //Verifying Observer Name
+                                                                                    (::gdcm::Tag(0x0040, 0xA073)) //Verifying Observer Sequence
+;
+
+const DicomAnonymizer::TagContainerType DicomAnonymizer::s_ACTION_CODE_Z_TAGS = ::boost::assign::list_of
+                                                                                    (::gdcm::Tag(0x0008, 0x0050)) //Accession Number
+                                                                                    (::gdcm::Tag(0x0070, 0x0084)) //Content Creator’s Name
+                                                                                    (::gdcm::Tag(0x0008, 0x0023)) //Content Date
+                                                                                    (::gdcm::Tag(0x0008, 0x0033)) //Content Time
+                                                                                    (::gdcm::Tag(0x0018, 0x0010)) //Contrast Bolus Agent
+                                                                                    (::gdcm::Tag(0x0040, 0x2017)) //Filler Order Number of Imaging Service Request
+                                                                                    (::gdcm::Tag(0x0010, 0x0020)) //Patient ID
+                                                                                    (::gdcm::Tag(0x0010, 0x0030)) //Patient’s Birth Date
+                                                                                    (::gdcm::Tag(0x0010, 0x0010)) //Patient’s Name
+                                                                                    (::gdcm::Tag(0x0010, 0x0040)) //Patient’s Sex
+                                                                                    (::gdcm::Tag(0x0040, 0x2016)) //Placer Order Number of Imaging Service Request
+                                                                                    (::gdcm::Tag(0x0008, 0x0090)) //Referring Physician’s Name
+                                                                                    (::gdcm::Tag(0x0008, 0x0020)) //Study Date
+                                                                                    (::gdcm::Tag(0x0020, 0x0010)) //Study ID
+                                                                                    (::gdcm::Tag(0x0008, 0x0030)) //Study Time
+                                                                                    (::gdcm::Tag(0x0040, 0xA088)) //Verifying Observer Identification Code Sequence
+;
+
+const DicomAnonymizer::TagContainerType DicomAnonymizer::s_ACTION_CODE_X_TAGS = ::boost::assign::list_of
+                                                                                    (::gdcm::Tag(0x0018, 0x4000)) //Acquisition Comments
+                                                                                    (::gdcm::Tag(0x0040, 0x0555)) //Acquisition Context Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x0022)) //Acquisition Date
+                                                                                    (::gdcm::Tag(0x0008, 0x002A)) //Acquisition DateTime
+                                                                                    (::gdcm::Tag(0x0018, 0x1400)) //Acquisition Device Processing Description
+                                                                                    (::gdcm::Tag(0x0018, 0x9424)) //Acquisition Protocol Description
+                                                                                    (::gdcm::Tag(0x0008, 0x0032)) //Acquisition Time
+                                                                                    (::gdcm::Tag(0x0040, 0x4035)) //Actual Human Performers Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x21B0)) //Additional Patient’s History
+                                                                                    (::gdcm::Tag(0x0038, 0x0010)) //Admission ID
+                                                                                    (::gdcm::Tag(0x0038, 0x0020)) //Admitting Date
+                                                                                    (::gdcm::Tag(0x0008, 0x1084)) //Admitting Diagnoses Code Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1080)) //Admitting Diagnoses Description
+                                                                                    (::gdcm::Tag(0x0038, 0x0021)) //Admitting Time
+                                                                                    (::gdcm::Tag(0x0000, 0x1000)) //Affected SOP Instance UID
+                                                                                    (::gdcm::Tag(0x0010, 0x2110)) //Allergies
+                                                                                    (::gdcm::Tag(0x4000, 0x0010)) //Arbitrary
+                                                                                    (::gdcm::Tag(0x0040, 0xA078)) //Author Observer Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x1081)) //Branch of Service
+                                                                                    (::gdcm::Tag(0x0018, 0x1007)) //Cassette ID
+                                                                                    (::gdcm::Tag(0x0040, 0x0280)) //Comments on Performed Procedure Step
+                                                                                    (::gdcm::Tag(0x0040, 0x3001)) //Confidentiality Constraint on Patient Data Description
+                                                                                    (::gdcm::Tag(0x0070, 0x0086)) //Content Creator’s Identification Code Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0xA730)) //Content Sequence
+                                                                                    (::gdcm::Tag(0x0018, 0xA003)) //Contribution Description
+                                                                                    (::gdcm::Tag(0x0010, 0x2150)) //Country of Residence
+                                                                                    (::gdcm::Tag(0x0038, 0x0300)) //Current Patient Location
+                                                                                    (::gdcm::Tag(0x0008, 0x0025)) //Curve Date
+                                                                                    (::gdcm::Tag(0x0008, 0x0035)) //Curve Time
+                                                                                    (::gdcm::Tag(0x0040, 0xA07C)) //Custodial Organization Sequence
+                                                                                    (::gdcm::Tag(0xFFFC, 0xFFFC)) //Data Set Trailing Padding
+                                                                                    (::gdcm::Tag(0x0008, 0x2111)) //Derivation Description
+                                                                                    (::gdcm::Tag(0x0018, 0x700A)) //Detector ID
+                                                                                    (::gdcm::Tag(0x0018, 0x1000)) //Device Serial Number
+                                                                                    (::gdcm::Tag(0x0400, 0x0100)) //Digital Signature UID
+                                                                                    (::gdcm::Tag(0xFFFA, 0xFFFA)) //Digital Signatures Sequence
+                                                                                    (::gdcm::Tag(0x0038, 0x0040)) //Discharge Diagnosis Description
+                                                                                    (::gdcm::Tag(0x4008, 0x011A)) //Distribution Address
+                                                                                    (::gdcm::Tag(0x4008, 0x0119)) //Distribution Name
+                                                                                    (::gdcm::Tag(0x0010, 0x2160)) //Ethnic Group
+                                                                                    (::gdcm::Tag(0x0020, 0x9158)) //Frame Comments
+                                                                                    (::gdcm::Tag(0x0018, 0x1008)) //Gantry ID
+                                                                                    (::gdcm::Tag(0x0018, 0x1005)) //Generator ID
+                                                                                    (::gdcm::Tag(0x0040, 0x4037)) //Human Performers Name
+                                                                                    (::gdcm::Tag(0x0040, 0x4036)) //Human Performers Organization
+                                                                                    (::gdcm::Tag(0x0088, 0x0200)) //Icon Image Sequence(see Note 12
+                                                                                    (::gdcm::Tag(0x0008, 0x4000)) //Identifying Comments
+                                                                                    (::gdcm::Tag(0x0020, 0x4000)) //Image Comments
+                                                                                    (::gdcm::Tag(0x0028, 0x4000)) //Image Presentation Comments
+                                                                                    (::gdcm::Tag(0x0040, 0x2400)) //Imaging Service Request Comments
+                                                                                    (::gdcm::Tag(0x4008, 0x0300)) //Impressions
+                                                                                    (::gdcm::Tag(0x0008, 0x0081)) //Institution Address
+                                                                                    (::gdcm::Tag(0x0008, 0x0082)) //Institution Code Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x0080)) //Institution Name
+                                                                                    (::gdcm::Tag(0x0008, 0x1040)) //Institutional Department Name
+                                                                                    (::gdcm::Tag(0x0010, 0x1050)) //Insurance Plan Identification
+                                                                                    (::gdcm::Tag(0x0040, 0x1011)) //Intended Recipients of Results Identification Sequence
+                                                                                    (::gdcm::Tag(0x4008, 0x0111)) //Interpretation Approver Sequence
+                                                                                    (::gdcm::Tag(0x4008, 0x010C)) //Interpretation Author
+                                                                                    (::gdcm::Tag(0x4008, 0x0115)) //Interpretation Diagnosis Description
+                                                                                    (::gdcm::Tag(0x4008, 0x0202)) //Interpretation ID Issuer
+                                                                                    (::gdcm::Tag(0x4008, 0x0102)) //Interpretation Recorder
+                                                                                    (::gdcm::Tag(0x4008, 0x010B)) //Interpretation Text
+                                                                                    (::gdcm::Tag(0x4008, 0x010A)) //Interpretation Transcriber
+                                                                                    (::gdcm::Tag(0x0038, 0x0011)) //Issuer of Admission ID
+                                                                                    (::gdcm::Tag(0x0010, 0x0021)) //Issuer of Patient ID
+                                                                                    (::gdcm::Tag(0x0038, 0x0061)) //Issuer of Service Episode ID
+                                                                                    (::gdcm::Tag(0x0010, 0x21D0)) //Last Menstrual Date
+                                                                                    (::gdcm::Tag(0x0400, 0x0404)) //MAC
+                                                                                    (::gdcm::Tag(0x0010, 0x2000)) //Medical Alerts
+                                                                                    (::gdcm::Tag(0x0010, 0x1090)) //Medical Record Locator
+                                                                                    (::gdcm::Tag(0x0010, 0x1080)) //Military Rank
+                                                                                    (::gdcm::Tag(0x0400, 0x0550)) //Modified Attributes Sequence
+                                                                                    (::gdcm::Tag(0x0020, 0x3406)) //Modified Image Description
+                                                                                    (::gdcm::Tag(0x0020, 0x3401)) //Modifying Device ID
+                                                                                    (::gdcm::Tag(0x0020, 0x3404)) //Modifying Device Manufacturer
+                                                                                    (::gdcm::Tag(0x0008, 0x1060)) //Name of Physician(s Reading Study
+                                                                                    (::gdcm::Tag(0x0040, 0x1010)) //Names of Intended Recipient of Results
+                                                                                    (::gdcm::Tag(0x0010, 0x2180)) //Occupation
+                                                                                    (::gdcm::Tag(0x0008, 0x1072)) //Operators’ Identification Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1070)) //Operators’ Name
+                                                                                    (::gdcm::Tag(0x0400, 0x0561)) //Original Attributes Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0x2010)) //Order Callback Phone Number
+                                                                                    (::gdcm::Tag(0x0040, 0x2008)) //Order Entered By
+                                                                                    (::gdcm::Tag(0x0040, 0x2009)) //Order Enterer Location
+                                                                                    (::gdcm::Tag(0x0010, 0x1000)) //Other Patient IDs
+                                                                                    (::gdcm::Tag(0x0010, 0x1002)) //Other Patient IDs Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x1001)) //Other Patient Names
+                                                                                    (::gdcm::Tag(0x0008, 0x0024)) //Overlay Date
+                                                                                    (::gdcm::Tag(0x0008, 0x0034)) //Overlay Time
+                                                                                    (::gdcm::Tag(0x0040, 0xA07A)) //Participant Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x1040)) //Patient Address
+                                                                                    (::gdcm::Tag(0x0010, 0x4000)) //Patient Comments
+                                                                                    (::gdcm::Tag(0x0010, 0x2203)) //Patient Sex Neutered (X/Z)
+                                                                                    (::gdcm::Tag(0x0038, 0x0500)) //Patient State
+                                                                                    (::gdcm::Tag(0x0040, 0x1004)) //Patient Transport Arrangements
+                                                                                    (::gdcm::Tag(0x0010, 0x1010)) //Patient’s Age
+                                                                                    (::gdcm::Tag(0x0010, 0x1005)) //Patient’s Birth Name
+                                                                                    (::gdcm::Tag(0x0010, 0x0032)) //Patient’s Birth Time
+                                                                                    (::gdcm::Tag(0x0038, 0x0400)) //Patient’s Institution Residence
+                                                                                    (::gdcm::Tag(0x0010, 0x0050)) //Patient’s Insurance Plan Code Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x1060)) //Patient’s Mother’s Birth Name
+                                                                                    (::gdcm::Tag(0x0010, 0x0101)) //Patient’s Primary Language Code Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x0102)) //Patient’s Primary Language Modifier Code Sequence
+                                                                                    (::gdcm::Tag(0x0010, 0x21F0)) //Patient’s Religious Preference
+                                                                                    (::gdcm::Tag(0x0010, 0x1020)) //Patient’s Size
+                                                                                    (::gdcm::Tag(0x0010, 0x2154)) //Patient’s Telephone Number
+                                                                                    (::gdcm::Tag(0x0010, 0x1030)) //Patient’s Weight
+                                                                                    (::gdcm::Tag(0x0040, 0x0243)) //Performed Location
+                                                                                    (::gdcm::Tag(0x0040, 0x0254)) //Performed Procedure Step Description
+                                                                                    (::gdcm::Tag(0x0040, 0x0253)) //Performed Procedure Step ID
+                                                                                    (::gdcm::Tag(0x0040, 0x0244)) //Performed Procedure Step Start Date
+                                                                                    (::gdcm::Tag(0x0040, 0x0245)) //Performed Procedure Step Start Time
+                                                                                    (::gdcm::Tag(0x0040, 0x0241)) //Performed Station AE Title
+                                                                                    (::gdcm::Tag(0x0040, 0x4030)) //Performed Station Geographic Location Code Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0x0242)) //Performed Station Name
+                                                                                    (::gdcm::Tag(0x0040, 0x0248)) //Performed Station Name Code Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1052)) //Performing Physicians’ Identification Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1050)) //Performing Physicians’ Name
+                                                                                    (::gdcm::Tag(0x0040, 0x1102)) //Person Address
+                                                                                    (::gdcm::Tag(0x0040, 0x1103)) //Person Telephone Numbers
+                                                                                    (::gdcm::Tag(0x4008, 0x0114)) //Physician Approving Interpretation
+                                                                                    (::gdcm::Tag(0x0008, 0x1062)) //Physician Reading Study Identification Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1048)) //Physician(s Record
+                                                                                    (::gdcm::Tag(0x0008, 0x1049)) //Physician(s of Record Identification Sequence
+                                                                                    (::gdcm::Tag(0x0018, 0x1004)) //Plate ID
+                                                                                    (::gdcm::Tag(0x0040, 0x0012)) //Pre-Medication
+                                                                                    (::gdcm::Tag(0x0010, 0x21C0)) //Pregnancy Status
+                                                                                    (::gdcm::Tag(0x0018, 0x1030)) //Protocol Name (X/D)
+                                                                                    (::gdcm::Tag(0x0040, 0x2001)) //Reason for Imaging Service Request
+                                                                                    (::gdcm::Tag(0x0032, 0x1030)) //Reason for Study
+                                                                                    (::gdcm::Tag(0x0400, 0x0402)) //Referenced Digital Signature Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1140)) //Referenced Image Sequence (X/Z/U*)
+                                                                                    (::gdcm::Tag(0x0038, 0x1234)) //Referenced Patient Alias Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1120)) //Referenced Patient Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1111)) //Referenced Performed Procedure Step Sequence (X/Z/D)
+                                                                                    (::gdcm::Tag(0x0400, 0x0403)) //Referenced SOP Instance MAC Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x1110)) //Referenced Study Sequence (X/Z)
+                                                                                    (::gdcm::Tag(0x0008, 0x0092)) //Referring Physician’s Address
+                                                                                    (::gdcm::Tag(0x0008, 0x0096)) //Referring Physician’s Identification Sequence
+                                                                                    (::gdcm::Tag(0x0008, 0x0094)) //Referring Physician’s Telephone Numbers
+                                                                                    (::gdcm::Tag(0x0010, 0x2152)) //Region of Residence
+                                                                                    (::gdcm::Tag(0x0040, 0x0275)) //Request Attributes Sequence
+                                                                                    (::gdcm::Tag(0x0032, 0x1070)) //Requested Contrast Agent
+                                                                                    (::gdcm::Tag(0x0040, 0x1400)) //Requested Procedure Comments
+                                                                                    (::gdcm::Tag(0x0032, 0x1060)) //Requested Procedure Description (X/Z)
+                                                                                    (::gdcm::Tag(0x0040, 0x1001)) //Requested Procedure ID
+                                                                                    (::gdcm::Tag(0x0040, 0x1005)) //Requested Procedure Location
+                                                                                    (::gdcm::Tag(0x0032, 0x1032)) //Requesting Physician
+                                                                                    (::gdcm::Tag(0x0032, 0x1033)) //Requesting Service
+                                                                                    (::gdcm::Tag(0x0010, 0x2299)) //Responsible Organization
+                                                                                    (::gdcm::Tag(0x0010, 0x2297)) //Responsible Person
+                                                                                    (::gdcm::Tag(0x4008, 0x4000)) //Results Comments
+                                                                                    (::gdcm::Tag(0x4008, 0x0118)) //Results Distribution List Sequence
+                                                                                    (::gdcm::Tag(0x4008, 0x0042)) //Results ID Issuer
+                                                                                    (::gdcm::Tag(0x300E, 0x0008)) //Reviewer Name (X/Z)
+                                                                                    (::gdcm::Tag(0x0040, 0x4034)) //Scheduled Human Performers Sequence
+                                                                                    (::gdcm::Tag(0x0038, 0x001E)) //Scheduled Patient Institution Residence
+                                                                                    (::gdcm::Tag(0x0040, 0x000B)) //Scheduled Performing Physician Identification Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0x0006)) //Scheduled Performing Physician Name
+                                                                                    (::gdcm::Tag(0x0040, 0x0004)) //Scheduled Procedure Step End Date
+                                                                                    (::gdcm::Tag(0x0040, 0x0005)) //Scheduled Procedure Step End Time
+                                                                                    (::gdcm::Tag(0x0040, 0x0007)) //Scheduled Procedure Step Description
+                                                                                    (::gdcm::Tag(0x0040, 0x0011)) //Scheduled Procedure Step Location
+                                                                                    (::gdcm::Tag(0x0040, 0x0002)) //Scheduled Procedure Step Start Date
+                                                                                    (::gdcm::Tag(0x0040, 0x0003)) //Scheduled Procedure Step Start Time
+                                                                                    (::gdcm::Tag(0x0040, 0x0001)) //Scheduled Station AE Title
+                                                                                    (::gdcm::Tag(0x0040, 0x4027)) //Scheduled Station Geographic Location Code Sequence
+                                                                                    (::gdcm::Tag(0x0040, 0x0010)) //Scheduled Station Name
+                                                                                    (::gdcm::Tag(0x0040, 0x4025)) //Scheduled Station Name Code Sequence
+                                                                                    (::gdcm::Tag(0x0032, 0x1020)) //Scheduled Study Location
+                                                                                    (::gdcm::Tag(0x0032, 0x1021)) //Scheduled Study Location AE Title
+                                                                                    (::gdcm::Tag(0x0008, 0x0021)) //Series Date (X/D)
+                                                                                    (::gdcm::Tag(0x0008, 0x0031)) //Series Time (X/D)
+                                                                                    (::gdcm::Tag(0x0038, 0x0062)) //Service Episode Description
+                                                                                    (::gdcm::Tag(0x0038, 0x0060)) //Service Episode ID
+                                                                                    (::gdcm::Tag(0x0010, 0x21A0)) //Smoking Status
+                                                                                    (::gdcm::Tag(0x0008, 0x2112)) //Source Image Sequence (X/Z/U*)
+                                                                                    (::gdcm::Tag(0x0038, 0x0050)) //Special Needs
+                                                                                    (::gdcm::Tag(0x0008, 0x1010)) //Station Name (X/Z/D)
+                                                                                    (::gdcm::Tag(0x0032, 0x4000)) //Study Comments
+                                                                                    (::gdcm::Tag(0x0008, 0x1030)) //Study Description
+                                                                                    (::gdcm::Tag(0x0032, 0x0012)) //Study ID Issuer
+                                                                                    (::gdcm::Tag(0x4000, 0x4000)) //Text Comments
+                                                                                    (::gdcm::Tag(0x2030, 0x0020)) //Text String
+                                                                                    (::gdcm::Tag(0x0008, 0x0201)) //Timezone Offset From UTC
+                                                                                    (::gdcm::Tag(0x0088, 0x0910)) //Topic Author
+                                                                                    (::gdcm::Tag(0x0088, 0x0912)) //Topic Key Words
+                                                                                    (::gdcm::Tag(0x0088, 0x0906)) //Topic Subject
+                                                                                    (::gdcm::Tag(0x0088, 0x0904)) //Topic Title
+                                                                                    (::gdcm::Tag(0x0040, 0xA027)) //Verifying Organization
+                                                                                    (::gdcm::Tag(0x0038, 0x4000)) //Visit Comments
+;
+
+const DicomAnonymizer::TagContainerType DicomAnonymizer::s_ACTION_CODE_K_TAGS = ::boost::assign::list_of
+                                                                                    (::gdcm::Tag(0x0008, 0x103E)) //Series Description (action code should probably be X for anonymity reasons)
+;
+
+const DicomAnonymizer::TagContainerType DicomAnonymizer::s_ACTION_CODE_C_TAGS;
+
+const DicomAnonymizer::TagContainerType DicomAnonymizer::s_ACTION_CODE_U_TAGS = ::boost::assign::list_of
+                                                                                    (::gdcm::Tag(0x0020, 0x9161)) //Concatenation UID
+                                                                                    (::gdcm::Tag(0x0008, 0x010D)) //Context Group Extension Creator UID
+                                                                                    (::gdcm::Tag(0x0008, 0x9123)) //Creator Version UID
+                                                                                    (::gdcm::Tag(0x0018, 0x1002)) //Device UID
+                                                                                    (::gdcm::Tag(0x0020, 0x9164)) //Dimension Organization UID
+                                                                                    (::gdcm::Tag(0x300A, 0x0013)) //Dose Reference UID
+                                                                                    (::gdcm::Tag(0x0008, 0x0058)) //Failed SOP Instance UID List
+                                                                                    (::gdcm::Tag(0x0070, 0x031A)) //Fiducial UID
+                                                                                    (::gdcm::Tag(0x0020, 0x0052)) //Frame of Reference UID
+                                                                                    (::gdcm::Tag(0x0008, 0x0014)) //Instance Creator UID
+                                                                                    (::gdcm::Tag(0x0008, 0x3010)) //Irradiation Event UID
+                                                                                    (::gdcm::Tag(0x0028, 0x1214)) //Large Palette Color Lookup Table UID
+                                                                                    (::gdcm::Tag(0x0002, 0x0003)) //Media Storage SOP Instance UID
+                                                                                    (::gdcm::Tag(0x0028, 0x1199)) //Palette Color Lookup Table UID
+                                                                                    (::gdcm::Tag(0x3006, 0x0024)) //Referenced Frame of Reference UID
+                                                                                    (::gdcm::Tag(0x0040, 0x4023)) //Referenced General Purpose Scheduled Procedure Step Transaction UID
+                                                                                    (::gdcm::Tag(0x0008, 0x1155)) //Referenced SOP Instance UID
+                                                                                    (::gdcm::Tag(0x0004, 0x1511)) //Referenced SOP Instance UID in File
+                                                                                    (::gdcm::Tag(0x3006, 0x00C2)) //Related Frame of Reference UID
+                                                                                    (::gdcm::Tag(0x0000, 0x1001)) //Requested SOP Instance UID
+                                                                                    (::gdcm::Tag(0x0020, 0x000E)) //Series Instance UID
+                                                                                    (::gdcm::Tag(0x0008, 0x0018)) //SOP Instance UID
+                                                                                    (::gdcm::Tag(0x0088, 0x0140)) //Storage Media File-set UID
+                                                                                    (::gdcm::Tag(0x0020, 0x000D)) //Study Instance UID
+                                                                                    (::gdcm::Tag(0x0020, 0x0200)) //Synchronization Frame of Reference UID
+                                                                                    (::gdcm::Tag(0x0040, 0xDB0D)) //Template Extension Creator UID
+                                                                                    (::gdcm::Tag(0x0040, 0xDB0C)) //Template Extension Organization UID
+                                                                                    (::gdcm::Tag(0x0008, 0x1195)) //Transaction UID
+                                                                                    (::gdcm::Tag(0x0040, 0xA124)) //UID
+;
+
+DicomAnonymizer::DicomAnonymizer() :
+    m_publicDictionary(::gdcm::Global::GetInstance().GetDicts().GetPublicDict()),
+    m_observer(::fwJobs::Observer::New("Anonymization process")),
+    m_archiving(false),
+    m_fileIndex(0),
+    m_actionCodeDTags(s_ACTION_CODE_D_TAGS),
+    m_actionCodeZTags(s_ACTION_CODE_Z_TAGS),
+    m_actionCodeXTags(s_ACTION_CODE_X_TAGS),
+    m_actionCodeKTags(s_ACTION_CODE_K_TAGS),
+    m_actionCodeCTags(s_ACTION_CODE_C_TAGS),
+    m_actionCodeUTags(s_ACTION_CODE_U_TAGS)
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomAnonymizer::~DicomAnonymizer()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::anonymize(const ::boost::filesystem::path& dirPath)
+{
+    m_archiving = false;
+    m_observer->setTotalWorkUnits(100);
+    this->anonymizationProcess(dirPath);
+    m_observer->finish();
+}
+
+void moveDirectory(::boost::filesystem::path input, ::boost::filesystem::path output)
+{
+    ::boost::system::error_code ec;
+    ::boost::filesystem::copy_directory(input, output, ec);
+    FW_RAISE_IF("copy_directory " << input.string() << " " << output.string()
+                                  << " error : " << ec.message(), ec.value());
+
+    ::boost::filesystem::directory_iterator it(input);
+    ::boost::filesystem::directory_iterator end;
+    ::boost::filesystem::permissions(output, ::boost::filesystem::owner_all, ec);
+    OSLM_ERROR_IF("set " << output.string() << " permission error : " << ec.message(), ec.value());
+
+    for(; it != end; ++it)
+    {
+        ::boost::filesystem::path dest = output / it->path().filename();
+        if(::boost::filesystem::is_directory(*it))
+        {
+            moveDirectory(*it, dest);
+        }
+        else
+        {
+            ::boost::filesystem::rename(*it, dest, ec);
+            FW_RAISE_IF(
+                "rename " << it->path().string() << " " << dest.string() << " error : " << ec.message(),
+                ec.value());
+        }
+
+        ::boost::filesystem::permissions(dest, ::boost::filesystem::owner_all, ec);
+        OSLM_ERROR_IF("set " << dest.string() << " permission error : " << ec.message(), ec.value());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::removeAnonymizeTag(const ::gdcm::Tag& tag)
+{
+    m_actionCodeDTags.erase(tag);
+    m_actionCodeZTags.erase(tag);
+    m_actionCodeXTags.erase(tag);
+    m_actionCodeKTags.erase(tag);
+    m_actionCodeCTags.erase(tag);
+    m_actionCodeUTags.erase(tag);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::anonymizationProcess(const ::boost::filesystem::path& dirPath)
+{
+    // Create temporary directory
+    ::boost::filesystem::path tmpPath = ::fwTools::System::getTemporaryFolder("DicomAnonymizer");
+    tmpPath                          /= "tmp";
+
+    // Doesn't use ::boost::filesystem::rename because of potential issues when moving folders across volumes
+    moveDirectory(dirPath, tmpPath);
+
+    ::boost::system::error_code ec;
+
+    ::boost::filesystem::directory_iterator it(dirPath);
+    ::boost::filesystem::directory_iterator end;
+
+    for(; it != end; ++it)
+    {
+        if(::boost::filesystem::is_directory(*it))
+        {
+            ::boost::filesystem::remove_all((*it), ec);
+            FW_RAISE_IF("remove_all " + dirPath.string() + " error : " + ec.message(), ec.value());
+        }
+    }
+
+    std::vector<std::string> dicomFiles;
+    ::fwGdcmIO::helper::DicomSearch::searchRecursively(tmpPath, dicomFiles, false);
+
+    unsigned int fileIndex = 0;
+    for(std::string file: dicomFiles)
+    {
+        if(m_observer->cancelRequested())
+        {
+            break;
+        }
+
+        std::ifstream inStream(file, std::ios::binary);
+
+        std::stringstream ss;
+        ss << "im" << std::setfill('0') << std::setw(5) << fileIndex++;
+
+        std::ofstream outStream((dirPath / ss.str()).string(), std::ios::binary | std::ios::trunc);
+
+        this->anonymize(inStream, outStream);
+
+        std::uint64_t progress = static_cast<std::uint64_t>(
+            ((m_archiving) ? 50 : 100) * static_cast<float>(fileIndex) / static_cast<float>(dicomFiles.size()));
+        m_observer->doneWork(progress);
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::resetIndex()
+{
+    m_fileIndex = 0;
+}
+
+//------------------------------------------------------------------------------
+
+unsigned int DicomAnonymizer::getNextIndex()
+{
+    return m_fileIndex++;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::anonymize(std::istream& inputStream, std::ostream& outputStream)
+{
+    // File Reader
+    ::gdcm::Reader reader;
+    reader.SetStream(inputStream);
+    FW_RAISE_IF("Unable to anonymize (file read failed)", !reader.Read());
+
+    // String filter
+    m_stringFilter.SetFile(reader.GetFile());
+
+    // Objects used to scan groups of elements
+    ::gdcm::Tag tag;
+    ::gdcm::DataElement dataElement;
+    const ::gdcm::File& datasetFile = reader.GetFile();
+    ::gdcm::DataSet dataset = datasetFile.GetDataSet();
+
+    m_anonymizer.SetFile( reader.GetFile() );
+
+    m_anonymizer.RemoveGroupLength();
+    m_anonymizer.RemoveRetired();
+
+    for(ExceptionTagMapType::value_type exception: m_exceptionTagMap)
+    {
+        m_anonymizer.Replace(exception.first, exception.second.c_str());
+    }
+
+    ::boost::range::for_each(m_actionCodeDTags, [this](const ::gdcm::Tag& tag)
+            {
+                this->applyActionCodeD(tag);
+            });
+    ::boost::range::for_each(m_actionCodeZTags, [this](const ::gdcm::Tag& tag)
+            {
+                this->applyActionCodeZ(tag);
+            });
+    ::boost::range::for_each(m_actionCodeXTags, [this](const ::gdcm::Tag& tag)
+            {
+                this->applyActionCodeX(tag);
+            });
+    ::boost::range::for_each(m_actionCodeKTags, [this](const ::gdcm::Tag& tag)
+            {
+                this->applyActionCodeK(tag);
+            });
+    ::boost::range::for_each(m_actionCodeCTags, [this](const ::gdcm::Tag& tag)
+            {
+                this->applyActionCodeC(tag);
+            });
+    ::boost::range::for_each(m_actionCodeUTags, [this](const ::gdcm::Tag& tag)
+            {
+                this->applyActionCodeU(tag);
+            });
+
+    auto applyActionCodeXWithException = [this](const ::gdcm::Tag& tag)
+                                         {
+                                             if(m_exceptionTagMap.find(tag) == m_exceptionTagMap.end())
+                                             {
+                                                 this->applyActionCodeX(tag);
+                                             }
+                                         };
+
+    // Curve Data (0x50xx,0xxxxx)
+    dataElement = dataset.FindNextDataElement(::gdcm::Tag(0x5000, 0x0));
+    tag         = dataElement.GetTag();
+    while (((tag.GetGroup() >> 8) & 0xff)  == 0x50 )
+    {
+        applyActionCodeXWithException(tag);    //Curve Data
+        dataElement = dataset.FindNextDataElement(
+            ::gdcm::Tag(tag.GetGroup(), static_cast< uint16_t >(tag.GetElement() + 1)));
+        tag = dataElement.GetTag();
+    }
+
+    // Overlay Comments (0x60xx,0x4000)
+    dataElement = dataset.FindNextDataElement(::gdcm::Tag(0x6000, 0x4000));
+    tag         = dataElement.GetTag();
+    while (((tag.GetGroup() >> 8) & 0xff)  == 0x60 )
+    {
+        if(tag.GetElement() == 0x4000)
+        {
+            applyActionCodeXWithException(tag);
+        }
+        dataElement = dataset.FindNextDataElement(
+            ::gdcm::Tag(static_cast< uint16_t >(tag.GetGroup() + 1), 0x4000));
+        tag = dataElement.GetTag();
+    }
+
+    // Overlay Data (0x60xx,0x3000)
+    dataElement = dataset.FindNextDataElement(::gdcm::Tag(0x6000, 0x3000));
+    tag         = dataElement.GetTag();
+    while (((tag.GetGroup() >> 8) & 0xff)  == 0x60 )
+    {
+        if(tag.GetElement() == 0x3000)
+        {
+            applyActionCodeXWithException(tag);
+        }
+        dataElement = dataset.FindNextDataElement(::gdcm::Tag(static_cast< uint16_t >(tag.GetGroup() + 1), 0x3000));
+        tag         = dataElement.GetTag();
+    }
+
+    m_anonymizer.RemovePrivateTags();   //Private attributes (X)
+
+    // Write file
+    ::gdcm::Writer writer;
+    writer.SetStream(outputStream);
+    writer.SetFile(reader.GetFile());
+
+    FW_RAISE_IF("Unable to anonymize (file write failed)", !writer.Write());
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::addExceptionTag(uint16_t group, uint16_t element, const std::string& value)
+{
+    ::gdcm::Tag tag(group,element);
+
+    m_exceptionTagMap[tag] = value;
+
+    m_actionCodeDTags.erase(tag);
+    m_actionCodeZTags.erase(tag);
+    m_actionCodeXTags.erase(tag);
+    m_actionCodeKTags.erase(tag);
+    m_actionCodeCTags.erase(tag);
+    m_actionCodeUTags.erase(tag);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::applyActionCodeD(const ::gdcm::Tag& tag)
+{
+    // Sequence of Items
+    if(m_publicDictionary.GetDictEntry(tag).GetVR() == ::gdcm::VR::SQ)
+    {
+        m_anonymizer.Empty(tag);
+    }
+    else
+    {
+        this->generateDummyValue(tag);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::applyActionCodeZ(const ::gdcm::Tag& tag)
+{
+    this->applyActionCodeD(tag);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::applyActionCodeX(const ::gdcm::Tag& tag)
+{
+    m_anonymizer.Remove(tag);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::applyActionCodeK(const ::gdcm::Tag& tag)
+{
+    // Sequence of Items
+    if(m_publicDictionary.GetDictEntry(tag).GetVR() == ::gdcm::VR::SQ)
+    {
+        m_anonymizer.Empty(tag);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::applyActionCodeC(const ::gdcm::Tag& tag)
+{
+    SLM_FATAL(
+        "Basic profile \"C\" is not supported yet : Only basic profile is supported by the current implementation.");
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::applyActionCodeU(const ::gdcm::Tag& tag)
+{
+    const std::string oldUID = m_stringFilter.ToString(tag);
+    if(oldUID.empty())
+    {
+        m_anonymizer.Replace(tag, GENERATOR.Generate());
+    }
+    else
+    {
+        std::string uid = m_uidMap[oldUID];
+        if(uid.empty())
+        {
+            uid              = GENERATOR.Generate();
+            m_uidMap[oldUID] = uid;
+        }
+        m_anonymizer.Replace(tag, uid.c_str());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::generateDummyValue(const ::gdcm::Tag& tag)
+{
+
+    switch (m_publicDictionary.GetDictEntry(tag).GetVR())
+    {
+        case ::gdcm::VR::AE:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::AS:
+        {
+            m_anonymizer.Replace(tag, "000Y");
+            break;
+        }
+        case ::gdcm::VR::AT:
+        {
+            m_anonymizer.Replace(tag, "00H,00H,00H,00H");
+            break;
+        }
+        case ::gdcm::VR::CS:
+        {
+            //Patient’s Sex
+            if(tag == ::gdcm::Tag(0x0010, 0x0040))
+            {
+                m_anonymizer.Replace(tag, "O");
+            }
+            else
+            {
+                m_anonymizer.Replace(tag, "ANONYMIZED");
+            }
+            break;
+        }
+        case ::gdcm::VR::DA:
+        {
+            m_anonymizer.Replace(tag, "19700101");
+            break;
+        }
+        case ::gdcm::VR::DS:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::DT:
+        {
+            m_anonymizer.Replace(tag, "19700101000000.000000");
+            break;
+        }
+        case ::gdcm::VR::FD:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::FL:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::IS:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::LO:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::LT:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::OB:
+        {
+            m_anonymizer.Replace(tag, "00H00H");
+            break;
+        }
+        case ::gdcm::VR::OF:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::OW:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::PN:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED^ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::SH:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::SL:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::SQ:
+        {
+            m_anonymizer.Empty(tag);
+            break;
+        }
+        case ::gdcm::VR::SS:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::ST:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::TM:
+        {
+            m_anonymizer.Replace(tag, "000000.000000");
+            break;
+        }
+        case ::gdcm::VR::UI:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::UL:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::UN:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        case ::gdcm::VR::US:
+        {
+            m_anonymizer.Replace(tag, "0");
+            break;
+        }
+        case ::gdcm::VR::UT:
+        {
+            m_anonymizer.Replace(tag, "ANONYMIZED");
+            break;
+        }
+        default:
+        {
+            SLM_FATAL("Unknown value representation.");
+            break;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizer::copyDirectory(::boost::filesystem::path input, ::boost::filesystem::path output)
+{
+    ::boost::system::error_code ec;
+    ::boost::filesystem::copy_directory(input, output, ec);
+    FW_RAISE_IF("copy_directory " << input.string() << " " << output.string() << " error : " << ec.message(),
+                ec.value());
+
+    ::boost::filesystem::directory_iterator it(input);
+    ::boost::filesystem::directory_iterator end;
+
+    ec.clear();
+    ::boost::filesystem::permissions(output, ::boost::filesystem::owner_all, ec);
+    SLM_ERROR_IF("set " + output.string() + " permission error : " + ec.message(), ec.value());
+
+    for(; it != end; ++it)
+    {
+        ::boost::filesystem::path dest = output / it->path().filename();
+        if(::boost::filesystem::is_directory(*it))
+        {
+            DicomAnonymizer::copyDirectory(*it, dest);
+        }
+        else
+        {
+            // Use stream instead of boost::copy_file (Unix c++11 issue)
+            ::boost::filesystem::ifstream inStream(it->path(), std::ios::binary);
+            FW_RAISE_IF("Unable to read file :" << it->path().string(), !inStream.good());
+            ::boost::filesystem::ofstream outStream(dest, std::ios::binary);
+            FW_RAISE_IF("Unable to write file :" << dest.string(), !outStream.good());
+
+            outStream << inStream.rdbuf();
+
+            inStream.close();
+            outStream.close();
+        }
+
+        ec.clear();
+        ::boost::filesystem::permissions(dest, ::boost::filesystem::owner_all, ec);
+        SLM_ERROR_IF("set " + dest.string() + " permission error : " + ec.message(), ec.value());
+    }
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwJobs::IJob) DicomAnonymizer::getJob() const
+{
+    return m_observer;
+}
+
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomData.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomData.cpp
new file mode 100644
index 0000000..9f15f7c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomData.cpp
@@ -0,0 +1,256 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwTools/Dispatcher.hpp>
+#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
+#include <fwTools/IntrinsicTypes.hpp>
+
+#include <gdcmDicts.h>
+#include <gdcmGlobal.h>
+#include <gdcmPhotometricInterpretation.h>
+#include <gdcmPixelFormat.h>
+#include <gdcmRescaler.h>
+#include <gdcmScanner.h>
+
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/bimap/bimap.hpp>
+#include <boost/foreach.hpp>
+
+#include <cmath>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+//------------------------------------------------------------------------------
+
+struct TypeOrderer
+{
+    bool operator()(const ::fwTools::Type& t1, const ::fwTools::Type& t2) const
+    {
+        return t1.string() < t2.string();
+    }
+};
+
+//------------------------------------------------------------------------------
+
+typedef ::boost::bimaps::bimap< ::boost::bimaps::set_of< ::fwTools::Type, TypeOrderer >,
+                                ::boost::bimaps::set_of< gdcm::PixelFormat::ScalarType > > TypeTranslator;
+
+//------------------------------------------------------------------------------
+
+TypeTranslator PixelTypeTranslation = ::boost::assign::list_of< TypeTranslator::relation >
+                                          (::fwTools::Type::create("uint8"),  ::gdcm::PixelFormat::UINT8)
+                                          (::fwTools::Type::create("int8"),   ::gdcm::PixelFormat::INT8)
+//        ( ::fwTools::Type::create("XXX"), ::gdcm::PixelFormat::UINT12 )   // Unsupported by VTK Render
+//        ( ::fwTools::Type::create("XXX"), ::gdcm::PixelFormat::INT12 )    // Unsupported by VTK Render
+                                          (::fwTools::Type::create("uint16"), ::gdcm::PixelFormat::UINT16)
+                                          (::fwTools::Type::create("int16"),  ::gdcm::PixelFormat::INT16)
+                                          (::fwTools::Type::create("uint32"), ::gdcm::PixelFormat::UINT32)
+                                          (::fwTools::Type::create("int32"),  ::gdcm::PixelFormat::INT32)
+//        ( ::fwTools::Type::create("XXX"), ::gdcm::PixelFormat::FLOAT16 )  // Unsupported by VTK Render
+                                          (::fwTools::Type::create("float"),  ::gdcm::PixelFormat::FLOAT32)
+                                          (::fwTools::Type::create("double"), ::gdcm::PixelFormat::FLOAT64);
+
+//------------------------------------------------------------------------------
+
+void DicomData::setSQ(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence, const ::gdcm::Tag& tag,
+                      ::gdcm::DataSet& dataset)
+{
+    if (sequence->GetNumberOfItems() > 0)
+    {
+        // Create the sequence of items
+        ::gdcm::DataElement dataElement(tag);
+        dataElement.SetVR(::gdcm::VR::SQ);
+        dataElement.SetValue(*sequence);
+        dataElement.SetVL(sequence->GetLength());
+
+        // Insert or replace the sequence of items
+        dataset.Insert(dataElement);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+const ::fwTools::Type DicomData::getPixelType(const ::gdcm::PixelFormat& pixFormat)
+{
+    SLM_ASSERT("ScalarType '" << pixFormat.GetScalarType() << "' not found in PixelTypeTranslation",
+               PixelTypeTranslation.right.find( pixFormat.GetScalarType() )!= PixelTypeTranslation.right.end() );
+
+    return PixelTypeTranslation.right.at(pixFormat.GetScalarType());
+}
+
+//------------------------------------------------------------------------------
+
+const ::fwTools::Type DicomData::getPixelType(const ::gdcm::Image& image)
+{
+    const ::gdcm::PixelFormat& pixelFormat = image.GetPixelFormat();
+    SLM_ASSERT("ScalarType '" << pixelFormat.GetScalarType() << "' not found in PixelTypeTranslation",
+               PixelTypeTranslation.right.find( pixelFormat.GetScalarType() )!= PixelTypeTranslation.right.end() );
+
+    return PixelTypeTranslation.right.at(pixelFormat.GetScalarType());
+}
+
+//------------------------------------------------------------------------------
+
+const gdcm::PixelFormat DicomData::getPixelType(const ::fwData::Image::csptr image)
+{
+    const ::gdcm::PixelFormat::ScalarType scalarType = PixelTypeTranslation.left.at(image->getType());
+    SLM_ASSERT("ScalarType '" << scalarType << "' not found in PixelTypeTranslation",
+               PixelTypeTranslation.right.find( scalarType )!= PixelTypeTranslation.right.end() );
+
+    return gdcm::PixelFormat(scalarType);
+}
+
+//------------------------------------------------------------------------------
+
+const gdcm::PhotometricInterpretation DicomData::getPhotometricInterpretation(const ::fwData::Image& image)
+{
+    ::gdcm::PhotometricInterpretation pi;
+    size_t components = image.getNumberOfComponents();
+
+    // Attempt a guess (VTK do the same choice)
+    switch (components)
+    {
+        case 1: // It could well be MONOCHROME1
+            pi = ::gdcm::PhotometricInterpretation::MONOCHROME2;
+            break;
+        case 3: // It could well be YBR
+            pi = ::gdcm::PhotometricInterpretation::RGB;
+            break;
+        case 4: // It could well be CMYK
+            pi = ::gdcm::PhotometricInterpretation::ARGB;
+            break;
+        default:
+            SLM_ERROR("Photometric interpretation not found");
+            pi = ::gdcm::PhotometricInterpretation::UNKNOWN;
+            break;
+    }
+
+    return pi;
+}
+
+//------------------------------------------------------------------------------
+
+::gdcm::Surface::VIEWType DicomData::convertToPresentationType(
+    ::fwData::Material::RepresentationType representationMode)
+{
+    switch (representationMode)
+    {
+        case ::fwData::Material::SURFACE:
+            return ::gdcm::Surface::SURFACE;
+            break;
+        case ::fwData::Material::POINT:
+            return ::gdcm::Surface::POINTS;
+            break;
+        case ::fwData::Material::WIREFRAME:
+            return ::gdcm::Surface::WIREFRAME;
+            break;
+        default:
+            SLM_WARN("Representation type not handle (changed to : SURFACE)");
+            return ::gdcm::Surface::SURFACE;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Material::RepresentationType DicomData::convertToRepresentationMode(
+    ::gdcm::Surface::VIEWType presentationType)
+{
+    switch (presentationType)
+    {
+        case ::gdcm::Surface::SURFACE:
+            return ::fwData::Material::SURFACE;
+            break;
+        case ::gdcm::Surface::WIREFRAME:
+            return ::fwData::Material::WIREFRAME;
+            break;
+        case ::gdcm::Surface::POINTS:
+            return ::fwData::Material::POINT;
+            break;
+        default:
+            SLM_WARN("Presentation type not handle (changed to : SURFACE)");
+            return ::fwData::Material::SURFACE;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+const char* DicomData::convertToPresentationTypeString(::fwData::Material::RepresentationType representationMode)
+{
+    switch (representationMode)
+    {
+        case ::fwData::Material::SURFACE:
+            return "SURFACE";
+            break;
+        case ::fwData::Material::POINT:
+            return "POINTS";
+            break;
+        case ::fwData::Material::WIREFRAME:
+            return "WIREFRAME";
+            break;
+        default:
+            SLM_WARN( "Presentation type not handle (changed to : SURFACE)" );
+            return "SURFACE";
+    }
+}
+
+//------------------------------------------------------------------------------
+
+int DicomData::convertPointToFrameNumber(const ::fwData::Image::csptr& image, const ::fwData::Point::sptr& point)
+throw(::fwGdcmIO::exception::Failed)
+{
+    // Retrieve Z spacing
+    double zSpacing = (image->getNumberOfDimensions() > 2) ? (image->getSpacing()[2]) : 1;
+
+    // Retrieve Z coordinate of image origin
+    double zOrigin = (image->getNumberOfDimensions() > 2) ? (image->getOrigin()[2]) : 0;
+
+    // Retrieve Z coordinate
+    double zCoordinate = static_cast<double>(point->getCoord()[2]);
+
+    // Compute frame number
+    unsigned int frameNumber = static_cast<int>(floor((zCoordinate - zOrigin) / zSpacing + 0.5)) + 1;
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Coordinates out of image bounds."),
+                          frameNumber < 1 || frameNumber > image->getSize()[2]);
+
+    return frameNumber;
+}
+
+//------------------------------------------------------------------------------
+
+double DicomData::convertFrameNumberToZCoordinate(const ::fwData::Image::csptr& image, int frameNumber)
+throw(::fwGdcmIO::exception::Failed)
+{
+    // Retrieve Z spacing
+    double zSpacing = (image->getNumberOfDimensions() > 2) ? (image->getSpacing()[2]) : 1;
+
+    // Retrieve Z coordinate of image origin
+    double zOrigin = (image->getNumberOfDimensions() > 2) ? (image->getOrigin()[2]) : 0;
+
+    // Compute coordinate
+    unsigned int frameIndex = (frameNumber-1);
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Coordinates out of image bounds."),
+                          frameIndex >= image->getSize()[2]);
+    double zCoordinate = zOrigin + frameIndex * zSpacing;
+
+    return zCoordinate;
+}
+
+} //namespace helper
+
+} //namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomDir.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomDir.cpp
new file mode 100644
index 0000000..823ddbb
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomDir.cpp
@@ -0,0 +1,224 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomDir.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/exceptionmacros.hpp>
+#include <fwCore/spyLog.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+#include <fwLog/Logger.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/regex.h>
+
+#include <gdcmReader.h>
+#include <gdcmMediaStorage.h>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+::boost::filesystem::path DicomDir::findDicomDir(const ::boost::filesystem::path& root)
+{
+    ::boost::filesystem::path current = root;
+
+    while(::boost::filesystem::exists(current))
+    {
+        ::boost::filesystem::path dicomDirPath = current / "dicomdir";
+        if(::boost::filesystem::exists(dicomDirPath) && !::boost::filesystem::is_directory(dicomDirPath))
+        {
+            return dicomDirPath;
+        }
+
+        dicomDirPath = current / "DICOMDIR";
+        if(::boost::filesystem::exists(dicomDirPath) && !::boost::filesystem::is_directory(dicomDirPath))
+        {
+            return dicomDirPath;
+        }
+
+        current = current.parent_path();
+    }
+
+    return ::boost::filesystem::path();
+
+}
+
+// ----------------------------------------------------------------------------
+
+void DicomDir::retrieveDicomSeries(const ::boost::filesystem::path& dicomdir,
+                                   std::vector< SPTR(::fwMedData::DicomSeries) >& seriesDB,
+                                   const ::fwLog::Logger::sptr logger,
+                                   const SPTR(::fwJobs::Observer)& fileLookupObserver)
+{
+    SLM_ASSERT("You must specify a valid dicomdir.", ::boost::filesystem::exists(dicomdir)
+               && !::boost::filesystem::is_directory(dicomdir));
+
+
+    // Try to read the file
+    ::gdcm::Reader reader;
+    reader.SetFileName(dicomdir.string().c_str());
+    if( !reader.Read() )
+    {
+        return;
+    }
+
+    const ::gdcm::File& gdcmFile   = reader.GetFile();
+    const ::gdcm::DataSet& dataset = gdcmFile.GetDataSet();
+
+    // Check if the file is a DICOMDIR
+    ::gdcm::MediaStorage mediaStorage;
+    mediaStorage.SetFromFile(gdcmFile);
+    if(mediaStorage != ::gdcm::MediaStorage::MediaStorageDirectoryStorage )
+    {
+        SLM_ERROR("This file is not a DICOMDIR");
+        return;
+    }
+
+    // Check the MediaStorageSOPClass
+    const ::gdcm::FileMetaInformation& fileMetaInformation = gdcmFile.GetHeader();
+    const std::string& mediaStorageSOP                     =
+        ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0002, 0x0002 >(fileMetaInformation);
+
+    if (mediaStorageSOP != ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::MediaStorageDirectoryStorage))
+    {
+        SLM_ERROR("This file is not a DICOMDIR");
+        return;
+    }
+
+    // For each root elements
+    typedef std::set<gdcm::DataElement> DataElementSet;
+    typedef DataElementSet::const_iterator ConstIterator;
+
+    unsigned int progress = 0.;
+    unsigned int ptotal   = 0.;
+
+    if(fileLookupObserver)
+    {
+        // Compute total progress
+        for(ConstIterator it = dataset.GetDES().begin(); it != dataset.GetDES().end(); ++it)
+        {
+            // Directory Record Sequence
+            if (it->GetTag() == ::gdcm::Tag(0x0004, 0x1220))
+            {
+                ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = it->GetValueAsSQ();
+
+                ptotal += static_cast<unsigned int>(sequence->GetNumberOfItems());
+            }
+        }
+
+        ptotal = (ptotal == 0) ? 1 : ptotal;
+        fileLookupObserver->setTotalWorkUnits(ptotal);
+    }
+
+    ::boost::filesystem::path root = dicomdir.parent_path();
+
+    std::map < std::string, ::fwMedData::DicomSeries::sptr > dicomSeriesMap;
+    ::fwMedData::DicomSeries::sptr currentSeries = nullptr;
+
+    for(ConstIterator it = dataset.GetDES().begin(); it != dataset.GetDES().end(); ++it)
+    {
+        // Directory Record Sequence
+        if (it->GetTag() == ::gdcm::Tag(0x0004, 0x1220))
+        {
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = it->GetValueAsSQ();
+
+            for(unsigned int index = 1; index <= sequence->GetNumberOfItems(); ++index)
+            {
+                // Retrieve item
+                ::gdcm::Item& item = sequence->GetItem(index);
+
+                // Directory Record Type
+                const std::string& recordType =
+                    ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0004, 0x1430 >(item.GetNestedDataSet());
+
+                // If the record is a series, we select the current series
+                if(recordType == "SERIES")
+                {
+                    const std::string& seriesUID =
+                        DicomData::getTrimmedTagValue< 0x0020, 0x000e >(item.GetNestedDataSet());
+                    if(dicomSeriesMap.find(seriesUID) == dicomSeriesMap.end())
+                    {
+                        ::fwMedData::DicomSeries::sptr series = ::fwMedData::DicomSeries::New();
+                        series->setInstanceUID(seriesUID);
+                        dicomSeriesMap[seriesUID] = series;
+                    }
+
+                    currentSeries = dicomSeriesMap[seriesUID];
+                }
+
+                // It the record is an image, we check the filename
+                else if(recordType == "IMAGE")
+                {
+                    std::string file = DicomData::getTrimmedTagValue< 0x0004, 0x1500 >(item.GetNestedDataSet());
+                    std::replace( file.begin(), file.end(), '\\', '/');
+                    SLM_WARN_IF("Dicom instance doesn't have a referenced file id.", file.empty());
+
+                    const ::boost::filesystem::path path = root / file;
+                    OSLM_WARN_IF("Unable to find path :" << path, !::boost::filesystem::exists(path));
+                    OSLM_WARN_IF("Dicomdir is badly formated. Skipping path :" << path, !currentSeries);
+
+                    if(!currentSeries || file.empty())
+                    {
+                        logger->warning("DICOMDIR file is badly formated. Instances may be missing");
+                    }
+                    else if(::boost::filesystem::exists(path))
+                    {
+                        auto instanceNumber = ::boost::lexical_cast<unsigned int>(
+                            DicomData::getTrimmedTagValue< 0x0020, 0x0013 >(
+                                item.GetNestedDataSet()));
+                        currentSeries->addDicomPath(instanceNumber, path);
+                    }
+                    else
+                    {
+                        logger->warning("Unable to retrieve file :" + path.string() );
+                    }
+                }
+
+                if(fileLookupObserver)
+                {
+                    if(fileLookupObserver->cancelRequested())
+                    {
+                        return;
+                    }
+                    fileLookupObserver->doneWork(++progress);
+                }
+
+            }
+        }
+    }
+
+    if(fileLookupObserver && fileLookupObserver->cancelRequested())
+    {
+        return;
+    }
+
+    for(auto entry: dicomSeriesMap)
+    {
+        auto series = entry.second;
+        auto size   = series->getLocalDicomPaths().size();
+        if(size)
+        {
+            series->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+            series->setNumberOfInstances(size);
+            seriesDB.push_back(series);
+        }
+        else
+        {
+            logger->critical("Unable to retrieve instances for this series : " + series->getInstanceUID());
+        }
+    }
+
+}
+
+// ----------------------------------------------------------------------------
+
+} //helper
+} //fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSearch.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSearch.cpp
new file mode 100644
index 0000000..39ce55b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSearch.cpp
@@ -0,0 +1,132 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomSearch.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwJobs/Observer.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <boost/foreach.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/predicate.hpp>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/regex.hpp>
+
+#include <fstream>
+#include <set>
+#include <string>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+bool isDICOM(const std::string& filepath)
+{
+    std::ifstream ifs( filepath, std::ios::binary );
+    ifs.seekg(128);
+    char DICM[5] = {0};
+    ifs.read(DICM, 4);
+    ifs.close();
+    return strcmp(DICM, "DICM") == 0;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSearch::searchRecursively(const ::boost::filesystem::path& dirPath,
+                                    std::vector<std::string>& dicomFiles, bool checkIsDicom,
+                                    const ::fwJobs::Observer::sptr& fileLookupObserver)
+{
+    std::vector<std::string> fileVect;
+    checkFilenameExtension(dirPath, fileVect, fileLookupObserver);
+
+    if(checkIsDicom)
+    {
+        if(fileLookupObserver)
+        {
+            fileLookupObserver->setTotalWorkUnits(fileVect.size());
+        }
+
+        std::uint64_t progress = 0;
+        for(auto file: fileVect)
+        {
+            if(fileLookupObserver)
+            {
+                fileLookupObserver->doneWork(++progress);
+
+                if(fileLookupObserver->cancelRequested())
+                {
+                    dicomFiles.clear();
+                    break;
+                }
+            }
+
+            bool isDicom = isDICOM(file);
+            if(isDicom)
+            {
+                dicomFiles.push_back( file );
+            }
+            SLM_WARN_IF("Failed to read: " + file, !isDicom);
+        }
+    }
+    else
+    {
+        dicomFiles = fileVect;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSearch::checkFilenameExtension(const ::boost::filesystem::path& dirPath,
+                                         std::vector<std::string>& dicomFiles,
+                                         const ::fwJobs::Observer::sptr& fileLookupObserver)
+{
+    dicomFiles.clear();
+
+    std::set<std::string> extensions = ::boost::assign::list_of(".jpg")(".jpeg")(".htm")(".html")(".txt")(".xml")
+                                           (".stm")(".str")(".lst")(".ifo")(".pdf")(".gif")
+                                           (".png")(".exe")(".zip")(".gz")(".dir")(".dll")(".inf")
+                                           (".DS_Store");
+
+    for(::boost::filesystem::recursive_directory_iterator it(dirPath);
+        it != ::boost::filesystem::recursive_directory_iterator(); ++it)
+    {
+        if(fileLookupObserver && fileLookupObserver->cancelRequested())
+        {
+            dicomFiles.clear();
+            break;
+        }
+
+        if(!::boost::filesystem::is_directory(*it))
+        {
+            auto path       = it->path();
+            std::string ext = path.extension().string();
+            std::transform(ext.begin(), ext.end(), ext.begin(), tolower);
+
+            if(extensions.find(ext) == extensions.end())
+            {
+                std::string stem = path.stem().string();
+                std::transform(stem.begin(), stem.end(), stem.begin(), tolower);
+
+                if(stem != "dicomdir")
+                {
+                    dicomFiles.push_back(path.string());
+                }
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace helper
+} //namespace fwGdcmIO
+
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeries.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeries.cpp
new file mode 100644
index 0000000..12f4337
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeries.cpp
@@ -0,0 +1,484 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomSeries.hpp"
+#include "fwGdcmIO/helper/DicomDir.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwCore/exceptionmacros.hpp>
+#include <fwCore/spyLog.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+#include <fwMedData/Equipment.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/Job.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/regex.h>
+
+#include <gdcmReader.h>
+#include <gdcmMediaStorage.h>
+
+#include <algorithm>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+//Series
+static const ::gdcm::Tag s_SeriesInstanceUIDTag(0x0020, 0x000e);
+static const ::gdcm::Tag s_SeriesDateTag(0x0008, 0x0021);
+static const ::gdcm::Tag s_SeriesTimeTag(0x0008, 0x0031);
+static const ::gdcm::Tag s_ModalityTag(0x0008, 0x0060);
+static const ::gdcm::Tag s_SeriesDescriptionTag(0x0008, 0x103e);
+static const ::gdcm::Tag s_PerformingPhysicianNameTag(0x0008, 0x1050);
+static const ::gdcm::Tag s_SOPClassUIDTag(0x0008, 0x0016);
+//Equipment
+static const ::gdcm::Tag s_InstitutionNameTag(0x0008, 0x0080);
+//Patient
+static const ::gdcm::Tag s_PatientNameTag(0x0010, 0x0010);
+static const ::gdcm::Tag s_PatientIDTag(0x0010, 0x0020);
+static const ::gdcm::Tag s_PatientBirthDateTag(0x0010, 0x0030);
+static const ::gdcm::Tag s_PatientSexTag(0x0010, 0x0040);
+//Study
+static const ::gdcm::Tag s_StudyInstanceUIDTag(0x0020, 0x000d);
+static const ::gdcm::Tag s_StudyDateTag(0x0008, 0x0020);
+static const ::gdcm::Tag s_StudyTimeTag(0x0008, 0x0030);
+static const ::gdcm::Tag s_ReferringPhysicianNameTag(0x0008, 0x0090);
+static const ::gdcm::Tag s_StudyDescriptionTag(0x0008, 0x1030);
+static const ::gdcm::Tag s_PatientAgeTag(0x0010, 0x1010);
+
+//------------------------------------------------------------------------------
+
+std::string getStringValue(const ::gdcm::Scanner& scanner, const std::string& filename, const gdcm::Tag& tag)
+{
+    const char* value  = scanner.GetValue( filename.c_str(), tag );
+    std::string result = (value) ? value : "";
+    ::boost::algorithm::trim(result);
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+DicomSeries::DicomSeries()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+DicomSeries::~DicomSeries()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+DicomSeries::DicomSeriesContainerType DicomSeries::read(FilenameContainerType& filenames,
+                                                        const SPTR(::fwJobs::Observer)& readerObserver,
+                                                        const SPTR(::fwJobs::Observer)& completeSeriesObserver)
+{
+    DicomSeriesContainerType seriesDB = DicomSeries::splitFiles(filenames, readerObserver);
+    DicomSeries::fillSeries(seriesDB, completeSeriesObserver);
+    return seriesDB;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::complete(DicomSeriesContainerType& seriesDB, const SPTR(::fwJobs::Observer)& completeSeriesObserver)
+{
+    ::gdcm::Scanner seriesScanner;
+    seriesScanner.AddTag(s_SeriesInstanceUIDTag);
+    seriesScanner.AddTag(s_ModalityTag);
+    seriesScanner.AddTag(s_SeriesDateTag);
+    seriesScanner.AddTag(s_SeriesTimeTag);
+    seriesScanner.AddTag(s_SeriesDescriptionTag);
+    seriesScanner.AddTag(s_PerformingPhysicianNameTag);
+    seriesScanner.AddTag(s_SOPClassUIDTag);
+
+    unsigned int progress = 0;
+
+    for(auto series: seriesDB)
+    {
+        if(series->getLocalDicomPaths().empty())
+        {
+            SLM_ERROR("DicomSeries doesn't not contain any instance.");
+            break;
+        }
+
+        const std::string filename = series->getLocalDicomPaths().begin()->second.string();
+        FilenameContainerType filenames;
+        filenames.push_back(filename);
+
+        bool status = seriesScanner.Scan( filenames );
+        FW_RAISE_IF("Unable to read the files.", !status);
+
+        //Modality
+        std::string modality = getStringValue( seriesScanner, filename, s_ModalityTag );
+        series->setModality(modality);
+
+        //Date
+        std::string seriesDate = getStringValue( seriesScanner, filename, s_SeriesDateTag );
+        series->setDate(seriesDate);
+
+        //Time
+        std::string seriesTime = getStringValue( seriesScanner, filename, s_SeriesTimeTag );
+        series->setTime(seriesTime);
+
+        //Description
+        std::string seriesDescription = getStringValue( seriesScanner, filename, s_SeriesDescriptionTag );
+        series->setDescription(seriesDescription);
+
+        //Performing Physicians Name
+        std::string performingPhysicianNamesStr = getStringValue( seriesScanner, filename,
+                                                                  s_PerformingPhysicianNameTag );
+
+        if(!performingPhysicianNamesStr.empty())
+        {
+            ::fwMedData::DicomValuesType performingPhysicianNames;
+            ::boost::split( performingPhysicianNames, performingPhysicianNamesStr, ::boost::is_any_of("\\"));
+            series->setPerformingPhysiciansName(performingPhysicianNames);
+        }
+
+        // Add the SOPClassUID to the series
+        std::string sopClassUID = getStringValue( seriesScanner, filename, s_SOPClassUIDTag );
+        ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = series->getSOPClassUIDs();
+        sopClassUIDContainer.insert(sopClassUID);
+        series->setSOPClassUIDs(sopClassUIDContainer);
+    }
+
+    this->fillSeries(seriesDB, completeSeriesObserver);
+
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::DicomSeries::sptr DicomSeries::createBlob(FilenameContainerType& filenames)
+{
+    ::fwMedData::DicomSeries::sptr series = ::fwMedData::DicomSeries::New();
+    series->setDescription("Processing data...");
+    series->setDicomAvailability(::fwMedData::DicomSeries::BLOB);
+    series->setNumberOfInstances(filenames.size());
+
+    ::fwMedData::Patient::sptr patient = ::fwMedData::Patient::New();
+    patient->setName("Loading...");
+    series->setPatient(patient);
+
+    auto instanceNumber = 0;
+    for(auto file: filenames)
+    {
+        series->addDicomPath(++instanceNumber, file);
+    }
+
+    return series;
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeries::DicomSeriesContainerType DicomSeries::splitFiles(FilenameContainerType& filenames,
+                                                              const ::fwJobs::Observer::sptr& readerObserver)
+{
+    ::gdcm::Scanner seriesScanner;
+    seriesScanner.AddTag(s_SeriesInstanceUIDTag);
+    seriesScanner.AddTag(s_ModalityTag);
+    seriesScanner.AddTag(s_SeriesDateTag);
+    seriesScanner.AddTag(s_SeriesTimeTag);
+    seriesScanner.AddTag(s_SeriesDescriptionTag);
+    seriesScanner.AddTag(s_PerformingPhysicianNameTag);
+    seriesScanner.AddTag(s_SOPClassUIDTag);
+
+    readerObserver->setTotalWorkUnits(filenames.size());
+    readerObserver->doneWork(0);
+
+    bool status = seriesScanner.Scan( filenames );
+    FW_RAISE_IF("Unable to read the files.", !status);
+
+    ::gdcm::Directory::FilenamesType keys = seriesScanner.GetKeys();
+    ::gdcm::Directory::FilenamesType::const_iterator it;
+
+    unsigned int progress = 0;
+
+    DicomSeriesContainerType seriesDB;
+
+    //Loop through every files available in the scanner
+    for(it = keys.begin(); it != keys.end() && !readerObserver->cancelRequested(); ++it)
+    {
+        const std::string filename = it->c_str();
+        OSLM_ASSERT("The file \"" << filename << "\" is not a key of the gdcm scanner",
+                    seriesScanner.IsKey(filename.c_str()));
+
+        // Create Series
+        this->createSeries(seriesDB, seriesScanner, filename);
+
+        readerObserver->doneWork(++progress);
+    }
+
+    return seriesDB;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::fillSeries(DicomSeriesContainerType& seriesDB,
+                             const ::fwJobs::Observer::sptr& completeSeriesObserver)
+{
+    m_patientMap.clear();
+    m_studyMap.clear();
+    m_equipmentMap.clear();
+
+    ::gdcm::Scanner attributeScanner;
+    attributeScanner.AddTag(s_PatientIDTag);
+    attributeScanner.AddTag(s_PatientNameTag);
+    attributeScanner.AddTag(s_PatientBirthDateTag);
+    attributeScanner.AddTag(s_PatientSexTag);
+    attributeScanner.AddTag(s_StudyInstanceUIDTag);
+    attributeScanner.AddTag(s_StudyDateTag);
+    attributeScanner.AddTag(s_StudyTimeTag);
+    attributeScanner.AddTag(s_ReferringPhysicianNameTag);
+    attributeScanner.AddTag(s_StudyDescriptionTag);
+    attributeScanner.AddTag(s_PatientAgeTag);
+    attributeScanner.AddTag(s_InstitutionNameTag);
+    attributeScanner.AddTag(s_SeriesInstanceUIDTag);
+
+    completeSeriesObserver->setTotalWorkUnits(seriesDB.size());
+    std::uint64_t progress = 0;
+
+    // Fill series
+    for(::fwMedData::DicomSeries::sptr series: seriesDB)
+    {
+        // Compute number of instances
+        auto size = series->getLocalDicomPaths().size();
+        series->setNumberOfInstances(size);
+
+        if(!size)
+        {
+            SLM_ERROR("The DicomSeries doesn't contain any instance.");
+            break;
+        }
+
+
+        // Get first instance filename
+        const std::string filename = series->getLocalDicomPaths().begin()->second.string();
+
+        // Load first instance
+        std::vector< std::string > firstInstanceContainer;
+        firstInstanceContainer.push_back(filename);
+        bool status = attributeScanner.Scan( firstInstanceContainer );
+        FW_RAISE_IF("Unable to read the files.", !status);
+        OSLM_ASSERT("The file \"" << filename << "\" is not a key of the gdcm scanner",
+                    attributeScanner.IsKey(filename.c_str()));
+
+        // Create data objects from first instance
+        ::fwMedData::Patient::sptr patient     = this->createPatient(attributeScanner, filename);
+        ::fwMedData::Study::sptr study         = this->createStudy(attributeScanner, filename);
+        ::fwMedData::Equipment::sptr equipment = this->createEquipment(attributeScanner, filename);
+
+        // Fill series
+        series->setPatient(patient);
+        series->setStudy(study);
+        series->setEquipment(equipment);
+
+        completeSeriesObserver->doneWork(++progress);
+
+        if(completeSeriesObserver->cancelRequested())
+        {
+            break;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeries::createSeries(DicomSeriesContainerType& seriesDB, const ::gdcm::Scanner& scanner,
+                               const std::string& filename)
+{
+    ::fwMedData::DicomSeries::sptr series = ::fwMedData::DicomSeries::sptr();
+
+    // Get Series Instance UID
+    std::string seriesInstanceUID = getStringValue( scanner, filename, s_SeriesInstanceUIDTag );
+
+    // Check if the series already exists
+    for(::fwMedData::DicomSeries::sptr dicomSeries: seriesDB)
+    {
+        if(dicomSeries->getInstanceUID() == seriesInstanceUID)
+        {
+            series = dicomSeries;
+            break;
+        }
+    }
+
+    // If the series doesn't exist we create it
+    if(!series)
+    {
+        series = ::fwMedData::DicomSeries::New();
+        series->setDicomAvailability(::fwMedData::DicomSeries::PATHS);
+
+        seriesDB.push_back(series);
+
+        //Instance UID
+        series->setInstanceUID(seriesInstanceUID);
+
+        //Modality
+        std::string modality = getStringValue( scanner, filename, s_ModalityTag );
+        series->setModality(modality);
+
+        //Date
+        std::string seriesDate = getStringValue( scanner, filename, s_SeriesDateTag );
+        series->setDate(seriesDate);
+
+        //Time
+        std::string seriesTime = getStringValue( scanner, filename, s_SeriesTimeTag );
+        series->setTime(seriesTime);
+
+        //Description
+        std::string seriesDescription = getStringValue( scanner, filename, s_SeriesDescriptionTag );
+        series->setDescription(seriesDescription);
+
+        //Performing Physicians Name
+        std::string performingPhysicianNamesStr = getStringValue( scanner, filename,
+                                                                  s_PerformingPhysicianNameTag );
+
+        if(!performingPhysicianNamesStr.empty())
+        {
+            ::fwMedData::DicomValuesType performingPhysicianNames;
+            ::boost::split( performingPhysicianNames, performingPhysicianNamesStr, ::boost::is_any_of("\\"));
+            series->setPerformingPhysiciansName(performingPhysicianNames);
+        }
+    }
+
+    // Add the SOPClassUID to the series
+    std::string sopClassUID = getStringValue( scanner, filename, s_SOPClassUIDTag );
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = series->getSOPClassUIDs();
+    sopClassUIDContainer.insert(sopClassUID);
+    series->setSOPClassUIDs(sopClassUIDContainer);
+
+    // Add the instance to the series
+    auto instanceNumber = series->getLocalDicomPaths().size();
+    series->addDicomPath(instanceNumber, filename);
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Patient::sptr DicomSeries::createPatient(const ::gdcm::Scanner& scanner, const std::string& filename)
+{
+    ::fwMedData::Patient::sptr result;
+
+    // Get Patient ID
+    std::string patientID = getStringValue( scanner, filename, s_PatientIDTag );
+
+    // Check if the patient already exists
+    if(m_patientMap.find(patientID) == m_patientMap.end())
+    {
+        result                  = ::fwMedData::Patient::New();
+        m_patientMap[patientID] = result;
+
+        //Patient ID
+        result->setPatientId(patientID);
+
+        //Patient Name
+        std::string patientName = getStringValue( scanner, filename, s_PatientNameTag );
+        result->setName(patientName);
+
+        //Patient Birthdate
+        std::string patientBirthDate = getStringValue( scanner, filename, s_PatientBirthDateTag );
+        result->setBirthdate(patientBirthDate);
+
+        //Patient Sex
+        std::string patientSex = getStringValue( scanner, filename, s_PatientSexTag );
+        result->setSex(patientSex);
+
+    }
+    else
+    {
+        result = m_patientMap[patientID];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Study::sptr DicomSeries::createStudy(const ::gdcm::Scanner& scanner, const std::string& filename)
+{
+    ::fwMedData::Study::sptr result;
+
+    // Get Study ID
+    std::string studyInstanceUID = getStringValue( scanner, filename, s_StudyInstanceUIDTag );
+
+    // Check if the study already exists
+    if(m_studyMap.find(studyInstanceUID) == m_studyMap.end())
+    {
+        result                       = ::fwMedData::Study::New();
+        m_studyMap[studyInstanceUID] = result;
+
+        //Study ID
+        result->setInstanceUID(studyInstanceUID);
+
+        //Study Date
+        std::string studyDate = getStringValue( scanner, filename, s_StudyDateTag );
+        result->setDate(studyDate);
+
+        //Study Time
+        std::string studyTime = getStringValue( scanner, filename, s_StudyTimeTag );
+        result->setTime(studyTime);
+
+        //Referring Physician Name
+        std::string referringPhysicianName = getStringValue( scanner, filename, s_ReferringPhysicianNameTag );
+        result->setReferringPhysicianName(referringPhysicianName);
+
+        //Study Description
+        std::string studyDescription = getStringValue( scanner, filename, s_StudyDescriptionTag );
+        result->setDescription(studyDescription);
+
+        //Study Patient Age
+        std::string patientAge = getStringValue( scanner, filename, s_PatientAgeTag );
+        result->setPatientAge(patientAge);
+
+    }
+    else
+    {
+        result = m_studyMap[studyInstanceUID];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::Equipment::sptr DicomSeries::createEquipment(const ::gdcm::Scanner& scanner, const std::string& filename)
+{
+    ::fwMedData::Equipment::sptr result;
+
+    // Get Institution Name
+    std::string institutionName = getStringValue( scanner, filename, s_InstitutionNameTag );
+
+    // Check if the equipment already exists
+    if(m_equipmentMap.find(institutionName) == m_equipmentMap.end())
+    {
+        result                          = ::fwMedData::Equipment::New();
+        m_equipmentMap[institutionName] = result;
+
+        //Institution Name
+        result->setInstitutionName(institutionName);
+
+    }
+    else
+    {
+        result = m_equipmentMap[institutionName];
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+} //helper
+} //fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesAnonymizer.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesAnonymizer.cpp
new file mode 100644
index 0000000..5ae5e96
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesAnonymizer.cpp
@@ -0,0 +1,122 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomSeriesAnonymizer.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/Observer.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwTools/System.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+DicomSeriesAnonymizer::DicomSeriesAnonymizer() :
+    m_job(::fwJobs::Aggregator::New("Anonymization process"))
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeriesAnonymizer::~DicomSeriesAnonymizer()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesAnonymizer::anonymize(::fwMedData::DicomSeries::sptr source)
+{
+    this->anonymize(source, source);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesAnonymizer::anonymize(::fwMedData::DicomSeries::sptr source,
+                                      ::fwMedData::DicomSeries::sptr destination)
+{
+    FW_RAISE_IF("Dicom series should be available on the local computer.",
+                source->getDicomAvailability() != ::fwMedData::DicomSeries::PATHS);
+
+    ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer = ::fwGdcmIO::helper::DicomSeriesWriter::New();
+    ::fwGdcmIO::reader::SeriesDB::sptr reader          = ::fwGdcmIO::reader::SeriesDB::New();
+
+    auto writerObserver     = writer->getJob();
+    auto anonymizerObserver = m_anonymizer.getJob();
+    auto readerObserver     = reader->getJob();
+
+    // Set up observer cancel callback
+    m_job->addSimpleCancelHook([&] {
+                writerObserver->cancel();
+                anonymizerObserver->cancel();
+                readerObserver->cancel();
+            });
+
+    m_job->add(writerObserver);
+    m_job->add(anonymizerObserver, 10);
+    m_job->add(readerObserver);
+
+    m_job->run();
+
+    // Create destination directory
+    const ::boost::filesystem::path destPath = ::fwTools::System::getTemporaryFolder("AnonymizedSeries");
+    ::boost::filesystem::create_directories( destPath );
+
+    // Write DicomSeries (Copy files)
+    writer->setObject(source);
+    ::fwData::location::Folder::sptr loc = ::fwData::location::Folder::New();
+    loc->setFolder(destPath);
+    writer->setLocation(loc);
+    writer->write();
+
+    if(m_job->cancelRequested())
+    {
+        return;
+    }
+
+    // Anonymize directory
+    m_anonymizer.anonymize(destPath);
+
+    if(m_job->cancelRequested())
+    {
+        return;
+    }
+
+    // Read anonymized series
+    ::fwGdcmIO::reader::SeriesDB::sptr readerAnonymized = ::fwGdcmIO::reader::SeriesDB::New();
+    ::fwMedData::SeriesDB::sptr seriesDB                = ::fwMedData::SeriesDB::New();
+    readerAnonymized->setObject(seriesDB);
+    readerAnonymized->setFolder(destPath);
+    readerAnonymized->readDicomSeries();
+
+    if(m_job->cancelRequested())
+    {
+        return;
+    }
+
+    // Update DicomSeries
+    ::fwMedData::DicomSeries::sptr anonymizedSeries =
+        ::fwMedData::DicomSeries::dynamicCast(seriesDB->getContainer().front());
+    destination->deepCopy(anonymizedSeries);
+}
+
+//------------------------------------------------------------------------------
+
+::fwJobs::Aggregator::sptr DicomSeriesAnonymizer::getJob() const
+{
+    return m_job;
+}
+
+} // namespace helper
+} // namespace fwGdcmIO
+
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesDBWriter.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesDBWriter.cpp
new file mode 100644
index 0000000..70be226
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesDBWriter.cpp
@@ -0,0 +1,175 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomSeriesDBWriter.hpp"
+
+#include "fwGdcmIO/helper/DicomAnonymizer.hpp"
+#include "fwGdcmIO/helper/DicomSeriesWriter.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Series.hpp>
+
+#include <fwJobs/Observer.hpp>
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwServices/registry/ActiveWorkers.hpp>
+
+#include <fwZip/WriteZipArchive.hpp>
+#include <fwZip/WriteDirArchive.hpp>
+
+namespace fwGdcmIO
+{
+
+namespace helper
+{
+
+//------------------------------------------------------------------------------
+
+DicomSeriesDBWriter::DicomSeriesDBWriter(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this),
+    ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this),
+    m_aggregator(::fwJobs::Aggregator::New("Writing Dicom series")),
+    m_enableZippedArchive(false)
+
+{
+}
+
+//------------------------------------------------------------------------------
+
+DicomSeriesDBWriter::~DicomSeriesDBWriter()
+{
+}
+
+//------------------------------------------------------------------------------
+
+std::string DicomSeriesDBWriter::extension()
+{
+    return "";
+}
+
+//------------------------------------------------------------------------------
+
+::fwJobs::Aggregator::sptr DicomSeriesDBWriter::getAggregator()
+{
+    return m_aggregator;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBWriter::setAnonymizer(const DicomAnonymizer::sptr& anonymizer)
+{
+    m_anonymizer = anonymizer;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBWriter::setProducer(std::string producer)
+{
+    m_producer = producer;
+}
+
+void DicomSeriesDBWriter::enableZippedArchive(bool enable)
+{
+    m_enableZippedArchive = enable;
+}
+//------------------------------------------------------------------------------
+
+std::string getSubPath(int index)
+{
+    std::stringstream ss;
+    ss << std::setfill('0') << std::setw(3) << index;
+    return ss.str();
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesDBWriter::write()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+    SLM_ASSERT("Unable to retrieve associated SeriesDB", seriesDB);
+
+    ::fwZip::IWriteArchive::sptr writeArchive;
+
+    if(m_enableZippedArchive)
+    {
+        ::fwZip::WriteZipArchive::sptr writeZipArchive = ::fwZip::WriteZipArchive::New(this->getFile(), m_producer);
+
+        writeArchive = writeZipArchive;
+    }
+    else
+    {
+        writeArchive = ::fwZip::WriteDirArchive::New(this->getFolder());
+    }
+
+    const auto nbSeries = seriesDB->getContainer().size();
+    int processedSeries = 0;
+
+    for(::fwMedData::Series::sptr series: seriesDB->getContainer())
+    {
+        const ::fwMedData::DicomSeries::sptr& dicomSeries = ::fwMedData::DicomSeries::dynamicCast(series);
+
+        ::fwJobs::Job::sptr job = ::fwJobs::Job::New("Write Dicom series",
+                                                     [&, dicomSeries](::fwJobs::Job& runningJob)
+                {
+                    if(!runningJob.cancelRequested())
+                    {
+                        m_anonymizer->resetIndex();
+
+                        ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer =
+                            ::fwGdcmIO::helper::DicomSeriesWriter::New();
+                        writer->setObject(dicomSeries);
+                        writer->setAnonymizer(m_anonymizer);
+                        writer->setOutputArchive(writeArchive, nbSeries > 1 ? getSubPath(processedSeries++) : "");
+
+                        runningJob.addCancelHook([&](::fwJobs::IJob& subJob)
+                        {
+                            writer->getJob()->cancel();
+                        }
+                                                 );
+
+                        writer->getJob()->addDoneWorkHook(
+                            [&](::fwJobs::IJob& subJob, std::uint64_t oldWork)
+                        {
+                            runningJob.doneWork(subJob.getDoneWorkUnits());
+                        });
+
+                        try
+                        {
+                            writer->write();
+                        }
+                        catch(std::exception& e)
+                        {
+                            runningJob.log(std::string("Failed to write series :\n") + e.what());
+                        }
+                        catch(...)
+                        {
+                            runningJob.log("An unexpected error occurred while writing series");
+                        }
+                    }
+                },
+                                                     ::fwServices::registry::ActiveWorkers::getDefault()->getWorker(
+                                                         ::fwServices::registry::ActiveWorkers::s_DEFAULT_WORKER));
+
+        m_aggregator->addCancelHook([&](::fwJobs::IJob& subJob)
+                {
+                    job->cancel();
+                }
+                                    );
+        m_aggregator->add(job);
+    }
+
+    auto futureAG = m_aggregator->run();
+
+    futureAG.wait();
+}
+
+} // namespace helper
+
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesWriter.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesWriter.cpp
new file mode 100644
index 0000000..5d05502
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DicomSeriesWriter.cpp
@@ -0,0 +1,377 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomSeriesWriter.hpp"
+
+#include "fwGdcmIO/helper/DicomAnonymizer.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwDataIO/writer/registry/macros.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <fwZip/WriteZipArchive.hpp>
+
+#include <stdio.h>
+
+#include <boost/filesystem.hpp>
+#include <boost/filesystem/fstream.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/foreach.hpp>
+
+#include <algorithm>
+#include <cstdint>
+#include <fstream>
+#include <utility>
+
+fwDataIOWriterRegisterMacro( ::fwGdcmIO::helper::DicomSeriesWriter );
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+//------------------------------------------------------------------------------
+
+DicomSeriesWriter::DicomSeriesWriter(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this),
+    m_writeCount(0),
+    m_job(::fwJobs::Observer::New("Writing DICOM files"))
+{
+}
+
+//------------------------------------------------------------------------------
+
+::boost::filesystem::path longestCommonPrefix( const ::fwMedData::DicomSeries::DicomPathContainerType& paths )
+{
+    ::boost::filesystem::path longestPrefix;
+    if( !paths.empty() )
+    {
+        longestPrefix = paths.begin()->second;
+    }
+
+    for(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type& value: paths)
+    {
+        std::pair< ::boost::filesystem::path::const_iterator, ::boost::filesystem::path::const_iterator > p
+            = std::mismatch(longestPrefix.begin(), longestPrefix.end(), value.second.begin());
+
+        if (p.first != longestPrefix.end())
+        {
+            ::boost::filesystem::path newPrefix;
+            BOOST_FOREACH( const ::boost::filesystem::path &subpath, std::make_pair(longestPrefix.begin(), p.first))
+            {
+                newPrefix /= subpath;
+            }
+            longestPrefix = newPrefix;
+        }
+    }
+
+    return longestPrefix;
+}
+
+//------------------------------------------------------------------------------
+
+::boost::filesystem::path removePathPrefix(const ::boost::filesystem::path& path,
+                                           const ::boost::filesystem::path& prefix)
+{
+    std::pair< ::boost::filesystem::path::const_iterator, ::boost::filesystem::path::const_iterator > p
+        = std::mismatch(path.begin(), path.end(), prefix.begin());
+
+    ::boost::filesystem::path newPrefix;
+    BOOST_FOREACH( const ::boost::filesystem::path &subpath, std::make_pair(p.first,  path.end()))
+    {
+        newPrefix /= subpath;
+    }
+    return newPrefix;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriter::setAnonymizer(const SPTR(helper::DicomAnonymizer)& anonymizer)
+{
+    m_anonymizer = anonymizer;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriter::setOutputArchive(const ::fwZip::IWriteArchive::sptr& archive, const std::string& subPath)
+{
+    m_archive = archive;
+    m_subPath = subPath;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriter::write()
+{
+    if(m_archive)
+    {
+        this->processWriteArchive();
+    }
+    else
+    {
+        this->processWrite();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+std::string DicomSeriesWriter::getFilename(const std::string& defaultName)
+{
+    std::string filename;
+
+    if(m_anonymizer)
+    {
+        std::stringstream ss;
+        ss << "im" << std::setfill('0') << std::setw(5) << m_anonymizer->getNextIndex();
+        filename = ss.str();
+    }
+    else
+    {
+        filename = defaultName;
+    }
+
+    return filename;
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriter::processStream(std::istream& inputStream, std::ostream& outputStream)
+{
+    if(m_anonymizer)
+    {
+        m_anonymizer->anonymize(inputStream, outputStream);
+    }
+    else
+    {
+        outputStream << inputStream.rdbuf();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriter::processWrite()
+{
+    ::fwMedData::DicomSeries::sptr dicomSeries = this->getConcreteObject();
+
+    FW_RAISE_IF("Dicom series should contain binaries.",
+                dicomSeries->getDicomAvailability() == ::fwMedData::DicomSeries::NONE);
+
+    // Create folder
+    ::boost::filesystem::path folder = this->getFolder();
+
+    if(m_writeCount)
+    {
+        std::stringstream ss;
+        ss << "fwGdcmIO" << std::setfill('0') << std::setw(3) << m_writeCount;
+        folder /= ss.str();
+    }
+
+    if (!::boost::filesystem::exists(folder))
+    {
+        ::boost::filesystem::create_directories(folder);
+    }
+
+    std::size_t nbInstances = dicomSeries->getNumberOfInstances();
+
+    m_job->setTotalWorkUnits(nbInstances);
+    unsigned int count = 0;
+
+    // Write binary files
+    if(dicomSeries->getDicomAvailability() == ::fwMedData::DicomSeries::BINARIES)
+    {
+        BOOST_FOREACH(::fwMedData::DicomSeries::DicomBinaryContainerType::value_type value,
+                      dicomSeries->getDicomBinaries())
+        {
+            if(m_job->cancelRequested())
+            {
+                return;
+            }
+
+            const std::string filename = this->getFilename(value.first);
+
+            ::fwData::Array::sptr array = value.second;
+            ::fwDataTools::helper::Array arrayHelper(array);
+            char* buffer = static_cast<char*>(arrayHelper.getBuffer());
+            size_t size  = array->getSizeInBytes();
+
+            std::ifstream stream;
+            stream.rdbuf()->pubsetbuf(buffer, size);
+
+            const ::boost::filesystem::path& dest_dir =
+                m_anonymizer ? folder/m_subPath : folder;
+
+            if(!::boost::filesystem::exists(dest_dir))
+            {
+                ::boost::filesystem::create_directories(dest_dir);
+            }
+
+            const ::boost::filesystem::path& dest_file = dest_dir/filename;
+
+            ::boost::filesystem::ofstream fs(dest_file, std::ios::binary|std::ios::trunc);
+            FW_RAISE_IF("Can't open '" <<  dest_file.string() << "' for write.", !fs.good());
+
+            this->processStream(stream, fs);
+            stream.close();
+
+            m_job->doneWork(++count);
+        }
+    }
+    else
+    {
+        ::boost::filesystem::path longestPrefix = longestCommonPrefix(dicomSeries->getLocalDicomPaths()).parent_path();
+        SLM_TRACE("Longest prefix :" + longestPrefix.string());
+
+        BOOST_FOREACH(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type &value,
+                      dicomSeries->getLocalDicomPaths())
+        {
+            if(m_job->cancelRequested())
+            {
+                break;
+            }
+
+            const ::boost::filesystem::path& src = value.second;
+            const std::string filename           = this->getFilename(src.filename().string());
+
+            const ::boost::filesystem::path& dest_dir = folder /
+                                                        (m_anonymizer ? m_subPath : removePathPrefix(src.parent_path(),
+                                                                                                     longestPrefix));
+
+            if(!::boost::filesystem::exists(dest_dir))
+            {
+                ::boost::filesystem::create_directories(dest_dir);
+            }
+
+            // Read file from filesystem
+            ::boost::filesystem::ifstream stream(src, std::ios::binary);
+
+            const ::boost::filesystem::path& dest_file = dest_dir / filename;
+
+            ::boost::filesystem::ofstream fs(dest_file, std::ios::binary|std::ios::trunc);
+            FW_RAISE_IF("Can't open '" <<  dest_file.string() << "' for write.", !fs.good());
+
+            this->processStream(stream, fs);
+            stream.close();
+
+            m_job->doneWork(++count);
+        }
+    }
+
+    m_job->finish();
+
+    m_writeCount++;
+}
+
+void DicomSeriesWriter::processWriteArchive()
+{
+    SLM_ASSERT("Output archive shall be set", m_archive);
+
+    ::fwMedData::DicomSeries::sptr dicomSeries = this->getConcreteObject();
+
+    FW_RAISE_IF("Dicom series should contain binaries.",
+                dicomSeries->getDicomAvailability() == ::fwMedData::DicomSeries::NONE);
+
+    const unsigned int nbInstances = dicomSeries->getNumberOfInstances();
+    unsigned int count             = 0;
+
+    m_job->setTotalWorkUnits(nbInstances);
+    if(dicomSeries->getDicomAvailability() == ::fwMedData::DicomSeries::BINARIES)
+    {
+        BOOST_FOREACH(::fwMedData::DicomSeries::DicomBinaryContainerType::value_type value,
+                      dicomSeries->getDicomBinaries())
+        {
+            if(m_job->cancelRequested())
+            {
+                break;
+            }
+
+            const std::string filename = this->getFilename(value.first);
+
+            ::fwData::Array::sptr array = value.second;
+            ::fwDataTools::helper::Array arrayHelper(array);
+            char* buffer = static_cast<char*>(arrayHelper.getBuffer());
+            size_t size  = array->getSizeInBytes();
+
+            std::ifstream stream;
+            stream.rdbuf()->pubsetbuf(buffer, size);
+
+
+            const ::boost::filesystem::path& dest_dir =
+                m_anonymizer ? m_subPath : "";
+
+
+            const ::boost::filesystem::path& dest_file = dest_dir/filename;
+            SPTR(std::ostream) fs = m_archive->createFile(dest_file);
+            FW_RAISE_IF("Can't open '" << dest_file.string() << "' for write.", !fs->good());
+
+            this->processStream(stream, *fs);
+            stream.close();
+
+            m_job->doneWork(++count);
+        }
+    }
+    else
+    {
+        ::boost::filesystem::path longestPrefix = longestCommonPrefix(dicomSeries->getLocalDicomPaths()).parent_path();
+        SLM_TRACE("Longest prefix :" + longestPrefix.string());
+
+        BOOST_FOREACH(const ::fwMedData::DicomSeries::DicomPathContainerType::value_type &value,
+                      dicomSeries->getLocalDicomPaths())
+        {
+            if(m_job->cancelRequested())
+            {
+                break;
+            }
+
+            const ::boost::filesystem::path& src = value.second;
+            const std::string filename           = this->getFilename(src.filename().string());
+
+            const ::boost::filesystem::path& dest_dir =
+                m_anonymizer ? m_subPath : removePathPrefix(src.parent_path(), longestPrefix);
+
+            // Read file from filesystem
+            ::boost::filesystem::ifstream stream(src, std::ios::binary);
+            FW_RAISE_IF("Can't open '" << src.string() << "' for read.", !stream.good());
+
+            const ::boost::filesystem::path& dest_file = dest_dir/filename;
+            SPTR(std::ostream) fs = m_archive->createFile(dest_file);
+            FW_RAISE_IF("Can't open '" << dest_file.string() << "' for write.", !fs->good());
+
+            this->processStream(stream, *fs);
+            stream.close();
+
+            m_job->doneWork(++count);
+        }
+    }
+
+    m_job->done();
+    m_job->finish();
+
+    ++m_writeCount;
+}
+
+//------------------------------------------------------------------------------
+
+std::string DicomSeriesWriter::extension()
+{
+    return "";
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwJobs::IJob) DicomSeriesWriter::getJob() const
+{
+    return m_job;
+}
+
+} // namespace helper
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DictionarySegment.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DictionarySegment.cpp
new file mode 100644
index 0000000..9ac28fe
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/DictionarySegment.cpp
@@ -0,0 +1,388 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DictionarySegment.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmString.h>
+
+#include <boost/algorithm/string/find.hpp> // For searching a substring
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/assign/list_of.hpp>
+#include <boost/bimap/bimap.hpp>
+#include <boost/bimap/multiset_of.hpp>
+#include <boost/bimap/unordered_set_of.hpp>
+#include <boost/functional/hash.hpp>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Functor which compare two DicomCodedAttribute.
+ */
+struct DicomCodedAttributeOrderer
+{
+    /**
+     * @brief Operator to compare DicomCodedAttributes with their Code Values (CV).
+     */
+    bool operator()(const ::fwGdcmIO::container::DicomCodedAttribute* a,
+                    const ::fwGdcmIO::container::DicomCodedAttribute* b) const
+    {
+        return a->getCodeValue() < b->getCodeValue();
+    }
+};
+
+typedef ::boost::bimaps::bimap< ::boost::bimaps::unordered_set_of< std::string >,
+                                ::boost::bimaps::multiset_of< const ::fwGdcmIO::container::DicomCodedAttribute*,
+                                                              DicomCodedAttributeOrderer > > attributesTranslator;
+
+//------------------------------------------------------------------------------
+
+//**************************************************************//
+//** Anatomical region coded attributes **//
+//**************************************************************//
+// Set of DicomCodedAttribute to write in DICOM file
+
+//////////////////////////////////////////////////////////////////
+//** Organs **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_BRAIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-A0100", "SRT", "Brain");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_HEART =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-32000", "SRT", "Heart");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_COLON =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-59300", "SRT", "Colon");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_DIAPHRAGM =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-D3400", "SRT", "Diaphragm");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_DUODENUM =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-58200", "SRT", "Duodenum");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_STOMACH =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-57000", "SRT", "Stomach");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_LIVER =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-62002", "SRT", "Liver");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SMALL_INTESTINE =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-58000", "SRT", "Small Intestine");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ENTIRE_BODY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-D0010", "SRT", "Entire Body");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ESOPHAGUS =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-56000", "SRT", "Esophagus");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_BONE =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-D016E", "SRT", "Bone");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PANCREAS =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-65000", "SRT", "Pancreas");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PARATHYROID =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-B7000", "SRT", "Parathyroid");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_LUNG =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-28000", "SRT", "Lung");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PROSTATE =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-9200B", "SRT", "Prostate");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SPLEEN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-C3000", "SRT", "Spleen");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_KIDNEY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-71000", "SRT", "Kidney");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ADRENAL_GLAND =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-B3000", "SRT", "Adrenal Gland");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_TRACHEA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-25000", "SRT", "Trachea");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_THYROID =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-B6000", "SRT", "Thyroid");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_GALL_BLADDER =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-63000", "SRT", "Gall Bladder");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_BLADDER =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-74000", "SRT", "Bladder");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_WRIST_JOINT =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-15460", "SRT", "Wrist Joint");
+
+//////////////////////////////////////////////////////////////////
+//** Network **//
+//////////////////////////////////////////////////////////////////
+
+//** Arteries **//
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ABDOMINAL_AORTA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-42501", "SRT", "Abdominal Aorta");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_THORACIC_AORTA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-4600A", "SRT", "Thoracic Aorta");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-41000", "SRT", "Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_CAROTID_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-45010", "SRT", "Carotid Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_FEMORAL_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-47400", "SRT", "Femoral Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_HEPATIC_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-46420", "SRT", "Hepatic Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_MESENTERIC_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-46500", "SRT", "Mesenteric Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PULMONARY_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-44000", "SRT", "Pulmonary Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_RENAL_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-46600", "SRT", "Renal Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SUBCLAVIAN_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-46100", "SRT", "Subclavian Artery");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SPLENIC_ARTERY =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-46460", "SRT", "Splenic Artery");
+
+//** Veins **//
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48000", "SRT", "Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SUPERIOR_VENA_CAVA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48610", "SRT", "Superior Vena Cava");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_INFERIOR_VENA_CAVA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48710", "SRT", "Inferior Vena Cava");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_HEPATIC_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48720", "SRT", "Hepatic Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_INTERNAL_JUGULAR_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48170", "SRT", "Internal Jugular Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_MESENTERIC_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-4884A", "SRT", "Mesenteric Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PORTAL_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48810", "SRT", "Portal Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PULMONARY_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48581", "SRT", "Pulmonary Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_RENAL_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48740", "SRT", "Renal Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SUBCLAVIAN_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48330", "SRT", "Subclavian Vein");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SPLENIC_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48890", "SRT", "Splenic Vein");
+
+//** Miscellaneous **//
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_BILE_DUCT = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "T-60610", "SRT", "Bile Duct");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_BRONCHUS = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "T-26000", "SRT", "Bronchus");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_URETER = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "T-73800", "SRT", "Ureter");
+
+//////////////////////////////////////////////////////////////////
+//** Functional **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_SIGMOID_COLON =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-59470", "SRT", "Sigmoid colon");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_RECTUM =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-59600", "SRT", "Rectum");
+
+//////////////////////////////////////////////////////////////////
+//** Miscellaneous **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_CYST = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "M-3340A", "SRT", "Cyst");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_TODEFINE = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "", "", "");
+
+// List to translate FW4SPL organ names into DicomCodedAttribute
+static const attributesTranslator s_ANATOMICAL_REGIONS = boost::assign::list_of< attributesTranslator::relation >
+                                                             ("Brain", s_BRAIN)
+                                                             ("Heart", s_HEART)
+                                                             ("Colon", s_COLON)
+                                                             ("Diaphragm", s_DIAPHRAGM)
+                                                             ("Duodenum", s_DUODENUM)
+                                                             ("Stomach", s_STOMACH)
+                                                             ("Liver", s_LIVER)
+                                                             ("Small_Intestine", s_SMALL_INTESTINE)
+                                                             ("Entire_Body", s_ENTIRE_BODY)
+                                                             ("Esophagus", s_ESOPHAGUS)
+                                                             ("Bone", s_BONE)
+                                                             ("Pancreas", s_PANCREAS)
+                                                             ("Parathyroid", s_PARATHYROID)
+                                                             ("Lung", s_LUNG)
+                                                             ("Prostate", s_PROSTATE)
+                                                             ("Spleen", s_SPLEEN)
+                                                             ("Kidney", s_KIDNEY)
+                                                             ("Adrenal_Gland", s_ADRENAL_GLAND)
+                                                             ("Trachea", s_TRACHEA)
+                                                             ("Thyroid", s_THYROID)
+                                                             ("Gall_Bladder", s_GALL_BLADDER)
+                                                             ("Bladder", s_BLADDER)
+                                                             ("Wrist_Joint", s_WRIST_JOINT)
+                                                             ("Abdominal_Aorta", s_ABDOMINAL_AORTA)
+                                                             ("Thoracic_Aorta", s_THORACIC_AORTA)
+                                                             ("Artery", s_ARTERY)
+                                                             ("Carotid_Artery", s_CAROTID_ARTERY)
+                                                             ("Femoral_Artery", s_FEMORAL_ARTERY)
+                                                             ("Hepatic_Artery", s_HEPATIC_ARTERY)
+                                                             ("Mesenteric_Artery", s_MESENTERIC_ARTERY)
+                                                             ("Pulmonary_Artery", s_PULMONARY_ARTERY)
+                                                             ("Renal_Artery", s_RENAL_ARTERY)
+                                                             ("Subclavian_Artery", s_SUBCLAVIAN_ARTERY)
+                                                             ("Splenic_Artery", s_SPLENIC_ARTERY)
+                                                             ("Vein", s_VEIN)
+                                                             ("Superior_Vena_Cava", s_SUPERIOR_VENA_CAVA)
+                                                             ("Inferior_Vena_Cava", s_INFERIOR_VENA_CAVA)
+                                                             ("Hepatic_Vein", s_HEPATIC_VEIN)
+                                                             ("Internal_Jugular_Vein", s_INTERNAL_JUGULAR_VEIN)
+                                                             ("Mesenteric_Vein", s_MESENTERIC_VEIN)
+                                                             ("Portal_Vein", s_PORTAL_VEIN)
+                                                             ("Pulmonary_Vein", s_PULMONARY_VEIN)
+                                                             ("Renal_Vein", s_RENAL_VEIN)
+                                                             ("Subclavian_Vein", s_SUBCLAVIAN_VEIN)
+                                                             ("Splenic_Vein", s_SPLENIC_VEIN)
+                                                             ("Bile_Duct", s_BILE_DUCT)
+                                                             ("Bronchus", s_BRONCHUS)
+                                                             ("Ureter", s_URETER)
+                                                             ("Sigmoid_Colon", s_SIGMOID_COLON)
+                                                             ("Rectum", s_RECTUM)
+                                                             ("Cyst", s_CYST)
+                                                             ("ToDefine", s_TODEFINE);
+
+//**************************************************************//
+//** Segmented Property category coded attributes **//
+//**************************************************************//
+
+// Set of DicomCodedAttribute to write in DICOM file
+//static const DicomCodedAttribute * s_TISSUE = new DicomCodedAttribute("T-D0050", "SRT", "Tissue");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ANATSTRUCT =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-D000A", "SRT", "Anatomical Structure");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_PHYSIC_OBJECT =
+    new ::fwGdcmIO::container::DicomCodedAttribute("A-00004", "SRT", "Physical object");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_ALTEREDSTRUCT =
+    new ::fwGdcmIO::container::DicomCodedAttribute("M-01000", "SRT", "Morphologically Altered Structure");
+
+static const attributesTranslator s_PROPERTY_CATEGORIES = boost::assign::list_of< attributesTranslator::relation >
+                                                              ("Anat_Struct", s_ANATSTRUCT)
+                                                              ("Physic_Object", s_PHYSIC_OBJECT)
+                                                              ("Altered_Struct", s_ALTEREDSTRUCT)
+                                                              ("ToDefine", s_TODEFINE);
+
+//**************************************************************//
+//** Segmented Property type coded attributes **//
+//**************************************************************//
+// Set of DicomCodedAttribute to write in DICOM file
+
+//////////////////////////////////////////////////////////////////
+//** Organs **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_LIVER = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "T-62000", "SRT", "Liver");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_PROSTATE = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "T-92000", "SRT", "Prostate");
+
+//////////////////////////////////////////////////////////////////
+//** Network **//
+//////////////////////////////////////////////////////////////////
+
+//** Arteries **//
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_ABDOMINAL_AORTA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-42500", "SRT", "Abdominal Aorta");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_THORACIC_AORTA =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-42070", "SRT", "Thoracic Aorta");
+
+//** Veins **//
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_PULMONARY_VEIN =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-48500", "SRT", "Pulmonary Vein");
+
+//** Miscellaneous **//
+//////////////////////////////////////////////////////////////////
+//** Lesions **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_CYST = new ::fwGdcmIO::container::DicomCodedAttribute(
+    "M-3340A", "SRT", "Cyst");
+
+//////////////////////////////////////////////////////////////////
+//** Objects **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_NEEDLE =
+    new ::fwGdcmIO::container::DicomCodedAttribute("A-30360", "SRT", "Needle");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_CATHETER =
+    new ::fwGdcmIO::container::DicomCodedAttribute("A-26800", "SRT", "Catheter");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_MARKER =
+    new ::fwGdcmIO::container::DicomCodedAttribute("A-00D7B", "SRT", "Opaque Marker");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_PROSTHESIS =
+    new ::fwGdcmIO::container::DicomCodedAttribute("A-04000", "SRT", "Prosthesis");
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_CLOTHING =
+    new ::fwGdcmIO::container::DicomCodedAttribute("A-00916", "SRT", "Clothing");
+
+//////////////////////////////////////////////////////////////////
+//** Functional **//
+//////////////////////////////////////////////////////////////////
+static const ::fwGdcmIO::container::DicomCodedAttribute* s_T_TRANSVERSE =
+    new ::fwGdcmIO::container::DicomCodedAttribute("T-59440", "SRT", "Transverse Colon");
+
+//////////////////////////////////////////////////////////////////
+//** Miscellaneous **//
+//////////////////////////////////////////////////////////////////
+
+static const attributesTranslator s_PROPERTY_TYPES =
+    boost::assign::list_of< attributesTranslator::relation >
+        ("T_Liver", s_T_LIVER)
+        ("T_Prostate", s_T_PROSTATE)
+        ("T_Abdominal_Aorta", s_T_ABDOMINAL_AORTA)
+        ("T_Thoracic_Aorta", s_T_THORACIC_AORTA)
+        ("T_Pulmonary_Vein", s_T_PULMONARY_VEIN)
+        ("T_Cyst", s_T_CYST)
+        ("T_Needle", s_T_NEEDLE)
+        ("T_Catheter", s_T_CATHETER)
+        ("T_Marker", s_T_MARKER)
+        ("T_Prosthesis", s_T_PROSTHESIS)
+        ("T_Clothing", s_T_CLOTHING)
+        ("T_Transverse", s_T_TRANSVERSE)
+        ("ToDefine", s_TODEFINE);
+
+//------------------------------------------------------------------------------
+
+const ::fwGdcmIO::container::DicomCodedAttribute* DictionarySegment::guessAnatRegionFromLabel(const std::string& label)
+{
+    // Delete possible space as last character
+    std::string cleanedLabel = ::boost::algorithm::trim_copy(label);
+
+    if (!cleanedLabel.empty())
+    {
+        // Search and translate label into anatomic region sequence
+        if (s_ANATOMICAL_REGIONS.left.find(cleanedLabel) != s_ANATOMICAL_REGIONS.left.end())
+        {
+            return s_ANATOMICAL_REGIONS.left.at(cleanedLabel);
+        }
+    }
+    return s_TODEFINE;
+}
+
+//------------------------------------------------------------------------------
+
+const ::fwGdcmIO::container::DicomCodedAttribute* DictionarySegment::guessPropCategoryFromLabel(
+    const std::string& label)
+{
+    // Delete possible space as last character
+    std::string cleanedLabel = ::boost::algorithm::trim_copy(label);
+
+    if (!cleanedLabel.empty())
+    {
+        // Search and translate label into segmented property category sequence
+        if (s_PROPERTY_CATEGORIES.left.find(cleanedLabel) != s_PROPERTY_CATEGORIES.left.end())
+        {
+            return s_PROPERTY_CATEGORIES.left.at(cleanedLabel);
+        }
+    }
+    return s_TODEFINE;
+}
+
+//------------------------------------------------------------------------------
+
+const ::fwGdcmIO::container::DicomCodedAttribute* DictionarySegment::guessPropTypeFromLabel(const std::string& label)
+{
+    // Delete possible space as last character
+    std::string cleanedLabel = ::boost::algorithm::trim_copy(label);
+
+    if (!cleanedLabel.empty())
+    {
+        // Search and translate label into segmented property type sequence
+        if (s_PROPERTY_TYPES.left.find(cleanedLabel) != s_PROPERTY_TYPES.left.end())
+        {
+            return s_PROPERTY_TYPES.left.at(cleanedLabel);
+        }
+        else if (s_PROPERTY_CATEGORIES.left.find(cleanedLabel) != s_PROPERTY_CATEGORIES.left.end())
+        {
+            return s_PROPERTY_CATEGORIES.left.at(cleanedLabel);
+        }
+    }
+    return s_TODEFINE;
+}
+
+} //namespace helper
+} //namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/Fiducial.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/Fiducial.cpp
new file mode 100644
index 0000000..2a8faaf
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/Fiducial.cpp
@@ -0,0 +1,124 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/Fiducial.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+
+//------------------------------------------------------------------------------
+
+bool Fiducial::containsLandmarks(SPTR(::fwMedData::SeriesDB)seriesDB)
+{
+    // Let's find if a series contains distances
+    for(const ::fwMedData::Series::sptr& series: seriesDB->getContainer())
+    {
+        ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+        if(imageSeries)
+        {
+            ::fwData::Image::sptr image = imageSeries->getImage();
+            if(image)
+            {
+                ::fwData::PointList::sptr pointList =
+                    image->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+                if(pointList && !pointList->getCRefPoints().empty())
+                {
+                    return true;
+                }
+            }
+        }
+    }
+
+    return false;
+}
+
+//------------------------------------------------------------------------------
+
+bool Fiducial::containsDistances(SPTR(::fwMedData::SeriesDB)seriesDB)
+{
+    // Let's find if a series contains distances
+    for(const ::fwMedData::Series::sptr& series: seriesDB->getContainer())
+    {
+        ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+        if(imageSeries)
+        {
+            ::fwData::Image::sptr image = imageSeries->getImage();
+            if(image)
+            {
+                ::fwData::Vector::sptr distanceVector =
+                    image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+                if(distanceVector && !distanceVector->empty())
+                {
+                    return true;
+                }
+            }
+        }
+    }
+
+    return false;
+}
+
+//------------------------------------------------------------------------------
+
+bool Fiducial::contains3DDistances(SPTR(::fwMedData::SeriesDB)seriesDB)
+{
+    // Let's find if a series contains distances
+    for(const ::fwMedData::Series::sptr& series: seriesDB->getContainer())
+    {
+        ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+        if(imageSeries)
+        {
+            ::fwData::Image::sptr image = imageSeries->getImage();
+            if(image)
+            {
+                ::fwData::Vector::sptr distanceVector =
+                    image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+                if(distanceVector && !distanceVector->empty())
+                {
+                    for(const ::fwData::Object::sptr& object: distanceVector->getContainer())
+                    {
+                        ::fwData::PointList::sptr pointList = ::fwData::PointList::dynamicCast(object);
+                        if(pointList && pointList->getCRefPoints().size() >= 2)
+                        {
+                            const ::fwData::Point::sptr point1 = *pointList->getCRefPoints().begin();
+                            const ::fwData::Point::sptr point2 = *(++pointList->getCRefPoints().begin());
+                            int frameNumber1                   =
+                                ::fwGdcmIO::helper::DicomData::convertPointToFrameNumber(image, point1);
+                            int frameNumber2 =
+                                ::fwGdcmIO::helper::DicomData::convertPointToFrameNumber(image, point2);
+                            if(frameNumber1 != frameNumber2)
+                            {
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    return false;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace helper
+} // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/FileWriter.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/FileWriter.cpp
new file mode 100644
index 0000000..4360219
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/FileWriter.cpp
@@ -0,0 +1,42 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/exception/Failed.hpp"
+#include "fwGdcmIO/helper/FileWriter.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <gdcmFileMetaInformation.h>
+#include <gdcmWriter.h>
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+void FileWriter::write(const std::string& filename, SPTR(::gdcm::Writer)writer)
+{
+    // Set file header
+    ::gdcm::FileMetaInformation& metaInformation = writer->GetFile().GetHeader();
+
+    // Transfer syntax - Type 1
+    metaInformation.SetDataSetTransferSyntax(::gdcm::TransferSyntax::ExplicitVRLittleEndian);
+
+    // Initialize the file
+    writer->SetFileName(filename.c_str()); // NOTE: Must be called when file is ready to be written
+
+    // Write data
+    if (!writer->Write())
+    {
+        const std::string msg = "Unable to write the file " + filename;
+        throw ::fwGdcmIO::exception::Failed(msg);
+    }
+
+}
+
+} // namespace helper
+} // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/StructuredReport.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/StructuredReport.cpp
new file mode 100644
index 0000000..43fd82b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/helper/StructuredReport.cpp
@@ -0,0 +1,281 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/sr/DicomSRCodeNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRContainerNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNumNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/StructuredReport.hpp"
+
+namespace fwGdcmIO
+{
+namespace helper
+{
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) StructuredReport::readSR(const ::gdcm::DataSet& dataset)
+{
+    SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) result;
+
+    // Value Type - Type 1
+    const std::string type = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0040, 0xa040 >(dataset);
+
+    // Concept Name Code Sequence - Type 1C
+    const ::fwGdcmIO::container::DicomCodedAttribute& codedAttribute =
+        ::fwGdcmIO::helper::StructuredReport::readCodeSequence<0x0040, 0xa043>(dataset);
+
+    if(type == "CONTAINER" && !codedAttribute.isEmpty())
+    {
+        result = std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(codedAttribute);
+        ::fwGdcmIO::helper::StructuredReport::readSubNodeContainer(dataset, result);
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+void StructuredReport::readSubNodeContainer(const ::gdcm::DataSet& dataset,
+                                            SPTR(::fwGdcmIO::container::sr::DicomSRNode)parent)
+{
+    // Retrieve the content sequence
+    if(dataset.FindDataElement(::gdcm::Tag(0x0040, 0xa730)))
+    {
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence =
+            dataset.GetDataElement(::gdcm::Tag(0x0040, 0xa730)).GetValueAsSQ();
+
+        for(unsigned int i = 1; i <= sequence->GetNumberOfItems(); ++i)
+        {
+            const ::gdcm::DataSet& itemDataset = sequence->GetItem(i).GetNestedDataSet();
+            ::fwGdcmIO::helper::StructuredReport::readSubNode(itemDataset, parent);
+        }
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void StructuredReport::readSubNode(const ::gdcm::DataSet& dataset, SPTR(::fwGdcmIO::container::sr::DicomSRNode)parent)
+{
+    SPTR(::fwGdcmIO::container::sr::DicomSRNode) node;
+
+    // Value Type - Type 1
+    const std::string type = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0040, 0xa040 >(dataset);
+
+    // Concept Name Code Sequence - Type 1C
+    const ::fwGdcmIO::container::DicomCodedAttribute& codedAttribute =
+        ::fwGdcmIO::helper::StructuredReport::readCodeSequence<0x0040, 0xa043>(dataset);
+
+    // Relationship Value - Type 1
+    const std::string relationship = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0040, 0xa010 >(dataset);
+
+    if(type == "TEXT")
+    {
+        // Text Value - Type 1C
+        const std::string textValue = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0040, 0xa160 >(dataset);
+
+        // Create Text Node
+        node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRTextNode >(
+            codedAttribute, relationship, textValue);
+    }
+    else if(type == "NUM")
+    {
+        // Retrieve the measured value sequence
+        if(dataset.FindDataElement(::gdcm::Tag(0x0040, 0xa300)))
+        {
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence =
+                dataset.GetDataElement(::gdcm::Tag(0x0040, 0xa300)).GetValueAsSQ();
+            if(sequence->GetNumberOfItems() > 0)
+            {
+                const ::gdcm::DataSet& itemDataset = sequence->GetItem(1).GetNestedDataSet();
+
+                // Numerical value - Type 1
+                const double numValue =
+                    ::fwGdcmIO::helper::DicomData::getTagValue< 0x0040, 0xa30a, double >(itemDataset);
+
+                // Measured units code sequence - Type 1
+                const ::fwGdcmIO::container::DicomCodedAttribute& measurementUnits =
+                    ::fwGdcmIO::helper::StructuredReport::readCodeSequence<0x0040, 0x08ea>(itemDataset);
+
+                // Create Num Node
+                node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRNumNode >(
+                    codedAttribute, relationship, numValue, measurementUnits);
+
+            }
+        }
+    }
+    else if(type == "SCOORD")
+    {
+        // Graphic Data - Type 1C
+        ::gdcm::Attribute< 0x0070, 0x0022 > graphicDataAttribute;
+        graphicDataAttribute.SetFromDataElement(dataset.GetDataElement(::gdcm::Tag(0x0070, 0x0022)));
+        const float* graphicData = graphicDataAttribute.GetValues();
+
+        // Graphic Type - Type 1
+        const std::string graphicType = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0070, 0x0023 >(dataset);
+
+        if(graphicType == "POINT" && graphicDataAttribute.GetNumberOfValues() == 2)
+        {
+            // Create Text Node
+            std::vector<float> scoordVector(graphicData, graphicData + 2);
+            node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoordNode >(
+                codedAttribute, relationship, graphicType, scoordVector);
+        }
+        else if(graphicType == "POLYLINE" && graphicDataAttribute.GetNumberOfValues() == 4)
+        {
+            // Create Text Node
+            std::vector<float> scoordVector(graphicData, graphicData + 4);
+            node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoordNode >(
+                codedAttribute, relationship, graphicType, scoordVector);
+        }
+        else
+        {
+            SLM_WARN("Graphic type is not handled or data size doesn't match type. The SR node has been ignored.");
+        }
+
+    }
+    else if(type == "SCOORD3D")
+    {
+        // Referenced Frame of Reference UID - Type 1
+        const std::string frameOfReferenceUID = ::fwGdcmIO::helper::DicomData::getTagValue< 0x3006, 0x0024 >(dataset);
+
+        // Graphic Data - Type 1C
+        ::gdcm::Attribute< 0x0070, 0x0022 > graphicDataAttribute;
+        graphicDataAttribute.SetFromDataElement(dataset.GetDataElement(::gdcm::Tag(0x0070, 0x0022)));
+        const float* graphicData = graphicDataAttribute.GetValues();
+
+        // Graphic Type - Type 1
+        const std::string graphicType = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0070, 0x0023 >(dataset);
+
+        if(graphicType == "POINT" && graphicDataAttribute.GetNumberOfValues() == 3)
+        {
+            // Create Text Node
+            std::vector<float> scoordVector(graphicData, graphicData + 3);
+            node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoord3DNode >(
+                codedAttribute, relationship, graphicType, scoordVector, frameOfReferenceUID);
+        }
+        else if(graphicType == "POLYLINE" && graphicDataAttribute.GetNumberOfValues() == 6)
+        {
+            // Create Text Node
+            std::vector<float> scoordVector(graphicData, graphicData + 6);
+            node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoord3DNode >(
+                codedAttribute, relationship, graphicType, scoordVector, frameOfReferenceUID);
+        }
+        else
+        {
+            SLM_WARN("Graphic type is not handled or data size doesn't match type. The SR node has been ignored.");
+        }
+
+    }
+    else if(type == "IMAGE")
+    {
+        // Retrieve the referenced SOP sequence
+        if(dataset.FindDataElement(::gdcm::Tag(0x0008, 0x1199)))
+        {
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence =
+                dataset.GetDataElement(::gdcm::Tag(0x0008, 0x1199)).GetValueAsSQ();
+            if(sequence->GetNumberOfItems() > 0)
+            {
+                const ::gdcm::DataSet& itemDataset = sequence->GetItem(1).GetNestedDataSet();
+
+                // Referenced SOP Class UID - Type 1
+                const std::string sopClassUID = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x1150 >(
+                    itemDataset);
+
+                // Referenced SOP Instance UID  - Type 1
+                const std::string sopInstanceUID = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x1155 >(
+                    itemDataset);
+
+                // Referenced Frame Number - Type 1C
+                int frameNumber = ::fwGdcmIO::helper::DicomData::getTagValue< 0x0008, 0x1160, int >(itemDataset);
+
+                // Create Num Node
+                node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRImageNode >(
+                    codedAttribute, relationship, sopClassUID, sopInstanceUID, frameNumber);
+
+            }
+        }
+    }
+    else if(type == "CODE")
+    {
+        const ::fwGdcmIO::container::DicomCodedAttribute& codedEntry =
+            ::fwGdcmIO::helper::StructuredReport::readCodeSequence<0x0040, 0xa168>(dataset);
+
+        // Create Code Node
+        node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRCodeNode >(codedAttribute, relationship,
+                                                                              codedEntry);
+
+
+    }
+    else if(type == "UIDREF")
+    {
+        // UID Value - Type 1C
+        const std::string uidValue = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0040, 0xa124 >(dataset);
+
+        // Create UIDRef Node
+        node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRUIDRefNode >(codedAttribute, relationship,
+                                                                                uidValue);
+    }
+    else if(type == "CONTAINER")
+    {
+        // Create Container Node
+        node = std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(codedAttribute, relationship);
+    }
+
+    if(node)
+    {
+        // Create children
+        ::fwGdcmIO::helper::StructuredReport::readSubNodeContainer(dataset, node);
+
+        // Add node to parent
+        parent->addSubNode(node);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void StructuredReport::dumpSR(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& root, std::ostream& out)
+{
+    out << "graph SR {" << std::endl;
+    int index = 0;
+    StructuredReport::dumpSRNode(root, out, index);
+    out << "}" << std::endl;
+}
+
+//------------------------------------------------------------------------------
+
+void StructuredReport::dumpSRNode(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& root, std::ostream& out,
+                                  int& index)
+{
+    // Write node
+    out << "\t" << index << "[label=\"" << (*root) << "\"][shape=box];" << std::endl;
+
+    const int parentIndex = index;
+    for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& child: root->getSubNodeContainer())
+    {
+        // Write edge
+        out << "\t" << parentIndex  << "--" << (index+1) << "[label=\"" << child->getRelationship() << "\"];" <<
+            std::endl;
+
+        // Write child
+        StructuredReport::dumpSRNode(child, out, ++index);
+
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace helper
+
+} //namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/Series.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/Series.cpp
new file mode 100644
index 0000000..62a34c8
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/Series.cpp
@@ -0,0 +1,335 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/Series.hpp"
+#include "fwGdcmIO/reader/iod/CTMRImageIOD.hpp"
+#include "fwGdcmIO/reader/iod/ComprehensiveSRIOD.hpp"
+#include "fwGdcmIO/reader/iod/SpatialFiducialsIOD.hpp"
+#include "fwGdcmIO/reader/iod/SurfaceSegmentationIOD.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwDicomTools/Series.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+#include <fwTools/dateAndTime.hpp>
+
+#include <gdcmImageReader.h>
+#include <gdcmScanner.h>
+
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/make_shared.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+
+//------------------------------------------------------------------------------
+
+Series::Series() : m_enableBufferRotation(true)
+{
+
+}
+
+//------------------------------------------------------------------------------
+
+Series::~Series()
+{
+    SLM_TRACE_FUNC();
+}
+
+// ----------------------------------------------------------------------------
+
+::fwMedData::Series::sptr Series::read(::fwMedData::DicomSeries::sptr dicomSeries)
+throw(::fwGdcmIO::exception::Failed)
+{
+    SLM_ASSERT("DicomSeries should not be null.", dicomSeries);
+    SLM_ASSERT("Logger should not be null.", m_logger);
+
+    // Create instance
+    SPTR(::fwGdcmIO::container::DicomInstance) instance =
+        std::make_shared< ::fwGdcmIO::container::DicomInstance >(dicomSeries);
+
+    m_cancelled = false;
+
+    // Create result
+    ::fwMedData::Series::sptr result;
+
+    if(!dicomSeries->getLocalDicomPaths().empty())
+    {
+        // Get SOPClassUID
+        ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = dicomSeries->getSOPClassUIDs();
+        std::string sopClassUID = *sopClassUIDContainer.begin();
+
+        // If the DicomSeries contains an image (ImageSeries)
+        if (::gdcm::MediaStorage::IsImage(::gdcm::MediaStorage::GetMSType(sopClassUID.c_str())) &&
+            ::gdcm::MediaStorage::GetMSType(sopClassUID.c_str()) != ::gdcm::MediaStorage::SpacialFiducialsStorage)
+        {
+            // Read the image
+            ::fwMedData::ImageSeries::sptr imageSeries = ::fwDicomTools::Series::convertToImageSeries(dicomSeries);
+            ::fwData::Image::sptr image                = ::fwData::Image::New();
+            imageSeries->setImage(image);
+
+            // Create IOD Reader
+            ::fwGdcmIO::reader::iod::CTMRImageIOD iod(dicomSeries, instance, m_logger, m_callback, m_cancelled);
+            iod.setBufferRotationEnabled(m_enableBufferRotation);
+
+            try
+            {
+                iod.read(imageSeries);
+            }
+            catch (const ::fwGdcmIO::exception::Failed& e)
+            {
+                // NOTE : if there is no image, reading is stopped.
+                m_logger->critical(e.what());
+                imageSeries = ::fwMedData::ImageSeries::sptr();
+            }
+
+            // Set result
+            result = imageSeries;
+        }
+
+        // Get the RT file names (ModelSeries)
+        else if (::gdcm::MediaStorage::GetMSType(sopClassUID.c_str()) ==
+                 ::gdcm::MediaStorage::SurfaceSegmentationStorage)
+        {
+            ::fwMedData::ModelSeries::sptr modelSeries = ::fwDicomTools::Series::convertToModelSeries(dicomSeries);
+
+            // Create IOD Reader
+            ::fwGdcmIO::reader::iod::SurfaceSegmentationIOD iod(dicomSeries, instance, m_logger, m_callback,
+                                                                m_cancelled);
+
+
+            try
+            {
+                iod.read(modelSeries);
+            }
+            catch (const ::fwGdcmIO::exception::Failed& e)
+            {
+                // NOTE : if there is no image, reading is stopped.
+                m_logger->critical(e.what());
+                modelSeries = ::fwMedData::ModelSeries::sptr();
+            }
+
+            // Set result
+            result = modelSeries;
+        }
+        // If the DicomSeries contains a Spatial Fiducials
+        else if (::gdcm::MediaStorage::GetMSType(sopClassUID.c_str()) == ::gdcm::MediaStorage::SpacialFiducialsStorage)
+        {
+            // Retrieve referenced image instance
+            SPTR(::fwGdcmIO::container::DicomInstance) imageInstance =
+                this->getSpatialFiducialsReferencedSeriesInstance(dicomSeries);
+
+            if(imageInstance)
+            {
+                ::fwMedData::ImageSeries::sptr imageSeries =
+                    ::fwMedData::ImageSeries::dynamicCast(m_seriesContainerMap[imageInstance]);
+
+                // Create IOD Reader
+                ::fwGdcmIO::reader::iod::SpatialFiducialsIOD iod(dicomSeries, instance, m_logger, m_callback,
+                                                                 m_cancelled);
+
+                try
+                {
+                    iod.read(imageSeries);
+                }
+                catch (const ::fwGdcmIO::exception::Failed& e)
+                {
+                    //NOTE: no throw for reading error for SR and RT doc
+                    m_logger->critical("Spatial Fiducials reading failed: " + std::string(e.what()));
+                }
+            }
+            else
+            {
+                m_logger->critical(
+                    "The spatial fiducials series \""+dicomSeries->getInstanceUID()+
+                    "\" could not be read as it refers to an unknown series UID.");
+            }
+        }
+        // If the DicomSeries contains a SR
+        else if (::gdcm::MediaStorage::GetMSType(sopClassUID.c_str()) == ::gdcm::MediaStorage::EnhancedSR ||
+                 ::gdcm::MediaStorage::GetMSType(sopClassUID.c_str()) == ::gdcm::MediaStorage::ComprehensiveSR ||
+                 sopClassUID == "1.2.840.10008.5.1.4.1.1.88.34") // FIXME Replace hard coded string by "::gdcm::MediaStorage::GetMSType(sopClassUID.c_str()) == ::gdcm::MediaStorage::Comprehensive3DSR"
+        {
+            // Retrieve referenced image instance
+            SPTR(::fwGdcmIO::container::DicomInstance) imageInstance =
+                this->getStructuredReportReferencedSeriesInstance(dicomSeries);
+
+            ::fwMedData::ImageSeries::sptr imageSeries =
+                ::fwMedData::ImageSeries::dynamicCast(m_seriesContainerMap[imageInstance]);
+
+            if(imageInstance && imageSeries)
+            {
+                // Create readers
+                ::fwGdcmIO::reader::iod::ComprehensiveSRIOD iod(dicomSeries, imageInstance, m_logger, m_callback,
+                                                                m_cancelled);
+
+                try
+                {
+                    iod.read(imageSeries);
+                }
+                catch (const ::fwGdcmIO::exception::Failed& e)
+                {
+                    //NOTE: no throw for reading error for SR and RT doc
+                    m_logger->critical("Structured Report reading failed: " + std::string(e.what()));
+                }
+            }
+            else
+            {
+                m_logger->critical(
+                    "The structured report series \""+dicomSeries->getInstanceUID()+
+                    "\" could not be read as it refers to an unknown series UID.");
+            }
+
+        }
+        else
+        {
+            m_logger->critical("DICOM SOP Class UID \"" + sopClassUID +"\" is not supported by the selected reader.");
+        }
+
+    }
+
+    // Store series in instance map
+    m_seriesContainerMap[instance] = result;
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwGdcmIO::container::DicomInstance) Series::getSpatialFiducialsReferencedSeriesInstance(
+    ::fwMedData::DicomSeries::sptr dicomSeries)
+{
+    SPTR(::fwGdcmIO::container::DicomInstance) result;
+
+    // Path container
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = dicomSeries->getLocalDicomPaths();
+    const std::string filename = pathContainer.begin()->second.string();
+
+    // Create Reader
+    ::boost::shared_ptr< ::gdcm::Reader > reader = ::boost::shared_ptr< ::gdcm::Reader >( new ::gdcm::Reader );
+    reader->SetFileName( filename.c_str() );
+
+    // Series Instance UID of the referenced Series
+    std::string seriesInstanceUID = "";
+
+    if(reader->Read())
+    {
+        // Retrieve dataset
+        const ::gdcm::DataSet& datasetRoot = reader->GetFile().GetDataSet();
+
+        if(datasetRoot.FindDataElement(::gdcm::Tag(0x0008, 0x1115)))
+        {
+            // Get the content sequence
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence =
+                datasetRoot.GetDataElement(::gdcm::Tag(0x0008, 0x1115)).GetValueAsSQ();
+
+            if(sequence->GetNumberOfItems() > 0)
+            {
+                ::gdcm::Item referencedSeriesItem = sequence->GetItem(1);
+                const ::gdcm::DataSet& referencedSeriesItemDataset = referencedSeriesItem.GetNestedDataSet();
+
+                // Series Instance UID - Type 1
+                seriesInstanceUID =
+                    ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0020, 0x000E >(referencedSeriesItemDataset);
+            }
+        }
+    }
+
+    if(!seriesInstanceUID.empty())
+    {
+        for(SeriesContainerMapType::value_type v: m_seriesContainerMap)
+        {
+            if(v.first->getSeriesInstanceUID() == seriesInstanceUID)
+            {
+                result = v.first;
+                break;
+            }
+        }
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwGdcmIO::container::DicomInstance) Series::getStructuredReportReferencedSeriesInstance(
+    ::fwMedData::DicomSeries::sptr dicomSeries)
+{
+
+    SPTR(::fwGdcmIO::container::DicomInstance) result;
+
+    // Path container
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = dicomSeries->getLocalDicomPaths();
+    const std::string filename = pathContainer.begin()->second.string();
+
+    // Create Reader
+    ::boost::shared_ptr< ::gdcm::Reader > reader = ::boost::shared_ptr< ::gdcm::Reader >( new ::gdcm::Reader );
+    reader->SetFileName( filename.c_str() );
+
+    // Series Instance UID of the referenced Series
+    std::string seriesInstanceUID = "";
+
+    if(reader->Read())
+    {
+        // Retrieve dataset
+        const ::gdcm::DataSet& datasetRoot = reader->GetFile().GetDataSet();
+
+        // Pertinent Other Evidence Sequence - Type 1C
+        if(datasetRoot.FindDataElement(::gdcm::Tag(0x0040, 0xa385)))
+        {
+            // Get the content sequence
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence =
+                datasetRoot.GetDataElement(::gdcm::Tag(0x0040, 0xa385)).GetValueAsSQ();
+
+            if(sequence->GetNumberOfItems() > 0)
+            {
+                ::gdcm::Item studyItem = sequence->GetItem(1);
+                const ::gdcm::DataSet& studyItemDataset = studyItem.GetNestedDataSet();
+
+                if(studyItemDataset.FindDataElement(::gdcm::Tag(0x0008, 0x1115)))
+                {
+                    // Get the series sequence
+                    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > seriesSequence =
+                        studyItemDataset.GetDataElement(::gdcm::Tag(0x0008, 0x1115)).GetValueAsSQ();
+
+                    if(seriesSequence->GetNumberOfItems() > 0)
+                    {
+                        ::gdcm::Item seriesItem = seriesSequence->GetItem(1);
+                        const ::gdcm::DataSet& seriesItemDataset = seriesItem.GetNestedDataSet();
+                        seriesInstanceUID = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0020, 0x000E >(
+                            seriesItemDataset);
+                    }
+                }
+
+            }
+        }
+    }
+
+    if(!seriesInstanceUID.empty())
+    {
+        for(SeriesContainerMapType::value_type v: m_seriesContainerMap)
+        {
+            if(v.first->getSeriesInstanceUID() == seriesInstanceUID)
+            {
+                result = v.first;
+                break;
+            }
+        }
+    }
+
+    return result;
+}
+
+}  // namespace reader
+}  // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/SeriesDB.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/SeriesDB.cpp
new file mode 100644
index 0000000..74733ae
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/SeriesDB.cpp
@@ -0,0 +1,454 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/SeriesDB.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/DicomDir.hpp"
+#include "fwGdcmIO/helper/DicomSearch.hpp"
+#include "fwGdcmIO/helper/DicomSeries.hpp"
+#include "fwGdcmIO/reader/Series.hpp"
+
+#include <fwDataIO/reader/registry/macros.hpp>
+
+#include <fwDicomIOFilter/IFilter.hpp>
+#include <fwDicomIOFilter/factory/new.hpp>
+#include <fwDicomIOFilter/helper/Filter.hpp>
+
+#include <fwJobs/Aggregator.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Job.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwMedDataTools/helper/SeriesDB.hpp>
+
+#include <fwServices/registry/ActiveWorkers.hpp>
+
+#include <gdcmAttribute.h>
+#include <gdcmDirectory.h>
+#include <gdcmMediaStorage.h>
+#include <gdcmUIDs.h>
+
+#include <boost/algorithm/string/split.hpp>
+#include <boost/foreach.hpp>
+
+fwDataIOReaderRegisterMacro( ::fwGdcmIO::reader::SeriesDB );
+
+namespace fwGdcmIO
+{
+
+namespace reader
+{
+
+//------------------------------------------------------------------------------
+
+SeriesDB::SeriesDB(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableFolder< IObjectReader >(this),
+    ::fwData::location::enableMultiFiles< IObjectReader >(this),
+    m_isDicomdirActivated(false),
+    m_dicomFilterType(""),
+    m_job(::fwJobs::Aggregator::New("DICOM reader")),
+    m_enableBufferRotation(true),
+    m_dicomdirFileLookupJob(::fwJobs::Observer::New("Extracting information from DICOMDIR")),
+    m_regularFileLookupJob(::fwJobs::Observer::New("Looking for DICOM files")),
+    m_readerJob(::fwJobs::Observer::New("Reading DICOM files")),
+    m_completeDicomSeriesJob(::fwJobs::Observer::New("Completing series")),
+    m_converterJob(::fwJobs::Observer::New("DICOM data convertion"))
+{
+    SLM_TRACE_FUNC();
+
+    // Create logger
+    m_logger = ::fwLog::Logger::New();
+}
+
+//------------------------------------------------------------------------------
+
+SeriesDB::~SeriesDB()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDB::read()
+{
+    // Clear DicomSeries container
+    m_dicomSeriesContainer.clear();
+
+    m_job->add(m_dicomdirFileLookupJob);
+    m_job->add(m_regularFileLookupJob);
+    m_job->add(m_readerJob);
+    m_job->add(m_completeDicomSeriesJob);
+    m_job->add(m_converterJob);
+
+    try
+    {
+        this->readDicom(true);
+    }
+    catch (const std::exception& e)
+    {
+        m_logger->clear();
+        m_logger->critical("An error has occured during the reading process : unable to retrieve series.");
+
+        // Finish jobs
+        m_dicomdirFileLookupJob->finish();
+        m_regularFileLookupJob->finish();
+        m_readerJob->finish();
+        m_completeDicomSeriesJob->finish();
+        m_converterJob->finish();
+        m_job->run().get();
+        return;
+    }
+
+    // Apply Default filters
+    if(!m_dicomFilterType.empty())
+    {
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(m_dicomFilterType);
+        ::fwDicomIOFilter::helper::Filter::applyFilter(m_dicomSeriesContainer,filter, true, m_logger);
+    }
+
+    if(m_dicomSeriesContainer.empty())
+    {
+        m_logger->critical("Unable to retrieve series from the selected folder.");
+        m_converterJob->done();
+        m_converterJob->finish();
+    }
+    else
+    {
+        // Read series
+        this->convertDicomSeries();
+    }
+
+    try
+    {
+        // .get() throws exception that might have occured
+        m_job->run().get();
+    }
+    catch (const std::exception& e)
+    {
+        m_logger->critical("An error has occured during the reading process : " + std::string(e.what()));
+    }
+    catch( ... )
+    {
+        m_logger->critical("An unkown error has occured during the reading process.");
+    }
+
+    if(m_dicomSeriesContainer.empty())
+    {
+        m_logger->critical("Unable to retrieve series from the selected folder.");
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDB::readDicomSeries(bool checkIsDicom)
+{
+    // Clear DicomSeries container
+    m_dicomSeriesContainer.clear();
+
+    m_job->add(m_dicomdirFileLookupJob);
+    m_job->add(m_regularFileLookupJob);
+    m_job->add(m_readerJob);
+    m_job->add(m_completeDicomSeriesJob);
+
+    try
+    {
+        this->readDicom(checkIsDicom);
+    }
+    catch (const std::exception& e)
+    {
+        m_logger->clear();
+        m_logger->critical("An error has occured during the reading process : unable to retrieve series.");
+
+        // Finish jobs
+        m_dicomdirFileLookupJob->finish();
+        m_regularFileLookupJob->finish();
+        m_readerJob->finish();
+        m_completeDicomSeriesJob->finish();
+        m_job->run().get();
+        return;
+    }
+
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+
+    // Push Dicom Series
+    if(!m_job->cancelRequested())
+    {
+        for(::fwMedData::DicomSeries::sptr series: m_dicomSeriesContainer)
+        {
+            seriesDBHelper.add(series);
+        }
+    }
+
+    try
+    {
+        // .get() throws exception that might have occured
+        m_job->run().get();
+    }
+    catch (const std::exception& e)
+    {
+        m_logger->critical("An error has occured during the reading process : " + std::string(e.what()));
+    }
+    catch( ... )
+    {
+        m_logger->critical("An unkown error has occured during the reading process.");
+    }
+
+    if(m_dicomSeriesContainer.empty())
+    {
+        m_logger->critical("Unable to retrieve series from the selected folder.");
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDB::readDicom(const bool checkIsDicom)
+{
+    SLM_ASSERT("This reader only work on folder selection.",
+               (::fwData::location::have < ::fwData::location::Folder, ::fwDataIO::reader::IObjectReader > (this)));
+
+    // DICOMDIR
+    auto dicomdir = ::fwGdcmIO::helper::DicomDir::findDicomDir(this->getFolder());
+    if(m_isDicomdirActivated && ::boost::filesystem::exists(dicomdir))
+    {
+        // Create Dicom Series
+        ::fwGdcmIO::helper::DicomDir::retrieveDicomSeries(dicomdir,
+                                                          m_dicomSeriesContainer,
+                                                          m_logger,
+                                                          m_dicomdirFileLookupJob
+                                                          );
+        // Fill Dicom Series
+        ::fwGdcmIO::helper::DicomSeries helper;
+        helper.complete(m_dicomSeriesContainer, m_completeDicomSeriesJob);
+
+    }
+
+    // Finish DICOMDIR lookup
+    m_dicomdirFileLookupJob->done();
+    m_dicomdirFileLookupJob->finish();
+
+    // Regular read
+    if(!m_isDicomdirActivated || !::boost::filesystem::exists(dicomdir) || m_dicomSeriesContainer.empty())
+    {
+        m_readerJob->doneWork(0);
+
+        // Recursively search for dicom files
+        std::vector< std::string > filenames;
+        ::fwGdcmIO::helper::DicomSearch::searchRecursively(
+            this->getFolder(), filenames, checkIsDicom, m_regularFileLookupJob);
+
+        // Read Dicom Series
+        ::fwGdcmIO::helper::DicomSeries helper;
+        if(checkIsDicom)
+        {
+            m_dicomSeriesContainer = helper.read(filenames, m_readerJob, m_completeDicomSeriesJob);
+        }
+        else
+        {
+            m_dicomSeriesContainer.push_back(helper.createBlob(filenames));
+        }
+    }
+
+    // Finish regular lookup
+    m_regularFileLookupJob->done();
+    m_regularFileLookupJob->finish();
+
+    // Finish reading
+    m_readerJob->done();
+    m_readerJob->finish();
+
+    // Finish completing series
+    m_completeDicomSeriesJob->done();
+    m_completeDicomSeriesJob->finish();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDB::readFromDicomSeriesDB(::fwMedData::SeriesDB::csptr dicomSeriesDB, ::fwServices::IService::sptr notifier)
+{
+    // Clear DicomSeries container
+    m_dicomSeriesContainer.clear();
+
+    m_job->add(m_converterJob);
+
+    // Read series
+    for(::fwMedData::Series::sptr series: dicomSeriesDB->getContainer())
+    {
+        ::fwMedData::DicomSeries::sptr dicomSeries = ::fwMedData::DicomSeries::dynamicCast(series);
+        SLM_ASSERT("Trying to read a series which is not a DicomSeries.", dicomSeries);
+        m_dicomSeriesContainer.push_back(dicomSeries);
+    }
+
+    // Apply Default filters
+    if(!m_dicomFilterType.empty())
+    {
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(m_dicomFilterType);
+        ::fwDicomIOFilter::helper::Filter::applyFilter(m_dicomSeriesContainer,filter, true, m_logger);
+    }
+
+    if(m_dicomSeriesContainer.empty())
+    {
+        m_logger->critical("Unable to retrieve series from the selected folder.");
+        m_converterJob->done();
+        m_converterJob->finish();
+    }
+    else
+    {
+        // Read series
+        this->convertDicomSeries(notifier);
+    }
+
+    try
+    {
+        // .get() throws exception that might have occured
+        m_job->run().get();
+    }
+    catch (const std::exception& e)
+    {
+        m_logger->critical("An error has occured during the reading process : " + std::string(e.what()));
+    }
+    catch( ... )
+    {
+        m_logger->critical("An unkown error has occured during the reading process.");
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+bool SeriesDB::isDicomDirAvailable()
+{
+    auto dicomdir = ::fwGdcmIO::helper::DicomDir::findDicomDir(this->getFolder());
+    return ::boost::filesystem::exists(dicomdir);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDB::convertDicomSeries(::fwServices::IService::sptr notifier)
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+
+    // Sort DicomSeries
+    std::sort(m_dicomSeriesContainer.begin(), m_dicomSeriesContainer.end(), SeriesDB::dicomSeriesComparator);
+
+    // Create reader
+    SPTR(::fwGdcmIO::reader::Series) seriesReader = std::make_shared< ::fwGdcmIO::reader::Series >();
+    seriesReader->setBufferRotationEnabled(m_enableBufferRotation);
+    seriesReader->setLogger(m_logger);
+
+    // needed for seriesReader
+    seriesReader->addCallback([&](unsigned int& progress)
+            {
+            });
+
+    m_converterJob->setTotalWorkUnits(m_dicomSeriesContainer.size());
+
+    // Read series
+    std::uint64_t progress = 0;
+    for(const ::fwMedData::DicomSeries::sptr& dicomSeries: m_dicomSeriesContainer)
+    {
+        ::fwMedData::DicomSeries::SOPClassUIDContainerType sopClassUIDContainer = dicomSeries->getSOPClassUIDs();
+        FW_RAISE_IF("The series contains several SOPClassUIDs. Try to apply a filter in order to split the series.",
+                    sopClassUIDContainer.size() != 1);
+        std::string sopClassUID = sopClassUIDContainer.begin()->c_str();
+
+        const SupportedSOPClassContainerType::iterator bIt = m_supportedSOPClassContainer.begin();
+        const SupportedSOPClassContainerType::iterator eIt = m_supportedSOPClassContainer.end();
+
+        if(m_supportedSOPClassContainer.empty() || std::find(bIt, eIt, sopClassUID) != eIt)
+        {
+            try
+            {
+
+                ::fwMedData::Series::sptr series = seriesReader->read(dicomSeries);
+
+                if(series)
+                {
+                    // Add the series to the DB
+                    ::fwMedDataTools::helper::SeriesDB seriesDBHelper(seriesDB);
+                    seriesDBHelper.add(series);
+
+                    if(notifier)
+                    {
+                        seriesDBHelper.notify();
+                    }
+                }
+            }
+            catch (::fwGdcmIO::exception::Failed& e)
+            {
+                m_logger->critical("Unable to read series : " + dicomSeries->getInstanceUID());
+            }
+        }
+        else
+        {
+            m_logger->critical("DICOM SOP Class UID \"" + sopClassUID +"\" is not supported by the selected reader.");
+        }
+
+        if(m_job->cancelRequested())
+        {
+            break;
+        }
+
+        m_converterJob->doneWork(++progress);
+    }
+
+    m_converterJob->done();
+    m_converterJob->finish();
+
+}
+
+//------------------------------------------------------------------------------
+
+bool SeriesDB::dicomSeriesComparator(SPTR(::fwMedData::DicomSeries)a, SPTR(::fwMedData::DicomSeries)b)
+{
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType aSOPClassUIDContainer = a->getSOPClassUIDs();
+    std::string aSOPClassUID = *(aSOPClassUIDContainer.begin());
+    ::fwMedData::DicomSeries::SOPClassUIDContainerType bSOPClassUIDContainer = b->getSOPClassUIDs();
+    std::string bSOPClassUID = *(bSOPClassUIDContainer.begin());
+
+    // a > b if a contains a SR and not b
+    bool aIsAnImage = (::gdcm::MediaStorage::GetMSType(aSOPClassUID.c_str()) == ::gdcm::MediaStorage::EnhancedSR ||
+                       ::gdcm::MediaStorage::GetMSType(aSOPClassUID.c_str()) == ::gdcm::MediaStorage::ComprehensiveSR ||
+                       aSOPClassUID == "1.2.840.10008.5.1.4.1.1.88.34" || // FIXME Replace hard coded string by "::gdcm::MediaStorage::GetMSType(aSOPClassUID.c_str()) == ::gdcm::MediaStorage::Comprehensive3DSR"
+                       ::gdcm::MediaStorage::GetMSType(aSOPClassUID.c_str()) ==
+                       ::gdcm::MediaStorage::SpacialFiducialsStorage ||
+                       ::gdcm::MediaStorage::GetMSType(aSOPClassUID.c_str()) ==
+                       ::gdcm::MediaStorage::SurfaceSegmentationStorage);
+
+    bool bIsAnImage = (::gdcm::MediaStorage::GetMSType(bSOPClassUID.c_str()) == ::gdcm::MediaStorage::EnhancedSR ||
+                       ::gdcm::MediaStorage::GetMSType(bSOPClassUID.c_str()) == ::gdcm::MediaStorage::ComprehensiveSR ||
+                       bSOPClassUID == "1.2.840.10008.5.1.4.1.1.88.34" || // FIXME Replace hard coded string by "::gdcm::MediaStorage::GetMSType(bSOPClassUID.c_str()) == ::gdcm::MediaStorage::Comprehensive3DSR"
+                       ::gdcm::MediaStorage::GetMSType(bSOPClassUID.c_str()) ==
+                       ::gdcm::MediaStorage::SpacialFiducialsStorage ||
+                       ::gdcm::MediaStorage::GetMSType(aSOPClassUID.c_str()) ==
+                       ::gdcm::MediaStorage::SurfaceSegmentationStorage);
+
+    return bIsAnImage && !aIsAnImage;
+}
+
+//------------------------------------------------------------------------------
+
+SeriesDB::DicomSeriesContainerType& SeriesDB::getDicomSeries()
+{
+    return m_dicomSeriesContainer;
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwJobs::IJob) SeriesDB::getJob() const
+{
+    return m_job;
+}
+
+//------------------------------------------------------------------------------
+
+}  // namespace reader
+
+}  // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Document.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Document.cpp
new file mode 100644
index 0000000..bf8605d
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Document.cpp
@@ -0,0 +1,67 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRContainerNode.hpp"
+#include "fwGdcmIO/helper/StructuredReport.hpp"
+#include "fwGdcmIO/reader/ie/Document.hpp"
+#include "fwGdcmIO/reader/tid/MeasurementReport.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Document::Document(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                   SPTR(::gdcm::Reader)reader,
+                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                   ::fwData::Image::sptr image,
+                   ::fwLog::Logger::sptr logger,
+                   const ProgressCallback& callback,
+                   const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwData::Image >(dicomSeries, reader, instance, image, logger,
+                                                                 callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Document::~Document()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Document::readSR() throw (::fwGdcmIO::exception::Failed)
+{
+    // Retrieve dataset
+    const ::gdcm::DataSet& datasetRoot = m_reader->GetFile().GetDataSet();
+
+    // Create SR from Dataset
+    SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) rootContainerNode =
+        ::fwGdcmIO::helper::StructuredReport::readSR(datasetRoot);
+
+    if(rootContainerNode)
+    {
+        // Try to read a measurement report
+        ::fwGdcmIO::reader::tid::MeasurementReport report(m_dicomSeries, m_reader, m_instance, m_object, m_logger);
+        report.readSR(rootContainerNode);
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Equipment.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Equipment.cpp
new file mode 100644
index 0000000..d887f72
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Equipment.cpp
@@ -0,0 +1,70 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Equipment.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwRuntime/profile/Profile.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Equipment::Equipment(::fwMedData::DicomSeries::sptr dicomSeries,
+                     SPTR(::gdcm::Reader)reader,
+                     SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                     ::fwMedData::Equipment::sptr equipment,
+                     ::fwLog::Logger::sptr logger,
+                     const ProgressCallback& callback,
+                     const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Equipment >(dicomSeries, reader, instance, equipment,
+                                                                        logger, callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Equipment::~Equipment()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Equipment::readGeneralEquipmentModule()
+{
+    // Retrieve dataset
+    const ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // Institution Name - Type 3
+    const std::string& institutName = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0080 >(dataset);
+    m_object->setInstitutionName(institutName);
+
+    // Manufacturer - Type 2
+    // NOTE: Not used in FW4SPL
+
+    // Manufacturer’s Model Name - Type 3 (Type 1 for EnhancedGeneralEquipmentModule)
+    // NOTE: Not used in FW4SPL
+
+    // Device Serial Number - Type 3 (Type 1 for EnhancedGeneralEquipmentModule)
+    // NOTE: Not used in FW4SPL
+
+    // Software Versions - Type 3 (Type 1 for EnhancedGeneralEquipmentModule)
+    // NOTE: Not used in FW4SPL
+}
+
+//------------------------------------------------------------------------------
+
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp
new file mode 100644
index 0000000..3995844
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Image.cpp
@@ -0,0 +1,664 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/ie/Image.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Image.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwDicomTools/Image.hpp>
+
+#include <fwMath/VectorFunctions.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <gdcmIPPSorter.h>
+#include <gdcmImageApplyLookupTable.h>
+#include <gdcmImageHelper.h>
+#include <gdcmImageReader.h>
+#include <gdcmPixelFormat.h>
+#include <gdcmRescaler.h>
+#include <gdcmUIDGenerator.h>
+
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/math/special_functions/round.hpp>
+#include <boost/numeric/ublas/io.hpp>
+#include <boost/numeric/ublas/lu.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Image::Image(SPTR(::fwMedData::DicomSeries)dicomSeries,
+             SPTR(::gdcm::Reader)reader,
+             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+             ::fwData::Image::sptr image,
+             ::fwLog::Logger::sptr logger,
+             const ProgressCallback& callback,
+             const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwData::Image >(dicomSeries, reader, instance, image, logger,
+                                                                 callback, cancelled),
+    m_enableBufferRotation(true)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Image::~Image()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Image::readImagePlaneModule()
+{
+    // Retrieve GDCM image
+    SPTR(::gdcm::ImageReader) imageReader = std::static_pointer_cast< ::gdcm::ImageReader >(m_reader);
+    const ::gdcm::Image& gdcmImage = imageReader->GetImage();
+
+    // Retrieve dataset
+    const ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // Image Position (Patient) - Type 1
+    const double* gdcmOrigin = gdcmImage.GetOrigin();
+    ::fwData::Image::OriginType origin(3,0);
+    if ( gdcmOrigin != 0 )
+    {
+        std::copy( gdcmOrigin, gdcmOrigin+3, origin.begin() );
+    }
+    m_object->setOrigin(origin);
+
+    // Pixel Spacing - Type 1
+    // Image dimension
+    const unsigned int dimension = gdcmImage.GetNumberOfDimensions();
+    OSLM_TRACE("Image's dimension : " << dimension);
+
+    // Image's spacing
+    const double* gdcmSpacing = gdcmImage.GetSpacing();
+    ::fwData::Image::SpacingType spacing (3,1);
+    if ( gdcmSpacing != 0 )
+    {
+        std::copy( gdcmSpacing, gdcmSpacing+dimension, spacing.begin() );
+    }
+
+    // Compute Z image spacing when extra information is required
+    std::string sliceThickness       = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0018,0x0050>(dataset);
+    std::string spacingBetweenSlices = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0018,0x0088>(dataset);
+
+    if(m_dicomSeries->hasComputedValues("SliceThickness"))
+    {
+        spacing[2] = ::boost::lexical_cast< double >(m_dicomSeries->getComputedTagValues().at("SliceThickness"));
+        std::stringstream ss;
+        ss << "Voxel depth has been computed using the image slice positions. The computed value is " << spacing[2] <<
+            " instead of " << sliceThickness << " for the SliceThickness tag.";
+        m_logger->warning(ss.str());
+    }
+    else if(!sliceThickness.empty())
+    {
+        spacing[2] = ::boost::lexical_cast< double >(sliceThickness);
+        std::stringstream ss;
+        ss << "Voxel depth has been retrieved using the SliceThickness tag value. The retrieved value is " <<
+            spacing[2] << ".";
+        m_logger->information(ss.str());
+    }
+    else if(!spacingBetweenSlices.empty())
+    {
+        spacing[2] = ::boost::lexical_cast< double >(spacingBetweenSlices);
+        std::stringstream ss;
+        ss << "Voxel depth has been retrieved using the SpacingBetweenSlices tag value. The retrieved value is " <<
+            spacing[2] << ".";
+        m_logger->information(ss.str());
+    }
+
+    OSLM_TRACE("Image's spacing : "<<spacing[0]<<"x"<<spacing[1]<<"x"<<spacing[2]);
+    m_object->setSpacing( spacing );
+
+}
+
+//------------------------------------------------------------------------------
+
+void Image::readVOILUTModule()
+{
+    // Retrieve dataset
+    const ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    //Image's window center (double)
+    std::string windowCenter = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028,0x1050>(dataset);
+    std::vector<std::string> splitedWindowCenters;
+    if ( !windowCenter.empty() )
+    {
+        // If there is several window center we only take the first one
+        ::boost::split( splitedWindowCenters, windowCenter, ::boost::is_any_of( "\\" ) );
+        m_object->setWindowCenter( ::boost::lexical_cast< double >(splitedWindowCenters[0]));
+    }
+    OSLM_TRACE("Image's window center : " << m_object->getWindowCenter());
+
+    //Image's window width (double)
+    std::string windowWidth = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028,0x1051>(dataset);
+    std::vector<std::string> splitedWindowWidth;
+    if ( !windowWidth.empty() )
+    {
+        // If there is several window width we only take the first one
+        ::boost::split( splitedWindowWidth, windowWidth, ::boost::is_any_of( "\\" ) );
+        m_object->setWindowWidth( ::boost::lexical_cast< double >(splitedWindowWidth[0]));
+    }
+    OSLM_TRACE("Image's window width : " << m_object->getWindowWidth());
+
+}
+
+//------------------------------------------------------------------------------
+
+std::vector<double> getRescaleInterceptSlopeValue(::gdcm::ImageReader* imageReader)
+{
+    // Retrieve dataset
+    const ::gdcm::DataSet& dataset = imageReader->GetFile().GetDataSet();
+
+    // Retrieve rescale values
+    std::vector< double > rescale = ::gdcm::ImageHelper::GetRescaleInterceptSlopeValue(imageReader->GetFile());
+
+    // Correct Rescale Intercept and Rescale Slope as GDCM may fail to retrieve them.
+    if(dataset.FindDataElement(::gdcm::Tag(0x0028,0x1052)) && dataset.FindDataElement(::gdcm::Tag(0x0028,0x1053)))
+    {
+        rescale[0] = ::fwGdcmIO::helper::DicomData::getTagValue<0x0028,0x1052, double>(dataset);
+        rescale[1] = ::fwGdcmIO::helper::DicomData::getTagValue<0x0028,0x1053, double>(dataset);
+    }
+
+    return rescale;
+}
+
+//------------------------------------------------------------------------------
+
+void Image::readImagePixelModule()
+{
+    // Retrieve GDCM image
+    SPTR(::gdcm::ImageReader) imageReader = std::static_pointer_cast< ::gdcm::ImageReader >(m_reader);
+    const ::gdcm::Image& gdcmImage = imageReader->GetImage();
+
+    // Retrieve dataset
+    const ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // Retrieve image information before processing the rescaling
+    ::gdcm::PixelFormat pixelFormat = ::gdcm::ImageHelper::GetPixelFormatValue(imageReader->GetFile());
+
+    // Retrieve rescale intercept/slope values
+    std::vector<double> rescale = getRescaleInterceptSlopeValue(imageReader.get());
+    double rescaleIntercept     = rescale[0];
+    double rescaleSlope         = rescale[1];
+
+    unsigned short samplesPerPixel     = pixelFormat.GetSamplesPerPixel();
+    unsigned short bitsAllocated       = pixelFormat.GetBitsAllocated();
+    unsigned short bitsStored          = pixelFormat.GetBitsStored();
+    unsigned short highBit             = pixelFormat.GetHighBit();
+    unsigned short pixelRepresentation = pixelFormat.GetPixelRepresentation();
+
+    // Compute final image type
+    ::fwDicomTools::Image imageHelper(
+        samplesPerPixel,bitsAllocated,bitsStored, highBit, pixelRepresentation, rescaleSlope, rescaleIntercept);
+    ::fwTools::Type imageType = imageHelper.findImageTypeFromMinMaxValues();
+    m_object->setType(imageType);
+    ::gdcm::PixelFormat targetPixelFormat = ::fwGdcmIO::helper::DicomData::getPixelType(m_object);
+
+    // Compute number of components
+    std::string photometricInterpretation = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0028,0x0004>(dataset);
+    std::string pixelPresentation         = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0008,0x9205>(dataset);
+
+    if(photometricInterpretation == "MONOCHROME2")
+    {
+        m_object->setNumberOfComponents(1);
+    }
+    else if(photometricInterpretation == "RGB" || photometricInterpretation == "YBR")
+    {
+        m_object->setNumberOfComponents(3);
+    }
+    else if(photometricInterpretation == "ARGB" || photometricInterpretation == "CMYK")
+    {
+        m_object->setNumberOfComponents(4);
+    }
+    else if(photometricInterpretation == "PALETTE COLOR" || pixelPresentation == "COLOR")
+    {
+        m_object->setNumberOfComponents(3);
+    }
+    else
+    {
+        std::stringstream ss;
+        ss << "The photometric interpretation \"" + photometricInterpretation + "\" is not supported.";
+        throw ::fwGdcmIO::exception::Failed(ss.str());
+    }
+
+    // Retrieve image dimensions
+    std::vector<unsigned int> dimensions = ::gdcm::ImageHelper::GetDimensionsValue(imageReader->GetFile());
+
+    // Compute real image size (we assume every instance has the same number of
+    // slices (1 for CT and MR, may be more for enhanced CT and MR)
+    const unsigned long frameBufferSize = gdcmImage.GetBufferLength();
+    const unsigned long depth           = frameBufferSize / (dimensions[0] * dimensions[1] * (bitsAllocated/8));
+    dimensions[2] = static_cast<unsigned int>(m_dicomSeries->getLocalDicomPaths().size() * depth);
+    m_object->setSize(::boost::assign::list_of(dimensions[0])(dimensions[1])(dimensions[2]));
+
+    OSLM_TRACE("Image dimensions : [" << dimensions[0] << "," <<dimensions[1] << "," << dimensions[2] << "]");
+
+    const unsigned long imageBufferSize    = dimensions[0] * dimensions[1] * dimensions[2] * (bitsAllocated/8);
+    const unsigned long newImageBufferSize = dimensions[0] * dimensions[1] * dimensions[2] *
+                                             (targetPixelFormat.GetBitsAllocated()/8);
+
+    OSLM_TRACE("Image buffer size : " << imageBufferSize);
+    OSLM_TRACE("New image buffer size : " << newImageBufferSize);
+
+    // Let's read the image buffer
+    bool performRescale = (photometricInterpretation != "PALETTE COLOR" && pixelPresentation != "COLOR");
+    char* imageBuffer   = this->readImageBuffer(dimensions, bitsAllocated, targetPixelFormat.GetBitsAllocated(),
+                                                performRescale);
+
+
+    // Correct image buffer according to the image orientation
+    if(!m_cancelled && m_enableBufferRotation)
+    {
+        imageBuffer = this->correctImageOrientation(imageBuffer, dimensions,
+                                                    (performRescale) ? targetPixelFormat.GetBitsAllocated() : bitsAllocated);
+    }
+
+    // Apply lookup table if required
+    if(!m_cancelled && (photometricInterpretation == "PALETTE COLOR" || pixelPresentation == "COLOR"))
+    {
+        try
+        {
+            // Create new buffer
+            char* coloredBuffer = 0;
+            coloredBuffer = new char[newImageBufferSize*3];
+
+            // Apply lookup
+            gdcmImage.GetLUT().Decode(coloredBuffer, newImageBufferSize*3, imageBuffer, imageBufferSize);
+
+            // Swap buffers
+            delete[] imageBuffer;
+            imageBuffer = coloredBuffer;
+        }
+        catch (...)
+        {
+            throw ::fwGdcmIO::exception::Failed("There is not enough memory available to open this image.");
+        }
+    }
+
+    // Set image buffer
+    ::fwData::Array::sptr array = m_object->getDataArray();
+    ::fwDataTools::helper::Array helper(array);
+    helper.setBuffer(imageBuffer, true, m_object->getType(), m_object->getSize(), m_object->getNumberOfComponents());
+
+}
+
+//------------------------------------------------------------------------------
+
+char* Image::readImageBuffer(const std::vector<unsigned int>& dimensions, unsigned short bitsAllocated,
+                             unsigned short newBitsAllocated, bool performRescale) throw(::fwGdcmIO::exception::Failed)
+{
+    // Retrieve GDCM image
+    SPTR(::gdcm::ImageReader) imageReader = std::static_pointer_cast< ::gdcm::ImageReader >(m_reader);
+    const ::gdcm::Image& gdcmFirstImage = imageReader->GetImage();
+
+    // Path container
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = m_dicomSeries->getLocalDicomPaths();
+
+    // Raw buffer for all frames
+    char* frameBuffer;
+    char* imageBuffer;
+    const unsigned long frameBufferSize    = gdcmFirstImage.GetBufferLength();
+    const unsigned long newFrameBufferSize = frameBufferSize * (newBitsAllocated/bitsAllocated);
+    const unsigned long imageBufferSize    = dimensions.at(0) * dimensions.at(1) * dimensions.at(2) *
+                                             ((performRescale ? newBitsAllocated : bitsAllocated)/8);
+
+    // Allocate raw buffer
+    try
+    {
+        frameBuffer = new char[frameBufferSize];
+        imageBuffer = new char[imageBufferSize];
+    }
+    catch (...)
+    {
+        throw ::fwGdcmIO::exception::Failed("There is not enough memory available to open this image.");
+    }
+
+    // Read every frames
+    unsigned int frameNumber = 0;
+    for(::fwMedData::DicomSeries::DicomPathContainerType::value_type v: pathContainer)
+    {
+        // Get filename
+        const std::string& filename = v.second.string();
+
+        // Read a frame
+        ::gdcm::ImageReader frameReader;
+        frameReader.SetFileName( filename.c_str() );
+        if ( frameReader.Read() )
+        {
+            const ::gdcm::Image& gdcmImage = frameReader.GetImage();
+
+            // Check frame buffer size
+            if(frameBufferSize != gdcmImage.GetBufferLength())
+            {
+                throw ::fwGdcmIO::exception::Failed("The frame buffer does not have the expected size : " + filename);
+            }
+
+            // Get raw buffer and set it in the image buffer
+            if ( !gdcmImage.GetBuffer( frameBuffer ) )
+            {
+                throw ::fwGdcmIO::exception::Failed("Failed to get a frame buffer");
+            }
+        }
+        else
+        {
+            std::stringstream ss;
+            ss << "Reading error on frame : " << frameNumber;
+            throw ::fwGdcmIO::exception::Failed(ss.str());
+        }
+
+
+        // Rescale
+        if(performRescale)
+        {
+            // Retrieve rescale intercept/slope values
+            std::vector<double> rescale = getRescaleInterceptSlopeValue(&frameReader);
+            double rescaleIntercept     = rescale[0];
+            double rescaleSlope         = rescale[1];
+
+            // Retrieve image information before processing the rescaling
+            ::gdcm::PixelFormat pixelFormat =
+                ::gdcm::ImageHelper::GetPixelFormatValue(frameReader.GetFile());
+            ::gdcm::PixelFormat::ScalarType scalarType = pixelFormat.GetScalarType();
+            ::gdcm::PixelFormat targetPixelFormat      = ::fwGdcmIO::helper::DicomData::getPixelType(m_object);
+
+            // Create rescaler
+            ::gdcm::Rescaler rescaler;
+            rescaler.SetIntercept(rescaleIntercept);
+            rescaler.SetSlope(rescaleSlope);
+            rescaler.SetPixelFormat(scalarType);
+            rescaler.SetTargetPixelType(targetPixelFormat.GetScalarType());
+            rescaler.SetUseTargetPixelType(true);
+
+            // Rescale the image
+            rescaler.Rescale(imageBuffer + (frameNumber * newFrameBufferSize), frameBuffer, frameBufferSize);
+        }
+        else
+        {
+            // Copy bytes
+            memcpy(imageBuffer + frameNumber * frameBufferSize, frameBuffer, frameBufferSize);
+        }
+
+        // Reference SOP Instance UID in dicomInstance for SR reading
+        const ::gdcm::DataSet& gdcmDatasetRoot = frameReader.GetFile().GetDataSet();
+        const std::string sopInstanceUID       = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0008,0x0018>(
+            gdcmDatasetRoot);
+        if(!sopInstanceUID.empty())
+        {
+            m_instance->getRefSOPInstanceUIDContainer().push_back(sopInstanceUID);
+        }
+        else
+        {
+            m_logger->warning("A frame with an undefined SOP instance UID has been detected.");
+        }
+
+        // Next frame
+        ++frameNumber;
+
+        unsigned int progress =
+            static_cast<unsigned int>(18 + (frameNumber*100/static_cast<double>(pathContainer.size())) * 0.6);
+        m_progressCallback(progress);
+
+        if(m_cancelled)
+        {
+            break;
+        }
+    }
+
+    // Delete frame buffer
+    delete[] frameBuffer;
+
+    return imageBuffer;
+}
+
+//------------------------------------------------------------------------------
+
+char* Image::correctImageOrientation(char* buffer, const std::vector<unsigned int>& dimensions,
+                                     unsigned short bitsAllocated)
+{
+    char* result = buffer;
+
+    // Retrieve GDCM image
+    SPTR(::gdcm::ImageReader) imageReader = std::static_pointer_cast< ::gdcm::ImageReader >(m_reader);
+    const ::gdcm::Image& gdcmImage = imageReader->GetImage();
+
+    // Retrieve image orientation
+    const double* directionCosines = gdcmImage.GetDirectionCosines();
+
+    // Compute U vector
+    fwVec3d imageOrientationU =
+    {::boost::math::round(directionCosines[0]), ::boost::math::round(directionCosines[1]),
+     ::boost::math::round(directionCosines[2])};
+    // Try to find the closest axe
+    if((fabs(imageOrientationU[0]) + fabs(imageOrientationU[1]) + fabs(imageOrientationU[2])) > 1)
+    {
+        if(fabs(directionCosines[0]) < fabs(directionCosines[1]) ||
+           fabs(directionCosines[0]) < fabs(directionCosines[2]))
+        {
+            imageOrientationU[0] = 0;
+        }
+        if(fabs(directionCosines[1]) < fabs(directionCosines[0]) ||
+           fabs(directionCosines[1]) < fabs(directionCosines[2]))
+        {
+            imageOrientationU[1] = 0;
+        }
+        if(fabs(directionCosines[2]) < fabs(directionCosines[0]) ||
+           fabs(directionCosines[2]) < fabs(directionCosines[1]))
+        {
+            imageOrientationU[2] = 0;
+        }
+        m_logger->warning(
+            "Unable to determine clearly the orientation of the image. The software may display the image in the wrong direction.");
+    }
+
+    // Compute V vector
+    fwVec3d imageOrientationV =
+    {::boost::math::round(directionCosines[3]), ::boost::math::round(directionCosines[4]),
+     ::boost::math::round(directionCosines[5])};
+    // Try to find the closest axe
+    if((fabs(imageOrientationV[0]) + fabs(imageOrientationV[1]) + fabs(imageOrientationV[2])) > 1)
+    {
+        if(fabs(directionCosines[3]) < fabs(directionCosines[4]) ||
+           fabs(directionCosines[3]) < fabs(directionCosines[5]))
+        {
+            imageOrientationV[0] = 0;
+        }
+        if(fabs(directionCosines[4]) < fabs(directionCosines[3]) ||
+           fabs(directionCosines[4]) < fabs(directionCosines[5]))
+        {
+            imageOrientationV[1] = 0;
+        }
+        if(fabs(directionCosines[5]) < fabs(directionCosines[3]) ||
+           fabs(directionCosines[5]) < fabs(directionCosines[4]))
+        {
+            imageOrientationV[2] = 0;
+        }
+        m_logger->warning(
+            "Unable to determine clearly the orientation of the image. The software may display the image in the wrong direction.");
+    }
+
+    // Compute W vector
+    const fwVec3d imageOrientationW = ::fwMath::cross(imageOrientationU, imageOrientationV);
+
+    // Create orientation matrix
+    Image::MatrixType matrix(4,4);
+    matrix(0,0) = imageOrientationU[0];
+    matrix(1,0) = imageOrientationU[1];
+    matrix(2,0) = imageOrientationU[2];
+    matrix(3,0) = 0;
+    matrix(0,1) = imageOrientationV[0];
+    matrix(1,1) = imageOrientationV[1];
+    matrix(2,1) = imageOrientationV[2];
+    matrix(3,1) = 0;
+    matrix(0,2) = imageOrientationW[0];
+    matrix(1,2) = imageOrientationW[1];
+    matrix(2,2) = imageOrientationW[2];
+    matrix(3,2) = 0;
+    matrix(0,3) = 0;
+    matrix(1,3) = 0;
+    matrix(2,3) = 0;
+    matrix(3,3) = 1;
+
+    // Compute inverse matrix in order to rotate the buffer
+    Image::MatrixType inverseMatrix  = this->computeInverseMatrix(matrix);
+    Image::MatrixType identityMatrix = ::boost::numeric::ublas::identity_matrix< double >(inverseMatrix.size1());
+
+    // Check whether the image must be rotated or not
+    if(!::boost::numeric::ublas::detail::expression_type_check(inverseMatrix,identityMatrix))
+    {
+        // Compute new image size
+        VectorType sizeVector(4);
+        sizeVector(0) = dimensions.at(0);
+        sizeVector(1) = dimensions.at(1);
+        sizeVector(2) = dimensions.at(2);
+        VectorType newSizeVector = ::boost::numeric::ublas::prod(sizeVector, inverseMatrix);
+        unsigned short newSizeX  = static_cast<unsigned short>(fabs(newSizeVector[0]));
+        unsigned short newSizeY  = static_cast<unsigned short>(fabs(newSizeVector[1]));
+        unsigned short newSizeZ  = static_cast<unsigned short>(fabs(newSizeVector[2]));
+        newSizeVector(0) = newSizeX;
+        newSizeVector(1) = newSizeY;
+        newSizeVector(2) = newSizeZ;
+
+        // Compute old size from the new absolute size in order to retrieve pixel flips
+        VectorType oldSizeVector = ::boost::numeric::ublas::prod(newSizeVector, matrix);
+
+        // Create new buffer to store rotated image
+        const unsigned long size = dimensions.at(0) * dimensions.at(1) * dimensions.at(2) * (bitsAllocated/8);
+        char* newBuffer          = new char[size];
+
+        // Rotate image
+        unsigned short x, y, z, oldx, oldy, oldz;
+        for(z = 0; z < newSizeZ && !m_cancelled; ++z)
+        {
+            for(y = 0; y < newSizeY; ++y)
+            {
+                for(x = 0; x < newSizeX; ++x)
+                {
+                    // Create new position
+                    VectorType newPosition(4);
+                    newPosition(0) = x;
+                    newPosition(1) = y;
+                    newPosition(2) = z;
+
+                    // Compute old position
+                    VectorType oldPosition = ::boost::numeric::ublas::prod(newPosition, matrix);
+                    oldx =
+                        (oldSizeVector[0]>
+                         0) ? static_cast<unsigned short>(oldPosition[0]) : static_cast<unsigned short>((
+                                                                                                            dimensions.
+                                                                                                            at(0)-1)+
+                                                                                                        oldPosition[0]);
+                    oldy =
+                        (oldSizeVector[1]>
+                         0) ? static_cast<unsigned short>(oldPosition[1]) : static_cast<unsigned short>((
+                                                                                                            dimensions.
+                                                                                                            at(1)-1)+
+                                                                                                        oldPosition[1]);
+                    oldz =
+                        (oldSizeVector[2]>
+                         0) ? static_cast<unsigned short>(oldPosition[2]) : static_cast<unsigned short>((
+                                                                                                            dimensions.
+                                                                                                            at(2)-1)+
+                                                                                                        oldPosition[2]);
+
+                    // Compute indices
+                    unsigned int positionIndex    = (x + (y*newSizeX) + z*(newSizeX*newSizeY)) * (bitsAllocated/8);
+                    unsigned int oldPositionIndex =
+                        (oldx + (oldy*dimensions.at(0)) + oldz*(dimensions.at(0)*dimensions.at(1))) *
+                        (bitsAllocated/8);
+
+                    // Copy bytes
+                    memcpy(&newBuffer[positionIndex], &buffer[oldPositionIndex], (bitsAllocated/8));
+                }
+            }
+            unsigned int progress = static_cast<unsigned int>(78 + (z*100./newSizeZ) * 0.2);
+            m_progressCallback(progress);
+        }
+
+        result = newBuffer;
+        delete[] buffer;
+
+        // Update image size
+        m_object->setSize(::boost::assign::list_of(newSizeX)(newSizeY)(newSizeZ));
+
+        // Update image spacing
+        ::fwData::Image::SpacingType spacing = m_object->getSpacing();
+        VectorType spacingVector(4);
+        spacingVector(0) = spacing[0];
+        spacingVector(1) = spacing[1];
+        spacingVector(2) = spacing[2];
+        VectorType newSpacingVector = ::boost::numeric::ublas::prod(spacingVector,inverseMatrix);
+        ::fwData::Image::SpacingType newSpacing(3,1);
+        newSpacing[0] = fabs(newSpacingVector[0]);
+        newSpacing[1] = fabs(newSpacingVector[1]);
+        newSpacing[2] = fabs(newSpacingVector[2]);
+        m_object->setSpacing( newSpacing );
+
+        // Update image origin
+        ::fwData::Image::OriginType origin = m_object->getOrigin();
+        VectorType originVector(4);
+        originVector(0) = origin[0];
+        originVector(1) = origin[1];
+        originVector(2) = origin[2];
+        VectorType newOriginVector = ::boost::numeric::ublas::prod(originVector,inverseMatrix);
+        ::fwData::Image::OriginType newOrigin(3,0);
+        newOrigin[0] = newOriginVector[0];
+        newOrigin[1] = newOriginVector[1];
+        newOrigin[2] = newOriginVector[2];
+        m_object->setOrigin( newOrigin );
+
+        m_logger->warning(
+            "Image buffer has been rotated in order to match patient orientation : image orgin could be wrong.");
+    }
+
+    return result;
+}
+
+//------------------------------------------------------------------------------
+
+Image::MatrixType Image::computeInverseMatrix(MatrixType matrix)
+{
+    // Create output matrix (identity)
+    Image::MatrixType output(matrix.size1(),matrix.size2());
+    output.assign(::boost::numeric::ublas::identity_matrix< double >(output.size1()));
+
+    // Create a permutation matrix for the LU-factorization
+    boost::numeric::ublas::permutation_matrix< std::size_t > perm(matrix.size1());
+
+    // Perform LU-factorization
+    long unsigned int res = boost::numeric::ublas::lu_factorize(matrix, perm);
+    if (res != 0)
+    {
+        SLM_WARN("Cannot compute matrix.");
+    }
+    else
+    {
+        // Backsubstitute to get the inverse
+        boost::numeric::ublas::lu_substitute(matrix, perm, output);
+    }
+
+    // Return inverse matrix or identity
+    return output;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Patient.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Patient.cpp
new file mode 100644
index 0000000..936dfbb
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Patient.cpp
@@ -0,0 +1,67 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Patient.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Patient.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Patient::Patient(::fwMedData::DicomSeries::sptr dicomSeries,
+                 SPTR(::gdcm::Reader)reader,
+                 SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                 ::fwMedData::Patient::sptr patient,
+                 ::fwLog::Logger::sptr logger,
+                 const ProgressCallback& callback,
+                 const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Patient >(dicomSeries, reader, instance, patient, logger,
+                                                                      callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Patient::~Patient()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Patient::readPatientModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // Patient's name - Type 2
+    const std::string& patientName = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0010, 0x0010 >(dataset);
+    m_object->setName(patientName);
+
+    // Patient's ID - Type 2
+    const std::string& patientId = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0010, 0x0020 >(dataset);
+    m_object->setPatientId(patientId);
+
+    // Patient's birth date - Type 2
+    const std::string& birthDate = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0010, 0x0030 >(dataset);
+    m_object->setBirthdate(birthDate);
+
+    // Patient's sex - Type 2
+    const std::string& sex = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0010, 0x0040 >(dataset);
+    m_object->setSex(sex);
+}
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Series.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Series.cpp
new file mode 100644
index 0000000..d1b9dc0
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Series.cpp
@@ -0,0 +1,97 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Series.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/algorithm/string/split.hpp>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Series::Series(::fwMedData::DicomSeries::sptr dicomSeries,
+               SPTR(::gdcm::Reader)reader,
+               SPTR(::fwGdcmIO::container::DicomInstance)instance,
+               ::fwMedData::Series::sptr series,
+               ::fwLog::Logger::sptr logger,
+               const ProgressCallback& callback,
+               const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Series >(dicomSeries, reader, instance, series, logger,
+                                                                     callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Series::~Series()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Series::readGeneralSeriesModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // Serie's instance UID - Type 1
+    const std::string& instanceUID = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0020, 0x000e >(dataset);
+    m_object->setInstanceUID(instanceUID);
+
+    // Series's modality - Type 1
+    const std::string& modality = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0060 >(dataset);
+    m_object->setModality(modality);
+
+    // Serie's date - Type 3
+    const std::string& date = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0021 >(dataset);
+    m_object->setDate(date);
+
+    // Serie's time - Type 3
+    const std::string& time = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0031 >(dataset);
+    m_object->setTime(time);
+
+    // Serie's description
+    const std::string& description = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x103e >(dataset);
+    m_object->setDescription(description);
+
+    // Serie's number - Type 2
+    // NOTE: Not used in FW4SPL
+
+    // Performing physicians name - Type 3
+    const std::string& performingPhysicianNamesStr =
+        ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x1050 >(dataset);
+
+    if(!performingPhysicianNamesStr.empty())
+    {
+        ::fwMedData::DicomValuesType performingPhysicianNames;
+        ::boost::split( performingPhysicianNames, performingPhysicianNamesStr, ::boost::is_any_of("\\"));
+        m_object->setPerformingPhysiciansName(performingPhysicianNames);
+    }
+
+    // Laterality - Type 2C
+    // NOTE: Not used in FW4SPL
+
+    // Patient Position - Type 2C
+    // NOTE: Not used in FW4SPL
+}
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/SpatialFiducials.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/SpatialFiducials.cpp
new file mode 100644
index 0000000..081567d
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/SpatialFiducials.cpp
@@ -0,0 +1,106 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/ie/SpatialFiducials.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/foreach.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+SpatialFiducials::SpatialFiducials(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                                   SPTR(::gdcm::Reader)reader,
+                                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                   ::fwData::Image::sptr image,
+                                   ::fwLog::Logger::sptr logger,
+                                   const ProgressCallback& callback,
+                                   const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwData::Image >(dicomSeries, reader, instance, image, logger,
+                                                                 callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SpatialFiducials::~SpatialFiducials()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducials::readLandmark(const ::gdcm::DataSet& fiducialDataset)
+{
+    ::fwData::PointList::sptr pointList =
+        m_object->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+    if(!pointList)
+    {
+        pointList = ::fwData::PointList::New();
+        m_object->setField(::fwDataTools::fieldHelper::Image::m_imageLandmarksId, pointList);
+    }
+
+    const ::gdcm::DataElement& graphicCoordinatesDataElement =
+        fiducialDataset.GetDataElement( ::gdcm::Tag(0x0070, 0x0318) );
+    const ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > graphicCoordinatesDataSequence =
+        graphicCoordinatesDataElement.GetValueAsSQ();
+
+    const std::string label = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0070, 0x030F >(fiducialDataset);
+
+    for(unsigned int i = 1; i <= graphicCoordinatesDataSequence->GetNumberOfItems(); ++i)
+    {
+        ::gdcm::Item graphicCoordinatesItem = graphicCoordinatesDataSequence->GetItem(i);
+        const ::gdcm::DataSet& graphicCoordinatesDataset = graphicCoordinatesItem.GetNestedDataSet();
+
+        // 2D Points
+        ::gdcm::Attribute< 0x0070, 0x0022 > coordinatesAttribute;
+        coordinatesAttribute.SetFromDataElement(graphicCoordinatesDataset.GetDataElement(::gdcm::Tag(0x0070, 0x0022)));
+        const float* pointValues = coordinatesAttribute.GetValues();
+
+        // Frame number
+        const ::gdcm::DataElement& referencedImageDataElement =
+            graphicCoordinatesDataset.GetDataElement( ::gdcm::Tag(0x0008, 0x1140) );
+        const ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedImageDataSequence =
+            referencedImageDataElement.GetValueAsSQ();
+        ::gdcm::Item referencedImageItem        = referencedImageDataSequence->GetItem(1);
+        ::gdcm::DataSet& referencedImageDataset = referencedImageItem.GetNestedDataSet();
+
+        int frameNumber    = ::fwGdcmIO::helper::DicomData::getTagValue< 0x0008, 0x1160, int >(referencedImageDataset);
+        double zCoordinate = ::fwGdcmIO::helper::DicomData::convertFrameNumberToZCoordinate(m_object,frameNumber);
+
+        ::fwData::Point::sptr point = ::fwData::Point::New(static_cast<double>(pointValues[0]),
+                                                           static_cast<double>(pointValues[1]), zCoordinate);
+        point->setField(::fwDataTools::fieldHelper::Image::m_labelId, ::fwData::String::New(label));
+        pointList->getRefPoints().push_back(point);
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Study.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Study.cpp
new file mode 100644
index 0000000..984f917
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Study.cpp
@@ -0,0 +1,91 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Study.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Study.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Study::Study(::fwMedData::DicomSeries::sptr dicomSeries,
+             SPTR(::gdcm::Reader)reader,
+             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+             ::fwMedData::Study::sptr study,
+             ::fwLog::Logger::sptr logger,
+             const ProgressCallback& callback,
+             const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::Study >(dicomSeries, reader, instance, study, logger,
+                                                                    callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Study::~Study()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Study::readGeneralStudyModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // Study's date - Type 2
+    const std::string& studyDate = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0020 >(dataset);
+    m_object->setDate(studyDate);
+
+    // Study's time - Type 2
+    const std::string& studyTime = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0030 >(dataset);
+    m_object->setTime(studyTime);
+
+    // Study's accession number - Type 2
+    // NOTE: Not used in FW4SPL
+
+    // Study's description - Type 3
+    const std::string& description = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x1030 >(dataset);
+    m_object->setDescription(description);
+
+    // Study's UID - Type 1
+    const std::string& instanceUID = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0020, 0x000d >(dataset);
+    m_object->setInstanceUID(instanceUID);
+
+    // Study's ID - Type 2
+    // NOTE: Not used in FW4SPL
+
+    // Study's referring physician name
+    const std::string& referringPhysicianName = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0008, 0x0090 >(
+        dataset);
+    m_object->setReferringPhysicianName(referringPhysicianName);
+}
+
+//------------------------------------------------------------------------------
+
+void Study::readPatientStudyModule()
+{
+    // Retrieve dataset
+    const ::gdcm::DataSet& dataset = m_reader->GetFile().GetDataSet();
+
+    // PatientAge - Type 3
+    const std::string& patientAge = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue< 0x0010, 0x1010 >(dataset);
+    m_object->setPatientAge(patientAge);
+}
+
+//------------------------------------------------------------------------------
+
+}// namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Surface.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Surface.cpp
new file mode 100644
index 0000000..173b7ce
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/ie/Surface.cpp
@@ -0,0 +1,241 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <sstream>
+
+//To include first because of Windows compilation
+#include <gdcmSurfaceHelper.h>
+#include <gdcmUIDGenerator.h>
+
+#include "fwGdcmIO/container/DicomSurface.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Surface.hpp"
+
+
+#include <fwData/Color.hpp>
+#include <fwData/Reconstruction.hpp>
+
+#include <fwDataIO/reader/DictionaryReader.hpp>
+
+#include <fwDataTools/helper/Mesh.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+
+#include <boost/algorithm/clamp.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Surface::Surface(::fwMedData::DicomSeries::sptr dicomSeries,
+                 SPTR(::gdcm::Reader)reader,
+                 SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                 ::fwMedData::ModelSeries::sptr series,
+                 ::fwLog::Logger::sptr logger,
+                 const ProgressCallback& callback,
+                 const bool& cancelled) :
+    ::fwGdcmIO::reader::ie::InformationEntity< ::fwMedData::ModelSeries >(dicomSeries, reader, instance, series,
+                                                                          logger, callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Surface::~Surface()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Surface::readSurfaceSegmentationModule(::gdcm::SmartPointer< ::gdcm::Segment > segment)
+{
+    ::fwData::Reconstruction::sptr reconstruction = ::fwData::Reconstruction::New();
+
+    // We only handle segment containing one surface
+    if (segment->GetSurfaceCount() != 1)
+    {
+        throw ::fwGdcmIO::exception::Failed("Inappropriate surface count for a segment.");
+    }
+
+    // Organ Name - TODO : if empty, try to get label with DictionarySegment
+    std::string organName = segment->GetSegmentDescription();
+    ::boost::algorithm::trim(organName);
+    reconstruction->setOrganName(organName);
+    SLM_TRACE("Organ Name : " + reconstruction->getOrganName());
+
+    // Structure Type
+    std::string structureType = segment->GetSegmentLabel();
+    ::boost::algorithm::trim(structureType);
+    reconstruction->setStructureType(structureType);
+    SLM_TRACE("Structure type : " + reconstruction->getStructureType());
+
+    // Get the associated surface of the current segmentation
+    ::gdcm::SmartPointer< ::gdcm::Surface > surface = segment->GetSurface(0);
+
+    this->readSurfaceMeshModule(surface, reconstruction);
+
+    // Add the Reconstruction in the ModelSeries
+    ::fwMedData::ModelSeries::ReconstructionVectorType reconstructionDB = m_object->getReconstructionDB();
+    reconstructionDB.push_back(reconstruction);
+    m_object->setReconstructionDB(reconstructionDB);
+
+}
+
+//------------------------------------------------------------------------------
+
+void Surface::readSurfaceMeshModule(::gdcm::SmartPointer< ::gdcm::Surface > surface,
+                                    ::fwData::Reconstruction::sptr reconstruction)
+{
+    // Create material
+    ::fwData::Material::sptr material = fwData::Material::New();
+
+    // Convert CIE Lab to RGBA
+    const unsigned short* lab = surface->GetRecommendedDisplayCIELabValue();
+    ::gdcm::SurfaceHelper::ColorArray CIELab(3);
+    CIELab[0] = lab[0];
+    CIELab[1] = lab[1];
+    CIELab[2] = lab[2];
+    const std::vector<float> RGB = ::gdcm::SurfaceHelper::RecommendedDisplayCIELabToRGB(CIELab, 1.);
+
+    // Adapt color to material
+    ::fwData::Color::ColorArray rgba;
+    ::boost::algorithm::clamp_range(RGB.begin(), RGB.end(), rgba.begin(), 0.f, 1.f);
+
+    // Recommended Presentation Opacity
+    const float opacity = ::boost::algorithm::clamp(surface->GetRecommendedPresentationOpacity(), 0.f, 1.f);
+    rgba[3] = opacity; // set alpha component
+
+    // Set reconstruction's visibility
+    reconstruction->setIsVisible(opacity > 1e-3);
+    OSLM_TRACE("Reconstruction is visible : " << reconstruction->getIsVisible());
+
+    // Set reconstruction's color
+    ::fwData::Color::sptr color = ::fwData::Color::New();
+    color->setRGBA( rgba );
+    material->setDiffuse(color);
+    OSLM_TRACE("RGBA color : " << rgba[0]<<" "<< rgba[1]<<" "<< rgba[2]<<" "<< rgba[3]);
+
+    // Recommended Presentation Type
+    material->setRepresentationMode(
+        ::fwGdcmIO::helper::DicomData::convertToRepresentationMode( surface->GetRecommendedPresentationType() ) );
+    OSLM_TRACE("Reconstruction's structure type : " <<
+               ::gdcm::Surface::GetVIEWTypeString( surface->GetRecommendedPresentationType() ) );
+
+    // Manifold
+    if (surface->GetManifold() == ::gdcm::Surface::YES)
+    {
+        throw ::fwGdcmIO::exception::Failed("Manifold not handled");
+    }
+
+    // Point Coordinates Data
+    const ::gdcm::DataElement& gdcmPointCoords = surface->GetPointCoordinatesData();
+    const ::gdcm::ByteValue* gdcmPointCoordsBV = gdcmPointCoords.GetByteValue();
+    const char* coordBuffer                    = gdcmPointCoordsBV->GetPointer();
+
+    // Check that the surface contains point coordinates
+    if(gdcmPointCoordsBV == 0 || gdcmPointCoordsBV->GetPointer() == 0)
+    {
+        throw ::fwGdcmIO::exception::Failed("No point coordinates data");
+    }
+
+    // Get size of buffer (bytes)
+    const unsigned long coordBufferSize = gdcmPointCoordsBV->GetLength();
+
+    // Compute number of coordinates
+    const unsigned long coordSize = coordBufferSize / sizeof(float);
+
+    // Check that the buffer has the correct size according to the number of points
+    if ( (coordSize / 3) != surface->GetNumberOfSurfacePoints())
+    {
+        throw ::fwGdcmIO::exception::Failed("Corrupted point coordinates data");
+    }
+
+    // Mesh Primitive
+    ::gdcm::SmartPointer< ::gdcm::MeshPrimitive > gdcmMeshPrimitive = surface->GetMeshPrimitive();
+    if (gdcmMeshPrimitive->GetPrimitiveType() != ::gdcm::MeshPrimitive::TRIANGLE)
+    {
+        throw ::fwGdcmIO::exception::Failed("Primitive type not handled");
+    }
+
+    // Surface Points Normals
+    const char* normalBuffer = NULL;
+    if (!surface->GetVectorCoordinateData().IsEmpty())
+    {
+        const ::gdcm::DataElement& gdcmNormalCoords = surface->GetVectorCoordinateData();
+        const ::gdcm::ByteValue* gdcmNormalCoordsBV = gdcmNormalCoords.GetByteValue();
+
+        // Check that the surface contains normals
+        if(gdcmNormalCoordsBV == 0 || gdcmNormalCoordsBV->GetPointer() == 0)
+        {
+            throw ::fwGdcmIO::exception::Failed("No normal coordinates data");
+        }
+
+        // Set normal buffer
+        normalBuffer = gdcmNormalCoordsBV->GetPointer();
+
+        // Get size of buffer (bytes)
+        const unsigned long normalCoordBufferSize = gdcmNormalCoordsBV->GetLength();
+
+        // Compute number of coordinates
+        const unsigned long normalCoordSize = normalCoordBufferSize / sizeof(float);
+
+        // Check that the buffer has the correct size according to the number of normals
+        if ( (normalCoordSize / 3) != surface->GetNumberOfVectors() && normalCoordSize != coordSize)
+        {
+            throw ::fwGdcmIO::exception::Failed("Corrupted normal coordinates data");
+        }
+    }
+
+    // Triangle Point Index List
+    const ::gdcm::DataElement& gdcmPointIndex   = gdcmMeshPrimitive->GetPrimitiveData();
+    const ::gdcm::ByteValue*   gdcmPointIndexBV = gdcmPointIndex.GetByteValue();
+    const char* indexBuffer                     = gdcmPointIndexBV->GetPointer();
+
+    // Check that the surface contains triangle point list
+    if (indexBuffer == 0)
+    {
+        throw ::fwGdcmIO::exception::Failed("No triangle point index list");
+    }
+
+    // Get size of buffer (bytes)
+    const unsigned long indexBufferSize = gdcmPointIndexBV->GetLength();
+
+    // Get number of primitives
+    const unsigned long indexSize = indexBufferSize / sizeof (uint32_t);
+
+    OSLM_TRACE("Reconstruction's number of points : " << coordSize / 3 );
+    OSLM_TRACE("Reconstruction's number of cells : " << indexSize / 3 );
+
+    // Create a new Mesh
+    ::fwGdcmIO::container::DicomSurface surfaceContainer;
+    ::fwData::Mesh::sptr mesh = surfaceContainer.convertToData(reinterpret_cast<const float*>(coordBuffer), coordSize,
+                                                               reinterpret_cast<const uint32_t*>(indexBuffer),
+                                                               indexSize, reinterpret_cast<const float*>(normalBuffer));
+
+    // Set the reconstruction
+    reconstruction->setMaterial( material );
+    reconstruction->setMesh( mesh );
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ie
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/CTMRImageIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/CTMRImageIOD.cpp
new file mode 100644
index 0000000..1f66591
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/CTMRImageIOD.cpp
@@ -0,0 +1,136 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Equipment.hpp"
+#include "fwGdcmIO/reader/ie/Image.hpp"
+#include "fwGdcmIO/reader/ie/Patient.hpp"
+#include "fwGdcmIO/reader/ie/Series.hpp"
+#include "fwGdcmIO/reader/ie/Study.hpp"
+#include "fwGdcmIO/reader/iod/CTMRImageIOD.hpp"
+
+#include <fwCore/macros.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+
+#include <gdcmImageReader.h>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+CTMRImageIOD::CTMRImageIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                           SPTR(::fwGdcmIO::container::DicomInstance)instance, ::fwLog::Logger::sptr logger,
+                           std::function< void(unsigned int&) >& callback, bool& cancelled) :
+    ::fwGdcmIO::reader::iod::InformationObjectDefinition(dicomSeries, instance, logger, callback, cancelled),
+    m_enableBufferRotation(true)
+{
+}
+
+//------------------------------------------------------------------------------
+
+CTMRImageIOD::~CTMRImageIOD()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void CTMRImageIOD::read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed)
+{
+    // Retrieve image series
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+    SLM_ASSERT("Image series should not be null.", imageSeries);
+
+    // Create GDCM reader
+    SPTR(::gdcm::ImageReader) reader = std::shared_ptr< ::gdcm::ImageReader >( new ::gdcm::ImageReader );
+
+    // Read the first file
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = m_dicomSeries->getLocalDicomPaths();
+    const std::string filename = pathContainer.begin()->second.string();
+    reader->SetFileName( filename.c_str() );
+    bool success = reader->Read();
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Unable to read the DICOM instance \""+
+                                                        filename+"\" using the GDCM Image Reader."),
+                          !success);
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::reader::ie::Patient patientIE(m_dicomSeries, reader, m_instance, series->getPatient(), m_logger,
+                                              m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Study studyIE(m_dicomSeries, reader, m_instance, series->getStudy(), m_logger,
+                                          m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Series seriesIE(m_dicomSeries, reader, m_instance, series, m_logger,
+                                            m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Equipment equipmentIE(m_dicomSeries, reader, m_instance, series->getEquipment(), m_logger,
+                                                  m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Image imageIE(m_dicomSeries, reader, m_instance, imageSeries->getImage(), m_logger,
+                                          m_progressCallback, m_cancelled);
+    imageIE.setBufferRotationEnabled(m_enableBufferRotation);
+
+    // Read Patient Module - PS 3.3 C.7.1.1
+    patientIE.readPatientModule();
+    unsigned int progress = 3;
+    m_progressCallback(progress);
+
+    // Read General Study Module - PS 3.3 C.7.2.1
+    studyIE.readGeneralStudyModule();
+    progress += 3;
+    m_progressCallback(progress);
+
+    // Read Patient Study Module - PS 3.3 C.7.2.2
+    studyIE.readPatientStudyModule();
+    progress += 3;
+    m_progressCallback(progress);
+
+    // Read General Series Module - PS 3.3 C.7.3.1
+    seriesIE.readGeneralSeriesModule();
+    progress += 3;
+    m_progressCallback(progress);
+
+    // Read Frame of Reference Module - PS 3.3 C.7.4.1
+    // NOTE: Not used in FW4SPL
+
+    // Read General Equipment Module - PS 3.3 C.7.5.1
+    equipmentIE.readGeneralEquipmentModule();
+    progress += 3;
+    m_progressCallback(progress);
+
+    // Read General Image Module - PS 3.3 C.7.6.1
+    // NOTE: Not used in FW4SPL
+
+    // Read Image Plane Module - PS 3.3 C.7.6.2
+    imageIE.readImagePlaneModule();
+    progress += 3;
+    m_progressCallback(progress);
+
+    // Read Image Pixel Module - PS 3.3 C.7.6.3
+    imageIE.readImagePixelModule();
+    progress = 98;
+    m_progressCallback(progress);
+
+    // Read CT & MR Image Module - PS 3.3 C.8.2.1 - PS 3.3 C.8.3.1
+    // NOTE: Not used in FW4SPL
+
+    // Read VOI LUT Module - PS 3.3 C.11.2
+    imageIE.readVOILUTModule();
+    progress = 100;
+    m_progressCallback(progress);
+
+    // Read SOP Common Module - PS 3.3 C.12.1
+    // NOTE: Not used in FW4SPL
+
+}
+
+//------------------------------------------------------------------------------
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/ComprehensiveSRIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/ComprehensiveSRIOD.cpp
new file mode 100644
index 0000000..f5009b4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/ComprehensiveSRIOD.cpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/iod/ComprehensiveSRIOD.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Document.hpp"
+
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+ComprehensiveSRIOD::ComprehensiveSRIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                                       SPTR(::fwGdcmIO::container::DicomInstance)instance, ::fwLog::Logger::sptr logger,
+                                       ProgressCallback& callback, bool& cancelled) :
+    ::fwGdcmIO::reader::iod::InformationObjectDefinition(dicomSeries, instance, logger, callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+ComprehensiveSRIOD::~ComprehensiveSRIOD()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void ComprehensiveSRIOD::read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed)
+{
+    // Retrieve image series
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+    SLM_ASSERT("Image series should not be null.", imageSeries);
+
+    // Create GDCM reader
+    SPTR(::gdcm::Reader) reader = std::shared_ptr< ::gdcm::Reader >( new ::gdcm::Reader );
+
+    // Read the first file
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = m_dicomSeries->getLocalDicomPaths();
+    const std::string filename = pathContainer.begin()->second.string();
+    reader->SetFileName( filename.c_str() );
+    bool success = reader->Read();
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Unable to read the DICOM instance \""+
+                                                        filename+"\" using the GDCM Image Reader."), !success);
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::reader::ie::Document documentIE(m_dicomSeries, reader, m_instance, imageSeries->getImage(), m_logger,
+                                                m_progressCallback, m_cancelled);
+
+    // Read SR
+    documentIE.readSR();
+
+}
+
+//------------------------------------------------------------------------------
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/InformationObjectDefinition.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/InformationObjectDefinition.cpp
new file mode 100644
index 0000000..0b7725b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/InformationObjectDefinition.cpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/iod/InformationObjectDefinition.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+InformationObjectDefinition::InformationObjectDefinition(::fwMedData::DicomSeries::sptr dicomSeries,
+                                                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                                         ::fwLog::Logger::sptr logger,
+                                                         ProgressCallback& callback, bool& cancelled) :
+    m_instance(instance), m_dicomSeries(dicomSeries), m_logger(logger), m_progressCallback(callback),
+    m_cancelled(cancelled)
+{
+    SLM_ASSERT("DicomSeries should not be null.", dicomSeries);
+    SLM_ASSERT("Instance should not be null.", instance);
+    SLM_ASSERT("Logger should not be null.", logger);
+}
+
+//------------------------------------------------------------------------------
+
+InformationObjectDefinition::~InformationObjectDefinition()
+{
+}
+
+} // namespace iod
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/SpatialFiducialsIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/SpatialFiducialsIOD.cpp
new file mode 100644
index 0000000..a7785ad
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/SpatialFiducialsIOD.cpp
@@ -0,0 +1,123 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/iod/SpatialFiducialsIOD.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/SpatialFiducials.hpp"
+
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+
+#include <boost/algorithm/string/trim.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+SpatialFiducialsIOD::SpatialFiducialsIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                         ::fwLog::Logger::sptr logger,
+                                         ProgressCallback& callback, bool& cancelled) :
+    ::fwGdcmIO::reader::iod::InformationObjectDefinition(dicomSeries, instance, logger, callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SpatialFiducialsIOD::~SpatialFiducialsIOD()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducialsIOD::read(::fwMedData::Series::sptr series) throw (::fwGdcmIO::exception::Failed)
+{
+    // Retrieve images
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+    SLM_ASSERT("ImageSeries should not be null.", imageSeries);
+    ::fwData::Image::sptr image = imageSeries->getImage();
+    SLM_ASSERT("::fwData::Image not instanced", image);
+
+    // Create GDCM Reader
+    SPTR(::gdcm::Reader) reader = std::shared_ptr< ::gdcm::Reader >( new ::gdcm::Reader );
+
+    // Read the first file
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = m_dicomSeries->getLocalDicomPaths();
+
+    if(pathContainer.size() >1)
+    {
+        m_logger->warning("More than one Spatial Fiducials file was found in series. Only the first one will be read.");
+    }
+
+    const std::string filename = pathContainer.begin()->second.string();
+    reader->SetFileName( filename.c_str() );
+    bool success = reader->Read();
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Unable to read the DICOM instance \""+
+                                                        filename+"\" using the GDCM Image Reader."), !success);
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::reader::ie::SpatialFiducials spatialFiducialsIE(
+        m_dicomSeries, reader, m_instance, imageSeries->getImage(), m_logger, m_progressCallback, m_cancelled);
+
+    // Retrieve dataset
+    const ::gdcm::DataSet& datasetRoot = reader->GetFile().GetDataSet();
+
+    // Retrieve Fiducial Set Sequence
+    const ::gdcm::DataElement& fiducialSetSequenceDataElement =
+        datasetRoot.GetDataElement( ::gdcm::Tag(0x0070, 0x031C) );
+    const ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > fiducialSetSequence =
+        fiducialSetSequenceDataElement.GetValueAsSQ();
+
+    for(unsigned int i = 1; i <= fiducialSetSequence->GetNumberOfItems(); ++i)
+    {
+        ::gdcm::Item sequenceSetItem = fiducialSetSequence->GetItem(i);
+        const ::gdcm::DataSet& sequenceSetDataset = sequenceSetItem.GetNestedDataSet();
+
+        const ::gdcm::DataElement& fiducialSequenceDataElement =
+            sequenceSetDataset.GetDataElement( ::gdcm::Tag(0x0070, 0x031E) );
+        const ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > fiducialSequence =
+            fiducialSequenceDataElement.GetValueAsSQ();
+
+        for(unsigned int j = 1; j <= fiducialSequence->GetNumberOfItems(); ++j)
+        {
+            ::gdcm::Item fiducialItem = fiducialSequence->GetItem(j);
+            const ::gdcm::DataSet& fiducialDataset = fiducialItem.GetNestedDataSet();
+            const std::string shapeType            =
+                ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<0x0070,0x0306>(fiducialDataset);
+
+            if(shapeType == "POINT")
+            {
+                spatialFiducialsIE.readLandmark(fiducialDataset);
+            }
+            else
+            {
+                m_logger->warning("Fiducial shape type not supported: \"" + shapeType + "\"");
+            }
+        }
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/SurfaceSegmentationIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/SurfaceSegmentationIOD.cpp
new file mode 100644
index 0000000..2da4ef7
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/iod/SurfaceSegmentationIOD.cpp
@@ -0,0 +1,151 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/reader/ie/Equipment.hpp"
+#include "fwGdcmIO/reader/ie/Patient.hpp"
+#include "fwGdcmIO/reader/ie/Series.hpp"
+#include "fwGdcmIO/reader/ie/Study.hpp"
+#include "fwGdcmIO/reader/ie/Surface.hpp"
+#include "fwGdcmIO/reader/iod/SurfaceSegmentationIOD.hpp"
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwMedData/ModelSeries.hpp>
+
+#include <gdcmSegmentReader.h>
+#include <gdcmSurfaceHelper.h>
+#include <gdcmSurfaceReader.h>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+SurfaceSegmentationIOD::SurfaceSegmentationIOD(::fwMedData::DicomSeries::sptr dicomSeries,
+                                               SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                               ::fwLog::Logger::sptr logger,
+                                               ProgressCallback& callback, bool& cancelled) :
+    ::fwGdcmIO::reader::iod::InformationObjectDefinition(dicomSeries, instance, logger, callback, cancelled)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SurfaceSegmentationIOD::~SurfaceSegmentationIOD()
+{
+    SLM_TRACE_FUNC();
+}
+
+//------------------------------------------------------------------------------
+
+void SurfaceSegmentationIOD::read(::fwMedData::Series::sptr series) throw(::fwGdcmIO::exception::Failed)
+{
+    ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::dynamicCast(series);
+    SLM_ASSERT("ModelSeries should not be null.", modelSeries);
+
+    // Create GDCM Reader
+    SPTR(::gdcm::SurfaceReader) reader = std::shared_ptr< ::gdcm::SurfaceReader >( new ::gdcm::SurfaceReader );
+
+    // Path container
+    ::fwMedData::DicomSeries::DicomPathContainerType pathContainer = m_dicomSeries->getLocalDicomPaths();
+    if(pathContainer.size() > 1)
+    {
+        m_logger->warning(
+            "More than one surface segmentation storage was found in the series. Only the first one will be read.");
+    }
+
+    // Read first file
+    const std::string filename = pathContainer.begin()->second.string();
+    reader->SetFileName( filename.c_str() );
+    bool success = reader->Read();
+    FW_RAISE_EXCEPTION_IF(::fwGdcmIO::exception::Failed("Unable to read the DICOM instance \""+
+                                                        filename+"\" using the GDCM Image Reader."), !success);
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::reader::ie::Patient patientIE(m_dicomSeries, reader, m_instance, series->getPatient(), m_logger,
+                                              m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Study studyIE(m_dicomSeries, reader, m_instance, series->getStudy(), m_logger,
+                                          m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Series seriesIE(m_dicomSeries, reader, m_instance, series, m_logger,
+                                            m_progressCallback, m_cancelled);
+    // Use Image as frame of reference
+    ::fwGdcmIO::reader::ie::Equipment equipmentIE(m_dicomSeries, reader, m_instance, series->getEquipment(), m_logger,
+                                                  m_progressCallback, m_cancelled);
+    ::fwGdcmIO::reader::ie::Surface surfaceIE(m_dicomSeries, reader, m_instance, modelSeries, m_logger,
+                                              m_progressCallback, m_cancelled);
+
+    // Read Patient Module - PS 3.3 C.7.1.1
+    patientIE.readPatientModule();
+
+    // Read General Study Module - PS 3.3 C.7.2.1
+    studyIE.readGeneralStudyModule();
+
+    // Read Patient Study Module - PS 3.3 C.7.2.2
+    studyIE.readPatientStudyModule();
+
+    // Read General Series Module - PS 3.3 C.7.3.1
+    seriesIE.readGeneralSeriesModule();
+
+    // Read General Series Module - PS 3.3 C.8.20.1
+    // NOTE: Not used in FW4SPL
+
+    // Read Frame of Reference Module - PS 3.3 C.7.4.1
+    // NOTE: Not used in FW4SPL
+
+    // Read General Equipment Module - PS 3.3 C.7.5.1
+    equipmentIE.readGeneralEquipmentModule();
+
+    // Read SOP Common Module - PS 3.3 C.12.1
+    // NOTE: Not used in FW4SPL
+
+    // Skipped segmentation count
+    unsigned int skippedSegmentationCount = 0;
+
+    // Read each surface segmentation
+    const ::gdcm::SegmentReader::SegmentVector& segmentContainer = reader->GetSegments();
+    for(::gdcm::SmartPointer< ::gdcm::Segment > segment: segmentContainer)
+    {
+        try
+        {
+            // Read Surface Segmentation & Surface Mesh Module - PS 3.3 C.8.23.1 & C.27.1
+            surfaceIE.readSurfaceSegmentationModule(segment);
+        }
+        catch (::fwGdcmIO::exception::Failed& e)
+        {
+            ++skippedSegmentationCount;
+            m_logger->warning("Surface mesh reading error : " + std::string(e.what()));
+        }
+    }
+
+    if (skippedSegmentationCount == modelSeries->getReconstructionDB().size())
+    {
+        m_logger->critical("All 3D reconstructions have been rejected.");
+    }
+    else if (skippedSegmentationCount > 0)
+    {
+        std::stringstream ss;
+        ss << skippedSegmentationCount << " 3D reconstruction(s) have been rejected.";
+        m_logger->critical(ss.str());
+    }
+
+    OSLM_TRACE("Number of reconstructions : " << modelSeries->getReconstructionDB().size());
+
+    // Display reconstructions
+    series->setField("ShowReconstructions", ::fwData::Boolean::New(true));
+}
+
+//------------------------------------------------------------------------------
+
+
+}  // namespace iod
+}  // namespace reader
+}  // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/Fiducial.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/Fiducial.cpp
new file mode 100644
index 0000000..2f50462
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/Fiducial.cpp
@@ -0,0 +1,149 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/tid/Fiducial.hpp"
+
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+//------------------------------------------------------------------------------
+
+Fiducial::Fiducial(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                   SPTR(::gdcm::Reader)reader,
+                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                   ::fwData::Image::sptr image,
+                   ::fwLog::Logger::sptr logger) :
+    ::fwGdcmIO::reader::tid::TemplateID< ::fwData::Image >(dicomSeries, reader, instance, image, logger)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Fiducial::~Fiducial()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Fiducial::readNode(SPTR(::fwGdcmIO::container::sr::DicomSRNode)node)
+{
+    if(node->getCodedAttribute() == ::fwGdcmIO::container::DicomCodedAttribute("122340", "DCM", "Fiducial feature") &&
+       !node->getSubNodeContainer().empty())
+    {
+        std::string label = "";
+        double x, y, z;
+        bool foundLandmark = false;
+        for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& subNode: node->getSubNodeContainer())
+        {
+            // Read label
+            if(subNode->getCodedAttribute() ==
+               ::fwGdcmIO::container::DicomCodedAttribute("122369", "DCM", "Fiducial intent"))
+            {
+                SPTR(::fwGdcmIO::container::sr::DicomSRTextNode) intentNode =
+                    std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRTextNode >(subNode);
+                if(intentNode)
+                {
+                    label = intentNode->getTextValue();
+                }
+            }
+            // 2D Coordinate
+            else if(subNode->getType() == "SCOORD")
+            {
+                SPTR(::fwGdcmIO::container::sr::DicomSRSCoordNode) scoordNode =
+                    std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRSCoordNode >(subNode);
+                if(scoordNode && scoordNode->getGraphicType() == "POINT")
+                {
+                    // Retrieve coordinates
+                    ::fwGdcmIO::container::sr::DicomSRSCoordNode::GraphicDataContainerType coordinates =
+                        scoordNode->getGraphicDataContainer();
+
+                    x = coordinates[0];
+                    y = coordinates[1];
+
+                    if(!scoordNode->getSubNodeContainer().empty())
+                    {
+                        SPTR(::fwGdcmIO::container::sr::DicomSRImageNode) imageNode =
+                            std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRImageNode >(
+                                *scoordNode->getSubNodeContainer().begin());
+                        if(imageNode)
+                        {
+                            const int frameNumber = imageNode->getFrameNumber();
+                            z = ::fwGdcmIO::helper::DicomData::convertFrameNumberToZCoordinate(m_object,
+                                                                                               frameNumber);
+                            foundLandmark = true;
+                        }
+                    }
+                }
+            }
+            // 3D Coordinate
+            else if(subNode->getType() == "SCOORD3D")
+            {
+                SPTR(::fwGdcmIO::container::sr::DicomSRSCoord3DNode) scoord3DNode =
+                    std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRSCoord3DNode >(subNode);
+                if(scoord3DNode && scoord3DNode->getGraphicType() == "POINT")
+                {
+                    // Retrieve coordinates
+                    ::fwGdcmIO::container::sr::DicomSRSCoordNode::GraphicDataContainerType coordinates =
+                        scoord3DNode->getGraphicDataContainer();
+                    x             = coordinates[0];
+                    y             = coordinates[1];
+                    z             = coordinates[2];
+                    foundLandmark = true;
+                }
+            }
+
+        }
+
+        if(foundLandmark)
+        {
+            this->addLandmark(x, y, z, label);
+        }
+
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Fiducial::addLandmark(double x, double y, double z, const std::string& label)
+{
+    ::fwData::Point::sptr point = ::fwData::Point::New(x,y,z);
+    point->setField(::fwDataTools::fieldHelper::Image::m_labelId, ::fwData::String::New(label));
+
+    ::fwData::PointList::sptr pointList =
+        m_object->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+
+    if(!pointList)
+    {
+        pointList = ::fwData::PointList::New();
+        m_object->setField(::fwDataTools::fieldHelper::Image::m_imageLandmarksId, pointList);
+    }
+
+    pointList->getRefPoints().push_back(point);
+    m_object->setField("ShowLandmarks", ::fwData::Boolean::New(true));
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/Measurement.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/Measurement.cpp
new file mode 100644
index 0000000..935351f
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/Measurement.cpp
@@ -0,0 +1,129 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/tid/Measurement.hpp"
+
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+//------------------------------------------------------------------------------
+
+Measurement::Measurement(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                         SPTR(::gdcm::Reader)reader,
+                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                         ::fwData::Image::sptr image,
+                         ::fwLog::Logger::sptr logger) :
+    ::fwGdcmIO::reader::tid::TemplateID< ::fwData::Image >(dicomSeries, reader, instance, image, logger)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Measurement::~Measurement()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Measurement::readNode(SPTR(::fwGdcmIO::container::sr::DicomSRNode)node)
+{
+    if(node->getCodedAttribute() == ::fwGdcmIO::container::DicomCodedAttribute("121206", "DCM", "Distance") &&
+       !node->getSubNodeContainer().empty())
+    {
+        for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& subNode: node->getSubNodeContainer())
+        {
+            if(subNode->getType() == "SCOORD")
+            {
+                SPTR(::fwGdcmIO::container::sr::DicomSRSCoordNode) scoordNode =
+                    std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRSCoordNode >(subNode);
+                if(scoordNode && scoordNode->getGraphicType() == "POLYLINE")
+                {
+                    // Retrieve coordinates
+                    ::fwGdcmIO::container::sr::DicomSRSCoordNode::GraphicDataContainerType coordinates =
+                        scoordNode->getGraphicDataContainer();
+
+                    if(!scoordNode->getSubNodeContainer().empty())
+                    {
+                        SPTR(::fwGdcmIO::container::sr::DicomSRImageNode) imageNode =
+                            std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRImageNode >(
+                                *scoordNode->getSubNodeContainer().begin());
+                        if(imageNode)
+                        {
+                            const int frameNumber = imageNode->getFrameNumber();
+                            double zCoordinate    = ::fwGdcmIO::helper::DicomData::convertFrameNumberToZCoordinate(
+                                m_object, frameNumber);
+
+                            auto origin = ::fwData::Point::New(static_cast<double>(coordinates[0]),
+                                                               static_cast<double>(coordinates[1]), zCoordinate);
+                            auto destination = ::fwData::Point::New(static_cast<double>(coordinates[2]),
+                                                                    static_cast<double>(coordinates[3]), zCoordinate);
+                            this->addDistance(origin, destination);
+                        }
+                    }
+                }
+            }
+            // 3D Coordinate
+            else if(subNode->getType() == "SCOORD3D")
+            {
+                SPTR(::fwGdcmIO::container::sr::DicomSRSCoord3DNode) scoord3DNode =
+                    std::dynamic_pointer_cast< ::fwGdcmIO::container::sr::DicomSRSCoord3DNode >(subNode);
+                if(scoord3DNode && scoord3DNode->getGraphicType() == "POLYLINE")
+                {
+                    // Retrieve coordinates
+                    ::fwGdcmIO::container::sr::DicomSRSCoordNode::GraphicDataContainerType coordinates =
+                        scoord3DNode->getGraphicDataContainer();
+                    this->addDistance(::fwData::Point::New(coordinates[0], coordinates[1], coordinates[2]),
+                                      ::fwData::Point::New(coordinates[3], coordinates[4], coordinates[5]));
+                }
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Measurement::addDistance(SPTR(::fwData::Point)point1, SPTR(::fwData::Point)point2)
+{
+    ::fwData::Vector::sptr distanceVector =
+        m_object->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+
+    if(!distanceVector)
+    {
+        distanceVector = ::fwData::Vector::New();
+        m_object->setField(::fwDataTools::fieldHelper::Image::m_imageDistancesId, distanceVector);
+    }
+
+    ::fwData::PointList::sptr pointList = ::fwData::PointList::New();
+    pointList->getRefPoints().push_back(point1);
+    pointList->getRefPoints().push_back(point2);
+
+    distanceVector->getContainer().push_back(pointList);
+    m_object->setField("ShowDistances", ::fwData::Boolean::New(true));
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/MeasurementReport.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/MeasurementReport.cpp
new file mode 100644
index 0000000..cb661ff
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/reader/tid/MeasurementReport.cpp
@@ -0,0 +1,72 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/reader/tid/Fiducial.hpp"
+#include "fwGdcmIO/reader/tid/Measurement.hpp"
+#include "fwGdcmIO/reader/tid/MeasurementReport.hpp"
+
+namespace fwGdcmIO
+{
+namespace reader
+{
+namespace tid
+{
+
+//------------------------------------------------------------------------------
+
+MeasurementReport::MeasurementReport(SPTR(::fwMedData::DicomSeries)dicomSeries,
+                                     SPTR(::gdcm::Reader)reader,
+                                     SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                     ::fwData::Image::sptr image,
+                                     ::fwLog::Logger::sptr logger) :
+    ::fwGdcmIO::reader::tid::TemplateID< ::fwData::Image >(dicomSeries, reader, instance, image, logger)
+{
+}
+
+//------------------------------------------------------------------------------
+
+MeasurementReport::~MeasurementReport()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void MeasurementReport::readSR(SPTR(::fwGdcmIO::container::sr::DicomSRNode)root)
+{
+    if(root->getCodedAttribute() ==
+       ::fwGdcmIO::container::DicomCodedAttribute("dd1dd1", "DCM", "Imaging Measurement Report"))
+    {
+        for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& node: root->getSubNodeContainer())
+        {
+            // Try to identify a fiducial node
+            if(node->getCodedAttribute() == ::fwGdcmIO::container::DicomCodedAttribute("dd1d93", "DCM", "Fiducials"))
+            {
+                for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& subNode: node->getSubNodeContainer())
+                {
+                    ::fwGdcmIO::reader::tid::Fiducial fiducial(m_dicomSeries, m_reader, m_instance, m_object, m_logger);
+                    fiducial.readNode(subNode);
+                }
+            }
+            // Try to identify a measurement node
+            else if(node->getCodedAttribute() ==
+                    ::fwGdcmIO::container::DicomCodedAttribute("dd1d91", "DCM", "Imaging Measurements"))
+            {
+                for(const SPTR(::fwGdcmIO::container::sr::DicomSRNode)& subNode: node->getSubNodeContainer())
+                {
+                    ::fwGdcmIO::reader::tid::Measurement measurement(m_dicomSeries, m_reader, m_instance, m_object,
+                                                                     m_logger);
+                    measurement.readNode(subNode);
+                }
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace tid
+} // namespace reader
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/Series.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/Series.cpp
new file mode 100644
index 0000000..0e4a674
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/Series.cpp
@@ -0,0 +1,147 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/Series.hpp"
+
+#include "fwGdcmIO/writer/iod/CTMRImageIOD.hpp"
+#include "fwGdcmIO/writer/iod/ComprehensiveSRIOD.hpp"
+#include "fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp"
+#include "fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataIO/writer/registry/macros.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Series.hpp>
+
+#include <boost/make_shared.hpp>
+
+fwDataIOWriterRegisterMacro(::fwGdcmIO::writer::Series);
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+
+//------------------------------------------------------------------------------
+
+Series::Series(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this),
+    m_fiducialsExportMode(SPATIAL_FIDUCIALS)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Series::~Series()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Series::write() throw (::fwGdcmIO::exception::Failed)
+{
+    ::fwMedData::Series::sptr series = this->getConcreteObject();
+    SLM_ASSERT("::fwMedData::Series not instanced", series);
+
+    // TODO: Make the user choose this value and implement EnhancedCTImageIOD/EnhancedMRImageIOD
+    bool multiFiles = true;
+
+    // Initialization shared object
+    SPTR(::fwGdcmIO::container::DicomInstance) instance =
+        std::make_shared< ::fwGdcmIO::container::DicomInstance >(series, multiFiles);
+
+    // Retrieve series SOPClassUID
+    const std::string& sopClassUID = instance->getSOPClassUID();
+
+    if(sopClassUID == ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::CTImageStorage) ||
+       sopClassUID == ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::MRImageStorage))
+    {
+        ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+        SLM_ASSERT("::fwMedData::ImageSeries not instanced", imageSeries);
+        ::fwData::Image::sptr image = imageSeries->getImage();
+        SLM_ASSERT("::fwData::Image not instanced", image);
+
+        // Write image
+        ::fwGdcmIO::writer::iod::CTMRImageIOD imageIOD(instance, this->getFolder());
+        imageIOD.write(series);
+
+        ::fwData::PointList::sptr landmarks =
+            image->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+        ::fwData::Vector::sptr distances =
+            image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+        if((landmarks && !landmarks->getPoints().empty()) || (distances && !distances->empty()))
+        {
+            // Write Landmarks and Distances
+            if(m_fiducialsExportMode == SPATIAL_FIDUCIALS)
+            {
+                ::fwGdcmIO::writer::iod::SpatialFiducialsIOD spatialFiducialsIOD(instance, this->getFolder());
+                spatialFiducialsIOD.write(series);
+            }
+            else
+            {
+                ::fwGdcmIO::writer::iod::ComprehensiveSRIOD documentIOD(instance, this->getFolder(),
+                                                                        m_fiducialsExportMode == COMPREHENSIVE_3D_SR);
+                documentIOD.write(series);
+            }
+        }
+    }
+    else if(sopClassUID == ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::SurfaceSegmentationStorage))
+    {
+        SPTR(::fwGdcmIO::container::DicomInstance) imageInstance = this->getImageInstance();
+        ::fwGdcmIO::writer::iod::SurfaceSegmentationIOD iod(instance, imageInstance, this->getFolder());
+        iod.write(series);
+    }
+    else
+    {
+        SLM_WARN("Series type not supported.");
+    }
+
+    // Push instance into container
+    m_dicomInstanceMap[series->getInstanceUID()] = instance;
+
+}
+
+//------------------------------------------------------------------------------
+
+bool Series::hasDocumentSR(::fwMedData::ImageSeries::csptr imageSeries) const
+{
+    ::fwData::Image::csptr image = imageSeries->getImage();
+    SLM_ASSERT("Image not instanced", image);
+
+    ::fwData::PointList::sptr pl;
+    pl = image->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+    // Check if image has landmark and distance
+    return ((pl && pl->getPoints().size() > 0) ||
+            image->getField(::fwDataTools::fieldHelper::Image::m_imageDistancesId));
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwGdcmIO::container::DicomInstance) Series::getImageInstance()
+{
+    SLM_ASSERT("You must have created an image instance before trying to access it.", !m_dicomInstanceMap.empty());
+    return m_dicomInstanceMap.begin()->second;
+}
+
+//------------------------------------------------------------------------------
+
+std::string Series::extension()
+{
+    return std::string("");
+}
+
+//------------------------------------------------------------------------------
+
+}// namespace writer
+
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/SeriesDB.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/SeriesDB.cpp
new file mode 100644
index 0000000..e2e8806
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/SeriesDB.cpp
@@ -0,0 +1,96 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/SeriesDB.hpp"
+
+#include <fwCore/base.hpp>
+#include <fwDataIO/writer/registry/macros.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwTools/Stringizer.hpp>
+
+#include <boost/bind.hpp>           // for ProgessHandler
+#include <boost/filesystem.hpp>
+#include <boost/foreach.hpp>
+#include <boost/lambda/lambda.hpp>  // for ProgessHandler
+
+fwDataIOWriterRegisterMacro(::fwGdcmIO::writer::SeriesDB);
+
+namespace fwGdcmIO
+{
+
+namespace writer
+{
+
+//------------------------------------------------------------------------------
+
+SeriesDB::SeriesDB(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this),
+    m_fiducialsExportMode(::fwGdcmIO::writer::Series::SPATIAL_FIDUCIALS)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SeriesDB::~SeriesDB()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDB::write()
+{
+//    // Disable GDCM Warnings
+//    ::gdcm::Trace::SetWarning(false);
+
+    ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
+    SLM_ASSERT("SeriesDB not instanced", seriesDB);
+
+    ::fwGdcmIO::writer::Series::sptr writer = ::fwGdcmIO::writer::Series::New();
+    writer->setFiducialsExportMode(m_fiducialsExportMode);
+
+    // Copy and sort container in order to write ImageSeries before ModelSeries
+    ::fwMedData::SeriesDB::ContainerType seriesContainer = seriesDB->getContainer();
+    std::sort (seriesContainer.begin(), seriesContainer.end(), SeriesDB::seriesComparator);
+
+    // Write all patients
+    for( ::fwMedData::Series::sptr series: seriesContainer)
+    {
+        // Create a new directory
+        const ::boost::filesystem::path& seriesPath = this->getFolder() / series->getInstanceUID();
+        ::boost::filesystem::create_directory(seriesPath);
+        writer->setObject(series);
+        writer->setFolder(seriesPath);
+
+        // Forward event progress to its parents
+        ::fwTools::ProgressAdviser::ProgessHandler handler =
+            ::boost::bind( &Series::notifyProgress, this, ::boost::lambda::_1, ::boost::lambda::_2);
+        writer->addHandler(handler);
+
+        // Write a series
+        writer->write();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+std::string SeriesDB::extension()
+{
+    return std::string("");
+}
+
+//------------------------------------------------------------------------------
+
+bool SeriesDB::seriesComparator(SPTR(::fwMedData::Series)a, SPTR(::fwMedData::Series)b)
+{
+    ::fwMedData::ModelSeries::sptr ma = ::fwMedData::ModelSeries::dynamicCast(a);
+    ::fwMedData::ModelSeries::sptr mb = ::fwMedData::ModelSeries::dynamicCast(b);
+    return (mb && !ma);
+}
+
+} // namespace writer
+
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Document.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Document.cpp
new file mode 100644
index 0000000..ded54d4
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Document.cpp
@@ -0,0 +1,188 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/ie/Document.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/StructuredReport.hpp"   // For graphviz dump
+#include "fwGdcmIO/writer/tid/MeasurementReport.hpp"
+
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/algorithm/string/split.hpp>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Document::Document(SPTR(::gdcm::Writer)writer,
+                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                   ::fwData::Image::sptr image,
+                   bool use3DSR) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwData::Image >(writer, instance, image), m_use3DSR(use3DSR)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Document::~Document()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Document::writeSRDocumentGeneralModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    ::boost::posix_time::ptime ptime = boost::posix_time::second_clock::local_time();
+
+    // Instance Number - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< int, 0x0020, 0x0013 >(0, dataset);
+
+    // Content Date - Type 1 - FIXME: Keep series date ?
+    std::string date = ::fwTools::getDate(ptime);
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0023 >(date, dataset);
+
+    // Content Time - Type 1 - FIXME: Keep series time ?
+    std::string time = ::fwTools::getTime(ptime);
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0033 >(time, dataset);
+
+    // Performed Procedure Code Sequence (0040,A372) // Type 2 (FIXME: CID 7000 ?)
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = new ::gdcm::SequenceOfItems();
+    sequence->SetLengthToUndefined();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0040, 0xa372 >(sequence, dataset);
+
+    // Completion flag - Type 1 - (FIXME: Set to COMPLETE ?)
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa491 >("PARTIAL", dataset);
+
+    // Verification Flag - Type 1 - (FIXME: Set to VERIFIED ?)
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0040, 0xa493 >("UNVERIFIED", dataset);
+
+    // Pertinent Other Evidence Sequence - Type 1C
+    this->writePertinentOtherEvidenceSequence();
+
+}
+
+//------------------------------------------------------------------------------
+
+void Document::writePertinentOtherEvidenceSequence()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Pertinent Other Evidence Sequence - Type 1C
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = new ::gdcm::SequenceOfItems();
+    sequence->SetLengthToUndefined();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0040, 0xa385 >(sequence, dataset);
+
+    // Add new study to sequence
+    ::gdcm::Item studyItem;
+    studyItem.SetVLToUndefined();
+    ::gdcm::DataSet& studyItemDataset = studyItem.GetNestedDataSet();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000D >(m_instance->getStudyInstanceUID(), studyItemDataset);
+
+    // Referenced Series Sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > seriesSequence = new ::gdcm::SequenceOfItems();
+    seriesSequence->SetLengthToUndefined();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1115 >(seriesSequence, studyItemDataset);
+
+    // Add new series to sequence
+    ::gdcm::Item seriesItem;
+    seriesItem.SetVLToUndefined();
+    ::gdcm::DataSet& seriesItemDataset = seriesItem.GetNestedDataSet();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000E >(m_instance->getSeriesInstanceUID(), seriesItemDataset);
+
+    // Referenced SOP Sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sopSequence = new ::gdcm::SequenceOfItems();
+    sopSequence->SetLengthToUndefined();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1199 >(sopSequence, seriesItemDataset);
+
+    for(const std::string& instanceUID: m_instance->getSOPInstanceUIDContainer())
+    {
+        // Add new instance to sequence
+        ::gdcm::Item instanceItem;
+        instanceItem.SetVLToUndefined();
+        ::gdcm::DataSet& instanceItemDataset = instanceItem.GetNestedDataSet();
+
+        // Referenced SOP Class UID - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1150 >(m_instance->getSOPClassUID(), instanceItemDataset);
+
+        // Referenced SOP Instance UID - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1155 >(instanceUID, instanceItemDataset);
+
+        sopSequence->AddItem(instanceItem);
+    }
+
+    seriesSequence->AddItem(seriesItem);
+    sequence->AddItem(studyItem);
+}
+
+//------------------------------------------------------------------------------
+
+void Document::writeSRDocumentContentModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Create SR Root node
+    ::fwGdcmIO::writer::tid::MeasurementReport report(m_writer, m_instance, m_object);
+    SPTR(::fwGdcmIO::container::sr::DicomSRNode) root = report.createRootNode(m_use3DSR);
+    root->write(dataset);
+
+    // Dump SR
+    //::fwGdcmIO::helper::StructuredReport::dumpSR(root);
+}
+
+//------------------------------------------------------------------------------
+
+void Document::writeSOPCommonModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // SOP Class UID
+    std::string sopClassUID;
+    if(!m_use3DSR)
+    {
+        sopClassUID = ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::ComprehensiveSR);
+    }
+    else
+    {
+        sopClassUID = "1.2.840.10008.5.1.4.1.1.88.34";  // FIXME Remove hard coded string
+//        sopClassUID = ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::Comprehensive3DSR);
+    }
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0016 >(sopClassUID, dataset);
+
+    // SOP Instance UID
+    ::gdcm::UIDGenerator uidGenerator;
+    std::string sopInstanceUID = uidGenerator.Generate();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0018 >(sopInstanceUID, dataset);
+}
+
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Equipment.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Equipment.cpp
new file mode 100644
index 0000000..ea8366a
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Equipment.cpp
@@ -0,0 +1,76 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/writer/ie/Equipment.hpp"
+
+#include <fwMedData/Equipment.hpp>
+#include <fwRuntime/profile/Profile.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Equipment::Equipment(SPTR(::gdcm::Writer)writer,
+                     SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                     ::fwMedData::Equipment::sptr equipment) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Equipment >(writer, instance, equipment)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Equipment::~Equipment()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Equipment::writeGeneralEquipmentModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Retrieve runtime profile
+    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
+
+    // Institution Name - Type 3
+    const std::string& institutName = m_object->getInstitutionName();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0080 >(institutName, dataset);
+
+    // Manufacturer - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0070 >("FW4SPL", dataset);
+
+    // Manufacturer’s Model Name - Type 3 (Type 1 for EnhancedGeneralEquipmentModule)
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1090 >("FW4SPL_FWGDCMIO", dataset);
+
+    // Device Serial Number - Type 3 (Type 1 for EnhancedGeneralEquipmentModule)
+    std::string deviceSerialNumber = std::string(FWGDCMIO_VER);
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0018, 0x1000 >(deviceSerialNumber, dataset);
+
+    // Software Versions - Type 3 (Type 1 for EnhancedGeneralEquipmentModule)
+    ::gdcm::Attribute< 0x0018, 0x1020 > attribute;
+    attribute.SetNumberOfValues(1);
+    attribute.SetValue((profile) ? (profile->getName()+" "+profile->getVersion()) : "Unknown");
+    dataset.Insert(attribute.GetAsDataElement());
+}
+
+//------------------------------------------------------------------------------
+
+void Equipment::writeEnhancedGeneralEquipmentModule()
+{
+    this->writeGeneralEquipmentModule();
+}
+
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/FrameOfReference.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/FrameOfReference.cpp
new file mode 100644
index 0000000..13dd17b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/FrameOfReference.cpp
@@ -0,0 +1,55 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/writer/ie/FrameOfReference.hpp"
+
+#include <fwMedData/Series.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+FrameOfReference::FrameOfReference(SPTR(::gdcm::Writer)writer,
+                                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                   ::fwMedData::Series::sptr series) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Series >(writer, instance, series)
+{
+}
+
+//------------------------------------------------------------------------------
+
+FrameOfReference::~FrameOfReference()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void FrameOfReference::writeFrameOfReferenceModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Frame of Reference UID
+    const std::string frameOfReferenceUID = m_instance->getSOPInstanceUIDContainer()[0];
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x0052 >(frameOfReferenceUID, dataset);
+
+    // Position Reference Indicator - Type 2
+    ::gdcm::Attribute< 0x0020, 0x1040 > positionReferenceIndicatorAttribute;
+    dataset.Insert(positionReferenceIndicatorAttribute.GetAsDataElement());
+
+}
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Image.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Image.cpp
new file mode 100644
index 0000000..e5c4d14
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Image.cpp
@@ -0,0 +1,277 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/ie/Image.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Image.hpp>
+
+#include <fwDataTools/helper/Image.hpp>
+
+#include <gdcmImageWriter.h>
+#include <gdcmUIDGenerator.h>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Image::Image(SPTR(::gdcm::Writer)writer,
+             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+             ::fwData::Image::sptr image) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwData::Image >(writer, instance, image)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Image::~Image()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeGeneralImageModule()
+{
+    // Nothing to write
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeGeneralImageModuleSpecificTags(unsigned int instanceNumber)
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Instance Number
+    ::fwGdcmIO::helper::DicomData::setTagValue< int, 0x0020, 0x0013 >(instanceNumber, dataset);
+
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeImagePlaneModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Retrieve GDCM image
+    SPTR(::gdcm::ImageWriter) imageWriter = std::static_pointer_cast< ::gdcm::ImageWriter >(m_writer);
+    ::gdcm::Image& gdcmImage              = imageWriter->GetImage();
+
+    // Pixel Spacing - Type 1
+    // WARNING : some DICOM image have not any spacing (NOT SUPPORTED BY FW4SPL), but stuff like "Pixel Aspect Ratio"
+    const std::size_t dimension          = m_object->getNumberOfDimensions();
+    const std::vector< double >& spacing = m_object->getSpacing();
+    for (unsigned int i = 0; i < dimension; ++i)
+    {
+        gdcmImage.SetSpacing(i, spacing[i]);
+    }
+    OSLM_TRACE("Image's spacing : " << spacing[0] << "x" << spacing[1] << "x" << spacing[2]);
+
+    // Slice Thickness - Type 2
+    // NOTE: ::gdcm::ImageWriter may replace SliceThickness values according to Image Origins
+    ::fwGdcmIO::helper::DicomData::setTagValue< double, 0x0018, 0x0050 >(spacing[2], dataset);
+
+    // Image Orientation (Patient) - Type 1
+    // This tag his handled by gdcm writer
+
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeImagePlaneModuleSpecificTags(unsigned int instanceNumber)
+{
+    // Retrieve GDCM image
+    SPTR(::gdcm::ImageWriter) imageWriter = std::static_pointer_cast< ::gdcm::ImageWriter >(m_writer);
+    ::gdcm::Image& gdcmImage              = imageWriter->GetImage();
+
+    // Image Position (Patient) - Type 1
+    const std::vector< double >& origin  = m_object->getOrigin();
+    const std::vector< double >& spacing = m_object->getSpacing();
+    gdcmImage.SetOrigin(0, origin[0]);
+    gdcmImage.SetOrigin(1, origin[1]);
+    gdcmImage.SetOrigin(2, origin[2] + spacing[2]*instanceNumber);
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeImagePixelModule()
+{
+    // Retrieve GDCM image
+    ::gdcm::ImageWriter* imageWriter = std::static_pointer_cast< ::gdcm::ImageWriter >(m_writer).get();
+    ::gdcm::Image& gdcmImage         = imageWriter->GetImage();
+
+    // Image's photometric interpretation - Type 1
+    ::gdcm::PhotometricInterpretation photoInter =
+        ::fwGdcmIO::helper::DicomData::getPhotometricInterpretation(*m_object);
+    gdcmImage.SetPhotometricInterpretation(photoInter);
+    OSLM_TRACE("Image's photometric interpretation : " << photoInter);
+
+    // Image's pixel type
+    ::gdcm::PixelFormat pixelFormat = ::fwGdcmIO::helper::DicomData::getPixelType(m_object);
+    gdcmImage.SetPixelFormat(pixelFormat);
+    OSLM_TRACE("Image's pixel type : " << pixelFormat);
+
+    //Image's number of dimension
+    unsigned int dimension =
+        static_cast<unsigned int>((m_instance->getIsMultiFiles()) ? 2 : m_object->getNumberOfDimensions());
+    gdcmImage.SetNumberOfDimensions(dimension);
+    OSLM_TRACE("Image's number of dimensions : " << dimension);
+
+    // Image's dimension
+    const ::fwData::Image::SizeType& size = m_object->getSize();
+    for (unsigned int i = 0; i < dimension; ++i)
+    {
+        gdcmImage.SetDimension(i, static_cast<unsigned int>(size[i]));
+    }
+    OSLM_TRACE("Image's dimensions : " << size[0] << "x" << size[1] << "x" << size[2]);
+
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeImagePixelModuleSpecificTags(unsigned int instanceNumber)
+{
+    SLM_ASSERT("Wrong instance number.", m_instance->getIsMultiFiles() || instanceNumber == 0);
+
+    // Retrieve GDCM image
+    ::gdcm::ImageWriter* imageWriter = std::static_pointer_cast< ::gdcm::ImageWriter >(m_writer).get();
+    ::gdcm::Image& gdcmImage         = imageWriter->GetImage();
+
+    // Compute buffer size
+    const ::fwData::Image::SizeType& size = m_object->getSize();
+    std::size_t bufferLength              = size[0] * size[1] * gdcmImage.GetPixelFormat().GetPixelSize();
+    bufferLength = (!m_instance->getIsMultiFiles()) ? (bufferLength*size[2]) : bufferLength;
+
+    // Retrieve image buffer
+    ::fwDataTools::helper::Image imageHelper(m_object);
+    const char* imageBuffer = static_cast< char* >(imageHelper.getBuffer());
+
+    // Pixel Data - Type 1C
+    ::gdcm::DataElement pixeldata(::gdcm::Tag(0x7fe0, 0x0010));
+    pixeldata.SetByteValue(imageBuffer + instanceNumber * bufferLength, static_cast<unsigned int>(bufferLength));
+    gdcmImage.SetDataElement(pixeldata);
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeVOILUTModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    const double windowCenter = m_object->getWindowCenter();
+    const double windowWidth  = m_object->getWindowWidth();
+    if(windowCenter || windowWidth)
+    {
+        // Image's windows center
+        ::fwGdcmIO::helper::DicomData::setTagValues< double, 0x0028, 0x1050 >(&windowCenter, 1, dataset);
+        OSLM_TRACE("Image's window center : " << windowCenter);
+
+        // Image's windows width
+        ::fwGdcmIO::helper::DicomData::setTagValues< double, 0x0028, 0x1051 >(&windowWidth, 1, dataset);
+        OSLM_TRACE("Image's window width : " << windowWidth);
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeSOPCommonModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // SOP Class UID
+    ::fwGdcmIO::helper::DicomData::setTagValue<  0x0008, 0x0016 >(m_instance->getSOPClassUID(), dataset);
+    SLM_TRACE("SOP Class UID : " + m_instance->getSOPClassUID());
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeSOPCommonModuleSpecificTags(unsigned int instanceNumber)
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // SOP Instance UID
+    const std::string sopInstanceUID = m_instance->getSOPInstanceUIDContainer()[instanceNumber];
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0018 >(sopInstanceUID, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeCTImageModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Image Type - Type 1 - FIXME: Fake Value
+    const ::gdcm::String< 92, 16 > imageType = "ORIGINAL\\PRIMARY\\AXIAL";
+    ::fwGdcmIO::helper::DicomData::setTagValues< ::gdcm::String< 92, 16 >, 0x0008, 0x0008 >(&imageType, 1, dataset);
+
+    // Acquisition Number - Type 2 - FIXME: Fake Value
+    unsigned int acquisitionNumber = 1;
+    ::fwGdcmIO::helper::DicomData::setTagValue< unsigned int, 0x0020, 0x0012 >(acquisitionNumber, dataset);
+
+    // KVP - Type 2 - FIXME: Fake Value
+    ::fwGdcmIO::helper::DicomData::setTagValue< double, 0x0018, 0x0060 >(1, dataset);
+
+    // Rescale Type - Type 1C - FIXME: Fake Value
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0028, 0x1054 >("HU", dataset);
+
+}
+
+//------------------------------------------------------------------------------
+
+void Image::writeMRImageModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Image Type - Type 1 - FIXME: Fake Value
+    const ::gdcm::String< 92, 16 > imageType = "ORIGINAL\\PRIMARY\\MPR";
+    ::fwGdcmIO::helper::DicomData::setTagValues< ::gdcm::String< 92, 16 >, 0x0008, 0x0008 >(&imageType, 1, dataset);
+
+    // Scanning Sequence - Type 1 - FIXME: Fake Value
+    const ::gdcm::String< 92, 16 > scanningSequence = "SE";
+    ::fwGdcmIO::helper::DicomData::setTagValues< ::gdcm::String< 92, 16 >, 0x0018, 0x0020 >(&scanningSequence, 1,
+                                                                                            dataset);
+
+    // Sequence Variant - Type 1 - FIXME: Fake Value
+    const ::gdcm::String< 92, 16 > sequenceVariant = "NONE";
+    ::fwGdcmIO::helper::DicomData::setTagValues< ::gdcm::String< 92, 16 >, 0x0018, 0x0021 >(&sequenceVariant, 1,
+                                                                                            dataset);
+
+    // Scan Options - Type 2 - FIXME: Fake Value
+    const ::gdcm::String< 92, 16 > scanOption = "";
+    ::fwGdcmIO::helper::DicomData::setTagValues< ::gdcm::String< 92, 16 >, 0x0018, 0x0022 >(&scanOption, 1, dataset);
+
+    // MR Acquisition Type - Type 2 - FIXME: Fake Value
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0018, 0x0023 >("3D", dataset);
+
+    // Repetition Time - Type 2C - FIXME: Fake Value
+    ::fwGdcmIO::helper::DicomData::setTagValue< double, 0x0018, 0x0080 >(0, dataset);
+
+    // Echo Time - Type 2 - FIXME: Fake Value
+    ::fwGdcmIO::helper::DicomData::setTagValue< double, 0x0018, 0x0081 >(1, dataset);
+
+    // Echo Train Length - Type 2 - FIXME: Fake Value
+    ::fwGdcmIO::helper::DicomData::setTagValue< unsigned int, 0x0018, 0x0091 >(1, dataset);
+
+
+}
+
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Patient.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Patient.cpp
new file mode 100644
index 0000000..fdc7f79
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Patient.cpp
@@ -0,0 +1,56 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/writer/ie/Patient.hpp"
+
+#include <fwMedData/Patient.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Patient::Patient(SPTR(::gdcm::Writer)writer,
+                 SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                 ::fwMedData::Patient::sptr patient) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Patient >(writer, instance, patient)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Patient::~Patient()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Patient::writePatientModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Patient's name - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0010, 0x0010 >(m_object->getName(), dataset);
+
+    // Patient's ID - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0010, 0x0020 >(m_object->getPatientId(), dataset);
+
+    // Patient's birth date - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0010, 0x0030 >(m_object->getBirthdate(), dataset);
+
+    // Patient's sex - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0010, 0x0040 >(m_object->getSex(), dataset);
+}
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Series.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Series.cpp
new file mode 100644
index 0000000..e8a704e
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Series.cpp
@@ -0,0 +1,150 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/writer/ie/Series.hpp"
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Series::Series(SPTR(::gdcm::Writer)writer,
+               SPTR(::fwGdcmIO::container::DicomInstance)instance,
+               ::fwMedData::Series::sptr series) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Series >(writer, instance, series)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Series::~Series()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Series::writeGeneralSeriesModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Serie's instance UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000e >(m_object->getInstanceUID(), dataset);
+
+    // Series's modality - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0060 >(m_object->getModality(), dataset);
+
+    // Serie's date - Type 3
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0021 >(m_object->getDate(), dataset);
+
+    // Serie's time - Type 3
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0031 >(m_object->getTime(), dataset);
+
+    // Serie's description
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x103e >(m_object->getDescription(), dataset);
+
+    // Serie's number - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< int, 0x0020, 0x0011 >(0, dataset);
+
+    // Performing physicians name - Type 3
+    ::fwMedData::DicomValuesType performingPhysicians = m_object->getPerformingPhysiciansName();
+    if (!performingPhysicians.empty())
+    {
+        ::gdcm::String< >* physicians = new ::gdcm::String< >[performingPhysicians.size()];
+        unsigned int count = 0;
+        for(std::string physician: performingPhysicians)
+        {
+            physicians[count++] = ::gdcm::String<>(physician);
+        }
+        ::fwGdcmIO::helper::DicomData::setTagValues< ::gdcm::String< >, 0x0008, 0x1050 >(physicians, count, dataset);
+    }
+
+    // Laterality - Type 2C - FIXME: Fake Value - Should be absent for the abdomen or chest
+    if(m_instance->getSOPClassUID() !=
+       ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::SurfaceSegmentationStorage))
+    {
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x0060 >("R", dataset);
+    }
+
+    // Patient Position - Type 2C
+    ::gdcm::Attribute< 0x0018, 0x5100 > patientPositionAttribute;
+    dataset.Insert(patientPositionAttribute.GetAsDataElement());
+}
+
+//------------------------------------------------------------------------------
+
+void Series::writeSegmentationSeriesModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Series's modality - Type 1
+    dataset.Remove(::gdcm::Tag(0x0008, 0x0060));
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0060 >("SEG", dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void Series::writeSRDocumentSeriesModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Create generator
+    ::gdcm::UIDGenerator uidGenerator;
+
+    // Series's modality - Type 1
+    dataset.Remove(::gdcm::Tag(0x0008, 0x0060));
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0060 >("SR", dataset);
+
+    // Serie's instance UID - Type 1
+    dataset.Remove(::gdcm::Tag(0x0020, 0x000e));
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000e >(uidGenerator.Generate(), dataset);
+
+    // Serie's number - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< int, 0x0020, 0x0011 >(0, dataset);
+
+    // Referenced Performed Procedure Step Sequence  - Type 2
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence = new ::gdcm::SequenceOfItems();
+    sequence->SetLengthToUndefined();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008,0x1111 >(sequence, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void Series::writeSpatialFiducialsSeriesModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Create uid generator
+    ::gdcm::UIDGenerator uidGenerator;
+
+    // Serie's instance UID - Type 1
+    dataset.Remove(::gdcm::Tag(0x0020, 0x000e));
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000e >(uidGenerator.Generate(), dataset);
+
+    // Series's modality - Type 1
+    dataset.Remove(::gdcm::Tag(0x0008, 0x0060));
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0060 >("FID", dataset);
+
+}
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/SpatialFiducials.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/SpatialFiducials.cpp
new file mode 100644
index 0000000..7dfbfef
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/SpatialFiducials.cpp
@@ -0,0 +1,304 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/ie/SpatialFiducials.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/Point.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/foreach.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+SpatialFiducials::SpatialFiducials(SPTR(::gdcm::Writer)writer,
+                                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                   ::fwData::Image::sptr image) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwData::Image >(writer, instance, image)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SpatialFiducials::~SpatialFiducials()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducials::writeSpatialFiducialsModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    ::boost::posix_time::ptime ptime = boost::posix_time::second_clock::local_time();
+
+    // Content Date - Type 1 - FIXME: Keep series date ?
+    std::string date = ::fwTools::getDate(ptime);
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0023 >(date, dataset);
+
+    // Content Time - Type 1 - FIXME: Keep series time ?
+    std::string time = ::fwTools::getTime(ptime);
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0033 >(time, dataset);
+
+    // Instance Number - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< unsigned int, 0x0020, 0x0013 >(0, dataset);
+
+    // Content Label - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0080 >("SF", dataset);
+
+    // Content Description - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0081 >("Spatial Fiducials", dataset);
+
+    // Content Creator's Name - Type 2 - TODO: Set fiducial creator name ?
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0084 >("Unknown^Unknown", dataset);
+
+
+    // Fiducial Set Sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > fiducialSetSequence = new ::gdcm::SequenceOfItems();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0070, 0x031C >(fiducialSetSequence, dataset);
+
+    // Create Fiducial Sequence Item
+    ::gdcm::Item fiducialSetItem;
+    fiducialSetItem.SetVLToUndefined();
+    ::gdcm::DataSet& fiducialSetItemDataset = fiducialSetItem.GetNestedDataSet();
+
+    // Referenced Image Sequence - Type 1C
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedImageSequence = new ::gdcm::SequenceOfItems();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1140 >(referencedImageSequence, fiducialSetItemDataset);
+
+    // Add all referenced image
+    for(unsigned int index = 0; index < m_instance->getSOPInstanceUIDContainer().size(); ++index)
+    {
+        ::gdcm::Item referencedImageItem;
+        referencedImageItem.SetVLToUndefined();
+        ::gdcm::DataSet& referencedImageItemDataset = referencedImageItem.GetNestedDataSet();
+
+        // Referenced Frame Number - Type 1C
+        int frameNumber = index + 1;
+        ::fwGdcmIO::helper::DicomData::setTagValues< int, 0x0008, 0x1160 >(&frameNumber, 1, referencedImageItemDataset);
+
+        // Referenced SOP Class UID - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1150 >(m_instance->getSOPClassUID(),
+                                                                     referencedImageItemDataset);
+
+        // Referenced SOP Instance UID - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1155 >(
+            m_instance->getSOPInstanceUIDContainer()[index],
+            referencedImageItemDataset);
+
+        // Add referenced image to sequence
+        referencedImageSequence->AddItem(referencedImageItem);
+
+    }
+
+
+    // Fiducial Sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > fiducialSequence = new ::gdcm::SequenceOfItems();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0070, 0x031E >(fiducialSequence, fiducialSetItemDataset);
+
+    // Write landmarks
+    this->writeLandmarks(fiducialSequence);
+
+    // Add Fiducial Set to sequence
+    fiducialSetSequence->AddItem(fiducialSetItem);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducials::writeLandmarks(::gdcm::SmartPointer< ::gdcm::SequenceOfItems > sequence)
+throw(::fwGdcmIO::exception::Failed)
+{
+    ::fwData::PointList::sptr pointList =
+        m_object->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+    if (pointList)
+    {
+        unsigned int index = 0;
+        for(const ::fwData::Point::sptr& point: pointList->getRefPoints())
+        {
+            ::gdcm::Item fiducialItem;
+            fiducialItem.SetVLToUndefined();
+            ::gdcm::DataSet& fiducialItemDataset = fiducialItem.GetNestedDataSet();
+
+            // Fiducial Identifier - Type 1
+            std::stringstream ssIdentifier;
+            ssIdentifier << "landmark-" << index;
+            ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0310 >(ssIdentifier.str(), fiducialItemDataset);
+
+            // Fiducial Description - Type 3
+            std::string label =
+                point->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+            ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x030F >(label, fiducialItemDataset);
+
+            // Shape Type - Type 1
+            ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0306 >("POINT", fiducialItemDataset);
+
+            // Graphic Coordinates Data Sequence - Type 1C
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > graphicCoodinatesDataSequence =
+                new ::gdcm::SequenceOfItems();
+            ::fwGdcmIO::helper::DicomData::setSQ< 0x0070, 0x0318 >(graphicCoodinatesDataSequence, fiducialItemDataset);
+
+            ::gdcm::Item graphicDataItem;
+            graphicDataItem.SetVLToUndefined();
+            ::gdcm::DataSet& graphicDataItemDataset = graphicDataItem.GetNestedDataSet();
+
+            // Graphic Data - Type 1
+            float coordinates[2];
+            coordinates[0] = point->getCoord()[0];
+            coordinates[1] = point->getCoord()[1];
+            ::fwGdcmIO::helper::DicomData::setTagValues< float, 0x0070, 0x0022 >(coordinates, 2,
+                                                                                 graphicDataItemDataset);
+            OSLM_TRACE("WRITE NEW POINT : [" << label << "] " << coordinates[0] << " / " << coordinates[1]);
+
+            // Referenced Image Sequence - Type 1
+            ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedImageSequence = new ::gdcm::SequenceOfItems();
+            ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1140 >(referencedImageSequence, graphicDataItemDataset);
+
+            int frameNumber = ::fwGdcmIO::helper::DicomData::convertPointToFrameNumber(m_object, point);
+            this->addReferencedImage(frameNumber, referencedImageSequence);
+
+            // Add graphic data to sequence
+            graphicCoodinatesDataSequence->AddItem(graphicDataItem);
+
+            // Add Fiducial to sequence
+            sequence->AddItem(fiducialItem);
+
+            // Increase index
+            ++index;
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducials::writeCommonInstanceReferenceModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Referenced Series Sequence - Type 1C
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedSeriesSequence = new ::gdcm::SequenceOfItems();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1115 >(referencedSeriesSequence, dataset);
+
+    // Create Referenced Series
+    ::gdcm::Item referencedSeriesItem;
+    referencedSeriesItem.SetVLToUndefined();
+    ::gdcm::DataSet& referencedSeriesItemDataset = referencedSeriesItem.GetNestedDataSet();
+
+    // Series Instance UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000E >(m_instance->getSeriesInstanceUID(),
+                                                                 referencedSeriesItemDataset);
+
+    // Referenced Instance Sequence - Type 1
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedInstanceSequence = new ::gdcm::SequenceOfItems();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x114A >(referencedInstanceSequence, referencedSeriesItemDataset);
+
+    // Add all referenced image
+    for(unsigned int index = 0; index < m_instance->getSOPInstanceUIDContainer().size(); ++index)
+    {
+        ::gdcm::Item referencedInstanceItem;
+        referencedInstanceItem.SetVLToUndefined();
+        ::gdcm::DataSet& referencedInstanceItemDataset = referencedInstanceItem.GetNestedDataSet();
+
+        // Referenced SOP Class UID - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1150 >(m_instance->getSOPClassUID(),
+                                                                     referencedInstanceItemDataset);
+
+        // Referenced SOP Instance UID - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1155 >(
+            m_instance->getSOPInstanceUIDContainer()[index],
+            referencedInstanceItemDataset);
+
+        // Add referenced image to sequence
+        referencedInstanceSequence->AddItem(referencedInstanceItem);
+    }
+
+
+    referencedSeriesSequence->AddItem(referencedSeriesItem);
+
+    // Studies Containing Other Referenced Instances Sequence - Type 1C
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > studiesSequence = new ::gdcm::SequenceOfItems();
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1200 >(studiesSequence, dataset);
+
+    ::gdcm::Item studiesItem;
+    studiesItem.SetVLToUndefined();
+    ::gdcm::DataSet& studiesItemDataset = studiesItem.GetNestedDataSet();
+
+    // Study Instance UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000D >(m_instance->getStudyInstanceUID(), studiesItemDataset);
+
+    // Referenced Series Sequence - Type 1
+    ::fwGdcmIO::helper::DicomData::setSQ< 0x0008, 0x1115 >(referencedSeriesSequence, studiesItemDataset);
+
+    studiesSequence->AddItem(studiesItem);
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducials::writeSOPCommonModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // SOP Class UID
+    std::string sopClassUID = ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::SpacialFiducialsStorage);
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0016 >(sopClassUID, dataset);
+
+    // SOP Instance UID
+    ::gdcm::UIDGenerator uidGenerator;
+    std::string sopInstanceUID = uidGenerator.Generate();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0018 >(sopInstanceUID, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducials::addReferencedImage(int frameNumber,
+                                          ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedImageSequence) throw(
+    ::fwGdcmIO::exception::Failed)
+{
+    ::gdcm::Item referencedImageItem;
+    referencedImageItem.SetVLToUndefined();
+    ::gdcm::DataSet& referencedImageItemDataset = referencedImageItem.GetNestedDataSet();
+
+    // Referenced Frame Number - Type 1C
+    ::fwGdcmIO::helper::DicomData::setTagValues< int, 0x0008, 0x1160 >(&frameNumber, 1,
+                                                                       referencedImageItemDataset);
+
+    // Referenced SOP Class UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1150 >(m_instance->getSOPClassUID(),
+                                                                 referencedImageItemDataset);
+
+    // Referenced SOP Instance UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1155 >(
+        m_instance->getSOPInstanceUIDContainer()[frameNumber-1], referencedImageItemDataset);
+
+    // Add referenced image to sequence
+    referencedImageSequence->AddItem(referencedImageItem);
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Study.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Study.cpp
new file mode 100644
index 0000000..3e0a39d
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Study.cpp
@@ -0,0 +1,78 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/writer/ie/Study.hpp"
+
+#include <fwMedData/Study.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Study::Study(SPTR(::gdcm::Writer)writer,
+             SPTR(::fwGdcmIO::container::DicomInstance)instance,
+             ::fwMedData::Study::sptr study) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::Study >(writer, instance, study)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Study::~Study()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Study::writeGeneralStudyModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Study's date - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0020 >(m_object->getDate(), dataset);
+
+    // Study's time - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0030 >(m_object->getTime(), dataset);
+
+    // Study 's accession number - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0050 >("", dataset);
+
+    // Study's description - Type 3
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1030 >(m_object->getDescription(), dataset);
+
+    // Study's UID - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x000d >(m_object->getInstanceUID(), dataset);
+
+    // Study's ID - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0020, 0x0010 >("Unknown", dataset);
+
+    // Study's referring physician name
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0090 >(m_object->getReferringPhysicianName(), dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void Study::writePatientStudyModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // PatientAge
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0010, 0x1010 >(m_object->getPatientAge(), dataset);
+}
+
+//------------------------------------------------------------------------------
+
+}// namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Surface.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Surface.cpp
new file mode 100644
index 0000000..ba1ba49
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/ie/Surface.cpp
@@ -0,0 +1,503 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/container/DicomSurface.hpp"
+#include "fwGdcmIO/writer/ie/Surface.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/DictionarySegment.hpp"
+
+#include <fwData/Reconstruction.hpp>
+
+#include <fwDataIO/reader/DictionaryReader.hpp>
+
+#include <fwDataTools/helper/Mesh.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+
+#include <gdcmSurfaceHelper.h>
+#include <gdcmSurfaceWriter.h>
+#include <gdcmUIDGenerator.h>
+
+#include <boost/date_time/posix_time/posix_time.hpp>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace ie
+{
+
+//------------------------------------------------------------------------------
+
+Surface::Surface(SPTR(::gdcm::Writer)writer,
+                 SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                 SPTR(::fwGdcmIO::container::DicomInstance)imageInstance,
+                 ::fwMedData::ModelSeries::sptr series) :
+    ::fwGdcmIO::writer::ie::InformationEntity< ::fwMedData::ModelSeries >(writer, instance, series),
+    m_imageInstance(imageInstance)
+{
+    SLM_ASSERT("Image instance should not be null.", imageInstance);
+    SLM_ASSERT("Image instance SOPInstanceUID container should not be empty.",
+               !imageInstance->getSOPInstanceUIDContainer().empty());
+
+    // Create dictionary
+    m_structureDictionary = ::fwData::StructureTraitsDictionary::New();
+
+    // Ready the dictionary
+    ::fwDataIO::reader::DictionaryReader::sptr dictionaryReader = ::fwDataIO::reader::DictionaryReader::New();
+    dictionaryReader->setObject(m_structureDictionary);
+    dictionaryReader->setFile("./share/fwDataIO_0-2/OrganDictionary.dic");
+    try
+    {
+        dictionaryReader->read();
+    }
+    catch (const std::exception& e)
+    {
+        SLM_ERROR(e.what());
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+Surface::~Surface()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Surface::writeSurfaceSegmentationModule(unsigned short segmentationNumber)
+{
+    // Retrieve Surface Writer
+    SPTR(::gdcm::SurfaceWriter) surfaceWriter = std::static_pointer_cast< ::gdcm::SurfaceWriter >(m_writer);
+
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Retrieve reconstruction
+    ::fwData::Reconstruction::sptr reconstruction = m_object->getReconstructionDB()[segmentationNumber];
+
+    // Write Content Identification Macro
+    this->writeContentIdentificationMacro(segmentationNumber);
+
+    ::boost::posix_time::ptime ptime = boost::posix_time::second_clock::local_time();
+
+    // Content Date - Type 1 - FIXME: Keep series date ?
+    std::string date = m_object->getDate().empty() ? ::fwTools::getDate(ptime) : m_object->getDate();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0023 >(date, dataset);
+
+    // Content Time - Type 1 - FIXME: Keep series time ?
+    std::string time = m_object->getTime().empty() ? ::fwTools::getTime(ptime) : m_object->getTime();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0033 >(time, dataset);
+
+    // Identification of the segment
+    const std::string& segmentDescription = reconstruction->getOrganName();
+
+    // Get the info of the struture type and format it
+    std::string segmentLabel = reconstruction->getStructureType();
+
+    if(segmentLabel.empty())
+    {
+        SLM_WARN("Trying to retrieve structure type from organ name : \"" + segmentDescription + "\".");
+        segmentLabel = segmentDescription;
+    }
+
+    // Format segment label
+    ::boost::algorithm::trim(segmentLabel);
+    if(segmentLabel.size() > 1)
+    {
+        segmentLabel = ::boost::algorithm::to_upper_copy(segmentLabel.substr(0,1)) + segmentLabel.substr(1);
+    }
+
+    ::fwData::StructureTraitsDictionary::StructureTypeNameContainer segmentLabelContainer =
+        m_structureDictionary->getStructureTypeNames();
+
+    ::fwData::StructureTraits::sptr structure;
+    if (std::find(segmentLabelContainer.begin(), segmentLabelContainer.end(), segmentLabel) !=
+        segmentLabelContainer.end())
+    {
+        structure = m_structureDictionary->getStructure(segmentLabel);
+    }
+    else
+    {
+        SLM_WARN("No structure traits found in dictionary for value \"" + segmentLabel + "\".");
+        structure = ::fwData::StructureTraits::New();
+    }
+
+    // Identify the segmentation from its name
+    const ::fwGdcmIO::container::DicomCodedAttribute* anatomicRegion =
+        ::fwGdcmIO::helper::DictionarySegment::guessAnatRegionFromLabel(structure->getAnatomicRegion());
+
+    const ::fwGdcmIO::container::DicomCodedAttribute* propertyCategory =
+        ::fwGdcmIO::helper::DictionarySegment::guessPropCategoryFromLabel(structure->getPropertyCategory());
+
+    const ::fwGdcmIO::container::DicomCodedAttribute* propertyType =
+        ::fwGdcmIO::helper::DictionarySegment::guessPropTypeFromLabel(structure->getPropertyType());
+
+
+    // Add segmentation to GDCM Surface Writer
+    ::gdcm::SmartPointer< ::gdcm::Segment > segment = new ::gdcm::Segment();
+    surfaceWriter->AddSegment(segment);
+
+    // Create Segment Sequence
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > surfaceSequence = new ::gdcm::SequenceOfItems();
+    surfaceSequence->SetLengthToUndefined();
+
+    // Create Surface item
+    ::gdcm::Item surfaceItem;
+    surfaceItem.SetVLToUndefined();
+    ::gdcm::DataSet& segmentationDataset = surfaceItem.GetNestedDataSet();
+
+    // Segment Number (0x0062,0x0004) - Type 1 (start at 1)
+    unsigned short realSegmentationNumber = static_cast<unsigned short>(segmentationNumber + 1);
+    segment->SetSegmentNumber(realSegmentationNumber);
+    OSLM_TRACE("Segment Number : " << realSegmentationNumber);
+
+    // Segment Label (0x0062,0x0005) - Type 1
+    segment->SetSegmentLabel(segmentLabel.c_str());
+    OSLM_TRACE("Segment Label : " << segmentLabel);
+
+    // Segment Description (0x0062,0x0006) - Type 3
+    segment->SetSegmentDescription(segmentDescription.c_str());
+    OSLM_TRACE("Segment Description : " << segmentDescription);
+
+    // Segment Algorithm Type (0x0062,0x0008) - Type 1
+    segment->SetSegmentAlgorithmType(::gdcm::Segment::MANUAL);
+
+    // Create Anatomic Region Sequence - See General Anatomy Macros PS 3.3 C.10.5
+    if (anatomicRegion != 0)
+    {
+        // Anatomic Region Sequence (0x0008,0x2218) - Type 1
+        ::gdcm::SegmentHelper::BasicCodedEntry anatomicRegionEntry(anatomicRegion->getCodeValue().c_str(),
+                                                                   anatomicRegion->getCodingSchemeDesignator().c_str(),
+                                                                   anatomicRegion->getCodeMeaning().c_str());
+        segment->SetAnatomicRegion(anatomicRegionEntry);
+    }
+
+    // Create Segmented Property Category Code Sequence
+    if (propertyCategory != 0)
+    {
+        // Segmented Property Category Code Sequence (0x0062,0x0003) - Type 1
+        // See: PS.3.3 Table 8.8-1 and Context ID is 7150
+        ::gdcm::SegmentHelper::BasicCodedEntry propertyCategoryEntry(propertyCategory->getCodeValue().c_str(),
+                                                                     propertyCategory->getCodingSchemeDesignator().c_str(),
+                                                                     propertyCategory->getCodeMeaning().c_str());
+        segment->SetPropertyCategory(propertyCategoryEntry);
+    }
+
+    // Create Segmented Property Type Code Sequence
+    if (propertyType != 0)
+    {
+        // Segmented Property Type Code Sequence (0x0062,0x000F) - Type 1
+        // See: PS.3.3 Table 8.8-1 and PS 3.16 Context ID 7151
+        ::gdcm::SegmentHelper::BasicCodedEntry propertyTypeEntry(propertyType->getCodeValue().c_str(),
+                                                                 propertyType->getCodingSchemeDesignator().c_str(),
+                                                                 propertyType->getCodeMeaning().c_str());
+        segment->SetPropertyType(propertyTypeEntry);
+    }
+
+    // Surface Count (0x0066,0x002A) - Type 1
+    // WARNING : Hard coded because currently, reconstruction just contains one surface.
+    segment->SetSurfaceCount(1);
+
+    // Create Referenced Surface Sequence
+    // Each item of this sequence references a surface for the current segment.
+    // A segment can have several surfaces (see tag(0x0066,0x002A), Surface Count).
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > referencedSurfaceSequence = new ::gdcm::SequenceOfItems();
+    referencedSurfaceSequence->SetLengthToUndefined();
+    {
+        // Create its item
+        ::gdcm::Item referencedSurfaceItem;
+        referencedSurfaceItem.SetVLToUndefined();
+        ::gdcm::DataSet& referencedSurfaceDataset = referencedSurfaceItem.GetNestedDataSet();
+
+        // WARNING : index+1 == segmentNumber == surfaceNumber because currently, reconstruction just contains one surface.*
+        // Referenced Surface Number - Type 1
+        ::fwGdcmIO::helper::DicomData::setTagValue< uint16_t, 0x0066, 0x002C >(realSegmentationNumber,
+                                                                               referencedSurfaceDataset);
+
+        // Create Segment Surface Source Instance Sequence
+        // Reference the image of the fwMedData::ImageSeries
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > surfaceSourceInstanceSequence = new ::gdcm::SequenceOfItems();
+        surfaceSourceInstanceSequence->SetLengthToUndefined();
+
+        // Include ‘Image SOP Instance Reference Macro’ Table C.10-3
+        const std::string& referencedSOPClassUID                            = m_imageInstance->getSOPClassUID();
+        const std::vector< std::string >& referencedSOPInstanceUIDContainer =
+            m_imageInstance->getSOPInstanceUIDContainer();
+
+        for(const std::string& sopInstanceUID: referencedSOPInstanceUIDContainer)
+        {
+            // Create one item
+            ::gdcm::Item imageSOPItem;
+            imageSOPItem.SetVLToUndefined();
+            ::gdcm::DataSet& imageSOPDataset = imageSOPItem.GetNestedDataSet();
+
+            // SOP Class UID - Type 1
+            ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1150 >(referencedSOPClassUID, imageSOPDataset);
+
+            // SOP Instance UID - Type 1
+            ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x1155 >(sopInstanceUID, imageSOPDataset);
+
+            surfaceSourceInstanceSequence->AddItem(imageSOPItem);
+        }
+
+        // Segment Surface Source Instance Sequence - Type 1C
+        ::fwGdcmIO::helper::DicomData::insertSQ< 0x0066, 0x002E >(surfaceSourceInstanceSequence,
+                                                                  referencedSurfaceDataset);
+
+        referencedSurfaceSequence->AddItem(referencedSurfaceItem);
+
+        // Referenced Surface Sequence
+        ::fwGdcmIO::helper::DicomData::insertSQ< 0x0066, 0x002B >(referencedSurfaceSequence, segmentationDataset);
+    }
+    surfaceSequence->AddItem(surfaceItem);
+
+    // Segment Sequence
+    ::fwGdcmIO::helper::DicomData::insertSQ< 0x0062, 0x0002 >(surfaceSequence, dataset);
+
+}
+
+//------------------------------------------------------------------------------
+
+void Surface::writeSurfaceMeshModule(unsigned short segmentationNumber)
+{
+    // Retrieve Surface Writer
+    SPTR(::gdcm::SurfaceWriter) surfaceWriter = std::static_pointer_cast< ::gdcm::SurfaceWriter >(m_writer);
+
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Get the last segment added in SegmentWriter::writeSurfaceSegmentation()
+    ::gdcm::SmartPointer< ::gdcm::Segment > segment = surfaceWriter->GetSegments().back();
+
+    // Add it a surface
+    ::gdcm::SmartPointer< ::gdcm::Surface > surface = new ::gdcm::Surface();
+    segment->AddSurface(surface);
+
+    // Retrieve reconstruction
+    ::fwData::Reconstruction::sptr reconstruction = m_object->getReconstructionDB()[segmentationNumber];
+
+    // Retrieve material
+    ::fwData::Material::csptr material = reconstruction->getMaterial();
+
+    // Set DicomSurface data - NOTE: must be called before points and primitives writing
+    SPTR(::fwGdcmIO::container::DicomSurface) surfaceContainer =
+        std::make_shared< ::fwGdcmIO::container::DicomSurface >();
+    surfaceContainer->setFromData(reconstruction);
+
+    // Create Surface Sequence
+    ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > surfaceSequence = new ::gdcm::SequenceOfItems();
+    surfaceSequence->SetLengthToUndefined();
+    {
+        // Create one item for the surface
+        ::gdcm::Item surfaceItem;
+        surfaceItem.SetVLToUndefined();
+        ::gdcm::DataSet& surfaceDataset = surfaceItem.GetNestedDataSet();
+
+        // Surface Number (0x0066,0x0003) - Type 1
+        surface->SetSurfaceNumber(segmentationNumber + 1); // (start at 1)
+        OSLM_TRACE("Surface Number : " << surface->GetSurfaceNumber());
+
+        // Surface Processing (0x0066,0x0009) - Type 2
+        surface->SetSurfaceProcessing(false);
+        OSLM_TRACE("Surface Processing : NO");
+
+        // Get reconstruction's color
+        std::array< float, 4 > rgba = material->diffuse()->getRGBA();
+        std::vector< float > rgb(3);
+        rgb[0] = rgba[0];
+        rgb[1] = rgba[1];
+        rgb[2] = rgba[2];
+
+        // Recommended Display Grayscale Value (0x0062,0x000C) - Type 1
+        const unsigned short grayscale = ::gdcm::SurfaceHelper::RGBToRecommendedDisplayGrayscale(rgb, 1.);
+        surface->SetRecommendedDisplayGrayscaleValue(grayscale);
+        OSLM_TRACE("Recommended Display Grayscale Value : " << grayscale);
+
+        // Recommended Display CIELab Value (0x0062,0x000D) - Type 1
+        const std::vector< unsigned short > CIELab = ::gdcm::SurfaceHelper::RGBToRecommendedDisplayCIELab(rgb, 1.);
+        surface->SetRecommendedDisplayCIELabValue(CIELab);
+        OSLM_TRACE("Recommended Display CIELab Value : " << CIELab[0] << " " << CIELab[1] << " " << CIELab[2]);
+
+        // Recommended Presentation Opacity (0x0066,0x000C) - Type 1
+        surface->SetRecommendedPresentationOpacity(rgba[3]);
+        OSLM_TRACE("Recommended Presentation Opacity : " << rgba[3]);
+
+        // Recommended Presentation Type (0x0066,0x000D)
+        surface->SetRecommendedPresentationType(
+            ::fwGdcmIO::helper::DicomData::convertToPresentationType(material->getRepresentationMode()));
+        OSLM_TRACE( "Recommended Presentation Type : " <<
+                    ::fwGdcmIO::helper::DicomData::convertToPresentationTypeString(material->getRepresentationMode()));
+
+        // Finite Volume (0x0066,0x000E) - Type 1
+        ::fwDataTools::helper::Mesh helperMesh(reconstruction->getMesh());
+        surface->SetFiniteVolume(helperMesh.isClosed() ? (::gdcm::Surface::YES): (::gdcm::Surface::NO));
+
+        // Manifold (0x0066,0x0010) - Type 1
+        surface->SetManifold(::gdcm::Surface::NO);
+        SLM_TRACE("Manifold : NO");
+
+        // Create Surface Points Sequence
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > pointsSequence = new ::gdcm::SequenceOfItems();
+        pointsSequence->SetLengthToUndefined();
+        {
+            // Create its item
+            ::gdcm::Item pointsItem;
+            pointsItem.SetVLToUndefined();
+
+            // Number Of Points
+            surface->SetNumberOfSurfacePoints(surfaceContainer->getPointCoordSize());
+            OSLM_TRACE("Number Of Points : " << surfaceContainer->getPointCoordSize());
+
+            // Point Coordinates Data
+            ::gdcm::DataElement& pointCoordData = surface->GetPointCoordinatesData();
+            const float* pointCoordinatesData = surfaceContainer->getPointCoordData().get();
+            pointCoordData.SetByteValue((char*)(pointCoordinatesData),
+                                        static_cast<unsigned int>(3 * surfaceContainer->getPointCoordSize() *
+                                                                  sizeof(*pointCoordinatesData)));
+            OSLM_TRACE("Point Coordinates Data buffer size : " << 3 * surfaceContainer->getPointCoordSize()
+                       * sizeof(*pointCoordinatesData));
+
+            pointsSequence->AddItem(pointsItem);
+
+            // Surface Points Sequence
+            ::fwGdcmIO::helper::DicomData::insertSQ< 0x0066, 0x0011 >(pointsSequence, surfaceDataset);
+        }
+
+        // Create Surface Points Normals Sequence (0066,0012) - Type 2
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > normalSequence = new ::gdcm::SequenceOfItems();
+        normalSequence->SetLengthToUndefined();
+        if (surfaceContainer->getNormalCoordSize() > 0)
+        {
+            // Create its item
+            ::gdcm::Item normalsItem;
+            normalsItem.SetVLToUndefined();
+
+            // Number Of Points
+            surface->SetNumberOfVectors(surfaceContainer->getNormalCoordSize());
+            OSLM_TRACE("Number Of Normals : " << surfaceContainer->getNormalCoordSize());
+
+            surface->SetVectorDimensionality(1);
+
+            // Normal Coordinates Data
+            ::gdcm::DataElement& normalCoordData = surface->GetVectorCoordinateData();
+            const float* normalCoordinatesData = surfaceContainer->getNormalCoordData().get();
+            normalCoordData.SetByteValue((char*)(normalCoordinatesData),
+                                         static_cast<unsigned int>(3 * surfaceContainer->getNormalCoordSize() *
+                                                                   sizeof(*normalCoordinatesData)));
+            OSLM_TRACE("Point Coordinates Data buffer size : " << 3 * surfaceContainer->getNormalCoordSize() *
+                       sizeof(*normalCoordinatesData));
+
+            normalSequence->AddItem(normalsItem);
+        }
+        ::fwGdcmIO::helper::DicomData::insertSQ< 0x0066, 0x0012 >(normalSequence, surfaceDataset);
+
+        // Create Surface Mesh Primitives Sequence - PS 3.3 C.27.4
+        ::gdcm::SmartPointer< ::gdcm::SequenceOfItems > primitivesSequence = new ::gdcm::SequenceOfItems();
+        primitivesSequence->SetLengthToUndefined();
+
+        {
+            // Mesh primitive type (fixed to TRIANGLE by FXW4SPL)
+            ::gdcm::SmartPointer< ::gdcm::MeshPrimitive > primitive = surface->GetMeshPrimitive();
+            primitive->SetPrimitiveType(::gdcm::MeshPrimitive::TRIANGLE);
+
+            // Triangle Point Index List (0066,0023) - Type 2
+            ::gdcm::DataElement& pointIndexData = primitive->GetPrimitiveData();
+            pointIndexData.SetVL(sizeof(uint32_t));
+            const uint32_t* pointIndexListData = surfaceContainer->getPointIndexList().get();
+            unsigned long indexCount           = 3 * surfaceContainer->getPointIndexSize();
+            pointIndexData.SetByteValue((char*)(pointIndexListData),
+                                        static_cast<unsigned int>(indexCount * sizeof(uint32_t)));
+            OSLM_TRACE("Point Index List buffer size : " << indexCount * sizeof(uint32_t));
+
+        }
+
+        // Surface Mesh Primitives Sequence
+        ::fwGdcmIO::helper::DicomData::insertSQ< 0x0066, 0x0013 >(primitivesSequence, surfaceDataset);
+
+        surfaceSequence->AddItem(surfaceItem);
+    }
+
+    // Surface Sequence
+    ::fwGdcmIO::helper::DicomData::insertSQ< 0x0066, 0x0002 >(surfaceSequence, dataset);
+
+    // Complete Segment Sequence
+    // Create Algorithm Family Code Sequence
+    // See: Supplement 132 Table 10-X
+    {
+        //See: PS.3.3 Table 8.8-1 and PS 3.16 Context ID 7162
+        ::gdcm::SegmentHelper::BasicCodedEntry algoFamily;
+        algoFamily.CV  = "1231009";
+        algoFamily.CSD = "DCM";
+        algoFamily.CM  = "Manual Processing";
+        // Algorithm Family Code Sequence (0x0066,0x002F) - Type 1
+        surface->SetAlgorithmFamily(algoFamily);
+    }
+
+    // Retrieve runtime profile
+    ::fwRuntime::profile::Profile::sptr profile = ::fwRuntime::profile::getCurrentProfile();
+
+    // Algorithm Version (0x0066,0x0031) - Type 1
+    std::string algorithVersion = (profile) ? (profile->getName()+" "+profile->getVersion()) : "Unknown";
+    surface->SetAlgorithmVersion(algorithVersion.c_str());
+
+    // Algorithm Name (0x0066,0x0036) - Type 1
+    std::string algorithName = (profile) ? (profile->getName()) : "Unknown";
+    surface->SetAlgorithmName(algorithName.c_str());
+
+}
+
+//------------------------------------------------------------------------------
+
+void Surface::writeSOPCommonModule()
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // SOP Class UID
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0016 >(m_instance->getSOPClassUID(), dataset);
+    SLM_TRACE("SOP Class UID : " + m_instance->getSOPClassUID());
+
+    // SOP Instance UID
+    ::gdcm::UIDGenerator uidGenerator;
+    std::string sopInstanceUID = uidGenerator.Generate();
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0008, 0x0018 >(sopInstanceUID, dataset);
+}
+
+//------------------------------------------------------------------------------
+
+void Surface::writeContentIdentificationMacro(unsigned int segmentationNumber)
+{
+    // Retrieve dataset
+    ::gdcm::DataSet& dataset = m_writer->GetFile().GetDataSet();
+
+    // Instance Number - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< int, 0x0020, 0x0013 >(segmentationNumber, dataset);
+
+    // Content Label - Type 1
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0080 >("SURFACE", dataset);
+
+    // Content Description - Type 2
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0081 >("Surface Segmentation", dataset);
+
+    // Content Creator's Name - Type 2 - TODO: Set surface creator name ?
+    ::fwGdcmIO::helper::DicomData::setTagValue< 0x0070, 0x0084 >("Unknown^Unknown", dataset);
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ie
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/CTMRImageIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/CTMRImageIOD.cpp
new file mode 100644
index 0000000..b4dcee2
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/CTMRImageIOD.cpp
@@ -0,0 +1,151 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/FileWriter.hpp"
+#include "fwGdcmIO/writer/ie/Equipment.hpp"
+#include "fwGdcmIO/writer/ie/FrameOfReference.hpp"
+#include "fwGdcmIO/writer/ie/Image.hpp"
+#include "fwGdcmIO/writer/ie/Patient.hpp"
+#include "fwGdcmIO/writer/ie/Series.hpp"
+#include "fwGdcmIO/writer/ie/Study.hpp"
+#include "fwGdcmIO/writer/iod/CTMRImageIOD.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwData/Image.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <gdcmImageWriter.h>
+
+#include <boost/make_shared.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+CTMRImageIOD::CTMRImageIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance, ::boost::filesystem::path folderPath) :
+    ::fwGdcmIO::writer::iod::InformationObjectDefinition(instance, folderPath)
+{
+}
+
+//------------------------------------------------------------------------------
+
+CTMRImageIOD::~CTMRImageIOD()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void CTMRImageIOD::write(::fwMedData::Series::sptr series)
+{
+    // Retrieve image series
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+    SLM_ASSERT("Image series should not be null.", imageSeries);
+
+    // Retrieve image
+    ::fwData::Image::sptr image = imageSeries->getImage();
+
+    // Create writer
+    SPTR(::gdcm::ImageWriter) writer = std::make_shared< ::gdcm::ImageWriter >();
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::writer::ie::Patient patientIE(writer, m_instance, series->getPatient());
+    ::fwGdcmIO::writer::ie::Study studyIE(writer, m_instance, series->getStudy());
+    ::fwGdcmIO::writer::ie::Series seriesIE(writer, m_instance, series);
+    ::fwGdcmIO::writer::ie::FrameOfReference frameOfReferenceIE(writer, m_instance, series);
+    ::fwGdcmIO::writer::ie::Equipment equipmentIE(writer, m_instance, series->getEquipment());
+    ::fwGdcmIO::writer::ie::Image imageIE(writer, m_instance, imageSeries->getImage());
+
+    // Write Patient Module - PS 3.3 C.7.1.1
+    patientIE.writePatientModule();
+
+    // Write General Study Module - PS 3.3 C.7.2.1
+    studyIE.writeGeneralStudyModule();
+
+    // Write Patient Study Module - PS 3.3 C.7.2.2
+    studyIE.writePatientStudyModule();
+
+    // Write General Series Module - PS 3.3 C.7.3.1
+    seriesIE.writeGeneralSeriesModule();
+
+    // Write Frame of Reference Module - PS 3.3 C.7.4.1
+    frameOfReferenceIE.writeFrameOfReferenceModule();
+
+    // Write General Equipment Module - PS 3.3 C.7.5.1
+    equipmentIE.writeGeneralEquipmentModule();
+
+    // Write General Image Module - PS 3.3 C.7.6.1
+    imageIE.writeGeneralImageModule();
+
+    // Write Image Plane Module - PS 3.3 C.7.6.2
+    imageIE.writeImagePlaneModule();
+
+    // Write Image Pixel Module - PS 3.3 C.7.6.3
+    imageIE.writeImagePixelModule();
+
+    if(m_instance->getSOPClassUID() == ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::CTImageStorage))
+    {
+        // Write CT Image Module - PS 3.3 C.8.2.1
+        imageIE.writeCTImageModule();
+    }
+    else if(m_instance->getSOPClassUID() == ::gdcm::MediaStorage::GetMSString(::gdcm::MediaStorage::MRImageStorage))
+    {
+        // Write MR Image Module - PS 3.3 C.8.3.1
+        imageIE.writeMRImageModule();
+    }
+
+    // Write VOI LUT Module - PS 3.3 C.11.2
+    imageIE.writeVOILUTModule();
+
+    // Write SOP Common Module - PS 3.3 C.12.1
+    imageIE.writeSOPCommonModule();
+
+
+    // Copy dataset to avoid writing conflict with GDCM
+    const ::gdcm::DataSet datasetCopy = writer->GetFile().GetDataSet();
+
+    // Compute number of frames
+    std::size_t nbFrames = (m_instance->getIsMultiFiles()) ? (image->getSize()[2]) : 1;
+
+    // Write specific tags according to frame number
+    for(unsigned int i = 0; i < nbFrames; ++i)
+    {
+        // Reset dataset
+        writer->GetFile().SetDataSet(datasetCopy);
+
+        // Write SOP Common Module specific tags - PS 3.3 C.12.1
+        imageIE.writeSOPCommonModuleSpecificTags(i);
+
+        // Write General Image Module specific tags - PS 3.3 C.7.6.1
+        imageIE.writeGeneralImageModuleSpecificTags(i);
+
+        // Write Image Plane Module specific tags - PS 3.3 C.7.6.2
+        imageIE.writeImagePlaneModuleSpecificTags(i);
+
+        // Write Image Pixel Module specific tags - PS 3.3 C.7.6.3
+        imageIE.writeImagePixelModuleSpecificTags(i);
+
+        // Write file
+        std::stringstream ss;
+        ss << m_folderPath.string() << "/im" << std::setfill('0') << std::setw(5) << i;
+        ::fwGdcmIO::helper::FileWriter::write(ss.str(), writer);
+
+    }
+
+
+}
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/ComprehensiveSRIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/ComprehensiveSRIOD.cpp
new file mode 100644
index 0000000..2dd91ec
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/ComprehensiveSRIOD.cpp
@@ -0,0 +1,101 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/FileWriter.hpp"
+#include "fwGdcmIO/writer/ie/Document.hpp"
+#include "fwGdcmIO/writer/ie/Equipment.hpp"
+#include "fwGdcmIO/writer/ie/Image.hpp"
+#include "fwGdcmIO/writer/ie/Patient.hpp"
+#include "fwGdcmIO/writer/ie/Series.hpp"
+#include "fwGdcmIO/writer/ie/Study.hpp"
+#include "fwGdcmIO/writer/iod/ComprehensiveSRIOD.hpp"
+
+#include <boost/make_shared.hpp>
+
+#include <fwCore/spyLog.hpp>
+#include <fwData/Image.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <gdcmWriter.h>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+ComprehensiveSRIOD::ComprehensiveSRIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                       ::boost::filesystem::path folderPath, bool use3DSR) :
+    ::fwGdcmIO::writer::iod::InformationObjectDefinition(instance, folderPath), m_use3DSR(use3DSR)
+{
+}
+
+//------------------------------------------------------------------------------
+
+ComprehensiveSRIOD::~ComprehensiveSRIOD()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void ComprehensiveSRIOD::write(::fwMedData::Series::sptr series)
+{
+    // Retrieve image series
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+    SLM_ASSERT("Image series should not be null.", imageSeries);
+
+    // Retrieve image
+    ::fwData::Image::sptr image = imageSeries->getImage();
+
+    // Create writer
+    SPTR(::gdcm::Writer) writer = std::make_shared< ::gdcm::Writer >();
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::writer::ie::Patient patientIE(writer, m_instance, series->getPatient());
+    ::fwGdcmIO::writer::ie::Study studyIE(writer, m_instance, series->getStudy());
+    ::fwGdcmIO::writer::ie::Series seriesIE(writer, m_instance, series);
+    ::fwGdcmIO::writer::ie::Equipment equipmentIE(writer, m_instance, series->getEquipment());
+    ::fwGdcmIO::writer::ie::Document documentIE(writer, m_instance, image, m_use3DSR);
+
+    // Write Patient Module - PS 3.3 C.7.1.1
+    patientIE.writePatientModule();
+
+    // Write General Study Module - PS 3.3 C.7.2.1
+    studyIE.writeGeneralStudyModule();
+
+    // Write Patient Study Module - PS 3.3 C.7.2.2
+    studyIE.writePatientStudyModule();
+
+    // Write SR Document Series Module - PS 3.3 C.17.1
+    seriesIE.writeSRDocumentSeriesModule();
+
+    // Write General Equipment Module - PS 3.3 C.7.5.1
+    equipmentIE.writeGeneralEquipmentModule();
+
+    // Write SR Document General Module - PS 3.3 C.17.2
+    documentIE.writeSRDocumentGeneralModule();
+
+    // Write SR Document Content Module - PS 3.3 C.17.3
+    documentIE.writeSRDocumentContentModule();
+
+    // Write SOP Common module - PS 3.3 C.12.1
+    documentIE.writeSOPCommonModule();
+
+    // Write document
+    ::fwGdcmIO::helper::FileWriter::write(m_folderPath.string() + "/imSR", writer);
+
+}
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/InformationObjectDefinition.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/InformationObjectDefinition.cpp
new file mode 100644
index 0000000..91aeb35
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/InformationObjectDefinition.cpp
@@ -0,0 +1,35 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/iod/InformationObjectDefinition.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+InformationObjectDefinition::InformationObjectDefinition(
+    SPTR(::fwGdcmIO::container::DicomInstance)instance, ::boost::filesystem::path folderPath) :
+    m_instance(instance), m_folderPath(folderPath)
+{
+    SLM_ASSERT("Instance should not be null.", instance);
+}
+
+//------------------------------------------------------------------------------
+
+InformationObjectDefinition::~InformationObjectDefinition()
+{
+}
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/SpatialFiducialsIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/SpatialFiducialsIOD.cpp
new file mode 100644
index 0000000..20b0ecb
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/SpatialFiducialsIOD.cpp
@@ -0,0 +1,114 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/iod/SpatialFiducialsIOD.hpp"
+
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/helper/FileWriter.hpp"
+#include "fwGdcmIO/writer/ie/Equipment.hpp"
+#include "fwGdcmIO/writer/ie/Image.hpp"
+#include "fwGdcmIO/writer/ie/Patient.hpp"
+#include "fwGdcmIO/writer/ie/Series.hpp"
+#include "fwGdcmIO/writer/ie/SpatialFiducials.hpp"
+#include "fwGdcmIO/writer/ie/Study.hpp"
+
+#include <fwCore/spyLog.hpp>
+
+#include <fwData/Image.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <gdcmWriter.h>
+
+#include <boost/make_shared.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+SpatialFiducialsIOD::SpatialFiducialsIOD(
+    SPTR(::fwGdcmIO::container::DicomInstance)instance, ::boost::filesystem::path folderPath) :
+    ::fwGdcmIO::writer::iod::InformationObjectDefinition(instance, folderPath)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SpatialFiducialsIOD::~SpatialFiducialsIOD()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SpatialFiducialsIOD::write(::fwMedData::Series::sptr series)
+{
+    // Retrieve image series
+    ::fwMedData::ImageSeries::sptr imageSeries = ::fwMedData::ImageSeries::dynamicCast(series);
+    SLM_ASSERT("Image series should not be null.", imageSeries);
+
+    // Retrieve image
+    ::fwData::Image::sptr image = imageSeries->getImage();
+
+    ::fwData::Vector::sptr distances = image->getField< ::fwData::Vector >(
+        ::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+    SLM_WARN_IF("Writing Spatial Fiducials IOD : distances will be ignored.", distances && !distances->empty());
+
+    // Create writer
+    SPTR(::gdcm::Writer) writer = std::make_shared< ::gdcm::Writer >();
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::writer::ie::Patient patientIE(writer, m_instance, series->getPatient());
+    ::fwGdcmIO::writer::ie::Study studyIE(writer, m_instance, series->getStudy());
+    ::fwGdcmIO::writer::ie::Series seriesIE(writer, m_instance, series);
+    ::fwGdcmIO::writer::ie::Equipment equipmentIE(writer, m_instance, series->getEquipment());
+    ::fwGdcmIO::writer::ie::SpatialFiducials spatialFiducialsIE(writer, m_instance, image);
+
+    // Write Patient Module - PS 3.3 C.7.1.1
+    patientIE.writePatientModule();
+
+    // Write General Study Module - PS 3.3 C.7.2.1
+    studyIE.writeGeneralStudyModule();
+
+    // Write Patient Study Module - PS 3.3 C.7.2.2
+    studyIE.writePatientStudyModule();
+
+    // Write General Series Module - PS 3.3 C.7.3.1
+    seriesIE.writeGeneralSeriesModule();
+
+    // Write General Series Module - PS 3.3 C.21.1
+    seriesIE.writeSpatialFiducialsSeriesModule();
+
+    // Write General Equipment Module - PS 3.3 C.7.5.1
+    equipmentIE.writeGeneralEquipmentModule();
+
+    // Write Spatial Fiducials Module - PS 3.3 C.21.2
+    spatialFiducialsIE.writeSpatialFiducialsModule();
+
+    // Write Common Instance Reference Module - PS 3.3 C.12.2
+    spatialFiducialsIE.writeCommonInstanceReferenceModule();
+
+    // Write SOP Common Module - PS 3.3 C.12.1
+    spatialFiducialsIE.writeSOPCommonModule();
+
+    // Write document
+    ::fwGdcmIO::helper::FileWriter::write(m_folderPath.string() + "/imSF", writer);
+
+}
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.cpp
new file mode 100644
index 0000000..1f63f73
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/iod/SurfaceSegmentationIOD.cpp
@@ -0,0 +1,142 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/exception/Failed.hpp"
+#include "fwGdcmIO/helper/FileWriter.hpp"
+#include "fwGdcmIO/writer/ie/Equipment.hpp"
+#include "fwGdcmIO/writer/ie/FrameOfReference.hpp"
+#include "fwGdcmIO/writer/ie/Patient.hpp"
+#include "fwGdcmIO/writer/ie/Series.hpp"
+#include "fwGdcmIO/writer/ie/Study.hpp"
+#include "fwGdcmIO/writer/ie/Surface.hpp"
+#include "fwGdcmIO/writer/iod/SurfaceSegmentationIOD.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <gdcmSurfaceWriter.h>
+
+#include <boost/make_shared.hpp>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace iod
+{
+
+//------------------------------------------------------------------------------
+
+SurfaceSegmentationIOD::SurfaceSegmentationIOD(SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                               SPTR(::fwGdcmIO::container::DicomInstance)imageInstance,
+                                               ::boost::filesystem::path folderPath) :
+    ::fwGdcmIO::writer::iod::InformationObjectDefinition(instance, folderPath), m_imageInstance(imageInstance)
+{
+}
+
+//------------------------------------------------------------------------------
+
+SurfaceSegmentationIOD::~SurfaceSegmentationIOD()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void SurfaceSegmentationIOD::write(::fwMedData::Series::sptr series)
+{
+    // Retrieve model series
+    ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::dynamicCast(series);
+    SLM_ASSERT("Image series should not be null.", modelSeries);
+
+    // Create writer
+    SPTR(::gdcm::SurfaceWriter) writer = std::make_shared< ::gdcm::SurfaceWriter >();
+
+
+    // Create Information Entity helpers
+    ::fwGdcmIO::writer::ie::Patient patientIE(writer, m_instance, series->getPatient());
+    ::fwGdcmIO::writer::ie::Study studyIE(writer, m_instance, series->getStudy());
+    ::fwGdcmIO::writer::ie::Series seriesIE(writer, m_instance, series);
+    // Use Image as frame of reference
+    ::fwGdcmIO::writer::ie::FrameOfReference frameOfReferenceIE(writer, m_imageInstance, series);
+    ::fwGdcmIO::writer::ie::Equipment equipmentIE(writer, m_instance, series->getEquipment());
+    ::fwGdcmIO::writer::ie::Surface surfaceIE(writer, m_instance, m_imageInstance, modelSeries);
+
+    // Write Patient Module - PS 3.3 C.7.1.1
+    patientIE.writePatientModule();
+
+    // Write General Study Module - PS 3.3 C.7.2.1
+    studyIE.writeGeneralStudyModule();
+
+    // Write Patient Study Module - PS 3.3 C.7.2.2
+    studyIE.writePatientStudyModule();
+
+    // Write General Series Module - PS 3.3 C.7.3.1
+    seriesIE.writeGeneralSeriesModule();
+
+    // Write General Series Module - PS 3.3 C.8.20.1
+    seriesIE.writeSegmentationSeriesModule();
+
+    // Write Frame of Reference Module - PS 3.3 C.7.4.1
+    frameOfReferenceIE.writeFrameOfReferenceModule();
+
+    // Write General Equipment Module - PS 3.3 C.7.5.1
+    equipmentIE.writeGeneralEquipmentModule();
+
+    // Copy dataset to avoid writing conflict with GDCM
+    const ::gdcm::DataSet datasetCopy = writer->GetFile().GetDataSet();
+
+    // Write SOP Common Module - PS 3.3 C.12.1
+    surfaceIE.writeSOPCommonModule();
+
+    // Skipped segmentation count
+    unsigned int skippedSegmentationCount = 0;
+
+    // Write surface segmentations
+    for(unsigned short index = 0; index < modelSeries->getReconstructionDB().size(); ++index)
+    {
+        try
+        {
+            // Write Surface Segmentation Module - PS 3.3 C.8.23.1
+            surfaceIE.writeSurfaceSegmentationModule(index);
+
+            // Write Surface Mesh Module - PS 3.3 C.27.1
+            surfaceIE.writeSurfaceMeshModule(index);
+
+        }
+        catch (::fwGdcmIO::exception::Failed& e)
+        {
+            ++skippedSegmentationCount;
+            SLM_ERROR(e.what());
+        }
+    }
+
+    if (skippedSegmentationCount == modelSeries->getReconstructionDB().size())
+    {
+        throw ::fwGdcmIO::exception::Failed("All 3D reconstructions have been rejected");
+    }
+    else if (skippedSegmentationCount > 0)
+    {
+        OSLM_WARN(skippedSegmentationCount<<" 3D reconstruction(s) have been rejected");
+    }
+
+
+    // Number of Surfaces Tag(0x0066,0x0001) - Type 1
+    writer->SetNumberOfSurfaces(modelSeries->getReconstructionDB().size() - skippedSegmentationCount);
+    OSLM_TRACE("Number of Surfaces : " << writer->GetNumberOfSurfaces());
+
+    // Write the file
+    ::fwGdcmIO::helper::FileWriter::write(m_folderPath.string() + "/imSEG", writer);
+
+
+}
+
+
+} // namespace iod
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/Fiducial.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/Fiducial.cpp
new file mode 100644
index 0000000..1677738
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/Fiducial.cpp
@@ -0,0 +1,151 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/tid/Fiducial.hpp"
+
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRCodeNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <fwTools/Stringizer.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/algorithm/string/split.hpp>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+//------------------------------------------------------------------------------
+
+Fiducial::Fiducial(SPTR(::gdcm::Writer)writer,
+                   SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                   ::fwData::Image::sptr image) :
+    ::fwGdcmIO::writer::tid::TemplateID< ::fwData::Image >(writer, instance, image)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Fiducial::~Fiducial()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Fiducial::createNodes(SPTR(::fwGdcmIO::container::sr::DicomSRNode)parent, bool useSCoord3D)
+{
+    ::fwData::PointList::sptr pointList =
+        m_object->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+    if (pointList)
+    {
+        unsigned int id = 1;
+        for(const ::fwData::Point::sptr& point: pointList->getRefPoints())
+        {
+            this->createFiducial(parent, point, id++, useSCoord3D);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Fiducial::createFiducial(SPTR(::fwGdcmIO::container::sr::DicomSRNode)parent, const ::fwData::Point::sptr& point,
+                              unsigned int id, bool useSCoord3D)
+{
+    // Create Fiducial node
+    SPTR(::fwGdcmIO::container::sr::DicomSRCodeNode) rootNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRCodeNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("122340", "DCM", "Fiducial feature"), "CONTAINS",
+            ::fwGdcmIO::container::DicomCodedAttribute("111123", "DCM", "Marker placement"));     //FIXME : Find a better representation
+    parent->addSubNode(rootNode);
+
+    // Create Fiducial ID node
+    SPTR(::fwGdcmIO::container::sr::DicomSRUIDRefNode) idNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRUIDRefNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("dd1201", "DCM",
+                                                       "Fiducial ID"), "HAS PROPERTIES", ::fwTools::getString(id));
+    rootNode->addSubNode(idNode);
+
+    // Create Fiducial UID node
+    ::gdcm::UIDGenerator generator;
+    SPTR(::fwGdcmIO::container::sr::DicomSRUIDRefNode) uidNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRUIDRefNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("dd1202", "DCM",
+                                                       "Fiducial UID"), "HAS PROPERTIES", generator.Generate());
+    rootNode->addSubNode(uidNode);
+
+    // Create Fiducial intent node
+    const std::string label =
+        point->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    SPTR(::fwGdcmIO::container::sr::DicomSRTextNode) intentNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRTextNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("122369", "DCM", "Fiducial intent"), "HAS PROPERTIES", label);
+    rootNode->addSubNode(intentNode);
+
+    if(useSCoord3D)
+    {
+        // Create SCoord3D Node
+        const float scoord[] = {
+            static_cast<float>(point->getCoord()[0]),
+            static_cast<float>(point->getCoord()[1]),
+            static_cast<float>(point->getCoord()[2])
+        };
+        std::vector<float> scoordVector (scoord, scoord + 3);
+        SPTR(::fwGdcmIO::container::sr::DicomSRSCoord3DNode) scoord3DNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoord3DNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute(), "HAS PROPERTIES", "POINT", scoordVector,
+                m_instance->getSOPInstanceUIDContainer()[0]);
+        rootNode->addSubNode(scoord3DNode);
+    }
+    else
+    {
+        // Create SCoord Node
+        const float scoord[] = {
+            static_cast<float>(point->getCoord()[0]),
+            static_cast<float>(point->getCoord()[1])
+        };
+        std::vector<float> scoordVector (scoord, scoord + 2);
+        SPTR(::fwGdcmIO::container::sr::DicomSRSCoordNode) scoordNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoordNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute(), "HAS PROPERTIES", "POINT", scoordVector);
+        rootNode->addSubNode(scoordNode);
+
+        // Create Image Node
+        int frameNumber = ::fwGdcmIO::helper::DicomData::convertPointToFrameNumber(m_object, point);
+        SPTR(::fwGdcmIO::container::sr::DicomSRImageNode) imageNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRImageNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute(), "SELECTED FROM", m_instance->getSOPClassUID(),
+                m_instance->getSOPInstanceUIDContainer()[frameNumber-1], frameNumber);
+        scoordNode->addSubNode(imageNode);
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/Measurement.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/Measurement.cpp
new file mode 100644
index 0000000..79cec2c
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/Measurement.cpp
@@ -0,0 +1,161 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/tid/Measurement.hpp"
+
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRCodeNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNumNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <fwTools/Stringizer.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/algorithm/string/split.hpp>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+//------------------------------------------------------------------------------
+
+Measurement::Measurement(SPTR(::gdcm::Writer)writer,
+                         SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                         ::fwData::Image::sptr image) :
+    ::fwGdcmIO::writer::tid::TemplateID< ::fwData::Image >(writer, instance, image)
+{
+}
+
+//------------------------------------------------------------------------------
+
+Measurement::~Measurement()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void Measurement::createNodes(SPTR(::fwGdcmIO::container::sr::DicomSRNode)parent, bool useSCoord3D)
+{
+    ::fwData::Vector::sptr distanceVector =
+        m_object->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+    if (distanceVector)
+    {
+        unsigned int id = 1;
+        for(::fwData::Object::sptr object: distanceVector->getContainer())
+        {
+            ::fwData::PointList::sptr pointList = ::fwData::PointList::dynamicCast(object);
+            if(pointList)
+            {
+                this->createMeasurement(parent, pointList, id++, useSCoord3D);
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Measurement::createMeasurement(SPTR(::fwGdcmIO::container::sr::DicomSRNode)parent,
+                                    const ::fwData::PointList::sptr& pointList, unsigned int id, bool useSCoord3D)
+{
+    const ::fwData::Point::sptr point1 = pointList->getPoints()[0];
+    const ::fwData::Point::sptr point2 = pointList->getPoints()[1];
+
+    double coordinates[6];
+    coordinates[0] = point1->getCoord()[0];
+    coordinates[1] = point1->getCoord()[1];
+    coordinates[2] = point1->getCoord()[2];
+    coordinates[3] = point2->getCoord()[0];
+    coordinates[4] = point2->getCoord()[1];
+    coordinates[5] = point2->getCoord()[2];
+
+    double distance = sqrt( (coordinates[0] - coordinates[3]) * (coordinates[0] - coordinates[3]) +
+                            (coordinates[1] - coordinates[4]) * (coordinates[1] - coordinates[4]) +
+                            (coordinates[2] - coordinates[5]) * (coordinates[2] - coordinates[5]) );
+
+    // Retrieve Frame Numbers
+    int frameNumber1 = ::fwGdcmIO::helper::DicomData::convertPointToFrameNumber(m_object, point1);
+
+    // Create Measurement Node
+    SPTR(::fwGdcmIO::container::sr::DicomSRNumNode) numNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRNumNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("121206", "DCM", "Distance"), "CONTAINS", distance,
+            ::fwGdcmIO::container::DicomCodedAttribute("mm", "UCUM", "millimeter", "1.4"));
+    parent->addSubNode(numNode);
+
+    if(useSCoord3D)
+    {
+        // Create SCoord Node
+        const float scoord[] = {
+            static_cast<float>(point1->getCoord()[0]),
+            static_cast<float>(point1->getCoord()[1]),
+            static_cast<float>(point1->getCoord()[2]),
+            static_cast<float>(point2->getCoord()[0]),
+            static_cast<float>(point2->getCoord()[1]),
+            static_cast<float>(point2->getCoord()[2])
+        };
+        std::vector<float> scoordVector (scoord, scoord + 6);
+        SPTR(::fwGdcmIO::container::sr::DicomSRSCoord3DNode) scoordNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoord3DNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("121230", "DCM", "Path"),
+                "INFERRED FROM", "POLYLINE", scoordVector, m_instance->getSOPInstanceUIDContainer()[0]);
+        numNode->addSubNode(scoordNode);
+    }
+    else
+    {
+        SLM_ASSERT("Unable to save a 3D distance using a SCOORD object.",
+                   frameNumber1 == ::fwGdcmIO::helper::DicomData::convertPointToFrameNumber(m_object, point2));
+
+        // Create SCoord Node
+        const float scoord[] = {
+            static_cast<float>(point1->getCoord()[0]),
+            static_cast<float>(point1->getCoord()[1]),
+            static_cast<float>(point2->getCoord()[0]),
+            static_cast<float>(point2->getCoord()[1])
+        };
+        std::vector<float> scoordVector (scoord, scoord + 4);
+        SPTR(::fwGdcmIO::container::sr::DicomSRSCoordNode) scoordNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRSCoordNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("121230", "DCM", "Path"),
+                "INFERRED FROM", "POLYLINE", scoordVector);
+        numNode->addSubNode(scoordNode);
+
+        // Create Image Node
+        SPTR(::fwGdcmIO::container::sr::DicomSRImageNode) imageNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRImageNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute(), "SELECTED FROM", m_instance->getSOPClassUID(),
+                m_instance->getSOPInstanceUIDContainer()[frameNumber1-1], frameNumber1);
+        scoordNode->addSubNode(imageNode);
+    }
+
+
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/MeasurementReport.cpp b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/MeasurementReport.cpp
new file mode 100644
index 0000000..16f1731
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/src/fwGdcmIO/writer/tid/MeasurementReport.cpp
@@ -0,0 +1,148 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwGdcmIO/writer/tid/MeasurementReport.hpp"
+
+#include "fwGdcmIO/container/DicomCodedAttribute.hpp"
+#include "fwGdcmIO/container/sr/DicomSRCodeNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRContainerNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRImageNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRNumNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoord3DNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRSCoordNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRTextNode.hpp"
+#include "fwGdcmIO/container/sr/DicomSRUIDRefNode.hpp"
+#include "fwGdcmIO/helper/DicomData.hpp"
+#include "fwGdcmIO/writer/tid/Fiducial.hpp"
+#include "fwGdcmIO/writer/tid/Measurement.hpp"
+
+#include <fwData/PointList.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+
+#include <fwMedData/Series.hpp>
+#include <fwMedData/types.hpp>
+
+#include <gdcmUIDGenerator.h>
+
+#include <boost/algorithm/string/split.hpp>
+
+#include <sstream>
+
+namespace fwGdcmIO
+{
+namespace writer
+{
+namespace tid
+{
+
+//------------------------------------------------------------------------------
+
+MeasurementReport::MeasurementReport(SPTR(::gdcm::Writer)writer,
+                                     SPTR(::fwGdcmIO::container::DicomInstance)instance,
+                                     ::fwData::Image::sptr image) :
+    ::fwGdcmIO::writer::tid::TemplateID< ::fwData::Image >(writer, instance, image)
+{
+}
+
+//------------------------------------------------------------------------------
+
+MeasurementReport::~MeasurementReport()
+{
+}
+
+//------------------------------------------------------------------------------
+
+SPTR(::fwGdcmIO::container::sr::DicomSRNode) MeasurementReport::createRootNode(bool useSCoord3D)
+{
+    // Create Root Node - Measurement Report Document Titles
+    SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) rootNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("dd1dd1", "DCM", "Imaging Measurement Report"));
+
+    // Create Language of Content Item and Descendants Node (TID 1204)
+    SPTR(::fwGdcmIO::container::sr::DicomSRCodeNode) languagesNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRCodeNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("121049", "DCM", "Language of Content Item and Descendants"),
+            "HAS CONCEPT MOD",
+            ::fwGdcmIO::container::DicomCodedAttribute("en-US", "RFC3066", "English, United States"));          // FIXME Do we keep English US ?
+    rootNode->addSubNode(languagesNode);
+
+    // Create Observation Context Node (TID 1001) FIXME Do we need to add that template ?
+
+    // Create Procedure Reported Node
+    SPTR(::fwGdcmIO::container::sr::DicomSRCodeNode) procedureReportedNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRCodeNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("121058", "DCM", "Procedure reported"),
+            "HAS CONCEPT MOD",
+            ::fwGdcmIO::container::DicomCodedAttribute("P5-09051", "SRT", "Magnetic resonance imaging guidance"));          // FIXME Find a good value
+    rootNode->addSubNode(procedureReportedNode);
+
+    // Create ImageLibrary Node
+    SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) imageLibraryNode =
+        std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(
+            ::fwGdcmIO::container::DicomCodedAttribute("111028", "DCM", "Image Library"), "CONTAINS");
+    rootNode->addSubNode(imageLibraryNode);
+
+    // Add landmarks
+    if(m_object->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId))
+    {
+        // Create Fiducial Container
+        SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) fiducialNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("dd1d93", "DCM", "Fiducials"), "CONTAINS");
+        rootNode->addSubNode(fiducialNode);
+
+        ::fwGdcmIO::writer::tid::Fiducial fiducialTID(m_writer, m_instance, m_object);
+        fiducialTID.createNodes(fiducialNode, useSCoord3D);
+    }
+
+    // Add distances
+    if(m_object->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId))
+    {
+        // Create Imaging Measurements Container
+        SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) imagingMeasurementsNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("dd1d91", "DCM", "Imaging Measurements"), "CONTAINS");
+        rootNode->addSubNode(imagingMeasurementsNode);
+
+        // Create Measurement Group node
+        SPTR(::fwGdcmIO::container::sr::DicomSRContainerNode) measurementGroupNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRContainerNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("125007", "DCM", "Measurement Group"), "CONTAINS");
+        imagingMeasurementsNode->addSubNode(measurementGroupNode);
+
+        // Create Tracking ID node
+        SPTR(::fwGdcmIO::container::sr::DicomSRTextNode) idNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRTextNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("112039", "DCM", "Tracking Identifier"),
+                "HAS OBS CONTEXT", "1");
+        imagingMeasurementsNode->addSubNode(idNode);
+
+        // Create Tracking UID node
+        ::gdcm::UIDGenerator generator;
+        SPTR(::fwGdcmIO::container::sr::DicomSRUIDRefNode) uidNode =
+            std::make_shared< ::fwGdcmIO::container::sr::DicomSRUIDRefNode >(
+                ::fwGdcmIO::container::DicomCodedAttribute("112040", "DCM", "Tracking Unique Identifier"),
+                "HAS OBS CONTEXT", generator.Generate());
+        imagingMeasurementsNode->addSubNode(uidNode);
+
+        ::fwGdcmIO::writer::tid::Measurement measurementTID(m_writer, m_instance, m_object);
+        measurementTID.createNodes(imagingMeasurementsNode, useSCoord3D);
+
+    }
+
+
+    return rootNode;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace tid
+} // namespace writer
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/test/CMakeLists.txt b/SrcLib/io/fwGdcmIO/test/CMakeLists.txt
new file mode 100644
index 0000000..da45d10
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/CMakeLists.txt
@@ -0,0 +1,14 @@
+fwLoadProperties()
+
+
+find_package (Boost REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+find_package(GDCM REQUIRED)
+include(${GDCM_USE_FILE})
+fwForwardInclude(${GDCM_INCLUDE_DIRS})
+fwLink(${GDCM_LIBRARIES} gdcmCommon gdcmMSFF)
+
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
diff --git a/SrcLib/io/fwGdcmIO/test/Properties.cmake b/SrcLib/io/fwGdcmIO/test/Properties.cmake
new file mode 100644
index 0000000..67b1a5f
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/Properties.cmake
@@ -0,0 +1,19 @@
+
+set( NAME fwGdcmIOTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwGdcmIO
+    fwTools
+    fwCore
+    fwData
+    fwMedData
+    fwTest
+    fwDataTools
+    fwMemory
+    fwThread
+    fwZip
+    fwLog
+    fwDataIO
+    )
+set( REQUIREMENTS )
diff --git a/SrcLib/io/fwGdcmIO/test/tu/include/DicomAnonymizerTest.hpp b/SrcLib/io/fwGdcmIO/test/tu/include/DicomAnonymizerTest.hpp
new file mode 100644
index 0000000..1ebf83e
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/include/DicomAnonymizerTest.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_UT_DICOMANONYMIZERTEST_HPP__
+#define __FWGDCMIO_UT_DICOMANONYMIZERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+
+#include <gdcmTag.h>
+#include <gdcmDataSet.h>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+class DicomAnonymizerTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomAnonymizerTest );
+CPPUNIT_TEST( anonymizeImageSeriesTest );
+CPPUNIT_TEST( anonymizeDICOMTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    // interface
+    void setUp();
+    void tearDown();
+
+    /// Test anonymization of ImageSeries
+    void anonymizeImageSeriesTest();
+
+    /// Test anonymisation of DICOM folder
+    void anonymizeDICOMTest();
+
+private:
+    void testDICOMFolder(const ::boost::filesystem::path& srcPath);
+    void testAnonymizedFile(const std::string& filename);
+
+    std::set< std::string > m_uidContainer;
+
+};
+
+} // namespace ut
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_UT_DICOMANONYMIZERTEST_HPP__
diff --git a/SrcLib/io/fwGdcmIO/test/tu/include/DicomDirTest.hpp b/SrcLib/io/fwGdcmIO/test/tu/include/DicomDirTest.hpp
new file mode 100644
index 0000000..b912a65
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/include/DicomDirTest.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_UT_DICOMDIRTEST_HPP__
+#define __FWGDCMIO_UT_DICOMDIRTEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <boost/filesystem.hpp>
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+class DicomDirTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomDirTest );
+CPPUNIT_TEST( readDicomDir );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    // Interface
+    void setUp();
+    void tearDown();
+
+    // Test functions
+    void readDicomDir();
+
+};
+
+} // namespace ut
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_UT_DICOMDIRTEST_HPP__
+
diff --git a/SrcLib/io/fwGdcmIO/test/tu/include/DicomSeriesWriterTest.hpp b/SrcLib/io/fwGdcmIO/test/tu/include/DicomSeriesWriterTest.hpp
new file mode 100644
index 0000000..f601f93
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/include/DicomSeriesWriterTest.hpp
@@ -0,0 +1,61 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_UT_DICOMSERIESWRITERTEST_HPP__
+#define __FWGDCMIO_UT_DICOMSERIESWRITERTEST_HPP__
+
+#include <fwCore/base.hpp>
+
+#include <fwServices/macros.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+typedef std::set<std::string> ExcludeSetType;
+class DicomSeriesWriterTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( DicomSeriesWriterTest );
+CPPUNIT_TEST( writeReadTest );
+CPPUNIT_TEST( writeReadAnonymiseTest );
+CPPUNIT_TEST( writeReadDirArchiveTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void writeReadTest();
+    void writeReadAnonymiseTest();
+    void writeReadDirArchiveTest();
+
+private:
+
+    /**
+     * @brief Read Dicom series at given path and compare them to m_srcDicomSeries.
+     *
+     * @note Do not compare local_dicom_paths attributes
+     *
+     * @param p path to read Dicom series to be compared
+     * @param anonymized if true, further attributes related to anonymisation are not compared.
+     */
+    void checkDicomSeries(
+        const ::boost::filesystem::path& p, bool anonymized = false);
+
+    ::fwMedData::DicomSeries::sptr m_srcDicomSeries;
+
+};
+
+} // namespace ut
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_UT_DICOMSERIESWRITERTEST_HPP__
diff --git a/SrcLib/io/fwGdcmIO/test/tu/include/SeriesDBReaderTest.hpp b/SrcLib/io/fwGdcmIO/test/tu/include/SeriesDBReaderTest.hpp
new file mode 100644
index 0000000..eba9006
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/include/SeriesDBReaderTest.hpp
@@ -0,0 +1,135 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_UT_SERIESDBREADERTEST_HPP__
+#define __FWGDCMIO_UT_SERIESDBREADERTEST_HPP__
+
+#include <fwServices/macros.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+class SeriesDBReaderTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( SeriesDBReaderTest );
+CPPUNIT_TEST( readACHSeriesDBTest );
+CPPUNIT_TEST( readCTSeriesDBTest );
+CPPUNIT_TEST( readMRSeriesDBTest );
+CPPUNIT_TEST( readOTSeriesDBTest );
+CPPUNIT_TEST( readSEGSeriesDBTest );
+CPPUNIT_TEST( readSFSeriesDBTest );
+CPPUNIT_TEST( readSRSeriesDBTest );
+CPPUNIT_TEST( read3DSRSeriesDBTest );
+CPPUNIT_TEST( readDisabledSeriesDBTest );
+CPPUNIT_TEST( readMRSeriesWithDicomDirDBTest );
+CPPUNIT_TEST( readMultipleRescaleSeriesDBTest );
+CPPUNIT_TEST( readCTWithSurviewSeriesDBTest );
+CPPUNIT_TEST( readMRWithTemporalPositionSeriesDBTest );
+CPPUNIT_TEST( readCTSeriesDBIssue01Test );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    void setUp();
+    void tearDown();
+
+    /// Read ACH Series
+    void readACHSeriesDBTest();
+
+    /// Read CT Series (01-CT-DICOM_LIVER)
+    void readCTSeriesDBTest();
+
+    /// Read MR Series (46-MR-BARRE-MONO2-12-shoulder) (Rotated)
+    void readMRSeriesDBTest();
+
+    /// Read OT Series (42-OT-BARRE-MONO2-8-colon) (Secondary capture)
+    void readOTSeriesDBTest();
+
+    /// Read SEG Series (71-CT-DICOM_SEG)
+    void readSEGSeriesDBTest();
+
+    /// Read SF Series (71-CT-DICOM_SF)
+    void readSFSeriesDBTest();
+
+    /// Read SR Series (71-CT-DICOM_SR)
+    void readSRSeriesDBTest();
+
+    /// Read SR Series (71-CT-DICOM_3DSR)
+    void read3DSRSeriesDBTest();
+
+    /// Read disabled Series (Try to read MR when only CT is enabled)
+    void readDisabledSeriesDBTest();
+
+    /// Read MR Series with DICOMDIR (82-MR-SAGITTAL-KNEE-DICOMDIR)
+    void readMRSeriesWithDicomDirDBTest();
+
+    /// Read multiple rescale Series (83-CT-MultipleRescale)
+    void readMultipleRescaleSeriesDBTest();
+
+    /// Read CT with surview Series (84-CT-Surview)
+    void readCTWithSurviewSeriesDBTest();
+
+    /// Read MR with temporal position identifier Series (85-MR-TemporalPosition)
+    void readMRWithTemporalPositionSeriesDBTest();
+
+    /// Read CT image 01 for stability issue (86-CT-Skull)
+    void readCTSeriesDBIssue01Test();
+
+protected:
+    /// Read and check ACH series
+    void readACHSeries();
+
+    /// Read and check CT series (01-CT-DICOM_LIVER)
+    void readCTSeries();
+
+    /// Read and check MR series (46-MR-BARRE-MONO2-12-shoulder)
+    void readMRSeries();
+
+    /// Read and check OT series (42-OT-BARRE-MONO2-8-colon) (Secondary capture)
+    void readOTSeries();
+
+    /// Read and check SEG series (71-CT-DICOM_SEG)
+    void readSEGSeries();
+
+    /// Read and check SF series (71-CT-DICOM_SF)
+    void readSFSeries();
+
+    /// Read and check SF series (71-CT-DICOM_SR)
+    void readSRSeries();
+
+    /// Read and check SF series (71-CT-DICOM_3DSR)
+    void read3DSRSeries();
+
+    /// Read disabled series (Try to read MR when only CT is enabled)
+    void readDisabledSeries();
+
+    /// Read MR Series with DICOMDIR (82-MR-SAGITTAL-KNEE-DICOMDIR)
+    void readMRSeriesWithDicomDir();
+
+    /// Read multiple rescale series (83-CT-MultipleRescale)
+    void readMultipleRescaleSeries();
+
+    /// Read CT with surview Series (84-CT-Surview)
+    void readCTWithSurviewSeries();
+
+    /// Read MR with temporal position identifier Series (85-MR-TemporalPosition)
+    void readMRWithTemporalPositionSeries();
+
+    /// Read CT image 01 for stability issue (86-CT-Skull)
+    void readCTSeriesDBIssue01();
+};
+
+
+
+} // namespace ut
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_UT_SERIESDBREADERTEST_HPP__
+
diff --git a/SrcLib/io/fwGdcmIO/test/tu/include/WriterReaderTest.hpp b/SrcLib/io/fwGdcmIO/test/tu/include/WriterReaderTest.hpp
new file mode 100644
index 0000000..5a0948f
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/include/WriterReaderTest.hpp
@@ -0,0 +1,50 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWGDCMIO_UT_WRITERREADERTEST_HPP__
+#define __FWGDCMIO_UT_WRITERREADERTEST_HPP__
+
+#include <fwMedData/SeriesDB.hpp>
+#include <fwServices/macros.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+class WriterReaderTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( WriterReaderTest );
+CPPUNIT_TEST( writeReadImageSeriesTest );
+//FIXME: This test create wrong (random) Dicom Images that may cause the test to crash.
+//    CPPUNIT_TEST( writeReadSeriesDBTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void writeReadImageSeriesTest();
+    void writeReadSeriesDBTest();
+
+private:
+
+    /**
+     * Create a series DB containing an ImageSeries with landmarks and distance
+     * and a ModelSeries with one reconstruction.
+     */
+    ::fwMedData::SeriesDB::sptr createSeriesDB();
+
+
+};
+
+} // namespace ut
+} // namespace fwGdcmIO
+
+#endif // __FWGDCMIO_UT_WRITERREADERTEST_HPP__
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp
new file mode 100644
index 0000000..0b47527
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/DicomAnonymizerTest.cpp
@@ -0,0 +1,690 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DicomAnonymizerTest.hpp"
+
+#include <fwData/Image.hpp>
+#include <fwData/Object.hpp>
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
+#include <fwGdcmIO/helper/DicomAnonymizer.hpp>
+#include <fwGdcmIO/helper/DicomData.hpp>
+#include <fwGdcmIO/helper/DicomSearch.hpp>
+#include <fwGdcmIO/helper/DicomSeriesWriter.hpp>
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+#include <fwGdcmIO/writer/Series.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwTest/Data.hpp>
+#include <fwTest/generator/Image.hpp>
+#include <fwTest/generator/SeriesDB.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <gdcmDicts.h>
+#include <gdcmGlobal.h>
+#include <gdcmReader.h>
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/path.hpp>
+
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGdcmIO::ut::DicomAnonymizerTest );
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizerTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizerTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//-----------------------------------------------------------------------------
+
+void DicomAnonymizerTest::anonymizeImageSeriesTest()
+{
+    ::fwTest::generator::Image::initRand();
+    ::fwMedData::ImageSeries::sptr imgSeries;
+    imgSeries = ::fwTest::generator::SeriesDB::createImageSeries();
+
+    const ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "anonymizedDicomFolderTest";
+    ::boost::filesystem::create_directories( path );
+
+    // Write ImageSeries
+    ::fwGdcmIO::writer::Series::sptr writer = ::fwGdcmIO::writer::Series::New();
+    writer->setObject(imgSeries);
+    writer->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    // Anonymize ImageSeries
+    ::fwGdcmIO::helper::DicomAnonymizer anonymizer;
+    CPPUNIT_ASSERT_NO_THROW(anonymizer.anonymize(path));
+
+    // Load ImageSeries
+    ::fwMedData::SeriesDB::sptr sdb           = ::fwMedData::SeriesDB::New();
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(sdb);
+    reader->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Check series
+    CPPUNIT_ASSERT_EQUAL(size_t(1), sdb->getContainer().size());
+
+    ::fwMedData::ImageSeries::sptr anonymizedSeries =
+        ::fwMedData::ImageSeries::dynamicCast(sdb->getContainer().front());
+
+    CPPUNIT_ASSERT(anonymizedSeries);
+
+    // Check values
+    CPPUNIT_ASSERT_EQUAL(std::string(""), anonymizedSeries->getDate());
+    CPPUNIT_ASSERT_EQUAL(std::string(""), anonymizedSeries->getTime());
+    CPPUNIT_ASSERT_EQUAL(std::string("Description"), anonymizedSeries->getDescription()); // action code K
+    CPPUNIT_ASSERT_EQUAL(size_t(0), anonymizedSeries->getPerformingPhysiciansName().size());
+    CPPUNIT_ASSERT_EQUAL(std::string(""), anonymizedSeries->getEquipment()->getInstitutionName());
+    CPPUNIT_ASSERT_EQUAL(std::string("ANONYMIZED^ANONYMIZED"), anonymizedSeries->getPatient()->getName());
+    CPPUNIT_ASSERT_EQUAL(std::string("ANONYMIZED"), anonymizedSeries->getPatient()->getPatientId());
+    CPPUNIT_ASSERT_EQUAL(std::string("19700101"), anonymizedSeries->getPatient()->getBirthdate());
+    CPPUNIT_ASSERT_EQUAL(std::string("O"), anonymizedSeries->getPatient()->getSex());
+    CPPUNIT_ASSERT_EQUAL(std::string("19700101"), anonymizedSeries->getStudy()->getDate());
+    CPPUNIT_ASSERT_EQUAL(std::string("000000.000000"), anonymizedSeries->getStudy()->getTime());
+    CPPUNIT_ASSERT_EQUAL(std::string("ANONYMIZED^ANONYMIZED"),
+                         anonymizedSeries->getStudy()->getReferringPhysicianName());
+    CPPUNIT_ASSERT_EQUAL(std::string(""), anonymizedSeries->getStudy()->getDescription());
+    CPPUNIT_ASSERT_EQUAL(std::string(""), anonymizedSeries->getStudy()->getPatientAge());
+    CPPUNIT_ASSERT(imgSeries->getInstanceUID() != anonymizedSeries->getInstanceUID());
+    CPPUNIT_ASSERT(imgSeries->getStudy()->getInstanceUID() != anonymizedSeries->getStudy()->getInstanceUID());
+
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizerTest::anonymizeDICOMTest()
+{
+    this->testDICOMFolder(::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB/08-CT-PACS");
+    //TODO Do we have to test more images ?
+}
+
+//------------------------------------------------------------------------------
+
+void DicomAnonymizerTest::testDICOMFolder(const ::boost::filesystem::path& srcPath)
+{
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + srcPath.string() + "' does not exist",
+                           ::boost::filesystem::exists(srcPath));
+
+    // Save old UID
+    m_uidContainer.clear();
+    std::vector< std::string > oldFilenames;
+    ::fwGdcmIO::helper::DicomSearch::searchRecursively(srcPath, oldFilenames, true);
+    for(std::string filename: oldFilenames)
+    {
+        // Try to open the file
+        ::gdcm::Reader reader;
+        reader.SetFileName( filename.c_str() );
+        CPPUNIT_ASSERT_MESSAGE("Unable to read the file: \""+filename+"\"", reader.Read());
+        ::gdcm::File& gdcmFile   = reader.GetFile();
+        ::gdcm::DataSet& dataset = gdcmFile.GetDataSet();
+
+        std::string data;
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x9161>(dataset);    //Concatenation UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x010D>(dataset);    //Context Group Extension Creator UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x9123>(dataset);    //Creator Version UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0018,0x1002>(dataset);    //Device UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x9164>(dataset);    //Dimension Organization UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x300A,0x0013>(dataset);    //Dose Reference UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x0058>(dataset);    //Failed SOP Instance UID List
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0070,0x031A>(dataset);    //Fiducial UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x0052>(dataset);    //Frame of Reference UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x0014>(dataset);    //Instance Creator UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x3010>(dataset);    //Irradiation Event UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0028,0x1214>(dataset);    //Large Palette Color Lookup Table UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0002,0x0003>(dataset);    //Media Storage SOP Instance UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0028,0x1199>(dataset);    //Palette Color Lookup Table UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x3006,0x0024>(dataset);    //Referenced Frame of Reference UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0040,0x4023>(dataset);    //Referenced General Purpose Scheduled Procedure Step Transaction UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x1155>(dataset);    //Referenced SOP Instance UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0004,0x1511>(dataset);    //Referenced SOP Instance UID in File
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x3006,0x00C2>(dataset);    //Related Frame of Reference UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0000,0x1001>(dataset);    //Requested SOP Instance UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x000E>(dataset);    //Series Instance UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x0018>(dataset);    //SOP Instance UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0088,0x0140>(dataset);    //Storage Media File-set UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x000D>(dataset);    //Study Instance UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0020,0x0200>(dataset);    //Synchronization Frame of Reference UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0040,0xDB0D>(dataset);    //Template Extension Creator UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0040,0xDB0C>(dataset);    //Template Extension Organization UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0008,0x1195>(dataset);    //Transaction UID
+        m_uidContainer.insert(data);
+        data = ::fwGdcmIO::helper::DicomData::getTagValue<0x0040,0xA124>(dataset);    //UID
+        m_uidContainer.insert(data);
+    }
+    m_uidContainer.erase("");
+
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    // Read DicomSeries
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(srcPath);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL(size_t(1), seriesDB->size());
+
+    // Write DicomSeries
+    const ::boost::filesystem::path path = ::fwTools::System::getTemporaryFolder() / "anonymizedDicomFolderTest2";
+    ::boost::filesystem::create_directories(path);
+    ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer = ::fwGdcmIO::helper::DicomSeriesWriter::New();
+    writer->setObject((*seriesDB)[0]);
+    writer->setFolder(path);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    // Anonymize folder
+    ::fwGdcmIO::helper::DicomAnonymizer anonymizer;
+    CPPUNIT_ASSERT_NO_THROW(anonymizer.anonymize(path));
+
+    // Read DICOM files
+    std::vector< std::string > filenames;
+    ::fwGdcmIO::helper::DicomSearch::searchRecursively(path, filenames, true);
+    for(std::string filename: filenames)
+    {
+        this->testAnonymizedFile(filename);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+std::string getDummyValue(const ::gdcm::Tag& tag)
+{
+    switch (::gdcm::Global::GetInstance().GetDicts().GetPublicDict().GetDictEntry(tag).GetVR())
+    {
+        case ::gdcm::VR::AE:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::AS:
+        {
+            return "000Y";
+        }
+        case ::gdcm::VR::AT:
+        {
+            return "00H,00H,00H,00H";
+        }
+        case ::gdcm::VR::CS:
+        {
+            //Patient’s Sex
+            if(tag == ::gdcm::Tag(0x0010,0x0040))
+            {
+                return "O";
+            }
+            else
+            {
+                return "ANONYMIZED";
+            }
+        }
+        case ::gdcm::VR::DA:
+        {
+            return "19700101";
+        }
+        case ::gdcm::VR::DS:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::DT:
+        {
+            return "19700101000000.000000";
+        }
+        case ::gdcm::VR::FD:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::FL:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::IS:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::LO:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::LT:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::OB:
+        {
+            return "00H00H";
+        }
+        case ::gdcm::VR::OF:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::OW:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::PN:
+        {
+            return "ANONYMIZED^ANONYMIZED";
+        }
+        case ::gdcm::VR::SH:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::SL:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::SQ:
+        {
+            CPPUNIT_FAIL("We should not be there...");
+            break;
+        }
+        case ::gdcm::VR::SS:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::ST:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::TM:
+        {
+            return "000000.000000";
+        }
+        case ::gdcm::VR::UI:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::UL:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::UN:
+        {
+            return "ANONYMIZED";
+        }
+        case ::gdcm::VR::US:
+        {
+            return "0";
+        }
+        case ::gdcm::VR::UT:
+        {
+            return "ANONYMIZED";
+        }
+        default:
+        {
+            CPPUNIT_FAIL("Unknown value representation.");
+            break;
+        }
+    }
+
+    return "";
+}
+
+//------------------------------------------------------------------------------
+
+template< uint16_t GROUP, uint16_t ELEMENT >
+void processTag(const ::gdcm::DataSet& dataset, const std::string& actionCode,
+                const std::set< std::string >& uidContainer)
+{
+    // Retrieve tag value
+    const std::string& dataStr = ::fwGdcmIO::helper::DicomData::getTrimmedTagValue<GROUP,ELEMENT>(dataset);
+
+    //X – remove
+    //X/Z – X unless Z is required to maintain IOD conformance (Type 3 versus Type 2)
+    //X/D – X unless D is required to maintain IOD conformance (Type 3 versus Type 1)
+    //X/Z/D – X unless Z or D is required to maintain IOD conformance (Type 3 versus Type 2 versus Type 1)
+    //X/Z/U* - X unless Z or replacement of contained instance UIDs (U) is required to maintain IOD conformance
+    if(actionCode == "X" || actionCode == "X/Z" || actionCode == "X/D" || actionCode == "X/Z/D" ||
+       actionCode == "X/Z/U*")
+    {
+        CPPUNIT_ASSERT(!dataset.FindDataElement(::gdcm::Tag(GROUP,ELEMENT)) || dataStr.empty());
+    }
+    //Z – replace with a zero length value, or a non-zero length value that may be a dummy value and consistent with the VR
+    //D – replace with a non-zero length value that may be a dummy value and consistent with the VR
+    //Z/D – Z unless D is required to maintain IOD conformance (Type 2 versus Type 1)
+    else if(actionCode == "Z" || actionCode == "D" || actionCode == "Z/D")
+    {
+        if(::gdcm::Global::GetInstance().GetDicts().GetPublicDict().GetDictEntry(::gdcm::Tag(GROUP,
+                                                                                             ELEMENT)).GetVR() ==
+           ::gdcm::VR::SQ)
+        {
+            CPPUNIT_ASSERT(!dataset.FindDataElement(::gdcm::Tag(GROUP,ELEMENT)) || dataStr.empty());
+        }
+        else
+        {
+            CPPUNIT_ASSERT_EQUAL(getDummyValue(::gdcm::Tag(GROUP,ELEMENT)), dataStr);
+        }
+    }
+    //K – keep (unchanged for non-sequence attributes, cleaned for sequences)
+    else if(actionCode == "K")
+    {
+        if(::gdcm::Global::GetInstance().GetDicts().GetPublicDict().GetDictEntry(::gdcm::Tag(GROUP,
+                                                                                             ELEMENT)).GetVR() ==
+           ::gdcm::VR::SQ)
+        {
+            CPPUNIT_ASSERT(!dataset.FindDataElement(::gdcm::Tag(GROUP,ELEMENT)) || dataStr.empty());
+        }
+    }
+    //C – clean, that is replace with values of similar meaning known not to contain identifying information and consistent with the VR
+    else if(actionCode == "C")
+    {
+        CPPUNIT_FAIL("We should not be there...");
+    }
+    //U – replace with a non-zero length UID that is internally consistent within a set of Instances
+    else if(actionCode == "U")
+    {
+        // Check that the new UID is not in the old series
+        CPPUNIT_ASSERT(uidContainer.find(dataStr) == uidContainer.end());
+    }
+}
+//------------------------------------------------------------------------------
+
+void DicomAnonymizerTest::testAnonymizedFile(const std::string& filename)
+{
+    // Try to open the file
+    ::gdcm::Reader reader;
+    reader.SetFileName( filename.c_str() );
+    CPPUNIT_ASSERT_MESSAGE("Unable to read the file: \""+filename+"\"", reader.Read());
+    ::gdcm::File& gdcmFile   = reader.GetFile();
+    ::gdcm::DataSet& dataset = gdcmFile.GetDataSet();
+
+    processTag<0x0008,0x0050>(dataset, "Z", m_uidContainer);        //Accession Number
+    processTag<0x0018,0x4000>(dataset, "X", m_uidContainer);        //Acquisition Comments
+    processTag<0x0040,0x0555>(dataset, "X", m_uidContainer);        //Acquisition Context Sequence
+    processTag<0x0008,0x0022>(dataset, "X/Z", m_uidContainer);      //Acquisition Date
+    processTag<0x0008,0x002A>(dataset, "X/D", m_uidContainer);      //Acquisition DateTime
+    processTag<0x0018,0x1400>(dataset, "X/D", m_uidContainer);      //Acquisition Device Processing Description
+    processTag<0x0018,0x9424>(dataset, "X", m_uidContainer);        //Acquisition Protocol Description
+    processTag<0x0008,0x0032>(dataset, "X/Z", m_uidContainer);      //Acquisition Time
+    processTag<0x0040,0x4035>(dataset, "X", m_uidContainer);        //Actual Human Performers Sequence
+    processTag<0x0010,0x21B0>(dataset, "X", m_uidContainer);        //Additional Patient’s History
+    processTag<0x0038,0x0010>(dataset, "X", m_uidContainer);        //Admission ID
+    processTag<0x0038,0x0020>(dataset, "X", m_uidContainer);        //Admitting Date
+    processTag<0x0008,0x1084>(dataset, "X", m_uidContainer);        //Admitting Diagnoses Code Sequence
+    processTag<0x0008,0x1080>(dataset, "X", m_uidContainer);        //Admitting Diagnoses Description
+    processTag<0x0038,0x0021>(dataset, "X", m_uidContainer);        //Admitting Time
+    processTag<0x0000,0x1000>(dataset, "X", m_uidContainer);        //Affected SOP Instance UID
+    processTag<0x0010,0x2110>(dataset, "X", m_uidContainer);        //Allergies
+    processTag<0x4000,0x0010>(dataset, "X", m_uidContainer);        //Arbitrary
+    processTag<0x0040,0xA078>(dataset, "X", m_uidContainer);        //Author Observer Sequence
+    processTag<0x0010,0x1081>(dataset, "X", m_uidContainer);        //Branch of Service
+    processTag<0x0018,0x1007>(dataset, "X", m_uidContainer);        //Cassette ID
+    processTag<0x0040,0x0280>(dataset, "X", m_uidContainer);        //Comments on Performed Procedure Step
+    processTag<0x0020,0x9161>(dataset, "U", m_uidContainer);        //Concatenation UID
+    processTag<0x0040,0x3001>(dataset, "X", m_uidContainer);        //Confidentiality Constraint on Patient Data Description
+    processTag<0x0070,0x0084>(dataset, "Z", m_uidContainer);        //Content Creator’s Name
+    processTag<0x0070,0x0086>(dataset, "X", m_uidContainer);        //Content Creator’s Identification Code Sequence
+    processTag<0x0008,0x0023>(dataset, "Z/D", m_uidContainer);      //Content Date
+    processTag<0x0040,0xA730>(dataset, "X", m_uidContainer);        //Content Sequence
+    processTag<0x0008,0x0033>(dataset, "Z/D", m_uidContainer);      //Content Time
+    processTag<0x0008,0x010D>(dataset, "U", m_uidContainer);        //Context Group Extension Creator UID
+    processTag<0x0018,0x0010>(dataset, "Z/D", m_uidContainer);      //Contrast Bolus Agent
+    processTag<0x0018,0xA003>(dataset, "X", m_uidContainer);        //Contribution Description
+    processTag<0x0010,0x2150>(dataset, "X", m_uidContainer);        //Country of Residence
+    processTag<0x0008,0x9123>(dataset, "U", m_uidContainer);        //Creator Version UID
+    processTag<0x0038,0x0300>(dataset, "X", m_uidContainer);        //Current Patient Location
+    processTag<0x0008,0x0025>(dataset, "X", m_uidContainer);        //Curve Date
+    processTag<0x0008,0x0035>(dataset, "X", m_uidContainer);        //Curve Time
+    processTag<0x0040,0xA07C>(dataset, "X", m_uidContainer);        //Custodial Organization Sequence
+    processTag<0xFFFC,0xFFFC>(dataset, "X", m_uidContainer);        //Data Set Trailing Padding
+    processTag<0x0008,0x2111>(dataset, "X", m_uidContainer);        //Derivation Description
+    processTag<0x0018,0x700A>(dataset, "X", m_uidContainer);        //Detector ID
+    processTag<0x0018,0x1000>(dataset, "X/Z/D", m_uidContainer);    //Device Serial Number
+    processTag<0x0018,0x1002>(dataset, "U", m_uidContainer);        //Device UID
+    processTag<0x0400,0x0100>(dataset, "X", m_uidContainer);        //Digital Signature UID
+    processTag<0xFFFA,0xFFFA>(dataset, "X", m_uidContainer);        //Digital Signatures Sequence
+    processTag<0x0020,0x9164>(dataset, "U", m_uidContainer);        //Dimension Organization UID
+    processTag<0x0038,0x0040>(dataset, "X", m_uidContainer);        //Discharge Diagnosis Description
+    processTag<0x4008,0x011A>(dataset, "X", m_uidContainer);        //Distribution Address
+    processTag<0x4008,0x0119>(dataset, "X", m_uidContainer);        //Distribution Name
+    processTag<0x300A,0x0013>(dataset, "U", m_uidContainer);        //Dose Reference UID
+    processTag<0x0010,0x2160>(dataset, "X", m_uidContainer);        //Ethnic Group
+    processTag<0x0008,0x0058>(dataset, "U", m_uidContainer);        //Failed SOP Instance UID List
+    processTag<0x0070,0x031A>(dataset, "U", m_uidContainer);        //Fiducial UID
+    processTag<0x0040,0x2017>(dataset, "Z", m_uidContainer);        //Filler Order Number of Imaging Service Request
+    processTag<0x0020,0x9158>(dataset, "X", m_uidContainer);        //Frame Comments
+    processTag<0x0020,0x0052>(dataset, "U", m_uidContainer);        //Frame of Reference UID
+    processTag<0x0018,0x1008>(dataset, "X", m_uidContainer);        //Gantry ID
+    processTag<0x0018,0x1005>(dataset, "X", m_uidContainer);        //Generator ID
+    processTag<0x0070,0x0001>(dataset, "D", m_uidContainer);        //Graphic Annotation Sequence
+    processTag<0x0040,0x4037>(dataset, "X", m_uidContainer);        //Human Performers Name
+    processTag<0x0040,0x4036>(dataset, "X", m_uidContainer);        //Human Performers Organization
+    processTag<0x0088,0x0200>(dataset, "X", m_uidContainer);        //Icon Image Sequence(see Note 12)
+    processTag<0x0008,0x4000>(dataset, "X", m_uidContainer);        //Identifying Comments
+    processTag<0x0020,0x4000>(dataset, "X", m_uidContainer);        //Image Comments
+    processTag<0x0028,0x4000>(dataset, "X", m_uidContainer);        //Image Presentation Comments
+    processTag<0x0040,0x2400>(dataset, "X", m_uidContainer);        //Imaging Service Request Comments
+    processTag<0x4008,0x0300>(dataset, "X", m_uidContainer);        //Impressions
+    processTag<0x0008,0x0014>(dataset, "U", m_uidContainer);        //Instance Creator UID
+    processTag<0x0008,0x0081>(dataset, "X", m_uidContainer);        //Institution Address
+    processTag<0x0008,0x0082>(dataset, "X/Z/D", m_uidContainer);    //Institution Code Sequence
+    processTag<0x0008,0x0080>(dataset, "X/Z/D", m_uidContainer);    //Institution Name
+    processTag<0x0008,0x1040>(dataset, "X", m_uidContainer);        //Institutional Department Name
+    processTag<0x0010,0x1050>(dataset, "X", m_uidContainer);        //Insurance Plan Identification
+    processTag<0x0040,0x1011>(dataset, "X", m_uidContainer);        //Intended Recipients of Results Identification Sequence
+    processTag<0x4008,0x0111>(dataset, "X", m_uidContainer);        //Interpretation Approver Sequence
+    processTag<0x4008,0x010C>(dataset, "X", m_uidContainer);        //Interpretation Author
+    processTag<0x4008,0x0115>(dataset, "X", m_uidContainer);        //Interpretation Diagnosis Description
+    processTag<0x4008,0x0202>(dataset, "X", m_uidContainer);        //Interpretation ID Issuer
+    processTag<0x4008,0x0102>(dataset, "X", m_uidContainer);        //Interpretation Recorder
+    processTag<0x4008,0x010B>(dataset, "X", m_uidContainer);        //Interpretation Text
+    processTag<0x4008,0x010A>(dataset, "X", m_uidContainer);        //Interpretation Transcriber
+    processTag<0x0008,0x3010>(dataset, "U", m_uidContainer);        //Irradiation Event UID
+    processTag<0x0038,0x0011>(dataset, "X", m_uidContainer);        //Issuer of Admission ID
+    processTag<0x0010,0x0021>(dataset, "X", m_uidContainer);        //Issuer of Patient ID
+    processTag<0x0038,0x0061>(dataset, "X", m_uidContainer);        //Issuer of Service Episode ID
+    processTag<0x0028,0x1214>(dataset, "U", m_uidContainer);        //Large Palette Color Lookup Table UID
+    processTag<0x0010,0x21D0>(dataset, "X", m_uidContainer);        //Last Menstrual Date
+    processTag<0x0400,0x0404>(dataset, "X", m_uidContainer);        //MAC
+    processTag<0x0002,0x0003>(dataset, "U", m_uidContainer);        //Media Storage SOP Instance UID
+    processTag<0x0010,0x2000>(dataset, "X", m_uidContainer);        //Medical Alerts
+    processTag<0x0010,0x1090>(dataset, "X", m_uidContainer);        //Medical Record Locator
+    processTag<0x0010,0x1080>(dataset, "X", m_uidContainer);        //Military Rank
+    processTag<0x0400,0x0550>(dataset, "X", m_uidContainer);        //Modified Attributes Sequence
+    processTag<0x0020,0x3406>(dataset, "X", m_uidContainer);        //Modified Image Description
+    processTag<0x0020,0x3401>(dataset, "X", m_uidContainer);        //Modifying Device ID
+    processTag<0x0020,0x3404>(dataset, "X", m_uidContainer);        //Modifying Device Manufacturer
+    processTag<0x0008,0x1060>(dataset, "X", m_uidContainer);        //Name of Physician(s) Reading Study
+    processTag<0x0040,0x1010>(dataset, "X", m_uidContainer);        //Names of Intended Recipient of Results
+    processTag<0x0010,0x2180>(dataset, "X", m_uidContainer);        //Occupation
+    processTag<0x0008,0x1072>(dataset, "X/D", m_uidContainer);      //Operators’ Identification Sequence
+    processTag<0x0008,0x1070>(dataset, "X/Z/D", m_uidContainer);    //Operators’ Name
+    processTag<0x0400,0x0561>(dataset, "X", m_uidContainer);        //Original Attributes Sequence
+    processTag<0x0040,0x2010>(dataset, "X", m_uidContainer);        //Order Callback Phone Number
+    processTag<0x0040,0x2008>(dataset, "X", m_uidContainer);        //Order Entered By
+    processTag<0x0040,0x2009>(dataset, "X", m_uidContainer);        //Order Enterer Location
+    processTag<0x0010,0x1000>(dataset, "X", m_uidContainer);        //Other Patient IDs
+    processTag<0x0010,0x1002>(dataset, "X", m_uidContainer);        //Other Patient IDs Sequence
+    processTag<0x0010,0x1001>(dataset, "X", m_uidContainer);        //Other Patient Names
+    processTag<0x0008,0x0024>(dataset, "X", m_uidContainer);        //Overlay Date
+    processTag<0x0008,0x0034>(dataset, "X", m_uidContainer);        //Overlay Time
+    processTag<0x0028,0x1199>(dataset, "U", m_uidContainer);        //Palette Color Lookup Table UID
+    processTag<0x0040,0xA07A>(dataset, "X", m_uidContainer);        //Participant Sequence
+    processTag<0x0010,0x1040>(dataset, "X", m_uidContainer);        //Patient Address
+    processTag<0x0010,0x4000>(dataset, "X", m_uidContainer);        //Patient Comments
+    processTag<0x0010,0x0020>(dataset, "Z", m_uidContainer);        //Patient ID
+    processTag<0x0010,0x2203>(dataset, "X/Z", m_uidContainer);      //Patient Sex Neutered
+    processTag<0x0038,0x0500>(dataset, "X", m_uidContainer);        //Patient State
+    processTag<0x0040,0x1004>(dataset, "X", m_uidContainer);        //Patient Transport Arrangements
+    processTag<0x0010,0x1010>(dataset, "X", m_uidContainer);        //Patient’s Age
+    processTag<0x0010,0x0030>(dataset, "Z", m_uidContainer);        //Patient’s Birth Date
+    processTag<0x0010,0x1005>(dataset, "X", m_uidContainer);        //Patient’s Birth Name
+    processTag<0x0010,0x0032>(dataset, "X", m_uidContainer);        //Patient’s Birth Time
+    processTag<0x0038,0x0400>(dataset, "X", m_uidContainer);        //Patient’s Institution Residence
+    processTag<0x0010,0x0050>(dataset, "X", m_uidContainer);        //Patient’s Insurance Plan Code Sequence
+    processTag<0x0010,0x1060>(dataset, "X", m_uidContainer);        //Patient’s Mother’s Birth Name
+    processTag<0x0010,0x0010>(dataset, "Z", m_uidContainer);        //Patient’s Name
+    processTag<0x0010,0x0101>(dataset, "X", m_uidContainer);        //Patient’s Primary Language Code Sequence
+    processTag<0x0010,0x0102>(dataset, "X", m_uidContainer);        //Patient’s Primary Language Modifier Code Sequence
+    processTag<0x0010,0x21F0>(dataset, "X", m_uidContainer);        //Patient’s Religious Preference
+    processTag<0x0010,0x0040>(dataset, "Z", m_uidContainer);        //Patient’s Sex
+    processTag<0x0010,0x1020>(dataset, "X", m_uidContainer);        //Patient’s Size
+    processTag<0x0010,0x2154>(dataset, "X", m_uidContainer);        //Patient’s Telephone Number
+    processTag<0x0010,0x1030>(dataset, "X", m_uidContainer);        //Patient’s Weight
+    processTag<0x0040,0x0243>(dataset, "X", m_uidContainer);        //Performed Location
+    processTag<0x0040,0x0254>(dataset, "X", m_uidContainer);        //Performed Procedure Step Description
+    processTag<0x0040,0x0253>(dataset, "X", m_uidContainer);        //Performed Procedure Step ID
+    processTag<0x0040,0x0244>(dataset, "X", m_uidContainer);        //Performed Procedure Step Start Date
+    // processTag<0x0040,0x0245>(dataset, "X", m_uidContainer);        //Performed Procedure Step Start Time
+    processTag<0x0040,0x0241>(dataset, "X", m_uidContainer);        //Performed Station AE Title
+    processTag<0x0040,0x4030>(dataset, "X", m_uidContainer);        //Performed Station Geographic Location Code Sequence
+    processTag<0x0040,0x0242>(dataset, "X", m_uidContainer);        //Performed Station Name
+    // processTag<0x0040,0x0248>(dataset, "X", m_uidContainer);        //Performed Station Name Code Sequence
+    processTag<0x0008,0x1052>(dataset, "X", m_uidContainer);        //Performing Physicians’ Identification Sequence
+    processTag<0x0008,0x1050>(dataset, "X", m_uidContainer);        //Performing Physicians’ Name
+    processTag<0x0040,0x1102>(dataset, "X", m_uidContainer);        //Person Address
+    processTag<0x0040,0x1101>(dataset, "D", m_uidContainer);        //Person Identification Code Sequence
+    processTag<0x0040,0xA123>(dataset, "D", m_uidContainer);        //Person Name
+    processTag<0x0040,0x1103>(dataset, "X", m_uidContainer);        //Person Telephone Numbers
+    processTag<0x4008,0x0114>(dataset, "X", m_uidContainer);        //Physician Approving Interpretation
+    processTag<0x0008,0x1062>(dataset, "X", m_uidContainer);        //Physician Reading Study Identification Sequence
+    processTag<0x0008,0x1048>(dataset, "X", m_uidContainer);        //Physician(s) Record
+    processTag<0x0008,0x1049>(dataset, "X", m_uidContainer);        //Physician(s) of Record Identification Sequence
+    processTag<0x0040,0x2016>(dataset, "Z", m_uidContainer);        //Placer Order Number of Imaging Service Request
+    processTag<0x0018,0x1004>(dataset, "X", m_uidContainer);        //Plate ID
+    processTag<0x0040,0x0012>(dataset, "X", m_uidContainer);        //Pre-Medication
+    processTag<0x0010,0x21C0>(dataset, "X", m_uidContainer);        //Pregnancy Status
+    processTag<0x0018,0x1030>(dataset, "X/D", m_uidContainer);      //Protocol Name
+    processTag<0x0040,0x2001>(dataset, "X", m_uidContainer);        //Reason for Imaging Service Request
+    processTag<0x0032,0x1030>(dataset, "X", m_uidContainer);        //Reason for Study
+    processTag<0x0400,0x0402>(dataset, "X", m_uidContainer);        //Referenced Digital Signature Sequence
+    processTag<0x3006,0x0024>(dataset, "U", m_uidContainer);        //Referenced Frame of Reference UID
+    processTag<0x0040,0x4023>(dataset, "U", m_uidContainer);        //Referenced General Purpose Scheduled Procedure Step Transaction UID
+    processTag<0x0008,0x1140>(dataset, "X/Z/U*", m_uidContainer);   //Referenced Image Sequence
+    // processTag<0x0038,0x1234>(dataset, "X", m_uidContainer);        //Referenced Patient Alias Sequence
+    processTag<0x0008,0x1120>(dataset, "X", m_uidContainer);        //Referenced Patient Sequence
+    processTag<0x0008,0x1111>(dataset, "X/Z/D", m_uidContainer);    //Referenced Performed Procedure Step Sequence
+    processTag<0x0400,0x0403>(dataset, "X", m_uidContainer);        //Referenced SOP Instance MAC Sequence
+    processTag<0x0008,0x1155>(dataset, "U", m_uidContainer);        //Referenced SOP Instance UID
+    processTag<0x0004,0x1511>(dataset, "U", m_uidContainer);        //Referenced SOP Instance UID in File
+    processTag<0x0008,0x1110>(dataset, "X/Z", m_uidContainer);      //Referenced Study Sequence
+    processTag<0x0008,0x0092>(dataset, "X", m_uidContainer);        //Referring Physician’s Address
+    processTag<0x0008,0x0096>(dataset, "X", m_uidContainer);        //Referring Physician’s Identification Sequence
+    processTag<0x0008,0x0090>(dataset, "Z", m_uidContainer);        //Referring Physician’s Name
+    processTag<0x0008,0x0094>(dataset, "X", m_uidContainer);        //Referring Physician’s Telephone Numbers
+    processTag<0x0010,0x2152>(dataset, "X", m_uidContainer);        //Region of Residence
+    processTag<0x3006,0x00C2>(dataset, "U", m_uidContainer);        //Related Frame of Reference UID
+    processTag<0x0040,0x0275>(dataset, "X", m_uidContainer);        //Request Attributes Sequence
+    processTag<0x0032,0x1070>(dataset, "X", m_uidContainer);        //Requested Contrast Agent
+    processTag<0x0040,0x1400>(dataset, "X", m_uidContainer);        //Requested Procedure Comments
+    processTag<0x0032,0x1060>(dataset, "X/Z", m_uidContainer);      //Requested Procedure Description
+    processTag<0x0040,0x1001>(dataset, "X", m_uidContainer);        //Requested Procedure ID
+    processTag<0x0040,0x1005>(dataset, "X", m_uidContainer);        //Requested Procedure Location
+    processTag<0x0000,0x1001>(dataset, "U", m_uidContainer);        //Requested SOP Instance UID
+    processTag<0x0032,0x1032>(dataset, "X", m_uidContainer);        //Requesting Physician
+    processTag<0x0032,0x1033>(dataset, "X", m_uidContainer);        //Requesting Service
+    processTag<0x0010,0x2299>(dataset, "X", m_uidContainer);        //Responsible Organization
+    processTag<0x0010,0x2297>(dataset, "X", m_uidContainer);        //Responsible Person
+    processTag<0x4008,0x4000>(dataset, "X", m_uidContainer);        //Results Comments
+    processTag<0x4008,0x0118>(dataset, "X", m_uidContainer);        //Results Distribution List Sequence
+    processTag<0x4008,0x0042>(dataset, "X", m_uidContainer);        //Results ID Issuer
+    processTag<0x300E,0x0008>(dataset, "X/Z", m_uidContainer);      //Reviewer Name
+    processTag<0x0040,0x4034>(dataset, "X", m_uidContainer);        //Scheduled Human Performers Sequence
+    processTag<0x0038,0x001E>(dataset, "X", m_uidContainer);        //Scheduled Patient Institution Residence
+    processTag<0x0040,0x000B>(dataset, "X", m_uidContainer);        //Scheduled Performing Physician Identification Sequence
+    processTag<0x0040,0x0006>(dataset, "X", m_uidContainer);        //Scheduled Performing Physician Name
+    processTag<0x0040,0x0004>(dataset, "X", m_uidContainer);        //Scheduled Procedure Step End Date
+    processTag<0x0040,0x0005>(dataset, "X", m_uidContainer);        //Scheduled Procedure Step End Time
+    processTag<0x0040,0x0007>(dataset, "X", m_uidContainer);        //Scheduled Procedure Step Description
+    processTag<0x0040,0x0011>(dataset, "X", m_uidContainer);        //Scheduled Procedure Step Location
+    processTag<0x0040,0x0002>(dataset, "X", m_uidContainer);        //Scheduled Procedure Step Start Date
+    processTag<0x0040,0x0003>(dataset, "X", m_uidContainer);        //Scheduled Procedure Step Start Time
+    processTag<0x0040,0x0001>(dataset, "X", m_uidContainer);        //Scheduled Station AE Title
+    processTag<0x0040,0x4027>(dataset, "X", m_uidContainer);        //Scheduled Station Geographic Location Code Sequence
+    processTag<0x0040,0x0010>(dataset, "X", m_uidContainer);        //Scheduled Station Name
+    processTag<0x0040,0x4025>(dataset, "X", m_uidContainer);        //Scheduled Station Name Code Sequence
+    processTag<0x0032,0x1020>(dataset, "X", m_uidContainer);        //Scheduled Study Location
+    processTag<0x0032,0x1021>(dataset, "X", m_uidContainer);        //Scheduled Study Location AE Title
+    processTag<0x0008,0x0021>(dataset, "X/D", m_uidContainer);      //Series Date
+    processTag<0x0008,0x103E>(dataset, "X", m_uidContainer);        //Series Description
+    processTag<0x0020,0x000E>(dataset, "U", m_uidContainer);        //Series Instance UID
+    processTag<0x0008,0x0031>(dataset, "X/D", m_uidContainer);      //Series Time
+    processTag<0x0038,0x0062>(dataset, "X", m_uidContainer);        //Service Episode Description
+    processTag<0x0038,0x0060>(dataset, "X", m_uidContainer);        //Service Episode ID
+    processTag<0x0010,0x21A0>(dataset, "X", m_uidContainer);        //Smoking Status
+    processTag<0x0008,0x0018>(dataset, "U", m_uidContainer);        //SOP Instance UID
+    processTag<0x0008,0x2112>(dataset, "X/Z/U*", m_uidContainer);   //Source Image Sequence
+    processTag<0x0038,0x0050>(dataset, "X", m_uidContainer);        //Special Needs
+    processTag<0x0008,0x1010>(dataset, "X/Z/D", m_uidContainer);    //Station Name
+    processTag<0x0088,0x0140>(dataset, "U", m_uidContainer);        //Storage Media File-set UID
+    processTag<0x0032,0x4000>(dataset, "X", m_uidContainer);        //Study Comments
+    processTag<0x0008,0x0020>(dataset, "Z", m_uidContainer);        //Study Date
+    processTag<0x0008,0x1030>(dataset, "X", m_uidContainer);        //Study Description
+    processTag<0x0020,0x0010>(dataset, "Z", m_uidContainer);        //Study ID
+    processTag<0x0032,0x0012>(dataset, "X", m_uidContainer);        //Study ID Issuer
+    processTag<0x0020,0x000D>(dataset, "U", m_uidContainer);        //Study Instance UID
+    processTag<0x0008,0x0030>(dataset, "Z", m_uidContainer);        //Study Time
+    processTag<0x0020,0x0200>(dataset, "U", m_uidContainer);        //Synchronization Frame of Reference UID
+    processTag<0x0040,0xDB0D>(dataset, "U", m_uidContainer);        //Template Extension Creator UID
+    processTag<0x0040,0xDB0C>(dataset, "U", m_uidContainer);        //Template Extension Organization UID
+    processTag<0x4000,0x4000>(dataset, "X", m_uidContainer);        //Text Comments
+    processTag<0x2030,0x0020>(dataset, "X", m_uidContainer);        //Text String
+    processTag<0x0008,0x0201>(dataset, "X", m_uidContainer);        //Timezone Offset From UTC
+    processTag<0x0088,0x0910>(dataset, "X", m_uidContainer);        //Topic Author
+    // processTag<0x0088,0x0912>(dataset, "X", m_uidContainer);        //Topic Key Words
+    processTag<0x0088,0x0906>(dataset, "X", m_uidContainer);        //Topic Subject
+    processTag<0x0088,0x0904>(dataset, "X", m_uidContainer);        //Topic Title
+    processTag<0x0008,0x1195>(dataset, "U", m_uidContainer);        //Transaction UID
+    processTag<0x0040,0xA124>(dataset, "U", m_uidContainer);        //UID
+    processTag<0x0040,0xA088>(dataset, "Z", m_uidContainer);        //Verifying Observer Identification Code Sequence
+    processTag<0x0040,0xA075>(dataset, "D", m_uidContainer);        //Verifying Observer Name
+    processTag<0x0040,0xA073>(dataset, "D", m_uidContainer);        //Verifying Observer Sequence
+    processTag<0x0040,0xA027>(dataset, "X", m_uidContainer);        //Verifying Organization
+    processTag<0x0038,0x4000>(dataset, "X", m_uidContainer);        //Visit Comments
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/DicomDirTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/DicomDirTest.cpp
new file mode 100644
index 0000000..745a5f8
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/DicomDirTest.cpp
@@ -0,0 +1,78 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DicomDirTest.hpp"
+
+#include <fwGdcmIO/helper/DicomDir.hpp>
+
+#include <fwLog/Logger.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+
+#include <fwTest/Data.hpp>
+
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/foreach.hpp>
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGdcmIO::ut::DicomDirTest );
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+void DicomDirTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomDirTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomDirTest::readDicomDir()
+{
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() /
+                                           "fw4spl/Patient/Dicom/DicomDB/82-MR-SAGITTAL-KNEE-DICOMDIR";
+    const std::string pathStr = ::boost::algorithm::replace_all_copy(path.string(), "\\", "/");
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+
+    std::vector< ::fwMedData::DicomSeries::sptr > seriesDB;
+
+    ::fwLog::Logger::sptr logger = ::fwLog::Logger::New();
+
+    // Read DICOMDIR file
+    ::fwGdcmIO::helper::DicomDir::retrieveDicomSeries(path / "DICOMDIR", seriesDB, logger);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB.size());
+    CPPUNIT_ASSERT( logger->empty() );
+
+    auto series = *seriesDB.begin();
+    CPPUNIT_ASSERT_EQUAL( size_t( 84 ), series->getLocalDicomPaths().size());
+
+    // Verify filenames
+    for(auto entry: series->getLocalDicomPaths())
+    {
+        CPPUNIT_ASSERT(::boost::filesystem::exists(entry.second));
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+
+} // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp
new file mode 100644
index 0000000..3b4e1c3
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/DicomSeriesWriterTest.cpp
@@ -0,0 +1,164 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "DicomSeriesWriterTest.hpp"
+
+#include <fwData/Object.hpp>
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
+#include <fwGdcmIO/helper/DicomAnonymizer.hpp>
+#include <fwGdcmIO/helper/DicomSeriesWriter.hpp>
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwTest/Data.hpp>
+#include <fwTest/helper/compare.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <fwZip/ReadZipArchive.hpp>
+#include <fwZip/WriteDirArchive.hpp>
+#include <fwZip/WriteZipArchive.hpp>
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGdcmIO::ut::DicomSeriesWriterTest );
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+void DicomSeriesWriterTest::setUp()
+{
+    // Set up context before running a test.
+    ::fwMedData::SeriesDB::sptr srcSeriesDB = ::fwMedData::SeriesDB::New();
+    const ::boost::filesystem::path srcPath = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB/01-CT-DICOM_LIVER";
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + srcPath.string() + "' does not exist",
+                           ::boost::filesystem::exists(srcPath));
+
+
+    // Read source Dicom
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(srcSeriesDB);
+    reader->setFolder(srcPath);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), srcSeriesDB->size());
+
+    m_srcDicomSeries =
+        ::fwMedData::DicomSeries::dynamicCast(srcSeriesDB->getContainer().front());
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriterTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriterTest::checkDicomSeries(const ::boost::filesystem::path& p, bool anonymized)
+{
+    ::fwMedData::SeriesDB::sptr destSeriesDB = ::fwMedData::SeriesDB::New();
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(destSeriesDB);
+    reader->setFolder(p);
+    CPPUNIT_ASSERT_NO_THROW(reader->readDicomSeries());
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), destSeriesDB->size());
+    ::fwMedData::DicomSeries::sptr destDicomSeries =
+        ::fwMedData::DicomSeries::dynamicCast(destSeriesDB->getContainer().front());
+
+    // Compare Source and Destination Series
+    ExcludeSetType excludeSetPrefix;
+    excludeSetPrefix.insert("local_dicom_paths");
+
+    ExcludeSetType excludeSet;
+    if(anonymized)
+    {
+        excludeSet.insert("instance_uid");
+        excludeSet.insert("study.instance_uid");
+    }
+
+    CPPUNIT_ASSERT_MESSAGE("Series not equal",
+                           ::fwTest::helper::compare(m_srcDicomSeries, destDicomSeries, excludeSet, excludeSetPrefix));
+}
+
+// TODO: This test is disabled as DicomSeries doesn't store Binaries anymore.
+void DicomSeriesWriterTest::writeReadTest()
+{
+    CPPUNIT_ASSERT_MESSAGE("Failed to set up source Dicom series", m_srcDicomSeries);
+
+    const ::boost::filesystem::path destPath = ::fwTools::System::getTemporaryFolder("writeReadTest") /
+                                               "dicomSeriesTest";
+    ::boost::filesystem::create_directories(destPath);
+
+    // Write Dicom
+    ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer = ::fwGdcmIO::helper::DicomSeriesWriter::New();
+    writer->setObject(m_srcDicomSeries);
+    writer->setFolder(destPath);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    this->checkDicomSeries(destPath);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriterTest::writeReadAnonymiseTest()
+{
+    CPPUNIT_ASSERT_MESSAGE("Failed to set up source Dicom series", m_srcDicomSeries);
+
+    // Anonymize series
+    ::fwGdcmIO::helper::DicomAnonymizer::sptr anonymizer
+        = ::fwGdcmIO::helper::DicomAnonymizer::New();
+    anonymizer->addExceptionTag(0x0010, 0x0010, "ANONYMIZED^ANONYMIZED "); // Patient's name
+
+    const ::boost::filesystem::path destPath
+        = ::fwTools::System::getTemporaryFolder("writeReadAnonymiseTest") / "dicomSeriesTest";
+    ::boost::filesystem::create_directories(destPath);
+
+    // Write Dicom
+    ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer = ::fwGdcmIO::helper::DicomSeriesWriter::New();
+    writer->setObject(m_srcDicomSeries);
+    writer->setFolder(destPath);
+    writer->setAnonymizer(anonymizer);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    this->checkDicomSeries(destPath, true);
+}
+
+//------------------------------------------------------------------------------
+
+void DicomSeriesWriterTest::writeReadDirArchiveTest()
+{
+    CPPUNIT_ASSERT_MESSAGE("Failed to set up source Dicom series", m_srcDicomSeries);
+
+    const ::boost::filesystem::path destPath
+        = ::fwTools::System::getTemporaryFolder("writeReadDirArchiveTest") / "dicomSeriesTest";
+    ::boost::filesystem::create_directories(destPath);
+
+    ::fwZip::WriteDirArchive::sptr writeArchive = ::fwZip::WriteDirArchive::New(destPath);
+
+    // Write Dicom
+    ::fwGdcmIO::helper::DicomSeriesWriter::sptr writer = ::fwGdcmIO::helper::DicomSeriesWriter::New();
+    writer->setObject(m_srcDicomSeries);
+    writer->setOutputArchive(writeArchive);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    this->checkDicomSeries(destPath);
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/SeriesDBReaderTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/SeriesDBReaderTest.cpp
new file mode 100644
index 0000000..c46254b
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/SeriesDBReaderTest.cpp
@@ -0,0 +1,982 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "SeriesDBReaderTest.hpp"
+
+#include <fwData/Color.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+
+#include <fwLog/Logger.hpp>
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwMemory/BufferManager.hpp>
+
+#include <fwTest/Data.hpp>
+#include <fwTest/DicomReaderTest.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <boost/algorithm/string/replace.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/property_tree/exceptions.hpp>
+#include <boost/property_tree/json_parser.hpp>
+#include <boost/property_tree/ptree.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGdcmIO::ut::SeriesDBReaderTest );
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+//------------------------------------------------------------------------------
+
+std::string getValue(const ::boost::property_tree::ptree& node, const std::string& name,
+                     const ::boost::filesystem::path& filePath )
+{
+    std::string value;
+    try
+    {
+        value = node.get< std::string >(name);
+
+        // Remove leading and trailing spaces
+        size_t first = value.find_first_not_of(" ");
+        if (first != std::string::npos)
+        {
+            size_t last = value.find_last_not_of(" ");
+            value = value.substr(first, last - first + 1);
+        }
+    }
+    catch( ::boost::property_tree::ptree_bad_path& )
+    {
+        SLM_WARN(name + " information are missing in '"+ filePath.string() +"'.");
+        value = "";
+    }
+
+    return value;
+}
+
+//------------------------------------------------------------------------------
+
+/**
+ * @brief Verify tag values according to JSON files generated from DICOM dump
+ * @param filename DICOM folder name
+ * @param seriesDB SeriesDB object containing DICOM series
+ */
+void verifyTagValues(const std::string& filename, const ::fwMedData::SeriesDB::sptr& seriesDB)
+{
+    const double delta                        = 0.001;
+    const ::boost::filesystem::path dicomPath = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB";
+    const ::boost::filesystem::path metaPath  = dicomPath / "META";
+
+    for(::fwMedData::SeriesDB::iterator sIt = seriesDB->begin(); sIt != seriesDB->end(); ++sIt)
+    {
+        ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(*sIt);
+
+        // Parse META File
+        const std::string metaName               = filename + "/" + series->getInstanceUID() + ".json";
+        const ::boost::filesystem::path metaFile = metaPath / metaName;
+        const std::string mf                     = metaFile.string();
+        ::boost::property_tree::ptree root;
+        ::boost::property_tree::json_parser::read_json(mf, root);
+
+        // Series
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesInstanceUID", mf), series->getInstanceUID());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "Modality", mf), series->getModality());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesDate", mf), series->getDate());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesTime", mf), series->getTime());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "SeriesDescription", mf), series->getDescription());
+
+        ::fwMedData::DicomValuesType performingPhysiciansName = series->getPerformingPhysiciansName();
+        std::string performingPhysiciansNameStr = "";
+        for(::fwMedData::DicomValuesType::iterator i = performingPhysiciansName.begin();
+            i != performingPhysiciansName.end(); ++i)
+        {
+            performingPhysiciansNameStr += *i;
+            if((i+1) != performingPhysiciansName.end())
+            {
+                performingPhysiciansNameStr += "\\";
+            }
+        }
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PerformingPhysiciansName", mf), performingPhysiciansNameStr);
+
+
+        // Patient
+        ::fwMedData::Patient::sptr patient = series->getPatient();
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientID", mf), patient->getPatientId());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientName", mf), patient->getName());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientBirthDate", mf), patient->getBirthdate());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientSex", mf), patient->getSex());
+
+        // Study
+        ::fwMedData::Study::sptr study = series->getStudy();
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyInstanceUID", mf), study->getInstanceUID());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyDate", mf), study->getDate());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyTime", mf), study->getTime());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "ReferringPhysicianName", mf), study->getReferringPhysicianName());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "StudyDescription", mf), study->getDescription());
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "PatientAge", mf), study->getPatientAge());
+
+        // Equipment
+        ::fwMedData::Equipment::sptr equipment = series->getEquipment();
+        CPPUNIT_ASSERT_EQUAL(getValue(root, "InstitutionName", mf), equipment->getInstitutionName());
+
+        // Image
+        ::fwData::Image::sptr image = series->getImage();
+
+        // PixelSpacing - Not checked as the image could be rotated
+
+        // SliceThickness - This value is recomputed using the SliceThicknessModifier filter.
+//        std::string spacingZ = getValue(root, "SliceThickness", mf);
+//        CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(spacingZ), image->getSpacing()[2], 0.0001);
+
+        // Origin - Not checked as the image could be rotated
+
+        // Size - Not checked as the image could be rotated
+
+        // Window Center
+        const std::string windowCenter = getValue(root, "WindowCenter", mf);
+        if(!windowCenter.empty())
+        {
+            std::vector< std::string > windowCenterValues;
+            ::boost::split(windowCenterValues, windowCenter, boost::is_any_of("\\"));
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(windowCenterValues[0]),
+                                         image->getWindowCenter(), delta);
+        }
+        else
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(0,image->getWindowCenter(), delta);
+        }
+
+        // Window Width
+        const std::string windowWidth = getValue(root, "WindowWidth", mf);
+        if(!windowWidth.empty())
+        {
+            std::vector< std::string > windowWidthValues;
+            ::boost::split(windowWidthValues, windowWidth, boost::is_any_of("\\"));
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(::boost::lexical_cast< double >(windowWidthValues[0]),
+                                         image->getWindowWidth(), delta);
+        }
+        else
+        {
+            CPPUNIT_ASSERT_DOUBLES_EQUAL(0,image->getWindowWidth(), delta);
+        }
+
+        // Number of components
+        const std::string photometricInterpretation = getValue(root, "PhotometricInterpretation", mf);
+        size_t nbComponents                         = 0;
+        if(photometricInterpretation == "MONOCHROME2")
+        {
+            nbComponents = 1;
+        }
+        else if(photometricInterpretation == "RGB" || photometricInterpretation == "YBR")
+        {
+            nbComponents = 3;
+        }
+        else if(photometricInterpretation == "ARGB" || photometricInterpretation == "CMYK")
+        {
+            nbComponents = 4;
+        }
+        CPPUNIT_ASSERT_EQUAL(nbComponents, image->getNumberOfComponents());
+
+    }
+
+}
+
+//------------------------------------------------------------------------------
+
+
+void SeriesDBReaderTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readACHSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readACHSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readCTSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readMRSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readOTSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readOTSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readSEGSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readSEGSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readSFSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readSFSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readSRSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readSRSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::read3DSRSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->read3DSRSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readDisabledSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readDisabledSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRSeriesWithDicomDirDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readMRSeriesWithDicomDir();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMultipleRescaleSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readMultipleRescaleSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTWithSurviewSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readCTWithSurviewSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRWithTemporalPositionSeriesDBTest()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readMRWithTemporalPositionSeries();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTSeriesDBIssue01Test()
+{
+    ::fwMemory::BufferManager::getDefault()->setLoadingMode(::fwMemory::BufferManager::DIRECT);
+    this->readCTSeriesDBIssue01();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readACHSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/ACHGenou";
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+
+    // Check trimmed values
+    CPPUNIT_ASSERT( ::fwTest::DicomReaderTest::checkSeriesACHGenouTrimmed( series ) );
+
+    // Read image in lazy mode
+    ::fwDataTools::helper::Image locker( series->getImage() );
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "01-CT-DICOM_LIVER";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.00001;
+
+    // Check number of series
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Read image buffer
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Check number of dimensions
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), image->getNumberOfDimensions());
+
+    // Check size
+    ::fwData::Image::SizeType size = image->getSize();
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[0]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[1]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 129 ), size[2]);
+
+    // Check spacing
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.57 ), spacing[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.57 ), spacing[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1.6 ), spacing[2], delta);
+
+    // Check origin
+    ::fwData::Image::OriginType origin = image->getOrigin();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[2], delta);
+
+    // Check window center
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowCenter(), delta);
+
+    // Check window width
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowWidth(), delta);
+
+    // Check image type
+    CPPUNIT_ASSERT_EQUAL(::fwTools::Type::s_INT16, image->getType());
+
+    // Verify tag values according to json file
+    verifyTagValues(filename, seriesDB);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "46-MR-BARRE-MONO2-12-shoulder";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    // Check number of series
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Read image buffer
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Check number of dimensions - FIXME Should be 2 but when creating an image with 2D size, the visualization crashes...
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), image->getNumberOfDimensions());
+
+    // Check size
+    ::fwData::Image::SizeType size = image->getSize();
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), size[0]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1024 ), size[1]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1024 ), size[2]);
+
+    // Check spacing
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 6 ), spacing[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.2 ), spacing[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.2 ), spacing[2], delta);
+
+    // Check origin
+    ::fwData::Image::OriginType origin = image->getOrigin();
+    OSLM_WARN("ORIGIN : " << origin[0] << " " << origin[1] << " " << origin[2]);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( -112.828 ), origin[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( -180.058 ), origin[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 97.1478 ), origin[2], delta);
+
+    // Check window center
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1000 ), image->getWindowCenter(), delta);
+
+    // Check window width
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 2000 ), image->getWindowWidth(), delta);
+
+    // Check image type
+    CPPUNIT_ASSERT_EQUAL(::fwTools::Type::s_DOUBLE, image->getType());
+
+    // Verify tag values according to json file
+    verifyTagValues(filename, seriesDB);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readOTSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "42-OT-BARRE-MONO2-8-colon";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    // Check number of series
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Read image buffer
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Check number of dimensions - FIXME Should be 2 but when creating an image with 2D size, the visualization crashes...
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), image->getNumberOfDimensions());
+
+    // Check size
+    ::fwData::Image::SizeType size = image->getSize();
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[0]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 512 ), size[1]);
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), size[2]);
+
+    // Check spacing
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), spacing[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), spacing[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), spacing[2], delta);
+
+    // Check origin
+    ::fwData::Image::OriginType origin = image->getOrigin();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), origin[2], delta);
+
+    // Check window center
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowCenter(), delta);
+
+    // Check window width
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0 ), image->getWindowWidth(), delta);
+
+    // Check image type
+    CPPUNIT_ASSERT_EQUAL(::fwTools::Type::s_UINT8, image->getType());
+
+    // Verify tag values according to json file
+    verifyTagValues(filename, seriesDB);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readSEGSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SEG";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 2 ), seriesDB->size());
+
+    //Retrieve ImageSeries
+    ::fwMedData::ModelSeries::sptr series = ::fwMedData::ModelSeries::dynamicCast((*seriesDB)[1]);
+    CPPUNIT_ASSERT(series);
+
+    ::fwMedData::ModelSeries::ReconstructionVectorType reconstructionDB = series->getReconstructionDB();
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), reconstructionDB.size());
+
+    // Check reconstruction
+    ::fwData::Reconstruction::sptr reconstruction = reconstructionDB[0];
+    CPPUNIT_ASSERT_EQUAL( std::string("Liver"), reconstruction->getStructureType());
+
+    // Check mesh
+    ::fwData::Mesh::sptr mesh = reconstruction->getMesh();
+    CPPUNIT_ASSERT_EQUAL( ::fwData::Mesh::Id( 2498 ), mesh->getNumberOfPoints());
+    CPPUNIT_ASSERT_EQUAL( ::fwData::Mesh::Id( 5000 ), mesh->getNumberOfCells());
+    CPPUNIT_ASSERT_EQUAL( ::fwData::Mesh::Id( 15000 ), mesh->getCellDataSize());
+
+    // Check material
+    ::fwData::Material::sptr material = reconstruction->getMaterial();
+    ::fwData::Color::sptr color       = material->diffuse();
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.8 ), color->red(), delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.2 ), color->green(), delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 0.2 ), color->blue(), delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 1 ), color->alpha(), delta);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readSFSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SF";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Retrieve ImageSeries
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Retrieve landmarks
+    ::fwData::PointList::sptr pointList =
+        image->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+
+    // Verify first landmark
+    const ::fwData::Point::sptr& pointA = pointList->getRefPoints()[0];
+    const std::string labelA            =
+        pointA->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    CPPUNIT_ASSERT_EQUAL(std::string("Label1"), labelA);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 80.89 ), pointA->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 102.16 ), pointA->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 153 ), pointA->getCoord()[2], delta);
+
+    // Verify second landmark
+    const ::fwData::Point::sptr& pointB = pointList->getRefPoints()[1];
+    const std::string labelB            =
+        pointB->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    CPPUNIT_ASSERT_EQUAL(std::string("Label2"), labelB);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 281.63 ), pointB->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 326.52 ), pointB->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 276 ), pointB->getCoord()[2], delta);
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readSRSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_SR";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Retrieve ImageSeries
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Retrieve landmarks
+    ::fwData::PointList::sptr landmarkPointList =
+        image->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+
+    // Verify first landmark
+    const ::fwData::Point::sptr& pointA = landmarkPointList->getRefPoints()[0];
+    const std::string labelA            =
+        pointA->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    CPPUNIT_ASSERT_EQUAL(std::string("Label1"), labelA);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 80.89 ), pointA->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 102.16 ), pointA->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 153 ), pointA->getCoord()[2], delta);
+
+    // Verify second landmark
+    const ::fwData::Point::sptr& pointB = landmarkPointList->getRefPoints()[1];
+    const std::string labelB            =
+        pointB->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    CPPUNIT_ASSERT_EQUAL(std::string("Label2"), labelB);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 281.63 ), pointB->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 326.52 ), pointB->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 276 ), pointB->getCoord()[2], delta);
+
+    // Retrieve distances
+    ::fwData::Vector::sptr distanceVector =
+        image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+
+    // Verify first distance
+    ::fwData::PointList::sptr distancePointList = ::fwData::PointList::dynamicCast(distanceVector->getContainer()[0]);
+    const ::fwData::Point::sptr& pointC = distancePointList->getRefPoints()[0];
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 38.34 ), pointC->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 116.67 ), pointC->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 276 ), pointC->getCoord()[2], delta);
+    const ::fwData::Point::sptr& pointD = distancePointList->getRefPoints()[1];
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 329.41 ), pointD->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 302.33 ), pointD->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 276 ), pointD->getCoord()[2], delta);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::read3DSRSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "71-CT-DICOM_3DSR";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    const double delta = 0.01;
+
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+
+    // Retrieve ImageSeries
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker ( image );
+
+    // Retrieve landmarks
+    ::fwData::PointList::sptr landmarkPointList =
+        image->getField< ::fwData::PointList >(::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+
+    // Verify first landmark
+    const ::fwData::Point::sptr& pointA = landmarkPointList->getRefPoints()[0];
+    const std::string labelA            =
+        pointA->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    CPPUNIT_ASSERT_EQUAL(std::string("Label1"), labelA);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 80.89 ), pointA->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 102.16 ), pointA->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 153 ), pointA->getCoord()[2], delta);
+
+    // Verify second landmark
+    const ::fwData::Point::sptr& pointB = landmarkPointList->getRefPoints()[1];
+    const std::string labelB            =
+        pointB->getField< ::fwData::String >(::fwDataTools::fieldHelper::Image::m_labelId)->value();
+    CPPUNIT_ASSERT_EQUAL(std::string("Label2"), labelB);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 281.63 ), pointB->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 326.52 ), pointB->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 276 ), pointB->getCoord()[2], delta);
+
+    // Retrieve distances
+    ::fwData::Vector::sptr distanceVector =
+        image->getField< ::fwData::Vector >(::fwDataTools::fieldHelper::Image::m_imageDistancesId);
+
+    // Verify first distance
+    ::fwData::PointList::sptr distancePointList = ::fwData::PointList::dynamicCast(distanceVector->getContainer()[0]);
+    const ::fwData::Point::sptr& pointC = distancePointList->getRefPoints()[0];
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 281.63 ), pointC->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 99.30 ), pointC->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 87.26 ), pointC->getCoord()[2], delta);
+    const ::fwData::Point::sptr& pointD = distancePointList->getRefPoints()[1];
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 329.41 ), pointD->getCoord()[0], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 302.33 ), pointD->getCoord()[1], delta);
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( double( 276 ), pointD->getCoord()[2], delta);
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readDisabledSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "46-MR-BARRE-MONO2-12-shoulder";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    std::vector< std::string > supportedSOPClassContainer;
+    supportedSOPClassContainer.push_back("1.2.840.10008.5.1.4.1.1.2");   // CT Image Storage
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+    reader->setSupportedSOPClassContainer(supportedSOPClassContainer);
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Verify that the reading has failed
+    CPPUNIT_ASSERT_EQUAL( size_t( 0 ), seriesDB->size());
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), size_t(reader->getLogger()->count(::fwLog::Log::CRITICAL)));
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRSeriesWithDicomDir()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "82-MR-SAGITTAL-KNEE-DICOMDIR";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+    reader->setDicomdirActivated(true);
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Verify that the reading has succeed
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+    CPPUNIT_ASSERT_EQUAL( size_t( 0 ), size_t(reader->getLogger()->count(::fwLog::Log::CRITICAL)));
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMultipleRescaleSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "83-CT-MultipleRescale";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Retrieve ImageSeries
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+    ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::dynamicCast(seriesDB->front());
+    ::fwData::Image::sptr image           = series->getImage();
+    ::fwDataTools::helper::Image locker(image);
+
+    // Compute image buffer hash
+    auto computeHash = [ = ]() -> std::string
+                       {
+                           ::fwMemory::BufferObject::sptr buf = image->getDataArray()->getBufferObject();
+                           CPPUNIT_ASSERT(buf);
+
+                           ::fwMemory::BufferObject::Lock lock = buf->lock();
+                           CPPUNIT_ASSERT(lock.getBuffer());
+
+                           char* buffer               = static_cast< char* >(lock.getBuffer());
+                           std::size_t seed           = 0;
+                           const std::size_t buffsize = buf->getSize();
+
+                           for(size_t i = 0; i < buffsize; ++i)
+                           {
+                               ::boost::hash_combine(seed, buffer[i]);
+                           }
+
+                           return ::boost::lexical_cast< std::string >(seed);
+                       };
+
+    CPPUNIT_ASSERT_EQUAL_MESSAGE("Multiple rescale image hash comparison failed ",
+                                 std::string("2153416264075454069"), computeHash());
+
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTWithSurviewSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "84-CT-Surview";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Verify that the reading has failed
+    CPPUNIT_ASSERT_EQUAL( size_t( 3 ), seriesDB->size());
+    CPPUNIT_ASSERT_EQUAL( size_t( 0 ), size_t(reader->getLogger()->count(::fwLog::Log::CRITICAL)));
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readMRWithTemporalPositionSeries()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "85-MR-TemporalPosition";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Verify that the reading has failed
+    CPPUNIT_ASSERT_EQUAL( size_t( 4 ), seriesDB->size());
+    CPPUNIT_ASSERT_EQUAL( size_t( 0 ), size_t(reader->getLogger()->count(::fwLog::Log::CRITICAL)));
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesDBReaderTest::readCTSeriesDBIssue01()
+{
+    ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
+
+    const std::string filename           = "86-CT-Skull";
+    const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB" / filename;
+
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(seriesDB);
+    reader->setFolder(path);
+    reader->setDicomFilterType("::fwDicomIOFilter::custom::DefaultDicomFilter");
+
+    // Read DICOM
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    // Verify that the reading has failed
+    CPPUNIT_ASSERT_EQUAL( size_t( 1 ), seriesDB->size());
+    CPPUNIT_ASSERT_EQUAL( size_t( 0 ), size_t(reader->getLogger()->count(::fwLog::Log::CRITICAL)));
+}
+
+} // namespace ut
+
+} // namespace fwGdcmIO
+
diff --git a/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp b/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp
new file mode 100644
index 0000000..6c59b58
--- /dev/null
+++ b/SrcLib/io/fwGdcmIO/test/tu/src/WriterReaderTest.cpp
@@ -0,0 +1,224 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "WriterReaderTest.hpp"
+
+#include <fwData/Boolean.hpp>
+#include <fwData/Image.hpp>
+#include <fwData/Material.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Object.hpp>
+#include <fwData/PointList.hpp>
+#include <fwData/Reconstruction.hpp>
+#include <fwData/String.hpp>
+#include <fwData/Vector.hpp>
+
+#include <fwDataCamp/visitor/CompareObjects.hpp>
+
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwGdcmIO/reader/SeriesDB.hpp>
+#include <fwGdcmIO/writer/Series.hpp>
+#include <fwGdcmIO/writer/SeriesDB.hpp>
+
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Series.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+#include <fwTest/generator/Image.hpp>
+#include <fwTest/generator/Object.hpp>
+#include <fwTest/generator/SeriesDB.hpp>
+#include <fwTest/helper/compare.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <boost/filesystem/convenience.hpp>
+#include <boost/filesystem/path.hpp>
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwGdcmIO::ut::WriterReaderTest );
+
+namespace fwGdcmIO
+{
+namespace ut
+{
+
+//-----------------------------------------------------------------------------
+
+double tolerance(double num)
+{
+    return std::floor(num * 1000. + .5) / 1000;
+}
+
+void roundSpacing(::fwData::Image::sptr image)
+{
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    std::transform (spacing.begin(), spacing.end(), spacing.begin(), tolerance);
+    image->setSpacing(spacing);
+}
+
+//------------------------------------------------------------------------------
+
+void WriterReaderTest::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void WriterReaderTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void WriterReaderTest::writeReadImageSeriesTest()
+{
+    ::fwTest::generator::Image::initRand();
+    ::fwMedData::ImageSeries::sptr imgSeries;
+    imgSeries = ::fwTest::generator::SeriesDB::createImageSeries();
+
+    const ::boost::filesystem::path PATH = ::fwTools::System::getTemporaryFolder() / "dicomTest";
+
+    ::boost::filesystem::create_directories( PATH );
+
+    ::fwGdcmIO::writer::Series::sptr writer = ::fwGdcmIO::writer::Series::New();
+    writer->setObject(imgSeries);
+    writer->setFolder(PATH);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    // load ImageSeries
+    ::fwMedData::SeriesDB::sptr sdb           = ::fwMedData::SeriesDB::New();
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(sdb);
+    reader->setFolder(PATH);
+
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    ::boost::filesystem::remove_all( PATH );
+
+    // check series
+    CPPUNIT_ASSERT_EQUAL(size_t(1), sdb->getContainer().size());
+
+    ::fwMedData::Series::sptr series         = sdb->getContainer().front();
+    ::fwMedData::ImageSeries::sptr imgseries = ::fwMedData::ImageSeries::dynamicCast(series);
+    ::fwData::Image::sptr image              = imgseries->getImage();
+    roundSpacing(image);
+
+    // FIXME : GDCM reader trim string values so this test cannot pass.
+//    CPPUNIT_ASSERT(::fwTest::helper::compare(imgSeries, sdb->getContainer().front()));
+}
+//------------------------------------------------------------------------------
+
+void WriterReaderTest::writeReadSeriesDBTest()
+{
+    ::fwTest::generator::Image::initRand();
+    ::fwMedData::SeriesDB::sptr seriesDB;
+    seriesDB = this->createSeriesDB();
+
+    const ::boost::filesystem::path PATH = ::fwTools::System::getTemporaryFolder() / "dicomTest";
+
+    ::boost::filesystem::create_directories( PATH );
+
+    ::fwGdcmIO::writer::SeriesDB::sptr writer = ::fwGdcmIO::writer::SeriesDB::New();
+    writer->setObject(seriesDB);
+    writer->setFolder(PATH);
+    CPPUNIT_ASSERT_NO_THROW(writer->write());
+
+    // load ImageSeries
+    ::fwMedData::SeriesDB::sptr sdb           = ::fwMedData::SeriesDB::New();
+    ::fwGdcmIO::reader::SeriesDB::sptr reader = ::fwGdcmIO::reader::SeriesDB::New();
+    reader->setObject(sdb);
+    reader->setFolder(PATH);
+
+    CPPUNIT_ASSERT_NO_THROW(reader->read());
+
+    ::boost::filesystem::remove_all( PATH );
+
+    // FIXME : GDCM reader trim string values so this test cannot pass.
+//    CPPUNIT_ASSERT(::fwTest::helper::compare(seriesDB, sdb));
+}
+
+//------------------------------------------------------------------------------
+
+::fwMedData::SeriesDB::sptr WriterReaderTest::createSeriesDB()
+{
+    //create SeriesDB
+    ::fwMedData::SeriesDB::sptr sdb            = ::fwMedData::SeriesDB::New();
+    ::fwMedData::ImageSeries::sptr imgSeries   = ::fwTest::generator::SeriesDB::createImageSeries();
+    ::fwMedData::ModelSeries::sptr modelSeries = ::fwTest::generator::SeriesDB::createModelSeries(1);
+
+    sdb->getContainer().push_back(imgSeries);
+    sdb->getContainer().push_back(modelSeries);
+
+    ::fwData::Image::sptr image = imgSeries->getImage();
+
+    // Add landmarks
+    ::fwDataTools::fieldHelper::MedicalImageHelpers::checkLandmarks(image);
+    ::fwData::PointList::sptr landmarks =
+        image->getField< ::fwData::PointList >( ::fwDataTools::fieldHelper::Image::m_imageLandmarksId);
+    ::fwData::Image::SpacingType spacing = image->getSpacing();
+    ::fwData::Image::OriginType origin   = image->getOrigin();
+    ::fwData::Point::sptr point          = ::fwData::Point::New(2.6 + origin[0],
+                                                                1.2 + origin[1],
+                                                                4.5 + origin[2]);
+    point->setField( ::fwDataTools::fieldHelper::Image::m_labelId, ::fwData::String::New("Label1") );
+    landmarks->getRefPoints().push_back(point);
+    ::fwData::Point::sptr point2 = ::fwData::Point::New(1.2 + origin[0],
+                                                        2.4 + origin[1],
+                                                        0.3 + origin[2]);
+    point2->setField( ::fwDataTools::fieldHelper::Image::m_labelId, ::fwData::String::New("Label2") );
+    landmarks->getRefPoints().push_back(point2);
+    ::fwData::Image::SizeType size = image->getSize();
+    ::fwData::Point::sptr point3   = ::fwData::Point::New(1.2 + origin[0],
+                                                          2.4 + origin[1],
+                                                          (size[2]-1) * spacing[2] + origin[2]);
+    point3->setField( ::fwDataTools::fieldHelper::Image::m_labelId, ::fwData::String::New("toto") );
+    landmarks->getRefPoints().push_back(point3);
+
+    // Add distance
+    ::fwData::PointList::sptr pl = ::fwData::PointList::New();
+    ::fwData::Point::sptr pt1    = ::fwData::Point::New(0., 0., 0.);
+    ::fwData::Point::sptr pt2    = ::fwData::Point::New((size[0]-1) * spacing[0],
+                                                        (size[1]-1) * spacing[1],
+                                                        (size[2]-1) * spacing[2]);
+    pl->getRefPoints().push_back( pt1 );
+    pl->getRefPoints().push_back( pt2 );
+
+    ::fwData::Vector::sptr vectDist;
+    vectDist = image->setDefaultField< ::fwData::Vector >(
+        ::fwDataTools::fieldHelper::Image::m_imageDistancesId, ::fwData::Vector::New());
+    vectDist->getContainer().push_back(pl);
+
+    image->setField("ShowLandmarks", ::fwData::Boolean::New(true));
+    image->setField("ShowDistances", ::fwData::Boolean::New(true));
+
+    // Update Reconstruction
+    ::fwData::Reconstruction::sptr rec = modelSeries->getReconstructionDB().front();
+    ::fwData::Mesh::sptr mesh          = rec->getMesh();
+    mesh->setPointColorsArray(::fwData::Array::sptr());
+    mesh->setCellColorsArray(::fwData::Array::sptr());
+    mesh->setCellNormalsArray(::fwData::Array::sptr());
+
+    // gdcm only manage ambient color in reconstruction
+    ::fwData::Material::sptr material = ::fwData::Material::New();
+    ::fwData::Color::sptr color       = ::fwTest::generator::Object::randomizeColor();
+    material->setDiffuse(color);
+    rec->setMaterial(material);
+    rec->setImage(::fwData::Image::sptr()); // not managed
+
+    modelSeries->setField("ShowReconstructions", ::fwData::Boolean::New(true));
+
+    return sdb;
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+} // namespace fwGdcmIO
diff --git a/SrcLib/io/fwItkIO/CMakeLists.txt b/SrcLib/io/fwItkIO/CMakeLists.txt
index 9540675..0536f7e 100644
--- a/SrcLib/io/fwItkIO/CMakeLists.txt
+++ b/SrcLib/io/fwItkIO/CMakeLists.txt
@@ -1,49 +1,45 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwCore
-    fwData
-    fwDataIO
-    fwTools
-)
-
-
 
-find_package(Boost COMPONENTS filesystem REQUIRED)
 find_package(ITK REQUIRED)
-find_package(GDCM REQUIRED)
-include(${GDCM_USE_FILE})
-
+find_package(JPEG REQUIRED)
+find_package(ZLIB REQUIRED )
 
 find_library(VGL_ALGO_LIBRARY   vgl_algo )
 find_library(VNL_ALGO_LIBRARY   vnl_algo )
 find_library(VNL_LIBRARY        vnl )
 find_library(VCL_LIBRARY        vcl )
 find_library(V3P_NETLIB_LIBRARY v3p_netlib )
-find_path( VNL_INCLUDE_PATH  vxl/core/vnl/vnl_alloc.h)
+find_library(JPEG_LIBRARY libjpeg)
+find_path(VNL_INCLUDE_PATH  vxl/core/vnl/vnl_alloc.h)
 
+fwInclude(${ZLIB_INCLUDE_DIRS})
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS}
     ${ITK_INCLUDE_DIRS}
     ${VNL_INCLUDE_PATH}
     ${VNL_INCLUDE_PATH}/vxl
     ${VNL_INCLUDE_PATH}/vxl/core
     ${VNL_INCLUDE_PATH}/vxl/vcl
-    )
+)
+
 fwLink(
-    ${Boost_LIBRARIES} 
-    ITKCommon
-    ITKIO
-    ITKMetaIO
-    ITKznz
-    itksys
-    ${ITKIO_LIB_DEPENDS}
+    ${ZLIB_LIBRARIES}
+    ${JPEG_LIBRARY}
+)
 
-    ${VGL_ALGO_LIBRARY}
-    ${VNL_ALGO_LIBRARY}
+# Since ITK is template-based, this make sense to force the link for dependencies
+fwForwardLink(
     ${VNL_LIBRARY}
+    ${VNL_ALGO_LIBRARY}
+    ${VCL_LIBRARY}
+    ${VGL_ALGO_LIBRARY}
     ${V3P_NETLIB_LIBRARY}
-    gdcmMSFF
-    )
+
+    ITKCommon
+    ITKIOImageBase
+    ITKIOJPEG
+    ITKMetaIO
+    itksys
+    itkopenjpeg
+)
 
diff --git a/SrcLib/io/fwItkIO/Properties.cmake b/SrcLib/io/fwItkIO/Properties.cmake
index 581fad9..ce2e158 100644
--- a/SrcLib/io/fwItkIO/Properties.cmake
+++ b/SrcLib/io/fwItkIO/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwItkIO )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwCore fwData fwDataIO fwTools )
+set( DEPENDENCIES fwCore fwData fwDataIO fwTools )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwItkIO/bin/build.options b/SrcLib/io/fwItkIO/bin/build.options
deleted file mode 100644
index 46ccb3b..0000000
--- a/SrcLib/io/fwItkIO/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE='shared'
-LIB = ['fwData_0-1','fwCore_0-1','fwDataIO_0-2','fwTools_0-1','fwComEd_0-1']
-VERSION = '0-1'
-USE = [
-      'boost', 
-      'boostFilesystem',
-      'itkIO',
-      'gdcmMSFF'
-      ]
-
-
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/ImageIOFactoryRegistrar.hxx b/SrcLib/io/fwItkIO/include/fwItkIO/ImageIOFactoryRegistrar.hxx
index 810cab1..e4c2208 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/ImageIOFactoryRegistrar.hxx
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/ImageIOFactoryRegistrar.hxx
@@ -1,12 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include "itkObjectFactoryBase.h"
 
+#ifndef __FWITKIO_IMAGEIOFACTORYREGISTRAR_HXX__
+#define __FWITKIO_IMAGEIOFACTORYREGISTRAR_HXX__
 
+#include <itkObjectFactoryBase.h>
 
 namespace fwItkIO
 {
@@ -33,4 +35,7 @@ public:
  * @brief a macro helper to register an imageIOFactory
  * @note to be declared outside any namespace
  */
-#define REGISTER_IMAGEIOFACTORY( ConcreteImageIOFactory )   static ::fwItkIO::ImageIOFactoryRegistrar< ConcreteImageIOFactory > registrar;
+#define REGISTER_IMAGEIOFACTORY( ConcreteImageIOFactory )   static ::fwItkIO::ImageIOFactoryRegistrar< \
+        ConcreteImageIOFactory > registrar;
+
+#endif //__FWITKIO_IMAGEIOFACTORYREGISTRAR_HXX__
\ No newline at end of file
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/ImageReader.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/ImageReader.hpp
index 3d008be..ba8188a 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/ImageReader.hpp
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/ImageReader.hpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_IMAGEREADER_HPP_
-#define _FWITKIO_IMAGEREADER_HPP_
-
-#include <boost/filesystem/path.hpp>
+#ifndef __FWITKIO_IMAGEREADER_HPP__
+#define __FWITKIO_IMAGEREADER_HPP__
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -25,11 +23,11 @@ class ImageReader : public ::fwDataIO::reader::GenericObjectReader< ::fwData::Im
                     public ::fwTools::ProgressAdviser
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ImageReader)(::fwDataIO::reader::GenericObjectReader< ::fwData::Image>),
-                                            (()),
-                                            ::fwDataIO::reader::factory::New< ImageReader >
+                                           (()),
+                                           ::fwDataIO::reader::factory::New< ImageReader >
                                            );
     fwCoreAllowSharedFromThis();
 
@@ -42,4 +40,4 @@ public :
 
 } // namespace fwItkIO
 
-#endif // _FWITKIO_IMAGEREADER_HPP_
+#endif // __FWITKIO_IMAGEREADER_HPP__
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/ImageWriter.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/ImageWriter.hpp
index f8965b9..5bf91e6 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/ImageWriter.hpp
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/ImageWriter.hpp
@@ -1,13 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_IMAGEWRITER_HPP_
-#define _FWITKIO_IMAGEWRITER_HPP_
-
-#include <boost/filesystem/path.hpp>
+#ifndef __FWITKIO_IMAGEWRITER_HPP__
+#define __FWITKIO_IMAGEWRITER_HPP__
 
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/SingleFile.hpp>
@@ -24,11 +22,11 @@ class ImageWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwData::Im
                     public ::fwTools::ProgressAdviser
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image>),
-                                            (()),
-                                            ::fwDataIO::writer::factory::New< ImageWriter >
+                                           (()),
+                                           ::fwDataIO::writer::factory::New< ImageWriter >
                                            );
     fwCoreAllowSharedFromThis();
 
@@ -43,4 +41,4 @@ public :
 
 } // namespace fwItkIO
 
-#endif // _FWITKIO_IMAGEWRITER_HPP_
+#endif // __FWITKIO_IMAGEWRITER_HPP__
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/JpgImageWriter.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/JpgImageWriter.hpp
index befa4db..00b67d0 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/JpgImageWriter.hpp
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/JpgImageWriter.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_JPGIMAGEWRITER_HPP_
-#define _FWITKIO_JPGIMAGEWRITER_HPP_
+#ifndef __FWITKIO_JPGIMAGEWRITER_HPP__
+#define __FWITKIO_JPGIMAGEWRITER_HPP__
 
 #include <boost/filesystem/path.hpp>
 
@@ -24,12 +24,12 @@ class JpgImageWriter :  public ::fwDataIO::writer::GenericObjectWriter< ::fwData
                         public ::fwTools::ProgressAdviser
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((JpgImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image>),
                                            (()),
                                            ::fwDataIO::writer::factory::New< JpgImageWriter >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     FWITKIO_API JpgImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
@@ -43,4 +43,4 @@ public :
 
 } // namespace fwItkIO
 
-#endif // _FWITKIO_JPGIMAGEWRITER_HPP_
+#endif // __FWITKIO_JPGIMAGEWRITER_HPP__
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/config.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/config.hpp
deleted file mode 100644
index 05f23ee..0000000
--- a/SrcLib/io/fwItkIO/include/fwItkIO/config.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWITKIO_CONFIG_HPP_
-#define _FWITKIO_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWITKIO_EXPORTS
-    #define FWITKIO_API __declspec(dllexport)
-    #else
-    #define FWITKIO_API __declspec(dllimport)
-    #endif
-
-    #define FWITKIO_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWITKIO_EXPORTS
-    #define FWITKIO_API __attribute__ ((visibility("default")))
-    #define FWITKIO_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    #define FWITKIO_API __attribute__ ((visibility("hidden")))
-    #define FWITKIO_CLASS_API __attribute__ ((visibility("hidden")))
-    #endif
-
-#else
-
-    #define FWITKIO_API
-    #define FWITKIO_CLASS_API
-
-#endif
-
-#endif //FWITKIO_API
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hpp
index 4877a21..92451a7 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hpp
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _ITKIO_PROGESSITKTOFW_HPP_
-#define _ITKIO_PROGESSITKTOFW_HPP_
+#ifndef __FWITKIO_HELPER_PROGRESSITKTOFW_HPP__
+#define __FWITKIO_HELPER_PROGRESSITKTOFW_HPP__
 
 #include <itkCommand.h>
 #include <itkProcessObject.h>
@@ -20,7 +20,7 @@ namespace fwItkIO
 class ProgressorBase
 {
 public:
-    typedef SPTR(ProgressorBase) sptr;
+    typedef SPTR (ProgressorBase) sptr;
 };
 
 //------------------------------------------------------------------------------
@@ -29,11 +29,11 @@ template< typename OBSERVEE >
 class ProgressItkToFw : public ProgressorBase
 {
 public:
-    ProgressItkToFw(OBSERVEE observee, SPTR(::fwTools::ProgressAdviser) observer, std::string msg);
+    ProgressItkToFw(OBSERVEE observee, SPTR(::fwTools::ProgressAdviser)observer, std::string msg);
 
     virtual ~ProgressItkToFw();
 
-protected :
+protected:
 
     OBSERVEE m_observee;
     // observertag used by itk
@@ -45,16 +45,16 @@ protected :
 
 class Progressor
 {
-    public:
-    typedef SPTR(Progressor) sptr;
+public:
+    typedef SPTR (Progressor) sptr;
 
     template<typename OBS >
-    Progressor(OBS filter, SPTR(::fwTools::ProgressAdviser) observer, std::string message)
+    Progressor(OBS filter, SPTR(::fwTools::ProgressAdviser)observer, std::string message)
     {
         typedef ProgressItkToFw< OBS > ProgressType;
         m_progressor = ProgressorBase::sptr(
-                new ProgressType( filter, observer, message )
-                );
+            new ProgressType( filter, observer, message )
+            );
     }
 
     ProgressorBase::sptr m_progressor;
@@ -62,7 +62,6 @@ class Progressor
 
 }
 
-
 #include "fwItkIO/helper/ProgressItkToFw.hxx"
 
-#endif /* _ITKIO_PROGESSITKTOFW_HPP_ */
+#endif /* __FWITKIO_HELPER_PROGRESSITKTOFW_HPP__ */
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hxx b/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hxx
index 7f7f54b..379dfcb 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hxx
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/helper/ProgressItkToFw.hxx
@@ -1,9 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWITKIO_HELPER_PROGRESSITKTOFW_HXX__
+#define __FWITKIO_HELPER_PROGRESSITKTOFW_HXX__
+
 #include <limits>
 #include <sstream>
 
@@ -21,7 +24,9 @@ class LocalCommand : public itk::Command
 {
 public:
 
-    LocalCommand() {};
+    LocalCommand()
+    {
+    }
 
     typedef LocalCommand Self;
     typedef itk::SmartPointer<LocalCommand>      Pointer;
@@ -30,10 +35,13 @@ public:
     void Execute(itk::Object *caller, const itk::EventObject &event)
     {
         itk::LightProcessObject* po = dynamic_cast<itk::LightProcessObject*>(caller);
-        if( !po ) return;
+        if( !po )
+        {
+            return;
+        }
         float percent = po->GetProgress();
-        OSLM_TRACE("LocalCommand::Execute" << m_msg << " " << percent );
-        m_adviser->notifyProgress( percent , m_msg );
+        OSLM_TRACE("LocalCommand::Execute '" << m_msg << "' " << percent );
+        m_adviser->notifyProgress( percent, m_msg );
     }
 
     void Execute(const itk::Object *caller, const itk::EventObject &event)
@@ -49,15 +57,16 @@ public:
 //------------------------------------------------------------------------------
 
 template<typename OBSERVEE >
-ProgressItkToFw<OBSERVEE >::ProgressItkToFw(OBSERVEE observee, SPTR(::fwTools::ProgressAdviser) observer, std::string msg)
-: m_observee( observee), m_obsTag(std::numeric_limits<unsigned long>::max()), m_initialized(false)
+ProgressItkToFw<OBSERVEE >::ProgressItkToFw(OBSERVEE observee, SPTR(::fwTools::ProgressAdviser)observer,
+                                            std::string msg)
+    : m_observee( observee), m_obsTag(std::numeric_limits<unsigned long>::max()), m_initialized(false)
 {
     typename LocalCommand::Pointer itkCallBack;
-    itkCallBack = LocalCommand::New();
-    itkCallBack->m_msg = msg;
+    itkCallBack            = LocalCommand::New();
+    itkCallBack->m_msg     = msg;
     itkCallBack->m_adviser = observer;
-    m_obsTag = m_observee->AddObserver(itk::ProgressEvent(), itkCallBack );
-    m_initialized = true;
+    m_obsTag               = m_observee->AddObserver(itk::ProgressEvent(), itkCallBack );
+    m_initialized          = true;
 }
 
 //------------------------------------------------------------------------------
@@ -73,3 +82,4 @@ ProgressItkToFw<OBSERVEE >::~ProgressItkToFw()
 
 }
 
+#endif // __FWITKIO_HELPER_PROGRESSITKTOFW_HXX__
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/itk.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/itk.hpp
index ce0c8cd..65109f0 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/itk.hpp
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/itk.hpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_ITK_HPP_
-#define _FWITKIO_ITK_HPP_
+#ifndef __FWITKIO_ITK_HPP__
+#define __FWITKIO_ITK_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Image.hpp>
 
@@ -36,7 +35,8 @@ template< class ITKIMAGE>
  * ::fwData::Image does not manage the image buffer.
  */
 template< class ITKIMAGE>
-void dataImageFactory( typename ITKIMAGE::Pointer itkImage , ::fwData::Image::sptr _dataImage,  bool bufferManagerIsDataImage = true );
+void dataImageFactory( typename ITKIMAGE::Pointer itkImage, ::fwData::Image::sptr _dataImage,
+                       bool bufferManagerIsDataImage = true );
 
 /**
  * @brief Create an ITK image from an ::fwData::Image.
@@ -50,10 +50,10 @@ void dataImageFactory( typename ITKIMAGE::Pointer itkImage , ::fwData::Image::sp
  * @pre an assertion check if ITKIMAGE dimension correspond to imageData dimension
  */
 template< class ITKIMAGE>
-typename ITKIMAGE::Pointer itkImageFactory( ::fwData::Image::sptr imageData, bool bufferManagerIsDataImage = true );
+typename ITKIMAGE::Pointer itkImageFactory( ::fwData::Image::csptr imageData, bool bufferManagerIsDataImage = true );
 
 }
 
 #include "fwItkIO/itk.hxx"
 
-#endif // _FWITKIO_ITK_HPP_
+#endif // __FWITKIO_ITK_HPP__
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx b/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx
index 38cfd9a..3827b63 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/itk.hxx
@@ -1,39 +1,42 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <assert.h>
+#ifndef __FWITKIO_ITK_HXX__
+#define __FWITKIO_ITK_HXX__
 
-#include <itkImage.h>
-#include <itkImageRegion.h>
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/ImageGetter.hpp>
 
 #include <fwTools/DynamicType.hpp>
 
-#include <fwComEd/helper/Image.hpp>
-#include <fwComEd/helper/Array.hpp>
+#include <assert.h>
+#include <itkImage.h>
+#include <itkImageRegion.h>
 
 namespace fwItkIO
 {
 
 template< class ITKIMAGE>
-void dataImageFactory( typename ITKIMAGE::Pointer itkImage , ::fwData::Image::sptr _dataImage, bool bufferManagerIsDataImage )
+void dataImageFactory( typename ITKIMAGE::Pointer itkImage, ::fwData::Image::sptr _dataImage,
+                       bool bufferManagerIsDataImage )
 {
     SLM_ASSERT("_dataImage not instanced", _dataImage);
 
 
     // Add by arnaud
-    ::boost::uint8_t  dim = ITKIMAGE::ImageDimension;
+    ::boost::uint8_t dim = ITKIMAGE::ImageDimension;
     ::fwData::Image::SpacingType _vSpacing(dim,1);
     ::fwData::Image::OriginType _vOrigin(dim,0);
-    ::fwData::Image::SizeType  _vSize(dim,0);
+    ::fwData::Image::SizeType _vSize(dim,0);
 
-    for (boost::uint8_t  d=0; d<dim; ++d)
+    for (boost::uint8_t d = 0; d<dim; ++d)
     {
         // _vOrigin[d] = itkImage->GetBufferedRegion().GetIndex()[d];
-        _vOrigin[d] = itkImage->GetOrigin()[d];
-        _vSize[d] = itkImage->GetBufferedRegion().GetSize()[d];
+        _vOrigin[d]  = itkImage->GetOrigin()[d];
+        _vSize[d]    = itkImage->GetBufferedRegion().GetSize()[d];
         _vSpacing[d] = itkImage->GetSpacing()[d];
     }
 
@@ -44,17 +47,20 @@ void dataImageFactory( typename ITKIMAGE::Pointer itkImage , ::fwData::Image::sp
     typedef typename ITKIMAGE::PixelType PixelType;
     _dataImage->setType( ::fwTools::Type::create<PixelType>() );
     ::fwData::Array::sptr array = _dataImage->getDataArray();
-    ::fwComEd::helper::Array arrayHelper(array);
+    ::fwDataTools::helper::Array arrayHelper(array);
     if( bufferManagerIsDataImage )
     {
-        SLM_ASSERT("Sorry, this method requires that itkImage manages its buffer.",  itkImage->GetPixelContainer()->GetContainerManageMemory() );
-        arrayHelper.setBuffer( static_cast<void *>(itkImage->GetBufferPointer()), true, _dataImage->getType(), _vSize, 1 );
+        SLM_ASSERT("Sorry, this method requires that itkImage manages its buffer.",
+                   itkImage->GetPixelContainer()->GetContainerManageMemory() );
+        arrayHelper.setBuffer( static_cast<void*>(itkImage->GetBufferPointer()), true, _dataImage->getType(), _vSize,
+                               1 );
         /// itk image release its management buffer. dataImage must now deal memory
         itkImage->GetPixelContainer()->SetContainerManageMemory( false );
     }
     else
     {
-        arrayHelper.setBuffer( static_cast<void *>(itkImage->GetBufferPointer()), false, _dataImage->getType(), _vSize, 1 );
+        arrayHelper.setBuffer( static_cast<void*>(itkImage->GetBufferPointer()), false,
+                               _dataImage->getType(), _vSize, 1 );
     }
 
 
@@ -68,14 +74,14 @@ template< class ITKIMAGE>
 ::fwData::Image::sptr dataImageFactory( typename ITKIMAGE::Pointer itkImage, bool bufferManagerIsDataImage )
 {
     ::fwData::Image::sptr data = ::fwData::Image::New();
-    ::fwItkIO::dataImageFactory< ITKIMAGE >(itkImage,data, bufferManagerIsDataImage) ;
+    ::fwItkIO::dataImageFactory< ITKIMAGE >(itkImage,data, bufferManagerIsDataImage);
     return data;
 }
 
 //------------------------------------------------------------------------------
 
 template< class ITKIMAGE_PTR >
-void itkImageToFwDataImage( ITKIMAGE_PTR itkImage , ::fwData::Image::sptr _dataImage )
+void itkImageToFwDataImage( ITKIMAGE_PTR itkImage, ::fwData::Image::sptr _dataImage )
 {
     dataImageFactory< typename ITKIMAGE_PTR::ObjectType >(itkImage, _dataImage);
 }
@@ -83,18 +89,19 @@ void itkImageToFwDataImage( ITKIMAGE_PTR itkImage , ::fwData::Image::sptr _dataI
 //------------------------------------------------------------------------------
 
 template< class ITKIMAGE>
-typename ITKIMAGE::Pointer fwDataImageToItkImage( ::fwData::Image::sptr imageData, bool bufferManagerIsDataImage )
+typename ITKIMAGE::Pointer fwDataImageToItkImage( ::fwData::Image::csptr imageData, bool bufferManagerIsDataImage )
 {
     // Pre Condition
-    SLM_ASSERT("Sorry, itk image dimension not correspond to fwData image", imageData->getNumberOfDimensions() == ITKIMAGE::ImageDimension );
+    SLM_ASSERT("Sorry, itk image dimension not correspond to fwData image",
+               imageData->getNumberOfDimensions() == ITKIMAGE::ImageDimension );
 
-    ::fwComEd::helper::Image imageHelper(imageData);
+    ::fwDataTools::helper::ImageGetter imageHelper(imageData);
 
-    typename ITKIMAGE::Pointer itkImage=ITKIMAGE::New();
+    typename ITKIMAGE::Pointer itkImage = ITKIMAGE::New();
 
     // update spacing information ; workaround due to GetSpacing const
     typename ITKIMAGE::SpacingType spacing = itkImage->GetSpacing();
-    for (boost::uint8_t  d=0; d<ITKIMAGE::ImageDimension; ++d)
+    for (boost::uint8_t d = 0; d<ITKIMAGE::ImageDimension; ++d)
     {
         spacing[d] = imageData->getSpacing()[d];
     }
@@ -103,29 +110,34 @@ typename ITKIMAGE::Pointer fwDataImageToItkImage( ::fwData::Image::sptr imageDat
     // update origin information ; workaround due to GetOrigin const
     std::copy(   imageData->getOrigin().begin(),
                  imageData->getOrigin().end(),
-                 const_cast< typename ITKIMAGE::PointType * >( &itkImage->GetOrigin())->Begin()
-             );
+                 const_cast< typename ITKIMAGE::PointType* >( &itkImage->GetOrigin())->Begin()
+                 );
 
     itk::ImageRegion< ITKIMAGE::ImageDimension > itkRegion;
 
-    unsigned long nbpixels=1;
-    for (::boost::uint8_t  d=0; d<ITKIMAGE::ImageDimension; ++d)
+    unsigned long nbpixels = 1;
+    for (::boost::uint8_t d = 0; d<ITKIMAGE::ImageDimension; ++d)
     {
         // itkRegion.SetIndex( d,  static_cast<int>(imageData->getCRefOrigin()[d]) );
         itkRegion.SetSize( d,   static_cast<unsigned long>(imageData->getSize()[d]) );
-        nbpixels *= itkRegion.GetSize()[d];;
+        nbpixels *= itkRegion.GetSize()[d];
     }
 
     itkImage->SetRegions(itkRegion);
 
     if( bufferManagerIsDataImage )
     {
-        itkImage->GetPixelContainer()->SetImportPointer(static_cast< typename ITKIMAGE::PixelType *>( imageHelper.getBuffer() ) , nbpixels , false );
+        itkImage->GetPixelContainer()->SetImportPointer(static_cast< typename ITKIMAGE::PixelType*>( imageHelper.
+                                                                                                     getBuffer() ), nbpixels,
+                                                        false );
     }
     else
     {
-        SLM_ASSERT("Sorry, this method requires that imageData manages its buffer.",   imageData->getDataArray()->getIsBufferOwner() );
-        itkImage->GetPixelContainer()->SetImportPointer(static_cast< typename ITKIMAGE::PixelType *>( imageHelper.getBuffer() ) , nbpixels , true );
+        SLM_ASSERT("Sorry, this method requires that imageData manages its buffer.",
+                   imageData->getDataArray()->getIsBufferOwner() );
+        itkImage->GetPixelContainer()->SetImportPointer(static_cast< typename ITKIMAGE::PixelType*>( imageHelper.
+                                                                                                     getBuffer() ), nbpixels,
+                                                        true );
         imageData->getDataArray()->setIsBufferOwner( false );
     }
 
@@ -135,7 +147,7 @@ typename ITKIMAGE::Pointer fwDataImageToItkImage( ::fwData::Image::sptr imageDat
 //------------------------------------------------------------------------------
 
 template< class ITKIMAGE>
-typename ITKIMAGE::Pointer itkImageFactory( ::fwData::Image::sptr imageData, bool bufferManagerIsDataImage )
+typename ITKIMAGE::Pointer itkImageFactory( ::fwData::Image::csptr imageData, bool bufferManagerIsDataImage )
 {
     return fwDataImageToItkImage<ITKIMAGE>( imageData, bufferManagerIsDataImage );
 }
@@ -144,4 +156,5 @@ typename ITKIMAGE::Pointer itkImageFactory( ::fwData::Image::sptr imageData, boo
 
 } // end namespace
 
+#endif // __FWITKIO_ITK_HXX__
 
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hpp
deleted file mode 100644
index 0c111dd..0000000
--- a/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWITKIO_ITKPP_HPP_
-#define _FWITKIO_ITKPP_HPP_
-
-#include <boost/shared_ptr.hpp>
-
-#include <itkpp/MaskScanner.h>
-#include <itkpp/ImageWithScanner.h>
-#include <itkpp/ImageToImageFilterForImageWithScanner.h>
-#include <itkpp/ImageWithScannerIteratorCollection.h>
-
-#include <fwData/Image.hpp>
-
-#include "fwItkIO/config.hpp"
-
-namespace fwItkIO
-{
-
-
-/*
- * Create an image with scanner
- * ITKIMAGE template parameter must be instantiated with itk::Image< PIXELTYPE , VDIM > and not with itk::ImageWithScanner< PIXELTYPE , VDIM >,
- * otherwise the cast filter will wait for
-*/
-template< class PIXELTYPE , int VDimension , class ScannerType >
-typename ScannerType::Pointer  itkppScannerFactory( ::fwData::Image::sptr imageData);
-
-}
-
-#include "fwItkIO/itkpp.hxx"
-
-#endif // _FWITKIO_ITKPP_HPP_
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx b/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx
index 9f2ae3e..989c44d 100644
--- a/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/itkpp.hxx
@@ -1,9 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWITKIO_ITKPP_HXX__
+#define __FWITKIO_ITKPP_HXX__
+
 #include <fwTools/DynamicType.hpp>
 
 #include <assert.h>
@@ -15,27 +18,26 @@
 namespace fwItkIO
 {
 
-template< class PIXELTYPE , int VDimension , class ScannerType >
+template< class PIXELTYPE, int VDimension, class ScannerType >
 typename ScannerType::Pointer  itkppScannerFactory( ::fwData::Image::sptr imageData)
 {
-    typedef itk::Image< PIXELTYPE , VDimension >    ImageType;
+    typedef itk::Image< PIXELTYPE, VDimension >    ImageType;
 
-    typename ImageType::Pointer itkRoi = ::fwItkIO::itkImageFactory< ImageType >( imageData ) ;
-    typedef itk::Image< unsigned char , VDimension  >   ROIType;
-    typedef itk::CastImageFilter< ImageType , ROIType  >        CasterType;
-    typename CasterType::Pointer caster = CasterType::New() ;
-    caster->SetInput( itkRoi ) ;
-    caster->Update() ;
+    typename ImageType::Pointer itkRoi = ::fwItkIO::itkImageFactory< ImageType >( imageData );
+    typedef itk::Image< unsigned char, VDimension  >   ROIType;
+    typedef itk::CastImageFilter< ImageType, ROIType  >        CasterType;
+    typename CasterType::Pointer caster = CasterType::New();
+    caster->SetInput( itkRoi );
+    caster->Update();
 
     typename ScannerType::Pointer scanner = ScannerType::New();
-    typename ROIType::Pointer outImg = caster->GetOutput();
+    typename ROIType::Pointer outImg      = caster->GetOutput();
     scanner->SetMaskImage( outImg );
     outImg->DisconnectPipeline();
 
-    return scanner ;
+    return scanner;
 }
 
-
 } // end namespace
 
-
+#endif // __FWITKIO_ITKPP_HXX__
diff --git a/SrcLib/io/fwItkIO/include/fwItkIO/namespace.hpp b/SrcLib/io/fwItkIO/include/fwItkIO/namespace.hpp
new file mode 100644
index 0000000..0a24305
--- /dev/null
+++ b/SrcLib/io/fwItkIO/include/fwItkIO/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWITKIO_NAMESPACE_HPP__
+#define __FWITKIO_NAMESPACE_HPP__
+
+/**
+ * @brief The namespace fwItkIO contains reader, writer and helper for itk image.
+ * @namespace fwItkIO
+ **/
+
+namespace fwItkIO
+{
+
+} // namespace fwItkIO
+
+#endif // __FWITKIO_NAMESPACE_HPP__
diff --git a/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.h b/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.h
deleted file mode 100644
index 84a21bf..0000000
--- a/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef itk_InrImageIO_h
-#define itk_InrImageIO_h
-
-#include <fstream>
-#include "itkImageIOBase.h"
-
-#include "fwItkIO/config.hpp"
-
-namespace itk
-{
-
-/**
- * \ingroup IOFilters
- * \author R&D team
- * \brief Class that defines how to read/write in the InrImage file format.
- * @todo RGB and vector images.
- */
-class FWITKIO_CLASS_API InrImageIO : public ImageIOBase
-{
-public :
-    /** Standard typedef's */
-    typedef InrImageIO Self;
-    typedef ImageIOBase SuperClass;
-    typedef SmartPointer<Self> Pointer;
-    
-    /** Method for creation through the object factory. */
-    itkNewMacro(Self);
-
-    /** Run-time type information (and related methods). */
-    itkTypeMacro(InrImageIO, Superclass);
-    
-    /*-------- This part of the interfaces deals with reading data. ----- */
-    
-    /** Determine if the file can be read with this ImageIO implementation.
-     * \param FileNameToRead The name of the file to test for reading.
-     * \post Sets classes ImageIOBase::m_FileName variable to be FileNameToWrite
-     * \return Returns true if this ImageIO can read the file specified.
-     */
-    virtual bool CanReadFile(const char* FileNameToRead);
-    
-    /** Set the spacing and dimension information for the set filename. */
-    virtual void ReadImageInformation();
-    
-    /** Reads the data from disk into the memory buffer provided. */
-    virtual void Read(void* buffer);
-    
-    /*-------- This part of the interfaces deals with writing data. ----- */
-
-    /** Determine if the file can be written with this ImageIO implementation.
-     * \param FileNameToWrite The name of the file to test for writing.
-     * \post Sets classes ImageIOBase::m_FileName variable to be FileNameToWrite
-     * \return Returns true if this ImageIO can write the file specified.
-     */
-    virtual bool CanWriteFile(const char * FileNameToWrite);
-
-    /** Set the spacing and dimension information for the set filename. */
-    virtual void WriteImageInformation();
-
-    /** Writes the data to disk from the memory buffer provided. Make sure
-     * that the IORegions has been set properly. */
-    virtual void Write(const void* buffer);
-    
-protected:
-    FWITKIO_API InrImageIO();
-    FWITKIO_API ~InrImageIO();
-    void PrintSelf(std::ostream& os, Indent indent) const;
-private:
-    InrImageIO(const Self&); //purposely not implemented
-    void operator=(const Self&); //purposely not implemented
-    
-    std::streampos m_headerSize;
-    //bool m_swapBytes;
-}; // class InrImageIO()
-
-} // namespace itk
-
-#endif // itk_InrImageIO_h
diff --git a/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.hpp b/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.hpp
new file mode 100644
index 0000000..72582a0
--- /dev/null
+++ b/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIO.hpp
@@ -0,0 +1,83 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __INR2ITK_ITKINRIMAGEIO_HPP__
+#define __INR2ITK_ITKINRIMAGEIO_HPP__
+
+#include <fstream>
+#include <itkImageIOBase.h>
+
+#include "fwItkIO/config.hpp"
+
+namespace itk
+{
+
+/**
+ * \ingroup IOFilters
+ * \author R&D team
+ * \brief Class that defines how to read/write in the InrImage file format.
+ * @todo RGB and vector images.
+ */
+class FWITKIO_CLASS_API InrImageIO : public ImageIOBase
+{
+public:
+    /** Standard typedef's */
+    typedef InrImageIO Self;
+    typedef ImageIOBase SuperClass;
+    typedef SmartPointer<Self> Pointer;
+
+    /** Method for creation through the object factory. */
+    itkNewMacro(Self);
+
+    /** Run-time type information (and related methods). */
+    itkTypeMacro(InrImageIO, Superclass);
+
+    /*-------- This part of the interfaces deals with reading data. ----- */
+
+    /** Determine if the file can be read with this ImageIO implementation.
+     * \param FileNameToRead The name of the file to test for reading.
+     * \post Sets classes ImageIOBase::m_FileName variable to be FileNameToWrite
+     * \return Returns true if this ImageIO can read the file specified.
+     */
+    virtual bool CanReadFile(const char* FileNameToRead);
+
+    /** Set the spacing and dimension information for the set filename. */
+    virtual void ReadImageInformation();
+
+    /** Reads the data from disk into the memory buffer provided. */
+    virtual void Read(void* buffer);
+
+    /*-------- This part of the interfaces deals with writing data. ----- */
+
+    /** Determine if the file can be written with this ImageIO implementation.
+     * \param FileNameToWrite The name of the file to test for writing.
+     * \post Sets classes ImageIOBase::m_FileName variable to be FileNameToWrite
+     * \return Returns true if this ImageIO can write the file specified.
+     */
+    virtual bool CanWriteFile(const char * FileNameToWrite);
+
+    /** Set the spacing and dimension information for the set filename. */
+    virtual void WriteImageInformation();
+
+    /** Writes the data to disk from the memory buffer provided. Make sure
+     * that the IORegions has been set properly. */
+    virtual void Write(const void* buffer);
+
+protected:
+    FWITKIO_API InrImageIO();
+    FWITKIO_API ~InrImageIO();
+    void PrintSelf(std::ostream& os, Indent indent) const;
+private:
+    InrImageIO(const Self&); //purposely not implemented
+    void operator=(const Self&); //purposely not implemented
+
+    std::streampos m_headerSize;
+    //bool m_swapBytes;
+}; // class InrImageIO()
+
+} // namespace itk
+
+#endif // __INR2ITK_ITKINRIMAGEIO_HPP__
diff --git a/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIOFactory.h b/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIOFactory.h
deleted file mode 100644
index 13f974c..0000000
--- a/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIOFactory.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef itk_InrImageIOFactory_h
-#define itk_InrImageIOFactory_h
-
-#include "itkObjectFactoryBase.h"
-#include "itkImageIOBase.h"
-
-namespace itk
-{
-/** 
- * \class InrImageIOFactory
- * \brief Create instances of InrImageIO objects using an object factory.
- */
-class ITK_EXPORT InrImageIOFactory : public ObjectFactoryBase
-{
-public:
-  /** Standard class typedefs. */
-    typedef InrImageIOFactory   Self;
-    typedef ObjectFactoryBase  Superclass;
-    typedef SmartPointer<Self>  Pointer;
-    typedef SmartPointer<const Self>  ConstPointer;
-
-    /** Class methods used to interface with the registered factories. */
-    virtual const char* GetITKSourceVersion(void) const;
-    virtual const char* GetDescription(void) const;
-
-    /** Method for class instantiation. */
-    itkFactorylessNewMacro(Self);
-
-    /** Run-time type information (and related methods). */
-    itkTypeMacro(InrImageIOFactory, ObjectFactoryBase);
-
-    /** Register one factory of this type  */
-    static void RegisterOneFactory(void)
-    {
-        InrImageIOFactory::Pointer metaFactory = InrImageIOFactory::New();
-        ObjectFactoryBase::RegisterFactory(metaFactory);
-    }
-
-protected:
-    InrImageIOFactory();
-    ~InrImageIOFactory();
-    virtual void PrintSelf(std::ostream& os, Indent indent) const;
-
-private:
-    InrImageIOFactory(const Self&); //purposely not implemented
-    void operator=(const Self&); //purposely not implemented
-
-};
-
-
-} // end namespace itk
-
-
-#endif // itk_InrImageIOFactory_h
diff --git a/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIOFactory.hpp b/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIOFactory.hpp
new file mode 100644
index 0000000..0a55fce
--- /dev/null
+++ b/SrcLib/io/fwItkIO/include/inr2itk/itkInrImageIOFactory.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __INR2ITK_ITKINRIMAGEIOFACTORY_HPP__
+#define __INR2ITK_ITKINRIMAGEIOFACTORY_HPP__
+
+#include <itkObjectFactoryBase.h>
+#include <itkImageIOBase.h>
+
+namespace itk
+{
+/**
+ * \class InrImageIOFactory
+ * \brief Create instances of InrImageIO objects using an object factory.
+ */
+class ITK_EXPORT InrImageIOFactory : public ObjectFactoryBase
+{
+public:
+    /** Standard class typedefs. */
+    typedef InrImageIOFactory Self;
+    typedef ObjectFactoryBase Superclass;
+    typedef SmartPointer<Self>  Pointer;
+    typedef SmartPointer<const Self>  ConstPointer;
+
+    /** Class methods used to interface with the registered factories. */
+    virtual const char* GetITKSourceVersion(void) const;
+    virtual const char* GetDescription(void) const;
+
+    /** Method for class instantiation. */
+    itkFactorylessNewMacro(Self);
+
+    /** Run-time type information (and related methods). */
+    itkTypeMacro(InrImageIOFactory, ObjectFactoryBase);
+
+    /** Register one factory of this type  */
+    static void RegisterOneFactory(void)
+    {
+        InrImageIOFactory::Pointer metaFactory = InrImageIOFactory::New();
+        ObjectFactoryBase::RegisterFactory(metaFactory);
+    }
+
+protected:
+    InrImageIOFactory();
+    ~InrImageIOFactory();
+    virtual void PrintSelf(std::ostream& os, Indent indent) const;
+
+private:
+    InrImageIOFactory(const Self&); //purposely not implemented
+    void operator=(const Self&); //purposely not implemented
+
+};
+
+} // end namespace itk
+
+
+#endif // __INR2ITK_ITKINRIMAGEIOFACTORY_HPP__
diff --git a/SrcLib/io/fwItkIO/src/fwItkIO/ImageReader.cpp b/SrcLib/io/fwItkIO/src/fwItkIO/ImageReader.cpp
index fbfac36..a6ce1f4 100644
--- a/SrcLib/io/fwItkIO/src/fwItkIO/ImageReader.cpp
+++ b/SrcLib/io/fwItkIO/src/fwItkIO/ImageReader.cpp
@@ -1,19 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <boost/filesystem.hpp>
 
+#include <fwCore/base.hpp>
+
 #include <itkImageFileReader.h>
 #include <itkImageIOFactory.h>
 
-#include <fwCore/base.hpp>
-
 #include <fwData/Image.hpp>
-#include <fwItkIO/itk.hpp>
-
 
 #include <fwTools/IntrinsicTypes.hpp>
 #include <fwTools/Dispatcher.hpp>
@@ -21,8 +19,9 @@
 
 #include <fwDataIO/reader/registry/macros.hpp>
 
-#include "inr2itk/itkInrImageIOFactory.h"
+#include "inr2itk/itkInrImageIOFactory.hpp"
 
+#include "fwItkIO/itk.hpp"
 #include "fwItkIO/ImageReader.hpp"
 #include "fwItkIO/helper/ProgressItkToFw.hpp"
 
@@ -34,7 +33,8 @@ namespace fwItkIO
 
 //------------------------------------------------------------------------------
 
-ImageReader::ImageReader(::fwDataIO::reader::IObjectReader::Key key)  : ::fwData::location::enableSingleFile< IObjectReader >(this)
+ImageReader::ImageReader(::fwDataIO::reader::IObjectReader::Key key)  : ::fwData::location::enableSingleFile<
+                                                                            IObjectReader >(this)
 {
     SLM_TRACE_FUNC();
 }
@@ -52,22 +52,24 @@ struct ITKLoaderFunctor
 {
     struct Parameter
     {
-        ::fwData::Image::sptr       m_dataImage;
-        std::string                 m_filename;
-        ::fwItkIO::ImageReader::sptr  m_fwReader;
+        ::fwData::Image::sptr m_dataImage;
+        std::string m_filename;
+        ::fwItkIO::ImageReader::sptr m_fwReader;
     };
 
     template<class PIXELTYPE>
     void operator()(Parameter &param)
     {
-        OSLM_INFO( "::fwItkIO::ImageReader::ITKLoaderFunctor with PIXELTYPE "<<  ::fwTools::DynamicType::string<PIXELTYPE>() );
+        OSLM_INFO( "::fwItkIO::ImageReader::ITKLoaderFunctor with PIXELTYPE "<<
+                   ::fwTools::DynamicType::string<PIXELTYPE>() );
 
         // VAG attention : ImageFileReader ne notifie AUCUNE progressEvent mais son ImageIO oui!!!! mais ImageFileReader ne permet pas de l'atteindre
         // car soit mis a la mano ou alors construit lors de l'Update donc trop tard
         // Il faut dont creer une ImageIO a la mano (*1*): affecter l'observation  sur IO (*2*) et mettre le IO dans le reader (voir *3*)
 
         // Reader IO (*1*)
-        typename itk::ImageIOBase::Pointer imageIORead = itk::ImageIOFactory::CreateImageIO( param.m_filename.c_str(), itk::ImageIOFactory::ReadMode);
+        typename itk::ImageIOBase::Pointer imageIORead = itk::ImageIOFactory::CreateImageIO(
+            param.m_filename.c_str(), itk::ImageIOFactory::ReadMode);
 
         // set observation (*2*)
         Progressor progress(imageIORead, param.m_fwReader, param.m_filename);
@@ -88,12 +90,13 @@ struct ITKLoaderFunctor
     //// get pixel type from Header
     static const std::type_info& getImageType( const std::string &imageFileName )
     {
-        itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO(imageFileName.c_str(), itk::ImageIOFactory::ReadMode);
+        itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO(
+            imageFileName.c_str(), itk::ImageIOFactory::ReadMode);
 
         if( !imageIO )
         {
             std::string errMsg;
-            errMsg  = "no ImageIOFactory found to read header of file : ";
+            errMsg = "no ImageIOFactory found to read header of file : ";
             errMsg.append( imageFileName );
 
             throw( std::ios_base::failure( errMsg ) );
@@ -114,14 +117,14 @@ void ImageReader::read()
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
-    const std::type_info& ti    = ITKLoaderFunctor::getImageType( file.string() );
+    const std::type_info& ti = ITKLoaderFunctor::getImageType( file.string() );
 
     ITKLoaderFunctor::Parameter param;
-    param.m_filename =  file.string();
+    param.m_filename  = file.string();
     param.m_dataImage = this->getConcreteObject();
-    param.m_fwReader = this->getSptr();
+    param.m_fwReader  = this->getSptr();
 
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , ITKLoaderFunctor >::invoke(ti , param );
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, ITKLoaderFunctor >::invoke(ti, param );
 
     assert( m_object.lock() ); // verify that ::fwData::Image is well produced
     // Post Condition image with a pixel type
diff --git a/SrcLib/io/fwItkIO/src/fwItkIO/ImageWriter.cpp b/SrcLib/io/fwItkIO/src/fwItkIO/ImageWriter.cpp
index d71fa53..11c8c66 100644
--- a/SrcLib/io/fwItkIO/src/fwItkIO/ImageWriter.cpp
+++ b/SrcLib/io/fwItkIO/src/fwItkIO/ImageWriter.cpp
@@ -1,26 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 #include <boost/filesystem.hpp>
 
+#include <fwCore/base.hpp>
+
 #include <itkImageFileWriter.h>
 
 #include <fwTools/IntrinsicTypes.hpp>
 #include <fwTools/DynamicTypeKeyTypeMapping.hpp>
 #include <fwTools/Dispatcher.hpp>
-
-#include <fwItkIO/itk.hpp>
-
 #include <fwTools/IntrinsicTypes.hpp>
 #include <fwTools/DynamicTypeKeyTypeMapping.hpp>
 
-#include <fwCore/base.hpp>
-
 #include <fwDataIO/writer/registry/macros.hpp>
 
+#include "fwItkIO/itk.hpp"
 #include "fwItkIO/helper/ProgressItkToFw.hpp"
 #include "fwItkIO/ImageWriter.hpp"
 
@@ -33,7 +31,7 @@ namespace fwItkIO
 //------------------------------------------------------------------------------
 
 ImageWriter::ImageWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+    : ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
 {
     SLM_TRACE_FUNC();
 }
@@ -51,13 +49,13 @@ struct ITKSaverFunctor
 
     struct Parameter
     {
-        std::string                m_filename;
-        ::fwData::Image::sptr      m_dataImage;
+        std::string m_filename;
+        ::fwData::Image::sptr m_dataImage;
         ::fwItkIO::ImageWriter::sptr m_fwWriter;
     };
 
     template<class PIXELTYPE>
-    void operator()( const  Parameter &param )
+    void operator()( const Parameter &param )
     {
         OSLM_DEBUG( "itk::ImageFileWriter with PIXELTYPE "<<  fwTools::DynamicType::string<PIXELTYPE>() );
 
@@ -66,7 +64,8 @@ struct ITKSaverFunctor
         // Il faut dont creer une ImageIO a la mano (*1*): affecter l'observation  sur IO (*2*) et mettre le IO dans le reader (voir *3*)
 
         // Reader IO (*1*)
-        typename itk::ImageIOBase::Pointer imageIOWrite = itk::ImageIOFactory::CreateImageIO( param.m_filename.c_str(), itk::ImageIOFactory::WriteMode);
+        typename itk::ImageIOBase::Pointer imageIOWrite = itk::ImageIOFactory::CreateImageIO(
+            param.m_filename.c_str(), itk::ImageIOFactory::WriteMode);
         assert( imageIOWrite.IsNotNull() );
 
         // create writer
@@ -76,7 +75,7 @@ struct ITKSaverFunctor
 
 
         // set observation (*2*)
-        itk::LightProcessObject::Pointer castHelper= (itk::LightProcessObject *)(imageIOWrite.GetPointer());
+        itk::LightProcessObject::Pointer castHelper = (itk::LightProcessObject *)(imageIOWrite.GetPointer());
         assert( castHelper.IsNotNull() );
         Progressor progress(castHelper, param.m_fwWriter, param.m_filename);
 
@@ -100,17 +99,18 @@ void ImageWriter::write()
     assert( m_object.lock() );
 
     ITKSaverFunctor::Parameter saverParam;
-    saverParam.m_filename =  this->getFile().string();
+    saverParam.m_filename  = this->getFile().string();
     saverParam.m_dataImage = getConcreteObject();
-    saverParam.m_fwWriter =  this->getSptr();
+    saverParam.m_fwWriter  = this->getSptr();
     assert( saverParam.m_dataImage );
 
-    fwTools::Dispatcher< fwTools::IntrinsicTypes , ITKSaverFunctor >::invoke( saverParam.m_dataImage->getPixelType(), saverParam );
+    ::fwTools::Dispatcher< fwTools::IntrinsicTypes, ITKSaverFunctor >::invoke(
+        saverParam.m_dataImage->getPixelType(), saverParam );
 }
 
 
 
- std::string ImageWriter::extension()
+std::string ImageWriter::extension()
 {
     if ( getFile().empty() ||  ( getFile().string().find(".inr.gz") !=  std::string::npos ) )
     {
diff --git a/SrcLib/io/fwItkIO/src/fwItkIO/JpgImageWriter.cpp b/SrcLib/io/fwItkIO/src/fwItkIO/JpgImageWriter.cpp
index beb85b6..c08485f 100644
--- a/SrcLib/io/fwItkIO/src/fwItkIO/JpgImageWriter.cpp
+++ b/SrcLib/io/fwItkIO/src/fwItkIO/JpgImageWriter.cpp
@@ -1,37 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem.hpp>
-
-#include <fwCore/base.hpp>
-
-#include <itkImageSeriesWriter.h>
-#include <itkNumericSeriesFileNames.h>
-#include <itkIntensityWindowingImageFilter.h>
+#include "fwItkIO/JpgImageWriter.hpp"
 
-#include <fwTools/IntrinsicTypes.hpp>
-#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
-#include <fwTools/Dispatcher.hpp>
-#include <fwTools/IntrinsicTypes.hpp>
-#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
+#include "fwItkIO/helper/ProgressItkToFw.hpp"
+#include "fwItkIO/itk.hpp"
 
-#include <fwComEd/Dictionary.hpp>
-#include <fwComEd/fieldHelper/MedicalImageHelpers.hpp>
+#include <fwCore/base.hpp>
 
-#include <fwData/Integer.hpp>
 #include <fwData/Composite.hpp>
 #include <fwData/Image.hpp>
+#include <fwData/Integer.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include <fwItkIO/itk.hpp>
-
 #include <fwDataIO/writer/registry/macros.hpp>
 
-#include "fwItkIO/helper/ProgressItkToFw.hpp"
-#include "fwItkIO/JpgImageWriter.hpp"
+#include <fwDataTools/fieldHelper/Image.hpp>
+#include <fwDataTools/fieldHelper/MedicalImageHelpers.hpp>
+
+#include <fwTools/Dispatcher.hpp>
+#include <fwTools/DynamicTypeKeyTypeMapping.hpp>
+#include <fwTools/IntrinsicTypes.hpp>
+
+#include <itkImageSeriesWriter.h>
+#include <itkIntensityWindowingImageFilter.h>
+#include <itkJPEGImageIOFactory.h>
+#include <itkNumericSeriesFileNames.h>
+
+#include <boost/filesystem.hpp>
 
 
 fwDataIOWriterRegisterMacro( ::fwItkIO::JpgImageWriter );
@@ -43,7 +42,7 @@ namespace fwItkIO
 //------------------------------------------------------------------------------
 
 JpgImageWriter::JpgImageWriter(::fwDataIO::writer::IObjectWriter::Key key) :
-        ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this)
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this)
 {
     SLM_TRACE_FUNC();
 }
@@ -59,15 +58,20 @@ JpgImageWriter::~JpgImageWriter()
 
 struct JpgITKSaverFunctor
 {
+    JpgITKSaverFunctor()
+    {
+        // force register/link_with JPEGImageIOFactory
+        ::itk::JPEGImageIOFactory::RegisterOneFactory();
+    }
     struct Parameter
     {
-        std::string                   m_filename;
-        ::fwData::Image::sptr         m_dataImage;
+        std::string m_filename;
+        ::fwData::Image::sptr m_dataImage;
         ::fwItkIO::JpgImageWriter::sptr m_fwWriter;
     };
 
     template<class PIXELTYPE>
-    void operator()( const  Parameter &param )
+    void operator()( const Parameter& param )
     {
         OSLM_DEBUG( "itk::ImageSeriesWriter with PIXELTYPE "<<  fwTools::DynamicType::string<PIXELTYPE>() );
 
@@ -78,7 +82,8 @@ struct JpgITKSaverFunctor
         // Il faut dont creer une ImageIO a la mano (*1*): affecter l'observation  sur IO (*2*) et mettre le IO dans le reader (voir *3*)
 
         // Reader IO (*1*)
-        typename itk::ImageIOBase::Pointer imageIOWrite = itk::ImageIOFactory::CreateImageIO( "image.jpg", itk::ImageIOFactory::WriteMode);
+        typename itk::ImageIOBase::Pointer imageIOWrite = itk::ImageIOFactory::CreateImageIO( "image.jpg",
+                                                                                              itk::ImageIOFactory::WriteMode);
         assert( imageIOWrite.IsNotNull() );
 
         // create writer
@@ -88,7 +93,7 @@ struct JpgITKSaverFunctor
         typename WriterType::Pointer writer = WriterType::New();
 
         // set observation (*2*)
-        itk::LightProcessObject::Pointer castHelper= (itk::LightProcessObject *)(imageIOWrite.GetPointer());
+        itk::LightProcessObject::Pointer castHelper = (itk::LightProcessObject*)(imageIOWrite.GetPointer());
         assert( castHelper.IsNotNull() );
         Progressor progress(castHelper, param.m_fwWriter, param.m_filename);
 
@@ -100,21 +105,22 @@ struct JpgITKSaverFunctor
 
         double min, max;
         ::fwData::Composite::sptr poolTF;
-        poolTF = image->getField< ::fwData::Composite>( ::fwComEd::Dictionary::m_transferFunctionCompositeId );
+        poolTF =
+            image->getField< ::fwData::Composite>( ::fwDataTools::fieldHelper::Image::m_transferFunctionCompositeId );
         if(poolTF)
         {
             ::fwData::Composite::iterator iter = poolTF->find(::fwData::TransferFunction::s_DEFAULT_TF_NAME);
             if(iter != poolTF->end())
             {
                 ::fwData::TransferFunction::sptr tf;
-                tf = ::fwData::TransferFunction::dynamicCast(iter->second);
+                tf  = ::fwData::TransferFunction::dynamicCast(iter->second);
                 min = tf->getWLMinMax().first;
                 max = tf->getWLMinMax().second;
             }
         }
         else
         {
-            ::fwComEd::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
+            ::fwDataTools::fieldHelper::MedicalImageHelpers::getMinMax(image, min, max);
         }
 
         rescaleFilter->SetWindowMinimum( min );
@@ -127,7 +133,7 @@ struct JpgITKSaverFunctor
 
         writer->SetInput( rescaleFilter->GetOutput() );
 
-        typedef itk::NumericSeriesFileNames    NameGeneratorType;
+        typedef itk::NumericSeriesFileNames NameGeneratorType;
 
         NameGeneratorType::Pointer nameGenerator = NameGeneratorType::New();
 
@@ -155,17 +161,18 @@ void JpgImageWriter::write()
     assert( m_object.lock() );
 
     JpgITKSaverFunctor::Parameter saverParam;
-    saverParam.m_filename =  this->getFolder().string();
+    saverParam.m_filename  = this->getFolder().string();
     saverParam.m_dataImage = this->getConcreteObject();
-    saverParam.m_fwWriter =  this->getSptr();
+    saverParam.m_fwWriter  = this->getSptr();
     assert( saverParam.m_dataImage );
 
-    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes , JpgITKSaverFunctor >::invoke( saverParam.m_dataImage->getPixelType(), saverParam );
+    ::fwTools::Dispatcher< ::fwTools::IntrinsicTypes, JpgITKSaverFunctor >::invoke(
+        saverParam.m_dataImage->getPixelType(), saverParam );
 }
 
 //------------------------------------------------------------------------------
 
-std::string  JpgImageWriter::extension()
+std::string JpgImageWriter::extension()
 {
     return ".jpg";
 }
diff --git a/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cpp b/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cpp
new file mode 100644
index 0000000..11b196a
--- /dev/null
+++ b/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cpp
@@ -0,0 +1,818 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <algorithm>
+#include <map>
+#include <utility>
+#include <cstdio>
+
+#include <boost/lexical_cast.hpp>
+
+#include <itk_zlib.h>
+#include <itkByteSwapper.h>
+#include <itkIOCommon.h>
+#include <itkExceptionObject.h>
+
+#include <fwCore/spyLog.hpp>
+#include <fwCore/Exception.hpp>
+
+#include "inr2itk/itkInrImageIO.hpp"
+
+#define max(a,b) ((a) > (b) ? (a) : (b))
+#define min(a,b) ((a) <= (b) ? (a) : (b))
+
+namespace itk
+{
+
+InrImageIO::InrImageIO()
+{
+    this->SetNumberOfDimensions(3);
+    m_PixelType = SCALAR;
+    //m_swapBytes = false;
+}
+
+//------------------------------------------------------------------------------
+
+InrImageIO::~InrImageIO()
+{
+    // Nothing to do.
+}
+
+//------------------------------------------------------------------------------
+
+void InrImageIO::PrintSelf(std::ostream& os, Indent indent) const
+{
+    Superclass::PrintSelf(os, indent);
+    os << indent << "PixelType " << m_PixelType << "\n";
+    os << indent << "ComponentType " << m_ComponentType << "\n";
+}
+
+//------------------------------------------------------------------------------
+
+bool InrImageIO::CanReadFile( const char* FileNameToRead )
+{
+    // Do not perform extension checking, magic number in the header is better.
+    gzFile inputFile = gzopen(FileNameToRead, "rb");
+    if(inputFile == 0)
+    {
+        return false;
+    }
+
+    char firstLine[256];
+
+    gzgets(inputFile, firstLine, 256);
+
+    gzclose(inputFile);
+
+    std::string const magic("#INRIMAGE-4#{\n");
+    if(firstLine!=magic)
+    {
+        return false;
+    }
+    else
+    {
+        return true;
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void InrImageIO::ReadImageInformation()
+{
+    gzFile inputFile = gzopen(this->GetFileName(), "rb");
+    if(inputFile==NULL)
+    {
+        gzclose(inputFile);
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "File " << GetFileName() << " could not be read";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+
+    const int lineBufSize = 256;
+    char linebuf[lineBufSize];
+    std::map<std::string, std::string> headerValues;
+    m_headerSize = 0;
+    while( gzgets(inputFile, linebuf, lineBufSize) && !gzeof(inputFile) )
+    {
+        std::string line(linebuf);
+        // Count the number of characters we just read : length of the line
+        m_headerSize += line.length();
+        // Remove eventual trailing '\n'
+        std::string::size_type const endOfLine = line.find('\n');
+        line = line.substr(0, endOfLine);
+
+        if(line=="##}")
+        {
+            // End of header : get outta here
+            break;
+        }
+
+        if(line.empty())
+        {
+            // Empty line, nothing to do
+        }
+        else if(line[0]=='#')
+        {
+            // Comment line, nothing to do
+        }
+        else
+        {
+            // Look for key=value
+            std::string::const_iterator delimiter = std::find(line.begin(), line.end(), '=');
+            if(delimiter==line.end())
+            {
+                // invalid line : missing '='
+                gzclose(inputFile);
+                ExceptionObject exception(__FILE__, __LINE__);
+                std::stringstream errorMessage;
+                errorMessage << "Invalid INR file.\n" << "Offending line : " << line;
+                exception.SetDescription(errorMessage.str());
+                throw exception;
+            }
+
+            // Tokenize [KEY] = [VALUE] and store it in map
+            std::string key   = line.substr(0, delimiter-line.begin());
+            std::string value = line.substr(delimiter-line.begin()+1, std::string::npos);
+            OSLM_TRACE("[" << key << "] = [" << value << "]");
+            if(headerValues.find(key)!=headerValues.end())
+            {
+                // duplicate key
+                ExceptionObject exception(__FILE__, __LINE__);
+                gzclose(inputFile);
+                std::stringstream errorMessage;
+                errorMessage << "Invalid INR file.\n" << "Duplicate key : " << key;
+                exception.SetDescription(errorMessage.str());
+                throw exception;
+            }
+            else
+            {
+                headerValues[key] = value;
+            }
+        }
+    }
+    // We have finished reading the header
+    gzclose(inputFile);
+
+    // Process headerValue map
+    for(std::map<std::string, std::string>::const_iterator it = headerValues.begin(); it!=headerValues.end(); ++it)
+    {
+        if(it->first=="XDIM")
+        {
+            int xdim = ::boost::lexical_cast<int>( it->second );
+            this->SetDimensions(0, xdim);
+        }
+        else if(it->first=="YDIM")
+        {
+            int ydim = ::boost::lexical_cast<int>( it->second );
+            this->SetDimensions(1, ydim);
+        }
+        else if(it->first=="ZDIM")
+        {
+            int zdim = ::boost::lexical_cast<int>( it->second );
+            this->SetDimensions(2, zdim);
+        }
+        else if(it->first=="VDIM")
+        {
+            int vdim = ::boost::lexical_cast<int>( it->second );
+            if(vdim == 1)
+            {
+                SetPixelType(SCALAR);
+            }
+            else
+            {
+                SetPixelType(VECTOR);
+            }
+            SetNumberOfComponents(vdim);
+        }
+        else if(it->first=="VX")
+        {
+            float vx = ::boost::lexical_cast< float >( it->second );
+            this->SetSpacing(0, vx);
+        }
+        else if(it->first=="VY")
+        {
+            float vy = ::boost::lexical_cast< float >( it->second );
+            this->SetSpacing(1, vy);
+        }
+        else if(it->first=="VZ")
+        {
+            float vz = ::boost::lexical_cast< float >( it->second );
+            this->SetSpacing(2, vz);
+        }
+        else if(it->first=="TYPE")
+        {
+            std::map<std::string, std::string>::const_iterator pixsize_it = headerValues.find("PIXSIZE");
+            if(pixsize_it==headerValues.end())
+            {
+                // Missing pixsize
+                ExceptionObject exception(__FILE__, __LINE__);
+                std::stringstream errorMessage;
+                errorMessage << "Invalid INR file.\n" << "PIXSIZE key not found.";
+                exception.SetDescription(errorMessage.str());
+                throw exception;
+            }
+            std::string type    = it->second;
+            std::string pixsize = pixsize_it->second;
+            if(type=="unsigned fixed")
+            {
+                if(pixsize=="8 bits")
+                {
+                    m_ComponentType = UCHAR;
+                }
+                else if(pixsize=="16 bits")
+                {
+                    m_ComponentType = USHORT;
+                }
+                else if(pixsize=="32 bits")
+                {
+                    if ( 4 == sizeof(unsigned int) )
+                    {
+                        m_ComponentType = UINT;
+                    }
+                    else if ( 4 == sizeof(unsigned long) )
+                    {
+                        m_ComponentType = ULONG;
+                    }
+                    else
+                    {
+                        ExceptionObject exception(__FILE__, __LINE__);
+                        std::stringstream errorMessage;
+                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                        exception.SetDescription(errorMessage.str());
+                        throw exception;
+                    }
+                }
+                else if(pixsize=="64 bits")
+                {
+                    if ( 8 == sizeof(unsigned int) )
+                    {
+                        m_ComponentType = UINT;
+                    }
+                    else if ( 8 == sizeof(unsigned long) )
+                    {
+                        m_ComponentType = ULONG;
+                    }
+                    else
+                    {
+                        ExceptionObject exception(__FILE__, __LINE__);
+                        std::stringstream errorMessage;
+                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                        exception.SetDescription(errorMessage.str());
+                        throw exception;
+                    }
+                }
+                else
+                {
+                    ExceptionObject exception(__FILE__, __LINE__);
+                    std::stringstream errorMessage;
+                    errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                    exception.SetDescription(errorMessage.str());
+                    throw exception;
+                }
+            }
+            else if(type=="signed fixed")
+            {
+                if(pixsize=="8 bits")
+                {
+                    m_ComponentType = CHAR;
+                }
+                else if(pixsize=="16 bits")
+                {
+                    m_ComponentType = SHORT;
+                }
+                else if(pixsize=="32 bits")
+                {
+                    if ( 4 == sizeof(int) )
+                    {
+                        m_ComponentType = INT;
+                    }
+                    else if ( 4 == sizeof(long) )
+                    {
+                        m_ComponentType = LONG;
+                    }
+                    else
+                    {
+                        ExceptionObject exception(__FILE__, __LINE__);
+                        std::stringstream errorMessage;
+                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                        exception.SetDescription(errorMessage.str());
+                        throw exception;
+                    }
+                }
+                else if(pixsize=="64 bits")
+                {
+                    if ( 8 == sizeof(int) )
+                    {
+                        m_ComponentType = INT;
+                    }
+                    else if ( 8 == sizeof(long) )
+                    {
+                        m_ComponentType = LONG;
+                    }
+                    else
+                    {
+                        ExceptionObject exception(__FILE__, __LINE__);
+                        std::stringstream errorMessage;
+                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                        exception.SetDescription(errorMessage.str());
+                        throw exception;
+                    }
+                }
+                else
+                {
+                    ExceptionObject exception(__FILE__, __LINE__);
+                    std::stringstream errorMessage;
+                    errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                    exception.SetDescription(errorMessage.str());
+                    throw exception;
+                }
+            }
+            else if(type=="float")
+            {
+                /*
+                   if(pixsize=="8 bits")
+                   {
+                   }
+                   else if(pixsize=="16 bits")
+                   {
+                   }
+                 */
+                /*else*/ if(pixsize=="32 bits")
+                {
+                    m_ComponentType = FLOAT;
+                }
+                else if(pixsize=="64 bits")
+                {
+                    m_ComponentType = DOUBLE;
+                }
+                else
+                {
+                    ExceptionObject exception(__FILE__, __LINE__);
+                    std::stringstream errorMessage;
+                    errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
+                    exception.SetDescription(errorMessage.str());
+                    throw exception;
+                }
+            }
+            else
+            {
+                ExceptionObject exception(__FILE__, __LINE__);
+                std::stringstream errorMessage;
+                errorMessage << "Invalid INR file.\n" << "Invalid TYPE.";
+                exception.SetDescription(errorMessage.str());
+                throw exception;
+            }
+        } // TYPE
+        else if(it->first=="PIXSIZE")
+        {
+            // nothing to do, processed with "TYPE"
+        }
+        else if(it->first=="SCALE")
+        {
+            // For fixed point arithmetic only. We don't use it.
+        }
+        else if(it->first=="CPU")
+        {
+            // Big endian are : sun, sgi
+            if(it->second=="sun" || it->second=="sgi")
+            {
+                // File is big-endian, swap if system is little endian.
+                //m_swapBytes = itk::ByteSwapper<char>::SystemIsLE();
+                m_ByteOrder = BigEndian;
+            }
+            // Little endian are : pc, alpha, decm
+            else if(it->second=="pc" || it->second=="alpha" || it->second=="decm")
+            {
+                // File is little-endian, swap if system is big-endian.
+                //m_swapBytes = itk::ByteSwapper<char>::SystemIsBE();
+                m_ByteOrder = LittleEndian;
+            }
+            else
+            {
+                ExceptionObject exception(__FILE__, __LINE__);
+                std::stringstream errorMessage;
+                errorMessage << "Invalid INR file.\n" << "Unknown CPU value : " << it->second;
+                exception.SetDescription(errorMessage.str());
+                throw exception;
+            }
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void InrImageIO::Read(void * buffer)
+{
+    gzFile file = gzopen(GetFileName(), "rb");
+
+    if(file == NULL)
+    {
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "INR file " << GetFileName() << " could not be read";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+
+    // Skip the header
+    int bytesSkipped = gzseek(file, m_headerSize, SEEK_CUR);
+    if(bytesSkipped!=m_headerSize)
+    {
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "INR file " << GetFileName() << " could not be read (header size : " << bytesSkipped << "/" <<
+            m_headerSize <<").";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+
+    // And read the buffer
+
+    // Replace this line :
+    //int bytesRead = gzread(file, buffer, GetImageSizeInBytes());
+    // by
+    int bytesRead      = 0;
+    int nbStep         = 10;
+    long long int size =
+        (  (GetImageSizeInBytes()>1024*1024*10) ?  ( GetImageSizeInBytes() / nbStep ) + 1 : GetImageSizeInBytes()  );
+    int step = 0;
+    try
+    {
+        while ( bytesRead < GetImageSizeInBytes() && step < nbStep )
+        {
+            step++;
+            UpdateProgress(  ((float)bytesRead)/GetImageSizeInBytes() );
+            bytesRead += gzread( file, ((char *)buffer)+bytesRead,  min(size, GetImageSizeInBytes() - bytesRead)  );
+        }
+    }
+    catch(::fwCore::Exception &e) // catch progress bar cancel exception
+    {
+        gzclose(file);
+        throw;
+    }
+    UpdateProgress( 1.0 );
+    // End replace
+
+    if(bytesRead!=GetImageSizeInBytes())
+    {
+        gzclose(file);
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "INR file " << GetFileName() << " could not be read";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+
+    // Swap bytes if necessary
+    if ( m_ByteOrder == LittleEndian )
+    {
+        switch(m_ComponentType)
+        {
+            case CHAR:
+                ByteSwapper<char>::SwapRangeFromSystemToLittleEndian((char*)buffer, GetImageSizeInComponents() );
+                break;
+            case UCHAR:
+                ByteSwapper<unsigned char>::SwapRangeFromSystemToLittleEndian((unsigned char*)buffer,
+                                                                              GetImageSizeInComponents() );
+                break;
+            case SHORT:
+                ByteSwapper<short>::SwapRangeFromSystemToLittleEndian((short*)buffer, GetImageSizeInComponents() );
+                break;
+            case USHORT:
+                ByteSwapper<unsigned short>::SwapRangeFromSystemToLittleEndian((unsigned short*)buffer,
+                                                                               GetImageSizeInComponents() );
+                break;
+            case INT:
+                ByteSwapper<int>::SwapRangeFromSystemToLittleEndian((int*)buffer, GetImageSizeInComponents() );
+                break;
+            case UINT:
+                ByteSwapper<unsigned int>::SwapRangeFromSystemToLittleEndian((unsigned int*)buffer,
+                                                                             GetImageSizeInComponents() );
+                break;
+            case LONG:
+                ByteSwapper<long>::SwapRangeFromSystemToLittleEndian((long*)buffer, GetImageSizeInComponents() );
+                break;
+            case ULONG:
+                ByteSwapper<unsigned long>::SwapRangeFromSystemToLittleEndian((unsigned long*)buffer,
+                                                                              GetImageSizeInComponents() );
+                break;
+            case FLOAT:
+                ByteSwapper<float>::SwapRangeFromSystemToLittleEndian((float*)buffer, GetImageSizeInComponents() );
+                break;
+            case DOUBLE:
+                ByteSwapper<double>::SwapRangeFromSystemToLittleEndian((double*)buffer, GetImageSizeInComponents() );
+                break;
+            default:
+                gzclose(file);
+                ExceptionObject exception(__FILE__, __LINE__);
+                exception.SetDescription("Pixel Type Unknown");
+                throw exception;
+        }
+    }
+    else if ( m_ByteOrder == BigEndian )
+    {
+        switch(m_ComponentType)
+        {
+            case CHAR:
+                ByteSwapper<char>::SwapRangeFromSystemToBigEndian((char*)buffer, GetImageSizeInComponents() );
+                break;
+            case UCHAR:
+                ByteSwapper<unsigned char>::SwapRangeFromSystemToBigEndian((unsigned char*)buffer,
+                                                                           GetImageSizeInComponents() );
+                break;
+            case SHORT:
+                ByteSwapper<short>::SwapRangeFromSystemToBigEndian((short*)buffer, GetImageSizeInComponents() );
+                break;
+            case USHORT:
+                ByteSwapper<unsigned short>::SwapRangeFromSystemToBigEndian((unsigned short*)buffer,
+                                                                            GetImageSizeInComponents() );
+                break;
+            case INT:
+                ByteSwapper<int>::SwapRangeFromSystemToBigEndian((int*)buffer, GetImageSizeInComponents() );
+                break;
+            case UINT:
+                ByteSwapper<unsigned int>::SwapRangeFromSystemToBigEndian((unsigned int*)buffer,
+                                                                          GetImageSizeInComponents() );
+                break;
+            case LONG:
+                ByteSwapper<long>::SwapRangeFromSystemToBigEndian((long*)buffer, GetImageSizeInComponents() );
+                break;
+            case ULONG:
+                ByteSwapper<unsigned long>::SwapRangeFromSystemToBigEndian((unsigned long*)buffer,
+                                                                           GetImageSizeInComponents() );
+                break;
+            case FLOAT:
+                ByteSwapper<float>::SwapRangeFromSystemToBigEndian((float*)buffer, GetImageSizeInComponents() );
+                break;
+            case DOUBLE:
+                ByteSwapper<double>::SwapRangeFromSystemToBigEndian((double*)buffer, GetImageSizeInComponents() );
+                break;
+            default:
+                gzclose(file);
+                ExceptionObject exception(__FILE__, __LINE__);
+                exception.SetDescription("Pixel Type Unknown");
+                throw exception;
+        }
+    }
+
+    gzclose(file);
+}
+
+//------------------------------------------------------------------------------
+
+bool InrImageIO::CanWriteFile(const char * FileNameToWrite)
+{
+    // Extension must be .inr or .inr.gz
+    std::string const filename(FileNameToWrite);
+
+    std::string::size_type index = filename.rfind(".inr");
+    if(index==filename.length() - std::string(".inr").length())
+    {
+        return true;
+    }
+
+    index = filename.rfind(".inr.gz");
+    if(index==filename.length() - std::string(".inr.gz").length())
+    {
+        return true;
+    }
+
+    return false;
+}
+
+//------------------------------------------------------------------------------
+
+void InrImageIO::WriteImageInformation()
+{
+    std::stringstream headerStream;
+
+    // Magic
+    headerStream << "#INRIMAGE-4#{" << "\n";
+    // Dimensions : always write a 3D InrImage
+    headerStream << "XDIM=" << ((GetDimensions(0)<1) ? 1 : GetDimensions(0)) << "\n";
+    headerStream << "YDIM=" << ((GetDimensions(1)<1) ? 1 : GetDimensions(1)) << "\n";
+    headerStream << "ZDIM=" << ((GetDimensions(2)<1) ? 1 : GetDimensions(2)) << "\n";
+    // Number of components per pixel
+    headerStream << "VDIM=" << GetNumberOfComponents() << "\n";
+    // Spacing : if it's 0, put it to one instead
+    headerStream << "VX=" << ((GetSpacing(0)==0.0) ? 1.0 : GetSpacing(0)) << "\n";
+    headerStream << "VY=" << ((GetSpacing(1)==0.0) ? 1.0 : GetSpacing(1)) << "\n";
+    headerStream << "VZ=" << ((GetSpacing(2)==0.0) ? 1.0 : GetSpacing(2)) << "\n";
+    // Scale
+    headerStream << "SCALE=2**0" << "\n";
+    // Endianness
+    headerStream << "CPU=" << (itk::ByteSwapper<char>::SystemIsLE() ? "pc" : "sgi") << "\n";
+    // Point type
+    std::string type;
+    if(m_ComponentType==UCHAR || m_ComponentType==USHORT || m_ComponentType==UINT || m_ComponentType==ULONG)
+    {
+        type = "unsigned fixed";
+    }
+    else if(m_ComponentType==CHAR || m_ComponentType==SHORT || m_ComponentType==INT || m_ComponentType==LONG)
+    {
+        type = "signed fixed";
+    }
+    else if(m_ComponentType==FLOAT || m_ComponentType==DOUBLE)
+    {
+        type = "float";
+    }
+    else
+    {
+        // Unknown/incorrect component type
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "File " << GetFileName()
+                     << " could not be written : unknown pixel type.";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+    headerStream << "TYPE=" << type << "\n";
+    // PixelSize
+    int pixelSize;
+    if(m_ComponentType==UCHAR || m_ComponentType==CHAR)
+    {
+        pixelSize = sizeof(char);
+    }
+    else if(m_ComponentType==USHORT || m_ComponentType==SHORT)
+    {
+        pixelSize = sizeof(short);
+    }
+    else if(m_ComponentType==UINT || m_ComponentType==INT)
+    {
+        pixelSize = sizeof(int);
+    }
+    else if(m_ComponentType==ULONG || m_ComponentType==LONG)
+    {
+        pixelSize = sizeof(long);
+    }
+    else if(m_ComponentType==FLOAT)
+    {
+        pixelSize = sizeof(float);
+    }
+    else if(m_ComponentType==DOUBLE)
+    {
+        pixelSize = sizeof(double);
+    }
+    else
+    {
+        // Unknown/incorrect component type
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "File " << GetFileName()
+                     << " could not be written : unknown pixel type.";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+
+    pixelSize *= 8;
+    headerStream << "PIXSIZE=" << pixelSize << " bits" << "\n";
+
+    int const padding = 256 - headerStream.str().length() - std::string("##}\n").length();
+    for(int i = 0; i<padding; ++i)
+    {
+        headerStream << "\n";
+    }
+    headerStream << "##}\n";
+    if(!headerStream)
+    {
+        // Something could not be written to headerStream
+        ExceptionObject exception(__FILE__, __LINE__);
+        std::stringstream errorMessage;
+        errorMessage << "File " << GetFileName()
+                     << " could not be written : error while writing to headerStream.";
+        exception.SetDescription(errorMessage.str());
+        throw exception;
+    }
+
+    std::string const header = headerStream.str();
+    std::string const filename(this->GetFileName());
+    std::string::size_type const index = filename.rfind(".inr.gz");
+
+    if(index==filename.length() - std::string(".inr.gz").length())
+    {
+        gzFile outputFile = gzopen(this->GetFileName(), "wb9");
+        if(outputFile == 0)
+        {
+            ExceptionObject exception(__FILE__, __LINE__);
+            std::stringstream errorMessage;
+            errorMessage << "File " << GetFileName()
+                         << " could not be written : error writing header.";
+            exception.SetDescription(errorMessage.str());
+            throw exception;
+        }
+        std::string const headerString = headerStream.str();
+        gzwrite( outputFile, const_cast<char*>(headerString.c_str()), headerString.length() );
+        gzclose(outputFile);
+    }
+    else
+    {
+        FILE* outputFile = fopen(this->GetFileName(), "wb");
+        if(outputFile == 0)
+        {
+            ExceptionObject exception(__FILE__, __LINE__);
+            std::stringstream errorMessage;
+            errorMessage << "File " << GetFileName()
+                         << " could not be written : error writing header.";
+            exception.SetDescription(errorMessage.str());
+            throw exception;
+        }
+
+        std::string const headerString = headerStream.str();
+        fwrite( headerString.c_str(), sizeof(char), headerString.length(), outputFile);
+        fclose(outputFile);
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void InrImageIO::Write(const void* buffer)
+{
+    this->WriteImageInformation();
+    std::string const filename(GetFileName());
+    std::string const suffix(".inr.gz");
+    std::string::size_type const index = filename.rfind(suffix);
+    if(index==filename.length() - suffix.length())
+    {
+        gzFile outputFile = gzopen(this->GetFileName(), "ab");
+        if(outputFile == 0)
+        {
+            ExceptionObject exception(__FILE__, __LINE__);
+            std::stringstream errorMessage;
+            errorMessage << "File " << GetFileName()
+                         << " could not be written : error writing buffer.";
+            exception.SetDescription(errorMessage.str());
+            throw exception;
+        }
+
+        // Replace this line :
+        // gzwrite(outputFile, const_cast<void*>(buffer), GetImageSizeInBytes());
+        // by
+        int written        = 0;
+        long long int size =
+            (  (GetImageSizeInBytes()>1024*1024*10) ? ( GetImageSizeInBytes() / 10 ) + 1 : GetImageSizeInBytes()  );
+        try
+        {
+            while ( written <   GetImageSizeInBytes() )
+            {
+                UpdateProgress(  ((float)written)/GetImageSizeInBytes() );
+                written +=
+                    gzwrite( outputFile, ((char *)buffer)+written,  min(size, GetImageSizeInBytes() - written)  );
+
+            }
+        }
+        catch(::fwCore::Exception &e) // catch progress bar cancel exception
+        {
+            gzclose(outputFile);
+            throw;
+        }
+        UpdateProgress( 1.0 );
+        // End replace
+
+        gzclose(outputFile);
+    }
+    else
+    {
+        FILE* outputFile = fopen(this->GetFileName(), "ab");
+        if(outputFile == 0)
+        {
+            ExceptionObject exception(__FILE__, __LINE__);
+            std::stringstream errorMessage;
+            errorMessage << "File " << GetFileName()
+                         << " could not be written : error writing buffer.";
+            exception.SetDescription(errorMessage.str());
+            throw exception;
+        }
+
+        // Replace this line :
+        // fwrite(buffer, 1, GetImageSizeInBytes(), outputFile);
+        // by :
+        int written        = 0;
+        long long int size =
+            (  (GetImageSizeInBytes()>1024*1024*10) ? ( GetImageSizeInBytes() / 10 ) + 1 : GetImageSizeInBytes()  );
+        try
+        {
+            while ( written <   GetImageSizeInBytes() )
+            {
+                UpdateProgress(  ((float)written)/GetImageSizeInBytes() );
+                written +=
+                    fwrite( ((char *)buffer)+written, 1,  min(size, GetImageSizeInBytes() - written), outputFile);
+            }
+        }
+        catch(::fwCore::Exception &e) // catch progress bar cancel exception
+        {
+            fclose(outputFile);
+            throw;
+        }
+        UpdateProgress( 1.0 );
+        // End replace
+
+        fclose(outputFile);
+    }
+}
+
+} // namespace itk
diff --git a/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cxx b/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cxx
deleted file mode 100644
index ff205e0..0000000
--- a/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIO.cxx
+++ /dev/null
@@ -1,804 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <algorithm>
-#include <map>
-#include <utility>
-#include <cstdio>
-
-#include <boost/lexical_cast.hpp>
-
-#include <itk_zlib.h>
-#include <itkByteSwapper.h>
-#include <itkIOCommon.h>
-#include <itkExceptionObject.h>
-
-#include <fwCore/spyLog.hpp>
-#include <fwCore/Exception.hpp>
-
-#include "inr2itk/itkInrImageIO.h"
-
-#define max(a,b) ((a) > (b) ? (a) : (b))
-#define min(a,b) ((a) <= (b) ? (a) : (b))
-
-namespace itk
-{
-
-InrImageIO::InrImageIO()
-{
-    this->SetNumberOfDimensions(3);
-    m_PixelType = SCALAR;
-    //m_swapBytes = false;
-}
-
-//------------------------------------------------------------------------------
-
-InrImageIO::~InrImageIO()
-{
-    // Nothing to do.
-}
-
-//------------------------------------------------------------------------------
-
-void InrImageIO::PrintSelf(std::ostream& os, Indent indent) const
-{
-    Superclass::PrintSelf(os, indent);
-    os << indent << "PixelType " << m_PixelType << "\n";
-    os << indent << "ComponentType " << m_ComponentType << "\n";
-}
-
-//------------------------------------------------------------------------------
-
-bool InrImageIO::CanReadFile( const char* FileNameToRead )
-{
-    // Do not perform extension checking, magic number in the header is better.
-    gzFile inputFile = gzopen(FileNameToRead, "rb");
-    if(inputFile == 0)
-    {
-        return false;
-    }
-
-    char firstLine[256];
-
-    gzgets(inputFile, firstLine, 256);
-
-    gzclose(inputFile);
-
-    std::string const magic("#INRIMAGE-4#{\n");
-    if(firstLine!=magic)
-    {
-        return false;
-    }
-    else
-    {
-        return true;
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void InrImageIO::ReadImageInformation()
-{
-    gzFile inputFile = gzopen(this->GetFileName(), "rb");
-    if(inputFile==NULL)
-    {
-        gzclose(inputFile);
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "File " << GetFileName() << " could not be read";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-
-    const int lineBufSize = 256;
-    char linebuf[lineBufSize];
-    std::map<std::string, std::string> headerValues;
-    m_headerSize = 0;
-    while( gzgets(inputFile, linebuf, lineBufSize) && !gzeof(inputFile) )
-    {
-        std::string line(linebuf);
-        // Count the number of characters we just read : length of the line
-        m_headerSize += line.length();
-        // Remove eventual trailing '\n'
-        std::string::size_type const endOfLine = line.find('\n');
-        line = line.substr(0, endOfLine);
-
-        if(line=="##}")
-        {
-            // End of header : get outta here
-            break;
-        }
-
-        if(line.empty())
-        {
-            // Empty line, nothing to do
-        }
-        else if(line[0]=='#')
-        {
-            // Comment line, nothing to do
-        }
-        else
-        {
-            // Look for key=value
-            std::string::const_iterator delimiter = std::find(line.begin(), line.end(), '=');
-            if(delimiter==line.end())
-            {
-                // invalid line : missing '='
-                gzclose(inputFile);
-                ExceptionObject exception(__FILE__, __LINE__);
-                std::stringstream errorMessage;
-                errorMessage << "Invalid INR file.\n" << "Offending line : " << line;
-                exception.SetDescription(errorMessage.str());
-                throw exception;
-            }
-
-            // Tokenize [KEY] = [VALUE] and store it in map
-            std::string key = line.substr(0, delimiter-line.begin());
-            std::string value = line.substr(delimiter-line.begin()+1, std::string::npos);
-            OSLM_TRACE("[" << key << "] = [" << value << "]");
-            if(headerValues.find(key)!=headerValues.end())
-            {
-                // duplicate key
-                ExceptionObject exception(__FILE__, __LINE__);
-                gzclose(inputFile);
-                std::stringstream errorMessage;
-                errorMessage << "Invalid INR file.\n" << "Duplicate key : " << key;
-                exception.SetDescription(errorMessage.str());
-                throw exception;
-            }
-            else
-            {
-                headerValues[key] = value;
-            }
-        }
-    }
-    // We have finished reading the header
-    gzclose(inputFile);
-
-    // Process headerValue map
-    for(std::map<std::string, std::string>::const_iterator it=headerValues.begin(); it!=headerValues.end(); ++it)
-    {
-        if(it->first=="XDIM")
-        {
-            int xdim = ::boost::lexical_cast<int>( it->second );
-            this->SetDimensions(0, xdim);
-        }
-        else if(it->first=="YDIM")
-        {
-            int ydim = ::boost::lexical_cast<int>( it->second );
-            this->SetDimensions(1, ydim);
-        }
-        else if(it->first=="ZDIM")
-        {
-            int zdim = ::boost::lexical_cast<int>( it->second );
-            this->SetDimensions(2, zdim);
-        }
-        else if(it->first=="VDIM")
-        {
-            int vdim = ::boost::lexical_cast<int>( it->second );
-            if(vdim == 1)
-            {
-                SetPixelType(SCALAR);
-            }
-            else
-            {
-                SetPixelType(VECTOR);
-            }
-            SetNumberOfComponents(vdim);
-        }
-        else if(it->first=="VX")
-        {
-            float vx = ::boost::lexical_cast< float >( it->second );
-            this->SetSpacing(0, vx);
-        }
-        else if(it->first=="VY")
-        {
-            float vy = ::boost::lexical_cast< float >( it->second );
-            this->SetSpacing(1, vy);
-        }
-        else if(it->first=="VZ")
-        {
-            float vz = ::boost::lexical_cast< float >( it->second );
-            this->SetSpacing(2, vz);
-        }
-        else if(it->first=="TYPE")
-        {
-            std::map<std::string, std::string>::const_iterator pixsize_it = headerValues.find("PIXSIZE");
-            if(pixsize_it==headerValues.end())
-            {
-                // Missing pixsize
-                ExceptionObject exception(__FILE__, __LINE__);
-                std::stringstream errorMessage;
-                errorMessage << "Invalid INR file.\n" << "PIXSIZE key not found.";
-                exception.SetDescription(errorMessage.str());
-                throw exception;
-            }
-            std::string type = it->second;
-            std::string pixsize = pixsize_it->second;
-            if(type=="unsigned fixed")
-            {
-                if(pixsize=="8 bits")
-                {
-                    m_ComponentType = UCHAR;
-                }
-                else if(pixsize=="16 bits")
-                {
-                    m_ComponentType = USHORT;
-                }
-                else if(pixsize=="32 bits")
-                {
-                    if ( 4 == sizeof(unsigned int) )
-                    {
-                        m_ComponentType = UINT;
-                    }
-                    else if ( 4 == sizeof(unsigned long) )
-                    {
-                        m_ComponentType = ULONG;
-                    }
-                    else
-                    {
-                        ExceptionObject exception(__FILE__, __LINE__);
-                        std::stringstream errorMessage;
-                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                        exception.SetDescription(errorMessage.str());
-                        throw exception;
-                    }
-                }
-                else if(pixsize=="64 bits")
-                {
-                    if ( 8 == sizeof(unsigned int) )
-                    {
-                        m_ComponentType = UINT;
-                    }
-                    else if ( 8 == sizeof(unsigned long) )
-                    {
-                        m_ComponentType = ULONG;
-                    }
-                    else
-                    {
-                        ExceptionObject exception(__FILE__, __LINE__);
-                        std::stringstream errorMessage;
-                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                        exception.SetDescription(errorMessage.str());
-                        throw exception;
-                    }
-                }
-                else
-                {
-                    ExceptionObject exception(__FILE__, __LINE__);
-                    std::stringstream errorMessage;
-                    errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                    exception.SetDescription(errorMessage.str());
-                    throw exception;
-                }
-            }
-            else if(type=="signed fixed")
-            {
-                if(pixsize=="8 bits")
-                {
-                    m_ComponentType = CHAR;
-                }
-                else if(pixsize=="16 bits")
-                {
-                    m_ComponentType = SHORT;
-                }
-                else if(pixsize=="32 bits")
-                {
-                    if ( 4 == sizeof(int) )
-                    {
-                        m_ComponentType = INT;
-                    }
-                    else if ( 4 == sizeof(long) )
-                    {
-                        m_ComponentType = LONG;
-                    }
-                    else
-                    {
-                        ExceptionObject exception(__FILE__, __LINE__);
-                        std::stringstream errorMessage;
-                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                        exception.SetDescription(errorMessage.str());
-                        throw exception;
-                    }
-                }
-                else if(pixsize=="64 bits")
-                {
-                    if ( 8 == sizeof(int) )
-                    {
-                        m_ComponentType = INT;
-                    }
-                    else if ( 8 == sizeof(long) )
-                    {
-                        m_ComponentType = LONG;
-                    }
-                    else
-                    {
-                        ExceptionObject exception(__FILE__, __LINE__);
-                        std::stringstream errorMessage;
-                        errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                        exception.SetDescription(errorMessage.str());
-                        throw exception;
-                    }
-                }
-                else
-                {
-                    ExceptionObject exception(__FILE__, __LINE__);
-                    std::stringstream errorMessage;
-                    errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                    exception.SetDescription(errorMessage.str());
-                    throw exception;
-                }
-            }
-            else if(type=="float")
-            {
-                /*
-                if(pixsize=="8 bits")
-                {
-                }
-                else if(pixsize=="16 bits")
-                {
-                }
-                */
-                /*else*/ if(pixsize=="32 bits")
-                {
-                    m_ComponentType = FLOAT;
-                }
-                else if(pixsize=="64 bits")
-                {
-                    m_ComponentType = DOUBLE;
-                }
-                else
-                {
-                    ExceptionObject exception(__FILE__, __LINE__);
-                    std::stringstream errorMessage;
-                    errorMessage << "Invalid INR file.\n" << "Invalid PIXSIZE.";
-                    exception.SetDescription(errorMessage.str());
-                    throw exception;
-                }
-            }
-            else
-            {
-                ExceptionObject exception(__FILE__, __LINE__);
-                std::stringstream errorMessage;
-                errorMessage << "Invalid INR file.\n" << "Invalid TYPE.";
-                exception.SetDescription(errorMessage.str());
-                throw exception;
-            }
-        } // TYPE
-        else if(it->first=="PIXSIZE")
-        {
-            // nothing to do, processed with "TYPE"
-        }
-        else if(it->first=="SCALE")
-        {
-            // For fixed point arithmetic only. We don't use it.
-        }
-        else if(it->first=="CPU")
-        {
-            // Big endian are : sun, sgi
-            if(it->second=="sun" || it->second=="sgi")
-            {
-                // File is big-endian, swap if system is little endian.
-                //m_swapBytes = itk::ByteSwapper<char>::SystemIsLE();
-                m_ByteOrder = BigEndian;
-            }
-            // Little endian are : pc, alpha, decm
-            else if(it->second=="pc" || it->second=="alpha" || it->second=="decm")
-            {
-                // File is little-endian, swap if system is big-endian.
-                //m_swapBytes = itk::ByteSwapper<char>::SystemIsBE();
-                m_ByteOrder = LittleEndian;
-            }
-            else
-            {
-                ExceptionObject exception(__FILE__, __LINE__);
-                std::stringstream errorMessage;
-                errorMessage << "Invalid INR file.\n" << "Unknown CPU value : " << it->second;
-                exception.SetDescription(errorMessage.str());
-                throw exception;
-            }
-        }
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void InrImageIO::Read(void * buffer)
-{
-    gzFile file = gzopen(GetFileName(), "rb");
-
-    if(file == NULL)
-    {
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "INR file " << GetFileName() << " could not be read";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-
-    // Skip the header
-    int bytesSkipped = gzseek(file, m_headerSize, SEEK_CUR);
-    if(bytesSkipped!=m_headerSize)
-    {
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "INR file " << GetFileName() << " could not be read (header size : " << bytesSkipped << "/" << m_headerSize <<").";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-
-    // And read the buffer
-
-    // Replace this line :
-    //int bytesRead = gzread(file, buffer, GetImageSizeInBytes());
-    // by
-    int bytesRead = 0;
-    int nbStep = 10;
-    long long int size = (  (GetImageSizeInBytes()>1024*1024*10)?  ( GetImageSizeInBytes() / nbStep ) + 1 : GetImageSizeInBytes()  );
-    int step = 0;
-    try
-    {
-        while ( bytesRead < GetImageSizeInBytes() && step < nbStep )
-        {
-            step++;
-            UpdateProgress(  ((float)bytesRead)/GetImageSizeInBytes() );
-            bytesRead += gzread( file , ((char *)buffer)+bytesRead,  min(size, GetImageSizeInBytes() - bytesRead)  );
-        }
-    }
-    catch(::fwCore::Exception &e) // catch progress bar cancel exception
-    {
-        gzclose(file);
-        throw;
-    }
-    UpdateProgress( 1.0 );
-    // End replace
-
-    if(bytesRead!=GetImageSizeInBytes())
-    {
-        gzclose(file);
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "INR file " << GetFileName() << " could not be read";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-
-    // Swap bytes if necessary
-    if ( m_ByteOrder == LittleEndian )
-    {
-        switch(m_ComponentType)
-        {
-            case CHAR:
-                ByteSwapper<char>::SwapRangeFromSystemToLittleEndian((char*)buffer, GetImageSizeInComponents() );
-                break;
-            case UCHAR:
-                ByteSwapper<unsigned char>::SwapRangeFromSystemToLittleEndian((unsigned char*)buffer, GetImageSizeInComponents() );
-                break;
-            case SHORT:
-                ByteSwapper<short>::SwapRangeFromSystemToLittleEndian((short*)buffer, GetImageSizeInComponents() );
-                break;
-            case USHORT:
-                ByteSwapper<unsigned short>::SwapRangeFromSystemToLittleEndian((unsigned short*)buffer, GetImageSizeInComponents() );
-                break;
-            case INT:
-                ByteSwapper<int>::SwapRangeFromSystemToLittleEndian((int*)buffer, GetImageSizeInComponents() );
-                break;
-            case UINT:
-                ByteSwapper<unsigned int>::SwapRangeFromSystemToLittleEndian((unsigned int*)buffer, GetImageSizeInComponents() );
-                break;
-            case LONG:
-                ByteSwapper<long>::SwapRangeFromSystemToLittleEndian((long*)buffer, GetImageSizeInComponents() );
-                break;
-            case ULONG:
-                ByteSwapper<unsigned long>::SwapRangeFromSystemToLittleEndian((unsigned long*)buffer, GetImageSizeInComponents() );
-                break;
-            case FLOAT:
-                ByteSwapper<float>::SwapRangeFromSystemToLittleEndian((float*)buffer, GetImageSizeInComponents() );
-                break;
-            case DOUBLE:
-                ByteSwapper<double>::SwapRangeFromSystemToLittleEndian((double*)buffer, GetImageSizeInComponents() );
-                break;
-            default:
-                gzclose(file);
-                ExceptionObject exception(__FILE__, __LINE__);
-                exception.SetDescription("Pixel Type Unknown");
-                throw exception;
-        }
-    }
-    else if ( m_ByteOrder == BigEndian )
-    {
-        switch(m_ComponentType)
-        {
-            case CHAR:
-                ByteSwapper<char>::SwapRangeFromSystemToBigEndian((char*)buffer, GetImageSizeInComponents() );
-                break;
-            case UCHAR:
-                ByteSwapper<unsigned char>::SwapRangeFromSystemToBigEndian((unsigned char*)buffer, GetImageSizeInComponents() );
-                break;
-            case SHORT:
-                ByteSwapper<short>::SwapRangeFromSystemToBigEndian((short*)buffer, GetImageSizeInComponents() );
-                break;
-            case USHORT:
-                ByteSwapper<unsigned short>::SwapRangeFromSystemToBigEndian((unsigned short*)buffer, GetImageSizeInComponents() );
-                break;
-            case INT:
-                ByteSwapper<int>::SwapRangeFromSystemToBigEndian((int*)buffer, GetImageSizeInComponents() );
-                break;
-            case UINT:
-                ByteSwapper<unsigned int>::SwapRangeFromSystemToBigEndian((unsigned int*)buffer, GetImageSizeInComponents() );
-                break;
-            case LONG:
-                ByteSwapper<long>::SwapRangeFromSystemToBigEndian((long*)buffer, GetImageSizeInComponents() );
-                break;
-            case ULONG:
-                ByteSwapper<unsigned long>::SwapRangeFromSystemToBigEndian((unsigned long*)buffer, GetImageSizeInComponents() );
-                break;
-            case FLOAT:
-                ByteSwapper<float>::SwapRangeFromSystemToBigEndian((float*)buffer, GetImageSizeInComponents() );
-                break;
-            case DOUBLE:
-                ByteSwapper<double>::SwapRangeFromSystemToBigEndian((double*)buffer, GetImageSizeInComponents() );
-                break;
-            default:
-                gzclose(file);
-                ExceptionObject exception(__FILE__, __LINE__);
-                exception.SetDescription("Pixel Type Unknown");
-                throw exception;
-        }
-    }
-
-    gzclose(file);
-}
-
-//------------------------------------------------------------------------------
-
-bool InrImageIO::CanWriteFile(const char * FileNameToWrite)
-{
-    // Extension must be .inr or .inr.gz
-    std::string const filename(FileNameToWrite);
-
-    std::string::size_type index = filename.rfind(".inr");
-    if(index==filename.length() - std::string(".inr").length())
-    {
-        return true;
-    }
-
-    index = filename.rfind(".inr.gz");
-    if(index==filename.length() - std::string(".inr.gz").length())
-    {
-        return true;
-    }
-
-    return false;
-}
-
-//------------------------------------------------------------------------------
-
-void InrImageIO::WriteImageInformation()
-{
-    std::stringstream headerStream;
-
-    // Magic
-    headerStream << "#INRIMAGE-4#{" << "\n";
-    // Dimensions : always write a 3D InrImage
-    headerStream << "XDIM=" << ((GetDimensions(0)<1)?1:GetDimensions(0)) << "\n";
-    headerStream << "YDIM=" << ((GetDimensions(1)<1)?1:GetDimensions(1)) << "\n";
-    headerStream << "ZDIM=" << ((GetDimensions(2)<1)?1:GetDimensions(2)) << "\n";
-    // Number of components per pixel
-    headerStream << "VDIM=" << GetNumberOfComponents() << "\n";
-    // Spacing : if it's 0, put it to one instead
-    headerStream << "VX=" << ((GetSpacing(0)==0.0)?1.0:GetSpacing(0)) << "\n";
-    headerStream << "VY=" << ((GetSpacing(1)==0.0)?1.0:GetSpacing(1)) << "\n";
-    headerStream << "VZ=" << ((GetSpacing(2)==0.0)?1.0:GetSpacing(2)) << "\n";
-    // Scale
-    headerStream << "SCALE=2**0" << "\n";
-    // Endianness
-    headerStream << "CPU=" << (itk::ByteSwapper<char>::SystemIsLE()?"pc":"sgi") << "\n";
-    // Point type
-    std::string type;
-    if(m_ComponentType==UCHAR || m_ComponentType==USHORT || m_ComponentType==UINT || m_ComponentType==ULONG)
-    {
-        type="unsigned fixed";
-    }
-    else if(m_ComponentType==CHAR || m_ComponentType==SHORT || m_ComponentType==INT || m_ComponentType==LONG)
-    {
-        type="signed fixed";
-    }
-    else if(m_ComponentType==FLOAT || m_ComponentType==DOUBLE)
-    {
-        type="float";
-    }
-    else
-    {
-        // Unknown/incorrect component type
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "File " << GetFileName()
-                     << " could not be written : unknown pixel type.";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-    headerStream << "TYPE=" << type << "\n";
-    // PixelSize
-    int pixelSize;
-    if(m_ComponentType==UCHAR || m_ComponentType==CHAR)
-    {
-        pixelSize = sizeof(char);
-    }
-    else if(m_ComponentType==USHORT || m_ComponentType==SHORT)
-    {
-        pixelSize = sizeof(short);
-    }
-    else if(m_ComponentType==UINT || m_ComponentType==INT)
-    {
-        pixelSize = sizeof(int);
-    }
-    else if(m_ComponentType==ULONG || m_ComponentType==LONG)
-    {
-        pixelSize = sizeof(long);
-    }
-    else if(m_ComponentType==FLOAT)
-    {
-        pixelSize = sizeof(float);
-    }
-    else if(m_ComponentType==DOUBLE)
-    {
-        pixelSize = sizeof(double);
-    }
-    else
-    {
-        // Unknown/incorrect component type
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "File " << GetFileName()
-                     << " could not be written : unknown pixel type.";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-
-    pixelSize *= 8;
-    headerStream << "PIXSIZE=" << pixelSize << " bits" << "\n";
-
-    int const padding = 256 - headerStream.str().length() - std::string("##}\n").length();
-    for(int i=0; i<padding; ++i)
-    {
-        headerStream << "\n";
-    }
-    headerStream << "##}\n";
-    if(!headerStream)
-    {
-        // Something could not be written to headerStream
-        ExceptionObject exception(__FILE__, __LINE__);
-        std::stringstream errorMessage;
-        errorMessage << "File " << GetFileName()
-                     << " could not be written : error while writing to headerStream.";
-        exception.SetDescription(errorMessage.str());
-        throw exception;
-    }
-
-    std::string const header = headerStream.str();
-    std::string const filename(this->GetFileName());
-    std::string::size_type const index = filename.rfind(".inr.gz");
-
-    if(index==filename.length() - std::string(".inr.gz").length())
-    {
-        gzFile outputFile = gzopen(this->GetFileName(), "wb9");
-        if(outputFile == 0)
-        {
-            ExceptionObject exception(__FILE__, __LINE__);
-            std::stringstream errorMessage;
-            errorMessage << "File " << GetFileName()
-                         << " could not be written : error writing header.";
-            exception.SetDescription(errorMessage.str());
-            throw exception;
-        }
-        std::string const headerString = headerStream.str();
-        gzwrite( outputFile, const_cast<char*>(headerString.c_str()), headerString.length() );
-        gzclose(outputFile);
-    }
-    else
-    {
-        FILE* outputFile = fopen(this->GetFileName(), "wb");
-        if(outputFile == 0)
-        {
-            ExceptionObject exception(__FILE__, __LINE__);
-            std::stringstream errorMessage;
-            errorMessage << "File " << GetFileName()
-                         << " could not be written : error writing header.";
-            exception.SetDescription(errorMessage.str());
-            throw exception;
-        }
-
-        std::string const headerString = headerStream.str();
-        fwrite( headerString.c_str(), sizeof(char), headerString.length(), outputFile);
-        fclose(outputFile);
-    }
-}
-
-//------------------------------------------------------------------------------
-
-void InrImageIO::Write(const void* buffer)
-{
-    this->WriteImageInformation();
-    std::string const filename(GetFileName());
-    std::string const suffix(".inr.gz");
-    std::string::size_type const index = filename.rfind(suffix);
-    if(index==filename.length() - suffix.length())
-    {
-        gzFile outputFile = gzopen(this->GetFileName(), "ab");
-        if(outputFile == 0)
-        {
-            ExceptionObject exception(__FILE__, __LINE__);
-            std::stringstream errorMessage;
-            errorMessage << "File " << GetFileName()
-                         << " could not be written : error writing buffer.";
-            exception.SetDescription(errorMessage.str());
-            throw exception;
-        }
-
-        // Replace this line :
-        // gzwrite(outputFile, const_cast<void*>(buffer), GetImageSizeInBytes());
-        // by
-        int written = 0;
-        long long int size = (  (GetImageSizeInBytes()>1024*1024*10)? ( GetImageSizeInBytes() / 10 ) + 1 : GetImageSizeInBytes()  );
-        try
-        {
-            while ( written <   GetImageSizeInBytes() )
-            {
-                UpdateProgress(  ((float)written)/GetImageSizeInBytes() );
-                written += gzwrite( outputFile , ((char *)buffer)+written,  min(size, GetImageSizeInBytes() - written)  );
-
-            }
-        }
-        catch(::fwCore::Exception &e) // catch progress bar cancel exception
-        {
-            gzclose(outputFile);
-            throw;
-        }
-        UpdateProgress( 1.0 );
-        // End replace
-
-        gzclose(outputFile);
-    }
-    else
-    {
-        FILE* outputFile = fopen(this->GetFileName(), "ab");
-        if(outputFile == 0)
-        {
-            ExceptionObject exception(__FILE__, __LINE__);
-            std::stringstream errorMessage;
-            errorMessage << "File " << GetFileName()
-                         << " could not be written : error writing buffer.";
-            exception.SetDescription(errorMessage.str());
-            throw exception;
-        }
-
-        // Replace this line :
-        // fwrite(buffer, 1, GetImageSizeInBytes(), outputFile);
-        // by :
-        int written = 0;
-        long long int size = (  (GetImageSizeInBytes()>1024*1024*10)? ( GetImageSizeInBytes() / 10 ) + 1 : GetImageSizeInBytes()  );
-        try
-        {
-            while ( written <   GetImageSizeInBytes() )
-            {
-                UpdateProgress(  ((float)written)/GetImageSizeInBytes() );
-                written += fwrite( ((char *)buffer)+written, 1,  min(size, GetImageSizeInBytes() - written)  , outputFile);
-            }
-        }
-        catch(::fwCore::Exception &e) // catch progress bar cancel exception
-        {
-            fclose(outputFile);
-            throw ;
-        }
-        UpdateProgress( 1.0 );
-        // End replace
-
-        fclose(outputFile);
-    }
-}
-
-} // namespace itk
diff --git a/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIOFactory.cpp b/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIOFactory.cpp
new file mode 100644
index 0000000..75eeb94
--- /dev/null
+++ b/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIOFactory.cpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwItkIO/ImageIOFactoryRegistrar.hxx"
+
+#include "inr2itk/itkInrImageIOFactory.hpp"
+
+#include <itkCreateObjectFunction.h>
+#include "inr2itk/itkInrImageIO.hpp"
+#include <itkVersion.h>
+
+#include <fwCore/base.hpp>
+
+
+REGISTER_IMAGEIOFACTORY( itk::InrImageIOFactory );
+
+
+namespace itk
+{
+
+void InrImageIOFactory::PrintSelf(std::ostream&, Indent) const
+{
+}
+
+//------------------------------------------------------------------------------
+
+InrImageIOFactory::InrImageIOFactory()
+{
+    SLM_TRACE_FUNC();
+    this->RegisterOverride("itkImageIOBase",
+                           "itkInrImageIO",
+                           "InrImage IO",
+                           1,
+                           CreateObjectFunction<InrImageIO>::New());
+}
+
+//------------------------------------------------------------------------------
+
+InrImageIOFactory::~InrImageIOFactory()
+{
+}
+
+//------------------------------------------------------------------------------
+
+const char* InrImageIOFactory::GetITKSourceVersion(void) const
+{
+    return ITK_SOURCE_VERSION;
+}
+
+//------------------------------------------------------------------------------
+
+const char* InrImageIOFactory::GetDescription() const
+{
+    return "InrImage ImageIO Factory, allows the loading of InrImage into ITK";
+}
+
+} // end namespace itk
diff --git a/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIOFactory.cxx b/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIOFactory.cxx
deleted file mode 100644
index 43b9fbf..0000000
--- a/SrcLib/io/fwItkIO/src/inr2itk/itkInrImageIOFactory.cxx
+++ /dev/null
@@ -1,58 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include "fwItkIO/ImageIOFactoryRegistrar.hxx"
-
-#include "inr2itk/itkInrImageIOFactory.h"
-
-#include "itkCreateObjectFunction.h"
-#include "inr2itk/itkInrImageIO.h"
-#include "itkVersion.h"
-
-#include <fwCore/base.hpp>
-
-
-REGISTER_IMAGEIOFACTORY( itk::InrImageIOFactory );
-
-
-namespace itk
-{
-
-void InrImageIOFactory::PrintSelf(std::ostream&, Indent) const
-{}
-
-//------------------------------------------------------------------------------
-
-InrImageIOFactory::InrImageIOFactory()
-{
-    SLM_TRACE_FUNC();
-    this->RegisterOverride("itkImageIOBase",
-            "itkInrImageIO",
-            "InrImage IO",
-            1,
-            CreateObjectFunction<InrImageIO>::New());
-}
-
-//------------------------------------------------------------------------------
-
-InrImageIOFactory::~InrImageIOFactory()
-{}
-
-//------------------------------------------------------------------------------
-
-const char* InrImageIOFactory::GetITKSourceVersion(void) const
-{
-    return ITK_SOURCE_VERSION;
-}
-
-//------------------------------------------------------------------------------
-
-const char* InrImageIOFactory::GetDescription() const
-{
-    return "InrImage ImageIO Factory, allows the loading of InrImage into ITK";
-}
-
-} // end namespace itk
diff --git a/SrcLib/io/fwItkIO/test/CMakeLists.txt b/SrcLib/io/fwItkIO/test/CMakeLists.txt
index 384db7d..372e9ee 100644
--- a/SrcLib/io/fwItkIO/test/CMakeLists.txt
+++ b/SrcLib/io/fwItkIO/test/CMakeLists.txt
@@ -1,10 +1,9 @@
-
 fwLoadProperties()
 
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
-
 
+fwInclude(${CPPUNIT_INCLUDE_DIR})
 
+fwLink(
+    ${CPPUNIT_LIBRARY}
+)
diff --git a/SrcLib/io/fwItkIO/test/Properties.cmake b/SrcLib/io/fwItkIO/test/Properties.cmake
index e4fc8d7..170693b 100644
--- a/SrcLib/io/fwItkIO/test/Properties.cmake
+++ b/SrcLib/io/fwItkIO/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwItkIOTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataIO fwItkIO )
+set( DEPENDENCIES fwCore fwTest fwTools fwData fwItkIO fwServices)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwItkIO/test/cppunit.options b/SrcLib/io/fwItkIO/test/cppunit.options
deleted file mode 100644
index 41d9765..0000000
--- a/SrcLib/io/fwItkIO/test/cppunit.options
+++ /dev/null
@@ -1,17 +0,0 @@
-CLASSTEST=[
-          'ImageReaderWriterTest',
-          'ImageConversionTest',
-          'ImageReaderWriterJPGTest',
-          'helper',
-          ]
-USE = ['boost']
-LIB = [
-      'fwItkIO_0-1',
-      'fwTools_0-1',
-      'fwCore_0-1',
-      'fwData_0-1',
-      'fwDataCamp_0-1',
-      'fwDataIO_0-2',
-      'fwTest_0-1'
-      ]
-CONSOLE='yes'
diff --git a/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hpp b/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hpp
index f0a2c8b..6999337 100644
--- a/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hpp
+++ b/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_UT_IMAGECONVERSIONTEST_HPP_
-#define _FWITKIO_UT_IMAGECONVERSIONTEST_HPP_
+#ifndef __FWITKIO_UT_IMAGECONVERSIONTEST_HPP__
+#define __FWITKIO_UT_IMAGECONVERSIONTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwServices/macros.hpp>
@@ -21,11 +21,11 @@ namespace ut
 
 class ImageConversionTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageConversionTest );
-    CPPUNIT_TEST( testConversion );
-    CPPUNIT_TEST( stressTest );
-    CPPUNIT_TEST( testConversion2D );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageConversionTest );
+CPPUNIT_TEST( testConversion );
+CPPUNIT_TEST( stressTest );
+CPPUNIT_TEST( testConversion2D );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -48,4 +48,4 @@ public:
 
 #include "ImageConversionTest.hxx"
 
-#endif // _FWITKIO_UT_IMAGECONVERSIONTEST_HPP_
+#endif // __FWITKIO_UT_IMAGECONVERSIONTEST_HPP__
diff --git a/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hxx b/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hxx
index 8f1a0af..c49c85d 100644
--- a/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hxx
+++ b/SrcLib/io/fwItkIO/test/tu/include/ImageConversionTest.hxx
@@ -1,10 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
+#ifndef __FWITKIO_UT_IMAGECONVERSIONTEST_HXX__
+#define __FWITKIO_UT_IMAGECONVERSIONTEST_HXX__
 
 #include <fwTest/generator/Image.hpp>
 #include <fwTest/helper/compare.hpp>
@@ -21,16 +22,18 @@ namespace ut
 template< class TYPE>
 void ImageConversionTest::stressTestForAType()
 {
-    for(unsigned char k=0; k<5; k++)
+    for(unsigned char k = 0; k<5; k++)
     {
         ::fwData::Image::sptr image = ::fwData::Image::New();
         ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type::create<TYPE>());
 
-        typedef itk::Image< TYPE , 3 > ImageType;
+        typedef itk::Image< TYPE, 3 > ImageType;
         typename ImageType::Pointer itkImage = ::fwItkIO::itkImageFactory<ImageType>( image );
 
         ::fwTest::helper::ExcludeSetType exclude;
         exclude.insert("array.isOwner");
+        exclude.insert("window_center");
+        exclude.insert("window_width");
 
         ::fwData::Image::sptr image2 = ::fwData::Image::New();
         bool image2ManagesHisBuffer = false;
@@ -45,3 +48,5 @@ void ImageConversionTest::stressTestForAType()
 
 } //namespace ut
 } //namespace fwItkIO
+
+#endif // __FWITKIO_UT_IMAGECONVERSIONTEST_HXX__
diff --git a/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterJPGTest.hpp b/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterJPGTest.hpp
index bfc02ad..6d866f7 100644
--- a/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterJPGTest.hpp
+++ b/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterJPGTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_UT_IMAGEREADERWRITERJPGTEST_HPP_
-#define _FWITKIO_UT_IMAGEREADERWRITERJPGTEST_HPP_
+#ifndef __FWITKIO_UT_IMAGEREADERWRITERJPGTEST_HPP__
+#define __FWITKIO_UT_IMAGEREADERWRITERJPGTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwServices/macros.hpp>
@@ -20,10 +20,10 @@ namespace ut
 
 class ImageReaderWriterJPGTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageReaderWriterJPGTest );
-    CPPUNIT_TEST( testImageWriter );
-    CPPUNIT_TEST( testImageWriter2 );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageReaderWriterJPGTest );
+CPPUNIT_TEST( testImageWriter );
+CPPUNIT_TEST( testImageWriter2 );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -39,4 +39,4 @@ public:
 } //namespace ut
 } //namespace fwItkIO
 
-#endif // _FWITKIO_UT_IMAGEREADERWRITERJPGTEST_HPP_
+#endif // __FWITKIO_UT_IMAGEREADERWRITERJPGTEST_HPP__
diff --git a/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterTest.hpp b/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterTest.hpp
index 61704ea..1188c22 100644
--- a/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterTest.hpp
+++ b/SrcLib/io/fwItkIO/test/tu/include/ImageReaderWriterTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_UT_IMAGEREADERWRITERTEST_HPP_
-#define _FWITKIO_UT_IMAGEREADERWRITERTEST_HPP_
+#ifndef __FWITKIO_UT_IMAGEREADERWRITERTEST_HPP__
+#define __FWITKIO_UT_IMAGEREADERWRITERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwServices/macros.hpp>
@@ -20,10 +20,10 @@ namespace ut
 
 class ImageReaderWriterTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageReaderWriterTest );
-    CPPUNIT_TEST( testSaveLoadInr );
-    CPPUNIT_TEST( stressTestInr );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageReaderWriterTest );
+CPPUNIT_TEST( testSaveLoadInr );
+CPPUNIT_TEST( stressTestInr );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -33,14 +33,14 @@ public:
     void testSaveLoadInr();
     void stressTestInr();
 
-private :
+private:
 
 
-   void stressTestInrWithType(::fwTools::Type type, int nbTest);
-   void checkSaveLoadInr( ::fwData::Image::sptr image );
+    void stressTestInrWithType(::fwTools::Type type, int nbTest);
+    void checkSaveLoadInr( ::fwData::Image::sptr image );
 };
 
 } //namespace ut
 } //namespace fwItkIO
 
-#endif // _FWITKIO_UT_IMAGEREADERWRITERTEST_HPP_
+#endif // __FWITKIO_UT_IMAGEREADERWRITERTEST_HPP__
diff --git a/SrcLib/io/fwItkIO/test/tu/include/helper.hpp b/SrcLib/io/fwItkIO/test/tu/include/helper.hpp
index 600b7c5..2167023 100644
--- a/SrcLib/io/fwItkIO/test/tu/include/helper.hpp
+++ b/SrcLib/io/fwItkIO/test/tu/include/helper.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWITKIO_UT_HELPER_HPP_
-#define _FWITKIO_UT_HELPER_HPP_
+#ifndef __FWITKIO_UT_HELPER_HPP__
+#define __FWITKIO_UT_HELPER_HPP__
 
 namespace fwData
 {
@@ -26,4 +26,4 @@ void roundSpacing( SPTR(::fwData::Image) image);
 } //namespace fwItkIO
 
 
-#endif // _FWITKIO_UT_HELPER_HPP_
+#endif // __FWITKIO_UT_HELPER_HPP__
diff --git a/SrcLib/io/fwItkIO/test/tu/src/ImageConversionTest.cpp b/SrcLib/io/fwItkIO/test/tu/src/ImageConversionTest.cpp
index 84fe330..8b61978 100644
--- a/SrcLib/io/fwItkIO/test/tu/src/ImageConversionTest.cpp
+++ b/SrcLib/io/fwItkIO/test/tu/src/ImageConversionTest.cpp
@@ -1,13 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include <fwCore/base.hpp>
 #include <fwData/Object.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
-
 #include <fwTest/generator/Image.hpp>
 #include <fwTest/helper/compare.hpp>
 
@@ -47,7 +46,7 @@ void ImageConversionTest::testConversion()
     ::fwData::Image::sptr image = ::fwData::Image::New();
     ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type::create("int16"));
 
-    typedef itk::Image< ::boost::int16_t , 3 > ImageType;
+    typedef itk::Image< ::boost::int16_t, 3 > ImageType;
     ImageType::Pointer itkImage = ::fwItkIO::itkImageFactory<ImageType>( image );
 
     ::fwData::Image::sptr image2 = ::fwData::Image::New();
@@ -59,6 +58,8 @@ void ImageConversionTest::testConversion()
 
     ::fwTest::helper::ExcludeSetType exclude;
     exclude.insert("array.isOwner");
+    exclude.insert("window_center");
+    exclude.insert("window_width");
 
     CPPUNIT_ASSERT(::fwTest::helper::compare(image, image2, exclude));
 
@@ -101,15 +102,15 @@ void ImageConversionTest::testConversion2D()
     spacing[0] = (rand()%200 +1) / 100.;
     spacing[1] = (rand()%200 +1) / 100.;
     std::vector<double> origin(dim);
-    origin[0] = (rand()%200 - 100) / 3.;
-    origin[1] = (rand()%200 - 100) / 3.;
+    origin[0]            = (rand()%200 - 100) / 3.;
+    origin[1]            = (rand()%200 - 100) / 3.;
     ::fwTools::Type type = ::fwTools::Type::create< ::boost::int16_t >();
 
     ::fwTest::generator::Image::generateImage(image, size, spacing, origin, type);
     ::fwData::Array::sptr array = image->getDataArray();
     ::fwTest::generator::Image::randomizeArray(array);
 
-    typedef itk::Image< ::boost::int16_t , 2 > ImageType;
+    typedef itk::Image< ::boost::int16_t, 2 > ImageType;
 
     ImageType::Pointer itkImage = ::fwItkIO::itkImageFactory<ImageType>( image );
 
@@ -122,6 +123,8 @@ void ImageConversionTest::testConversion2D()
 
     ::fwTest::helper::ExcludeSetType exclude;
     exclude.insert("array.isOwner");
+    exclude.insert("window_center");
+    exclude.insert("window_width");
 
     CPPUNIT_ASSERT(::fwTest::helper::compare(image, image2, exclude));
 
diff --git a/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterJPGTest.cpp b/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterJPGTest.cpp
index cf8e07e..ab8fca9 100644
--- a/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterJPGTest.cpp
+++ b/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterJPGTest.cpp
@@ -1,23 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <itkImageFileWriter.h>
-#include <itkImageFileReader.h>
+#include "ImageReaderWriterJPGTest.hpp"
+
+#include <fwCore/base.hpp>
 
 #include <fwData/Image.hpp>
 
+#include <fwItkIO/ImageReader.hpp>
+#include <fwItkIO/JpgImageWriter.hpp>
+#include <fwItkIO/itk.hpp>
 
-#include <fwTest/generator/Image.hpp>
 #include <fwTest/Data.hpp>
+#include <fwTest/generator/Image.hpp>
 
-#include <fwItkIO/itk.hpp>
-#include <fwItkIO/JpgImageWriter.hpp>
-#include <fwItkIO/ImageReader.hpp>
-
-#include "ImageReaderWriterJPGTest.hpp"
+#include <itkImageFileReader.h>
+#include <itkImageFileWriter.h>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwItkIO::ut::ImageReaderWriterJPGTest );
@@ -66,8 +67,12 @@ void ImageReaderWriterJPGTest::testImageWriter()
 void ImageReaderWriterJPGTest::testImageWriter2()
 {
     // create Image
-    ::boost::filesystem::path pathInr = ::fwTest::Data::dir() / "rd/patient/mfo/cas01/0/0/patientImage.inr.gz";
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    ::boost::filesystem::path pathInr = ::fwTest::Data::dir() / "fw4spl/image/inr/image.inr.gz";
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + pathInr.string() + "' does not exist",
+                           ::boost::filesystem::exists(pathInr));
+
+    ::fwData::Image::sptr image           = ::fwData::Image::New();
     ::fwItkIO::ImageReader::sptr myReader = ::fwItkIO::ImageReader::New();
     myReader->setObject(image);
     myReader->setFile(pathInr);
diff --git a/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterTest.cpp b/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterTest.cpp
index b3f0587..08b8115 100644
--- a/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterTest.cpp
+++ b/SrcLib/io/fwItkIO/test/tu/src/ImageReaderWriterTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,11 +7,11 @@
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem/convenience.hpp>
 
+#include <fwCore/base.hpp>
+
 #include <fwTest/generator/Image.hpp>
 #include <fwTest/helper/compare.hpp>
 
-#include <fwDataCamp/visitor/CompareObjects.hpp>
-
 #include <fwItkIO/ImageWriter.hpp>
 #include <fwItkIO/ImageReader.hpp>
 
@@ -91,7 +91,7 @@ void ImageReaderWriterTest::stressTestInr()
 
 void ImageReaderWriterTest::stressTestInrWithType(::fwTools::Type type, int nbTest)
 {
-    for (int nb=0 ; nb < nbTest ; ++nb)
+    for (int nb = 0; nb < nbTest; ++nb)
     {
         ::fwData::Image::sptr image = ::fwData::Image::New();
         ::fwTest::generator::Image::generateRandomImage(image, type);
@@ -116,7 +116,7 @@ void ImageReaderWriterTest::checkSaveLoadInr( ::fwData::Image::sptr image )
     myWriter->write();
 
     // load Image
-    ::fwData::Image::sptr image2 = ::fwData::Image::New();
+    ::fwData::Image::sptr image2          = ::fwData::Image::New();
     ::fwItkIO::ImageReader::sptr myReader = ::fwItkIO::ImageReader::New();
     myReader->setObject(image2);
     myReader->setFile(PATH);
@@ -126,9 +126,13 @@ void ImageReaderWriterTest::checkSaveLoadInr( ::fwData::Image::sptr image )
 
     ::fwItkIO::ut::helper::roundSpacing(image2);
 
+
+    ::fwTest::helper::ExcludeSetType exclude;
+    exclude.insert("window_center");
+    exclude.insert("window_width");
     // check Image
     // inr only support float spacing and float origin => add tolerance for comparison (+/-0.00001)
-    CPPUNIT_ASSERT(::fwTest::helper::compare(image, image2));
+    CPPUNIT_ASSERT(::fwTest::helper::compare(image, image2, exclude));
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/io/fwItkIO/test/tu/src/helper.cpp b/SrcLib/io/fwItkIO/test/tu/src/helper.cpp
index 47e2ab7..eb6ffaa 100644
--- a/SrcLib/io/fwItkIO/test/tu/src/helper.cpp
+++ b/SrcLib/io/fwItkIO/test/tu/src/helper.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/io/fwPacsIO/CMakeLists.txt b/SrcLib/io/fwPacsIO/CMakeLists.txt
new file mode 100644
index 0000000..ef92aac
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/CMakeLists.txt
@@ -0,0 +1,10 @@
+fwLoadProperties()
+
+
+#racy compatibility
+
+find_package(Boost COMPONENTS filesystem REQUIRED)
+
+find_package(DCMTK REQUIRED)
+fwForwardInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwForwardLink( ${DCMTK_LIBRARIES} )
diff --git a/SrcLib/io/fwPacsIO/Properties.cmake b/SrcLib/io/fwPacsIO/Properties.cmake
new file mode 100644
index 0000000..253a4b9
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/Properties.cmake
@@ -0,0 +1,14 @@
+
+set( NAME fwPacsIO )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES
+    fwCore
+    fwTools
+    fwThread
+    fwData
+    fwMedData
+    fwCom
+    fwDcmtkTools
+    )
+set( REQUIREMENTS )
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp
new file mode 100644
index 0000000..fa3e66f
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesEnquirer.hpp
@@ -0,0 +1,205 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_SERIESENQUIRER_HPP__
+#define __FWPACSIO_SERIESENQUIRER_HPP__
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwPacsIO/config.hpp"
+
+#include <dcmtk/dcmnet/scu.h>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCore/BaseObject.hpp>
+#include <fwCore/macros.hpp>
+#include <fwTools/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+namespace fwPacsIO
+{
+
+/**
+ * @brief Reads DICOM series from pacs.
+ */
+class FWPACSIO_CLASS_API SeriesEnquirer : public ::fwCore::BaseObject,
+                                          protected DcmSCU
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (SeriesEnquirer)(::fwPacsIO::SeriesEnquirer),
+                                            (()), new SeriesEnquirer);
+    fwCoreAllowSharedFromThis();
+
+    FWPACSIO_API static const ::fwCom::Slots::SlotKeyType s_PROGRESS_CALLBACK_SLOT;
+    typedef ::fwCom::Slot<void (const std::string&, unsigned int, const std::string&)> ProgressCallbackSlotType;
+
+    typedef std::vector< std::string > InstanceUIDContainer;
+
+    typedef std::vector< ::boost::filesystem::path > InstancePathContainer;
+
+    /// Constructor
+    FWPACSIO_API SeriesEnquirer();
+
+    /// Destructor
+    FWPACSIO_API ~SeriesEnquirer();
+
+    /**
+     * @brief Initialize the connection
+     * @param[in] applicationTitle Local application title
+     * @param[in] peerHostName Pacs host name
+     * @param[in] peerPort Pacs port
+     * @param[in] peerApplicationTitle Pacs application title
+     * @param[in] path Local dicom folder path
+     * @param[in] moveApplicationTitle Move application title
+     * @param[in] progressCallback Progress callback
+     */
+    FWPACSIO_API void initialize(const std::string& applicationTitle,
+                                 const std::string& peerHostName, unsigned short peerPort,
+                                 const std::string& peerApplicationTitle,
+                                 const std::string& moveApplicationTitle = "",
+                                 ProgressCallbackSlotType::sptr progressCallback = ProgressCallbackSlotType::sptr());
+
+    /// Negotiate Association
+    FWPACSIO_API bool connect();
+
+    /// Release association
+    FWPACSIO_API void disconnect();
+
+    /// Assemble and send C-ECHO request
+    FWPACSIO_API bool pingPacs();
+
+    /// Return true if there is an existing association
+    FWPACSIO_API bool isConnectedToPacs() const;
+
+    /**
+     * @brief Find series by patient name
+     * @param[in] name Patient name
+     * @return dcmtk response list
+     */
+    FWPACSIO_API OFList< QRResponse* > findSeriesByPatientName(const std::string& name);
+
+    /**
+     * @brief Find series by study date
+     * @param[in] fromDate Beginning date
+     * @param[in] toDate Ending date
+     * @return dcmtk response list
+     */
+    FWPACSIO_API OFList< QRResponse* > findSeriesByDate(const std::string& fromDate, const std::string& toDate);
+
+    /**
+     * @brief Find series by series UID
+     * @param[in] uid Series UID
+     * @return dcmtk response list
+     */
+    FWPACSIO_API OFList< QRResponse* > findSeriesByUID(const std::string& uid);
+
+
+    /**
+     * @brief Find SOPInstanceUID of the specified instance
+     * @param[in] seriesInstanceUID Series instance UID
+     * @param[in] instanceNumber Instance number
+     * @return SOPInstanceUID corresponding to the instanceNumber
+     */
+    FWPACSIO_API std::string findSOPInstanceUID(const std::string& seriesInstanceUID, unsigned int instanceNumber);
+
+    /**
+     * @brief Pull series using C-MOVE requests
+     * @param[in] instanceUIDContainer Series instance UID container
+     */
+    FWPACSIO_API void pullSeriesUsingMoveRetrieveMethod(InstanceUIDContainer instanceUIDContainer);
+
+    /**
+     * @brief Pull series using C-GET requests
+     * @param[in] instanceUIDContainer Series instance UID container
+     */
+    FWPACSIO_API void pullSeriesUsingGetRetrieveMethod(InstanceUIDContainer instanceUIDContainer);
+
+    /**
+     * @brief Pull instance using C-MOVE requests
+     * @param[in] seriesInstanceUID Series instance UID
+     * @param[in] sopInstanceUID SOP Instance UID
+     */
+    FWPACSIO_API void pullInstanceUsingMoveRetrieveMethod(const std::string& seriesInstanceUID,
+                                                          const std::string& sopInstanceUID);
+
+    /**
+     * @brief Pull instance using C-GET requests
+     * @param[in] seriesInstanceUID Series instance UID
+     * @param[in] sopInstanceUID SOP Instance UID
+     */
+    FWPACSIO_API void pullInstanceUsingGetRetrieveMethod(const std::string& seriesInstanceUID,
+                                                         const std::string& sopInstanceUID);
+
+    /**
+     * @brief Push instances using C-STORE requests
+     * @param[in] pathContainer Instance paths container
+     */
+    FWPACSIO_API void pushSeries(const InstancePathContainer& pathContainer);
+
+protected:
+
+    /**
+     * @brief Send Find Request
+     * @param[in] dataset Request dataset
+     * @return dcmtk response list
+     */
+    FWPACSIO_API OFList< QRResponse* > sendFindRequest(DcmDataset dataset);
+
+    /**
+     * @brief Send Move Request
+     * @param[in] dataset Request dataset
+     * @return OFTrue on success
+     */
+    FWPACSIO_API OFCondition sendMoveRequest(DcmDataset dataset);
+
+    /**
+     * @brief Send Get Request
+     * @param[in] dataset Request dataset
+     * @return OFTrue on success
+     */
+    FWPACSIO_API OFCondition sendGetRequest(DcmDataset dataset);
+
+    /**
+     * @brief Send Store Request
+     * @param[in] path File path
+     * @return OFTrue on success
+     */
+    FWPACSIO_API OFCondition sendStoreRequest(const ::boost::filesystem::path& path);
+
+
+    /// Handle MOVE Response (Override)
+    FWPACSIO_API virtual OFCondition handleMOVEResponse(
+        const T_ASC_PresentationContextID presID, RetrieveResponse* response, OFBool& waitForNextResponse);
+
+    /// Handle STORE Request (Override)
+    FWPACSIO_API virtual OFCondition handleSTORERequest (
+        const T_ASC_PresentationContextID presID, DcmDataset* incomingObject,
+        OFBool& continueCGETSession, Uint16& cStoreReturnStatus);
+
+    /**
+     * @brief Find uncompressed presentation context
+     * @param[in] sopClass SOP class which needs the presentation context
+     */
+    FWPACSIO_API Uint8 findUncompressedPC(const OFString& sopClass);
+
+    /// MOVE destination AE Title
+    std::string m_moveApplicationTitle;
+
+    /// Path where the files must be saved
+    ::boost::filesystem::path m_path;
+
+    /// Progress callback slot
+    ProgressCallbackSlotType::sptr m_progressCallback;
+
+    /// Dowloaded instance index
+    unsigned int m_instanceIndex;
+};
+
+} // namespace fwPacsIO
+
+#endif /*__FWPACSIO_SERIESENQUIRER_HPP__*/
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp
new file mode 100644
index 0000000..d7298c3
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/SeriesRetriever.hpp
@@ -0,0 +1,88 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_SERIESRETRIEVER_HPP__
+#define __FWPACSIO_SERIESRETRIEVER_HPP__
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwPacsIO/config.hpp"
+
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slots.hpp>
+#include <fwCore/macros.hpp>
+#include <fwTools/ProgressAdviser.hpp>
+#include <fwTools/macros.hpp>
+
+#include <boost/filesystem/path.hpp>
+
+#include <dcmtk/dcmnet/scp.h>
+
+namespace fwPacsIO
+{
+
+/**
+ * @brief Reads DICOM series from pacs.
+ */
+class FWPACSIO_CLASS_API SeriesRetriever : public ::fwCore::BaseObject,
+                                           public DcmSCP
+{
+
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (SeriesRetriever)(::fwPacsIO::SeriesRetriever),
+                                            (()), new SeriesRetriever);
+    fwCoreAllowSharedFromThis();
+
+    FWPACSIO_API static const ::fwCom::Slots::SlotKeyType s_PROGRESS_CALLBACK_SLOT;
+    typedef ::fwCom::Slot<void (const std::string&, unsigned int, const std::string&)> ProgressCallbackSlotType;
+
+    /// Constructor
+    FWPACSIO_API SeriesRetriever();
+
+    /// Destructor
+    FWPACSIO_API ~SeriesRetriever();
+
+    /**
+     * @brief Initialize the connection
+     * @param[in] applicationTitle Move application title
+     * @param[in] applicationport Move application port
+     * @param[in] path Local dicom folder path
+     * @param[in] timeout Connection timeout
+     * @param[in] progressCallback Progress callback
+     */
+    FWPACSIO_API void initialize(const std::string& applicationTitle, unsigned short applicationport, int timeout = 3,
+                                 ProgressCallbackSlotType::sptr progressCallback = ProgressCallbackSlotType::sptr());
+
+    /// Start the server
+    FWPACSIO_API bool start();
+
+protected:
+    /// Handle Incoming Command (Override)
+    virtual OFCondition handleIncomingCommand(T_DIMSE_Message* incomingMsg,
+                                              const DcmPresentationContextInfo& presContextInfo);
+
+    /**
+     * @brief Handle C-STORE Request
+     * @param[in] incomingMsg Incoming DIMSE message
+     * @param[in] presID Presentation context ID
+     * @return OFTrue on success
+     */
+    virtual OFCondition handleSTORERequest(T_DIMSE_Message* incomingMsg, T_ASC_PresentationContextID presID);
+
+    /// Path where the files must be saved
+    ::boost::filesystem::path m_path;
+
+    /// Progress callback slot
+    ProgressCallbackSlotType::sptr m_progressCallback;
+
+    /// Dowloaded instance index
+    unsigned int m_instanceIndex;
+
+};
+
+} // namespace fwPacsIO
+
+#endif /*__FWPACSIO_SERIESRETRIEVER_HPP__*/
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/data/PacsConfiguration.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/data/PacsConfiguration.hpp
new file mode 100644
index 0000000..4d1ec98
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/data/PacsConfiguration.hpp
@@ -0,0 +1,198 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_DATA_PACSCONFIGURATION_HPP__
+#define __FWPACSIO_DATA_PACSCONFIGURATION_HPP__
+
+#include "fwPacsIO/config.hpp"
+
+#include <fwData/Object.hpp>
+#include <fwData/factory/new.hpp>
+
+fwCampAutoDeclareDataMacro((fwPacsIO)(data)(PacsConfiguration), FWPACSIO_API);
+
+namespace fwPacsIO
+{
+namespace data
+{
+/**
+ * @brief   This class defines a Pacs configuration.
+ */
+class FWPACSIO_CLASS_API PacsConfiguration : public ::fwData::Object
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro( (PacsConfiguration)(::fwData::Object), (()),
+                                            ::fwData::factory::New< PacsConfiguration >);
+    fwCampMakeFriendDataMacro((fwPacsIO)(data)(PacsConfiguration));
+
+
+    /**
+     * @brief Constructor
+     * @param key Private construction key
+     */
+    FWPACSIO_API PacsConfiguration(::fwData::Object::Key key);
+
+    /// Destructor
+    FWPACSIO_API virtual ~PacsConfiguration();
+
+    /// Defines shallow copy
+    FWPACSIO_API void shallowCopy( const Object::csptr& _source );
+
+    /// Defines deep copy
+    FWPACSIO_API void cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache);
+
+    /**
+     * @brief Retrieve Method
+     */
+    typedef enum
+    {
+        MOVE_RETRIEVE_METHOD = 1,
+        GET_RETRIEVE_METHOD  = 2,
+    } RETRIEVE_METHOD;
+
+    /**
+     * @name Getters / Setters
+     * @{ */
+
+    /**
+     * @brief Local application title
+     * @{ */
+    const std::string& getLocalApplicationTitle() const
+    {
+        return m_localApplicationTitle;
+    }
+
+    void setLocalApplicationTitle(const std::string& localApplicationTitle)
+    {
+        m_localApplicationTitle = localApplicationTitle;
+    }
+
+    /**  @} */
+
+    /**
+     * @brief Pacs host name
+     * @{ */
+    const std::string& getPacsHostName() const
+    {
+        return m_pacsHostName;
+    }
+
+    void setPacsHostName(const std::string& pacsHostName)
+    {
+        m_pacsHostName = pacsHostName;
+    }
+
+    /**  @} */
+
+    /**
+     * @brief Pacs application title
+     * @{ */
+    const std::string& getPacsApplicationTitle() const
+    {
+        return m_pacsApplicationTitle;
+    }
+
+    void setPacsApplicationTitle(const std::string& pacsApplicationTitle)
+    {
+        m_pacsApplicationTitle = pacsApplicationTitle;
+    }
+
+    /**  @} */
+
+    /**
+     * @brief Pacs port
+     * @{ */
+    const unsigned short& getPacsApplicationPort() const
+    {
+        return m_pacsApplicationPort;
+    }
+
+    void setPacsApplicationPort(const unsigned short& pacsApplicationPort)
+    {
+        m_pacsApplicationPort = pacsApplicationPort;
+    }
+
+    /**  @} */
+
+    /**
+     * @brief Move application title
+     * @{ */
+    const std::string& getMoveApplicationTitle() const
+    {
+        return m_moveApplicationTitle;
+    }
+
+    void setMoveApplicationTitle(const std::string& moveApplicationTitle)
+    {
+        m_moveApplicationTitle = moveApplicationTitle;
+    }
+
+    /**  @} */
+
+    /**
+     * @brief Move application port
+     * @{ */
+    unsigned short getMoveApplicationPort() const
+    {
+        return m_moveApplicationPort;
+    }
+
+    void setMoveApplicationPort(unsigned short moveApplicationPort)
+    {
+        m_moveApplicationPort = moveApplicationPort;
+    }
+
+    /**  @} */
+
+    /**
+     * @brief Request mode
+     * @{ */
+    RETRIEVE_METHOD getRetrieveMethod() const
+    {
+        return m_retrieveMethod;
+    }
+
+    void setRetrieveMethod(RETRIEVE_METHOD retrieveMethod)
+    {
+        m_retrieveMethod = retrieveMethod;
+    }
+
+    /**  @} */
+
+    /**  @} */
+
+
+protected:
+    /// Local application title
+    std::string m_localApplicationTitle;
+
+    /// Pacs host name
+    std::string m_pacsHostName;
+
+    /// Pacs application title
+    std::string m_pacsApplicationTitle;
+
+    /// Pacs application port
+    unsigned short m_pacsApplicationPort;
+
+    /// Move application title
+    std::string m_moveApplicationTitle;
+
+    /// Move application port
+    unsigned short m_moveApplicationPort;
+
+    /// Retrieve method
+    RETRIEVE_METHOD m_retrieveMethod;
+
+
+};
+
+} //namespace data
+} //namespace fwPacsIO
+
+#endif /* __FWPACSIO_DATA_PACSCONFIGURATION_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/Base.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/Base.hpp
new file mode 100644
index 0000000..12a0e0b
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/Base.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_EXCEPTIONS_BASE_HPP__
+#define __FWPACSIO_EXCEPTIONS_BASE_HPP__
+
+#include "fwPacsIO/config.hpp"
+
+#include <fwCore/Exception.hpp>
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+/**
+ * @brief Base class of fwPacsIO Exceptions
+ */
+class FWPACSIO_CLASS_API Base : public fwCore::Exception
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWPACSIO_API Base(const std::string& message);
+
+    /// Destructor
+    FWPACSIO_API virtual ~Base() throw ();
+
+};
+
+} //exceptions
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_EXCEPTIONS_BASE_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/NegociateAssociationFailure.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/NegociateAssociationFailure.hpp
new file mode 100644
index 0000000..73076d4
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/NegociateAssociationFailure.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_EXCEPTIONS_NEGOCIATEASSOCIATIONFAILURE_HPP__
+#define __FWPACSIO_EXCEPTIONS_NEGOCIATEASSOCIATIONFAILURE_HPP__
+
+#include "fwPacsIO/config.hpp"
+#include "fwPacsIO/exceptions/Base.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+/**
+ * @brief NegociateAssociationFailure Exceptions
+ */
+class FWPACSIO_CLASS_API NegociateAssociationFailure : public fwPacsIO::exceptions::Base
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWPACSIO_API NegociateAssociationFailure(const std::string& message);
+
+    /// Destructor
+    FWPACSIO_API virtual ~NegociateAssociationFailure() throw ();
+
+};
+
+} //exceptions
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_EXCEPTIONS_NEGOCIATEASSOCIATIONFAILURE_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/NetworkInitializationFailure.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/NetworkInitializationFailure.hpp
new file mode 100644
index 0000000..b5c901a
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/NetworkInitializationFailure.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_EXCEPTIONS_NETWORKINITIALIZATIONFAILURE_HPP__
+#define __FWPACSIO_EXCEPTIONS_NETWORKINITIALIZATIONFAILURE_HPP__
+
+#include "fwPacsIO/config.hpp"
+#include "fwPacsIO/exceptions/Base.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+/**
+ * @brief NetworkInitializationFailure Exceptions
+ */
+class FWPACSIO_CLASS_API NetworkInitializationFailure : public fwPacsIO::exceptions::Base
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWPACSIO_API NetworkInitializationFailure(const std::string& message);
+
+    /// Destructor
+    FWPACSIO_API virtual ~NetworkInitializationFailure() throw ();
+
+};
+
+} //exceptions
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_EXCEPTIONS_NETWORKINITIALIZATIONFAILURE_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/PresentationContextMissing.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/PresentationContextMissing.hpp
new file mode 100644
index 0000000..da4cda7
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/PresentationContextMissing.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_EXCEPTIONS_PRESENTATIONCONTEXTMISSING_HPP__
+#define __FWPACSIO_EXCEPTIONS_PRESENTATIONCONTEXTMISSING_HPP__
+
+#include "fwPacsIO/config.hpp"
+#include "fwPacsIO/exceptions/Base.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+/**
+ * @brief PresentationContextMissing Exceptions
+ */
+class FWPACSIO_CLASS_API PresentationContextMissing : public fwPacsIO::exceptions::Base
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWPACSIO_API PresentationContextMissing(const std::string& message);
+
+    /// Destructor
+    FWPACSIO_API virtual ~PresentationContextMissing() throw ();
+
+};
+
+} //exceptions
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_EXCEPTIONS_PRESENTATIONCONTEXTMISSING_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/RequestFailure.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/RequestFailure.hpp
new file mode 100644
index 0000000..c1e1d67
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/RequestFailure.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_EXCEPTIONS_REQUESTFAILURE_HPP__
+#define __FWPACSIO_EXCEPTIONS_REQUESTFAILURE_HPP__
+
+#include "fwPacsIO/config.hpp"
+#include "fwPacsIO/exceptions/Base.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+/**
+ * @brief RequestFailure Exceptions
+ */
+class FWPACSIO_CLASS_API RequestFailure : public fwPacsIO::exceptions::Base
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWPACSIO_API RequestFailure(const std::string& message);
+
+    /// Destructor
+    FWPACSIO_API virtual ~RequestFailure() throw ();
+
+};
+
+} //exceptions
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_EXCEPTIONS_REQUESTFAILURE_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/TagMissing.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/TagMissing.hpp
new file mode 100644
index 0000000..7de8965
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/exceptions/TagMissing.hpp
@@ -0,0 +1,39 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_EXCEPTIONS_TAGMISSING_HPP__
+#define __FWPACSIO_EXCEPTIONS_TAGMISSING_HPP__
+
+#include "fwPacsIO/config.hpp"
+#include "fwPacsIO/exceptions/Base.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+/**
+ * @brief TagMissing Exceptions
+ */
+class FWPACSIO_CLASS_API TagMissing : public fwPacsIO::exceptions::Base
+{
+public:
+    /**
+     * @brief Constructor
+     * @param[in] message Exception message
+     */
+    FWPACSIO_API TagMissing(const std::string& message);
+
+    /// Destructor
+    FWPACSIO_API virtual ~TagMissing() throw ();
+
+};
+
+} //exceptions
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_EXCEPTIONS_TAGMISSING_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/helper/Series.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/helper/Series.hpp
new file mode 100644
index 0000000..bb354c6
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/helper/Series.hpp
@@ -0,0 +1,76 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_HELPER_SERIES_HPP__
+#define __FWPACSIO_HELPER_SERIES_HPP__
+
+#include <dcmtk/config/osconfig.h>
+#include <dcmtk/dcmnet/scu.h>
+
+#include "fwPacsIO/config.hpp"
+#include "fwPacsIO/data/PacsConfiguration.hpp"
+
+#include <fwData/Vector.hpp>
+#include <fwMedData/SeriesDB.hpp>
+
+namespace fwMedData
+{
+class DicomSeries;
+}
+
+namespace fwMedData
+{
+class ImageSeries;
+class ModelSeries;
+}
+
+namespace fwPacsIO
+{
+namespace helper
+{
+
+/**
+ * @brief Series Helper
+ */
+class FWPACSIO_CLASS_API Series
+{
+public:
+
+    typedef ::fwMedData::SeriesDB::ContainerType DicomSeriesContainer;
+    typedef std::vector< std::string > InstanceUIDContainer;
+    typedef std::map < std::string, unsigned int > InstanceCountMap;
+
+    /**
+     * @brief Release the responses
+     * @param[in] responses Responses to free
+     */
+    FWPACSIO_API static void releaseResponses(OFList< QRResponse* > responses);
+
+    /**
+     * @brief Convert DCMTK series to ::fwMedData::DicomSeries
+     * @param[in] responses DCMTK responses from the pacs that must be converted
+     */
+    FWPACSIO_API static DicomSeriesContainer toFwMedData(OFList< QRResponse* > responses);
+
+    /**
+     * @brief Convert DCMTK series to instance uid vector
+     * @param[in] responses DCMTK responses from the pacs that must be converted
+     */
+    FWPACSIO_API static InstanceUIDContainer toSeriesInstanceUIDContainer(OFList< QRResponse* > responses);
+
+    /**
+     * @brief Convert std::vector< ::fwMedData::DicomSeries > to series instance uid container
+     * @param[in] series Series vector used to extract the series instance uids
+     */
+    FWPACSIO_API static InstanceUIDContainer toSeriesInstanceUIDContainer(DicomSeriesContainer series);
+
+};
+
+} //helper
+} //fwPacsIO
+
+
+#endif /* __FWPACSIO_HELPER_SERIES_HPP__ */
diff --git a/SrcLib/io/fwPacsIO/include/fwPacsIO/namespace.hpp b/SrcLib/io/fwPacsIO/include/fwPacsIO/namespace.hpp
new file mode 100644
index 0000000..1556c87
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/include/fwPacsIO/namespace.hpp
@@ -0,0 +1,32 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_NAMESPACE_HPP__
+#define __FWPACSIO_NAMESPACE_HPP__
+
+/// fwPacsIO contains classes used to communicate with a PACS.
+namespace fwPacsIO
+{
+
+/// data contains classes to manage PACS connections.
+namespace data
+{
+} // namespace data
+
+/// helper contains helper classes used to handle DCMTK objects.
+namespace helper
+{
+} // namespace helper
+
+/// exceptions contains PACS exceptions.
+namespace exceptions
+{
+} // namespace exceptions
+
+} // namespace fwPacsIO
+
+
+#endif // __FWPACSIO_NAMESPACE_HPP__
diff --git a/SrcLib/io/fwPacsIO/rc/storescp.cfg b/SrcLib/io/fwPacsIO/rc/storescp.cfg
new file mode 100644
index 0000000..4765c6c
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/rc/storescp.cfg
@@ -0,0 +1,210 @@
+#
+#  Copyright (C) 2003-2011, OFFIS e.V.
+#  All rights reserved.  See COPYRIGHT file for details.
+#
+#  This software and supporting documentation were developed by
+#
+#    OFFIS e.V.
+#    R&D Division Health
+#    Escherweg 2
+#    D-26121 Oldenburg, Germany
+#
+#  Module:  dcmnet
+#
+#  Author:  Marco Eichelberg
+#
+#  Purpose: Sample configuration file for storescp
+#
+
+# ============================================================================
+[[TransferSyntaxes]]
+# ============================================================================
+
+[Uncompressed]
+TransferSyntax1  = LocalEndianExplicit
+TransferSyntax2  = OppositeEndianExplicit
+TransferSyntax3  = LittleEndianImplicit
+
+[UncompressedOrZlib]
+TransferSyntax1  = DeflatedLittleEndianExplicit
+TransferSyntax2  = LocalEndianExplicit
+TransferSyntax3  = OppositeEndianExplicit
+TransferSyntax4  = LittleEndianImplicit
+
+[AnyTransferSyntax]
+TransferSyntax1  = JPEG2000
+TransferSyntax2  = JPEG2000LosslessOnly
+TransferSyntax3  = JPEGExtended:Process2+4
+TransferSyntax4  = JPEGBaseline
+TransferSyntax5  = JPEGLossless:Non-hierarchical-1stOrderPrediction
+TransferSyntax6  = JPEGLSLossy
+TransferSyntax7  = JPEGLSLossless
+TransferSyntax8  = RLELossless
+TransferSyntax9  = MPEG2MainProfile at MainLevel
+TransferSyntax10 = MPEG2MainProfile at HighLevel
+TransferSyntax11 = MPEG4HighProfile/Level4.1
+TransferSyntax12 = MPEG4BDcompatibleHighProfile/Level4.1
+TransferSyntax13 = DeflatedLittleEndianExplicit
+TransferSyntax14 = LocalEndianExplicit
+TransferSyntax15 = OppositeEndianExplicit
+TransferSyntax16 = LittleEndianImplicit
+
+# ============================================================================
+[[PresentationContexts]]
+# ============================================================================
+
+[GenericStorageSCP]
+#
+# Don't forget to support the Verification SOP Class.
+#
+PresentationContext1   = VerificationSOPClass\Uncompressed
+#
+# Accept image SOP classes with virtually any transfer syntax we know.
+# Accept non-image SOP classes uncompressed or with zlib compression only.
+#
+PresentationContext2   = BreastTomosynthesisImageStorage\AnyTransferSyntax
+PresentationContext3   = ComputedRadiographyImageStorage\AnyTransferSyntax
+PresentationContext4   = CTImageStorage\AnyTransferSyntax
+PresentationContext5   = DigitalIntraOralXRayImageStorageForPresentation\AnyTransferSyntax
+PresentationContext6   = DigitalIntraOralXRayImageStorageForProcessing\AnyTransferSyntax
+PresentationContext7   = DigitalMammographyXRayImageStorageForPresentation\AnyTransferSyntax
+PresentationContext8   = DigitalMammographyXRayImageStorageForProcessing\AnyTransferSyntax
+PresentationContext9   = DigitalXRayImageStorageForPresentation\AnyTransferSyntax
+PresentationContext10  = DigitalXRayImageStorageForProcessing\AnyTransferSyntax
+PresentationContext11  = EnhancedCTImageStorage\AnyTransferSyntax
+PresentationContext12  = EnhancedMRColorImageStorage\AnyTransferSyntax
+PresentationContext13  = EnhancedMRImageStorage\AnyTransferSyntax
+PresentationContext14  = EnhancedPETImageStorage\AnyTransferSyntax
+PresentationContext15  = EnhancedUSVolumeStorage\AnyTransferSyntax
+PresentationContext16  = EnhancedXAImageStorage\AnyTransferSyntax
+PresentationContext17  = EnhancedXRFImageStorage\AnyTransferSyntax
+PresentationContext18  = IntravascularOpticalCoherenceTomographyImageStorageForPresentation\AnyTransferSyntax
+PresentationContext19  = IntravascularOpticalCoherenceTomographyImageStorageForProcessing\AnyTransferSyntax
+PresentationContext20  = MRImageStorage\AnyTransferSyntax
+PresentationContext21  = MultiframeGrayscaleByteSecondaryCaptureImageStorage\AnyTransferSyntax
+PresentationContext22  = MultiframeGrayscaleWordSecondaryCaptureImageStorage\AnyTransferSyntax
+PresentationContext23  = MultiframeSingleBitSecondaryCaptureImageStorage\AnyTransferSyntax
+PresentationContext24  = MultiframeTrueColorSecondaryCaptureImageStorage\AnyTransferSyntax
+PresentationContext25  = NuclearMedicineImageStorage\AnyTransferSyntax
+PresentationContext26  = OphthalmicPhotography16BitImageStorage\AnyTransferSyntax
+PresentationContext27  = OphthalmicPhotography8BitImageStorage\AnyTransferSyntax
+PresentationContext28  = OphthalmicThicknessMapStorage\AnyTransferSyntax
+PresentationContext29  = OphthalmicTomographyImageStorage\AnyTransferSyntax
+PresentationContext30  = PositronEmissionTomographyImageStorage\AnyTransferSyntax
+PresentationContext31  = RTImageStorage\AnyTransferSyntax
+PresentationContext32  = SecondaryCaptureImageStorage\AnyTransferSyntax
+PresentationContext33  = UltrasoundImageStorage\AnyTransferSyntax
+PresentationContext34  = UltrasoundMultiframeImageStorage\AnyTransferSyntax
+PresentationContext35  = VideoEndoscopicImageStorage\AnyTransferSyntax
+PresentationContext36  = VideoMicroscopicImageStorage\AnyTransferSyntax
+PresentationContext37  = VideoPhotographicImageStorage\AnyTransferSyntax
+PresentationContext38  = VLEndoscopicImageStorage\AnyTransferSyntax
+PresentationContext39  = VLMicroscopicImageStorage\AnyTransferSyntax
+PresentationContext40  = VLPhotographicImageStorage\AnyTransferSyntax
+PresentationContext41  = VLSlideCoordinatesMicroscopicImageStorage\AnyTransferSyntax
+PresentationContext42  = VLWholeSlideMicroscopyImageStorage\AnyTransferSyntax
+PresentationContext43  = XRay3DAngiographicImageStorage\AnyTransferSyntax
+PresentationContext44  = XRay3DCraniofacialImageStorage\AnyTransferSyntax
+PresentationContext45  = XRayAngiographicImageStorage\AnyTransferSyntax
+PresentationContext46  = XRayRadiofluoroscopicImageStorage\AnyTransferSyntax
+# retired
+PresentationContext47  = RETIRED_HardcopyColorImageStorage\AnyTransferSyntax
+PresentationContext48  = RETIRED_HardcopyGrayscaleImageStorage\AnyTransferSyntax
+PresentationContext49  = RETIRED_NuclearMedicineImageStorage\AnyTransferSyntax
+PresentationContext50  = RETIRED_UltrasoundImageStorage\AnyTransferSyntax
+PresentationContext51  = RETIRED_UltrasoundMultiframeImageStorage\AnyTransferSyntax
+PresentationContext52  = RETIRED_VLImageStorage\AnyTransferSyntax
+PresentationContext53  = RETIRED_VLMultiFrameImageStorage\AnyTransferSyntax
+PresentationContext54  = RETIRED_XRayAngiographicBiPlaneImageStorage\AnyTransferSyntax
+#
+# the following presentation contexts are for non-image SOP classes
+#
+PresentationContext55  = AmbulatoryECGWaveformStorage\UncompressedOrZlib
+PresentationContext56  = ArterialPulseWaveformStorage\UncompressedOrZlib
+PresentationContext57  = AutorefractionMeasurementsStorage\UncompressedOrZlib
+PresentationContext58  = BasicStructuredDisplayStorage\UncompressedOrZlib
+PresentationContext59  = BasicTextSRStorage\UncompressedOrZlib
+PresentationContext60  = BasicVoiceAudioWaveformStorage\UncompressedOrZlib
+PresentationContext61  = BlendingSoftcopyPresentationStateStorage\UncompressedOrZlib
+PresentationContext62  = CardiacElectrophysiologyWaveformStorage\UncompressedOrZlib
+PresentationContext63  = ChestCADSRStorage\UncompressedOrZlib
+PresentationContext64  = ColonCADSRStorage\UncompressedOrZlib
+PresentationContext65  = ColorSoftcopyPresentationStateStorage\UncompressedOrZlib
+PresentationContext66  = ComprehensiveSRStorage\UncompressedOrZlib
+PresentationContext67  = DeformableSpatialRegistrationStorage\UncompressedOrZlib
+PresentationContext68  = EncapsulatedCDAStorage\UncompressedOrZlib
+PresentationContext69  = EncapsulatedPDFStorage\UncompressedOrZlib
+PresentationContext70  = EnhancedSRStorage\UncompressedOrZlib
+PresentationContext71  = GeneralAudioWaveformStorage\UncompressedOrZlib
+PresentationContext72  = GeneralECGWaveformStorage\UncompressedOrZlib
+PresentationContext73  = GenericImplantTemplateStorage\UncompressedOrZlib
+PresentationContext74  = GrayscaleSoftcopyPresentationStateStorage\UncompressedOrZlib
+PresentationContext75  = HemodynamicWaveformStorage\UncompressedOrZlib
+PresentationContext76  = ImplantAssemblyTemplateStorage\UncompressedOrZlib
+PresentationContext77  = ImplantationPlanSRDocumentStorage\UncompressedOrZlib
+PresentationContext78  = ImplantTemplateGroupStorage\UncompressedOrZlib
+PresentationContext79  = IntraocularLensCalculationsStorage\UncompressedOrZlib
+PresentationContext80  = KeratometryMeasurementsStorage\UncompressedOrZlib
+PresentationContext81  = KeyObjectSelectionDocumentStorage\UncompressedOrZlib
+PresentationContext82  = LensometryMeasurementsStorage\UncompressedOrZlib
+PresentationContext83  = MacularGridThicknessAndVolumeReportStorage\UncompressedOrZlib
+PresentationContext84  = MammographyCADSRStorage\UncompressedOrZlib
+PresentationContext85  = MRSpectroscopyStorage\UncompressedOrZlib
+PresentationContext86  = OphthalmicAxialMeasurementsStorage\UncompressedOrZlib
+PresentationContext87  = OphthalmicVisualFieldStaticPerimetryMeasurementsStorage\UncompressedOrZlib
+PresentationContext88  = ProcedureLogStorage\UncompressedOrZlib
+PresentationContext89  = PseudoColorSoftcopyPresentationStateStorage\UncompressedOrZlib
+PresentationContext90  = RawDataStorage\UncompressedOrZlib
+PresentationContext91  = RealWorldValueMappingStorage\UncompressedOrZlib
+PresentationContext92  = RespiratoryWaveformStorage\UncompressedOrZlib
+PresentationContext93  = RTBeamsDeliveryInstructionStorage\UncompressedOrZlib
+PresentationContext94  = RTBeamsTreatmentRecordStorage\UncompressedOrZlib
+PresentationContext95  = RTBrachyTreatmentRecordStorage\UncompressedOrZlib
+PresentationContext96  = RTDoseStorage\UncompressedOrZlib
+PresentationContext97  = RTIonBeamsTreatmentRecordStorage\UncompressedOrZlib
+PresentationContext98  = RTIonPlanStorage\UncompressedOrZlib
+PresentationContext99  = RTPlanStorage\UncompressedOrZlib
+PresentationContext100 = RTStructureSetStorage\UncompressedOrZlib
+PresentationContext101 = RTTreatmentSummaryRecordStorage\UncompressedOrZlib
+PresentationContext102 = SegmentationStorage\UncompressedOrZlib
+PresentationContext103 = SpatialFiducialsStorage\UncompressedOrZlib
+PresentationContext104 = SpatialRegistrationStorage\UncompressedOrZlib
+PresentationContext105 = SpectaclePrescriptionReportStorage\UncompressedOrZlib
+PresentationContext106 = StereometricRelationshipStorage\UncompressedOrZlib
+PresentationContext107 = SubjectiveRefractionMeasurementsStorage\UncompressedOrZlib
+PresentationContext108 = SurfaceSegmentationStorage\UncompressedOrZlib
+PresentationContext109 = TwelveLeadECGWaveformStorage\UncompressedOrZlib
+PresentationContext110 = VisualAcuityMeasurementsStorage\UncompressedOrZlib
+PresentationContext111 = XAXRFGrayscaleSoftcopyPresentationStateStorage\UncompressedOrZlib
+PresentationContext112 = XRayRadiationDoseSRStorage\UncompressedOrZlib
+# retired
+PresentationContext113 = RETIRED_StandaloneCurveStorage\UncompressedOrZlib
+PresentationContext114 = RETIRED_StandaloneModalityLUTStorage\UncompressedOrZlib
+PresentationContext115 = RETIRED_StandaloneOverlayStorage\UncompressedOrZlib
+PresentationContext116 = RETIRED_StandalonePETCurveStorage\UncompressedOrZlib
+PresentationContext117 = RETIRED_StandaloneVOILUTStorage\UncompressedOrZlib
+PresentationContext118 = RETIRED_StoredPrintStorage\UncompressedOrZlib
+# draft
+PresentationContext119 = DRAFT_RTBeamsDeliveryInstructionStorage\UncompressedOrZlib
+PresentationContext120 = DRAFT_SRAudioStorage\UncompressedOrZlib
+PresentationContext121 = DRAFT_SRComprehensiveStorage\UncompressedOrZlib
+PresentationContext122 = DRAFT_SRDetailStorage\UncompressedOrZlib
+PresentationContext123 = DRAFT_SRTextStorage\UncompressedOrZlib
+PresentationContext124 = DRAFT_WaveformStorage\UncompressedOrZlib
+#
+# the following SOP classes are missing in the above list:
+#
+# - DICOS_CTImageStorage
+# - DICOS_DigitalXRayImageStorageForPresentation
+# - DICOS_DigitalXRayImageStorageForProcessing
+# - DICOS_ThreatDetectionReportStorage
+#
+# - DICONDE_EddyCurrentImageStorage
+# - DICONDE_EddyCurrentMultiframeImageStorage
+
+# ============================================================================
+[[Profiles]]
+# ============================================================================
+
+[Default]
+PresentationContexts = GenericStorageSCP
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesEnquirer.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesEnquirer.cpp
new file mode 100644
index 0000000..7fa9ba8
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesEnquirer.cpp
@@ -0,0 +1,648 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwPacsIO/SeriesEnquirer.hpp"
+#include "fwPacsIO/exceptions/NegociateAssociationFailure.hpp"
+#include "fwPacsIO/exceptions/NetworkInitializationFailure.hpp"
+#include "fwPacsIO/exceptions/PresentationContextMissing.hpp"
+#include "fwPacsIO/exceptions/RequestFailure.hpp"
+#include "fwPacsIO/exceptions/TagMissing.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwTools/System.hpp>
+
+#include <fwDcmtkTools/Dictionary.hpp>
+
+#include <dcmtk/dcmdata/dcfilefo.h>
+#include <dcmtk/dcmnet/diutil.h>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/foreach.hpp>
+
+namespace fwPacsIO
+{
+
+const ::fwCom::Slots::SlotKeyType SeriesEnquirer::s_PROGRESS_CALLBACK_SLOT = "CGetProgressCallback";
+
+SeriesEnquirer::SeriesEnquirer() :
+    m_moveApplicationTitle(""),
+    m_path(""),
+    m_progressCallback(ProgressCallbackSlotType::sptr()),
+    m_instanceIndex(0)
+{
+
+}
+
+// ----------------------------------------------------------------------------
+
+SeriesEnquirer::~SeriesEnquirer()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+Uint8 SeriesEnquirer::findUncompressedPC(const OFString& sopClass)
+{
+    Uint8 pc;
+    pc = this->findPresentationContextID(sopClass, UID_LittleEndianExplicitTransferSyntax);
+    if (pc == 0)
+    {
+        pc = this->findPresentationContextID(sopClass, UID_BigEndianExplicitTransferSyntax);
+    }
+    if (pc == 0)
+    {
+        pc = this->findPresentationContextID(sopClass, UID_LittleEndianImplicitTransferSyntax);
+    }
+    return pc;
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::initialize(const std::string& applicationTitle, const std::string& peerHostName,
+                                unsigned short peerPort, const std::string& peerApplicationTitle,
+                                const std::string& moveApplicationTitle,
+                                ProgressCallbackSlotType::sptr progressCallback)
+{
+    //Save move application title for move requests
+    m_moveApplicationTitle = moveApplicationTitle;
+
+    //Store Callback
+    m_progressCallback = progressCallback;
+
+    //Creating folder
+    m_path = ::fwTools::System::getTemporaryFolder() / "dicom/";
+    if (!m_path.empty() && !::boost::filesystem::exists(m_path))
+    {
+        ::boost::filesystem::create_directories(m_path);
+    }
+
+    //Load dictionary
+    ::fwDcmtkTools::Dictionary::loadDictionary();
+
+    //Configure network connection
+    this->setAETitle(applicationTitle.c_str());
+    this->setPeerHostName(peerHostName.c_str());
+    this->setPeerPort(peerPort);
+    this->setPeerAETitle(peerApplicationTitle.c_str());
+
+    // Clear presentation context
+    this->clearPresentationContexts();
+
+    // Use presentation context for FIND/MOVE in study root, propose all uncompressed transfer syntaxes
+    OFList < OFString > transferSyntaxes;
+    transferSyntaxes.push_back(UID_LittleEndianImplicitTransferSyntax);
+    transferSyntaxes.push_back(UID_LittleEndianExplicitTransferSyntax);
+    transferSyntaxes.push_back(UID_BigEndianExplicitTransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess1TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess2_4TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess3_5TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess6_8TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess7_9TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess10_12TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess11_13TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess14TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess15TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess16_18TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess17_19TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess20_22TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess21_23TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess24_26TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess25_27TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess28TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess29TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGProcess14SV1TransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGLSLosslessTransferSyntax);
+    transferSyntaxes.push_back(UID_JPEGLSLossyTransferSyntax);
+    transferSyntaxes.push_back(UID_RLELosslessTransferSyntax);
+    transferSyntaxes.push_back(UID_DeflatedExplicitVRLittleEndianTransferSyntax);
+    transferSyntaxes.push_back(UID_JPEG2000LosslessOnlyTransferSyntax);
+    transferSyntaxes.push_back(UID_JPEG2000TransferSyntax);
+    transferSyntaxes.push_back(UID_MPEG2MainProfileAtMainLevelTransferSyntax);
+    transferSyntaxes.push_back(UID_MPEG2MainProfileAtHighLevelTransferSyntax);
+    transferSyntaxes.push_back(UID_JPEG2000Part2MulticomponentImageCompressionLosslessOnlyTransferSyntax);
+    transferSyntaxes.push_back(UID_JPEG2000Part2MulticomponentImageCompressionTransferSyntax);
+    transferSyntaxes.push_back(UID_JPIPReferencedTransferSyntax);
+    transferSyntaxes.push_back(UID_JPIPReferencedDeflateTransferSyntax);
+    transferSyntaxes.push_back(UID_RFC2557MIMEEncapsulationTransferSyntax);
+    transferSyntaxes.push_back(UID_XMLEncodingTransferSyntax);
+
+    // Add Verification SOP Class presentation context
+    this->addPresentationContext(UID_VerificationSOPClass, transferSyntaxes);
+
+    // Add study presentation context
+    this->addPresentationContext(UID_FINDStudyRootQueryRetrieveInformationModel, transferSyntaxes);
+    this->addPresentationContext(UID_MOVEStudyRootQueryRetrieveInformationModel, transferSyntaxes);
+    this->addPresentationContext(UID_GETStudyRootQueryRetrieveInformationModel, transferSyntaxes);
+
+    // Add presentation context for C-GET store requests
+    for (Uint16 j = 0; j < numberOfDcmLongSCUStorageSOPClassUIDs; j++)
+    {
+        this->addPresentationContext(dcmLongSCUStorageSOPClassUIDs[j], transferSyntaxes, ASC_SC_ROLE_SCP);
+    }
+
+}
+
+// ----------------------------------------------------------------------------
+
+bool SeriesEnquirer::connect()
+{
+    // Initialize network
+    OFCondition result = this->initNetwork();
+    if (result.bad())
+    {
+        const std::string msg = "Unable to set up the network: " + std::string(result.text());
+        throw ::fwPacsIO::exceptions::NetworkInitializationFailure(msg);
+    }
+
+    // Negotiate Association
+    result = this->negotiateAssociation();
+    if (result.bad())
+    {
+        const std::string msg = "Unable to negotiate association: " + std::string(result.text());
+        throw ::fwPacsIO::exceptions::NegociateAssociationFailure(msg);
+    }
+
+    return true;
+
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::disconnect()
+{
+    this->closeAssociation(DCMSCU_RELEASE_ASSOCIATION);
+}
+
+// ----------------------------------------------------------------------------
+
+bool SeriesEnquirer::isConnectedToPacs() const
+{
+    return this->isConnected();
+}
+
+// ----------------------------------------------------------------------------
+
+bool SeriesEnquirer::pingPacs()
+{
+    return this->sendECHORequest(0).good();
+}
+
+// ----------------------------------------------------------------------------
+
+OFList< QRResponse* > SeriesEnquirer::sendFindRequest(DcmDataset dataset)
+{
+    OFList< QRResponse* > findResponses;
+
+    // Try to find a presentation context
+    T_ASC_PresentationContextID presID = this->findUncompressedPC(UID_FINDStudyRootQueryRetrieveInformationModel);
+    if (presID == 0)
+    {
+        const std::string msg = "There is no uncompressed presentation context for Study Root FIND";
+        throw ::fwPacsIO::exceptions::PresentationContextMissing(msg);
+    }
+
+    // Send the request
+    OFCondition result = this->sendFINDRequest(presID, &dataset, &findResponses);
+
+    return findResponses;
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesEnquirer::sendMoveRequest(DcmDataset dataset)
+{
+    // Be sure that the needed informations are set
+    SLM_ASSERT("The path where to store the series is not set.", !m_path.empty());
+    SLM_ASSERT("The move application title is not set.", !m_moveApplicationTitle.empty());
+
+    // Try to find a presentation context
+    T_ASC_PresentationContextID presID = this->findUncompressedPC(UID_MOVEStudyRootQueryRetrieveInformationModel);
+    SLM_WARN_IF("There is no uncompressed presentation context for Study Root MOVE", presID == 0);
+
+    // Fetches all images of this particular study
+    OFCondition result;
+    OFList< RetrieveResponse* > dataResponse;
+    return this->sendMOVERequest(presID, m_moveApplicationTitle.c_str(), &dataset, &dataResponse);
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesEnquirer::sendGetRequest(DcmDataset dataset)
+{
+    // Be sure that the needed informations are set
+    SLM_ASSERT("The path where to store the series is not set.", !m_path.empty());
+
+    // Try to find a presentation context
+    T_ASC_PresentationContextID presID = this->findUncompressedPC(UID_GETStudyRootQueryRetrieveInformationModel);
+
+    if (presID == 0)
+    {
+        SLM_WARN("There is no uncompressed presentation context for Study Root GET");
+    }
+
+    // Fetches all images of this particular study
+    OFCondition result;
+    OFList< RetrieveResponse* > dataResponse;
+    return this->sendCGETRequest(presID, &dataset, &dataResponse);
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesEnquirer::sendStoreRequest(const ::boost::filesystem::path& path)
+{
+    // Try to find a presentation context
+    T_ASC_PresentationContextID presID = this->findUncompressedPC(UID_MOVEStudyRootQueryRetrieveInformationModel);
+
+    if (presID == 0)
+    {
+        SLM_WARN("There is no uncompressed presentation context for Study Root GET");
+    }
+
+    Uint16 rspStatusCode;
+    OFCondition result = this->sendSTORERequest(presID, OFString(path.string().c_str()), 0, rspStatusCode);
+    OSLM_WARN("PACS RESPONSE :" << rspStatusCode);
+    return result;
+
+}
+
+// ----------------------------------------------------------------------------
+
+OFList< QRResponse* > SeriesEnquirer::findSeriesByPatientName(const std::string& name)
+{
+    // Dataset used to store query informations
+    DcmDataset dataset;
+    dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
+    dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, "");
+
+    // Search by patient name
+    std::string searchString = "*" + name + "*";
+    dataset.putAndInsertOFStringArray(DCM_PatientName, searchString.c_str());
+
+    // Fields needed by DICOMSeries
+    //dataset.putAndInsertOFStringArray(DCM_PatientName, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientID, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientBirthDate, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientSex, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyInstanceUID, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyDate, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyTime, "");
+    dataset.putAndInsertOFStringArray(DCM_ReferringPhysicianName, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyDescription, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientAge, "");
+    dataset.putAndInsertOFStringArray(DCM_InstitutionName, "");
+    dataset.putAndInsertOFStringArray(DCM_Modality, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesDate, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesTime, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesDescription, "");
+    dataset.putAndInsertOFStringArray(DCM_PerformingPhysicianName, "");
+
+    // Number of instances
+    dataset.putAndInsertOFStringArray(DCM_NumberOfSeriesRelatedInstances, "");
+
+    return this->sendFindRequest(dataset);
+}
+
+// ----------------------------------------------------------------------------
+
+OFList< QRResponse* > SeriesEnquirer::findSeriesByDate(const std::string& fromDate, const std::string& toDate)
+{
+    // Dataset used to store query informations
+    DcmDataset dataset;
+    dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
+    dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, "");
+
+    // Search by date
+    std::string searchString = fromDate + "-" + toDate;
+    dataset.putAndInsertOFStringArray(DCM_StudyDate, searchString.c_str());
+
+    // Fields needed by DICOMSeries
+    dataset.putAndInsertOFStringArray(DCM_PatientName, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientID, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientBirthDate, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientSex, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyInstanceUID, "");
+    //dataset.putAndInsertOFStringArray(DCM_StudyDate, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyTime, "");
+    dataset.putAndInsertOFStringArray(DCM_ReferringPhysicianName, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyDescription, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientAge, "");
+    dataset.putAndInsertOFStringArray(DCM_InstitutionName, "");
+    dataset.putAndInsertOFStringArray(DCM_Modality, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesDate, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesTime, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesDescription, "");
+    dataset.putAndInsertOFStringArray(DCM_PerformingPhysicianName, "");
+
+    // Number of instances
+    dataset.putAndInsertOFStringArray(DCM_NumberOfSeriesRelatedInstances, "");
+
+    return this->sendFindRequest(dataset);
+}
+
+// ----------------------------------------------------------------------------
+
+OFList< QRResponse* > SeriesEnquirer::findSeriesByUID(const std::string& uid)
+{
+    // Dataset used to store query informations
+    DcmDataset dataset;
+    dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
+
+    // Search by series UID
+    dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, uid.c_str());
+
+    // Fields needed by DICOMSeries
+    dataset.putAndInsertOFStringArray(DCM_PatientName, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientID, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientBirthDate, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientSex, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyInstanceUID, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyDate, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyTime, "");
+    dataset.putAndInsertOFStringArray(DCM_ReferringPhysicianName, "");
+    dataset.putAndInsertOFStringArray(DCM_StudyDescription, "");
+    dataset.putAndInsertOFStringArray(DCM_PatientAge, "");
+    dataset.putAndInsertOFStringArray(DCM_InstitutionName, "");
+    dataset.putAndInsertOFStringArray(DCM_Modality, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesDate, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesTime, "");
+    dataset.putAndInsertOFStringArray(DCM_SeriesDescription, "");
+    dataset.putAndInsertOFStringArray(DCM_PerformingPhysicianName, "");
+
+    // Number of instances
+    dataset.putAndInsertOFStringArray(DCM_NumberOfSeriesRelatedInstances, "");
+
+    return this->sendFindRequest(dataset);
+}
+
+// ----------------------------------------------------------------------------
+
+std::string SeriesEnquirer::findSOPInstanceUID(const std::string& seriesInstanceUID, unsigned int instanceNumber)
+{
+    // Dataset used to store query informations
+    DcmDataset dataset;
+    dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "IMAGE");
+    dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, seriesInstanceUID.c_str());
+    dataset.putAndInsertOFStringArray(DCM_SOPInstanceUID, "");
+    std::stringstream ss;
+    ss << instanceNumber;
+    dataset.putAndInsertOFStringArray(DCM_InstanceNumber, ss.str().c_str());
+
+    OFList< QRResponse* > responses = this->sendFindRequest(dataset);
+    OFIterator< QRResponse* > it    = responses.begin();
+    std::string sopInstanceUID      = "";
+    if(it != responses.end() && (*it)->m_dataset)
+    {
+        OFString sop;
+        (*it)->m_dataset->findAndGetOFStringArray(DCM_SOPInstanceUID, sop);
+        sopInstanceUID = sop.c_str();
+    }
+
+    //Release responses
+    while (!responses.empty())
+    {
+        delete responses.front();
+        responses.pop_front();
+    }
+
+    return sopInstanceUID;
+
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::pullSeriesUsingMoveRetrieveMethod(InstanceUIDContainer instanceUIDContainer)
+{
+    // Reset instance count
+    m_instanceIndex = 0;
+
+    DcmDataset dataset;
+    OFCondition result;
+
+    for( std::string seriesInstanceUID: instanceUIDContainer )
+    {
+        dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
+        dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, seriesInstanceUID.c_str());
+
+        // Fetches all images of this particular study
+        result = this->sendMoveRequest(dataset);
+
+        if (result.good())
+        {
+            SLM_TRACE("Received series " + seriesInstanceUID);
+        }
+        else
+        {
+            const std::string msg = "Unable to send a C-MOVE request to the server. "
+                                    "(Series instance UID =" + std::string(seriesInstanceUID.c_str()) +") : "
+                                    + std::string(result.text());
+            throw ::fwPacsIO::exceptions::RequestFailure(msg);
+        }
+    }
+
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::pullSeriesUsingGetRetrieveMethod(InstanceUIDContainer instanceUIDContainer)
+{
+    // Reset instance count
+    m_instanceIndex = 0;
+
+    DcmDataset dataset;
+    OFCondition result;
+
+    for( std::string seriesInstanceUID: instanceUIDContainer )
+    {
+        dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
+        dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, seriesInstanceUID.c_str());
+
+        // Fetches all images of this particular study
+        result = this->sendGetRequest(dataset);
+
+        if (result.good())
+        {
+            SLM_TRACE("Received series " + seriesInstanceUID);
+        }
+        else
+        {
+            const std::string msg = "Unable to send a C-GET request to the server. "
+                                    "(Series instance UID =" + std::string(seriesInstanceUID.c_str()) +") : "
+                                    + std::string(result.text());
+            throw ::fwPacsIO::exceptions::RequestFailure(msg);
+        }
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::pullInstanceUsingMoveRetrieveMethod(const std::string& seriesInstanceUID,
+                                                         const std::string& sopInstanceUID)
+{
+    // Reset instance count
+    m_instanceIndex = 0;
+
+    DcmDataset dataset;
+    OFCondition result;
+    dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "IMAGE");
+    dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, seriesInstanceUID.c_str());
+
+    dataset.putAndInsertOFStringArray(DCM_SOPInstanceUID, sopInstanceUID.c_str());
+    dataset.putAndInsertOFStringArray(DCM_InstanceNumber, "");
+
+    // Fetches all images of this particular study
+    result = this->sendMoveRequest(dataset);
+
+    if (result.good())
+    {
+        SLM_TRACE("Received instance " + seriesInstanceUID + " - " + sopInstanceUID);
+    }
+    else
+    {
+        const std::string msg = "Unable to send a C-MOVE request to the server. "
+                                "(Series instance UID =" + std::string(seriesInstanceUID.c_str()) +") : "
+                                + std::string(result.text());
+        throw ::fwPacsIO::exceptions::RequestFailure(msg);
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::pullInstanceUsingGetRetrieveMethod(const std::string& seriesInstanceUID,
+                                                        const std::string& sopInstanceUID)
+{
+    // Reset instance count
+    m_instanceIndex = 0;
+
+    DcmDataset dataset;
+    OFCondition result;
+    dataset.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "IMAGE");
+    dataset.putAndInsertOFStringArray(DCM_SeriesInstanceUID, seriesInstanceUID.c_str());
+
+    dataset.putAndInsertOFStringArray(DCM_SOPInstanceUID, sopInstanceUID.c_str());
+    dataset.putAndInsertOFStringArray(DCM_InstanceNumber, "");
+
+    // Fetches all images of this particular study
+    result = this->sendGetRequest(dataset);
+
+    if (result.good())
+    {
+        SLM_TRACE("Received instance " + seriesInstanceUID + " - " + sopInstanceUID);
+    }
+    else
+    {
+        const std::string msg = "Unable to send a C-GET request to the server. "
+                                "(Series instance UID =" + std::string(seriesInstanceUID.c_str()) +") : "
+                                + std::string(result.text());
+        throw ::fwPacsIO::exceptions::RequestFailure(msg);
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesEnquirer::pushSeries(const InstancePathContainer& pathContainer)
+{
+    // Reset instance count
+    m_instanceIndex = 0;
+
+    OFCondition result;
+
+    // Send images to pacs
+    for(const ::boost::filesystem::path& path: pathContainer)
+    {
+        result = this->sendStoreRequest(path);
+
+        if (result.good())
+        {
+            SLM_TRACE("Instance sent.");
+        }
+        else
+        {
+            const std::string msg = "Unable to send a C-STORE request to the server : " + std::string(result.text());
+            throw ::fwPacsIO::exceptions::RequestFailure(msg);
+        }
+
+        // Notify callback
+        if(m_progressCallback)
+        {
+            m_progressCallback->asyncRun("", ++m_instanceIndex, path.string());
+        }
+
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesEnquirer::handleMOVEResponse(
+    const T_ASC_PresentationContextID presID, RetrieveResponse* response, OFBool& waitForNextResponse)
+{
+    OFCondition result = DcmSCU::handleMOVEResponse(presID, response, waitForNextResponse);
+
+    // Check error status
+    bool error = (response->m_status != STATUS_Success) && (response->m_status != STATUS_Pending);
+
+    // Notify error
+    if(error)
+    {
+        const std::string msg = "Unable to perform a C-MOVE operation.";
+        throw ::fwPacsIO::exceptions::RequestFailure(msg);
+    }
+
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesEnquirer::handleSTORERequest (
+    const T_ASC_PresentationContextID presID, DcmDataset* incomingObject,
+    OFBool& continueCGETSession, Uint16& cStoreReturnStatus)
+{
+    OFCondition result;
+
+    if (incomingObject != NULL)
+    {
+        //Find the series UID
+        OFString seriesID;
+        if(incomingObject->findAndGetOFStringArray(DCM_SeriesInstanceUID, seriesID).good())
+        {
+            SLM_TRACE("Series Instance UID: " + std::string(seriesID.c_str()));
+        }
+
+        //Find the instance UID
+        OFString iname;
+        if (incomingObject->findAndGetOFStringArray(DCM_SOPInstanceUID, iname).good())
+        {
+            SLM_TRACE("SOP Instance UID: " + std::string(iname.c_str()));
+        }
+
+        //Create Folder
+        ::boost::filesystem::path seriesPath = ::boost::filesystem::path(m_path.string() + seriesID.c_str() + "/");
+        if (!::boost::filesystem::exists(seriesPath))
+        {
+            ::boost::filesystem::create_directories(seriesPath);
+        }
+
+        //Save the file in the specified folder (Create new meta header for gdcm reader)
+        std::string filePath = seriesPath.string() + iname.c_str();
+        DcmFileFormat fileFormat(incomingObject);
+        fileFormat.saveFile(filePath.c_str(), EXS_Unknown, EET_UndefinedLength,
+                            EGL_recalcGL, EPD_noChange, 0, 0, EWM_createNewMeta);
+
+        // Notify callback
+        if(m_progressCallback)
+        {
+            m_progressCallback->asyncRun(seriesID.c_str(), ++m_instanceIndex, filePath);
+        }
+    }
+
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+} //namespace fwPacsIO
+
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesRetriever.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesRetriever.cpp
new file mode 100644
index 0000000..91d1cf5
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/SeriesRetriever.cpp
@@ -0,0 +1,184 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <dcmtk/config/osconfig.h>
+
+#include "fwPacsIO/SeriesRetriever.hpp"
+#include "fwPacsIO/exceptions/RequestFailure.hpp"
+
+#include <fwThread/Worker.hpp>
+#include <fwTools/System.hpp>
+
+#include <fwDcmtkTools/Dictionary.hpp>
+
+#include <dcmtk/dcmnet/diutil.h>
+
+#include <boost/filesystem/operations.hpp>
+
+namespace fwPacsIO
+{
+
+const ::fwCom::Slots::SlotKeyType SeriesRetriever::s_PROGRESS_CALLBACK_SLOT = "CMoveProgressCallback";
+
+// ----------------------------------------------------------------------------
+
+SeriesRetriever::SeriesRetriever() :
+    m_path(""),
+    m_progressCallback(ProgressCallbackSlotType::sptr())
+{
+}
+
+// ----------------------------------------------------------------------------
+
+SeriesRetriever::~SeriesRetriever()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void SeriesRetriever::initialize(const std::string& applicationTitle,
+                                 unsigned short applicationport, int timeout,
+                                 ProgressCallbackSlotType::sptr progressCallback)
+{
+    //Callback
+    m_progressCallback = progressCallback;
+
+    //Creating folder
+    m_path = ::fwTools::System::getTemporaryFolder() / "dicom/";
+    if (!::boost::filesystem::exists(m_path))
+    {
+        ::boost::filesystem::create_directories(m_path);
+    }
+
+    // Load dictionary
+    ::fwDcmtkTools::Dictionary::loadDictionary();
+
+    //Configure network connection
+    this->setAETitle(applicationTitle.c_str());
+    this->setPort(applicationport);
+
+    // Load configuration
+    ::boost::filesystem::path cfgPath(::boost::filesystem::initial_path< ::boost::filesystem::path >());
+    cfgPath = cfgPath / "share/fwPacsIO_0-1/storescp.cfg";
+    SLM_ASSERT("storescp.cfg not found !", ::boost::filesystem::exists(cfgPath));
+    this->loadAssociationCfgFile(cfgPath.string().c_str());
+    this->setAndCheckAssociationProfile("Default");
+
+    // Set non blocking states & timeout so we don't end up in an infinite loop
+    this->setConnectionTimeout(timeout);
+    this->setConnectionBlockingMode(DUL_NOBLOCK);
+}
+
+// ----------------------------------------------------------------------------
+
+bool SeriesRetriever::start()
+{
+    // Reset instance count
+    m_instanceIndex = 0;
+
+    // Start listening
+    return this->listen().good();
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesRetriever::handleIncomingCommand(T_DIMSE_Message* incomingMsg,
+                                                   const DcmPresentationContextInfo& presContextInfo)
+{
+    OFCondition cond;
+
+    // Process C-STORE request
+    if( incomingMsg->CommandField == DIMSE_C_STORE_RQ )
+    {
+        cond = handleSTORERequest( incomingMsg, presContextInfo.presentationContextID );
+    }
+    // Process other requests
+    else
+    {
+        cond = DcmSCP::handleIncomingCommand(incomingMsg, presContextInfo);
+    }
+
+    return cond;
+}
+
+// ----------------------------------------------------------------------------
+
+OFCondition SeriesRetriever::handleSTORERequest(T_DIMSE_Message* incomingMsg,
+                                                T_ASC_PresentationContextID presID)
+{
+    OFCondition cond;
+
+    // Dump incoming message
+    SLM_TRACE("Received C-STORE Request");
+    OFString tempStr;
+    OSLM_TRACE(DIMSE_dumpMessage(tempStr, incomingMsg->msg.CStoreRQ, DIMSE_INCOMING, NULL, presID));
+
+    // Get Dataset
+    DcmDataset* dataset = new DcmDataset();
+    if (this->receiveDIMSEDataset(&presID, &dataset).good())
+    {
+        if (dataset != NULL)
+        {
+
+            //Find the series UID
+            OFString seriesID;
+            if(dataset->findAndGetOFStringArray(DCM_SeriesInstanceUID, seriesID).good())
+            {
+                SLM_TRACE("Series Instance UID: " + std::string(seriesID.c_str()));
+            }
+
+            //Find the instance UID
+            OFString iname;
+            if (dataset->findAndGetOFStringArray(DCM_SOPInstanceUID, iname).good())
+            {
+                SLM_TRACE("SOP Instance UID: " + std::string(iname.c_str()));
+            }
+
+            //Create Folder
+            ::boost::filesystem::path seriesPath = ::boost::filesystem::path(m_path.string() + seriesID.c_str() + "/");
+            if (!::boost::filesystem::exists(seriesPath))
+            {
+                ::boost::filesystem::create_directories(seriesPath);
+            }
+
+            //Save the file in the specified folder
+            std::string filePath = seriesPath.string() + iname.c_str();
+            dataset->saveFile(filePath.c_str());
+
+            // Send a store response
+            T_DIMSE_C_StoreRSP rsp;
+            rsp.DimseStatus = STATUS_Success;
+            cond            = this->sendSTOREResponse(presID, incomingMsg->msg.CStoreRQ, rsp.DimseStatus);
+
+            // Dump outgoing message
+            SLM_TRACE("Sending C-STORE Response");
+            OSLM_TRACE(DIMSE_dumpMessage(tempStr, rsp, DIMSE_OUTGOING, NULL, presID));
+
+            if (cond.bad())
+            {
+                const std::string msg = "Cannot send C-STORE Response to the server.";
+                throw ::fwPacsIO::exceptions::RequestFailure(msg);
+            }
+            else
+            {
+                SLM_TRACE("C-STORE Response successfully sent.");
+            }
+
+            // Notify callback
+            if(m_progressCallback)
+            {
+                m_progressCallback->asyncRun(seriesID.c_str(), ++m_instanceIndex, filePath);
+            }
+
+        }
+    }
+
+    return cond;
+
+}
+
+} //namespace fwPacsIO
+
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/data/PacsConfiguration.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/data/PacsConfiguration.cpp
new file mode 100644
index 0000000..87da57e
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/data/PacsConfiguration.cpp
@@ -0,0 +1,77 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/data/PacsConfiguration.hpp"
+
+#include <fwData/Exception.hpp>
+#include <fwData/registry/macros.hpp>
+
+fwDataRegisterMacro( ::fwPacsIO::data::PacsConfiguration );
+
+namespace fwPacsIO
+{
+namespace data
+{
+
+PacsConfiguration::PacsConfiguration(::fwData::Object::Key key) :
+    m_localApplicationTitle(""),
+    m_pacsHostName(""),
+    m_pacsApplicationTitle(""),
+    m_pacsApplicationPort(0),
+    m_moveApplicationTitle(""),
+    m_moveApplicationPort(0),
+    m_retrieveMethod(MOVE_RETRIEVE_METHOD)
+{
+}
+
+//------------------------------------------------------------------------------
+
+PacsConfiguration::~PacsConfiguration()
+{
+}
+
+//------------------------------------------------------------------------------
+
+void PacsConfiguration::shallowCopy(const Object::csptr& _source )
+{
+    PacsConfiguration::csptr other = PacsConfiguration::dynamicConstCast(_source);
+    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
+    this->fieldShallowCopy( _source );
+
+    m_localApplicationTitle = other->m_localApplicationTitle;
+    m_pacsHostName          = other->m_pacsHostName;
+    m_pacsApplicationTitle  = other->m_pacsApplicationTitle;
+    m_pacsApplicationPort   = other->m_pacsApplicationPort;
+    m_moveApplicationTitle  = other->m_moveApplicationTitle;
+    m_moveApplicationPort   = other->m_moveApplicationPort;
+    m_retrieveMethod        = other->m_retrieveMethod;
+}
+
+//------------------------------------------------------------------------------
+
+void PacsConfiguration::cachedDeepCopy(const Object::csptr& _source, DeepCopyCacheType& cache)
+{
+    PacsConfiguration::csptr other = PacsConfiguration::dynamicConstCast(_source);
+    FW_RAISE_EXCEPTION_IF( ::fwData::Exception(
+                               "Unable to copy" + (_source ? _source->getClassname() : std::string("<NULL>"))
+                               + " to " + this->getClassname()), !bool(other) );
+    this->fieldDeepCopy( _source, cache );
+
+    m_localApplicationTitle = other->m_localApplicationTitle;
+    m_pacsHostName          = other->m_pacsHostName;
+    m_pacsApplicationTitle  = other->m_pacsApplicationTitle;
+    m_pacsApplicationPort   = other->m_pacsApplicationPort;
+    m_moveApplicationTitle  = other->m_moveApplicationTitle;
+    m_moveApplicationPort   = other->m_moveApplicationPort;
+    m_retrieveMethod        = other->m_retrieveMethod;
+}
+
+//------------------------------------------------------------------------------
+
+} //namespace data
+} //namespace fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/Base.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/Base.cpp
new file mode 100644
index 0000000..c082f30
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/Base.cpp
@@ -0,0 +1,25 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/exceptions/Base.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+Base::Base(const std::string& message) : ::fwCore::Exception(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+Base::~Base() throw()
+{
+}
+
+} //exceptions
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/NegociateAssociationFailure.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/NegociateAssociationFailure.cpp
new file mode 100644
index 0000000..164e152
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/NegociateAssociationFailure.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/exceptions/NegociateAssociationFailure.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+NegociateAssociationFailure::NegociateAssociationFailure(const std::string& message) :
+    ::fwPacsIO::exceptions::Base(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+NegociateAssociationFailure::~NegociateAssociationFailure() throw()
+{
+}
+
+} //exceptions
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/NetworkInitializationFailure.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/NetworkInitializationFailure.cpp
new file mode 100644
index 0000000..9e464ce
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/NetworkInitializationFailure.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/exceptions/NetworkInitializationFailure.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+NetworkInitializationFailure::NetworkInitializationFailure(const std::string& message) :
+    ::fwPacsIO::exceptions::Base(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+NetworkInitializationFailure::~NetworkInitializationFailure() throw()
+{
+}
+
+} //exceptions
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/PresentationContextMissing.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/PresentationContextMissing.cpp
new file mode 100644
index 0000000..7fa30df
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/PresentationContextMissing.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/exceptions/PresentationContextMissing.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+PresentationContextMissing::PresentationContextMissing(const std::string& message) :
+    ::fwPacsIO::exceptions::Base(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+PresentationContextMissing::~PresentationContextMissing() throw()
+{
+}
+
+} //exceptions
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/RequestFailure.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/RequestFailure.cpp
new file mode 100644
index 0000000..0c39cb0
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/RequestFailure.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/exceptions/RequestFailure.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+RequestFailure::RequestFailure(const std::string& message) :
+    ::fwPacsIO::exceptions::Base(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+RequestFailure::~RequestFailure() throw()
+{
+}
+
+} //exceptions
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/TagMissing.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/TagMissing.cpp
new file mode 100644
index 0000000..14f3333
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/exceptions/TagMissing.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/exceptions/TagMissing.hpp"
+
+namespace fwPacsIO
+{
+namespace exceptions
+{
+
+TagMissing::TagMissing(const std::string& message) :
+    ::fwPacsIO::exceptions::Base(message)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+TagMissing::~TagMissing() throw()
+{
+}
+
+} //exceptions
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/src/fwPacsIO/helper/Series.cpp b/SrcLib/io/fwPacsIO/src/fwPacsIO/helper/Series.cpp
new file mode 100644
index 0000000..5fde760
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/src/fwPacsIO/helper/Series.cpp
@@ -0,0 +1,198 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwPacsIO/helper/Series.hpp"
+#include "fwPacsIO/exceptions/TagMissing.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwMedData/DicomSeries.hpp>
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <boost/foreach.hpp>
+
+namespace fwPacsIO
+{
+namespace helper
+{
+
+void Series::releaseResponses(OFList< QRResponse* > responses)
+{
+    while (!responses.empty())
+    {
+        delete responses.front();
+        responses.pop_front();
+    }
+}
+
+// ----------------------------------------------------------------------------
+
+Series::DicomSeriesContainer Series::toFwMedData(OFList< QRResponse* > responses)
+{
+    DicomSeriesContainer seriesContainer;
+
+    OFIterator< QRResponse* > it;
+    OFCondition result;
+
+    // Every while loop run will get all image for a specific study
+    for (it = responses.begin(); it != responses.end(); ++it)
+    {
+        // Be sure we are not in the last response which does not have a dataset
+        if ((*it)->m_dataset != NULL)
+        {
+            OFString data;
+
+            // Create series
+            ::fwMedData::DicomSeries::sptr series  = ::fwMedData::DicomSeries::New();
+            ::fwMedData::Patient::sptr patient     = ::fwMedData::Patient::New();
+            ::fwMedData::Study::sptr study         = ::fwMedData::Study::New();
+            ::fwMedData::Equipment::sptr equipment = ::fwMedData::Equipment::New();
+
+            // Set informations to series
+            series->setPatient(patient);
+            series->setStudy(study);
+            series->setEquipment(equipment);
+
+            // ==================================
+            // Series
+            // ==================================
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_SeriesInstanceUID, data);
+            series->setInstanceUID(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_Modality, data);
+            series->setModality(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_SeriesDate, data);
+            series->setDate(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_SeriesTime, data);
+            series->setTime(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_SeriesDescription, data);
+            series->setDescription(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_PerformingPhysicianName, data);
+            ::fwMedData::DicomValuesType performingPhysiciansName;
+            performingPhysiciansName.push_back(data.c_str());
+            series->setPerformingPhysiciansName(performingPhysiciansName);
+
+            // ==================================
+            // Patient
+            // ==================================
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_PatientName, data);
+            patient->setName(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_PatientID, data);
+            patient->setPatientId(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_PatientBirthDate, data);
+            patient->setBirthdate(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_PatientSex, data);
+            patient->setSex(data.c_str());
+
+
+            // ==================================
+            // Study
+            // ==================================
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_StudyInstanceUID, data);
+            study->setInstanceUID(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_StudyDate, data);
+            study->setDate(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_StudyTime, data);
+            study->setTime(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_ReferringPhysicianName, data);
+            study->setReferringPhysicianName(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_StudyDescription, data);
+            study->setDescription(data.c_str());
+
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_PatientAge, data);
+            study->setPatientAge(data.c_str());
+
+            // ==================================
+            // Equipment
+            // ==================================
+            (*it)->m_dataset->findAndGetOFStringArray(DCM_InstitutionName, data);
+            equipment->setInstitutionName(data.c_str());
+
+
+
+            // ==================================
+            // Number of instances
+            // ==================================
+            long int nbinstances;
+            (*it)->m_dataset->findAndGetLongInt(DCM_NumberOfSeriesRelatedInstances, nbinstances);
+            series->setNumberOfInstances(nbinstances);
+
+            // Add series to container
+            seriesContainer.push_back(series);
+
+        }
+
+    }
+
+    return seriesContainer;
+}
+
+// ----------------------------------------------------------------------------
+
+Series::InstanceUIDContainer Series::toSeriesInstanceUIDContainer(DicomSeriesContainer series)
+{
+    InstanceUIDContainer result;
+
+    for(const ::fwMedData::Series::sptr& s: series )
+    {
+        result.push_back(s->getInstanceUID());
+    }
+
+    return result;
+}
+
+// ----------------------------------------------------------------------------
+
+Series::InstanceUIDContainer Series::toSeriesInstanceUIDContainer(OFList< QRResponse* > responses)
+{
+    InstanceUIDContainer instanceUIDContainer;
+
+    OFIterator< QRResponse* > it;
+    DcmDataset dataset;
+    OFCondition result;
+    // Every while loop run will get all image for a specific study
+    for (it = responses.begin(); it != responses.end(); ++it)
+    {
+        // Be sure we are not in the last response which does not have a dataset
+        if ((*it)->m_dataset != NULL)
+        {
+            OFString seriesInstanceUID;
+            result = (*it)->m_dataset->findAndGetOFStringArray(DCM_SeriesInstanceUID, seriesInstanceUID);
+            // Only try to get study if we actually have study instance uid, otherwise skip it
+            if (result.good())
+            {
+                instanceUIDContainer.push_back(seriesInstanceUID.c_str());
+            }
+            else
+            {
+                const std::string msg = "There is no \"SeriersInstanceUID\" tag in the selected series :"
+                                        + std::string(result.text());
+                throw ::fwPacsIO::exceptions::TagMissing(msg);
+            }
+        }
+    }
+
+
+    return instanceUIDContainer;
+}
+
+} //helper
+} //fwPacsIO
diff --git a/SrcLib/io/fwPacsIO/test/CMakeLists.txt b/SrcLib/io/fwPacsIO/test/CMakeLists.txt
new file mode 100644
index 0000000..8f46f91
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/test/CMakeLists.txt
@@ -0,0 +1,12 @@
+
+
+fwLoadProperties()
+
+
+find_package (Boost REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+find_package(CppUnit)
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
+
diff --git a/SrcLib/io/fwPacsIO/test/Properties.cmake b/SrcLib/io/fwPacsIO/test/Properties.cmake
new file mode 100644
index 0000000..627eb0b
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/test/Properties.cmake
@@ -0,0 +1,16 @@
+
+set( NAME fwPacsIOTest )
+set( VERSION  )
+set( TYPE TEST )
+set( DEPENDENCIES
+    fwPacsIO
+    fwTools
+    fwCore
+    fwTest
+    fwThread
+    fwData
+    fwMedData
+    fwDcmtkIO
+    )
+set( REQUIREMENTS )
+
diff --git a/SrcLib/io/fwPacsIO/test/tu/include/SeriesEnquirerTest.hpp b/SrcLib/io/fwPacsIO/test/tu/include/SeriesEnquirerTest.hpp
new file mode 100644
index 0000000..44c4fb9
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/test/tu/include/SeriesEnquirerTest.hpp
@@ -0,0 +1,76 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWPACSIO_UT_SERIESENQUIRERTEST_HPP__
+#define __FWPACSIO_UT_SERIESENQUIRERTEST_HPP__
+
+#include <fwPacsIO/SeriesEnquirer.hpp>
+#include <fwPacsIO/SeriesRetriever.hpp>
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <boost/filesystem.hpp>
+
+namespace fwPacsIO
+{
+namespace ut
+{
+
+class SeriesEnquirerTest : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( SeriesEnquirerTest );
+// Disabled until PACS available
+// CPPUNIT_TEST( initializeConnection );
+// CPPUNIT_TEST( pushSeries );
+// CPPUNIT_TEST( pullSeriesUsingMoveRetrieveMethod );
+// CPPUNIT_TEST( pullSeriesUsingGetRetrieveMethod );
+// CPPUNIT_TEST( pullInstanceUsingMoveRetrieveMethod );
+// CPPUNIT_TEST( pullInstanceUsingGetRetrieveMethod );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+
+    // Interface
+    void setUp();
+    void tearDown();
+
+    // Test functions
+    void initializeConnection();
+    void pullSeriesUsingMoveRetrieveMethod();
+    void pullSeriesUsingGetRetrieveMethod();
+    void pullInstanceUsingMoveRetrieveMethod();
+    void pullInstanceUsingGetRetrieveMethod();
+    void pushSeries();
+
+protected:
+    ::fwPacsIO::SeriesEnquirer::sptr m_seriesEnquirer;
+    ::fwPacsIO::SeriesRetriever::sptr m_seriesRetriever;
+
+    /// Local application title
+    std::string m_localApplicationTitle;
+
+    /// Pacs host name
+    std::string m_pacsHostName;
+
+    /// Pacs application title
+    std::string m_pacsApplicationTitle;
+
+    /// Pacs application port
+    unsigned short m_pacsApplicationPort;
+
+    /// Move application title
+    std::string m_moveApplicationTitle;
+
+    /// Move application port
+    unsigned short m_moveApplicationPort;
+
+};
+
+} // namespace ut
+} // namespace fwPacsIO
+
+#endif // __FWPACSIO_UT_SERIESENQUIRERTEST_HPP__
+
diff --git a/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp b/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp
new file mode 100644
index 0000000..4a027ed
--- /dev/null
+++ b/SrcLib/io/fwPacsIO/test/tu/src/SeriesEnquirerTest.cpp
@@ -0,0 +1,252 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "SeriesEnquirerTest.hpp"
+
+#include <fwDcmtkIO/helper/DicomSearch.hpp>
+
+#include <fwPacsIO/helper/Series.hpp>
+
+#include <fwTest/Data.hpp>
+#include <fwTest/Exception.hpp>
+
+#include <fwThread/Worker.hpp>
+
+#include <fwTools/System.hpp>
+
+#include <boost/chrono/chrono.hpp>
+#include <boost/lexical_cast.hpp>
+#include <boost/thread/thread.hpp>
+
+#include <dcmtk/config/osconfig.h>
+
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwPacsIO::ut::SeriesEnquirerTest );
+
+namespace fwPacsIO
+{
+namespace ut
+{
+
+static ::fwTest::Exception e(""); // force link with fwTest
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::setUp()
+{
+    // Local application title
+    m_localApplicationTitle = "SeriesEnquirerTest";
+
+    // Pacs host name
+    char* pacsHostName = std::getenv("FWTEST_PACS_HOST_NAME");
+    CPPUNIT_ASSERT_MESSAGE("The FWTEST_PACS_HOST_NAME environment variable is not set.", pacsHostName);
+    m_pacsHostName = std::string(pacsHostName);
+
+    // Pacs application title
+    char* pacsApplicationTitle = std::getenv("FWTEST_PACS_APPLICATION_TITLE");
+    CPPUNIT_ASSERT_MESSAGE("The FWTEST_PACS_APPLICATION_TITLE environment variable is not set.", pacsApplicationTitle);
+    m_pacsApplicationTitle = std::string(pacsApplicationTitle);
+
+    // Pacs application port (default 11112)
+    char* pacsApplicationPort = std::getenv("FWTEST_PACS_APPLICATION_PORT");
+    m_pacsApplicationPort =
+        (pacsApplicationPort) ? (::boost::lexical_cast<unsigned short>(pacsApplicationPort)) : 11112;
+
+    // Move application title
+    char* moveApplicationTitle = std::getenv("FWTEST_MOVE_APPLICATION_TITLE");
+    CPPUNIT_ASSERT_MESSAGE("The FWTEST_MOVE_APPLICATION_TITLE environment variable is not set.", moveApplicationTitle);
+    m_moveApplicationTitle = std::string(moveApplicationTitle);
+
+    // Move application port (default 11110)
+    char* moveApplicationPort = std::getenv("FWTEST_MOVE_APPLICATION_PORT");
+    m_moveApplicationPort =
+        (moveApplicationPort) ? (::boost::lexical_cast<unsigned short>(moveApplicationPort)) : 11110;
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::initializeConnection()
+{
+    // Create the series enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+
+    // Initialize the enquirer
+    m_seriesEnquirer->initialize(m_localApplicationTitle, m_pacsHostName, m_pacsApplicationPort,
+                                 m_pacsApplicationTitle, m_moveApplicationTitle);
+
+    // Connect to the pacs
+    m_seriesEnquirer->connect();
+    CPPUNIT_ASSERT_MESSAGE("The retriever should be connected to the pacs.",
+                           m_seriesEnquirer->isConnectedToPacs());
+
+    // Try to send a C-ECHO request to the server
+    bool ping = m_seriesEnquirer->pingPacs();
+    CPPUNIT_ASSERT_MESSAGE("Unable to ping the pacs.", ping);
+
+    // Disconnect from the pacs
+    m_seriesEnquirer->disconnect();
+    CPPUNIT_ASSERT_MESSAGE("The retriever shouldn't be connected to the pacs.",
+                           !m_seriesEnquirer->isConnectedToPacs());
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::pushSeries()
+{
+    // Create the series enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+    m_seriesEnquirer->initialize(m_localApplicationTitle, m_pacsHostName, m_pacsApplicationPort,
+                                 m_pacsApplicationTitle, m_moveApplicationTitle);
+    m_seriesEnquirer->connect();
+
+    // Retrieve DICOM instances
+    const ::boost::filesystem::path path =
+        ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/DicomDB/01-CT-DICOM_LIVER_FOR_PACS";
+    const std::string pathStr = ::boost::algorithm::replace_all_copy(path.string(), "\\", "/");
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
+
+    std::vector<std::string> filenames;
+    ::fwDcmtkIO::helper::DicomSearch::searchRecursively(path, filenames);
+    CPPUNIT_ASSERT_EQUAL( size_t( 129 ), filenames.size());
+
+    std::vector< ::boost::filesystem::path > paths;
+    for(const std::string& path: filenames)
+    {
+        paths.push_back(path);
+    }
+
+    //Try to push instances to the pacs
+    m_seriesEnquirer->pushSeries(paths);
+
+    // Disconnect from the pacs
+    m_seriesEnquirer->disconnect();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::pullSeriesUsingMoveRetrieveMethod()
+{
+    // Create the retriever
+    m_seriesRetriever = ::fwPacsIO::SeriesRetriever::New();
+    m_seriesRetriever->initialize(m_moveApplicationTitle, m_moveApplicationPort);
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    worker->post(::boost::bind(&::fwPacsIO::SeriesRetriever::start, m_seriesRetriever));
+
+    // Create the series enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+    m_seriesEnquirer->initialize(m_localApplicationTitle, m_pacsHostName, m_pacsApplicationPort,
+                                 m_pacsApplicationTitle, m_moveApplicationTitle);
+    m_seriesEnquirer->connect();
+
+    // Try to find series on the pacs
+    OFList< QRResponse* > responses;
+    responses = m_seriesEnquirer->findSeriesByDate("17890101", "17900101");
+    ::fwPacsIO::helper::Series::releaseResponses(responses);
+
+    // Try to pull series from the pacs
+    responses = m_seriesEnquirer->findSeriesByPatientName("Doe");
+    m_seriesEnquirer->pullSeriesUsingMoveRetrieveMethod(
+        ::fwPacsIO::helper::Series::toSeriesInstanceUIDContainer(responses));
+    ::fwPacsIO::helper::Series::releaseResponses(responses);
+
+    // Disconnect from the pacs
+    m_seriesEnquirer->disconnect();
+
+    worker.reset();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::pullSeriesUsingGetRetrieveMethod()
+{
+    // Create the series enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+    m_seriesEnquirer->initialize(m_localApplicationTitle, m_pacsHostName, m_pacsApplicationPort,
+                                 m_pacsApplicationTitle, m_moveApplicationTitle);
+    m_seriesEnquirer->connect();
+
+    // Try to pull series from the pacs
+    OFList< QRResponse* > responses;
+    responses = m_seriesEnquirer->findSeriesByPatientName("Doe");
+    m_seriesEnquirer->pullSeriesUsingGetRetrieveMethod(
+        ::fwPacsIO::helper::Series::toSeriesInstanceUIDContainer(responses));
+    ::fwPacsIO::helper::Series::releaseResponses(responses);
+
+    // Disconnect from the pacs
+    m_seriesEnquirer->disconnect();
+
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::pullInstanceUsingMoveRetrieveMethod()
+{
+    // Create the receiver
+    m_seriesRetriever = ::fwPacsIO::SeriesRetriever::New();
+    m_seriesRetriever->initialize(m_moveApplicationTitle, m_moveApplicationPort);
+    ::fwThread::Worker::sptr worker = ::fwThread::Worker::New();
+    worker->post(::boost::bind(&::fwPacsIO::SeriesRetriever::start, m_seriesRetriever));
+
+    // Create the series enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+    m_seriesEnquirer->initialize(m_localApplicationTitle, m_pacsHostName, m_pacsApplicationPort,
+                                 m_pacsApplicationTitle, m_moveApplicationTitle);
+    m_seriesEnquirer->connect();
+
+    // Try to pull instance from the pacs
+    std::string sopInstanceUID = m_seriesEnquirer->findSOPInstanceUID(
+        "1.2.826.0.1.3680043.2.1143.6877747397629659013303967301941157856", 5);
+    CPPUNIT_ASSERT_MESSAGE("Wrong SOP Instance UID.",
+                           sopInstanceUID == "1.2.826.0.1.3680043.2.1143.9672927753340405594477112277850697930");
+    m_seriesEnquirer->pullInstanceUsingMoveRetrieveMethod(
+        "1.2.826.0.1.3680043.2.1143.6877747397629659013303967301941157856", sopInstanceUID);
+
+    // Disconnect from the pacs
+    m_seriesEnquirer->disconnect();
+
+    worker.reset();
+}
+
+//------------------------------------------------------------------------------
+
+void SeriesEnquirerTest::pullInstanceUsingGetRetrieveMethod()
+{
+    // Create the series enquirer
+    m_seriesEnquirer = ::fwPacsIO::SeriesEnquirer::New();
+    m_seriesEnquirer->initialize(m_localApplicationTitle, m_pacsHostName, m_pacsApplicationPort,
+                                 m_pacsApplicationTitle, m_moveApplicationTitle);
+    m_seriesEnquirer->connect();
+
+    // Try to pull instance from the pacs
+    std::string sopInstanceUID = m_seriesEnquirer->findSOPInstanceUID(
+        "1.2.826.0.1.3680043.2.1143.6877747397629659013303967301941157856", 5);
+    CPPUNIT_ASSERT_MESSAGE("Wrong SOP Instance UID.",
+                           sopInstanceUID == "1.2.826.0.1.3680043.2.1143.9672927753340405594477112277850697930");
+    m_seriesEnquirer->pullInstanceUsingGetRetrieveMethod(
+        "1.2.826.0.1.3680043.2.1143.6877747397629659013303967301941157856", sopInstanceUID);
+
+    // Disconnect from the pacs
+    m_seriesEnquirer->disconnect();
+}
+
+//------------------------------------------------------------------------------
+
+} // namespace ut
+
+} // namespace fwPacsIO
+
diff --git a/SrcLib/io/fwVtkIO/CMakeLists.txt b/SrcLib/io/fwVtkIO/CMakeLists.txt
index 3d5cffc..5720df3 100644
--- a/SrcLib/io/fwVtkIO/CMakeLists.txt
+++ b/SrcLib/io/fwVtkIO/CMakeLists.txt
@@ -1,15 +1,35 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwData
-    fwDataIO
-    fwMedData
-    fwTools
-)
 
-find_package(VTK REQUIRED)
+if(NOT ANDROID)
+    find_package(VTK COMPONENTS
+        vtkFiltersModeling
+        vtkIOImage
+        vtkIOLegacy
+        vtkIOXML
+        vtkFiltersGeometry
+        vtkIOExport
+        REQUIRED
+        NO_MODULE)
+else()
+    find_package(VTK COMPONENTS
+        vtkFiltersModeling
+        vtkIOImage
+        vtkIOLegacy
+        vtkIOXML
+        vtkFiltersGeometry
+        vtkInteractionStyle
+        vtkRenderingOpenGL2
+        vtkRenderingFreeType
+        REQUIRED
+        NO_MODULE)
+endif()
+
+include(${VTK_USE_FILE})
 
-fwForwardInclude(${VTK_INCLUDE_DIRS})
-fwLink(vtkHybrid)
+fwForwardInclude(
+    ${VTK_INCLUDE_DIRS}
+)
 
-get_target_property(TARGET_TYPE vtkHybrid LOCATION)
+fwLink(
+    ${VTK_LIBRARIES}
+)
diff --git a/SrcLib/io/fwVtkIO/COPYING b/SrcLib/io/fwVtkIO/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/io/fwVtkIO/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/io/fwVtkIO/COPYING.LESSER b/SrcLib/io/fwVtkIO/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/io/fwVtkIO/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/io/fwVtkIO/Properties.cmake b/SrcLib/io/fwVtkIO/Properties.cmake
index af30820..f7484ac 100644
--- a/SrcLib/io/fwVtkIO/Properties.cmake
+++ b/SrcLib/io/fwVtkIO/Properties.cmake
@@ -2,6 +2,15 @@
 set( NAME fwVtkIO )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwCore fwData fwDataIO fwMath fwMedData fwMemory fwTools )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwDataIO
+    fwMath
+    fwMedData
+    fwMemory
+    fwTools
+    fwJobs
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwVtkIO/bin/build.options b/SrcLib/io/fwVtkIO/bin/build.options
deleted file mode 100644
index c9350ca..0000000
--- a/SrcLib/io/fwVtkIO/bin/build.options
+++ /dev/null
@@ -1,17 +0,0 @@
-TYPE='shared'
-LIB = [
-      'fwData_0-1',
-      'fwMedData_0-1',
-      'fwCore_0-1',
-      'fwDataIO_0-2',
-      'fwTools_0-1',
-      'fwMath_0-1',
-      'fwComEd_0-1'
-      ]
-VERSION = '0-1'
-USE = [
-       'boost',
-       'boostFilesystem',
-       'boostDateTime',
-       'vtkHybrid'
-       ]
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageReader.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageReader.hpp
index bcf5eed..b45116b 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageReader.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageReader.hpp
@@ -1,20 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_IMAGEREADER_HPP_
-#define _VTKIO_IMAGEREADER_HPP_
+#ifndef __FWVTKIO_IMAGEREADER_HPP__
+#define __FWVTKIO_IMAGEREADER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwData/Image.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class Observer;
+}
 
 namespace fwVtkIO
 {
@@ -22,37 +26,42 @@ namespace fwVtkIO
 /**
  * @brief   Read an image.
  * @class   ImageReader
- * 
- * @date    2009.
  *
  * Read a VTK Image using the VTK lib
  */
 class ImageReader : public ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >,
-                             public ::fwTools::ProgressAdviser
+                    public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ImageReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >),
                                            (()),
                                            ::fwDataIO::reader::factory::New< ImageReader >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API ImageReader(::fwDataIO::reader::IObjectReader::Key key);
+    FWVTKIO_API ImageReader(::fwDataIO::reader::IObjectReader::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~ImageReader();
+    FWVTKIO_API ~ImageReader();
 
     //! @brief Reading operator.
-    VTKIO_API void read();
+    FWVTKIO_API void read();
 
     /// @return ".vtk"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_IMAGEREADER_HPP_
+#endif // __FWVTKIO_IMAGEREADER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageWriter.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageWriter.hpp
index c07f257..2c2ec3d 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageWriter.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/ImageWriter.hpp
@@ -1,22 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_IMAGEWRITER_HPP_
-#define _VTKIO_IMAGEWRITER_HPP_
+#ifndef __FWVTKIO_IMAGEWRITER_HPP__
+#define __FWVTKIO_IMAGEWRITER_HPP__
 
-#include <boost/filesystem/path.hpp>
-
-#include <vtkActor.h>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwData/Image.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+#include <vtkActor.h>
+
+namespace fwJobs
+{
+class Observer;
+}
 
 namespace fwVtkIO
 {
@@ -24,37 +27,43 @@ namespace fwVtkIO
 /**
  * @brief   Write an image.
  * @class   ImageWriter
- * 
- * @date    2009.
  *
  * Write a VTK Image using the VTK lib
  */
 class ImageWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
+                    public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((ImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >),
                                            (()),
                                            ::fwDataIO::writer::factory::New< ImageWriter >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API ImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
+    FWVTKIO_API ImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~ImageWriter();
+    FWVTKIO_API ~ImageWriter();
 
     //! @brief Writing operator.
-    VTKIO_API void write();
+    FWVTKIO_API void write();
 
     /// @return ".vtk"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
+
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_IMAGEWRITER_HPP_
+#endif // __FWVTKIO_IMAGEWRITER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshReader.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshReader.hpp
index 9878a05..b66a333 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshReader.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshReader.hpp
@@ -1,21 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_MESHREADER_HPP_
-#define _VTKIO_MESHREADER_HPP_
+#ifndef __FWVTKIO_MESHREADER_HPP__
+#define __FWVTKIO_MESHREADER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 
 #include <fwData/Mesh.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class Observer;
+class IJob;
+}
 
 namespace fwVtkIO
 {
@@ -23,38 +28,43 @@ namespace fwVtkIO
 /**
  * @brief   Read a mesh.
  * @class   MeshReader
- * 
- * @date    2011.
  *
  * Read a VTK Mesh using the VTK lib
  */
 
 class MeshReader : public ::fwDataIO::reader::GenericObjectReader< ::fwData::Mesh >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >,
-                             public ::fwTools::ProgressAdviser
+                   public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((MeshReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::Mesh >),
                                            (()),
                                            ::fwDataIO::reader::factory::New< MeshReader >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API MeshReader(::fwDataIO::reader::IObjectReader::Key key);
+    FWVTKIO_API MeshReader(::fwDataIO::reader::IObjectReader::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~MeshReader();
+    FWVTKIO_API ~MeshReader();
 
     //! @brief Reading operator.
-    VTKIO_API void read();
+    FWVTKIO_API void read();
 
     /// @return ".vtk"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
+
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_MESHREADER_HPP_
+#endif // __FWVTKIO_MESHREADER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshWriter.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshWriter.hpp
index 3780c2f..d1947c0 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshWriter.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/MeshWriter.hpp
@@ -1,22 +1,26 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_MESHWRITER_HPP_
-#define _VTKIO_MESHWRITER_HPP_
+#ifndef __FWVTKIO_MESHWRITER_HPP__
+#define __FWVTKIO_MESHWRITER_HPP__
 
-#include <boost/filesystem/path.hpp>
-
-#include <fwTools/ProgressAdviser.hpp>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/SingleFile.hpp>
 
 #include <fwData/Mesh.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class Observer;
+class IJob;
+}
 
 namespace fwVtkIO
 {
@@ -24,38 +28,43 @@ namespace fwVtkIO
 /**
  * @brief   Write a mesh.
  * @class   MeshWriter
- * 
- * @date    2011.
  *
  * Write a VTK Mesh using the VTK lib
  */
 
 class MeshWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwData::Mesh >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
+                   public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro((MeshWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Mesh >),
                                            (()),
                                            ::fwDataIO::writer::factory::New< MeshWriter >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API MeshWriter(::fwDataIO::writer::IObjectWriter::Key key);
+    FWVTKIO_API MeshWriter(::fwDataIO::writer::IObjectWriter::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~MeshWriter();
+    FWVTKIO_API ~MeshWriter();
 
     //! @brief Reading operator.
-    VTKIO_API void write();
+    FWVTKIO_API void write();
 
     /// @return ".vtk"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_MESHWRITER_HPP_
+#endif // __FWVTKIO_MESHWRITER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageReader.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageReader.hpp
index 471dd66..69c8941 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageReader.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageReader.hpp
@@ -1,20 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_METAIMAGEREADER_HPP_
-#define _VTKIO_METAIMAGEREADER_HPP_
+#ifndef __FWVTKIO_METAIMAGEREADER_HPP__
+#define __FWVTKIO_METAIMAGEREADER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwData/Image.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class Observer;
+class IJob;
+}
 
 namespace fwVtkIO
 {
@@ -22,38 +27,44 @@ namespace fwVtkIO
 /**
  * @brief   Read a MetaImage.
  * @class   MetaImageReader
- * 
- * @date    2011.
  *
  * Read a MetaImage using the VTK lib
  */
 class MetaImageReader : public ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >,
-                             public ::fwTools::ProgressAdviser
+                        public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((MetaImageReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >),
-                                           (()),
-                                           ::fwDataIO::reader::factory::New< MetaImageReader >
-                                          );
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (MetaImageReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >),
+        (()),
+        ::fwDataIO::reader::factory::New< MetaImageReader >
+        );
 
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API MetaImageReader(::fwDataIO::reader::IObjectReader::Key key);
+    FWVTKIO_API MetaImageReader(::fwDataIO::reader::IObjectReader::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~MetaImageReader();
+    FWVTKIO_API ~MetaImageReader();
 
     //! @brief Reading operator.
-    VTKIO_API void read();
+    FWVTKIO_API void read();
 
     /// @return ".mhd"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_METAIMAGEREADER_HPP_
+#endif // __FWVTKIO_METAIMAGEREADER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageWriter.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageWriter.hpp
index d8651a5..9426dfd 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageWriter.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/MetaImageWriter.hpp
@@ -1,58 +1,69 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_METAIMAGEWRITER_HPP_
-#define _VTKIO_METAIMAGEWRITER_HPP_
+#ifndef __FWVTKIO_METAIMAGEWRITER_HPP__
+#define __FWVTKIO_METAIMAGEWRITER_HPP__
 
 #include <boost/filesystem/path.hpp>
 
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwData/Image.hpp>
 
 #include "fwVtkIO/config.hpp"
 
+namespace fwJobs
+{
+class Observer;
+}
+
 namespace fwVtkIO
 {
 
 /**
  * @brief   Write a MetaImage.
  * @class   MetaImageWriter
- * 
- * @date    2011.
  *
  * Write a MetaImage using the VTK lib
  */
 class MetaImageWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
+                        public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((MetaImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >),
-                                           (()),
-                                           ::fwDataIO::writer::factory::New< MetaImageWriter >
-                                          );
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (MetaImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >),
+        (()),
+        ::fwDataIO::writer::factory::New< MetaImageWriter >
+        );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API MetaImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
+    FWVTKIO_API MetaImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~MetaImageWriter();
+    FWVTKIO_API ~MetaImageWriter();
 
     //! @brief Writing operator.
-    VTKIO_API void write();
+    FWVTKIO_API void write();
 
     /// @return ".mhd"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
+
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_METAIMAGEWRITER_HPP_
+#endif // __FWVTKIO_METAIMAGEWRITER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/ModelSeriesObjWriter.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/ModelSeriesObjWriter.hpp
index d3a5bf2..95b0b85 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/ModelSeriesObjWriter.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/ModelSeriesObjWriter.hpp
@@ -1,30 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __VTKIO_MODELSERIESOBJWRITER_HPP__
-#define __VTKIO_MODELSERIESOBJWRITER_HPP__
+#ifndef __FWVTKIO_MODELSERIESOBJWRITER_HPP__
+#define __FWVTKIO_MODELSERIESOBJWRITER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#ifndef ANDROID
+
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/Folder.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
 
 namespace fwData
 {
-    class Reconstruction;
+class Reconstruction;
 }
 
 namespace fwMedData
 {
-    class ModelSeries;
+class ModelSeries;
 }
 
+namespace fwJobs
+{
+class Observer;
+}
+
+
 namespace fwVtkIO
 {
 
@@ -35,37 +42,44 @@ namespace fwVtkIO
  * Write a ::fwData::Reconstruction as .obj file using the VTK lib and the obj format.
  */
 class ModelSeriesObjWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::ModelSeries >,
-                             public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
+                             public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro(
-            (ModelSeriesObjWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::ModelSeries >),
-            (()),
-            ::fwDataIO::writer::factory::New< ModelSeriesObjWriter >
-            );
+        (ModelSeriesObjWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::ModelSeries >),
+        (()),
+        ::fwDataIO::writer::factory::New< ModelSeriesObjWriter >
+        );
 
     fwCoreAllowSharedFromThis();
 
     //! Constructor.
-    VTKIO_API ModelSeriesObjWriter(::fwDataIO::writer::IObjectWriter::Key key);
+    FWVTKIO_API ModelSeriesObjWriter(::fwDataIO::writer::IObjectWriter::Key key);
 
     //! Destructor.
-    VTKIO_API ~ModelSeriesObjWriter();
+    FWVTKIO_API ~ModelSeriesObjWriter();
 
     //! Writing operator.
-    VTKIO_API void write();
+    FWVTKIO_API void write();
 
     /**
      * @return ".obj"
      */
-    VTKIO_API std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
 
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace fwVtkIO
 
-#endif // __VTKIO_MODELSERIESOBJWRITER_HPP__
+#endif // ANDROID
 
+#endif //__FWVTKIO_MODELSERIESOBJWRITER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/Namespace.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/Namespace.hpp
index 0ad1883..065c0d3 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/Namespace.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/Namespace.hpp
@@ -1,20 +1,18 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWVTKIONAMESPACE_HPP_
-#define FWVTKIONAMESPACE_HPP_
+#ifndef __FWVTKIO_NAMESPACE_HPP__
+#define __FWVTKIO_NAMESPACE_HPP__
 
 /*
- * @brief       The namespace fwVtkIO provides classes for writting/reading data (image, mesh reconstruction) based on vtk lib .
+ * @brief       The namespace fwVtkIO provides classes for writing/reading data (image, mesh reconstruction) based on vtk lib .
  * @namespace   fwVtkIO
- * 
- * @date        2009-2010.
  *
  */
 namespace fwVtkIO
 {
 }
-#endif /* FWVTKIONAMESPACE_HPP_ */
+#endif /* __FWVTKIO_NAMESPACE_HPP__ */
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/SeriesDBReader.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/SeriesDBReader.hpp
index 34bcf33..301768f 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/SeriesDBReader.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/SeriesDBReader.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_SERIESDBREADER_HPP_
-#define _VTKIO_SERIESDBREADER_HPP_
+#ifndef __FWVTKIO_SERIESDBREADER_HPP__
+#define __FWVTKIO_SERIESDBREADER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwVtkIO/config.hpp"
 
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwMedData/Series.hpp>
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
@@ -17,7 +16,13 @@
 
 #include <fwMedData/SeriesDB.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+
+namespace fwJobs
+{
+class Observer;
+}
 
 namespace fwVtkIO
 {
@@ -25,42 +30,50 @@ namespace fwVtkIO
 /**
  * @brief   Read a SeriesDB.
  * @class   SeriesDBReader
- * 
- * @date    2011.
  *
  * Read VTK Mesh or Image files using the VTK lib, convert to ModelSeries or ImageSeries and push to SeriesDB.
  */
 class SeriesDBReader : public ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >,
-                             public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader >,
-                             public ::fwTools::ProgressAdviser
+                       public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((SeriesDBReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
+    fwCoreClassDefinitionsWithFactoryMacro((SeriesDBReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::
+                                                                                                      SeriesDB >),
                                            (()),
                                            ::fwDataIO::reader::factory::New< SeriesDBReader >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key);
+    FWVTKIO_API SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~SeriesDBReader();
+    FWVTKIO_API ~SeriesDBReader();
 
     //! @brief Reading operator.
-    VTKIO_API void read();
+    FWVTKIO_API void read();
 
     /// @return ".vtk"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    void setLazyMode(bool lazyMode)
+    {
+        m_lazyMode = lazyMode;
+    }
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
 
-    void setLazyMode(bool lazyMode) { m_lazyMode = lazyMode; }
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 
-protected:
     bool m_lazyMode;
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_SERIESDBREADER_HPP_
+#endif // __FWVTKIO_SERIESDBREADER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/TriangularMeshReader.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/TriangularMeshReader.hpp
deleted file mode 100644
index e242872..0000000
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/TriangularMeshReader.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VTKIO_TRIANGULARMESHREADER_HPP_
-#define _VTKIO_TRIANGULARMESHREADER_HPP_
-
-#include <boost/filesystem/path.hpp>
-
-#include <fwDataIO/reader/GenericObjectReader.hpp>
-#include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
-#include <fwData/TriangularMesh.hpp>
-
-#include "fwVtkIO/config.hpp"
-
-namespace fwVtkIO
-{
-
-/**
- * @brief   Read a mesh.
- * @class   TriangularMeshReader
- * 
- * @date    2009.
- *
- * Read a VTK Mesh using the VTK lib
- */
-
-class TriangularMeshReader : public ::fwDataIO::reader::GenericObjectReader< ::fwData::TriangularMesh >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >,
-                             public ::fwTools::ProgressAdviser
-{
-
-public :
-
-    fwCoreClassDefinitionsWithFactoryMacro((TriangularMeshReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::TriangularMesh >),
-                                           (()),
-                                           ::fwDataIO::reader::factory::New< TriangularMeshReader >
-                                          );
-    fwCoreAllowSharedFromThis();
-
-    //! @brief Constructor.
-    VTKIO_API TriangularMeshReader(::fwDataIO::reader::IObjectReader::Key key);
-
-    //! @brief Destructor.
-    VTKIO_API ~TriangularMeshReader();
-
-    //! @brief Reading operator.
-    VTKIO_API void read();
-
-    /// @return ".trian"
-    VTKIO_API  std::string extension();
-};
-
-} // namespace fwVtkIO
-
-#endif // _VTKIO_TRIANGULARMESHREADER_HPP_
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/TriangularMeshWriter.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/TriangularMeshWriter.hpp
deleted file mode 100644
index f3152de..0000000
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/TriangularMeshWriter.hpp
+++ /dev/null
@@ -1,59 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VTKIO_TRIANGULARMESHWRITER_HPP_
-#define _VTKIO_TRIANGULARMESHWRITER_HPP_
-
-#include <boost/filesystem/path.hpp>
-
-#include <fwDataIO/writer/GenericObjectWriter.hpp>
-#include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
-#include <fwData/TriangularMesh.hpp>
-
-#include "fwVtkIO/config.hpp"
-
-namespace fwVtkIO
-{
-
-/**
- * @brief   Write a mesh.
- * @class   TriangularMeshWriter
- * 
- * @date    2009.
- *
- * Write a VTK Mesh using the VTK lib
- */
-
-class TriangularMeshWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwData::TriangularMesh >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
-{
-
-public :
-
-    fwCoreClassDefinitionsWithFactoryMacro((TriangularMeshWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::TriangularMesh >),
-                                           (()),
-                                           ::fwDataIO::writer::factory::New< TriangularMeshWriter >
-                                          );
-    fwCoreAllowSharedFromThis();
-
-    //! @brief Constructor.
-    VTKIO_API TriangularMeshWriter(::fwDataIO::writer::IObjectWriter::Key key);
-
-    //! @brief Destructor.
-    VTKIO_API ~TriangularMeshWriter();
-
-    //! @brief Reading operator.
-    VTKIO_API void write();
-
-    /// @return ".trian"
-    VTKIO_API  std::string extension();
-};
-
-} // namespace fwVtkIO
-
-#endif // _VTKIO_TRIANGULARMESHWRITER_HPP_
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageReader.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageReader.hpp
index 9845fc5..97c021a 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageReader.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageReader.hpp
@@ -1,20 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_VTIIMAGEREADER_HPP_
-#define _VTKIO_VTIIMAGEREADER_HPP_
+#ifndef __FWVTKIO_VTIIMAGEREADER_HPP__
+#define __FWVTKIO_VTIIMAGEREADER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwData/Image.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class Observer;
+class IJob;
+}
 
 namespace fwVtkIO
 {
@@ -22,38 +27,44 @@ namespace fwVtkIO
 /**
  * @brief   Read an image.
  * @class   VtiImageReader
- * 
- * @date    2009.
  *
  * Read a VTK Image using the VTK lib
  */
 class VtiImageReader : public ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >,
-                             public ::fwTools::ProgressAdviser
+                       public ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((VtiImageReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >),
-                                           (()),
-                                           ::fwDataIO::reader::factory::New< VtiImageReader >
-                                          );
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (VtiImageReader)( ::fwDataIO::reader::GenericObjectReader< ::fwData::Image >),
+        (()),
+        ::fwDataIO::reader::factory::New< VtiImageReader >
+        );
 
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API VtiImageReader(::fwDataIO::reader::IObjectReader::Key key);
+    FWVTKIO_API VtiImageReader(::fwDataIO::reader::IObjectReader::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~VtiImageReader();
+    FWVTKIO_API ~VtiImageReader();
 
     //! @brief Reading operator.
-    VTKIO_API void read();
+    FWVTKIO_API void read();
 
     /// @return ".vtk"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_VTIIMAGEREADER_HPP_
+#endif // __FWVTKIO_VTIIMAGEREADER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageWriter.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageWriter.hpp
index 3fdf20e..b51a170 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageWriter.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/VtiImageWriter.hpp
@@ -1,20 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_VTIIMAGEWRITER_HPP_
-#define _VTKIO_VTIIMAGEWRITER_HPP_
+#ifndef __FWVTKIO_VTIIMAGEWRITER_HPP__
+#define __FWVTKIO_VTIIMAGEWRITER_HPP__
 
-#include <boost/filesystem/path.hpp>
+#include "fwVtkIO/config.hpp"
 
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/SingleFile.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 #include <fwData/Image.hpp>
 
-#include "fwVtkIO/config.hpp"
+#include <boost/filesystem/path.hpp>
+
+namespace fwJobs
+{
+class Observer;
+}
 
 namespace fwVtkIO
 {
@@ -22,37 +26,43 @@ namespace fwVtkIO
 /**
  * @brief   Write an image.
  * @class   VtiImageWriter
- * 
- * @date    2009.
  *
  * Write a VTK Image using the VTK lib
  */
 class VtiImageWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >,
-                             public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
+                       public ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((VtiImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >),
-                                           (()),
-                                           ::fwDataIO::writer::factory::New< VtiImageWriter >
-                                          );
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (VtiImageWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwData::Image >),
+        (()),
+        ::fwDataIO::writer::factory::New< VtiImageWriter >
+        );
     fwCoreAllowSharedFromThis();
 
     //! @brief Constructor.
-    VTKIO_API VtiImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
+    FWVTKIO_API VtiImageWriter(::fwDataIO::writer::IObjectWriter::Key key);
 
     //! @brief Destructor.
-    VTKIO_API ~VtiImageWriter();
+    FWVTKIO_API ~VtiImageWriter();
 
     //! @brief Writing operator.
-    VTKIO_API void write();
+    FWVTKIO_API void write();
 
     /// @return ".vti"
-    VTKIO_API  std::string extension();
+    FWVTKIO_API std::string extension();
+
+    /// @return internal job
+    FWVTKIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace fwVtkIO
 
-#endif // _VTKIO_VTIIMAGEWRITER_HPP_
+#endif // __FWVTKIO_VTIIMAGEWRITER_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/config.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/config.hpp
deleted file mode 100644
index 28ba4b8..0000000
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/config.hpp
+++ /dev/null
@@ -1,53 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VTKIO_CONFIG_HPP_
-#define _VTKIO_CONFIG_HPP_
-
-#ifdef FWVTKIO_EXPORTS
-#define VTKIO_EXPORTS
-#endif
-
-#ifdef _WIN32
-
-    #ifdef VTKIO_EXPORTS
-    #define VTKIO_API __declspec(dllexport)
-    #define VTKIO_TEMPLATE_API
-    #else
-    #define VTKIO_API __declspec(dllimport)
-    #define VTKIO_TEMPLATE_API extern
-    #endif
-
-    #define VTKIO_CLASS_API
-
-    #pragma warning(disable: 4290)
-    #pragma warning(disable: 4800) // avoid waring on return hard coded value
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef VTKIO_EXPORTS
-        #define VTKIO_API __attribute__ ((visibility("default")))
-        #define VTKIO_CLASS_API __attribute__ ((visibility("default")))
-        #define VTKIO_TEMPLATE_API
-        #else
-        //#define VTKIO_API __attribute__ ((visibility("hidden")))
-        //#define VTKIO_CLASS_API __attribute__ ((visibility("hidden")))
-        #define VTKIO_API
-        #define VTKIO_CLASS_API
-        #define VTKIO_TEMPLATE_API extern
-        #endif
-
-#else
-
-        #define VTKIO_API
-        #define VTKIO_CLASS_API
-        #define VTKIO_TEMPLATE_API
-
-#endif
-
-
-#endif //_VTKIO_CONFIG_HPP_
-
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/Mesh.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/Mesh.hpp
index e8bb7c2..01438c5 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/Mesh.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/Mesh.hpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_HELPER_MESH_HPP_
-#define _VTKIO_HELPER_MESH_HPP_
+#ifndef __FWVTKIO_HELPER_MESH_HPP__
+#define __FWVTKIO_HELPER_MESH_HPP__
 
 #include <vtkSmartPointer.h>
 #include <vtkPolyData.h>
+#include <vtkUnstructuredGrid.h>
 
 #include <fwData/Mesh.hpp>
 
@@ -22,25 +23,27 @@ namespace helper
 
 /**
  * @brief   Helper to manage vtkPolyData and fwData::Mesh.
- * @class   Mesh
- * 
- * @date    2011.
- *
  */
-class VTKIO_CLASS_API Mesh
+class FWVTKIO_CLASS_API Mesh
 {
 
-public :
+public:
 
     /*!
      * @brief Convert a vtkPolyData to a ::fwData::Mesh::sptr.
      *
      * @param[in] _polyData vtkPolyData.
      * @param[out] _mesh ::fwData::Mesh::sptr.
+     */
+    FWVTKIO_API static void fromVTKMesh(  vtkSmartPointer<vtkPolyData> _polyData, ::fwData::Mesh::sptr _mesh );
+    /*!
+     * @brief Convert a vtkUnstructuredGrid to a ::fwData::Mesh::sptr.
      *
-     * Returns \b true if the conversion is a success and \b false if it fails
+     * @param[in] grid vtkUnstructuredGrid.
+     * @param[out] mesh ::fwData::Mesh::sptr.
      */
-    VTKIO_API static void fromVTKMesh(  vtkSmartPointer<vtkPolyData> _polyData, ::fwData::Mesh::sptr _mesh );
+
+    FWVTKIO_API static void fromVTKGrid(vtkSmartPointer<vtkUnstructuredGrid> grid, ::fwData::Mesh::sptr mesh);
 
     /*!
      * @brief Convert a ::fwData::Mesh::sptr to a vtkPolyData.
@@ -48,7 +51,7 @@ public :
      * @param[in] _mesh ::fwData::Mesh::sptr.
      * @param[out] _polyData vtkPolyData.
      */
-    VTKIO_API static void toVTKMesh( ::fwData::Mesh::sptr _mesh, vtkSmartPointer<vtkPolyData> _polyData);
+    FWVTKIO_API static void toVTKMesh( const ::fwData::Mesh::csptr& _mesh, vtkSmartPointer<vtkPolyData> _polyData);
 
     /*!
      * @brief Update a vtkPolyData with ::fwData::Mesh::sptr points
@@ -61,7 +64,8 @@ public :
      * vertex of the polydata, cells will not be updated.
      * Returns the updated vtkPolyPata
      */
-    VTKIO_API static vtkSmartPointer<vtkPolyData>  updatePolyDataPoints(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc );
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData>  updatePolyDataPoints(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                                          const fwData::Mesh::csptr &meshSrc );
 
     /*!
      * @brief Update a vtkPolyData with point color of fwData::Mesh
@@ -72,7 +76,8 @@ public :
      *
      * Returns the updated vtkPolyPata
      */
-    VTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataPointColor(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc);
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataPointColor(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                                             const ::fwData::Mesh::csptr& meshSrc);
 
     /*!
      * @brief Update a vtkPolyData with cell color of fwData::Mesh
@@ -83,7 +88,8 @@ public :
      *
      * Returns the updated vtkPolyPata
      */
-    VTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataCellColor(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc );
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataCellColor(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                                            const ::fwData::Mesh::csptr& meshSrc );
 
     /*!
      * @brief Update a vtkPolyData with point normals of fwData::Mesh
@@ -94,7 +100,8 @@ public :
      *
      * Returns the updated vtkPolyPata
      */
-    VTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataPointNormals(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc);
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataPointNormals(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                                               const ::fwData::Mesh::csptr& meshSrc);
 
     /*!
      * @brief Update a vtkPolyData with cell normals of fwData::Mesh
@@ -105,18 +112,39 @@ public :
      *
      * Returns the updated vtkPolyPata
      */
-    VTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataCellNormals(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc);
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataCellNormals(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                                              const ::fwData::Mesh::csptr& meshSrc);
 
+    /*!
+     * @brief Update a vtkPolyData with point texCoords of fwData::Mesh
+     *
+     * @param[out] polyDataDst vtkPolyData
+     * @param[in]  meshSrc ::fwData::Mesh::sptr
+     * @return the updated vtkPolyPata
+     */
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataPointTexCoords(
+        vtkSmartPointer<vtkPolyData> polyDataDst, const ::fwData::Mesh::csptr& meshSrc);
+
+    /*!
+     * @brief Update a vtkPolyData with cell texCoords of fwData::Mesh
+     *
+     * @param[out] polyDataDst vtkPolyData
+     * @param[in]  meshSrc ::fwData::Mesh::sptr
+     * @return the updated vtkPolyPata
+     */
+    FWVTKIO_API static vtkSmartPointer<vtkPolyData> updatePolyDataCellTexCoords(
+        vtkSmartPointer<vtkPolyData> polyDataDst, const ::fwData::Mesh::csptr& meshSrc);
 
     /*!
      * @brief Compute the volume of the mesh using MassProperties vtk class
      * @param[in] mesh current mesh
      * @return volume of the mesh
      */
-    VTKIO_API static double computeVolume( ::fwData::Mesh::sptr mesh );
+    FWVTKIO_API static double computeVolume( const ::fwData::Mesh::csptr& mesh );
+
 };
 
 } // namespace helper
 } // namespace fwVtkIO
 
-#endif // _VTKIO_HELPER_MESH_HPP_
+#endif // __FWVTKIO_HELPER_MESH_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/ProgressVtkToFw.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/ProgressVtkToFw.hpp
deleted file mode 100644
index fc1e4c3..0000000
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/ProgressVtkToFw.hpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _VTKIO_PROGESSVTKTOFW_HPP_
-#define _VTKIO_PROGESSVTKTOFW_HPP_
-
-#include <vtkCommand.h>
-#include <vtkProcessObject.h>
-
-#include <fwTools/ProgressAdviser.hpp>
-
-namespace fwVtkIO
-{
-
-//------------------------------------------------------------------------------
-
-class ProgressorBase
-{
-public:
-    typedef SPTR(ProgressorBase) sptr;
-};
-
-//------------------------------------------------------------------------------
-
-template< typename OBSERVEE >
-class ProgressVtkToFw : public ProgressorBase
-{
-public:
-    ProgressVtkToFw(OBSERVEE observee, SPTR(::fwTools::ProgressAdviser) observer, std::string msg);
-
-    virtual ~ProgressVtkToFw();
-
-protected :
-
-    OBSERVEE m_observee;
-    // observertag used by vtk
-    unsigned long m_obsTag;
-    bool m_initialized;
-};
-
-//------------------------------------------------------------------------------
-
-class Progressor
-{
-public:
-    typedef SPTR(Progressor) sptr;
-
-    template<typename OBS >
-    Progressor(OBS filter, SPTR(::fwTools::ProgressAdviser) observer, std::string message)
-    {
-        typedef ProgressVtkToFw< OBS > ProgressType;
-        m_progressor = ProgressorBase::sptr(
-                new ProgressType( filter, observer, message )
-                );
-    }
-
-    ProgressorBase::sptr m_progressor;
-};
-
-}
-
-
-#include "fwVtkIO/helper/ProgressVtkToFw.hxx"
-
-#endif /* _VTKIO_PROGESSVTKTOFW_HPP_ */
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/ProgressVtkToFw.hxx b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/ProgressVtkToFw.hxx
deleted file mode 100644
index 4badda5..0000000
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/ProgressVtkToFw.hxx
+++ /dev/null
@@ -1,73 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <limits>
-#include <sstream>
-
-#include <vtkSmartPointer.h>
-#include <vtkEvent.h>
-#include <vtkCommand.h>
-#include <vtkObjectFactory.h>
-
-#include <fwCore/base.hpp>
-
-namespace fwVtkIO
-{
-
-class LocalCommand : public vtkCommand
-{
-public:
-
-    LocalCommand() {};
-
-    static LocalCommand* New()
-    {
-        return new LocalCommand();
-    }
-
-    typedef LocalCommand Self;
-    typedef vtkSmartPointer<Self>      Pointer;
-
-    void Execute(vtkObject *caller, unsigned long eventId, void *callData)
-    {
-        vtkAlgorithm* algo = vtkAlgorithm::SafeDownCast(caller);
-        if( !algo ) return;
-        double percent = algo->GetProgress();
-        SLM_ASSERT("m_adviser no set", m_adviser);
-        m_adviser->notifyProgress( percent , m_msg );
-    }
-
-    std::string m_msg;
-    SPTR(::fwTools::ProgressAdviser) m_adviser;
-};
-
-//------------------------------------------------------------------------------
-
-template<typename OBSERVEE >
-ProgressVtkToFw<OBSERVEE >::ProgressVtkToFw(OBSERVEE observee, SPTR(::fwTools::ProgressAdviser) observer, std::string msg)
-: m_observee( observee), m_obsTag(std::numeric_limits<unsigned long>::max()), m_initialized(false)
-{
-    typename LocalCommand::Pointer vtkCallBack;
-    vtkCallBack = LocalCommand::Pointer::New();
-    vtkCallBack->m_msg = msg;
-    vtkCallBack->m_adviser = observer;
-    m_obsTag = m_observee->AddObserver(vtkCommand::ProgressEvent, vtkCallBack );
-    m_initialized = true;
-}
-
-//------------------------------------------------------------------------------
-
-template<typename OBSERVEE >
-ProgressVtkToFw<OBSERVEE >::~ProgressVtkToFw()
-{
-    if( m_initialized)
-    {
-        m_observee->RemoveObserver (m_obsTag);
-    }
-}
-
-}
-
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/TransferFunction.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/TransferFunction.hpp
index 3e0f511..817d8a5 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/TransferFunction.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/TransferFunction.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_HELPER_TRANSFERFUNCTION_HPP_
-#define _VTKIO_HELPER_TRANSFERFUNCTION_HPP_
+#ifndef __FWVTKIO_HELPER_TRANSFERFUNCTION_HPP__
+#define __FWVTKIO_HELPER_TRANSFERFUNCTION_HPP__
 
 #include <vtkSmartPointer.h>
 #include <vtkLogLookupTable.h>
@@ -23,14 +23,14 @@ namespace helper
 /**
  * @brief   Helper to manage vtk data from ::fwData::TransferFunction.
  * @class   TransferFunction
- * 
+ *
  * @date    2012.
  *
  */
-class VTKIO_CLASS_API TransferFunction
+class FWVTKIO_CLASS_API TransferFunction
 {
 
-public :
+public:
 
     /*!
      * @brief Convert a ::fwData::TransferFunction to a vtkLookupTable.
@@ -40,11 +40,11 @@ public :
      * @param[in] size lookup table size
      * @param[out] lt vtkLookupTable
      */
-    VTKIO_API static void toVtkLookupTable(
-            ::fwData::TransferFunction::sptr tf,
-             vtkSmartPointer<vtkLookupTable>  lt,
-            bool allowTransparency = false,
-            unsigned int size = 256 );
+    FWVTKIO_API static void toVtkLookupTable(
+        ::fwData::TransferFunction::sptr tf,
+        vtkSmartPointer<vtkLookupTable>  lt,
+        bool allowTransparency = false,
+        unsigned int size = 256 );
 
     /*!
      * @brief Convert the range of an Image or a TransferFunction to a black and white vtkLookupTable.
@@ -55,13 +55,13 @@ public :
      * @param[out] lt vtkLookupTable
      *
      */
-    VTKIO_API static void toBWVtkLookupTable(   double rangeMin, double rangeMax,
-                                                vtkSmartPointer<vtkLookupTable> lt,
-                                                unsigned int size = 256 );
+    FWVTKIO_API static void toBWVtkLookupTable(   double rangeMin, double rangeMax,
+                                                  vtkSmartPointer<vtkLookupTable> lt,
+                                                  unsigned int size = 256 );
 
-  };
+};
 
 } // namespace helper
 } // namespace fwVtkIO
 
-#endif // _VTKIO_HELPER_TRANSFERFUNCTION_HPP_
+#endif // __FWVTKIO_HELPER_TRANSFERFUNCTION_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/vtkLambdaCommand.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/vtkLambdaCommand.hpp
new file mode 100644
index 0000000..96a5bd6
--- /dev/null
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/helper/vtkLambdaCommand.hpp
@@ -0,0 +1,70 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWVTKIO_HELPER_VTKLAMBDACOMMAND_HPP__
+#define __FWVTKIO_HELPER_VTKLAMBDACOMMAND_HPP__
+
+#include "fwVtkIO/config.hpp"
+
+#include <vtkCommand.h>
+
+#include <functional>
+
+namespace fwVtkIO
+{
+
+namespace helper
+{
+
+/**
+ * @brief Allows use of vtkCommand with lambdas
+ */
+class FWVTKIO_CLASS_API vtkLambdaCommand : public vtkCommand
+{
+public:
+    typedef std::function< void (vtkObject *, unsigned long, void *) > Callback;
+
+    vtkTypeMacro(vtkLambdaCommand,vtkCommand);
+
+    /**
+     * @brief returns a new vtkLambdaCommand
+     */
+    static vtkLambdaCommand *New()
+    {
+        return new vtkLambdaCommand;
+    }
+
+    /**
+     * @brief vtkCommand::Execute implementation
+     */
+    FWVTKIO_API virtual void Execute(vtkObject *caller, unsigned long eid, void *callData);
+
+    /**
+     * @brief Sets callback
+     */
+    virtual void SetCallback(Callback callback)
+    {
+        this->m_callback = callback;
+    }
+
+protected:
+
+    vtkLambdaCommand()
+    {
+    }
+    ~vtkLambdaCommand()
+    {
+    }
+
+    Callback m_callback;
+};
+
+
+
+} // namespace helper
+} // namespace fwVtkIO
+
+#endif // __FWVTKIO_HELPER_VTKLAMBDACOMMAND_HPP__
diff --git a/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp b/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp
index 2c7cdbc..bae6c0e 100644
--- a/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp
+++ b/SrcLib/io/fwVtkIO/include/fwVtkIO/vtk.hpp
@@ -1,16 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _VTKIO_VTK_HPP_
-#define _VTKIO_VTK_HPP_
+#ifndef __FWVTKIO_VTK_HPP__
+#define __FWVTKIO_VTK_HPP__
 
-#include <boost/shared_ptr.hpp>
 
 #include <fwData/Image.hpp>
-#include <fwData/TriangularMesh.hpp>
 #include <fwData/TransformationMatrix3D.hpp>
 
 #include "fwVtkIO/config.hpp"
@@ -23,14 +21,6 @@ class vtkImageImport;
 class vtkMatrix4x4;
 class vtkLookupTable;
 
-/**
- * @brief   Namespace fwVtkIO.
- * @namespace   fwVtkIO
- * 
- * @date    2009.
- *
- *  The namespace fwVtkIO contains reader, writer and helper using the VTK lib for output and input actions between data and the frameWork
- */
 namespace fwVtkIO
 {
 
@@ -55,7 +45,7 @@ struct TypeTranslator
  * @return int : VTK data scalar type
  *
  */
-VTKIO_API int getVtkScalarType(::fwData::Image::sptr image);
+FWVTKIO_API int getVtkScalarType(::fwData::Image::sptr image);
 
 /**
  * @brief Allocate a new vtkImageData* from a ::fwData::Image::sptr.
@@ -67,7 +57,7 @@ VTKIO_API int getVtkScalarType(::fwData::Image::sptr image);
  * allocate a new vtkImage from a ::fwData::Image, vtkImage doesn't manage its buffer (the buffer is not copied)
  *
  */
-VTKIO_API void toVTKImage( ::fwData::Image::sptr _data ,  vtkImageData *dst);
+FWVTKIO_API void toVTKImage( ::fwData::Image::csptr _data,  vtkImageData *dst);
 
 /*!
  * @brief Convert a vtkImageData* to a ::fwData::Image::sptr.
@@ -77,7 +67,7 @@ VTKIO_API void toVTKImage( ::fwData::Image::sptr _data ,  vtkImageData *dst);
  *
  * Throw an exception if the conversion fails
  */
-VTKIO_API void fromVTKImage( vtkImageData* _source, ::fwData::Image::sptr _destination );
+FWVTKIO_API void fromVTKImage( vtkImageData* _source, ::fwData::Image::sptr _destination );
 
 /*!
  * @brief Configure a vtkImageImport* from a ::fwData::Image::sptr.
@@ -85,50 +75,7 @@ VTKIO_API void fromVTKImage( vtkImageData* _source, ::fwData::Image::sptr _desti
  * @param[in] _pDataImage ::fwData::Image::sptr.
  * @param[out] _pImageImport vtkImageImport*.
  */
-VTKIO_API void configureVTKImageImport( ::vtkImageImport * _pImageImport, ::fwData::Image::sptr _pDataImage );
-
-/*!
- * @brief Convert a ::fwData::TriangularMesh::sptr to a vtkPolyData*.
- *
- * @param[in] _mesh ::fwData::TriangularMesh::sptr.
- * @return vtkPolyData*.
- */
-VTKIO_API vtkPolyData*  toVTKMesh( ::fwData::TriangularMesh::sptr _mesh );
-
-/*!
- * @brief Update a vtkPolyData* with ::fwData::TriangularMesh::sptr points
- *
- * @param[out] polyDataDst vtkPolyData*
- * @param[in]  meshSrc ::fwData::TriangularMesh::sptr
- * @return vtkPolyData*
- *
- * Warning : be carefull with updatePoints : this may change the number of
- * vertex of the polydata, cells will not be updated.
- * Returns the updated vtkPolyPata
- */
-VTKIO_API vtkPolyData*  updatePolyDataPoints(vtkPolyData* polyDataDst, ::fwData::TriangularMesh::sptr meshSrc );
-
-/*!
- * @brief Convert a vtkPolyData* to a ::fwData::TriangularMesh::sptr.
- *
- * @param[in] _polyData vtkPolyData*.
- * @param[out] _triangularMesh ::fwData::TriangularMesh::sptr.
- * @return bool.
- *
- * Returns \b true if the conversion is a success and \b false if it fails
- */
-VTKIO_API  bool fromVTKMesh( vtkPolyData *_polyData, ::fwData::TriangularMesh::sptr _triangularMesh );
-
-
-/*
- * @brief compute the volume of the mesh using MassProperties vtk class
- */
-VTKIO_API  double computeVolume(  ::fwData::TriangularMesh::sptr _triangularMesh );
-
-/*
-* @brief compute the volume of the mesh using ImageStencil
-*/
-VTKIO_API  double computeVolumeWithStencil(  ::fwData::TriangularMesh::sptr _triangularMesh );
+FWVTKIO_API void configureVTKImageImport( ::vtkImageImport * _pImageImport, ::fwData::Image::csptr _pDataImage );
 
 /*!
  * @brief Convert a ::fwData::TransformationMatrix3D::sptr to a vtkMatrix4x4*.
@@ -136,7 +83,7 @@ VTKIO_API  double computeVolumeWithStencil(  ::fwData::TriangularMesh::sptr _tri
  * @param[in] _transfoMatrix ::fwData::TransformationMatrix3D::sptr.
  * @return vtkPolyData*.
  */
-VTKIO_API vtkMatrix4x4 *  toVTKMatrix(  ::fwData::TransformationMatrix3D::sptr _transfoMatrix );
+FWVTKIO_API vtkMatrix4x4 *  toVTKMatrix(  ::fwData::TransformationMatrix3D::sptr _transfoMatrix );
 
 /*!
  * @brief Convert a vtkMatrix4x4* to a ::fwData::TransformationMatrix3D::sptr.
@@ -147,8 +94,8 @@ VTKIO_API vtkMatrix4x4 *  toVTKMatrix(  ::fwData::TransformationMatrix3D::sptr _
  *
  * Returns \b true if the conversion is a success and \b false if it fails
  */
-VTKIO_API  bool fromVTKMatrix( vtkMatrix4x4* _matrix,  ::fwData::TransformationMatrix3D::sptr _transfoMatrix);
+FWVTKIO_API bool fromVTKMatrix( vtkMatrix4x4* _matrix,  ::fwData::TransformationMatrix3D::sptr _transfoMatrix);
 
 }
 
-#endif // _VTKIO_VTK_HPP_
+#endif // __FWVTKIO_VTK_HPP__
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageReader.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageReader.cpp
index 22e963a..f2b6e23 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageReader.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageReader.cpp
@@ -1,20 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkGenericDataObjectReader.h>
-#include <vtkImageData.h>
-#include <vtkSmartPointer.h>
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/ImageReader.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/reader/registry/macros.hpp>
 
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/ImageReader.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkGenericDataObjectReader.h>
+#include <vtkImageData.h>
+#include <vtkSmartPointer.h>
 
 fwDataIOReaderRegisterMacro( ::fwVtkIO::ImageReader );
 
@@ -23,8 +26,9 @@ namespace fwVtkIO
 {
 //------------------------------------------------------------------------------
 
-ImageReader::ImageReader(::fwDataIO::reader::IObjectReader::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this)
+ImageReader::ImageReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this),
+    m_job(::fwJobs::Observer::New("VTK Image reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -40,6 +44,8 @@ ImageReader::~ImageReader()
 
 void ImageReader::read()
 {
+    using namespace fwVtkIO::helper;
+
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
@@ -48,13 +54,31 @@ void ImageReader::read()
     vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New();
     reader->SetFileName(this->getFile().string().c_str());
 
-    //add progress observation
-    Progressor progress(reader, this->getSptr(), this->getFile().string());
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback(
+        [this](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkGenericDataObjectReader*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        }
+        );
+    reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+
+    m_job->addSimpleCancelHook( [&]()
+        {
+            reader->AbortExecuteOn();
+        } );
 
     reader->Update();
+    reader->UpdateInformation();
+    reader->PropagateUpdateExtent();
 
     vtkDataObject *obj = reader->GetOutput();
-    vtkImageData* img = vtkImageData::SafeDownCast(obj);
+    vtkImageData* img  = vtkImageData::SafeDownCast(obj);
+
+    m_job->finish();
 
     FW_RAISE_IF("ImageReader cannot read VTK image file :"<<this->getFile().string(), !img);
     try
@@ -65,14 +89,23 @@ void ImageReader::read()
     {
         FW_RAISE("VTKImage to fwData::Image failed "<<e.what());
     }
+}
 
+//------------------------------------------------------------------------------
+
+std::string ImageReader::extension()
+{
+    return ".vtk";
 }
 
 //------------------------------------------------------------------------------
 
-std::string  ImageReader::extension()
+::fwJobs::IJob::sptr ImageReader::getJob() const
 {
-   return ".vtk";
+    return m_job;
 }
 
+//------------------------------------------------------------------------------
+
+
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageWriter.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageWriter.cpp
index 7aad130..4203991 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageWriter.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/ImageWriter.cpp
@@ -1,20 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkImageData.h>
-#include <vtkGenericDataObjectWriter.h>
-#include <vtkSmartPointer.h>
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/ImageWriter.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/writer/registry/macros.hpp>
 
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/ImageWriter.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/Observer.hpp>
+
+#include <vtkImageData.h>
+#include <vtkGenericDataObjectWriter.h>
+#include <vtkSmartPointer.h>
+
 
 fwDataIOWriterRegisterMacro( ::fwVtkIO::ImageWriter );
 
@@ -24,7 +27,8 @@ namespace fwVtkIO
 //------------------------------------------------------------------------------
 
 ImageWriter::ImageWriter(::fwDataIO::writer::IObjectWriter::Key key) :
-        ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+    ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this),
+    m_job(::fwJobs::Observer::New("VTK Image Writer"))
 {
     SLM_TRACE_FUNC();
 }
@@ -40,29 +44,49 @@ ImageWriter::~ImageWriter()
 
 void ImageWriter::write()
 {
+    using namespace fwVtkIO::helper;
+
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
     ::fwData::Image::sptr pImage = getConcreteObject();
 
     vtkSmartPointer< vtkGenericDataObjectWriter > writer = vtkSmartPointer< vtkGenericDataObjectWriter >::New();
-    vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
+    vtkSmartPointer< vtkImageData > vtkImage             = vtkSmartPointer< vtkImageData >::New();
     ::fwVtkIO::toVTKImage( pImage, vtkImage );
-    writer->SetInput( vtkImage );
+    writer->SetInputData( vtkImage );
     writer->SetFileName(this->getFile().string().c_str());
     writer->SetFileTypeToBinary();
 
-    //add progress observation
-    Progressor progress(writer, this->getSptr(), this->getFile().string());
-
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback([this](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkGenericDataObjectWriter*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        });
+
+    writer->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+    m_job->addSimpleCancelHook( [&]()
+        {
+            writer->AbortExecuteOn();
+        });
     writer->Write();
+    m_job->finish();
+}
+
+//------------------------------------------------------------------------------
+
+std::string ImageWriter::extension()
+{
+    return ".vtk";
 }
 
 //------------------------------------------------------------------------------
 
-std::string  ImageWriter::extension()
+::fwJobs::IJob::sptr ImageWriter::getJob() const
 {
-   return ".vtk";
+    return m_job;
 }
 
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshReader.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshReader.cpp
index 5a0b8a9..88cd182 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshReader.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshReader.cpp
@@ -1,20 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkGenericDataObjectReader.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
+#include "fwVtkIO/helper/Mesh.hpp"
+#include "fwVtkIO/MeshReader.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/reader/registry/macros.hpp>
 
-#include "fwVtkIO/helper/Mesh.hpp"
-#include "fwVtkIO/MeshReader.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkGenericDataObjectReader.h>
+#include <vtkPolyData.h>
+#include <vtkSmartPointer.h>
 
 fwDataIOReaderRegisterMacro( ::fwVtkIO::MeshReader );
 
@@ -23,7 +26,8 @@ namespace fwVtkIO
 //------------------------------------------------------------------------------
 
 MeshReader::MeshReader(::fwDataIO::reader::IObjectReader::Key key) :
-                ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this)
+    ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this),
+    m_job(::fwJobs::Observer::New("Mesh reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -44,25 +48,48 @@ void MeshReader::read()
 
     ::fwData::Mesh::sptr pMesh = getConcreteObject();
 
+    using namespace fwVtkIO::helper;
     vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New();
     reader->SetFileName(this->getFile().string().c_str());
 
-    //add progress observation
-    Progressor progress(reader, this->getSptr(), this->getFile().string());
+    vtkSmartPointer< vtkLambdaCommand > progressCallback;
+
+    progressCallback = vtkSmartPointer< vtkLambdaCommand >::New();
+    progressCallback->SetCallback(
+        [&](vtkObject* caller, long unsigned int, void*)
+        {
+            auto filter = static_cast< vtkGenericDataObjectReader* >(caller);
+            m_job->doneWork(filter->GetProgress() * 100);
+        }
+        );
+    reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+    m_job->addSimpleCancelHook([&] { reader->AbortExecuteOn(); });
 
     reader->Update();
 
     vtkDataObject *obj = reader->GetOutput();
-    vtkPolyData* mesh = vtkPolyData::SafeDownCast(obj);
+    vtkPolyData* mesh  = vtkPolyData::SafeDownCast(obj);
     FW_RAISE_IF("MeshReader cannot read VTK Mesh file : "<< this->getFile().string(), !mesh);
     ::fwVtkIO::helper::Mesh::fromVTKMesh(mesh, pMesh);
+
+    m_job->finish();
+}
+
+//------------------------------------------------------------------------------
+
+std::string MeshReader::extension()
+{
+    return ".vtk";
 }
 
 //------------------------------------------------------------------------------
 
-std::string  MeshReader::extension()
+::fwJobs::IJob::sptr MeshReader::getJob() const
 {
-   return ".vtk";
+    return m_job;
 }
 
+//------------------------------------------------------------------------------
+
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshWriter.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshWriter.cpp
index 62c756c..73d3808 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshWriter.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/MeshWriter.cpp
@@ -1,20 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkPolyData.h>
-#include <vtkGenericDataObjectWriter.h>
-#include <vtkSmartPointer.h>
+#include "fwVtkIO/helper/Mesh.hpp"
+#include "fwVtkIO/MeshWriter.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/writer/registry/macros.hpp>
 
-#include "fwVtkIO/helper/Mesh.hpp"
-#include "fwVtkIO/MeshWriter.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkPolyData.h>
+#include <vtkGenericDataObjectWriter.h>
+#include <vtkSmartPointer.h>
 
 fwDataIOWriterRegisterMacro( ::fwVtkIO::MeshWriter );
 
@@ -23,8 +26,9 @@ namespace fwVtkIO
 {
 //------------------------------------------------------------------------------
 
-MeshWriter::MeshWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+MeshWriter::MeshWriter(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this),
+    m_job(::fwJobs::Observer::New("Mesh writer"))
 {
     SLM_TRACE_FUNC();
 }
@@ -40,28 +44,53 @@ MeshWriter::~MeshWriter()
 
 void MeshWriter::write()
 {
+    using namespace fwVtkIO::helper;
+
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
     ::fwData::Mesh::sptr pMesh = getConcreteObject();
 
     vtkSmartPointer< vtkGenericDataObjectWriter > writer = vtkSmartPointer< vtkGenericDataObjectWriter >::New();
-    vtkSmartPointer< vtkPolyData > vtkMesh = vtkSmartPointer< vtkPolyData >::New();
+    vtkSmartPointer< vtkPolyData > vtkMesh               = vtkSmartPointer< vtkPolyData >::New();
     ::fwVtkIO::helper::Mesh::toVTKMesh( pMesh, vtkMesh);
-    writer->SetInput( vtkMesh );
+    writer->SetInputData( vtkMesh );
     writer->SetFileName(this->getFile().string().c_str());
     writer->SetFileTypeToBinary();
 
-    //add progress observation
-    Progressor progress(writer, this->getSptr(), this->getFile().string());
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback(
+        [&](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkGenericDataObjectWriter*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        }
+        );
+    writer->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+    m_job->addSimpleCancelHook([&] { writer->AbortExecuteOn(); });
+
     writer->Update();
+
+    m_job->finish();
 }
 
 //------------------------------------------------------------------------------
 
-std::string  MeshWriter::extension()
+std::string MeshWriter::extension()
 {
-   return ".vtk";
+    return ".vtk";
 }
 
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr MeshWriter::getJob() const
+{
+    return m_job;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageReader.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageReader.cpp
index d1b7731..56cd35d 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageReader.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageReader.cpp
@@ -1,20 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkSmartPointer.h>
-#include <vtkMetaImageReader.h>
-#include <vtkImageData.h>
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/MetaImageReader.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/reader/registry/macros.hpp>
 
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/MetaImageReader.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkSmartPointer.h>
+#include <vtkMetaImageReader.h>
+#include <vtkImageData.h>
+
 
 fwDataIOReaderRegisterMacro( ::fwVtkIO::MetaImageReader );
 
@@ -23,8 +27,9 @@ namespace fwVtkIO
 {
 //------------------------------------------------------------------------------
 
-MetaImageReader::MetaImageReader(::fwDataIO::reader::IObjectReader::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this)
+MetaImageReader::MetaImageReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this),
+    m_job(::fwJobs::Observer::New("Meta image reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -40,6 +45,7 @@ MetaImageReader::~MetaImageReader()
 
 void MetaImageReader::read()
 {
+    using namespace fwVtkIO::helper;
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
@@ -48,12 +54,29 @@ void MetaImageReader::read()
     vtkSmartPointer< vtkMetaImageReader > reader = vtkSmartPointer< vtkMetaImageReader >::New();
     reader->SetFileName(this->getFile().string().c_str());
 
-    Progressor progress(reader, this->getSptr(), this->getFile().string());
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback(
+        [&](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkMetaImageReader*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        }
+        );
+    reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+    m_job->addSimpleCancelHook([&] { reader->AbortExecuteOn(); });
 
     reader->Update();
+    reader->UpdateInformation();
+    reader->PropagateUpdateExtent();
 
     vtkDataObject *obj = reader->GetOutput();
-    vtkImageData* img = vtkImageData::SafeDownCast(obj);
+    vtkImageData* img  = vtkImageData::SafeDownCast(obj);
+
+    m_job->finish();
+
     FW_RAISE_IF("MetaImageReader cannot read mhd image file :"<<this->getFile().string(), !img);
     try
     {
@@ -67,9 +90,18 @@ void MetaImageReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  MetaImageReader::extension()
+std::string MetaImageReader::extension()
 {
-   return ".mhd";
+    return ".mhd";
 }
 
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr MetaImageReader::getJob() const
+{
+    return m_job;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageWriter.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageWriter.cpp
index 0215a94..c161acf 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageWriter.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/MetaImageWriter.cpp
@@ -1,20 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkSmartPointer.h>
-#include <vtkImageData.h>
-#include <vtkMetaImageWriter.h>
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/MetaImageWriter.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/writer/registry/macros.hpp>
 
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/MetaImageWriter.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkSmartPointer.h>
+#include <vtkImageData.h>
+#include <vtkMetaImageWriter.h>
 
 fwDataIOWriterRegisterMacro( ::fwVtkIO::MetaImageWriter );
 
@@ -24,7 +27,8 @@ namespace fwVtkIO
 //------------------------------------------------------------------------------
 
 MetaImageWriter::MetaImageWriter(::fwDataIO::writer::IObjectWriter::Key key) :
-        ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+    ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this),
+    m_job(::fwJobs::Observer::New("MetaImage writer"))
 {
     SLM_TRACE_FUNC();
 }
@@ -40,28 +44,49 @@ MetaImageWriter::~MetaImageWriter()
 
 void MetaImageWriter::write()
 {
+    using namespace fwVtkIO::helper;
+
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
     ::fwData::Image::sptr pImage = getConcreteObject();
 
     vtkSmartPointer< vtkMetaImageWriter > writer = vtkSmartPointer< vtkMetaImageWriter >::New();
-    vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
+    vtkSmartPointer< vtkImageData > vtkImage     = vtkSmartPointer< vtkImageData >::New();
     ::fwVtkIO::toVTKImage( pImage, vtkImage );
-    writer->SetInput( vtkImage );
+    writer->SetInputData( vtkImage );
     writer->SetFileName( this->getFile().string().c_str() );
     writer->SetCompression(true);
 
-    Progressor progress(writer, this->getSptr(), this->getFile().string());
-
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback([this](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkMetaImageWriter*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        });
+
+    writer->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+    m_job->addSimpleCancelHook( [&]()
+        {
+            writer->AbortExecuteOn();
+        });
     writer->Write();
+    m_job->finish();
+}
+
+//------------------------------------------------------------------------------
+
+std::string MetaImageWriter::extension()
+{
+    return ".mhd";
 }
 
 //------------------------------------------------------------------------------
 
-std::string  MetaImageWriter::extension()
+::fwJobs::IJob::sptr MetaImageWriter::getJob() const
 {
-   return ".mhd";
+    return m_job;
 }
 
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/ModelSeriesObjWriter.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/ModelSeriesObjWriter.cpp
index 0701edf..f74e018 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/ModelSeriesObjWriter.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/ModelSeriesObjWriter.cpp
@@ -1,19 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem.hpp>
+#ifndef ANDROID
 
-#include <vtkActor.h>
-#include <vtkPolyData.h>
-#include <vtkProperty.h>
-#include <vtkOBJExporter.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderer.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkSmartPointer.h>
+#include "fwVtkIO/helper/Mesh.hpp"
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/ModelSeriesObjWriter.hpp"
 
 #include <fwCore/base.hpp>
 
@@ -26,9 +21,19 @@
 
 #include <fwTools/UUID.hpp>
 
-#include "fwVtkIO/helper/Mesh.hpp"
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/ModelSeriesObjWriter.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkActor.h>
+#include <vtkPolyData.h>
+#include <vtkProperty.h>
+#include <vtkOBJExporter.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderer.h>
+#include <vtkPolyDataMapper.h>
+#include <vtkSmartPointer.h>
+
+#include <boost/filesystem.hpp>
 
 fwDataIOWriterRegisterMacro( ::fwVtkIO::ModelSeriesObjWriter );
 
@@ -37,8 +42,9 @@ namespace fwVtkIO
 {
 //------------------------------------------------------------------------------
 
-ModelSeriesObjWriter::ModelSeriesObjWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this)
+ModelSeriesObjWriter::ModelSeriesObjWriter(::fwDataIO::writer::IObjectWriter::Key key) :
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this),
+    m_job(::fwJobs::Observer::New("ModelSeries Writer"))
 {
     SLM_TRACE_FUNC();
 }
@@ -56,25 +62,29 @@ vtkSmartPointer< vtkActor > createActor( const ::fwData::Reconstruction::sptr &
 {
     vtkSmartPointer< vtkActor >  actor = vtkSmartPointer< vtkActor >::New();
 
-    ::fwData::Mesh::sptr mesh = pReconstruction->getMesh();
+    ::fwData::Mesh::sptr mesh         = pReconstruction->getMesh();
     ::fwData::Material::sptr material = pReconstruction->getMaterial();
 
     vtkSmartPointer< vtkPolyData > polyData = vtkSmartPointer< vtkPolyData >::New();
     ::fwVtkIO::helper::Mesh::toVTKMesh( mesh, polyData);
-    vtkSmartPointer<vtkPolyDataMapper> mapper  = vtkSmartPointer<vtkPolyDataMapper>::New();
-    mapper->SetInput(polyData);
+    vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+    mapper->SetInputData(polyData);
     actor->SetMapper(mapper);
 
-    ::fwData::Color::sptr color = material->ambient();
     vtkProperty *property = actor->GetProperty();
-    property->SetColor( color->red(), color->green(), color->blue());
+
+    ::fwData::Color::sptr diffuse = material->diffuse();
+    property->SetDiffuseColor(diffuse->red(), diffuse->green(), diffuse->blue());
+    property->SetOpacity( diffuse->alpha() );
+
+    ::fwData::Color::sptr ambient = material->ambient();
+    property->SetAmbientColor(ambient->red(), ambient->green(), ambient->blue());
+
     property->SetSpecularColor(1.,1.,1.);
     property->SetSpecularPower(100.); //Shininess
-    property->SetAmbient(.05);
-    property->SetDiffuse(1.);
-    property->SetSpecular(1.);
+
     property->SetInterpolationToPhong();
-    property->SetOpacity( color->alpha() );
+
 
     return actor;
 }
@@ -86,14 +96,16 @@ void ModelSeriesObjWriter::write()
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
-    ::boost::filesystem::path prefix =  this->getFolder();
+    ::boost::filesystem::path prefix = this->getFolder();
 
     ::fwMedData::ModelSeries::sptr modelSeries = getConcreteObject();
 
-    BOOST_FOREACH( ::fwData::Reconstruction::sptr rec, modelSeries->getReconstructionDB() )
+    m_job->setTotalWorkUnits(modelSeries->getReconstructionDB().size());
+    std::uint64_t units = 0;
+    for(const ::fwData::Reconstruction::sptr& rec :  modelSeries->getReconstructionDB() )
     {
         vtkSmartPointer< vtkRenderer > renderer = vtkSmartPointer< vtkRenderer >::New();
-        vtkSmartPointer< vtkActor >  actor = createActor(rec);
+        vtkSmartPointer< vtkActor >  actor      = createActor(rec);
         renderer->AddActor(actor);
 
         vtkSmartPointer< vtkRenderWindow > renderWindow = vtkSmartPointer< vtkRenderWindow >::New();
@@ -105,9 +117,10 @@ void ModelSeriesObjWriter::write()
         exporter->SetRenderWindow(renderWindow);
         exporter->SetFilePrefix(filename.c_str());
         exporter->Write();
-
+        m_job->doneWork(++units);
         // can not observe progression, not a vtkAlgorithm ...
     }
+    m_job->finish();
 }
 
 //------------------------------------------------------------------------------
@@ -117,5 +130,14 @@ std::string ModelSeriesObjWriter::extension()
     return ".obj";
 }
 
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr ModelSeriesObjWriter::getJob() const
+{
+    return m_job;
+}
+
 } // namespace fwVtkIO
 
+#endif //ANDROID
+
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/SeriesDBReader.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/SeriesDBReader.cpp
index a0a756d..170be65 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/SeriesDBReader.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/SeriesDBReader.cpp
@@ -1,22 +1,46 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <numeric>
-#include <algorithm>
-#include <iosfwd>
+#include "fwVtkIO/helper/Mesh.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
+#include "fwVtkIO/SeriesDBReader.hpp"
+#include "fwVtkIO/vtk.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <fwData/Image.hpp>
+#include <fwData/Mesh.hpp>
+#include <fwData/Reconstruction.hpp>
+
+#include <fwDataIO/reader/registry/macros.hpp>
+
+#include <fwMedData/Equipment.hpp>
+#include <fwMedData/ImageSeries.hpp>
+#include <fwMedData/ModelSeries.hpp>
+#include <fwMedData/Patient.hpp>
+#include <fwMedData/Study.hpp>
+
+#include <fwMemory/BufferObject.hpp>
+#include <fwMemory/stream/in/IFactory.hpp>
 
+#include <fwTools/dateAndTime.hpp>
+#include <fwTools/UUID.hpp>
+
+#include <boost/algorithm/string/join.hpp>
+#include <boost/date_time/posix_time/posix_time.hpp>
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/path.hpp>
 #include <boost/iostreams/categories.hpp>
-#include <boost/iostreams/stream.hpp>
 #include <boost/iostreams/filtering_stream.hpp>
-#include <boost/foreach.hpp>
-#include <boost/date_time/posix_time/posix_time.hpp>
-#include <boost/algorithm/string/join.hpp>
+#include <boost/iostreams/stream.hpp>
 
+#include <vtkDataSetAttributes.h>
 #include <vtkGenericDataObjectReader.h>
 #include <vtkImageData.h>
 #include <vtkInformation.h>
@@ -29,30 +53,9 @@
 #include <vtkXMLGenericDataObjectReader.h>
 #include <vtkXMLImageDataReader.h>
 
-#include <fwCore/base.hpp>
-
-#include <fwData/Image.hpp>
-#include <fwData/Mesh.hpp>
-#include <fwData/Reconstruction.hpp>
-
-#include <fwTools/UUID.hpp>
-#include <fwTools/dateAndTime.hpp>
-
-#include <fwMemory/stream/in/IFactory.hpp>
-#include <fwMemory/BufferObject.hpp>
-
-#include <fwMedData/Equipment.hpp>
-#include <fwMedData/Study.hpp>
-#include <fwMedData/Patient.hpp>
-#include <fwMedData/ModelSeries.hpp>
-#include <fwMedData/ImageSeries.hpp>
-
-#include <fwDataIO/reader/registry/macros.hpp>
-
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/helper/Mesh.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
-#include "fwVtkIO/SeriesDBReader.hpp"
+#include <algorithm>
+#include <iosfwd>
+#include <numeric>
 
 fwDataIOReaderRegisterMacro( ::fwVtkIO::SeriesDBReader );
 
@@ -92,7 +95,8 @@ void  initSeries(::fwMedData::Series::sptr series, const std::string& instanceUI
 
 SeriesDBReader::SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key) :
     ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader >(this),
-    m_lazyMode(true)
+    m_lazyMode(true),
+    m_job(::fwJobs::Observer::New("SeriesDB reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -105,27 +109,59 @@ SeriesDBReader::~SeriesDBReader()
 }
 
 //------------------------------------------------------------------------------
-    template <typename T, typename FILE>
-vtkSmartPointer< vtkDataObject  > getObj(FILE &file, SeriesDBReader *progressor)
+template <typename T, typename FILE>
+vtkSmartPointer< vtkDataObject  > getObj(FILE &file, const ::fwJobs::Observer::sptr& job)
 {
+    using namespace fwVtkIO::helper;
+
     vtkSmartPointer< T > reader = vtkSmartPointer< T >::New();
     reader->SetFileName(file.string().c_str());
-    if(progressor)
+
+    if(job)
+    {
+        vtkSmartPointer<vtkLambdaCommand> progressCallback;
+        progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+        progressCallback->SetCallback([&](vtkObject* caller, long unsigned int, void* )
+            {
+                auto filter = static_cast<T*>(caller);
+                job->doneWork( filter->GetProgress()*100 );
+            });
+        reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+        job->addSimpleCancelHook( [&]()
+            {
+                reader->AbortExecuteOn();
+            } );
+        reader->Update();
+        job->finish();
+    }
+    else
     {
-        Progressor progress(reader, progressor->getSptr(), file.string());
+        reader->Update();
     }
-    reader->Update();
     return reader->GetOutput();
 }
 
 //------------------------------------------------------------------------------
 
-
 ::fwData::Object::sptr getDataObject(const vtkSmartPointer< vtkDataObject  > &obj, const boost::filesystem::path &file)
 {
-    vtkSmartPointer< vtkPolyData  > mesh = vtkPolyData::SafeDownCast(obj);
-    vtkSmartPointer< vtkImageData  > img = vtkImageData::SafeDownCast(obj);
+    vtkSmartPointer< vtkPolyData > mesh         = vtkPolyData::SafeDownCast(obj);
+    vtkSmartPointer< vtkImageData > img         = vtkImageData::SafeDownCast(obj);
+    vtkSmartPointer< vtkUnstructuredGrid > grid = vtkUnstructuredGrid::SafeDownCast(obj);
     ::fwData::Object::sptr dataObj;
+
+    if(grid)
+    {
+        ::fwData::Mesh::sptr meshObj = ::fwData::Mesh::New();
+        ::fwVtkIO::helper::Mesh::fromVTKGrid(grid, meshObj);
+
+        ::fwData::Reconstruction::sptr rec = ::fwData::Reconstruction::New();
+        rec->setMesh(meshObj);
+        rec->setOrganName(file.stem().string());
+        rec->setIsVisible(true);
+        dataObj = rec;
+    }
     if(mesh)
     {
         ::fwData::Mesh::sptr meshObj = ::fwData::Mesh::New();
@@ -163,14 +199,21 @@ struct FilteringStream : ::boost::iostreams::filtering_istream
         m_image(source),
         m_bufferObject(source->getDataArray()->getBufferObject()),
         m_lock( m_bufferObject->lock() ),
-        m_bufferStream( ::boost::make_shared<BufferStreamType>(static_cast<char *>(m_lock.getBuffer()), m_bufferObject->getSize()) )
+        m_bufferStream( std::make_shared<BufferStreamType>(static_cast<char *>(m_lock.getBuffer()),
+                                                           m_bufferObject->getSize()) )
     {
         this->push(*m_bufferStream);
     }
 
     ~FilteringStream()
     {
-        try { this->reset(); } catch (...) { }
+        try
+        {
+            this->reset();
+        }
+        catch (...)
+        {
+        }
     }
 
     ::fwData::Image::sptr m_image;
@@ -187,7 +230,8 @@ class ImageStream : public ::fwMemory::stream::in::IFactory
 public:
 
     ImageStream( const ::boost::filesystem::path& path ) :  m_path(path)
-    {}
+    {
+    }
 
 protected:
 
@@ -199,7 +243,7 @@ protected:
         }
 
         vtkSmartPointer< vtkDataObject  > obj;
-        obj = getObj<READER>(m_path, NULL);
+        obj = getObj<READER>(m_path, nullptr);
 
         return ::fwData::Image::dynamicCast(getDataObject(obj, m_path));
     }
@@ -207,7 +251,7 @@ protected:
     SPTR(std::istream) get()
     {
         SPTR(FilteringStream) is
-            = ::boost::make_shared< FilteringStream>( this->getImage() );
+            = std::make_shared< FilteringStream>( this->getImage() );
 
         return is;
     }
@@ -250,36 +294,37 @@ void updateImageFromVtkInfo(const vtkSmartPointer< vtkInformation > &info, const
     ::fwData::Image::OriginType origin(3, 0);
     info->Get(vtkDataObject::ORIGIN(), &origin[0]);
     imgObj->setOrigin(origin);
+
+    vtkInformation *attrInfo = vtkDataObject::GetActiveFieldInformation(info, vtkDataObject::FIELD_ASSOCIATION_POINTS,
+                                                                        vtkDataSetAttributes::SCALARS);
+    int type           = attrInfo->Get(vtkDataObject::FIELD_ARRAY_TYPE());
+    int nbOfComponents = attrInfo->Get(vtkDataObject::FIELD_NUMBER_OF_COMPONENTS());
+    imgObj->setType( ::fwVtkIO::TypeTranslator::translate( attrInfo->Get(vtkDataObject::FIELD_ARRAY_TYPE()) ) );
+    imgObj->setNumberOfComponents(nbOfComponents);
+    imgObj->getDataArray()->setType(imgObj->getType());
 }
 
 void getInfo(const vtkSmartPointer< vtkGenericDataObjectReader > &reader, const ::fwData::Image::sptr &imgObj)
 {
-    vtkSmartPointer< vtkImageData  > vtkImage = vtkImageData::SafeDownCast(reader->GetOutput());
-    imgObj->setType( ::fwVtkIO::TypeTranslator::translate( vtkImage->GetScalarType() ) );
-
-    vtkSmartPointer< vtkStructuredPointsReader > imgReader =
-        vtkSmartPointer< vtkStructuredPointsReader >::New();
+    vtkSmartPointer< vtkStructuredPointsReader > imgReader = vtkSmartPointer< vtkStructuredPointsReader >::New();
     imgReader->SetFileName(reader->GetFileName());
 
     vtkSmartPointer< vtkInformation > info = vtkSmartPointer< vtkInformation >::New();
     imgReader->ReadMetaData(info);
 
     updateImageFromVtkInfo(info, imgObj);
-    imgObj->getDataArray()->resize(imgObj->getType(), imgObj->getSize(), vtkImage->GetNumberOfScalarComponents(), false);
+    imgObj->getDataArray()->resize(imgObj->getSize(), false);
 
     ::fwMemory::BufferObject::sptr buffObj = imgObj->getDataArray()->getBufferObject();
     boost::filesystem::path file = reader->GetFileName();
-    buffObj->setIStreamFactory( ::boost::make_shared< ImageStream<vtkStructuredPointsReader> >(file), imgObj->getSizeInBytes());
+    buffObj->setIStreamFactory( std::make_shared< ImageStream<vtkStructuredPointsReader> >(file),
+                                imgObj->getSizeInBytes());
 }
 
 
 void getInfo(const vtkSmartPointer< vtkXMLGenericDataObjectReader > &reader, const ::fwData::Image::sptr &imgObj)
 {
-    vtkSmartPointer< vtkImageData  > vtkImage = vtkImageData::SafeDownCast(reader->GetOutput());
-    imgObj->setType( ::fwVtkIO::TypeTranslator::translate( vtkImage->GetScalarType() ) );
-
-    vtkSmartPointer< vtkXMLImageDataReader > imgReader =
-        vtkSmartPointer< vtkXMLImageDataReader >::New();
+    vtkSmartPointer< vtkXMLImageDataReader > imgReader = vtkSmartPointer< vtkXMLImageDataReader >::New();
     imgReader->SetFileName(reader->GetFileName());
 
     vtkSmartPointer< vtkInformation > info = vtkSmartPointer< vtkInformation >::New();
@@ -287,18 +332,19 @@ void getInfo(const vtkSmartPointer< vtkXMLGenericDataObjectReader > &reader, con
     imgReader->CopyOutputInformation(info,0);
 
     updateImageFromVtkInfo(info, imgObj);
-    imgObj->getDataArray()->resize(imgObj->getType(), imgObj->getSize(), vtkImage->GetNumberOfScalarComponents(), false);
+    imgObj->getDataArray()->resize(imgObj->getSize(), false);
 
     ::fwMemory::BufferObject::sptr buffObj = imgObj->getDataArray()->getBufferObject();
     boost::filesystem::path file = reader->GetFileName();
-    buffObj->setIStreamFactory( ::boost::make_shared< ImageStream<vtkXMLImageDataReader> >(file), imgObj->getSizeInBytes());
+    buffObj->setIStreamFactory( std::make_shared< ImageStream<vtkXMLImageDataReader> >(file),
+                                imgObj->getSizeInBytes());
 
 }
 
 //------------------------------------------------------------------------------
 
 template< typename DATA_READER >
-::fwData::Image::sptr lazyRead( const ::boost::filesystem::path &file)
+::fwData::Image::sptr lazyRead( const ::boost::filesystem::path &file, const ::fwJobs::Observer::sptr& job)
 {
     vtkSmartPointer< DATA_READER > reader = vtkSmartPointer< DATA_READER >::New();
     reader->SetFileName(file.string().c_str());
@@ -311,6 +357,7 @@ template< typename DATA_READER >
         imgObj = ::fwData::Image::New();
         getInfo(reader, imgObj);
 
+        job->finish();
     }
 
     return imgObj;
@@ -322,19 +369,15 @@ template< typename DATA_READER >
 
 void SeriesDBReader::read()
 {
-    assert( !m_object.expired() );
-    assert( m_object.lock() );
-
     ::fwMedData::SeriesDB::sptr seriesDB = this->getConcreteObject();
 
     const ::fwData::location::ILocation::VectPathType files = this->getFiles();
-    const std::string instanceUID = ::fwTools::UUID::generateUUID();
+    const std::string instanceUID                           = ::fwTools::UUID::generateUUID();
 
     ::fwMedData::ModelSeries::ReconstructionVectorType recs;
     std::vector< std::string > errorFiles;
-    BOOST_FOREACH(const ::fwData::location::ILocation::VectPathType::value_type& file, files)
+    for(const ::fwData::location::ILocation::VectPathType::value_type& file :  files)
     {
-
         vtkSmartPointer< vtkDataObject  > obj;
         ::fwData::Image::sptr img;
         ::fwData::Reconstruction::sptr rec;
@@ -343,34 +386,38 @@ void SeriesDBReader::read()
         {
             if(m_lazyMode)
             {
-                img = lazyRead<vtkGenericDataObjectReader>(file);
+                img = lazyRead<vtkGenericDataObjectReader>(file, m_job);
             }
             if (!img)
             {
-                obj = getObj<vtkGenericDataObjectReader>(file, this);
+                obj = getObj<vtkGenericDataObjectReader>(file, m_job);
             }
         }
         else if(file.extension().string() == ".vti")
         {
             if(m_lazyMode)
             {
-                img = lazyRead<vtkXMLGenericDataObjectReader>(file);
+                img = lazyRead<vtkXMLGenericDataObjectReader>(file, m_job);
             }
             if (!img)
             {
-                obj = getObj<vtkXMLGenericDataObjectReader>(file, this);
+                obj = getObj<vtkXMLGenericDataObjectReader>(file, m_job);
             }
         }
         else if(file.extension().string() == ".mhd")
         {
-            obj = getObj<vtkMetaImageReader>(file, this);
+            obj = getObj<vtkMetaImageReader>(file, m_job);
+        }
+        else if(file.extension().string() == ".vtu")
+        {
+            obj = getObj<vtkXMLGenericDataObjectReader>(file, m_job);
         }
 
         if (!img)
         {
             ::fwData::Object::sptr dataObj = getDataObject(obj, file);
-            img = ::fwData::Image::dynamicCast(dataObj);
-            rec = ::fwData::Reconstruction::dynamicCast(dataObj);
+            img                            = ::fwData::Image::dynamicCast(dataObj);
+            rec                            = ::fwData::Reconstruction::dynamicCast(dataObj);
         }
         if(img)
         {
@@ -406,9 +453,16 @@ void SeriesDBReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  SeriesDBReader::extension()
+std::string SeriesDBReader::extension()
 {
     return ".vtk";
 }
 
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr SeriesDBReader::getJob() const
+{
+    return m_job;
+}
+
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/TriangularMeshReader.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/TriangularMeshReader.cpp
deleted file mode 100644
index e3a62dd..0000000
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/TriangularMeshReader.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vtkGenericDataObjectReader.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwDataIO/reader/registry/macros.hpp>
-
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/TriangularMeshReader.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
-
-fwDataIOReaderRegisterMacro( ::fwVtkIO::TriangularMeshReader );
-
-
-namespace fwVtkIO
-{
-//------------------------------------------------------------------------------
-
-TriangularMeshReader::TriangularMeshReader(::fwDataIO::reader::IObjectReader::Key key) :
-                ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-TriangularMeshReader::~TriangularMeshReader()
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshReader::read()
-{
-    assert( !m_object.expired() );
-    assert( m_object.lock() );
-
-    ::fwData::TriangularMesh::sptr pTriangularMesh = getConcreteObject();
-
-    vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New();
-    reader->SetFileName(this->getFile().string().c_str());
-
-    //add progress observation
-    Progressor progress(reader, this->getSptr(), this->getFile().string());
-
-    reader->Update();
-
-    vtkDataObject *obj = reader->GetOutput();
-    vtkPolyData* mesh = vtkPolyData::SafeDownCast(obj);
-    if(mesh)
-    {
-        ::fwVtkIO::fromVTKMesh(mesh, pTriangularMesh);
-    }
-    else
-    {
-        std::string errMsg;
-        errMsg  = "TriangularMeshReader cannot read VTK Mesh file : ";
-        errMsg.append( this->getFile().string() );
-        throw( errMsg );
-    }
-}
-
-//------------------------------------------------------------------------------
-
-std::string  TriangularMeshReader::extension()
-{
-   return ".trian";
-}
-
-} // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/TriangularMeshWriter.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/TriangularMeshWriter.cpp
deleted file mode 100644
index aa9a370..0000000
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/TriangularMeshWriter.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vtkPolyData.h>
-#include <vtkGenericDataObjectWriter.h>
-#include <vtkSmartPointer.h>
-
-#include <fwCore/base.hpp>
-
-#include <fwDataIO/writer/registry/macros.hpp>
-
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/TriangularMeshWriter.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
-
-fwDataIOWriterRegisterMacro( ::fwVtkIO::TriangularMeshWriter );
-
-
-namespace fwVtkIO
-{
-//------------------------------------------------------------------------------
-
-TriangularMeshWriter::TriangularMeshWriter(::fwDataIO::writer::IObjectWriter::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-TriangularMeshWriter::~TriangularMeshWriter()
-{
-    SLM_TRACE_FUNC();
-}
-
-//------------------------------------------------------------------------------
-
-void TriangularMeshWriter::write()
-{
-    assert( !m_object.expired() );
-    assert( m_object.lock() );
-
-    ::fwData::TriangularMesh::sptr pTriangularMesh = getConcreteObject();
-
-    vtkSmartPointer< vtkGenericDataObjectWriter > writer = vtkSmartPointer< vtkGenericDataObjectWriter >::New();
-    vtkPolyData* vtkMesh = ::fwVtkIO::toVTKMesh( pTriangularMesh );
-    writer->SetInput( vtkMesh );
-    writer->SetFileName(this->getFile().string().c_str());
-    writer->SetFileTypeToBinary();
-
-    //add progress observation
-    Progressor progress(writer, this->getSptr(), this->getFile().string());
-
-    writer->Write();
-    vtkMesh->Delete();
-}
-
-//------------------------------------------------------------------------------
-
-std::string  TriangularMeshWriter::extension()
-{
-   return ".trian";
-}
-
-} // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageReader.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageReader.cpp
index 575d37f..f802eff 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageReader.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageReader.cpp
@@ -1,20 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkSmartPointer.h>
-#include <vtkXMLImageDataReader.h>
-#include <vtkImageData.h>
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/VtiImageReader.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/reader/registry/macros.hpp>
 
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/VtiImageReader.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkGenericDataObjectReader.h>
+#include <vtkSmartPointer.h>
+#include <vtkXMLImageDataReader.h>
+#include <vtkImageData.h>
 
 fwDataIOReaderRegisterMacro( ::fwVtkIO::VtiImageReader );
 
@@ -23,8 +27,9 @@ namespace fwVtkIO
 {
 //------------------------------------------------------------------------------
 
-VtiImageReader::VtiImageReader(::fwDataIO::reader::IObjectReader::Key key)
-: ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this)
+VtiImageReader::VtiImageReader(::fwDataIO::reader::IObjectReader::Key key) :
+    ::fwData::location::enableSingleFile< ::fwDataIO::reader::IObjectReader >(this),
+    m_job(::fwJobs::Observer::New("Vti image reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -48,12 +53,30 @@ void VtiImageReader::read()
     vtkSmartPointer< vtkXMLImageDataReader > reader = vtkSmartPointer< vtkXMLImageDataReader >::New();
     reader->SetFileName(this->getFile().string().c_str());
 
-    Progressor progress(reader, this->getSptr(), this->getFile().string());
+    using namespace fwVtkIO::helper;
+    vtkSmartPointer< vtkLambdaCommand > progressCallback;
+
+    progressCallback = vtkSmartPointer< vtkLambdaCommand >::New();
+    progressCallback->SetCallback(
+        [&](vtkObject* caller, long unsigned int, void*)
+        {
+            auto filter = static_cast<vtkGenericDataObjectReader*>(caller);
+            m_job->doneWork(filter->GetProgress() * 100);
+        }
+        );
+    reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+    m_job->addSimpleCancelHook([&] { reader->AbortExecuteOn(); });
 
     reader->Update();
+    reader->UpdateInformation();
+    reader->PropagateUpdateExtent();
 
     vtkDataObject *obj = reader->GetOutput();
-    vtkImageData* img = vtkImageData::SafeDownCast(obj);
+    vtkImageData* img  = vtkImageData::SafeDownCast(obj);
+
+    m_job->finish();
+
     FW_RAISE_IF("VtiImageReader cannot read Vti image file :"<<this->getFile().string(), !img);
     try
     {
@@ -67,9 +90,18 @@ void VtiImageReader::read()
 
 //------------------------------------------------------------------------------
 
-std::string  VtiImageReader::extension()
+std::string VtiImageReader::extension()
 {
-   return ".vti";
+    return ".vti";
 }
 
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr VtiImageReader::getJob() const
+{
+    return m_job;
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageWriter.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageWriter.cpp
index 15d340b..afab949 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageWriter.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/VtiImageWriter.cpp
@@ -1,21 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkImageData.h>
-#include <vtkXMLImageDataWriter.h>
-#include <vtkZLibDataCompressor.h>
-#include <vtkSmartPointer.h>
+#include "fwVtkIO/vtk.hpp"
+#include "fwVtkIO/VtiImageWriter.hpp"
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
 
 #include <fwCore/base.hpp>
 
 #include <fwDataIO/writer/registry/macros.hpp>
 
-#include "fwVtkIO/vtk.hpp"
-#include "fwVtkIO/VtiImageWriter.hpp"
-#include "fwVtkIO/helper/ProgressVtkToFw.hpp"
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
+#include <vtkImageData.h>
+#include <vtkXMLImageDataWriter.h>
+#include <vtkZLibDataCompressor.h>
+#include <vtkSmartPointer.h>
+
 
 fwDataIOWriterRegisterMacro( ::fwVtkIO::VtiImageWriter );
 
@@ -25,7 +29,8 @@ namespace fwVtkIO
 //------------------------------------------------------------------------------
 
 VtiImageWriter::VtiImageWriter(::fwDataIO::writer::IObjectWriter::Key key) :
-        ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this)
+    ::fwData::location::enableSingleFile< ::fwDataIO::writer::IObjectWriter >(this),
+    m_job(::fwJobs::Observer::New("VTK Image Writer"))
 {
     SLM_TRACE_FUNC();
 }
@@ -41,33 +46,54 @@ VtiImageWriter::~VtiImageWriter()
 
 void VtiImageWriter::write()
 {
+    using namespace fwVtkIO::helper;
+
     assert( !m_object.expired() );
     assert( m_object.lock() );
 
     ::fwData::Image::sptr pImage = getConcreteObject();
 
     vtkSmartPointer< vtkXMLImageDataWriter > writer = vtkSmartPointer< vtkXMLImageDataWriter >::New();
-    vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
+    vtkSmartPointer< vtkImageData > vtkImage        = vtkSmartPointer< vtkImageData >::New();
     ::fwVtkIO::toVTKImage( pImage, vtkImage );
-    writer->SetInput( vtkImage );
+    writer->SetInputData( vtkImage );
     writer->SetFileName( this->getFile().string().c_str() );
     writer->SetDataModeToAppended();
 
-    vtkSmartPointer< vtkZLibDataCompressor > compressor  = vtkSmartPointer< vtkZLibDataCompressor >::New();
+    vtkSmartPointer< vtkZLibDataCompressor > compressor = vtkSmartPointer< vtkZLibDataCompressor >::New();
     compressor->SetCompressionLevel(1);
     writer->SetCompressor( compressor );
     writer->EncodeAppendedDataOff();
 
-    Progressor progress(writer, this->getSptr(), this->getFile().string());
-
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback([this](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkXMLImageDataWriter*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        });
+
+    writer->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+    m_job->addSimpleCancelHook( [&]()
+        {
+            writer->AbortExecuteOn();
+        });
     writer->Write();
+    m_job->finish();
+}
+
+//------------------------------------------------------------------------------
+
+std::string VtiImageWriter::extension()
+{
+    return ".vti";
 }
 
 //------------------------------------------------------------------------------
 
-std::string  VtiImageWriter::extension()
+::fwJobs::IJob::sptr VtiImageWriter::getJob() const
 {
-   return ".vti";
+    return m_job;
 }
 
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/Mesh.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/Mesh.cpp
index fe9a1f7..84b2e48 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/Mesh.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/Mesh.cpp
@@ -1,26 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <vtkPoints.h>
-#include <vtkDataArray.h>
-#include <vtkPointData.h>
-#include <vtkCellData.h>
+#include "fwVtkIO/helper/Mesh.hpp"
+
+#include <fwData/Array.hpp>
+
+#include <fwDataTools/helper/Array.hpp>
+#include <fwDataTools/helper/Mesh.hpp>
+#include <fwDataTools/helper/MeshGetter.hpp>
+
 #include <vtkCell.h>
+#include <vtkCellData.h>
+#include <vtkDataArray.h>
+#include <vtkExtractUnstructuredGrid.h>
+#include <vtkFillHolesFilter.h>
 #include <vtkFloatArray.h>
-#include <vtkSmartPointer.h>
-
+#include <vtkGeometryFilter.h>
 #include <vtkMassProperties.h>
+#include <vtkPointData.h>
+#include <vtkPoints.h>
 #include <vtkPolyDataNormals.h>
-#include <vtkFillHolesFilter.h>
-
-#include <fwData/Array.hpp>
-#include <fwComEd/helper/Mesh.hpp>
-#include <fwComEd/helper/Array.hpp>
-
-#include "fwVtkIO/helper/Mesh.hpp"
+#include <vtkSmartPointer.h>
 
 namespace fwVtkIO
 {
@@ -31,50 +34,54 @@ namespace helper
 
 void Mesh::fromVTKMesh(  vtkSmartPointer<vtkPolyData> polyData, ::fwData::Mesh::sptr mesh )
 {
-    vtkPoints *points = polyData->GetPoints();
+    vtkPoints* points = polyData->GetPoints();
     if (points)
     {
         mesh->clear();
         vtkIdType numberOfPoints = points->GetNumberOfPoints();
-        vtkIdType numberOfCells = polyData->GetNumberOfCells();
+        vtkIdType numberOfCells  = polyData->GetNumberOfCells();
 
         mesh->allocate(numberOfPoints, numberOfCells, numberOfCells*3);
-        ::fwComEd::helper::Mesh meshHelper(mesh);
+        ::fwDataTools::helper::Mesh meshHelper(mesh);
 
         double* point;
         ::fwData::Mesh::Id idx;
         for (vtkIdType i = 0; i < numberOfPoints; ++i)
         {
             point = points->GetPoint(i);
-            idx = meshHelper.insertNextPoint(point[0], point[1], point[2]);
+            idx   = meshHelper.insertNextPoint(point[0], point[1], point[2]);
             SLM_ASSERT("Mesh index not correspond to VTK index point", idx == i);
         }
 
         vtkCell* cell;
         vtkIdList* idList;
         int cellType;
-        for (vtkIdType i = 0 ; i < numberOfCells ; ++i)
+        for (vtkIdType i = 0; i < numberOfCells; ++i)
         {
-            cell = polyData->GetCell(i);
-            idList = cell->GetPointIds();
+            cell     = polyData->GetCell(i);
+            idList   = cell->GetPointIds();
             cellType = cell->GetCellType();
 
             switch (cellType)
             {
-            case VTK_LINE :
-                SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==2);
-                meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1));
-                break;
-            case VTK_TRIANGLE :
-                SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==3);
-                meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2));
-                break;
-            case VTK_QUAD :
-                SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==4);
-                meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2), idList->GetId(3));
-                break;
-            default:
-                FW_RAISE("VTK Mesh type "<<cellType<< " not supported.");
+                case VTK_VERTEX:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==1);
+                    meshHelper.insertNextCell( idList->GetId(0));
+                    break;
+                case VTK_LINE:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==2);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1));
+                    break;
+                case VTK_TRIANGLE:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==3);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2));
+                    break;
+                case VTK_QUAD:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==4);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2), idList->GetId(3));
+                    break;
+                default:
+                    FW_RAISE("VTK Mesh type "<<cellType<< " not supported.");
             }
         }
 
@@ -87,11 +94,11 @@ void Mesh::fromVTKMesh(  vtkSmartPointer<vtkPolyData> polyData, ::fwData::Mesh::
 
             size_t nbComponents = colors->GetNumberOfComponents();
             SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")",
-                    nbComponents == 3 || nbComponents == 4);
+                       nbComponents == 3 || nbComponents == 4);
             mesh->allocatePointColors((::fwData::Mesh::ColorArrayTypes)nbComponents);
             meshHelper.updateLock();
 
-            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints() ;
+            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
             for (size_t i = 0; i != nbPoints; ++i)
             {
                 meshHelper.setPointColor(i, colors->GetPointer(i*nbComponents));
@@ -106,11 +113,11 @@ void Mesh::fromVTKMesh(  vtkSmartPointer<vtkPolyData> polyData, ::fwData::Mesh::
 
             size_t nbComponents = colors->GetNumberOfComponents();
             SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")",
-                    nbComponents == 3 || nbComponents == 4);
+                       nbComponents == 3 || nbComponents == 4);
             mesh->allocateCellColors((::fwData::Mesh::ColorArrayTypes)nbComponents);
             meshHelper.updateLock();
 
-            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells() ;
+            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
             for (size_t i = 0; i != nbCells; ++i)
             {
                 meshHelper.setCellColor(i, colors->GetPointer(i*nbComponents));
@@ -129,7 +136,7 @@ void Mesh::fromVTKMesh(  vtkSmartPointer<vtkPolyData> polyData, ::fwData::Mesh::
             mesh->allocatePointNormals();
             meshHelper.updateLock();
 
-            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints() ;
+            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
             for (size_t i = 0; i != nbPoints; ++i)
             {
                 meshHelper.setPointNormal(i, normals->GetPointer(i*nbComponents));
@@ -148,88 +155,309 @@ void Mesh::fromVTKMesh(  vtkSmartPointer<vtkPolyData> polyData, ::fwData::Mesh::
             mesh->allocateCellNormals();
             meshHelper.updateLock();
 
-            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells() ;
+            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
+            for (size_t i = 0; i != nbCells; ++i)
+            {
+                meshHelper.setCellNormal(i, normals->GetPointer(i*nbComponents));
+            }
+        }
+
+        if(polyData->GetPointData()->GetAttribute(vtkDataSetAttributes::TCOORDS))
+        {
+            vtkSmartPointer<vtkFloatArray> texCoords;
+            texCoords = vtkFloatArray::SafeDownCast(polyData->GetPointData()->GetTCoords());
+            FW_RAISE_IF("Only vtkFloatArray is supported to manage texCoords.", !texCoords);
+
+            size_t nbComponents = texCoords->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")", nbComponents == 2);
+
+            mesh->allocatePointTexCoords();
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
+            for (size_t i = 0; i != nbPoints; ++i)
+            {
+                meshHelper.setPointTexCoord(i, texCoords->GetPointer(i*nbComponents));
+            }
+        }
+
+        if(polyData->GetCellData()->GetAttribute(vtkDataSetAttributes::TCOORDS))
+        {
+            vtkSmartPointer<vtkFloatArray> texCoords;
+            texCoords = vtkFloatArray::SafeDownCast(polyData->GetCellData()->GetTCoords());
+            FW_RAISE_IF("Only vtkFloatArray is supported to manage texCoords.", !texCoords);
+
+            size_t nbComponents = texCoords->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")", nbComponents == 2);
+
+            mesh->allocateCellTexCoords();
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
+            for (size_t i = 0; i != nbCells; ++i)
+            {
+                meshHelper.setCellTexCoord(i, texCoords->GetPointer(i*nbComponents));
+            }
+        }
+
+        mesh->adjustAllocatedMemory();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void Mesh::fromVTKGrid(vtkSmartPointer<vtkUnstructuredGrid> grid, ::fwData::Mesh::sptr mesh)
+{
+    vtkPoints* points = grid->GetPoints();
+    if(points)
+    {
+        mesh->clear();
+        vtkIdType numberOfPoints = points->GetNumberOfPoints();
+        vtkIdType numberOfCells  = grid->GetNumberOfCells();
+
+        mesh->allocate(numberOfPoints, numberOfCells, numberOfCells*3);
+        ::fwDataTools::helper::Mesh meshHelper(mesh);
+        double* point;
+        ::fwData::Mesh::Id idx;
+        for (vtkIdType i = 0; i < numberOfPoints; ++i)
+        {
+            point = points->GetPoint(i);
+            idx   = meshHelper.insertNextPoint(point[0], point[1], point[2]);
+            SLM_ASSERT("Mesh index not correspond to VTK index point", idx == i);
+        }
+
+        vtkCell* cell;
+        vtkIdList* idList;
+        int cellType;
+        for (vtkIdType i = 0; i < numberOfCells; ++i)
+        {
+            cell     = grid->GetCell(i);
+            idList   = cell->GetPointIds();
+            cellType = cell->GetCellType();
+
+            switch (cellType)
+            {
+                case VTK_VERTEX:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==1);
+                    meshHelper.insertNextCell( idList->GetId(0));
+                    break;
+                case VTK_LINE:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==2);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1));
+                    break;
+                case VTK_TRIANGLE:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==3);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2));
+                    break;
+                case VTK_QUAD:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==4);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2), idList->GetId(3));
+                    break;
+                case VTK_TETRA:
+                    SLM_ASSERT("Wrong number of ids: "<<idList->GetNumberOfIds(), idList->GetNumberOfIds()==4);
+                    meshHelper.insertNextCell( idList->GetId(0), idList->GetId(1), idList->GetId(2), idList->GetId(3));
+                    break;
+                default:
+                    FW_RAISE("VTK Mesh type "<<cellType<< " not supported.");
+            }
+        }
+
+        if(grid->GetPointData()->HasArray("Colors"))
+        {
+            vtkSmartPointer<vtkUnsignedCharArray> colors;
+            colors = vtkUnsignedCharArray::SafeDownCast(grid->GetPointData()->GetArray("Colors"));
+            FW_RAISE_IF("Only vtkUnsignedCharArray is supported to manage color.", !colors);
+
+            size_t nbComponents = colors->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")",
+                       nbComponents == 3 || nbComponents == 4);
+            mesh->allocatePointColors((::fwData::Mesh::ColorArrayTypes)nbComponents);
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
+            for (size_t i = 0; i != nbPoints; ++i)
+            {
+                meshHelper.setPointColor(i, colors->GetPointer(i*nbComponents));
+            }
+        }
+
+        if(grid->GetCellData()->HasArray("Colors"))
+        {
+            vtkSmartPointer<vtkUnsignedCharArray> colors;
+            colors = vtkUnsignedCharArray::SafeDownCast(grid->GetCellData()->GetArray("Colors"));
+            FW_RAISE_IF("Only vtkUnsignedCharArray is supported to manage color.", !colors);
+
+            size_t nbComponents = colors->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")",
+                       nbComponents == 3 || nbComponents == 4);
+            mesh->allocateCellColors((::fwData::Mesh::ColorArrayTypes)nbComponents);
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
+            for (size_t i = 0; i != nbCells; ++i)
+            {
+                meshHelper.setCellColor(i, colors->GetPointer(i*nbComponents));
+            }
+        }
+
+        if(grid->GetPointData()->GetAttribute(vtkDataSetAttributes::NORMALS))
+        {
+            vtkSmartPointer<vtkFloatArray> normals;
+            normals = vtkFloatArray::SafeDownCast(grid->GetPointData()->GetNormals());
+            FW_RAISE_IF("Only vtkFloatArray is supported to manage normals.", !normals);
+
+            size_t nbComponents = normals->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")", nbComponents == 3);
+
+            mesh->allocatePointNormals();
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
+            for (size_t i = 0; i != nbPoints; ++i)
+            {
+                meshHelper.setPointNormal(i, normals->GetPointer(i*nbComponents));
+            }
+        }
+
+        if(grid->GetCellData()->GetAttribute(vtkDataSetAttributes::NORMALS))
+        {
+            vtkSmartPointer<vtkFloatArray> normals;
+            normals = vtkFloatArray::SafeDownCast(grid->GetCellData()->GetNormals());
+            FW_RAISE_IF("Only vtkFloatArray is supported to manage normals.", !normals);
+
+            size_t nbComponents = normals->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")", nbComponents == 3);
+
+            mesh->allocateCellNormals();
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
             for (size_t i = 0; i != nbCells; ++i)
             {
                 meshHelper.setCellNormal(i, normals->GetPointer(i*nbComponents));
             }
         }
 
+        if(grid->GetPointData()->GetAttribute(vtkDataSetAttributes::TCOORDS))
+        {
+            vtkSmartPointer<vtkFloatArray> texCoords;
+            texCoords = vtkFloatArray::SafeDownCast(grid->GetPointData()->GetTCoords());
+            FW_RAISE_IF("Only vtkFloatArray is supported to manage texCoords.", !texCoords);
+
+            size_t nbComponents = texCoords->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")", nbComponents == 2);
+
+            mesh->allocatePointTexCoords();
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbPoints = mesh->getNumberOfPoints();
+            for (size_t i = 0; i != nbPoints; ++i)
+            {
+                meshHelper.setPointTexCoord(i, texCoords->GetPointer(i*nbComponents));
+            }
+        }
+
+        if(grid->GetCellData()->GetAttribute(vtkDataSetAttributes::TCOORDS))
+        {
+            vtkSmartPointer<vtkFloatArray> texCoords;
+            texCoords = vtkFloatArray::SafeDownCast(grid->GetCellData()->GetTCoords());
+            FW_RAISE_IF("Only vtkFloatArray is supported to manage texCoords.", !texCoords);
+
+            size_t nbComponents = texCoords->GetNumberOfComponents();
+            SLM_ASSERT("Wrong nb of components ("<<nbComponents<<")", nbComponents == 2);
+
+            mesh->allocateCellTexCoords();
+            meshHelper.updateLock();
+
+            ::fwData::Mesh::Id nbCells = mesh->getNumberOfCells();
+            for (size_t i = 0; i != nbCells; ++i)
+            {
+                meshHelper.setCellTexCoord(i, texCoords->GetPointer(i*nbComponents));
+            }
+        }
+
         mesh->adjustAllocatedMemory();
+
     }
+
 }
 
 //------------------------------------------------------------------------------
 
-void Mesh::toVTKMesh( ::fwData::Mesh::sptr mesh, vtkSmartPointer<vtkPolyData> polyData)
+void Mesh::toVTKMesh( const ::fwData::Mesh::csptr& mesh, vtkSmartPointer<vtkPolyData> polyData)
 {
     vtkSmartPointer< vtkPoints > pts = vtkSmartPointer< vtkPoints >::New();
     polyData->SetPoints(pts);
     Mesh::updatePolyDataPoints(polyData, mesh);
 
-    ::fwComEd::helper::Mesh meshHelper(mesh);
-    unsigned int nbCells = mesh->getNumberOfCells() ;
+    ::fwDataTools::helper::MeshGetter meshHelper(mesh);
+    unsigned int nbCells = mesh->getNumberOfCells();
 
-    ::fwData::Mesh::CellTypesMultiArrayType cellTypes = meshHelper.getCellTypes();
-    ::fwData::Mesh::CellDataMultiArrayType cellData = meshHelper.getCellData();
-    ::fwData::Mesh::CellDataOffsetsMultiArrayType cellDataOffsets = meshHelper.getCellDataOffsets();
+    ::fwData::Mesh::ConstCellTypesMultiArrayType cellTypes             = meshHelper.getCellTypes();
+    ::fwData::Mesh::ConstCellDataMultiArrayType cellData               = meshHelper.getCellData();
+    ::fwData::Mesh::ConstCellDataOffsetsMultiArrayType cellDataOffsets = meshHelper.getCellDataOffsets();
 
     polyData->Allocate(4, nbCells);
 
     vtkIdType typeVtkCell;
     vtkIdType cell[4];
-    for(unsigned int i=0 ; i<nbCells ; ++i )
+    for(unsigned int i = 0; i<nbCells; ++i )
     {
         ::fwData::Mesh::CellTypes cellType = cellTypes[i];
-        ::fwData::Mesh::Id offset = cellDataOffsets[i];
+        ::fwData::Mesh::Id offset          = cellDataOffsets[i];
         switch( cellType )
         {
-        case ::fwData::Mesh::EDGE :
-            typeVtkCell = VTK_LINE;
-            cell[0] = cellData[offset];
-            cell[1] = cellData[offset+1];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
-            break;
-        case ::fwData::Mesh::TRIANGLE :
-            typeVtkCell = VTK_TRIANGLE;
-            cell[0] = cellData[offset];
-            cell[1] = cellData[offset+1];
-            cell[2] = cellData[offset+2];
-            polyData->InsertNextCell( typeVtkCell, 3, cell );
-            break;
-        case ::fwData::Mesh::QUAD :
-            typeVtkCell = VTK_QUAD;
-            cell[0] = cellData[offset];
-            cell[1] = cellData[offset+1];
-            cell[2] = cellData[offset+2];
-            cell[3] = cellData[offset+3];
-            polyData->InsertNextCell( typeVtkCell, 4, cell );
-            break;
-        case ::fwData::Mesh::TETRA :
-            typeVtkCell = VTK_LINE;
-            cell[0] = cellData[offset];
-            cell[1] = cellData[offset+1];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
-
-            cell[0] = cellData[offset+1];
-            cell[1] = cellData[offset+2];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
-
-            cell[0] = cellData[offset+2];
-            cell[1] = cellData[offset+3];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
-
-            cell[0] = cellData[offset+3];
-            cell[1] = cellData[offset];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
-
-            cell[0] = cellData[offset+2];
-            cell[1] = cellData[offset];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
-
-            cell[0] = cellData[offset+1];
-            cell[1] = cellData[offset+3];
-            polyData->InsertNextCell( typeVtkCell, 2, cell );
+            case ::fwData::Mesh::POINT:
+                typeVtkCell = VTK_VERTEX;
+                cell[0]     = cellData[offset];
+                polyData->InsertNextCell( typeVtkCell, 1, cell );
+                break;
+            case ::fwData::Mesh::EDGE:
+                typeVtkCell = VTK_LINE;
+                cell[0]     = cellData[offset];
+                cell[1]     = cellData[offset+1];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
+                break;
+            case ::fwData::Mesh::TRIANGLE:
+                typeVtkCell = VTK_TRIANGLE;
+                cell[0]     = cellData[offset];
+                cell[1]     = cellData[offset+1];
+                cell[2]     = cellData[offset+2];
+                polyData->InsertNextCell( typeVtkCell, 3, cell );
+                break;
+            case ::fwData::Mesh::QUAD:
+                typeVtkCell = VTK_QUAD;
+                cell[0]     = cellData[offset];
+                cell[1]     = cellData[offset+1];
+                cell[2]     = cellData[offset+2];
+                cell[3]     = cellData[offset+3];
+                polyData->InsertNextCell( typeVtkCell, 4, cell );
+                break;
+            case ::fwData::Mesh::TETRA:
+                typeVtkCell = VTK_LINE;
+                cell[0]     = cellData[offset];
+                cell[1]     = cellData[offset+1];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
+
+                cell[0] = cellData[offset+1];
+                cell[1] = cellData[offset+2];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
+
+                cell[0] = cellData[offset+2];
+                cell[1] = cellData[offset+3];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
+
+                cell[0] = cellData[offset+3];
+                cell[1] = cellData[offset];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
+
+                cell[0] = cellData[offset+2];
+                cell[1] = cellData[offset];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
+
+                cell[0] = cellData[offset+1];
+                cell[1] = cellData[offset+3];
+                polyData->InsertNextCell( typeVtkCell, 2, cell );
 
         }
     }
@@ -239,18 +467,22 @@ void Mesh::toVTKMesh( ::fwData::Mesh::sptr mesh, vtkSmartPointer<vtkPolyData> po
 
     Mesh::updatePolyDataPointColor(polyData, mesh);
     Mesh::updatePolyDataCellColor(polyData, mesh);
+
+    Mesh::updatePolyDataPointTexCoords(polyData, mesh);
+    Mesh::updatePolyDataCellTexCoords(polyData, mesh);
 }
 
 //------------------------------------------------------------------------------
 
-vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPoints(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc )
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPoints(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                        const ::fwData::Mesh::csptr& meshSrc )
 {
     SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
-    ::fwComEd::helper::Mesh meshHelper(meshSrc);
+    ::fwDataTools::helper::MeshGetter meshHelper(meshSrc);
 
-    vtkPoints *polyDataPoints = polyDataDst->GetPoints();
-    ::fwData::Mesh::Id nbPoints = meshSrc->getNumberOfPoints() ;
-    ::fwData::Mesh::PointsMultiArrayType points = meshHelper.getPoints();
+    vtkPoints* polyDataPoints = polyDataDst->GetPoints();
+    ::fwData::Mesh::Id nbPoints                      = meshSrc->getNumberOfPoints();
+    ::fwData::Mesh::ConstPointsMultiArrayType points = meshHelper.getPoints();
 
     if (nbPoints != polyDataPoints->GetNumberOfPoints())
     {
@@ -270,24 +502,25 @@ vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPoints(vtkSmartPointer<vtkPolyD
 
 //------------------------------------------------------------------------------
 
-vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointColor(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc )
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointColor(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                            const ::fwData::Mesh::csptr& meshSrc )
 {
     SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
 
     ::fwData::Array::sptr pointColorArray = meshSrc->getPointColorsArray();
     if(pointColorArray)
     {
-        ::fwComEd::helper::Array arrayHelper(pointColorArray);
+        ::fwDataTools::helper::Array arrayHelper(pointColorArray);
 
         vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
-        size_t nbComponents = pointColorArray->getNumberOfComponents();
+        size_t nbComponents                          = pointColorArray->getNumberOfComponents();
         colors->SetNumberOfComponents(nbComponents);
         colors->SetName("Colors");
 
-        unsigned char *pointColor = arrayHelper.begin< unsigned char >();
-        unsigned char *pointColorEnd = arrayHelper.end< unsigned char >();
+        unsigned char* pointColor    = arrayHelper.begin< unsigned char >();
+        unsigned char* pointColorEnd = arrayHelper.end< unsigned char >();
 
-        for (; pointColor != pointColorEnd; pointColor+=nbComponents)
+        for (; pointColor != pointColorEnd; pointColor += nbComponents)
         {
             colors->InsertNextTupleValue(pointColor);
         }
@@ -308,25 +541,26 @@ vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointColor(vtkSmartPointer<vtkP
 
 //------------------------------------------------------------------------------
 
-vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellColor(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc )
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellColor(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                           const ::fwData::Mesh::csptr& meshSrc )
 {
     SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
 
     ::fwData::Array::sptr cellColorArray = meshSrc->getCellColorsArray();
     if(cellColorArray)
     {
-        ::fwComEd::helper::Array arrayHelper(cellColorArray);
+        ::fwDataTools::helper::Array arrayHelper(cellColorArray);
 
         vtkSmartPointer<vtkUnsignedCharArray> colors = vtkSmartPointer<vtkUnsignedCharArray>::New();
-        size_t nbComponents = cellColorArray->getNumberOfComponents();
+        size_t nbComponents                          = cellColorArray->getNumberOfComponents();
         colors->SetNumberOfComponents(nbComponents);
         colors->SetName("Colors");
 
         ::fwMemory::BufferObject::Lock lock = cellColorArray->getBufferObject()->lock();
-        unsigned char *cellColor = arrayHelper.begin< unsigned char >();
-        unsigned char *cellColorEnd = arrayHelper.end< unsigned char >();
+        unsigned char* cellColor    = arrayHelper.begin< unsigned char >();
+        unsigned char* cellColorEnd = arrayHelper.end< unsigned char >();
 
-        for (; cellColor != cellColorEnd; cellColor+=nbComponents)
+        for (; cellColor != cellColorEnd; cellColor += nbComponents)
         {
             colors->InsertNextTupleValue(cellColor);
         }
@@ -348,23 +582,24 @@ vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellColor(vtkSmartPointer<vtkPo
 
 //------------------------------------------------------------------------------
 
-vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointNormals(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc )
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointNormals(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                              const ::fwData::Mesh::csptr& meshSrc )
 {
     SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
 
     ::fwData::Array::sptr pointNormalsArray = meshSrc->getPointNormalsArray();
     if(pointNormalsArray)
     {
-        ::fwComEd::helper::Array arrayHelper(pointNormalsArray);
+        ::fwDataTools::helper::Array arrayHelper(pointNormalsArray);
 
         vtkSmartPointer<vtkFloatArray> normals = vtkSmartPointer<vtkFloatArray>::New();
-        size_t nbComponents = pointNormalsArray->getNumberOfComponents();
+        size_t nbComponents                    = pointNormalsArray->getNumberOfComponents();
         normals->SetNumberOfComponents(nbComponents);
 
-        float *pointNormal = arrayHelper.begin< float >();
-        float *pointNormalEnd = arrayHelper.end< float >();
+        float* pointNormal    = arrayHelper.begin< float >();
+        float* pointNormalEnd = arrayHelper.end< float >();
 
-        for (; pointNormal != pointNormalEnd; pointNormal+=nbComponents)
+        for (; pointNormal != pointNormalEnd; pointNormal += nbComponents)
         {
             normals->InsertNextTupleValue(pointNormal);
         }
@@ -387,7 +622,8 @@ vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointNormals(vtkSmartPointer<vt
 
 //------------------------------------------------------------------------------
 
-vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellNormals(vtkSmartPointer<vtkPolyData> polyDataDst, ::fwData::Mesh::sptr meshSrc )
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellNormals(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                             const ::fwData::Mesh::csptr& meshSrc )
 {
     SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
 
@@ -395,16 +631,16 @@ vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellNormals(vtkSmartPointer<vtk
 
     if(cellNormalsArray)
     {
-        ::fwComEd::helper::Array arrayHelper(cellNormalsArray);
+        ::fwDataTools::helper::Array arrayHelper(cellNormalsArray);
 
         vtkSmartPointer<vtkFloatArray> normals = vtkSmartPointer<vtkFloatArray>::New();
-        size_t nbComponents = cellNormalsArray->getNumberOfComponents();
+        size_t nbComponents                    = cellNormalsArray->getNumberOfComponents();
         normals->SetNumberOfComponents(nbComponents);
 
-        float *cellNormal = arrayHelper.begin< float >();
-        float *cellNormalEnd = arrayHelper.end< float >();
+        float* cellNormal    = arrayHelper.begin< float >();
+        float* cellNormalEnd = arrayHelper.end< float >();
 
-        for (; cellNormal != cellNormalEnd; cellNormal+=nbComponents)
+        for (; cellNormal != cellNormalEnd; cellNormal += nbComponents)
         {
             normals->InsertNextTupleValue(cellNormal);
         }
@@ -424,9 +660,89 @@ vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellNormals(vtkSmartPointer<vtk
     return polyDataDst;
 }
 
+//------------------------------------------------------------------------------
+
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataPointTexCoords(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                                const ::fwData::Mesh::csptr& meshSrc )
+{
+    SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
+
+    ::fwData::Array::sptr pointTexCoordsArray = meshSrc->getPointTexCoordsArray();
+    if(pointTexCoordsArray)
+    {
+        ::fwDataTools::helper::Array arrayHelper(pointTexCoordsArray);
+
+        vtkSmartPointer<vtkFloatArray> normals = vtkSmartPointer<vtkFloatArray>::New();
+        size_t nbComponents                    = pointTexCoordsArray->getNumberOfComponents();
+        normals->SetNumberOfComponents(nbComponents);
+
+        float* pointTexCoord    = arrayHelper.begin< float >();
+        float* pointTexCoordEnd = arrayHelper.end< float >();
+
+        for (; pointTexCoord != pointTexCoordEnd; pointTexCoord += nbComponents)
+        {
+            normals->InsertNextTupleValue(pointTexCoord);
+        }
+
+
+        polyDataDst->GetPointData()->SetTCoords(normals);
+        polyDataDst->Modified();
+    }
+    else
+    {
+        if(polyDataDst->GetPointData()->GetAttribute(vtkDataSetAttributes::TCOORDS))
+        {
+            polyDataDst->GetPointData()->RemoveArray(vtkDataSetAttributes::TCOORDS);
+        }
+        polyDataDst->Modified();
+    }
+
+    return polyDataDst;
+}
+
+//------------------------------------------------------------------------------
+
+vtkSmartPointer<vtkPolyData> Mesh::updatePolyDataCellTexCoords(vtkSmartPointer<vtkPolyData> polyDataDst,
+                                                               const ::fwData::Mesh::csptr& meshSrc )
+{
+    SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
+
+    ::fwData::Array::sptr cellTexCoordsArray = meshSrc->getCellTexCoordsArray();
+
+    if(cellTexCoordsArray)
+    {
+        ::fwDataTools::helper::Array arrayHelper(cellTexCoordsArray);
+
+        vtkSmartPointer<vtkFloatArray> normals = vtkSmartPointer<vtkFloatArray>::New();
+        size_t nbComponents                    = cellTexCoordsArray->getNumberOfComponents();
+        normals->SetNumberOfComponents(nbComponents);
+
+        float* cellTexCoord    = arrayHelper.begin< float >();
+        float* cellTexCoordEnd = arrayHelper.end< float >();
+
+        for (; cellTexCoord != cellTexCoordEnd; cellTexCoord += nbComponents)
+        {
+            normals->InsertNextTupleValue(cellTexCoord);
+        }
+
+        polyDataDst->GetCellData()->SetTCoords(normals);
+        polyDataDst->Modified();
+    }
+    else
+    {
+        if(polyDataDst->GetCellData()->GetAttribute(vtkDataSetAttributes::TCOORDS))
+        {
+            polyDataDst->GetCellData()->RemoveArray(vtkDataSetAttributes::TCOORDS);
+        }
+        polyDataDst->Modified();
+    }
+
+    return polyDataDst;
+}
+
 //-----------------------------------------------------------------------------
 
-double Mesh::computeVolume( ::fwData::Mesh::sptr mesh )
+double Mesh::computeVolume( const ::fwData::Mesh::csptr& mesh )
 {
     vtkSmartPointer< vtkPolyData > vtkMeshRaw = vtkSmartPointer< vtkPolyData >::New();
     Mesh::toVTKMesh( mesh, vtkMeshRaw );
@@ -434,7 +750,7 @@ double Mesh::computeVolume( ::fwData::Mesh::sptr mesh )
     // identify and fill holes in meshes
     vtkSmartPointer< vtkFillHolesFilter > holesFilter = vtkSmartPointer< vtkFillHolesFilter >::New();
     holesFilter->SetHoleSize(2000);
-    holesFilter->SetInput(vtkMeshRaw);
+    holesFilter->SetInputData(vtkMeshRaw);
     holesFilter->Update();
     if (holesFilter->GetOutput()->GetNumberOfCells() > 0) // Filter return empty mesh when no topological holes are present
     {
@@ -443,17 +759,19 @@ double Mesh::computeVolume( ::fwData::Mesh::sptr mesh )
 
     // compute normals for polygonal mesh
     vtkSmartPointer< vtkPolyDataNormals > filter = vtkSmartPointer< vtkPolyDataNormals >::New();
-    filter->SetInput(vtkMeshRaw);
+    filter->SetInputData(vtkMeshRaw);
     filter->AutoOrientNormalsOn();
     filter->FlipNormalsOff();
 
     // estimate volume, area, shape index of triangle mesh
     vtkSmartPointer< vtkMassProperties > calculator = vtkSmartPointer< vtkMassProperties >::New();
-    calculator->SetInput( filter->GetOutput() );
+    calculator->SetInputConnection( filter->GetOutputPort() );
     calculator->Update();
 
-    double volume =  calculator->GetVolume();
-    OSLM_DEBUG("GetVolume : " << volume << " vtkMassProperties::GetVolumeProjected = " << calculator->GetVolumeProjected() );
+    double volume = calculator->GetVolume();
+    OSLM_DEBUG(
+        "GetVolume : " << volume << " vtkMassProperties::GetVolumeProjected = " <<
+        calculator->GetVolumeProjected() );
     OSLM_DEBUG("Error : " << (calculator->GetVolume()- fabs(calculator->GetVolumeProjected()))*10000);
     if ( (calculator->GetVolume()- fabs(calculator->GetVolumeProjected()))*10000 > calculator->GetVolume() )
     {
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/TransferFunction.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/TransferFunction.cpp
index 74a132b..a4564c5 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/TransferFunction.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/TransferFunction.cpp
@@ -1,9 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include <vtkLookupTable.h>
+
 #include "fwVtkIO/helper/TransferFunction.hpp"
 
 namespace fwVtkIO
@@ -14,12 +16,13 @@ namespace helper
 //------------------------------------------------------------------------------
 
 void TransferFunction::toVtkLookupTable(
-        ::fwData::TransferFunction::sptr tf,
-         vtkSmartPointer<vtkLookupTable> lt,
-        bool allowTransparency,
-        unsigned int size )
+    ::fwData::TransferFunction::sptr tf,
+    vtkSmartPointer<vtkLookupTable> lt,
+    bool allowTransparency,
+    unsigned int size )
 {
-    SLM_WARN_IF( "Sorry, This transfer function conversion not managed clamped TF.", tf->getIsClamped() );
+    SLM_WARN_IF( "This transfer function conversion is not managed, transfer function is clamped.",
+                 tf->getIsClamped() );
 
     // Configures basic parameters
     lt->SetNumberOfTableValues( size );
@@ -35,7 +38,7 @@ void TransferFunction::toVtkLookupTable(
 
     if ( allowTransparency )
     {
-        for( unsigned int k=0; k<size; ++k )
+        for( unsigned int k = 0; k<size; ++k )
         {
             interpolatedColor = tf->getInterpolatedColor( k*delta + minMax.first );
             lt->SetTableValue(k, interpolatedColor.r, interpolatedColor.g, interpolatedColor.b, interpolatedColor.a);
@@ -43,7 +46,7 @@ void TransferFunction::toVtkLookupTable(
     }
     else
     {
-        for( unsigned int k=0; k<size; ++k )
+        for( unsigned int k = 0; k<size; ++k )
         {
             interpolatedColor = tf->getInterpolatedColor( k*delta + minMax.first );
             lt->SetTableValue(k, interpolatedColor.r, interpolatedColor.g, interpolatedColor.b, 1.0);
@@ -56,10 +59,10 @@ void TransferFunction::toVtkLookupTable(
 //------------------------------------------------------------------------------
 
 void TransferFunction::toBWVtkLookupTable(
-         double rangeMin,
-         double rangeMax,
-         vtkSmartPointer<vtkLookupTable> lt,
-         unsigned int size )
+    double rangeMin,
+    double rangeMax,
+    vtkSmartPointer<vtkLookupTable> lt,
+    unsigned int size )
 {
     SLM_TRACE_FUNC();
 
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/vtkLambdaCommand.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/vtkLambdaCommand.cpp
new file mode 100644
index 0000000..4562af8
--- /dev/null
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/helper/vtkLambdaCommand.cpp
@@ -0,0 +1,26 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwVtkIO/helper/vtkLambdaCommand.hpp"
+
+
+namespace fwVtkIO
+{
+
+namespace helper
+{
+void vtkLambdaCommand::Execute(vtkObject *caller, unsigned long event, void *callData)
+{
+    if (m_callback)
+    {
+        m_callback(caller, event, callData);
+    }
+}
+
+
+} // namespace helper
+} // namespace fwVtkIO
+
diff --git a/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp b/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp
index 410990c..d65620e 100644
--- a/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp
+++ b/SrcLib/io/fwVtkIO/src/fwVtkIO/vtk.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -13,6 +13,7 @@
 
 #include <vtkImageImport.h>
 #include <vtkSetGet.h>
+#include <vtkType.h>
 
 // for mesh
 #include <vtkCell.h>
@@ -28,12 +29,6 @@
 #include <vtkPolyDataNormals.h>
 #include <vtkLookupTable.h>
 
-#include <vtkMassProperties.h>
-
-#include <vtkPolyDataToImageStencil.h>
-#include <vtkImageStencil.h>
-#include <vtkImageAccumulate.h>
-
 #include <vtkDataSetAttributes.h>
 #include <vtkDataArray.h>
 #include <vtkPointData.h>
@@ -44,7 +39,8 @@
 #include <fwData/Image.hpp>
 #include <fwData/ObjectLock.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
+#include <fwDataTools/helper/ImageGetter.hpp>
 
 #include "fwVtkIO/vtk.hpp"
 
@@ -53,14 +49,16 @@ namespace fwVtkIO
 {
 
 
-TypeTranslator::fwToolsToVtkMap::mapped_type TypeTranslator::translate( const TypeTranslator::fwToolsToVtkMap::key_type &key )
+TypeTranslator::fwToolsToVtkMap::mapped_type TypeTranslator::translate(
+    const TypeTranslator::fwToolsToVtkMap::key_type& key )
 {
     fwToolsToVtkMap::const_iterator it = s_toVtk.find( key );
     FW_RAISE_IF("Unknown Type: " << key, it == s_toVtk.end() );
     return it->second;
 }
 
-TypeTranslator::VtkTofwToolsMap::mapped_type TypeTranslator::translate( const TypeTranslator::VtkTofwToolsMap::key_type &key )
+TypeTranslator::VtkTofwToolsMap::mapped_type TypeTranslator::translate(
+    const TypeTranslator::VtkTofwToolsMap::key_type& key )
 {
     VtkTofwToolsMap::const_iterator it = s_fromVtk.find( key );
     FW_RAISE_IF("Unknown Type: " << key, it == s_fromVtk.end() );
@@ -71,26 +69,26 @@ TypeTranslator::VtkTofwToolsMap::mapped_type TypeTranslator::translate( const Ty
 
 
 const TypeTranslator::fwToolsToVtkMap TypeTranslator::s_toVtk
-        = boost::assign::map_list_of
-            // char and signed char are treated as the same type.
-            // and plain char is used when writing an int8 image
-            ( fwTools::Type::create("int8" )         , VTK_CHAR )
-            ( fwTools::Type::create("uint8" )        , VTK_UNSIGNED_CHAR )
+    = boost::assign::map_list_of
+      // char and signed char are treated as the same type.
+      // and plain char is used when writing an int8 image
+          ( fwTools::Type::create("int8" ), VTK_CHAR )
+          ( fwTools::Type::create("uint8" ), VTK_UNSIGNED_CHAR )
 
-            ( fwTools::Type::create("int16")         , VTK_SHORT )
-            ( fwTools::Type::create("uint16")        , VTK_UNSIGNED_SHORT )
+          ( fwTools::Type::create("int16"), VTK_SHORT )
+          ( fwTools::Type::create("uint16"), VTK_UNSIGNED_SHORT )
 
-            ( fwTools::Type::create("int32")         , VTK_INT )
-            ( fwTools::Type::create("uint32")        , VTK_UNSIGNED_INT )
+          ( fwTools::Type::create("int32"), VTK_INT )
+          ( fwTools::Type::create("uint32"), VTK_UNSIGNED_INT )
 
-            ( fwTools::Type::create("float" )        , VTK_FLOAT )
-            ( fwTools::Type::create("double")        , VTK_DOUBLE )
+          ( fwTools::Type::create("float" ), VTK_FLOAT )
+          ( fwTools::Type::create("double"), VTK_DOUBLE )
 
 #if ( INT_MAX < LONG_MAX )
-            ( fwTools::Type::create("int64")         , VTK_LONG )
-            ( fwTools::Type::create("uint64")        , VTK_UNSIGNED_LONG )
+      ( fwTools::Type::create("int64"), VTK_LONG )
+          ( fwTools::Type::create("uint64"), VTK_UNSIGNED_LONG )
 #endif
-            ;
+    ;
 
 
 
@@ -98,40 +96,40 @@ const TypeTranslator::fwToolsToVtkMap TypeTranslator::s_toVtk
 const TypeTranslator::VtkTofwToolsMap TypeTranslator::s_fromVtk
     = boost::assign::map_list_of
 
-        // char and signed char are treated as the same type.
-        // and plain char is used when writing an int8 image
-        ( VTK_SIGNED_CHAR        , fwTools::Type::create("int8" )  )
-        ( VTK_CHAR               , fwTools::Type::create("int8" )  )
-        ( VTK_UNSIGNED_CHAR      , fwTools::Type::create("uint8" ) )
+      // char and signed char are treated as the same type.
+      // and plain char is used when writing an int8 image
+          ( VTK_SIGNED_CHAR, fwTools::Type::create("int8" )  )
+          ( VTK_CHAR, fwTools::Type::create("int8" )  )
+          ( VTK_UNSIGNED_CHAR, fwTools::Type::create("uint8" ) )
 
-        ( VTK_SHORT              , fwTools::Type::create("int16")  )
-        ( VTK_UNSIGNED_SHORT     , fwTools::Type::create("uint16") )
+          ( VTK_SHORT, fwTools::Type::create("int16")  )
+          ( VTK_UNSIGNED_SHORT, fwTools::Type::create("uint16") )
 
-        ( VTK_INT                , fwTools::Type::create("int32")  )
-        ( VTK_UNSIGNED_INT       , fwTools::Type::create("uint32") )
+          ( VTK_INT, fwTools::Type::create("int32")  )
+          ( VTK_UNSIGNED_INT, fwTools::Type::create("uint32") )
 
-        ( VTK_FLOAT              , fwTools::Type::create("float" ) )
-        ( VTK_DOUBLE             , fwTools::Type::create("double") )
+          ( VTK_FLOAT, fwTools::Type::create("float" ) )
+          ( VTK_DOUBLE, fwTools::Type::create("double") )
 
 #if ( INT_MAX < LONG_MAX )
-        ( VTK_LONG               , fwTools::Type::create("int64")  )
-        ( VTK_UNSIGNED_LONG      , fwTools::Type::create("uint64") )
+      ( VTK_LONG, fwTools::Type::create("int64")  )
+          ( VTK_UNSIGNED_LONG, fwTools::Type::create("uint64") )
 
-        ( VTK___INT64            , fwTools::Type::create("int64")  )
-        ( VTK_LONG_LONG          , fwTools::Type::create("int64")  )
+          ( VTK___INT64, fwTools::Type::create("int64")  )
+          ( VTK_LONG_LONG, fwTools::Type::create("int64")  )
 
-        ( VTK_UNSIGNED___INT64   , fwTools::Type::create("uint64") )
-        ( VTK_UNSIGNED_LONG_LONG , fwTools::Type::create("uint64") )
+          ( VTK_UNSIGNED___INT64, fwTools::Type::create("uint64") )
+          ( VTK_UNSIGNED_LONG_LONG, fwTools::Type::create("uint64") )
 #else
-        ( VTK_LONG               , fwTools::Type::create("int32")  )
-        ( VTK_UNSIGNED_LONG      , fwTools::Type::create("uint32") )
+      ( VTK_LONG, fwTools::Type::create("int32")  )
+          ( VTK_UNSIGNED_LONG, fwTools::Type::create("uint32") )
 #endif
-        ;
+    ;
 
 
 //-----------------------------------------------------------------------------
 
-void toVTKImage( ::fwData::Image::sptr data,  vtkImageData *dst)
+void toVTKImage( ::fwData::Image::csptr data,  vtkImageData* dst)
 {
     vtkSmartPointer< vtkImageImport > importer = vtkSmartPointer< vtkImageImport >::New();
 
@@ -146,19 +144,19 @@ void toVTKImage( ::fwData::Image::sptr data,  vtkImageData *dst)
 
 
 template< typename IMAGETYPE >
-void *newBuffer(size_t size)
+void* newBuffer(size_t size)
 {
-    IMAGETYPE *destBuffer;
+    IMAGETYPE* destBuffer;
     try
     {
         destBuffer = new IMAGETYPE[ size ];
     }
-    catch (std::exception &e)
+    catch (std::exception& e)
     {
         OSLM_ERROR ("No enough memory to allocate an image of type "
-                << fwTools::makeDynamicType<IMAGETYPE>().string()
-                << " and of size "<< size << "." << std::endl
-                << e.what() );
+                    << fwTools::makeDynamicType<IMAGETYPE>().string()
+                    << " and of size "<< size << "." << std::endl
+                    << e.what() );
         throw;
     }
     return destBuffer;
@@ -167,26 +165,48 @@ void *newBuffer(size_t size)
 //-----------------------------------------------------------------------------
 
 template< typename IMAGETYPE >
-void fromRGBBuffer( void *input, size_t size, void *&destBuffer)
+void fromRGBBuffer( void* input, size_t size, void*& destBuffer)
 {
     if(destBuffer == NULL)
     {
         destBuffer = newBuffer<IMAGETYPE>(size);
     }
 
-    IMAGETYPE *destBufferTyped = (IMAGETYPE*)destBuffer;
-    IMAGETYPE *inputTyped      = (IMAGETYPE*)input;
-    IMAGETYPE *finalPtr        = ((IMAGETYPE*)destBuffer) + size;
+    IMAGETYPE* destBufferTyped = (IMAGETYPE*)destBuffer;
+    IMAGETYPE* inputTyped      = (IMAGETYPE*)input;
+    IMAGETYPE* finalPtr        = ((IMAGETYPE*)destBuffer) + size;
     IMAGETYPE valR, valG,valB;
 
     while (destBufferTyped < finalPtr)
     {
-        valR = (IMAGETYPE)(float((*(inputTyped++)) * 0.30));
-        valG = (IMAGETYPE)(float((*(inputTyped++)) * 0.59));
-        valB = (IMAGETYPE)(float((*(inputTyped++)) * 0.11));
+        valR                 = (IMAGETYPE)(float((*(inputTyped++)) * 0.30));
+        valG                 = (IMAGETYPE)(float((*(inputTyped++)) * 0.59));
+        valB                 = (IMAGETYPE)(float((*(inputTyped++)) * 0.11));
         (*destBufferTyped++) = valR + valG + valB;
     }
 }
+
+
+//-----------------------------------------------------------------------------
+
+template< typename IMAGETYPE >
+void fromRGBBufferColor( void* input, size_t size, void*& destBuffer)
+{
+    if(destBuffer == NULL)
+    {
+        destBuffer = newBuffer<IMAGETYPE>(size);
+    }
+
+    IMAGETYPE* destBufferTyped = (IMAGETYPE*)destBuffer;
+    IMAGETYPE* inputTyped      = (IMAGETYPE*)input;
+    IMAGETYPE* finalPtr        = ((IMAGETYPE*)destBuffer) + size;
+
+    while (destBufferTyped < finalPtr)
+    {
+        (*destBufferTyped++) = (*(inputTyped++));
+    }
+}
+
 //-----------------------------------------------------------------------------
 
 
@@ -194,34 +214,57 @@ void fromVTKImage( vtkImageData* source, ::fwData::Image::sptr destination )
 {
     SLM_ASSERT("vtkImageData source and/or ::fwData::Image destination are not correct", destination && source );
 
-    ::fwComEd::helper::Image imageHelper(destination);
+    ::fwDataTools::helper::Image imageHelper(destination);
 
     // ensure image size correct
-    source->UpdateInformation();
-    source->PropagateUpdateExtent();
+//    source->UpdateInformation();
+//    source->PropagateUpdateExtent();
 
-    int dim = source->GetDataDimension() ;
+    int dim = source->GetDataDimension();
     OSLM_TRACE("source->GetDataDimension() : " << dim);
 
     SLM_WARN_IF("2D Vtk image are not yet correctly managed", dim == 2);
 
-
-    destination->setSize( ::fwData::Image::SizeType(source->GetDimensions(), source->GetDimensions()+dim) );
-    destination->setSpacing( ::fwData::Image::SpacingType(source->GetSpacing(), source->GetSpacing()+dim) );
-    destination->setOrigin( ::fwData::Image::OriginType(source->GetOrigin(), source->GetOrigin()+dim) );
+    if(dim == 2)
+    {
+        dim = 3;
+        int size[3];
+        size[0] = source->GetDimensions()[0];
+        size[1] = source->GetDimensions()[1];
+        size[2] = 1;
+        destination->setSize( ::fwData::Image::SizeType(size, size+dim) );
+
+        double spacing[3];
+        spacing[0] = source->GetSpacing()[0];
+        spacing[1] = source->GetSpacing()[1];
+        spacing[2] = 0;
+        destination->setSpacing( ::fwData::Image::SpacingType(spacing, spacing+dim) );
+
+        double origin[3];
+        origin[0] = source->GetOrigin()[0];
+        origin[1] = source->GetOrigin()[1];
+        origin[2] = 0;
+        destination->setOrigin( ::fwData::Image::OriginType(origin, origin+dim) );
+    }
+    else
+    {
+        destination->setSize( ::fwData::Image::SizeType(source->GetDimensions(), source->GetDimensions()+dim) );
+        destination->setSpacing( ::fwData::Image::SpacingType(source->GetSpacing(), source->GetSpacing()+dim) );
+        destination->setOrigin( ::fwData::Image::OriginType(source->GetOrigin(), source->GetOrigin()+dim) );
+    }
 
 
-    size_t size = std::accumulate(source->GetDimensions(), source->GetDimensions()+dim, 1, std::multiplies<size_t>() );
-    void *input = source->GetScalarPointer();
+    size_t size = std::accumulate(source->GetDimensions(), source->GetDimensions()+dim, 3, std::multiplies<size_t>() );
+    void* input = source->GetScalarPointer();
 
     if (size != 0)
     {
-        void *destBuffer;
+        void* destBuffer;
         int nbBytePerPixel = source->GetScalarSize();
-        int nbComponents = source->GetNumberOfScalarComponents();
+        int nbComponents   = source->GetNumberOfScalarComponents();
         OSLM_TRACE("image size : " << size << " - nbBytePerPixel : " << nbBytePerPixel );
 
-        destination->setNumberOfComponents(1);
+        destination->setNumberOfComponents(3);
         if (nbComponents == 3 && nbBytePerPixel == 2)
         {
             SLM_TRACE ("RGB 16bits");
@@ -231,7 +274,7 @@ void fromVTKImage( vtkImageData* source, ::fwData::Image::sptr destination )
             ::fwData::ObjectLock lock(destination);
             destBuffer = imageHelper.getBuffer();
             SLM_ASSERT("Image allocation error", destBuffer != NULL);
-            fromRGBBuffer< unsigned short >(input, size, destBuffer);
+            fromRGBBufferColor< unsigned short >(input, size, destBuffer);
         }
         else if (nbComponents == 3 && nbBytePerPixel == 1)
         {
@@ -242,7 +285,7 @@ void fromVTKImage( vtkImageData* source, ::fwData::Image::sptr destination )
             ::fwData::ObjectLock lock(destination);
             destBuffer = imageHelper.getBuffer();
             SLM_ASSERT("Image allocation error", destBuffer != NULL);
-            fromRGBBuffer< unsigned char >(input, size, destBuffer);
+            fromRGBBufferColor< unsigned char >(input, size, destBuffer);
         }
         else
         {
@@ -261,24 +304,24 @@ void fromVTKImage( vtkImageData* source, ::fwData::Image::sptr destination )
 
 //------------------------------------------------------------------------------
 
-void configureVTKImageImport( ::vtkImageImport * _pImageImport, ::fwData::Image::sptr _pDataImage )
+void configureVTKImageImport( ::vtkImageImport* _pImageImport, ::fwData::Image::csptr _pDataImage )
 {
-    ::fwComEd::helper::Image imageHelper(_pDataImage);
+    ::fwDataTools::helper::ImageGetter imageHelper(_pDataImage);
 
     _pImageImport->SetDataSpacing(  _pDataImage->getSpacing().at(0),
                                     _pDataImage->getSpacing().at(1),
                                     _pDataImage->getSpacing().at(2)
-                                );
+                                    );
 
     _pImageImport->SetDataOrigin(   _pDataImage->getOrigin().at(0),
                                     _pDataImage->getOrigin().at(1),
                                     _pDataImage->getOrigin().at(2)
-                                );
+                                    );
 
     _pImageImport->SetWholeExtent(  0, _pDataImage->getSize().at(0) - 1,
                                     0, _pDataImage->getSize().at(1) - 1,
                                     0, _pDataImage->getSize().at(2) - 1
-                                );
+                                    );
 
     _pImageImport->SetNumberOfScalarComponents(static_cast<int>( _pDataImage->getNumberOfComponents() ));
 
@@ -292,189 +335,12 @@ void configureVTKImageImport( ::vtkImageImport * _pImageImport, ::fwData::Image:
 
 //-----------------------------------------------------------------------------
 
-// This method is written to be as fast as possible, take care when modifying it.
-vtkPolyData*  updatePolyDataPoints(vtkPolyData* polyDataDst, ::fwData::TriangularMesh::sptr meshSrc )
-{
-    SLM_ASSERT( "vtkPolyData should not be NULL", polyDataDst);
-
-    vtkPoints *polyDataPoints = polyDataDst->GetPoints();
-    ::fwData::TriangularMesh::PointContainer &points = meshSrc->points();
-
-    ::fwData::TriangularMesh::PointContainer::iterator pointsIter = points.begin();
-    ::fwData::TriangularMesh::PointContainer::iterator pointsEnd  = points.end();
-
-    float *xyz = 0;
-    vtkIdType id = 0;
-    if (points.size() != polyDataPoints->GetNumberOfPoints())
-    {
-        polyDataPoints->SetNumberOfPoints(points.size());
-    }
-    for( ; pointsIter != pointsEnd ; ++pointsIter )
-    {
-        xyz = &(pointsIter->front());
-        polyDataPoints->SetPoint(id++, xyz);
-    }
-    polyDataPoints->Modified();
-    return polyDataDst;
-}
-
-//-----------------------------------------------------------------------------
-
-vtkPolyData*  toVTKMesh( ::fwData::TriangularMesh::sptr mesh )
-{
-    vtkPolyData *polygonGrid = vtkPolyData::New();
-
-    if ( mesh && !mesh->points().empty() )
-    {
-        vtkSmartPointer< vtkPoints > trianPts = vtkSmartPointer< vtkPoints >::New();
-        polygonGrid->SetPoints(trianPts);
-        updatePolyDataPoints(polygonGrid, mesh);
-
-        ::fwData::TriangularMesh::CellContainer &cells = mesh->cells();
-        unsigned int nbCells = cells.size() ;
-        assert( nbCells ) ;
-        vtkIdType typeCell = VTK_TRIANGLE;
-        polygonGrid->Allocate(typeCell,nbCells);
-        for(unsigned int i=0 ; i<nbCells ; ++i )
-        {
-            vtkIdType cell[3];
-            const std::vector<int> &meshCell = (cells[i]);
-            cell[0] = meshCell[0] ;
-            cell[1] = meshCell[1] ;
-            cell[2] = meshCell[2] ;
-            polygonGrid->InsertNextCell( typeCell, 3, cell );
-        }
-    }
-    else
-    {
-        SLM_INFO("vtkPolyData build from empty mesh.");
-    }
-
-    return polygonGrid;
-}
-
-//-----------------------------------------------------------------------------
-
-bool fromVTKMesh( vtkPolyData *polyData, ::fwData::TriangularMesh::sptr triangularMesh)
-{
-    SLM_TRACE_FUNC();
-    bool res = false;
-    vtkPoints *trianPts = polyData->GetPoints();
-
-    if (trianPts)
-    {
-        // Clear the container cells and set its capacity to 0
-        triangularMesh->clearCells();
-        // Clear the container points and set its capacity to 0
-        triangularMesh->clearPoints();
-
-        vtkDataArray* points = trianPts->GetData();
-        vtkIdType numberOfTuples = points->GetNumberOfTuples();
-        std::vector<float> vPoint(3, 0.0);
-        triangularMesh->points().resize(numberOfTuples, vPoint);
-        double* tuple;
-        for (vtkIdType i = 0; i < numberOfTuples; ++i)
-        {
-            tuple = points->GetTuple(i);
-            ::fwData::TriangularMesh::PointContainer::value_type &vPoints = triangularMesh->points()[i];
-            std::copy(tuple, tuple+3, vPoints.begin());
-        }
-
-        vtkIdType numberOfCells = polyData->GetNumberOfCells();
-        std::vector<int> vCell(3, 0);
-        triangularMesh->cells().resize(numberOfCells, vCell);
-        vtkCell* cell;
-        vtkIdList* idList;
-        vtkIdType* idType;
-        for (vtkIdType i = 0 ; i < numberOfCells ; ++i)
-        {
-            cell = polyData->GetCell(i);
-            idList = cell->GetPointIds();
-            idType = idList->GetPointer(0);
-            ::fwData::TriangularMesh::CellContainer::value_type &vCells = triangularMesh->cells()[i];
-            std::copy(idType, idType+3, vCells.begin());
-        }
-        res = true;
-    }
-
-    return res;
-}
-
-//-----------------------------------------------------------------------------
-
-double computeVolume( ::fwData::TriangularMesh::sptr _triangularMesh )
-{
-    ::fwData::TriangularMesh::sptr closedMesh = ::fwData::Object::copy(_triangularMesh);
-
-    ::fwMath::closeSurface(closedMesh->points(), closedMesh->cells());
-
-    vtkPolyData*  vtkMeshRaw = toVTKMesh( closedMesh );
-
-    vtkSmartPointer< vtkPolyDataNormals > filter = vtkSmartPointer< vtkPolyDataNormals >::New();
-    filter->SetInput(vtkMeshRaw);
-    filter->AutoOrientNormalsOn();
-    filter->FlipNormalsOff();
-
-    vtkSmartPointer< vtkMassProperties > calculator = vtkSmartPointer< vtkMassProperties >::New();
-    calculator->SetInput( filter->GetOutput() );
-    calculator->Update();
-    double volume =  calculator->GetVolume();
-    OSLM_DEBUG("GetVolume : " << volume << " vtkMassProperties::GetVolumeProjected = " << calculator->GetVolumeProjected() );
-    OSLM_DEBUG("Error : " << (calculator->GetVolume()- fabs(calculator->GetVolumeProjected()))*10000);
-    if ( (calculator->GetVolume()- fabs(calculator->GetVolumeProjected()))*10000 > calculator->GetVolume() )
-    {
-        std::stringstream ss;
-        ss << "vtkMassProperties::GetVolume() - | vtkMassProperties::GetVolumeProjected() |";
-        ss << ">  vtkMassProperties::GetVolume()/10000.0" << std::endl;
-        ss << "vtkMassProperties::GetVolume() = " << volume << " vtkMassProperties::GetVolumeProjected = " << calculator->GetVolumeProjected();
-        throw (std::out_of_range( ss.str() ));
-    }
-
-    vtkMeshRaw->Delete();
-
-    return volume;
-}
-
-//-----------------------------------------------------------------------------
-
-double computeVolumeWithStencil(  ::fwData::TriangularMesh::sptr _triangularMesh )
-{
-    vtkPolyData*  vtkMesh = toVTKMesh( _triangularMesh );
-
-    vtkImageData* vi = vtkImageData::New();
-    vi->SetOrigin( 0,0,0 ); // adjust these to your needs
-    vi->SetSpacing( 0.5, 0.5, 0.5 ); // adjust these to your needs
-    vi->SetDimensions( vtkMesh->GetBounds()[1]*2,  vtkMesh->GetBounds()[3]*2,  vtkMesh->GetBounds()[5]*2 ); // adjust these to your needs
-    vi->SetScalarTypeToUnsignedChar ();
-    vi->AllocateScalars();
-    vi->GetPointData()->GetScalars()->FillComponent(0, 1.0);
-    // outputMesh is of vtkPolyData* type and contains your mesh data
-    vtkPolyDataToImageStencil* pti = vtkPolyDataToImageStencil::New();
-    pti->SetInput( vtkMesh );
-    vtkImageAccumulate* ac = vtkImageAccumulate::New();
-    ac->SetInput( vi );
-    ac->SetStencil( pti->GetOutput() );
-    ac->ReverseStencilOff();
-    ac->Update();
-
-    unsigned long nbVoxel = ac->GetVoxelCount();
-
-    pti->Delete();
-    ac->Delete();
-    vi->Delete();
-    vtkMesh->Delete();
-
-    return nbVoxel;
-}
-
-//-----------------------------------------------------------------------------
-
-vtkMatrix4x4 *  toVTKMatrix( ::fwData::TransformationMatrix3D::sptr _transfoMatrix )
+vtkMatrix4x4*  toVTKMatrix( ::fwData::TransformationMatrix3D::sptr _transfoMatrix )
 {
-    vtkMatrix4x4  *matrix = vtkMatrix4x4 ::New();
-    for(int l=0; l<4; l++)
+    vtkMatrix4x4* matrix = vtkMatrix4x4 ::New();
+    for(int l = 0; l<4; l++)
     {
-        for(int c=0; c <4; c++)
+        for(int c = 0; c <4; c++)
         {
             matrix->SetElement(l, c, _transfoMatrix->getCoefficient(l, c));
         }
@@ -488,9 +354,9 @@ bool fromVTKMatrix( vtkMatrix4x4* _matrix, ::fwData::TransformationMatrix3D::spt
 {
     SLM_TRACE_FUNC();
     bool res = true;
-    for(int l=0; l<4; l++)
+    for(int l = 0; l<4; l++)
     {
-        for(int c=0; c <4; c++)
+        for(int c = 0; c <4; c++)
         {
             _transfoMatrix->setCoefficient(l,c, _matrix->GetElement(l,c));
         }
diff --git a/SrcLib/io/fwVtkIO/test/CMakeLists.txt b/SrcLib/io/fwVtkIO/test/CMakeLists.txt
index 384db7d..44188b4 100644
--- a/SrcLib/io/fwVtkIO/test/CMakeLists.txt
+++ b/SrcLib/io/fwVtkIO/test/CMakeLists.txt
@@ -1,10 +1,21 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
 
+find_package(VTK COMPONENTS
+    vtkIOLegacy
+    vtkFiltersSources
+    vtkCommonExecutionModel
+    vtkCommonDataModel
+    vtkCommonCore
+    REQUIRED
+    NO_MODULE )
 
+fwForwardInclude(
+    ${CPPUNIT_INCLUDE_DIR}
+    ${VTK_INCLUDE_DIRS}
+)
 
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${VTK_LIBRARIES}
+)
diff --git a/SrcLib/io/fwVtkIO/test/Properties.cmake b/SrcLib/io/fwVtkIO/test/Properties.cmake
index 09ab2dc..595be38 100644
--- a/SrcLib/io/fwVtkIO/test/Properties.cmake
+++ b/SrcLib/io/fwVtkIO/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwVtkIOTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataTools fwVtkIO )
+set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataTools fwVtkIO fwDataCamp fwMedData fwMemory)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/fwVtkIO/test/cppunit.options b/SrcLib/io/fwVtkIO/test/cppunit.options
deleted file mode 100644
index 4e13357..0000000
--- a/SrcLib/io/fwVtkIO/test/cppunit.options
+++ /dev/null
@@ -1,18 +0,0 @@
-CLASSTEST=[
-          'TrianTest',
-          'MeshTest',
-          'ImageTest',
-          'TransferFunctionTest',
-          'SeriesDBTest',
-          ]
-USE = ['boost']
-LIB = [
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwData_0-1',
-       'fwDataCamp_0-1',
-       'fwVtkIO_0-1',
-       'fwDataTools_0-1',
-       'fwTest_0-1',
-       ]
-CONSOLE='yes'
diff --git a/SrcLib/io/fwVtkIO/test/tu/include/ImageTest.hpp b/SrcLib/io/fwVtkIO/test/tu/include/ImageTest.hpp
index 95a24bf..cde1ea0 100644
--- a/SrcLib/io/fwVtkIO/test/tu/include/ImageTest.hpp
+++ b/SrcLib/io/fwVtkIO/test/tu/include/ImageTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWVTKIO_UT_IMAGETEST_HPP_
-#define _FWVTKIO_UT_IMAGETEST_HPP_
+#ifndef __FWVTKIO_UT_IMAGETEST_HPP__
+#define __FWVTKIO_UT_IMAGETEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -22,18 +22,18 @@ namespace ut
  */
 class ImageTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageTest );
-    CPPUNIT_TEST( testImageToVtk );
-    CPPUNIT_TEST( testFromVtk );
+CPPUNIT_TEST_SUITE( ImageTest );
+CPPUNIT_TEST( testImageToVtk );
+CPPUNIT_TEST( testFromVtk );
 
-    CPPUNIT_TEST( mhdReaderTest );
-    CPPUNIT_TEST( mhdWriterTest );
-    CPPUNIT_TEST( vtiReaderTest );
-    CPPUNIT_TEST( vtiWriterTest );
-    CPPUNIT_TEST( vtkReaderTest );
-    CPPUNIT_TEST( vtkWriterTest );
+CPPUNIT_TEST( mhdReaderTest );
+CPPUNIT_TEST( mhdWriterTest );
+CPPUNIT_TEST( vtiReaderTest );
+CPPUNIT_TEST( vtiWriterTest );
+CPPUNIT_TEST( vtkReaderTest );
+CPPUNIT_TEST( vtkWriterTest );
 
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -55,4 +55,4 @@ public:
 } // namespace ut
 } // namespace fwVtkIO
 
-#endif //_FWVTKIO_UT_IMAGETEST_HPP_
+#endif //__FWVTKIO_UT_IMAGETEST_HPP__
diff --git a/SrcLib/io/fwVtkIO/test/tu/include/MeshTest.hpp b/SrcLib/io/fwVtkIO/test/tu/include/MeshTest.hpp
index c1ea53e..f6f7b62 100644
--- a/SrcLib/io/fwVtkIO/test/tu/include/MeshTest.hpp
+++ b/SrcLib/io/fwVtkIO/test/tu/include/MeshTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWVTKIO_UT_MESHTEST_HPP_
-#define _FWVTKIO_UT_MESHTEST_HPP_
+#ifndef __FWVTKIO_UT_MESHTEST_HPP__
+#define __FWVTKIO_UT_MESHTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -22,11 +22,12 @@ namespace ut
  */
 class MeshTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( MeshTest );
-    CPPUNIT_TEST( testMeshToVtk );
-    CPPUNIT_TEST( testSyntheticMesh );
-    CPPUNIT_TEST( testExportImportSyntheticMesh );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( MeshTest );
+CPPUNIT_TEST( testMeshToVtk );
+CPPUNIT_TEST( testSyntheticMesh );
+CPPUNIT_TEST( testExportImportSyntheticMesh );
+CPPUNIT_TEST( testPointCloud );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -36,10 +37,11 @@ public:
     void testMeshToVtk();
     void testSyntheticMesh();
     void testExportImportSyntheticMesh();
+    void testPointCloud();
 
 };
 
 } // namespace ut
 } // namespace fwVtkIO
 
-#endif //_FWVTKIO_UT_MESHTEST_HPP_
+#endif //__FWVTKIO_UT_MESHTEST_HPP__
diff --git a/SrcLib/io/fwVtkIO/test/tu/include/SeriesDBTest.hpp b/SrcLib/io/fwVtkIO/test/tu/include/SeriesDBTest.hpp
index d012ff4..1c4bc25 100644
--- a/SrcLib/io/fwVtkIO/test/tu/include/SeriesDBTest.hpp
+++ b/SrcLib/io/fwVtkIO/test/tu/include/SeriesDBTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWVTKIO_UT_SERIESDBTEST_HPP_
-#define _FWVTKIO_UT_SERIESDBTEST_HPP_
+#ifndef __FWVTKIO_UT_SERIESDBTEST_HPP__
+#define __FWVTKIO_UT_SERIESDBTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -22,10 +22,10 @@ namespace ut
  */
 class SeriesDBTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBTest );
-    CPPUNIT_TEST( testImportSeriesDB );
-    CPPUNIT_TEST( testLazyImportSeriesDB );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesDBTest );
+CPPUNIT_TEST( testImportSeriesDB );
+CPPUNIT_TEST( testLazyImportSeriesDB );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -40,4 +40,4 @@ public:
 } // namespace ut
 } // namespace fwVtkIO
 
-#endif //_FWVTKIO_UT_SERIESDBTEST_HPP_
+#endif //__FWVTKIO_UT_SERIESDBTEST_HPP__
diff --git a/SrcLib/io/fwVtkIO/test/tu/include/TransferFunctionTest.hpp b/SrcLib/io/fwVtkIO/test/tu/include/TransferFunctionTest.hpp
index 461a6fb..09bea9c 100644
--- a/SrcLib/io/fwVtkIO/test/tu/include/TransferFunctionTest.hpp
+++ b/SrcLib/io/fwVtkIO/test/tu/include/TransferFunctionTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWVTKIO_UT_TRANSFERFUNCTIONTEST_HPP_
-#define _FWVTKIO_UT_TRANSFERFUNCTIONTEST_HPP_
+#ifndef __FWVTKIO_UT_TRANSFERFUNCTIONTEST_HPP__
+#define __FWVTKIO_UT_TRANSFERFUNCTIONTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -21,10 +21,10 @@ namespace ut
  */
 class TransferFunctionTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( TransferFunctionTest );
-    CPPUNIT_TEST( toVtkLookupTableTest );
-    CPPUNIT_TEST( toBWVtkLookupTableTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( TransferFunctionTest );
+CPPUNIT_TEST( toVtkLookupTableTest );
+CPPUNIT_TEST( toBWVtkLookupTableTest );
+CPPUNIT_TEST_SUITE_END();
 
 
 public:
@@ -35,7 +35,7 @@ public:
     void toVtkLookupTableTest();
     void toBWVtkLookupTableTest();
 
-private :
+private:
 
     ::fwData::TransferFunction::sptr createTFColor();
 
@@ -44,4 +44,4 @@ private :
 } // end namespace ut
 } // end namespace fwVtkIO
 
-#endif //_FWVTKIO_UT_TRANSFERFUNCTIONTEST_HPP_
+#endif //__FWVTKIO_UT_TRANSFERFUNCTIONTEST_HPP__
diff --git a/SrcLib/io/fwVtkIO/test/tu/include/TrianTest.hpp b/SrcLib/io/fwVtkIO/test/tu/include/TrianTest.hpp
deleted file mode 100644
index 54e48e3..0000000
--- a/SrcLib/io/fwVtkIO/test/tu/include/TrianTest.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWVTKIO_UT_TRIANTEST_HPP_
-#define _FWVTKIO_UT_TRIANTEST_HPP_
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#include <fwRuntime/EConfigurationElement.hpp>
-
-namespace fwVtkIO
-{
-namespace ut
-{
-
-/**
- * @brief Test many methods to create mesh or image with VTK.
- */
-class TrianTest : public CPPUNIT_NS::TestFixture
-{
-    CPPUNIT_TEST_SUITE( TrianTest );
-    CPPUNIT_TEST( testTrianToVtk );
-    CPPUNIT_TEST_SUITE_END();
-
-
-public:
-    // interface
-    void setUp();
-    void tearDown();
-
-    void testTrianToVtk();
-
-};
-
-} // namespace ut
-} // namespace fwVtkIO
-
-#endif //_FWVTKIO_UT_TRIANTEST_HPP_
diff --git a/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp b/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp
index f7406d7..30489ae 100644
--- a/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp
+++ b/SrcLib/io/fwVtkIO/test/tu/src/ImageTest.cpp
@@ -1,40 +1,39 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-
-#include <boost/assign/std/vector.hpp>
-#include <boost/assign/list_of.hpp>
-
-#include <vtkImageData.h>
-#include <vtkPolyData.h>
-#include <vtkSmartPointer.h>
-#include <vtkSphereSource.h>
-#include <vtkGenericDataObjectReader.h>
-
-#include <fwTools/System.hpp>
+#include "ImageTest.hpp"
 
 #include <fwData/Image.hpp>
 
+#include <fwDataTools/helper/Image.hpp>
+
 #include <fwTest/Data.hpp>
 #include <fwTest/File.hpp>
 #include <fwTest/generator/Image.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwTools/System.hpp>
 
-#include <fwVtkIO/ImageWriter.hpp>
 #include <fwVtkIO/ImageReader.hpp>
+#include <fwVtkIO/ImageWriter.hpp>
 #include <fwVtkIO/MetaImageReader.hpp>
 #include <fwVtkIO/MetaImageWriter.hpp>
 #include <fwVtkIO/VtiImageReader.hpp>
 #include <fwVtkIO/VtiImageWriter.hpp>
 #include <fwVtkIO/vtk.hpp>
 
-#include "ImageTest.hpp"
+#include <vtkGenericDataObjectReader.h>
+#include <vtkImageData.h>
+#include <vtkPolyData.h>
+#include <vtkSmartPointer.h>
+#include <vtkSphereSource.h>
+
+#include <boost/assign/list_of.hpp>
+#include <boost/assign/std/vector.hpp>
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwVtkIO::ut::ImageTest );
@@ -46,61 +45,72 @@ namespace ut
 
 using namespace boost::assign;
 
-static const double epsilon = 0.00001;
+static const double epsilon       = 0.00001;
 static const int nbDataTestValues = 1000;
 
-static const ::fwData::Image::SizeType    bostonTeapotSize    = list_of(256)(256)(178);
+static const ::fwData::Image::SizeType bostonTeapotSize       = list_of(256)(256)(178);
 static const ::fwData::Image::SpacingType bostonTeapotSpacing = list_of(1)(1)(1);
-static const ::fwData::Image::OriginType  bostonTeapotOrigin  = list_of(1.1)(2.2)(3.3);
+static const ::fwData::Image::OriginType bostonTeapotOrigin   = list_of(1.1)(2.2)(3.3);
 
 #define COMPARE_IMAGE_ATTRS_MACRO(expSize, expSpacing, expOrigin, size, spacing, origin)                                                                                          \
-{                                                                                                                                                                                         \
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::SpacingType::value_type >(expSpacing[0]), static_cast< ::fwData::Image::SpacingType::value_type >(spacing[0]), epsilon ); \
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::SpacingType::value_type >(expSpacing[1]), static_cast< ::fwData::Image::SpacingType::value_type >(spacing[1]), epsilon ); \
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::SpacingType::value_type >(expSpacing[2]), static_cast< ::fwData::Image::SpacingType::value_type >(spacing[2]), epsilon ); \
+    {                                                                                                                                                                                         \
+        CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::SpacingType::value_type >(expSpacing[0]), \
+                                      static_cast< ::fwData::Image::SpacingType::value_type >(spacing[0]), epsilon ); \
+        CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::SpacingType::value_type >(expSpacing[1]), \
+                                      static_cast< ::fwData::Image::SpacingType::value_type >(spacing[1]), epsilon ); \
+        CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::SpacingType::value_type >(expSpacing[2]), \
+                                      static_cast< ::fwData::Image::SpacingType::value_type >(spacing[2]), epsilon ); \
                                                                                                                                                                                           \
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::OriginType::value_type >(expOrigin[0]), static_cast< ::fwData::Image::OriginType::value_type >(origin[0]), epsilon );     \
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::OriginType::value_type >(expOrigin[1]), static_cast< ::fwData::Image::OriginType::value_type >(origin[1]), epsilon );     \
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::OriginType::value_type >(expOrigin[2]), static_cast< ::fwData::Image::OriginType::value_type >(origin[2]), epsilon );     \
+        CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::OriginType::value_type >(expOrigin[0]), \
+                                      static_cast< ::fwData::Image::OriginType::value_type >(origin[0]), epsilon );     \
+        CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::OriginType::value_type >(expOrigin[1]), \
+                                      static_cast< ::fwData::Image::OriginType::value_type >(origin[1]), epsilon );     \
+        CPPUNIT_ASSERT_DOUBLES_EQUAL( static_cast< ::fwData::Image::OriginType::value_type >(expOrigin[2]), \
+                                      static_cast< ::fwData::Image::OriginType::value_type >(origin[2]), epsilon );     \
                                                                                                                                                                                           \
-    CPPUNIT_ASSERT_EQUAL( static_cast< ::fwData::Image::SizeType::value_type >(expSize[0]), static_cast< ::fwData::Image::SizeType::value_type >(size[0]) );                              \
-    CPPUNIT_ASSERT_EQUAL( static_cast< ::fwData::Image::SizeType::value_type >(expSize[1]), static_cast< ::fwData::Image::SizeType::value_type >(size[1]) );                              \
-    CPPUNIT_ASSERT_EQUAL( static_cast< ::fwData::Image::SizeType::value_type >(expSize[2]), static_cast< ::fwData::Image::SizeType::value_type >(size[2]) );                              \
-}
+        CPPUNIT_ASSERT_EQUAL( static_cast< ::fwData::Image::SizeType::value_type >(expSize[0]), \
+                              static_cast< ::fwData::Image::SizeType::value_type >(size[0]) );                              \
+        CPPUNIT_ASSERT_EQUAL( static_cast< ::fwData::Image::SizeType::value_type >(expSize[1]), \
+                              static_cast< ::fwData::Image::SizeType::value_type >(size[1]) );                              \
+        CPPUNIT_ASSERT_EQUAL( static_cast< ::fwData::Image::SizeType::value_type >(expSize[2]), \
+                              static_cast< ::fwData::Image::SizeType::value_type >(size[2]) );                              \
+    }
 
 
 #define WRITER_TEST(writerclass, readerclass, imagetype, filename)                                                                 \
-{                                                                                                                                  \
-    const ::boost::filesystem::path testFile(::fwTools::System::getTemporaryFolder() / filename);                                  \
+    {                                                                                                                                  \
+        const ::boost::filesystem::path testFile(::fwTools::System::getTemporaryFolder() / filename);                                  \
                                                                                                                                    \
-    ::fwData::Image::sptr image = ::fwData::Image::New();                                                                          \
-    ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type(imagetype));                                            \
+        ::fwData::Image::sptr image = ::fwData::Image::New();                                                                          \
+        ::fwTest::generator::Image::generateRandomImage(image, ::fwTools::Type(imagetype));                                            \
                                                                                                                                    \
-    writerclass::sptr writer =  writerclass::New();                                                                                \
-    writer->setObject(image);                                                                                                      \
-    writer->setFile(testFile);                                                                                                     \
-    writer->write();                                                                                                               \
+        writerclass::sptr writer = writerclass::New();                                                                                \
+        writer->setObject(image);                                                                                                      \
+        writer->setFile(testFile);                                                                                                     \
+        writer->write();                                                                                                               \
                                                                                                                                    \
-    CPPUNIT_ASSERT_MESSAGE( "test on <" filename ">  of type <" imagetype "> Failed ", ::boost::filesystem::exists(testFile) );    \
+        CPPUNIT_ASSERT_MESSAGE( "test on <" filename ">  of type <" imagetype "> Failed ", \
+                                ::boost::filesystem::exists(testFile) );    \
                                                                                                                                    \
-    ::fwData::Image::sptr image2 = ::fwData::Image::New();                                                                         \
-    readerclass::sptr reader = readerclass::New();                                                                                 \
-    reader->setObject(image2);                                                                                                     \
-    reader->setFile(testFile);                                                                                                     \
-    reader->read();                                                                                                                \
+        ::fwData::Image::sptr image2 = ::fwData::Image::New();                                                                         \
+        readerclass::sptr reader = readerclass::New();                                                                                 \
+        reader->setObject(image2);                                                                                                     \
+        reader->setFile(testFile);                                                                                                     \
+        reader->read();                                                                                                                \
                                                                                                                                    \
-    ::boost::filesystem::remove(testFile);                                                                                         \
+        ::boost::filesystem::remove(testFile);                                                                                         \
                                                                                                                                    \
-    CPPUNIT_ASSERT_EQUAL_MESSAGE( "test on <" filename "> of type <" imagetype "> Failed ", image->getType(), image2->getType() ); \
-    COMPARE_IMAGE_ATTRS_MACRO(                                                                                                     \
-                image->getSize(),                                                                                                  \
-                image->getSpacing(),                                                                                               \
-                image->getOrigin(),                                                                                                \
-                image2->getSize(),                                                                                                 \
-                image2->getSpacing(),                                                                                              \
-                image2->getOrigin()                                                                                                \
+        CPPUNIT_ASSERT_EQUAL_MESSAGE( "test on <" filename "> of type <" imagetype "> Failed ", \
+                                      image->getType(), image2->getType() ); \
+        COMPARE_IMAGE_ATTRS_MACRO(                                                                                                     \
+            image->getSize(),                                                                                                  \
+            image->getSpacing(),                                                                                               \
+            image->getOrigin(),                                                                                                \
+            image2->getSize(),                                                                                                 \
+            image2->getSpacing(),                                                                                              \
+            image2->getOrigin()                                                                                                \
             )                                                                                                                      \
-}
+    }
 
 //------------------------------------------------------------------------------
 
@@ -137,15 +147,15 @@ void ImageTest::testImageToVtk()
 
 #define IMAGE_TO_VTK_TEST(imgtype, vtktypes)                                                                                   \
     {                                                                                                                          \
-    ::fwData::Image::sptr image = ::fwData::Image::New();                                                                      \
-    ::fwTest::generator::Image::generateImage(image, size, spacing, origin, ::fwTools::Type(imgtype));                         \
+        ::fwData::Image::sptr image = ::fwData::Image::New();                                                                      \
+        ::fwTest::generator::Image::generateImage(image, size, spacing, origin, ::fwTools::Type(imgtype));                         \
                                                                                                                                \
-    ::fwComEd::helper::Image imageHelper(image);                                                                               \
+        ::fwDataTools::helper::Image imageHelper(image);                                                                               \
                                                                                                                                \
-    vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();                                         \
-    ::fwVtkIO::toVTKImage(image, vtkImage);                                                                                      \
+        vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();                                         \
+        ::fwVtkIO::toVTKImage(image, vtkImage);                                                                                      \
                                                                                                                                \
-    COMPARE_IMAGE_ATTRS_MACRO(                                                                                                 \
+        COMPARE_IMAGE_ATTRS_MACRO(                                                                                                 \
             size,                                                                                                              \
             spacing,                                                                                                           \
             origin,                                                                                                            \
@@ -155,28 +165,30 @@ void ImageTest::testImageToVtk()
             vtkImage->GetOrigin()                                                                                              \
             );                                                                                                                 \
                                                                                                                                \
-    std::set<int> types = vtktypes;                                                                                            \
-    CPPUNIT_ASSERT_MESSAGE( "Test failed for type " imgtype, types.find( vtkImage->GetScalarType() ) != types.end() );         \
+        std::set<int> types = vtktypes;                                                                                            \
+        CPPUNIT_ASSERT_MESSAGE( "Test failed for type " imgtype, \
+                                types.find( vtkImage->GetScalarType() ) != types.end() );         \
                                                                                                                                \
-    char *vtkPtr = static_cast<char*>(vtkImage->GetScalarPointer());                                                           \
-    char *ptr = static_cast<char*>(imageHelper.getBuffer());                                                                   \
+        char* vtkPtr = static_cast<char*>(vtkImage->GetScalarPointer());                                                           \
+        char* ptr    = static_cast<char*>(imageHelper.getBuffer());                                                                   \
                                                                                                                                \
-    CPPUNIT_ASSERT_MESSAGE( "Test failed for type " imgtype, std::equal(ptr, ptr + image->getSizeInBytes(), vtkPtr) );         \
-}
+        CPPUNIT_ASSERT_MESSAGE( "Test failed for type " imgtype, \
+                                std::equal(ptr, ptr + image->getSizeInBytes(), vtkPtr) );         \
+    }
 
-    IMAGE_TO_VTK_TEST("int8"  , list_of(VTK_CHAR)(VTK_SIGNED_CHAR));
-    IMAGE_TO_VTK_TEST("uint8" , list_of(VTK_UNSIGNED_CHAR));
+    IMAGE_TO_VTK_TEST("int8", list_of(VTK_CHAR)(VTK_SIGNED_CHAR));
+    IMAGE_TO_VTK_TEST("uint8", list_of(VTK_UNSIGNED_CHAR));
 
-    IMAGE_TO_VTK_TEST("int16" , list_of(VTK_SHORT));
+    IMAGE_TO_VTK_TEST("int16", list_of(VTK_SHORT));
     IMAGE_TO_VTK_TEST("uint16", list_of(VTK_UNSIGNED_SHORT));
 
-    IMAGE_TO_VTK_TEST("int32" , list_of(VTK_INT));
+    IMAGE_TO_VTK_TEST("int32", list_of(VTK_INT));
     IMAGE_TO_VTK_TEST("uint32", list_of(VTK_UNSIGNED_INT));
 
     // IMAGE_TO_VTK_TEST("int64" , list_of(VTK_LONG));
     // IMAGE_TO_VTK_TEST("uint64", list_of(VTK_UNSIGNED_LONG));
 
-    IMAGE_TO_VTK_TEST("float" , list_of(VTK_FLOAT));
+    IMAGE_TO_VTK_TEST("float", list_of(VTK_FLOAT));
     IMAGE_TO_VTK_TEST("double", list_of(VTK_DOUBLE));
 
 }
@@ -196,29 +208,31 @@ void ImageTest::testFromVtk()
         vtkSmartPointer< vtkGenericDataObjectReader > reader = vtkSmartPointer< vtkGenericDataObjectReader >::New();   \
         reader->SetFileName(imagePath.string().c_str());                                                               \
         reader->Update();                                                                                              \
+        reader->UpdateInformation();                                                                                   \
+        reader->PropagateUpdateExtent();                                                                               \
         vtkSmartPointer< vtkImageData > vtkImage = vtkImageData::SafeDownCast(reader->GetOutput());                    \
                                                                                                                        \
         CPPUNIT_ASSERT(vtkImage);                                                                                      \
                                                                                                                        \
-        ::fwData::Image::sptr image = ::fwData::Image::New();                                                                                \
-        ::fwVtkIO::fromVTKImage(vtkImage, image);                                                                        \
+        ::fwData::Image::sptr image = ::fwData::Image::New();                                                          \
+        ::fwVtkIO::fromVTKImage(vtkImage, image);                                                                      \
                                                                                                                        \
-        ::fwComEd::helper::Image imageHelper(image);                                                                   \
+        ::fwDataTools::helper::Image imageHelper(image);                                                                   \
                                                                                                                        \
         COMPARE_IMAGE_ATTRS_MACRO(                                                                                     \
-                vtkImage->GetDimensions(),                                                                             \
-                vtkImage->GetSpacing(),                                                                                \
-                vtkImage->GetOrigin(),                                                                                 \
+            vtkImage->GetDimensions(),                                                                             \
+            vtkImage->GetSpacing(),                                                                                \
+            vtkImage->GetOrigin(),                                                                                 \
                                                                                                                        \
-                image->getSize(),                                                                                      \
-                image->getSpacing(),                                                                                   \
-                image->getOrigin()                                                                                     \
-                );                                                                                                     \
+            image->getSize(),                                                                                      \
+            image->getSpacing(),                                                                                   \
+            image->getOrigin()                                                                                     \
+            );                                                                                                     \
                                                                                                                        \
         CPPUNIT_ASSERT_EQUAL_MESSAGE( "test on <" imagename "> Failed ", ::fwTools::Type(type), image->getType() );    \
                                                                                                                        \
-        char *vtkPtr = static_cast<char*>(vtkImage->GetScalarPointer());                                               \
-        char *ptr = static_cast<char*>(imageHelper.getBuffer());                                                       \
+        char* vtkPtr = static_cast<char*>(vtkImage->GetScalarPointer());                                               \
+        char* ptr    = static_cast<char*>(imageHelper.getBuffer());                                                       \
                                                                                                                        \
         CPPUNIT_ASSERT( std::equal(ptr, ptr + image->getSizeInBytes(), vtkPtr) );                                      \
     }
@@ -250,21 +264,24 @@ void ImageTest::mhdReaderTest()
 {
     const ::boost::filesystem::path imagePath( ::fwTest::Data::dir() / "fw4spl/image/mhd/BostonTeapot.mhd" );
 
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imagePath.string() + "' does not exist",
+                           ::boost::filesystem::exists(imagePath));
+
+    ::fwData::Image::sptr image             = ::fwData::Image::New();
     ::fwVtkIO::MetaImageReader::sptr reader = ::fwVtkIO::MetaImageReader::New();
     reader->setObject(image);
     reader->setFile(imagePath);
     reader->read();
 
     COMPARE_IMAGE_ATTRS_MACRO(
-            bostonTeapotSize,
-            bostonTeapotSpacing,
-            bostonTeapotOrigin,
+        bostonTeapotSize,
+        bostonTeapotSpacing,
+        bostonTeapotOrigin,
 
-            image->getSize(),
-            image->getSpacing(),
-            image->getOrigin()
-            );
+        image->getSize(),
+        image->getSpacing(),
+        image->getOrigin()
+        );
 
 }
 
@@ -275,10 +292,16 @@ void ImageTest::mhdWriterTest()
     const ::boost::filesystem::path imagePath( ::fwTest::Data::dir() / "fw4spl/image/mhd/BostonTeapot.mhd" );
     const ::boost::filesystem::path zRawPath( ::fwTest::Data::dir() / "fw4spl/image/mhd/BostonTeapot.zraw" );
 
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imagePath.string() + "' does not exist",
+                           ::boost::filesystem::exists(imagePath));
+
+    CPPUNIT_ASSERT_MESSAGE("The file '" + zRawPath.string() + "' does not exist",
+                           ::boost::filesystem::exists(zRawPath));
+
     const ::boost::filesystem::path testFile(::fwTools::System::getTemporaryFolder() / "BostonTeapot.mhd");
     const ::boost::filesystem::path testZRawFile(::fwTools::System::getTemporaryFolder() / "BostonTeapot.zraw");
 
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    ::fwData::Image::sptr image             = ::fwData::Image::New();
     ::fwVtkIO::MetaImageReader::sptr reader = ::fwVtkIO::MetaImageReader::New();
     reader->setObject(image);
     reader->setFile(imagePath);
@@ -319,7 +342,10 @@ void ImageTest::vtiReaderTest()
 {
     const ::boost::filesystem::path imagePath( ::fwTest::Data::dir() / "fw4spl/image/vti/BostonTeapot.vti" );
 
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imagePath.string() + "' does not exist",
+                           ::boost::filesystem::exists(imagePath));
+
+    ::fwData::Image::sptr image            = ::fwData::Image::New();
     ::fwVtkIO::VtiImageReader::sptr reader = ::fwVtkIO::VtiImageReader::New();
 
     reader->setObject(image);
@@ -327,14 +353,14 @@ void ImageTest::vtiReaderTest()
     reader->read();
 
     COMPARE_IMAGE_ATTRS_MACRO(
-            bostonTeapotSize,
-            bostonTeapotSpacing,
-            bostonTeapotOrigin,
+        bostonTeapotSize,
+        bostonTeapotSpacing,
+        bostonTeapotOrigin,
 
-            image->getSize(),
-            image->getSpacing(),
-            image->getOrigin()
-            );
+        image->getSize(),
+        image->getSpacing(),
+        image->getOrigin()
+        );
 
 
 
@@ -361,7 +387,10 @@ void ImageTest::vtkReaderTest()
 {
     const ::boost::filesystem::path imagePath( ::fwTest::Data::dir() / "fw4spl/image/vtk/img.vtk" );
 
-    ::fwData::Image::sptr image = ::fwData::Image::New();
+    CPPUNIT_ASSERT_MESSAGE("The file '" + imagePath.string() + "' does not exist",
+                           ::boost::filesystem::exists(imagePath));
+
+    ::fwData::Image::sptr image         = ::fwData::Image::New();
     ::fwVtkIO::ImageReader::sptr reader = ::fwVtkIO::ImageReader::New();
 
     reader->setObject(image);
@@ -378,43 +407,47 @@ void ImageTest::vtkReaderTest()
     vtkOrigin += 34.64,86.6,56;
 
     COMPARE_IMAGE_ATTRS_MACRO(
-            vtkSize,
-            vtkSpacing,
-            vtkOrigin,
-
-            image->getSize(),
-            image->getSpacing(),
-            image->getOrigin()
-            );
-
-
-#define VTK_READER_TEST(imagetype)                                                                                                                 \
-{                                                                                                                                                  \
-    const ::boost::filesystem::path testFile(::fwTest::Data::dir() / "fw4spl/image/vtk/img-" imagetype ".vtk");                                    \
-                                                                                                                                                   \
-    ::fwData::Image::sptr image = ::fwData::Image::New();                                                                                                                \
-                                                                                                                                                   \
-    ::fwVtkIO::ImageReader::sptr reader = ::fwVtkIO::ImageReader::New();                                                                                                          \
-    reader->setObject(image);                                                                                                                      \
-    reader->setFile(testFile);                                                                                                                     \
-    reader->read();                                                                                                                                \
-                                                                                                                                                   \
-    vtkSmartPointer< vtkGenericDataObjectReader > vtkreader = vtkSmartPointer< vtkGenericDataObjectReader >::New();                                \
-    vtkreader->SetFileName(testFile.string().c_str());                                                                                             \
-    vtkreader->Update();                                                                                                                           \
-    vtkSmartPointer< vtkImageData > vtkImage = vtkImageData::SafeDownCast(vtkreader->GetOutput());                                                 \
-    CPPUNIT_ASSERT_EQUAL_MESSAGE( "test on <" "fw4spl/image/vtk/img-" imagetype ".vtk" "> Failed ", ::fwTools::Type(imagetype), image->getType()); \
-                                                                                                                                                   \
-    COMPARE_IMAGE_ATTRS_MACRO(                                                                                                                     \
-            image->getSize(),                                                                                                                      \
-            image->getSpacing(),                                                                                                                   \
-            image->getOrigin(),                                                                                                                    \
-                                                                                                                                                   \
-            vtkImage->GetDimensions(),                                                                                                             \
-            vtkImage->GetSpacing(),                                                                                                                \
-            vtkImage->GetOrigin()                                                                                                                  \
-            );                                                                                                                                     \
-}
+        vtkSize,
+        vtkSpacing,
+        vtkOrigin,
+
+        image->getSize(),
+        image->getSpacing(),
+        image->getOrigin()
+        );
+
+
+#define VTK_READER_TEST(imagetype)                                                                                      \
+    {                                                                                                                   \
+        const ::boost::filesystem::path testFile(::fwTest::Data::dir() / "fw4spl/image/vtk/img-" imagetype ".vtk");     \
+                                                                                                                        \
+        CPPUNIT_ASSERT_MESSAGE("The file '" + testFile.string() + "' does not exist",                                   \
+                               ::boost::filesystem::exists(testFile));                                                  \
+                                                                                                                        \
+        ::fwData::Image::sptr image = ::fwData::Image::New();                                                           \
+                                                                                                                        \
+        ::fwVtkIO::ImageReader::sptr reader = ::fwVtkIO::ImageReader::New();                                            \
+        reader->setObject(image);                                                                                       \
+        reader->setFile(testFile);                                                                                      \
+        reader->read();                                                                                                 \
+                                                                                                                        \
+        vtkSmartPointer< vtkGenericDataObjectReader > vtkreader = vtkSmartPointer< vtkGenericDataObjectReader >::New(); \
+        vtkreader->SetFileName(testFile.string().c_str());                                                              \
+        vtkreader->Update();                                                                                            \
+        vtkSmartPointer< vtkImageData > vtkImage = vtkImageData::SafeDownCast(vtkreader->GetOutput());                  \
+        CPPUNIT_ASSERT_EQUAL_MESSAGE( "test on <" "fw4spl/image/vtk/img-" imagetype ".vtk" "> Failed ",                 \
+                                      ::fwTools::Type(imagetype), image->getType());                                    \
+                                                                                                                        \
+        COMPARE_IMAGE_ATTRS_MACRO(                                                                                      \
+            image->getSize(),                                                                                           \
+            image->getSpacing(),                                                                                        \
+            image->getOrigin(),                                                                                         \
+                                                                                                                        \
+            vtkImage->GetDimensions(),                                                                                  \
+            vtkImage->GetSpacing(),                                                                                     \
+            vtkImage->GetOrigin()                                                                                       \
+            );                                                                                                          \
+    }
 
 
     VTK_READER_TEST("int8"  );
diff --git a/SrcLib/io/fwVtkIO/test/tu/src/MeshTest.cpp b/SrcLib/io/fwVtkIO/test/tu/src/MeshTest.cpp
index 36383f0..1b8b4d0 100644
--- a/SrcLib/io/fwVtkIO/test/tu/src/MeshTest.cpp
+++ b/SrcLib/io/fwVtkIO/test/tu/src/MeshTest.cpp
@@ -1,30 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/operations.hpp>
-
-#include <vtkPolyData.h>
-#include <vtkSphereSource.h>
-#include <vtkSmartPointer.h>
-
-#include <fwTools/System.hpp>
+#include "MeshTest.hpp"
 
 #include <fwDataCamp/visitor/CompareObjects.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwDataTools/Mesh.hpp>
+#include <fwDataTools/helper/Array.hpp>
 
 #include <fwTest/generator/Mesh.hpp>
-#include <fwDataTools/Mesh.hpp>
 
-#include <fwVtkIO/MeshWriter.hpp>
+#include <fwTools/NumericRoundCast.hxx>
+#include <fwTools/System.hpp>
+
 #include <fwVtkIO/MeshReader.hpp>
+#include <fwVtkIO/MeshWriter.hpp>
 #include <fwVtkIO/helper/Mesh.hpp>
 
-#include "MeshTest.hpp"
+#include <vtkPolyData.h>
+#include <vtkSmartPointer.h>
+#include <vtkSphereSource.h>
+
+#include <boost/filesystem/operations.hpp>
+#include <boost/filesystem/path.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwVtkIO::ut::MeshTest );
@@ -41,11 +42,11 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(objRef, objComp);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
     }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
+    CPPUNIT_ASSERT_MESSAGE("Object Not equal", props->size() == 0 );
 }
 
 //------------------------------------------------------------------------------
@@ -53,6 +54,8 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
 void MeshTest::setUp()
 {
     // Set up context before running a test.
+
+    std::srand(::fwTools::numericRoundCast<unsigned int>(std::time(NULL)));
 }
 
 //------------------------------------------------------------------------------
@@ -142,7 +145,7 @@ void MeshTest::testExportImportSyntheticMesh()
     writer->write();
     CPPUNIT_ASSERT(::boost::filesystem::exists(testFile));
 
-    ::fwData::Mesh::sptr mesh2 = ::fwData::Mesh::New();
+    ::fwData::Mesh::sptr mesh2         = ::fwData::Mesh::New();
     ::fwVtkIO::MeshReader::sptr reader = ::fwVtkIO::MeshReader::New();
     reader->setObject(mesh2);
     reader->setFile(testFile);
@@ -154,5 +157,44 @@ void MeshTest::testExportImportSyntheticMesh()
     CPPUNIT_ASSERT(suppr);
 }
 
+//------------------------------------------------------------------------------
+
+
+void MeshTest::testPointCloud()
+{
+    const std::uint64_t NB_POINTS = (100 + rand()%1000);
+
+    ::fwData::Mesh::sptr mesh1 = ::fwData::Mesh::New();
+
+    mesh1->allocate(NB_POINTS, NB_POINTS, NB_POINTS);
+
+    ::fwDataTools::helper::Mesh helper(mesh1);
+
+    for (std::uint64_t i = 0; i < NB_POINTS; ++i)
+    {
+        ::fwData::Mesh::PointValueType point[3];
+        point[0] = (rand()%1000 - 500.f) / 3.f;
+        point[1] = (rand()%1000 - 500.f) / 3.f;
+        point[2] = (rand()%1000 - 500.f) / 3.f;
+        helper.insertNextPoint(point);
+        helper.insertNextCell(i);
+    }
+    mesh1->adjustAllocatedMemory();
+
+    vtkSmartPointer< vtkPolyData > poly = vtkSmartPointer< vtkPolyData >::New();
+    ::fwVtkIO::helper::Mesh::toVTKMesh( mesh1, poly);
+    CPPUNIT_ASSERT( poly );
+
+    ::fwData::Mesh::sptr mesh2 = ::fwData::Mesh::New();
+    ::fwVtkIO::helper::Mesh::fromVTKMesh(poly, mesh2);
+
+    CPPUNIT_ASSERT_EQUAL(NB_POINTS, mesh2->getNumberOfPoints());
+    CPPUNIT_ASSERT_EQUAL(NB_POINTS, mesh2->getNumberOfCells());
+    CPPUNIT_ASSERT_EQUAL(NB_POINTS, mesh2->getCellDataSize());
+    compare(mesh1, mesh2);
+}
+
+//------------------------------------------------------------------------------
+
 } // namespace ut
 } // namespace fwVtkIO
diff --git a/SrcLib/io/fwVtkIO/test/tu/src/SeriesDBTest.cpp b/SrcLib/io/fwVtkIO/test/tu/src/SeriesDBTest.cpp
index a7c86ca..3275ab3 100644
--- a/SrcLib/io/fwVtkIO/test/tu/src/SeriesDBTest.cpp
+++ b/SrcLib/io/fwVtkIO/test/tu/src/SeriesDBTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -96,11 +96,11 @@ void SeriesDBTest::testImportSeriesDB()
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(mesh1, mesh2);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
     }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
+    CPPUNIT_ASSERT_MESSAGE("Object Not equal", props->size() == 0 );
 }
 
 //------------------------------------------------------------------------------
@@ -108,7 +108,7 @@ void SeriesDBTest::testImportSeriesDB()
 bool isLoaded(::fwMemory::BufferObject::sptr bo)
 {
     ::fwMemory::BufferManager::csptr manager = ::fwMemory::BufferManager::getDefault();
-    const ::fwMemory::BufferManager::BufferInfoMapType mapInfos =  manager->getBufferInfos().get();
+    const ::fwMemory::BufferManager::BufferInfoMapType mapInfos = manager->getBufferInfos().get();
 
     ::fwMemory::BufferManager::BufferInfoMapType::const_iterator iter = mapInfos.find(bo->getBufferPointer());
     CPPUNIT_ASSERT_MESSAGE("BufferInfo not found.", iter != mapInfos.end());
diff --git a/SrcLib/io/fwVtkIO/test/tu/src/TransferFunctionTest.cpp b/SrcLib/io/fwVtkIO/test/tu/src/TransferFunctionTest.cpp
index 25187be..f8a1533 100644
--- a/SrcLib/io/fwVtkIO/test/tu/src/TransferFunctionTest.cpp
+++ b/SrcLib/io/fwVtkIO/test/tu/src/TransferFunctionTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -69,33 +69,33 @@ void TransferFunctionTest::toVtkLookupTableTest()
     ::fwVtkIO::helper::TransferFunction::toVtkLookupTable( tf, lt, true, 4096 );
     lt->GetColor( 0, color);
     opacity = lt->GetOpacity(0);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, opacity, colorTolerance );
 
     lt->GetColor(200,color);
     opacity = lt->GetOpacity(200);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity, colorTolerance );
 
     lt->GetColor(150,color);
     opacity = lt->GetOpacity(150);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.75, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.75, opacity, colorTolerance );
 
     tf->setInterpolationMode( ::fwData::TransferFunction::NEAREST );
     ::fwVtkIO::helper::TransferFunction::toVtkLookupTable( tf, lt, true, 4096 );
     lt->GetColor(120,color);
     opacity = lt->GetOpacity(120);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, opacity, colorTolerance );
 
 //    tf->setLevel(200);
 //    ::fwVtkIO::helper::TransferFunction::toVtkLookupTable( tf, lt, true, 4096 );
@@ -131,24 +131,24 @@ void TransferFunctionTest::toBWVtkLookupTableTest()
 
     lt->GetColor(0,color);
     opacity = lt->GetOpacity(0);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.0, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity, colorTolerance );
 
     lt->GetColor(100,color);
     opacity = lt->GetOpacity(100);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity, colorTolerance );
 
     lt->GetColor(50,color);
     opacity = lt->GetOpacity(50);
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[0] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[1] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[2] , colorTolerance );
-    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity  , colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[0], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[1], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 0.5, color[2], colorTolerance );
+    CPPUNIT_ASSERT_DOUBLES_EQUAL( 1.0, opacity, colorTolerance );
 }
 
 //------------------------------------------------------------------------------
diff --git a/SrcLib/io/fwVtkIO/test/tu/src/TrianTest.cpp b/SrcLib/io/fwVtkIO/test/tu/src/TrianTest.cpp
deleted file mode 100644
index 7a464a2..0000000
--- a/SrcLib/io/fwVtkIO/test/tu/src/TrianTest.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <vtkPolyData.h>
-#include <vtkSphereSource.h>
-#include <vtkSmartPointer.h>
-
-#include <fwData/TriangularMesh.hpp>
-
-#include <fwVtkIO/vtk.hpp>
-
-#include "TrianTest.hpp"
-
-// Registers the fixture into the 'registry'
-CPPUNIT_TEST_SUITE_REGISTRATION( ::fwVtkIO::ut::TrianTest );
-
-namespace fwVtkIO
-{
-namespace ut
-{
-
-//------------------------------------------------------------------------------
-
-void TrianTest::setUp()
-{
-    // Set up context before running a test.
-}
-
-//------------------------------------------------------------------------------
-
-void TrianTest::tearDown()
-{
-    // Clean up after the test run.
-}
-
-//------------------------------------------------------------------------------
-
-void TrianTest::testTrianToVtk()
-{
-    ::fwData::TriangularMesh::sptr trian1 = ::fwData::TriangularMesh::New();
-    CPPUNIT_ASSERT( trian1 );
-
-    vtkSmartPointer< vtkSphereSource > source = vtkSmartPointer< vtkSphereSource >::New();
-    source->SetThetaResolution(50);
-    source->SetPhiResolution(50);
-    source->SetRadius(2);
-    source->Update();
-    vtkSmartPointer< vtkPolyData > poly_source = source->GetOutput();
-
-    CPPUNIT_ASSERT( trian1->cells().empty() );
-    CPPUNIT_ASSERT( trian1->points().empty() );
-
-    ::fwVtkIO::fromVTKMesh(poly_source, trian1);
-
-    CPPUNIT_ASSERT( !trian1->cells().empty() );
-    CPPUNIT_ASSERT( !trian1->points().empty() );
-
-    vtkPolyData *mesh = ::fwVtkIO::toVTKMesh( trian1 );
-    CPPUNIT_ASSERT( mesh );
-
-    CPPUNIT_ASSERT_EQUAL(poly_source->GetNumberOfVerts(), mesh->GetNumberOfVerts());
-    CPPUNIT_ASSERT_EQUAL(poly_source->GetNumberOfLines(), mesh->GetNumberOfLines());
-    CPPUNIT_ASSERT_EQUAL(poly_source->GetNumberOfPolys(), mesh->GetNumberOfPolys());
-    CPPUNIT_ASSERT_EQUAL(poly_source->GetNumberOfStrips(), mesh->GetNumberOfStrips());
-
-
-    ::fwData::TriangularMesh::sptr trian2 = ::fwData::TriangularMesh::New();
-    CPPUNIT_ASSERT( trian2 );
-    ::fwVtkIO::fromVTKMesh(mesh, trian2);
-
-    CPPUNIT_ASSERT_EQUAL(trian1->getNumCells(),  trian2->getNumCells());
-    CPPUNIT_ASSERT_EQUAL(trian1->getNumPoints(), trian2->getNumPoints());
-    CPPUNIT_ASSERT(trian1->points() == trian2->points());
-    CPPUNIT_ASSERT(trian1->cells() ==  trian2->cells());
-
-    mesh->Delete();
-}
-
-//------------------------------------------------------------------------------
-
-} // namespace ut
-} // namespace fwVtkIO
diff --git a/SrcLib/io/vtkGdcmIO/CMakeLists.txt b/SrcLib/io/vtkGdcmIO/CMakeLists.txt
index a22ef8c..0224b5f 100644
--- a/SrcLib/io/vtkGdcmIO/CMakeLists.txt
+++ b/SrcLib/io/vtkGdcmIO/CMakeLists.txt
@@ -1,26 +1,25 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwData
-    fwDataIO
-    fwMemory
-    fwTools
-)
-
 
-find_package(Boost COMPONENTS filesystem REQUIRED)
+find_package(VTK REQUIRED)
 find_package(GDCM REQUIRED)
 include(${GDCM_USE_FILE})
 
 fwForwardInclude(
-    ${BOOST_INCLUDE_DIRS}
     ${GDCM_INCLUDE_DIRS}
-    )
+)
+
+
 fwLink(
     ${GDCM_LIBRARIES}
+
+    vtkInteractionStyle
+    vtkIOImage
+    vtkCommonExecutionModel
+    vtkCommonDataModel
+    vtkCommonCore
+
     vtkgdcm
     gdcmMSFF
     gdcmDSED
     gdcmCommon
-    )
-
+)
diff --git a/SrcLib/io/vtkGdcmIO/Properties.cmake b/SrcLib/io/vtkGdcmIO/Properties.cmake
index ab78797..0543006 100644
--- a/SrcLib/io/vtkGdcmIO/Properties.cmake
+++ b/SrcLib/io/vtkGdcmIO/Properties.cmake
@@ -2,6 +2,15 @@
 set( NAME vtkGdcmIO )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCore fwData fwDataIO fwMedData fwMemory fwTools fwVtkIO )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwDataIO
+    fwMedData
+    fwMemory
+    fwTools
+    fwVtkIO
+    fwJobs
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/vtkGdcmIO/bin/build.options b/SrcLib/io/vtkGdcmIO/bin/build.options
deleted file mode 100644
index 21ac864..0000000
--- a/SrcLib/io/vtkGdcmIO/bin/build.options
+++ /dev/null
@@ -1,13 +0,0 @@
-TYPE='shared'
-LIB = [
-       'fwData_0-1',
-       'fwMedData_0-1',
-       'fwCore_0-1',
-       'fwDataIO_0-2',
-       'fwTools_0-1',
-       'fwComEd_0-1',
-       'fwVtkIO_0-1'
-       ]
-VERSION = '0-1'
-USE = ['boost', 'boostFilesystem', 'boostDateTime','vtkgdcm']
-
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/ImageSeriesWriter.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/ImageSeriesWriter.hpp
index f756213..b49863e 100644
--- a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/ImageSeriesWriter.hpp
+++ b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/ImageSeriesWriter.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,11 +7,15 @@
 #ifndef __VTKGDCMIO_IMAGESERIESWRITER_HPP__
 #define __VTKGDCMIO_IMAGESERIESWRITER_HPP__
 
+#include "vtkGdcmIO/config.hpp"
+
 #include <fwDataIO/writer/GenericObjectWriter.hpp>
 #include <fwData/location/Folder.hpp>
-#include <fwTools/ProgressAdviser.hpp>
 
-#include "vtkGdcmIO/config.hpp"
+namespace fwJobs
+{
+class Observer;
+}
 
 namespace fwMedData
 {
@@ -21,21 +25,30 @@ class ImageSeries;
 namespace vtkGdcmIO
 {
 
+enum class CompressionTypes
+{
+    RAW = 0, //default
+    JPEG,
+    JPEG2000,
+    JPEGLS,
+    RLE
+};
+
 /**
  * @brief Write an ImageSeries in DICOM format.
  * @class ImageSeriesWriter
  */
 class ImageSeriesWriter : public ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::ImageSeries >,
-                             public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >,
-                             public ::fwTools::ProgressAdviser
+                          public ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >
 {
 
-public :
+public:
 
-    fwCoreClassDefinitionsWithFactoryMacro((ImageSeriesWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::ImageSeries>),
+    fwCoreClassDefinitionsWithFactoryMacro((ImageSeriesWriter)( ::fwDataIO::writer::GenericObjectWriter< ::fwMedData::
+                                                                                                         ImageSeries>),
                                            (()),
                                            ::fwDataIO::writer::factory::New< ImageSeriesWriter >
-                                          );
+                                           );
     fwCoreAllowSharedFromThis();
 
     /// Constructor. Does nothing
@@ -46,6 +59,26 @@ public :
 
     /// Return an empty string
     VTKGDCMIO_API std::string  extension();
+
+    /// @return internal job
+    VTKGDCMIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+    /// Get DICOM compression type (default RAW)
+    CompressionTypes getCompressionTypes() const
+    {
+        return m_compressionTypes;
+    }
+
+    /// Set DICOM compression type
+    void setCompressionTypes(CompressionTypes type)
+    {
+        m_compressionTypes = type;
+    }
+private:
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
+    CompressionTypes m_compressionTypes;
 };
 
 } // namespace vtkGdcmIO
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBLazyReader.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBLazyReader.hpp
index 8d1a61a..e861163 100644
--- a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBLazyReader.hpp
+++ b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBLazyReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,19 +7,17 @@
 #ifndef __VTKGDCMIO_SERIESDBLAZYREADER_HPP__
 #define __VTKGDCMIO_SERIESDBLAZYREADER_HPP__
 
-#include <gdcmScanner.h>
+#include "vtkGdcmIO/config.hpp"
 
 #include <fwCore/macros.hpp>
 
-#include <fwTools/ProgressAdviser.hpp>
-
 #include <fwData/Image.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/MultiFiles.hpp>
 
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 
-#include "vtkGdcmIO/config.hpp"
+#include <gdcmScanner.h>
 
 namespace fwMedData
 {
@@ -32,6 +30,11 @@ class SeriesDB;
 class Study;
 }
 
+namespace fwJobs
+{
+class Observer;
+}
+
 namespace vtkGdcmIO
 {
 
@@ -41,22 +44,21 @@ namespace vtkGdcmIO
  * @brief Reads DICOM data from a directory path in order to create a SeriesDB object in lazy mode.
  */
 class SeriesDBLazyReader : public ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >,
-                             public ::fwData::location::enableFolder< ::fwDataIO::reader::IObjectReader > ,
-                             public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader > ,
-                             public ::fwTools::ProgressAdviser
+                           public ::fwData::location::enableFolder< ::fwDataIO::reader::IObjectReader >,
+                           public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
     typedef std::vector< std::string > SeriesFilesType;
 
     typedef std::map< std::string, SeriesFilesType > MapSeriesType;
 
     fwCoreClassDefinitionsWithFactoryMacro(
-                    (SeriesDBLazyReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
-                    (()),
-                    ::fwDataIO::reader::factory::New< SeriesDBLazyReader >
-                    );
+        (SeriesDBLazyReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
+        (()),
+        ::fwDataIO::reader::factory::New< SeriesDBLazyReader >
+        );
 
     fwCoreAllowSharedFromThis();
 
@@ -69,7 +71,10 @@ public :
     /// Reads DICOM data from configured path and fills SeriesDB object. Use lazy reading process to read images.
     VTKGDCMIO_API void read();
 
-private :
+    /// @return internal job
+    VTKGDCMIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
 
     /**
      * @brief Creates a SeriesDB from the data contained in the given directory path.
@@ -112,6 +117,9 @@ private :
 
     /// Select some dicom tags and scan information in all filenames
     void scanFiles( gdcm::Scanner & scanner, const std::vector< std::string > & filenames );
+
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
 };
 
 } // namespace vtkGdcmIO
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBReader.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBReader.hpp
index c72c3dc..654a70b 100644
--- a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBReader.hpp
+++ b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/SeriesDBReader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,17 +8,21 @@
 #define __VTKGDCMIO_SERIESDBREADER_HPP__
 
 
-#include <fwTools/ProgressAdviser.hpp>
+#include "vtkGdcmIO/config.hpp"
+
 #include <fwDataIO/reader/GenericObjectReader.hpp>
 #include <fwData/location/Folder.hpp>
 #include <fwData/location/MultiFiles.hpp>
 
-#include "vtkGdcmIO/config.hpp"
+
 namespace fwMedData
 {
 class SeriesDB;
 }
-
+namespace fwJobs
+{
+class Observer;
+}
 
 namespace vtkGdcmIO
 {
@@ -29,18 +33,17 @@ namespace vtkGdcmIO
  * @brief Reads DICOM data from a directory path in order to create a SeriesDB object.
  */
 class SeriesDBReader : public ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >,
-                             public ::fwData::location::enableFolder< ::fwDataIO::reader::IObjectReader > ,
-                             public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader > ,
-                             public ::fwTools::ProgressAdviser
+                       public ::fwData::location::enableFolder< ::fwDataIO::reader::IObjectReader >,
+                       public ::fwData::location::enableMultiFiles< ::fwDataIO::reader::IObjectReader >
 {
 
-public :
+public:
 
     fwCoreClassDefinitionsWithFactoryMacro(
-                    (SeriesDBReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
-                    (()),
-                    ::fwDataIO::reader::factory::New< SeriesDBReader >
-                    );
+        (SeriesDBReader)( ::fwDataIO::reader::GenericObjectReader< ::fwMedData::SeriesDB >),
+        (()),
+        ::fwDataIO::reader::factory::New< SeriesDBReader >
+        );
     fwCoreAllowSharedFromThis();
 
     VTKGDCMIO_API SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key);
@@ -52,7 +55,10 @@ public :
      */
     VTKGDCMIO_API void read();
 
-private :
+    /// @return internal job
+    VTKGDCMIO_API SPTR(::fwJobs::IJob) getJob() const;
+
+private:
 
     /**
      * @brief Creates a SeriesDB from the data contained in the given directory path.
@@ -71,6 +77,9 @@ private :
      */
     void addSeries( const SPTR( ::fwMedData::SeriesDB ) &seriesDB, const std::vector< std::string > &filenames);
 
+    ///Internal job
+    SPTR(::fwJobs::Observer) m_job;
+
 };
 
 } // namespace vtkGdcmIO
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/config.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/config.hpp
deleted file mode 100644
index ab355c3..0000000
--- a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/config.hpp
+++ /dev/null
@@ -1,50 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef __VTKGDCMIO_CONFIG_HPP__
-#define __VTKGDCMIO_CONFIG_HPP__
-
-
-#ifdef _WIN32
-
-    #ifdef VTKGDCMIO_EXPORTS
-    #define VTKGDCMIO_API __declspec(dllexport)
-    #define VTKGDCMIO_TEMPLATE_API
-    #else
-    #define VTKGDCMIO_API __declspec(dllimport)
-    #define VTKGDCMIO_TEMPLATE_API extern
-    #endif
-
-    #define VTKGDCMIO_CLASS_API
-
-    #pragma warning(disable: 4290)
-    #pragma warning(disable: 4800) // avoid waring on return hard coded value
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef VTKGDCMIO_EXPORTS
-        #define VTKGDCMIO_API __attribute__ ((visibility("default")))
-        #define VTKGDCMIO_CLASS_API __attribute__ ((visibility("default")))
-        #define VTKGDCMIO_TEMPLATE_API
-        #else
-        //#define VTKGDCMIO_API __attribute__ ((visibility("hidden")))
-        //#define VTKGDCMIO_CLASS_API __attribute__ ((visibility("hidden")))
-        #define VTKGDCMIO_API
-        #define VTKGDCMIO_CLASS_API
-        #define VTKGDCMIO_TEMPLATE_API extern
-        #endif
-
-#else
-
-        #define VTKGDCMIO_API
-        #define VTKGDCMIO_CLASS_API
-        #define VTKGDCMIO_TEMPLATE_API
-
-#endif
-
-
-#endif //__VTKGDCMIO_CONFIG_HPP__
-
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/GdcmHelper.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/GdcmHelper.hpp
index 8374cbe..152c87e 100644
--- a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/GdcmHelper.hpp
+++ b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/GdcmHelper.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __VTKGDCMIO_GDCMHELPER_HPP__
-#define __VTKGDCMIO_GDCMHELPER_HPP__
+#ifndef __VTKGDCMIO_HELPER_GDCMHELPER_HPP__
+#define __VTKGDCMIO_HELPER_GDCMHELPER_HPP__
 
 #include <boost/filesystem/path.hpp>
 #include <boost/filesystem.hpp>
@@ -20,17 +20,18 @@ namespace helper
 /**
  * @brief   This class contains helpers to search dicom files on filesystem...
  * @class   DicomSearch
- * 
+ *
  * @date    2011.
  */
 class VTKGDCMIO_CLASS_API DicomSearch
 {
 public:
-    VTKGDCMIO_API static void searchRecursivelyFiles(const ::boost::filesystem::path &dirPath, std::vector<std::string>& dicomFiles);
+    VTKGDCMIO_API static void searchRecursivelyFiles(const ::boost::filesystem::path &dirPath,
+                                                     std::vector<std::string>& dicomFiles);
     static bool compare(std::string & _strOrgin, std::vector<std::string> * vecStr);
 };
 
 } // namespace helper
 } // namespace vtkGdcmIO
 
-#endif /*__VTKGDCMIO_GDCMHELPER_HPP__*/
+#endif /*__VTKGDCMIO_HELPER_GDCMHELPER_HPP__*/
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/ImageDicomStream.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/ImageDicomStream.hpp
index d00964d..31059b6 100644
--- a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/ImageDicomStream.hpp
+++ b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/helper/ImageDicomStream.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -31,11 +31,11 @@ namespace helper
 class ImageDicomInfo
 {
 
-public :
+public:
 
     typedef std::vector< std::string > SeriesFilesType;
 
-    typedef SPTR( ImageDicomInfo ) sptr;
+    typedef SPTR ( ImageDicomInfo ) sptr;
 
     /// Size of image buffer in bytes
     size_t m_buffSizeInBytes;
@@ -53,7 +53,7 @@ public:
 
     typedef char char_type;
 
-    typedef ::boost::iostreams::source_tag  category;
+    typedef ::boost::iostreams::source_tag category;
 
     /// Constructor
     ImageDicomSource( ImageDicomInfo::sptr dcmInfo );
@@ -61,7 +61,7 @@ public:
     /// Method to read n bytes in dicom buffer and write it in s. On the first call, readImage() method is called.
     std::streamsize read(char* s, std::streamsize n);
 
-private :
+private:
 
     /**
      * @brief Helper to read with vtk and gdcm a dicom image, sets m_reader, m_inputReader and m_success
diff --git a/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/namespace.hpp b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/namespace.hpp
new file mode 100644
index 0000000..6941d2e
--- /dev/null
+++ b/SrcLib/io/vtkGdcmIO/include/vtkGdcmIO/namespace.hpp
@@ -0,0 +1,20 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __VTKGDCMIO_NAMESPACE_HPP__
+#define __VTKGDCMIO_NAMESPACE_HPP__
+
+
+/**
+ * @brief vtkmGdcm reader/writer lib
+ */
+namespace vtkGdcmIO
+{
+} //namespace vtkGdcmIO
+
+
+
+#endif //__VTKGDCMIO_NAMESPACE_HPP__
diff --git a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/ImageSeriesWriter.cpp b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/ImageSeriesWriter.cpp
index c087a12..89d149b 100644
--- a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/ImageSeriesWriter.cpp
+++ b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/ImageSeriesWriter.cpp
@@ -1,23 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/filesystem.hpp>
-
-#include <iostream>
-#include <time.h>
+#include "vtkGdcmIO/ImageSeriesWriter.hpp"
 
-#include <vtkImageData.h>
-#include <vtkStringArray.h>
-#include <vtkSmartPointer.h>
-
-#include <vtkGDCMImageWriter.h>
-#include <vtkMedicalImageProperties.h>
-#include <gdcmFilenameGenerator.h>
-#include <gdcmDicts.h>
-#include <gdcmGlobal.h>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
 
 #include <fwCore/base.hpp>
 
@@ -34,11 +24,22 @@
 #include <fwDataIO/writer/registry/macros.hpp>
 
 #include <fwVtkIO/vtk.hpp>
-#include <fwVtkIO/helper/ProgressVtkToFw.hpp>
+#include <fwVtkIO/helper/vtkLambdaCommand.hpp>
 
-#include "vtkGdcmIO/ImageSeriesWriter.hpp"
+#include <vtkImageData.h>
+#include <vtkStringArray.h>
+#include <vtkSmartPointer.h>
+
+#include <vtkGDCMImageWriter.h>
+#include <vtkMedicalImageProperties.h>
+#include <gdcmFilenameGenerator.h>
+#include <gdcmDicts.h>
+#include <gdcmGlobal.h>
 
+#include <boost/filesystem.hpp>
 
+#include <iostream>
+#include <time.h>
 
 fwDataIOWriterRegisterMacro( ::vtkGdcmIO::ImageSeriesWriter );
 
@@ -62,7 +63,9 @@ void setValue(vtkMedicalImageProperties *medprop,
 //------------------------------------------------------------------------------
 
 ImageSeriesWriter::ImageSeriesWriter(::fwDataIO::writer::IObjectWriter::Key key) :
-        ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this)
+    ::fwData::location::enableFolder< ::fwDataIO::writer::IObjectWriter >(this),
+    m_job(::fwJobs::Observer::New("VTK Image writer")),
+    m_compressionTypes(CompressionTypes::RAW)
 {
 }
 
@@ -71,10 +74,10 @@ ImageSeriesWriter::ImageSeriesWriter(::fwDataIO::writer::IObjectWriter::Key key)
 void ImageSeriesWriter::write()
 {
     ::fwMedData::ImageSeries::sptr imgSeries = this->getConcreteObject();
-    ::fwData::Image::sptr dataImage = imgSeries->getImage();
-    ::fwMedData::Patient::sptr patient = imgSeries->getPatient();
-    ::fwMedData::Study::sptr study = imgSeries->getStudy();
-    ::fwMedData::Equipment::sptr equipment = imgSeries->getEquipment();
+    ::fwData::Image::sptr dataImage          = imgSeries->getImage();
+    ::fwMedData::Patient::sptr patient       = imgSeries->getPatient();
+    ::fwMedData::Study::sptr study           = imgSeries->getStudy();
+    ::fwMedData::Equipment::sptr equipment   = imgSeries->getEquipment();
 
     // Vtk Conversion
     vtkSmartPointer< vtkImageData > vtkImage = vtkSmartPointer< vtkImageData >::New();
@@ -165,7 +168,7 @@ void ImageSeriesWriter::write()
         ::fwMedData::DicomValuesType::const_iterator itr = performingPhysicians.begin();
 
         physicians << *itr++;
-        for (; itr < performingPhysicians.end() ; ++itr)
+        for (; itr < performingPhysicians.end(); ++itr)
         {
             physicians << "\\" << *itr;
         }
@@ -184,16 +187,16 @@ void ImageSeriesWriter::write()
     // tagkey = "0028|0030";
     std::string value;
     std::vector<double> spacing = dataImage->getSpacing();
-    value = ::fwTools::getString< double >(spacing[0]);
+    value  = ::fwTools::getString< double >(spacing[0]);
     value += '\\';
     value += ::fwTools::getString< double >(spacing[1]);
     setValue(medprop, 0x0028, 0x0030, value);
 
     std::string origin;
     ::fwData::Image::OriginType orginVec = dataImage->getOrigin();
-    origin = ::fwTools::getString< ::fwData::Image::OriginType::value_type >(orginVec[0]);
-    origin += '\\';
-    origin = ::fwTools::getString< ::fwData::Image::OriginType::value_type >(orginVec[1]);
+    origin                               = ::fwTools::getString< ::fwData::Image::OriginType::value_type >(orginVec[0]);
+    origin                              += '\\';
+    origin                               = ::fwTools::getString< ::fwData::Image::OriginType::value_type >(orginVec[1]);
 
     if (dataImage->getNumberOfDimensions() > 2)
     {
@@ -209,7 +212,7 @@ void ImageSeriesWriter::write()
         setValue(medprop, 0x0018, 0x0088, value);
 
         origin += '\\';
-        origin = ::fwTools::getString< ::fwData::Image::OriginType::value_type >(orginVec[2]);
+        origin  = ::fwTools::getString< ::fwData::Image::OriginType::value_type >(orginVec[2]);
     }
 
     setValue(medprop, 0x0020, 0x0032, origin);
@@ -219,24 +222,49 @@ void ImageSeriesWriter::write()
     vtkSmartPointer< vtkGDCMImageWriter > writer = vtkSmartPointer< vtkGDCMImageWriter >::New();
 
     //add progress observation
-    ::fwVtkIO::Progressor progress(writer, this->getSptr(), outputDirectory.string());
     writer->SetStudyUID(study->getInstanceUID().c_str());
     writer->SetSeriesUID(imgSeries->getInstanceUID().c_str());
-    writer->SetInput( vtkImage );
+    writer->SetInputData( vtkImage );
     writer->FileLowerLeftOn();
     writer->SetFileDimensionality( 2 ); // test the 3D to 2D writing mode
     writer->SetMedicalImageProperties( medprop );
     writer->SetFileNames( filenames );
+    writer->SetCompressionType(static_cast<int>(m_compressionTypes));
+
+    using namespace fwVtkIO::helper;
+    vtkSmartPointer<vtkLambdaCommand> progressCallback;
+    progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+    progressCallback->SetCallback([this](vtkObject* caller, long unsigned int, void* )
+        {
+            auto filter = static_cast<vtkGDCMImageWriter*>(caller);
+            m_job->doneWork( filter->GetProgress()*100 );
+        });
+    writer->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+    m_job->addSimpleCancelHook( [&]()
+        {
+            writer->AbortExecuteOn();
+        });
+
     writer->Write();
 
+    m_job->finish();
+
     filenames->Delete();
 }
 
 //------------------------------------------------------------------------------
 
-std::string  ImageSeriesWriter::extension()
+std::string ImageSeriesWriter::extension()
 {
     return "";
 }
 
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr ImageSeriesWriter::getJob() const
+{
+    return m_job;
+}
+
 } // namespace dicomIO
diff --git a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBLazyReader.cpp b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBLazyReader.cpp
index 9cc2614..d2ef05a 100644
--- a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBLazyReader.cpp
+++ b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBLazyReader.cpp
@@ -1,31 +1,22 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <algorithm>
-#include <iosfwd>
-
-#include <boost/iostreams/categories.hpp>
-
-#include <exception>
-
-#include <boost/filesystem/path.hpp>
-#include <boost/algorithm/string/split.hpp>
-#include <boost/algorithm/string/classification.hpp>
-#include <boost/algorithm/string/trim.hpp>
-#include <boost/foreach.hpp>
+#include "vtkGdcmIO/SeriesDBLazyReader.hpp"
+#include "vtkGdcmIO/helper/GdcmHelper.hpp"
+#include "vtkGdcmIO/helper/ImageDicomStream.hpp"
 
 #include <fwCore/base.hpp>
 #if (SPYLOG_LEVEL >= 4 )
 #include <fwCore/HiResTimer.hpp>
 #endif
 
-#include <fwMemory/BufferObject.hpp>
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
 
-#include <fwTools/dateAndTime.hpp>
-#include <fwTools/fromIsoExtendedString.hpp>
+#include <fwDataIO/reader/registry/macros.hpp>
 
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
@@ -34,22 +25,30 @@
 #include <fwMedData/SeriesDB.hpp>
 #include <fwMedData/Study.hpp>
 
-#include <fwDataIO/reader/registry/macros.hpp>
+#include <fwVtkIO/helper/vtkLambdaCommand.hpp>
+#include <fwVtkIO/vtk.hpp>
 
+#include <fwMemory/BufferObject.hpp>
+
+#include <fwTools/dateAndTime.hpp>
+#include <fwTools/fromIsoExtendedString.hpp>
+
+#include <algorithm>
+#include <boost/algorithm/string/classification.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/trim.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/iostreams/categories.hpp>
+
+#include <exception>
 #include <gdcmImageHelper.h>
-#include <gdcmIPPSorter.h>
-#include <gdcmScanner.h>
-#include <gdcmReader.h>
 #include <gdcmImageReader.h>
 #include <gdcmIPPSorter.h>
+#include <gdcmIPPSorter.h>
+#include <gdcmReader.h>
 #include <gdcmRescaler.h>
-
-#include <fwVtkIO/vtk.hpp>
-#include <fwVtkIO/helper/ProgressVtkToFw.hpp>
-
-#include "vtkGdcmIO/SeriesDBLazyReader.hpp"
-#include "vtkGdcmIO/helper/GdcmHelper.hpp"
-#include "vtkGdcmIO/helper/ImageDicomStream.hpp"
+#include <gdcmScanner.h>
+#include <iosfwd>
 
 fwDataIOReaderRegisterMacro( ::vtkGdcmIO::SeriesDBLazyReader );
 
@@ -91,7 +90,8 @@ const ::gdcm::Tag windowWidthTag(0x0028,0x1051);
 
 SeriesDBLazyReader::SeriesDBLazyReader(::fwDataIO::reader::IObjectReader::Key key) :
     ::fwData::location::enableFolder< IObjectReader >(this),
-    ::fwData::location::enableMultiFiles< IObjectReader >(this)
+    ::fwData::location::enableMultiFiles< IObjectReader >(this),
+    m_job(::fwJobs::Observer::New("SeriesDB reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -113,7 +113,7 @@ SeriesDBLazyReader::~SeriesDBLazyReader()
     std::vector<std::string> filenames;
     ::vtkGdcmIO::helper::DicomSearch::searchRecursivelyFiles(dicomDir, filenames);
 
-    this->addSeries( seriesDB , filenames);
+    this->addSeries( seriesDB, filenames);
     return seriesDB;
 }
 
@@ -153,25 +153,25 @@ void SeriesDBLazyReader::scanFiles( ::gdcm::Scanner & scanner, const std::vector
     scanner.AddTag( windowWidthTag );
 
     bool scanIsOk = scanner.Scan( filenames );
-    FW_RAISE_IF( "Sorry, dicom scanner failed", !scanIsOk );
+    FW_RAISE_IF( "Dicom scanner failed", !scanIsOk );
 }
 
 //------------------------------------------------------------------------------
 
 SeriesDBLazyReader::MapSeriesType buildMapSeriesFromScanner( ::gdcm::Scanner & scanner )
 {
-    ::gdcm::Directory::FilenamesType keys = scanner.GetKeys();
+    ::gdcm::Directory::FilenamesType keys               = scanner.GetKeys();
     ::gdcm::Directory::FilenamesType::const_iterator it = keys.begin();
 
     SeriesDBLazyReader::MapSeriesType mapSeries;
 
-    for(; it != keys.end() ; ++it)
+    for(; it != keys.end(); ++it)
     {
         const char *filename = it->c_str();
         assert( scanner.IsKey( filename ) );
 
-        const char *seriesUID =  scanner.GetValue( filename, seriesUIDTag );
-        const char *acqDate   =  scanner.GetValue( filename, acquisitionDateTag );
+        const char *seriesUID = scanner.GetValue( filename, seriesUIDTag );
+        const char *acqDate   = scanner.GetValue( filename, acquisitionDateTag );
 
         if (seriesUID)
         {
@@ -243,17 +243,17 @@ T getNumericValue( ::gdcm::Scanner & scanner, const std::string & dcmFile, const
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::fillSeries( ::gdcm::Scanner & scanner,
-        const std::string & dcmFile, ::fwMedData::Series::sptr series )
+                                     const std::string & dcmFile, ::fwMedData::Series::sptr series )
 {
-    const std::string seriesUID =  getValue( scanner, dcmFile, seriesUIDTag );
-    const std::string seriesTime = getValue( scanner, dcmFile, seriesTimeTag );
-    const std::string seriesDate = getValue( scanner, dcmFile, seriesDateTag );
-    const std::string seriesModality = getValue( scanner, dcmFile, seriesTypeTag );
+    const std::string seriesUID         = getValue( scanner, dcmFile, seriesUIDTag );
+    const std::string seriesTime        = getValue( scanner, dcmFile, seriesTimeTag );
+    const std::string seriesDate        = getValue( scanner, dcmFile, seriesDateTag );
+    const std::string seriesModality    = getValue( scanner, dcmFile, seriesTypeTag );
     const std::string seriesDescription = getValue( scanner, dcmFile, seriesDescriptionTag );
 
     ::fwMedData::DicomValuesType seriesPhysicianNames;
     ::gdcm::Scanner::ValuesType gdcmPhysicianNames = scanner.GetValues( seriesPhysicianNamesTag );
-    BOOST_FOREACH(const std::string &str, gdcmPhysicianNames)
+    for(const std::string &str :  gdcmPhysicianNames)
     {
         ::fwMedData::DicomValuesType result;
         ::boost::split( result, str, ::boost::is_any_of("\\"));
@@ -273,7 +273,7 @@ void SeriesDBLazyReader::fillSeries( ::gdcm::Scanner & scanner,
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::fillPatient( ::gdcm::Scanner & scanner,
-        const std::string & dcmFile, ::fwMedData::Patient::sptr patient )
+                                      const std::string & dcmFile, ::fwMedData::Patient::sptr patient )
 {
     const std::string patientName      = getValue( scanner, dcmFile, patientNameTag );
     const std::string patientId        = getValue( scanner, dcmFile, patientIDTag );
@@ -289,14 +289,14 @@ void SeriesDBLazyReader::fillPatient( ::gdcm::Scanner & scanner,
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::fillStudy( ::gdcm::Scanner & scanner,
-        const std::string & dcmFile, ::fwMedData::Study::sptr study )
+                                    const std::string & dcmFile, ::fwMedData::Study::sptr study )
 {
-    const std::string studyUID =  getValue( scanner, dcmFile, studyUIDTag );
+    const std::string studyUID                   = getValue( scanner, dcmFile, studyUIDTag );
     const std::string studyReferingPhysicianName = getValue( scanner, dcmFile, studyReferingPhysicianNameTag );
-    const std::string studyDate = getValue( scanner, dcmFile, studyDateTag );
-    const std::string studyTime = getValue( scanner, dcmFile, studyTimeTag );
-    const std::string studyDescription = getValue( scanner, dcmFile, studyDescriptionTag );
-    const std::string studyPatientAge = getValue( scanner, dcmFile, studyPatientAgeTag );
+    const std::string studyDate                  = getValue( scanner, dcmFile, studyDateTag );
+    const std::string studyTime                  = getValue( scanner, dcmFile, studyTimeTag );
+    const std::string studyDescription           = getValue( scanner, dcmFile, studyDescriptionTag );
+    const std::string studyPatientAge            = getValue( scanner, dcmFile, studyPatientAgeTag );
 
     SLM_ASSERT("No study UID", !studyUID.empty() );
     study->setInstanceUID(studyUID);
@@ -310,7 +310,7 @@ void SeriesDBLazyReader::fillStudy( ::gdcm::Scanner & scanner,
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::fillEquipment( ::gdcm::Scanner & scanner,
-        const std::string & dcmFile, ::fwMedData::Equipment::sptr equipment )
+                                        const std::string & dcmFile, ::fwMedData::Equipment::sptr equipment )
 {
     const std::string equipementInstitution = getValue( scanner, dcmFile, equipmentInstitutionNameTag );
 
@@ -320,16 +320,16 @@ void SeriesDBLazyReader::fillEquipment( ::gdcm::Scanner & scanner,
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::preprocessImage(
-        const ::fwData::Image::sptr & img,
-        const SeriesDBLazyReader::SeriesFilesType & files )
+    const ::fwData::Image::sptr & img,
+    const SeriesDBLazyReader::SeriesFilesType & files )
 {
     ::gdcm::Reader localReader;
     localReader.SetFileName( files[0].c_str() );
     localReader.Read();
     ::gdcm::File & gdcmReaderFile = localReader.GetFile();
-    std::vector<double> origin = ::gdcm::ImageHelper::GetOriginValue( gdcmReaderFile );
+    std::vector<double> origin    = ::gdcm::ImageHelper::GetOriginValue( gdcmReaderFile );
     std::vector<unsigned int> dim = ::gdcm::ImageHelper::GetDimensionsValue( gdcmReaderFile );
-    std::vector<double> spacing = ::gdcm::ImageHelper::GetSpacingValue( gdcmReaderFile );
+    std::vector<double> spacing   = ::gdcm::ImageHelper::GetSpacingValue( gdcmReaderFile );
     ::gdcm::PixelFormat pixelFormat = ::gdcm::ImageHelper::GetPixelFormatValue( gdcmReaderFile );
     std::vector<double> interceptSlope = ::gdcm::ImageHelper::GetRescaleInterceptSlopeValue( gdcmReaderFile );
 
@@ -370,15 +370,33 @@ void SeriesDBLazyReader::preprocessImage(
 
     switch( scalarType )
     {
-        case ::gdcm::PixelFormat::UINT8 : imgType = ::fwTools::Type::s_UINT8; break;
-        case ::gdcm::PixelFormat::INT8 : imgType = ::fwTools::Type::s_INT8; break;
-        case ::gdcm::PixelFormat::UINT16 : imgType = ::fwTools::Type::s_UINT16; break;
-        case ::gdcm::PixelFormat::INT16 : imgType = ::fwTools::Type::s_INT16; break;
-        case ::gdcm::PixelFormat::UINT32 : imgType = ::fwTools::Type::s_UINT32; break;
-        case ::gdcm::PixelFormat::INT32 : imgType = ::fwTools::Type::s_INT32; break;
-        case ::gdcm::PixelFormat::FLOAT32 : imgType = ::fwTools::Type::s_FLOAT; break;
-        case ::gdcm::PixelFormat::FLOAT64 : imgType = ::fwTools::Type::s_DOUBLE; break;
-        default : SLM_FATAL("Type not managed"); break;
+        case ::gdcm::PixelFormat::UINT8:
+            imgType = ::fwTools::Type::s_UINT8;
+            break;
+        case ::gdcm::PixelFormat::INT8:
+            imgType = ::fwTools::Type::s_INT8;
+            break;
+        case ::gdcm::PixelFormat::UINT16:
+            imgType = ::fwTools::Type::s_UINT16;
+            break;
+        case ::gdcm::PixelFormat::INT16:
+            imgType = ::fwTools::Type::s_INT16;
+            break;
+        case ::gdcm::PixelFormat::UINT32:
+            imgType = ::fwTools::Type::s_UINT32;
+            break;
+        case ::gdcm::PixelFormat::INT32:
+            imgType = ::fwTools::Type::s_INT32;
+            break;
+        case ::gdcm::PixelFormat::FLOAT32:
+            imgType = ::fwTools::Type::s_FLOAT;
+            break;
+        case ::gdcm::PixelFormat::FLOAT64:
+            imgType = ::fwTools::Type::s_DOUBLE;
+            break;
+        default:
+            SLM_FATAL("Type not managed");
+            break;
     }
 
     // Number of component
@@ -392,8 +410,7 @@ void SeriesDBLazyReader::preprocessImage(
 
 //------------------------------------------------------------------------------
 
-SeriesDBLazyReader::SeriesFilesType
-sortImageSeriesFiles( const SeriesDBLazyReader::SeriesFilesType & seriesFiles )
+SeriesDBLazyReader::SeriesFilesType sortImageSeriesFiles( const SeriesDBLazyReader::SeriesFilesType & seriesFiles )
 {
     SeriesDBLazyReader::SeriesFilesType sortedSeriesFiles = seriesFiles;
 
@@ -437,16 +454,16 @@ double SeriesDBLazyReader::computeZSpacing( const SeriesDBLazyReader::SeriesFile
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::fillImage(
-        ::gdcm::Scanner & scanner,
-        const SeriesDBLazyReader::SeriesFilesType & seriesFiles,
-        const std::string & dcmFile,
-        ::fwData::Image::sptr img )
+    ::gdcm::Scanner & scanner,
+    const SeriesDBLazyReader::SeriesFilesType & seriesFiles,
+    const std::string & dcmFile,
+    ::fwData::Image::sptr img )
 {
 
     this->preprocessImage(img,seriesFiles);
 
     double center = getNumericValue<double>(scanner, dcmFile, windowCenterTag);
-    double width = getNumericValue<double>(scanner, dcmFile, windowWidthTag);
+    double width  = getNumericValue<double>(scanner, dcmFile, windowWidthTag);
 
     img->setWindowCenter(center);
     img->setWindowWidth(width);
@@ -467,21 +484,21 @@ void SeriesDBLazyReader::fillImage(
     img->setSpacing(imgSpacing);
 
 
-    ::vtkGdcmIO::helper::ImageDicomInfo::sptr dcmInfo = ::boost::make_shared< ::vtkGdcmIO::helper::ImageDicomInfo >();
-    dcmInfo->m_buffSizeInBytes = img->getSizeInBytes();
-    dcmInfo->m_seriesFiles = seriesFiles;
+    ::vtkGdcmIO::helper::ImageDicomInfo::sptr dcmInfo = std::make_shared< ::vtkGdcmIO::helper::ImageDicomInfo >();
+    dcmInfo->m_buffSizeInBytes                        = img->getSizeInBytes();
+    dcmInfo->m_seriesFiles                            = seriesFiles;
 
     ::fwMemory::BufferObject::sptr buffObj = img->getDataArray()->getBufferObject();
     buffObj->setIStreamFactory(
-            ::boost::make_shared< ::vtkGdcmIO::helper::ImageDicomStream >( dcmInfo ),
-            img->getSizeInBytes() );
+        std::make_shared< ::vtkGdcmIO::helper::ImageDicomStream >( dcmInfo ),
+        img->getSizeInBytes() );
 }
 
 //------------------------------------------------------------------------------
 
 void SeriesDBLazyReader::addSeries(
-        const ::fwMedData::SeriesDB::sptr &seriesDB,
-        const std::vector< std::string > & filenames )
+    const ::fwMedData::SeriesDB::sptr &seriesDB,
+    const std::vector< std::string > & filenames )
 {
     //gdcm::Trace::SetDebug( 1 );
     //gdcm::Trace::SetWarning( 1 );
@@ -504,9 +521,9 @@ void SeriesDBLazyReader::addSeries(
         /// Build map series
         MapSeriesType mapSeries = buildMapSeriesFromScanner( scanner );
 
-        BOOST_FOREACH( MapSeriesType::value_type mapElem, mapSeries )
+        for( MapSeriesType::value_type mapElem :  mapSeries )
         {
-            SeriesFilesType seriesFiles = sortImageSeriesFiles( mapElem.second );
+            SeriesFilesType seriesFiles    = sortImageSeriesFiles( mapElem.second );
             const std::string & refDcmFile = seriesFiles[0];
 
             // ToDo
@@ -516,7 +533,7 @@ void SeriesDBLazyReader::addSeries(
             {
                 /// Build new data
                 ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::New();
-                ::fwData::Image::sptr img = ::fwData::Image::New();
+                ::fwData::Image::sptr img             = ::fwData::Image::New();
 
                 series->setImage( img );
 
@@ -541,7 +558,7 @@ void SeriesDBLazyReader::addSeries(
     {
         OSLM_ERROR( "Try with another reader or retry with this reader on a specific subfolder : " << e.what() );
         std::vector< std::string >::const_iterator it = filenames.begin();
-        for( ; it != filenames.end(); ++it)
+        for(; it != filenames.end(); ++it)
         {
             SLM_ERROR("file error : " + *it );
         }
@@ -561,12 +578,19 @@ void SeriesDBLazyReader::read()
     }
     else if(::fwData::location::have < ::fwData::location::MultiFiles, ::fwDataIO::reader::IObjectReader > (this))
     {
-        BOOST_FOREACH(::boost::filesystem::path file, this->getFiles())
+        for(::boost::filesystem::path file :  this->getFiles())
         {
             filenames.push_back(file.string());
         }
     }
-    this->addSeries( seriesDB , filenames);
+    this->addSeries( seriesDB, filenames);
+}
+
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr SeriesDBLazyReader::getJob() const
+{
+    return m_job;
 }
 
 } //namespace vtkGdcmIO
diff --git a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBReader.cpp b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBReader.cpp
index bc64920..60e8a38 100644
--- a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBReader.cpp
+++ b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/SeriesDBReader.cpp
@@ -1,23 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <exception>
 
-#include <boost/filesystem/path.hpp>
-#include <boost/algorithm/string/split.hpp>
-#include <boost/algorithm/string/classification.hpp>
-#include <boost/foreach.hpp>
+#include "vtkGdcmIO/SeriesDBReader.hpp"
+#include "vtkGdcmIO/helper/GdcmHelper.hpp"
 
-#include <fwCore/base.hpp>
 
-#include <fwTools/dateAndTime.hpp>
-#include <fwTools/fromIsoExtendedString.hpp>
+#include <fwCore/base.hpp>
 
 #include <fwData/Image.hpp>
 
+#include <fwJobs/IJob.hpp>
+#include <fwJobs/Observer.hpp>
+
 #include <fwMedData/Equipment.hpp>
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/Patient.hpp>
@@ -27,8 +25,13 @@
 
 #include <fwDataIO/reader/registry/macros.hpp>
 
-#include <vtkImageWriter.h>
+#include <fwTools/dateAndTime.hpp>
+#include <fwTools/fromIsoExtendedString.hpp>
 
+#include <fwVtkIO/vtk.hpp>
+#include <fwVtkIO/helper/vtkLambdaCommand.hpp>
+
+#include <vtkImageWriter.h>
 #include <vtkGDCMImageReader.h>
 #include <vtkImageData.h>
 #include <vtkStringArray.h>
@@ -41,11 +44,12 @@
 #include <gdcmReader.h>
 #include <gdcmIPPSorter.h>
 
-#include <fwVtkIO/vtk.hpp>
-#include <fwVtkIO/helper/ProgressVtkToFw.hpp>
 
-#include "vtkGdcmIO/SeriesDBReader.hpp"
-#include "vtkGdcmIO/helper/GdcmHelper.hpp"
+#include <boost/filesystem/path.hpp>
+#include <boost/algorithm/string/split.hpp>
+#include <boost/algorithm/string/classification.hpp>
+
+#include <exception>
 
 fwDataIOReaderRegisterMacro( ::vtkGdcmIO::SeriesDBReader );
 
@@ -56,7 +60,8 @@ namespace vtkGdcmIO
 
 SeriesDBReader::SeriesDBReader(::fwDataIO::reader::IObjectReader::Key key) :
     ::fwData::location::enableFolder< IObjectReader >(this),
-    ::fwData::location::enableMultiFiles< IObjectReader >(this)
+    ::fwData::location::enableMultiFiles< IObjectReader >(this),
+    m_job(::fwJobs::Observer::New("SeriesDB reader"))
 {
     SLM_TRACE_FUNC();
 }
@@ -78,13 +83,14 @@ SeriesDBReader::~SeriesDBReader()
     std::vector<std::string> filenames;
     ::vtkGdcmIO::helper::DicomSearch::searchRecursivelyFiles(dicomDir, filenames);
 
-    this->addSeries( seriesDB , filenames);
+    this->addSeries( seriesDB, filenames);
     return seriesDB;
 }
 
 //------------------------------------------------------------------------------
 
-void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, const std::vector< std::string > &filenames)
+void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB,
+                                const std::vector< std::string > &filenames)
 {
     //gdcm::Trace::SetDebug( 1 );
     //gdcm::Trace::SetWarning( 1 );
@@ -144,21 +150,21 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
         if( !b )
         {
             SLM_ERROR("Scanner failed");
-            return ;
+            return;
         }
-        gdcm::Directory::FilenamesType keys = scanner.GetKeys();
+        gdcm::Directory::FilenamesType keys               = scanner.GetKeys();
         gdcm::Directory::FilenamesType::const_iterator it = keys.begin();
 
         typedef std::map< std::string, std::vector< std::string > > MapSeriesType;
         MapSeriesType mapSeries;
 
-        for(; it != keys.end() ; ++it)
+        for(; it != keys.end(); ++it)
         {
             const char *filename = it->c_str();
             assert( scanner.IsKey( filename ) );
 
-            const char *seriesUID =  scanner.GetValue( filename, seriesUIDTag );
-            const char *acqDate   =  scanner.GetValue( filename, acquisitionDateTag );
+            const char *seriesUID = scanner.GetValue( filename, seriesUIDTag );
+            const char *acqDate   = scanner.GetValue( filename, acquisitionDateTag );
 
             if (seriesUID)
             {
@@ -175,7 +181,7 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
                 {
                     // Treatment of secondary capture dicom file.
                     std::string imageType(imageTypeStr);
-                    OSLM_TRACE("Image Type : " << imageType);
+                    SLM_TRACE("Image Type : " + imageType);
 
                     fileSetId += "_";
                     fileSetId += imageTypeStr;
@@ -198,9 +204,9 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
             std::string seriesInstanceUID;
             std::string studyInstanceUID;
 
-            ::fwMedData::ImageSeries::sptr series = ::fwMedData::ImageSeries::New();
-            ::fwMedData::Patient::sptr patient = series->getPatient();
-            ::fwMedData::Study::sptr study = series->getStudy();
+            ::fwMedData::ImageSeries::sptr series  = ::fwMedData::ImageSeries::New();
+            ::fwMedData::Patient::sptr patient     = series->getPatient();
+            ::fwMedData::Study::sptr study         = series->getStudy();
             ::fwMedData::Equipment::sptr equipment = series->getEquipment();
 
             seriesDB->getContainer().push_back(series);
@@ -209,7 +215,7 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
             const MapSeriesType::mapped_type &files = iter->second;
             if ( !files.empty() )
             {
-                vtkSmartPointer< vtkStringArray > fileArray = vtkSmartPointer< vtkStringArray >::New();
+                vtkSmartPointer< vtkStringArray > fileArray  = vtkSmartPointer< vtkStringArray >::New();
                 vtkSmartPointer< vtkGDCMImageReader > reader = vtkSmartPointer< vtkGDCMImageReader >::New();
                 reader->FileLowerLeftOn();
                 gdcm::IPPSorter s;
@@ -245,29 +251,33 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
 
                             localReader1.SetFileName( f1.c_str() );
                             localReader2.SetFileName( f2.c_str() );
-                            bool canRead = localReader1.Read() && localReader2.Read() ;
+                            bool canRead = localReader1.Read() && localReader2.Read();
                             if( canRead )
                             {
-                                std::vector<double> vOrigin1 = gdcm::ImageHelper::GetOriginValue(localReader1.GetFile());
-                                std::vector<double> vOrigin2 = gdcm::ImageHelper::GetOriginValue(localReader2.GetFile());
+                                std::vector<double> vOrigin1 =
+                                    gdcm::ImageHelper::GetOriginValue(localReader1.GetFile());
+                                std::vector<double> vOrigin2 =
+                                    gdcm::ImageHelper::GetOriginValue(localReader2.GetFile());
                                 zspacing = vOrigin2[2] - vOrigin1[2];
-                                OSLM_TRACE ( "Found z-spacing:" << zspacing << " from : << " << vOrigin2[2] << " | " << vOrigin1[2]);
+                                OSLM_TRACE (
+                                    "Found z-spacing:" << zspacing << " from : << " << vOrigin2[2] << " | " <<
+                                    vOrigin1[2]);
                             }
 
-                            OSLM_ERROR_IF( "Cannot read :" << f1 << " or : " << f2 , !canRead );
+                            OSLM_ERROR_IF( "Cannot read :" << f1 << " or : " << f2, !canRead );
                         }
                         OSLM_DEBUG_IF ( "Failed to find z-spacing:" << s.GetZSpacing(), !zspacing);
-                        OSLM_DEBUG_IF ( "Guessed z-spacing:" << s.GetZSpacing() << " -> " << zspacing , zspacing);
+                        OSLM_DEBUG_IF ( "Guessed z-spacing:" << s.GetZSpacing() << " -> " << zspacing, zspacing);
                     }
 
                     filesIt  = sorted.begin();
                     filesEnd = sorted.end();
                 }
 
-                for( ; filesIt != filesEnd; ++filesIt)
+                for(; filesIt != filesEnd; ++filesIt)
                 {
                     const std::string &f = *filesIt;
-                    OSLM_TRACE("Add " << f << " to vtkGdcmReader");
+                    SLM_TRACE("Add '" + f + "' to vtkGdcmReader");
                     fileArray->InsertNextValue( f.c_str() );
                 }
 
@@ -279,10 +289,26 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
                     reader->SetFileNames( fileArray );
                     try
                     {
-                        SLM_TRACE ( "Read all files" );
+                        SLM_TRACE("Read Series: " + iter->first);
+
+                        using namespace fwVtkIO::helper;
                         //add progress observation
-                        ::fwVtkIO::Progressor progress(reader, this->getSptr(), "Serie " + iter->first);
+                        vtkSmartPointer<vtkLambdaCommand> progressCallback = vtkSmartPointer<vtkLambdaCommand>::New();
+                        progressCallback->SetCallback([this](vtkObject* caller, long unsigned int, void* )
+                            {
+                                auto filter = static_cast<vtkGDCMImageReader*>(caller);
+                                m_job->doneWork( filter->GetProgress()*100 );
+                            });
+                        reader->AddObserver(vtkCommand::ProgressEvent, progressCallback);
+
+                        m_job->addSimpleCancelHook( [&]()
+                            {
+                                reader->AbortExecuteOn();
+                            } );
+
                         reader->Update();
+                        reader->UpdateInformation();
+                        reader->PropagateUpdateExtent();
                         try
                         {
                             ::fwVtkIO::fromVTKImage(reader->GetOutput(), pDataImage);
@@ -301,6 +327,7 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
                     {
                         OSLM_ERROR ( "Unexpected error during conversion" );
                     }
+                    m_job->finish();
                 }
 
                 if (res)
@@ -317,16 +344,16 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
                     std::string patientSex       = medprop->GetPatientSex(); //"0010|0040"
 
                     gdcm::Scanner::ValuesType gdcmPhysicianNames = scanner.GetValues( seriesPhysicianNamesTag );
-                    const char * seriesUIDStr =  scanner.GetValue( files[0].c_str(), seriesUIDTag );
-                    const char * seriesTimeStr = scanner.GetValue( files[0].c_str(), seriesTimeTag );
-                    const char * seriesDateStr = scanner.GetValue( files[0].c_str(), seriesDateTag );
-                    std::string seriesModality = medprop->GetModality(); //"0008|0060"
-                    std::string seriesDescription = medprop->GetSeriesDescription();
-                    std::string seriesDate = ( seriesDateStr ? seriesDateStr : "" );
-                    std::string seriesTime = ( seriesTimeStr ? seriesTimeStr : "" );
+                    const char * seriesUIDStr                    = scanner.GetValue( files[0].c_str(), seriesUIDTag );
+                    const char * seriesTimeStr                   = scanner.GetValue( files[0].c_str(), seriesTimeTag );
+                    const char * seriesDateStr                   = scanner.GetValue( files[0].c_str(), seriesDateTag );
+                    std::string seriesModality                   = medprop->GetModality(); //"0008|0060"
+                    std::string seriesDescription                = medprop->GetSeriesDescription();
+                    std::string seriesDate                       = ( seriesDateStr ? seriesDateStr : "" );
+                    std::string seriesTime                       = ( seriesTimeStr ? seriesTimeStr : "" );
 
                     ::fwMedData::DicomValuesType seriesPhysicianNames;
-                    BOOST_FOREACH(const std::string &str, gdcmPhysicianNames)
+                    for(const std::string &str :  gdcmPhysicianNames)
                     {
                         ::fwMedData::DicomValuesType result;
                         ::boost::split( result, str, ::boost::is_any_of("\\"));
@@ -334,13 +361,13 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
                         seriesPhysicianNames.insert(seriesPhysicianNames.end(), result.begin(), result.end());
                     }
 
-                    const char * studyUIDStr =  scanner.GetValue( files[0].c_str(), studyUIDTag );
+                    const char * studyUIDStr = scanner.GetValue( files[0].c_str(), studyUIDTag );
                     const char * studyReferingPhysicianNameStr
                         = scanner.GetValue( files[0].c_str(), studyReferingPhysicianNameTag );
-                    std::string studyDate = medprop->GetStudyDate();
-                    std::string studyTime = medprop->GetStudyTime();
-                    std::string studyDescription = medprop->GetStudyDescription() ; //"0008|1030"
-                    std::string studyPatientAge = medprop->GetPatientAge();
+                    std::string studyDate        = medprop->GetStudyDate();
+                    std::string studyTime        = medprop->GetStudyTime();
+                    std::string studyDescription = medprop->GetStudyDescription();  //"0008|1030"
+                    std::string studyPatientAge  = medprop->GetPatientAge();
                     std::string studyReferingPhysicianName
                         = ( studyReferingPhysicianNameStr ? studyReferingPhysicianNameStr : "" );
 
@@ -348,8 +375,8 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
 
 
                     double thickness = medprop->GetSliceThicknessAsDouble();//"0018|0050"
-                    double center=0.0;
-                    double width=0.0;
+                    double center    = 0.0;
+                    double width     = 0.0;
                     if (medprop->GetNumberOfWindowLevelPresets())//FIXME : Multiple preset !!!
                     {
                         medprop->GetNthWindowLevelPreset(0,&width,&center); //0028|1050,1051
@@ -367,8 +394,6 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
                         imgOrigin.resize(3);
                         imgOrigin[2] = 0.;
                         pDataImage->setOrigin(imgOrigin);
-
-                        width = 4096;
                     }
 
 
@@ -414,7 +439,7 @@ void SeriesDBReader::addSeries( const ::fwMedData::SeriesDB::sptr &seriesDB, con
     {
         OSLM_ERROR ( "Try with another reader or retry with this reader on a specific subfolder : " << e.what() );
         std::vector< std::string >::const_iterator it = filenames.begin();
-        for( ; it != filenames.end(); ++it)
+        for(; it != filenames.end(); ++it)
         {
             OSLM_ERROR ("file error : " << *it );
         }
@@ -434,12 +459,19 @@ void SeriesDBReader::read()
     }
     else if(::fwData::location::have < ::fwData::location::MultiFiles, ::fwDataIO::reader::IObjectReader > (this))
     {
-        BOOST_FOREACH(::boost::filesystem::path file, this->getFiles())
+        for(::boost::filesystem::path file :  this->getFiles())
         {
             filenames.push_back(file.string());
         }
     }
-    this->addSeries( seriesDB , filenames);
+    this->addSeries( seriesDB, filenames);
+}
+
+//------------------------------------------------------------------------------
+
+::fwJobs::IJob::sptr SeriesDBReader::getJob() const
+{
+    return m_job;
 }
 
 } //namespace vtkGdcmIO
diff --git a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/GdcmHelper.cpp b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/GdcmHelper.cpp
index 2da90f3..150eaee 100644
--- a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/GdcmHelper.cpp
+++ b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/GdcmHelper.cpp
@@ -1,10 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "vtkGdcmIO/helper/GdcmHelper.hpp"
+
+#include <fwCore/base.hpp>
+
 #include <boost/algorithm/string/split.hpp>
 #include <boost/algorithm/string/predicate.hpp>
 #include <boost/algorithm/string/classification.hpp>
@@ -23,10 +26,6 @@
 #include <gdcmAttribute.h>
 #include <gdcmFile.h>
 
-#include <fwCore/base.hpp>
-
-#include "vtkGdcmIO/helper/GdcmHelper.hpp"
-
 namespace vtkGdcmIO
 {
 namespace helper
@@ -36,20 +35,17 @@ void DicomSearch::searchRecursivelyFiles(const ::boost::filesystem::path &dirPat
 {
     std::vector<std::string> vecStr;
     std::string strIgnoreFile = ".zip|.txt|.htm|.html|.xml|.exe|.gz|.dir|.gif|.jpeg|.jpg|dicomdir|.DS_Store";
-    ::boost::algorithm::split( vecStr, strIgnoreFile, ::boost::algorithm::is_any_of("|"), ::boost::algorithm::token_compress_on );
+    ::boost::algorithm::split( vecStr, strIgnoreFile, ::boost::algorithm::is_any_of(
+                                   "|"), ::boost::algorithm::token_compress_on );
 
     std::string lowerFilename;
     std::string filename;
     for( ::boost::filesystem::recursive_directory_iterator it(dirPath);
-            it != ::boost::filesystem::recursive_directory_iterator(); ++it)
+         it != ::boost::filesystem::recursive_directory_iterator(); ++it)
     {
-        if(! ::boost::filesystem::is_directory(*it))
+        if(!::boost::filesystem::is_directory(*it))
         {
-#if BOOST_FILESYSTEM_VERSION > 2
             lowerFilename = filename = it->path().string();
-#else
-            lowerFilename = filename = it->string();
-#endif
             std::transform ( lowerFilename.begin(), lowerFilename.end(), lowerFilename.begin(), tolower );
             if(DicomSearch::compare( lowerFilename, &vecStr) )
             {
@@ -82,7 +78,7 @@ bool DicomSearch::compare(std::string & _strOrgin, std::vector<std::string> * ve
     bool res = true;
     for (size_t i = 0; i < vecStr->size() && res; ++i)
     {
-        res = ! ::boost::ends_with(_strOrgin, vecStr->at(i));
+        res = !::boost::ends_with(_strOrgin, vecStr->at(i));
     }
     return res;
 }
diff --git a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/ImageDicomStream.cpp b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/ImageDicomStream.cpp
index 1d9c8f6..6994288 100644
--- a/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/ImageDicomStream.cpp
+++ b/SrcLib/io/vtkGdcmIO/src/vtkGdcmIO/helper/ImageDicomStream.cpp
@@ -1,18 +1,16 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-#include <boost/make_shared.hpp>
+#include "vtkGdcmIO/helper/ImageDicomStream.hpp"
+
 #include <boost/filesystem/operations.hpp>
 #include <boost/filesystem/path.hpp>
 
 #include <vtkStringArray.h>
 
-#include "vtkGdcmIO/helper/ImageDicomStream.hpp"
-
 namespace vtkGdcmIO
 {
 namespace helper
@@ -39,7 +37,7 @@ bool filesStillExist( const ImageDicomInfo::SeriesFilesType & files )
             allFilesExists && ( itFile != files.end() );
             ++itFile )
     {
-        filePath = *itFile;
+        filePath        = *itFile;
         allFilesExists &= ::boost::filesystem::exists(filePath);
     }
     return allFilesExists;
@@ -51,7 +49,7 @@ bool ImageDicomSource::readImage()
 {
     vtkSmartPointer< vtkStringArray > fileArray = vtkSmartPointer< vtkStringArray >::New();
     fileArray->Initialize();
-    BOOST_FOREACH( std::string file, m_dcmInfo->m_seriesFiles )
+    for( std::string file :  m_dcmInfo->m_seriesFiles )
     {
         OSLM_TRACE("Add " << file << " to vtkGdcmReader");
         fileArray->InsertNextValue( file.c_str() );
@@ -68,17 +66,17 @@ bool ImageDicomSource::readImage()
         {
             m_reader->Update();
             m_inputReader = static_cast<char*>( m_reader->GetOutput()->GetScalarPointer() );
-            res = true;
+            res           = true;
         }
         catch (std::exception &e)
         {
-            m_reader = 0;
+            m_reader      = 0;
             m_inputReader = 0;
             OSLM_ERROR ( "Error during conversion : " << e.what() );
         }
         catch (...)
         {
-            m_reader = 0;
+            m_reader      = 0;
             m_inputReader = 0;
             OSLM_ERROR ( "Unexpected error during conversion" );
         }
@@ -99,10 +97,11 @@ std::streamsize ImageDicomSource::read(char* s, std::streamsize n)
     }
 
     using namespace std;
-    streamsize amt = static_cast<streamsize>( m_dcmInfo->m_buffSizeInBytes - m_pos );
+    streamsize amt    = static_cast<streamsize>( m_dcmInfo->m_buffSizeInBytes - m_pos );
     streamsize result = std::min(n, amt);
 
-    if (result != 0) {
+    if (result != 0)
+    {
         if( m_success )
         {
             std::copy( m_inputReader + m_pos, m_inputReader + m_pos + result, s );
@@ -124,14 +123,15 @@ std::streamsize ImageDicomSource::read(char* s, std::streamsize n)
 //------------------------------------------------------------------------------
 
 ImageDicomStream::ImageDicomStream( ImageDicomInfo::sptr dcmInfo ) : m_dcmInfo ( dcmInfo )
-{};
+{
+}
 
 //------------------------------------------------------------------------------
 
 SPTR(std::istream) ImageDicomStream::get()
 {
     SPTR(::boost::iostreams::stream<ImageDicomSource>) is
-            = ::boost::make_shared< ::boost::iostreams::stream<ImageDicomSource> >( m_dcmInfo );
+        = std::make_shared< ::boost::iostreams::stream<ImageDicomSource> >( m_dcmInfo );
 
     return is;
 }
diff --git a/SrcLib/io/vtkGdcmIO/test/CMakeLists.txt b/SrcLib/io/vtkGdcmIO/test/CMakeLists.txt
index b23b5b0..a1a1144 100644
--- a/SrcLib/io/vtkGdcmIO/test/CMakeLists.txt
+++ b/SrcLib/io/vtkGdcmIO/test/CMakeLists.txt
@@ -1,8 +1,5 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
diff --git a/SrcLib/io/vtkGdcmIO/test/Properties.cmake b/SrcLib/io/vtkGdcmIO/test/Properties.cmake
index 205c8fb..f03bde1 100644
--- a/SrcLib/io/vtkGdcmIO/test/Properties.cmake
+++ b/SrcLib/io/vtkGdcmIO/test/Properties.cmake
@@ -2,6 +2,16 @@
 set( NAME vtkGdcmIOTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwDataTools vtkGdcmIO )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwDataCamp
+    fwDataIO
+    fwMedData
+    fwServices
+    fwTest
+    fwTools
+    vtkGdcmIO
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/io/vtkGdcmIO/test/cppunit.options b/SrcLib/io/vtkGdcmIO/test/cppunit.options
deleted file mode 100644
index 3ead05b..0000000
--- a/SrcLib/io/vtkGdcmIO/test/cppunit.options
+++ /dev/null
@@ -1,17 +0,0 @@
-CLASSTEST=[
-    'SeriesDBReaderTest',
-    'SeriesDBLazyReaderTest',
-    'ImageSeriesWriterTest',
-    ]
-
-USE = ['boost']
-LIB = [
-       'vtkGdcmIO_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1', 
-       'fwData_0-1',
-       'fwMedData_0-1',
-       'fwTest_0-1',
-       'fwDataCamp_0-1'
-       ]
-CONSOLE='yes'
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/include/ImageSeriesWriterTest.hpp b/SrcLib/io/vtkGdcmIO/test/tu/include/ImageSeriesWriterTest.hpp
index 4f7510b..791bdb6 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/include/ImageSeriesWriterTest.hpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/include/ImageSeriesWriterTest.hpp
@@ -1,15 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWVTKGDCMIO_TEST_TU_IMAGESERIESWRITERTEST_HPP__
-#define __FWVTKGDCMIO_TEST_TU_IMAGESERIESWRITERTEST_HPP__
+#ifndef __VTKGDCMIO_UT_IMAGESERIESWRITERTEST_HPP__
+#define __VTKGDCMIO_UT_IMAGESERIESWRITERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwServices/macros.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
 
 namespace vtkGdcmIO
 {
@@ -18,9 +17,9 @@ namespace ut
 
 class ImageSeriesWriterTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageSeriesWriterTest );
-    CPPUNIT_TEST( writeReadTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageSeriesWriterTest );
+CPPUNIT_TEST( writeReadTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -34,4 +33,4 @@ public:
 } // namespace ut
 } // namespace vtkGdcmIO
 
-#endif // __FWVTKGDCMIO_TEST_TU_IMAGESERIESWRITERTEST_HPP__
+#endif // __VTKGDCMIO_UT_IMAGESERIESWRITERTEST_HPP__
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBLazyReaderTest.hpp b/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBLazyReaderTest.hpp
index 3675e4b..02d030e 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBLazyReaderTest.hpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBLazyReaderTest.hpp
@@ -1,20 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWVTKGDCMIO_TEST_TU_SERIESDBLAZYREADER_HPP__
-#define __FWVTKGDCMIO_TEST_TU_SERIESDBLAZYREADER_HPP__
+#ifndef __VTKGDCMIO_UT_SERIESDBLAZYREADERTEST_HPP__
+#define __VTKGDCMIO_UT_SERIESDBLAZYREADERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwServices/macros.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-namespace fwMedData
-{
-    class SeriesDB;
-}
 
 namespace vtkGdcmIO
 {
@@ -23,9 +17,9 @@ namespace ut
 
 class SeriesDBLazyReaderTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBLazyReaderTest );
-    CPPUNIT_TEST( readSeriesDBTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesDBLazyReaderTest );
+CPPUNIT_TEST( readSeriesDBTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
@@ -34,13 +28,10 @@ public:
 
     void readSeriesDBTest();
 
-private:
-    ::fwMedData::SeriesDB::sptr m_seriesDB;
-
 };
 
 } // namespace ut
 } // namespace vtkGdcmIO
 
-#endif // __FWVTKGDCMIO_TEST_TU_SERIESDBLAZYREADER_HPP__
+#endif // __VTKGDCMIO_UT_SERIESDBLAZYREADERTEST_HPP__
 
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBReaderTest.hpp b/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBReaderTest.hpp
index b2b2b63..f67788f 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBReaderTest.hpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/include/SeriesDBReaderTest.hpp
@@ -1,20 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWVTKGDCMIO_TEST_TU_SERIESDBREADERTEST_HPP__
-#define __FWVTKGDCMIO_TEST_TU_SERIESDBREADERTEST_HPP__
+#ifndef __VTKGDCMIO_UT_SERIESDBREADERTEST_HPP__
+#define __VTKGDCMIO_UT_SERIESDBREADERTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 #include <fwServices/macros.hpp>
-#include <fwRuntime/EConfigurationElement.hpp>
-
-namespace fwMedData
-{
-    class SeriesDB;
-}
 
 namespace vtkGdcmIO
 {
@@ -23,9 +17,9 @@ namespace ut
 
 class SeriesDBReaderTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBReaderTest );
-    CPPUNIT_TEST( readSeriesDBTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesDBReaderTest );
+CPPUNIT_TEST( readSeriesDBTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
 
@@ -34,13 +28,10 @@ public:
 
     void readSeriesDBTest();
 
-private:
-    ::fwMedData::SeriesDB::sptr m_seriesDB;
-
 };
 
 } // namespace ut
 } // namespace vtkGdcmIO
 
-#endif // __FWVTKGDCMIO_TEST_TU_SERIESDBREADERTEST_HPP__
+#endif // __VTKGDCMIO_UT_SERIESDBREADERTEST_HPP__
 
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp b/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp
index 3a7c99a..da39e82 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/src/ImageSeriesWriterTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -40,11 +40,11 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(objRef, objComp);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
     }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
+    CPPUNIT_ASSERT_MESSAGE("Object Not equal", props->size() == 0 );
 }
 
 //------------------------------------------------------------------------------
@@ -79,7 +79,7 @@ void ImageSeriesWriterTest::writeReadTest()
     CPPUNIT_ASSERT_NO_THROW(writer->write());
 
     // load ImageSeries
-    ::fwMedData::SeriesDB::sptr sdb = ::fwMedData::SeriesDB::New();
+    ::fwMedData::SeriesDB::sptr sdb          = ::fwMedData::SeriesDB::New();
     ::vtkGdcmIO::SeriesDBReader::sptr reader = ::vtkGdcmIO::SeriesDBReader::New();
     reader->setObject(sdb);
     reader->setFolder(PATH);
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBLazyReaderTest.cpp b/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBLazyReaderTest.cpp
index a7fa518..d2f4c7a 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBLazyReaderTest.cpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBLazyReaderTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -11,7 +11,7 @@
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/SeriesDB.hpp>
 
-#include <fwComEd/helper/Image.hpp>
+#include <fwDataTools/helper/Image.hpp>
 
 #include <fwTest/Data.hpp>
 #include <fwTest/DicomReaderTest.hpp>
@@ -49,6 +49,9 @@ void SeriesDBLazyReaderTest::readSeriesDBTest()
 
     const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/ACHGenou";
 
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
     ::vtkGdcmIO::SeriesDBLazyReader::sptr reader = ::vtkGdcmIO::SeriesDBLazyReader::New();
     reader->setObject(seriesDB);
 
@@ -62,15 +65,15 @@ void SeriesDBLazyReaderTest::readSeriesDBTest()
     CPPUNIT_ASSERT( ::fwTest::DicomReaderTest::checkSeriesACHGenou( series ) );
 
 #if (SPYLOG_LEVEL >= 4 ) // Log level info
-        ::fwCore::HiResTimer timer;
-        timer.start();
+    ::fwCore::HiResTimer timer;
+    timer.start();
 #endif
 
-    ::fwComEd::helper::Image locker ( series->getImage() );
+    ::fwDataTools::helper::Image locker ( series->getImage() );
 
     #if (SPYLOG_LEVEL >= 4 )
-        timer.stop();
-        OSLM_INFO( "Time in to read data : " << timer.getElapsedTimeInMilliSec() );
+    timer.stop();
+    OSLM_INFO( "Time in to read data : " << timer.getElapsedTimeInMilliSec() );
 #endif
 
 }
diff --git a/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBReaderTest.cpp b/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBReaderTest.cpp
index 61de579..82e4893 100644
--- a/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBReaderTest.cpp
+++ b/SrcLib/io/vtkGdcmIO/test/tu/src/SeriesDBReaderTest.cpp
@@ -1,9 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "SeriesDBReaderTest.hpp"
+
 #include <fwMedData/ImageSeries.hpp>
 #include <fwMedData/SeriesDB.hpp>
 
@@ -12,8 +14,6 @@
 
 #include <vtkGdcmIO/SeriesDBReader.hpp>
 
-#include "SeriesDBReaderTest.hpp"
-
 CPPUNIT_TEST_SUITE_REGISTRATION( ::vtkGdcmIO::ut::SeriesDBReaderTest );
 
 namespace vtkGdcmIO
@@ -43,6 +43,9 @@ void SeriesDBReaderTest::readSeriesDBTest()
 
     const ::boost::filesystem::path path = ::fwTest::Data::dir() / "fw4spl/Patient/Dicom/ACHGenou";
 
+    CPPUNIT_ASSERT_MESSAGE("The dicom directory '" + path.string() + "' does not exist",
+                           ::boost::filesystem::exists(path));
+
     ::vtkGdcmIO::SeriesDBReader::sptr reader = ::vtkGdcmIO::SeriesDBReader::New();
     reader->setObject(seriesDB);
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/CMakeLists.txt b/SrcLib/patch/fwMDSemanticPatch/CMakeLists.txt
index 102d9a4..15cd4c1 100644
--- a/SrcLib/patch/fwMDSemanticPatch/CMakeLists.txt
+++ b/SrcLib/patch/fwMDSemanticPatch/CMakeLists.txt
@@ -1,6 +1 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwAtoms
-    fwAtomsPatch
-    fwCore
-)
diff --git a/SrcLib/patch/fwMDSemanticPatch/COPYING b/SrcLib/patch/fwMDSemanticPatch/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/patch/fwMDSemanticPatch/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/patch/fwMDSemanticPatch/COPYING.LESSER b/SrcLib/patch/fwMDSemanticPatch/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/patch/fwMDSemanticPatch/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/patch/fwMDSemanticPatch/Properties.cmake b/SrcLib/patch/fwMDSemanticPatch/Properties.cmake
index 336ffe3..4e09dce 100644
--- a/SrcLib/patch/fwMDSemanticPatch/Properties.cmake
+++ b/SrcLib/patch/fwMDSemanticPatch/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwMDSemanticPatch )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwAtoms fwAtomsPatch fwCore fwTools )
+set( DEPENDENCIES fwAtoms fwAtomsPatch fwCore fwTools fwMedData)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/bin/build.options b/SrcLib/patch/fwMDSemanticPatch/bin/build.options
deleted file mode 100644
index c125249..0000000
--- a/SrcLib/patch/fwMDSemanticPatch/bin/build.options
+++ /dev/null
@@ -1,9 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-LIB = [
-    'fwData_0-1',
-    'fwCamp_0-1',
-    'fwAtoms_0-1',
-    'fwAtomsPatch_0-1',
-    'fwAtomConversion_0-1',
-]
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/PatchLoader.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/PatchLoader.hpp
index eb4cb17..398466f 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/PatchLoader.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/PatchLoader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,6 +18,9 @@ class PatchLoader
 public:
     /// Computes VersionsManager's link and version tables.
     FWMDSEMANTICPATCH_API static void loadPatches();
+
+    /// Returns current MedicalData version.
+    FWMDSEMANTICPATCH_API static std::string getCurrentVersion();
 };
 
 } //namespace fwMDSemanticPatch
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.hpp
index f204642..45ef2c4 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWMDSEMANTICPATCH_V1TOV2_MEDICALWORKSPACEPATCHER_HPP__
-#define __FWMDSEMANTICPATCH_V1TOV2_MEDICALWORKSPACEPATCHER_HPP__
+#ifndef __FWMDSEMANTICPATCH_V1_V2_MEDICALWORKSPACEPATCHER_HPP__
+#define __FWMDSEMANTICPATCH_V1_V2_MEDICALWORKSPACEPATCHER_HPP__
 
 #include <string>
 
@@ -43,8 +43,8 @@ class FWMDSEMANTICPATCH_CLASS_API MedicalWorkspacePatcher : public ::fwAtomsPatc
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro(
-            (MedicalWorkspacePatcher)(::fwAtomsPatch::patcher::DefaultPatcher), (()),
-                ::fwAtomsPatch::patcher::factory::New< MedicalWorkspacePatcher >);
+        (MedicalWorkspacePatcher)(::fwAtomsPatch::patcher::DefaultPatcher), (()),
+        ::fwAtomsPatch::patcher::factory::New< MedicalWorkspacePatcher >);
 
     /// Constructor
     FWMDSEMANTICPATCH_API MedicalWorkspacePatcher(::fwAtomsPatch::patcher::IPatcher::Key key);
@@ -59,9 +59,9 @@ public:
      * 'patientDB', 'planningDB' and 'processingDB', and applies patcher 'DefaultPatcher'.
      */
     FWMDSEMANTICPATCH_API virtual ::fwAtoms::Object::sptr transformObject(::fwAtoms::Object::sptr object,
-            const std::string& context,
-            const std::string& currentVersion,
-            const std::string& targetVersion);
+                                                                          const std::string& context,
+                                                                          const std::string& currentVersion,
+                                                                          const std::string& targetVersion);
 
 protected:
 
@@ -74,5 +74,5 @@ protected:
 } // namespace V1
 } // namespace fwMDSemanticPatch
 
-#endif /* __FWMDSEMANTICPATCH_V1TOV2_MEDICALWORKSPACEPATCHER_HPP__ */
+#endif /* __FWMDSEMANTICPATCH_V1_V2_MEDICALWORKSPACEPATCHER_HPP__ */
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Acquisition.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Acquisition.hpp
index 328778b..2963c7f 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Acquisition.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Acquisition.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,7 @@ namespace fwData
 class FWMDSEMANTICPATCH_CLASS_API Acquisition : public ::fwAtomsPatch::ISemanticPatch
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro((Acquisition)(::fwAtomsPatch::ISemanticPatch), (()), new Acquisition) ;
+    fwCoreClassDefinitionsWithFactoryMacro((Acquisition)(::fwAtomsPatch::ISemanticPatch), (()), new Acquisition);
 
     /// Constructor
     FWMDSEMANTICPATCH_API Acquisition();
@@ -38,14 +38,14 @@ public:
 
     /**
      * @brief Applies patch
-     * 
+     *
      * Retrieves 'comment' field stored into acquisition's image and moves it into current object 'description'
      * attribute.
      */
     FWMDSEMANTICPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Composite.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Composite.hpp
index 9ca2888..db4305d 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Composite.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Composite.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,7 @@ class FWMDSEMANTICPATCH_CLASS_API Composite : public ::fwAtomsPatch::ISemanticPa
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (Composite)(::fwAtomsPatch::ISemanticPatch), (()), new Composite) ;
+        (Composite)(::fwAtomsPatch::ISemanticPatch), (()), new Composite);
 
     /// Constructor
     FWMDSEMANTICPATCH_API Composite();
@@ -40,13 +40,13 @@ public:
      * @brief Applies patch
      *
      * If the related composite describes a 'Medical workspace' (i.e has value 'MedicalWorkspace' for 'compositeType'
-     * meta info), then converts the composite to a ::fwMedData::SeriesDB and insert model series built from previous 
+     * meta info), then converts the composite to a ::fwMedData::SeriesDB and insert model series built from previous
      * acquisitions.
      */
     FWMDSEMANTICPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Patient.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Patient.hpp
index 2b6ed13..63deb38 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Patient.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Patient.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ class FWMDSEMANTICPATCH_CLASS_API Patient : public ::fwAtomsPatch::ISemanticPatc
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (Patient)(::fwAtomsPatch::ISemanticPatch), (()), new Patient) ;
+        (Patient)(::fwAtomsPatch::ISemanticPatch), (()), new Patient);
 
     /// Constructor
     FWMDSEMANTICPATCH_API Patient();
@@ -41,9 +41,9 @@ public:
      * Sets the 'patient_id' attribute value to a newly generated UUID.
      */
     FWMDSEMANTICPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Study.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Study.hpp
index a6046f1..17e4b91 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Study.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V1/V2/fwData/Study.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,7 @@ class FWMDSEMANTICPATCH_CLASS_API Study : public ::fwAtomsPatch::ISemanticPatch
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (Study)(::fwAtomsPatch::ISemanticPatch), (()), new Study) ;
+        (Study)(::fwAtomsPatch::ISemanticPatch), (()), new Study);
 
     /// Constructor
     FWMDSEMANTICPATCH_API Study();
@@ -42,9 +42,9 @@ public:
      * Sets the 'instance_uid' attribute value to a newly generated UUID.
      */
     FWMDSEMANTICPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V2/V03AGO/fwData/Image.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V2/V03AGO/fwData/Image.hpp
new file mode 100644
index 0000000..d83194e
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/V2/V03AGO/fwData/Image.hpp
@@ -0,0 +1,57 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWMDSEMANTICPATCH_V2_V03AGO_FWDATA_IMAGE_HPP__
+#define __FWMDSEMANTICPATCH_V2_V03AGO_FWDATA_IMAGE_HPP__
+
+#include <fwAtomsPatch/ISemanticPatch.hpp>
+
+#include "fwMDSemanticPatch/config.hpp"
+
+namespace fwMDSemanticPatch
+{
+namespace V2
+{
+namespace V03AGO
+{
+namespace fwData
+{
+
+/// Patch an image from version 'V2' to 'V03AGO' within 'MedicalData' context.
+class FWMDSEMANTICPATCH_CLASS_API Image : public ::fwAtomsPatch::ISemanticPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (Image)(::fwAtomsPatch::ISemanticPatch), (()), new Image);
+
+    /// Constructor
+    FWMDSEMANTICPATCH_API Image();
+
+    /// Destructor
+    FWMDSEMANTICPATCH_API ~Image();
+
+    /// Copy constructor
+    FWMDSEMANTICPATCH_API Image( const Image &cpy );
+
+    /**
+     * @brief Applies patch.
+     *
+     * Sets the 'nb_components', 'window_center' and 'window_width' attributes to a newly generated UUID.
+     */
+    FWMDSEMANTICPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+} // namespace fwData
+} // namespace V03AGO
+} // namespace V2
+} // namespace fwMDSemanticPatch
+
+#endif /* __FWMDSEMANTICPATCH_V2_V03AGO_FWDATA_IMAGE_HPP__ */
+
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/config.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/config.hpp
deleted file mode 100644
index 1d5d286..0000000
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/config.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWMDSEMANTICPATCH_CONFIG_HPP_
-#define _FWMDSEMANTICPATCH_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWMDSEMANTICPATCH_EXPORTS
-            #define FWMDSEMANTICPATCH_API __declspec(dllexport)
-        #else
-            #define FWMDSEMANTICPATCH_API __declspec(dllimport)
-            #define FWMDSEMANTICPATCH_TEMPLATE_API extern "C++"
-        #endif
-
-        #define FWMDSEMANTICPATCH_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWMDSEMANTICPATCH_EXPORTS
-            #define FWMDSEMANTICPATCH_API __attribute__ ((visibility("default")))
-            #define FWMDSEMANTICPATCH_CLASS_API __attribute__ ((visibility("default")))
-            #define FWMDSEMANTICPATCH_TEMPLATE_API extern "C++"
-        #else
-            #define FWMDSEMANTICPATCH_API __attribute__ ((visibility("hidden")))
-            #define FWMDSEMANTICPATCH_CLASS_API __attribute__ ((visibility("hidden")))
-            #define FWMDSEMANTICPATCH_TEMPLATE_API extern "C++"
-        #endif
-
-    #else
-
-        #define FWMDSEMANTICPATCH_API
-        #define FWMDSEMANTICPATCH_CLASS_API
-        #define FWMDSEMANTICPATCH_TEMPLATE_API extern "C++"
-
-    #endif
-
-#endif //_FWMDSEMANTICPATCH_CONFIG_HPP_
-
diff --git a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/namespace.hpp b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/namespace.hpp
index af3f2e6..cc22e56 100644
--- a/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/namespace.hpp
+++ b/SrcLib/patch/fwMDSemanticPatch/include/fwMDSemanticPatch/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,25 +14,25 @@
 namespace fwMDSemanticPatch
 {
 
-    /**
-     * @brief Contains the semantic patches to transform atoms from version V1.
-     */
-    namespace V1
-    {
-        /**
-         * @brief Contains the semantic patches to transform atoms from version V1 to version V2.
-         */
-        namespace V2
-        {
-            /**
-             * @brief Contains the semantic patches to transform atoms (from fwData objects) from version V1 to version
-             * V2.
-             */
-            namespace fwData
-            {
-            } // namespace fwData
-        } // namespace V2
-    } // namespace V1
+/**
+ * @brief Contains the semantic patches to transform atoms from version V1.
+ */
+namespace V1
+{
+/**
+ * @brief Contains the semantic patches to transform atoms from version V1 to version V2.
+ */
+namespace V2
+{
+/**
+ * @brief Contains the semantic patches to transform atoms (from fwData objects) from version V1 to version
+ * V2.
+ */
+namespace fwData
+{
+}             // namespace fwData
+}         // namespace V2
+}     // namespace V1
 } // namespace fwMDSemanticPatch
 
 #endif /* __FWMDSEMANTICPATCH_NAMESPACE_HPP__ */
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V03AGO.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V03AGO.versions
new file mode 100644
index 0000000..d0d3a6f
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V03AGO.versions
@@ -0,0 +1,53 @@
+{
+    "context": "MedicalData",
+    "version_name": "V03AGO",
+    "versions":
+    {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Camera": "2",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "1",
+        "::fwData::Mesh": "1",
+        "::fwData::Model": "1",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "2",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "1",
+        "::fwData::Vector": "1",
+        "::fwData::Video": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V03ToV04AGO.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V03ToV04AGO.graphlink
new file mode 100644
index 0000000..38337f3
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V03ToV04AGO.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V03AGO",
+    "target_version" : "V04AGO",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Mesh" : "1",
+            "::fwData::Mesh" : "3"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V04AFG.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V04AFG.versions
new file mode 100644
index 0000000..ee3d31d
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V04AFG.versions
@@ -0,0 +1,53 @@
+{
+    "context": "MedicalData",
+    "version_name": "V04AFG",
+    "versions":
+    {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Camera": "2",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "1",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "1",
+        "::fwData::Mesh": "2",
+        "::fwData::Model": "1",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "2",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "1",
+        "::fwData::Vector": "1",
+        "::fwData::Video": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V04AFGToV05AFG.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V04AFGToV05AFG.graphlink
new file mode 100644
index 0000000..abf009e
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V04AFGToV05AFG.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V04AFG",
+    "target_version" : "V05AFG",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Reconstruction" : "2",
+            "::fwData::Reconstruction" : "3"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V04AGO.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V04AGO.versions
new file mode 100644
index 0000000..fe67b15
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V04AGO.versions
@@ -0,0 +1,52 @@
+{
+    "context": "MedicalData",
+    "version_name": "V04AGO",
+    "versions":
+    {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Camera": "2",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "2",
+        "::fwData::Mesh": "3",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "2",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "1",
+        "::fwData::Vector": "1",
+        "::fwData::Video": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V04AGOToV06AGO.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V04AGOToV06AGO.graphlink
new file mode 100644
index 0000000..c416d6f
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V04AGOToV06AGO.graphlink
@@ -0,0 +1,7 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V04AGO",
+    "target_version" : "V06AGO",
+    "patcher" : "DefaultPatcher",
+    "links" : []
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V05AFG.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V05AFG.versions
new file mode 100644
index 0000000..f9641cf
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V05AFG.versions
@@ -0,0 +1,53 @@
+{
+    "context": "MedicalData",
+    "version_name": "V05AFG",
+    "versions":
+    {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Camera": "2",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "1",
+        "::fwData::Mesh": "2",
+        "::fwData::Model": "1",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "3",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "1",
+        "::fwData::Vector": "1",
+        "::fwData::Video": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V05AFGToV06AGO.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V05AFGToV06AGO.graphlink
new file mode 100644
index 0000000..3f356a8
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V05AFGToV06AGO.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V05AFG",
+    "target_version" : "V06AGO",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Mesh" : "2",
+            "::fwData::Mesh" : "3"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V06AGO.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V06AGO.versions
new file mode 100644
index 0000000..81951d9
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V06AGO.versions
@@ -0,0 +1,51 @@
+{
+    "context": "MedicalData",
+    "version_name": "V06AGO",
+    "versions": {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Camera": "2",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "2",
+        "::fwData::Mesh": "3",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "3",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "1",
+        "::fwData::Vector": "1",
+        "::fwData::Video": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V06AGOToV07ALA.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V06AGOToV07ALA.graphlink
new file mode 100644
index 0000000..3341598
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V06AGOToV07ALA.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V06AGO",
+    "target_version" : "V07ALA",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::TransformationMatrix3D" : "1",
+            "::fwData::TransformationMatrix3D" : "2"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V07ALA.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V07ALA.versions
new file mode 100644
index 0000000..9fe470b
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V07ALA.versions
@@ -0,0 +1,51 @@
+{
+    "context": "MedicalData",
+    "version_name": "V07ALA",
+    "versions": {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Camera": "2",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "2",
+        "::fwData::Mesh": "3",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "3",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "2",
+        "::fwData::Vector": "1",
+        "::fwData::Video": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V07ALAToV08ALA.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V07ALAToV08ALA.graphlink
new file mode 100644
index 0000000..48672ac
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V07ALAToV08ALA.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V07ALA",
+    "target_version" : "V08ALA",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Material" : "2",
+            "::fwData::Material" : "3"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V08ALA.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V08ALA.versions
new file mode 100644
index 0000000..9913ff4
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V08ALA.versions
@@ -0,0 +1,49 @@
+{
+    "context": "MedicalData",
+    "version_name": "V08ALA",
+    "versions": {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "3",
+        "::fwData::Mesh": "3",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "3",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "2",
+        "::fwData::Vector": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V08ALAToV09ALA.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V08ALAToV09ALA.graphlink
new file mode 100644
index 0000000..d0ca880
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V08ALAToV09ALA.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V08ALA",
+    "target_version" : "V09ALA",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Material" : "3",
+            "::fwData::Material" : "4"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions b/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions
new file mode 100644
index 0000000..86002d3
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V09ALA.versions
@@ -0,0 +1,50 @@
+{
+    "context": "MedicalData",
+    "version_name": "V09ALA",
+    "versions": {
+        "::fwData::Array": "1",
+        "::fwData::Boolean": "1",
+        "::fwData::Color": "1",
+        "::fwData::Composite": "1",
+        "::fwData::Edge": "1",
+        "::fwData::Float": "1",
+        "::fwData::Graph": "1",
+        "::fwData::Histogram": "1",
+        "::fwData::Image": "2",
+        "::fwData::Integer": "1",
+        "::fwData::Line": "1",
+        "::fwData::List": "1",
+        "::fwData::Material": "4",
+        "::fwData::Mesh": "3",
+        "::fwData::Node": "1",
+        "::fwData::Plane": "1",
+        "::fwData::PlaneList": "1",
+        "::fwData::Point": "1",
+        "::fwData::PointList": "1",
+        "::fwData::Port": "1",
+        "::fwData::ProcessObject": "1",
+        "::fwData::ROITraits": "1",
+        "::fwData::Reconstruction": "3",
+        "::fwData::ReconstructionTraits": "1",
+        "::fwData::Resection": "1",
+        "::fwData::ResectionDB": "1",
+        "::fwData::String": "1",
+        "::fwData::StructureTraits": "1",
+        "::fwData::StructureTraitsDictionary": "1",
+        "::fwData::Tag": "1",
+        "::fwData::TransferFunction": "1",
+        "::fwData::TransformationMatrix3D": "2",
+        "::fwData::Vector": "1",
+        "::fwData::location::Folder": "1",
+        "::fwData::location::SingleFile": "1",
+        "::fwMedData::ActivitySeries": "1",
+        "::fwMedData::DicomSeries": "1",
+        "::fwMedData::Equipment": "1",
+        "::fwMedData::ImageSeries": "1",
+        "::fwMedData::ModelSeries": "1",
+        "::fwMedData::Patient": "1",
+        "::fwMedData::Series": "1",
+        "::fwMedData::SeriesDB": "1",
+        "::fwMedData::Study": "1"
+    }
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V09ALAToV08ALA.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V09ALAToV08ALA.graphlink
new file mode 100644
index 0000000..cbd773b
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V09ALAToV08ALA.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V09ALA",
+    "target_version" : "V08ALA",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Material" : "4",
+            "::fwData::Material" : "3"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V2ToV03AGO.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V2ToV03AGO.graphlink
new file mode 100644
index 0000000..585da80
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V2ToV03AGO.graphlink
@@ -0,0 +1,7 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V2",
+    "target_version" : "V03AGO",
+    "patcher" : "DefaultPatcher",
+    "links" : []
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/rc/V2ToV04AFG.graphlink b/SrcLib/patch/fwMDSemanticPatch/rc/V2ToV04AFG.graphlink
new file mode 100644
index 0000000..a0bfdb0
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/rc/V2ToV04AFG.graphlink
@@ -0,0 +1,12 @@
+{
+    "context" : "MedicalData",
+    "origin_version" : "V2",
+    "target_version" : "V04AFG",
+    "patcher" : "DefaultPatcher",
+    "links" : [
+        {
+            "::fwData::Mesh" : "1",
+            "::fwData::Mesh" : "2"
+        }
+    ]
+}
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/PatchLoader.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/PatchLoader.cpp
index 10fbfca..cce2fc8 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/PatchLoader.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/PatchLoader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,13 +14,15 @@ namespace fwMDSemanticPatch
 void PatchLoader::loadPatches()
 {
     SPTR(::fwAtomsPatch::VersionsManager) versionManager = ::fwAtomsPatch::VersionsManager::getDefault();
-    #ifdef SPECIALINSTALL
-	versionManager->buildVersionTable(SHAREPATH "fwMDSemanticPatch_" FWMDSEMANTICPATCH_VER "/");
-	versionManager->buildLinkTable(SHAREPATH "fwMDSemanticPatch_" FWMDSEMANTICPATCH_VER "/");
-    #else
-	versionManager->buildVersionTable("./share/fwMDSemanticPatch_" FWMDSEMANTICPATCH_VER "/");
-	versionManager->buildLinkTable("./share/fwMDSemanticPatch_" FWMDSEMANTICPATCH_VER "/");
-    #endif
+    versionManager->buildVersionTable("./share/fwMDSemanticPatch_" FWMDSEMANTICPATCH_VER "/");
+    versionManager->buildLinkTable("./share/fwMDSemanticPatch_" FWMDSEMANTICPATCH_VER "/");
+}
+
+//------------------------------------------------------------------------------
+
+std::string PatchLoader::getCurrentVersion()
+{
+    return "V09ALA";
 }
 
 } //namespace fwMDSemanticPatch
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.cpp
index c5ea1fa..72d6314 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.cpp
@@ -1,10 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.hpp"
 
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
@@ -16,8 +16,6 @@
 #include <fwAtomsPatch/patcher/registry/macros.hpp>
 #include <fwAtomsPatch/helper/functions.hpp>
 
-#include "fwMDSemanticPatch/V1/V2/MedicalWorkspacePatcher.hpp"
-
 namespace fwMDSemanticPatch
 {
 namespace V1
@@ -27,8 +25,8 @@ namespace V2
 
 patcherRegisterMacro(::fwMDSemanticPatch::V1::V2::MedicalWorkspacePatcher, "MedicalWorkspacePatcher");
 
-MedicalWorkspacePatcher::MedicalWorkspacePatcher(::fwAtomsPatch::patcher::IPatcher::Key key):
-        ::fwAtomsPatch::patcher::DefaultPatcher(key)
+MedicalWorkspacePatcher::MedicalWorkspacePatcher(::fwAtomsPatch::patcher::IPatcher::Key key) :
+    ::fwAtomsPatch::patcher::DefaultPatcher(key)
 {
 }
 
@@ -41,9 +39,9 @@ MedicalWorkspacePatcher::~MedicalWorkspacePatcher()
 // ----------------------------------------------------------------------------
 
 ::fwAtoms::Object::sptr MedicalWorkspacePatcher::transformObject(::fwAtoms::Object::sptr object,
-            const std::string &context,
-            const std::string &currentVersion,
-            const std::string &targetVersion)
+                                                                 const std::string &context,
+                                                                 const std::string &currentVersion,
+                                                                 const std::string &targetVersion)
 {
     this->addCompositeTypes(object);
     return ::fwAtomsPatch::patcher::DefaultPatcher::transformObject(object,context,currentVersion, targetVersion);
@@ -62,7 +60,7 @@ void MedicalWorkspacePatcher::addCompositeTypes(::fwAtoms::Object::sptr object)
         }
     }
 
-    BOOST_FOREACH( ::fwAtoms::Object::AttributesType::value_type elem, object->getAttributes() )
+    for( ::fwAtoms::Object::AttributesType::value_type elem :  object->getAttributes() )
     {
         ::fwAtoms::Object::sptr att = ::fwAtoms::Object::dynamicCast(elem.second);
         if(att)
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Acquisition.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Acquisition.cpp
index c55a783..bd87ebd 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Acquisition.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Acquisition.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,38 +26,40 @@ namespace fwData
 Acquisition::Acquisition() : ::fwAtomsPatch::ISemanticPatch()
 {
     m_originClassname = "::fwData::Acquisition";
-    m_originVersion = "1";
+    m_originVersion   = "1";
     this->addContext("MedicalData", "V1", "V2");
 }
 
 // ----------------------------------------------------------------------------
 
 Acquisition::~Acquisition()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 Acquisition::Acquisition( const Acquisition &cpy ) : ::fwAtomsPatch::ISemanticPatch(cpy)
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 void Acquisition::apply(
-        const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     ISemanticPatch::apply(previous, current, newVersions);
     ::fwAtomsPatch::helper::cleanFields( current );
 
     ::fwAtoms::Object::sptr image = current->getAttribute< ::fwAtoms::Object >("image");
-    ::fwAtoms::Map::sptr fields = image->getAttribute< ::fwAtoms::Map >("fields");
+    ::fwAtoms::Map::sptr fields   = image->getAttribute< ::fwAtoms::Map >("fields");
 
     ::fwAtoms::Map::ConstIteratorType it = fields->find("m_commentId");
     ::fwAtomsPatch::helper::Object helper(current);
     if ( it != fields->end() )
     {
-        ::fwAtoms::Object::sptr value =  ::fwAtoms::Object::dynamicCast( it->second );
+        ::fwAtoms::Object::sptr value = ::fwAtoms::Object::dynamicCast( it->second );
         helper.replaceAttribute("description", ::fwAtoms::String::New(value->getAttribute("value")->getString()));
     }
 
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Composite.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Composite.cpp
index 3ca1829..eb7e974 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Composite.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Composite.cpp
@@ -1,34 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <string>
-#include <vector>
-
-#include <boost/foreach.hpp>
-#include <boost/algorithm/string.hpp>
-
-#include <fwTools/UUID.hpp>
+#include "fwMDSemanticPatch/V1/V2/fwData/Composite.hpp"
 
+#include <fwAtoms/Blob.hpp>
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/Map.hpp>
+#include <fwAtoms/Numeric.hpp>
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
-#include <fwAtoms/Numeric.hpp>
-#include <fwAtoms/String.hpp>
-#include <fwAtoms/Boolean.hpp>
-#include <fwAtoms/Blob.hpp>
 #include <fwAtoms/Sequence.hpp>
-#include <fwAtoms/Map.hpp>
-
-#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+#include <fwAtoms/String.hpp>
 #include <fwAtomsPatch/helper/functions.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
 
 #include <fwMedData/ActivitySeries.hpp>
 
 #include <fwMemory/BufferObject.hpp>
 
-#include "fwMDSemanticPatch/V1/V2/fwData/Composite.hpp"
+#include <fwTools/UUID.hpp>
+
+#include <boost/algorithm/string.hpp>
+#include <string>
+#include <vector>
 
 namespace fwMDSemanticPatch
 {
@@ -44,7 +41,7 @@ typedef std::map< ::fwAtoms::Object::sptr, ::fwAtoms::Object::sptr > Image2Model
 Composite::Composite() : ::fwAtomsPatch::ISemanticPatch()
 {
     m_originClassname = "::fwData::Composite";
-    m_originVersion = "1";
+    m_originVersion   = "1";
     this->addContext("MedicalData", "V1", "V2");
 }
 
@@ -63,116 +60,222 @@ Composite::Composite( const Composite &cpy ) : ::fwAtomsPatch::ISemanticPatch(cp
 // ----------------------------------------------------------------------------
 
 void processPlanning(
-        const ::fwAtoms::Map::sptr& oldCompositeMap,
-        const ::fwAtoms::Sequence::sptr& series,
-        const Image2ModelType& image2Model,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+    const ::fwAtoms::Map::sptr& oldCompositeMap,
+    const ::fwAtoms::Sequence::sptr& series,
+    const Image2ModelType& image2Model,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
-        ::fwAtoms::Object::sptr oldPlanningDB = ::fwAtoms::Object::dynamicCast( (*oldCompositeMap)["planningDB"] );
-        ::fwAtoms::Map::sptr oldPlannings = oldPlanningDB->getAttribute< ::fwAtoms::Map >("values");
+    ::fwAtoms::Object::sptr oldPlanningDB = ::fwAtoms::Object::dynamicCast( (*oldCompositeMap)["planningDB"] );
+    ::fwAtoms::Map::sptr oldPlannings     = oldPlanningDB->getAttribute< ::fwAtoms::Map >("values");
+
+    for( ::fwAtoms::Map::value_type oldPlanningAtom :  oldPlannings->getValue() )
+    {
+        ::fwAtoms::Map::sptr oldPlanning
+            = ::fwAtoms::Object::dynamicCast(oldPlanningAtom.second)->getAttribute< ::fwAtoms::Map >("values");
+
+        SLM_ASSERT("Didn't find 'acquisition' in planning",
+                   oldPlanning->getValue().find("acquisition") != oldPlanning->getValue().end());
+        ::fwAtoms::Base::sptr acquisition = oldPlanning->getValue().find("acquisition")->second;
+        ::fwAtoms::Object::sptr acqObj    = ::fwAtoms::Object::dynamicCast(acquisition);
+        SLM_ASSERT("Failed to cast acquisition to object", acqObj);
+
+        Image2ModelType::const_iterator it = image2Model.find(newVersions[acqObj]);
+        SLM_ASSERT("Didn't find image series related to acquisition", it != image2Model.end());
+        ::fwAtoms::Object::sptr imageSeries = it->first;
+
+        ::fwAtoms::Object::sptr resectionDB
+            = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("resectionDB")->second);
+
+        // Retrieves expert who performed the resection
+        ::fwAtoms::Object::sptr expert
+            = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("expert")->second);
+
+        ::fwAtoms::Sequence::sptr experts = ::fwAtoms::Sequence::New();
+        experts->push_back( ::fwAtoms::String::dynamicCast(expert->getAttribute< ::fwAtoms::String >("value")));
+
+        // Retrieves resection information
+        ::fwAtoms::Object::sptr information
+            = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("information")->second);
+        ::fwAtoms::String::sptr informationStr
+            = ::fwAtoms::String::dynamicCast(information->getAttribute< ::fwAtoms::String >("value"));
+
+        // Retrieves resection date and time
+        ::fwAtoms::Object::sptr dateTimeObj
+            = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("startDateTime")->second);
+        ::fwAtoms::String::sptr dateTimeStr
+            = ::fwAtoms::String::dynamicCast(dateTimeObj->getAttribute< ::fwAtoms::String >("value"));
+
+        ::fwAtoms::String::sptr time = ::fwAtoms::String::New("");
+        ::fwAtoms::String::sptr date = ::fwAtoms::String::New("");
+
+        std::string dateTimeStd = dateTimeStr->getString();
+        std::vector< std::string > strs;
+        ::boost::split(strs, dateTimeStd, ::boost::is_any_of(" "));
 
-        BOOST_FOREACH( ::fwAtoms::Map::value_type oldPlanningAtom, oldPlannings->getValue() )
+        if(strs.size() >= 2)
         {
-            ::fwAtoms::Map::sptr oldPlanning
-                = ::fwAtoms::Object::dynamicCast(oldPlanningAtom.second)->getAttribute< ::fwAtoms::Map >("values");
+            date->setValue(strs[0]);
+            time->setValue(strs[1]);
+        }
 
-            SLM_ASSERT("Didn't find 'acquisition' in planning",
-                    oldPlanning->getValue().find("acquisition") != oldPlanning->getValue().end());
-            ::fwAtoms::Base::sptr acquisition = oldPlanning->getValue().find("acquisition")->second;
-            ::fwAtoms::Object::sptr acqObj = ::fwAtoms::Object::dynamicCast(acquisition);
-            SLM_ASSERT("Failed to cast acquisition to object", acqObj);
+        ::fwAtomsPatch::StructuralCreatorDB::sptr creators = ::fwAtomsPatch::StructuralCreatorDB::getDefault();
+        ::fwAtoms::Object::sptr newActivitySeries          = creators->create( "::fwMedData::ActivitySeries", "1");
+
+        ::fwAtoms::Object::sptr imgComposite = ::fwAtoms::Object::New();
+        ::fwAtomsPatch::helper::setClassname(imgComposite, "::fwData::Composite");
+        ::fwAtomsPatch::helper::setVersion(imgComposite, "1");
+        ::fwAtomsPatch::helper::generateID(imgComposite);
+        ::fwAtomsPatch::helper::cleanFields(imgComposite);
+
+        ::fwAtomsPatch::helper::Object imgCompositeHelper(imgComposite);
+        ::fwAtoms::Map::sptr compositeMap = ::fwAtoms::Map::New();
+        compositeMap->insert("OptionalInputImageKey", imageSeries->getAttribute< ::fwAtoms::Object >("image"));
+        imgCompositeHelper.addAttribute("values", compositeMap);
+
+        ::fwAtoms::Map::sptr activityDataMap = ::fwAtoms::Map::New();
+        activityDataMap->insert("resectionDB", resectionDB);
+        activityDataMap->insert("modelSeries", it->second);
+        activityDataMap->insert("imageSeries", imgComposite);
+
+        ::fwAtoms::Object::sptr mapObj = ::fwAtoms::Object::New();
+        ::fwAtomsPatch::helper::setClassname(mapObj, "::fwData::Composite");
+        ::fwAtomsPatch::helper::setVersion(mapObj, "1");
+        ::fwAtomsPatch::helper::generateID(mapObj);
+        ::fwAtomsPatch::helper::cleanFields(mapObj);
+
+        ::fwAtomsPatch::helper::Object mapObjHelper(mapObj);
+        mapObjHelper.addAttribute("values", activityDataMap);
+
+        ::fwAtomsPatch::helper::Object helperActivity(newActivitySeries);
+        helperActivity.replaceAttribute("activity_config_id", ::fwAtoms::String::New("Resection"));
+        helperActivity.replaceAttribute("data", mapObj);
+
+        helperActivity.replaceAttribute("modality", ::fwAtoms::String::New("OT") );
+        helperActivity.replaceAttribute("instance_uid", ::fwAtoms::String::New(::fwTools::UUID::generateUUID()));
+        helperActivity.replaceAttribute("date", date);
+        helperActivity.replaceAttribute("time", time);
+        helperActivity.replaceAttribute("performing_physicians_name", experts);
+        helperActivity.replaceAttribute("description", informationStr);
+        helperActivity.replaceAttribute("patient", imageSeries->getAttribute< ::fwAtoms::Object >("patient"));
+        helperActivity.replaceAttribute("study", imageSeries->getAttribute< ::fwAtoms::Object >("study"));
+        helperActivity.replaceAttribute("equipment", imageSeries->getAttribute< ::fwAtoms::Object >("equipment"));
+
+        series->push_back(newActivitySeries);
+    }
+}
 
-            Image2ModelType::const_iterator it = image2Model.find(newVersions[acqObj]);
-            SLM_ASSERT("Didn't find image series related to acquisition", it != image2Model.end());
-            ::fwAtoms::Object::sptr imageSeries = it->first;
+// ----------------------------------------------------------------------------
+
+// Convert ProcessingDB Composite into ActivitySeries
+void processProcessing(
+    const ::fwAtoms::Map::sptr& oldCompositeMap,
+    const ::fwAtoms::Sequence::sptr& series,
+    const Image2ModelType& image2Model,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    ::fwAtoms::Object::sptr oldProcessingDB = ::fwAtoms::Object::dynamicCast( (*oldCompositeMap)["processingDB"] );
 
-            ::fwAtoms::Object::sptr resectionDB
-                = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("resectionDB")->second);
+    ::fwAtoms::Map::sptr oldProcessings = oldProcessingDB->getAttribute< ::fwAtoms::Map >("values");
 
-            // Retrieves expert who performed the resection
-            ::fwAtoms::Object::sptr expert
-                = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("expert")->second);
+    for( ::fwAtoms::Map::value_type oldProcessingAtom :  oldProcessings->getValue() )
+    {
+        ::fwAtoms::Map::sptr oldProcessing
+            = ::fwAtoms::Object::dynamicCast(oldProcessingAtom.second)->getAttribute< ::fwAtoms::Map >("values");
 
-            ::fwAtoms::Sequence::sptr experts = ::fwAtoms::Sequence::New();
-            experts->push_back( ::fwAtoms::String::dynamicCast(expert->getAttribute< ::fwAtoms::String >("value")));
 
-            // Retrieves resection information
-            ::fwAtoms::Object::sptr information
-                = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("information")->second);
-            ::fwAtoms::String::sptr informationStr
-                = ::fwAtoms::String::dynamicCast(information->getAttribute< ::fwAtoms::String >("value"));
+        // Retrieves expert who performed the resection
+        ::fwAtoms::Object::sptr expert
+            = ::fwAtoms::Object::dynamicCast(oldProcessing->getValue().find("expert")->second);
 
-            // Retrieves resection date and time
-            ::fwAtoms::Object::sptr dateTimeObj
-                = ::fwAtoms::Object::dynamicCast(oldPlanning->getValue().find("startDateTime")->second);
-            ::fwAtoms::String::sptr dateTimeStr
-                = ::fwAtoms::String::dynamicCast(dateTimeObj->getAttribute< ::fwAtoms::String >("value"));
+        ::fwAtoms::Sequence::sptr experts = ::fwAtoms::Sequence::New();
+        experts->push_back( ::fwAtoms::String::dynamicCast(expert->getAttribute< ::fwAtoms::String >("value")));
 
-            ::fwAtoms::String::sptr time = ::fwAtoms::String::New("");
-            ::fwAtoms::String::sptr date = ::fwAtoms::String::New("");
+        // Retrieves resection information
+        ::fwAtoms::Object::sptr information
+            = ::fwAtoms::Object::dynamicCast(oldProcessing->getValue().find("information")->second);
+        ::fwAtoms::String::sptr informationStr
+            = ::fwAtoms::String::dynamicCast(information->getAttribute< ::fwAtoms::String >("value"));
 
-            std::string dateTimeStd = dateTimeStr->getString();
-            std::vector< std::string > strs;
-            ::boost::split(strs, dateTimeStd, ::boost::is_any_of(" "));
+        // Retrieves resection date and time
+        ::fwAtoms::Object::sptr dateTimeObj
+            = ::fwAtoms::Object::dynamicCast(oldProcessing->getValue().find("startDateTime")->second);
+        ::fwAtoms::String::sptr dateTimeStr
+            = ::fwAtoms::String::dynamicCast(dateTimeObj->getAttribute< ::fwAtoms::String >("value"));
 
-            if(strs.size() >= 2)
-            {
-                date->setValue(strs[0]);
-                time->setValue(strs[1]);
-            }
+        ::fwAtoms::String::sptr time = ::fwAtoms::String::New("");
+        ::fwAtoms::String::sptr date = ::fwAtoms::String::New("");
+
+        std::string dateTimeStd = dateTimeStr->getString();
+        std::vector< std::string > strs;
+        ::boost::split(strs, dateTimeStd, ::boost::is_any_of(" "));
+
+        if(strs.size() >= 2)
+        {
+            date->setValue(strs[0]);
+            time->setValue(strs[1]);
+        }
+
+        ::fwAtomsPatch::StructuralCreatorDB::sptr creators = ::fwAtomsPatch::StructuralCreatorDB::getDefault();
+        ::fwAtoms::Object::sptr newActivitySeries          = creators->create( "::fwMedData::ActivitySeries", "1");
+
+        ::fwAtoms::Map::sptr activityDataMap = ::fwAtoms::Map::New();
+        activityDataMap->insert("processing", oldProcessingAtom.second);
+
+        ::fwAtoms::Object::sptr mapObj = ::fwAtoms::Object::New();
+        ::fwAtomsPatch::helper::setClassname(mapObj, "::fwData::Composite");
+        ::fwAtomsPatch::helper::setVersion(mapObj, "1");
+        ::fwAtomsPatch::helper::generateID(mapObj);
+        ::fwAtomsPatch::helper::cleanFields(mapObj);
+
+        ::fwAtomsPatch::helper::Object mapObjHelper(mapObj);
+        mapObjHelper.addAttribute("values", activityDataMap);
+
+        ::fwAtomsPatch::helper::Object helperActivity(newActivitySeries);
+        helperActivity.replaceAttribute("activity_config_id", ::fwAtoms::String::New("Processing"));
+        helperActivity.replaceAttribute("data", mapObj);
+
+        helperActivity.replaceAttribute("modality", ::fwAtoms::String::New("OT") );
+        helperActivity.replaceAttribute("instance_uid", ::fwAtoms::String::New(::fwTools::UUID::generateUUID()));
+        helperActivity.replaceAttribute("date", date);
+        helperActivity.replaceAttribute("time", time);
+        helperActivity.replaceAttribute("performing_physicians_name", experts);
+        helperActivity.replaceAttribute("description", informationStr);
+
+        // Check if the processing is associted to an acquisition
+        ::fwAtoms::Base::sptr acquisitionSelection = oldProcessing->getValue().find("acquisitionSelection")->second;
+        ::fwAtoms::Object::sptr acqSelectionObj    = ::fwAtoms::Object::dynamicCast(acquisitionSelection);
+        SLM_ASSERT("Failed to cast acquisition composite to object", acqSelectionObj);
+
+        ::fwAtoms::Map::sptr acqSelectionMap = acqSelectionObj->getAttribute< ::fwAtoms::Map >("values");
+
+        ::fwAtoms::Map::const_iterator iter = acqSelectionMap->getValue().find("selectedAcquisition");
+        if (iter != acqSelectionMap->getValue().end() )
+        {
+            // get associated image
+            ::fwAtoms::Base::sptr acquisition = iter->second;
+            ::fwAtoms::Object::sptr acqObj    = ::fwAtoms::Object::dynamicCast(acquisition);
+            SLM_ASSERT("Failed to cast acquisition to object", acqObj);
+
+            Image2ModelType::const_iterator it = image2Model.find(newVersions[acqObj]);
+            SLM_ASSERT("Didn't find image series related to acquisition", it != image2Model.end());
+            ::fwAtoms::Object::sptr imageSeries = it->first;
 
-            ::fwAtomsPatch::StructuralCreatorDB::sptr creators = ::fwAtomsPatch::StructuralCreatorDB::getDefault();
-            ::fwAtoms::Object::sptr newActivitySeries = creators->create( "::fwMedData::ActivitySeries", "1");
-
-            ::fwAtoms::Object::sptr imgComposite = ::fwAtoms::Object::New();
-            ::fwAtomsPatch::helper::setClassname(imgComposite, "::fwData::Composite");
-            ::fwAtomsPatch::helper::setVersion(imgComposite, "1");
-            ::fwAtomsPatch::helper::generateID(imgComposite);
-            ::fwAtomsPatch::helper::cleanFields(imgComposite);
-
-            ::fwAtomsPatch::helper::Object imgCompositeHelper(imgComposite);
-            ::fwAtoms::Map::sptr compositeMap = ::fwAtoms::Map::New();
-            compositeMap->insert("OptionalInputImageKey", imageSeries->getAttribute< ::fwAtoms::Object >("image"));
-            imgCompositeHelper.addAttribute("values", compositeMap);
-
-            ::fwAtoms::Map::sptr activityDataMap = ::fwAtoms::Map::New();
-            activityDataMap->insert("resectionDB", resectionDB);
-            activityDataMap->insert("modelSeries", it->second);
-            activityDataMap->insert("imageSeries", imgComposite);
-
-            ::fwAtoms::Object::sptr mapObj = ::fwAtoms::Object::New();
-            ::fwAtomsPatch::helper::setClassname(mapObj, "::fwData::Composite");
-            ::fwAtomsPatch::helper::setVersion(mapObj, "1");
-            ::fwAtomsPatch::helper::generateID(mapObj);
-            ::fwAtomsPatch::helper::cleanFields(mapObj);
-
-            ::fwAtomsPatch::helper::Object mapObjHelper(mapObj);
-            mapObjHelper.addAttribute("values", activityDataMap);
-
-            ::fwAtomsPatch::helper::Object helperActivity(newActivitySeries);
-            helperActivity.replaceAttribute("activity_config_id", ::fwAtoms::String::New("Resection"));
-            helperActivity.replaceAttribute("data", mapObj);
-
-            helperActivity.replaceAttribute("modality", ::fwAtoms::String::New("OT") );
-            helperActivity.replaceAttribute("instance_uid", ::fwAtoms::String::New(::fwTools::UUID::generateUUID()));
-            helperActivity.replaceAttribute("date", date);
-            helperActivity.replaceAttribute("time", time);
-            helperActivity.replaceAttribute("performing_physicians_name", experts);
-            helperActivity.replaceAttribute("description" , informationStr);
             helperActivity.replaceAttribute("patient", imageSeries->getAttribute< ::fwAtoms::Object >("patient"));
             helperActivity.replaceAttribute("study", imageSeries->getAttribute< ::fwAtoms::Object >("study"));
             helperActivity.replaceAttribute("equipment", imageSeries->getAttribute< ::fwAtoms::Object >("equipment"));
-
-            series->push_back(newActivitySeries);
         }
+
+        series->push_back(newActivitySeries);
+    }
+
 }
 
 // ----------------------------------------------------------------------------
 
 void Composite::apply(
-        const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     Image2ModelType image2Model;
 
@@ -197,27 +300,27 @@ void Composite::apply(
         // Add ImageSeries and create ModelSeries if they are necessary
         ::fwAtoms::Map::sptr oldCompositeMap = previous->getAttribute< ::fwAtoms::Map >("values");
         ::fwAtoms::Object::sptr oldPatientDB =
-                ::fwAtoms::Object::dynamicCast( (*oldCompositeMap)["patientDB"] );
+            ::fwAtoms::Object::dynamicCast( (*oldCompositeMap)["patientDB"] );
         ::fwAtoms::Sequence::sptr oldPatients = oldPatientDB->getAttribute< ::fwAtoms::Sequence >("patients");
 
         ::fwAtomsPatch::StructuralCreatorDB::sptr creators = ::fwAtomsPatch::StructuralCreatorDB::getDefault();
 
-        BOOST_FOREACH( ::fwAtoms::Base::sptr oldPatientAtom, oldPatients->getValue() )
+        for( ::fwAtoms::Base::sptr oldPatientAtom :  oldPatients->getValue() )
         {
             ::fwAtoms::Object::sptr oldPatient = ::fwAtoms::Object::dynamicCast( oldPatientAtom );
             ::fwAtoms::Object::sptr newPatient = newVersions[oldPatient];
 
             ::fwAtoms::Sequence::sptr oldStudies = oldPatient->getAttribute< ::fwAtoms::Sequence >("studies");
 
-            BOOST_FOREACH( ::fwAtoms::Base::sptr oldStudyAtom, oldStudies->getValue() )
+            for( ::fwAtoms::Base::sptr oldStudyAtom :  oldStudies->getValue() )
             {
                 ::fwAtoms::Object::sptr oldStudy = ::fwAtoms::Object::dynamicCast( oldStudyAtom );
                 ::fwAtoms::Object::sptr newStudy = newVersions[oldStudy];
 
                 ::fwAtoms::Sequence::sptr oldAcquisitions =
-                        oldStudy->getAttribute< ::fwAtoms::Sequence >("acquisitions");
+                    oldStudy->getAttribute< ::fwAtoms::Sequence >("acquisitions");
 
-                BOOST_FOREACH( ::fwAtoms::Base::sptr oldAcqAtom, oldAcquisitions->getValue() )
+                for( ::fwAtoms::Base::sptr oldAcqAtom :  oldAcquisitions->getValue() )
                 {
                     ::fwAtoms::Object::sptr oldAcq = ::fwAtoms::Object::dynamicCast( oldAcqAtom );
 
@@ -235,7 +338,8 @@ void Composite::apply(
                     imgSeriesHelper.replaceAttribute("modality", oldStudy->getAttribute("modality")->clone() );
 
                     ::fwAtoms::String::sptr institution;
-                    institution = ::fwAtoms::String::dynamicCast( oldStudy->getAttribute("hospital")->clone() );
+                    institution =
+                        ::fwAtoms::String::dynamicCast( oldStudy->getAttribute("hospital")->clone() );
                     ::fwAtoms::Object::sptr equipment = newImgSeries->getAttribute< ::fwAtoms::Object >("equipment");
                     ::fwAtomsPatch::helper::Object equipmentHelper(equipment);
                     equipmentHelper.replaceAttribute("institution_name", institution);
@@ -260,13 +364,13 @@ void Composite::apply(
 
                     // finalize and push newModelSeries
                     ::fwAtoms::Sequence::sptr oldReconstructions =
-                            oldAcq->getAttribute< ::fwAtoms::Sequence >("reconstructions");
+                        oldAcq->getAttribute< ::fwAtoms::Sequence >("reconstructions");
 
                     if ( oldReconstructions->size() > 0 )
                     {
                         // Create new model series
                         ::fwAtoms::Object::sptr newModelSeries =
-                                creators->create( "::fwMedData::ModelSeries", "1");
+                            creators->create( "::fwMedData::ModelSeries", "1");
 
                         ::fwAtomsPatch::helper::Object msHelper (newModelSeries);
                         ::fwAtoms::Object::sptr msPatient = ::fwAtoms::Object::dynamicCast(clonedPatient->clone());
@@ -282,17 +386,17 @@ void Composite::apply(
                         msHelper.replaceAttribute("equipment", msEquipment );
 
                         msHelper.replaceAttribute("modality", ::fwAtoms::String::New("OT") );
-                        msHelper.replaceAttribute("instance_uid" ,
-                                ::fwAtoms::String::New(::fwTools::UUID::generateUUID()) );
-                        msHelper.replaceAttribute("date" , newImgSeries->getAttribute("date")->clone() );
+                        msHelper.replaceAttribute("instance_uid",
+                                                  ::fwAtoms::String::New(::fwTools::UUID::generateUUID()) );
+                        msHelper.replaceAttribute("date", newImgSeries->getAttribute("date")->clone() );
                         msHelper.replaceAttribute("time", newImgSeries->getAttribute("time")->clone() );
-                        msHelper.replaceAttribute("performing_physicians_name" ,
-                                newImgSeries->getAttribute("performing_physicians_name")->clone() );
-                        msHelper.replaceAttribute("description" , newImgSeries->getAttribute("description")->clone() );
+                        msHelper.replaceAttribute("performing_physicians_name",
+                                                  newImgSeries->getAttribute("performing_physicians_name")->clone() );
+                        msHelper.replaceAttribute("description", newImgSeries->getAttribute("description")->clone() );
 
                         ::fwAtoms::Sequence::sptr newReconstructions =
-                                newModelSeries->getAttribute< ::fwAtoms::Sequence >("reconstruction_db");
-                        BOOST_FOREACH( ::fwAtoms::Base::sptr oldRecAtom, oldReconstructions->getValue() )
+                            newModelSeries->getAttribute< ::fwAtoms::Sequence >("reconstruction_db");
+                        for( ::fwAtoms::Base::sptr oldRecAtom :  oldReconstructions->getValue() )
                         {
                             ::fwAtoms::Object::sptr oldRec = ::fwAtoms::Object::dynamicCast( oldRecAtom );
                             newReconstructions->push_back(newVersions[oldRec]);
@@ -306,6 +410,7 @@ void Composite::apply(
         }
 
         processPlanning(oldCompositeMap, series, image2Model, newVersions);
+        processProcessing(oldCompositeMap, series, image2Model, newVersions);
 
     } // End "MedicalWorkspace"
 }
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Patient.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Patient.cpp
index 15abda9..22a028b 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Patient.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Patient.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -27,26 +27,28 @@ namespace fwData
 Patient::Patient() : ::fwAtomsPatch::ISemanticPatch()
 {
     m_originClassname = "::fwData::Patient";
-    m_originVersion = "1";
+    m_originVersion   = "1";
     this->addContext("MedicalData", "V1", "V2");
 }
 
 // ----------------------------------------------------------------------------
 
 Patient::~Patient()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 Patient::Patient( const Patient &cpy ) : ::fwAtomsPatch::ISemanticPatch(cpy)
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 void Patient::apply(
-        const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     ISemanticPatch::apply(previous, current, newVersions);
     ::fwAtomsPatch::helper::cleanFields( current );
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Study.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Study.cpp
index 174ccb1..79654fc 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Study.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/Study.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,26 +26,28 @@ namespace fwData
 Study::Study() : ::fwAtomsPatch::ISemanticPatch()
 {
     m_originClassname = "::fwData::Study";
-    m_originVersion = "1";
+    m_originVersion   = "1";
     this->addContext("MedicalData", "V1", "V2");
 }
 
 // ----------------------------------------------------------------------------
 
 Study::~Study()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 Study::Study( const Study &cpy ) : ::fwAtomsPatch::ISemanticPatch(cpy)
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 void Study::apply(
-        const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     ISemanticPatch::apply(previous, current, newVersions);
     ::fwAtomsPatch::helper::cleanFields( current );
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/autoload.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/autoload.cpp
index 377ca0e..37082ed 100644
--- a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/autoload.cpp
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V1/V2/fwData/autoload.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V2/V03AGO/fwData/Image.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V2/V03AGO/fwData/Image.cpp
new file mode 100644
index 0000000..37890e1
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V2/V03AGO/fwData/Image.cpp
@@ -0,0 +1,69 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwTools/UUID.hpp>
+
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Object.hxx>
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+
+#include <fwAtomsPatch/helper/functions.hpp>
+
+#include "fwMDSemanticPatch/V2/V03AGO/fwData/Image.hpp"
+
+namespace fwMDSemanticPatch
+{
+namespace V2
+{
+namespace V03AGO
+{
+namespace fwData
+{
+
+Image::Image() : ::fwAtomsPatch::ISemanticPatch()
+{
+    m_originClassname = "::fwData::Image";
+    m_originVersion   = "1";
+    this->addContext("MedicalData", "V2", "V03AGO");
+}
+
+// ----------------------------------------------------------------------------
+
+Image::~Image()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+Image::Image( const Image &cpy ) : ::fwAtomsPatch::ISemanticPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void Image::apply(
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    ISemanticPatch::apply(previous, current, newVersions);
+    ::fwAtomsPatch::helper::cleanFields( current );
+    ::fwAtomsPatch::helper::Object helper( current );
+
+    ::fwAtoms::Object::sptr array        = ::fwAtoms::Object::dynamicCast(previous->getAttribute("array"));
+    ::fwAtoms::Numeric::sptr nbComponent = ::fwAtoms::Numeric::dynamicCast(array->getAttribute("nb_of_components"));
+
+    helper.replaceAttribute("nb_components", nbComponent->clone());
+}
+
+// ----------------------------------------------------------------------------
+
+} // namespace fwData
+} // namespace V03AGO
+} // namespace V2
+} // namespace fwMDSemanticPatch
+
diff --git a/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V2/V03AGO/fwData/autoload.cpp b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V2/V03AGO/fwData/autoload.cpp
new file mode 100644
index 0000000..86e47da
--- /dev/null
+++ b/SrcLib/patch/fwMDSemanticPatch/src/fwMDSemanticPatch/V2/V03AGO/fwData/autoload.cpp
@@ -0,0 +1,38 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtomsPatch/SemanticPatchDB.hpp>
+
+#include "fwMDSemanticPatch/V2/V03AGO/fwData/Image.hpp"
+
+namespace fwMDSemanticPatch
+{
+namespace V2
+{
+namespace V03AGO
+{
+namespace fwData
+{
+
+/// Registers contextual patches dedicated to conversions from version 'V2' to version 'V03AGO'.
+struct runner
+{
+    runner()
+    {
+        ::fwAtomsPatch::SemanticPatchDB::sptr contextPatchDB = ::fwAtomsPatch::SemanticPatchDB::getDefault();
+        contextPatchDB->registerPatch(::fwMDSemanticPatch::V2::V03AGO::fwData::Image::New());
+    }
+
+    static runner r;
+};
+
+runner runner::r;
+
+} // namespace fwData
+} // namespace V03AGO
+} // namespace V2
+} // namespace fwMDSemanticPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/CMakeLists.txt b/SrcLib/patch/fwStructuralPatch/CMakeLists.txt
index b9c8451..15cd4c1 100644
--- a/SrcLib/patch/fwStructuralPatch/CMakeLists.txt
+++ b/SrcLib/patch/fwStructuralPatch/CMakeLists.txt
@@ -1,4 +1 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwAtomsPatch
-)
diff --git a/SrcLib/patch/fwStructuralPatch/COPYING b/SrcLib/patch/fwStructuralPatch/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/patch/fwStructuralPatch/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/patch/fwStructuralPatch/COPYING.LESSER b/SrcLib/patch/fwStructuralPatch/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/patch/fwStructuralPatch/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/patch/fwStructuralPatch/Properties.cmake b/SrcLib/patch/fwStructuralPatch/Properties.cmake
index 30307fe..1700008 100644
--- a/SrcLib/patch/fwStructuralPatch/Properties.cmake
+++ b/SrcLib/patch/fwStructuralPatch/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwStructuralPatch )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwAtoms fwAtomsPatch fwTools )
+set( DEPENDENCIES fwAtoms fwAtomsPatch fwTools fwCore )
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/patch/fwStructuralPatch/bin/build.options b/SrcLib/patch/fwStructuralPatch/bin/build.options
deleted file mode 100644
index aabe31a..0000000
--- a/SrcLib/patch/fwStructuralPatch/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-#USE = []
-LIB = [
-    'fwData_0-1',
-    'fwDataCamp_0-1',
-    'fwCamp_0-1',
-    'fwAtoms_0-1',
-    'fwAtomsPatch_0-1',
-    'fwAtomConversion_0-1',
-]
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/PatchLoader.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/PatchLoader.hpp
index d6cfb10..782f0d2 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/PatchLoader.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/PatchLoader.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/config.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/config.hpp
deleted file mode 100644
index a60dd32..0000000
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/config.hpp
+++ /dev/null
@@ -1,44 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWSTRUCTURALPATCH_CONFIG_HPP_
-#define _FWSTRUCTURALPATCH_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWSTRUCTURALPATCH_EXPORTS
-            #define FWSTRUCTURALPATCH_API __declspec(dllexport)
-        #else
-            #define FWSTRUCTURALPATCH_API __declspec(dllimport)
-            #define FWSTRUCTURALPATCH_TEMPLATE_API extern "C++"
-        #endif
-
-        #define FWSTRUCTURALPATCH_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWSTRUCTURALPATCH_EXPORTS
-            #define FWSTRUCTURALPATCH_API __attribute__ ((visibility("default")))
-            #define FWSTRUCTURALPATCH_CLASS_API __attribute__ ((visibility("default")))
-            #define FWSTRUCTURALPATCH_TEMPLATE_API extern "C++"
-        #else
-            #define FWSTRUCTURALPATCH_API __attribute__ ((visibility("hidden")))
-            #define FWSTRUCTURALPATCH_CLASS_API __attribute__ ((visibility("hidden")))
-            #define FWSTRUCTURALPATCH_TEMPLATE_API extern "C++"
-        #endif
-
-    #else
-
-        #define FWSTRUCTURALPATCH_API
-        #define FWSTRUCTURALPATCH_CLASS_API
-        #define FWSTRUCTURALPATCH_TEMPLATE_API extern "C++"
-
-    #endif
-
-#endif //_FWSTRUCTURALPATCH_CONFIG_HPP_
-
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ActivitySeries1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ActivitySeries1.hpp
index 18aa61a..922e8cb 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ActivitySeries1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ActivitySeries1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -26,7 +26,7 @@ class FWSTRUCTURALPATCH_CLASS_API ActivitySeries1 : public ::fwStructuralPatch::
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro(
-            (ActivitySeries1)(::fwStructuralPatch::creator::fwMedData::Series1),(()), new ActivitySeries1);
+        (ActivitySeries1)(::fwStructuralPatch::creator::fwMedData::Series1),(()), new ActivitySeries1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API ActivitySeries1();
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Equipment1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Equipment1.hpp
index 50a3dda..ffca478 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Equipment1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Equipment1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,7 +21,7 @@ namespace fwMedData
 class FWSTRUCTURALPATCH_CLASS_API Equipment1 : public ::fwAtomsPatch::IStructuralCreator
 {
 public:
-    fwCoreClassDefinitionsWithFactoryMacro( (Equipment1)(::fwAtomsPatch::IStructuralCreator), (()), new Equipment1) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Equipment1)(::fwAtomsPatch::IStructuralCreator), (()), new Equipment1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API Equipment1();
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ImageSeries1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ImageSeries1.hpp
index a3bcbfe..66b8cd4 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ImageSeries1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ImageSeries1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ class FWSTRUCTURALPATCH_CLASS_API ImageSeries1 : public ::fwStructuralPatch::cre
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (ImageSeries1)(::fwStructuralPatch::creator::fwMedData::Series1),
-            (()), new ImageSeries1) ;
+                                            (()), new ImageSeries1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API ImageSeries1();
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ModelSeries1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ModelSeries1.hpp
index e50939f..a119551 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ModelSeries1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/ModelSeries1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,7 +24,7 @@ class FWSTRUCTURALPATCH_CLASS_API ModelSeries1 : public ::fwStructuralPatch::cre
 public:
 
     fwCoreClassDefinitionsWithFactoryMacro( (ModelSeries1)(::fwStructuralPatch::creator::fwMedData::Series1),
-            (()), new ModelSeries1) ;
+                                            (()), new ModelSeries1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API ModelSeries1();
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Patient1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Patient1.hpp
index 4d69790..2728640 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Patient1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Patient1.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWSTRUCTURALPATCH_CREATOR_PATIENT1_HPP__
-#define __FWSTRUCTURALPATCH_CREATOR_PATIENT1_HPP__
+#ifndef __FWSTRUCTURALPATCH_CREATOR_FWMEDDATA_PATIENT1_HPP__
+#define __FWSTRUCTURALPATCH_CREATOR_FWMEDDATA_PATIENT1_HPP__
 
 #include <fwAtomsPatch/IStructuralCreator.hpp>
 #include "fwStructuralPatch/config.hpp"
@@ -23,7 +23,7 @@ class FWSTRUCTURALPATCH_CLASS_API Patient1 : public ::fwAtomsPatch::IStructuralC
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Patient1)(::fwAtomsPatch::IStructuralCreator), (()), new Patient1) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Patient1)(::fwAtomsPatch::IStructuralCreator), (()), new Patient1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API Patient1();
@@ -43,4 +43,4 @@ public:
 } // namespace creator
 } // namespace fwStructuralPatch
 
-#endif /* __FWSTRUCTURALPATCH_CREATOR_PATIENT1_HPP__ */
+#endif /* __FWSTRUCTURALPATCH_CREATOR_FWMEDDATA_PATIENT1_HPP__ */
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Series1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Series1.hpp
index a98870e..6708e12 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Series1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Series1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,7 +23,7 @@ class FWSTRUCTURALPATCH_CLASS_API Series1 : public ::fwAtomsPatch::IStructuralCr
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Series1)(::fwAtomsPatch::IStructuralCreator),(()), new Series1) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Series1)(::fwAtomsPatch::IStructuralCreator),(()), new Series1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API Series1();
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Study1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Study1.hpp
index a4a137c..9352213 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Study1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/creator/fwMedData/Study1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,7 +23,7 @@ class FWSTRUCTURALPATCH_CLASS_API Study1 : public ::fwAtomsPatch::IStructuralCre
 
 public:
 
-    fwCoreClassDefinitionsWithFactoryMacro( (Study1)(::fwAtomsPatch::IStructuralCreator),(()), new Study1) ;
+    fwCoreClassDefinitionsWithFactoryMacro( (Study1)(::fwAtomsPatch::IStructuralCreator),(()), new Study1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API Study1();
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.hpp
index 0b59be4..a405506 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,9 +24,9 @@ class FWSTRUCTURALPATCH_CLASS_API V1ToFwMedDataImageSeriesV1 : public ::fwAtomsP
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (V1ToFwMedDataImageSeriesV1)(::fwStructuralPatch::fwData::Acquisition::V1ToFwMedDataImageSeriesV1),
-            (()),
-            new V1ToFwMedDataImageSeriesV1);
+        (V1ToFwMedDataImageSeriesV1)(::fwStructuralPatch::fwData::Acquisition::V1ToFwMedDataImageSeriesV1),
+        (()),
+        new V1ToFwMedDataImageSeriesV1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API V1ToFwMedDataImageSeriesV1();
@@ -44,9 +44,9 @@ public:
      * 'patient', 'equipment', 'performing_physicians_name', 'time' and 'date'.
      */
     FWSTRUCTURALPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Image/V1ToV2.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Image/V1ToV2.hpp
new file mode 100644
index 0000000..882803e
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Image/V1ToV2.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_IMAGE_V1TOV2_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_IMAGE_V1TOV2_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Image
+{
+
+/// Structural patch to convert a fwData::Image from version '1' to version '2'.
+class FWSTRUCTURALPATCH_CLASS_API V1ToV2 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V1ToV2)(::fwStructuralPatch::fwData::Image::V1ToV2), (()), new V1ToV2);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V1ToV2();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V1ToV2();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V1ToV2( const V1ToV2 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Removes attributes from reconstruction.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Image
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_IMAGE_V1TOV2_HPP__ */
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V1ToV2.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V1ToV2.hpp
new file mode 100644
index 0000000..7338264
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V1ToV2.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V1TOV2_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V1TOV2_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+/// Structural patch to convert a fwData::Image from version '1' to version '2'.
+class FWSTRUCTURALPATCH_CLASS_API V1ToV2 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V1ToV2)(::fwStructuralPatch::fwData::Material::V1ToV2), (()), new V1ToV2);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V1ToV2();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V1ToV2();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V1ToV2( const V1ToV2 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Set defaults values for new attributes.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V1TOV2_HPP__ */
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V2ToV3.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V2ToV3.hpp
new file mode 100644
index 0000000..1e558cf
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V2ToV3.hpp
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V2TOV3_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V2TOV3_HPP__
+
+#include "fwStructuralPatch/config.hpp"
+
+#include <fwAtoms/Boolean.hpp>
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+/// Structural patch to convert a fwData::Image from version '1' to version '2'.
+class FWSTRUCTURALPATCH_CLASS_API V2ToV3 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V2ToV3)(::fwStructuralPatch::fwData::Material::V2ToV3), (()), new V2ToV3);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V2ToV3();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V2ToV3();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V2ToV3( const V2ToV3 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Set defaults values for new attributes.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V2TOV3_HPP__ */
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V3ToV4.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V3ToV4.hpp
new file mode 100644
index 0000000..e5e9fd8
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V3ToV4.hpp
@@ -0,0 +1,58 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V3TOV4_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V3TOV4_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+/// Structural patch to convert a fwData::Material from version '3' to version '4'.
+class FWSTRUCTURALPATCH_CLASS_API V3ToV4 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V3ToV4)(::fwStructuralPatch::fwData::Material::V3ToV4), (()), new V3ToV4);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V3ToV4();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V3ToV4();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V3ToV4( const V3ToV4 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Added new map of additional array.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V3TOV4_HPP__ */
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V4ToV3.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V4ToV3.hpp
new file mode 100644
index 0000000..680801b
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Material/V4ToV3.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V4TOV3_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V4TOV3_HPP__
+
+#include "fwStructuralPatch/config.hpp"
+
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+/// Structural patch to convert a fwData::Material from version '4' to version '3'.
+class FWSTRUCTURALPATCH_CLASS_API V4ToV3 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V4ToV3)(::fwStructuralPatch::fwData::Material::V4ToV3), (()), new V4ToV3);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V4ToV3();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V4ToV3();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V4ToV3( const V4ToV3 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Added new map of additional array.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MATERIAL_V4TOV3_HPP__ */
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V1ToV2.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V1ToV2.hpp
new file mode 100644
index 0000000..b5db7dd
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V1ToV2.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MESH_V1TOV2_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MESH_V1TOV2_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Mesh
+{
+
+/// Structural patch to convert a fwData::Mesh from version '1' to version '2'.
+class FWSTRUCTURALPATCH_CLASS_API V1ToV2 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V1ToV2)(::fwStructuralPatch::fwData::Mesh::V1ToV2), (()), new V1ToV2);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V1ToV2();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V1ToV2();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V1ToV2( const V1ToV2 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Added new map of additional array.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Mesh
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MESH_V1TOV2_HPP__ */
+
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V1ToV3.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V1ToV3.hpp
new file mode 100644
index 0000000..b9e2c98
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V1ToV3.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MESH_V1TOV3_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MESH_V1TOV3_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Mesh
+{
+
+/// Structural patch to convert a fwData::Mesh from version '1' to version '3'.
+class FWSTRUCTURALPATCH_CLASS_API V1ToV3 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V1ToV3)(::fwStructuralPatch::fwData::Mesh::V1ToV3), (()), new V1ToV3);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V1ToV3();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V1ToV3();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V1ToV3( const V1ToV3 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Added new map of additional array.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Mesh
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MESH_V1TOV3_HPP__ */
+
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V2ToV3.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V2ToV3.hpp
new file mode 100644
index 0000000..baf0d4d
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Mesh/V2ToV3.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_MESH_V2TOV3_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_MESH_V2TOV3_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Mesh
+{
+
+/// Structural patch to convert a fwData::Mesh from version '2' to version '3'.
+class FWSTRUCTURALPATCH_CLASS_API V2ToV3 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V2ToV3)(::fwStructuralPatch::fwData::Mesh::V2ToV3), (()), new V2ToV3);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V2ToV3();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V2ToV3();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V2ToV3( const V2ToV3 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Added new map of additional array.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Mesh
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_MESH_V2TOV3_HPP__ */
+
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.hpp
index 1355e25..f73ac7b 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,9 +25,9 @@ class FWSTRUCTURALPATCH_CLASS_API V1ToFwMedDataPatientV1 : public ::fwAtomsPatch
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (V1ToFwMedDataPatientV1)(::fwStructuralPatch::fwData::Patient::V1ToFwMedDataPatientV1),
-            (()),
-            new V1ToFwMedDataPatientV1) ;
+        (V1ToFwMedDataPatientV1)(::fwStructuralPatch::fwData::Patient::V1ToFwMedDataPatientV1),
+        (()),
+        new V1ToFwMedDataPatientV1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API V1ToFwMedDataPatientV1();
@@ -44,9 +44,9 @@ public:
      * Merges 'firstname' and 'name' attributes, removes 'db_id' and 'studies', updates attribues.
      */
     FWSTRUCTURALPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V1ToV2.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V1ToV2.hpp
index 46b2c37..ae58667 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V1ToV2.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V1ToV2.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -25,7 +25,7 @@ class FWSTRUCTURALPATCH_CLASS_API V1ToV2 : public ::fwAtomsPatch::IStructuralPat
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (V1ToV2)(::fwStructuralPatch::fwData::Reconstruction::V1ToV2), (()), new V1ToV2) ;
+        (V1ToV2)(::fwStructuralPatch::fwData::Reconstruction::V1ToV2), (()), new V1ToV2);
 
     /// Constructor
     FWSTRUCTURALPATCH_API V1ToV2();
@@ -42,9 +42,9 @@ public:
      * Removes attributes from reconstruction.
      */
     FWSTRUCTURALPATCH_API virtual void apply(
-            const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V2ToV3.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V2ToV3.hpp
new file mode 100644
index 0000000..0c1b0a1
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Reconstruction/V2ToV3.hpp
@@ -0,0 +1,59 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_RECONSTRUCTION_V2TOV3_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_RECONSTRUCTION_V2TOV3_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Reconstruction
+{
+
+/// Structural patch to convert a fwData::Reconstruction from version '2' to version '3'.
+class FWSTRUCTURALPATCH_CLASS_API V2ToV3 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V2ToV3)(::fwStructuralPatch::fwData::Reconstruction::V2ToV3), (()), new V2ToV3);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V2ToV3();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V2ToV3();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V2ToV3( const V2ToV3 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Removes attributes from reconstruction.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace Reconstruction
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_RECONSTRUCTION_V2TOV3_HPP__ */
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.hpp
index 6edea63..cc0a91a 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWSTRUCTURALPATCH_FWDATA_STUDY_V1TOFWMEDDATAPSTUDYV1_HPP__
-#define __FWSTRUCTURALPATCH_FWDATA_STUDY_V1TOFWMEDDATAPSTUDYV1_HPP__
+#ifndef __FWSTRUCTURALPATCH_FWDATA_STUDY_V1TOFWMEDDATASTUDYV1_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_STUDY_V1TOFWMEDDATASTUDYV1_HPP__
 
 #include <fwAtomsPatch/IStructuralPatch.hpp>
 
@@ -25,9 +25,9 @@ class FWSTRUCTURALPATCH_CLASS_API V1ToFwMedDataStudyV1 : public ::fwAtomsPatch::
 {
 public:
     fwCoreClassDefinitionsWithFactoryMacro(
-            (V1ToFwMedDataStudyV1)(::fwStructuralPatch::fwData::Study::V1ToFwMedDataStudyV1),
-            (()),
-            new V1ToFwMedDataStudyV1) ;
+        (V1ToFwMedDataStudyV1)(::fwStructuralPatch::fwData::Study::V1ToFwMedDataStudyV1),
+        (()),
+        new V1ToFwMedDataStudyV1);
 
     /// Constructor
     FWSTRUCTURALPATCH_API V1ToFwMedDataStudyV1();
@@ -45,8 +45,8 @@ public:
      * 'uid' to 'instance_uid', adds 'referring_physicians_name' and 'patient_age'.
      */
     FWSTRUCTURALPATCH_API virtual void apply(const ::fwAtoms::Object::sptr& previous,
-            const ::fwAtoms::Object::sptr& current,
-            ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+                                             const ::fwAtoms::Object::sptr& current,
+                                             ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
 
 };
 
@@ -56,5 +56,5 @@ public:
 
 } // namespace fwStructuralPatch
 
-#endif /* __FWSTRUCTURALPATCH_FWDATA_STUDY_V1TOFWMEDDATAPSTUDYV1_HPP__ */
+#endif /* __FWSTRUCTURALPATCH_FWDATA_STUDY_V1TOFWMEDDATASTUDYV1_HPP__ */
 
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.hpp
new file mode 100644
index 0000000..c4406e7
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.hpp
@@ -0,0 +1,60 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_FWDATA_TRANSFORMATIONMATRIX3D_V1TOV2_HPP__
+#define __FWSTRUCTURALPATCH_FWDATA_TRANSFORMATIONMATRIX3D_V1TOV2_HPP__
+
+#include <fwAtomsPatch/IStructuralPatch.hpp>
+
+#include "fwStructuralPatch/config.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace TransformationMatrix3D
+{
+
+/// Structural patch to convert a fwData::Mesh from version '1' to version '2'.
+class FWSTRUCTURALPATCH_CLASS_API V1ToV2 : public ::fwAtomsPatch::IStructuralPatch
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro(
+        (V1ToV2)(::fwStructuralPatch::fwData::TransformationMatrix3D::V1ToV2), (()), new V1ToV2);
+
+    /// Constructor
+    FWSTRUCTURALPATCH_API V1ToV2();
+
+    /// Destructor
+    FWSTRUCTURALPATCH_API ~V1ToV2();
+
+    /// Copy constructor
+    FWSTRUCTURALPATCH_API V1ToV2( const V1ToV2 &cpy );
+
+    /**
+     * @brief Applies patch
+     *
+     * Added new map of additional array.
+     */
+    FWSTRUCTURALPATCH_API virtual void apply(
+        const ::fwAtoms::Object::sptr& previous,
+        const ::fwAtoms::Object::sptr& current,
+        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions);
+
+};
+
+
+} // namespace TransformationMatrix3D
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
+#endif /* __FWSTRUCTURALPATCH_FWDATA_TRANSFORMATIONMATRIX3D_V1TOV2_HPP__ */
+
+
diff --git a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/namespace.hpp b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/namespace.hpp
index 2eef622..d5eb75a 100644
--- a/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/namespace.hpp
+++ b/SrcLib/patch/fwStructuralPatch/include/fwStructuralPatch/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,45 +14,45 @@
 namespace fwStructuralPatch
 {
 
-    /**
-     * @brief Contains creators (implementation if ::fwAtomsPatch::IStructuralCreator).
-     * @namespace fwStructuralPatch::creator
-     */
-    namespace creator
-    {
-
-        /**
-         * @brief Contains creators for fwMedData.
-         * @namespace fwStructuralPatch::creator::fwMedData
-         */
-        namespace fwMedData
-        {
-        }
-    } // namespace creator
-
-    /// Contains the structural patch (::fwAtomsPatch::IStructuralPatch) to tranforms atoms from fwData objects.
-    namespace fwData
-    {
-        /// Contains the structural patch to transform atoms from fwData::Acquisition.
-        namespace Acquisition
-        {
-        }
-
-        /// Contains the structural patch to transform atoms from fwData::Patient.
-        namespace Patient
-        {
-        }
-
-        /// Contains the structural patch to transform atoms from fwData::Reconstruction.
-        namespace Reconstruction
-        {
-        }
-
-        /// Contains the structural patch to transform atoms from fwData::Study.
-        namespace Study
-        {
-        }
-    } // namespace fwData
+/**
+ * @brief Contains creators (implementation if ::fwAtomsPatch::IStructuralCreator).
+ * @namespace fwStructuralPatch::creator
+ */
+namespace creator
+{
+
+/**
+ * @brief Contains creators for fwMedData.
+ * @namespace fwStructuralPatch::creator::fwMedData
+ */
+namespace fwMedData
+{
+}
+}     // namespace creator
+
+/// Contains the structural patch (::fwAtomsPatch::IStructuralPatch) to tranforms atoms from fwData objects.
+namespace fwData
+{
+/// Contains the structural patch to transform atoms from fwData::Acquisition.
+namespace Acquisition
+{
+}
+
+/// Contains the structural patch to transform atoms from fwData::Patient.
+namespace Patient
+{
+}
+
+/// Contains the structural patch to transform atoms from fwData::Reconstruction.
+namespace Reconstruction
+{
+}
+
+/// Contains the structural patch to transform atoms from fwData::Study.
+namespace Study
+{
+}
+}     // namespace fwData
 
 } // namespace fwStructuralPatch
 
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/PatchLoader.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/PatchLoader.cpp
index 5b14ed8..b76d29d 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/PatchLoader.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/PatchLoader.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/autoload.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/autoload.cpp
index 344f701..01902e7 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/autoload.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/autoload.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -8,24 +8,44 @@
 #include <fwAtomsPatch/StructuralPatchDB.hpp>
 
 #include "fwStructuralPatch/fwData/Reconstruction/V1ToV2.hpp"
+#include "fwStructuralPatch/fwData/Reconstruction/V2ToV3.hpp"
 #include "fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.hpp"
 #include "fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.hpp"
 #include "fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.hpp"
+#include "fwStructuralPatch/fwData/Image/V1ToV2.hpp"
+#include "fwStructuralPatch/fwData/Material/V1ToV2.hpp"
+#include "fwStructuralPatch/fwData/Material/V2ToV3.hpp"
+#include "fwStructuralPatch/fwData/Material/V3ToV4.hpp"
+#include "fwStructuralPatch/fwData/Material/V4ToV3.hpp"
+#include "fwStructuralPatch/fwData/Mesh/V1ToV2.hpp"
+#include "fwStructuralPatch/fwData/Mesh/V1ToV3.hpp"
+#include "fwStructuralPatch/fwData/Mesh/V2ToV3.hpp"
+#include "fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.hpp"
 
 
 namespace fwStructuralPatch
 {
 
-/// Registers structural patches dedicated to conversions from version '1' to version '2'.
+/// Registers structural patches dedicated to data conversions.
 struct runner
 {
     runner()
     {
         ::fwAtomsPatch::StructuralPatchDB::sptr structuralPatches = ::fwAtomsPatch::StructuralPatchDB::getDefault();
         structuralPatches->registerPatch(::fwStructuralPatch::fwData::Reconstruction::V1ToV2::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Reconstruction::V2ToV3::New());
         structuralPatches->registerPatch(::fwStructuralPatch::fwData::Patient::V1ToFwMedDataPatientV1::New());
         structuralPatches->registerPatch(::fwStructuralPatch::fwData::Study::V1ToFwMedDataStudyV1::New());
         structuralPatches->registerPatch(::fwStructuralPatch::fwData::Acquisition::V1ToFwMedDataImageSeriesV1::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Image::V1ToV2::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Material::V1ToV2::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Material::V2ToV3::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Material::V3ToV4::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Material::V4ToV3::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Mesh::V1ToV2::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Mesh::V1ToV3::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::Mesh::V2ToV3::New());
+        structuralPatches->registerPatch(::fwStructuralPatch::fwData::TransformationMatrix3D::V1ToV2::New());
     }
 
     static runner r;
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/autoload.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/autoload.cpp
index 1883163..66a54d4 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/autoload.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/autoload.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ActivitySeries1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ActivitySeries1.cpp
index 29095f5..d8c2d7c 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ActivitySeries1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ActivitySeries1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -21,7 +21,7 @@ namespace fwMedData
 ActivitySeries1::ActivitySeries1()
 {
     m_classname = "::fwMedData::ActivitySeries";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Equipment1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Equipment1.cpp
index f1a9d20..190db1d 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Equipment1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Equipment1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -24,18 +24,20 @@ namespace fwMedData
 Equipment1::Equipment1()
 {
     m_classname = "::fwMedData::Equipment";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
 
 Equipment1::~Equipment1()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 Equipment1::Equipment1( const Equipment1 &cpy ) : ::fwAtomsPatch::IStructuralCreator(cpy)
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
@@ -44,7 +46,7 @@ Equipment1::Equipment1( const Equipment1 &cpy ) : ::fwAtomsPatch::IStructuralCre
     ::fwAtoms::Object::sptr equipment = this->createObjBase();
     ::fwAtomsPatch::helper::Object helper(equipment);
 
-    helper.addAttribute("institution_name" , ::fwAtoms::String::New(""));
+    helper.addAttribute("institution_name", ::fwAtoms::String::New(""));
 
     return equipment;
 }
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ImageSeries1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ImageSeries1.cpp
index 478366e..14d176a 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ImageSeries1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ImageSeries1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,29 +22,31 @@ namespace fwMedData
 ImageSeries1::ImageSeries1()
 {
     m_classname = "::fwMedData::ImageSeries";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
 
 ImageSeries1::~ImageSeries1()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 ImageSeries1::ImageSeries1( const ImageSeries1 &cpy ) : Series1(cpy)
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 ::fwAtoms::Object::sptr ImageSeries1::create()
 {
-    ::fwAtoms::Object::sptr modelSeries = this->Series1::create();
-    ::fwAtomsPatch::helper::Object helper(modelSeries);
+    ::fwAtoms::Object::sptr imageSeries = this->Series1::create();
+    ::fwAtomsPatch::helper::Object helper(imageSeries);
 
     helper.addAttribute("image", ::fwAtoms::Blob::New());
 
-    return modelSeries;
+    return imageSeries;
 }
 
 } // namespace fwMedData
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ModelSeries1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ModelSeries1.cpp
index 4e16282..ba1bf41 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ModelSeries1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/ModelSeries1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,18 +23,20 @@ namespace fwMedData
 ModelSeries1::ModelSeries1()
 {
     m_classname = "::fwMedData::ModelSeries";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
 
 ModelSeries1::~ModelSeries1()
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
 ModelSeries1::ModelSeries1( const ModelSeries1 &cpy ) : Series1(cpy)
-{}
+{
+}
 
 // ----------------------------------------------------------------------------
 
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Patient1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Patient1.cpp
index d070ac9..8146778 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Patient1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Patient1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -22,7 +22,7 @@ namespace fwMedData
 Patient1::Patient1()
 {
     m_classname = "::fwMedData::Patient";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
@@ -44,10 +44,10 @@ Patient1::Patient1( const Patient1 &cpy ) : ::fwAtomsPatch::IStructuralCreator(c
     ::fwAtoms::Object::sptr patient = this->createObjBase();
     ::fwAtomsPatch::helper::Object helper(patient);
 
-    helper.addAttribute("name" , ::fwAtoms::String::New(""));
-    helper.addAttribute("patient_id" , ::fwAtoms::String::New(""));
-    helper.addAttribute("birth_date" , ::fwAtoms::String::New(""));
-    helper.addAttribute("sex" , ::fwAtoms::String::New(""));
+    helper.addAttribute("name", ::fwAtoms::String::New(""));
+    helper.addAttribute("patient_id", ::fwAtoms::String::New(""));
+    helper.addAttribute("birth_date", ::fwAtoms::String::New(""));
+    helper.addAttribute("sex", ::fwAtoms::String::New(""));
 
     return patient;
 }
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Series1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Series1.cpp
index b3cb279..784f801 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Series1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Series1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,7 +23,7 @@ namespace fwMedData
 Series1::Series1()
 {
     m_classname = "::fwMedData::Series";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
@@ -46,16 +46,16 @@ Series1::Series1( const Series1 &cpy ) : ::fwAtomsPatch::IStructuralCreator(cpy)
     ::fwAtomsPatch::helper::Object helper(series);
 
     ::fwAtomsPatch::StructuralCreatorDB::sptr creators = ::fwAtomsPatch::StructuralCreatorDB::getDefault();
-    helper.addAttribute("patient"  , creators->create( "::fwMedData::Patient", "1") );
-    helper.addAttribute("study"    , creators->create( "::fwMedData::Study", "1") );
+    helper.addAttribute("patient", creators->create( "::fwMedData::Patient", "1") );
+    helper.addAttribute("study", creators->create( "::fwMedData::Study", "1") );
     helper.addAttribute("equipment", creators->create( "::fwMedData::Equipment", "1") );
 
-    helper.addAttribute("instance_uid" , ::fwAtoms::String::New(""));
-    helper.addAttribute("modality" , ::fwAtoms::String::New(""));
-    helper.addAttribute("date" , ::fwAtoms::String::New(""));
-    helper.addAttribute("time" , ::fwAtoms::String::New(""));
+    helper.addAttribute("instance_uid", ::fwAtoms::String::New(""));
+    helper.addAttribute("modality", ::fwAtoms::String::New(""));
+    helper.addAttribute("date", ::fwAtoms::String::New(""));
+    helper.addAttribute("time", ::fwAtoms::String::New(""));
     helper.addAttribute("performing_physicians_name", ::fwAtoms::Sequence::New());
-    helper.addAttribute("description" , ::fwAtoms::String::New(""));
+    helper.addAttribute("description", ::fwAtoms::String::New(""));
 
     return series;
 }
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Study1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Study1.cpp
index c588520..094fd69 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Study1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/creator/fwMedData/Study1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,7 +20,7 @@ namespace fwMedData
 Study1::Study1()
 {
     m_classname = "::fwMedData::Study";
-    m_version = "1";
+    m_version   = "1";
 }
 
 // ----------------------------------------------------------------------------
@@ -42,12 +42,12 @@ Study1::Study1( const Study1 &cpy ) : ::fwAtomsPatch::IStructuralCreator(cpy)
     ::fwAtoms::Object::sptr study = this->createObjBase();
     ::fwAtomsPatch::helper::Object helper(study);
 
-    helper.addAttribute("instance_uid" , ::fwAtoms::String::New(""));
-    helper.addAttribute("date" , ::fwAtoms::String::New(""));
-    helper.addAttribute("time" , ::fwAtoms::String::New(""));
-    helper.addAttribute("referring_physician_name" , ::fwAtoms::String::New(""));
-    helper.addAttribute("description" , ::fwAtoms::String::New(""));
-    helper.addAttribute("patient_age" , ::fwAtoms::String::New(""));
+    helper.addAttribute("instance_uid", ::fwAtoms::String::New(""));
+    helper.addAttribute("date", ::fwAtoms::String::New(""));
+    helper.addAttribute("time", ::fwAtoms::String::New(""));
+    helper.addAttribute("referring_physician_name", ::fwAtoms::String::New(""));
+    helper.addAttribute("description", ::fwAtoms::String::New(""));
+    helper.addAttribute("patient_age", ::fwAtoms::String::New(""));
 
     return study;
 }
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.cpp
index 6748bfd..ef50dcc 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -33,8 +33,8 @@ V1ToFwMedDataImageSeriesV1::V1ToFwMedDataImageSeriesV1() : ::fwAtomsPatch::IStru
 {
     m_originClassname = "::fwData::Acquisition";
     m_targetClassname = "::fwMedData::ImageSeries";
-    m_originVersion = "1";
-    m_targetVersion = "1";
+    m_originVersion   = "1";
+    m_targetVersion   = "1";
 
 }
 
@@ -46,15 +46,16 @@ V1ToFwMedDataImageSeriesV1::~V1ToFwMedDataImageSeriesV1()
 
 // ----------------------------------------------------------------------------
 
-V1ToFwMedDataImageSeriesV1::V1ToFwMedDataImageSeriesV1( const V1ToFwMedDataImageSeriesV1 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+V1ToFwMedDataImageSeriesV1::V1ToFwMedDataImageSeriesV1( const V1ToFwMedDataImageSeriesV1 &cpy ) : ::fwAtomsPatch::
+                                                                                                  IStructuralPatch(cpy)
 {
 }
 
 // ----------------------------------------------------------------------------
 
 void V1ToFwMedDataImageSeriesV1::apply(const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+                                       const ::fwAtoms::Object::sptr& current,
+                                       ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     IStructuralPatch::apply(previous, current, newVersions);
 
@@ -118,7 +119,7 @@ void V1ToFwMedDataImageSeriesV1::apply(const ::fwAtoms::Object::sptr& previous,
 
     // Date and time
     ::boost::posix_time::ptime pdate =
-            ::boost::posix_time::time_from_string(creationDate);
+        ::boost::posix_time::time_from_string(creationDate);
     const std::string date = ::fwTools::getDate(pdate);
     const std::string time = ::fwTools::getTime(pdate);
 
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Image/V1ToV2.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Image/V1ToV2.cpp
new file mode 100644
index 0000000..31cbd23
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Image/V1ToV2.cpp
@@ -0,0 +1,68 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+#include <fwAtoms/String.hpp>
+
+#include "fwStructuralPatch/fwData/Image/V1ToV2.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Image
+{
+
+V1ToV2::V1ToV2() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Image";
+    m_targetClassname = "::fwData::Image";
+    m_originVersion   = "1";
+    m_targetVersion   = "2";
+
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::~V1ToV2()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::V1ToV2( const V1ToV2 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V1ToV2::apply(
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+
+    helper.addAttribute("nb_components", ::fwAtoms::Numeric::New(1));
+    helper.addAttribute("window_center", ::fwAtoms::Numeric::New(50));
+    helper.addAttribute("window_width", ::fwAtoms::Numeric::New(500));
+}
+
+} // namespace Image
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V1ToV2.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V1ToV2.cpp
new file mode 100644
index 0000000..d2721ca
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V1ToV2.cpp
@@ -0,0 +1,65 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/String.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+#include "fwStructuralPatch/fwData/Material/V1ToV2.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+V1ToV2::V1ToV2() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Material";
+    m_targetClassname = "::fwData::Material";
+    m_originVersion   = "1";
+    m_targetVersion   = "2";
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::~V1ToV2()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::V1ToV2( const V1ToV2 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V1ToV2::apply(
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+    helper.addAttribute("diffuse_texture", ::fwAtoms::Object::sptr() );
+    helper.addAttribute("diffuse_texture_filtering", ::fwAtoms::String::New("LINEAR"));
+    helper.addAttribute("diffuse_texture_wrapping", ::fwAtoms::String::New("REPEAT"));
+}
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V2ToV3.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V2ToV3.cpp
new file mode 100644
index 0000000..a9cbd25
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V2ToV3.cpp
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwStructuralPatch/fwData/Material/V2ToV3.hpp"
+
+#include <fwAtoms/String.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+V2ToV3::V2ToV3() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Material";
+    m_targetClassname = "::fwData::Material";
+    m_originVersion   = "2";
+    m_targetVersion   = "3";
+}
+
+// ----------------------------------------------------------------------------
+
+V2ToV3::~V2ToV3()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V2ToV3::V2ToV3( const V2ToV3 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V2ToV3::apply(
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+    helper.addAttribute("lighting", ::fwAtoms::Boolean::New(true) );
+}
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V3ToV4.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V3ToV4.cpp
new file mode 100644
index 0000000..70a7220
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V3ToV4.cpp
@@ -0,0 +1,96 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwStructuralPatch/fwData/Material/V3ToV4.hpp"
+
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Object.hxx>
+#include <fwAtoms/Sequence.hpp>
+#include <fwAtoms/String.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+V3ToV4::V3ToV4() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Material";
+    m_targetClassname = "::fwData::Material";
+    m_originVersion   = "3";
+    m_targetVersion   = "4";
+}
+
+// ----------------------------------------------------------------------------
+
+V3ToV4::~V3ToV4()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V3ToV4::V3ToV4( const V3ToV4 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V3ToV4::apply( const ::fwAtoms::Object::sptr& previous,
+                    const ::fwAtoms::Object::sptr& current,
+                    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    ::fwAtomsPatch::helper::Object helper(current);
+
+    // Retrieve and remove lighting attribute, then update shading mode
+    ::fwAtoms::Boolean::sptr lighting = previous->getAttribute< ::fwAtoms::Boolean >("lighting");
+    bool bLighting = lighting->getValue();
+
+    helper.removeAttribute("lighting");
+
+    if(!bLighting)
+    {
+        helper.replaceAttribute("shading_mode", ::fwAtoms::String::New("AMBIENT"));
+    }
+
+    // Switch diffuse and ambient
+    ::fwAtoms::Object::sptr ambient = current->getAttribute< ::fwAtoms::Object >("ambient");
+    ::fwAtoms::Object::sptr diffuse = current->getAttribute< ::fwAtoms::Object >("diffuse");
+
+    // Replace diffuse by previous ambient
+    helper.replaceAttribute("diffuse", ambient);
+    helper.replaceAttribute("ambient", diffuse);
+
+    // Set ambient to 0.05f
+
+    ::fwAtoms::Sequence::sptr ambientSeq = diffuse->getAttribute< ::fwAtoms::Sequence >("rgba");
+    ::fwAtoms::Numeric::sptr r           = std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[0]);
+    r->setFromString(".05");
+    ::fwAtoms::Numeric::sptr g = std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[1]);
+    g->setFromString(".05");
+    ::fwAtoms::Numeric::sptr b = std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[2]);
+    b->setFromString(".05");
+    ::fwAtoms::Numeric::sptr a = std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[3]);
+    a->setFromString("1.");
+}
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V4ToV3.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V4ToV3.cpp
new file mode 100644
index 0000000..2d2c79e
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Material/V4ToV3.cpp
@@ -0,0 +1,96 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwStructuralPatch/fwData/Material/V4ToV3.hpp"
+
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Object.hxx>
+#include <fwAtoms/Sequence.hpp>
+#include <fwAtoms/String.hpp>
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Material
+{
+
+V4ToV3::V4ToV3() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Material";
+    m_targetClassname = "::fwData::Material";
+    m_originVersion   = "4";
+    m_targetVersion   = "3";
+}
+
+// ----------------------------------------------------------------------------
+
+V4ToV3::~V4ToV3()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V4ToV3::V4ToV3( const V4ToV3 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V4ToV3::apply( const ::fwAtoms::Object::sptr& previous,
+                    const ::fwAtoms::Object::sptr& current,
+                    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    ::fwAtomsPatch::helper::Object helper(current);
+
+    // Retrieve shading_mode and replace AMBIENT mode with PHONG
+    // add lighting attribute (false if mode is AMBIENT, else true)
+    ::fwAtoms::String::sptr shadingMode = previous->getAttribute< ::fwAtoms::String >("shading_mode");
+    std::string shading = shadingMode->getValue();
+
+    bool lighting = true;
+    if (shading == "AMBIENT")
+    {
+        lighting = false;
+        helper.replaceAttribute("shading_mode", ::fwAtoms::String::New("PHONG"));
+    }
+    helper.addAttribute("lighting", ::fwAtoms::Boolean::New(lighting));
+
+
+
+    // Switch diffuse and ambient
+    ::fwAtoms::Object::sptr ambient = current->getAttribute< ::fwAtoms::Object >("ambient");
+    ::fwAtoms::Object::sptr diffuse = current->getAttribute< ::fwAtoms::Object >("diffuse");
+
+    // Replace diffuse by previous ambient
+    helper.replaceAttribute("diffuse", ambient);
+    helper.replaceAttribute("ambient", diffuse);
+
+    // Replace options_mode "CELLS_NORMALS" by "NORMALS"
+    ::fwAtoms::String::sptr optionMode = previous->getAttribute< ::fwAtoms::String >("options_mode");
+    std::string option = optionMode->getValue();
+    if (option == "CELLS_NORMALS")
+    {
+        helper.replaceAttribute("options_mode", ::fwAtoms::String::New("NORMALS"));
+    }
+
+}
+
+} // namespace Material
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V1ToV2.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V1ToV2.cpp
new file mode 100644
index 0000000..cc86f5d
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V1ToV2.cpp
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/String.hpp>
+#include <fwAtoms/Map.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+#include "fwStructuralPatch/fwData/Mesh/V1ToV2.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Mesh
+{
+
+V1ToV2::V1ToV2() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Mesh";
+    m_targetClassname = "::fwData::Mesh";
+    m_originVersion   = "1";
+    m_targetVersion   = "2";
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::~V1ToV2()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::V1ToV2( const V1ToV2 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V1ToV2::apply( const ::fwAtoms::Object::sptr& previous,
+                    const ::fwAtoms::Object::sptr& current,
+                    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+    helper.addAttribute("array_map", ::fwAtoms::Map::New() );
+}
+
+} // namespace Mesh
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V1ToV3.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V1ToV3.cpp
new file mode 100644
index 0000000..f2d4c61
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V1ToV3.cpp
@@ -0,0 +1,65 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/String.hpp>
+#include <fwAtoms/Map.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+#include "fwStructuralPatch/fwData/Mesh/V1ToV3.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Mesh
+{
+
+V1ToV3::V1ToV3() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Mesh";
+    m_targetClassname = "::fwData::Mesh";
+    m_originVersion   = "1";
+    m_targetVersion   = "3";
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV3::~V1ToV3()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV3::V1ToV3( const V1ToV3 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V1ToV3::apply( const ::fwAtoms::Object::sptr& previous,
+                    const ::fwAtoms::Object::sptr& current,
+                    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+    helper.addAttribute("point_tex_coords", ::fwAtoms::Object::sptr() );
+    helper.addAttribute("cell_tex_coords", ::fwAtoms::Object::sptr() );
+    helper.addAttribute("array_map", ::fwAtoms::Map::New() );
+}
+
+} // namespace Mesh
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V2ToV3.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V2ToV3.cpp
new file mode 100644
index 0000000..640529b
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Mesh/V2ToV3.cpp
@@ -0,0 +1,70 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/String.hpp>
+#include <fwAtoms/Map.hpp>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+#include "fwStructuralPatch/fwData/Mesh/V2ToV3.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Mesh
+{
+
+V2ToV3::V2ToV3() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Mesh";
+    m_targetClassname = "::fwData::Mesh";
+    m_originVersion   = "2";
+    m_targetVersion   = "3";
+}
+
+// ----------------------------------------------------------------------------
+
+V2ToV3::~V2ToV3()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V2ToV3::V2ToV3( const V2ToV3 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V2ToV3::apply( const ::fwAtoms::Object::sptr& previous,
+                    const ::fwAtoms::Object::sptr& current,
+                    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+    if (current->getAttributes().find("point_tex_coords") == current->getAttributes().end())
+    {
+        helper.addAttribute("point_tex_coords", ::fwAtoms::Object::sptr() );
+    }
+    if (current->getAttributes().find("cell_tex_coords") == current->getAttributes().end())
+    {
+        helper.addAttribute("cell_tex_coords", ::fwAtoms::Object::sptr() );
+    }
+}
+
+} // namespace Mesh
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.cpp
index ea9fa7d..eaf74f2 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -28,8 +28,8 @@ V1ToFwMedDataPatientV1::V1ToFwMedDataPatientV1() : ::fwAtomsPatch::IStructuralPa
 {
     m_originClassname = "::fwData::Patient";
     m_targetClassname = "::fwMedData::Patient";
-    m_originVersion = "1";
-    m_targetVersion = "1";
+    m_originVersion   = "1";
+    m_targetVersion   = "1";
 }
 
 // ----------------------------------------------------------------------------
@@ -41,15 +41,15 @@ V1ToFwMedDataPatientV1::~V1ToFwMedDataPatientV1()
 // ----------------------------------------------------------------------------
 
 V1ToFwMedDataPatientV1::V1ToFwMedDataPatientV1(
-        const V1ToFwMedDataPatientV1 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+    const V1ToFwMedDataPatientV1 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
 {
 }
 
 // ----------------------------------------------------------------------------
 
 void V1ToFwMedDataPatientV1::apply(const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+                                   const ::fwAtoms::Object::sptr& current,
+                                   ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     IStructuralPatch::apply(previous, current, newVersions);
 
@@ -76,18 +76,18 @@ void V1ToFwMedDataPatientV1::apply(const ::fwAtoms::Object::sptr& previous,
     }
 
     std::string newName = previous->getAttribute("name")->getString()
-            + nameSeperation
-            + previous->getAttribute("firstname")->getString();
+                          + nameSeperation
+                          + previous->getAttribute("firstname")->getString();
     helper.replaceAttribute( "name", ::fwAtoms::String::New(newName) );
 
     // Update Birthdate
     ::boost::posix_time::ptime bithdate =
-            ::boost::posix_time::time_from_string(previous->getAttribute("birthdate")->getString());
+        ::boost::posix_time::time_from_string(previous->getAttribute("birthdate")->getString());
     helper.replaceAttribute("birth_date", ::fwAtoms::String::New(::fwTools::getDate(bithdate)));
 
     // Update Sex
     helper.replaceAttribute("sex", ::fwAtoms::String::New(
-            !(previous->getAttribute("is_male")->getString().compare("true"))?"M":"F"));
+                                !(previous->getAttribute("is_male")->getString().compare("true")) ? "M" : "F"));
 }
 
 } // namespace Patient
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V1ToV2.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V1ToV2.cpp
index 2ce3cc9..3aa46b3 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V1ToV2.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V1ToV2.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,8 +23,8 @@ V1ToV2::V1ToV2() : ::fwAtomsPatch::IStructuralPatch()
 {
     m_originClassname = "::fwData::Reconstruction";
     m_targetClassname = "::fwData::Reconstruction";
-    m_originVersion = "1";
-    m_targetVersion = "2";
+    m_originVersion   = "1";
+    m_targetVersion   = "2";
 
 }
 
@@ -43,9 +43,9 @@ V1ToV2::V1ToV2( const V1ToV2 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
 // ----------------------------------------------------------------------------
 
 void V1ToV2::apply(
-        const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     IStructuralPatch::apply(previous, current, newVersions);
 
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V2ToV3.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V2ToV3.cpp
new file mode 100644
index 0000000..58fdd57
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Reconstruction/V2ToV3.cpp
@@ -0,0 +1,67 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+#include <fwAtoms/String.hpp>
+
+#include "fwStructuralPatch/fwData/Reconstruction/V2ToV3.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace Reconstruction
+{
+
+V2ToV3::V2ToV3() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::Reconstruction";
+    m_targetClassname = "::fwData::Reconstruction";
+    m_originVersion   = "2";
+    m_targetVersion   = "3";
+
+}
+
+// ----------------------------------------------------------------------------
+
+V2ToV3::~V2ToV3()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V2ToV3::V2ToV3( const V2ToV3 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V2ToV3::apply(
+    const ::fwAtoms::Object::sptr& previous,
+    const ::fwAtoms::Object::sptr& current,
+    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+
+    // Set to -1 to inform that no mask has been computed yet (::fwData::Reconstruction::s_NO_COMPUTED_MASK_VOLUME)
+    helper.addAttribute("volume", ::fwAtoms::Numeric::New<double>(-1.));
+}
+
+} // namespace Reconstruction
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.cpp
index 29d5baa..d3a702d 100644
--- a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.cpp
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -23,8 +23,8 @@ V1ToFwMedDataStudyV1::V1ToFwMedDataStudyV1() : ::fwAtomsPatch::IStructuralPatch(
 {
     m_originClassname = "::fwData::Study";
     m_targetClassname = "::fwMedData::Study";
-    m_originVersion = "1";
-    m_targetVersion = "1";
+    m_originVersion   = "1";
+    m_targetVersion   = "1";
 }
 
 // ----------------------------------------------------------------------------
@@ -42,8 +42,8 @@ V1ToFwMedDataStudyV1::V1ToFwMedDataStudyV1( const V1ToFwMedDataStudyV1 &cpy ) :
 // ----------------------------------------------------------------------------
 
 void V1ToFwMedDataStudyV1::apply(const ::fwAtoms::Object::sptr& previous,
-        const ::fwAtoms::Object::sptr& current,
-        ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+                                 const ::fwAtoms::Object::sptr& current,
+                                 ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
 {
     IStructuralPatch::apply(previous, current, newVersions);
 
diff --git a/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.cpp b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.cpp
new file mode 100644
index 0000000..e7fa266
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/src/fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.cpp
@@ -0,0 +1,76 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/String.hpp>
+#include <fwAtoms/Map.hpp>
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Sequence.hpp>
+#include <fwAtoms/Object.hxx>
+#include <fwAtomsPatch/StructuralCreatorDB.hpp>
+
+#include "fwStructuralPatch/fwData/TransformationMatrix3D/V1ToV2.hpp"
+
+namespace fwStructuralPatch
+{
+
+namespace fwData
+{
+
+namespace TransformationMatrix3D
+{
+
+V1ToV2::V1ToV2() : ::fwAtomsPatch::IStructuralPatch()
+{
+    m_originClassname = "::fwData::TransformationMatrix3D";
+    m_targetClassname = "::fwData::TransformationMatrix3D";
+    m_originVersion   = "1";
+    m_targetVersion   = "2";
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::~V1ToV2()
+{
+}
+
+// ----------------------------------------------------------------------------
+
+V1ToV2::V1ToV2( const V1ToV2 &cpy ) : ::fwAtomsPatch::IStructuralPatch(cpy)
+{
+}
+
+// ----------------------------------------------------------------------------
+
+void V1ToV2::apply( const ::fwAtoms::Object::sptr& previous,
+                    const ::fwAtoms::Object::sptr& current,
+                    ::fwAtomsPatch::IPatch::NewVersionsType& newVersions)
+{
+    IStructuralPatch::apply(previous, current, newVersions);
+
+    // Update object version
+    this->updateVersion(current);
+
+    // Create helper
+    ::fwAtomsPatch::helper::Object helper(current);
+
+    ::fwAtoms::Sequence::sptr oldCoefs = previous->getAttribute< ::fwAtoms::Sequence >("coefficient");
+    ::fwAtoms::Sequence::sptr newCoefs = ::fwAtoms::Sequence::New();
+
+    for(size_t i = 0; i < 16; ++i)
+    {
+        newCoefs->push_back((*oldCoefs)[i]);
+    }
+
+    helper.removeAttribute("coefficient");
+    helper.addAttribute("coefficient", newCoefs);
+}
+
+} // namespace TransformationMatrix3D
+
+} // namespace fwData
+
+} // namespace fwStructuralPatch
+
diff --git a/SrcLib/patch/fwStructuralPatch/test/CMakeLists.txt b/SrcLib/patch/fwStructuralPatch/test/CMakeLists.txt
index 384db7d..3881996 100644
--- a/SrcLib/patch/fwStructuralPatch/test/CMakeLists.txt
+++ b/SrcLib/patch/fwStructuralPatch/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/patch/fwStructuralPatch/test/Properties.cmake b/SrcLib/patch/fwStructuralPatch/test/Properties.cmake
index c117922..7de9ed5 100644
--- a/SrcLib/patch/fwStructuralPatch/test/Properties.cmake
+++ b/SrcLib/patch/fwStructuralPatch/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwStructuralPatchTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData fwStructuralPatch )
+set( DEPENDENCIES fwCore fwTest fwStructuralPatch fwAtomsPatch fwAtoms)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/patch/fwStructuralPatch/test/cppunit.options b/SrcLib/patch/fwStructuralPatch/test/cppunit.options
deleted file mode 100644
index a5d881e..0000000
--- a/SrcLib/patch/fwStructuralPatch/test/cppunit.options
+++ /dev/null
@@ -1,25 +0,0 @@
-CLASSTEST=[
-          # test for creators
-          'Patient1Test',
-          'Series1Test',
-          'Study1Test',
-          'ModelSeries1Test',
-          'Equipment1Test',
-          # test for structural patches
-          'V1ToV2Test',
-          'V1ToFwMedDataImageSeriesV1Test',
-          'V1ToFwMedDataPatientV1Test',
-          'V1ToFwMedDataStudyV1Test',
-          ]
-
-USE = ['boost']
-LIB = [
-       'fwData_0-1',
-       'fwDataCamp_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwTest_0-1',
-       'fwStructuralPatch_0-1',
-       ]
-CONSOLE = 'yes'
-LOGLEVEL='trace'
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ActivitySeries1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ActivitySeries1Test.hpp
index f978534..872b612 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ActivitySeries1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ActivitySeries1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class ActivitySeries1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ActivitySeries1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ActivitySeries1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Equipment1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Equipment1Test.hpp
index b44c9d0..62dcac9 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Equipment1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Equipment1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class Equipment1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( Equipment1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( Equipment1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ImageSeries1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ImageSeries1Test.hpp
index 0e277bd..35dbb4c 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ImageSeries1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ImageSeries1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class ImageSeries1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageSeries1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageSeries1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ModelSeries1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ModelSeries1Test.hpp
index 917653d..c6efd22 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ModelSeries1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/ModelSeries1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class ModelSeries1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ModelSeries1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ModelSeries1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Patient1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Patient1Test.hpp
index 6707721..db6d731 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Patient1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Patient1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class Patient1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( Patient1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( Patient1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Series1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Series1Test.hpp
index 383fc8d..4d8a428 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Series1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Series1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class Series1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( Series1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( Series1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Study1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Study1Test.hpp
index ed586f9..8a5b47e 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Study1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/creator/fwMedData/Study1Test.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -20,10 +20,10 @@ namespace fwMedData
 
 class Study1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( Study1Test );
-    CPPUNIT_TEST( createTest );
-    CPPUNIT_TEST( copyTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( Study1Test );
+CPPUNIT_TEST( createTest );
+CPPUNIT_TEST( copyTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp
index 6966a1f..887e1e3 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWSTRUCTURALPATCH_TEST_TU_FWDATA_ACQUISITION_V1TOFWMEDDATAIMAGESERIESV1TEST_HPP__
-#define __FWSTRUCTURALPATCH_TEST_TU_FWDATA_ACQUISITION_V1TOFWMEDDATAIMAGESERIESV1TEST_HPP__
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_ACQUISITION_V1TOFWMEDDATAIMAGESERIESV1TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_ACQUISITION_V1TOFWMEDDATAIMAGESERIESV1TEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -23,9 +23,9 @@ namespace Acquisition
  */
 class V1ToFwMedDataImageSeriesV1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( V1ToFwMedDataImageSeriesV1Test );
-    CPPUNIT_TEST( applyPatchTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( V1ToFwMedDataImageSeriesV1Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -39,4 +39,4 @@ public:
 } //namespace ut
 } //namespace fwStructuralPatch
 
-#endif //__FWSTRUCTURALPATCH_TEST_TU_FWDATA_ACQUISITION_V1TOFWMEDDATAIMAGESERIESV1TEST_HPP__
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_ACQUISITION_V1TOFWMEDDATAIMAGESERIESV1TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V1ToV2Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V1ToV2Test.hpp
new file mode 100644
index 0000000..1ee1f28
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V1ToV2Test.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V1TOV2TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V1TOV2TEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+/**
+ * @brief Test patch to convert fwData::Reconstruction from version 1 to version 2.
+ */
+class V1ToV2Test : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( V1ToV2Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void applyPatchTest();
+};
+
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
+
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V1TOV2TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V2ToV3Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V2ToV3Test.hpp
new file mode 100644
index 0000000..f07b775
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V2ToV3Test.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V2TOV3TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V2TOV3TEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+/**
+ * @brief Test patch to convert fwData::Reconstruction from version 1 to version 2.
+ */
+class V2ToV3Test : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( V2ToV3Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void applyPatchTest();
+};
+
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
+
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V2TOV3TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V3ToV4Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V3ToV4Test.hpp
new file mode 100644
index 0000000..c15b11c
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V3ToV4Test.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V3TOV4TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V3TOV4TEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+/**
+ * @brief Test patch to convert fwData::Reconstruction from version 1 to version 2.
+ */
+class V3ToV4Test : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( V3ToV4Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void applyPatchTest();
+};
+
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
+
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V3TOV4TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V4ToV3Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V4ToV3Test.hpp
new file mode 100644
index 0000000..85fd34c
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Material/V4ToV3Test.hpp
@@ -0,0 +1,44 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V4TOV3TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V4TOV3TEST_HPP__
+
+#include <cppunit/extensions/HelperMacros.h>
+
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+/**
+ * @brief Test patch to convert fwData::Reconstruction from version 4 to version 3.
+ */
+class V4ToV3Test : public CPPUNIT_NS::TestFixture
+{
+CPPUNIT_TEST_SUITE( V4ToV3Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
+
+public:
+    // interface
+    void setUp();
+    void tearDown();
+
+    void applyPatchTest();
+};
+
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
+
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_MATERIAL_V4TOV3TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Patient/V1ToFwMedDataPatientV1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Patient/V1ToFwMedDataPatientV1Test.hpp
index 14fcff1..c2ffd48 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Patient/V1ToFwMedDataPatientV1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Patient/V1ToFwMedDataPatientV1Test.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWSTRUCTURALPATCH_TEST_TU_FWDATA_PATIENT_V1TOFWMEDDATAPATIENTV1TEST_HPP__
-#define __FWSTRUCTURALPATCH_TEST_TU_FWDATA_PATIENT_V1TOFWMEDDATAPATIENTV1TEST_HPP__
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_PATIENT_V1TOFWMEDDATAPATIENTV1TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_PATIENT_V1TOFWMEDDATAPATIENTV1TEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -23,9 +23,9 @@ namespace Patient
  */
 class V1ToFwMedDataPatientV1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( V1ToFwMedDataPatientV1Test );
-    CPPUNIT_TEST( applyPatchTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( V1ToFwMedDataPatientV1Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -39,4 +39,4 @@ public:
 } //namespace ut
 } //namespace fwStructuralPatch
 
-#endif //__FWSTRUCTURALPATCH_TEST_TU_FWDATA_PATIENT_V1TOFWMEDDATAPATIENTV1TEST_HPP__
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_PATIENT_V1TOFWMEDDATAPATIENTV1TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Reconstruction/V1ToV2Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Reconstruction/V1ToV2Test.hpp
index da22bea..5e6a879 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Reconstruction/V1ToV2Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Reconstruction/V1ToV2Test.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWSTRUCTURALPATCH_TEST_TU_FWDATA_RECONSTRUCTION_V1TOV2TEST_HPP__
-#define __FWSTRUCTURALPATCH_TEST_TU_FWDATA_RECONSTRUCTION_V1TOV2TEST_HPP__
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_RECONSTRUCTION_V1TOV2TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_RECONSTRUCTION_V1TOV2TEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -24,9 +24,9 @@ namespace Reconstruction
  */
 class V1ToV2Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( V1ToV2Test );
-    CPPUNIT_TEST( applyPatchTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( V1ToV2Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -41,4 +41,4 @@ public:
 } //namespace ut
 } //namespace fwStructuralPatch
 
-#endif //__FWSTRUCTURALPATCH_TEST_TU_FWDATA_RECONSTRUCTION_V1TOV2TEST_HPP__
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_RECONSTRUCTION_V1TOV2TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Study/V1ToFwMedDataStudyV1Test.hpp b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Study/V1ToFwMedDataStudyV1Test.hpp
index 122258a..08487f4 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Study/V1ToFwMedDataStudyV1Test.hpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/include/fwData/Study/V1ToFwMedDataStudyV1Test.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWSTRUCTURALPATCH_TEST_TU_FWDATA_STUDY_V1TOFWMEDDATAPSTUDYV1TEST_HPP__
-#define __FWSTRUCTURALPATCH_TEST_TU_FWDATA_STUDY_V1TOFWMEDDATAPSTUDYV1TEST_HPP__
+#ifndef __FWSTRUCTURALPATCH_UT_FWDATA_STUDY_V1TOFWMEDDATASTUDYV1TEST_HPP__
+#define __FWSTRUCTURALPATCH_UT_FWDATA_STUDY_V1TOFWMEDDATASTUDYV1TEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -23,9 +23,9 @@ namespace Study
  */
 class V1ToFwMedDataStudyV1Test : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( V1ToFwMedDataStudyV1Test );
-    CPPUNIT_TEST( applyPatchTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( V1ToFwMedDataStudyV1Test );
+CPPUNIT_TEST( applyPatchTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -39,4 +39,4 @@ public:
 } //namespace ut
 } //namespace fwStructuralPatch
 
-#endif //__FWSTRUCTURALPATCH_TEST_TU_FWDATA_STUDY_V1TOFWMEDDATAPSTUDYV1TEST_HPP__
+#endif //__FWSTRUCTURALPATCH_UT_FWDATA_STUDY_V1TOFWMEDDATASTUDYV1TEST_HPP__
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ActivitySeries1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ActivitySeries1Test.cpp
index f82d958..ad9a582 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ActivitySeries1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ActivitySeries1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,17 +46,17 @@ void ActivitySeries1Test::createTest()
 
     CPPUNIT_ASSERT(actSeriesCreator);
     const std::string& classname = actSeriesCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ActivitySeries") == classname );
-    const std::string& objectVersion =  actSeriesCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ActivitySeries") == classname );
+    const std::string& objectVersion = actSeriesCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr actSeries = actSeriesCreator->create();
 
     const std::string& actSeriesClassname = ::fwAtomsPatch::helper::getClassname(actSeries);
     CPPUNIT_ASSERT_MESSAGE(
-            "Classname must be equal" , std::string("::fwMedData::ActivitySeries") == actSeriesClassname );
+        "Classname must be equal", std::string("::fwMedData::ActivitySeries") == actSeriesClassname );
     const std::string& actSeriesObjectVersion = ::fwAtomsPatch::helper::getVersion(actSeries);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == actSeriesObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == actSeriesObjectVersion );
 
     CPPUNIT_ASSERT(actSeries->getAttribute("data"));
     CPPUNIT_ASSERT(actSeries->getAttribute("activity_config_id"));
@@ -70,19 +70,19 @@ void ActivitySeries1Test::copyTest()
     ActivitySeries1 actSeriesCreator;
 
     const std::string& classname = actSeriesCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ActivitySeries") == classname );
-    const std::string& objectVersion =  actSeriesCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ActivitySeries") == classname );
+    const std::string& objectVersion = actSeriesCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ActivitySeries1* actSeriesCreator2 = new ActivitySeries1(actSeriesCreator);
 
     CPPUNIT_ASSERT(actSeriesCreator2);
     const std::string& classnameActivitySeriesCreator2 = actSeriesCreator2->getObjectClassname();
     CPPUNIT_ASSERT_MESSAGE(
-            "Classname must be equal", std::string("::fwMedData::ActivitySeries") == classnameActivitySeriesCreator2 );
+        "Classname must be equal", std::string("::fwMedData::ActivitySeries") == classnameActivitySeriesCreator2 );
 
-    const std::string& objectVersionActivitySeriesCreator2 =  actSeriesCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionActivitySeriesCreator2 );
+    const std::string& objectVersionActivitySeriesCreator2 = actSeriesCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionActivitySeriesCreator2 );
 
     delete(actSeriesCreator2);
 }
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Equipment1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Equipment1Test.cpp
index c37bbf3..b95c0c2 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Equipment1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Equipment1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,16 +46,16 @@ void Equipment1Test::createTest()
 
     CPPUNIT_ASSERT(equipmentCreator);
     const std::string& classname = equipmentCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Equipment") == classname );
-    const std::string& objectVersion =  equipmentCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Equipment") == classname );
+    const std::string& objectVersion = equipmentCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr equipment = equipmentCreator->create();
 
     const std::string& equipmentClassname = ::fwAtomsPatch::helper::getClassname(equipment);
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Equipment") == equipmentClassname );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Equipment") == equipmentClassname );
     const std::string& equipmentObjectVersion = ::fwAtomsPatch::helper::getVersion(equipment);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == equipmentObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == equipmentObjectVersion );
 
     CPPUNIT_ASSERT(equipment->getAttribute("institution_name"));
 }
@@ -68,18 +68,19 @@ void Equipment1Test::copyTest()
     Equipment1 equipmentCreator;
 
     const std::string& classname = equipmentCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Equipment") == classname );
-    const std::string& objectVersion =  equipmentCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Equipment") == classname );
+    const std::string& objectVersion = equipmentCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     Equipment1* equipmentCreator2 = new Equipment1(equipmentCreator);
 
     CPPUNIT_ASSERT(equipmentCreator2);
     const std::string& classnameEquipmentCreator2 = equipmentCreator2->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Equipment") == classnameEquipmentCreator2 );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string(
+                               "::fwMedData::Equipment") == classnameEquipmentCreator2 );
 
-    const std::string& objectVersionEquipmentCreator2 =  equipmentCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionEquipmentCreator2 );
+    const std::string& objectVersionEquipmentCreator2 = equipmentCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionEquipmentCreator2 );
 
     delete(equipmentCreator2);
 
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ImageSeries1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ImageSeries1Test.cpp
index 9d116ea..4d2ad7a 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ImageSeries1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ImageSeries1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,18 +46,18 @@ void ImageSeries1Test::createTest()
 
     CPPUNIT_ASSERT(imageSeriesCreator);
     const std::string& classname = imageSeriesCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ImageSeries") == classname );
-    const std::string& objectVersion =  imageSeriesCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ImageSeries") == classname );
+    const std::string& objectVersion = imageSeriesCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr imageSeries = imageSeriesCreator->create();
 
     const std::string& imageSeriesClassname = ::fwAtomsPatch::helper::getClassname(imageSeries);
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ImageSeries") == imageSeriesClassname );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ImageSeries") == imageSeriesClassname );
     const std::string& imageSeriesObjectVersion = ::fwAtomsPatch::helper::getVersion(imageSeries);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == imageSeriesObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == imageSeriesObjectVersion );
 
-    CPPUNIT_ASSERT(imageSeries->getAttribute("reconstruction_db"));
+    CPPUNIT_ASSERT(imageSeries->getAttribute("image"));
 }
 
 //------------------------------------------------------------------------------
@@ -68,18 +68,19 @@ void ImageSeries1Test::copyTest()
     ImageSeries1 imageSeriesCreator;
 
     const std::string& classname = imageSeriesCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ImageSeries") == classname );
-    const std::string& objectVersion =  imageSeriesCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ImageSeries") == classname );
+    const std::string& objectVersion = imageSeriesCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ImageSeries1* imageSeriesCreator2 = new ImageSeries1(imageSeriesCreator);
 
     CPPUNIT_ASSERT(imageSeriesCreator2);
     const std::string& classnameImageSeriesCreator2 = imageSeriesCreator2->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ImageSeries") == classnameImageSeriesCreator2 );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string(
+                               "::fwMedData::ImageSeries") == classnameImageSeriesCreator2 );
 
-    const std::string& objectVersionImageSeriesCreator2 =  imageSeriesCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionImageSeriesCreator2 );
+    const std::string& objectVersionImageSeriesCreator2 = imageSeriesCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionImageSeriesCreator2 );
 
     delete(imageSeriesCreator2);
 }
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ModelSeries1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ModelSeries1Test.cpp
index 1238858..6d90561 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ModelSeries1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/ModelSeries1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,16 +46,16 @@ void ModelSeries1Test::createTest()
 
     CPPUNIT_ASSERT(modelSeriesCreator);
     const std::string& classname = modelSeriesCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ModelSeries") == classname );
-    const std::string& objectVersion =  modelSeriesCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ModelSeries") == classname );
+    const std::string& objectVersion = modelSeriesCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr modelSeries = modelSeriesCreator->create();
 
     const std::string& modelSeriesClassname = ::fwAtomsPatch::helper::getClassname(modelSeries);
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ModelSeries") == modelSeriesClassname );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ModelSeries") == modelSeriesClassname );
     const std::string& modelSeriesObjectVersion = ::fwAtomsPatch::helper::getVersion(modelSeries);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == modelSeriesObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == modelSeriesObjectVersion );
 
     CPPUNIT_ASSERT(modelSeries->getAttribute("reconstruction_db"));
 }
@@ -68,18 +68,19 @@ void ModelSeries1Test::copyTest()
     ModelSeries1 modelSeriesCreator;
 
     const std::string& classname = modelSeriesCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ModelSeries") == classname );
-    const std::string& objectVersion =  modelSeriesCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::ModelSeries") == classname );
+    const std::string& objectVersion = modelSeriesCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ModelSeries1* modelSeriesCreator2 = new ModelSeries1(modelSeriesCreator);
 
     CPPUNIT_ASSERT(modelSeriesCreator2);
     const std::string& classnameModelSeriesCreator2 = modelSeriesCreator2->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::ModelSeries") == classnameModelSeriesCreator2 );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string(
+                               "::fwMedData::ModelSeries") == classnameModelSeriesCreator2 );
 
-    const std::string& objectVersionModelSeriesCreator2 =  modelSeriesCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionModelSeriesCreator2 );
+    const std::string& objectVersionModelSeriesCreator2 = modelSeriesCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionModelSeriesCreator2 );
 
     delete(modelSeriesCreator2);
 }
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Patient1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Patient1Test.cpp
index eacf113..b5651df 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Patient1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Patient1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,16 +46,16 @@ void Patient1Test::createTest()
 
     CPPUNIT_ASSERT(patientCreator);
     const std::string& classname = patientCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Patient") == classname );
-    const std::string& objectVersion =  patientCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Patient") == classname );
+    const std::string& objectVersion = patientCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr patient = patientCreator->create();
 
     const std::string& patientClassname = ::fwAtomsPatch::helper::getClassname(patient);
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Patient") == patientClassname );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Patient") == patientClassname );
     const std::string& patientObjectVersion = ::fwAtomsPatch::helper::getVersion(patient);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == patientObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == patientObjectVersion );
 
     CPPUNIT_ASSERT(patient->getAttribute("name"));
     CPPUNIT_ASSERT(patient->getAttribute("patient_id"));
@@ -70,18 +70,18 @@ void Patient1Test::copyTest()
     Patient1 patientCreator;
 
     const std::string& classname = patientCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Patient") == classname );
-    const std::string& objectVersion =  patientCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Patient") == classname );
+    const std::string& objectVersion = patientCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     Patient1* patientCreator2 = new Patient1(patientCreator);
 
     CPPUNIT_ASSERT(patientCreator2);
     const std::string& classnamePatientCreator2 = patientCreator2->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Patient") == classnamePatientCreator2 );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Patient") == classnamePatientCreator2 );
 
-    const std::string& objectVersionPatientCreator2 =  patientCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionPatientCreator2 );
+    const std::string& objectVersionPatientCreator2 = patientCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionPatientCreator2 );
 
     delete(patientCreator2);
 }
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Series1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Series1Test.cpp
index a18771e..c3b20b8 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Series1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Series1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -46,16 +46,16 @@ void Series1Test::createTest()
 
     CPPUNIT_ASSERT(seriesCreator);
     const std::string& classname = seriesCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Series") == classname );
-    const std::string& objectVersion =  seriesCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Series") == classname );
+    const std::string& objectVersion = seriesCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr series = seriesCreator->create();
 
     const std::string& seriesClassname = ::fwAtomsPatch::helper::getClassname(series);
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Series") == seriesClassname );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Series") == seriesClassname );
     const std::string& seriesObjectVersion = ::fwAtomsPatch::helper::getVersion(series);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == seriesObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == seriesObjectVersion );
 
     CPPUNIT_ASSERT(series->getAttribute("patient"));
     CPPUNIT_ASSERT(series->getAttribute("study"));
@@ -76,18 +76,18 @@ void Series1Test::copyTest()
     Series1 seriesCreator;
 
     const std::string& classname = seriesCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Series") == classname );
-    const std::string& objectVersion =  seriesCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Series") == classname );
+    const std::string& objectVersion = seriesCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     Series1* seriesCreator2 = new Series1(seriesCreator);
 
     CPPUNIT_ASSERT(seriesCreator2);
     const std::string& classnameSeriesCreator2 = seriesCreator2->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Series") == classnameSeriesCreator2 );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Series") == classnameSeriesCreator2 );
 
-    const std::string& objectVersionSeriesCreator2 =  seriesCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionSeriesCreator2 );
+    const std::string& objectVersionSeriesCreator2 = seriesCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionSeriesCreator2 );
 
     delete(seriesCreator2);
 
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Study1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Study1Test.cpp
index 1f0eea8..0101a91 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Study1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/creator/fwMedData/Study1Test.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -47,16 +47,16 @@ void Study1Test::createTest()
 
     CPPUNIT_ASSERT(studyCreator);
     const std::string& classname = studyCreator->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Study") == classname );
-    const std::string& objectVersion =  studyCreator->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Study") == classname );
+    const std::string& objectVersion = studyCreator->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     ::fwAtoms::Object::sptr study = studyCreator->create();
 
     const std::string& studyClassname = ::fwAtomsPatch::helper::getClassname(study);
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Study") == studyClassname );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Study") == studyClassname );
     const std::string& studyObjectVersion = ::fwAtomsPatch::helper::getVersion(study);
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == studyObjectVersion );
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == studyObjectVersion );
 
     CPPUNIT_ASSERT(study->getAttribute("instance_uid"));
     CPPUNIT_ASSERT(study->getAttribute("date"));
@@ -75,18 +75,18 @@ void Study1Test::copyTest()
     Study1 studyCreator;
 
     const std::string& classname = studyCreator.getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Study") == classname );
-    const std::string& objectVersion =  studyCreator.getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersion );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Study") == classname );
+    const std::string& objectVersion = studyCreator.getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersion );
 
     Study1* studyCreator2 = new Study1(studyCreator);
 
     CPPUNIT_ASSERT(studyCreator2);
     const std::string& classnamestudyCreator2 = studyCreator2->getObjectClassname();
-    CPPUNIT_ASSERT_MESSAGE("Classname must be equal" , std::string("::fwMedData::Study") == classnamestudyCreator2 );
+    CPPUNIT_ASSERT_MESSAGE("Classname must be equal", std::string("::fwMedData::Study") == classnamestudyCreator2 );
 
-    const std::string& objectVersionstudyCreator2 =  studyCreator2->getObjectVersion();
-    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal" , std::string("1") == objectVersionstudyCreator2 );
+    const std::string& objectVersionstudyCreator2 = studyCreator2->getObjectVersion();
+    CPPUNIT_ASSERT_MESSAGE("ObjectVersion must be equal", std::string("1") == objectVersionstudyCreator2 );
 
     delete(studyCreator2);
 }
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.cpp
index 9dad11f..d5cc0a3 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.cpp
@@ -1,25 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp"
 
 #include <fwAtoms/Base.hpp>
+#include <fwAtoms/Boolean.hpp>
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
-#include <fwAtoms/Boolean.hpp>
 #include <fwAtoms/String.hpp>
-
-#include <fwAtomsPatch/helper/Object.hpp>
 #include <fwAtomsPatch/helper/functions.hpp>
+#include <fwAtomsPatch/helper/Object.hpp>
 
 #include <fwStructuralPatch/fwData/Acquisition/V1ToFwMedDataImageSeriesV1.hpp>
 
 #include <fwTest/Exception.hpp>
 
-#include "fwData/Acquisition/V1ToFwMedDataImageSeriesV1Test.hpp"
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Acquisition::V1ToFwMedDataImageSeriesV1Test );
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V1ToV2Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V1ToV2Test.cpp
new file mode 100644
index 0000000..4dc806b
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V1ToV2Test.cpp
@@ -0,0 +1,88 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/Base.hpp>
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/String.hpp>
+
+#include <fwAtomsPatch/helper/Object.hpp>
+#include <fwAtomsPatch/helper/functions.hpp>
+
+#include <fwStructuralPatch/fwData/Material/V1ToV2.hpp>
+
+#include <fwTest/Exception.hpp>
+
+#include "fwData/Material/V1ToV2Test.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Material::V1ToV2Test );
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+// force link for log
+::fwTest::Exception e("");
+
+//------------------------------------------------------------------------------
+
+void V1ToV2Test::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void V1ToV2Test::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void V1ToV2Test::applyPatchTest()
+{
+    ::fwAtoms::Object::sptr matObjV1 = ::fwAtoms::Object::New();
+    ::fwAtoms::Object::sptr matObjV2;
+
+    ::fwAtomsPatch::helper::setClassname(matObjV1, "::fwData::Material");
+    ::fwAtomsPatch::helper::setVersion(matObjV1, "1");
+
+    ::fwAtomsPatch::helper::Object helper(matObjV1);
+
+    helper.addAttribute("shading_mode", ::fwAtoms::String::New("PHONG"));
+    helper.addAttribute("representation_mode", ::fwAtoms::String::New("SURFACE"));
+    helper.addAttribute("options_mode", ::fwAtoms::String::New("STANDARD"));
+    helper.addAttribute("ambient", ::fwAtoms::Object::sptr());
+    helper.addAttribute("diffuse", ::fwAtoms::Object::sptr());
+
+    matObjV2 = ::fwAtoms::Object::dynamicCast(matObjV1->clone());
+
+    ::fwAtomsPatch::IPatch::NewVersionsType newVersions;
+    newVersions[matObjV1] = matObjV2;
+
+
+
+    ::fwStructuralPatch::fwData::Material::V1ToV2::sptr mat1ToMat2Patch;
+    mat1ToMat2Patch = ::fwStructuralPatch::fwData::Material::V1ToV2::New();
+    CPPUNIT_ASSERT_NO_THROW(mat1ToMat2Patch->apply(matObjV1, matObjV2, newVersions));
+
+    CPPUNIT_ASSERT(matObjV2);
+    CPPUNIT_ASSERT(matObjV2->getAttribute("diffuse_texture") == ::fwAtoms::Object::sptr());
+    CPPUNIT_ASSERT(matObjV2->getAttribute("diffuse_texture_filtering"));
+    CPPUNIT_ASSERT(matObjV2->getAttribute("diffuse_texture_wrapping"));
+}
+
+//------------------------------------------------------------------------------
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V2ToV3Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V2ToV3Test.cpp
new file mode 100644
index 0000000..cfad5fb
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V2ToV3Test.cpp
@@ -0,0 +1,89 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/Base.hpp>
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/String.hpp>
+
+#include <fwAtomsPatch/helper/Object.hpp>
+#include <fwAtomsPatch/helper/functions.hpp>
+
+#include <fwStructuralPatch/fwData/Material/V2ToV3.hpp>
+
+#include <fwTest/Exception.hpp>
+
+#include "fwData/Material/V2ToV3Test.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Material::V2ToV3Test );
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+//------------------------------------------------------------------------------
+
+void V2ToV3Test::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void V2ToV3Test::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void V2ToV3Test::applyPatchTest()
+{
+    ::fwAtoms::Object::sptr matObjV2 = ::fwAtoms::Object::New();
+    ::fwAtoms::Object::sptr matObjV3;
+
+    ::fwAtomsPatch::helper::setClassname(matObjV2, "::fwData::Material");
+    ::fwAtomsPatch::helper::setVersion(matObjV2, "2");
+
+    ::fwAtomsPatch::helper::Object helper(matObjV2);
+
+    helper.addAttribute("shading_mode", ::fwAtoms::String::New("PHONG"));
+    helper.addAttribute("representation_mode", ::fwAtoms::String::New("SURFACE"));
+    helper.addAttribute("options_mode", ::fwAtoms::String::New("STANDARD"));
+    helper.addAttribute("ambient", ::fwAtoms::Object::sptr());
+    helper.addAttribute("diffuse", ::fwAtoms::Object::sptr());
+    helper.addAttribute("diffuse_texture", ::fwAtoms::Object::sptr());
+    helper.addAttribute("diffuse_texture_filtering", ::fwAtoms::String::New("NEAREST"));
+    helper.addAttribute("diffuse_texture_wrapping", ::fwAtoms::String::New("CLAMP"));
+
+    matObjV3 = ::fwAtoms::Object::dynamicCast(matObjV2->clone());
+
+    ::fwAtomsPatch::IPatch::NewVersionsType newVersions;
+    newVersions[matObjV2] = matObjV3;
+
+
+
+    ::fwStructuralPatch::fwData::Material::V2ToV3::sptr mat2ToMat3Patch;
+    mat2ToMat3Patch = ::fwStructuralPatch::fwData::Material::V2ToV3::New();
+    CPPUNIT_ASSERT_NO_THROW(mat2ToMat3Patch->apply(matObjV2, matObjV3, newVersions));
+
+    CPPUNIT_ASSERT(matObjV3);
+    CPPUNIT_ASSERT(matObjV3->getAttribute("lighting"));
+    ::fwAtoms::Boolean::sptr lighting = ::fwAtoms::Boolean::dynamicCast(matObjV3->getAttribute("lighting"));
+    CPPUNIT_ASSERT(lighting->getValue() == true);
+}
+
+//------------------------------------------------------------------------------
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V3toV4Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V3toV4Test.cpp
new file mode 100644
index 0000000..f67c45b
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V3toV4Test.cpp
@@ -0,0 +1,159 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/Base.hpp>
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+#include <fwAtoms/Sequence.hpp>
+#include <fwAtoms/String.hpp>
+
+#include <fwAtomsPatch/helper/Object.hpp>
+#include <fwAtomsPatch/helper/functions.hpp>
+
+#include <fwStructuralPatch/fwData/Material/V3ToV4.hpp>
+
+#include <fwTest/Exception.hpp>
+
+#include "fwData/Material/V3ToV4Test.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Material::V3ToV4Test );
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+//------------------------------------------------------------------------------
+
+void V3ToV4Test::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void V3ToV4Test::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void V3ToV4Test::applyPatchTest()
+{
+    ::fwAtoms::Object::sptr matObjV3 = ::fwAtoms::Object::New();
+    ::fwAtoms::Object::sptr matObjV4;
+
+    ::fwAtomsPatch::helper::setClassname(matObjV3, "::fwData::Material");
+    ::fwAtomsPatch::helper::setVersion(matObjV3, "3");
+
+    ::fwAtomsPatch::helper::Object helper(matObjV3);
+
+    ::fwAtoms::Sequence::sptr ambientSeq = ::fwAtoms::Sequence::New();
+    ambientSeq->push_back(::fwAtoms::Numeric::New(1.f));
+    ambientSeq->push_back(::fwAtoms::Numeric::New(0.5f));
+    ambientSeq->push_back(::fwAtoms::Numeric::New(0.6f));
+    ambientSeq->push_back(::fwAtoms::Numeric::New(0.12f));
+    ::fwAtoms::Object::sptr ambient = ::fwAtoms::Object::New();
+    ambient->setAttribute("rgba", ambientSeq);
+
+    ::fwAtoms::Sequence::sptr diffuseSeq = ::fwAtoms::Sequence::New();
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.33f));
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.32f));
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.2f));
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.125f));
+    ::fwAtoms::Object::sptr diffuse = ::fwAtoms::Object::New();
+    diffuse->setAttribute("rgba", diffuseSeq);
+
+    helper.addAttribute("shading_mode", ::fwAtoms::String::New("PHONG"));
+    helper.addAttribute("representation_mode", ::fwAtoms::String::New("SURFACE"));
+    helper.addAttribute("options_mode", ::fwAtoms::String::New("STANDARD"));
+    helper.addAttribute("ambient", ambient);
+    helper.addAttribute("diffuse", diffuse);
+    helper.addAttribute("diffuse_texture", ::fwAtoms::Object::sptr());
+    helper.addAttribute("diffuse_texture_filtering", ::fwAtoms::String::New("NEAREST"));
+    helper.addAttribute("diffuse_texture_wrapping", ::fwAtoms::String::New("CLAMP"));
+    helper.addAttribute("lighting", ::fwAtoms::Boolean::New(false));
+
+    // 1. Check that if lighting is false, then shading_mode is set to AMBIENT
+    // 2. Check that diffuse is replaced by previous ambient and ambient is 0.05f
+    {
+        matObjV4 = ::fwAtoms::Object::dynamicCast(matObjV3->clone());
+
+        ::fwAtomsPatch::IPatch::NewVersionsType newVersions;
+        newVersions[matObjV3] = matObjV4;
+
+        ::fwStructuralPatch::fwData::Material::V3ToV4::sptr mat2ToMat3Patch;
+        mat2ToMat3Patch = ::fwStructuralPatch::fwData::Material::V3ToV4::New();
+        CPPUNIT_ASSERT_NO_THROW(mat2ToMat3Patch->apply(matObjV3, matObjV4, newVersions));
+
+        CPPUNIT_ASSERT(matObjV4);
+        CPPUNIT_ASSERT(!matObjV4->getAttribute("lighting"));
+        ::fwAtoms::String::sptr shading = ::fwAtoms::String::dynamicCast(matObjV4->getAttribute("shading_mode"));
+        CPPUNIT_ASSERT(shading->getValue() == "AMBIENT");
+
+        ::fwAtoms::Object::sptr ambientV4 = ::fwAtoms::Object::dynamicCast(matObjV4->getAttribute("ambient"));
+        CPPUNIT_ASSERT(ambientV4);
+        ::fwAtoms::Sequence::sptr ambientSeqV4 = ::fwAtoms::Sequence::dynamicCast(ambientV4->getAttribute("rgba"));
+        CPPUNIT_ASSERT(ambientSeqV4);
+
+        ::fwAtoms::Object::sptr diffuseV4 = ::fwAtoms::Object::dynamicCast(matObjV4->getAttribute("diffuse"));
+        CPPUNIT_ASSERT(diffuseV4);
+        ::fwAtoms::Sequence::sptr diffuseSeqV4 = ::fwAtoms::Sequence::dynamicCast(diffuseV4->getAttribute("rgba"));
+        CPPUNIT_ASSERT(diffuseSeqV4);
+
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[0])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqV4)[0])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[1])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqV4)[1])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[2])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqV4)[2])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[3])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqV4)[3])->getValue<float>());
+
+        CPPUNIT_ASSERT_EQUAL(0.05f,
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqV4)[0])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(0.05f,
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqV4)[1])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(0.05f,
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqV4)[2])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(1.f,
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqV4)[3])->getValue<float>());
+    }
+
+    // Check that if lighting is true, then shading_mode is not modifed
+    {
+        helper.replaceAttribute("lighting", ::fwAtoms::Boolean::New(true));
+
+        matObjV4 = ::fwAtoms::Object::dynamicCast(matObjV3->clone());
+
+        ::fwAtomsPatch::IPatch::NewVersionsType newVersions;
+        newVersions[matObjV3] = matObjV4;
+
+        ::fwStructuralPatch::fwData::Material::V3ToV4::sptr mat2ToMat3Patch;
+        mat2ToMat3Patch = ::fwStructuralPatch::fwData::Material::V3ToV4::New();
+        CPPUNIT_ASSERT_NO_THROW(mat2ToMat3Patch->apply(matObjV3, matObjV4, newVersions));
+
+        CPPUNIT_ASSERT(matObjV4);
+        CPPUNIT_ASSERT(!matObjV4->getAttribute("lighting"));
+        ::fwAtoms::String::sptr shading = ::fwAtoms::String::dynamicCast(matObjV4->getAttribute("shading_mode"));
+        CPPUNIT_ASSERT(shading->getValue() == "PHONG");
+    }
+
+}
+
+//------------------------------------------------------------------------------
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V4toV3Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V4toV3Test.cpp
new file mode 100644
index 0000000..164232a
--- /dev/null
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Material/V4toV3Test.cpp
@@ -0,0 +1,170 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwAtoms/Base.hpp>
+#include <fwAtoms/Object.hpp>
+#include <fwAtoms/Boolean.hpp>
+#include <fwAtoms/Numeric.hpp>
+#include <fwAtoms/Numeric.hxx>
+#include <fwAtoms/Sequence.hpp>
+#include <fwAtoms/String.hpp>
+
+#include <fwAtomsPatch/helper/Object.hpp>
+#include <fwAtomsPatch/helper/functions.hpp>
+
+#include <fwStructuralPatch/fwData/Material/V4ToV3.hpp>
+
+#include <fwTest/Exception.hpp>
+
+#include "fwData/Material/V4ToV3Test.hpp"
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Material::V4ToV3Test );
+
+namespace fwStructuralPatch
+{
+namespace ut
+{
+namespace fwData
+{
+namespace Material
+{
+
+//------------------------------------------------------------------------------
+
+void V4ToV3Test::setUp()
+{
+    // Set up context before running a test.
+}
+
+//------------------------------------------------------------------------------
+
+void V4ToV3Test::tearDown()
+{
+    // Clean up after the test run.
+}
+
+//------------------------------------------------------------------------------
+
+void V4ToV3Test::applyPatchTest()
+{
+    ::fwAtoms::Object::sptr origObj = ::fwAtoms::Object::New();
+    ::fwAtoms::Object::sptr targetObj;
+
+    ::fwAtomsPatch::helper::setClassname(origObj, "::fwData::Material");
+    ::fwAtomsPatch::helper::setVersion(origObj, "4");
+
+    ::fwAtomsPatch::helper::Object helper(origObj);
+
+    ::fwAtoms::Sequence::sptr ambientSeq = ::fwAtoms::Sequence::New();
+    ambientSeq->push_back(::fwAtoms::Numeric::New(1.f));
+    ambientSeq->push_back(::fwAtoms::Numeric::New(0.5f));
+    ambientSeq->push_back(::fwAtoms::Numeric::New(0.6f));
+    ambientSeq->push_back(::fwAtoms::Numeric::New(0.12f));
+    ::fwAtoms::Object::sptr ambient = ::fwAtoms::Object::New();
+    ambient->setAttribute("rgba", ambientSeq);
+
+    ::fwAtoms::Sequence::sptr diffuseSeq = ::fwAtoms::Sequence::New();
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.33f));
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.32f));
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.2f));
+    diffuseSeq->push_back(::fwAtoms::Numeric::New(0.125f));
+    ::fwAtoms::Object::sptr diffuse = ::fwAtoms::Object::New();
+    diffuse->setAttribute("rgba", diffuseSeq);
+
+    helper.addAttribute("shading_mode", ::fwAtoms::String::New("AMBIENT"));
+    helper.addAttribute("representation_mode", ::fwAtoms::String::New("SURFACE"));
+    helper.addAttribute("options_mode", ::fwAtoms::String::New("CELLS_NORMALS"));
+    helper.addAttribute("ambient", ambient);
+    helper.addAttribute("diffuse", diffuse);
+    helper.addAttribute("diffuse_texture", ::fwAtoms::Object::sptr());
+    helper.addAttribute("diffuse_texture_filtering", ::fwAtoms::String::New("NEAREST"));
+    helper.addAttribute("diffuse_texture_wrapping", ::fwAtoms::String::New("CLAMP"));
+
+    // 1. if shading_mode is set to AMBIENT, then lighting is set to false
+    // 2. Check that diffuse is swapped by previous ambient
+    // 3. Check that option_mode is set to NORMALS
+    {
+        targetObj = ::fwAtoms::Object::dynamicCast(origObj->clone());
+
+        ::fwAtomsPatch::IPatch::NewVersionsType newVersions;
+        newVersions[origObj] = targetObj;
+
+        ::fwStructuralPatch::fwData::Material::V4ToV3::sptr patch;
+        patch = ::fwStructuralPatch::fwData::Material::V4ToV3::New();
+        CPPUNIT_ASSERT_NO_THROW(patch->apply(origObj, targetObj, newVersions));
+
+        CPPUNIT_ASSERT(targetObj);
+        CPPUNIT_ASSERT(targetObj->getAttribute("lighting"));
+        ::fwAtoms::Boolean::sptr lighting = ::fwAtoms::Boolean::dynamicCast(targetObj->getAttribute("lighting"));
+        CPPUNIT_ASSERT(lighting);
+        CPPUNIT_ASSERT_EQUAL(false, lighting->getValue());
+
+        ::fwAtoms::String::sptr shading = ::fwAtoms::String::dynamicCast(targetObj->getAttribute("shading_mode"));
+        CPPUNIT_ASSERT(shading->getValue() == "PHONG");
+
+        ::fwAtoms::Object::sptr ambientTarget = ::fwAtoms::Object::dynamicCast(targetObj->getAttribute("ambient"));
+        CPPUNIT_ASSERT(ambientTarget);
+        ::fwAtoms::Sequence::sptr ambientSeqTarget = ::fwAtoms::Sequence::dynamicCast(ambientTarget->getAttribute(
+                                                                                          "rgba"));
+        CPPUNIT_ASSERT(ambientSeqTarget);
+
+        ::fwAtoms::Object::sptr diffuseTarget = ::fwAtoms::Object::dynamicCast(targetObj->getAttribute("diffuse"));
+        CPPUNIT_ASSERT(diffuseTarget);
+        ::fwAtoms::Sequence::sptr diffuseSeqTarget = ::fwAtoms::Sequence::dynamicCast(diffuseTarget->getAttribute(
+                                                                                          "rgba"));
+        CPPUNIT_ASSERT(diffuseSeqTarget);
+
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[0])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqTarget)[0])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[1])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqTarget)[1])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[2])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqTarget)[2])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeq)[3])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeqTarget)[3])->getValue<float>());
+
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeq)[0])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqTarget)[0])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeq)[1])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqTarget)[1])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeq)[2])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqTarget)[2])->getValue<float>());
+        CPPUNIT_ASSERT_EQUAL(std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*diffuseSeq)[3])->getValue<float>(),
+                             std::dynamic_pointer_cast< ::fwAtoms::Numeric >((*ambientSeqTarget)[3])->getValue<float>());
+
+        ::fwAtoms::String::sptr option = ::fwAtoms::String::dynamicCast(targetObj->getAttribute("options_mode"));
+        CPPUNIT_ASSERT_EQUAL(std::string("NORMALS"), option->getValue());
+
+    }
+
+    // if shading_mode is not "AMBIENT", the lighting is true
+    {
+        helper.replaceAttribute("shading_mode", ::fwAtoms::String::New("PHONG"));
+
+        targetObj = ::fwAtoms::Object::dynamicCast(origObj->clone());
+
+        ::fwAtomsPatch::IPatch::NewVersionsType newVersions;
+        newVersions[origObj] = targetObj;
+
+        ::fwStructuralPatch::fwData::Material::V4ToV3::sptr patch;
+        patch = ::fwStructuralPatch::fwData::Material::V4ToV3::New();
+        CPPUNIT_ASSERT_NO_THROW(patch->apply(origObj, targetObj, newVersions));
+
+        CPPUNIT_ASSERT(targetObj);
+        CPPUNIT_ASSERT(targetObj->getAttribute("lighting"));
+        ::fwAtoms::Boolean::sptr lighting = ::fwAtoms::Boolean::dynamicCast(targetObj->getAttribute("lighting"));
+        CPPUNIT_ASSERT(lighting);
+        CPPUNIT_ASSERT_EQUAL(true, lighting->getValue());
+    }
+
+}
+
+//------------------------------------------------------------------------------
+} //namespace Material
+} //namespace fwData
+} //namespace ut
+} //namespace fwStructuralPatch
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Patient/V1ToFwMedDataPatientV1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Patient/V1ToFwMedDataPatientV1Test.cpp
index 5bfc868..f62e149 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Patient/V1ToFwMedDataPatientV1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Patient/V1ToFwMedDataPatientV1Test.cpp
@@ -1,26 +1,25 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+
+#include "fwData/Patient/V1ToFwMedDataPatientV1Test.hpp"
 
 #include <fwAtoms/Base.hpp>
+#include <fwAtoms/Boolean.hpp>
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
-#include <fwAtoms/Boolean.hpp>
 #include <fwAtoms/String.hpp>
 
-#include <fwAtomsPatch/helper/Object.hpp>
 #include <fwAtomsPatch/helper/functions.hpp>
+#include <fwAtomsPatch/helper/Object.hpp>
 
 #include <fwStructuralPatch/fwData/Patient/V1ToFwMedDataPatientV1.hpp>
 
 #include <fwTest/Exception.hpp>
 
-#include "fwData/Patient/V1ToFwMedDataPatientV1Test.hpp"
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Patient::V1ToFwMedDataPatientV1Test );
 
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Reconstruction/V1ToV2Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Reconstruction/V1ToV2Test.cpp
index 9772529..83361cd 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Reconstruction/V1ToV2Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Reconstruction/V1ToV2Test.cpp
@@ -1,11 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
 #include <fwAtoms/Base.hpp>
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Boolean.hpp>
@@ -83,7 +81,7 @@ void V1ToV2Test::applyPatchTest()
     v1Attributs.push_back("type_3D");
     v1Attributs.push_back("db_id");
 
-    BOOST_FOREACH(std::string attribut, v1Attributs)
+    for(std::string attribut :  v1Attributs)
     {
         helper.addAttribute(attribut, ::fwAtoms::String::New(""));
     }
@@ -107,9 +105,9 @@ void V1ToV2Test::applyPatchTest()
     CPPUNIT_ASSERT(recObjV2->getAttribute("image"));
     CPPUNIT_ASSERT(recObjV2->getAttribute("mesh"));
 
-    BOOST_FOREACH(std::string attribut, v1Attributs)
+    for(std::string attribut :  v1Attributs)
     {
-        CPPUNIT_ASSERT_MESSAGE("'" + attribut + "' attribut must not exist", ! recObjV2->getAttribute(attribut));
+        CPPUNIT_ASSERT_MESSAGE("'" + attribut + "' attribut must not exist", !recObjV2->getAttribute(attribut));
     }
 }
 
diff --git a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Study/V1ToFwMedDataStudyV1Test.cpp b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Study/V1ToFwMedDataStudyV1Test.cpp
index 4d5cb6c..0f1a7d0 100644
--- a/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Study/V1ToFwMedDataStudyV1Test.cpp
+++ b/SrcLib/patch/fwStructuralPatch/test/tu/src/fwData/Study/V1ToFwMedDataStudyV1Test.cpp
@@ -1,26 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwData/Study/V1ToFwMedDataStudyV1Test.hpp"
 
 #include <fwAtoms/Base.hpp>
+#include <fwAtoms/Boolean.hpp>
 #include <fwAtoms/Object.hpp>
 #include <fwAtoms/Object.hxx>
-#include <fwAtoms/Boolean.hpp>
 #include <fwAtoms/String.hpp>
 
-#include <fwAtomsPatch/helper/Object.hpp>
 #include <fwAtomsPatch/helper/functions.hpp>
+#include <fwAtomsPatch/helper/Object.hpp>
 
 #include <fwStructuralPatch/fwData/Study/V1ToFwMedDataStudyV1.hpp>
 
 #include <fwTest/Exception.hpp>
 
-#include "fwData/Study/V1ToFwMedDataStudyV1Test.hpp"
-
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwStructuralPatch::ut::fwData::Study::V1ToFwMedDataStudyV1Test );
 
diff --git a/SrcLib/tests/fwTest/CMakeLists.txt b/SrcLib/tests/fwTest/CMakeLists.txt
index 7d06fe6..62692c0 100644
--- a/SrcLib/tests/fwTest/CMakeLists.txt
+++ b/SrcLib/tests/fwTest/CMakeLists.txt
@@ -1,16 +1,14 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwComEd
-    fwCore
-    fwData
-    fwDataTools
-    fwMath
-    fwTools
-)
-
 
-find_package (Boost COMPONENTS thread filesystem REQUIRED)
 find_package(CppUnit REQUIRED)
+find_package(Boost COMPONENTS chrono REQUIRED)
 
-fwForwardInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwForwardInclude(
+    ${Boost_INCLUDE_DIRS}
+    ${CPPUNIT_INCLUDE_DIR}
+)
+
+fwLink(
+    ${CPPUNIT_LIBRARY}
+    ${Boost_CHRONO_LIBRARY}
+)
diff --git a/SrcLib/tests/fwTest/COPYING b/SrcLib/tests/fwTest/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/tests/fwTest/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/tests/fwTest/COPYING.LESSER b/SrcLib/tests/fwTest/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/tests/fwTest/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/tests/fwTest/Properties.cmake b/SrcLib/tests/fwTest/Properties.cmake
index c42ff4b..72a815e 100644
--- a/SrcLib/tests/fwTest/Properties.cmake
+++ b/SrcLib/tests/fwTest/Properties.cmake
@@ -2,6 +2,14 @@
 set( NAME fwTest )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwComEd fwCore fwData fwDataCamp fwDataTools fwMath fwMedData fwTools )
+set( DEPENDENCIES
+    fwCore
+    fwData
+    fwDataCamp
+    fwDataTools
+    fwMath
+    fwMedData
+    fwTools
+)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/tests/fwTest/bin/build.options b/SrcLib/tests/fwTest/bin/build.options
deleted file mode 100644
index 18cda19..0000000
--- a/SrcLib/tests/fwTest/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE = 'shared'
-VERSION = '0.1'
-
-USE = ['boostFilesystem', 'cppunit']
-LIB = ['fwTools_0-1',
-       'fwCore_0-1',
-       'fwData_0-1',
-       'fwMedData_0-1',
-       'fwComEd_0-1',
-       'fwDataTools_0-1'
-      ]
diff --git a/SrcLib/tests/fwTest/include/fwTest/Data.hpp b/SrcLib/tests/fwTest/include/fwTest/Data.hpp
index 5e1a5f8..3022158 100644
--- a/SrcLib/tests/fwTest/include/fwTest/Data.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/Data.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTEST__DATA_HPP__
-#define __FWTEST__DATA_HPP__
-
-#include <boost/filesystem/path.hpp>
+#ifndef __FWTEST_DATA_HPP__
+#define __FWTEST_DATA_HPP__
 
 #include "fwTest/Exception.hpp"
 #include "fwTest/config.hpp"
 
+#include <boost/filesystem/path.hpp>
+
 namespace fwTest
 {
 
@@ -26,4 +26,4 @@ public:
 
 } // namespace fwTest
 
-#endif // __FWTEST__DATA_HPP__
+#endif // __FWTEST_DATA_HPP__
diff --git a/SrcLib/tests/fwTest/include/fwTest/DicomReaderTest.hpp b/SrcLib/tests/fwTest/include/fwTest/DicomReaderTest.hpp
index 19195b9..875952e 100644
--- a/SrcLib/tests/fwTest/include/fwTest/DicomReaderTest.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/DicomReaderTest.hpp
@@ -1,18 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTEST__DICOMREADERTEST_HPP__
-#define __FWTEST__DICOMREADERTEST_HPP__
+#ifndef __FWTEST_DICOMREADERTEST_HPP__
+#define __FWTEST_DICOMREADERTEST_HPP__
 
-#include "fwTest/config.hpp"
+#include <fwMedData/ImageSeries.hpp>
 
-namespace fwMedData
-{
-    class ImageSeries;
-}
+#include "fwTest/config.hpp"
 
 namespace fwTest
 {
@@ -20,7 +17,7 @@ namespace fwTest
 /**
  * @class   DicomReaderTest
  * @brief   This class defines some tools to check dicom manipulations during tests
- * 
+ *
  * @date    2007-2012.
  */
 class FWTEST_CLASS_API DicomReaderTest
@@ -36,6 +33,11 @@ public:
      * its represents a CT image of a knee ( 400 slices ).
      */
     FWTEST_API static bool checkSeriesACHGenou( const SPTR(::fwMedData::ImageSeries) &series );
+
+    /**
+     * @brief This method is the same as checkSeriesACHGenou but it checks trimmed strings instead of even sized strings
+     */
+    FWTEST_API static bool checkSeriesACHGenouTrimmed( const SPTR(::fwMedData::ImageSeries) &series );
 };
 
 
@@ -43,4 +45,4 @@ public:
 
 } // namespace fwTest
 
-#endif // __FWTEST__DICOMREADERTEST_HPP__
+#endif // __FWTEST_DICOMREADERTEST_HPP__
diff --git a/SrcLib/tests/fwTest/include/fwTest/Exception.hpp b/SrcLib/tests/fwTest/include/fwTest/Exception.hpp
index b434f75..3a8e251 100644
--- a/SrcLib/tests/fwTest/include/fwTest/Exception.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/Exception.hpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTEST__EXCEPTION_HPP__
-#define __FWTEST__EXCEPTION_HPP__
+#ifndef __FWTEST_EXCEPTION_HPP__
+#define __FWTEST_EXCEPTION_HPP__
+
+#include "fwTest/config.hpp"
 
 #include <stdexcept>
 #include <string>
 
-#include "fwTest/config.hpp"
-
 namespace fwTest
 {
 
@@ -29,4 +29,4 @@ public:
 
 } // namespace fwTest
 
-#endif // __FWTEST__EXCEPTION_HPP__
+#endif // __FWTEST_EXCEPTION_HPP__
diff --git a/SrcLib/tests/fwTest/include/fwTest/File.hpp b/SrcLib/tests/fwTest/include/fwTest/File.hpp
index cf9995e..b7a5231 100644
--- a/SrcLib/tests/fwTest/include/fwTest/File.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/File.hpp
@@ -1,27 +1,28 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWTEST__FILE_HPP__
-#define __FWTEST__FILE_HPP__
-
-#include <boost/filesystem/path.hpp>
+#ifndef __FWTEST_FILE_HPP__
+#define __FWTEST_FILE_HPP__
 
 #include "fwTest/Exception.hpp"
 #include "fwTest/config.hpp"
 
+#include <boost/filesystem/path.hpp>
+
 namespace fwTest
 {
 
 class FWTEST_CLASS_API File
 {
 public:
-    FWTEST_API static bool contentEquals(const ::boost::filesystem::path &lfile, const ::boost::filesystem::path &rfile);
+    FWTEST_API static bool contentEquals(const ::boost::filesystem::path &lfile,
+                                         const ::boost::filesystem::path &rfile);
 
 };
 
 } // namespace fwTest
 
-#endif // __FWTEST__FILE_HPP__
+#endif // __FWTEST_FILE_HPP__
diff --git a/SrcLib/tests/fwTest/include/fwTest/config.hpp b/SrcLib/tests/fwTest/include/fwTest/config.hpp
deleted file mode 100644
index d6fb9a9..0000000
--- a/SrcLib/tests/fwTest/include/fwTest/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
- 
-
-#ifndef _FWTEST_CONFIG_HPP_
-#define _FWTEST_CONFIG_HPP_
-
-    #ifdef _WIN32
-
-        #ifdef FWTEST_EXPORTS
-            #define FWTEST_API __declspec(dllexport)
-        #else
-            #define FWTEST_API __declspec(dllimport)
-        #endif
-
-        #define FWTEST_CLASS_API
-
-        #pragma warning(disable: 4290)
-
-    #elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-        #ifdef FWTEST_EXPORTS
-            #define FWTEST_API __attribute__ ((visibility("default")))
-            #define FWTEST_CLASS_API __attribute__ ((visibility("default")))
-        #else
-            #define FWTEST_API __attribute__ ((visibility("hidden")))
-            #define FWTEST_CLASS_API __attribute__ ((visibility("hidden")))
-        #endif
-
-    #else
-
-        #define FWTEST_API
-        #define FWTEST_CLASS_API
-
-    #endif
-
-#endif //FWTEST_API
-
diff --git a/SrcLib/tests/fwTest/include/fwTest/generator/Image.hpp b/SrcLib/tests/fwTest/include/fwTest/generator/Image.hpp
index 6ea71bb..5d93031 100644
--- a/SrcLib/tests/fwTest/include/fwTest/generator/Image.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/generator/Image.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,17 +7,18 @@
 #ifndef __FWTEST_GENERATOR_IMAGE_HPP__
 #define __FWTEST_GENERATOR_IMAGE_HPP__
 
-#include <fwCore/base.hpp>
+#include "fwTest/config.hpp"
 
-#include <fwTools/Type.hpp>
+#include <fwCore/base.hpp>
 
 #include <fwData/Image.hpp>
 
+#include <fwDataTools/helper/Array.hpp>
+
 #include <fwMath/Compare.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwTools/Type.hpp>
 
-#include "fwTest/config.hpp"
 
 namespace fwTest
 {
@@ -27,12 +28,11 @@ namespace generator
 
 /**
  * @brief   This class contains helper to generate images.
- * @class   Image
  */
 class Image
 {
 
-public :
+public:
 
     /**
      * @brief Initialize 'rand' seed
@@ -48,10 +48,10 @@ public :
      * @param type      image type
      */
     FWTEST_API static void generateImage(::fwData::Image::sptr image,
-                                              ::fwData::Image::SizeType size,
-                                              std::vector<double> spacing,
-                                              std::vector<double> origin,
-                                              ::fwTools::Type type);
+                                         ::fwData::Image::SizeType size,
+                                         std::vector<double> spacing,
+                                         std::vector<double> origin,
+                                         ::fwTools::Type type);
 
     /// Generate an image with random information (size, spacing, ...). Buffer is filled with random values.
     FWTEST_API static void generateRandomImage(::fwData::Image::sptr image, ::fwTools::Type type);
@@ -60,7 +60,7 @@ public :
     FWTEST_API static void randomizeArray(::fwData::Array::sptr array);
 
     /// Creates an Array with the given type and size and fills buffer with random values.
-    FWTEST_API static ::fwData::Array::sptr createRandomizedArray(const std::string &type,
+    FWTEST_API static ::fwData::Array::sptr createRandomizedArray(const std::string& type,
                                                                   ::fwData::Array::SizeType sizes);
 
 };
diff --git a/SrcLib/tests/fwTest/include/fwTest/generator/Mesh.hpp b/SrcLib/tests/fwTest/include/fwTest/generator/Mesh.hpp
index 5db86d0..2860d68 100644
--- a/SrcLib/tests/fwTest/include/fwTest/generator/Mesh.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/generator/Mesh.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,15 +7,15 @@
 #ifndef __FWTEST_GENERATOR_MESH_HPP__
 #define __FWTEST_GENERATOR_MESH_HPP__
 
+#include "fwTest/config.hpp"
+
 #include <fwCore/base.hpp>
 
 #include <fwData/Mesh.hpp>
 
-#include <fwComEd/helper/Mesh.hpp>
-
 #include <fwDataTools/Vector.hxx>
+#include <fwDataTools/helper/Mesh.hpp>
 
-#include "fwTest/config.hpp"
 
 namespace fwTest
 {
@@ -25,12 +25,11 @@ namespace generator
 
 /**
  * @brief   This helper generates a mesh using specified structure (quad or triangle).
- * @class   Mesh
  */
 class Mesh
 {
 
-public :
+public:
 
     typedef std::map< ::fwDataTools::Point, ::fwData::Mesh::Id> PointsMapType;
 
@@ -99,8 +98,8 @@ public :
 protected:
 
     FWTEST_API static ::fwData::Mesh::Id addPoint(::fwData::Mesh::PointValueType* pt,
-                                                       ::fwComEd::helper::Mesh::sptr meshHelper,
-                                                       PointsMapType& points);
+                                                  ::fwDataTools::helper::Mesh::sptr meshHelper,
+                                                  PointsMapType& points);
 
 
 };
diff --git a/SrcLib/tests/fwTest/include/fwTest/generator/Object.hpp b/SrcLib/tests/fwTest/include/fwTest/generator/Object.hpp
index 961608c..559c8e2 100644
--- a/SrcLib/tests/fwTest/include/fwTest/generator/Object.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/generator/Object.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,6 +7,8 @@
 #ifndef __FWTEST_GENERATOR_OBJECT_HPP__
 #define __FWTEST_GENERATOR_OBJECT_HPP__
 
+#include "fwTest/config.hpp"
+
 #include <fwCore/base.hpp>
 
 #include <fwData/Array.hpp>
@@ -26,7 +28,6 @@
 #include <fwData/StructureTraitsDictionary.hpp>
 #include <fwData/TransferFunction.hpp>
 
-#include "fwTest/config.hpp"
 
 namespace fwTest
 {
diff --git a/SrcLib/tests/fwTest/include/fwTest/generator/SeriesDB.hpp b/SrcLib/tests/fwTest/include/fwTest/generator/SeriesDB.hpp
index e305210..8cf36d6 100644
--- a/SrcLib/tests/fwTest/include/fwTest/generator/SeriesDB.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/generator/SeriesDB.hpp
@@ -1,31 +1,32 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWDTEST_GENERATOR_SERIESDB_HPP__
-#define __FWDTEST_GENERATOR_SERIESDB_HPP__
+#ifndef __FWTEST_GENERATOR_SERIESDB_HPP__
+#define __FWTEST_GENERATOR_SERIESDB_HPP__
+
+#include "fwTest/config.hpp"
 
 #include <fwCore/base.hpp>
 
-#include "fwTest/config.hpp"
 
 namespace fwData
 {
-    class Reconstruction;
+class Reconstruction;
 }
 
 namespace fwMedData
 {
-    class SeriesDB;
-    class Series;
-    class Patient;
-    class Study;
-    class Equipment;
-    class ImageSeries;
-    class ModelSeries;
-    class ActivitySeries;
+class SeriesDB;
+class Series;
+class Patient;
+class Study;
+class Equipment;
+class ImageSeries;
+class ModelSeries;
+class ActivitySeries;
 }
 
 namespace fwTest
@@ -42,7 +43,7 @@ namespace generator
 class SeriesDB
 {
 
-public :
+public:
 
     /**
      * @brief Creates a SeriesDB.
@@ -52,8 +53,8 @@ public :
      * @return The created SeriesDB
      */
     FWTEST_API static SPTR(::fwMedData::SeriesDB) createSeriesDB(const unsigned char nbImgSeries,
-                                                     const unsigned char nbModelSeries,
-                                                     const unsigned char nbActivitySeries);
+                                                                 const unsigned char nbModelSeries,
+                                                                 const unsigned char nbActivitySeries);
 
 
     /// Returns a Patient with dummy informations
@@ -93,4 +94,4 @@ public :
 } // namespace generator
 } // namespace fwTest
 
-#endif // __FWDTEST_GENERATOR_SERIESDB_HPP__
+#endif // __FWTEST_GENERATOR_SERIESDB_HPP__
diff --git a/SrcLib/tests/fwTest/include/fwTest/helper/Thread.hpp b/SrcLib/tests/fwTest/include/fwTest/helper/Thread.hpp
index b562219..4c57244 100644
--- a/SrcLib/tests/fwTest/include/fwTest/helper/Thread.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/helper/Thread.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,15 +7,13 @@
 #ifndef __FWTEST_HELPER_THREAD_HPP__
 #define __FWTEST_HELPER_THREAD_HPP__
 
-#include <exception>
-
-#include <boost/thread.hpp>
-#include <boost/bind.hpp>
-#include <boost/thread/thread_time.hpp>
+#include "fwTest/config.hpp"
 
 #include <cppunit/Exception.h>
 
-#include "fwTest/config.hpp"
+#include <exception>
+#include <functional>
+#include <thread>
 
 namespace fwTest
 {
@@ -25,7 +23,7 @@ namespace helper
 /**
  * @brief   Helper to manage a thread. The thread launches a function and catches its exception.
  * @class   Thread
- * 
+ *
  * @date    2012.
  *
  * @note    It is used for unit test.
@@ -34,7 +32,7 @@ class FWTEST_CLASS_API Thread
 {
 public:
 
-    typedef ::boost::function<void ()> FunctionType;
+    typedef std::function<void ()> FunctionType;
 
     /**
      * @brief Constructor : launch a thread which call run(f)
@@ -57,23 +55,29 @@ public:
     FWTEST_API bool timedJoin(int time, bool raise = true);
 
     /// Return the exception raised in function launched by thread
-    CPPUNIT_NS::Exception getException() {return m_exception;}
+    CPPUNIT_NS::Exception getException()
+    {
+        return m_exception;
+    }
 
     /// Return true if function launched by thread raised exception
-    bool hasFailed() {return m_hasFailed;}
+    bool hasFailed() const
+    {
+        return m_hasFailed;
+    }
 
     /**
      * @brief If any, throws the exception raised by the thread function.
      */
     void throwException();
 
-private :
+private:
 
     /// Method launched by thread : call run(f) surrounded by try/catch
     void run(FunctionType f);
 
     /// Thread created in constructor
-    ::boost::thread m_thread;
+    std::thread m_thread;
 
     /// Exception raised by function launched by thread
     CPPUNIT_NS::Exception m_exception;
diff --git a/SrcLib/tests/fwTest/include/fwTest/helper/compare.hpp b/SrcLib/tests/fwTest/include/fwTest/helper/compare.hpp
index 7334a7e..724b839 100644
--- a/SrcLib/tests/fwTest/include/fwTest/helper/compare.hpp
+++ b/SrcLib/tests/fwTest/include/fwTest/helper/compare.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -7,10 +7,17 @@
 #ifndef __FWTEST_HELPER_COMPARE_HPP__
 #define __FWTEST_HELPER_COMPARE_HPP__
 
+#include "fwTest/config.hpp"
+
+#include <fwCore/base.hpp>
+
 #include <set>
 #include <string>
 
-#include "fwTest/config.hpp"
+namespace fwData
+{
+class Object;
+}
 
 namespace fwTest
 {
@@ -18,9 +25,19 @@ namespace helper
 {
 typedef std::set<std::string> ExcludeSetType;
 
-FWTEST_API bool compare(::fwData::Object::sptr objRef,
-                        ::fwData::Object::sptr objComp,
-                         ExcludeSetType exclude = ExcludeSetType());
+/**
+ * @brief Returns true if given objects are equals, based on their Camp attribute values.
+ * The comparison can optionally omits some Camp attributes by giving their full name or a prefix.
+ *
+ * @param objRef Reference object to be compared
+ * @param objComp Object compared to reference object
+ * @param exclude Attributes omitted from comparison
+ * @param excludeByPrefix Attributes beginning with these prefixes are omitted from comparison
+ */
+FWTEST_API bool compare(SPTR(::fwData::Object) objRef,
+                        SPTR(::fwData::Object) objComp,
+                        ExcludeSetType exclude = ExcludeSetType(),
+                        ExcludeSetType excludeByPrefix = ExcludeSetType());
 
 } // namespace helper
 } // namespace fwTest
diff --git a/SrcLib/tests/fwTest/src/fwTest/Data.cpp b/SrcLib/tests/fwTest/src/fwTest/Data.cpp
index c8f4ac5..72cdc0b 100644
--- a/SrcLib/tests/fwTest/src/fwTest/Data.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/Data.cpp
@@ -1,23 +1,24 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <cstdlib>
-#include <sstream>
+#include "fwTest/Exception.hpp"
+#include "fwTest/Data.hpp"
 
 #include <boost/filesystem/operations.hpp>
 
-#include "fwTest/Exception.hpp"
-#include "fwTest/Data.hpp"
+#include <cstdlib>
+#include <sstream>
+
 
 namespace fwTest
 {
 
 const std::string Data::s_TEST_DATA_DIR_ENV_VAR("FWTEST_DATA_DIR");
 
-boost::filesystem::path Data::dir() throw(fwTest::Exception)
+::boost::filesystem::path Data::dir() throw(fwTest::Exception)
 {
     char * val = std::getenv(s_TEST_DATA_DIR_ENV_VAR.c_str());
     if (val == 0)
diff --git a/SrcLib/tests/fwTest/src/fwTest/DicomReaderTest.cpp b/SrcLib/tests/fwTest/src/fwTest/DicomReaderTest.cpp
index 71ab5e3..07ca07d 100644
--- a/SrcLib/tests/fwTest/src/fwTest/DicomReaderTest.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/DicomReaderTest.cpp
@@ -1,9 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwTest/DicomReaderTest.hpp"
+
 #include <fwTools/dateAndTime.hpp>
 #include <fwTools/Type.hpp>
 
@@ -17,36 +19,34 @@
 #include <fwMedData/Study.hpp>
 #include <fwMedData/Series.hpp>
 
-#include "fwTest/DicomReaderTest.hpp"
-
 namespace fwTest
 {
 
 //------------------------------------------------------------------------------
 #define CHECK_VALUE(check,message,val1,val2)                                \
-{                                                                           \
-    check &= (val1 == val2);                                                \
-    OSLM_ERROR_IF(message << " <"<< val1 << "> != <" << val2 << ">", val1 != val2 );        \
-}                                                                           \
+    {                                                                           \
+        check &= (val1 == val2);                                                \
+        OSLM_ERROR_IF(message << " <"<< val1 << "> != <" << val2 << ">", val1 != val2 );        \
+    }                                                                           \
 
 //------------------------------------------------------------------------------
 
 #define CHECK_VALUE_WITH_TOLERANCE(check,message,val1,val2,tol)                                 \
-{                                                                                               \
-    check &= ( val1 - tol <= val2 &&  val2 <= val1 + tol ) ;                                    \
-    OSLM_ERROR_IF(message << val1 << " != " << val2, val1 - tol > val2 ||  val2 > val1 + tol ); \
-}
+    {                                                                                               \
+        check &= ( val1 - tol <= val2 &&  val2 <= val1 + tol );                                    \
+        OSLM_ERROR_IF(message << val1 << " != " << val2, val1 - tol > val2 ||  val2 > val1 + tol ); \
+    }
 
 //------------------------------------------------------------------------------
 
 bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr &series )
 {
-    bool ok = true;
+    bool ok               = true;
     bool notReallyChecked = true;
 
 
-    ::fwMedData::Patient::sptr patient = series->getPatient();
-    ::fwMedData::Study::sptr study = series->getStudy();
+    ::fwMedData::Patient::sptr patient     = series->getPatient();
+    ::fwMedData::Study::sptr study         = series->getStudy();
     ::fwMedData::Equipment::sptr equipment = series->getEquipment();
 
     // Study, Acquisition
@@ -88,9 +88,11 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
     CHECK_VALUE(ok,"Series Modality doesn't match : ", "CT", series->getModality() );
     //(0008,0070) LO [TOSHIBA ]                                         # 8,1 Manufacturer
     //(0008,0080) LO [SCANNER DE LA MODER ]                             # 20,1 Institution Name
-    CHECK_VALUE(ok,"Equipment's Institution Name doesn't match : ", "SCANNER DE LA MODER ", equipment->getInstitutionName() );
+    CHECK_VALUE(ok,"Equipment's Institution Name doesn't match : ", "SCANNER DE LA MODER ",
+                equipment->getInstitutionName() );
     //(0008,0090) PN [DR MOREL]                                         # 8,1 Referring Physician's Name
-    CHECK_VALUE(ok,"Study Referring Physician's Name doesn't match : ", "DR MOREL", study->getReferringPhysicianName() );
+    CHECK_VALUE(ok,"Study Referring Physician's Name doesn't match : ", "DR MOREL",
+                study->getReferringPhysicianName() );
     //(0008,1010) SH [00000000001 ]                                     # 12,1 Station Name
     //(0008,103e) LO [ OS 0.5   ]                                       # 10,1 Series Description
     CHECK_VALUE(ok,"Study Description doesn't match : ", " OS 0.5   ", series->getDescription() );
@@ -99,7 +101,8 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
     {
         fwMedData::DicomValuesType physiciansName;
         ok &= (physiciansName == series->getPerformingPhysiciansName());
-        OSLM_ERROR_IF ("Name of the physician(s) administering the Series doesn't match : ", (physiciansName == series->getPerformingPhysiciansName()));
+        OSLM_ERROR_IF ("Name of the physician(s) administering the Series doesn't match : ",
+                       (physiciansName == series->getPerformingPhysiciansName()));
     }
     //(0008,1090) LO [Aquilion]                                         # 8,1 Manufacturer's Model Name
     //(0010,0000) UL 104                                                # 4,1 Generic Group Length
@@ -110,9 +113,205 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
     //(0010,0030) DA [19790618]                                         # 8,1 Patient's Birth Date
     CHECK_VALUE(ok,"Patient's Birth Date doesn't match : ", "19790618", patient->getBirthdate() );
     //(0010,0040) CS [M ]                                               # 2,1 Patient's Sex
-    CHECK_VALUE(ok,"Patient's Sex doesn't match :", "M " , patient->getSex() );
+    CHECK_VALUE(ok,"Patient's Sex doesn't match :", "M ", patient->getSex() );
+    //(0010,1010) AS [029Y]                                             # 4,1 Patient's Age
+    CHECK_VALUE(ok,"Study Patient's Age doesn't match :", "029Y", study->getPatientAge() );
+    //(0010,4000) LT [ARTHRO]                                           # 6,1 Patient Comments
+    //(0018,0000) UL 284                                                # 4,1 Generic Group Length
+    //(0018,0015) CS [DR MOREL]                                         # 8,1 Body Part Examined
+    //(0018,0022) CS [HELICAL_CT]                                       # 10,1-n Scan Options
+    //(0018,0050) DS [0.5 ]                                             # 4,1 Slice Thickness
+    //(0018,0060) DS [120 ]                                             # 4,1 KVP
+    //(0018,0090) DS [400.00]                                           # 6,1 Data Collection Diameter
+    //(0018,1000) LO [C4522344]                                         # 8,1 Device Serial Number
+    //(0018,1020) LO [V3.20ER005]                                       # 10,1-n Software Version(s)
+    //(0018,1030) LO [ARTHRO GENOU]                                     # 12,1 Protocol Name
+    //(0018,1100) DS [196.875 ]                                         # 8,1 Reconstruction Diameter
+    //(0018,1120) DS [+0.0]                                             # 4,1 Gantry/Detector Tilt
+    //(0018,1130) DS [+90.00]                                           # 6,1 Table Height
+    //(0018,1140) CS [CW]                                               # 2,1 Rotation Direction
+    //(0018,1150) IS [500 ]                                             # 4,1 Exposure Time
+    //(0018,1151) IS [200 ]                                             # 4,1 X-Ray Tube Current
+    //(0018,1152) IS [100 ]                                             # 4,1 Exposure
+    //(0018,1170) IS [24]                                               # 2,1 Generator Power
+    //(0018,1190) DS [0.9\0.8 ]                                         # 8,1-n Focal Spot(s)
+    //(0018,1210) SH [FC30]                                             # 4,1-n Convolution Kernel
+    //(0018,5100) CS [FFS ]                                             # 4,1 Patient Position
+    //(0018,9345) UN (FD) 23.1                                          # 8,1 CTDIvol
+    //(0020,0000) UL 370                                                # 4,1 Generic Group Length
+    //(0020,000d) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775]         # 58,1 Study Instance UID
+    CHECK_VALUE(ok,"Study Instance UID doesn't match :", "1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775",
+                study->getInstanceUID() );
+    //(0020,000e) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855]         # 58,1 Series Instance UID
+    CHECK_VALUE(ok,"Series Instance UID doesn't match :", "1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855",
+                series->getInstanceUID() );
+    //(0020,0010) SH [12514 ]                                           # 6,1 Study ID
+    //(0020,0011) IS [3 ]                                               # 2,1 Series Number
+    //(0020,0012) IS [3 ]                                               # 2,1 Acquisition Number
+    //(0020,0013) IS [404 ]                                             # 4,1 Instance Number
+    //(0020,0020) CS [L\P ]                                             # 4,2 Patient Orientation
+    //(0020,0032) DS [-36.71875\-88.28125\1350.300]                     # 28,3 Image Position (Patient)
+
+
+    if(!img)
+    {
+        OSLM_ERROR( "Missing image." );
+        return false;
+    }
+
+
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image x origin doesn't match  :", -36.71875, img->getOrigin()[0], 0.01);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image y origin doesn't match  :", -88.28125, img->getOrigin()[1], 0.01);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image z origin doesn't match  :", 1350.300, img->getOrigin()[2], 0.01);
+    //(0020,0037) DS [1.00000\0.00000\0.00000\0.00000\1.00000\0.00000 ]         # 48,6 Image Orientation (Patient)
+    //(0020,0052) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225183409.15274]         # 56,1 Frame of Reference UID
+    //(0020,1040) LO (no value)                                         # 0,1 Position Reference Indicator
+    //(0020,1041) DS [+161.20 ]                                         # 8,1 Slice Location
+    //(0028,0000) UL 158                                                # 4,1 Generic Group Length
+    //(0028,0002) US 1                                                  # 2,1 Samples per Pixel
+    //(0028,0004) CS [MONOCHROME2 ]                                     # 12,1 Photometric Interpretation
+    //(0028,0010) US 512                                                # 2,1 Rows
+    //(0028,0011) US 512                                                # 2,1 Columns
+    CHECK_VALUE(ok,"Image x size doesn't match  :", 512, img->getSize()[0] );
+    CHECK_VALUE(ok,"Image y size doesn't match  :", 512, img->getSize()[1] );
+    CHECK_VALUE(ok,"Image z size doesn't match  :", 404, img->getSize()[2] );
+    //(0028,0030) DS [0.384\0.384 ]                                     # 12,2 Pixel Spacing
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image x spacing doesn't match  :", 0.384, img->getSpacing()[0], 0.001);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image y spacing doesn't match  :", 0.384, img->getSpacing()[1], 0.001);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image z spacing doesn't match  :", 0.399, img->getSpacing()[2], 0.001);
+    //(0028,0100) US 16                                                 # 2,1 Bits Allocated
+    //(0028,0101) US 16                                                 # 2,1 Bits Stored
+    CHECK_VALUE(notReallyChecked,"Image Bits Allocated correspond  :", 16, img->getType().sizeOf() * 8 );
+    //(0028,0102) US 15                                                 # 2,1 High Bit
+    //(0028,0103) US 1                                                  # 2,1 Pixel Representation
+    CHECK_VALUE(notReallyChecked,"Image Bits Allocated correspond  :", false, img->getType().isSigned() );
+    //(0028,1050) DS [500 ]                                             # 4,1-n Window Center
+    CHECK_VALUE(ok,"Image Window Center correspond  :", 500, img->getWindowCenter() );
+    //(0028,1051) DS [2500]                                             # 4,1-n Window Width
+    CHECK_VALUE(ok,"Image Window Width correspond  :", 2500, img->getWindowWidth() );
+    //(0028,1052) DS [-1024 ]                                           # 6,1 Rescale Intercept
+    //(0028,1053) DS [1 ]                                               # 2,1 Rescale Slope
+    //(0040,0000) UL 116                                                # 4,1 Generic Group Length
+    //(0040,0002) DA [20081028]                                         # 8,1 Scheduled Procedure Step Start Date
+    //(0040,0003) TM [174327.000]                                       # 10,1 Scheduled Procedure Step Start Time
+    //(0040,0004) DA [20081028]                                         # 8,1 Scheduled Procedure Step End Date
+    //(0040,0005) TM [181327.000]                                       # 10,1 Scheduled Procedure Step End Time
+    //(0040,0244) DA [20081028]                                         # 8,1 Performed Procedure Step Start Date
+    //(0040,0245) TM [174327.000]                                       # 10,1 Performed Procedure Step Start Time
+    //(0040,0253) SH [12325 ]                                           # 6,1 Performed Procedure Step ID
+    //(7005,0000) UL 546                                                # 4,1 Generic Group Length
+    //(7005,0010) LO [TOSHIBA_MEC_CT3 ]                                 # 16,1 Private Creator
+    //(7005,1007) UN (DS) [335\269 ]                                    # 8,2 Reconstruction Center
+    //(7005,1008) UN (DS) [0.5 ]                                        # 4,1 Detector Slice Thickness in mm
+    //(7005,1009) UN (LO) [1111111111111111]                            # 16,1 Number of Detector rows to Reconstruct
+    //(7005,100a) UN (DS) [+5.50 ]                                      # 6,1 Table Speed in mm/rot
+    //(7005,100b) UN (SH) [ORG ]                                        # 4,1 Filter
+    //(7005,100d) UN (CS) [DR MOREL]                                    # 8,1 Organ
+    //(7005,100e) UN (SH) [IMG ]                                        # 4,1 File Type Remarks
+    //(7005,100f) UN (SH) [FF]                                          # 2,1 Direction
+    //(7005,1011) UN (LT) [Vol.]                                        # 4,1 Series Comment
+    //(7005,1012) UN (SH) [SU]                                          # 2,1 Position
+    //(7005,1013) UN (US) 1                                             # 2,1 Expert Plan No.
+    //(7005,1016) UN (UI) [1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.747732]         # 58,1 Volume UID
+    //(7005,1017) UN (US) 404                                           # 2,1 Total Frame Count in the Volume
+    //(7005,1018) UN (US) 404                                           # 2,1 Frame No.
+    //(7005,1019) UN (UL) 1642763                                       # 4,1 Frame Sort Key
+    //(7005,101a) UN (US) 1                                             # 2,1 Frame Sort Order
+    //(7005,101b) UN (SH) [FC30]                                        # 4,1 Convolution Kernel
+    //(7005,101d) UN (UL) 9                                             # 4,1 Reconstruction Number
+    //(7005,101e) UN (UL) 13                                            # 4,1 Raw Data Number
+    //(7005,101f) UN (LO) [20081028180156768480]                        # 20,1 Volume Number
+    //(7005,1020) UN (UL) 3                                             # 4,1 Local Series Number
+    //(7005,1021) UN (LO) [BOOST ]                                      # 6,1 Decrease in Artifact Filter
+    //(7005,1022) UN (DS) [0.40]                                        # 4,1 Reconstruction Interval
+    //(7005,1023) UN (DS) [0.688 ]                                      # 6,1 Pitch Factor
+    //(7005,1024) UN (DA) [20081024]                                    # 8,1 The Acquisition Date of NRA
+    //(7005,1030) UN (CS) [CT]                                          # 2,1 Main Modality in Study
+    //(7005,1040) UN (FD) 402.4                                         # 8,1 DLP Dose Length Product
+
+    return ok;
+
+}
+
+//------------------------------------------------------------------------------
+
+bool DicomReaderTest::checkSeriesACHGenouTrimmed( const ::fwMedData::ImageSeries::sptr &series )
+{
+    bool ok               = true;
+    bool notReallyChecked = true;
+
+
+    ::fwMedData::Patient::sptr patient     = series->getPatient();
+    ::fwMedData::Study::sptr study         = series->getStudy();
+    ::fwMedData::Equipment::sptr equipment = series->getEquipment();
+
+    // Study, Acquisition
+    ::fwData::Image::sptr img = series->getImage();
+
+    //# Dicom-File-Format
+    //
+    //# Dicom-Meta-Information-Header
+    //# Used TransferSyntax:
+    //(0002,0000) UL 224                                                # 4,1 File Meta Information Group Length
+    //(0002,0001) OB 00\01                                              # 2,1 File Meta Information Version
+    //(0002,0002) UI [1.2.840.10008.5.1.4.1.1.2]                        # 26,1 Media Storage SOP Class UID
+    //(0002,0003) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184712.380696]         # 58,1 Media Storage SOP Instance UID
+    //(0002,0010) UI [1.2.840.10008.1.2.1]                              # 20,1 Transfer Syntax UID
+    //(0002,0012) UI [1.2.250.1.119.1.1.1.1.1.1.33.3.8.13.7]            # 38,1 Implementation Class UID
+    //(0002,0013) SH [scanplus_33 ]                                     # 12,1 Implementation Version Name
+    //(0002,0016) AE [scanplus]                                         # 8,1 Source Application Entity Title
+    //
+    //# Dicom-Data-Set
+    //# Used TransferSyntax: 1.2.840.10008.1.2.1
+    //(0008,0000) UL 426                                                # 4,1 Generic Group Length
+    //(0008,0008) CS [ORIGINAL\PRIMARY\AXIAL]                           # 22,2-n Image Type
+    //(0008,0016) UI [1.2.840.10008.5.1.4.1.1.2]                        # 26,1 SOP Class UID
+    //(0008,0018) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184712.380696]         # 58,1 SOP Instance UID
+    //(0008,0020) DA [20081028]                                         # 8,1 Study Date
+    CHECK_VALUE(ok,"Study Date doesn't match : ", "20081028",study->getDate());
+    //(0008,0021) DA [20081028]                                         # 8,1 Series Date
+    CHECK_VALUE(ok,"Series Modality doesn't match : ", "20081028", series->getDate() );
+    //(0008,0022) DA [20081028]                                         # 8,1 Acquisition Date
+    //(0008,0023) DA [20081028]                                         # 8,1 Content Date
+    //(0008,0030) TM [174327.000]                                       # 10,1 Study Time
+    CHECK_VALUE(ok,"Study Time doesn't match : ", "174327.000", study->getTime() );
+    //(0008,0031) TM [180156.734]                                       # 10,1 Series Time
+    CHECK_VALUE(ok,"Series Modality doesn't match : ", "180156.734", series->getTime() );
+    //(0008,0032) TM [174446.850]                                       # 10,1 Acquisition Time
+    //(0008,0033) TM [174502.095]                                       # 10,1 Content Time
+    //(0008,0050) SH [12514 ]                                           # 6,1 Accession Number
+    //(0008,0060) CS [CT]                                               # 2,1 Modality
+    CHECK_VALUE(ok,"Series Modality doesn't match : ", "CT", series->getModality() );
+    //(0008,0070) LO [TOSHIBA ]                                         # 8,1 Manufacturer
+    //(0008,0080) LO [SCANNER DE LA MODER ]                             # 20,1 Institution Name
+    CHECK_VALUE(ok,"Equipment's Institution Name doesn't match : ", "SCANNER DE LA MODER",
+                equipment->getInstitutionName() );
+    //(0008,0090) PN [DR MOREL]                                         # 8,1 Referring Physician's Name
+    CHECK_VALUE(ok,"Study Referring Physician's Name doesn't match : ", "DR MOREL",
+                study->getReferringPhysicianName() );
+    //(0008,1010) SH [00000000001 ]                                     # 12,1 Station Name
+    //(0008,103e) LO [ OS 0.5   ]                                       # 10,1 Series Description
+    CHECK_VALUE(ok,"Study Description doesn't match : ", "OS 0.5", series->getDescription() );
+    CHECK_VALUE(ok,"Study Description doesn't match : ", "", study->getDescription() ); // 0008,1030
+    //(0008,1040) LO [ID_DEPARTMENT ]                                   # 14,1 Institutional Department Name
+    {
+        fwMedData::DicomValuesType physiciansName;
+        ok &= (physiciansName == series->getPerformingPhysiciansName());
+        OSLM_ERROR_IF ("Name of the physician(s) administering the Series doesn't match : ",
+                       (physiciansName == series->getPerformingPhysiciansName()));
+    }
+    //(0008,1090) LO [Aquilion]                                         # 8,1 Manufacturer's Model Name
+    //(0010,0000) UL 104                                                # 4,1 Generic Group Length
+    //(0010,0010) PN [CHARNOZ ARNAUD]                                   # 14,1 Patient's Name
+    CHECK_VALUE(ok,"Patient's Name doesn't match : ", "CHARNOZ ARNAUD", patient->getName() );
+    //(0010,0020) LO [12592 ARTHRO GENOU  G ]                           # 22,1 Patient ID
+    CHECK_VALUE(ok,"Patient ID doesn't match : ", "12592 ARTHRO GENOU  G", patient->getPatientId() );
+    //(0010,0030) DA [19790618]                                         # 8,1 Patient's Birth Date
+    CHECK_VALUE(ok,"Patient's Birth Date doesn't match : ", "19790618", patient->getBirthdate() );
+    //(0010,0040) CS [M ]                                               # 2,1 Patient's Sex
+    CHECK_VALUE(ok,"Patient's Sex doesn't match :", "M", patient->getSex() );
     //(0010,1010) AS [029Y]                                             # 4,1 Patient's Age
-    CHECK_VALUE(ok,"Study Patient's Age doesn't match :", "029Y" , study->getPatientAge() );
+    CHECK_VALUE(ok,"Study Patient's Age doesn't match :", "029Y", study->getPatientAge() );
     //(0010,4000) LT [ARTHRO]                                           # 6,1 Patient Comments
     //(0018,0000) UL 284                                                # 4,1 Generic Group Length
     //(0018,0015) CS [DR MOREL]                                         # 8,1 Body Part Examined
@@ -137,9 +336,11 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
     //(0018,9345) UN (FD) 23.1                                          # 8,1 CTDIvol
     //(0020,0000) UL 370                                                # 4,1 Generic Group Length
     //(0020,000d) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775]         # 58,1 Study Instance UID
-    CHECK_VALUE(ok,"Study Instance UID doesn't match :", "1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775" , study->getInstanceUID() );
+    CHECK_VALUE(ok,"Study Instance UID doesn't match :", "1.2.392.200036.9116.2.6.1.48.1211418863.1225183167.375775",
+                study->getInstanceUID() );
     //(0020,000e) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855]         # 58,1 Series Instance UID
-    CHECK_VALUE(ok,"Series Instance UID doesn't match :", "1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855" , series->getInstanceUID() );
+    CHECK_VALUE(ok,"Series Instance UID doesn't match :", "1.2.392.200036.9116.2.6.1.48.1211418863.1225184516.765855",
+                series->getInstanceUID() );
     //(0020,0010) SH [12514 ]                                           # 6,1 Study ID
     //(0020,0011) IS [3 ]                                               # 2,1 Series Number
     //(0020,0012) IS [3 ]                                               # 2,1 Acquisition Number
@@ -155,9 +356,9 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
     }
 
 
-    CHECK_VALUE_WITH_TOLERANCE(ok,"Image x origin doesn't match  :", -36.71875 , img->getOrigin()[0], 0.01);
-    CHECK_VALUE_WITH_TOLERANCE(ok,"Image y origin doesn't match  :", -88.28125 , img->getOrigin()[1], 0.01);
-    CHECK_VALUE_WITH_TOLERANCE(ok,"Image z origin doesn't match  :", 1350.300 , img->getOrigin()[2], 0.01);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image x origin doesn't match  :", -36.71875, img->getOrigin()[0], 0.01);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image y origin doesn't match  :", -88.28125, img->getOrigin()[1], 0.01);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image z origin doesn't match  :", 1350.300, img->getOrigin()[2], 0.01);
     //(0020,0037) DS [1.00000\0.00000\0.00000\0.00000\1.00000\0.00000 ]         # 48,6 Image Orientation (Patient)
     //(0020,0052) UI [1.2.392.200036.9116.2.6.1.48.1211418863.1225183409.15274]         # 56,1 Frame of Reference UID
     //(0020,1040) LO (no value)                                         # 0,1 Position Reference Indicator
@@ -167,13 +368,13 @@ bool DicomReaderTest::checkSeriesACHGenou( const ::fwMedData::ImageSeries::sptr
     //(0028,0004) CS [MONOCHROME2 ]                                     # 12,1 Photometric Interpretation
     //(0028,0010) US 512                                                # 2,1 Rows
     //(0028,0011) US 512                                                # 2,1 Columns
-    CHECK_VALUE(ok,"Image x size doesn't match  :", 512 , img->getSize()[0] );
-    CHECK_VALUE(ok,"Image y size doesn't match  :", 512 , img->getSize()[1] );
-    CHECK_VALUE(ok,"Image z size doesn't match  :", 404 , img->getSize()[2] );
+    CHECK_VALUE(ok,"Image x size doesn't match  :", 512, img->getSize()[0] );
+    CHECK_VALUE(ok,"Image y size doesn't match  :", 512, img->getSize()[1] );
+    CHECK_VALUE(ok,"Image z size doesn't match  :", 404, img->getSize()[2] );
     //(0028,0030) DS [0.384\0.384 ]                                     # 12,2 Pixel Spacing
-    CHECK_VALUE_WITH_TOLERANCE(ok,"Image x spacing doesn't match  :", 0.384 , img->getSpacing()[0], 0.001);
-    CHECK_VALUE_WITH_TOLERANCE(ok,"Image y spacing doesn't match  :", 0.384 , img->getSpacing()[1], 0.001);
-    CHECK_VALUE_WITH_TOLERANCE(ok,"Image z spacing doesn't match  :", 0.399 , img->getSpacing()[2], 0.001);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image x spacing doesn't match  :", 0.384, img->getSpacing()[0], 0.001);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image y spacing doesn't match  :", 0.384, img->getSpacing()[1], 0.001);
+    CHECK_VALUE_WITH_TOLERANCE(ok,"Image z spacing doesn't match  :", 0.399, img->getSpacing()[2], 0.001);
     //(0028,0100) US 16                                                 # 2,1 Bits Allocated
     //(0028,0101) US 16                                                 # 2,1 Bits Stored
     CHECK_VALUE(notReallyChecked,"Image Bits Allocated correspond  :", 16, img->getType().sizeOf() * 8 );
diff --git a/SrcLib/tests/fwTest/src/fwTest/Exception.cpp b/SrcLib/tests/fwTest/src/fwTest/Exception.cpp
index 1a207e8..21ae993 100644
--- a/SrcLib/tests/fwTest/src/fwTest/Exception.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/Exception.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,8 +9,7 @@
 namespace fwTest
 {
 
-Exception::Exception ( const std::string &err ) 
-    : std::runtime_error ( err )
+Exception::Exception ( const std::string &err ) : std::runtime_error ( err )
 {
 }
 
diff --git a/SrcLib/tests/fwTest/src/fwTest/File.cpp b/SrcLib/tests/fwTest/src/fwTest/File.cpp
index c46cec2..2a91579 100644
--- a/SrcLib/tests/fwTest/src/fwTest/File.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/File.cpp
@@ -1,14 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 
-#include <fstream>
-#include <boost/filesystem/path.hpp>
 #include "fwTest/File.hpp"
 
+#include <boost/filesystem/path.hpp>
+#include <fstream>
+
 namespace fwTest
 {
 
@@ -43,5 +44,5 @@ bool File::contentEquals(const ::boost::filesystem::path &lfile, const ::boost::
     return false;
 }
 
-}; //namespace fwTest
+}  //namespace fwTest
 
diff --git a/SrcLib/tests/fwTest/src/fwTest/generator/Image.cpp b/SrcLib/tests/fwTest/src/fwTest/generator/Image.cpp
index 038965f..7695cbb 100644
--- a/SrcLib/tests/fwTest/src/fwTest/generator/Image.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/generator/Image.cpp
@@ -1,17 +1,17 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <ctime>
+#include "fwTest/generator/Image.hpp"
 
-#include <fwTools/Type.hpp>
-#include <fwTools/NumericRoundCast.hxx>
+#include <fwDataTools/helper/Array.hpp>
 
-#include <fwComEd/helper/Array.hpp>
+#include <fwTools/NumericRoundCast.hxx>
+#include <fwTools/Type.hpp>
 
-#include "fwTest/generator/Image.hpp"
+#include <ctime>
 
 
 namespace fwTest
@@ -42,7 +42,7 @@ void Image::generateImage(::fwData::Image::sptr image,
     image->allocate();
 
     ::fwData::Array::sptr array = image->getDataArray();
-    ::fwComEd::helper::Array helper(array);
+    ::fwDataTools::helper::Array helper(array);
     std::fill(helper.begin(), helper.end(), 0);
 }
 
@@ -83,10 +83,10 @@ void Image::generateRandomImage(::fwData::Image::sptr image, ::fwTools::Type typ
 
 void Image::randomizeArray(::fwData::Array::sptr array)
 {
-    ::fwComEd::helper::Array helper(array);
-    char *iter = helper.begin< char >();
+    ::fwDataTools::helper::Array helper(array);
+    char* iter = helper.begin< char >();
 
-    for (; iter != helper.end< char >() ; ++iter)
+    for (; iter != helper.end< char >(); ++iter)
     {
         *iter = rand()%256;
     }
@@ -94,7 +94,7 @@ void Image::randomizeArray(::fwData::Array::sptr array)
 
 //------------------------------------------------------------------------------
 
-::fwData::Array::sptr Image::createRandomizedArray(const std::string &type, ::fwData::Array::SizeType sizes)
+::fwData::Array::sptr Image::createRandomizedArray(const std::string& type, ::fwData::Array::SizeType sizes)
 {
     ::fwData::Array::sptr array = ::fwData::Array::New();
 
diff --git a/SrcLib/tests/fwTest/src/fwTest/generator/Mesh.cpp b/SrcLib/tests/fwTest/src/fwTest/generator/Mesh.cpp
index d104748..1f29282 100644
--- a/SrcLib/tests/fwTest/src/fwTest/generator/Mesh.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/generator/Mesh.cpp
@@ -1,32 +1,31 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/type_traits/make_unsigned.hpp>
-
-#include <cstdlib>
-#include <ctime>
+#include "fwTest/generator/Mesh.hpp"
 
-#include <boost/foreach.hpp>
+#include <fwDataTools/Mesh.hpp>
 
 #include <fwTools/NumericRoundCast.hxx>
 
-#include <fwDataTools/Mesh.hpp>
-
-#include "fwTest/generator/Mesh.hpp"
+#include <boost/type_traits/make_unsigned.hpp>
 
+#include <cstdlib>
+#include <ctime>
 
 namespace fwTest
 {
 namespace generator
 {
 
-struct RandFloat{
+struct RandFloat {
     float operator()()
-    { return ((rand()%101-50.f))/500.f; };
-} ;
+    {
+        return ((rand()%101-50.f))/500.f;
+    }
+};
 
 //------------------------------------------------------------------------------
 
@@ -54,7 +53,7 @@ void Mesh::generateMesh( ::fwData::Mesh::sptr mesh )
 void Mesh::generateTriangleQuadMesh(::fwData::Mesh::sptr mesh)
 {
     size_t nbPointsByEdge = 10;
-    float edgeDim = 100.;
+    float edgeDim         = 100.;
     Mesh::PointsMapType points;
 
     mesh->clear();
@@ -67,7 +66,7 @@ void Mesh::generateTriangleQuadMesh(::fwData::Mesh::sptr mesh)
 void Mesh::generateTriangleMesh(::fwData::Mesh::sptr mesh)
 {
     size_t nbPointsByEdge = 10;
-    float edgeDim = 100.;
+    float edgeDim         = 100.;
     Mesh::PointsMapType points;
 
     mesh->clear();
@@ -79,7 +78,7 @@ void Mesh::generateTriangleMesh(::fwData::Mesh::sptr mesh)
 void Mesh::generateQuadMesh(::fwData::Mesh::sptr mesh)
 {
     size_t nbPointsByEdge = 10;
-    float edgeDim = 100.;
+    float edgeDim         = 100.;
     Mesh::PointsMapType points;
 
     mesh->clear();
@@ -89,17 +88,17 @@ void Mesh::generateQuadMesh(::fwData::Mesh::sptr mesh)
 
 void Mesh::addQuadMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, size_t nbPointsByEdge, float edgeDim)
 {
-    ::fwComEd::helper::Mesh::sptr meshHelper;
-    meshHelper = ::fwComEd::helper::Mesh::New(mesh);
+    ::fwDataTools::helper::Mesh::sptr meshHelper;
+    meshHelper = ::fwDataTools::helper::Mesh::New(mesh);
 
     ::fwData::Mesh::PointValueType pt1[3], pt2[3], pt3[3], pt4[3];
     ::fwData::Mesh::Id idx1, idx2, idx3, idx4;
     float step = edgeDim / nbPointsByEdge;
 
     //Face Y = edgeDim
-    for(size_t x=0; x<nbPointsByEdge; x++)
+    for(size_t x = 0; x<nbPointsByEdge; x++)
     {
-        for(size_t z=0; z<nbPointsByEdge; z++)
+        for(size_t z = 0; z<nbPointsByEdge; z++)
         {
             pt1[0] = x*step;
             pt1[1] = edgeDim;
@@ -127,9 +126,9 @@ void Mesh::addQuadMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, size_t
     }
 
     //Face X = edgeDim
-    for(size_t y=0; y<nbPointsByEdge; y++)
+    for(size_t y = 0; y<nbPointsByEdge; y++)
     {
-        for(size_t z=0; z<nbPointsByEdge; z++)
+        for(size_t z = 0; z<nbPointsByEdge; z++)
         {
             pt1[0] = edgeDim;
             pt1[1] = y*step;
@@ -161,17 +160,17 @@ void Mesh::addQuadMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, size_t
 
 void Mesh::addTriangleMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, size_t nbPointsByEdge, float edgeDim)
 {
-    ::fwComEd::helper::Mesh::sptr meshHelper;
-    meshHelper = ::fwComEd::helper::Mesh::New(mesh);
+    ::fwDataTools::helper::Mesh::sptr meshHelper;
+    meshHelper = ::fwDataTools::helper::Mesh::New(mesh);
 
     ::fwData::Mesh::PointValueType pt1[3], pt2[3], pt3[3], pt4[3];
     ::fwData::Mesh::Id idx1, idx2, idx3, idx4;
     float step = edgeDim / nbPointsByEdge;
 
     //Face Z = 0
-    for(size_t x=0; x<nbPointsByEdge; x++)
+    for(size_t x = 0; x<nbPointsByEdge; x++)
     {
-        for(size_t y=0; y<nbPointsByEdge; y++)
+        for(size_t y = 0; y<nbPointsByEdge; y++)
         {
             pt1[0] = x*step;
             pt1[1] = y*step;
@@ -200,9 +199,9 @@ void Mesh::addTriangleMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, siz
     }
 
     //Face X = 0
-    for(size_t y=0; y<nbPointsByEdge; y++)
+    for(size_t y = 0; y<nbPointsByEdge; y++)
     {
-        for(size_t z=0; z<nbPointsByEdge; z++)
+        for(size_t z = 0; z<nbPointsByEdge; z++)
         {
             pt1[0] = 0;
             pt1[1] = y*step;
@@ -234,8 +233,8 @@ void Mesh::addTriangleMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, siz
 //------------------------------------------------------------------------------
 
 ::fwData::Mesh::Id Mesh::addPoint(::fwData::Mesh::PointValueType* pt,
-                                           ::fwComEd::helper::Mesh::sptr meshHelper,
-                                           PointsMapType& points)
+                                  ::fwDataTools::helper::Mesh::sptr meshHelper,
+                                  PointsMapType& points)
 {
     ::fwDataTools::Point myPoint(pt[0], pt[1], pt[2]);
 
@@ -245,7 +244,7 @@ void Mesh::addTriangleMesh(::fwData::Mesh::sptr mesh, PointsMapType& points, siz
         return it->second;
     }
     ::fwData::Mesh::Id idx = meshHelper->insertNextPoint(pt[0], pt[1], pt[2]);
-    points[myPoint] = idx;
+    points[myPoint]        = idx;
     return idx;
 }
 
diff --git a/SrcLib/tests/fwTest/src/fwTest/generator/Object.cpp b/SrcLib/tests/fwTest/src/fwTest/generator/Object.cpp
index ea3aa0a..417266a 100644
--- a/SrcLib/tests/fwTest/src/fwTest/generator/Object.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/generator/Object.cpp
@@ -1,14 +1,13 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <cmath>
-
-#include <boost/assign/std/vector.hpp>
-#include <boost/filesystem/path.hpp>
-#include <boost/filesystem/convenience.hpp>
+#include "fwTest/generator/Image.hpp"
+#include "fwTest/generator/Mesh.hpp"
+#include "fwTest/generator/SeriesDB.hpp"
+#include "fwTest/generator/Object.hpp"
 
 #include <fwData/Integer.hpp>
 #include <fwData/String.hpp>
@@ -17,14 +16,13 @@
 #include <fwData/Plane.hpp>
 #include <fwData/ProcessObject.hpp>
 
-#include <fwTest/generator/Image.hpp>
-#include <fwTest/generator/Mesh.hpp>
-#include <fwTest/generator/SeriesDB.hpp>
-#include "fwTest/generator/Object.hpp"
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/convenience.hpp>
 
 #include <fwMath/IntrasecTypes.hpp>
 
-using namespace boost::assign;
+#include <cmath>
+
 
 namespace fwTest
 {
@@ -36,7 +34,7 @@ namespace generator
 ::fwData::StructureTraitsDictionary::sptr Object::createStructureTraitsDictionary()
 {
     ::fwData::StructureTraitsDictionary::sptr structDico = ::fwData::StructureTraitsDictionary::New();
-    ::fwData::StructureTraits::sptr skin = ::fwData::StructureTraits::New();
+    ::fwData::StructureTraits::sptr skin                 = ::fwData::StructureTraits::New();
     std::string skinType = "Skin";
     skin->setType(skinType);
     skin->setClass(::fwData::StructureTraits::ENVIRONMENT);
@@ -111,9 +109,9 @@ namespace generator
 {
     ::fwData::StructureTraits::sptr pStructureTraits = ::fwData::StructureTraits::New();
 
-    const std::string type = "Liver";
+    const std::string type                                      = "Liver";
     const ::fwData::StructureTraits::StructureClass structClass = ::fwData::StructureTraits::ORGAN;
-    const ::fwData::StructureTraits::ROIExpression nativeExp = "inter(world(type(Skin)),not(class(Organ)))";
+    const ::fwData::StructureTraits::ROIExpression nativeExp    = "inter(world(type(Skin)),not(class(Organ)))";
     const ::fwData::StructureTraits::ROIExpression nativeGeoExp = "halfSpace(world(Left_lung),Z+,true)";
 
     pStructureTraits->setType(type);
@@ -151,9 +149,9 @@ namespace generator
     ::fwData::Node::sptr maskNode = Object::createNode();
     roi->setMaskOpNode(maskNode);
 
-    (*composite)["ROITraits"] = roi;
+    (*composite)["ROITraits"]       = roi;
     (*composite)["StructureTraits"] = structure;
-    (*composite)["MaskOpNode"] = maskNode;
+    (*composite)["MaskOpNode"]      = maskNode;
 
     return composite;
 }
@@ -180,9 +178,9 @@ namespace generator
     rec->setMeshOpNode(meshNode);
 
     (*composite)["ReconstructionTraits"] = rec;
-    (*composite)["StructureTraits"] = structure;
-    (*composite)["MaskOpNode"] = maskNode;
-    (*composite)["MeshOpNode"] = meshNode;
+    (*composite)["StructureTraits"]      = structure;
+    (*composite)["MaskOpNode"]           = maskNode;
+    (*composite)["MeshOpNode"]           = meshNode;
 
     return composite;
 }
@@ -193,15 +191,15 @@ namespace generator
 {
     ::fwData::Node::sptr node = ::fwData::Node::New();
 
-    unsigned int nbInputs = rand()%5;
+    unsigned int nbInputs  = rand()%5;
     unsigned int nbOutputs = rand()%5;
 
-    for (unsigned int i=0 ; i<nbInputs ; ++i)
+    for (unsigned int i = 0; i<nbInputs; ++i)
     {
         node->addInputPort(Object::createPort());
     }
 
-    for (unsigned int i=0 ; i<nbOutputs ; ++i)
+    for (unsigned int i = 0; i<nbOutputs; ++i)
     {
         node->addOutputPort(Object::createPort());
     }
@@ -243,17 +241,20 @@ namespace generator
 {
     ::fwData::TransferFunction::sptr tf = ::fwData::TransferFunction::New();
 
-    tf->setBackgroundColor( ::fwData::TransferFunction::TFColor( rand()%100 / 100.f, rand()%100 / 100.f, rand()%100 / 100.f, rand()%100 / 100.f) );
+    tf->setBackgroundColor( ::fwData::TransferFunction::TFColor( rand()%100 / 100.f, rand()%100 / 100.f,
+                                                                 rand()%100 / 100.f, rand()%100 / 100.f) );
     tf->setInterpolationMode( ::fwData::TransferFunction::NEAREST );
     tf->setIsClamped( false );
     tf->setLevel(level);
     tf->setName( "TFColor" );
     tf->setWindow(window );
 
-    for (unsigned char nb=0 ; nb<nbPoints ; ++nb)
+    for (unsigned char nb = 0; nb<nbPoints; ++nb)
     {
         double value = rand()%100 - level;
-        tf->addTFColor( value, ::fwData::TransferFunction::TFColor( rand()%100 / 100.f, rand()%100 / 100.f, rand()%100 / 100.f, rand()%100 / 100.f ));
+        tf->addTFColor( value,
+                        ::fwData::TransferFunction::TFColor( rand()%100 / 100.f, rand()%100 / 100.f, rand()%100 / 100.f,
+                                                             rand()%100 / 100.f ));
     }
 
     ::fwData::String::sptr myString = ::fwData::String::New("fieldStringValue");
@@ -291,7 +292,7 @@ namespace generator
 
 ::fwData::Material::sptr Object::createMaterial()
 {
-    // use the default value MODE_PHONG,MODE_SURFACE, MODE_STANDARD
+    // use the default value PHONG,SURFACE, STANDARD
 
     ::fwData::Color::sptr ambient = ::fwData::Color::New();
     ambient->setRGBA(0.5f,0.5f,0.5f,0.5f);
@@ -315,8 +316,8 @@ namespace generator
     const std::string IMAGEID2 = "myImage2";
     const std::string FIELDID1 = "myField1";
     const std::string FIELDID2 = "myField2";
-    ::fwData::Image::sptr image1 = ::fwData::Image::New();
-    ::fwData::Image::sptr image2 = ::fwData::Image::New();
+    ::fwData::Image::sptr image1   = ::fwData::Image::New();
+    ::fwData::Image::sptr image2   = ::fwData::Image::New();
     ::fwData::Integer::sptr field1 = ::fwData::Integer::New(3);
     ::fwData::Integer::sptr field2 = ::fwData::Integer::New(8);
 
@@ -334,7 +335,9 @@ namespace generator
 
 ::fwData::Point::sptr Object::generatePoint()
 {
-    fwVec3d coord = {{rand()%300, rand()%300, rand()%300}};
+    std::array< double, 3> coord = {static_cast<double>(rand()%300),
+                                    static_cast<double>(rand()%300),
+                                    static_cast<double>(rand()%300)};
     ::fwData::Point::sptr point = ::fwData::Point::New();
     point->setCoord(coord);
     return point;
@@ -346,7 +349,7 @@ namespace generator
 {
     ::fwData::Plane::sptr plane = ::fwData::Plane::New();
     plane->setValue(generatePoint(), generatePoint(), generatePoint());
-    plane->setIsIntersection(((rand()%1) ? true :false));
+    plane->setIsIntersection(((rand()%1) ? true : false));
     return plane;
 }
 
diff --git a/SrcLib/tests/fwTest/src/fwTest/generator/SeriesDB.cpp b/SrcLib/tests/fwTest/src/fwTest/generator/SeriesDB.cpp
index 5e87ce9..84fa9e9 100644
--- a/SrcLib/tests/fwTest/src/fwTest/generator/SeriesDB.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/generator/SeriesDB.cpp
@@ -1,10 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <sstream>
+#include "fwTest/generator/SeriesDB.hpp"
+#include "fwTest/generator/Image.hpp"
+#include "fwTest/generator/Mesh.hpp"
 
 #include <fwTools/Type.hpp>
 
@@ -24,9 +26,7 @@
 #include <fwMedData/Patient.hpp>
 #include <fwMedData/Equipment.hpp>
 
-#include "fwTest/generator/SeriesDB.hpp"
-#include "fwTest/generator/Image.hpp"
-#include "fwTest/generator/Mesh.hpp"
+#include <sstream>
 
 
 namespace fwTest
@@ -42,21 +42,21 @@ namespace generator
 {
     Image::initRand();
     ::fwMedData::SeriesDB::sptr seriesDB = ::fwMedData::SeriesDB::New();
-    for (unsigned char nb=0 ; nb<nbImgSeries ; ++nb)
+    for (unsigned char nb = 0; nb<nbImgSeries; ++nb)
     {
         ::fwMedData::Series::sptr imgSeries;
         imgSeries = SeriesDB::createImageSeries();
         seriesDB->getContainer().push_back(imgSeries);
     }
 
-    for (unsigned char nb=0 ; nb<nbModelSeries ; ++nb)
+    for (unsigned char nb = 0; nb<nbModelSeries; ++nb)
     {
         ::fwMedData::Series::sptr modelSeries;
         modelSeries = SeriesDB::createModelSeries(rand()%15+1);
         seriesDB->getContainer().push_back(modelSeries);
     }
 
-    for (unsigned char nb=0 ; nb<nbActivitySeries ; ++nb)
+    for (unsigned char nb = 0; nb<nbActivitySeries; ++nb)
     {
         ::fwMedData::Series::sptr activitySeries;
         activitySeries = SeriesDB::createActivitySeries();
@@ -70,11 +70,11 @@ namespace generator
 ::fwMedData::Patient::sptr SeriesDB::createPatient()
 {
     ::fwMedData::Patient::sptr patient = ::fwMedData::Patient::New();
-    const std::string PATIENT_NAME          = "NomSeriesDB1" ;
-    const std::string PATIENT_FIRSTNAME     = "PrenomSeriesDB1" ;
-    const std::string PATIENT_ID            = "4564383757" ;
-    const std::string PATIENT_BIRTHDATE     = "19710418";
-    const std::string PATIENT_SEX           = "O ";
+    const std::string PATIENT_NAME      = "NomSeriesDB1";
+    const std::string PATIENT_FIRSTNAME = "PrenomSeriesDB1";
+    const std::string PATIENT_ID        = "4564383757";
+    const std::string PATIENT_BIRTHDATE = "19710418";
+    const std::string PATIENT_SEX       = "O ";
 
     patient->setName( PATIENT_NAME + "^" + PATIENT_FIRSTNAME );
     patient->setPatientId(   PATIENT_ID );
@@ -97,12 +97,12 @@ namespace generator
     str << count++;
 
     // studies informations
-    const std::string UID         = "1.2.826.0.1.3680043.2.1125.44278200849347599055201494082232" + str.str() ;
+    const std::string UID         = "1.2.826.0.1.3680043.2.1125.44278200849347599055201494082232" + str.str();
     const std::string DATE        = "20130418";
     const std::string TIME        = "095948.689872 ";
-    const std::string PHYSICIAN   = "Dr^Jekyl" ;
-    const std::string DESCRIPTION = "Say 33. " ;
-    const std::string PATIENT_AGE = "042Y" ;
+    const std::string PHYSICIAN   = "Dr^Jekyl";
+    const std::string DESCRIPTION = "Say 33. ";
+    const std::string PATIENT_AGE = "042Y";
 
     study->setInstanceUID( UID );
     study->setDate( DATE );
@@ -119,7 +119,7 @@ namespace generator
 ::fwMedData::Equipment::sptr SeriesDB::createEquipement()
 {
     ::fwMedData::Equipment::sptr equipment = ::fwMedData::Equipment::New();
-    const std::string INSTITUTION = "hospital" ;
+    const std::string INSTITUTION = "hospital";
     equipment->setInstitutionName(INSTITUTION);
 
     return equipment;
@@ -184,7 +184,7 @@ void SeriesDB::generateSeriesInformation(::fwMedData::Series::sptr series)
     SeriesDB::generateSeriesInformation(modelSeries);
 
     ::fwMedData::ModelSeries::ReconstructionVectorType recDB;
-    for (unsigned char nb=0 ; nb<nbReconstruction ; ++nb)
+    for (unsigned char nb = 0; nb<nbReconstruction; ++nb)
     {
         ::fwData::Reconstruction::sptr rec = ::fwData::Reconstruction::New();
 
@@ -209,7 +209,7 @@ void SeriesDB::generateSeriesInformation(::fwMedData::Series::sptr series)
     activitySeries->setActivityConfigId(CONFIG_ID);
 
     ::fwData::Composite::sptr data = ::fwData::Composite::New();
-    data->getContainer()["key1"] = ::fwData::String::New("ValueOfKey1");
+    data->getContainer()["key1"]   = ::fwData::String::New("ValueOfKey1");
     activitySeries->setData(data);
 
     return activitySeries;
@@ -228,14 +228,14 @@ void SeriesDB::generateReconstruction(::fwData::Reconstruction::sptr rec)
     rec->setImage(img);
 
     ::fwData::Material::sptr material = ::fwData::Material::New();
-    material->ambient()->red() = 0.75f;
-    material->ambient()->green() = 0.10f;
-    material->ambient()->blue() = 0.56f;
-    material->ambient()->alpha() = 0.8f;
-    material->diffuse()->red() = 0.85f;
-    material->diffuse()->green() = 0.20f;
-    material->diffuse()->blue() = 0.66f;
-    material->diffuse()->alpha() = 0.9f;
+    material->ambient()->red()        = 0.75f;
+    material->ambient()->green()      = 0.10f;
+    material->ambient()->blue()       = 0.56f;
+    material->ambient()->alpha()      = 0.8f;
+    material->diffuse()->red()        = 0.85f;
+    material->diffuse()->green()      = 0.20f;
+    material->diffuse()->blue()       = 0.66f;
+    material->diffuse()->alpha()      = 0.9f;
     rec->setMaterial(material);
 
     ::fwData::Mesh::sptr mesh = ::fwData::Mesh::New();
diff --git a/SrcLib/tests/fwTest/src/fwTest/helper/Thread.cpp b/SrcLib/tests/fwTest/src/fwTest/helper/Thread.cpp
index de988ee..ac98ef5 100644
--- a/SrcLib/tests/fwTest/src/fwTest/helper/Thread.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/helper/Thread.cpp
@@ -1,27 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/chrono/duration.hpp>
 #include "fwTest/helper/Thread.hpp"
 
+#include <chrono>
+#include <functional>
+
 namespace fwTest
 {
 namespace helper
 {
 
-Thread::Thread(FunctionType f) :
-        m_hasFailed(false)
+//-----------------------------------------------------------------------------
+
+Thread::Thread(FunctionType f) : m_hasFailed(false)
 {
-    m_thread = ::boost::thread(::boost::bind(&Thread::run, this, f));
+    m_thread = std::thread(std::bind(&Thread::run, this, f));
 }
 
+//-----------------------------------------------------------------------------
+
 Thread::~Thread()
 {
 }
 
+//-----------------------------------------------------------------------------
+
 void Thread::join(bool raise)
 {
     m_thread.join();
@@ -31,9 +38,19 @@ void Thread::join(bool raise)
     }
 }
 
+//-----------------------------------------------------------------------------
+
 bool Thread::timedJoin(int time, bool raise)
 {
-    bool joined = m_thread.try_join_for(boost::chrono::milliseconds(time));
+    bool joined = false;
+
+    std::this_thread::sleep_for(std::chrono::milliseconds(time));
+    if (m_thread.joinable())
+    {
+        m_thread.join();
+        joined = true;
+    }
+
     if (raise)
     {
         this->throwException();
@@ -41,6 +58,8 @@ bool Thread::timedJoin(int time, bool raise)
     return joined;
 }
 
+//-----------------------------------------------------------------------------
+
 void Thread::throwException()
 {
     if (this->hasFailed())
@@ -49,6 +68,8 @@ void Thread::throwException()
     }
 }
 
+//-----------------------------------------------------------------------------
+
 void Thread::run(FunctionType f)
 {
     try
diff --git a/SrcLib/tests/fwTest/src/fwTest/helper/compare.cpp b/SrcLib/tests/fwTest/src/fwTest/helper/compare.cpp
index 68beb57..a724d99 100644
--- a/SrcLib/tests/fwTest/src/fwTest/helper/compare.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/helper/compare.cpp
@@ -1,35 +1,58 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
+#include "fwTest/helper/compare.hpp"
 
 #include <fwData/Object.hpp>
-
 #include <fwDataCamp/visitor/CompareObjects.hpp>
 
-#include "fwTest/helper/compare.hpp"
+#include <boost/algorithm/string.hpp>
+
 
 namespace fwTest
 {
 namespace helper
 {
 
-bool compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp, ExcludeSetType excludeCompare)
+bool compare(
+    ::fwData::Object::sptr objRef,
+    ::fwData::Object::sptr objComp,
+    ExcludeSetType excludeCompare,
+    ExcludeSetType excludeByPrefix)
 {
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(objRef, objComp);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH(const ExcludeSetType::value_type& key, excludeCompare)
+
+    for(const ExcludeSetType::value_type& key: excludeCompare)
     {
         props->erase(key);
     }
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+
+    std::set< ::fwDataCamp::visitor::CompareObjects::PropsMapType::key_type > propsKey;
+    for(const ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type &prop: *props)
     {
-        OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
+        bool erased = false;
+        for(const ExcludeSetType::value_type& key: excludeByPrefix)
+        {
+            if(::boost::starts_with(prop.first, key))
+            {
+                propsKey.insert(prop.first);
+                erased = true;
+            }
+        }
+
+        OSLM_ERROR_IF("new object difference found : " << prop.first << " '" << prop.second << "'", !erased);
     }
+
+    for(const ::fwDataCamp::visitor::CompareObjects::PropsMapType::key_type &key: propsKey)
+    {
+        props->erase(key);
+    }
+
     return props->empty();
 }
 
diff --git a/SrcLib/tests/fwTest/src/fwTest/initialisation.cpp b/SrcLib/tests/fwTest/src/fwTest/initialisation.cpp
index 10b9e2b..5723cdd 100644
--- a/SrcLib/tests/fwTest/src/fwTest/initialisation.cpp
+++ b/SrcLib/tests/fwTest/src/fwTest/initialisation.cpp
@@ -1,15 +1,15 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <ostream>
-#include <cstdio>
+# include <fwCore/log/SpyLogger.hpp>
 
 #include <boost/filesystem.hpp>
 
-# include <fwCore/log/SpyLogger.hpp>
+#include <ostream>
+#include <cstdio>
 
 namespace fwTest
 {
@@ -36,7 +36,7 @@ struct LogInitialization
             else
             {
                 // creates SLM.log in temp directory: default dir unreachable
-                sysTmp = sysTmp / logFile;
+                sysTmp  = sysTmp / logFile;
                 logFile = sysTmp.string();
                 logger.addFileAppender(logFile);
             }
@@ -53,5 +53,5 @@ struct LogInitialization
 
 static LogInitialization init;
 
-}; //namespace fwTest
+}  //namespace fwTest
 
diff --git a/SrcLib/tests/fwTest/test/CMakeLists.txt b/SrcLib/tests/fwTest/test/CMakeLists.txt
index 384db7d..3881996 100644
--- a/SrcLib/tests/fwTest/test/CMakeLists.txt
+++ b/SrcLib/tests/fwTest/test/CMakeLists.txt
@@ -1,10 +1,7 @@
-
 fwLoadProperties()
-
-find_package (Boost REQUIRED)
 find_package(CppUnit)
-fwInclude(${Boost_INCLUDE_DIRS} ${CPPUNIT_INCLUDE_DIR})
-fwLink(${Boost_LIBRARIES} ${CPPUNIT_LIBRARY})
+fwInclude(${CPPUNIT_INCLUDE_DIR})
+fwLink(${CPPUNIT_LIBRARY})
 
 
 
diff --git a/SrcLib/tests/fwTest/test/Properties.cmake b/SrcLib/tests/fwTest/test/Properties.cmake
index f00957c..9df6af1 100644
--- a/SrcLib/tests/fwTest/test/Properties.cmake
+++ b/SrcLib/tests/fwTest/test/Properties.cmake
@@ -2,6 +2,6 @@
 set( NAME fwTestTest )
 set( VERSION  )
 set( TYPE TEST )
-set( DEPENDENCIES fwCore fwTest fwTools fwData )
+set( DEPENDENCIES fwCore fwTest fwTools fwData  fwMedData fwDataCamp)
 set( REQUIREMENTS  )
 
diff --git a/SrcLib/tests/fwTest/test/cppunit.options b/SrcLib/tests/fwTest/test/cppunit.options
deleted file mode 100644
index e78db87..0000000
--- a/SrcLib/tests/fwTest/test/cppunit.options
+++ /dev/null
@@ -1,15 +0,0 @@
-CLASSTEST=[
-          'ImageTest',
-          'SeriesDBTest',
-          ]
-
-USE = ['boost']
-LIB = [
-       'fwData_0-1',
-       'fwDataCamp_0-1',
-       'fwTools_0-1',
-       'fwCore_0-1',
-       'fwTest_0-1'
-       ]
-CONSOLE = 'yes'
-LOGLEVEL='trace'
diff --git a/SrcLib/tests/fwTest/test/tu/include/ImageTest.hpp b/SrcLib/tests/fwTest/test/tu/include/ImageTest.hpp
index 7cf5a5f..d69c0b6 100644
--- a/SrcLib/tests/fwTest/test/tu/include/ImageTest.hpp
+++ b/SrcLib/tests/fwTest/test/tu/include/ImageTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTEST_TEST_TU_IMAGETEST_HPP_
-#define _FWTEST_TEST_TU_IMAGETEST_HPP_
+#ifndef __FWTEST_UT_IMAGETEST_HPP__
+#define __FWTEST_UT_IMAGETEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -21,12 +21,12 @@ namespace ut
  */
 class ImageTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( ImageTest );
-    CPPUNIT_TEST( generator3DTest );
-    CPPUNIT_TEST( generator2DTest );
-    CPPUNIT_TEST( deepCopyTest );
-    CPPUNIT_TEST( stressTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( ImageTest );
+CPPUNIT_TEST( generator3DTest );
+CPPUNIT_TEST( generator2DTest );
+CPPUNIT_TEST( deepCopyTest );
+CPPUNIT_TEST( stressTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -48,4 +48,4 @@ private:
 } //namespace ut
 } //namespace fwTest
 
-#endif //_FWTEST_TEST_TU_IMAGETEST_HPP_
+#endif //__FWTEST_UT_IMAGETEST_HPP__
diff --git a/SrcLib/tests/fwTest/test/tu/include/SeriesDBTest.hpp b/SrcLib/tests/fwTest/test/tu/include/SeriesDBTest.hpp
index b85aa5c..14066ac 100644
--- a/SrcLib/tests/fwTest/test/tu/include/SeriesDBTest.hpp
+++ b/SrcLib/tests/fwTest/test/tu/include/SeriesDBTest.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWTEST_TEST_TU_SERIESDBTEST_HPP_
-#define _FWTEST_TEST_TU_SERIESDBTEST_HPP_
+#ifndef __FWTEST_UT_SERIESDBTEST_HPP__
+#define __FWTEST_UT_SERIESDBTEST_HPP__
 
 #include <cppunit/extensions/HelperMacros.h>
 
@@ -19,9 +19,9 @@ namespace ut
  */
 class SeriesDBTest : public CPPUNIT_NS::TestFixture
 {
-    CPPUNIT_TEST_SUITE( SeriesDBTest );
-    CPPUNIT_TEST( generationTest );
-    CPPUNIT_TEST_SUITE_END();
+CPPUNIT_TEST_SUITE( SeriesDBTest );
+CPPUNIT_TEST( generationTest );
+CPPUNIT_TEST_SUITE_END();
 
 public:
     // interface
@@ -38,4 +38,4 @@ public:
 } //namespace ut
 } //namespace fwTest
 
-#endif //_FWTEST_TEST_TU_SERIESDBTEST_HPP_
+#endif //__FWTEST_UT_SERIESDBTEST_HPP__
diff --git a/SrcLib/tests/fwTest/test/tu/src/ImageTest.cpp b/SrcLib/tests/fwTest/test/tu/src/ImageTest.cpp
index 7d8dd62..5a53ad7 100644
--- a/SrcLib/tests/fwTest/test/tu/src/ImageTest.cpp
+++ b/SrcLib/tests/fwTest/test/tu/src/ImageTest.cpp
@@ -1,18 +1,14 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <fwTools/Type.hpp>
+#include "ImageTest.hpp"
 
 #include <fwDataCamp/visitor/CompareObjects.hpp>
-
 #include <fwTest/generator/Image.hpp>
-
-#include "ImageTest.hpp"
+#include <fwTools/Type.hpp>
 
 // Registers the fixture into the 'registry'
 CPPUNIT_TEST_SUITE_REGISTRATION( ::fwTest::ut::ImageTest );
@@ -29,11 +25,11 @@ void compare(::fwData::Object::sptr objRef, ::fwData::Object::sptr objComp)
     ::fwDataCamp::visitor::CompareObjects visitor;
     visitor.compare(objRef, objComp);
     SPTR(::fwDataCamp::visitor::CompareObjects::PropsMapType) props = visitor.getDifferences();
-    BOOST_FOREACH( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop, (*props) )
+    for( ::fwDataCamp::visitor::CompareObjects::PropsMapType::value_type prop :  (*props) )
     {
         OSLM_ERROR( "new object difference found : " << prop.first << " '" << prop.second << "'" );
     }
-    CPPUNIT_ASSERT_MESSAGE("Object Not equal" , props->size() == 0 );
+    CPPUNIT_ASSERT_MESSAGE("Object Not equal", props->size() == 0 );
 }
 
 //------------------------------------------------------------------------------
@@ -66,9 +62,9 @@ void ImageTest::generator3DTest()
     spacing[1] = 2.6;
     spacing[2] = 1.87;
     ::fwData::Image::OriginType origin(dim);
-    origin[0] = -45.6;
-    origin[1] = 25.97;
-    origin[2] = -53.9;
+    origin[0]            = -45.6;
+    origin[1]            = 25.97;
+    origin[2]            = -53.9;
     ::fwTools::Type type = ::fwTools::Type::create< ::boost::int32_t >();
 
     ::fwTest::generator::Image::generateImage(image, size, spacing, origin, type);
@@ -92,8 +88,8 @@ void ImageTest::generator2DTest()
     spacing[0] = 0.85;
     spacing[1] = 2.6;
     std::vector<double> origin(dim);
-    origin[0] = -45.6;
-    origin[1] = 25.97;
+    origin[0]            = -45.6;
+    origin[1]            = 25.97;
     ::fwTools::Type type = ::fwTools::Type::create< ::boost::int16_t >();
 
     ::fwTest::generator::Image::generateImage(image, size, spacing, origin, type);
@@ -155,7 +151,7 @@ void ImageTest::stressTest()
 
 void ImageTest::stressTestWithType(::fwTools::Type type, int nbTest)
 {
-    for (int nb=0 ; nb < nbTest ; ++nb)
+    for (int nb = 0; nb < nbTest; ++nb)
     {
         ::fwData::Image::sptr image = ::fwData::Image::New();
         ::fwTest::generator::Image::generateRandomImage(image, type);
diff --git a/SrcLib/tests/fwTest/test/tu/src/SeriesDBTest.cpp b/SrcLib/tests/fwTest/test/tu/src/SeriesDBTest.cpp
index 5b7561d..f3d2846 100644
--- a/SrcLib/tests/fwTest/test/tu/src/SeriesDBTest.cpp
+++ b/SrcLib/tests/fwTest/test/tu/src/SeriesDBTest.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -48,8 +48,8 @@ void SeriesDBTest::tearDown()
 
 void SeriesDBTest::generationTest()
 {
-    const unsigned char nbImgSeries = 3;
-    const unsigned char nbModelSeries = 4;
+    const unsigned char nbImgSeries      = 3;
+    const unsigned char nbModelSeries    = 4;
     const unsigned char nbActivitySeries = 5;
     ::fwMedData::SeriesDB::sptr seriesDB;
     seriesDB = ::fwTest::generator::SeriesDB::createSeriesDB(nbImgSeries, nbModelSeries, nbActivitySeries);
@@ -60,9 +60,9 @@ void SeriesDBTest::generationTest()
     CPPUNIT_ASSERT(::fwMedData::ImageSeries::dynamicCast(seriesContainer[0]));
 
     ::fwMedData::DicomValuesType performingPhysiciansName;
-    performingPhysiciansName.push_back("Dr Jekyl");
-    performingPhysiciansName.push_back("Dr House");
-    performingPhysiciansName.push_back("Dr Einstein ");
+    performingPhysiciansName.push_back("Dr^Jekyl");
+    performingPhysiciansName.push_back("Dr^House");
+    performingPhysiciansName.push_back("Dr^Einstein ");
 
     unsigned char nbIS = 0;
     unsigned char nbMS = 0;
@@ -70,40 +70,40 @@ void SeriesDBTest::generationTest()
 
     unsigned int count = 1;
     std::stringstream str;
-    BOOST_FOREACH(::fwMedData::Series::sptr series, seriesContainer)
+    for(::fwMedData::Series::sptr series :  seriesContainer)
     {
         str.str("");
         str.width(4);
         str.fill('0');
         str << count++;
-        CPPUNIT_ASSERT_EQUAL(std::string("1.2.826.0.1.3680043.2.1125.102906542887009256605006409108689" + str.str()) ,
+        CPPUNIT_ASSERT_EQUAL(std::string("1.2.826.0.1.3680043.2.1125.102906542887009256605006409108689" + str.str()),
                              series->getInstanceUID());
-        CPPUNIT_ASSERT_EQUAL(std::string("CT") , series->getModality());
-        CPPUNIT_ASSERT_EQUAL(std::string("20130418") , series->getDate());
-        CPPUNIT_ASSERT_EQUAL(std::string("101010.101010 ") , series->getTime());
-        CPPUNIT_ASSERT_EQUAL(std::string("Description ") , series->getDescription());
+        CPPUNIT_ASSERT_EQUAL(std::string("CT"), series->getModality());
+        CPPUNIT_ASSERT_EQUAL(std::string("20130418"), series->getDate());
+        CPPUNIT_ASSERT_EQUAL(std::string("101010.101010 "), series->getTime());
+        CPPUNIT_ASSERT_EQUAL(std::string("Description "), series->getDescription());
         CPPUNIT_ASSERT(performingPhysiciansName == series->getPerformingPhysiciansName());
 
         ::fwMedData::Patient::sptr patient = series->getPatient();
-        CPPUNIT_ASSERT_EQUAL(std::string("NomSeriesDB1^PrenomSeriesDB1") , patient->getName());
-        CPPUNIT_ASSERT_EQUAL(std::string("4564383757") , patient->getPatientId());
-        CPPUNIT_ASSERT_EQUAL(std::string("19710418 095318.185236") , patient->getBirthdate());
-        CPPUNIT_ASSERT_EQUAL(std::string("O ") , patient->getSex());
+        CPPUNIT_ASSERT_EQUAL(std::string("NomSeriesDB1^PrenomSeriesDB1"), patient->getName());
+        CPPUNIT_ASSERT_EQUAL(std::string("4564383757"), patient->getPatientId());
+        CPPUNIT_ASSERT_EQUAL(std::string("19710418"), patient->getBirthdate());
+        CPPUNIT_ASSERT_EQUAL(std::string("O "), patient->getSex());
 
         ::fwMedData::Study::sptr study = series->getStudy();
-        CPPUNIT_ASSERT_EQUAL(std::string("1.2.826.0.1.3680043.2.1125.44278200849347599055201494082232" + str.str()) ,
+        CPPUNIT_ASSERT_EQUAL(std::string("1.2.826.0.1.3680043.2.1125.44278200849347599055201494082232" + str.str()),
                              study->getInstanceUID());
-        CPPUNIT_ASSERT_EQUAL(std::string("20130418") , study->getDate());
-        CPPUNIT_ASSERT_EQUAL(std::string("095948.689872 ") , study->getTime());
-        CPPUNIT_ASSERT_EQUAL(std::string("Dr Jekyl") , study->getReferringPhysicianName());
-        CPPUNIT_ASSERT_EQUAL(std::string("Say 33. ") , study->getDescription());
-        CPPUNIT_ASSERT_EQUAL(std::string("042Y") , study->getPatientAge());
+        CPPUNIT_ASSERT_EQUAL(std::string("20130418"), study->getDate());
+        CPPUNIT_ASSERT_EQUAL(std::string("095948.689872 "), study->getTime());
+        CPPUNIT_ASSERT_EQUAL(std::string("Dr^Jekyl"), study->getReferringPhysicianName());
+        CPPUNIT_ASSERT_EQUAL(std::string("Say 33. "), study->getDescription());
+        CPPUNIT_ASSERT_EQUAL(std::string("042Y"), study->getPatientAge());
 
         ::fwMedData::Equipment::sptr equipement = series->getEquipment();
         CPPUNIT_ASSERT_EQUAL(std::string("hospital"), equipement->getInstitutionName());
 
-        ::fwMedData::ImageSeries::sptr imgSeries = ::fwMedData::ImageSeries::dynamicCast(series);
-        ::fwMedData::ModelSeries::sptr modelSeries = ::fwMedData::ModelSeries::dynamicCast(series);
+        ::fwMedData::ImageSeries::sptr imgSeries         = ::fwMedData::ImageSeries::dynamicCast(series);
+        ::fwMedData::ModelSeries::sptr modelSeries       = ::fwMedData::ModelSeries::dynamicCast(series);
         ::fwMedData::ActivitySeries::sptr activitySeries = ::fwMedData::ActivitySeries::dynamicCast(series);
 
         if (imgSeries)
diff --git a/SrcLib/ui/fwDicomIOFilterQt/CMakeLists.txt b/SrcLib/ui/fwDicomIOFilterQt/CMakeLists.txt
new file mode 100644
index 0000000..3262da6
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/CMakeLists.txt
@@ -0,0 +1,19 @@
+fwLoadProperties()
+
+
+find_package (Boost REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+
+find_package(DCMTK REQUIRED)
+fwForwardInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
+
+find_package(Qt5 COMPONENTS Core Gui Widgets Concurrent REQUIRED)
+fwLink(
+    ${Qt5Core_LIBRARIES}
+    ${Qt5Gui_LIBRARIES}
+    ${Qt5Widgets_LIBRARIES}
+    ${Qt5Concurrent_LIBRARIES}
+)
+
+set_target_properties(${FWPROJECT_NAME} PROPERTIES AUTOMOC TRUE)
diff --git a/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake b/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake
new file mode 100644
index 0000000..536083a
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/Properties.cmake
@@ -0,0 +1,15 @@
+
+set( NAME fwDicomIOFilterQt )
+set( VERSION 0.1 )
+set( TYPE LIBRARY )
+set( DEPENDENCIES
+    fwCore
+    fwTools
+    fwMedData
+    fwDicomIOFilter
+    fwGui
+    fwGuiQt
+    fwDcmtkTools
+    )
+set( REQUIREMENTS )
+
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/Plugin.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/Plugin.hpp
new file mode 100644
index 0000000..feb9e86
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/Plugin.hpp
@@ -0,0 +1,31 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_PLUGIN_HPP__
+#define __FWDICOMIOFILTERQT_PLUGIN_HPP__
+
+#include "fwDicomIOFilterQt/config.hpp"
+
+namespace fwDicomIOFilterQt
+{
+
+/**
+ * @brief Hack to force links
+ */
+class Plugin
+{
+public:
+
+    /// Constructor
+    FWDICOMIOFILTERQT_API Plugin();
+
+    /// Destructor
+    FWDICOMIOFILTERQT_API ~Plugin();
+};
+
+} // namespace fwDicomIOFilterQt
+
+#endif /*__FWDICOMIOFILTERQT_PLUGIN_HPP__*/
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/namespace.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/namespace.hpp
new file mode 100644
index 0000000..7c7d778
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/namespace.hpp
@@ -0,0 +1,40 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_NAMESPACE_HPP__
+#define __FWDICOMIOFILTERQT_NAMESPACE_HPP__
+
+/**
+ * @brief fwDicomIOFilterQt contains filters used to pre-process images before reading.
+ */
+namespace fwDicomIOFilterQt
+{
+
+/**
+ * @brief sorter contains sorters used to sort instances.
+ */
+namespace sorter
+{
+} // namespace sorter
+
+/**
+ * @brief splitter contains splitters to split images.
+ */
+namespace splitter
+{
+} // namespace splitter
+
+/**
+ * @brief widget contains configuration widgets.
+ */
+namespace widget
+{
+} // namespace widget
+
+} // namespace fwDicomIOFilterQt
+
+#endif /* __FWDICOMIOFILTERQT_NAMESPACE_HPP__ */
+
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.hpp
new file mode 100644
index 0000000..d02be89
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.hpp
@@ -0,0 +1,63 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_SORTER_TAGVALUECONFIGURABLESORTER_HPP__
+#define __FWDICOMIOFILTERQT_SORTER_TAGVALUECONFIGURABLESORTER_HPP__
+
+#include "fwDicomIOFilterQt/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwDicomIOFilter/sorter/TagValueSorter.hpp>
+
+namespace fwDicomIOFilterQt
+{
+namespace sorter
+{
+
+/**
+ * @brief Filter that uses a tag to sort the instances.
+ */
+class FWDICOMIOFILTERQT_CLASS_API TagValueConfigurableSorter : public ::fwDicomIOFilter::sorter::TagValueSorter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TagValueConfigurableSorter)(::fwDicomIOFilter::sorter::TagValueSorter),
+                                            (()), ::fwDicomIOFilter::factory::New< TagValueConfigurableSorter > );
+
+    /// Constructor
+    FWDICOMIOFILTERQT_API TagValueConfigurableSorter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTERQT_API virtual ~TagValueConfigurableSorter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTERQT_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTERQT_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTERQT_API virtual bool isConfigurationRequired() const;
+
+    /// Return true if the filter is configurable using GUI
+    FWDICOMIOFILTERQT_API virtual bool isConfigurableWithGUI() const;
+
+    /// Configure the filter using GUI dialog
+    FWDICOMIOFILTERQT_API virtual void configureWithGUI();
+
+protected:
+    /// Filter name
+    FWDICOMIOFILTERQT_API static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    FWDICOMIOFILTERQT_API static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace sorter
+} // namespace fwDicomIOFilterQt
+
+
+#endif /* __FWDICOMIOFILTERQT_SORTER_TAGVALUECONFIGURABLESORTER_HPP__ */
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.hpp
new file mode 100644
index 0000000..22c46c6
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.hpp
@@ -0,0 +1,64 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_SPLITTER_TAGVALUECONFIGURABLESPLITTER_HPP__
+#define __FWDICOMIOFILTERQT_SPLITTER_TAGVALUECONFIGURABLESPLITTER_HPP__
+
+#include "fwDicomIOFilterQt/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwDicomIOFilter/splitter/TagValueSplitter.hpp>
+
+namespace fwDicomIOFilterQt
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that uses a tag to split the instances.
+ */
+class FWDICOMIOFILTERQT_CLASS_API TagValueConfigurableSplitter : public ::fwDicomIOFilter::splitter::TagValueSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TagValueConfigurableSplitter)
+                                            (::fwDicomIOFilter::splitter::TagValueSplitter),
+                                            (()), ::fwDicomIOFilter::factory::New< TagValueConfigurableSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTERQT_API TagValueConfigurableSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTERQT_API virtual ~TagValueConfigurableSplitter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTERQT_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTERQT_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTERQT_API virtual bool isConfigurationRequired() const;
+
+    /// Return true if the filter is configurable using GUI
+    FWDICOMIOFILTERQT_API virtual bool isConfigurableWithGUI() const;
+
+    /// Configure the filter using GUI dialog
+    FWDICOMIOFILTERQT_API virtual void configureWithGUI();
+
+protected:
+    /// Filter name
+    FWDICOMIOFILTERQT_API static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    FWDICOMIOFILTERQT_API static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilterQt
+
+
+#endif /* __FWDICOMIOFILTERQT_SPLITTER_TAGVALUECONFIGURABLESPLITTER_HPP__ */
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.hpp
new file mode 100644
index 0000000..2f9b84b
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.hpp
@@ -0,0 +1,66 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_SPLITTER_TAGVALUEINSTANCEREMOVECONFIGURABLESPLITTER_HPP__
+#define __FWDICOMIOFILTERQT_SPLITTER_TAGVALUEINSTANCEREMOVECONFIGURABLESPLITTER_HPP__
+
+#include "fwDicomIOFilterQt/config.hpp"
+
+#include <fwMedData/DicomSeries.hpp>
+#include <fwDicomIOFilter/splitter/TagValueInstanceRemoveSplitter.hpp>
+
+namespace fwDicomIOFilterQt
+{
+namespace splitter
+{
+
+/**
+ * @brief Filter that remove instances if a tag has a certain value.
+ */
+class FWDICOMIOFILTERQT_CLASS_API TagValueInstanceRemoveConfigurableSplitter :
+    public ::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter
+{
+public:
+    fwCoreClassDefinitionsWithFactoryMacro( (TagValueInstanceRemoveConfigurableSplitter)
+                                            (::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter),
+                                            (()),
+                                            ::fwDicomIOFilter::factory::New< TagValueInstanceRemoveConfigurableSplitter > );
+
+    /// Constructor
+    FWDICOMIOFILTERQT_API TagValueInstanceRemoveConfigurableSplitter(::fwDicomIOFilter::IFilter::Key key);
+
+    /// Destructor
+    FWDICOMIOFILTERQT_API virtual ~TagValueInstanceRemoveConfigurableSplitter();
+
+    /// Return the name of the filter
+    FWDICOMIOFILTERQT_API virtual std::string getName() const;
+
+    /// Return the description of the filter
+    FWDICOMIOFILTERQT_API virtual std::string getDescription() const;
+
+    /// Return true if a configuration is required
+    FWDICOMIOFILTERQT_API virtual bool isConfigurationRequired() const;
+
+    /// Return true if the filter is configurable using GUI
+    FWDICOMIOFILTERQT_API virtual bool isConfigurableWithGUI() const;
+
+    /// Configure the filter using GUI dialog
+    FWDICOMIOFILTERQT_API virtual void configureWithGUI();
+
+protected:
+    /// Filter name
+    FWDICOMIOFILTERQT_API static const std::string s_FILTER_NAME;
+
+    /// Filter description
+    FWDICOMIOFILTERQT_API static const std::string s_FILTER_DESCRIPTION;
+
+};
+
+} // namespace splitter
+} // namespace fwDicomIOFilterQt
+
+
+#endif /* __FWDICOMIOFILTERQT_SPLITTER_TAGVALUEINSTANCEREMOVECONFIGURABLESPLITTER_HPP__ */
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/widget/QHexSpinBox.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/widget/QHexSpinBox.hpp
new file mode 100644
index 0000000..d06aea1
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/widget/QHexSpinBox.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_WIDGET_QHEXSPINBOX_HPP__
+#define __FWDICOMIOFILTERQT_WIDGET_QHEXSPINBOX_HPP__
+
+#include "fwDicomIOFilterQt/config.hpp"
+
+#include <QRegExpValidator>
+#include <QSpinBox>
+#include <QWidget>
+
+namespace fwDicomIOFilterQt
+{
+namespace widget
+{
+
+/**
+ * @brief QSpinBox for hexadecimal values
+ */
+class QHexSpinBox : public QSpinBox
+{
+Q_OBJECT;
+
+public:
+    /// Constructor
+    QHexSpinBox(QWidget* parent = 0);
+
+protected:
+    /// Override
+    QValidator::State validate(QString& text, int& pos) const;
+
+    /// Override
+    int valueFromText(const QString& text) const;
+
+    /// Override
+    QString textFromValue(int value) const;
+
+
+    QRegExpValidator* m_validator;
+
+
+};
+
+} // namespace widget
+} // namespace fwDicomIOFilterQt
+
+
+#endif /* __FWDICOMIOFILTERQT_WIDGET_QHEXSPINBOX_HPP__ */
diff --git a/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp
new file mode 100644
index 0000000..5dd0634
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/include/fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp
@@ -0,0 +1,67 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWDICOMIOFILTERQT_WIDGET_QTAGSELECTORWIDGET_HPP__
+#define __FWDICOMIOFILTERQT_WIDGET_QTAGSELECTORWIDGET_HPP__
+
+#include "fwDicomIOFilterQt/config.hpp"
+#include "fwDicomIOFilterQt/widget/QHexSpinBox.hpp"
+
+#include <QLabel>
+#include <QPointer>
+#include <QWidget>
+
+#include <dcmtk/dcmdata/dctagkey.h>
+
+namespace fwDicomIOFilterQt
+{
+namespace widget
+{
+
+/**
+ * @brief Widget used to select a dicom tag
+ */
+class QTagSelectorWidget : public QWidget
+{
+Q_OBJECT;
+
+public:
+    /// Constructor
+    QTagSelectorWidget(QWidget* parent = 0);
+
+    /// Destructor
+    ~QTagSelectorWidget();
+
+    /// Set tag
+    void setTagValue(const DcmTagKey& tag);
+
+    /// Get tag
+    DcmTagKey getTag();
+
+protected Q_SLOTS:
+    /// Update tag name when selected tag changes
+    void updateTagName(int value = 0);
+
+protected:
+    /// Group spin box
+    QPointer< ::fwDicomIOFilterQt::widget::QHexSpinBox > m_groupSpinBox;
+
+    /// Tag spin box
+    QPointer< ::fwDicomIOFilterQt::widget::QHexSpinBox > m_elementSpinBox;
+
+    /// tag name label
+    QPointer< QLabel > m_tagNameLabel;
+
+    /// Tag
+    DcmTagKey m_tag;
+
+};
+
+} // namespace widget
+} // namespace fwDicomIOFilterQt
+
+
+#endif /* __FWDICOMIOFILTERQT_WIDGET_QTAGSELECTORWIDGET_HPP__ */
diff --git a/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/Plugin.cpp b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/Plugin.cpp
new file mode 100644
index 0000000..67e778b
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/Plugin.cpp
@@ -0,0 +1,22 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilterQt/Plugin.hpp"
+
+namespace fwDicomIOFilterQt
+{
+
+Plugin::Plugin()
+{
+}
+
+Plugin::~Plugin()
+{
+}
+
+} //namespace fwDicomIOFilterQt
+
+
diff --git a/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.cpp b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.cpp
new file mode 100644
index 0000000..96a2a9d
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.cpp
@@ -0,0 +1,108 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilterQt/sorter/TagValueConfigurableSorter.hpp"
+#include "fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp"
+
+#include <fwDicomIOFilter/registry/macros.hpp>
+
+#include <QApplication>
+#include <QDialog>
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QWidget>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilterQt::sorter::TagValueConfigurableSorter );
+
+namespace fwDicomIOFilterQt
+{
+namespace sorter
+{
+
+const std::string TagValueConfigurableSorter::s_FILTER_NAME        = "Tag value configurable sorter";
+const std::string TagValueConfigurableSorter::s_FILTER_DESCRIPTION =
+    "Sort instances using a tag value.";
+
+//-----------------------------------------------------------------------------
+
+TagValueConfigurableSorter::TagValueConfigurableSorter(::fwDicomIOFilter::IFilter::Key key) :
+    ::fwDicomIOFilter::sorter::TagValueSorter(key)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueConfigurableSorter::~TagValueConfigurableSorter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueConfigurableSorter::getName() const
+{
+    return TagValueConfigurableSorter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueConfigurableSorter::getDescription() const
+{
+
+    return TagValueConfigurableSorter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueConfigurableSorter::isConfigurationRequired() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueConfigurableSorter::isConfigurableWithGUI() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+void TagValueConfigurableSorter::configureWithGUI()
+{
+    QDialog* dialog = new QDialog(qApp->activeWindow());
+    dialog->setWindowTitle(QString("Configure"));
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+    dialog->setLayout(mainLayout);
+    dialog->setMinimumWidth(500);
+
+    // Create tag selectors
+    ::fwDicomIOFilterQt::widget::QTagSelectorWidget* tagSelector =
+        new ::fwDicomIOFilterQt::widget::QTagSelectorWidget();
+    tagSelector->setTagValue(m_tag);
+    mainLayout->addWidget(tagSelector);
+
+    // Create buttons
+    QDialogButtonBox* buttonBox = new QDialogButtonBox(dialog);
+    mainLayout->addWidget(buttonBox);
+    QPushButton* okButton     = buttonBox->addButton(QDialogButtonBox::Ok);
+    QPushButton* cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel);
+
+    QObject::connect(okButton, SIGNAL(clicked(void)), dialog, SLOT(accept(void)));
+    QObject::connect(cancelButton, SIGNAL(clicked(void)), dialog, SLOT(reject(void)));
+
+
+    int result = dialog->exec();
+    if(result == QDialog::Accepted)
+    {
+        m_tag = tagSelector->getTag();
+    }
+}
+
+} // namespace sorter
+} // namespace fwDicomIOFilterQt
diff --git a/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.cpp b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.cpp
new file mode 100644
index 0000000..adc6c6c
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.cpp
@@ -0,0 +1,108 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilterQt/splitter/TagValueConfigurableSplitter.hpp"
+#include "fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp"
+
+#include <fwDicomIOFilter/registry/macros.hpp>
+
+#include <QApplication>
+#include <QDialog>
+#include <QDialogButtonBox>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QWidget>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilterQt::splitter::TagValueConfigurableSplitter );
+
+namespace fwDicomIOFilterQt
+{
+namespace splitter
+{
+
+const std::string TagValueConfigurableSplitter::s_FILTER_NAME        = "Tag value configurable splitter";
+const std::string TagValueConfigurableSplitter::s_FILTER_DESCRIPTION =
+    "Split instances using a tag value.";
+
+//-----------------------------------------------------------------------------
+
+TagValueConfigurableSplitter::TagValueConfigurableSplitter(::fwDicomIOFilter::IFilter::Key key) :
+    ::fwDicomIOFilter::splitter::TagValueSplitter(key)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueConfigurableSplitter::~TagValueConfigurableSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueConfigurableSplitter::getName() const
+{
+    return TagValueConfigurableSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueConfigurableSplitter::getDescription() const
+{
+
+    return TagValueConfigurableSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueConfigurableSplitter::isConfigurationRequired() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueConfigurableSplitter::isConfigurableWithGUI() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+void TagValueConfigurableSplitter::configureWithGUI()
+{
+    QDialog* dialog = new QDialog(qApp->activeWindow());
+    dialog->setWindowTitle(QString("Configure"));
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+    dialog->setLayout(mainLayout);
+    dialog->setMinimumWidth(500);
+
+    // Create tag selectors
+    ::fwDicomIOFilterQt::widget::QTagSelectorWidget* tagSelector =
+        new ::fwDicomIOFilterQt::widget::QTagSelectorWidget();
+    tagSelector->setTagValue(m_tag);
+    mainLayout->addWidget(tagSelector);
+
+    // Create buttons
+    QDialogButtonBox* buttonBox = new QDialogButtonBox(dialog);
+    mainLayout->addWidget(buttonBox);
+    QPushButton* okButton     = buttonBox->addButton(QDialogButtonBox::Ok);
+    QPushButton* cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel);
+
+    QObject::connect(okButton, SIGNAL(clicked(void)), dialog, SLOT(accept(void)));
+    QObject::connect(cancelButton, SIGNAL(clicked(void)), dialog, SLOT(reject(void)));
+
+
+    int result = dialog->exec();
+    if(result == QDialog::Accepted)
+    {
+        m_tag = tagSelector->getTag();
+    }
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilterQt
diff --git a/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.cpp b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.cpp
new file mode 100644
index 0000000..7ce2c39
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.cpp
@@ -0,0 +1,123 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilterQt/splitter/TagValueInstanceRemoveConfigurableSplitter.hpp"
+#include "fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp"
+
+#include <fwDicomIOFilter/registry/macros.hpp>
+
+#include <QApplication>
+#include <QDialog>
+#include <QDialogButtonBox>
+#include <QHBoxLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QVBoxLayout>
+#include <QWidget>
+
+#include <dcmtk/dcmdata/dcdeftag.h>
+
+fwDicomIOFilterRegisterMacro( ::fwDicomIOFilterQt::splitter::TagValueInstanceRemoveConfigurableSplitter );
+
+namespace fwDicomIOFilterQt
+{
+namespace splitter
+{
+
+const std::string TagValueInstanceRemoveConfigurableSplitter::s_FILTER_NAME =
+    "Tag value instance remove configurable splitter";
+const std::string TagValueInstanceRemoveConfigurableSplitter::s_FILTER_DESCRIPTION =
+    "Remove instances if a tag has a certain value.";
+
+//-----------------------------------------------------------------------------
+
+TagValueInstanceRemoveConfigurableSplitter::TagValueInstanceRemoveConfigurableSplitter(
+    ::fwDicomIOFilter::IFilter::Key key) :
+    ::fwDicomIOFilter::splitter::TagValueInstanceRemoveSplitter(key)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+TagValueInstanceRemoveConfigurableSplitter::~TagValueInstanceRemoveConfigurableSplitter()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueInstanceRemoveConfigurableSplitter::getName() const
+{
+    return TagValueInstanceRemoveConfigurableSplitter::s_FILTER_NAME;
+}
+
+//-----------------------------------------------------------------------------
+
+std::string TagValueInstanceRemoveConfigurableSplitter::getDescription() const
+{
+
+    return TagValueInstanceRemoveConfigurableSplitter::s_FILTER_DESCRIPTION;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueInstanceRemoveConfigurableSplitter::isConfigurationRequired() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+bool TagValueInstanceRemoveConfigurableSplitter::isConfigurableWithGUI() const
+{
+    return true;
+}
+
+//-----------------------------------------------------------------------------
+
+void TagValueInstanceRemoveConfigurableSplitter::configureWithGUI()
+{
+    QDialog* dialog = new QDialog(qApp->activeWindow());
+    dialog->setWindowTitle(QString("Configure"));
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+    dialog->setLayout(mainLayout);
+    dialog->setMinimumWidth(500);
+
+    // Create tag selectors
+    ::fwDicomIOFilterQt::widget::QTagSelectorWidget* tagSelector =
+        new ::fwDicomIOFilterQt::widget::QTagSelectorWidget();
+    tagSelector->setTagValue(m_tag);
+    mainLayout->addWidget(tagSelector);
+
+    // Create tag value field
+    QWidget* tagValueWidget = new QWidget();
+    mainLayout->addWidget(tagValueWidget);
+    QHBoxLayout* tagValueLayout = new QHBoxLayout();
+    tagValueWidget->setLayout(tagValueLayout);
+    tagValueLayout->addWidget(new QLabel("<b>Value:</b> "));
+    QLineEdit* tagValuelineEdit = new QLineEdit(m_tagValue.c_str());
+    tagValueLayout->addWidget(tagValuelineEdit, 1);
+    tagValueLayout->setContentsMargins(QMargins(0,0,0,0));
+
+    // Create buttons
+    QDialogButtonBox* buttonBox = new QDialogButtonBox(dialog);
+    mainLayout->addWidget(buttonBox);
+    QPushButton* okButton     = buttonBox->addButton(QDialogButtonBox::Ok);
+    QPushButton* cancelButton = buttonBox->addButton(QDialogButtonBox::Cancel);
+
+    QObject::connect(okButton, SIGNAL(clicked(void)), dialog, SLOT(accept(void)));
+    QObject::connect(cancelButton, SIGNAL(clicked(void)), dialog, SLOT(reject(void)));
+
+
+    int result = dialog->exec();
+    if(result == QDialog::Accepted)
+    {
+        m_tag      = tagSelector->getTag();
+        m_tagValue = tagValuelineEdit->text().toStdString();
+    }
+}
+
+} // namespace splitter
+} // namespace fwDicomIOFilterQt
diff --git a/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/widget/QHexSpinBox.cpp b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/widget/QHexSpinBox.cpp
new file mode 100644
index 0000000..1d956f0
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/widget/QHexSpinBox.cpp
@@ -0,0 +1,51 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilterQt/widget/QHexSpinBox.hpp"
+
+namespace fwDicomIOFilterQt
+{
+namespace widget
+{
+
+
+//-----------------------------------------------------------------------------
+
+QHexSpinBox::QHexSpinBox(QWidget* parent) : QSpinBox(parent)
+{
+    this->setRange(0,0xFFFF);
+    m_validator = new QRegExpValidator(QRegExp("[0-9A-Fa-f]{1,4}"), this);
+}
+
+//-----------------------------------------------------------------------------
+
+QValidator::State QHexSpinBox::validate(QString& text, int& pos) const
+{
+    return m_validator->validate(text, pos);
+}
+
+//-----------------------------------------------------------------------------
+
+int QHexSpinBox::valueFromText(const QString& text) const
+{
+    bool ok;
+    return text.toInt(&ok, 16);
+}
+
+//-----------------------------------------------------------------------------
+
+QString QHexSpinBox::textFromValue(int value) const
+{
+    QString res = QString::number(value, 16).toUpper();
+    for(unsigned int i = res.size(); i < 4; ++i)
+    {
+        res = "0" + res;
+    }
+    return res;
+}
+
+} // namespace widget
+} // namespace fwDicomIOFilterQt
diff --git a/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/widget/QTagSelectorWidget.cpp b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/widget/QTagSelectorWidget.cpp
new file mode 100644
index 0000000..726d420
--- /dev/null
+++ b/SrcLib/ui/fwDicomIOFilterQt/src/fwDicomIOFilterQt/widget/QTagSelectorWidget.cpp
@@ -0,0 +1,99 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwDicomIOFilterQt/widget/QTagSelectorWidget.hpp"
+
+#include <fwCore/spyLog.hpp>
+#include <fwDcmtkTools/Dictionary.hpp>
+
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+
+#include <dcmtk/dcmdata/dctag.h>
+
+namespace fwDicomIOFilterQt
+{
+namespace widget
+{
+
+
+//-----------------------------------------------------------------------------
+
+QTagSelectorWidget::QTagSelectorWidget(QWidget* parent) : QWidget(parent)
+{
+    // Load dictionary
+    ::fwDcmtkTools::Dictionary::loadDictionary();
+
+    // Create main layout
+    QVBoxLayout* mainLayout = new QVBoxLayout();
+    this->setLayout(mainLayout);
+    mainLayout->setContentsMargins(QMargins(0,0,0,0));
+
+    // Add tag label
+    m_tagNameLabel = new QLabel("<b>Tag name :</b> ");
+    mainLayout->addWidget(m_tagNameLabel);
+
+    // Create bottom widget
+    QWidget* bottomWidget = new QWidget();
+    mainLayout->addWidget(bottomWidget);
+    QHBoxLayout* bottomLayout = new QHBoxLayout();
+    bottomWidget->setLayout(bottomLayout);
+    bottomLayout->setContentsMargins(QMargins(0,0,0,0));
+
+    // Spin box
+    m_groupSpinBox   = new ::fwDicomIOFilterQt::widget::QHexSpinBox();
+    m_elementSpinBox = new ::fwDicomIOFilterQt::widget::QHexSpinBox();
+
+    bottomLayout->addWidget(new QLabel("<b>Group :</b>"));
+    bottomLayout->addWidget(m_groupSpinBox, 1);
+    bottomLayout->addWidget(new QLabel("<b>Element :</b>"));
+    bottomLayout->addWidget(m_elementSpinBox, 1);
+
+    // Update current name
+    this->updateTagName();
+
+    // Connect signals/slots
+    QObject::connect(m_groupSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateTagName(int)));
+    QObject::connect(m_elementSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateTagName(int)));
+}
+
+//-----------------------------------------------------------------------------
+
+QTagSelectorWidget::~QTagSelectorWidget()
+{
+    // Disconnect signales/slots
+    QObject::disconnect(m_groupSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateTagName(int)));
+    QObject::disconnect(m_elementSpinBox, SIGNAL(valueChanged(int)), this, SLOT(updateTagName(int)));
+}
+
+//-----------------------------------------------------------------------------
+
+void QTagSelectorWidget::updateTagName(int value)
+{
+    DcmTag tag(m_groupSpinBox->value(), m_elementSpinBox->value());
+    std::string text = "<b>Tag name :</b> " + std::string(tag.getTagName());
+    m_tagNameLabel->setText(text.c_str());
+}
+
+//-----------------------------------------------------------------------------
+
+void QTagSelectorWidget::setTagValue(const DcmTagKey& tag)
+{
+    m_groupSpinBox->setValue(tag.getGroup());
+    m_elementSpinBox->setValue(tag.getElement());
+    this->updateTagName();
+}
+
+//-----------------------------------------------------------------------------
+
+DcmTagKey QTagSelectorWidget::getTag()
+{
+    return DcmTagKey(m_groupSpinBox->value(), m_elementSpinBox->value());
+}
+
+
+} // namespace widget
+} // namespace fwDicomIOFilterQt
diff --git a/SrcLib/visu/fwRenderVTK/CMakeLists.txt b/SrcLib/visu/fwRenderVTK/CMakeLists.txt
index 419ee14..a8e1e9e 100644
--- a/SrcLib/visu/fwRenderVTK/CMakeLists.txt
+++ b/SrcLib/visu/fwRenderVTK/CMakeLists.txt
@@ -1,24 +1,45 @@
 fwLoadProperties()
-fwUseForwardInclude(
-    fwCore
-    fwData
-    fwGui
-    fwMath
-    fwRender
-    fwRuntime
-    fwServices
-    fwTools
-)
-
 
-find_package(Boost REQUIRED)
-find_package(VTK REQUIRED)
+if(NOT ANDROID)
+    # Just look one core module to get the version number
+    find_package(VTK COMPONENTS
+            vtkCommonCore
+            REQUIRED
+            NO_MODULE)
+            
+    if(${VTK_MAJOR_VERSION} STREQUAL "7")
+        find_package(VTK COMPONENTS
+            vtkInteractionWidgets
+            vtkInteractionStyle
+            vtkRenderingCore
+            vtkRenderingAnnotation
+            vtkRenderingFreeType
+            vtkRenderingVolumeOpenGL2
+        REQUIRED
+        NO_MODULE)
+    else()
+        find_package(VTK COMPONENTS
+            vtkInteractionWidgets
+            vtkInteractionStyle
+            vtkRenderingCore
+            vtkRenderingAnnotation
+            vtkRenderingFreeTypeOpenGL
+            vtkRenderingVolumeOpenGL
+        REQUIRED
+        NO_MODULE)
+    endif()
+else()
+    find_package(VTK COMPONENTS
+            vtkRenderingOpenGL2
+            vtkInteractionStyle
+            vtkInteractionWidgets
+            REQUIRED
+            NO_MODULE)
+endif()
 
 fwForwardInclude(
-    ${Boost_INCLUDE_DIRS}
     ${VTK_INCLUDE_DIRS}
-    )
+)
 fwLink(
-    ${Boost_LIBRARIES} 
-    vtkWidgets
-    )
+    ${VTK_LIBRARIES}
+)
diff --git a/SrcLib/visu/fwRenderVTK/COPYING b/SrcLib/visu/fwRenderVTK/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/SrcLib/visu/fwRenderVTK/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/SrcLib/visu/fwRenderVTK/COPYING.LESSER b/SrcLib/visu/fwRenderVTK/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/SrcLib/visu/fwRenderVTK/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/SrcLib/visu/fwRenderVTK/Properties.cmake b/SrcLib/visu/fwRenderVTK/Properties.cmake
index da88b20..121ec26 100644
--- a/SrcLib/visu/fwRenderVTK/Properties.cmake
+++ b/SrcLib/visu/fwRenderVTK/Properties.cmake
@@ -2,6 +2,16 @@
 set( NAME fwRenderVTK )
 set( VERSION 0.1 )
 set( TYPE LIBRARY )
-set( DEPENDENCIES fwCom fwComEd fwCore fwData fwGui fwMath fwRender fwRuntime fwServices fwTools fwVtkIO )
-set( REQUIREMENTS  )
+set( DEPENDENCIES
+    fwCom
+    fwCore
+    fwData
+    fwGui
+    fwRender
+    fwRuntime
+    fwServices
+    fwTools
+    fwVtkIO
+)
 
+set( REQUIREMENTS  )
diff --git a/SrcLib/visu/fwRenderVTK/bin/build.options b/SrcLib/visu/fwRenderVTK/bin/build.options
deleted file mode 100755
index 1ac662b..0000000
--- a/SrcLib/visu/fwRenderVTK/bin/build.options
+++ /dev/null
@@ -1,20 +0,0 @@
-#!/usr/bin/python
-# -*- coding: utf-8 -*-
-USE = [
-    'boost',
-    'vtkWidgets'
-    ]
-LIB = [
-    'fwComEd_0-1',
-    'fwCore_0-1',
-    'fwData_0-1',
-    'fwMath_0-1',
-    'fwRender_0-1',
-    'fwRuntime_0-3',
-    'fwServices_0-1',
-    'fwTools_0-1',
-    'fwVtkIO_0-1',
-    'fwGui_0-1'
-    ]
-TYPE = 'shared'
-VERSION = '0-1'
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IInteractorStyle.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IInteractorStyle.hpp
new file mode 100644
index 0000000..e604f29
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IInteractorStyle.hpp
@@ -0,0 +1,73 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWRENDERVTK_IINTERACTORSTYLE_HPP__
+#define __FWRENDERVTK_IINTERACTORSTYLE_HPP__
+
+#include "fwRenderVTK/config.hpp"
+
+namespace fwRenderVTK
+{
+
+/**
+ * @brief   IInteractorStyle is an interface dedicated to hold some flags for class inherited from vtkInteractorStyle.
+ * @class   IInteractorStyle
+ */
+
+class FWRENDERVTK_CLASS_API IInteractorStyle
+{
+public:
+
+    /// Constructor. Do nothing.
+    IInteractorStyle();
+
+    /// Destructor. Do nothing.
+    virtual ~IInteractorStyle();
+
+    /// Get the autorender flag
+    bool getAutoRender() const;
+
+    /// Set the autorender flag
+    void setAutoRender(bool _autoRender);
+
+private:
+
+    /// Does the scene update automatically when something changes ?
+    bool m_autoRender;
+};
+
+//------------------------------------------------------------------------------
+
+inline IInteractorStyle::IInteractorStyle() :
+    m_autoRender(true)
+{
+}
+
+//------------------------------------------------------------------------------
+
+inline IInteractorStyle::~IInteractorStyle()
+{
+}
+
+//------------------------------------------------------------------------------
+
+inline bool IInteractorStyle::getAutoRender() const
+{
+    return m_autoRender;
+}
+
+//------------------------------------------------------------------------------
+
+inline void IInteractorStyle::setAutoRender(bool _autoRender)
+{
+    m_autoRender = _autoRender;
+}
+
+//------------------------------------------------------------------------------
+
+}
+
+#endif // __FWRENDERVTK_IINTERACTORSTYLE_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkAdaptorService.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkAdaptorService.hpp
index 1aff59b..aef440b 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkAdaptorService.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkAdaptorService.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRENDERVTK_VTKADAPTORSERVICE_HPP_
-#define _FWRENDERVTK_VTKADAPTORSERVICE_HPP_
+#ifndef __FWRENDERVTK_IVTKADAPTORSERVICE_HPP__
+#define __FWRENDERVTK_IVTKADAPTORSERVICE_HPP__
 
-#include <string>
+#include "fwRenderVTK/SRender.hpp"
+#include "fwRenderVTK/config.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
 
-#include <fwServices/ObjectMsg.hpp>
 #include <fwServices/IService.hpp>
-#include <fwServices/helper/SigSlotConnection.hpp>
 
-#include "fwRenderVTK/VtkRenderService.hpp"
-#include "fwRenderVTK/config.hpp"
+#include <string>
 
 class vtkProp;
 class vtkPropCollection;
@@ -27,44 +27,48 @@ namespace fwRenderVTK
 
 class FWRENDERVTK_CLASS_API IVtkAdaptorService : public fwServices::IService
 {
-    friend class VtkRenderService;
-public :
-    fwCoreServiceClassDefinitionsMacro ( (IVtkAdaptorService)(::fwServices::IService) ) ;
+friend class SRender;
+public:
+    fwCoreServiceClassDefinitionsMacro ( (IVtkAdaptorService)(::fwServices::IService) );
 
-    typedef fwServices::IService SuperClass ;
+    typedef fwServices::IService SuperClass;
 
 
     /// To set a representation
-    virtual void show(bool b = true) {};
-    virtual void hide() {this->show(false);};
+    virtual void show(bool b = true)
+    {
+    }
+    virtual void hide()
+    {
+        this->show(false);
+    }
 
 
-    FWRENDERVTK_API void setRenderService( VtkRenderService::sptr service );
-    FWRENDERVTK_API void setRenderId(VtkRenderService::RendererIdType newID);
-    FWRENDERVTK_API VtkRenderService::sptr getRenderService();
-    FWRENDERVTK_API VtkRenderService::RendererIdType getRenderId();
+    FWRENDERVTK_API void setRenderService( SRender::sptr service );
+    FWRENDERVTK_API void setRenderId(SRender::RendererIdType newID);
+    FWRENDERVTK_API SRender::sptr getRenderService() const;
+    FWRENDERVTK_API SRender::RendererIdType getRenderId() const;
     FWRENDERVTK_API vtkRenderer* getRenderer();
 
 
-    FWRENDERVTK_API void setPickerId(VtkRenderService::PickerIdType newID);
-    FWRENDERVTK_API VtkRenderService::PickerIdType getPickerId();
+    FWRENDERVTK_API void setPickerId(SRender::PickerIdType newID);
+    FWRENDERVTK_API SRender::PickerIdType getPickerId() const;
     FWRENDERVTK_API vtkAbstractPropPicker* getPicker(std::string pickerId = "");
 
-    FWRENDERVTK_API void setTransformId(VtkRenderService::VtkObjectIdType newID);
-    FWRENDERVTK_API VtkRenderService::VtkObjectIdType getTransformId();
+    FWRENDERVTK_API void setTransformId(SRender::VtkObjectIdType newID);
+    FWRENDERVTK_API SRender::VtkObjectIdType getTransformId() const;
     FWRENDERVTK_API vtkTransform* getTransform();
 
-    FWRENDERVTK_API vtkObject * getVtkObject(VtkRenderService::VtkObjectIdType objectId);
+    FWRENDERVTK_API vtkObject* getVtkObject(const SRender::VtkObjectIdType& objectId) const;
 
     FWRENDERVTK_API vtkRenderWindowInteractor* getInteractor();
 
 
-    FWRENDERVTK_API virtual ::fwData::Object::sptr getAssociatedObject(vtkProp *prop, int depth=0);
+    FWRENDERVTK_API virtual ::fwData::Object::sptr getAssociatedObject(vtkProp* prop, int depth = 0);
 
-    FWRENDERVTK_API void getAllSubProps(vtkPropCollection *propc, int depth = -1);
+    FWRENDERVTK_API void getAllSubProps(vtkPropCollection* propc, int depth = -1);
 
-    /// set the pipeline modified so a render request can be send. end-user have to call this
-    /// method when it have modified a  vtk structure
+    /// End-user have to call this method when a vtk structure has been modified, thus a render request will be sent.
     FWRENDERVTK_API void setVtkPipelineModified();
 
     /// Returns true if the service automatically triggers the rendering.
@@ -79,31 +83,49 @@ public :
         m_autoRender = autoRender;
     }
 
-protected :
+    /// Return true if the service slots are automatically connected to the object signals
+    bool getAutoConnect() const
+    {
+        return m_autoConnect;
+    }
+
+    /// Set if the service slots are automatically connected to the object signals
+    void setAutoConnect(bool autoConnect)
+    {
+        m_autoConnect = autoConnect;
+    }
+
+    /**
+     * @brief   Returns the starting priority of the adaptor.
+     *
+     * Some adaptors may have to be started before others.
+     * @return priority, the lesser will be the first to be launched and the last be to stopped (default: 0)
+     */
+    FWRENDERVTK_API virtual int getStartPriority();
+
+protected:
 
     /**
      * @brief   constructor
      */
-    FWRENDERVTK_API IVtkAdaptorService() throw() ;
+    FWRENDERVTK_API IVtkAdaptorService() throw();
 
     /**
      * @brief   destructor
      */
-    FWRENDERVTK_API virtual ~IVtkAdaptorService() throw() ;
-
-    ::fwServices::ObjectMsg::sptr m_message;
+    FWRENDERVTK_API virtual ~IVtkAdaptorService() throw();
 
     /**
      * @name    Standard service methods
      */
     //@{
     /// Overrides
-    FWRENDERVTK_API virtual void info(std::ostream &_sstream ) ;
+    FWRENDERVTK_API virtual void info(std::ostream& _sstream );
+    FWRENDERVTK_API void configuring() throw(fwTools::Failed);
     FWRENDERVTK_API void starting() throw(fwTools::Failed);
     FWRENDERVTK_API void stopping() throw(fwTools::Failed);
     FWRENDERVTK_API void swapping() throw(fwTools::Failed);
     FWRENDERVTK_API void updating() throw(fwTools::Failed);
-    FWRENDERVTK_API void receiving(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed);
     //@}
 
 
@@ -112,50 +134,87 @@ protected :
 
     /// state of the pipeline
     bool m_vtkPipelineModified;
-    VtkRenderService::RendererIdType   m_rendererId;
-    VtkRenderService::PickerIdType     m_pickerId;
-    VtkRenderService::VtkObjectIdType  m_transformId;
-    VtkRenderService::wptr             m_renderService;
+    SRender::RendererIdType m_rendererId;
+    SRender::PickerIdType m_pickerId;
+    SRender::VtkObjectIdType m_transformId;
+    SRender::wptr m_renderService;
 
-    ::fwServices::helper::SigSlotConnection::sptr m_connections;
+    ::fwCom::helper::SigSlotConnection m_connections;
 
 
     typedef std::vector < ::fwRenderVTK::IVtkAdaptorService::wptr > ServiceVector;
     ServiceVector m_subServices;
 
-    vtkPropCollection * m_propCollection;
+    vtkPropCollection* m_propCollection;
 
     bool m_autoRender;
+    bool m_autoConnect; ///< If true, connect the adaptor slots to its objects signals
 
-    FWRENDERVTK_API virtual void doStart() = 0;
-    FWRENDERVTK_API virtual void doStop() = 0;
-    FWRENDERVTK_API virtual void doSwap() = 0;
-    FWRENDERVTK_API virtual void doUpdate() = 0;
-    FWRENDERVTK_API virtual void doReceive(::fwServices::ObjectMsg::csptr msg) = 0;
-
+    FWRENDERVTK_API virtual void doStart()     = 0;
+    FWRENDERVTK_API virtual void doStop()      = 0;
+    FWRENDERVTK_API virtual void doSwap()      = 0;
+    FWRENDERVTK_API virtual void doUpdate()    = 0;
+    FWRENDERVTK_API virtual void doConfigure() = 0;
 
-    ServiceVector & getRegisteredServices() {return m_subServices;};
+    ServiceVector& getRegisteredServices()
+    {
+        return m_subServices;
+    }
     FWRENDERVTK_API void registerService( ::fwRenderVTK::IVtkAdaptorService::sptr service );
     FWRENDERVTK_API void unregisterServices();
 
-    FWRENDERVTK_API void registerProp(vtkProp *prop);
+    FWRENDERVTK_API void registerProp(vtkProp* prop);
     FWRENDERVTK_API void unregisterProps();
 
-    FWRENDERVTK_API void addToRenderer(vtkProp *prop);
-    FWRENDERVTK_API void addToPicker(vtkProp *prop, std::string pickerId = "");
-    FWRENDERVTK_API void removeFromPicker(vtkProp *prop, std::string pickerId = "");
+    FWRENDERVTK_API void addToRenderer(vtkProp* prop);
+    FWRENDERVTK_API void addToPicker(vtkProp* prop, std::string pickerId = "");
+    FWRENDERVTK_API void removeFromPicker(vtkProp* prop, std::string pickerId = "");
 
     FWRENDERVTK_API void removeAllPropFromRenderer();
 
-    FWRENDERVTK_API static void getProps(vtkPropCollection *propc, vtkProp *prop);
-
+    FWRENDERVTK_API static void getProps(vtkPropCollection* propc, vtkProp* prop);
 
-private:
     /// notify a render request iff vtkPipeline is modified
-    void requestRender();
+    FWRENDERVTK_API void requestRender();
 
+    template< class DATATYPE >
+    CSPTR(DATATYPE) getSafeInput(const std::string& key) const;
+    template< class DATATYPE >
+    SPTR(DATATYPE) getSafeInOut(const std::string& key) const;
 };
 
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+CSPTR(DATATYPE) IVtkAdaptorService::getSafeInput(const std::string& key) const
+{
+    if( ::fwServices::IService::isVersion2() )
+    {
+        return this->getRenderService()->getInput<DATATYPE>(key);
+    }
+    else
+    {
+        return std::dynamic_pointer_cast<DATATYPE>( ::fwTools::fwID::getObject(key) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
+template< class DATATYPE >
+SPTR(DATATYPE) IVtkAdaptorService::getSafeInOut(const std::string& key) const
+{
+    if( ::fwServices::IService::isVersion2() )
+    {
+        return this->getRenderService()->getInOut<DATATYPE>(key);
+    }
+    else
+    {
+        return std::dynamic_pointer_cast<DATATYPE>( ::fwTools::fwID::getObject(key) );
+    }
+}
+
+//------------------------------------------------------------------------------
+
 }
 
-#endif /*_FWRENDERVTK_VTKADAPTORSERVICE_HPP_*/
+#endif /*__FWRENDERVTK_IVTKADAPTORSERVICE_HPP__*/
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkRenderWindowInteractorManager.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkRenderWindowInteractorManager.hpp
index e8fd2a1..2b1d18e 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkRenderWindowInteractorManager.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/IVtkRenderWindowInteractorManager.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRENDERVTK_IVTKRENDERWINDOWINTERACTORMANAGER_HPP_
-#define _FWRENDERVTK_IVTKRENDERWINDOWINTERACTORMANAGER_HPP_
+#ifndef __FWRENDERVTK_IVTKRENDERWINDOWINTERACTORMANAGER_HPP__
+#define __FWRENDERVTK_IVTKRENDERWINDOWINTERACTORMANAGER_HPP__
 
 #include <string>
 #include <fwServices/IService.hpp>
@@ -26,9 +26,6 @@ namespace fwRenderVTK
 /**
  * @brief   Defines a class to manage vtkRenderWindowInteractor in a window.
  * @class   IVtkRenderWindowInteractorManager
- * 
- * @date    2009-2010.
- *
  */
 class FWRENDERVTK_CLASS_API IVtkRenderWindowInteractorManager : public ::fwCore::BaseObject
 {
@@ -77,7 +74,10 @@ public:
     /// Return a pointer on interactor
     FWRENDERVTK_API virtual ::vtkRenderWindowInteractor * getInteractor() = 0;
 
-    virtual void setRenderService(::fwServices::IService::sptr srv){m_renderService = srv;}
+    virtual void setRenderService(::fwServices::IService::sptr srv)
+    {
+        m_renderService = srv;
+    }
 
 
 protected:
@@ -86,6 +86,6 @@ protected:
 
 } // namespace fwRenderVTK
 
-#endif // _FWRENDERVTK_IVTKRENDERWINDOWINTERACTORMANAGER_HPP_
+#endif // __FWRENDERVTK_IVTKRENDERWINDOWINTERACTORMANAGER_HPP__
 
 
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp
index b02af1a..4c44927 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/Namespace.hpp
@@ -1,20 +1,20 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRENDERVTKNAMESPACE_HPP_
-#define FWRENDERVTKNAMESPACE_HPP_
+#ifndef __FWRENDERVTK_NAMESPACE_HPP__
+#define __FWRENDERVTK_NAMESPACE_HPP__
 
 /**
  * @brief       The namespace fwRenderVTK contains classes for rendering with VTK.
  * @namespace   fwRenderVTK
- * 
+ *
  * @date        2009-2010.
  *
  */
 namespace fwRenderVTK
 {
 }
-#endif /* FWRENDERVTKNAMESPACE_HPP_ */
+#endif /* __FWRENDERVTK_NAMESPACE_HPP__ */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/OffScreenInteractorManager.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/OffScreenInteractorManager.hpp
new file mode 100644
index 0000000..8318f2c
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/OffScreenInteractorManager.hpp
@@ -0,0 +1,61 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWRENDERVTK_OFFSCREENINTERACTORMANAGER_HPP__
+#define __FWRENDERVTK_OFFSCREENINTERACTORMANAGER_HPP__
+
+#include "fwRenderVTK/config.hpp"
+#include "fwRenderVTK/IVtkRenderWindowInteractorManager.hpp"
+
+#include <fwCore/base.hpp>
+
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkSmartPointer.h>
+
+namespace fwRenderVTK
+{
+
+/**
+ * @brief   Defines a class to manage vtkRenderWindowInteractor in a off screen window.
+ * @class   OffScreenInteractorManager
+ *
+ */
+class FWRENDERVTK_CLASS_API OffScreenInteractorManager : public ::fwRenderVTK::IVtkRenderWindowInteractorManager
+{
+
+public:
+
+    fwCoreClassDefinitionsWithFactoryMacro((OffScreenInteractorManager)
+                                           (::fwRenderVTK::IVtkRenderWindowInteractorManager),
+                                           (()), new OffScreenInteractorManager)
+
+    FWRENDERVTK_API OffScreenInteractorManager();
+
+    FWRENDERVTK_API virtual ~OffScreenInteractorManager();
+
+    /// Do NOT use, this interactor doens't need container. You must use installInteractor(width, height) instead.
+    FWRENDERVTK_API virtual void installInteractor( ::fwGui::container::fwContainer::sptr _parent );
+
+    /// Creates a render window and an interactor.
+    FWRENDERVTK_API virtual void installInteractor( unsigned int width, unsigned int height );
+
+    /// Deletes interactor and manage correctly the window (removing layout).
+    FWRENDERVTK_API virtual void uninstallInteractor();
+
+    /// Return a pointer on interactor
+    FWRENDERVTK_API virtual ::vtkRenderWindowInteractor * getInteractor();
+
+private:
+
+    vtkSmartPointer< vtkRenderWindow > m_renderWindow;
+    vtkSmartPointer< vtkRenderWindowInteractor > m_interactor;
+
+};
+
+} // namespace fwRenderVTK
+
+#endif // __FWRENDERVTK_OFFSCREENINTERACTORMANAGER_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp
new file mode 100644
index 0000000..39d5df2
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/SRender.hpp
@@ -0,0 +1,354 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWRENDERVTK_SRENDER_HPP__
+#define __FWRENDERVTK_SRENDER_HPP__
+
+#include "fwRenderVTK/IVtkRenderWindowInteractorManager.hpp"
+#include "fwRenderVTK/config.hpp"
+
+#include <fwCom/helper/SigSlotConnection.hpp>
+
+#include <fwData/Composite.hpp>
+
+#include <fwRender/IRender.hpp>
+
+#include <fwRuntime/ConfigurationElement.hpp>
+
+#include <fwServices/helper/Config.hpp>
+
+#include <fwThread/Timer.hpp>
+
+#include <map>
+
+class vtkRenderWindow;
+class vtkRenderer;
+class vtkAbstractPropPicker;
+class vtkObject;
+class vtkTransform;
+
+namespace fwData
+{
+
+class TransformationMatrix3D;
+
+}
+
+namespace fwRenderVTK
+{
+
+class IVtkAdaptorService;
+
+/**
+ * @brief The generic scene service shows adaptors in a 3D VTK scene.
+ */
+class FWRENDERVTK_CLASS_API SRender : public ::fwRender::IRender
+{
+public:
+    fwCoreServiceClassDefinitionsMacro ( (SRender)(::fwRender::IRender) );
+
+    typedef std::string RendererIdType;
+    typedef std::string PickerIdType;
+    typedef std::string ObjectIdType;
+    typedef std::string AdaptorIdType;
+    typedef std::string VtkObjectIdType;
+    typedef std::map< std::string, ::fwData::Object::csptr > ConstObjectMapType;
+
+    FWRENDERVTK_API static const ::fwCom::Slots::SlotKeyType s_RENDER_SLOT;
+    FWRENDERVTK_API static const ::fwCom::Slots::SlotKeyType s_REQUEST_RENDER_SLOT;
+
+    FWRENDERVTK_API static const ::fwCom::Signals::SignalKeyType s_DROPPED_SIG;
+    typedef ::fwCom::Signal< void (std::string)> DroppedSignalType;
+
+    FWRENDERVTK_API SRender() throw();
+
+    FWRENDERVTK_API virtual ~SRender() throw();
+
+    /// Returns the vtkRenderer with the given id
+    FWRENDERVTK_API vtkRenderer* getRenderer(RendererIdType rendererId);
+
+    /// Returns true if the scene is shown on screen
+    bool isShownOnScreen();
+
+    /// Returns the picker with the given id
+    FWRENDERVTK_API vtkAbstractPropPicker* getPicker(PickerIdType pickerId);
+
+    /// Returns the vtkObject with the given id
+    FWRENDERVTK_API vtkObject* getVtkObject(const VtkObjectIdType& objectId) const;
+
+    /// Returns the adaptor with the given id
+    FWRENDERVTK_API SPTR (IVtkAdaptorService) getAdaptor(const AdaptorIdType &adaptorId) const;
+
+    /// Get a vtkTransform in the SRender, referenced by a key. Create it if it does not exist.
+    FWRENDERVTK_API vtkTransform* getOrAddVtkTransform( const VtkObjectIdType& _id );
+
+    bool getPendingRenderRequest()
+    {
+        return m_pendingRenderRequest;
+    }
+    void setPendingRenderRequest(bool b)
+    {
+        m_pendingRenderRequest = b;
+    }
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     */
+    FWRENDERVTK_API virtual KeyConnectionsType getObjSrvConnections() const;
+
+    /**
+     * @brief Returns proposals to connect service slots to associated object signals,
+     * this method is used for obj/srv auto connection
+     *
+     * Connect Composite::s_ADDED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_CHANGED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     * Connect Composite::s_REMOVED_OBJECTS_SIG to this::s_UPDATE_OBJECTS_SLOT
+     */
+    FWRENDERVTK_API ::fwServices::IService::KeyConnectionsMap getAutoConnections() const;
+
+    /// TEMP: Function to grab the composite while we maintain appXml and appXml2
+    FWRENDERVTK_API ::fwData::Composite::sptr getComposite();
+
+protected:
+
+    /// Renders the scene.
+    FWRENDERVTK_API void render();
+
+    /// Install observations : should be implemented in IService
+    FWRENDERVTK_API virtual void starting() throw( ::fwTools::Failed);
+    /// Uninstall observations : should be implemented in IService
+    FWRENDERVTK_API virtual void stopping() throw( ::fwTools::Failed);
+
+    /**
+     * @brief configures the adaptor
+     * @verbatim
+       <service uid="generiSceneUID" impl="::fwRenderVTK::SRender" type="::fwRender::IRender">
+        <scene renderMode="auto|timer|none" offScreen="imageKey" width="1920" height="1080">
+            <renderer id="background" layer="0" background="0.0" />
+            <vtkObject id="transform" class="vtkTransform" />
+            <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
+
+            <adaptor id="tmAdaptor" class="::visuVTKAdaptor::Transform" uid="adaptorUID" objectId="tm3dKey">
+                <config transform="transform" />
+            </adaptor>
+
+            <adaptor id="snapshot" class="::visuVTKAdaptor::Snapshot" objectId="self">
+                <config ...... />
+            </adaptor>
+
+            <connect>
+                <signal>adaptorUID/modified</signal>
+                <slot>serviceUid/updateTM</slot>
+            </connect>
+
+            <connect waitForKey="tm3dKey">
+                <signal>modified</signal><!-- signal for object "tm3dKey" -->
+                <slot>serviceUid/updateTM</slot>
+            </connect>
+
+            <proxy channel="myChannel">
+                <signal>adaptor2UID/modified</signal>
+                <slot>service2Uid/updateTM</slot>
+            </proxy>
+        </scene>
+        <fps>30</fps>
+       </service>
+       @endverbatim
+     * With :
+     *  - \b renderMode (optional, "auto" by default): this attribute is forwarded to all adaptors. For each adaptor,
+     *    if renderMode="auto",  the scene is automatically rendered after doStart, doUpdate, doSwap, doStop
+     *    and m_vtkPipelineModified=true. If renderMode="timer" the scene is rendered at N frame per seconds (N is
+     *    defined by fps tag). If renderMode="none" you should call 'render' slot to call reder the scene.
+     *  - \b offScreen (optional): key of the image used for off screen render
+     *  - \b width (optional, "1280" by default): width for off screen render
+     *  - \b height (optional, "720" by default): height for off screen render
+     *  - \b renderer
+     *     - \b id (mandatory): the identifier of the renderer
+     *     - \b layer (optional): defines the layer of the vtkRenderer. This is only used if there are layered renderers.
+     *     - \b background (optional): the background color of the rendering screen. The color value can be defines as a
+     *       grey level value (ex . 1.0 for white) or as a hexadecimal value (ex : \#ffffff for white).
+     *  - \b vtkObject
+     *    - \b id (mandatory): the identifier of the vtkObject
+     *    - \b class (mandatory): the classname of the vtkObject to create. For example vtkTransform, vtkImageBlend, ...
+     *  - \b picker
+     *    - \b id (mandatory): the identifier of the picker
+     *    - \b vtkclass (optional, by default vtkCellPicker): the classname of the picker to create.
+     *  - \b adaptor
+     *    - \b id (mandatory): the identifier of the adaptor
+     *    - \b class (mandatory): the classname of the adaptor service
+     *    - \b uid (optional): the fwID to specify for the adaptor service
+     *    - \b objectId (mandatory): the key of the adaptor's object in the scene's composite. The "self" key is used
+     *     when the adaptor works on the scene's composite.
+     *    - \b autoConnect (optional, "yes" by default): if "yes" the service slot are automatically connected to the
+     *      object signals.
+     *    - \b config: adaptor's configuration. It is parsed in the adaptor's configuring() method.
+     *  - \b connect/proxy : not mandatory, connects signal to slot
+     *    - \b waitForKey : not mandatory, defines the required object key for the signal/slot connection
+     *    - \b signal : mandatory, must be signal holder UID, followed by '/', followed by signal name. To use the
+     *         object (defined by waitForKey) signal, you don't have to write object uid, only the signal name.
+     *    - \b slot : mandatory, must be slot holder UID, followed by '/', followed by slot name
+     */
+    FWRENDERVTK_API virtual void configuring() throw( ::fwTools::Failed);
+
+    /// Does nothing.
+    FWRENDERVTK_API virtual void updating() throw( ::fwTools::Failed);
+
+    /// Start/stop adaptors
+    FWRENDERVTK_API virtual void swapping(const KeyType& key) throw(::fwTools::Failed);
+
+    /// Add a vtk object in the SRender, referenced by a key.
+    FWRENDERVTK_API void addVtkObject( const VtkObjectIdType& _id, vtkObject* _vtkObj );
+
+private:
+
+    /// Slot called when on each timer update
+    void requestRender();
+
+    /// Slot: add objects
+    void addObjects(::fwData::Composite::ContainerType objects);
+
+    /// Slot: change objects
+    void changeObjects(::fwData::Composite::ContainerType newObjects, ::fwData::Composite::ContainerType oldObjects);
+
+    /// Slot: remove objects
+    void removeObjects(::fwData::Composite::ContainerType objects);
+
+    /// Configure the objects
+    void configureObjects(::fwData::Composite::ContainerType objects);
+
+    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
+    ConfigurationType m_sceneConfiguration;
+
+    /// @brief VTK Interactor window manager
+    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
+
+
+    class SceneAdaptor
+    {
+
+    public:
+
+        SPTR (IVtkAdaptorService) getService() const
+        {
+            return m_service.lock();
+        }
+
+        ConfigurationType m_config;
+        WPTR(IVtkAdaptorService) m_service;
+
+    };
+
+    /// @brief scene's renderers
+    typedef std::map< RendererIdType, vtkRenderer* > RenderersMapType;
+
+    /// @brief scene's pickers
+    typedef std::map< PickerIdType, vtkAbstractPropPicker* > PickersMapType;
+
+    /// @brief scene's transforms
+    typedef std::map< VtkObjectIdType, vtkObject* > VtkObjectMapType;
+
+    /// @brief Actives adaptors in scene
+    typedef std::map< AdaptorIdType, SceneAdaptor > SceneAdaptorsMapType;
+
+    RenderersMapType m_renderers;
+    PickersMapType m_pickers;
+    SceneAdaptorsMapType m_sceneAdaptors;
+    VtkObjectMapType m_vtkObjects;
+
+    bool m_pendingRenderRequest;
+
+    enum class RenderMode
+    {
+        NONE,
+        AUTO,
+        TIMER
+    };
+
+    /// Does the scene update automatically when something changes ?
+    /// Otherwise it is updated periodically (default 30Hz)
+    RenderMode m_renderMode;
+
+    std::string m_offScreenImageKey; ///< Key of the image used for off screen render
+    unsigned int m_width; ///< width for off screen render
+    unsigned int m_height; ///< height for off screen render
+    bool m_offScreen; ///< if true, scene is render in off screen
+
+    /// Timer used for the update
+    ::fwThread::Timer::sptr m_timer;
+
+    void startContext();
+    void stopContext();
+
+    void configurePicker   ( ConfigurationType conf );
+    void configureRenderer ( ConfigurationType conf );
+    void configureObject   ( ConfigurationType conf );
+    void configureVtkObject( ConfigurationType conf );
+    vtkTransform* createVtkTransform( ConfigurationType conf );
+
+    /// Creates the connection if the required key is contained in the composite
+    void connectAfterWait(::fwData::Composite::ContainerType objects);
+
+    /// Version2: Creates the connection if the required key is present
+    void connectAfterWait(const std::string& key);
+
+    /// Creates the connection given by the configuration for obj associated with the key in the composite.
+    void manageConnection(const std::string& key, const ::fwData::Object::csptr& obj,
+                          const ConfigurationType& config);
+
+    /// Creates the proxy given by the configuration for obj associated with the key in the composite.
+    void manageProxy(const std::string& key, const ::fwData::Object::csptr& obj,
+                     const ConfigurationType& config);
+
+    /// Disconnects the connection based on a object key
+    template< class ContainerType >
+    void disconnect( const ContainerType& objects );
+
+    /// Signal/ Slot connection
+    ::fwCom::helper::SigSlotConnection m_connections;
+
+    /// Map to register proxy connections
+    ::fwServices::helper::Config::ProxyConnectionsMapType m_proxyMap;
+
+    typedef std::vector< ConfigurationType > ConnectConfigType;
+    /// vector containing all the connections configurations
+    ConnectConfigType m_connect;
+
+    /// vector containing all the proxy configurations
+    ConnectConfigType m_proxies;
+
+    typedef std::map< std::string, ::fwCom::helper::SigSlotConnection > ObjectConnectionsMapType;
+    /// map containing the object key/connection relation
+    ObjectConnectionsMapType m_objectConnections;
+};
+
+//-----------------------------------------------------------------------------
+
+template< class ContainerType >
+void SRender::disconnect(const ContainerType& objects)
+{
+    for(auto element :  objects)
+    {
+        std::string key = element.first;
+        if(m_objectConnections.find(key) != m_objectConnections.end())
+        {
+            m_objectConnections[key].disconnect();
+            m_objectConnections.erase(key);
+        }
+
+        ::fwServices::helper::Config::disconnectProxies(key, m_proxyMap);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+}
+
+#endif //__FWRENDERVTK_SRENDER_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/VtkRenderService.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/VtkRenderService.hpp
deleted file mode 100644
index 9410412..0000000
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/VtkRenderService.hpp
+++ /dev/null
@@ -1,198 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRENDERVTK_VTKRENDERSERVICE_HPP_
-#define _FWRENDERVTK_VTKRENDERSERVICE_HPP_
-
-
-#include <map>
-
-#include <fwRuntime/ConfigurationElement.hpp>
-
-#include <fwRender/IRender.hpp>
-
-#include <fwData/Composite.hpp>
-
-#include "fwRenderVTK/config.hpp"
-#include "fwRenderVTK/IVtkRenderWindowInteractorManager.hpp"
-
-
-class vtkRenderWindow;
-class vtkRenderer;
-class vtkAbstractPropPicker;
-class vtkObject;
-class vtkTransform;
-
-namespace fwData
-{
-
-class TransformationMatrix3D;
-
-}
-
-namespace fwRenderVTK
-{
-
-class IVtkAdaptorService;
-
-/**
- * @class VtkRenderService
- * @brief The generic scene service shows adaptors in a 3D VTK scene. 
- */
-class FWRENDERVTK_CLASS_API VtkRenderService : public ::fwRender::IRender
-{
-public :
-    fwCoreServiceClassDefinitionsMacro ( (VtkRenderService)(::fwRender::IRender) ) ;
-
-    typedef std::string RendererIdType;
-    typedef std::string PickerIdType;
-    typedef std::string ObjectIdType;
-    typedef std::string AdaptorIdType;
-    typedef std::string VtkObjectIdType;
-
-    FWRENDERVTK_API static const ::fwCom::Slots::SlotKeyType s_RENDER_SLOT;
-    typedef ::fwCom::Slot<void()> RenderSlotType;
-
-    FWRENDERVTK_API VtkRenderService() throw() ;
-
-    FWRENDERVTK_API virtual ~VtkRenderService() throw() ;
-
-    /// Returns the vtkRenderer with the given id
-    FWRENDERVTK_API vtkRenderer * getRenderer(RendererIdType rendererId);
-
-    /// Returns true if the scene is shown on screen
-    bool isShownOnScreen();
-
-    /// Returns the picker with the given id
-    FWRENDERVTK_API vtkAbstractPropPicker * getPicker(PickerIdType pickerId);
-
-    /// Returns the vtkObject with the given id
-    FWRENDERVTK_API vtkObject * getVtkObject(VtkObjectIdType objectId);
-
-    bool getPendingRenderRequest(){return m_pendingRenderRequest;}
-    void setPendingRenderRequest(bool b){m_pendingRenderRequest=b;}
-
-protected:
-
-    /// Renders the scene.
-    FWRENDERVTK_API void render();
-
-    /// Install observations : should be implemented in IService
-    FWRENDERVTK_API virtual void starting() throw( ::fwTools::Failed);
-    /// Uninstall observations : should be implemented in IService
-    FWRENDERVTK_API virtual void stopping() throw( ::fwTools::Failed);
-
-    /**
-     * @brief configures the adaptor
-     * @verbatim
-    <service uid="generiSceneUID" impl="::fwRenderVTK::VtkRenderService" type="::fwRender::IRender">
-        <scene autoRender="false">
-            <renderer id="background" layer="0" background="0.0" />
-            <vtkObject id="transform" class="vtkTransform" />
-            <picker id="negatodefault" vtkclass="fwVtkCellPicker" />
-
-            <adaptor id="tmAdaptor" class="::visuVTKAdaptor::Transform" uid="adaptorUID" objectId="tm3dKey">
-                <config transform="transform" />
-            </adaptor>
-
-            <adaptor id="snapshot" class="::visuVTKAdaptor::Snapshot" objectId="self">
-                <config ...... />
-            </adaptor>
-        </scene>
-    </service> 
-       @endverbatim
-     * With : 
-     *  - \b autoRender (optional, "true" by default): this attribute is forwarded to all adaptors. For each adaptor, 
-     *    if autoRender=true,  the scene is automatically rendered after doStart, doUpdate, doSwap, doReceive and 
-     *    doStop and m_vtkPipelineModified=true.
-     *  - \b renderer 
-     *     - \b id (mandatory): the identifier of the renderer
-     *     - \b layer (optional): defines the layer of the vtkRenderer. This is only used if there are layered renderers.
-     *     - \b background (optional): the background color of the rendering screen. The color value can be defines as a 
-     *       grey level value (ex . 1.0 for white) or as a hexadecimal value (ex : \#ffffff for white).
-     *  - \b vtkObject
-     *    - \b id (mandatory): the identifier of the vtkObject
-     *    - \b class (mandatory): the classname of the vtkObject to create. For example vtkTransform, vtkImageBlend, ...
-     *  - \b picker
-     *    - \b id (mandatory): the identifier of the picker
-     *    - \b vtkclass (optional, by default vtkCellPicker): the classname of the picker to create.
-     *  - \b adaptor
-     *    - \b id (mandatory): the identifier of the adaptor
-     *    - \b class (mandatory): the classname of the adaptor service
-     *    - \b uid (optional): the fwID to specify for the adaptor service
-     *    - \b objectId (mandatory): the key of the adaptor's object in the scene's composite. The "self" key is used 
-     *     when the adaptor works on the scene's composite.
-     *    - \b config: adaptor's configuration. It is parsed in the adaptor's configuring() method.
-     */
-    FWRENDERVTK_API virtual void configuring() throw( ::fwTools::Failed) ;
-
-    /// Updates the scene's adaptors with the modified objects contained in the composite.
-    FWRENDERVTK_API void receiving( ::fwServices::ObjectMsg::csptr message ) throw( ::fwTools::Failed);
-
-    /// Does nothing.
-    FWRENDERVTK_API void updating() throw( ::fwTools::Failed);
-
-    /// Add a vtk object in the VtkRenderService, referenced by a key.
-    void addVtkObject( VtkObjectIdType _id, vtkObject * _vtkObj );
-
-    /// Slot to call render method
-    RenderSlotType::sptr m_slotRender;
-
-private :
-
-    typedef ::fwRuntime::ConfigurationElement::sptr ConfigurationType;
-    ConfigurationType m_sceneConfiguration;
-
-    /// @brief VTK Interactor window manager
-    ::fwRenderVTK::IVtkRenderWindowInteractorManager::sptr m_interactorManager;
-
-
-    class SceneAdaptor {
-
-        public:
-
-        SPTR (IVtkAdaptorService) getService()
-        { return m_service.lock(); }
-
-        ConfigurationType m_config;
-        WPTR(IVtkAdaptorService) m_service;
-
-    };
-
-    /// @brief scene's renderers
-    typedef std::map< RendererIdType , vtkRenderer* > RenderersMapType ;
-
-    /// @brief scene's pickers
-    typedef std::map< PickerIdType , vtkAbstractPropPicker * > PickersMapType ;
-
-    /// @brief scene's transforms
-    typedef std::map< VtkObjectIdType , vtkObject  * > VtkObjectMapType ;
-
-    /// @brief Actives adaptors in scene
-    typedef std::map< AdaptorIdType, SceneAdaptor > SceneAdaptorsMapType ;
-
-    RenderersMapType     m_renderers;
-    PickersMapType       m_pickers;
-    SceneAdaptorsMapType m_sceneAdaptors;
-    VtkObjectMapType     m_vtkObjects;
-
-    bool m_pendingRenderRequest;
-
-    bool m_autoRender;
-
-    void startContext();
-    void stopContext();
-
-    void configurePicker   ( ConfigurationType conf );
-    void configureRenderer ( ConfigurationType conf );
-    void configureObject   ( ConfigurationType conf );
-    void configureVtkObject( ConfigurationType conf );
-    vtkTransform * createVtkTransform( ConfigurationType conf );
-};
-
-}
-
-#endif //_FWRENDERVTK_VTKRENDERSERVICE_HPP_
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/config.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/config.hpp
deleted file mode 100644
index 1aa566e..0000000
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/config.hpp
+++ /dev/null
@@ -1,41 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifndef _FWRENDERVTK_CONFIG_HPP_
-#define _FWRENDERVTK_CONFIG_HPP_
-
-#ifdef _WIN32
-
-    #ifdef FWRENDERVTK_EXPORTS
-    #define FWRENDERVTK_API __declspec(dllexport)
-    #else
-    #define FWRENDERVTK_API __declspec(dllimport)
-    #endif
-
-    #define FWRENDERVTK_CLASS_API
-
-    #pragma warning(disable: 4290)
-
-#elif defined(__GNUC__) && (__GNUC__>=4) && defined(__USE_DYLIB_VISIBILITY__)
-
-    #ifdef FWRENDERVTK_EXPORTS
-    #define FWRENDERVTK_API __attribute__ ((visibility("default")))
-    #define FWRENDERVTK_CLASS_API __attribute__ ((visibility("default")))
-    #else
-    //#define FWRENDERVTK_API __attribute__ ((visibility("hidden")))
-    //#define FWRENDERVTK_CLASS_API __attribute__ ((visibility("hidden")))
-    #define FWRENDERVTK_API
-    #define FWRENDERVTK_CLASS_API
-    #endif
-
-#else
-
-    #define FWRENDERVTK_API
-    #define FWRENDERVTK_CLASS_API
-
-#endif
-
-#endif //_FWRENDERVTK_CONFIG_HPP_
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp
index 2be75d6..85406b3 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwRenderVTK
 /**
  * @brief       Contains fwRenderVTK::factory utilities
  * @namespace   fwRenderVTK::factory
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/new.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/new.hpp
index 8b2ae13..a14c197 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/new.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/factory/new.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -9,7 +9,6 @@
 
 #include <string>
 
-#include <boost/make_shared.hpp>
 
 #include <fwTools/macros.hpp>
 
@@ -33,20 +32,22 @@ template<class CLASSNAME > SPTR( CLASSNAME )  New();
  */
 class Key
 {
-    template<typename CLASSNAME>
-    friend SPTR( CLASSNAME ) fwRenderVTK::factory::New();
+template<typename CLASSNAME>
+friend SPTR( CLASSNAME ) fwRenderVTK::factory::New();
 
-    Key(){};
+Key()
+{
+}
 };
 
 
 FWRENDERVTK_API SPTR( ::fwRenderVTK::IVtkRenderWindowInteractorManager ) New(
-        const ::fwRenderVTK::registry::KeyType & classname );
+    const ::fwRenderVTK::registry::KeyType & classname );
 
 
 template<class CLASSNAME > SPTR( CLASSNAME )  New()
 {
-    SPTR(CLASSNAME) obj = ::boost::make_shared< CLASSNAME >( Key() );
+    SPTR(CLASSNAME) obj = std::make_shared< CLASSNAME >( Key() );
     return obj;
 }
 
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/detail.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/detail.hpp
index effca2b..6f72852 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/detail.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/detail.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/macros.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/macros.hpp
index 16fe283..73b7ee4 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/macros.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/macros.hpp
@@ -1,11 +1,11 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef __FWRENDERVTK_REGISTRY_MACRO_HPP__
-#define __FWRENDERVTK_REGISTRY_MACRO_HPP__
+#ifndef __FWRENDERVTK_REGISTRY_MACROS_HPP__
+#define __FWRENDERVTK_REGISTRY_MACROS_HPP__
 
 #include <boost/preprocessor/cat.hpp>
 
@@ -24,4 +24,4 @@ namespace registry
 } // end namespace registry
 } // end namespace fwRenderVTK
 
-#endif /*__FWRENDERVTK_REGISTRY_MACRO_HPP__*/
+#endif /*__FWRENDERVTK_REGISTRY_MACROS_HPP__*/
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp
index d59f61a..0c89529 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/registry/namespace.hpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,7 +14,7 @@ namespace fwRenderVTK
 /**
  * @brief       Contains fwRenderVTK::registry details
  * @namespace   fwRenderVTK::registry
- * 
+ *
  * @date        2009-2012
  *
  */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Helpers.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Helpers.hpp
index 9f3ee8c..6baf013 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Helpers.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Helpers.hpp
@@ -1,31 +1,68 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWRENDERVTK_VTK_HELPERS_HPP__
+#define __FWRENDERVTK_VTK_HELPERS_HPP__
 
 #include <vtkType.h>
+#include <vtkSmartPointer.h>
 
 #include "fwRenderVTK/config.hpp"
 
-
 class vtkProp;
 class vtkPoints;
 class vtkRenderer;
 class vtkAbstractPropPicker;
+class vtkRenderWindow;
+
+#ifndef ANDROID
 
-namespace fwRenderVTK {
+#if VTK_MAJOR_VERSION < 7
+#include <vtkShaderProgram2.h>
+#include <vtkShader2.h>
+#include <vtkShader2Collection.h>
+#else
+#include <vtkShaderProgram.h>
+#include <vtkShader.h>
+#endif // VTK_MAJOR_VERSION < 7
 
-namespace vtk {
+#endif // ANDROID
+
+namespace fwRenderVTK
+{
+namespace vtk
+{
 
 FWRENDERVTK_API vtkIdType getNearestPointId(vtkPoints* pts, vtkRenderer* renderer);
-FWRENDERVTK_API vtkProp  *getNearestPickedProp(vtkAbstractPropPicker *picker, vtkRenderer *renderer);
-FWRENDERVTK_API bool      getNearestPickedPosition(vtkAbstractPropPicker *picker, vtkRenderer *renderer, double *position);
+FWRENDERVTK_API vtkProp* getNearestPickedProp(vtkAbstractPropPicker* picker, vtkRenderer* renderer);
+FWRENDERVTK_API bool     getNearestPickedPosition(vtkAbstractPropPicker* picker, vtkRenderer* renderer,
+                                                  double* position);
 
-} //vtk
+#ifndef ANDROID
+#if VTK_MAJOR_VERSION < 7
+FWRENDERVTK_API vtkSmartPointer<vtkShaderProgram2> buildShader(vtkRenderWindow* pWindow,
+                                                               const char* pcVertexShader,
+                                                               const char* pcFragmentShader );
 
-} //fwRenderVTK
+FWRENDERVTK_API vtkSmartPointer<vtkShaderProgram2> buildShaderFromFile( vtkRenderWindow* pWindow,
+                                                                        const char* pcVertexName,
+                                                                        const char* pcFragmentName );
+#else
+FWRENDERVTK_API vtkSmartPointer<vtkShaderProgram> buildShader(vtkRenderWindow* pWindow,
+                                                              const char* pcVertexShader,
+                                                              const char* pcFragmentShader );
+
+FWRENDERVTK_API vtkSmartPointer<vtkShaderProgram> buildShaderFromFile( vtkRenderWindow* pWindow,
+                                                                       const char* pcVertexName,
+                                                                       const char* pcFragmentName );
+#endif // VTK_MAJOR_VERSION < 7
+#endif
 
+} //vtk
+} //fwRenderVTK
 
+#endif //__FWRENDERVTK_VTK_HELPERS_HPP__
 
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Instantiator.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Instantiator.hpp
index 1d5efc0..8e5bbb0 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Instantiator.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Instantiator.hpp
@@ -1,15 +1,19 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef __FWRENDERVTK_VTK_INSTANTIATOR_HPP__
+#define __FWRENDERVTK_VTK_INSTANTIATOR_HPP__
 
 #include "fwRenderVTK/config.hpp"
 
-namespace fwRenderVTK {
+namespace fwRenderVTK
+{
 
-namespace vtk {
+namespace vtk
+{
 
 class FWRENDERVTK_CLASS_API Instantiator
 {
@@ -17,6 +21,8 @@ public:
     FWRENDERVTK_API static void ClassInitialize();
     FWRENDERVTK_API static void ClassFinalize();
 };
-} //vtk
 
+} //vtk
 } //fwRenderVTK
+
+#endif //__FWRENDERVTK_VTK_INSTANTIATOR_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp
index 8982183..b27e45b 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp
@@ -1,28 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRENDERVTK_INTERACTORSTYLE2DFORNEGATO_HPP_
-#define _FWRENDERVTK_INTERACTORSTYLE2DFORNEGATO_HPP_
+#ifndef __FWRENDERVTK_VTK_INTERACTORSTYLE2DFORNEGATO_HPP__
+#define __FWRENDERVTK_VTK_INTERACTORSTYLE2DFORNEGATO_HPP__
 
-#include <vtkImagePlaneWidget.h>
 #include <vtkInteractorStyleTrackballCamera.h>
 
 #include "fwRenderVTK/config.hpp"
+#include "fwRenderVTK/IInteractorStyle.hpp"
 
 
 class Renderer;
 
-class FWRENDERVTK_CLASS_API InteractorStyle2DForNegato : public vtkInteractorStyleTrackballCamera
+class FWRENDERVTK_CLASS_API InteractorStyle2DForNegato : public vtkInteractorStyleTrackballCamera,
+                                                         public ::fwRenderVTK::IInteractorStyle
 {
 
 public:
 
     FWRENDERVTK_API static InteractorStyle2DForNegato *New();
 
-    vtkTypeRevisionMacro(InteractorStyle2DForNegato, vtkInteractorStyle);
+    vtkTypeMacro(InteractorStyle2DForNegato, vtkInteractorStyle);
 
     FWRENDERVTK_API virtual void OnMiddleButtonDown();
 
@@ -53,4 +54,4 @@ private:
     double m_oldPickPoint[4];
 };
 
-#endif // _FWRENDERVTK_INTERACTORSTYLE3DFORNEGATO_HPP_
+#endif // __FWRENDERVTK_VTK_INTERACTORSTYLE2DFORNEGATO_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp
index 10f5668..b0baa04 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp
@@ -1,28 +1,29 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef _FWRENDERVTK_INTERACTORSTYLE3DFORNEGATO_HPP_
-#define _FWRENDERVTK_INTERACTORSTYLE3DFORNEGATO_HPP_
+#ifndef __FWRENDERVTK_VTK_INTERACTORSTYLE3DFORNEGATO_HPP__
+#define __FWRENDERVTK_VTK_INTERACTORSTYLE3DFORNEGATO_HPP__
 
-#include <vtkImagePlaneWidget.h>
 #include <vtkInteractorStyleTrackballCamera.h>
 
 #include "fwRenderVTK/config.hpp"
+#include "fwRenderVTK/IInteractorStyle.hpp"
 
 
 class Renderer;
 
-class FWRENDERVTK_CLASS_API InteractorStyle3DForNegato : public vtkInteractorStyleTrackballCamera
+class FWRENDERVTK_CLASS_API InteractorStyle3DForNegato : public vtkInteractorStyleTrackballCamera,
+                                                         public ::fwRenderVTK::IInteractorStyle
 {
 
 public:
 
     FWRENDERVTK_API static InteractorStyle3DForNegato *New();
 
-    vtkTypeRevisionMacro(InteractorStyle3DForNegato, vtkInteractorStyle);
+    vtkTypeMacro(InteractorStyle3DForNegato, vtkInteractorStyle);
 
     FWRENDERVTK_API virtual void OnMiddleButtonDown();
 
@@ -57,4 +58,4 @@ private:
     double m_oldPickPoint[4];
 };
 
-#endif // _FWRENDERVTK_INTERACTORSTYLE3DFORNEGATO_HPP_
+#endif // __FWRENDERVTK_VTK_INTERACTORSTYLE3DFORNEGATO_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp
index cd9a400..5b31904 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.hpp
@@ -1,12 +1,12 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-
-#ifndef __MARKEDSPHEREHANDLEREPRESENTATION_H
-#define __MARKEDSPHEREHANDLEREPRESENTATION_H
+#ifndef __FWRENDERVTK_VTK_MARKEDSPHEREHANDLEREPRESENTATION_HPP__
+#define __FWRENDERVTK_VTK_MARKEDSPHEREHANDLEREPRESENTATION_HPP__
+#ifndef ANDROID
 
 #include "vtkHandleRepresentation.h"
 #include "vtkSphereHandleRepresentation.h"
@@ -25,55 +25,55 @@ namespace vtk
 {
 
 
-class FWRENDERVTK_CLASS_API  MarkedSphereHandleRepresentation 
-                        : public vtkSphereHandleRepresentation
+class FWRENDERVTK_CLASS_API MarkedSphereHandleRepresentation :
+    public vtkSphereHandleRepresentation
 {
 public:
-  // Description:
-  // Instantiate this class.
-  FWRENDERVTK_API static MarkedSphereHandleRepresentation *New();
-
-  // Description:
-  // Standard methods for instances of this class.
-  vtkTypeRevisionMacro(MarkedSphereHandleRepresentation,vtkHandleRepresentation);
-  FWRENDERVTK_API void PrintSelf(ostream& os, vtkIndent indent);
-
-  FWRENDERVTK_API virtual void SetWorldPosition(double p[3]);
-
-  // Description:
-  // Set/Get the handle properties when unselected and selected.
-  FWRENDERVTK_API void SetMarkerProperty(vtkProperty*);
-  FWRENDERVTK_API vtkGetObjectMacro(MarkerProperty,vtkProperty);
-  
-  // Description:
-  // Methods to make this class properly act like a vtkWidgetRepresentation.
-  FWRENDERVTK_API virtual void BuildRepresentation();
-  FWRENDERVTK_API virtual void GetActors(vtkPropCollection *);
-  FWRENDERVTK_API virtual void ReleaseGraphicsResources(vtkWindow *);
-  FWRENDERVTK_API virtual int RenderOpaqueGeometry(vtkViewport *viewport);
-  FWRENDERVTK_API virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport);
-  FWRENDERVTK_API virtual int HasTranslucentPolygonalGeometry();
+    // Description:
+    // Instantiate this class.
+    FWRENDERVTK_API static MarkedSphereHandleRepresentation *New();
+
+    // Description:
+    // Standard methods for instances of this class.
+    vtkTypeMacro(MarkedSphereHandleRepresentation,vtkHandleRepresentation);
+    FWRENDERVTK_API void PrintSelf(ostream& os, vtkIndent indent);
+
+    FWRENDERVTK_API virtual void SetWorldPosition(double p[3]);
+
+    // Description:
+    // Set/Get the handle properties when unselected and selected.
+    FWRENDERVTK_API void SetMarkerProperty(vtkProperty*);
+    FWRENDERVTK_API vtkGetObjectMacro(MarkerProperty,vtkProperty);
+
+    // Description:
+    // Methods to make this class properly act like a vtkWidgetRepresentation.
+    FWRENDERVTK_API virtual void BuildRepresentation();
+    FWRENDERVTK_API virtual void GetActors(vtkPropCollection *);
+    FWRENDERVTK_API virtual void ReleaseGraphicsResources(vtkWindow *);
+    FWRENDERVTK_API virtual int RenderOpaqueGeometry(vtkViewport *viewport);
+    FWRENDERVTK_API virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport);
+    FWRENDERVTK_API virtual int HasTranslucentPolygonalGeometry();
 
 protected:
-  MarkedSphereHandleRepresentation();
-  ~MarkedSphereHandleRepresentation();
-
-  // the cursor3D
-  vtkFollower       *Follower;
-  vtkCleanPolyData  *CleanPolyData;
-  vtkPolyDataMapper *MarkerMapper;
-  vtkCylinderSource *Marker;
-
-  double MarkerRadiusFactor;
-
-  // Properties used to control the appearance of selected objects and
-  // the manipulator in general.
-  vtkProperty *MarkerProperty;
-  void         CreateDefaultProperties();
-  
+    MarkedSphereHandleRepresentation();
+    ~MarkedSphereHandleRepresentation();
+
+    // the cursor3D
+    vtkFollower       *Follower;
+    vtkCleanPolyData  *CleanPolyData;
+    vtkPolyDataMapper *MarkerMapper;
+    vtkCylinderSource *Marker;
+
+    double MarkerRadiusFactor;
+
+    // Properties used to control the appearance of selected objects and
+    // the manipulator in general.
+    vtkProperty *MarkerProperty;
+    void         CreateDefaultProperties();
+
 private:
-  MarkedSphereHandleRepresentation(const MarkedSphereHandleRepresentation&);  //Not implemented
-  void operator=(const MarkedSphereHandleRepresentation&);  //Not implemented
+    MarkedSphereHandleRepresentation(const MarkedSphereHandleRepresentation&); //Not implemented
+    void operator=(const MarkedSphereHandleRepresentation&); //Not implemented
 };
 
 
@@ -81,4 +81,5 @@ private:
 
 } // namespace fwRenderVTK
 
-#endif //__MARKEDSPHEREHANDLEREPRESENTATION_H
+#endif //ANDROID
+#endif //__FWRENDERVTK_VTK_MARKEDSPHEREHANDLEREPRESENTATION_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp
index 3bba8a0..b073bd4 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/Namespace.hpp
@@ -1,24 +1,21 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#ifndef FWRENDERVTKVTKNAMESPACE_HPP_
-#define FWRENDERVTKVTKNAMESPACE_HPP_
+#ifndef __FWRENDERVTK_VTK_NAMESPACE_HPP__
+#define __FWRENDERVTK_VTK_NAMESPACE_HPP__
 
 namespace fwRenderVTK
 {
 /*
  * @brief       The namespace fwRenderVTK::vtk provides several picker and interactor for the generic scene .
  * @namespace   fwRenderVTK::vtk
- * 
- * @date        2009-2010.
- *
  */
 namespace vtk
 {
 
 }
 }
-#endif /* FWRENDERVTKVTKNAMESPACE_HPP_ */
+#endif /* __FWRENDERVTK_VTK_NAMESPACE_HPP__ */
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkAxesActor.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkAxesActor.hpp
new file mode 100644
index 0000000..cceabe8
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkAxesActor.hpp
@@ -0,0 +1,52 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWRENDERVTK_VTK_FWVTKAXESACTOR_HPP__
+#define __FWRENDERVTK_VTK_FWVTKAXESACTOR_HPP__
+
+#ifndef ANDROID
+
+#include "fwRenderVTK/config.hpp"
+#include <vtkAxesActor.h>
+
+class vtkPropCollection;
+
+/**
+ * @brief The fwVtkAxesActor class is a specific and movable vtkAxesActor
+ * @see GetBounds method
+ */
+class FWRENDERVTK_CLASS_API fwVtkAxesActor : public vtkAxesActor
+{
+public:
+
+    FWRENDERVTK_API static fwVtkAxesActor* New();
+
+    vtkTypeMacro(fwVtkAxesActor,vtkAxesActor);
+    void PrintSelf(ostream& os, vtkIndent indent);
+
+    /**
+     * @brief Overload of GetBounds method :
+     * In vtkAxesActor Bounds are computed as 'Max' of each actors, and 'Min' values  are equals to '-Max'.
+     * This work well when vtkAxesActor is centered on 0, but if the actor is moved
+     * bounds values may be unconsistent.
+     *
+     * In this method we compute bounds as the min and max of each actors in each direction (X Y Z).
+     *
+     */
+    FWRENDERVTK_API double* GetBounds();
+
+
+protected:
+    fwVtkAxesActor();
+    virtual ~fwVtkAxesActor();
+
+private:
+    fwVtkAxesActor(const fwVtkAxesActor&); // Not implemented.
+    void operator=(const fwVtkAxesActor&); // Not implemented.
+};
+
+#endif // ANDROID
+#endif //__FWRENDERVTK_VTK_FWVTKAXESACTOR_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp
index 0d54a80..eab418e 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp
@@ -1,23 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 /*=========================================================================
 
-  Program:   Visualization Toolkit
-  Module:    $RCSfile: vtkBoxRepresentation.h,v $
+   Program:   Visualization Toolkit
+   Module:    $RCSfile: vtkBoxRepresentation.h,v $
 
-  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-  All rights reserved.
-  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+   All rights reserved.
+   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
      This software is distributed WITHOUT ANY WARRANTY; without even
      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      PURPOSE.  See the above copyright notice for more information.
 
-=========================================================================*/
+   =========================================================================*/
 // .NAME vtkBoxRepresentation - a class defining the representation for the vtkBoxWidget2
 // .SECTION Description
 // This class is a concrete representation for the vtkBoxWidget2. It
@@ -37,14 +37,14 @@
 // vtkBoxWidget2 vtkBoxWidget
 
 
-#ifndef __fwVtkBoxRepresentation_h
-#define __fwVtkBoxRepresentation_h
-
-#include "vtkWidgetRepresentation.h"
+#ifndef __FWRENDERVTK_VTK_FWVTKBOXREPRESENTATION_HPP__
+#define __FWRENDERVTK_VTK_FWVTKBOXREPRESENTATION_HPP__
 
 #include "fwRenderVTK/config.hpp"
 
-class vtkBoxRepresentation;
+#include <vtkBoxRepresentation.h>
+#include <vtkWidgetRepresentation.h>
+
 class vtkActor;
 class vtkPolyDataMapper;
 class vtkLineSource;
@@ -65,41 +65,41 @@ class vtkMatrix4x4;
 class FWRENDERVTK_CLASS_API fwVtkBoxRepresentation : public vtkBoxRepresentation
 {
 public:
-  // Description:
-  // Instantiate the class.
-  FWRENDERVTK_API static fwVtkBoxRepresentation *New();
-
-  // Description:
-  // Standard methods for the class.
-  vtkTypeRevisionMacro(fwVtkBoxRepresentation,vtkBoxRepresentation);
-  void PrintSelf(ostream& os, vtkIndent indent);
-
-  // Description:
-  // Control the behavior of the widget. Translation, rotation, and
-  // scaling can all be enabled and disabled.
-  vtkSetMacro(TranslationEnabled,int);
-  vtkGetMacro(TranslationEnabled,int);
-  vtkBooleanMacro(TranslationEnabled,int);
-  vtkSetMacro(ScalingEnabled,int);
-  vtkGetMacro(ScalingEnabled,int);
-  vtkBooleanMacro(ScalingEnabled,int);
-  vtkSetMacro(RotationEnabled,int);
-  vtkGetMacro(RotationEnabled,int);
-  vtkBooleanMacro(RotationEnabled,int);
+    // Description:
+    // Instantiate the class.
+    FWRENDERVTK_API static fwVtkBoxRepresentation* New();
+
+    // Description:
+    // Standard methods for the class.
+    vtkTypeMacro(fwVtkBoxRepresentation,vtkBoxRepresentation);
+    void PrintSelf(ostream& os, vtkIndent indent);
+
+    // Description:
+    // Control the behavior of the widget. Translation, rotation, and
+    // scaling can all be enabled and disabled.
+    vtkSetMacro(TranslationEnabled,int);
+    vtkGetMacro(TranslationEnabled,int);
+    vtkBooleanMacro(TranslationEnabled,int);
+    vtkSetMacro(ScalingEnabled,int);
+    vtkGetMacro(ScalingEnabled,int);
+    vtkBooleanMacro(ScalingEnabled,int);
+    vtkSetMacro(RotationEnabled,int);
+    vtkGetMacro(RotationEnabled,int);
+    vtkBooleanMacro(RotationEnabled,int);
 
 //  // Description:
 //  // These are methods that satisfy vtkWidgetRepresentation's API.
-  virtual void WidgetInteraction(double e[2]);
+    virtual void WidgetInteraction(double e[2]);
 
 
 protected:
-  fwVtkBoxRepresentation();
+    fwVtkBoxRepresentation();
 
-  // Control whether scaling, rotation, and translation are supported
-  int TranslationEnabled;
-  int ScalingEnabled;
-  int RotationEnabled;
+    // Control whether scaling, rotation, and translation are supported
+    int TranslationEnabled;
+    int ScalingEnabled;
+    int RotationEnabled;
 
 };
 
-#endif
+#endif //__FWRENDERVTK_VTK_FWVTKBOXREPRESENTATION_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkCellPicker.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkCellPicker.hpp
index 34ad175..63a929d 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkCellPicker.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkCellPicker.hpp
@@ -1,38 +1,37 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 /*=========================================================================
 
-  Program:   Visualization Toolkit
-  Module:    $RCSfile: fwVtkCellPicker.h,v $
+   Program:   Visualization Toolkit
+   Module:    $RCSfile: fwVtkCellPicker.h,v $
 
-  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-  All rights reserved.
-  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+   All rights reserved.
+   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
      This software is distributed WITHOUT ANY WARRANTY; without even
      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      PURPOSE.  See the above copyright notice for more information.
 
-=========================================================================*/
+   =========================================================================*/
 // .NAME fwVtkCellPicker - select a cell by shooting a ray into graphics window
 // .SECTION Description
 // fwVtkCellPicker is used to select a cell by shooting a ray into graphics
-// window and intersecting with actor's defining geometry - specifically 
+// window and intersecting with actor's defining geometry - specifically
 // its cells. Beside returning coordinates, actor and mapper, fwVtkCellPicker
 // returns the id of the closest cell within the tolerance along the pick
 // ray, and the dataset that was picked.
 // .SECTION See Also
 // fwVtkPicker vtkPointPicker
 
-#ifndef __FWRENDERVTK_VTKCELLPICKER__
-#define __FWRENDERVTK_VTKCELLPICKER__
+#ifndef __FWRENDERVTK_VTK_FWVTKCELLPICKER_HPP__
+#define __FWRENDERVTK_VTK_FWVTKCELLPICKER_HPP__
 
 #include <vector>
-#include <fwData/TriangularMesh.hpp>
 
 #include <fwMath/IntrasecTypes.hpp>
 
@@ -45,49 +44,46 @@ class vtkPolyData;
 class FWRENDERVTK_CLASS_API fwVtkCellPicker : public fwVtkPicker
 {
 public:
-  FWRENDERVTK_API static fwVtkCellPicker *New();
-  vtkTypeRevisionMacro(fwVtkCellPicker,fwVtkPicker);
-  void PrintSelf(ostream& os, vtkIndent indent);
+    FWRENDERVTK_API static fwVtkCellPicker *New();
+    vtkTypeMacro(fwVtkCellPicker,fwVtkPicker);
+    void PrintSelf(ostream& os, vtkIndent indent);
 
-  // Description:
-  // Get the id of the picked cell. If CellId = -1, nothing was picked.
-  vtkGetMacro(CellId, vtkIdType);
+    // Description:
+    // Get the id of the picked cell. If CellId = -1, nothing was picked.
+    vtkGetMacro(CellId, vtkIdType);
 
-  // Description:
-  // Get the subId of the picked cell. If SubId = -1, nothing was picked.
-  vtkGetMacro(SubId, int);
+    // Description:
+    // Get the subId of the picked cell. If SubId = -1, nothing was picked.
+    vtkGetMacro(SubId, int);
 
-  // Description:
-  // Get the parametric coordinates of the picked cell. Only valid if 
-  // pick was made.
-  vtkGetVectorMacro(PCoords, double,3);
+    // Description:
+    // Get the parametric coordinates of the picked cell. Only valid if
+    // pick was made.
+    vtkGetVectorMacro(PCoords, double,3);
 
-  typedef std::vector< std::pair<int, fwVec3d> > PickedCellType;
+    typedef std::vector< std::pair<int, fwVec3d> > PickedCellType;
 
-  FWRENDERVTK_API PickedCellType GetPickedCellIds( double p1[3], double p2[3], ::fwData::TriangularMesh::sptr mesh);
-  FWRENDERVTK_API PickedCellType GetPickedCellIds( double p1[3], double p2[3], vtkPolyData *polydata);
+    FWRENDERVTK_API PickedCellType GetPickedCellIds( double p1[3], double p2[3], vtkPolyData *polydata);
 
 protected:
-  fwVtkCellPicker();
-  ~fwVtkCellPicker();
-
-  vtkIdType CellId; // picked cell
-  int SubId; // picked cell subId
-  double PCoords[3]; // picked cell parametric coordinates
-
-  virtual double IntersectWithLine(double p1[3], double p2[3], double tol, 
-                                  vtkAssemblyPath *path, vtkProp3D *p, 
-                                  vtkAbstractMapper3D *m);
-  void Initialize();
-  
+    fwVtkCellPicker();
+    ~fwVtkCellPicker();
+
+    vtkIdType CellId; // picked cell
+    int SubId; // picked cell subId
+    double PCoords[3]; // picked cell parametric coordinates
+
+    virtual double IntersectWithLine(double p1[3], double p2[3], double tol,
+                                     vtkAssemblyPath *path, vtkProp3D *p,
+                                     vtkAbstractMapper3D *m);
+    void Initialize();
+
 private:
-  vtkGenericCell *Cell; //used to accelerate picking
-  
+    vtkGenericCell *Cell; //used to accelerate picking
+
 private:
-  fwVtkCellPicker(const fwVtkCellPicker&);  // Not implemented.
-  void operator=(const fwVtkCellPicker&);  // Not implemented.
+    fwVtkCellPicker(const fwVtkCellPicker&);  // Not implemented.
+    void operator=(const fwVtkCellPicker&);  // Not implemented.
 };
 
-#endif
-
-
+#endif // __FWRENDERVTK_VTK_FWVTKCELLPICKER_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkPicker.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkPicker.hpp
index 1a45e44..2666cb3 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkPicker.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkPicker.hpp
@@ -1,35 +1,35 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 /*=========================================================================
 
-  Program:   Visualization Toolkit
-  Module:    $RCSfile: fwVtkPicker.h,v $
+   Program:   Visualization Toolkit
+   Module:    $RCSfile: fwVtkPicker.h,v $
 
-  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-  All rights reserved.
-  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+   All rights reserved.
+   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
      This software is distributed WITHOUT ANY WARRANTY; without even
      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      PURPOSE.  See the above copyright notice for more information.
 
-=========================================================================*/
+   =========================================================================*/
 // .NAME fwVtkPicker - superclass for 3D geometric pickers (uses ray cast)
 // .SECTION Description
 // fwVtkPicker is used to select instances of vtkProp3D by shooting a ray
-// into a graphics window and intersecting with the actor's bounding box. 
-// The ray is defined from a point defined in window (or pixel) coordinates, 
+// into a graphics window and intersecting with the actor's bounding box.
+// The ray is defined from a point defined in window (or pixel) coordinates,
 // and a point located from the camera's position.
 //
 // fwVtkPicker may return more than one vtkProp3D, since more than one bounding
 // box may be intersected. fwVtkPicker returns the list of props that were hit,
-// the pick coordinates in world and untransformed mapper space, and the 
-// prop (vtkProp3D) and mapper that are "closest" to the camera. The closest 
-// prop is the one whose center point (i.e., center of bounding box) 
+// the pick coordinates in world and untransformed mapper space, and the
+// prop (vtkProp3D) and mapper that are "closest" to the camera. The closest
+// prop is the one whose center point (i.e., center of bounding box)
 // projected on the ray is closest to the camera.
 
 // .SECTION See Also
@@ -38,8 +38,8 @@
 // respectively.  Or you may use hardware picking to pick any type of vtkProp
 // - see vtkPropPicker or vtkWorldPointPicker.
 
-#ifndef __FWRENDERVTK_VTKPICKER__
-#define __FWRENDERVTK_VTKCPICKER__
+#ifndef __FWRENDERVTK_VTK_FWVTKPICKER_HPP__
+#define __FWRENDERVTK_VTK_FWVTKPICKER_HPP__
 
 #include "fwRenderVTK/config.hpp"
 
@@ -59,38 +59,40 @@ class FWRENDERVTK_CLASS_API fwVtkPicker : public vtkPicker
 public:
     FWRENDERVTK_API static fwVtkPicker *New();
 
-  vtkTypeRevisionMacro(fwVtkPicker,vtkPicker);
-  void PrintSelf(ostream& os, vtkIndent indent);
+    vtkTypeMacro(fwVtkPicker,vtkPicker);
+    void PrintSelf(ostream& os, vtkIndent indent);
 
-  // Description:
-  // Perform pick operation with selection point provided. Normally the 
-  // first two values for the selection point are x-y pixel coordinate, and
-  // the third value is =0. Return non-zero if something was successfully 
-  // picked.
-  FWRENDERVTK_API virtual int Pick(double selectionX, double selectionY, double selectionZ,
-                   vtkRenderer *renderer);  
+    // Description:
+    // Perform pick operation with selection point provided. Normally the
+    // first two values for the selection point are x-y pixel coordinate, and
+    // the third value is =0. Return non-zero if something was successfully
+    // picked.
+    FWRENDERVTK_API virtual int Pick(double selectionX, double selectionY, double selectionZ,
+                                     vtkRenderer *renderer);
 
 
 
-  FWRENDERVTK_API int PickPolyData( double p1[3], double p2[3], vtkPolyData *polydata);
-  FWRENDERVTK_API int Pick( double p1[3], double p2[3], vtkPropCollection *props);
-  // Description: 
-  // Perform pick operation with selection point provided. Normally the first
-  // two values for the selection point are x-y pixel coordinate, and the
-  // third value is =0. Return non-zero if something was successfully picked.
-  int Pick(double selectionPt[3], vtkRenderer *ren)
-    {return this->Pick(selectionPt[0], selectionPt[1], selectionPt[2], ren);};
-      
+    FWRENDERVTK_API int PickPolyData( double p1[3], double p2[3], vtkPolyData *polydata);
+    FWRENDERVTK_API int Pick( double p1[3], double p2[3], vtkPropCollection *props);
+    // Description:
+    // Perform pick operation with selection point provided. Normally the first
+    // two values for the selection point are x-y pixel coordinate, and the
+    // third value is =0. Return non-zero if something was successfully picked.
+    int Pick(double selectionPt[3], vtkRenderer *ren)
+    {
+        return this->Pick(selectionPt[0], selectionPt[1], selectionPt[2], ren);
+    }
+
 protected:
-  fwVtkPicker();
-  ~fwVtkPicker();
+    fwVtkPicker();
+    ~fwVtkPicker();
 
 private:
-  fwVtkPicker(const fwVtkPicker&);  // Not implemented.
-  void operator=(const fwVtkPicker&);  // Not implemented.
+    fwVtkPicker(const fwVtkPicker&); // Not implemented.
+    void operator=(const fwVtkPicker&); // Not implemented.
 };
 
 
-#endif
+#endif //__FWRENDERVTK_VTK_FWVTKPICKER_HPP__
 
 
diff --git a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp
index 4493285..a2aad41 100644
--- a/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp
+++ b/SrcLib/visu/fwRenderVTK/include/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.hpp
@@ -1,5 +1,11 @@
-#ifndef __FWRENDERVTK_FWVTKWINDOWLEVELLOOKUPTABLE_HPP__
-#define __FWRENDERVTK_FWVTKWINDOWLEVELLOOKUPTABLE_HPP__
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef __FWRENDERVTK_VTK_FWVTKWINDOWLEVELLOOKUPTABLE_HPP__
+#define __FWRENDERVTK_VTK_FWVTKWINDOWLEVELLOOKUPTABLE_HPP__
 
 #include <vtkLookupTable.h>
 
@@ -9,89 +15,94 @@
 class FWRENDERVTK_API fwVtkWindowLevelLookupTable : public vtkLookupTable
 {
 public:
-  static fwVtkWindowLevelLookupTable *New();
-  vtkTypeMacro(fwVtkWindowLevelLookupTable,vtkLookupTable);
-  void PrintSelf(ostream& os, vtkIndent indent);
-
-  // Description:
-  // Set the window for the lookup table.  The window is the difference
-  // between TableRange[0] and TableRange[1].
-  void SetWindow(double window) {
-    this->InverseVideo = window < 0;
-    if(this->InverseVideo)
+    static fwVtkWindowLevelLookupTable *New();
+    vtkTypeMacro(fwVtkWindowLevelLookupTable,vtkLookupTable);
+    void PrintSelf(ostream& os, vtkIndent indent);
+
+    // Description:
+    // Set the window for the lookup table.  The window is the difference
+    // between TableRange[0] and TableRange[1].
+    void SetWindow(double window)
     {
-        window = -window;
+        this->InverseVideo = window < 0;
+        if(this->InverseVideo)
+        {
+            window = -window;
+        }
+        if (window < 1e-5)
+        {
+            window = 1e-5;
+        }
+        this->Window = window;
+        this->SetTableRange(this->Level - this->Window/2.0,
+                            this->Level + this->Window/2.0);
     }
-    if (window < 1e-5) { window = 1e-5; }
-    this->Window = window;
-    this->SetTableRange(this->Level - this->Window/2.0,
-                        this->Level + this->Window/2.0); };
-  vtkGetMacro(Window,double);
-
-  void BuildInvert();
-
-  // Description:
-  // Set the Level for the lookup table.  The level is the average of
-  // TableRange[0] and TableRange[1].
-  void SetLevel(double level) {
-    this->Level = level;
-    this->SetTableRange(this->Level - this->Window/2.0,
-                        this->Level + this->Window/2.0); };
-  vtkGetMacro(Level,double);
-
-  // Description:
-  // Set  on or off.  You can achieve the same effect by
-  // switching the LeftClampValue and the RightClampValue.
-  vtkSetMacro(Clamping,int);
-  vtkGetMacro(Clamping,int);
-  vtkBooleanMacro(Clamping,int);
-
-  // Description:
-  // Set the minimum table value.  All lookup table entries below the
-  // start of the ramp will be set to this color.  After you change
-  // this value, you must re-build the lookup table.
-  vtkSetVector4Macro(LeftClampValue,double);
-  vtkGetVector4Macro(LeftClampValue,double);
-
-  // Description:
-  // Set the maximum table value. All lookup table entries above the
-  // end of the ramp will be set to this color.  After you change
-  // this value, you must re-build the lookup table.
-  vtkSetVector4Macro(RightClampValue,double);
-  vtkGetVector4Macro(RightClampValue,double);
-
-  unsigned char *GetCurrentPointer(const vtkIdType id);
-
-
-  // Description:
-  // map a set of scalars through the lookup table
-  void MapScalarsThroughTable2(void *input, unsigned char *output,
-                               int inputDataType, int numberOfValues,
-                               int inputIncrement, int outputIncrement);
+    vtkGetMacro(Window,double);
+
+    void BuildInvert();
+
+    // Description:
+    // Set the Level for the lookup table.  The level is the average of
+    // TableRange[0] and TableRange[1].
+    void SetLevel(double level)
+    {
+        this->Level = level;
+        this->SetTableRange(this->Level - this->Window/2.0,
+                            this->Level + this->Window/2.0);
+    }
+    vtkGetMacro(Level,double);
+
+    // Description:
+    // Set  on or off.  You can achieve the same effect by
+    // switching the LeftClampValue and the RightClampValue.
+    vtkSetMacro(Clamping,int);
+    vtkGetMacro(Clamping,int);
+    vtkBooleanMacro(Clamping,int);
+
+    // Description:
+    // Set the minimum table value.  All lookup table entries below the
+    // start of the ramp will be set to this color.  After you change
+    // this value, you must re-build the lookup table.
+    vtkSetVector4Macro(LeftClampValue,double);
+    vtkGetVector4Macro(LeftClampValue,double);
+
+    // Description:
+    // Set the maximum table value. All lookup table entries above the
+    // end of the ramp will be set to this color.  After you change
+    // this value, you must re-build the lookup table.
+    vtkSetVector4Macro(RightClampValue,double);
+    vtkGetVector4Macro(RightClampValue,double);
+
+    unsigned char *GetCurrentPointer(const vtkIdType id);
+
+
+    // Description:
+    // map a set of scalars through the lookup table
+    void MapScalarsThroughTable2(void *input, unsigned char *output,
+                                 int inputDataType, int numberOfValues,
+                                 int inputIncrement, int outputIncrement);
 
 
 
 protected:
-  fwVtkWindowLevelLookupTable(int sze=256, int ext=256);
-  ~fwVtkWindowLevelLookupTable();
+    fwVtkWindowLevelLookupTable(int sze = 256, int ext = 256);
+    ~fwVtkWindowLevelLookupTable();
 
-  double Window;
-  double Level;
-  int InverseVideo;
+    double Window;
+    double Level;
+    int InverseVideo;
 
-  int Clamping;
-  double RightClampValue[4];
-  double LeftClampValue[4];
+    int Clamping;
+    double RightClampValue[4];
+    double LeftClampValue[4];
 
 
-  vtkUnsignedCharArray *InvertTable;
-  vtkTimeStamp InvertTime;
+    vtkUnsignedCharArray *InvertTable;
+    vtkTimeStamp InvertTime;
 
 private:
-  fwVtkWindowLevelLookupTable(const fwVtkWindowLevelLookupTable&);  // Not implemented.
-  void operator=(const fwVtkWindowLevelLookupTable&);  // Not implemented.
+    fwVtkWindowLevelLookupTable(const fwVtkWindowLevelLookupTable&); // Not implemented.
+    void operator=(const fwVtkWindowLevelLookupTable&); // Not implemented.
 };
 
-#endif //__FWRENDERVTK_FWVTKWINDOWLEVELLOOKUPTABLE_HPP__
-
-
+#endif //__FWRENDERVTK_VTK_FWVTKWINDOWLEVELLOOKUPTABLE_HPP__
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkAdaptorService.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkAdaptorService.cpp
index c7af96a..3d03ee0 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkAdaptorService.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkAdaptorService.cpp
@@ -1,24 +1,23 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
-#include <boost/foreach.hpp>
-
-#include <vtkRenderer.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderWindowInteractor.h>
-#include <vtkAbstractPropPicker.h>
-#include <vtkTransform.h>
+#include "fwRenderVTK/IVtkAdaptorService.hpp"
 
 #include <fwData/String.hpp>
-#include <fwTools/fwID.hpp>
 
-#include <fwServices/Base.hpp>
-#include <fwServices/IEditionService.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/registry/ObjectService.hpp>
 
-#include "fwRenderVTK/IVtkAdaptorService.hpp"
+#include <fwTools/fwID.hpp>
+
+#include <vtkAbstractPropPicker.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkRenderer.h>
+#include <vtkTransform.h>
 
 
 
@@ -28,13 +27,13 @@ namespace fwRenderVTK
 IVtkAdaptorService::IVtkAdaptorService() throw()
     : m_comChannelPriority(0.5),
       m_vtkPipelineModified(true),
-      m_rendererId ("default") ,
+      m_rendererId ("default"),
       m_pickerId   (""), // by default no Picker
       m_transformId   (""), // by default no Transform
       m_propCollection ( vtkPropCollection::New() ),
-      m_autoRender(true)
+      m_autoRender(true),
+      m_autoConnect(true)
 {
-    m_connections = ::fwServices::helper::SigSlotConnection::New();
 }
 
 IVtkAdaptorService::~IVtkAdaptorService() throw()
@@ -42,17 +41,32 @@ IVtkAdaptorService::~IVtkAdaptorService() throw()
     m_propCollection->Delete();
 }
 
-void IVtkAdaptorService::info(std::ostream &_sstream )
+void IVtkAdaptorService::info(std::ostream& _sstream )
+{
+    _sstream << "IVtkAdaptorService : ";
+    this->SuperClass::info( _sstream );
+}
+
+//------------------------------------------------------------------------------
+
+void IVtkAdaptorService::configuring() throw(fwTools::Failed)
 {
-    _sstream << "IVtkAdaptorService : " ;
-    this->SuperClass::info( _sstream ) ;
+    this->setPickerId    ( m_configuration->getAttributeValue ( "picker"    ) );
+    this->setRenderId    ( m_configuration->getAttributeValue ( "renderer"  ) );
+    this->setTransformId ( m_configuration->getAttributeValue ( "transform" ) );
+    doConfigure();
 }
 
+//------------------------------------------------------------------------------
+
+
 void IVtkAdaptorService::starting() throw(fwTools::Failed)
 {
     /// Install observation
-    m_connections->connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
-
+    if (m_autoConnect)
+    {
+        m_connections.connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
+    }
     assert( m_renderService.lock() );
 
     doStart();
@@ -64,16 +78,20 @@ void IVtkAdaptorService::starting() throw(fwTools::Failed)
 void IVtkAdaptorService::stopping() throw(fwTools::Failed)
 {
     /// Stop observation
-    m_connections->disconnect();
+    m_connections.disconnect();
     doStop();
     requestRender();
 }
+
 //------------------------------------------------------------------------------
 
 void IVtkAdaptorService::swapping() throw(fwTools::Failed)
 {
-    m_connections->disconnect();
-    m_connections->connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
+    m_connections.disconnect();
+    if (m_autoConnect)
+    {
+        m_connections.connect(this->getObject(), this->getSptr(), this->getObjSrvConnections());
+    }
     doSwap();
     requestRender();
 }
@@ -88,28 +106,20 @@ void IVtkAdaptorService::updating() throw(fwTools::Failed)
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::receiving(::fwServices::ObjectMsg::csptr msg) throw(fwTools::Failed)
-{
-    doReceive(msg);
-    requestRender();
-}
-
-//------------------------------------------------------------------------------
-
-void IVtkAdaptorService::setRenderService( VtkRenderService::sptr service)
+void IVtkAdaptorService::setRenderService( SRender::sptr service)
 {
     /// Preconditions
     SLM_ASSERT("service not instanced", service);
-    assert( this->isStopped() ) ;
+    assert( this->isStopped() );
 
-    m_renderService = service ;
+    m_renderService = service;
 }
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::setRenderId(VtkRenderService::RendererIdType newID)
+void IVtkAdaptorService::setRenderId(SRender::RendererIdType newID)
 {
-    m_rendererId =  newID;
+    m_rendererId = newID;
 }
 
 //------------------------------------------------------------------------------
@@ -121,14 +131,22 @@ void IVtkAdaptorService::setVtkPipelineModified()
 
 //------------------------------------------------------------------------------
 
+int IVtkAdaptorService::getStartPriority()
+{
+    return 0;
+}
+
+//------------------------------------------------------------------------------
+
 void IVtkAdaptorService::requestRender()
 {
-    if ( this->getRenderService()->isShownOnScreen() && m_vtkPipelineModified && m_autoRender )
+    if ( this->getRenderService()->isStarted() && this->getRenderService()->isShownOnScreen()
+         && m_vtkPipelineModified && m_autoRender )
     {
         if ( !this->getRenderService()->getPendingRenderRequest())
         {
             this->getRenderService()->setPendingRenderRequest(true);
-            this->getRenderService()->slot(VtkRenderService::s_RENDER_SLOT)->asyncRun();
+            this->getRenderService()->slot(SRender::s_RENDER_SLOT)->asyncRun();
         }
         m_vtkPipelineModified = false;
     }
@@ -136,14 +154,14 @@ void IVtkAdaptorService::requestRender()
 
 //------------------------------------------------------------------------------
 
-VtkRenderService::RendererIdType IVtkAdaptorService::getRenderId()
+SRender::RendererIdType IVtkAdaptorService::getRenderId() const
 {
     return m_rendererId;
 }
 
 //------------------------------------------------------------------------------
 
-VtkRenderService::sptr  IVtkAdaptorService:: getRenderService()
+SRender::sptr IVtkAdaptorService:: getRenderService() const
 {
     return m_renderService.lock();
 }
@@ -157,21 +175,21 @@ vtkRenderer* IVtkAdaptorService::getRenderer()
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::setPickerId(VtkRenderService::PickerIdType newID)
+void IVtkAdaptorService::setPickerId(SRender::PickerIdType newID)
 {
-    m_pickerId =  newID;
+    m_pickerId = newID;
 }
 
 //------------------------------------------------------------------------------
 
-VtkRenderService::PickerIdType IVtkAdaptorService::getPickerId()
+SRender::PickerIdType IVtkAdaptorService::getPickerId() const
 {
     return m_pickerId;
 }
 
 //------------------------------------------------------------------------------
 
-vtkAbstractPropPicker * IVtkAdaptorService::getPicker(std::string pickerId)
+vtkAbstractPropPicker* IVtkAdaptorService::getPicker(std::string pickerId)
 {
     if (pickerId.empty())
     {
@@ -182,34 +200,34 @@ vtkAbstractPropPicker * IVtkAdaptorService::getPicker(std::string pickerId)
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::setTransformId(VtkRenderService::VtkObjectIdType newID)
+void IVtkAdaptorService::setTransformId(SRender::VtkObjectIdType newID)
 {
-    m_transformId =  newID;
+    m_transformId = newID;
 }
 
 //------------------------------------------------------------------------------
 
-VtkRenderService::VtkObjectIdType IVtkAdaptorService::getTransformId()
+SRender::VtkObjectIdType IVtkAdaptorService::getTransformId() const
 {
     return m_transformId;
 }
 
 //------------------------------------------------------------------------------
 
-vtkTransform * IVtkAdaptorService::getTransform()
+vtkTransform* IVtkAdaptorService::getTransform()
 {
     return vtkTransform::SafeDownCast(m_renderService.lock()->getVtkObject(m_transformId));
 }
 
 //------------------------------------------------------------------------------
 
-vtkObject * IVtkAdaptorService::getVtkObject(VtkRenderService::VtkObjectIdType objectId)
+vtkObject* IVtkAdaptorService::getVtkObject(const SRender::VtkObjectIdType& objectId) const
 {
     if (!objectId.empty())
     {
         return m_renderService.lock()->getVtkObject(objectId);
     }
-    return NULL;
+    return nullptr;
 }
 
 //------------------------------------------------------------------------------
@@ -221,7 +239,7 @@ vtkRenderWindowInteractor* IVtkAdaptorService::getInteractor()
 
 //------------------------------------------------------------------------------
 
-::fwData::Object::sptr IVtkAdaptorService::getAssociatedObject(vtkProp *prop, int depth)
+::fwData::Object::sptr IVtkAdaptorService::getAssociatedObject(vtkProp* prop, int depth)
 {
     ::fwData::Object::sptr obj;
 
@@ -234,12 +252,15 @@ vtkRenderWindowInteractor* IVtkAdaptorService::getInteractor()
         else
         {
             ::fwData::Object::sptr res;
-            BOOST_FOREACH( ServiceVector::value_type service, m_subServices)
+            for( ServiceVector::value_type service :  m_subServices)
             {
                 if(!service.expired())
                 {
                     res = service.lock()->getAssociatedObject(prop, depth - 1 );
-                    if (res) break;
+                    if (res)
+                    {
+                        break;
+                    }
                 }
             }
             obj = ( res && depth == 0 ) ? this->getObject() : res;
@@ -252,17 +273,14 @@ vtkRenderWindowInteractor* IVtkAdaptorService::getInteractor()
 
 void IVtkAdaptorService::registerService( ::fwRenderVTK::IVtkAdaptorService::sptr service)
 {
-        m_subServices.push_back(service);
+    m_subServices.push_back(service);
 }
 
 //------------------------------------------------------------------------------
 
 void IVtkAdaptorService::unregisterServices()
 {
-    BOOST_FOREACH(
-            ServiceVector::value_type service,
-            m_subServices
-            )
+    for(ServiceVector::value_type service : m_subServices)
     {
         if(!service.expired())
         {
@@ -275,14 +293,14 @@ void IVtkAdaptorService::unregisterServices()
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::registerProp(vtkProp *prop)
+void IVtkAdaptorService::registerProp(vtkProp* prop)
 {
     getProps(m_propCollection, prop);
 }
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::getProps(vtkPropCollection *propc, vtkProp *prop)
+void IVtkAdaptorService::getProps(vtkPropCollection* propc, vtkProp* prop)
 {
     int initSize = propc->GetNumberOfItems();
 
@@ -298,9 +316,9 @@ void IVtkAdaptorService::getProps(vtkPropCollection *propc, vtkProp *prop)
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::getAllSubProps(vtkPropCollection *propc, int depth)
+void IVtkAdaptorService::getAllSubProps(vtkPropCollection* propc, int depth)
 {
-    vtkProp *prop;
+    vtkProp* prop;
 
     m_propCollection->InitTraversal();
     while ( (prop = m_propCollection->GetNextProp()) )
@@ -310,7 +328,7 @@ void IVtkAdaptorService::getAllSubProps(vtkPropCollection *propc, int depth)
 
     if(depth != 0)
     {
-        BOOST_FOREACH( ServiceVector::value_type service, m_subServices)
+        for( ServiceVector::value_type service :  m_subServices)
         {
             if(!service.expired())
             {
@@ -329,7 +347,7 @@ void IVtkAdaptorService::unregisterProps()
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::addToRenderer(vtkProp *prop)
+void IVtkAdaptorService::addToRenderer(vtkProp* prop)
 {
     this->registerProp(prop);
     this->getRenderer()->AddViewProp(prop);
@@ -338,18 +356,18 @@ void IVtkAdaptorService::addToRenderer(vtkProp *prop)
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::addToPicker(vtkProp *prop, std::string pickerId)
+void IVtkAdaptorService::addToPicker(vtkProp* prop, std::string pickerId)
 {
-    OSLM_ASSERT("Picker '"<< pickerId << "' undefined." , this->getPicker(pickerId));
+    OSLM_ASSERT("Picker '"<< pickerId << "' undefined.", this->getPicker(pickerId));
     this->getPicker(pickerId)->AddPickList(prop);
     this->setVtkPipelineModified();
 }
 
 //------------------------------------------------------------------------------
 
-void IVtkAdaptorService::removeFromPicker(vtkProp *prop, std::string pickerId)
+void IVtkAdaptorService::removeFromPicker(vtkProp* prop, std::string pickerId)
 {
-    OSLM_ASSERT("Picker '"<< pickerId << "' undefined." , this->getPicker(pickerId));
+    OSLM_ASSERT("Picker '"<< pickerId << "' undefined.", this->getPicker(pickerId));
     this->getPicker(pickerId)->DeletePickList(prop);
     this->setVtkPipelineModified();
 }
@@ -358,8 +376,8 @@ void IVtkAdaptorService::removeFromPicker(vtkProp *prop, std::string pickerId)
 
 void IVtkAdaptorService::removeAllPropFromRenderer()
 {
-    vtkPropCollection *propc = m_propCollection;
-    vtkProp *prop;
+    vtkPropCollection* propc = m_propCollection;
+    vtkProp* prop;
 
     propc->InitTraversal();
     while ( (prop = propc->GetNextProp()) )
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkRenderWindowInteractorManager.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkRenderWindowInteractorManager.cpp
index c0793ee..166971b 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkRenderWindowInteractorManager.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/IVtkRenderWindowInteractorManager.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -12,27 +12,30 @@ namespace fwRenderVTK
 //-----------------------------------------------------------------------------
 
 const IVtkRenderWindowInteractorManager::FactoryRegistryKeyType IVtkRenderWindowInteractorManager::REGISTRY_KEY =
-        "::fwRenderVTK::IVtkRenderWindowInteractorManager::REGISTRY_KEY";
+    "::fwRenderVTK::IVtkRenderWindowInteractorManager::REGISTRY_KEY";
 
 //-----------------------------------------------------------------------------
 
 IVtkRenderWindowInteractorManager::sptr IVtkRenderWindowInteractorManager::createManager()
 {
     IVtkRenderWindowInteractorManager::sptr manager = ::fwRenderVTK::factory::New(
-            ::fwRenderVTK::IVtkRenderWindowInteractorManager::REGISTRY_KEY );
-    SLM_ASSERT("Sorry, The factory process to create an IVtkRenderWindowInteractorManager, failed. Missing Qt or Wx component ?", manager );
+        ::fwRenderVTK::IVtkRenderWindowInteractorManager::REGISTRY_KEY );
+    SLM_ASSERT("The factory process to create an IVtkRenderWindowInteractorManager, failed."
+               "Missing Qt or Wx component ?", manager );
     return manager;
 }
 
 //-----------------------------------------------------------------------------
 
 IVtkRenderWindowInteractorManager::IVtkRenderWindowInteractorManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
 IVtkRenderWindowInteractorManager::~IVtkRenderWindowInteractorManager()
-{}
+{
+}
 
 //-----------------------------------------------------------------------------
 
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp
new file mode 100644
index 0000000..f9d2842
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/OffScreenInteractorManager.cpp
@@ -0,0 +1,104 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwRenderVTK/OffScreenInteractorManager.hpp"
+
+#include <vtkRenderer.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderWindowInteractor.h>
+#include <vtkObjectFactory.h>
+
+#include <fwRenderVTK/registry/macros.hpp>
+
+//-----------------------------------------------------------------------------
+
+namespace fwRenderVTK
+{
+
+//-----------------------------------------------------------------------------
+
+/**
+ * @brief   Defines a class to redefine a vtkRenderWindowInteractor that can be used in a off screen window.
+ *          In offscreen rendering, we don't really need an interactor since the window is not displayed.
+ *          But we need this vtkRenderWindowInteractor to keep compatibility with regular windows.
+ *          Indeed we often use interactorManager->GetInteractor()->...
+ *
+ *          On Linux, the default vtkXRenderWindowInteractor creates a X window when we trigger the rendering.
+ *          We don't want this behavior. So we instantiate our own empty implementation that does not create a X window.
+ *
+ * @class   vtkOffscreenRenderWindowInteractor
+ *
+ */
+class vtkOffscreenRenderWindowInteractor : public vtkRenderWindowInteractor
+{
+public:
+    static vtkOffscreenRenderWindowInteractor *New();
+    vtkTypeMacro(vtkOffscreenRenderWindowInteractor,vtkRenderWindowInteractor)
+
+protected:
+    vtkOffscreenRenderWindowInteractor()
+    {
+    }
+    ~vtkOffscreenRenderWindowInteractor()
+    {
+    }
+
+private:
+    vtkOffscreenRenderWindowInteractor(const vtkOffscreenRenderWindowInteractor&); // Not implemented.
+    void operator=(const vtkOffscreenRenderWindowInteractor&); // Not implemented.
+};
+
+vtkStandardNewMacro(vtkOffscreenRenderWindowInteractor);
+
+//-----------------------------------------------------------------------------
+
+OffScreenInteractorManager::OffScreenInteractorManager()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+OffScreenInteractorManager::~OffScreenInteractorManager()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void OffScreenInteractorManager::installInteractor( ::fwGui::container::fwContainer::sptr _parent )
+{
+    OSLM_FATAL("This interactor doens't need container, use installInteractor(width, height).");
+}
+
+//-----------------------------------------------------------------------------
+
+void OffScreenInteractorManager::installInteractor(unsigned int width, unsigned int height)
+{
+    m_renderWindow = vtkRenderWindow::New();
+    m_renderWindow->SetOffScreenRendering( 1 );
+    m_renderWindow->SetSize(width, height);
+
+    m_interactor = vtkOffscreenRenderWindowInteractor::New();
+    m_interactor->SetRenderWindow(m_renderWindow);
+}
+
+//-----------------------------------------------------------------------------
+
+void OffScreenInteractorManager::uninstallInteractor()
+{
+    m_renderWindow = NULL;
+    m_interactor   = NULL;
+}
+
+//-----------------------------------------------------------------------------
+
+::vtkRenderWindowInteractor * OffScreenInteractorManager::getInteractor()
+{
+    return m_interactor;
+}
+
+//-----------------------------------------------------------------------------
+
+} // namespace fwRenderVTK
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp
new file mode 100644
index 0000000..b8a49ec
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/SRender.cpp
@@ -0,0 +1,1001 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include "fwRenderVTK/SRender.hpp"
+
+#include "fwRenderVTK/IVtkAdaptorService.hpp"
+#include "fwRenderVTK/OffScreenInteractorManager.hpp"
+#include "fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp"
+
+#include <fwCom/Signal.hpp>
+#include <fwCom/Signal.hxx>
+#include <fwCom/Slot.hpp>
+#include <fwCom/Slot.hxx>
+#include <fwCom/Slots.hpp>
+#include <fwCom/Slots.hxx>
+
+#include <fwData/Color.hpp>
+#include <fwData/mt/ObjectWriteLock.hpp>
+
+#include <fwRuntime/ConfigurationElementContainer.hpp>
+#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
+
+#include <fwServices/helper/Config.hpp>
+#include <fwServices/macros.hpp>
+#include <fwServices/op/Add.hpp>
+
+#include <fwTools/fwID.hpp>
+
+#include <fwVtkIO/vtk.hpp>
+
+#include <vtkCellPicker.h>
+#include <vtkInstantiator.h>
+#include <vtkRenderWindow.h>
+#include <vtkRenderer.h>
+#include <vtkRendererCollection.h>
+#include <vtkSmartPointer.h>
+#include <vtkTransform.h>
+#include <vtkWindowToImageFilter.h>
+
+#include <boost/function.hpp>
+#include <boost/lexical_cast.hpp>
+
+#include <functional>
+
+fwServicesRegisterMacro( ::fwRender::IRender, ::fwRenderVTK::SRender, ::fwData::Composite );
+
+using namespace fwServices;
+
+
+namespace fwRenderVTK
+{
+const ::fwCom::Signals::SignalKeyType SRender::s_DROPPED_SIG     = "dropped";
+const ::fwCom::Slots::SlotKeyType SRender::s_RENDER_SLOT         = "render";
+const ::fwCom::Slots::SlotKeyType SRender::s_REQUEST_RENDER_SLOT = "requestRender";
+
+static const ::fwCom::Slots::SlotKeyType s_ADD_OBJECTS_SLOT    = "addObject";
+static const ::fwCom::Slots::SlotKeyType s_CHANGE_OBJECTS_SLOT = "changeObject";
+static const ::fwCom::Slots::SlotKeyType s_REMOVE_OBJECTS_SLOT = "removeObjects";
+
+//-----------------------------------------------------------------------------
+
+SRender::SRender() throw() :
+    m_pendingRenderRequest(false),
+    m_renderMode(RenderMode::AUTO),
+    m_width(1280),
+    m_height(720),
+    m_offScreen(false)
+{
+    newSignal<DroppedSignalType>(s_DROPPED_SIG);
+
+    newSlot(s_RENDER_SLOT, &SRender::render, this);
+    newSlot(s_REQUEST_RENDER_SLOT, &SRender::requestRender, this);
+    newSlot(s_ADD_OBJECTS_SLOT, &SRender::addObjects, this);
+    newSlot(s_CHANGE_OBJECTS_SLOT, &SRender::changeObjects, this);
+    newSlot(s_REMOVE_OBJECTS_SLOT, &SRender::removeObjects, this);
+}
+
+//-----------------------------------------------------------------------------
+
+SRender::~SRender() throw()
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::configureRenderer( ConfigurationType conf )
+{
+    assert(conf->getName() == "renderer");
+
+    std::string id         = conf->getAttributeValue("id");
+    std::string background = conf->getAttributeValue("background");
+
+    if(m_renderers.count(id) == 0)
+    {
+        m_renderers[id] = vtkRenderer::New();
+
+//vtk depth peeling not available on android (Offscreen rendering issues)
+#ifndef ANDROID
+        m_renderers[id]->SetUseDepthPeeling     ( 1  );
+        m_renderers[id]->SetMaximumNumberOfPeels( 8  );
+        m_renderers[id]->SetOcclusionRatio      ( 0. );
+#endif
+
+        if(conf->hasAttribute("layer") )
+        {
+            int layer = ::boost::lexical_cast< int >(conf->getAttributeValue("layer"));
+            m_renderers[id]->SetLayer(layer);
+        }
+    }
+
+    if ( !background.empty() )
+    {
+        if(background[0] == '#')
+        {
+            ::fwData::Color::sptr color = ::fwData::Color::New();
+            color->setRGBA(background);
+            m_renderers[id]->SetBackground(color->getRefRGBA()[0], color->getRefRGBA()[1], color->getRefRGBA()[2]);
+        }
+        else
+        {
+            // compatibility with "old" color
+            double color = ::boost::lexical_cast<double> (background);
+            m_renderers[id]->SetBackground(color, color, color);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::configurePicker( ConfigurationType conf )
+{
+    assert(conf->getName() == "picker");
+
+    std::string id       = conf->getAttributeValue("id");
+    std::string vtkclass = conf->getAttributeValue("vtkclass");
+
+    if (vtkclass.empty())
+    {
+        vtkclass = "vtkCellPicker";
+    }
+
+    if(m_pickers.count(id) == 0)
+    {
+        m_pickers[id] = vtkAbstractPropPicker::SafeDownCast(vtkInstantiator::CreateInstance(vtkclass.c_str()));
+        OSLM_ASSERT("'" << vtkclass.c_str() << "' instantiation failled.",m_pickers[id]);
+        m_pickers[id]->InitializePickList();
+        m_pickers[id]->PickFromListOn();
+        vtkPicker* picker = vtkPicker::SafeDownCast(m_pickers[id]);
+        if (picker)
+        {
+            picker->SetTolerance(0);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::configureObject( ConfigurationType conf )
+{
+    assert(conf->getName() == "adaptor");
+    ::fwData::Composite::sptr composite = this->getComposite();
+
+    const std::string id            = conf->getAttributeValue("id");
+    const std::string objectId      = conf->getAttributeValue("objectId");
+    const std::string adaptor       = conf->getAttributeValue("class");
+    const std::string uid           = conf->getAttributeValue("uid");
+    const std::string autoConnect   = conf->getAttributeValue("autoConnect");
+    const std::string compositeName = "self";
+
+    SLM_ASSERT( "'id' required attribute missing or empty", !id.empty() );
+    SLM_ASSERT( "'objectId' required attribute missing or empty", !objectId.empty() );
+    SLM_ASSERT( "'adaptor' required attribute missing or empty", !adaptor.empty() );
+
+    const size_t compositeObjectCount = composite->getContainer().count(objectId);
+
+    OSLM_TRACE_IF(objectId << " not found in composite. If it exist, associated Adaptor will be destroyed",
+                  !(compositeObjectCount == 1 || objectId == compositeName) );
+
+    ::fwData::Object::csptr object;
+    if (compositeObjectCount)
+    {
+        object = ::fwData::Object::dynamicCast(composite->getContainer()[objectId]);
+    }
+    else if (objectId == compositeName)
+    {
+        object = ::fwData::Object::dynamicCast(composite);
+    }
+    else if(this->isVersion2())
+    {
+        // Last chance with V2 behavior
+        object = this->getInput< ::fwData::Object >(objectId);
+        if(!object)
+        {
+            object = this->getInOut< ::fwData::Object >(objectId);
+        }
+    }
+
+    if ( m_sceneAdaptors.count(id) == 0 && object )
+    {
+        OSLM_TRACE ("Adding service : IVtkAdaptorService " << adaptor << " on "<< objectId );
+        SceneAdaptor adaptee;
+        adaptee.m_config = *(conf->begin());
+        if (!uid.empty())
+        {
+            OSLM_TRACE("SRender::configureObject : uid = " << uid);
+            adaptee.m_service = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( object, adaptor, uid);
+        }
+        else
+        {
+            adaptee.m_service = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( object, adaptor);
+        }
+
+        assert(adaptee.m_config->getName() == "config");
+        assert(adaptee.getService());
+
+        adaptee.getService()->setConfiguration(adaptee.m_config);
+        adaptee.getService()->setAutoRender(m_renderMode == RenderMode::AUTO);
+        adaptee.getService()->setRenderService(SRender::dynamicCast(this->shared_from_this()));
+        adaptee.getService()->configure();
+        adaptee.getService()->setName(id);
+
+        if (!autoConnect.empty())
+        {
+            SLM_ASSERT("'autoConnect' attribut value must be 'yes' or 'no', actual: " + autoConnect,
+                       autoConnect == "yes" || autoConnect == "no" );
+            adaptee.getService()->setAutoConnect(autoConnect == "yes");
+        }
+
+        if (this->isStarted() || this->getStatus() == SWAPPING)
+        {
+            adaptee.getService()->start();
+        }
+
+        m_sceneAdaptors[id] = adaptee;
+    }
+    else if(m_sceneAdaptors.count(id) == 1)
+    {
+        SceneAdaptor& adaptee = m_sceneAdaptors[id];
+        SLM_ASSERT("Adaptor service expired !", adaptee.getService() );
+        OSLM_ASSERT( adaptee.getService()->getID() <<  " is not started ",adaptee.getService()->isStarted());
+        if (object)
+        {
+            OSLM_TRACE ("Swapping IVtkAdaptorService " << adaptor << " on "<< objectId );
+            if(adaptee.getService()->getObject() != object)
+            {
+                adaptee.getService()->swap( ::fwData::Object::constCast(object) );
+            }
+            else
+            {
+                OSLM_WARN(adaptor << "'s object already is '"
+                                  << adaptee.getService()->getObject()->getID()
+                                  << "', no need to swap");
+            }
+        }
+        else
+        {
+            adaptee.getService()->stop();
+            ::fwServices::OSR::unregisterService(adaptee.getService());
+            adaptee.m_service.reset();
+            m_sceneAdaptors.erase(id);
+        }
+    }
+    else
+    {
+        OSLM_TRACE ( "'"<< objectId << "' inexistent, passing by '" << adaptor << "'");
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::configureVtkObject( ConfigurationType conf )
+{
+    assert(conf->getName() == "vtkObject");
+
+    std::string id       = conf->getAttributeValue("id");
+    std::string vtkClass = conf->getAttributeValue("class");
+    assert( !id.empty() );
+    assert( !vtkClass.empty() );
+
+    if( m_vtkObjects.count(id) == 0 )
+    {
+
+        if ( vtkClass == "vtkTransform" && conf->size() == 1 )
+        {
+            m_vtkObjects[id] = createVtkTransform( conf );
+        }
+        else
+        {
+            m_vtkObjects[id] = vtkInstantiator::CreateInstance(vtkClass.c_str());
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+vtkTransform* SRender::createVtkTransform( ConfigurationType conf )
+{
+    SLM_ASSERT("vtkObject must be contain just only one sub xml element called vtkTransform.", conf->size() == 1 &&
+               ( *conf->begin() )->getName() == "vtkTransform");
+
+    ConfigurationType vtkTransformXmlElem = *conf->begin();
+
+    vtkTransform* newMat = vtkTransform::New();
+
+    for(    ::fwRuntime::ConfigurationElement::Iterator elem = vtkTransformXmlElem->begin();
+            !(elem == vtkTransformXmlElem->end());
+            ++elem )
+    {
+        SLM_ASSERT("The name of the xml element must be concatenate.", (*elem)->getName() == "concatenate" );
+
+        std::string transformId = (*elem)->getValue();
+
+        vtkTransform* mat = vtkTransform::SafeDownCast( getVtkObject(transformId) );
+
+        if ( (*elem)->hasAttribute( "inverse" ) && (*elem)->getAttributeValue( "inverse" ) == "yes" )
+        {
+            newMat->Concatenate( mat->GetLinearInverse() );
+        }
+        else
+        {
+            newMat->Concatenate( mat );
+        }
+
+    }
+
+    return newMat;
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::addVtkObject( const VtkObjectIdType& _id, vtkObject* _vtkObj )
+{
+    SLM_ASSERT( "vtkObject id is empty", !_id.empty() );
+    SLM_ASSERT( "vtkObject is NULL", _vtkObj );
+
+    if( m_vtkObjects.count(_id) == 0 )
+    {
+        m_vtkObjects[_id] = _vtkObj;
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::configuring() throw(fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+    SLM_FATAL_IF( "Depreciated tag \"win\" in configuration", m_configuration->findConfigurationElement("win") );
+
+    std::vector < ::fwRuntime::ConfigurationElement::sptr > vectConfig = m_configuration->find("scene");
+    SLM_ASSERT("Missing 'scene' configuration.",!vectConfig.empty());
+    m_sceneConfiguration = vectConfig.at(0);
+
+    m_offScreenImageKey = m_sceneConfiguration->getAttributeValue("offScreen");
+    if (!m_offScreenImageKey.empty())
+    {
+        m_offScreen = true;
+    }
+
+    if (!m_offScreen)
+    {
+        this->initialize();
+    }
+
+    std::string renderMode = m_sceneConfiguration->getAttributeValue("renderMode");
+    if (renderMode == "auto")
+    {
+        m_renderMode = RenderMode::AUTO;
+    }
+    else if (renderMode == "timer")
+    {
+        m_renderMode = RenderMode::TIMER;
+    }
+    else if (renderMode == "none")
+    {
+        m_renderMode = RenderMode::NONE;
+    }
+    else
+    {
+        SLM_WARN_IF("renderMode '" + renderMode + " is unknown, setting renderMode to 'auto'.", !renderMode.empty());
+    }
+
+    std::string widthKey = m_sceneConfiguration->getAttributeValue("width");
+    if (!widthKey.empty())
+    {
+        m_width = ::boost::lexical_cast<unsigned int>(widthKey);
+    }
+
+    std::string heightKey = m_sceneConfiguration->getAttributeValue("height");
+    if (!heightKey.empty())
+    {
+        m_height = ::boost::lexical_cast<unsigned int>(heightKey);
+    }
+
+    /// Target frame rate (default 30Hz)
+    unsigned int targetFrameRate = 30;
+    ::fwRuntime::ConfigurationElement::sptr fpsConfig = m_configuration->findConfigurationElement("fps");
+    if(fpsConfig)
+    {
+        targetFrameRate = ::boost::lexical_cast< unsigned int >(fpsConfig->getValue());
+    }
+
+    if(m_renderMode == RenderMode::TIMER)
+    {
+        unsigned int timeStep = static_cast<unsigned int>( 1000.f / targetFrameRate );
+        m_timer = m_associatedWorker->createTimer();
+
+        ::fwThread::Timer::TimeDurationType duration = ::boost::chrono::milliseconds(timeStep);
+        m_timer->setFunction( std::bind( &SRender::requestRender, this)  );
+        m_timer->setDuration(duration);
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::starting() throw(fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    if (!m_offScreen)
+    {
+        this->create();
+    }
+
+    this->startContext();
+
+    // Instantiate vtk object, class...
+    ::fwRuntime::ConfigurationElementContainer::Iterator iter;
+    for (iter = m_sceneConfiguration->begin(); iter != m_sceneConfiguration->end(); ++iter)
+    {
+        if ((*iter)->getName() == "renderer")
+        {
+            this->configureRenderer(*iter);
+        }
+        else if ((*iter)->getName() == "picker")
+        {
+            this->configurePicker(*iter);
+        }
+        else if ((*iter)->getName() == "adaptor")
+        {
+            this->configureObject(*iter);
+        }
+        else if ((*iter)->getName() == "vtkObject")
+        {
+            this->configureVtkObject(*iter);
+        }
+        else if((*iter)->getName() == "connect")
+        {
+            if((*iter)->hasAttribute("waitForKey"))
+            {
+                std::string key = (*iter)->getAttributeValue("waitForKey");
+
+                if(this->isVersion2())
+                {
+                    auto object = this->getInput< ::fwData::Object >(key);
+                    if(object)
+                    {
+                        this->manageConnection(key, object, *iter);
+                    }
+                }
+                else
+                {
+                    ::fwData::Composite::sptr composite               = this->getComposite();
+                    ::fwData::Composite::const_iterator iterComposite = composite->find(key);
+                    if(iterComposite != composite->end())
+                    {
+                        this->manageConnection(key, iterComposite->second, *iter);
+
+                    }
+                }
+                m_connect.push_back(*iter);
+            }
+            else
+            {
+                ::fwServices::helper::Config::createConnections(*iter, m_connections);
+            }
+        }
+        else if((*iter)->getName() == "proxy")
+        {
+            if((*iter)->hasAttribute("waitForKey"))
+            {
+                std::string key = (*iter)->getAttributeValue("waitForKey");
+
+                if(this->isVersion2())
+                {
+                    auto object = this->getInput< ::fwData::Object >(key);
+                    if(object)
+                    {
+                        this->manageProxy(key, object, *iter);
+                    }
+                }
+                else
+                {
+                    ::fwData::Composite::sptr composite               = this->getComposite();
+                    ::fwData::Composite::const_iterator iterComposite = composite->find(key);
+                    if(iterComposite != composite->end())
+                    {
+                        this->manageProxy(key, iterComposite->second, *iter);
+                    }
+                }
+                m_proxies.push_back(*iter);
+            }
+            else
+            {
+                ::fwServices::helper::Config::createProxy("self", *iter, m_proxyMap);
+            }
+        }
+        else
+        {
+            OSLM_ASSERT("Bad scene configurationType, unknown xml node : " << (*iter)->getName(), false);
+        }
+    }
+
+    m_interactorManager->getInteractor()->GetRenderWindow()->SetNumberOfLayers(static_cast<int>(m_renderers.size()));
+    for( RenderersMapType::iterator iter = m_renderers.begin(); iter != m_renderers.end(); ++iter )
+    {
+        vtkRenderer* renderer = (*iter).second;
+        m_interactorManager->getInteractor()->GetRenderWindow()->AddRenderer(renderer);
+    }
+
+    // Start adaptors according to their starting priority
+    std::vector< SPTR(IVtkAdaptorService) > startAdaptors;
+
+    for(auto& sceneAdaptor : m_sceneAdaptors)
+    {
+        startAdaptors.emplace_back(sceneAdaptor.second.getService());
+    }
+
+    std::sort(startAdaptors.begin(), startAdaptors.end(),
+              [](const SPTR(IVtkAdaptorService)& a, const SPTR(IVtkAdaptorService)& b)
+        {
+            return b->getStartPriority() > a->getStartPriority();
+        });
+
+    for(auto& adaptor : startAdaptors)
+    {
+        adaptor->start();
+        SLM_ASSERT("Adaptor is not started", adaptor->isStarted());
+    }
+
+    if(m_timer)
+    {
+        m_timer->start();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::stopping() throw(fwTools::Failed)
+{
+    SLM_TRACE_FUNC();
+
+    m_connections.disconnect();
+
+    if(this->isVersion2())
+    {
+        ConstObjectMapType container;
+        for(auto obj : this->getInputs())
+        {
+            if(obj.first != s_DEFAULT_OBJECT)
+            {
+                container[obj.first] = obj.second.lock();
+            }
+        }
+        for(auto obj : this->getInOuts())
+        {
+            if(obj.first != s_DEFAULT_OBJECT)
+            {
+                container[obj.first] = obj.second.lock();
+            }
+        }
+        this->disconnect(container);
+        ::fwServices::helper::Config::disconnectProxies("self", m_proxyMap);
+    }
+    else
+    {
+        this->disconnect(this->getComposite()->getContainer());
+    }
+
+    if(m_timer)
+    {
+        m_timer->stop();
+    }
+
+    // Stop adaptors in the reverse order of their starting priority
+    std::vector< SPTR(IVtkAdaptorService) > stopAdaptors;
+
+    for(auto& sceneAdaptor : m_sceneAdaptors)
+    {
+        stopAdaptors.emplace_back(sceneAdaptor.second.getService());
+    }
+
+    std::sort(stopAdaptors.begin(), stopAdaptors.end(),
+              [](const SPTR(IVtkAdaptorService)& a, const SPTR(IVtkAdaptorService)& b)
+        {
+            return b->getStartPriority() < a->getStartPriority();
+        });
+
+    for(auto& adaptor : stopAdaptors)
+    {
+        adaptor->stop();
+        SLM_ASSERT("Adaptor is not stopped", adaptor->isStopped());
+        ::fwServices::OSR::unregisterService(adaptor);
+    }
+    stopAdaptors.clear();
+    m_sceneAdaptors.clear();
+
+    this->stopContext();
+
+    if (!m_offScreen)
+    {
+        this->getContainer()->clean();
+        this->destroy();
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SRender::configureObjects(::fwData::Composite::ContainerType objects)
+{
+    SLM_ASSERT("Scene configuration is not defined",  m_sceneConfiguration );
+    SLM_ASSERT("This should not be called in a AppXml2 application",  !this->isVersion2() );
+
+    for( ::fwData::Composite::ContainerType::value_type objectId :  objects)
+    {
+        std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor","objectId",objectId.first);
+        for( ConfigurationType cfg :  confVec )
+        {
+            this->configureObject(cfg);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+void SRender::addObjects(::fwData::Composite::ContainerType objects)
+{
+    this->configureObjects(objects);
+    this->connectAfterWait(objects);
+}
+
+//------------------------------------------------------------------------------
+
+void SRender::changeObjects(::fwData::Composite::ContainerType newObjects,
+                            ::fwData::Composite::ContainerType oldObjects)
+{
+    this->disconnect(oldObjects);
+    this->configureObjects(newObjects);
+    this->connectAfterWait(newObjects);
+}
+
+//------------------------------------------------------------------------------
+
+void SRender::removeObjects(::fwData::Composite::ContainerType objects)
+{
+    this->disconnect(objects);
+    this->configureObjects(objects);
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::updating() throw(fwTools::Failed)
+{
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::swapping(const IService::KeyType& key) throw(::fwTools::Failed)
+{
+    if (this->isVersion2())
+    {
+        // remove connections
+        auto iter = m_objectConnections.find(key);
+        if(iter != m_objectConnections.end())
+        {
+            iter->second.disconnect();
+            m_objectConnections.erase(key);
+        }
+        ::fwServices::helper::Config::disconnectProxies(key, m_proxyMap);
+    }
+
+    std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor","objectId", key);
+    for( ConfigurationType cfg : confVec )
+    {
+        this->configureObject(cfg);
+    }
+
+    // create connections
+    this->connectAfterWait(key);
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::render()
+{
+    OSLM_ASSERT("Scene must be started", this->isStarted());
+    if (m_offScreen)
+    {
+        vtkSmartPointer<vtkRenderWindow> renderWindow = m_interactorManager->getInteractor()->GetRenderWindow();
+
+        renderWindow->Render();
+
+        vtkSmartPointer<vtkWindowToImageFilter> windowToImageFilter = vtkWindowToImageFilter::New();
+        windowToImageFilter->SetInputBufferTypeToRGBA();
+        windowToImageFilter->SetInput( renderWindow );
+        windowToImageFilter->Update();
+
+        vtkImageData* vtkImage = windowToImageFilter->GetOutput();
+        ::fwData::Image::sptr image;
+        if (!this->isVersion2())
+        {
+            ::fwData::Composite::sptr composite = this->getComposite();
+            image                               = composite->at< ::fwData::Image >(m_offScreenImageKey);
+        }
+        else
+        {
+            image = this->getInOut< ::fwData::Image >(m_offScreenImageKey);
+        }
+        SLM_ASSERT("Image '" + m_offScreenImageKey + "' not found.", image);
+
+        {
+            ::fwData::mt::ObjectWriteLock lock(image);
+            ::fwVtkIO::fromVTKImage(vtkImage, image);
+        }
+
+        auto sig = image->signal< ::fwData::Object::ModifiedSignalType >(::fwData::Object::s_MODIFIED_SIG);
+        {
+            ::fwCom::Connection::Blocker block(sig->getConnection(m_slotUpdate));
+            sig->asyncEmit();
+        }
+
+        // If we don't do explicitly, the filter is not destroyed and this leads to a huge memory leak
+        windowToImageFilter->Delete();
+    }
+    else
+    {
+        m_interactorManager->getInteractor()->Render();
+    }
+    this->setPendingRenderRequest(false);
+}
+
+//-----------------------------------------------------------------------------
+
+bool SRender::isShownOnScreen()
+{
+    if (!m_offScreen)
+    {
+        return this->getContainer()->isShownOnScreen();
+    }
+    else
+    {
+        return true;
+    }
+    return false;
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::requestRender()
+{
+    if ( this->isShownOnScreen() && !this->getPendingRenderRequest())
+    {
+        this->setPendingRenderRequest(true);
+        this->slot(SRender::s_RENDER_SLOT)->asyncRun();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::startContext()
+{
+    if (!m_offScreen)
+    {
+        m_interactorManager = ::fwRenderVTK::IVtkRenderWindowInteractorManager::createManager();
+        m_interactorManager->installInteractor( this->getContainer() );
+    }
+    else
+    {
+        ::fwRenderVTK::OffScreenInteractorManager::sptr interactorManager =
+            ::fwRenderVTK::OffScreenInteractorManager::New();
+        interactorManager->installInteractor(m_width, m_height);
+        m_interactorManager = interactorManager;
+    }
+
+    InteractorStyle3DForNegato* interactor = InteractorStyle3DForNegato::New();
+    SLM_ASSERT("Can't instantiate interactor", interactor);
+    interactor->setAutoRender(m_renderMode == RenderMode::AUTO);
+    m_interactorManager->getInteractor()->SetInteractorStyle( interactor );
+
+    m_interactorManager->setRenderService(this->getSptr());
+
+#ifndef __linux
+    m_interactorManager->getInteractor()->GetRenderWindow()->SetAlphaBitPlanes(1);
+    m_interactorManager->getInteractor()->GetRenderWindow()->SetMultiSamples(0);
+#endif
+
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::stopContext()
+{
+    SLM_TRACE_FUNC();
+
+    for( RenderersMapType::iterator iter = m_renderers.begin(); iter != m_renderers.end(); ++iter )
+    {
+        vtkRenderer* renderer = iter->second;
+        renderer->InteractiveOff();
+        m_interactorManager->getInteractor()->GetRenderWindow()->RemoveRenderer(renderer);
+        renderer->Delete();
+    }
+
+    m_renderers.clear();
+
+    m_interactorManager->uninstallInteractor();
+    m_interactorManager.reset();
+}
+
+//-----------------------------------------------------------------------------
+
+vtkRenderer* SRender::getRenderer(RendererIdType rendererId)
+{
+    OSLM_ASSERT("Renderer not found : '" << rendererId << "'", m_renderers.count(rendererId) == 1);
+
+    return m_renderers[rendererId];
+}
+
+//-----------------------------------------------------------------------------
+
+vtkAbstractPropPicker* SRender::getPicker(PickerIdType pickerId)
+{
+    PickersMapType::const_iterator iter = m_pickers.find(pickerId);
+    if ( iter == m_pickers.end())
+    {
+        SLM_WARN("Picker '" + pickerId + "' not found");
+        return nullptr;
+    }
+    return iter->second;
+}
+
+//-----------------------------------------------------------------------------
+
+vtkObject* SRender::getVtkObject(const VtkObjectIdType& objectId) const
+{
+    VtkObjectMapType::const_iterator iter = m_vtkObjects.find(objectId);
+    if ( iter == m_vtkObjects.end())
+    {
+        SLM_WARN("vtkObject '" + objectId + "' not found");
+        return nullptr;
+    }
+    return iter->second;
+}
+
+//-----------------------------------------------------------------------------
+
+SPTR (IVtkAdaptorService) SRender::getAdaptor(const SRender::AdaptorIdType& adaptorId) const
+{
+    IVtkAdaptorService::sptr adaptor;
+    SceneAdaptorsMapType::const_iterator it = m_sceneAdaptors.find(adaptorId);
+
+    if ( it != m_sceneAdaptors.end() )
+    {
+        adaptor = it->second.getService();
+    }
+    else
+    {
+        SLM_WARN("adaptor '" + adaptorId + "' not found");
+    }
+
+    return adaptor;
+}
+
+//-----------------------------------------------------------------------------
+
+vtkTransform* SRender::getOrAddVtkTransform( const VtkObjectIdType& _id )
+{
+    vtkTransform* t = vtkTransform::SafeDownCast(getVtkObject(_id));
+    if(t == 0)
+    {
+        t = vtkTransform::New();
+        this->addVtkObject(_id, t);
+    }
+    return t;
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::connectAfterWait(::fwData::Composite::ContainerType objects)
+{
+    for(::fwData::Composite::value_type element :  objects)
+    {
+        for(const ::fwRuntime::ConfigurationElement::sptr& connect :  m_connect)
+        {
+            this->manageConnection(element.first, element.second, connect);
+        }
+        for(const ::fwRuntime::ConfigurationElement::sptr& proxy :  m_proxies)
+        {
+            this->manageProxy(element.first, element.second, proxy);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::connectAfterWait(const std::string& key)
+{
+    if (this->isVersion2())
+    {
+        ::fwData::Object::csptr obj;
+        obj = this->getInput< ::fwData::Object >(key);
+        if(!obj)
+        {
+            obj = this->getInOut< ::fwData::Object >(key);
+        }
+        if (obj)
+        {
+            for(const ::fwRuntime::ConfigurationElement::sptr& connect :  m_connect)
+            {
+                this->manageConnection(key, obj, connect);
+            }
+            for(const ::fwRuntime::ConfigurationElement::sptr& proxy :  m_proxies)
+            {
+                this->manageProxy(key, obj, proxy);
+            }
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::manageConnection(const std::string& key, const ::fwData::Object::csptr& obj,
+                               const ConfigurationType& config)
+{
+    if(config->hasAttribute("waitForKey"))
+    {
+        std::string waitForKey = config->getAttributeValue("waitForKey");
+        if(waitForKey == key)
+        {
+            ::fwServices::helper::Config::createConnections(config, m_objectConnections[key], obj);
+        }
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+void SRender::manageProxy(const std::string& key, const ::fwData::Object::csptr& obj,
+                          const ConfigurationType& config)
+{
+    if(config->hasAttribute("waitForKey"))
+    {
+        std::string waitForKey = config->getAttributeValue("waitForKey");
+        if(waitForKey == key)
+        {
+            ::fwServices::helper::Config::createProxy(key, config, m_proxyMap, obj);
+        }
+    }
+}
+
+//------------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsType SRender::getObjSrvConnections() const
+{
+    KeyConnectionsType connections;
+    connections.push_back( std::make_pair( ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT ) );
+    connections.push_back( std::make_pair( ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT ) );
+
+    return connections;
+}
+
+//-----------------------------------------------------------------------------
+
+::fwServices::IService::KeyConnectionsMap SRender::getAutoConnections() const
+{
+    KeyConnectionsMap connections;
+    connections.push( s_DEFAULT_OBJECT, ::fwData::Composite::s_ADDED_OBJECTS_SIG, s_ADD_OBJECTS_SLOT );
+    connections.push( s_DEFAULT_OBJECT, ::fwData::Composite::s_CHANGED_OBJECTS_SIG, s_CHANGE_OBJECTS_SLOT );
+    connections.push( s_DEFAULT_OBJECT, ::fwData::Composite::s_REMOVED_OBJECTS_SIG, s_REMOVE_OBJECTS_SLOT );
+
+    return connections;
+}
+
+//------------------------------------------------------------------------------
+
+::fwData::Composite::sptr SRender::getComposite()
+{
+    if(this->isVersion2())
+    {
+        return this->getInOut< ::fwData::Composite >(s_DEFAULT_OBJECT);
+    }
+    else
+    {
+        return this->getObject< ::fwData::Composite >();
+    }
+}
+
+//-----------------------------------------------------------------------------
+
+} //namespace fwRenderVTK
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/VtkRenderService.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/VtkRenderService.cpp
deleted file mode 100644
index a2d559b..0000000
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/VtkRenderService.cpp
+++ /dev/null
@@ -1,554 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#include <boost/foreach.hpp>
-#include <boost/lambda/lambda.hpp>
-#include <boost/function.hpp>
-#include <boost/lexical_cast.hpp>
-
-#include <vtkActor.h>
-#include <vtkCellPicker.h>
-#include <vtkFrustumCoverageCuller.h>
-#include <vtkInteractorStyleTrackballCamera.h>
-#include <vtkLight.h>
-#include <vtkPolyDataMapper.h>
-#include <vtkProperty.h>
-#include <vtkRendererCollection.h>
-#include <vtkRenderWindow.h>
-#include <vtkRenderer.h>
-#include <vtkSphereSource.h>
-#include <vtkInstantiator.h>
-#include <vtkTransform.h>
-#include <vtkCamera.h>
-
-#include <fwCom/Slots.hpp>
-#include <fwCom/Slots.hxx>
-
-#include <fwServices/Base.hpp>
-#include <fwServices/macros.hpp>
-#include <fwTools/fwID.hpp>
-#include <fwData/Color.hpp>
-
-#include <fwRuntime/ConfigurationElementContainer.hpp>
-#include <fwRuntime/utils/GenericExecutableFactoryRegistrar.hpp>
-
-#include <fwComEd/CompositeMsg.hpp>
-#include <fwComEd/CameraMsg.hpp>
-
-#include "fwRenderVTK/IVtkAdaptorService.hpp"
-#include "fwRenderVTK/VtkRenderService.hpp"
-
-
-fwServicesRegisterMacro( ::fwRender::IRender , ::fwRenderVTK::VtkRenderService , ::fwData::Composite ) ;
-
-using namespace fwServices;
-
-
-namespace fwRenderVTK
-{
-
-const ::fwCom::Slots::SlotKeyType VtkRenderService::s_RENDER_SLOT = "render";
-
-//-----------------------------------------------------------------------------
-
-VtkRenderService::VtkRenderService() throw() :
-     m_pendingRenderRequest(false), m_autoRender(true)
-{
-    m_slotRender = ::fwCom::newSlot( &VtkRenderService::render, this);
-    m_slotRender->setWorker(m_associatedWorker);
-
-    ::fwCom::HasSlots::m_slots(s_RENDER_SLOT, m_slotRender);
-}
-
-//-----------------------------------------------------------------------------
-
-VtkRenderService::~VtkRenderService() throw()
-{}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::configureRenderer( ConfigurationType conf )
-{
-    assert(conf->getName() == "renderer");
-
-    std::string id = conf->getAttributeValue("id");
-    std::string background = conf->getAttributeValue("background");
-
-    if(m_renderers.count(id) == 0)
-    {
-        m_renderers[id] = vtkRenderer::New();
-
-        m_renderers[id]->SetUseDepthPeeling     ( 1  );
-        m_renderers[id]->SetMaximumNumberOfPeels( 8  );
-        m_renderers[id]->SetOcclusionRatio      ( 0. );
-
-        if(conf->hasAttribute("layer") )
-        {
-            int layer = ::boost::lexical_cast< int >(conf->getAttributeValue("layer"));
-            m_renderers[id]->SetLayer(layer);
-        }
-    }
-
-    if ( !background.empty() )
-    {
-        if(background[0] == '#')
-        {
-            ::fwData::Color::sptr color = ::fwData::Color::New();
-            color->setRGBA(background);
-            m_renderers[id]->SetBackground(color->getRefRGBA()[0], color->getRefRGBA()[1], color->getRefRGBA()[2]);
-        }
-        else
-        {
-            // compatibility with "old" color
-            double color = ::boost::lexical_cast<double> (background);
-            m_renderers[id]->SetBackground(color, color, color);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::configurePicker( ConfigurationType conf )
-{
-    assert(conf->getName() == "picker");
-
-    std::string id = conf->getAttributeValue("id");
-    std::string vtkclass = conf->getAttributeValue("vtkclass");
-
-    if (vtkclass.empty())
-    {
-        vtkclass = "vtkCellPicker";
-    }
-
-    if(m_pickers.count(id) == 0)
-    {
-        m_pickers[id] =  vtkAbstractPropPicker::SafeDownCast(vtkInstantiator::CreateInstance(vtkclass.c_str()));
-        OSLM_ASSERT("'" << vtkclass.c_str() << "' instantiation failled.",m_pickers[id]);
-        m_pickers[id]->InitializePickList();
-        m_pickers[id]->PickFromListOn();
-        vtkPicker *picker = vtkPicker::SafeDownCast(m_pickers[id]);
-        if (picker)
-        {
-            picker->SetTolerance(0);
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::configureObject( ConfigurationType conf )
-{
-    assert(conf->getName() == "adaptor");
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >() ;
-
-    const std::string id            = conf->getAttributeValue("id");
-    const std::string objectId      = conf->getAttributeValue("objectId");
-    const std::string adaptor       = conf->getAttributeValue("class");
-    const std::string uid           = conf->getAttributeValue("uid");
-    const std::string compositeName = "self";
-
-    SLM_ASSERT( "'id' required attribute missing or empty"      , !id.empty() );
-    SLM_ASSERT( "'objectId' required attribute missing or empty", !objectId.empty() );
-    SLM_ASSERT( "'adaptor' required attribute missing or empty" , !adaptor.empty() );
-
-    const unsigned int compositeObjectCount = composite->getContainer().count(objectId);
-
-    OSLM_TRACE_IF(objectId << " not found in composite. If it exist, associated Adaptor will be destroyed",
-                  ! (compositeObjectCount == 1 || objectId == compositeName) );
-
-
-    ::fwData::Object::sptr object;
-    if (compositeObjectCount)
-    {
-        object = ::fwData::Object::dynamicCast(composite->getContainer()[objectId]);
-    }
-    else if (objectId == compositeName)
-    {
-        object = ::fwData::Object::dynamicCast(composite);
-    }
-
-    if ( m_sceneAdaptors.count(id) == 0 && object )
-    {
-        OSLM_TRACE ("Adding service : IVtkAdaptorService " << adaptor << " on "<< objectId );
-        SceneAdaptor adaptee;
-        adaptee.m_config = * (conf->begin());
-        if (!uid.empty())
-        {
-            OSLM_TRACE("VtkRenderService::configureObject : uid = " << uid);
-            adaptee.m_service = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( object , adaptor, uid);
-        }
-        else
-        {
-            adaptee.m_service = ::fwServices::add< ::fwRenderVTK::IVtkAdaptorService >( object , adaptor);
-        }
-
-        assert(adaptee.m_config->getName() == "config");
-        assert(adaptee.getService());
-
-        adaptee.getService()->setConfiguration(adaptee.m_config);
-        adaptee.getService()->setAutoRender(m_autoRender);
-        adaptee.getService()->configure();
-        adaptee.getService()->setRenderService(VtkRenderService::dynamicCast(this->shared_from_this()));
-        adaptee.getService()->setName(id);
-
-        if (this->isStarted())
-        {
-            adaptee.getService()->start();
-        }
-
-        m_sceneAdaptors[id] = adaptee;
-    }
-    else if(m_sceneAdaptors.count(id) == 1)
-    {
-        SceneAdaptor &adaptee = m_sceneAdaptors[id];
-        SLM_ASSERT("Adaptor service expired !", adaptee.getService() );
-        OSLM_ASSERT( adaptee.getService()->getID() <<  " is not started " ,adaptee.getService()->isStarted());
-        if (object)
-        {
-            OSLM_TRACE ("Swapping IVtkAdaptorService " << adaptor << " on "<< objectId );
-            if(adaptee.getService()->getObject() != object)
-            {
-                adaptee.getService()->swap(object);
-            }
-            else
-            {
-                OSLM_WARN(adaptor << "'s object already is '"
-                        << adaptee.getService()->getObject()->getID()
-                        << "', no need to swap");
-            }
-        }
-        else
-        {
-            adaptee.getService()->stop();
-            ::fwServices::OSR::unregisterService(adaptee.getService());
-            adaptee.m_service.reset();
-            m_sceneAdaptors.erase(id);
-        }
-    }
-    else
-    {
-            OSLM_TRACE ( "'"<< objectId << "' inexistent, passing by '" << adaptor << "'");
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::configureVtkObject( ConfigurationType conf )
-{
-    assert(conf->getName() == "vtkObject");
-
-    std::string id = conf->getAttributeValue("id");
-    std::string vtkClass = conf->getAttributeValue("class");
-    assert( !id.empty() );
-    assert( !vtkClass.empty() );
-
-    if( m_vtkObjects.count(id) == 0 )
-    {
-
-        if ( vtkClass == "vtkTransform" && conf->size() == 1 )
-        {
-            m_vtkObjects[id] = createVtkTransform( conf );
-        }
-        else
-        {
-            m_vtkObjects[id] = vtkInstantiator::CreateInstance(vtkClass.c_str());
-        }
-
-
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-vtkTransform * VtkRenderService::createVtkTransform( ConfigurationType conf )
-{
-    SLM_ASSERT("vtkObject must be contain just only one sub xml element called vtkTransform.", conf->size() == 1 && ( *conf->begin() )->getName() == "vtkTransform");
-
-    ConfigurationType vtkTransformXmlElem = *conf->begin();
-
-    vtkTransform * newMat = vtkTransform::New();
-
-    for(    ::fwRuntime::ConfigurationElement::Iterator elem = vtkTransformXmlElem->begin();
-            !(elem == vtkTransformXmlElem->end());
-            ++elem )
-    {
-        SLM_ASSERT("Sorry, the name of xml element must be concatenate.", (*elem)->getName() == "concatenate" );
-
-        std::string transformId = (*elem)->getValue();
-
-        vtkTransform * mat = vtkTransform::SafeDownCast( getVtkObject(transformId) );
-
-        if ( (*elem)->hasAttribute( "inverse" ) && (*elem)->getAttributeValue( "inverse" ) == "yes" )
-        {
-            newMat->Concatenate( mat->GetLinearInverse() );
-        }
-        else
-        {
-            newMat->Concatenate( mat );
-        }
-
-    }
-
-    return newMat;
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::addVtkObject( VtkObjectIdType _id, vtkObject * _vtkObj )
-{
-    assert( ! _id.empty() );
-
-    if( m_vtkObjects.count(_id) == 0 )
-    {
-        m_vtkObjects[_id] = _vtkObj;
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::configuring() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-    SLM_FATAL_IF( "Depreciated tag \"win\" in configuration", m_configuration->findConfigurationElement("win") );
-    this->initialize();
-
-    std::vector < ::fwRuntime::ConfigurationElement::sptr > vectConfig = m_configuration->find("scene");
-    //assert(m_configuration->getName() == "scene");
-    assert(!vectConfig.empty());
-    m_sceneConfiguration = vectConfig.at(0);
-
-    std::string autoRender = m_sceneConfiguration->getAttributeValue("autoRender");
-    m_autoRender = (autoRender.empty() || autoRender == "true");
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::starting() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    this->create();
-    this->startContext();
-
-    // Instantiate vtk object, class...
-    ::fwRuntime::ConfigurationElementContainer::Iterator iter;
-    for (iter = m_sceneConfiguration->begin() ; iter != m_sceneConfiguration->end() ; ++iter)
-    {
-        if ((*iter)->getName() == "renderer")
-        {
-            this->configureRenderer(*iter);
-        }
-        else if ((*iter)->getName() == "picker")
-        {
-            this->configurePicker(*iter);
-        }
-        else if ((*iter)->getName() == "adaptor")
-        {
-            this->configureObject(*iter);
-        }
-        else if ((*iter)->getName() == "vtkObject")
-        {
-            this->configureVtkObject(*iter);
-        }
-        else
-        {
-            OSLM_ASSERT("Bad scene configurationType, unknown xml node : " << (*iter)->getName(), false);
-        }
-    }
-
-    m_interactorManager->getInteractor()->GetRenderWindow()->SetNumberOfLayers(m_renderers.size());
-    for( RenderersMapType::iterator iter = m_renderers.begin(); iter != m_renderers.end(); ++iter )
-    {
-        vtkRenderer *renderer = (*iter).second;
-        m_interactorManager->getInteractor()->GetRenderWindow()->AddRenderer(renderer);
-    }
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >() ;
-
-    SceneAdaptorsMapType::iterator adaptorIter ;
-    for ( adaptorIter = m_sceneAdaptors.begin();
-          adaptorIter != m_sceneAdaptors.end();
-          ++adaptorIter)
-    {
-        adaptorIter->second.getService()->start();
-        assert(adaptorIter->second.getService()->isStarted());
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::stopping() throw(fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    ::fwData::Composite::sptr composite = this->getObject< ::fwData::Composite >() ;
-
-    SceneAdaptorsMapType::iterator adaptorIter ;
-
-    for ( adaptorIter = m_sceneAdaptors.begin();
-          adaptorIter != m_sceneAdaptors.end();
-          ++adaptorIter)
-    {
-        adaptorIter->second.getService()->stop();
-        ::fwServices::OSR::unregisterService(adaptorIter->second.getService());
-        adaptorIter->second.getService().reset();
-    }
-
-    this->stopContext();
-
-    this->getContainer()->clean();
-    this->destroy();
-
-    m_sceneAdaptors.clear();
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::receiving( ::fwServices::ObjectMsg::csptr message ) throw(::fwTools::Failed)
-{
-    SLM_TRACE_FUNC();
-
-    ::fwComEd::CompositeMsg::csptr compositeMsg = ::fwComEd::CompositeMsg::dynamicConstCast(message);
-
-    if( compositeMsg )
-    {
-
-        ::fwData::Composite::ContainerType objects;
-
-        ::fwData::Composite::sptr modifiedKeys;
-
-        modifiedKeys = compositeMsg->getAddedKeys();
-        objects.insert(modifiedKeys->begin(), modifiedKeys->end());
-
-        modifiedKeys = compositeMsg->getNewChangedKeys();
-        objects.insert(modifiedKeys->begin(), modifiedKeys->end());
-
-        modifiedKeys = compositeMsg->getRemovedKeys();
-        objects.insert(modifiedKeys->begin(), modifiedKeys->end());
-
-        assert ( m_sceneConfiguration );
-
-        BOOST_FOREACH( ::fwData::Composite::ContainerType::value_type objectId, objects)
-        {
-            std::vector< ConfigurationType > confVec = m_sceneConfiguration->find("adaptor","objectId",objectId.first);
-            BOOST_FOREACH( ConfigurationType cfg, confVec )
-            {
-                this->configureObject(cfg);
-            }
-        }
-    }
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::updating() throw(fwTools::Failed)
-{}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::render()
-{
-    m_interactorManager->getInteractor()->Render();
-    this->setPendingRenderRequest(false);
-}
-
-//-----------------------------------------------------------------------------
-
-bool VtkRenderService::isShownOnScreen()
-{
-   return this->getContainer()->isShownOnScreen();
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::startContext()
-{
-    m_interactorManager = ::fwRenderVTK::IVtkRenderWindowInteractorManager::createManager();
-    m_interactorManager->setRenderService(this->getSptr());
-    m_interactorManager->installInteractor( this->getContainer() );
-
-    // For Depth peeling (translucent rendering)
-//    m_interactorManager->getInteractor()->SetRenderWhenDisabled(false);
-
-#ifndef __linux
-    m_interactorManager->getInteractor()->GetRenderWindow()->SetAlphaBitPlanes(1);
-    m_interactorManager->getInteractor()->GetRenderWindow()->SetMultiSamples(0);
-#endif
-
-//    m_interactor->GetRenderWindow()->PointSmoothingOn();
-//    m_interactor->GetRenderWindow()->LineSmoothingOn();
-//    m_interactor->GetRenderWindow()->PolygonSmoothingOn();
-//    m_interactor->Register(NULL);
-//    m_interactor->SetInteractorStyle( vtkInteractorStyleTrackballCamera::New() );
-
-//    m_interactorManager->getInteractor()->SetRenderModeToDirect();
-    //m_interactor->SetRenderModeToFrameRated();
-//    m_interactor->SetRenderModeToOneShot();
-//    m_interactor->SetRenderModeToMeanTime();
-}
-
-//-----------------------------------------------------------------------------
-
-void VtkRenderService::stopContext()
-{
-    SLM_TRACE_FUNC();
-
-    for( RenderersMapType::iterator iter = m_renderers.begin(); iter != m_renderers.end(); ++iter )
-    {
-        vtkRenderer *renderer = iter->second;
-        renderer->InteractiveOff();
-        m_interactorManager->getInteractor()->GetRenderWindow()->RemoveRenderer(renderer);
-        renderer->Delete();
-    }
-
-    m_renderers.clear();
-
-    m_interactorManager->uninstallInteractor();
-    m_interactorManager.reset();
-}
-
-//-----------------------------------------------------------------------------
-
-vtkRenderer * VtkRenderService::getRenderer(RendererIdType rendererId)
-{
-    OSLM_ASSERT("Renderer not found : '" << rendererId << "'" , m_renderers.count(rendererId) == 1);
-
-    return m_renderers[rendererId];
-}
-
-//-----------------------------------------------------------------------------
-
-vtkAbstractPropPicker * VtkRenderService::getPicker(PickerIdType pickerId)
-{
-    OSLM_ASSERT("Picker '" << pickerId << "' not found",
-            pickerId.empty() ||  ( !pickerId.empty() && m_pickers.count(pickerId) == 1));
-
-    if ( pickerId.empty() )
-    {
-        return NULL;
-    }
-    return m_pickers[pickerId];
-}
-
-//-----------------------------------------------------------------------------
-
-vtkObject * VtkRenderService::getVtkObject(VtkObjectIdType objectId)
-{
-    OSLM_WARN_IF("vtkObject '" << objectId << "' not found",
-            !(objectId.empty() ||  ( !objectId.empty() && m_vtkObjects.count(objectId) == 1)));
-
-    if ( objectId.empty() )
-    {
-        return NULL;
-    }
-    return m_vtkObjects[objectId];
-}
-
-//-----------------------------------------------------------------------------
-
-} //namespace fwRenderVTK
-
-
-
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/factory/new.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/factory/new.cpp
index 60c8655..f38532f 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/factory/new.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/factory/new.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/registry/detail.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/registry/detail.cpp
index e53e8b3..064ecd0 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/registry/detail.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/registry/detail.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,7 @@ namespace fwRenderVTK
 namespace registry
 {
 
-struct FwRenderVTKRegistryInstantiatorTag {} ;
+struct FwRenderVTKRegistryInstantiatorTag {};
 
 SPTR(Type) get()
 {
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Helpers.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Helpers.cpp
index 1c4d45a..f9a7263 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Helpers.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Helpers.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -14,8 +14,10 @@
 #include <vtkAssemblyPath.h>
 #include <vtkProp3DCollection.h>
 
+#include <vtkOpenGLRenderWindow.h>
 
 #include <fwCore/base.hpp>
+
 #include "fwRenderVTK/vtk/Helpers.hpp"
 
 namespace fwRenderVTK
@@ -28,19 +30,19 @@ namespace vtk
 
 vtkIdType getNearestPointId(vtkPoints* pts, vtkRenderer* renderer)
 {
-    vtkIdType id=-1;
+    vtkIdType id = -1;
     double camPosition[3];
     double distance = VTK_DOUBLE_MAX;
     renderer->GetActiveCamera()->GetPosition(camPosition);
 
     for(vtkIdType i = 0; i<pts->GetNumberOfPoints (); i++)
     {
-        double *point = pts->GetPoint(i);
+        double* point        = pts->GetPoint(i);
         double distancePtCam = vtkMath::Distance2BetweenPoints(point, camPosition);
 
         if(distancePtCam < distance)
         {
-            id = i;
+            id       = i;
             distance = distancePtCam;
         }
     }
@@ -50,10 +52,10 @@ vtkIdType getNearestPointId(vtkPoints* pts, vtkRenderer* renderer)
 
 //------------------------------------------------------------------------------
 
-vtkProp * getNearestPickedProp(vtkAbstractPropPicker *picker, vtkRenderer *renderer)
+vtkProp* getNearestPickedProp(vtkAbstractPropPicker* picker, vtkRenderer* renderer)
 {
-    vtkProp   *res       = NULL;
-    vtkPicker *vtkpicker = vtkPicker::SafeDownCast(picker);
+    vtkProp* res         = NULL;
+    vtkPicker* vtkpicker = vtkPicker::SafeDownCast(picker);
 
     SLM_ASSERT("getNearestPickedProp *need* a picker.", picker);
     SLM_ASSERT("getNearestPickedProp *need* a renderer.", renderer);
@@ -64,23 +66,6 @@ vtkProp * getNearestPickedProp(vtkAbstractPropPicker *picker, vtkRenderer *rende
 
         if (id>-1 && vtkpicker->GetProp3Ds()->GetNumberOfItems() > id)
         {
-//          vtkIdType i = id;
-//          vtkAssemblyPath *path = picker->GetPath();
-//          vtkAssemblyNode *node;
-//          path->InitTraversal();
-//          for ( path->InitTraversal(); (node=path->GetNextNode()); )
-//          {
-//              if (--i == 0)
-//              {
-//                  res = node->GetViewProp();
-//                  break;
-//              }
-//          }
-//          vtkAssemblyNode *node = vtkAssemblyNode::SafeDownCast(picker->GetPath()->GetItemAsObject(id));
-//          SLM_ASSERT("vtkAssemblyNode error: not found", node);
-//          res = node->GetViewProp();
-//          SLM_ASSERT("No vtkProp found in picker's path", res);
-
             res = vtkProp::SafeDownCast(vtkpicker->GetProp3Ds()->GetItemAsObject(id));
         }
     }
@@ -93,19 +78,19 @@ vtkProp * getNearestPickedProp(vtkAbstractPropPicker *picker, vtkRenderer *rende
 
 //------------------------------------------------------------------------------
 
-bool getNearestPickedPosition(vtkAbstractPropPicker *picker, vtkRenderer *renderer, double position[3])
+bool getNearestPickedPosition(vtkAbstractPropPicker* picker, vtkRenderer* renderer, double position[3])
 {
-    bool res = false;
-    vtkPicker *vtkpicker = vtkPicker::SafeDownCast(picker);
+    bool res             = false;
+    vtkPicker* vtkpicker = vtkPicker::SafeDownCast(picker);
 
     SLM_ASSERT("getNearestPickedProp *need* a picker.", picker);
     SLM_ASSERT("getNearestPickedProp *need* a renderer.", renderer);
 
-    double *point = NULL;
+    double* point = NULL;
     if (vtkpicker)
     {
-        vtkPoints *pts = vtkpicker->GetPickedPositions();
-        vtkIdType id = getNearestPointId(pts, renderer);
+        vtkPoints* pts = vtkpicker->GetPickedPositions();
+        vtkIdType id   = getNearestPointId(pts, renderer);
 
         if (id>-1)
         {
@@ -131,6 +116,167 @@ bool getNearestPickedPosition(vtkAbstractPropPicker *picker, vtkRenderer *render
 
 //------------------------------------------------------------------------------
 
+#ifndef ANDROID
+
+#if VTK_MAJOR_VERSION >= 7
+vtkSmartPointer<vtkShaderProgram>
+#else
+vtkSmartPointer<vtkShaderProgram2>
+#endif
+buildShader( vtkOpenGLRenderWindow* pWindow,
+             const char* pcVertexShader,
+             const char* pcFragmentShader )
+{
+    SLM_ASSERT( "NULL parameter", pWindow && pcVertexShader && pcFragmentShader );
+
+    vtkOpenGLRenderWindow* pOpenGLWindow = vtkOpenGLRenderWindow::SafeDownCast(pWindow);
+    if(!pOpenGLWindow)
+    {
+        SLM_ERROR("Shader only supported using OpenGL.");
+        return NULL;
+    }
+
+
+#if VTK_MAJOR_VERSION >= 7
+    vtkSmartPointer<vtkShaderProgram> pProgram = vtkSmartPointer<vtkShaderProgram>::New();
+    {
+        // The vertex shader
+        vtkShader* shader = vtkShader::New();
+        shader->SetType(vtkShader::Vertex);
+        shader->SetSource(pcVertexShader);
+        pProgram->SetVertexShader(shader);
+        shader->Delete();
+    }
+    {
+        // The fragment shader
+        vtkShader* shader = vtkShader::New();
+        shader->SetType(vtkShader::Fragment);
+        shader->SetSource(pcFragmentShader);
+        pProgram->SetFragmentShader(shader);
+        shader->Delete();
+    }
+#else
+    vtkSmartPointer<vtkShaderProgram2> pProgram = vtkSmartPointer<vtkShaderProgram2>::New();
+    {
+        vtkShader2* shader = vtkShader2::New();
+        shader->SetType(VTK_SHADER_TYPE_VERTEX);
+        shader->SetSourceCode(pcVertexShader);
+        shader->SetContext(pProgram->GetContext());
+        pProgram->GetShaders()->AddItem(shader);
+        shader->Delete();
+    }
+    {
+        // The fragment shader
+        vtkShader2* shader = vtkShader2::New();
+        shader->SetType(VTK_SHADER_TYPE_FRAGMENT);
+        shader->SetSourceCode(pcFragmentShader);
+        shader->SetContext(pProgram->GetContext());
+        pProgram->GetShaders()->AddItem(shader);
+        shader->Delete();
+    }
+#endif // VTK_MAJOR_VERSION >= 7
+
+    return pProgram;
+}
+
+//------------------------------------------------------------------------------
+
+void openShader(const char* _pcName, std::string& _strShader)
+{
+    // Read data.txt
+    std::string line;
+    std::ifstream myfile(_pcName);
+    if ( myfile.is_open() )
+    {
+        while ( myfile.good() )
+        {
+            getline( myfile, line );
+            _strShader += line + "\n";
+        }
+        myfile.close();
+    }
+    else
+    {
+        SLM_ERROR("Unable to open file : " + std::string(_pcName));
+    }
+}
+
+//------------------------------------------------------------------------------
+
+#if VTK_MAJOR_VERSION >= 7
+vtkSmartPointer<vtkShaderProgram>
+#else
+vtkSmartPointer<vtkShaderProgram2>
+#endif
+buildShaderFromFile( vtkRenderWindow* pWindow,
+                     const char* pcVertexName,
+                     const char* pcFragmentName )
+{
+    SLM_ASSERT( "NULL parameter", pWindow && pcVertexName && pcFragmentName );
+
+    vtkOpenGLRenderWindow* pOpenGLWindow = vtkOpenGLRenderWindow::SafeDownCast(pWindow);
+    if(!pOpenGLWindow)
+    {
+        SLM_ERROR("Shader only supported using OpenGL.");
+        return NULL;
+    }
+
+#if VTK_MAJOR_VERSION >= 7
+    vtkSmartPointer<vtkShaderProgram> pProgram = vtkSmartPointer<vtkShaderProgram>::New();
+    {
+        // The vertex shader
+        std::string strShader("");
+        openShader(pcVertexName, strShader);
+
+        vtkShader* shader = vtkShader::New();
+        shader->SetType(vtkShader::Vertex);
+        shader->SetSource(strShader.c_str());
+        pProgram->SetVertexShader(shader);
+        shader->Delete();
+    }
+    {
+        // The fragment shader
+        std::string strShader("");
+        openShader(pcFragmentName, strShader);
+
+        vtkShader* shader = vtkShader::New();
+        shader->SetType(vtkShader::Fragment);
+        shader->SetSource(strShader.c_str());
+        pProgram->SetFragmentShader(shader);
+        shader->Delete();
+    }
+#else
+    vtkSmartPointer<vtkShaderProgram2> pProgram = vtkSmartPointer<vtkShaderProgram2>::New();
+    {
+        // The vertex shader
+        std::string strShader("");
+        openShader(pcVertexName, strShader);
+
+        vtkShader2* shader = vtkShader2::New();
+        shader->SetType(VTK_SHADER_TYPE_VERTEX);
+        shader->SetSourceCode(strShader.c_str());
+        shader->SetContext(pProgram->GetContext());
+        pProgram->GetShaders()->AddItem(shader);
+        shader->Delete();
+    }
+    {
+        // The fragment shader
+        std::string strShader("");
+        openShader(pcFragmentName, strShader);
+
+        vtkShader2* shader = vtkShader2::New();
+        shader->SetType(VTK_SHADER_TYPE_FRAGMENT);
+        shader->SetSourceCode(strShader.c_str());
+        shader->SetContext(pProgram->GetContext());
+        pProgram->GetShaders()->AddItem(shader);
+        shader->Delete();
+    }
+#endif
+
+    return pProgram;
+}
+#endif
+
 } //vtk
 
 } //fwRenderVTK
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Instantiator.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Instantiator.cpp
index 70c0433..0d819b9 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Instantiator.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/Instantiator.cpp
@@ -1,24 +1,40 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#include "fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp"
+#include "fwRenderVTK/vtk/fwVtkPicker.hpp"
+#include "fwRenderVTK/vtk/fwVtkCellPicker.hpp"
+#include "fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp"
+#include "fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp"
+#include "fwRenderVTK/vtk/Instantiator.hpp"
 
 #include <fwCore/base.hpp>
-#include <vtkInstantiator.h>
 
-#include "fwRenderVTK/vtk/Instantiator.hpp"
+#include <vtkInstantiator.h>
+#include <vtkVersion.h>
 
+#if (VTK_MAJOR_VERSION < 6 || (VTK_MAJOR_VERSION == 6 && VTK_MINOR_VERSION < 1))
 extern vtkObject* vtkInstantiatorfwVtkBoxRepresentationNew();
 extern vtkObject* vtkInstantiatorfwVtkPickerNew();
 extern vtkObject* vtkInstantiatorfwVtkCellPickerNew();
 extern vtkObject* vtkInstantiatorInteractorStyle2DForNegatoNew();
 extern vtkObject* vtkInstantiatorInteractorStyle3DForNegatoNew();
+#else
+vtkInstantiatorNewMacro(fwVtkBoxRepresentation);
+vtkInstantiatorNewMacro(fwVtkPicker);
+vtkInstantiatorNewMacro(fwVtkCellPicker);
+vtkInstantiatorNewMacro(InteractorStyle2DForNegato);
+vtkInstantiatorNewMacro(InteractorStyle3DForNegato);
+#endif
 
-namespace fwRenderVTK {
+namespace fwRenderVTK
+{
 
-namespace vtk {
+namespace vtk
+{
 
 void Instantiator::ClassInitialize()
 {
@@ -29,9 +45,12 @@ void Instantiator::ClassInitialize()
     vtkInstantiator::RegisterInstantiator("InteractorStyle3DForNegato", vtkInstantiatorInteractorStyle3DForNegatoNew);
 
 #ifdef DEBUG
-    vtkObject *o = vtkInstantiator::CreateInstance("fwVtkBoxRepresentation");
+    vtkObject* o;
+#ifndef ANDROID
+    o = vtkInstantiator::CreateInstance("fwVtkBoxRepresentation");
     SLM_ASSERT("Unable to instantiate a fwVtkBoxRepresentation",o);
     o->Delete();
+#endif
 
     o = vtkInstantiator::CreateInstance("fwVtkPicker");
     SLM_ASSERT("Unable to instantiate a fwVtkPicker",o);
@@ -62,3 +81,4 @@ void Instantiator::ClassFinalize()
 } //vtk
 
 } //fwRenderVTK
+
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle2DForNegato.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle2DForNegato.cpp
index fcb0462..416bec2 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle2DForNegato.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle2DForNegato.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -15,7 +15,6 @@
 
 #include "fwRenderVTK/vtk/InteractorStyle2DForNegato.hpp"
 
-vtkCxxRevisionMacro(InteractorStyle2DForNegato, "$Revision: 1.24 $");
 vtkStandardNewMacro(InteractorStyle2DForNegato);
 
 //------------------------------------------------------------------------------
@@ -28,7 +27,8 @@ InteractorStyle2DForNegato::InteractorStyle2DForNegato() :
 //------------------------------------------------------------------------------
 
 InteractorStyle2DForNegato::~InteractorStyle2DForNegato()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
@@ -38,12 +38,16 @@ void InteractorStyle2DForNegato::OnChar()
 
     switch (rwi->GetKeyCode())
     {
-    case 'r' :
-        this->FindPokedRenderer(rwi->GetEventPosition()[0],
-                rwi->GetEventPosition()[1]);
-        this->CurrentRenderer->ResetCamera();
-        rwi->Render();
-        break;
+        case 'r':
+            this->FindPokedRenderer(rwi->GetEventPosition()[0],
+                                    rwi->GetEventPosition()[1]);
+            this->CurrentRenderer->ResetCamera();
+
+            if (this->getAutoRender())
+            {
+                rwi->Render();
+            }
+            break;
     }
 }
 
@@ -52,7 +56,7 @@ void InteractorStyle2DForNegato::OnChar()
 void InteractorStyle2DForNegato::OnLeftButtonDown()
 {
     this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-            this->Interactor->GetEventPosition()[1]);
+                            this->Interactor->GetEventPosition()[1]);
     if (this->CurrentRenderer == NULL)
     {
         return;
@@ -72,7 +76,7 @@ void InteractorStyle2DForNegato::OnLeftButtonDown()
 void InteractorStyle2DForNegato::OnRightButtonDown()
 {
     this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-            this->Interactor->GetEventPosition()[1]);
+                            this->Interactor->GetEventPosition()[1]);
     if (this->CurrentRenderer == NULL)
     {
         return;
@@ -111,16 +115,16 @@ void InteractorStyle2DForNegato::OnMouseMove()
 
     switch (this->State)
     {
-    case VTKIS_PAN:
-        this->FindPokedRenderer(x, y);
-        this->Pan();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-    case VTKIS_DOLLY:
-          this->FindPokedRenderer(x, y);
-          this->Dolly();
-          this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-          break;
+        case VTKIS_PAN:
+            this->FindPokedRenderer(x, y);
+            this->Pan();
+            this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+            break;
+        case VTKIS_DOLLY:
+            this->FindPokedRenderer(x, y);
+            this->Dolly();
+            this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+            break;
     }
     m_oldPickPoint[0] = m_newPickPoint[0];
     m_oldPickPoint[1] = m_newPickPoint[1];
@@ -173,7 +177,7 @@ void InteractorStyle2DForNegato::Pan()
 
     // do nothing if mouse is still on the same pos
     if( (m_newPickPoint[0] == m_oldPickPoint[0]) &&
-            (m_newPickPoint[1] == m_oldPickPoint[1]) )
+        (m_newPickPoint[1] == m_oldPickPoint[1]) )
     {
         return;
     }
@@ -187,20 +191,20 @@ void InteractorStyle2DForNegato::Pan()
     vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
     camera->GetFocalPoint(viewFocus);
     this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], viewFocus[2],
-            viewFocus);
+                                viewFocus);
     focalDepth = viewFocus[2];
 
     this->ComputeDisplayToWorld( m_newPickPoint[0],
-            m_newPickPoint[1],
-            focalDepth,
-            newPickPoint);
+                                 m_newPickPoint[1],
+                                 focalDepth,
+                                 newPickPoint);
 
     // Has to recalc old mouse point since the viewport has moved,
     // so can't move it outside the loop
     this->ComputeDisplayToWorld(m_oldPickPoint[0],
-            m_oldPickPoint[1],
-            focalDepth,
-            oldPickPoint);
+                                m_oldPickPoint[1],
+                                focalDepth,
+                                oldPickPoint);
 
     // Camera motion is reversed
     motionVector[0] = oldPickPoint[0] - newPickPoint[0];
@@ -211,18 +215,22 @@ void InteractorStyle2DForNegato::Pan()
     camera->GetPosition(viewPoint);
 
     camera->SetFocalPoint(motionVector[0] + viewFocus[0],
-            motionVector[1] + viewFocus[1],
-            motionVector[2] + viewFocus[2]);
+                          motionVector[1] + viewFocus[1],
+                          motionVector[2] + viewFocus[2]);
 
     camera->SetPosition(motionVector[0] + viewPoint[0],
-            motionVector[1] + viewPoint[1],
-            motionVector[2] + viewPoint[2]);
+                        motionVector[1] + viewPoint[1],
+                        motionVector[2] + viewPoint[2]);
 
     if (rwi->GetLightFollowCamera())
     {
         this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
     }
-    rwi->Render();
+
+    if (this->getAutoRender())
+    {
+        rwi->Render();
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -234,13 +242,13 @@ void InteractorStyle2DForNegato::Dolly()
         return;
     }
     if( (m_newPickPoint[0] == m_oldPickPoint[0]) &&
-            (m_newPickPoint[1] == m_oldPickPoint[1]) )
+        (m_newPickPoint[1] == m_oldPickPoint[1]) )
     {
         return;
     }
     double *center = this->CurrentRenderer->GetCenter();
-    int dy = m_newPickPoint[1] - m_oldPickPoint[1];
-    double dyf = this->MotionFactor * dy / center[1];
+    int dy         = m_newPickPoint[1] - m_oldPickPoint[1];
+    double dyf     = this->MotionFactor * dy / center[1];
     this->Dolly(pow(1.1, dyf));
 }
 
@@ -272,5 +280,8 @@ void InteractorStyle2DForNegato::Dolly(double factor)
         this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
     }
 
-    this->Interactor->Render();
+    if (this->getAutoRender())
+    {
+        this->Interactor->Render();
+    }
 }
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle3DForNegato.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle3DForNegato.cpp
index 3d0768e..4193064 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle3DForNegato.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/InteractorStyle3DForNegato.cpp
@@ -1,5 +1,5 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
@@ -18,7 +18,6 @@
 
 #include "fwRenderVTK/vtk/InteractorStyle3DForNegato.hpp"
 
-vtkCxxRevisionMacro(InteractorStyle3DForNegato, "$Revision: 1.24 $");
 vtkStandardNewMacro(InteractorStyle3DForNegato);
 
 //------------------------------------------------------------------------------
@@ -31,45 +30,55 @@ InteractorStyle3DForNegato::InteractorStyle3DForNegato() :
 //------------------------------------------------------------------------------
 
 InteractorStyle3DForNegato::~InteractorStyle3DForNegato()
-{}
+{
+}
 
 //------------------------------------------------------------------------------
 
 void InteractorStyle3DForNegato::OnChar()
 {
+    if(this->CurrentRenderer == nullptr)
+    {
+        return;
+    }
+
     vtkRenderWindowInteractor *rwi = this->Interactor;
 
     switch (rwi->GetKeyCode())
     {
-    case 'r' :
-        this->FindPokedRenderer(rwi->GetEventPosition()[0],
-                rwi->GetEventPosition()[1]);
-        this->CurrentRenderer->ResetCamera();
-        rwi->Render();
-        break;
-    case 'f' :
-    case 'F' :
-    {
-        this->AnimState = VTKIS_ANIM_ON;
-        vtkAssemblyPath *path = NULL;
-        this->FindPokedRenderer(rwi->GetEventPosition()[0],
-                rwi->GetEventPosition()[1]);
-        rwi->GetPicker()->Pick(rwi->GetEventPosition()[0],
-                rwi->GetEventPosition()[1],
-                0.0,
-                this->CurrentRenderer);
-        vtkAbstractPropPicker *picker;
-        if ((picker=vtkAbstractPropPicker::SafeDownCast(rwi->GetPicker())))
+        case 'r':
+            this->FindPokedRenderer(rwi->GetEventPosition()[0],
+                                    rwi->GetEventPosition()[1]);
+
+            this->CurrentRenderer->ResetCamera();
+            if (this->getAutoRender())
+            {
+                rwi->Render();
+            }
+            break;
+        case 'f':
+        case 'F':
         {
-            path = picker->GetPath();
+            this->AnimState = VTKIS_ANIM_ON;
+            vtkAssemblyPath *path = NULL;
+            this->FindPokedRenderer(rwi->GetEventPosition()[0],
+                                    rwi->GetEventPosition()[1]);
+            rwi->GetPicker()->Pick(rwi->GetEventPosition()[0],
+                                   rwi->GetEventPosition()[1],
+                                   0.0,
+                                   this->CurrentRenderer);
+            vtkAbstractPropPicker *picker;
+            if ((picker = vtkAbstractPropPicker::SafeDownCast(rwi->GetPicker())))
+            {
+                path = picker->GetPath();
+            }
+            if (path != NULL)
+            {
+                rwi->FlyTo(this->CurrentRenderer, picker->GetPickPosition());
+            }
+            this->AnimState = VTKIS_ANIM_OFF;
         }
-        if (path != NULL)
-        {
-            rwi->FlyTo(this->CurrentRenderer, picker->GetPickPosition());
-        }
-        this->AnimState = VTKIS_ANIM_OFF;
-    }
-    break;
+        break;
 
     }
 }
@@ -82,9 +91,9 @@ void InteractorStyle3DForNegato::OnKeyUp()
 
     switch (rwi->GetKeyCode())
     {
-    case 'q' :
-        OnLeftButtonUp();
-        break;
+        case 'q':
+            OnLeftButtonUp();
+            break;
     }
 }
 
@@ -96,9 +105,9 @@ void InteractorStyle3DForNegato::OnKeyDown()
 
     switch (rwi->GetKeyCode())
     {
-    case 'q' :
-        OnLeftButtonDown();
-        break;
+        case 'q':
+            OnLeftButtonDown();
+            break;
     }
 }
 
@@ -107,7 +116,7 @@ void InteractorStyle3DForNegato::OnKeyDown()
 void InteractorStyle3DForNegato::OnLeftButtonDown()
 {
     this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-            this->Interactor->GetEventPosition()[1]);
+                            this->Interactor->GetEventPosition()[1]);
     if (this->CurrentRenderer == NULL)
     {
         return;
@@ -140,7 +149,7 @@ void InteractorStyle3DForNegato::OnLeftButtonDown()
 void InteractorStyle3DForNegato::OnRightButtonDown()
 {
     this->FindPokedRenderer(this->Interactor->GetEventPosition()[0],
-            this->Interactor->GetEventPosition()[1]);
+                            this->Interactor->GetEventPosition()[1]);
     if (this->CurrentRenderer == NULL)
     {
         return;
@@ -179,29 +188,29 @@ void InteractorStyle3DForNegato::OnMouseMove()
 
     switch (this->State)
     {
-    case VTKIS_ROTATE:
-        this->FindPokedRenderer(x, y);
-        this->Rotate();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    case VTKIS_PAN:
-        this->FindPokedRenderer(x, y);
-        this->Pan();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    case VTKIS_DOLLY:
-        this->FindPokedRenderer(x, y);
-        this->Dolly();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
-
-    case VTKIS_SPIN:
-        this->FindPokedRenderer(x, y);
-        this->Spin();
-        this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
-        break;
+        case VTKIS_ROTATE:
+            this->FindPokedRenderer(x, y);
+            this->Rotate();
+            this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+            break;
+
+        case VTKIS_PAN:
+            this->FindPokedRenderer(x, y);
+            this->Pan();
+            this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+            break;
+
+        case VTKIS_DOLLY:
+            this->FindPokedRenderer(x, y);
+            this->Dolly();
+            this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+            break;
+
+        case VTKIS_SPIN:
+            this->FindPokedRenderer(x, y);
+            this->Spin();
+            this->InvokeEvent(vtkCommand::InteractionEvent, NULL);
+            break;
     }
     m_oldPickPoint[0] = m_newPickPoint[0];
     m_oldPickPoint[1] = m_newPickPoint[1];
@@ -248,7 +257,7 @@ void InteractorStyle3DForNegato::Pan()
 
     // do nothing if mouse is still on the same pos
     if( (m_newPickPoint[0] == m_oldPickPoint[0]) &&
-            (m_newPickPoint[1] == m_oldPickPoint[1]) )
+        (m_newPickPoint[1] == m_oldPickPoint[1]) )
     {
         return;
     }
@@ -262,20 +271,20 @@ void InteractorStyle3DForNegato::Pan()
     vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
     camera->GetFocalPoint(viewFocus);
     this->ComputeWorldToDisplay(viewFocus[0], viewFocus[1], viewFocus[2],
-            viewFocus);
+                                viewFocus);
     focalDepth = viewFocus[2];
 
     this->ComputeDisplayToWorld( m_newPickPoint[0],
-            m_newPickPoint[1],
-            focalDepth,
-            newPickPoint);
+                                 m_newPickPoint[1],
+                                 focalDepth,
+                                 newPickPoint);
 
     // Has to recalc old mouse point since the viewport has moved,
     // so can't move it outside the loop
     this->ComputeDisplayToWorld(m_oldPickPoint[0],
-            m_oldPickPoint[1],
-            focalDepth,
-            oldPickPoint);
+                                m_oldPickPoint[1],
+                                focalDepth,
+                                oldPickPoint);
 
     // Camera motion is reversed
     motionVector[0] = oldPickPoint[0] - newPickPoint[0];
@@ -286,18 +295,22 @@ void InteractorStyle3DForNegato::Pan()
     camera->GetPosition(viewPoint);
 
     camera->SetFocalPoint(motionVector[0] + viewFocus[0],
-            motionVector[1] + viewFocus[1],
-            motionVector[2] + viewFocus[2]);
+                          motionVector[1] + viewFocus[1],
+                          motionVector[2] + viewFocus[2]);
 
     camera->SetPosition(motionVector[0] + viewPoint[0],
-            motionVector[1] + viewPoint[1],
-            motionVector[2] + viewPoint[2]);
+                        motionVector[1] + viewPoint[1],
+                        motionVector[2] + viewPoint[2]);
 
     if (rwi->GetLightFollowCamera())
     {
         this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
     }
-    rwi->Render();
+
+    if (this->getAutoRender())
+    {
+        rwi->Render();
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -309,13 +322,13 @@ void InteractorStyle3DForNegato::Dolly()
         return;
     }
     if( (m_newPickPoint[0] == m_oldPickPoint[0]) &&
-            (m_newPickPoint[1] == m_oldPickPoint[1]) )
+        (m_newPickPoint[1] == m_oldPickPoint[1]) )
     {
         return;
     }
     double *center = this->CurrentRenderer->GetCenter();
-    int dy = m_newPickPoint[1] - m_oldPickPoint[1];
-    double dyf = this->MotionFactor * dy / center[1];
+    int dy         = m_newPickPoint[1] - m_oldPickPoint[1];
+    double dyf     = this->MotionFactor * dy / center[1];
     this->Dolly(pow(1.1, dyf));
 }
 
@@ -347,7 +360,10 @@ void InteractorStyle3DForNegato::Dolly(double factor)
         this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
     }
 
-    this->Interactor->Render();
+    if (this->getAutoRender())
+    {
+        this->Interactor->Render();
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -359,13 +375,13 @@ void InteractorStyle3DForNegato::Rotate()
         return;
     }
     vtkRenderWindowInteractor *rwi = this->Interactor;
-    int dx = m_newPickPoint[0] - m_oldPickPoint[0];
-    int dy = m_newPickPoint[1] - m_oldPickPoint[1];
-    int *size = this->CurrentRenderer->GetRenderWindow()->GetSize();
-    double delta_elevation = -20.0 / size[1];
-    double delta_azimuth = -20.0 / size[0];
-    double rxf = dx * delta_azimuth * this->MotionFactor;
-    double ryf = dy * delta_elevation * this->MotionFactor;
+    int dx                         = m_newPickPoint[0] - m_oldPickPoint[0];
+    int dy                         = m_newPickPoint[1] - m_oldPickPoint[1];
+    int *size                      = this->CurrentRenderer->GetRenderWindow()->GetSize();
+    double delta_elevation         = -20.0 / size[1];
+    double delta_azimuth           = -20.0 / size[0];
+    double rxf                     = dx * delta_azimuth * this->MotionFactor;
+    double ryf                     = dy * delta_elevation * this->MotionFactor;
 
     vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
     camera->Azimuth(rxf);
@@ -380,7 +396,10 @@ void InteractorStyle3DForNegato::Rotate()
         this->CurrentRenderer->UpdateLightsGeometryToFollowCamera();
     }
 
-    rwi->Render();
+    if (this->getAutoRender())
+    {
+        rwi->Render();
+    }
 }
 
 //----------------------------------------------------------------------------
@@ -392,16 +411,19 @@ void InteractorStyle3DForNegato::Spin()
         return;
     }
     vtkRenderWindowInteractor *rwi = this->Interactor;
-    double *center = this->CurrentRenderer->GetCenter();
-    double newAngle =
-            vtkMath::DegreesFromRadians( atan2( m_newPickPoint[1] - center[1],
-                    m_newPickPoint[0] - center[0] ) );
+    double *center                 = this->CurrentRenderer->GetCenter();
+    double newAngle                =
+        vtkMath::DegreesFromRadians( atan2( m_newPickPoint[1] - center[1],
+                                            m_newPickPoint[0] - center[0] ) );
     double oldAngle =
-            vtkMath::DegreesFromRadians( atan2( m_oldPickPoint[1] - center[1],
-                    m_oldPickPoint[0] - center[0] ) );
+        vtkMath::DegreesFromRadians( atan2( m_oldPickPoint[1] - center[1],
+                                            m_oldPickPoint[0] - center[0] ) );
     vtkCamera *camera = this->CurrentRenderer->GetActiveCamera();
     camera->Roll( newAngle - oldAngle );
     camera->OrthogonalizeViewUp();
 
-    rwi->Render();
+    if (this->getAutoRender())
+    {
+        rwi->Render();
+    }
 }
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.cpp
index 1c83fb1..3d66e35 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/MarkedSphereHandleRepresentation.cpp
@@ -1,9 +1,10 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
+#ifndef ANDROID
 
 #include "vtkAssemblyPath.h"
 #include "vtkCellPicker.h"
@@ -31,7 +32,6 @@ namespace fwRenderVTK
 namespace vtk
 {
 
-vtkCxxRevisionMacro(MarkedSphereHandleRepresentation, "$Revision: 0.0 $");
 vtkStandardNewMacro(MarkedSphereHandleRepresentation);
 
 //----------------------------------------------------------------------
@@ -51,7 +51,7 @@ MarkedSphereHandleRepresentation::MarkedSphereHandleRepresentation() : vtkSphere
     MarkerNormals->SetInputConnection( 0, this->CleanPolyData->GetOutputPort(0) );
 
     this->MarkerMapper = vtkPolyDataMapper::New();
-    this->MarkerMapper->SetInput( MarkerNormals->GetOutput() );
+    this->MarkerMapper->SetInputConnection( MarkerNormals->GetOutputPort() );
     MarkerNormals->Delete();
 
     this->Follower = vtkFollower::New();
@@ -69,18 +69,18 @@ MarkedSphereHandleRepresentation::MarkedSphereHandleRepresentation() : vtkSphere
 //----------------------------------------------------------------------
 MarkedSphereHandleRepresentation::~MarkedSphereHandleRepresentation()
 {
-  this->Marker->Delete();
-  this->CleanPolyData->Delete();
-  this->MarkerMapper->Delete();
-  this->Follower->Delete();
-  this->MarkerProperty->Delete();
+    this->Marker->Delete();
+    this->CleanPolyData->Delete();
+    this->MarkerMapper->Delete();
+    this->Follower->Delete();
+    this->MarkerProperty->Delete();
 }
 
 //-------------------------------------------------------------------------
 void MarkedSphereHandleRepresentation::SetWorldPosition(double p[3])
 {
-  this->vtkSphereHandleRepresentation::SetWorldPosition(p);
-  this->Follower->SetPosition(this->GetWorldPosition());// p may have been clamped
+    this->vtkSphereHandleRepresentation::SetWorldPosition(p);
+    this->Follower->SetPosition(this->GetWorldPosition());// p may have been clamped
 }
 
 //----------------------------------------------------------------------
@@ -94,24 +94,24 @@ void MarkedSphereHandleRepresentation::CreateDefaultProperties()
 //----------------------------------------------------------------------
 void MarkedSphereHandleRepresentation::BuildRepresentation()
 {
-  // The net effect is to resize the handle
+    // The net effect is to resize the handle
 //  if ( this->GetMTime() > this->BuildTime ||
 //       (this->Renderer && this->Renderer->GetVTKWindow() &&
 //        this->Renderer->GetVTKWindow()->GetMTime() > this->BuildTime) )
 //  {
-      if ( ! this->Placed )
-      {
-          this->ValidPick = 1;
-          this->Placed = 1;
-      }
-
-      this->SizeBounds();
-      this->Sphere->Update();
-
-      this->Follower->SetCamera( this->GetRenderer()->GetActiveCamera() );
-      this->Marker->SetRadius(this->MarkerRadiusFactor * this->Sphere->GetRadius() );
-      this->Marker->Update();
-      this->BuildTime.Modified();
+    if ( !this->Placed )
+    {
+        this->ValidPick = 1;
+        this->Placed    = 1;
+    }
+
+    this->SizeBounds();
+    this->Sphere->Update();
+
+    this->Follower->SetCamera( this->GetRenderer()->GetActiveCamera() );
+    this->Marker->SetRadius(this->MarkerRadiusFactor * this->Sphere->GetRadius() );
+    this->Marker->Update();
+    this->BuildTime.Modified();
 //  }
 
 }
@@ -119,39 +119,39 @@ void MarkedSphereHandleRepresentation::BuildRepresentation()
 //----------------------------------------------------------------------
 void MarkedSphereHandleRepresentation::GetActors(vtkPropCollection *pc)
 {
-  this->Actor->GetActors(pc);
-  this->Follower->GetActors(pc);
+    this->Actor->GetActors(pc);
+    this->Follower->GetActors(pc);
 }
 
 //----------------------------------------------------------------------
 void MarkedSphereHandleRepresentation::ReleaseGraphicsResources(vtkWindow *win)
 {
-  this->Actor->ReleaseGraphicsResources(win);
-  this->Follower->ReleaseGraphicsResources(win);
+    this->Actor->ReleaseGraphicsResources(win);
+    this->Follower->ReleaseGraphicsResources(win);
 }
 
 //----------------------------------------------------------------------
 int MarkedSphereHandleRepresentation::RenderOpaqueGeometry(vtkViewport *viewport)
 {
-  this->BuildRepresentation();
-  int ret = 0;
-  if (this->GetRenderer()->GetActiveCamera()->GetParallelProjection())
-  {
-      ret = this->Follower->RenderOpaqueGeometry(viewport);
-  }
-  return this->Actor->RenderOpaqueGeometry(viewport) + ret;
+    this->BuildRepresentation();
+    int ret = 0;
+    if (this->GetRenderer()->GetActiveCamera()->GetParallelProjection())
+    {
+        ret = this->Follower->RenderOpaqueGeometry(viewport);
+    }
+    return this->Actor->RenderOpaqueGeometry(viewport) + ret;
 }
 
 //----------------------------------------------------------------------
 int MarkedSphereHandleRepresentation::RenderTranslucentPolygonalGeometry(vtkViewport *viewport)
 {
-  this->BuildRepresentation();
-  int ret = 0;
-  if (this->GetRenderer()->GetActiveCamera()->GetParallelProjection())
-  {
-     ret = this->Follower->RenderTranslucentPolygonalGeometry(viewport);
-  }
-  return this->Actor->RenderTranslucentPolygonalGeometry(viewport) + ret;
+    this->BuildRepresentation();
+    int ret = 0;
+    if (this->GetRenderer()->GetActiveCamera()->GetParallelProjection())
+    {
+        ret = this->Follower->RenderTranslucentPolygonalGeometry(viewport);
+    }
+    return this->Actor->RenderTranslucentPolygonalGeometry(viewport) + ret;
 }
 
 //----------------------------------------------------------------------
@@ -191,3 +191,4 @@ void MarkedSphereHandleRepresentation::PrintSelf(ostream& os, vtkIndent indent)
 
 } // namespace fwRenderVTK
 
+#endif //ANDROID
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkAxesActor.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkAxesActor.cpp
new file mode 100644
index 0000000..586a504
--- /dev/null
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkAxesActor.cpp
@@ -0,0 +1,120 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifndef ANDROID
+
+#include "fwRenderVTK/vtk/fwVtkAxesActor.hpp"
+
+#include <vtkObjectFactory.h>
+#include <vtkActor.h>
+#include <vtkPolyData.h>
+#include <vtkPolyDataMapper.h>
+
+
+vtkStandardNewMacro(fwVtkAxesActor);
+
+//------------------------------------------------------------------------------
+
+fwVtkAxesActor::fwVtkAxesActor() : vtkAxesActor()
+{
+
+}
+
+//------------------------------------------------------------------------------
+
+fwVtkAxesActor::~fwVtkAxesActor()
+{
+
+}
+
+//------------------------------------------------------------------------------
+
+double *fwVtkAxesActor::GetBounds()
+{
+    double bounds[6];
+    int i;
+
+    this->XAxisShaft->GetBounds(this->Bounds);
+
+    this->YAxisShaft->GetBounds(bounds);
+
+    for ( i = 0; i < 3; ++i )
+    {
+        this->Bounds[2*i] =
+            (bounds[2*i] < this->Bounds[2*i]) ? (bounds[2*i]) : (this->Bounds[2*i]);
+
+        this->Bounds[2*i+1] =
+            (bounds[2*i+1] > this->Bounds[2*i+1]) ? (bounds[2*i+1]) : (this->Bounds[2*i+1]);
+    }
+
+    this->ZAxisShaft->GetBounds(bounds);
+    for ( i = 0; i < 3; ++i )
+    {
+        this->Bounds[2*i] =
+            (bounds[2*i] < this->Bounds[2*i]) ? (bounds[2*i]) : (this->Bounds[2*i]);
+
+        this->Bounds[2*i+1] =
+            (bounds[2*i+1] > this->Bounds[2*i+1]) ? (bounds[2*i+1]) : (this->Bounds[2*i+1]);
+    }
+
+    this->XAxisTip->GetBounds(bounds);
+    for ( i = 0; i < 3; ++i )
+    {
+        this->Bounds[2*i] =
+            (bounds[2*i] < this->Bounds[2*i]) ? (bounds[2*i]) : (this->Bounds[2*i]);
+
+        this->Bounds[2*i+1] =
+            (bounds[2*i+1]>this->Bounds[2*i+1]) ? (bounds[2*i+1]) : (this->Bounds[2*i+1]);
+    }
+
+    this->YAxisTip->GetBounds(bounds);
+    for ( i = 0; i < 3; ++i )
+    {
+        this->Bounds[2*i] =
+            (bounds[2*i] < this->Bounds[2*i]) ? (bounds[2*i]) : (this->Bounds[2*i]);
+
+        this->Bounds[2*i+1] =
+            (bounds[2*i+1]>this->Bounds[2*i+1]) ? (bounds[2*i+1]) : (this->Bounds[2*i+1]);
+    }
+
+    this->ZAxisTip->GetBounds(bounds);
+    for ( i = 0; i < 3; ++i )
+    {
+        this->Bounds[2*i] =
+            (bounds[2*i] < this->Bounds[2*i]) ? (bounds[2*i]) : (this->Bounds[2*i]);
+
+        this->Bounds[2*i+1] =
+            (bounds[2*i+1]>this->Bounds[2*i+1]) ? (bounds[2*i+1]) : (this->Bounds[2*i+1]);
+    }
+
+    double dbounds[6];
+    (vtkPolyDataMapper::SafeDownCast(this->YAxisShaft->GetMapper()))->
+    GetInput()->GetBounds( dbounds );
+
+    for ( i = 0; i < 3; ++i )
+    {
+        this->Bounds[2*i] =
+            (dbounds[2*i] < this->Bounds[2*i]) ? (dbounds[2*i]) : (this->Bounds[2*i]);
+
+        this->Bounds[2*i+1] =
+            (dbounds[2*i+1]>this->Bounds[2*i+1]) ? (dbounds[2*i+1]) : (this->Bounds[2*i+1]);
+    }
+
+
+    return this->Bounds;
+}
+
+//------------------------------------------------------------------------------
+
+void fwVtkAxesActor::PrintSelf(std::ostream &os, vtkIndent indent)
+{
+    os << indent << "fwVtkPicker: \n";
+    this->Superclass::PrintSelf(os,indent);
+}
+
+//------------------------------------------------------------------------------
+
+#endif //ANDROID
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkBoxRepresentation.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkBoxRepresentation.cpp
index de8caf2..f25ae82 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkBoxRepresentation.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkBoxRepresentation.cpp
@@ -1,34 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 /*=========================================================================
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Patched version of vtkBoxRepresentation,
    see http://public.kitware.com/pipermail/vtkusers/2010-July/110328.html
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- =========================================================================*/
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   =========================================================================*/
 
 /*=========================================================================
 
-  Program:   Visualization Toolkit
-  Module:    $RCSfile: fwVtkBoxRepresentation.cxx,v $
+   Program:   Visualization Toolkit
+   Module:    $RCSfile: fwVtkBoxRepresentation.cxx,v $
 
-  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-  All rights reserved.
-  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+   All rights reserved.
+   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
      This software is distributed WITHOUT ANY WARRANTY; without even
      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      PURPOSE.  See the above copyright notice for more information.
 
-=========================================================================*/
+   =========================================================================*/
 
 #include <vtkBoxRepresentation.h>
 #include <vtkActor.h>
@@ -56,108 +56,107 @@
 
 #include "fwRenderVTK/vtk/fwVtkBoxRepresentation.hpp"
 
-vtkCxxRevisionMacro(fwVtkBoxRepresentation, "$Revision: 1.9 $");
 vtkStandardNewMacro(fwVtkBoxRepresentation);
 
 //----------------------------------------------------------------------------
 fwVtkBoxRepresentation::fwVtkBoxRepresentation() : vtkBoxRepresentation()
 {
-  // Enable/disable the translation, rotation, and scaling of the widget
-  this->TranslationEnabled = 1;
-  this->RotationEnabled = 1;
-  this->ScalingEnabled = 1;
+    // Enable/disable the translation, rotation, and scaling of the widget
+    this->TranslationEnabled = 1;
+    this->RotationEnabled    = 1;
+    this->ScalingEnabled     = 1;
 }
 
 //----------------------------------------------------------------------
 void fwVtkBoxRepresentation::WidgetInteraction(double e[2])
 {
-  // Convert events to appropriate coordinate systems
-  vtkCamera *camera = this->Renderer->GetActiveCamera();
-  if ( !camera )
+    // Convert events to appropriate coordinate systems
+    vtkCamera* camera = this->Renderer->GetActiveCamera();
+    if ( !camera )
     {
-    return;
+        return;
     }
-  double focalPoint[4], pickPoint[4], prevPickPoint[4];
-  double z, vpn[3];
-  camera->GetViewPlaneNormal(vpn);
+    double focalPoint[4], pickPoint[4], prevPickPoint[4];
+    double z, vpn[3];
+    camera->GetViewPlaneNormal(vpn);
 
-  // Compute the two points defining the motion vector
-  double pos[3];
-  if ( this->LastPicker == this->HexPicker )
+    // Compute the two points defining the motion vector
+    double pos[3];
+    if ( this->LastPicker == this->HexPicker )
     {
-    this->HexPicker->GetPickPosition(pos);
+        this->HexPicker->GetPickPosition(pos);
     }
-  else
+    else
     {
-    this->HandlePicker->GetPickPosition(pos);
+        this->HandlePicker->GetPickPosition(pos);
     }
-  vtkInteractorObserver::ComputeWorldToDisplay(this->Renderer,
-                                               pos[0], pos[1], pos[2],
-                                               focalPoint);
-  z = focalPoint[2];
-  vtkInteractorObserver::ComputeDisplayToWorld(this->Renderer,this->LastEventPosition[0],
-                                               this->LastEventPosition[1], z, prevPickPoint);
-  vtkInteractorObserver::ComputeDisplayToWorld(this->Renderer, e[0], e[1], z, pickPoint);
-
-  // Process the motion
-  if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF0 )
+    vtkInteractorObserver::ComputeWorldToDisplay(this->Renderer,
+                                                 pos[0], pos[1], pos[2],
+                                                 focalPoint);
+    z = focalPoint[2];
+    vtkInteractorObserver::ComputeDisplayToWorld(this->Renderer,this->LastEventPosition[0],
+                                                 this->LastEventPosition[1], z, prevPickPoint);
+    vtkInteractorObserver::ComputeDisplayToWorld(this->Renderer, e[0], e[1], z, pickPoint);
+
+    // Process the motion
+    if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF0 )
     {
-    this->MoveMinusXFace(prevPickPoint,pickPoint);
+        this->MoveMinusXFace(prevPickPoint,pickPoint);
     }
 
-  else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF1 )
+    else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF1 )
     {
-    this->MovePlusXFace(prevPickPoint,pickPoint);
+        this->MovePlusXFace(prevPickPoint,pickPoint);
     }
 
-  else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF2 )
+    else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF2 )
     {
-    this->MoveMinusYFace(prevPickPoint,pickPoint);
+        this->MoveMinusYFace(prevPickPoint,pickPoint);
     }
 
-  else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF3 )
+    else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF3 )
     {
-    this->MovePlusYFace(prevPickPoint,pickPoint);
+        this->MovePlusYFace(prevPickPoint,pickPoint);
     }
 
-  else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF4 )
+    else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF4 )
     {
-    this->MoveMinusZFace(prevPickPoint,pickPoint);
+        this->MoveMinusZFace(prevPickPoint,pickPoint);
     }
 
-  else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF5 )
+    else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::MoveF5 )
     {
-    this->MovePlusZFace(prevPickPoint,pickPoint);
+        this->MovePlusZFace(prevPickPoint,pickPoint);
     }
 
-  else if ( this->TranslationEnabled && this->InteractionState == fwVtkBoxRepresentation::Translating )
+    else if ( this->TranslationEnabled && this->InteractionState == fwVtkBoxRepresentation::Translating )
     {
-    this->Translate(prevPickPoint, pickPoint);
+        this->Translate(prevPickPoint, pickPoint);
     }
 
-  else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::Scaling )
+    else if ( this->ScalingEnabled && this->InteractionState == fwVtkBoxRepresentation::Scaling )
     {
-    this->Scale(prevPickPoint, pickPoint,
-                static_cast<int>(e[0]), static_cast<int>(e[1]));
+        this->Scale(prevPickPoint, pickPoint,
+                    static_cast<int>(e[0]), static_cast<int>(e[1]));
     }
 
-  else if ( this->RotationEnabled && this->InteractionState == fwVtkBoxRepresentation::Rotating )
+    else if ( this->RotationEnabled && this->InteractionState == fwVtkBoxRepresentation::Rotating )
     {
-    this->Rotate(static_cast<int>(e[0]), static_cast<int>(e[1]), prevPickPoint, pickPoint, vpn);
+        this->Rotate(static_cast<int>(e[0]), static_cast<int>(e[1]), prevPickPoint, pickPoint, vpn);
     }
 
-  // Store the start position
-  this->LastEventPosition[0] = e[0];
-  this->LastEventPosition[1] = e[1];
-  this->LastEventPosition[2] = 0.0;
+    // Store the start position
+    this->LastEventPosition[0] = e[0];
+    this->LastEventPosition[1] = e[1];
+    this->LastEventPosition[2] = 0.0;
 }
 
 //----------------------------------------------------------------------------
 void fwVtkBoxRepresentation::PrintSelf(ostream& os, vtkIndent indent)
 {
-  this->Superclass::PrintSelf(os,indent);
+    this->Superclass::PrintSelf(os,indent);
 
-  os << indent << "Translation Enabled: " << (this->TranslationEnabled ? "On\n" : "Off\n");
-  os << indent << "Scaling Enabled: " << (this->ScalingEnabled ? "On\n" : "Off\n");
-  os << indent << "Rotation Enabled: " << (this->RotationEnabled ? "On\n" : "Off\n");
+    os << indent << "Translation Enabled: " << (this->TranslationEnabled ? "On\n" : "Off\n");
+    os << indent << "Scaling Enabled: " << (this->ScalingEnabled ? "On\n" : "Off\n");
+    os << indent << "Rotation Enabled: " << (this->RotationEnabled ? "On\n" : "Off\n");
 }
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkCellPicker.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkCellPicker.cpp
index 89874ad..1dd3e42 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkCellPicker.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkCellPicker.cpp
@@ -1,35 +1,36 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 /*=========================================================================
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    fw version of vtkCellPicked : same a vtk5.4's cellpicker,
    but inherits from fwVtkPicker.
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- =========================================================================*/
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   =========================================================================*/
 
 
 /*=========================================================================
 
-  Program:   Visualization Toolkit
-  Module:    $RCSfile: fwVtkCellPicker.cxx,v $
+   Program:   Visualization Toolkit
+   Module:    $RCSfile: fwVtkCellPicker.cxx,v $
 
-  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-  All rights reserved.
-  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+   All rights reserved.
+   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
      This software is distributed WITHOUT ANY WARRANTY; without even
      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      PURPOSE.  See the above copyright notice for more information.
 
-=========================================================================*/
+   =========================================================================*/
+
 #include <boost/assign.hpp>
 
 #include <vtkGenericCell.h>
@@ -41,10 +42,8 @@
 #include <vtkAbstractVolumeMapper.h>
 #include <vtkInstantiator.h>
 
-#include <fwVtkIO/vtk.hpp>
 #include "fwRenderVTK/vtk/fwVtkCellPicker.hpp"
 
-vtkCxxRevisionMacro(fwVtkCellPicker, "$Revision: 1.38 $");
 vtkStandardNewMacro(fwVtkCellPicker);
 
 
@@ -53,8 +52,8 @@ vtkStandardNewMacro(fwVtkCellPicker);
 fwVtkCellPicker::fwVtkCellPicker()
 {
     this->CellId = -1;
-    this->SubId = -1;
-    for (int i=0; i<3; i++)
+    this->SubId  = -1;
+    for (int i = 0; i<3; i++)
     {
         this->PCoords[i] = 0.0;
     }
@@ -71,9 +70,9 @@ fwVtkCellPicker::~fwVtkCellPicker()
 //------------------------------------------------------------------------------
 
 double fwVtkCellPicker::IntersectWithLine(double p1[3], double p2[3], double tol,
-                                       vtkAssemblyPath *path,
-                                       vtkProp3D *prop3D,
-                                       vtkAbstractMapper3D *m)
+                                          vtkAssemblyPath *path,
+                                          vtkProp3D *prop3D,
+                                          vtkAbstractMapper3D *m)
 {
     vtkIdType numCells, cellId, minCellId;
     int i, minSubId, subId;
@@ -83,11 +82,11 @@ double fwVtkCellPicker::IntersectWithLine(double p1[3], double p2[3], double tol
     vtkAbstractVolumeMapper *volumeMapper;
 
     // Get the underlying dataset
-    if ( (mapper=vtkMapper::SafeDownCast(m)) != NULL )
+    if ( (mapper = vtkMapper::SafeDownCast(m)) != NULL )
     {
         input = mapper->GetInput();
     }
-    else if ( (volumeMapper=vtkAbstractVolumeMapper::SafeDownCast(m)) != NULL )
+    else if ( (volumeMapper = vtkAbstractVolumeMapper::SafeDownCast(m)) != NULL )
     {
         input = volumeMapper->GetDataSetInput();
     }
@@ -109,28 +108,28 @@ double fwVtkCellPicker::IntersectWithLine(double p1[3], double p2[3], double tol
     // breaks ties in a reasonable way when cells are the same distance
     // from the eye (like cells lying on a 2D plane).
     //
-    minCellId = -1;
-    minSubId = -1;
+    minCellId  = -1;
+    minSubId   = -1;
     pcoords[0] = pcoords[1] = pcoords[2] = 0;
-    double pDistMin=VTK_DOUBLE_MAX, pDist;
-    for (tMin=VTK_DOUBLE_MAX,cellId=0; cellId<numCells; cellId++)
+    double pDistMin = VTK_DOUBLE_MAX, pDist;
+    for (tMin = VTK_DOUBLE_MAX,cellId = 0; cellId<numCells; cellId++)
     {
         input->GetCell(cellId, this->Cell);
 
         if ( this->Cell->IntersectWithLine(p1, p2, tol, t, x, pcoords, subId)
-                && t <= (tMin+this->Tolerance) )
+             && t <= (tMin+this->Tolerance) )
         {
             pDist = this->Cell->GetParametricDistance(pcoords);
             if ( pDist < pDistMin || (pDist == pDistMin && t < tMin) )
             {
                 minCellId = cellId;
-                minSubId = subId;
-                for (i=0; i<3; i++)
+                minSubId  = subId;
+                for (i = 0; i<3; i++)
                 {
-                    minXYZ[i] = x[i];
+                    minXYZ[i]     = x[i];
                     minPcoords[i] = pcoords[i];
                 }
-                tMin = t;
+                tMin     = t;
                 pDistMin = pDist;
             }//if minimum, maximum
         }//if a close cell
@@ -141,8 +140,8 @@ double fwVtkCellPicker::IntersectWithLine(double p1[3], double p2[3], double tol
     {
         this->MarkPicked(path, prop3D, m, tMin, minXYZ);
         this->CellId = minCellId;
-        this->SubId = minSubId;
-        for (i=0; i<3; i++)
+        this->SubId  = minSubId;
+        for (i = 0; i<3; i++)
         {
             this->PCoords[i] = minPcoords[i];
         }
@@ -156,8 +155,8 @@ double fwVtkCellPicker::IntersectWithLine(double p1[3], double p2[3], double tol
 void fwVtkCellPicker::Initialize()
 {
     this->CellId = (-1);
-    this->SubId = (-1);
-    for (int i=0; i<3; i++)
+    this->SubId  = (-1);
+    for (int i = 0; i<3; i++)
     {
         this->PCoords[i] = 0.0;
     }
@@ -173,25 +172,11 @@ void fwVtkCellPicker::PrintSelf(ostream& os, vtkIndent indent)
     os << indent << "Cell Id: " << this->CellId << "\n";
     os << indent << "SubId: " << this->SubId << "\n";
     os << indent << "PCoords: (" << this->PCoords[0] << ", "
-            << this->PCoords[1] << ", " << this->PCoords[2] << ")\n";
+       << this->PCoords[1] << ", " << this->PCoords[2] << ")\n";
 }
 
 //------------------------------------------------------------------------------
 
-fwVtkCellPicker::PickedCellType fwVtkCellPicker::GetPickedCellIds( double p1[3], double p2[3], ::fwData::TriangularMesh::sptr mesh)
-{
-    PickedCellType res;
-
-    vtkPolyData *polydata = fwVtkIO::toVTKMesh(mesh);
-
-    res = this->GetPickedCellIds(p1, p2, polydata);
-
-    polydata->Delete();
-
-    return res;
-}
-
-
 fwVtkCellPicker::PickedCellType fwVtkCellPicker::GetPickedCellIds( double p1[3], double p2[3], vtkPolyData *polydata)
 {
     PickedCellType res;
@@ -230,12 +215,10 @@ fwVtkCellPicker::PickedCellType fwVtkCellPicker::GetPickedCellIds( double p1[3],
         }
 
 
-        boost::assign::push_back(res).range( this->GetPickedCellIds(p1, p3a, polydata) );
-        boost::assign::push_back(res).range( this->GetPickedCellIds(p3b, p2, polydata) );
+        ::boost::assign::push_back(res).range( this->GetPickedCellIds(p1, p3a, polydata) );
+        ::boost::assign::push_back(res).range( this->GetPickedCellIds(p3b, p2, polydata) );
 
     }
 
     return res;
 }
-
-
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkPicker.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkPicker.cpp
index e7dd3b5..e14cc71 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkPicker.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkPicker.cpp
@@ -1,34 +1,34 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2012.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
 
 /*=========================================================================
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    Patched version of vtkPicker,
    see http://www.vtk.org/doc/release/5.4/html/a00996.html
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- =========================================================================*/
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+   =========================================================================*/
 
 /*=========================================================================
 
-  Program:   Visualization Toolkit
-  Module:    $RCSfile: fwVtkPicker.cxx,v $
+   Program:   Visualization Toolkit
+   Module:    $RCSfile: fwVtkPicker.cxx,v $
 
-  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
-  All rights reserved.
-  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
+   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
+   All rights reserved.
+   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
 
      This software is distributed WITHOUT ANY WARRANTY; without even
      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
      PURPOSE.  See the above copyright notice for more information.
 
-=========================================================================*/
+   =========================================================================*/
 
 
 #include <vtkAbstractVolumeMapper.h>
@@ -57,7 +57,6 @@
 
 #include "fwRenderVTK/vtk/fwVtkPicker.hpp"
 
-vtkCxxRevisionMacro(fwVtkPicker, "$Revision: 1.95 $");
 vtkStandardNewMacro(fwVtkPicker);
 
 // Construct object with initial tolerance of 1/40th of window. There are no
@@ -72,364 +71,364 @@ fwVtkPicker::~fwVtkPicker()
 }
 
 
-// Perform pick operation with selection point provided. Normally the 
+// Perform pick operation with selection point provided. Normally the
 // first two values for the selection point are x-y pixel coordinate, and
 // the third value is =0. Return non-zero if something was successfully picked.
 int fwVtkPicker::Pick(double selectionX, double selectionY, double selectionZ,
-                    vtkRenderer *renderer)
+                      vtkRenderer *renderer)
 {
-  int i;
-  vtkProp *prop;
-  vtkCamera *camera;
-  vtkAbstractMapper3D *mapper = NULL;
-  double p1World[4], p2World[4], p1Mapper[4], p2Mapper[4];
-  int picked=0;
-  int *winSize;
-  double x, y, t;
-  double *viewport;
-  double cameraPos[4], cameraFP[4];
-  double *displayCoords, *worldCoords;
-  double *clipRange;
-  double ray[3], rayLength;
-  int pickable;
-  int LODId;
-  double windowLowerLeft[4], windowUpperRight[4];
-  double bounds[6], tol;
-  double tF, tB;
-  double hitPosition[3];
-  double cameraDOP[3];
-  
-  //  Initialize picking process
-  this->Initialize();
-  this->Renderer = renderer;
-  this->SelectionPoint[0] = selectionX;
-  this->SelectionPoint[1] = selectionY;
-  this->SelectionPoint[2] = selectionZ;
-
-  // Invoke start pick method if defined
-  this->InvokeEvent(vtkCommand::StartPickEvent,NULL);
-
-  if ( renderer == NULL )
+    int i;
+    vtkProp *prop;
+    vtkCamera *camera;
+    vtkAbstractMapper3D *mapper = NULL;
+    double p1World[4], p2World[4], p1Mapper[4], p2Mapper[4];
+    int picked = 0;
+    int *winSize;
+    double x, y, t;
+    double *viewport;
+    double cameraPos[4], cameraFP[4];
+    double *displayCoords, *worldCoords;
+    double *clipRange;
+    double ray[3], rayLength;
+    int pickable;
+    int LODId;
+    double windowLowerLeft[4], windowUpperRight[4];
+    double bounds[6], tol;
+    double tF, tB;
+    double hitPosition[3];
+    double cameraDOP[3];
+
+    //  Initialize picking process
+    this->Initialize();
+    this->Renderer          = renderer;
+    this->SelectionPoint[0] = selectionX;
+    this->SelectionPoint[1] = selectionY;
+    this->SelectionPoint[2] = selectionZ;
+
+    // Invoke start pick method if defined
+    this->InvokeEvent(vtkCommand::StartPickEvent,NULL);
+
+    if ( renderer == NULL )
     {
-    vtkErrorMacro(<<"Must specify renderer!");
-    return 0;
+        vtkErrorMacro(<<"Must specify renderer!");
+        return 0;
     }
 
-  // Get camera focal point and position. Convert to display (screen) 
-  // coordinates. We need a depth value for z-buffer.
-  //
-  camera = renderer->GetActiveCamera();
-  camera->GetPosition(cameraPos);
-  cameraPos[3] = 1.0;
-  camera->GetFocalPoint(cameraFP);
-  cameraFP[3] = 1.0;
-
-  renderer->SetWorldPoint(cameraFP[0],cameraFP[1],cameraFP[2],cameraFP[3]);
-  renderer->WorldToDisplay();
-  displayCoords = renderer->GetDisplayPoint();
-  selectionZ = displayCoords[2];
-
-  // Convert the selection point into world coordinates.
-  //
-  renderer->SetDisplayPoint(selectionX, selectionY, selectionZ);
-  renderer->DisplayToWorld();
-  worldCoords = renderer->GetWorldPoint();
-  if ( worldCoords[3] == 0.0 )
+    // Get camera focal point and position. Convert to display (screen)
+    // coordinates. We need a depth value for z-buffer.
+    //
+    camera = renderer->GetActiveCamera();
+    camera->GetPosition(cameraPos);
+    cameraPos[3] = 1.0;
+    camera->GetFocalPoint(cameraFP);
+    cameraFP[3] = 1.0;
+
+    renderer->SetWorldPoint(cameraFP[0],cameraFP[1],cameraFP[2],cameraFP[3]);
+    renderer->WorldToDisplay();
+    displayCoords = renderer->GetDisplayPoint();
+    selectionZ    = displayCoords[2];
+
+    // Convert the selection point into world coordinates.
+    //
+    renderer->SetDisplayPoint(selectionX, selectionY, selectionZ);
+    renderer->DisplayToWorld();
+    worldCoords = renderer->GetWorldPoint();
+    if ( worldCoords[3] == 0.0 )
     {
-    vtkErrorMacro(<<"Bad homogeneous coordinates");
-    return 0;
+        vtkErrorMacro(<<"Bad homogeneous coordinates");
+        return 0;
     }
-  for (i=0; i < 3; i++) 
+    for (i = 0; i < 3; i++)
     {
-    this->PickPosition[i] = worldCoords[i] / worldCoords[3];
+        this->PickPosition[i] = worldCoords[i] / worldCoords[3];
     }
-  
-  //  Compute the ray endpoints.  The ray is along the line running from
-  //  the camera position to the selection point, starting where this line
-  //  intersects the front clipping plane, and terminating where this
-  //  line intersects the back clipping plane.
-  for (i=0; i<3; i++)
+
+    //  Compute the ray endpoints.  The ray is along the line running from
+    //  the camera position to the selection point, starting where this line
+    //  intersects the front clipping plane, and terminating where this
+    //  line intersects the back clipping plane.
+    for (i = 0; i<3; i++)
     {
-    ray[i] = this->PickPosition[i] - cameraPos[i];
+        ray[i] = this->PickPosition[i] - cameraPos[i];
     }
-  for (i=0; i<3; i++)
+    for (i = 0; i<3; i++)
     {
-    cameraDOP[i] = cameraFP[i] - cameraPos[i];
+        cameraDOP[i] = cameraFP[i] - cameraPos[i];
     }
 
-  vtkMath::Normalize(cameraDOP);
+    vtkMath::Normalize(cameraDOP);
 
-  if (( rayLength = vtkMath::Dot(cameraDOP,ray)) == 0.0 ) 
+    if (( rayLength = vtkMath::Dot(cameraDOP,ray)) == 0.0 )
     {
-    vtkWarningMacro("Cannot process points");
-    return 0;
-    } 
+        vtkWarningMacro("Cannot process points");
+        return 0;
+    }
 
-  clipRange = camera->GetClippingRange();
+    clipRange = camera->GetClippingRange();
 
-  if ( camera->GetParallelProjection() )
+    if ( camera->GetParallelProjection() )
     {
-    tF = clipRange[0] - rayLength;
-    tB = clipRange[1] - rayLength;
-    for (i=0; i<3; i++) 
-      {
-      p1World[i] = this->PickPosition[i] + tF*cameraDOP[i];
-      p2World[i] = this->PickPosition[i] + tB*cameraDOP[i];
-      }
+        tF = clipRange[0] - rayLength;
+        tB = clipRange[1] - rayLength;
+        for (i = 0; i<3; i++)
+        {
+            p1World[i] = this->PickPosition[i] + tF*cameraDOP[i];
+            p2World[i] = this->PickPosition[i] + tB*cameraDOP[i];
+        }
     }
-  else
+    else
     {
-    tF = clipRange[0] / rayLength;
-    tB = clipRange[1] / rayLength;
-    for (i=0; i<3; i++) 
-      {
-      p1World[i] = cameraPos[i] + tF*ray[i];
-      p2World[i] = cameraPos[i] + tB*ray[i];
-      }
+        tF = clipRange[0] / rayLength;
+        tB = clipRange[1] / rayLength;
+        for (i = 0; i<3; i++)
+        {
+            p1World[i] = cameraPos[i] + tF*ray[i];
+            p2World[i] = cameraPos[i] + tB*ray[i];
+        }
     }
-  p1World[3] = p2World[3] = 1.0;
-
-  // Compute the tolerance in world coordinates.  Do this by
-  // determining the world coordinates of the diagonal points of the
-  // window, computing the width of the window in world coordinates, and 
-  // multiplying by the tolerance.
-  //
-  viewport = renderer->GetViewport();
-  winSize = renderer->GetRenderWindow()->GetSize();
-  x = winSize[0] * viewport[0];
-  y = winSize[1] * viewport[1];
-  renderer->SetDisplayPoint(x, y, selectionZ);
-  renderer->DisplayToWorld();
-  renderer->GetWorldPoint(windowLowerLeft);
-
-  x = winSize[0] * viewport[2];
-  y = winSize[1] * viewport[3];
-  renderer->SetDisplayPoint(x, y, selectionZ);
-  renderer->DisplayToWorld();
-  renderer->GetWorldPoint(windowUpperRight);
-
-  for (tol=0.0,i=0; i<3; i++) 
+    p1World[3] = p2World[3] = 1.0;
+
+    // Compute the tolerance in world coordinates.  Do this by
+    // determining the world coordinates of the diagonal points of the
+    // window, computing the width of the window in world coordinates, and
+    // multiplying by the tolerance.
+    //
+    viewport = renderer->GetViewport();
+    winSize  = renderer->GetRenderWindow()->GetSize();
+    x        = winSize[0] * viewport[0];
+    y        = winSize[1] * viewport[1];
+    renderer->SetDisplayPoint(x, y, selectionZ);
+    renderer->DisplayToWorld();
+    renderer->GetWorldPoint(windowLowerLeft);
+
+    x = winSize[0] * viewport[2];
+    y = winSize[1] * viewport[3];
+    renderer->SetDisplayPoint(x, y, selectionZ);
+    renderer->DisplayToWorld();
+    renderer->GetWorldPoint(windowUpperRight);
+
+    for (tol = 0.0,i = 0; i<3; i++)
     {
-    tol += (windowUpperRight[i] - windowLowerLeft[i]) *
-      (windowUpperRight[i] - windowLowerLeft[i]);
+        tol += (windowUpperRight[i] - windowLowerLeft[i]) *
+               (windowUpperRight[i] - windowLowerLeft[i]);
     }
-  
-  tol = sqrt (tol) * this->Tolerance;
-
-  //  Loop over all props.  Transform ray (defined from position of
-  //  camera to selection point) into coordinates of mapper (not
-  //  transformed to actors coordinates!  Reduces overall computation!!!).
-  //  Note that only vtkProp3D's can be picked by fwVtkPicker.
-  //
-  vtkPropCollection *props;
-  vtkProp *propCandidate;
-  if ( this->PickFromList ) 
+
+    tol = sqrt (tol) * this->Tolerance;
+
+    //  Loop over all props.  Transform ray (defined from position of
+    //  camera to selection point) into coordinates of mapper (not
+    //  transformed to actors coordinates!  Reduces overall computation!!!).
+    //  Note that only vtkProp3D's can be picked by fwVtkPicker.
+    //
+    vtkPropCollection *props;
+    vtkProp *propCandidate;
+    if ( this->PickFromList )
     {
-    props = this->GetPickList();
+        props = this->GetPickList();
     }
-  else 
+    else
     {
-    props = renderer->GetViewProps();
+        props = renderer->GetViewProps();
     }
 
-  vtkActor *actor;
-  vtkLODProp3D *prop3D;
-  vtkVolume *volume;
-  vtkImageActor *imageActor = 0;
-  vtkAssemblyPath *path;
-  vtkProperty *tempProperty;
-  this->Transform->PostMultiply();
-  vtkCollectionSimpleIterator pit;
-  double scale[3];
-  for ( props->InitTraversal(pit); (prop=props->GetNextProp(pit)); )
+    vtkActor *actor;
+    vtkLODProp3D *prop3D;
+    vtkVolume *volume;
+    vtkImageActor *imageActor = 0;
+    vtkAssemblyPath *path;
+    vtkProperty *tempProperty;
+    this->Transform->PostMultiply();
+    vtkCollectionSimpleIterator pit;
+    double scale[3];
+    for ( props->InitTraversal(pit); (prop = props->GetNextProp(pit)); )
     {
-    for ( prop->InitPathTraversal(); (path=prop->GetNextPath()); )
-      {
-      pickable = 0;
-      actor = NULL;
-      propCandidate = path->GetLastNode()->GetViewProp();
-      if ( propCandidate->GetPickable() && propCandidate->GetVisibility() )
+        for ( prop->InitPathTraversal(); (path = prop->GetNextPath()); )
         {
-        pickable = 1;
-        if ( (actor=vtkActor::SafeDownCast(propCandidate)) != NULL )
-          {
-          mapper = actor->GetMapper();
-          if ( actor->GetProperty()->GetOpacity() <= 0.0 )
-            {
-            pickable = 0;
-            }
-          }
-        else if ( (prop3D=vtkLODProp3D::SafeDownCast(propCandidate)) != NULL )
-          {
-          LODId = prop3D->GetPickLODID();
-          mapper = prop3D->GetLODMapper(LODId);
-
-          // if the mapper is a vtkMapper (as opposed to a vtkVolumeMapper), 
-          // then check the transparency to see if the object is pickable
-          if ( vtkMapper::SafeDownCast(mapper) != NULL)
+            pickable      = 0;
+            actor         = NULL;
+            propCandidate = path->GetLastNode()->GetViewProp();
+            if ( propCandidate->GetPickable() && propCandidate->GetVisibility() )
             {
-            prop3D->GetLODProperty(LODId, &tempProperty);
-            if ( tempProperty->GetOpacity() <= 0.0 )
-              {
-              pickable = 0;
-              }
+                pickable = 1;
+                if ( (actor = vtkActor::SafeDownCast(propCandidate)) != NULL )
+                {
+                    mapper = actor->GetMapper();
+                    if ( actor->GetProperty()->GetOpacity() <= 0.0 )
+                    {
+                        pickable = 0;
+                    }
+                }
+                else if ( (prop3D = vtkLODProp3D::SafeDownCast(propCandidate)) != NULL )
+                {
+                    LODId  = prop3D->GetPickLODID();
+                    mapper = prop3D->GetLODMapper(LODId);
+
+                    // if the mapper is a vtkMapper (as opposed to a vtkVolumeMapper),
+                    // then check the transparency to see if the object is pickable
+                    if ( vtkMapper::SafeDownCast(mapper) != NULL)
+                    {
+                        prop3D->GetLODProperty(LODId, &tempProperty);
+                        if ( tempProperty->GetOpacity() <= 0.0 )
+                        {
+                            pickable = 0;
+                        }
+                    }
+                }
+                else if ( (volume = vtkVolume::SafeDownCast(propCandidate)) != NULL )
+                {
+                    mapper = volume->GetMapper();
+                }
+                else if ( (imageActor = vtkImageActor::SafeDownCast(propCandidate)) )
+                {
+                    mapper = 0;
+                }
+                else
+                {
+                    pickable = 0; //only vtkProp3D's (actors and volumes) can be picked
+                }
             }
-          }
-        else if ( (volume=vtkVolume::SafeDownCast(propCandidate)) != NULL )
-          {
-          mapper = volume->GetMapper();
-          }
-        else if ( (imageActor=vtkImageActor::SafeDownCast(propCandidate)) )
-          {
-          mapper = 0;
-          }
-        else 
-          {
-          pickable = 0; //only vtkProp3D's (actors and volumes) can be picked
-          }
-        }
 
-      //  If actor can be picked, get its composite matrix, invert it, and
-      //  use the inverted matrix to transform the ray points into mapper
-      //  coordinates. 
-      if ( pickable  &&  mapper != NULL )
-        {
-        vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
-        if (lastMatrix == NULL)
-          {
-          vtkErrorMacro (<< "Pick: Null matrix.");
-          return 0;
-          }
-        this->Transform->SetMatrix(lastMatrix);
-        this->Transform->Push();
-        this->Transform->Inverse();
-        this->Transform->GetScale(scale); //need to scale the tolerance
-
-        this->Transform->TransformPoint(p1World,p1Mapper);
-        this->Transform->TransformPoint(p2World,p2Mapper);
-
-        for (i=0; i<3; i++) 
-          {
-          ray[i] = p2Mapper[i] - p1Mapper[i];
-          }
-
-        this->Transform->Pop();
-
-        //  Have the ray endpoints in mapper space, now need to compare this
-        //  with the mapper bounds to see whether intersection is possible.
-        //
-        //  Get the bounding box of the modeller.  Note that the tolerance is
-        //  added to the bounding box to make sure things on the edge of the
-        //  bounding box are picked correctly.
-        mapper->GetBounds(bounds);
-        bounds[0] -= tol; bounds[1] += tol; 
-        bounds[2] -= tol; bounds[3] += tol; 
-        bounds[4] -= tol; bounds[5] += tol; 
-        if ( vtkBox::IntersectBox(bounds, p1Mapper, 
-                                  ray, hitPosition, t) )
-          {
-          t = this->IntersectWithLine(p1Mapper, p2Mapper, 
-                                      tol*0.333*(scale[0]+scale[1]+scale[2]), path, 
-                                      static_cast<vtkProp3D *>(propCandidate), mapper);
-          if ( t < VTK_DOUBLE_MAX )
+            //  If actor can be picked, get its composite matrix, invert it, and
+            //  use the inverted matrix to transform the ray points into mapper
+            //  coordinates.
+            if ( pickable  &&  mapper != NULL )
             {
-            picked = 1;
-            if ( ! this->Prop3Ds->IsItemPresent(prop) )
-              {
-              this->Prop3Ds->AddItem(static_cast<vtkProp3D *>(prop));
-              }
-            this->PickedPositions->InsertNextPoint
-              ((1.0 - t)*p1World[0] + t*p2World[0],
-               (1.0 - t)*p1World[1] + t*p2World[1],
-               (1.0 - t)*p1World[2] + t*p2World[2]);
-
-            // backwards compatibility: also add to this->Actors
-            if (actor)
-              {
-              this->Actors->AddItem(actor);
-              }
+                vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
+                if (lastMatrix == NULL)
+                {
+                    vtkErrorMacro (<< "Pick: Null matrix.");
+                    return 0;
+                }
+                this->Transform->SetMatrix(lastMatrix);
+                this->Transform->Push();
+                this->Transform->Inverse();
+                this->Transform->GetScale(scale); //need to scale the tolerance
+
+                this->Transform->TransformPoint(p1World,p1Mapper);
+                this->Transform->TransformPoint(p2World,p2Mapper);
+
+                for (i = 0; i<3; i++)
+                {
+                    ray[i] = p2Mapper[i] - p1Mapper[i];
+                }
+
+                this->Transform->Pop();
+
+                //  Have the ray endpoints in mapper space, now need to compare this
+                //  with the mapper bounds to see whether intersection is possible.
+                //
+                //  Get the bounding box of the modeller.  Note that the tolerance is
+                //  added to the bounding box to make sure things on the edge of the
+                //  bounding box are picked correctly.
+                mapper->GetBounds(bounds);
+                bounds[0] -= tol; bounds[1] += tol;
+                bounds[2] -= tol; bounds[3] += tol;
+                bounds[4] -= tol; bounds[5] += tol;
+                if ( vtkBox::IntersectBox(bounds, p1Mapper,
+                                          ray, hitPosition, t) )
+                {
+                    t = this->IntersectWithLine(p1Mapper, p2Mapper,
+                                                tol*0.333*(scale[0]+scale[1]+scale[2]), path,
+                                                static_cast<vtkProp3D *>(propCandidate), mapper);
+                    if ( t < VTK_DOUBLE_MAX )
+                    {
+                        picked = 1;
+                        if ( !this->Prop3Ds->IsItemPresent(prop) )
+                        {
+                            this->Prop3Ds->AddItem(static_cast<vtkProp3D *>(prop));
+                        }
+                        this->PickedPositions->InsertNextPoint
+                            ((1.0 - t)*p1World[0] + t*p2World[0],
+                            (1.0 - t)*p1World[1] + t*p2World[1],
+                            (1.0 - t)*p1World[2] + t*p2World[2]);
+
+                        // backwards compatibility: also add to this->Actors
+                        if (actor)
+                        {
+                            this->Actors->AddItem(actor);
+                        }
+                    }
+                }
             }
-          }
-        }
-      else if ( pickable && imageActor )
-        { // special case for imageActor, which has no mapper
-        vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
-        if (lastMatrix == NULL)
-          {
-          vtkErrorMacro (<< "Pick: Null matrix.");
-          return 0;
-          }
-        this->Transform->SetMatrix(lastMatrix);
-        this->Transform->Push();
-        this->Transform->Inverse();
-
-        this->Transform->TransformPoint(p1World,p1Mapper);
-        this->Transform->TransformPoint(p2World,p2Mapper);
-
-        this->Transform->Pop();
-
-        //  Have the ray endpoints in data space, now need to compare this
-        //  with the displayed image bounds.
-        imageActor->GetDisplayBounds(bounds);
-
-        t = VTK_DOUBLE_MAX;
-
-        for (i = 0; i < 3; i++)
-          {
-          if (bounds[2*i] == bounds[2*i+1] && p2Mapper[i] != p1Mapper[i])
-            {
+            else if ( pickable && imageActor )
+            { // special case for imageActor, which has no mapper
+                vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
+                if (lastMatrix == NULL)
+                {
+                    vtkErrorMacro (<< "Pick: Null matrix.");
+                    return 0;
+                }
+                this->Transform->SetMatrix(lastMatrix);
+                this->Transform->Push();
+                this->Transform->Inverse();
+
+                this->Transform->TransformPoint(p1World,p1Mapper);
+                this->Transform->TransformPoint(p2World,p2Mapper);
+
+                this->Transform->Pop();
+
+                //  Have the ray endpoints in data space, now need to compare this
+                //  with the displayed image bounds.
+                imageActor->GetDisplayBounds(bounds);
+
+                t = VTK_DOUBLE_MAX;
+
+                for (i = 0; i < 3; i++)
+                {
+                    if (bounds[2*i] == bounds[2*i+1] && p2Mapper[i] != p1Mapper[i])
+                    {
 //            t = (p2World[i] - bounds[2*i])/(p2Mapper[i] - p1Mapper[i]);
-            t = (p2Mapper[i] - bounds[2*i])/(p2Mapper[i] - p1Mapper[i]);
-            break;
-            }
-          }
+                        t = (p2Mapper[i] - bounds[2*i])/(p2Mapper[i] - p1Mapper[i]);
+                        break;
+                    }
+                }
 
-        if (t < VTK_DOUBLE_MAX)
-          {
+                if (t < VTK_DOUBLE_MAX)
+                {
 //          hitPosition[0] = (1.0 - t)*p1Mapper[0] + t*p2Mapper[0];
 //          hitPosition[1] = (1.0 - t)*p1Mapper[1] + t*p2Mapper[1];
 //          hitPosition[2] = (1.0 - t)*p1Mapper[2] + t*p2Mapper[2];
-            hitPosition[0] = t*p1Mapper[0] + (1.0 - t)*p2Mapper[0];
-            hitPosition[1] = t*p1Mapper[1] + (1.0 - t)*p2Mapper[1];
-            hitPosition[2] = t*p1Mapper[2] + (1.0 - t)*p2Mapper[2];
-          if ((bounds[0] == bounds[1] || (hitPosition[0] >= bounds[0]-tol &&
-                                          hitPosition[0] <= bounds[1]+tol)) &&
-              (bounds[2] == bounds[3] || (hitPosition[1] >= bounds[2]-tol &&
-                                          hitPosition[1] <= bounds[3]+tol)) &&
-              (bounds[4] == bounds[5] || (hitPosition[2] >= bounds[4]-tol &&
-                                          hitPosition[2] <= bounds[5]+tol)))
-            {
-            picked = 1;
-
-            // the following code is handled in MarkPicked for other Prop3Ds
-            this->Mapper = mapper; // mapper is null
-            this->DataSet = imageActor->GetInput();
-            this->MapperPosition[0] = hitPosition[0];
-            this->MapperPosition[1] = hitPosition[1];
-            this->MapperPosition[2] = hitPosition[2];
-            this->Transform->TransformPoint(hitPosition,this->PickPosition);
-            imageActor->Pick();
-            this->InvokeEvent(vtkCommand::PickEvent,NULL);
-
-            this->Prop3Ds->AddItem(imageActor);
+                    hitPosition[0] = t*p1Mapper[0] + (1.0 - t)*p2Mapper[0];
+                    hitPosition[1] = t*p1Mapper[1] + (1.0 - t)*p2Mapper[1];
+                    hitPosition[2] = t*p1Mapper[2] + (1.0 - t)*p2Mapper[2];
+                    if ((bounds[0] == bounds[1] || (hitPosition[0] >= bounds[0]-tol &&
+                                                    hitPosition[0] <= bounds[1]+tol)) &&
+                        (bounds[2] == bounds[3] || (hitPosition[1] >= bounds[2]-tol &&
+                                                    hitPosition[1] <= bounds[3]+tol)) &&
+                        (bounds[4] == bounds[5] || (hitPosition[2] >= bounds[4]-tol &&
+                                                    hitPosition[2] <= bounds[5]+tol)))
+                    {
+                        picked = 1;
+
+                        // the following code is handled in MarkPicked for other Prop3Ds
+                        this->Mapper            = mapper; // mapper is null
+                        this->DataSet           = imageActor->GetInput();
+                        this->MapperPosition[0] = hitPosition[0];
+                        this->MapperPosition[1] = hitPosition[1];
+                        this->MapperPosition[2] = hitPosition[2];
+                        this->Transform->TransformPoint(hitPosition,this->PickPosition);
+                        imageActor->Pick();
+                        this->InvokeEvent(vtkCommand::PickEvent,NULL);
+
+                        this->Prop3Ds->AddItem(imageActor);
 //            this->PickedPositions->InsertNextPoint
 //              ((1.0 - t)*p1World[0] + t*p2World[0],
 //               (1.0 - t)*p1World[1] + t*p2World[1],
 //               (1.0 - t)*p1World[2] + t*p2World[2]);
-            this->PickedPositions->InsertNextPoint
-                (t*p1World[0] + (1.0 - t)*p2World[0],
-                 t*p1World[1] + (1.0 - t)*p2World[1],
-                 t*p1World[2] + (1.0 - t)*p2World[2]);
-            }
-          }
-        }//if visible and pickable not transparent and has mapper
-      }//for all parts
+                        this->PickedPositions->InsertNextPoint
+                            (t*p1World[0] + (1.0 - t)*p2World[0],
+                            t*p1World[1] + (1.0 - t)*p2World[1],
+                            t*p1World[2] + (1.0 - t)*p2World[2]);
+                    }
+                }
+            }//if visible and pickable not transparent and has mapper
+        }//for all parts
     }//for all actors
 
-  // Invoke end pick method if defined
-  this->InvokeEvent(vtkCommand::EndPickEvent,NULL);
+    // Invoke end pick method if defined
+    this->InvokeEvent(vtkCommand::EndPickEvent,NULL);
 
-  return picked;
+    return picked;
 }
 
 
@@ -438,10 +437,10 @@ int fwVtkPicker::PickPolyData( double p1[3], double p2[3], vtkPolyData *polydata
 {
 
     vtkPolyDataMapper *mapper = vtkPolyDataMapper::New();
-    vtkActor *actor = vtkActor::New();
-    vtkPropCollection *props = vtkPropCollection::New();
+    vtkActor *actor           = vtkActor::New();
+    vtkPropCollection *props  = vtkPropCollection::New();
 
-    mapper->SetInput(polydata);
+    mapper->SetInputData(polydata);
     actor->SetMapper(mapper);
     props->AddItem(actor);
 
@@ -457,241 +456,241 @@ int fwVtkPicker::PickPolyData( double p1[3], double p2[3], vtkPolyData *polydata
 
 
 
-// Perform pick operation with selection point provided. Normally the 
+// Perform pick operation with selection point provided. Normally the
 // first two values for the selection point are x-y pixel coordinate, and
 // the third value is =0. Return non-zero if something was successfully picked.
 int fwVtkPicker::Pick( double p1[3], double p2[3], vtkPropCollection *props)
 {
-  int i;
-  vtkProp *prop;
-  vtkAbstractMapper3D *mapper = NULL;
-  double p1World[4], p2World[4], p1Mapper[4], p2Mapper[4];
-  int picked=0;
-  double t;
-  double ray[3];
-  int pickable;
-  int LODId;
-  double bounds[6];
-  double hitPosition[3];
-  
-  double tol = this->Tolerance;
-
-  //  Initialize picking process
-  this->Initialize();
-
-  // Invoke start pick method if defined
-  this->InvokeEvent(vtkCommand::StartPickEvent,NULL);
-
-  std::copy(p1,p1+3,p1World);
-  std::copy(p2,p2+3,p2World);
-
-  p1World[3] = p2World[3] = 1.0;
-
-  //  Loop over all props.  Transform ray (defined from position of
-  //  camera to selection point) into coordinates of mapper (not
-  //  transformed to actors coordinates!  Reduces overall computation!!!).
-  //  Note that only vtkProp3D's can be picked by fwVtkPicker.
-  //
-  vtkProp *propCandidate;
-
-  vtkActor *actor;
-  vtkLODProp3D *prop3D;
-  vtkVolume *volume;
-  vtkImageActor *imageActor = 0;
-  vtkAssemblyPath *path;
-  vtkProperty *tempProperty;
-  this->Transform->PostMultiply();
-  vtkCollectionSimpleIterator pit;
-  double scale[3];
-  for ( props->InitTraversal(pit); (prop=props->GetNextProp(pit)); )
+    int i;
+    vtkProp *prop;
+    vtkAbstractMapper3D *mapper = NULL;
+    double p1World[4], p2World[4], p1Mapper[4], p2Mapper[4];
+    int picked = 0;
+    double t;
+    double ray[3];
+    int pickable;
+    int LODId;
+    double bounds[6];
+    double hitPosition[3];
+
+    double tol = this->Tolerance;
+
+    //  Initialize picking process
+    this->Initialize();
+
+    // Invoke start pick method if defined
+    this->InvokeEvent(vtkCommand::StartPickEvent,NULL);
+
+    std::copy(p1,p1+3,p1World);
+    std::copy(p2,p2+3,p2World);
+
+    p1World[3] = p2World[3] = 1.0;
+
+    //  Loop over all props.  Transform ray (defined from position of
+    //  camera to selection point) into coordinates of mapper (not
+    //  transformed to actors coordinates!  Reduces overall computation!!!).
+    //  Note that only vtkProp3D's can be picked by fwVtkPicker.
+    //
+    vtkProp *propCandidate;
+
+    vtkActor *actor;
+    vtkLODProp3D *prop3D;
+    vtkVolume *volume;
+    vtkImageActor *imageActor = 0;
+    vtkAssemblyPath *path;
+    vtkProperty *tempProperty;
+    this->Transform->PostMultiply();
+    vtkCollectionSimpleIterator pit;
+    double scale[3];
+    for ( props->InitTraversal(pit); (prop = props->GetNextProp(pit)); )
     {
-    for ( prop->InitPathTraversal(); (path=prop->GetNextPath()); )
-      {
-      pickable = 0;
-      actor = NULL;
-      propCandidate = path->GetLastNode()->GetViewProp();
-      if ( propCandidate->GetPickable() && propCandidate->GetVisibility() )
+        for ( prop->InitPathTraversal(); (path = prop->GetNextPath()); )
         {
-        pickable = 1;
-        if ( (actor=vtkActor::SafeDownCast(propCandidate)) != NULL )
-          {
-          mapper = actor->GetMapper();
-          if ( actor->GetProperty()->GetOpacity() <= 0.0 )
+            pickable      = 0;
+            actor         = NULL;
+            propCandidate = path->GetLastNode()->GetViewProp();
+            if ( propCandidate->GetPickable() && propCandidate->GetVisibility() )
             {
-            pickable = 0;
+                pickable = 1;
+                if ( (actor = vtkActor::SafeDownCast(propCandidate)) != NULL )
+                {
+                    mapper = actor->GetMapper();
+                    if ( actor->GetProperty()->GetOpacity() <= 0.0 )
+                    {
+                        pickable = 0;
+                    }
+                }
+                else if ( (prop3D = vtkLODProp3D::SafeDownCast(propCandidate)) != NULL )
+                {
+                    LODId  = prop3D->GetPickLODID();
+                    mapper = prop3D->GetLODMapper(LODId);
+
+                    // if the mapper is a vtkMapper (as opposed to a vtkVolumeMapper),
+                    // then check the transparency to see if the object is pickable
+                    if ( vtkMapper::SafeDownCast(mapper) != NULL)
+                    {
+                        prop3D->GetLODProperty(LODId, &tempProperty);
+                        if ( tempProperty->GetOpacity() <= 0.0 )
+                        {
+                            pickable = 0;
+                        }
+                    }
+                }
+                else if ( (volume = vtkVolume::SafeDownCast(propCandidate)) != NULL )
+                {
+                    mapper = volume->GetMapper();
+                }
+                else if ( (imageActor = vtkImageActor::SafeDownCast(propCandidate)) )
+                {
+                    mapper = 0;
+                }
+                else
+                {
+                    pickable = 0; //only vtkProp3D's (actors and volumes) can be picked
+                }
             }
-          }
-        else if ( (prop3D=vtkLODProp3D::SafeDownCast(propCandidate)) != NULL )
-          {
-          LODId = prop3D->GetPickLODID();
-          mapper = prop3D->GetLODMapper(LODId);
-
-          // if the mapper is a vtkMapper (as opposed to a vtkVolumeMapper), 
-          // then check the transparency to see if the object is pickable
-          if ( vtkMapper::SafeDownCast(mapper) != NULL)
-            {
-            prop3D->GetLODProperty(LODId, &tempProperty);
-            if ( tempProperty->GetOpacity() <= 0.0 )
-              {
-              pickable = 0;
-              }
-            }
-          }
-        else if ( (volume=vtkVolume::SafeDownCast(propCandidate)) != NULL )
-          {
-          mapper = volume->GetMapper();
-          }
-        else if ( (imageActor=vtkImageActor::SafeDownCast(propCandidate)) )
-          {
-          mapper = 0;
-          }
-        else 
-          {
-          pickable = 0; //only vtkProp3D's (actors and volumes) can be picked
-          }
-        }
 
-      //  If actor can be picked, get its composite matrix, invert it, and
-      //  use the inverted matrix to transform the ray points into mapper
-      //  coordinates. 
-      if ( pickable  &&  mapper != NULL )
-        {
-        vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
-        if (lastMatrix == NULL)
-          {
-          vtkErrorMacro (<< "Pick: Null matrix.");
-          return 0;
-          }
-        this->Transform->SetMatrix(lastMatrix);
-        this->Transform->Push();
-        this->Transform->Inverse();
-        this->Transform->GetScale(scale); //need to scale the tolerance
-
-        this->Transform->TransformPoint(p1World,p1Mapper);
-        this->Transform->TransformPoint(p2World,p2Mapper);
-
-        for (i=0; i<3; i++) 
-          {
-          ray[i] = p2Mapper[i] - p1Mapper[i];
-          }
-
-        this->Transform->Pop();
-
-        //  Have the ray endpoints in mapper space, now need to compare this
-        //  with the mapper bounds to see whether intersection is possible.
-        //
-        //  Get the bounding box of the modeller.  Note that the tolerance is
-        //  added to the bounding box to make sure things on the edge of the
-        //  bounding box are picked correctly.
-        mapper->GetBounds(bounds);
-        bounds[0] -= tol; bounds[1] += tol; 
-        bounds[2] -= tol; bounds[3] += tol; 
-        bounds[4] -= tol; bounds[5] += tol; 
-        if ( vtkBox::IntersectBox(bounds, p1Mapper, 
-                                  ray, hitPosition, t) )
-          {
-          t = this->IntersectWithLine(p1Mapper, p2Mapper, 
-                                      tol*0.333*(scale[0]+scale[1]+scale[2]), path, 
-                                      static_cast<vtkProp3D *>(propCandidate), mapper);
-          if ( t < VTK_DOUBLE_MAX )
+            //  If actor can be picked, get its composite matrix, invert it, and
+            //  use the inverted matrix to transform the ray points into mapper
+            //  coordinates.
+            if ( pickable  &&  mapper != NULL )
             {
-            picked = 1;
-            if ( ! this->Prop3Ds->IsItemPresent(prop) )
-              {
-              this->Prop3Ds->AddItem(static_cast<vtkProp3D *>(prop));
-              }
-            this->PickedPositions->InsertNextPoint
-              ((1.0 - t)*p1World[0] + t*p2World[0],
-               (1.0 - t)*p1World[1] + t*p2World[1],
-               (1.0 - t)*p1World[2] + t*p2World[2]);
-
-            // backwards compatibility: also add to this->Actors
-            if (actor)
-              {
-              this->Actors->AddItem(actor);
-              }
+                vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
+                if (lastMatrix == NULL)
+                {
+                    vtkErrorMacro (<< "Pick: Null matrix.");
+                    return 0;
+                }
+                this->Transform->SetMatrix(lastMatrix);
+                this->Transform->Push();
+                this->Transform->Inverse();
+                this->Transform->GetScale(scale); //need to scale the tolerance
+
+                this->Transform->TransformPoint(p1World,p1Mapper);
+                this->Transform->TransformPoint(p2World,p2Mapper);
+
+                for (i = 0; i<3; i++)
+                {
+                    ray[i] = p2Mapper[i] - p1Mapper[i];
+                }
+
+                this->Transform->Pop();
+
+                //  Have the ray endpoints in mapper space, now need to compare this
+                //  with the mapper bounds to see whether intersection is possible.
+                //
+                //  Get the bounding box of the modeller.  Note that the tolerance is
+                //  added to the bounding box to make sure things on the edge of the
+                //  bounding box are picked correctly.
+                mapper->GetBounds(bounds);
+                bounds[0] -= tol; bounds[1] += tol;
+                bounds[2] -= tol; bounds[3] += tol;
+                bounds[4] -= tol; bounds[5] += tol;
+                if ( vtkBox::IntersectBox(bounds, p1Mapper,
+                                          ray, hitPosition, t) )
+                {
+                    t = this->IntersectWithLine(p1Mapper, p2Mapper,
+                                                tol*0.333*(scale[0]+scale[1]+scale[2]), path,
+                                                static_cast<vtkProp3D *>(propCandidate), mapper);
+                    if ( t < VTK_DOUBLE_MAX )
+                    {
+                        picked = 1;
+                        if ( !this->Prop3Ds->IsItemPresent(prop) )
+                        {
+                            this->Prop3Ds->AddItem(static_cast<vtkProp3D *>(prop));
+                        }
+                        this->PickedPositions->InsertNextPoint
+                            ((1.0 - t)*p1World[0] + t*p2World[0],
+                            (1.0 - t)*p1World[1] + t*p2World[1],
+                            (1.0 - t)*p1World[2] + t*p2World[2]);
+
+                        // backwards compatibility: also add to this->Actors
+                        if (actor)
+                        {
+                            this->Actors->AddItem(actor);
+                        }
+                    }
+                }
             }
-          }
-        }
-      else if ( pickable && imageActor )
-        { // special case for imageActor, which has no mapper
-        vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
-        if (lastMatrix == NULL)
-          {
-          vtkErrorMacro (<< "Pick: Null matrix.");
-          return 0;
-          }
-        this->Transform->SetMatrix(lastMatrix);
-        this->Transform->Push();
-        this->Transform->Inverse();
-
-        this->Transform->TransformPoint(p1World,p1Mapper);
-        this->Transform->TransformPoint(p2World,p2Mapper);
-
-        this->Transform->Pop();
-
-        //  Have the ray endpoints in data space, now need to compare this
-        //  with the displayed image bounds.
-        imageActor->GetDisplayBounds(bounds);
-
-        t = VTK_DOUBLE_MAX;
-
-        for (i = 0; i < 3; i++)
-          {
-          if (bounds[2*i] == bounds[2*i+1] && p2Mapper[i] != p1Mapper[i])
-            {
+            else if ( pickable && imageActor )
+            { // special case for imageActor, which has no mapper
+                vtkMatrix4x4 *lastMatrix = path->GetLastNode()->GetMatrix();
+                if (lastMatrix == NULL)
+                {
+                    vtkErrorMacro (<< "Pick: Null matrix.");
+                    return 0;
+                }
+                this->Transform->SetMatrix(lastMatrix);
+                this->Transform->Push();
+                this->Transform->Inverse();
+
+                this->Transform->TransformPoint(p1World,p1Mapper);
+                this->Transform->TransformPoint(p2World,p2Mapper);
+
+                this->Transform->Pop();
+
+                //  Have the ray endpoints in data space, now need to compare this
+                //  with the displayed image bounds.
+                imageActor->GetDisplayBounds(bounds);
+
+                t = VTK_DOUBLE_MAX;
+
+                for (i = 0; i < 3; i++)
+                {
+                    if (bounds[2*i] == bounds[2*i+1] && p2Mapper[i] != p1Mapper[i])
+                    {
 //            t = (p2World[i] - bounds[2*i])/(p2Mapper[i] - p1Mapper[i]);
-            t = (p2Mapper[i] - bounds[2*i])/(p2Mapper[i] - p1Mapper[i]);
-            break;
-            }
-          }
+                        t = (p2Mapper[i] - bounds[2*i])/(p2Mapper[i] - p1Mapper[i]);
+                        break;
+                    }
+                }
 
-        if (t < VTK_DOUBLE_MAX)
-          {
+                if (t < VTK_DOUBLE_MAX)
+                {
 //          hitPosition[0] = (1.0 - t)*p1Mapper[0] + t*p2Mapper[0];
 //          hitPosition[1] = (1.0 - t)*p1Mapper[1] + t*p2Mapper[1];
 //          hitPosition[2] = (1.0 - t)*p1Mapper[2] + t*p2Mapper[2];
-            hitPosition[0] = t*p1Mapper[0] + (1.0 - t)*p2Mapper[0];
-            hitPosition[1] = t*p1Mapper[1] + (1.0 - t)*p2Mapper[1];
-            hitPosition[2] = t*p1Mapper[2] + (1.0 - t)*p2Mapper[2];
-          if ((bounds[0] == bounds[1] || (hitPosition[0] >= bounds[0]-tol &&
-                                          hitPosition[0] <= bounds[1]+tol)) &&
-              (bounds[2] == bounds[3] || (hitPosition[1] >= bounds[2]-tol &&
-                                          hitPosition[1] <= bounds[3]+tol)) &&
-              (bounds[4] == bounds[5] || (hitPosition[2] >= bounds[4]-tol &&
-                                          hitPosition[2] <= bounds[5]+tol)))
-            {
-            picked = 1;
-
-            // the following code is handled in MarkPicked for other Prop3Ds
-            this->Mapper = mapper; // mapper is null
-            this->DataSet = imageActor->GetInput();
-            this->MapperPosition[0] = hitPosition[0];
-            this->MapperPosition[1] = hitPosition[1];
-            this->MapperPosition[2] = hitPosition[2];
-            this->Transform->TransformPoint(hitPosition,this->PickPosition);
-            imageActor->Pick();
-            this->InvokeEvent(vtkCommand::PickEvent,NULL);
-
-            this->Prop3Ds->AddItem(imageActor);
+                    hitPosition[0] = t*p1Mapper[0] + (1.0 - t)*p2Mapper[0];
+                    hitPosition[1] = t*p1Mapper[1] + (1.0 - t)*p2Mapper[1];
+                    hitPosition[2] = t*p1Mapper[2] + (1.0 - t)*p2Mapper[2];
+                    if ((bounds[0] == bounds[1] || (hitPosition[0] >= bounds[0]-tol &&
+                                                    hitPosition[0] <= bounds[1]+tol)) &&
+                        (bounds[2] == bounds[3] || (hitPosition[1] >= bounds[2]-tol &&
+                                                    hitPosition[1] <= bounds[3]+tol)) &&
+                        (bounds[4] == bounds[5] || (hitPosition[2] >= bounds[4]-tol &&
+                                                    hitPosition[2] <= bounds[5]+tol)))
+                    {
+                        picked = 1;
+
+                        // the following code is handled in MarkPicked for other Prop3Ds
+                        this->Mapper            = mapper; // mapper is null
+                        this->DataSet           = imageActor->GetInput();
+                        this->MapperPosition[0] = hitPosition[0];
+                        this->MapperPosition[1] = hitPosition[1];
+                        this->MapperPosition[2] = hitPosition[2];
+                        this->Transform->TransformPoint(hitPosition,this->PickPosition);
+                        imageActor->Pick();
+                        this->InvokeEvent(vtkCommand::PickEvent,NULL);
+
+                        this->Prop3Ds->AddItem(imageActor);
 //            this->PickedPositions->InsertNextPoint
 //              ((1.0 - t)*p1World[0] + t*p2World[0],
 //               (1.0 - t)*p1World[1] + t*p2World[1],
 //               (1.0 - t)*p1World[2] + t*p2World[2]);
-            this->PickedPositions->InsertNextPoint
-                (t*p1World[0] + (1.0 - t)*p2World[0],
-                 t*p1World[1] + (1.0 - t)*p2World[1],
-                 t*p1World[2] + (1.0 - t)*p2World[2]);
-            }
-          }
-        }//if visible and pickable not transparent and has mapper
-      }//for all parts
+                        this->PickedPositions->InsertNextPoint
+                            (t*p1World[0] + (1.0 - t)*p2World[0],
+                            t*p1World[1] + (1.0 - t)*p2World[1],
+                            t*p1World[2] + (1.0 - t)*p2World[2]);
+                    }
+                }
+            }//if visible and pickable not transparent and has mapper
+        }//for all parts
     }//for all actors
 
-  // Invoke end pick method if defined
-  this->InvokeEvent(vtkCommand::EndPickEvent,NULL);
+    // Invoke end pick method if defined
+    this->InvokeEvent(vtkCommand::EndPickEvent,NULL);
 
-  return picked;
+    return picked;
 }
 
 
@@ -701,7 +700,7 @@ int fwVtkPicker::Pick( double p1[3], double p2[3], vtkPropCollection *props)
 
 void fwVtkPicker::PrintSelf(ostream& os, vtkIndent indent)
 {
-  os << indent << "fwVtkPicker: \n";
-  this->Superclass::PrintSelf(os,indent);
+    os << indent << "fwVtkPicker: \n";
+    this->Superclass::PrintSelf(os,indent);
 }
 
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.cpp
index be59238..e9a7007 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtk/fwVtkWindowLevelLookupTable.cpp
@@ -1,3 +1,9 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2004-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
 #include <iostream>
 #include <cmath>
 
@@ -10,10 +16,10 @@
 vtkStandardNewMacro(fwVtkWindowLevelLookupTable);
 
 //----------------------------------------------------------------------------
-    fwVtkWindowLevelLookupTable::fwVtkWindowLevelLookupTable(int sze, int ext)
-: vtkLookupTable(sze, ext)
+fwVtkWindowLevelLookupTable::fwVtkWindowLevelLookupTable(int sze, int ext)
+    : vtkLookupTable(sze, ext)
 {
-    this->Level = (this->TableRange[0] + this->TableRange[1])/2;
+    this->Level  = (this->TableRange[0] + this->TableRange[1])/2;
     this->Window = (this->TableRange[1] - this->TableRange[0]);
 
     this->InverseVideo = 0;
@@ -62,7 +68,7 @@ void fwVtkWindowLevelLookupTable::BuildInvert()
     int n = this->NumberOfColors-1;
     for (int i = 0; i < this->NumberOfColors; i++)
     {
-        tableRgba = this->Table->GetPointer(4*i);
+        tableRgba        = this->Table->GetPointer(4*i);
         invertTableRgba2 = this->InvertTable->WritePointer(4*(n-i),4);
 
         invertTableRgba2[0] = tableRgba[0];
@@ -98,24 +104,24 @@ void fwVtkWindowLevelLookupTable::PrintSelf(ostream& os, vtkIndent indent)
     os << indent << "Window: " << this->Window << "\n";
     os << indent << "Level: " << this->Level << "\n";
     os << indent << "InverseVideo: "
-        << (this->InverseVideo ? "On\n" : "Off\n");
+       << (this->InverseVideo ? "On\n" : "Off\n");
     os << indent << "LeftClampValue : ("
-        << this->LeftClampValue[0] << ", "
-        << this->LeftClampValue[1] << ", "
-        << this->LeftClampValue[2] << ", "
-        << this->LeftClampValue[3] << ")\n";
+       << this->LeftClampValue[0] << ", "
+       << this->LeftClampValue[1] << ", "
+       << this->LeftClampValue[2] << ", "
+       << this->LeftClampValue[3] << ")\n";
     os << indent << "RightClampValue : ("
-        << this->RightClampValue[0] << ", "
-        << this->RightClampValue[1] << ", "
-        << this->RightClampValue[2] << ", "
-        << this->RightClampValue[3] << ")\n";
+       << this->RightClampValue[0] << ", "
+       << this->RightClampValue[1] << ", "
+       << this->RightClampValue[2] << ", "
+       << this->RightClampValue[3] << ")\n";
 }
 
 
 //----------------------------------------------------------------------------
 // Apply log to value, with appropriate constraints.
 inline double vtkApplyLogScale(double v, const double range[2],
-        const double logRange[2])
+                               const double logRange[2])
 {
     // is the range set for negative numbers?
     if (range[0] < 0)
@@ -155,13 +161,13 @@ inline double vtkApplyLogScale(double v, const double range[2],
 //----------------------------------------------------------------------------
 // Apply shift/scale to the scalar value v and do table lookup.
 inline unsigned char *vtkLinearLookup(double v,
-        unsigned char *table,
-        double maxIndex,
-        double shift, double scale,
-        unsigned char *nanColor,
-        unsigned char *leftColor,
-        unsigned char *rightColor
-        )
+                                      unsigned char *table,
+                                      double maxIndex,
+                                      double shift, double scale,
+                                      unsigned char *nanColor,
+                                      unsigned char *leftColor,
+                                      unsigned char *rightColor
+                                      )
 {
 
     if (vtkMath::IsNan(v))
@@ -181,7 +187,7 @@ inline unsigned char *vtkLinearLookup(double v,
     return &table[4*static_cast<unsigned int>(findx)];
     /* round
        return &table[4*(unsigned int)(findx + 0.5f)];
-       */
+     */
 }
 
 
@@ -227,13 +233,13 @@ void fwVtkWindowLevelLookupTableLogRange(const double range[2], double logRange[
 //----------------------------------------------------------------------------
 // accelerate the mapping by copying the data in 32-bit chunks instead
 // of 8-bit chunks
-    template<class T>
+template<class T>
 void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *input,
-        unsigned char *output, int length,
-        int inIncr, int outFormat)
+                                        unsigned char *output, int length,
+                                        int inIncr, int outFormat)
 {
-    int i = length;
-    double *range = self->GetTableRange();
+    int i           = length;
+    double *range   = self->GetTableRange();
     double maxIndex = self->GetNumberOfColors() - 1;
     double shift, scale;
     unsigned char *table = self->GetCurrentPointer(0);
@@ -246,22 +252,22 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
 
     for (int c = 0; c < 4; c++)
     {
-        nanColor[c] = static_cast<unsigned char>(self->GetNanColor()[c]*255.0);
-        selfLeftColor[c] = static_cast<unsigned char>(self->GetLeftClampValue()[c]*255.0);
+        nanColor[c]       = static_cast<unsigned char>(self->GetNanColor()[c]*255.0);
+        selfLeftColor[c]  = static_cast<unsigned char>(self->GetLeftClampValue()[c]*255.0);
         selfRightColor[c] = static_cast<unsigned char>(self->GetRightClampValue()[c]*255.0);
     }
 
 
-    unsigned char *leftColor = selfLeftColor;
+    unsigned char *leftColor  = selfLeftColor;
     unsigned char *rightColor = selfRightColor;
 
     if(self->GetClamping())
     {
-        leftColor = &table[0];
+        leftColor  = &table[0];
         rightColor = &table[(self->GetNumberOfColors()-1) * 4];
     }
 
-    if ( (alpha=self->GetAlpha()) >= 1.0 ) //no blending required
+    if ( (alpha = self->GetAlpha()) >= 1.0 ) //no blending required
     {
         if (self->GetScale() == VTK_SCALE_LOG10)
         {
@@ -285,47 +291,47 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_RGB)
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_LUMINANCE_ALPHA)
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     *output++ = cptr[3];
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else // outFormat == VTK_LUMINANCE
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     input += inIncr;
                 }
             }
@@ -352,12 +358,12 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_RGB)
@@ -365,11 +371,11 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_LUMINANCE_ALPHA)
@@ -377,11 +383,11 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     *output++ = cptr[3];
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else // outFormat == VTK_LUMINANCE
@@ -389,9 +395,9 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     input += inIncr;
                 }
             }
@@ -422,47 +428,47 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = static_cast<unsigned char>((*cptr)*alpha); cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_RGB)
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_LUMINANCE_ALPHA)
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     *output++ = static_cast<unsigned char>(alpha*cptr[3]);
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else // outFormat == VTK_LUMINANCE
             {
                 while (--i >= 0)
                 {
-                    val = vtkApplyLogScale(*input, range, logRange);
-                    cptr = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
+                    val       = vtkApplyLogScale(*input, range, logRange);
+                    cptr      = vtkLinearLookup(val, table, maxIndex, shift, scale, nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     input += inIncr;
                 }
             }
@@ -489,12 +495,12 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = static_cast<unsigned char>((*cptr)*alpha); cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_RGB)
@@ -502,11 +508,11 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = *cptr++;
                     *output++ = *cptr++;
                     *output++ = *cptr++;
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else if (outFormat == VTK_LUMINANCE_ALPHA)
@@ -514,11 +520,11 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     *output++ = static_cast<unsigned char>(cptr[3]*alpha);
-                    input += inIncr;
+                    input    += inIncr;
                 }
             }
             else // outFormat == VTK_LUMINANCE
@@ -526,9 +532,9 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
                 while (--i >= 0)
                 {
                     cptr = vtkLinearLookup(*input, table, maxIndex, shift, scale,
-                            nanColor, leftColor, rightColor);
+                                           nanColor, leftColor, rightColor);
                     *output++ = static_cast<unsigned char>(cptr[0]*0.30 + cptr[1]*0.59 +
-                            cptr[2]*0.11 + 0.5);
+                                                           cptr[2]*0.11 + 0.5);
                     input += inIncr;
                 }
             }
@@ -544,10 +550,10 @@ void fwVtkWindowLevelLookupTableMapData(fwVtkWindowLevelLookupTable *self, T *in
 // Although this is a relatively expensive calculation,
 // it is only done on the first render. Colors are cached
 // for subsequent renders.
-    template<class T>
+template<class T>
 void fwVtkWindowLevelLookupTableMapMag(fwVtkWindowLevelLookupTable *self, T *input,
-        unsigned char *output, int length,
-        int inIncr, int outFormat)
+                                       unsigned char *output, int length,
+                                       int inIncr, int outFormat)
 {
     double tmp, sum;
     double *mag;
@@ -559,7 +565,7 @@ void fwVtkWindowLevelLookupTableMapMag(fwVtkWindowLevelLookupTable *self, T *inp
         sum = 0;
         for (j = 0; j < inIncr; ++j)
         {
-            tmp = static_cast<double>(*input);
+            tmp  = static_cast<double>(*input);
             sum += (tmp * tmp);
             ++input;
         }
@@ -574,55 +580,55 @@ void fwVtkWindowLevelLookupTableMapMag(fwVtkWindowLevelLookupTable *self, T *inp
 
 //----------------------------------------------------------------------------
 void fwVtkWindowLevelLookupTable::MapScalarsThroughTable2(void *input,
-        unsigned char *output,
-        int inputDataType,
-        int numberOfValues,
-        int inputIncrement,
-        int outputFormat)
+                                                          unsigned char *output,
+                                                          int inputDataType,
+                                                          int numberOfValues,
+                                                          int inputIncrement,
+                                                          int outputFormat)
 {
     if (this->UseMagnitude && inputIncrement > 1)
     {
         switch (inputDataType)
         {
             vtkTemplateMacro(
-                    fwVtkWindowLevelLookupTableMapMag(this,static_cast<VTK_TT*>(input),output,
-                        numberOfValues,inputIncrement,outputFormat);
-                    return
-                    );
+                fwVtkWindowLevelLookupTableMapMag(this,static_cast<VTK_TT*>(input),output,
+                                                  numberOfValues,inputIncrement,outputFormat);
+                return
+                );
             case VTK_BIT:
-            vtkErrorMacro("Cannot comput magnitude of bit array.");
-            break;
+                vtkErrorMacro("Cannot comput magnitude of bit array.");
+                break;
             default:
-            vtkErrorMacro(<< "MapImageThroughTable: Unknown input ScalarType");
+                vtkErrorMacro(<< "MapImageThroughTable: Unknown input ScalarType");
         }
     }
 
     switch (inputDataType)
     {
         case VTK_BIT:
+        {
+            vtkIdType i, id;
+            vtkBitArray *bitArray = vtkBitArray::New();
+            bitArray->SetVoidArray(input,numberOfValues,1);
+            vtkUnsignedCharArray *newInput = vtkUnsignedCharArray::New();
+            newInput->SetNumberOfValues(numberOfValues);
+            for (id = i = 0; i<numberOfValues; i++, id += inputIncrement)
             {
-                vtkIdType i, id;
-                vtkBitArray *bitArray = vtkBitArray::New();
-                bitArray->SetVoidArray(input,numberOfValues,1);
-                vtkUnsignedCharArray *newInput = vtkUnsignedCharArray::New();
-                newInput->SetNumberOfValues(numberOfValues);
-                for (id=i=0; i<numberOfValues; i++, id+=inputIncrement)
-                {
-                    newInput->SetValue(i, bitArray->GetValue(id));
-                }
-                fwVtkWindowLevelLookupTableMapData(this,
-                        static_cast<unsigned char*>(newInput->GetPointer(0)),
-                        output,numberOfValues,
-                        inputIncrement,outputFormat);
-                newInput->Delete();
-                bitArray->Delete();
+                newInput->SetValue(i, bitArray->GetValue(id));
             }
-            break;
+            fwVtkWindowLevelLookupTableMapData(this,
+                                               static_cast<unsigned char*>(newInput->GetPointer(0)),
+                                               output,numberOfValues,
+                                               inputIncrement,outputFormat);
+            newInput->Delete();
+            bitArray->Delete();
+        }
+        break;
 
             vtkTemplateMacro(
-                    fwVtkWindowLevelLookupTableMapData(this,static_cast<VTK_TT*>(input),output,
-                        numberOfValues,inputIncrement,outputFormat)
-                    );
+                fwVtkWindowLevelLookupTableMapData(this,static_cast<VTK_TT*>(input),output,
+                                                   numberOfValues,inputIncrement,outputFormat)
+                );
         default:
             vtkErrorMacro(<< "MapImageThroughTable: Unknown input ScalarType");
             return;
diff --git a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtklogging.cpp b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtklogging.cpp
index fe6eda6..c3344bf 100644
--- a/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtklogging.cpp
+++ b/SrcLib/visu/fwRenderVTK/src/fwRenderVTK/vtklogging.cpp
@@ -1,3 +1,8 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2015.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
 
 #include <vtkObjectFactory.h>
 #include <vtkOutputWindow.h>
@@ -8,28 +13,27 @@ class vtkOutputWindowToSpyLog : public vtkOutputWindow
 {
 public:
 
-  vtkTypeRevisionMacro(vtkOutputWindowToSpyLog,vtkObject);
-  // Description:
-  // Print ObjectFactor to stream.
-  virtual void PrintSelf(ostream& os, vtkIndent indent);
+    vtkTypeMacro(vtkOutputWindowToSpyLog,vtkObject);
+    // Description:
+    // Print ObjectFactor to stream.
+    virtual void PrintSelf(ostream& os, vtkIndent indent);
 
-   static vtkOutputWindowToSpyLog* New();
+    static vtkOutputWindowToSpyLog* New();
 
-  virtual void DisplayText(const char*);
+    virtual void DisplayText(const char*);
 
 protected:
-  vtkOutputWindowToSpyLog();
-  virtual ~vtkOutputWindowToSpyLog();
-  
+    vtkOutputWindowToSpyLog();
+    virtual ~vtkOutputWindowToSpyLog();
+
 private:
-  vtkOutputWindowToSpyLog(const vtkOutputWindowToSpyLog&);  // Not implemented.
-  void operator=(const vtkOutputWindowToSpyLog&);  // Not implemented.
+    vtkOutputWindowToSpyLog(const vtkOutputWindowToSpyLog&);  // Not implemented.
+    void operator=(const vtkOutputWindowToSpyLog&);  // Not implemented.
 };
 
 
 //------------------------------------------------------------------------------
 
-vtkCxxRevisionMacro(vtkOutputWindowToSpyLog, "$Revision: 1.3 $");
 vtkStandardNewMacro(vtkOutputWindowToSpyLog);
 
 //------------------------------------------------------------------------------
@@ -48,16 +52,16 @@ vtkOutputWindowToSpyLog::~vtkOutputWindowToSpyLog()
 
 void vtkOutputWindowToSpyLog::PrintSelf(ostream& os, vtkIndent indent)
 {
-  this->Superclass::PrintSelf(os, indent);
+    this->Superclass::PrintSelf(os, indent);
 
-  os << indent << "vtkOutputWindowToSpyLog" << std::endl;
+    os << indent << "vtkOutputWindowToSpyLog" << std::endl;
 }
 
 //------------------------------------------------------------------------------
 
 void vtkOutputWindowToSpyLog::DisplayText(const char* txt)
 {
-  OSLM_WARN("[VTK]: " << txt);
+    OSLM_WARN("[VTK]: " << txt);
 }
 
 //------------------------------------------------------------------------------
@@ -71,7 +75,6 @@ public:
     {
         vtkOutputWindow::SetInstance( vtkOutputWindowToSpyLog::New() );
     }
-
 };
 
 static InitializeVtkOutputWindow _vtkOutputWindowInstantiator;
diff --git a/Utilities/DicomAnonymizer/CMakeLists.txt b/Utilities/DicomAnonymizer/CMakeLists.txt
new file mode 100644
index 0000000..34152a0
--- /dev/null
+++ b/Utilities/DicomAnonymizer/CMakeLists.txt
@@ -0,0 +1,7 @@
+fwLoadProperties()
+
+
+find_package(Boost COMPONENTS filesystem program_options REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+fwLink(${Boost_LIBRARIES})
+
diff --git a/Utilities/DicomAnonymizer/Properties.cmake b/Utilities/DicomAnonymizer/Properties.cmake
new file mode 100644
index 0000000..0e81513
--- /dev/null
+++ b/Utilities/DicomAnonymizer/Properties.cmake
@@ -0,0 +1,10 @@
+set( NAME DicomAnonymizer )
+set( VERSION 0.1 )
+set( TYPE EXECUTABLE )
+set( OPTIONS CONSOLE )
+set( DEPENDENCIES
+    fwCore
+    fwGdcmIO
+    )
+set( REQUIREMENTS )
+
diff --git a/Utilities/DicomAnonymizer/src/main.cpp b/Utilities/DicomAnonymizer/src/main.cpp
new file mode 100644
index 0000000..4334108
--- /dev/null
+++ b/Utilities/DicomAnonymizer/src/main.cpp
@@ -0,0 +1,89 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwGdcmIO/helper/DicomAnonymizer.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+
+#include <stdlib.h>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+/** \file DicomAnonymizer/src/main
+ *
+ *********************
+ * Software : DicomAnonymizer
+ *********************
+ * Allows to anonymize a Dicom folder
+ * HELP  : DicomAnonymizer.exe --help
+ * USE :   DicomAnonymizer.exe <options>
+ * Allowed options:
+ *   -h [ --help ]           produce help message
+ *   -i [ --input ] arg      set the input folder
+ *   -o [ --output ] arg     set the output folder
+ */
+int main(int argc, char** argv)
+{
+    // Declare the supported options.
+    ::boost::program_options::options_description desc("Allowed options");
+    desc.add_options()
+        ("help,h", "produce help message")
+        ("input,i", ::boost::program_options::value< std::string >(), "set input folder")
+        ("output,o", ::boost::program_options::value< std::string >(), "set output folder")
+    ;
+
+    // Manage the options
+    ::boost::program_options::variables_map vm;
+    ::boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
+    ::boost::program_options::notify(vm);
+
+    if (vm.count("help"))
+    {
+        std::cout << desc << "\n";
+        return EXIT_SUCCESS;
+    }
+    else if(!vm.count("input"))
+    {
+        std::cout << "You must specify an input file." << "\n";
+        return EXIT_FAILURE;
+    }
+    else if(!vm.count("output"))
+    {
+        std::cout << "You must specify an output file." << "\n";
+        return EXIT_FAILURE;
+    }
+    else if(vm["input"].as< std::string >() == vm["output"].as< std::string >())
+    {
+        std::cout << "The output folder can not be the input folder." << "\n";
+        return EXIT_FAILURE;
+    }
+
+    // Get paths
+    ::boost::filesystem::path input(vm["input"].as< std::string >());
+    ::boost::filesystem::path output(vm["output"].as< std::string >());
+
+    if(!::boost::filesystem::exists(input) || !::boost::filesystem::is_directory(input))
+    {
+        std::cout << "The specified input folder " << input << " is not a directory." << "\n";
+        return EXIT_FAILURE;
+    }
+    else if(::boost::filesystem::exists(output))
+    {
+        std::cout << "The specified output folder " << output << " already exists." << "\n";
+        return EXIT_FAILURE;
+    }
+
+    // Copy and anonymize
+    ::fwGdcmIO::helper::DicomAnonymizer::copyDirectory(input, output);
+    ::fwGdcmIO::helper::DicomAnonymizer anonymizer;
+    anonymizer.anonymize(output);
+
+    return EXIT_SUCCESS;
+}
+
diff --git a/Utilities/DicomMetadataJsonGenerator/CMakeLists.txt b/Utilities/DicomMetadataJsonGenerator/CMakeLists.txt
new file mode 100644
index 0000000..efedce8
--- /dev/null
+++ b/Utilities/DicomMetadataJsonGenerator/CMakeLists.txt
@@ -0,0 +1,10 @@
+fwLoadProperties()
+
+
+find_package(Boost COMPONENTS filesystem program_options REQUIRED)
+fwForwardInclude(${Boost_INCLUDE_DIRS})
+fwLink(${Boost_LIBRARIES})
+
+find_package(DCMTK REQUIRED)
+fwInclude( ${DCMTK_config_INCLUDE_DIRS} )
+fwLink( ${DCMTK_LIBRARIES} )
diff --git a/Utilities/DicomMetadataJsonGenerator/Properties.cmake b/Utilities/DicomMetadataJsonGenerator/Properties.cmake
new file mode 100644
index 0000000..012171e
--- /dev/null
+++ b/Utilities/DicomMetadataJsonGenerator/Properties.cmake
@@ -0,0 +1,14 @@
+
+set( NAME DicomMetadataJsonGenerator )
+set( VERSION 0.1 )
+set( TYPE EXECUTABLE )
+set( OPTIONS CONSOLE TRUE )
+set( DEPENDENCIES
+    fwCore
+    fwMedData
+    fwDcmtkIO
+    fwDicomIOFilter
+    fwData
+    fwLog
+    )
+set( REQUIREMENTS )
diff --git a/Utilities/DicomMetadataJsonGenerator/src/main.cpp b/Utilities/DicomMetadataJsonGenerator/src/main.cpp
new file mode 100644
index 0000000..c72624a
--- /dev/null
+++ b/Utilities/DicomMetadataJsonGenerator/src/main.cpp
@@ -0,0 +1,125 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#include <fwDicomIOFilter/helper/Filter.hpp>
+#include <fwMedData/SeriesDB.hpp>
+#include <fwDcmtkIO/SeriesDBReader.hpp>
+
+#include <boost/program_options.hpp>
+#include <boost/filesystem/path.hpp>
+#include <boost/filesystem/operations.hpp>
+
+#include <stdlib.h>
+#include <string>
+#include <iostream>
+#include <fstream>
+
+/** DicomMetadataJsonGenerator/src/main.cpp
+ *
+ *********************
+ * Software : DicomMetadataJsonGenerator
+ *********************
+ * Generate Json files used for ::fwDcmtkIO::ut::SeriesDBReaderTest unit test.
+ * HELP  : DicomMetadataJsonGenerator.exe --help
+ * USE :   DicomMetadataJsonGenerator.exe <options>
+ * Allowed options:
+ *   -h [ --help ]           produce help message
+ *   -i [ --input ] arg      set the input folder
+ */
+int main(int argc, char** argv)
+{
+    // Declare the supported options.
+    ::boost::program_options::options_description desc("Allowed options");
+    desc.add_options()
+        ("help,h", "produce help message")
+        ("input,i", ::boost::program_options::value< std::string >(), "set input folder")
+    ;
+
+    // Manage the options
+    ::boost::program_options::variables_map vm;
+    ::boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
+    ::boost::program_options::notify(vm);
+
+    if (vm.count("help"))
+    {
+        std::cout << desc << "\n";
+        return EXIT_SUCCESS;
+    }
+    else if(!vm.count("input"))
+    {
+        std::cout << "You must specify an input folder containing the Dicom folders." << "\n";
+        return EXIT_FAILURE;
+    }
+
+    // Get paths
+    const ::boost::filesystem::path input(vm["input"].as< std::string >());
+    const ::boost::filesystem::path output(input.string() + "/DICOMFILES");
+
+    if(!::boost::filesystem::exists(input) || !::boost::filesystem::is_directory(input))
+    {
+        std::cout << "The specified input folder " << input << " is not a directory." << "\n";
+        return EXIT_FAILURE;
+    }
+
+    //Delete old DICOMFILES
+    if(::boost::filesystem::exists(output))
+    {
+        ::boost::filesystem::remove(output);
+    }
+
+    // Create a map to store Dicom files and meta
+    typedef std::vector< std::string > DicomVectorType;
+    DicomVectorType dicomVector;
+
+    // List of files used for unit testing
+    dicomVector.push_back("01-CT-DICOM_LIVER");
+    dicomVector.push_back("08-CT-PACS");
+    dicomVector.push_back("09-CT-PACS");
+    dicomVector.push_back("42-OT-BARRE-MONO2-8-colon");
+    dicomVector.push_back("46-MR-BARRE-MONO2-12-shoulder");
+    dicomVector.push_back("71-CT-DICOM_SEG");
+    dicomVector.push_back("71-CT-DICOM_SF");
+    dicomVector.push_back("71-CT-DICOM_SR");
+    dicomVector.push_back("71-CT-DICOM_3DSR");
+    dicomVector.push_back("82-MR-SAGITTAL-KNEE");
+
+    // Add other Dicom test images
+
+    // Read series
+    for(std::string file :  dicomVector)
+    {
+        OSLM_WARN(input.string() << "/" << file);
+        ::fwDcmtkIO::SeriesDBReader::sptr myLoader = ::fwDcmtkIO::SeriesDBReader::New();
+        ::fwMedData::SeriesDB::sptr dummy          = ::fwMedData::SeriesDB::New();
+        myLoader->setObject(dummy);
+        myLoader->setFolder(input.string() + "/" + file);
+        myLoader->readDicomSeries();
+
+        std::vector< ::fwMedData::DicomSeries::sptr > dicomSeriesContainer = myLoader->getDicomSeries();
+        ::fwDicomIOFilter::IFilter::sptr filter = ::fwDicomIOFilter::factory::New(
+            "::fwDicomIOFilter::custom::DefaultDicomFilter");
+        ::fwDicomIOFilter::helper::Filter::applyFilter(dicomSeriesContainer,filter, true);
+
+        std::ofstream outputFile;
+        outputFile.open(output.c_str(), std::ios::out | std::ios::app);
+
+        // Write first instance of each series to the DICOMFILES file
+        for(::fwMedData::DicomSeries::sptr series :  dicomSeriesContainer)
+        {
+            outputFile << file << "/" << series->getLocalDicomPaths().begin()->second.filename().c_str() << "\n";
+        }
+
+        outputFile.close();
+
+    }
+
+    // Execute shellscript to create json files
+    const std::string script = "share/fwDcmtkIO_0-1/test/DicomMetadataJsonGenerator.sh " + input.string();
+    system(script.c_str());
+
+    return EXIT_SUCCESS;
+}
+
diff --git a/Utilities/VersionGenerator/CMakeLists.txt b/Utilities/VersionGenerator/CMakeLists.txt
new file mode 100644
index 0000000..bcdf490
--- /dev/null
+++ b/Utilities/VersionGenerator/CMakeLists.txt
@@ -0,0 +1,13 @@
+fwLoadProperties()
+
+find_package (Boost COMPONENTS filesystem system program_options REQUIRED)
+
+fwInclude(
+    ${Boost_INCLUDE_DIRS}
+)
+
+fwLink(
+    ${Boost_PROGRAM_OPTIONS_LIBRARY}
+    ${Boost_FILESYSTEM_LIBRARY}
+    ${Boost_SYSTEM_LIBRARY}
+)
diff --git a/Utilities/VersionGenerator/Properties.cmake b/Utilities/VersionGenerator/Properties.cmake
new file mode 100644
index 0000000..dff56dd
--- /dev/null
+++ b/Utilities/VersionGenerator/Properties.cmake
@@ -0,0 +1,10 @@
+
+set( NAME VersionGenerator )
+set( VERSION 0.1 )
+set( TYPE EXECUTABLE )
+set( OPTIONS CONSOLE TRUE )
+set( DEPENDENCIES 
+    fwAtomsPatch
+)
+set( REQUIREMENTS )
+
diff --git a/Utilities/VersionGenerator/bin/build.options b/Utilities/VersionGenerator/bin/build.options
deleted file mode 100644
index 56d3a7b..0000000
--- a/Utilities/VersionGenerator/bin/build.options
+++ /dev/null
@@ -1,11 +0,0 @@
-TYPE = "exec"
-CONSOLE="yes"
-USE=['boost', 'boostProgramOptions']
-LIB=[ 
-    'fwAtomsPatch_0-1',
-    'fwAtoms_0-1',
-    'fwData_0-1',
-    'fwCamp_0-1',
-    'fwDataCamp_0-1',
-    'fwAtomConversion_0-1'
-]
diff --git a/Utilities/VersionGenerator/src/main.cpp b/Utilities/VersionGenerator/src/main.cpp
index c958f00..cae0fdd 100644
--- a/Utilities/VersionGenerator/src/main.cpp
+++ b/Utilities/VersionGenerator/src/main.cpp
@@ -1,9 +1,9 @@
 /* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2013.
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
  * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
  * published by the Free Software Foundation.
  * ****** END LICENSE BLOCK ****** */
- 
+
 #include <stdlib.h>
 #include <string>
 #include <iostream>
@@ -14,21 +14,22 @@
 
 #include <fwAtomsPatch/VersionsManager.hpp>
 
-/** \file main.cpp
+/** \file VersionGenerator/src/main.cpp
+ *
  *********************
  * Software : VersionGenerator
  *********************
  * Allows to generate a file with .versions extesion
  * This file contains the listof the data and theirs version.
- * HELP  : VersionGenerator.exe --help 
+ * HELP  : VersionGenerator.exe --help
  * USE :   VersionGenerator.exe \<options\>
  * Allowed options:
  *   -h [ --help ]           produce help message
  *   -o [ --output ] arg     set the output file
  *   -f [ --context ] arg     set context name. It will be register in the generated file.
- *   -v [ --version ] arg    set version name. It will be register in the generated file. 
+ *   -v [ --version ] arg    set version name. It will be register in the generated file.
  */
- 
+
 int main(int argc, char** argv)
 {
     // Declare the supported options.
@@ -45,7 +46,8 @@ int main(int argc, char** argv)
     ::boost::program_options::store(boost::program_options::parse_command_line(argc, argv, desc), vm);
     ::boost::program_options::notify(vm);
 
-    if (vm.count("help")) {
+    if (vm.count("help"))
+    {
         std::cout << desc << "\n";
         return EXIT_SUCCESS;
     }
@@ -65,10 +67,10 @@ int main(int argc, char** argv)
         return EXIT_FAILURE;
     }
 
-    // Generate the result 
+    // Generate the result
     ::boost::filesystem::path versionFile(vm["output"].as< std::string >());
     ::fwAtomsPatch::VersionsManager::generateNewFile(versionFile, vm["context"].as< std::string >(),
-            vm["version"].as< std::string >());
+                                                     vm["version"].as< std::string >());
 
     return EXIT_SUCCESS;
 }
diff --git a/fwlauncher/CMakeLists.txt b/fwlauncher/CMakeLists.txt
new file mode 100644
index 0000000..53d39be
--- /dev/null
+++ b/fwlauncher/CMakeLists.txt
@@ -0,0 +1,5 @@
+fwLoadProperties()
+
+find_package (Boost COMPONENTS program_options REQUIRED)
+fwLink(${Boost_PROGRAM_OPTIONS_LIBRARY})
+
diff --git a/fwlauncher/Properties.cmake b/fwlauncher/Properties.cmake
new file mode 100644
index 0000000..21686a2
--- /dev/null
+++ b/fwlauncher/Properties.cmake
@@ -0,0 +1,7 @@
+
+set( NAME fwlauncher )
+set( VERSION 0.1 )
+set( TYPE EXECUTABLE )
+set( DEPENDENCIES fwCore fwRuntime )
+set( REQUIREMENTS  )
+
diff --git a/fwlauncher/src/ProfileRunner.cpp b/fwlauncher/src/ProfileRunner.cpp
new file mode 100644
index 0000000..553331e
--- /dev/null
+++ b/fwlauncher/src/ProfileRunner.cpp
@@ -0,0 +1,330 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * FW4SPL - Copyright (C) IRCAD, 2009-2016.
+ * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
+ * published by the Free Software Foundation.
+ * ****** END LICENSE BLOCK ****** */
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+#include <fwRuntime/io/ProfileReader.hpp>
+#include <fwRuntime/operations.hpp>
+#include <fwRuntime/profile/Profile.hpp>
+
+#include <boost/filesystem.hpp>
+#include <boost/program_options/options_description.hpp>
+#include <boost/program_options/parsers.hpp>
+#include <boost/program_options/positional_options.hpp>
+#include <boost/program_options/variables_map.hpp>
+#include <ostream>
+
+#include <stdio.h>
+#include <string>
+#include <vector>
+
+#ifdef _WIN32
+# define CONSOLE_LOG false;
+# define FILE_LOG true;
+#else
+# define CONSOLE_LOG true;
+# define FILE_LOG false;
+#endif
+
+#ifndef DEFAULT_PROFILE
+#define DEFAULT_PROFILE profile.xml
+#endif
+
+#define GET_DEFAULT_PROFILE(x) #x
+#define GET_DEFAULT_PROFILE2(x) GET_DEFAULT_PROFILE(x)
+#define DEFAULT_PROFILE_STRING  GET_DEFAULT_PROFILE2(DEFAULT_PROFILE)
+
+
+
+//------------------------------------------------------------------------------
+#if defined(_WIN32) && _MSC_VER > 1499 &&  _MSC_VER < 1600 // Visual C++ 2008 only
+
+ #pragma message ( "Setting up manifest..." )
+
+ #if defined(_DEBUG)
+// add a dependency on the retail crt even in debug
+     #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+    "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".CRT' " \
+    "version='" _CRT_ASSEMBLY_VERSION "' " \
+    "processorArchitecture='*' " \
+    "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "' " \
+    "language='*'\"")
+ #endif /* _DEBUG */
+
+ #pragma comment(linker,"/manifestdependency:\"type='win32' " \
+    "name='Microsoft.Windows.Common-Controls' " \
+    "version='6.0.0.0' " \
+    "processorArchitecture='*' " \
+    "publicKeyToken='6595b64144ccf1df' " \
+    "language='*'\"")
+
+#endif /* _WIN32 && _MSC_VER > 1499 &&  _MSC_VER < 1600 */
+
+//------------------------------------------------------------------------------
+namespace po = boost::program_options;
+namespace fs = boost::filesystem;
+
+typedef fs::path PathType;
+typedef std::vector< PathType > PathListType;
+typedef std::vector< std::string > StringListType;
+
+namespace std
+{
+template<class A1, class A2>
+inline ostream& operator<<(ostream& s, vector<A1, A2> const& vec)
+{
+    copy(vec.begin(), vec.end(), ostream_iterator<A1>(s, " "));
+    return s;
+}
+}
+
+//-----------------------------------------------------------------------------
+
+#ifdef __MACOSX__
+std::pair<std::string, std::string> parsePns(const std::string& s)
+{
+    if (s.substr(0, 5) == "-psn_")
+    {
+        return std::make_pair(std::string("psn"), s.substr(5));
+    }
+    return std::make_pair(std::string(), std::string());
+}
+#endif
+
+/// Wrapper for boost::filesystem::absolute, needed by clang 3.0 in use with
+/// std::transform
+PathType absolute( const PathType& path )
+{
+    return fs::absolute(path);
+}
+
+//-----------------------------------------------------------------------------
+
+int main(int argc, char* argv[])
+{
+    PathListType bundlePaths;
+    PathType rwd;
+    PathType profileFile;
+    ::fwRuntime::profile::Profile::ParamsContainer profileArgs;
+
+    po::options_description options("Launcher options");
+    options.add_options()
+        ("help,h", "Show help message")
+        ("bundle-path,B", po::value(&bundlePaths)->default_value(PathListType(1,std::string(BUNDLE_PREFIX) + "/")),
+        "Adds a bundle path")
+        ("rwd", po::value(&rwd)->default_value("./"), "Sets runtime working directory")
+    ;
+
+    bool consoleLog = CONSOLE_LOG;
+    bool fileLog    = FILE_LOG;
+    std::string logFile;
+    const std::string defaultLogFile = "SLM.log";
+
+    typedef ::fwCore::log::SpyLogger SpyLogger;
+    int logLevel = SpyLogger::SL_TRACE;
+
+    po::options_description logOptions("Log options");
+    logOptions.add_options()
+        ("clog", po::value(&consoleLog)->implicit_value(true)->zero_tokens(), "Enable log output to console")
+        ("no-clog", po::value(&consoleLog)->implicit_value(false)->zero_tokens(), "Disable log output to console")
+        ("flog", po::value(&fileLog)->implicit_value(true)->zero_tokens(), "Enable log output to file")
+        ("no-flog", po::value(&fileLog)->implicit_value(false)->zero_tokens(), "Disable log output to file")
+        ("log-output", po::value(&logFile)->default_value(defaultLogFile), "Log output filename")
+
+        ("log-trace", po::value(&logLevel)->implicit_value(SpyLogger::SL_TRACE)->zero_tokens(), "Set loglevel to trace")
+        ("log-debug", po::value(&logLevel)->implicit_value(SpyLogger::SL_DEBUG)->zero_tokens(), "Set loglevel to debug")
+        ("log-info",  po::value(&logLevel)->implicit_value(SpyLogger::SL_INFO )->zero_tokens(), "Set loglevel to info")
+        ("log-warn",  po::value(&logLevel)->implicit_value(SpyLogger::SL_WARN )->zero_tokens(), "Set loglevel to warn")
+        ("log-error", po::value(&logLevel)->implicit_value(SpyLogger::SL_ERROR)->zero_tokens(), "Set loglevel to error")
+        ("log-fatal", po::value(&logLevel)->implicit_value(SpyLogger::SL_FATAL)->zero_tokens(), "Set loglevel to fatal")
+    ;
+
+    po::options_description hidden("Hidden options");
+    hidden.add_options()
+#ifdef __MACOSX__
+    ("psn", po::value<std::string>(), "Application PSN number")
+        ("NSDocumentRevisionsDebugMode", po::value<std::string>()->zero_tokens(), "DocumentRevisionsDebugMode")
+#endif
+    ("profile", po::value(&profileFile)->default_value(DEFAULT_PROFILE_STRING), "Profile file")
+        ("profile-args", po::value(&profileArgs)->multitoken(), "Profile args")
+    ;
+
+    po::options_description cmdline_options;
+    cmdline_options.add(options).add(logOptions).add(hidden);
+
+    po::positional_options_description p;
+    p.add("profile", 1).add("profile-args", -1);
+
+    po::variables_map vm;
+
+    try
+    {
+        po::store(po::command_line_parser(argc, argv)
+                  .options(cmdline_options)
+#ifdef __MACOSX__
+                  .extra_parser(parsePns)
+#endif
+                  .positional(p)
+                  .run(),
+                  vm);
+        po::notify(vm);
+    }
+    catch(const po::error& e)
+    {
+        std::cerr << e.what() << std::endl;
+        return 1;
+    }
+
+    if (vm.count("help"))
+    {
+        std::cout << "usage: " << argv[0] << " [options] [profile(=profile.xml)] [profile-args ...]" << std::endl;
+        std::cout << "  use '--' to stop processing args for fwlauncher" << std::endl  << std::endl;
+        std::cout << options << std::endl << logOptions << std::endl;
+        return 0;
+    }
+
+    SpyLogger& logger = fwCore::log::SpyLogger::getSpyLogger();
+
+    if(consoleLog)
+    {
+        logger.addStreamAppender(std::clog, static_cast<SpyLogger::LevelType>(logLevel));
+    }
+
+    if(fileLog)
+    {
+        FILE* pFile = fopen(logFile.c_str(), "w");
+        if (pFile==NULL)
+        {
+            ::boost::system::error_code err;
+            PathType sysTmp = fs::temp_directory_path(err);
+            if(err.value() != 0)
+            {
+                // replace log file appender by stream appender: default dir and temp dir unreachable
+                logger.addStreamAppender(std::clog, static_cast<SpyLogger::LevelType>(logLevel));
+            }
+            else
+            {
+                // creates SLM.log in temp directory: default dir unreachable
+                sysTmp  = sysTmp / "SLM.log";
+                logFile = sysTmp.string();
+                logger.addFileAppender(logFile, static_cast<SpyLogger::LevelType>(logLevel));
+            }
+        }
+        else
+        {
+            // creates SLM.log in default logFile directory
+            fclose(pFile);
+            logger.addFileAppender(logFile, static_cast<SpyLogger::LevelType>(logLevel));
+        }
+    }
+
+#ifdef __MACOSX__
+    fs::path execPath = argv[0];
+
+    if ( execPath.string().find(".app/") != std::string::npos || vm.count("psn"))
+    {
+        bool isChdirOkOSX = false;
+
+        fs::path execPath = argv[0];
+
+        while ( fs::extension(execPath) != ".app"
+                && execPath != execPath.parent_path()
+                && !fs::is_directory( execPath / fs::path(BUNDLE_PREFIX))
+                )
+        {
+            execPath = execPath.parent_path();
+        }
+
+        if ( fs::is_directory( execPath / "Contents" / fs::path(BUNDLE_PREFIX) ) )
+        {
+            execPath = execPath / "Contents";
+        }
+        else
+        {
+            OSLM_ERROR_IF("Bundle directory not found.", !fs::is_directory( execPath / fs::path(BUNDLE_PREFIX) ));
+        }
+
+        isChdirOkOSX = (chdir(execPath.string().c_str()) == 0);
+
+        SLM_ERROR_IF("Was not able to find a directory to change to.", !isChdirOkOSX);
+    }
+#endif
+
+    OSLM_INFO_IF( "Bundle paths are: " << bundlePaths << std::endl, vm.count("bundle-path") );
+    OSLM_INFO_IF( "Profile: " << profileFile << std::endl, vm.count("profile"));
+    OSLM_INFO_IF( "Profile-args: " << profileArgs << std::endl, vm.count("profile-args") );
+
+    std::transform( bundlePaths.begin(), bundlePaths.end(), bundlePaths.begin(), absolute );
+    profileFile = fs::absolute(profileFile);
+
+    bool isChdirOk = false;
+#ifdef _WIN32
+    isChdirOk = (bool)(SetCurrentDirectory(rwd.string().c_str()) != 0);
+#else
+    isChdirOk = ( chdir(rwd.string().c_str()) == 0 );
+#endif // _WIN32
+    OSLM_ERROR_IF( "Was not able to change directory to : " << rwd, !isChdirOk);
+
+    for(const fs::path& bundlePath :  bundlePaths )
+    {
+        if ( fs::is_directory(bundlePath))
+        {
+            ::fwRuntime::addBundles( bundlePath );
+        }
+        else
+        {
+            OSLM_ERROR( "Bundle path " << bundlePath << " do not exists or is not a directory.");
+        }
+    }
+
+    int retValue = 0;
+
+    if ( fs::is_regular_file(profileFile))
+    {
+        ::fwRuntime::profile::Profile::sptr profile;
+
+        try
+        {
+            profile = ::fwRuntime::io::ProfileReader::createProfile(profileFile);
+            ::fwRuntime::profile::setCurrentProfile(profile);
+
+            profile->setParams(profileArgs);
+
+            profile->start();
+            profile->run();
+            profile->stop();
+        }
+        catch(std::exception& e)
+        {
+            OSLM_FATAL( e.what() );
+            retValue = 1;
+        }
+        catch(...)
+        {
+            SLM_FATAL( "An unrecoverable error has occurred." );
+            retValue = 1;
+        }
+    }
+    else
+    {
+        OSLM_ERROR( "Profile file " << profileFile << " do not exists or is not a regular file.");
+        retValue = 1;
+    }
+
+    return retValue;
+}
+
+//-----------------------------------------------------------------------------
+
+#ifdef _WIN32
+int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR args, int)
+{
+    return main(__argc, __argv);
+}
+#endif // _WIN32
+
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
deleted file mode 100644
index b7aad3c..0000000
--- a/launcher/CMakeLists.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-fwLoadProperties()
-
-find_package (Boost COMPONENTS filesystem program_options REQUIRED)
-fwInclude(${Boost_INCLUDE_DIRS})
-fwLink(${Boost_LIBRARIES})
-
diff --git a/launcher/COPYING b/launcher/COPYING
deleted file mode 100644
index 2be1e50..0000000
--- a/launcher/COPYING
+++ /dev/null
@@ -1,675 +0,0 @@
-                     GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
-
-                     END OF TERMS AND CONDITIONS
-
-            How to Apply These Terms to Your New Programs
-
-  If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
-  To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-    <one line to give the program's name and a brief idea of what it does.>
-    Copyright (C) <year>  <name of author>
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation, either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-Also add information on how to contact you by electronic and paper mail.
-
-  If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-    <program>  Copyright (C) <year>  <name of author>
-    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-    This is free software, and you are welcome to redistribute it
-    under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License.  Of course, your program's commands
-might be different; for a GUI interface, you would use an "about box".
-
-  You should also get your employer (if you work as a programmer) or school,
-if any, to sign a "copyright disclaimer" for the program, if necessary.
-For more information on this, and how to apply and follow the GNU GPL, see
-<http://www.gnu.org/licenses/>.
-
-  The GNU General Public License does not permit incorporating your program
-into proprietary programs.  If your program is a subroutine library, you
-may consider it more useful to permit linking proprietary applications with
-the library.  If this is what you want to do, use the GNU Lesser General
-Public License instead of this License.  But first, please read
-<http://www.gnu.org/philosophy/why-not-lgpl.html>.
-
diff --git a/launcher/COPYING.LESSER b/launcher/COPYING.LESSER
deleted file mode 100644
index 3b1dc0e..0000000
--- a/launcher/COPYING.LESSER
+++ /dev/null
@@ -1,166 +0,0 @@
-                 GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
diff --git a/launcher/Properties.cmake b/launcher/Properties.cmake
deleted file mode 100644
index 80a51b1..0000000
--- a/launcher/Properties.cmake
+++ /dev/null
@@ -1,7 +0,0 @@
-
-set( NAME launcher )
-set( VERSION 0.1 )
-set( TYPE EXECUTABLE )
-set( DEPENDENCIES fwCore fwRuntime )
-set( REQUIREMENTS  )
-
diff --git a/launcher/bin/build.options b/launcher/bin/build.options
deleted file mode 100644
index 0c8f9f8..0000000
--- a/launcher/bin/build.options
+++ /dev/null
@@ -1,7 +0,0 @@
-USE   = ['boost', 'boostFilesystem', 'boostProgramOptions']
-LIB   = ['fwCore_0-1','fwRuntime_0-3']
-
-VERSION = '0-1'
-TYPE    = 'exec'
-
-#CONSOLE = 'yes'
diff --git a/launcher/bin/vc/fw4spl.ico b/launcher/bin/vc/fw4spl.ico
deleted file mode 100644
index d0c8883..0000000
Binary files a/launcher/bin/vc/fw4spl.ico and /dev/null differ
diff --git a/launcher/bin/vc/launcher.rc b/launcher/bin/vc/launcher.rc
deleted file mode 100755
index b8f9741..0000000
--- a/launcher/bin/vc/launcher.rc
+++ /dev/null
@@ -1,3 +0,0 @@
-// First icon in alphabetical order, so it will be used by Explorer if the
-// application doesn't have any icons of its own
-ICON_AAA    ICON   "fw4spl.ico"
diff --git a/launcher/src/ProfileRunner.cpp b/launcher/src/ProfileRunner.cpp
deleted file mode 100644
index 7df9c49..0000000
--- a/launcher/src/ProfileRunner.cpp
+++ /dev/null
@@ -1,340 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * FW4SPL - Copyright (C) IRCAD, 2009-2014.
- * Distributed under the terms of the GNU Lesser General Public License (LGPL) as
- * published by the Free Software Foundation.
- * ****** END LICENSE BLOCK ****** */
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#include <stdio.h>
-#include <ostream>
-#include <vector>
-#include <string>
-
-#include <boost/filesystem.hpp>
-#include <boost/foreach.hpp>
-
-#include <boost/program_options/options_description.hpp>
-#include <boost/program_options/parsers.hpp>
-#include <boost/program_options/positional_options.hpp>
-#include <boost/program_options/variables_map.hpp>
-
-#include <fwRuntime/operations.hpp>
-#include <fwRuntime/profile/Profile.hpp>
-#include <fwRuntime/io/ProfileReader.hpp>
-
-
-#ifdef _WIN32
-# define CONSOLE_LOG false;
-# define FILE_LOG true;
-#else
-# define CONSOLE_LOG true;
-# define FILE_LOG false;
-#endif
-
-#ifndef DEFAULT_PROFILE
-#define DEFAULT_PROFILE profile.xml
-#endif
-
-#define GET_DEFAULT_PROFILE(x) #x
-#define GET_DEFAULT_PROFILE2(x) GET_DEFAULT_PROFILE(x)
-#define DEFAULT_PROFILE_STRING  GET_DEFAULT_PROFILE2(DEFAULT_PROFILE)
-
-
-
-//------------------------------------------------------------------------------
-#if defined(_WIN32) && _MSC_VER > 1499 &&  _MSC_VER < 1600 // Visual C++ 2008 only
-
- #pragma message ( "Setting up manifest..." )
-
- #if defined(_DEBUG)
-     // add a dependency on the retail crt even in debug
-     #pragma comment(linker,"/manifestdependency:\"type='win32' " \
-             "name='" __LIBRARIES_ASSEMBLY_NAME_PREFIX ".CRT' "   \
-             "version='" _CRT_ASSEMBLY_VERSION "' "               \
-             "processorArchitecture='*' "                         \
-             "publicKeyToken='" _VC_ASSEMBLY_PUBLICKEYTOKEN "' "  \
-             "language='*'\"")
- #endif /* _DEBUG */
-
- #pragma comment(linker,"/manifestdependency:\"type='win32' " \
-        "name='Microsoft.Windows.Common-Controls' "           \
-        "version='6.0.0.0' "                                  \
-        "processorArchitecture='*' "                          \
-        "publicKeyToken='6595b64144ccf1df' "                  \
-        "language='*'\"")
-
-#endif /* _WIN32 && _MSC_VER > 1499 &&  _MSC_VER < 1600 */
-
-//------------------------------------------------------------------------------
-namespace po = boost::program_options;
-namespace fs = boost::filesystem;
-
-typedef fs::path PathType;
-typedef std::vector< PathType > PathListType;
-typedef std::vector< std::string > StringListType;
-
-namespace std {
-template<class A1, class A2>
-inline ostream& operator<<(ostream& s, vector<A1, A2> const& vec)
-{
-    copy(vec.begin(), vec.end(), ostream_iterator<A1>(s, " "));
-    return s;
-}
-}
-
-//-----------------------------------------------------------------------------
-
-#ifdef __MACOSX__
-std::pair<std::string, std::string> parsePns(const std::string& s)
-{
-    if (s.substr(0, 5) == "-psn_")
-    {
-        return std::make_pair(std::string("psn"), s.substr(5));
-    }
-    return std::make_pair(std::string(), std::string());
-}
-#endif
-
-/// Wrapper for boost::filesystem::absolute, needed by clang 3.0 in use with
-/// std::transform
-PathType absolute( const PathType &path )
-{
-    return fs::absolute(path);
-}
-
-//-----------------------------------------------------------------------------
-
-int main(int argc, char* argv[])
-{
-    PathListType bundlePaths;
-    PathType rwd;
-    PathType profileFile;
-    ::fwRuntime::profile::Profile::ParamsContainer profileArgs;
-
-    po::options_description options("Launcher options");
-#ifdef SPECIALINSTALL
-	options.add_options()
-        ("help,h", "Show help message")
-        ("bundle-path,B", po::value(&bundlePaths)->default_value(PathListType(1,BUNDLEPATH)),
-"Adds a bundle path")
-        ("rwd", po::value(&rwd)->default_value("./"), "Sets runtime working directory")
-        ;
-#else
-	options.add_options()
-        ("help,h", "Show help message")
-        ("bundle-path,B", po::value(&bundlePaths)->default_value(PathListType(1,"./Bundles/")),
-"Adds a bundle path")
-        ("rwd", po::value(&rwd)->default_value("./"), "Sets runtime working directory")
-        ;
-	#endif
-
-    bool consoleLog = CONSOLE_LOG;
-    bool fileLog = FILE_LOG;
-    std::string logFile;
-    const std::string defaultLogFile = "SLM.log";
-
-    typedef ::fwCore::log::SpyLogger SpyLogger;
-    int logLevel = SpyLogger::SL_TRACE;
-
-    po::options_description logOptions("Log options");
-    logOptions.add_options()
-        ("clog", po::value(&consoleLog)->implicit_value(true)->zero_tokens(), "Enable log output to console")
-        ("no-clog", po::value(&consoleLog)->implicit_value(false)->zero_tokens(), "Disable log output to console")
-        ("flog", po::value(&fileLog)->implicit_value(true)->zero_tokens(), "Enable log output to file")
-        ("no-flog", po::value(&fileLog)->implicit_value(false)->zero_tokens(), "Disable log output to file")
-        ("log-output", po::value(&logFile)->default_value(defaultLogFile), "Log output filename")
-
-        ("log-trace", po::value(&logLevel)->implicit_value(SpyLogger::SL_TRACE)->zero_tokens(), "Set loglevel to trace")
-        ("log-debug", po::value(&logLevel)->implicit_value(SpyLogger::SL_DEBUG)->zero_tokens(), "Set loglevel to debug")
-        ("log-info",  po::value(&logLevel)->implicit_value(SpyLogger::SL_INFO )->zero_tokens(), "Set loglevel to info")
-        ("log-warn",  po::value(&logLevel)->implicit_value(SpyLogger::SL_WARN )->zero_tokens(), "Set loglevel to warn")
-        ("log-error", po::value(&logLevel)->implicit_value(SpyLogger::SL_ERROR)->zero_tokens(), "Set loglevel to error")
-        ("log-fatal", po::value(&logLevel)->implicit_value(SpyLogger::SL_FATAL)->zero_tokens(), "Set loglevel to fatal")
-        ;
-
-    po::options_description hidden("Hidden options");
-    hidden.add_options()
-#ifdef __MACOSX__
-        ("psn", po::value<std::string>(), "Application PSN number")
-#endif
-        ("profile", po::value(&profileFile)->default_value(DEFAULT_PROFILE_STRING), "Profile file")
-        ("profile-args", po::value(&profileArgs)->multitoken(), "Profile args")
-        ;
-
-    po::options_description cmdline_options;
-    cmdline_options.add(options).add(logOptions).add(hidden);
-
-    po::positional_options_description p;
-    p.add("profile", 1).add("profile-args", -1);
-
-    po::variables_map vm;
-
-    try
-    {
-        po::store(po::command_line_parser(argc, argv)
-                .options(cmdline_options)
-#ifdef __MACOSX__
-                .extra_parser(parsePns)
-#endif
-                .positional(p)
-                .run(),
-                vm);
-        po::notify(vm);
-    }
-    catch(const po::error &e)
-    {
-        std::cerr << e.what() << std::endl;
-        return 1;
-    }
-
-    if (vm.count("help"))
-    {
-        std::cout << "usage: " << argv[0] << " [options] [profile(=profile.xml)] [profile-args ...]" << std::endl;
-        std::cout << "  use '--' to stop processing args for launcher" << std::endl  << std::endl;
-        std::cout << options << std::endl << logOptions << std::endl;
-        return 0;
-    }
-
-    SpyLogger &logger = fwCore::log::SpyLogger::getSpyLogger();
-
-    if(consoleLog)
-    {
-        logger.addStreamAppender(std::clog, static_cast<SpyLogger::LevelType>(logLevel));
-    }
-
-    if(fileLog)
-    {
-        FILE * pFile = fopen(logFile.c_str(), "w");
-        if (pFile==NULL)
-        {
-            ::boost::system::error_code err;
-            PathType sysTmp = fs::temp_directory_path(err);
-            if(err.value() != 0)
-            {
-                // replace log file appender by stream appender: default dir and temp dir unreachable
-                logger.addStreamAppender(std::clog, static_cast<SpyLogger::LevelType>(logLevel));
-            }
-            else
-            {
-                // creates SLM.log in temp directory: default dir unreachable
-                sysTmp = sysTmp / "SLM.log";
-                logFile = sysTmp.string();
-                logger.addFileAppender(logFile, static_cast<SpyLogger::LevelType>(logLevel));
-            }
-        }
-        else
-        {
-            // creates SLM.log in default logFile directory
-            fclose(pFile);
-            logger.addFileAppender(logFile, static_cast<SpyLogger::LevelType>(logLevel));
-        }
-    }
-
-#ifdef __MACOSX__
-    fs::path execPath = argv[0];
-
-    if ( execPath.string().find(".app/") != std::string::npos || vm.count("psn"))
-    {
-        bool isChdirOkOSX = false;
-
-        fs::path execPath = argv[0];
-
-        while ( fs::extension(execPath) != ".app"
-                && execPath != execPath.parent_path()
-                && !fs::is_directory( execPath / "Bundles" )
-                )
-        {
-            execPath = execPath.parent_path();
-        }
-
-        if ( fs::is_directory( execPath / "Contents" / "Bundles" ) )
-        {
-            execPath = execPath / "Contents";
-        }
-        else
-        {
-            OSLM_ERROR_IF("Bundle directory not found.", !fs::is_directory( execPath / "Bundles" ));
-        }
-
-        isChdirOkOSX = (chdir(execPath.string().c_str()) == 0);
-
-        SLM_ERROR_IF("Was not able to find a directory to change to.", !isChdirOkOSX);
-    }
-#endif
-
-    OSLM_INFO_IF( "Bundle paths are: "  << bundlePaths << std::endl, vm.count("bundle-path") );
-    OSLM_INFO_IF( "Profile: "           << profileFile << std::endl, vm.count("profile"));
-    OSLM_INFO_IF( "Profile-args: "      << profileArgs << std::endl, vm.count("profile-args") );
-
-    std::transform( bundlePaths.begin(), bundlePaths.end(), bundlePaths.begin(), absolute );
-    profileFile = fs::absolute(profileFile);
-
-    bool isChdirOk = false;
-#ifdef _WIN32
-        isChdirOk = (bool)(SetCurrentDirectory(rwd.string().c_str()) != 0);
-#else
-        isChdirOk = ( chdir(rwd.string().c_str()) == 0 );
-#endif // _WIN32
-    OSLM_ERROR_IF( "Was not able to change directory to : " << rwd , !isChdirOk);
-
-    BOOST_FOREACH(const fs::path &bundlePath, bundlePaths )
-    {
-        if ( fs::is_directory(bundlePath))
-        {
-            ::fwRuntime::addBundles( bundlePath );
-        }
-        else
-        {
-            OSLM_ERROR( "Bundle path " << bundlePath << " do not exists or is not a directory.");
-        }
-    }
-
-    int retValue = 0;
-
-    if ( fs::is_regular_file(profileFile))
-    {
-        ::fwRuntime::profile::Profile::sptr profile;
-
-        try
-        {
-            profile = ::fwRuntime::io::ProfileReader::createProfile(profileFile);
-            ::fwRuntime::profile::setCurrentProfile(profile);
-
-            profile->setParams(profileArgs);
-
-            profile->start();
-            profile->run();
-            profile->stop();
-        }
-        catch(std::exception &e)
-        {
-            OSLM_FATAL( e.what() );
-            retValue = 1;
-        }
-        catch(...)
-        {
-            SLM_FATAL( "An unrecoverable error has occurred." );
-            retValue = 1;
-        }
-    }
-    else
-    {
-        OSLM_ERROR( "Profile file " << profileFile << " do not exists or is not a regular file.");
-        retValue = 1;
-    }
-
-    return retValue;
-}
-
-//-----------------------------------------------------------------------------
-
-#ifdef _WIN32
-int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR args, int)
-{
-    return main(__argc, __argv);
-}
-#endif // _WIN32
-

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/fw4spl.git



More information about the debian-med-commit mailing list